]> git.openstreetmap.org Git - rails.git/commitdiff
Update to iD v2.14.0
authorQuincy Morgan <quincy.morgan@icloud.com>
Wed, 20 Feb 2019 21:43:54 +0000 (16:43 -0500)
committerQuincy Morgan <quincy.morgan@icloud.com>
Wed, 20 Feb 2019 21:43:54 +0000 (16:43 -0500)
74 files changed:
vendor/assets/iD/iD.css.erb
vendor/assets/iD/iD.js
vendor/assets/iD/iD/img/fa-sprite.svg
vendor/assets/iD/iD/img/iD-sprite.svg
vendor/assets/iD/iD/locales/af.json
vendor/assets/iD/iD/locales/ar-AA.json
vendor/assets/iD/iD/locales/ar.json
vendor/assets/iD/iD/locales/ast.json
vendor/assets/iD/iD/locales/bg.json
vendor/assets/iD/iD/locales/bn.json
vendor/assets/iD/iD/locales/bs.json
vendor/assets/iD/iD/locales/ca.json
vendor/assets/iD/iD/locales/ckb.json
vendor/assets/iD/iD/locales/cs.json
vendor/assets/iD/iD/locales/cy.json
vendor/assets/iD/iD/locales/da.json
vendor/assets/iD/iD/locales/de.json
vendor/assets/iD/iD/locales/el.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/eu.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/gu.json
vendor/assets/iD/iD/locales/he.json
vendor/assets/iD/iD/locales/hi.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/is.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/lt.json
vendor/assets/iD/iD/locales/lv.json
vendor/assets/iD/iD/locales/mg.json
vendor/assets/iD/iD/locales/mk.json
vendor/assets/iD/iD/locales/ms.json
vendor/assets/iD/iD/locales/nl.json
vendor/assets/iD/iD/locales/no.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/si.json
vendor/assets/iD/iD/locales/sk.json
vendor/assets/iD/iD/locales/sl.json
vendor/assets/iD/iD/locales/so.json
vendor/assets/iD/iD/locales/sq.json
vendor/assets/iD/iD/locales/sr.json
vendor/assets/iD/iD/locales/sv.json
vendor/assets/iD/iD/locales/ta.json
vendor/assets/iD/iD/locales/te.json
vendor/assets/iD/iD/locales/th.json
vendor/assets/iD/iD/locales/tl.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/locales/zh.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

index efa6e278a55c8e7bed699d737f636922c69862f9..3cfd4ec02e133e722e0f4e1f5f0ac993b2d1c983 100644 (file)
@@ -196,7 +196,8 @@ input::-moz-focus-inner {
 /* No interactivity except what we specifically allow */
 .data-layer.osm *,
 .data-layer.notes *,
-.data-layer.keepRight * {
+.data-layer.keepRight *,
+.data-layer.improveOSM * {
     pointer-events: none;
 }
 
@@ -207,7 +208,7 @@ input::-moz-focus-inner {
 
 /* `.target` objects are interactive */
 /* They can be picked up, clicked, hovered, or things can connect to them */
-.kr_error.target,
+.qa_error.target,
 .note.target,
 .node.target,
 .turn .target {
@@ -242,11 +243,10 @@ input::-moz-focus-inner {
     pointer-events: none !important;
 }
 
-/* NOTE: when more QA layers are added, replace kr_error with generic QA layer selector */
 /* points, notes & QA */
 
 /* points, notes, markers */
-g.kr_error .stroke,
+g.qa_error .stroke,
 g.note .stroke {
     stroke: #222;
     stroke-width: 1;
@@ -254,7 +254,7 @@ g.note .stroke {
     opacity: 0.6;
 }
 
-g.kr_error.active .stroke,
+g.qa_error.active .stroke,
 g.note.active .stroke {
     stroke: #222;
     stroke-width: 1;
@@ -268,7 +268,7 @@ g.point .stroke {
     fill: #fff;
 }
 
-g.kr_error .shadow,
+g.qa_error .shadow,
 g.point .shadow,
 g.note .shadow {
     fill: none;
@@ -277,14 +277,14 @@ g.note .shadow {
     stroke-opacity: 0;
 }
 
-g.kr_error.hover:not(.selected) .shadow,
+g.qa_error.hover:not(.selected) .shadow,
 g.note.hover:not(.selected) .shadow,
 g.point.related:not(.selected) .shadow,
 g.point.hover:not(.selected) .shadow {
     stroke-opacity: 0.5;
 }
 
-g.kr_error.selected .shadow,
+g.qa_error.selected .shadow,
 g.note.selected .shadow,
 g.point.selected .shadow {
     stroke-opacity: 0.7;
@@ -340,8 +340,10 @@ g.vertex.selected .shadow {
 
 /* lines */
 .preset-icon .icon.iD-other-line {
-    color: #fff;
-    fill: #777;
+    color: #989898;
+}
+.preset-icon-line path.casing {
+    stroke: #afafaf;
 }
 
 path.line {
@@ -486,7 +488,6 @@ g.vertex.highlighted .shadow {
     stroke: #68f;
 }
 
-
 /* Default - light gray */
 path.area.stroke {
     stroke: rgb(170, 170, 170);
@@ -519,10 +520,10 @@ path.stroke.tag-leisure-track,
 path.stroke.tag-leisure-golf_course,
 path.stroke.tag-leisure-garden,
 path.stroke.tag-leisure-park,
-path.stroke.tag-barrier-hedge,
 path.stroke.tag-landuse-forest,
 path.stroke.tag-landuse-wood,
-path.stroke.tag-landuse-grass {
+path.stroke.tag-landuse-grass,
+path.stroke.tag-barrier-hedge {
     stroke: rgb(140, 208, 95);
 }
 path.fill.tag-landuse,
@@ -535,7 +536,8 @@ path.fill.tag-leisure-garden,
 path.fill.tag-leisure-park,
 path.fill.tag-landuse-forest,
 path.fill.tag-natural-wood,
-path.fill.tag-landuse-grass {
+path.fill.tag-landuse-grass,
+path.fill.tag-barrier-hedge {
     stroke: rgba(140, 208, 95, 0.3);
     fill: rgba(140, 208, 95, 0.3);
 }
@@ -571,8 +573,6 @@ path.stroke.tag-landuse-aquaculture,
 path.stroke.tag-landuse-basin,
 path.stroke.tag-landuse-harbour,
 path.stroke.tag-landuse-reservoir,
-path.stroke.tag-man_made-groyne,
-path.stroke.tag-man_made-breakwater,
 path.stroke.tag-natural-water {
     stroke: rgb(119, 211, 222);
 }
@@ -659,7 +659,7 @@ path.fill.tag-amenity-university {
 
 /* Gold things */
 path.stroke.tag-landuse-residential,
-path.stroke.tag-landuse-construction {
+path.stroke.tag-status-construction {
     stroke: rgb(196, 189, 25);
 }
 path.fill.tag-landuse-residential {
@@ -667,7 +667,7 @@ path.fill.tag-landuse-residential {
     fill: rgba(196, 189, 25, 0.3);
 }
 .preset-icon-fill-area.tag-landuse-residential,
-.preset-icon-fill-area.tag-landuse-construction {
+.preset-icon-fill-area.tag-status-construction {
     border-color: rgb(196, 189, 25);
     background: rgba(196, 189, 25, 0.3);
 }
@@ -786,31 +786,41 @@ path.fill.tag-landuse-farmyard {
 
 /* Dark Gray things */
 path.stroke.tag-amenity-parking,
+path.stroke.tag-landuse-railway,
+path.stroke.tag-landuse-quarry,
 path.stroke.tag-leisure-pitch.tag-sport-basketball,
 path.stroke.tag-leisure-pitch.tag-sport-skateboard,
+path.stroke.tag-man_made-groyne,
+path.stroke.tag-man_made-breakwater,
 path.stroke.tag-natural-bare_rock,
 path.stroke.tag-natural-scree,
-path.stroke.tag-landuse-railway,
-path.stroke.tag-landuse-quarry {
+path.stroke.tag-waterway-dam,
+path.stroke.tag-waterway-weir {
     stroke: rgb(170, 170, 170);
 }
 path.fill.tag-amenity-parking,
+path.fill.tag-landuse-railway,
+path.fill.tag-landuse-quarry,
 path.fill.tag-leisure-pitch.tag-sport-basketball,
 path.fill.tag-leisure-pitch.tag-sport-skateboard,
+path.fill.tag-man_made-groyne,
+path.fill.tag-man_made-breakwater,
 path.fill.tag-natural-bare_rock,
 path.fill.tag-natural-scree,
-path.fill.tag-landuse-railway,
-path.fill.tag-landuse-quarry {
+path.fill.tag-waterway-dam,
+path.fill.tag-waterway-weir {
     stroke: rgba(140, 140, 140, 0.5);
     fill: rgba(140, 140, 140, 0.5);
 }
 .preset-icon-fill-area.tag-amenity-parking,
+.preset-icon-fill-area.tag-landuse-railway,
+.preset-icon-fill-area.tag-landuse-quarry,
 .preset-icon-fill-area.tag-leisure-pitch.tag-sport-basketball,
 .preset-icon-fill-area.tag-leisure-pitch.tag-sport-skateboard,
 .preset-icon-fill-area.tag-natural-bare_rock,
 .preset-icon-fill-area.tag-natural-scree,
-.preset-icon-fill-area.tag-landuse-railway,
-.preset-icon-fill-area.tag-landuse-quarry {
+.preset-icon-fill-area.tag-waterway-dam,
+.preset-icon-fill-area.tag-waterway-weir {
     border-color: rgb(170, 170, 170);
     background-color: rgba(140, 140, 140, 0.5);
 }
@@ -868,8 +878,8 @@ path.line.stroke.tag-highway {
     stroke-width: 5;
 }
 
-.preset-icon .icon.iD-highway-motorway,
-.preset-icon .icon.iD-highway-motorway-link {
+.preset-icon .icon.tag-highway-motorway,
+.preset-icon .icon.tag-highway-motorway_link {
     color: #CF2081;
     fill: #70372f;
 }
@@ -884,8 +894,8 @@ path.line.casing.tag-motorway {
     stroke: #70372f;
 }
 
-.preset-icon .icon.iD-highway-trunk,
-.preset-icon .icon.iD-highway-trunk-link {
+.preset-icon .icon.tag-highway-trunk,
+.preset-icon .icon.tag-highway-trunk_link {
     color: #DD2F22;
     fill: #70372f;
 }
@@ -900,8 +910,8 @@ path.line.casing.tag-trunk {
     stroke: #70372f;
 }
 
-.preset-icon .icon.iD-highway-primary,
-.preset-icon .icon.iD-highway-primary-link {
+.preset-icon .icon.tag-highway-primary,
+.preset-icon .icon.tag-highway-primary_link {
     color: #F99806;
     fill: #70372f;
 }
@@ -916,8 +926,8 @@ path.line.casing.tag-primary {
     stroke: #70372f;
 }
 
-.preset-icon .icon.iD-highway-secondary,
-.preset-icon .icon.iD-highway-secondary-link {
+.preset-icon .icon.tag-highway-secondary,
+.preset-icon .icon.tag-highway-secondary_link {
     color: #F3F312;
     fill: #70372f;
 }
@@ -932,8 +942,8 @@ path.line.casing.tag-secondary {
     stroke: #70372f;
 }
 
-.preset-icon .icon.iD-highway-tertiary,
-.preset-icon .icon.iD-highway-tertiary-link {
+.preset-icon .icon.tag-highway-tertiary,
+.preset-icon .icon.tag-highway-tertiary_link {
     color: #FFF9B3;
     fill: #70372f;
 }
@@ -948,8 +958,8 @@ path.line.casing.tag-tertiary {
     stroke: #70372f;
 }
 
-.legacy-carto .preset-icon .icon.iD-highway-motorway,
-.legacy-carto .preset-icon .icon.iD-highway-motorway-link {
+.legacy-carto .preset-icon .icon.tag-highway-motorway,
+.legacy-carto .preset-icon .icon.tag-highway-motorway_link {
     color: #58a9ed;
     fill: #2c5476;
 }
@@ -964,8 +974,8 @@ path.line.casing.tag-tertiary {
     stroke: #2c5476;
 }
 
-.legacy-carto .preset-icon .icon.iD-highway-trunk,
-.legacy-carto .preset-icon .icon.iD-highway-trunk-link {
+.legacy-carto .preset-icon .icon.tag-highway-trunk,
+.legacy-carto .preset-icon .icon.tag-highway-trunk_link {
     color: #8cd05f;
     fill: #46682f;
 }
@@ -980,8 +990,8 @@ path.line.casing.tag-tertiary {
     stroke: #46682f;
 }
 
-.legacy-carto .preset-icon .icon.iD-highway-primary,
-.legacy-carto .preset-icon .icon.iD-highway-primary-link {
+.legacy-carto .preset-icon .icon.tag-highway-primary,
+.legacy-carto .preset-icon .icon.tag-highway-primary_link {
     color: #e06d5f;
     fill: #70372f;
 }
@@ -996,8 +1006,8 @@ path.line.casing.tag-tertiary {
     stroke: #70372f;
 }
 
-.legacy-carto .preset-icon .icon.iD-highway-secondary,
-.legacy-carto .preset-icon .icon.iD-highway-secondary-link {
+.legacy-carto .preset-icon .icon.tag-highway-secondary,
+.legacy-carto .preset-icon .icon.tag-highway-secondary_link {
     color: #eab056;
     fill: #75582b;
 }
@@ -1012,8 +1022,8 @@ path.line.casing.tag-tertiary {
     stroke: #75582b;
 }
 
-.legacy-carto .preset-icon .icon.iD-highway-tertiary,
-.legacy-carto .preset-icon .icon.iD-highway-tertiary-link {
+.legacy-carto .preset-icon .icon.tag-highway-tertiary,
+.legacy-carto .preset-icon .icon.tag-highway-tertiary_link {
     color: #ffff7e;
     fill: #7f7f3f;
 }
@@ -1028,7 +1038,7 @@ path.line.casing.tag-tertiary {
     stroke: #7f7f3f;
 }
 
-.preset-icon .icon.iD-highway-residential {
+.preset-icon .icon.tag-highway-residential {
     color: #fff;
     fill: #444;
 }
@@ -1041,7 +1051,7 @@ path.line.casing.tag-residential {
     stroke: #444;
 }
 
-.preset-icon .icon.iD-highway-unclassified {
+.preset-icon .icon.tag-highway-unclassified {
     color: #dca;
     fill: #444;
 }
@@ -1223,7 +1233,7 @@ path.line.stroke.tag-steps {
 }
 
 
-.preset-icon .icon.iD-highway-living-street {
+.preset-icon .icon.tag-highway-living-street {
     color: #bbb;
     fill: #ddd;
 }
@@ -1236,8 +1246,8 @@ path.line.casing.tag-living_street {
     stroke: #fff;
 }
 
-.preset-icon .icon.iD-highway-footway.tag-highway-corridor,
-.preset-icon .icon.iD-highway-footway.tag-highway-pedestrian {
+.preset-icon .icon.tag-highway-corridor,
+.preset-icon .icon.tag-highway-pedestrian {
     color: #8cd05f;
     fill: #fff;
 }
@@ -1267,7 +1277,7 @@ path.line.casing.tag-pedestrian.tag-unpaved {
     stroke-dasharray: none;
 }
 
-.preset-icon .icon.iD-highway-road {
+.preset-icon .icon.tag-highway-road {
     color: #9e9e9e;
     fill: #666;
 }
@@ -1280,7 +1290,7 @@ path.line.casing.tag-road {
     stroke: #666;
 }
 
-.preset-icon .icon.iD-highway-service {
+.preset-icon .icon.tag-highway-service {
     color: #fff;
     fill: #666;
 }
@@ -1294,9 +1304,9 @@ path.line.casing.tag-service {
 }
 
 /* special service roads and bus guideways */
-/* with `service=* tag`  (e.g. parking_aisle, alley, drive-through */
-.preset-icon .icon.iD-highway-bus_guideway,
-.preset-icon .icon.iD-highway-service.tag-service {
+/* with `service=* tag`  (e.g. parking_aisle, alley, drive-through) */
+.preset-icon .icon.tag-highway-bus_guideway,
+.preset-icon .icon.tag-highway-service.tag-service {
     color: #dca;
     fill: #666;
 }
@@ -1311,7 +1321,7 @@ path.line.casing.tag-service.tag-service {
     stroke: #666;
 }
 
-.preset-icon .icon.iD-highway-track {
+.preset-icon .icon.tag-highway-track {
     color: #eaeaea;
     fill: #c5b59f;
 }
@@ -1357,7 +1367,7 @@ path.line.casing.tag-highway-bridleway.tag-unpaved {
 }
 
 .preset-icon .icon.iD-category-path,
-.preset-icon .icon.iD-highway-path {
+.preset-icon .icon.tag-highway-path {
     color: #988;
     fill: #dca;
 }
@@ -1367,39 +1377,49 @@ path.line.stroke.tag-highway-path {
 
 .preset-icon .icon.tag-route-foot,
 .preset-icon .icon.tag-route-hiking,
-.preset-icon .icon.iD-highway-footway {
+.preset-icon .icon.tag-highway-footway {
     color: #988;
     fill: #fff;
 }
-path.line.stroke.tag-highway-footway {
+path.line.stroke.tag-highway-footway,
+.preset-icon-line path.casing.tag-highway-footway {
     stroke: #988;
 }
-
+.preset-icon-line path.stroke.tag-highway-footway {
+    stroke: #fff;
+}
 
 .preset-icon .icon.tag-route-bicycle,
-.preset-icon .icon.iD-highway-cycleway {
+.preset-icon .icon.tag-highway-cycleway {
     color: #58a9ed;
     fill: #fff;
 }
-path.line.stroke.tag-highway-cycleway {
+path.line.stroke.tag-highway-cycleway,
+.preset-icon-line path.casing.tag-highway-cycleway {
     stroke: #58a9ed;
 }
+.preset-icon-line path.stroke.tag-highway-cycleway {
+    stroke: #fff;
+}
 
 .preset-icon .icon.tag-route-horse,
-.preset-icon .icon.iD-highway-bridleway {
+.preset-icon .icon.tag-highway-bridleway {
     color: #e06d5f;
     fill: #fff;
 }
-path.line.stroke.tag-highway-bridleway {
+path.line.stroke.tag-highway-bridleway,
+.preset-icon-line path.casing.tag-highway-bridleway {
     stroke: #e06d5f;
 }
+.preset-icon-line path.stroke.tag-highway-bridleway {
+    stroke: #fff;
+}
 
-.preset-icon .icon.iD-highway-steps {
+.preset-icon .icon.tag-highway-steps {
     color: #81d25c;
     fill: #fff;
 }
 path.line.stroke.tag-highway-steps {
-    stroke: #81d25c;
     stroke-linecap: butt;
     stroke-dasharray: 3, 3;
 }
@@ -1412,6 +1432,13 @@ path.line.casing.tag-highway-steps.tag-unpaved {
     stroke-linecap: round;
     stroke-dasharray: none;
 }
+path.line.stroke.tag-highway-steps,
+.preset-icon-line path.line.casing.tag-highway-steps {
+    stroke: #81d25c;
+}
+.preset-icon-line path.line.stroke.tag-highway-steps {
+    stroke: #fff;
+}
 
 /* highway midpoints */
 g.midpoint.tag-highway-corridor .fill,
@@ -1511,7 +1538,9 @@ path.line.stroke.tag-aeroway-runway {
     stroke-width: 2;
     stroke-dasharray: 12, 24;
 }
-
+.preset-icon-line path.line.stroke.tag-aeroway-runway {
+    stroke-dasharray: 0, 14, 8, 14;
+}
 /* railways */
 
 /* defaults */
@@ -1547,7 +1576,9 @@ path.line.stroke.tag-railway {
     stroke-width: 2;
     stroke-dasharray: 6,6;
 }
-
+.preset-icon-line path.line.stroke.tag-railway:not(.tag-status) {
+    stroke-dasharray: 6;
+}
 
 /* styles */
 path.line.casing.tag-railway {
@@ -1573,10 +1604,6 @@ path.line.stroke.tag-railway-abandoned {
 }
 
 
-.preset-icon .icon.tag-railway-subway {
-    color: #222;
-    fill: #bbb;
-}
 path.line.casing.tag-railway-subway {
     stroke: #222;
 }
@@ -1587,26 +1614,16 @@ path.line.stroke.tag-railway-subway {
 
 /* defaults */
 .preset-icon .icon.tag-waterway.other-line {
-    color: #77d3de;
-    fill: #77d3de;
+    color: #7dd;
+    fill: #7dd;
 }
 .preset-icon .icon.iD-category-water,
 .preset-icon .icon.tag-type-waterway,
 .preset-icon .icon.tag-waterway {
-    color: #77d3de;
+    color: #7dd;
     fill: #fff;
 }
 
-path.fill.tag-waterway {
-    stroke: rgba(119, 211, 222, 0.3);
-    fill: rgba(119, 211, 222, 0.3);
-}
-path.line.casing.tag-waterway {
-    stroke: #3d6c71;
-}
-path.line.stroke.tag-waterway {
-    stroke: #77d3de;
-}
 
 /* areas */
 path.area.stroke.tag-waterway-dock,
@@ -1628,15 +1645,15 @@ path.area.fill.tag-waterway-fuel {
 }
 
 /* lines */
-path.fill.tag-waterway {
+path.line.fill.tag-waterway {
     stroke: rgba(119, 211, 222, 0.3);
     fill: rgba(119, 211, 222, 0.3);
 }
 path.line.casing.tag-waterway {
-    stroke: #3d6c71;
+    stroke: #444;
 }
 path.line.stroke.tag-waterway {
-    stroke: #77d3de;
+    stroke: #7dd;
 }
 
 
@@ -1686,10 +1703,68 @@ path.line.stroke.tag-waterway-river {
 
 /* ditch */
 .preset-icon .icon.tag-waterway-ditch {
-    color: #8eabf3;
+    color: #39a;
 }
 path.line.stroke.tag-waterway-ditch {
-    stroke: #8eabf3;
+    stroke: #39a;
+}
+
+
+/* narrow width miscellanous things */
+path.line.shadow.tag-aerialway,
+path.line.shadow.tag-attraction-summer_toboggan,
+path.line.shadow.tag-attraction-water_slide,
+path.line.shadow.tag-golf-cartpath,
+path.line.shadow.tag-man_made-pipeline,
+path.line.shadow.tag-natural-tree_row,
+path.line.shadow.tag-piste {
+    stroke-width: 16;
+}
+path.line.casing.tag-aerialway,
+path.line.casing.tag-attraction-summer_toboggan,
+path.line.casing.tag-attraction-water_slide,
+path.line.casing.tag-golf-cartpath,
+path.line.casing.tag-man_made-pipeline,
+path.line.casing.tag-natural-tree_row,
+path.line.casing.tag-piste {
+    stroke-width: 7;
+}
+path.line.stroke.tag-aerialway,
+path.line.stroke.tag-attraction-summer_toboggan,
+path.line.stroke.tag-attraction-water_slide,
+path.line.stroke.tag-golf-cartpath,
+path.line.stroke.tag-man_made-pipeline,
+path.line.stroke.tag-natural-tree_row,
+path.line.stroke.tag-piste {
+    stroke-width: 5;
+}
+
+.low-zoom path.line.shadow.tag-aerialway,
+.low-zoom path.line.shadow.tag-attraction-summer_toboggan,
+.low-zoom path.line.shadow.tag-attraction-water_slide,
+.low-zoom path.line.shadow.tag-golf-cartpath,
+.low-zoom path.line.shadow.tag-man_made-pipeline,
+.low-zoom path.line.shadow.tag-natural-tree_row,
+.low-zoom path.line.shadow.tag-piste {
+    stroke-width: 12;
+}
+.low-zoom path.line.casing.tag-aerialway,
+.low-zoom path.line.casing.tag-attraction-summer_toboggan,
+.low-zoom path.line.casing.tag-attraction-water_slide,
+.low-zoom path.line.casing.tag-golf-cartpath,
+.low-zoom path.line.casing.tag-man_made-pipeline,
+.low-zoom path.line.casing.tag-natural-tree_row,
+.low-zoom path.line.casing.tag-piste {
+    stroke-width: 5;
+}
+.low-zoom path.line.stroke.tag-aerialway,
+.low-zoom path.line.stroke.tag-attraction-summer_toboggan,
+.low-zoom path.line.stroke.tag-attraction-water_slide,
+.low-zoom path.line.stroke.tag-golf-cartpath,
+.low-zoom path.line.stroke.tag-man_made-pipeline,
+.low-zoom path.line.stroke.tag-natural-tree_row,
+.low-zoom path.line.stroke.tag-piste {
+    stroke-width: 3;
 }
 
 
@@ -1709,13 +1784,64 @@ path.line.stroke.tag-route-ferry {
 .low-zoom path.line.shadow.tag-route-ferry {
     stroke-width: 12;
 }
-.low-zoom path.line.stroke.tag-route-ferry {
+.low-zoom path.line.stroke.tag-route-ferry,
+.preset-icon-line path.line.stroke.tag-route-ferry {
     stroke-width: 2;
     stroke-dasharray: 6,4;
 }
 path.line.stroke.tag-route-ferry {
     stroke: #58a9ed;
 }
+path.line.casing.tag-route-ferry {
+    stroke: none;
+}
+
+
+/* aerialways */
+path.line.stroke.tag-aerialway {
+    stroke: #c55;
+}
+path.line.casing.tag-aerialway {
+    stroke: #444;
+}
+
+
+/* pistes */
+path.line.stroke.tag-piste {
+    stroke: #a9d;
+}
+path.line.casing.tag-piste {
+    stroke: #444;
+}
+
+
+/* Attractions */
+path.line.stroke.tag-attraction-summer_toboggan {
+    stroke: #9e9e9e;
+}
+path.line.casing.tag-attraction-summer_toboggan {
+    stroke: #666;
+}
+
+path.line.stroke.tag-attraction-water_slide {
+    stroke: #aae0cb;
+}
+path.line.casing.tag-attraction-water_slide {
+    stroke: #3d6c71;
+}
+
+
+/* golf cartpaths (like service roads) */
+.preset-icon .icon.tag-golf-cartpath {
+    color: #dca;
+    fill: #666;
+}
+path.line.stroke.tag-golf-cartpath {
+    stroke: #dca;
+}
+path.line.casing.tag-golf-cartpath {
+    stroke: #666;
+}
 
 
 /* power and pipeline */
@@ -1725,6 +1851,7 @@ path.line.stroke.tag-route-ferry {
     fill: #939393;
 }
 
+
 /* power */
 path.line.stroke.tag-power {
     stroke: #939393;
@@ -1734,20 +1861,23 @@ path.line.casing.tag-power {
     stroke: none;
 }
 
+
 /* pipeline */
 path.line.stroke.tag-man_made-pipeline {
     stroke: #cbd0d8;
     stroke-linecap: butt;
-    stroke-width: 3;
     stroke-dasharray: 80, 1.25;
 }
 path.line.casing.tag-man_made-pipeline {
     stroke: #666;
-    stroke-width: 4.5;
 }
 .low-zoom path.line.stroke.tag-man_made-pipeline {
     stroke-dasharray: 40, 1;
 }
+.preset-icon-line path.line.stroke.tag-man_made-pipeline {
+    stroke-dasharray: 19, 1;
+}
+
 
 /* boundaries */
 path.line.stroke.tag-boundary {
@@ -1767,45 +1897,38 @@ path.line.casing.tag-boundary-national_park {
 }
 
 
-/* Tree Rows */
-path.line.shadow.tag-natural-tree_row {
-    stroke-width: 16;
-}
-path.line.casing.tag-natural-tree_row {
-    stroke-width: 7;
-}
-path.line.stroke.tag-natural-tree_row {
-    stroke-width: 5;
-}
-.low-zoom path.line.shadow.tag-natural-tree_row {
-    stroke-width: 12;
-}
-.low-zoom path.line.casing.tag-natural-tree_row {
-    stroke-width: 5;
-}
-.low-zoom path.line.stroke.tag-natural-tree_row {
-    stroke-width: 3;
-}
-
-
 /* barriers and similar */
 path.line.stroke.tag-barrier:not(.tag-barrier-hedge) {
     stroke: #ddd;
 }
+.preset-icon-line path.line.stroke.tag-barrier:not(.tag-barrier-hedge) {
+    stroke: rgb(170, 170, 170);
+}
+path.line.casing.tag-natural,
+path.line.casing.tag-barrier,
+path.line.casing.tag-man_made-groyne,
+path.line.casing.tag-man_made-breakwater {
+    stroke: none;
+}
 path.line.stroke.tag-barrier,
-path.stroke.tag-man_made-groyne,
-path.stroke.tag-man_made-breakwater {
+path.line.stroke.tag-man_made-groyne,
+path.line.stroke.tag-man_made-breakwater {
     stroke-width: 3px;
     stroke-linecap: round;
     stroke-dasharray: 15, 5, 1, 5;
 }
 .low-zoom path.line.stroke.tag-barrier,
-.low-zoom path.stroke.tag-man_made-groyne,
-.low-zoom path.stroke.tag-man_made-breakwater {
+.low-zoom path.line.stroke.tag-man_made-groyne,
+.low-zoom path.line.stroke.tag-man_made-breakwater {
     stroke-width: 2px;
     stroke-linecap: butt;
     stroke-dasharray: 8, 2, 2, 2;
 }
+.preset-icon-line path.line.stroke.tag-barrier,
+.preset-icon-line path.line.stroke.tag-man_made-groyne,
+.preset-icon-line path.line.stroke.tag-man_made-breakwater {
+    stroke-dasharray: 1, 4, 6, 4;
+}
 
 
 /* bridges */
@@ -1957,7 +2080,7 @@ path.line.casing.tag-status {
 }
 
 /* Road Closed Status */
-.preset-icon .icon.iD-highway-construction {
+.preset-icon .icon.tag-highway.tag-status-construction {
     color: #fc6c14;
     fill: #fff;
 }
@@ -1965,17 +2088,23 @@ path.line.shadow.tag-status.tag-status-construction {
     stroke-width: 20;
 }
 path.line.casing.tag-status.tag-status-construction {
-    stroke: #fff;
     stroke-width: 10;
     stroke-linecap: butt;
     stroke-dasharray: none
 }
 path.line.stroke.tag-status.tag-status-construction {
-    stroke: #fc6c14;
     stroke-width: 8;
     stroke-linecap: butt;
     stroke-dasharray: 10, 10;
 }
+path.line.casing.tag-status.tag-status-construction,
+.preset-icon-line path.line.stroke.tag-status.tag-status-construction {
+    stroke: #fff;
+}
+path.line.stroke.tag-status.tag-status-construction,
+.preset-icon-line path.line.casing.tag-status.tag-status-construction {
+    stroke: #fc6c14;
+}
 .low-zoom path.line.shadow.tag-status.tag-status-construction {
     stroke-width: 16;
 }
@@ -2004,6 +2133,7 @@ path.fill.tag-building {
 
 
 /* "Special" paths - platforms, piers, crossings */
+.preset-icon .icon.tag-golf-path,
 .preset-icon .icon.tag-public_transport-platform,
 .preset-icon .icon.tag-railway-platform,
 .preset-icon .icon.tag-man_made-pier,
@@ -2013,6 +2143,7 @@ path.fill.tag-building {
     fill: #dca;
 }
 
+.preset-icon-fill-area.tag-golf-path,
 .preset-icon-fill-area.tag-public_transport-platform,
 .preset-icon-fill-area.tag-railway-platform,
 .preset-icon-fill-area.tag-man_made-pier,
@@ -2022,6 +2153,7 @@ path.fill.tag-building {
     background-color: #dca;
 }
 
+path.line.shadow.tag-golf-path,
 path.line.shadow.tag-public_transport-platform,
 path.line.shadow.tag-railway-platform,
 path.line.shadow.tag-man_made-pier,
@@ -2029,6 +2161,7 @@ path.line.shadow.tag-footway.tag-footway-crossing,
 path.line.shadow.tag-crossing {
     stroke-width: 16;
 }
+path.line.casing.tag-golf-path,
 path.line.casing.tag-public_transport-platform,
 path.line.casing.tag-railway-platform,
 path.line.casing.tag-man_made-pier,
@@ -2039,6 +2172,7 @@ path.line.casing.tag-crossing {
     stroke-linecap: round;
     stroke-dasharray: none;
 }
+path.line.stroke.tag-golf-path,
 path.line.stroke.tag-public_transport-platform,
 path.line.stroke.tag-railway-platform,
 path.line.stroke.tag-man_made-pier,
@@ -2050,6 +2184,7 @@ path.line.stroke.tag-crossing {
     stroke-dasharray: 6, 6;
 }
 
+.low-zoom path.line.shadow.tag-golf-path,
 .low-zoom path.line.shadow.tag-public_transport-platform,
 .low-zoom path.line.shadow.tag-railway-platform,
 .low-zoom path.line.shadow.tag-man_made-pier,
@@ -2057,6 +2192,7 @@ path.line.stroke.tag-crossing {
 .low-zoom path.line.shadow.tag-crossing {
     stroke-width: 12;
 }
+.low-zoom path.line.casing.tag-golf-path,
 .low-zoom path.line.casing.tag-public_transport-platform,
 .low-zoom path.line.casing.tag-railway-platform,
 .low-zoom path.line.casing.tag-man_made-pier,
@@ -2064,6 +2200,7 @@ path.line.stroke.tag-crossing {
 .low-zoom path.line.casing.tag-crossing {
     stroke-width: 3;
 }
+.low-zoom path.line.stroke.tag-golf-path,
 .low-zoom path.line.stroke.tag-public_transport-platform,
 .low-zoom path.line.stroke.tag-railway-platform,
 .low-zoom path.line.stroke.tag-man_made-pier,
@@ -2074,6 +2211,7 @@ path.line.stroke.tag-crossing {
     stroke-dasharray: 3, 3;
 }
 
+g.midpoint.tag-golf-path .fill,
 g.midpoint.tag-public_transport-platform .fill,
 g.midpoint.tag-railway-platform .fill,
 g.midpoint.tag-man_made-pier .fill,
@@ -2104,45 +2242,6 @@ path.line.stroke.tag-crossing.tag-crossing-zebra {
 .low-zoom path.line.stroke.tag-crossing.tag-crossing-zebra {
     stroke-dasharray: 3, 2;
 }
-
-/* Attractions */
-path.line.shadow.tag-attraction-summer_toboggan,
-path.line.shadow.tag-attraction-water_slide {
-       stroke-width: 16;
-}
-path.line.casing.tag-attraction-summer_toboggan,
-path.line.casing.tag-attraction-water_slide {
-       stroke-width: 7;
-}
-path.line.stroke.tag-attraction-summer_toboggan,
-path.line.stroke.tag-attraction-water_slide {
-       stroke-width: 5;
-}
-.low-zoom path.line.shadow.tag-attraction-summer_toboggan,
-.low-zoom path.line.shadow.tag-attraction-water_slide {
-    stroke-width: 12;
-}
-.low-zoom path.line.casing.tag-attraction-summer_toboggan,
-.low-zoom path.line.casing.tag-attraction-water_slide {
-    stroke-width: 5;
-}
-.low-zoom path.line.stroke.tag-attraction-summer_toboggan,
-.low-zoom path.line.stroke.tag-attraction-water_slide {
-       stroke-width: 3;
-}
-path.line.stroke.tag-attraction-summer_toboggan {
-    stroke: #9e9e9e;
-}
-path.line.casing.tag-attraction-summer_toboggan {
-    stroke: #666;
-}
-
-path.line.stroke.tag-attraction-water_slide {
-    stroke: #aae0cb;
-}
-path.line.casing.tag-attraction-water_slide {
-    stroke: #3d6c71;
-}
 /* Cursors */
 
 .nope,
@@ -2242,9 +2341,9 @@ path.line.casing.tag-attraction-water_slide {
 }
 
 .mode-browse .note,
-.mode-browse .kr_error,
+.mode-browse .qa_error,
 .mode-select .note,
-.mode-select .kr_error,
+.mode-select .qa_error,
 .turn rect,
 .turn circle {
     cursor: pointer;
@@ -2353,7 +2452,7 @@ path.line.casing.tag-attraction-water_slide {
     cursor: pointer;
 }
 
-.viewfield-group.selected * {
+.viewfield-group.currentView * {
     fill: #ffee00 !important;
 }
 .viewfield-group.hovered * {
@@ -2377,7 +2476,7 @@ path.line.casing.tag-attraction-water_slide {
     stroke-opacity: 0.9;
     fill-opacity: 0.9;
 }
-.viewfield-group.highlighted.selected circle {
+.viewfield-group.highlighted.currentView circle {
     stroke: #222;
     stroke-width: 2;
     stroke-opacity: 1;
@@ -2397,12 +2496,12 @@ path.line.casing.tag-attraction-water_slide {
     stroke-width: 1;
     fill-opacity: 0.8;
 }
-.viewfield-group.highlighted.selected .viewfield {
+.viewfield-group.highlighted.currentView .viewfield {
     stroke-width: 1;
     fill-opacity: 0.9;
 }
 
-.viewfield-group.selected .viewfield-scale {
+.viewfield-group.currentView .viewfield-scale {
     transform: scale(2,2);
 }
 
@@ -2412,7 +2511,7 @@ path.line.casing.tag-attraction-water_slide {
     stroke-opacity: 0.4;
 }
 .sequence.highlighted,
-.sequence.selected {
+.sequence.currentView {
     stroke-width: 4;
     stroke-opacity: 1;
 }
@@ -2456,7 +2555,7 @@ path.line.casing.tag-attraction-water_slide {
     outline: 5px solid #eebb00;
     background-color: #eebb00;
 }
-.layer-mapillary-signs .icon-sign.selected {
+.layer-mapillary-signs .icon-sign.currentView {
     outline: 5px solid #ffee00;
     background-color: #ffee00;
 }
@@ -2605,8 +2704,9 @@ label.streetside-hires {
 
 /* OSM Notes and KeepRight Layers */
 
-.kr_error-header-icon .kr_error-fill,
-.layer-keepRight .kr_error .kr_error-fill {
+.error-header-icon .qa_error-fill,
+.layer-keepRight .qa_error .qa_error-fill,
+.layer-improveOSM .qa_error .qa_error-fill {
     stroke: #333;
     stroke-width: 1.3px;  /* NOTE: likely a better way to scale the icon stroke */
 }
@@ -2645,80 +2745,116 @@ label.streetside-hires {
     height: 15px;
 }
 
+/* adjustment for error icon */
+
+.error-header-icon .preset-icon-28 {
+    top: auto;
+    left: auto;
+}
+
+.error-header-icon {
+    display: flex;
+    align-items: center;
+    justify-content: center;
+}
 
 /* Keep Right Errors
 ------------------------------------------------------- */
-.kr_error_type_20,     /* multiple nodes on same spot */
-.kr_error_type_40,     /* impossible oneways */
-.kr_error_type_210,    /* self intersecting ways */
-.kr_error_type_270,    /* unusual motorway connection */
-.kr_error_type_310,    /* roundabout issues */
-.kr_error_type_320,    /* improper _link */
-.kr_error_type_350 {   /* improper bridge tag */
+.keepRight.error_type-20,     /* multiple nodes on same spot */
+.keepRight.error_type-40,     /* impossible oneways */
+.keepRight.error_type-210,    /* self intersecting ways */
+.keepRight.error_type-270,    /* unusual motorway connection */
+.keepRight.error_type-310,    /* roundabout issues */
+.keepRight.error_type-320,    /* improper _link */
+.keepRight.error_type-350 {   /* improper bridge tag */
     color: #ff9;
 }
 
-.kr_error_type_50 {    /* almost junctions */
+.keepRight.error_type-50 {    /* almost junctions */
     color: #88f;
 }
 
-.kr_error_type_60,     /* deprecated tags */
-.kr_error_type_70,     /* tagging issues */
-.kr_error_type_90,     /* motorway without ref */
-.kr_error_type_100,    /* place of worship without religion */
-.kr_error_type_110,    /* poi without name */
-.kr_error_type_150,    /* railway crossing without tag */
-.kr_error_type_220,    /* misspelled tag */
-.kr_error_type_380 {   /* non-physical sport tag */
+.keepRight.error_type-60,     /* deprecated tags */
+.keepRight.error_type-70,     /* tagging issues */
+.keepRight.error_type-90,     /* motorway without ref */
+.keepRight.error_type-100,    /* place of worship without religion */
+.keepRight.error_type-110,    /* poi without name */
+.keepRight.error_type-150,    /* railway crossing without tag */
+.keepRight.error_type-220,    /* misspelled tag */
+.keepRight.error_type-380 {   /* non-physical sport tag */
     color: #5d0;
 }
 
-.kr_error_type_130 {   /* disconnected ways */
+.keepRight.error_type-130 {   /* disconnected ways */
     color: #fa3;
 }
 
-.kr_error_type_170 {   /* FIXME tag */
+.keepRight.error_type-170 {   /* FIXME tag */
     color: #ff0;
 }
 
-.kr_error_type_190 {   /* intersection without junction */
+.keepRight.error_type-190 {   /* intersection without junction */
     color: #f33;
 }
 
-.kr_error_type_200 {   /* overlapping ways */
+.keepRight.error_type-200 {   /* overlapping ways */
     color: #fdbf6f;
 }
 
-.kr_error_type_160,    /* railway layer conflict */
-.kr_error_type_230 {   /* layer conflict */
+.keepRight.error_type-160,    /* railway layer conflict */
+.keepRight.error_type-230 {   /* layer conflict */
     color: #b60;
 }
 
-.kr_error_type_280 {   /* boundary issues */
+.keepRight.error_type-280 {   /* boundary issues */
     color: #5f47a0;
 }
 
-.kr_error_type_180,    /* relation without type */
-.kr_error_type_290 {   /* turn restriction issues */
+.keepRight.error_type-180,    /* relation without type */
+.keepRight.error_type-290 {   /* turn restriction issues */
     color: #ace;
 }
 
-.kr_error_type_300,    /* missing maxspeed */
-.kr_error_type_390 {   /* missing tracktype */
+.keepRight.error_type-300,    /* missing maxspeed */
+.keepRight.error_type-390 {   /* missing tracktype */
     color: #090;
 }
 
-.kr_error_type_360,    /* language unknown */
-.kr_error_type_370,    /* doubled places */
-.kr_error_type_410 {   /* website issues */
+.keepRight.error_type-360,    /* language unknown */
+.keepRight.error_type-370,    /* doubled places */
+.keepRight.error_type-410 {   /* website issues */
     color: #f9b;
 }
 
-.kr_error_type_120,    /* way without nodes */
-.kr_error_type_400 {   /* geometry / turn angles */
+.keepRight.error_type-120,    /* way without nodes */
+.keepRight.error_type-400 {   /* geometry / turn angles */
     color: #c35;
 }
 
+/* ImproveOSM Errors
+------------------------------------------------------- */
+
+.improveOSM.error_type-ow {   /* missing one way */
+    color: #1E90FF;
+}
+
+.improveOSM.error_type-mr-road {   /* missing road */
+    color: #B452CD;
+}
+.improveOSM.error_type-mr-path {   /* missing path */
+    color: #A0522D;
+}
+.improveOSM.error_type-mr-parking {   /* missing parking */
+    color: #EEEE00;
+}
+.improveOSM.error_type-mr-both {   /* missing road+parking */
+    color: #FFA500;
+}
+
+.improveOSM.error_type-tr {   /* missing turn restriction */
+    color: #EC1C24;
+}
+
 
 /* Custom Map Data (geojson, gpx, kml, vector tile) */
 .layer-mapdata {
@@ -2779,7 +2915,6 @@ label.streetside-hires {
     stroke-width: 5px;
     stroke-miterlimit: 1;
 }
-
 /* Fill Styles */
 
 .low-zoom.fill-wireframe path.stroke,
@@ -3180,6 +3315,8 @@ button.secondary-action:hover {
     background: #cccccc;
 }
 
+button.action.disabled,
+button.action.disabled:hover,
 button[disabled].action,
 button[disabled].action:hover {
     background: #cccccc;
@@ -3237,6 +3374,23 @@ button[disabled].action:hover {
     border-radius: 3px;
 }
 
+.icon-annotation {
+    color: #333;
+}
+
+.icon-badge {
+    display: block;
+    position: absolute;
+    width: 10px;
+    height: 10px;
+    right: 7px;
+    top: 9px;
+}
+
+.icon-badge.hide {
+    display: none;
+}
+
 
 /* Toolbar / Persistent UI Elements
 ------------------------------------------------------- */
@@ -3415,7 +3569,7 @@ button.add-note svg.icon {
 .field-help-title button.close,
 .sidebar-component .header button.data-editor-close,
 .sidebar-component .header button.note-editor-close,
-.sidebar-component .header button.keepRight-editor-close,
+.sidebar-component .header button.error-editor-close,
 .entity-editor-pane .header button.preset-close,
 .preset-list-pane .header button.preset-choose {
     position: absolute;
@@ -3425,7 +3579,7 @@ button.add-note svg.icon {
 [dir='rtl'] .field-help-title button.close,
 [dir='rtl'] .sidebar-component .header button.data-editor-close,
 [dir='rtl'] .sidebar-component .header button.note-editor-close,
-[dir='rtl'] .sidebar-component .header button.keepRight-editor-close,
+[dir='rtl'] .sidebar-component .header button.error-editor-close,
 [dir='rtl'] .entity-editor-pane .header button.preset-close,
 [dir='rtl'] .preset-list-pane .header button.preset-choose {
     left: 0;
@@ -3743,10 +3897,14 @@ a.hide-toggle {
     border-bottom: 1px solid #ccc;
 }
 
+.preset-list-item {
+    margin-bottom: 10px;
+}
+
 .preset-list-button-wrap {
     position: relative;
-    margin-bottom: 10px;
     height: 60px;
+    display: flex;
 }
 
 .preset-list-button {
@@ -3755,11 +3913,45 @@ a.hide-toggle {
     position: relative;
     border: 1px solid #ccc;
 }
+[dir='ltr'] .preset-list-button-wrap:not(.category) .preset-list-button {
+    border-top-right-radius: 0;
+    border-bottom-right-radius: 0;
+}
+[dir='rtl'] .preset-list-button-wrap:not(.category) .preset-list-button {
+    border-top-left-radius: 0;
+    border-bottom-left-radius: 0;
+}
 
 .preset-list.filtered .preset-list-item:first-child .preset-list-button {
     background: #ececec;
 }
 
+.preset-icon-line {
+    margin: auto;
+    position: absolute;
+    top: 0;
+}
+[dir='ltr'] .preset-icon-line {
+    left: 0;
+}
+[dir='rtl'] .preset-icon-line {
+    right: 0;
+}
+.preset-icon-line path.line {
+    cursor: inherit;
+}
+.preset-icon-line circle.vertex {
+    fill: #fff;
+    stroke: rgba(0, 0, 0, 0.25);
+}
+/* use a consistent stroke width */
+.preset-icon-line path.line.stroke {
+    stroke-width: 2 !important;
+}
+.preset-icon-line path.line.casing {
+    stroke-width: 4 !important;
+}
+
 .preset-icon-fill-area {
     cursor: inherit;
     height: 40px;
@@ -3823,6 +4015,9 @@ a.hide-toggle {
     left: 8px;
     margin: auto;
 }
+.preset-icon-44.line-geom {
+    top: 2px;
+}
 
 .preset-icon-44 .icon {
     width: 44px;
@@ -3847,6 +4042,9 @@ a.hide-toggle {
     left: 18px;
     margin: auto;
 }
+.preset-icon-24.line-geom {
+    top: 12px;
+}
 
 .preset-icon-24 .icon {
     width: 24px;
@@ -3858,6 +4056,10 @@ a.hide-toggle {
     right: auto;
 }
 
+[dir='rtl'] .preset-list-button-wrap .preset-icon-44 {
+    right: 8px;
+}
+
 [dir='rtl'] .preset-list-button-wrap .preset-icon-28 {
     right: 16px;
 }
@@ -3879,7 +4081,6 @@ a.hide-toggle {
     padding: 5px 10px;
     left: 60px;
     border-left: 1px solid rgba(0, 0, 0, .1);
-    border-radius: 0 3px 3px 0;
 }
 [dir='rtl'] .preset-list-button .label {
     text-align: right;
@@ -3887,7 +4088,12 @@ a.hide-toggle {
     right: 60px;
     border-left: none;
     border-right: 1px solid rgba(0, 0, 0, .1);
-    border-radius: 3px 0 0 3px;
+}
+[dir='ltr'] .category .preset-list-button .label {
+    border-radius: 0px 4px 4px 0px;
+}
+[dir='rtl'] .category .preset-list-button .label {
+    border-radius: 4px 0px 0px 4px;
 }
 
 .preset-list-button .label-inner {
@@ -3898,32 +4104,28 @@ a.hide-toggle {
     white-space: nowrap;
     text-overflow: ellipsis;
     overflow: hidden;
-    padding-right: 30px;
-}
-[dir='rtl'] .preset-list-button .label-inner .namepart {
-    padding-right: 0;
-    padding-left: 30px;
 }
 
 .preset-list-button:hover .label,
-.preset-list-button:focus .label {
+.preset-list-button:focus .label,
+.preset-list-button.disabled,
+.preset-list-button.disabled .label {
     background-color: #ececec;
 }
 
 .preset-list-item button.tag-reference-button {
     height: 100%;
     border: 1px solid #ccc;
-    border-radius: 0 3px 3px 0;
-    position: absolute;
-    top: 0;
-    right: 0;
-    width: 32px;
+    flex: 32px;
     background: #f6f6f6;
 }
+[dir='ltr'] .preset-list-item button.tag-reference-button {
+    border-left: none;
+    border-radius: 0 4px 4px 0;
+}
 [dir='rtl'] .preset-list-item button.tag-reference-button {
-    left: 0;
-    right: auto;
-    border-radius: 3px 0 0 3px;
+    border-right: none;
+    border-radius: 4px 0 0 4px;
 }
 
 .preset-list-item button.tag-reference-button:hover {
@@ -3936,11 +4138,12 @@ a.hide-toggle {
 img.tag-reference-wiki-image {
     float: right;
     width: 33.3333%;
-    width: -webkit-calc(33.3333% - 10px);
-    width: calc(33.3333% - 10px);
     border-radius: 4px;
-    max-height: 200px;
-    margin: 10px 5px 15px 20px;
+    margin: 10px 5px 15px 10px;
+}
+[dir='rtl'] img.tag-reference-wiki-image {
+    float: left;
+    margin: 10px 10px 15px 5px;
 }
 
 
@@ -3966,23 +4169,25 @@ img.tag-reference-wiki-image {
 }
 
 .subgrid .preset-list {
-    padding: 10px 10px 0 10px;
+    padding: 10px;
     margin-top: 0;
     border: 0;
     border-radius: 8px;
     width: -webkit-calc(100% + 20px);
     margin-left: -10px;
 }
+.subgrid .preset-list > *:last-child {
+    margin-bottom: 0;
+}
 
 .subgrid .arrow {
     border: solid rgba(0, 0, 0, 0);
     border-width: 10px;
-    border-bottom-color: #f1f1f1;
+    border-bottom-color: #ececec;
     width: 0;
     height: 0;
     margin-left: 50%;
     margin-left: -webkit-calc(50% - 10px);
-    margin-top: -10px;
 }
 
 
@@ -3999,7 +4204,7 @@ img.tag-reference-wiki-image {
 }
 
 .data-editor .quick-links,
-.keepRight-editor .quick-links,
+.error-editor .quick-links,
 .note-editor .quick-links {
     padding: 5px 0 0 0;
 }
@@ -4007,22 +4212,27 @@ img.tag-reference-wiki-image {
 
 /* Entity/Preset Editor
 ------------------------------------------------------- */
+.entity-issues,
 .preset-editor {
     overflow: hidden;
     padding: 10px 0px 5px 0px;
 }
+.entity-issues a.hide-toggle,
 .preset-editor a.hide-toggle {
     margin: 0 20px 5px 20px;
 }
+.entity-issues .disclosure-wrap-entity_issues,
 .preset-editor .form-fields-container {
     padding: 10px;
     margin: 0 10px 10px 10px;
     border-radius: 8px;
+    background: #ececec;
 }
+.entity-issues .disclosure-wrap-entity_issues:empty,
 .preset-editor .form-fields-container:empty {
     display: none;
 }
-.entity-editor-pane .preset-list-item .preset-list-button-wrap {
+.entity-editor-pane .preset-list-item {
     margin-bottom: 0;
 }
 
@@ -5066,15 +5276,14 @@ div.combobox {
     width: 100%;
     overflow: hidden;
 }
-.tag-reference-body .tag-reference-description {
-    margin: 10px 5px 0 5px;
+.tag-reference-body.expanded {
+    padding-bottom: 10px;
 }
-.tag-reference-body a {
-    display: block;
+.tag-reference-description {
+    margin: 10px 5px;
 }
-.tag-reference-body .tag-reference-description:last-child,
-.tag-reference-body a:last-child {
-    margin-bottom: 15px;
+.tag-reference-link {
+    display: block;
 }
 
 .preset-list .tag-reference-body {
@@ -5192,7 +5401,8 @@ input.key-trap {
 .inspector-hover button,
 .inspector-hover input,
 .inspector-hover textarea,
-.inspector-hover label {
+.inspector-hover label,
+.inspector-hover .entity-issues .issue button {
     background: #ececec;
 }
 .inspector-hover .preset-list-button,
@@ -5200,6 +5410,14 @@ input.key-trap {
     background: #f6f6f6;
 }
 
+.inspector-hover .entity-issues .issue,
+.inspector-hover .entity-issues .issue li {
+    border: 1px solid #ccc;
+}
+.inspector-hover .entity-issues .issue .icon {
+    color: #666;
+}
+
 .inspector-hover a,
 .inspector-hover .form-field-input-multicombo .chips,
 .inspector-hover .form-field-input-check span {
@@ -5226,7 +5444,8 @@ input.key-trap {
 .inspector-hover .form-field-input-radio label,
 .inspector-hover .form-field-input-radio label span,
 .inspector-hover .form-field-input-radio label.remove .icon,
-.inspector-hover .inspector-inner .add-row {
+.inspector-hover .inspector-inner .add-row,
+.inspector-hover .entity-issues .issue ul.issue-fix-list {
     display: none;
 }
 
@@ -5313,7 +5532,7 @@ input.key-trap {
 /* OSM Note / KeepRight Editors
 ------------------------------------------------------- */
 .note-header,
-.kr_error-header {
+.error-header {
     background-color: #f6f6f6;
     border-radius: 5px;
     border: 1px solid #ccc;
@@ -5323,7 +5542,7 @@ input.key-trap {
 }
 
 .note-header-icon,
-.kr_error-header-icon {
+.error-header-icon {
     background-color: #fff;
     padding: 10px;
     flex: 0 0 62px;
@@ -5334,20 +5553,20 @@ input.key-trap {
     border-radius: 5px 0 0 5px;
 }
 [dir='rtl'] .note-header-icon,
-[dir='rtl'] .kr_error-header-icon {
+[dir='rtl'] .error-header-icon {
     border-right: unset;
     border-left: 1px solid #ccc;
     border-radius: 0 5px 5px 0;
 }
 
 .note-header-icon .icon-wrap,
-.kr_error-header-icon .icon-wrap {
+.error-header-icon .icon-wrap {
     position: absolute;
     top: 0px;
 }
 
 .note-header-label,
-.kr_error-header-label {
+.error-header-label {
     background-color: #f6f6f6;
     padding: 0 15px;
     flex: 1 1 100%;
@@ -5356,7 +5575,7 @@ input.key-trap {
     border-radius: 0 5px 5px 0;
 }
 [dir='rtl'] .note-header-label,
-[dir='rtl'] .kr_error-header-label {
+[dir='rtl'] .error-header-label {
     border-radius: 5px 0 0 5px;
 }
 
@@ -5423,24 +5642,40 @@ input.key-trap {
 }
 
 .note-save,
-.keepRight-save {
+.error-save {
     padding-top: 20px;
 }
-.kr_error-details,
-.kr_error-comment-container {
+
+.error-details {
     padding: 10px;
 }
+.error-details-container {
+    background: #ececec;
+    padding: 10px;
+    margin-top: 20px;
+    border-radius: 4px;
+    border: 1px solid #ccc;
+}
+.error-details-description {
+    margin-bottom: 10px;
+}
+.error-details-description-text::first-letter {
+    text-transform: capitalize;
+}
+[dir='rtl'] .error-details-description-text::first-letter {
+    text-transform: none;  /* #5877 */
+}
 
-.keepRight-save .new-comment-input,
-.note-save .new-comment-input {
+.note-save .new-comment-input,
+.error-save .new-comment-input {
     width: 100%;
     height: 100px;
     max-height: 300px;
     min-height: 100px;
 }
 
-.keepRight-save .detail-section,
-.note-save .detail-section {
+.note-save .detail-section,
+.error-save .detail-section {
     margin: 10px 0;
 }
 
@@ -5448,21 +5683,6 @@ input.key-trap {
     float: right;
 }
 
-.kr_error-details-container {
-    background: #ececec;
-    padding: 10px;
-    margin-top: 20px;
-    border-radius: 4px;
-    border: 1px solid #ccc;
-}
-
-.kr_error-details-description {
-    margin-bottom: 10px;
-}
-.kr_error-details-description-text::first-letter {
-    text-transform: capitalize;
-}
-
 
 /* Custom Data Editor
 ------------------------------------------------------- */
@@ -5533,6 +5753,7 @@ input.key-trap {
 }
 
 .map-control > button {
+    position: relative;
     width: 40px;
     background: rgba(0,0,0,.5);
     border-radius: 0;
@@ -5634,11 +5855,11 @@ div.full-screen > button:hover {
     border-radius: 4px;
 }
 
-.layer-list li {
-    position: relative;
+.layer-list > li {
     height: 30px;
     background-color: #fff;
     color: #7092ff;
+    position: relative;
 }
 
 .layer-list:empty {
@@ -5697,43 +5918,201 @@ div.full-screen > button:hover {
     text-overflow: ellipsis;
 }
 
-.map-data-control .layer-list button,
-.background-control .layer-list button {
+.map-data-pane .layer-list button,
+.background-pane .layer-list button {
     float: right;
     height: 100%;
     width: 10%;
     border-left: 1px solid #ccc;
     border-radius: 0;
 }
-[dir='rtl'] .map-data-control .layer-list button,
-[dir='rtl'] .background-control .layer-list button {
+[dir='rtl'] .map-data-pane .layer-list button,
+[dir='rtl'] .background-pane .layer-list button {
     float: left;
     border-left: none;
     border-right: 1px solid #ccc;
 }
 
-.map-data-control .layer-list button .icon,
-.background-control .layer-list button .icon {
+.map-data-pane .layer-list button .icon,
+.background-pane .layer-list button .icon {
     opacity: 0.5;
 }
 
-.map-data-control .layer-list button:first-of-type,
-.background-control .layer-list button:first-of-type {
+.map-data-pane .layer-list button:first-of-type,
+.background-pane .layer-list button:first-of-type {
     border-radius: 0 3px 3px 0;
 }
-[dir='rtl'] .map-data-control .layer-list button:first-of-type,
-[dir='rtl'] .background-control .layer-list button:first-of-type {
+[dir='rtl'] .map-data-pane .layer-list button:first-of-type,
+[dir='rtl'] .background-pane .layer-list button:first-of-type {
     border-radius: 3px 0 0 3px;
 }
 
-.map-data-control .vectortile-container .vectortile-header {
+.map-data-pane .vectortile-container .vectortile-header {
     padding-bottom: 5px;
 }
-.map-data-control .vectortile-container .vectortile-footer {
+.map-data-pane .vectortile-container .vectortile-footer {
     padding-bottom: 10px;
 }
 
 
+/* Issues
+------------------------------------------------------- */
+.issue {
+    overflow: hidden;
+}
+.issue button {
+    padding: 5px 10px 5px 5px;
+    height: auto;
+    width: 100%;
+    font-weight: inherit;
+    border-radius: 0;
+    text-align: inherit;
+    display: flex;
+    color: inherit;
+}
+[dir='rtl'] .issue button {
+    padding: 5px 5px 5px 10px;
+}
+.warnings-list,
+.issue.severity-warning,
+ li.issue.severity-warning {
+    border-color: #FFDF5C;
+}
+.icon-badge.warning {
+    color: #FFDF5C;
+}
+.errors-list,
+.issue.severity-error,
+ li.issue.severity-error {
+    border-color: #f5b0ab;
+}
+.icon-badge.error {
+    color: #ff0c05;
+}
+
+.issue.severity-warning,
+.issue.severity-warning button,
+.mode-save .warning-section {
+    background: #ffb;
+}
+.issue.severity-warning:not(.expanded) button:hover,
+.issue.severity-warning:not(.expanded) button:focus,
+.issue.severity-warning .issue-fix-item.actionable button:hover,
+.issue.severity-warning .issue-fix-item.actionable button:focus {
+    background: #FFFF99;
+}
+.issue.severity-warning .issue-icon {
+    color: #ffa900;
+    fill: #ffa900;
+}
+.issue.severity-warning .issue-fix-item.actionable {
+    color: #b15500;
+    fill: #b15500;
+}
+.issue.severity-warning .issue-fix-item.actionable:hover,
+.issue.severity-warning .issue-fix-item.actionable button:focus {
+    color: #7f3d00;
+    fill: #7f3d00;
+}
+
+.issue.severity-error,
+.issue.severity-error button,
+.mode-save .error-section {
+    background: #FFD5D4;
+}
+.issue.severity-error:not(.expanded) button:hover,
+.issue.severity-error:not(.expanded) button:focus,
+.issue.severity-error .issue-fix-item.actionable button:hover,
+.issue.severity-error .issue-fix-item.actionable button:focus {
+    background: #ffc9c7;
+}
+.issue.severity-error .issue-icon {
+    color: #DD1400;
+    fill: #DD1400;
+}
+.issue.severity-error .issue-fix-item.actionable {
+    color: #b91201;
+    fill: #b91201;
+}
+.issue.severity-error .issue-fix-item.actionable:hover,
+.issue.severity-error .issue-fix-item.actionable button:focus {
+    color: #840c00;
+    fill: #840c00;
+}
+
+/* Issues Pane */
+
+.issues-list label {
+    padding: 5px;
+}
+.issues-list label > span {
+    display: inline;
+    white-space: normal;
+}
+.issues-list li {
+    height: auto;
+    color: inherit;
+    position: static;
+}
+
+.issues-none {
+    border-radius: 4px;
+    border: 1px solid #72D979;
+    background: #C6FFCA;
+    padding: 5px !important;
+    display: flex;
+    margin-top: 5px;
+}
+.issues-none .icon {
+    color: #05AC10;
+}
+
+/* Entity Issues List */
+.entity-issues .issue {
+    border-radius: 4px;
+    border-width: 1px;
+    border-style: solid;
+}
+.entity-issues .issue:not(:last-of-type) {
+    margin-bottom: 10px;
+}
+.issue.expanded button.message {
+    cursor: auto;
+    padding-bottom: 0px;
+}
+ul.issue-fix-list {
+    margin-bottom: 5px;
+}
+ul.issue-fix-list button {
+    padding: 2px 10px 2px 26px;
+}
+.issue-fix-item:not(.actionable) button {
+    cursor: auto;
+
+}
+.issue-fix-item:not(.actionable) .fix-icon {
+    color: #555;
+    fill: #555;
+}
+
+.issue:not(.expanded) ul.issue-fix-list {
+    display: none;
+}
+/* don't animate right now
+.issue ul.issue-fix-list {
+    max-height: 0;
+    transition: max-height 200ms linear;
+    -moz-transition: max-height 200ms linear;
+    -webkit-transition: max-height 200ms linear;
+}
+.issue.expanded ul.issue-fix-list {
+    max-height: 180px;
+    transition: max-height 200ms linear;
+    -moz-transition: max-height 200ms linear;
+    -webkit-transition: max-height 200ms linear;
+}*/
+
+
 /* Background - Display Options Sliders
 ------------------------------------------------------- */
 .display-options-container {
@@ -5770,7 +6149,7 @@ div.full-screen > button:hover {
 
 /* Background - Adjust Alignment
 ------------------------------------------------------- */
-.background-control .nudge-container {
+.background-pane .nudge-container {
     border: 1px solid #ccc;
     border-radius: 4px;
     padding: 10px;
@@ -5871,25 +6250,25 @@ div.full-screen > button:hover {
    cursor: move;
 }
 
-.background-control .nudge.right::after {
+.background-pane .nudge.right::after {
     border-top: 5px solid transparent;
     border-bottom: 5px solid transparent;
     border-left: 5px solid #222;
 }
 
-.background-control .nudge.left::after {
+.background-pane .nudge.left::after {
     border-top: 5px solid transparent;
     border-bottom: 5px solid transparent;
     border-right: 5px solid #222;
 }
 
-.background-control .nudge.top::after {
+.background-pane .nudge.top::after {
     border-right: 5px solid transparent;
     border-left: 5px solid transparent;
     border-bottom: 5px solid #222;
 }
 
-.background-control .nudge.bottom::after {
+.background-pane .nudge.bottom::after {
     border-right: 5px solid transparent;
     border-left: 5px solid transparent;
     border-top: 5px solid #222;
@@ -5899,15 +6278,16 @@ div.full-screen > button:hover {
 /* Side Panes - Background / Map Data / Help
 ------------------------------------------------------- */
 .map-pane {
-    position: fixed;
+    position: absolute;
     top: 60px;
     bottom: 30px;
     right: 0;
-    width: 33.3333%;
+    width: 100%;
     max-width: 400px;
+    min-width: 180px;
     padding-bottom: 50px;
     overflow: hidden;
-    z-index: -1;
+    z-index: 10;
 }
 [dir='rtl'] .map-pane {
     left: 0;
@@ -5915,7 +6295,6 @@ div.full-screen > button:hover {
 }
 
 .map-pane.help-wrap {
-    width: 50.0000%;
     max-width: 600px;
 }
 
@@ -5924,15 +6303,16 @@ div.full-screen > button:hover {
     flex-flow: row nowrap;
     justify-content: space-between;
     border-bottom: 1px solid #ccc;
+    height: 60px;
 }
 
 .pane-heading h2 {
-    margin: 15px 20px;
+    margin: 14px 20px;
 }
 
 .pane-heading button {
     width: 40px;
-    height: 61px;
+    height: 100%;
     border-radius: 0;
 }
 
@@ -6647,7 +7027,7 @@ img.tile-debug {
     vertical-align: baseline;
     width: 11px;
     height: 11px;
-    fill: #fff;
+    color: #fff;
 }
 
 /* For text (e.g. upcoming events) */
@@ -7070,14 +7450,6 @@ svg.mouseclick use.right {
     margin-bottom: 10px;
 }
 
-.mode-save .warning-section {
-    background: #ffb;
-}
-
-.mode-save .error-section {
-    background: #ffa5a5;
-}
-
 .mode-save .warning-section .changeset-list button {
     border-left: 1px solid #ccc;
 }
@@ -7206,6 +7578,9 @@ svg.mouseclick use.right {
     font-size: 12px;
     white-space: initial;
 }
+.tooltip:not(.curtain-tooltip) {
+    pointer-events: none;
+}
 .tooltip.in {
     opacity: 0.9;
     z-index: 1030;
index 339e58d881d467425b9674394a3324b9f7ac2827..1d075cf073a41d550eef02faa4ce314be23e4741 100644 (file)
     return histogram;
   }
 
-  function quantile(values, p, valueof) {
+  function threshold(values, p, valueof) {
     if (valueof == null) valueof = number;
     if (!(n = values.length)) return;
     if ((p = +p) <= 0 || n < 2) return +valueof(values[0], 0, values);
 
   function freedmanDiaconis(values, min, max) {
     values = map.call(values, number).sort(ascending);
-    return Math.ceil((max - min) / (2 * (quantile(values, 0.75) - quantile(values, 0.25)) * Math.pow(values.length, -1 / 3)));
+    return Math.ceil((max - min) / (2 * (threshold(values, 0.75) - threshold(values, 0.25)) * Math.pow(values.length, -1 / 3)));
   }
 
   function scott(values, min, max) {
       }
     }
 
-    return quantile(numbers.sort(ascending), 0.5);
+    return threshold(numbers.sort(ascending), 0.5);
   }
 
   function merge(arrays) {
     return new Selection(this._exit || this._groups.map(sparse), this._parents);
   }
 
-  function selection_merge(selection$$1) {
+  function selection_merge(selection) {
 
-    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 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 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;
 
   function dragDisable(view) {
     var root = view.document.documentElement,
-        selection$$1 = select(view).on("dragstart.drag", noevent, true);
+        selection = select(view).on("dragstart.drag", noevent, true);
     if ("onselectstart" in root) {
-      selection$$1.on("selectstart.drag", noevent, true);
+      selection.on("selectstart.drag", noevent, true);
     } else {
       root.__noselect = root.style.MozUserSelect;
       root.style.MozUserSelect = "none";
 
   function yesdrag(view, noclick) {
     var root = view.document.documentElement,
-        selection$$1 = select(view).on("dragstart.drag", null);
+        selection = select(view).on("dragstart.drag", null);
     if (noclick) {
-      selection$$1.on("click.drag", noevent, true);
-      setTimeout(function() { selection$$1.on("click.drag", null); }, 0);
+      selection.on("click.drag", noevent, true);
+      setTimeout(function() { selection.on("click.drag", null); }, 0);
     }
     if ("onselectstart" in root) {
-      selection$$1.on("selectstart.drag", null);
+      selection.on("selectstart.drag", null);
     } else {
       root.style.MozUserSelect = root.__noselect;
       delete root.__noselect;
         touchending,
         clickDistance2 = 0;
 
-    function drag(selection$$1) {
-      selection$$1
+    function drag(selection) {
+      selection
           .on("mousedown.drag", mousedowned)
         .filter(touchable)
           .on("touchstart.drag", touchstarted)
       }
     }
 
-    function beforestart(id, container, point$$1, that, args) {
-      var p = point$$1(container, id), s, dx, dy,
+    function beforestart(id, container, point, that, args) {
+      var p = point(container, id), s, dx, dy,
           sublisteners = listeners.copy();
 
       if (!customEvent(new DragEvent(drag, "beforestart", s, id, active, p[0], p[1], 0, 0, sublisteners), function() {
         switch (type) {
           case "start": gestures[id] = gesture, n = active++; break;
           case "end": delete gestures[id], --active; // nobreak
-          case "drag": p = point$$1(container, id), n = active; break;
+          case "drag": p = point(container, id), n = active; break;
         }
         customEvent(new DragEvent(drag, type, s, id, n, p[0] + dx, p[1] + dy, p[0] - p0[0], p[1] - p0[1], sublisteners), sublisteners.apply, sublisteners, [type, that, args]);
       };
   }
 
   var interpolateRgb = (function rgbGamma(y) {
-    var color$$1 = gamma(y);
+    var color = gamma(y);
 
-    function rgb$$1(start, end) {
-      var r = color$$1((start = rgb(start)).r, (end = rgb(end)).r),
-          g = color$$1(start.g, end.g),
-          b = color$$1(start.b, end.b),
+    function rgb$1(start, end) {
+      var r = color((start = rgb(start)).r, (end = rgb(end)).r),
+          g = color(start.g, end.g),
+          b = color(start.b, end.b),
           opacity = nogamma(start.opacity, end.opacity);
       return function(t) {
         start.r = r(t);
       };
     }
 
-    rgb$$1.gamma = rgbGamma;
+    rgb$1.gamma = rgbGamma;
 
-    return rgb$$1;
+    return rgb$1;
   })(1);
 
   function rgbSpline(spline) {
           r = new Array(n),
           g = new Array(n),
           b = new Array(n),
-          i, color$$1;
+          i, color;
       for (i = 0; i < n; ++i) {
-        color$$1 = rgb(colors[i]);
-        r[i] = color$$1.r || 0;
-        g[i] = color$$1.g || 0;
-        b[i] = color$$1.b || 0;
+        color = rgb(colors[i]);
+        r[i] = color.r || 0;
+        g[i] = color.g || 0;
+        b[i] = color.b || 0;
       }
       r = spline(r);
       g = spline(g);
       b = spline(b);
-      color$$1.opacity = 1;
+      color.opacity = 1;
       return function(t) {
-        color$$1.r = r(t);
-        color$$1.g = g(t);
-        color$$1.b = b(t);
-        return color$$1 + "";
+        color.r = r(t);
+        color.g = g(t);
+        color.b = b(t);
+        return color + "";
       };
     };
   }
     return i;
   }
 
-  function hsl$1(hue$$1) {
+  function hsl$1(hue) {
     return function(start, end) {
-      var h = hue$$1((start = hsl(start)).h, (end = hsl(end)).h),
+      var h = hue((start = hsl(start)).h, (end = hsl(end)).h),
           s = nogamma(start.s, end.s),
           l = nogamma(start.l, end.l),
           opacity = nogamma(start.opacity, end.opacity);
     };
   }
 
-  function hcl$1(hue$$1) {
+  function hcl$1(hue) {
     return function(start, end) {
-      var h = hue$$1((start = hcl(start)).h, (end = hcl(end)).h),
+      var h = hue((start = hcl(start)).h, (end = hcl(end)).h),
           c = nogamma(start.c, end.c),
           l = nogamma(start.l, end.l),
           opacity = nogamma(start.opacity, end.opacity);
   var hcl$2 = hcl$1(hue);
   var hclLong = hcl$1(nogamma);
 
-  function cubehelix$1(hue$$1) {
+  function cubehelix$1(hue) {
     return (function cubehelixGamma(y) {
       y = +y;
 
-      function cubehelix$$1(start, end) {
-        var h = hue$$1((start = cubehelix(start)).h, (end = cubehelix(end)).h),
+      function cubehelix$1(start, end) {
+        var h = hue((start = cubehelix(start)).h, (end = cubehelix(end)).h),
             s = nogamma(start.s, end.s),
             l = nogamma(start.l, end.l),
             opacity = nogamma(start.opacity, end.opacity);
         };
       }
 
-      cubehelix$$1.gamma = cubehelixGamma;
+      cubehelix$1.gamma = cubehelixGamma;
 
-      return cubehelix$$1;
+      return cubehelix$1;
     })(1);
   }
 
 
   function interrupt(node, name) {
     var schedules = node.__transition,
-        schedule$$1,
+        schedule,
         active,
         empty = true,
         i;
     name = name == null ? null : name + "";
 
     for (i in schedules) {
-      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);
+      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);
       delete schedules[i];
     }
 
   function tweenRemove(id, name) {
     var tween0, tween1;
     return function() {
-      var schedule$$1 = set$1(this, id),
-          tween = schedule$$1.tween;
+      var schedule = set$1(this, id),
+          tween = schedule.tween;
 
       // If this node shared tween with the previous node,
       // just assign the updated shared tween and we’re done!
         }
       }
 
-      schedule$$1.tween = tween1;
+      schedule.tween = tween1;
     };
   }
 
     var tween0, tween1;
     if (typeof value !== "function") throw new Error;
     return function() {
-      var schedule$$1 = set$1(this, id),
-          tween = schedule$$1.tween;
+      var schedule = set$1(this, id),
+          tween = schedule.tween;
 
       // If this node shared tween with the previous node,
       // just assign the updated shared tween and we’re done!
         if (i === n) tween1.push(t);
       }
 
-      schedule$$1.tween = tween1;
+      schedule.tween = tween1;
     };
   }
 
     var id = transition._id;
 
     transition.each(function() {
-      var schedule$$1 = set$1(this, id);
-      (schedule$$1.value || (schedule$$1.value = {}))[name] = value.apply(this, arguments);
+      var schedule = set$1(this, id);
+      (schedule.value || (schedule.value = {}))[name] = value.apply(this, arguments);
     });
 
     return function(node) {
     };
   }
 
-  function attrConstant$1(name, interpolate$$1, value1) {
+  function attrConstant$1(name, interpolate, value1) {
     var value00,
         interpolate0;
     return function() {
       var value0 = this.getAttribute(name);
       return value0 === value1 ? null
           : value0 === value00 ? interpolate0
-          : interpolate0 = interpolate$$1(value00 = value0, value1);
+          : interpolate0 = interpolate(value00 = value0, value1);
     };
   }
 
-  function attrConstantNS$1(fullname, interpolate$$1, value1) {
+  function attrConstantNS$1(fullname, interpolate, value1) {
     var value00,
         interpolate0;
     return function() {
       var value0 = this.getAttributeNS(fullname.space, fullname.local);
       return value0 === value1 ? null
           : value0 === value00 ? interpolate0
-          : interpolate0 = interpolate$$1(value00 = value0, value1);
+          : interpolate0 = interpolate(value00 = value0, value1);
     };
   }
 
-  function attrFunction$1(name, interpolate$$1, value) {
+  function attrFunction$1(name, interpolate, value) {
     var value00,
         value10,
         interpolate0;
       value0 = this.getAttribute(name);
       return value0 === value1 ? null
           : value0 === value00 && value1 === value10 ? interpolate0
-          : interpolate0 = interpolate$$1(value00 = value0, value10 = value1);
+          : interpolate0 = interpolate(value00 = value0, value10 = value1);
     };
   }
 
-  function attrFunctionNS$1(fullname, interpolate$$1, value) {
+  function attrFunctionNS$1(fullname, interpolate, value) {
     var value00,
         value10,
         interpolate0;
       value0 = this.getAttributeNS(fullname.space, fullname.local);
       return value0 === value1 ? null
           : value0 === value00 && value1 === value10 ? interpolate0
-          : interpolate0 = interpolate$$1(value00 = value0, value10 = value1);
+          : interpolate0 = interpolate(value00 = value0, value10 = value1);
     };
   }
 
     return new Transition(subgroups, this._parents, this._name, this._id);
   }
 
-  function transition_merge(transition$$1) {
-    if (transition$$1._id !== this._id) throw new Error;
+  function transition_merge(transition) {
+    if (transition._id !== this._id) throw new Error;
 
-    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 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 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;
   function onFunction(id, name, listener) {
     var on0, on1, sit = start(name) ? init : set$1;
     return function() {
-      var schedule$$1 = sit(this, id),
-          on = schedule$$1.on;
+      var schedule = sit(this, id),
+          on = schedule.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);
 
-      schedule$$1.on = on1;
+      schedule.on = on1;
     };
   }
 
     return this.on("end.remove", removeFunction(this._id));
   }
 
-  function transition_select(select$$1) {
+  function transition_select(select) {
     var name = this._name,
         id = this._id;
 
-    if (typeof select$$1 !== "function") select$$1 = selector(select$$1);
+    if (typeof select !== "function") select = selector(select);
 
     for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {
       for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {
-        if ((node = group[i]) && (subnode = select$$1.call(node, node.__data__, i, group))) {
+        if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {
           if ("__data__" in node) subnode.__data__ = node.__data__;
           subgroup[i] = subnode;
           schedule(subgroup[i], name, id, i, subgroup, get$1(node, id));
     return new Transition(subgroups, this._parents, name, id);
   }
 
-  function transition_selectAll(select$$1) {
+  function transition_selectAll(select) {
     var name = this._name,
         id = this._id;
 
-    if (typeof select$$1 !== "function") select$$1 = selectorAll(select$$1);
+    if (typeof select !== "function") select = selectorAll(select);
 
     for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {
       for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {
         if (node = group[i]) {
-          for (var children = select$$1.call(node, node.__data__, i, group), child, inherit = get$1(node, id), k = 0, l = children.length; k < l; ++k) {
+          for (var children = select.call(node, node.__data__, i, group), child, inherit = get$1(node, id), k = 0, l = children.length; k < l; ++k) {
             if (child = children[k]) {
               schedule(child, name, id, k, children, inherit);
             }
     return new Selection$1(this._groups, this._parents);
   }
 
-  function styleRemove$1(name, interpolate$$1) {
+  function styleRemove$1(name, interpolate) {
     var value00,
         value10,
         interpolate0;
           value1 = (this.style.removeProperty(name), styleValue(this, name));
       return value0 === value1 ? null
           : value0 === value00 && value1 === value10 ? interpolate0
-          : interpolate0 = interpolate$$1(value00 = value0, value10 = value1);
+          : interpolate0 = interpolate(value00 = value0, value10 = value1);
     };
   }
 
     };
   }
 
-  function styleConstant$1(name, interpolate$$1, value1) {
+  function styleConstant$1(name, interpolate, value1) {
     var value00,
         interpolate0;
     return function() {
       var value0 = styleValue(this, name);
       return value0 === value1 ? null
           : value0 === value00 ? interpolate0
-          : interpolate0 = interpolate$$1(value00 = value0, value1);
+          : interpolate0 = interpolate(value00 = value0, value1);
     };
   }
 
-  function styleFunction$1(name, interpolate$$1, value) {
+  function styleFunction$1(name, interpolate, value) {
     var value00,
         value10,
         interpolate0;
       if (value1 == null) value1 = (this.style.removeProperty(name), styleValue(this, name));
       return value0 === value1 ? null
           : value0 === value00 && value1 === value10 ? interpolate0
-          : interpolate0 = interpolate$$1(value00 = value0, value10 = value1);
+          : interpolate0 = interpolate(value00 = value0, value10 = value1);
     };
   }
 
 
   function active(node, name) {
     var schedules = node.__transition,
-        schedule$$1,
+        schedule,
         i;
 
     if (schedules) {
       name = name == null ? null : name + "";
       for (i in schedules) {
-        if ((schedule$$1 = schedules[i]).state > SCHEDULED && schedule$$1.name === name) {
+        if ((schedule = schedules[i]).state > SCHEDULED && schedule.name === name) {
           return new Transition([[node]], root$1, name, +i);
         }
       }
           .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(); })
                   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 = interpolate(selection0, selection1);
 
               function tween(t) {
               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);
 
     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)
-            .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)
-            .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 {
           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,
           lockX,
           lockY,
           point0 = mouse(that),
-          point$$1 = point0,
+          point = point0,
           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 = 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;
       function moved() {
         var point1 = mouse(that);
         if (shifting && !lockX && !lockY) {
-          if (Math.abs(point1[0] - point$$1[0]) > Math.abs(point1[1] - point$$1[1])) lockY = true;
+          if (Math.abs(point1[0] - point[0]) > Math.abs(point1[1] - point[1])) lockY = true;
           else lockX = true;
         }
-        point$$1 = point1;
+        point = point1;
         moving = true;
         noevent$1();
         move();
       function move() {
         var t;
 
-        dx = point$$1[0] - point0[0];
-        dy = point$$1[1] - point0[1];
+        dx = point[0] - point0[0];
+        dy = point[1] - point0[1];
 
         switch (mode) {
           case MODE_SPACE:
           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();
         }
         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$1(selection$$1)) state.selection = null, redraw.call(that);
+        if (state.selection) selection = state.selection; // May be set by brush.move (on start)!
+        if (empty$1(selection)) state.selection = null, redraw.call(that);
         emit.end();
       }
 
       cartesianNormalizeInPlace(inflection);
       inflection = spherical(inflection);
       var delta = lambda - lambda2,
-          sign$$1 = delta > 0 ? 1 : -1,
-          lambdai = inflection[0] * degrees$1 * sign$$1,
+          sign = delta > 0 ? 1 : -1,
+          lambdai = inflection[0] * degrees$1 * sign,
           phii,
           antimeridian = abs(delta) > 180;
-      if (antimeridian ^ (sign$$1 * lambda2 < lambdai && lambdai < sign$$1 * lambda)) {
+      if (antimeridian ^ (sign * lambda2 < lambdai && lambdai < sign * lambda)) {
         phii = inflection[1] * degrees$1;
         if (phii > phi1) phi1 = phii;
-      } else if (lambdai = (lambdai + 360) % 360 - 180, antimeridian ^ (sign$$1 * lambda2 < lambdai && lambdai < sign$$1 * lambda)) {
+      } else if (lambdai = (lambdai + 360) % 360 - 180, antimeridian ^ (sign * lambda2 < lambdai && lambdai < sign * lambda)) {
         phii = -inflection[1] * degrees$1;
         if (phii < phi0) phi0 = phii;
       } else {
             sinPhi1 = sin$1(phi1),
             cosPhi1 = cos$1(phi1),
             delta = lambda1 - lambda0,
-            sign$$1 = delta >= 0 ? 1 : -1,
-            absDelta = sign$$1 * delta,
+            sign = delta >= 0 ? 1 : -1,
+            absDelta = sign * delta,
             antimeridian = absDelta > pi$3,
             k = sinPhi0 * sinPhi1;
 
-        sum$1.add(atan2(k * sign$$1 * sin$1(absDelta), cosPhi0 * cosPhi1 + k * cos$1(absDelta)));
-        angle += antimeridian ? delta + sign$$1 * tau$3 : delta;
+        sum$1.add(atan2(k * sign * sin$1(absDelta), cosPhi0 * cosPhi1 + k * cos$1(absDelta)));
+        angle += antimeridian ? delta + sign * tau$3 : delta;
 
         // Are the longitudes either side of the point’s meridian (lambda),
         // and are the latitudes smaller than the parallel (phi)?
   }
 
   function responseOf(parse, row) {
-    return function(request$$1) {
-      return parse(request$$1.responseText, row);
+    return function(request) {
+      return parse(request.responseText, row);
     };
   }
 
     var scale = ordinal().unknown(undefined),
         domain = scale.domain,
         ordinalRange = scale.range,
-        range$$1 = [0, 1],
+        range$1 = [0, 1],
         step,
         bandwidth,
         round = false,
 
     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[1] < range$1[0],
+          start = range$1[reverse - 0],
+          stop = range$1[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;
     };
 
     scale.range = function(_) {
-      return arguments.length ? (range$$1 = [+_[0], +_[1]], rescale()) : range$$1.slice();
+      return arguments.length ? (range$1 = [+_[0], +_[1]], rescale()) : range$1.slice();
     };
 
     scale.rangeRound = function(_) {
-      return range$$1 = [+_[0], +_[1]], round = true, rescale();
+      return range$1 = [+_[0], +_[1]], round = true, rescale();
     };
 
     scale.bandwidth = function() {
     scale.copy = function() {
       return band()
           .domain(domain())
-          .range(range$$1)
+          .range(range$1)
           .round(round)
           .paddingInner(paddingInner)
           .paddingOuter(paddingOuter)
     };
   }
 
-  function bimap(domain, range$$1, deinterpolate, reinterpolate) {
-    var d0 = domain[0], d1 = domain[1], r0 = range$$1[0], r1 = range$$1[1];
+  function bimap(domain, range, deinterpolate, reinterpolate) {
+    var d0 = domain[0], d1 = domain[1], r0 = range[0], r1 = range[1];
     if (d1 < d0) d0 = deinterpolate(d1, d0), r0 = reinterpolate(r1, r0);
     else d0 = deinterpolate(d0, d1), r0 = reinterpolate(r0, r1);
     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) {
+    var j = Math.min(domain.length, range.length) - 1,
         d = new Array(j),
         r = new Array(j),
         i = -1;
     // 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]);
-      r[i] = reinterpolate(range$$1[i], range$$1[i + 1]);
+      r[i] = reinterpolate(range[i], range[i + 1]);
     }
 
     return function(x) {
   // 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) {
     var domain = unit,
-        range$$1 = unit,
-        interpolate$$1 = interpolate,
+        range = unit,
+        interpolate$1 = interpolate,
         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) {
-      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$1)))(+x);
     }
 
     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) : reinterpolate)))(+y);
     };
 
     scale.domain = function(_) {
     };
 
     scale.range = function(_) {
-      return arguments.length ? (range$$1 = slice$5.call(_), rescale()) : range$$1.slice();
+      return arguments.length ? (range = slice$5.call(_), rescale()) : range.slice();
     };
 
     scale.rangeRound = function(_) {
-      return range$$1 = slice$5.call(_), interpolate$$1 = interpolateRound, rescale();
+      return range = slice$5.call(_), interpolate$1 = interpolateRound, rescale();
     };
 
     scale.clamp = function(_) {
     };
 
     scale.interpolate = function(_) {
-      return arguments.length ? (interpolate$$1 = _, rescale()) : interpolate$$1;
+      return arguments.length ? (interpolate$1 = _, rescale()) : interpolate$1;
     };
 
     return rescale();
     return pow$1().exponent(0.5);
   }
 
-  function quantile$1() {
+  function quantile() {
     var domain = [],
-        range$$1 = [],
+        range = [],
         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] = quantile(domain, i / n);
+      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) {
-      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]
     };
 
     scale.range = function(_) {
-      return arguments.length ? (range$$1 = slice$5.call(_), rescale()) : range$$1.slice();
+      return arguments.length ? (range = slice$5.call(_), rescale()) : range.slice();
     };
 
     scale.quantiles = function() {
     };
 
     scale.copy = function() {
-      return quantile$1()
+      return quantile()
           .domain(domain)
-          .range(range$$1);
+          .range(range);
     };
 
     return scale;
         x1 = 1,
         n = 1,
         domain = [0.5],
-        range$$1 = [0, 1];
+        range = [0, 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)];
     }
 
     function rescale() {
     };
 
     scale.range = function(_) {
-      return arguments.length ? (n = (range$$1 = slice$5.call(_)).length - 1, rescale()) : range$$1.slice();
+      return arguments.length ? (n = (range = slice$5.call(_)).length - 1, rescale()) : range.slice();
     };
 
     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]
     scale.copy = function() {
       return quantize()
           .domain([x0, x1])
-          .range(range$$1);
+          .range(range);
     };
 
     return linearish(scale);
   }
 
-  function threshold() {
+  function threshold$1() {
     var domain = [0.5],
-        range$$1 = [0, 1],
+        range = [0, 1],
         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(_) {
-      return arguments.length ? (domain = slice$5.call(_), n = Math.min(domain.length, range$$1.length - 1), scale) : domain.slice();
+      return arguments.length ? (domain = slice$5.call(_), n = Math.min(domain.length, range.length - 1), scale) : domain.slice();
     };
 
     scale.range = function(_) {
-      return arguments.length ? (range$$1 = slice$5.call(_), n = Math.min(domain.length, range$$1.length - 1), scale) : range$$1.slice();
+      return arguments.length ? (range = slice$5.call(_), n = Math.min(domain.length, range.length - 1), scale) : range.slice();
     };
 
     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()
+      return threshold$1()
           .domain(domain)
-          .range(range$$1);
+          .range(range);
     };
 
     return scale;
       return function(string) {
         var d = newYear(1900),
             i = parseSpecifier(d, specifier, string += "", 0),
-            week, day$$1;
+            week, day$1;
         if (i != string.length) return null;
 
         // If a UNIX timestamp is specified, return it.
           if (d.V < 1 || d.V > 53) return null;
           if (!("w" in d)) d.w = 1;
           if ("Z" in d) {
-            week = utcDate(newYear(d.y)), day$$1 = week.getUTCDay();
-            week = day$$1 > 4 || day$$1 === 0 ? utcMonday.ceil(week) : utcMonday(week);
+            week = utcDate(newYear(d.y)), day$1 = week.getUTCDay();
+            week = day$1 > 4 || day$1 === 0 ? utcMonday.ceil(week) : utcMonday(week);
             week = utcDay.offset(week, (d.V - 1) * 7);
             d.y = week.getUTCFullYear();
             d.m = week.getUTCMonth();
             d.d = week.getUTCDate() + (d.w + 6) % 7;
           } else {
-            week = newDate(newYear(d.y)), day$$1 = week.getDay();
-            week = day$$1 > 4 || day$$1 === 0 ? monday.ceil(week) : monday(week);
+            week = newDate(newYear(d.y)), day$1 = week.getDay();
+            week = day$1 > 4 || day$1 === 0 ? monday.ceil(week) : monday(week);
             week = day.offset(week, (d.V - 1) * 7);
             d.y = week.getFullYear();
             d.m = week.getMonth();
           }
         } else if ("W" in d || "U" in d) {
           if (!("w" in d)) d.w = "u" in d ? d.u % 7 : "W" in d ? 1 : 0;
-          day$$1 = "Z" in d ? utcDate(newYear(d.y)).getUTCDay() : newDate(newYear(d.y)).getDay();
+          day$1 = "Z" in d ? utcDate(newYear(d.y)).getUTCDay() : newDate(newYear(d.y)).getDay();
           d.m = 0;
-          d.d = "W" in d ? (d.w + 6) % 7 + d.W * 7 - (day$$1 + 5) % 7 : d.w + d.U * 7 - (day$$1 + 6) % 7;
+          d.d = "W" in d ? (d.w + 6) % 7 + d.W * 7 - (day$1 + 5) % 7 : d.w + d.U * 7 - (day$1 + 6) % 7;
         }
 
         // If a time zone is specified, all fields are interpreted as UTC and then
   }
 
   function formatWeekdayNumberMonday(d) {
-    var day$$1 = d.getDay();
-    return day$$1 === 0 ? 7 : day$$1;
+    var day = d.getDay();
+    return day === 0 ? 7 : day;
   }
 
   function formatWeekNumberSunday(d, p) {
   }
 
   function formatWeekNumberISO(d, p) {
-    var day$$1 = d.getDay();
-    d = (day$$1 >= 4 || day$$1 === 0) ? thursday(d) : thursday.ceil(d);
+    var day = d.getDay();
+    d = (day >= 4 || day === 0) ? thursday(d) : thursday.ceil(d);
     return pad(thursday.count(year(d), d) + (year(d).getDay() === 4), p, 2);
   }
 
   }
 
   function formatUTCWeekNumberISO(d, p) {
-    var day$$1 = d.getUTCDay();
-    d = (day$$1 >= 4 || day$$1 === 0) ? utcThursday(d) : utcThursday.ceil(d);
+    var day = d.getUTCDay();
+    d = (day >= 4 || day === 0) ? utcThursday(d) : utcThursday.ceil(d);
     return pad(utcThursday.count(utcYear(d), d) + (utcYear(d).getUTCDay() === 4), p, 2);
   }
 
     return t instanceof Date ? +t : +new Date(+t);
   }
 
-  function calendar(year$$1, month$$1, week, day$$1, hour$$1, minute$$1, second$$1, millisecond$$1, format) {
+  function calendar(year, month, week, day, hour, minute, second, millisecond, format) {
     var scale = continuous(deinterpolateLinear, interpolateNumber),
         invert = scale.invert,
         domain = scale.domain;
         formatYear = format("%Y");
 
     var tickIntervals = [
-      [second$$1,  1,      durationSecond$1],
-      [second$$1,  5,  5 * durationSecond$1],
-      [second$$1, 15, 15 * durationSecond$1],
-      [second$$1, 30, 30 * durationSecond$1],
-      [minute$$1,  1,      durationMinute$1],
-      [minute$$1,  5,  5 * durationMinute$1],
-      [minute$$1, 15, 15 * durationMinute$1],
-      [minute$$1, 30, 30 * durationMinute$1],
-      [  hour$$1,  1,      durationHour$1  ],
-      [  hour$$1,  3,  3 * durationHour$1  ],
-      [  hour$$1,  6,  6 * durationHour$1  ],
-      [  hour$$1, 12, 12 * durationHour$1  ],
-      [   day$$1,  1,      durationDay$1   ],
-      [   day$$1,  2,  2 * durationDay$1   ],
+      [second,  1,      durationSecond$1],
+      [second,  5,  5 * durationSecond$1],
+      [second, 15, 15 * durationSecond$1],
+      [second, 30, 30 * durationSecond$1],
+      [minute,  1,      durationMinute$1],
+      [minute,  5,  5 * durationMinute$1],
+      [minute, 15, 15 * durationMinute$1],
+      [minute, 30, 30 * durationMinute$1],
+      [  hour,  1,      durationHour$1  ],
+      [  hour,  3,  3 * durationHour$1  ],
+      [  hour,  6,  6 * durationHour$1  ],
+      [  hour, 12, 12 * durationHour$1  ],
+      [   day,  1,      durationDay$1   ],
+      [   day,  2,  2 * durationDay$1   ],
       [  week,  1,      durationWeek$1  ],
-      [ month$$1,  1,      durationMonth ],
-      [ month$$1,  3,  3 * durationMonth ],
-      [  year$$1,  1,      durationYear  ]
+      [ month,  1,      durationMonth ],
+      [ month,  3,  3 * durationMonth ],
+      [  year,  1,      durationYear  ]
     ];
 
-    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 tickFormat(date) {
+      return (second(date) < date ? formatMillisecond
+          : minute(date) < date ? formatSecond
+          : hour(date) < date ? formatMinute
+          : day(date) < date ? formatHour
+          : month(date) < date ? (week(date) < date ? formatDay : formatWeek)
+          : year(date) < date ? formatMonth
+          : formatYear)(date);
     }
 
     function tickInterval(interval, start, stop, step) {
             i = bisector(function(i) { return i[2]; }).right(tickIntervals, target);
         if (i === tickIntervals.length) {
           step = tickStep(start / durationYear, stop / durationYear, interval);
-          interval = year$$1;
+          interval = year;
         } else if (i) {
           i = tickIntervals[target / tickIntervals[i - 1][2] < tickIntervals[i][2] / target ? i - 1 : i];
           step = i[1];
           interval = i[0];
         } else {
           step = Math.max(tickStep(start, stop, interval), 1);
-          interval = millisecond$$1;
+          interval = millisecond;
         }
       }
 
     };
 
     scale.copy = function() {
-      return copy(scale, calendar(year$$1, month$$1, week, day$$1, hour$$1, minute$$1, second$$1, millisecond$$1, format));
+      return copy(scale, calendar(year, month, week, day, hour, minute, second, millisecond, format));
     };
 
     return scale;
   }
 
   function line() {
-    var x$$1 = x$3,
-        y$$1 = y$3,
+    var x = x$3,
+        y = y$3,
         defined = constant$a(true),
         context = null,
         curve = curveLinear,
           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(_) {
-      return arguments.length ? (x$$1 = typeof _ === "function" ? _ : constant$a(+_), line) : x$$1;
+      return arguments.length ? (x = typeof _ === "function" ? _ : constant$a(+_), line) : x;
     };
 
     line.y = function(_) {
-      return arguments.length ? (y$$1 = typeof _ === "function" ? _ : constant$a(+_), line) : y$$1;
+      return arguments.length ? (y = typeof _ === "function" ? _ : constant$a(+_), line) : y;
     };
 
     line.defined = function(_) {
   function link$2(curve) {
     var source = linkSource,
         target = linkTarget,
-        x$$1 = x$3,
-        y$$1 = y$3,
+        x = x$3,
+        y = y$3,
         context = null;
 
     function link() {
       var buffer, argv = slice$6.call(arguments), s = source.apply(this, argv), t = target.apply(this, argv);
       if (!context) context = buffer = path();
-      curve(context, +x$$1.apply(this, (argv[0] = s, argv)), +y$$1.apply(this, argv), +x$$1.apply(this, (argv[0] = t, argv)), +y$$1.apply(this, argv));
+      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.x = function(_) {
-      return arguments.length ? (x$$1 = typeof _ === "function" ? _ : constant$a(+_), link) : x$$1;
+      return arguments.length ? (x = typeof _ === "function" ? _ : constant$a(+_), link) : x;
     };
 
     link.y = function(_) {
-      return arguments.length ? (y$$1 = typeof _ === "function" ? _ : constant$a(+_), link) : y$$1;
+      return arguments.length ? (y = typeof _ === "function" ? _ : constant$a(+_), link) : y;
     };
 
     link.context = function(_) {
 
   var cardinalClosed = (function custom(tension) {
 
-    function cardinal$$1(context) {
+    function cardinal(context) {
       return new CardinalClosed(context, tension);
     }
 
-    cardinal$$1.tension = function(tension) {
+    cardinal.tension = function(tension) {
       return custom(+tension);
     };
 
-    return cardinal$$1;
+    return cardinal;
   })(0);
 
   function CardinalOpen(context, tension) {
 
   var cardinalOpen = (function custom(tension) {
 
-    function cardinal$$1(context) {
+    function cardinal(context) {
       return new CardinalOpen(context, tension);
     }
 
-    cardinal$$1.tension = function(tension) {
+    cardinal.tension = function(tension) {
       return custom(+tension);
     };
 
-    return cardinal$$1;
+    return cardinal;
   })(0);
 
   function point$4(that, x, y) {
 
   var catmullRomClosed = (function custom(alpha) {
 
-    function catmullRom$$1(context) {
+    function catmullRom(context) {
       return alpha ? new CatmullRomClosed(context, alpha) : new CardinalClosed(context, 0);
     }
 
-    catmullRom$$1.alpha = function(alpha) {
+    catmullRom.alpha = function(alpha) {
       return custom(+alpha);
     };
 
-    return catmullRom$$1;
+    return catmullRom;
   })(0.5);
 
   function CatmullRomOpen(context, alpha) {
 
   var catmullRomOpen = (function custom(alpha) {
 
-    function catmullRom$$1(context) {
+    function catmullRom(context) {
       return alpha ? new CatmullRomOpen(context, alpha) : new CardinalOpen(context, 0);
     }
 
-    catmullRom$$1.alpha = function(alpha) {
+    catmullRom.alpha = function(alpha) {
       return custom(+alpha);
     };
 
-    return catmullRom$$1;
+    return catmullRom;
   })(0.5);
 
   function LinearClosed(context) {
   };
 
   function voronoi() {
-    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) {
-        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;
     };
 
     voronoi.x = function(_) {
-      return arguments.length ? (x$$1 = typeof _ === "function" ? _ : constant$b(+_), voronoi) : x$$1;
+      return arguments.length ? (x = typeof _ === "function" ? _ : constant$b(+_), voronoi) : x;
     };
 
     voronoi.y = function(_) {
-      return arguments.length ? (y$$1 = typeof _ === "function" ? _ : constant$b(+_), voronoi) : y$$1;
+      return arguments.length ? (y = typeof _ === "function" ? _ : constant$b(+_), voronoi) : y;
     };
 
     voronoi.extent = function(_) {
     return "ontouchstart" in this;
   }
 
-  function defaultConstrain(transform$$1, extent, translateExtent) {
-    var dx0 = transform$$1.invertX(extent[0][0]) - translateExtent[0][0],
-        dx1 = transform$$1.invertX(extent[1][0]) - translateExtent[1][0],
-        dy0 = transform$$1.invertY(extent[0][1]) - translateExtent[0][1],
-        dy1 = transform$$1.invertY(extent[1][1]) - translateExtent[1][1];
-    return transform$$1.translate(
+  function defaultConstrain(transform, extent, translateExtent) {
+    var dx0 = transform.invertX(extent[0][0]) - translateExtent[0][0],
+        dx1 = transform.invertX(extent[1][0]) - translateExtent[1][0],
+        dy0 = transform.invertY(extent[0][1]) - translateExtent[0][1],
+        dy1 = transform.invertY(extent[1][1]) - translateExtent[1][1];
+    return transform.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)
     );
         scaleExtent = [0, Infinity],
         translateExtent = [[-Infinity, -Infinity], [Infinity, Infinity]],
         duration = 250,
-        interpolate$$1 = interpolateZoom,
+        interpolate = interpolateZoom,
         gestures = [],
         listeners = dispatch("start", "zoom", "end"),
         touchstarting,
         wheelDelay = 150,
         clickDistance2 = 0;
 
-    function zoom(selection$$1) {
-      selection$$1
+    function zoom(selection) {
+      selection
           .property("__zoom", defaultTransform)
           .on("wheel.zoom", wheeled)
           .on("mousedown.zoom", mousedowned)
           .style("-webkit-tap-highlight-color", "rgba(0,0,0,0)");
     }
 
-    zoom.transform = function(collection, transform$$1) {
-      var selection$$1 = collection.selection ? collection.selection() : collection;
-      selection$$1.property("__zoom", defaultTransform);
-      if (collection !== selection$$1) {
-        schedule(collection, transform$$1);
+    zoom.transform = function(collection, transform) {
+      var selection = collection.selection ? collection.selection() : collection;
+      selection.property("__zoom", defaultTransform);
+      if (collection !== selection) {
+        schedule(collection, transform);
       } else {
-        selection$$1.interrupt().each(function() {
+        selection.interrupt().each(function() {
           gesture(this, arguments)
               .start()
-              .zoom(null, typeof transform$$1 === "function" ? transform$$1.apply(this, arguments) : transform$$1)
+              .zoom(null, typeof transform === "function" ? transform.apply(this, arguments) : transform)
               .end();
         });
       }
     };
 
-    zoom.scaleBy = function(selection$$1, k) {
-      zoom.scaleTo(selection$$1, function() {
+    zoom.scaleBy = function(selection, k) {
+      zoom.scaleTo(selection, function() {
         var k0 = this.__zoom.k,
             k1 = typeof k === "function" ? k.apply(this, arguments) : k;
         return k0 * k1;
       });
     };
 
-    zoom.scaleTo = function(selection$$1, k) {
-      zoom.transform(selection$$1, function() {
+    zoom.scaleTo = function(selection, k) {
+      zoom.transform(selection, function() {
         var e = extent.apply(this, arguments),
             t0 = this.__zoom,
             p0 = centroid(e),
       });
     };
 
-    zoom.translateBy = function(selection$$1, x, y) {
-      zoom.transform(selection$$1, function() {
+    zoom.translateBy = function(selection, x, y) {
+      zoom.transform(selection, function() {
         return constrain(this.__zoom.translate(
           typeof x === "function" ? x.apply(this, arguments) : x,
           typeof y === "function" ? y.apply(this, arguments) : y
       });
     };
 
-    zoom.translateTo = function(selection$$1, x, y) {
-      zoom.transform(selection$$1, function() {
+    zoom.translateTo = function(selection, x, y) {
+      zoom.transform(selection, function() {
         var e = extent.apply(this, arguments),
             t = this.__zoom,
             p = centroid(e);
       });
     };
 
-    function scale(transform$$1, k) {
+    function scale(transform, k) {
       k = Math.max(scaleExtent[0], Math.min(scaleExtent[1], k));
-      return k === transform$$1.k ? transform$$1 : new Transform(k, transform$$1.x, transform$$1.y);
+      return k === transform.k ? transform : new Transform(k, transform.x, transform.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 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 centroid(extent) {
       return [(+extent[0][0] + +extent[1][0]) / 2, (+extent[0][1] + +extent[1][1]) / 2];
     }
 
-    function schedule(transition$$1, transform$$1, center) {
-      transition$$1
+    function schedule(transition, transform, center) {
+      transition
           .on("start.zoom", function() { gesture(this, arguments).start(); })
           .on("interrupt.zoom end.zoom", function() { gesture(this, arguments).end(); })
           .tween("zoom", function() {
                 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$$1 === "function" ? transform$$1.apply(that, args) : transform$$1,
-                i = interpolate$$1(a.invert(p).concat(w / a.k), b.invert(p).concat(w / b.k));
+                b = typeof transform === "function" ? transform.apply(that, args) : transform,
+                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 this;
       },
-      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;
+      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;
         this.emit("zoom");
         return this;
       },
     };
 
     zoom.interpolate = function(_) {
-      return arguments.length ? (interpolate$$1 = _, zoom) : interpolate$$1;
+      return arguments.length ? (interpolate = _, zoom) : interpolate;
     };
 
     zoom.on = function() {
     min: min,
     pairs: pairs,
     permute: permute,
-    quantile: quantile,
+    quantile: threshold,
     range: range,
     scan: scan,
     shuffle: shuffle,
     scaleImplicit: implicit,
     scalePow: pow$1,
     scaleSqrt: sqrt$1,
-    scaleQuantile: quantile$1,
+    scaleQuantile: quantile,
     scaleQuantize: quantize,
-    scaleThreshold: threshold,
+    scaleThreshold: threshold$1,
     scaleTime: time,
     scaleUtc: utcTime,
     schemeCategory10: category10,
   }
 
   /**
-   * The base implementation of `_.toPairs` and `_.toPairsIn` which creates an array
-   * of key-value pairs for `object` corresponding to the property names of `props`.
+   * A specialized version of `_.every` for arrays without support for
+   * iteratee shorthands.
    *
    * @private
-   * @param {Object} object The object to query.
-   * @param {Array} props The property names to get values for.
-   * @returns {Object} Returns the key-value pairs.
+   * @param {Array} [array] The array to iterate over.
+   * @param {Function} predicate The function invoked per iteration.
+   * @returns {boolean} Returns `true` if all elements pass the predicate check,
+   *  else `false`.
    */
-  function baseToPairs(object, props) {
-    return arrayMap(props, function(key) {
-      return [key, object[key]];
-    });
+  function arrayEvery(array, predicate) {
+    var index = -1,
+        length = array == null ? 0 : array.length;
+
+    while (++index < length) {
+      if (!predicate(array[index], index, array)) {
+        return false;
+      }
+    }
+    return true;
   }
 
   /**
-   * Converts `set` to its value-value pairs.
+   * The base implementation of `_.every` without support for iteratee shorthands.
    *
    * @private
-   * @param {Object} set The set to convert.
-   * @returns {Array} Returns the value-value pairs.
+   * @param {Array|Object} collection The collection to iterate over.
+   * @param {Function} predicate The function invoked per iteration.
+   * @returns {boolean} Returns `true` if all elements pass the predicate check,
+   *  else `false`
    */
-  function setToPairs(set) {
-    var index = -1,
-        result = Array(set.size);
-
-    set.forEach(function(value) {
-      result[++index] = [value, value];
+  function baseEvery(collection, predicate) {
+    var result = true;
+    baseEach(collection, function(value, index, collection) {
+      result = !!predicate(value, index, collection);
+      return result;
     });
     return result;
   }
 
-  /** `Object#toString` result references. */
-  var mapTag$6 = '[object Map]',
-      setTag$6 = '[object Set]';
-
   /**
-   * Creates a `_.toPairs` or `_.toPairsIn` function.
+   * Checks if `predicate` returns truthy for **all** elements of `collection`.
+   * Iteration is stopped once `predicate` returns falsey. The predicate is
+   * invoked with three arguments: (value, index|key, collection).
    *
-   * @private
-   * @param {Function} keysFunc The function to get the keys of a given object.
-   * @returns {Function} Returns the new pairs function.
-   */
-  function createToPairs(keysFunc) {
-    return function(object) {
-      var tag = getTag$1(object);
-      if (tag == mapTag$6) {
-        return mapToArray(object);
-      }
-      if (tag == setTag$6) {
-        return setToPairs(object);
-      }
-      return baseToPairs(object, keysFunc(object));
-    };
-  }
-
-  /**
-   * Creates an array of own enumerable string keyed-value pairs for `object`
-   * which can be consumed by `_.fromPairs`. If `object` is a map or set, its
-   * entries are returned.
+   * **Note:** This method returns `true` for
+   * [empty collections](https://en.wikipedia.org/wiki/Empty_set) because
+   * [everything is true](https://en.wikipedia.org/wiki/Vacuous_truth) of
+   * elements of empty collections.
    *
    * @static
    * @memberOf _
-   * @since 4.0.0
-   * @alias entries
-   * @category Object
-   * @param {Object} object The object to query.
-   * @returns {Array} Returns the key-value pairs.
+   * @since 0.1.0
+   * @category Collection
+   * @param {Array|Object} collection The collection to iterate over.
+   * @param {Function} [predicate=_.identity] The function invoked per iteration.
+   * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
+   * @returns {boolean} Returns `true` if all elements pass the predicate check,
+   *  else `false`.
    * @example
    *
-   * function Foo() {
-   *   this.a = 1;
-   *   this.b = 2;
-   * }
+   * _.every([true, 1, null, 'yes'], Boolean);
+   * // => false
    *
-   * Foo.prototype.c = 3;
+   * var users = [
+   *   { 'user': 'barney', 'age': 36, 'active': false },
+   *   { 'user': 'fred',   'age': 40, 'active': false }
+   * ];
+   *
+   * // The `_.matches` iteratee shorthand.
+   * _.every(users, { 'user': 'barney', 'active': false });
+   * // => false
+   *
+   * // The `_.matchesProperty` iteratee shorthand.
+   * _.every(users, ['active', false]);
+   * // => true
    *
-   * _.toPairs(new Foo);
-   * // => [['a', 1], ['b', 2]] (iteration order is not guaranteed)
+   * // The `_.property` iteratee shorthand.
+   * _.every(users, 'active');
+   * // => false
    */
-  var toPairs = createToPairs(keys$1);
+  function every(collection, predicate, guard) {
+    var func = isArray(collection) ? arrayEvery : baseEvery;
+    if (guard && isIterateeCall(collection, predicate, guard)) {
+      predicate = undefined;
+    }
+    return func(collection, baseIteratee(predicate, 3));
+  }
 
   /**
    * The base implementation of `_.isNaN` without support for number objects.
           key !== 'source' &&
           key !== 'odbl' &&
           key.indexOf('tiger:') !== 0;
-
   }
 
 
   var osmOneWayTags = {
       'aerialway': {
           'chair_lift': true,
-          'mixed_lift': true,
-          't-bar': true,
+          'drag_lift': true,
           'j-bar': true,
+          'magic_carpet': true,
+          'mixed_lift': true,
           'platter': true,
           'rope_tow': true,
-          'magic_carpet': true,
-          'yes': true
+          't-bar': true,
+          'zipline': true
       },
       'highway': {
           'motorway': true
 
   var dataAddressFormats = [{format:[["housenumber","street"],["city","postcode"]]},{countryCodes:["au"],format:[["unit","housenumber","street"],["suburb","state","postcode"]]},{countryCodes:["gb"],format:[["housename"],["housenumber","street"],["city","postcode"]]},{countryCodes:["ie"],format:[["housename"],["housenumber","street"],["city"],["postcode"]]},{countryCodes:["at","ch","de","si","pl"],format:[["street","housenumber"],["postcode","city"]]},{countryCodes:["ad","ba","be","cz","dk","es","fi","gr","hr","is","it","li","nl","no","pt","se","sk","sm","va"],format:[["street","housenumber","unit"],["postcode","city"]]},{countryCodes:["fr","lu","mo"],format:[["housenumber","street"],["postcode","city"]]},{countryCodes:["br"],format:[["street"],["housenumber","suburb"],["city","postcode"]]},{countryCodes:["vn"],format:[["housenumber","street"],["subdistrict"],["district"],["city"],["province","postcode"]]},{countryCodes:["ca"],format:[["housenumber","street","unit"],["city","province","postcode"]]},{countryCodes:["us"],format:[["housenumber","street","unit"],["city","state","postcode"]]},{countryCodes:["tw"],format:[["postcode","city","district"],["place","street"],["housenumber","floor","unit"]]},{countryCodes:["jp"],format:[["postcode","province","county"],["city","suburb"],["quarter","neighbourhood"],["block_number","housenumber"]],dropdowns:["postcode","province","county","city","suburb","quarter","neighbourhood","block_number"],widths:{postcode:0.3,province:0.35,county:0.35,city:0.65,suburb:0.35,quarter:0.5,neighbourhood:0.5,block_number:0.5,housenumber:0.5}},{countryCodes:["tr"],format:[["neighbourhood"],["street","housenumber"],["postcode","district","city"]]},{countryCodes:["ua"],format:[["housenumber","postcode"],["street"]]},{countryCodes:["cn"],format:[["postcode","province"],["city","district"],["street","housenumber"]]}];
 
-  var dataDeprecated = [{old:{amenity:"firepit"},replace:{leisure:"firepit"}},{old:{barrier:"wire_fence"},replace:{barrier:"fence",fence_type:"chain"}},{old:{barrier:"wood_fence"},replace:{barrier:"fence",fence_type:"wood"}},{old:{highway:"ford"},replace:{ford:"yes"}},{old:{highway:"stile"},replace:{barrier:"stile"}},{old:{highway:"incline"},replace:{highway:"road",incline:"up"}},{old:{highway:"incline_steep"},replace:{highway:"road",incline:"up"}},{old:{highway:"unsurfaced"},replace:{highway:"road",incline:"unpaved"}},{old:{landuse:"wood"},replace:{landuse:"forest",natural:"wood"}},{old:{natural:"marsh"},replace:{natural:"wetland",wetland:"marsh"}},{old:{power_source:"*"},replace:{"generator:source":"$1"}},{old:{power_rating:"*"},replace:{"generator:output":"$1"}},{old:{shop:"organic"},replace:{shop:"supermarket",organic:"only"}}];
+  var dataDeprecated = [{old:{amenity:"advertising"},replace:{advertising:"*"}},{old:{amenity:"artwork"},replace:{tourism:"artwork"}},{old:{amenity:"car_repair"},replace:{shop:"car_repair"}},{old:{amenity:"citymap_post"},replace:{tourism:"information"}},{old:{amenity:"community_center"},replace:{amenity:"community_centre"}},{old:{amenity:"ev_charging"},replace:{amenity:"charging_station"}},{old:{amenity:"firepit"},replace:{leisure:"firepit"}},{old:{amenity:"garage"},replace:{landuse:"garages"}},{old:{amenity:"garages"},replace:{landuse:"garages"}},{old:{amenity:"real_estate"},replace:{office:"estate_agent"}},{old:{amenity:"register_office"},replace:{office:"government",government:"register_office"}},{old:{amenity:"sauna"},replace:{leisure:"sauna"}},{old:{amenity:"scrapyard"},replace:{landuse:"industrial",industrial:"scrap_yard"}},{old:{amenity:"shop"},replace:{shop:"*"}},{old:{amenity:"swimming_pool"},replace:{leisure:"swimming_pool"}},{old:{amenity:"vending_machine",vending:"news_papers"},replace:{amenity:"vending_machine",vending:"newspapers"}},{old:{amenity:"youth_center"},replace:{amenity:"community_centre","community_centre:for":"juvenile"}},{old:{amenity:"youth_centre"},replace:{amenity:"community_centre","community_centre:for":"juvenile"}},{old:{barrier:"wire_fence"},replace:{barrier:"fence",fence_type:"chain"}},{old:{barrier:"wood_fence"},replace:{barrier:"fence",fence_type:"wood"}},{old:{building:"entrance"},replace:{entrance:"*"}},{old:{"building:roof:colour":"*"},replace:{"roof:colour":"$1"}},{old:{"building:type":"*"},replace:{building:"$1"}},{old:{color:"*"},replace:{colour:"$1"}},{old:{craft:"jeweler"},replace:{shop:"jewelery"}},{old:{craft:"optician"},replace:{shop:"optician"}},{old:{drinkable:"*"},replace:{drinking_water:"$1"}},{old:{escalator:"*"},replace:{highway:"steps",conveying:"$1"}},{old:{fenced:"yes"},replace:{barrier:"fence"}},{old:{highway:"ford"},replace:{ford:"*"}},{old:{highway:"no"}},{old:{highway:"stile"},replace:{barrier:"stile"}},{old:{highway:"incline"},replace:{highway:"road",incline:"up"}},{old:{highway:"incline_steep"},replace:{highway:"road",incline:"up"}},{old:{highway:"unsurfaced"},replace:{highway:"road",incline:"unpaved"}},{old:{landuse:"farm"},replace:{landuse:"farmland"}},{old:{landuse:"field"},replace:{landuse:"farmland"}},{old:{landuse:"pond"},replace:{natural:"water",water:"pond"}},{old:{landuse:"wood"},replace:{natural:"wood"}},{old:{leisure:"beach"},replace:{natural:"beach"}},{old:{leisure:"club"},replace:{club:"*"}},{old:{man_made:"jetty"},replace:{man_made:"pier"}},{old:{man_made:"mdf"},replace:{telecom:"exchange"}},{old:{man_made:"MDF"},replace:{telecom:"exchange"}},{old:{man_made:"water_tank"},replace:{man_made:"storage_tank",content:"water"}},{old:{man_made:"well"},replace:{man_made:"water_well"}},{old:{natural:"marsh"},replace:{natural:"wetland",wetland:"marsh"}},{old:{office:"administrative"},replace:{office:"government"}},{old:{office:"real_estate"},replace:{office:"estate_agent"}},{old:{place_name:"*"},replace:{name:"$1"}},{old:{pole:"transition"},replace:{"location:transition":"yes"}},{old:{power:"sub_station"},replace:{power:"substation"}},{old:{power_source:"*"},replace:{"generator:source":"$1"}},{old:{power_rating:"*"},replace:{"generator:output":"$1"}},{old:{"roof:color":"*"},replace:{"roof:colour":"$1"}},{old:{route:"ncn"},replace:{route:"bicycle",network:"ncn"}},{old:{shop:"organic"},replace:{shop:"supermarket",organic:"only"}},{old:{shop:"fish"},replace:{shop:"seafood"}},{old:{shop:"fishmonger"},replace:{shop:"seafood"}},{old:{shop:"furnace"},replace:{shop:"fireplace"}},{old:{shop:"gallery"},replace:{shop:"art"}},{old:{shop:"perfume"},replace:{shop:"perfumery"}},{old:{shop:"real_estate"},replace:{office:"estate_agent"}},{old:{tourism:"bed_and_breakfast"},replace:{tourism:"guest_house"}},{old:{water:"intermittent"},replace:{natural:"water",intermittent:"yes"}},{old:{water:"riverbank"},replace:{natural:"water",water:"river"}},{old:{water:"salt"},replace:{natural:"water",salt:"yes"}},{old:{water:"tidal"},replace:{natural:"water",tidal:"yes"}},{old:{waterway:"aqueduct"},replace:{waterway:"canal",bridge:"aqueduct"}}];
 
   var dataDiscarded = {created_by:true,odbl:true,"odbl:note":true,"tiger:upload_uuid":true,"tiger:tlid":true,"tiger:source":true,"tiger:separated":true,"geobase:datasetName":true,"geobase:uuid":true,"sub_sea:type":true,"KSJ2:ADS":true,"KSJ2:ARE":true,"KSJ2:AdminArea":true,"KSJ2:COP_label":true,"KSJ2:DFD":true,"KSJ2:INT":true,"KSJ2:INT_label":true,"KSJ2:LOC":true,"KSJ2:LPN":true,"KSJ2:OPC":true,"KSJ2:PubFacAdmin":true,"KSJ2:RAC":true,"KSJ2:RAC_label":true,"KSJ2:RIC":true,"KSJ2:RIN":true,"KSJ2:WSC":true,"KSJ2:coordinate":true,"KSJ2:curve_id":true,"KSJ2:curve_type":true,"KSJ2:filename":true,"KSJ2:lake_id":true,"KSJ2:lat":true,"KSJ2:long":true,"KSJ2:river_id":true,"SK53_bulk:load":true,"yh:LINE_NAME":true,"yh:LINE_NUM":true,"yh:STRUCTURE":true,"yh:TOTYUMONO":true,"yh:TYPE":true,"yh:WIDTH":true,"yh:WIDTH_RANK":true};
 
   features: features$1
   };
 
-  var en = {icons:{download:"download",information:"info",remove:"remove",undo:"undo",zoom_to:"zoom to",copy:"copy",open_wikidata:"open on wikidata.org"},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."},add_note:{title:"Note",description:"Spotted an issue? Let other mappers know.",tail:"Click on the map to add a note."},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."},drag_node:{connected_to_hidden:"This can't be edited because it is connected to a hidden feature."}},operations:{add:{annotation:{point:"Added a point.",vertex:"Added a node to a way.",relation:"Added a relation.",note:"Added a note."}},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:{from_vertex:{to_point:"Connected a way to a point.",to_vertex:"Connected a way to another.",to_line:"Connected a way to a line.",to_area:"Connected a way to an area.",to_adjacent_vertex:"Merged adjacent points in a way.",to_sibling_vertex:"Connected a way to itself."},from_point:{to_point:"Merged a point with another.",to_vertex:"Merged a point with a point in a way.",to_line:"Moved a point to a line.",to_area:"Moved a point to an area."}},relation:"These features can't be connected because they have conflicting relation roles.",restriction:"These features can't be connected because it would damage a \"{relation}\" relation."},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 it would damage a \"{relation}\" relation.",relation:"These features can't be merged because they have conflicting relation roles.",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:{annotation:{create:"Added a turn restriction","delete":"Deleted a turn restriction"}},detach_node:{title:"Detach",key:"E",description:"Detach this node from these lines/areas.",annotation:"Detached a node from parent lines/areas.",restriction:"This node can't be detached because it would damage a \"{relation}\" relation.",connected_to_hidden:"This node can't be detached because it is connected to a hidden feature."}},restriction:{controls:{distance:"Distance",distance_up_to:"Up to {distance}",via:"Via",via_node_only:"Node only",via_up_to_one:"Up to 1 way",via_up_to_two:"Up to 2 ways"},help:{indirect:"(indirect)",turn:{no_left_turn:"NO Left Turn {indirect}",no_right_turn:"NO Right Turn {indirect}",no_u_turn:"NO U-Turn {indirect}",no_straight_on:"NO Straight On {indirect}",only_left_turn:"ONLY Left Turn {indirect}",only_right_turn:"ONLY Right Turn {indirect}",only_u_turn:"ONLY U-Turn {indirect}",only_straight_on:"ONLY Straight On {indirect}",allowed_left_turn:"Left Turn Allowed {indirect}",allowed_right_turn:"Right Turn Allowed {indirect}",allowed_u_turn:"U-Turn Allowed {indirect}",allowed_straight_on:"Straight On Allowed {indirect}"},from:"FROM",via:"VIA",to:"TO",from_name:"{from} {fromName}",from_name_to_name:"{from} {fromName} {to} {toName}",via_names:"{via} {viaNames}",select_from:"Click to select a {from} segment",select_from_name:"Click to select {from} {fromName}",toggle:"Click for \"{turn}\""}},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:"Log In",logout:"Log Out",loading_auth:"Connecting to OpenStreetMap...",report_a_bug:"Report a bug",help_translate:"Help translate",sidebar:{key:"`",tooltip:"Toggle the sidebar."},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",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.",request_review:"I would like someone to review my edits.",save:"Upload",cancel:"Cancel",changes:"{count} Changes",download_changes:"Download osmChange file",errors:"Errors",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:"https://www.openstreetmap.org/copyright"},contributors:{list:"Edits by {users}",truncated_list:"Edits by {users} and {count} others"},info_panels:{key:"I",background:{key:"B",title:"Background",zoom:"Zoom",vintage:"Vintage",source:"Source",description:"Description",resolution:"Resolution",accuracy:"Accuracy",unknown:"Unknown",show_tiles:"Show Tiles",hide_tiles:"Hide Tiles",show_vintage:"Show Vintage",hide_vintage:"Hide Vintage"},history:{key:"H",title:"History",selected:"{n} selected",no_history:"No History (New Feature)",version:"Version",last_edit:"Last Edit",edited_by:"Edited By",changeset:"Changeset",unknown:"Unknown",link_text:"History on openstreetmap.org",note_no_history:"No History (New Note)",note_comments:"Comments",note_created_date:"Created Date",note_created_user:"Created By",note_link_text:"Note on openstreetmap.org"},location:{key:"L",title:"Location",unknown_location:"Unknown Location"},measurement:{key:"M",title:"Measurement",selected:"{n} selected",geometry:"Geometry",closed_line:"closed line",closed_area:"closed area",center:"Center",perimeter:"Perimeter",length:"Length",area:"Area",centroid:"Centroid",location:"Location",metric:"Metric",imperial:"Imperial",node_count:"Number of nodes"}},geometry:{point:"point",vertex:"vertex",line:"line",area:"area",relation:"relation",note:"note"},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:{zoom_to:{key:"Z",title:"Zoom to this",tooltip_feature:"Center and zoom the map to focus on this feature.",tooltip_note:"Center and zoom the map to focus on this note.",tooltip_data:"Center and zoom the map to focus on this data.",tooltip_issue:"Center and zoom the map to focus on this issue."},no_documentation_combination:"There is no documentation available for this tag combination",no_documentation_key:"There is no documentation available for this key",show_more:"Show More",view_on_osm:"View on openstreetmap.org",view_on_keepRight:"View on keepright.at",all_fields:"All fields",all_tags:"All tags",all_members:"All members",all_relations:"All relations",new_relation:"New relation...",choose_relation:"Choose a parent relation",role:"Role",choose:"Select feature type",results:"{n} results for {search}",reference:"View on OpenStreetMap Wiki",edit_reference:"Edit or translate description",wiki_reference:"View documentation",wiki_en_reference:"View documentation in English",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:",lock:{suggestion:"The \"{label}\" field is locked because there is a Wikidata tag. You can delete it or edit the tags in the \"All tags\" section."}},background:{title:"Background",description:"Background settings",key:"B",backgrounds:"Backgrounds",none:"None",best_imagery:"Best known imagery source for this location","switch":"Switch back to this background",custom:"Custom",overlays:"Overlays",imagery_source_faq:"Imagery Info / Report a Problem",reset:"reset",display_options:"Display Options",brightness:"Brightness",contrast:"Contrast",saturation:"Saturation",sharpness:"Sharpness",minimap:{description:"Show Minimap",tooltip:"Show a zoomed out map to help locate the area currently displayed.",key:"/"},fix_misalignment:"Adjust imagery offset",offset:"Drag anywhere in the gray area below to adjust the imagery offset, or enter the offset values in meters."},map_data:{title:"Map Data",description:"Map Data",key:"F",data_layers:"Data Layers",layers:{osm:{tooltip:"Map data from OpenStreetMap",title:"OpenStreetMap data"},notes:{tooltip:"Note data from OpenStreetMap",title:"OpenStreetMap notes"},keepRight:{tooltip:"Automatically detected map issues from keepright.at",title:"KeepRight Issues"},custom:{tooltip:"Drag and drop a data file onto the page, or click the button to setup",title:"Custom Map Data",zoom:"Zoom to data"}},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.",osmhidden:"These features have been automatically hidden because the OpenStreetMap layer is hidden."},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.",key:"W"},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."}},settings:{custom_background:{tooltip:"Edit custom background",header:"Custom Background Settings",instructions:"Enter a tile URL template. Valid tokens are:\n   {zoom} or {z}, {x}, {y} for Z/X/Y tile scheme\n   {-y} or {ty} for flipped TMS-style Y coordinates\n   {u} for quadtile scheme\n   {switch:a,b,c} for DNS server multiplexing\n\nExample:\n{example}",template:{placeholder:"Enter a url template"}},custom_data:{tooltip:"Edit custom data layer",header:"Custom Map Data Settings",file:{instructions:"Choose a local data file. Supported types are:\n   .gpx, .kml, .geojson, .json",label:"Browse files"},or:"Or",url:{instructions:"Enter a data file URL or vector tile URL template. Valid tokens are:\n   {zoom} or {z}, {x}, {y} for Z/X/Y tile scheme",placeholder:"Enter a url"}}},restore:{heading:"You have unsaved changes",description:"Do you wish to restore unsaved changes from a previous editing session?",restore:"Restore my changes",reset:"Discard my changes"},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...",conflict_progress:"Checking for conflicts: {num} of {total}",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 osmChange file",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:{just_edited:"You just edited OpenStreetMap!",thank_you:"Thank you for improving the map.",thank_you_location:"Thank you for improving the map around {where}.",help_html:"Your changes should appear on OpenStreetMap within a few minutes. It may take longer for maps elsewhere to receive updates.",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",view_on_osm:"View Changes on OSM",changeset_id:"Your changeset #: {changeset_id}",like_osm:"Like OpenStreetMap? Connect with others:",more:"More",events:"Events",languages:"Languages: {languages}",missing:"Is something missing from this list?",tell_us:"Tell us!"},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.",generic_name:"Possible generic name",generic_name_tooltip:"This feature seems to have a generic name \"{name}\". Please only use the name field to record the official name of a feature.",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: {p} nodes, {l} lines, {a} areas, {r} relations. 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",QA:{keepRight:{title:"KeepRight Error",detail_title:"Error",detail_description:"Description",comment:"Comment",comment_placeholder:"Enter a comment to share with other users.",close:"Close (Error Fixed)",ignore:"Ignore (Not an Error)",save_comment:"Save Comment",close_comment:"Close and Comment",ignore_comment:"Ignore and Comment",error_parts:{this_node:"this node",this_way:"this way",this_relation:"this relation",this_oneway:"this oneway",this_highway:"this highway",this_railway:"this railway",this_waterway:"this waterway",this_cycleway:"this cycleway",this_cycleway_footpath:"this cycleway/footpath",this_riverbank:"this riverbank",this_crossing:"this crossing",this_railway_crossing:"this railway crossing",this_bridge:"this bridge",this_tunnel:"this tunnel",this_boundary:"this boundary",this_turn_restriction:"this turn restriction",this_roundabout:"this roundabout",this_mini_roundabout:"this mini-roundabout",this_track:"this track",this_feature:"this feature",highway:"highway",railway:"railway",waterway:"waterway",cycleway:"cycleway",cycleway_footpath:"cycleway/footpath",riverbank:"riverbank",place_of_worship:"place of worship",pub:"pub",restaurant:"restaurant",school:"school",university:"university",hospital:"hospital",library:"library",theatre:"theatre",courthouse:"courthouse",bank:"bank",cinema:"cinema",pharmacy:"pharmacy",cafe:"cafe",fast_food:"fast food",fuel:"fuel",from:"from",to:"to",left_hand:"left-hand",right_hand:"right-hand"},errorTypes:{"20":{title:"Multiple nodes on the same spot",description:"There is more than one node in this spot. Node IDs: {var1}."},"30":{title:"Non-closed area",description:"{var1} is tagged with \"{var2}\" and should be a closed loop."},"40":{title:"Impossible oneway",description:"The first node {var1} of {var2} is not connected to any other way."},"41":{description:"The last node {var1} of {var2} is not connected to any other way."},"42":{description:"You cannot reach {var1} because all ways leading from it are oneway."},"43":{description:"You cannot escape from {var1} because all ways leading to it are oneway."},"50":{title:"Almost junction",description:"{var1} is very close but not connected to way {var2}."},"60":{title:"Deprecated tag",description:"{var1} uses deprecated tag \"{var2}\". Please use \"{var3}\" instead."},"70":{title:"Missing tag",description:"{var1} has an empty tag: \"{var2}\"."},"71":{description:"{var1} has no tags."},"72":{description:"{var1} is not member of any way and doesn't have any tags."},"73":{description:"{var1} has a \"{var2}\" tag but no \"highway\" tag."},"74":{description:"{var1} has an empty tag: \"{var2}\"."},"75":{description:"{var1} has a name \"{var2}\" but no other tags."},"90":{title:"Motorway without ref tag",description:"{var1} is tagged as a motorway and therefore needs a \"ref\", \"nat_ref\", or \"int_ref\" tag."},"100":{title:"Place of worship without religion",description:"{var1} is tagged as a place of worship and therefore needs a religion tag."},"110":{title:"Point of interest without name",description:"{var1} is tagged as a \"{var2}\" and therefore needs a name tag."},"120":{title:"Way without nodes",description:"{var1} has just one single node."},"130":{title:"Disconnected way",description:"{var1} is not connected to the rest of the map."},"150":{title:"Railway crossing without tag",description:"{var1} of a highway and a railway needs to be tagged as \"railway=crossing\" or \"railway=level_crossing\"."},"160":{title:"Railway layer conflict",description:"There are ways in different layers (e.g. tunnel or bridge) meeting at {var1}."},"170":{title:"FIXME tagged item",description:"{var1} has a FIXME tag: {var2}"},"180":{title:"Relation without type",description:"{var1} is missing a \"type\" tag."},"190":{title:"Intersection without junction",description:"{var1} intersects the {var2} {var3} but there is no junction node, bridge, or tunnel."},"200":{title:"Overlapping ways",description:"{var1} overlaps the {var2} {var3}."},"210":{title:"Self-intersecting way",description:"There is an unspecified issue with self intersecting ways."},"211":{description:"{var1} contains more than one node multiple times. Nodes are {var2}. This may or may not be an error."},"212":{description:"{var1} has only two different nodes and contains one of them more than once."},"220":{title:"Misspelled tag",description:"{var1} is tagged \"{var2}\" where \"{var3}\" looks like \"{var4}\"."},"221":{description:"{var1} has a suspicious tag \"{var2}\"."},"230":{title:"Layer conflict",description:"{var1} is a junction of ways on different layers."},"231":{description:"{var1} is a junction of ways on different layers: {var2}.",layer:"(layer: {layer})"},"232":{description:"{var1} is tagged with \"layer={var2}\". This need not be an error but it looks strange."},"270":{title:"Unusual motorway connection",description:"{var1} is a junction of a motorway and a highway other than \"motorway\", \"motorway_link\", \"trunk\", \"rest_area\", or \"construction\". Connection to \"service\" or \"unclassified\" is only valid if it has \"access=no/private\", or it leads to a motorway service area, or if it is a \"service=parking_aisle\"."},"280":{title:"Boundary issue",description:"There is an unspecified issue with this boundary."},"281":{title:"Boundary missing name",description:"{var1} has no name."},"282":{title:"Boundary missing admin level",description:"The boundary of {var1} has no valid numeric admin_level. Please do not mix admin levels (e.g. \"6;7\"). Always tag the lowest admin_level of all boundaries."},"283":{title:"Boundary not a closed loop",description:"The boundary of {var1} is not a closed loop."},"284":{title:"Boundary is split",description:"The boundary of {var1} splits here."},"285":{title:"Boundary admin_level too high",description:"{var1} has \"admin_level={var2}\" but belongs to a relation with lower \"admin_level\" (e.g. higher priority); it should have the lowest \"admin_level\" of all relations."},"290":{title:"Restriction issue",description:"There is an unspecified issue with this restriction."},"291":{title:"Restriction missing type",description:"{var1} has an unrecognized restriction type."},"292":{title:"Restriction missing \"from\" way",description:"{var1} has {var2} \"from\" members, but it should have 1."},"293":{title:"Restriction missing \"to\" way",description:"{var1} has {var2} \"to\" members, but it should have 1."},"294":{title:"Restriction \"from\" or \"to\" is not a way",description:"{var1} has \"from\" or \"to\" members which should be ways. {var2}."},"295":{title:"Restriction \"via\" is not an endpoint",description:"{var1} has a \"via\" (node {var2}) which is not the first or the last member of \"{var3}\" (way {var4})."},"296":{title:"Unusual restriction angle",description:"{var1} has a restriction type \"{var2}\" but the angle is {var3} degrees. Maybe the restriction type is not appropriate?"},"297":{title:"Wrong direction of \"to\" way",description:"{var1} does not match the direction of \"to\" way {var2}."},"298":{title:"Redundant restriction - oneway",description:"{var1} may be redundant. Entry already prohibited by \"oneway\" tag on {var2}."},"300":{title:"Missing maxspeed",description:"{var1} is missing a \"maxspeed\" tag and is tagged as motorway, trunk, primary, or secondary."},"310":{title:"Roundabout issue",description:"There is an unspecified issue with this roundabout."},"311":{title:"Roundabout not closed loop",description:"{var1} is part of a roundabout but is not closed-loop. (Split carriageways approaching a roundabout should not be tagged as roundabout)."},"312":{title:"Roundabout wrong direction",description:"If {var1} is in a country with {var2} traffic then its orientation goes the wrong way around."},"313":{title:"Roundabout weakly connected",description:"{var1} has only {var2} other road(s) connected. Roundabouts typically have 3 or more."},"320":{title:"Improper link connection",description:"{var1} is tagged as \"{var2}\" but doesn't have a connection to any other \"{var3}\" or \"{var4}\"."},"350":{title:"Improper bridge tag",description:"{var1} doesn't have a tag in common with its surrounding ways that shows the purpose of this bridge. There should be one of these tags: {var2}."},"360":{title:"Missing local name tag",description:"It would be nice if {var1} had a local name tag \"name:XX={var2}\" where XX shows the language of its common name \"{var2}\"."},"370":{title:"Doubled places",description:"{var1} has tags in common with the surrounding way {var2} {var3} and seems to be redundant.",including_the_name:"(including the name {name})"},"380":{title:"Non-physical use of sport tag",description:"{var1} is tagged \"{var2}\" but has no physical tag (e.g. \"leisure\", \"building\", \"amenity\", or \"highway\")."},"390":{title:"Missing tracktype",description:"{var1} doesn't have a \"tracktype\" tag."},"400":{title:"Geometry issue",description:"There is an unspecified issue with the geometry here."},"401":{title:"Missing turn restriction",description:"Ways {var1} and {var2} join in a very sharp angle here and there is no oneway tag or turn restriction that prevents turning."},"402":{title:"Impossible angle",description:"{var1} bends in a very sharp angle here."},"410":{title:"Website issue",description:"There is an unspecified issue with a contact website or URL."},"411":{description:"{var1} may have an outdated URL: {var2} returned HTTP status code {var3}."},"412":{description:"{var1} may have an outdated URL: {var2} contained suspicious text \"{var3}\"."},"413":{description:"{var1} may have an outdated URL: {var2} did not contain keywords \"{var3}\"."}}}},streetside:{tooltip:"Streetside photos from Microsoft",title:"Photo Overlay (Bing Streetside)",report:"Report a privacy concern with this image",view_on_bing:"View on Bing Maps",hires:"High resolution"},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"},openstreetcam_images:{tooltip:"Street-level photos from OpenStreetCam",title:"Photo Overlay (OpenStreetCam)"},openstreetcam:{view_on_openstreetcam:"View this image on OpenStreetCam"},note:{note:"Note",title:"Edit note",anonymous:"anonymous",closed:"(Closed)",commentTitle:"Comments",status:{opened:"opened {when}",reopened:"reopened {when}",commented:"commented {when}",closed:"closed {when}"},newComment:"New Comment",inputPlaceholder:"Enter a comment to share with other users.",close:"Close Note",open:"Reopen Note",comment:"Comment",close_comment:"Close and Comment",open_comment:"Reopen and Comment",report:"Report","new":"New Note",newDescription:"Describe the issue.",save:"Save Note",login:"You must log in to change or comment on this note.",upload_explanation:"Your comments will be publicly visible to all OpenStreetMap users.",upload_explanation_with_user:"Your comments as {user} will be publicly visible to all OpenStreetMap users."},help:{title:"Help",key:"H",help:{title:"Help",welcome:"Welcome to the iD editor for [OpenStreetMap](https://www.openstreetmap.org/). With this editor you can update OpenStreetMap right from your web browser.",open_data_h:"Open Data",open_data:"Edits that you make on this map will be visible to everyone who uses OpenStreetMap. Your edits can be based on personal knowledge, on-the-ground surveying, or imagery collected from aerial or street level photos. Copying from commercial sources, like Google Maps, [is strictly forbidden](https://www.openstreetmap.org/copyright).",before_start_h:"Before you start",before_start:"You should be familiar with OpenStreetMap and this editor before you start editing. iD contains a walkthrough to teach you the basics of editing OpenStreetMap. Click \"Start the Walkthrough\" on this screen to take the tutorial - it takes only about 15 minutes.",open_source_h:"Open Source",open_source:"The iD editor is a collaborative open source project, and you are using version {version} now. The source code is available [on GitHub](https://github.com/openstreetmap/iD).",open_source_help:"You can help iD by [translating](https://github.com/openstreetmap/iD/blob/master/CONTRIBUTING.md#translating) or [reporting bugs](https://github.com/openstreetmap/iD/issues)."},overview:{title:"Overview",navigation_h:"Navigation",navigation_drag:"You can drag the map by pressing and holding down the {leftclick} left mouse button and moving the mouse around. You can also use the `↓`, `↑`, `←`, `→` arrow keys on your keyboard.",navigation_zoom:"You can zoom in or out by scrolling with the mouse wheel or trackpad, or by clicking the {plus} / {minus} buttons along the side of the map. You can also use the `+`, `-` keys on your keyboard.",features_h:"Map Features",features:"We use the word *features* to describe things that appear on the map, such as roads, buildings, or points of interest. Anything in the real world can be mapped as a feature on OpenStreetMap. Map features are represented on the map using *points*, *lines*, or *areas*.",nodes_ways:"In OpenStreetMap, points are sometimes called *nodes*, and lines and areas are sometimes called *ways*."},editing:{title:"Editing & Saving",select_h:"Select",select_left_click:"{leftclick} Left-click on a feature to select it. This will highlight it with a pulsing glow, and the sidebar will display details about that feature, such as its name or address.",select_right_click:"{rightclick} Right-click on a feature to display the editing menu, which shows the commands that are available, such as rotating, moving, and deleting.",multiselect_h:"Multiselect",multiselect_shift_click:"`{shift}`+{leftclick} left-click to select several features together.  This makes it easier to move or delete multiple items.",multiselect_lasso:"Another way to select multiple features is to hold down the `{shift}` key, then press and hold down the {leftclick} left mouse button and drag the mouse to draw a selection lasso. All of the points inside the lasso area will be selected.",undo_redo_h:"Undo & Redo",undo_redo:"Your edits are stored locally in your browser until you choose to save them to the OpenStreetMap server. You can undo edits by clicking the {undo} **Undo** button, and redo them by clicking the {redo} **Redo** button.",save_h:"Save",save:"Click {save} **Save** to finish your edits and send them to OpenStreetMap. You should remember to save your work frequently!",save_validation:"On the save screen, you'll have a chance to review what you've done. iD will also perform some basic checks for missing data and may offer helpful suggestions and warnings if something doesn't seem right.",upload_h:"Upload",upload:"Before uploading your changes you must enter a [changeset comment](https://wiki.openstreetmap.org/wiki/Good_changeset_comments). Then click **Upload** to send your changes to OpenStreetMap, where they will be merged into the map and publicly visible to everyone.",backups_h:"Automatic Backups",backups:"If you can't finish your edits in one sitting, for example if your computer crashes or you close the browser tab, your edits are still saved in your browser's storage. You can come back later (on the same browser and computer), and iD will offer to restore your work.",keyboard_h:"Keyboard Shortcuts",keyboard:"You can view a list of keyboard shortcuts by pressing the `?` key."},feature_editor:{title:"Feature Editor",intro:"The *feature editor* appears alongside the map, and allows you to see and edit all of the information for the selected feature.",definitions:"The top section displays the feature's type. The middle section contains *fields* showing the feature's attributes, such as its name or address.",type_h:"Feature Type",type:"You can click on the feature type to change the feature to a different type. Everything that exists in the real world can be added to OpenStreetMap, so there are thousands of feature types to choose from.",type_picker:"The type picker displays the most common feature types, such as parks, hospitals, restaurants, roads, and buildings. You can search for anything by typing what you're looking for in the search box. You can also click the {inspect} **Info** icon next to the feature type to learn more about it.",fields_h:"Fields",fields_all_fields:"The \"All fields\" section contains all of the feature's details that you may edit. In OpenStreetMap, all of the fields are optional, and it's OK to leave a field blank if you are unsure.",fields_example:"Each feature type will display different fields. For example, a road may display fields for its surface and speed limit, but a restaurant may display fields for the type of food it serves and the hours it is open.",fields_add_field:"You can also click the \"Add field\" dropdown to add more fields, such as a description, Wikipedia link, wheelchair access, and more.",tags_h:"Tags",tags_all_tags:"Below the fields section, you can expand the \"All tags\" section to edit any of the OpenStreetMap *tags* for the selected feature. Each tag consists of a *key* and *value*, data elements that define all of the features stored in OpenStreetMap.",tags_resources:"Editing a feature's tags requires intermediate knowledge about OpenStreetMap. You should consult resources like the [OpenStreetMap Wiki](https://wiki.openstreetmap.org/wiki/Main_Page) or [Taginfo](https://taginfo.openstreetmap.org/) to learn more about accepted OpenStreetMap tagging practices."},points:{title:"Points",intro:"*Points* can be used to represent features such as shops, restaurants, and monuments. They mark a specific location, and describe what's there.",add_point_h:"Adding Points",add_point:"To add a point, click the {point} **Point** button on the toolbar above the map, or press the shortcut key `1`. This will change the mouse cursor to a cross symbol.",add_point_finish:"To place the new point on the map, position the mouse cursor where the point should go, then {leftclick} left-click or press `Space`.",move_point_h:"Moving Points",move_point:"To move a point, place the mouse cursor over the point, then press and hold the {leftclick} left mouse button while dragging the point to its new location.",delete_point_h:"Deleting Points",delete_point:"It's OK to delete features that don't exist in the real world. 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.",delete_point_command:"To delete a point, {rightclick} right-click on the point to select it and show the edit menu, then use the {delete} **Delete** command."},lines:{title:"Lines",intro:"*Lines* are used to represent features such as roads, railroads, and rivers. Lines should be drawn down the center of the feature that they represent.",add_line_h:"Adding Lines",add_line:"To add a line, click the {line} **Line** button on the toolbar above the map, or press the shortcut key `2`. This will change the mouse cursor to a cross symbol.",add_line_draw:"Next, position the mouse cursor where the line should begin and {leftclick} left-click or press `Space` to begin placing nodes along the line. Continue placing more nodes by clicking or pressing `Space`. While drawing, you can zoom in or drag the map in order to add more detail.",add_line_finish:"To finish a line, press `{return}` or click again on the last node.",modify_line_h:"Modifying Lines",modify_line_dragnode:"Often you'll see lines that aren't shaped correctly, for example a road that does not match up with the background imagery. To adjust the shape of a line, first {leftclick} left-click to select it. All nodes of the line will be drawn as small circles. You can then drag the nodes to better locations.",modify_line_addnode:"You can also create new nodes along a line either by {leftclick}**x2** double-clicking on the line or by dragging the small triangles at the midpoints between nodes.",connect_line_h:"Connecting Lines",connect_line:"Having roads connected properly is important for the map and essential for providing driving directions.",connect_line_display:"The connections between roads are drawn with gray circles. The endpoints of a line are drawn with larger white circles if they don't connect to anything.",connect_line_drag:"To connect a line to another feature, drag one of the line's nodes onto the other feature until both features snap together. Tip: You can hold down the `{alt}` key to prevent nodes from connecting to other features.",connect_line_tag:"If you know that the connection has traffic lights or crosswalks, you can add them by selecting the connecting node and using the feature editor to select the correct feature's type.",disconnect_line_h:"Disconnecting Lines",disconnect_line_command:"To disconnect a road from another feature, {rightclick} right-click the connecting node and select the {disconnect} **Disconnect** command from the editing menu.",move_line_h:"Moving Lines",move_line_command:"To move an entire line, {rightclick} right-click the line and select the {move} **Move** command from the editing menu. Then move the mouse, and {leftclick} left-click to place the line in a new location.",move_line_connected:"Lines that are connected to other features will stay connected as you move the line to a new location. iD may prevent you from moving a line across another connected line.",delete_line_h:"Deleting Lines",delete_line:"If a line is entirely incorrect, for example a road that doesn't exist in the real world, it's OK to delete it. Be careful when deleting features: the background imagery you are using might be outdated, and a road that looks wrong could simply be newly built.",delete_line_command:"To delete a line, {rightclick} right-click on the line to select it and show the edit menu, then use the {delete} **Delete** command."},areas:{title:"Areas",intro:"*Areas* are used to show the boundaries of features like lakes, buildings, and residential areas. Areas should be traced around the edge of the feature that they represent, for example, around the base of a building.",point_or_area_h:"Points or Areas?",point_or_area:"Many features can be represented as points or areas. You should map buildings and property outlines as areas whenever possible. Place points inside a building area to represent businesses, amenities, and other features located inside the building.",add_area_h:"Adding Areas",add_area_command:"To add an area, click the {area} **Area** button on the toolbar above the map, or press the shortcut key `3`. This will change the mouse cursor to a cross symbol.",add_area_draw:"Next, position the mouse cursor at one of the corners of the feature and {leftclick} left-click or press `Space` to begin placing nodes around the outer edge of the area. Continue placing more nodes by clicking or pressing `Space`. While drawing, you can zoom in or drag the map in order to add more detail.",add_area_finish:"To finish an area, press `{return}` or click again on either the first or last node.",square_area_h:"Square Corners",square_area_command:"Many area features like buildings have square corners. To square the corners of an area, {rightclick} right-click the edge of the area and select the {orthogonalize} **Square** command from the editing menu.",modify_area_h:"Modifying Areas",modify_area_dragnode:"Often you'll see areas that aren't shaped correctly, for example a building that does not match up with the background imagery. To adjust the shape of an area, first {leftclick} left-click to select it. All nodes of the area will be drawn as small circles. You can then drag the nodes to better locations.",modify_area_addnode:"You can also create new nodes along an area either by {leftclick}**x2** double-clicking on the edge of the area or by dragging the small triangles at the midpoints between nodes.",delete_area_h:"Deleting Areas",delete_area:"If an area is entirely incorrect, for example a building that doesn't exist in the real world, it's OK to delete it. Be cautious when deleting features - the background imagery you are using might be outdated, and a building that looks wrong could simply be newly built.",delete_area_command:"To delete an area, {rightclick} right-click on the area to select it and show the edit menu, then use the {delete} **Delete** command."},relations:{title:"Relations",intro:"A *relation* is a special type of feature in OpenStreetMap that groups together other features. The features that belong to a relation are called *members*, and each member can have a *role* in the relation.",edit_relation_h:"Editing Relations",edit_relation:"At the bottom of the feature editor, you can expand the \"All relations\" section to see if the selected feature is a member of any relations. You can then click on the relation to select and edit it.",edit_relation_add:"To add a feature to a relation, select the feature, then click the {plus} add button in the \"All relations\" section of the feature editor. You can choose from a list of nearby relations, or choose the \"New relation...\" option.",edit_relation_delete:"You can also click the {delete} **Delete** button to remove the selected feature from the relation. If you remove all of the members from a relation, the relation will be deleted automatically.",maintain_relation_h:"Maintaining Relations",maintain_relation:"For the most part, iD will maintain relations automatically as you edit. You should take care when replacing features that might be members of relations. For example if you delete a section of road and draw a new section of road to replace it, you should add the new section to the same relations (routes, turn restrictions, etc.) as the original.",relation_types_h:"Relation Types",multipolygon_h:"Multipolygons",multipolygon:"A *multipolygon* relation is a group of one or more *outer* features and one or more inner features. The outer features define the outer edges of the multipolygon, and the inner features define sub-areas or holes cut out from the inside of the multipolygon.",multipolygon_create:"To create a multipolygon, for example a building with a hole in it, draw the outer edge as an area and the inner edge as a line or different kind of area. Then `{shift}`+{leftclick} left-click to select both features, {rightclick} right-click to show the edit menu, and select the {merge} **Merge** command.",multipolygon_merge:"Merging several lines or areas will create a new multipolygon relation with all selected areas as members. iD will choose the inner and outer roles automatically, based on which features are contained inside other features.",turn_restriction_h:"Turn restrictions",turn_restriction:"A *turn restriction* relation is a group of several road segments in an intersection. Turn restrictions consist of a *from* road, *via* node or roads, and a *to* road.",turn_restriction_field:"To edit turn restrictions, select a junction node where two or more roads meet. The feature editor will display a special \"Turn Restrictions\" field containing a model of the intersection.",turn_restriction_editing:"In the \"Turn Restrictions\" field, click to select a \"from\" road, and see whether turns are allowed or restricted to any of the \"to\" roads. You can click on the turn icons to toggle them between allowed and restricted. iD will create relations automatically and set the from, via, and to roles based on your choices.",route_h:"Routes",route:"A *route* relation is a group of one or more line features that together form a route network, like a bus route, train route, or highway route.",route_add:"To add a feature to a route relation, select the feature and scroll down to the \"All relations\" section of the feature editor, then click the {plus} add button to add this feature to a nearby existing relation or a new relation.",boundary_h:"Boundaries",boundary:"A *boundary* relation is a group of one or more line features that together form an administrative boundary.",boundary_add:"To add a feature to a boundary relation, select the feature and scroll down to the \"All relations\" section of the feature editor, then click the {plus} add button to add this feature to a nearby existing relation or a new relation."},notes:{title:"Notes",intro:"*Notes* are used to alert other users that a feature requires fixing or attention. Notes mark a specific location on the map. To view existing notes or add new ones, click the {data} **Map data** panel to enable the OpenStreetMap notes layer.",add_note_h:"Adding Notes",add_note:"To add a new note, click the {note} **Note** button on the toolbar above the map, or press the shortcut key `4`. This will change the mouse cursor to a cross symbol. To place the new note on the map, position the mouse cursor where the note should go, then {leftclick} left-click or press `Space`.",move_note:"Only new notes can be moved. To move a note, place the mouse cursor over the new note, then press and hold the {leftclick} left mouse button while dragging the note to its new location.",update_note_h:"Closing, Reopening, and Commenting",update_note:"An existing note can be updated by closing it, reopening it, or adding a comment to it. Closing a note indicates that the problem has been resolved. Reopening a note indicates that the original issue is not resolved.",save_note_h:"Saving Notes",save_note:"You must save any note edits individually by clicking the buttons below the note comments. Note edits are **not** included in changesets that you upload to OpenStreetMap."},imagery:{title:"Background Imagery",intro:"The background imagery that appears beneath the map data is an important resource for mapping. This imagery can be aerial photos collected from satellites, airplanes, and drones, or it can be scanned historical maps or other freely available source data.",sources_h:"Imagery Sources",choosing:"To see which imagery sources are available for editing, click the {layers} **Background settings** button on the side of the map.",sources:"By default, a [Bing Maps](https://www.bing.com/maps/) satellite layer is chosen as the background image. Depending on where you are editing, other imagery sources will be available. Some may be newer or have higher resolution, so it is always useful to check and see which layer is the best one to use as a mapping reference.",offsets_h:"Adjusting Imagery Offset",offset:"Imagery is sometimes offset slightly from accurate map data. If you see a lot of roads or buildings shifted from the background imagery, it may be the imagery that's incorrect, so don't move them all to match the background. Instead, you can adjust the background so that it matches the existing data by expanding the \"Adjust Imagery Offset\" section at the bottom of the Background Settings pane.",offset_change:"Click on the small triangles to adjust the imagery offset in small steps, or hold the {leftclick} left mouse button and drag within the gray square to slide the imagery into alignment."},streetlevel:{title:"Street Level Photos",intro:"Street level photos are useful for mapping traffic signs, businesses, and other details that you can't see from satellite and aerial images. The iD editor supports street level photos from [Bing Streetside](https://www.microsoft.com/en-us/maps/streetside), [Mapillary](https://www.mapillary.com), and [OpenStreetCam](https://www.openstreetcam.org).",using_h:"Using Street Level Photos",using:"To use street level photos for mapping, click the {data} **Map data** panel on the side of the map to enable or disable the available photo layers.",photos:"When enabled, the photo layer displays a line along the sequence of photos. At higher zoom levels, a circle marks at each photo location, and at even higher zoom levels, a cone indicates the direction the camera was facing when the photo was taken.",viewer:"When you click on one of the photo locations, a photo viewer appears in the bottom corner of the map. The photo viewer contains controls to step forward and backward in the image sequence. It also shows the username of the person who captured the image, the date it was captured, and a link to view the image on the original site."},gps:{title:"GPS Traces",intro:"Collected GPS traces are a valuable source of data for OpenStreetMap. This editor supports *.gpx*, *.geojson*, and *.kml* files on your local computer. You can collect GPS traces with a smartphone, sports watch, or other GPS device.",survey:"For information on how to perform a GPS survey, read [Mapping with a smartphone, GPS, or paper](http://learnosm.org/en/mobile-mapping/).",using_h:"Using GPS Traces",using:"To use a GPS trace for mapping, drag and drop the data file onto the map editor. If it's recognized, it will be drawn on the map as a bright purple line. Click the {data} **Map data** panel on the side of the map to enable, disable, or zoom to your GPS data.",tracing:"The GPS track isn't sent to OpenStreetMap - the best way to use it is to draw on the map, using it as a guide for the new features that you add.",upload:"You can also [upload your GPS data to OpenStreetMap](https://www.openstreetmap.org/trace/create) for other users to use."},qa:{title:"Quality Assurance",intro:"*Quality Assurance* (Q/A) tools can find improper tags, disconnected roads, and other issues with OpenStreetMap, which mappers can then fix. To view existing Q/A issues, click the {data} **Map data** panel to enable a specific Q/A layer.",tools_h:"Tools",tools:"The following tools are currently supported: [KeepRight](https://www.keepright.at/). Expect iD to support [Osmose](https://osmose.openstreetmap.fr/), [ImproveOSM](https://improveosm.org/en/), and more Q/A tools in the future.",issues_h:"Handling Issues",issues:"Handling Q/A issues is similar to handling notes. Click on a marker to view the issue details in the sidebar. Each tool has its own capabilities, but generally you can comment and/or close an issue."},field:{restrictions:{title:"Turn Restrictions Help",about:{title:"About",about:"This field allows you to inspect and modify turn restrictions. It displays a model of the selected intersection including other nearby connected roads.",from_via_to:"A turn restriction always contains: one **FROM way**, one **TO way**, and either one **VIA node** or one or more **VIA ways**.",maxdist:"The \"{distField}\" slider controls how far to search for additional connected roads.",maxvia:"The \"{viaField}\" slider adjusts how many via ways may be included in the search. (Tip: simple is better)"},inspecting:{title:"Inspecting",about:"Hover over any **FROM** segment to see whether it has any turn restrictions. Each possible **TO** destination will be drawn with a colored shadow showing whether a restriction exists.",from_shadow:"{fromShadow} **FROM segment**",allow_shadow:"{allowShadow} **TO Allowed**",restrict_shadow:"{restrictShadow} **TO Restricted**",only_shadow:"{onlyShadow} **TO Only**",restricted:"\"Restricted\" means that there is a turn restriction, for example \"No Left Turn\".",only:"\"Only\" means that a vehicle taking that path may only make that choice, for example \"Only Straight On\"."},modifying:{title:"Modifying",about:"To modify turn restrictions, first click on any starting **FROM** segment to select it. The selected segment will pulse, and all possible **TO** destinations will appear as turn symbols.",indicators:"Then, click on a turn symbol to toggle it between \"Allowed\", \"Restricted\", and \"Only\".",allow_turn:"{allowTurn} **TO Allowed**",restrict_turn:"{restrictTurn} **TO Restricted**",only_turn:"{onlyTurn} **TO Only**"},tips:{title:"Tips",simple:"**Prefer simple restrictions over complex ones.**",simple_example:"For example, avoid creating a via-way restriction if a simpler via-node turn restriction will do.",indirect:"**Some restrictions display the text \"(indirect)\" and are drawn lighter.**",indirect_example:"These restrictions exist because of another nearby restriction. For example, an \"Only Straight On\" restriction will indirectly create \"No Turn\" restrictions for all other paths through the intersection.",indirect_noedit:"You may not edit indirect restrictions. Instead, edit the nearby direct restriction."}}}},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 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 or pressing the '{key}' key.",shortcuts:"You can view a list of commands along with their keyboard shortcuts by pressing the '{key}' key.",save:"Don't forget to regularly save your changes!",start:"Start mapping!"}},shortcuts:{title:"Keyboard shortcuts",tooltip:"Show the keyboard shortcuts screen.",toggle:{key:"?"},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",sidebar:"Toggle sidebar",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",search:"Find features matching search text"},with_selected:{title:"With feature selected",edit_menu:"Toggle edit menu",zoom_to:"Zoom to selected feature"},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",add_note:"'Add note' mode",place_point:"Place a point or note",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",detach_node:"Detach selected node from parent lines/areas",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"}},tools:{title:"Tools",info:{title:"Information",all:"Toggle all information panels",background:"Toggle background panel",history:"Toggle history panel",location:"Toggle location panel",measurement:"Toggle measurement panel"}}},units:{feet:"{quantity} ft",miles:"{quantity} mi",square_feet:"{quantity} sq ft",square_miles:"{quantity} sq mi",acres:"{quantity} ac",meters:"{quantity} m",kilometers:"{quantity} km",square_meters:"{quantity} m²",square_kilometers:"{quantity} km²",hectares:"{quantity} ha",area_pair:"{area1} ({area2})",arcdegrees:"{quantity}°",arcminutes:"{quantity}′",arcseconds:"{quantity}″",north:"N",south:"S",east:"E",west:"W",coordinate:"{coordinate}{direction}",coordinate_pair:"{latitude}, {longitude}"},wikidata:{identifier:"Identifier",label:"Label",description:"Description"},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-utility":{name:"Utility Features"},"category-water-area":{name:"Water Features"},"category-water-line":{name:"Water Features"}},fields:{access_simple:{label:"Allowed 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 allowed by law; a right of way"},no:{title:"Prohibited",description:"Access not allowed to the general public"},permissive:{title:"Permissive",description:"Access allowed until such time as the owner revokes the permission"},"private":{title:"Private",description:"Access allowed only with permission of the owner on an individual basis"},designated:{title:"Designated",description:"Access allowed according to signs or specific local laws"},destination:{title:"Destination",description:"Access allowed only to reach a destination"},dismount:{title:"Dismount",description:"Access allowed but rider must dismount"},permit:{title:"Permit",description:"Access allowed only with a valid permit or license"}}},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",unit:"Unit"}},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"},agrarian:{label:"Products"},amenity:{label:"Type"},animal_boarding:{label:"For Animals"},animal_breeding:{label:"For Animals"},animal_shelter:{label:"For Animals"},architect:{label:"Architect"},"area/highway":{label:"Type"},artist:{label:"Artist"},artwork_type:{label:"Type"},atm:{label:"ATM"},attraction:{label:"Type"},backrest:{label:"Backrest"},barrier:{label:"Type"},basin:{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:"Beauty Specialty"},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"},booth:{label:"Booth"},boules:{label:"Type"},boundary:{label:"Type"},brand:{label:"Brand"},brewery:{label:"Draft Beers"},bridge:{label:"Type",placeholder:"Default"},"bridge/support":{label:"Type"},building_area:{label:"Building"},building:{label:"Building"},"building/material":{label:"Material"},bunker_type:{label:"Type"},cables:{label:"Cables",placeholder:"1, 2, 3..."},"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..."},cash_in:{label:"Cash In"},castle_type:{label:"Type"},check_date:{label:"Last Checked Date"},clothes:{label:"Clothes"},club:{label:"Type"},collection_times:{label:"Collection Times"},colour:{label:"Color"},comment:{label:"Changeset Comment",placeholder:"Brief description of your contributions (required)"},communication_multi:{label:"Communication Types"},construction:{label:"Type"},"contact/webcam":{label:"Webcam URL",placeholder:"http://example.com/"},content:{label:"Content"},conveying:{label:"Movement Direction",options:{forward:"Forward",backward:"Backward",reversible:"Reversible"}},country:{label:"Country"},couplings:{label:"Couplings",placeholder:"1, 2, 3..."},covered:{label:"Covered"},craft:{label:"Type"},"crane/type":{label:"Crane Type",options:{portal_crane:"Portal Crane","floor-mounted_crane":"Floor-mounted Crane",travel_lift:"Travel Lift"}},crop:{label:"Crops"},crossing:{label:"Type"},cuisine:{label:"Cuisines"},currency_multi:{label:"Currency Types"},cutting:{label:"Type",placeholder:"Default"},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"}}},"dance/style":{label:"Dance Styles"},date:{label:"Date"},delivery:{label:"Delivery"},denomination:{label:"Denomination"},denotation:{label:"Denotation"},description:{label:"Description"},design:{label:"Design"},destination_oneway:{label:"Destinations"},"destination/ref_oneway":{label:"Destination Road Numbers"},"destination/symbol_oneway":{label:"Destination Symbols"},devices:{label:"Devices",placeholder:"1, 2, 3..."},diaper:{label:"Diaper Changing Available"},diet_multi:{label:"Diet Types"},direction_cardinal:{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"}},direction_clock:{label:"Direction",options:{clockwise:"Clockwise",anticlockwise:"Counterclockwise"}},direction_vertex:{label:"Direction",options:{forward:"Forward",backward:"Backward",both:"Both / All"}},direction:{label:"Direction (Degrees Clockwise)",placeholder:"45, 90, 180, 270"},dispensing:{label:"Dispenses Prescriptions"},display:{label:"Display"},distance:{label:"Distance"},dock:{label:"Type"},dog:{label:"Dogs",options:{yes:"Allowed",leashed:"Leashed Only",no:"Not Allowed"}},drive_through:{label:"Drive-Through"},duration:{label:"Duration",placeholder:"00:00"},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"},embankment:{label:"Type",placeholder:"Default"},emergency:{label:"Emergency"},enforcement:{label:"Type"},entrance:{label:"Type"},except:{label:"Exceptions"},faces:{label:"Faces"},fax:{label:"Fax",placeholder:"+31 42 123 4567"},fee:{label:"Fee"},fence_type:{label:"Type"},"fire_hydrant/diameter":{label:"Diameter (mm, in, or letters)"},"fire_hydrant/pressure":{label:"Pressure (bar)"},"fire_hydrant/type":{label:"Shape",options:{pillar:"Pillar/Aboveground",underground:"Underground",wall:"Wall",pipe:"Capped Pipe"}},fireplace:{label:"Fireplace"},fitness_station:{label:"Equipment Type"},fixme:{label:"Fix Me"},"flag/type":{label:"Flag Type"},ford:{label:"Type",placeholder:"Default"},frequency_electrified:{label:"Operating Frequency"},frequency:{label:"Operating Frequency"},from:{label:"From"},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/output/electricity":{label:"Power Output",placeholder:"50 MW, 100 MW, 200 MW..."},"generator/source":{label:"Source"},"generator/type":{label:"Type"},government:{label:"Type"},grape_variety:{label:"Grape Varieties"},handicap:{label:"Handicap",placeholder:"1-18"},handrail:{label:"Handrail"},hashtags:{label:"Suggested Hashtags",placeholder:"#example"},healthcare:{label:"Type"},"healthcare/speciality":{label:"Specialties"},height:{label:"Height (Meters)"},highway:{label:"Type"},historic:{label:"Type"},"historic/civilization":{label:"Historic Civilization"},"historic/wreck/date_sunk":{label:"Date Sunk"},"historic/wreck/visible_at_high_tide":{label:"Visible At High Tide"},"historic/wreck/visible_at_low_tide":{label:"Visible At Low Tide"},hoops:{label:"Hoops",placeholder:"1, 2, 4..."},horse_dressage:{label:"Dressage Riding",options:{"undefined":"No",equestrian:"Yes"}},horse_riding:{label:"Horseback Riding",options:{"undefined":"No",horse_riding:"Yes"}},horse_scale:{label:"Horseback Riding Difficulty",placeholder:"Difficult, Dangerous...",options:{common:"Easy: No problems or difficulties. (default)",demanding:"Use with caution: Uneven way, occasional difficult passages.",difficult:"Difficult: Way narrow and exposed. May contain obstacles to step over and narrow passages.",critical:"Borderline: Passable only for experienced riders and horses. Major obstacles. Bridges should be examined carefully.",dangerous:"Dangerous: Passable only for very experienced riders and horses and only in good weather. Dismount.",impossible:"Impassable: Way or bridge not passable for horses. Too narrow, insuffient support, obstacles like ladders. Danger of life."}},horse_stables:{label:"Riding Stable",options:{"undefined":"No",stables:"Yes"}},iata:{label:"IATA"},icao:{label:"ICAO"},incline_steps:{label:"Incline",options:{up:"Up",down:"Down"}},incline:{label:"Incline"},indoor:{label:"Indoor"},industrial:{label:"Type"},information:{label:"Type"},inscription:{label:"Inscription"},intermittent_yes:{label:"Intermittent"},intermittent:{label:"Intermittent"},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)"},"junction/ref_oneway":{label:"Junction Number"},kerb:{label:"Curb"},label:{label:"Label"},lamp_type:{label:"Type"},landuse:{label:"Type"},lanes:{label:"Lanes",placeholder:"1, 2, 3..."},language_multi:{label:"Languages"},layer:{label:"Layer",placeholder:"0"},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_pool:{label:"Location",options:{outdoor:"Outdoor",indoor:"Indoor",roof:"Rooftop"}},location:{label:"Location"},man_made:{label:"Type"},manhole:{label:"Type"},map_size:{label:"Coverage"},map_type:{label:"Type"},material:{label:"Material"},maxheight:{label:"Max Height",placeholder:"4, 4.5, 5, 14'0\", 14'6\", 15'0\""},maxspeed:{label:"Speed Limit",placeholder:"40, 50, 60..."},"maxspeed/advisory":{label:"Advisory Speed Limit",placeholder:"40, 50, 60..."},maxstay:{label:"Max Stay"},maxweight:{label:"Max Weight"},memorial:{label:"Type"},minspeed:{label:"Minimum Speed Limit",placeholder:"20, 30, 40..."},monitoring_multi:{label:"Monitoring"},"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",reversible:"Reversible",alternating:"Alternating"}},oneway:{label:"One Way",options:{"undefined":"Assumed to be No",yes:"Yes",no:"No",reversible:"Reversible",alternating:"Alternating"}},"oneway/bicycle":{label:"One Way (Bicycles)"},opening_date:{label:"Expected Opening Date"},opening_hours:{label:"Hours"},operator:{label:"Operator"},outdoor_seating:{label:"Outdoor Seating"},par:{label:"Par",placeholder:"3, 4, 5..."},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"}},passenger_information_display:{label:"Passenger information display"},payment_multi:{label:"Payment Types"},phases:{label:"Phases",placeholder:"1, 2, 3..."},phone:{label:"Telephone",placeholder:"+31 42 123 4567"},"piste/difficulty_downhill":{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/difficulty_nordic":{label:"Difficulty",placeholder:"Easy, Intermediate, Advanced...",options:{novice:"Novice - Flat, no effort needed",easy:"Easy - Soft hills, short steep section",intermediate:"Intermediate - Steep section",advanced:"Advanced - Narrow, steep or icy section, sharp turn",expert:"Expert - Dangerous terrain around"}},"piste/difficulty_skitour":{label:"Difficulty",placeholder:"Easy, Intermediate, Advanced...",options:{novice:"Novice - L: <30° incline",easy:"Easy - WS: 30-35° incline",intermediate:"Intermediate - ZS: 35-40° incline",advanced:"Advanced - S: 40-45° incline",expert:"Expert - SS: 45–50° incline",freeride:"Freeride - AS: 50–55° incline",extreme:"Extreme - EX: >55° incline"}},"piste/difficulty":{label:"Difficulty",placeholder:"Easy, Intermediate, Advanced...",options:{novice:"Novice",easy:"Easy",intermediate:"Intermediate",advanced:"Advanced",expert:"Expert",freeride:"Freeride",extreme:"Extreme"}},"piste/grooming_downhill":{label:"Grooming",options:{classic:"Classic",mogul:"Mogul",backcountry:"Backcountry - no grooming"}},"piste/grooming_hike":{label:"Grooming",options:{classic:"Classic - Winter Hiking",backcountry:"Backcountry - Snowshoeing"}},"piste/grooming_nordic":{label:"Grooming",options:{classic:"Classic",backcountry:"Backcountry, no grooming","classic+skating":"Classic and Skating",scooter:"Scooter/Snowmobile",skating:"Skating"}},"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",connection:"Connection"}},place:{label:"Type"},plant:{label:"Plant"},"plant/output/electricity":{label:"Power Output",placeholder:"500 MW, 1000 MW, 2000 MW..."},"playground/baby":{label:"Baby Seat"},"playground/max_age":{label:"Maximum Age"},"playground/min_age":{label:"Minimum Age"},population:{label:"Population"},power_supply:{label:"Power Supply"},power:{label:"Type"},produce:{label:"Produce"},product:{label:"Products"},railway:{label:"Type"},"railway/position":{label:"Milestone Position",placeholder:"Distance to one decimal (123.4)"},"railway/signal/direction":{label:"Direction",options:{forward:"Forward",backward:"Backward",both:"Both / All"}},rating:{label:"Power Rating"},recycling_accepts:{label:"Accepts"},recycling_type:{label:"Type",placeholder:"Container, Center",options:{container:"Container",centre:"Center"}},ref_aeroway_gate:{label:"Gate Number"},ref_golf_hole:{label:"Hole Number",placeholder:"1-18"},ref_highway_junction:{label:"Junction Number"},ref_platform:{label:"Platform Number"},ref_road_number:{label:"Road Number"},ref_route:{label:"Route Number"},ref_runway:{label:"Runway Number",placeholder:"e.g. 01L/19R"},ref_stop_position:{label:"Stop Number"},ref_taxiway:{label:"Taxiway Name",placeholder:"e.g. A5"},ref:{label:"Reference Code"},"ref/isil":{label:"ISIL Code"},relation:{label:"Type"},religion:{label:"Religion"},restriction:{label:"Type"},restrictions:{label:"Turn Restrictions"},"roof/colour":{label:"Roof Color"},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"},scuba_diving:{label:"Services"},"seamark/beacon_isolated_danger/shape":{label:"Shape"},"seamark/beacon_lateral/category":{label:"Category",options:{port:"Port",starboard:"Starboard",waterway_left:"Waterway Left",waterway_right:"Waterway Right",danger_left:"Danger Left",danger_right:"Danger Right"}},"seamark/beacon_lateral/colour":{label:"Color",options:{red:"Red",green:"Green",grey:"Grey"}},"seamark/beacon_lateral/shape":{label:"Shape"},"seamark/beacon_lateral/system":{label:"System",options:{"iala-a":"IALA A","iala-b":"IALA B",cevni:"CEVNI",other:"Other"}},"seamark/buoy_lateral/category":{label:"Category",options:{port:"Port",starboard:"Starboard",channel_left:"Channel Left",channel_right:"Channel Right",waterway_left:"Waterway Left",waterway_right:"Waterway Right",danger_left:"Danger Left",danger_right:"Danger Right",preferred_channel_port:"Preferred Channel Port",preferred_channel_starboard:"Preferred Channel Starboard"}},"seamark/buoy_lateral/colour":{label:"Color",options:{red:"Red",green:"Green","red;white;red;white":"Red-White-Red-White","green;white;green;white":"Green-White-Green-White","red;green;red":"Red-Green-Red","green;red;green":"Green-Red-Green",white:"White",yellow:"Yellow"}},"seamark/buoy_lateral/shape":{label:"Shape"},"seamark/buoy_lateral/system":{label:"System",options:{"iala-a":"IALA A","iala-b":"IALA B",cevni:"CEVNI",other:"Other"}},"seamark/mooring/category":{label:"Category"},"seamark/type":{label:"Seamark"},"seamark/wreck/category":{label:"Category"},seasonal:{label:"Seasonal"},seats:{label:"Seats",placeholder:"2, 4, 6..."},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"},"siren/purpose":{label:"Purpose"},"siren/type":{label:"Type",options:{pneumatic:"Pneumatic",electronic:"Electronic",other:"Other"}},site_type:{label:"Site 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:"Sources"},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_waterway:{label:"Structure",placeholder:"Unknown",options:{tunnel:"Tunnel"}},structure:{label:"Structure",placeholder:"Unknown",options:{bridge:"Bridge",tunnel:"Tunnel",embankment:"Embankment",cutting:"Cutting",ford:"Ford"}},studio:{label:"Type"},substance:{label:"Substance"},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"},"survey/date":{label:"Last Survey Date"},swimming_pool:{label:"Type"},"switch":{label:"Type",options:{mechanical:"Mechanical",circuit_breaker:"Circuit Breaker",disconnector:"Disconnector",earthing:"Earthing"}},tactile_paving:{label:"Tactile Paving"},takeaway:{label:"Takeaway",placeholder:"Yes, No, Takeaway Only...",options:{yes:"Yes",no:"No",only:"Takeaway Only"}},to:{label:"To"},"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"}},trade:{label:"Type"},traffic_calming:{label:"Type"},traffic_sign:{label:"Traffic Sign"},"traffic_sign/direction":{label:"Direction",options:{forward:"Forward",backward:"Backward",both:"Both / All"}},traffic_signals:{label:"Type"},"traffic_signals/direction":{label:"Direction",options:{forward:"Forward",backward:"Backward",both:"Both / All"}},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"}},transformer:{label:"Type",options:{distribution:"Distribution",generator:"Generator",converter:"Converter",traction:"Traction",auto:"Autotransformer",phase_angle_regulator:"Phase Angle Regulator",auxiliary:"Auxiliary",yes:"Unknown"}},trees:{label:"Trees"},tunnel:{label:"Type",placeholder:"Default"},usage_rail:{label:"Usage Type",options:{main:"Main",branch:"Branch",industrial:"Industrial",military:"Military",test:"Test",tourism:"Tourism"}},vending:{label:"Types of Goods"},visibility:{label:"Visibility",options:{house:"Up to 5m (16ft)",street:"5 to 20m (16 to 65ft)",area:"Over 20m (65ft)"}},"volcano/status":{label:"Volcano Status",options:{active:"Active",dormant:"Dormant",extinct:"Extinct"}},"volcano/type":{label:"Volcano Type",options:{stratovolcano:"Stratovolcano",shield:"Shield",scoria:"Scoria"}},voltage_electrified:{label:"Voltage"},voltage:{label:"Voltage"},"voltage/primary":{label:"Primary Voltage"},"voltage/secondary":{label:"Secondary Voltage"},"voltage/tertiary":{label:"Tertiary Voltage"},wall:{label:"Type"},water_point:{label:"Water Point"},water_source:{label:"Water Source"},water_volume:{label:"Water Reserve Volume (m³)"},water:{label:"Type"},waterway:{label:"Type"},website:{label:"Website",placeholder:"http://example.com/"},wetland:{label:"Type"},wheelchair:{label:"Wheelchair Access"},wholesale:{label:"Wholesale"},width:{label:"Width (Meters)"},wikidata:{label:"Wikidata"},wikipedia:{label:"Wikipedia"},windings:{label:"Windings",placeholder:"1, 2, 3..."},"windings/configuration":{label:"Windings Configuration",options:{star:"Star / Wye",delta:"Delta","open-delta":"Open Delta",zigzag:"Zig Zag",open:"Open",scott:"Scott",leblanc:"Leblanc"}}},presets:{aerialway:{name:"Aerialway",terms:"ski lift,funifor,funitel"},aeroway:{name:"Aeroway",terms:""},amenity:{name:"Amenity",terms:""},attraction:{name:"Attraction",terms:""},circular:{name:"Traffic Circle",terms:""},embankment:{name:"Embankment",terms:""},highway:{name:"Highway",terms:""},place:{name:"Place",terms:""},power:{name:"Power",terms:""},railway:{name:"Railway",terms:""},roundabout:{name:"Roundabout",terms:""},seamark:{name:"Seamark",terms:""},waterway:{name:"Waterway",terms:""},address:{name:"Address",terms:""},"advertising/billboard":{name:"Billboard",terms:""},"advertising/column":{name:"Advertising Column",terms:""},"aerialway/station":{name:"Aerialway Station",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/t-bar":{name:"T-bar Lift",terms:"tbar"},"aeroway/aerodrome":{name:"Airport",terms:"aerodrome,aeroway,airplane,airport,jet,plane"},"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"},"allotments/plot":{name:"Community Garden Plot",terms:""},"amenity/bus_station":{name:"Bus Station / Terminal",terms:""},"amenity/coworking_space":{name:"Coworking Space",terms:""},"amenity/ferry_terminal":{name:"Ferry Station / Terminal",terms:""},"amenity/nursing_home":{name:"Nursing Home",terms:""},"amenity/recycling":{name:"Recycling",terms:"bin,can,bottle,glass,garbage,rubbish,scrap,trash"},"amenity/register_office":{name:"Register Office",terms:""},"amenity/scrapyard":{name:"Scrap Yard",terms:""},"amenity/swimming_pool":{name:"Swimming Pool",terms:""},"amenity/animal_boarding":{name:"Animal Boarding Facility",terms:"boarding,cat,cattery,dog,horse,kennel,kitten,pet,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:"Biergarten",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/cafe":{name:"Cafe",terms:"bistro,coffee,tea"},"amenity/car_pooling":{name:"Car Pooling",terms:""},"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/clinic/abortion":{name:"Abortion Clinic",terms:""},"amenity/clinic/fertility":{name:"Fertility Clinic",terms:"egg,fertility,reproductive,sperm,ovulation"},"amenity/clock":{name:"Clock",terms:""},"amenity/college":{name:"College Grounds",terms:"university,undergraduate school"},"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/dive_centre":{name:"Dive Center",terms:"diving,scuba"},"amenity/doctors":{name:"Doctor",terms:"medic*,physician"},"amenity/dojo":{name:"Dojo / Martial Arts Academy",terms:"martial arts,dojang"},"amenity/drinking_water":{name:"Drinking Water",terms:"potable water source,water fountain,drinking fountain,bubbler,water tap"},"amenity/driving_school":{name:"Driving School",terms:""},"amenity/embassy":{name:"Embassy",terms:""},"amenity/fast_food":{name:"Fast Food",terms:"restaurant,takeaway"},"amenity/fast_food/burger":{name:"Burger Fast Food",terms:"breakfast,dine,dining,dinner,drive-in,eat,grill,lunch,table"},"amenity/fast_food/chicken":{name:"Chicken Fast Food",terms:"breakfast,canteen,dine,dining,dinner,drive-in,eat,grill,lunch,table"},"amenity/fast_food/fish_and_chips":{name:"Fish & Chips Fast Food",terms:"breakfast,cafe,café,dine,dining,dinner,drive-in,eat,grill,lunch,table,french fries"},"amenity/fast_food/kebab":{name:"Kebab Fast Food",terms:"bar,breakfast,cafe,café,canteen,dine,dining,dinner,drive-in,eat,grill,lunch,table"},"amenity/fast_food/pizza":{name:"Pizza Fast Food",terms:"dine,dining,dinner,drive-in,eat,lunch,table,deep dish,thin crust,slice"},"amenity/fast_food/sandwich":{name:"Sandwich Fast Food",terms:"breakfast,cafe,café,dine,dining,dinner,drive-in,eat,grill,lunch,table"},"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/language_school":{name:"Language School",terms:"esl"},"amenity/library":{name:"Library",terms:"book"},"amenity/love_hotel":{name:"Love Hotel",terms:""},"amenity/marketplace":{name:"Marketplace",terms:""},"amenity/monastery":{name:"Monastery Grounds",terms:"abbey,basilica,bethel,cathedral,chancel,chantry,chapel,church,fold,house of God,house of prayer,house of worship,minster,mission,monastery,mosque,oratory,parish,sacellum,sanctuary,shrine,synagogue,tabernacle,temple"},"amenity/money_transfer":{name:"Money Transfer Station",terms:"money order,check,bill,currency,finance,wire transfer,cable,person to person,cash to cash,exchange"},"amenity/motorcycle_parking":{name:"Motorcycle Parking",terms:""},"amenity/music_school":{name:"Music School",terms:"school of music"},"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:"Parking Lot",terms:"automobile parking,car lot,car parking,rv parking,truck parking,vehicle parking"},"amenity/parking/multi-storey":{name:"Multilevel Parking Garage",terms:"car,indoor parking,multistorey car park,parkade,parking building,parking deck,parking garage,parking ramp,parking structure"},"amenity/payment_centre":{name:"Payment Center",terms:"check,tax pay,bill pay,currency,finance,cash,money"},"amenity/payment_terminal":{name:"Payment Terminal",terms:"interactive kiosk,ekiosk,atm,bill pay,tax pay,phone pay,finance,cash,money transfer,card"},"amenity/pharmacy":{name:"Pharmacy Counter",terms:"apothecary,drug store,drugstore,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:"Christian 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/hindu":{name:"Hindu Temple",terms:"kovil,devasthana,mandir,kshetram,alayam,shrine,temple"},"amenity/place_of_worship/jewish":{name:"Jewish Synagogue",terms:"jewish"},"amenity/place_of_worship/muslim":{name:"Muslim Mosque",terms:"muslim"},"amenity/place_of_worship/shinto":{name:"Shinto Shrine",terms:"kami,torii"},"amenity/place_of_worship/sikh":{name:"Sikh Temple",terms:"gurudwara,temple"},"amenity/place_of_worship/taoist":{name:"Taoist Temple",terms:"daoist,monastery,temple"},"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_container":{name:"Recycling Container",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/restaurant/american":{name:"American Restaurant",terms:"bar,breakfast,cafe,café,canteen,coffee,dine,dining,dinner,drive-in,eat,grill,lunch,table"},"amenity/restaurant/asian":{name:"Asian Restaurant",terms:"bar,breakfast,cafe,café,canteen,dine,dining,dinner,drive-in,eat,grill,lunch,table"},"amenity/restaurant/chinese":{name:"Chinese Restaurant",terms:"bar,breakfast,cafe,café,canteen,dine,dining,dinner,drive-in,eat,grill,lunch,table"},"amenity/restaurant/french":{name:"French Restaurant",terms:"bar,breakfast,cafe,café,canteen,dine,dining,dinner,drive-in,eat,grill,lunch,table"},"amenity/restaurant/german":{name:"German Restaurant",terms:"bar,breakfast,cafe,café,canteen,dine,dining,dinner,drive-in,eat,grill,lunch,table"},"amenity/restaurant/greek":{name:"Greek Restaurant",terms:"bar,breakfast,cafe,café,canteen,dine,dining,dinner,drive-in,eat,grill,lunch,table,gyros,pitas,olives"},"amenity/restaurant/indian":{name:"Indian Restaurant",terms:"bar,breakfast,dine,dining,dinner,drive-in,eat,grill,lunch,table,curry"},"amenity/restaurant/italian":{name:"Italian Restaurant",terms:"bar,breakfast,cafe,café,canteen,dine,dining,dinner,drive-in,eat,grill,lunch,table,pasta,pizza"},"amenity/restaurant/japanese":{name:"Japanese Restaurant",terms:"bar,breakfast,cafe,café,canteen,dine,dining,dinner,drive-in,eat,grill,lunch,table"},"amenity/restaurant/mexican":{name:"Mexican Restaurant",terms:"bar,breakfast,dine,dining,dinner,drive-in,eat,grill,lunch,table,tacos,burritos,enchiladas,fajitas,nachos,tortillas,salsa,tamales,quesadillas"},"amenity/restaurant/noodle":{name:"Noodle Restaurant",terms:"bar,breakfast,cafe,café,canteen,dine,dining,dinner,drive-in,eat,grill,lunch,table,ramen noodles,soup,soba noodles,cellophane noodles,rice noodles"},"amenity/restaurant/pizza":{name:"Pizza Restaurant",terms:"bar,dine,dining,dinner,drive-in,eat,lunch,table,deep dish,thin crust,slice"},"amenity/restaurant/seafood":{name:"Seafood Restaurant",terms:"bar,breakfast,cafe,café,dine,dining,dinner,drive-in,eat,grill,lunch,table,fish,shellfish,molluscs,crustaceans,clams,oysters,lobsters,crab,shrimp,squid,octopus"},"amenity/restaurant/steakhouse":{name:"Steakhouse",terms:"bar,breakfast,cafe,café,canteen,dine,dining,dinner,drive-in,eat,grill,lunch,table,steak house,chop house,beef"},"amenity/restaurant/sushi":{name:"Sushi Restaurant",terms:"bar,breakfast,cafe,café,canteen,dine,dining,dinner,drive-in,eat,grill,lunch,table"},"amenity/restaurant/thai":{name:"Thai Restaurant",terms:"bar,breakfast,cafe,café,canteen,dine,dining,dinner,drive-in,eat,grill,lunch,table"},"amenity/restaurant/turkish":{name:"Turkish Restaurant",terms:"bar,breakfast,cafe,café,canteen,dine,dining,dinner,drive-in,eat,grill,lunch,table"},"amenity/restaurant/vietnamese":{name:"Vietnamese Restaurant",terms:"bar,breakfast,cafe,café,canteen,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/shelter/gazebo":{name:"Gazebo",terms:""},"amenity/shelter/lean_to":{name:"Lean-To",terms:""},"amenity/shelter/picnic_shelter":{name:"Picnic Shelter",terms:"pavilion"},"amenity/shelter/public_transport":{name:"Transit Shelter",terms:"bus stop,metro stop,waiting"},"amenity/shower":{name:"Shower",terms:"rain closet"},"amenity/smoking_area":{name:"Smoking Area",terms:""},"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,care home,assisted 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,assisted living"},"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/theatre/type/amphi":{name:"Amphitheatre",terms:"open air,outdoor,greek,ampi"},"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,graduate school,PhD program,master's degree program"},"amenity/vehicle_inspection":{name:"Vehicle Inspection",terms:"car inspection"},"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/coffee":{name:"Coffee Vending Machine",terms:"coffee"},"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/electronics":{name:"Electronics Vending Machine",terms:"cable,charger,earbud,headphone,phone,tablet"},"amenity/vending_machine/elongated_coin":{name:"Flat Coin Vending Machine",terms:"coin,crush,elongated,flatten,penny,souvenir"},"amenity/vending_machine/excrement_bags":{name:"Excrement Bag Vending Machine",terms:"excrement bags,poop,dog,animal"},"amenity/vending_machine/feminine_hygiene":{name:"Feminine Hygiene Vending Machine",terms:"condom,tampon,pad,woman,women,menstrual hygiene products,personal care"},"amenity/vending_machine/food":{name:"Food Vending Machine",terms:"food"},"amenity/vending_machine/fuel":{name:"Gas Pump",terms:"petrol,fuel,gasoline,propane,diesel,lng,cng,biodiesel"},"amenity/vending_machine/ice_cream":{name:"Ice Cream Vending Machine",terms:"chocolate,ice cream,frozen,popsicle,vanilla"},"amenity/vending_machine/newspapers":{name:"Newspaper Vending Machine",terms:"newspaper"},"amenity/vending_machine/parcel_pickup_dropoff":{name:"Parcel Pickup/Dropoff Locker",terms:"mail,parcel,pickup"},"amenity/vending_machine/parcel_pickup":{name:"Parcel Pickup Locker",terms:"amazon,locker,mail,parcel,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/stamps":{name:"Postage Vending Machine",terms:"mail,postage,stamp"},"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/waste/dog_excrement":{name:"Dog Excrement Bin",terms:"bin,garbage,rubbish,litter,trash,poo,dog"},"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:""},"attraction/amusement_ride":{name:"Amusement Ride",terms:"theme park,carnival ride"},"attraction/animal":{name:"Animal",terms:"zoo,theme park,animal park,lion,tiger,bear"},"attraction/big_wheel":{name:"Big Wheel",terms:"ferris wheel,theme park,amusement ride"},"attraction/bumper_car":{name:"Bumper Car",terms:"theme park,dodgem cars,autoscooter"},"attraction/bungee_jumping":{name:"Bungee Jumping",terms:"theme park,bungy jumping,jumping platform"},"attraction/carousel":{name:"Carousel",terms:"theme park,roundabout,merry-go-round,galloper,jumper,horseabout,flying horses"},"attraction/dark_ride":{name:"Dark Ride",terms:"theme park,ghost train"},"attraction/drop_tower":{name:"Drop Tower",terms:"theme park,amusement ride,gondola,tower,big drop"},"attraction/maze":{name:"Maze",terms:"theme park,amusement ride,labyrinth"},"attraction/pirate_ship":{name:"Pirate Ship",terms:"theme park,carnival ride,amusement ride"},"attraction/river_rafting":{name:"River Rafting",terms:"theme park,aquatic park,water park,rafting simulator,river rafting ride,river rapids ride"},"attraction/roller_coaster":{name:"Roller Coaster",terms:"theme park,amusement ride"},"attraction/summer_toboggan":{name:"Summer Toboggan",terms:"alpine slide,mountain coaster"},"attraction/train":{name:"Tourist Train",terms:"theme park,rackless train,road train,Tschu-Tschu train,dotto train,park train"},"attraction/water_slide":{name:"Water Slide",terms:"theme park,aquatic park,water park,flumes,water chutes,hydroslides"},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/fence/railing":{name:"Railing",terms:"railing,handrail,guard rail"},"barrier/gate":{name:"Gate",terms:""},"barrier/guard_rail":{name:"Guard Rail",terms:"guardrail,traffic barrier,crash barrier,median barrier,roadside barrier,Armco barrier"},"barrier/hedge":{name:"Hedge",terms:""},"barrier/kerb":{name:"Curb",terms:""},"barrier/kerb/flush":{name:"Flush Curb",terms:"even curb,level curb,tactile curb"},"barrier/kerb/lowered":{name:"Lowered Curb",terms:"curb cut,curb ramp,kerb ramp,dropped kerb,pram ramp"},"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:""},"bridge/support":{name:"Bridge Support",terms:""},"bridge/support/pier":{name:"Bridge Pier",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:"Apartment Building",terms:""},"building/barn":{name:"Barn",terms:""},"building/boathouse":{name:"Boathouse",terms:""},"building/bungalow":{name:"Bungalow",terms:"home,detached"},"building/cabin":{name:"Cabin",terms:""},"building/carport":{name:"Carport",terms:"covered parking space,garage,car,porch"},"building/cathedral":{name:"Cathedral Building",terms:""},"building/chapel":{name:"Chapel Building",terms:""},"building/church":{name:"Church Building",terms:""},"building/civic":{name:"Civic 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/farm_auxiliary":{name:"Farm Building",terms:""},"building/farm":{name:"Farm House",terms:""},"building/garage":{name:"Garage",terms:""},"building/garages":{name:"Garages",terms:""},"building/grandstand":{name:"Grandstand",terms:"tribune,stand,stands,bleachers"},"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/mosque":{name:"Mosque Building",terms:""},"building/pavilion":{name:"Pavilion Building",terms:"sports"},"building/public":{name:"Public Building",terms:""},"building/residential":{name:"Residential Building",terms:""},"building/retail":{name:"Retail Building",terms:""},"building/roof":{name:"Roof",terms:""},"building/ruins":{name:"Building Ruins",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/service":{name:"Service Building",terms:""},"building/shed":{name:"Shed",terms:""},"building/stable":{name:"Stable",terms:""},"building/stadium":{name:"Stadium Building",terms:""},"building/static_caravan":{name:"Static Mobile Home",terms:""},"building/temple":{name:"Temple Building",terms:""},"building/terrace":{name:"Row Houses",terms:"home,terrace,brownstone,family,residence,dwelling"},"building/transportation":{name:"Transportation Building",terms:""},"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"},"club/sport":{name:"Sports Club",terms:"athletics club,sporting club,sports association,sports society"},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/chimney_sweeper":{name:"Chimney Sweeper",terms:""},"craft/clockmaker":{name:"Clockmaker",terms:""},"craft/confectionery":{name:"Candy Maker",terms:"sweet,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/sculptor":{name:"Sculptor",terms:""},"craft/shoemaker":{name:"Shoemaker",terms:"cobbler"},"craft/stonemason":{name:"Stonemason",terms:"masonry"},"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:""},"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_alarm":{name:"Fire Alarm Call Box",terms:""},"emergency/fire_extinguisher":{name:"Fire Extinguisher",terms:""},"emergency/fire_hydrant":{name:"Fire Hydrant",terms:"fire plug,fire water well,hydrant"},"emergency/first_aid_kit":{name:"First Aid Kit",terms:"bandage,first aid,med,med kit,medic*,medkit"},"emergency/life_ring":{name:"Life Ring",terms:"life buoy,kisby ring,kisbie ring,perry buoy"},"emergency/lifeguard":{name:"Lifeguard",terms:"CPR,rescue"},"emergency/phone":{name:"Emergency Phone",terms:""},"emergency/siren":{name:"Siren",terms:"air raid,loud,noise,storm,tornado,warning"},"emergency/water_tank":{name:"Emergency Water Tank",terms:"water tank,cistern,reservoir"},entrance:{name:"Entrance/Exit",terms:"entrance,exit,door"},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:{name:"Healthcare Facility",terms:"clinic,doctor,disease,health,institution,sick,surgery,wellness"},"healthcare/alternative":{name:"Alternative Medicine",terms:"acupuncture,anthroposophical,applied kinesiology,aromatherapy,ayurveda,herbalism,homeopathy,hydrotherapy,hypnosis,naturopathy,osteopathy,reflexology,reiki,shiatsu,traditional,tuina,unani"},"healthcare/alternative/chiropractic":{name:"Chiropractor",terms:"back,pain,spine"},"healthcare/audiologist":{name:"Audiologist",terms:"ear,hearing,sound"},"healthcare/birthing_center":{name:"Birthing Center",terms:"baby,childbirth,delivery,labour,labor,pregnancy"},"healthcare/blood_donation":{name:"Blood Donor Center",terms:"blood bank,blood donation,blood transfusion,apheresis,plasmapheresis,plateletpheresis,stem cell donation"},"healthcare/hospice":{name:"Hospice",terms:"terminal,illness"},"healthcare/laboratory":{name:"Medical Laboratory",terms:"medical_laboratory,medical_lab,blood_check"},"healthcare/midwife":{name:"Midwife",terms:"baby,childbirth,delivery,labour,labor,pregnancy"},"healthcare/occupational_therapist":{name:"Occupational Therapist",terms:"therapist,therapy"},"healthcare/optometrist":{name:"Optometrist",terms:"eye,glasses,lasik,lenses,vision"},"healthcare/physiotherapist":{name:"Physiotherapist",terms:"physical,therapist,therapy"},"healthcare/podiatrist":{name:"Podiatrist",terms:"foot,feet,nails"},"healthcare/psychotherapist":{name:"Psychotherapist",terms:"anxiety,counselor,depression,mental health,mind,suicide,therapist,therapy"},"healthcare/rehabilitation":{name:"Rehabilitation Facility",terms:"rehab,therapist,therapy"},"healthcare/speech_therapist":{name:"Speech Therapist",terms:"speech,therapist,therapy,voice"},"highway/bus_stop":{name:"Bus Stop / Platform",terms:""},"highway/bridleway":{name:"Bridle Path",terms:"bridleway,equestrian,horse,trail"},"highway/bus_guideway":{name:"Bus Guideway",terms:""},"highway/construction":{name:"Road Closed",terms:"closed,closure,construction"},"highway/corridor":{name:"Indoor Corridor",terms:"gallery,hall,hallway,indoor,passage,passageway"},"highway/crossing/zebra-raised":{name:"Marked Crosswalk (Raised)",terms:"zebra crossing,marked crossing,crosswalk,flat top,hump,speed,slow"},"highway/crossing/zebra":{name:"Marked Crosswalk",terms:"zebra crossing,marked crossing,crosswalk"},"highway/crossing/marked-raised":{name:"Marked Crosswalk (Raised)",terms:"zebra crossing,marked crossing,crosswalk,flat top,hump,speed,slow"},"highway/crossing/marked":{name:"Marked Crosswalk",terms:"zebra crossing,marked crossing,crosswalk"},"highway/crossing/unmarked-raised":{name:"Unmarked Crossing (Raised)",terms:"flat top,hump,speed,slow"},"highway/crossing/unmarked":{name:"Unmarked Crossing",terms:""},"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/footway/zebra-raised":{name:"Marked Crosswalk (Raised)",terms:"zebra crossing,marked crossing,crosswalk,flat top,hump,speed,slow"},"highway/footway/zebra":{name:"Marked Crosswalk",terms:"zebra crossing,marked crossing,crosswalk"},"highway/footway/conveying":{name:"Moving Walkway",terms:"moving sidewalk,autwalk,skywalk,travolator,travelator,travellator,conveyor"},"highway/footway/marked-raised":{name:"Marked Crosswalk (Raised)",terms:"zebra crossing,marked crossing,crosswalk,flat top,hump,speed,slow"},"highway/footway/marked":{name:"Marked Crosswalk",terms:"zebra crossing,marked crossing,crosswalk"},"highway/footway/sidewalk":{name:"Sidewalk",terms:"pavement,sidepath"},"highway/footway/unmarked-raised":{name:"Unmarked Crossing (Raised)",terms:"flat top,hump,speed,slow"},"highway/footway/unmarked":{name:"Unmarked Crossing",terms:""},"highway/give_way":{name:"Yield Sign",terms:"give way,yield,sign"},"highway/living_street":{name:"Living Street",terms:""},"highway/milestone":{name:"Highway Milestone",terms:"milestone,marker"},"highway/mini_roundabout":{name:"Mini-Roundabout",terms:""},"highway/motorway_junction":{name:"Motorway Junction / Exit",terms:"exit"},"highway/motorway_link":{name:"Motorway Link",terms:"exit,ramp,road,street,on ramp,off ramp"},"highway/motorway":{name:"Motorway",terms:"autobahn,expressway,freeway,highway,interstate,parkway,road,street,thruway,turnpike"},"highway/passing_place":{name:"Passing Place",terms:"turnout, pullout"},"highway/path":{name:"Path",terms:"hike,hiking,trackway,trail,walk"},"highway/pedestrian_area":{name:"Pedestrian Area",terms:"center,centre,plaza,quad,square,walkway"},"highway/pedestrian_line":{name:"Pedestrian Street",terms:"center,centre,plaza,quad,square,walkway"},"highway/primary_link":{name:"Primary Link",terms:"on ramp,off ramp,ramp,road,street"},"highway/primary":{name:"Primary Road",terms:"road,street"},"highway/raceway":{name:"Racetrack (Motorsport)",terms:"auto*,formula one,kart,motocross,nascar,race*,track"},"highway/residential":{name:"Residential Road",terms:"road,street"},"highway/rest_area":{name:"Rest Area",terms:"rest stop"},"highway/road":{name:"Unknown Road",terms:"road,street"},"highway/secondary_link":{name:"Secondary Link",terms:"on ramp,off ramp,ramp,road,street"},"highway/secondary":{name:"Secondary Road",terms:"road,street"},"highway/service":{name:"Service Road",terms:"road,street"},"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/steps/conveying":{name:"Escalator",terms:"moving staircase,moving stairway,people mover"},"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:"on ramp,off ramp,ramp,road,street"},"highway/tertiary":{name:"Tertiary Road",terms:"road,street"},"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:"on ramp,off ramp,ramp,road,street"},"highway/trunk":{name:"Trunk Road",terms:"road,street"},"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:"road,street"},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:"dedicatory,epitaph,remember,remembrance,memory,monument,stolperstein"},"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:""},"historic/wreck":{name:"Shipwreck",terms:"hull,mast,maritime,remains,ship,boat"},"internet_access/wlan":{name:"Wi-Fi Hotspot",terms:"wi-fi,wifi,hotspot"},junction:{name:"Junction",terms:""},landuse:{name:"Land Use",terms:""},"landuse/basin":{name:"Basin",terms:""},"landuse/farm":{name:"Farmland",terms:""},"landuse/pond":{name:"Pond",terms:""},"landuse/reservoir":{name:"Reservoir",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/brownfield":{name:"Brownfield",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:"Managed Forest",terms:"cut,forest,forestry,lumber,silviculture,tree"},"landuse/garages":{name:"Garage Landuse",terms:""},"landuse/grass":{name:"Grass",terms:""},"landuse/greenfield":{name:"Greenfield",terms:""},"landuse/greenhouse_horticulture":{name:"Greenhouse Horticulture",terms:"flower,greenhouse,horticulture,grow,vivero"},"landuse/harbour":{name:"Harbor",terms:"boat"},"landuse/industrial":{name:"Industrial Area",terms:""},"landuse/industrial/scrap_yard":{name:"Scrap Yard",terms:"car,junk,metal,salvage,scrap,u-pull-it,vehicle,wreck,yard"},"landuse/industrial/slaughterhouse":{name:"Slaughterhouse",terms:"abattoir,beef,butchery,calf,chicken,cow,killing house,meat,pig,pork,poultry,shambles,stockyard"},"landuse/landfill":{name:"Landfill",terms:"dump"},"landuse/meadow":{name:"Meadow",terms:""},"landuse/military":{name:"Military Area",terms:""},"landuse/military/airfield":{name:"Military Airfield",terms:"aerodrome,aeroway,air force,airplane,airport,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/religious":{name:"Religious Area",terms:""},"landuse/residential":{name:"Residential Area",terms:""},"landuse/residential/apartments":{name:"Apartment Complex",terms:"flat,residence,tenement"},"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/amusement_arcade":{name:"Amusement Arcade",terms:"pay-to-play games,video games,driving simulators,pinball machines"},"leisure/bandstand":{name:"Bandstand",terms:""},"leisure/beach_resort":{name:"Beach Resort",terms:""},"leisure/bird_hide":{name:"Bird Hide",terms:"machan,ornithology"},"leisure/bleachers":{name:"Bleachers",terms:"crowd,bench,sports,stand,stands,seat,seating"},"leisure/bowling_alley":{name:"Bowling Alley",terms:"bowling center"},"leisure/common":{name:"Common",terms:"open space"},"leisure/dance":{name:"Dance Hall",terms:"ballroom,jive,swing,tango,waltz"},"leisure/dancing_school":{name:"Dance School",terms:"jive,swing,tango,waltz,dance teaching"},"leisure/dog_park":{name:"Dog Park",terms:""},"leisure/firepit":{name:"Firepit",terms:"fireplace,campfire"},"leisure/fishing":{name:"Fishing Spot",terms:"angler"},"leisure/fitness_centre":{name:"Gym / Fitness Center",terms:"health,gym,leisure,studio"},"leisure/fitness_centre/yoga":{name:"Yoga Studio",terms:"studio,asanas,modern yoga,meditation"},"leisure/fitness_station":{name:"Outdoor Fitness Station",terms:"exercise,fitness,gym,trim trail"},"leisure/fitness_station/balance_beam":{name:"Exercise Balance Beam",terms:"balance,exercise,fitness,gym,trim trail"},"leisure/fitness_station/box":{name:"Exercise Box",terms:"box,exercise,fitness,gym,jump,trim trail"},"leisure/fitness_station/horizontal_bar":{name:"Exercise Horizontal Bar",terms:"bar,chinup,chin up,exercise,fitness,gym,pullup,pull up,trim trail"},"leisure/fitness_station/horizontal_ladder":{name:"Exercise Monkey Bars",terms:"bar,chinup,chin up,exercise,fitness,gym,ladder,monkey bars,pullup,pull up,trim trail"},"leisure/fitness_station/hyperextension":{name:"Hyperextension Station",terms:"back,exercise,extension,fitness,gym,roman chair,trim trail"},"leisure/fitness_station/parallel_bars":{name:"Parallel Bars",terms:"bar,dip,exercise,fitness,gym,trim trail"},"leisure/fitness_station/push-up":{name:"Push-Up Station",terms:"bar,exercise,fitness,gym,pushup,push up,trim trail"},"leisure/fitness_station/rings":{name:"Exercise Rings",terms:"exercise,fitness,gym,muscle up,pullup,pull up,trim trail"},"leisure/fitness_station/sign":{name:"Exercise Instruction Sign",terms:"exercise,fitness,gym,trim trail"},"leisure/fitness_station/sit-up":{name:"Sit-Up Station",terms:"crunch,exercise,fitness,gym,situp,sit up,trim trail"},"leisure/fitness_station/stairs":{name:"Exercise Stairs",terms:"exercise,fitness,gym,steps,trim trail"},"leisure/garden":{name:"Garden",terms:""},"leisure/golf_course":{name:"Golf Course",terms:"links"},"leisure/hackerspace":{name:"Hackerspace",terms:"makerspace,hackspace,hacklab"},"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/outdoor_seating":{name:"Outdoor Seating Area",terms:"al fresco,beer garden,dining,cafe,restaurant,pub,bar,patio"},"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:"football,gridiron"},"leisure/pitch/australian_football":{name:"Australian Football Field",terms:"Aussie,AFL,football"},"leisure/pitch/badminton":{name:"Badminton Court",terms:""},"leisure/pitch/baseball":{name:"Baseball Field",terms:""},"leisure/pitch/basketball":{name:"Basketball Court",terms:""},"leisure/pitch/beachvolleyball":{name:"Beach Volleyball Court",terms:"volleyball"},"leisure/pitch/boules":{name:"Boules/Bocce Court",terms:"bocce,lyonnaise,pétanque"},"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/netball":{name:"Netball Court",terms:""},"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/softball":{name:"Softball Field",terms:"softball,diamond"},"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/sauna":{name:"Sauna",terms:""},"leisure/slipway":{name:"Slipway",terms:"boat launch,boat ramp,boat landing"},"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,aquatics"},"leisure/track":{name:"Racetrack (Non-Motorsport)",terms:"cycle,dog,greyhound,horse,race*,track"},"leisure/track/horse_racing":{name:"Racetrack (Horse Racing)",terms:"race*,horse,track"},"leisure/track/running":{name:"Racetrack (Running)",terms:"race*,running,sprint,track"},"leisure/water_park":{name:"Water Park",terms:"swim,pool,dive"},line:{name:"Line",terms:""},man_made:{name:"Man Made",terms:""},"man_made/adit":{name:"Adit",terms:"entrance,underground,mine,cave"},"man_made/antenna":{name:"Antenna",terms:"broadcast,cell phone,cell,communication,mobile phone,radio,television,transmission,tv"},"man_made/breakwater":{name:"Breakwater",terms:""},"man_made/bridge":{name:"Bridge",terms:""},"man_made/bunker_silo":{name:"Bunker Silo",terms:"Silage,Storage"},"man_made/chimney":{name:"Chimney",terms:""},"man_made/clearcut":{name:"Clearcut Forest",terms:"cut,forest,lumber,tree,wood"},"man_made/crane":{name:"Crane",terms:""},"man_made/cutline":{name:"Cut line",terms:""},"man_made/embankment":{name:"Embankment",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/mast/communication":{name:"Communication 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/mast/communication/mobile_phone":{name:"Mobile Phone Mast",terms:"antenna,cell mast,cell phone mast,cell phone tower,cell tower,communication mast,communication tower,guyed tower,mobile phone tower,transmission mast,transmission tower"},"man_made/mast/communication/radio":{name:"Radio Broadcast Mast",terms:"antenna,broadcast tower,communication mast,communication tower,guyed tower,radio mast,radio tower,transmission mast,transmission tower"},"man_made/mast/communication/television":{name:"Television Broadcast Mast",terms:"antenna,broadcast tower,communication mast,communication tower,guyed tower,television mast,television tower,transmission mast,transmission tower,tv mast,tv tower"},"man_made/monitoring_station":{name:"Monitoring Station",terms:"weather,earthquake,seismology,air,gps"},"man_made/observatory":{name:"Observatory",terms:"astronomical,meteorological"},"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,jetty"},"man_made/pipeline":{name:"Pipeline",terms:"oil,natural gas,water,sewer,sewage"},"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":{name:"Surveillance",terms:"anpr,alpr,camera,car plate recognition,cctv,guard,license plate recognition,monitoring,number plate recognition,security,video,webcam"},"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/survey_point":{name:"Survey Point",terms:"trig point,triangulation pillar,trigonometrical station"},"man_made/tower":{name:"Tower",terms:""},"man_made/tower/communication":{name:"Communication Tower",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/tower/observation":{name:"Observation Tower",terms:"lookout tower,fire tower"},"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/watermill":{name:"Watermill",terms:"water,wheel,mill"},"man_made/windmill":{name:"Windmill",terms:"wind,wheel,mill"},"man_made/works":{name:"Factory",terms:"assembly,build,brewery,car,plant,plastic,processing,manufacture,refinery"},manhole:{name:"Manhole",terms:"cover,hole,sewer,sewage,telecom"},"manhole/drain":{name:"Storm Drain",terms:"cover,drain,hole,rain,sewer,sewage,storm"},"manhole/telecom":{name:"Telecom Manhole",terms:"cover,phone,hole,telecom,telephone,bt"},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:"crag,escarpment,rock face,scarp"},"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/mud":{name:"Mud",terms:"wetland"},"natural/peak":{name:"Peak",terms:"acme,aiguille,alp,climax,crest,crown,hill,mount,mountain,pinnacle,summit,tip,top"},"natural/reef":{name:"Reef",terms:"barrier,coral,ocean,sand,shoal"},"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/basin":{name:"Basin",terms:"detention,drain,overflow,rain,retention"},"natural/water/canal":{name:"Canal",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/water/river":{name:"River",terms:"beck,branch,brook,course,creek,estuary,rill,riverbank,rivulet,run,runnel,stream,tributary,watercourse"},"natural/water/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"},"natural/wetland":{name:"Wetland",terms:"bog,marsh,reedbed,swamp,tidalflat"},"natural/wood":{name:"Wood",terms:"tree"},"noexit/yes":{name:"No Exit",terms:"no exit,road end,dead end"},office:{name:"Office",terms:""},"office/administrative":{name:"Administrative Office",terms:""},"office/physician":{name:"Physician",terms:""},"office/travel_agent":{name:"Travel Agency",terms:""},"office/accountant":{name:"Accountant Office",terms:""},"office/adoption_agency":{name:"Adoption Agency",terms:""},"office/advertising_agency":{name:"Advertising Agency",terms:"ad,ad agency,advert agency,advertising,marketing"},"office/architect":{name:"Architect Office",terms:""},"office/association":{name:"Nonprofit Organization Office",terms:"association,non-profit,nonprofit,organization,society"},"office/charity":{name:"Charity Office",terms:"charitable organization"},"office/company":{name:"Corporate 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/energy_supplier":{name:"Energy Supplier Office",terms:"electricity,energy company,energy utility,gas utility"},"office/estate_agent":{name:"Real Estate Office",terms:"real estate"},"office/financial":{name:"Financial Office",terms:""},"office/forestry":{name:"Forestry Office",terms:"forest,ranger"},"office/foundation":{name:"Foundation Office",terms:""},"office/government":{name:"Government Office",terms:""},"office/government/register_office":{name:"Register Office",terms:"clerk,marriage,death,birth,certificate"},"office/government/tax":{name:"Tax and Revenue Office",terms:"fiscal authorities,revenue office,tax office"},"office/guide":{name:"Tour Guide Office",terms:"dive guide,mountain guide,tour guide"},"office/insurance":{name:"Insurance Office",terms:""},"office/it":{name:"Information Technology Office",terms:"computer,information,software,technology"},"office/lawyer":{name:"Law Office",terms:""},"office/lawyer/notary":{name:"Notary Office",terms:""},"office/moving_company":{name:"Moving Company Office",terms:"relocation"},"office/newspaper":{name:"Newspaper Office",terms:""},"office/ngo":{name:"NGO Office",terms:"ngo,non government,non-government,organization,organisation"},"office/notary":{name:"Notary Office",terms:"clerk,deeds,estate,signature,wills"},"office/political_party":{name:"Political Party",terms:""},"office/private_investigator":{name:"Private Investigator Office",terms:"PI,private eye,private detective"},"office/quango":{name:"Quasi-NGO Office",terms:"ngo,non government,non-government,organization,organisation,quasi autonomous,quasi-autonomous"},"office/religion":{name:"Religious Office",terms:""},"office/research":{name:"Research Office",terms:""},"office/surveyor":{name:"Surveyor Office",terms:""},"office/tax_advisor":{name:"Tax Advisor Office",terms:"tax,tax consultant"},"office/telecommunication":{name:"Telecom Office",terms:"communication,internet,phone,voice"},"office/therapist":{name:"Therapist Office",terms:"therapy"},"office/water_utility":{name:"Water Utility Office",terms:"water board,utility"},"piste/downhill":{name:"Downhill Piste/Ski Run",terms:"ski,alpine,snowboard,downhill,piste"},"piste/downhill/halfpipe":{name:"Halfpipe",terms:"ski,alpine,halfpipe,half pipe,snowboard,downhill,piste"},"piste/hike":{name:"Snowshoeing or Winter Hiking Trail",terms:"hike,winter hiking,snowshoe,snowshoeing,piste,ski"},"piste/ice_skate":{name:"Ice Skating Piste",terms:"ice,skating,ski,piste"},"piste/nordic":{name:"Nordic or Crosscountry Piste/Ski Trail",terms:"ski,nordic,crosscountry,skating,piste"},"piste/piste":{name:"Winter Sport Trails",terms:"ski,nordic,crosscountry,downhill,alpine,snowboard,skitour,ski touring,sled,luge,sleigh,sledge,ski-joring,husky,horse,winter hiking,snowshoe,snowshoeing,ice,skating"},"piste/skitour":{name:"Ski Touring Trail",terms:"ski,skitour,crosscountry,ski touring,piste"},"piste/sled":{name:"Sled Piste",terms:"ski,sled,luge,sleigh,sledge,piste"},"piste/sleigh":{name:"Sleigh Piste",terms:"ski,piste,sled,luge,sleigh,sledge,ski-joring,husky,horse"},"place/farm":{name:"Farm",terms:""},"place/city_block":{name:"City Block",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/islet":{name:"Islet",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/plot":{name:"Plot",terms:"tract,land,lot,parcel"},"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:""},"playground/balance_beam":{name:"Play Balance Beam",terms:""},"playground/basket_spinner":{name:"Basket Spinner",terms:"basket rotator"},"playground/basket_swing":{name:"Basket Swing",terms:""},"playground/climbing_frame":{name:"Climbing Frame",terms:""},"playground/cushion":{name:"Bouncy Cushion",terms:""},"playground/horizontal_bar":{name:"Play Horizontal Bar",terms:"high bar"},"playground/rocker":{name:"Spring Rider",terms:"spring rocker,springy rocker"},"playground/roundabout":{name:"Play Roundabout",terms:"merry-go-round"},"playground/sandpit":{name:"Sandpit",terms:""},"playground/seesaw":{name:"Seesaw",terms:""},"playground/slide":{name:"Slide",terms:""},"playground/structure":{name:"Play Structure",terms:""},"playground/swing":{name:"Swing",terms:""},"playground/zipwire":{name:"Zip Wire",terms:""},point:{name:"Point",terms:""},"power/sub_station":{name:"Substation",terms:""},"power/cable/underground":{name:"Underground Power Cable",terms:""},"power/generator":{name:"Power Generator",terms:"hydro,solar,turbine,wind"},"power/generator/method/photovoltaic":{name:"Solar Panel",terms:"photovoltaic module,PV module,sunlight"},"power/generator/source/nuclear":{name:"Nuclear Reactor",terms:"fission,generator,nuclear,nuke,reactor"},"power/generator/source/wind":{name:"Wind Turbine",terms:"generator,turbine,windmill,wind"},"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/switch":{name:"Power Switch",terms:""},"power/tower":{name:"High-Voltage Tower",terms:"power"},"power/transformer":{name:"Transformer",terms:""},"public_transport/linear_platform_aerialway":{name:"Aerialway Stop / Platform",terms:"aerialway,cable car,platform,public transit,public transportation,transit,transportation"},"public_transport/linear_platform_bus":{name:"Bus Stop / Platform",terms:"bus,platform,public transit,public transportation,transit,transportation"},"public_transport/linear_platform_ferry":{name:"Ferry Stop / Platform",terms:"boat,dock,ferry,pier,platform,public transit,public transportation,transit,transportation"},"public_transport/linear_platform_light_rail":{name:"Light Rail Stop / Platform",terms:"electric,light rail,platform,public transit,public transportation,rail,track,tram,trolley,transit,transportation"},"public_transport/linear_platform_monorail":{name:"Monorail Stop / Platform",terms:"monorail,platform,public transit,public transportation,rail,transit,transportation"},"public_transport/linear_platform_subway":{name:"Subway Stop / Platform",terms:"metro,platform,public transit,public transportation,rail,subway,track,transit,transportation,underground"},"public_transport/linear_platform_train":{name:"Train Stop / Platform",terms:"platform,public transit,public transportation,rail,track,train,transit,transportation"},"public_transport/linear_platform_tram":{name:"Tram Stop / Platform",terms:"electric,light rail,platform,public transit,public transportation,rail,streetcar,track,tram,trolley,transit,transportation"},"public_transport/linear_platform_trolleybus":{name:"Trolleybus Stop / Platform",terms:"bus,electric,platform,public transit,public transportation,streetcar,trackless,tram,trolley,transit,transportation"},"public_transport/linear_platform":{name:"Transit Stop / Platform",terms:"platform,public transit,public transportation,transit,transportation"},"public_transport/platform_aerialway":{name:"Aerialway Stop / Platform",terms:"aerialway,cable car,platform,public transit,public transportation,transit,transportation"},"public_transport/platform_bus":{name:"Bus Stop / Platform",terms:"bus,platform,public transit,public transportation,transit,transportation"},"public_transport/platform_ferry":{name:"Ferry Stop / Platform",terms:"boat,dock,ferry,pier,platform,public transit,public transportation,transit,transportation"},"public_transport/platform_light_rail":{name:"Light Rail Stop / Platform",terms:"electric,light rail,platform,public transit,public transportation,rail,track,tram,trolley,transit,transportation"},"public_transport/platform_monorail":{name:"Monorail Stop / Platform",terms:"monorail,platform,public transit,public transportation,rail,transit,transportation"},"public_transport/platform_subway":{name:"Subway Stop / Platform",terms:"metro,platform,public transit,public transportation,rail,subway,track,transit,transportation,underground"},"public_transport/platform_train":{name:"Train Stop / Platform",terms:"platform,public transit,public transportation,rail,track,train,transit,transportation"},"public_transport/platform_tram":{name:"Tram Stop / Platform",terms:"electric,light rail,platform,public transit,public transportation,rail,streetcar,track,tram,trolley,transit,transportation"},"public_transport/platform_trolleybus":{name:"Trolleybus Stop / Platform",terms:"bus,electric,platform,public transit,public transportation,streetcar,trackless,tram,trolley,transit,transportation"},"public_transport/platform":{name:"Transit Stop / Platform",terms:"platform,public transit,public transportation,transit,transportation"},"public_transport/station_aerialway":{name:"Aerialway Station",terms:"aerialway,cable car,public transit,public transportation,station,terminal,transit,transportation"},"public_transport/station_bus":{name:"Bus Station / Terminal",terms:"bus,public transit,public transportation,station,terminal,transit,transportation"},"public_transport/station_ferry":{name:"Ferry Station / Terminal",terms:"boat,dock,ferry,pier,public transit,public transportation,station,terminal,transit,transportation"},"public_transport/station_light_rail":{name:"Light Rail Station",terms:"electric,light rail,public transit,public transportation,rail,station,terminal,track,tram,trolley,transit,transportation"},"public_transport/station_monorail":{name:"Monorail Station",terms:"monorail,public transit,public transportation,rail,station,terminal,transit,transportation"},"public_transport/station_subway":{name:"Subway Station",terms:"metro,public transit,public transportation,rail,station,subway,terminal,track,transit,transportation,underground"},"public_transport/station_train_halt":{name:"Train Station (Halt / Request)",terms:"halt,public transit,public transportation,rail,station,track,train,transit,transportation,whistle stop"},"public_transport/station_train":{name:"Train Station",terms:"public transit,public transportation,rail,station,terminal,track,train,transit,transportation"},"public_transport/station_tram":{name:"Tram Station",terms:"electric,light rail,public transit,public transportation,rail,station,streetcar,terminal,track,tram,trolley,transit,transportation"},"public_transport/station_trolleybus":{name:"Trolleybus Station / Terminal",terms:"bus,electric,public transit,public transportation,station,streetcar,terminal,trackless,tram,trolley,transit,transportation"},"public_transport/station":{name:"Transit Station",terms:"public transit,public transportation,station,terminal,transit,transportation"},"public_transport/stop_area":{name:"Transit Stop Area",terms:""},"public_transport/stop_position_aerialway":{name:"Aerialway Stopping Location",terms:"aerialway,cable car,public transit,public transportation,transit,transportation"},"public_transport/stop_position_bus":{name:"Bus Stopping Location",terms:"bus,public transit,public transportation,transit,transportation"},"public_transport/stop_position_ferry":{name:"Ferry Stopping Location",terms:"boat,dock,ferry,pier,public transit,public transportation,transit,transportation"},"public_transport/stop_position_light_rail":{name:"Light Rail Stopping Location",terms:"electric,light rail,public transit,public transportation,rail,track,tram,trolley,transit,transportation"},"public_transport/stop_position_monorail":{name:"Monorail Stopping Location",terms:"monorail,public transit,public transportation,rail,transit,transportation"},"public_transport/stop_position_subway":{name:"Subway Stopping Location",terms:"metro,public transit,public transportation,rail,subway,track,transit,transportation,underground"},"public_transport/stop_position_train":{name:"Train Stopping Location",terms:"public transit,public transportation,rail,track,train,transit,transportation"},"public_transport/stop_position_tram":{name:"Tram Stopping Location",terms:"electric,light rail,public transit,public transportation,rail,streetcar,track,tram,trolley,transit,transportation"},"public_transport/stop_position_trolleybus":{name:"Trolleybus Stopping Location",terms:"bus,electric,public transit,public transportation,streetcar,trackless,tram,trolley,transit,transportation"},"public_transport/stop_position":{name:"Transit Stopping Location",terms:"public transit,public transportation,transit,transportation"},"railway/halt":{name:"Train Station (Halt / Request)",terms:"break,interrupt,rest,wait,interruption"},"railway/platform":{name:"Train Stop / Platform",terms:""},"railway/station":{name:"Train Station",terms:"train station,station"},"railway/tram_stop":{name:"Tram Stopping Position",terms:"light rail,streetcar,tram,trolley"},"railway/abandoned":{name:"Abandoned Railway",terms:""},"railway/buffer_stop":{name:"Buffer Stop",terms:"stop,halt,buffer"},"railway/crossing":{name:"Railway Crossing (Path)",terms:"crossing,pedestrian crossing,railroad crossing,level crossing,grade crossing,path through railroad,train crossing"},"railway/derail":{name:"Railway Derailer",terms:"derailer"},"railway/disused":{name:"Disused Railway",terms:""},"railway/funicular":{name:"Funicular",terms:"venicular,cliff railway,cable car,cable railway,funicular railway"},"railway/level_crossing":{name:"Railway Crossing (Road)",terms:"crossing,railroad crossing,level crossing,grade crossing,road through railroad,train crossing"},"railway/light_rail":{name:"Light Rail",terms:"light rail,streetcar,trolley"},"railway/milestone":{name:"Railway Milestone",terms:"milestone,marker"},"railway/miniature":{name:"Miniature Railway",terms:"rideable miniature railway,narrow gauge railway,minimum gauge railway"},"railway/monorail":{name:"Monorail",terms:""},"railway/narrow_gauge":{name:"Narrow Gauge Rail",terms:"narrow gauge railway,narrow gauge railroad"},"railway/rail":{name:"Rail",terms:""},"railway/signal":{name:"Railway Signal",terms:"signal,lights"},"railway/subway_entrance":{name:"Subway Entrance",terms:"metro,transit"},"railway/subway":{name:"Subway",terms:"metro,transit"},"railway/switch":{name:"Railway Switch",terms:"switch,points"},"railway/train_wash":{name:"Train Wash",terms:"wash,clean"},"railway/tram":{name:"Tram",terms:"light rail,streetcar,tram,trolley"},relation:{name:"Relation",terms:""},"route/ferry":{name:"Ferry Route",terms:""},"seamark/beacon_isolated_danger":{name:"Danger Beacon",terms:"beacon isolated danger,isolated danger beacon,iala"},"seamark/beacon_lateral":{name:"Channel Beacon",terms:"lateral beacon,beacon lateral,cevni,channel marker,iala,lateral mark"},"seamark/buoy_lateral":{name:"Channel Buoy",terms:"lateral buoy,buoy lateral,cevni,channel marker,iala,lateral mark"},"seamark/buoy_lateral/green":{name:"Green Buoy",terms:"lateral buoy,buoy lateral,cevni,channel marker,iala,lateral mark"},"seamark/buoy_lateral/red":{name:"Red Buoy",terms:"lateral buoy,buoy lateral,cevni,channel marker,iala,lateral mark"},"seamark/mooring":{name:"Mooring",terms:"dolphin,pile,bollard,buoy,post"},shop:{name:"Shop",terms:""},"shop/fishmonger":{name:"Fishmonger",terms:""},"shop/furnace":{name:"Furnace Store",terms:"oven,stove"},"shop/vacant":{name:"Vacant Shop",terms:""},"shop/agrarian":{name:"Farm Supply Shop",terms:"agricultural inputs,agricultural machines,seeds,pesticides,fertilizer,agricultural tools"},"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/caravan":{name:"RV Dealership",terms:"auto"},"shop/carpet":{name:"Carpet Store",terms:"rug"},"shop/catalogue":{name:"Catalog Shop",terms:""},"shop/charity":{name:"Charity Store",terms:"thrift,op shop,nonprofit"},"shop/cheese":{name:"Cheese Store",terms:""},"shop/chemist":{name:"Drugstore",terms:"apothecary,beauty,drug store,drugstore,gift,hair,med*,pharmacy,prescription,tooth"},"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:"sweet"},"shop/convenience":{name:"Convenience Store",terms:""},"shop/copyshop":{name:"Copy Store",terms:""},"shop/cosmetics":{name:"Cosmetics Store",terms:""},"shop/country_store":{name:"Country 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/fireplace":{name:"Fireplace Store",terms:"fireplace,stove,masonry heater"},"shop/fishing":{name:"Fishing Shop",terms:""},"shop/florist":{name:"Florist",terms:"flower"},"shop/frame":{name:"Framing Shop",terms:"art*,paint*,photo*,frame"},"shop/frozen_food":{name:"Frozen Food",terms:""},"shop/fuel":{name:"Fuel Shop",terms:""},"shop/funeral_directors":{name:"Funeral Home",terms:"undertaker,memorial home"},"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_supply":{name:"Hairdresser Supply Store",terms:"barber,shampoo,conditioner"},"shop/hairdresser":{name:"Hairdresser",terms:"barber"},"shop/hardware":{name:"Hardware Store",terms:""},"shop/health_food":{name:"Health Food Shop",terms:"wholefood,vitamins,vegetarian,vegan"},"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/hunting":{name:"Hunting Shop",terms:""},"shop/interior_decoration":{name:"Interior Decoration Store",terms:""},"shop/jewelry":{name:"Jeweler",terms:"diamond,gem,ring"},"shop/kiosk":{name:"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_repair":{name:"Motorcycle Repair Shop",terms:"auto,bike,garage,motorcycle,repair,service"},"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,outfitter,outdoor equipment,outdoor supplies"},"shop/paint":{name:"Paint Store",terms:""},"shop/party":{name:"Party Supply Store",terms:"balloons,costumes,decorations,invitations"},"shop/pastry":{name:"Pastry Shop",terms:"patisserie,cake shop,cakery"},"shop/pawnbroker":{name:"Pawn Shop",terms:""},"shop/perfumery":{name:"Perfume Store",terms:""},"shop/pet_grooming":{name:"Pet Grooming Store",terms:"dog"},"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:"diving,scuba"},"shop/seafood":{name:"Seafood Shop",terms:"fishmonger"},"shop/second_hand":{name:"Consignment/Thrift Store",terms:"secondhand,second hand,resale,thrift,used"},"shop/sewing":{name:"Sewing Supply Shop",terms:"haberdashery"},"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/tiles":{name:"Tile Shop",terms:""},"shop/tobacco":{name:"Tobacco Shop",terms:""},"shop/toys":{name:"Toy Store",terms:""},"shop/trade":{name:"Trade Shop",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/water":{name:"Drinking Water Shop",terms:""},"shop/weapons":{name:"Weapon Shop",terms:"ammo,gun,knife,knives"},"shop/wholesale":{name:"Wholesale Store",terms:"warehouse club,cash and carry"},"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:"climbing hut"},"tourism/apartment":{name:"Guest Apartment / Condo",terms:""},"tourism/aquarium":{name:"Aquarium",terms:"fish,sea,water"},"tourism/artwork":{name:"Artwork",terms:"mural,sculpture,statue"},"tourism/artwork/mural":{name:"Mural",terms:"fresco,wall painting"},"tourism/artwork/sculpture":{name:"Sculpture",terms:"statue,figure,carving"},"tourism/artwork/statue":{name:"Statue",terms:"sculpture,figure,carving"},"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:"Holiday Cottage",terms:"holiday,holiday cottage,holiday home,vacation,vacation home"},"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:"signpost"},"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/trail_riding_station":{name:"Trail Riding Station",terms:""},"tourism/viewpoint":{name:"Viewpoint",terms:""},"tourism/wilderness_hut":{name:"Wilderness Hut",terms:"wilderness hut,backcountry hut,bothy"},"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:"Speed Table",terms:"flat top,hump,speed,slow"},traffic_sign_vertex:{name:"Traffic Sign",terms:"road,highway"},traffic_sign:{name:"Traffic Sign",terms:"road,highway"},"traffic_sign/city_limit_vertex":{name:"City Limit Sign",terms:"town,village,hamlet,boundary,edge,border,road,highway"},"traffic_sign/city_limit":{name:"City Limit Sign",terms:"town,village,hamlet,boundary,edge,border,road,highway"},"traffic_sign/maxspeed_vertex":{name:"Speed Limit Sign",terms:"max speed,maximum speed,road,highway"},"traffic_sign/maxspeed":{name:"Speed Limit Sign",terms:"max speed,maximum speed,road,highway"},"type/multipolygon":{name:"Multipolygon",terms:""},"type/boundary":{name:"Boundary",terms:""},"type/boundary/administrative":{name:"Administrative Boundary",terms:""},"type/enforcement":{name:"Enforcement",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:"Only Left Turn",terms:""},"type/restriction/only_right_turn":{name:"Only Right Turn",terms:""},"type/restriction/only_straight_on":{name:"Only Straight On",terms:""},"type/restriction/only_u_turn":{name:"Only U-turn",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/light_rail":{name:"Light Rail Route",terms:""},"type/route/pipeline":{name:"Pipeline Route",terms:""},"type/route/piste":{name:"Piste/Ski Route",terms:""},"type/route/power":{name:"Power Route",terms:""},"type/route/road":{name:"Road Route",terms:""},"type/route/subway":{name:"Subway Route",terms:""},"type/route/train":{name:"Train Route",terms:""},"type/route/tram":{name:"Tram Route",terms:""},"type/site":{name:"Site",terms:""},"type/waterway":{name:"Waterway",terms:""},vertex:{name:"Other",terms:""},"waterway/riverbank":{name:"Riverbank",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/milestone":{name:"Waterway Milestone",terms:"milestone,marker"},"waterway/river":{name:"River",terms:"beck,branch,brook,course,creek,estuary,rill,rivulet,run,runnel,stream,tributary,watercourse"},"waterway/sanitary_dump_station":{name:"Marine Toilet Disposal",terms:"Boat,Watercraft,Sanitary,Dump Station,Pumpout,Pump out,Elsan,CDP,CTDP,Chemical Toilet"},"waterway/stream_intermittent":{name:"Intermittent Stream",terms:"arroyo,beck,branch,brook,burn,course,creek,drift,flood,flow,gully,run,runnel,rush,spate,spritz,tributary,wadi,wash,watercourse"},"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:""}}},imagery:{AGIV:{attribution:{text:"Orthophoto Flanders most recent © AGIV"},name:"AGIV Flanders most recent aerial imagery"},AGIV10cm:{attribution:{text:"Orthophoto Flanders © AGIV"},name:"AGIV Flanders 2013-2015 aerial imagery 10cm"},AGIVFlandersGRB:{attribution:{text:"GRB Flanders © AGIV"},name:"AGIV Flanders GRB"},Bing:{description:"Satellite and aerial imagery.",name:"Bing aerial imagery"},"DigitalGlobe-Premium":{attribution:{text:"Terms & Feedback"},description:"DigitalGlobe-Premium is a mosaic composed of DigitalGlobe basemap with select regions filled with +Vivid or custom area of interest imagery, 50cm resolution or better, and refreshed more frequently with ongoing updates.",name:"DigitalGlobe Premium Imagery"},"DigitalGlobe-Premium-vintage":{attribution:{text:"Terms & Feedback"},description:"Imagery boundaries and capture dates. Labels appear at zoom level 13 and higher.",name:"DigitalGlobe Premium Imagery Vintage"},"DigitalGlobe-Standard":{attribution:{text:"Terms & Feedback"},description:"DigitalGlobe-Standard is a curated set of imagery covering 86% of the earth’s landmass, with 30-60cm resolution where available, backfilled by Landsat. Average age is 2.31 years, with some areas updated 2x per year.",name:"DigitalGlobe Standard Imagery"},"DigitalGlobe-Standard-vintage":{attribution:{text:"Terms & Feedback"},description:"Imagery boundaries and capture dates. Labels appear at zoom level 13 and higher.",name:"DigitalGlobe Standard Imagery Vintage"},EsriWorldImagery:{attribution:{text:"Terms & Feedback"},description:"Esri world imagery.",name:"Esri World Imagery"},EsriWorldImageryClarity:{attribution:{text:"Terms & Feedback"},description:"Esri archive imagery that may be clearer and more accurate than the default layer.",name:"Esri World Imagery (Clarity) Beta"},MAPNIK:{attribution:{text:"© OpenStreetMap contributors, CC-BY-SA"},description:"The default OpenStreetMap layer.",name:"OpenStreetMap (Standard)"},Mapbox:{attribution:{text:"Terms & Feedback"},description:"Satellite and aerial imagery.",name:"Mapbox Satellite"},"OSM_Inspector-Addresses":{attribution:{text:"© Geofabrik GmbH, OpenStreetMap contributors, CC-BY-SA"},name:"OSM Inspector: Addresses"},"OSM_Inspector-Geometry":{attribution:{text:"© Geofabrik GmbH, OpenStreetMap contributors, CC-BY-SA"},name:"OSM Inspector: Geometry"},"OSM_Inspector-Highways":{attribution:{text:"© Geofabrik GmbH, OpenStreetMap contributors, CC-BY-SA"},name:"OSM Inspector: Highways"},"OSM_Inspector-Multipolygon":{attribution:{text:"© Geofabrik GmbH, OpenStreetMap contributors, CC-BY-SA"},name:"OSM Inspector: Area"},"OSM_Inspector-Places":{attribution:{text:"© Geofabrik GmbH, OpenStreetMap contributors, CC-BY-SA"},name:"OSM Inspector: Places"},"OSM_Inspector-Routing":{attribution:{text:"© Geofabrik GmbH, OpenStreetMap contributors, CC-BY-SA"},name:"OSM Inspector: Routing"},"OSM_Inspector-Tagging":{attribution:{text:"© Geofabrik GmbH, OpenStreetMap contributors, CC-BY-SA"},name:"OSM Inspector: Tagging"},SPW_ORTHO_LAST:{name:"SPW(allonie) most recent aerial imagery"},SPW_PICC:{name:"SPW(allonie) PICC numerical imagery"},"US-TIGER-Roads-2014":{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",name:"TIGER Roads 2014"},"US-TIGER-Roads-2017":{description:"Yellow = Public domain map data from the US Census. Red = Data not found in OpenStreetMap",name:"TIGER Roads 2017"},"US-TIGER-Roads-2018":{description:"Yellow = Public domain map data from the US Census. Red = Data not found in OpenStreetMap",name:"TIGER Roads 2018"},US_Forest_Service_roads_overlay:{description:"Highway: Green casing = unclassified. Brown casing = track. Surface: gravel = light brown fill, Asphalt = black, paved = gray, ground =white, concrete = blue, grass = green. Seasonal = white bars",name:"U.S. Forest Roads Overlay"},UrbISOrtho2016:{attribution:{text:"Realized by means of Brussels UrbIS®© - Distribution & Copyright CIRB"},name:"UrbIS-Ortho 2016"},UrbISOrtho2017:{attribution:{text:"Realized by means of Brussels UrbIS®© - Distribution & Copyright CIRB"},name:"UrbIS-Ortho 2017"},UrbISOrtho2018:{attribution:{text:"Realized by means of Brussels UrbIS®© - Distribution & Copyright CIRB"},name:"UrbIS-Ortho 2018"},UrbisAdmFR:{attribution:{text:"Realized by means of Brussels UrbIS®© - Distribution & Copyright CIRB"},name:"UrbisAdm FR"},UrbisAdmNL:{attribution:{text:"Realized by means of Brussels UrbIS®© - Distribution & Copyright CIRB"},name:"UrbisAdm NL"},"Waymarked_Trails-Cycling":{attribution:{text:"© waymarkedtrails.org, OpenStreetMap contributors, CC by-SA 3.0"},name:"Waymarked Trails: Cycling"},"Waymarked_Trails-Hiking":{attribution:{text:"© waymarkedtrails.org, OpenStreetMap contributors, CC by-SA 3.0"},name:"Waymarked Trails: Hiking"},"Waymarked_Trails-MTB":{attribution:{text:"© waymarkedtrails.org, OpenStreetMap contributors, CC by-SA 3.0"},name:"Waymarked Trails: MTB"},"Waymarked_Trails-Skating":{attribution:{text:"© waymarkedtrails.org, OpenStreetMap contributors, CC by-SA 3.0"},name:"Waymarked Trails: Skating"},"Waymarked_Trails-Winter_Sports":{attribution:{text:"© waymarkedtrails.org, OpenStreetMap contributors, CC by-SA 3.0"},name:"Waymarked Trails: Winter Sports"},"basemap.at":{attribution:{text:"basemap.at"},description:"Basemap of Austria, based on government data.",name:"basemap.at"},"basemap.at-orthofoto":{attribution:{text:"basemap.at"},description:"Orthofoto layer provided by basemap.at. \"Successor\" of geoimage.at imagery.",name:"basemap.at Orthofoto"},"eufar-balaton":{attribution:{text:"EUFAR Balaton ortofotó 2010"},description:"1940 geo-tagged photography from Balaton Limnological Institute.",name:"EUFAR Balaton orthophotos"},"finds.jp_KBN_2500":{attribution:{text:"GSI KIBAN 2500"},description:"GSI Kiban 2500 via finds.jp. Good for tracing, but a bit older.",name:"Japan GSI KIBAN 2500"},"gsi.go.jp":{attribution:{text:"GSI Japan"},description:"Japan GSI ortho Imagery. Usually better than bing, but a bit older.",name:"Japan GSI ortho Imagery"},"gsi.go.jp_airphoto":{attribution:{text:"GSI Japan"},description:"Japan GSI airphoto Imagery. Not fully orthorectified, but a bit newer and/or differently covered than GSI ortho Imagery.",name:"Japan GSI airphoto Imagery"},"gsi.go.jp_std_map":{attribution:{text:"GSI Japan"},description:"Japan GSI Standard Map. Widely covered.",name:"Japan GSI Standard Map"},"helsingborg-orto":{attribution:{text:"© Helsingborg municipality"},description:"Orthophotos from the municipality of Helsingborg 2016, public domain",name:"Helsingborg Orthophoto"},"kalmar-orto-2014":{attribution:{text:"© Kalmar municipality"},description:"Orthophotos for the north coast of the municipality of Kalmar 2014",name:"Kalmar North Orthophoto 2014"},"kalmar-orto-2016":{attribution:{text:"© Kalmar municipality"},description:"Orthophotos for the south coast of the municipality of Kalmar 2016",name:"Kalmar South Orthophoto 2016"},"kalmar-orto-2018":{attribution:{text:"© Kalmar municipality"},description:"Orthophotos for urban areas of the municipality of Kalmar 2018",name:"Kalmar Urban Orthophoto 2018"},kelkkareitit:{attribution:{text:"© Kelkkareitit.fi"},description:"Kelkkareitit.fi snowmobile trails from OSM (Nordic coverage)",name:"Nordic snowmobile overlay"},"lantmateriet-orto1960":{attribution:{text:"© Lantmäteriet, CC0"},description:"Mosaic of Swedish orthophotos from the period 1955–1965. Older and younger pictures may occur.",name:"Lantmäteriet Historic Orthophoto 1960"},"lantmateriet-orto1975":{attribution:{text:"© Lantmäteriet, CC0"},description:"Mosaic of Swedish orthophotos from the period 1970–1980. Is under construction.",name:"Lantmäteriet Historic Orthophoto 1975"},"lantmateriet-topowebb":{attribution:{text:"© Lantmäteriet, CC0"},description:"Topographic map of Sweden 1:50 000",name:"Lantmäteriet Topographic Map"},"linkoping-orto":{attribution:{text:"© Linköping municipality"},description:"Orthophotos from the municipality of Linköping 2010, open data",name:"Linköping Orthophoto"},mapbox_locator_overlay:{attribution:{text:"Terms & Feedback"},description:"Shows major features to help orient you.",name:"Locator Overlay"},openpt_map:{attribution:{text:"© OpenStreetMap contributors, CC-BY-SA"},name:"OpenPT Map (overlay)"},"osm-gps":{attribution:{text:"© OpenStreetMap contributors"},description:"Public GPS traces uploaded to OpenStreetMap.",name:"OpenStreetMap GPS traces"},"osm-mapnik-black_and_white":{attribution:{text:"© OpenStreetMap contributors, CC-BY-SA"},name:"OpenStreetMap (Standard Black & White)"},"osm-mapnik-german_style":{attribution:{text:"© OpenStreetMap contributors, CC-BY-SA"},name:"OpenStreetMap (German Style)"},"osmse-ekonomiska":{attribution:{text:"© Lantmäteriet"},description:"Scan of \"Economic maps\" ca. 1950–1980",name:"Lantmäteriet Economic Map 1950–1980"},qa_no_address:{attribution:{text:"Simon Poole, Data ©OpenStreetMap contributors"},name:"QA No Address"},skobbler:{attribution:{text:"© Tiles: skobbler Map data: OpenStreetMap contributors"},name:"skobbler"},skoterleder:{attribution:{text:"© Skoterleder.org"},description:"Snowmobile trails",name:"Snowmobile map Sweden"},"stamen-terrain-background":{attribution:{text:"Map tiles by Stamen Design, under CC BY 3.0. Data by OpenStreetMap, under ODbL"},name:"Stamen Terrain"},"stockholm-orto":{attribution:{text:"© Stockholm municipality, CC0"},description:"Orthophotos from the municipality of Stockholm 2015, CC0 license",name:"Stockholm Orthophoto"},"tf-cycle":{attribution:{text:"Maps © Thunderforest, Data © OpenStreetMap contributors"},name:"Thunderforest OpenCycleMap"},"tf-landscape":{attribution:{text:"Maps © Thunderforest, Data © OpenStreetMap contributors"},name:"Thunderforest Landscape"},"trafikverket-baninfo":{attribution:{text:"© Trafikverket, CC0"},description:"Swedish railway network, including sidings",name:"Trafikverket Railway Network"},"trafikverket-baninfo-option":{attribution:{text:"© Trafikverket, CC0"},description:"Swedish railway network with several options for map layers",name:"Trafikverket Railway Network options"},"trafikverket-vagnat":{attribution:{text:"© Trafikverket, CC0"},description:"Swedish NVDB road network",name:"Trafikverket Road Network"},"trafikverket-vagnat-extra":{attribution:{text:"© Trafikverket, CC0"},description:"Swedish NVDB extra details: Highway reference, traffic calming, rest area, bus stop, bridge, tunnel, speed camera",name:"Trafikverket Road Network extra"},"trafikverket-vagnat-navn":{attribution:{text:"© Trafikverket, CC0"},description:"Swedish NVDB street names",name:"Trafikverket Street Names"},"trafikverket-vagnat-option":{attribution:{text:"© Trafikverket, CC0"},description:"Swedish NVDB road network with several options for map layers",name:"Trafikverket Road Network options"}},community:{"bw-facebook":{name:"Mapping Botswana on Facebook",description:"Page of OpenStreetMap in Botswana"},"bw-twitter":{name:"Mapping Botswana on Twitter",description:"Twitter of OpenStreetMap in Botswana"},"cape-coast-youthmappers":{name:"University of Cape Coast YouthMappers",description:"Follow us on Twitter: {url}",extendedDescription:"This is the official handle for the Youth Mappers chapter of the University of Cape Coast, Ghana. we love maps, open data and helping the vulnerable."},"osm-gh-facebook":{name:"OpenStreetMap Ghana on Facebook",description:"Facebook group for people interested in OpenStreetMap.",extendedDescription:"Mappers in Ghana community, promoting OpenStreetMap and Humanitarian OpenStreetMap Team (HOT) projects in Ghana. Join us."},"osm-gh-twitter":{name:"OpenStreetMap Ghana on Twitter",description:"Follow us on Twitter: {url}"},"talk-gh":{name:"Talk-gh Mailing List",description:"Talk-gh is the official mailing list for Ghana OSM community."},"osm-mg-facebook":{name:"OpenStreetMap Madagascar Facebook Group",description:"Malagasy Facebook group for people interested in OpenStreetMap."},"talk-mg":{name:"Talk-mg Mailing List",description:"Place for OpenStreetMap contributors, communities and users in Madagascar to share and discuss."},"OSM-BGD-facebook":{name:"OpenStreetMap Bangladesh",description:"Improve OpenStreetMap in Bangladesh",extendedDescription:"Mapping in Bangladesh? Have questions, want to connect with the community here? Join us at {url}. All are welcome!"},"OSM-India-facebook":{name:"OpenStreetMap India - Participatory neighborhood mapping",description:"Improve OpenStreetMap in India",extendedDescription:"Mapping in India? Have questions, want to connect with the community here? Join us at {url}. All are welcome!",events:{sotmasia2018:{name:"State of the Map Asia 2018",description:"Join the 2018 OpenStreetMap region-wide event at State of the Map Asia in India",where:"Indian Institute of Management, Bangalore, India"}}},"osm-india-forum":{name:"OpenStreetMap India forum",description:"OpenStreetMap India web forum"},"osm-india-github":{name:"OpenStreetMap India GitHub",description:"Code with us: {url}"},"OSM-india-mailinglist":{name:"OpenStreetMap India Mailinglist",description:"Talk-in is the official Mailinglist for Indian Community"},"osm-india-telegram":{name:"OpenStreetMap India Telegram",description:"Join our family: {url}"},"OSM-india-twitter":{name:"OpenStreetMap India Twitter",description:"We are just a tweet away: {url}"},"osm-india-website":{name:"OpenStreetMap India",description:"Mappers and OpenStreetMap users in India"},"osm-india-wiki":{name:"OpenStreetMap Wikiproject India",description:"Everything you need to know about mapping in India: {url}"},"osm-india-youtube":{name:"OpenStreetMap India Youtube",description:"Subscribe to our channel: {url}"},"OSM-India-Puducherry-Facebook":{name:"Free Software Hardware Movement - Facebook",description:"FSHM Facebook page to know about community events, activities",extendedDescription:"FSHM organizes events relating to free software/hardware, technology, activism and OpenStreetMap. Its FB page is the best way to keep in contact with its events."},"OSM-Puducherry-Mailing-List":{name:"Free Software Hardware Movement - Mailing List",description:"FSHM Puducherry mailing list to discuss mapping in Puducherry and other things.",extendedDescription:"FSHM organizes events relating to free software/hardware, technology, activism and OpenStreetMap."},"OSM-India-Puducherry-Matrix":{name:"Free Software Hardware Movement - Matrix",description:"FSHM Riot group to discuss, share and update mapping activities, events in and around Puducherry",extendedDescription:"FSHM community members share their OSM mapping updates / experiences through the Riot.im group, this group is also used to discuss things related to free software / hardware, technology and activism."},"OSM-IDN-facebook":{name:"OpenStreetMap Indonesia",description:"Improve OpenStreetMap in Indonesia",extendedDescription:"Mapping in Indonesia? Have questions, want to connect with the community here? Join us at {Url}. All are welcome!"},"osm-iran-aparat":{name:"OpenStreetMap Iran Aparat",description:"Subscribe to our channel at {url}",extendedDescription:"A good resource of videos about anything related to OpenStreetMap. Mainly in Persian."},"osm-iran-forum":{name:"OpenStreetMap Iran web forum",description:"OpenStreetMap Iran web forum",extendedDescription:"A web forum for OpenStreetMap users in Iran. Feel free to ask questions and discuss with others!"},"osm-iran-telegram":{name:"OpenStreetMap Iran Telegram",description:"You're welcome to join our Telegram channel at {url}. We also have a supergroup of many OSMers interested in Iran. Find its link in bio of channel."},"OSM-japan-facebook":{name:"OpenStreetMap Japan Community",description:"Mappers and OpenStreetMap users in Japan"},"OSM-japan-mailinglist":{name:"OpenStreetMap Japan Mailinglist",description:"Talk-ja is an Official Mailinglist for Japanese Community"},"OSM-japan-twitter":{name:"OpenStreetMap Japan Twitter",description:"Hashtag on Twitter: {url}"},"OSM-japan-website":{name:"OpenStreetMap Japan",description:"Mappers and OpenStreetMap users in Japan"},"OSM-MY-facebook":{name:"OpenStreetMap Malaysia on Facebook",description:"For chat about anything related to OpenStreetMap!"},"OSM-MY-forum":{name:"OpenStreetMap Malaysia Forum",description:"Official OpenStreetMap Malaysia Forum"},"OSM-MY-matrix":{name:"OpenStreetMap Malaysia Riot channel",description:"All mappers are welcome! Sign up at {signupUrl}"},"OSM-MNG-facebook":{name:"OpenStreetMap Mongolia",description:"Improve OpenStreetMap in Mongolia",extendedDescription:"Mapping in Mongolia? Have questions, want to connect with the community here? Join us at {Url}. All are welcome!"},"OSM-MMR-facebook":{name:"OpenStreetMap Myanmar",description:"Improve OpenStreetMap in Myanmar",extendedDescription:"Mapping in Myanmar? Have questions, want to connect with the community here? Join us at {Url}. All are welcome!"},"OSM-Nepal-facebook":{name:"OpenStreetMap Nepal",description:"Improve OpenStreetMap in Nepal",extendedDescription:"Mapping in Nepal? Have questions, want to connect with the community here? Join us at {Url}. All are welcome!"},"OSM-Asia-mailinglist":{name:"OpenStreetMap Asia Mailinglist",description:"Talk-asia is the official Mailinglist for Asian Community"},"osm-asia-telegram":{name:"OpenStreetMap Asia Telegram",description:"Join our family: {url}"},"OSM-PH-facebook":{name:"OpenStreetMap PH Facebook",description:"Welcome to OpenStreetMap Philippines, where we encourage all fellow Filipinos to contribute to the OpenStreetMap project."},"OSM-PH-mailinglist":{name:"Talk-ph Mailing List",description:"A mailing list to discuss OpenStreetMap in the Philippines"},"OSM-PH-slack":{name:"OpenStreetMap PH Slack",description:"All are welcome! Sign up at {signupUrl}"},"OSM-PH-telegram":{name:"OpenStreetMap PH Telegram",description:"Un-official, Telegram local community of OpenStreetMap contributors and friends in the Philippines"},"OSM-RU-forum":{name:"OpenStreetMap RU forum",description:"OpenStreetMap Russia web forum"},"OSM-RU-telegram":{name:"OpenStreetMap RU telegram",description:"OpenStreetMap Russia telegram chat"},"OSM-south-korea-telegram":{name:"OSM South Korea Telegram",description:"Unofficial Channnel for OpenStreetMap contributors, communities, and users in South Korea to share and discuss."},"OSM-sri-lanka-facebook":{name:"OpenStreetMap Sri Lanka",description:"Improve OpenStreetMap in Sri Lanka",extendedDescription:"Mapping in Sri Lanka? Have questions, want to connect with the community here? Join us at {Url}. All are welcome!"},"OSM-TW-facebook":{name:"OpenStreetMap Taiwan Community",description:"Facebook Group for Mappers and OpenStreetMap users to discuss matters about Taiwan."},"OSM-TW-mailinglist":{name:"OpenStreetMap Taiwan Mailinglist",description:"Talk-tw is an Official Mailinglist for the Communities to dicuss matters about Taiwan"},"OSM-TH-CNX-meetup":{name:"OSM Meetup Chiang Mai",description:"Irregular meeting of the OpenStreetMap community in Chiang Mai",extendedDescription:"Members of the OpenStreetMap community meet every few months in Chiang Mai. Get in contact and check out {url} to see when the next meetup is scheduled"},"OSM-TH-facebook":{name:"OpenStreetMap TH Facebook group",description:"Facebook group for OpenStreetMappers in Thailand"},"OSM-TH-forum":{name:"OpenStreetMap TH forum",description:"OpenStreetMap Thailand web forum"},"al-forum":{name:"OSM Albania Forum",description:"OpenStreetMap Albania Forum"},"al-maptime-tirana":{name:"Maptime Tirana",description:"Social events organized around mapping - beginners most welcome!",extendedDescription:"Maptime is an open learning environment for all levels and degrees of knowledge, offering intentional educational support for the beginner. Maptime is simultaneously flexible and structured, creating space for mapping tutorials, workshops, ongoing projects with a shared goal, and independent/collaborative work time."},"al-telegram":{name:"OSM Albania Telegram channel",description:"OpenStreetMap Albania Telegram channel"},"at-forum":{name:"OpenStreetMap Austria Forum",description:"The official forum for OpenStreetMap questions in and around Austria"},"at-mailinglist":{name:"Talk-at Mailing List",description:"Talk-at is the official mailing list for the Austrian OSM community"},"at-twitter":{name:"OpenStreetMap Austria Twitter",description:"OpenStreetMap Austria On Twitter: {url}"},"osmgraz-meetup":{name:"OSM community meetup Graz",description:"Monthly meetup of the OpenStreetMap community in Graz"},"osmgraz-twitter":{name:"OSM community Graz on twitter",description:"OpenStreetMap community in Graz on twitter"},"osm-at":{name:"OpenStreetMap Austria",description:"The platform for information on OpenStreetMap in Austria"},byosm:{name:"OpenStreetMap Belarus",description:"OpenStreetMap Belarus telegram chat"},"be-facebook":{name:"OpenStreetMap BE Community",description:"Mappers and OpenStreetMap on Facebook in Belgium"},"be-forum":{name:"OpenStreetMap BE forum",description:"OpenStreetMap Belgium web forum"},"be-irc":{name:"OpenStreetMap Belgium IRC",description:"Join #osmbe on irc.oftc.net (port 6667)",extendedDescription:"Join #osmbe on irc.oftc.net (port 6667), it is bridged with the Matrix chat channel"},"be-mailinglist":{name:"Talk-be Mailing List",description:"Talk-be is the official mailing list for the Belgian OSM community"},"be-matrix":{name:"OpenStreetMap BE Matrix channel",description:"All mappers are welcome!",extendedDescription:"Most talk is happening at the \"OpenStreetMap Belgium\" channel. You can ask anything there! The other rooms are for specific subjects."},"be-meetup":{name:"OpenStreetMap Belgium Meetup",description:"Real life meetups of everyone who is interested in OpenStreetMap",extendedDescription:"Physical meetups are great to meet other mappers, ask them questions and to learn a lot. Especially new contributors are very welcome!"},"be-twitter":{name:"OpenStreetMap Belgium Twitter",description:"OSM Belgium on Twitter: @osm_be"},"hr-facebook":{name:"OpenStreetMap Croatia Facebook group",description:"OpenStreetMap Croatia Facebook group"},"hr-irc":{name:"OpenStreetMap Croatia on IRC",description:"Join #osm-hr on irc.freenode.org (port 6667)"},"hr-mailinglist":{name:"Talk-hr Mailing List",description:"Talk-hr mailing list"},"czech-community":{name:"Czech OSM community",description:"Map portal, website and contacts on OSM members in Czechia"},"osmcz-facebook":{name:"OpenStreetMap CZ on Facebook",description:"Follow czech community on Facebook - including translated WeeklyOSM!"},"osmcz-twitter":{name:"Czech twitter @osmcz",description:"Follow czech community on Twitter - including translated WeeklyOSM!"},"talk-cz-mailinglist":{name:"Czech mailing list (talk-cz)",description:"Talk-cz is the official mailing list for Czech community"},"dk-forum":{name:"OpenStreetMap Denmark Web Forum",description:"OpenStreetMap Denmark web forum"},"dk-irc":{name:"OpenStreetMap Denmark IRC",description:"Join #osm-dk on irc.oftc.net (port 6667)"},"dk-mailinglist":{name:"Talk-dk Mailing List",description:"A mailing list to discuss OpenStreetMap in Denmark"},"fi-forum":{name:"OpenStreetMap FI forum",description:"OpenStreetMap Finland web forum"},"fi-irc":{name:"OpenStreetMap Finland IRC",description:"Join #osm-fi on irc.oftc.net (port 6667)"},"fi-mailinglist":{name:"Talk-fi Mailing List",description:"Talk-fi is the official mailing list for the Finnish OSM community"},"fr-facebook":{name:"OpenStreetMap France Facebook page",description:"OpenStreetMap France Facebook page"},"fr-forum":{name:"OpenStreetMap France web forum",description:"OpenStreetMap France web forum"},"fr-irc":{name:"OpenStreetMap France on IRC",description:"Join #osm-fr on irc.oftc.net (port 6667)"},"fr-mailinglist":{name:"Talk-fr Mailing List",description:"Talk-fr mailing list"},"fr-twitter":{name:"OpenStreetMap France on Twitter",description:"OpenStreetMap France on Twitter: {url}"},"de-berlin-mailinglist":{name:"Berlin Mailing List",description:"This is the mailing list for the Berlin OSM community"},"de-berlin-meetup":{name:"OpenStreetMap Berlin-Brandenburg Meetup",description:"Mappers and OpenStreetMap users in the Berlin area"},"de-berlin-telegram":{name:"@osmberlin on Telegram",description:"OpenStreetMap Berlin Telegram chat"},"de-berlin-twitter":{name:"OpenStreetMap Berlin Twitter",description:"Follow us on Twitter: {url}"},"de-forum":{name:"OpenStreetMap DE forum",description:"OpenStreetMap Germany web forum"},"de-irc":{name:"OpenStreetMap Germany IRC",description:"Join #osm-de on irc.oftc.net (port 6667)"},"de-mailinglist":{name:"Talk-de Mailing List",description:"Talk-de is the official mailing list for the German OSM community"},"de-ostwestfalen-lippe-mailinglist":{name:"OWL Mailing List",description:"This is the mailing list for the Ostwestfalen-Lippe OSM community"},"de-telegram":{name:"OpenStreetMap Germany Telegram",description:"Join the OpenStreetMap Germany Telegram supergroup at {url}"},"osm-de":{name:"OpenStreetMap Germany",description:"The platform for information on OpenStreetMap in Germany"},"hu-facebook":{name:"OpenStreetMap HU on Facebook",description:"Mappers and OpenStreetMap Facebook in Hungary"},"hu-forum":{name:"OpenStreetMap HU forum",description:"OpenStreetMap Hungary web forum"},"hu-meetup":{name:"OpenStreetMap Hungary Meetup",description:"The platform for organizing meetups in Hungary"},"is-facebook":{name:"OSM Iceland on Facebook",description:"Page of OpenStreetMap in Iceland"},"is-mailinglist":{name:"Talk-is Mailing List",description:"Talk-is is the official mailing list for the Icelandic OSM community"},"is-twitter":{name:"OSM Iceland on Twittter",description:"Twitter of OpenStreetMap in Iceland"},"it-facebook":{name:"OpenStreetMap Italy Facebook",description:"Join the OpenStreetMap Italy community on Facebook"},"it-irc":{name:"OpenStreetMap Italy IRC",description:"Join #osm-it on irc.oftc.net (port 6667)"},"it-mailinglist":{name:"Talk-it Mailing List",description:"Talk-it is the official mailing list for the Italian OSM community"},"it-telegram":{name:"@OpenStreetMapItalia on Telegram",description:"OpenStreetMap Italy Telegram chat"},"it-twitter":{name:"OpenStreetMap Italy Twitter",description:"Follow us on Twitter at {url}"},"OSM-Rome-meetup":{name:"Incontro Mappatori Romani",description:"Improve OpenStreetMap in the Rome area",extendedDescription:"We aim to be a resource for people to discuss and share knowledge on utilizing free geographic data sets especially OpenStreetMap, and Open geo-spatial software that manages, edits, and displays geographic data, and advocate for its use in Lazio."},"South-Tyrol-Mailing-List":{name:"OpenStreetMap mailing list for South Tyrol",description:"OpenStreetMap Italy regional talk list for South Tyrol"},"talk-it-lazio":{name:"OpenStreetMap IT Lazio",description:"All are welcome! Sign up at {signupUrl}",extendedDescription:"Mailinglist for Rome and Lazio area."},"Trentino-Mailing-List":{name:"OpenStreetMap mailing list for Trentino",description:"OpenStreetMap Italy regional talk list for Trentino"},"kosovo-telegram":{name:"OpenStreetMap Kosovo on Telegram",description:"Semi-official all-Kosovo Telegram public group. We welcome all mappers from anywhere in any language."},"no-forum":{name:"OpenStreetMap Norway Web Forum",description:"OpenStreetMap Norway web forum"},"no-irc":{name:"OpenStreetMap Norway on IRC",description:"Chat room for mappers and OpenStreetMap users, developers and enthusiasts in Norway"},"no-mailinglist":{name:"OpenStreetMap Norway mailing list",description:"Mailing list for mappers and OpenStreetMap users, developers and enthusiasts in Norway"},"no-telegram":{name:"@OSM_no on Telegram",description:"OpenStreetMap Norway Telegram chat"},"OSM-PL-facebook-group":{name:"OpenStreetMap Poland Facebook group",description:"Group for mappers and users of OpenStreetMap in Poland"},"OSM-PL-forum":{name:"OpenStreetMap Poland Forum",description:"Forum of Polish OpenStreetMap community"},"si-forum":{name:"OpenStreetMap Slovenia Forum",description:"Forum of OpenStreetMap community in Slovenia"},"si-mailinglist":{name:"OpenStreetMap Slovenia mailing list",description:"Mailing list of OpenStreetMap community in Slovenia"},"OSM-ES-mailinglist":{name:"Talk-es mailing list",description:"A mailing list to discuss OpenStreetMap in Spain"},"OSM-ES-telegram":{name:"@OSMes on Telegram",description:"OpenStreetMap Spain Telegram chat"},"osm-se":{name:"OpenStreetMap.se",description:"Provide OSM services and information for the local community in Sweden"},"se-facebook":{name:"OpenStreetMap Sweden Facebook",description:"OpenStreetMap Sweden on Facebook"},"se-forum":{name:"OpenStreetMap Sweden Web Forum",description:"OpenStreetMap Sweden web forum"},"se-irc":{name:"OpenStreetMap Sweden IRC",description:"Join #osm.se on irc.oftc.net (port 6667)"},"se-mailinglist":{name:"Talk-se Mailing List",description:"A mailing list to discuss OpenStreetMap in Sweden"},"se-twitter":{name:"OpenStreetMap Sweden on Twitter",description:"Follow us on Twitter: {url}"},"Nottingham-OSM-pub-meetup":{name:"East Midlands (Nottingham) Monthly pub meet-up",description:"Social gathering for East Midlands mappers and users",extendedDescription:"A group have been meeting since March 2011, initially in Nottingham, and, more recently in Derby, and from time to time elsewhere in the East Midlands. These are social gatherings, but are an excellent place to come and ask specific questions about OSM either in the area or in general. In the summer months we usually do some light mapping for an hour in the vicinity of our meeting place. The group as a whole has a special interest in mapping public rights of way and from time to time has mapping meetings for this purpose."},"gb-mailinglist":{name:"Talk-gb Mailing List",description:"Talk-gb is the main communication forum list for the British (including Northern Ireland) OSM community"},"mappa-mercia-group":{name:"Mappa Mercia local group",description:"A home for OpenStreetMap enthusiasts in the Midlands",extendedDescription:"Mappa Mercia is a project to grow OpenStreetMap in the West Midlands, UK. We run community events, provide training and support local organisations wishing to open up their data."},"gb-irc":{name:"OpenStreetMap United Kingdom IRC",description:"Join #osm-gb on irc.oftc.net (port 6667)",extendedDescription:"Join #osm-gb on irc.oftc.net (port 6667), please be patient and wait for a few minutes if you ask a question"},"OSM-CA-Slack":{name:"OSM-CA Slack",description:"All are welcome! Sign up at {signupUrl}."},"OSM-Vancouver-meetup":{name:"OpenStreetMap Vancouver",description:"Mappers and OpenStreetMap users in the Vancouver, BC area"},"OSM-CU-telegram":{name:"OSM Cuba on Telegram",description:"OpenStreetMap Cuba Telegram chat"},"OSM-NI-telegram":{name:"OSM Nicaragua on Telegram",description:"OpenStreetMap Nicaragua Telegram chat"},"Bay-Area-OpenStreetMappers":{name:"Bay Area OpenStreetMappers",description:"Improve OpenStreetMap in the Bay Area",extendedDescription:"This group is about growing the OpenStreetMap community here in the Bay Area. Our events are open to everyone, from open source enthusiasts, cyclists, GIS professionals, geocachers, and beyond. Anyone and everyone who is interested in maps, map making and free map data is welcome to join our group as well as attend our events."},"Central-Pennsylvania-OSM":{name:"Central Pennsylvania OSM",description:"Online mapping community based out of State College, PA"},"Code-for-San-Jose-Slack":{name:"Code for San Jose Slack",description:"All are welcome! Sign up at {signupUrl}, then join the #osm channel."},"Dallas-Fort-Worth-OSM":{name:"Dallas-Fort Worth OSM",description:"The OpenStreetMap user group for Dallas-Fort Worth",extendedDescription:"Dallas, Fort Worth, and all the cities in between are abounding with creative and tech-savvy people. The vision for this usergroup is to find new ways to use the amazing resource of OSM."},GeoPhilly:{name:"GeoPhilly",description:"Meetup for map enthusiasts in the Philadelphia area",extendedDescription:"GeoPhilly unites developers, geographers, data geeks, open source enthusiasts, civic hackers and map addicts in our shared love of maps and the stories they tell. If you use maps as part of your work or just want to learn more, this is the meetup for you!  Our events aim to be open, friendly, educational and social and range from happy hours to lightning talks or even workshops. Come create a diverse, inspiring geospatial community in the Philadelphia with us!"},MapMinnesota:{name:"MapMinnesota",description:"Mappers and OpenStreetMap enthusiasts in the Twin Cities area",extendedDescription:"Connecting OpenStreetMap enthusiasts in Minnesota and the Twin Cities!"},"Mapping-DC-meetup":{name:"Mapping DC",description:"Improve OpenStreetMap in the DC area",extendedDescription:"We are a group of volunteer mappers who aim to improve the OpenStreetMap in the DC area. We also aim to teach others about the OSM ecosystem, data analytics, cartography, and GIS. We gather every other month at meetups to focus on one area of our city."},"Maptime-ME-meetup":{name:"MaptimeME",description:"Mappers and OpenStreetMap users, around Portland, ME",extendedDescription:"Maptime is, rather literally, time for mapmaking.  Our mission is to open the doors of cartographic possibility to anyone interested by creating a time and space for collaborative learning, exploration, and map creation using mapping tools and technologies."},"MaptimeHRVA-twitter":{name:"MaptimeHRVA Twitter",description:"Follow us on Twitter at {url}"},"us-ma-mailinglist":{name:"Talk-us-massachusetts Mailing List",description:"Email mailing list for the Massachusetts OSM community"},"OpenCleveland-meetup":{name:"Open Cleveland",description:"Improve OpenStreetMap in the Cleveland area",extendedDescription:"Open Geo Cleveland aims to be a resource for people to discuss and share knowledge on utilizing free geographic data sets especially OpenStreetMap, and Open geo-spatial software that manages, edits, and displays geographic data, and advocate for its use in Northeast Ohio. We're also a maptime chapter =)"},"OSM-Boston":{name:"OpenStreetMap Boston",description:"Mappers and OpenStreetMap users in the Boston area",extendedDescription:"OpenStreetMap is the free and open, wiki-style map of the world, with hundreds of thousands of contributions every day from people like you. Editing the map is simple, and fun! Join us both indoors and outdoors in our effort to create the best map of the Boston area and the rest of the world!"},"OSM-Central-Salish-Sea":{name:"OpenStreetMap Central Salish Sea",description:"Mappers and OpenStreetMap users around Mount Vernon, WA",extendedDescription:"OpenStreetMap is an map of the world made by people like you. It's a map that you build, that's given away for free like wikipedia. Check out osm.org for more. We meet all the time to talk maps, make maps and have fun!"},"OSM-Chattanooga":{name:"OSM Chattanooga",description:"The OpenStreetMap user group for Chattanooga"},"OSM-Colorado":{name:"OpenStreetMap Colorado",description:"Mappers and OpenStreetMap users in the state of Colorado, USA",extendedDescription:"OpenStreetMap (OSM) Colorado is a local collaboration of people interested in contributing their efforts to create free maps. We encourage all of our mappers to organize or suggest mapping events throughout the state. Meetup activities can be simple social mixers, OSM basic to advanced training, or community mapping parties."},"OSM-NYC":{name:"OpenStreetMap NYC",description:"Mappers and OpenStreetMap users, developers and enthusiasts in the New York Metropolitan area"},"OSM-Portland-forum":{name:"OpenStreetMap PDX Google Group",description:"Forum and mailing list for OpenStreetMap users in the Portland area",extendedDescription:"This group is to facilitate improvements to OpenStreetMap in the Portland, Oregon area to support applications such as the Open Trip Planner."},"OSM-Portland":{name:"OpenStreetMap Portland",description:"Mappers and OpenStreetMap users in the Portland area",extendedDescription:"OpenStreetMap (OSM) is a map of the world made by people like you. It's a map that you build, that's given away for free like wikipedia. Check out osm.org for more, and come join us at a meetup to talk maps, contribute to OSM, and have fun!"},"OSM-Seattle":{name:"OpenStreetMap Seattle",description:"Mappers and OpenStreetMap users in the Seattle area"},"OSM-SoCal":{name:"OpenStreetMap Southern California",description:"Let's have some fun, contribute something to Los Angeles, and learn about mapping!",extendedDescription:"OpenStreetMap (OSM) Southern California is for anyone interested in mapping to get together to work with OpenStreetMap.  OpenStreetMap, the Wikipedia of maps, is a free open-source map of the world being created by more than 1,000,000 volunteers around the globe.  Everyone is welcome.  If you don't know OpenStreetMap, we'll teach you. If you have an idea for a mapping project or even a field trip that the group can do, great!"},"OSM-South-Bay":{name:"OSM South Bay",description:"Map Nights hosted by Code for San Jose",extendedDescription:"Code for San Jose, the local Code for America brigade, hosts monthly Map Nights on Thursday nights in downtown San José. Meet fellow South Bay mappers, help out with local mapping projects, and hear about other civic tech projects. Programming and GIS skills are not required."},"OSM-Tampa-Bay":{name:"OpenStreetMap Tampa Bay",description:"Mappers and OpenStreetMap users in the Tampa Bay area",extendedDescription:"OSM Tampa Bay group for local residents to get together and build out the definitive map of Tampa Bay with OpenStreetMap, the free and editable map of the world.  If you're into maps, data, open source, GPS, hiking, cycling, et cetera, you'll love working with OpenStreetMap -- so join in! We'll get together and map and talk about new topics once-a-month or so."},"OSM-US-Slack":{name:"OpenStreetMap US Slack",description:"All are welcome! Sign up at {signupUrl}"},"OSM-US":{name:"OpenStreetMap US",description:"We help grow and improve OpenStreetMap in the United States.",extendedDescription:"We support OpenStreetMap by holding annual conferences, providing community resources, building partnerships, and by spreading the word. Join OpenStreetMap US here: {signupUrl}",events:{sotmus2018:{name:"State of the Map US 2018",description:"Join the OpenStreetMap community at State of the Map US in Detroit, Michigan. Connect with other mappers, businesses, government agencies, and non profits, all collaborating around the free and editable map of the world.",where:"Detroit, Michigan"}}},"OSM-Utah":{name:"OpenStreetMap Utah",description:"Mappers and OpenStreetMap users in the Salt Lake City area",extendedDescription:"Activities may include things like Learn To Map workshops, mapping parties and outdoor data collection. The events will take place in the SLC area, at least initially.  We are looking for seasoned mappers as well as people new to OSM. Join and let's do some mapping!"},"OSM-Wyoming":{name:"OpenStreetMap Wyoming",description:"Mappers and OpenStreetMap users in the state of Wyoming",extendedDescription:"OpenStreetMap (OSM) Wyoming is a local collaboration of people interested in contributing their efforts to create free maps. We encourage all of our mappers to organize or suggest mapping events throughout the state. Meetup activities can be simple social mixers, OSM basic to advanced training, or community mapping parties."},"PHXGeo-meetup":{name:"PHXGeo Meetup",description:"Mappers and OpenStreetMap users in the Phoenix, AZ area",extendedDescription:"This is a meetup group for those in the Phoenix area who like maps, GIS, OpenStreetMap, cartography and anything in between."},"PHXGeo-twitter":{name:"PHXGeo Twitter",description:"Follow us on Twitter at {url}"},"Western-Slope-facebook":{name:"Western Slope OSM Facebook",description:"Mappers and OpenStreetMap users around Grand Junction, CO"},"Western-Slope-meetup":{name:"Western Slope OSM Meetup",description:"Mappers and OpenStreetMap users around Grand Junction, CO",extendedDescription:"The goal of this group is to introduce OpenStreetMap to the community, develop a community of mappers, create the most amazing geodata possible using whatever method we can and finally strategize in order to get this data out into our community. Imagine accurate trail signage! Imagine further development of bike paths! Imagine anything you want, that's the joy of OpenStreetMap!"},"Maptime-Australia-Slack":{name:"Maptime Australia Slack",description:"Sign up at {signupUrl}"},"talk-au":{name:"Talk-au Mailing List",description:"Place for Aussie mappers to chat"},"OSM-AR-facebook":{name:"OpenStreetMap Argentina Facebook",description:"Join the OpenStreetMap Argentina community on Facebook",extendedDescription:"News from the local community"},"OSM-AR-forum":{name:"OpenStreetMap Argentina web forum",description:"Join the OpenStreetMap Argentina web forum",extendedDescription:"Ideal for long or important discussions. Slow response time."},"OSM-AR-irc":{name:"OpenStreetMap Argentina IRC",description:"Join #osm-ar on irc.oftc.net (port 6667)",extendedDescription:"You may find the most geeky user in the community."},"OSM-AR-mailinglist":{name:"Talk-ar Mailing List",description:"Historic mailing list. Almost unused today."},"OSM-AR-telegram":{name:"OpenStreetMap Argentina Telegram",description:"Join the OpenStreetMap Argentina community on Telegram",extendedDescription:"The most active channel in the community, ideal for chatting and getting answers to your questions instantly. Everyone is welcome!"},"OSM-AR-twitter":{name:"OpenStreetMap Argentina Twitter",description:"Follow us on Twitter at {url}",extendedDescription:"News from the local community and OpenStreetMap in general."},"OSM-BO-mailinglist":{name:"Talk-bo Mailing List",description:"Talk-bo is the official mailing list for the Bolivian OpenStreetMap community",extendedDescription:"Mapping in Bolivia? Have questions, want to connect with the community here? Join us at {url}. All are welcome!"},"Bahia-telegram":{name:"OpenStreetMap Bahia Telegram Group",description:"Join the OpenStreetMap Bahia community on Telegram",extendedDescription:"Join the community to learn more about OpenStreetMap, ask questions or participate in our meetings. Everyone is welcome!"},"DF-telegram":{name:"OpenStreetMap Brasília Telegram Group",description:"Join the OpenStreetMap Brasília community on Telegram",extendedDescription:"Join the community to learn more about OpenStreetMap, ask questions or participate in our meetings. Everyone is welcome!"},"OSM-br-mailinglist":{name:"Talk-br Mailing List",description:"A mailing list to discuss OpenStreetMap in Brazil"},"OSM-br-telegram":{name:"OpenStreetMap Brasil Telegram",description:"Join the OpenStreetMap Brasil community on Telegram",extendedDescription:"Join the community to learn more about OpenStreetMap, ask questions or participate in our meetings. Everyone is welcome!"},"OSM-br-twitter":{name:"OpenStreetMap Brasil Twitter",description:"Follow us on Twitter at {url}"},"RS-telegram":{name:"OpenStreetMap Rio Grande do Sul Telegram Group",description:"Join the OpenStreetMap Rio Grande do Sul community on Telegram",extendedDescription:"Join the community to learn more about OpenStreetMap, ask questions or participate in our meetings. Everyone is welcome!"},"OSM-CL-facebook":{name:"OpenStreetMap Chile Facebook",description:"Join the OpenStreetMap Chile community on Facebook",extendedDescription:"Join the community to learn more about OpenStreetMap, ask questions or participate in our meetings. Everyone is welcome!"},"OSM-CL-mailinglist":{name:"Talk-cl Mailing List",description:"A mailing list to discuss OpenStreetMap in Chile"},"OSM-CL-telegram":{name:"OpenStreetMap Chile Telegram",description:"Join the OpenStreetMap Chile community on Telegram",extendedDescription:"Join the community to learn more about OpenStreetMap, ask questions or participate in our meetings. Everyone is welcome!"},"OSM-CL-twitter":{name:"OpenStreetMap Chile Twitter",description:"Follow us on Twitter at {url}"},"Maptime-Bogota":{name:"Maptime Bogotá",description:"We're a group of mappers interested in mapping in OpenStreetMap around Bogotá.",extendedDescription:"Learn to collect data in the field and digitize onto OpenStreetMap.  It is not necessary to have previous knowledge! You just need the desire to participate, learn, and have fun."},"OSM-CO-facebook":{name:"OpenStreetMap Colombia Facebook",description:"Join the OpenStreetMap Colombia community on Facebook",extendedDescription:"Join the community to learn more about OpenStreetMap. Everyone is welcome!"},"OSM-CO-mailinglist":{name:"Talk-co Mailing List",description:"A mailing list to discuss OpenStreetMap in Colombia"},"OSM-CO-telegram":{name:"OSM Colombia on Telegram",description:"OpenStreetMap Colombia Telegram chat"},"OSM-CO-twitter":{name:"OpenStreetMap Colombia Twitter",description:"Follow us on Twitter at {url}"},"OSM-CO":{name:"OpenStreetMap Colombia",description:"News of the OpenStreetMap Colombia community and the OSMCo Foundation"},"OSM-EC-telegram":{name:"OSM Ecuador on Telegram",description:"OpenStreetMap Ecuador Telegram chat"},"OSM-PY-telegram":{name:"OSM Paraguay on Telegram",description:"OpenStreetMap Paraguay Telegram chat"},"OSM-PE-facebook":{name:"OpenStreetMap Peru Facebook",description:"Join the OpenStreetMap Peru community on Facebook"},"OSM-PE-mailinglist":{name:"Talk-pe Mailing List",description:"The official mailing list for the OpenStreetMap Peru community"},"OSM-PE-matrix":{name:"OpenStreetMap Peru Matrix Chat",description:"Chat with other members of the OpenStreetMap Peru community in Matrix."},"OSM-PE-telegram":{name:"OpenStreetMap Peru Telegram",description:"Join the OpenStreetMap Peru community on Telegram"},"OSM-PE-twitter":{name:"OpenStreetMap Peru Twitter",description:"Follow us on Twitter at {url}"},"OSM-PE":{name:"OpenStreetMap Peru",description:"News and resources for the OpenStreetMap Peru community"},"LATAM-Facebook":{name:"OpenStreetMap Latam Facebook",description:"OpenStreetMap Latam on Facebook"},"LATAM-Telegram":{name:"OpenStreetMap Latam Telegram",description:"OpenStreetMap Telegram for Latin America"},"LATAM-Twitter":{name:"OpenStreetMap Latam Twitter",description:"Follow us on Twitter at {url}"},"osm-latam":{name:"OpenStreetMap Latam",description:"Supporting OpenStreetMap in Latin America",events:{"sotm-latam-2018":{name:"State of the Map Latam 2018",description:"State of the Map Latam is the annual conference for all mappers and users of OpenStreetMap in Latin America. The program includes talks, panels, workshops, and mapathons related to OpenStreetMap.",where:"Buenos Aires, Argentina"}}},"OSM-Discord":{name:"OpenStreetMap Discord",description:"Get in touch with other mappers via Discord"},"OSM-Facebook":{name:"OpenStreetMap on Facebook",description:"Like us on Facebook for news and updates about OpenStreetMap."},"OSM-help":{name:"OpenStreetMap Help",description:"Ask a question and get answers on OSM's community-driven question and answer site.",extendedDescription:"{url} is for everyone who needs help with OpenStreetMap.  Whether you are a beginner mapper or have a technical question, we're here to help!"},"OSM-IRC":{name:"OpenStreetMap IRC",description:"Join #osm on irc.oftc.net (port 6667)"},"OSM-Reddit":{name:"OpenStreetMap on Reddit",description:"/r/openstreetmap/ is a great place to learn more about OpenStreetMap.  Ask us anything!"},"OSM-Telegram":{name:"OpenStreetMap Telegram",description:"Join the OpenStreetMap Telegram global supergroup at {url}"},"OSM-Twitter":{name:"OpenStreetMap Twitter",description:"Follow us on Twitter at {url}"},OSMF:{name:"OpenStreetMap Foundation",description:"OSMF is a UK-based not-for-profit that supports the OpenStreetMap Project",extendedDescription:"OSMF supports the OpenStreetMap by fundraising, maintaining the servers which power OSM, organizing the annual State of the Map conference, and coordinating the volunteers who keep OSM running. You can show your support and have a voice in the direction of OpenStreetMap by joining as an OSMF member here: {signupUrl}",events:{sotm2018:{name:"State of the Map 2018",description:"Join us for 3 days in Milan, Italy for the annual worldwide OpenStreetMap conference, bringing together everyone in the community to socialize, share, and learn.",where:"Milan, Italy"}}}}};
+  var en = {icons:{download:"download",information:"info",remove:"remove",undo:"undo",zoom_to:"zoom to",copy:"copy",open_wikidata:"open on wikidata.org"},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."},add_note:{title:"Note",description:"Spotted an issue? Let other mappers know.",tail:"Click on the map to add a note."},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."},drag_node:{connected_to_hidden:"This can't be edited because it is connected to a hidden feature."}},operations:{add:{annotation:{point:"Added a point.",vertex:"Added a node to a way.",relation:"Added a relation.",note:"Added a note."}},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:{from_vertex:{to_point:"Connected a way to a point.",to_vertex:"Connected a way to another.",to_line:"Connected a way to a line.",to_area:"Connected a way to an area.",to_adjacent_vertex:"Merged adjacent points in a way.",to_sibling_vertex:"Connected a way to itself."},from_point:{to_point:"Merged a point with another.",to_vertex:"Merged a point with a point in a way.",to_line:"Moved a point to a line.",to_area:"Moved a point to an area."}},relation:"These features can't be connected because they have conflicting relation roles.",restriction:"These features can't be connected because it would damage a \"{relation}\" relation."},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 it would damage a \"{relation}\" relation.",relation:"These features can't be merged because they have conflicting relation roles.",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.",paths_intersect:"These features can't be merged because the resulting path would intersect itself."},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:{annotation:{create:"Added a turn restriction","delete":"Deleted a turn restriction"}},detach_node:{title:"Detach",key:"E",description:"Detach this node from these lines/areas.",annotation:"Detached a node from parent lines/areas.",restriction:"This node can't be detached because it would damage a \"{relation}\" relation.",connected_to_hidden:"This node can't be detached because it is connected to a hidden feature."}},restriction:{controls:{distance:"Distance",distance_up_to:"Up to {distance}",via:"Via",via_node_only:"Node only",via_up_to_one:"Up to 1 way",via_up_to_two:"Up to 2 ways"},help:{indirect:"(indirect)",turn:{no_left_turn:"NO Left Turn {indirect}",no_right_turn:"NO Right Turn {indirect}",no_u_turn:"NO U-Turn {indirect}",no_straight_on:"NO Straight On {indirect}",only_left_turn:"ONLY Left Turn {indirect}",only_right_turn:"ONLY Right Turn {indirect}",only_u_turn:"ONLY U-Turn {indirect}",only_straight_on:"ONLY Straight On {indirect}",allowed_left_turn:"Left Turn Allowed {indirect}",allowed_right_turn:"Right Turn Allowed {indirect}",allowed_u_turn:"U-Turn Allowed {indirect}",allowed_straight_on:"Straight On Allowed {indirect}"},from:"FROM",via:"VIA",to:"TO",from_name:"{from} {fromName}",from_name_to_name:"{from} {fromName} {to} {toName}",via_names:"{via} {viaNames}",select_from:"Click to select a {from} segment",select_from_name:"Click to select {from} {fromName}",toggle:"Click for \"{turn}\""}},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:"Log In",logout:"Log Out",loading_auth:"Connecting to OpenStreetMap...",report_a_bug:"Report a bug",help_translate:"Help translate",sidebar:{key:"`",tooltip:"Toggle the sidebar."},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",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.",request_review:"I would like someone to review my edits.",save:"Upload",cancel:"Cancel",changes:"{count} Changes",download_changes:"Download osmChange file",errors:"Errors",warnings:"Warnings",modified:"Modified",deleted:"Deleted",created:"Created",outstanding_errors_message:"Please resolve all errors first. {count} remaining.",comment_needed_message:"Please add a changeset comment first.",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:"https://www.openstreetmap.org/copyright"},contributors:{list:"Edits by {users}",truncated_list:"Edits by {users} and {count} others"},info_panels:{key:"I",background:{key:"B",title:"Background",zoom:"Zoom",vintage:"Vintage",source:"Source",description:"Description",resolution:"Resolution",accuracy:"Accuracy",unknown:"Unknown",show_tiles:"Show Tiles",hide_tiles:"Hide Tiles",show_vintage:"Show Vintage",hide_vintage:"Hide Vintage"},history:{key:"H",title:"History",selected:"{n} selected",no_history:"No History (New Feature)",version:"Version",last_edit:"Last Edit",edited_by:"Edited By",changeset:"Changeset",unknown:"Unknown",link_text:"History on openstreetmap.org",note_no_history:"No History (New Note)",note_comments:"Comments",note_created_date:"Created Date",note_created_user:"Created By",note_link_text:"Note on openstreetmap.org"},location:{key:"L",title:"Location",unknown_location:"Unknown Location"},measurement:{key:"M",title:"Measurement",selected:"{n} selected",geometry:"Geometry",closed_line:"closed line",closed_area:"closed area",center:"Center",perimeter:"Perimeter",length:"Length",area:"Area",centroid:"Centroid",location:"Location",metric:"Metric",imperial:"Imperial",node_count:"Number of nodes"}},geometry:{point:"point",vertex:"vertex",line:"line",area:"area",relation:"relation",note:"note"},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:{zoom_to:{key:"Z",title:"Zoom to this",tooltip_feature:"Center and zoom the map to focus on this feature.",tooltip_note:"Center and zoom the map to focus on this note.",tooltip_data:"Center and zoom the map to focus on this data.",tooltip_issue:"Center and zoom the map to focus on this issue."},show_more:"Show More",view_on_osm:"View on openstreetmap.org",view_on_keepRight:"View on keepright.at",all_fields:"All fields",all_tags:"All tags",all_members:"All members",all_relations:"All relations",new_relation:"New relation...",choose_relation:"Choose a parent relation",role:"Role",choose:"Select feature type",results:"{n} results for {search}",no_documentation_key:"There is no documentation available.",edit_reference:"edit/translate",wiki_reference:"View documentation",wiki_en_reference:"View documentation in English",hidden_preset:{manual:"{features} are hidden. Enable them in the Map Data pane.",zoom:"{features} are hidden. Zoom in to enable them."},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:",lock:{suggestion:"The \"{label}\" field is locked because there is a Wikidata tag. You can delete it or edit the tags in the \"All tags\" section."}},background:{title:"Background",description:"Background settings",key:"B",backgrounds:"Backgrounds",none:"None",best_imagery:"Best known imagery source for this location","switch":"Switch back to this background",custom:"Custom",overlays:"Overlays",imagery_source_faq:"Imagery Info / Report a Problem",reset:"reset",display_options:"Display Options",brightness:"Brightness",contrast:"Contrast",saturation:"Saturation",sharpness:"Sharpness",minimap:{description:"Show Minimap",tooltip:"Show a zoomed out map to help locate the area currently displayed.",key:"/"},fix_misalignment:"Adjust imagery offset",offset:"Drag anywhere in the gray area below to adjust the imagery offset, or enter the offset values in meters."},map_data:{title:"Map Data",description:"Map Data",key:"F",data_layers:"Data Layers",layers:{osm:{tooltip:"Map data from OpenStreetMap",title:"OpenStreetMap data"},notes:{tooltip:"Note data from OpenStreetMap",title:"OpenStreetMap notes"},keepRight:{tooltip:"Automatically detected map issues from keepright.at",title:"KeepRight Issues"},improveOSM:{tooltip:"Missing data automatically detected by improveosm.org",title:"ImproveOSM Issues"},custom:{tooltip:"Drag and drop a data file onto the page, or click the button to setup",title:"Custom Map Data",zoom:"Zoom to data"}},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.",osmhidden:"These features have been automatically hidden because the OpenStreetMap layer is hidden."},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 Features",tooltip:"Proposed, Construction, Abandoned, Demolished, etc."},others:{description:"Other Features",tooltip:"Everything Else"}},area_fill:{wireframe:{description:"No Fill (Wireframe)",tooltip:"Enabling wireframe mode makes it easy to see the background imagery.",key:"W"},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."}},settings:{custom_background:{tooltip:"Edit custom background",header:"Custom Background Settings",instructions:"Enter a tile URL template. Valid tokens are:\n   {zoom} or {z}, {x}, {y} for Z/X/Y tile scheme\n   {-y} or {ty} for flipped TMS-style Y coordinates\n   {u} for quadtile scheme\n   {switch:a,b,c} for DNS server multiplexing\n\nExample:\n{example}",template:{placeholder:"Enter a url template"}},custom_data:{tooltip:"Edit custom data layer",header:"Custom Map Data Settings",file:{instructions:"Choose a local data file. Supported types are:\n   .gpx, .kml, .geojson, .json",label:"Browse files"},or:"Or",url:{instructions:"Enter a data file URL or vector tile URL template. Valid tokens are:\n   {zoom} or {z}, {x}, {y} for Z/X/Y tile scheme",placeholder:"Enter a url"}}},restore:{heading:"You have unsaved changes",description:"Do you wish to restore unsaved changes from a previous editing session?",restore:"Restore my changes",reset:"Discard my changes"},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...",conflict_progress:"Checking for conflicts: {num} of {total}",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 osmChange file",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:{just_edited:"You just edited OpenStreetMap!",thank_you:"Thank you for improving the map.",thank_you_location:"Thank you for improving the map around {where}.",help_html:"Your changes should appear on OpenStreetMap within a few minutes. It may take longer for maps elsewhere to receive updates.",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",view_on_osm:"View Changes on OSM",changeset_id:"Your changeset #: {changeset_id}",like_osm:"Like OpenStreetMap? Connect with others:",more:"More",events:"Events",languages:"Languages: {languages}",missing:"Is something missing from this list?",tell_us:"Tell us!"},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}"},zoom:{"in":"Zoom in",out:"Zoom out"},cannot_zoom:"Cannot zoom out further in current mode.",full_screen:"Toggle Full Screen",QA:{improveOSM:{title:"ImproveOSM Detection",geometry_types:{path:"paths",parking:"parking",road:"roads",both:"roads and parking"},directions:{east:"east",north:"north",northeast:"northeast",northwest:"northwest",south:"south",southeast:"southeast",southwest:"southwest",west:"west"},error_types:{ow:{title:"Missing One-way",description:"Along this section of {highway}, {percentage}% of {num_trips} recorded trips travel from {from_node} to {to_node}. There may be missing a \"oneway\" tag."},mr:{title:"Missing Geometry",description:"{num_trips} recorded trips in this area suggest there may be unmapped {geometry_type} here.",description_alt:"Data from a 3rd party suggests there may be unmapped {geometry_type} here."},tr:{title:"Missing Turn Restriction",description:"{num_passed} of {num_trips} recorded trips (travelling {travel_direction}) make a turn from {from_way} to {to_way} at {junction}. There may be a missing \"{turn_restriction}\" restriction."}}},keepRight:{title:"KeepRight Error",detail_title:"Error",detail_description:"Description",comment:"Comment",comment_placeholder:"Enter a comment to share with other users.",close:"Close (Error Fixed)",ignore:"Ignore (Not an Error)",save_comment:"Save Comment",close_comment:"Close and Comment",ignore_comment:"Ignore and Comment",error_parts:{this_node:"this node",this_way:"this way",this_relation:"this relation",this_oneway:"this oneway",this_highway:"this highway",this_railway:"this railway",this_waterway:"this waterway",this_cycleway:"this cycleway",this_cycleway_footpath:"this cycleway/footpath",this_riverbank:"this riverbank",this_crossing:"this crossing",this_railway_crossing:"this railway crossing",this_bridge:"this bridge",this_tunnel:"this tunnel",this_boundary:"this boundary",this_turn_restriction:"this turn restriction",this_roundabout:"this roundabout",this_mini_roundabout:"this mini-roundabout",this_track:"this track",this_feature:"this feature",highway:"highway",railway:"railway",waterway:"waterway",cycleway:"cycleway",cycleway_footpath:"cycleway/footpath",riverbank:"riverbank",place_of_worship:"place of worship",pub:"pub",restaurant:"restaurant",school:"school",university:"university",hospital:"hospital",library:"library",theatre:"theatre",courthouse:"courthouse",bank:"bank",cinema:"cinema",pharmacy:"pharmacy",cafe:"cafe",fast_food:"fast food",fuel:"fuel",from:"from",to:"to",left_hand:"left-hand",right_hand:"right-hand"},errorTypes:{"20":{title:"Multiple nodes on the same spot",description:"There is more than one node in this spot. Node IDs: {var1}."},"30":{title:"Non-closed area",description:"{var1} is tagged with \"{var2}\" and should be a closed loop."},"40":{title:"Impossible oneway",description:"The first node {var1} of {var2} is not connected to any other way."},"41":{description:"The last node {var1} of {var2} is not connected to any other way."},"42":{description:"You cannot reach {var1} because all ways leading from it are oneway."},"43":{description:"You cannot escape from {var1} because all ways leading to it are oneway."},"50":{title:"Almost junction",description:"{var1} is very close but not connected to way {var2}."},"60":{title:"Deprecated tag",description:"{var1} uses deprecated tag \"{var2}\". Please use \"{var3}\" instead."},"70":{title:"Missing tag",description:"{var1} has an empty tag: \"{var2}\"."},"71":{description:"{var1} has no tags."},"72":{description:"{var1} is not member of any way and doesn't have any tags."},"73":{description:"{var1} has a \"{var2}\" tag but no \"highway\" tag."},"74":{description:"{var1} has an empty tag: \"{var2}\"."},"75":{description:"{var1} has a name \"{var2}\" but no other tags."},"90":{title:"Motorway without ref tag",description:"{var1} is tagged as a motorway and therefore needs a \"ref\", \"nat_ref\", or \"int_ref\" tag."},"100":{title:"Place of worship without religion",description:"{var1} is tagged as a place of worship and therefore needs a religion tag."},"110":{title:"Point of interest without name",description:"{var1} is tagged as a \"{var2}\" and therefore needs a name tag."},"120":{title:"Way without nodes",description:"{var1} has just one single node."},"130":{title:"Disconnected way",description:"{var1} is not connected to the rest of the map."},"150":{title:"Railway crossing without tag",description:"{var1} of a highway and a railway needs to be tagged as \"railway=crossing\" or \"railway=level_crossing\"."},"160":{title:"Railway layer conflict",description:"There are ways in different layers (e.g. tunnel or bridge) meeting at {var1}."},"170":{title:"FIXME tagged item",description:"{var1} has a FIXME tag: {var2}"},"180":{title:"Relation without type",description:"{var1} is missing a \"type\" tag."},"190":{title:"Intersection without junction",description:"{var1} intersects the {var2} {var3} but there is no junction node, bridge, or tunnel."},"200":{title:"Overlapping ways",description:"{var1} overlaps the {var2} {var3}."},"210":{title:"Self-intersecting way",description:"There is an unspecified issue with self intersecting ways."},"211":{description:"{var1} contains more than one node multiple times. Nodes are {var2}. This may or may not be an error."},"212":{description:"{var1} has only two different nodes and contains one of them more than once."},"220":{title:"Misspelled tag",description:"{var1} is tagged \"{var2}\" where \"{var3}\" looks like \"{var4}\"."},"221":{description:"{var1} has a suspicious tag \"{var2}\"."},"230":{title:"Layer conflict",description:"{var1} is a junction of ways on different layers."},"231":{description:"{var1} is a junction of ways on different layers: {var2}.",layer:"(layer: {layer})"},"232":{description:"{var1} is tagged with \"layer={var2}\". This need not be an error but it looks strange."},"270":{title:"Unusual motorway connection",description:"{var1} is a junction of a motorway and a highway other than \"motorway\", \"motorway_link\", \"trunk\", \"rest_area\", or \"construction\". Connection to \"service\" or \"unclassified\" is only valid if it has \"access=no/private\", or it leads to a motorway service area, or if it is a \"service=parking_aisle\"."},"280":{title:"Boundary issue",description:"There is an unspecified issue with this boundary."},"281":{title:"Boundary missing name",description:"{var1} has no name."},"282":{title:"Boundary missing admin level",description:"The boundary of {var1} has no valid numeric admin_level. Please do not mix admin levels (e.g. \"6;7\"). Always tag the lowest admin_level of all boundaries."},"283":{title:"Boundary not a closed loop",description:"The boundary of {var1} is not a closed loop."},"284":{title:"Boundary is split",description:"The boundary of {var1} splits here."},"285":{title:"Boundary admin_level too high",description:"{var1} has \"admin_level={var2}\" but belongs to a relation with lower \"admin_level\" (e.g. higher priority); it should have the lowest \"admin_level\" of all relations."},"290":{title:"Restriction issue",description:"There is an unspecified issue with this restriction."},"291":{title:"Restriction missing type",description:"{var1} has an unrecognized restriction type."},"292":{title:"Restriction missing \"from\" way",description:"{var1} has {var2} \"from\" members, but it should have 1."},"293":{title:"Restriction missing \"to\" way",description:"{var1} has {var2} \"to\" members, but it should have 1."},"294":{title:"Restriction \"from\" or \"to\" is not a way",description:"{var1} has \"from\" or \"to\" members which should be ways. {var2}."},"295":{title:"Restriction \"via\" is not an endpoint",description:"{var1} has a \"via\" (node {var2}) which is not the first or the last member of \"{var3}\" (way {var4})."},"296":{title:"Unusual restriction angle",description:"{var1} has a restriction type \"{var2}\" but the angle is {var3} degrees. Maybe the restriction type is not appropriate?"},"297":{title:"Wrong direction of \"to\" way",description:"{var1} does not match the direction of \"to\" way {var2}."},"298":{title:"Redundant restriction - oneway",description:"{var1} may be redundant. Entry already prohibited by \"oneway\" tag on {var2}."},"300":{title:"Missing maxspeed",description:"{var1} is missing a \"maxspeed\" tag and is tagged as motorway, trunk, primary, or secondary."},"310":{title:"Roundabout issue",description:"There is an unspecified issue with this roundabout."},"311":{title:"Roundabout not closed loop",description:"{var1} is part of a roundabout but is not closed-loop. (Split carriageways approaching a roundabout should not be tagged as roundabout)."},"312":{title:"Roundabout wrong direction",description:"If {var1} is in a country with {var2} traffic then its orientation goes the wrong way around."},"313":{title:"Roundabout weakly connected",description:"{var1} has only {var2} other road(s) connected. Roundabouts typically have 3 or more."},"320":{title:"Improper link connection",description:"{var1} is tagged as \"{var2}\" but doesn't have a connection to any other \"{var3}\" or \"{var4}\"."},"350":{title:"Improper bridge tag",description:"{var1} doesn't have a tag in common with its surrounding ways that shows the purpose of this bridge. There should be one of these tags: {var2}."},"360":{title:"Missing local name tag",description:"It would be nice if {var1} had a local name tag \"name:XX={var2}\" where XX shows the language of its common name \"{var2}\"."},"370":{title:"Doubled places",description:"{var1} has tags in common with the surrounding way {var2} {var3} and seems to be redundant.",including_the_name:"(including the name {name})"},"380":{title:"Non-physical use of sport tag",description:"{var1} is tagged \"{var2}\" but has no physical tag (e.g. \"leisure\", \"building\", \"amenity\", or \"highway\")."},"390":{title:"Missing tracktype",description:"{var1} doesn't have a \"tracktype\" tag."},"400":{title:"Geometry issue",description:"There is an unspecified issue with the geometry here."},"401":{title:"Missing turn restriction",description:"Ways {var1} and {var2} join in a very sharp angle here and there is no oneway tag or turn restriction that prevents turning."},"402":{title:"Impossible angle",description:"{var1} bends in a very sharp angle here."},"410":{title:"Website issue",description:"There is an unspecified issue with a contact website or URL."},"411":{description:"{var1} may have an outdated URL: {var2} returned HTTP status code {var3}."},"412":{description:"{var1} may have an outdated URL: {var2} contained suspicious text \"{var3}\"."},"413":{description:"{var1} may have an outdated URL: {var2} did not contain keywords \"{var3}\"."}}}},streetside:{tooltip:"Streetside photos from Microsoft",title:"Photo Overlay (Bing Streetside)",report:"Report a privacy concern with this image",view_on_bing:"View on Bing Maps",hires:"High resolution"},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"},openstreetcam_images:{tooltip:"Street-level photos from OpenStreetCam",title:"Photo Overlay (OpenStreetCam)"},openstreetcam:{view_on_openstreetcam:"View this image on OpenStreetCam"},note:{note:"Note",title:"Edit note",anonymous:"anonymous",closed:"(Closed)",commentTitle:"Comments",status:{opened:"opened {when}",reopened:"reopened {when}",commented:"commented {when}",closed:"closed {when}"},newComment:"New Comment",inputPlaceholder:"Enter a comment to share with other users.",close:"Close Note",open:"Reopen Note",comment:"Comment",close_comment:"Close and Comment",open_comment:"Reopen and Comment",report:"Report","new":"New Note",newDescription:"Describe the issue.",save:"Save Note",login:"You must log in to change or comment on this note.",upload_explanation:"Your comments will be publicly visible to all OpenStreetMap users.",upload_explanation_with_user:"Your comments as {user} will be publicly visible to all OpenStreetMap users."},help:{title:"Help",key:"H",help:{title:"Help",welcome:"Welcome to the iD editor for [OpenStreetMap](https://www.openstreetmap.org/). With this editor you can update OpenStreetMap right from your web browser.",open_data_h:"Open Data",open_data:"Edits that you make on this map will be visible to everyone who uses OpenStreetMap. Your edits can be based on personal knowledge, on-the-ground surveying, or imagery collected from aerial or street level photos. Copying from commercial sources, like Google Maps, [is strictly forbidden](https://www.openstreetmap.org/copyright).",before_start_h:"Before you start",before_start:"You should be familiar with OpenStreetMap and this editor before you start editing. iD contains a walkthrough to teach you the basics of editing OpenStreetMap. Click \"Start the Walkthrough\" on this screen to take the tutorial - it takes only about 15 minutes.",open_source_h:"Open Source",open_source:"The iD editor is a collaborative open source project, and you are using version {version} now. The source code is available [on GitHub](https://github.com/openstreetmap/iD).",open_source_help:"You can help iD by [translating](https://github.com/openstreetmap/iD/blob/master/CONTRIBUTING.md#translating) or [reporting bugs](https://github.com/openstreetmap/iD/issues)."},overview:{title:"Overview",navigation_h:"Navigation",navigation_drag:"You can drag the map by pressing and holding down the {leftclick} left mouse button and moving the mouse around. You can also use the `↓`, `↑`, `←`, `→` arrow keys on your keyboard.",navigation_zoom:"You can zoom in or out by scrolling with the mouse wheel or trackpad, or by clicking the {plus} / {minus} buttons along the side of the map. You can also use the `+`, `-` keys on your keyboard.",features_h:"Map Features",features:"We use the word *features* to describe things that appear on the map, such as roads, buildings, or points of interest. Anything in the real world can be mapped as a feature on OpenStreetMap. Map features are represented on the map using *points*, *lines*, or *areas*.",nodes_ways:"In OpenStreetMap, points are sometimes called *nodes*, and lines and areas are sometimes called *ways*."},editing:{title:"Editing & Saving",select_h:"Select",select_left_click:"{leftclick} Left-click on a feature to select it. This will highlight it with a pulsing glow, and the sidebar will display details about that feature, such as its name or address.",select_right_click:"{rightclick} Right-click on a feature to display the editing menu, which shows the commands that are available, such as rotating, moving, and deleting.",multiselect_h:"Multiselect",multiselect_shift_click:"`{shift}`+{leftclick} left-click to select several features together.  This makes it easier to move or delete multiple items.",multiselect_lasso:"Another way to select multiple features is to hold down the `{shift}` key, then press and hold down the {leftclick} left mouse button and drag the mouse to draw a selection lasso. All of the points inside the lasso area will be selected.",undo_redo_h:"Undo & Redo",undo_redo:"Your edits are stored locally in your browser until you choose to save them to the OpenStreetMap server. You can undo edits by clicking the {undo} **Undo** button, and redo them by clicking the {redo} **Redo** button.",save_h:"Save",save:"Click {save} **Save** to finish your edits and send them to OpenStreetMap. You should remember to save your work frequently!",save_validation:"On the save screen, you'll have a chance to review what you've done. iD will also perform some basic checks for missing data and may offer helpful suggestions and warnings if something doesn't seem right.",upload_h:"Upload",upload:"Before uploading your changes you must enter a [changeset comment](https://wiki.openstreetmap.org/wiki/Good_changeset_comments). Then click **Upload** to send your changes to OpenStreetMap, where they will be merged into the map and publicly visible to everyone.",backups_h:"Automatic Backups",backups:"If you can't finish your edits in one sitting, for example if your computer crashes or you close the browser tab, your edits are still saved in your browser's storage. You can come back later (on the same browser and computer), and iD will offer to restore your work.",keyboard_h:"Keyboard Shortcuts",keyboard:"You can view a list of keyboard shortcuts by pressing the `?` key."},feature_editor:{title:"Feature Editor",intro:"The *feature editor* appears alongside the map, and allows you to see and edit all of the information for the selected feature.",definitions:"The top section displays the feature's type. The middle section contains *fields* showing the feature's attributes, such as its name or address.",type_h:"Feature Type",type:"You can click on the feature type to change the feature to a different type. Everything that exists in the real world can be added to OpenStreetMap, so there are thousands of feature types to choose from.",type_picker:"The type picker displays the most common feature types, such as parks, hospitals, restaurants, roads, and buildings. You can search for anything by typing what you're looking for in the search box. You can also click the {inspect} **Info** icon next to the feature type to learn more about it.",fields_h:"Fields",fields_all_fields:"The \"All fields\" section contains all of the feature's details that you may edit. In OpenStreetMap, all of the fields are optional, and it's OK to leave a field blank if you are unsure.",fields_example:"Each feature type will display different fields. For example, a road may display fields for its surface and speed limit, but a restaurant may display fields for the type of food it serves and the hours it is open.",fields_add_field:"You can also click the \"Add field\" dropdown to add more fields, such as a description, Wikipedia link, wheelchair access, and more.",tags_h:"Tags",tags_all_tags:"Below the fields section, you can expand the \"All tags\" section to edit any of the OpenStreetMap *tags* for the selected feature. Each tag consists of a *key* and *value*, data elements that define all of the features stored in OpenStreetMap.",tags_resources:"Editing a feature's tags requires intermediate knowledge about OpenStreetMap. You should consult resources like the [OpenStreetMap Wiki](https://wiki.openstreetmap.org/wiki/Main_Page) or [Taginfo](https://taginfo.openstreetmap.org/) to learn more about accepted OpenStreetMap tagging practices."},points:{title:"Points",intro:"*Points* can be used to represent features such as shops, restaurants, and monuments. They mark a specific location, and describe what's there.",add_point_h:"Adding Points",add_point:"To add a point, click the {point} **Point** button on the toolbar above the map, or press the shortcut key `1`. This will change the mouse cursor to a cross symbol.",add_point_finish:"To place the new point on the map, position the mouse cursor where the point should go, then {leftclick} left-click or press `Space`.",move_point_h:"Moving Points",move_point:"To move a point, place the mouse cursor over the point, then press and hold the {leftclick} left mouse button while dragging the point to its new location.",delete_point_h:"Deleting Points",delete_point:"It's OK to delete features that don't exist in the real world. 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.",delete_point_command:"To delete a point, {rightclick} right-click on the point to select it and show the edit menu, then use the {delete} **Delete** command."},lines:{title:"Lines",intro:"*Lines* are used to represent features such as roads, railroads, and rivers. Lines should be drawn down the center of the feature that they represent.",add_line_h:"Adding Lines",add_line:"To add a line, click the {line} **Line** button on the toolbar above the map, or press the shortcut key `2`. This will change the mouse cursor to a cross symbol.",add_line_draw:"Next, position the mouse cursor where the line should begin and {leftclick} left-click or press `Space` to begin placing nodes along the line. Continue placing more nodes by clicking or pressing `Space`. While drawing, you can zoom in or drag the map in order to add more detail.",add_line_finish:"To finish a line, press `{return}` or click again on the last node.",modify_line_h:"Modifying Lines",modify_line_dragnode:"Often you'll see lines that aren't shaped correctly, for example a road that does not match up with the background imagery. To adjust the shape of a line, first {leftclick} left-click to select it. All nodes of the line will be drawn as small circles. You can then drag the nodes to better locations.",modify_line_addnode:"You can also create new nodes along a line either by {leftclick}**x2** double-clicking on the line or by dragging the small triangles at the midpoints between nodes.",connect_line_h:"Connecting Lines",connect_line:"Having roads connected properly is important for the map and essential for providing driving directions.",connect_line_display:"The connections between roads are drawn with gray circles. The endpoints of a line are drawn with larger white circles if they don't connect to anything.",connect_line_drag:"To connect a line to another feature, drag one of the line's nodes onto the other feature until both features snap together. Tip: You can hold down the `{alt}` key to prevent nodes from connecting to other features.",connect_line_tag:"If you know that the connection has traffic lights or crosswalks, you can add them by selecting the connecting node and using the feature editor to select the correct feature's type.",disconnect_line_h:"Disconnecting Lines",disconnect_line_command:"To disconnect a road from another feature, {rightclick} right-click the connecting node and select the {disconnect} **Disconnect** command from the editing menu.",move_line_h:"Moving Lines",move_line_command:"To move an entire line, {rightclick} right-click the line and select the {move} **Move** command from the editing menu. Then move the mouse, and {leftclick} left-click to place the line in a new location.",move_line_connected:"Lines that are connected to other features will stay connected as you move the line to a new location. iD may prevent you from moving a line across another connected line.",delete_line_h:"Deleting Lines",delete_line:"If a line is entirely incorrect, for example a road that doesn't exist in the real world, it's OK to delete it. Be careful when deleting features: the background imagery you are using might be outdated, and a road that looks wrong could simply be newly built.",delete_line_command:"To delete a line, {rightclick} right-click on the line to select it and show the edit menu, then use the {delete} **Delete** command."},areas:{title:"Areas",intro:"*Areas* are used to show the boundaries of features like lakes, buildings, and residential areas. Areas should be traced around the edge of the feature that they represent, for example, around the base of a building.",point_or_area_h:"Points or Areas?",point_or_area:"Many features can be represented as points or areas. You should map buildings and property outlines as areas whenever possible. Place points inside a building area to represent businesses, amenities, and other features located inside the building.",add_area_h:"Adding Areas",add_area_command:"To add an area, click the {area} **Area** button on the toolbar above the map, or press the shortcut key `3`. This will change the mouse cursor to a cross symbol.",add_area_draw:"Next, position the mouse cursor at one of the corners of the feature and {leftclick} left-click or press `Space` to begin placing nodes around the outer edge of the area. Continue placing more nodes by clicking or pressing `Space`. While drawing, you can zoom in or drag the map in order to add more detail.",add_area_finish:"To finish an area, press `{return}` or click again on either the first or last node.",square_area_h:"Square Corners",square_area_command:"Many area features like buildings have square corners. To square the corners of an area, {rightclick} right-click the edge of the area and select the {orthogonalize} **Square** command from the editing menu.",modify_area_h:"Modifying Areas",modify_area_dragnode:"Often you'll see areas that aren't shaped correctly, for example a building that does not match up with the background imagery. To adjust the shape of an area, first {leftclick} left-click to select it. All nodes of the area will be drawn as small circles. You can then drag the nodes to better locations.",modify_area_addnode:"You can also create new nodes along an area either by {leftclick}**x2** double-clicking on the edge of the area or by dragging the small triangles at the midpoints between nodes.",delete_area_h:"Deleting Areas",delete_area:"If an area is entirely incorrect, for example a building that doesn't exist in the real world, it's OK to delete it. Be cautious when deleting features - the background imagery you are using might be outdated, and a building that looks wrong could simply be newly built.",delete_area_command:"To delete an area, {rightclick} right-click on the area to select it and show the edit menu, then use the {delete} **Delete** command."},relations:{title:"Relations",intro:"A *relation* is a special type of feature in OpenStreetMap that groups together other features. The features that belong to a relation are called *members*, and each member can have a *role* in the relation.",edit_relation_h:"Editing Relations",edit_relation:"At the bottom of the feature editor, you can expand the \"All relations\" section to see if the selected feature is a member of any relations. You can then click on the relation to select and edit it.",edit_relation_add:"To add a feature to a relation, select the feature, then click the {plus} add button in the \"All relations\" section of the feature editor. You can choose from a list of nearby relations, or choose the \"New relation...\" option.",edit_relation_delete:"You can also click the {delete} **Delete** button to remove the selected feature from the relation. If you remove all of the members from a relation, the relation will be deleted automatically.",maintain_relation_h:"Maintaining Relations",maintain_relation:"For the most part, iD will maintain relations automatically as you edit. You should take care when replacing features that might be members of relations. For example if you delete a section of road and draw a new section of road to replace it, you should add the new section to the same relations (routes, turn restrictions, etc.) as the original.",relation_types_h:"Relation Types",multipolygon_h:"Multipolygons",multipolygon:"A *multipolygon* relation is a group of one or more *outer* features and one or more inner features. The outer features define the outer edges of the multipolygon, and the inner features define sub-areas or holes cut out from the inside of the multipolygon.",multipolygon_create:"To create a multipolygon, for example a building with a hole in it, draw the outer edge as an area and the inner edge as a line or different kind of area. Then `{shift}`+{leftclick} left-click to select both features, {rightclick} right-click to show the edit menu, and select the {merge} **Merge** command.",multipolygon_merge:"Merging several lines or areas will create a new multipolygon relation with all selected areas as members. iD will choose the inner and outer roles automatically, based on which features are contained inside other features.",turn_restriction_h:"Turn restrictions",turn_restriction:"A *turn restriction* relation is a group of several road segments in an intersection. Turn restrictions consist of a *from* road, *via* node or roads, and a *to* road.",turn_restriction_field:"To edit turn restrictions, select a junction node where two or more roads meet. The feature editor will display a special \"Turn Restrictions\" field containing a model of the intersection.",turn_restriction_editing:"In the \"Turn Restrictions\" field, click to select a \"from\" road, and see whether turns are allowed or restricted to any of the \"to\" roads. You can click on the turn icons to toggle them between allowed and restricted. iD will create relations automatically and set the from, via, and to roles based on your choices.",route_h:"Routes",route:"A *route* relation is a group of one or more line features that together form a route network, like a bus route, train route, or highway route.",route_add:"To add a feature to a route relation, select the feature and scroll down to the \"All relations\" section of the feature editor, then click the {plus} add button to add this feature to a nearby existing relation or a new relation.",boundary_h:"Boundaries",boundary:"A *boundary* relation is a group of one or more line features that together form an administrative boundary.",boundary_add:"To add a feature to a boundary relation, select the feature and scroll down to the \"All relations\" section of the feature editor, then click the {plus} add button to add this feature to a nearby existing relation or a new relation."},notes:{title:"Notes",intro:"*Notes* are used to alert other users that a feature requires fixing or attention. Notes mark a specific location on the map. To view existing notes or add new ones, click the {data} **Map data** panel to enable the OpenStreetMap notes layer.",add_note_h:"Adding Notes",add_note:"To add a new note, click the {note} **Note** button on the toolbar above the map, or press the shortcut key `4`. This will change the mouse cursor to a cross symbol. To place the new note on the map, position the mouse cursor where the note should go, then {leftclick} left-click or press `Space`.",move_note:"Only new notes can be moved. To move a note, place the mouse cursor over the new note, then press and hold the {leftclick} left mouse button while dragging the note to its new location.",update_note_h:"Closing, Reopening, and Commenting",update_note:"An existing note can be updated by closing it, reopening it, or adding a comment to it. Closing a note indicates that the problem has been resolved. Reopening a note indicates that the original issue is not resolved.",save_note_h:"Saving Notes",save_note:"You must save any note edits individually by clicking the buttons below the note comments. Note edits are **not** included in changesets that you upload to OpenStreetMap."},imagery:{title:"Background Imagery",intro:"The background imagery that appears beneath the map data is an important resource for mapping. This imagery can be aerial photos collected from satellites, airplanes, and drones, or it can be scanned historical maps or other freely available source data.",sources_h:"Imagery Sources",choosing:"To see which imagery sources are available for editing, click the {layers} **Background settings** button on the side of the map.",sources:"By default, a [Bing Maps](https://www.bing.com/maps/) satellite layer is chosen as the background image. Depending on where you are editing, other imagery sources will be available. Some may be newer or have higher resolution, so it is always useful to check and see which layer is the best one to use as a mapping reference.",offsets_h:"Adjusting Imagery Offset",offset:"Imagery is sometimes offset slightly from accurate map data. If you see a lot of roads or buildings shifted from the background imagery, it may be the imagery that's incorrect, so don't move them all to match the background. Instead, you can adjust the background so that it matches the existing data by expanding the \"Adjust Imagery Offset\" section at the bottom of the Background Settings pane.",offset_change:"Click on the small triangles to adjust the imagery offset in small steps, or hold the {leftclick} left mouse button and drag within the gray square to slide the imagery into alignment."},streetlevel:{title:"Street Level Photos",intro:"Street level photos are useful for mapping traffic signs, businesses, and other details that you can't see from satellite and aerial images. The iD editor supports street level photos from [Bing Streetside](https://www.microsoft.com/en-us/maps/streetside), [Mapillary](https://www.mapillary.com), and [OpenStreetCam](https://www.openstreetcam.org).",using_h:"Using Street Level Photos",using:"To use street level photos for mapping, click the {data} **Map data** panel on the side of the map to enable or disable the available photo layers.",photos:"When enabled, the photo layer displays a line along the sequence of photos. At higher zoom levels, a circle marks at each photo location, and at even higher zoom levels, a cone indicates the direction the camera was facing when the photo was taken.",viewer:"When you click on one of the photo locations, a photo viewer appears in the bottom corner of the map. The photo viewer contains controls to step forward and backward in the image sequence. It also shows the username of the person who captured the image, the date it was captured, and a link to view the image on the original site."},gps:{title:"GPS Traces",intro:"Collected GPS traces are a valuable source of data for OpenStreetMap. This editor supports *.gpx*, *.geojson*, and *.kml* files on your local computer. You can collect GPS traces with a smartphone, sports watch, or other GPS device.",survey:"For information on how to perform a GPS survey, read [Mapping with a smartphone, GPS, or paper](http://learnosm.org/en/mobile-mapping/).",using_h:"Using GPS Traces",using:"To use a GPS trace for mapping, drag and drop the data file onto the map editor. If it's recognized, it will be drawn on the map as a bright purple line. Click the {data} **Map data** panel on the side of the map to enable, disable, or zoom to your GPS data.",tracing:"The GPS track isn't sent to OpenStreetMap - the best way to use it is to draw on the map, using it as a guide for the new features that you add.",upload:"You can also [upload your GPS data to OpenStreetMap](https://www.openstreetmap.org/trace/create) for other users to use."},qa:{title:"Quality Assurance",intro:"*Quality Assurance* (Q/A) tools can find improper tags, disconnected roads, and other issues with OpenStreetMap, which mappers can then fix. To view existing Q/A issues, click the {data} **Map data** panel to enable a specific Q/A layer.",tools_h:"Tools",tools:"The following tools are currently supported: [KeepRight](https://www.keepright.at/) and [ImproveOSM](https://improveosm.org/en/). Expect iD to support [Osmose](https://osmose.openstreetmap.fr/) and more Q/A tools in the future.",issues_h:"Handling Issues",issues:"Handling Q/A issues is similar to handling notes. Click on a marker to view the issue details in the sidebar. Each tool has its own capabilities, but generally you can comment and/or close an issue."},field:{restrictions:{title:"Turn Restrictions Help",about:{title:"About",about:"This field allows you to inspect and modify turn restrictions. It displays a model of the selected intersection including other nearby connected roads.",from_via_to:"A turn restriction always contains: one **FROM way**, one **TO way**, and either one **VIA node** or one or more **VIA ways**.",maxdist:"The \"{distField}\" slider controls how far to search for additional connected roads.",maxvia:"The \"{viaField}\" slider adjusts how many via ways may be included in the search. (Tip: simple is better)"},inspecting:{title:"Inspecting",about:"Hover over any **FROM** segment to see whether it has any turn restrictions. Each possible **TO** destination will be drawn with a colored shadow showing whether a restriction exists.",from_shadow:"{fromShadow} **FROM segment**",allow_shadow:"{allowShadow} **TO Allowed**",restrict_shadow:"{restrictShadow} **TO Restricted**",only_shadow:"{onlyShadow} **TO Only**",restricted:"\"Restricted\" means that there is a turn restriction, for example \"No Left Turn\".",only:"\"Only\" means that a vehicle taking that path may only make that choice, for example \"Only Straight On\"."},modifying:{title:"Modifying",about:"To modify turn restrictions, first click on any starting **FROM** segment to select it. The selected segment will pulse, and all possible **TO** destinations will appear as turn symbols.",indicators:"Then, click on a turn symbol to toggle it between \"Allowed\", \"Restricted\", and \"Only\".",allow_turn:"{allowTurn} **TO Allowed**",restrict_turn:"{restrictTurn} **TO Restricted**",only_turn:"{onlyTurn} **TO Only**"},tips:{title:"Tips",simple:"**Prefer simple restrictions over complex ones.**",simple_example:"For example, avoid creating a via-way restriction if a simpler via-node turn restriction will do.",indirect:"**Some restrictions display the text \"(indirect)\" and are drawn lighter.**",indirect_example:"These restrictions exist because of another nearby restriction. For example, an \"Only Straight On\" restriction will indirectly create \"No Turn\" restrictions for all other paths through the intersection.",indirect_noedit:"You may not edit indirect restrictions. Instead, edit the nearby direct restriction."}}}},issues:{title:"Issues",key:"I",list_title:"Issues ({count})",errors:{list_title:"Errors ({count})"},warnings:{list_title:"Warnings ({count})"},no_issues:{message:"Everything looks fine",info:"Any issues will show up here as you edit"},almost_junction:{message:"{feature} is very close but not connected to {feature2}","highway-highway":{tip:"Intersecting highways should share a junction vertex."}},crossing_ways:{message:"{feature} crosses {feature2}","building-building":{tip:"Buildings should not intersect except on different layers."},"building-highway":{tip:"Highways crossing buildings should use bridges, tunnels, coverings, or entrances."},"building-railway":{tip:"Railways crossing buildings should use bridges or tunnels."},"building-waterway":{tip:"Waterways crossing buildings should use tunnels or different layers."},"highway-highway":{tip:"Crossing highways should use bridges, tunnels, or intersections."},"highway-railway":{tip:"Highways crossing railways should use bridges, tunnels, or level crossings."},"highway-waterway":{tip:"Highways crossing waterways should use bridges, tunnels, or fords."},"railway-railway":{tip:"Crossing railways should be connected or use bridges or tunnels."},"railway-waterway":{tip:"Railways crossing waterways should use bridges or tunnels."},"waterway-waterway":{tip:"Crossing waterways should be connected or use tunnels."},"tunnel-tunnel":{tip:"Crossing tunnels should use different layers."},"tunnel-tunnel_connectable":{tip:"Crossing tunnels should be connected or use different layers."},"bridge-bridge":{tip:"Crossing bridges should use different layers."},"bridge-bridge_connectable":{tip:"Crossing bridges should be connected or use different layers."},"indoor-indoor":{tip:"Crossing indoor features should use different levels."},"indoor-indoor_connectable":{tip:"Crossing indoor features should be connected or use different levels."}},deprecated_tag:{single:{message:"{feature} has the outdated tag \"{tag}\""},combination:{message:"{feature} has an outdated tag combination: {tags}"},tip:"Some tags become deprecated over time and should be replaced."},disconnected_way:{highway:{message:"{highway} is disconnected from other roads and paths",tip:"Highways should connect to other highways or building entrances."}},generic_name:{message:"{feature} has the generic name \"{name}\"",tip:"Names should be the actual, on-the-ground names of features."},many_deletions:{"points-lines-areas":{message:"Deleting {n} features: {p} points, {l} lines, and {a} areas"},"points-lines-areas-relations":{message:"Deleting {n} features: {p} points, {l} lines, {a} areas, and {r} relations"},tip:"Only redundant or nonexistent features should be deleted."},missing_tag:{any:{message:"{feature} has no tags"},descriptive:{message:"{feature} has no descriptive tags"},specific:{message:"{feature} has no \"{tag}\" tag"},tip:"Features must have tags that define what they are."},old_multipolygon:{message:"{multipolygon} has misplaced tags",tip:"Multipolygons should be tagged on their relation, not their outer way."},tag_suggests_area:{message:"{feature} should be a closed area based on the tag \"{tag}\"",tip:"Areas must have connected endpoints."},fix:{connect_almost_junction:{annotation:"Connected very close features."},connect_crossing_features:{annotation:"Connected crossing features."},connect_endpoints:{title:"Connect the ends",annotation:"Connected the endpoints of a way."},connect_features:{title:"Connect the features"},continue_from_start:{title:"Continue drawing from start"},continue_from_end:{title:"Continue drawing from end"},delete_feature:{title:"Delete this feature"},move_tags:{title:"Move the tags",annotation:"Moved tags."},remove_deprecated_tag:{annotation:"Removed an old tag."},remove_deprecated_tag_combo:{annotation:"Removed an old tag combination."},remove_generic_name:{title:"Remove the name",annotation:"Removed a generic name."},remove_tag:{title:"Remove the tag",annotation:"Removed tag."},remove_tags:{title:"Remove the tags"},reposition_features:{title:"Reposition the features"},select_preset:{title:"Select a feature type"},tag_as_disconnected:{title:"Tag as disconnected",annotation:"Tagged very close features as disconnected."},upgrade_tag:{title:"Upgrade the tag",annotation:"Upgraded an old tag."},upgrade_tag_combo:{title:"Upgrade the tags",annotation:"Upgraded an old tag combination."},use_bridge_or_tunnel:{title:"Use a bridge or tunnel"},use_different_layers:{title:"Use different layers"},use_different_levels:{title:"Use different levels"},use_tunnel:{title:"Use a tunnel"}}},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 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 or pressing the '{key}' key.",shortcuts:"You can view a list of commands along with their keyboard shortcuts by pressing the '{key}' key.",save:"Don't forget to regularly save your changes!",start:"Start mapping!"}},shortcuts:{title:"Keyboard shortcuts",tooltip:"Show the keyboard shortcuts screen.",toggle:{key:"?"},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",sidebar:"Toggle sidebar",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",search:"Find features matching search text"},with_selected:{title:"With feature selected",edit_menu:"Toggle edit menu",zoom_to:"Zoom to selected feature"},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",add_note:"'Add note' mode",place_point:"Place a point or note",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",detach_node:"Detach selected node from parent lines/areas",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"}},tools:{title:"Tools",info:{title:"Information",all:"Toggle all information panels",background:"Toggle background panel",history:"Toggle history panel",location:"Toggle location panel",measurement:"Toggle measurement panel"}}},units:{feet:"{quantity} ft",miles:"{quantity} mi",square_feet:"{quantity} sq ft",square_miles:"{quantity} sq mi",acres:"{quantity} ac",meters:"{quantity} m",kilometers:"{quantity} km",square_meters:"{quantity} m²",square_kilometers:"{quantity} km²",hectares:"{quantity} ha",area_pair:"{area1} ({area2})",arcdegrees:"{quantity}°",arcminutes:"{quantity}′",arcseconds:"{quantity}″",north:"N",south:"S",east:"E",west:"W",coordinate:"{coordinate}{direction}",coordinate_pair:"{latitude}, {longitude}"},wikidata:{identifier:"Identifier",label:"Label",description:"Description"},presets:{categories:{"category-barrier":{name:"Barrier Features"},"category-building":{name:"Building Features"},"category-golf-area":{name:"Golf Features"},"category-golf-line":{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-utility":{name:"Utility Features"},"category-water-area":{name:"Water Features"},"category-water-line":{name:"Water Features"}},fields:{access_simple:{label:"Allowed 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 allowed by law; a right of way"},no:{title:"Prohibited",description:"Access not allowed to the general public"},permissive:{title:"Permissive",description:"Access allowed until such time as the owner revokes the permission"},"private":{title:"Private",description:"Access allowed only with permission of the owner on an individual basis"},designated:{title:"Designated",description:"Access allowed according to signs or specific local laws"},destination:{title:"Destination",description:"Access allowed only to reach a destination"},dismount:{title:"Dismount",description:"Access allowed but rider must dismount"},permit:{title:"Permit",description:"Access allowed only with a valid permit or license"}}},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",unit:"Unit"}},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"},agrarian:{label:"Products"},amenity:{label:"Type"},animal_boarding:{label:"For Animals"},animal_breeding:{label:"For Animals"},animal_shelter:{label:"For Animals"},architect:{label:"Architect"},"area/highway":{label:"Type"},artist:{label:"Artist"},artwork_type:{label:"Type"},atm:{label:"ATM"},attraction:{label:"Type"},backrest:{label:"Backrest"},barrier:{label:"Type"},basin:{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:"Beauty Specialty"},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"},booth:{label:"Booth"},boules:{label:"Type"},boundary:{label:"Type"},brand:{label:"Brand"},brewery:{label:"Draft Beers"},bridge:{label:"Type",placeholder:"Default"},"bridge/support":{label:"Type"},building_area:{label:"Building"},building:{label:"Building"},"building/material":{label:"Material"},bunker_type:{label:"Type"},cables:{label:"Cables",placeholder:"1, 2, 3..."},"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..."},cash_in:{label:"Cash In"},castle_type:{label:"Type"},check_date:{label:"Last Checked Date"},clothes:{label:"Clothes"},club:{label:"Type"},collection_times:{label:"Collection Times"},colour:{label:"Color"},comment:{label:"Changeset Comment",placeholder:"Brief description of your contributions (required)"},communication_multi:{label:"Communication Types"},construction:{label:"Type"},"contact/webcam":{label:"Webcam URL",placeholder:"http://example.com/"},content:{label:"Content"},conveying:{label:"Movement Direction",options:{forward:"Forward",backward:"Backward",reversible:"Reversible"}},country:{label:"Country"},couplings:{label:"Couplings",placeholder:"1, 2, 3..."},covered:{label:"Covered"},craft:{label:"Type"},"crane/type":{label:"Crane Type",options:{portal_crane:"Portal Crane","floor-mounted_crane":"Floor-mounted Crane",travel_lift:"Travel Lift"}},crop:{label:"Crops"},crossing:{label:"Type"},cuisine:{label:"Cuisines"},currency_multi:{label:"Currency Types"},cutting:{label:"Type",placeholder:"Default"},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"}}},"dance/style":{label:"Dance Styles"},date:{label:"Date"},delivery:{label:"Delivery"},denomination:{label:"Denomination"},denotation:{label:"Denotation"},departures_board:{label:"Departures Board",options:{yes:"Yes",timetable:"Timetable",realtime:"Realtime",no:"None"}},description:{label:"Description"},design:{label:"Design"},destination_oneway:{label:"Destinations"},"destination/ref_oneway":{label:"Destination Road Numbers"},"destination/symbol_oneway":{label:"Destination Symbols"},devices:{label:"Devices",placeholder:"1, 2, 3..."},diaper:{label:"Diaper Changing Available"},diet_multi:{label:"Diet Types"},direction_cardinal:{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"}},direction_clock:{label:"Direction",options:{clockwise:"Clockwise",anticlockwise:"Counterclockwise"}},direction_vertex:{label:"Direction",options:{forward:"Forward",backward:"Backward",both:"Both / All"}},direction:{label:"Direction (Degrees Clockwise)",placeholder:"45, 90, 180, 270"},dispensing:{label:"Dispenses Prescriptions"},display:{label:"Display"},distance:{label:"Distance"},dock:{label:"Type"},dog:{label:"Dogs",options:{yes:"Allowed",leashed:"Leashed Only",no:"Not Allowed"}},drive_through:{label:"Drive-Through"},duration:{label:"Duration",placeholder:"00:00"},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"},embankment:{label:"Type",placeholder:"Default"},emergency:{label:"Emergency"},enforcement:{label:"Type"},entrance:{label:"Type"},except:{label:"Exceptions"},faces:{label:"Faces"},fax:{label:"Fax",placeholder:"+31 42 123 4567"},fee:{label:"Fee"},fence_type:{label:"Type"},"fire_hydrant/diameter":{label:"Diameter (mm, in, or letters)"},"fire_hydrant/pressure":{label:"Pressure (bar)"},"fire_hydrant/type":{label:"Shape",options:{pillar:"Pillar/Aboveground",underground:"Underground",wall:"Wall",pipe:"Capped Pipe"}},fireplace:{label:"Fireplace"},fitness_station:{label:"Equipment Type"},fixme:{label:"Fix Me"},"flag/type":{label:"Flag Type"},ford:{label:"Type",placeholder:"Default"},frequency_electrified:{label:"Operating Frequency"},frequency:{label:"Operating Frequency"},from:{label:"From"},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/output/electricity":{label:"Power Output",placeholder:"50 MW, 100 MW, 200 MW..."},"generator/source":{label:"Source"},"generator/type":{label:"Type"},government:{label:"Type"},grape_variety:{label:"Grape Varieties"},handicap:{label:"Handicap",placeholder:"1-18"},handrail:{label:"Handrail"},hashtags:{label:"Suggested Hashtags",placeholder:"#example"},healthcare:{label:"Type"},"healthcare/speciality":{label:"Specialties"},height:{label:"Height (Meters)"},highway:{label:"Type"},historic:{label:"Type"},"historic/civilization":{label:"Historic Civilization"},"historic/wreck/date_sunk":{label:"Date Sunk"},"historic/wreck/visible_at_high_tide":{label:"Visible At High Tide"},"historic/wreck/visible_at_low_tide":{label:"Visible At Low Tide"},hoops:{label:"Hoops",placeholder:"1, 2, 4..."},horse_dressage:{label:"Dressage Riding",options:{"undefined":"No",equestrian:"Yes"}},horse_riding:{label:"Horseback Riding",options:{"undefined":"No",horse_riding:"Yes"}},horse_scale:{label:"Horseback Riding Difficulty",placeholder:"Difficult, Dangerous...",options:{common:"Easy: No problems or difficulties. (default)",demanding:"Use with caution: Uneven way, occasional difficult passages.",difficult:"Difficult: Way narrow and exposed. May contain obstacles to step over and narrow passages.",critical:"Borderline: Passable only for experienced riders and horses. Major obstacles. Bridges should be examined carefully.",dangerous:"Dangerous: Passable only for very experienced riders and horses and only in good weather. Dismount.",impossible:"Impassable: Way or bridge not passable for horses. Too narrow, insuffient support, obstacles like ladders. Danger of life."}},horse_stables:{label:"Riding Stable",options:{"undefined":"No",stables:"Yes"}},iata:{label:"IATA"},icao:{label:"ICAO"},incline_steps:{label:"Incline",options:{up:"Up",down:"Down"}},incline:{label:"Incline"},indoor:{label:"Indoor"},industrial:{label:"Type"},information:{label:"Type"},inscription:{label:"Inscription"},intermittent_yes:{label:"Intermittent"},intermittent:{label:"Intermittent"},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)"},junction_line:{label:"Junction",options:{roundabout:"Roundabout",circular:"Traffic Circle",jughandle:"Jughandle"}},"junction/ref_oneway":{label:"Junction Number"},kerb:{label:"Curb"},label:{label:"Label"},lamp_type:{label:"Type"},landuse:{label:"Type"},lanes:{label:"Lanes",placeholder:"1, 2, 3..."},language_multi:{label:"Languages"},layer:{label:"Layer",placeholder:"0"},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_pool:{label:"Location",options:{outdoor:"Outdoor",indoor:"Indoor",roof:"Rooftop"}},location:{label:"Location"},man_made:{label:"Type"},manhole:{label:"Type"},map_size:{label:"Coverage"},map_type:{label:"Type"},material:{label:"Material"},maxheight:{label:"Max Height",placeholder:"4, 4.5, 5, 14'0\", 14'6\", 15'0\""},maxspeed:{label:"Speed Limit",placeholder:"40, 50, 60..."},"maxspeed/advisory":{label:"Advisory Speed Limit",placeholder:"40, 50, 60..."},maxstay:{label:"Max Stay"},maxweight:{label:"Max Weight"},memorial:{label:"Type"},minspeed:{label:"Minimum Speed Limit",placeholder:"20, 30, 40..."},monitoring_multi:{label:"Monitoring"},"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",reversible:"Reversible",alternating:"Alternating"}},oneway:{label:"One Way",options:{"undefined":"Assumed to be No",yes:"Yes",no:"No",reversible:"Reversible",alternating:"Alternating"}},"oneway/bicycle":{label:"One Way (Bicycles)"},opening_date:{label:"Expected Opening Date"},opening_hours:{label:"Hours"},operator:{label:"Operator"},outdoor_seating:{label:"Outdoor Seating"},par:{label:"Par",placeholder:"3, 4, 5..."},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"},phases:{label:"Phases",placeholder:"1, 2, 3..."},phone:{label:"Telephone",placeholder:"+31 42 123 4567"},"piste/difficulty_downhill":{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/difficulty_nordic":{label:"Difficulty",placeholder:"Easy, Intermediate, Advanced...",options:{novice:"Novice - Flat, no effort needed",easy:"Easy - Soft hills, short steep section",intermediate:"Intermediate - Steep section",advanced:"Advanced - Narrow, steep or icy section, sharp turn",expert:"Expert - Dangerous terrain around"}},"piste/difficulty_skitour":{label:"Difficulty",placeholder:"Easy, Intermediate, Advanced...",options:{novice:"Novice - L: <30° incline",easy:"Easy - WS: 30-35° incline",intermediate:"Intermediate - ZS: 35-40° incline",advanced:"Advanced - S: 40-45° incline",expert:"Expert - SS: 45–50° incline",freeride:"Freeride - AS: 50–55° incline",extreme:"Extreme - EX: >55° incline"}},"piste/difficulty":{label:"Difficulty",placeholder:"Easy, Intermediate, Advanced...",options:{novice:"Novice",easy:"Easy",intermediate:"Intermediate",advanced:"Advanced",expert:"Expert",freeride:"Freeride",extreme:"Extreme"}},"piste/grooming_downhill":{label:"Grooming",options:{classic:"Classic",mogul:"Mogul",backcountry:"Backcountry - no grooming"}},"piste/grooming_hike":{label:"Grooming",options:{classic:"Classic - Winter Hiking",backcountry:"Backcountry - Snowshoeing"}},"piste/grooming_nordic":{label:"Grooming",options:{classic:"Classic",backcountry:"Backcountry, no grooming","classic+skating":"Classic and Skating",scooter:"Scooter/Snowmobile",skating:"Skating"}},"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",connection:"Connection"}},place:{label:"Type"},plant:{label:"Plant"},"plant/output/electricity":{label:"Power Output",placeholder:"500 MW, 1000 MW, 2000 MW..."},"playground/baby":{label:"Baby Seat"},"playground/max_age":{label:"Maximum Age"},"playground/min_age":{label:"Minimum Age"},population:{label:"Population"},power_supply:{label:"Power Supply"},power:{label:"Type"},produce:{label:"Produce"},product:{label:"Products"},railway:{label:"Type"},"railway/position":{label:"Milestone Position",placeholder:"Distance to one decimal (123.4)"},"railway/signal/direction":{label:"Direction",options:{forward:"Forward",backward:"Backward",both:"Both / All"}},rating:{label:"Power Rating"},recycling_accepts:{label:"Accepts"},recycling_type:{label:"Type",placeholder:"Container, Center",options:{container:"Container",centre:"Center"}},ref_aeroway_gate:{label:"Gate Number"},ref_golf_hole:{label:"Hole Number",placeholder:"1-18"},ref_highway_junction:{label:"Junction Number"},ref_platform:{label:"Platform Number"},ref_road_number:{label:"Road Number"},ref_route:{label:"Route Number"},ref_runway:{label:"Runway Number",placeholder:"e.g. 01L/19R"},ref_stop_position:{label:"Stop Number"},ref_taxiway:{label:"Taxiway Name",placeholder:"e.g. A5"},ref:{label:"Reference Code"},"ref/isil":{label:"ISIL Code"},relation:{label:"Type"},religion:{label:"Religion"},restriction:{label:"Type"},restrictions:{label:"Turn Restrictions"},"roof/colour":{label:"Roof Color"},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"}},salt:{label:"Salt"},sanitary_dump_station:{label:"Toilet Disposal"},scuba_diving:{label:"Services"},"seamark/beacon_isolated_danger/shape":{label:"Shape"},"seamark/beacon_lateral/category":{label:"Category",options:{port:"Port",starboard:"Starboard",waterway_left:"Waterway Left",waterway_right:"Waterway Right",danger_left:"Danger Left",danger_right:"Danger Right"}},"seamark/beacon_lateral/colour":{label:"Color",options:{red:"Red",green:"Green",grey:"Grey"}},"seamark/beacon_lateral/shape":{label:"Shape"},"seamark/beacon_lateral/system":{label:"System",options:{"iala-a":"IALA A","iala-b":"IALA B",cevni:"CEVNI",other:"Other"}},"seamark/buoy_lateral/category":{label:"Category",options:{port:"Port",starboard:"Starboard",channel_left:"Channel Left",channel_right:"Channel Right",waterway_left:"Waterway Left",waterway_right:"Waterway Right",danger_left:"Danger Left",danger_right:"Danger Right",preferred_channel_port:"Preferred Channel Port",preferred_channel_starboard:"Preferred Channel Starboard"}},"seamark/buoy_lateral/colour":{label:"Color",options:{red:"Red",green:"Green","red;white;red;white":"Red-White-Red-White","green;white;green;white":"Green-White-Green-White","red;green;red":"Red-Green-Red","green;red;green":"Green-Red-Green",white:"White",yellow:"Yellow"}},"seamark/buoy_lateral/shape":{label:"Shape"},"seamark/buoy_lateral/system":{label:"System",options:{"iala-a":"IALA A","iala-b":"IALA B",cevni:"CEVNI",other:"Other"}},"seamark/mooring/category":{label:"Category"},"seamark/type":{label:"Seamark"},"seamark/wreck/category":{label:"Category"},seasonal:{label:"Seasonal"},seats:{label:"Seats",placeholder:"2, 4, 6..."},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"},"siren/purpose":{label:"Purpose"},"siren/type":{label:"Type",options:{pneumatic:"Pneumatic",electronic:"Electronic",other:"Other"}},site_type:{label:"Site 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:"Sources"},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_waterway:{label:"Structure",placeholder:"Unknown",options:{tunnel:"Tunnel"}},structure:{label:"Structure",placeholder:"Unknown",options:{bridge:"Bridge",tunnel:"Tunnel",embankment:"Embankment",cutting:"Cutting",ford:"Ford"}},studio:{label:"Type"},substance:{label:"Substance"},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"},"survey/date":{label:"Last Survey Date"},swimming_pool:{label:"Type"},"switch":{label:"Type",options:{mechanical:"Mechanical",circuit_breaker:"Circuit Breaker",disconnector:"Disconnector",earthing:"Earthing"}},tactile_paving:{label:"Tactile Paving"},takeaway:{label:"Takeaway",placeholder:"Yes, No, Takeaway Only...",options:{yes:"Yes",no:"No",only:"Takeaway Only"}},tidal:{label:"Tidal"},to:{label:"To"},"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"}},trade:{label:"Type"},traffic_calming:{label:"Type"},traffic_sign:{label:"Traffic Sign"},"traffic_sign/direction":{label:"Direction",options:{forward:"Forward",backward:"Backward",both:"Both / All"}},traffic_signals:{label:"Type"},"traffic_signals/direction":{label:"Direction",options:{forward:"Forward",backward:"Backward",both:"Both / All"}},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"}},transformer:{label:"Type",options:{distribution:"Distribution",generator:"Generator",converter:"Converter",traction:"Traction",auto:"Autotransformer",phase_angle_regulator:"Phase Angle Regulator",auxiliary:"Auxiliary",yes:"Unknown"}},trees:{label:"Trees"},tunnel:{label:"Type",placeholder:"Default"},usage_rail:{label:"Usage Type",options:{main:"Main",branch:"Branch",industrial:"Industrial",military:"Military",test:"Test",tourism:"Tourism"}},vending:{label:"Types of Goods"},visibility:{label:"Visibility",options:{house:"Up to 5m (16ft)",street:"5 to 20m (16 to 65ft)",area:"Over 20m (65ft)"}},"volcano/status":{label:"Volcano Status",options:{active:"Active",dormant:"Dormant",extinct:"Extinct"}},"volcano/type":{label:"Volcano Type",options:{stratovolcano:"Stratovolcano",shield:"Shield",scoria:"Scoria"}},voltage_electrified:{label:"Voltage"},voltage:{label:"Voltage"},"voltage/primary":{label:"Primary Voltage"},"voltage/secondary":{label:"Secondary Voltage"},"voltage/tertiary":{label:"Tertiary Voltage"},wall:{label:"Type"},water_point:{label:"Water Point"},water_source:{label:"Water Source"},water_volume:{label:"Water Reserve Volume (m³)"},water:{label:"Type"},waterway:{label:"Type"},website:{label:"Website",placeholder:"https://example.com"},wetland:{label:"Type"},wheelchair:{label:"Wheelchair Access"},wholesale:{label:"Wholesale"},width:{label:"Width (Meters)"},wikidata:{label:"Wikidata"},wikipedia:{label:"Wikipedia"},windings:{label:"Windings",placeholder:"1, 2, 3..."},"windings/configuration":{label:"Windings Configuration",options:{star:"Star / Wye",delta:"Delta","open-delta":"Open Delta",zigzag:"Zig Zag",open:"Open",scott:"Scott",leblanc:"Leblanc"}}},presets:{aerialway:{name:"Aerialway",terms:""},aeroway:{name:"Aeroway",terms:""},amenity:{name:"Amenity",terms:""},attraction:{name:"Attraction",terms:""},circular:{name:"Traffic Circle",terms:""},embankment:{name:"Embankment",terms:""},highway:{name:"Highway",terms:""},landuse:{name:"Land Use",terms:""},leisure:{name:"Leisure",terms:""},man_made:{name:"Man Made",terms:""},natural:{name:"Natural",terms:""},place:{name:"Place",terms:""},power:{name:"Power",terms:""},railway:{name:"Railway",terms:""},roundabout:{name:"Roundabout",terms:""},seamark:{name:"Seamark",terms:""},tourism:{name:"Tourism",terms:""},waterway:{name:"Waterway",terms:""},address:{name:"Address",terms:""},"advertising/billboard":{name:"Billboard",terms:""},"advertising/column":{name:"Advertising Column",terms:""},"aerialway/station":{name:"Aerialway Station",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/t-bar":{name:"T-bar Lift",terms:"tbar"},"aeroway/aerodrome":{name:"Airport",terms:"aerodrome,aeroway,airplane,airport,jet,plane"},"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"},"allotments/plot":{name:"Community Garden Plot",terms:""},"amenity/bus_station":{name:"Bus Station / Terminal",terms:""},"amenity/coworking_space":{name:"Coworking Space",terms:""},"amenity/ferry_terminal":{name:"Ferry Station / Terminal",terms:""},"amenity/nursing_home":{name:"Nursing Home",terms:""},"amenity/recycling":{name:"Recycling",terms:"bin,can,bottle,glass,garbage,rubbish,scrap,trash"},"amenity/register_office":{name:"Register Office",terms:""},"amenity/scrapyard":{name:"Scrap Yard",terms:""},"amenity/swimming_pool":{name:"Swimming Pool",terms:""},"amenity/animal_boarding":{name:"Animal Boarding Facility",terms:"boarding,cat,cattery,dog,horse,kennel,kitten,pet,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:"Biergarten",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/cafe":{name:"Cafe",terms:"bistro,coffee,tea"},"amenity/car_pooling":{name:"Car Pooling",terms:""},"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/clinic/abortion":{name:"Abortion Clinic",terms:""},"amenity/clinic/fertility":{name:"Fertility Clinic",terms:"egg,fertility,reproductive,sperm,ovulation"},"amenity/clock":{name:"Clock",terms:""},"amenity/clock/sundial":{name:"Sundial",terms:"gnomon,shadow"},"amenity/college":{name:"College Grounds",terms:"university,undergraduate school"},"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/dive_centre":{name:"Dive Center",terms:"diving,scuba"},"amenity/doctors":{name:"Doctor",terms:"medic*,physician"},"amenity/dojo":{name:"Dojo / Martial Arts Academy",terms:"martial arts,dojang"},"amenity/drinking_water":{name:"Drinking Water",terms:"potable water source,water fountain,drinking fountain,bubbler,water tap"},"amenity/driving_school":{name:"Driving School",terms:""},"amenity/embassy":{name:"Embassy",terms:""},"amenity/fast_food":{name:"Fast Food",terms:"restaurant,takeaway"},"amenity/fast_food/burger":{name:"Burger Fast Food",terms:"breakfast,dine,dining,dinner,drive-in,eat,grill,lunch,table"},"amenity/fast_food/chicken":{name:"Chicken Fast Food",terms:"breakfast,canteen,dine,dining,dinner,drive-in,eat,grill,lunch,table"},"amenity/fast_food/fish_and_chips":{name:"Fish & Chips Fast Food",terms:"breakfast,cafe,café,dine,dining,dinner,drive-in,eat,grill,lunch,table,french fries"},"amenity/fast_food/kebab":{name:"Kebab Fast Food",terms:"bar,breakfast,cafe,café,canteen,dine,dining,dinner,drive-in,eat,grill,lunch,table"},"amenity/fast_food/mexican":{name:"Mexican Fast Food",terms:"breakfast,dine,dining,dinner,drive-in,eat,grill,lunch,table,tacos,burritos,enchiladas,fajitas,nachos,tortillas,salsa,tamales,quesadillas"},"amenity/fast_food/pizza":{name:"Pizza Fast Food",terms:"dine,dining,dinner,drive-in,eat,lunch,table,deep dish,thin crust,slice"},"amenity/fast_food/sandwich":{name:"Sandwich Fast Food",terms:"breakfast,cafe,café,dine,dining,dinner,drive-in,eat,grill,lunch,table"},"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/language_school":{name:"Language School",terms:"esl"},"amenity/library":{name:"Library",terms:"book"},"amenity/love_hotel":{name:"Love Hotel",terms:""},"amenity/marketplace":{name:"Marketplace",terms:""},"amenity/monastery":{name:"Monastery Grounds",terms:"abbey,basilica,bethel,cathedral,chancel,chantry,chapel,church,fold,house of God,house of prayer,house of worship,minster,mission,monastery,mosque,oratory,parish,sacellum,sanctuary,shrine,synagogue,tabernacle,temple"},"amenity/money_transfer":{name:"Money Transfer Station",terms:"money order,check,bill,currency,finance,wire transfer,cable,person to person,cash to cash,exchange"},"amenity/motorcycle_parking":{name:"Motorcycle Parking",terms:""},"amenity/music_school":{name:"Music School",terms:"school of music"},"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:"Parking Lot",terms:"automobile parking,car lot,car parking,rv parking,truck parking,vehicle parking"},"amenity/parking/multi-storey":{name:"Multilevel Parking Garage",terms:"car,indoor parking,multistorey car park,parkade,parking building,parking deck,parking garage,parking ramp,parking structure"},"amenity/payment_centre":{name:"Payment Center",terms:"check,tax pay,bill pay,currency,finance,cash,money"},"amenity/payment_terminal":{name:"Payment Terminal",terms:"interactive kiosk,ekiosk,atm,bill pay,tax pay,phone pay,finance,cash,money transfer,card"},"amenity/pharmacy":{name:"Pharmacy Counter",terms:"apothecary,drug store,drugstore,med*,prescription"},"amenity/photo_booth":{name:"Photo Booth",terms:"photobooth,photo,booth,kiosk,camera"},"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:"Christian 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/hindu":{name:"Hindu Temple",terms:"kovil,devasthana,mandir,kshetram,alayam,shrine,temple"},"amenity/place_of_worship/jewish":{name:"Jewish Synagogue",terms:"jewish"},"amenity/place_of_worship/muslim":{name:"Muslim Mosque",terms:"muslim"},"amenity/place_of_worship/shinto":{name:"Shinto Shrine",terms:"kami,torii"},"amenity/place_of_worship/sikh":{name:"Sikh Temple",terms:"gurudwara,temple"},"amenity/place_of_worship/taoist":{name:"Taoist Temple",terms:"daoist,monastery,temple"},"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_container":{name:"Recycling Container",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/restaurant/american":{name:"American Restaurant",terms:"bar,breakfast,cafe,café,canteen,coffee,dine,dining,dinner,drive-in,eat,grill,lunch,table"},"amenity/restaurant/asian":{name:"Asian Restaurant",terms:"bar,breakfast,cafe,café,canteen,dine,dining,dinner,drive-in,eat,grill,lunch,table"},"amenity/restaurant/chinese":{name:"Chinese Restaurant",terms:"bar,breakfast,cafe,café,canteen,dine,dining,dinner,drive-in,eat,grill,lunch,table"},"amenity/restaurant/french":{name:"French Restaurant",terms:"bar,breakfast,cafe,café,canteen,dine,dining,dinner,drive-in,eat,grill,lunch,table"},"amenity/restaurant/german":{name:"German Restaurant",terms:"bar,breakfast,cafe,café,canteen,dine,dining,dinner,drive-in,eat,grill,lunch,table"},"amenity/restaurant/greek":{name:"Greek Restaurant",terms:"bar,breakfast,cafe,café,canteen,dine,dining,dinner,drive-in,eat,grill,lunch,table,gyros,pitas,olives"},"amenity/restaurant/indian":{name:"Indian Restaurant",terms:"bar,breakfast,dine,dining,dinner,drive-in,eat,grill,lunch,table,curry"},"amenity/restaurant/italian":{name:"Italian Restaurant",terms:"bar,breakfast,cafe,café,canteen,dine,dining,dinner,drive-in,eat,grill,lunch,table,pasta,pizza"},"amenity/restaurant/japanese":{name:"Japanese Restaurant",terms:"bar,breakfast,cafe,café,canteen,dine,dining,dinner,drive-in,eat,grill,lunch,table"},"amenity/restaurant/mexican":{name:"Mexican Restaurant",terms:"bar,breakfast,dine,dining,dinner,drive-in,eat,grill,lunch,table,tacos,burritos,enchiladas,fajitas,nachos,tortillas,salsa,tamales,quesadillas"},"amenity/restaurant/noodle":{name:"Noodle Restaurant",terms:"bar,breakfast,cafe,café,canteen,dine,dining,dinner,drive-in,eat,grill,lunch,table,ramen noodles,soup,soba noodles,cellophane noodles,rice noodles"},"amenity/restaurant/pizza":{name:"Pizza Restaurant",terms:"bar,dine,dining,dinner,drive-in,eat,lunch,table,deep dish,thin crust,slice"},"amenity/restaurant/seafood":{name:"Seafood Restaurant",terms:"bar,breakfast,cafe,café,dine,dining,dinner,drive-in,eat,grill,lunch,table,fish,shellfish,molluscs,crustaceans,clams,oysters,lobsters,crab,shrimp,squid,octopus"},"amenity/restaurant/steakhouse":{name:"Steakhouse",terms:"bar,breakfast,cafe,café,canteen,dine,dining,dinner,drive-in,eat,grill,lunch,table,steak house,chop house,beef"},"amenity/restaurant/sushi":{name:"Sushi Restaurant",terms:"bar,breakfast,cafe,café,canteen,dine,dining,dinner,drive-in,eat,grill,lunch,table"},"amenity/restaurant/thai":{name:"Thai Restaurant",terms:"bar,breakfast,cafe,café,canteen,dine,dining,dinner,drive-in,eat,grill,lunch,table"},"amenity/restaurant/turkish":{name:"Turkish Restaurant",terms:"bar,breakfast,cafe,café,canteen,dine,dining,dinner,drive-in,eat,grill,lunch,table"},"amenity/restaurant/vietnamese":{name:"Vietnamese Restaurant",terms:"bar,breakfast,cafe,café,canteen,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/shelter/gazebo":{name:"Gazebo",terms:""},"amenity/shelter/lean_to":{name:"Lean-To",terms:""},"amenity/shelter/picnic_shelter":{name:"Picnic Shelter",terms:"pavilion"},"amenity/shelter/public_transport":{name:"Transit Shelter",terms:"bus stop,metro stop,waiting"},"amenity/shower":{name:"Shower",terms:"rain closet"},"amenity/smoking_area":{name:"Smoking Area",terms:""},"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,care home,assisted 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,assisted living"},"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/theatre/type/amphi":{name:"Amphitheatre",terms:"open air,outdoor,greek,ampi"},"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,graduate school,PhD program,master's degree program"},"amenity/vehicle_inspection":{name:"Vehicle Inspection",terms:"car inspection"},"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/coffee":{name:"Coffee Vending Machine",terms:"coffee"},"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/electronics":{name:"Electronics Vending Machine",terms:"cable,charger,earbud,headphone,phone,tablet"},"amenity/vending_machine/elongated_coin":{name:"Flat Coin Vending Machine",terms:"coin,crush,elongated,flatten,penny,souvenir"},"amenity/vending_machine/excrement_bags":{name:"Excrement Bag Vending Machine",terms:"excrement bags,poop,dog,animal"},"amenity/vending_machine/feminine_hygiene":{name:"Feminine Hygiene Vending Machine",terms:"condom,tampon,pad,woman,women,menstrual hygiene products,personal care"},"amenity/vending_machine/food":{name:"Food Vending Machine",terms:"food"},"amenity/vending_machine/fuel":{name:"Gas Pump",terms:"petrol,fuel,gasoline,propane,diesel,lng,cng,biodiesel"},"amenity/vending_machine/ice_cream":{name:"Ice Cream Vending Machine",terms:"chocolate,ice cream,frozen,popsicle,vanilla"},"amenity/vending_machine/newspapers":{name:"Newspaper Vending Machine",terms:"newspaper"},"amenity/vending_machine/parcel_pickup_dropoff":{name:"Parcel Pickup/Dropoff Locker",terms:"mail,parcel,pickup"},"amenity/vending_machine/parcel_pickup":{name:"Parcel Pickup Locker",terms:"amazon,locker,mail,parcel,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/stamps":{name:"Postage Vending Machine",terms:"mail,postage,stamp"},"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/waste/dog_excrement":{name:"Dog Excrement Bin",terms:"bin,garbage,rubbish,litter,trash,poo,dog"},"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:""},"attraction/amusement_ride":{name:"Amusement Ride",terms:"theme park,carnival ride"},"attraction/animal":{name:"Animal",terms:"zoo,theme park,animal park,lion,tiger,bear"},"attraction/big_wheel":{name:"Big Wheel",terms:"ferris wheel,theme park,amusement ride"},"attraction/bumper_car":{name:"Bumper Car",terms:"theme park,dodgem cars,autoscooter"},"attraction/bungee_jumping":{name:"Bungee Jumping",terms:"theme park,bungy jumping,jumping platform"},"attraction/carousel":{name:"Carousel",terms:"theme park,roundabout,merry-go-round,galloper,jumper,horseabout,flying horses"},"attraction/dark_ride":{name:"Dark Ride",terms:"theme park,ghost train"},"attraction/drop_tower":{name:"Drop Tower",terms:"theme park,amusement ride,gondola,tower,big drop"},"attraction/maze":{name:"Maze",terms:"theme park,amusement ride,labyrinth"},"attraction/pirate_ship":{name:"Pirate Ship",terms:"theme park,carnival ride,amusement ride"},"attraction/river_rafting":{name:"River Rafting",terms:"theme park,aquatic park,water park,rafting simulator,river rafting ride,river rapids ride"},"attraction/roller_coaster":{name:"Roller Coaster",terms:"theme park,amusement ride"},"attraction/summer_toboggan":{name:"Summer Toboggan",terms:"alpine slide,mountain coaster"},"attraction/train":{name:"Tourist Train",terms:"theme park,rackless train,road train,Tschu-Tschu train,dotto train,park train"},"attraction/water_slide":{name:"Water Slide",terms:"theme park,aquatic park,water park,flumes,water chutes,hydroslides"},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/fence/railing":{name:"Railing",terms:"railing,handrail,guard rail"},"barrier/gate":{name:"Gate",terms:""},"barrier/guard_rail":{name:"Guard Rail",terms:"guardrail,traffic barrier,crash barrier,median barrier,roadside barrier,Armco barrier"},"barrier/hedge":{name:"Hedge",terms:""},"barrier/kerb":{name:"Curb",terms:""},"barrier/kerb/flush":{name:"Flush Curb",terms:"even curb,level curb,tactile curb"},"barrier/kerb/lowered":{name:"Lowered Curb",terms:"curb cut,curb ramp,kerb ramp,dropped kerb,pram ramp"},"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:""},"bridge/support":{name:"Bridge Support",terms:""},"bridge/support/pier":{name:"Bridge Pier",terms:""},building:{name:"Building",terms:""},"building/bunker":{name:"Bunker",terms:""},"building/entrance":{name:"Entrance/Exit",terms:""},"building/train_station":{name:"Train Station Building",terms:""},"building/apartments":{name:"Apartment Building",terms:""},"building/barn":{name:"Barn",terms:""},"building/boathouse":{name:"Boathouse",terms:""},"building/bungalow":{name:"Bungalow",terms:"home,detached"},"building/cabin":{name:"Cabin",terms:""},"building/carport":{name:"Carport",terms:"covered parking space,garage,car,porch"},"building/cathedral":{name:"Cathedral Building",terms:""},"building/chapel":{name:"Chapel Building",terms:""},"building/church":{name:"Church Building",terms:""},"building/civic":{name:"Civic 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/farm_auxiliary":{name:"Farm Building",terms:""},"building/farm":{name:"Farm House",terms:""},"building/garage":{name:"Garage",terms:""},"building/garages":{name:"Garages",terms:""},"building/grandstand":{name:"Grandstand",terms:"tribune,stand,stands,bleachers"},"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/mosque":{name:"Mosque Building",terms:""},"building/pavilion":{name:"Pavilion Building",terms:"sports"},"building/public":{name:"Public Building",terms:""},"building/residential":{name:"Residential Building",terms:""},"building/retail":{name:"Retail Building",terms:""},"building/roof":{name:"Roof",terms:""},"building/ruins":{name:"Building Ruins",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/service":{name:"Service Building",terms:""},"building/shed":{name:"Shed",terms:""},"building/stable":{name:"Stable",terms:""},"building/stadium":{name:"Stadium Building",terms:""},"building/static_caravan":{name:"Static Mobile Home",terms:""},"building/temple":{name:"Temple Building",terms:""},"building/terrace":{name:"Row Houses",terms:"home,terrace,brownstone,family,residence,dwelling"},"building/transportation":{name:"Transportation Building",terms:""},"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"},"club/sport":{name:"Sports Club",terms:"athletics club,sporting club,sports association,sports society"},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/chimney_sweeper":{name:"Chimney Sweeper",terms:""},"craft/clockmaker":{name:"Clockmaker",terms:""},"craft/confectionery":{name:"Candy Maker",terms:"sweet,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/sculptor":{name:"Sculptor",terms:""},"craft/shoemaker":{name:"Shoemaker",terms:"cobbler"},"craft/stonemason":{name:"Stonemason",terms:"masonry"},"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:""},"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_alarm":{name:"Fire Alarm Call Box",terms:""},"emergency/fire_extinguisher":{name:"Fire Extinguisher",terms:""},"emergency/fire_hydrant":{name:"Fire Hydrant",terms:"fire plug,fire water well,hydrant"},"emergency/first_aid_kit":{name:"First Aid Kit",terms:"bandage,first aid,med,med kit,medic*,medkit"},"emergency/life_ring":{name:"Life Ring",terms:"life buoy,kisby ring,kisbie ring,perry buoy"},"emergency/lifeguard":{name:"Lifeguard",terms:"CPR,rescue"},"emergency/phone":{name:"Emergency Phone",terms:""},"emergency/siren":{name:"Siren",terms:"air raid,loud,noise,storm,tornado,warning"},"emergency/water_tank":{name:"Emergency Water Tank",terms:"water tank,cistern,reservoir"},entrance:{name:"Entrance/Exit",terms:"entrance,exit,door"},ford:{name:"Ford",terms:""},"golf/bunker":{name:"Sand Trap",terms:"hazard,bunker"},"golf/cartpath_service":{name:"Golf Cartpath / Service Road",terms:""},"golf/cartpath":{name:"Golf Cartpath",terms:""},"golf/driving_range":{name:"Driving Range",terms:""},"golf/fairway":{name:"Fairway",terms:""},"golf/green":{name:"Putting Green",terms:""},"golf/hole":{name:"Golf Hole",terms:""},"golf/lateral_water_hazard":{name:"Lateral Water Hazard",terms:""},"golf/path":{name:"Golf Walking Path",terms:""},"golf/rough":{name:"Rough",terms:""},"golf/tee":{name:"Tee Box",terms:"teeing ground"},"golf/water_hazard":{name:"Water Hazard",terms:""},healthcare:{name:"Healthcare Facility",terms:"clinic,doctor,disease,health,institution,sick,surgery,wellness"},"healthcare/alternative":{name:"Alternative Medicine",terms:"acupuncture,anthroposophical,applied kinesiology,aromatherapy,ayurveda,herbalism,homeopathy,hydrotherapy,hypnosis,naturopathy,osteopathy,reflexology,reiki,shiatsu,traditional,tuina,unani"},"healthcare/alternative/chiropractic":{name:"Chiropractor",terms:"back,pain,spine"},"healthcare/audiologist":{name:"Audiologist",terms:"ear,hearing,sound"},"healthcare/birthing_center":{name:"Birthing Center",terms:"baby,childbirth,delivery,labour,labor,pregnancy"},"healthcare/blood_donation":{name:"Blood Donor Center",terms:"blood bank,blood donation,blood transfusion,apheresis,plasmapheresis,plateletpheresis,stem cell donation"},"healthcare/hospice":{name:"Hospice",terms:"terminal,illness"},"healthcare/laboratory":{name:"Medical Laboratory",terms:"medical_laboratory,medical_lab,blood_check"},"healthcare/midwife":{name:"Midwife",terms:"baby,childbirth,delivery,labour,labor,pregnancy"},"healthcare/occupational_therapist":{name:"Occupational Therapist",terms:"therapist,therapy"},"healthcare/optometrist":{name:"Optometrist",terms:"eye,glasses,lasik,lenses,vision"},"healthcare/physiotherapist":{name:"Physiotherapist",terms:"physical,therapist,therapy"},"healthcare/podiatrist":{name:"Podiatrist",terms:"foot,feet,nails"},"healthcare/psychotherapist":{name:"Psychotherapist",terms:"anxiety,counselor,depression,mental health,mind,suicide,therapist,therapy"},"healthcare/rehabilitation":{name:"Rehabilitation Facility",terms:"rehab,therapist,therapy"},"healthcare/speech_therapist":{name:"Speech Therapist",terms:"speech,therapist,therapy,voice"},"highway/bus_stop":{name:"Bus Stop / Platform",terms:""},"highway/bridleway":{name:"Bridle Path",terms:"bridleway,equestrian,horse,trail"},"highway/bus_guideway":{name:"Bus Guideway",terms:""},"highway/construction":{name:"Road Closed",terms:"closed,closure,construction"},"highway/corridor":{name:"Indoor Corridor",terms:"gallery,hall,hallway,indoor,passage,passageway"},"highway/crossing/zebra-raised":{name:"Marked Crosswalk (Raised)",terms:"zebra crossing,marked crossing,crosswalk,flat top,hump,speed,slow"},"highway/crossing/zebra":{name:"Marked Crosswalk",terms:"zebra crossing,marked crossing,crosswalk"},"highway/crossing/marked-raised":{name:"Marked Crosswalk (Raised)",terms:"zebra crossing,marked crossing,crosswalk,flat top,hump,speed,slow"},"highway/crossing/marked":{name:"Marked Crosswalk",terms:"zebra crossing,marked crossing,crosswalk"},"highway/crossing/unmarked-raised":{name:"Unmarked Crossing (Raised)",terms:"flat top,hump,speed,slow"},"highway/crossing/unmarked":{name:"Unmarked Crossing",terms:""},"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/footway/zebra-raised":{name:"Marked Crosswalk (Raised)",terms:"zebra crossing,marked crossing,crosswalk,flat top,hump,speed,slow"},"highway/footway/zebra":{name:"Marked Crosswalk",terms:"zebra crossing,marked crossing,crosswalk"},"highway/footway/conveying":{name:"Moving Walkway",terms:"moving sidewalk,autwalk,skywalk,travolator,travelator,travellator,conveyor"},"highway/footway/marked-raised":{name:"Marked Crosswalk (Raised)",terms:"zebra crossing,marked crossing,crosswalk,flat top,hump,speed,slow"},"highway/footway/marked":{name:"Marked Crosswalk",terms:"zebra crossing,marked crossing,crosswalk"},"highway/footway/sidewalk":{name:"Sidewalk",terms:"pavement,sidepath"},"highway/footway/unmarked-raised":{name:"Unmarked Crossing (Raised)",terms:"flat top,hump,speed,slow"},"highway/footway/unmarked":{name:"Unmarked Crossing",terms:""},"highway/give_way":{name:"Yield Sign",terms:"give way,yield,sign"},"highway/living_street":{name:"Living Street",terms:""},"highway/milestone":{name:"Highway Milestone",terms:"milestone,marker"},"highway/mini_roundabout":{name:"Mini-Roundabout",terms:""},"highway/motorway_junction":{name:"Motorway Junction / Exit",terms:"exit"},"highway/motorway_link":{name:"Motorway Link",terms:"exit,ramp,road,street,on ramp,off ramp"},"highway/motorway":{name:"Motorway",terms:"autobahn,expressway,freeway,highway,interstate,parkway,road,street,thruway,turnpike"},"highway/passing_place":{name:"Passing Place",terms:"turnout, pullout"},"highway/path":{name:"Path",terms:"hike,hiking,trackway,trail,walk"},"highway/pedestrian_area":{name:"Pedestrian Area",terms:"center,centre,plaza,quad,square,walkway"},"highway/pedestrian_line":{name:"Pedestrian Street",terms:"center,centre,plaza,quad,square,walkway"},"highway/primary_link":{name:"Primary Link",terms:"on ramp,off ramp,ramp,road,street"},"highway/primary":{name:"Primary Road",terms:"road,street"},"highway/raceway":{name:"Racetrack (Motorsport)",terms:"auto*,formula one,kart,motocross,nascar,race*,track"},"highway/residential":{name:"Residential Road",terms:"road,street"},"highway/rest_area":{name:"Rest Area",terms:"rest stop"},"highway/road":{name:"Unknown Road",terms:"road,street"},"highway/secondary_link":{name:"Secondary Link",terms:"on ramp,off ramp,ramp,road,street"},"highway/secondary":{name:"Secondary Road",terms:"road,street"},"highway/service":{name:"Service Road",terms:"road,street"},"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/steps/conveying":{name:"Escalator",terms:"moving staircase,moving stairway,people mover"},"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:"on ramp,off ramp,ramp,road,street"},"highway/tertiary":{name:"Tertiary Road",terms:"road,street"},"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:"on ramp,off ramp,ramp,road,street"},"highway/trunk":{name:"Trunk Road",terms:"road,street"},"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:"road,street"},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:"dedicatory,epitaph,remember,remembrance,memory,monument,stolperstein"},"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:""},"historic/wreck":{name:"Shipwreck",terms:"hull,mast,maritime,remains,ship,boat"},"internet_access/wlan":{name:"Wi-Fi Hotspot",terms:"wi-fi,wifi,hotspot"},junction:{name:"Junction",terms:""},"landuse/basin":{name:"Basin",terms:""},"landuse/farm":{name:"Farmland",terms:""},"landuse/pond":{name:"Pond",terms:""},"landuse/reservoir":{name:"Reservoir",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/brownfield":{name:"Brownfield",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:"Managed Forest",terms:"cut,forest,forestry,lumber,silviculture,tree"},"landuse/garages":{name:"Garage Landuse",terms:""},"landuse/grass":{name:"Grass",terms:""},"landuse/greenfield":{name:"Greenfield",terms:""},"landuse/greenhouse_horticulture":{name:"Greenhouse Horticulture",terms:"flower,greenhouse,horticulture,grow,vivero"},"landuse/harbour":{name:"Harbor",terms:"boat"},"landuse/industrial":{name:"Industrial Area",terms:""},"landuse/industrial/scrap_yard":{name:"Scrap Yard",terms:"car,junk,metal,salvage,scrap,u-pull-it,vehicle,wreck,yard"},"landuse/industrial/slaughterhouse":{name:"Slaughterhouse",terms:"abattoir,beef,butchery,calf,chicken,cow,killing house,meat,pig,pork,poultry,shambles,stockyard"},"landuse/landfill":{name:"Landfill",terms:"dump"},"landuse/meadow":{name:"Meadow",terms:""},"landuse/military":{name:"Military Area",terms:""},"landuse/military/airfield":{name:"Military Airfield",terms:"aerodrome,aeroway,air force,airplane,airport,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/religious":{name:"Religious Area",terms:""},"landuse/residential":{name:"Residential Area",terms:""},"landuse/residential/apartments":{name:"Apartment Complex",terms:"flat,residence,tenement"},"landuse/retail":{name:"Retail Area",terms:""},"landuse/vineyard":{name:"Vineyard",terms:"grape,wine"},"leisure/adult_gaming_centre":{name:"Adult Gaming Center",terms:"gambling,slot machine"},"leisure/amusement_arcade":{name:"Amusement Arcade",terms:"pay-to-play games,video games,driving simulators,pinball machines"},"leisure/bandstand":{name:"Bandstand",terms:""},"leisure/beach_resort":{name:"Beach Resort",terms:""},"leisure/bird_hide":{name:"Bird Hide",terms:"machan,ornithology"},"leisure/bleachers":{name:"Bleachers",terms:"crowd,bench,sports,stand,stands,seat,seating"},"leisure/bowling_alley":{name:"Bowling Alley",terms:"bowling center"},"leisure/common":{name:"Common",terms:"open space"},"leisure/dance":{name:"Dance Hall",terms:"ballroom,jive,swing,tango,waltz"},"leisure/dancing_school":{name:"Dance School",terms:"jive,swing,tango,waltz,dance teaching"},"leisure/dog_park":{name:"Dog Park",terms:""},"leisure/firepit":{name:"Firepit",terms:"fireplace,campfire"},"leisure/fishing":{name:"Fishing Spot",terms:"angler"},"leisure/fitness_centre":{name:"Gym / Fitness Center",terms:"health,gym,leisure,studio"},"leisure/fitness_centre/yoga":{name:"Yoga Studio",terms:"studio,asanas,modern yoga,meditation"},"leisure/fitness_station":{name:"Outdoor Fitness Station",terms:"exercise,fitness,gym,trim trail"},"leisure/fitness_station/balance_beam":{name:"Exercise Balance Beam",terms:"balance,exercise,fitness,gym,trim trail"},"leisure/fitness_station/box":{name:"Exercise Box",terms:"box,exercise,fitness,gym,jump,trim trail"},"leisure/fitness_station/horizontal_bar":{name:"Exercise Horizontal Bar",terms:"bar,chinup,chin up,exercise,fitness,gym,pullup,pull up,trim trail"},"leisure/fitness_station/horizontal_ladder":{name:"Exercise Monkey Bars",terms:"bar,chinup,chin up,exercise,fitness,gym,ladder,monkey bars,pullup,pull up,trim trail"},"leisure/fitness_station/hyperextension":{name:"Hyperextension Station",terms:"back,exercise,extension,fitness,gym,roman chair,trim trail"},"leisure/fitness_station/parallel_bars":{name:"Parallel Bars",terms:"bar,dip,exercise,fitness,gym,trim trail"},"leisure/fitness_station/push-up":{name:"Push-Up Station",terms:"bar,exercise,fitness,gym,pushup,push up,trim trail"},"leisure/fitness_station/rings":{name:"Exercise Rings",terms:"exercise,fitness,gym,muscle up,pullup,pull up,trim trail"},"leisure/fitness_station/sign":{name:"Exercise Instruction Sign",terms:"exercise,fitness,gym,trim trail"},"leisure/fitness_station/sit-up":{name:"Sit-Up Station",terms:"crunch,exercise,fitness,gym,situp,sit up,trim trail"},"leisure/fitness_station/stairs":{name:"Exercise Stairs",terms:"exercise,fitness,gym,steps,trim trail"},"leisure/garden":{name:"Garden",terms:""},"leisure/golf_course":{name:"Golf Course",terms:"links"},"leisure/hackerspace":{name:"Hackerspace",terms:"makerspace,hackspace,hacklab"},"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/outdoor_seating":{name:"Outdoor Seating Area",terms:"al fresco,beer garden,dining,cafe,restaurant,pub,bar,patio"},"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/picnic_table/chess":{name:"Chess Table",terms:"bench,chess board,checkerboard,checkers,chequerboard,game table"},"leisure/pitch":{name:"Sport Pitch",terms:"field"},"leisure/pitch/american_football":{name:"American Football Field",terms:"football,gridiron"},"leisure/pitch/australian_football":{name:"Australian Football Field",terms:"Aussie,AFL,football"},"leisure/pitch/badminton":{name:"Badminton Court",terms:""},"leisure/pitch/baseball":{name:"Baseball Field",terms:""},"leisure/pitch/basketball":{name:"Basketball Court",terms:""},"leisure/pitch/beachvolleyball":{name:"Beach Volleyball Court",terms:"volleyball"},"leisure/pitch/boules":{name:"Boules/Bocce Court",terms:"bocce,lyonnaise,pétanque"},"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/netball":{name:"Netball Court",terms:""},"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/softball":{name:"Softball Field",terms:"softball,diamond"},"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/sauna":{name:"Sauna",terms:""},"leisure/slipway":{name:"Slipway",terms:"boat launch,boat ramp,boat landing"},"leisure/sports_centre":{name:"Sports Center / Complex",terms:""},"leisure/sports_centre/climbing":{name:"Climbing Gym",terms:"abseiling,artificial climbing wall,belaying,bouldering,rock climbing facility,indoor rock wall,rappeling,rock gym,ropes"},"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,aquatics"},"leisure/track":{name:"Racetrack (Non-Motorsport)",terms:"cycle,dog,greyhound,horse,race*,track"},"leisure/track/horse_racing":{name:"Racetrack (Horse Racing)",terms:"race*,horse,track"},"leisure/track/running":{name:"Racetrack (Running)",terms:"race*,running,sprint,track"},"leisure/water_park":{name:"Water Park",terms:"swim,pool,dive"},line:{name:"Line",terms:""},"man_made/adit":{name:"Adit",terms:"entrance,underground,mine,cave"},"man_made/antenna":{name:"Antenna",terms:"broadcast,cell phone,cell,communication,mobile phone,radio,television,transmission,tv"},"man_made/breakwater":{name:"Breakwater",terms:""},"man_made/bridge":{name:"Bridge",terms:""},"man_made/bunker_silo":{name:"Bunker Silo",terms:"Silage,Storage"},"man_made/chimney":{name:"Chimney",terms:""},"man_made/clearcut":{name:"Clearcut Forest",terms:"cut,forest,lumber,tree,wood"},"man_made/crane":{name:"Crane",terms:""},"man_made/cutline":{name:"Cut line",terms:""},"man_made/embankment":{name:"Embankment",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/mast/communication":{name:"Communication 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/mast/communication/mobile_phone":{name:"Mobile Phone Mast",terms:"antenna,cell mast,cell phone mast,cell phone tower,cell tower,communication mast,communication tower,guyed tower,mobile phone tower,transmission mast,transmission tower"},"man_made/mast/communication/radio":{name:"Radio Broadcast Mast",terms:"antenna,broadcast tower,communication mast,communication tower,guyed tower,radio mast,radio tower,transmission mast,transmission tower"},"man_made/mast/communication/television":{name:"Television Broadcast Mast",terms:"antenna,broadcast tower,communication mast,communication tower,guyed tower,television mast,television tower,transmission mast,transmission tower,tv mast,tv tower"},"man_made/monitoring_station":{name:"Monitoring Station",terms:"weather,earthquake,seismology,air,gps"},"man_made/observatory":{name:"Observatory",terms:"astronomical,meteorological"},"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,jetty"},"man_made/pipeline":{name:"Pipeline",terms:"oil,natural gas,water,sewer,sewage"},"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":{name:"Surveillance",terms:"anpr,alpr,camera,car plate recognition,cctv,guard,license plate recognition,monitoring,number plate recognition,security,video,webcam"},"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/survey_point":{name:"Survey Point",terms:"trig point,triangulation pillar,trigonometrical station"},"man_made/tower":{name:"Tower",terms:""},"man_made/tower/bell_tower":{name:"Bell Tower",terms:"belfry,bell gable,campanile,church tower,klockstapel"},"man_made/tower/communication":{name:"Communication Tower",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/tower/minaret":{name:"Minaret",terms:"Islam,mosque,Muezzin,Muslim"},"man_made/tower/observation":{name:"Observation Tower",terms:"lookout tower,fire tower"},"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/watermill":{name:"Watermill",terms:"water,wheel,mill"},"man_made/windmill":{name:"Windmill",terms:"wind,wheel,mill"},"man_made/works":{name:"Factory",terms:"assembly,build,brewery,car,plant,plastic,processing,manufacture,refinery"},manhole:{name:"Manhole",terms:"cover,hole,sewer,sewage,telecom"},"manhole/drain":{name:"Storm Drain",terms:"cover,drain,hole,rain,sewer,sewage,storm"},"manhole/telecom":{name:"Telecom Manhole",terms:"cover,phone,hole,telecom,telephone,bt"},"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:"crag,escarpment,rock face,scarp"},"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/mud":{name:"Mud",terms:"wetland"},"natural/peak":{name:"Peak",terms:"acme,aiguille,alp,climax,crest,crown,hill,mount,mountain,pinnacle,summit,tip,top"},"natural/reef":{name:"Reef",terms:"barrier,coral,ocean,sand,shoal"},"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/basin":{name:"Basin",terms:"detention,drain,overflow,rain,retention"},"natural/water/canal":{name:"Canal",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/water/river":{name:"River",terms:"beck,branch,brook,course,creek,estuary,rill,riverbank,rivulet,run,runnel,stream,tributary,watercourse"},"natural/water/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"},"natural/wetland":{name:"Wetland",terms:"bog,marsh,reedbed,swamp,tidalflat"},"natural/wood":{name:"Wood",terms:"tree"},"noexit/yes":{name:"No Exit",terms:"no exit,road end,dead end"},office:{name:"Office",terms:""},"office/administrative":{name:"Administrative Office",terms:""},"office/physician":{name:"Physician",terms:""},"office/travel_agent":{name:"Travel Agency",terms:""},"office/accountant":{name:"Accountant Office",terms:""},"office/adoption_agency":{name:"Adoption Agency",terms:""},"office/advertising_agency":{name:"Advertising Agency",terms:"ad,ad agency,advert agency,advertising,marketing"},"office/architect":{name:"Architect Office",terms:""},"office/association":{name:"Nonprofit Organization Office",terms:"association,non-profit,nonprofit,organization,society"},"office/charity":{name:"Charity Office",terms:"charitable organization"},"office/company":{name:"Corporate 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/energy_supplier":{name:"Energy Supplier Office",terms:"electricity,energy company,energy utility,gas utility"},"office/estate_agent":{name:"Real Estate Office",terms:"real estate"},"office/financial":{name:"Financial Office",terms:""},"office/forestry":{name:"Forestry Office",terms:"forest,ranger"},"office/foundation":{name:"Foundation Office",terms:""},"office/government":{name:"Government Office",terms:""},"office/government/register_office":{name:"Register Office",terms:"clerk,marriage,death,birth,certificate"},"office/government/tax":{name:"Tax and Revenue Office",terms:"fiscal authorities,revenue office,tax office"},"office/guide":{name:"Tour Guide Office",terms:"dive guide,mountain guide,tour guide"},"office/insurance":{name:"Insurance Office",terms:""},"office/it":{name:"Information Technology Office",terms:"computer,information,software,technology"},"office/lawyer":{name:"Law Office",terms:""},"office/lawyer/notary":{name:"Notary Office",terms:""},"office/moving_company":{name:"Moving Company Office",terms:"relocation"},"office/newspaper":{name:"Newspaper Office",terms:""},"office/ngo":{name:"NGO Office",terms:"ngo,non government,non-government,organization,organisation"},"office/notary":{name:"Notary Office",terms:"clerk,deeds,estate,signature,wills"},"office/political_party":{name:"Political Party",terms:""},"office/private_investigator":{name:"Private Investigator Office",terms:"PI,private eye,private detective"},"office/quango":{name:"Quasi-NGO Office",terms:"ngo,non government,non-government,organization,organisation,quasi autonomous,quasi-autonomous"},"office/religion":{name:"Religious Office",terms:""},"office/research":{name:"Research Office",terms:""},"office/surveyor":{name:"Surveyor Office",terms:""},"office/tax_advisor":{name:"Tax Advisor Office",terms:"tax,tax consultant"},"office/telecommunication":{name:"Telecom Office",terms:"communication,internet,phone,voice"},"office/therapist":{name:"Therapist Office",terms:"therapy"},"office/water_utility":{name:"Water Utility Office",terms:"water board,utility"},"piste/downhill":{name:"Downhill Piste/Ski Run",terms:"ski,alpine,snowboard,downhill,piste"},"piste/downhill/halfpipe":{name:"Halfpipe",terms:"ski,alpine,halfpipe,half pipe,snowboard,downhill,piste"},"piste/hike":{name:"Snowshoeing or Winter Hiking Trail",terms:"hike,winter hiking,snowshoe,snowshoeing,piste,ski"},"piste/ice_skate":{name:"Ice Skating Piste",terms:"ice,skating,ski,piste"},"piste/nordic":{name:"Nordic or Crosscountry Piste/Ski Trail",terms:"ski,nordic,crosscountry,skating,piste"},"piste/piste":{name:"Winter Sport Trails",terms:"ski,nordic,crosscountry,downhill,alpine,snowboard,skitour,ski touring,sled,luge,sleigh,sledge,ski-joring,husky,horse,winter hiking,snowshoe,snowshoeing,ice,skating"},"piste/skitour":{name:"Ski Touring Trail",terms:"ski,skitour,crosscountry,ski touring,piste"},"piste/sled":{name:"Sled Piste",terms:"ski,sled,luge,sleigh,sledge,piste"},"piste/sleigh":{name:"Sleigh Piste",terms:"ski,piste,sled,luge,sleigh,sledge,ski-joring,husky,horse"},"place/farm":{name:"Farm",terms:""},"place/city_block":{name:"City Block",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/islet":{name:"Islet",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/plot":{name:"Plot",terms:"tract,land,lot,parcel"},"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:""},"playground/balance_beam":{name:"Play Balance Beam",terms:""},"playground/basket_spinner":{name:"Basket Spinner",terms:"basket rotator"},"playground/basket_swing":{name:"Basket Swing",terms:""},"playground/climbing_frame":{name:"Climbing Frame",terms:""},"playground/cushion":{name:"Bouncy Cushion",terms:""},"playground/horizontal_bar":{name:"Play Horizontal Bar",terms:"high bar"},"playground/rocker":{name:"Spring Rider",terms:"spring rocker,springy rocker"},"playground/roundabout":{name:"Play Roundabout",terms:"merry-go-round"},"playground/sandpit":{name:"Sandpit",terms:""},"playground/seesaw":{name:"Seesaw",terms:""},"playground/slide":{name:"Slide",terms:""},"playground/structure":{name:"Play Structure",terms:""},"playground/swing":{name:"Swing",terms:""},"playground/zipwire":{name:"Zip Wire",terms:""},point:{name:"Point",terms:""},"power/sub_station":{name:"Substation",terms:""},"power/cable/underground":{name:"Underground Power Cable",terms:""},"power/generator":{name:"Power Generator",terms:"hydro,solar,turbine,wind"},"power/generator/method/photovoltaic":{name:"Solar Panel",terms:"photovoltaic module,PV module,sunlight"},"power/generator/source/nuclear":{name:"Nuclear Reactor",terms:"fission,generator,nuclear,nuke,reactor"},"power/generator/source/wind":{name:"Wind Turbine",terms:"generator,turbine,windmill,wind"},"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/switch":{name:"Power Switch",terms:""},"power/tower":{name:"High-Voltage Tower",terms:"power"},"power/transformer":{name:"Transformer",terms:""},"public_transport/platform_aerialway":{name:"Aerialway Stop / Platform",terms:"aerialway,cable car,platform,public transit,public transportation,transit,transportation"},"public_transport/platform_bus":{name:"Bus Stop / Platform",terms:"bus,platform,public transit,public transportation,transit,transportation"},"public_transport/platform_ferry":{name:"Ferry Stop / Platform",terms:"boat,dock,ferry,pier,platform,public transit,public transportation,transit,transportation"},"public_transport/platform_light_rail":{name:"Light Rail Stop / Platform",terms:"electric,light rail,platform,public transit,public transportation,rail,track,tram,trolley,transit,transportation"},"public_transport/platform_monorail":{name:"Monorail Stop / Platform",terms:"monorail,platform,public transit,public transportation,rail,transit,transportation"},"public_transport/platform_subway":{name:"Subway Stop / Platform",terms:"metro,platform,public transit,public transportation,rail,subway,track,transit,transportation,underground"},"public_transport/platform_train":{name:"Train Stop / Platform",terms:"platform,public transit,public transportation,rail,track,train,transit,transportation"},"public_transport/platform_tram":{name:"Tram Stop / Platform",terms:"electric,light rail,platform,public transit,public transportation,rail,streetcar,track,tram,trolley,transit,transportation"},"public_transport/platform_trolleybus":{name:"Trolleybus Stop / Platform",terms:"bus,electric,platform,public transit,public transportation,streetcar,trackless,tram,trolley,transit,transportation"},"public_transport/platform":{name:"Transit Stop / Platform",terms:"platform,public transit,public transportation,transit,transportation"},"public_transport/station_aerialway":{name:"Aerialway Station",terms:"aerialway,cable car,public transit,public transportation,station,terminal,transit,transportation"},"public_transport/station_bus":{name:"Bus Station / Terminal",terms:"bus,public transit,public transportation,station,terminal,transit,transportation"},"public_transport/station_ferry":{name:"Ferry Station / Terminal",terms:"boat,dock,ferry,pier,public transit,public transportation,station,terminal,transit,transportation"},"public_transport/station_light_rail":{name:"Light Rail Station",terms:"electric,light rail,public transit,public transportation,rail,station,terminal,track,tram,trolley,transit,transportation"},"public_transport/station_monorail":{name:"Monorail Station",terms:"monorail,public transit,public transportation,rail,station,terminal,transit,transportation"},"public_transport/station_subway":{name:"Subway Station",terms:"metro,public transit,public transportation,rail,station,subway,terminal,track,transit,transportation,underground"},"public_transport/station_train_halt":{name:"Train Station (Halt / Request)",terms:"halt,public transit,public transportation,rail,station,track,train,transit,transportation,whistle stop"},"public_transport/station_train":{name:"Train Station",terms:"public transit,public transportation,rail,station,terminal,track,train,transit,transportation"},"public_transport/station_tram":{name:"Tram Station",terms:"electric,light rail,public transit,public transportation,rail,station,streetcar,terminal,track,tram,trolley,transit,transportation"},"public_transport/station_trolleybus":{name:"Trolleybus Station / Terminal",terms:"bus,electric,public transit,public transportation,station,streetcar,terminal,trackless,tram,trolley,transit,transportation"},"public_transport/station":{name:"Transit Station",terms:"public transit,public transportation,station,terminal,transit,transportation"},"public_transport/stop_area":{name:"Transit Stop Area",terms:""},"public_transport/stop_position_aerialway":{name:"Aerialway Stopping Location",terms:"aerialway,cable car,public transit,public transportation,transit,transportation"},"public_transport/stop_position_bus":{name:"Bus Stopping Location",terms:"bus,public transit,public transportation,transit,transportation"},"public_transport/stop_position_ferry":{name:"Ferry Stopping Location",terms:"boat,dock,ferry,pier,public transit,public transportation,transit,transportation"},"public_transport/stop_position_light_rail":{name:"Light Rail Stopping Location",terms:"electric,light rail,public transit,public transportation,rail,track,tram,trolley,transit,transportation"},"public_transport/stop_position_monorail":{name:"Monorail Stopping Location",terms:"monorail,public transit,public transportation,rail,transit,transportation"},"public_transport/stop_position_subway":{name:"Subway Stopping Location",terms:"metro,public transit,public transportation,rail,subway,track,transit,transportation,underground"},"public_transport/stop_position_train":{name:"Train Stopping Location",terms:"public transit,public transportation,rail,track,train,transit,transportation"},"public_transport/stop_position_tram":{name:"Tram Stopping Location",terms:"electric,light rail,public transit,public transportation,rail,streetcar,track,tram,trolley,transit,transportation"},"public_transport/stop_position_trolleybus":{name:"Trolleybus Stopping Location",terms:"bus,electric,public transit,public transportation,streetcar,trackless,tram,trolley,transit,transportation"},"public_transport/stop_position":{name:"Transit Stopping Location",terms:"public transit,public transportation,transit,transportation"},"railway/halt":{name:"Train Station (Halt / Request)",terms:"break,interrupt,rest,wait,interruption"},"railway/platform":{name:"Train Stop / Platform",terms:""},"railway/station":{name:"Train Station",terms:"train station,station"},"railway/tram_stop":{name:"Tram Stopping Position",terms:"light rail,streetcar,tram,trolley"},"railway/abandoned":{name:"Abandoned Railway",terms:""},"railway/buffer_stop":{name:"Buffer Stop",terms:"stop,halt,buffer"},"railway/crossing":{name:"Railway Crossing (Path)",terms:"crossing,pedestrian crossing,railroad crossing,level crossing,grade crossing,path through railroad,train crossing"},"railway/derail":{name:"Railway Derailer",terms:"derailer"},"railway/disused":{name:"Disused Railway",terms:""},"railway/funicular":{name:"Funicular",terms:"venicular,cliff railway,cable car,cable railway,funicular railway"},"railway/level_crossing":{name:"Railway Crossing (Road)",terms:"crossing,railroad crossing,level crossing,grade crossing,road through railroad,train crossing"},"railway/light_rail":{name:"Light Rail",terms:"light rail,streetcar,trolley"},"railway/milestone":{name:"Railway Milestone",terms:"milestone,marker"},"railway/miniature":{name:"Miniature Railway",terms:"rideable miniature railway,narrow gauge railway,minimum gauge railway"},"railway/monorail":{name:"Monorail",terms:""},"railway/narrow_gauge":{name:"Narrow Gauge Rail",terms:"narrow gauge railway,narrow gauge railroad"},"railway/rail":{name:"Rail",terms:""},"railway/signal":{name:"Railway Signal",terms:"signal,lights"},"railway/subway_entrance":{name:"Subway Entrance",terms:"metro,transit"},"railway/subway":{name:"Subway",terms:"metro,transit"},"railway/switch":{name:"Railway Switch",terms:"switch,points"},"railway/train_wash":{name:"Train Wash",terms:"wash,clean"},"railway/tram":{name:"Tram",terms:"light rail,streetcar,tram,trolley"},relation:{name:"Relation",terms:""},"route/ferry":{name:"Ferry Route",terms:""},"seamark/beacon_isolated_danger":{name:"Danger Beacon",terms:"beacon isolated danger,isolated danger beacon,iala"},"seamark/beacon_lateral":{name:"Channel Beacon",terms:"lateral beacon,beacon lateral,cevni,channel marker,iala,lateral mark"},"seamark/buoy_lateral":{name:"Channel Buoy",terms:"lateral buoy,buoy lateral,cevni,channel marker,iala,lateral mark"},"seamark/buoy_lateral/green":{name:"Green Buoy",terms:"lateral buoy,buoy lateral,cevni,channel marker,iala,lateral mark"},"seamark/buoy_lateral/red":{name:"Red Buoy",terms:"lateral buoy,buoy lateral,cevni,channel marker,iala,lateral mark"},"seamark/mooring":{name:"Mooring",terms:"dolphin,pile,bollard,buoy,post"},shop:{name:"Shop",terms:""},"shop/fishmonger":{name:"Fishmonger",terms:""},"shop/furnace":{name:"Furnace Store",terms:"oven,stove"},"shop/vacant":{name:"Vacant Shop",terms:""},"shop/agrarian":{name:"Farm Supply Shop",terms:"agricultural inputs,agricultural machines,seeds,pesticides,fertilizer,agricultural tools"},"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:"bread,cakes,rolls"},"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:"drinks"},"shop/bicycle":{name:"Bicycle Shop",terms:"bike,repair,tricycle,unicycle"},"shop/bookmaker":{name:"Bookmaker",terms:"betting,bookie"},"shop/books":{name:"Book Store",terms:""},"shop/boutique":{name:"Boutique",terms:""},"shop/butcher":{name:"Butcher",terms:"chicken,beef,lamb,meat,pork"},"shop/candles":{name:"Candle Shop",terms:"wax"},"shop/car_parts":{name:"Car Parts Store",terms:"automobile,automotive"},"shop/car_repair":{name:"Car Repair Shop",terms:"automobile,automotive,garage,service"},"shop/car":{name:"Car Dealership",terms:"automobile,automotive"},"shop/caravan":{name:"RV Dealership",terms:"auto,camper,recreational vehicle"},"shop/carpet":{name:"Carpet Store",terms:"rug"},"shop/catalogue":{name:"Catalog Shop",terms:""},"shop/charity":{name:"Charity Store",terms:"thrift,op shop,nonprofit"},"shop/cheese":{name:"Cheese Store",terms:""},"shop/chemist":{name:"Drugstore",terms:"apothecary,beauty,drug store,drugstore,gift,hair,med*,pharmacy,prescription,tooth"},"shop/chocolate":{name:"Chocolate Store",terms:"cocoa"},"shop/clothes":{name:"Clothing Store",terms:""},"shop/coffee":{name:"Coffee Store",terms:""},"shop/computer":{name:"Computer Store",terms:"desktop,laptop,hardware,operating system,software"},"shop/confectionery":{name:"Candy Store",terms:"sweet"},"shop/convenience":{name:"Convenience Store",terms:""},"shop/copyshop":{name:"Copy Store",terms:"print,scan"},"shop/cosmetics":{name:"Cosmetics Store",terms:"make-up,makeup"},"shop/country_store":{name:"Country 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,vape,vaping,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/fireplace":{name:"Fireplace Store",terms:"fireplace,stove,masonry heater"},"shop/fishing":{name:"Fishing Shop",terms:"bait,fishing line,flies,fly,lure,reel,rod,tackle"},"shop/florist":{name:"Florist",terms:"flower"},"shop/frame":{name:"Framing Shop",terms:"art*,paint*,photo*,frame"},"shop/frozen_food":{name:"Frozen Food",terms:""},"shop/fuel":{name:"Fuel Shop",terms:""},"shop/funeral_directors":{name:"Funeral Home",terms:"undertaker,memorial home"},"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,produce,vegetable"},"shop/hairdresser_supply":{name:"Hairdresser Supply Store",terms:"barber,shampoo,conditioner"},"shop/hairdresser":{name:"Hairdresser",terms:"barber"},"shop/hardware":{name:"Hardware Store",terms:""},"shop/health_food":{name:"Health Food Shop",terms:"wholefood,vitamins,vegetarian,vegan"},"shop/hearing_aids":{name:"Hearing Aids Store",terms:""},"shop/herbalist":{name:"Herbalist",terms:""},"shop/hifi":{name:"Hifi Store",terms:"audio,hi-fi,high fidelity,stereo,video"},"shop/houseware":{name:"Houseware Store",terms:"home,household"},"shop/hunting":{name:"Hunting Shop",terms:"arrows,bows,bullets,crossbows,rifles,traps"},"shop/interior_decoration":{name:"Interior Decoration Store",terms:""},"shop/jewelry":{name:"Jeweler",terms:"bracelet,diamond,earrings,gem,necklace,pins,ring"},"shop/kiosk":{name:"Kiosk",terms:""},"shop/kitchen":{name:"Kitchen Design Store",terms:"cabinets,countertops,sinks"},"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_repair":{name:"Motorcycle Repair Shop",terms:"auto,bike,garage,motorcycle,repair,service"},"shop/motorcycle":{name:"Motorcycle Dealership",terms:"bike"},"shop/music":{name:"Music Store",terms:"tape casettes,CDs,compact discs,vinyl records"},"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,outfitter,outdoor equipment,outdoor supplies"},"shop/paint":{name:"Paint Store",terms:""},"shop/party":{name:"Party Supply Store",terms:"balloons,costumes,decorations,invitations"},"shop/pastry":{name:"Pastry Shop",terms:"patisserie,cake shop,cakery"},"shop/pawnbroker":{name:"Pawn Shop",terms:""},"shop/perfumery":{name:"Perfume Store",terms:""},"shop/pet_grooming":{name:"Pet Grooming Store",terms:"cat,dog"},"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:"antenna,transistor"},"shop/religion":{name:"Religious Store",terms:""},"shop/scuba_diving":{name:"Scuba Diving Shop",terms:"diving,scuba"},"shop/seafood":{name:"Seafood Shop",terms:"fishmonger"},"shop/second_hand":{name:"Consignment/Thrift Store",terms:"secondhand,second hand,resale,thrift,used"},"shop/sewing":{name:"Sewing Supply Shop",terms:"haberdashery"},"shop/shoes":{name:"Shoe Store",terms:"boots,cleats,clogs,heels,loafers,oxfords,sneakers"},"shop/sports":{name:"Sporting Goods Store",terms:"athletics"},"shop/stationery":{name:"Stationery Store",terms:"card,paper"},"shop/storage_rental":{name:"Storage Rental",terms:"garages"},"shop/supermarket":{name:"Supermarket",terms:"grocery,store,shop"},"shop/tailor":{name:"Tailor",terms:"clothes,suit"},"shop/tattoo":{name:"Tattoo Parlor",terms:"ink"},"shop/tea":{name:"Tea Store",terms:""},"shop/ticket":{name:"Ticket Seller",terms:"box office"},"shop/tiles":{name:"Tile Shop",terms:""},"shop/tobacco":{name:"Tobacco Shop",terms:"cigarettes,cigars"},"shop/toys":{name:"Toy Store",terms:"games"},"shop/trade":{name:"Trade Shop",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,VHS,video casette"},"shop/watches":{name:"Watches Shop",terms:""},"shop/water_sports":{name:"Watersport/Swim Shop",terms:""},"shop/water":{name:"Drinking Water Shop",terms:""},"shop/weapons":{name:"Weapon Shop",terms:"ammo,gun,knife,knives"},"shop/wholesale":{name:"Wholesale Store",terms:"warehouse club,cash and carry"},"shop/window_blind":{name:"Window Blind Store",terms:""},"shop/wine":{name:"Wine Shop",terms:""},"tourism/alpine_hut":{name:"Alpine Hut",terms:"climbing hut"},"tourism/apartment":{name:"Guest Apartment / Condo",terms:""},"tourism/aquarium":{name:"Aquarium",terms:"fish,sea,water"},"tourism/artwork":{name:"Artwork",terms:"mural,sculpture,statue"},"tourism/artwork/mural":{name:"Mural",terms:"fresco,wall painting"},"tourism/artwork/sculpture":{name:"Sculpture",terms:"statue,figure,carving"},"tourism/artwork/statue":{name:"Statue",terms:"sculpture,figure,carving"},"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:"Holiday Cottage",terms:"holiday,holiday cottage,holiday home,vacation,vacation home"},"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:"signpost"},"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/trail_riding_station":{name:"Trail Riding Station",terms:""},"tourism/viewpoint":{name:"Viewpoint",terms:""},"tourism/wilderness_hut":{name:"Wilderness Hut",terms:"wilderness hut,backcountry hut,bothy"},"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:"Speed Table",terms:"flat top,hump,speed,slow"},traffic_sign_vertex:{name:"Traffic Sign",terms:"road,highway"},traffic_sign:{name:"Traffic Sign",terms:"road,highway"},"traffic_sign/city_limit_vertex":{name:"City Limit Sign",terms:"town,village,hamlet,boundary,edge,border,road,highway"},"traffic_sign/city_limit":{name:"City Limit Sign",terms:"town,village,hamlet,boundary,edge,border,road,highway"},"traffic_sign/maxspeed_vertex":{name:"Speed Limit Sign",terms:"max speed,maximum speed,road,highway"},"traffic_sign/maxspeed":{name:"Speed Limit Sign",terms:"max speed,maximum speed,road,highway"},"type/multipolygon":{name:"Multipolygon",terms:""},"type/boundary":{name:"Boundary",terms:""},"type/boundary/administrative":{name:"Administrative Boundary",terms:""},"type/enforcement":{name:"Enforcement",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:"Only Left Turn",terms:""},"type/restriction/only_right_turn":{name:"Only Right Turn",terms:""},"type/restriction/only_straight_on":{name:"Only Straight On",terms:""},"type/restriction/only_u_turn":{name:"Only U-turn",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/light_rail":{name:"Light Rail Route",terms:""},"type/route/pipeline":{name:"Pipeline Route",terms:""},"type/route/piste":{name:"Piste/Ski Route",terms:""},"type/route/power":{name:"Power Route",terms:""},"type/route/road":{name:"Road Route",terms:""},"type/route/subway":{name:"Subway Route",terms:""},"type/route/train":{name:"Train Route",terms:""},"type/route/tram":{name:"Tram Route",terms:""},"type/site":{name:"Site",terms:""},"type/waterway":{name:"Waterway",terms:""},vertex:{name:"Other",terms:""},"waterway/riverbank":{name:"Riverbank",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/milestone":{name:"Waterway Milestone",terms:"milestone,marker"},"waterway/river":{name:"River",terms:"beck,branch,brook,course,creek,estuary,rill,rivulet,run,runnel,stream,tributary,watercourse"},"waterway/sanitary_dump_station":{name:"Marine Toilet Disposal",terms:"Boat,Watercraft,Sanitary,Dump Station,Pumpout,Pump out,Elsan,CDP,CTDP,Chemical Toilet"},"waterway/stream_intermittent":{name:"Intermittent Stream",terms:"arroyo,beck,branch,brook,burn,course,creek,drift,flood,flow,gully,run,runnel,rush,spate,spritz,tributary,wadi,wash,watercourse"},"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:""}}},imagery:{AGIV:{attribution:{text:"Orthophoto Flanders most recent © AGIV"},name:"AGIV Flanders most recent aerial imagery"},AGIV10cm:{attribution:{text:"Orthophoto Flanders © AGIV"},name:"AGIV Flanders 2013-2015 aerial imagery 10cm"},AGIVFlandersGRB:{attribution:{text:"GRB Flanders © AGIV"},name:"AGIV Flanders GRB"},Bing:{description:"Satellite and aerial imagery.",name:"Bing aerial imagery"},"DigitalGlobe-Premium":{attribution:{text:"Terms & Feedback"},description:"DigitalGlobe-Premium is a mosaic composed of DigitalGlobe basemap with select regions filled with +Vivid or custom area of interest imagery, 50cm resolution or better, and refreshed more frequently with ongoing updates.",name:"DigitalGlobe Premium Imagery"},"DigitalGlobe-Premium-vintage":{attribution:{text:"Terms & Feedback"},description:"Imagery boundaries and capture dates. Labels appear at zoom level 13 and higher.",name:"DigitalGlobe Premium Imagery Vintage"},"DigitalGlobe-Standard":{attribution:{text:"Terms & Feedback"},description:"DigitalGlobe-Standard is a curated set of imagery covering 86% of the earth’s landmass, with 30-60cm resolution where available, backfilled by Landsat. Average age is 2.31 years, with some areas updated 2x per year.",name:"DigitalGlobe Standard Imagery"},"DigitalGlobe-Standard-vintage":{attribution:{text:"Terms & Feedback"},description:"Imagery boundaries and capture dates. Labels appear at zoom level 13 and higher.",name:"DigitalGlobe Standard Imagery Vintage"},EsriWorldImagery:{attribution:{text:"Terms & Feedback"},description:"Esri world imagery.",name:"Esri World Imagery"},EsriWorldImageryClarity:{attribution:{text:"Terms & Feedback"},description:"Esri archive imagery that may be clearer and more accurate than the default layer.",name:"Esri World Imagery (Clarity) Beta"},MAPNIK:{attribution:{text:"© OpenStreetMap contributors, CC-BY-SA"},description:"The default OpenStreetMap layer.",name:"OpenStreetMap (Standard)"},Mapbox:{attribution:{text:"Terms & Feedback"},description:"Satellite and aerial imagery.",name:"Mapbox Satellite"},"OSM_Inspector-Addresses":{attribution:{text:"© Geofabrik GmbH, OpenStreetMap contributors, CC-BY-SA"},name:"OSM Inspector: Addresses"},"OSM_Inspector-Geometry":{attribution:{text:"© Geofabrik GmbH, OpenStreetMap contributors, CC-BY-SA"},name:"OSM Inspector: Geometry"},"OSM_Inspector-Highways":{attribution:{text:"© Geofabrik GmbH, OpenStreetMap contributors, CC-BY-SA"},name:"OSM Inspector: Highways"},"OSM_Inspector-Multipolygon":{attribution:{text:"© Geofabrik GmbH, OpenStreetMap contributors, CC-BY-SA"},name:"OSM Inspector: Area"},"OSM_Inspector-Places":{attribution:{text:"© Geofabrik GmbH, OpenStreetMap contributors, CC-BY-SA"},name:"OSM Inspector: Places"},"OSM_Inspector-Routing":{attribution:{text:"© Geofabrik GmbH, OpenStreetMap contributors, CC-BY-SA"},name:"OSM Inspector: Routing"},"OSM_Inspector-Tagging":{attribution:{text:"© Geofabrik GmbH, OpenStreetMap contributors, CC-BY-SA"},name:"OSM Inspector: Tagging"},SPW_ORTHO_LAST:{name:"SPW(allonie) most recent aerial imagery"},SPW_PICC:{name:"SPW(allonie) PICC numerical imagery"},"US-TIGER-Roads-2014":{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",name:"TIGER Roads 2014"},"US-TIGER-Roads-2017":{description:"Yellow = Public domain map data from the US Census. Red = Data not found in OpenStreetMap",name:"TIGER Roads 2017"},"US-TIGER-Roads-2018":{description:"Yellow = Public domain map data from the US Census. Red = Data not found in OpenStreetMap",name:"TIGER Roads 2018"},US_Forest_Service_roads_overlay:{description:"Highway: Green casing = unclassified. Brown casing = track. Surface: gravel = light brown fill, Asphalt = black, paved = gray, ground =white, concrete = blue, grass = green. Seasonal = white bars",name:"U.S. Forest Roads Overlay"},UrbISOrtho2016:{attribution:{text:"Realized by means of Brussels UrbIS®© - Distribution & Copyright CIRB"},name:"UrbIS-Ortho 2016"},UrbISOrtho2017:{attribution:{text:"Realized by means of Brussels UrbIS®© - Distribution & Copyright CIRB"},name:"UrbIS-Ortho 2017"},UrbISOrtho2018:{attribution:{text:"Realized by means of Brussels UrbIS®© - Distribution & Copyright CIRB"},name:"UrbIS-Ortho 2018"},UrbisAdmFR:{attribution:{text:"Realized by means of Brussels UrbIS®© - Distribution & Copyright CIRB"},name:"UrbisAdm FR"},UrbisAdmNL:{attribution:{text:"Realized by means of Brussels UrbIS®© - Distribution & Copyright CIRB"},name:"UrbisAdm NL"},"Waymarked_Trails-Cycling":{attribution:{text:"© waymarkedtrails.org, OpenStreetMap contributors, CC by-SA 3.0"},name:"Waymarked Trails: Cycling"},"Waymarked_Trails-Hiking":{attribution:{text:"© waymarkedtrails.org, OpenStreetMap contributors, CC by-SA 3.0"},name:"Waymarked Trails: Hiking"},"Waymarked_Trails-MTB":{attribution:{text:"© waymarkedtrails.org, OpenStreetMap contributors, CC by-SA 3.0"},name:"Waymarked Trails: MTB"},"Waymarked_Trails-Skating":{attribution:{text:"© waymarkedtrails.org, OpenStreetMap contributors, CC by-SA 3.0"},name:"Waymarked Trails: Skating"},"Waymarked_Trails-Winter_Sports":{attribution:{text:"© waymarkedtrails.org, OpenStreetMap contributors, CC by-SA 3.0"},name:"Waymarked Trails: Winter Sports"},"basemap.at":{attribution:{text:"basemap.at"},description:"Basemap of Austria, based on government data.",name:"basemap.at"},"basemap.at-orthofoto":{attribution:{text:"basemap.at"},description:"Orthofoto layer provided by basemap.at. \"Successor\" of geoimage.at imagery.",name:"basemap.at Orthofoto"},"eufar-balaton":{attribution:{text:"EUFAR Balaton ortofotó 2010"},description:"1940 geo-tagged photography from Balaton Limnological Institute.",name:"EUFAR Balaton orthophotos"},"finds.jp_KBN_2500":{attribution:{text:"GSI KIBAN 2500"},description:"GSI Kiban 2500 via finds.jp. Good for tracing, but a bit older.",name:"Japan GSI KIBAN 2500"},"gsi.go.jp":{attribution:{text:"GSI Japan"},description:"Japan GSI ortho Imagery. Usually better than bing, but a bit older.",name:"Japan GSI ortho Imagery"},"gsi.go.jp_airphoto":{attribution:{text:"GSI Japan"},description:"Japan GSI airphoto Imagery. Not fully orthorectified, but a bit newer and/or differently covered than GSI ortho Imagery.",name:"Japan GSI airphoto Imagery"},"gsi.go.jp_std_map":{attribution:{text:"GSI Japan"},description:"Japan GSI Standard Map. Widely covered.",name:"Japan GSI Standard Map"},"helsingborg-orto":{attribution:{text:"© Helsingborg municipality"},description:"Orthophotos from the municipality of Helsingborg 2016, public domain",name:"Helsingborg Orthophoto"},"kalmar-orto-2014":{attribution:{text:"© Kalmar municipality"},description:"Orthophotos for the north coast of the municipality of Kalmar 2014",name:"Kalmar North Orthophoto 2014"},"kalmar-orto-2016":{attribution:{text:"© Kalmar municipality"},description:"Orthophotos for the south coast of the municipality of Kalmar 2016",name:"Kalmar South Orthophoto 2016"},"kalmar-orto-2018":{attribution:{text:"© Kalmar municipality"},description:"Orthophotos for urban areas of the municipality of Kalmar 2018",name:"Kalmar Urban Orthophoto 2018"},kelkkareitit:{attribution:{text:"© Kelkkareitit.fi"},description:"Kelkkareitit.fi snowmobile trails from OSM (Nordic coverage)",name:"Nordic snowmobile overlay"},"lantmateriet-orto1960":{attribution:{text:"© Lantmäteriet, CC0"},description:"Mosaic of Swedish orthophotos from the period 1955–1965. Older and younger pictures may occur.",name:"Lantmäteriet Historic Orthophoto 1960"},"lantmateriet-orto1975":{attribution:{text:"© Lantmäteriet, CC0"},description:"Mosaic of Swedish orthophotos from the period 1970–1980. Is under construction.",name:"Lantmäteriet Historic Orthophoto 1975"},"lantmateriet-topowebb":{attribution:{text:"© Lantmäteriet, CC0"},description:"Topographic map of Sweden 1:50 000",name:"Lantmäteriet Topographic Map"},"linkoping-orto":{attribution:{text:"© Linköping municipality"},description:"Orthophotos from the municipality of Linköping 2010, open data",name:"Linköping Orthophoto"},mapbox_locator_overlay:{attribution:{text:"Terms & Feedback"},description:"Shows major features to help orient you.",name:"Locator Overlay"},openpt_map:{attribution:{text:"© OpenStreetMap contributors, CC-BY-SA"},name:"OpenPT Map (overlay)"},"osm-gps":{attribution:{text:"© OpenStreetMap contributors"},description:"Public GPS traces uploaded to OpenStreetMap.",name:"OpenStreetMap GPS traces"},"osm-mapnik-black_and_white":{attribution:{text:"© OpenStreetMap contributors, CC-BY-SA"},name:"OpenStreetMap (Standard Black & White)"},"osm-mapnik-german_style":{attribution:{text:"© OpenStreetMap contributors, CC-BY-SA"},name:"OpenStreetMap (German Style)"},"osmse-ekonomiska":{attribution:{text:"© Lantmäteriet"},description:"Scan of \"Economic maps\" ca. 1950–1980",name:"Lantmäteriet Economic Map 1950–1980"},qa_no_address:{attribution:{text:"Simon Poole, Data ©OpenStreetMap contributors"},name:"QA No Address"},skobbler:{attribution:{text:"© Tiles: skobbler Map data: OpenStreetMap contributors"},name:"skobbler"},skoterleder:{attribution:{text:"© Skoterleder.org"},description:"Snowmobile trails",name:"Snowmobile map Sweden"},"stamen-terrain-background":{attribution:{text:"Map tiles by Stamen Design, under CC BY 3.0. Data by OpenStreetMap, under ODbL"},name:"Stamen Terrain"},"stockholm-orto":{attribution:{text:"© Stockholm municipality, CC0"},description:"Orthophotos from the municipality of Stockholm 2015, CC0 license",name:"Stockholm Orthophoto"},"tf-cycle":{attribution:{text:"Maps © Thunderforest, Data © OpenStreetMap contributors"},name:"Thunderforest OpenCycleMap"},"tf-landscape":{attribution:{text:"Maps © Thunderforest, Data © OpenStreetMap contributors"},name:"Thunderforest Landscape"},"trafikverket-baninfo":{attribution:{text:"© Trafikverket, CC0"},description:"Swedish railway network, including sidings",name:"Trafikverket Railway Network"},"trafikverket-baninfo-option":{attribution:{text:"© Trafikverket, CC0"},description:"Swedish railway network with several options for map layers",name:"Trafikverket Railway Network options"},"trafikverket-vagnat":{attribution:{text:"© Trafikverket, CC0"},description:"Swedish NVDB road network",name:"Trafikverket Road Network"},"trafikverket-vagnat-extra":{attribution:{text:"© Trafikverket, CC0"},description:"Swedish NVDB extra details: Highway reference, traffic calming, rest area, bus stop, bridge, tunnel, speed camera",name:"Trafikverket Road Network extra"},"trafikverket-vagnat-navn":{attribution:{text:"© Trafikverket, CC0"},description:"Swedish NVDB street names",name:"Trafikverket Street Names"},"trafikverket-vagnat-option":{attribution:{text:"© Trafikverket, CC0"},description:"Swedish NVDB road network with several options for map layers",name:"Trafikverket Road Network options"}},community:{"bw-facebook":{name:"Mapping Botswana on Facebook",description:"Page of OpenStreetMap in Botswana"},"bw-twitter":{name:"Mapping Botswana on Twitter",description:"Twitter of OpenStreetMap in Botswana"},"cape-coast-youthmappers":{name:"University of Cape Coast YouthMappers",description:"Follow us on Twitter: {url}",extendedDescription:"This is the official handle for the Youth Mappers chapter of the University of Cape Coast, Ghana. we love maps, open data and helping the vulnerable."},"osm-gh-facebook":{name:"OpenStreetMap Ghana on Facebook",description:"Facebook group for people interested in OpenStreetMap.",extendedDescription:"Mappers in Ghana community, promoting OpenStreetMap and Humanitarian OpenStreetMap Team (HOT) projects in Ghana. Join us."},"osm-gh-twitter":{name:"OpenStreetMap Ghana on Twitter",description:"Follow us on Twitter: {url}"},"talk-gh":{name:"Talk-gh Mailing List",description:"Talk-gh is the official mailing list for Ghana OSM community."},"osm-mg-facebook":{name:"OpenStreetMap Madagascar Facebook Group",description:"Malagasy Facebook group for people interested in OpenStreetMap."},"talk-mg":{name:"Talk-mg Mailing List",description:"Place for OpenStreetMap contributors, communities and users in Madagascar to share and discuss."},"OSM-BGD-facebook":{name:"OpenStreetMap Bangladesh",description:"Improve OpenStreetMap in Bangladesh",extendedDescription:"Mapping in Bangladesh? Have questions, want to connect with the community here? Join us at {url}. All are welcome!"},"OSM-India-facebook":{name:"OpenStreetMap India - Participatory neighborhood mapping",description:"Improve OpenStreetMap in India",extendedDescription:"Mapping in India? Have questions, want to connect with the community here? Join us at {url}. All are welcome!",events:{sotmasia2018:{name:"State of the Map Asia 2018",description:"Join the 2018 OpenStreetMap region-wide event at State of the Map Asia in India",where:"Indian Institute of Management, Bangalore, India"}}},"osm-india-forum":{name:"OpenStreetMap India forum",description:"OpenStreetMap India web forum"},"osm-india-github":{name:"OpenStreetMap India GitHub",description:"Code with us: {url}"},"OSM-india-mailinglist":{name:"OpenStreetMap India Mailinglist",description:"Talk-in is the official Mailinglist for Indian Community"},"osm-india-telegram":{name:"OpenStreetMap India Telegram",description:"Join our family: {url}"},"OSM-india-twitter":{name:"OpenStreetMap India Twitter",description:"We are just a tweet away: {url}"},"osm-india-website":{name:"OpenStreetMap India",description:"Mappers and OpenStreetMap users in India"},"osm-india-wiki":{name:"OpenStreetMap Wikiproject India",description:"Everything you need to know about mapping in India: {url}"},"osm-india-youtube":{name:"OpenStreetMap India Youtube",description:"Subscribe to our channel: {url}"},"OSM-India-Puducherry-Facebook":{name:"Free Software Hardware Movement - Facebook",description:"FSHM Facebook page to know about community events, activities",extendedDescription:"FSHM organizes events relating to free software/hardware, technology, activism and OpenStreetMap. Its FB page is the best way to keep in contact with its events."},"OSM-Puducherry-Mailing-List":{name:"Free Software Hardware Movement - Mailing List",description:"FSHM Puducherry mailing list to discuss mapping in Puducherry and other things.",extendedDescription:"FSHM organizes events relating to free software/hardware, technology, activism and OpenStreetMap."},"OSM-India-Puducherry-Matrix":{name:"Free Software Hardware Movement - Matrix",description:"FSHM Riot group to discuss, share and update mapping activities, events in and around Puducherry",extendedDescription:"FSHM community members share their OSM mapping updates / experiences through the Riot.im group, this group is also used to discuss things related to free software / hardware, technology and activism."},"OSM-IDN-facebook":{name:"OpenStreetMap Indonesia",description:"Improve OpenStreetMap in Indonesia",extendedDescription:"Mapping in Indonesia? Have questions, want to connect with the community here? Join us at {Url}. All are welcome!"},"osm-iran-aparat":{name:"OpenStreetMap Iran Aparat",description:"Subscribe to our channel at {url}",extendedDescription:"A good resource of videos about anything related to OpenStreetMap. Mainly in Persian."},"osm-iran-forum":{name:"OpenStreetMap Iran web forum",description:"OpenStreetMap Iran web forum",extendedDescription:"A web forum for OpenStreetMap users in Iran. Feel free to ask questions and discuss with others!"},"osm-iran-telegram":{name:"OpenStreetMap Iran Telegram",description:"You're welcome to join our Telegram channel at {url}. We also have a supergroup of many OSMers interested in Iran. Find its link in bio of channel."},"OSM-japan-facebook":{name:"OpenStreetMap Japan Community",description:"Mappers and OpenStreetMap users in Japan"},"OSM-japan-mailinglist":{name:"OpenStreetMap Japan Mailinglist",description:"Talk-ja is an Official Mailinglist for Japanese Community"},"OSM-japan-twitter":{name:"OpenStreetMap Japan Twitter",description:"Hashtag on Twitter: {url}"},"OSM-japan-website":{name:"OpenStreetMap Japan",description:"Mappers and OpenStreetMap users in Japan"},"OSM-MY-facebook":{name:"OpenStreetMap Malaysia on Facebook",description:"For chat about anything related to OpenStreetMap!"},"OSM-MY-forum":{name:"OpenStreetMap Malaysia Forum",description:"Official OpenStreetMap Malaysia Forum"},"OSM-MY-matrix":{name:"OpenStreetMap Malaysia Riot channel",description:"All mappers are welcome! Sign up at {signupUrl}"},"OSM-MNG-facebook":{name:"OpenStreetMap Mongolia",description:"Improve OpenStreetMap in Mongolia",extendedDescription:"Mapping in Mongolia? Have questions, want to connect with the community here? Join us at {Url}. All are welcome!"},"OSM-MMR-facebook":{name:"OpenStreetMap Myanmar",description:"Improve OpenStreetMap in Myanmar",extendedDescription:"Mapping in Myanmar? Have questions, want to connect with the community here? Join us at {Url}. All are welcome!"},"OSM-Nepal-facebook":{name:"OpenStreetMap Nepal",description:"Improve OpenStreetMap in Nepal",extendedDescription:"Mapping in Nepal? Have questions, want to connect with the community here? Join us at {Url}. All are welcome!"},"OSM-Asia-mailinglist":{name:"OpenStreetMap Asia Mailinglist",description:"Talk-asia is the official Mailinglist for Asian Community"},"osm-asia-telegram":{name:"OpenStreetMap Asia Telegram",description:"Join our family: {url}"},"OSM-PH-facebook":{name:"OpenStreetMap PH Facebook",description:"Welcome to OpenStreetMap Philippines, where we encourage all fellow Filipinos to contribute to the OpenStreetMap project."},"OSM-PH-mailinglist":{name:"Talk-ph Mailing List",description:"A mailing list to discuss OpenStreetMap in the Philippines"},"OSM-PH-slack":{name:"OpenStreetMap PH Slack",description:"All are welcome! Sign up at {signupUrl}"},"OSM-PH-telegram":{name:"OpenStreetMap PH Telegram",description:"Un-official, Telegram local community of OpenStreetMap contributors and friends in the Philippines"},"OSM-RU-forum":{name:"OpenStreetMap RU forum",description:"OpenStreetMap Russia web forum"},"OSM-RU-telegram":{name:"OpenStreetMap RU telegram",description:"OpenStreetMap Russia telegram chat"},"OSM-south-korea-telegram":{name:"OSM South Korea Telegram",description:"Unofficial Channnel for OpenStreetMap contributors, communities, and users in South Korea to share and discuss."},"OSM-sri-lanka-facebook":{name:"OpenStreetMap Sri Lanka",description:"Improve OpenStreetMap in Sri Lanka",extendedDescription:"Mapping in Sri Lanka? Have questions, want to connect with the community here? Join us at {Url}. All are welcome!"},"OSM-TW-facebook":{name:"OpenStreetMap Taiwan Community",description:"Facebook Group for Mappers and OpenStreetMap users to discuss matters about Taiwan."},"OSM-TW-mailinglist":{name:"OpenStreetMap Taiwan Mailinglist",description:"Talk-tw is an Official Mailinglist for the Communities to dicuss matters about Taiwan"},"OSM-TH-CNX-meetup":{name:"OSM Meetup Chiang Mai",description:"Irregular meeting of the OpenStreetMap community in Chiang Mai",extendedDescription:"Members of the OpenStreetMap community meet every few months in Chiang Mai. Get in contact and check out {url} to see when the next meetup is scheduled"},"OSM-TH-facebook":{name:"OpenStreetMap TH Facebook group",description:"Facebook group for OpenStreetMappers in Thailand"},"OSM-TH-forum":{name:"OpenStreetMap TH forum",description:"OpenStreetMap Thailand web forum"},"al-forum":{name:"OSM Albania Forum",description:"OpenStreetMap Albania Forum"},"al-maptime-tirana":{name:"Maptime Tirana",description:"Social events organized around mapping - beginners most welcome!",extendedDescription:"Maptime is an open learning environment for all levels and degrees of knowledge, offering intentional educational support for the beginner. Maptime is simultaneously flexible and structured, creating space for mapping tutorials, workshops, ongoing projects with a shared goal, and independent/collaborative work time."},"al-telegram":{name:"OSM Albania Telegram channel",description:"OpenStreetMap Albania Telegram channel"},"at-forum":{name:"OpenStreetMap Austria Forum",description:"The official forum for OpenStreetMap questions in and around Austria"},"at-mailinglist":{name:"Talk-at Mailing List",description:"Talk-at is the official mailing list for the Austrian OSM community"},"at-twitter":{name:"OpenStreetMap Austria Twitter",description:"OpenStreetMap Austria On Twitter: {url}"},"osmgraz-meetup":{name:"OSM community meetup Graz",description:"Monthly meetup of the OpenStreetMap community in Graz"},"osmgraz-twitter":{name:"OSM community Graz on twitter",description:"OpenStreetMap community in Graz on twitter"},"osm-at":{name:"OpenStreetMap Austria",description:"The platform for information on OpenStreetMap in Austria"},byosm:{name:"OpenStreetMap Belarus",description:"OpenStreetMap Belarus telegram chat"},"be-facebook":{name:"OpenStreetMap BE Community",description:"Mappers and OpenStreetMap on Facebook in Belgium"},"be-forum":{name:"OpenStreetMap BE forum",description:"OpenStreetMap Belgium web forum"},"be-irc":{name:"OpenStreetMap Belgium IRC",description:"Join #osmbe on irc.oftc.net (port 6667)",extendedDescription:"Join #osmbe on irc.oftc.net (port 6667), it is bridged with the Matrix chat channel"},"be-mailinglist":{name:"Talk-be Mailing List",description:"Talk-be is the official mailing list for the Belgian OSM community"},"be-matrix":{name:"OpenStreetMap BE Matrix channel",description:"All mappers are welcome!",extendedDescription:"Most talk is happening at the \"OpenStreetMap Belgium\" channel. You can ask anything there! The other rooms are for specific subjects."},"be-meetup":{name:"OpenStreetMap Belgium Meetup",description:"Real life meetups of everyone who is interested in OpenStreetMap",extendedDescription:"Physical meetups are great to meet other mappers, ask them questions and to learn a lot. Especially new contributors are very welcome!"},"be-twitter":{name:"OpenStreetMap Belgium Twitter",description:"OSM Belgium on Twitter: @osm_be"},"hr-facebook":{name:"OpenStreetMap Croatia Facebook group",description:"OpenStreetMap Croatia Facebook group"},"hr-irc":{name:"OpenStreetMap Croatia on IRC",description:"Join #osm-hr on irc.freenode.org (port 6667)"},"hr-mailinglist":{name:"Talk-hr Mailing List",description:"Talk-hr mailing list"},"czech-community":{name:"Czech OSM community",description:"Map portal, website and contacts on OSM members in Czechia"},"osmcz-facebook":{name:"OpenStreetMap CZ on Facebook",description:"Follow czech community on Facebook - including translated WeeklyOSM!"},"osmcz-twitter":{name:"Czech twitter @osmcz",description:"Follow czech community on Twitter - including translated WeeklyOSM!"},"talk-cz-mailinglist":{name:"Czech mailing list (talk-cz)",description:"Talk-cz is the official mailing list for Czech community"},"dk-forum":{name:"OpenStreetMap Denmark Web Forum",description:"OpenStreetMap Denmark web forum"},"dk-irc":{name:"OpenStreetMap Denmark IRC",description:"Join #osm-dk on irc.oftc.net (port 6667)"},"dk-mailinglist":{name:"Talk-dk Mailing List",description:"A mailing list to discuss OpenStreetMap in Denmark"},"fi-forum":{name:"OpenStreetMap FI forum",description:"OpenStreetMap Finland web forum"},"fi-irc":{name:"OpenStreetMap Finland IRC",description:"Join #osm-fi on irc.oftc.net (port 6667)"},"fi-mailinglist":{name:"Talk-fi Mailing List",description:"Talk-fi is the official mailing list for the Finnish OSM community"},"fr-facebook":{name:"OpenStreetMap France Facebook page",description:"OpenStreetMap France Facebook page"},"fr-forum":{name:"OpenStreetMap France web forum",description:"OpenStreetMap France web forum"},"fr-irc":{name:"OpenStreetMap France on IRC",description:"Join #osm-fr on irc.oftc.net (port 6667)"},"fr-mailinglist":{name:"Talk-fr Mailing List",description:"Talk-fr mailing list"},"fr-twitter":{name:"OpenStreetMap France on Twitter",description:"OpenStreetMap France on Twitter: {url}"},"de-berlin-mailinglist":{name:"Berlin Mailing List",description:"This is the mailing list for the Berlin OSM community"},"de-berlin-meetup":{name:"OpenStreetMap Berlin-Brandenburg Meetup",description:"Mappers and OpenStreetMap users in the Berlin area"},"de-berlin-telegram":{name:"@osmberlin on Telegram",description:"OpenStreetMap Berlin Telegram chat"},"de-berlin-twitter":{name:"OpenStreetMap Berlin Twitter",description:"Follow us on Twitter: {url}"},"de-forum":{name:"OpenStreetMap DE forum",description:"OpenStreetMap Germany web forum"},"de-irc":{name:"OpenStreetMap Germany IRC",description:"Join #osm-de on irc.oftc.net (port 6667)"},"de-mailinglist":{name:"Talk-de Mailing List",description:"Talk-de is the official mailing list for the German OSM community"},"de-ostwestfalen-lippe-mailinglist":{name:"OWL Mailing List",description:"This is the mailing list for the Ostwestfalen-Lippe OSM community"},"de-telegram":{name:"OpenStreetMap Germany Telegram",description:"Join the OpenStreetMap Germany Telegram supergroup at {url}"},"osm-de":{name:"OpenStreetMap Germany",description:"The platform for information on OpenStreetMap in Germany"},"hu-facebook":{name:"OpenStreetMap HU on Facebook",description:"Mappers and OpenStreetMap Facebook in Hungary"},"hu-forum":{name:"OpenStreetMap HU forum",description:"OpenStreetMap Hungary web forum"},"hu-meetup":{name:"OpenStreetMap Hungary Meetup",description:"The platform for organizing meetups in Hungary"},"is-facebook":{name:"OSM Iceland on Facebook",description:"Page of OpenStreetMap in Iceland"},"is-mailinglist":{name:"Talk-is Mailing List",description:"Talk-is is the official mailing list for the Icelandic OSM community"},"is-twitter":{name:"OSM Iceland on Twittter",description:"Twitter of OpenStreetMap in Iceland"},"it-facebook":{name:"OpenStreetMap Italy Facebook",description:"Join the OpenStreetMap Italy community on Facebook"},"it-irc":{name:"OpenStreetMap Italy IRC",description:"Join #osm-it on irc.oftc.net (port 6667)"},"it-mailinglist":{name:"Talk-it Mailing List",description:"Talk-it is the official mailing list for the Italian OSM community"},"it-telegram":{name:"@OpenStreetMapItalia on Telegram",description:"OpenStreetMap Italy Telegram chat"},"it-twitter":{name:"OpenStreetMap Italy Twitter",description:"Follow us on Twitter at {url}"},"OSM-Rome-meetup":{name:"Incontro Mappatori Romani",description:"Improve OpenStreetMap in the Rome area",extendedDescription:"We aim to be a resource for people to discuss and share knowledge on utilizing free geographic data sets especially OpenStreetMap, and Open geo-spatial software that manages, edits, and displays geographic data, and advocate for its use in Lazio."},"South-Tyrol-Mailing-List":{name:"OpenStreetMap mailing list for South Tyrol",description:"OpenStreetMap Italy regional talk list for South Tyrol"},"talk-it-lazio":{name:"OpenStreetMap IT Lazio",description:"All are welcome! Sign up at {signupUrl}",extendedDescription:"Mailinglist for Rome and Lazio area."},"Trentino-Mailing-List":{name:"OpenStreetMap mailing list for Trentino",description:"OpenStreetMap Italy regional talk list for Trentino"},"kosovo-telegram":{name:"OpenStreetMap Kosovo on Telegram",description:"Semi-official all-Kosovo Telegram public group. We welcome all mappers from anywhere in any language."},"no-forum":{name:"OpenStreetMap Norway Web Forum",description:"OpenStreetMap Norway web forum"},"no-irc":{name:"OpenStreetMap Norway on IRC",description:"Chat room for mappers and OpenStreetMap users, developers and enthusiasts in Norway"},"no-mailinglist":{name:"OpenStreetMap Norway mailing list",description:"Mailing list for mappers and OpenStreetMap users, developers and enthusiasts in Norway"},"no-telegram":{name:"@OSM_no on Telegram",description:"OpenStreetMap Norway Telegram chat"},"OSM-PL-facebook-group":{name:"OpenStreetMap Poland Facebook group",description:"Group for mappers and users of OpenStreetMap in Poland"},"OSM-PL-forum":{name:"OpenStreetMap Poland Forum",description:"Forum of Polish OpenStreetMap community"},"si-forum":{name:"OpenStreetMap Slovenia Forum",description:"Forum of OpenStreetMap community in Slovenia"},"si-mailinglist":{name:"OpenStreetMap Slovenia mailing list",description:"Mailing list of OpenStreetMap community in Slovenia"},"OSM-ES-mailinglist":{name:"Talk-es mailing list",description:"A mailing list to discuss OpenStreetMap in Spain"},"OSM-ES-telegram":{name:"@OSMes on Telegram",description:"OpenStreetMap Spain Telegram chat"},"osm-se":{name:"OpenStreetMap.se",description:"Provide OSM services and information for the local community in Sweden"},"se-facebook":{name:"OpenStreetMap Sweden Facebook",description:"OpenStreetMap Sweden on Facebook"},"se-forum":{name:"OpenStreetMap Sweden Web Forum",description:"OpenStreetMap Sweden web forum"},"se-irc":{name:"OpenStreetMap Sweden IRC",description:"Join #osm.se on irc.oftc.net (port 6667)"},"se-mailinglist":{name:"Talk-se Mailing List",description:"A mailing list to discuss OpenStreetMap in Sweden"},"se-twitter":{name:"OpenStreetMap Sweden on Twitter",description:"Follow us on Twitter: {url}"},"Nottingham-OSM-pub-meetup":{name:"East Midlands (Nottingham) Monthly pub meet-up",description:"Social gathering for East Midlands mappers and users",extendedDescription:"A group have been meeting since March 2011, initially in Nottingham, and, more recently in Derby, and from time to time elsewhere in the East Midlands. These are social gatherings, but are an excellent place to come and ask specific questions about OSM either in the area or in general. In the summer months we usually do some light mapping for an hour in the vicinity of our meeting place. The group as a whole has a special interest in mapping public rights of way and from time to time has mapping meetings for this purpose."},"gb-mailinglist":{name:"Talk-gb Mailing List",description:"Talk-gb is the main communication forum list for the British (including Northern Ireland) OSM community"},"mappa-mercia-group":{name:"Mappa Mercia local group",description:"A home for OpenStreetMap enthusiasts in the Midlands",extendedDescription:"Mappa Mercia is a project to grow OpenStreetMap in the West Midlands, UK. We run community events, provide training and support local organisations wishing to open up their data."},"gb-irc":{name:"OpenStreetMap United Kingdom IRC",description:"Join #osm-gb on irc.oftc.net (port 6667)",extendedDescription:"Join #osm-gb on irc.oftc.net (port 6667), please be patient and wait for a few minutes if you ask a question"},"OSM-CA-Slack":{name:"OSM-CA Slack",description:"All are welcome! Sign up at {signupUrl}."},"OSM-Vancouver-meetup":{name:"OpenStreetMap Vancouver",description:"Mappers and OpenStreetMap users in the Vancouver, BC area"},"OSM-CU-telegram":{name:"OSM Cuba on Telegram",description:"OpenStreetMap Cuba Telegram chat"},"OSM-NI-telegram":{name:"OSM Nicaragua on Telegram",description:"OpenStreetMap Nicaragua Telegram chat"},"Bay-Area-OpenStreetMappers":{name:"Bay Area OpenStreetMappers",description:"Improve OpenStreetMap in the Bay Area",extendedDescription:"This group is about growing the OpenStreetMap community here in the Bay Area. Our events are open to everyone, from open source enthusiasts, cyclists, GIS professionals, geocachers, and beyond. Anyone and everyone who is interested in maps, map making and free map data is welcome to join our group as well as attend our events."},"Central-Pennsylvania-OSM":{name:"Central Pennsylvania OSM",description:"Online mapping community based out of State College, PA"},"Code-for-San-Jose-Slack":{name:"Code for San Jose Slack",description:"All are welcome! Sign up at {signupUrl}, then join the #osm channel."},"Dallas-Fort-Worth-OSM":{name:"Dallas-Fort Worth OSM",description:"The OpenStreetMap user group for Dallas-Fort Worth",extendedDescription:"Dallas, Fort Worth, and all the cities in between are abounding with creative and tech-savvy people. The vision for this usergroup is to find new ways to use the amazing resource of OSM."},GeoPhilly:{name:"GeoPhilly",description:"Meetup for map enthusiasts in the Philadelphia area",extendedDescription:"GeoPhilly unites developers, geographers, data geeks, open source enthusiasts, civic hackers and map addicts in our shared love of maps and the stories they tell. If you use maps as part of your work or just want to learn more, this is the meetup for you!  Our events aim to be open, friendly, educational and social and range from happy hours to lightning talks or even workshops. Come create a diverse, inspiring geospatial community in the Philadelphia with us!"},MapMinnesota:{name:"MapMinnesota",description:"Mappers and OpenStreetMap enthusiasts in the Twin Cities area",extendedDescription:"Connecting OpenStreetMap enthusiasts in Minnesota and the Twin Cities!"},"Mapping-DC-meetup":{name:"Mapping DC",description:"Improve OpenStreetMap in the DC area",extendedDescription:"We are a group of volunteer mappers who aim to improve the OpenStreetMap in the DC area. We also aim to teach others about the OSM ecosystem, data analytics, cartography, and GIS. We gather every other month at meetups to focus on one area of our city."},"Maptime-ME-meetup":{name:"MaptimeME",description:"Mappers and OpenStreetMap users, around Portland, ME",extendedDescription:"Maptime is, rather literally, time for mapmaking.  Our mission is to open the doors of cartographic possibility to anyone interested by creating a time and space for collaborative learning, exploration, and map creation using mapping tools and technologies."},"MaptimeHRVA-twitter":{name:"MaptimeHRVA Twitter",description:"Follow us on Twitter at {url}"},"us-ma-mailinglist":{name:"Talk-us-massachusetts Mailing List",description:"Email mailing list for the Massachusetts OSM community"},"OpenCleveland-meetup":{name:"Open Cleveland",description:"Improve OpenStreetMap in the Cleveland area",extendedDescription:"Open Geo Cleveland aims to be a resource for people to discuss and share knowledge on utilizing free geographic data sets especially OpenStreetMap, and Open geo-spatial software that manages, edits, and displays geographic data, and advocate for its use in Northeast Ohio. We're also a maptime chapter =)"},"OSM-Boston":{name:"OpenStreetMap Boston",description:"Mappers and OpenStreetMap users in the Boston area",extendedDescription:"OpenStreetMap is the free and open, wiki-style map of the world, with hundreds of thousands of contributions every day from people like you. Editing the map is simple, and fun! Join us both indoors and outdoors in our effort to create the best map of the Boston area and the rest of the world!"},"OSM-Central-Salish-Sea":{name:"OpenStreetMap Central Salish Sea",description:"Mappers and OpenStreetMap users around Mount Vernon, WA",extendedDescription:"OpenStreetMap is an map of the world made by people like you. It's a map that you build, that's given away for free like wikipedia. Check out osm.org for more. We meet all the time to talk maps, make maps and have fun!"},"OSM-Chattanooga":{name:"OSM Chattanooga",description:"The OpenStreetMap user group for Chattanooga"},"OSM-Colorado":{name:"OpenStreetMap Colorado",description:"Mappers and OpenStreetMap users in the state of Colorado, USA",extendedDescription:"OpenStreetMap (OSM) Colorado is a local collaboration of people interested in contributing their efforts to create free maps. We encourage all of our mappers to organize or suggest mapping events throughout the state. Meetup activities can be simple social mixers, OSM basic to advanced training, or community mapping parties."},"OSM-NYC":{name:"OpenStreetMap NYC",description:"Mappers and OpenStreetMap users, developers and enthusiasts in the New York Metropolitan area"},"OSM-Portland-forum":{name:"OpenStreetMap PDX Google Group",description:"Forum and mailing list for OpenStreetMap users in the Portland area",extendedDescription:"This group is to facilitate improvements to OpenStreetMap in the Portland, Oregon area to support applications such as the Open Trip Planner."},"OSM-Portland":{name:"OpenStreetMap Portland",description:"Mappers and OpenStreetMap users in the Portland area",extendedDescription:"OpenStreetMap (OSM) is a map of the world made by people like you. It's a map that you build, that's given away for free like wikipedia. Check out osm.org for more, and come join us at a meetup to talk maps, contribute to OSM, and have fun!"},"OSM-Seattle":{name:"OpenStreetMap Seattle",description:"Mappers and OpenStreetMap users in the Seattle area"},"OSM-SoCal":{name:"OpenStreetMap Southern California",description:"Let's have some fun, contribute something to Los Angeles, and learn about mapping!",extendedDescription:"OpenStreetMap (OSM) Southern California is for anyone interested in mapping to get together to work with OpenStreetMap.  OpenStreetMap, the Wikipedia of maps, is a free open-source map of the world being created by more than 1,000,000 volunteers around the globe.  Everyone is welcome.  If you don't know OpenStreetMap, we'll teach you. If you have an idea for a mapping project or even a field trip that the group can do, great!"},"OSM-South-Bay":{name:"OSM South Bay",description:"Map Nights hosted by Code for San Jose",extendedDescription:"Code for San Jose, the local Code for America brigade, hosts monthly Map Nights on Thursday nights in downtown San José. Meet fellow South Bay mappers, help out with local mapping projects, and hear about other civic tech projects. Programming and GIS skills are not required."},"OSM-Tampa-Bay":{name:"OpenStreetMap Tampa Bay",description:"Mappers and OpenStreetMap users in the Tampa Bay area",extendedDescription:"OSM Tampa Bay group for local residents to get together and build out the definitive map of Tampa Bay with OpenStreetMap, the free and editable map of the world.  If you're into maps, data, open source, GPS, hiking, cycling, et cetera, you'll love working with OpenStreetMap -- so join in! We'll get together and map and talk about new topics once-a-month or so."},"OSM-US-Slack":{name:"OpenStreetMap US Slack",description:"All are welcome! Sign up at {signupUrl}"},"OSM-US":{name:"OpenStreetMap US",description:"We help grow and improve OpenStreetMap in the United States.",extendedDescription:"We support OpenStreetMap by holding annual conferences, providing community resources, building partnerships, and by spreading the word. Join OpenStreetMap US here: {signupUrl}",events:{sotmus2018:{name:"State of the Map US 2018",description:"Join the OpenStreetMap community at State of the Map US in Detroit, Michigan. Connect with other mappers, businesses, government agencies, and non profits, all collaborating around the free and editable map of the world.",where:"Detroit, Michigan"}}},"OSM-Utah":{name:"OpenStreetMap Utah",description:"Mappers and OpenStreetMap users in the Salt Lake City area",extendedDescription:"Activities may include things like Learn To Map workshops, mapping parties and outdoor data collection. The events will take place in the SLC area, at least initially.  We are looking for seasoned mappers as well as people new to OSM. Join and let's do some mapping!"},"OSM-Wyoming":{name:"OpenStreetMap Wyoming",description:"Mappers and OpenStreetMap users in the state of Wyoming",extendedDescription:"OpenStreetMap (OSM) Wyoming is a local collaboration of people interested in contributing their efforts to create free maps. We encourage all of our mappers to organize or suggest mapping events throughout the state. Meetup activities can be simple social mixers, OSM basic to advanced training, or community mapping parties."},"PHXGeo-meetup":{name:"PHXGeo Meetup",description:"Mappers and OpenStreetMap users in the Phoenix, AZ area",extendedDescription:"This is a meetup group for those in the Phoenix area who like maps, GIS, OpenStreetMap, cartography and anything in between."},"PHXGeo-twitter":{name:"PHXGeo Twitter",description:"Follow us on Twitter at {url}"},"Western-Slope-facebook":{name:"Western Slope OSM Facebook",description:"Mappers and OpenStreetMap users around Grand Junction, CO"},"Western-Slope-meetup":{name:"Western Slope OSM Meetup",description:"Mappers and OpenStreetMap users around Grand Junction, CO",extendedDescription:"The goal of this group is to introduce OpenStreetMap to the community, develop a community of mappers, create the most amazing geodata possible using whatever method we can and finally strategize in order to get this data out into our community. Imagine accurate trail signage! Imagine further development of bike paths! Imagine anything you want, that's the joy of OpenStreetMap!"},"Maptime-Australia-Slack":{name:"Maptime Australia Slack",description:"Sign up at {signupUrl}"},"talk-au":{name:"Talk-au Mailing List",description:"Place for Aussie mappers to chat"},"OSM-AR-facebook":{name:"OpenStreetMap Argentina Facebook",description:"Join the OpenStreetMap Argentina community on Facebook",extendedDescription:"News from the local community"},"OSM-AR-forum":{name:"OpenStreetMap Argentina web forum",description:"Join the OpenStreetMap Argentina web forum",extendedDescription:"Ideal for long or important discussions. Slow response time."},"OSM-AR-irc":{name:"OpenStreetMap Argentina IRC",description:"Join #osm-ar on irc.oftc.net (port 6667)",extendedDescription:"You may find the most geeky user in the community."},"OSM-AR-mailinglist":{name:"Talk-ar Mailing List",description:"Historic mailing list. Almost unused today."},"OSM-AR-telegram":{name:"OpenStreetMap Argentina Telegram",description:"Join the OpenStreetMap Argentina community on Telegram",extendedDescription:"The most active channel in the community, ideal for chatting and getting answers to your questions instantly. Everyone is welcome!"},"OSM-AR-twitter":{name:"OpenStreetMap Argentina Twitter",description:"Follow us on Twitter at {url}",extendedDescription:"News from the local community and OpenStreetMap in general."},"OSM-BO-mailinglist":{name:"Talk-bo Mailing List",description:"Talk-bo is the official mailing list for the Bolivian OpenStreetMap community",extendedDescription:"Mapping in Bolivia? Have questions, want to connect with the community here? Join us at {url}. All are welcome!"},"Bahia-telegram":{name:"OpenStreetMap Bahia Telegram Group",description:"Join the OpenStreetMap Bahia community on Telegram",extendedDescription:"Join the community to learn more about OpenStreetMap, ask questions or participate in our meetings. Everyone is welcome!"},"DF-telegram":{name:"OpenStreetMap Brasília Telegram Group",description:"Join the OpenStreetMap Brasília community on Telegram",extendedDescription:"Join the community to learn more about OpenStreetMap, ask questions or participate in our meetings. Everyone is welcome!"},"OSM-br-mailinglist":{name:"Talk-br Mailing List",description:"A mailing list to discuss OpenStreetMap in Brazil"},"OSM-br-telegram":{name:"OpenStreetMap Brasil Telegram",description:"Join the OpenStreetMap Brasil community on Telegram",extendedDescription:"Join the community to learn more about OpenStreetMap, ask questions or participate in our meetings. Everyone is welcome!"},"OSM-br-twitter":{name:"OpenStreetMap Brasil Twitter",description:"Follow us on Twitter at {url}"},"RS-telegram":{name:"OpenStreetMap Rio Grande do Sul Telegram Group",description:"Join the OpenStreetMap Rio Grande do Sul community on Telegram",extendedDescription:"Join the community to learn more about OpenStreetMap, ask questions or participate in our meetings. Everyone is welcome!"},"OSM-CL-facebook":{name:"OpenStreetMap Chile Facebook",description:"Join the OpenStreetMap Chile community on Facebook",extendedDescription:"Join the community to learn more about OpenStreetMap, ask questions or participate in our meetings. Everyone is welcome!"},"OSM-CL-mailinglist":{name:"Talk-cl Mailing List",description:"A mailing list to discuss OpenStreetMap in Chile"},"OSM-CL-telegram":{name:"OpenStreetMap Chile Telegram",description:"Join the OpenStreetMap Chile community on Telegram",extendedDescription:"Join the community to learn more about OpenStreetMap, ask questions or participate in our meetings. Everyone is welcome!"},"OSM-CL-twitter":{name:"OpenStreetMap Chile Twitter",description:"Follow us on Twitter at {url}"},"Maptime-Bogota":{name:"Maptime Bogotá",description:"We're a group of mappers interested in mapping in OpenStreetMap around Bogotá.",extendedDescription:"Learn to collect data in the field and digitize onto OpenStreetMap.  It is not necessary to have previous knowledge! You just need the desire to participate, learn, and have fun."},"OSM-CO-facebook":{name:"OpenStreetMap Colombia Facebook",description:"Join the OpenStreetMap Colombia community on Facebook",extendedDescription:"Join the community to learn more about OpenStreetMap. Everyone is welcome!"},"OSM-CO-mailinglist":{name:"Talk-co Mailing List",description:"A mailing list to discuss OpenStreetMap in Colombia"},"OSM-CO-telegram":{name:"OSM Colombia on Telegram",description:"OpenStreetMap Colombia Telegram chat"},"OSM-CO-twitter":{name:"OpenStreetMap Colombia Twitter",description:"Follow us on Twitter at {url}"},"OSM-CO":{name:"OpenStreetMap Colombia",description:"News of the OpenStreetMap Colombia community and the OSMCo Foundation"},"OSM-EC-telegram":{name:"OSM Ecuador on Telegram",description:"OpenStreetMap Ecuador Telegram chat"},"OSM-PY-telegram":{name:"OSM Paraguay on Telegram",description:"OpenStreetMap Paraguay Telegram chat"},"OSM-PE-facebook":{name:"OpenStreetMap Peru Facebook",description:"Join the OpenStreetMap Peru community on Facebook"},"OSM-PE-mailinglist":{name:"Talk-pe Mailing List",description:"The official mailing list for the OpenStreetMap Peru community"},"OSM-PE-matrix":{name:"OpenStreetMap Peru Matrix Chat",description:"Chat with other members of the OpenStreetMap Peru community in Matrix."},"OSM-PE-telegram":{name:"OpenStreetMap Peru Telegram",description:"Join the OpenStreetMap Peru community on Telegram"},"OSM-PE-twitter":{name:"OpenStreetMap Peru Twitter",description:"Follow us on Twitter at {url}"},"OSM-PE":{name:"OpenStreetMap Peru",description:"News and resources for the OpenStreetMap Peru community"},"LATAM-Facebook":{name:"OpenStreetMap Latam Facebook",description:"OpenStreetMap Latam on Facebook"},"LATAM-Telegram":{name:"OpenStreetMap Latam Telegram",description:"OpenStreetMap Telegram for Latin America"},"LATAM-Twitter":{name:"OpenStreetMap Latam Twitter",description:"Follow us on Twitter at {url}"},"osm-latam":{name:"OpenStreetMap Latam",description:"Supporting OpenStreetMap in Latin America",events:{"sotm-latam-2018":{name:"State of the Map Latam 2018",description:"State of the Map Latam is the annual conference for all mappers and users of OpenStreetMap in Latin America. The program includes talks, panels, workshops, and mapathons related to OpenStreetMap.",where:"Buenos Aires, Argentina"}}},"OSM-Discord":{name:"OpenStreetMap Discord",description:"Get in touch with other mappers via Discord"},"OSM-Facebook":{name:"OpenStreetMap on Facebook",description:"Like us on Facebook for news and updates about OpenStreetMap."},"OSM-help":{name:"OpenStreetMap Help",description:"Ask a question and get answers on OSM's community-driven question and answer site.",extendedDescription:"{url} is for everyone who needs help with OpenStreetMap.  Whether you are a beginner mapper or have a technical question, we're here to help!"},"OSM-IRC":{name:"OpenStreetMap IRC",description:"Join #osm on irc.oftc.net (port 6667)"},"OSM-Reddit":{name:"OpenStreetMap on Reddit",description:"/r/openstreetmap/ is a great place to learn more about OpenStreetMap.  Ask us anything!"},"OSM-Telegram":{name:"OpenStreetMap Telegram",description:"Join the OpenStreetMap Telegram global supergroup at {url}"},"OSM-Twitter":{name:"OpenStreetMap Twitter",description:"Follow us on Twitter at {url}"},OSMF:{name:"OpenStreetMap Foundation",description:"OSMF is a UK-based not-for-profit that supports the OpenStreetMap Project",extendedDescription:"OSMF supports the OpenStreetMap by fundraising, maintaining the servers which power OSM, organizing the annual State of the Map conference, and coordinating the volunteers who keep OSM running. You can show your support and have a voice in the direction of OpenStreetMap by joining as an OSMF member here: {signupUrl}",events:{sotm2018:{name:"State of the Map 2018",description:"Join us for 3 days in Milan, Italy for the annual worldwide OpenStreetMap conference, bringing together everyone in the community to socialize, share, and learn.",where:"Milan, Italy"}}}}};
 
   var features$2 = {botswana:{type:"Feature",id:"botswana",properties:{},geometry:{type:"Polygon",coordinates:[[[25.65423,-18.48085],[25.70131,-18.56629],[25.79198,-18.60814],[25.83557,-18.82958],[25.95414,-18.89236],[26.00296,-19.02313],[25.9925,-19.058],[26.17908,-19.52356],[26.25057,-19.57064],[26.32554,-19.57064],[26.37611,-19.62121],[26.35344,-19.64562],[26.70741,-19.87404],[26.73356,-19.91763],[26.97419,-20.00133],[27.04394,-19.99784],[27.13984,-20.06585],[27.22005,-20.07456],[27.30723,-20.22626],[27.31769,-20.45643],[27.73269,-20.4913],[27.74664,-20.70926],[27.71525,-21.07718],[27.9088,-21.2777],[28.02562,-21.55668],[28.19825,-21.5933],[28.37261,-21.59679],[28.50339,-21.65433],[28.58011,-21.62643],[28.8033,-21.71362],[29.08577,-21.80603],[29.03346,-21.90193],[29.06659,-22.02399],[29.17645,-22.07107],[29.25665,-22.05189],[29.38569,-22.19312],[29.32117,-22.21231],[29.0387,-22.23323],[29.01428,-22.27159],[28.97941,-22.31344],[28.98115,-22.34482],[28.94105,-22.45991],[28.52257,-22.59766],[28.36041,-22.58371],[28.18255,-22.70053],[28.18255,-22.74761],[28.06747,-22.89931],[27.95239,-22.9708],[27.96285,-23.03532],[27.74838,-23.24107],[27.68561,-23.21666],[27.62109,-23.23758],[27.56006,-23.36836],[27.2741,-23.49565],[27.08578,-23.66304],[27.00034,-23.70489],[26.88875,-24.10593],[26.87654,-24.26635],[26.74228,-24.31343],[26.57663,-24.45292],[26.42842,-24.64821],[25.8844,-24.77724],[25.89486,-24.88012],[25.76585,-25.17485],[25.66467,-25.48682],[25.58448,-25.64908],[25.3456,-25.78509],[25.11021,-25.76939],[25.02517,-25.71967],[24.92538,-25.81822],[24.69696,-25.83042],[24.46156,-25.74324],[24.37786,-25.76765],[24.21127,-25.67022],[23.92974,-25.64036],[23.66819,-25.44158],[23.3121,-25.26869],[22.88179,-25.50087],[22.72835,-26.01351],[22.63768,-26.10767],[22.56793,-26.2367],[22.48424,-26.21054],[22.35521,-26.33609],[22.24971,-26.35352],[22.07317,-26.63251],[21.9668,-26.67131],[21.79767,-26.66956],[21.77761,-26.69223],[21.80377,-26.78465],[21.6913,-26.87096],[21.59889,-26.8605],[21.5274,-26.86224],[21.32339,-26.84349],[21.14248,-26.87375],[21.00386,-26.84873],[20.98729,-26.81621],[20.85826,-26.80575],[20.68477,-26.92022],[20.61677,-26.79293],[20.61589,-26.68718],[20.622,-26.60461],[20.5941,-26.47558],[20.82252,-26.153],[20.78939,-25.92458],[20.63769,-25.63862],[20.63595,-25.55143],[20.36045,-25.06321],[20.25583,-24.93766],[20.11982,-24.89756],[19.98556,-24.76853],[19.99602,-21.99435],[20.9934,-22.00132],[20.99514,-18.30648],[21.45547,-18.31171],[23.10324,-17.98913],[23.31422,-17.98913],[23.43105,-18.18268],[23.54439,-18.26289],[23.60542,-18.48085],[23.77455,-18.36577],[23.91928,-18.20884],[24.18606,-18.01355],[24.36915,-17.94031],[24.47377,-17.956],[24.51038,-18.03621],[24.57839,-18.05714],[24.615,-17.98565],[24.71439,-17.89498],[24.97594,-17.77466],[25.09102,-17.82174],[25.15903,-17.76246],[25.27411,-17.79559],[25.25493,-17.91241],[25.31596,-18.06062],[25.40489,-18.1077],[25.5374,-18.37972],[25.65423,-18.48085]]]}},cape_coast_gh:{type:"Feature",id:"cape_coast_gh",properties:{},geometry:{type:"Polygon",coordinates:[[[-1.6,5],[-1.6,5.4],[-1,5.4],[-1,5],[-1.6,5]]]}},ghana:{type:"Feature",properties:{},id:"ghana",geometry:{type:"Polygon",coordinates:[[[-3.11256,5.13335],[-2.97215,5.11112],[-2.94811,5.12753],[-2.75757,5.10599],[-2.7253,5.14087],[-2.78641,5.28242],[-2.78297,5.29541],[-2.76993,5.2937],[-2.76546,5.31797],[-2.77748,5.33079],[-2.77319,5.35557],[-2.72495,5.34224],[-2.78023,5.60642],[-2.86022,5.65049],[-2.92889,5.61838],[-2.96631,5.64127],[-2.95292,5.71643],[-3.02639,5.7096],[-3.01987,5.8575],[-3.07411,5.98624],[-3.10226,6.15284],[-3.15514,6.25114],[-3.17574,6.25182],[-3.17162,6.29755],[-3.23753,6.54183],[-3.23341,6.60049],[-3.26157,6.61959],[-3.21007,6.73417],[-3.24028,6.83031],[-2.95326,7.23817],[-2.97558,7.27018],[-2.92236,7.61436],[-2.77611,7.94432],[-2.60513,8.03747],[-2.62985,8.11769],[-2.48978,8.20877],[-2.64221,9.00988],[-2.77679,9.03972],[-2.76581,9.15633],[-2.66968,9.26478],[-2.93884,10.66601],[-2.82898,11.0113],[-0.68939,11.00051],[-0.60974,10.91962],[-0.43121,11.04095],[-0.43396,11.10295],[-0.27843,11.17672],[-0.13424,11.13967],[-0.14214,11.10632],[-0.05905,11.08341],[-0.0388,11.10733],[-0.01339,11.11204],[0.02369,11.05308],[0.03296,10.97793],[-0.00549,10.96411],[-0.02266,10.81914],[-0.07141,10.76856],[-0.07999,10.69806],[-0.05905,10.63294],[0.04257,10.60257],[0.0618,10.56207],[0.14351,10.52629],[0.17097,10.42265],[0.26711,10.41151],[0.28633,10.42096],[0.34264,10.31357],[0.39757,10.31492],[0.39722,10.30546],[0.37148,10.28283],[0.35225,10.10746],[0.41817,10.06487],[0.40924,10.01822],[0.36461,10.03174],[0.34676,9.66506],[0.26779,9.64678],[0.24994,9.44771],[0.42847,9.48564],[0.56168,9.40977],[0.48203,8.80501],[0.3804,8.74122],[0.47653,8.59324],[0.65369,8.49546],[0.65781,8.42347],[0.70862,8.38339],[0.72784,8.28964],[0.60425,8.21693],[0.62004,7.70623],[0.59464,7.70283],[0.5809,7.62253],[0.52322,7.5953],[0.52734,7.45099],[0.56168,7.39243],[0.62759,7.40741],[0.66055,7.30935],[0.59395,7.11248],[0.61317,7.09306],[0.59601,7.00549],[0.52322,6.97823],[0.52322,6.94006],[0.56442,6.92234],[0.53284,6.82962],[0.65094,6.73962],[0.63446,6.63733],[0.74707,6.57048],[0.71411,6.51864],[0.90242,6.33355],[1.00405,6.33543],[1.02516,6.25319],[1.05537,6.22964],[1.1,6.17],[1.2,6.17],[1.2,4],[-3,4.5],[-3.11256,5.13335]]]}},madagascar:{type:"Feature",id:"madagascar",properties:{},geometry:{type:"Polygon",coordinates:[[[51,-15],[47.5,-26],[42,-26],[43.5,-16],[49.5,-11],[51,-15]]]}},asia_full:{type:"Feature",id:"asia_full",properties:{},geometry:{type:"Polygon",coordinates:[[[51,13.5],[43.5,12.3],[34.25,27.3],[34.9,29.45],[34,31.9],[27,34.7],[25.1,39],[25.6,40.2],[26.33,40.98],[26.33,41.23],[26.63,41.36],[26.58,41.6],[26.32,41.76],[27.2,42.1],[27.55,41.93],[35,43],[38.3,47.6],[38.7,47.7],[38.86,47.86],[39.74,47.82],[40.1,49.6],[38,50],[37.4,50.4],[36.65,50.25],[35.66,50.35],[35.2,51.1],[34.28,51.27],[34.1,51.7],[34.4,51.73],[33.9,52.35],[31.8,52.05],[31.3,53.1],[32.8,53.3],[30.77,54.78],[30.95,55.61],[28.19,56.13],[27.83,57.29],[27.33,57.53],[27.7,57.9],[27.3,58.7],[28.2,59.37],[27.2,60.2],[31.5,62.6],[29,67],[30,67.66],[28.27,68.6],[31,70],[31,90],[180,90],[180,60],[130,7],[130,-0.5],[131.8,-3.5],[132.3,-8],[128,-11.3],[65,-11.3],[51,13.5]]]}},BGD:{type:"Feature",id:"BGD",properties:{name:"Bangladesh"},geometry:{type:"Polygon",coordinates:[[[92.67272,22.04124],[92.65226,21.32405],[92.30323,21.47548],[92.36855,20.67088],[92.08289,21.1922],[92.02522,21.70157],[91.83489,22.18294],[91.41709,22.76502],[90.49601,22.80502],[90.58696,22.39279],[90.27297,21.83637],[89.84747,22.03915],[89.70205,21.85712],[89.41886,21.96618],[89.03196,22.05571],[88.87631,22.87915],[88.52977,23.63114],[88.69994,24.23372],[88.08442,24.50166],[88.30637,24.86608],[88.93155,25.23869],[88.20979,25.76807],[88.56305,26.44653],[89.35509,26.01441],[89.83248,25.96508],[89.92069,25.26975],[90.87221,25.1326],[91.7996,25.14743],[92.3762,24.97669],[91.91509,24.13041],[91.46773,24.07264],[91.15896,23.50353],[91.70647,22.98526],[91.86993,23.62435],[92.14603,23.6275],[92.67272,22.04124]]]}},india_andhrapradesh:{type:"Feature",id:"india_andhrapradesh",properties:{},geometry:{type:"Polygon",coordinates:[[[76.76365,14.98503],[76.78952,15.01589],[76.77614,15.05336],[76.80034,15.09466],[76.86072,15.05669],[76.87678,15.02859],[76.94279,15.02725],[76.98159,15.0103],[77.00077,15.02948],[77.04671,15.02904],[77.07882,15.00004],[77.1096,15.02859],[77.12744,15.09371],[77.14751,15.10753],[77.16873,15.17462],[77.14554,15.22413],[77.15223,15.29148],[77.12118,15.29418],[77.11387,15.3334],[77.07705,15.32577],[77.0421,15.36103],[77.027,15.44075],[76.97414,15.50807],[77.02697,15.5037],[77.03509,15.63815],[77.08728,15.65733],[77.08192,15.69524],[77.05293,15.72914],[77.05561,15.82458],[77.03333,15.85326],[77.07659,15.90991],[77.14448,15.94265],[77.2479,15.96378],[77.3564,15.95008],[77.42745,15.94836],[77.46652,15.93453],[77.61152,15.91691],[77.6536,15.88393],[77.72205,15.89199],[77.80554,15.87083],[77.8616,15.88138],[77.89376,15.90154],[78.00803,15.86506],[78.03641,15.90188],[78.06997,15.85048],[78.10755,15.83401],[78.17153,15.85511],[78.17371,15.89569],[78.20995,15.9197],[78.2507,15.96993],[78.2682,16.02857],[78.29785,16.01169],[78.40727,16.0756],[78.45394,16.07503],[78.55814,16.04517],[78.59917,16.08361],[78.64311,16.08312],[78.68277,16.03346],[78.73718,16.0097],[78.78267,16.02125],[78.8419,16.08707],[78.83228,16.13919],[78.87606,16.13902],[78.88876,16.0879],[78.92138,16.10307],[78.9049,16.17711],[78.92807,16.19871],[78.98352,16.21074],[79.01236,16.24173],[79.09802,16.2236],[79.12305,16.23187],[79.1593,16.20893],[79.22111,16.23251],[79.23438,16.32518],[79.21143,16.35493],[79.21112,16.44396],[79.22091,16.51631],[79.25265,16.57381],[79.37802,16.58412],[79.41773,16.57986],[79.44409,16.61796],[79.49421,16.63408],[79.53884,16.63046],[79.60613,16.67239],[79.63566,16.6594],[79.68544,16.69755],[79.72286,16.68966],[79.74673,16.72106],[79.79256,16.72485],[79.81796,16.69098],[79.84286,16.70561],[79.88555,16.68642],[79.90723,16.63408],[79.95306,16.63621],[80.00576,16.70857],[80.05536,16.74833],[80.07093,16.81323],[80.0332,16.85233],[79.99173,16.86303],[80.04569,16.96517],[80.08405,16.96339],[80.134,16.98524],[80.18217,17.04501],[80.19555,17.01825],[80.26201,17.01066],[80.28877,16.97677],[80.31553,16.91254],[80.3191,16.87106],[80.35879,16.85501],[80.37306,16.8113],[80.41856,16.84252],[80.45647,16.78989],[80.56262,16.76268],[80.6041,16.78766],[80.55593,16.81843],[80.56485,16.86883],[80.59027,16.91165],[80.53184,16.95001],[80.44264,16.9451],[80.35835,16.97052],[80.38778,17.0071],[80.36682,17.0566],[80.39001,17.07623],[80.42034,17.02494],[80.48234,17.05036],[80.49616,17.10789],[80.56039,17.13822],[80.68393,17.06865],[80.82309,17.03787],[80.85877,17.05081],[80.87714,17.10478],[80.88011,17.1644],[80.91689,17.15439],[80.91892,17.22003],[80.99838,17.19012],[81.03576,17.19196],[81.05653,17.22041],[81.16295,17.23278],[81.18035,17.25463],[81.17053,17.29656],[81.19016,17.32733],[81.26732,17.3202],[81.31385,17.37576],[81.24132,17.40667],[81.22725,17.43762],[81.17746,17.45203],[81.15755,17.47938],[81.11343,17.49477],[81.08374,17.45957],[81.01198,17.49248],[80.99962,17.53013],[80.95671,17.58749],[80.85431,17.59347],[80.86444,17.62914],[80.90266,17.63912],[80.90684,17.67993],[80.89153,17.74125],[80.94636,17.76025],[81.03556,17.74495],[81.07481,17.76038],[81.08891,17.81081],[81.15938,17.85273],[81.19194,17.84694],[81.25394,17.81215],[81.40915,17.80501],[81.47025,17.8233],[81.48096,17.80278],[81.5541,17.81616],[81.61119,17.81527],[81.66293,17.87682],[81.70307,17.86121],[81.78246,17.90982],[81.80119,17.93614],[81.89932,17.9687],[82.0019,18.02356],[82.03316,18.06597],[82.08072,18.07378],[82.14091,18.0439],[82.17228,18.04993],[82.25028,17.9883],[82.27583,17.995],[82.2667,18.04332],[82.29628,18.06899],[82.34354,18.07485],[82.33329,18.1422],[82.30608,18.19572],[82.33284,18.21579],[82.33685,18.26619],[82.37209,18.27421],[82.39305,18.30633],[82.33462,18.31703],[82.38458,18.36922],[82.36138,18.4098],[82.43513,18.48477],[82.48969,18.52285],[82.53139,18.51177],[82.54422,18.41638],[82.60918,18.37427],[82.59758,18.26516],[82.64005,18.23708],[82.67329,18.29908],[82.70644,18.30476],[82.77538,18.33958],[82.79251,18.36262],[82.78448,18.42803],[82.80742,18.44772],[82.89919,18.40074],[82.91103,18.36453],[82.98471,18.36362],[83.0002,18.38368],[83.04775,18.37883],[83.07472,18.401],[83.04552,18.44345],[83.05997,18.48603],[83.09665,18.54123],[83.05931,18.54334],[83.0336,18.57266],[83.05776,18.62215],[83.09414,18.63021],[83.15495,18.70089],[83.23099,18.75616],[83.27407,18.76523],[83.28745,18.79777],[83.36791,18.81557],[83.40661,18.84174],[83.39569,18.87914],[83.35554,18.92896],[83.36892,18.96132],[83.32119,18.97447],[83.3428,19.01449],[83.41665,19.00408],[83.45049,18.95576],[83.48237,19.00825],[83.46716,19.07746],[83.51314,19.07262],[83.52143,19.03271],[83.61209,19.10076],[83.62679,19.14969],[83.69206,19.05202],[83.71342,18.99346],[83.73398,18.98382],[83.79596,19.01607],[83.84255,18.9178],[83.85136,18.86003],[83.87788,18.82716],[84.05557,18.79246],[84.0894,18.75373],[84.16689,18.78415],[84.22422,18.79642],[84.2535,18.78262],[84.2914,18.8],[84.33966,18.80123],[84.39349,18.89211],[84.43671,18.92277],[84.42292,18.94711],[84.47894,18.99017],[84.51711,19.04634],[84.62687,19.08543],[84.61653,19.12624],[84.66828,19.13065],[84.6721,19.16552],[84.71352,19.1524],[84.70468,19.11772],[84.76857,19.08003],[85.15481,18.87834],[85.14492,18.85295],[85.05442,18.77126],[85.01176,18.69225],[84.94947,18.67649],[84.44354,18.21885],[83.98107,17.79763],[83.77893,17.63361],[83.20925,17.15734],[82.8246,16.92714],[82.20846,16.16914],[81.78413,16.05362],[81.60171,16.04774],[80.84225,15.52037],[80.65306,15.4875],[80.54735,15.42991],[80.4922,15.34128],[80.47381,15.25261],[80.48624,15.06582],[80.49835,15.0251],[80.66968,13.56514],[80.26863,13.56255],[80.24181,13.46797],[80.22545,13.48346],[80.14774,13.49443],[80.08045,13.49111],[80.08,13.52565],[80.00213,13.53964],[80.01841,13.50074],[79.97441,13.46419],[79.96622,13.38714],[79.93821,13.34898],[79.86379,13.31632],[79.8129,13.31712],[79.79245,13.29487],[79.73437,13.27843],[79.79598,13.24103],[79.75102,13.21106],[79.68369,13.24845],[79.68102,13.29448],[79.57781,13.26176],[79.54809,13.32329],[79.42941,13.33391],[79.41957,13.24971],[79.43293,13.1966],[79.39666,13.19679],[79.36005,13.17504],[79.36244,13.13752],[79.31106,13.1268],[79.28351,13.14994],[79.23853,13.1464],[79.20549,13.10147],[79.16498,13.01908],[79.06532,13.04951],[78.99361,13.08754],[78.95768,13.07478],[78.81243,13.08649],[78.75104,13.05634],[78.71387,13.06691],[78.70525,13.01518],[78.6625,13.02861],[78.63167,12.98455],[78.63629,12.92494],[78.60313,12.84933],[78.59178,12.77804],[78.55737,12.73938],[78.55312,12.69582],[78.50595,12.74103],[78.50517,12.68031],[78.46933,12.67292],[78.47136,12.62811],[78.3799,12.62235],[78.30177,12.66322],[78.27563,12.70205],[78.23857,12.6994],[78.23025,12.75702],[78.2528,12.82236],[78.25198,12.85741],[78.31411,12.85733],[78.32741,12.90272],[78.35638,12.93819],[78.38944,12.90542],[78.41213,12.94302],[78.46924,12.97546],[78.46092,13.03126],[78.5219,13.06638],[78.54509,13.11098],[78.57956,13.21461],[78.57797,13.28201],[78.51185,13.28722],[78.44649,13.30825],[78.43949,13.327],[78.36546,13.36503],[78.38151,13.40071],[78.37259,13.46181],[78.38241,13.52477],[78.40574,13.57659],[78.39268,13.5915],[78.32632,13.59445],[78.25894,13.58461],[78.20436,13.60369],[78.16645,13.65721],[78.11784,13.65587],[78.12295,13.71405],[78.09423,13.74251],[78.12795,13.78565],[78.11441,13.8625],[78.04999,13.89494],[78.04642,13.86104],[78.00476,13.87355],[77.95566,13.82664],[77.95098,13.88825],[77.98752,13.89784],[77.97015,13.95827],[77.92868,13.90698],[77.89567,13.93954],[77.83858,13.93508],[77.81494,13.91679],[77.83635,13.86863],[77.79261,13.8211],[77.6267,13.76984],[77.53033,13.69514],[77.45805,13.68671],[77.47014,13.7502],[77.45855,13.79212],[77.41662,13.80595],[77.43223,13.84163],[77.32787,13.83226],[77.31449,13.86393],[77.25829,13.84609],[77.21904,13.86794],[77.18236,13.8682],[77.15308,13.84278],[77.18088,13.78098],[77.17444,13.76135],[77.10308,13.76759],[77.06516,13.74405],[77.0277,13.77651],[77.00003,13.74482],[76.97723,13.81547],[77.01323,13.85558],[77.04239,13.9332],[76.99574,13.96114],[77.00108,13.98729],[76.93324,14.03009],[76.97878,14.07002],[76.89779,14.16518],[76.96469,14.18169],[77.02696,14.17477],[77.02154,14.13052],[77.03389,14.05587],[77.13014,14.04533],[77.1441,14.00245],[77.28518,14.01342],[77.31997,14.03126],[77.3503,13.95767],[77.35476,13.90325],[77.39713,13.90415],[77.42702,13.98353],[77.39,14.01386],[77.33291,14.02947],[77.40204,14.1102],[77.38331,14.13607],[77.39624,14.17175],[77.51711,14.17844],[77.49659,14.23419],[77.50284,14.27834],[77.45021,14.28414],[77.44887,14.31625],[77.37617,14.33081],[77.38984,14.26937],[77.28608,14.2828],[77.28786,14.33766],[77.23835,14.31759],[77.1661,14.34301],[77.13845,14.33721],[77.11838,14.29395],[77.11539,14.22104],[77.0818,14.2159],[77.05638,14.24623],[76.9426,14.2444],[76.92967,14.27651],[76.94748,14.31179],[76.9038,14.32379],[76.88373,14.35055],[76.88774,14.3947],[76.97828,14.48256],[76.91138,14.48836],[76.87481,14.47275],[76.83244,14.52761],[76.80434,14.53207],[76.76554,14.60075],[76.77639,14.68002],[76.80359,14.7398],[76.78371,14.78455],[76.83756,14.78968],[76.86771,14.96792],[76.76736,14.97267],[76.76365,14.98503]]]}},india_full:{type:"Feature",id:"india_full",properties:{name:"India"},geometry:{type:"MultiPolygon",coordinates:[[[[77.83745,35.49401],[78.91227,34.32194],[78.81109,33.5062],[79.20889,32.99439],[79.17613,32.48378],[78.45845,32.61816],[78.73889,31.51591],[79.72137,30.88272],[81.11126,30.18348],[80.47672,29.72987],[80.08843,28.79447],[81.0572,28.41609],[81.99999,27.92548],[83.30425,27.36451],[84.67502,27.2349],[85.25178,26.7262],[86.02439,26.63098],[87.22747,26.3979],[88.06024,26.41462],[88.1748,26.8104],[88.04313,27.44582],[88.12044,27.87654],[88.73033,28.08686],[88.81425,27.29932],[88.83564,27.09897],[89.74453,26.7194],[90.37328,26.87572],[91.21751,26.80865],[92.03348,26.83831],[92.10371,27.45261],[91.69666,27.77174],[92.50312,27.89688],[93.41335,28.64063],[94.56599,29.27744],[95.4048,29.03172],[96.11768,29.4528],[96.58659,28.83098],[96.24883,28.41103],[97.32711,28.26158],[97.40256,27.88254],[97.05199,27.69906],[97.134,27.08377],[96.41937,27.26459],[95.12477,26.57357],[95.15515,26.00131],[94.60325,25.16249],[94.55266,24.67524],[94.10674,23.85074],[93.32519,24.07856],[93.28633,23.04366],[93.06029,22.70311],[93.16613,22.27846],[92.67272,22.04124],[92.14603,23.6275],[91.86993,23.62435],[91.70647,22.98526],[91.15896,23.50353],[91.46773,24.07264],[91.91509,24.13041],[92.3762,24.97669],[91.7996,25.14743],[90.87221,25.1326],[89.92069,25.26975],[89.83248,25.96508],[89.35509,26.01441],[88.56305,26.44653],[88.20979,25.76807],[88.93155,25.23869],[88.30637,24.86608],[88.08442,24.50166],[88.69994,24.23372],[88.52977,23.63114],[88.87631,22.87915],[89.03196,22.05571],[88.88877,21.69059],[88.2085,21.70317],[86.9757,21.49556],[87.03317,20.74331],[86.49935,20.15164],[85.06027,19.47858],[83.94101,18.30201],[83.18922,17.67122],[82.19279,17.01664],[82.19124,16.55666],[81.69272,16.31022],[80.792,15.95197],[80.3249,15.89918],[80.02507,15.13641],[80.23327,13.83577],[80.28629,13.00626],[79.86255,12.05621],[79.858,10.35727],[79.34051,10.30885],[78.88535,9.54614],[79.18972,9.21654],[78.27794,8.93305],[77.94116,8.25296],[77.5399,7.96554],[76.59298,8.89928],[76.13006,10.29963],[75.74647,11.30825],[75.3961,11.78125],[74.86482,12.74194],[74.61672,13.99258],[74.44386,14.61722],[73.5342,15.99065],[73.11991,17.92857],[72.82091,19.20823],[72.82448,20.4195],[72.63053,21.35601],[71.17527,20.75744],[70.47046,20.87733],[69.16413,22.0893],[69.64493,22.45078],[69.3496,22.84318],[68.17664,23.69196],[68.8426,24.35913],[71.04324,24.35652],[70.8447,25.2151],[70.28287,25.72223],[70.16893,26.49187],[69.51439,26.94097],[70.6165,27.9892],[71.77767,27.91318],[72.82375,28.96159],[73.45064,29.97641],[74.42138,30.97981],[74.40593,31.69264],[75.25864,32.2711],[74.45156,32.7649],[74.10429,33.44147],[73.74995,34.3177],[74.2402,34.74889],[75.75706,34.50492],[76.87172,34.65354],[77.83745,35.49401]]]]}},india_karnataka:{type:"Feature",id:"india_karnataka",properties:{},geometry:{type:"Polygon",coordinates:[[[73.87267,14.75312],[74.17989,14.95708],[74.2532,14.95804],[74.29821,15.04123],[74.31574,15.18805],[74.27607,15.27727],[74.32187,15.34414],[74.28027,15.38891],[74.27464,15.54999],[74.24074,15.66684],[74.11652,15.65308],[74.16212,15.75075],[74.28923,15.73953],[74.36893,15.78648],[74.34579,15.84959],[74.43203,15.95338],[74.46484,16.0421],[74.37226,16.07692],[74.48045,16.14527],[74.50509,16.22265],[74.31843,16.32588],[74.33806,16.40125],[74.26427,16.53936],[74.33986,16.54825],[74.54427,16.63407],[74.6313,16.57831],[74.68877,16.71489],[74.91203,16.7883],[74.99259,16.95146],[75.09075,16.95064],[75.18186,16.84374],[75.26705,16.86247],[75.28311,16.95524],[75.46783,16.98524],[75.51065,16.94733],[75.66898,16.97766],[75.67389,17.11369],[75.62834,17.18928],[75.65739,17.27069],[75.58469,17.34963],[75.63468,17.47651],[75.77995,17.37683],[75.89432,17.40292],[75.93159,17.32197],[76.11996,17.37007],[76.22917,17.36301],[76.38171,17.31172],[76.37153,17.4341],[76.33086,17.46872],[76.41561,17.60431],[76.48659,17.66155],[76.48652,17.71358],[76.56488,17.76523],[76.66314,17.68771],[76.8094,17.8693],[76.92164,17.94103],[76.9513,18.05843],[76.92422,18.14531],[77.14325,18.20848],[77.20119,18.27828],[77.24726,18.41311],[77.31257,18.43674],[77.41407,18.39352],[77.3672,18.30846],[77.46332,18.26219],[77.57345,18.24294],[77.59821,18.0861],[77.64737,17.99934],[77.6208,17.9031],[77.5709,17.86625],[77.53999,17.72825],[77.45138,17.69052],[77.44541,17.58272],[77.6912,17.50865],[77.53911,17.44295],[77.52471,17.36431],[77.45747,17.34038],[77.3772,17.14285],[77.46328,17.11129],[77.50069,17.01255],[77.45223,16.91995],[77.47617,16.7804],[77.46008,16.61106],[77.37653,16.48644],[77.25617,16.47308],[77.28927,16.408],[77.41673,16.36775],[77.52418,16.3753],[77.59655,16.31743],[77.49303,16.25534],[77.51178,15.92828],[77.2479,15.96378],[77.07659,15.90991],[77.03509,15.63815],[77.027,15.44075],[77.0421,15.36103],[77.15223,15.29148],[77.16873,15.17462],[77.1096,15.02859],[76.98159,15.0103],[76.87678,15.02859],[76.80034,15.09466],[76.76736,14.97267],[76.86771,14.96792],[76.83756,14.78968],[76.77639,14.68002],[76.76554,14.60075],[76.87481,14.47275],[76.88373,14.35055],[76.94748,14.31179],[76.9426,14.2444],[77.05638,14.24623],[77.1661,14.34301],[77.28608,14.2828],[77.38984,14.26937],[77.44887,14.31625],[77.50284,14.27834],[77.51711,14.17844],[77.39624,14.17175],[77.40204,14.1102],[77.33291,14.02947],[77.42702,13.98353],[77.35476,13.90325],[77.31997,14.03126],[77.1441,14.00245],[77.03389,14.05587],[77.02696,14.17477],[76.89779,14.16518],[76.97878,14.07002],[76.93324,14.03009],[77.04239,13.9332],[76.97723,13.81547],[77.06516,13.74405],[77.17444,13.76135],[77.18236,13.8682],[77.32787,13.83226],[77.43223,13.84163],[77.47014,13.7502],[77.53033,13.69514],[77.6267,13.76984],[77.79261,13.8211],[77.89567,13.93954],[77.95098,13.88825],[78.04999,13.89494],[78.11441,13.8625],[78.11784,13.65587],[78.20436,13.60369],[78.40574,13.57659],[78.37068,13.46984],[78.40217,13.31113],[78.58854,13.26912],[78.5219,13.06638],[78.46924,12.97546],[78.35684,12.94022],[78.31447,12.8595],[78.25248,12.85994],[78.23196,12.76495],[78.08636,12.80344],[77.99036,12.80553],[77.93327,12.8876],[77.81099,12.8303],[77.74108,12.67162],[77.60006,12.6661],[77.58743,12.51473],[77.63575,12.48605],[77.61553,12.36799],[77.52722,12.27746],[77.51993,12.19264],[77.60853,12.20409],[77.73432,12.17555],[77.77447,12.12033],[77.67932,11.97287],[77.60217,11.93627],[77.49513,11.94251],[77.42332,11.77259],[77.29576,11.80871],[77.11315,11.77337],[77.01458,11.81306],[76.90977,11.79343],[76.8262,11.60485],[76.56305,11.62046],[76.51399,11.70565],[76.41621,11.67255],[76.20482,11.86247],[76.1155,11.8579],[76.11204,11.97862],[76.00455,11.93123],[75.86924,11.95161],[75.79654,12.0533],[75.63883,12.14712],[75.5804,12.1556],[75.4863,12.29074],[75.43456,12.29653],[75.37427,12.46113],[75.22345,12.56714],[75.1619,12.66883],[75.06067,12.66842],[75.00958,12.79255],[74.8591,12.76032],[74.64061,12.65899],[74.51827,12.99543],[74.32397,13.82179],[73.87267,14.75312]]]}},india_kerala:{type:"Feature",id:"india_kerala",properties:{},geometry:{type:"Polygon",coordinates:[[[74.64061,12.65899],[74.8591,12.76032],[74.88399,12.75347],[74.95843,12.78474],[75.00958,12.79255],[74.99766,12.73819],[75.05297,12.71899],[75.06067,12.66842],[75.11342,12.67842],[75.1619,12.66883],[75.14362,12.63805],[75.18287,12.63181],[75.22345,12.56714],[75.23683,12.56625],[75.28071,12.61847],[75.29121,12.59649],[75.27114,12.55367],[75.28095,12.51799],[75.33492,12.49034],[75.3573,12.46234],[75.39003,12.49736],[75.41661,12.49293],[75.4241,12.46603],[75.39599,12.45143],[75.37427,12.46113],[75.36747,12.41202],[75.38331,12.39011],[75.42333,12.37233],[75.41374,12.34763],[75.43456,12.29653],[75.4863,12.29074],[75.51484,12.25818],[75.53759,12.20064],[75.5804,12.1556],[75.63883,12.14712],[75.66604,12.09583],[75.68727,12.10816],[75.73047,12.07283],[75.75506,12.08318],[75.79833,12.08006],[75.79654,12.0533],[75.82391,12.01308],[75.82999,11.98372],[75.86924,11.95161],[76.00455,11.93123],[76.03621,11.9406],[76.07903,11.96914],[76.11204,11.97862],[76.1155,11.8579],[76.15528,11.87128],[76.20482,11.86247],[76.22662,11.80542],[76.27964,11.81018],[76.30774,11.78297],[76.31799,11.75041],[76.34252,11.73748],[76.41129,11.75913],[76.42399,11.72006],[76.40338,11.70748],[76.41621,11.67255],[76.44345,11.63744],[76.42497,11.62329],[76.37992,11.6224],[76.37056,11.59341],[76.29786,11.56442],[76.2711,11.59296],[76.2256,11.56442],[76.24255,11.52874],[76.24478,11.49439],[76.32105,11.44489],[76.33354,11.45871],[76.39063,11.42794],[76.44861,11.38155],[76.53826,11.35167],[76.54532,11.30094],[76.52349,11.27236],[76.45271,11.23905],[76.44934,11.20462],[76.51048,11.21163],[76.53385,11.19671],[76.60091,11.20654],[76.62971,11.19413],[76.69784,11.23906],[76.72537,11.22534],[76.72765,11.19388],[76.69301,11.17193],[76.69124,11.14472],[76.73852,11.12108],[76.74788,11.07514],[76.73718,11.04749],[76.69507,11.02252],[76.68644,10.98934],[76.66047,10.96052],[76.64932,10.92395],[76.73272,10.88113],[76.77286,10.88158],[76.81746,10.86195],[76.85983,10.79996],[76.88838,10.79996],[76.8973,10.77096],[76.875,10.70674],[76.85537,10.67507],[76.87277,10.62958],[76.80497,10.62646],[76.80854,10.59434],[76.82995,10.58498],[76.81746,10.43869],[76.8072,10.41505],[76.83932,10.35974],[76.82944,10.30749],[76.9018,10.26001],[76.90974,10.23668],[76.93976,10.23927],[76.98194,10.22077],[77.04075,10.25298],[77.06496,10.29751],[77.11964,10.31782],[77.17683,10.35777],[77.23655,10.35242],[77.21441,10.30577],[77.25054,10.25359],[77.25544,10.22549],[77.28042,10.20721],[77.26769,10.12222],[77.23784,10.12768],[77.20426,10.11207],[77.21976,10.07801],[77.26184,10.03015],[77.25908,9.9945],[77.27231,9.96404],[77.24834,9.95177],[77.21305,9.87549],[77.23646,9.85946],[77.22277,9.82317],[77.24656,9.80841],[77.20553,9.69439],[77.17963,9.65641],[77.16816,9.61495],[77.21264,9.60207],[77.23711,9.58089],[77.27684,9.57498],[77.3042,9.59951],[77.36511,9.54996],[77.3997,9.49683],[77.39331,9.45986],[77.36661,9.46037],[77.33693,9.40901],[77.33713,9.36507],[77.32506,9.33664],[77.28329,9.30039],[77.28844,9.27469],[77.26509,9.18184],[77.26714,9.15394],[77.24693,9.12483],[77.21199,9.101],[77.18667,9.04329],[77.16025,9.03584],[77.14986,9.01008],[77.17354,8.99121],[77.19759,8.95104],[77.19567,8.9236],[77.2559,8.8781],[77.25798,8.83758],[77.2292,8.78679],[77.19607,8.74588],[77.17517,8.73703],[77.20586,8.68645],[77.21552,8.64836],[77.27872,8.56521],[77.26344,8.50713],[77.20618,8.47859],[77.22506,8.44602],[77.18854,8.43476],[77.15375,8.37722],[77.14974,8.32192],[77.12209,8.32281],[77.09077,8.2973],[76.92132,8.09605],[76.6728,8.34299],[76.46487,8.59279],[76.22556,8.95652],[75.91159,10.04616],[75.68288,10.55908],[75.58764,10.89204],[75.55244,11.04304],[75.25797,11.51227],[75.53645,11.69255],[75.53089,11.70357],[75.25113,11.52458],[74.97117,11.94518],[74.71236,12.49398],[74.64061,12.65899]]]}},india_maharashtra:{type:"Feature",id:"india_maharashtra",properties:{name:"Maharashtra"},geometry:{type:"Polygon",coordinates:[[[72.53789,20.1498],[72.80202,20.12516],[72.87472,20.22596],[72.97061,20.21213],[72.97329,20.13096],[73.18604,20.05291],[73.29353,20.15371],[73.31137,20.20723],[73.43,20.20634],[73.41484,20.38162],[73.47594,20.49491],[73.51787,20.67019],[73.62224,20.62514],[73.63428,20.58232],[73.74801,20.56716],[73.84658,20.62336],[73.88538,20.72951],[73.93846,20.76073],[73.94515,20.84012],[73.79279,21.06787],[73.68111,21.15233],[73.82249,21.17195],[73.83231,21.2674],[73.94827,21.29773],[73.96879,21.39228],[74.10883,21.44803],[74.30776,21.48014],[74.2917,21.55864],[73.97926,21.54124],[73.86085,21.49576],[73.82294,21.60057],[73.88583,21.64517],[73.89029,21.71073],[73.83231,21.81064],[74.04684,21.92259],[74.14585,21.95425],[74.28991,21.93597],[74.38848,22.02026],[74.52764,21.90876],[74.50578,21.78254],[74.59053,21.66435],[74.83048,21.61038],[74.86438,21.63402],[75.05795,21.56489],[75.11504,21.45963],[75.21985,21.41101],[75.38443,21.38559],[75.46828,21.39406],[75.83267,21.38336],[75.95934,21.39629],[76.05255,21.35259],[76.09849,21.37399],[76.15915,21.25892],[76.16851,21.08587],[76.3826,21.07963],[76.45262,21.11486],[76.48741,21.19604],[76.61676,21.19871],[76.66091,21.28256],[76.62434,21.33519],[76.73227,21.40878],[76.79159,21.48996],[76.79516,21.59745],[76.90131,21.60101],[76.9972,21.68174],[77.1212,21.72545],[77.20728,21.69423],[77.27998,21.76113],[77.47756,21.77005],[77.57122,21.62688],[77.56721,21.52965],[77.45749,21.55641],[77.41869,21.52073],[77.48692,21.37756],[77.93873,21.38693],[78.16932,21.49843],[78.21526,21.55374],[78.3,21.58496],[78.41329,21.57782],[78.43024,21.50155],[78.50874,21.52831],[78.58501,21.48683],[78.932,21.48728],[78.91327,21.59254],[79.1278,21.62822],[79.22102,21.69646],[79.48862,21.67416],[79.50602,21.59031],[79.57604,21.54348],[79.73259,21.60235],[79.85703,21.53099],[80.06665,21.55686],[80.18842,21.63402],[80.26022,21.62019],[80.36905,21.52296],[80.41142,21.43822],[80.51936,21.3896],[80.63532,21.25],[80.45736,21.17284],[80.42391,21.0096],[80.46539,20.92709],[80.54166,20.93378],[80.54344,20.79195],[80.57823,20.67866],[80.50776,20.65458],[80.51177,20.585],[80.62239,20.60373],[80.58581,20.39544],[80.61659,20.32587],[80.38288,20.24157],[80.4141,20.19028],[80.54032,20.11],[80.54567,19.98734],[80.46048,19.82812],[80.66476,19.69075],[80.65673,19.61225],[80.82755,19.56274],[80.88553,19.50922],[80.84271,19.36605],[80.74905,19.28666],[80.67864,19.33089],[80.60751,19.31353],[80.58732,19.39674],[80.48071,19.3355],[80.39329,19.24591],[80.39154,19.1836],[80.3302,19.13746],[80.26929,18.94468],[80.35176,18.84592],[80.24684,18.70149],[80.10826,18.68928],[79.94712,18.78372],[79.95979,18.85795],[79.93945,19.0406],[79.85699,19.09508],[79.94349,19.16387],[79.92836,19.24777],[79.97469,19.38922],[79.92536,19.49855],[79.87599,19.5041],[79.75713,19.60733],[79.63608,19.57639],[79.60249,19.51309],[79.5317,19.55241],[79.42494,19.53529],[79.22736,19.61468],[79.22023,19.5286],[79.1725,19.46081],[79.08018,19.53261],[79.00213,19.54198],[78.89954,19.66954],[78.84245,19.65839],[78.82963,19.75513],[78.60098,19.81809],[78.48728,19.79375],[78.28109,19.90236],[78.3514,19.78327],[78.32909,19.71548],[78.26933,19.69184],[78.29475,19.60621],[78.29564,19.46794],[78.20778,19.43583],[78.16318,19.3551],[78.16675,19.2436],[78.03473,19.2436],[77.92412,19.3444],[77.84428,19.30426],[77.81484,19.13745],[77.74304,19.06118],[77.75106,18.98357],[77.83714,18.95414],[77.90751,18.8295],[77.83749,18.80764],[77.74829,18.60515],[77.65541,18.5316],[77.59709,18.54762],[77.54937,18.3875],[77.55171,18.29114],[77.46332,18.26219],[77.3672,18.30846],[77.41407,18.39352],[77.31257,18.43674],[77.2452,18.41278],[77.19913,18.27795],[77.14119,18.20815],[77.03495,18.18076],[76.95329,18.18881],[76.92422,18.14531],[76.9513,18.05843],[76.9075,18.00923],[76.92164,17.94103],[76.8094,17.8693],[76.66314,17.68771],[76.56488,17.76523],[76.48652,17.71358],[76.48659,17.66155],[76.41561,17.60431],[76.33086,17.46872],[76.37153,17.4341],[76.38171,17.31172],[76.22917,17.36301],[76.11996,17.37007],[75.93159,17.32197],[75.89432,17.40292],[75.77995,17.37683],[75.63468,17.47651],[75.58469,17.34963],[75.65739,17.27069],[75.62834,17.18928],[75.67389,17.11369],[75.66898,16.97766],[75.51065,16.94733],[75.46783,16.98524],[75.28311,16.95524],[75.26705,16.86247],[75.18186,16.84374],[75.09075,16.95064],[74.99259,16.95146],[74.96287,16.87942],[74.90306,16.86241],[74.91203,16.7883],[74.68877,16.71489],[74.6313,16.57831],[74.56843,16.55445],[74.54427,16.63407],[74.33986,16.54825],[74.26427,16.53936],[74.33806,16.40125],[74.31843,16.32588],[74.50509,16.22265],[74.48045,16.14527],[74.37226,16.07692],[74.46484,16.0421],[74.43203,15.95338],[74.34579,15.84959],[74.36893,15.78648],[74.28923,15.73953],[74.16212,15.75075],[74.11652,15.65308],[74.02811,15.60433],[73.97592,15.62887],[73.94515,15.74126],[73.88226,15.74929],[73.68072,15.72057],[73.32871,15.60794],[72.98859,16.57559],[72.71294,17.97077],[72.60935,19.26366],[72.53789,20.1498]]]}},india_puducherry:{type:"Feature",id:"india_puducherry",properties:{name:"Puducherry"},geometry:{type:"Polygon",coordinates:[[[79.87782,12.04973],[79.84726,11.95536],[79.83593,11.90229],[79.81979,11.85761],[79.81464,11.79006],[79.79645,11.7736],[79.77036,11.77191],[79.74564,11.78065],[79.6804,11.7988],[79.61655,11.82434],[79.58702,11.88549],[79.65672,11.93152],[79.64745,11.9594],[79.6423,12.0138],[79.66599,12.03865],[79.72813,12.04201],[79.79885,12.0457],[79.8452,12.05644],[79.87782,12.04973]]]}},india_tamilnadu:{type:"Feature",id:"india_tamilnadu",properties:{},geometry:{type:"Polygon",coordinates:[[[76.23882,11.52666],[76.42497,11.62329],[76.48321,11.69182],[76.56305,11.62046],[76.8262,11.60485],[76.90977,11.79343],[77.01458,11.81306],[77.11315,11.77337],[77.29576,11.80871],[77.33679,11.76902],[77.42332,11.77259],[77.49513,11.94251],[77.60217,11.93627],[77.67932,11.97287],[77.77447,12.12033],[77.73432,12.17555],[77.60853,12.20409],[77.51993,12.19264],[77.52722,12.27746],[77.61553,12.36799],[77.63575,12.48605],[77.58743,12.51473],[77.60006,12.6661],[77.74108,12.67162],[77.79267,12.74643],[77.81099,12.8303],[77.93327,12.8876],[77.99036,12.80553],[78.08636,12.80344],[78.23196,12.76495],[78.2273,12.71513],[78.36824,12.61165],[78.54754,12.68569],[78.62559,12.9194],[78.61355,12.97872],[78.70231,13.05633],[78.80801,13.07774],[78.97973,13.0764],[79.15278,13.00727],[79.1889,13.08443],[79.25625,13.13661],[79.34679,13.13482],[79.45292,13.33852],[79.53513,13.33423],[79.58006,13.24544],[79.68442,13.25659],[79.92572,13.33598],[79.96184,13.45149],[80.06933,13.53757],[80.15229,13.4787],[80.25978,13.44748],[80.68273,13.45353],[80.58546,12.88895],[80.57389,12.78634],[80.43092,12.33305],[80.32877,12.14],[80.20563,11.84284],[79.85031,11.95606],[79.74742,12.0054],[79.69629,11.95142],[79.76493,11.85315],[80.17499,11.74816],[80.13891,11.5158],[80.22104,11.03359],[80.22222,10.98402],[79.85413,10.97539],[79.73705,10.98906],[79.70405,10.91904],[79.85166,10.82788],[80.22599,10.82479],[80.03964,10.09642],[79.66744,9.97318],[79.55982,9.92323],[79.37812,9.6665],[79.42037,9.35343],[79.56652,9.25796],[79.57134,9.08722],[79.49634,8.89762],[79.37403,8.97879],[79.06914,9.02225],[78.73928,8.93257],[78.54484,8.84743],[78.46298,8.3509],[78.36123,8.16045],[78.10363,8.04096],[77.66766,7.85864],[76.92132,8.09605],[77.09077,8.2973],[77.14974,8.32192],[77.20618,8.47859],[77.27872,8.56521],[77.21552,8.64836],[77.19607,8.74588],[77.25798,8.83758],[77.14986,9.01008],[77.26714,9.15394],[77.28844,9.27469],[77.33693,9.40901],[77.3997,9.49683],[77.3042,9.59951],[77.27684,9.57498],[77.16816,9.61495],[77.24656,9.80841],[77.21305,9.87549],[77.26184,10.03015],[77.28042,10.20721],[77.17683,10.35777],[77.06496,10.29751],[76.98194,10.22077],[76.82944,10.30749],[76.81746,10.43869],[76.82995,10.58498],[76.8973,10.77096],[76.81746,10.86195],[76.64932,10.92395],[76.73718,11.04749],[76.72765,11.19388],[76.44934,11.20462],[76.52349,11.27236],[76.53826,11.35167],[76.39063,11.42794],[76.25772,11.47343],[76.23882,11.52666]]]}},india_telengana:{type:"Feature",id:"india_telengana",properties:{},geometry:{type:"Polygon",coordinates:[[[77.23521,16.47123],[77.29413,16.47453],[77.37516,16.48768],[77.37501,16.50885],[77.41861,16.51735],[77.42586,16.57007],[77.46147,16.58589],[77.45871,16.61229],[77.47627,16.64839],[77.43775,16.64241],[77.42132,16.66752],[77.46657,16.6772],[77.47337,16.71709],[77.42692,16.72829],[77.44309,16.76259],[77.4748,16.78164],[77.45754,16.82843],[77.46322,16.84476],[77.45223,16.91995],[77.48061,16.97751],[77.478,17.00152],[77.50069,17.01255],[77.49527,17.04601],[77.46328,17.11129],[77.40575,17.12751],[77.3772,17.14285],[77.36157,17.16669],[77.37179,17.19944],[77.39294,17.1981],[77.40662,17.2372],[77.45894,17.28058],[77.43826,17.29144],[77.45747,17.34038],[77.45274,17.37335],[77.50349,17.35735],[77.52471,17.36431],[77.53972,17.40645],[77.53911,17.44295],[77.57779,17.43051],[77.60849,17.44332],[77.61732,17.47261],[77.65946,17.48011],[77.69188,17.47463],[77.6912,17.50865],[77.66304,17.5217],[77.59762,17.53374],[77.59603,17.56309],[77.55361,17.55007],[77.52751,17.57308],[77.49462,17.56675],[77.44541,17.58272],[77.45732,17.63263],[77.45138,17.69052],[77.49398,17.7153],[77.53999,17.72825],[77.56532,17.74838],[77.55654,17.76872],[77.50997,17.78724],[77.51604,17.80424],[77.55572,17.81934],[77.5709,17.86625],[77.6208,17.9031],[77.61974,17.93865],[77.65529,17.97047],[77.64737,17.99934],[77.5862,18.01459],[77.55377,18.03572],[77.54914,18.06475],[77.59821,18.0861],[77.59705,18.15205],[77.57179,18.19195],[77.58611,18.21875],[77.57345,18.24294],[77.60614,18.28059],[77.57018,18.29238],[77.56676,18.31792],[77.51948,18.34914],[77.54937,18.3875],[77.56007,18.43522],[77.59709,18.54762],[77.64035,18.55386],[77.65775,18.5271],[77.71216,18.55431],[77.73669,18.55476],[77.74829,18.60515],[77.72956,18.64262],[77.73268,18.67607],[77.74963,18.6899],[77.78664,18.6841],[77.83749,18.80764],[77.90751,18.8295],[77.90895,18.86137],[77.88264,18.86984],[77.86524,18.91043],[77.82421,18.9131],[77.83714,18.95414],[77.79611,18.95146],[77.80057,18.98447],[77.75106,18.98357],[77.74081,19.03041],[77.74304,19.06118],[77.77693,19.07322],[77.78942,19.10534],[77.83179,19.09195],[77.81484,19.13745],[77.84205,19.18294],[77.82822,19.19008],[77.85097,19.25743],[77.88398,19.25832],[77.88442,19.27928],[77.84562,19.28597],[77.84428,19.30426],[77.89602,19.31987],[77.92412,19.3444],[77.96916,19.31095],[78.00172,19.29846],[78.02938,19.27304],[78.03473,19.2436],[78.1101,19.24851],[78.1333,19.232],[78.16675,19.2436],[78.16675,19.28106],[78.18057,19.33369],[78.16318,19.3551],[78.17121,19.39747],[78.20778,19.43583],[78.23543,19.43182],[78.25684,19.4559],[78.29564,19.46794],[78.2787,19.5393],[78.29475,19.57365],[78.29475,19.60621],[78.27111,19.65661],[78.26933,19.69184],[78.29966,19.69273],[78.32909,19.71548],[78.3514,19.78327],[78.3224,19.84125],[78.2778,19.85151],[78.27921,19.88196],[78.3679,19.8814],[78.38128,19.83858],[78.41205,19.8252],[78.45978,19.81851],[78.47762,19.79531],[78.50973,19.82386],[78.5686,19.8136],[78.58734,19.8194],[78.67966,19.79175],[78.70018,19.769],[78.72203,19.78149],[78.76842,19.7806],[78.79116,19.76008],[78.82774,19.76097],[78.84691,19.69898],[78.84245,19.65839],[78.87457,19.65705],[78.89954,19.66954],[78.9379,19.66553],[78.95262,19.65125],[78.94637,19.61914],[78.97626,19.56384],[79.00213,19.54198],[79.03513,19.54733],[79.08018,19.53261],[79.08821,19.51477],[79.12389,19.50318],[79.1725,19.46081],[79.2064,19.46973],[79.19034,19.49381],[79.22023,19.5286],[79.23361,19.57945],[79.22736,19.61468],[79.35492,19.56339],[79.39729,19.53529],[79.42494,19.53529],[79.45394,19.49961],[79.4972,19.52013],[79.5317,19.55241],[79.55367,19.52413],[79.60249,19.51309],[79.61596,19.55941],[79.63608,19.57639],[79.71198,19.58528],[79.75713,19.60733],[79.81825,19.57293],[79.82378,19.55743],[79.87599,19.5041],[79.92536,19.49855],[79.97171,19.42013],[79.97469,19.38922],[79.94937,19.29163],[79.9293,19.24996],[79.92636,19.20252],[79.94349,19.16387],[79.88262,19.13295],[79.85699,19.09508],[79.8741,19.04152],[79.92544,19.05312],[79.93945,19.0406],[79.9397,18.98616],[79.95302,18.96934],[79.95979,18.85795],[79.91056,18.82565],[79.94712,18.78372],[79.99276,18.76905],[80.03276,18.74654],[80.10826,18.68928],[80.24684,18.70149],[80.27513,18.72272],[80.30656,18.68345],[80.33809,18.59903],[80.379,18.60937],[80.38851,18.5972],[80.45022,18.62656],[80.48858,18.62656],[80.514,18.61318],[80.53184,18.58598],[80.59562,18.54896],[80.63264,18.51863],[80.65093,18.47224],[80.6991,18.43612],[80.74281,18.32194],[80.74459,18.30231],[80.7883,18.24968],[80.73344,18.21891],[80.73478,18.17163],[80.79811,18.16628],[80.81774,18.18724],[80.81729,18.22515],[80.85922,18.22605],[80.84807,18.1975],[80.86189,18.13283],[80.9007,18.13461],[80.95422,18.16717],[80.9725,18.14353],[80.94931,18.12302],[80.94396,18.08109],[80.96225,18.03158],[80.98455,17.92276],[80.99436,17.91428],[81.00417,17.83846],[81.03227,17.78985],[81.07375,17.78628],[81.08891,17.81081],[81.15938,17.85273],[81.19194,17.84694],[81.25394,17.81215],[81.40915,17.80501],[81.47025,17.8233],[81.48096,17.80278],[81.5541,17.81616],[81.56882,17.82776],[81.61119,17.81527],[81.64286,17.83935],[81.66293,17.87682],[81.68835,17.88485],[81.70307,17.86121],[81.75838,17.89332],[81.79272,17.85273],[81.78246,17.83177],[81.72939,17.81928],[81.68478,17.77067],[81.62323,17.76264],[81.5764,17.72607],[81.57105,17.68771],[81.50281,17.59003],[81.52377,17.57264],[81.50147,17.53919],[81.49345,17.44865],[81.44171,17.38175],[81.41584,17.36168],[81.37168,17.35722],[81.32262,17.38933],[81.28917,17.33759],[81.26732,17.3202],[81.19016,17.32733],[81.17053,17.29656],[81.18035,17.25463],[81.16295,17.23278],[81.11835,17.22475],[81.02603,17.18684],[80.99124,17.1797],[80.93058,17.20513],[80.90516,17.20111],[80.91318,17.14581],[80.87037,17.14625],[80.8552,17.11146],[80.86412,17.09585],[80.85877,17.05081],[80.82309,17.03787],[80.72586,17.06463],[80.68393,17.06865],[80.65673,17.08782],[80.56039,17.13822],[80.51936,17.10834],[80.49616,17.10789],[80.48234,17.05036],[80.42034,17.02494],[80.39001,17.07623],[80.36682,17.0566],[80.38778,17.0071],[80.35835,16.97052],[80.44264,16.9451],[80.48769,16.91745],[80.49126,16.94822],[80.53184,16.95001],[80.59027,16.91165],[80.5867,16.87374],[80.56485,16.86883],[80.55593,16.81843],[80.6041,16.78766],[80.56262,16.76268],[80.51088,16.76982],[80.45647,16.78989],[80.45245,16.81531],[80.41856,16.84252],[80.37306,16.8113],[80.35879,16.85501],[80.3191,16.87106],[80.31553,16.91254],[80.28877,16.97677],[80.26201,17.01066],[80.23569,17.00219],[80.19555,17.01825],[80.18217,17.04501],[80.134,16.98524],[80.08405,16.96339],[80.04569,16.96517],[80.03722,16.93663],[80.00957,16.90719],[79.99173,16.86303],[80.0332,16.85233],[80.04168,16.82602],[80.07093,16.81323],[80.054,16.74194],[80.02722,16.71251],[80.00576,16.70857],[79.95306,16.63621],[79.90723,16.63408],[79.88555,16.68642],[79.84286,16.70561],[79.81796,16.69098],[79.79256,16.72485],[79.74673,16.72106],[79.72286,16.68966],[79.68544,16.69755],[79.6621,16.68835],[79.63566,16.6594],[79.60613,16.67239],[79.53884,16.63046],[79.49421,16.63408],[79.44409,16.61796],[79.41773,16.57986],[79.37802,16.58412],[79.31162,16.57554],[79.27926,16.5816],[79.24543,16.57009],[79.24388,16.53515],[79.22091,16.51631],[79.21526,16.4846],[79.23202,16.46035],[79.21112,16.44396],[79.21143,16.35493],[79.23438,16.32518],[79.22111,16.23251],[79.1593,16.20893],[79.12305,16.23187],[79.09802,16.2236],[79.05373,16.23827],[79.01236,16.24173],[78.98352,16.21074],[78.92807,16.19871],[78.9049,16.17711],[78.92481,16.13259],[78.92138,16.10307],[78.88876,16.0879],[78.87606,16.13902],[78.83228,16.13919],[78.8419,16.08707],[78.82164,16.05227],[78.78267,16.02125],[78.73718,16.0097],[78.68277,16.03346],[78.64311,16.08312],[78.59917,16.08361],[78.55814,16.04517],[78.45394,16.07503],[78.40727,16.0756],[78.36075,16.04605],[78.32341,16.033],[78.29785,16.01169],[78.2682,16.02857],[78.25445,16.01627],[78.2507,15.96993],[78.20995,15.9197],[78.17371,15.89569],[78.17153,15.85511],[78.13252,15.8549],[78.10755,15.83401],[78.06997,15.85048],[78.03641,15.90188],[78.00803,15.86506],[77.97903,15.87982],[77.93428,15.88216],[77.89376,15.90154],[77.8616,15.88138],[77.80554,15.87083],[77.72205,15.89199],[77.689,15.87914],[77.6536,15.88393],[77.61152,15.91691],[77.58504,15.91532],[77.51178,15.92828],[77.52058,15.95112],[77.51562,16.00803],[77.49612,16.03679],[77.50848,16.07885],[77.49242,16.12134],[77.48889,16.16443],[77.50036,16.1925],[77.49303,16.25534],[77.59655,16.31743],[77.58991,16.33381],[77.54011,16.35849],[77.52418,16.3753],[77.4865,16.38299],[77.41673,16.36775],[77.37791,16.38517],[77.35761,16.3815],[77.28927,16.408],[77.26056,16.45344],[77.23521,16.47123]]]}},IDN:{type:"Feature",id:"IDN",properties:{},geometry:{type:"Polygon",coordinates:[[[109.538,1.92671],[109.58606,1.79192],[109.68554,1.78179],[109.66224,1.61881],[109.82759,1.48148],[109.93117,1.42466],[109.97919,1.29865],[110.09758,1.19756],[110.1922,1.18303],[110.30096,0.99575],[110.39497,0.99668],[110.49064,0.87637],[110.59486,0.858],[110.85815,0.94998],[110.9055,1.02835],[111.19759,1.06475],[111.22607,1.08799],[111.40504,1.0094],[111.48916,1.03442],[111.52219,0.95868],[111.66704,1.04281],[111.82599,0.98538],[111.934,1.10284],[112.13391,1.13752],[112.22581,1.39272],[112.20003,1.43709],[112.5171,1.57395],[112.77536,1.56153],[112.87744,1.58118],[113.05767,1.55877],[113.106,1.44495],[113.35493,1.35908],[113.41908,1.28549],[113.53549,1.32127],[113.63068,1.21597],[113.81508,1.30294],[113.85093,1.38715],[113.97573,1.45005],[114.14945,1.46149],[114.2027,1.4213],[114.41581,1.51111],[114.52646,1.44179],[114.58583,1.44665],[114.61498,1.57508],[114.71115,1.67148],[114.69469,1.81063],[114.74372,1.86954],[114.87834,1.91463],[114.80632,2.02438],[114.78024,2.14454],[114.79949,2.24936],[114.90604,2.25697],[114.95039,2.35132],[115.09508,2.41123],[115.13965,2.4776],[115.23743,2.50599],[115.09278,2.69409],[115.14115,2.74432],[115.11387,2.83327],[115.15001,2.90895],[115.24912,2.9667],[115.48328,3.01964],[115.56423,3.17109],[115.51617,3.26111],[115.53779,3.36201],[115.6344,3.45571],[115.57652,3.6094],[115.57965,3.74752],[115.61864,3.84247],[115.58177,3.88792],[115.64991,3.98828],[115.70731,4.19935],[115.8296,4.24118],[115.8779,4.39102],[116.00607,4.34818],[116.07901,4.27643],[116.18028,4.38255],[116.34851,4.39138],[116.43275,4.32567],[116.53602,4.37566],[116.61942,4.33622],[116.89887,4.36704],[116.97351,4.34488],[117.28899,4.31595],[117.52934,4.1615],[117.8992,4.16585],[117.95861,4.19058],[118.26478,4.09696],[127.3,5.2],[129,2.7],[141,-2.4],[141,-6.3],[140.83,-6.7],[141.02,-6.95],[141.02,-9.5],[128.5,-9.5],[127.3,-8.2],[125,-8.5],[123.96,-9.2],[124.11,-9.42],[124.22,-9.37],[124.269,-9.4],[124.287,-9.5],[124.358,-9.48564],[124.355,-9.43281],[124.383,-9.361],[124.444,-9.31899],[124.48,-9.15],[124.95,-8.9],[124.94064,-9.03565],[124.99695,-9.06413],[125.11368,-8.98275],[125.18234,-9.03293],[125.18234,-9.17396],[124.98459,-9.19429],[124.99283,-9.28646],[125.04913,-9.33254],[125.16,-9.7],[123,-11.4],[100,-7],[93.5,6.3],[96.6,6.1],[103,1.4],[103.75,1.14],[103.9,1.2],[104.5,1.3],[105,3],[108,5.1],[109.64501,2.08141],[109.62041,1.98321],[109.538,1.92671]]]}},iran:{type:"Feature",properties:{},id:"iran",geometry:{type:"Polygon",coordinates:[[[43.96643,39.42704],[44.36828,39.45104],[44.3518,39.57183],[44.62479,39.89048],[45.02746,39.54218],[45.50433,39.06259],[45.9613,38.92951],[46.50828,38.94537],[47.3236,39.44892],[48.00512,39.77374],[48.4411,39.3641],[48.19977,39.25565],[48.3728,39.10236],[48.30414,38.906],[48.10427,38.85269],[48.67649,38.48336],[49.32106,38.48734],[53.94287,37.48358],[54.43724,37.47487],[54.70691,37.69815],[55.26122,38.10864],[55.91695,38.16284],[56.239,38.26407],[57.28683,38.36073],[57.57896,37.98007],[58.01879,37.91821],[58.41395,37.7018],[58.72191,37.76204],[59.4218,37.59896],[59.63834,37.17964],[60.08422,37.11653],[60.37835,36.70792],[61.23424,36.72619],[61.37598,35.51361],[60.99608,34.29808],[60.63333,34.05914],[60.68847,33.68779],[61.01753,33.53868],[60.68833,33.11604],[60.98034,32.20735],[60.95577,31.5572],[61.7915,31.4486],[61.89696,31.1188],[61.90736,30.81546],[60.99448,29.85451],[61.42455,29.4109],[61.97206,28.63509],[62.8889,28.33884],[62.90715,27.31879],[63.29659,27.35528],[63.40209,27.17648],[63.2895,26.57212],[62.5891,26.47058],[62.29032,26.24108],[61.94822,26.12877],[61.62376,24.73837],[60.55845,24.98624],[58.03141,25.27164],[57.11051,25.5495],[56.54686,26.57238],[55.4988,26.01213],[55.28816,25.6474],[54.37853,25.61961],[53.90126,26.2239],[53.08217,26.52934],[51.26311,27.61327],[50.77328,28.14996],[50.48217,27.81479],[50.17456,27.78564],[49.93835,27.81965],[49.88342,27.975],[49.92187,28.18825],[50.33305,28.67232],[49.4197,29.70202],[48.58632,29.62242],[47.9928,30.44356],[47.98907,30.97004],[47.65869,30.98703],[47.65817,31.39276],[47.76361,31.76875],[47.30962,32.37144],[45.91075,33.02471],[46.06882,33.24741],[45.37024,33.9384],[45.40649,34.48845],[45.61523,34.74162],[45.84765,35.07793],[46.0613,35.21211],[45.91186,35.63945],[46.06018,35.76881],[45.75644,35.74371],[45.3092,35.9317],[45.19226,36.33283],[44.97802,36.46548],[44.95056,36.68605],[44.80224,36.7609],[44.83543,36.92589],[44.74731,37.02887],[44.71435,37.2828],[44.57153,37.38762],[44.51099,37.70537],[44.17537,37.86225],[44.29736,38.30899],[44.10461,39.10449],[43.93976,39.34825],[43.96643,39.42704]]]}},japan:{type:"Feature",id:"japan",properties:{},geometry:{type:"Polygon",coordinates:[[[141.11938,45.69083],[142.28497,45.56863],[145.39307,44.48867],[145.57983,44.11125],[145.27222,43.79291],[145.47821,43.46289],[145.68695,43.4589],[145.91217,43.39108],[145.44903,42.69934],[143.91094,41.8376],[142.48272,39.3181],[142.1751,38.15265],[141.38409,35.69383],[140.94463,35.21056],[140.55908,32.1198],[139.38457,31.87843],[138.98907,33.1752],[138.01025,34.29807],[135.99976,33.17434],[133.53882,32.71336],[132.48516,32.06483],[131.56128,31.04352],[131.03497,29.53613],[129.94629,27.50827],[127.78301,25.4442],[126.47461,25.42343],[125.86487,24.52713],[124.92657,23.88678],[123.37921,23.82053],[122.67883,24.31456],[122.7293,24.64795],[124.67834,25.02588],[125.36602,25.52354],[126.24493,26.35342],[127.56329,27.13828],[128.57403,28.73003],[128.74981,31.46703],[128.36426,32.62087],[128.92559,33.76174],[129.21021,34.62417],[129.56177,34.84086],[136.69739,37.9312],[139.1209,38.85762],[139.04297,42.04929],[140.13165,43.58114],[140.5711,45.64549],[141.11938,45.69083]]]}},malaysia:{type:"Feature",id:"malaysia",properties:{},geometry:{type:"MultiPolygon",coordinates:[[[[109.538,1.92671],[109.62041,1.98321],[109.64501,2.08141],[113.8,4.8],[114.26015,4.50701],[114.33278,4.34889],[114.31645,4.26363],[114.45418,4.24183],[114.49579,4.14668],[114.6492,4.00624],[114.80762,4.14929],[114.85775,4.26957],[114.87758,4.42656],[114.82955,4.42966],[114.80229,4.67536],[114.85851,4.79751],[114.97133,4.80824],[115.02238,4.74977],[115.09879,4.4685],[115.15547,4.38302],[115.24582,4.34118],[115.28924,4.60384],[115.2375,4.79584],[115.15038,4.87204],[115.15825,5.02512],[115,5.3],[116.9,7.6],[117.5,7.4],[119.35011,5.53088],[119.43909,5.11578],[118.83773,4.45269],[118.26478,4.09696],[117.95861,4.19058],[117.8992,4.16585],[117.52934,4.1615],[117.28899,4.31595],[116.97351,4.34488],[116.89887,4.36704],[116.61942,4.33622],[116.53602,4.37566],[116.43275,4.32567],[116.34851,4.39138],[116.18028,4.38255],[116.07901,4.27643],[116.00607,4.34818],[115.8779,4.39102],[115.8296,4.24118],[115.70731,4.19935],[115.64991,3.98828],[115.58177,3.88792],[115.61864,3.84247],[115.57965,3.74752],[115.57652,3.6094],[115.6344,3.45571],[115.53779,3.36201],[115.51617,3.26111],[115.56423,3.17109],[115.48328,3.01964],[115.24912,2.9667],[115.15001,2.90895],[115.11387,2.83327],[115.14115,2.74432],[115.09278,2.69409],[115.23743,2.50599],[115.13965,2.4776],[115.09508,2.41123],[114.95039,2.35132],[114.90604,2.25697],[114.79949,2.24936],[114.78024,2.14454],[114.80632,2.02438],[114.87834,1.91463],[114.74372,1.86954],[114.69469,1.81063],[114.71115,1.67148],[114.61498,1.57508],[114.58583,1.44665],[114.52646,1.44179],[114.41581,1.51111],[114.2027,1.4213],[114.14945,1.46149],[113.97573,1.45005],[113.85093,1.38715],[113.81508,1.30294],[113.63068,1.21597],[113.53549,1.32127],[113.41908,1.28549],[113.35493,1.35908],[113.106,1.44495],[113.05767,1.55877],[112.87744,1.58118],[112.77536,1.56153],[112.5171,1.57395],[112.20003,1.43709],[112.22581,1.39272],[112.13391,1.13752],[111.934,1.10284],[111.82599,0.98538],[111.66704,1.04281],[111.52219,0.95868],[111.48916,1.03442],[111.40504,1.0094],[111.22607,1.08799],[111.19759,1.06475],[110.9055,1.02835],[110.85815,0.94998],[110.59486,0.858],[110.49064,0.87637],[110.39497,0.99668],[110.30096,0.99575],[110.1922,1.18303],[110.09758,1.19756],[109.97919,1.29865],[109.93117,1.42466],[109.82759,1.48148],[109.66224,1.61881],[109.68554,1.78179],[109.58606,1.79192],[109.538,1.92671]]],[[[99.45833,6.30667],[99.51167,6.48167],[99.68908,6.47146],[99.91691,6.5233],[100.07588,6.40615],[100.15906,6.48065],[100.17157,6.69376],[100.32605,6.6597],[100.36648,6.53967],[100.4962,6.52128],[100.66237,6.45103],[100.73937,6.49207],[100.81258,6.44219],[100.83515,6.29654],[100.90398,6.23379],[100.98414,6.27884],[101.0943,6.26044],[101.12667,6.19264],[101.0868,5.9109],[101.03707,5.91804],[100.98946,5.78393],[101.1192,5.67031],[101.25999,5.71155],[101.27615,5.81155],[101.39691,5.87241],[101.48454,5.86993],[101.58131,5.93436],[101.66236,5.86871],[101.69082,5.75576],[101.79332,5.75066],[101.94402,5.87247],[101.94265,5.98109],[102.05204,6.0785],[102.08029,6.22537],[102.2,6.5],[103.6,5.8],[104.8,2.5],[104.5,1.5],[104.31571,1.28352],[104.12518,1.27582],[104.07647,1.43092],[103.89786,1.42794],[103.81267,1.47847],[103.67389,1.42814],[103.56667,1.1955],[103,1.325],[99,4.5],[99.45833,6.30667]]]]}},MNG:{type:"Feature",id:"MNG",properties:{name:"Mongolia"},geometry:{type:"Polygon",coordinates:[[[87.75126,49.2972],[88.80557,49.47052],[90.71367,50.33181],[92.23471,50.80217],[93.10422,50.49529],[94.14757,50.48054],[94.81595,50.01343],[95.81403,49.97747],[97.25973,49.72606],[98.23176,50.4224],[97.82574,51.011],[98.86149,52.04737],[99.98173,51.63401],[100.88948,51.51686],[102.06522,51.25992],[102.25591,50.51056],[103.67655,50.08997],[104.62155,50.27533],[105.88659,50.40602],[106.8888,50.2743],[107.86818,49.79371],[108.47517,49.28255],[109.40245,49.29296],[110.66201,49.13013],[111.58123,49.37797],[112.89774,49.54357],[114.36246,50.2483],[114.96211,50.14025],[115.4857,49.80518],[116.6788,49.88853],[116.1918,49.1346],[115.48528,48.13538],[115.74284,47.72655],[116.30895,47.85341],[117.29551,47.69771],[118.06414,48.06673],[118.86657,47.74706],[119.77282,47.04806],[119.66327,46.69268],[118.87433,46.80541],[117.4217,46.67273],[116.71787,46.3882],[115.9851,45.72724],[114.46033,45.33982],[113.46391,44.80889],[112.43606,45.01165],[111.87331,45.10208],[111.34838,44.45744],[111.66774,44.07318],[111.82959,43.74312],[111.12968,43.40683],[110.4121,42.87123],[109.2436,42.51945],[107.74477,42.48152],[106.12932,42.13433],[104.96499,41.59741],[104.52228,41.90835],[103.31228,41.90747],[101.83304,42.51487],[100.84587,42.6638],[99.51582,42.52469],[97.45176,42.74889],[96.3494,42.72563],[95.76246,43.31945],[95.30688,44.24133],[94.68893,44.35233],[93.48073,44.97547],[92.13389,45.11508],[90.94554,45.28607],[90.58577,45.71972],[90.97081,46.88815],[90.28083,47.69355],[88.8543,48.06908],[88.01383,48.59946],[87.75126,49.2972]]]}},MMR:{type:"Feature",id:"MMR",properties:{name:"Myanmar"},geometry:{type:"Polygon",coordinates:[[[92.10937,20.85881],[92.3291,21.49396],[92.68066,21.28937],[92.63672,22.08564],[92.98828,22.06528],[93.18604,22.22809],[93.14209,23.09994],[93.38379,23.22115],[93.36182,24.1267],[94.19678,23.92601],[94.70215,25.04579],[94.57031,25.26457],[95.20752,26.03704],[95.05371,26.49024],[97.66846,28.51697],[98.65723,27.50827],[98.56934,25.85922],[97.62451,24.8665],[97.73438,23.88584],[98.83301,24.14675],[98.85498,23.18076],[99.49219,23.05952],[99.1626,22.04491],[100.0415,21.96342],[100.32715,21.49396],[101.09619,21.71868],[101.16211,21.41216],[99.99756,20.36523],[97.91016,19.49766],[97.53662,18.29195],[98.83301,16.21467],[98.50342,15.32657],[98.21777,15.11455],[98.65723,14.24309],[99.18457,13.66734],[99.22852,12.85465],[99.66797,11.65224],[98.4375,9.90392],[97.77832,14.34955],[97.00928,16.80454],[95.42725,15.55954],[94.021,16.04581],[94.21875,18.0832],[92.10937,20.85881]]]}},NPL:{type:"Feature",id:"NPL",properties:{name:"Nepal"},geometry:{type:"Polygon",coordinates:[[[88.12044,27.87654],[88.04313,27.44582],[88.1748,26.8104],[88.06024,26.41462],[87.22747,26.3979],[86.02439,26.63098],[85.25178,26.7262],[84.67502,27.2349],[83.30425,27.36451],[81.99999,27.92548],[81.0572,28.41609],[80.08843,28.79447],[80.47672,29.72987],[81.11126,30.18348],[81.5258,30.42272],[82.32751,30.11527],[83.33711,29.46373],[83.89899,29.32023],[84.23458,28.83989],[85.01164,28.64277],[85.82332,28.20358],[86.95452,27.97426],[88.12044,27.87654]]]}},north_korea:{type:"Feature",id:"north_korea",properties:{},geometry:{type:"Polygon",coordinates:[[[125,37.2],[123.5,38.4],[124.38,40.12],[124.87,40.47],[126.05,40.95],[126.6,41.6],[126.9,41.8],[127.25,41.5],[128.2,41.4],[128.3,41.56],[128.04,42.03],[128.95,42.03],[129.35,42.44],[129.69,42.44],[129.88,43],[130.2,42.9],[130.3,42.66],[130.5,42.6],[130.7,42.3],[131,39],[128.33,38.61],[128.28,38.42],[128.08,38.32],[127.14,38.32],[126.99,38.21],[126.95,38.14],[126.88,38.1],[126.82,38],[126.67,37.95],[126.69,37.84],[126.667,37.828],[126.66,37.79],[126.585,37.76],[126.474,37.81],[126.42,37.845],[126.2,37.82],[126.18,37.74],[125,37.2]]]}},philippines:{type:"Feature",id:"philippines",properties:{},geometry:{type:"Polygon",coordinates:[[[114.93896,8.23324],[122.01416,21.71868],[127.6062,7.39515],[125.50781,5.14566],[118.89954,4.41761],[119.49829,5.28789],[117.53174,7.39515],[114.93896,8.23324]]]}},russia:{type:"Feature",id:"russia",properties:{},geometry:{type:"MultiPolygon",coordinates:[[[[22.7311,54.32754],[20.89224,54.31253],[19.66064,54.42608],[19.88848,54.86616],[21.26845,55.19048],[22.31572,55.0153],[22.75776,54.85657],[22.65105,54.58274],[22.7311,54.32754]]],[[[-180,83],[-169,66.5],[-171,64],[-180,64],[-180,83]]],[[[180,83],[180,64.97971],[179.99281,64.97433],[178.7072,64.53493],[177.41128,64.60821],[178.313,64.07593],[178.90825,63.25197],[179.37034,62.98262],[179.48636,62.56894],[179.22825,62.3041],[177.3643,62.5219],[174.56929,61.76915],[173.68013,61.65261],[172.15,60.95],[170.6985,60.33618],[170.33085,59.88177],[168.90046,60.57355],[166.29498,59.78855],[165.84,60.16],[164.87674,59.7316],[163.53929,59.86871],[163.21711,59.21101],[162.01733,58.24328],[162.05297,57.83912],[163.19191,57.61503],[163.05794,56.15924],[162.12958,56.12219],[161.70146,55.28568],[162.11749,54.85514],[160.36877,54.34433],[160.02173,53.20257],[158.53094,52.95868],[158.23118,51.94269],[156.78979,51.01105],[156.42,51.7],[155.99182,53.15895],[155.43366,55.38103],[155.91442,56.76792],[156.75815,57.3647],[156.81035,57.83204],[158.36433,58.05575],[160.15064,59.31477],[161.87204,60.343],[163.66969,61.1409],[164.47355,62.55061],[163.25842,62.46627],[162.65791,61.6425],[160.12148,60.54423],[159.30232,61.77396],[156.72068,61.43442],[154.21806,59.75818],[155.04375,59.14495],[152.81185,58.88385],[151.26573,58.78089],[151.33815,59.50396],[149.78371,59.65573],[148.54481,59.16448],[145.48722,59.33637],[142.19782,59.03998],[138.95848,57.08805],[135.12619,54.72959],[136.70171,54.60355],[137.19342,53.97732],[138.1647,53.75501],[138.80463,54.25455],[139.90151,54.18968],[141.34531,53.08957],[141.37923,52.23877],[140.59742,51.23967],[140.51308,50.04553],[140.06193,48.44671],[138.55472,46.99965],[138.21971,46.30795],[136.86232,45.1435],[135.51535,43.989],[134.86939,43.39821],[133.53687,42.81147],[132.90627,42.79849],[132.27807,43.28456],[130.93587,42.55274],[130.78,42.22],[130.64,42.395],[130.63387,42.90302],[131.14469,42.92999],[131.28856,44.11152],[131.02519,44.96796],[131.88345,45.32116],[133.09712,45.14409],[133.76964,46.11693],[134.11235,47.21248],[134.50081,47.57845],[135.02631,48.47823],[133.3736,48.18344],[132.50669,47.78896],[130.98726,47.79013],[130.58229,48.72969],[129.39782,49.4406],[127.6574,49.76027],[127.28746,50.7398],[126.93916,51.35389],[126.5644,51.78426],[125.94635,52.7928],[125.06821,53.16105],[123.57147,53.4588],[122.24575,53.43173],[121.00308,53.2514],[120.17709,52.75389],[120.72579,52.51623],[120.7382,51.96411],[120.18208,51.64355],[119.27939,50.58292],[119.28846,50.14288],[117.87924,49.51098],[116.6788,49.88853],[115.4857,49.80518],[114.96211,50.14025],[114.36246,50.2483],[112.89774,49.54357],[111.58123,49.37797],[110.66201,49.13013],[109.40245,49.29296],[108.47517,49.28255],[107.86818,49.79371],[106.8888,50.2743],[105.88659,50.40602],[104.62158,50.27532],[103.67655,50.08997],[102.25589,50.51056],[102.06521,51.25991],[100.88948,51.51686],[99.98173,51.63401],[98.86149,52.04737],[97.82574,51.011],[98.23176,50.4224],[97.25976,49.72605],[95.81402,49.97746],[94.81595,50.01343],[94.14757,50.48054],[93.10421,50.49529],[92.23471,50.80217],[90.71367,50.33181],[88.80557,49.47052],[87.75126,49.2972],[87.35997,49.21498],[86.82936,49.82668],[85.54127,49.69286],[85.11556,50.1173],[84.41638,50.3114],[83.93511,50.88925],[83.383,51.06918],[81.94599,50.8122],[80.56845,51.38834],[80.03556,50.86475],[77.80092,53.40442],[76.52518,54.177],[76.8911,54.49052],[74.38482,53.54685],[73.42568,53.48981],[73.50852,54.03562],[72.22415,54.37665],[71.18013,54.13329],[70.86527,55.16973],[69.06817,55.38525],[68.1691,54.97039],[65.66687,54.60125],[65.17853,54.35423],[61.4366,54.00625],[60.97807,53.66499],[61.69999,52.98],[60.73999,52.71999],[60.92727,52.44755],[59.96753,51.96042],[61.588,51.27266],[61.33742,50.79907],[59.93281,50.84219],[59.64228,50.54544],[58.36332,51.06364],[56.77798,51.04355],[55.71694,50.62171],[54.53288,51.02624],[52.32872,51.71865],[50.76665,51.69276],[48.70238,50.60513],[48.57784,49.87476],[47.54948,50.4547],[46.7516,49.35601],[47.04367,49.15204],[46.46645,48.39415],[47.31524,47.71585],[48.05725,47.74377],[48.69473,47.07563],[48.59325,46.56104],[49.10116,46.39933],[48.64541,45.80629],[47.67591,45.64149],[46.68201,44.6092],[47.59094,43.66016],[47.49252,42.98658],[48.58437,41.80888],[47.98728,41.40582],[47.81567,41.15142],[47.37331,41.21973],[46.68607,41.82714],[46.40495,41.86068],[45.7764,42.09244],[45.47028,42.50278],[44.53762,42.71199],[43.93121,42.55496],[43.75599,42.74083],[42.3944,43.2203],[40.92219,43.38215],[40.07697,43.5531],[39.95501,43.435],[38.68,44.28],[37.53912,44.65721],[36.67546,45.24469],[37.40317,45.40451],[38.23295,46.24087],[37.67372,46.63657],[39.14767,47.04475],[39.1212,47.26336],[38.22354,47.10219],[38.25511,47.5464],[38.77057,47.82562],[39.73828,47.89894],[39.89562,48.23241],[39.67465,48.78382],[40.08079,49.30743],[40.06904,49.60105],[38.59499,49.92646],[38.01063,49.91566],[37.39346,50.38395],[36.62617,50.22559],[35.35612,50.5772],[35.37791,50.77394],[35.02218,51.20757],[34.22482,51.25599],[34.14198,51.56641],[34.39173,51.76888],[33.7527,52.33508],[32.71576,52.23846],[32.41206,52.28869],[32.15944,52.06125],[31.78597,52.10168],[31.54002,52.74205],[31.3052,53.074],[31.49764,53.16743],[32.30452,53.13273],[32.69364,53.35142],[32.4056,53.61805],[31.73127,53.79403],[31.79142,53.97464],[31.38447,54.15706],[30.75753,54.81177],[30.97184,55.08155],[30.87391,55.55098],[29.89629,55.78946],[29.37157,55.67009],[29.22951,55.91834],[28.17671,56.16913],[27.85528,56.75933],[27.77002,57.24426],[27.28818,57.47453],[27.71669,57.7919],[27.42015,58.72457],[28.1317,59.30083],[27.98112,59.47537],[29.1177,60.02805],[28.07,60.50352],[30.21111,61.78003],[31.13999,62.35769],[31.51609,62.86769],[30.03587,63.55281],[30.44468,64.20445],[29.54443,64.94867],[30.21765,65.80598],[29.05459,66.94429],[29.97743,67.6983],[28.44594,68.36461],[28.59193,69.06478],[35,71],[40,83],[180,83]]]]}},south_korea:{type:"Feature",id:"south_korea",properties:{},geometry:{type:"Polygon",coordinates:[[[125,33],[125,37.2],[126.18,37.74],[126.2,37.82],[126.42,37.845],[126.474,37.81],[126.585,37.76],[126.66,37.79],[126.667,37.828],[126.69,37.84],[126.67,37.95],[126.82,38],[126.88,38.1],[126.95,38.14],[126.99,38.21],[127.14,38.32],[128.08,38.32],[128.28,38.42],[128.33,38.61],[131,39],[131.3,36.6],[127.3,33],[125,33]]]}},sri_lanka:{type:"Feature",id:"sri_lanka",properties:{name:"Sri Lanka"},geometry:{type:"Polygon",coordinates:[[[81.78796,7.52306],[81.63732,6.48177],[81.21802,6.19714],[80.34836,5.96837],[79.87247,6.76346],[79.69517,8.20084],[80.1478,9.82408],[80.83882,9.26843],[81.30432,8.56421],[81.78796,7.52306]]]}},taiwan:{type:"Feature",id:"taiwan",properties:{},geometry:{type:"Polygon",coordinates:[[[119,23.5],[121.7,26],[122.5,25.5],[121.8,21.8],[120,21.5],[119,23.5]]]}},thailand_cnx:{type:"Feature",id:"thailand_cnx",properties:{},geometry:{type:"Polygon",coordinates:[[[98.4375,18.2319],[98.4375,19.2255],[99.5306,19.2255],[99.5306,18.2319],[98.4375,18.2319]]]}},thailand_full:{type:"Feature",id:"thailand_full",properties:{},geometry:{type:"Polygon",coordinates:[[[97.50366,8.39358],[97.7124,9.60075],[99.47021,11.8566],[98.05298,14.84923],[98.32764,16.15137],[97.21802,18.39623],[97.38281,19.73568],[100.2832,20.66363],[101.37085,19.69431],[101.40381,18.27109],[104.08447,18.58377],[105.76538,16.06693],[105.52368,14.15788],[102.854,13.82741],[103.00781,11.69527],[102.12891,5.81276],[101.11542,5.4875],[100.66498,6.42448],[99.13788,6.34806],[97.50366,8.39358]]]}},"al-tirana":{type:"Feature",id:"al-tirana",properties:{},geometry:{type:"Polygon",coordinates:[[[19.77796,41.36244],[19.78028,41.36267],[19.78123,41.36014],[19.78004,41.35915],[19.78099,41.35803],[19.77752,41.35682],[19.78082,41.35409],[19.77658,41.35122],[19.78029,41.34936],[19.7832,41.35026],[19.7899,41.34976],[19.79536,41.34793],[19.80046,41.3502],[19.81074,41.35213],[19.81874,41.35044],[19.82238,41.35173],[19.83428,41.35186],[19.84174,41.35434],[19.84682,41.3589],[19.84829,41.35842],[19.85095,41.36008],[19.85159,41.35903],[19.8561,41.35843],[19.85488,41.3545],[19.85784,41.35167],[19.85518,41.35228],[19.85275,41.35145],[19.85276,41.34956],[19.85151,41.34955],[19.85462,41.34419],[19.85876,41.33995],[19.8642,41.33947],[19.86465,41.33789],[19.86829,41.33772],[19.86999,41.33882],[19.87262,41.33794],[19.87259,41.33606],[19.87543,41.3355],[19.87644,41.33126],[19.87554,41.33042],[19.87232,41.33102],[19.87095,41.32999],[19.86659,41.33088],[19.86535,41.32664],[19.86164,41.32543],[19.85813,41.3214],[19.85489,41.32066],[19.85575,41.31876],[19.84532,41.314],[19.84458,41.31212],[19.85095,41.30156],[19.84975,41.29748],[19.8457,41.29559],[19.83906,41.29791],[19.82955,41.29568],[19.82738,41.29791],[19.82504,41.29827],[19.82605,41.29986],[19.82333,41.30509],[19.82032,41.30525],[19.81821,41.3037],[19.81168,41.30787],[19.81162,41.31002],[19.80709,41.31302],[19.79827,41.31487],[19.79767,41.31238],[19.79374,41.313],[19.78954,41.31035],[19.7852,41.31117],[19.78057,41.3142],[19.77976,41.31244],[19.78765,41.30887],[19.78369,41.30473],[19.77721,41.30247],[19.77515,41.30039],[19.77077,41.30363],[19.76019,41.29972],[19.75706,41.30651],[19.75854,41.30874],[19.75473,41.31208],[19.75643,41.31314],[19.75571,41.31548],[19.76586,41.3199],[19.76813,41.32266],[19.77017,41.32139],[19.76811,41.31882],[19.76922,41.31754],[19.77559,41.31854],[19.77323,41.32284],[19.77378,41.32422],[19.77893,41.32349],[19.77968,41.32518],[19.78451,41.32399],[19.78734,41.32541],[19.78321,41.33328],[19.78343,41.33578],[19.77659,41.33783],[19.78083,41.34567],[19.76839,41.35239],[19.75832,41.35489],[19.76053,41.35931],[19.75484,41.3598],[19.75767,41.36542],[19.76169,41.36185],[19.76434,41.36249],[19.76411,41.36393],[19.76775,41.36369],[19.76857,41.36459],[19.77145,41.364],[19.77204,41.36125],[19.77796,41.36244]]]}},albania:{type:"Feature",id:"albania",properties:{},geometry:{type:"Polygon",coordinates:[[[19.39087,41.86138],[19.40186,42.09007],[19.27002,42.18376],[19.69849,42.67436],[19.81384,42.46399],[20.07202,42.55713],[20.25879,42.33824],[20.34668,42.32606],[20.51697,42.23665],[20.61584,41.92272],[20.52795,41.71803],[20.56091,41.57847],[20.44556,41.54559],[20.56091,41.40566],[20.50049,41.3397],[20.58289,41.09177],[20.65979,41.07521],[20.71472,40.90521],[20.95642,40.92181],[20.98389,40.7431],[21.07178,40.60978],[20.95093,40.47202],[20.85205,40.47202],[20.68726,40.10329],[20.43457,40.07387],[20.33569,39.99396],[20.43457,39.82119],[20.38513,39.77899],[20.28625,39.8001],[20.31921,39.72831],[20.20386,39.63954],[19.97314,39.69451],[20.0116,39.86759],[19.86328,40.04444],[19.35791,40.2921],[19.25354,40.51798],[19.4458,40.3298],[19.50073,40.43859],[19.31396,40.65564],[19.41833,40.90936],[19.53918,40.92181],[19.4458,41.00063],[19.43481,41.15384],[19.50623,41.2489],[19.4458,41.32733],[19.41284,41.4139],[19.51721,41.52092],[19.45129,41.60312],[19.52271,41.57847],[19.58862,41.62366],[19.59961,41.7836],[19.39087,41.86138]]]}},austria:{type:"Feature",id:"austria",properties:{},geometry:{type:"Polygon",coordinates:[[[16.50733,46.99293],[16.28342,46.99293],[16.13584,46.8713],[15.98317,46.81909],[16.04933,46.65517],[15.86104,46.71801],[15.75926,46.69009],[15.56079,46.67962],[15.57606,46.63421],[15.47937,46.60276],[15.43357,46.65168],[15.22493,46.63421],[15.04682,46.64819],[14.99084,46.58877],[14.9603,46.62373],[14.85344,46.60276],[14.83308,46.50127],[14.75166,46.49776],[14.68041,46.43818],[14.61426,46.43818],[14.57864,46.37853],[14.44124,46.43116],[14.16135,46.42766],[14.12573,46.47674],[14.01886,46.47674],[13.91199,46.52578],[13.82548,46.50477],[13.44381,46.56078],[13.30641,46.55028],[13.1283,46.58877],[12.84332,46.61324],[12.72628,46.6412],[12.51255,46.66565],[12.35988,46.70405],[12.36497,46.77032],[12.28863,46.77729],[12.27337,46.88522],[12.20721,46.87478],[12.13088,46.90261],[12.11561,46.99987],[12.25301,47.06577],[12.2123,47.0935],[11.9833,47.04497],[11.73394,46.96168],[11.63217,47.01028],[11.54057,46.97557],[11.49986,47.00681],[11.41843,46.96515],[11.25559,46.97557],[11.1131,46.91304],[11.04185,46.76335],[10.88919,46.75986],[10.74161,46.78426],[10.70599,46.86435],[10.57877,46.83998],[10.45663,46.85043],[10.47699,46.92694],[10.38539,46.98946],[10.23272,46.86435],[10.12076,46.83302],[9.86632,46.94084],[9.90194,47.00334],[9.68312,47.05884],[9.61188,47.03804],[9.63223,47.12813],[9.58134,47.1662],[9.54063,47.26644],[9.60679,47.34926],[9.67294,47.36994],[9.64241,47.44571],[9.56608,47.48011],[9.71365,47.52824],[9.7849,47.59692],[9.83579,47.54542],[9.94774,47.53855],[10.09023,47.44915],[10.11059,47.36649],[10.2429,47.38717],[10.18692,47.2699],[10.32432,47.29751],[10.48208,47.44915],[10.43119,47.48699],[10.44137,47.59005],[10.48717,47.55229],[10.54823,47.53511],[10.59912,47.56602],[10.75688,47.53168],[10.88919,47.54542],[10.94008,47.48699],[10.99605,47.39061],[11.23523,47.44227],[11.28103,47.3975],[11.42352,47.51449],[11.57619,47.50762],[11.60672,47.59005],[11.83572,47.58662],[12.00366,47.62436],[12.20721,47.60378],[12.16141,47.69634],[12.2581,47.74427],[12.25301,47.67921],[12.43112,47.71004],[12.49219,47.63122],[12.56852,47.62779],[12.62959,47.68949],[12.77208,47.66893],[12.83315,47.54198],[12.97564,47.47323],[13.04179,47.49387],[13.0367,47.55572],[13.09777,47.64151],[13.03161,47.71004],[12.90439,47.72031],[13.00617,47.84683],[12.9451,47.93555],[12.86368,47.95941],[12.86368,48.00369],[12.75172,48.09894],[12.87386,48.21097],[12.96037,48.21097],[13.04179,48.2652],[13.18428,48.29907],[13.26061,48.2923],[13.39801,48.35659],[13.44381,48.41742],[13.43872,48.55234],[13.50997,48.58601],[13.61175,48.57255],[13.72879,48.5119],[13.78477,48.57255],[13.82039,48.62639],[13.79495,48.71713],[13.85093,48.77417],[14.05957,48.66338],[14.01377,48.63312],[14.07484,48.59274],[14.21733,48.59611],[14.3649,48.54897],[14.46668,48.64993],[14.55828,48.59611],[14.59899,48.62639],[14.72113,48.57591],[14.72113,48.6869],[14.8229,48.7272],[14.81782,48.77753],[14.96472,48.78518],[14.98936,49.01266],[15.14859,48.99503],[15.19439,48.93155],[15.30635,48.98501],[15.39286,48.98501],[15.48446,48.92821],[15.74908,48.8546],[15.84068,48.88807],[16.00862,48.78088],[16.20708,48.73391],[16.39537,48.73727],[16.49206,48.81105],[16.69053,48.77417],[16.7058,48.73391],[16.89917,48.71377],[16.97551,48.51527],[16.84828,48.45118],[16.85337,48.34644],[16.95515,48.25165],[16.99077,48.1499],[17.09255,48.13971],[17.08237,48.02412],[17.17397,48.02071],[17.08237,47.87414],[16.98568,47.86732],[17.08237,47.80925],[17.09255,47.70319],[16.74142,47.67921],[16.7058,47.75112],[16.53786,47.75454],[16.54804,47.70662],[16.42082,47.66893],[16.57348,47.6175],[16.67017,47.63122],[16.71088,47.53855],[16.66,47.44915],[16.54295,47.39406],[16.46153,47.39406],[16.49206,47.2768],[16.42591,47.19733],[16.47171,47.1489],[16.54804,47.1489],[16.47679,47.07964],[16.52768,47.05884],[16.50733,46.99293]]]}},graz:{type:"Feature",id:"graz",properties:{},geometry:{type:"Polygon",coordinates:[[[15.26276,46.94182],[15.26276,47.16918],[15.62943,47.16918],[15.62943,46.94182],[15.26276,46.94182]]]}},belarus:{type:"Feature",id:"belarus",properties:{},geometry:{type:"Polygon",coordinates:[[[23.19351,52.37811],[23.38715,52.57134],[23.67554,52.61806],[23.87329,52.72215],[23.75656,53.20027],[23.42148,53.83956],[23.43521,53.97467],[24.33609,53.99082],[24.73022,54.03762],[24.70825,54.16967],[24.95682,54.18253],[25.48004,54.37176],[25.63385,54.95239],[26.53748,55.24468],[26.27655,55.26973],[26.48804,55.71009],[26.89728,55.87993],[27.56195,55.82597],[27.56195,55.97226],[27.98218,56.20976],[29.64935,55.96304],[30.28107,55.89303],[30.95398,55.64815],[31.20941,54.67065],[32.47009,53.7617],[32.83539,53.3866],[32.22839,53.02635],[31.51978,53.16159],[31.84662,52.06262],[30.8139,51.93411],[30.4953,51.21032],[27.71301,51.46085],[25.85083,51.88666],[24.5874,51.81541],[23.51898,51.41634],[23.45581,51.99841],[23.15918,52.1874],[23.19351,52.37811]]]}},belgium:{type:"Feature",id:"belgium",properties:{},geometry:{type:"Polygon",coordinates:[[[3.08167,51.55146],[3.30963,51.43346],[3.36834,51.36996],[3.37761,51.35956],[3.37589,51.34841],[3.38482,51.34337],[3.38722,51.33887],[3.38688,51.33286],[3.36096,51.31527],[3.3819,51.30207],[3.37641,51.29928],[3.36782,51.29681],[3.38293,51.28726],[3.38327,51.2806],[3.37915,51.27824],[3.38121,51.27598],[3.39031,51.27416],[3.39598,51.26686],[3.40439,51.26449],[3.40937,51.25923],[3.41795,51.26127],[3.42138,51.25848],[3.4267,51.25482],[3.42894,51.24709],[3.44679,51.24279],[3.52592,51.24677],[3.51425,51.2878],[3.52927,51.28935],[3.53434,51.28474],[3.53811,51.28479],[3.54266,51.29177],[3.55717,51.29187],[3.5588,51.2959],[3.56163,51.29644],[3.56489,51.29569],[3.5727,51.29225],[3.57253,51.29107],[3.57571,51.28946],[3.57905,51.28951],[3.58206,51.28876],[3.58214,51.29247],[3.58618,51.29316],[3.58026,51.29869],[3.58987,51.30663],[3.62626,51.29413],[3.64145,51.28914],[3.64411,51.29069],[3.6581,51.29096],[3.6781,51.28345],[3.67905,51.28168],[3.69063,51.28173],[3.69424,51.27668],[3.71801,51.27217],[3.71827,51.27368],[3.72273,51.274],[3.75054,51.27061],[3.75286,51.27104],[3.75681,51.26986],[3.76342,51.26261],[3.76848,51.26106],[3.77123,51.26218],[3.77355,51.2646],[3.79698,51.25665],[3.79071,51.24553],[3.79063,51.21608],[3.80453,51.2143],[3.80796,51.21398],[3.82479,51.21086],[3.8356,51.21516],[3.85225,51.21484],[3.85895,51.21291],[3.89002,51.22473],[3.89568,51.21968],[3.89482,51.2143],[3.88298,51.20764],[3.88762,51.20301],[3.89345,51.20527],[3.89929,51.20398],[3.91542,51.20989],[3.91388,51.21764],[3.92349,51.21989],[3.93105,51.22194],[3.9374,51.21398],[3.94323,51.21721],[3.95748,51.21764],[3.96023,51.22527],[3.97654,51.22667],[3.9846,51.2357],[3.99473,51.23914],[4.00469,51.24311],[4.01636,51.24623],[4.03851,51.24687],[4.04125,51.24397],[4.05842,51.24505],[4.06082,51.24773],[4.16365,51.29391],[4.23815,51.35345],[4.22373,51.35881],[4.21686,51.36878],[4.21635,51.37435],[4.33685,51.37842],[4.34235,51.35988],[4.35093,51.35967],[4.36861,51.35795],[4.38543,51.35592],[4.39505,51.35753],[4.42114,51.36707],[4.42818,51.36642],[4.42337,51.37242],[4.42904,51.37521],[4.38852,51.40702],[4.38097,51.42137],[4.38904,51.42597],[4.39093,51.43304],[4.3935,51.43486],[4.39161,51.44416],[4.37891,51.44502],[4.37719,51.44716],[4.38131,51.45165],[4.38509,51.4508],[4.44157,51.47005],[4.46354,51.4723],[4.47487,51.47978],[4.48654,51.4786],[4.53856,51.48416],[4.55074,51.47283],[4.53238,51.44877],[4.53701,51.42522],[4.57512,51.43411],[4.63469,51.42651],[4.64087,51.42372],[4.65048,51.42747],[4.6673,51.42779],[4.66473,51.44556],[4.69236,51.45326],[4.70146,51.46845],[4.71416,51.47026],[4.71519,51.47304],[4.72781,51.48486],[4.74524,51.48988],[4.74721,51.49368],[4.74781,51.49651],[4.75047,51.49945],[4.75648,51.50196],[4.77253,51.50682],[4.79485,51.5034],[4.82025,51.49784],[4.82643,51.48609],[4.84737,51.48352],[4.84291,51.46449],[4.84909,51.46085],[4.84463,51.4478],[4.83089,51.44438],[4.83742,51.42683],[4.8563,51.41805],[4.88171,51.43325],[4.91741,51.4127],[4.93389,51.42083],[4.90162,51.44053],[4.9387,51.46192],[4.97646,51.44545],[5.02419,51.48523],[5.03225,51.48919],[5.04187,51.4878],[5.04135,51.48053],[5.04856,51.47433],[5.08032,51.47475],[5.10658,51.43047],[5.07294,51.39358],[5.11765,51.36149],[5.12074,51.35592],[5.13268,51.3475],[5.13525,51.31608],[5.1622,51.31135],[5.17241,51.31688],[5.19001,51.32069],[5.19585,51.32123],[5.19988,51.32348],[5.24331,51.30594],[5.2276,51.26841],[5.23842,51.26208],[5.26357,51.26782],[5.29584,51.26267],[5.31567,51.26449],[5.33755,51.26428],[5.34107,51.26686],[5.34399,51.27309],[5.34554,51.27668],[5.4172,51.2632],[5.43222,51.27706],[5.43806,51.27695],[5.44132,51.2827],[5.46398,51.28549],[5.47608,51.29209],[5.47608,51.29536],[5.48226,51.29923],[5.48201,51.301],[5.51625,51.29612],[5.52011,51.28957],[5.54363,51.27298],[5.55711,51.26718],[5.55874,51.2631],[5.55745,51.25316],[5.55651,51.24472],[5.56131,51.22301],[5.63667,51.20355],[5.65401,51.19812],[5.65513,51.1936],[5.65212,51.1929],[5.65753,51.1865],[5.66834,51.18671],[5.67624,51.18548],[5.67761,51.18435],[5.6856,51.18542],[5.68946,51.18623],[5.69815,51.1842],[5.70201,51.18397],[5.70165,51.18275],[5.70645,51.18248],[5.70815,51.18223],[5.70987,51.1812],[5.71431,51.1839],[5.7177,51.18475],[5.72948,51.18601],[5.73031,51.18553],[5.73274,51.18564],[5.73274,51.18615],[5.7345,51.18657],[5.73993,51.18757],[5.74576,51.19032],[5.75769,51.18618],[5.75821,51.1851],[5.76731,51.18413],[5.77821,51.1787],[5.77477,51.17337],[5.7801,51.17289],[5.78078,51.17208],[5.77992,51.17052],[5.77673,51.1702],[5.77585,51.17028],[5.77321,51.16967],[5.77274,51.16925],[5.77192,51.16924],[5.77093,51.1698],[5.76993,51.16905],[5.77059,51.16458],[5.77383,51.16453],[5.77385,51.16558],[5.77638,51.16565],[5.77701,51.16306],[5.7775,51.16298],[5.77808,51.16353],[5.77975,51.16356],[5.78025,51.15935],[5.77797,51.15803],[5.77677,51.15554],[5.77829,51.15502],[5.77907,51.15319],[5.78456,51.15421],[5.79005,51.15798],[5.79512,51.15798],[5.80095,51.15954],[5.80027,51.16094],[5.80361,51.1632],[5.80619,51.16352],[5.8134,51.16051],[5.8146,51.16325],[5.82473,51.16874],[5.83434,51.16314],[5.83589,51.15905],[5.84078,51.15819],[5.84129,51.15523],[5.8564,51.15071],[5.86258,51.14446],[5.85674,51.14037],[5.85159,51.13671],[5.84816,51.12938],[5.83374,51.12744],[5.82241,51.12249],[5.81211,51.11387],[5.82275,51.11171],[5.84026,51.10611],[5.83683,51.0936],[5.82584,51.08929],[5.80559,51.09102],[5.81142,51.07851],[5.80421,51.07031],[5.80868,51.06233],[5.797,51.05564],[5.77709,51.05693],[5.76576,51.03384],[5.78568,51.02412],[5.77263,51.01354],[5.77332,51.00555],[5.76885,50.99345],[5.7589,50.98912],[5.74654,50.97767],[5.72765,50.9647],[5.72834,50.95843],[5.73761,50.96145],[5.75306,50.96232],[5.76851,50.9541],[5.7589,50.94567],[5.73521,50.92446],[5.73177,50.91061],[5.7177,50.90563],[5.70362,50.9078],[5.70122,50.89545],[5.68954,50.88224],[5.68096,50.87726],[5.67169,50.87574],[5.65453,50.87054],[5.64766,50.86274],[5.64766,50.84757],[5.65453,50.83435],[5.66448,50.82437],[5.6971,50.81353],[5.71838,50.80333],[5.72113,50.77642],[5.78018,50.79639],[5.82962,50.77294],[5.9079,50.77381],[6.00403,50.76947],[6.04248,50.76252],[6.05621,50.75123],[6.129,50.73385],[6.16745,50.69037],[6.21689,50.66252],[6.2471,50.65991],[6.28143,50.64424],[6.28693,50.62333],[6.27045,50.59631],[6.24847,50.58542],[6.24058,50.56078],[6.22719,50.5538],[6.21586,50.54965],[6.20419,50.53591],[6.21552,50.52063],[6.22993,50.50295],[6.23989,50.50513],[6.2598,50.50338],[6.27766,50.50731],[6.29139,50.50076],[6.3089,50.50513],[6.3216,50.49923],[6.35078,50.49377],[6.35765,50.48722],[6.34838,50.47936],[6.35147,50.46188],[6.37756,50.45925],[6.38065,50.44657],[6.37619,50.40786],[6.36383,50.39561],[6.35387,50.38028],[6.36246,50.37634],[6.41155,50.34415],[6.41499,50.33363],[6.40675,50.31982],[6.38718,50.31763],[6.36829,50.3025],[6.35765,50.30338],[6.33018,50.31565],[6.31645,50.31478],[6.30444,50.30601],[6.29585,50.29044],[6.29414,50.27354],[6.27628,50.26411],[6.22856,50.25511],[6.21483,50.25094],[6.20659,50.24062],[6.19869,50.23403],[6.17947,50.23139],[6.18221,50.22678],[6.17672,50.22151],[6.19251,50.21206],[6.19801,50.18437],[6.19217,50.17646],[6.15166,50.16656],[6.15509,50.15491],[6.16058,50.14633],[6.15578,50.13554],[6.14376,50.13224],[6.13243,50.12454],[6.10737,50.13378],[6.11012,50.16282],[6.09947,50.16502],[6.08677,50.15425],[6.06583,50.14875],[6.02943,50.15579],[6.01639,50.17294],[5.97931,50.16898],[5.96832,50.12542],[5.94566,50.12278],[5.90378,50.10473],[5.89073,50.06948],[5.86876,50.06243],[5.87837,50.03289],[5.83168,50.01039],[5.84404,49.99935],[5.84747,49.98214],[5.81932,49.95785],[5.78773,49.95255],[5.77263,49.91144],[5.74722,49.89994],[5.7843,49.88977],[5.7946,49.87473],[5.76645,49.86012],[5.75203,49.834],[5.76645,49.80121],[5.79941,49.79855],[5.84404,49.74977],[5.83923,49.72847],[5.87906,49.72892],[5.89622,49.70672],[5.87563,49.67963],[5.91176,49.66218],[5.90567,49.65779],[5.9073,49.65479],[5.90429,49.65213],[5.90507,49.64735],[5.90567,49.64262],[5.90876,49.63868],[5.89854,49.63362],[5.89374,49.63573],[5.88524,49.6319],[5.88799,49.62645],[5.87837,49.62],[5.87829,49.61305],[5.8776,49.60737],[5.84996,49.59675],[5.85202,49.58824],[5.86318,49.58773],[5.86524,49.58974],[5.86962,49.59013],[5.87279,49.58913],[5.87502,49.58295],[5.87073,49.58134],[5.87288,49.57961],[5.87314,49.57677],[5.87451,49.5736],[5.86387,49.56965],[5.86164,49.56603],[5.85288,49.56347],[5.85168,49.56185],[5.84661,49.5608],[5.84773,49.55896],[5.84722,49.55567],[5.84224,49.55233],[5.8267,49.54933],[5.82524,49.55066],[5.82026,49.54599],[5.81623,49.54599],[5.81245,49.54582],[5.80765,49.5486],[5.79941,49.54816],[5.78859,49.55194],[5.77263,49.56141],[5.76181,49.55963],[5.75941,49.54203],[5.7407,49.53724],[5.73521,49.53813],[5.72971,49.54225],[5.7189,49.53802],[5.70156,49.5378],[5.6904,49.54392],[5.67993,49.54348],[5.67787,49.54715],[5.66757,49.54682],[5.66002,49.5505],[5.64526,49.54437],[5.62878,49.53579],[5.6262,49.52287],[5.62346,49.5144],[5.61298,49.50292],[5.60217,49.50671],[5.59359,49.51953],[5.56904,49.52565],[5.56372,49.52409],[5.55462,49.52744],[5.54192,49.51384],[5.50329,49.50504],[5.4875,49.50526],[5.48458,49.50113],[5.47085,49.49322],[5.46209,49.49679],[5.46055,49.50738],[5.45214,49.51083],[5.44304,49.51841],[5.46158,49.52788],[5.46209,49.53735],[5.4372,49.55283],[5.45368,49.56542],[5.44458,49.56586],[5.43549,49.56887],[5.42673,49.5899],[5.42862,49.59358],[5.41523,49.59947],[5.40871,49.60748],[5.39892,49.6096],[5.39652,49.6146],[5.3742,49.62128],[5.37025,49.62105],[5.36047,49.62428],[5.34897,49.62895],[5.34279,49.61505],[5.33781,49.61427],[5.32957,49.61494],[5.32064,49.61271],[5.31378,49.6096],[5.31034,49.61071],[5.30863,49.61694],[5.30279,49.62317],[5.30245,49.62962],[5.30794,49.63851],[5.31738,49.64807],[5.33043,49.65318],[5.30708,49.67085],[5.29284,49.67607],[5.27962,49.68496],[5.2791,49.6884],[5.26829,49.69495],[5.25782,49.69295],[5.2482,49.68529],[5.24117,49.68429],[5.24134,49.68851],[5.23104,49.69007],[5.2173,49.6864],[5.21421,49.68784],[5.20666,49.69451],[5.19722,49.69062],[5.18932,49.6924],[5.17542,49.6924],[5.16306,49.69218],[5.1622,49.6995],[5.1646,49.71083],[5.15963,49.71438],[5.15327,49.71671],[5.15087,49.71249],[5.14263,49.70739],[5.14006,49.71194],[5.13147,49.71205],[5.12529,49.71105],[5.12032,49.71704],[5.12358,49.72637],[5.11723,49.73757],[5.09302,49.76297],[5.08796,49.76475],[5.08452,49.76186],[5.07963,49.76164],[5.07611,49.76109],[5.07139,49.75987],[5.06727,49.76081],[5.06144,49.76192],[5.06092,49.76624],[5.04908,49.76741],[5.00599,49.7816],[5.00547,49.7832],[5.00504,49.78719],[5.00041,49.79312],[4.99741,49.79379],[4.99603,49.79506],[4.99715,49.79672],[4.99672,49.79955],[4.9938,49.79977],[4.98539,49.79888],[4.97895,49.79972],[4.96977,49.8011],[4.96779,49.79756],[4.96179,49.79717],[4.95569,49.80027],[4.94865,49.79811],[4.94814,49.79473],[4.94368,49.79035],[4.94213,49.79035],[4.94132,49.79226],[4.93887,49.7926],[4.93286,49.78977],[4.9329,49.78825],[4.93114,49.78661],[4.92939,49.78686],[4.92102,49.78805],[4.91793,49.78708],[4.91269,49.78573],[4.90475,49.78492],[4.89947,49.78597],[4.89741,49.78836],[4.88913,49.78769],[4.88724,49.78786],[4.88244,49.79049],[4.87939,49.79249],[4.87591,49.79282],[4.87068,49.79268],[4.87188,49.78922],[4.87081,49.78839],[4.86227,49.78805],[4.85712,49.78966],[4.85201,49.79035],[4.84909,49.79368],[4.8563,49.79722],[4.86076,49.80354],[4.86214,49.81373],[4.87364,49.81883],[4.86712,49.82071],[4.86712,49.82625],[4.86506,49.83444],[4.8654,49.83964],[4.85304,49.84042],[4.84943,49.84894],[4.84789,49.86278],[4.84463,49.8703],[4.85561,49.87096],[4.87484,49.89618],[4.87347,49.90459],[4.87999,49.90879],[4.87553,49.92006],[4.85424,49.92957],[4.84325,49.94636],[4.82849,49.94724],[4.78558,49.9563],[4.78523,49.9828],[4.80995,49.99626],[4.81647,50.02671],[4.83021,50.04127],[4.81441,50.04788],[4.8127,50.06794],[4.8357,50.07014],[4.83192,50.09085],[4.84291,50.10363],[4.86626,50.10318],[4.85836,50.1164],[4.88274,50.13664],[4.87072,50.14875],[4.8278,50.14963],[4.82025,50.15579],[4.76875,50.1296],[4.75262,50.10539],[4.70352,50.08424],[4.70112,50.01502],[4.69803,49.99229],[4.63383,49.98037],[4.56963,49.96712],[4.53255,49.94857],[4.51401,49.93973],[4.44122,49.93178],[4.35745,49.94327],[4.31145,49.95564],[4.22974,49.94945],[4.18785,49.95034],[4.16725,49.96801],[4.12331,49.97286],[4.12193,50.01215],[4.14734,50.05273],[4.18167,50.05493],[4.22012,50.07301],[4.1906,50.10252],[4.18922,50.1263],[4.16382,50.1219],[4.11644,50.13158],[4.13841,50.21734],[4.20708,50.25555],[4.1827,50.27025],[4.16382,50.28298],[4.15901,50.27596],[4.17309,50.2685],[4.17309,50.25994],[4.16519,50.25401],[4.13258,50.25489],[4.1312,50.26433],[4.13017,50.27091],[4.11644,50.27464],[4.12262,50.2821],[4.1185,50.2957],[4.09653,50.30864],[4.07696,50.30579],[4.07215,50.31807],[4.05533,50.32946],[4.03679,50.33998],[4.02512,50.35291],[3.98598,50.33911],[3.95748,50.33845],[3.8974,50.32267],[3.88264,50.32377],[3.88092,50.33494],[3.85448,50.33911],[3.84933,50.34875],[3.82942,50.35028],[3.82633,50.34217],[3.80711,50.3413],[3.80608,50.35072],[3.74256,50.34393],[3.73604,50.31149],[3.72437,50.30272],[3.70583,50.29921],[3.68076,50.31894],[3.66428,50.34152],[3.65227,50.37087],[3.66634,50.39123],[3.66325,50.42143],[3.65398,50.4551],[3.62995,50.46712],[3.60832,50.49006],[3.59974,50.48657],[3.55476,50.48853],[3.49915,50.47936],[3.48198,50.48635],[3.50945,50.52085],[3.4758,50.52478],[3.45726,50.50513],[3.43735,50.49945],[3.36662,50.48416],[3.27324,50.52609],[3.25951,50.60154],[3.2341,50.65251],[3.24097,50.67862],[3.24783,50.70037],[3.19565,50.70776],[3.1311,50.77642],[3.06725,50.76296],[2.99652,50.74428],[2.95807,50.67035],[2.82898,50.68602],[2.68341,50.77816],[2.57629,50.81114],[2.5708,50.93939],[2.51862,51.05866],[2.36755,51.2516],[3.08167,51.55146]]]}},be_brussels:{type:"Feature",id:"be_brussels",properties:{},geometry:{type:"Polygon",coordinates:[[[4.37973,50.76382],[4.37853,50.76811],[4.34522,50.77337],[4.34205,50.77164],[4.32952,50.77381],[4.31621,50.78624],[4.31458,50.79454],[4.30282,50.79709],[4.29802,50.80593],[4.28901,50.80691],[4.2854,50.80506],[4.27579,50.80696],[4.27218,50.81011],[4.25802,50.80935],[4.25519,50.8151],[4.24403,50.81548],[4.24343,50.82182],[4.25227,50.82697],[4.25107,50.83288],[4.25467,50.83695],[4.27193,50.84036],[4.28094,50.84215],[4.28042,50.85721],[4.27802,50.85911],[4.27699,50.86713],[4.28274,50.87227],[4.29561,50.88094],[4.29553,50.88262],[4.29149,50.88495],[4.29004,50.88982],[4.30634,50.89274],[4.31647,50.89605],[4.32892,50.90249],[4.34025,50.90411],[4.34857,50.90341],[4.36213,50.9033],[4.3726,50.90032],[4.38119,50.90319],[4.38462,50.91093],[4.39578,50.91407],[4.41543,50.91342],[4.41655,50.90757],[4.4296,50.90103],[4.43595,50.89502],[4.43106,50.89014],[4.44007,50.87845],[4.43183,50.87628],[4.4253,50.86615],[4.44599,50.85992],[4.44968,50.85591],[4.46238,50.85396],[4.46899,50.84573],[4.46959,50.83537],[4.47972,50.82036],[4.45947,50.81661],[4.45921,50.80626],[4.48238,50.79617],[4.4817,50.79134],[4.46427,50.78645],[4.435,50.775],[4.43028,50.77517],[4.38917,50.76377],[4.37973,50.76382]]]}},be_flanders:{type:"Feature",id:"be_flanders",properties:{},geometry:{type:"Polygon",coordinates:[[[2.52239,51.10172],[3.12606,51.34118],[3.17493,51.38246],[3.37615,51.38784],[3.41065,51.3304],[3.40202,51.28548],[3.49114,51.2567],[3.48251,51.30345],[3.57737,51.32322],[3.81309,51.27289],[3.82172,51.23691],[3.93095,51.23691],[4.05456,51.27469],[4.20116,51.35195],[4.16954,51.38067],[4.34202,51.39502],[4.36502,51.46491],[4.53749,51.50072],[4.57199,51.47924],[4.56049,51.44879],[4.63811,51.45058],[4.75022,51.52397],[4.83645,51.50787],[5.0808,51.49893],[5.13541,51.447],[5.10667,51.39143],[5.26477,51.31783],[5.26477,51.28727],[5.4085,51.29267],[5.48612,51.32501],[5.58098,51.28368],[5.58385,51.23511],[5.76783,51.2045],[5.87706,51.16125],[5.70459,50.80293],[5.90581,50.78657],[5.93743,50.73202],[5.90293,50.70108],[5.81382,50.69379],[5.61547,50.76112],[5.50049,50.712],[5.2044,50.7029],[5.16416,50.67558],[5.03768,50.70108],[4.98881,50.75021],[4.91694,50.72656],[4.79046,50.76658],[4.68122,50.77021],[4.66973,50.73566],[4.2874,50.67922],[3.91083,50.6774],[3.71823,50.75203],[3.65499,50.712],[3.53426,50.71018],[3.51413,50.74112],[3.45664,50.74384],[3.37328,50.69562],[3.31004,50.70745],[3.28991,50.73657],[3.16487,50.74294],[3.13181,50.77203],[3.08007,50.76021],[2.87453,50.7393],[2.89609,50.71109],[2.87453,50.69562],[2.79692,50.7029],[2.69918,50.8002],[2.62013,50.79747],[2.56982,50.8583],[2.56695,50.92358],[2.60288,50.94985],[2.5497,50.99601],[2.52239,51.10172]]]}},be_wallonia:{type:"Feature",id:"be_wallonia",properties:{},geometry:{type:"Polygon",coordinates:[[[5.78257,49.87573],[5.73919,49.83362],[5.75516,49.79146],[5.78839,49.79665],[5.91064,49.66249],[5.84857,49.59723],[5.87102,49.57599],[5.81857,49.54638],[5.66079,49.55362],[5.61108,49.50603],[5.55603,49.52928],[5.47051,49.49737],[5.45708,49.56703],[5.37522,49.62333],[5.31486,49.61137],[5.33243,49.65263],[5.26851,49.69657],[5.16628,49.69303],[4.99753,49.80006],[4.85164,49.79345],[4.84754,49.86806],[4.89013,49.90893],[4.79117,49.958],[4.87762,50.15374],[4.82418,50.16932],[4.70207,50.09556],[4.69441,49.99625],[4.44551,49.93722],[4.30589,49.96829],[4.19746,49.9546],[4.1352,50.01508],[4.22825,50.07842],[4.19682,50.13519],[4.12714,50.1355],[4.2052,50.27347],[4.16262,50.28896],[4.13538,50.25784],[4.02795,50.3584],[3.88574,50.32701],[3.84578,50.35323],[3.74546,50.35005],[3.70994,50.30316],[3.65756,50.37076],[3.65552,50.4617],[3.60586,50.49632],[3.4993,50.48921],[3.51992,50.52362],[3.47439,50.53368],[3.37698,50.49109],[3.28634,50.52793],[3.26104,50.70131],[3.20602,50.71139],[3.17839,50.75609],[3.30562,50.75466],[3.36077,50.70962],[3.45439,50.77072],[3.64047,50.72242],[3.67752,50.77062],[3.75857,50.78045],[3.77568,50.74789],[3.8798,50.75146],[3.9097,50.69245],[4.05868,50.69439],[4.14853,50.72834],[4.2467,50.6894],[4.46355,50.75511],[4.52399,50.72724],[4.59727,50.76359],[4.63445,50.74272],[4.64309,50.79755],[4.76014,50.80544],[4.92545,50.74275],[5.00339,50.76594],[5.07039,50.70649],[5.16508,50.6957],[5.16984,50.72257],[5.30912,50.71802],[5.35029,50.74629],[5.47863,50.72352],[5.68786,50.81193],[5.68225,50.75651],[5.7707,50.75132],[5.81963,50.71396],[5.88333,50.70992],[5.89217,50.75518],[5.96561,50.76107],[6.04045,50.74546],[6.03959,50.71833],[6.11066,50.72299],[6.18169,50.62383],[6.26953,50.62519],[6.17812,50.54153],[6.22658,50.49432],[6.35036,50.48854],[6.34298,50.38033],[6.40542,50.32331],[6.30647,50.32019],[6.27889,50.26734],[6.17377,50.23165],[6.19232,50.18203],[6.147,50.17775],[6.13779,50.12985],[6.10245,50.17055],[5.96368,50.17263],[5.96133,50.13136],[5.89532,50.11216],[5.81968,50.01329],[5.83578,49.97892],[5.77502,49.9608],[5.73577,49.89684],[5.78257,49.87573]]]}},croatia:{type:"Feature",id:"croatia",properties:{},geometry:{type:"Polygon",coordinates:[[[18.55316,42.39709],[18.487,42.33],[16,42.2],[13,45],[13.48,45.55],[13.6,45.46],[13.67282,45.45244],[13.78445,45.47445],[13.87695,45.43477],[13.98354,45.46061],[13.95607,45.5049],[13.99868,45.52812],[14.07402,45.49231],[14.19361,45.48114],[14.23361,45.51383],[14.33098,45.47073],[14.4841,45.54339],[14.55276,45.65149],[15.16462,45.43061],[15.36301,45.48661],[15.28061,45.60731],[15.34584,45.65341],[15.24587,45.72718],[15.55939,45.85272],[15.68573,45.84315],[15.71043,46.04506],[15.61913,46.08657],[15.60059,46.16509],[15.67131,46.23068],[15.78049,46.21928],[15.79422,46.26439],[16.073,46.34266],[16.04759,46.3891],[16.15145,46.40378],[16.30028,46.38152],[16.24191,46.49508],[16.36894,46.55083],[16.66077,46.45725],[16.72462,46.39715],[16.86058,46.35783],[16.97456,46.22688],[17.17232,46.1551],[17.31102,45.97167],[17.58087,45.93874],[17.66574,45.84483],[17.86118,45.77993],[18.15765,45.79625],[18.43522,45.74655],[18.68019,45.91486],[18.77838,45.88666],[18.82507,45.91724],[18.9164,45.70714],[18.96652,45.66972],[18.89717,45.56551],[18.94817,45.54136],[19.01686,45.56369],[19.10858,45.5144],[19.08125,45.47585],[19.00341,45.48553],[18.99315,45.44969],[19.03735,45.40735],[18.9792,45.37883],[19.09424,45.3367],[19.10972,45.30469],[19.2687,45.24886],[19.42108,45.23622],[19.45198,45.16219],[19.2041,45.17236],[19.14345,45.119],[19.09331,45.13091],[19.08464,45.11852],[19.11231,45.08359],[19.1011,44.98811],[19.16343,44.94855],[19.06865,44.88961],[18.99843,44.89696],[19.01991,44.84386],[18.83764,44.84591],[18.75065,44.90197],[18.73803,44.94119],[18.75375,44.95245],[18.78491,44.94261],[18.77858,44.98426],[18.72157,44.98326],[18.66267,45.04785],[18.46602,45.05359],[18.41889,45.09637],[18.22841,45.09274],[18.2011,45.0684],[18.11746,45.06832],[18.0011,45.14282],[17.93745,45.09903],[17.93891,45.07086],[17.84756,45.03242],[17.66404,45.12204],[17.59713,45.09425],[17.16882,45.13674],[16.92275,45.23503],[16.81812,45.17296],[16.5105,45.20898],[16.46738,45.13326],[16.40374,45.10639],[16.36047,44.99622],[16.29175,44.9865],[16.11145,45.08758],[15.99747,45.21978],[15.81894,45.2072],[15.77283,45.16143],[15.80439,45.1121],[15.75505,45.05587],[15.78598,44.96966],[15.7338,44.9371],[15.78598,44.84029],[15.74818,44.81311],[15.82858,44.72686],[15.90458,44.75089],[16.14789,44.48088],[16.15253,44.38405],[16.39709,44.06983],[17.1476,43.49677],[17.22656,43.49776],[17.282,43.47769],[17.30151,43.4393],[17.26227,43.39108],[17.37488,43.2502],[17.44734,43.1998],[17.43805,43.18365],[17.63424,43.09863],[17.71339,42.97351],[17.53967,42.93531],[17.64267,42.88351],[17.67975,42.92174],[17.7903,42.89961],[17.80815,42.92073],[17.85896,42.89458],[17.90239,42.81647],[18.24898,42.61375],[18.3609,42.61526],[18.44437,42.56076],[18.43575,42.48273],[18.55316,42.39709]]]}},czechia:{type:"Feature",id:"czechia",properties:{},geometry:{type:"Polygon",coordinates:[[[14.3811,51.06902],[15.13916,51.08282],[16.42456,50.70863],[16.68823,50.32442],[16.78711,50.49246],[17.75391,50.35247],[18.58887,49.96536],[18.92944,49.51808],[18.1604,48.98022],[17.00684,48.61839],[15.13916,48.85749],[14.67773,48.55298],[13.85376,48.58206],[12.00806,50.05008],[11.92017,50.35948],[14.3811,51.06902]]]}},denmark:{type:"Feature",id:"denmark",properties:{},geometry:{type:"Polygon",coordinates:[[[7.99805,55.11608],[7.9541,56.94497],[10.62378,57.94401],[12.65625,56.01681],[12.65625,55.91535],[12.82928,55.5566],[12.60956,55.42122],[12.66449,55.25095],[14.82605,55.37911],[15.28198,55.22902],[15.11719,54.85448],[12.87598,54.85922],[12.07672,54.44769],[10.849,54.73414],[10.67871,54.58002],[9.88083,54.83708],[9.73972,54.82265],[9.60823,54.8525],[9.63158,54.87996],[9.59038,54.88668],[9.4994,54.83886],[9.43176,54.82601],[9.41013,54.84242],[9.38198,54.83827],[9.37443,54.82047],[9.34422,54.80108],[9.25152,54.80979],[9.23985,54.84993],[9.13822,54.87483],[9.06338,54.87048],[8.90167,54.90386],[8.85532,54.89517],[8.82408,54.90662],[8.79765,54.90445],[8.77602,54.893],[8.72761,54.89181],[8.67645,54.91195],[8.66066,54.90859],[8.55698,54.92063],[8.47355,55.05537],[7.99805,55.11608]]]}},finland:{type:"Feature",id:"finland",properties:{},geometry:{type:"Polygon",coordinates:[[[24.16992,65.34851],[23.90625,66.14274],[23.68652,66.44311],[23.99414,66.80922],[23.51074,67.27204],[23.37891,67.44123],[23.73047,67.97463],[20.74219,69.03714],[21.18164,69.28726],[21.70898,69.27171],[22.45605,68.73638],[23.15918,68.65655],[23.90625,68.8318],[25.00488,68.59249],[25.40039,68.87936],[25.75195,68.95839],[25.97168,69.70287],[26.45508,69.96044],[27.20215,69.90012],[27.50977,70.0506],[27.86133,70.08056],[28.38867,69.82447],[29.04785,69.71811],[29.26758,69.53452],[28.87207,69.225],[29.0918,69.02141],[28.52051,68.89519],[28.78418,68.84767],[28.52051,68.56038],[28.69629,68.17156],[29.26758,68.0733],[30.05859,67.69277],[29.17969,67.0503],[29.0918,66.8956],[30.14648,65.73063],[29.66309,65.20147],[29.70703,64.79285],[30.05859,64.79285],[30.10254,64.41592],[30.4541,64.30182],[30.05859,63.74363],[31.59668,63.01511],[30.27832,61.89758],[27.81738,60.56538],[27.33398,60.19616],[24.65332,59.88894],[21.84082,59.46741],[20.43457,59.46741],[19.11621,60.19616],[19.2041,60.58697],[20.08301,60.75916],[20.69824,61.14324],[20.96191,61.73153],[19.99512,63.27318],[21.44531,63.66576],[22.93945,64.20638],[23.24707,64.51064],[23.81836,64.66152],[24.16992,65.34851]]]}},france:{type:"Feature",id:"france",properties:{},geometry:{type:"MultiPolygon",coordinates:[[[[9.9,42.64836],[9.9,42.02785],[9.63227,41.43244],[9.36968,41.35052],[9.32602,41.3036],[9.27311,41.29196],[9.07196,41.26129],[8.94186,41.27688],[8.8742,41.26232],[8.84542,41.26311],[8.78782,41.25725],[7.3114,41.4242],[5.8,41.64],[3.17358,42.41768],[3.16081,42.42757],[3.0944,42.41457],[3.03402,42.45331],[3.02214,42.45645],[2.87822,42.4487],[2.87019,42.44653],[2.78424,42.40256],[2.7413,42.41128],[2.72928,42.40998],[2.69331,42.39417],[2.68378,42.3854],[2.68162,42.37263],[2.68585,42.34679],[2.66719,42.33008],[2.58106,42.34418],[2.56777,42.34173],[2.5338,42.32197],[2.47795,42.32986],[2.41933,42.37658],[2.41222,42.38021],[2.26719,42.42055],[2.25973,42.42117],[2.20694,42.41558],[2.20653,42.41526],[2.20526,42.41541],[2.16028,42.41065],[2.14881,42.40545],[2.09393,42.35474],[2.00861,42.33818],[1.965,42.36473],[1.93076,42.42442],[1.92089,42.43302],[1.88467,42.44761],[1.88459,42.44762],[1.88444,42.4477],[1.82774,42.47056],[1.72567,42.48452],[1.71561,42.50125],[1.7272,42.56103],[1.72479,42.57499],[1.71011,42.59992],[1.69377,42.60975],[1.60283,42.61382],[1.56069,42.6392],[1.54636,42.64166],[1.50444,42.6331],[1.4921,42.62502],[1.47238,42.59703],[1.43792,42.59264],[1.41936,42.60643],[1.38032,42.67415],[1.37335,42.68127],[1.33313,42.70563],[1.32364,42.7085],[1.23221,42.71248],[1.16554,42.69928],[1.08546,42.76635],[1.07564,42.77079],[0.95937,42.78852],[0.95073,42.78794],[0.92265,42.7797],[0.84606,42.8157],[0.71511,42.8464],[0.70017,42.84402],[0.69117,42.83186],[0.67409,42.76479],[0.67474,42.75286],[0.69192,42.70684],[0.669,42.67901],[0.43024,42.67863],[0.3715,42.70308],[0.35954,42.70415],[0.34912,42.69817],[0.32567,42.67274],[0.29571,42.66388],[0.24593,42.70175],[0.23972,42.70494],[0.18967,42.72039],[0.17919,42.72075],[-0.01993,42.67389],[-0.06726,42.6848],[-0.16949,42.77157],[-0.29987,42.82697],[-0.31683,42.82635],[-0.39208,42.78766],[-0.44354,42.78453],[-0.48842,42.80255],[-0.50868,42.79935],[-0.54499,42.76906],[-0.56721,42.76937],[-0.67446,42.86392],[-0.68094,42.86775],[-0.73372,42.88666],[-0.7476,42.93879],[-0.75711,42.95107],[-0.77253,42.95284],[-0.82114,42.93865],[-0.94508,42.94192],[-1.02313,42.98206],[-1.10852,43.00409],[-1.1156,43.00461],[-1.14775,43.00124],[-1.15845,43.01452],[-1.16736,43.02083],[-1.21622,43.0381],[-1.22612,43.03898],[-1.26236,43.03303],[-1.30643,43.05531],[-1.31992,43.05696],[-1.33135,43.0496],[-1.3542,43.0197],[-1.43868,43.03371],[-1.4775,43.06889],[-1.48311,43.08561],[-1.47641,43.10248],[-1.43479,43.13087],[-1.42732,43.1404],[-1.39411,43.22935],[-1.39531,43.24596],[-1.40868,43.25591],[-1.52629,43.28099],[-1.54626,43.2737],[-1.57149,43.2412],[-1.61053,43.24223],[-1.65,43.29323],[-1.66953,43.30065],[-1.73359,43.28856],[-1.75606,43.31966],[-1.76297,43.32565],[-1.79156,43.34067],[-1.80099,43.37017],[-1.78509,43.39037],[-1.7835,43.39686],[-2.7,43.9],[-6.3,48.98],[-2.25,50.09],[1.26331,50.92504],[1.76605,51.17762],[2.35816,51.32937],[2.5488,51.09759],[2.57048,51.07409],[2.58741,51.01763],[2.59845,51.0051],[2.61558,50.99749],[2.63986,50.95766],[2.64225,50.94578],[2.62452,50.9256],[2.61962,50.91067],[2.62396,50.86071],[2.62781,50.85054],[2.63786,50.83696],[2.6511,50.82906],[2.73267,50.81738],[2.79995,50.73795],[2.81655,50.73092],[2.85265,50.73335],[2.89072,50.7162],[2.90492,50.71536],[2.9161,50.72418],[2.93508,50.75592],[3.00718,50.78377],[3.08218,50.78749],[3.09244,50.79092],[3.11412,50.80566],[3.14877,50.80195],[3.2154,50.73111],[3.22149,50.7267],[3.27051,50.70375],[3.27545,50.67757],[3.26576,50.6604],[3.26588,50.64054],[3.28922,50.60028],[3.29219,50.55037],[3.3056,50.53267],[3.37551,50.50839],[3.3898,50.50884],[3.4748,50.54445],[3.52173,50.53459],[3.53266,50.51873],[3.54779,50.51012],[3.61523,50.50558],[3.67378,50.45642],[3.68415,50.35277],[3.6901,50.34044],[3.70258,50.33482],[3.71576,50.33854],[3.74935,50.36279],[3.84109,50.36558],[3.90189,50.3436],[3.91317,50.34291],[4.02672,50.36904],[4.13761,50.29984],[4.14388,50.29727],[4.21444,50.28167],[4.22904,50.26664],[4.23078,50.25233],[4.17084,50.18579],[4.16601,50.16888],[4.1764,50.1547],[4.21195,50.13602],[4.24074,50.07102],[4.23193,50.05551],[4.18164,50.03436],[4.17177,50.02537],[4.16976,50.01217],[4.1765,50.00065],[4.20633,49.97546],[4.22164,49.97089],[4.30877,49.98145],[4.44542,49.9523],[4.45469,49.95251],[4.6581,50.00609],[4.66936,50.01392],[4.67293,50.02716],[4.66924,50.06972],[4.69517,50.10472],[4.83123,50.17941],[4.8815,50.16436],[4.90479,50.14451],[4.90426,50.12639],[4.88076,50.0815],[4.86277,50.0745],[4.85104,50.06216],[4.84331,50.03884],[4.84331,50.03883],[4.8433,50.03881],[4.82678,49.989],[4.82662,49.97692],[4.83343,49.96696],[4.89654,49.91753],[4.89755,49.89424],[4.87913,49.86942],[4.87625,49.85111],[4.88924,49.81266],[4.89769,49.80204],[4.91098,49.79926],[4.99534,49.81116],[5.01867,49.79272],[5.02686,49.78886],[5.09944,49.77323],[5.13458,49.73462],[5.1412,49.72984],[5.18761,49.70906],[5.19602,49.70732],[5.28157,49.70836],[5.33363,49.67308],[5.344,49.65049],[5.3544,49.64041],[5.43141,49.60791],[5.48205,49.52815],[5.49294,49.51979],[5.50666,49.52042],[5.55401,49.54025],[5.59311,49.53424],[5.6076,49.53761],[5.641,49.56095],[5.70676,49.55267],[5.71578,49.55361],[5.77526,49.57414],[5.8399,49.55321],[5.86126,49.52038],[5.876,49.5114],[5.97516,49.50129],[5.99801,49.47317],[6.01627,49.46597],[6.08635,49.47562],[6.09319,49.47787],[6.17397,49.52187],[6.24643,49.52511],[6.334,49.48235],[6.34423,49.48037],[6.43515,49.487],[6.5451,49.44384],[6.60639,49.37868],[6.60497,49.33739],[6.61627,49.31869],[6.67013,49.29269],[6.72996,49.22917],[6.74328,49.19086],[6.76026,49.17752],[6.80904,49.17284],[6.82473,49.17826],[6.83093,49.19366],[6.82982,49.21802],[6.85119,49.23136],[6.88453,49.2239],[6.89322,49.22389],[6.93753,49.23369],[7.04055,49.19794],[7.0463,49.17503],[7.05478,49.16313],[7.06908,49.16018],[7.10494,49.16634],[7.14315,49.14159],[7.1535,49.13839],[7.28683,49.13488],[7.29893,49.13856],[7.36095,49.18259],[7.45012,49.19517],[7.50113,49.17672],[7.54379,49.10572],[7.5579,49.09626],[7.6296,49.08527],[7.64722,49.06722],[7.6612,49.06119],[7.75401,49.05963],[7.76073,49.06067],[7.80291,49.07489],[7.85525,49.05329],[7.8673,49.05227],[7.93826,49.06832],[8.08069,49.00688],[8.2225,48.98787],[8.23704,48.97683],[8.23589,48.95817],[8.20888,48.94863],[8.20089,48.94339],[8.15824,48.89753],[8.10087,48.7993],[7.99071,48.74478],[7.98534,48.7409],[7.90422,48.65865],[7.85605,48.63606],[7.8484,48.62977],[7.81842,48.58883],[7.81456,48.57704],[7.81449,48.50968],[7.78547,48.48337],[7.78055,48.47652],[7.74506,48.39484],[7.74357,48.38427],[7.75159,48.32322],[7.71085,48.29841],[7.70241,48.28803],[7.67661,48.21555],[7.59605,48.11698],[7.59165,48.10648],[7.58522,48.04694],[7.59127,48.03035],[7.62437,47.99865],[7.63205,47.97081],[7.57554,47.87436],[7.5728,47.86435],[7.57267,47.83631],[7.54581,47.78793],[7.54418,47.77232],[7.55758,47.72899],[7.53526,47.6989],[7.53136,47.68564],[7.537,47.67302],[7.60016,47.60822],[7.58967,47.56755],[7.55424,47.55128],[7.54511,47.54283],[7.51256,47.48439],[7.38747,47.42111],[7.32653,47.4273],[7.24435,47.40939],[7.16708,47.4335],[7.15212,47.47612],[7.14279,47.48707],[7.12853,47.48893],[7.0801,47.47718],[7.03557,47.48695],[7.02102,47.48458],[7.01205,47.47287],[7.003,47.44095],[6.9551,47.40808],[6.94716,47.39698],[6.94818,47.38337],[6.95769,47.37359],[6.97126,47.37218],[7.018,47.38386],[7.05623,47.37035],[7.07007,47.35005],[7.05958,47.32257],[6.97424,47.27856],[6.96347,47.26233],[6.96134,47.23479],[6.89443,47.19393],[6.88913,47.18922],[6.85545,47.14636],[6.76907,47.10751],[6.76011,47.09953],[6.72561,47.0418],[6.62355,46.9811],[6.4812,46.9445],[6.46892,46.93522],[6.46686,46.91997],[6.47548,46.88771],[6.4535,46.8239],[6.45644,46.80534],[6.46722,46.79104],[6.46098,46.76887],[6.15817,46.59343],[6.14872,46.58069],[6.15152,46.56508],[6.16549,46.54399],[6.15811,46.52456],[6.10174,46.46979],[6.09572,46.45418],[6.09704,46.43317],[6.10829,46.41643],[6.16622,46.38839],[6.17817,46.36922],[6.13748,46.31297],[6.13371,46.30227],[6.13038,46.23737],[6.1103,46.22344],[6.08865,46.23081],[6.07717,46.23123],[6.01857,46.21601],[6.00681,46.20752],[6.00388,46.19332],[6.00787,46.16977],[6.01783,46.15564],[6.03509,46.15456],[6.05564,46.16288],[6.12468,46.15415],[6.13778,46.15702],[6.24026,46.22094],[6.24906,46.23299],[6.24707,46.24777],[6.21148,46.31057],[6.21219,46.32485],[6.23946,46.36705],[6.31648,46.41557],[6.41083,46.42495],[6.41748,46.42682],[6.50498,46.46871],[6.63047,46.47435],[6.74665,46.45695],[6.82244,46.42925],[6.81832,46.38181],[6.80484,46.36179],[6.80189,46.34639],[6.81095,46.33359],[6.86491,46.30038],[6.87504,46.28007],[6.86092,46.2439],[6.82698,46.21188],[6.82075,46.19862],[6.81863,46.16592],[6.82259,46.15261],[6.83427,46.14509],[6.90382,46.12971],[6.90491,46.09595],[6.90932,46.08406],[6.92001,46.07721],[6.94898,46.0699],[7.01556,46.00883],[7.05191,45.93066],[7.04533,45.92217],[7.04497,45.92064],[7.04394,45.92036],[6.99582,45.85822],[6.94097,45.83551],[6.84376,45.82387],[6.83102,45.81711],[6.82614,45.80353],[6.82787,45.73217],[6.83174,45.72082],[6.8414,45.71373],[6.90729,45.69124],[6.92419,45.66935],[6.94247,45.66172],[6.97131,45.66528],[7.00597,45.64945],[7.01151,45.63652],[6.9978,45.60877],[6.99643,45.59465],[7.0158,45.52354],[7.02774,45.5102],[7.1072,45.47877],[7.1228,45.44924],[7.13304,45.44001],[7.1856,45.41894],[7.19515,45.40409],[7.17075,45.35069],[7.14232,45.32298],[7.13649,45.30576],[7.14458,45.25048],[7.08417,45.20279],[6.99279,45.19823],[6.98106,45.19368],[6.90009,45.12689],[6.85843,45.11699],[6.78283,45.14228],[6.77056,45.14242],[6.67751,45.11356],[6.6653,45.10289],[6.66501,45.08667],[6.68237,45.04558],[6.69602,45.03395],[6.75744,45.01884],[6.78375,44.9146],[6.7942,44.90161],[6.86698,44.86519],[6.8798,44.86346],[6.93633,44.87461],[7.01795,44.84402],[7.03453,44.82282],[7.03711,44.75009],[7.0496,44.73226],[7.07224,44.72311],[7.08651,44.6968],[7.08666,44.68085],[7.07671,44.67134],[6.99007,44.67203],[6.97413,44.66431],[6.97056,44.64696],[6.97819,44.61784],[6.94659,44.57124],[6.88235,44.53479],[6.87233,44.5195],[6.87892,44.50245],[6.95894,44.43129],[6.95872,44.42908],[6.92167,44.41436],[6.91223,44.40659],[6.90907,44.39477],[6.90972,44.38195],[6.91637,44.36804],[6.99909,44.29414],[7.01181,44.256],[7.01983,44.24558],[7.03259,44.2424],[7.07312,44.2461],[7.1651,44.22112],[7.24533,44.18544],[7.26053,44.16682],[7.27537,44.15947],[7.33878,44.1574],[7.36278,44.13834],[7.37776,44.13416],[7.56283,44.15792],[7.5642,44.15836],[7.56478,44.15817],[7.60548,44.1634],[7.6162,44.16827],[7.63989,44.18928],[7.68608,44.1861],[7.69422,44.17795],[7.68937,44.13869],[7.69445,44.12276],[7.72786,44.08615],[7.72403,44.05704],[7.68603,44.02371],[7.68077,44.0164],[7.66016,43.9672],[7.59624,43.94466],[7.58419,43.93287],[7.56858,43.89159],[7.5271,43.87434],[7.51649,43.86397],[7.51594,43.84915],[7.53622,43.79234],[9.26696,43.39308],[9.8,43.1],[9.9,42.64836]]]]}},"de-berlin-brandenburg":{type:"Feature",id:"de-berlin-brandenburg",properties:{},geometry:{type:"Polygon",coordinates:[[[11.32141,53.11711],[12.09595,53.36694],[12.88147,53.20274],[13.78235,53.50765],[14.16687,53.41608],[14.10645,53.28164],[14.29871,53.27507],[14.41956,53.32431],[14.19434,52.93871],[14.19434,52.82932],[14.57336,52.60972],[14.57336,52.36218],[14.71619,52.05249],[14.61182,51.84257],[14.76563,51.54975],[14.36462,51.519],[14.1449,51.54975],[13.99109,51.36835],[13.2605,51.39578],[13.07373,51.65211],[13.13965,51.86971],[12.67273,52.01532],[12.40356,52.03222],[12.22229,52.14697],[12.32117,52.50619],[12.16736,52.51956],[12.23877,52.87245],[11.60156,52.96849],[11.32141,53.11711]]]}},"de-ostwestfalen-lippe":{type:"Feature",id:"de-ostwestfalen-lippe",properties:{},geometry:{type:"Polygon",coordinates:[[[8.04337,52.05756],[8.42583,52.19919],[8.43846,52.35394],[8.30866,52.39929],[8.28438,52.4581],[8.67096,52.56967],[9.22028,52.49616],[9.06097,52.28328],[9.47365,51.86716],[9.46266,51.64103],[9.26285,51.46641],[9.15648,51.43569],[8.80348,51.43218],[8.54444,51.46003],[8.42239,51.55658],[8.31076,51.72252],[8.12645,51.86844],[8.04337,52.05756]]]}},germany:{type:"Feature",id:"germany",properties:{},geometry:{type:"Polygon",coordinates:[[[7.05048,52.62973],[7.21252,53.20274],[6.56982,53.61858],[8.30772,55.1467],[8.6483,54.96421],[9.45305,54.83313],[9.95018,54.82838],[11.99913,54.44689],[13.3889,54.89162],[14.15245,54.47562],[14.26231,53.78037],[14.44359,53.27096],[14.36119,53.0668],[14.16344,52.97097],[14.13597,52.84508],[14.62486,52.60555],[14.5919,52.35463],[14.71825,52.24042],[14.74571,52.06516],[14.60838,51.83153],[14.74571,51.69554],[14.76768,51.54206],[14.98741,51.43261],[15.03136,51.27824],[14.94347,51.04744],[14.85558,50.88138],[14.77867,50.81548],[14.64684,50.85017],[14.5974,50.99215],[14.32823,51.07506],[14.32823,50.88138],[13.01537,50.49508],[12.48253,50.38663],[12.33421,50.18305],[12.1804,50.30952],[12.12547,50.25686],[12.22984,50.09856],[12.55394,49.92912],[12.4276,49.75199],[12.5045,49.68807],[12.77916,49.35286],[12.93297,49.36002],[13.03185,49.28841],[13.57018,48.96489],[13.80089,48.81319],[13.75694,48.52297],[13.52074,48.58842],[13.45482,48.57388],[13.40538,48.36994],[13.23509,48.28959],[12.99889,48.24571],[12.75169,48.12118],[12.9879,47.86385],[12.91649,47.71623],[13.04832,47.72362],[13.09776,47.67186],[13.0648,47.50885],[12.93846,47.47173],[12.77367,47.5793],[12.8286,47.60894],[12.70226,47.70144],[12.1859,47.70514],[12.16942,47.62005],[11.86729,47.60524],[11.63109,47.59412],[11.25755,47.40114],[10.98839,47.40486],[10.88402,47.52369],[10.67528,47.55707],[10.45006,47.54594],[10.46654,47.41973],[10.34019,47.3081],[10.19737,47.27457],[10.21385,47.38998],[10.10948,47.3751],[10.08202,47.46431],[9.84581,47.55336],[9.40636,47.55336],[9.09874,47.68388],[8.90236,47.65521],[8.85292,47.70329],[8.80348,47.74025],[8.76915,47.71993],[8.80486,47.70329],[8.79524,47.68388],[8.7307,47.69867],[8.73482,47.7227],[8.71284,47.7384],[8.7513,47.76887],[8.69637,47.76425],[8.65654,47.8067],[8.63594,47.76518],[8.61122,47.80947],[8.57002,47.79286],[8.48763,47.77902],[8.41621,47.71808],[8.41347,47.68111],[8.46428,47.65891],[8.53706,47.67001],[8.60985,47.67741],[8.63457,47.64966],[8.59886,47.64319],[8.61122,47.6219],[8.56865,47.60061],[8.56865,47.6219],[8.52745,47.64041],[8.45879,47.60801],[8.50273,47.58672],[8.38463,47.57004],[8.33107,47.57375],[8.29399,47.61542],[8.2061,47.62653],[8.10173,47.56819],[7.96852,47.5617],[7.92046,47.55429],[7.89024,47.59505],[7.8257,47.58949],[7.81197,47.56726],[7.6815,47.54038],[7.6403,47.56448],[7.69386,47.5756],[7.6815,47.59412],[7.64854,47.60061],[7.61421,47.58394],[7.50641,47.70237],[7.79205,48.60749],[8.22876,48.97481],[6.84174,49.17093],[6.37482,49.48597],[6.53961,49.80963],[6.1441,50.01833],[6.19835,50.21119],[6.41808,50.35159],[6.19835,50.63117],[6.02257,50.77034],[6.02257,51.07506],[6.24229,51.37778],[5.97862,51.81456],[6.1496,51.90022],[6.44073,51.85105],[6.828,51.95611],[6.68518,52.05587],[7.04773,52.23957],[6.99554,52.45768],[6.70166,52.48445],[6.72913,52.64973],[7.05048,52.62973]]]}},hungary:{type:"Feature",id:"hungary",properties:{},geometry:{type:"Polygon",coordinates:[[[18.43643,45.73111],[17.67426,45.83454],[17.57675,45.92823],[17.35153,45.94303],[17.14966,46.16081],[16.52756,46.50028],[16.3147,46.86582],[16.11969,46.86582],[16.28448,46.99337],[16.48224,47.01584],[16.5152,47.1505],[16.42731,47.2177],[16.43829,47.41136],[16.66763,47.44852],[16.67587,47.60616],[16.43829,47.65614],[16.54816,47.75964],[16.71844,47.73563],[16.75003,47.68111],[17.08099,47.70791],[17.04254,47.86293],[17.09473,47.96234],[17.20734,48.02484],[17.75665,47.74486],[18.71246,47.76702],[18.85529,47.82606],[18.77838,47.87767],[18.75641,47.98808],[18.82233,48.04687],[19.50348,48.1056],[19.55566,48.25028],[19.92096,48.14227],[20.34943,48.30329],[20.54718,48.54389],[20.82184,48.58751],[21.14044,48.50751],[21.47003,48.58751],[21.70074,48.36902],[21.8367,48.34073],[22.2171,48.42282],[22.38327,48.24205],[22.50549,48.24845],[22.61948,48.1056],[22.83371,48.11843],[22.90649,47.95406],[22.59064,47.75779],[22.48077,47.81131],[22.42584,47.74486],[22.32147,47.75779],[22.02759,47.51442],[22.03033,47.38161],[21.9397,47.3658],[21.48926,46.75868],[21.52908,46.73233],[21.4151,46.61737],[21.33133,46.61549],[21.10611,46.23875],[20.79575,46.27863],[20.7106,46.15035],[20.25055,46.13227],[19.82758,46.16461],[19.54742,46.17793],[19.51447,46.1018],[18.80997,45.87567],[18.70285,45.91294],[18.43643,45.73111]]]}},iceland:{type:"Feature",id:"iceland",properties:{},geometry:{type:"Polygon",coordinates:[[[-25.21,65.81],[-23.17,66.89],[-19.51,66.29],[-19.09,67.46],[-17.98,67.34],[-17.38,66.83],[-14.01,66.72],[-12.36,64.54],[-17.21,62.92],[-23.63,63.15],[-25.21,65.81]]]}},italy:{type:"Feature",id:"italy",properties:{},geometry:{type:"Polygon",coordinates:[[[7.6,43.5],[7.49542,43.86523],[7.69043,44.0718],[7.69043,44.19796],[7.42676,44.15068],[6.9873,44.26094],[6.85547,44.55916],[7.03125,44.73113],[7.00928,44.87144],[6.72363,44.91814],[6.5918,45.12005],[7.09717,45.25942],[7.14111,45.41388],[6.96533,45.61404],[6.76758,45.79817],[7.03125,45.9053],[7.55859,45.9817],[7.77832,45.93587],[8.12988,46.13417],[8.08594,46.30141],[8.48145,46.46813],[8.61328,46.13417],[8.81104,46.10371],[9.05273,45.8288],[9.07471,46.11894],[9.27246,46.25585],[9.25049,46.43786],[9.44824,46.49839],[9.49219,46.31658],[9.68994,46.31658],[9.95361,46.36209],[10.06348,46.17983],[10.17334,46.25585],[10.0415,46.453],[10.08545,46.60417],[10.26123,46.66452],[10.45898,46.49839],[10.50293,46.61926],[10.39307,46.70974],[10.41504,46.86019],[10.61279,46.87521],[11.03027,46.76997],[11.16211,46.93526],[11.27197,46.99524],[11.53564,47.01023],[11.7334,46.99524],[12.2168,47.10004],[12.15088,46.93526],[12.43652,46.70974],[12.96387,46.61926],[13.73291,46.54375],[13.71094,46.42271],[13.40332,46.33176],[13.40332,46.22545],[13.66699,46.17983],[13.51318,46.05799],[13.64502,45.96642],[13.5791,45.85941],[13.93066,45.64477],[13.82629,45.5756],[13.6,45.6294],[12.9,45.4],[12.8,45],[18.9,40.3],[18.5,39],[15,36],[11,38],[9.6,43.2],[7.6,43.5]]]}},IT_Lazio:{type:"Feature",id:"IT_Lazio",properties:{},geometry:{type:"Polygon",coordinates:[[[13.23814,42.1301],[13.19363,42.15923],[13.17062,42.15169],[13.12434,42.17797],[13.08798,42.17886],[13.08575,42.14318],[13.0317,42.12309],[13.01946,42.07634],[13.05545,42.01736],[13.10194,42.00898],[13.10589,42.02698],[13.36437,41.92475],[13.384,41.90419],[13.35751,41.8694],[13.38052,41.81709],[13.4169,41.83467],[13.50508,41.8016],[13.52044,41.77297],[13.57182,41.7543],[13.66214,41.81144],[13.70555,41.78747],[13.72956,41.7989],[13.7629,41.7488],[13.81162,41.75426],[13.85645,41.73124],[13.89541,41.73405],[13.98311,41.66238],[14.01182,41.60835],[13.99895,41.57448],[14.02596,41.55567],[14.00526,41.53875],[14.0275,41.52321],[13.97291,41.49404],[13.99278,41.48208],[13.9779,41.46249],[13.90257,41.42273],[13.86123,41.41763],[13.8886,41.40081],[13.8688,41.36272],[13.88974,41.29748],[13.82898,41.28154],[13.83083,41.2502],[13.77126,41.24136],[13.45667,40.77769],[11.52381,41.03693],[11.44922,42.37798],[11.48889,42.43937],[11.61771,42.43604],[11.61626,42.48862],[11.56011,42.51595],[11.58852,42.54226],[11.57917,42.56803],[11.61401,42.55723],[11.64337,42.56635],[11.71111,42.61091],[11.73597,42.60666],[11.74975,42.63965],[11.80478,42.644],[11.77554,42.70951],[11.80156,42.70719],[11.81949,42.74543],[11.74602,42.78576],[11.77424,42.82107],[11.80685,42.79485],[11.8137,42.82267],[11.84851,42.84008],[11.90558,42.8325],[11.92743,42.78092],[11.97948,42.76459],[11.96293,42.72669],[11.9301,42.71295],[11.94133,42.6833],[12.03,42.64324],[12.10666,42.66464],[12.12406,42.64929],[12.16101,42.67691],[12.20434,42.66046],[12.24292,42.62906],[12.22819,42.61077],[12.24626,42.60256],[12.23866,42.57218],[12.27504,42.55991],[12.26676,42.53347],[12.29027,42.51904],[12.27477,42.50921],[12.30735,42.4973],[12.29041,42.49164],[12.32537,42.49476],[12.35123,42.47365],[12.39017,42.49819],[12.41905,42.49765],[12.41244,42.46756],[12.43038,42.45802],[12.41368,42.45517],[12.41365,42.4256],[12.4636,42.42909],[12.44469,42.39882],[12.51169,42.40311],[12.52874,42.36445],[12.60642,42.40245],[12.61481,42.46511],[12.64109,42.4678],[12.6495,42.44331],[12.67465,42.44242],[12.74156,42.47053],[12.71114,42.50079],[12.89273,42.5635],[12.88052,42.60935],[13.00524,42.61622],[13.02522,42.64],[13.06423,42.62427],[13.13,42.66053],[13.14645,42.64714],[13.17506,42.66707],[13.19025,42.73363],[13.25415,42.72145],[13.2645,42.74019],[13.28589,42.74049],[13.35851,42.69533],[13.35059,42.66968],[13.37022,42.6507],[13.4092,42.64383],[13.39493,42.59223],[13.29421,42.5705],[13.28454,42.58349],[13.24686,42.57367],[13.19228,42.58849],[13.15673,42.54102],[13.17934,42.48031],[13.11708,42.44489],[13.19508,42.39017],[13.15427,42.35797],[13.22737,42.32031],[13.23563,42.27871],[13.28229,42.23874],[13.33653,42.22338],[13.34238,42.19939],[13.3808,42.18142],[13.34871,42.17689],[13.35488,42.16769],[13.32819,42.16483],[13.30621,42.13923],[13.23814,42.1301]]]}},IT_Roma_Capitale:{type:"Feature",id:"IT_Roma_Capitale",properties:{},geometry:{type:"Polygon",coordinates:[[[11.6,42.16],[12.28,42.2],[12.52,42.31],[13.27,41.92],[13.15,41.58],[12.6,41.16],[11.6,42.16]]]}},south_tyrol:{type:"Feature",id:"south_tyrol",properties:{},geometry:{type:"Polygon",coordinates:[[[10.45624,46.86582],[10.73639,46.89211],[10.82977,46.80946],[10.96161,46.81322],[11.1319,46.99149],[11.49067,47.01233],[11.68121,47.04018],[11.7691,47.01023],[12.16736,47.115],[12.28546,47.08322],[12.18384,46.98213],[12.30469,46.85831],[12.37335,46.73421],[12.49969,46.67017],[12.34039,46.61737],[12.08771,46.64944],[12.0163,46.52297],[11.8515,46.49272],[11.66336,46.48657],[11.56929,46.34077],[11.399,46.25585],[11.18958,46.21072],[11.13739,46.2867],[11.20193,46.44732],[10.91904,46.42603],[10.61966,46.43833],[10.44113,46.49036],[10.36766,46.68854],[10.45624,46.86582]]]}},trentino:{type:"Feature",id:"trentino",properties:{},geometry:{type:"Polygon",coordinates:[[[10.49332,46.35641],[10.59219,46.46624],[10.76317,46.49697],[10.84076,46.45536],[11.07971,46.54469],[11.23627,46.50123],[11.21086,46.32559],[11.1779,46.27341],[11.23352,46.2473],[11.32416,46.30235],[11.5583,46.40378],[11.62628,46.5069],[11.83502,46.54233],[11.91399,46.44306],[11.85356,46.34124],[11.99158,46.18363],[11.84464,46.08466],[11.72791,46.07704],[11.69907,45.95592],[11.51093,45.97979],[11.28845,45.8814],[11.21567,45.76273],[11.16074,45.68316],[10.90256,45.66013],[10.82016,45.71097],[10.84076,45.81827],[10.51529,45.76752],[10.41504,46.00269],[10.51941,46.2112],[10.49332,46.35641]]]}},kosovo:{type:"Feature",id:"kosovo",properties:{},geometry:{type:"Polygon",coordinates:[[[20.68323,41.85101],[20.64878,41.8621],[20.62895,41.87788],[20.59321,41.87344],[20.5834,41.88906],[20.57131,41.92032],[20.61548,41.94279],[20.61932,41.97284],[20.60727,41.98358],[20.58959,42.03994],[20.56682,42.05515],[20.55,42.08081],[20.5618,42.12415],[20.51171,42.21912],[20.4557,42.26696],[20.40232,42.28017],[20.39286,42.29328],[20.35016,42.30573],[20.34327,42.32034],[20.32919,42.32272],[20.30564,42.30975],[20.28975,42.31841],[20.25651,42.31381],[20.23897,42.32339],[20.24172,42.33451],[20.23137,42.34709],[20.24041,42.36756],[20.20299,42.40034],[20.2216,42.42031],[20.18897,42.44976],[20.18995,42.46123],[20.16241,42.50248],[20.09905,42.52756],[20.07781,42.55062],[20.05218,42.55643],[20.0611,42.56636],[20.07983,42.63561],[20.09833,42.65387],[20.02597,42.70293],[20.01357,42.73718],[20.0294,42.76543],[20.05828,42.77918],[20.17177,42.77208],[20.25749,42.77015],[20.26633,42.81006],[20.26709,42.81838],[20.40458,42.85177],[20.48421,42.87209],[20.52629,42.8857],[20.48117,42.92979],[20.48712,42.94371],[20.52036,42.97599],[20.538,42.97944],[20.54736,42.96696],[20.56759,43.00047],[20.59714,43.01791],[20.61815,43.00738],[20.63582,43.01263],[20.65529,43.03791],[20.66666,43.05941],[20.65555,43.06668],[20.65535,43.07614],[20.69024,43.09046],[20.68474,43.11734],[20.6571,43.13426],[20.60822,43.17079],[20.59313,43.19966],[20.59288,43.20807],[20.60326,43.21586],[20.61577,43.20947],[20.6759,43.21404],[20.71781,43.23861],[20.72976,43.25396],[20.78861,43.2509],[20.79902,43.26973],[20.82402,43.27416],[20.88056,43.23237],[20.89633,43.2064],[20.89185,43.19741],[20.86038,43.18418],[20.88322,43.17221],[20.968,43.12786],[20.97317,43.13725],[21.00171,43.14304],[21.02916,43.13467],[21.05505,43.11374],[21.0768,43.12108],[21.0795,43.1332],[21.09221,43.14057],[21.11813,43.11808],[21.14314,43.11815],[21.15722,43.09497],[21.14943,43.08237],[21.15915,43.04152],[21.17346,43.02927],[21.17228,43.01229],[21.18865,43.01181],[21.19528,43.02655],[21.20838,43.03051],[21.24098,43.01253],[21.25156,42.98139],[21.24127,42.95446],[21.27793,42.90132],[21.30679,42.91192],[21.33168,42.90934],[21.34717,42.90549],[21.36699,42.87815],[21.44,42.87777],[21.44185,42.85103],[21.43,42.84464],[21.42818,42.80712],[21.41748,42.77388],[21.39541,42.75691],[21.39835,42.75158],[21.45096,42.75723],[21.46671,42.74511],[21.48212,42.7524],[21.53015,42.73143],[21.56111,42.74322],[21.59623,42.731],[21.59439,42.7097],[21.67045,42.68104],[21.68037,42.6972],[21.73393,42.71782],[21.7767,42.72243],[21.77888,42.69807],[21.80449,42.65599],[21.77972,42.64209],[21.77173,42.62838],[21.77008,42.60166],[21.75125,42.58434],[21.75095,42.55505],[21.72961,42.54235],[21.70728,42.54294],[21.70222,42.53272],[21.71414,42.51308],[21.69423,42.49888],[21.67446,42.49033],[21.67458,42.48071],[21.62857,42.45056],[21.65142,42.40951],[21.62852,42.37199],[21.57112,42.35813],[21.5391,42.36425],[21.53133,42.33801],[21.56671,42.3189],[21.59596,42.27006],[21.58272,42.25167],[21.52186,42.23975],[21.50594,42.2651],[21.44573,42.27489],[21.43843,42.25552],[21.44638,42.23142],[21.43208,42.22775],[21.39412,42.24212],[21.3493,42.20076],[21.33667,42.1989],[21.33915,42.18753],[21.30895,42.13871],[21.32219,42.10706],[21.30296,42.10363],[21.29279,42.10824],[21.25722,42.08817],[21.23557,42.08617],[21.21595,42.09461],[21.20791,42.12657],[21.16719,42.1714],[21.16274,42.19266],[21.11303,42.20093],[21.05269,42.16308],[21.02143,42.14681],[20.92263,42.12229],[20.89259,42.09216],[20.83556,42.08285],[20.79199,42.07669],[20.76879,42.04106],[20.77208,41.95756],[20.77892,41.91873],[20.74544,41.8779],[20.68323,41.85101]]]}},norway:{type:"Feature",id:"norway",properties:{},geometry:{type:"Polygon",coordinates:[[[25.98816,69.6179],[25.24109,68.60752],[20.42908,68.97318],[16.9519,67.9499],[13.77686,64.59561],[14.28223,64.47279],[14.08447,63.99524],[13.02979,64.10101],[12.00806,63.2633],[12.14813,61.6586],[12.87323,61.31245],[12.67548,61.0636],[12.26074,61.00241],[12.60681,60.50593],[12.49146,60.08128],[12.17285,59.88756],[11.87622,59.84895],[11.94214,59.69547],[11.6922,59.58998],[11.84601,59.25044],[11.64276,58.89471],[11.45325,58.88194],[11.44775,59.00168],[11.34888,59.11254],[11.18134,59.08009],[11.06186,58.97054],[8,57.5],[3,57.5],[3,83],[40,83],[35,71],[29.61365,69.28629],[27.98767,69.99711],[25.98816,69.6179]]]}},poland:{type:"Feature",id:"poland",properties:{},geometry:{type:"Polygon",coordinates:[[[14.03,52.84],[14.34,53.26],[14.13,54.16],[15.95,54.52],[16.31,54.76],[17.13,54.97],[18.29,55.08],[18.9,54.98],[19.69,54.5],[21.47,54.37],[22.9,54.46],[23.39,54.3],[24.01,53.17],[24.03,52.71],[23.29,52.3],[23.74,52.09],[23.64,51.61],[24.24,50.86],[24.11,50.41],[23.78,50.34],[22.77,49.55],[22.96,48.97],[22.18,49.1],[21.6,49.38],[20.93,49.24],[20.47,49.34],[20.12,49.13],[19.76,49.14],[19.45,49.51],[18.94,49.34],[18.48,49.85],[17.83,49.92],[17.54,50.21],[17.06,50.35],[17.08,50.18],[16.65,50.05],[16.11,50.41],[16.3,50.6],[16.01,50.54],[15.34,50.73],[15.14,50.93],[14.78,50.82],[14.94,51.27],[14.5,51.81],[14.66,52.05],[14.53,52.57],[14.03,52.84]]]}},slovenia:{type:"Feature",id:"slovenia",properties:{},geometry:{type:"Polygon",coordinates:[[[15.17101,45.41273],[15.06731,45.4781],[14.98353,45.48726],[14.93027,45.51869],[14.91295,45.46869],[14.81398,45.45019],[14.77755,45.49724],[14.71885,45.52386],[14.68383,45.51924],[14.68367,45.57107],[14.58902,45.61966],[14.59477,45.65727],[14.51653,45.5974],[14.49636,45.52968],[14.32388,45.46048],[14.28251,45.47949],[14.26083,45.47352],[14.2367,45.49569],[14.21022,45.45962],[14.1328,45.46542],[14.06694,45.47615],[14.01187,45.50769],[13.98752,45.49945],[14.00668,45.4739],[13.99154,45.44854],[13.91789,45.44329],[13.88867,45.416],[13.81063,45.42531],[13.7856,45.45577],[13.67553,45.43241],[13.37688,45.56647],[13.63953,45.6426],[13.72158,45.60472],[13.83759,45.59226],[13.89962,45.63295],[13.82754,45.67917],[13.82429,45.70266],[13.78961,45.73525],[13.66355,45.79008],[13.62279,45.78613],[13.58835,45.80154],[13.56531,45.85522],[13.62633,45.93894],[13.62975,45.97662],[13.59233,45.97929],[13.57124,45.9591],[13.52998,45.95627],[13.46729,46.00147],[13.49765,46.03741],[13.4896,46.06574],[13.58839,46.11268],[13.63712,46.14524],[13.65358,46.17505],[13.57147,46.17434],[13.54859,46.19982],[13.48189,46.21479],[13.42003,46.19662],[13.40026,46.21037],[13.40304,46.23284],[13.36653,46.30266],[13.43369,46.33243],[13.43247,46.36779],[13.56263,46.40895],[13.59357,46.44846],[13.68393,46.44947],[13.71321,46.53296],[13.79725,46.5164],[13.91305,46.53108],[14.00849,46.49169],[14.09406,46.49538],[14.12664,46.4852],[14.16569,46.44341],[14.28242,46.45347],[14.3259,46.44111],[14.43178,46.4568],[14.45113,46.43239],[14.52618,46.43623],[14.56677,46.38549],[14.58993,46.44479],[14.65658,46.45447],[14.71191,46.50954],[14.80818,46.51778],[14.81442,46.55093],[14.86094,46.61239],[14.9102,46.61569],[14.95398,46.64257],[14.98376,46.61868],[15.02973,46.65796],[15.10645,46.66965],[15.23727,46.64973],[15.41364,46.66553],[15.46237,46.64732],[15.47411,46.6226],[15.53427,46.64346],[15.53636,46.6761],[15.59201,46.69952],[15.62405,46.69039],[15.65624,46.71643],[15.767,46.70899],[15.83801,46.73237],[15.91476,46.71958],[16.02919,46.67033],[16.02955,46.68778],[15.99495,46.71178],[15.97505,46.74967],[15.98671,46.84189],[16.0553,46.85049],[16.11022,46.87912],[16.15425,46.86525],[16.23302,46.88667],[16.29431,46.8824],[16.34649,46.85476],[16.36058,46.8278],[16.34711,46.79707],[16.32245,46.79068],[16.33977,46.7799],[16.33186,46.75896],[16.38893,46.70785],[16.4383,46.69655],[16.42822,46.65301],[16.40159,46.6439],[16.51477,46.57299],[16.54136,46.53627],[16.5416,46.50887],[16.611,46.48393],[16.61889,46.46203],[16.52219,46.45842],[16.47451,46.50108],[16.36776,46.53371],[16.2582,46.489],[16.28533,46.42441],[16.3168,46.40141],[16.30574,46.36921],[16.18689,46.36804],[16.14548,46.39515],[16.06959,46.38154],[16.08614,46.34087],[16.04058,46.32708],[16.01819,46.29964],[15.80777,46.25091],[15.79649,46.21296],[15.77128,46.19937],[15.67996,46.21707],[15.65737,46.20838],[15.65639,46.18456],[15.62037,46.16163],[15.61899,46.11595],[15.63483,46.09529],[15.71869,46.06873],[15.74241,46.04578],[15.71612,45.99489],[15.71645,45.9178],[15.69237,45.90013],[15.69375,45.87111],[15.71776,45.8416],[15.6441,45.81058],[15.57467,45.83999],[15.52333,45.81155],[15.49115,45.82041],[15.47514,45.78666],[15.40343,45.78216],[15.28683,45.73391],[15.27435,45.72408],[15.29763,45.70782],[15.36329,45.72191],[15.41517,45.65443],[15.39705,45.62929],[15.31501,45.62356],[15.31503,45.60696],[15.29266,45.60163],[15.30852,45.58653],[15.31145,45.5423],[15.39496,45.48325],[15.34824,45.44665],[15.27515,45.45599],[15.22848,45.41683],[15.17101,45.41273]]]}},spain:{type:"Feature",id:"spain",properties:{},geometry:{type:"MultiPolygon",coordinates:[[[[-19,29],[-13,30],[-13,29],[-14,27.8],[-19,27],[-19,29]]],[[[-8.89106,41.82289],[-10,44],[-4,44],[-1.77005,43.37605],[-1.71005,43.37569],[-1.71135,43.33125],[-1.72259,43.31318],[-1.68904,43.31291],[-1.68811,43.33413],[-1.64467,43.33372],[-1.64498,43.31332],[-1.60299,43.31295],[-1.60344,43.29266],[-1.56359,43.29212],[-1.56305,43.31338],[-1.47799,43.31284],[-1.36677,43.27614],[-1.35688,43.23815],[-1.37037,43.1713],[-1.44231,43.08336],[-1.41983,43.06036],[-1.37307,43.05117],[-1.36407,43.11159],[-1.30203,43.13522],[-1.23549,43.13325],[-1.27955,43.07744],[-1.19232,43.06496],[-1.00619,43.00778],[-0.94234,42.9749],[-0.7562,42.98213],[-0.71484,42.96108],[-0.69685,42.90314],[-0.55118,42.82207],[-0.50442,42.84845],[-0.42889,42.82009],[-0.31648,42.86558],[-0.14563,42.81086],[-0.03143,42.71249],[0.18618,42.7541],[0.30218,42.71777],[0.36422,42.74287],[0.44875,42.71447],[0.62769,42.7224],[0.64118,42.85767],[0.71492,42.88272],[0.9676,42.81811],[1.10878,42.79898],[1.17532,42.73429],[1.36326,42.74155],[1.41137,42.70939],[1.48061,42.71034],[1.4813,42.50107],[1.64436,42.50203],[1.64328,42.54245],[1.73041,42.54342],[1.73164,42.50118],[2.06386,42.50164],[2.06456,42.45902],[2.39693,42.45994],[2.39768,42.41784],[2.48048,42.41797],[2.48098,42.37594],[2.64479,42.37626],[2.64448,42.45924],[2.81133,42.45961],[2.81126,42.50104],[3.06388,42.50085],[3.06388,42.45915],[3.23078,42.45934],[5,40],[4,39],[-2.2,36.5],[-5.6,35.95],[-6,36],[-7.37535,37.15354],[-7.40832,37.16822],[-7.4481,37.39094],[-7.46963,37.40758],[-7.4647,37.45305],[-7.50197,37.51641],[-7.51916,37.52292],[-7.52196,37.57237],[-7.45013,37.66958],[-7.4249,37.75992],[-7.31666,37.83997],[-7.26833,37.98895],[-7.15368,38.01552],[-7.11771,38.05536],[-7.0143,38.02438],[-6.99632,38.10756],[-6.96147,38.20125],[-7.08062,38.15708],[-7.34027,38.44024],[-7.26383,38.73807],[-7.04352,38.87297],[-7.06151,38.90796],[-6.96934,39.01983],[-7.00081,39.08879],[-7.15368,39.09577],[-7.15255,39.16029],[-7.24472,39.19689],[-7.25596,39.28133],[-7.33689,39.35351],[-7.3279,39.45599],[-7.51449,39.58865],[-7.55271,39.67954],[-7.05027,39.67522],[-6.99519,39.81954],[-6.92213,39.87909],[-6.88616,40.02299],[-7.04128,40.13479],[-7.01767,40.26615],[-6.8086,40.34501],[-6.86818,40.44516],[-6.85356,40.60664],[-6.83783,40.87576],[-6.9536,41.03704],[-6.80186,41.03959],[-6.76814,41.13871],[-6.64112,41.26556],[-6.56244,41.26303],[-6.21737,41.5791],[-6.31628,41.64465],[-6.51523,41.64129],[-6.58717,41.68832],[-6.54783,41.85597],[-6.62988,41.91121],[-7.13345,41.94048],[-7.16829,41.87188],[-7.42569,41.78477],[-7.95398,41.84593],[-8.13045,41.78058],[-8.25185,41.90786],[-8.12933,42.03488],[-8.24848,42.1008],[-8.36762,42.05575],[-8.60704,42.03405],[-8.89106,41.82289]]]]}},sweden:{type:"Feature",id:"sweden",properties:{},geometry:{type:"Polygon",coordinates:[[[10.57159,58.2445],[10.63202,58.9245],[11.35712,59.12804],[11.53839,58.91174],[11.62079,58.92308],[11.75812,59.24341],[11.65649,59.61777],[11.85974,59.7121],[11.82129,59.84481],[11.95862,59.91098],[12.15363,59.91235],[12.44476,60.0895],[12.48322,60.32151],[12.56012,60.50458],[12.36511,60.71217],[12.19482,61.01572],[12.64801,61.09415],[12.82928,61.34276],[12.55463,61.55018],[12.42828,61.54495],[12.12341,61.71331],[12.28546,62.26664],[12.03278,62.60851],[12.10968,62.74718],[12.06024,62.89772],[12.18658,62.99765],[11.95587,63.28183],[12.18109,63.47873],[12.1344,63.59012],[12.659,63.9856],[12.90619,64.0722],[13.20831,64.10461],[13.9801,64.03014],[14.06525,64.46214],[13.60382,64.56968],[14.26025,65.11608],[14.31519,65.23831],[14.45251,65.31412],[14.47998,65.62656],[14.57886,65.80953],[14.49097,66.15163],[14.99634,66.17161],[15.4248,66.29337],[15.33691,66.51107],[16.04004,66.93221],[16.37512,67.06743],[16.35864,67.21467],[16.06201,67.42015],[16.1499,67.52957],[16.37512,67.55266],[16.70471,67.91688],[17.25952,68.13067],[17.88025,67.99523],[18.09448,68.19809],[18.06702,68.54432],[18.39661,68.58848],[19.00085,68.52019],[19.89075,68.39109],[20.13245,68.48798],[19.89075,68.55637],[20.28076,68.78613],[19.99512,69.06268],[20.62134,69.08033],[20.86853,69.03518],[21.24756,68.8437],[21.92322,68.60652],[22.90649,68.39514],[23.73596,67.96639],[23.5437,67.8362],[23.62061,67.47492],[23.79639,67.44544],[23.81287,67.26992],[23.63159,67.23806],[24.04358,66.82868],[23.91174,66.57448],[23.71399,66.31986],[24.22485,65.97333],[24.04358,65.64469],[21.00586,63.63894],[18.57239,61.83023],[19.18762,60.53297],[19.11346,60.18387],[19.66827,59.82687],[19.90173,58.07788],[18.78662,56.9869],[16.73218,56.05977],[15.0238,55.72711],[14.36462,55.31977],[13.1163,55.22276],[12.7002,55.30414],[12.82654,55.57834],[12.84851,55.72402],[12.79358,55.83214],[12.6123,56.0751],[12.49146,56.13331],[12.07947,56.30435],[11.35437,57.67185],[10.57159,58.2445]]]}},east_midlands_uk:{type:"Feature",id:"east_midlands_uk",properties:{},geometry:{type:"Polygon",coordinates:[[[0.03031,53.53488],[0.28564,53.56315],[0.48889,53.10722],[0.27299,52.82421],[0.24507,52.7845],[0.27219,52.77279],[0.18631,52.73533],[0.14206,52.7399],[0.08901,52.72361],[0.06361,52.72737],[0.04413,52.71436],[0.04883,52.68175],[0.02104,52.66476],[-0.03129,52.66151],[-0.06373,52.67521],[-0.08777,52.66676],[-0.10221,52.67218],[-0.14108,52.65149],[-0.18003,52.66054],[-0.19288,52.65242],[-0.20605,52.66805],[-0.26064,52.65139],[-0.28925,52.67025],[-0.335,52.67485],[-0.35023,52.66159],[-0.40569,52.64802],[-0.45065,52.65411],[-0.49897,52.63931],[-0.52006,52.64143],[-0.55014,52.61223],[-0.54419,52.59287],[-0.55813,52.59447],[-0.57192,52.58579],[-0.58149,52.59587],[-0.58865,52.58679],[-0.60303,52.58857],[-0.66093,52.56893],[-0.69783,52.5457],[-0.71564,52.52237],[-0.75723,52.51093],[-0.77488,52.51826],[-0.82013,52.51552],[-0.86871,52.52699],[-0.88346,52.51395],[-0.88214,52.49315],[-0.89806,52.4869],[-0.88241,52.47127],[-0.90065,52.45994],[-0.94219,52.46777],[-0.95192,52.47741],[-1.0007,52.47092],[-1.04452,52.44573],[-1.03429,52.43627],[-1.04987,52.42225],[-1.08439,52.43628],[-1.12928,52.41609],[-1.14947,52.39701],[-1.20141,52.39648],[-1.30715,52.49423],[-1.52226,52.57033],[-1.52716,52.58272],[-1.56075,52.59612],[-1.55447,52.61472],[-1.57139,52.6353],[-1.54714,52.64218],[-1.54245,52.65362],[-1.55281,52.66845],[-1.58965,52.68724],[-1.59082,52.69801],[-1.65505,52.69878],[-1.65662,52.72173],[-1.70372,52.7298],[-1.69687,52.75272],[-1.66654,52.78471],[-1.61113,52.78139],[-1.61435,52.78826],[-1.58887,52.79985],[-1.59183,52.80947],[-1.6105,52.81639],[-1.58536,52.8317],[-1.62672,52.85441],[-1.69028,52.86445],[-1.70061,52.86057],[-1.70435,52.86666],[-1.72527,52.85964],[-1.77712,52.88377],[-1.79092,52.88023],[-1.80186,52.88613],[-1.81171,52.88058],[-1.83295,52.8869],[-1.85422,52.93063],[-1.82982,52.94565],[-1.82678,52.97707],[-1.76257,52.99965],[-1.75775,53.01698],[-1.75978,53.03869],[-1.7847,53.04991],[-1.77566,53.05933],[-1.79424,53.08837],[-1.78373,53.10281],[-1.82144,53.13579],[-1.81254,53.15432],[-1.8393,53.1769],[-1.87403,53.19536],[-1.95671,53.21373],[-1.96237,53.22622],[-1.9896,53.21572],[-1.97486,53.23106],[-2.00948,53.26065],[-2.00679,53.35457],[-2.009,53.36201],[-2.03173,53.36573],[-2.03385,53.37517],[-2.00464,53.38633],[-1.99233,53.41519],[-2.02371,53.42055],[-2.02738,53.43233],[-2.01366,53.43988],[-2.00422,53.43592],[-2.00823,53.44155],[-1.98579,53.45523],[-1.98809,53.48033],[-1.97428,53.48838],[-1.97159,53.50434],[-1.92197,53.50995],[-1.92678,53.52095],[-1.91189,53.53803],[-1.89411,53.5336],[-1.87349,53.54041],[-1.84182,53.51989],[-1.82223,53.52108],[-1.80428,53.537],[-1.77188,53.53384],[-1.74155,53.54105],[-1.72318,53.55991],[-1.66945,53.5532],[-1.65103,53.56166],[-1.61581,53.56305],[-1.59636,53.57692],[-1.59109,53.60677],[-1.55023,53.60421],[-1.53078,53.59311],[-1.51867,53.5997],[-1.49656,53.59736],[-1.49512,53.60317],[-1.48371,53.59485],[-1.44763,53.61272],[-1.40036,53.59865],[-1.3767,53.60646],[-1.35612,53.59535],[-1.35143,53.58106],[-1.30782,53.57535],[-1.25803,53.59198],[-1.24825,53.61634],[-1.21778,53.62429],[-1.21602,53.642],[-1.1886,53.63583],[-1.15503,53.64319],[-1.13504,53.63254],[-1.12095,53.64688],[-0.99046,53.6612],[-0.94448,53.65868],[-0.86533,53.63769],[-0.89792,53.58325],[-0.90111,53.5687],[-0.89099,53.56654],[-0.90126,53.54788],[-0.89233,53.53738],[-0.94654,53.52732],[-0.95001,53.51363],[-0.93209,53.51065],[-0.93557,53.5025],[-0.90047,53.47513],[-0.92046,53.46446],[-0.87373,53.46146],[-0.87192,53.46629],[-0.79748,53.45504],[-0.78436,53.46336],[-0.78439,53.47665],[-0.77157,53.47918],[-0.76811,53.4989],[-0.75211,53.50051],[-0.73959,53.51991],[-0.62449,53.51282],[-0.62975,53.45819],[-0.55179,53.4595],[-0.47175,53.47485],[-0.48663,53.48045],[-0.48838,53.50484],[-0.40507,53.51759],[-0.40814,53.53208],[-0.43066,53.54631],[-0.50123,53.53744],[-0.46702,53.54894],[-0.429,53.5745],[-0.41967,53.56375],[-0.33594,53.5586],[-0.30342,53.59077],[-0.30093,53.61636],[-0.24847,53.59364],[-0.25139,53.58463],[-0.23466,53.58623],[-0.22255,53.56799],[-0.19169,53.56844],[-0.21988,53.53258],[-0.21059,53.53168],[-0.20408,53.51174],[-0.2106,53.48626],[-0.18856,53.48451],[-0.1818,53.46862],[-0.15368,53.46565],[-0.14923,53.44667],[-0.13188,53.43591],[-0.12034,53.43357],[-0.08221,53.45112],[-0.10786,53.46987],[-0.0898,53.47765],[-0.09548,53.48596],[-0.07526,53.48931],[-0.06493,53.51878],[-0.01452,53.51538],[0.03031,53.53488]]]}},"england-west-midlands":{type:"Feature",id:"england-west-midlands",properties:{},geometry:{type:"Polygon",coordinates:[[[-3.28493,52.44175],[-3.12706,52.96995],[-1.95817,53.27605],[-1.1222,52.36367],[-1.59859,51.90733],[-2.65611,51.7761],[-3.10848,51.95414],[-3.28493,52.44175]]]}},london_uk:{type:"Feature",id:"london_uk",properties:{},geometry:{type:"Polygon",coordinates:[[[0.23926,51.43251],[0.23923,51.43329],[0.23926,51.43251],[0.23717,51.4241],[0.205,51.39919],[0.18385,51.37628],[0.16188,51.36621],[0.15614,51.3539],[0.1603,51.31026],[0.14958,51.30173],[0.14213,51.29098],[0.06692,51.27361],[-0.01594,51.26864],[-0.05766,51.2586],[-0.10949,51.25943],[-0.16628,51.26848],[-0.19872,51.25854],[-0.22666,51.2587],[-0.27352,51.28757],[-0.31813,51.30077],[-0.33644,51.31532],[-0.40313,51.30581],[-0.44436,51.31987],[-0.47985,51.3302],[-0.50762,51.37142],[-0.53414,51.39494],[-0.54109,51.42774],[-0.53264,51.43923],[-0.5152,51.46248],[-0.49617,51.48894],[-0.50203,51.53945],[-0.5278,51.55474],[-0.53166,51.5611],[-0.53569,51.57289],[-0.53596,51.5778],[-0.53455,51.58275],[-0.53376,51.58792],[-0.51516,51.6337],[-0.49776,51.65205],[-0.4901,51.66912],[-0.45924,51.67692],[-0.44684,51.69442],[-0.42579,51.71213],[-0.39306,51.715],[-0.38079,51.71654],[-0.34459,51.70948],[-0.2838,51.71515],[-0.26707,51.71395],[-0.23509,51.69056],[-0.22093,51.68445],[-0.17729,51.68441],[-0.10644,51.69165],[-0.05899,51.68257],[0.02324,51.678],[0.0691,51.68854],[0.10856,51.68336],[0.19863,51.65015],[0.25714,51.61353],[0.28187,51.57813],[0.29039,51.55903],[0.26811,51.50265],[0.26882,51.49783],[0.26782,51.49042],[0.2659,51.47443],[0.25509,51.46053],[0.23586,51.44791],[0.23926,51.43251]]]}},united_kingdom:{type:"Feature",id:"united_kingdom",properties:{name:"United Kingdom",source:"OpenStreetMap"},geometry:{type:"Polygon",coordinates:[[[-7.24863,55.06999],[-6.96705,55.19847],[-6.59182,55.36664],[-9.93166,58.01975],[0.32957,61.43878],[2.43894,51.64531],[0.72508,50.42953],[-7.66848,49.03788],[-5.93264,51.46771],[-5.4053,53.54032],[-6.07527,54.0096],[-6.28173,54.11135],[-6.309,54.10669],[-6.31788,54.09098],[-6.33629,54.09472],[-6.33993,54.11189],[-6.3662,54.11374],[-6.36237,54.0766],[-6.37492,54.06914],[-6.37907,54.06909],[-6.37911,54.06907],[-6.37918,54.06902],[-6.39105,54.05885],[-6.41198,54.06306],[-6.44345,54.05649],[-6.45607,54.07252],[-6.47779,54.07709],[-6.4713,54.0663],[-6.51051,54.05268],[-6.53187,54.05968],[-6.55772,54.04917],[-6.58643,54.05757],[-6.59499,54.04462],[-6.62381,54.03646],[-6.66426,54.06917],[-6.66202,54.09283],[-6.64506,54.096],[-6.66127,54.12266],[-6.64886,54.12138],[-6.63961,54.13187],[-6.63436,54.16317],[-6.66539,54.19316],[-6.70601,54.20005],[-6.72106,54.18197],[-6.74076,54.18192],[-6.75617,54.19926],[-6.77562,54.19895],[-6.80097,54.21317],[-6.80042,54.2211],[-6.81617,54.22302],[-6.82774,54.26149],[-6.87804,54.27924],[-6.87229,54.28794],[-6.859,54.28191],[-6.85087,54.29728],[-6.87594,54.34641],[-6.90626,54.3503],[-6.91129,54.37474],[-6.93074,54.37575],[-6.9237,54.38284],[-6.95963,54.39221],[-6.98165,54.40946],[-6.99601,54.40538],[-7.0291,54.42137],[-7.05724,54.41108],[-7.07234,54.38839],[-7.10979,54.36824],[-7.10388,54.35574],[-7.15344,54.33501],[-7.18882,54.33765],[-7.17974,54.32046],[-7.17949,54.30924],[-7.19789,54.31106],[-7.21219,54.29962],[-7.17302,54.28613],[-7.17937,54.2726],[-7.16092,54.27371],[-7.14225,54.25559],[-7.15893,54.24396],[-7.14594,54.23957],[-7.14503,54.22473],[-7.17104,54.2176],[-7.18808,54.22492],[-7.1986,54.21578],[-7.22085,54.21581],[-7.23182,54.20557],[-7.24806,54.20446],[-7.24915,54.19817],[-7.233,54.19784],[-7.25942,54.19225],[-7.25828,54.17737],[-7.24028,54.1697],[-7.25812,54.16451],[-7.26296,54.13741],[-7.29195,54.11911],[-7.30891,54.13211],[-7.28551,54.13626],[-7.30149,54.14421],[-7.28379,54.15386],[-7.27997,54.16797],[-7.2913,54.17196],[-7.33956,54.14672],[-7.30533,54.12336],[-7.31867,54.11329],[-7.32713,54.12458],[-7.34602,54.11645],[-7.3632,54.1316],[-7.39181,54.12013],[-7.37279,54.13963],[-7.42078,54.13705],[-7.40959,54.15646],[-7.44192,54.15409],[-7.46841,54.14081],[-7.47919,54.12227],[-7.5281,54.13574],[-7.54738,54.12214],[-7.56576,54.12659],[-7.57454,54.14151],[-7.61043,54.14378],[-7.62966,54.1703],[-7.66425,54.18797],[-7.67659,54.18196],[-7.68829,54.20197],[-7.68543,54.20776],[-7.7394,54.20353],[-7.74858,54.20942],[-7.80368,54.20707],[-7.81173,54.20073],[-7.86017,54.21728],[-7.86046,54.26026],[-7.87322,54.27945],[-7.86187,54.29343],[-7.88087,54.29188],[-7.9017,54.30143],[-7.91095,54.29595],[-7.9616,54.31247],[-8.00093,54.35846],[-8.03129,54.35671],[-8.05733,54.36572],[-8.08416,54.39741],[-8.16026,54.44028],[-8.14291,54.45092],[-8.17751,54.46476],[-8.11467,54.46903],[-8.11324,54.4764],[-8.09148,54.47653],[-8.09868,54.48433],[-8.08933,54.48708],[-8.04265,54.48763],[-8.04185,54.50638],[-8.00601,54.54594],[-7.9703,54.54705],[-7.94973,54.53363],[-7.85055,54.53313],[-7.82402,54.54427],[-7.83325,54.55223],[-7.79659,54.57163],[-7.79341,54.58188],[-7.76212,54.58588],[-7.75151,54.59878],[-7.69725,54.61007],[-7.70877,54.63495],[-7.74165,54.61797],[-7.75797,54.62503],[-7.77236,54.62149],[-7.81366,54.64411],[-7.82828,54.63305],[-7.85213,54.63078],[-7.85669,54.65057],[-7.89164,54.65594],[-7.9099,54.66828],[-7.91381,54.67596],[-7.89766,54.68701],[-7.92089,54.69596],[-7.91804,54.70282],[-7.8796,54.70269],[-7.83665,54.73642],[-7.81761,54.73378],[-7.8047,54.7186],[-7.78875,54.71964],[-7.75006,54.70428],[-7.73551,54.71683],[-7.7116,54.72611],[-7.69723,54.72356],[-7.63657,54.75151],[-7.60944,54.74415],[-7.59117,54.74438],[-7.57919,54.75047],[-7.57865,54.74191],[-7.5698,54.74384],[-7.54826,54.74101],[-7.53859,54.751],[-7.54804,54.75711],[-7.54795,54.78835],[-7.52847,54.80757],[-7.47096,54.8348],[-7.44188,54.87561],[-7.45258,54.89849],[-7.44727,54.93524],[-7.39202,54.94545],[-7.4072,54.95521],[-7.4027,54.96689],[-7.40705,54.98294],[-7.39135,54.99774],[-7.40558,55.00332],[-7.37023,55.03476],[-7.34516,55.05083],[-7.31828,55.04507],[-7.29947,55.0561],[-7.28944,55.04771],[-7.27251,55.06357],[-7.24863,55.06999]]]}},canada_full:{type:"Feature",id:"canada_full",properties:{},geometry:{type:"Polygon",coordinates:[[[-140.99854,69.64945],[-120.9375,78.7335],[-91.05469,82.7432],[-75.58594,83.40004],[-63.45703,83.15311],[-59.32617,82.37915],[-63.76465,81.42049],[-67.19238,80.79583],[-73.21289,78.85307],[-74.9707,76.33114],[-61.34766,70.75797],[-50.1416,46.67959],[-65.98389,42.85181],[-66.95892,44.48769],[-66.9397,44.81692],[-67.13745,45.15493],[-67.26379,45.18591],[-67.31873,45.1278],[-67.43958,45.21881],[-67.44507,45.58329],[-67.79114,45.67164],[-67.78015,47.07012],[-68.19763,47.35743],[-68.39539,47.35743],[-68.37891,47.29413],[-68.90625,47.17478],[-69.06006,47.23449],[-69.08203,47.43552],[-69.22485,47.46524],[-70.00488,46.70974],[-70.05981,46.41514],[-70.18066,46.36209],[-70.3125,46.21025],[-70.24658,46.14178],[-70.3125,45.97406],[-70.26855,45.91294],[-70.42236,45.80583],[-70.42236,45.72152],[-70.71899,45.49865],[-70.62012,45.38302],[-70.80688,45.4293],[-70.85083,45.22848],[-71.00464,45.3367],[-71.1145,45.25169],[-71.26831,45.29035],[-71.41113,45.24395],[-71.5155,45.0153],[-74.81689,45.0153],[-75.31128,44.84808],[-75.7782,44.51218],[-75.82214,44.4377],[-76.43188,44.09942],[-76.79993,43.63011],[-78.68683,43.63806],[-79.19495,43.45292],[-79.07204,43.26521],[-79.05693,43.25671],[-79.04594,43.13807],[-79.06998,43.12103],[-79.06311,43.11652],[-79.05693,43.10951],[-79.07616,43.08393],[-79.07684,43.07691],[-79.01505,43.06839],[-78.99719,43.05785],[-79.02672,43.02071],[-79.01779,42.98456],[-78.98003,42.97099],[-78.96423,42.95843],[-78.93402,42.95542],[-78.91136,42.93883],[-78.90518,42.90011],[-78.93127,42.82361],[-80.07935,42.38289],[-81.27686,42.20818],[-82.39197,41.68112],[-82.68311,41.67701],[-83.07861,41.86547],[-83.15552,42.03909],[-83.12531,42.12064],[-83.13904,42.23462],[-83.07587,42.31185],[-82.98523,42.33418],[-82.81219,42.37478],[-82.63916,42.56117],[-82.59521,42.54903],[-82.52655,42.61375],[-82.41669,43.00063],[-82.13379,43.59631],[-82.51831,45.34442],[-83.59772,45.82114],[-83.43567,45.99696],[-83.57162,46.10847],[-83.65402,46.12275],[-83.76663,46.10466],[-83.82843,46.11989],[-83.89984,46.06084],[-83.95615,46.05989],[-83.974,46.1018],[-84.00833,46.11609],[-84.00696,46.14559],[-84.07974,46.18934],[-84.10995,46.24065],[-84.0976,46.25585],[-84.11545,46.26724],[-84.12094,46.31564],[-84.10309,46.32038],[-84.13467,46.36115],[-84.14841,46.42082],[-84.10995,46.50359],[-84.12781,46.531],[-84.14085,46.53241],[-84.17313,46.52722],[-84.19373,46.54092],[-84.226,46.53525],[-84.26582,46.49603],[-84.2926,46.49225],[-84.34135,46.50595],[-84.37225,46.50879],[-84.44023,46.49036],[-84.47662,46.45489],[-84.55353,46.45867],[-84.76776,46.62492],[-84.84741,46.88272],[-88.38501,48.31243],[-89.32983,47.96786],[-93.21899,48.64743],[-93.80127,48.5166],[-93.83423,48.63291],[-94.6637,48.75257],[-94.8175,49.32691],[-95.15259,49.38595],[-95.15533,49.00184],[-123.31879,49.00004],[-122.99469,48.7761],[-123.2666,48.69096],[-123.11279,48.37815],[-123.44238,48.22467],[-124.7168,48.49477],[-128.49609,48.74895],[-131.2207,53.61858],[-130.75928,54.73731],[-129.99023,55.27912],[-130.07813,56.10881],[-131.74805,56.63206],[-135.53833,59.80063],[-137.47192,58.90465],[-138.67493,59.78958],[-138.6969,59.90822],[-139.20227,60.09772],[-139.08142,60.35141],[-139.71863,60.33239],[-139.98779,60.18523],[-140.46021,60.30791],[-140.52063,60.22618],[-141.01501,60.30519],[-140.99854,69.64945]]]}},ottawa_gatineau:{type:"Feature",id:"ottawa_gatineau",properties:{},geometry:{type:"Polygon",coordinates:[[[-76.23413,45.50827],[-76.12839,45.55829],[-75.26184,45.58041],[-75.13412,45.39652],[-75.42938,45.32512],[-75.35385,45.17816],[-75.82489,44.93564],[-76.34537,45.36855],[-76.23413,45.50827]]]}},vancouver_metro:{type:"Feature",id:"vancouver_metro",properties:{},geometry:{type:"Polygon",coordinates:[[[-123.32,49],[-123.45,49.38],[-123.26,49.47],[-122.24,49.27],[-122.2,49],[-123.32,49]]]}},cuba:{type:"Feature",id:"cuba",properties:{},geometry:{type:"Polygon",coordinates:[[[-85.5,21.75],[-83.5,23.5],[-80,23.5],[-73.5,20.4],[-74.5,19.5],[-78,19.5],[-85.5,21.75]]]}},nicaragua:{type:"Feature",id:"nicaragua",properties:{},geometry:{type:"Polygon",coordinates:[[[-88,13],[-87.56104,13.13298],[-87.36877,12.99921],[-86.97876,13.02597],[-86.88538,13.28272],[-86.7041,13.29876],[-86.77002,13.76873],[-86.31409,13.77407],[-86.1438,14.046],[-86.01746,14.05133],[-85.75378,13.89141],[-85.16602,14.31761],[-84.96277,14.80144],[-84.4574,14.63674],[-83.39722,15.03499],[-82.5,14.9],[-82.8,12],[-83.676,10.95],[-83.66,10.8],[-83.92,10.7],[-84.688,11.076],[-84.91,10.945],[-85.615,11.215],[-85.7,11.06],[-86,11.06],[-88,13]]]}},boston_metro:{type:"Feature",id:"boston_metro",properties:{},geometry:{type:"Polygon",coordinates:[[[-70.5,41.91],[-71,41.91],[-71.42,42.05],[-71.57,42.18],[-71.64,42.4],[-71.57,42.52],[-71.35,42.64],[-71.1,42.7],[-70.5,42.7],[-70.5,41.91]]]}},central_pa:{type:"Feature",id:"central_pa",properties:{},geometry:{type:"Polygon",coordinates:[[[-78.7,41.5],[-77,41.5],[-76,40],[-76,39.72],[-79.3,39.72],[-78.7,41.5]]]}},chattanooga:{type:"Feature",id:"chattanooga",properties:{},geometry:{type:"Polygon",coordinates:[[[-85.634,34.743],[-85.634,35.282],[-84.933,35.282],[-84.933,34.743],[-85.634,34.743]]]}},cleveland:{type:"Feature",id:"cleveland",properties:{},geometry:{type:"Polygon",coordinates:[[[-82.5,41.5],[-80.95,42],[-80.95,41],[-82.5,41],[-82.5,41.5]]]}},colorado:{type:"Feature",id:"colorado",properties:{},geometry:{type:"Polygon",coordinates:[[[-109.05,37],[-109.05,41],[-102.05,41],[-102.05,37],[-109.05,37]]]}},dc_metro:{type:"Feature",id:"dc_metro",properties:{},geometry:{type:"Polygon",coordinates:[[[-77.04437,38.70266],[-77.27783,38.69409],[-77.57172,38.91668],[-77.61017,39.1258],[-77.27509,39.21523],[-77.08694,39.21204],[-76.87546,39.05119],[-76.69968,38.97863],[-76.71066,38.77657],[-76.84662,38.7048],[-77.04437,38.70266]]]}},dfw_metro:{type:"Feature",id:"dfw_metro",properties:{},geometry:{type:"Polygon",coordinates:[[[-97.75,32.25],[-97.75,33.4],[-96,33.4],[-96,32.25],[-97.75,32.25]]]}},grand_junction_co:{type:"Feature",id:"grand_junction_co",properties:{},geometry:{type:"Polygon",coordinates:[[[-109,39.4],[-108.1,39.4],[-107.8,39.16],[-107.8,38.7],[-108.1,38.5],[-109,39],[-109,39.4]]]}},hrva:{type:"Feature",id:"hrva",properties:{},geometry:{type:"Polygon",coordinates:[[[-76.85486,36.53392],[-76.85486,37.35488],[-75.8194,37.35488],[-75.8194,36.53392],[-76.85486,36.53392]]]}},la_metro:{type:"Feature",id:"la_metro",properties:{},geometry:{type:"Polygon",coordinates:[[[-118.5,33.7],[-118.68,34.23],[-118.5,34.35],[-118,34.2],[-117.3,34.2],[-117.2,34.1],[-117.37,33.9],[-117.74,33.5],[-118.5,33.7]]]}},massachusetts:{type:"Feature",id:"massachusetts",properties:{},geometry:{type:"Polygon",coordinates:[[[-73.53149,42.9725],[-69.40063,42.9725],[-69.40063,40.98819],[-71.55396,41.04622],[-71.53198,41.91863],[-73.70728,41.91045],[-73.53149,42.9725]]]}},minneapolis_st_paul_metro:{type:"Feature",id:"minneapolis_st_paul_metro",properties:{},geometry:{type:"Polygon",coordinates:[[[-93.801,44.578],[-93.801,45.348],[-92.666,45.348],[-92.666,44.578],[-93.801,44.578]]]}},mt_vernon_wa:{type:"Feature",id:"mt_vernon_wa",properties:{},geometry:{type:"Polygon",coordinates:[[[-123.3,49],[-122,49],[-122,48],[-123.2,48.4],[-123.3,49]]]}},nyc_metro:{type:"Feature",id:"nyc_metro",properties:{},geometry:{type:"Polygon",coordinates:[[[-74.73,40.64],[-73.95,41.38],[-73.6,40.95],[-73.25,41],[-73.25,40.6],[-74.43,40.43],[-74.73,40.64]]]}},philly_metro:{type:"Feature",id:"philly_metro",properties:{},geometry:{type:"Polygon",coordinates:[[[-75.7,40.3],[-75.3,40.4],[-74.7,40.3],[-74.45,40.1],[-74.9,39.55],[-75.5,39.55],[-75.8,39.7218],[-76.23,39.7211],[-75.7,40.3]]]}},phoenix:{type:"Feature",id:"phoenix",properties:{},geometry:{type:"Polygon",coordinates:[[[-113,32.7],[-113,34],[-111.1,34],[-111.1,32.7],[-113,32.7]]]}},portland_me:{type:"Feature",id:"portland_me",properties:{},geometry:{type:"Polygon",coordinates:[[[-70.5,42.9],[-71,43.3],[-71,44.2],[-69.6,44.5],[-69,44],[-70.5,42.9]]]}},portland_or:{type:"Feature",id:"portland_or",properties:{},geometry:{type:"Polygon",coordinates:[[[-124.4,44.8],[-124.4,46.3],[-121.5,46.3],[-121.5,44.8],[-124.4,44.8]]]}},salt_lake_city:{type:"Feature",id:"salt_lake_city",properties:{},geometry:{type:"Polygon",coordinates:[[[-112.6,40.75],[-112.3,41.4],[-111.5,41.4],[-111.1,40.3],[-112,39.75],[-112.6,40.75]]]}},seattle:{type:"Feature",id:"seattle",properties:{},geometry:{type:"Polygon",coordinates:[[[-122.15,47.26],[-122.33,47.26],[-122.54,47.33],[-122.52,47.46],[-122.45,47.55],[-122.45,47.8],[-121.2,47.8],[-121.43,47.38],[-121.43,47.14],[-121.94,47.14],[-122,47.17],[-122,47.17],[-122.1,47.19],[-122.15,47.26]]]}},sf_bay_area:{type:"Feature",id:"sf_bay_area",properties:{},geometry:{type:"Polygon",coordinates:[[[-123.5,38.5],[-122.8,38.8],[-121.7,38.2],[-121.5,36.9],[-123,36.9],[-123.5,38.5]]]}},south_sf_bay_area:{type:"Feature",id:"south_sf_bay_area",properties:{},geometry:{type:"Polygon",coordinates:[[[-121.4566,37.48249],[-121.21628,37.17673],[-121.20529,36.95757],[-121.49368,36.95757],[-121.5596,36.8928],[-121.98257,37.12419],[-122.27234,37.39635],[-122.13501,37.48903],[-121.4566,37.48249]]]}},st_louis:{type:"Feature",id:"st_louis",properties:{},geometry:{type:"Polygon",coordinates:[[[-90.28,39.1],[-89.57,39.05],[-89.57,38.18],[-90.58,38],[-91.37,38.2],[-91.37,38.75],[-90.28,39.1]]]}},tampa_bay:{type:"Feature",id:"tampa_bay",properties:{},geometry:{type:"Polygon",coordinates:[[[-83,28.2],[-82.2,28.2],[-82.2,27.55],[-83,27.55],[-83,28.2]]]}},usa_full:{type:"Feature",id:"usa_full",properties:{},geometry:{type:"MultiPolygon",coordinates:[[[[-124.76179,48.41301],[-123.22752,48.18499],[-123.32289,49.00429],[-96.01312,49.00605],[-95.11054,49.412],[-93.99811,49.00671],[-89.43531,47.98378],[-88.34922,48.29633],[-87.50645,48.01427],[-83.2814,46.13885],[-82.17616,43.58854],[-82.66248,41.68895],[-79.00601,42.80053],[-79.15798,43.44626],[-78.76239,43.62496],[-76.90231,43.80246],[-75.07988,44.98029],[-72.02225,45.00598],[-71.41227,45.25488],[-70.46149,46.21766],[-69.25051,47.51223],[-67.75966,47.099],[-66.94528,44.71049],[-69.84893,43.26199],[-69.87974,40.99205],[-72.00202,40.99125],[-74.02112,39.57279],[-75.41474,35.05319],[-80.02453,32.01613],[-79.89011,26.85507],[-80.02,24.0071],[-84.01601,24.00527],[-84.01656,25.01258],[-81.99666,25.01349],[-81.9972,25.98268],[-84.01879,28.99618],[-86.02775,30.00475],[-88.01625,30.00389],[-88.01567,28.99443],[-90.90285,28.85645],[-93.74053,29.47421],[-95.55633,28.58761],[-96.80617,27.79782],[-96.95553,25.98216],[-97.43502,25.8266],[-98.01091,25.9928],[-99.23511,26.4476],[-100.00624,28.00822],[-101.25529,29.48105],[-102.1514,29.74757],[-102.71736,29.39206],[-103.25189,28.89087],[-104.58819,29.69979],[-105.02053,30.5361],[-106.20525,31.4467],[-106.28689,31.56133],[-106.42932,31.75206],[-106.48421,31.74645],[-106.53072,31.78209],[-108.18711,31.77551],[-108.19927,31.326],[-111.00893,31.33601],[-114.86123,32.47999],[-117.67593,32.46302],[-119.97759,33.00641],[-122.53697,36.85661],[-124.99343,40.05576],[-124.60595,45.90245],[-124.76179,48.41301]]],[[[-160.57876,22.50629],[-159.00937,22.50702],[-157.50474,21.9985],[-156.29276,21.22259],[-154.68902,19.88057],[-154.62178,18.7587],[-155.99619,18.77902],[-157.50832,20.9958],[-158.74706,21.24398],[-160.57822,21.49846],[-160.57876,22.50629]]],[[[-167.1572,68.722],[-164.9717,68.9947],[-163.0218,69.9707],[-160.4136,70.7398],[-156.1769,71.5633],[-140.9684,69.9535],[-140.9874,61.0119],[-139.1716,60.4127],[-138.0072,59.9918],[-135.123,59.7566],[-131.9759,56.9995],[-130.0071,57.0001],[-130.0044,54.0043],[-133.9948,54.0032],[-138.515,57.9986],[-138.516,58.9953],[-151.5013,58.992],[-151.5003,57.9988],[-151.9963,55.9992],[-158.0191,55.0028],[-159.0076,55.0025],[-162.4025,53.9567],[-171.4689,51.8215],[-177.9993,51.2554],[-178.0001,52.2446],[-173.8197,59.7401],[-172.5143,63.8767],[-169.0075,64.9988],[-169.0087,66.0015],[-168.0022,66.0018],[-164.8554,67.0255],[-167.1572,68.722]]],[[[-68.2,17.8],[-67.9,18.67],[-65.33,18.57],[-64.64,18.36],[-64.32,17.38],[-68.2,17.8]]],[[[146.2,15.4],[144.8,12.9],[144.2,13.2],[145.7,15.6],[146.2,15.4]]],[[[180,52.2],[180,51],[172,52.5],[172,53.5],[180,52.2]]]]}},wyoming:{type:"Feature",id:"wyoming",properties:{},geometry:{type:"Polygon",coordinates:[[[-111.05,41],[-111.05,45],[-104.05,45],[-104.05,41],[-111.05,41]]]}},australia_full:{type:"Feature",id:"australia_full",properties:{},geometry:{type:"Polygon",coordinates:[[[146.07422,-44.43378],[131.66016,-44.65302],[124.54102,-41.44273],[116.45508,-39.36828],[108.80859,-39.16414],[103.18359,-27.60567],[95.27344,-24.04646],[96.30615,-11.15685],[106.25977,-9.92557],[116.47705,-13.98738],[122.77222,-11.65224],[126.43066,-11.48002],[129.26514,-9.92557],[134.89014,-9.92557],[139.46045,-10.14193],[141.55334,-9.99861],[141.7868,-9.77132],[142.229,-9.67115],[142.72614,-9.552],[143.30017,-9.39216],[144.24774,-9.24851],[144.44824,-9.59533],[149.5459,-12.68321],[154.90723,-18.02053],[156.42334,-21.55528],[158.02734,-24.68695],[160.0708,-26.03704],[167.34375,-26.6671],[170.354,-29.11378],[168.2666,-30.63791],[160.15869,-34.03445],[152.18262,-38.41056],[149.94141,-43.51669],[146.07422,-44.43378]]]}},argentina:{type:"Feature",id:"argentina",properties:{},geometry:{type:"Polygon",coordinates:[[[-73.14602,-49.18818],[-72.91615,-48.93261],[-72.53201,-48.80072],[-72.58755,-48.48542],[-72.22624,-48.32339],[-72.49784,-47.96155],[-72.33315,-47.44938],[-71.86801,-47.23376],[-71.94851,-46.80983],[-71.64665,-46.68783],[-71.79939,-46.19141],[-71.6147,-45.97522],[-71.79762,-45.62288],[-71.46813,-45.4921],[-71.32472,-45.306],[-71.56043,-44.97863],[-72.04094,-44.90019],[-72.07396,-44.78023],[-71.46969,-44.73753],[-71.23704,-44.79082],[-71.13226,-44.4711],[-71.36469,-44.38958],[-71.80731,-44.42036],[-71.84736,-44.11002],[-71.64902,-43.94552],[-71.75129,-43.78527],[-71.60784,-43.62836],[-71.93082,-43.45685],[-71.76157,-43.1645],[-72.14281,-42.8979],[-72.1812,-42.69735],[-72.023,-42.41766],[-72.17288,-42.14043],[-71.72931,-42.12447],[-71.91021,-41.34113],[-71.8196,-41.06038],[-71.96387,-40.71955],[-71.8414,-40.4521],[-71.65704,-40.36426],[-71.82818,-40.20778],[-71.59266,-39.90123],[-71.67811,-39.56486],[-71.39497,-39.34179],[-71.42542,-38.92164],[-70.92524,-38.76298],[-70.84044,-38.54138],[-70.97623,-38.44222],[-70.98292,-38.10477],[-71.21191,-37.68901],[-71.11983,-37.4585],[-71.21555,-37.27261],[-71.09237,-37.11444],[-71.11982,-36.69792],[-71.03513,-36.47333],[-70.71285,-36.42687],[-70.70501,-36.27229],[-70.42451,-36.15581],[-70.38755,-35.60868],[-70.43201,-35.31842],[-70.58358,-35.27831],[-70.36203,-35.13645],[-70.21683,-34.61145],[-70.01089,-34.41389],[-70.03094,-34.28805],[-69.79507,-34.24304],[-69.90417,-33.77143],[-69.7705,-33.3611],[-70.00282,-33.32294],[-70.08089,-33.02919],[-70.00121,-32.8846],[-70.17038,-32.62555],[-70.14899,-32.46585],[-70.31918,-32.27335],[-70.35277,-32.0257],[-70.2106,-31.95769],[-70.46072,-31.84116],[-70.56691,-31.60016],[-70.49734,-31.12216],[-70.40805,-31.16633],[-70.23998,-30.61575],[-70.11719,-30.43102],[-69.89853,-30.35557],[-69.87492,-29.7043],[-70.01808,-29.38321],[-69.78724,-29.13008],[-69.68114,-28.47172],[-69.45679,-28.18357],[-69.17254,-27.97088],[-68.94231,-27.52325],[-68.8412,-27.15464],[-68.29854,-27.0389],[-68.2638,-26.91623],[-68.58734,-26.49294],[-68.55754,-26.2871],[-68.38108,-26.17822],[-68.57599,-25.42894],[-68.4999,-25.16149],[-68.34279,-25.1124],[-68.56789,-24.79739],[-68.26201,-24.40457],[-67.32231,-24.0344],[-66.99052,-23.00044],[-67.18066,-22.8138],[-67.02827,-22.54089],[-66.78247,-22.43778],[-66.73899,-22.23893],[-66.28793,-22.08605],[-66.24277,-21.79408],[-66.07589,-21.83493],[-65.74764,-22.10912],[-64.99322,-22.08239],[-64.53579,-22.29137],[-64.29933,-22.86509],[-64.24332,-22.56039],[-63.93139,-22],[-62.80617,-22],[-62.7913,-22.16193],[-62.3009,-22.48659],[-62.20671,-22.70418],[-61.73612,-23.23432],[-61.08824,-23.61393],[-60.9899,-23.81808],[-60.37353,-24.024],[-60.03941,-24.01156],[-59.47554,-24.33261],[-59.35397,-24.47821],[-58.67243,-24.83192],[-58.24167,-24.92801],[-57.76089,-25.17193],[-57.555,-25.4484],[-57.74064,-25.65045],[-57.89112,-25.9662],[-58.08473,-26.11185],[-58.22103,-26.41403],[-58.18996,-26.64518],[-58.31991,-26.85821],[-58.64913,-27.12662],[-58.59905,-27.29984],[-57.87482,-27.27527],[-57.48754,-27.44418],[-56.96564,-27.50202],[-56.84926,-27.6063],[-56.60117,-27.42102],[-56.3749,-27.58903],[-56.29432,-27.42003],[-56.06276,-27.306],[-55.73692,-27.44516],[-55.6057,-27.16241],[-55.42284,-26.99528],[-54.78695,-26.63111],[-54.61874,-26.20893],[-54.67933,-25.99524],[-54.65698,-25.67619],[-54.5842,-25.58952],[-54.4812,-25.62543],[-54.108,-25.495],[-53.86217,-25.65902],[-53.83619,-25.97166],[-53.6411,-26.21559],[-53.73094,-26.5097],[-53.67249,-26.91252],[-53.84355,-27.16453],[-53.959,-27.15804],[-54.21736,-27.38603],[-54.673,-27.57],[-54.814,-27.533],[-54.936,-27.772],[-55.38728,-27.98524],[-55.76677,-28.23982],[-55.69902,-28.42637],[-55.88091,-28.4715],[-56.29651,-28.80272],[-56.42475,-29.07897],[-56.59315,-29.12516],[-56.70164,-29.35913],[-57.328,-29.972],[-57.64923,-30.20184],[-57.63687,-30.33197],[-57.85924,-30.47701],[-57.8096,-30.91332],[-58.08141,-31.45457],[-57.98082,-31.58691],[-58.20653,-31.86773],[-58.10645,-32.24002],[-58.20464,-32.46055],[-58.0841,-32.99782],[-58.36693,-33.12177],[-58.49375,-33.57857],[-58.29507,-34.17809],[-57.9345,-34.4519],[-55.9,-35.6],[-57,-39],[-61,-41],[-63.5,-55],[-66.67094,-55.11906],[-67.27285,-54.90511],[-67.95071,-54.87373],[-68.60967,-54.91369],[-68.60676,-52.65902],[-68.41869,-52.3325],[-69.19014,-52.15044],[-69.48632,-52.15165],[-69.9955,-52.00074],[-71.92259,-51.99991],[-72.29907,-51.69791],[-72.28621,-50.65987],[-72.72636,-50.61667],[-73.06995,-50.78909],[-73.32848,-50.5716],[-73.52199,-50.15397],[-73.44481,-49.79226],[-73.53933,-49.49825],[-73.47299,-49.20464],[-73.14602,-49.18818]]]}},bolivia:{type:"Feature",id:"bolivia",properties:{},geometry:{type:"Polygon",coordinates:[[[-60.17487,-16.26675],[-58.32092,-16.31948],[-58.47336,-16.74472],[-58.39371,-17.18081],[-57.79152,-17.55501],[-57.71187,-17.73103],[-57.55463,-18.22348],[-57.72079,-18.89914],[-57.70775,-19.0381],[-58.11768,-19.75313],[-57.85675,-19.96754],[-58.15338,-20.15201],[-58.17535,-19.83066],[-59.07074,-19.28846],[-59.97025,-19.29494],[-61.78848,-19.65358],[-62.57401,-21.99972],[-63.93082,-22.00736],[-64.24942,-22.60957],[-64.31808,-22.8806],[-64.56528,-22.36595],[-64.62021,-22.21856],[-64.99649,-22.08628],[-65.77446,-22.10027],[-65.92552,-21.93222],[-66.04774,-21.91884],[-66.04225,-21.86022],[-66.2273,-21.78437],[-66.3121,-22.1219],[-66.74057,-22.23635],[-66.7955,-22.44213],[-67.18002,-22.81353],[-67.56351,-22.90085],[-67.81174,-22.87934],[-68.17566,-21.3252],[-68.405,-20.9499],[-68.54095,-20.92681],[-68.55606,-20.7285],[-68.43796,-20.63857],[-68.74557,-20.46369],[-68.72772,-20.08173],[-68.56293,-20.05077],[-68.53134,-19.85779],[-68.69064,-19.74667],[-68.41873,-19.41544],[-68.9296,-18.97448],[-69.12186,-18.14128],[-69.46793,-17.50852],[-69.46793,-17.37489],[-69.63547,-17.27787],[-69.01199,-16.66053],[-69.03877,-16.58487],[-68.93509,-16.2061],[-69.16718,-16.22259],[-69.40201,-15.62634],[-69.13422,-15.23516],[-69.35806,-14.96933],[-68.97903,-14.21979],[-68.87466,-12.88745],[-68.65768,-12.49088],[-69.57264,-10.94456],[-68.74806,-11.00835],[-68.75167,-11.01762],[-68.75201,-11.03716],[-68.76592,-11.04963],[-68.70815,-11.14253],[-68.54576,-11.11036],[-68.24295,-10.95872],[-68.08502,-10.69165],[-67.86736,-10.64036],[-67.71629,-10.71459],[-67.6775,-10.60341],[-67.65947,-10.61792],[-67.58446,-10.50402],[-67.43614,-10.44966],[-67.40593,-10.38314],[-67.31461,-10.37774],[-67.32216,-10.32438],[-67.1953,-10.32277],[-67.18869,-10.33983],[-67.17093,-10.33814],[-66.57921,-9.90392],[-65.86441,-9.75981],[-65.56503,-9.82477],[-65.44968,-9.67318],[-65.29449,-9.85589],[-65.39474,-10.54722],[-65.35629,-10.78474],[-65.2684,-10.88658],[-65.29861,-11.32656],[-65.14481,-11.70939],[-64.36752,-12.4587],[-63.67538,-12.46675],[-61.64841,-13.53453],[-61.06339,-13.52919],[-60.4303,-13.88608],[-60.23804,-15.09864],[-60.57312,-15.09599],[-60.24353,-15.47221],[-60.17487,-16.26675]]]}},bahia:{id:"bahia",type:"Feature",properties:{},geometry:{type:"Polygon",coordinates:[[[-46.26343,-11.52309],[-46.40625,-11.53923],[-46.51062,-11.50425],[-46.604,-11.3481],[-46.61224,-11.25653],[-46.46668,-11.1811],[-46.42822,-11.02208],[-46.32935,-10.9331],[-46.19751,-10.65521],[-45.84045,-10.47701],[-45.82672,-10.35275],[-45.74707,-10.34194],[-45.70038,-10.26087],[-45.72784,-10.15815],[-45.59326,-10.09326],[-45.41199,-10.43379],[-45.45593,-10.55262],[-45.37903,-10.72538],[-45.15381,-10.8387],[-44.90112,-10.90883],[-44.60999,-10.66601],[-44.34631,-10.54182],[-44.13757,-10.63362],[-44.05518,-10.39057],[-43.96179,-10.42839],[-43.78601,-10.15275],[-43.69263,-10.03918],[-43.69812,-9.95262],[-43.64868,-9.82274],[-43.76404,-9.76861],[-43.8794,-9.54117],[-43.68713,-9.41655],[-43.4729,-9.24851],[-43.3081,-9.37861],[-43.04443,-9.36235],[-42.8302,-9.60617],[-42.33581,-9.31899],[-41.90735,-9.23767],[-41.7865,-9.09125],[-41.40198,-8.71136],[-41.14929,-8.70593],[-41.03943,-8.83351],[-41.01471,-8.82808],[-40.92407,-8.83894],[-40.8197,-9.07226],[-40.68237,-9.14277],[-40.66864,-9.26478],[-40.7428,-9.30002],[-40.75653,-9.42197],[-40.62744,-9.47615],[-40.53131,-9.41384],[-40.47363,-9.39758],[-40.42694,-9.34338],[-40.36102,-9.37319],[-40.29785,-9.09396],[-40.23468,-9.04243],[-40.14679,-9.10481],[-40.07813,-9.05057],[-39.98749,-9.05599],[-39.8996,-8.95833],[-39.90509,-8.82808],[-39.68262,-8.77923],[-39.70459,-8.67063],[-39.65241,-8.65977],[-39.41345,-8.50769],[-39.2926,-8.54843],[-39.23492,-8.6299],[-38.96576,-8.76837],[-38.86963,-8.76837],[-38.71307,-8.83622],[-38.68835,-8.90678],[-38.66913,-8.98275],[-38.61694,-8.96376],[-38.60596,-8.86065],[-38.5675,-8.81723],[-38.47687,-8.84708],[-38.50983,-8.94205],[-38.42194,-9.037],[-38.33679,-8.97461],[-38.28461,-9.00716],[-38.31757,-9.06684],[-38.21045,-9.36235],[-38.04565,-9.4599],[-38.02368,-9.8498],[-37.89185,-9.96885],[-37.74902,-10.31492],[-37.8479,-10.37977],[-37.78198,-10.64981],[-37.93579,-10.73617],[-38.13354,-10.6822],[-38.26538,-10.79014],[-38.02368,-11.31848],[-37.73804,-11.57691],[-37.3645,-11.48002],[-38.50159,-18.11975],[-39.65515,-18.35453],[-40.25391,-17.96828],[-40.23193,-17.79053],[-40.61646,-17.38209],[-40.51758,-16.89917],[-40.13306,-16.45716],[-39.90234,-16.04581],[-40.68237,-15.68651],[-41.08887,-15.73939],[-41.35254,-15.73939],[-41.37451,-15.49603],[-41.80298,-15.09334],[-42.04468,-15.18878],[-43.24219,-14.67925],[-43.50586,-14.78551],[-43.92334,-14.63674],[-43.7915,-14.31761],[-44.35181,-14.24309],[-44.65942,-14.38148],[-45.78003,-15.13576],[-46.10962,-15.29478],[-46.06567,-14.87047],[-45.92285,-14.38148],[-46.24146,-14.14723],[-46.32935,-13.11158],[-46.38428,-12.02858],[-46.26343,-11.52309]]]}},brazil:{type:"Feature",id:"brazil",properties:{},geometry:{type:"Polygon",coordinates:[[[-51.56433,4.29711],[-28.4491,1.04914],[-37.67761,-21.04862],[-52.94861,-34.05721],[-53.56384,-33.71063],[-53.58581,-33.23409],[-53.16833,-32.81036],[-54.11316,-32.08723],[-55.73914,-30.85036],[-56.11267,-31.18931],[-56.11267,-30.90694],[-57.0575,-30.14988],[-57.23328,-30.32073],[-57.73865,-30.26381],[-55.98083,-28.5411],[-54.94812,-27.68839],[-53.80554,-27.18136],[-53.7616,-26.73089],[-53.87146,-26.00249],[-54.20105,-25.88394],[-54.6405,-25.88394],[-54.28894,-24.13171],[-55.43701,-24.18685],[-55.87647,-22.3704],[-58.07373,-22.08564],[-58.24402,-20.06109],[-57.71668,-17.98396],[-58.43628,-17.18278],[-58.50769,-16.38866],[-60.1831,-16.29905],[-60.26001,-15.14637],[-60.49072,-14.09396],[-60.94116,-13.63531],[-61.85303,-13.5926],[-63.58887,-12.56529],[-64.22058,-12.55992],[-65.20386,-11.8996],[-65.4126,-9.74154],[-66.82983,-10.1203],[-68.17566,-10.92501],[-70.6366,-11.18379],[-70.6366,-9.62783],[-71.42761,-9.97426],[-72.74597,-9.88769],[-73.97644,-7.10634],[-72.70752,-4.67498],[-70.15869,-4.23686],[-69.67529,-1.03266],[-70.19714,1.75205],[-67.56042,1.83989],[-66.94519,0.69761],[-63.78113,1.83989],[-64.84131,4.36832],[-63.25378,3.59566],[-60.24353,5.20584],[-60.03479,4.98698],[-59.57886,3.81493],[-59.89746,3.26118],[-60.05676,2.76199],[-59.9469,2.2626],[-59.77661,2.23515],[-59.77661,1.75754],[-58.64502,1.55987],[-55.87647,2.61384],[-53.10791,2.35041],[-51.56433,4.29711]]]}},df_br:{id:"df_br",type:"Feature",properties:{},geometry:{type:"Polygon",coordinates:[[[-48.20114,-15.49868],[-47.42111,-15.5],[-47.38953,-15.56484],[-47.32361,-15.58865],[-47.33047,-15.63891],[-47.31125,-15.73278],[-47.36755,-15.83189],[-47.3703,-15.927],[-47.36893,-15.99698],[-47.30988,-16.04317],[-48.27805,-16.04713],[-48.24921,-15.94152],[-48.2753,-15.93096],[-48.29041,-15.83189],[-48.22998,-15.77772],[-48.21899,-15.71163],[-48.24097,-15.70898],[-48.23547,-15.66535],[-48.22449,-15.63097],[-48.20251,-15.62568],[-48.20114,-15.49868]]]}},rs_br:{id:"rs_br",type:"Feature",properties:{},geometry:{type:"Polygon",coordinates:[[[-50.56791,-28.32331],[-49.64837,-28.40599],[-49.62152,-28.67722],[-49.82288,-28.81257],[-49.86986,-29.14725],[-49.40674,-29.43409],[-50.66187,-31.5221],[-51.51429,-32.07544],[-52.0244,-32.51232],[-52.32644,-33.22264],[-53.199,-34.04411],[-53.65541,-33.63156],[-53.50103,-32.61414],[-55.57503,-31.01726],[-56.0113,-31.18392],[-56.20595,-30.78112],[-56.93084,-30.18535],[-57.2463,-30.36505],[-57.57519,-30.33029],[-57.71614,-30.18535],[-57.40068,-29.91811],[-57.23959,-29.67347],[-56.02473,-28.4178],[-55.70255,-28.08671],[-54.40043,-27.2008],[-53.38022,-26.97372],[-51.97071,-27.23661],[-51.03103,-27.74271],[-50.56791,-28.32331]]]}},chile:{type:"Feature",id:"chile",properties:{},geometry:{type:"MultiPolygon",coordinates:[[[[-110,-28],[-110,-26],[-109,-26],[-109,-28],[-110,-28]],[[-69.46999,-17.50394],[-69.67049,-17.66692],[-69.80164,-17.65253],[-69.83047,-17.71337],[-69.82704,-17.75196],[-69.80919,-17.8023],[-69.75494,-17.98135],[-69.82018,-18.1191],[-69.86618,-18.17325],[-69.96918,-18.26065],[-70.19165,-18.33106],[-72.5,-18.3],[-78,-53],[-68,-58],[-65.80412,-55.20392],[-67.30412,-54.90395],[-68.60412,-54.90395],[-68.60412,-52.65417],[-68.42212,-52.39063],[-68.42268,-52.33665],[-68.57786,-52.32931],[-68.58833,-52.31016],[-68.84205,-52.28181],[-69.19421,-52.15445],[-69.49016,-52.15561],[-70.00412,-52.00423],[-71.92097,-52.00391],[-71.95221,-51.97896],[-72.04212,-51.96756],[-71.93324,-51.91854],[-72.03255,-51.8118],[-72.32412,-51.60426],[-72.34531,-50.65403],[-73.32687,-50.52827],[-73.51742,-49.89065],[-72.98733,-48.99351],[-72.68005,-48.89271],[-72.53174,-48.77746],[-72.56195,-48.50569],[-72.24472,-48.34986],[-72.46788,-47.7451],[-72.0504,-47.34557],[-71.87325,-47.12505],[-71.9426,-46.81204],[-71.64974,-46.68289],[-71.82037,-46.1256],[-71.64459,-46.00936],[-71.75291,-45.55168],[-71.47104,-45.49829],[-71.54383,-45.40436],[-71.3895,-45.35287],[-71.33354,-45.28286],[-71.41148,-45.19486],[-71.56494,-44.98326],[-72.03323,-44.88409],[-72.03495,-44.76989],[-71.24908,-44.80425],[-71.07056,-44.47985],[-71.81213,-44.30714],[-71.58417,-43.64303],[-71.8856,-43.45765],[-71.72596,-43.19066],[-72.14344,-42.90363],[-72.04765,-42.54322],[-72.04182,-42.40546],[-72.17194,-42.14686],[-71.73051,-42.11516],[-71.92612,-40.72332],[-71.80252,-40.42081],[-71.70639,-40.425],[-71.66794,-40.30571],[-71.77643,-40.268],[-71.39465,-38.92843],[-70.90816,-38.67251],[-71.189,-37.74167],[-71.04858,-36.49087],[-70.95932,-36.50246],[-70.37876,-36.04743],[-70.43884,-35.32549],[-70.58441,-35.27646],[-70.53875,-35.20551],[-70.3791,-35.17241],[-69.87854,-34.15614],[-69.8703,-33.57458],[-69.78207,-33.33282],[-69.86721,-33.28663],[-69.99561,-33.3268],[-70.08453,-33.03716],[-70.3125,-32.12562],[-70.22736,-31.93934],[-70.46185,-31.84548],[-70.53102,-31.3724],[-70.07904,-30.38828],[-69.88678,-30.35747],[-69.81262,-30.14869],[-69.93347,-30.10118],[-69.94308,-29.24087],[-68.78609,-27.10803],[-68.56567,-27.17525],[-68.25256,-26.96492],[-68.57666,-26.49147],[-68.5437,-26.27987],[-68.37067,-26.17639],[-68.48328,-25.15399],[-68.32397,-25.09928],[-68.5437,-24.79047],[-68.46405,-24.62829],[-68.24432,-24.39338],[-67.32216,-24.03768],[-66.98639,-23.00012],[-67.17728,-22.81416],[-67.55768,-22.89642],[-67.81586,-22.86099],[-68.19489,-21.27018],[-68.405,-20.93964],[-68.53546,-20.8524],[-68.47504,-20.64949],[-68.72772,-20.46948],[-68.73322,-20.38454],[-68.67279,-20.34591],[-68.76549,-20.08237],[-68.56842,-20.05658],[-68.52997,-19.85262],[-68.68309,-19.72793],[-68.40225,-19.41091],[-68.92548,-18.97253],[-69.11087,-18.1328],[-69.06143,-18.06231],[-69.29352,-17.96698],[-69.30931,-17.9121],[-69.30794,-17.83956],[-69.34708,-17.7343],[-69.47205,-17.61065],[-69.46999,-17.50394]]]]}},bogota:{type:"Feature",id:"bogota",properties:{},geometry:{type:"Polygon",coordinates:[[[-74.38,4.7],[-74.17,5],[-73.75,5],[-73.9,4.37],[-74.25,4.31],[-74.38,4.7]]]}},colombia:{type:"Feature",id:"colombia",properties:{},geometry:{type:"Polygon",coordinates:[[[-75.8,11.8],[-71.3,12.7],[-70.9,11.9],[-71.98242,11.65762],[-72.2406,11.14607],[-72.45483,11.10295],[-72.8833,10.43379],[-72.94922,9.83898],[-73.31177,9.20514],[-72.99866,9.29189],[-72.94373,9.09125],[-72.76245,9.12379],[-72.65259,8.61633],[-72.39716,8.36098],[-72.34497,8.00484],[-72.4054,8.04563],[-72.49054,7.945],[-72.4411,7.89875],[-72.45209,7.53676],[-72.43835,7.40605],[-72.18567,7.38426],[-72.14996,7.32161],[-72.18018,7.24532],[-72.03461,7.0273],[-71.12,7.02457],[-71.09528,6.98641],[-70.9964,6.98641],[-70.77942,7.09817],[-70.5542,7.07636],[-70.30701,6.93461],[-70.11475,6.98095],[-69.43016,6.10778],[-69.34914,6.13987],[-69.31,6.0873],[-69.23378,6.08047],[-69.17404,6.15011],[-69.03877,6.22384],[-68.66455,6.14055],[-67.80762,6.288],[-67.45056,6.21155],[-67.47803,6.10232],[-67.40662,6.00946],[-67.60437,5.7909],[-67.63184,5.4629],[-67.82959,5.31524],[-67.79114,4.28068],[-67.62085,3.74915],[-67.5,3.78204],[-67.29126,3.36537],[-67.86255,2.82234],[-67.58789,2.79491],[-67.1759,2.33395],[-66.85181,1.23037],[-67.08801,1.16172],[-67.16766,1.83989],[-67.34894,1.97715],[-67.36816,2.22417],[-67.44781,2.21868],[-67.56866,2.054],[-67.80487,1.98813],[-67.91199,1.81793],[-68.18939,2.01009],[-68.2663,1.85087],[-68.16193,1.73008],[-69.83459,1.71361],[-69.8291,1.08209],[-69.19739,1.06561],[-69.15344,0.62621],[-69.48303,0.73057],[-69.79065,0.58776],[-70.02686,0.57128],[-70.04059,-0.19226],[-69.60937,-0.50262],[-69.55719,-0.65367],[-69.61212,-0.7498],[-69.41986,-1.03541],[-69.40338,-1.37041],[-69.9321,-4.21974],[-69.94995,-4.23275],[-70.06531,-4.08071],[-70.1841,-3.93893],[-70.28641,-3.82246],[-70.35027,-3.80054],[-70.50613,-3.87796],[-70.71075,-3.793],[-70.04883,-2.75102],[-70.8783,-2.23241],[-71.41113,-2.37786],[-71.75171,-2.19124],[-72.36694,-2.48762],[-72.63336,-2.36688],[-72.67456,-2.4595],[-72.93274,-2.4492],[-73.1813,-2.22692],[-73.10028,-2.0842],[-73.14697,-1.79597],[-73.55347,-1.69439],[-73.47382,-1.55437],[-73.64136,-1.26607],[-73.85834,-1.22763],[-74.27582,-0.97774],[-74.42139,-0.51086],[-74.79492,-0.23621],[-75.20142,-0.06592],[-75.27832,-0.12909],[-75.80566,0.04669],[-76.09955,0.32959],[-76.32751,0.42572],[-76.40991,0.37903],[-76.41266,0.23621],[-76.96198,0.27191],[-77.11029,0.36529],[-77.53601,0.40649],[-77.48383,0.65093],[-77.69257,0.73606],[-77.66441,0.81296],[-77.7166,0.85141],[-77.74544,0.83562],[-77.77565,0.83974],[-77.80861,0.82738],[-77.8196,0.80678],[-77.96173,0.82257],[-78.19794,0.94478],[-78.19931,0.99284],[-78.28308,1.05325],[-78.2515,1.08346],[-78.31741,1.19193],[-78.43002,1.1425],[-78.55499,1.2496],[-78.61816,1.24685],[-80,2.5],[-77.7,7.7],[-77.55524,7.51498],[-77.32178,7.87971],[-77.17896,7.93956],[-77.5,8.5],[-75.8,11.8]]]}},ecuador:{type:"Feature",id:"ecuador",properties:{},geometry:{type:"Polygon",coordinates:[[[-82,-3],[-80,2.2],[-77.86079,0.80404],[-77.72072,0.85484],[-77.66287,0.81794],[-77.66424,0.80884],[-77.67385,0.80215],[-77.67729,0.79099],[-77.66184,0.78979],[-77.68587,0.77365],[-77.6972,0.74241],[-77.67523,0.73778],[-77.5573,0.65058],[-77.47353,0.6626],[-77.52159,0.44837],[-76.47583,0.20874],[-76.32202,0.4422],[-76.0199,0.30487],[-75.81665,0.09064],[-75.26733,-0.1181],[-75.31265,-0.16617],[-75.50629,-0.21698],[-75.22888,-0.56441],[-75.20279,-0.97362],[-75.28931,-0.99147],[-75.36072,-0.95027],[-75.64087,-1.62576],[-76.63376,-2.59052],[-77.84637,-3],[-78.2872,-3.42158],[-79.01917,-5.01844],[-79.24301,-4.96581],[-79.62753,-4.42656],[-79.79233,-4.48954],[-80.12535,-4.29784],[-80.36018,-4.49775],[-80.44584,-4.45086],[-80.44739,-4.37692],[-80.33409,-4.21841],[-80.45013,-4.20968],[-80.44928,-4.13024],[-80.48035,-4.09445],[-80.47297,-4.05079],[-80.44739,-3.99719],[-80.39915,-3.98281],[-80.29701,-4.01843],[-80.12878,-3.89718],[-80.16106,-3.86704],[-80.19264,-3.60256],[-80.21633,-3.582],[-80.20706,-3.54705],[-80.21745,-3.5],[-80.22878,-3.50181],[-80.2335,-3.4899],[-80.2456,-3.48759],[-80.24545,-3.48481],[-80.24416,-3.48461],[-80.24386,-3.48247],[-80.24313,-3.48142],[-80.24393,-3.47881],[-80.24079,-3.47723],[-80.2438,-3.46463],[-80.22217,-3.44047],[-80.25238,-3.41],[-82,-3]]]}},paraguay:{type:"Feature",id:"paraguay",properties:{},geometry:{type:"Polygon",coordinates:[[[-54.25873,-24.35961],[-54.58403,-25.58921],[-54.65681,-25.67588],[-54.67916,-25.99493],[-54.61857,-26.20862],[-54.78678,-26.6308],[-55.42267,-26.99497],[-55.60553,-27.1621],[-55.73675,-27.44486],[-55.78857,-27.44309],[-55.89775,-27.34371],[-55.97809,-27.35591],[-56.06259,-27.30569],[-56.29415,-27.41973],[-56.37473,-27.58873],[-56.601,-27.42072],[-56.84909,-27.606],[-56.96547,-27.50172],[-57.48737,-27.44388],[-57.87465,-27.27496],[-58.59888,-27.29953],[-58.64896,-27.12631],[-58.31974,-26.8579],[-58.18979,-26.64487],[-58.22086,-26.41372],[-58.08456,-26.11154],[-57.89095,-25.96589],[-57.74047,-25.65014],[-57.55483,-25.44809],[-57.76072,-25.17162],[-58.2415,-24.9277],[-58.67226,-24.83161],[-59.3538,-24.4779],[-59.47537,-24.3323],[-60.03924,-24.01125],[-60.37336,-24.02369],[-60.98973,-23.81777],[-61.08807,-23.61362],[-61.73595,-23.234],[-62.20654,-22.70386],[-62.30073,-22.48627],[-62.64387,-22.24906],[-62.26072,-21.05983],[-62.26622,-20.56305],[-61.92152,-20.08915],[-61.73647,-19.63289],[-59.97488,-19.29332],[-59.06988,-19.28619],[-58.20814,-19.80515],[-57.83186,-20.9842],[-57.92507,-21.63334],[-57.88113,-21.68734],[-57.90602,-21.71294],[-57.97194,-22.07832],[-56.81013,-22.27099],[-56.56363,-22.20044],[-56.49462,-22.08659],[-56.39677,-22.07641],[-56.26631,-22.24811],[-56.01774,-22.29259],[-55.8526,-22.28227],[-55.78935,-22.38413],[-55.74034,-22.38913],[-55.75132,-22.47989],[-55.7472,-22.50653],[-55.72347,-22.5514],[-55.69845,-22.56298],[-55.69365,-22.57788],[-55.62361,-22.62986],[-55.38191,-24.00601],[-54.65973,-23.82806],[-54.31366,-24.01762],[-54.25873,-24.35961]]]}},peru:{type:"Feature",id:"peru",properties:{},geometry:{type:"Polygon",coordinates:[[[-83,-3],[-80.25238,-3.41],[-80.22217,-3.44047],[-80.2438,-3.46463],[-80.24079,-3.47723],[-80.24393,-3.47881],[-80.24313,-3.48142],[-80.24386,-3.48247],[-80.24416,-3.48461],[-80.24545,-3.48481],[-80.2456,-3.48759],[-80.2335,-3.4899],[-80.22878,-3.50181],[-80.21745,-3.5001],[-80.20706,-3.54705],[-80.21633,-3.582],[-80.19264,-3.60256],[-80.16106,-3.86704],[-80.12878,-3.89718],[-80.29701,-4.01843],[-80.39915,-3.98281],[-80.44739,-3.99719],[-80.47297,-4.05079],[-80.48035,-4.09445],[-80.44928,-4.13024],[-80.45013,-4.20968],[-80.33409,-4.21841],[-80.44739,-4.37692],[-80.44584,-4.45086],[-80.36018,-4.49775],[-80.12535,-4.29784],[-79.79233,-4.48954],[-79.62753,-4.42656],[-79.24301,-4.96581],[-79.01917,-5.01844],[-78.2872,-3.42158],[-77.84637,-3],[-76.63376,-2.59052],[-75.64087,-1.62576],[-75.36072,-0.95027],[-75.56534,-0.13806],[-75.15884,-0.06665],[-74.40628,-0.55553],[-72.92862,-2.39505],[-70.9552,-2.25162],[-70.02686,-2.70987],[-70.70595,-3.78478],[-70.49789,-3.88142],[-70.32349,-3.8088],[-69.95819,-4.23211],[-69.94446,-4.29784],[-69.99802,-4.37316],[-70.10376,-4.29164],[-70.19028,-4.35946],[-71.82999,-4.5662],[-72.86133,-5.25507],[-73.94348,-7.4932],[-72.19116,-9.95803],[-70.61188,-9.57638],[-70.62149,-10.96681],[-69.57161,-10.94557],[-68.65494,-12.49629],[-69.01886,-13.62196],[-68.83896,-14.22445],[-69.38141,-14.86251],[-69.14795,-15.24444],[-69.39926,-15.6151],[-69.19189,-16.17449],[-69.10177,-16.22555],[-68.96152,-16.19456],[-68.78952,-16.34254],[-68.98865,-16.42357],[-69.04015,-16.57368],[-69.01886,-16.65198],[-69.61075,-17.26542],[-69.46896,-17.37423],[-69.46827,-17.49919],[-69.66654,-17.66071],[-69.81262,-17.67281],[-69.75,-18],[-70,-18.27],[-75,-19],[-83,-3]]]}},latam:{type:"Feature",id:"latam",properties:{},geometry:{type:"Polygon",coordinates:[[[-123,14],[-117.45574,32.58935],[-117.23326,32.52453],[-116.43813,32.58992],[-115.96571,32.62752],[-115.48953,32.66395],[-114.71211,32.7179],[-114.7455,32.65614],[-114.79837,32.6067],[-114.81091,32.49615],[-111.06611,31.33282],[-109.5397,31.33311],[-108.86816,31.33165],[-108.2131,31.33135],[-108.21447,31.78655],[-106.52962,31.78363],[-106.51966,31.77225],[-106.50867,31.76116],[-106.4867,31.74715],[-106.4716,31.75123],[-106.46851,31.75912],[-106.45409,31.76554],[-106.43898,31.75678],[-106.41426,31.75007],[-106.37959,31.7305],[-106.37409,31.71269],[-106.35075,31.69575],[-106.33289,31.65835],[-106.30543,31.6224],[-106.28002,31.56186],[-106.24741,31.54314],[-106.21101,31.47347],[-106.17805,31.45766],[-106.14956,31.43335],[-106.00502,31.38881],[-105.76607,31.16816],[-105.38292,30.84683],[-104.9121,30.63644],[-104.67293,29.91804],[-104.39415,29.56151],[-103.20921,28.98742],[-102.4182,29.81056],[-101.4514,29.77242],[-100.96779,29.34866],[-100.9005,29.31454],[-100.69725,29.14257],[-100.62309,28.91322],[-100.51598,28.749],[-100.51186,28.70474],[-100.50293,28.66227],[-100.40337,28.58271],[-100.01472,28.06956],[-99.53957,27.59837],[-99.53339,27.57859],[-99.51279,27.5655],[-99.52103,27.55607],[-99.52824,27.49731],[-99.5018,27.50066],[-99.48601,27.49426],[-99.47777,27.48299],[-99.48498,27.4635],[-99.49596,27.44857],[-99.48669,27.39067],[-99.53476,27.31321],[-99.44344,27.25951],[-99.45717,27.03222],[-99.07127,26.42692],[-98.9978,26.39248],[-98.46771,26.21028],[-98.25966,26.09194],[-98.08388,26.05061],[-97.95067,26.06172],[-97.79205,26.05185],[-97.57919,25.95002],[-97.51328,25.89073],[-97.46315,25.87899],[-97.41783,25.83821],[-97.34367,25.92594],[-97,26],[-81,24],[-73.5,20.5],[-64,20],[-29,0],[-29,-20],[-63,-51],[-62,-57],[-72,-57],[-113,-30],[-123,14]]]}}};
 
 
   var dataImagery = [{id:"sjcgis.org-Aerials_2013_WM",name:"2013 aerial imagery for San Juan County WA",type:"tms",template:"https://sjcgis.org/arcgis/rest/services/Basemaps/Aerials_2013_WM/MapServer/tile/{zoom}/{y}/{x}",endDate:"2013-06-01T00:00:00.000Z",startDate:"2013-05-01T00:00:00.000Z",zoomExtent:[0,19],polygon:[[[-123.02167,48.44667],[-122.94666,48.44781],[-122.90151,48.41307],[-122.80263,48.40771],[-122.79199,48.4428],[-122.80881,48.47866],[-122.73912,48.49572],[-122.78547,48.62161],[-122.73088,48.63613],[-122.7556,48.71208],[-122.95747,48.71593],[-122.97086,48.69577],[-122.9997,48.6978],[-123.00348,48.73427],[-123.0433,48.7431],[-123.07626,48.70528],[-123.08485,48.66335],[-123.12845,48.6638],[-123.22698,48.70302],[-123.24655,48.68353],[-123.17445,48.64702],[-123.21514,48.60107],[-123.21393,48.57336],[-123.1808,48.56575],[-123.16621,48.52006],[-123.10235,48.47684],[-123.02167,48.44667]],[[-122.98339,48.78214],[-122.93498,48.76653],[-122.91181,48.73858],[-122.80229,48.73982],[-122.81946,48.75499],[-122.9343,48.79572],[-122.98374,48.79436],[-122.98339,48.78214]]],terms_url:"https://www.arcgis.com/home/item.html?id=7bf69831861d438d8365cf9f46662523",terms_text:"Pictometry Inc, San Juan County GIS",description:"Public domain aerial imagery taken in May/June 2013 from San Juan County, WA. Resolution is 9 inch."},{id:"sjcgis.org-Aerials_2016_WM",name:"2016 aerial imagery for San Juan County WA",type:"tms",template:"https://sjcgis.org/arcgis/rest/services/Basemaps/Aerials_2016_WM/MapServer/tile/{zoom}/{y}/{x}",endDate:"2016-07-01T00:00:00.000Z",startDate:"2016-05-01T00:00:00.000Z",zoomExtent:[0,19],polygon:[[[-123.02167,48.44667],[-122.94666,48.44781],[-122.90151,48.41307],[-122.80263,48.40771],[-122.79199,48.4428],[-122.80881,48.47866],[-122.73912,48.49572],[-122.78547,48.62161],[-122.73088,48.63613],[-122.7556,48.71208],[-122.95747,48.71593],[-122.97086,48.69577],[-122.9997,48.6978],[-123.00348,48.73427],[-123.0433,48.7431],[-123.07626,48.70528],[-123.08485,48.66335],[-123.12845,48.6638],[-123.22698,48.70302],[-123.24655,48.68353],[-123.17445,48.64702],[-123.21514,48.60107],[-123.21393,48.57336],[-123.1808,48.56575],[-123.16621,48.52006],[-123.10235,48.47684],[-123.02167,48.44667]],[[-122.98339,48.78214],[-122.93498,48.76653],[-122.91181,48.73858],[-122.80229,48.73982],[-122.81946,48.75499],[-122.9343,48.79572],[-122.98374,48.79436],[-122.98339,48.78214]]],best:true,description:"Public domain aerial imagery taken in May, June, and July from San Juan County, WA. Resolution is 6 inch countywide."},{id:"OS7",name:"7th Series (OS7)",type:"tms",template:"https://ooc.openstreetmap.org/os7/{zoom}/{x}/{y}.jpg",zoomExtent:[6,14],polygon:[[[-3.04697,54.83947],[-3.05864,55.24157],[-4.04466,55.23296],[-4.07076,55.63654],[-4.61904,55.6253],[-4.64926,56.02834],[-4.48961,56.03217],[-4.52394,56.4367],[-3.86751,56.44581],[-3.84176,56.04944],[-3.44591,56.04982],[-3.43492,55.64429],[-2.79497,55.65049],[-2.80802,56.05749],[-3.20661,56.05327],[-3.21417,56.45682],[-3.73808,56.45075],[-3.74185,56.86175],[-5.07669,56.83171],[-5.03652,56.42949],[-5.16012,56.42493],[-5.12991,56.01798],[-5.92607,55.99456],[-5.85518,55.23335],[-5.2281,55.25136],[-5.21024,55.02765],[-4.65956,55.04181],[-4.64548,54.81633],[-3.04697,54.83947]],[[-1.74835,57.76428],[-1.74065,57.36],[-2.58022,57.35537],[-2.57437,57.04526],[-2.08408,57.04799],[-2.07651,56.64276],[-2.7345,56.63906],[-2.73781,56.81718],[-3.23885,56.81437],[-3.24896,57.35168],[-3.75629,57.34889],[-3.76219,57.65868],[-4.76587,57.64473],[-4.81008,58.26984],[-5.2511,58.26547],[-5.27376,58.66767],[-3.55818,58.69887],[-3.56607,58.9316],[-3.37656,58.93444],[-3.38584,59.20171],[-3.18713,59.20215],[-3.18747,59.24176],[-3.06757,59.24203],[-3.07855,59.42135],[-2.37131,59.42763],[-2.36856,59.0222],[-2.67893,59.02078],[-2.67343,58.83935],[-2.86569,58.83651],[-2.8602,58.53531],[-3.03461,58.53316],[-3.0195,58.13159],[-3.6156,58.11982],[-3.61276,57.97754],[-3.71092,57.97562],[-3.69932,57.75364],[-1.74835,57.76428]],[[-7.07492,56.76319],[-7.73471,56.73566],[-7.7911,57.13994],[-7.70662,57.14343],[-7.76299,57.54311],[-7.60218,57.54968],[-7.62134,57.68452],[-7.72499,57.6803],[-7.73017,57.71673],[-7.60264,57.72191],[-7.59964,57.70083],[-7.48634,57.70544],[-7.49528,57.76813],[-7.37493,57.77301],[-7.39337,57.90201],[-7.23591,57.90838],[-7.24323,57.95948],[-7.13916,57.96369],[-7.14508,58.00495],[-7.23742,58.00122],[-7.23297,57.97018],[-7.31133,57.96702],[-7.31538,57.99525],[-7.24904,57.99792],[-7.28082,58.21856],[-7.07355,58.22687],[-7.0827,58.29018],[-6.80743,58.30119],[-6.82768,58.44074],[-6.50305,58.45366],[-6.51532,58.53792],[-6.16474,58.55184],[-6.10631,58.14894],[-6.33469,58.13976],[-6.27759,57.74145],[-6.96138,57.71366],[-6.93332,57.51615],[-7.10017,57.50933],[-7.05218,57.169],[-7.13111,57.16575],[-7.07492,56.76319]],[[0.41076,50.82087],[0.98102,50.80612],[0.99437,51.01173],[1.45062,50.99998],[1.47712,51.40552],[0.89619,51.42035],[0.88243,51.21039],[0.505,51.22007],[0.52273,51.49042],[-0.63397,51.51063],[-0.63671,51.44563],[-1.09951,51.45248],[-1.11485,51.04814],[-0.52987,51.0394],[-0.52751,51.10203],[0.42806,51.08778],[0.41076,50.82087]],[[-5.39457,51.9619],[-4.79581,51.98051],[-4.78873,51.89403],[-4.20265,51.91228],[-4.22941,52.23828],[-3.6552,52.25602],[-3.62228,51.85483],[-4.21342,51.8364],[-4.18551,51.49342],[-4.77661,51.47485],[-4.78476,51.57525],[-5.08799,51.56574],[-5.09422,51.64242],[-5.3678,51.63385],[-5.39457,51.9619]],[[-1.2389,54.03537],[-0.62779,54.02811],[-0.62004,54.25257],[-0.57268,54.25201],[-0.55865,54.65542],[-1.17998,54.66269],[-1.18782,54.43788],[-1.23221,54.4384],[-1.2389,54.03537]],[[-2.67227,50.97677],[-2.09961,50.98023],[-2.10572,51.37949],[-1.58877,51.38259],[-1.59499,51.78589],[-2.17563,51.78891],[-2.17154,51.38392],[-2.67846,51.38088],[-2.67227,50.97677]],[[-2.60155,53.27155],[-3.22973,53.2685],[-3.23522,53.67231],[-2.60704,53.67533],[-2.60155,53.27155]],[[-0.03942,51.7728],[-0.61563,51.77577],[-0.60465,52.58414],[-0.02843,52.58122],[-0.03942,51.7728]],[[-2.91529,54.03523],[-3.53229,54.02866],[-3.54484,54.43397],[-2.92785,54.44047],[-2.91529,54.03523]],[[-6.30583,57.19689],[-6.3539,57.60015],[-5.69111,57.62295],[-5.64305,57.21995],[-6.30583,57.19689]],[[1.17115,52.57236],[1.19865,52.97594],[1.79788,52.96106],[1.77037,52.55734],[1.17115,52.57236]],[[-2.40225,55.56317],[-2.40088,55.9657],[-1.76084,55.96501],[-1.76222,55.56248],[-2.40225,55.56317]],[[-6.32574,56.38537],[-7.0196,56.35747],[-7.07316,56.76384],[-6.3793,56.79145],[-6.32574,56.38537]],[[-2.42258,54.4431],[-2.42574,54.84188],[-1.79931,54.84354],[-1.79614,54.44477],[-2.42258,54.4431]],[[-3.02701,51.37935],[-3.60589,51.37017],[-3.62237,51.77304],[-3.04349,51.78215],[-3.02701,51.37935]],[[-3.05379,52.18979],[-3.06615,52.59374],[-2.48364,52.60034],[-2.47128,52.19646],[-3.05379,52.18979]],[[-5.67673,51.70425],[-5.67886,51.73101],[-5.4636,51.7376],[-5.46146,51.71084],[-5.67673,51.70425]],[[-5.84427,59.10882],[-5.8469,59.13578],[-5.79558,59.1371],[-5.79294,59.11014],[-5.84427,59.10882]],[[-8.64844,57.77861],[-8.66597,57.87717],[-8.46649,57.88721],[-8.44897,57.78867],[-8.64844,57.77861]],[[-4.52711,59.01532],[-4.52859,59.03319],[-4.47623,59.03434],[-4.47475,59.01646],[-4.52711,59.01532]],[[-7.68062,58.25838],[-7.68655,58.2938],[-7.53445,58.30084],[-7.52852,58.26542],[-7.68062,58.25838]],[[-6.19102,59.08009],[-6.19546,59.11586],[-6.12542,59.11815],[-6.12099,59.08238],[-6.19102,59.08009]],[[-4.42669,59.07112],[-4.42805,59.0887],[-4.37621,59.08976],[-4.37485,59.07218],[-4.42669,59.07112]]]},{id:"ACT2017",name:"ACTmapi Imagery 2017",type:"wms",template:"https://data.actmapi.act.gov.au/arcgis/services/actmapi/imagery2017mga/ImageServer/WMSServer?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=0&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",endDate:"2017-05-01T00:00:00.000Z",startDate:"2017-05-01T00:00:00.000Z",zoomExtent:[0,21],polygon:[[[149.085,-35.1171],[149.1509,-35.1157],[149.1509,-35.1335],[149.1736,-35.1335],[149.1739,-35.1512],[149.1957,-35.1512],[149.1962,-35.1689],[149.2177,-35.1683],[149.2192,-35.2048],[149.241,-35.2043],[149.2419,-35.2223],[149.2632,-35.2222],[149.2644,-35.2575],[149.3085,-35.2571],[149.309,-35.2751],[149.3531,-35.2742],[149.3536,-35.2921],[149.3974,-35.2917],[149.3988,-35.3452],[149.3777,-35.3457],[149.3772,-35.3641],[149.3341,-35.3648],[149.3385,-35.5451],[149.1624,-35.5487],[149.1727,-35.9271],[149.0175,-35.9294],[149.0172,-35.9113],[148.9506,-35.9125],[148.9499,-35.8946],[148.9277,-35.8949],[148.9272,-35.8768],[148.9053,-35.8768],[148.9042,-35.8586],[148.8826,-35.859],[148.8805,-35.7695],[148.8361,-35.7698],[148.8359,-35.7521],[148.8138,-35.7524],[148.8131,-35.7343],[148.7909,-35.7347],[148.7911,-35.7167],[148.7688,-35.7167],[148.7617,-35.3924],[148.7839,-35.3921],[148.7822,-35.3022],[148.8041,-35.302],[148.8033,-35.2836],[148.8474,-35.2832],[148.8469,-35.2652],[148.8689,-35.2643],[148.8687,-35.2466],[148.9128,-35.246],[148.9123,-35.2282],[148.9341,-35.228],[148.9329,-35.1919],[148.999,-35.1904],[148.9986,-35.1724],[149.0206,-35.172],[149.0204,-35.154],[149.0637,-35.1532],[149.0635,-35.1355],[149.0857,-35.1348],[149.085,-35.1171]]],terms_url:"https://actmapi-actgov.opendata.arcgis.com/datasets/884456bde6fd46d68e0c05479f55d548",terms_text:"© Jacobs Group (Australia) Pty Ltd and Australian Capital Territory"},{id:"ACT2018",name:"ACTmapi Imagery 2018",type:"wms",template:"https://data.actmapi.act.gov.au/arcgis/services/actmapi/imagery2018mga/ImageServer/WMSServer?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=0&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",endDate:"2018-03-19T00:00:00.000Z",startDate:"2018-03-19T00:00:00.000Z",zoomExtent:[0,21],polygon:[[[149.2695,-35.4381],[149.2669,-35.348],[149.3329,-35.3468],[149.3334,-35.3648],[149.3774,-35.364],[149.3769,-35.3459],[149.3989,-35.3455],[149.3984,-35.3275],[149.4094,-35.3273],[149.4088,-35.3092],[149.3978,-35.3095],[149.3973,-35.2914],[149.3533,-35.2923],[149.3528,-35.2743],[149.3089,-35.2751],[149.3084,-35.2571],[149.2644,-35.2579],[149.2634,-35.2219],[149.2415,-35.2223],[149.241,-35.2043],[149.219,-35.2047],[149.218,-35.1687],[149.1961,-35.1691],[149.1956,-35.151],[149.1737,-35.1514],[149.1732,-35.1334],[149.1512,-35.1338],[149.1508,-35.1158],[149.085,-35.1169],[149.0854,-35.135],[149.0635,-35.1353],[149.0639,-35.1534],[149.0201,-35.1541],[149.0205,-35.1721],[148.9985,-35.1725],[148.999,-35.1905],[148.9331,-35.1916],[148.934,-35.2276],[148.912,-35.228],[148.9124,-35.246],[148.8685,-35.2467],[148.8689,-35.2647],[148.8469,-35.265],[148.8473,-35.2831],[148.8034,-35.2837],[148.8038,-35.3018],[148.7818,-35.3021],[148.7838,-35.3922],[148.8058,-35.3919],[148.8086,-35.5181],[148.7976,-35.5182],[148.7994,-35.5993],[148.8766,-35.5982],[148.8747,-35.517],[148.8527,-35.5174],[148.8508,-35.4363],[148.8398,-35.4364],[148.8388,-35.3914],[149.0039,-35.3888],[149.0048,-35.4248],[149.0268,-35.4244],[149.0277,-35.4605],[149.0497,-35.4601],[149.0511,-35.5142],[149.1613,-35.5122],[149.1594,-35.4402],[149.2695,-35.4381]]],terms_text:"© Jacobs Group (Australia) Pty Ltd and Australian Capital Territory",best:true},{id:"AGIV10cm",name:"AGIV Flanders 2013-2015 aerial imagery 10cm",type:"wms",template:"https://geoservices.informatievlaanderen.be/raadpleegdiensten/OGW/wms?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=OGWRGB13_15VL&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",endDate:"2015-01-01T00:00:00.000Z",startDate:"2013-01-01T00:00:00.000Z",polygon:[[[5.98494,50.70723],[5.98494,50.7672],[5.91079,50.82275],[5.75561,50.83533],[5.75423,50.86264],[5.8332,50.93323],[5.85517,51.02661],[5.90941,51.07754],[5.91216,51.18225],[5.87851,51.20807],[5.77414,51.23689],[5.68419,51.24075],[5.62308,51.26998],[5.62308,51.29789],[5.54,51.34724],[5.4473,51.34853],[5.39855,51.32107],[5.31203,51.32322],[5.26671,51.36182],[5.19942,51.37254],[5.18294,51.39611],[5.15891,51.4924],[5.08338,51.53086],[5.03257,51.53983],[4.95566,51.50522],[4.90142,51.50565],[4.83825,51.54367],[4.77096,51.55862],[4.7119,51.54709],[4.64049,51.49667],[4.6144,51.4971],[4.56565,51.53171],[4.48256,51.53043],[4.42626,51.52189],[4.3006,51.46974],[4.29511,51.42566],[4.18113,51.42437],[4.13718,51.39525],[4.13856,51.35067],[4.05204,51.30047],[3.93325,51.27298],[3.86527,51.27084],[3.86321,51.29016],[3.76296,51.32407],[3.59336,51.35925],[3.47732,51.33137],[3.42582,51.39739],[3.23562,51.35153],[3.226,51.36568],[3.17794,51.36182],[3.16009,51.33223],[3.06258,51.30219],[2.75084,51.1702],[2.47001,51.07452],[2.49267,50.99378],[2.53112,50.95573],[2.50915,50.91159],[2.53043,50.82145],[2.5991,50.76416],[2.66501,50.76459],[2.77007,50.66677],[2.8971,50.65894],[2.99186,50.72549],[3.11339,50.72636],[3.23699,50.70592],[3.36265,50.6585],[3.47114,50.70201],[3.63936,50.66721],[3.69842,50.68156],[3.72794,50.71245],[3.81858,50.68418],[3.87488,50.64152],[4.09255,50.64283],[4.15023,50.66329],[4.20653,50.64413],[4.31365,50.64283],[4.45235,50.68766],[4.53475,50.67808],[4.61303,50.69549],[4.67689,50.69592],[4.72701,50.73201],[4.78057,50.73201],[4.79979,50.71288],[4.86228,50.71288],[4.88563,50.69549],[4.96116,50.69549],[5.03119,50.65763],[5.10741,50.65023],[5.2008,50.64892],[5.23581,50.66546],[5.32508,50.6659],[5.36696,50.682],[5.42121,50.66416],[5.52215,50.6746],[5.6224,50.72418],[5.67527,50.69853],[5.73981,50.69723],[5.77277,50.67199],[5.8126,50.66024],[5.90804,50.65981],[5.98494,50.70723]]],terms_text:"Orthophoto Flanders © AGIV",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/be/BE_GRB_Flanders_TMS.png"},{id:"AGIVFlandersGRB",name:"AGIV Flanders GRB",type:"tms",template:"https://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}",zoomExtent:[0,21],polygon:[[[4.40434,50.78177],[4.45538,50.79328],[4.40268,50.8961],[4.331,50.90094],[4.27142,50.82002],[4.30648,50.81244],[4.36348,50.77251],[4.40434,50.78177],[4.43104,50.73831],[4.31859,50.72022],[4.29031,50.69402],[4.14853,50.72834],[3.95877,50.68947],[3.9097,50.69245],[3.89113,50.74333],[3.77568,50.74789],[3.75857,50.78045],[3.67752,50.77062],[3.64047,50.72242],[3.54139,50.73377],[3.54062,50.76307],[3.46005,50.76556],[3.3522,50.70614],[3.30562,50.75466],[3.17839,50.75609],[3.15329,50.78564],[3.02008,50.77312],[2.99943,50.81035],[2.91648,50.75356],[2.85476,50.75745],[2.86521,50.70565],[2.78473,50.7369],[2.713,50.81534],[2.63518,50.8129],[2.59909,50.85306],[2.59031,50.91893],[2.63262,50.94575],[2.57372,51.00842],[2.54165,51.09345],[3.15582,51.32714],[3.18307,51.37128],[3.23443,51.34669],[3.36356,51.37228],[3.38101,51.27446],[3.44201,51.24313],[3.52759,51.24604],[3.51511,51.28753],[3.58984,51.30577],[3.7783,51.26235],[3.79088,51.21429],[3.92412,51.21938],[4.16613,51.2929],[4.26163,51.37647],[4.42065,51.36473],[4.39108,51.45149],[4.54747,51.48571],[4.53541,51.42303],[4.64953,51.42758],[4.76359,51.5088],[4.84188,51.48074],[4.8383,51.42174],[4.89366,51.41698],[4.92785,51.39544],[5.02894,51.48789],[5.08018,51.46948],[5.10202,51.42892],[5.07117,51.3935],[5.13109,51.35137],[5.13448,51.31547],[5.20031,51.32172],[5.24189,51.30534],[5.23036,51.26436],[5.34828,51.27492],[5.41741,51.26229],[5.4863,51.30197],[5.5556,51.26986],[5.56045,51.22233],[5.76027,51.18505],[5.85578,51.14463],[5.75909,51.03588],[5.72665,50.91307],[5.64522,50.8372],[5.68732,50.804],[5.47863,50.72352],[5.41196,50.72368],[5.38908,50.74775],[5.30912,50.71802],[5.16984,50.72257],[5.16508,50.6957],[5.05642,50.71567],[5.00339,50.76594],[4.92545,50.74275],[4.90869,50.76968],[4.83106,50.77028],[4.76014,50.80544],[4.64309,50.79755],[4.65486,50.7552],[4.62021,50.74348],[4.59727,50.76359],[4.52399,50.72724],[4.49455,50.75679],[4.43104,50.73831],[4.40434,50.78177]],[[5.67393,50.75373],[5.88438,50.70114],[5.94172,50.76524],[5.76662,50.78761],[5.67393,50.75373]],[[4.91171,51.43492],[4.93711,51.42614],[4.95891,51.45471],[4.92801,51.46049],[4.91171,51.43492]]],terms_text:"GRB Flanders © AGIV",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/be/BE_GRB_Flanders_TMS.png"},{id:"AGIV",name:"AGIV Flanders most recent aerial imagery",type:"tms",template:"https://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}",zoomExtent:[0,21],polygon:[[[4.7737,50.79368],[4.8379,50.75916],[4.92511,50.73483],[4.98862,50.76264],[5.036,50.73527],[5.0645,50.69875],[5.1644,50.69005],[5.19393,50.71179],[5.3086,50.71245],[5.36422,50.74396],[5.43391,50.70766],[5.54378,50.74396],[5.61141,50.73527],[5.71166,50.73505],[5.77105,50.74092],[5.81946,50.70484],[5.89568,50.70614],[5.9204,50.72831],[5.91971,50.74504],[5.89843,50.77675],[5.81569,50.76351],[5.77517,50.79216],[5.69552,50.79737],[5.69072,50.82319],[5.66325,50.82904],[5.65467,50.86481],[5.72368,50.9012],[5.77174,50.95443],[5.75114,50.97368],[5.78273,51.00048],[5.78032,51.0523],[5.80848,51.05338],[5.80951,51.07668],[5.84315,51.09372],[5.84418,51.1101],[5.82599,51.11851],[5.86959,51.14953],[5.8277,51.17365],[5.792,51.16891],[5.7738,51.19344],[5.666,51.1928],[5.64059,51.21065],[5.5709,51.22829],[5.56231,51.27535],[5.49811,51.30605],[5.47099,51.30219],[5.45794,51.2893],[5.43048,51.28823],[5.41434,51.27363],[5.36593,51.282],[5.33641,51.28265],[5.32577,51.26718],[5.24337,51.27406],[5.24989,51.31335],[5.20972,51.32794],[5.14174,51.31914],[5.14209,51.35367],[5.08647,51.39482],[5.11565,51.43615],[5.08853,51.47508],[5.05214,51.47636],[5.04561,51.4939],[5.02364,51.4939],[5.01609,51.48663],[4.82966,51.48663],[4.83001,51.50009],[4.76855,51.51099],[4.74727,51.50394],[4.658,51.4492],[4.65663,51.43144],[4.53956,51.43379],[4.55466,51.48171],[4.5296,51.48748],[4.46368,51.48235],[4.37167,51.45562],[4.37751,51.40553],[4.4139,51.37511],[4.39776,51.36118],[4.34798,51.36675],[4.34627,51.38497],[4.20344,51.38111],[4.2213,51.3511],[4.15641,51.29832],[4.05101,51.25193],[4.00638,51.25279],[3.95144,51.22205],[3.88484,51.22936],[3.81926,51.21797],[3.80038,51.22872],[3.80107,51.26074],[3.74442,51.28007],[3.63593,51.29746],[3.58615,51.31378],[3.5065,51.28308],[3.51371,51.25021],[3.43921,51.25064],[3.39766,51.27513],[3.37329,51.31678],[3.39114,51.34274],[3.3623,51.37961],[3.24283,51.35474],[3.20266,51.37039],[3.15631,51.35196],[3.14223,51.33051],[2.53318,51.09092],[2.56476,50.9968],[2.61832,50.9527],[2.57781,50.91852],[2.5936,50.88431],[2.58948,50.85051],[2.6245,50.80757],[2.71033,50.8054],[2.78449,50.71853],[2.87375,50.69983],[2.86483,50.74765],[2.92525,50.75156],[2.97263,50.77024],[2.97332,50.79889],[3.00078,50.79759],[3.01383,50.76676],[3.09863,50.76611],[3.13537,50.78196],[3.16832,50.75004],[3.30428,50.74613],[3.31561,50.71484],[3.3678,50.70179],[3.44848,50.75091],[3.53293,50.75156],[3.53328,50.72549],[3.63902,50.7131],[3.69086,50.7672],[3.75163,50.76177],[3.7712,50.73874],[3.87729,50.73983],[3.87969,50.70418],[3.9202,50.68352],[3.99951,50.682],[4.06749,50.68961],[4.16018,50.72049],[4.17632,50.70331],[4.24739,50.68222],[4.31708,50.69418],[4.31846,50.70962],[4.38403,50.71027],[4.38437,50.72353],[4.47226,50.74743],[4.52617,50.71853],[4.55226,50.73766],[4.64908,50.73722],[4.6532,50.78717],[4.72426,50.78218],[4.73731,50.79585],[4.7737,50.79368]]],terms_text:"Orthophoto Flanders most recent © AGIV",best:true,icon:"https://osmlab.github.io/editor-layer-index/sources/europe/be/BE_GRB_Flanders_TMS.png"},{id:"AGRI-black_and_white-2.5m",name:"AGRI black-and-white 2.5m",type:"tms",template:"https://{switch:a,b,c}.agri.openstreetmap.org/layer/au_ga_agri/{zoom}/{x}/{y}.png",endDate:"2011-01-01T00:00:00.000Z",startDate:"2006-01-01T00:00:00.000Z",zoomExtent:[0,16],polygon:[[[112.28778,-28.78459],[112.71488,-31.13894],[114.11263,-34.17829],[113.60788,-37.39012],[117.17992,-37.45179],[119.31538,-37.42096],[121.72262,-36.70839],[123.81925,-35.76893],[125.9547,-34.3066],[127.97368,-33.7274],[130.07031,-33.24166],[130.10913,-33.8887],[131.00214,-34.04971],[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.36829],[142.3783,-40.64702],[142.49478,-42.07487],[144.009,-44.06013],[147.23161,-44.03222],[149.05645,-42.53431],[149.52237,-40.99959],[149.9494,-40.85292],[150.8036,-38.09627],[151.81313,-38.12682],[156.20052,-22.66771],[156.20052,-20.10109],[156.62761,-17.41763],[155.26869,-17.19521],[154.14272,-19.51662],[153.5215,-18.34139],[153.05558,-16.5636],[152.78379,-15.25677],[152.27905,-13.4135],[151.3472,-12.39177],[149.48354,-12.05024],[146.9598,-9.99241],[135.9719,-9.99241],[130.3032,-10.33636],[128.09016,-12.16414],[125.91588,-12.31591],[124.3239,-11.86033],[122.03323,-11.97429],[118.26706,-16.9353],[115.93747,-19.11357],[114.0738,-21.11863],[113.49141,-22.59603],[112.28778,-28.78459]]],terms_url:"https://data.gov.au/dataset/agri-the-australian-geographic-reference-image",terms_text:"AGRI, Geoscience Australia"},{id:"alagoas_litoral",name:"Alagoas Litoral 2006",type:"wms",template:"http://geoserver.dados.al.gov.br:8080/geoserver/Alagoas/ows?LAYERS=Ortofotos%202006&SERVICE=WMS&FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.0&SERVICE=WMS&REQUEST=GetMap&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[-35.52384,-9.48089],[-35.5236,-9.44515],[-35.51572,-9.44518],[-35.51584,-9.44229],[-35.50542,-9.44238],[-35.50518,-9.43064],[-35.49334,-9.43073],[-35.49304,-9.3982],[-35.4893,-9.39817],[-35.48921,-9.38628],[-35.4854,-9.38634],[-35.48525,-9.37809],[-35.48127,-9.37812],[-35.48114,-9.36987],[-35.47698,-9.36996],[-35.47686,-9.36385],[-35.47459,-9.36388],[-35.47447,-9.36153],[-35.47212,-9.36141],[-35.47206,-9.35917],[-35.46976,-9.3592],[-35.46967,-9.35682],[-35.46653,-9.35676],[-35.46641,-9.35289],[-35.46387,-9.35277],[-35.46387,-9.35119],[-35.44135,-9.35131],[-35.44125,-9.34541],[-35.43177,-9.34538],[-35.43171,-9.33602],[-35.39463,-9.33632],[-35.39442,-9.30125],[-35.38165,-9.30143],[-35.38147,-9.28638],[-35.37799,-9.28626],[-35.37796,-9.2811],[-35.36942,-9.28122],[-35.36921,-9.27261],[-35.35966,-9.27276],[-35.35969,-9.26465],[-35.35051,-9.26474],[-35.35036,-9.25562],[-35.34115,-9.25565],[-35.34118,-9.24501],[-35.31775,-9.24519],[-35.3176,-9.22567],[-35.30292,-9.22579],[-35.30283,-9.2113],[-35.30794,-9.21136],[-35.30785,-9.19979],[-35.29103,-9.19988],[-35.29091,-9.1966],[-35.29018,-9.19669],[-35.28997,-9.16516],[-35.27759,-9.16522],[-35.2775,-9.16417],[-35.27541,-9.1642],[-35.27535,-9.16152],[-35.27375,-9.16149],[-35.27366,-9.15839],[-35.27182,-9.15842],[-35.27185,-9.15729],[-35.27149,-9.15729],[-35.27143,-9.15469],[-35.26965,-9.15463],[-35.26959,-9.15362],[-35.26919,-9.15362],[-35.26907,-9.13159],[-35.26403,-9.13165],[-35.264,-9.12318],[-35.26056,-9.12321],[-35.26053,-9.11781],[-35.256,-9.11784],[-35.25573,-9.08946],[-35.25114,-9.08955],[-35.25108,-9.08651],[-35.25026,-9.08648],[-35.25029,-9.08475],[-35.24449,-9.08478],[-35.24449,-9.07989],[-35.24093,-9.07997],[-35.24081,-9.07312],[-35.23734,-9.07312],[-35.23719,-9.06322],[-35.23655,-9.06322],[-35.23652,-9.04655],[-35.23323,-9.04652],[-35.23332,-9.04345],[-35.2306,-9.04348],[-35.2306,-9.04014],[-35.22897,-9.04008],[-35.229,-9.03835],[-35.22505,-9.03826],[-35.22502,-9.03167],[-35.2223,-9.03161],[-35.22233,-9.02012],[-35.21834,-9.02009],[-35.21831,-9.01341],[-35.21671,-9.01341],[-35.21668,-9.00998],[-35.21176,-9.00998],[-35.21173,-9.00647],[-35.20971,-9.00653],[-35.20974,-9.00438],[-35.20765,-9.00432],[-35.20768,-9.00226],[-35.20566,-9.00226],[-35.20563,-8.99987],[-35.20391,-8.99987],[-35.20394,-8.99785],[-35.20213,-8.99791],[-35.20213,-8.99579],[-35.19844,-8.99582],[-35.19844,-8.99361],[-35.19434,-8.99361],[-35.19428,-8.99122],[-35.19065,-8.99131],[-35.19062,-8.98833],[-35.18766,-8.98842],[-35.18763,-8.98544],[-35.18473,-8.98541],[-35.18467,-8.98255],[-35.18238,-8.98252],[-35.18235,-8.98052],[-35.17951,-8.98061],[-35.17948,-8.97742],[-35.17809,-8.97745],[-35.17803,-8.97306],[-35.17558,-8.97303],[-35.17549,-8.96912],[-35.17293,-8.96909],[-35.17284,-8.96292],[-35.17063,-8.96289],[-35.17048,-8.95579],[-35.16852,-8.95564],[-35.16852,-8.94806],[-35.16794,-8.948],[-35.16791,-8.93995],[-35.16245,-8.93995],[-35.16242,-8.92978],[-35.1587,-8.92981],[-35.15873,-8.92662],[-35.15547,-8.92668],[-35.1555,-8.92378],[-35.15348,-8.92381],[-35.15339,-8.92065],[-35.15131,-8.92062],[-35.15122,-8.91194],[-35.15263,-8.91194],[-35.15263,-8.90821],[-35.15439,-8.90824],[-35.1543,-8.90215],[-35.15593,-8.90212],[-35.15593,-8.90051],[-35.15768,-8.90048],[-35.15774,-8.89905],[-35.15958,-8.89908],[-35.15955,-8.89747],[-35.16139,-8.8975],[-35.16133,-8.89625],[-35.16363,-8.89625],[-35.1636,-8.89526],[-35.16553,-8.89526],[-35.1655,-8.89315],[-35.16794,-8.89315],[-35.16791,-8.89147],[-35.17024,-8.89153],[-35.17027,-8.8904],[-35.17302,-8.89043],[-35.17302,-8.88876],[-35.17791,-8.88876],[-35.17794,-8.88795],[-35.17894,-8.88792],[-35.17894,-8.88891],[-35.17966,-8.88894],[-35.17978,-8.88858],[-35.18099,-8.88861],[-35.18099,-8.88816],[-35.18519,-8.88816],[-35.18519,-8.88897],[-35.18591,-8.889],[-35.18591,-8.88971],[-35.18932,-8.88971],[-35.18947,-8.8893],[-35.19014,-8.88927],[-35.19017,-8.88831],[-35.19071,-8.88831],[-35.19077,-8.88789],[-35.19153,-8.88792],[-35.19156,-8.88619],[-35.19754,-8.88607],[-35.19757,-8.8873],[-35.19968,-8.8873],[-35.19974,-8.88777],[-35.2008,-8.88777],[-35.2008,-8.88822],[-35.2033,-8.88822],[-35.20337,-8.8887],[-35.20563,-8.88861],[-35.20557,-8.88983],[-35.20741,-8.8898],[-35.20744,-8.89022],[-35.21125,-8.89025],[-35.21128,-8.88769],[-35.21245,-8.88777],[-35.21248,-8.88861],[-35.21623,-8.88858],[-35.21623,-8.88748],[-35.21871,-8.88745],[-35.21871,-8.88897],[-35.22136,-8.88897],[-35.22263,-8.88792],[-35.22402,-8.88748],[-35.22453,-8.88763],[-35.22644,-8.88718],[-35.22707,-8.88598],[-35.23311,-8.88446],[-35.23933,-8.88339],[-35.24129,-8.88416],[-35.25011,-8.88515],[-35.25624,-8.88506],[-35.26168,-8.88294],[-35.26161,-8.88094],[-35.26406,-8.88109],[-35.26877,-8.8793],[-35.27421,-8.87748],[-35.2781,-8.87518],[-35.28499,-8.87507],[-35.28502,-8.87581],[-35.2881,-8.87578],[-35.29405,-8.87545],[-35.30782,-8.87208],[-35.31757,-8.86961],[-35.32784,-8.86716],[-35.33206,-8.86614],[-35.34103,-8.86376],[-35.3471,-8.86244],[-35.3522,-8.86113],[-35.35257,-8.86391],[-35.34903,-8.86611],[-35.34496,-8.87205],[-35.34327,-8.87489],[-35.34318,-8.87569],[-35.34381,-8.87668],[-35.34481,-8.8768],[-35.34888,-8.87721],[-35.35042,-8.87781],[-35.35254,-8.87891],[-35.35399,-8.88011],[-35.35577,-8.88252],[-35.35755,-8.88396],[-35.36036,-8.88512],[-35.36114,-8.88509],[-35.3612,-8.88587],[-35.36175,-8.8859],[-35.36178,-8.88777],[-35.36253,-8.88783],[-35.36247,-8.891],[-35.36311,-8.89112],[-35.36311,-8.89482],[-35.3644,-8.89488],[-35.36507,-8.8967],[-35.36637,-8.90022],[-35.36754,-8.90427],[-35.36794,-8.90782],[-35.36863,-8.90917],[-35.37207,-8.91155],[-35.3741,-8.91349],[-35.37277,-8.916],[-35.37262,-8.91817],[-35.37084,-8.92229],[-35.37062,-8.92486],[-35.37235,-8.93038],[-35.37153,-8.93193],[-35.37153,-8.93363],[-35.37171,-8.93387],[-35.37171,-8.94362],[-35.36818,-8.94377],[-35.36815,-8.94505],[-35.36927,-8.94511],[-35.36921,-8.94863],[-35.37078,-8.94872],[-35.37081,-8.95182],[-35.37219,-8.95176],[-35.37222,-8.95528],[-35.37319,-8.95531],[-35.37313,-8.95737],[-35.3744,-8.95737],[-35.37446,-8.96012],[-35.37567,-8.96018],[-35.3757,-8.96205],[-35.37688,-8.96208],[-35.37694,-8.96444],[-35.37781,-8.96444],[-35.37775,-8.96617],[-35.38074,-8.96617],[-35.38074,-8.96331],[-35.38288,-8.96328],[-35.38291,-8.95982],[-35.38542,-8.95985],[-35.38542,-8.95722],[-35.38723,-8.95722],[-35.3872,-8.95406],[-35.38947,-8.95409],[-35.38947,-8.95084],[-35.39158,-8.95087],[-35.39158,-8.94792],[-35.39587,-8.94792],[-35.39581,-8.94651],[-35.3972,-8.94654],[-35.39711,-8.94472],[-35.39838,-8.94469],[-35.39838,-8.93915],[-35.40107,-8.93915],[-35.40106,-8.93895],[-35.40167,-8.93894],[-35.40173,-8.93688],[-35.40236,-8.93688],[-35.40236,-8.93628],[-35.40324,-8.9364],[-35.4033,-8.93583],[-35.40426,-8.9358],[-35.4042,-8.93363],[-35.40574,-8.9336],[-35.40577,-8.93124],[-35.4081,-8.93133],[-35.40804,-8.92927],[-35.40937,-8.9293],[-35.40928,-8.92739],[-35.41085,-8.92742],[-35.41085,-8.92542],[-35.41239,-8.92545],[-35.41236,-8.9239],[-35.41335,-8.92387],[-35.41329,-8.92193],[-35.41523,-8.92196],[-35.41523,-8.91999],[-35.41655,-8.92002],[-35.41655,-8.91755],[-35.4196,-8.91755],[-35.41966,-8.91964],[-35.42184,-8.91964],[-35.42187,-8.92265],[-35.42389,-8.92268],[-35.42392,-8.92513],[-35.42537,-8.92513],[-35.42537,-8.92766],[-35.42724,-8.92766],[-35.42727,-8.92987],[-35.42815,-8.92984],[-35.42818,-8.9316],[-35.42987,-8.93154],[-35.4299,-8.93407],[-35.43141,-8.93407],[-35.43141,-8.9356],[-35.43226,-8.93557],[-35.43229,-8.93586],[-35.4334,-8.93583],[-35.4334,-8.94001],[-35.43434,-8.94004],[-35.43434,-8.94097],[-35.43531,-8.94097],[-35.43534,-8.94261],[-35.43567,-8.94264],[-35.4357,-8.94329],[-35.43627,-8.94332],[-35.43624,-8.94422],[-35.4373,-8.94422],[-35.43727,-8.9452],[-35.43823,-8.9452],[-35.43827,-8.94684],[-35.43902,-8.94687],[-35.43902,-8.94798],[-35.44026,-8.94798],[-35.44032,-8.94953],[-35.44159,-8.94956],[-35.44165,-8.95152],[-35.44273,-8.95152],[-35.44273,-8.95334],[-35.44436,-8.95334],[-35.44436,-8.95498],[-35.44569,-8.95501],[-35.44563,-8.95674],[-35.4472,-8.9568],[-35.44717,-8.95865],[-35.44895,-8.95871],[-35.44892,-8.96],[-35.45101,-8.95994],[-35.45098,-8.96101],[-35.45469,-8.96095],[-35.45466,-8.96235],[-35.46049,-8.96235],[-35.46055,-8.96557],[-35.46653,-8.96548],[-35.46659,-8.96885],[-35.46771,-8.96883],[-35.46774,-8.97053],[-35.4739,-8.97053],[-35.47399,-8.9753],[-35.47791,-8.97521],[-35.47797,-8.97816],[-35.4841,-8.97813],[-35.48416,-8.98201],[-35.49084,-8.98195],[-35.49084,-8.98562],[-35.49721,-8.98562],[-35.49721,-8.99069],[-35.50225,-8.99057],[-35.50234,-8.99567],[-35.50648,-8.99567],[-35.50651,-8.99856],[-35.51204,-8.9985],[-35.51207,-9.00163],[-35.51663,-9.00166],[-35.51666,-9.00617],[-35.52119,-9.00614],[-35.52122,-9.00739],[-35.53127,-9.00733],[-35.53127,-9.01064],[-35.54818,-9.01049],[-35.54818,-9.01359],[-35.56968,-9.01344],[-35.56974,-9.01738],[-35.58575,-9.01732],[-35.58578,-9.01995],[-35.60957,-9.01983],[-35.60954,-9.02302],[-35.62911,-9.02287],[-35.62905,-9.02508],[-35.65221,-9.0249],[-35.65224,-9.02758],[-35.67552,-9.0274],[-35.67555,-9.03056],[-35.68295,-9.03056],[-35.68298,-9.03435],[-35.69128,-9.03432],[-35.69128,-9.03766],[-35.6995,-9.0376],[-35.6995,-9.04034],[-35.70668,-9.04031],[-35.70671,-9.04518],[-35.71115,-9.04518],[-35.71133,-9.06691],[-35.70871,-9.06691],[-35.70877,-9.07869],[-35.70656,-9.07872],[-35.70656,-9.08653],[-35.7043,-9.08653],[-35.70433,-9.09104],[-35.69992,-9.09107],[-35.69989,-9.0956],[-35.69536,-9.09557],[-35.69542,-9.10001],[-35.69092,-9.10013],[-35.69101,-9.10207],[-35.63367,-9.10246],[-35.6337,-9.10541],[-35.62585,-9.10553],[-35.62591,-9.10964],[-35.62231,-9.10964],[-35.62234,-9.11203],[-35.6199,-9.112],[-35.6199,-9.11501],[-35.61473,-9.11507],[-35.61473,-9.11707],[-35.61177,-9.11701],[-35.61181,-9.1182],[-35.6096,-9.11826],[-35.60963,-9.12571],[-35.59976,-9.12583],[-35.59979,-9.12923],[-35.59634,-9.12926],[-35.5964,-9.13502],[-35.59197,-9.13507],[-35.59209,-9.149],[-35.59018,-9.14897],[-35.59015,-9.15108],[-35.6016,-9.15105],[-35.60154,-9.14912],[-35.60552,-9.14912],[-35.60549,-9.14557],[-35.61184,-9.14554],[-35.61184,-9.14235],[-35.6176,-9.14238],[-35.61757,-9.13853],[-35.624,-9.13853],[-35.62397,-9.13466],[-35.63177,-9.13466],[-35.63164,-9.13063],[-35.63922,-9.1306],[-35.63919,-9.12878],[-35.66386,-9.12869],[-35.6638,-9.1261],[-35.71278,-9.12577],[-35.71275,-9.12407],[-35.72426,-9.12401],[-35.71964,-9.15323],[-35.72112,-9.1532],[-35.72124,-9.17258],[-35.72066,-9.17255],[-35.72082,-9.18558],[-35.71212,-9.18566],[-35.7133,-9.34416],[-35.69041,-9.34433],[-35.69065,-9.37189],[-35.68899,-9.37189],[-35.68902,-9.37598],[-35.68757,-9.37598],[-35.68766,-9.38232],[-35.68497,-9.38235],[-35.68503,-9.39093],[-35.68168,-9.39099],[-35.68177,-9.39936],[-35.67715,-9.39933],[-35.67724,-9.4089],[-35.67292,-9.40893],[-35.67301,-9.41754],[-35.66972,-9.4176],[-35.66978,-9.42498],[-35.66722,-9.42498],[-35.66728,-9.4327],[-35.66075,-9.43288],[-35.66075,-9.43705],[-35.6513,-9.43708],[-35.65142,-9.44211],[-35.64514,-9.44217],[-35.64523,-9.44652],[-35.63645,-9.44661],[-35.63645,-9.44992],[-35.62711,-9.45],[-35.62727,-9.46505],[-35.62086,-9.46511],[-35.62092,-9.4722],[-35.60939,-9.47222],[-35.60939,-9.47529],[-35.59674,-9.47535],[-35.59674,-9.47351],[-35.57844,-9.47371],[-35.57847,-9.47595],[-35.57267,-9.47604],[-35.5727,-9.48042],[-35.56823,-9.48048],[-35.56826,-9.48881],[-35.54169,-9.48893],[-35.54163,-9.48071],[-35.52384,-9.48089]]],terms_url:"http://www.seplag.al.gov.br",terms_text:"Secretaria de Estado do Planejamento, Gestão e Patrimônio"},{id:"arapiraca_al",name:"Arapiraca AL",type:"wms",template:"http://geoserver.dados.al.gov.br:8080/geoserver/Alagoas/ows?LAYERS=Arapiraca&SERVICE=WMS&FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.0&SERVICE=WMS&REQUEST=GetMap&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[-36.60875,-9.83072],[-36.60784,-9.74047],[-36.61718,-9.74051],[-36.61631,-9.65075],[-36.70737,-9.64977],[-36.70832,-9.74043],[-36.69898,-9.74047],[-36.69997,-9.82968],[-36.60875,-9.83072]]],terms_url:"http://www.seplag.al.gov.br",terms_text:"Secretaria de Estado do Planejamento, Gestão e Patrimônio"},{id:"CRAIG-Auvergne-2013",name:"Auvergne 2013 25cm CRAIG",type:"tms",template:"https://tiles.craig.fr/osm/wmts/1.0.0/ortho_2013/webmercator/{zoom}/{x}/{y}.jpeg",endDate:"2013-01-01T00:00:00.000Z",startDate:"2013-01-01T00:00:00.000Z",zoomExtent:[0,21],polygon:[[[2.94012,44.63388],[2.99719,44.63393],[2.99717,44.64734],[3.01597,44.64735],[3.01593,44.67412],[3.03495,44.67413],[3.0349,44.70152],[3.05363,44.70154],[3.05357,44.7419],[3.07233,44.74191],[3.07222,44.80917],[3.09216,44.80919],[3.09214,44.82213],[3.13014,44.82216],[3.13005,44.87707],[3.14856,44.87709],[3.14858,44.8637],[3.16823,44.86371],[3.16825,44.85003],[3.2064,44.85006],[3.20638,44.86284],[3.24395,44.86287],[3.24393,44.87679],[3.26315,44.87681],[3.26308,44.91752],[3.32004,44.91757],[3.32002,44.93033],[3.33908,44.93035],[3.33906,44.9442],[3.377,44.94423],[3.37702,44.93029],[3.39603,44.9303],[3.39612,44.87627],[3.41483,44.87629],[3.41489,44.83553],[3.43334,44.83554],[3.43338,44.80828],[3.45255,44.80829],[3.45258,44.79463],[3.50893,44.79468],[3.5089,44.80815],[3.60426,44.80823],[3.60422,44.83482],[3.62361,44.83484],[3.62357,44.86166],[3.64248,44.86167],[3.64255,44.8211],[3.66101,44.82112],[3.66103,44.80777],[3.6993,44.8078],[3.69928,44.82099],[3.73611,44.82102],[3.73618,44.77971],[3.77511,44.77974],[3.77515,44.75223],[3.81184,44.75226],[3.81186,44.7392],[3.83118,44.73922],[3.83121,44.72468],[3.88782,44.72472],[3.8878,44.73818],[3.92563,44.73821],[3.9256,44.75167],[3.94541,44.75168],[3.94537,44.77847],[3.96437,44.77848],[3.96435,44.79193],[4.00332,44.79196],[4.0033,44.80526],[4.02169,44.80527],[4.02167,44.81857],[4.05965,44.8186],[4.05961,44.84492],[4.07981,44.84494],[4.07979,44.85735],[4.17388,44.85743],[4.17386,44.87055],[4.19326,44.87056],[4.19323,44.88427],[4.21404,44.88429],[4.214,44.91002],[4.23241,44.91004],[4.23237,44.93731],[4.27155,44.93734],[4.27153,44.9503],[4.32887,44.95034],[4.32878,45.00367],[4.34893,45.00368],[4.3489,45.01707],[4.40608,45.01711],[4.40599,45.071],[4.38847,45.07099],[4.38845,45.0846],[4.40794,45.08461],[4.40792,45.09663],[4.48436,45.09669],[4.48429,45.13705],[4.46636,45.13703],[4.46634,45.1502],[4.48645,45.15022],[4.4864,45.17724],[4.50655,45.17726],[4.50644,45.24501],[4.48813,45.24499],[4.48811,45.25921],[4.46986,45.25919],[4.46984,45.27298],[4.45088,45.27297],[4.45086,45.28642],[4.39368,45.28637],[4.39363,45.31352],[4.37509,45.3135],[4.37507,45.32741],[4.39507,45.32742],[4.39503,45.35458],[4.37679,45.35457],[4.37676,45.36855],[4.35766,45.36853],[4.35763,45.38234],[4.28146,45.38227],[4.28143,45.39688],[4.24446,45.39685],[4.24443,45.41079],[4.14812,45.41071],[4.14814,45.39807],[4.12919,45.39805],[4.12921,45.38409],[4.09021,45.38406],[4.09024,45.37121],[4.01355,45.37115],[4.01353,45.3861],[3.91709,45.38602],[3.91707,45.39974],[3.93757,45.39975],[3.93755,45.41311],[3.97528,45.41315],[3.97526,45.42621],[3.99537,45.42622],[3.9957,45.52096],[3.97778,45.52094],[3.97769,45.57439],[3.95818,45.57437],[3.95815,45.58837],[3.9396,45.58835],[3.93958,45.60262],[3.92023,45.60261],[3.9202,45.61646],[3.88189,45.61643],[3.88185,45.64328],[3.84413,45.64325],[3.84411,45.65709],[3.82617,45.65707],[3.82612,45.68389],[3.80722,45.68387],[3.80713,45.73758],[3.78821,45.73756],[3.78819,45.7518],[3.76885,45.75178],[3.7688,45.77897],[3.75072,45.77895],[3.75058,45.86066],[3.76967,45.86067],[3.76958,45.91433],[3.75166,45.91432],[3.75164,45.92809],[3.7329,45.92807],[3.73285,45.95472],[3.81018,45.95478],[3.81016,45.96823],[3.8496,45.96826],[3.84951,46.02162],[3.83188,46.0216],[3.83179,46.07591],[3.8505,46.07592],[3.85046,46.10295],[3.83247,46.10294],[3.83234,46.18456],[3.81422,46.18455],[3.81415,46.22442],[3.83369,46.22444],[3.83366,46.2381],[3.85289,46.23812],[3.85287,46.25147],[3.89314,46.25151],[3.89312,46.26447],[3.91306,46.26448],[3.91303,46.27793],[3.95189,46.27796],[3.95187,46.29082],[3.97152,46.29084],[3.9715,46.30369],[4.0105,46.30373],[4.01048,46.31776],[4.02983,46.31778],[4.02978,46.34428],[4.0116,46.34427],[4.01146,46.42534],[4.03153,46.42536],[4.03146,46.4658],[4.01324,46.46578],[4.01322,46.47938],[3.99437,46.47936],[3.99435,46.49361],[3.9746,46.4936],[3.97457,46.50753],[3.87754,46.50745],[3.8775,46.53478],[3.85836,46.53476],[3.85833,46.54832],[3.81869,46.54828],[3.81871,46.53553],[3.79924,46.53552],[3.79922,46.54907],[3.76104,46.54904],[3.76092,46.61681],[3.74233,46.61679],[3.74228,46.64396],[3.72286,46.64395],[3.72281,46.67104],[3.70387,46.67102],[3.70385,46.68467],[3.68411,46.68466],[3.68406,46.712],[3.66484,46.71198],[3.66479,46.73904],[3.64576,46.73902],[3.64572,46.76634],[3.62575,46.76632],[3.62573,46.77971],[3.56723,46.77966],[3.56725,46.76631],[3.54715,46.76629],[3.54719,46.73928],[3.52716,46.73927],[3.52723,46.6989],[3.48774,46.69887],[3.48776,46.68594],[3.46796,46.68593],[3.46794,46.69941],[3.46792,46.71279],[3.44865,46.71278],[3.44863,46.72679],[3.35043,46.72671],[3.35048,46.6999],[3.33039,46.69988],[3.33034,46.7272],[3.23272,46.72712],[3.23274,46.71351],[3.2129,46.7135],[3.21293,46.70013],[3.17354,46.7001],[3.1735,46.72751],[3.15412,46.72749],[3.1541,46.74073],[3.11478,46.7407],[3.11475,46.75428],[3.07534,46.75424],[3.0753,46.78135],[3.05597,46.78134],[3.05592,46.80831],[2.99704,46.80826],[2.99702,46.82196],[2.93794,46.82191],[2.93797,46.80826],[2.89866,46.80823],[2.89869,46.79424],[2.87899,46.79422],[2.87901,46.78104],[2.85942,46.78103],[2.85944,46.76771],[2.84004,46.76769],[2.84007,46.75447],[2.7414,46.75439],[2.74138,46.76682],[2.70234,46.76679],[2.70236,46.75389],[2.68266,46.75387],[2.68268,46.74048],[2.66349,46.74046],[2.66351,46.7259],[2.64342,46.72588],[2.64344,46.71309],[2.62414,46.71308],[2.62417,46.69981],[2.60397,46.69979],[2.60399,46.68584],[2.56512,46.68581],[2.56515,46.67261],[2.54593,46.6726],[2.546,46.63215],[2.56592,46.63217],[2.56595,46.61811],[2.54564,46.61809],[2.54569,46.59072],[2.56642,46.59074],[2.56644,46.57754],[2.5855,46.57756],[2.58552,46.56472],[2.56613,46.5647],[2.56616,46.55062],[2.46828,46.55055],[2.4683,46.53582],[2.33212,46.53571],[2.33217,46.50886],[2.31265,46.50884],[2.31267,46.49534],[2.29288,46.49533],[2.2929,46.48182],[2.27487,46.4818],[2.27492,46.45442],[2.25539,46.4544],[2.25553,46.37349],[2.27595,46.37351],[2.27604,46.32087],[2.31456,46.32091],[2.31458,46.30704],[2.35371,46.30707],[2.35373,46.29297],[2.39384,46.293],[2.39389,46.26729],[2.45157,46.26733],[2.4516,46.25349],[2.47094,46.25351],[2.47098,46.22656],[2.49151,46.22657],[2.49155,46.19933],[2.51088,46.19934],[2.51093,46.17278],[2.53117,46.1728],[2.53138,46.05135],[2.55163,46.05137],[2.55166,46.03777],[2.57056,46.03778],[2.57068,45.96994],[2.55144,45.96993],[2.55146,45.95662],[2.53226,45.9566],[2.53228,45.94301],[2.51307,45.94299],[2.51313,45.90203],[2.47494,45.902],[2.47496,45.88882],[2.43619,45.88879],[2.43622,45.87533],[2.41721,45.87531],[2.41725,45.84794],[2.37847,45.84791],[2.3785,45.83397],[2.35952,45.83396],[2.35956,45.80708],[2.37873,45.8071],[2.37875,45.79358],[2.3987,45.79359],[2.39872,45.78035],[2.41825,45.78036],[2.41832,45.74],[2.45722,45.74003],[2.45724,45.7267],[2.47589,45.72671],[2.47591,45.71324],[2.49533,45.71325],[2.49542,45.65913],[2.45769,45.6591],[2.45776,45.61834],[2.43912,45.61833],[2.43919,45.57766],[2.4585,45.57768],[2.45855,45.55053],[2.47809,45.55055],[2.47811,45.53725],[2.49755,45.53726],[2.49759,45.51068],[2.47855,45.51066],[2.47864,45.45613],[2.45978,45.45612],[2.45987,45.40176],[2.42249,45.40173],[2.42247,45.41528],[2.40232,45.41527],[2.40229,45.42882],[2.3256,45.42876],[2.32567,45.38796],[2.34562,45.38798],[2.34566,45.36111],[2.32626,45.36109],[2.32628,45.34721],[2.30738,45.3472],[2.3074,45.3336],[2.28811,45.33358],[2.28813,45.32082],[2.26963,45.3208],[2.26966,45.30621],[2.25066,45.3062],[2.25068,45.29251],[2.23169,45.2925],[2.23171,45.27924],[2.213,45.27922],[2.21305,45.25204],[2.19374,45.25202],[2.19376,45.23811],[2.17561,45.2381],[2.17574,45.15768],[2.15735,45.15767],[2.15744,45.10295],[2.12024,45.10292],[2.12026,45.08955],[2.10067,45.08953],[2.10069,45.07544],[2.08246,45.07543],[2.08255,45.0216],[2.10255,45.02161],[2.1026,44.99445],[2.04574,44.99441],[2.04585,44.92753],[2.06578,44.92755],[2.06589,44.85969],[2.0857,44.8597],[2.08572,44.84581],[2.10556,44.84583],[2.1056,44.81933],[2.12474,44.81934],[2.12477,44.80551],[2.14351,44.80553],[2.14355,44.7786],[2.12561,44.77858],[2.1257,44.72427],[2.10665,44.72426],[2.10671,44.68423],[2.12634,44.68424],[2.12636,44.67074],[2.14598,44.67075],[2.14607,44.61644],[2.18396,44.61648],[2.18398,44.60378],[2.24042,44.60383],[2.24037,44.63095],[2.25948,44.63097],[2.25946,44.64493],[2.31668,44.64498],[2.3167,44.63088],[2.33615,44.6309],[2.33617,44.61758],[2.37242,44.61761],[2.3724,44.63158],[2.41105,44.63161],[2.41107,44.61907],[2.44922,44.61911],[2.4492,44.63232],[2.50486,44.63237],[2.50481,44.65976],[2.52461,44.65977],[2.52457,44.68717],[2.54225,44.68719],[2.54223,44.70122],[2.58071,44.70125],[2.5806,44.76834],[2.61769,44.76837],[2.61762,44.80884],[2.63676,44.80885],[2.63669,44.84929],[2.67331,44.84933],[2.67329,44.86252],[2.69338,44.86253],[2.69333,44.88943],[2.73052,44.88946],[2.73048,44.91645],[2.74992,44.91646],[2.75005,44.83647],[2.80733,44.83652],[2.80731,44.8491],[2.82638,44.84912],[2.8264,44.83628],[2.8457,44.8363],[2.84577,44.79571],[2.86422,44.79573],[2.86426,44.76865],[2.88399,44.76866],[2.88403,44.74197],[2.90203,44.74198],[2.90214,44.67432],[2.92198,44.67434],[2.92202,44.6473],[2.9401,44.64731],[2.94012,44.63388]]],terms_url:"http://ids.craig.fr/geocat/srv/fre/catalog.search?node=srv#/metadata/8cabc987-829c-4c9f-943b-6a0e255cd73",terms_text:"Orthophotographie CRAIG/Sintegra/IGN 2013"},{id:"CRAIG-Auvergne-2016",name:"Auvergne 2016 25cm CRAIG",type:"tms",template:"https://tiles.craig.fr/ortho/wmts/1.0.0/ortho_2016/webmercator/{zoom}/{x}/{y}.jpeg",endDate:"2016-01-01T00:00:00.000Z",startDate:"2016-01-01T00:00:00.000Z",zoomExtent:[0,21],polygon:[[[2.49389,46.66829],[2.71362,46.84141],[3.64746,46.80758],[4.04846,46.48327],[4.03747,46.24825],[4.46044,46.25965],[4.4934,46.14559],[4.38354,46.09229],[4.45495,45.69084],[4.76257,45.57176],[4.81201,45.34443],[4.22424,44.84419],[3.86169,44.696],[3.37829,44.80523],[3.33435,44.89091],[3.18054,44.82471],[3.03222,44.60612],[2.92785,44.60221],[2.71911,44.85198],[2.51037,44.60221],[2.12585,44.58265],[2.005,44.97257],[2.30712,45.46784],[2.43347,45.44087],[2.41149,45.72919],[2.34558,45.82402],[2.54882,45.97979],[2.46093,46.22166],[2.21374,46.33935],[2.27828,46.53903],[2.54882,46.56642],[2.49389,46.66829]]],terms_url:"http://ids.craig.fr/geocat/srv/fre/catalog.search?node=srv#/metadata/e37c057b-5884-429b-8bec-5db0baef0ee",terms_text:"CRAIG - IGN -TopoGEODIS - Feder Auvergne-Rhône-Alpes 2016"},{id:"BANO",name:"BANO",type:"tms",template:"https://{switch:a,b,c}.layers.openstreetmap.fr/bano/{zoom}/{x}/{y}.png",zoomExtent:[12,20],polygon:[[[-2.7,43.9],[-6.3,48.98],[-2.25,50.09],[1.31,50.88],[2.35816,51.32937],[2.5488,51.09759],[2.57048,51.07409],[2.58741,51.01763],[2.59845,51.0051],[2.61558,50.99749],[2.63986,50.95766],[2.64225,50.94578],[2.62452,50.9256],[2.61962,50.91067],[2.62396,50.86071],[2.62781,50.85054],[2.63786,50.83696],[2.6511,50.82906],[2.73267,50.81738],[2.79995,50.73795],[2.81655,50.73092],[2.85265,50.73335],[2.89072,50.7162],[2.90492,50.71536],[2.9161,50.72418],[2.93508,50.75592],[3.00718,50.78377],[3.08218,50.78749],[3.09244,50.79092],[3.11412,50.80566],[3.14877,50.80195],[3.2154,50.73111],[3.22149,50.7267],[3.27051,50.70375],[3.27545,50.67757],[3.26576,50.6604],[3.26588,50.64054],[3.28922,50.60028],[3.29219,50.55037],[3.3056,50.53267],[3.37551,50.50839],[3.3898,50.50884],[3.4748,50.54445],[3.52173,50.53459],[3.53266,50.51873],[3.54779,50.51012],[3.61523,50.50558],[3.67378,50.45642],[3.68415,50.35277],[3.6901,50.34044],[3.70258,50.33482],[3.71576,50.33854],[3.74935,50.36279],[3.84109,50.36558],[3.90189,50.3436],[3.91317,50.34291],[4.02672,50.36904],[4.13761,50.29984],[4.14388,50.29727],[4.21444,50.28167],[4.22904,50.26664],[4.23078,50.25233],[4.17084,50.18579],[4.16601,50.16888],[4.1764,50.1547],[4.21195,50.13602],[4.24074,50.07102],[4.23193,50.05551],[4.18164,50.03436],[4.17177,50.02537],[4.16976,50.01217],[4.1765,50.00065],[4.20633,49.97546],[4.22164,49.97089],[4.30877,49.98145],[4.44542,49.9523],[4.45469,49.95251],[4.6581,50.00609],[4.66936,50.01392],[4.67293,50.02716],[4.66924,50.06972],[4.69517,50.10472],[4.83123,50.17941],[4.8815,50.16436],[4.90479,50.14451],[4.90426,50.12639],[4.88076,50.0815],[4.86277,50.0745],[4.85104,50.06216],[4.84331,50.03884],[4.84331,50.03883],[4.8433,50.03881],[4.82678,49.989],[4.82662,49.97692],[4.83343,49.96696],[4.89654,49.91753],[4.89755,49.89424],[4.87913,49.86942],[4.87625,49.85111],[4.88924,49.81266],[4.89769,49.80204],[4.91098,49.79926],[4.99534,49.81116],[5.01867,49.79272],[5.02686,49.78886],[5.09944,49.77323],[5.13458,49.73462],[5.1412,49.72984],[5.18761,49.70906],[5.19602,49.70732],[5.28157,49.70836],[5.33363,49.67308],[5.344,49.65049],[5.3544,49.64041],[5.43141,49.60791],[5.48205,49.52815],[5.49294,49.51979],[5.50666,49.52042],[5.55401,49.54025],[5.59311,49.53424],[5.6076,49.53761],[5.641,49.56095],[5.70676,49.55267],[5.71578,49.55361],[5.77526,49.57414],[5.8399,49.55321],[5.86126,49.52038],[5.876,49.5114],[5.97516,49.50129],[5.99801,49.47317],[6.01627,49.46597],[6.08635,49.47562],[6.09319,49.47787],[6.17397,49.52187],[6.24643,49.52511],[6.334,49.48235],[6.34423,49.48037],[6.43515,49.487],[6.5451,49.44384],[6.60639,49.37868],[6.60497,49.33739],[6.61627,49.31869],[6.67013,49.29269],[6.72996,49.22917],[6.74328,49.19086],[6.76026,49.17752],[6.80904,49.17284],[6.82473,49.17826],[6.83093,49.19366],[6.82982,49.21802],[6.85119,49.23136],[6.88453,49.2239],[6.89322,49.22389],[6.93753,49.23369],[7.04055,49.19794],[7.0463,49.17503],[7.05478,49.16313],[7.06908,49.16018],[7.10494,49.16634],[7.14315,49.14159],[7.1535,49.13839],[7.28683,49.13488],[7.29893,49.13856],[7.36095,49.18259],[7.45012,49.19517],[7.50113,49.17672],[7.54379,49.10572],[7.5579,49.09626],[7.6296,49.08527],[7.64722,49.06722],[7.6612,49.06119],[7.75401,49.05963],[7.76073,49.06067],[7.80291,49.07489],[7.85525,49.05329],[7.8673,49.05227],[7.93826,49.06832],[8.08069,49.00688],[8.2225,48.98787],[8.23704,48.97683],[8.23589,48.95817],[8.20888,48.94863],[8.20089,48.94339],[8.15824,48.89753],[8.10087,48.7993],[7.99071,48.74478],[7.98534,48.7409],[7.90422,48.65865],[7.85605,48.63606],[7.8484,48.62977],[7.81842,48.58883],[7.81456,48.57704],[7.81449,48.50968],[7.78547,48.48337],[7.78055,48.47652],[7.74506,48.39484],[7.74357,48.38427],[7.75159,48.32322],[7.71085,48.29841],[7.70241,48.28803],[7.67661,48.21555],[7.59605,48.11698],[7.59165,48.10648],[7.58522,48.04694],[7.59127,48.03035],[7.62437,47.99865],[7.63205,47.97081],[7.57554,47.87436],[7.5728,47.86435],[7.57267,47.83631],[7.54581,47.78793],[7.54418,47.77232],[7.55758,47.72899],[7.53526,47.6989],[7.53136,47.68564],[7.537,47.67302],[7.60016,47.60822],[7.58967,47.56755],[7.55424,47.55128],[7.54511,47.54283],[7.51256,47.48439],[7.38747,47.42111],[7.32653,47.4273],[7.24435,47.40939],[7.16708,47.4335],[7.15212,47.47612],[7.14279,47.48707],[7.12853,47.48893],[7.0801,47.47718],[7.03557,47.48695],[7.02102,47.48458],[7.01205,47.47287],[7.003,47.44095],[6.9551,47.40808],[6.94716,47.39698],[6.94818,47.38337],[6.95769,47.37359],[6.97126,47.37218],[7.018,47.38386],[7.05623,47.37035],[7.07007,47.35005],[7.05958,47.32257],[6.97424,47.27856],[6.96347,47.26233],[6.96134,47.23479],[6.89443,47.19393],[6.88913,47.18922],[6.85545,47.14636],[6.76907,47.10751],[6.76011,47.09953],[6.72561,47.0418],[6.62355,46.9811],[6.4812,46.9445],[6.46892,46.93522],[6.46686,46.91997],[6.47548,46.88771],[6.4535,46.8239],[6.45644,46.80534],[6.46722,46.79104],[6.46098,46.76887],[6.15817,46.59343],[6.14872,46.58069],[6.15152,46.56508],[6.16549,46.54399],[6.15811,46.52456],[6.10174,46.46979],[6.09572,46.45418],[6.09704,46.43317],[6.10829,46.41643],[6.16622,46.38839],[6.17817,46.36922],[6.13748,46.31297],[6.13371,46.30227],[6.13038,46.23737],[6.1103,46.22344],[6.08865,46.23081],[6.07717,46.23123],[6.01857,46.21601],[6.00681,46.20752],[6.00388,46.19332],[6.00787,46.16977],[6.01783,46.15564],[6.03509,46.15456],[6.05564,46.16288],[6.12468,46.15415],[6.13778,46.15702],[6.24026,46.22094],[6.24906,46.23299],[6.24707,46.24777],[6.21148,46.31057],[6.21219,46.32485],[6.23946,46.36705],[6.31648,46.41557],[6.41083,46.42495],[6.41748,46.42682],[6.50498,46.46871],[6.63047,46.47435],[6.74665,46.45695],[6.82244,46.42925],[6.81832,46.38181],[6.80484,46.36179],[6.80189,46.34639],[6.81095,46.33359],[6.86491,46.30038],[6.87504,46.28007],[6.86092,46.2439],[6.82698,46.21188],[6.82075,46.19862],[6.81863,46.16592],[6.82259,46.15261],[6.83427,46.14509],[6.90382,46.12971],[6.90491,46.09595],[6.90932,46.08406],[6.92001,46.07721],[6.94898,46.0699],[7.01556,46.00883],[7.05191,45.93066],[7.04533,45.92217],[7.04497,45.92064],[7.04394,45.92036],[6.99582,45.85822],[6.94097,45.83551],[6.84376,45.82387],[6.83102,45.81711],[6.82614,45.80353],[6.82787,45.73217],[6.83174,45.72082],[6.8414,45.71373],[6.90729,45.69124],[6.92419,45.66935],[6.94247,45.66172],[6.97131,45.66528],[7.00597,45.64945],[7.01151,45.63652],[6.9978,45.60877],[6.99643,45.59465],[7.0158,45.52354],[7.02774,45.5102],[7.1072,45.47877],[7.1228,45.44924],[7.13304,45.44001],[7.1856,45.41894],[7.19515,45.40409],[7.17075,45.35069],[7.14232,45.32298],[7.13649,45.30576],[7.14458,45.25048],[7.08417,45.20279],[6.99279,45.19823],[6.98106,45.19368],[6.90009,45.12689],[6.85843,45.11699],[6.78283,45.14228],[6.77056,45.14242],[6.67751,45.11356],[6.6653,45.10289],[6.66501,45.08667],[6.68237,45.04558],[6.69602,45.03395],[6.75744,45.01884],[6.78375,44.9146],[6.7942,44.90161],[6.86698,44.86519],[6.8798,44.86346],[6.93633,44.87461],[7.01795,44.84402],[7.03453,44.82282],[7.03711,44.75009],[7.0496,44.73226],[7.07224,44.72311],[7.08651,44.6968],[7.08666,44.68085],[7.07671,44.67134],[6.99007,44.67203],[6.97413,44.66431],[6.97056,44.64696],[6.97819,44.61784],[6.94659,44.57124],[6.88235,44.53479],[6.87233,44.5195],[6.87892,44.50245],[6.95894,44.43129],[6.95872,44.42908],[6.92167,44.41436],[6.91223,44.40659],[6.90907,44.39477],[6.90972,44.38195],[6.91637,44.36804],[6.99909,44.29414],[7.01181,44.256],[7.01983,44.24558],[7.03259,44.2424],[7.07312,44.2461],[7.1651,44.22112],[7.24533,44.18544],[7.26053,44.16682],[7.27537,44.15947],[7.33878,44.1574],[7.36278,44.13834],[7.37776,44.13416],[7.56283,44.15792],[7.5642,44.15836],[7.56478,44.15817],[7.60548,44.1634],[7.6162,44.16827],[7.63989,44.18928],[7.68608,44.1861],[7.69422,44.17795],[7.68937,44.13869],[7.69445,44.12276],[7.72786,44.08615],[7.72403,44.05704],[7.68603,44.02371],[7.68077,44.0164],[7.66016,43.9672],[7.59624,43.94466],[7.58419,43.93287],[7.56858,43.89159],[7.5271,43.87434],[7.51649,43.86397],[7.51594,43.84915],[7.53622,43.79234],[9.8,43.1],[9.63227,41.43244],[9.36968,41.35052],[9.27311,41.29196],[8.94186,41.27688],[5.8,41.64],[3.17358,42.41768],[3.16081,42.42757],[3.0944,42.41457],[3.03402,42.45331],[3.02214,42.45645],[2.87822,42.4487],[2.87019,42.44653],[2.78424,42.40256],[2.7413,42.41128],[2.72928,42.40998],[2.69331,42.39417],[2.68378,42.3854],[2.68162,42.37263],[2.68585,42.34679],[2.66719,42.33008],[2.58106,42.34418],[2.56777,42.34173],[2.5338,42.32197],[2.47795,42.32986],[2.41933,42.37658],[2.41222,42.38021],[2.26719,42.42055],[2.25973,42.42117],[2.20694,42.41558],[2.20653,42.41526],[2.20526,42.41541],[2.16028,42.41065],[2.14881,42.40545],[2.09393,42.35474],[2.00861,42.33818],[1.965,42.36473],[1.93076,42.42442],[1.92089,42.43302],[1.88467,42.44761],[1.88459,42.44762],[1.88444,42.4477],[1.82774,42.47056],[1.72567,42.48452],[1.71561,42.50125],[1.7272,42.56103],[1.72479,42.57499],[1.71011,42.59992],[1.69377,42.60975],[1.60283,42.61382],[1.56069,42.6392],[1.54636,42.64166],[1.50444,42.6331],[1.4921,42.62502],[1.47238,42.59703],[1.43792,42.59264],[1.41936,42.60643],[1.38032,42.67415],[1.37335,42.68127],[1.33313,42.70563],[1.32364,42.7085],[1.23221,42.71248],[1.16554,42.69928],[1.08546,42.76635],[1.07564,42.77079],[0.95937,42.78852],[0.95073,42.78794],[0.92265,42.7797],[0.84606,42.8157],[0.71511,42.8464],[0.70017,42.84402],[0.69117,42.83186],[0.67409,42.76479],[0.67474,42.75286],[0.69192,42.70684],[0.669,42.67901],[0.43024,42.67863],[0.3715,42.70308],[0.35954,42.70415],[0.34912,42.69817],[0.32567,42.67274],[0.29571,42.66388],[0.24594,42.70175],[0.23972,42.70494],[0.18967,42.72039],[0.17919,42.72075],[-0.01993,42.67389],[-0.06726,42.6848],[-0.16949,42.77157],[-0.29987,42.82697],[-0.31683,42.82635],[-0.39208,42.78766],[-0.44354,42.78453],[-0.48842,42.80255],[-0.50868,42.79935],[-0.54499,42.76906],[-0.56721,42.76937],[-0.67446,42.86392],[-0.68094,42.86775],[-0.73372,42.88666],[-0.7476,42.93879],[-0.75711,42.95107],[-0.77253,42.95284],[-0.82114,42.93865],[-0.94508,42.94192],[-1.02313,42.98206],[-1.10852,43.00409],[-1.1156,43.00461],[-1.14775,43.00124],[-1.15845,43.01452],[-1.16736,43.02083],[-1.21622,43.0381],[-1.22612,43.03898],[-1.26236,43.03303],[-1.30643,43.05531],[-1.31992,43.05696],[-1.33135,43.0496],[-1.3542,43.0197],[-1.43868,43.03371],[-1.4775,43.06889],[-1.48311,43.08561],[-1.47641,43.10248],[-1.43479,43.13087],[-1.42732,43.1404],[-1.39411,43.22935],[-1.39531,43.24596],[-1.40868,43.25591],[-1.52629,43.28099],[-1.54626,43.2737],[-1.57149,43.2412],[-1.61053,43.24223],[-1.65,43.29323],[-1.66953,43.30065],[-1.73359,43.28856],[-1.75606,43.31966],[-1.76297,43.32565],[-1.79156,43.34067],[-1.80099,43.37017],[-1.78509,43.39037],[-1.7835,43.39686],[-2.7,43.9]]],terms_url:"https://wiki.openstreetmap.org/wiki/FR:WikiProject_France/WikiProject_Base_Adresses_Nationale_Ouverte_(BANO)#Licence_du_r.C3.A9sultat",terms_text:"Tiles © cquest@Openstreetmap France, data © OpenStreetMap contributors, ODBL",description:"French address registry or Base Adresses Nationale Ouverte",overlay:true},{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",endDate:"2010-07-20T00:00:00.000Z",startDate:"2013-07-19T00:00:00.000Z",zoomExtent:[0,20],polygon:[[[5.96175,50.17631],[6.02627,50.18496],[6.03318,50.16395],[6.06069,50.15536],[6.07668,50.15913],[6.07824,50.17255],[6.10176,50.17199],[6.1225,50.16437],[6.1201,50.15594],[6.1277,50.14993],[6.11323,50.13739],[6.12369,50.13719],[6.14093,50.1305],[6.13555,50.11899],[6.13808,50.10263],[6.13108,50.09964],[6.13547,50.09119],[6.12194,50.09059],[6.12634,50.07817],[6.13186,50.07348],[6.12117,50.064],[6.11444,50.06139],[6.11563,50.05817],[6.12361,50.06323],[6.13661,50.04178],[6.13034,50.02975],[6.14821,50.02307],[6.13868,50.01572],[6.13594,50.01485],[6.13138,50.01905],[6.13024,50.01819],[6.13934,50.01116],[6.1517,50.01058],[6.14546,49.99689],[6.13966,49.9994],[6.13852,49.99829],[6.14218,49.99535],[6.15023,49.99518],[6.15625,49.98867],[6.17305,49.98589],[6.17348,49.98344],[6.17035,49.98376],[6.16549,49.97115],[6.17151,49.96298],[6.1763,49.962],[6.17995,49.95386],[6.18339,49.9548],[6.17983,49.96307],[6.18331,49.9686],[6.19277,49.97158],[6.19978,49.95352],[6.20707,49.95672],[6.21269,49.9514],[6.22502,49.95039],[6.22044,49.94369],[6.22824,49.93726],[6.22635,49.92766],[6.21913,49.92354],[6.22986,49.92125],[6.23603,49.91355],[6.23187,49.91064],[6.22769,49.91062],[6.23229,49.9072],[6.23381,49.90028],[6.24692,49.89535],[6.25781,49.88724],[6.26301,49.88101],[6.27646,49.87725],[6.28113,49.87957],[6.29166,49.87548],[6.2977,49.86673],[6.30989,49.87107],[6.31532,49.8673],[6.31465,49.86057],[6.32361,49.85188],[6.32158,49.8409],[6.32741,49.83673],[6.33656,49.83998],[6.33937,49.8507],[6.36465,49.85164],[6.4022,49.82098],[6.42643,49.81629],[6.42807,49.81186],[6.43097,49.81129],[6.44161,49.81547],[6.44344,49.81233],[6.45366,49.81275],[6.46454,49.81975],[6.47057,49.82385],[6.49681,49.81277],[6.50669,49.80993],[6.51155,49.80238],[6.51485,49.80513],[6.5196,49.81446],[6.52981,49.81048],[6.53225,49.80686],[6.53083,49.80116],[6.50622,49.78899],[6.51917,49.78344],[6.51105,49.77422],[6.52056,49.76818],[6.52052,49.76134],[6.50373,49.75086],[6.50263,49.73298],[6.50727,49.72938],[6.51809,49.7242],[6.51642,49.72129],[6.51176,49.72016],[6.50479,49.725],[6.49891,49.72639],[6.49558,49.72443],[6.50712,49.71655],[6.50788,49.71215],[6.5046,49.71227],[6.42714,49.66237],[6.4399,49.66025],[6.44251,49.65591],[6.42178,49.61809],[6.39898,49.60094],[6.37941,49.59526],[6.37551,49.58809],[6.38443,49.5801],[6.38119,49.57509],[6.36909,49.5783],[6.35791,49.57166],[6.3849,49.55817],[6.38009,49.54856],[6.35855,49.53296],[6.35932,49.52481],[6.37076,49.50545],[6.37056,49.45732],[6.3334,49.46493],[6.32189,49.47244],[6.29503,49.47928],[6.28789,49.48379],[6.27191,49.49995],[6.24133,49.50693],[6.19669,49.50331],[6.17337,49.50577],[6.16086,49.50085],[6.1671,49.49006],[6.14018,49.48525],[6.12937,49.48803],[6.12725,49.47081],[6.1014,49.46726],[6.10483,49.45076],[6.08167,49.45417],[6.07722,49.46139],[6.05917,49.46306],[6.05222,49.46028],[6.04421,49.44553],[6.02529,49.44703],[6.02154,49.45127],[6.01574,49.44885],[5.99412,49.45301],[5.97657,49.44885],[5.97773,49.45955],[5.97232,49.46087],[5.96891,49.48202],[5.9616,49.49026],[5.91578,49.49835],[5.89033,49.4948],[5.86332,49.50006],[5.84897,49.50826],[5.84828,49.51397],[5.83641,49.51817],[5.83187,49.52639],[5.84308,49.53081],[5.83562,49.54114],[5.81625,49.53325],[5.8052,49.54272],[5.85943,49.57158],[5.86866,49.587],[5.86289,49.58525],[5.8511,49.58379],[5.84712,49.58961],[5.84565,49.5981],[5.8694,49.6106],[5.88182,49.63815],[5.89998,49.63907],[5.89934,49.66239],[5.85656,49.67628],[5.85628,49.68211],[5.8757,49.71118],[5.86481,49.72331],[5.84325,49.71822],[5.82191,49.72128],[5.82489,49.73767],[5.82073,49.74878],[5.78626,49.79079],[5.76517,49.78961],[5.75094,49.79094],[5.74159,49.82126],[5.74581,49.82435],[5.7372,49.83353],[5.74053,49.84142],[5.74701,49.84048],[5.74624,49.84783],[5.75399,49.84878],[5.74066,49.85152],[5.75229,49.85922],[5.74955,49.87554],[5.77567,49.87438],[5.77505,49.88057],[5.7346,49.89341],[5.73303,49.90285],[5.75783,49.91737],[5.76039,49.93252],[5.77073,49.93711],[5.76878,49.94239],[5.7688,49.96104],[5.78672,49.96816],[5.80524,49.96677],[5.80652,49.97321],[5.83129,49.97995],[5.83462,49.98656],[5.81806,49.99936],[5.81561,50.01437],[5.84792,50.02809],[5.86189,50.04581],[5.85087,50.0563],[5.85781,50.07186],[5.881,50.08069],[5.89196,50.12041],[5.95286,50.13384],[5.96175,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",icon:"https://www.geoportail.lu/static/img/lion.png"},{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",zoomExtent:[0,19],polygon:[[[16.50733,46.99293],[16.28342,46.99293],[16.13584,46.8713],[15.98317,46.81909],[16.04933,46.65517],[15.86104,46.71801],[15.75926,46.69009],[15.56079,46.67962],[15.57606,46.63421],[15.47937,46.60276],[15.43357,46.65168],[15.22493,46.63421],[15.04682,46.64819],[14.99084,46.58877],[14.9603,46.62373],[14.85344,46.60276],[14.83308,46.50127],[14.75166,46.49776],[14.68041,46.43818],[14.61426,46.43818],[14.57864,46.37853],[14.44124,46.43116],[14.16135,46.42766],[14.12573,46.47674],[14.01886,46.47674],[13.91199,46.52578],[13.82548,46.50477],[13.44381,46.56078],[13.30641,46.55028],[13.1283,46.58877],[12.84332,46.61324],[12.72628,46.6412],[12.51255,46.66565],[12.35988,46.70405],[12.36497,46.77032],[12.28863,46.77729],[12.27337,46.88522],[12.20721,46.87478],[12.13088,46.90261],[12.11561,46.99987],[12.25301,47.06577],[12.2123,47.0935],[11.9833,47.04497],[11.73394,46.96168],[11.63217,47.01028],[11.54057,46.97557],[11.49986,47.00681],[11.41843,46.96515],[11.25559,46.97557],[11.1131,46.91304],[11.04185,46.76335],[10.88919,46.75986],[10.74161,46.78426],[10.70599,46.86435],[10.57877,46.83998],[10.45663,46.85043],[10.47699,46.92694],[10.38539,46.98946],[10.23272,46.86435],[10.12076,46.83302],[9.86632,46.94084],[9.90194,47.00334],[9.68312,47.05884],[9.61188,47.03804],[9.63223,47.12813],[9.58134,47.1662],[9.54063,47.26644],[9.60679,47.34926],[9.67294,47.36994],[9.64241,47.44571],[9.56608,47.48011],[9.71365,47.52824],[9.7849,47.59692],[9.83579,47.54542],[9.94774,47.53855],[10.09023,47.44915],[10.11059,47.36649],[10.2429,47.38717],[10.18692,47.2699],[10.32432,47.29751],[10.48208,47.44915],[10.43119,47.48699],[10.44137,47.59005],[10.48717,47.55229],[10.54823,47.53511],[10.59912,47.56602],[10.75688,47.53168],[10.88919,47.54542],[10.94008,47.48699],[10.99605,47.39061],[11.23523,47.44227],[11.28103,47.3975],[11.42352,47.51449],[11.57619,47.50762],[11.60672,47.59005],[11.83572,47.58662],[12.00366,47.62436],[12.20721,47.60378],[12.16141,47.69634],[12.2581,47.74427],[12.25301,47.67921],[12.43112,47.71004],[12.49219,47.63122],[12.56852,47.62779],[12.62959,47.68949],[12.77208,47.66893],[12.83315,47.54198],[12.97564,47.47323],[13.04179,47.49387],[13.0367,47.55572],[13.09777,47.64151],[13.03161,47.71004],[12.90439,47.72031],[13.00617,47.84683],[12.9451,47.93555],[12.86368,47.95941],[12.86368,48.00369],[12.75172,48.09894],[12.87386,48.21097],[12.96037,48.21097],[13.04179,48.2652],[13.18428,48.29907],[13.26061,48.2923],[13.39801,48.35659],[13.44381,48.41742],[13.43872,48.55234],[13.50997,48.58601],[13.61175,48.57255],[13.72879,48.5119],[13.78477,48.57255],[13.82039,48.62639],[13.79495,48.71713],[13.85093,48.77417],[14.05957,48.66338],[14.01377,48.63312],[14.07484,48.59274],[14.21733,48.59611],[14.3649,48.54897],[14.46668,48.64993],[14.55828,48.59611],[14.59899,48.62639],[14.72113,48.57591],[14.72113,48.6869],[14.8229,48.7272],[14.81782,48.77753],[14.96472,48.78518],[14.98936,49.01266],[15.14859,48.99503],[15.19439,48.93155],[15.30635,48.98501],[15.39286,48.98501],[15.48446,48.92821],[15.74908,48.8546],[15.84068,48.88807],[16.00862,48.78088],[16.20708,48.73391],[16.39537,48.73727],[16.49206,48.81105],[16.69053,48.77417],[16.7058,48.73391],[16.89917,48.71377],[16.97551,48.51527],[16.84828,48.45118],[16.85337,48.34644],[16.95515,48.25165],[16.99077,48.1499],[17.09255,48.13971],[17.08237,48.02412],[17.17397,48.02071],[17.08237,47.87414],[16.98568,47.86732],[17.08237,47.80925],[17.09255,47.70319],[16.74142,47.67921],[16.7058,47.75112],[16.53786,47.75454],[16.54804,47.70662],[16.42082,47.66893],[16.57348,47.6175],[16.67017,47.63122],[16.71088,47.53855],[16.66,47.44915],[16.54295,47.39406],[16.46153,47.39406],[16.49206,47.2768],[16.42591,47.19733],[16.47171,47.1489],[16.54804,47.1489],[16.47679,47.07964],[16.52768,47.05884],[16.50733,46.99293]]],terms_url:"https://basemap.at",terms_text:"basemap.at",description:"Basemap of Austria, based on government data.",icon:"https://www.basemap.at/images/logo_basemap.jpg"},{id:"basemap.at-overlay",name:"basemap.at Beschriftungen (annotations)",type:"tms",template:"https://maps{switch:1,2,3,4}.wien.gv.at/basemap/bmapoverlay/normal/google3857/{zoom}/{y}/{x}.png",zoomExtent:[0,19],polygon:[[[16.50733,46.99293],[16.28342,46.99293],[16.13584,46.8713],[15.98317,46.81909],[16.04933,46.65517],[15.86104,46.71801],[15.75926,46.69009],[15.56079,46.67962],[15.57606,46.63421],[15.47937,46.60276],[15.43357,46.65168],[15.22493,46.63421],[15.04682,46.64819],[14.99084,46.58877],[14.9603,46.62373],[14.85344,46.60276],[14.83308,46.50127],[14.75166,46.49776],[14.68041,46.43818],[14.61426,46.43818],[14.57864,46.37853],[14.44124,46.43116],[14.16135,46.42766],[14.12573,46.47674],[14.01886,46.47674],[13.91199,46.52578],[13.82548,46.50477],[13.44381,46.56078],[13.30641,46.55028],[13.1283,46.58877],[12.84332,46.61324],[12.72628,46.6412],[12.51255,46.66565],[12.35988,46.70405],[12.36497,46.77032],[12.28863,46.77729],[12.27337,46.88522],[12.20721,46.87478],[12.13088,46.90261],[12.11561,46.99987],[12.25301,47.06577],[12.2123,47.0935],[11.9833,47.04497],[11.73394,46.96168],[11.63217,47.01028],[11.54057,46.97557],[11.49986,47.00681],[11.41843,46.96515],[11.25559,46.97557],[11.1131,46.91304],[11.04185,46.76335],[10.88919,46.75986],[10.74161,46.78426],[10.70599,46.86435],[10.57877,46.83998],[10.45663,46.85043],[10.47699,46.92694],[10.38539,46.98946],[10.23272,46.86435],[10.12076,46.83302],[9.86632,46.94084],[9.90194,47.00334],[9.68312,47.05884],[9.61188,47.03804],[9.63223,47.12813],[9.58134,47.1662],[9.54063,47.26644],[9.60679,47.34926],[9.67294,47.36994],[9.64241,47.44571],[9.56608,47.48011],[9.71365,47.52824],[9.7849,47.59692],[9.83579,47.54542],[9.94774,47.53855],[10.09023,47.44915],[10.11059,47.36649],[10.2429,47.38717],[10.18692,47.2699],[10.32432,47.29751],[10.48208,47.44915],[10.43119,47.48699],[10.44137,47.59005],[10.48717,47.55229],[10.54823,47.53511],[10.59912,47.56602],[10.75688,47.53168],[10.88919,47.54542],[10.94008,47.48699],[10.99605,47.39061],[11.23523,47.44227],[11.28103,47.3975],[11.42352,47.51449],[11.57619,47.50762],[11.60672,47.59005],[11.83572,47.58662],[12.00366,47.62436],[12.20721,47.60378],[12.16141,47.69634],[12.2581,47.74427],[12.25301,47.67921],[12.43112,47.71004],[12.49219,47.63122],[12.56852,47.62779],[12.62959,47.68949],[12.77208,47.66893],[12.83315,47.54198],[12.97564,47.47323],[13.04179,47.49387],[13.0367,47.55572],[13.09777,47.64151],[13.03161,47.71004],[12.90439,47.72031],[13.00617,47.84683],[12.9451,47.93555],[12.86368,47.95941],[12.86368,48.00369],[12.75172,48.09894],[12.87386,48.21097],[12.96037,48.21097],[13.04179,48.2652],[13.18428,48.29907],[13.26061,48.2923],[13.39801,48.35659],[13.44381,48.41742],[13.43872,48.55234],[13.50997,48.58601],[13.61175,48.57255],[13.72879,48.5119],[13.78477,48.57255],[13.82039,48.62639],[13.79495,48.71713],[13.85093,48.77417],[14.05957,48.66338],[14.01377,48.63312],[14.07484,48.59274],[14.21733,48.59611],[14.3649,48.54897],[14.46668,48.64993],[14.55828,48.59611],[14.59899,48.62639],[14.72113,48.57591],[14.72113,48.6869],[14.8229,48.7272],[14.81782,48.77753],[14.96472,48.78518],[14.98936,49.01266],[15.14859,48.99503],[15.19439,48.93155],[15.30635,48.98501],[15.39286,48.98501],[15.48446,48.92821],[15.74908,48.8546],[15.84068,48.88807],[16.00862,48.78088],[16.20708,48.73391],[16.39537,48.73727],[16.49206,48.81105],[16.69053,48.77417],[16.7058,48.73391],[16.89917,48.71377],[16.97551,48.51527],[16.84828,48.45118],[16.85337,48.34644],[16.95515,48.25165],[16.99077,48.1499],[17.09255,48.13971],[17.08237,48.02412],[17.17397,48.02071],[17.08237,47.87414],[16.98568,47.86732],[17.08237,47.80925],[17.09255,47.70319],[16.74142,47.67921],[16.7058,47.75112],[16.53786,47.75454],[16.54804,47.70662],[16.42082,47.66893],[16.57348,47.6175],[16.67017,47.63122],[16.71088,47.53855],[16.66,47.44915],[16.54295,47.39406],[16.46153,47.39406],[16.49206,47.2768],[16.42591,47.19733],[16.47171,47.1489],[16.54804,47.1489],[16.47679,47.07964],[16.52768,47.05884],[16.50733,46.99293]]],terms_url:"https://basemap.at/",terms_text:"basemap.at",description:"Annotation overlay provided by basemap.at.",icon:"https://www.basemap.at/images/logo_basemap.jpg",overlay:true},{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",zoomExtent:[0,19],polygon:[[[16.50733,46.99293],[16.28342,46.99293],[16.13584,46.8713],[15.98317,46.81909],[16.04933,46.65517],[15.86104,46.71801],[15.75926,46.69009],[15.56079,46.67962],[15.57606,46.63421],[15.47937,46.60276],[15.43357,46.65168],[15.22493,46.63421],[15.04682,46.64819],[14.99084,46.58877],[14.9603,46.62373],[14.85344,46.60276],[14.83308,46.50127],[14.75166,46.49776],[14.68041,46.43818],[14.61426,46.43818],[14.57864,46.37853],[14.44124,46.43116],[14.16135,46.42766],[14.12573,46.47674],[14.01886,46.47674],[13.91199,46.52578],[13.82548,46.50477],[13.44381,46.56078],[13.30641,46.55028],[13.1283,46.58877],[12.84332,46.61324],[12.72628,46.6412],[12.51255,46.66565],[12.35988,46.70405],[12.36497,46.77032],[12.28863,46.77729],[12.27337,46.88522],[12.20721,46.87478],[12.13088,46.90261],[12.11561,46.99987],[12.25301,47.06577],[12.2123,47.0935],[11.9833,47.04497],[11.73394,46.96168],[11.63217,47.01028],[11.54057,46.97557],[11.49986,47.00681],[11.41843,46.96515],[11.25559,46.97557],[11.1131,46.91304],[11.04185,46.76335],[10.88919,46.75986],[10.74161,46.78426],[10.70599,46.86435],[10.57877,46.83998],[10.45663,46.85043],[10.47699,46.92694],[10.38539,46.98946],[10.23272,46.86435],[10.12076,46.83302],[9.86632,46.94084],[9.90194,47.00334],[9.68312,47.05884],[9.61188,47.03804],[9.63223,47.12813],[9.58134,47.1662],[9.54063,47.26644],[9.60679,47.34926],[9.67294,47.36994],[9.64241,47.44571],[9.56608,47.48011],[9.71365,47.52824],[9.7849,47.59692],[9.83579,47.54542],[9.94774,47.53855],[10.09023,47.44915],[10.11059,47.36649],[10.2429,47.38717],[10.18692,47.2699],[10.32432,47.29751],[10.48208,47.44915],[10.43119,47.48699],[10.44137,47.59005],[10.48717,47.55229],[10.54823,47.53511],[10.59912,47.56602],[10.75688,47.53168],[10.88919,47.54542],[10.94008,47.48699],[10.99605,47.39061],[11.23523,47.44227],[11.28103,47.3975],[11.42352,47.51449],[11.57619,47.50762],[11.60672,47.59005],[11.83572,47.58662],[12.00366,47.62436],[12.20721,47.60378],[12.16141,47.69634],[12.2581,47.74427],[12.25301,47.67921],[12.43112,47.71004],[12.49219,47.63122],[12.56852,47.62779],[12.62959,47.68949],[12.77208,47.66893],[12.83315,47.54198],[12.97564,47.47323],[13.04179,47.49387],[13.0367,47.55572],[13.09777,47.64151],[13.03161,47.71004],[12.90439,47.72031],[13.00617,47.84683],[12.9451,47.93555],[12.86368,47.95941],[12.86368,48.00369],[12.75172,48.09894],[12.87386,48.21097],[12.96037,48.21097],[13.04179,48.2652],[13.18428,48.29907],[13.26061,48.2923],[13.39801,48.35659],[13.44381,48.41742],[13.43872,48.55234],[13.50997,48.58601],[13.61175,48.57255],[13.72879,48.5119],[13.78477,48.57255],[13.82039,48.62639],[13.79495,48.71713],[13.85093,48.77417],[14.05957,48.66338],[14.01377,48.63312],[14.07484,48.59274],[14.21733,48.59611],[14.3649,48.54897],[14.46668,48.64993],[14.55828,48.59611],[14.59899,48.62639],[14.72113,48.57591],[14.72113,48.6869],[14.8229,48.7272],[14.81782,48.77753],[14.96472,48.78518],[14.98936,49.01266],[15.14859,48.99503],[15.19439,48.93155],[15.30635,48.98501],[15.39286,48.98501],[15.48446,48.92821],[15.74908,48.8546],[15.84068,48.88807],[16.00862,48.78088],[16.20708,48.73391],[16.39537,48.73727],[16.49206,48.81105],[16.69053,48.77417],[16.7058,48.73391],[16.89917,48.71377],[16.97551,48.51527],[16.84828,48.45118],[16.85337,48.34644],[16.95515,48.25165],[16.99077,48.1499],[17.09255,48.13971],[17.08237,48.02412],[17.17397,48.02071],[17.08237,47.87414],[16.98568,47.86732],[17.08237,47.80925],[17.09255,47.70319],[16.74142,47.67921],[16.7058,47.75112],[16.53786,47.75454],[16.54804,47.70662],[16.42082,47.66893],[16.57348,47.6175],[16.67017,47.63122],[16.71088,47.53855],[16.66,47.44915],[16.54295,47.39406],[16.46153,47.39406],[16.49206,47.2768],[16.42591,47.19733],[16.47171,47.1489],[16.54804,47.1489],[16.47679,47.07964],[16.52768,47.05884],[16.50733,46.99293]]],terms_url:"https://basemap.at",terms_text:"basemap.at",best:true,description:"Orthofoto layer provided by basemap.at. \"Successor\" of geoimage.at imagery.",icon:"https://www.basemap.at/images/logo_basemap.jpg"},{id:"bavaria-80cm",name:"Bavaria (80 cm)",type:"wms",template:"https://geoservices.bayern.de/wms/v2/ogc_dop80_oa.cgi?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=by_dop80c&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",zoomExtent:[7,18],polygon:[[[10.12359,50.56846],[10.14286,50.55078],[10.20281,50.55742],[10.25205,50.51796],[10.32698,50.49345],[10.41048,50.41848],[10.60317,50.33109],[10.62244,50.2271],[10.72521,50.21066],[10.72949,50.24765],[10.85153,50.24354],[10.71879,50.32015],[10.71236,50.36524],[10.85581,50.39664],[10.93717,50.39664],[10.99069,50.36661],[11.12772,50.36661],[11.1791,50.31332],[11.16197,50.29417],[11.24119,50.2928],[11.24975,50.37344],[11.24119,50.47982],[11.35895,50.5234],[11.43816,50.50979],[11.44244,50.48936],[11.42532,50.4771],[11.42532,50.44166],[11.48955,50.42257],[11.49169,50.39801],[11.51952,50.39801],[11.52594,50.37617],[11.59874,50.40347],[11.63727,50.38845],[11.79357,50.4212],[11.83639,50.39255],[11.92203,50.42802],[11.98626,50.38709],[11.98412,50.35705],[12.04835,50.33109],[12.09331,50.32972],[12.1297,50.29828],[12.14041,50.27228],[12.10615,50.25586],[12.11258,50.23532],[12.14897,50.23669],[12.19822,50.20107],[12.22391,50.16406],[12.20464,50.14348],[12.20678,50.10779],[12.24318,50.09955],[12.27743,50.07208],[12.49367,49.98543],[12.49796,49.94136],[12.55576,49.92206],[12.54934,49.86827],[12.48083,49.78817],[12.41018,49.75775],[12.46156,49.70655],[12.5472,49.68023],[12.58788,49.55261],[12.65425,49.53455],[12.66281,49.43302],[12.75274,49.41073],[12.7977,49.34661],[12.90475,49.35638],[12.99681,49.33685],[13.05462,49.27543],[13.13169,49.21952],[13.19164,49.14395],[13.2366,49.12153],[13.29655,49.12293],[13.37148,49.08088],[13.4143,49.02897],[13.4143,48.97981],[13.57916,48.96997],[13.63483,48.94326],[13.67765,48.88698],[13.73759,48.89261],[13.7847,48.83346],[13.84036,48.77423],[13.81681,48.70646],[13.84464,48.70081],[13.8425,48.60038],[13.76543,48.5423],[13.75258,48.50401],[13.67122,48.50543],[13.64339,48.54371],[13.45712,48.5508],[13.45712,48.41598],[13.40574,48.36053],[13.2837,48.27511],[13.09315,48.26941],[12.95827,48.19097],[12.87691,48.18526],[12.772,48.09382],[12.86407,48.01368],[12.89832,47.95492],[12.94543,47.95636],[12.99681,47.88461],[13.01394,47.83434],[12.93472,47.7322],[13.0589,47.72499],[13.11885,47.63851],[13.06532,47.56922],[13.05676,47.47379],[13.00323,47.45208],[12.76772,47.55044],[12.76986,47.63274],[12.73989,47.67312],[12.6671,47.67024],[12.57503,47.6212],[12.48083,47.61975],[12.41446,47.67024],[12.24318,47.67745],[12.2132,47.69186],[12.19179,47.68177],[12.2132,47.66591],[12.21106,47.60388],[12.17467,47.59521],[12.13827,47.60388],[11.89205,47.60388],[11.85137,47.57933],[11.63942,47.58222],[11.59445,47.54899],[11.59017,47.51285],[11.51738,47.49839],[11.4403,47.50417],[11.39534,47.47524],[11.42746,47.44484],[11.3461,47.44339],[11.27973,47.39559],[11.21336,47.38834],[11.24761,47.43181],[11.10203,47.39269],[10.965,47.38979],[10.97785,47.43615],[10.9179,47.47524],[10.8708,47.47524],[10.85581,47.49405],[10.90077,47.5143],[10.87294,47.53598],[10.81085,47.51285],[10.64385,47.54899],[10.59461,47.55477],[10.57962,47.52876],[10.46187,47.54032],[10.46615,47.48392],[10.48756,47.47813],[10.48756,47.41298],[10.45973,47.40283],[10.45973,47.37529],[10.41048,47.37384],[10.40834,47.34339],[10.32056,47.28678],[10.28202,47.27806],[10.28416,47.26208],[10.14714,47.26208],[10.1921,47.30275],[10.19424,47.37384],[10.16641,47.37384],[10.16641,47.34629],[10.10004,47.34339],[10.0615,47.36369],[10.06792,47.41877],[10.09361,47.42601],[10.09576,47.44194],[9.978,47.48537],[9.95659,47.52731],[9.8945,47.52876],[9.85596,47.50851],[9.81743,47.54465],[9.82171,47.57644],[9.77461,47.58222],[9.73821,47.52586],[9.67398,47.53454],[9.58406,47.56488],[9.63972,47.60532],[9.7168,47.60388],[9.85596,47.676],[9.978,47.65582],[10.02938,47.68177],[10.10004,47.66735],[10.13215,47.676],[10.14286,47.70195],[10.0615,47.7725],[10.11288,47.8099],[10.08291,47.85302],[10.1086,47.90902],[10.07649,47.96496],[10.13001,48.02084],[10.13429,48.10669],[10.10004,48.12813],[10.05508,48.26228],[9.96944,48.36765],[10.03153,48.42593],[10.02938,48.46144],[10.12359,48.47705],[10.15356,48.4515],[10.23492,48.51252],[10.31628,48.51678],[10.29915,48.61878],[10.24563,48.6683],[10.27346,48.70646],[10.3698,48.68385],[10.43189,48.69939],[10.45116,48.72765],[10.40192,48.746],[10.44046,48.84896],[10.43403,48.95873],[10.33769,49.02055],[10.24991,49.03599],[10.24991,49.07387],[10.20066,49.10331],[10.25205,49.13274],[10.12359,49.19714],[10.11931,49.26285],[10.15142,49.28939],[10.10432,49.34522],[10.14072,49.39401],[10.1086,49.44555],[10.11074,49.50537],[10.0722,49.53316],[10.01654,49.47616],[9.92662,49.47894],[9.92448,49.55678],[9.89878,49.58177],[9.85596,49.53872],[9.80672,49.55678],[9.86667,49.60675],[9.85382,49.6442],[9.81743,49.66083],[9.83455,49.68993],[9.79602,49.72039],[9.75748,49.70793],[9.74035,49.68577],[9.70609,49.71624],[9.67826,49.71624],[9.68254,49.68854],[9.62045,49.69131],[9.64615,49.78955],[9.55836,49.77434],[9.57121,49.73561],[9.50698,49.75222],[9.49199,49.77987],[9.46844,49.76051],[9.42562,49.77849],[9.40421,49.76466],[9.33356,49.7702],[9.32928,49.73423],[9.4085,49.72593],[9.42776,49.69824],[9.41492,49.6442],[9.38066,49.63865],[9.35925,49.64974],[9.33998,49.63727],[9.31215,49.64836],[9.27789,49.62617],[9.28432,49.60814],[9.2415,49.57483],[9.09805,49.57205],[9.06594,49.60814],[9.10019,49.65113],[9.09163,49.6927],[9.13017,49.71208],[9.13873,49.74253],[9.10876,49.75637],[9.13659,49.79093],[9.10019,49.78955],[9.07236,49.82824],[9.03596,49.83514],[9.01669,50.02671],[8.96317,50.03084],[8.95674,50.05971],[9.00171,50.0707],[9.02097,50.11054],[9.1216,50.12289],[9.15586,50.11328],[9.19654,50.11878],[9.18583,50.13525],[9.23507,50.1476],[9.37638,50.12701],[9.4085,50.0817],[9.52197,50.09543],[9.50484,50.14211],[9.53267,50.16406],[9.48985,50.16954],[9.49413,50.24354],[9.61403,50.22163],[9.66541,50.23532],[9.63544,50.24901],[9.66756,50.27228],[9.74249,50.30922],[9.72964,50.35841],[9.77032,50.42939],[9.86881,50.40074],[9.91805,50.40893],[10.03581,50.47982],[10.03795,50.51115],[10.12359,50.56846]]],terms_url:"https://www.ldbv.bayern.de/",terms_text:"Bayerische Vermessungsverwaltung",best:true},{id:"bavaria-DOP80",name:"Bavaria DOP 80cm",type:"tms",template:"https://mapproxy.osm.ch/tiles/BAYERNDOP80/EPSG900913/{zoom}/{x}/{y}.png?origin=nw",zoomExtent:[7,18],polygon:[[[10.12359,50.56846],[10.14286,50.55078],[10.20281,50.55742],[10.25205,50.51796],[10.32698,50.49345],[10.41048,50.41848],[10.60317,50.33109],[10.62244,50.2271],[10.72521,50.21066],[10.72949,50.24765],[10.85153,50.24354],[10.71879,50.32015],[10.71236,50.36524],[10.85581,50.39664],[10.93717,50.39664],[10.99069,50.36661],[11.12772,50.36661],[11.1791,50.31332],[11.16197,50.29417],[11.24119,50.2928],[11.24975,50.37344],[11.24119,50.47982],[11.35895,50.5234],[11.43816,50.50979],[11.44244,50.48936],[11.42532,50.4771],[11.42532,50.44166],[11.48955,50.42257],[11.49169,50.39801],[11.51952,50.39801],[11.52594,50.37617],[11.59874,50.40347],[11.63727,50.38845],[11.79357,50.4212],[11.83639,50.39255],[11.92203,50.42802],[11.98626,50.38709],[11.98412,50.35705],[12.04835,50.33109],[12.09331,50.32972],[12.1297,50.29828],[12.14041,50.27228],[12.10615,50.25586],[12.11258,50.23532],[12.14897,50.23669],[12.19822,50.20107],[12.22391,50.16406],[12.20464,50.14348],[12.20678,50.10779],[12.24318,50.09955],[12.27743,50.07208],[12.49367,49.98543],[12.49796,49.94136],[12.55576,49.92206],[12.54934,49.86827],[12.48083,49.78817],[12.41018,49.75775],[12.46156,49.70655],[12.5472,49.68023],[12.58788,49.55261],[12.65425,49.53455],[12.66281,49.43302],[12.75274,49.41073],[12.7977,49.34661],[12.90475,49.35638],[12.99681,49.33685],[13.05462,49.27543],[13.13169,49.21952],[13.19164,49.14395],[13.2366,49.12153],[13.29655,49.12293],[13.37148,49.08088],[13.4143,49.02897],[13.4143,48.97981],[13.57916,48.96997],[13.63483,48.94326],[13.67765,48.88698],[13.73759,48.89261],[13.7847,48.83346],[13.84036,48.77423],[13.81681,48.70646],[13.84464,48.70081],[13.8425,48.60038],[13.76543,48.5423],[13.75258,48.50401],[13.67122,48.50543],[13.64339,48.54371],[13.45712,48.5508],[13.45712,48.41598],[13.40574,48.36053],[13.2837,48.27511],[13.09315,48.26941],[12.95827,48.19097],[12.87691,48.18526],[12.772,48.09382],[12.86407,48.01368],[12.89832,47.95492],[12.94543,47.95636],[12.99681,47.88461],[13.01394,47.83434],[12.93472,47.7322],[13.0589,47.72499],[13.11885,47.63851],[13.06532,47.56922],[13.05676,47.47379],[13.00323,47.45208],[12.76772,47.55044],[12.76986,47.63274],[12.73989,47.67312],[12.6671,47.67024],[12.57503,47.6212],[12.48083,47.61975],[12.41446,47.67024],[12.24318,47.67745],[12.2132,47.69186],[12.19179,47.68177],[12.2132,47.66591],[12.21106,47.60388],[12.17467,47.59521],[12.13827,47.60388],[11.89205,47.60388],[11.85137,47.57933],[11.63942,47.58222],[11.59445,47.54899],[11.59017,47.51285],[11.51738,47.49839],[11.4403,47.50417],[11.39534,47.47524],[11.42746,47.44484],[11.3461,47.44339],[11.27973,47.39559],[11.21336,47.38834],[11.24761,47.43181],[11.10203,47.39269],[10.965,47.38979],[10.97785,47.43615],[10.9179,47.47524],[10.8708,47.47524],[10.85581,47.49405],[10.90077,47.5143],[10.87294,47.53598],[10.81085,47.51285],[10.64385,47.54899],[10.59461,47.55477],[10.57962,47.52876],[10.46187,47.54032],[10.46615,47.48392],[10.48756,47.47813],[10.48756,47.41298],[10.45973,47.40283],[10.45973,47.37529],[10.41048,47.37384],[10.40834,47.34339],[10.32056,47.28678],[10.28202,47.27806],[10.28416,47.26208],[10.14714,47.26208],[10.1921,47.30275],[10.19424,47.37384],[10.16641,47.37384],[10.16641,47.34629],[10.10004,47.34339],[10.0615,47.36369],[10.06792,47.41877],[10.09361,47.42601],[10.09576,47.44194],[9.978,47.48537],[9.95659,47.52731],[9.8945,47.52876],[9.85596,47.50851],[9.81743,47.54465],[9.82171,47.57644],[9.77461,47.58222],[9.73821,47.52586],[9.67398,47.53454],[9.58406,47.56488],[9.63972,47.60532],[9.7168,47.60388],[9.85596,47.676],[9.978,47.65582],[10.02938,47.68177],[10.10004,47.66735],[10.13215,47.676],[10.14286,47.70195],[10.0615,47.7725],[10.11288,47.8099],[10.08291,47.85302],[10.1086,47.90902],[10.07649,47.96496],[10.13001,48.02084],[10.13429,48.10669],[10.10004,48.12813],[10.05508,48.26228],[9.96944,48.36765],[10.03153,48.42593],[10.02938,48.46144],[10.12359,48.47705],[10.15356,48.4515],[10.23492,48.51252],[10.31628,48.51678],[10.29915,48.61878],[10.24563,48.6683],[10.27346,48.70646],[10.3698,48.68385],[10.43189,48.69939],[10.45116,48.72765],[10.40192,48.746],[10.44046,48.84896],[10.43403,48.95873],[10.33769,49.02055],[10.24991,49.03599],[10.24991,49.07387],[10.20066,49.10331],[10.25205,49.13274],[10.12359,49.19714],[10.11931,49.26285],[10.15142,49.28939],[10.10432,49.34522],[10.14072,49.39401],[10.1086,49.44555],[10.11074,49.50537],[10.0722,49.53316],[10.01654,49.47616],[9.92662,49.47894],[9.92448,49.55678],[9.89878,49.58177],[9.85596,49.53872],[9.80672,49.55678],[9.86667,49.60675],[9.85382,49.6442],[9.81743,49.66083],[9.83455,49.68993],[9.79602,49.72039],[9.75748,49.70793],[9.74035,49.68577],[9.70609,49.71624],[9.67826,49.71624],[9.68254,49.68854],[9.62045,49.69131],[9.64615,49.78955],[9.55836,49.77434],[9.57121,49.73561],[9.50698,49.75222],[9.49199,49.77987],[9.46844,49.76051],[9.42562,49.77849],[9.40421,49.76466],[9.33356,49.7702],[9.32928,49.73423],[9.4085,49.72593],[9.42776,49.69824],[9.41492,49.6442],[9.38066,49.63865],[9.35925,49.64974],[9.33998,49.63727],[9.31215,49.64836],[9.27789,49.62617],[9.28432,49.60814],[9.2415,49.57483],[9.09805,49.57205],[9.06594,49.60814],[9.10019,49.65113],[9.09163,49.6927],[9.13017,49.71208],[9.13873,49.74253],[9.10876,49.75637],[9.13659,49.79093],[9.10019,49.78955],[9.07236,49.82824],[9.03596,49.83514],[9.01669,50.02671],[8.96317,50.03084],[8.95674,50.05971],[9.00171,50.0707],[9.02097,50.11054],[9.1216,50.12289],[9.15586,50.11328],[9.19654,50.11878],[9.18583,50.13525],[9.23507,50.1476],[9.37638,50.12701],[9.4085,50.0817],[9.52197,50.09543],[9.50484,50.14211],[9.53267,50.16406],[9.48985,50.16954],[9.49413,50.24354],[9.61403,50.22163],[9.66541,50.23532],[9.63544,50.24901],[9.66756,50.27228],[9.74249,50.30922],[9.72964,50.35841],[9.77032,50.42939],[9.86881,50.40074],[9.91805,50.40893],[10.03581,50.47982],[10.03795,50.51115],[10.12359,50.56846]]],terms_url:"https://www.ldbv.bayern.de/",terms_text:"Bayerische Vermessungsverwaltung",best:true},{id:"route500hydro",name:"BD Carthage",type:"tms",template:"https://{switch:a,b,c}.tile.openstreetmap.fr/route500hydro/{zoom}/{x}/{y}.png",zoomExtent:[6,20],polygon:[[[-2.7,43.9],[-6.3,48.98],[-2.25,50.09],[1.31,50.88],[2.35816,51.32937],[2.5488,51.09759],[2.57048,51.07409],[2.58741,51.01763],[2.59845,51.0051],[2.61558,50.99749],[2.63986,50.95766],[2.64225,50.94578],[2.62452,50.9256],[2.61962,50.91067],[2.62396,50.86071],[2.62781,50.85054],[2.63786,50.83696],[2.6511,50.82906],[2.73267,50.81738],[2.79995,50.73795],[2.81655,50.73092],[2.85265,50.73335],[2.89072,50.7162],[2.90492,50.71536],[2.9161,50.72418],[2.93508,50.75592],[3.00718,50.78377],[3.08218,50.78749],[3.09244,50.79092],[3.11412,50.80566],[3.14877,50.80195],[3.2154,50.73111],[3.22149,50.7267],[3.27051,50.70375],[3.27545,50.67757],[3.26576,50.6604],[3.26588,50.64054],[3.28922,50.60028],[3.29219,50.55037],[3.3056,50.53267],[3.37551,50.50839],[3.3898,50.50884],[3.4748,50.54445],[3.52173,50.53459],[3.53266,50.51873],[3.54779,50.51012],[3.61523,50.50558],[3.67378,50.45642],[3.68415,50.35277],[3.6901,50.34044],[3.70258,50.33482],[3.71576,50.33854],[3.74935,50.36279],[3.84109,50.36558],[3.90189,50.3436],[3.91317,50.34291],[4.02672,50.36904],[4.13761,50.29984],[4.14388,50.29727],[4.21444,50.28167],[4.22904,50.26664],[4.23078,50.25233],[4.17084,50.18579],[4.16601,50.16888],[4.1764,50.1547],[4.21195,50.13602],[4.24074,50.07102],[4.23193,50.05551],[4.18164,50.03436],[4.17177,50.02537],[4.16976,50.01217],[4.1765,50.00065],[4.20633,49.97546],[4.22164,49.97089],[4.30877,49.98145],[4.44542,49.9523],[4.45469,49.95251],[4.6581,50.00609],[4.66936,50.01392],[4.67293,50.02716],[4.66924,50.06972],[4.69517,50.10472],[4.83123,50.17941],[4.8815,50.16436],[4.90479,50.14451],[4.90426,50.12639],[4.88076,50.0815],[4.86277,50.0745],[4.85104,50.06216],[4.84331,50.03884],[4.84331,50.03883],[4.8433,50.03881],[4.82678,49.989],[4.82662,49.97692],[4.83343,49.96696],[4.89654,49.91753],[4.89755,49.89424],[4.87913,49.86942],[4.87625,49.85111],[4.88924,49.81266],[4.89769,49.80204],[4.91098,49.79926],[4.99534,49.81116],[5.01867,49.79272],[5.02686,49.78886],[5.09944,49.77323],[5.13458,49.73462],[5.1412,49.72984],[5.18761,49.70906],[5.19602,49.70732],[5.28157,49.70836],[5.33363,49.67308],[5.344,49.65049],[5.3544,49.64041],[5.43141,49.60791],[5.48205,49.52815],[5.49294,49.51979],[5.50666,49.52042],[5.55401,49.54025],[5.59311,49.53424],[5.6076,49.53761],[5.641,49.56095],[5.70676,49.55267],[5.71578,49.55361],[5.77526,49.57414],[5.8399,49.55321],[5.86126,49.52038],[5.876,49.5114],[5.97516,49.50129],[5.99801,49.47317],[6.01627,49.46597],[6.08635,49.47562],[6.09319,49.47787],[6.17397,49.52187],[6.24643,49.52511],[6.334,49.48235],[6.34423,49.48037],[6.43515,49.487],[6.5451,49.44384],[6.60639,49.37868],[6.60497,49.33739],[6.61627,49.31869],[6.67013,49.29269],[6.72996,49.22917],[6.74328,49.19086],[6.76026,49.17752],[6.80904,49.17284],[6.82473,49.17826],[6.83093,49.19366],[6.82982,49.21802],[6.85119,49.23136],[6.88453,49.2239],[6.89322,49.22389],[6.93753,49.23369],[7.04055,49.19794],[7.0463,49.17503],[7.05478,49.16313],[7.06908,49.16018],[7.10494,49.16634],[7.14315,49.14159],[7.1535,49.13839],[7.28683,49.13488],[7.29893,49.13856],[7.36095,49.18259],[7.45012,49.19517],[7.50113,49.17672],[7.54379,49.10572],[7.5579,49.09626],[7.6296,49.08527],[7.64722,49.06722],[7.6612,49.06119],[7.75401,49.05963],[7.76073,49.06067],[7.80291,49.07489],[7.85525,49.05329],[7.8673,49.05227],[7.93826,49.06832],[8.08069,49.00688],[8.2225,48.98787],[8.23704,48.97683],[8.23589,48.95817],[8.20888,48.94863],[8.20089,48.94339],[8.15824,48.89753],[8.10087,48.7993],[7.99071,48.74478],[7.98534,48.7409],[7.90422,48.65865],[7.85605,48.63606],[7.8484,48.62977],[7.81842,48.58883],[7.81456,48.57704],[7.81449,48.50968],[7.78547,48.48337],[7.78055,48.47652],[7.74506,48.39484],[7.74357,48.38427],[7.75159,48.32322],[7.71085,48.29841],[7.70241,48.28803],[7.67661,48.21555],[7.59605,48.11698],[7.59165,48.10648],[7.58522,48.04694],[7.59127,48.03035],[7.62437,47.99865],[7.63205,47.97081],[7.57554,47.87436],[7.5728,47.86435],[7.57267,47.83631],[7.54581,47.78793],[7.54418,47.77232],[7.55758,47.72899],[7.53526,47.6989],[7.53136,47.68564],[7.537,47.67302],[7.60016,47.60822],[7.58967,47.56755],[7.55424,47.55128],[7.54511,47.54283],[7.51256,47.48439],[7.38747,47.42111],[7.32653,47.4273],[7.24435,47.40939],[7.16708,47.4335],[7.15212,47.47612],[7.14279,47.48707],[7.12853,47.48893],[7.0801,47.47718],[7.03557,47.48695],[7.02102,47.48458],[7.01205,47.47287],[7.003,47.44095],[6.9551,47.40808],[6.94716,47.39698],[6.94818,47.38337],[6.95769,47.37359],[6.97126,47.37218],[7.018,47.38386],[7.05623,47.37035],[7.07007,47.35005],[7.05958,47.32257],[6.97424,47.27856],[6.96347,47.26233],[6.96134,47.23479],[6.89443,47.19393],[6.88913,47.18922],[6.85545,47.14636],[6.76907,47.10751],[6.76011,47.09953],[6.72561,47.0418],[6.62355,46.9811],[6.4812,46.9445],[6.46892,46.93522],[6.46686,46.91997],[6.47548,46.88771],[6.4535,46.8239],[6.45644,46.80534],[6.46722,46.79104],[6.46098,46.76887],[6.15817,46.59343],[6.14872,46.58069],[6.15152,46.56508],[6.16549,46.54399],[6.15811,46.52456],[6.10174,46.46979],[6.09572,46.45418],[6.09704,46.43317],[6.10829,46.41643],[6.16622,46.38839],[6.17817,46.36922],[6.13748,46.31297],[6.13371,46.30227],[6.13038,46.23737],[6.1103,46.22344],[6.08865,46.23081],[6.07717,46.23123],[6.01857,46.21601],[6.00681,46.20752],[6.00388,46.19332],[6.00787,46.16977],[6.01783,46.15564],[6.03509,46.15456],[6.05564,46.16288],[6.12468,46.15415],[6.13778,46.15702],[6.24026,46.22094],[6.24906,46.23299],[6.24707,46.24777],[6.21148,46.31057],[6.21219,46.32485],[6.23946,46.36705],[6.31648,46.41557],[6.41083,46.42495],[6.41748,46.42682],[6.50498,46.46871],[6.63047,46.47435],[6.74665,46.45695],[6.82244,46.42925],[6.81832,46.38181],[6.80484,46.36179],[6.80189,46.34639],[6.81095,46.33359],[6.86491,46.30038],[6.87504,46.28007],[6.86092,46.2439],[6.82698,46.21188],[6.82075,46.19862],[6.81863,46.16592],[6.82259,46.15261],[6.83427,46.14509],[6.90382,46.12971],[6.90491,46.09595],[6.90932,46.08406],[6.92001,46.07721],[6.94898,46.0699],[7.01556,46.00883],[7.05191,45.93066],[7.04533,45.92217],[7.04497,45.92064],[7.04394,45.92036],[6.99582,45.85822],[6.94097,45.83551],[6.84376,45.82387],[6.83102,45.81711],[6.82614,45.80353],[6.82787,45.73217],[6.83174,45.72082],[6.8414,45.71373],[6.90729,45.69124],[6.92419,45.66935],[6.94247,45.66172],[6.97131,45.66528],[7.00597,45.64945],[7.01151,45.63652],[6.9978,45.60877],[6.99643,45.59465],[7.0158,45.52354],[7.02774,45.5102],[7.1072,45.47877],[7.1228,45.44924],[7.13304,45.44001],[7.1856,45.41894],[7.19515,45.40409],[7.17075,45.35069],[7.14232,45.32298],[7.13649,45.30576],[7.14458,45.25048],[7.08417,45.20279],[6.99279,45.19823],[6.98106,45.19368],[6.90009,45.12689],[6.85843,45.11699],[6.78283,45.14228],[6.77056,45.14242],[6.67751,45.11356],[6.6653,45.10289],[6.66501,45.08667],[6.68237,45.04558],[6.69602,45.03395],[6.75744,45.01884],[6.78375,44.9146],[6.7942,44.90161],[6.86698,44.86519],[6.8798,44.86346],[6.93633,44.87461],[7.01795,44.84402],[7.03453,44.82282],[7.03711,44.75009],[7.0496,44.73226],[7.07224,44.72311],[7.08651,44.6968],[7.08666,44.68085],[7.07671,44.67134],[6.99007,44.67203],[6.97413,44.66431],[6.97056,44.64696],[6.97819,44.61784],[6.94659,44.57124],[6.88235,44.53479],[6.87233,44.5195],[6.87892,44.50245],[6.95894,44.43129],[6.95872,44.42908],[6.92167,44.41436],[6.91223,44.40659],[6.90907,44.39477],[6.90972,44.38195],[6.91637,44.36804],[6.99909,44.29414],[7.01181,44.256],[7.01983,44.24558],[7.03259,44.2424],[7.07312,44.2461],[7.1651,44.22112],[7.24533,44.18544],[7.26053,44.16682],[7.27537,44.15947],[7.33878,44.1574],[7.36278,44.13834],[7.37776,44.13416],[7.56283,44.15792],[7.5642,44.15836],[7.56478,44.15817],[7.60548,44.1634],[7.6162,44.16827],[7.63989,44.18928],[7.68608,44.1861],[7.69422,44.17795],[7.68937,44.13869],[7.69445,44.12276],[7.72786,44.08615],[7.72403,44.05704],[7.68603,44.02371],[7.68077,44.0164],[7.66016,43.9672],[7.59624,43.94466],[7.58419,43.93287],[7.56858,43.89159],[7.5271,43.87434],[7.51649,43.86397],[7.51594,43.84915],[7.53622,43.79234],[9.8,43.1],[9.63227,41.43244],[9.36968,41.35052],[9.27311,41.29196],[8.94186,41.27688],[5.8,41.64],[3.17358,42.41768],[3.16081,42.42757],[3.0944,42.41457],[3.03402,42.45331],[3.02214,42.45645],[2.87822,42.4487],[2.87019,42.44653],[2.78424,42.40256],[2.7413,42.41128],[2.72928,42.40998],[2.69331,42.39417],[2.68378,42.3854],[2.68162,42.37263],[2.68585,42.34679],[2.66719,42.33008],[2.58106,42.34418],[2.56777,42.34173],[2.5338,42.32197],[2.47795,42.32986],[2.41933,42.37658],[2.41222,42.38021],[2.26719,42.42055],[2.25973,42.42117],[2.20694,42.41558],[2.20653,42.41526],[2.20526,42.41541],[2.16028,42.41065],[2.14881,42.40545],[2.09393,42.35474],[2.00861,42.33818],[1.965,42.36473],[1.93076,42.42442],[1.92089,42.43302],[1.88467,42.44761],[1.88459,42.44762],[1.88444,42.4477],[1.82774,42.47056],[1.72567,42.48452],[1.71561,42.50125],[1.7272,42.56103],[1.72479,42.57499],[1.71011,42.59992],[1.69377,42.60975],[1.60283,42.61382],[1.56069,42.6392],[1.54636,42.64166],[1.50444,42.6331],[1.4921,42.62502],[1.47238,42.59703],[1.43792,42.59264],[1.41936,42.60643],[1.38032,42.67415],[1.37335,42.68127],[1.33313,42.70563],[1.32364,42.7085],[1.23221,42.71248],[1.16554,42.69928],[1.08546,42.76635],[1.07564,42.77079],[0.95937,42.78852],[0.95073,42.78794],[0.92265,42.7797],[0.84606,42.8157],[0.71511,42.8464],[0.70017,42.84402],[0.69117,42.83186],[0.67409,42.76479],[0.67474,42.75286],[0.69192,42.70684],[0.669,42.67901],[0.43024,42.67863],[0.3715,42.70308],[0.35954,42.70415],[0.34912,42.69817],[0.32567,42.67274],[0.29571,42.66388],[0.24594,42.70175],[0.23972,42.70494],[0.18967,42.72039],[0.17919,42.72075],[-0.01993,42.67389],[-0.06726,42.6848],[-0.16949,42.77157],[-0.29987,42.82697],[-0.31683,42.82635],[-0.39208,42.78766],[-0.44354,42.78453],[-0.48842,42.80255],[-0.50868,42.79935],[-0.54499,42.76906],[-0.56721,42.76937],[-0.67446,42.86392],[-0.68094,42.86775],[-0.73372,42.88666],[-0.7476,42.93879],[-0.75711,42.95107],[-0.77253,42.95284],[-0.82114,42.93865],[-0.94508,42.94192],[-1.02313,42.98206],[-1.10852,43.00409],[-1.1156,43.00461],[-1.14775,43.00124],[-1.15845,43.01452],[-1.16736,43.02083],[-1.21622,43.0381],[-1.22612,43.03898],[-1.26236,43.03303],[-1.30643,43.05531],[-1.31992,43.05696],[-1.33135,43.0496],[-1.3542,43.0197],[-1.43868,43.03371],[-1.4775,43.06889],[-1.48311,43.08561],[-1.47641,43.10248],[-1.43479,43.13087],[-1.42732,43.1404],[-1.39411,43.22935],[-1.39531,43.24596],[-1.40868,43.25591],[-1.52629,43.28099],[-1.54626,43.2737],[-1.57149,43.2412],[-1.61053,43.24223],[-1.65,43.29323],[-1.66953,43.30065],[-1.73359,43.28856],[-1.75606,43.31966],[-1.76297,43.32565],[-1.79156,43.34067],[-1.80099,43.37017],[-1.78509,43.39037],[-1.7835,43.39686],[-2.7,43.9]]],terms_url:"http://www.sandre.eaufrance.fr/actualite/la-bd-carthage-en-licence-ouverte-open-licence",terms_text:"Tiles © cquest@Openstreetmap France, data © Onema - IGN, LO/OL",description:"Réseau hydrographique: cours et plans d'eau et POI",overlay:true},{id:"fr.ign.bdortho",name:"BDOrtho IGN",type:"tms",template:"https://proxy-ign.openstreetmap.fr/94GjiyqD/bdortho/{zoom}/{x}/{y}.jpg",zoomExtent:[2,21],polygon:[[[-2.7,43.9],[-6.3,48.98],[-2.25,50.09],[1.31,50.88],[2.35816,51.32937],[2.5488,51.09759],[2.57048,51.07409],[2.58741,51.01763],[2.59845,51.0051],[2.61558,50.99749],[2.63986,50.95766],[2.64225,50.94578],[2.62452,50.9256],[2.61962,50.91067],[2.62396,50.86071],[2.62781,50.85054],[2.63786,50.83696],[2.6511,50.82906],[2.73267,50.81738],[2.79995,50.73795],[2.81655,50.73092],[2.85265,50.73335],[2.89072,50.7162],[2.90492,50.71536],[2.9161,50.72418],[2.93508,50.75592],[3.00718,50.78377],[3.08218,50.78749],[3.09244,50.79092],[3.11412,50.80566],[3.14877,50.80195],[3.2154,50.73111],[3.22149,50.7267],[3.27051,50.70375],[3.27545,50.67757],[3.26576,50.6604],[3.26588,50.64054],[3.28922,50.60028],[3.29219,50.55037],[3.3056,50.53267],[3.37551,50.50839],[3.3898,50.50884],[3.4748,50.54445],[3.52173,50.53459],[3.53266,50.51873],[3.54779,50.51012],[3.61523,50.50558],[3.67378,50.45642],[3.68415,50.35277],[3.6901,50.34044],[3.70258,50.33482],[3.71576,50.33854],[3.74935,50.36279],[3.84109,50.36558],[3.90189,50.3436],[3.91317,50.34291],[4.02672,50.36904],[4.13761,50.29984],[4.14388,50.29727],[4.21444,50.28167],[4.22904,50.26664],[4.23078,50.25233],[4.17084,50.18579],[4.16601,50.16888],[4.1764,50.1547],[4.21195,50.13602],[4.24074,50.07102],[4.23193,50.05551],[4.18164,50.03436],[4.17177,50.02537],[4.16976,50.01217],[4.1765,50.00065],[4.20633,49.97546],[4.22164,49.97089],[4.30877,49.98145],[4.44542,49.9523],[4.45469,49.95251],[4.6581,50.00609],[4.66936,50.01392],[4.67293,50.02716],[4.66924,50.06972],[4.69517,50.10472],[4.83123,50.17941],[4.8815,50.16436],[4.90479,50.14451],[4.90426,50.12639],[4.88076,50.0815],[4.86277,50.0745],[4.85104,50.06216],[4.84331,50.03884],[4.84331,50.03883],[4.8433,50.03881],[4.82678,49.989],[4.82662,49.97692],[4.83343,49.96696],[4.89654,49.91753],[4.89755,49.89424],[4.87913,49.86942],[4.87625,49.85111],[4.88924,49.81266],[4.89769,49.80204],[4.91098,49.79926],[4.99534,49.81116],[5.01867,49.79272],[5.02686,49.78886],[5.09944,49.77323],[5.13458,49.73462],[5.1412,49.72984],[5.18761,49.70906],[5.19602,49.70732],[5.28157,49.70836],[5.33363,49.67308],[5.344,49.65049],[5.3544,49.64041],[5.43141,49.60791],[5.48205,49.52815],[5.49294,49.51979],[5.50666,49.52042],[5.55401,49.54025],[5.59311,49.53424],[5.6076,49.53761],[5.641,49.56095],[5.70676,49.55267],[5.71578,49.55361],[5.77526,49.57414],[5.8399,49.55321],[5.86126,49.52038],[5.876,49.5114],[5.97516,49.50129],[5.99801,49.47317],[6.01627,49.46597],[6.08635,49.47562],[6.09319,49.47787],[6.17397,49.52187],[6.24643,49.52511],[6.334,49.48235],[6.34423,49.48037],[6.43515,49.487],[6.5451,49.44384],[6.60639,49.37868],[6.60497,49.33739],[6.61627,49.31869],[6.67013,49.29269],[6.72996,49.22917],[6.74328,49.19086],[6.76026,49.17752],[6.80904,49.17284],[6.82473,49.17826],[6.83093,49.19366],[6.82982,49.21802],[6.85119,49.23136],[6.88453,49.2239],[6.89322,49.22389],[6.93753,49.23369],[7.04055,49.19794],[7.0463,49.17503],[7.05478,49.16313],[7.06908,49.16018],[7.10494,49.16634],[7.14315,49.14159],[7.1535,49.13839],[7.28683,49.13488],[7.29893,49.13856],[7.36095,49.18259],[7.45012,49.19517],[7.50113,49.17672],[7.54379,49.10572],[7.5579,49.09626],[7.6296,49.08527],[7.64722,49.06722],[7.6612,49.06119],[7.75401,49.05963],[7.76073,49.06067],[7.80291,49.07489],[7.85525,49.05329],[7.8673,49.05227],[7.93826,49.06832],[8.08069,49.00688],[8.2225,48.98787],[8.23704,48.97683],[8.23589,48.95817],[8.20888,48.94863],[8.20089,48.94339],[8.15824,48.89753],[8.10087,48.7993],[7.99071,48.74478],[7.98534,48.7409],[7.90422,48.65865],[7.85605,48.63606],[7.8484,48.62977],[7.81842,48.58883],[7.81456,48.57704],[7.81449,48.50968],[7.78547,48.48337],[7.78055,48.47652],[7.74506,48.39484],[7.74357,48.38427],[7.75159,48.32322],[7.71085,48.29841],[7.70241,48.28803],[7.67661,48.21555],[7.59605,48.11698],[7.59165,48.10648],[7.58522,48.04694],[7.59127,48.03035],[7.62437,47.99865],[7.63205,47.97081],[7.57554,47.87436],[7.5728,47.86435],[7.57267,47.83631],[7.54581,47.78793],[7.54418,47.77232],[7.55758,47.72899],[7.53526,47.6989],[7.53136,47.68564],[7.537,47.67302],[7.60016,47.60822],[7.58967,47.56755],[7.55424,47.55128],[7.54511,47.54283],[7.51256,47.48439],[7.38747,47.42111],[7.32653,47.4273],[7.24435,47.40939],[7.16708,47.4335],[7.15212,47.47612],[7.14279,47.48707],[7.12853,47.48893],[7.0801,47.47718],[7.03557,47.48695],[7.02102,47.48458],[7.01205,47.47287],[7.003,47.44095],[6.9551,47.40808],[6.94716,47.39698],[6.94818,47.38337],[6.95769,47.37359],[6.97126,47.37218],[7.018,47.38386],[7.05623,47.37035],[7.07007,47.35005],[7.05958,47.32257],[6.97424,47.27856],[6.96347,47.26233],[6.96134,47.23479],[6.89443,47.19393],[6.88913,47.18922],[6.85545,47.14636],[6.76907,47.10751],[6.76011,47.09953],[6.72561,47.0418],[6.62355,46.9811],[6.4812,46.9445],[6.46892,46.93522],[6.46686,46.91997],[6.47548,46.88771],[6.4535,46.8239],[6.45644,46.80534],[6.46722,46.79104],[6.46098,46.76887],[6.15817,46.59343],[6.14872,46.58069],[6.15152,46.56508],[6.16549,46.54399],[6.15811,46.52456],[6.10174,46.46979],[6.09572,46.45418],[6.09704,46.43317],[6.10829,46.41643],[6.16622,46.38839],[6.17817,46.36922],[6.13748,46.31297],[6.13371,46.30227],[6.13038,46.23737],[6.1103,46.22344],[6.08865,46.23081],[6.07717,46.23123],[6.01857,46.21601],[6.00681,46.20752],[6.00388,46.19332],[6.00787,46.16977],[6.01783,46.15564],[6.03509,46.15456],[6.05564,46.16288],[6.12468,46.15415],[6.13778,46.15702],[6.24026,46.22094],[6.24906,46.23299],[6.24707,46.24777],[6.21148,46.31057],[6.21219,46.32485],[6.23946,46.36705],[6.31648,46.41557],[6.41083,46.42495],[6.41748,46.42682],[6.50498,46.46871],[6.63047,46.47435],[6.74665,46.45695],[6.82244,46.42925],[6.81832,46.38181],[6.80484,46.36179],[6.80189,46.34639],[6.81095,46.33359],[6.86491,46.30038],[6.87504,46.28007],[6.86092,46.2439],[6.82698,46.21188],[6.82075,46.19862],[6.81863,46.16592],[6.82259,46.15261],[6.83427,46.14509],[6.90382,46.12971],[6.90491,46.09595],[6.90932,46.08406],[6.92001,46.07721],[6.94898,46.0699],[7.01556,46.00883],[7.05191,45.93066],[7.04533,45.92217],[7.04497,45.92064],[7.04394,45.92036],[6.99582,45.85822],[6.94097,45.83551],[6.84376,45.82387],[6.83102,45.81711],[6.82614,45.80353],[6.82787,45.73217],[6.83174,45.72082],[6.8414,45.71373],[6.90729,45.69124],[6.92419,45.66935],[6.94247,45.66172],[6.97131,45.66528],[7.00597,45.64945],[7.01151,45.63652],[6.9978,45.60877],[6.99643,45.59465],[7.0158,45.52354],[7.02774,45.5102],[7.1072,45.47877],[7.1228,45.44924],[7.13304,45.44001],[7.1856,45.41894],[7.19515,45.40409],[7.17075,45.35069],[7.14232,45.32298],[7.13649,45.30576],[7.14458,45.25048],[7.08417,45.20279],[6.99279,45.19823],[6.98106,45.19368],[6.90009,45.12689],[6.85843,45.11699],[6.78283,45.14228],[6.77056,45.14242],[6.67751,45.11356],[6.6653,45.10289],[6.66501,45.08667],[6.68237,45.04558],[6.69602,45.03395],[6.75744,45.01884],[6.78375,44.9146],[6.7942,44.90161],[6.86698,44.86519],[6.8798,44.86346],[6.93633,44.87461],[7.01795,44.84402],[7.03453,44.82282],[7.03711,44.75009],[7.0496,44.73226],[7.07224,44.72311],[7.08651,44.6968],[7.08666,44.68085],[7.07671,44.67134],[6.99007,44.67203],[6.97413,44.66431],[6.97056,44.64696],[6.97819,44.61784],[6.94659,44.57124],[6.88235,44.53479],[6.87233,44.5195],[6.87892,44.50245],[6.95894,44.43129],[6.95872,44.42908],[6.92167,44.41436],[6.91223,44.40659],[6.90907,44.39477],[6.90972,44.38195],[6.91637,44.36804],[6.99909,44.29414],[7.01181,44.256],[7.01983,44.24558],[7.03259,44.2424],[7.07312,44.2461],[7.1651,44.22112],[7.24533,44.18544],[7.26053,44.16682],[7.27537,44.15947],[7.33878,44.1574],[7.36278,44.13834],[7.37776,44.13416],[7.56283,44.15792],[7.5642,44.15836],[7.56478,44.15817],[7.60548,44.1634],[7.6162,44.16827],[7.63989,44.18928],[7.68608,44.1861],[7.69422,44.17795],[7.68937,44.13869],[7.69445,44.12276],[7.72786,44.08615],[7.72403,44.05704],[7.68603,44.02371],[7.68077,44.0164],[7.66016,43.9672],[7.59624,43.94466],[7.58419,43.93287],[7.56858,43.89159],[7.5271,43.87434],[7.51649,43.86397],[7.51594,43.84915],[7.53622,43.79234],[9.8,43.1],[9.63227,41.43244],[9.36968,41.35052],[9.27311,41.29196],[8.94186,41.27688],[5.8,41.64],[3.17358,42.41768],[3.16081,42.42757],[3.0944,42.41457],[3.03402,42.45331],[3.02214,42.45645],[2.87822,42.4487],[2.87019,42.44653],[2.78424,42.40256],[2.7413,42.41128],[2.72928,42.40998],[2.69331,42.39417],[2.68378,42.3854],[2.68162,42.37263],[2.68585,42.34679],[2.66719,42.33008],[2.58106,42.34418],[2.56777,42.34173],[2.5338,42.32197],[2.47795,42.32986],[2.41933,42.37658],[2.41222,42.38021],[2.26719,42.42055],[2.25973,42.42117],[2.20694,42.41558],[2.20653,42.41526],[2.20526,42.41541],[2.16028,42.41065],[2.14881,42.40545],[2.09393,42.35474],[2.00861,42.33818],[1.965,42.36473],[1.93076,42.42442],[1.92089,42.43302],[1.88467,42.44761],[1.88459,42.44762],[1.88444,42.4477],[1.82774,42.47056],[1.72567,42.48452],[1.71561,42.50125],[1.7272,42.56103],[1.72479,42.57499],[1.71011,42.59992],[1.69377,42.60975],[1.60283,42.61382],[1.56069,42.6392],[1.54636,42.64166],[1.50444,42.6331],[1.4921,42.62502],[1.47238,42.59703],[1.43792,42.59264],[1.41936,42.60643],[1.38032,42.67415],[1.37335,42.68127],[1.33313,42.70563],[1.32364,42.7085],[1.23221,42.71248],[1.16554,42.69928],[1.08546,42.76635],[1.07564,42.77079],[0.95937,42.78852],[0.95073,42.78794],[0.92265,42.7797],[0.84606,42.8157],[0.71511,42.8464],[0.70017,42.84402],[0.69117,42.83186],[0.67409,42.76479],[0.67474,42.75286],[0.69192,42.70684],[0.669,42.67901],[0.43024,42.67863],[0.3715,42.70308],[0.35954,42.70415],[0.34912,42.69817],[0.32567,42.67274],[0.29571,42.66388],[0.24594,42.70175],[0.23972,42.70494],[0.18967,42.72039],[0.17919,42.72075],[-0.01993,42.67389],[-0.06726,42.6848],[-0.16949,42.77157],[-0.29987,42.82697],[-0.31683,42.82635],[-0.39208,42.78766],[-0.44354,42.78453],[-0.48842,42.80255],[-0.50868,42.79935],[-0.54499,42.76906],[-0.56721,42.76937],[-0.67446,42.86392],[-0.68094,42.86775],[-0.73372,42.88666],[-0.7476,42.93879],[-0.75711,42.95107],[-0.77253,42.95284],[-0.82114,42.93865],[-0.94508,42.94192],[-1.02313,42.98206],[-1.10852,43.00409],[-1.1156,43.00461],[-1.14775,43.00124],[-1.15845,43.01452],[-1.16736,43.02083],[-1.21622,43.0381],[-1.22612,43.03898],[-1.26236,43.03303],[-1.30643,43.05531],[-1.31992,43.05696],[-1.33135,43.0496],[-1.3542,43.0197],[-1.43868,43.03371],[-1.4775,43.06889],[-1.48311,43.08561],[-1.47641,43.10248],[-1.43479,43.13087],[-1.42732,43.1404],[-1.39411,43.22935],[-1.39531,43.24596],[-1.40868,43.25591],[-1.52629,43.28099],[-1.54626,43.2737],[-1.57149,43.2412],[-1.61053,43.24223],[-1.65,43.29323],[-1.66953,43.30065],[-1.73359,43.28856],[-1.75606,43.31966],[-1.76297,43.32565],[-1.79156,43.34067],[-1.80099,43.37017],[-1.78509,43.39037],[-1.7835,43.39686],[-2.7,43.9]],[[-61.27501,14.90218],[-60.72368,14.90101],[-60.72489,14.36686],[-61.27622,14.36803],[-61.27501,14.90218]],[[-61.92802,16.58618],[-61.92686,15.7394],[-60.88128,15.74072],[-60.88243,16.5875],[-61.92802,16.58618]],[[-53.89344,6.004],[-52.46522,5.4465],[-51.52039,4.51072],[-51.53687,4.11633],[-52.2345,3.10213],[-52.641,2.25162],[-52.92664,2.07597],[-53.72864,2.21869],[-54.20106,2.03205],[-54.8053,2.27358],[-54.31092,2.80589],[-54.31641,3.20085],[-54.12415,3.46408],[-54.12964,3.59567],[-54.42078,4.00127],[-54.58008,4.95962],[-53.89344,6.004]],[[55.08816,-20.77935],[55.95959,-20.77281],[55.96576,-21.49],[55.09434,-21.49651],[55.08816,-20.77935]],[[44.92054,-12.57363],[45.34826,-12.57029],[45.35274,-13.1163],[44.92502,-13.11963],[44.92054,-12.57363]],[[-178.57728,-14.70582],[-178.42568,-14.00334],[-176.34156,-12.83858],[-175.71534,-12.9189],[-175.91858,-13.58726],[-177.84638,-14.64983],[-178.57728,-14.70582]]],terms_url:"https://openstreetmap.fr/bdortho",terms_text:"BDOrtho IGN",best:true,icon:"http://www.ign.fr/institut/sites/all/themes/ign_institut/logo.png"},{id:"Benin_cotonou_pleiade_2016",name:"Benin: Cotonou Pleiade 2016",type:"tms",template:"https://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}",endDate:"2016-01-01T00:00:00.000Z",startDate:"2016-01-01T00:00:00.000Z",zoomExtent:[0,21],polygon:[[[2.31954,6.55745],[2.33645,6.56024],[2.36377,6.56211],[2.36738,6.56068],[2.37777,6.5494],[2.37779,6.53485],[2.36994,6.49332],[2.37038,6.45527],[2.36958,6.45269],[2.36188,6.44177],[2.35392,6.40545],[2.36749,6.4015],[2.39526,6.40072],[2.40128,6.40374],[2.40588,6.40341],[2.42046,6.39383],[2.42485,6.39794],[2.42949,6.39887],[2.43625,6.39628],[2.43958,6.40042],[2.44439,6.40189],[2.45376,6.39899],[2.47145,6.39632],[2.48162,6.39106],[2.49453,6.3874],[2.50893,6.38888],[2.50719,6.39229],[2.5012,6.39162],[2.4963,6.39521],[2.4951,6.40123],[2.49543,6.40401],[2.4983,6.41022],[2.50191,6.41282],[2.51087,6.41321],[2.52219,6.40849],[2.53352,6.40517],[2.5381,6.40961],[2.54111,6.4109],[2.54651,6.41099],[2.54654,6.40651],[2.57639,6.40724],[2.57642,6.41177],[2.58576,6.41196],[2.58868,6.41095],[2.60877,6.39414],[2.6257,6.39488],[2.64555,6.39729],[2.65039,6.39339],[2.65367,6.36823],[2.64312,6.36659],[2.61251,6.36289],[2.56868,6.3607],[2.54683,6.36055],[2.54687,6.35546],[2.50207,6.35461],[2.47064,6.35596],[2.46777,6.35203],[2.46423,6.3502],[2.45254,6.35006],[2.45113,6.34813],[2.44737,6.34629],[2.43757,6.34654],[2.43298,6.33841],[2.43016,6.33707],[2.42245,6.33707],[2.39236,6.34115],[2.39315,6.34115],[2.36528,6.34445],[2.35386,6.3453],[2.34377,6.34458],[2.34094,6.34534],[2.31086,6.36567],[2.28435,6.37465],[2.28147,6.37762],[2.27599,6.39517],[2.27612,6.3982],[2.31529,6.49261],[2.3158,6.55307],[2.31954,6.55745]],[[1.69563,6.25076],[1.7001,6.24712],[1.70418,6.24697],[1.75875,6.25836],[1.77079,6.25995],[1.81712,6.27161],[1.84457,6.27657],[1.85768,6.27945],[1.88843,6.28326],[1.90482,6.28595],[1.90618,6.29435],[1.90083,6.29721],[1.89881,6.29954],[1.89404,6.30085],[1.89048,6.2997],[1.88748,6.29636],[1.88344,6.29622],[1.8697,6.29227],[1.8564,6.29198],[1.85207,6.28675],[1.84991,6.28906],[1.84691,6.29203],[1.84353,6.29333],[1.84041,6.29315],[1.83627,6.29129],[1.8341,6.28733],[1.83417,6.2852],[1.8323,6.28456],[1.82786,6.28644],[1.82182,6.29084],[1.81563,6.28998],[1.81211,6.29143],[1.80758,6.29571],[1.80472,6.29693],[1.80074,6.2971],[1.79776,6.29612],[1.79625,6.29492],[1.7949,6.28965],[1.79641,6.28608],[1.80098,6.28338],[1.79567,6.28013],[1.79156,6.28174],[1.78499,6.28122],[1.78092,6.27753],[1.77588,6.2755],[1.76745,6.27696],[1.75653,6.27496],[1.74833,6.27239],[1.74762,6.27726],[1.74572,6.27938],[1.73948,6.27985],[1.7368,6.27761],[1.73572,6.27892],[1.72902,6.27911],[1.72435,6.27422],[1.72449,6.26786],[1.72556,6.26683],[1.69934,6.26159],[1.69573,6.25726],[1.69563,6.25076]]],best:true},{id:"Berlin-2011",name:"Berlin aerial photography 2011",type:"wms",template:"https://fbinter.stadt-berlin.de/fb/wms/senstadt/k_luftbild2011_20?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=0&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",endDate:"2011-01-01T00:00:00.000Z",startDate:"2011-01-01T00:00:00.000Z",polygon:[[[13.48699,52.68076],[13.52584,52.65196],[13.5299,52.64437],[13.54209,52.60921],[13.58109,52.58134],[13.59674,52.55936],[13.63477,52.55121],[13.66547,52.52854],[13.67199,52.50379],[13.65806,52.50372],[13.65796,52.49324],[13.7547,52.4565],[13.76644,52.43884],[13.76627,52.42973],[13.74494,52.39909],[13.65235,52.33133],[13.6417,52.33103],[13.62609,52.35491],[13.59432,52.37455],[13.53198,52.38376],[13.51948,52.39236],[13.48536,52.39227],[13.43552,52.38016],[13.42885,52.37401],[13.38689,52.37388],[13.38642,52.38667],[13.36857,52.38728],[13.37045,52.39349],[13.33968,52.40887],[13.31243,52.39775],[13.30557,52.40452],[13.23622,52.40342],[13.18886,52.40417],[13.17719,52.39067],[13.14859,52.38971],[13.14868,52.38421],[13.11889,52.38385],[13.11935,52.40025],[13.10487,52.40723],[13.07371,52.40668],[13.07367,52.41403],[13.10516,52.47897],[13.11685,52.47881],[13.112,52.55915],[13.11865,52.59156],[13.15251,52.60489],[13.16282,52.60462],[13.21264,52.6321],[13.22139,52.63215],[13.27292,52.66444],[13.31376,52.66442],[13.32714,52.64692],[13.36783,52.6468],[13.39158,52.65382],[13.42728,52.6549],[13.47594,52.68122],[13.48699,52.68076]]],terms_text:"Geoportal Berlin/Digitale farbige Orthophotos 2011"},{id:"Berlin-2014",name:"Berlin aerial photography 2014",type:"tms",template:"https://tiles.codefor.de/berlin-2014/{zoom}/{x}/{y}.png",endDate:"2014-01-01T00:00:00.000Z",startDate:"2014-01-01T00:00:00.000Z",polygon:[[[13.19746,52.64206],[13.25639,52.64285],[13.2558,52.66101],[13.31391,52.66185],[13.31476,52.64353],[13.37431,52.64462],[13.37386,52.66269],[13.4026,52.663],[13.40332,52.64501],[13.4334,52.64555],[13.43227,52.68001],[13.49082,52.68111],[13.49147,52.66428],[13.52092,52.66457],[13.5216,52.6465],[13.55096,52.6469],[13.55147,52.62938],[13.52219,52.62898],[13.52335,52.59248],[13.58263,52.59329],[13.58307,52.57535],[13.61246,52.57582],[13.61324,52.55784],[13.64268,52.55813],[13.64296,52.5401],[13.67253,52.54048],[13.67375,52.50475],[13.64413,52.5045],[13.64476,52.48608],[13.7037,52.48683],[13.70415,52.46901],[13.73362,52.4692],[13.73399,52.45121],[13.76358,52.45156],[13.76447,52.40209],[13.73546,52.39753],[13.73611,52.37963],[13.70678,52.37935],[13.70731,52.36136],[13.67785,52.36104],[13.67898,52.33017],[13.62102,52.32946],[13.61999,52.36033],[13.59046,52.36007],[13.5901,52.37806],[13.53116,52.37735],[13.53064,52.39525],[13.47168,52.39459],[13.47149,52.4125],[13.44101,52.41219],[13.44257,52.37604],[13.35487,52.37498],[13.35427,52.39306],[13.23667,52.39114],[13.23609,52.40922],[13.17635,52.40836],[13.17752,52.39029],[13.14791,52.38987],[13.14876,52.37459],[13.11971,52.37422],[13.11941,52.38955],[13.08981,52.38899],[13.08938,52.40707],[13.0618,52.40662],[13.06075,52.42408],[13.08842,52.42449],[13.086,52.47853],[13.11546,52.47896],[13.11462,52.49695],[13.1441,52.49729],[13.14332,52.5157],[13.1137,52.51528],[13.11077,52.6047],[13.19862,52.6062],[13.19746,52.64206]]],terms_text:"Geoportal Berlin/Digitale farbige Orthophotos 2014"},{id:"Berlin-2015",name:"Berlin aerial photography 2015",type:"tms",template:"https://tiles.codefor.de/berlin-2015/{zoom}/{x}/{y}.png",endDate:"2015-08-03T00:00:00.000Z",startDate:"2015-08-02T00:00:00.000Z",polygon:[[[13.11068,52.59538],[13.13975,52.60527],[13.18355,52.61488],[13.21262,52.63315],[13.24167,52.64282],[13.256,52.65201],[13.27004,52.67021],[13.31368,52.67072],[13.32914,52.66204],[13.32948,52.6529],[13.43284,52.65414],[13.44733,52.6816],[13.50561,52.68244],[13.50654,52.65531],[13.53605,52.65572],[13.5376,52.61991],[13.52229,52.61977],[13.52304,52.60165],[13.59776,52.58469],[13.59865,52.55769],[13.62817,52.55805],[13.64303,52.5492],[13.65813,52.54042],[13.67312,52.53144],[13.67356,52.51358],[13.65913,52.51344],[13.65998,52.48643],[13.68931,52.48687],[13.73386,52.46933],[13.73405,52.46034],[13.76362,52.46068],[13.76431,52.42464],[13.74941,52.42474],[13.75045,52.39778],[13.73585,52.39762],[13.70661,52.37944],[13.707,52.3614],[13.67782,52.36125],[13.66405,52.33395],[13.62073,52.33337],[13.62031,52.36042],[13.58986,52.3781],[13.53149,52.37748],[13.53133,52.38641],[13.44223,52.38484],[13.42813,52.3667],[13.38464,52.3662],[13.35432,52.39301],[13.29537,52.39209],[13.29531,52.40103],[13.19171,52.39957],[13.19222,52.39056],[13.14774,52.38996],[13.14839,52.38095],[13.11964,52.38041],[13.0744,52.40683],[13.07392,52.42426],[13.10275,52.43374],[13.10123,52.47874],[13.11558,52.47897],[13.11068,52.59538]]],terms_text:"Geoportal Berlin/Digitale farbige Orthophotos 2015"},{id:"Berlin-2016",name:"Berlin aerial photography 2016",type:"tms",template:"https://tiles.codefor.de/berlin-2016/{zoom}/{x}/{y}.png",endDate:"2016-04-03T00:00:00.000Z",startDate:"2016-04-02T00:00:00.000Z",polygon:[[[13.29535,52.392],[13.29502,52.40083],[13.19206,52.39937],[13.19241,52.39035],[13.14839,52.3897],[13.14877,52.38046],[13.11926,52.38001],[13.11888,52.38921],[13.08906,52.40693],[13.07431,52.4067],[13.07356,52.42447],[13.10259,52.43394],[13.10073,52.47912],[13.11534,52.47934],[13.11055,52.59579],[13.13972,52.60527],[13.18403,52.60593],[13.21212,52.63346],[13.27041,52.65222],[13.26973,52.67025],[13.31405,52.67086],[13.32953,52.65323],[13.43315,52.65458],[13.43254,52.67251],[13.44682,52.68189],[13.50593,52.68261],[13.50681,52.65545],[13.53643,52.6558],[13.53757,52.61964],[13.52288,52.61946],[13.52345,52.6017],[13.53842,52.59279],[13.56782,52.59313],[13.59798,52.58464],[13.5988,52.55755],[13.62826,52.55788],[13.65822,52.53124],[13.67314,52.53139],[13.67365,52.51359],[13.65912,52.51344],[13.65989,52.48661],[13.68929,52.48692],[13.7188,52.47807],[13.73406,52.4604],[13.7636,52.46069],[13.76454,52.42482],[13.75027,52.42468],[13.75097,52.39814],[13.70722,52.37923],[13.70772,52.36111],[13.67826,52.36081],[13.67876,52.34302],[13.66428,52.34287],[13.66454,52.33367],[13.62038,52.33319],[13.61959,52.36012],[13.58956,52.37786],[13.5313,52.37719],[13.53103,52.38581],[13.44254,52.38473],[13.42861,52.36674],[13.38418,52.36617],[13.35417,52.39279],[13.29535,52.392]]],terms_text:"Geoportal Berlin/Digitale farbige Orthophotos 2016"},{id:"Berlin-2016-infrared",name:"Berlin aerial photography 2016 (infrared)",type:"tms",template:"https://tiles.codefor.de/berlin-2016i/{zoom}/{x}/{y}.png",endDate:"2016-04-03T00:00:00.000Z",startDate:"2016-04-02T00:00:00.000Z",polygon:[[[13.29535,52.392],[13.29502,52.40083],[13.19206,52.39937],[13.19241,52.39035],[13.14839,52.3897],[13.14877,52.38046],[13.11926,52.38001],[13.11888,52.38921],[13.08906,52.40693],[13.07431,52.4067],[13.07356,52.42447],[13.10259,52.43394],[13.10073,52.47912],[13.11534,52.47934],[13.11055,52.59579],[13.13972,52.60527],[13.18403,52.60593],[13.21212,52.63346],[13.27041,52.65222],[13.26973,52.67025],[13.31405,52.67086],[13.32953,52.65323],[13.43315,52.65458],[13.43254,52.67251],[13.44682,52.68189],[13.50593,52.68261],[13.50681,52.65545],[13.53643,52.6558],[13.53757,52.61964],[13.52288,52.61946],[13.52345,52.6017],[13.53842,52.59279],[13.56782,52.59313],[13.59798,52.58464],[13.5988,52.55755],[13.62826,52.55788],[13.65822,52.53124],[13.67314,52.53139],[13.67365,52.51359],[13.65912,52.51344],[13.65989,52.48661],[13.68929,52.48692],[13.7188,52.47807],[13.73406,52.4604],[13.7636,52.46069],[13.76454,52.42482],[13.75027,52.42468],[13.75097,52.39814],[13.70722,52.37923],[13.70772,52.36111],[13.67826,52.36081],[13.67876,52.34302],[13.66428,52.34287],[13.66454,52.33367],[13.62038,52.33319],[13.61959,52.36012],[13.58956,52.37786],[13.5313,52.37719],[13.53103,52.38581],[13.44254,52.38473],[13.42861,52.36674],[13.38418,52.36617],[13.35417,52.39279],[13.29535,52.392]]],terms_text:"Geoportal Berlin/Digitale Color-Infrarot-Orthophotos 2016"},{id:"Berlin-2017",name:"Berlin aerial photography 2017",type:"tms",template:"https://tiles.codefor.de/berlin-2017/{zoom}/{x}/{y}.png",endDate:"2017-03-28T00:00:00.000Z",startDate:"2017-03-27T00:00:00.000Z",polygon:[[[13.29535,52.392],[13.29502,52.40083],[13.19206,52.39937],[13.19241,52.39035],[13.14839,52.3897],[13.14877,52.38046],[13.11926,52.38001],[13.11888,52.38921],[13.08906,52.40693],[13.07431,52.4067],[13.07356,52.42447],[13.10259,52.43394],[13.10073,52.47912],[13.11534,52.47934],[13.11055,52.59579],[13.13972,52.60527],[13.18403,52.60593],[13.21212,52.63346],[13.27041,52.65222],[13.26973,52.67025],[13.31405,52.67086],[13.32953,52.65323],[13.43315,52.65458],[13.43254,52.67251],[13.44682,52.68189],[13.50593,52.68261],[13.50681,52.65545],[13.53643,52.6558],[13.53757,52.61964],[13.52288,52.61946],[13.52345,52.6017],[13.53842,52.59279],[13.56782,52.59313],[13.59798,52.58464],[13.5988,52.55755],[13.62826,52.55788],[13.65822,52.53124],[13.67314,52.53139],[13.67365,52.51359],[13.65912,52.51344],[13.65989,52.48661],[13.68929,52.48692],[13.7188,52.47807],[13.73406,52.4604],[13.7636,52.46069],[13.76454,52.42482],[13.75027,52.42468],[13.75097,52.39814],[13.70722,52.37923],[13.70772,52.36111],[13.67826,52.36081],[13.67876,52.34302],[13.66428,52.34287],[13.66454,52.33367],[13.62038,52.33319],[13.61959,52.36012],[13.58956,52.37786],[13.5313,52.37719],[13.53103,52.38581],[13.44254,52.38473],[13.42861,52.36674],[13.38418,52.36617],[13.35417,52.39279],[13.29535,52.392]]],terms_text:"Geoportal Berlin/Digitale farbige Orthophotos 2017"},{id:"Berlin-2018",name:"Berlin aerial photography 2018",type:"tms",template:"https://tiles.codefor.de/berlin-2018/{zoom}/{x}/{y}.png",endDate:"2018-04-07T00:00:00.000Z",startDate:"2018-03-19T00:00:00.000Z",polygon:[[[13.29535,52.392],[13.29502,52.40083],[13.19206,52.39937],[13.19241,52.39035],[13.14839,52.3897],[13.14877,52.38046],[13.11926,52.38001],[13.11888,52.38921],[13.08906,52.40693],[13.07431,52.4067],[13.07356,52.42447],[13.10259,52.43394],[13.10073,52.47912],[13.11534,52.47934],[13.11055,52.59579],[13.13972,52.60527],[13.18403,52.60593],[13.21212,52.63346],[13.27041,52.65222],[13.26973,52.67025],[13.31405,52.67086],[13.32953,52.65323],[13.43315,52.65458],[13.43254,52.67251],[13.44682,52.68189],[13.50593,52.68261],[13.50681,52.65545],[13.53643,52.6558],[13.53757,52.61964],[13.52288,52.61946],[13.52345,52.6017],[13.53842,52.59279],[13.56782,52.59313],[13.59798,52.58464],[13.5988,52.55755],[13.62826,52.55788],[13.65822,52.53124],[13.67314,52.53139],[13.67365,52.51359],[13.65912,52.51344],[13.65989,52.48661],[13.68929,52.48692],[13.7188,52.47807],[13.73406,52.4604],[13.7636,52.46069],[13.76454,52.42482],[13.75027,52.42468],[13.75097,52.39814],[13.70722,52.37923],[13.70772,52.36111],[13.67826,52.36081],[13.67876,52.34302],[13.66428,52.34287],[13.66454,52.33367],[13.62038,52.33319],[13.61959,52.36012],[13.58956,52.37786],[13.5313,52.37719],[13.53103,52.38581],[13.44254,52.38473],[13.42861,52.36674],[13.38418,52.36617],[13.35417,52.39279],[13.29535,52.392]]],terms_text:"Geoportal Berlin/Digitale farbige Orthophotos 2018",best:true},{id:"Bing",name:"Bing aerial imagery",type:"bing",template:"https://www.bing.com/maps",zoomExtent:[1,22],"default":true,description:"Satellite and aerial imagery.",icon:"https://osmlab.github.io/editor-layer-index/sources/world/Bing.png"},{id:"Bologna-Orthophoto-2017",name:"Bologna ortofoto 2017",type:"tms",template:"https://sitmappe.comune.bologna.it/tms/tileserver/Ortofoto2017/{zoom}/{x}/{y}.png",endDate:"2017-01-01T00:00:00.000Z",startDate:"2017-01-01T00:00:00.000Z",zoomExtent:[0,19],polygon:[[[11.22962,44.53077],[11.23184,44.52461],[11.24123,44.52167],[11.23251,44.50893],[11.23572,44.50323],[11.25009,44.50116],[11.24765,44.49644],[11.25708,44.49765],[11.25653,44.49294],[11.29461,44.48981],[11.29676,44.4857],[11.28807,44.47586],[11.29226,44.4609],[11.28447,44.45459],[11.28228,44.42572],[11.29347,44.4276],[11.29254,44.43377],[11.31339,44.42103],[11.32504,44.42274],[11.33695,44.42772],[11.33765,44.43167],[11.3315,44.43273],[11.33453,44.43867],[11.34466,44.43594],[11.34498,44.44093],[11.36235,44.45099],[11.37312,44.44935],[11.37498,44.45897],[11.39499,44.46368],[11.4011,44.46122],[11.39464,44.46803],[11.41577,44.48376],[11.42559,44.4845],[11.42717,44.48921],[11.41727,44.4906],[11.43363,44.51312],[11.42692,44.51532],[11.43034,44.5196],[11.42466,44.51959],[11.41987,44.52934],[11.4143,44.52564],[11.40739,44.52851],[11.41487,44.53999],[11.38871,44.54145],[11.39082,44.54553],[11.36474,44.55253],[11.36414,44.55609],[11.3573,44.5519],[11.34375,44.55333],[11.33589,44.54299],[11.33145,44.54734],[11.31349,44.54722],[11.30929,44.5295],[11.29104,44.53581],[11.28179,44.54851],[11.26911,44.53248],[11.25118,44.55578],[11.24499,44.55569],[11.22962,44.53077]]],terms_url:"http://dati.comune.bologna.it/node/3449",terms_text:"© Comune di Bologna cc-by 4.0 ODbL compliant",best:true},{id:"Bonvillars-2013",name:"Bonvillars Orthophoto 2013",type:"tms",template:"http://osmdata.asitvd.ch/tiles/bonvillars2013/{zoom}/{x}/{y}.png",endDate:"2013-01-01T00:00:00.000Z",startDate:"2013-01-01T00:00:00.000Z",zoomExtent:[14,20],polygon:[[[6.66713,46.83358],[6.66313,46.83833],[6.67213,46.84191],[6.6749,46.84226],[6.67843,46.83807],[6.66713,46.83358]]],terms_url:"http://osmdata.asitvd.ch/",terms_text:"Bonvillars - Orthophoto technique 2013"},{id:"Bordeaux_2012",name:"Bordeaux - 2012",type:"tms",template:"http://wms.openstreetmap.fr/tms/1.0.0/bordeaux_2012/{zoom}/{x}/{y}",endDate:"2012-01-01T00:00:00.000Z",startDate:"2012-01-01T00:00:00.000Z",zoomExtent:[0,20],polygon:[[[-0.59923,45.04193],[-0.54231,45.02757],[-0.50979,45.00601],[-0.47727,45.00206],[-0.47066,44.97367],[-0.45542,44.95102],[-0.46456,44.91792],[-0.4732,44.91936],[-0.48794,44.90928],[-0.4981,44.89057],[-0.48946,44.87797],[-0.4666,44.87076],[-0.47625,44.84735],[-0.49505,44.83978],[-0.49099,44.83186],[-0.46965,44.82537],[-0.49709,44.80446],[-0.52453,44.80013],[-0.5103,44.76767],[-0.53469,44.76515],[-0.56213,44.75107],[-0.5601,44.74169],[-0.5728,44.74133],[-0.59465,44.7601],[-0.63429,44.73989],[-0.65004,44.77705],[-0.67901,44.77489],[-0.68816,44.77922],[-0.71509,44.76839],[-0.75168,44.7471],[-0.76336,44.75577],[-0.73846,44.77561],[-0.74202,44.78571],[-0.72779,44.81239],[-0.73999,44.82861],[-0.76438,44.82933],[-0.803,44.82176],[-0.8401,44.82753],[-0.83908,44.84014],[-0.87567,44.85023],[-0.88532,44.85852],[-0.88685,44.88769],[-0.86601,44.88697],[-0.84569,44.89669],[-0.83349,44.92764],[-0.81825,44.92764],[-0.80198,44.92224],[-0.79843,44.9485],[-0.78725,44.94814],[-0.75574,44.97007],[-0.72169,44.95785],[-0.69578,44.93087],[-0.68866,44.93447],[-0.67139,44.93267],[-0.66935,44.94095],[-0.62514,44.95066],[-0.63226,44.95893],[-0.63124,44.9672],[-0.60024,44.96756],[-0.55146,44.97834],[-0.54079,44.97726],[-0.55451,44.99739],[-0.59364,45.01751],[-0.60787,45.03403],[-0.59923,45.04193]]],terms_text:"Communauté urbaine de Bordeaux - 2012"},{id:"Bordeaux_2016",name:"Bordeaux 2016",type:"tms",template:"http://tms.bordeaux.inria.fr/bdx2016/{zoom}/{x}/{y}.jpg",endDate:"2016-01-01T00:00:00.000Z",startDate:"2016-01-01T00:00:00.000Z",zoomExtent:[14,20],polygon:[[[-0.59923,45.04193],[-0.54231,45.02757],[-0.50979,45.00601],[-0.47727,45.00206],[-0.47066,44.97367],[-0.45542,44.95102],[-0.46456,44.91792],[-0.4732,44.91936],[-0.48794,44.90928],[-0.4981,44.89057],[-0.48946,44.87797],[-0.4666,44.87076],[-0.47625,44.84735],[-0.49505,44.83978],[-0.49099,44.83186],[-0.46965,44.82537],[-0.49709,44.80446],[-0.52453,44.80013],[-0.5103,44.76767],[-0.53469,44.76515],[-0.56213,44.75107],[-0.5601,44.74169],[-0.5728,44.74133],[-0.59465,44.7601],[-0.63429,44.73989],[-0.65004,44.77705],[-0.67901,44.77489],[-0.68816,44.77922],[-0.71509,44.76839],[-0.75168,44.7471],[-0.76336,44.75577],[-0.73846,44.77561],[-0.74202,44.78571],[-0.72779,44.81239],[-0.73999,44.82861],[-0.76438,44.82933],[-0.803,44.82176],[-0.8401,44.82753],[-0.83908,44.84014],[-0.87567,44.85023],[-0.88532,44.85852],[-0.88685,44.88769],[-0.86601,44.88697],[-0.84569,44.89669],[-0.83349,44.92764],[-0.81825,44.92764],[-0.80198,44.92224],[-0.79843,44.9485],[-0.78725,44.94814],[-0.75574,44.97007],[-0.72169,44.95785],[-0.69578,44.93087],[-0.68866,44.93447],[-0.67139,44.93267],[-0.66935,44.94095],[-0.62514,44.95066],[-0.63226,44.95893],[-0.63124,44.9672],[-0.60024,44.96756],[-0.55146,44.97834],[-0.54079,44.97726],[-0.55451,44.99739],[-0.59364,45.01751],[-0.60787,45.03403],[-0.59923,45.04193]]],terms_text:"Bordeaux Métropole - 2016"},{id:"branquinha_al",name:"Branquinha AL",type:"wms",template:"http://geoserver.dados.al.gov.br:8080/geoserver/Alagoas/ows?service=WMS&version=1.1.0&request=GetMap&layers=Branquinha&SERVICE=WMS&FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.0&REQUEST=GetMap&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[-35.96968,-9.2928],[-35.97063,-9.20261],[-35.97727,-9.20264],[-35.98365,-9.2027],[-35.98765,-9.20266],[-35.99159,-9.20274],[-36.00498,-9.20284],[-36.01473,-9.20293],[-36.01651,-9.20296],[-36.01871,-9.20293],[-36.02487,-9.20286],[-36.02892,-9.20297],[-36.03308,-9.20289],[-36.03769,-9.20294],[-36.04581,-9.203],[-36.05161,-9.20305],[-36.05457,-9.20301],[-36.06022,-9.20304],[-36.06191,-9.20304],[-36.0618,-9.21319],[-36.06167,-9.21806],[-36.06156,-9.21915],[-36.06163,-9.22156],[-36.06144,-9.22277],[-36.06139,-9.22716],[-36.06134,-9.23227],[-36.0614,-9.23391],[-36.06145,-9.23494],[-36.06131,-9.23646],[-36.06133,-9.23773],[-36.06142,-9.23905],[-36.06145,-9.24133],[-36.06136,-9.2423],[-36.06141,-9.24358],[-36.06139,-9.2453],[-36.06126,-9.24726],[-36.06123,-9.24949],[-36.06127,-9.25107],[-36.06121,-9.25517],[-36.06119,-9.25795],[-36.06107,-9.25945],[-36.06109,-9.26183],[-36.06106,-9.26493],[-36.06086,-9.27146],[-36.06083,-9.2751],[-36.06074,-9.28274],[-36.0608,-9.29234],[-36.06074,-9.29363],[-36.05477,-9.29357],[-36.04621,-9.29349],[-36.03941,-9.29348],[-36.03501,-9.29339],[-36.02979,-9.29341],[-36.02167,-9.29332],[-36.01278,-9.29328],[-36.00468,-9.29321],[-35.99678,-9.29314],[-35.98969,-9.29312],[-35.98483,-9.29305],[-35.98305,-9.29289],[-35.98173,-9.29294],[-35.97884,-9.29282],[-35.96968,-9.2928]]],terms_url:"http://www.seplag.al.gov.br",terms_text:"Secretaria de Estado do Planejamento, Gestão e Patrimônio"},{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",endDate:"2013-06-01T00:00:00.000Z",startDate:"2009-01-01T00:00:00.000Z",zoomExtent:[9,20],polygon:[[[-123.3176,49.32726],[-123.44053,49.32682],[-123.44072,49.33844],[-123.43984,49.34304],[-123.44013,49.34354],[-123.44011,49.34399],[-123.44063,49.34445],[-123.44047,49.34558],[-123.43978,49.34606],[-123.43897,49.34613],[-123.43729,49.35672],[-123.43748,49.37108],[-123.43353,49.37094],[-123.43304,49.37373],[-123.43327,49.37512],[-123.43228,49.3761],[-123.43175,49.37917],[-123.43143,49.37959],[-123.43078,49.38239],[-123.43134,49.38274],[-123.43121,49.38385],[-123.43004,49.38459],[-123.41899,49.38471],[-123.41922,49.41352],[-123.39725,49.41357],[-123.39728,49.42435],[-123.40069,49.42433],[-123.40077,49.57035],[-123.40008,49.57035],[-123.40108,49.59338],[-123.37604,49.59328],[-123.37698,49.67561],[-123.35073,49.67564],[-123.3508,49.70868],[-123.33289,49.70872],[-123.33279,49.72563],[-123.30071,49.72556],[-123.30092,49.73754],[-123.2886,49.73764],[-123.28878,49.82492],[-123.2998,49.82492],[-123.30117,49.84978],[-123.32182,49.85067],[-123.32733,49.85777],[-123.32767,49.97589],[-123.30083,49.97522],[-123.30072,50.0997],[-123.25017,50.10074],[-123.25091,50.27549],[-123.02243,50.27556],[-123.02249,50.32549],[-123.00093,50.32547],[-123.00078,50.34239],[-122.9775,50.34234],[-122.97748,50.35043],[-122.95081,50.3505],[-122.95079,50.3712],[-122.93252,50.37115],[-122.9321,50.39979],[-122.88742,50.39997],[-122.88734,50.42561],[-122.66202,50.4257],[-122.66231,50.39945],[-122.59903,50.39924],[-122.59883,50.37552],[-122.57248,50.37537],[-122.57356,50.24939],[-122.59904,50.24946],[-122.59915,50.22657],[-122.6185,50.22664],[-122.61857,50.22441],[-122.64906,50.22451],[-122.64922,50.19935],[-122.73086,50.19938],[-122.73116,50.12443],[-122.74904,50.12451],[-122.74905,50.0903],[-122.76878,50.09034],[-122.76898,49.94945],[-122.99905,49.94947],[-122.99912,49.87546],[-122.97759,49.87546],[-122.97781,49.69951],[-122.99924,49.69948],[-122.99925,49.65165],[-123.02215,49.65165],[-123.02212,49.59951],[-123.04919,49.59946],[-123.04919,49.59405],[-123.06646,49.59404],[-123.06636,49.54519],[-123.06999,49.54512],[-123.0699,49.54132],[-123.07068,49.53928],[-123.07089,49.53799],[-123.07115,49.53688],[-123.07111,49.53581],[-123.07138,49.53282],[-123.07165,49.53211],[-123.07171,49.53139],[-123.07203,49.53042],[-123.07396,49.53035],[-123.0748,49.5295],[-123.07482,49.52881],[-123.07434,49.52806],[-123.07353,49.52746],[-123.07337,49.52704],[-123.07329,49.52559],[-123.07371,49.52496],[-123.07362,49.52449],[-123.09926,49.52449],[-123.09916,49.47545],[-123.07105,49.47553],[-123.07109,49.4663],[-123.07392,49.46631],[-123.07422,49.4505],[-123.07463,49.45009],[-123.07465,49.44933],[-123.0746,49.44902],[-123.07446,49.44869],[-123.07433,49.44799],[-123.07424,49.44777],[-123.07431,49.44475],[-123.07471,49.44476],[-123.07464,49.43773],[-122.99965,49.43774],[-122.99965,49.43692],[-122.86062,49.44153],[-122.81026,49.4424],[-122.8099,49.37667],[-122.40361,49.37666],[-122.40363,49.37719],[-122.26474,49.3773],[-122.26354,49.23601],[-122.21557,49.23614],[-122.0581,49.23588],[-121.95383,49.29665],[-121.94009,49.30454],[-121.92358,49.31423],[-121.89909,49.32254],[-121.88834,49.32598],[-121.8553,49.33636],[-121.8327,49.34415],[-121.76713,49.36544],[-121.67367,49.36546],[-121.64042,49.37438],[-121.5962,49.38605],[-121.58612,49.38792],[-121.52137,49.39946],[-121.51174,49.40384],[-121.46793,49.4229],[-121.44168,49.43456],[-121.42243,49.43458],[-121.34629,49.39323],[-121.34801,49.34124],[-121.5135,49.32058],[-121.60317,49.27717],[-121.65841,49.18561],[-121.67995,49.16541],[-121.78158,49.07026],[-121.80762,49.06225],[-121.9394,49.06362],[-121.97255,49.04242],[-121.99214,49.03329],[-122.00353,49.02734],[-122.01786,49.02411],[-122.11086,48.99928],[-122.14931,48.99953],[-122.14927,48.99915],[-122.19914,48.9996],[-122.19918,48.9992],[-122.23436,48.99948],[-122.23436,49.00017],[-122.39947,49.00124],[-122.45213,49.00163],[-122.45213,49.00088],[-122.45841,49.00093],[-122.45848,48.99931],[-122.49925,48.9995],[-122.49925,48.99929],[-122.54926,48.99951],[-122.54926,48.99932],[-122.65808,48.99942],[-122.65811,48.9954],[-122.70676,48.99553],[-122.75198,48.99564],[-122.79221,48.99572],[-122.79219,48.99943],[-123.03504,48.99957],[-123.03504,49.0001],[-123.03971,49.00005],[-123.03974,49.00018],[-123.04855,49.00013],[-123.04853,49.00047],[-123.05571,49.00045],[-123.05563,49.00023],[-123.06414,49.00013],[-123.06416,48.99994],[-123.0749,48.99969],[-123.07507,49.00062],[-123.08996,49.00037],[-123.10923,48.99994],[-123.12712,49.0003],[-123.136,48.99987],[-123.13627,49.00058],[-123.15385,48.99981],[-123.15405,49.00068],[-123.171,49.00013],[-123.20009,48.99968],[-123.20034,49.04978],[-123.21088,49.04972],[-123.21122,49.05199],[-123.20705,49.05209],[-123.20789,49.06079],[-123.21917,49.0601],[-123.21896,49.06127],[-123.22518,49.06127],[-123.22539,49.06224],[-123.22971,49.06203],[-123.22981,49.06859],[-123.23319,49.06873],[-123.2335,49.07059],[-123.24931,49.07025],[-123.24973,49.08026],[-123.27514,49.0804],[-123.27514,49.08709],[-123.29948,49.0873],[-123.29944,49.08025],[-123.32545,49.08039],[-123.32544,49.11547],[-123.2751,49.15033],[-123.27518,49.18733],[-123.27881,49.18711],[-123.27889,49.19107],[-123.30048,49.19107],[-123.30042,49.26229],[-123.31262,49.26224],[-123.3126,49.27149],[-123.31543,49.27147],[-123.31566,49.28189],[-123.31747,49.28188],[-123.3175,49.29185],[-123.31904,49.29185],[-123.31907,49.2986],[-123.32023,49.29857],[-123.32028,49.30197],[-123.32227,49.30196],[-123.32239,49.31183],[-123.3254,49.31181],[-123.32539,49.32017],[-123.31927,49.3202],[-123.31922,49.32467],[-123.31794,49.32466],[-123.31799,49.32541],[-123.3176,49.32726]]],terms_url:"http://imagery.paulnorman.ca/tiles/about.html",terms_text:"Copyright Province of British Columbia, City of Surrey"},{id:"Budapest_XI_2015",name:"Budapest district XI orthophoto 2015",type:"wms",template:"http://terinfo.ujbuda.hu/mapproxy/service?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=orto2015_20160304&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",endDate:"2015-01-01T00:00:00.000Z",startDate:"2015-01-01T00:00:00.000Z",polygon:[[[19.04767,47.48789],[19.05157,47.4899],[19.06434,47.4792],[19.0665,47.47632],[19.06766,47.47343],[19.06837,47.47077],[19.06846,47.46876],[19.06722,47.46501],[19.05683,47.45259],[19.0549,47.44906],[19.05176,47.43499],[19.04863,47.429],[19.04384,47.42968],[19.04023,47.42932],[19.03509,47.43818],[19.03221,47.43779],[19.0252,47.442],[19.0207,47.44576],[19.01915,47.44658],[19.01545,47.44759],[19.01347,47.44361],[19.01266,47.44271],[19.01178,47.44247],[19.0119,47.44188],[19.0098,47.43944],[19.0057,47.43111],[19.00046,47.43097],[18.99534,47.42821],[18.97545,47.42818],[18.97343,47.42904],[18.97361,47.42998],[18.97548,47.43067],[18.97719,47.43402],[18.97823,47.43817],[18.97733,47.44657],[18.97004,47.44988],[18.96861,47.45142],[18.97568,47.45506],[18.97586,47.45556],[18.97625,47.45584],[18.97658,47.45594],[18.97763,47.45597],[18.98017,47.45605],[18.98162,47.46067],[18.97793,47.46857],[18.96867,47.47643],[18.97745,47.48194],[18.98035,47.48169],[18.98565,47.4782],[18.98907,47.47838],[18.99117,47.47898],[18.99177,47.48102],[18.99288,47.48182],[18.99836,47.48238],[18.99902,47.483],[19.004,47.48189],[19.00416,47.48399],[19.01027,47.48535],[19.01237,47.48404],[19.0138,47.48351],[19.01674,47.48465],[19.0163,47.48539],[19.01689,47.48595],[19.01808,47.48605],[19.02108,47.48492],[19.02124,47.48612],[19.02301,47.48741],[19.02637,47.48885],[19.02995,47.48904],[19.03135,47.48855],[19.03189,47.48759],[19.03286,47.48712],[19.03364,47.48702],[19.03514,47.48725],[19.03585,47.48729],[19.03616,47.48751],[19.03665,47.48767],[19.03748,47.48774],[19.03847,47.48737],[19.03918,47.48679],[19.04105,47.48649],[19.04181,47.48737],[19.04387,47.4881],[19.04542,47.48817],[19.04695,47.4881],[19.04767,47.48789]]],terms_url:"http://terinfo.ujbuda.hu",terms_text:"Budapest XI. kerület önkormányzata",description:"5 cm resolution bald image"},{id:"Budapest_XI_2017",name:"Budapest district XI orthophoto 2017",type:"wms",template:"http://terinfo.ujbuda.hu/mapproxy/service?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=orto_2017&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",endDate:"2017-03-01T00:00:00.000Z",startDate:"2017-03-01T00:00:00.000Z",polygon:[[[19.04767,47.48789],[19.05157,47.4899],[19.06434,47.4792],[19.0665,47.47632],[19.06766,47.47343],[19.06837,47.47077],[19.06846,47.46876],[19.06722,47.46501],[19.05683,47.45259],[19.0549,47.44906],[19.05176,47.43499],[19.04863,47.429],[19.04384,47.42968],[19.04023,47.42932],[19.03509,47.43818],[19.03221,47.43779],[19.0252,47.442],[19.0207,47.44576],[19.01915,47.44658],[19.01545,47.44759],[19.01347,47.44361],[19.01266,47.44271],[19.01178,47.44247],[19.0119,47.44188],[19.0098,47.43944],[19.0057,47.43111],[19.00046,47.43097],[18.99534,47.42821],[18.97545,47.42818],[18.97343,47.42904],[18.97361,47.42998],[18.97548,47.43067],[18.97719,47.43402],[18.97823,47.43817],[18.97733,47.44657],[18.97004,47.44988],[18.96861,47.45142],[18.97568,47.45506],[18.97586,47.45556],[18.97625,47.45584],[18.97658,47.45594],[18.97763,47.45597],[18.98017,47.45605],[18.98162,47.46067],[18.97793,47.46857],[18.96867,47.47643],[18.97745,47.48194],[18.98035,47.48169],[18.98565,47.4782],[18.98907,47.47838],[18.99117,47.47898],[18.99177,47.48102],[18.99288,47.48182],[18.99836,47.48238],[18.99902,47.483],[19.004,47.48189],[19.00416,47.48399],[19.01027,47.48535],[19.01237,47.48404],[19.0138,47.48351],[19.01674,47.48465],[19.0163,47.48539],[19.01689,47.48595],[19.01808,47.48605],[19.02108,47.48492],[19.02124,47.48612],[19.02301,47.48741],[19.02637,47.48885],[19.02995,47.48904],[19.03135,47.48855],[19.03189,47.48759],[19.03286,47.48712],[19.03364,47.48702],[19.03514,47.48725],[19.03585,47.48729],[19.03616,47.48751],[19.03665,47.48767],[19.03748,47.48774],[19.03847,47.48737],[19.03918,47.48679],[19.04105,47.48649],[19.04181,47.48737],[19.04387,47.4881],[19.04542,47.48817],[19.04695,47.4881],[19.04767,47.48789]]],terms_url:"http://terinfo.ujbuda.hu",terms_text:"Budapest XI. kerület önkormányzata",best:true,description:"5 cm resolution bald image"},{id:"Cadastre",name:"Cadastre",type:"tms",template:"http://tms.cadastre.openstreetmap.fr/*/tout/{zoom}/{x}/{y}.png",zoomExtent:[12,22],polygon:[[[-2.7,43.9],[-6.3,48.98],[-2.25,50.09],[1.31,50.88],[2.35816,51.32937],[2.5488,51.09759],[2.57048,51.07409],[2.58741,51.01763],[2.59845,51.0051],[2.61558,50.99749],[2.63986,50.95766],[2.64225,50.94578],[2.62452,50.9256],[2.61962,50.91067],[2.62396,50.86071],[2.62781,50.85054],[2.63786,50.83696],[2.6511,50.82906],[2.73267,50.81738],[2.79995,50.73795],[2.81655,50.73092],[2.85265,50.73335],[2.89072,50.7162],[2.90492,50.71536],[2.9161,50.72418],[2.93508,50.75592],[3.00718,50.78377],[3.08218,50.78749],[3.09244,50.79092],[3.11412,50.80566],[3.14877,50.80195],[3.2154,50.73111],[3.22149,50.7267],[3.27051,50.70375],[3.27545,50.67757],[3.26576,50.6604],[3.26588,50.64054],[3.28922,50.60028],[3.29219,50.55037],[3.3056,50.53267],[3.37551,50.50839],[3.3898,50.50884],[3.4748,50.54445],[3.52173,50.53459],[3.53266,50.51873],[3.54779,50.51012],[3.61523,50.50558],[3.67378,50.45642],[3.68415,50.35277],[3.6901,50.34044],[3.70258,50.33482],[3.71576,50.33854],[3.74935,50.36279],[3.84109,50.36558],[3.90189,50.3436],[3.91317,50.34291],[4.02672,50.36904],[4.13761,50.29984],[4.14388,50.29727],[4.21444,50.28167],[4.22904,50.26664],[4.23078,50.25233],[4.17084,50.18579],[4.16601,50.16888],[4.1764,50.1547],[4.21195,50.13602],[4.24074,50.07102],[4.23193,50.05551],[4.18164,50.03436],[4.17177,50.02537],[4.16976,50.01217],[4.1765,50.00065],[4.20633,49.97546],[4.22164,49.97089],[4.30877,49.98145],[4.44542,49.9523],[4.45469,49.95251],[4.6581,50.00609],[4.66936,50.01392],[4.67293,50.02716],[4.66924,50.06972],[4.69517,50.10472],[4.83123,50.17941],[4.8815,50.16436],[4.90479,50.14451],[4.90426,50.12639],[4.88076,50.0815],[4.86277,50.0745],[4.85104,50.06216],[4.84331,50.03884],[4.84331,50.03883],[4.8433,50.03881],[4.82678,49.989],[4.82662,49.97692],[4.83343,49.96696],[4.89654,49.91753],[4.89755,49.89424],[4.87913,49.86942],[4.87625,49.85111],[4.88924,49.81266],[4.89769,49.80204],[4.91098,49.79926],[4.99534,49.81116],[5.01867,49.79272],[5.02686,49.78886],[5.09944,49.77323],[5.13458,49.73462],[5.1412,49.72984],[5.18761,49.70906],[5.19602,49.70732],[5.28157,49.70836],[5.33363,49.67308],[5.344,49.65049],[5.3544,49.64041],[5.43141,49.60791],[5.48205,49.52815],[5.49294,49.51979],[5.50666,49.52042],[5.55401,49.54025],[5.59311,49.53424],[5.6076,49.53761],[5.641,49.56095],[5.70676,49.55267],[5.71578,49.55361],[5.77526,49.57414],[5.8399,49.55321],[5.86126,49.52038],[5.876,49.5114],[5.97516,49.50129],[5.99801,49.47317],[6.01627,49.46597],[6.08635,49.47562],[6.09319,49.47787],[6.17397,49.52187],[6.24643,49.52511],[6.334,49.48235],[6.34423,49.48037],[6.43515,49.487],[6.5451,49.44384],[6.60639,49.37868],[6.60497,49.33739],[6.61627,49.31869],[6.67013,49.29269],[6.72996,49.22917],[6.74328,49.19086],[6.76026,49.17752],[6.80904,49.17284],[6.82473,49.17826],[6.83093,49.19366],[6.82982,49.21802],[6.85119,49.23136],[6.88453,49.2239],[6.89322,49.22389],[6.93753,49.23369],[7.04055,49.19794],[7.0463,49.17503],[7.05478,49.16313],[7.06908,49.16018],[7.10494,49.16634],[7.14315,49.14159],[7.1535,49.13839],[7.28683,49.13488],[7.29893,49.13856],[7.36095,49.18259],[7.45012,49.19517],[7.50113,49.17672],[7.54379,49.10572],[7.5579,49.09626],[7.6296,49.08527],[7.64722,49.06722],[7.6612,49.06119],[7.75401,49.05963],[7.76073,49.06067],[7.80291,49.07489],[7.85525,49.05329],[7.8673,49.05227],[7.93826,49.06832],[8.08069,49.00688],[8.2225,48.98787],[8.23704,48.97683],[8.23589,48.95817],[8.20888,48.94863],[8.20089,48.94339],[8.15824,48.89753],[8.10087,48.7993],[7.99071,48.74478],[7.98534,48.7409],[7.90422,48.65865],[7.85605,48.63606],[7.8484,48.62977],[7.81842,48.58883],[7.81456,48.57704],[7.81449,48.50968],[7.78547,48.48337],[7.78055,48.47652],[7.74506,48.39484],[7.74357,48.38427],[7.75159,48.32322],[7.71085,48.29841],[7.70241,48.28803],[7.67661,48.21555],[7.59605,48.11698],[7.59165,48.10648],[7.58522,48.04694],[7.59127,48.03035],[7.62437,47.99865],[7.63205,47.97081],[7.57554,47.87436],[7.5728,47.86435],[7.57267,47.83631],[7.54581,47.78793],[7.54418,47.77232],[7.55758,47.72899],[7.53526,47.6989],[7.53136,47.68564],[7.537,47.67302],[7.60016,47.60822],[7.58967,47.56755],[7.55424,47.55128],[7.54511,47.54283],[7.51256,47.48439],[7.38747,47.42111],[7.32653,47.4273],[7.24435,47.40939],[7.16708,47.4335],[7.15212,47.47612],[7.14279,47.48707],[7.12853,47.48893],[7.0801,47.47718],[7.03557,47.48695],[7.02102,47.48458],[7.01205,47.47287],[7.003,47.44095],[6.9551,47.40808],[6.94716,47.39698],[6.94818,47.38337],[6.95769,47.37359],[6.97126,47.37218],[7.018,47.38386],[7.05623,47.37035],[7.07007,47.35005],[7.05958,47.32257],[6.97424,47.27856],[6.96347,47.26233],[6.96134,47.23479],[6.89443,47.19393],[6.88913,47.18922],[6.85545,47.14636],[6.76907,47.10751],[6.76011,47.09953],[6.72561,47.0418],[6.62355,46.9811],[6.4812,46.9445],[6.46892,46.93522],[6.46686,46.91997],[6.47548,46.88771],[6.4535,46.8239],[6.45644,46.80534],[6.46722,46.79104],[6.46098,46.76887],[6.15817,46.59343],[6.14872,46.58069],[6.15152,46.56508],[6.16549,46.54399],[6.15811,46.52456],[6.10174,46.46979],[6.09572,46.45418],[6.09704,46.43317],[6.10829,46.41643],[6.16622,46.38839],[6.17817,46.36922],[6.13748,46.31297],[6.13371,46.30227],[6.13038,46.23737],[6.1103,46.22344],[6.08865,46.23081],[6.07717,46.23123],[6.01857,46.21601],[6.00681,46.20752],[6.00388,46.19332],[6.00787,46.16977],[6.01783,46.15564],[6.03509,46.15456],[6.05564,46.16288],[6.12468,46.15415],[6.13778,46.15702],[6.24026,46.22094],[6.24906,46.23299],[6.24707,46.24777],[6.21148,46.31057],[6.21219,46.32485],[6.23946,46.36705],[6.31648,46.41557],[6.41083,46.42495],[6.41748,46.42682],[6.50498,46.46871],[6.63047,46.47435],[6.74665,46.45695],[6.82244,46.42925],[6.81832,46.38181],[6.80484,46.36179],[6.80189,46.34639],[6.81095,46.33359],[6.86491,46.30038],[6.87504,46.28007],[6.86092,46.2439],[6.82698,46.21188],[6.82075,46.19862],[6.81863,46.16592],[6.82259,46.15261],[6.83427,46.14509],[6.90382,46.12971],[6.90491,46.09595],[6.90932,46.08406],[6.92001,46.07721],[6.94898,46.0699],[7.01556,46.00883],[7.05191,45.93066],[7.04533,45.92217],[7.04497,45.92064],[7.04394,45.92036],[6.99582,45.85822],[6.94097,45.83551],[6.84376,45.82387],[6.83102,45.81711],[6.82614,45.80353],[6.82787,45.73217],[6.83174,45.72082],[6.8414,45.71373],[6.90729,45.69124],[6.92419,45.66935],[6.94247,45.66172],[6.97131,45.66528],[7.00597,45.64945],[7.01151,45.63652],[6.9978,45.60877],[6.99643,45.59465],[7.0158,45.52354],[7.02774,45.5102],[7.1072,45.47877],[7.1228,45.44924],[7.13304,45.44001],[7.1856,45.41894],[7.19515,45.40409],[7.17075,45.35069],[7.14232,45.32298],[7.13649,45.30576],[7.14458,45.25048],[7.08417,45.20279],[6.99279,45.19823],[6.98106,45.19368],[6.90009,45.12689],[6.85843,45.11699],[6.78283,45.14228],[6.77056,45.14242],[6.67751,45.11356],[6.6653,45.10289],[6.66501,45.08667],[6.68237,45.04558],[6.69602,45.03395],[6.75744,45.01884],[6.78375,44.9146],[6.7942,44.90161],[6.86698,44.86519],[6.8798,44.86346],[6.93633,44.87461],[7.01795,44.84402],[7.03453,44.82282],[7.03711,44.75009],[7.0496,44.73226],[7.07224,44.72311],[7.08651,44.6968],[7.08666,44.68085],[7.07671,44.67134],[6.99007,44.67203],[6.97413,44.66431],[6.97056,44.64696],[6.97819,44.61784],[6.94659,44.57124],[6.88235,44.53479],[6.87233,44.5195],[6.87892,44.50245],[6.95894,44.43129],[6.95872,44.42908],[6.92167,44.41436],[6.91223,44.40659],[6.90907,44.39477],[6.90972,44.38195],[6.91637,44.36804],[6.99909,44.29414],[7.01181,44.256],[7.01983,44.24558],[7.03259,44.2424],[7.07312,44.2461],[7.1651,44.22112],[7.24533,44.18544],[7.26053,44.16682],[7.27537,44.15947],[7.33878,44.1574],[7.36278,44.13834],[7.37776,44.13416],[7.56283,44.15792],[7.5642,44.15836],[7.56478,44.15817],[7.60548,44.1634],[7.6162,44.16827],[7.63989,44.18928],[7.68608,44.1861],[7.69422,44.17795],[7.68937,44.13869],[7.69445,44.12276],[7.72786,44.08615],[7.72403,44.05704],[7.68603,44.02371],[7.68077,44.0164],[7.66016,43.9672],[7.59624,43.94466],[7.58419,43.93287],[7.56858,43.89159],[7.5271,43.87434],[7.51649,43.86397],[7.51594,43.84915],[7.53622,43.79234],[9.8,43.1],[9.63227,41.43244],[9.36968,41.35052],[9.27311,41.29196],[8.94186,41.27688],[5.8,41.64],[3.17358,42.41768],[3.16081,42.42757],[3.0944,42.41457],[3.03402,42.45331],[3.02214,42.45645],[2.87822,42.4487],[2.87019,42.44653],[2.78424,42.40256],[2.7413,42.41128],[2.72928,42.40998],[2.69331,42.39417],[2.68378,42.3854],[2.68162,42.37263],[2.68585,42.34679],[2.66719,42.33008],[2.58106,42.34418],[2.56777,42.34173],[2.5338,42.32197],[2.47795,42.32986],[2.41933,42.37658],[2.41222,42.38021],[2.26719,42.42055],[2.25973,42.42117],[2.20694,42.41558],[2.20653,42.41526],[2.20526,42.41541],[2.16028,42.41065],[2.14881,42.40545],[2.09393,42.35474],[2.00861,42.33818],[1.965,42.36473],[1.93076,42.42442],[1.92089,42.43302],[1.88467,42.44761],[1.88459,42.44762],[1.88444,42.4477],[1.82774,42.47056],[1.72567,42.48452],[1.71561,42.50125],[1.7272,42.56103],[1.72479,42.57499],[1.71011,42.59992],[1.69377,42.60975],[1.60283,42.61382],[1.56069,42.6392],[1.54636,42.64166],[1.50444,42.6331],[1.4921,42.62502],[1.47238,42.59703],[1.43792,42.59264],[1.41936,42.60643],[1.38032,42.67415],[1.37335,42.68127],[1.33313,42.70563],[1.32364,42.7085],[1.23221,42.71248],[1.16554,42.69928],[1.08546,42.76635],[1.07564,42.77079],[0.95937,42.78852],[0.95073,42.78794],[0.92265,42.7797],[0.84606,42.8157],[0.71511,42.8464],[0.70017,42.84402],[0.69117,42.83186],[0.67409,42.76479],[0.67474,42.75286],[0.69192,42.70684],[0.669,42.67901],[0.43024,42.67863],[0.3715,42.70308],[0.35954,42.70415],[0.34912,42.69817],[0.32567,42.67274],[0.29571,42.66388],[0.24594,42.70175],[0.23972,42.70494],[0.18967,42.72039],[0.17919,42.72075],[-0.01993,42.67389],[-0.06726,42.6848],[-0.16949,42.77157],[-0.29987,42.82697],[-0.31683,42.82635],[-0.39208,42.78766],[-0.44354,42.78453],[-0.48842,42.80255],[-0.50868,42.79935],[-0.54499,42.76906],[-0.56721,42.76937],[-0.67446,42.86392],[-0.68094,42.86775],[-0.73372,42.88666],[-0.7476,42.93879],[-0.75711,42.95107],[-0.77253,42.95284],[-0.82114,42.93865],[-0.94508,42.94192],[-1.02313,42.98206],[-1.10852,43.00409],[-1.1156,43.00461],[-1.14775,43.00124],[-1.15845,43.01452],[-1.16736,43.02083],[-1.21622,43.0381],[-1.22612,43.03898],[-1.26236,43.03303],[-1.30643,43.05531],[-1.31992,43.05696],[-1.33135,43.0496],[-1.3542,43.0197],[-1.43868,43.03371],[-1.4775,43.06889],[-1.48311,43.08561],[-1.47641,43.10248],[-1.43479,43.13087],[-1.42732,43.1404],[-1.39411,43.22935],[-1.39531,43.24596],[-1.40868,43.25591],[-1.52629,43.28099],[-1.54626,43.2737],[-1.57149,43.2412],[-1.61053,43.24223],[-1.65,43.29323],[-1.66953,43.30065],[-1.73359,43.28856],[-1.75606,43.31966],[-1.76297,43.32565],[-1.79156,43.34067],[-1.80099,43.37017],[-1.78509,43.39037],[-1.7835,43.39686],[-2.7,43.9]]],terms_url:"https://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 : 2018",description:"French land registry",icon:"https://svn.openstreetmap.org/applications/editors/josm/plugins/cadastre-fr/images/cadastre_small.png"},{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",zoomExtent:[0,20],polygon:[[[5.96175,50.17631],[6.02627,50.18496],[6.03318,50.16395],[6.06069,50.15536],[6.07668,50.15913],[6.07824,50.17255],[6.10176,50.17199],[6.1225,50.16437],[6.1201,50.15594],[6.1277,50.14993],[6.11323,50.13739],[6.12369,50.13719],[6.14093,50.1305],[6.13555,50.11899],[6.13808,50.10263],[6.13108,50.09964],[6.13547,50.09119],[6.12194,50.09059],[6.12634,50.07817],[6.13186,50.07348],[6.12117,50.064],[6.11444,50.06139],[6.11563,50.05817],[6.12361,50.06323],[6.13661,50.04178],[6.13034,50.02975],[6.14821,50.02307],[6.13868,50.01572],[6.13594,50.01485],[6.13138,50.01905],[6.13024,50.01819],[6.13934,50.01116],[6.1517,50.01058],[6.14546,49.99689],[6.13966,49.9994],[6.13852,49.99829],[6.14218,49.99535],[6.15023,49.99518],[6.15625,49.98867],[6.17305,49.98589],[6.17348,49.98344],[6.17035,49.98376],[6.16549,49.97115],[6.17151,49.96298],[6.1763,49.962],[6.17995,49.95386],[6.18339,49.9548],[6.17983,49.96307],[6.18331,49.9686],[6.19277,49.97158],[6.19978,49.95352],[6.20707,49.95672],[6.21269,49.9514],[6.22502,49.95039],[6.22044,49.94369],[6.22824,49.93726],[6.22635,49.92766],[6.21913,49.92354],[6.22986,49.92125],[6.23603,49.91355],[6.23187,49.91064],[6.22769,49.91062],[6.23229,49.9072],[6.23381,49.90028],[6.24692,49.89535],[6.25781,49.88724],[6.26301,49.88101],[6.27646,49.87725],[6.28113,49.87957],[6.29166,49.87548],[6.2977,49.86673],[6.30989,49.87107],[6.31532,49.8673],[6.31465,49.86057],[6.32361,49.85188],[6.32158,49.8409],[6.32741,49.83673],[6.33656,49.83998],[6.33937,49.8507],[6.36465,49.85164],[6.4022,49.82098],[6.42643,49.81629],[6.42807,49.81186],[6.43097,49.81129],[6.44161,49.81547],[6.44344,49.81233],[6.45366,49.81275],[6.46454,49.81975],[6.47057,49.82385],[6.49681,49.81277],[6.50669,49.80993],[6.51155,49.80238],[6.51485,49.80513],[6.5196,49.81446],[6.52981,49.81048],[6.53225,49.80686],[6.53083,49.80116],[6.50622,49.78899],[6.51917,49.78344],[6.51105,49.77422],[6.52056,49.76818],[6.52052,49.76134],[6.50373,49.75086],[6.50263,49.73298],[6.50727,49.72938],[6.51809,49.7242],[6.51642,49.72129],[6.51176,49.72016],[6.50479,49.725],[6.49891,49.72639],[6.49558,49.72443],[6.50712,49.71655],[6.50788,49.71215],[6.5046,49.71227],[6.42714,49.66237],[6.4399,49.66025],[6.44251,49.65591],[6.42178,49.61809],[6.39898,49.60094],[6.37941,49.59526],[6.37551,49.58809],[6.38443,49.5801],[6.38119,49.57509],[6.36909,49.5783],[6.35791,49.57166],[6.3849,49.55817],[6.38009,49.54856],[6.35855,49.53296],[6.35932,49.52481],[6.37076,49.50545],[6.37056,49.45732],[6.3334,49.46493],[6.32189,49.47244],[6.29503,49.47928],[6.28789,49.48379],[6.27191,49.49995],[6.24133,49.50693],[6.19669,49.50331],[6.17337,49.50577],[6.16086,49.50085],[6.1671,49.49006],[6.14018,49.48525],[6.12937,49.48803],[6.12725,49.47081],[6.1014,49.46726],[6.10483,49.45076],[6.08167,49.45417],[6.07722,49.46139],[6.05917,49.46306],[6.05222,49.46028],[6.04421,49.44553],[6.02529,49.44703],[6.02154,49.45127],[6.01574,49.44885],[5.99412,49.45301],[5.97657,49.44885],[5.97773,49.45955],[5.97232,49.46087],[5.96891,49.48202],[5.9616,49.49026],[5.91578,49.49835],[5.89033,49.4948],[5.86332,49.50006],[5.84897,49.50826],[5.84828,49.51397],[5.83641,49.51817],[5.83187,49.52639],[5.84308,49.53081],[5.83562,49.54114],[5.81625,49.53325],[5.8052,49.54272],[5.85943,49.57158],[5.86866,49.587],[5.86289,49.58525],[5.8511,49.58379],[5.84712,49.58961],[5.84565,49.5981],[5.8694,49.6106],[5.88182,49.63815],[5.89998,49.63907],[5.89934,49.66239],[5.85656,49.67628],[5.85628,49.68211],[5.8757,49.71118],[5.86481,49.72331],[5.84325,49.71822],[5.82191,49.72128],[5.82489,49.73767],[5.82073,49.74878],[5.78626,49.79079],[5.76517,49.78961],[5.75094,49.79094],[5.74159,49.82126],[5.74581,49.82435],[5.7372,49.83353],[5.74053,49.84142],[5.74701,49.84048],[5.74624,49.84783],[5.75399,49.84878],[5.74066,49.85152],[5.75229,49.85922],[5.74955,49.87554],[5.77567,49.87438],[5.77505,49.88057],[5.7346,49.89341],[5.73303,49.90285],[5.75783,49.91737],[5.76039,49.93252],[5.77073,49.93711],[5.76878,49.94239],[5.7688,49.96104],[5.78672,49.96816],[5.80524,49.96677],[5.80652,49.97321],[5.83129,49.97995],[5.83462,49.98656],[5.81806,49.99936],[5.81561,50.01437],[5.84792,50.02809],[5.86189,50.04581],[5.85087,50.0563],[5.85781,50.07186],[5.881,50.08069],[5.89196,50.12041],[5.95286,50.13384],[5.96175,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",icon:"https://www.geoportail.lu/static/img/lion.png"},{id:"cajueiro_al",name:"Cajueiro AL",type:"wms",template:"http://geoserver.dados.al.gov.br:8080/geoserver/Alagoas/ows?LAYERS=Cajueiro&SERVICE=WMS&FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.0&SERVICE=WMS&REQUEST=GetMap&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[-36.10753,-9.43884],[-36.10752,-9.43421],[-36.10767,-9.42959],[-36.10779,-9.42361],[-36.10769,-9.41927],[-36.10781,-9.41391],[-36.10803,-9.41094],[-36.1081,-9.40965],[-36.10811,-9.40747],[-36.10816,-9.40693],[-36.10819,-9.40418],[-36.10811,-9.40176],[-36.10817,-9.40002],[-36.10827,-9.39952],[-36.10827,-9.39646],[-36.10833,-9.39475],[-36.10832,-9.39273],[-36.10836,-9.3904],[-36.10841,-9.38447],[-36.10847,-9.38165],[-36.10846,-9.37767],[-36.10835,-9.37573],[-36.10845,-9.37432],[-36.10849,-9.37234],[-36.10845,-9.3697],[-36.10867,-9.36278],[-36.10863,-9.36102],[-36.10873,-9.35928],[-36.10874,-9.35736],[-36.10855,-9.35479],[-36.1087,-9.3523],[-36.10871,-9.34996],[-36.10873,-9.34893],[-36.11269,-9.34908],[-36.11726,-9.34912],[-36.12138,-9.34905],[-36.12806,-9.3491],[-36.13217,-9.34906],[-36.13694,-9.34915],[-36.14025,-9.34914],[-36.14134,-9.34932],[-36.14458,-9.34916],[-36.14684,-9.34914],[-36.14842,-9.34905],[-36.15276,-9.34907],[-36.154,-9.34922],[-36.15627,-9.34923],[-36.16026,-9.34921],[-36.16086,-9.34929],[-36.166,-9.34933],[-36.16938,-9.34942],[-36.17176,-9.34936],[-36.17628,-9.34945],[-36.18028,-9.34937],[-36.18227,-9.34946],[-36.18826,-9.34938],[-36.19039,-9.34945],[-36.19354,-9.34946],[-36.19552,-9.34941],[-36.19918,-9.34951],[-36.19926,-9.35146],[-36.19913,-9.35234],[-36.19912,-9.35353],[-36.19919,-9.35646],[-36.19922,-9.35771],[-36.1993,-9.35832],[-36.19933,-9.36112],[-36.19922,-9.36177],[-36.19918,-9.36258],[-36.19931,-9.364],[-36.19926,-9.36499],[-36.19922,-9.36563],[-36.19928,-9.3666],[-36.19917,-9.36796],[-36.19917,-9.36868],[-36.19922,-9.36911],[-36.19912,-9.37017],[-36.19887,-9.37149],[-36.19886,-9.37264],[-36.19902,-9.37322],[-36.19915,-9.37504],[-36.19911,-9.37688],[-36.19896,-9.37747],[-36.19899,-9.37915],[-36.19917,-9.38053],[-36.19919,-9.38124],[-36.19926,-9.38175],[-36.19928,-9.38302],[-36.19913,-9.38374],[-36.19908,-9.38592],[-36.19879,-9.38787],[-36.19881,-9.38935],[-36.19902,-9.39092],[-36.19904,-9.392],[-36.19899,-9.39348],[-36.1988,-9.39451],[-36.19867,-9.39705],[-36.19845,-9.39949],[-36.19864,-9.40313],[-36.19866,-9.40476],[-36.19865,-9.40836],[-36.19875,-9.40902],[-36.19857,-9.41058],[-36.19859,-9.41273],[-36.19874,-9.41446],[-36.19868,-9.41711],[-36.1986,-9.41902],[-36.19846,-9.41965],[-36.1985,-9.42235],[-36.19871,-9.42429],[-36.19858,-9.42697],[-36.1984,-9.42895],[-36.19857,-9.43412],[-36.19871,-9.4347],[-36.19865,-9.43595],[-36.19857,-9.43626],[-36.19859,-9.43667],[-36.19876,-9.43749],[-36.19889,-9.43905],[-36.19882,-9.43995],[-36.1785,-9.43977],[-36.17718,-9.43968],[-36.17265,-9.43967],[-36.17099,-9.43971],[-36.16396,-9.43963],[-36.15386,-9.4395],[-36.13983,-9.4393],[-36.12875,-9.43913],[-36.11497,-9.43892],[-36.10753,-9.43884]]],terms_url:"http://www.seplag.al.gov.br",terms_text:"Secretaria de Estado do Planejamento, Gestão e Patrimônio"},{id:"osm-cambodia_laos_thailand_vietnam-bilingual",name:"Cambodia, Laos, Thailand, Vietnam, Malaysia, Myanmar bilingual",type:"tms",template:"https://{switch:a,b,c,d}.tile.osm-tools.org/osm/{zoom}/{x}/{y}.png",zoomExtent:[0,20],polygon:[[[92.10238,20.81356],[93.56905,24.09755],[94.1733,23.92695],[95.19503,26.70727],[96.75509,27.52867],[97.58456,28.5806],[98.73812,27.51405],[98.74362,25.87992],[97.67794,24.75774],[97.96359,24.04238],[98.82052,24.16272],[99.52364,22.95934],[100.36959,21.50514],[101.79232,22.48305],[105.36288,23.33311],[106.81857,22.84801],[108.19735,21.36197],[107.43895,18.85398],[117.14537,7.46562],[119.6173,5.28754],[118.12315,4.05023],[117.25523,4.36249],[115.86546,4.34606],[115.50841,3.02498],[114.5526,1.5101],[113.54186,1.25748],[112.96507,1.5705],[112.24547,1.5101],[111.67418,1.01583],[110.4547,0.90049],[109.49889,1.9219],[103.22569,1.12568],[100.46263,3.23889],[97.6721,8.05888],[93.89281,15.93987],[92.10238,20.81356]]],terms_url:"http://www.osm-tools.org",terms_text:"© osm-tools.org & OpenStreetMap contributors, CC-BY-SA"},{id:"campo_alegre_al",name:"Campo Alegre AL",type:"wms",template:"http://geoserver.dados.al.gov.br:8080/geoserver/Alagoas/ows?LAYERS=Campo%20Alegre&SERVICE=WMS&FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.0&SERVICE=WMS&REQUEST=GetMap&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[-36.30643,-9.82332],[-36.30603,-9.78597],[-36.30602,-9.78263],[-36.30609,-9.78168],[-36.30604,-9.78081],[-36.3059,-9.77531],[-36.30586,-9.76496],[-36.30545,-9.73336],[-36.39634,-9.73248],[-36.39627,-9.73744],[-36.39636,-9.74336],[-36.39644,-9.75535],[-36.3966,-9.75856],[-36.39665,-9.75979],[-36.39655,-9.76244],[-36.39661,-9.76489],[-36.39658,-9.76648],[-36.39661,-9.76684],[-36.39659,-9.7696],[-36.3967,-9.77896],[-36.39675,-9.78464],[-36.39684,-9.79067],[-36.39693,-9.79681],[-36.39703,-9.80298],[-36.39719,-9.82033],[-36.39722,-9.82234],[-36.39392,-9.82233],[-36.35375,-9.82279],[-36.34822,-9.82286],[-36.31697,-9.82317],[-36.31191,-9.82324],[-36.30879,-9.82327],[-36.30643,-9.82332]]],terms_url:"http://www.seplag.al.gov.br",terms_text:"Secretaria de Estado do Planejamento, Gestão e Patrimônio"},{id:"canaan_drone_red_cross_201712",name:"Canaan - American Red Cross, Dec-2017",type:"tms",template:"https://tiles.openaerialmap.org/5ac65a9f91b5310010e0d489/0/5ac65a9f91b5310010e0d48a/{zoom}/{x}/{y}.png",endDate:"2017-12-20T00:00:00.000Z",startDate:"2017-12-11T00:00:00.000Z",zoomExtent:[0,21],polygon:[[[-72.26734,18.63561],[-72.2636,18.6373],[-72.26116,18.64141],[-72.25983,18.64588],[-72.25811,18.64742],[-72.24502,18.64795],[-72.23433,18.64807],[-72.22734,18.6482],[-72.21953,18.65438],[-72.2161,18.65446],[-72.21584,18.66222],[-72.21725,18.66739],[-72.21889,18.67019],[-72.22309,18.66958],[-72.22343,18.67312],[-72.22502,18.6732],[-72.22545,18.67609],[-72.23288,18.67597],[-72.23339,18.67877],[-72.23674,18.67857],[-72.23854,18.67975],[-72.24,18.68129],[-72.24463,18.68207],[-72.24682,18.6817],[-72.24605,18.67698],[-72.25094,18.67698],[-72.25511,18.67902],[-72.25961,18.67898],[-72.26081,18.67743],[-72.27038,18.67711],[-72.27901,18.67682],[-72.28373,18.67893],[-72.28613,18.68154],[-72.29665,18.68178],[-72.30184,18.68568],[-72.3012,18.68824],[-72.30802,18.69324],[-72.30948,18.69308],[-72.31699,18.69682],[-72.32806,18.70528],[-72.3384,18.69902],[-72.34012,18.69666],[-72.33961,18.69426],[-72.33377,18.68357],[-72.33135,18.68192],[-72.32551,18.68093],[-72.32027,18.67741],[-72.31626,18.67477],[-72.31167,18.672],[-72.308,18.66995],[-72.30534,18.66926],[-72.30068,18.66499],[-72.29796,18.66479],[-72.29609,18.66129],[-72.29315,18.65999],[-72.29519,18.65497],[-72.28414,18.64962],[-72.27804,18.64523],[-72.27487,18.64212],[-72.27352,18.64057],[-72.2706,18.63901],[-72.26734,18.63561]]],terms_url:"http://americanredcross.github.io/",terms_text:"American Red Cross",description:"Drone imagery collected December 2017 for Canaan, Haiti by American Red Cross in coordination with the Haitian Red Cross."},{id:"Geneve-SITG-2011",name:"Canton de Génève 5cm (SITG 2011)",type:"wms",template:"https://ge.ch/ags2/services/Orthophotos_2011/MapServer/WMSServer?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&Layers=0&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",endDate:"2011-01-01T00:00:00.000Z",startDate:"2011-01-01T00:00:00.000Z",polygon:[[[6.18221,46.22618],[6.18348,46.22772],[6.18929,46.23329],[6.19196,46.23858],[6.19253,46.24239],[6.19061,46.24397],[6.19046,46.24654],[6.19256,46.25045],[6.19186,46.25262],[6.19325,46.256],[6.19287,46.25776],[6.19543,46.26181],[6.1979,46.26454],[6.20045,46.26569],[6.20917,46.26634],[6.21716,46.27388],[6.22046,46.27895],[6.2275,46.28649],[6.23433,46.28955],[6.23643,46.2932],[6.24074,46.29774],[6.23958,46.30396],[6.2413,46.30529],[6.2432,46.30453],[6.24513,46.30492],[6.24627,46.30372],[6.24983,46.3027],[6.25032,46.3014],[6.24938,46.30018],[6.25146,46.29647],[6.25063,46.29451],[6.25223,46.29382],[6.25429,46.2907],[6.25231,46.28735],[6.25032,46.2868],[6.24974,46.28574],[6.24636,46.28433],[6.24323,46.28428],[6.23985,46.28098],[6.23934,46.27627],[6.24372,46.27356],[6.25113,46.26258],[6.26244,46.2553],[6.26301,46.25457],[6.262,46.25215],[6.26736,46.24887],[6.27732,46.25211],[6.27725,46.25298],[6.2832,46.25503],[6.28231,46.25568],[6.28278,46.25677],[6.28868,46.26046],[6.29154,46.2644],[6.29457,46.26556],[6.29729,46.26489],[6.29783,46.2631],[6.29541,46.25827],[6.29663,46.2566],[6.3024,46.2558],[6.30678,46.25753],[6.311,46.25666],[6.30768,46.25184],[6.31046,46.25057],[6.31011,46.24749],[6.31156,46.24386],[6.29606,46.22501],[6.29012,46.22241],[6.27773,46.21493],[6.26707,46.21276],[6.25668,46.20926],[6.25089,46.20574],[6.25076,46.20456],[6.2495,46.20404],[6.24643,46.20454],[6.24251,46.20364],[6.23594,46.20541],[6.23347,46.20509],[6.22889,46.20172],[6.22323,46.20005],[6.22355,46.19881],[6.22257,46.19791],[6.21935,46.19765],[6.21688,46.19448],[6.21259,46.19189],[6.20727,46.19137],[6.20588,46.18908],[6.2034,46.18806],[6.20282,46.18642],[6.20035,46.18504],[6.19905,46.18296],[6.19615,46.18288],[6.1885,46.17967],[6.18751,46.17539],[6.18982,46.16584],[6.1748,46.15694],[6.1688,46.15624],[6.15829,46.15195],[6.15434,46.15141],[6.14952,46.14933],[6.14805,46.14748],[6.14832,46.14619],[6.14561,46.14417],[6.14244,46.14493],[6.13768,46.14217],[6.13692,46.14071],[6.13074,46.13946],[6.12598,46.13966],[6.12014,46.14181],[6.1077,46.14203],[6.10537,46.14313],[6.09746,46.14325],[6.09151,46.15095],[6.07476,46.14795],[6.07188,46.14908],[6.05295,46.15046],[6.04973,46.1468],[6.04862,46.14153],[6.04571,46.13916],[6.04287,46.14006],[6.04013,46.13894],[6.03783,46.13716],[6.03647,46.13381],[6.03531,46.13344],[6.03,46.13816],[6.02079,46.14024],[6.01693,46.14191],[6.01282,46.14119],[6.00814,46.14171],[6.00364,46.14088],[5.99338,46.1432],[5.98728,46.14171],[5.98464,46.14232],[5.98309,46.13712],[5.97603,46.1319],[5.97314,46.13081],[5.97037,46.13108],[5.96536,46.12882],[5.96163,46.12976],[5.9573,46.12767],[5.95575,46.12836],[5.95484,46.13214],[5.9589,46.13553],[5.96446,46.13738],[5.96517,46.13845],[5.9631,46.14241],[5.96383,46.14656],[5.97157,46.1558],[5.97884,46.16721],[5.98022,46.17354],[5.98322,46.17507],[5.98537,46.17478],[5.98754,46.17306],[5.99029,46.17955],[5.9936,46.18203],[5.98976,46.18692],[5.98287,46.18822],[5.98068,46.1904],[5.96282,46.1963],[5.96225,46.19719],[5.96465,46.20022],[5.97164,46.20302],[5.96985,46.20383],[5.96794,46.20675],[5.97227,46.21418],[5.97364,46.21563],[5.97897,46.21821],[6.00857,46.24444],[6.01422,46.24855],[6.06593,46.28345],[6.11511,46.31511],[6.12573,46.31843],[6.12972,46.31568],[6.12978,46.31407],[6.13604,46.30896],[6.14179,46.30555],[6.15393,46.30014],[6.17157,46.29507],[6.17125,46.29223],[6.17277,46.28629],[6.17018,46.28533],[6.16834,46.28109],[6.17201,46.27554],[6.1722,46.27301],[6.1691,46.26785],[6.16746,46.26217],[6.16531,46.26195],[6.16455,46.26274],[6.15943,46.25898],[6.15532,46.25216],[6.15387,46.25212],[6.15273,46.25037],[6.15311,46.2477],[6.15494,46.24591],[6.1521,46.23878],[6.15217,46.23273],[6.15034,46.22659],[6.15454,46.22191],[6.15483,46.22044],[6.15296,46.21738],[6.154,46.21355],[6.1571,46.21097],[6.16263,46.21043],[6.16387,46.2097],[6.16911,46.21191],[6.16867,46.21318],[6.17073,46.21478],[6.17471,46.21603],[6.18221,46.22618]],[[6.18834,46.34901],[6.18696,46.34862],[6.18195,46.35015],[6.17961,46.352],[6.17142,46.35444],[6.17022,46.35911],[6.17415,46.36036],[6.17272,46.36189],[6.17348,46.36288],[6.17999,46.36547],[6.1877,46.36132],[6.19447,46.36175],[6.19905,46.36086],[6.20113,46.35634],[6.20258,46.35567],[6.20791,46.35583],[6.21374,46.35379],[6.21247,46.35085],[6.20846,46.34665],[6.2086,46.33991],[6.20659,46.33792],[6.20493,46.33861],[6.20348,46.33793],[6.19181,46.34333],[6.19318,46.34787],[6.19076,46.3477],[6.18834,46.34901]],[[6.18182,46.34281],[6.18016,46.34318],[6.1752,46.34532],[6.17341,46.34398],[6.17324,46.34054],[6.1714,46.33952],[6.16588,46.34254],[6.16564,46.34339],[6.17091,46.35054],[6.17341,46.35029],[6.17458,46.35192],[6.17587,46.35205],[6.18579,46.34593],[6.18182,46.34281]]],terms_url:"http://ge.ch/sitg/donnees/conditions-d-utilisation/open-data",terms_text:"Orthophotos du SITG 2011"},{id:"CTFRIBOURG2016",name:"Canton Fribourg 2016",type:"tms",template:"https://mapproxy.osm.ch/tiles/fribourg_2016/EPSG900913/{zoom}/{x}/{y}.png?origin=nw",endDate:"2016-01-01T00:00:00.000Z",startDate:"2016-01-01T00:00:00.000Z",zoomExtent:[1,21],polygon:[[[6.79478,46.57542],[6.79949,46.57407],[6.80256,46.57491],[6.80336,46.57687],[6.80427,46.57664],[6.80489,46.57792],[6.80794,46.57761],[6.8094,46.57885],[6.81084,46.57896],[6.81322,46.57823],[6.81153,46.58099],[6.8142,46.58396],[6.81411,46.58567],[6.8206,46.58368],[6.82371,46.57747],[6.82693,46.57796],[6.82927,46.57637],[6.83485,46.57533],[6.83744,46.57677],[6.83691,46.57748],[6.83982,46.57896],[6.84239,46.58244],[6.84532,46.58276],[6.84644,46.58394],[6.84857,46.58331],[6.85087,46.58113],[6.85262,46.58197],[6.85996,46.57987],[6.86554,46.57725],[6.86507,46.57623],[6.8679,46.57515],[6.87446,46.56497],[6.8845,46.56195],[6.88686,46.56341],[6.89214,46.5679],[6.89918,46.56671],[6.89885,46.56499],[6.89393,46.55991],[6.88822,46.55815],[6.86839,46.54164],[6.86498,46.53896],[6.86015,46.53597],[6.85563,46.54086],[6.85501,46.54144],[6.85087,46.54111],[6.8407,46.53819],[6.83032,46.53744],[6.82783,46.54298],[6.82553,46.54357],[6.81278,46.52707],[6.81088,46.52513],[6.81534,46.52139],[6.8181,46.5165],[6.82263,46.51411],[6.82429,46.51207],[6.83034,46.51246],[6.83239,46.50544],[6.83503,46.50231],[6.84126,46.49706],[6.84294,46.49632],[6.84554,46.49667],[6.84775,46.49369],[6.84891,46.49337],[6.85729,46.49305],[6.86276,46.49384],[6.86634,46.50079],[6.87244,46.50431],[6.88168,46.51257],[6.8967,46.52044],[6.89773,46.52005],[6.89711,46.51766],[6.89767,46.51483],[6.89522,46.51079],[6.89572,46.50773],[6.89974,46.51039],[6.90142,46.51233],[6.92517,46.50769],[6.92759,46.50467],[6.93363,46.50167],[6.93674,46.50096],[6.95614,46.49949],[6.97239,46.48879],[6.97581,46.4784],[6.97783,46.47289],[6.97815,46.46833],[6.97906,46.46107],[6.98016,46.45896],[6.99212,46.44891],[6.98361,46.43873],[6.98394,46.43799],[6.98746,46.43794],[7.01786,46.44707],[7.02103,46.45729],[7.06583,46.48904],[7.0724,46.4864],[7.10037,46.48699],[7.12279,46.49869],[7.1264,46.50317],[7.13096,46.50466],[7.13624,46.50861],[7.13704,46.51308],[7.14005,46.51688],[7.14044,46.51988],[7.14318,46.52183],[7.1437,46.52475],[7.1453,46.52701],[7.14835,46.52846],[7.15834,46.52681],[7.16346,46.52855],[7.16709,46.53101],[7.18234,46.53837],[7.19218,46.54656],[7.20081,46.54169],[7.20108,46.543],[7.20765,46.53291],[7.21417,46.53762],[7.21811,46.54211],[7.22171,46.54481],[7.22311,46.5476],[7.22543,46.54923],[7.2322,46.55123],[7.23614,46.554],[7.24047,46.55424],[7.24705,46.55623],[7.25574,46.56029],[7.26385,46.56752],[7.2681,46.57369],[7.28136,46.58411],[7.2992,46.5791],[7.30805,46.58132],[7.31254,46.58917],[7.3207,46.59183],[7.31479,46.60042],[7.3162,46.60937],[7.31826,46.61615],[7.3178,46.61856],[7.31213,46.6217],[7.31327,46.63662],[7.32284,46.63731],[7.32684,46.63873],[7.32975,46.64171],[7.32787,46.64616],[7.321,46.65465],[7.32345,46.65526],[7.32914,46.65459],[7.33116,46.65522],[7.33403,46.65471],[7.34549,46.6553],[7.34756,46.65307],[7.35063,46.65164],[7.35079,46.64799],[7.35456,46.64669],[7.3558,46.64533],[7.35528,46.64193],[7.35714,46.63927],[7.35877,46.64418],[7.36209,46.64683],[7.36229,46.64791],[7.36608,46.64898],[7.37747,46.65636],[7.36933,46.65564],[7.36953,46.65748],[7.37103,46.65907],[7.37083,46.66085],[7.37187,46.66283],[7.37122,46.66375],[7.37252,46.66757],[7.37108,46.66942],[7.37649,46.67503],[7.37293,46.68012],[7.37777,46.68357],[7.37587,46.68645],[7.376,46.6878],[7.38027,46.69018],[7.37693,46.69272],[7.3686,46.69265],[7.3649,46.69505],[7.36261,46.69928],[7.3598,46.69802],[7.34598,46.69895],[7.34604,46.7019],[7.34939,46.70555],[7.35037,46.70874],[7.35021,46.71119],[7.34903,46.71249],[7.34065,46.71464],[7.33277,46.71491],[7.32868,46.71641],[7.31011,46.71815],[7.30785,46.71717],[7.30002,46.72247],[7.29683,46.72737],[7.29685,46.73565],[7.29834,46.74013],[7.30304,46.74517],[7.30454,46.74816],[7.30486,46.75026],[7.30335,46.7514],[7.30309,46.75261],[7.30359,46.75919],[7.29987,46.76375],[7.29881,46.76513],[7.29307,46.77136],[7.29532,46.77537],[7.29639,46.77729],[7.30081,46.77905],[7.30053,46.78064],[7.30113,46.78134],[7.30447,46.78321],[7.30447,46.78415],[7.30207,46.78638],[7.30351,46.78887],[7.30201,46.79079],[7.30159,46.79283],[7.30732,46.79872],[7.31044,46.80823],[7.31537,46.81246],[7.32028,46.8149],[7.32047,46.81564],[7.32072,46.82011],[7.31981,46.82515],[7.32891,46.829],[7.3302,46.82968],[7.33123,46.83177],[7.33103,46.8328],[7.32926,46.83563],[7.32333,46.84041],[7.30755,46.84704],[7.30775,46.84808],[7.30613,46.84999],[7.31207,46.85557],[7.31351,46.85936],[7.31739,46.8606],[7.32087,46.86154],[7.32576,46.85681],[7.323,46.85476],[7.32603,46.85163],[7.33181,46.8512],[7.33536,46.85043],[7.33678,46.84979],[7.33821,46.84946],[7.34726,46.85375],[7.34934,46.85331],[7.35167,46.85502],[7.35444,46.85875],[7.35772,46.86065],[7.35925,46.86311],[7.35794,46.86513],[7.35838,46.8688],[7.35738,46.8701],[7.35386,46.87129],[7.35253,46.87555],[7.35339,46.88676],[7.34843,46.88934],[7.32573,46.89373],[7.30935,46.89152],[7.29618,46.89377],[7.28938,46.89377],[7.28639,46.89269],[7.28245,46.8898],[7.2802,46.8896],[7.27259,46.89249],[7.26634,46.89361],[7.25931,46.89797],[7.24433,46.90037],[7.24314,46.89792],[7.23633,46.89809],[7.23203,46.90029],[7.2309,46.9024],[7.23032,46.90394],[7.22351,46.90276],[7.21755,46.89735],[7.21244,46.90173],[7.2088,46.9026],[7.20781,46.90913],[7.20578,46.91477],[7.20692,46.92481],[7.2111,46.92527],[7.21854,46.92434],[7.2342,46.92939],[7.23411,46.93669],[7.23477,46.93827],[7.2302,46.93995],[7.2282,46.93881],[7.22555,46.93633],[7.2174,46.93307],[7.2093,46.93334],[7.20823,46.93323],[7.2058,46.94023],[7.2055,46.94112],[7.20951,46.94188],[7.21027,46.94302],[7.21044,46.94569],[7.21011,46.94781],[7.20885,46.95435],[7.21102,46.95652],[7.20838,46.95768],[7.20742,46.95967],[7.19764,46.96065],[7.19459,46.96135],[7.19463,46.9629],[7.19552,46.96416],[7.19633,46.96365],[7.19794,46.96445],[7.1993,46.9638],[7.20646,46.96413],[7.20745,46.96751],[7.21422,46.96692],[7.21467,46.97133],[7.21739,46.97147],[7.21686,46.97271],[7.22247,46.97454],[7.22163,46.97556],[7.22821,46.97836],[7.23569,46.98456],[7.23486,46.98675],[7.22594,46.9924],[7.22625,46.99868],[7.22575,46.99915],[7.21779,47.00641],[7.21299,47.0068],[7.09058,46.978],[7.03295,46.98265],[6.73785,46.81195],[6.73908,46.71021],[6.81908,46.65533],[6.82741,46.65982],[6.82089,46.65179],[6.81729,46.64923],[6.81851,46.6478],[6.81458,46.64747],[6.81344,46.64953],[6.81194,46.6492],[6.81081,46.65038],[6.80674,46.65059],[6.80203,46.64889],[6.79891,46.64914],[6.79879,46.64781],[6.80367,46.64567],[6.80325,46.6448],[6.8038,46.64451],[6.80321,46.64376],[6.80171,46.64421],[6.79895,46.63959],[6.79692,46.63314],[6.79838,46.63016],[6.80043,46.62991],[6.80065,46.62843],[6.80172,46.62854],[6.80228,46.62775],[6.80197,46.62507],[6.80355,46.62124],[6.80244,46.61877],[6.80296,46.61615],[6.80185,46.61555],[6.80389,46.60903],[6.80239,46.60142],[6.79833,46.59986],[6.8002,46.59362],[6.80124,46.5925],[6.79848,46.58616],[6.79948,46.58559],[6.79894,46.58205],[6.79611,46.57932],[6.79626,46.57728],[6.79478,46.57542]]],terms_text:"Canton Fribourg 2016 'orthophoto technique'"},{id:"Canvec",name:"Canvec - English",type:"wms",template:"https://maps.geogratis.gc.ca/wms/canvec_en?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=canvec&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[-141.0678,60.2442],[-139.3842,60.10331],[-137.4746,58.82791],[-135.4766,59.65971],[-134.399,58.86279],[-132.5239,57.08342],[-130.1435,55.27452],[-130.7734,54.75597],[-132.4355,54.71514],[-134.5711,54.38827],[-141.7761,53.58405],[-128.9768,46.41459],[-124.8087,48.42976],[-123.4286,48.17889],[-123.0256,48.40444],[-123.19237,48.65504],[-122.99582,48.51065],[-122.4869,48.4098],[-122.32915,48.4528],[-122.22939,48.50649],[-122.17908,48.52965],[-122.1842,48.5669],[-121.77833,48.57593],[-121.66578,48.42791],[-121.33068,48.35714],[-121.02713,48.34977],[-121.03054,48.49406],[-120.698,48.51497],[-120.51041,48.8718],[-119.97579,48.88134],[-119.95447,48.51497],[-119.90758,48.29421],[-119.73193,48.15503],[-119.74386,48.07419],[-119.62279,48.10951],[-119.60232,48.14707],[-119.25273,48.16243],[-114.1499,48.99487],[-95.12094,48.98405],[-95.13419,49.35564],[-94.94415,49.34356],[-94.8839,49.29522],[-94.71704,48.87631],[-94.71791,48.7485],[-93.83204,48.49765],[-93.43778,48.53066],[-93.38216,48.59507],[-92.98471,48.60312],[-92.73847,48.50725],[-92.7095,48.42081],[-92.54293,48.40158],[-92.38361,48.20406],[-92.11564,48.27641],[-91.58697,48.02516],[-91.24658,48.05422],[-90.86275,48.20889],[-90.78308,48.0639],[-90.0774,48.07435],[-89.93835,47.96584],[-89.75469,47.99609],[-89.32745,47.93943],[-88.41489,48.26677],[-84.9566,46.86086],[-84.84795,46.6762],[-84.55904,46.45441],[-84.47642,46.44972],[-84.43758,46.48872],[-84.3669,46.5055],[-84.34899,46.5055],[-84.29026,46.49077],[-84.25742,46.49386],[-84.22507,46.53187],[-84.1962,46.53804],[-84.18027,46.52468],[-84.15987,46.52468],[-84.13449,46.52879],[-84.11558,46.50653],[-84.15944,46.42769],[-84.10024,46.20338],[-83.95558,46.05132],[-83.8864,46.06125],[-83.8203,46.11181],[-83.76975,46.09563],[-83.67498,46.11391],[-83.58084,46.09921],[-83.44747,45.99521],[-83.60888,45.81772],[-82.14271,43.57905],[-82.39133,43.06666],[-82.41252,43.01127],[-82.42522,42.99864],[-82.42618,42.99374],[-82.42363,42.98536],[-82.41503,42.97697],[-82.41853,42.96578],[-82.43064,42.95203],[-82.44911,42.93711],[-82.45739,42.92568],[-82.46472,42.90562],[-82.47228,42.8877],[-82.47228,42.84743],[-82.48536,42.80967],[-82.46844,42.76365],[-82.48586,42.73697],[-82.49155,42.71168],[-82.51488,42.66652],[-82.51224,42.63893],[-82.52421,42.61103],[-82.56854,42.58184],[-82.59498,42.55148],[-82.61286,42.56409],[-82.65158,42.55707],[-82.83439,42.3763],[-83.01489,42.33457],[-83.07244,42.31502],[-83.09647,42.29542],[-83.12823,42.24126],[-83.14167,42.18582],[-83.12799,42.12172],[-83.16266,42.04963],[-83.05136,41.70911],[-82.41932,41.6377],[-81.22563,42.19633],[-80.06688,42.37121],[-78.86642,42.825],[-78.90301,42.92307],[-78.92063,42.95234],[-78.93331,42.95708],[-78.96058,42.9595],[-78.98479,42.9761],[-79.01825,42.9964],[-79.01969,43.01561],[-79.00695,43.0333],[-78.99599,43.06448],[-79.07335,43.07876],[-79.07286,43.083],[-79.0652,43.0917],[-79.05623,43.10825],[-79.05982,43.11563],[-79.06764,43.11992],[-79.05411,43.12801],[-79.04112,43.13986],[-79.04465,43.16192],[-79.05101,43.17037],[-79.04758,43.19974],[-79.05511,43.25682],[-79.18688,43.44858],[-78.68836,43.62502],[-76.77647,43.61369],[-76.41665,44.08498],[-75.49023,44.70772],[-75.29544,44.82587],[-75.16845,44.88548],[-75.1275,44.8975],[-75.00499,44.95265],[-74.98159,44.97728],[-74.90496,44.98222],[-74.8313,45.01108],[-74.77954,45.00158],[-74.74562,44.98526],[-74.70475,44.99877],[-74.49079,44.99343],[-74.23203,44.98552],[-73.93713,44.99512],[-73.01809,45.0121],[-72.63177,45.0121],[-72.54779,45.00506],[-72.32259,45.00286],[-71.49404,45.01093],[-71.48648,45.06221],[-71.42303,45.12765],[-71.43112,45.14037],[-71.37175,45.22117],[-71.28959,45.28578],[-71.23613,45.24302],[-71.11683,45.22933],[-71.0531,45.29866],[-70.98936,45.31088],[-70.90246,45.22525],[-70.82473,45.22714],[-70.77626,45.40013],[-70.7119,45.3754],[-70.63387,45.37346],[-70.60302,45.41179],[-70.67659,45.56319],[-70.3752,45.73075],[-70.36334,45.82013],[-70.25417,45.87468],[-70.22569,45.94403],[-70.27316,45.99022],[-70.17586,46.33538],[-70.06195,46.4107],[-69.98891,46.69363],[-69.22424,47.44463],[-69.06999,47.41092],[-69.07473,47.24202],[-68.89684,47.17469],[-68.78685,47.21493],[-68.72415,47.23217],[-68.68583,47.24028],[-68.66044,47.23183],[-68.62162,47.24028],[-68.59425,47.24974],[-68.59226,47.27001],[-68.57385,47.28486],[-68.55941,47.2798],[-68.542,47.2798],[-68.51214,47.29195],[-68.47381,47.29229],[-68.46038,47.28149],[-68.43898,47.27777],[-68.37229,47.2825],[-68.3703,47.34796],[-68.33173,47.35822],[-68.29664,47.352],[-68.2399,47.34897],[-68.0906,47.26798],[-68.00002,47.21223],[-67.96344,47.19753],[-67.93582,47.15947],[-67.88619,47.10424],[-67.80218,47.06386],[-67.79415,45.93923],[-67.82753,45.8489],[-67.82753,45.6704],[-67.54943,45.57445],[-67.45302,45.58742],[-67.44189,45.52251],[-67.54201,45.49393],[-67.4456,45.38726],[-67.51605,45.29343],[-67.38257,45.11839],[-67.3047,45.11316],[-67.26762,45.18116],[-67.12671,45.09484],[-66.94835,44.78406],[-66.52283,43.61294],[-65.02339,42.10691],[-42.53366,47.50263],[-75.90901,77.3176],[-71.86482,78.7359],[-67.20011,80.66812],[-66.20727,80.78637],[-54.82473,83.07464],[-57.62518,85.04043],[-106.7949,85.04625],[-141.3957,79.2514],[-141.0678,60.2442]]]},{id:"Canvec_French",name:"Canvec - French",type:"wms",template:"https://maps.geogratis.gc.ca/wms/canvec_fr?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=canvec&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[-141.0678,60.2442],[-139.3842,60.10331],[-137.4746,58.82791],[-135.4766,59.65971],[-134.399,58.86279],[-132.5239,57.08342],[-130.1435,55.27452],[-130.7734,54.75597],[-132.4355,54.71514],[-134.5711,54.38827],[-141.7761,53.58405],[-128.9768,46.41459],[-124.8087,48.42976],[-123.4286,48.17889],[-123.0256,48.40444],[-123.19237,48.65504],[-122.99582,48.51065],[-122.4869,48.4098],[-122.32915,48.4528],[-122.22939,48.50649],[-122.17908,48.52965],[-122.1842,48.5669],[-121.77833,48.57593],[-121.66578,48.42791],[-121.33068,48.35714],[-121.02713,48.34977],[-121.03054,48.49406],[-120.698,48.51497],[-120.51041,48.8718],[-119.97579,48.88134],[-119.95447,48.51497],[-119.90758,48.29421],[-119.73193,48.15503],[-119.74386,48.07419],[-119.62279,48.10951],[-119.60232,48.14707],[-119.25273,48.16243],[-114.1499,48.99487],[-95.12094,48.98405],[-95.13419,49.35564],[-94.94415,49.34356],[-94.8839,49.29522],[-94.71704,48.87631],[-94.71791,48.7485],[-93.83204,48.49765],[-93.43778,48.53066],[-93.38216,48.59507],[-92.98471,48.60312],[-92.73847,48.50725],[-92.7095,48.42081],[-92.54293,48.40158],[-92.38361,48.20406],[-92.11564,48.27641],[-91.58697,48.02516],[-91.24658,48.05422],[-90.86275,48.20889],[-90.78308,48.0639],[-90.0774,48.07435],[-89.93835,47.96584],[-89.75469,47.99609],[-89.32745,47.93943],[-88.41489,48.26677],[-84.9566,46.86086],[-84.84795,46.6762],[-84.55904,46.45441],[-84.47642,46.44972],[-84.43758,46.48872],[-84.3669,46.5055],[-84.34899,46.5055],[-84.29026,46.49077],[-84.25742,46.49386],[-84.22507,46.53187],[-84.1962,46.53804],[-84.18027,46.52468],[-84.15987,46.52468],[-84.13449,46.52879],[-84.11558,46.50653],[-84.15944,46.42769],[-84.10024,46.20338],[-83.95558,46.05132],[-83.8864,46.06125],[-83.8203,46.11181],[-83.76975,46.09563],[-83.67498,46.11391],[-83.58084,46.09921],[-83.44747,45.99521],[-83.60888,45.81772],[-82.14271,43.57905],[-82.39133,43.06666],[-82.41252,43.01127],[-82.42522,42.99864],[-82.42618,42.99374],[-82.42363,42.98536],[-82.41503,42.97697],[-82.41853,42.96578],[-82.43064,42.95203],[-82.44911,42.93711],[-82.45739,42.92568],[-82.46472,42.90562],[-82.47228,42.8877],[-82.47228,42.84743],[-82.48536,42.80967],[-82.46844,42.76365],[-82.48586,42.73697],[-82.49155,42.71168],[-82.51488,42.66652],[-82.51224,42.63893],[-82.52421,42.61103],[-82.56854,42.58184],[-82.59498,42.55148],[-82.61286,42.56409],[-82.65158,42.55707],[-82.83439,42.3763],[-83.01489,42.33457],[-83.07244,42.31502],[-83.09647,42.29542],[-83.12823,42.24126],[-83.14167,42.18582],[-83.12799,42.12172],[-83.16266,42.04963],[-83.05136,41.70911],[-82.41932,41.6377],[-81.22563,42.19633],[-80.06688,42.37121],[-78.86642,42.825],[-78.90301,42.92307],[-78.92063,42.95234],[-78.93331,42.95708],[-78.96058,42.9595],[-78.98479,42.9761],[-79.01825,42.9964],[-79.01969,43.01561],[-79.00695,43.0333],[-78.99599,43.06448],[-79.07335,43.07876],[-79.07286,43.083],[-79.0652,43.0917],[-79.05623,43.10825],[-79.05982,43.11563],[-79.06764,43.11992],[-79.05411,43.12801],[-79.04112,43.13986],[-79.04465,43.16192],[-79.05101,43.17037],[-79.04758,43.19974],[-79.05511,43.25682],[-79.18688,43.44858],[-78.68836,43.62502],[-76.77647,43.61369],[-76.41665,44.08498],[-75.49023,44.70772],[-75.29544,44.82587],[-75.16845,44.88548],[-75.1275,44.8975],[-75.00499,44.95265],[-74.98159,44.97728],[-74.90496,44.98222],[-74.8313,45.01108],[-74.77954,45.00158],[-74.74562,44.98526],[-74.70475,44.99877],[-74.49079,44.99343],[-74.23203,44.98552],[-73.93713,44.99512],[-73.01809,45.0121],[-72.63177,45.0121],[-72.54779,45.00506],[-72.32259,45.00286],[-71.49404,45.01093],[-71.48648,45.06221],[-71.42303,45.12765],[-71.43112,45.14037],[-71.37175,45.22117],[-71.28959,45.28578],[-71.23613,45.24302],[-71.11683,45.22933],[-71.0531,45.29866],[-70.98936,45.31088],[-70.90246,45.22525],[-70.82473,45.22714],[-70.77626,45.40013],[-70.7119,45.3754],[-70.63387,45.37346],[-70.60302,45.41179],[-70.67659,45.56319],[-70.3752,45.73075],[-70.36334,45.82013],[-70.25417,45.87468],[-70.22569,45.94403],[-70.27316,45.99022],[-70.17586,46.33538],[-70.06195,46.4107],[-69.98891,46.69363],[-69.22424,47.44463],[-69.06999,47.41092],[-69.07473,47.24202],[-68.89684,47.17469],[-68.78685,47.21493],[-68.72415,47.23217],[-68.68583,47.24028],[-68.66044,47.23183],[-68.62162,47.24028],[-68.59425,47.24974],[-68.59226,47.27001],[-68.57385,47.28486],[-68.55941,47.2798],[-68.542,47.2798],[-68.51214,47.29195],[-68.47381,47.29229],[-68.46038,47.28149],[-68.43898,47.27777],[-68.37229,47.2825],[-68.3703,47.34796],[-68.33173,47.35822],[-68.29664,47.352],[-68.2399,47.34897],[-68.0906,47.26798],[-68.00002,47.21223],[-67.96344,47.19753],[-67.93582,47.15947],[-67.88619,47.10424],[-67.80218,47.06386],[-67.79415,45.93923],[-67.82753,45.8489],[-67.82753,45.6704],[-67.54943,45.57445],[-67.45302,45.58742],[-67.44189,45.52251],[-67.54201,45.49393],[-67.4456,45.38726],[-67.51605,45.29343],[-67.38257,45.11839],[-67.3047,45.11316],[-67.26762,45.18116],[-67.12671,45.09484],[-66.94835,44.78406],[-66.52283,43.61294],[-65.02339,42.10691],[-42.53366,47.50263],[-75.90901,77.3176],[-71.86482,78.7359],[-67.20011,80.66812],[-66.20727,80.78637],[-54.82473,83.07464],[-57.62518,85.04043],[-106.7949,85.04625],[-141.3957,79.2514],[-141.0678,60.2442]]]},{id:"capela_al",name:"Capela AL",type:"wms",template:"http://geoserver.dados.al.gov.br:8080/geoserver/Alagoas/ows?LAYERS=Capela&SERVICE=WMS&FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.0&SERVICE=WMS&REQUEST=GetMap&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[-36.03321,-9.45741],[-36.03322,-9.45581],[-36.03336,-9.45483],[-36.0334,-9.45291],[-36.03327,-9.45141],[-36.03336,-9.44287],[-36.0335,-9.43821],[-36.03353,-9.42881],[-36.03363,-9.42027],[-36.03389,-9.41091],[-36.03389,-9.40032],[-36.03401,-9.3888],[-36.03413,-9.38528],[-36.03428,-9.38265],[-36.03417,-9.37849],[-36.03444,-9.36688],[-36.05246,-9.3671],[-36.05791,-9.36711],[-36.0716,-9.36727],[-36.08622,-9.36731],[-36.103,-9.3675],[-36.11652,-9.36755],[-36.12515,-9.36768],[-36.12522,-9.37473],[-36.12521,-9.37721],[-36.12511,-9.38038],[-36.12514,-9.38529],[-36.12505,-9.39026],[-36.12504,-9.39477],[-36.12506,-9.40172],[-36.12499,-9.40382],[-36.1248,-9.40679],[-36.12463,-9.41123],[-36.12474,-9.4136],[-36.12456,-9.4163],[-36.12459,-9.42461],[-36.12466,-9.42691],[-36.12465,-9.42925],[-36.12457,-9.4297],[-36.12464,-9.43538],[-36.12438,-9.44109],[-36.12446,-9.44387],[-36.12452,-9.44579],[-36.12438,-9.44736],[-36.12448,-9.44856],[-36.12448,-9.45095],[-36.12436,-9.45392],[-36.12434,-9.45791],[-36.11758,-9.45783],[-36.1089,-9.45778],[-36.10419,-9.4578],[-36.10116,-9.45773],[-36.0953,-9.45773],[-36.08461,-9.45767],[-36.07361,-9.45757],[-36.05726,-9.45741],[-36.04816,-9.45747],[-36.04177,-9.45739],[-36.03767,-9.45739],[-36.03321,-9.45741]]],terms_url:"http://www.seplag.al.gov.br",terms_text:"Secretaria de Estado do Planejamento, Gestão e Patrimônio"},{id:"COS2010_v1.0",name:"Carta de Uso do Solo 2010 (WMS)",type:"wms",template:"http://mapas.dgterritorio.pt/wms-inspire/cos2010v1?language=por&FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=COS2010_v1.0&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",endDate:"2010-01-01T00:00:00.000Z",startDate:"2010-01-01T00:00:00.000Z",zoomExtent:[14,18],polygon:[[[-7.31278,36.98391],[-7.44461,37.5718],[-7.1933,37.97019],[-6.97357,38.00807],[-6.90628,38.24142],[-7.06627,38.20743],[-7.27158,38.45628],[-7.20429,38.72356],[-7.0134,38.85468],[-6.91315,39.03839],[-6.97357,39.13113],[-7.17957,39.23651],[-7.28668,39.48497],[-7.44873,39.61838],[-7.34162,39.60886],[-6.99692,39.64906],[-6.81839,40.0192],[-7.01065,40.19986],[-6.85272,40.24285],[-6.76209,40.35073],[-6.77994,40.8886],[-6.88637,41.01151],[-6.79642,41.01721],[-6.63849,41.21689],[-6.4531,41.24116],[-6.29311,41.38763],[-6.15715,41.5908],[-6.31165,41.68932],[-6.51215,41.71188],[-6.49841,41.88081],[-6.56296,41.97991],[-6.80191,42.00951],[-7.20497,42.00135],[-7.22763,41.8849],[-7.36908,41.87058],[-7.72751,41.92885],[-7.92526,41.94009],[-8.07907,41.84706],[-8.1601,41.91812],[-8.01796,42.05031],[-8.19924,42.18681],[-8.39356,42.1023],[-8.66066,42.07886],[-8.88382,41.88081],[-9.17084,41.86956],[-9.04175,41.43655],[-9.01978,40.65981],[-9.15711,40.26695],[-9.81903,39.52099],[-9.74213,38.6512],[-9.12964,37.88136],[-9.27246,36.99378],[-9.09394,36.68604],[-7.80579,36.74989],[-7.31278,36.98391]]],terms_url:"http://www.dgterritorio.pt/dados_abertos/cos/",terms_text:"Direcção-Geral do Território",icon:"http://www.igeo.pt/favicon.ico"},{id:"Cartoriviera-2012",name:"Cartoriviera - Orthophoto 2012",type:"tms",template:"http://osmdata.asitvd.ch/tiles/cartoriviera2012/{zoom}/{x}/{y}.png",endDate:"2012-01-01T00:00:00.000Z",startDate:"2012-01-01T00:00:00.000Z",zoomExtent:[14,20],polygon:[[[7.02235,46.42856],[7.0224,46.42045],[7.02176,46.41955],[7.02225,46.41954],[7.02161,46.41749],[7.02242,46.4174],[7.02242,46.41681],[7.02113,46.41443],[7.02164,46.41259],[7.0216,46.41188],[7.01918,46.41055],[7.01896,46.41004],[7.01757,46.40826],[7.01426,46.40696],[7.00948,46.40695],[7.00952,46.40451],[7.00368,46.40153],[6.97052,46.40139],[6.97056,46.39354],[6.96507,46.38333],[6.89379,46.383],[6.89327,46.39209],[6.8968,46.4],[6.89678,46.40097],[6.89395,46.401],[6.89768,46.40888],[6.89246,46.41386],[6.89237,46.41807],[6.8949,46.4193],[6.89285,46.41948],[6.89395,46.42312],[6.89225,46.42339],[6.89219,46.42802],[6.88743,46.428],[6.87652,46.43163],[6.86624,46.43633],[6.84003,46.44591],[6.83504,46.44934],[6.827,46.45204],[6.82695,46.45379],[6.81953,46.45655],[6.80361,46.45993],[6.78775,46.46253],[6.78697,46.5246],[6.82604,46.5248],[6.82609,46.52662],[6.83907,46.5267],[6.83888,46.55006],[6.90658,46.55042],[6.912,46.54301],[6.91083,46.53983],[6.90979,46.53512],[6.90931,46.53517],[6.90867,46.53373],[6.91195,46.53297],[6.91335,46.53604],[6.9268,46.53364],[6.92723,46.5349],[6.93714,46.53311],[6.93691,46.5327],[6.94028,46.53196],[6.94164,46.53477],[6.94309,46.53455],[6.94345,46.53528],[6.95641,46.53003],[6.95632,46.52733],[6.95111,46.52725],[6.95301,46.52611],[6.94341,46.52605],[6.94343,46.52546],[7.01629,46.52568],[7.02158,46.52211],[7.02196,46.47355],[7.07099,46.47368],[7.07402,46.4719],[7.07383,46.4326],[7.05947,46.43233],[7.05278,46.42879],[7.02235,46.42856]]],terms_url:"https://map.cartoriviera.ch/?baselayer_ref=orthos_2012_mobile&baselayer_opacity=100",terms_text:"Cartoriviera"},{id:"Catastro-Spain",name:"Catastro Spain",type:"wms",template:"http://ovc.catastro.meh.es/Cartografia/WMS/ServidorWMS.aspx?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&Layers=Catastro&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[-17.88463,28.44606],[-17.89395,28.52255],[-18.02125,28.74819],[-18.02241,28.80384],[-17.9424,28.87261],[-17.89118,28.87371],[-17.89033,28.85151],[-17.76759,28.85378],[-17.76698,28.83122],[-17.74127,28.832],[-17.73949,28.76422],[-17.71398,28.76497],[-17.71293,28.73037],[-17.75744,28.69318],[-17.75708,28.67413],[-17.74579,28.67435],[-17.74573,28.61656],[-17.75197,28.58337],[-17.76225,28.5592],[-17.78331,28.54167],[-17.78316,28.49366],[-17.80861,28.4925],[-17.80601,28.4469],[-17.88463,28.44606]],[[-18.1661,27.78516],[-18.16349,27.69492],[-18.08898,27.69634],[-18.08734,27.67387],[-18.03641,27.67537],[-18.03501,27.63026],[-17.959,27.6324],[-17.86033,27.7926],[-17.86303,27.83688],[-17.8884,27.83649],[-17.88913,27.85905],[-17.99065,27.85675],[-18.03868,27.76558],[-18.11464,27.76379],[-18.11546,27.78636],[-18.1661,27.78516]],[[-17.36038,28.06398],[-17.36297,28.17572],[-17.33756,28.17637],[-17.33846,28.2213],[-17.18579,28.22388],[-17.08208,28.13518],[-17.08084,28.068],[-17.13154,28.06681],[-17.15633,28.02146],[-17.23211,28.02037],[-17.23199,27.99804],[-17.25768,27.99784],[-17.25785,28.01997],[-17.30867,28.01923],[-17.36038,28.06398]],[[-16.92782,28.32758],[-16.92866,28.37219],[-16.87767,28.37293],[-16.87807,28.39542],[-16.52143,28.42261],[-16.44571,28.49113],[-16.44625,28.53597],[-16.42059,28.53627],[-16.42092,28.55884],[-16.34433,28.55976],[-16.3446,28.58221],[-16.19125,28.58372],[-16.19162,28.60684],[-16.12793,28.60782],[-16.1278,28.59218],[-16.09951,28.5925],[-16.09934,28.51638],[-16.16481,28.51612],[-16.16475,28.49386],[-16.23858,28.44847],[-16.26535,28.44761],[-16.26586,28.403],[-16.31675,28.40176],[-16.31631,28.38019],[-16.34208,28.37951],[-16.34083,28.2893],[-16.41584,28.19761],[-16.4151,28.13113],[-16.51533,28.01648],[-16.61684,28.01532],[-16.61681,27.99305],[-16.71842,27.99192],[-16.7191,28.03714],[-16.7447,28.03679],[-16.74534,28.08181],[-16.7707,28.08161],[-16.8224,28.1259],[-16.82317,28.17087],[-16.8487,28.17075],[-16.85028,28.26079],[-16.87565,28.26055],[-16.87608,28.28322],[-16.90151,28.28277],[-16.90239,28.32793],[-16.92782,28.32758]],[[-15.85374,27.90089],[-15.8542,27.99018],[-15.82895,27.99066],[-15.82911,28.03558],[-15.7783,28.03632],[-15.75328,28.08143],[-15.72788,28.08157],[-15.72826,28.17186],[-15.49897,28.1728],[-15.49874,28.15041],[-15.44978,28.15075],[-15.45016,28.19614],[-15.39728,28.19614],[-15.39644,28.03836],[-15.37103,28.03802],[-15.37065,28.01532],[-15.34578,28.01532],[-15.34548,27.92544],[-15.3708,27.92524],[-15.37057,27.83521],[-15.39598,27.83474],[-15.421,27.78797],[-15.47181,27.78939],[-15.47188,27.76665],[-15.52277,27.76678],[-15.54771,27.72161],[-15.62361,27.72134],[-15.62415,27.74199],[-15.70075,27.74335],[-15.80167,27.81105],[-15.85374,27.90089]],[[-14.52156,28.04678],[-14.52244,28.11841],[-14.41575,28.11561],[-14.21688,28.22788],[-14.21537,28.33903],[-14.16417,28.45283],[-14.11151,28.4748],[-14.03358,28.72267],[-13.95652,28.74494],[-13.95617,28.76659],[-13.82902,28.76643],[-13.82896,28.78798],[-13.80007,28.78793],[-13.8013,28.71899],[-13.82757,28.71935],[-13.82786,28.6518],[-13.80258,28.6519],[-13.80339,28.53842],[-13.82885,28.53847],[-13.83151,28.39702],[-13.91582,28.22414],[-13.98564,28.22357],[-14.03696,28.17958],[-14.13871,28.17999],[-14.13866,28.15791],[-14.21537,28.15781],[-14.21472,28.11189],[-14.29132,28.04524],[-14.33197,28.03687],[-14.44578,28.04698],[-14.44666,28.0658],[-14.49628,28.06826],[-14.49593,28.04585],[-14.52156,28.04678]],[[-13.80066,28.84566],[-13.80093,28.82311],[-13.77569,28.82305],[-13.69729,28.88982],[-13.69729,28.91277],[-13.60725,28.9118],[-13.43886,29.00024],[-13.43746,29.13513],[-13.4117,29.13499],[-13.41056,29.22298],[-13.45928,29.25559],[-13.45974,29.2942],[-13.50913,29.29456],[-13.51006,29.31635],[-13.56354,29.31729],[-13.56406,29.27138],[-13.53892,29.2712],[-13.53897,29.25004],[-13.56613,29.25013],[-13.5666,29.203],[-13.51565,29.20223],[-13.51565,29.18206],[-13.5398,29.18278],[-13.54089,29.13753],[-13.65782,29.13685],[-13.71322,29.09351],[-13.76634,29.09345],[-13.85025,29.01659],[-13.85182,28.98343],[-13.85244,28.91486],[-13.90131,28.89245],[-13.9024,28.84698],[-13.80066,28.84566]],[[1.64799,38.99907],[1.73217,38.99936],[1.73147,39.04417],[1.64895,39.04319],[1.64816,39.12764],[1.39486,39.12657],[1.39544,39.08642],[1.22811,39.08526],[1.22911,39.0029],[1.14487,39.0018],[1.14528,38.832],[1.31136,38.83316],[1.31219,38.79065],[1.39469,38.79162],[1.39519,38.75296],[1.31128,38.75193],[1.31259,38.62388],[1.6489,38.62511],[1.64807,38.71115],[1.58456,38.71012],[1.58116,38.70054],[1.54915,38.70028],[1.51972,38.70921],[1.50355,38.72532],[1.48133,38.91551],[1.55189,38.92544],[1.56673,38.95666],[1.64874,38.95833],[1.64799,38.99907]],[[2.54507,39.41667],[2.43933,39.41611],[2.43871,39.48469],[2.43902,39.49934],[2.31223,39.49934],[2.31192,39.54179],[2.22907,39.541],[2.22835,39.62606],[2.34601,39.62709],[2.92704,39.96016],[3.14566,39.96005],[3.14608,40.00198],[3.23139,40.00198],[3.23129,39.83292],[3.14823,39.83316],[3.14844,39.79357],[3.48148,39.79318],[3.48035,39.5959],[3.31506,39.47846],[3.31462,39.37855],[3.08302,39.24994],[2.97986,39.25015],[2.97904,39.3335],[2.72874,39.33342],[2.72885,39.45814],[2.64569,39.45774],[2.64538,39.49966],[2.54528,39.49942],[2.54507,39.41667]],[[3.81204,40.04344],[3.72908,40.0438],[3.72862,39.95842],[3.81266,39.9576],[3.81228,39.91644],[3.9609,39.91598],[4.19381,39.79131],[4.31503,39.79058],[4.31599,39.83293],[4.39874,39.83204],[4.39737,39.91858],[4.3158,39.91933],[4.31619,40.0434],[4.2319,40.04436],[4.23248,40.08478],[4.14915,40.08611],[4.14906,40.12552],[4.0628,40.12722],[4.06242,40.08499],[3.81287,40.08529],[3.81204,40.04344]],[[-8.89106,41.82289],[-9.1092,42.57511],[-9.03655,42.73066],[-9.08834,42.72696],[-9.14661,42.77503],[-9.21855,42.90163],[-9.2761,42.86051],[-9.30991,42.93113],[-9.27898,42.9822],[-9.30991,43.06004],[-9.25236,43.10417],[-9.2315,43.17032],[-9.14733,43.21018],[-9.06748,43.19916],[-9.03367,43.24267],[-8.99842,43.24477],[-8.99986,43.29558],[-8.93727,43.30553],[-8.92936,43.32699],[-8.8639,43.32908],[-8.87613,43.37407],[-8.82217,43.37354],[-8.78548,43.31914],[-8.70635,43.305],[-8.60996,43.3296],[-8.55097,43.32332],[-8.52435,43.3364],[-8.52507,43.36465],[-8.45745,43.39184],[-8.36105,43.41118],[-8.36033,43.46342],[-8.33444,43.57974],[-8.27761,43.57088],[-8.06467,43.72392],[-7.99921,43.7234],[-7.9172,43.78264],[-7.85605,43.79146],[-7.83591,43.73743],[-7.66284,43.80982],[-7.31889,43.67827],[-7.19975,43.58308],[-6.24882,43.6075],[-6.12293,43.57901],[-5.85204,43.6799],[-5.60363,43.57087],[-5.28553,43.56191],[-5.17875,43.49916],[-4.90899,43.48367],[-4.61562,43.4192],[-4.18399,43.42492],[-3.80295,43.51954],[-3.74,43.48693],[-3.56128,43.54236],[-3.1083,43.38163],[-2.93857,43.46246],[-2.74524,43.47551],[-2.30462,43.31706],[-1.9854,43.3563],[-1.85528,43.39725],[-1.7698,43.39644],[-1.77005,43.37605],[-1.71005,43.37569],[-1.71135,43.33125],[-1.72259,43.31318],[-1.68904,43.31291],[-1.68811,43.33413],[-1.64467,43.33372],[-1.64498,43.31332],[-1.60299,43.31295],[-1.60344,43.29266],[-1.56359,43.29212],[-1.56305,43.31338],[-1.47799,43.31284],[-1.36677,43.27614],[-1.35688,43.23815],[-1.37037,43.1713],[-1.44231,43.08336],[-1.41983,43.06036],[-1.37307,43.05117],[-1.36407,43.11159],[-1.30203,43.13522],[-1.23549,43.13325],[-1.27955,43.07744],[-1.19232,43.06496],[-1.00619,43.00778],[-0.94234,42.9749],[-0.7562,42.98213],[-0.71484,42.96108],[-0.69685,42.90314],[-0.55118,42.82207],[-0.50442,42.84845],[-0.42889,42.82009],[-0.31648,42.86558],[-0.14563,42.81086],[-0.03143,42.71249],[0.18618,42.7541],[0.30218,42.71777],[0.36422,42.74287],[0.44875,42.71447],[0.62769,42.7224],[0.64118,42.85767],[0.71492,42.88272],[0.9676,42.81811],[1.10878,42.79898],[1.17532,42.73429],[1.36326,42.74155],[1.41137,42.70939],[1.48061,42.71034],[1.4813,42.50107],[1.64436,42.50203],[1.64328,42.54245],[1.73041,42.54342],[1.73164,42.50118],[2.06386,42.50164],[2.06456,42.45902],[2.39693,42.45994],[2.39768,42.41784],[2.48048,42.41797],[2.48098,42.37594],[2.64479,42.37626],[2.64448,42.45924],[2.81133,42.45961],[2.81126,42.50104],[3.06388,42.50085],[3.06388,42.45915],[3.23078,42.45934],[3.23049,42.37644],[3.31415,42.37604],[3.31412,42.33399],[3.39785,42.33404],[3.39739,42.29009],[3.31389,42.29084],[3.31397,42.20702],[3.14759,42.2073],[3.14759,42.12606],[3.23055,42.126],[3.24668,41.95294],[3.19452,41.85589],[3.06054,41.76474],[2.78358,41.63718],[2.26293,41.42716],[2.16492,41.29893],[1.86008,41.22322],[1.3763,41.11627],[1.17937,41.04646],[1.08585,41.04849],[0.75854,40.81956],[0.9114,40.73376],[0.87813,40.67514],[0.66502,40.53587],[0.55801,40.55022],[0.43392,40.37576],[0.26756,40.19192],[0.16415,40.06472],[0.07513,40.01447],[0.01039,39.89522],[-0.09392,39.81169],[-0.18474,39.63117],[-0.29085,39.50363],[-0.28636,39.33343],[-0.18564,39.17746],[-0.21352,39.15585],[-0.11101,38.97222],[0.00949,38.88268],[0.12189,38.87218],[0.23429,38.79864],[0.25587,38.72642],[0.09581,38.61338],[-0.0022,38.60706],[-0.05705,38.52691],[-0.27197,38.47624],[-0.37987,38.39312],[-0.38347,38.33813],[-0.45091,38.33108],[-0.50487,38.28309],[-0.48238,38.19481],[-0.42933,38.16583],[-0.45451,38.14886],[-0.584,38.17219],[-0.61367,38.11986],[-0.63705,37.96122],[-0.68111,37.94562],[-0.73237,37.88107],[-0.72158,37.78306],[-0.68831,37.734],[-0.66415,37.62315],[-0.71939,37.58784],[-0.91963,37.53758],[-1.11071,37.51641],[-1.33832,37.52867],[-1.44089,37.39037],[-1.6767,37.27652],[-1.85408,36.91229],[-2.06835,36.69291],[-2.21588,36.66192],[-2.37219,36.78018],[-2.68129,36.65911],[-2.92015,36.66756],[-3.09402,36.71263],[-3.46108,36.65488],[-3.72804,36.69291],[-4.37435,36.66333],[-4.65712,36.44042],[-4.9188,36.45313],[-5.16995,36.35135],[-5.28411,36.19702],[-5.26809,36.12418],[-5.35248,36.12247],[-5.35161,36.04014],[-5.43658,36.03889],[-5.43532,36.00344],[-5.68886,36.00365],[-5.68996,36.04053],[-5.85506,36.03856],[-5.85668,36.12421],[-5.93848,36.12215],[-5.94003,36.16556],[-5.99834,36.1645],[-6.03573,36.1781],[-6.07752,36.22241],[-6.15061,36.28646],[-6.23154,36.37701],[-6.33585,36.53106],[-6.32146,36.58163],[-6.40419,36.6235],[-6.47433,36.74897],[-6.41588,36.79939],[-6.49052,36.91738],[-6.62989,37.0194],[-6.87448,37.10838],[-7.04264,37.18507],[-7.26474,37.18435],[-7.37535,37.15354],[-7.40832,37.16822],[-7.42029,37.21183],[-7.42492,37.23505],[-7.43805,37.2452],[-7.44597,37.33261],[-7.4481,37.39094],[-7.46963,37.40758],[-7.4647,37.45305],[-7.50197,37.51641],[-7.51916,37.52292],[-7.52196,37.57237],[-7.45013,37.66958],[-7.4249,37.75992],[-7.31666,37.83997],[-7.26833,37.98895],[-7.15368,38.01552],[-7.11771,38.05536],[-7.0143,38.02438],[-6.99632,38.10756],[-6.96147,38.20125],[-7.08062,38.15708],[-7.34027,38.44024],[-7.26383,38.73807],[-7.04352,38.87297],[-7.06151,38.90796],[-6.96934,39.01983],[-7.00081,39.08879],[-7.15368,39.09577],[-7.15255,39.16029],[-7.24472,39.19689],[-7.25596,39.28133],[-7.33689,39.35351],[-7.3279,39.45599],[-7.51449,39.58865],[-7.55271,39.67954],[-7.05027,39.67522],[-6.99519,39.81954],[-6.92213,39.87909],[-6.88616,40.02299],[-7.04128,40.13479],[-7.01767,40.26615],[-6.8086,40.34501],[-6.86818,40.44516],[-6.85356,40.60664],[-6.83783,40.87576],[-6.9536,41.03704],[-6.80186,41.03959],[-6.76814,41.13871],[-6.64112,41.26556],[-6.56244,41.26303],[-6.21737,41.5791],[-6.31628,41.64465],[-6.51523,41.64129],[-6.58717,41.68832],[-6.54783,41.85597],[-6.62988,41.91121],[-7.13345,41.94048],[-7.16829,41.87188],[-7.42569,41.78477],[-7.95398,41.84593],[-8.13045,41.78058],[-8.25185,41.90786],[-8.12933,42.03488],[-8.24848,42.1008],[-8.36762,42.05575],[-8.60704,42.03405],[-8.89106,41.82289]]]},{id:"Chorzow-buildings",name:"Chorzów: Buildings",type:"wms",template:"http://e-odgik.chorzow.eu/services/wms/wms_funkcje_bud/MapServer/WMSServer?FORMAT=image/png&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=3,2,1,8,7,6&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",polygon:[[[18.94562,50.31836],[18.94349,50.32385],[18.95466,50.32599],[18.96426,50.33307],[18.96521,50.33777],[18.98692,50.33621],[18.98468,50.32501],[18.99777,50.32204],[18.99686,50.31716],[18.98774,50.31736],[18.98695,50.30989],[18.99736,50.30031],[18.99744,50.29722],[19.00546,50.29548],[19.0073,50.28342],[19.00574,50.27871],[18.99236,50.27091],[18.96792,50.28661],[18.96215,50.27972],[18.96169,50.27337],[18.95824,50.27291],[18.95492,50.26193],[18.96014,50.24927],[18.95672,50.2452],[18.95555,50.23891],[18.94132,50.243],[18.93475,50.25314],[18.93324,50.26032],[18.93262,50.26588],[18.9296,50.26774],[18.92976,50.27131],[18.92669,50.27289],[18.92632,50.27623],[18.93071,50.27619],[18.93437,50.28729],[18.92383,50.29533],[18.92635,50.29986],[18.91905,50.30212],[18.91955,50.30576],[18.92463,50.31192],[18.9262,50.31883],[18.94562,50.31836]]],terms_text:"Urząd Miasta Chorzowa"},{id:"South_Africa-CapeTown-Aerial-2013",name:"City of Cape Town 2013 Aerial",type:"tms",template:"https://{switch:a,b,c}.coct.aerial.openstreetmap.org.za/layer/za_coct_aerial_2013/{zoom}/{x}/{y}.jpg",endDate:"2015-01-01T00:00:00.000Z",startDate:"2013-01-01T00:00:00.000Z",zoomExtent:[1,21],polygon:[[[18.44866,-33.89362],[18.44859,-33.90264],[18.4702,-33.90277],[18.48139,-33.84724],[18.44925,-33.80107],[18.42815,-33.73564],[18.43914,-33.71772],[18.40719,-33.65899],[18.33224,-33.57752],[18.33245,-33.55045],[18.354,-33.55059],[18.35425,-33.5236],[18.36524,-33.52366],[18.36503,-33.5148],[18.37601,-33.51477],[18.37605,-33.5058],[18.42966,-33.50594],[18.4297,-33.48785],[18.44049,-33.48789],[18.4406,-33.46988],[18.49437,-33.4701],[18.49433,-33.47916],[18.51583,-33.47917],[18.51574,-33.48819],[18.52647,-33.4883],[18.52632,-33.52435],[18.54793,-33.52443],[18.54795,-33.51539],[18.56937,-33.5155],[18.56937,-33.52448],[18.58012,-33.52453],[18.58007,-33.5426],[18.59078,-33.5426],[18.59074,-33.56064],[18.57995,-33.56053],[18.57988,-33.56962],[18.5907,-33.56962],[18.59065,-33.57868],[18.62301,-33.57873],[18.62292,-33.58773],[18.66597,-33.58789],[18.66593,-33.61493],[18.67672,-33.61497],[18.67658,-33.65103],[18.6873,-33.65102],[18.68734,-33.66004],[18.69807,-33.66009],[18.69807,-33.66907],[18.75204,-33.66925],[18.75208,-33.64219],[18.77364,-33.64225],[18.77371,-33.63319],[18.82746,-33.6333],[18.82752,-33.6603],[18.81667,-33.66029],[18.8166,-33.67832],[18.80581,-33.67831],[18.80581,-33.70539],[18.8274,-33.70544],[18.82733,-33.72347],[18.83812,-33.72343],[18.83804,-33.74139],[18.81652,-33.74137],[18.81637,-33.79551],[18.80559,-33.79551],[18.80551,-33.81357],[18.79476,-33.81355],[18.79472,-33.83154],[18.77311,-33.83152],[18.77313,-33.84052],[18.76236,-33.84052],[18.76227,-33.90359],[18.75146,-33.90352],[18.75108,-33.98478],[18.76191,-33.9848],[18.76178,-34.02988],[18.7726,-34.0299],[18.77258,-34.03891],[18.79403,-34.03894],[18.79388,-34.0407],[18.79845,-34.04119],[18.80324,-34.04118],[18.80341,-34.03892],[18.81594,-34.03897],[18.81634,-34.02993],[18.83798,-34.03165],[18.838,-34.03],[18.84842,-34.03001],[18.84847,-34.02185],[18.85993,-34.02347],[18.85986,-34.02101],[18.86827,-34.02208],[18.86819,-34.02117],[18.88546,-34.02343],[18.88518,-34.02132],[18.90252,-34.02103],[18.90258,-34.012],[18.91342,-34.012],[18.91348,-33.99396],[18.94588,-33.99403],[18.94586,-34.0031],[18.96743,-34.003],[18.96747,-34.01208],[18.97822,-34.01208],[18.97833,-34.02114],[18.98914,-34.02114],[18.98916,-34.03913],[19.00002,-34.03913],[19.00002,-34.05718],[19.01084,-34.05725],[19.01079,-34.08414],[19,-34.08413],[19.00002,-34.0932],[18.98915,-34.09317],[18.98918,-34.1022],[18.97832,-34.10218],[18.97832,-34.11123],[18.9675,-34.11121],[18.96749,-34.12925],[18.9566,-34.12924],[18.95656,-34.13824],[18.96742,-34.13831],[18.96742,-34.14732],[18.98918,-34.1473],[18.98918,-34.1653],[18.97827,-34.16529],[18.97832,-34.17429],[18.96742,-34.17427],[18.96746,-34.1833],[18.95656,-34.18332],[18.95656,-34.19236],[18.94574,-34.19232],[18.9457,-34.20132],[18.93487,-34.20137],[18.93489,-34.21933],[18.90236,-34.21935],[18.90176,-34.23626],[18.88784,-34.23735],[18.88942,-34.25541],[18.88059,-34.25534],[18.87927,-34.26443],[18.86969,-34.26441],[18.86971,-34.27344],[18.83714,-34.27342],[18.83712,-34.26438],[18.84802,-34.2644],[18.84803,-34.23739],[18.81549,-34.21028],[18.81565,-34.17413],[18.85488,-34.15627],[18.76176,-34.08405],[18.65337,-34.07748],[18.47974,-34.11012],[18.44637,-34.13423],[18.44445,-34.16409],[18.436,-34.16405],[18.43597,-34.18202],[18.44681,-34.18211],[18.44673,-34.19111],[18.46593,-34.19121],[18.48662,-34.24539],[18.47889,-34.25437],[18.486,-34.25437],[18.46771,-34.29941],[18.48922,-34.34458],[18.50011,-34.34458],[18.49992,-34.36262],[18.46743,-34.36251],[18.46737,-34.35349],[18.3916,-34.31707],[18.39177,-34.29002],[18.37016,-34.28087],[18.37068,-34.21789],[18.34923,-34.18162],[18.32747,-34.18149],[18.32767,-34.16346],[18.31187,-34.15438],[18.3114,-34.14353],[18.32367,-34.13469],[18.34993,-34.10421],[18.33932,-34.08828],[18.36125,-34.05972],[18.35505,-34.05538],[18.34275,-34.06433],[18.32,-34.06443],[18.29607,-34.04513],[18.30682,-34.02526],[18.32877,-34.0192],[18.32892,-34.00125],[18.33974,-34.00127],[18.3398,-33.98663],[18.36287,-33.97351],[18.36381,-33.92925],[18.37262,-33.92927],[18.37284,-33.91776],[18.39773,-33.89335],[18.44866,-33.89362]]],terms_url:"https://www.capetown.gov.za",terms_text:"City of Cape Town Aerial - OPENSTREETMAP USE ONLY",description:"OpenStreetMap use only. City of Cape Town Aerial ortho-photography of the municipal area. 12cm ground sample distance"},{id:"South_Africa-CapeTown-Aerial",name:"City of Cape Town 2015 Aerial",type:"tms",template:"https://{switch:a,b,c}.coct.aerial.openstreetmap.org.za/layer/za_coct_aerial_2015/{zoom}/{x}/{y}.jpg",endDate:"2016-01-01T00:00:00.000Z",startDate:"2015-01-01T00:00:00.000Z",zoomExtent:[1,21],polygon:[[[18.44866,-33.89362],[18.44859,-33.90264],[18.4702,-33.90277],[18.48139,-33.84724],[18.44925,-33.80107],[18.42815,-33.73564],[18.43914,-33.71772],[18.40719,-33.65899],[18.33224,-33.57752],[18.33245,-33.55045],[18.354,-33.55059],[18.35425,-33.5236],[18.36524,-33.52366],[18.36503,-33.5148],[18.37601,-33.51477],[18.37605,-33.5058],[18.42966,-33.50594],[18.4297,-33.48785],[18.44049,-33.48789],[18.4406,-33.46988],[18.49437,-33.4701],[18.49433,-33.47916],[18.51583,-33.47917],[18.51574,-33.48819],[18.52647,-33.4883],[18.52632,-33.52435],[18.54793,-33.52443],[18.54795,-33.51539],[18.56937,-33.5155],[18.56937,-33.52448],[18.58012,-33.52453],[18.58007,-33.5426],[18.59078,-33.5426],[18.59074,-33.56064],[18.57995,-33.56053],[18.57988,-33.56962],[18.5907,-33.56962],[18.59065,-33.57868],[18.62301,-33.57873],[18.62292,-33.58773],[18.66597,-33.58789],[18.66593,-33.61493],[18.67672,-33.61497],[18.67658,-33.65103],[18.6873,-33.65102],[18.68734,-33.66004],[18.69807,-33.66009],[18.69807,-33.66907],[18.75204,-33.66925],[18.75208,-33.64219],[18.77364,-33.64225],[18.77371,-33.63319],[18.82746,-33.6333],[18.82752,-33.6603],[18.81667,-33.66029],[18.8166,-33.67832],[18.80581,-33.67831],[18.80581,-33.70539],[18.8274,-33.70544],[18.82733,-33.72347],[18.83812,-33.72343],[18.83804,-33.74139],[18.81652,-33.74137],[18.81637,-33.79551],[18.80559,-33.79551],[18.80551,-33.81357],[18.79476,-33.81355],[18.79472,-33.83154],[18.77311,-33.83152],[18.77313,-33.84052],[18.76236,-33.84052],[18.76227,-33.90359],[18.75146,-33.90352],[18.75108,-33.98478],[18.76191,-33.9848],[18.76178,-34.02988],[18.7726,-34.0299],[18.77258,-34.03891],[18.79403,-34.03894],[18.79388,-34.0407],[18.79845,-34.04119],[18.80324,-34.04118],[18.80341,-34.03892],[18.81594,-34.03897],[18.81634,-34.02993],[18.83798,-34.03165],[18.838,-34.03],[18.84842,-34.03001],[18.84847,-34.02185],[18.85993,-34.02347],[18.85986,-34.02101],[18.86827,-34.02208],[18.86819,-34.02117],[18.88546,-34.02343],[18.88518,-34.02132],[18.90252,-34.02103],[18.90258,-34.012],[18.91342,-34.012],[18.91348,-33.99396],[18.94588,-33.99403],[18.94586,-34.0031],[18.96743,-34.003],[18.96747,-34.01208],[18.97822,-34.01208],[18.97833,-34.02114],[18.98914,-34.02114],[18.98916,-34.03913],[19.00002,-34.03913],[19.00002,-34.05718],[19.01084,-34.05725],[19.01079,-34.08414],[19,-34.08413],[19.00002,-34.0932],[18.98915,-34.09317],[18.98918,-34.1022],[18.97832,-34.10218],[18.97832,-34.11123],[18.9675,-34.11121],[18.96749,-34.12925],[18.9566,-34.12924],[18.95656,-34.13824],[18.96742,-34.13831],[18.96742,-34.14732],[18.98918,-34.1473],[18.98918,-34.1653],[18.97827,-34.16529],[18.97832,-34.17429],[18.96742,-34.17427],[18.96746,-34.1833],[18.95656,-34.18332],[18.95656,-34.19236],[18.94574,-34.19232],[18.9457,-34.20132],[18.93487,-34.20137],[18.93489,-34.21933],[18.90236,-34.21935],[18.90176,-34.23626],[18.88784,-34.23735],[18.88942,-34.25541],[18.88059,-34.25534],[18.87927,-34.26443],[18.86969,-34.26441],[18.86971,-34.27344],[18.83714,-34.27342],[18.83712,-34.26438],[18.84802,-34.2644],[18.84803,-34.23739],[18.81549,-34.21028],[18.81565,-34.17413],[18.85488,-34.15627],[18.76176,-34.08405],[18.65337,-34.07748],[18.47974,-34.11012],[18.44637,-34.13423],[18.44445,-34.16409],[18.436,-34.16405],[18.43597,-34.18202],[18.44681,-34.18211],[18.44673,-34.19111],[18.46593,-34.19121],[18.48662,-34.24539],[18.47889,-34.25437],[18.486,-34.25437],[18.46771,-34.29941],[18.48922,-34.34458],[18.50011,-34.34458],[18.49992,-34.36262],[18.46743,-34.36251],[18.46737,-34.35349],[18.3916,-34.31707],[18.39177,-34.29002],[18.37016,-34.28087],[18.37068,-34.21789],[18.34923,-34.18162],[18.32747,-34.18149],[18.32767,-34.16346],[18.31187,-34.15438],[18.3114,-34.14353],[18.32367,-34.13469],[18.34993,-34.10421],[18.33932,-34.08828],[18.36125,-34.05972],[18.35505,-34.05538],[18.34275,-34.06433],[18.32,-34.06443],[18.29607,-34.04513],[18.30682,-34.02526],[18.32877,-34.0192],[18.32892,-34.00125],[18.33974,-34.00127],[18.3398,-33.98663],[18.36287,-33.97351],[18.36381,-33.92925],[18.37262,-33.92927],[18.37284,-33.91776],[18.39773,-33.89335],[18.44866,-33.89362]]],terms_url:"https://www.capetown.gov.za",terms_text:"City of Cape Town Aerial - OPENSTREETMAP USE ONLY",best:true,description:"OpenStreetMap use only. City of Cape Town Aerial ortho-photography of the municipal area. 8cm ground sample distance"},{id:"City_of_Melbourne_May_2018",name:"City of Melbourne",type:"tms",template:"https://{switch:a,b,c,d}.tiles.mapbox.com/v4/openstreetmapau.gdbhzo3g/{zoom}/{x}/{y}.jpg?access_token=pk.eyJ1Ijoib3BlbnN0cmVldG1hcGF1IiwiYSI6ImNqbWl3bXZ6aDA0MTkzd21xdnV1d2k0azEifQ.HYkMOqH_E2fYd1b0oXRe6w",endDate:"2018-05-01T00:00:00.000Z",startDate:"2018-05-01T00:00:00.000Z",zoomExtent:[10,22],polygon:[[[144.9146,-37.79929],[144.9139,-37.79888],[144.91276,-37.79858],[144.91138,-37.79876],[144.90975,-37.79976],[144.90604,-37.80641],[144.90428,-37.81261],[144.9042,-37.81421],[144.90561,-37.82089],[144.90426,-37.82245],[144.89902,-37.82728],[144.89686,-37.83007],[144.89598,-37.83355],[144.89602,-37.83873],[144.89703,-37.84192],[144.90113,-37.84692],[144.9052,-37.85019],[144.90684,-37.85056],[144.90802,-37.8502],[144.9084,-37.84948],[144.90701,-37.84771],[144.90763,-37.84693],[144.90448,-37.84165],[144.90529,-37.84139],[144.90806,-37.8458],[144.91181,-37.8502],[144.91274,-37.85039],[144.91548,-37.84892],[144.91553,-37.84814],[144.91396,-37.84594],[144.91619,-37.84451],[144.91396,-37.84131],[144.91634,-37.83985],[144.91651,-37.83841],[144.91508,-37.83441],[144.91829,-37.83307],[144.91947,-37.83258],[144.92102,-37.83087],[144.92186,-37.83002],[144.92297,-37.8295],[144.92937,-37.82816],[144.93529,-37.82702],[144.94112,-37.82692],[144.94181,-37.82679],[144.94585,-37.8275],[144.94707,-37.82794],[144.94784,-37.82779],[144.95786,-37.82953],[144.95921,-37.82941],[144.9613,-37.82902],[144.96254,-37.82972],[144.96477,-37.83184],[144.96565,-37.83229],[144.96621,-37.83231],[144.97033,-37.83121],[144.97052,-37.83228],[144.97106,-37.83307],[144.97346,-37.83507],[144.97428,-37.83595],[144.97943,-37.85002],[144.97968,-37.85081],[144.98061,-37.85117],[144.98425,-37.85151],[144.98483,-37.85139],[144.98537,-37.85085],[144.98923,-37.83109],[144.98891,-37.83038],[144.99226,-37.81041],[144.99243,-37.80983],[144.99187,-37.80895],[144.97449,-37.80714],[144.97683,-37.79327],[144.97674,-37.7928],[144.97642,-37.79232],[144.97589,-37.79219],[144.96977,-37.79146],[144.97076,-37.78566],[144.97041,-37.785],[144.9699,-37.78477],[144.96488,-37.7842],[144.96511,-37.78252],[144.96507,-37.78198],[144.96421,-37.78142],[144.96398,-37.78082],[144.96389,-37.77964],[144.96355,-37.7785],[144.96267,-37.77779],[144.96136,-37.77724],[144.93919,-37.77456],[144.93836,-37.77458],[144.93801,-37.77485],[144.93728,-37.77601],[144.93658,-37.77692],[144.93613,-37.77728],[144.93598,-37.77791],[144.93778,-37.78142],[144.93827,-37.78421],[144.93911,-37.78654],[144.93885,-37.78672],[144.93881,-37.7873],[144.93773,-37.78801],[144.93216,-37.7874],[144.93123,-37.78783],[144.93076,-37.78786],[144.93003,-37.78735],[144.92181,-37.78642],[144.91488,-37.77938],[144.91428,-37.77865],[144.9137,-37.77853],[144.91293,-37.77855],[144.90819,-37.78135],[144.90722,-37.78206],[144.90572,-37.7845],[144.90529,-37.78637],[144.90428,-37.78657],[144.90375,-37.78718],[144.90319,-37.78827],[144.90201,-37.78883],[144.90143,-37.78964],[144.90188,-37.79103],[144.90257,-37.79198],[144.90415,-37.79288],[144.90645,-37.79383],[144.90814,-37.79456],[144.91046,-37.79519],[144.9127,-37.79605],[144.91429,-37.79695],[144.91525,-37.79783],[144.91539,-37.79815],[144.91531,-37.79848],[144.91518,-37.79872],[144.9148,-37.79914],[144.9146,-37.79929]]],terms_url:"https://data.melbourne.vic.gov.au/Property-Planning/2018-Aerial-Imagery-True-Ortho-/qa5h-sfgh",terms_text:"City of Melbourne",best:true,icon:"https://www.melbourne.vic.gov.au/_catalogs/masterpage/android-icon.png"},{id:"Zuerich-aerial_2011",name:"City of Zürich Orthophoto 2011",type:"wms",template:"https://www.gis.stadt-zuerich.ch/maps/services/wms/WMS-ZH-STZH-OGD/MapServer/WmsServer?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=Luftbild_2011&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",endDate:"2011-01-01T00:00:00.000Z",startDate:"2011-01-01T00:00:00.000Z",zoomExtent:[0,21],polygon:[[[8.44624,47.44143],[8.63178,47.43968],[8.62895,47.31377],[8.44381,47.31555],[8.44624,47.44143]]],terms_text:"Stadt Zürich Open Government Data"},{id:"Zuerich-overview",name:"City of Zürich Overview map (Steets, buildings, house numbers)",type:"wms",template:"https://www.gis.stadt-zuerich.ch/maps/services/wms/WMS-ZH-STZH-OGD/MapServer/WmsServer?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=Uebersichtsplan&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",zoomExtent:[0,21],polygon:[[[8.45788,47.44582],[8.57392,47.44477],[8.57362,47.43124],[8.60266,47.43096],[8.6023,47.41746],[8.6318,47.41716],[8.6295,47.33628],[8.57162,47.33678],[8.57152,47.32292],[8.54236,47.3236],[8.54212,47.31013],[8.48418,47.31062],[8.48478,47.33762],[8.45582,47.33787],[8.45609,47.35135],[8.42713,47.35161],[8.42864,47.43259],[8.45745,47.43231],[8.45788,47.44582]]],terms_text:"Stadt Zürich Open Government Data"},{id:"Czech_CUZK-KM",name:"Czech CUZK:KM",type:"wms",template:"https://wms.cuzk.cz/wms.asp?service=WMS&VERSION=1.1.1&REQUEST=GetMap&SRS={proj}&LAYERS=parcelni_cisla_i,obrazy_parcel_i,RST_KMD_I,hranice_parcel_i,DEF_BUDOVY,RST_KN_I,dalsi_p_mapy_i,prehledka_kat_prac,prehledka_kat_uz,prehledka_kraju-linie&FORMAT=image/png&transparent=TRUE&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[15.00637,49.01774],[15.15599,49.00138],[15.1909,48.94246],[15.31059,48.98829],[15.40535,48.9752],[15.54,48.91624],[15.71456,48.86706],[15.83425,48.88018],[15.9689,48.81782],[16.0886,48.74553],[16.39781,48.74553],[16.48758,48.81454],[16.6721,48.7784],[16.68208,48.73566],[16.90152,48.71263],[16.9464,48.6237],[17.11597,48.83752],[17.21072,48.88018],[17.40523,48.81782],[17.48004,48.85393],[17.52991,48.81782],[17.70446,48.86706],[17.81418,48.9359],[17.884,48.9359],[17.94385,49.02101],[18.06354,49.03409],[18.1184,49.09944],[18.1982,49.30473],[18.38771,49.33399],[18.57723,49.50917],[18.75677,49.49946],[18.84654,49.52536],[18.87646,49.57066],[18.79666,49.69341],[18.64206,49.70954],[18.5872,49.83515],[18.61214,49.88338],[18.56226,49.93477],[18.51239,49.90587],[18.36277,49.95403],[18.32786,49.92193],[18.26303,49.97328],[18.1184,50.00534],[18.06354,50.07581],[17.91392,49.97969],[17.77927,50.03098],[17.71444,50.12379],[17.60472,50.16534],[17.75932,50.21962],[17.73438,50.34391],[17.63963,50.28021],[17.38029,50.28021],[17.35037,50.34391],[17.28055,50.33754],[17.18579,50.40752],[16.90152,50.46152],[16.86661,50.41388],[16.96635,50.31844],[17.03617,50.23238],[16.83668,50.21962],[16.712,50.1046],[16.58233,50.15895],[16.56238,50.23876],[16.43272,50.33754],[16.35292,50.39163],[16.27811,50.39163],[16.20829,50.44565],[16.39781,50.53449],[16.44768,50.59785],[16.35292,50.6706],[16.23821,50.67692],[16.21827,50.63266],[16.1285,50.68324],[16.0487,50.60734],[15.98885,50.7022],[15.87415,50.68324],[15.82926,50.76533],[15.72952,50.74324],[15.45023,50.81577],[15.39039,50.77479],[15.38041,50.85987],[15.29563,50.88504],[15.29563,50.98876],[15.17095,51.02014],[14.99141,51.00131],[15.00637,50.88819],[14.84179,50.8756],[14.7969,50.82522],[14.63233,50.85672],[14.66225,50.93536],[14.57248,50.92278],[14.61238,50.98562],[14.49767,51.04837],[14.41788,51.02328],[14.30816,51.06717],[14.2533,51.00445],[14.40291,50.93221],[14.37299,50.89763],[14.24332,50.90706],[14.20841,50.84412],[14.03386,50.81262],[13.979,50.82522],[13.90419,50.79686],[13.87427,50.74009],[13.53514,50.7243],[13.53015,50.65796],[13.4703,50.61367],[13.39051,50.66428],[13.32567,50.58835],[13.25086,50.61051],[13.196,50.50595],[13.05137,50.52181],[12.96659,50.4107],[12.82695,50.47105],[12.70227,50.41388],[12.50777,50.40116],[12.34319,50.25471],[12.32324,50.18451],[12.24843,50.27384],[12.17362,50.33118],[12.09881,50.33436],[12.11876,50.25152],[12.22349,50.16534],[12.20354,50.12379],[12.50278,49.97328],[12.47784,49.93798],[12.54766,49.91551],[12.46787,49.80298],[12.40802,49.76111],[12.48283,49.68696],[12.5327,49.68696],[12.51774,49.62885],[12.60751,49.54155],[12.67234,49.43788],[12.81199,49.34699],[12.94664,49.34374],[13.23091,49.12882],[13.32567,49.10597],[13.43539,49.0439],[13.41544,48.99484],[13.50022,48.94901],[13.56506,48.98829],[13.68475,48.88346],[13.7446,48.90313],[13.82439,48.77511],[13.8992,48.77511],[14.05879,48.67642],[14.04383,48.63029],[14.14358,48.59072],[14.37299,48.56103],[14.48271,48.65007],[14.57747,48.60721],[14.62734,48.63359],[14.70713,48.58083],[14.74703,48.70276],[14.81187,48.73895],[14.81685,48.79483],[14.98642,48.76525],[15.00637,49.01774]]],overlay:true},{id:"Czech_CUZK-KM-tms",name:"Czech CUZK:KM tiles proxy",type:"tms",template:"https://osm-{switch:a,b,c}.zby.cz/tiles_cuzk.php/{zoom}/{x}/{y}.png",zoomExtent:[13,18],polygon:[[[15.00637,49.01774],[15.15599,49.00138],[15.1909,48.94246],[15.31059,48.98829],[15.40535,48.9752],[15.54,48.91624],[15.71456,48.86706],[15.83425,48.88018],[15.9689,48.81782],[16.0886,48.74553],[16.39781,48.74553],[16.48758,48.81454],[16.6721,48.7784],[16.68208,48.73566],[16.90152,48.71263],[16.9464,48.6237],[17.11597,48.83752],[17.21072,48.88018],[17.40523,48.81782],[17.48004,48.85393],[17.52991,48.81782],[17.70446,48.86706],[17.81418,48.9359],[17.884,48.9359],[17.94385,49.02101],[18.06354,49.03409],[18.1184,49.09944],[18.1982,49.30473],[18.38771,49.33399],[18.57723,49.50917],[18.75677,49.49946],[18.84654,49.52536],[18.87646,49.57066],[18.79666,49.69341],[18.64206,49.70954],[18.5872,49.83515],[18.61214,49.88338],[18.56226,49.93477],[18.51239,49.90587],[18.36277,49.95403],[18.32786,49.92193],[18.26303,49.97328],[18.1184,50.00534],[18.06354,50.07581],[17.91392,49.97969],[17.77927,50.03098],[17.71444,50.12379],[17.60472,50.16534],[17.75932,50.21962],[17.73438,50.34391],[17.63963,50.28021],[17.38029,50.28021],[17.35037,50.34391],[17.28055,50.33754],[17.18579,50.40752],[16.90152,50.46152],[16.86661,50.41388],[16.96635,50.31844],[17.03617,50.23238],[16.83668,50.21962],[16.712,50.1046],[16.58233,50.15895],[16.56238,50.23876],[16.43272,50.33754],[16.35292,50.39163],[16.27811,50.39163],[16.20829,50.44565],[16.39781,50.53449],[16.44768,50.59785],[16.35292,50.6706],[16.23821,50.67692],[16.21827,50.63266],[16.1285,50.68324],[16.0487,50.60734],[15.98885,50.7022],[15.87415,50.68324],[15.82926,50.76533],[15.72952,50.74324],[15.45023,50.81577],[15.39039,50.77479],[15.38041,50.85987],[15.29563,50.88504],[15.29563,50.98876],[15.17095,51.02014],[14.99141,51.00131],[15.00637,50.88819],[14.84179,50.8756],[14.7969,50.82522],[14.63233,50.85672],[14.66225,50.93536],[14.57248,50.92278],[14.61238,50.98562],[14.49767,51.04837],[14.41788,51.02328],[14.30816,51.06717],[14.2533,51.00445],[14.40291,50.93221],[14.37299,50.89763],[14.24332,50.90706],[14.20841,50.84412],[14.03386,50.81262],[13.979,50.82522],[13.90419,50.79686],[13.87427,50.74009],[13.53514,50.7243],[13.53015,50.65796],[13.4703,50.61367],[13.39051,50.66428],[13.32567,50.58835],[13.25086,50.61051],[13.196,50.50595],[13.05137,50.52181],[12.96659,50.4107],[12.82695,50.47105],[12.70227,50.41388],[12.50777,50.40116],[12.34319,50.25471],[12.32324,50.18451],[12.24843,50.27384],[12.17362,50.33118],[12.09881,50.33436],[12.11876,50.25152],[12.22349,50.16534],[12.20354,50.12379],[12.50278,49.97328],[12.47784,49.93798],[12.54766,49.91551],[12.46787,49.80298],[12.40802,49.76111],[12.48283,49.68696],[12.5327,49.68696],[12.51774,49.62885],[12.60751,49.54155],[12.67234,49.43788],[12.81199,49.34699],[12.94664,49.34374],[13.23091,49.12882],[13.32567,49.10597],[13.43539,49.0439],[13.41544,48.99484],[13.50022,48.94901],[13.56506,48.98829],[13.68475,48.88346],[13.7446,48.90313],[13.82439,48.77511],[13.8992,48.77511],[14.05879,48.67642],[14.04383,48.63029],[14.14358,48.59072],[14.37299,48.56103],[14.48271,48.65007],[14.57747,48.60721],[14.62734,48.63359],[14.70713,48.58083],[14.74703,48.70276],[14.81187,48.73895],[14.81685,48.79483],[14.98642,48.76525],[15.00637,49.01774]]],overlay:true},{id:"Czech_pLPIS",name:"Czech pLPIS",type:"wms",template:"https://eagri.cz/public/app/wms/plpis.fcgi?FORMAT=image/png&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=LPIS_FB4,LPIS_FB4_KOD&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}&TRANSPARENT=true",projection:"EPSG:4326",polygon:[[[15.00637,49.01774],[15.15599,49.00138],[15.1909,48.94246],[15.31059,48.98829],[15.40535,48.9752],[15.54,48.91624],[15.71456,48.86706],[15.83425,48.88018],[15.9689,48.81782],[16.0886,48.74553],[16.39781,48.74553],[16.48758,48.81454],[16.6721,48.7784],[16.68208,48.73566],[16.90152,48.71263],[16.9464,48.6237],[17.11597,48.83752],[17.21072,48.88018],[17.40523,48.81782],[17.48004,48.85393],[17.52991,48.81782],[17.70446,48.86706],[17.81418,48.9359],[17.884,48.9359],[17.94385,49.02101],[18.06354,49.03409],[18.1184,49.09944],[18.1982,49.30473],[18.38771,49.33399],[18.57723,49.50917],[18.75677,49.49946],[18.84654,49.52536],[18.87646,49.57066],[18.79666,49.69341],[18.64206,49.70954],[18.5872,49.83515],[18.61214,49.88338],[18.56226,49.93477],[18.51239,49.90587],[18.36277,49.95403],[18.32786,49.92193],[18.26303,49.97328],[18.1184,50.00534],[18.06354,50.07581],[17.91392,49.97969],[17.77927,50.03098],[17.71444,50.12379],[17.60472,50.16534],[17.75932,50.21962],[17.73438,50.34391],[17.63963,50.28021],[17.38029,50.28021],[17.35037,50.34391],[17.28055,50.33754],[17.18579,50.40752],[16.90152,50.46152],[16.86661,50.41388],[16.96635,50.31844],[17.03617,50.23238],[16.83668,50.21962],[16.712,50.1046],[16.58233,50.15895],[16.56238,50.23876],[16.43272,50.33754],[16.35292,50.39163],[16.27811,50.39163],[16.20829,50.44565],[16.39781,50.53449],[16.44768,50.59785],[16.35292,50.6706],[16.23821,50.67692],[16.21827,50.63266],[16.1285,50.68324],[16.0487,50.60734],[15.98885,50.7022],[15.87415,50.68324],[15.82926,50.76533],[15.72952,50.74324],[15.45023,50.81577],[15.39039,50.77479],[15.38041,50.85987],[15.29563,50.88504],[15.29563,50.98876],[15.17095,51.02014],[14.99141,51.00131],[15.00637,50.88819],[14.84179,50.8756],[14.7969,50.82522],[14.63233,50.85672],[14.66225,50.93536],[14.57248,50.92278],[14.61238,50.98562],[14.49767,51.04837],[14.41788,51.02328],[14.30816,51.06717],[14.2533,51.00445],[14.40291,50.93221],[14.37299,50.89763],[14.24332,50.90706],[14.20841,50.84412],[14.03386,50.81262],[13.979,50.82522],[13.90419,50.79686],[13.87427,50.74009],[13.53514,50.7243],[13.53015,50.65796],[13.4703,50.61367],[13.39051,50.66428],[13.32567,50.58835],[13.25086,50.61051],[13.196,50.50595],[13.05137,50.52181],[12.96659,50.4107],[12.82695,50.47105],[12.70227,50.41388],[12.50777,50.40116],[12.34319,50.25471],[12.32324,50.18451],[12.24843,50.27384],[12.17362,50.33118],[12.09881,50.33436],[12.11876,50.25152],[12.22349,50.16534],[12.20354,50.12379],[12.50278,49.97328],[12.47784,49.93798],[12.54766,49.91551],[12.46787,49.80298],[12.40802,49.76111],[12.48283,49.68696],[12.5327,49.68696],[12.51774,49.62885],[12.60751,49.54155],[12.67234,49.43788],[12.81199,49.34699],[12.94664,49.34374],[13.23091,49.12882],[13.32567,49.10597],[13.43539,49.0439],[13.41544,48.99484],[13.50022,48.94901],[13.56506,48.98829],[13.68475,48.88346],[13.7446,48.90313],[13.82439,48.77511],[13.8992,48.77511],[14.05879,48.67642],[14.04383,48.63029],[14.14358,48.59072],[14.37299,48.56103],[14.48271,48.65007],[14.57747,48.60721],[14.62734,48.63359],[14.70713,48.58083],[14.74703,48.70276],[14.81187,48.73895],[14.81685,48.79483],[14.98642,48.76525],[15.00637,49.01774]]]},{id:"Czech_RUIAN-budovy",name:"Czech RUIAN budovy",type:"tms",template:"https://tile.poloha.net/budovy/{zoom}/{x}/{y}.png",zoomExtent:[12,20],polygon:[[[15.00637,49.01774],[15.15599,49.00138],[15.1909,48.94246],[15.31059,48.98829],[15.40535,48.9752],[15.54,48.91624],[15.71456,48.86706],[15.83425,48.88018],[15.9689,48.81782],[16.0886,48.74553],[16.39781,48.74553],[16.48758,48.81454],[16.6721,48.7784],[16.68208,48.73566],[16.90152,48.71263],[16.9464,48.6237],[17.11597,48.83752],[17.21072,48.88018],[17.40523,48.81782],[17.48004,48.85393],[17.52991,48.81782],[17.70446,48.86706],[17.81418,48.9359],[17.884,48.9359],[17.94385,49.02101],[18.06354,49.03409],[18.1184,49.09944],[18.1982,49.30473],[18.38771,49.33399],[18.57723,49.50917],[18.75677,49.49946],[18.84654,49.52536],[18.87646,49.57066],[18.79666,49.69341],[18.64206,49.70954],[18.5872,49.83515],[18.61214,49.88338],[18.56226,49.93477],[18.51239,49.90587],[18.36277,49.95403],[18.32786,49.92193],[18.26303,49.97328],[18.1184,50.00534],[18.06354,50.07581],[17.91392,49.97969],[17.77927,50.03098],[17.71444,50.12379],[17.60472,50.16534],[17.75932,50.21962],[17.73438,50.34391],[17.63963,50.28021],[17.38029,50.28021],[17.35037,50.34391],[17.28055,50.33754],[17.18579,50.40752],[16.90152,50.46152],[16.86661,50.41388],[16.96635,50.31844],[17.03617,50.23238],[16.83668,50.21962],[16.712,50.1046],[16.58233,50.15895],[16.56238,50.23876],[16.43272,50.33754],[16.35292,50.39163],[16.27811,50.39163],[16.20829,50.44565],[16.39781,50.53449],[16.44768,50.59785],[16.35292,50.6706],[16.23821,50.67692],[16.21827,50.63266],[16.1285,50.68324],[16.0487,50.60734],[15.98885,50.7022],[15.87415,50.68324],[15.82926,50.76533],[15.72952,50.74324],[15.45023,50.81577],[15.39039,50.77479],[15.38041,50.85987],[15.29563,50.88504],[15.29563,50.98876],[15.17095,51.02014],[14.99141,51.00131],[15.00637,50.88819],[14.84179,50.8756],[14.7969,50.82522],[14.63233,50.85672],[14.66225,50.93536],[14.57248,50.92278],[14.61238,50.98562],[14.49767,51.04837],[14.41788,51.02328],[14.30816,51.06717],[14.2533,51.00445],[14.40291,50.93221],[14.37299,50.89763],[14.24332,50.90706],[14.20841,50.84412],[14.03386,50.81262],[13.979,50.82522],[13.90419,50.79686],[13.87427,50.74009],[13.53514,50.7243],[13.53015,50.65796],[13.4703,50.61367],[13.39051,50.66428],[13.32567,50.58835],[13.25086,50.61051],[13.196,50.50595],[13.05137,50.52181],[12.96659,50.4107],[12.82695,50.47105],[12.70227,50.41388],[12.50777,50.40116],[12.34319,50.25471],[12.32324,50.18451],[12.24843,50.27384],[12.17362,50.33118],[12.09881,50.33436],[12.11876,50.25152],[12.22349,50.16534],[12.20354,50.12379],[12.50278,49.97328],[12.47784,49.93798],[12.54766,49.91551],[12.46787,49.80298],[12.40802,49.76111],[12.48283,49.68696],[12.5327,49.68696],[12.51774,49.62885],[12.60751,49.54155],[12.67234,49.43788],[12.81199,49.34699],[12.94664,49.34374],[13.23091,49.12882],[13.32567,49.10597],[13.43539,49.0439],[13.41544,48.99484],[13.50022,48.94901],[13.56506,48.98829],[13.68475,48.88346],[13.7446,48.90313],[13.82439,48.77511],[13.8992,48.77511],[14.05879,48.67642],[14.04383,48.63029],[14.14358,48.59072],[14.37299,48.56103],[14.48271,48.65007],[14.57747,48.60721],[14.62734,48.63359],[14.70713,48.58083],[14.74703,48.70276],[14.81187,48.73895],[14.81685,48.79483],[14.98642,48.76525],[15.00637,49.01774]]],terms_url:"https://poloha.net/",terms_text:"Czech RUIAN"},{id:"Czech_RUIAN-parcely",name:"Czech RUIAN parcely",type:"tms",template:"https://tile.poloha.net/parcely/{zoom}/{x}/{y}.png",zoomExtent:[12,20],polygon:[[[15.00637,49.01774],[15.15599,49.00138],[15.1909,48.94246],[15.31059,48.98829],[15.40535,48.9752],[15.54,48.91624],[15.71456,48.86706],[15.83425,48.88018],[15.9689,48.81782],[16.0886,48.74553],[16.39781,48.74553],[16.48758,48.81454],[16.6721,48.7784],[16.68208,48.73566],[16.90152,48.71263],[16.9464,48.6237],[17.11597,48.83752],[17.21072,48.88018],[17.40523,48.81782],[17.48004,48.85393],[17.52991,48.81782],[17.70446,48.86706],[17.81418,48.9359],[17.884,48.9359],[17.94385,49.02101],[18.06354,49.03409],[18.1184,49.09944],[18.1982,49.30473],[18.38771,49.33399],[18.57723,49.50917],[18.75677,49.49946],[18.84654,49.52536],[18.87646,49.57066],[18.79666,49.69341],[18.64206,49.70954],[18.5872,49.83515],[18.61214,49.88338],[18.56226,49.93477],[18.51239,49.90587],[18.36277,49.95403],[18.32786,49.92193],[18.26303,49.97328],[18.1184,50.00534],[18.06354,50.07581],[17.91392,49.97969],[17.77927,50.03098],[17.71444,50.12379],[17.60472,50.16534],[17.75932,50.21962],[17.73438,50.34391],[17.63963,50.28021],[17.38029,50.28021],[17.35037,50.34391],[17.28055,50.33754],[17.18579,50.40752],[16.90152,50.46152],[16.86661,50.41388],[16.96635,50.31844],[17.03617,50.23238],[16.83668,50.21962],[16.712,50.1046],[16.58233,50.15895],[16.56238,50.23876],[16.43272,50.33754],[16.35292,50.39163],[16.27811,50.39163],[16.20829,50.44565],[16.39781,50.53449],[16.44768,50.59785],[16.35292,50.6706],[16.23821,50.67692],[16.21827,50.63266],[16.1285,50.68324],[16.0487,50.60734],[15.98885,50.7022],[15.87415,50.68324],[15.82926,50.76533],[15.72952,50.74324],[15.45023,50.81577],[15.39039,50.77479],[15.38041,50.85987],[15.29563,50.88504],[15.29563,50.98876],[15.17095,51.02014],[14.99141,51.00131],[15.00637,50.88819],[14.84179,50.8756],[14.7969,50.82522],[14.63233,50.85672],[14.66225,50.93536],[14.57248,50.92278],[14.61238,50.98562],[14.49767,51.04837],[14.41788,51.02328],[14.30816,51.06717],[14.2533,51.00445],[14.40291,50.93221],[14.37299,50.89763],[14.24332,50.90706],[14.20841,50.84412],[14.03386,50.81262],[13.979,50.82522],[13.90419,50.79686],[13.87427,50.74009],[13.53514,50.7243],[13.53015,50.65796],[13.4703,50.61367],[13.39051,50.66428],[13.32567,50.58835],[13.25086,50.61051],[13.196,50.50595],[13.05137,50.52181],[12.96659,50.4107],[12.82695,50.47105],[12.70227,50.41388],[12.50777,50.40116],[12.34319,50.25471],[12.32324,50.18451],[12.24843,50.27384],[12.17362,50.33118],[12.09881,50.33436],[12.11876,50.25152],[12.22349,50.16534],[12.20354,50.12379],[12.50278,49.97328],[12.47784,49.93798],[12.54766,49.91551],[12.46787,49.80298],[12.40802,49.76111],[12.48283,49.68696],[12.5327,49.68696],[12.51774,49.62885],[12.60751,49.54155],[12.67234,49.43788],[12.81199,49.34699],[12.94664,49.34374],[13.23091,49.12882],[13.32567,49.10597],[13.43539,49.0439],[13.41544,48.99484],[13.50022,48.94901],[13.56506,48.98829],[13.68475,48.88346],[13.7446,48.90313],[13.82439,48.77511],[13.8992,48.77511],[14.05879,48.67642],[14.04383,48.63029],[14.14358,48.59072],[14.37299,48.56103],[14.48271,48.65007],[14.57747,48.60721],[14.62734,48.63359],[14.70713,48.58083],[14.74703,48.70276],[14.81187,48.73895],[14.81685,48.79483],[14.98642,48.76525],[15.00637,49.01774]]],terms_url:"https://poloha.net/",terms_text:"Czech RUIAN"},{id:"Czestochowa-buildings",name:"Częstochowa: Buildings",type:"wms",template:"http://geoportal.czestochowa.um.gov.pl/isdp/scripts/isdp.dll/wms?FORMAT=image/png&transparent=true&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=ieg_budynek&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",polygon:[[[19.08183,50.8554],[19.0888,50.86563],[19.11082,50.86616],[19.10961,50.86092],[19.11709,50.85933],[19.11531,50.86283],[19.11997,50.86327],[19.1227,50.85452],[19.12938,50.85519],[19.12566,50.86165],[19.13364,50.86147],[19.14318,50.86815],[19.1498,50.87916],[19.16507,50.8794],[19.16816,50.88501],[19.17265,50.88477],[19.18346,50.87706],[19.18084,50.86562],[19.18711,50.84712],[19.19973,50.84395],[19.19637,50.83678],[19.19358,50.83357],[19.19454,50.83145],[19.20696,50.82985],[19.20838,50.82484],[19.21831,50.82571],[19.22564,50.82475],[19.23075,50.82509],[19.2308,50.82666],[19.23351,50.82683],[19.23303,50.82335],[19.21868,50.80115],[19.21753,50.79272],[19.22592,50.78822],[19.20889,50.77561],[19.19891,50.76355],[19.19521,50.75182],[19.19074,50.75211],[19.18245,50.7545],[19.16504,50.7535],[19.16417,50.75586],[19.14559,50.75805],[19.14282,50.75543],[19.13021,50.75786],[19.127,50.75314],[19.1216,50.75363],[19.12066,50.74981],[19.10348,50.75228],[19.09598,50.75201],[19.0956,50.74912],[19.09351,50.7488],[19.09285,50.75027],[19.08442,50.74986],[19.08473,50.74349],[19.08382,50.73741],[19.07878,50.73668],[19.07503,50.73465],[19.07284,50.73708],[19.07153,50.74042],[19.0685,50.74339],[19.06632,50.74233],[19.06392,50.74554],[19.06595,50.7466],[19.06548,50.7496],[19.06202,50.75041],[19.06018,50.74455],[19.04257,50.74466],[19.0333,50.74827],[19.01869,50.76252],[19.01554,50.77044],[19.01101,50.7718],[19.01353,50.77766],[19.01159,50.78077],[19.01081,50.78759],[19.01362,50.79262],[19.01972,50.79555],[19.01896,50.80703],[19.03439,50.80116],[19.03453,50.804],[19.02593,50.80731],[19.02308,50.81499],[19.03154,50.81614],[19.02909,50.82435],[19.03787,50.82584],[19.03921,50.84083],[19.04676,50.84934],[19.05993,50.8532],[19.06209,50.8596],[19.06492,50.86134],[19.08183,50.8554]]],terms_text:"Urząd Miasta Częstochowy"},{id:"Duna_2013",name:"Danube flood orthophoto 2013",type:"tms",template:"http://e.tile.openstreetmap.hu/dunai-arviz-2013/{zoom}/{x}/{y}.jpg",endDate:"2013-01-01T00:00:00.000Z",startDate:"2013-01-01T00:00:00.000Z",zoomExtent:[10,20],polygon:[[[19.07732,47.69597],[19.07799,47.69598],[19.09462,47.69446],[19.08056,47.59587],[19.07434,47.58909],[19.07952,47.58883],[19.07717,47.57241],[19.05779,47.57209],[19.07732,47.69597]]],terms_url:"http://fototerkep.hu",terms_text:"Fotótérkép.hu",description:"Riverbank of Danube at Budapest, Szentendre and Szigetmonostor"},{id:"Delaware2012Orthophotography",name:"Delaware 2012 Orthophotography",type:"wms",template:"https://firstmap.delaware.gov/arcgis/services/DE_Imagery/DE_Imagery_2012/ImageServer/WMSServer?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=0&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",endDate:"2012-01-01T00:00:00.000Z",startDate:"2012-01-01T00:00:00.000Z",polygon:[[[-75.01771,38.45189],[-75.74174,38.44996],[-75.807,39.73907],[-75.75559,39.80106],[-75.64692,39.85638],[-75.47115,39.84646],[-75.37726,39.81478],[-75.48746,39.67181],[-75.50901,39.43446],[-75.39327,39.27784],[-75.30707,39.01667],[-75.19317,38.82219],[-75.05341,38.80876],[-75.01771,38.45189]]],terms_url:"https://firstmap.delaware.gov/arcgis/rest/services/DE_Imagery/DE_Imagery_2012/ImageServer",terms_text:"Digital Aerial Solutions, LLC",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."},{id:"Delaware2017Orthophotography",name:"Delaware 2017 Orthophotography",type:"wms",template:"https://firstmap.delaware.gov/arcgis/services/DE_Imagery/DE_Imagery_2017/ImageServer/WMSServer?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=0&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",endDate:"2017-01-01T00:00:00.000Z",startDate:"2017-01-01T00:00:00.000Z",polygon:[[[-75.01771,38.45189],[-75.74174,38.44996],[-75.807,39.73907],[-75.75559,39.80106],[-75.64692,39.85638],[-75.47115,39.84646],[-75.37726,39.81478],[-75.48746,39.67181],[-75.50901,39.43446],[-75.39327,39.27784],[-75.30707,39.01667],[-75.19317,38.82219],[-75.05341,38.80876],[-75.01771,38.45189]]],terms_url:"https://firstmap.delaware.gov/arcgis/rest/services/DE_Imagery/DE_Imagery_2017/ImageServer",terms_text:"Digital Aerial Solutions, LLC",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."},{id:"delmiro_gouveia",name:"Delmiro Gouveia AL",type:"wms",template:"http://geoserver.dados.al.gov.br:8080/geoserver/Alagoas/ows?LAYERS=Delmiro%20Gouveia&SERVICE=WMS&FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.0&SERVICE=WMS&REQUEST=GetMap&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[-37.94962,-9.42957],[-37.94834,-9.33972],[-38.03903,-9.33834],[-38.04034,-9.42846],[-37.94962,-9.42957]]],terms_url:"http://www.seplag.al.gov.br",terms_text:"Secretaria de Estado do Planejamento, Gestão e Patrimônio"},{id:"der-es",name:"DER-ES",type:"wms",template:"http://portal.der.es.gov.br/geoserver/wms?SERVICE=WMS&FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=deres-ext:TRECHOINFO&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[-40.94577,-21.31404],[-40.6231,-20.86278],[-40.38882,-20.65177],[-40.22209,-20.29831],[-39.80383,-19.66412],[-39.69603,-19.42573],[-39.67304,-19.30437],[-39.70538,-18.61384],[-39.65292,-18.33096],[-40.22281,-17.97587],[-40.34282,-17.9198],[-40.45278,-17.91502],[-40.46499,-17.92049],[-40.48368,-17.90408],[-40.50164,-17.90681],[-40.51602,-17.88903],[-40.53326,-17.88903],[-40.54548,-17.90134],[-40.58932,-17.91502],[-40.58932,-17.93211],[-40.61519,-17.93416],[-40.62956,-17.9868],[-40.64609,-17.9868],[-40.65903,-18.00731],[-40.68777,-18.00594],[-40.70574,-18.01756],[-40.71365,-18.00184],[-40.72155,-17.99774],[-40.75102,-18.00252],[-40.76754,-17.99842],[-40.76754,-17.98133],[-40.80923,-17.94852],[-40.82432,-17.96014],[-40.83151,-17.94989],[-40.86528,-17.9827],[-40.88397,-17.96766],[-40.90912,-17.98475],[-40.77761,-18.10775],[-40.77832,-18.15146],[-40.79054,-18.15351],[-40.8351,-18.14531],[-40.89547,-18.10365],[-40.93283,-18.12755],[-40.95583,-18.1255],[-40.95296,-18.14463],[-40.96014,-18.15009],[-40.96374,-18.14326],[-40.97955,-18.13643],[-40.99248,-18.15009],[-40.99105,-18.16307],[-41.00901,-18.16307],[-41.05788,-18.1658],[-41.05788,-18.17536],[-41.09597,-18.19243],[-41.09597,-18.2054],[-41.1089,-18.21291],[-41.09812,-18.22997],[-41.10531,-18.2327],[-41.09884,-18.25591],[-41.12903,-18.27502],[-41.16137,-18.30572],[-41.15059,-18.37394],[-41.16424,-18.37939],[-41.16424,-18.4019],[-41.15059,-18.40735],[-41.15849,-18.41144],[-41.17358,-18.41144],[-41.18868,-18.44485],[-41.02123,-18.46667],[-41.04638,-18.60362],[-41.03776,-18.61452],[-41.05788,-18.62678],[-41.0471,-18.64857],[-41.03488,-18.65402],[-40.99895,-18.67716],[-40.94505,-18.69418],[-40.94433,-18.76973],[-40.92134,-18.81055],[-40.93715,-18.82347],[-40.94721,-18.82143],[-40.97092,-18.83572],[-41.08375,-18.83232],[-41.10675,-18.83572],[-41.11753,-18.80783],[-41.13118,-18.79286],[-41.23611,-18.7949],[-41.2512,-18.81667],[-41.2476,-18.85544],[-41.2203,-18.87992],[-41.20808,-18.87992],[-41.20664,-18.86632],[-41.16424,-18.867],[-41.15634,-18.88876],[-41.12903,-18.9044],[-41.12112,-18.92412],[-41.0392,-18.98665],[-41.07585,-19.00567],[-41.06507,-19.06342],[-40.96877,-19.12726],[-40.96158,-19.15102],[-40.92996,-19.206],[-40.94649,-19.22296],[-40.94793,-19.24264],[-40.92565,-19.26299],[-40.94936,-19.2786],[-40.92277,-19.31048],[-40.94361,-19.35252],[-40.93427,-19.381],[-40.95727,-19.39184],[-40.9738,-19.42641],[-40.95439,-19.46165],[-40.97883,-19.50298],[-41.01332,-19.50298],[-41.04638,-19.48333],[-41.05429,-19.48401],[-41.04135,-19.56664],[-41.09238,-19.58966],[-41.14627,-19.656],[-41.16496,-19.65871],[-41.17933,-19.6939],[-41.19658,-19.74599],[-41.16999,-19.80618],[-41.18939,-19.82375],[-41.18868,-19.88526],[-41.21239,-19.89743],[-41.22964,-19.90216],[-41.24689,-19.93324],[-41.25479,-19.92919],[-41.26988,-19.93797],[-41.30653,-19.93392],[-41.31516,-19.96972],[-41.3245,-19.97647],[-41.313,-20.01226],[-41.33672,-20.05548],[-41.34822,-20.08653],[-41.3554,-20.12094],[-41.37768,-20.15805],[-41.38702,-20.18638],[-41.41074,-20.19448],[-41.4208,-20.20257],[-41.7636,-20.2046],[-41.78516,-20.28483],[-41.85055,-20.3246],[-41.86349,-20.37513],[-41.85127,-20.38187],[-41.84337,-20.40949],[-41.80887,-20.42498],[-41.80672,-20.47211],[-41.83115,-20.47885],[-41.81103,-20.54212],[-41.83115,-20.55086],[-41.86205,-20.61814],[-41.82109,-20.64437],[-41.85343,-20.68068],[-41.87139,-20.72102],[-41.8678,-20.73849],[-41.88002,-20.73984],[-41.88289,-20.76739],[-41.85415,-20.77478],[-41.83331,-20.7983],[-41.80887,-20.80905],[-41.78444,-20.80569],[-41.75138,-20.82382],[-41.74707,-20.87487],[-41.72335,-20.87554],[-41.74132,-20.92723],[-41.72335,-20.97757],[-41.74347,-21.09763],[-41.7291,-21.12579],[-41.594,-21.16332],[-41.57244,-21.18678],[-41.49051,-21.18879],[-41.48332,-21.20085],[-41.43948,-21.22095],[-41.41289,-21.20956],[-41.34965,-21.21291],[-41.27994,-21.2464],[-41.24473,-21.23234],[-41.17718,-21.25511],[-41.09238,-21.2243],[-41.04854,-21.25913],[-41.01548,-21.25578],[-41.00254,-21.28726],[-40.94577,-21.31404]]],terms_url:"https://der.es.gov.br",terms_text:"Departamento de Estradas de Rodagem do Estado do Espírito Santo",overlay:true},{id:"db-inspire-2013-11",name:"Deutsche Bahn VzG lines January 2017",type:"wms",template:"https://wms.michreichert.de/vzg-strecken-2017?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=vzg_strecken,station_codes,level_crossings&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",endDate:"2013-11-01T00:00:00.000Z",startDate:"2013-11-01T00:00:00.000Z",polygon:[[[8.19422,48.97504],[7.97355,49.02623],[7.94677,49.06313],[7.44328,49.18928],[7.05679,49.11163],[6.94302,49.21345],[6.81633,49.16389],[6.68209,49.24061],[6.3501,49.46202],[6.35353,49.57302],[6.42632,49.67177],[6.50254,49.71885],[6.45241,50.61258],[6.03871,50.71215],[6.00369,50.753],[6.05742,50.8559],[6.0787,50.90247],[6.0727,51.06792],[6.17123,51.33853],[6.22548,51.36554],[6.15715,51.5509],[6.12763,51.91069],[6.79985,51.86661],[7.02851,52.31255],[6.72947,52.64179],[7.07486,52.75269],[7.20532,53.18442],[7.04464,53.33106],[6.5173,53.65785],[8.23529,54.99001],[11.92257,54.52963],[14.1679,54.59631],[14.46591,53.24712],[14.14318,52.83946],[14.64375,52.58613],[14.57646,52.32756],[14.74537,52.06577],[14.66847,51.7353],[14.7234,51.53927],[15.03926,51.28745],[14.98845,51.09207],[14.88922,50.93856],[14.81593,50.87729],[14.63671,50.89116],[14.59311,50.91887],[14.57217,51.01076],[14.26283,51.06473],[14.28086,50.98024],[14.22816,50.85796],[13.69532,50.72883],[13.03442,50.50085],[12.49077,50.34582],[12.32632,50.29277],[12.35379,50.21462],[12.32701,50.16363],[12.1677,50.34889],[12.07707,50.2524],[12.18195,50.21136],[12.26014,50.09069],[12.53892,49.4164],[12.88808,49.3385],[13.21287,49.12439],[13.73952,48.83688],[13.45371,48.56222],[13.40555,48.37812],[13.03648,48.25986],[12.71376,48.10856],[12.93108,47.9376],[13.00455,47.84506],[12.90671,47.73249],[13.05228,47.59329],[12.15792,47.7087],[12.20393,47.61667],[12.17783,47.59815],[11.61753,47.60093],[11.26666,47.39124],[10.9247,47.46811],[10.91578,47.55623],[10.59031,47.5567],[10.29848,47.39937],[9.78144,47.61274],[9.74024,47.52842],[9.00278,47.69137],[8.68933,47.72371],[8.63809,47.70261],[8.63079,47.69359],[8.62127,47.69177],[8.62414,47.68221],[8.61243,47.68115],[8.35382,47.61367],[8.27485,47.619],[8.23709,47.61023],[8.22808,47.60583],[8.20284,47.61555],[8.10834,47.58251],[8.08568,47.5583],[8.06714,47.56444],[8.04981,47.55645],[8.02749,47.55112],[7.98097,47.55494],[7.91917,47.54787],[7.88862,47.58888],[7.81257,47.57122],[7.79455,47.55558],[7.71404,47.54063],[7.66043,47.54485],[7.65219,47.54702],[7.63439,47.56173],[7.61499,47.55669],[7.5834,47.57048],[7.58559,47.5845],[7.59366,47.60048],[7.58761,47.608],[7.51491,47.6652],[7.5434,47.81539],[7.57671,48.02454],[7.56812,48.06012],[7.80639,48.52438],[7.79987,48.58029],[7.80665,48.60106],[8.11014,48.84977],[8.19422,48.97504]]],terms_url:"https://data.deutschebahn.com/dataset/data-streckennetz",terms_text:"Data CC-BY 4.0 Deutsche Bahn AG",overlay:true},{id:"db-inspire-2015-11",name:"Deutsche Bahn VzG lines Nov 2015",type:"wms",template:"https://wms.michreichert.de/vzg-strecken-2015?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=vzg_strecken,station_codes,level_crossings&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",endDate:"2015-11-01T00:00:00.000Z",startDate:"2015-11-01T00:00:00.000Z",polygon:[[[8.19422,48.97504],[7.97355,49.02623],[7.94677,49.06313],[7.44328,49.18928],[7.05679,49.11163],[6.94302,49.21345],[6.81633,49.16389],[6.68209,49.24061],[6.3501,49.46202],[6.35353,49.57302],[6.42632,49.67177],[6.50254,49.71885],[6.45241,50.61258],[6.03871,50.71215],[6.00369,50.753],[6.05742,50.8559],[6.0787,50.90247],[6.0727,51.06792],[6.17123,51.33853],[6.22548,51.36554],[6.15715,51.5509],[6.12763,51.91069],[6.79985,51.86661],[7.02851,52.31255],[6.72947,52.64179],[7.07486,52.75269],[7.20532,53.18442],[7.04464,53.33106],[6.5173,53.65785],[8.23529,54.99001],[11.92257,54.52963],[14.1679,54.59631],[14.46591,53.24712],[14.14318,52.83946],[14.64375,52.58613],[14.57646,52.32756],[14.74537,52.06577],[14.66847,51.7353],[14.7234,51.53927],[15.03926,51.28745],[14.98845,51.09207],[14.88922,50.93856],[14.81593,50.87729],[14.63671,50.89116],[14.59311,50.91887],[14.57217,51.01076],[14.26283,51.06473],[14.28086,50.98024],[14.22816,50.85796],[13.69532,50.72883],[13.03442,50.50085],[12.49077,50.34582],[12.32632,50.29277],[12.35379,50.21462],[12.32701,50.16363],[12.1677,50.34889],[12.07707,50.2524],[12.18195,50.21136],[12.26014,50.09069],[12.53892,49.4164],[12.88808,49.3385],[13.21287,49.12439],[13.73952,48.83688],[13.45371,48.56222],[13.40555,48.37812],[13.03648,48.25986],[12.71376,48.10856],[12.93108,47.9376],[13.00455,47.84506],[12.90671,47.73249],[13.05228,47.59329],[12.15792,47.7087],[12.20393,47.61667],[12.17783,47.59815],[11.61753,47.60093],[11.26666,47.39124],[10.9247,47.46811],[10.91578,47.55623],[10.59031,47.5567],[10.29848,47.39937],[9.78144,47.61274],[9.74024,47.52842],[9.00278,47.69137],[8.68933,47.72371],[8.63809,47.70261],[8.63079,47.69359],[8.62127,47.69177],[8.62414,47.68221],[8.61243,47.68115],[8.35382,47.61367],[8.27485,47.619],[8.23709,47.61023],[8.22808,47.60583],[8.20284,47.61555],[8.10834,47.58251],[8.08568,47.5583],[8.06714,47.56444],[8.04981,47.55645],[8.02749,47.55112],[7.98097,47.55494],[7.91917,47.54787],[7.88862,47.58888],[7.81257,47.57122],[7.79455,47.55558],[7.71404,47.54063],[7.66043,47.54485],[7.65219,47.54702],[7.63439,47.56173],[7.61499,47.55669],[7.5834,47.57048],[7.58559,47.5845],[7.59366,47.60048],[7.58761,47.608],[7.51491,47.6652],[7.5434,47.81539],[7.57671,48.02454],[7.56812,48.06012],[7.80639,48.52438],[7.79987,48.58029],[7.80665,48.60106],[8.11014,48.84977],[8.19422,48.97504]]],terms_url:"https://data.deutschebahn.com/dataset/data-streckennetz",terms_text:"Data CC-BY 4.0 Deutsche Bahn AG",overlay:true},{id:"DigitalGlobe-Premium",name:"DigitalGlobe Premium Imagery",type:"tms",template:"https://{switch:a,b,c,d}.tiles.mapbox.com/v4/digitalglobe.316c9a2e/{zoom}/{x}/{y}.png?access_token=pk.eyJ1IjoiZGlnaXRhbGdsb2JlIiwiYSI6ImNqZGFrZ2c2dzFlMWgyd2x0ZHdmMDB6NzYifQ.9Pl3XOO82ArX94fHV289Pg",zoomExtent:[0,22],terms_url:"https://wiki.openstreetmap.org/wiki/DigitalGlobe",terms_text:"Terms & Feedback","default":true,description:"DigitalGlobe-Premium is a mosaic composed of DigitalGlobe basemap with select regions filled with +Vivid or custom area of interest imagery, 50cm resolution or better, and refreshed more frequently with ongoing updates.",icon:"https://osmlab.github.io/editor-layer-index/sources/world/DigitalGlobePremiumImagery.png"},{id:"DigitalGlobe-Premium-vintage",name:"DigitalGlobe Premium Imagery Vintage",type:"tms",template:"https://{switch:a,b,c,d}.tiles.mapbox.com/v4/digitalglobe.2850d66c/{zoom}/{x}/{y}.png?access_token=pk.eyJ1IjoiZGlnaXRhbGdsb2JlIiwiYSI6ImNqOTBkcmZjNzJ5ZnozNHF6NnVkOGd6ODYifQ.grAnqgpCjOaeq-ozqt4QNw",zoomExtent:[0,22],terms_url:"https://wiki.openstreetmap.org/wiki/DigitalGlobe",terms_text:"Terms & Feedback",description:"Imagery boundaries and capture dates. Labels appear at zoom level 13 and higher.",icon:"https://osmlab.github.io/editor-layer-index/sources/world/DigitalGlobePremiumImagery.png",overlay:true},{id:"DigitalGlobe-Standard",name:"DigitalGlobe Standard Imagery",type:"tms",template:"https://{switch:a,b,c,d}.tiles.mapbox.com/v4/digitalglobe.0a8e44ba/{zoom}/{x}/{y}.png?access_token=pk.eyJ1IjoiZGlnaXRhbGdsb2JlIiwiYSI6ImNqZGFrZ3pjczNpaHYycXFyMGo0djY3N2IifQ.90uebT4-ow1uqZKTUrf6RQ",zoomExtent:[0,22],terms_url:"https://wiki.openstreetmap.org/wiki/DigitalGlobe",terms_text:"Terms & Feedback","default":true,description:"DigitalGlobe-Standard is a curated set of imagery covering 86% of the earth’s landmass, with 30-60cm resolution where available, backfilled by Landsat. Average age is 2.31 years, with some areas updated 2x per year.",icon:"https://osmlab.github.io/editor-layer-index/sources/world/DigitalGlobePremiumImagery.png"},{id:"DigitalGlobe-Standard-vintage",name:"DigitalGlobe Standard Imagery Vintage",type:"tms",template:"https://{switch:a,b,c,d}.tiles.mapbox.com/v4/digitalglobe.1412531a/{zoom}/{x}/{y}.png?access_token=pk.eyJ1IjoiZGlnaXRhbGdsb2JlIiwiYSI6ImNqOTBlYWJ1ZDAza2YyeG14NWVodTA4OWUifQ.wVc8ZOuPuYVw39lhS2j3_g",zoomExtent:[0,22],terms_url:"https://wiki.openstreetmap.org/wiki/DigitalGlobe",terms_text:"Terms & Feedback",description:"Imagery boundaries and capture dates. Labels appear at zoom level 13 and higher.",icon:"https://osmlab.github.io/editor-layer-index/sources/world/DigitalGlobePremiumImagery.png",overlay:true},{id:"drone-imagery-2014",name:"Drone Imagery 2014 (Haiti)",type:"tms",template:"http://wms.openstreetmap.fr/tms/1.0.0/haiti_2014/{zoom}/{x}/{y}",endDate:"2014-01-01T00:00:00.000Z",startDate:"2014-01-01T00:00:00.000Z",polygon:[[[-72.3286,18.69461],[-72.33034,18.69412],[-72.33117,18.69284],[-72.33413,18.68542],[-72.33452,18.68414],[-72.33443,18.68355],[-72.33375,18.68235],[-72.32147,18.67721],[-72.32027,18.67698],[-72.31909,18.67713],[-72.3183,18.67804],[-72.31508,18.68457],[-72.31394,18.689],[-72.31553,18.68993],[-72.3286,18.69461]],[[-72.34695,18.61833],[-72.34553,18.62166],[-72.34355,18.62447],[-72.34245,18.62553],[-72.34076,18.62658],[-72.33786,18.62639],[-72.33649,18.62597],[-72.33589,18.62504],[-72.33482,18.62559],[-72.33472,18.6255],[-72.33459,18.62513],[-72.33343,18.62438],[-72.33174,18.62469],[-72.3313,18.62457],[-72.33126,18.62321],[-72.33088,18.62276],[-72.33066,18.62277],[-72.32985,18.62345],[-72.32862,18.62186],[-72.32829,18.6218],[-72.32817,18.62193],[-72.32809,18.6218],[-72.32734,18.62261],[-72.32541,18.62101],[-72.32422,18.62122],[-72.32396,18.61869],[-72.32354,18.61815],[-72.32325,18.61818],[-72.32351,18.61877],[-72.32058,18.62031],[-72.32043,18.61993],[-72.31978,18.62066],[-72.31807,18.61907],[-72.31742,18.61958],[-72.31523,18.61782],[-72.31463,18.61844],[-72.31324,18.6165],[-72.31275,18.61677],[-72.31232,18.6172],[-72.31198,18.61704],[-72.31042,18.61764],[-72.31062,18.61564],[-72.30996,18.61526],[-72.30936,18.61623],[-72.30786,18.61542],[-72.30669,18.61623],[-72.30604,18.61704],[-72.30419,18.61545],[-72.30288,18.61688],[-72.30191,18.61637],[-72.30131,18.61552],[-72.30118,18.6158],[-72.30087,18.61546],[-72.30076,18.61567],[-72.30062,18.6156],[-72.30012,18.61609],[-72.29198,18.61365],[-72.29194,18.61347],[-72.29143,18.61342],[-72.29094,18.61323],[-72.29105,18.61199],[-72.29057,18.61152],[-72.28772,18.61145],[-72.28801,18.6096],[-72.2865,18.60968],[-72.28635,18.60799],[-72.28448,18.60844],[-72.28436,18.60789],[-72.283,18.60808],[-72.283,18.60658],[-72.2828,18.60676],[-72.2816,18.60537],[-72.28106,18.60533],[-72.27973,18.60682],[-72.27805,18.60525],[-72.27793,18.6053],[-72.2778,18.60524],[-72.2772,18.60638],[-72.27589,18.60564],[-72.27544,18.60629],[-72.27385,18.60508],[-72.27341,18.60508],[-72.27241,18.60593],[-72.27099,18.60442],[-72.27047,18.60429],[-72.27038,18.60446],[-72.27024,18.60427],[-72.27011,18.60433],[-72.26862,18.60368],[-72.26778,18.6037],[-72.26751,18.60429],[-72.2655,18.60318],[-72.26539,18.60336],[-72.26515,18.60309],[-72.26471,18.603],[-72.26436,18.60331],[-72.26312,18.60193],[-72.26258,18.60188],[-72.262,18.60251],[-72.26139,18.60184],[-72.26106,18.60182],[-72.26106,18.60148],[-72.26014,18.6005],[-72.25994,18.60049],[-72.25803,18.60079],[-72.2576,18.60054],[-72.25691,18.60094],[-72.25413,18.59992],[-72.25093,18.59739],[-72.25062,18.59676],[-72.25033,18.59701],[-72.24451,18.59231],[-72.24215,18.58872],[-72.24167,18.58756],[-72.24077,18.58654],[-72.24147,18.58592],[-72.2413,18.58543],[-72.2395,18.58424],[-72.24007,18.58358],[-72.2382,18.58197],[-72.23868,18.58157],[-72.2385,18.58119],[-72.23703,18.58054],[-72.23612,18.57894],[-72.23646,18.57825],[-72.23636,18.5777],[-72.23467,18.57684],[-72.2353,18.57562],[-72.235,18.57499],[-72.23335,18.57423],[-72.23399,18.57293],[-72.23182,18.57169],[-72.23188,18.57137],[-72.23175,18.57127],[-72.23198,18.5708],[-72.23072,18.5694],[-72.23097,18.56874],[-72.23082,18.56844],[-72.23046,18.56855],[-72.23009,18.56754],[-72.22942,18.56715],[-72.22972,18.56651],[-72.22961,18.566],[-72.22908,18.56612],[-72.22848,18.56396],[-72.22818,18.56395],[-72.22733,18.56421],[-72.2265,18.56179],[-72.22623,18.56191],[-72.22436,18.55908],[-72.22471,18.55882],[-72.22357,18.55689],[-72.22379,18.55675],[-72.22325,18.55579],[-72.22387,18.55544],[-72.22382,18.55528],[-72.22458,18.55483],[-72.22453,18.55439],[-72.22625,18.55408],[-72.22705,18.55349],[-72.22692,18.55333],[-72.2271,18.55324],[-72.22687,18.55273],[-72.22592,18.55308],[-72.22465,18.55027],[-72.22483,18.5501],[-72.22457,18.54956],[-72.22327,18.55014],[-72.22261,18.54869],[-72.2208,18.54918],[-72.22051,18.54852],[-72.22034,18.54865],[-72.2201,18.54845],[-72.21952,18.54876],[-72.21862,18.54755],[-72.2174,18.5478],[-72.21714,18.54733],[-72.21694,18.54734],[-72.21583,18.54517],[-72.21505,18.54533],[-72.21477,18.54494],[-72.21442,18.54218],[-72.21421,18.54233],[-72.21293,18.5401],[-72.21199,18.5404],[-72.21188,18.54025],[-72.21145,18.53781],[-72.21085,18.53797],[-72.21028,18.53545],[-72.20993,18.53465],[-72.20942,18.53478],[-72.20942,18.53456],[-72.20851,18.53472],[-72.2057,18.53039],[-72.20444,18.52693],[-72.20438,18.52643],[-72.20418,18.52637],[-72.20399,18.52572],[-72.20263,18.5222],[-72.20182,18.5197],[-72.20148,18.51742],[-72.20301,18.51606],[-72.20503,18.51506],[-72.20767,18.51432],[-72.20936,18.5142],[-72.2095,18.51448],[-72.21082,18.51416],[-72.21095,18.51444],[-72.21189,18.51412],[-72.21266,18.51403],[-72.21277,18.51417],[-72.21462,18.51393],[-72.21697,18.51569],[-72.21731,18.51648],[-72.21787,18.51642],[-72.21818,18.51975],[-72.21798,18.51984],[-72.21909,18.52189],[-72.22031,18.52152],[-72.22096,18.52382],[-72.22209,18.52355],[-72.22251,18.52685],[-72.22229,18.52693],[-72.22271,18.52726],[-72.22289,18.52707],[-72.2231,18.52722],[-72.22404,18.52681],[-72.22551,18.52936],[-72.22596,18.5297],[-72.22642,18.52964],[-72.2265,18.53018],[-72.2275,18.53118],[-72.22673,18.53171],[-72.22885,18.53383],[-72.22811,18.53435],[-72.22981,18.53623],[-72.22912,18.5367],[-72.22935,18.53731],[-72.23059,18.53875],[-72.23222,18.54189],[-72.23215,18.5421],[-72.23258,18.54324],[-72.23311,18.54304],[-72.2342,18.54558],[-72.23436,18.5455],[-72.23554,18.54776],[-72.23571,18.54779],[-72.23601,18.54899],[-72.23839,18.55165],[-72.23747,18.55231],[-72.23951,18.55397],[-72.23918,18.55413],[-72.2407,18.55661],[-72.24014,18.5568],[-72.24079,18.55824],[-72.24063,18.55835],[-72.24067,18.55845],[-72.24117,18.55815],[-72.24161,18.55898],[-72.24216,18.55882],[-72.24242,18.56062],[-72.24262,18.56101],[-72.24294,18.56089],[-72.24399,18.56371],[-72.24466,18.56356],[-72.24475,18.56413],[-72.24536,18.56445],[-72.2449,18.56525],[-72.24518,18.56549],[-72.245,18.56581],[-72.24499,18.56607],[-72.24543,18.56633],[-72.24559,18.56618],[-72.24588,18.56662],[-72.24687,18.56727],[-72.24662,18.56749],[-72.24781,18.56897],[-72.24728,18.56938],[-72.24859,18.57137],[-72.24894,18.57159],[-72.24865,18.57222],[-72.2488,18.57219],[-72.24885,18.5723],[-72.24945,18.57197],[-72.25068,18.57411],[-72.25147,18.5737],[-72.25251,18.57598],[-72.25339,18.57551],[-72.25491,18.57848],[-72.25462,18.57863],[-72.25467,18.57878],[-72.25505,18.57894],[-72.25495,18.57913],[-72.256,18.58074],[-72.2563,18.58054],[-72.25752,18.58237],[-72.25769,18.58227],[-72.2578,18.5824],[-72.25808,18.5823],[-72.25857,18.5821],[-72.25862,18.58222],[-72.25889,18.58219],[-72.25894,18.58302],[-72.25958,18.58445],[-72.25984,18.58472],[-72.26072,18.58443],[-72.26094,18.58565],[-72.2622,18.58722],[-72.26351,18.58643],[-72.2643,18.58738],[-72.26474,18.58708],[-72.26594,18.58862],[-72.26756,18.58877],[-72.26742,18.58917],[-72.27039,18.58893],[-72.27021,18.5903],[-72.2722,18.59048],[-72.27211,18.59145],[-72.27381,18.59188],[-72.27384,18.59168],[-72.27729,18.59169],[-72.28014,18.59129],[-72.28059,18.59048],[-72.28106,18.59071],[-72.28226,18.58989],[-72.28286,18.59047],[-72.28367,18.58966],[-72.28401,18.59014],[-72.28468,18.59029],[-72.2851,18.58997],[-72.2857,18.59062],[-72.28661,18.59068],[-72.28681,18.59014],[-72.28728,18.59032],[-72.28741,18.59013],[-72.28801,18.59052],[-72.28991,18.59071],[-72.29077,18.58997],[-72.29196,18.59186],[-72.2945,18.59148],[-72.29454,18.59361],[-72.29654,18.59322],[-72.29689,18.59586],[-72.2976,18.59675],[-72.29824,18.59722],[-72.29871,18.5962],[-72.30053,18.59733],[-72.30081,18.59675],[-72.30113,18.59691],[-72.30131,18.59676],[-72.30175,18.59721],[-72.30303,18.59774],[-72.3033,18.59729],[-72.30394,18.59761],[-72.30394,18.59736],[-72.30555,18.59794],[-72.30598,18.59756],[-72.30703,18.59838],[-72.30723,18.59799],[-72.30862,18.59833],[-72.30938,18.59752],[-72.31013,18.5981],[-72.31037,18.59739],[-72.3121,18.5983],[-72.3122,18.59807],[-72.31424,18.59902],[-72.31456,18.59873],[-72.31524,18.59922],[-72.31681,18.59952],[-72.31662,18.60004],[-72.31958,18.60072],[-72.31907,18.60202],[-72.32042,18.60247],[-72.32061,18.60242],[-72.32082,18.60267],[-72.3211,18.6027],[-72.32105,18.60298],[-72.32144,18.60347],[-72.32368,18.60322],[-72.32375,18.60432],[-72.32584,18.60436],[-72.32588,18.60522],[-72.32617,18.60585],[-72.32864,18.60525],[-72.32897,18.60527],[-72.32916,18.60727],[-72.33006,18.60812],[-72.3294,18.60867],[-72.33004,18.60959],[-72.33282,18.60949],[-72.33258,18.61058],[-72.33302,18.61005],[-72.3335,18.61054],[-72.33477,18.61035],[-72.33485,18.61167],[-72.33735,18.61174],[-72.33725,18.61237],[-72.33767,18.61298],[-72.34038,18.61306],[-72.34016,18.6138],[-72.34153,18.61384],[-72.34258,18.61457],[-72.3426,18.61512],[-72.34306,18.61499],[-72.34682,18.61792],[-72.34695,18.61833]],[[-72.72363,19.09461],[-72.72302,19.09518],[-72.72206,19.0965],[-72.72169,19.09612],[-72.72164,19.0962],[-72.72132,19.09609],[-72.72073,19.0967],[-72.7198,19.09587],[-72.71965,19.09591],[-72.7197,19.09601],[-72.71955,19.09602],[-72.71911,19.09623],[-72.71906,19.09627],[-72.71904,19.09625],[-72.71888,19.09631],[-72.71886,19.09626],[-72.71817,19.09643],[-72.71776,19.09679],[-72.71756,19.09657],[-72.71693,19.09705],[-72.71713,19.09735],[-72.71495,19.0988],[-72.71479,19.09852],[-72.71483,19.09849],[-72.7148,19.0984],[-72.71455,19.09859],[-72.71449,19.09851],[-72.71413,19.09877],[-72.71413,19.09893],[-72.71419,19.09891],[-72.71417,19.09978],[-72.71324,19.09971],[-72.71287,19.09974],[-72.71295,19.09967],[-72.71278,19.09968],[-72.71278,19.09977],[-72.71282,19.09976],[-72.71285,19.09988],[-72.71266,19.09989],[-72.71266,19.09987],[-72.71245,19.09987],[-72.71182,19.09991],[-72.71178,19.10012],[-72.71157,19.10009],[-72.71147,19.10102],[-72.71042,19.10086],[-72.71039,19.10119],[-72.7103,19.1012],[-72.71031,19.10151],[-72.7097,19.10156],[-72.7097,19.10162],[-72.70917,19.10169],[-72.70917,19.1021],[-72.70828,19.10211],[-72.70809,19.10289],[-72.70788,19.10284],[-72.70798,19.10367],[-72.70724,19.1038],[-72.70731,19.10501],[-72.70723,19.10501],[-72.70736,19.10565],[-72.70637,19.10584],[-72.7062,19.10714],[-72.70588,19.10706],[-72.70591,19.10747],[-72.7053,19.10757],[-72.7054,19.10813],[-72.70568,19.10809],[-72.70568,19.10928],[-72.70591,19.11013],[-72.70589,19.11022],[-72.70574,19.11025],[-72.70574,19.11116],[-72.70538,19.11114],[-72.70557,19.11247],[-72.70499,19.11256],[-72.70537,19.11361],[-72.7047,19.11388],[-72.70496,19.11563],[-72.70418,19.11564],[-72.70442,19.11762],[-72.70371,19.11764],[-72.70371,19.1178],[-72.70352,19.11779],[-72.70339,19.12227],[-72.70264,19.12205],[-72.70253,19.12301],[-72.70289,19.12592],[-72.70308,19.12595],[-72.70316,19.12864],[-72.70234,19.12997],[-72.70206,19.1301],[-72.69987,19.1305],[-72.69325,19.13064],[-72.687,19.13075],[-72.68456,19.13073],[-72.68338,19.13056],[-72.6828,19.1297],[-72.68203,19.1283],[-72.68201,19.12715],[-72.68158,19.12714],[-72.68187,19.12508],[-72.68185,19.12507],[-72.68215,19.12414],[-72.68253,19.12295],[-72.68265,19.12243],[-72.68263,19.12185],[-72.68302,19.12185],[-72.68301,19.12132],[-72.68286,19.12133],[-72.68293,19.11947],[-72.68251,19.11946],[-72.68256,19.11803],[-72.68265,19.11751],[-72.68265,19.11703],[-72.68318,19.11704],[-72.68319,19.11685],[-72.68371,19.11687],[-72.68384,19.11684],[-72.684,19.11685],[-72.68398,19.11689],[-72.68426,19.11688],[-72.68426,19.11679],[-72.68481,19.11674],[-72.68546,19.11667],[-72.68557,19.11664],[-72.68551,19.11664],[-72.6856,19.11662],[-72.68595,19.11658],[-72.68596,19.11654],[-72.68608,19.11654],[-72.68661,19.11663],[-72.68662,19.11656],[-72.68713,19.11665],[-72.68721,19.11666],[-72.68721,19.11663],[-72.6878,19.11666],[-72.68779,19.11659],[-72.68833,19.11663],[-72.68832,19.11658],[-72.68928,19.11657],[-72.6897,19.11656],[-72.68998,19.11644],[-72.6902,19.11644],[-72.69019,19.11615],[-72.69027,19.11563],[-72.69029,19.11541],[-72.69017,19.11543],[-72.69018,19.11493],[-72.69018,19.11458],[-72.69019,19.11445],[-72.69022,19.11433],[-72.6902,19.11406],[-72.68972,19.11398],[-72.68968,19.11397],[-72.68973,19.11415],[-72.68974,19.1142],[-72.68937,19.11417],[-72.68872,19.11412],[-72.688,19.11412],[-72.68758,19.11409],[-72.68759,19.11401],[-72.68736,19.11403],[-72.68711,19.11406],[-72.68682,19.11406],[-72.68677,19.11405],[-72.68591,19.11422],[-72.68554,19.11421],[-72.68557,19.11369],[-72.68554,19.11308],[-72.68533,19.11314],[-72.6852,19.11316],[-72.68519,19.1132],[-72.68504,19.11325],[-72.68495,19.1127],[-72.68474,19.11278],[-72.68468,19.11277],[-72.68446,19.11281],[-72.68416,19.1128],[-72.6836,19.11254],[-72.68353,19.11102],[-72.68363,19.11007],[-72.68338,19.11003],[-72.68344,19.10974],[-72.68295,19.1096],[-72.68305,19.10892],[-72.68111,19.10826],[-72.68112,19.1081],[-72.67965,19.10781],[-72.67968,19.10765],[-72.67923,19.10749],[-72.67916,19.10802],[-72.67838,19.10755],[-72.67779,19.10753],[-72.67775,19.10769],[-72.67623,19.10765],[-72.67606,19.10762],[-72.67621,19.10797],[-72.67549,19.10804],[-72.67548,19.1079],[-72.67431,19.10804],[-72.67432,19.10795],[-72.67398,19.10794],[-72.67382,19.10798],[-72.6739,19.10864],[-72.67319,19.10856],[-72.67307,19.10852],[-72.67284,19.10855],[-72.67276,19.10855],[-72.67286,19.10907],[-72.67284,19.10915],[-72.67251,19.10903],[-72.67236,19.10906],[-72.6723,19.10905],[-72.67224,19.10913],[-72.67179,19.10912],[-72.67051,19.10679],[-72.6704,19.10401],[-72.67048,19.10396],[-72.67032,19.10223],[-72.67034,19.1016],[-72.67062,19.09856],[-72.67121,19.09697],[-72.67278,19.09595],[-72.67277,19.09629],[-72.67364,19.09636],[-72.6736,19.09662],[-72.67484,19.09623],[-72.67489,19.09666],[-72.67566,19.09655],[-72.67566,19.09648],[-72.67655,19.09642],[-72.67772,19.09626],[-72.67786,19.09675],[-72.67784,19.09689],[-72.67826,19.09677],[-72.67837,19.09698],[-72.67858,19.09698],[-72.67853,19.09665],[-72.67878,19.09666],[-72.67861,19.09635],[-72.67927,19.09633],[-72.67973,19.0962],[-72.68015,19.09604],[-72.68058,19.09598],[-72.68029,19.09501],[-72.68072,19.095],[-72.68066,19.09474],[-72.68048,19.09418],[-72.68037,19.09335],[-72.68064,19.09335],[-72.68064,19.09266],[-72.67973,19.09263],[-72.67972,19.09269],[-72.67943,19.09266],[-72.67966,19.09132],[-72.67977,19.09107],[-72.68249,19.0892],[-72.68272,19.08907],[-72.68506,19.0888],[-72.68508,19.08888],[-72.68616,19.08873],[-72.6862,19.08887],[-72.68718,19.08866],[-72.68717,19.0886],[-72.68849,19.08844],[-72.68852,19.08847],[-72.69006,19.0884],[-72.69018,19.08871],[-72.69227,19.08828],[-72.69229,19.08887],[-72.69218,19.08924],[-72.69222,19.08928],[-72.69277,19.08923],[-72.69279,19.08933],[-72.69335,19.08934],[-72.69289,19.0888],[-72.69274,19.0883],[-72.69496,19.08857],[-72.69571,19.08831],[-72.69579,19.08892],[-72.69625,19.08904],[-72.69649,19.08889],[-72.69849,19.08845],[-72.69849,19.08866],[-72.6988,19.08858],[-72.69885,19.08895],[-72.69884,19.08903],[-72.69926,19.08895],[-72.70023,19.08884],[-72.70023,19.08893],[-72.70088,19.08892],[-72.7014,19.08887],[-72.70128,19.08828],[-72.70257,19.08859],[-72.70282,19.08874],[-72.70309,19.08883],[-72.70293,19.08855],[-72.70341,19.08862],[-72.70557,19.08863],[-72.70552,19.08906],[-72.70665,19.08889],[-72.70666,19.08938],[-72.70902,19.08917],[-72.70898,19.0891],[-72.71116,19.08894],[-72.71121,19.0892],[-72.71281,19.08912],[-72.71286,19.0898],[-72.71502,19.08882],[-72.71569,19.08838],[-72.71573,19.08847],[-72.7161,19.08824],[-72.71598,19.08795],[-72.71653,19.0877],[-72.71653,19.08761],[-72.71579,19.08781],[-72.71676,19.08727],[-72.71671,19.08717],[-72.71815,19.08638],[-72.71795,19.08602],[-72.71954,19.08518],[-72.71954,19.08511],[-72.72217,19.08467],[-72.72327,19.08506],[-72.72622,19.08712],[-72.72763,19.0891],[-72.72752,19.08973],[-72.72548,19.09295],[-72.72482,19.09403],[-72.72399,19.09495],[-72.72363,19.09461]],[[-72.06537,19.65239],[-72.06565,19.6518],[-72.06603,19.65128],[-72.06697,19.65109],[-72.0676,19.6511],[-72.07102,19.65223],[-72.0719,19.65254],[-72.07189,19.65255],[-72.07264,19.6528],[-72.07262,19.65284],[-72.07268,19.65286],[-72.07269,19.65283],[-72.0733,19.65305],[-72.07393,19.65327],[-72.07416,19.65347],[-72.07418,19.65351],[-72.07435,19.65395],[-72.07432,19.65425],[-72.07419,19.65495],[-72.07399,19.65583],[-72.07384,19.65648],[-72.07307,19.65805],[-72.07274,19.65866],[-72.0727,19.65869],[-72.07228,19.65915],[-72.07221,19.65917],[-72.07196,19.65916],[-72.0714,19.65909],[-72.07012,19.65866],[-72.07017,19.65856],[-72.06983,19.65852],[-72.06984,19.65848],[-72.06939,19.65841],[-72.06944,19.65823],[-72.06941,19.65823],[-72.06937,19.65836],[-72.06842,19.65807],[-72.06707,19.65759],[-72.06451,19.65663],[-72.06434,19.65632],[-72.06421,19.65547],[-72.06422,19.65541],[-72.06472,19.65379],[-72.06487,19.65351],[-72.06537,19.65239]],[[-72.23222,18.69173],[-72.23182,18.69172],[-72.23115,18.69168],[-72.23128,18.69161],[-72.23072,18.69152],[-72.23068,18.69147],[-72.23135,18.69159],[-72.23157,18.69149],[-72.23162,18.69137],[-72.23165,18.69134],[-72.23165,18.69164],[-72.23222,18.69173]],[[-72.2406,18.69192],[-72.23953,18.6921],[-72.23891,18.69207],[-72.23878,18.69207],[-72.23856,18.692],[-72.23818,18.69192],[-72.23186,18.69054],[-72.22977,18.69113],[-72.21709,18.68967],[-72.21618,18.68724],[-72.21599,18.68673],[-72.21602,18.68659],[-72.2159,18.68601],[-72.21581,18.68593],[-72.21561,18.68483],[-72.21569,18.6847],[-72.21578,18.68435],[-72.21595,18.68347],[-72.21629,18.68289],[-72.2164,18.68221],[-72.21633,18.68211],[-72.21641,18.68208],[-72.21642,18.68189],[-72.21694,18.6813],[-72.21685,18.68096],[-72.21693,18.68099],[-72.21722,18.68091],[-72.21734,18.6808],[-72.21731,18.67964],[-72.21749,18.67958],[-72.21749,18.67946],[-72.21747,18.67908],[-72.21743,18.67853],[-72.21739,18.6785],[-72.21718,18.6786],[-72.2171,18.67856],[-72.21708,18.67838],[-72.21724,18.67767],[-72.21724,18.67745],[-72.21721,18.67744],[-72.21681,18.67754],[-72.21671,18.67688],[-72.21662,18.67612],[-72.21642,18.67621],[-72.21601,18.67548],[-72.21596,18.67551],[-72.21589,18.67549],[-72.21552,18.6756],[-72.2154,18.67561],[-72.21529,18.6757],[-72.21521,18.67571],[-72.21491,18.67472],[-72.21464,18.67387],[-72.21456,18.6737],[-72.21447,18.67348],[-72.21413,18.67301],[-72.21427,18.67293],[-72.21413,18.67271],[-72.21383,18.67278],[-72.21339,18.67181],[-72.21178,18.67209],[-72.21169,18.67172],[-72.21135,18.67183],[-72.21116,18.67196],[-72.21077,18.67121],[-72.21058,18.67129],[-72.20984,18.66963],[-72.20972,18.6697],[-72.20966,18.66968],[-72.20918,18.66838],[-72.20895,18.66773],[-72.2093,18.66606],[-72.20937,18.66571],[-72.20974,18.66536],[-72.21031,18.66477],[-72.21021,18.66416],[-72.21042,18.66401],[-72.2111,18.66329],[-72.21167,18.66268],[-72.21179,18.66236],[-72.21206,18.66242],[-72.21193,18.66185],[-72.21188,18.66155],[-72.21199,18.66147],[-72.21239,18.66137],[-72.21331,18.66103],[-72.21393,18.66039],[-72.21376,18.65992],[-72.21355,18.65956],[-72.21376,18.65943],[-72.21349,18.65869],[-72.21296,18.65736],[-72.21357,18.6572],[-72.21312,18.65639],[-72.21281,18.65534],[-72.21317,18.6551],[-72.21308,18.65459],[-72.21347,18.65438],[-72.21374,18.65436],[-72.21382,18.65416],[-72.2135,18.65353],[-72.21304,18.65171],[-72.21345,18.65143],[-72.21341,18.65133],[-72.21364,18.65105],[-72.21418,18.65077],[-72.21378,18.65016],[-72.21364,18.64989],[-72.21372,18.64975],[-72.21429,18.64943],[-72.21379,18.64934],[-72.21362,18.64922],[-72.21382,18.64869],[-72.21354,18.64765],[-72.21331,18.64717],[-72.21366,18.64552],[-72.21389,18.64539],[-72.21377,18.6451],[-72.214,18.64399],[-72.21412,18.64378],[-72.21437,18.64347],[-72.2158,18.64222],[-72.21601,18.64217],[-72.21761,18.64218],[-72.21778,18.64272],[-72.21798,18.64256],[-72.21816,18.64236],[-72.21821,18.6422],[-72.22119,18.64222],[-72.22125,18.6423],[-72.22135,18.64224],[-72.2215,18.64223],[-72.22293,18.64229],[-72.22299,18.64235],[-72.22311,18.64227],[-72.22717,18.64249],[-72.22828,18.64281],[-72.22811,18.6432],[-72.22848,18.64325],[-72.22919,18.64258],[-72.2304,18.64263],[-72.23711,18.64295],[-72.23719,18.64317],[-72.23807,18.64322],[-72.23828,18.64298],[-72.23988,18.64306],[-72.24332,18.6434],[-72.24367,18.64387],[-72.24518,18.64437],[-72.2456,18.64364],[-72.24562,18.64372],[-72.24574,18.64363],[-72.24723,18.64378],[-72.24853,18.64441],[-72.24918,18.64397],[-72.25155,18.64418],[-72.25382,18.64516],[-72.2546,18.64564],[-72.25517,18.64642],[-72.2554,18.64807],[-72.25531,18.64812],[-72.2552,18.64828],[-72.2555,18.64881],[-72.25586,18.64847],[-72.25603,18.64856],[-72.25625,18.64848],[-72.25685,18.64755],[-72.25965,18.64494],[-72.26253,18.64336],[-72.26304,18.64362],[-72.26388,18.64308],[-72.26486,18.64445],[-72.26525,18.64373],[-72.26533,18.64378],[-72.26576,18.64259],[-72.26652,18.64289],[-72.26641,18.64135],[-72.26714,18.64137],[-72.26737,18.6407],[-72.26824,18.64023],[-72.26853,18.6403],[-72.26901,18.63988],[-72.26908,18.63978],[-72.26948,18.63958],[-72.27214,18.63895],[-72.27383,18.63988],[-72.27375,18.64004],[-72.27476,18.64088],[-72.27501,18.64054],[-72.27622,18.64161],[-72.27639,18.64131],[-72.27652,18.64138],[-72.27845,18.643],[-72.27896,18.64273],[-72.2823,18.64457],[-72.28387,18.64607],[-72.28384,18.64611],[-72.28412,18.64641],[-72.28401,18.64647],[-72.28455,18.6471],[-72.28538,18.64803],[-72.28569,18.64785],[-72.28642,18.64857],[-72.28724,18.64936],[-72.28775,18.65003],[-72.28724,18.65028],[-72.28768,18.65089],[-72.28708,18.65122],[-72.28656,18.65188],[-72.28736,18.6532],[-72.2872,18.65332],[-72.2873,18.65355],[-72.28905,18.65383],[-72.28882,18.65459],[-72.28889,18.6546],[-72.28878,18.65512],[-72.29013,18.65481],[-72.29084,18.65766],[-72.2902,18.65767],[-72.29076,18.66015],[-72.28998,18.66022],[-72.29045,18.66151],[-72.29022,18.66161],[-72.29033,18.66256],[-72.29138,18.66227],[-72.29155,18.66276],[-72.29368,18.66243],[-72.29377,18.663],[-72.29441,18.66289],[-72.29444,18.66273],[-72.29656,18.66246],[-72.29662,18.66262],[-72.29708,18.66261],[-72.29692,18.66184],[-72.30025,18.66195],[-72.30141,18.66311],[-72.30141,18.66397],[-72.30192,18.66392],[-72.30197,18.66454],[-72.30311,18.66471],[-72.30471,18.66632],[-72.30471,18.66668],[-72.30505,18.66666],[-72.30529,18.66692],[-72.30519,18.66768],[-72.30607,18.66759],[-72.30749,18.66901],[-72.30782,18.67109],[-72.30784,18.67216],[-72.30757,18.67405],[-72.30716,18.67526],[-72.30674,18.67537],[-72.30687,18.67599],[-72.30657,18.67612],[-72.30611,18.67602],[-72.30585,18.67705],[-72.30607,18.67726],[-72.3061,18.67744],[-72.30635,18.678],[-72.30609,18.67871],[-72.30587,18.67881],[-72.3059,18.67951],[-72.30556,18.68062],[-72.30395,18.68368],[-72.30377,18.68373],[-72.30139,18.68415],[-72.29912,18.68452],[-72.29899,18.68432],[-72.29826,18.6844],[-72.29828,18.6845],[-72.29502,18.68412],[-72.29419,18.68422],[-72.29408,18.68376],[-72.29202,18.68398],[-72.29191,18.68364],[-72.29101,18.68377],[-72.29095,18.68347],[-72.29037,18.68378],[-72.29035,18.68363],[-72.28936,18.68384],[-72.28913,18.68345],[-72.28766,18.6835],[-72.2877,18.68329],[-72.28538,18.68344],[-72.2849,18.68243],[-72.28449,18.68243],[-72.28376,18.68198],[-72.28268,18.68186],[-72.2822,18.68284],[-72.28268,18.68296],[-72.28164,18.68413],[-72.28111,18.68523],[-72.28129,18.68628],[-72.28089,18.68726],[-72.28036,18.68726],[-72.28036,18.68762],[-72.2715,18.688],[-72.2715,18.68774],[-72.27171,18.6875],[-72.27193,18.68611],[-72.2713,18.68611],[-72.27115,18.68635],[-72.27115,18.68735],[-72.26903,18.68805],[-72.26661,18.68821],[-72.26315,18.68817],[-72.25798,18.6868],[-72.25503,18.68501],[-72.25415,18.68242],[-72.25408,18.68278],[-72.25266,18.68732],[-72.25106,18.68819],[-72.24828,18.68927],[-72.24695,18.68917],[-72.24718,18.68966],[-72.24628,18.68966],[-72.24632,18.68997],[-72.24527,18.69032],[-72.24487,18.69045],[-72.24361,18.69036],[-72.24351,18.69029],[-72.24321,18.6903],[-72.24318,18.69051],[-72.24324,18.69061],[-72.24325,18.691],[-72.24303,18.69122],[-72.24166,18.69171],[-72.24149,18.69178],[-72.2406,18.69192]],[[-72.27545,18.56614],[-72.27419,18.56701],[-72.27356,18.56701],[-72.27297,18.56706],[-72.27227,18.56707],[-72.27191,18.56707],[-72.27178,18.56718],[-72.2709,18.56724],[-72.27064,18.56724],[-72.26998,18.56708],[-72.26875,18.56671],[-72.2684,18.56661],[-72.26809,18.56639],[-72.26781,18.56611],[-72.26744,18.5652],[-72.26739,18.56308],[-72.26738,18.5626],[-72.26742,18.56195],[-72.26799,18.56064],[-72.26822,18.56014],[-72.26856,18.55975],[-72.26871,18.55962],[-72.2702,18.55963],[-72.27181,18.55967],[-72.27491,18.55982],[-72.27579,18.55986],[-72.27588,18.55999],[-72.2758,18.56491],[-72.27578,18.56541],[-72.27575,18.56556],[-72.27552,18.56608],[-72.27545,18.56614]],[[-72.33318,18.56014],[-72.33166,18.55959],[-72.33021,18.55904],[-72.32919,18.55866],[-72.3292,18.55861],[-72.32887,18.55838],[-72.32868,18.55826],[-72.3282,18.55827],[-72.32815,18.55828],[-72.3261,18.55752],[-72.32604,18.5575],[-72.32604,18.55745],[-72.32589,18.55732],[-72.32551,18.5573],[-72.32437,18.55688],[-72.32411,18.55678],[-72.32379,18.55662],[-72.32348,18.55633],[-72.32315,18.55628],[-72.32174,18.55556],[-72.32143,18.55541],[-72.3205,18.55488],[-72.32019,18.5547],[-72.32007,18.55453],[-72.31984,18.55412],[-72.31984,18.55385],[-72.31998,18.55322],[-72.32046,18.55124],[-72.32056,18.55083],[-72.32066,18.55047],[-72.32068,18.55039],[-72.32111,18.54857],[-72.32127,18.54791],[-72.32147,18.54719],[-72.32153,18.54699],[-72.322,18.5458],[-72.32203,18.54575],[-72.32354,18.54486],[-72.3236,18.54483],[-72.3236,18.54481],[-72.32486,18.54407],[-72.32534,18.54378],[-72.32533,18.5439],[-72.32534,18.54392],[-72.32555,18.54416],[-72.32588,18.54452],[-72.3259,18.54453],[-72.32621,18.54452],[-72.3266,18.54452],[-72.32666,18.54398],[-72.32669,18.54367],[-72.32666,18.54361],[-72.32666,18.54356],[-72.32669,18.54356],[-72.32677,18.5436],[-72.32704,18.54363],[-72.32714,18.5432],[-72.32713,18.54314],[-72.32704,18.54317],[-72.32697,18.54316],[-72.32698,18.54296],[-72.32697,18.54293],[-72.32697,18.54281],[-72.32728,18.54263],[-72.32814,18.5424],[-72.32864,18.54226],[-72.3297,18.54228],[-72.32979,18.54228],[-72.33174,18.54279],[-72.33242,18.54298],[-72.33329,18.54319],[-72.33328,18.54321],[-72.33529,18.54372],[-72.33589,18.54387],[-72.33689,18.54504],[-72.33734,18.54555],[-72.33761,18.546],[-72.33783,18.54639],[-72.33788,18.54658],[-72.33791,18.54693],[-72.33792,18.54705],[-72.33763,18.54705],[-72.33749,18.54705],[-72.33751,18.54753],[-72.33751,18.54764],[-72.33747,18.54764],[-72.33748,18.54773],[-72.33742,18.54773],[-72.33739,18.54776],[-72.33735,18.54773],[-72.33734,18.54774],[-72.33726,18.54774],[-72.33725,18.54782],[-72.33725,18.54804],[-72.33728,18.548],[-72.3373,18.54798],[-72.3373,18.54796],[-72.33737,18.54788],[-72.33739,18.54789],[-72.33741,18.5478],[-72.33744,18.5478],[-72.33755,18.5477],[-72.33752,18.54764],[-72.33773,18.54741],[-72.33775,18.54741],[-72.33775,18.54737],[-72.33789,18.54721],[-72.3389,18.54828],[-72.33902,18.54842],[-72.34008,18.55026],[-72.34014,18.55034],[-72.34028,18.55068],[-72.34041,18.55099],[-72.34029,18.55156],[-72.34021,18.55185],[-72.33985,18.55283],[-72.33973,18.55315],[-72.33927,18.55425],[-72.33914,18.55457],[-72.33915,18.55458],[-72.3391,18.5547],[-72.33896,18.55506],[-72.33847,18.55626],[-72.33842,18.55625],[-72.33844,18.55631],[-72.33832,18.55661],[-72.33822,18.55686],[-72.33821,18.55687],[-72.33816,18.55699],[-72.33815,18.55698],[-72.33807,18.557],[-72.33803,18.557],[-72.33806,18.55726],[-72.338,18.55742],[-72.33716,18.5593],[-72.33709,18.55945],[-72.33843,18.55931],[-72.33929,18.55922],[-72.33982,18.55941],[-72.33983,18.55943],[-72.34028,18.55975],[-72.34092,18.5598],[-72.34096,18.5598],[-72.34413,18.5609],[-72.3446,18.56107],[-72.34472,18.56111],[-72.34472,18.56109],[-72.34829,18.5623],[-72.34912,18.5626],[-72.35035,18.56335],[-72.35302,18.56496],[-72.35333,18.56616],[-72.35351,18.56901],[-72.35337,18.56949],[-72.35156,18.57185],[-72.35042,18.57341],[-72.35036,18.57338],[-72.34849,18.57592],[-72.34815,18.57636],[-72.34756,18.57636],[-72.34753,18.57634],[-72.34746,18.57647],[-72.34745,18.57639],[-72.34705,18.57703],[-72.34659,18.57672],[-72.34649,18.57683],[-72.34544,18.57618],[-72.34365,18.57629],[-72.34361,18.57636],[-72.34354,18.57631],[-72.34258,18.5764],[-72.34252,18.57699],[-72.3428,18.57707],[-72.343,18.57715],[-72.3429,18.57737],[-72.34338,18.5774],[-72.34321,18.57803],[-72.34324,18.57803],[-72.3432,18.57816],[-72.3444,18.57852],[-72.34395,18.57972],[-72.34414,18.57976],[-72.34377,18.58067],[-72.34424,18.58074],[-72.34398,18.58155],[-72.34388,18.58181],[-72.34392,18.5818],[-72.34371,18.5823],[-72.34375,18.58229],[-72.34371,18.58237],[-72.34283,18.58355],[-72.3424,18.58413],[-72.34238,18.58411],[-72.34234,18.58411],[-72.34209,18.58403],[-72.34207,18.58434],[-72.342,18.58433],[-72.34192,18.58474],[-72.34192,18.58477],[-72.34118,18.58575],[-72.3408,18.58627],[-72.34024,18.58655],[-72.33983,18.58675],[-72.33542,18.58843],[-72.33539,18.58845],[-72.33539,18.58843],[-72.33517,18.58851],[-72.3346,18.58806],[-72.33372,18.58896],[-72.33361,18.58917],[-72.33295,18.58941],[-72.33253,18.58912],[-72.33252,18.58916],[-72.33168,18.58889],[-72.33157,18.5891],[-72.33152,18.58918],[-72.33153,18.58917],[-72.33152,18.5892],[-72.33158,18.58929],[-72.33161,18.58934],[-72.33136,18.58951],[-72.33134,18.58953],[-72.33135,18.58954],[-72.3313,18.58963],[-72.33132,18.58976],[-72.33112,18.58977],[-72.33118,18.58983],[-72.33097,18.59017],[-72.33011,18.5905],[-72.32965,18.59068],[-72.32418,18.59182],[-72.3238,18.59189],[-72.32228,18.59068],[-72.32079,18.58947],[-72.32076,18.58801],[-72.32078,18.588],[-72.32078,18.58706],[-72.32073,18.58691],[-72.32073,18.58626],[-72.32092,18.58625],[-72.32081,18.58589],[-72.32074,18.58593],[-72.3207,18.58531],[-72.32114,18.58437],[-72.32185,18.58274],[-72.32202,18.58277],[-72.3222,18.58276],[-72.32211,18.58251],[-72.32196,18.58249],[-72.32242,18.5815],[-72.32245,18.5815],[-72.32295,18.58034],[-72.32368,18.579],[-72.32465,18.57947],[-72.32575,18.57852],[-72.32661,18.5778],[-72.32721,18.57838],[-72.32824,18.57817],[-72.32848,18.57756],[-72.32855,18.5776],[-72.32938,18.57666],[-72.32907,18.57629],[-72.32936,18.57607],[-72.32877,18.57563],[-72.32975,18.57451],[-72.32968,18.57443],[-72.32989,18.57408],[-72.32994,18.57359],[-72.3296,18.57363],[-72.32997,18.57247],[-72.33009,18.57153],[-72.33017,18.57152],[-72.33047,18.57045],[-72.3314,18.57052],[-72.33167,18.56999],[-72.33027,18.56999],[-72.33025,18.57003],[-72.33006,18.57004],[-72.3297,18.57],[-72.32981,18.56877],[-72.32877,18.56765],[-72.32858,18.56749],[-72.32877,18.56711],[-72.32912,18.5668],[-72.32897,18.56664],[-72.32938,18.56572],[-72.32946,18.56554],[-72.33052,18.56424],[-72.33056,18.56424],[-72.33056,18.5642],[-72.33105,18.56367],[-72.33112,18.56374],[-72.33111,18.56376],[-72.33117,18.56377],[-72.33131,18.56391],[-72.33153,18.5641],[-72.33154,18.56385],[-72.33161,18.56365],[-72.33168,18.56329],[-72.33169,18.56322],[-72.33171,18.56319],[-72.33181,18.5628],[-72.33187,18.5626],[-72.33299,18.56123],[-72.33318,18.561],[-72.33365,18.56064],[-72.33393,18.56042],[-72.33367,18.56033],[-72.33367,18.56027],[-72.33332,18.56011],[-72.33318,18.56014]],[[-72.31173,18.56168],[-72.31195,18.56259],[-72.31221,18.56365],[-72.31259,18.56628],[-72.31254,18.5663],[-72.31264,18.56654],[-72.31266,18.56682],[-72.3127,18.56687],[-72.31276,18.56734],[-72.31256,18.56746],[-72.31232,18.56754],[-72.31229,18.56757],[-72.31199,18.5677],[-72.31216,18.56801],[-72.31227,18.56815],[-72.31231,18.56828],[-72.31239,18.56841],[-72.31291,18.56909],[-72.31281,18.56916],[-72.31306,18.56945],[-72.31309,18.56956],[-72.31323,18.57061],[-72.31325,18.57137],[-72.31325,18.57213],[-72.31234,18.57268],[-72.31117,18.57341],[-72.30971,18.5739],[-72.30911,18.5739],[-72.30894,18.57369],[-72.3086,18.57389],[-72.30712,18.57389],[-72.307,18.57357],[-72.30666,18.57388],[-72.30605,18.57389],[-72.30581,18.57367],[-72.30555,18.57388],[-72.3007,18.57387],[-72.30059,18.57369],[-72.30044,18.57386],[-72.29691,18.57388],[-72.29518,18.57386],[-72.295,18.57371],[-72.29473,18.57341],[-72.29387,18.5722],[-72.29341,18.57156],[-72.29338,18.57142],[-72.2933,18.57075],[-72.29338,18.57008],[-72.29349,18.56992],[-72.29361,18.56978],[-72.29361,18.56985],[-72.29378,18.56959],[-72.29364,18.56957],[-72.29345,18.56951],[-72.29358,18.56919],[-72.29389,18.56859],[-72.29373,18.56847],[-72.29359,18.56827],[-72.29359,18.5681],[-72.29379,18.5679],[-72.29403,18.56774],[-72.29387,18.56762],[-72.29368,18.56743],[-72.29396,18.56457],[-72.29411,18.56426],[-72.29401,18.56418],[-72.29402,18.5638],[-72.29412,18.56283],[-72.29451,18.56209],[-72.29462,18.56196],[-72.29767,18.5617],[-72.29849,18.56192],[-72.29864,18.56184],[-72.29857,18.56174],[-72.2988,18.56157],[-72.30144,18.56133],[-72.30181,18.56176],[-72.30228,18.56125],[-72.30275,18.56122],[-72.30427,18.56126],[-72.30505,18.56147],[-72.30522,18.5613],[-72.30609,18.56132],[-72.30821,18.56138],[-72.31173,18.56168]]]},{id:"DroneImageryCanaanHaitiNovember2015",name:"Drone Imagery Canaan(Haiti) November 2015",type:"tms",template:"http://wms.openstreetmap.fr/tms/1.0.0/haiti_canaan_nov2015/{zoom}/{x}/{y}",endDate:"2015-11-01T00:00:00.000Z",startDate:"2015-11-01T00:00:00.000Z",polygon:[[[-72.23109,18.67676],[-72.23101,18.67675],[-72.23108,18.67675],[-72.23104,18.67669],[-72.23105,18.67665],[-72.23151,18.67663],[-72.23153,18.67665],[-72.23146,18.67676],[-72.23285,18.67669],[-72.23506,18.67641],[-72.23507,18.67638],[-72.23507,18.67635],[-72.23505,18.67635],[-72.23511,18.6762],[-72.23509,18.67614],[-72.23523,18.67613],[-72.23522,18.67611],[-72.23523,18.67606],[-72.2352,18.67598],[-72.23515,18.6758],[-72.23629,18.67565],[-72.23625,18.67553],[-72.23624,18.67551],[-72.23648,18.67548],[-72.23648,18.67565],[-72.23648,18.67581],[-72.23689,18.67575],[-72.2372,18.67571],[-72.23747,18.67567],[-72.23772,18.67563],[-72.23805,18.6756],[-72.23854,18.67555],[-72.23888,18.67552],[-72.239,18.67551],[-72.23897,18.67565],[-72.23897,18.67571],[-72.23901,18.67576],[-72.239,18.67576],[-72.23902,18.67584],[-72.23905,18.67589],[-72.23929,18.67587],[-72.23981,18.67581],[-72.24059,18.67571],[-72.24142,18.67561],[-72.24177,18.67556],[-72.24179,18.67553],[-72.2421,18.67551],[-72.24272,18.67545],[-72.24276,18.67536],[-72.24278,18.67537],[-72.24279,18.67537],[-72.24299,18.67536],[-72.24334,18.67535],[-72.24339,18.67535],[-72.2434,18.67534],[-72.24372,18.67532],[-72.24424,18.67525],[-72.24443,18.67509],[-72.2474,18.67253],[-72.24731,18.67233],[-72.24681,18.67157],[-72.2469,18.67061],[-72.24652,18.67055],[-72.24661,18.66991],[-72.24669,18.66991],[-72.24688,18.66884],[-72.24707,18.66789],[-72.24709,18.66749],[-72.24728,18.66743],[-72.24716,18.66691],[-72.24717,18.66642],[-72.24703,18.66644],[-72.24701,18.66616],[-72.24971,18.66598],[-72.24947,18.66475],[-72.24989,18.66489],[-72.24989,18.66507],[-72.25113,18.66515],[-72.25102,18.66548],[-72.25111,18.66548],[-72.25111,18.66559],[-72.25219,18.66551],[-72.25387,18.66554],[-72.25387,18.66563],[-72.25551,18.66559],[-72.25638,18.66484],[-72.25719,18.66359],[-72.25763,18.66208],[-72.25768,18.65694],[-72.25779,18.64996],[-72.25713,18.64563],[-72.25696,18.64517],[-72.25564,18.64352],[-72.2493,18.64358],[-72.2482,18.64361],[-72.24637,18.64397],[-72.24629,18.64462],[-72.24454,18.64436],[-72.24442,18.64527],[-72.24311,18.6455],[-72.24326,18.64639],[-72.24286,18.64794],[-72.24272,18.64801],[-72.24282,18.6482],[-72.24257,18.64894],[-72.24109,18.64902],[-72.24109,18.64918],[-72.2405,18.64906],[-72.24036,18.6495],[-72.2403,18.64863],[-72.23753,18.64915],[-72.23664,18.64899],[-72.23666,18.64883],[-72.23582,18.64888],[-72.23488,18.64878],[-72.23487,18.64893],[-72.2338,18.649],[-72.23384,18.64932],[-72.23262,18.64927],[-72.2325,18.64824],[-72.23028,18.64837],[-72.23028,18.64821],[-72.22743,18.64815],[-72.2263,18.64775],[-72.22608,18.64845],[-72.22583,18.64841],[-72.22576,18.64828],[-72.22417,18.64849],[-72.22417,18.64805],[-72.22166,18.64804],[-72.21921,18.6485],[-72.21767,18.64995],[-72.21719,18.6509],[-72.21637,18.65422],[-72.21633,18.65888],[-72.21633,18.66198],[-72.2171,18.66448],[-72.21737,18.66441],[-72.21814,18.66454],[-72.21864,18.66568],[-72.21837,18.66588],[-72.21881,18.66817],[-72.21881,18.66893],[-72.21846,18.66888],[-72.21884,18.67018],[-72.22015,18.67173],[-72.22175,18.67311],[-72.22175,18.67288],[-72.2225,18.67317],[-72.22257,18.67357],[-72.22241,18.67368],[-72.22489,18.67588],[-72.2287,18.67693],[-72.23073,18.6768],[-72.23111,18.67678],[-72.23109,18.67676]]]},{id:"drone-imagery-2016",name:"Drone Imagery Matthew(Haiti) October 2016",type:"tms",template:"https://imagery.openstreetmap.fr/tms/1.0.0/haiti_uav_201610/{zoom}/{x}/{y}",endDate:"2016-10-01T00:00:00.000Z",startDate:"2016-10-01T00:00:00.000Z",polygon:[[[-74.11291,18.64948],[-74.10903,18.64598],[-74.10873,18.64446],[-74.1095,18.64452],[-74.1095,18.64181],[-74.10968,18.64187],[-74.11053,18.64103],[-74.10988,18.64034],[-74.11005,18.64014],[-74.11005,18.64009],[-74.11011,18.64002],[-74.10949,18.63959],[-74.1095,18.63924],[-74.10904,18.63926],[-74.10894,18.63917],[-74.10905,18.63912],[-74.10898,18.63899],[-74.10782,18.63839],[-74.10823,18.63775],[-74.10812,18.63764],[-74.10786,18.63774],[-74.10768,18.63733],[-74.10748,18.63719],[-74.10722,18.63559],[-74.10901,18.63394],[-74.11678,18.62847],[-74.11952,18.62815],[-74.12251,18.63132],[-74.12731,18.63703],[-74.12684,18.6374],[-74.12731,18.63771],[-74.12768,18.63756],[-74.13403,18.64671],[-74.13401,18.64897],[-74.13087,18.65167],[-74.13076,18.65153],[-74.13053,18.65179],[-74.13054,18.65195],[-74.12878,18.65342],[-74.1274,18.65412],[-74.12514,18.65497],[-74.11997,18.65432],[-74.11938,18.65429],[-74.11291,18.64948]],[[-74.11305,18.4922],[-74.10884,18.49216],[-74.10118,18.49095],[-74.10105,18.49057],[-74.10131,18.4902],[-74.10101,18.48996],[-74.10142,18.48933],[-74.10099,18.48931],[-74.1009,18.48886],[-74.10166,18.48725],[-74.10108,18.48713],[-74.10133,18.48664],[-74.10058,18.48654],[-74.10048,18.48552],[-74.10062,18.4849],[-74.10037,18.48478],[-74.10012,18.4827],[-74.09994,18.48123],[-74.10033,18.48114],[-74.10242,18.48116],[-74.10492,18.48149],[-74.10771,18.48189],[-74.1099,18.48226],[-74.10987,18.48243],[-74.10992,18.48246],[-74.11018,18.48232],[-74.11196,18.48261],[-74.11247,18.48278],[-74.11316,18.48382],[-74.1134,18.48521],[-74.11349,18.48709],[-74.11338,18.48704],[-74.11336,18.48717],[-74.11349,18.48727],[-74.11355,18.48931],[-74.11349,18.48949],[-74.1135,18.48951],[-74.11349,18.48952],[-74.11347,18.48951],[-74.11334,18.48957],[-74.11336,18.48962],[-74.11341,18.48958],[-74.11344,18.48959],[-74.11349,18.48956],[-74.11352,18.48957],[-74.11355,18.48956],[-74.11357,18.48998],[-74.11359,18.49067],[-74.11354,18.49108],[-74.11322,18.492],[-74.11305,18.4922]],[[-74.10198,18.24954],[-74.09767,18.24744],[-74.09419,18.2474],[-74.09338,18.24885],[-74.09638,18.25292],[-74.09934,18.25335],[-74.10198,18.24954]],[[-74.02901,18.59744],[-74.02881,18.60255],[-74.00847,18.60182],[-74.00867,18.59671],[-74.02901,18.59744]],[[-73.91991,18.07466],[-73.91468,18.07482],[-73.91535,18.07742],[-73.91478,18.08009],[-73.91997,18.08014],[-73.91924,18.07802],[-73.91999,18.07637],[-73.91991,18.07466]],[[-74.22365,18.3081],[-74.22061,18.30272],[-74.21902,18.30278],[-74.21592,18.30364],[-74.21615,18.30804],[-74.22365,18.3081]],[[-74.00508,18.17646],[-74.00072,18.17657],[-74.00186,18.18175],[-74.00269,18.18344],[-74.00653,18.18336],[-74.00715,18.18218],[-74.00649,18.18056],[-74.0052,18.17922],[-74.00508,18.17646]],[[-74.0653,18.22881],[-74.06361,18.2268],[-74.06114,18.22672],[-74.05968,18.22853],[-74.06281,18.23083],[-74.06446,18.23034],[-74.0653,18.22881]],[[-74.11371,18.47184],[-74.11002,18.47177],[-74.10959,18.47536],[-74.11341,18.47497],[-74.11371,18.47184]],[[-73.95852,18.47452],[-73.95446,18.47465],[-73.95548,18.4794],[-73.95965,18.47878],[-73.95852,18.47452]],[[-74.16719,18.27229],[-74.16196,18.27232],[-74.16175,18.27303],[-74.16255,18.27452],[-74.16372,18.27542],[-74.16341,18.27749],[-74.16404,18.27854],[-74.16756,18.27868],[-74.16742,18.27592],[-74.16775,18.27416],[-74.16719,18.27229]],[[-74.11091,18.45286],[-74.10701,18.45258],[-74.10684,18.4586],[-74.11102,18.45781],[-74.11091,18.45286]],[[-73.76854,18.18022],[-73.75773,18.18006],[-73.73559,18.19311],[-73.73567,18.20143],[-73.74563,18.20191],[-73.74468,18.22311],[-73.77121,18.22417],[-73.77129,18.20844],[-73.76915,18.2064],[-73.76854,18.18022]],[[-74.13455,18.60914],[-74.1388,18.60929],[-74.13871,18.61165],[-74.13447,18.6115],[-74.13455,18.60914]],[[-74.04228,18.20945],[-74.042,18.20484],[-74.04155,18.20239],[-74.03959,18.20051],[-74.03836,18.20028],[-74.03764,18.20242],[-74.03792,18.20562],[-74.03918,18.20932],[-74.04228,18.20945]],[[-74.08668,18.61121],[-74.08669,18.61217],[-74.09146,18.61689],[-74.09211,18.61603],[-74.09313,18.61699],[-74.09603,18.62025],[-74.09627,18.6206],[-74.0967,18.62202],[-74.09337,18.62651],[-74.09237,18.62754],[-74.08862,18.62596],[-74.08863,18.62561],[-74.08778,18.62561],[-74.08661,18.6251],[-74.08662,18.62368],[-74.08514,18.62367],[-74.08462,18.62289],[-74.08463,18.62175],[-74.08339,18.62174],[-74.08261,18.62057],[-74.08262,18.61982],[-74.07659,18.6198],[-74.07658,18.61596],[-74.07255,18.61591],[-74.07259,18.61403],[-74.07062,18.61402],[-74.06858,18.6129],[-74.06855,18.61208],[-74.06614,18.61207],[-74.06414,18.61206],[-74.0625,18.61105],[-74.06254,18.61011],[-74.05927,18.61013],[-74.0545,18.60876],[-74.05451,18.60817],[-74.05168,18.60816],[-74.04932,18.60776],[-74.04647,18.60664],[-74.04646,18.6062],[-74.04243,18.6062],[-74.04133,18.60592],[-74.03625,18.60378],[-74.03597,18.60345],[-74.03642,18.60252],[-74.03719,18.6019],[-74.04003,18.60217],[-74.05608,18.60473],[-74.05851,18.6054],[-74.05861,18.60623],[-74.0611,18.60627],[-74.06481,18.60745],[-74.06518,18.60686],[-74.06679,18.60802],[-74.0696,18.60885],[-74.07142,18.60711],[-74.07239,18.60736],[-74.07515,18.61024],[-74.07701,18.61019],[-74.07798,18.61096],[-74.07901,18.61013],[-74.08109,18.61234],[-74.08234,18.60896],[-74.08383,18.60922],[-74.08513,18.60977],[-74.08668,18.61121]],[[-74.45922,18.4663],[-74.45589,18.46471],[-74.44779,18.47],[-74.44693,18.4713],[-74.44726,18.47934],[-74.44554,18.47915],[-74.44515,18.48326],[-74.43968,18.4839],[-74.439,18.48762],[-74.44299,18.49004],[-74.44906,18.49104],[-74.45382,18.49311],[-74.45571,18.49635],[-74.45786,18.49725],[-74.46052,18.49523],[-74.46241,18.49143],[-74.46198,18.48799],[-74.45537,18.48597],[-74.45526,18.47111],[-74.45944,18.46871],[-74.45922,18.4663]],[[-74.41888,18.57551],[-74.41499,18.57331],[-74.41045,18.57648],[-74.40824,18.58233],[-74.40954,18.58894],[-74.4112,18.59195],[-74.41081,18.59689],[-74.41663,18.60063],[-74.42178,18.59671],[-74.42146,18.59416],[-74.41745,18.59419],[-74.41753,18.59067],[-74.41538,18.59002],[-74.41533,18.58382],[-74.41652,18.58382],[-74.41756,18.5814],[-74.41756,18.57967],[-74.41924,18.57754],[-74.41888,18.57551]]]},{id:"Erlangen-2011",name:"Erlangen Luftbild (2011 5,0 cm)",type:"wms",template:"https://secure.erlangen.de/arcgiser/services/Luftbilder2011/MapServer/WmsServer?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=Erlangen_ratio10_5cm_gk4.jp2&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",endDate:"2011-01-01T00:00:00.000Z",startDate:"2011-01-01T00:00:00.000Z",polygon:[[[10.92791,49.53196],[10.97194,49.52969],[10.97821,49.53568],[10.99934,49.53589],[11.03214,49.53089],[11.04425,49.54317],[11.03842,49.55239],[11.03663,49.57167],[11.04029,49.58572],[11.07287,49.58587],[11.07243,49.63486],[11.0054,49.6344],[11.00397,49.62599],[10.9748,49.62541],[10.94293,49.64563],[10.92532,49.64876],[10.91002,49.63793],[10.92235,49.60463],[10.91949,49.57823],[10.91135,49.57095],[10.91256,49.5606],[10.92907,49.55674],[10.92791,49.53196]]],terms_text:"© Stadt Erlangen | © Aerowest GmbH"},{id:"Erlangen-2013",name:"Erlangen Luftbild (2013 6,25 cm)",type:"wms",template:"https://secure.erlangen.de/arcgiser/services/Luftbilder2013/MapServer/WmsServer?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=Erlangen_ratio5_6.25cm.jp2&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",endDate:"2013-01-01T00:00:00.000Z",startDate:"2013-01-01T00:00:00.000Z",polygon:[[[10.92791,49.53196],[10.9726,49.52939],[10.97909,49.53475],[10.99934,49.53589],[11.03214,49.53089],[11.04425,49.54317],[11.03842,49.55239],[11.03743,49.57873],[11.0568,49.592],[11.05748,49.61358],[11.04681,49.61447],[11.04788,49.6187],[11.00308,49.62367],[10.98107,49.62339],[10.98069,49.62617],[10.96737,49.62781],[10.96539,49.63415],[10.94293,49.64563],[10.92532,49.64876],[10.91002,49.63793],[10.92235,49.60463],[10.91949,49.57823],[10.91135,49.57095],[10.91256,49.5606],[10.92907,49.55674],[10.92791,49.53196]]],terms_text:"© Stadt Erlangen | © Aerowest GmbH"},{id:"Erlangen-2016",name:"Erlangen Luftbild (2016 5,0 cm)",type:"wms",template:"https://secure.erlangen.de/arcgiser/services/Luftbild2016/MapServer/WmsServer?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=0&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",endDate:"2016-03-18T00:00:00.000Z",startDate:"2016-03-18T00:00:00.000Z",polygon:[[[10.97664,49.53765],[10.99101,49.53392],[10.99389,49.53835],[11.02784,49.53254],[11.0346,49.53462],[11.03407,49.53759],[11.04318,49.54321],[11.03557,49.55303],[11.0384,49.55842],[11.03508,49.56929],[11.03791,49.58659],[11.04797,49.5902],[11.04922,49.5937],[11.05749,49.59521],[11.05623,49.59905],[11.05127,49.6003],[11.05351,49.60904],[11.04309,49.61381],[11.04076,49.61823],[11.0285,49.61735],[11.01929,49.61896],[11.0152,49.61372],[11.00581,49.61448],[11.00639,49.61931],[11.00083,49.6221],[10.9856,49.61651],[10.97837,49.61753],[10.9737,49.62495],[10.96539,49.62557],[10.96063,49.62856],[10.96382,49.63176],[10.95474,49.6379],[10.94837,49.637],[10.94185,49.64377],[10.9273,49.64837],[10.92063,49.63963],[10.91136,49.63773],[10.92429,49.60505],[10.92205,49.58004],[10.91221,49.57008],[10.91441,49.5618],[10.92353,49.55842],[10.92712,49.55976],[10.93345,49.55892],[10.93071,49.54467],[10.93067,49.53225],[10.9406,49.53325],[10.95488,49.53021],[10.97199,49.53126],[10.97664,49.53765]]],terms_text:"© Stadt Erlangen | © Geocart GmbH",best:true},{id:"EsriWorldImagery",name:"Esri World Imagery",type:"tms",template:"https://{switch:services,server}.arcgisonline.com/arcgis/rest/services/World_Imagery/MapServer/tile/{zoom}/{y}/{x}",zoomExtent:[0,22],terms_url:"https://wiki.openstreetmap.org/wiki/Esri",terms_text:"Terms & Feedback","default":true,description:"Esri world imagery.",icon:"https://osmlab.github.io/editor-layer-index/sources/world/EsriImageryClarity.png"},{id:"EsriWorldImageryClarity",name:"Esri World Imagery (Clarity) Beta",type:"tms",template:"https://clarity.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/MapServer/tile/{zoom}/{y}/{x}",zoomExtent:[0,22],terms_url:"https://wiki.openstreetmap.org/wiki/Esri",terms_text:"Terms & Feedback","default":true,description:"Esri archive imagery that may be clearer and more accurate than the default layer.",icon:"https://osmlab.github.io/editor-layer-index/sources/world/EsriImageryClarity.png"},{id:"maaamet.ee-pohi_vr2",name:"Estonia Basemap (Maaamet)",type:"wms",template:"https://kaart.maaamet.ee/wms/alus-geo?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&Layers=pohi_vr2&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",polygon:[[[22.35364,58.85385],[22.09411,58.85038],[22.09179,58.8951],[22.00503,58.89371],[21.99979,58.98374],[22.34754,58.98845],[22.34535,59.03337],[22.51935,59.03538],[22.51556,59.1251],[22.69017,59.12686],[22.69212,59.08218],[22.77912,59.083],[22.78083,59.03814],[22.86808,59.03877],[22.8693,58.99399],[22.9563,58.99487],[22.95495,59.03959],[23.12895,59.04097],[23.12786,59.08582],[23.47671,59.0877],[23.47415,59.26726],[23.64924,59.26788],[23.64888,59.31281],[23.73698,59.313],[23.73649,59.3578],[23.91158,59.35787],[23.91207,59.4028],[24.176,59.4028],[24.17637,59.4478],[24.26446,59.44767],[24.26471,59.49236],[24.70605,59.49082],[24.70898,59.62553],[24.79744,59.62497],[24.79659,59.58009],[24.97327,59.57885],[24.97462,59.62386],[24.88603,59.62473],[24.88725,59.66918],[24.9762,59.66863],[24.9773,59.71346],[25.06601,59.71259],[25.0632,59.62306],[25.24037,59.62145],[25.24184,59.66647],[25.33055,59.66548],[25.32884,59.62078],[25.41755,59.61979],[25.41938,59.66468],[25.6855,59.66148],[25.68757,59.70613],[25.86511,59.70386],[25.86279,59.65901],[26.12855,59.65507],[26.12575,59.6101],[26.39114,59.60565],[26.38809,59.56099],[26.82967,59.55215],[26.82626,59.50729],[26.91423,59.50549],[26.91057,59.46051],[27.96689,59.43303],[27.9719,59.4778],[28.03669,59.4757],[28.04377,59.47223],[28.04767,59.46578],[28.05182,59.46342],[28.06915,59.46256],[28.08452,59.45939],[28.12174,59.44091],[28.13577,59.4277],[28.13711,59.42267],[28.14163,59.41901],[28.16652,59.41205],[28.17225,59.40789],[28.19275,59.4015],[28.21069,59.3836],[28.21069,59.37994],[28.20386,59.37459],[28.21057,59.37235],[28.21105,59.36937],[28.20678,59.36719],[28.20703,59.36377],[28.19971,59.36091],[28.20203,59.35731],[28.19263,59.35227],[28.19397,59.34642],[28.16969,59.33354],[28.13626,59.29244],[28.12515,59.28901],[28.11722,59.28895],[28.1099,59.29063],[28.05353,59.2902],[28.02022,59.28334],[27.99825,59.2753],[27.97983,59.27293],[27.96433,59.27268],[27.95335,59.26863],[27.9492,59.26533],[27.90564,59.24044],[27.90113,59.23488],[27.901,59.22639],[27.89783,59.21746],[27.90235,59.20728],[27.89234,59.19222],[27.88978,59.18379],[27.87648,59.17372],[27.87184,59.16841],[27.86818,59.16159],[27.84414,59.14814],[27.83206,59.14401],[27.82035,59.13362],[27.80986,59.12905],[27.80595,59.12166],[27.80534,59.1127],[27.81071,59.10819],[27.8101,59.10606],[27.80205,59.1028],[27.78887,59.0909],[27.7907,59.08112],[27.79375,59.07842],[27.79411,59.07566],[27.79277,59.0729],[27.79302,59.06927],[27.7885,59.06657],[27.78265,59.065],[27.77508,59.0581],[27.77313,59.05107],[27.77667,59.04743],[27.76983,59.03325],[27.76605,59.03155],[27.75153,59.03017],[27.74628,59.02716],[27.74567,59.01705],[27.74165,59.00951],[27.74787,58.99267],[27.74274,58.98845],[27.73213,58.9855],[27.6544,58.98783],[27.65501,58.99241],[27.39414,58.99964],[27.38974,58.95474],[27.12935,58.96135],[27.12557,58.9164],[27.03882,58.91841],[27.0271,58.7841],[27.11361,58.78183],[27.10934,58.73709],[27.19537,58.73512],[27.18731,58.64533],[27.27309,58.64305],[27.25259,58.41883],[27.53397,58.41142],[27.5552,58.36575],[27.51762,58.33265],[27.51408,58.32214],[27.49993,58.32246],[27.48687,58.18803],[27.52872,58.18687],[27.59205,58.11875],[27.63695,58.09735],[27.60938,58.05399],[27.62268,58.0058],[27.64489,58.00205],[27.65294,58.00644],[27.64781,58.01426],[27.64781,58.02086],[27.66172,58.01866],[27.66856,58.01045],[27.68393,58.00845],[27.6965,58.0045],[27.70065,57.99862],[27.69882,57.98827],[27.69125,57.98549],[27.68064,57.97449],[27.6821,57.9719],[27.68893,57.97184],[27.68588,57.95928],[27.65892,57.9554],[27.66758,57.951],[27.67161,57.94627],[27.66917,57.94174],[27.67649,57.93552],[27.68247,57.93655],[27.68613,57.92794],[27.68247,57.92437],[27.71078,57.92392],[27.72029,57.92036],[27.72054,57.91174],[27.70834,57.90616],[27.69882,57.90616],[27.70614,57.90136],[27.72896,57.90739],[27.74677,57.90169],[27.7536,57.90409],[27.75739,57.90318],[27.75592,57.89806],[27.76959,57.89566],[27.78094,57.89832],[27.799,57.89961],[27.81852,57.89579],[27.82096,57.89047],[27.81949,57.888],[27.81059,57.88612],[27.81827,57.88249],[27.81169,57.87204],[27.81583,57.87166],[27.8184,57.8651],[27.81632,57.86134],[27.79875,57.85205],[27.7946,57.84634],[27.80058,57.8442],[27.7957,57.84017],[27.78862,57.84186],[27.78411,57.83725],[27.77715,57.8325],[27.75849,57.83536],[27.74165,57.82679],[27.72383,57.83179],[27.70541,57.84192],[27.68771,57.83419],[27.66636,57.83653],[27.66026,57.83893],[27.64818,57.8377],[27.63634,57.83978],[27.62487,57.83751],[27.62207,57.83874],[27.59791,57.83328],[27.56252,57.83023],[27.5563,57.83127],[27.55227,57.82113],[27.54446,57.82204],[27.5452,57.81808],[27.55056,57.81769],[27.55667,57.81366],[27.5408,57.81288],[27.54471,57.808],[27.53726,57.80644],[27.53958,57.80144],[27.53592,57.79663],[27.53861,57.79396],[27.52921,57.78856],[27.5175,57.78876],[27.51847,57.79201],[27.50298,57.78798],[27.50005,57.78973],[27.4959,57.78869],[27.50774,57.78349],[27.51457,57.77516],[27.5081,57.77158],[27.51115,57.76416],[27.51591,57.7639],[27.52018,57.75993],[27.52811,57.75818],[27.53007,57.75368],[27.53116,57.74073],[27.548,57.7333],[27.5419,57.73037],[27.52799,57.72946],[27.5236,57.71616],[27.52762,57.70899],[27.5236,57.70802],[27.51652,57.70873],[27.51066,57.71101],[27.50859,57.70723],[27.49993,57.70495],[27.49529,57.70749],[27.48711,57.7191],[27.47357,57.71545],[27.47064,57.70802],[27.46149,57.70619],[27.44807,57.71616],[27.43086,57.70756],[27.42818,57.69902],[27.41341,57.69915],[27.41647,57.69524],[27.40744,57.69276],[27.40231,57.68493],[27.39133,57.68539],[27.39377,57.67913],[27.39145,57.67671],[27.38193,57.67332],[27.37779,57.66836],[27.38364,57.66059],[27.3801,57.65883],[27.38755,57.6555],[27.38047,57.6495],[27.38352,57.64799],[27.38157,57.64368],[27.39072,57.6431],[27.38816,57.64009],[27.40085,57.63742],[27.40317,57.62905],[27.40182,57.62376],[27.39597,57.62115],[27.39023,57.62036],[27.39084,57.6169],[27.40195,57.61775],[27.40634,57.61546],[27.40683,57.61246],[27.38572,57.60304],[27.37827,57.59513],[27.35692,57.59696],[27.3413,57.58984],[27.34179,57.58539],[27.32886,57.5797],[27.32141,57.57898],[27.3341,57.56596],[27.33178,57.56066],[27.33776,57.56007],[27.33886,57.54671],[27.34386,57.5454],[27.35472,57.52575],[27.35131,57.51632],[27.34569,57.52104],[27.32446,57.52274],[27.29664,57.53859],[27.28017,57.53643],[27.2737,57.54311],[27.26431,57.54377],[27.2637,57.54841],[27.25772,57.54979],[27.24796,57.54769],[27.2249,57.55385],[27.19329,57.54966],[27.16145,57.55922],[27.11654,57.56118],[27.10092,57.5653],[27.08506,57.57538],[27.07262,57.57734],[27.07225,57.57989],[27.0559,57.58251],[27.05285,57.58087],[27.04687,57.58048],[27.04492,57.58251],[27.0332,57.58532],[27.04126,57.58761],[27.04418,57.5967],[27.03101,57.60461],[26.99513,57.60461],[26.99233,57.61076],[26.98696,57.60867],[26.98366,57.61174],[26.97549,57.612],[26.97097,57.60448],[26.9595,57.60625],[26.9578,57.60468],[26.94596,57.60272],[26.93961,57.60932],[26.95133,57.61579],[26.94999,57.62056],[26.94059,57.61978],[26.92961,57.62376],[26.92644,57.6331],[26.90679,57.63304],[26.89971,57.63056],[26.90057,57.62918],[26.89581,57.62572],[26.88849,57.62357],[26.88898,57.62193],[26.87458,57.61906],[26.87275,57.61736],[26.86555,57.61592],[26.85786,57.60997],[26.86469,57.6084],[26.85811,57.60049],[26.85994,57.59598],[26.86433,57.59415],[26.86177,57.59108],[26.84688,57.5884],[26.83504,57.58244],[26.81589,57.58153],[26.80954,57.58473],[26.79685,57.58179],[26.79929,57.58002],[26.79295,57.57315],[26.78685,57.57525],[26.7766,57.55994],[26.76915,57.56039],[26.76354,57.56314],[26.75366,57.56249],[26.75817,57.5653],[26.76891,57.57041],[26.77379,57.57473],[26.76769,57.57754],[26.74804,57.5778],[26.75317,57.58009],[26.73816,57.58774],[26.72901,57.58016],[26.73828,57.57584],[26.73072,57.56903],[26.72388,57.57244],[26.71107,57.56596],[26.69972,57.57106],[26.69753,57.5706],[26.69741,57.56733],[26.69155,57.56615],[26.67569,57.56668],[26.67105,57.56327],[26.6719,57.55385],[26.66531,57.55287],[26.64652,57.55391],[26.64262,57.54658],[26.63444,57.54357],[26.61443,57.52909],[26.61712,57.50885],[26.60467,57.51212],[26.60479,57.51442],[26.5954,57.51376],[26.59479,57.51592],[26.58808,57.51619],[26.59015,57.52516],[26.58698,57.52621],[26.58771,57.53781],[26.58381,57.53957],[26.57978,57.53695],[26.57966,57.53375],[26.56123,57.5285],[26.56184,57.52261],[26.5666,57.51946],[26.55794,57.5137],[26.52585,57.51619],[26.49961,57.52451],[26.49095,57.54534],[26.46996,57.57551],[26.40151,57.57237],[26.34489,57.58408],[26.33476,57.5797],[26.32781,57.57963],[26.32635,57.58277],[26.3117,57.58473],[26.30853,57.59291],[26.3006,57.59343],[26.29291,57.59114],[26.28352,57.59232],[26.28217,57.5952],[26.27754,57.595],[26.27034,57.6001],[26.27022,57.60461],[26.25423,57.61383],[26.24715,57.62082],[26.24813,57.62775],[26.23947,57.63408],[26.24203,57.63539],[26.24667,57.63559],[26.23959,57.64649],[26.23239,57.6461],[26.23117,57.64904],[26.24215,57.65146],[26.2363,57.65753],[26.23032,57.65805],[26.21043,57.66601],[26.21372,57.66888],[26.21092,57.67071],[26.21018,57.67906],[26.20079,57.68102],[26.19896,57.68356],[26.19444,57.68519],[26.18541,57.68454],[26.17712,57.68761],[26.18871,57.69472],[26.19859,57.70906],[26.20567,57.71486],[26.1726,57.72867],[26.141,57.73278],[26.13563,57.73923],[26.13905,57.74548],[26.13551,57.7503],[26.10537,57.757],[26.08035,57.76547],[26.07974,57.76384],[26.07328,57.76371],[26.07047,57.7656],[26.05912,57.75987],[26.049,57.7611],[26.0435,57.76703],[26.03326,57.77054],[26.02374,57.76761],[26.01776,57.7723],[26.02459,57.77516],[26.02496,57.7816],[26.02252,57.78355],[26.02776,57.7898],[26.03081,57.79097],[26.03338,57.80105],[26.03679,57.80592],[26.03606,57.8108],[26.04851,57.82289],[26.05705,57.83842],[26.05558,57.84764],[26.03667,57.84926],[26.02008,57.84517],[26.00958,57.85731],[25.99848,57.85816],[25.96273,57.84491],[25.931,57.85244],[25.89537,57.84972],[25.8883,57.84595],[25.88085,57.84946],[25.88573,57.85277],[25.88427,57.85595],[25.87561,57.85796],[25.87475,57.86322],[25.8595,57.85614],[25.81923,57.86419],[25.78312,57.89948],[25.78629,57.90428],[25.77165,57.91206],[25.75102,57.91692],[25.73724,57.92295],[25.72833,57.92133],[25.72247,57.91245],[25.70356,57.90331],[25.67916,57.90461],[25.67549,57.91277],[25.66207,57.91511],[25.65609,57.91439],[25.64889,57.91666],[25.64987,57.91841],[25.63828,57.93059],[25.57983,57.9442],[25.59399,57.95961],[25.58935,57.96504],[25.58239,57.96783],[25.58044,57.9721],[25.57483,57.9741],[25.56556,57.96718],[25.56604,57.96258],[25.55714,57.96038],[25.55567,57.96711],[25.55079,57.97255],[25.53725,57.97139],[25.52566,57.97184],[25.5226,57.96802],[25.51638,57.96737],[25.51211,57.96977],[25.52212,57.97488],[25.51943,57.98031],[25.48539,57.97475],[25.47843,57.98006],[25.47843,57.98264],[25.44219,57.99616],[25.44817,58.00114],[25.46648,58.00515],[25.44817,58.01698],[25.40693,58.02893],[25.37155,58.02926],[25.36374,58.03171],[25.35336,58.04334],[25.34482,58.04676],[25.33604,58.05709],[25.3292,58.05858],[25.32664,58.0638],[25.31981,58.066],[25.31908,58.06929],[25.29553,58.08161],[25.28686,58.08149],[25.28113,58.07019],[25.266,58.06716],[25.26502,58.06],[25.27991,58.05063],[25.29309,58.0467],[25.30431,58.03449],[25.30114,58.01504],[25.29748,58.01459],[25.30285,58.00011],[25.29577,57.99972],[25.29736,57.99661],[25.30358,57.99396],[25.30138,57.99273],[25.29187,57.99286],[25.28308,57.98963],[25.26722,57.99454],[25.25611,57.9939],[25.25502,58.00347],[25.2455,58.00302],[25.22768,58.01782],[25.24587,58.01872],[25.23562,58.02286],[25.23635,58.02441],[25.22732,58.02435],[25.22537,58.02195],[25.21902,58.02977],[25.21658,58.04088],[25.22695,58.04799],[25.22817,58.05348],[25.22122,58.05302],[25.22146,58.05051],[25.2178,58.04908],[25.21597,58.05954],[25.21219,58.06226],[25.20523,58.06122],[25.20389,58.0651],[25.21621,58.07413],[25.21207,58.08052],[25.19962,58.08536],[25.18949,58.08007],[25.19169,58.07613],[25.1535,58.07478],[25.15154,58.07703],[25.13397,58.07974],[25.10579,58.07749],[25.10518,58.06645],[25.07662,58.06645],[25.02037,58.01769],[24.99512,58.01084],[24.94863,58.00942],[24.83234,57.97177],[24.80806,57.99066],[24.74229,57.98187],[24.74339,57.96491],[24.7329,57.96239],[24.71508,57.96271],[24.6919,57.94653],[24.67335,57.95896],[24.64468,57.95889],[24.64187,57.95423],[24.64577,57.95268],[24.62869,57.94193],[24.61612,57.94368],[24.60892,57.95125],[24.58464,57.96174],[24.57317,57.95436],[24.54792,57.94938],[24.54352,57.94478],[24.5301,57.94705],[24.5207,57.94303],[24.51839,57.93675],[24.5096,57.93442],[24.51326,57.93066],[24.4625,57.92496],[24.44579,57.90798],[24.46018,57.90662],[24.45225,57.89942],[24.46006,57.87977],[24.41138,57.86491],[24.40906,57.87191],[24.33707,57.87393],[24.33829,58.0109],[24.42272,58.01097],[24.42614,58.28002],[24.51155,58.2797],[24.51216,58.32471],[24.42638,58.32503],[24.42712,58.36972],[24.34182,58.37017],[24.34048,58.23547],[24.17014,58.23572],[24.17014,58.1908],[24.08485,58.19092],[24.0851,58.23605],[24.00066,58.23579],[23.99993,58.28092],[23.82971,58.28047],[23.82947,58.32554],[23.65864,58.32496],[23.65791,58.41493],[23.57225,58.41468],[23.57127,58.50436],[23.39935,58.50359],[23.40106,58.41391],[23.14421,58.41238],[23.14567,58.36735],[23.05989,58.36703],[23.06172,58.32221],[22.9757,58.32157],[22.97716,58.27681],[22.89187,58.27598],[22.89358,58.23103],[22.80865,58.2302],[22.81012,58.18539],[22.89529,58.1861],[22.89663,58.1413],[22.72641,58.13982],[22.72495,58.18475],[22.55522,58.18276],[22.55693,58.13744],[22.64173,58.13886],[22.64344,58.094],[22.38903,58.0909],[22.38525,58.18063],[22.29995,58.17967],[22.30679,58.04527],[22.22198,58.0436],[22.22626,57.95404],[22.14206,57.95281],[22.1445,57.90804],[22.06007,57.90681],[22.06263,57.86186],[21.97807,57.86043],[21.96831,58.04004],[22.05274,58.04134],[22.04506,58.17581],[21.96038,58.17471],[21.95781,58.21941],[21.78723,58.21638],[21.78211,58.30631],[21.69681,58.3049],[21.69401,58.34975],[21.77942,58.35122],[21.76795,58.53074],[22.02566,58.53488],[22.02797,58.49001],[22.11375,58.49167],[22.11144,58.53621],[22.19709,58.53742],[22.19453,58.5823],[22.45236,58.58573],[22.44638,58.7203],[22.36023,58.71916],[22.35364,58.85385]],[[23.47415,59.26726],[23.29868,59.26632],[23.29795,59.31138],[23.47293,59.31194],[23.47415,59.26726]],[[24.17014,58.1908],[24.25507,58.19073],[24.25458,58.14581],[24.17002,58.14588],[24.17014,58.1908]],[[24.08485,58.19092],[24.08497,58.10129],[23.99968,58.10116],[23.99993,58.05632],[23.91525,58.05612],[23.915,58.14613],[23.83032,58.146],[23.82971,58.23572],[23.91451,58.23585],[23.91476,58.19099],[24.08485,58.19092]],[[24.61854,59.53612],[24.44183,59.5368],[24.44309,59.62659],[24.62016,59.6258],[24.61854,59.53612]],[[26.40403,59.7852],[26.31501,59.78667],[26.31814,59.83152],[26.40732,59.82994],[26.40403,59.7852]],[[26.48308,59.649],[26.48647,59.69383],[26.57514,59.69202],[26.57166,59.64719],[26.48308,59.649]],[[23.15944,57.78408],[23.24346,57.78461],[23.24445,57.73971],[23.32848,57.74031],[23.32679,57.82998],[23.15845,57.82885],[23.15944,57.78408]]],terms_text:"Maa-Ameti põhikaart"},{id:"Maaamet-Estonia_Cadastre",name:"Estonia Cadastre (Maaamet)",type:"wms",template:"https://kaart.maaamet.ee/wms/alus-geo?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&Layers=of10000,TOPOYKSUS_6569,TOPOYKSUS_6573&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",polygon:[[[22.35364,58.85385],[22.09411,58.85038],[22.09179,58.8951],[22.00503,58.89371],[21.99979,58.98374],[22.34754,58.98845],[22.34535,59.03337],[22.51935,59.03538],[22.51556,59.1251],[22.69017,59.12686],[22.69212,59.08218],[22.77912,59.083],[22.78083,59.03814],[22.86808,59.03877],[22.8693,58.99399],[22.9563,58.99487],[22.95495,59.03959],[23.12895,59.04097],[23.12786,59.08582],[23.47671,59.0877],[23.47415,59.26726],[23.64924,59.26788],[23.64888,59.31281],[23.73698,59.313],[23.73649,59.3578],[23.91158,59.35787],[23.91207,59.4028],[24.176,59.4028],[24.17637,59.4478],[24.26446,59.44767],[24.26471,59.49236],[24.70605,59.49082],[24.70898,59.62553],[24.79744,59.62497],[24.79659,59.58009],[24.97327,59.57885],[24.97462,59.62386],[24.88603,59.62473],[24.88725,59.66918],[24.9762,59.66863],[24.9773,59.71346],[25.06601,59.71259],[25.0632,59.62306],[25.24037,59.62145],[25.24184,59.66647],[25.33055,59.66548],[25.32884,59.62078],[25.41755,59.61979],[25.41938,59.66468],[25.6855,59.66148],[25.68757,59.70613],[25.86511,59.70386],[25.86279,59.65901],[26.12855,59.65507],[26.12575,59.6101],[26.39114,59.60565],[26.38809,59.56099],[26.82967,59.55215],[26.82626,59.50729],[26.91423,59.50549],[26.91057,59.46051],[27.96689,59.43303],[27.9719,59.4778],[28.03669,59.4757],[28.04377,59.47223],[28.04767,59.46578],[28.05182,59.46342],[28.06915,59.46256],[28.08452,59.45939],[28.12174,59.44091],[28.13577,59.4277],[28.13711,59.42267],[28.14163,59.41901],[28.16652,59.41205],[28.17225,59.40789],[28.19275,59.4015],[28.21069,59.3836],[28.21069,59.37994],[28.20386,59.37459],[28.21057,59.37235],[28.21105,59.36937],[28.20678,59.36719],[28.20703,59.36377],[28.19971,59.36091],[28.20203,59.35731],[28.19263,59.35227],[28.19397,59.34642],[28.16969,59.33354],[28.13626,59.29244],[28.12515,59.28901],[28.11722,59.28895],[28.1099,59.29063],[28.05353,59.2902],[28.02022,59.28334],[27.99825,59.2753],[27.97983,59.27293],[27.96433,59.27268],[27.95335,59.26863],[27.9492,59.26533],[27.90564,59.24044],[27.90113,59.23488],[27.901,59.22639],[27.89783,59.21746],[27.90235,59.20728],[27.89234,59.19222],[27.88978,59.18379],[27.87648,59.17372],[27.87184,59.16841],[27.86818,59.16159],[27.84414,59.14814],[27.83206,59.14401],[27.82035,59.13362],[27.80986,59.12905],[27.80595,59.12166],[27.80534,59.1127],[27.81071,59.10819],[27.8101,59.10606],[27.80205,59.1028],[27.78887,59.0909],[27.7907,59.08112],[27.79375,59.07842],[27.79411,59.07566],[27.79277,59.0729],[27.79302,59.06927],[27.7885,59.06657],[27.78265,59.065],[27.77508,59.0581],[27.77313,59.05107],[27.77667,59.04743],[27.76983,59.03325],[27.76605,59.03155],[27.75153,59.03017],[27.74628,59.02716],[27.74567,59.01705],[27.74165,59.00951],[27.74787,58.99267],[27.74274,58.98845],[27.73213,58.9855],[27.6544,58.98783],[27.65501,58.99241],[27.39414,58.99964],[27.38974,58.95474],[27.12935,58.96135],[27.12557,58.9164],[27.03882,58.91841],[27.0271,58.7841],[27.11361,58.78183],[27.10934,58.73709],[27.19537,58.73512],[27.18731,58.64533],[27.27309,58.64305],[27.25259,58.41883],[27.53397,58.41142],[27.5552,58.36575],[27.51762,58.33265],[27.51408,58.32214],[27.49993,58.32246],[27.48687,58.18803],[27.52872,58.18687],[27.59205,58.11875],[27.63695,58.09735],[27.60938,58.05399],[27.62268,58.0058],[27.64489,58.00205],[27.65294,58.00644],[27.64781,58.01426],[27.64781,58.02086],[27.66172,58.01866],[27.66856,58.01045],[27.68393,58.00845],[27.6965,58.0045],[27.70065,57.99862],[27.69882,57.98827],[27.69125,57.98549],[27.68064,57.97449],[27.6821,57.9719],[27.68893,57.97184],[27.68588,57.95928],[27.65892,57.9554],[27.66758,57.951],[27.67161,57.94627],[27.66917,57.94174],[27.67649,57.93552],[27.68247,57.93655],[27.68613,57.92794],[27.68247,57.92437],[27.71078,57.92392],[27.72029,57.92036],[27.72054,57.91174],[27.70834,57.90616],[27.69882,57.90616],[27.70614,57.90136],[27.72896,57.90739],[27.74677,57.90169],[27.7536,57.90409],[27.75739,57.90318],[27.75592,57.89806],[27.76959,57.89566],[27.78094,57.89832],[27.799,57.89961],[27.81852,57.89579],[27.82096,57.89047],[27.81949,57.888],[27.81059,57.88612],[27.81827,57.88249],[27.81169,57.87204],[27.81583,57.87166],[27.8184,57.8651],[27.81632,57.86134],[27.79875,57.85205],[27.7946,57.84634],[27.80058,57.8442],[27.7957,57.84017],[27.78862,57.84186],[27.78411,57.83725],[27.77715,57.8325],[27.75849,57.83536],[27.74165,57.82679],[27.72383,57.83179],[27.70541,57.84192],[27.68771,57.83419],[27.66636,57.83653],[27.66026,57.83893],[27.64818,57.8377],[27.63634,57.83978],[27.62487,57.83751],[27.62207,57.83874],[27.59791,57.83328],[27.56252,57.83023],[27.5563,57.83127],[27.55227,57.82113],[27.54446,57.82204],[27.5452,57.81808],[27.55056,57.81769],[27.55667,57.81366],[27.5408,57.81288],[27.54471,57.808],[27.53726,57.80644],[27.53958,57.80144],[27.53592,57.79663],[27.53861,57.79396],[27.52921,57.78856],[27.5175,57.78876],[27.51847,57.79201],[27.50298,57.78798],[27.50005,57.78973],[27.4959,57.78869],[27.50774,57.78349],[27.51457,57.77516],[27.5081,57.77158],[27.51115,57.76416],[27.51591,57.7639],[27.52018,57.75993],[27.52811,57.75818],[27.53007,57.75368],[27.53116,57.74073],[27.548,57.7333],[27.5419,57.73037],[27.52799,57.72946],[27.5236,57.71616],[27.52762,57.70899],[27.5236,57.70802],[27.51652,57.70873],[27.51066,57.71101],[27.50859,57.70723],[27.49993,57.70495],[27.49529,57.70749],[27.48711,57.7191],[27.47357,57.71545],[27.47064,57.70802],[27.46149,57.70619],[27.44807,57.71616],[27.43086,57.70756],[27.42818,57.69902],[27.41341,57.69915],[27.41647,57.69524],[27.40744,57.69276],[27.40231,57.68493],[27.39133,57.68539],[27.39377,57.67913],[27.39145,57.67671],[27.38193,57.67332],[27.37779,57.66836],[27.38364,57.66059],[27.3801,57.65883],[27.38755,57.6555],[27.38047,57.6495],[27.38352,57.64799],[27.38157,57.64368],[27.39072,57.6431],[27.38816,57.64009],[27.40085,57.63742],[27.40317,57.62905],[27.40182,57.62376],[27.39597,57.62115],[27.39023,57.62036],[27.39084,57.6169],[27.40195,57.61775],[27.40634,57.61546],[27.40683,57.61246],[27.38572,57.60304],[27.37827,57.59513],[27.35692,57.59696],[27.3413,57.58984],[27.34179,57.58539],[27.32886,57.5797],[27.32141,57.57898],[27.3341,57.56596],[27.33178,57.56066],[27.33776,57.56007],[27.33886,57.54671],[27.34386,57.5454],[27.35472,57.52575],[27.35131,57.51632],[27.34569,57.52104],[27.32446,57.52274],[27.29664,57.53859],[27.28017,57.53643],[27.2737,57.54311],[27.26431,57.54377],[27.2637,57.54841],[27.25772,57.54979],[27.24796,57.54769],[27.2249,57.55385],[27.19329,57.54966],[27.16145,57.55922],[27.11654,57.56118],[27.10092,57.5653],[27.08506,57.57538],[27.07262,57.57734],[27.07225,57.57989],[27.0559,57.58251],[27.05285,57.58087],[27.04687,57.58048],[27.04492,57.58251],[27.0332,57.58532],[27.04126,57.58761],[27.04418,57.5967],[27.03101,57.60461],[26.99513,57.60461],[26.99233,57.61076],[26.98696,57.60867],[26.98366,57.61174],[26.97549,57.612],[26.97097,57.60448],[26.9595,57.60625],[26.9578,57.60468],[26.94596,57.60272],[26.93961,57.60932],[26.95133,57.61579],[26.94999,57.62056],[26.94059,57.61978],[26.92961,57.62376],[26.92644,57.6331],[26.90679,57.63304],[26.89971,57.63056],[26.90057,57.62918],[26.89581,57.62572],[26.88849,57.62357],[26.88898,57.62193],[26.87458,57.61906],[26.87275,57.61736],[26.86555,57.61592],[26.85786,57.60997],[26.86469,57.6084],[26.85811,57.60049],[26.85994,57.59598],[26.86433,57.59415],[26.86177,57.59108],[26.84688,57.5884],[26.83504,57.58244],[26.81589,57.58153],[26.80954,57.58473],[26.79685,57.58179],[26.79929,57.58002],[26.79295,57.57315],[26.78685,57.57525],[26.7766,57.55994],[26.76915,57.56039],[26.76354,57.56314],[26.75366,57.56249],[26.75817,57.5653],[26.76891,57.57041],[26.77379,57.57473],[26.76769,57.57754],[26.74804,57.5778],[26.75317,57.58009],[26.73816,57.58774],[26.72901,57.58016],[26.73828,57.57584],[26.73072,57.56903],[26.72388,57.57244],[26.71107,57.56596],[26.69972,57.57106],[26.69753,57.5706],[26.69741,57.56733],[26.69155,57.56615],[26.67569,57.56668],[26.67105,57.56327],[26.6719,57.55385],[26.66531,57.55287],[26.64652,57.55391],[26.64262,57.54658],[26.63444,57.54357],[26.61443,57.52909],[26.61712,57.50885],[26.60467,57.51212],[26.60479,57.51442],[26.5954,57.51376],[26.59479,57.51592],[26.58808,57.51619],[26.59015,57.52516],[26.58698,57.52621],[26.58771,57.53781],[26.58381,57.53957],[26.57978,57.53695],[26.57966,57.53375],[26.56123,57.5285],[26.56184,57.52261],[26.5666,57.51946],[26.55794,57.5137],[26.52585,57.51619],[26.49961,57.52451],[26.49095,57.54534],[26.46996,57.57551],[26.40151,57.57237],[26.34489,57.58408],[26.33476,57.5797],[26.32781,57.57963],[26.32635,57.58277],[26.3117,57.58473],[26.30853,57.59291],[26.3006,57.59343],[26.29291,57.59114],[26.28352,57.59232],[26.28217,57.5952],[26.27754,57.595],[26.27034,57.6001],[26.27022,57.60461],[26.25423,57.61383],[26.24715,57.62082],[26.24813,57.62775],[26.23947,57.63408],[26.24203,57.63539],[26.24667,57.63559],[26.23959,57.64649],[26.23239,57.6461],[26.23117,57.64904],[26.24215,57.65146],[26.2363,57.65753],[26.23032,57.65805],[26.21043,57.66601],[26.21372,57.66888],[26.21092,57.67071],[26.21018,57.67906],[26.20079,57.68102],[26.19896,57.68356],[26.19444,57.68519],[26.18541,57.68454],[26.17712,57.68761],[26.18871,57.69472],[26.19859,57.70906],[26.20567,57.71486],[26.1726,57.72867],[26.141,57.73278],[26.13563,57.73923],[26.13905,57.74548],[26.13551,57.7503],[26.10537,57.757],[26.08035,57.76547],[26.07974,57.76384],[26.07328,57.76371],[26.07047,57.7656],[26.05912,57.75987],[26.049,57.7611],[26.0435,57.76703],[26.03326,57.77054],[26.02374,57.76761],[26.01776,57.7723],[26.02459,57.77516],[26.02496,57.7816],[26.02252,57.78355],[26.02776,57.7898],[26.03081,57.79097],[26.03338,57.80105],[26.03679,57.80592],[26.03606,57.8108],[26.04851,57.82289],[26.05705,57.83842],[26.05558,57.84764],[26.03667,57.84926],[26.02008,57.84517],[26.00958,57.85731],[25.99848,57.85816],[25.96273,57.84491],[25.931,57.85244],[25.89537,57.84972],[25.8883,57.84595],[25.88085,57.84946],[25.88573,57.85277],[25.88427,57.85595],[25.87561,57.85796],[25.87475,57.86322],[25.8595,57.85614],[25.81923,57.86419],[25.78312,57.89948],[25.78629,57.90428],[25.77165,57.91206],[25.75102,57.91692],[25.73724,57.92295],[25.72833,57.92133],[25.72247,57.91245],[25.70356,57.90331],[25.67916,57.90461],[25.67549,57.91277],[25.66207,57.91511],[25.65609,57.91439],[25.64889,57.91666],[25.64987,57.91841],[25.63828,57.93059],[25.57983,57.9442],[25.59399,57.95961],[25.58935,57.96504],[25.58239,57.96783],[25.58044,57.9721],[25.57483,57.9741],[25.56556,57.96718],[25.56604,57.96258],[25.55714,57.96038],[25.55567,57.96711],[25.55079,57.97255],[25.53725,57.97139],[25.52566,57.97184],[25.5226,57.96802],[25.51638,57.96737],[25.51211,57.96977],[25.52212,57.97488],[25.51943,57.98031],[25.48539,57.97475],[25.47843,57.98006],[25.47843,57.98264],[25.44219,57.99616],[25.44817,58.00114],[25.46648,58.00515],[25.44817,58.01698],[25.40693,58.02893],[25.37155,58.02926],[25.36374,58.03171],[25.35336,58.04334],[25.34482,58.04676],[25.33604,58.05709],[25.3292,58.05858],[25.32664,58.0638],[25.31981,58.066],[25.31908,58.06929],[25.29553,58.08161],[25.28686,58.08149],[25.28113,58.07019],[25.266,58.06716],[25.26502,58.06],[25.27991,58.05063],[25.29309,58.0467],[25.30431,58.03449],[25.30114,58.01504],[25.29748,58.01459],[25.30285,58.00011],[25.29577,57.99972],[25.29736,57.99661],[25.30358,57.99396],[25.30138,57.99273],[25.29187,57.99286],[25.28308,57.98963],[25.26722,57.99454],[25.25611,57.9939],[25.25502,58.00347],[25.2455,58.00302],[25.22768,58.01782],[25.24587,58.01872],[25.23562,58.02286],[25.23635,58.02441],[25.22732,58.02435],[25.22537,58.02195],[25.21902,58.02977],[25.21658,58.04088],[25.22695,58.04799],[25.22817,58.05348],[25.22122,58.05302],[25.22146,58.05051],[25.2178,58.04908],[25.21597,58.05954],[25.21219,58.06226],[25.20523,58.06122],[25.20389,58.0651],[25.21621,58.07413],[25.21207,58.08052],[25.19962,58.08536],[25.18949,58.08007],[25.19169,58.07613],[25.1535,58.07478],[25.15154,58.07703],[25.13397,58.07974],[25.10579,58.07749],[25.10518,58.06645],[25.07662,58.06645],[25.02037,58.01769],[24.99512,58.01084],[24.94863,58.00942],[24.83234,57.97177],[24.80806,57.99066],[24.74229,57.98187],[24.74339,57.96491],[24.7329,57.96239],[24.71508,57.96271],[24.6919,57.94653],[24.67335,57.95896],[24.64468,57.95889],[24.64187,57.95423],[24.64577,57.95268],[24.62869,57.94193],[24.61612,57.94368],[24.60892,57.95125],[24.58464,57.96174],[24.57317,57.95436],[24.54792,57.94938],[24.54352,57.94478],[24.5301,57.94705],[24.5207,57.94303],[24.51839,57.93675],[24.5096,57.93442],[24.51326,57.93066],[24.4625,57.92496],[24.44579,57.90798],[24.46018,57.90662],[24.45225,57.89942],[24.46006,57.87977],[24.41138,57.86491],[24.40906,57.87191],[24.33707,57.87393],[24.33829,58.0109],[24.42272,58.01097],[24.42614,58.28002],[24.51155,58.2797],[24.51216,58.32471],[24.42638,58.32503],[24.42712,58.36972],[24.34182,58.37017],[24.34048,58.23547],[24.17014,58.23572],[24.17014,58.1908],[24.08485,58.19092],[24.0851,58.23605],[24.00066,58.23579],[23.99993,58.28092],[23.82971,58.28047],[23.82947,58.32554],[23.65864,58.32496],[23.65791,58.41493],[23.57225,58.41468],[23.57127,58.50436],[23.39935,58.50359],[23.40106,58.41391],[23.14421,58.41238],[23.14567,58.36735],[23.05989,58.36703],[23.06172,58.32221],[22.9757,58.32157],[22.97716,58.27681],[22.89187,58.27598],[22.89358,58.23103],[22.80865,58.2302],[22.81012,58.18539],[22.89529,58.1861],[22.89663,58.1413],[22.72641,58.13982],[22.72495,58.18475],[22.55522,58.18276],[22.55693,58.13744],[22.64173,58.13886],[22.64344,58.094],[22.38903,58.0909],[22.38525,58.18063],[22.29995,58.17967],[22.30679,58.04527],[22.22198,58.0436],[22.22626,57.95404],[22.14206,57.95281],[22.1445,57.90804],[22.06007,57.90681],[22.06263,57.86186],[21.97807,57.86043],[21.96831,58.04004],[22.05274,58.04134],[22.04506,58.17581],[21.96038,58.17471],[21.95781,58.21941],[21.78723,58.21638],[21.78211,58.30631],[21.69681,58.3049],[21.69401,58.34975],[21.77942,58.35122],[21.76795,58.53074],[22.02566,58.53488],[22.02797,58.49001],[22.11375,58.49167],[22.11144,58.53621],[22.19709,58.53742],[22.19453,58.5823],[22.45236,58.58573],[22.44638,58.7203],[22.36023,58.71916],[22.35364,58.85385]],[[23.47415,59.26726],[23.29868,59.26632],[23.29795,59.31138],[23.47293,59.31194],[23.47415,59.26726]],[[24.17014,58.1908],[24.25507,58.19073],[24.25458,58.14581],[24.17002,58.14588],[24.17014,58.1908]],[[24.08485,58.19092],[24.08497,58.10129],[23.99968,58.10116],[23.99993,58.05632],[23.91525,58.05612],[23.915,58.14613],[23.83032,58.146],[23.82971,58.23572],[23.91451,58.23585],[23.91476,58.19099],[24.08485,58.19092]],[[24.61854,59.53612],[24.44183,59.5368],[24.44309,59.62659],[24.62016,59.6258],[24.61854,59.53612]],[[26.40403,59.7852],[26.31501,59.78667],[26.31814,59.83152],[26.40732,59.82994],[26.40403,59.7852]],[[26.48308,59.649],[26.48647,59.69383],[26.57514,59.69202],[26.57166,59.64719],[26.48308,59.649]],[[23.15944,57.78408],[23.24346,57.78461],[23.24445,57.73971],[23.32848,57.74031],[23.32679,57.82998],[23.15845,57.82885],[23.15944,57.78408]]],terms_text:"Maa-Ameti katastrikaart ortofoto alusel"},{id:"maaamet.ee-cir_ngr",name:"Estonia Forestry (Maaamet)",type:"wms",template:"https://kaart.maaamet.ee/wms/alus-geo?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&Layers=cir_ngr&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",polygon:[[[22.35364,58.85385],[22.09411,58.85038],[22.09179,58.8951],[22.00503,58.89371],[21.99979,58.98374],[22.34754,58.98845],[22.34535,59.03337],[22.51935,59.03538],[22.51556,59.1251],[22.69017,59.12686],[22.69212,59.08218],[22.77912,59.083],[22.78083,59.03814],[22.86808,59.03877],[22.8693,58.99399],[22.9563,58.99487],[22.95495,59.03959],[23.12895,59.04097],[23.12786,59.08582],[23.47671,59.0877],[23.47415,59.26726],[23.64924,59.26788],[23.64888,59.31281],[23.73698,59.313],[23.73649,59.3578],[23.91158,59.35787],[23.91207,59.4028],[24.176,59.4028],[24.17637,59.4478],[24.26446,59.44767],[24.26471,59.49236],[24.70605,59.49082],[24.70898,59.62553],[24.79744,59.62497],[24.79659,59.58009],[24.97327,59.57885],[24.97462,59.62386],[24.88603,59.62473],[24.88725,59.66918],[24.9762,59.66863],[24.9773,59.71346],[25.06601,59.71259],[25.0632,59.62306],[25.24037,59.62145],[25.24184,59.66647],[25.33055,59.66548],[25.32884,59.62078],[25.41755,59.61979],[25.41938,59.66468],[25.6855,59.66148],[25.68757,59.70613],[25.86511,59.70386],[25.86279,59.65901],[26.12855,59.65507],[26.12575,59.6101],[26.39114,59.60565],[26.38809,59.56099],[26.82967,59.55215],[26.82626,59.50729],[26.91423,59.50549],[26.91057,59.46051],[27.96689,59.43303],[27.9719,59.4778],[28.03669,59.4757],[28.04377,59.47223],[28.04767,59.46578],[28.05182,59.46342],[28.06915,59.46256],[28.08452,59.45939],[28.12174,59.44091],[28.13577,59.4277],[28.13711,59.42267],[28.14163,59.41901],[28.16652,59.41205],[28.17225,59.40789],[28.19275,59.4015],[28.21069,59.3836],[28.21069,59.37994],[28.20386,59.37459],[28.21057,59.37235],[28.21105,59.36937],[28.20678,59.36719],[28.20703,59.36377],[28.19971,59.36091],[28.20203,59.35731],[28.19263,59.35227],[28.19397,59.34642],[28.16969,59.33354],[28.13626,59.29244],[28.12515,59.28901],[28.11722,59.28895],[28.1099,59.29063],[28.05353,59.2902],[28.02022,59.28334],[27.99825,59.2753],[27.97983,59.27293],[27.96433,59.27268],[27.95335,59.26863],[27.9492,59.26533],[27.90564,59.24044],[27.90113,59.23488],[27.901,59.22639],[27.89783,59.21746],[27.90235,59.20728],[27.89234,59.19222],[27.88978,59.18379],[27.87648,59.17372],[27.87184,59.16841],[27.86818,59.16159],[27.84414,59.14814],[27.83206,59.14401],[27.82035,59.13362],[27.80986,59.12905],[27.80595,59.12166],[27.80534,59.1127],[27.81071,59.10819],[27.8101,59.10606],[27.80205,59.1028],[27.78887,59.0909],[27.7907,59.08112],[27.79375,59.07842],[27.79411,59.07566],[27.79277,59.0729],[27.79302,59.06927],[27.7885,59.06657],[27.78265,59.065],[27.77508,59.0581],[27.77313,59.05107],[27.77667,59.04743],[27.76983,59.03325],[27.76605,59.03155],[27.75153,59.03017],[27.74628,59.02716],[27.74567,59.01705],[27.74165,59.00951],[27.74787,58.99267],[27.74274,58.98845],[27.73213,58.9855],[27.6544,58.98783],[27.65501,58.99241],[27.39414,58.99964],[27.38974,58.95474],[27.12935,58.96135],[27.12557,58.9164],[27.03882,58.91841],[27.0271,58.7841],[27.11361,58.78183],[27.10934,58.73709],[27.19537,58.73512],[27.18731,58.64533],[27.27309,58.64305],[27.25259,58.41883],[27.53397,58.41142],[27.5552,58.36575],[27.51762,58.33265],[27.51408,58.32214],[27.49993,58.32246],[27.48687,58.18803],[27.52872,58.18687],[27.59205,58.11875],[27.63695,58.09735],[27.60938,58.05399],[27.62268,58.0058],[27.64489,58.00205],[27.65294,58.00644],[27.64781,58.01426],[27.64781,58.02086],[27.66172,58.01866],[27.66856,58.01045],[27.68393,58.00845],[27.6965,58.0045],[27.70065,57.99862],[27.69882,57.98827],[27.69125,57.98549],[27.68064,57.97449],[27.6821,57.9719],[27.68893,57.97184],[27.68588,57.95928],[27.65892,57.9554],[27.66758,57.951],[27.67161,57.94627],[27.66917,57.94174],[27.67649,57.93552],[27.68247,57.93655],[27.68613,57.92794],[27.68247,57.92437],[27.71078,57.92392],[27.72029,57.92036],[27.72054,57.91174],[27.70834,57.90616],[27.69882,57.90616],[27.70614,57.90136],[27.72896,57.90739],[27.74677,57.90169],[27.7536,57.90409],[27.75739,57.90318],[27.75592,57.89806],[27.76959,57.89566],[27.78094,57.89832],[27.799,57.89961],[27.81852,57.89579],[27.82096,57.89047],[27.81949,57.888],[27.81059,57.88612],[27.81827,57.88249],[27.81169,57.87204],[27.81583,57.87166],[27.8184,57.8651],[27.81632,57.86134],[27.79875,57.85205],[27.7946,57.84634],[27.80058,57.8442],[27.7957,57.84017],[27.78862,57.84186],[27.78411,57.83725],[27.77715,57.8325],[27.75849,57.83536],[27.74165,57.82679],[27.72383,57.83179],[27.70541,57.84192],[27.68771,57.83419],[27.66636,57.83653],[27.66026,57.83893],[27.64818,57.8377],[27.63634,57.83978],[27.62487,57.83751],[27.62207,57.83874],[27.59791,57.83328],[27.56252,57.83023],[27.5563,57.83127],[27.55227,57.82113],[27.54446,57.82204],[27.5452,57.81808],[27.55056,57.81769],[27.55667,57.81366],[27.5408,57.81288],[27.54471,57.808],[27.53726,57.80644],[27.53958,57.80144],[27.53592,57.79663],[27.53861,57.79396],[27.52921,57.78856],[27.5175,57.78876],[27.51847,57.79201],[27.50298,57.78798],[27.50005,57.78973],[27.4959,57.78869],[27.50774,57.78349],[27.51457,57.77516],[27.5081,57.77158],[27.51115,57.76416],[27.51591,57.7639],[27.52018,57.75993],[27.52811,57.75818],[27.53007,57.75368],[27.53116,57.74073],[27.548,57.7333],[27.5419,57.73037],[27.52799,57.72946],[27.5236,57.71616],[27.52762,57.70899],[27.5236,57.70802],[27.51652,57.70873],[27.51066,57.71101],[27.50859,57.70723],[27.49993,57.70495],[27.49529,57.70749],[27.48711,57.7191],[27.47357,57.71545],[27.47064,57.70802],[27.46149,57.70619],[27.44807,57.71616],[27.43086,57.70756],[27.42818,57.69902],[27.41341,57.69915],[27.41647,57.69524],[27.40744,57.69276],[27.40231,57.68493],[27.39133,57.68539],[27.39377,57.67913],[27.39145,57.67671],[27.38193,57.67332],[27.37779,57.66836],[27.38364,57.66059],[27.3801,57.65883],[27.38755,57.6555],[27.38047,57.6495],[27.38352,57.64799],[27.38157,57.64368],[27.39072,57.6431],[27.38816,57.64009],[27.40085,57.63742],[27.40317,57.62905],[27.40182,57.62376],[27.39597,57.62115],[27.39023,57.62036],[27.39084,57.6169],[27.40195,57.61775],[27.40634,57.61546],[27.40683,57.61246],[27.38572,57.60304],[27.37827,57.59513],[27.35692,57.59696],[27.3413,57.58984],[27.34179,57.58539],[27.32886,57.5797],[27.32141,57.57898],[27.3341,57.56596],[27.33178,57.56066],[27.33776,57.56007],[27.33886,57.54671],[27.34386,57.5454],[27.35472,57.52575],[27.35131,57.51632],[27.34569,57.52104],[27.32446,57.52274],[27.29664,57.53859],[27.28017,57.53643],[27.2737,57.54311],[27.26431,57.54377],[27.2637,57.54841],[27.25772,57.54979],[27.24796,57.54769],[27.2249,57.55385],[27.19329,57.54966],[27.16145,57.55922],[27.11654,57.56118],[27.10092,57.5653],[27.08506,57.57538],[27.07262,57.57734],[27.07225,57.57989],[27.0559,57.58251],[27.05285,57.58087],[27.04687,57.58048],[27.04492,57.58251],[27.0332,57.58532],[27.04126,57.58761],[27.04418,57.5967],[27.03101,57.60461],[26.99513,57.60461],[26.99233,57.61076],[26.98696,57.60867],[26.98366,57.61174],[26.97549,57.612],[26.97097,57.60448],[26.9595,57.60625],[26.9578,57.60468],[26.94596,57.60272],[26.93961,57.60932],[26.95133,57.61579],[26.94999,57.62056],[26.94059,57.61978],[26.92961,57.62376],[26.92644,57.6331],[26.90679,57.63304],[26.89971,57.63056],[26.90057,57.62918],[26.89581,57.62572],[26.88849,57.62357],[26.88898,57.62193],[26.87458,57.61906],[26.87275,57.61736],[26.86555,57.61592],[26.85786,57.60997],[26.86469,57.6084],[26.85811,57.60049],[26.85994,57.59598],[26.86433,57.59415],[26.86177,57.59108],[26.84688,57.5884],[26.83504,57.58244],[26.81589,57.58153],[26.80954,57.58473],[26.79685,57.58179],[26.79929,57.58002],[26.79295,57.57315],[26.78685,57.57525],[26.7766,57.55994],[26.76915,57.56039],[26.76354,57.56314],[26.75366,57.56249],[26.75817,57.5653],[26.76891,57.57041],[26.77379,57.57473],[26.76769,57.57754],[26.74804,57.5778],[26.75317,57.58009],[26.73816,57.58774],[26.72901,57.58016],[26.73828,57.57584],[26.73072,57.56903],[26.72388,57.57244],[26.71107,57.56596],[26.69972,57.57106],[26.69753,57.5706],[26.69741,57.56733],[26.69155,57.56615],[26.67569,57.56668],[26.67105,57.56327],[26.6719,57.55385],[26.66531,57.55287],[26.64652,57.55391],[26.64262,57.54658],[26.63444,57.54357],[26.61443,57.52909],[26.61712,57.50885],[26.60467,57.51212],[26.60479,57.51442],[26.5954,57.51376],[26.59479,57.51592],[26.58808,57.51619],[26.59015,57.52516],[26.58698,57.52621],[26.58771,57.53781],[26.58381,57.53957],[26.57978,57.53695],[26.57966,57.53375],[26.56123,57.5285],[26.56184,57.52261],[26.5666,57.51946],[26.55794,57.5137],[26.52585,57.51619],[26.49961,57.52451],[26.49095,57.54534],[26.46996,57.57551],[26.40151,57.57237],[26.34489,57.58408],[26.33476,57.5797],[26.32781,57.57963],[26.32635,57.58277],[26.3117,57.58473],[26.30853,57.59291],[26.3006,57.59343],[26.29291,57.59114],[26.28352,57.59232],[26.28217,57.5952],[26.27754,57.595],[26.27034,57.6001],[26.27022,57.60461],[26.25423,57.61383],[26.24715,57.62082],[26.24813,57.62775],[26.23947,57.63408],[26.24203,57.63539],[26.24667,57.63559],[26.23959,57.64649],[26.23239,57.6461],[26.23117,57.64904],[26.24215,57.65146],[26.2363,57.65753],[26.23032,57.65805],[26.21043,57.66601],[26.21372,57.66888],[26.21092,57.67071],[26.21018,57.67906],[26.20079,57.68102],[26.19896,57.68356],[26.19444,57.68519],[26.18541,57.68454],[26.17712,57.68761],[26.18871,57.69472],[26.19859,57.70906],[26.20567,57.71486],[26.1726,57.72867],[26.141,57.73278],[26.13563,57.73923],[26.13905,57.74548],[26.13551,57.7503],[26.10537,57.757],[26.08035,57.76547],[26.07974,57.76384],[26.07328,57.76371],[26.07047,57.7656],[26.05912,57.75987],[26.049,57.7611],[26.0435,57.76703],[26.03326,57.77054],[26.02374,57.76761],[26.01776,57.7723],[26.02459,57.77516],[26.02496,57.7816],[26.02252,57.78355],[26.02776,57.7898],[26.03081,57.79097],[26.03338,57.80105],[26.03679,57.80592],[26.03606,57.8108],[26.04851,57.82289],[26.05705,57.83842],[26.05558,57.84764],[26.03667,57.84926],[26.02008,57.84517],[26.00958,57.85731],[25.99848,57.85816],[25.96273,57.84491],[25.931,57.85244],[25.89537,57.84972],[25.8883,57.84595],[25.88085,57.84946],[25.88573,57.85277],[25.88427,57.85595],[25.87561,57.85796],[25.87475,57.86322],[25.8595,57.85614],[25.81923,57.86419],[25.78312,57.89948],[25.78629,57.90428],[25.77165,57.91206],[25.75102,57.91692],[25.73724,57.92295],[25.72833,57.92133],[25.72247,57.91245],[25.70356,57.90331],[25.67916,57.90461],[25.67549,57.91277],[25.66207,57.91511],[25.65609,57.91439],[25.64889,57.91666],[25.64987,57.91841],[25.63828,57.93059],[25.57983,57.9442],[25.59399,57.95961],[25.58935,57.96504],[25.58239,57.96783],[25.58044,57.9721],[25.57483,57.9741],[25.56556,57.96718],[25.56604,57.96258],[25.55714,57.96038],[25.55567,57.96711],[25.55079,57.97255],[25.53725,57.97139],[25.52566,57.97184],[25.5226,57.96802],[25.51638,57.96737],[25.51211,57.96977],[25.52212,57.97488],[25.51943,57.98031],[25.48539,57.97475],[25.47843,57.98006],[25.47843,57.98264],[25.44219,57.99616],[25.44817,58.00114],[25.46648,58.00515],[25.44817,58.01698],[25.40693,58.02893],[25.37155,58.02926],[25.36374,58.03171],[25.35336,58.04334],[25.34482,58.04676],[25.33604,58.05709],[25.3292,58.05858],[25.32664,58.0638],[25.31981,58.066],[25.31908,58.06929],[25.29553,58.08161],[25.28686,58.08149],[25.28113,58.07019],[25.266,58.06716],[25.26502,58.06],[25.27991,58.05063],[25.29309,58.0467],[25.30431,58.03449],[25.30114,58.01504],[25.29748,58.01459],[25.30285,58.00011],[25.29577,57.99972],[25.29736,57.99661],[25.30358,57.99396],[25.30138,57.99273],[25.29187,57.99286],[25.28308,57.98963],[25.26722,57.99454],[25.25611,57.9939],[25.25502,58.00347],[25.2455,58.00302],[25.22768,58.01782],[25.24587,58.01872],[25.23562,58.02286],[25.23635,58.02441],[25.22732,58.02435],[25.22537,58.02195],[25.21902,58.02977],[25.21658,58.04088],[25.22695,58.04799],[25.22817,58.05348],[25.22122,58.05302],[25.22146,58.05051],[25.2178,58.04908],[25.21597,58.05954],[25.21219,58.06226],[25.20523,58.06122],[25.20389,58.0651],[25.21621,58.07413],[25.21207,58.08052],[25.19962,58.08536],[25.18949,58.08007],[25.19169,58.07613],[25.1535,58.07478],[25.15154,58.07703],[25.13397,58.07974],[25.10579,58.07749],[25.10518,58.06645],[25.07662,58.06645],[25.02037,58.01769],[24.99512,58.01084],[24.94863,58.00942],[24.83234,57.97177],[24.80806,57.99066],[24.74229,57.98187],[24.74339,57.96491],[24.7329,57.96239],[24.71508,57.96271],[24.6919,57.94653],[24.67335,57.95896],[24.64468,57.95889],[24.64187,57.95423],[24.64577,57.95268],[24.62869,57.94193],[24.61612,57.94368],[24.60892,57.95125],[24.58464,57.96174],[24.57317,57.95436],[24.54792,57.94938],[24.54352,57.94478],[24.5301,57.94705],[24.5207,57.94303],[24.51839,57.93675],[24.5096,57.93442],[24.51326,57.93066],[24.4625,57.92496],[24.44579,57.90798],[24.46018,57.90662],[24.45225,57.89942],[24.46006,57.87977],[24.41138,57.86491],[24.40906,57.87191],[24.33707,57.87393],[24.33829,58.0109],[24.42272,58.01097],[24.42614,58.28002],[24.51155,58.2797],[24.51216,58.32471],[24.42638,58.32503],[24.42712,58.36972],[24.34182,58.37017],[24.34048,58.23547],[24.17014,58.23572],[24.17014,58.1908],[24.08485,58.19092],[24.0851,58.23605],[24.00066,58.23579],[23.99993,58.28092],[23.82971,58.28047],[23.82947,58.32554],[23.65864,58.32496],[23.65791,58.41493],[23.57225,58.41468],[23.57127,58.50436],[23.39935,58.50359],[23.40106,58.41391],[23.14421,58.41238],[23.14567,58.36735],[23.05989,58.36703],[23.06172,58.32221],[22.9757,58.32157],[22.97716,58.27681],[22.89187,58.27598],[22.89358,58.23103],[22.80865,58.2302],[22.81012,58.18539],[22.89529,58.1861],[22.89663,58.1413],[22.72641,58.13982],[22.72495,58.18475],[22.55522,58.18276],[22.55693,58.13744],[22.64173,58.13886],[22.64344,58.094],[22.38903,58.0909],[22.38525,58.18063],[22.29995,58.17967],[22.30679,58.04527],[22.22198,58.0436],[22.22626,57.95404],[22.14206,57.95281],[22.1445,57.90804],[22.06007,57.90681],[22.06263,57.86186],[21.97807,57.86043],[21.96831,58.04004],[22.05274,58.04134],[22.04506,58.17581],[21.96038,58.17471],[21.95781,58.21941],[21.78723,58.21638],[21.78211,58.30631],[21.69681,58.3049],[21.69401,58.34975],[21.77942,58.35122],[21.76795,58.53074],[22.02566,58.53488],[22.02797,58.49001],[22.11375,58.49167],[22.11144,58.53621],[22.19709,58.53742],[22.19453,58.5823],[22.45236,58.58573],[22.44638,58.7203],[22.36023,58.71916],[22.35364,58.85385]],[[23.47415,59.26726],[23.29868,59.26632],[23.29795,59.31138],[23.47293,59.31194],[23.47415,59.26726]],[[24.17014,58.1908],[24.25507,58.19073],[24.25458,58.14581],[24.17002,58.14588],[24.17014,58.1908]],[[24.08485,58.19092],[24.08497,58.10129],[23.99968,58.10116],[23.99993,58.05632],[23.91525,58.05612],[23.915,58.14613],[23.83032,58.146],[23.82971,58.23572],[23.91451,58.23585],[23.91476,58.19099],[24.08485,58.19092]],[[24.61854,59.53612],[24.44183,59.5368],[24.44309,59.62659],[24.62016,59.6258],[24.61854,59.53612]],[[26.40403,59.7852],[26.31501,59.78667],[26.31814,59.83152],[26.40732,59.82994],[26.40403,59.7852]],[[26.48308,59.649],[26.48647,59.69383],[26.57514,59.69202],[26.57166,59.64719],[26.48308,59.649]],[[23.15944,57.78408],[23.24346,57.78461],[23.24445,57.73971],[23.32848,57.74031],[23.32679,57.82998],[23.15845,57.82885],[23.15944,57.78408]]],terms_text:"Maa-Ameti metsanduslik ortofoto"},{id:"maaamet.ee-reljeef",name:"Estonia Hillshading (Maaamet)",type:"wms",template:"https://kaart.maaamet.ee/wms/alus-geo?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&Layers=reljeef&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",polygon:[[[22.35364,58.85385],[22.09411,58.85038],[22.09179,58.8951],[22.00503,58.89371],[21.99979,58.98374],[22.34754,58.98845],[22.34535,59.03337],[22.51935,59.03538],[22.51556,59.1251],[22.69017,59.12686],[22.69212,59.08218],[22.77912,59.083],[22.78083,59.03814],[22.86808,59.03877],[22.8693,58.99399],[22.9563,58.99487],[22.95495,59.03959],[23.12895,59.04097],[23.12786,59.08582],[23.47671,59.0877],[23.47415,59.26726],[23.64924,59.26788],[23.64888,59.31281],[23.73698,59.313],[23.73649,59.3578],[23.91158,59.35787],[23.91207,59.4028],[24.176,59.4028],[24.17637,59.4478],[24.26446,59.44767],[24.26471,59.49236],[24.70605,59.49082],[24.70898,59.62553],[24.79744,59.62497],[24.79659,59.58009],[24.97327,59.57885],[24.97462,59.62386],[24.88603,59.62473],[24.88725,59.66918],[24.9762,59.66863],[24.9773,59.71346],[25.06601,59.71259],[25.0632,59.62306],[25.24037,59.62145],[25.24184,59.66647],[25.33055,59.66548],[25.32884,59.62078],[25.41755,59.61979],[25.41938,59.66468],[25.6855,59.66148],[25.68757,59.70613],[25.86511,59.70386],[25.86279,59.65901],[26.12855,59.65507],[26.12575,59.6101],[26.39114,59.60565],[26.38809,59.56099],[26.82967,59.55215],[26.82626,59.50729],[26.91423,59.50549],[26.91057,59.46051],[27.96689,59.43303],[27.9719,59.4778],[28.03669,59.4757],[28.04377,59.47223],[28.04767,59.46578],[28.05182,59.46342],[28.06915,59.46256],[28.08452,59.45939],[28.12174,59.44091],[28.13577,59.4277],[28.13711,59.42267],[28.14163,59.41901],[28.16652,59.41205],[28.17225,59.40789],[28.19275,59.4015],[28.21069,59.3836],[28.21069,59.37994],[28.20386,59.37459],[28.21057,59.37235],[28.21105,59.36937],[28.20678,59.36719],[28.20703,59.36377],[28.19971,59.36091],[28.20203,59.35731],[28.19263,59.35227],[28.19397,59.34642],[28.16969,59.33354],[28.13626,59.29244],[28.12515,59.28901],[28.11722,59.28895],[28.1099,59.29063],[28.05353,59.2902],[28.02022,59.28334],[27.99825,59.2753],[27.97983,59.27293],[27.96433,59.27268],[27.95335,59.26863],[27.9492,59.26533],[27.90564,59.24044],[27.90113,59.23488],[27.901,59.22639],[27.89783,59.21746],[27.90235,59.20728],[27.89234,59.19222],[27.88978,59.18379],[27.87648,59.17372],[27.87184,59.16841],[27.86818,59.16159],[27.84414,59.14814],[27.83206,59.14401],[27.82035,59.13362],[27.80986,59.12905],[27.80595,59.12166],[27.80534,59.1127],[27.81071,59.10819],[27.8101,59.10606],[27.80205,59.1028],[27.78887,59.0909],[27.7907,59.08112],[27.79375,59.07842],[27.79411,59.07566],[27.79277,59.0729],[27.79302,59.06927],[27.7885,59.06657],[27.78265,59.065],[27.77508,59.0581],[27.77313,59.05107],[27.77667,59.04743],[27.76983,59.03325],[27.76605,59.03155],[27.75153,59.03017],[27.74628,59.02716],[27.74567,59.01705],[27.74165,59.00951],[27.74787,58.99267],[27.74274,58.98845],[27.73213,58.9855],[27.6544,58.98783],[27.65501,58.99241],[27.39414,58.99964],[27.38974,58.95474],[27.12935,58.96135],[27.12557,58.9164],[27.03882,58.91841],[27.0271,58.7841],[27.11361,58.78183],[27.10934,58.73709],[27.19537,58.73512],[27.18731,58.64533],[27.27309,58.64305],[27.25259,58.41883],[27.53397,58.41142],[27.5552,58.36575],[27.51762,58.33265],[27.51408,58.32214],[27.49993,58.32246],[27.48687,58.18803],[27.52872,58.18687],[27.59205,58.11875],[27.63695,58.09735],[27.60938,58.05399],[27.62268,58.0058],[27.64489,58.00205],[27.65294,58.00644],[27.64781,58.01426],[27.64781,58.02086],[27.66172,58.01866],[27.66856,58.01045],[27.68393,58.00845],[27.6965,58.0045],[27.70065,57.99862],[27.69882,57.98827],[27.69125,57.98549],[27.68064,57.97449],[27.6821,57.9719],[27.68893,57.97184],[27.68588,57.95928],[27.65892,57.9554],[27.66758,57.951],[27.67161,57.94627],[27.66917,57.94174],[27.67649,57.93552],[27.68247,57.93655],[27.68613,57.92794],[27.68247,57.92437],[27.71078,57.92392],[27.72029,57.92036],[27.72054,57.91174],[27.70834,57.90616],[27.69882,57.90616],[27.70614,57.90136],[27.72896,57.90739],[27.74677,57.90169],[27.7536,57.90409],[27.75739,57.90318],[27.75592,57.89806],[27.76959,57.89566],[27.78094,57.89832],[27.799,57.89961],[27.81852,57.89579],[27.82096,57.89047],[27.81949,57.888],[27.81059,57.88612],[27.81827,57.88249],[27.81169,57.87204],[27.81583,57.87166],[27.8184,57.8651],[27.81632,57.86134],[27.79875,57.85205],[27.7946,57.84634],[27.80058,57.8442],[27.7957,57.84017],[27.78862,57.84186],[27.78411,57.83725],[27.77715,57.8325],[27.75849,57.83536],[27.74165,57.82679],[27.72383,57.83179],[27.70541,57.84192],[27.68771,57.83419],[27.66636,57.83653],[27.66026,57.83893],[27.64818,57.8377],[27.63634,57.83978],[27.62487,57.83751],[27.62207,57.83874],[27.59791,57.83328],[27.56252,57.83023],[27.5563,57.83127],[27.55227,57.82113],[27.54446,57.82204],[27.5452,57.81808],[27.55056,57.81769],[27.55667,57.81366],[27.5408,57.81288],[27.54471,57.808],[27.53726,57.80644],[27.53958,57.80144],[27.53592,57.79663],[27.53861,57.79396],[27.52921,57.78856],[27.5175,57.78876],[27.51847,57.79201],[27.50298,57.78798],[27.50005,57.78973],[27.4959,57.78869],[27.50774,57.78349],[27.51457,57.77516],[27.5081,57.77158],[27.51115,57.76416],[27.51591,57.7639],[27.52018,57.75993],[27.52811,57.75818],[27.53007,57.75368],[27.53116,57.74073],[27.548,57.7333],[27.5419,57.73037],[27.52799,57.72946],[27.5236,57.71616],[27.52762,57.70899],[27.5236,57.70802],[27.51652,57.70873],[27.51066,57.71101],[27.50859,57.70723],[27.49993,57.70495],[27.49529,57.70749],[27.48711,57.7191],[27.47357,57.71545],[27.47064,57.70802],[27.46149,57.70619],[27.44807,57.71616],[27.43086,57.70756],[27.42818,57.69902],[27.41341,57.69915],[27.41647,57.69524],[27.40744,57.69276],[27.40231,57.68493],[27.39133,57.68539],[27.39377,57.67913],[27.39145,57.67671],[27.38193,57.67332],[27.37779,57.66836],[27.38364,57.66059],[27.3801,57.65883],[27.38755,57.6555],[27.38047,57.6495],[27.38352,57.64799],[27.38157,57.64368],[27.39072,57.6431],[27.38816,57.64009],[27.40085,57.63742],[27.40317,57.62905],[27.40182,57.62376],[27.39597,57.62115],[27.39023,57.62036],[27.39084,57.6169],[27.40195,57.61775],[27.40634,57.61546],[27.40683,57.61246],[27.38572,57.60304],[27.37827,57.59513],[27.35692,57.59696],[27.3413,57.58984],[27.34179,57.58539],[27.32886,57.5797],[27.32141,57.57898],[27.3341,57.56596],[27.33178,57.56066],[27.33776,57.56007],[27.33886,57.54671],[27.34386,57.5454],[27.35472,57.52575],[27.35131,57.51632],[27.34569,57.52104],[27.32446,57.52274],[27.29664,57.53859],[27.28017,57.53643],[27.2737,57.54311],[27.26431,57.54377],[27.2637,57.54841],[27.25772,57.54979],[27.24796,57.54769],[27.2249,57.55385],[27.19329,57.54966],[27.16145,57.55922],[27.11654,57.56118],[27.10092,57.5653],[27.08506,57.57538],[27.07262,57.57734],[27.07225,57.57989],[27.0559,57.58251],[27.05285,57.58087],[27.04687,57.58048],[27.04492,57.58251],[27.0332,57.58532],[27.04126,57.58761],[27.04418,57.5967],[27.03101,57.60461],[26.99513,57.60461],[26.99233,57.61076],[26.98696,57.60867],[26.98366,57.61174],[26.97549,57.612],[26.97097,57.60448],[26.9595,57.60625],[26.9578,57.60468],[26.94596,57.60272],[26.93961,57.60932],[26.95133,57.61579],[26.94999,57.62056],[26.94059,57.61978],[26.92961,57.62376],[26.92644,57.6331],[26.90679,57.63304],[26.89971,57.63056],[26.90057,57.62918],[26.89581,57.62572],[26.88849,57.62357],[26.88898,57.62193],[26.87458,57.61906],[26.87275,57.61736],[26.86555,57.61592],[26.85786,57.60997],[26.86469,57.6084],[26.85811,57.60049],[26.85994,57.59598],[26.86433,57.59415],[26.86177,57.59108],[26.84688,57.5884],[26.83504,57.58244],[26.81589,57.58153],[26.80954,57.58473],[26.79685,57.58179],[26.79929,57.58002],[26.79295,57.57315],[26.78685,57.57525],[26.7766,57.55994],[26.76915,57.56039],[26.76354,57.56314],[26.75366,57.56249],[26.75817,57.5653],[26.76891,57.57041],[26.77379,57.57473],[26.76769,57.57754],[26.74804,57.5778],[26.75317,57.58009],[26.73816,57.58774],[26.72901,57.58016],[26.73828,57.57584],[26.73072,57.56903],[26.72388,57.57244],[26.71107,57.56596],[26.69972,57.57106],[26.69753,57.5706],[26.69741,57.56733],[26.69155,57.56615],[26.67569,57.56668],[26.67105,57.56327],[26.6719,57.55385],[26.66531,57.55287],[26.64652,57.55391],[26.64262,57.54658],[26.63444,57.54357],[26.61443,57.52909],[26.61712,57.50885],[26.60467,57.51212],[26.60479,57.51442],[26.5954,57.51376],[26.59479,57.51592],[26.58808,57.51619],[26.59015,57.52516],[26.58698,57.52621],[26.58771,57.53781],[26.58381,57.53957],[26.57978,57.53695],[26.57966,57.53375],[26.56123,57.5285],[26.56184,57.52261],[26.5666,57.51946],[26.55794,57.5137],[26.52585,57.51619],[26.49961,57.52451],[26.49095,57.54534],[26.46996,57.57551],[26.40151,57.57237],[26.34489,57.58408],[26.33476,57.5797],[26.32781,57.57963],[26.32635,57.58277],[26.3117,57.58473],[26.30853,57.59291],[26.3006,57.59343],[26.29291,57.59114],[26.28352,57.59232],[26.28217,57.5952],[26.27754,57.595],[26.27034,57.6001],[26.27022,57.60461],[26.25423,57.61383],[26.24715,57.62082],[26.24813,57.62775],[26.23947,57.63408],[26.24203,57.63539],[26.24667,57.63559],[26.23959,57.64649],[26.23239,57.6461],[26.23117,57.64904],[26.24215,57.65146],[26.2363,57.65753],[26.23032,57.65805],[26.21043,57.66601],[26.21372,57.66888],[26.21092,57.67071],[26.21018,57.67906],[26.20079,57.68102],[26.19896,57.68356],[26.19444,57.68519],[26.18541,57.68454],[26.17712,57.68761],[26.18871,57.69472],[26.19859,57.70906],[26.20567,57.71486],[26.1726,57.72867],[26.141,57.73278],[26.13563,57.73923],[26.13905,57.74548],[26.13551,57.7503],[26.10537,57.757],[26.08035,57.76547],[26.07974,57.76384],[26.07328,57.76371],[26.07047,57.7656],[26.05912,57.75987],[26.049,57.7611],[26.0435,57.76703],[26.03326,57.77054],[26.02374,57.76761],[26.01776,57.7723],[26.02459,57.77516],[26.02496,57.7816],[26.02252,57.78355],[26.02776,57.7898],[26.03081,57.79097],[26.03338,57.80105],[26.03679,57.80592],[26.03606,57.8108],[26.04851,57.82289],[26.05705,57.83842],[26.05558,57.84764],[26.03667,57.84926],[26.02008,57.84517],[26.00958,57.85731],[25.99848,57.85816],[25.96273,57.84491],[25.931,57.85244],[25.89537,57.84972],[25.8883,57.84595],[25.88085,57.84946],[25.88573,57.85277],[25.88427,57.85595],[25.87561,57.85796],[25.87475,57.86322],[25.8595,57.85614],[25.81923,57.86419],[25.78312,57.89948],[25.78629,57.90428],[25.77165,57.91206],[25.75102,57.91692],[25.73724,57.92295],[25.72833,57.92133],[25.72247,57.91245],[25.70356,57.90331],[25.67916,57.90461],[25.67549,57.91277],[25.66207,57.91511],[25.65609,57.91439],[25.64889,57.91666],[25.64987,57.91841],[25.63828,57.93059],[25.57983,57.9442],[25.59399,57.95961],[25.58935,57.96504],[25.58239,57.96783],[25.58044,57.9721],[25.57483,57.9741],[25.56556,57.96718],[25.56604,57.96258],[25.55714,57.96038],[25.55567,57.96711],[25.55079,57.97255],[25.53725,57.97139],[25.52566,57.97184],[25.5226,57.96802],[25.51638,57.96737],[25.51211,57.96977],[25.52212,57.97488],[25.51943,57.98031],[25.48539,57.97475],[25.47843,57.98006],[25.47843,57.98264],[25.44219,57.99616],[25.44817,58.00114],[25.46648,58.00515],[25.44817,58.01698],[25.40693,58.02893],[25.37155,58.02926],[25.36374,58.03171],[25.35336,58.04334],[25.34482,58.04676],[25.33604,58.05709],[25.3292,58.05858],[25.32664,58.0638],[25.31981,58.066],[25.31908,58.06929],[25.29553,58.08161],[25.28686,58.08149],[25.28113,58.07019],[25.266,58.06716],[25.26502,58.06],[25.27991,58.05063],[25.29309,58.0467],[25.30431,58.03449],[25.30114,58.01504],[25.29748,58.01459],[25.30285,58.00011],[25.29577,57.99972],[25.29736,57.99661],[25.30358,57.99396],[25.30138,57.99273],[25.29187,57.99286],[25.28308,57.98963],[25.26722,57.99454],[25.25611,57.9939],[25.25502,58.00347],[25.2455,58.00302],[25.22768,58.01782],[25.24587,58.01872],[25.23562,58.02286],[25.23635,58.02441],[25.22732,58.02435],[25.22537,58.02195],[25.21902,58.02977],[25.21658,58.04088],[25.22695,58.04799],[25.22817,58.05348],[25.22122,58.05302],[25.22146,58.05051],[25.2178,58.04908],[25.21597,58.05954],[25.21219,58.06226],[25.20523,58.06122],[25.20389,58.0651],[25.21621,58.07413],[25.21207,58.08052],[25.19962,58.08536],[25.18949,58.08007],[25.19169,58.07613],[25.1535,58.07478],[25.15154,58.07703],[25.13397,58.07974],[25.10579,58.07749],[25.10518,58.06645],[25.07662,58.06645],[25.02037,58.01769],[24.99512,58.01084],[24.94863,58.00942],[24.83234,57.97177],[24.80806,57.99066],[24.74229,57.98187],[24.74339,57.96491],[24.7329,57.96239],[24.71508,57.96271],[24.6919,57.94653],[24.67335,57.95896],[24.64468,57.95889],[24.64187,57.95423],[24.64577,57.95268],[24.62869,57.94193],[24.61612,57.94368],[24.60892,57.95125],[24.58464,57.96174],[24.57317,57.95436],[24.54792,57.94938],[24.54352,57.94478],[24.5301,57.94705],[24.5207,57.94303],[24.51839,57.93675],[24.5096,57.93442],[24.51326,57.93066],[24.4625,57.92496],[24.44579,57.90798],[24.46018,57.90662],[24.45225,57.89942],[24.46006,57.87977],[24.41138,57.86491],[24.40906,57.87191],[24.33707,57.87393],[24.33829,58.0109],[24.42272,58.01097],[24.42614,58.28002],[24.51155,58.2797],[24.51216,58.32471],[24.42638,58.32503],[24.42712,58.36972],[24.34182,58.37017],[24.34048,58.23547],[24.17014,58.23572],[24.17014,58.1908],[24.08485,58.19092],[24.0851,58.23605],[24.00066,58.23579],[23.99993,58.28092],[23.82971,58.28047],[23.82947,58.32554],[23.65864,58.32496],[23.65791,58.41493],[23.57225,58.41468],[23.57127,58.50436],[23.39935,58.50359],[23.40106,58.41391],[23.14421,58.41238],[23.14567,58.36735],[23.05989,58.36703],[23.06172,58.32221],[22.9757,58.32157],[22.97716,58.27681],[22.89187,58.27598],[22.89358,58.23103],[22.80865,58.2302],[22.81012,58.18539],[22.89529,58.1861],[22.89663,58.1413],[22.72641,58.13982],[22.72495,58.18475],[22.55522,58.18276],[22.55693,58.13744],[22.64173,58.13886],[22.64344,58.094],[22.38903,58.0909],[22.38525,58.18063],[22.29995,58.17967],[22.30679,58.04527],[22.22198,58.0436],[22.22626,57.95404],[22.14206,57.95281],[22.1445,57.90804],[22.06007,57.90681],[22.06263,57.86186],[21.97807,57.86043],[21.96831,58.04004],[22.05274,58.04134],[22.04506,58.17581],[21.96038,58.17471],[21.95781,58.21941],[21.78723,58.21638],[21.78211,58.30631],[21.69681,58.3049],[21.69401,58.34975],[21.77942,58.35122],[21.76795,58.53074],[22.02566,58.53488],[22.02797,58.49001],[22.11375,58.49167],[22.11144,58.53621],[22.19709,58.53742],[22.19453,58.5823],[22.45236,58.58573],[22.44638,58.7203],[22.36023,58.71916],[22.35364,58.85385]],[[23.47415,59.26726],[23.29868,59.26632],[23.29795,59.31138],[23.47293,59.31194],[23.47415,59.26726]],[[24.17014,58.1908],[24.25507,58.19073],[24.25458,58.14581],[24.17002,58.14588],[24.17014,58.1908]],[[24.08485,58.19092],[24.08497,58.10129],[23.99968,58.10116],[23.99993,58.05632],[23.91525,58.05612],[23.915,58.14613],[23.83032,58.146],[23.82971,58.23572],[23.91451,58.23585],[23.91476,58.19099],[24.08485,58.19092]],[[24.61854,59.53612],[24.44183,59.5368],[24.44309,59.62659],[24.62016,59.6258],[24.61854,59.53612]],[[26.40403,59.7852],[26.31501,59.78667],[26.31814,59.83152],[26.40732,59.82994],[26.40403,59.7852]],[[26.48308,59.649],[26.48647,59.69383],[26.57514,59.69202],[26.57166,59.64719],[26.48308,59.649]],[[23.15944,57.78408],[23.24346,57.78461],[23.24445,57.73971],[23.32848,57.74031],[23.32679,57.82998],[23.15845,57.82885],[23.15944,57.78408]]],terms_text:"Maa-Ameti reljeefikaart"},{id:"maaamet.ee-orto",name:"Estonia Ortho (Maaamet)",type:"tms",template:"https://tiles.maaamet.ee/tm/tms/1.0.0/foto@GMC/{zoom}/{x}/{-y}.png",zoomExtent:[6,18],polygon:[[[22.35364,58.85385],[22.09411,58.85038],[22.09179,58.8951],[22.00503,58.89371],[21.99979,58.98374],[22.34754,58.98845],[22.34535,59.03337],[22.51935,59.03538],[22.51556,59.1251],[22.69017,59.12686],[22.69212,59.08218],[22.77912,59.083],[22.78083,59.03814],[22.86808,59.03877],[22.8693,58.99399],[22.9563,58.99487],[22.95495,59.03959],[23.12895,59.04097],[23.12786,59.08582],[23.47671,59.0877],[23.47415,59.26726],[23.64924,59.26788],[23.64888,59.31281],[23.73698,59.313],[23.73649,59.3578],[23.91158,59.35787],[23.91207,59.4028],[24.176,59.4028],[24.17637,59.4478],[24.26446,59.44767],[24.26471,59.49236],[24.70605,59.49082],[24.70898,59.62553],[24.79744,59.62497],[24.79659,59.58009],[24.97327,59.57885],[24.97462,59.62386],[24.88603,59.62473],[24.88725,59.66918],[24.9762,59.66863],[24.9773,59.71346],[25.06601,59.71259],[25.0632,59.62306],[25.24037,59.62145],[25.24184,59.66647],[25.33055,59.66548],[25.32884,59.62078],[25.41755,59.61979],[25.41938,59.66468],[25.6855,59.66148],[25.68757,59.70613],[25.86511,59.70386],[25.86279,59.65901],[26.12855,59.65507],[26.12575,59.6101],[26.39114,59.60565],[26.38809,59.56099],[26.82967,59.55215],[26.82626,59.50729],[26.91423,59.50549],[26.91057,59.46051],[27.96689,59.43303],[27.9719,59.4778],[28.03669,59.4757],[28.04377,59.47223],[28.04767,59.46578],[28.05182,59.46342],[28.06915,59.46256],[28.08452,59.45939],[28.12174,59.44091],[28.13577,59.4277],[28.13711,59.42267],[28.14163,59.41901],[28.16652,59.41205],[28.17225,59.40789],[28.19275,59.4015],[28.21069,59.3836],[28.21069,59.37994],[28.20386,59.37459],[28.21057,59.37235],[28.21105,59.36937],[28.20678,59.36719],[28.20703,59.36377],[28.19971,59.36091],[28.20203,59.35731],[28.19263,59.35227],[28.19397,59.34642],[28.16969,59.33354],[28.13626,59.29244],[28.12515,59.28901],[28.11722,59.28895],[28.1099,59.29063],[28.05353,59.2902],[28.02022,59.28334],[27.99825,59.2753],[27.97983,59.27293],[27.96433,59.27268],[27.95335,59.26863],[27.9492,59.26533],[27.90564,59.24044],[27.90113,59.23488],[27.901,59.22639],[27.89783,59.21746],[27.90235,59.20728],[27.89234,59.19222],[27.88978,59.18379],[27.87648,59.17372],[27.87184,59.16841],[27.86818,59.16159],[27.84414,59.14814],[27.83206,59.14401],[27.82035,59.13362],[27.80986,59.12905],[27.80595,59.12166],[27.80534,59.1127],[27.81071,59.10819],[27.8101,59.10606],[27.80205,59.1028],[27.78887,59.0909],[27.7907,59.08112],[27.79375,59.07842],[27.79411,59.07566],[27.79277,59.0729],[27.79302,59.06927],[27.7885,59.06657],[27.78265,59.065],[27.77508,59.0581],[27.77313,59.05107],[27.77667,59.04743],[27.76983,59.03325],[27.76605,59.03155],[27.75153,59.03017],[27.74628,59.02716],[27.74567,59.01705],[27.74165,59.00951],[27.74787,58.99267],[27.74274,58.98845],[27.73213,58.9855],[27.6544,58.98783],[27.65501,58.99241],[27.39414,58.99964],[27.38974,58.95474],[27.12935,58.96135],[27.12557,58.9164],[27.03882,58.91841],[27.0271,58.7841],[27.11361,58.78183],[27.10934,58.73709],[27.19537,58.73512],[27.18731,58.64533],[27.27309,58.64305],[27.25259,58.41883],[27.53397,58.41142],[27.5552,58.36575],[27.51762,58.33265],[27.51408,58.32214],[27.49993,58.32246],[27.48687,58.18803],[27.52872,58.18687],[27.59205,58.11875],[27.63695,58.09735],[27.60938,58.05399],[27.62268,58.0058],[27.64489,58.00205],[27.65294,58.00644],[27.64781,58.01426],[27.64781,58.02086],[27.66172,58.01866],[27.66856,58.01045],[27.68393,58.00845],[27.6965,58.0045],[27.70065,57.99862],[27.69882,57.98827],[27.69125,57.98549],[27.68064,57.97449],[27.6821,57.9719],[27.68893,57.97184],[27.68588,57.95928],[27.65892,57.9554],[27.66758,57.951],[27.67161,57.94627],[27.66917,57.94174],[27.67649,57.93552],[27.68247,57.93655],[27.68613,57.92794],[27.68247,57.92437],[27.71078,57.92392],[27.72029,57.92036],[27.72054,57.91174],[27.70834,57.90616],[27.69882,57.90616],[27.70614,57.90136],[27.72896,57.90739],[27.74677,57.90169],[27.7536,57.90409],[27.75739,57.90318],[27.75592,57.89806],[27.76959,57.89566],[27.78094,57.89832],[27.799,57.89961],[27.81852,57.89579],[27.82096,57.89047],[27.81949,57.888],[27.81059,57.88612],[27.81827,57.88249],[27.81169,57.87204],[27.81583,57.87166],[27.8184,57.8651],[27.81632,57.86134],[27.79875,57.85205],[27.7946,57.84634],[27.80058,57.8442],[27.7957,57.84017],[27.78862,57.84186],[27.78411,57.83725],[27.77715,57.8325],[27.75849,57.83536],[27.74165,57.82679],[27.72383,57.83179],[27.70541,57.84192],[27.68771,57.83419],[27.66636,57.83653],[27.66026,57.83893],[27.64818,57.8377],[27.63634,57.83978],[27.62487,57.83751],[27.62207,57.83874],[27.59791,57.83328],[27.56252,57.83023],[27.5563,57.83127],[27.55227,57.82113],[27.54446,57.82204],[27.5452,57.81808],[27.55056,57.81769],[27.55667,57.81366],[27.5408,57.81288],[27.54471,57.808],[27.53726,57.80644],[27.53958,57.80144],[27.53592,57.79663],[27.53861,57.79396],[27.52921,57.78856],[27.5175,57.78876],[27.51847,57.79201],[27.50298,57.78798],[27.50005,57.78973],[27.4959,57.78869],[27.50774,57.78349],[27.51457,57.77516],[27.5081,57.77158],[27.51115,57.76416],[27.51591,57.7639],[27.52018,57.75993],[27.52811,57.75818],[27.53007,57.75368],[27.53116,57.74073],[27.548,57.7333],[27.5419,57.73037],[27.52799,57.72946],[27.5236,57.71616],[27.52762,57.70899],[27.5236,57.70802],[27.51652,57.70873],[27.51066,57.71101],[27.50859,57.70723],[27.49993,57.70495],[27.49529,57.70749],[27.48711,57.7191],[27.47357,57.71545],[27.47064,57.70802],[27.46149,57.70619],[27.44807,57.71616],[27.43086,57.70756],[27.42818,57.69902],[27.41341,57.69915],[27.41647,57.69524],[27.40744,57.69276],[27.40231,57.68493],[27.39133,57.68539],[27.39377,57.67913],[27.39145,57.67671],[27.38193,57.67332],[27.37779,57.66836],[27.38364,57.66059],[27.3801,57.65883],[27.38755,57.6555],[27.38047,57.6495],[27.38352,57.64799],[27.38157,57.64368],[27.39072,57.6431],[27.38816,57.64009],[27.40085,57.63742],[27.40317,57.62905],[27.40182,57.62376],[27.39597,57.62115],[27.39023,57.62036],[27.39084,57.6169],[27.40195,57.61775],[27.40634,57.61546],[27.40683,57.61246],[27.38572,57.60304],[27.37827,57.59513],[27.35692,57.59696],[27.3413,57.58984],[27.34179,57.58539],[27.32886,57.5797],[27.32141,57.57898],[27.3341,57.56596],[27.33178,57.56066],[27.33776,57.56007],[27.33886,57.54671],[27.34386,57.5454],[27.35472,57.52575],[27.35131,57.51632],[27.34569,57.52104],[27.32446,57.52274],[27.29664,57.53859],[27.28017,57.53643],[27.2737,57.54311],[27.26431,57.54377],[27.2637,57.54841],[27.25772,57.54979],[27.24796,57.54769],[27.2249,57.55385],[27.19329,57.54966],[27.16145,57.55922],[27.11654,57.56118],[27.10092,57.5653],[27.08506,57.57538],[27.07262,57.57734],[27.07225,57.57989],[27.0559,57.58251],[27.05285,57.58087],[27.04687,57.58048],[27.04492,57.58251],[27.0332,57.58532],[27.04126,57.58761],[27.04418,57.5967],[27.03101,57.60461],[26.99513,57.60461],[26.99233,57.61076],[26.98696,57.60867],[26.98366,57.61174],[26.97549,57.612],[26.97097,57.60448],[26.9595,57.60625],[26.9578,57.60468],[26.94596,57.60272],[26.93961,57.60932],[26.95133,57.61579],[26.94999,57.62056],[26.94059,57.61978],[26.92961,57.62376],[26.92644,57.6331],[26.90679,57.63304],[26.89971,57.63056],[26.90057,57.62918],[26.89581,57.62572],[26.88849,57.62357],[26.88898,57.62193],[26.87458,57.61906],[26.87275,57.61736],[26.86555,57.61592],[26.85786,57.60997],[26.86469,57.6084],[26.85811,57.60049],[26.85994,57.59598],[26.86433,57.59415],[26.86177,57.59108],[26.84688,57.5884],[26.83504,57.58244],[26.81589,57.58153],[26.80954,57.58473],[26.79685,57.58179],[26.79929,57.58002],[26.79295,57.57315],[26.78685,57.57525],[26.7766,57.55994],[26.76915,57.56039],[26.76354,57.56314],[26.75366,57.56249],[26.75817,57.5653],[26.76891,57.57041],[26.77379,57.57473],[26.76769,57.57754],[26.74804,57.5778],[26.75317,57.58009],[26.73816,57.58774],[26.72901,57.58016],[26.73828,57.57584],[26.73072,57.56903],[26.72388,57.57244],[26.71107,57.56596],[26.69972,57.57106],[26.69753,57.5706],[26.69741,57.56733],[26.69155,57.56615],[26.67569,57.56668],[26.67105,57.56327],[26.6719,57.55385],[26.66531,57.55287],[26.64652,57.55391],[26.64262,57.54658],[26.63444,57.54357],[26.61443,57.52909],[26.61712,57.50885],[26.60467,57.51212],[26.60479,57.51442],[26.5954,57.51376],[26.59479,57.51592],[26.58808,57.51619],[26.59015,57.52516],[26.58698,57.52621],[26.58771,57.53781],[26.58381,57.53957],[26.57978,57.53695],[26.57966,57.53375],[26.56123,57.5285],[26.56184,57.52261],[26.5666,57.51946],[26.55794,57.5137],[26.52585,57.51619],[26.49961,57.52451],[26.49095,57.54534],[26.46996,57.57551],[26.40151,57.57237],[26.34489,57.58408],[26.33476,57.5797],[26.32781,57.57963],[26.32635,57.58277],[26.3117,57.58473],[26.30853,57.59291],[26.3006,57.59343],[26.29291,57.59114],[26.28352,57.59232],[26.28217,57.5952],[26.27754,57.595],[26.27034,57.6001],[26.27022,57.60461],[26.25423,57.61383],[26.24715,57.62082],[26.24813,57.62775],[26.23947,57.63408],[26.24203,57.63539],[26.24667,57.63559],[26.23959,57.64649],[26.23239,57.6461],[26.23117,57.64904],[26.24215,57.65146],[26.2363,57.65753],[26.23032,57.65805],[26.21043,57.66601],[26.21372,57.66888],[26.21092,57.67071],[26.21018,57.67906],[26.20079,57.68102],[26.19896,57.68356],[26.19444,57.68519],[26.18541,57.68454],[26.17712,57.68761],[26.18871,57.69472],[26.19859,57.70906],[26.20567,57.71486],[26.1726,57.72867],[26.141,57.73278],[26.13563,57.73923],[26.13905,57.74548],[26.13551,57.7503],[26.10537,57.757],[26.08035,57.76547],[26.07974,57.76384],[26.07328,57.76371],[26.07047,57.7656],[26.05912,57.75987],[26.049,57.7611],[26.0435,57.76703],[26.03326,57.77054],[26.02374,57.76761],[26.01776,57.7723],[26.02459,57.77516],[26.02496,57.7816],[26.02252,57.78355],[26.02776,57.7898],[26.03081,57.79097],[26.03338,57.80105],[26.03679,57.80592],[26.03606,57.8108],[26.04851,57.82289],[26.05705,57.83842],[26.05558,57.84764],[26.03667,57.84926],[26.02008,57.84517],[26.00958,57.85731],[25.99848,57.85816],[25.96273,57.84491],[25.931,57.85244],[25.89537,57.84972],[25.8883,57.84595],[25.88085,57.84946],[25.88573,57.85277],[25.88427,57.85595],[25.87561,57.85796],[25.87475,57.86322],[25.8595,57.85614],[25.81923,57.86419],[25.78312,57.89948],[25.78629,57.90428],[25.77165,57.91206],[25.75102,57.91692],[25.73724,57.92295],[25.72833,57.92133],[25.72247,57.91245],[25.70356,57.90331],[25.67916,57.90461],[25.67549,57.91277],[25.66207,57.91511],[25.65609,57.91439],[25.64889,57.91666],[25.64987,57.91841],[25.63828,57.93059],[25.57983,57.9442],[25.59399,57.95961],[25.58935,57.96504],[25.58239,57.96783],[25.58044,57.9721],[25.57483,57.9741],[25.56556,57.96718],[25.56604,57.96258],[25.55714,57.96038],[25.55567,57.96711],[25.55079,57.97255],[25.53725,57.97139],[25.52566,57.97184],[25.5226,57.96802],[25.51638,57.96737],[25.51211,57.96977],[25.52212,57.97488],[25.51943,57.98031],[25.48539,57.97475],[25.47843,57.98006],[25.47843,57.98264],[25.44219,57.99616],[25.44817,58.00114],[25.46648,58.00515],[25.44817,58.01698],[25.40693,58.02893],[25.37155,58.02926],[25.36374,58.03171],[25.35336,58.04334],[25.34482,58.04676],[25.33604,58.05709],[25.3292,58.05858],[25.32664,58.0638],[25.31981,58.066],[25.31908,58.06929],[25.29553,58.08161],[25.28686,58.08149],[25.28113,58.07019],[25.266,58.06716],[25.26502,58.06],[25.27991,58.05063],[25.29309,58.0467],[25.30431,58.03449],[25.30114,58.01504],[25.29748,58.01459],[25.30285,58.00011],[25.29577,57.99972],[25.29736,57.99661],[25.30358,57.99396],[25.30138,57.99273],[25.29187,57.99286],[25.28308,57.98963],[25.26722,57.99454],[25.25611,57.9939],[25.25502,58.00347],[25.2455,58.00302],[25.22768,58.01782],[25.24587,58.01872],[25.23562,58.02286],[25.23635,58.02441],[25.22732,58.02435],[25.22537,58.02195],[25.21902,58.02977],[25.21658,58.04088],[25.22695,58.04799],[25.22817,58.05348],[25.22122,58.05302],[25.22146,58.05051],[25.2178,58.04908],[25.21597,58.05954],[25.21219,58.06226],[25.20523,58.06122],[25.20389,58.0651],[25.21621,58.07413],[25.21207,58.08052],[25.19962,58.08536],[25.18949,58.08007],[25.19169,58.07613],[25.1535,58.07478],[25.15154,58.07703],[25.13397,58.07974],[25.10579,58.07749],[25.10518,58.06645],[25.07662,58.06645],[25.02037,58.01769],[24.99512,58.01084],[24.94863,58.00942],[24.83234,57.97177],[24.80806,57.99066],[24.74229,57.98187],[24.74339,57.96491],[24.7329,57.96239],[24.71508,57.96271],[24.6919,57.94653],[24.67335,57.95896],[24.64468,57.95889],[24.64187,57.95423],[24.64577,57.95268],[24.62869,57.94193],[24.61612,57.94368],[24.60892,57.95125],[24.58464,57.96174],[24.57317,57.95436],[24.54792,57.94938],[24.54352,57.94478],[24.5301,57.94705],[24.5207,57.94303],[24.51839,57.93675],[24.5096,57.93442],[24.51326,57.93066],[24.4625,57.92496],[24.44579,57.90798],[24.46018,57.90662],[24.45225,57.89942],[24.46006,57.87977],[24.41138,57.86491],[24.40906,57.87191],[24.33707,57.87393],[24.33829,58.0109],[24.42272,58.01097],[24.42614,58.28002],[24.51155,58.2797],[24.51216,58.32471],[24.42638,58.32503],[24.42712,58.36972],[24.34182,58.37017],[24.34048,58.23547],[24.17014,58.23572],[24.17014,58.1908],[24.08485,58.19092],[24.0851,58.23605],[24.00066,58.23579],[23.99993,58.28092],[23.82971,58.28047],[23.82947,58.32554],[23.65864,58.32496],[23.65791,58.41493],[23.57225,58.41468],[23.57127,58.50436],[23.39935,58.50359],[23.40106,58.41391],[23.14421,58.41238],[23.14567,58.36735],[23.05989,58.36703],[23.06172,58.32221],[22.9757,58.32157],[22.97716,58.27681],[22.89187,58.27598],[22.89358,58.23103],[22.80865,58.2302],[22.81012,58.18539],[22.89529,58.1861],[22.89663,58.1413],[22.72641,58.13982],[22.72495,58.18475],[22.55522,58.18276],[22.55693,58.13744],[22.64173,58.13886],[22.64344,58.094],[22.38903,58.0909],[22.38525,58.18063],[22.29995,58.17967],[22.30679,58.04527],[22.22198,58.0436],[22.22626,57.95404],[22.14206,57.95281],[22.1445,57.90804],[22.06007,57.90681],[22.06263,57.86186],[21.97807,57.86043],[21.96831,58.04004],[22.05274,58.04134],[22.04506,58.17581],[21.96038,58.17471],[21.95781,58.21941],[21.78723,58.21638],[21.78211,58.30631],[21.69681,58.3049],[21.69401,58.34975],[21.77942,58.35122],[21.76795,58.53074],[22.02566,58.53488],[22.02797,58.49001],[22.11375,58.49167],[22.11144,58.53621],[22.19709,58.53742],[22.19453,58.5823],[22.45236,58.58573],[22.44638,58.7203],[22.36023,58.71916],[22.35364,58.85385]],[[23.47415,59.26726],[23.29868,59.26632],[23.29795,59.31138],[23.47293,59.31194],[23.47415,59.26726]],[[24.17014,58.1908],[24.25507,58.19073],[24.25458,58.14581],[24.17002,58.14588],[24.17014,58.1908]],[[24.08485,58.19092],[24.08497,58.10129],[23.99968,58.10116],[23.99993,58.05632],[23.91525,58.05612],[23.915,58.14613],[23.83032,58.146],[23.82971,58.23572],[23.91451,58.23585],[23.91476,58.19099],[24.08485,58.19092]],[[24.61854,59.53612],[24.44183,59.5368],[24.44309,59.62659],[24.62016,59.6258],[24.61854,59.53612]],[[26.40403,59.7852],[26.31501,59.78667],[26.31814,59.83152],[26.40732,59.82994],[26.40403,59.7852]],[[26.48308,59.649],[26.48647,59.69383],[26.57514,59.69202],[26.57166,59.64719],[26.48308,59.649]],[[23.15944,57.78408],[23.24346,57.78461],[23.24445,57.73971],[23.32848,57.74031],[23.32679,57.82998],[23.15845,57.82885],[23.15944,57.78408]]],terms_text:"Maa-Ameti ortofoto"},{id:"estrela_de_alagoas",name:"Estrela de Alagoas",type:"wms",template:"http://geoserver.dados.al.gov.br:8080/geoserver/Alagoas/ows?LAYERS=Estrela%20de%20Alagoas&SERVICE=WMS&FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.0&SERVICE=WMS&REQUEST=GetMap&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[-36.71382,-9.43476],[-36.71477,-9.34443],[-36.80586,-9.34498],[-36.80525,-9.43542],[-36.71382,-9.43476]]],terms_url:"http://www.seplag.al.gov.br",terms_text:"Secretaria de Estado do Planejamento, Gestão e Patrimônio"},{id:"eufar-balaton",name:"EUFAR Balaton orthophotos",type:"tms",template:"http://e.tile.openstreetmap.hu/balaton/0/{zoom}/{x}/{y}.jpg",endDate:"2010-08-31T00:00:00.000Z",startDate:"2010-08-01T00:00:00.000Z",zoomExtent:[12,19],polygon:[[[18.17918,46.98502],[18.17773,47.01816],[18.08176,47.05643],[18.10281,47.06311],[18.08152,47.09344],[18.06436,47.09049],[18.03537,47.07983],[18.03344,47.08262],[17.9582,47.05567],[17.99436,47.00449],[17.86441,46.95517],[17.80274,47.0103],[17.67184,46.97207],[17.23875,46.77079],[17.22244,46.6796],[17.47175,46.70306],[18.16735,46.94133],[18.17918,46.98502]]],terms_url:"http://www.bli.okologia.mta.hu/",terms_text:"EUFAR Balaton ortofotó 2010",best:true,description:"1940 geo-tagged photography from Balaton Limnological Institute."},{id:"Fiez-2013",name:"Fiez Orthophoto 2013",type:"tms",template:"http://osmdata.asitvd.ch/tiles/fiez2013/{zoom}/{x}/{y}.png",endDate:"2013-01-01T00:00:00.000Z",startDate:"2013-01-01T00:00:00.000Z",zoomExtent:[14,20],polygon:[[[6.62313,46.82339],[6.62899,46.82484],[6.62882,46.82674],[6.62531,46.83274],[6.62382,46.83317],[6.61839,46.83194],[6.62313,46.82339]]],terms_url:"http://osmdata.asitvd.ch/",terms_text:"Fiez - Orthophoto technique 2013"},{id:"fiskeridir-akvakultur",name:"Fiskeridirektoratet Aquaculture overlay",type:"wms",template:"https://ogc.fiskeridir.no/wms.ashx?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=layer_262&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",zoomExtent:[3,22],polygon:[[[31.90425,70.43681],[28.47652,71.32896],[23.6865,71.25143],[16.80906,70.07308],[11.16207,67.52539],[9.97554,64.81158],[4.21871,62.145],[4.37254,59.1872],[6.17431,57.8915],[7.93212,57.73936],[10.77758,58.86491],[11.7224,58.76251],[12.72216,60.11415],[13.05175,61.34935],[12.52439,63.61699],[14.23826,63.98561],[15.11717,65.90166],[18.69871,68.37491],[20.06101,68.26126],[21.00584,68.78415],[25.24656,68.3506],[26.93845,69.8472],[28.76219,69.61121],[28.5864,68.8556],[31.06931,69.51915],[31.90425,70.43681]]],terms_url:"https://www.fiskeridir.no/Kart",terms_text:"© Fiskeridirektoratet",description:"Aquaculture/marine farms (licensed sites, may not yet have any installations)",icon:"https://upload.wikimedia.org/wikipedia/commons/thumb/9/9c/Emblem_of_the_Norwegian_Directorate_of_Fisheries.svg/175px-Emblem_of_the_Norwegian_Directorate_of_Fisheries.svg.png",overlay:true},{id:"FOMI_2000",name:"FÖMI orthophoto 2000",type:"tms",template:"http://e.tile.openstreetmap.hu/ortofoto2000/{zoom}/{x}/{y}.jpg",endDate:"2000-01-01T00:00:00.000Z",startDate:"2000-01-01T00:00:00.000Z",zoomExtent:[0,17],polygon:[[[16.11391,46.8691],[16.17897,46.90662],[16.20004,46.94151],[16.22175,46.93554],[16.24628,46.94639],[16.25532,46.96421],[16.27647,46.96261],[16.29058,47.01398],[16.30162,46.99923],[16.34146,46.99652],[16.35052,47.01063],[16.3734,46.99859],[16.41277,47.00475],[16.43327,46.99274],[16.44781,47.00389],[16.48,46.99412],[16.5122,47.00117],[16.46356,47.03227],[16.44786,47.02275],[16.43912,47.02966],[16.44567,47.03887],[16.52032,47.0561],[16.47321,47.07362],[16.46372,47.09392],[16.5008,47.11006],[16.50004,47.12329],[16.52953,47.12874],[16.51716,47.14969],[16.45495,47.14259],[16.46487,47.16833],[16.45556,47.18756],[16.43056,47.1847],[16.4195,47.19491],[16.41892,47.21071],[16.43713,47.2097],[16.44263,47.23371],[16.43131,47.25276],[16.46715,47.25317],[16.48923,47.27989],[16.46463,47.33385],[16.4337,47.35281],[16.45851,47.36705],[16.44546,47.40702],[16.48317,47.40936],[16.49638,47.38927],[16.51709,47.41002],[16.57491,47.40542],[16.58073,47.41917],[16.66185,47.4556],[16.67064,47.47422],[16.65234,47.50034],[16.68956,47.51016],[16.71478,47.5402],[16.66354,47.56773],[16.6732,47.60495],[16.65953,47.6061],[16.65276,47.62285],[16.63142,47.62832],[16.57391,47.61967],[16.51474,47.6462],[16.49675,47.63931],[16.42546,47.66217],[16.44374,47.67421],[16.44805,47.69647],[16.4747,47.68116],[16.48722,47.69798],[16.55217,47.72255],[16.53638,47.73678],[16.54798,47.75154],[16.60952,47.76037],[16.63441,47.75908],[16.65729,47.74149],[16.72094,47.73536],[16.75341,47.68282],[16.83016,47.68106],[16.83943,47.70451],[16.86689,47.72115],[16.87668,47.68765],[17.09374,47.70777],[17.07066,47.72854],[17.0516,47.79385],[17.07495,47.8085],[17.04714,47.82856],[17.05195,47.83777],[17.01055,47.85818],[17.01639,47.86733],[17.08575,47.87462],[17.11317,47.92716],[17.09171,47.93429],[17.11838,47.96011],[17.09466,47.97088],[17.20103,48.01999],[17.24177,48.02247],[17.25795,47.99865],[17.33465,47.99312],[17.40299,47.94785],[17.45392,47.88526],[17.52674,47.86551],[17.56758,47.81513],[17.6084,47.82189],[17.70858,47.75668],[17.77987,47.73949],[17.8661,47.74575],[17.90013,47.73926],[17.94687,47.74467],[17.97087,47.75784],[18.00441,47.74634],[18.03806,47.75768],[18.29588,47.73146],[18.45407,47.76512],[18.49316,47.75276],[18.55908,47.766],[18.64609,47.75909],[18.72607,47.78904],[18.74118,47.81382],[18.792,47.82309],[18.84854,47.81672],[18.85588,47.82608],[18.82801,47.83429],[18.81357,47.85555],[18.76353,47.8716],[18.75686,47.89684],[18.77675,47.95509],[18.75525,47.97635],[18.81574,47.99344],[18.82,48.03968],[18.83327,48.04824],[18.87494,48.04707],[18.88667,48.05868],[18.90898,48.05114],[18.9439,48.05886],[18.98161,48.0536],[19.01486,48.07818],[19.05852,48.05735],[19.08436,48.07278],[19.1074,48.0656],[19.13529,48.07415],[19.24137,48.05365],[19.25578,48.07156],[19.30311,48.08871],[19.3866,48.09191],[19.40002,48.0823],[19.45405,48.10144],[19.46735,48.08393],[19.49442,48.10991],[19.49238,48.13966],[19.51282,48.15466],[19.50452,48.17344],[19.52897,48.19036],[19.52604,48.20313],[19.5775,48.21601],[19.63083,48.25007],[19.64452,48.23917],[19.66986,48.23921],[19.69122,48.20389],[19.72113,48.20147],[19.74618,48.21651],[19.78716,48.19253],[19.79873,48.19482],[19.80528,48.18373],[19.78242,48.16504],[19.79481,48.15353],[19.82133,48.16908],[19.84528,48.16274],[19.85517,48.17843],[19.86013,48.16941],[19.89875,48.16631],[19.91454,48.14686],[19.8983,48.1249],[19.93738,48.13112],[19.97439,48.166],[19.98871,48.16217],[20.02904,48.17768],[20.04945,48.1672],[20.07299,48.17961],[20.07004,48.1917],[20.13409,48.22518],[20.13319,48.25398],[20.20616,48.25098],[20.20383,48.26191],[20.22847,48.26278],[20.23495,48.27993],[20.28686,48.26164],[20.32571,48.27279],[20.33746,48.30167],[20.36566,48.31661],[20.38408,48.35118],[20.40983,48.36586],[20.40253,48.38256],[20.42053,48.40386],[20.41623,48.41854],[20.50793,48.48936],[20.50651,48.53442],[20.53747,48.52788],[20.54649,48.54429],[20.58659,48.53576],[20.65387,48.56141],[20.83636,48.58284],[20.8378,48.57421],[20.85044,48.58163],[20.84533,48.5665],[20.86815,48.55182],[20.92232,48.55945],[20.93463,48.53834],[20.95588,48.53396],[20.9562,48.52167],[20.98158,48.51777],[21.01511,48.53231],[21.06632,48.52589],[21.11745,48.49105],[21.16087,48.5215],[21.17963,48.51823],[21.22106,48.5375],[21.30549,48.52225],[21.31338,48.55084],[21.32688,48.55413],[21.31938,48.5612],[21.41545,48.55895],[21.42266,48.57882],[21.44061,48.5851],[21.51409,48.55107],[21.54202,48.5084],[21.61393,48.50942],[21.62019,48.46983],[21.66355,48.41796],[21.66456,48.39216],[21.70174,48.3807],[21.71187,48.35762],[21.81741,48.33279],[21.8352,48.33464],[21.83721,48.36325],[21.8843,48.35605],[21.88484,48.36754],[21.89788,48.36256],[21.8998,48.37022],[21.92819,48.3616],[21.92681,48.3709],[21.9492,48.37873],[21.99446,48.37732],[22.02133,48.39275],[22.0546,48.37753],[22.07649,48.38724],[22.08674,48.37156],[22.13591,48.38052],[22.13106,48.39123],[22.15277,48.39624],[22.15619,48.40931],[22.21257,48.42565],[22.23714,48.41004],[22.26549,48.40987],[22.23988,48.38701],[22.26757,48.36116],[22.31781,48.35454],[22.31329,48.32507],[22.33729,48.30791],[22.33843,48.27921],[22.38475,48.23396],[22.40064,48.2492],[22.43284,48.25252],[22.45639,48.24231],[22.4899,48.25342],[22.49722,48.23955],[22.51615,48.23797],[22.53111,48.20943],[22.57114,48.19614],[22.56164,48.18161],[22.59824,48.14476],[22.59028,48.10734],[22.67545,48.092],[22.73472,48.11985],[22.75762,48.12006],[22.77039,48.10902],[22.77232,48.12187],[22.80277,48.12211],[22.80253,48.10708],[22.82543,48.11751],[22.83644,48.08025],[22.86113,48.07503],[22.8678,48.05243],[22.88204,48.05481],[22.86597,48.01132],[22.83556,47.9906],[22.84076,47.98136],[22.87257,47.97527],[22.86973,47.96596],[22.89157,47.96724],[22.89744,47.95406],[22.84733,47.90776],[22.79281,47.89086],[22.75869,47.89414],[22.77775,47.84225],[22.71363,47.83609],[22.68019,47.78775],[22.61112,47.77175],[22.549,47.77222],[22.48121,47.81089],[22.45131,47.80339],[22.43133,47.73981],[22.35662,47.74862],[22.31777,47.76609],[22.31762,47.74337],[22.28514,47.72928],[22.26432,47.73107],[22.259,47.69791],[22.23068,47.6932],[22.17965,47.59161],[22.12892,47.5979],[22.09428,47.55836],[22.07826,47.56213],[22.05345,47.54748],[22.07122,47.53807],[22.06179,47.5288],[22.04513,47.53989],[22.03672,47.53267],[22.00719,47.48362],[22.03279,47.45084],[22.02388,47.39086],[22.01198,47.3758],[21.96274,47.38105],[21.93825,47.37253],[21.87779,47.28578],[21.88728,47.27305],[21.85349,47.23976],[21.85807,47.18736],[21.81248,47.16675],[21.79241,47.10598],[21.72683,47.09839],[21.6976,47.05792],[21.65042,47.04083],[21.68887,47.002],[21.66787,46.97123],[21.68149,46.96521],[21.6382,46.93305],[21.59845,46.92747],[21.61429,46.88673],[21.60167,46.86682],[21.52033,46.83737],[21.51861,46.80007],[21.48318,46.76502],[21.52634,46.73932],[21.52937,46.72097],[21.49233,46.68597],[21.47284,46.69591],[21.4299,46.69394],[21.43096,46.67814],[21.45467,46.66086],[21.41624,46.64262],[21.4098,46.62181],[21.3657,46.63795],[21.33005,46.63182],[21.31397,46.61767],[21.30124,46.59087],[21.32079,46.58286],[21.2743,46.54074],[21.26003,46.50216],[21.27442,46.47673],[21.29645,46.4763],[21.31743,46.45073],[21.28952,46.41548],[21.29633,46.40696],[21.22501,46.41369],[21.20642,46.40338],[21.19926,46.3479],[21.17623,46.33577],[21.1805,46.30445],[21.11554,46.30185],[21.10305,46.26246],[21.07088,46.2539],[21.06608,46.24294],[21.03662,46.24804],[21.02467,46.26653],[20.96082,46.2623],[20.94658,46.2793],[20.92507,46.27662],[20.92181,46.26181],[20.87327,46.28776],[20.77565,46.27596],[20.74905,46.25085],[20.76186,46.20456],[20.7274,46.20775],[20.73411,46.19394],[20.71405,46.16605],[20.68436,46.14478],[20.65492,46.14977],[20.63945,46.12676],[20.54505,46.17909],[20.50148,46.19033],[20.49494,46.17099],[20.45923,46.14288],[20.39751,46.15747],[20.36853,46.15286],[20.35571,46.16963],[20.29681,46.15215],[20.2549,46.11585],[20.24848,46.1301],[20.23301,46.12417],[20.18174,46.16011],[20.1365,46.14495],[20.10097,46.17728],[20.06362,46.14373],[20.03461,46.14589],[20.01581,46.17684],[19.93541,46.17642],[19.85335,46.15],[19.81797,46.12817],[19.75854,46.14798],[19.69821,46.18793],[19.68277,46.18004],[19.66151,46.19044],[19.63174,46.1693],[19.56765,46.17911],[19.5604,46.16658],[19.50266,46.14245],[19.52712,46.12103],[19.4645,46.09538],[19.46658,46.08204],[19.416,46.04605],[19.3804,46.03587],[19.36409,46.0523],[19.2819,46.0148],[19.29653,45.98812],[19.28565,45.9969],[19.14799,45.99634],[19.13384,46.0371],[19.10487,46.04017],[19.06604,46.0002],[19.07968,45.96364],[19.00598,45.95907],[19.00927,45.92366],[18.90613,45.93538],[18.87946,45.91668],[18.86471,45.92085],[18.86856,45.91134],[18.82768,45.90517],[18.822,45.91459],[18.80751,45.90361],[18.80925,45.87962],[18.79562,45.87845],[18.70489,45.91819],[18.67002,45.91084],[18.65966,45.91689],[18.66513,45.89928],[18.64128,45.88904],[18.65502,45.87424],[18.62777,45.87338],[18.61484,45.85314],[18.62367,45.83985],[18.57324,45.81376],[18.57498,45.80043],[18.55972,45.8038],[18.52235,45.78269],[18.49067,45.79472],[18.48219,45.7655],[18.45628,45.76952],[18.44508,45.76052],[18.44685,45.73713],[18.40763,45.73971],[18.39189,45.7617],[18.36423,45.77294],[18.33942,45.74716],[18.29682,45.76122],[18.24405,45.76123],[18.23073,45.77903],[18.19087,45.78788],[18.16819,45.77627],[18.12465,45.78963],[18.10681,45.77083],[18.08189,45.76452],[17.99588,45.79573],[17.93021,45.78633],[17.90668,45.79257],[17.86531,45.76701],[17.82627,45.81],[17.80898,45.8041],[17.78091,45.81749],[17.76034,45.81192],[17.74086,45.8296],[17.66329,45.83818],[17.62762,45.89794],[17.57007,45.93582],[17.43783,45.95038],[17.4259,45.92727],[17.41081,45.93997],[17.39215,45.93021],[17.38287,45.94757],[17.34762,45.94234],[17.34388,45.96053],[17.35377,45.9525],[17.39054,45.95819],[17.38742,45.96618],[17.35835,45.96427],[17.37549,45.96869],[17.37519,45.98811],[17.36357,45.99154],[17.35672,45.97358],[17.33396,45.99608],[17.33198,45.97289],[17.313,45.96653],[17.32365,45.98878],[17.29877,45.98387],[17.3042,46.00211],[17.25797,46.01103],[17.29632,46.02852],[17.25415,46.03001],[17.27096,46.05671],[17.23248,46.0592],[17.25251,46.06647],[17.23131,46.07903],[17.20199,46.07655],[17.23313,46.09896],[17.2104,46.10017],[17.21297,46.11386],[17.17593,46.10846],[17.17434,46.12876],[17.18652,46.13323],[17.1811,46.15055],[17.15623,46.15858],[17.15929,46.16968],[17.1261,46.16845],[17.12274,46.17898],[17.07525,46.18895],[17.06616,46.2023],[16.97354,46.2252],[16.97395,46.24311],[16.95041,46.24153],[16.88624,46.28146],[16.87137,46.32528],[16.88021,46.3357],[16.86154,46.34524],[16.86562,46.35565],[16.8522,46.35172],[16.84986,46.36262],[16.83529,46.36382],[16.83765,46.3748],[16.82617,46.3671],[16.79334,46.38739],[16.75921,46.37766],[16.72987,46.40149],[16.71821,46.38987],[16.67729,46.44945],[16.66318,46.4487],[16.66637,46.4583],[16.61879,46.46199],[16.60447,46.47608],[16.5236,46.50538],[16.53258,46.5314],[16.51767,46.53635],[16.50841,46.56527],[16.483,46.56604],[16.4834,46.5786],[16.44557,46.61095],[16.42486,46.61316],[16.38594,46.64425],[16.39154,46.66373],[16.41985,46.65848],[16.42863,46.69397],[16.36892,46.70401],[16.37983,46.71539],[16.37109,46.72229],[16.35706,46.71424],[16.3186,46.75414],[16.33054,46.77521],[16.31216,46.778],[16.31277,46.79731],[16.34064,46.80519],[16.35084,46.83006],[16.34033,46.84688],[16.3015,46.85951],[16.29139,46.87283],[16.23323,46.87667],[16.15609,46.85371],[16.12657,46.85691],[16.11391,46.8691]]],terms_url:"https://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",endDate:"2005-01-01T00:00:00.000Z",startDate:"2005-01-01T00:00:00.000Z",zoomExtent:[0,17],polygon:[[[16.11391,46.8691],[16.17897,46.90662],[16.20004,46.94151],[16.22175,46.93554],[16.24628,46.94639],[16.25532,46.96421],[16.27647,46.96261],[16.29058,47.01398],[16.30162,46.99923],[16.34146,46.99652],[16.35052,47.01063],[16.3734,46.99859],[16.41277,47.00475],[16.43327,46.99274],[16.44781,47.00389],[16.48,46.99412],[16.5122,47.00117],[16.46356,47.03227],[16.44786,47.02275],[16.43912,47.02966],[16.44567,47.03887],[16.52032,47.0561],[16.47321,47.07362],[16.46372,47.09392],[16.5008,47.11006],[16.50004,47.12329],[16.52953,47.12874],[16.51716,47.14969],[16.45495,47.14259],[16.46487,47.16833],[16.45556,47.18756],[16.43056,47.1847],[16.4195,47.19491],[16.41892,47.21071],[16.43713,47.2097],[16.44263,47.23371],[16.43131,47.25276],[16.46715,47.25317],[16.48923,47.27989],[16.46463,47.33385],[16.4337,47.35281],[16.45851,47.36705],[16.44546,47.40702],[16.48317,47.40936],[16.49638,47.38927],[16.51709,47.41002],[16.57491,47.40542],[16.58073,47.41917],[16.66185,47.4556],[16.67064,47.47422],[16.65234,47.50034],[16.68956,47.51016],[16.71478,47.5402],[16.66354,47.56773],[16.6732,47.60495],[16.65953,47.6061],[16.65276,47.62285],[16.63142,47.62832],[16.57391,47.61967],[16.51474,47.6462],[16.49675,47.63931],[16.42546,47.66217],[16.44374,47.67421],[16.44805,47.69647],[16.4747,47.68116],[16.48722,47.69798],[16.55217,47.72255],[16.53638,47.73678],[16.54798,47.75154],[16.60952,47.76037],[16.63441,47.75908],[16.65729,47.74149],[16.72094,47.73536],[16.75341,47.68282],[16.83016,47.68106],[16.83943,47.70451],[16.86689,47.72115],[16.87668,47.68765],[17.09374,47.70777],[17.07066,47.72854],[17.0516,47.79385],[17.07495,47.8085],[17.04714,47.82856],[17.05195,47.83777],[17.01055,47.85818],[17.01639,47.86733],[17.08575,47.87462],[17.11317,47.92716],[17.09171,47.93429],[17.11838,47.96011],[17.09466,47.97088],[17.20103,48.01999],[17.24177,48.02247],[17.25795,47.99865],[17.33465,47.99312],[17.40299,47.94785],[17.45392,47.88526],[17.52674,47.86551],[17.56758,47.81513],[17.6084,47.82189],[17.70858,47.75668],[17.77987,47.73949],[17.8661,47.74575],[17.90013,47.73926],[17.94687,47.74467],[17.97087,47.75784],[18.00441,47.74634],[18.03806,47.75768],[18.29588,47.73146],[18.45407,47.76512],[18.49316,47.75276],[18.55908,47.766],[18.64609,47.75909],[18.72607,47.78904],[18.74118,47.81382],[18.792,47.82309],[18.84854,47.81672],[18.85588,47.82608],[18.82801,47.83429],[18.81357,47.85555],[18.76353,47.8716],[18.75686,47.89684],[18.77675,47.95509],[18.75525,47.97635],[18.81574,47.99344],[18.82,48.03968],[18.83327,48.04824],[18.87494,48.04707],[18.88667,48.05868],[18.90898,48.05114],[18.9439,48.05886],[18.98161,48.0536],[19.01486,48.07818],[19.05852,48.05735],[19.08436,48.07278],[19.1074,48.0656],[19.13529,48.07415],[19.24137,48.05365],[19.25578,48.07156],[19.30311,48.08871],[19.3866,48.09191],[19.40002,48.0823],[19.45405,48.10144],[19.46735,48.08393],[19.49442,48.10991],[19.49238,48.13966],[19.51282,48.15466],[19.50452,48.17344],[19.52897,48.19036],[19.52604,48.20313],[19.5775,48.21601],[19.63083,48.25007],[19.64452,48.23917],[19.66986,48.23921],[19.69122,48.20389],[19.72113,48.20147],[19.74618,48.21651],[19.78716,48.19253],[19.79873,48.19482],[19.80528,48.18373],[19.78242,48.16504],[19.79481,48.15353],[19.82133,48.16908],[19.84528,48.16274],[19.85517,48.17843],[19.86013,48.16941],[19.89875,48.16631],[19.91454,48.14686],[19.8983,48.1249],[19.93738,48.13112],[19.97439,48.166],[19.98871,48.16217],[20.02904,48.17768],[20.04945,48.1672],[20.07299,48.17961],[20.07004,48.1917],[20.13409,48.22518],[20.13319,48.25398],[20.20616,48.25098],[20.20383,48.26191],[20.22847,48.26278],[20.23495,48.27993],[20.28686,48.26164],[20.32571,48.27279],[20.33746,48.30167],[20.36566,48.31661],[20.38408,48.35118],[20.40983,48.36586],[20.40253,48.38256],[20.42053,48.40386],[20.41623,48.41854],[20.50793,48.48936],[20.50651,48.53442],[20.53747,48.52788],[20.54649,48.54429],[20.58659,48.53576],[20.65387,48.56141],[20.83636,48.58284],[20.8378,48.57421],[20.85044,48.58163],[20.84533,48.5665],[20.86815,48.55182],[20.92232,48.55945],[20.93463,48.53834],[20.95588,48.53396],[20.9562,48.52167],[20.98158,48.51777],[21.01511,48.53231],[21.06632,48.52589],[21.11745,48.49105],[21.16087,48.5215],[21.17963,48.51823],[21.22106,48.5375],[21.30549,48.52225],[21.31338,48.55084],[21.32688,48.55413],[21.31938,48.5612],[21.41545,48.55895],[21.42266,48.57882],[21.44061,48.5851],[21.51409,48.55107],[21.54202,48.5084],[21.61393,48.50942],[21.62019,48.46983],[21.66355,48.41796],[21.66456,48.39216],[21.70174,48.3807],[21.71187,48.35762],[21.81741,48.33279],[21.8352,48.33464],[21.83721,48.36325],[21.8843,48.35605],[21.88484,48.36754],[21.89788,48.36256],[21.8998,48.37022],[21.92819,48.3616],[21.92681,48.3709],[21.9492,48.37873],[21.99446,48.37732],[22.02133,48.39275],[22.0546,48.37753],[22.07649,48.38724],[22.08674,48.37156],[22.13591,48.38052],[22.13106,48.39123],[22.15277,48.39624],[22.15619,48.40931],[22.21257,48.42565],[22.23714,48.41004],[22.26549,48.40987],[22.23988,48.38701],[22.26757,48.36116],[22.31781,48.35454],[22.31329,48.32507],[22.33729,48.30791],[22.33843,48.27921],[22.38475,48.23396],[22.40064,48.2492],[22.43284,48.25252],[22.45639,48.24231],[22.4899,48.25342],[22.49722,48.23955],[22.51615,48.23797],[22.53111,48.20943],[22.57114,48.19614],[22.56164,48.18161],[22.59824,48.14476],[22.59028,48.10734],[22.67545,48.092],[22.73472,48.11985],[22.75762,48.12006],[22.77039,48.10902],[22.77232,48.12187],[22.80277,48.12211],[22.80253,48.10708],[22.82543,48.11751],[22.83644,48.08025],[22.86113,48.07503],[22.8678,48.05243],[22.88204,48.05481],[22.86597,48.01132],[22.83556,47.9906],[22.84076,47.98136],[22.87257,47.97527],[22.86973,47.96596],[22.89157,47.96724],[22.89744,47.95406],[22.84733,47.90776],[22.79281,47.89086],[22.75869,47.89414],[22.77775,47.84225],[22.71363,47.83609],[22.68019,47.78775],[22.61112,47.77175],[22.549,47.77222],[22.48121,47.81089],[22.45131,47.80339],[22.43133,47.73981],[22.35662,47.74862],[22.31777,47.76609],[22.31762,47.74337],[22.28514,47.72928],[22.26432,47.73107],[22.259,47.69791],[22.23068,47.6932],[22.17965,47.59161],[22.12892,47.5979],[22.09428,47.55836],[22.07826,47.56213],[22.05345,47.54748],[22.07122,47.53807],[22.06179,47.5288],[22.04513,47.53989],[22.03672,47.53267],[22.00719,47.48362],[22.03279,47.45084],[22.02388,47.39086],[22.01198,47.3758],[21.96274,47.38105],[21.93825,47.37253],[21.87779,47.28578],[21.88728,47.27305],[21.85349,47.23976],[21.85807,47.18736],[21.81248,47.16675],[21.79241,47.10598],[21.72683,47.09839],[21.6976,47.05792],[21.65042,47.04083],[21.68887,47.002],[21.66787,46.97123],[21.68149,46.96521],[21.6382,46.93305],[21.59845,46.92747],[21.61429,46.88673],[21.60167,46.86682],[21.52033,46.83737],[21.51861,46.80007],[21.48318,46.76502],[21.52634,46.73932],[21.52937,46.72097],[21.49233,46.68597],[21.47284,46.69591],[21.4299,46.69394],[21.43096,46.67814],[21.45467,46.66086],[21.41624,46.64262],[21.4098,46.62181],[21.3657,46.63795],[21.33005,46.63182],[21.31397,46.61767],[21.30124,46.59087],[21.32079,46.58286],[21.2743,46.54074],[21.26003,46.50216],[21.27442,46.47673],[21.29645,46.4763],[21.31743,46.45073],[21.28952,46.41548],[21.29633,46.40696],[21.22501,46.41369],[21.20642,46.40338],[21.19926,46.3479],[21.17623,46.33577],[21.1805,46.30445],[21.11554,46.30185],[21.10305,46.26246],[21.07088,46.2539],[21.06608,46.24294],[21.03662,46.24804],[21.02467,46.26653],[20.96082,46.2623],[20.94658,46.2793],[20.92507,46.27662],[20.92181,46.26181],[20.87327,46.28776],[20.77565,46.27596],[20.74905,46.25085],[20.76186,46.20456],[20.7274,46.20775],[20.73411,46.19394],[20.71405,46.16605],[20.68436,46.14478],[20.65492,46.14977],[20.63945,46.12676],[20.54505,46.17909],[20.50148,46.19033],[20.49494,46.17099],[20.45923,46.14288],[20.39751,46.15747],[20.36853,46.15286],[20.35571,46.16963],[20.29681,46.15215],[20.2549,46.11585],[20.24848,46.1301],[20.23301,46.12417],[20.18174,46.16011],[20.1365,46.14495],[20.10097,46.17728],[20.06362,46.14373],[20.03461,46.14589],[20.01581,46.17684],[19.93541,46.17642],[19.85335,46.15],[19.81797,46.12817],[19.75854,46.14798],[19.69821,46.18793],[19.68277,46.18004],[19.66151,46.19044],[19.63174,46.1693],[19.56765,46.17911],[19.5604,46.16658],[19.50266,46.14245],[19.52712,46.12103],[19.4645,46.09538],[19.46658,46.08204],[19.416,46.04605],[19.3804,46.03587],[19.36409,46.0523],[19.2819,46.0148],[19.29653,45.98812],[19.28565,45.9969],[19.14799,45.99634],[19.13384,46.0371],[19.10487,46.04017],[19.06604,46.0002],[19.07968,45.96364],[19.00598,45.95907],[19.00927,45.92366],[18.90613,45.93538],[18.87946,45.91668],[18.86471,45.92085],[18.86856,45.91134],[18.82768,45.90517],[18.822,45.91459],[18.80751,45.90361],[18.80925,45.87962],[18.79562,45.87845],[18.70489,45.91819],[18.67002,45.91084],[18.65966,45.91689],[18.66513,45.89928],[18.64128,45.88904],[18.65502,45.87424],[18.62777,45.87338],[18.61484,45.85314],[18.62367,45.83985],[18.57324,45.81376],[18.57498,45.80043],[18.55972,45.8038],[18.52235,45.78269],[18.49067,45.79472],[18.48219,45.7655],[18.45628,45.76952],[18.44508,45.76052],[18.44685,45.73713],[18.40763,45.73971],[18.39189,45.7617],[18.36423,45.77294],[18.33942,45.74716],[18.29682,45.76122],[18.24405,45.76123],[18.23073,45.77903],[18.19087,45.78788],[18.16819,45.77627],[18.12465,45.78963],[18.10681,45.77083],[18.08189,45.76452],[17.99588,45.79573],[17.93021,45.78633],[17.90668,45.79257],[17.86531,45.76701],[17.82627,45.81],[17.80898,45.8041],[17.78091,45.81749],[17.76034,45.81192],[17.74086,45.8296],[17.66329,45.83818],[17.62762,45.89794],[17.57007,45.93582],[17.43783,45.95038],[17.4259,45.92727],[17.41081,45.93997],[17.39215,45.93021],[17.38287,45.94757],[17.34762,45.94234],[17.34388,45.96053],[17.35377,45.9525],[17.39054,45.95819],[17.38742,45.96618],[17.35835,45.96427],[17.37549,45.96869],[17.37519,45.98811],[17.36357,45.99154],[17.35672,45.97358],[17.33396,45.99608],[17.33198,45.97289],[17.313,45.96653],[17.32365,45.98878],[17.29877,45.98387],[17.3042,46.00211],[17.25797,46.01103],[17.29632,46.02852],[17.25415,46.03001],[17.27096,46.05671],[17.23248,46.0592],[17.25251,46.06647],[17.23131,46.07903],[17.20199,46.07655],[17.23313,46.09896],[17.2104,46.10017],[17.21297,46.11386],[17.17593,46.10846],[17.17434,46.12876],[17.18652,46.13323],[17.1811,46.15055],[17.15623,46.15858],[17.15929,46.16968],[17.1261,46.16845],[17.12274,46.17898],[17.07525,46.18895],[17.06616,46.2023],[16.97354,46.2252],[16.97395,46.24311],[16.95041,46.24153],[16.88624,46.28146],[16.87137,46.32528],[16.88021,46.3357],[16.86154,46.34524],[16.86562,46.35565],[16.8522,46.35172],[16.84986,46.36262],[16.83529,46.36382],[16.83765,46.3748],[16.82617,46.3671],[16.79334,46.38739],[16.75921,46.37766],[16.72987,46.40149],[16.71821,46.38987],[16.67729,46.44945],[16.66318,46.4487],[16.66637,46.4583],[16.61879,46.46199],[16.60447,46.47608],[16.5236,46.50538],[16.53258,46.5314],[16.51767,46.53635],[16.50841,46.56527],[16.483,46.56604],[16.4834,46.5786],[16.44557,46.61095],[16.42486,46.61316],[16.38594,46.64425],[16.39154,46.66373],[16.41985,46.65848],[16.42863,46.69397],[16.36892,46.70401],[16.37983,46.71539],[16.37109,46.72229],[16.35706,46.71424],[16.3186,46.75414],[16.33054,46.77521],[16.31216,46.778],[16.31277,46.79731],[16.34064,46.80519],[16.35084,46.83006],[16.34033,46.84688],[16.3015,46.85951],[16.29139,46.87283],[16.23323,46.87667],[16.15609,46.85371],[16.12657,46.85691],[16.11391,46.8691]]],terms_url:"https://www.fomi.hu",terms_text:"Földmérési és Távérzékelési Intézet"},{id:"Freemap.sk-Car",name:"Freemap.sk Car",type:"tms",template:"https://{switch:a,b,c,d}.freemap.sk/A/{zoom}/{x}/{y}.jpeg",zoomExtent:[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.",icon:"https://raw.githubusercontent.com/FreemapSlovakia/freemap-v3-react/master/src/images/freemap-logo-small.png"},{id:"Freemap.sk-Cyclo",name:"Freemap.sk Cyclo",type:"tms",template:"https://{switch:a,b,c,d}.freemap.sk/C/{zoom}/{x}/{y}.jpeg",zoomExtent:[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.",icon:"https://raw.githubusercontent.com/FreemapSlovakia/freemap-v3-react/master/src/images/freemap-logo-small.png"},{id:"Freemap.sk-Hiking",name:"Freemap.sk Hiking",type:"tms",template:"https://{switch:a,b,c,d}.freemap.sk/T/{zoom}/{x}/{y}.jpeg",zoomExtent:[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.",icon:"https://raw.githubusercontent.com/FreemapSlovakia/freemap-v3-react/master/src/images/freemap-logo-small.png"},{id:"Freemap.sk-Ski",name:"Freemap.sk Ski",type:"tms",template:"https://{switch:a,b,c,d}.freemap.sk/K/{zoom}/{x}/{y}.jpeg",zoomExtent:[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.",icon:"https://raw.githubusercontent.com/FreemapSlovakia/freemap-v3-react/master/src/images/freemap-logo-small.png"},{id:"fta-digiroad-functional",name:"FTA Road Network",type:"wms",template:"https://extranet.liikennevirasto.fi/inspirepalvelu/beta/wms?SERVICE=WMS&FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=dr_tielinkki_toim_lk&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",zoomExtent:[3,20],polygon:[[[27.96569,70.0988],[27.57431,70.07728],[27.10876,69.93548],[26.70913,69.97549],[26.45507,69.94207],[25.87142,69.6671],[25.94833,69.61024],[25.83023,69.55323],[25.66955,69.20794],[25.73822,69.01797],[25.60089,68.90309],[25.45806,68.91199],[25.11749,68.80699],[25.07354,68.64355],[24.88128,68.62003],[23.97491,68.84568],[23.74969,68.8308],[23.63433,68.71645],[23.18939,68.68053],[22.52197,68.7553],[21.63894,69.28191],[21.26953,69.31783],[20.94131,69.21622],[21.08963,69.09307],[21.05941,69.04352],[20.72296,69.12491],[20.54443,69.0558],[20.84655,68.97416],[20.81634,68.91742],[21.38754,68.68461],[22.04734,68.47066],[22.80212,68.35464],[23.12072,68.13169],[23.5437,67.9633],[23.44757,67.8393],[23.48602,67.59352],[23.36517,67.46545],[23.71124,67.41592],[23.72772,67.32186],[23.54644,67.26885],[23.53128,67.16724],[23.89251,66.86863],[23.84582,66.57775],[23.61843,66.44562],[23.67171,66.20303],[23.87191,66.14551],[24.09988,65.87247],[24.1658,65.66959],[24.11636,65.39143],[21.37939,63.68037],[20.17639,63.29787],[19.08325,60.16064],[20.22033,59.44786],[22.29125,59.44507],[25.82336,59.933],[27.52075,60.23435],[27.83386,60.53229],[29.29641,61.26165],[31.20803,62.44759],[31.62826,62.90585],[31.2635,63.22106],[29.99605,63.75387],[30.28656,63.81704],[30.58319,64.0782],[30.5104,64.26428],[30.09979,64.39218],[30.02563,64.58736],[30.16845,64.63329],[30.09429,64.79518],[29.78393,64.79811],[29.65347,64.89733],[29.65759,65.05939],[29.91027,65.09527],[29.93225,65.20895],[29.72076,65.27853],[29.91577,65.63788],[30.1863,65.66223],[29.9913,66.09771],[29.07119,66.91983],[30.11077,67.63431],[29.3486,68.08099],[28.67568,68.20166],[28.46547,68.54039],[28.72375,68.72642],[28.82675,68.87341],[28.44985,68.90792],[28.95996,69.05089],[28.83324,69.10563],[28.87207,69.22132],[29.36096,69.46526],[29.15634,69.69667],[28.38455,69.83488],[28.35845,69.88312],[28.17169,69.92511],[28.00415,70.01495],[27.96569,70.0988]]],terms_url:"https://www.liikennevirasto.fi/web/en/open-data/digiroad/",terms_text:"© Liikennevirasto",description:"Digiroad national road network from the Finnish Transport Agency, functional road classes.",icon:"https://www.liikennevirasto.fi/livi-theme/images/general/liikennevirasto_logo_2x.png",overlay:true},{id:"gaza_pleiades_20140706",name:"Gaza Strip - Pléiades - 2014/07/06",type:"tms",template:"https://imagery.openstreetmap.fr/tms/1.0.0/gaza_pleiades_20140706/{zoom}/{x}/{y}",endDate:"2014-07-06T00:00:00.000Z",startDate:"2014-07-06T00:00:00.000Z",zoomExtent:[0,22],polygon:[[[34.49022,31.59487],[34.49339,31.59263],[34.5678,31.5401],[34.5653,31.53226],[34.55613,31.52552],[34.54729,31.5121],[34.53011,31.5066],[34.5255,31.50251],[34.51369,31.50067],[34.505,31.49543],[34.4887,31.48263],[34.48532,31.48028],[34.47962,31.47778],[34.47471,31.47207],[34.4674,31.46448],[34.46576,31.46275],[34.45308,31.45139],[34.44585,31.4441],[34.44216,31.44327],[34.43798,31.44112],[34.43226,31.43458],[34.43164,31.43265],[34.4268,31.42804],[34.42211,31.42437],[34.41326,31.41862],[34.41329,31.41758],[34.41174,31.41604],[34.40918,31.41542],[34.4067,31.41295],[34.40506,31.41295],[34.40197,31.4112],[34.40134,31.40986],[34.39492,31.40391],[34.39351,31.40113],[34.38824,31.39599],[34.38037,31.38951],[34.38074,31.38791],[34.37407,31.37915],[34.37338,31.37422],[34.37159,31.37209],[34.37214,31.37093],[34.37158,31.36972],[34.3704,31.36909],[34.36827,31.36992],[34.36685,31.36914],[34.36497,31.36137],[34.37438,31.30609],[34.36708,31.29074],[34.34339,31.27846],[34.33119,31.26149],[34.31931,31.25317],[34.29093,31.24009],[34.26762,31.21894],[34.25915,31.22131],[34.231,31.26295],[34.21113,31.32157],[34.2434,31.34554],[34.29954,31.39629],[34.34172,31.43251],[34.36439,31.45715],[34.41099,31.50162],[34.42619,31.52686],[34.44463,31.54193],[34.49022,31.59487]]],terms_url:"https://wiki.openstreetmap.org/wiki/2014_Gaza_Strip",terms_text:"Copyright CNES 2014, Distribution Airbus Defence and Space"},{id:"gaza_pleiades_20140706_nir",name:"Gaza Strip - Pléiades - 2014/07/06 (NIR)",type:"tms",template:"https://imagery.openstreetmap.fr/tms/1.0.0/gaza_pleiades_20140706_nir/{zoom}/{x}/{y}",endDate:"2014-07-06T00:00:00.000Z",startDate:"2014-07-06T00:00:00.000Z",zoomExtent:[0,22],polygon:[[[34.49022,31.59487],[34.49339,31.59263],[34.5678,31.5401],[34.5653,31.53226],[34.55613,31.52552],[34.54729,31.5121],[34.53011,31.5066],[34.5255,31.50251],[34.51369,31.50067],[34.505,31.49543],[34.4887,31.48263],[34.48532,31.48028],[34.47962,31.47778],[34.47471,31.47207],[34.4674,31.46448],[34.46576,31.46275],[34.45308,31.45139],[34.44585,31.4441],[34.44216,31.44327],[34.43798,31.44112],[34.43226,31.43458],[34.43164,31.43265],[34.4268,31.42804],[34.42211,31.42437],[34.41326,31.41862],[34.41329,31.41758],[34.41174,31.41604],[34.40918,31.41542],[34.4067,31.41295],[34.40506,31.41295],[34.40197,31.4112],[34.40134,31.40986],[34.39492,31.40391],[34.39351,31.40113],[34.38824,31.39599],[34.38037,31.38951],[34.38074,31.38791],[34.37407,31.37915],[34.37338,31.37422],[34.37159,31.37209],[34.37214,31.37093],[34.37158,31.36972],[34.3704,31.36909],[34.36827,31.36992],[34.36685,31.36914],[34.36497,31.36137],[34.37438,31.30609],[34.36708,31.29074],[34.34339,31.27846],[34.33119,31.26149],[34.31931,31.25317],[34.29093,31.24009],[34.26762,31.21894],[34.25915,31.22131],[34.231,31.26295],[34.21113,31.32157],[34.2434,31.34554],[34.29954,31.39629],[34.34172,31.43251],[34.36439,31.45715],[34.41099,31.50162],[34.42619,31.52686],[34.44463,31.54193],[34.49022,31.59487]]],terms_url:"https://wiki.openstreetmap.org/wiki/2014_Gaza_Strip",terms_text:"Copyright CNES 2014, Distribution Airbus Defence and Space"},{id:"Geobase_Hydrography",name:"Geobase Hydrography - English",type:"wms",template:"https://maps.geogratis.gc.ca/wms/hydro_network_en?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=nhn:nhn&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[-141.0678,60.2442],[-139.3842,60.10331],[-137.4746,58.82791],[-135.4766,59.65971],[-134.399,58.86279],[-132.5239,57.08342],[-130.1435,55.27452],[-130.7734,54.75597],[-132.4355,54.71514],[-134.5711,54.38827],[-141.7761,53.58405],[-128.9768,46.41459],[-124.8087,48.42976],[-123.4286,48.17889],[-123.0256,48.40444],[-123.19237,48.65504],[-122.99582,48.51065],[-122.4869,48.4098],[-122.32915,48.4528],[-122.22939,48.50649],[-122.17908,48.52965],[-122.1842,48.5669],[-121.77833,48.57593],[-121.66578,48.42791],[-121.33068,48.35714],[-121.02713,48.34977],[-121.03054,48.49406],[-120.698,48.51497],[-120.51041,48.8718],[-119.97579,48.88134],[-119.95447,48.51497],[-119.90758,48.29421],[-119.73193,48.15503],[-119.74386,48.07419],[-119.62279,48.10951],[-119.60232,48.14707],[-119.25273,48.16243],[-114.1499,48.99487],[-95.12094,48.98405],[-95.13419,49.35564],[-94.94415,49.34356],[-94.8839,49.29522],[-94.71704,48.87631],[-94.71791,48.7485],[-93.83204,48.49765],[-93.43778,48.53066],[-93.38216,48.59507],[-92.98471,48.60312],[-92.73847,48.50725],[-92.7095,48.42081],[-92.54293,48.40158],[-92.38361,48.20406],[-92.11564,48.27641],[-91.58697,48.02516],[-91.24658,48.05422],[-90.86275,48.20889],[-90.78308,48.0639],[-90.0774,48.07435],[-89.93835,47.96584],[-89.75469,47.99609],[-89.32745,47.93943],[-88.41489,48.26677],[-84.9566,46.86086],[-84.84795,46.6762],[-84.55904,46.45441],[-84.47642,46.44972],[-84.43758,46.48872],[-84.3669,46.5055],[-84.34899,46.5055],[-84.29026,46.49077],[-84.25742,46.49386],[-84.22507,46.53187],[-84.1962,46.53804],[-84.18027,46.52468],[-84.15987,46.52468],[-84.13449,46.52879],[-84.11558,46.50653],[-84.15944,46.42769],[-84.10024,46.20338],[-83.95558,46.05132],[-83.8864,46.06125],[-83.8203,46.11181],[-83.76975,46.09563],[-83.67498,46.11391],[-83.58084,46.09921],[-83.44747,45.99521],[-83.60888,45.81772],[-82.14271,43.57905],[-82.39133,43.06666],[-82.41252,43.01127],[-82.42522,42.99864],[-82.42618,42.99374],[-82.42363,42.98536],[-82.41503,42.97697],[-82.41853,42.96578],[-82.43064,42.95203],[-82.44911,42.93711],[-82.45739,42.92568],[-82.46472,42.90562],[-82.47228,42.8877],[-82.47228,42.84743],[-82.48536,42.80967],[-82.46844,42.76365],[-82.48586,42.73697],[-82.49155,42.71168],[-82.51488,42.66652],[-82.51224,42.63893],[-82.52421,42.61103],[-82.56854,42.58184],[-82.59498,42.55148],[-82.61286,42.56409],[-82.65158,42.55707],[-82.83439,42.3763],[-83.01489,42.33457],[-83.07244,42.31502],[-83.09647,42.29542],[-83.12823,42.24126],[-83.14167,42.18582],[-83.12799,42.12172],[-83.16266,42.04963],[-83.05136,41.70911],[-82.41932,41.6377],[-81.22563,42.19633],[-80.06688,42.37121],[-78.86642,42.825],[-78.90301,42.92307],[-78.92063,42.95234],[-78.93331,42.95708],[-78.96058,42.9595],[-78.98479,42.9761],[-79.01825,42.9964],[-79.01969,43.01561],[-79.00695,43.0333],[-78.99599,43.06448],[-79.07335,43.07876],[-79.07286,43.083],[-79.0652,43.0917],[-79.05623,43.10825],[-79.05982,43.11563],[-79.06764,43.11992],[-79.05411,43.12801],[-79.04112,43.13986],[-79.04465,43.16192],[-79.05101,43.17037],[-79.04758,43.19974],[-79.05511,43.25682],[-79.18688,43.44858],[-78.68836,43.62502],[-76.77647,43.61369],[-76.41665,44.08498],[-75.49023,44.70772],[-75.29544,44.82587],[-75.16845,44.88548],[-75.1275,44.8975],[-75.00499,44.95265],[-74.98159,44.97728],[-74.90496,44.98222],[-74.8313,45.01108],[-74.77954,45.00158],[-74.74562,44.98526],[-74.70475,44.99877],[-74.49079,44.99343],[-74.23203,44.98552],[-73.93713,44.99512],[-73.01809,45.0121],[-72.63177,45.0121],[-72.54779,45.00506],[-72.32259,45.00286],[-71.49404,45.01093],[-71.48648,45.06221],[-71.42303,45.12765],[-71.43112,45.14037],[-71.37175,45.22117],[-71.28959,45.28578],[-71.23613,45.24302],[-71.11683,45.22933],[-71.0531,45.29866],[-70.98936,45.31088],[-70.90246,45.22525],[-70.82473,45.22714],[-70.77626,45.40013],[-70.7119,45.3754],[-70.63387,45.37346],[-70.60302,45.41179],[-70.67659,45.56319],[-70.3752,45.73075],[-70.36334,45.82013],[-70.25417,45.87468],[-70.22569,45.94403],[-70.27316,45.99022],[-70.17586,46.33538],[-70.06195,46.4107],[-69.98891,46.69363],[-69.22424,47.44463],[-69.06999,47.41092],[-69.07473,47.24202],[-68.89684,47.17469],[-68.78685,47.21493],[-68.72415,47.23217],[-68.68583,47.24028],[-68.66044,47.23183],[-68.62162,47.24028],[-68.59425,47.24974],[-68.59226,47.27001],[-68.57385,47.28486],[-68.55941,47.2798],[-68.542,47.2798],[-68.51214,47.29195],[-68.47381,47.29229],[-68.46038,47.28149],[-68.43898,47.27777],[-68.37229,47.2825],[-68.3703,47.34796],[-68.33173,47.35822],[-68.29664,47.352],[-68.2399,47.34897],[-68.0906,47.26798],[-68.00002,47.21223],[-67.96344,47.19753],[-67.93582,47.15947],[-67.88619,47.10424],[-67.80218,47.06386],[-67.79415,45.93923],[-67.82753,45.8489],[-67.82753,45.6704],[-67.54943,45.57445],[-67.45302,45.58742],[-67.44189,45.52251],[-67.54201,45.49393],[-67.4456,45.38726],[-67.51605,45.29343],[-67.38257,45.11839],[-67.3047,45.11316],[-67.26762,45.18116],[-67.12671,45.09484],[-66.94835,44.78406],[-66.52283,43.61294],[-65.02339,42.10691],[-42.53366,47.50263],[-75.90901,77.3176],[-71.86482,78.7359],[-67.20011,80.66812],[-66.20727,80.78637],[-54.82473,83.07464],[-57.62518,85.04043],[-106.7949,85.04625],[-141.3957,79.2514],[-141.0678,60.2442]]],overlay:true},{id:"Geobase_Hydrography_French",name:"Geobase Hydrography - French",type:"wms",template:"https://maps.geogratis.gc.ca/wms/hydro_network_fr?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=nhn:nhn&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[-141.0678,60.2442],[-139.3842,60.10331],[-137.4746,58.82791],[-135.4766,59.65971],[-134.399,58.86279],[-132.5239,57.08342],[-130.1435,55.27452],[-130.7734,54.75597],[-132.4355,54.71514],[-134.5711,54.38827],[-141.7761,53.58405],[-128.9768,46.41459],[-124.8087,48.42976],[-123.4286,48.17889],[-123.0256,48.40444],[-123.19237,48.65504],[-122.99582,48.51065],[-122.4869,48.4098],[-122.32915,48.4528],[-122.22939,48.50649],[-122.17908,48.52965],[-122.1842,48.5669],[-121.77833,48.57593],[-121.66578,48.42791],[-121.33068,48.35714],[-121.02713,48.34977],[-121.03054,48.49406],[-120.698,48.51497],[-120.51041,48.8718],[-119.97579,48.88134],[-119.95447,48.51497],[-119.90758,48.29421],[-119.73193,48.15503],[-119.74386,48.07419],[-119.62279,48.10951],[-119.60232,48.14707],[-119.25273,48.16243],[-114.1499,48.99487],[-95.12094,48.98405],[-95.13419,49.35564],[-94.94415,49.34356],[-94.8839,49.29522],[-94.71704,48.87631],[-94.71791,48.7485],[-93.83204,48.49765],[-93.43778,48.53066],[-93.38216,48.59507],[-92.98471,48.60312],[-92.73847,48.50725],[-92.7095,48.42081],[-92.54293,48.40158],[-92.38361,48.20406],[-92.11564,48.27641],[-91.58697,48.02516],[-91.24658,48.05422],[-90.86275,48.20889],[-90.78308,48.0639],[-90.0774,48.07435],[-89.93835,47.96584],[-89.75469,47.99609],[-89.32745,47.93943],[-88.41489,48.26677],[-84.9566,46.86086],[-84.84795,46.6762],[-84.55904,46.45441],[-84.47642,46.44972],[-84.43758,46.48872],[-84.3669,46.5055],[-84.34899,46.5055],[-84.29026,46.49077],[-84.25742,46.49386],[-84.22507,46.53187],[-84.1962,46.53804],[-84.18027,46.52468],[-84.15987,46.52468],[-84.13449,46.52879],[-84.11558,46.50653],[-84.15944,46.42769],[-84.10024,46.20338],[-83.95558,46.05132],[-83.8864,46.06125],[-83.8203,46.11181],[-83.76975,46.09563],[-83.67498,46.11391],[-83.58084,46.09921],[-83.44747,45.99521],[-83.60888,45.81772],[-82.14271,43.57905],[-82.39133,43.06666],[-82.41252,43.01127],[-82.42522,42.99864],[-82.42618,42.99374],[-82.42363,42.98536],[-82.41503,42.97697],[-82.41853,42.96578],[-82.43064,42.95203],[-82.44911,42.93711],[-82.45739,42.92568],[-82.46472,42.90562],[-82.47228,42.8877],[-82.47228,42.84743],[-82.48536,42.80967],[-82.46844,42.76365],[-82.48586,42.73697],[-82.49155,42.71168],[-82.51488,42.66652],[-82.51224,42.63893],[-82.52421,42.61103],[-82.56854,42.58184],[-82.59498,42.55148],[-82.61286,42.56409],[-82.65158,42.55707],[-82.83439,42.3763],[-83.01489,42.33457],[-83.07244,42.31502],[-83.09647,42.29542],[-83.12823,42.24126],[-83.14167,42.18582],[-83.12799,42.12172],[-83.16266,42.04963],[-83.05136,41.70911],[-82.41932,41.6377],[-81.22563,42.19633],[-80.06688,42.37121],[-78.86642,42.825],[-78.90301,42.92307],[-78.92063,42.95234],[-78.93331,42.95708],[-78.96058,42.9595],[-78.98479,42.9761],[-79.01825,42.9964],[-79.01969,43.01561],[-79.00695,43.0333],[-78.99599,43.06448],[-79.07335,43.07876],[-79.07286,43.083],[-79.0652,43.0917],[-79.05623,43.10825],[-79.05982,43.11563],[-79.06764,43.11992],[-79.05411,43.12801],[-79.04112,43.13986],[-79.04465,43.16192],[-79.05101,43.17037],[-79.04758,43.19974],[-79.05511,43.25682],[-79.18688,43.44858],[-78.68836,43.62502],[-76.77647,43.61369],[-76.41665,44.08498],[-75.49023,44.70772],[-75.29544,44.82587],[-75.16845,44.88548],[-75.1275,44.8975],[-75.00499,44.95265],[-74.98159,44.97728],[-74.90496,44.98222],[-74.8313,45.01108],[-74.77954,45.00158],[-74.74562,44.98526],[-74.70475,44.99877],[-74.49079,44.99343],[-74.23203,44.98552],[-73.93713,44.99512],[-73.01809,45.0121],[-72.63177,45.0121],[-72.54779,45.00506],[-72.32259,45.00286],[-71.49404,45.01093],[-71.48648,45.06221],[-71.42303,45.12765],[-71.43112,45.14037],[-71.37175,45.22117],[-71.28959,45.28578],[-71.23613,45.24302],[-71.11683,45.22933],[-71.0531,45.29866],[-70.98936,45.31088],[-70.90246,45.22525],[-70.82473,45.22714],[-70.77626,45.40013],[-70.7119,45.3754],[-70.63387,45.37346],[-70.60302,45.41179],[-70.67659,45.56319],[-70.3752,45.73075],[-70.36334,45.82013],[-70.25417,45.87468],[-70.22569,45.94403],[-70.27316,45.99022],[-70.17586,46.33538],[-70.06195,46.4107],[-69.98891,46.69363],[-69.22424,47.44463],[-69.06999,47.41092],[-69.07473,47.24202],[-68.89684,47.17469],[-68.78685,47.21493],[-68.72415,47.23217],[-68.68583,47.24028],[-68.66044,47.23183],[-68.62162,47.24028],[-68.59425,47.24974],[-68.59226,47.27001],[-68.57385,47.28486],[-68.55941,47.2798],[-68.542,47.2798],[-68.51214,47.29195],[-68.47381,47.29229],[-68.46038,47.28149],[-68.43898,47.27777],[-68.37229,47.2825],[-68.3703,47.34796],[-68.33173,47.35822],[-68.29664,47.352],[-68.2399,47.34897],[-68.0906,47.26798],[-68.00002,47.21223],[-67.96344,47.19753],[-67.93582,47.15947],[-67.88619,47.10424],[-67.80218,47.06386],[-67.79415,45.93923],[-67.82753,45.8489],[-67.82753,45.6704],[-67.54943,45.57445],[-67.45302,45.58742],[-67.44189,45.52251],[-67.54201,45.49393],[-67.4456,45.38726],[-67.51605,45.29343],[-67.38257,45.11839],[-67.3047,45.11316],[-67.26762,45.18116],[-67.12671,45.09484],[-66.94835,44.78406],[-66.52283,43.61294],[-65.02339,42.10691],[-42.53366,47.50263],[-75.90901,77.3176],[-71.86482,78.7359],[-67.20011,80.66812],[-66.20727,80.78637],[-54.82473,83.07464],[-57.62518,85.04043],[-106.7949,85.04625],[-141.3957,79.2514],[-141.0678,60.2442]]],overlay:true},{id:"Geobase_Roads",name:"Geobase Roads - English",type:"wms",template:"https://maps.geogratis.gc.ca/wms/roads_en?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=roads&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",zoomExtent:[4,20],polygon:[[[-141.0678,60.2442],[-139.3842,60.10331],[-137.4746,58.82791],[-135.4766,59.65971],[-134.399,58.86279],[-132.5239,57.08342],[-130.1435,55.27452],[-130.7734,54.75597],[-132.4355,54.71514],[-134.5711,54.38827],[-141.7761,53.58405],[-128.9768,46.41459],[-124.8087,48.42976],[-123.4286,48.17889],[-123.0256,48.40444],[-123.19237,48.65504],[-122.99582,48.51065],[-122.4869,48.4098],[-122.32915,48.4528],[-122.22939,48.50649],[-122.17908,48.52965],[-122.1842,48.5669],[-121.77833,48.57593],[-121.66578,48.42791],[-121.33068,48.35714],[-121.02713,48.34977],[-121.03054,48.49406],[-120.698,48.51497],[-120.51041,48.8718],[-119.97579,48.88134],[-119.95447,48.51497],[-119.90758,48.29421],[-119.73193,48.15503],[-119.74386,48.07419],[-119.62279,48.10951],[-119.60232,48.14707],[-119.25273,48.16243],[-114.1499,48.99487],[-95.12094,48.98405],[-95.13419,49.35564],[-94.94415,49.34356],[-94.8839,49.29522],[-94.71704,48.87631],[-94.71791,48.7485],[-93.83204,48.49765],[-93.43778,48.53066],[-93.38216,48.59507],[-92.98471,48.60312],[-92.73847,48.50725],[-92.7095,48.42081],[-92.54293,48.40158],[-92.38361,48.20406],[-92.11564,48.27641],[-91.58697,48.02516],[-91.24658,48.05422],[-90.86275,48.20889],[-90.78308,48.0639],[-90.0774,48.07435],[-89.93835,47.96584],[-89.75469,47.99609],[-89.32745,47.93943],[-88.41489,48.26677],[-84.9566,46.86086],[-84.84795,46.6762],[-84.55904,46.45441],[-84.47642,46.44972],[-84.43758,46.48872],[-84.3669,46.5055],[-84.34899,46.5055],[-84.29026,46.49077],[-84.25742,46.49386],[-84.22507,46.53187],[-84.1962,46.53804],[-84.18027,46.52468],[-84.15987,46.52468],[-84.13449,46.52879],[-84.11558,46.50653],[-84.15944,46.42769],[-84.10024,46.20338],[-83.95558,46.05132],[-83.8864,46.06125],[-83.8203,46.11181],[-83.76975,46.09563],[-83.67498,46.11391],[-83.58084,46.09921],[-83.44747,45.99521],[-83.60888,45.81772],[-82.14271,43.57905],[-82.39133,43.06666],[-82.41252,43.01127],[-82.42522,42.99864],[-82.42618,42.99374],[-82.42363,42.98536],[-82.41503,42.97697],[-82.41853,42.96578],[-82.43064,42.95203],[-82.44911,42.93711],[-82.45739,42.92568],[-82.46472,42.90562],[-82.47228,42.8877],[-82.47228,42.84743],[-82.48536,42.80967],[-82.46844,42.76365],[-82.48586,42.73697],[-82.49155,42.71168],[-82.51488,42.66652],[-82.51224,42.63893],[-82.52421,42.61103],[-82.56854,42.58184],[-82.59498,42.55148],[-82.61286,42.56409],[-82.65158,42.55707],[-82.83439,42.3763],[-83.01489,42.33457],[-83.07244,42.31502],[-83.09647,42.29542],[-83.12823,42.24126],[-83.14167,42.18582],[-83.12799,42.12172],[-83.16266,42.04963],[-83.05136,41.70911],[-82.41932,41.6377],[-81.22563,42.19633],[-80.06688,42.37121],[-78.86642,42.825],[-78.90301,42.92307],[-78.92063,42.95234],[-78.93331,42.95708],[-78.96058,42.9595],[-78.98479,42.9761],[-79.01825,42.9964],[-79.01969,43.01561],[-79.00695,43.0333],[-78.99599,43.06448],[-79.07335,43.07876],[-79.07286,43.083],[-79.0652,43.0917],[-79.05623,43.10825],[-79.05982,43.11563],[-79.06764,43.11992],[-79.05411,43.12801],[-79.04112,43.13986],[-79.04465,43.16192],[-79.05101,43.17037],[-79.04758,43.19974],[-79.05511,43.25682],[-79.18688,43.44858],[-78.68836,43.62502],[-76.77647,43.61369],[-76.41665,44.08498],[-75.49023,44.70772],[-75.29544,44.82587],[-75.16845,44.88548],[-75.1275,44.8975],[-75.00499,44.95265],[-74.98159,44.97728],[-74.90496,44.98222],[-74.8313,45.01108],[-74.77954,45.00158],[-74.74562,44.98526],[-74.70475,44.99877],[-74.49079,44.99343],[-74.23203,44.98552],[-73.93713,44.99512],[-73.01809,45.0121],[-72.63177,45.0121],[-72.54779,45.00506],[-72.32259,45.00286],[-71.49404,45.01093],[-71.48648,45.06221],[-71.42303,45.12765],[-71.43112,45.14037],[-71.37175,45.22117],[-71.28959,45.28578],[-71.23613,45.24302],[-71.11683,45.22933],[-71.0531,45.29866],[-70.98936,45.31088],[-70.90246,45.22525],[-70.82473,45.22714],[-70.77626,45.40013],[-70.7119,45.3754],[-70.63387,45.37346],[-70.60302,45.41179],[-70.67659,45.56319],[-70.3752,45.73075],[-70.36334,45.82013],[-70.25417,45.87468],[-70.22569,45.94403],[-70.27316,45.99022],[-70.17586,46.33538],[-70.06195,46.4107],[-69.98891,46.69363],[-69.22424,47.44463],[-69.06999,47.41092],[-69.07473,47.24202],[-68.89684,47.17469],[-68.78685,47.21493],[-68.72415,47.23217],[-68.68583,47.24028],[-68.66044,47.23183],[-68.62162,47.24028],[-68.59425,47.24974],[-68.59226,47.27001],[-68.57385,47.28486],[-68.55941,47.2798],[-68.542,47.2798],[-68.51214,47.29195],[-68.47381,47.29229],[-68.46038,47.28149],[-68.43898,47.27777],[-68.37229,47.2825],[-68.3703,47.34796],[-68.33173,47.35822],[-68.29664,47.352],[-68.2399,47.34897],[-68.0906,47.26798],[-68.00002,47.21223],[-67.96344,47.19753],[-67.93582,47.15947],[-67.88619,47.10424],[-67.80218,47.06386],[-67.79415,45.93923],[-67.82753,45.8489],[-67.82753,45.6704],[-67.54943,45.57445],[-67.45302,45.58742],[-67.44189,45.52251],[-67.54201,45.49393],[-67.4456,45.38726],[-67.51605,45.29343],[-67.38257,45.11839],[-67.3047,45.11316],[-67.26762,45.18116],[-67.12671,45.09484],[-66.94835,44.78406],[-66.52283,43.61294],[-65.02339,42.10691],[-42.53366,47.50263],[-75.90901,77.3176],[-71.86482,78.7359],[-67.20011,80.66812],[-66.20727,80.78637],[-54.82473,83.07464],[-57.62518,85.04043],[-106.7949,85.04625],[-141.3957,79.2514],[-141.0678,60.2442]]]},{id:"Geobase_Roads_French",name:"Geobase Roads - French",type:"wms",template:"https://cartes.geogratis.gc.ca/wms/roads_fr?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=routes&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",zoomExtent:[4,20],polygon:[[[-141.0678,60.2442],[-139.3842,60.10331],[-137.4746,58.82791],[-135.4766,59.65971],[-134.399,58.86279],[-132.5239,57.08342],[-130.1435,55.27452],[-130.7734,54.75597],[-132.4355,54.71514],[-134.5711,54.38827],[-141.7761,53.58405],[-128.9768,46.41459],[-124.8087,48.42976],[-123.4286,48.17889],[-123.0256,48.40444],[-123.19237,48.65504],[-122.99582,48.51065],[-122.4869,48.4098],[-122.32915,48.4528],[-122.22939,48.50649],[-122.17908,48.52965],[-122.1842,48.5669],[-121.77833,48.57593],[-121.66578,48.42791],[-121.33068,48.35714],[-121.02713,48.34977],[-121.03054,48.49406],[-120.698,48.51497],[-120.51041,48.8718],[-119.97579,48.88134],[-119.95447,48.51497],[-119.90758,48.29421],[-119.73193,48.15503],[-119.74386,48.07419],[-119.62279,48.10951],[-119.60232,48.14707],[-119.25273,48.16243],[-114.1499,48.99487],[-95.12094,48.98405],[-95.13419,49.35564],[-94.94415,49.34356],[-94.8839,49.29522],[-94.71704,48.87631],[-94.71791,48.7485],[-93.83204,48.49765],[-93.43778,48.53066],[-93.38216,48.59507],[-92.98471,48.60312],[-92.73847,48.50725],[-92.7095,48.42081],[-92.54293,48.40158],[-92.38361,48.20406],[-92.11564,48.27641],[-91.58697,48.02516],[-91.24658,48.05422],[-90.86275,48.20889],[-90.78308,48.0639],[-90.0774,48.07435],[-89.93835,47.96584],[-89.75469,47.99609],[-89.32745,47.93943],[-88.41489,48.26677],[-84.9566,46.86086],[-84.84795,46.6762],[-84.55904,46.45441],[-84.47642,46.44972],[-84.43758,46.48872],[-84.3669,46.5055],[-84.34899,46.5055],[-84.29026,46.49077],[-84.25742,46.49386],[-84.22507,46.53187],[-84.1962,46.53804],[-84.18027,46.52468],[-84.15987,46.52468],[-84.13449,46.52879],[-84.11558,46.50653],[-84.15944,46.42769],[-84.10024,46.20338],[-83.95558,46.05132],[-83.8864,46.06125],[-83.8203,46.11181],[-83.76975,46.09563],[-83.67498,46.11391],[-83.58084,46.09921],[-83.44747,45.99521],[-83.60888,45.81772],[-82.14271,43.57905],[-82.39133,43.06666],[-82.41252,43.01127],[-82.42522,42.99864],[-82.42618,42.99374],[-82.42363,42.98536],[-82.41503,42.97697],[-82.41853,42.96578],[-82.43064,42.95203],[-82.44911,42.93711],[-82.45739,42.92568],[-82.46472,42.90562],[-82.47228,42.8877],[-82.47228,42.84743],[-82.48536,42.80967],[-82.46844,42.76365],[-82.48586,42.73697],[-82.49155,42.71168],[-82.51488,42.66652],[-82.51224,42.63893],[-82.52421,42.61103],[-82.56854,42.58184],[-82.59498,42.55148],[-82.61286,42.56409],[-82.65158,42.55707],[-82.83439,42.3763],[-83.01489,42.33457],[-83.07244,42.31502],[-83.09647,42.29542],[-83.12823,42.24126],[-83.14167,42.18582],[-83.12799,42.12172],[-83.16266,42.04963],[-83.05136,41.70911],[-82.41932,41.6377],[-81.22563,42.19633],[-80.06688,42.37121],[-78.86642,42.825],[-78.90301,42.92307],[-78.92063,42.95234],[-78.93331,42.95708],[-78.96058,42.9595],[-78.98479,42.9761],[-79.01825,42.9964],[-79.01969,43.01561],[-79.00695,43.0333],[-78.99599,43.06448],[-79.07335,43.07876],[-79.07286,43.083],[-79.0652,43.0917],[-79.05623,43.10825],[-79.05982,43.11563],[-79.06764,43.11992],[-79.05411,43.12801],[-79.04112,43.13986],[-79.04465,43.16192],[-79.05101,43.17037],[-79.04758,43.19974],[-79.05511,43.25682],[-79.18688,43.44858],[-78.68836,43.62502],[-76.77647,43.61369],[-76.41665,44.08498],[-75.49023,44.70772],[-75.29544,44.82587],[-75.16845,44.88548],[-75.1275,44.8975],[-75.00499,44.95265],[-74.98159,44.97728],[-74.90496,44.98222],[-74.8313,45.01108],[-74.77954,45.00158],[-74.74562,44.98526],[-74.70475,44.99877],[-74.49079,44.99343],[-74.23203,44.98552],[-73.93713,44.99512],[-73.01809,45.0121],[-72.63177,45.0121],[-72.54779,45.00506],[-72.32259,45.00286],[-71.49404,45.01093],[-71.48648,45.06221],[-71.42303,45.12765],[-71.43112,45.14037],[-71.37175,45.22117],[-71.28959,45.28578],[-71.23613,45.24302],[-71.11683,45.22933],[-71.0531,45.29866],[-70.98936,45.31088],[-70.90246,45.22525],[-70.82473,45.22714],[-70.77626,45.40013],[-70.7119,45.3754],[-70.63387,45.37346],[-70.60302,45.41179],[-70.67659,45.56319],[-70.3752,45.73075],[-70.36334,45.82013],[-70.25417,45.87468],[-70.22569,45.94403],[-70.27316,45.99022],[-70.17586,46.33538],[-70.06195,46.4107],[-69.98891,46.69363],[-69.22424,47.44463],[-69.06999,47.41092],[-69.07473,47.24202],[-68.89684,47.17469],[-68.78685,47.21493],[-68.72415,47.23217],[-68.68583,47.24028],[-68.66044,47.23183],[-68.62162,47.24028],[-68.59425,47.24974],[-68.59226,47.27001],[-68.57385,47.28486],[-68.55941,47.2798],[-68.542,47.2798],[-68.51214,47.29195],[-68.47381,47.29229],[-68.46038,47.28149],[-68.43898,47.27777],[-68.37229,47.2825],[-68.3703,47.34796],[-68.33173,47.35822],[-68.29664,47.352],[-68.2399,47.34897],[-68.0906,47.26798],[-68.00002,47.21223],[-67.96344,47.19753],[-67.93582,47.15947],[-67.88619,47.10424],[-67.80218,47.06386],[-67.79415,45.93923],[-67.82753,45.8489],[-67.82753,45.6704],[-67.54943,45.57445],[-67.45302,45.58742],[-67.44189,45.52251],[-67.54201,45.49393],[-67.4456,45.38726],[-67.51605,45.29343],[-67.38257,45.11839],[-67.3047,45.11316],[-67.26762,45.18116],[-67.12671,45.09484],[-66.94835,44.78406],[-66.52283,43.61294],[-65.02339,42.10691],[-42.53366,47.50263],[-75.90901,77.3176],[-71.86482,78.7359],[-67.20011,80.66812],[-66.20727,80.78637],[-54.82473,83.07464],[-57.62518,85.04043],[-106.7949,85.04625],[-141.3957,79.2514],[-141.0678,60.2442]]]},{id:"geoimage.at",name:"Geoimage.at MaxRes",type:"wms",template:"https://gis.bmlfuw.gv.at/wmsgw/?key=4d80de696cd562a63ce463a58a61488d&FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&Layers=Luftbild_MR,Luftbild_1m,Luftbild_8m,Satellitenbild_30m&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[16.50733,46.99293],[16.28342,46.99293],[16.13584,46.8713],[15.98317,46.81909],[16.04933,46.65517],[15.86104,46.71801],[15.75926,46.69009],[15.56079,46.67962],[15.57606,46.63421],[15.47937,46.60276],[15.43357,46.65168],[15.22493,46.63421],[15.04682,46.64819],[14.99084,46.58877],[14.9603,46.62373],[14.85344,46.60276],[14.83308,46.50127],[14.75166,46.49776],[14.68041,46.43818],[14.61426,46.43818],[14.57864,46.37853],[14.44124,46.43116],[14.16135,46.42766],[14.12573,46.47674],[14.01886,46.47674],[13.91199,46.52578],[13.82548,46.50477],[13.44381,46.56078],[13.30641,46.55028],[13.1283,46.58877],[12.84332,46.61324],[12.72628,46.6412],[12.51255,46.66565],[12.35988,46.70405],[12.36497,46.77032],[12.28863,46.77729],[12.27337,46.88522],[12.20721,46.87478],[12.13088,46.90261],[12.11561,46.99987],[12.25301,47.06577],[12.2123,47.0935],[11.9833,47.04497],[11.73394,46.96168],[11.63217,47.01028],[11.54057,46.97557],[11.49986,47.00681],[11.41843,46.96515],[11.25559,46.97557],[11.1131,46.91304],[11.04185,46.76335],[10.88919,46.75986],[10.74161,46.78426],[10.70599,46.86435],[10.57877,46.83998],[10.45663,46.85043],[10.47699,46.92694],[10.38539,46.98946],[10.23272,46.86435],[10.12076,46.83302],[9.86632,46.94084],[9.90194,47.00334],[9.68312,47.05884],[9.61188,47.03804],[9.63223,47.12813],[9.58134,47.1662],[9.54063,47.26644],[9.60679,47.34926],[9.67294,47.36994],[9.64241,47.44571],[9.56608,47.48011],[9.71365,47.52824],[9.7849,47.59692],[9.83579,47.54542],[9.94774,47.53855],[10.09023,47.44915],[10.11059,47.36649],[10.2429,47.38717],[10.18692,47.2699],[10.32432,47.29751],[10.48208,47.44915],[10.43119,47.48699],[10.44137,47.59005],[10.48717,47.55229],[10.54823,47.53511],[10.59912,47.56602],[10.75688,47.53168],[10.88919,47.54542],[10.94008,47.48699],[10.99605,47.39061],[11.23523,47.44227],[11.28103,47.3975],[11.42352,47.51449],[11.57619,47.50762],[11.60672,47.59005],[11.83572,47.58662],[12.00366,47.62436],[12.20721,47.60378],[12.16141,47.69634],[12.2581,47.74427],[12.25301,47.67921],[12.43112,47.71004],[12.49219,47.63122],[12.56852,47.62779],[12.62959,47.68949],[12.77208,47.66893],[12.83315,47.54198],[12.97564,47.47323],[13.04179,47.49387],[13.0367,47.55572],[13.09777,47.64151],[13.03161,47.71004],[12.90439,47.72031],[13.00617,47.84683],[12.9451,47.93555],[12.86368,47.95941],[12.86368,48.00369],[12.75172,48.09894],[12.87386,48.21097],[12.96037,48.21097],[13.04179,48.2652],[13.18428,48.29907],[13.26061,48.2923],[13.39801,48.35659],[13.44381,48.41742],[13.43872,48.55234],[13.50997,48.58601],[13.61175,48.57255],[13.72879,48.5119],[13.78477,48.57255],[13.82039,48.62639],[13.79495,48.71713],[13.85093,48.77417],[14.05957,48.66338],[14.01377,48.63312],[14.07484,48.59274],[14.21733,48.59611],[14.3649,48.54897],[14.46668,48.64993],[14.55828,48.59611],[14.59899,48.62639],[14.72113,48.57591],[14.72113,48.6869],[14.8229,48.7272],[14.81782,48.77753],[14.96472,48.78518],[14.98936,49.01266],[15.14859,48.99503],[15.19439,48.93155],[15.30635,48.98501],[15.39286,48.98501],[15.48446,48.92821],[15.74908,48.8546],[15.84068,48.88807],[16.00862,48.78088],[16.20708,48.73391],[16.39537,48.73727],[16.49206,48.81105],[16.69053,48.77417],[16.7058,48.73391],[16.89917,48.71377],[16.97551,48.51527],[16.84828,48.45118],[16.85337,48.34644],[16.95515,48.25165],[16.99077,48.1499],[17.09255,48.13971],[17.08237,48.02412],[17.17397,48.02071],[17.08237,47.87414],[16.98568,47.86732],[17.08237,47.80925],[17.09255,47.70319],[16.74142,47.67921],[16.7058,47.75112],[16.53786,47.75454],[16.54804,47.70662],[16.42082,47.66893],[16.57348,47.6175],[16.67017,47.63122],[16.71088,47.53855],[16.66,47.44915],[16.54295,47.39406],[16.46153,47.39406],[16.49206,47.2768],[16.42591,47.19733],[16.47171,47.1489],[16.54804,47.1489],[16.47679,47.07964],[16.52768,47.05884],[16.50733,46.99293]]],terms_url:"http://geoimage.at",terms_text:"geoimage.at",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/at/GeoimageatMaxRes.png"},{id:"Geolittoral-Orthophotos2000",name:"Géolittoral - Orthophotos 2000",type:"wms",template:"http://geolittoral.din.developpement-durable.gouv.fr/wxs?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=ortholittorale&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",endDate:"2000-01-01T00:00:00.000Z",startDate:"2000-01-01T00:00:00.000Z",polygon:[[[-1.07962,46.10959],[-0.94115,46.01474],[-0.56306,45.15178],[-0.7266,45.08425],[-0.87904,45.34094],[-0.99794,45.33779],[-0.95558,44.69982],[-1.15862,44.19865],[-1.21512,44.20558],[-1.24654,44.1162],[-1.27903,44.03937],[-1.28825,44.02304],[-1.32117,43.94094],[-1.32151,43.92296],[-1.3092,43.92337],[-1.3085,43.91439],[-1.28366,43.91514],[-1.28302,43.90624],[-1.2761,43.90655],[-1.28211,43.89254],[-1.30102,43.85159],[-1.30384,43.8424],[-1.30923,43.83498],[-1.33474,43.76946],[-1.34407,43.74875],[-1.3456,43.74214],[-1.34673,43.73688],[-1.43284,43.53152],[-1.42806,43.46812],[-1.60627,43.40591],[-1.6061,43.36012],[-1.77441,43.30357],[-1.82995,43.38484],[-1.58551,43.46856],[-1.35706,44.03374],[-1.40217,44.06461],[-1.33584,44.22832],[-1.21836,44.23033],[-1.16795,44.41097],[-1.30744,44.41847],[-1.16979,45.59107],[-1.48685,46.06042],[-1.36364,46.09146],[-1.60176,46.17019],[-1.64442,46.22375],[-1.58595,46.30426],[-1.51008,46.33888],[-1.75643,46.42214],[-2.1872,46.81857],[-2.16423,46.85534],[-2.23654,46.9337],[-2.39769,46.96718],[-2.282,47.07631],[-2.12563,47.01875],[-2.09013,47.06562],[-2.18487,47.10698],[-2.2647,47.10763],[-2.24489,47.18562],[-2.56779,47.24467],[-2.66727,47.46686],[-2.74787,47.47122],[-2.75771,47.43461],[-2.89321,47.4629],[-2.90369,47.50905],[-3.03383,47.53833],[-3.07113,47.51185],[-3.01653,47.49873],[-3.12502,47.42693],[-3.18803,47.48441],[-3.22791,47.61132],[-3.2967,47.63161],[-3.2876,47.67154],[-3.34074,47.66893],[-3.38912,47.59473],[-3.55087,47.63827],[-3.53384,47.72488],[-3.76577,47.76476],[-3.77595,47.7371],[-3.91168,47.75915],[-3.8959,47.79911],[-3.97236,47.81526],[-3.99722,47.7975],[-3.97956,47.76268],[-3.8945,47.72193],[-3.9162,47.67831],[-4.10163,47.70921],[-4.08989,47.78944],[-4.03798,47.79909],[-4.04125,47.83109],[-4.08765,47.84221],[-4.14781,47.82525],[-4.14314,47.78847],[-4.35162,47.7415],[-4.47962,47.9776],[-4.98565,47.99896],[-4.96938,48.08972],[-4.63576,48.07798],[-4.60147,48.11469],[-4.385,48.10962],[-4.38955,48.14543],[-4.30925,48.15009],[-4.31268,48.17694],[-4.46369,48.18468],[-4.49748,48.1453],[-4.5921,48.14758],[-4.57537,48.22488],[-4.67101,48.2331],[-4.65434,48.31049],[-4.84243,48.3005],[-5.19867,48.44926],[-5.10346,48.51722],[-4.81465,48.39413],[-4.83515,48.54319],[-4.63387,48.66373],[-3.96692,48.77978],[-3.94939,48.74715],[-3.6502,48.75356],[-3.65853,48.82527],[-3.53931,48.85834],[-3.54444,48.90297],[-3.40954,48.91866],[-3.40755,48.87366],[-3.02769,48.9275],[-2.67861,48.58841],[-2.28475,48.71909],[-2.17543,48.65016],[-2.0137,48.73221],[-1.80953,48.73178],[-1.80392,48.66126],[-1.61161,48.68582],[-1.71645,49.24781],[-1.8026,49.32721],[-1.85748,49.3253],[-1.9262,49.65573],[-2.03908,49.67872],[-2.00445,49.76087],[-1.61759,49.68498],[-1.28373,49.76067],[-1.1492,49.63504],[-1.17134,49.55412],[-1.27353,49.55245],[-1.1328,49.3934],[-0.93059,49.40804],[-0.74827,49.35976],[-0.38935,49.34167],[-0.24704,49.29995],[-0.12454,49.29353],[0.02731,49.37619],[0.01801,49.54656],[0.12211,49.69292],[0.51713,49.86466],[1.05727,49.94904],[1.43908,50.11819],[1.53177,50.46437],[1.52549,50.85867],[1.64118,50.95919],[2.4521,51.12144],[2.59286,51.12124],[2.60683,51.05779],[1.7976,50.89906],[1.66458,50.82379],[1.70786,50.1282],[1.05936,49.85],[0.61607,49.79062],[0.24731,49.65027],[0.1709,49.53174],[0.57065,49.49622],[0.41115,49.3396],[0.19504,49.35736],[0.01718,49.25479],[-0.24453,49.26312],[-0.38408,49.30495],[-0.74091,49.32438],[-0.9954,49.37133],[-1.05453,49.25175],[-1.27704,49.29022],[-1.25966,49.43463],[-1.39141,49.53985],[-1.27535,49.62056],[-1.29775,49.65946],[-1.4905,49.57139],[-1.77517,49.63398],[-1.74601,49.48155],[-1.51294,49.24691],[-1.48261,48.72607],[-1.30574,48.72531],[-1.28323,48.59731],[-2.76114,48.43471],[-3.00174,48.67646],[-3.21062,48.72097],[-3.95404,48.56051],[-4.15643,48.60792],[-4.44475,48.55852],[-4.63683,48.48299],[-4.6319,48.44727],[-4.25022,48.43088],[-4.06141,48.21805],[-4.1757,48.05165],[-4.31904,48.0141],[-4.26781,47.89977],[-3.88484,47.98172],[-3.76375,47.86403],[-2.32727,47.52634],[-2.36911,47.3339],[-1.74067,47.33507],[-1.77062,47.20451],[-2.03678,47.21942],[-2.0968,47.15548],[-1.88786,47.01239],[-2.08797,46.83007],[-2.01214,46.83436],[-1.84079,46.69651],[-1.87318,46.65484],[-1.68859,46.50392],[-1.62117,46.51513],[-1.42428,46.41675],[-1.01761,46.35917],[-1.07962,46.10959]],[[-2.41232,46.69242],[-2.37197,46.67611],[-2.26749,46.68033],[-2.27007,46.70705],[-2.29827,46.73286],[-2.41655,46.73711],[-2.41232,46.69242]],[[-3.06018,47.40542],[-2.82587,47.29635],[-2.78787,47.33417],[-3.02436,47.44563],[-3.06018,47.40542]],[[-3.26482,47.4295],[-3.3343,47.35928],[-3.29614,47.34133],[-3.31489,47.30057],[-3.19941,47.24492],[-3.16567,47.27751],[-3.08686,47.23612],[-3.00637,47.30855],[-3.26482,47.4295]],[[-1.93966,48.86346],[-1.93993,48.91179],[-1.701,48.91105],[-1.69726,48.86173],[-1.93966,48.86346]]],terms_url:"https://wiki.openstreetmap.org/wiki/WikiProject_France/G%C3%A9oLittoral",terms_text:"Ortho littorale 2000"},{id:"Geolittoral-Sentiers",name:"Géolittoral - Sentiers",type:"wms",template:"http://geolittoral.din.developpement-durable.gouv.fr/wxs?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=n_sentier_littoral_l&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[-0.98385,46.18807],[-0.89497,46.15628],[-0.93455,46.10163],[-0.84388,46.06949],[-0.88241,46.01637],[-0.53787,45.89558],[-0.63498,45.76444],[-0.86666,45.8479],[-0.76264,45.6245],[-0.69695,45.62659],[-0.69397,45.60184],[-0.68755,45.60174],[-0.688,45.50986],[-0.63799,45.50892],[-0.63978,45.44747],[-0.61574,45.44695],[-0.61619,45.38586],[-0.58544,45.38596],[-0.58529,45.32334],[-0.55379,45.32344],[-0.55275,45.19661],[-0.49094,45.19577],[-0.49184,45.13315],[-0.45661,45.13325],[-0.45512,45.07161],[-0.41611,45.07089],[-0.41621,45.02696],[-0.2907,44.98278],[-0.22,45.06771],[-0.12252,45.02563],[-0.18925,44.94591],[-0.09266,44.91019],[-0.14521,44.8392],[-0.15491,44.84238],[-0.19387,44.78678],[-0.43541,44.87317],[-0.39048,44.68413],[-0.58798,44.66014],[-0.66628,44.99129],[-0.77838,44.99263],[-0.77764,45.05389],[-0.81584,45.05321],[-0.81838,45.11962],[-0.88393,45.12051],[-0.88171,45.18081],[-0.93438,45.18185],[-0.9328,45.24484],[-1.00163,45.24439],[-1.00247,45.30827],[-1.0524,45.31013],[-1.04828,45.36911],[-1.06412,45.36911],[-1.05039,45.18252],[-1.10761,44.80787],[-1.01514,44.80113],[-1.01946,44.76914],[-0.93365,44.76149],[-0.9404,44.7018],[-0.96035,44.56434],[-1.01408,44.56765],[-1.09916,44.1456],[-1.22689,44.14022],[-1.21853,44.03249],[-1.30762,44.029],[-1.39572,43.74301],[-1.31296,43.72951],[-1.37439,43.53109],[-1.34589,43.50606],[-1.59964,43.35423],[-1.76549,43.25548],[-1.79281,43.28038],[-1.80281,43.40425],[-1.72832,43.45033],[-1.58531,43.489],[-1.33584,44.22832],[-1.30744,44.41847],[-1.22511,45.44416],[-1.48685,46.06042],[-1.60176,46.17019],[-1.64442,46.22375],[-1.75643,46.42214],[-2.03483,46.61895],[-2.3466,46.62382],[-2.46561,46.71196],[-2.3233,46.83812],[-2.45286,46.93856],[-2.31733,47.16214],[-2.92848,47.28413],[-2.96742,47.22147],[-3.35602,47.32474],[-3.18803,47.48441],[-3.22791,47.61132],[-3.38912,47.59473],[-3.9162,47.67831],[-4.10163,47.70921],[-4.14314,47.78847],[-4.37619,47.71067],[-4.47962,47.9776],[-4.98565,47.99896],[-4.96938,48.08972],[-4.60147,48.11469],[-4.5921,48.14758],[-4.67101,48.2331],[-4.84243,48.3005],[-5.19867,48.44926],[-5.10346,48.51722],[-4.83515,48.54319],[-4.63117,48.66129],[-3.96692,48.77978],[-3.94939,48.74715],[-3.67013,48.89508],[-3.54444,48.90297],[-3.40954,48.91866],[-3.33344,48.90458],[-3.02769,48.9275],[-2.80207,48.79793],[-2.69353,48.76722],[-2.45786,48.70896],[-2.28475,48.71909],[-2.17543,48.65016],[-2.0137,48.73221],[-1.80953,48.73178],[-1.7243,48.75828],[-1.70557,48.84512],[-1.90304,48.86288],[-1.91027,48.92348],[-1.68714,48.93249],[-1.74277,49.24473],[-1.85748,49.3253],[-1.9262,49.65573],[-2.03908,49.67872],[-2.00445,49.76087],[-1.61759,49.68498],[-1.28373,49.76067],[-1.1492,49.63504],[-1.18545,49.54836],[-0.96463,49.42509],[-0.74429,49.36802],[-0.39014,49.3622],[-0.24976,49.3158],[-0.13342,49.31293],[0.02731,49.37619],[0.01801,49.54656],[0.12211,49.69292],[0.51713,49.86466],[1.05727,49.94904],[1.43908,50.11819],[1.53177,50.46437],[1.52549,50.85867],[1.64118,50.95919],[2.59712,51.17355],[2.66071,51.0196],[2.07124,50.92022],[2.05937,50.94709],[1.7976,50.89906],[1.68089,50.8717],[1.65569,50.59729],[1.75357,50.5932],[1.72295,50.24702],[1.82156,50.24262],[1.80149,50.05116],[1.54565,50.06311],[1.54155,50.01267],[1.42462,50.01747],[1.42667,50.05276],[1.03838,49.84609],[0.9827,49.88916],[0.57961,49.82133],[0.42063,49.76297],[0.4281,49.75445],[0.20831,49.67269],[0.14765,49.57767],[0.13461,49.5809],[0.11117,49.54365],[0.56598,49.52045],[0.5632,49.49989],[0.63001,49.49666],[0.61478,49.37441],[0.54825,49.37851],[0.54254,49.33461],[0.45741,49.33938],[0.45843,49.34492],[0.32597,49.35456],[0.32846,49.38128],[0.28011,49.38433],[0.27689,49.36334],[0.21095,49.36658],[0.20817,49.35084],[0.14326,49.35532],[0.13769,49.3115],[0.07204,49.31532],[0.0675,49.28713],[0.00274,49.29076],[0.00508,49.25711],[-0.02027,49.26036],[-0.03492,49.1973],[-0.19448,49.21463],[-0.38966,49.12726],[-0.45369,49.18792],[-0.3561,49.23214],[-0.82088,49.28331],[-0.99778,49.30149],[-1.16728,49.24545],[-1.19515,49.28183],[-1.26768,49.24099],[-1.34114,49.2975],[-1.24768,49.35025],[-1.44583,49.60689],[-1.81105,49.61757],[-1.77479,49.44333],[-1.72775,49.46509],[-1.5339,49.29098],[-1.47909,49.29233],[-1.47608,49.24027],[-1.43557,49.20326],[-1.47225,49.1822],[-1.45091,48.75725],[-1.31155,48.76408],[-1.30533,48.70216],[-1.2584,48.70421],[-1.25229,48.64353],[-1.23519,48.64435],[-1.2269,48.56824],[-1.85218,48.53086],[-1.84908,48.4975],[-1.92326,48.49187],[-1.92813,48.44096],[-2.04272,48.43601],[-2.03889,48.48191],[-2.2895,48.46102],[-2.3021,48.52433],[-2.40863,48.51618],[-2.42035,48.56954],[-2.43084,48.57852],[-2.49083,48.54924],[-2.47353,48.53326],[-2.54978,48.49647],[-2.54005,48.48747],[-2.70681,48.40746],[-3.02979,48.69115],[-4.01034,48.53179],[-4.05342,48.64412],[-4.38281,48.57349],[-4.35482,48.5118],[-4.38853,48.50473],[-4.13495,48.44868],[-4.16411,48.38936],[-4.01832,48.35685],[-4.04733,48.29918],[-3.98814,48.2867],[-4.0214,48.21606],[-4.03634,48.21958],[-4.06623,48.16028],[-4.16675,48.18247],[-4.18331,48.14934],[-4.17232,48.1065],[-4.20111,48.10285],[-4.18643,48.04389],[-4.18806,48.04061],[-4.35686,48.02305],[-4.25657,47.93997],[-4.23363,47.93497],[-4.21371,47.97598],[-4.21854,47.97726],[-4.1806,48.05569],[-3.6172,47.93124],[-2.17991,47.58642],[-2.25449,47.44501],[-2.30182,47.4568],[-2.32043,47.42092],[-2.30372,47.41755],[-2.34753,47.33499],[-2.36219,47.33837],[-2.38079,47.3039],[-2.35852,47.29854],[-2.29962,47.29784],[-2.29742,47.3618],[-2.13199,47.35852],[-2.13478,47.39107],[-2.01565,47.39623],[-2.01404,47.38095],[-1.92862,47.38254],[-1.92891,47.37956],[-1.8322,47.38184],[-1.82986,47.34165],[-1.73608,47.34304],[-1.73418,47.305],[-1.64084,47.30639],[-1.64011,47.29427],[-1.58355,47.29566],[-1.58531,47.33708],[-1.4612,47.33966],[-1.46003,47.32924],[-1.37211,47.33221],[-1.36054,47.11239],[-1.48567,47.11149],[-1.48582,47.11877],[-1.66897,47.11688],[-1.66971,47.12864],[-1.72553,47.12764],[-1.72612,47.13761],[-1.93975,47.13263],[-1.94019,47.1422],[-1.9925,47.14309],[-1.81066,47.00588],[-1.94723,46.92078],[-1.92891,46.90677],[-1.99529,46.86461],[-1.73652,46.66839],[-1.77535,46.64386],[-1.82678,46.64174],[-1.82473,46.62071],[-1.18192,46.39987],[-0.91261,46.3048],[-0.95481,46.2489],[-0.94235,46.24424],[-0.98385,46.18807]],[[3.14769,42.40072],[3.14949,42.40015],[3.15305,42.40052],[3.15804,42.40243],[3.1877,42.42805],[3.14227,42.5248],[3.06837,42.54635],[3.04884,42.6942],[3.0799,43.03073],[3.22641,43.18727],[3.40916,43.26032],[3.52104,43.25877],[3.66429,43.37628],[3.73841,43.39054],[4.00979,43.53607],[4.17692,43.45636],[4.54355,43.43349],[4.54943,43.35401],[4.83506,43.30891],[4.97506,43.38309],[5.03219,43.31928],[5.25919,43.31928],[5.31082,43.20504],[5.35682,43.18645],[5.36882,43.16785],[5.40232,43.16211],[5.41382,43.17123],[5.40919,43.19921],[5.54232,43.18827],[5.60582,43.14797],[5.6197,43.1529],[5.63832,43.17159],[5.67157,43.1674],[5.69095,43.13411],[5.77607,43.10637],[5.7762,43.09432],[5.75407,43.08328],[5.75707,43.0725],[5.77032,43.06465],[5.85933,43.03469],[5.8877,43.06273],[5.9567,43.06109],[5.96383,43.09277],[6.00033,43.09186],[6.01745,43.06849],[6.10233,43.07415],[6.10483,43.0526],[6.0666,43.04318],[6.06722,43.03785],[6.1427,43.00923],[6.15676,42.98715],[6.19635,42.97331],[6.22221,42.9801],[6.26891,42.99651],[6.25515,43.03627],[6.2019,43.02713],[6.18378,43.09188],[6.30153,43.09909],[6.32478,43.07974],[6.37778,43.08011],[6.38866,43.13395],[6.51341,43.14608],[6.57704,43.17881],[6.62291,43.14563],[6.69779,43.19969],[6.68016,43.23357],[6.72116,43.26007],[6.72241,43.27472],[6.67054,43.29192],[6.68741,43.33113],[6.72416,43.34267],[6.75291,43.409],[6.79104,43.39674],[6.90629,43.41672],[6.96767,43.50273],[6.96617,43.52812],[7.00617,43.53845],[7.03554,43.4982],[7.06892,43.5001],[7.09079,43.51642],[7.06267,43.53672],[7.08254,43.5456],[7.1238,43.53074],[7.1558,43.5437],[7.1433,43.62284],[7.16867,43.64636],[7.2138,43.63469],[7.25417,43.68497],[7.3403,43.66744],[7.36442,43.6894],[7.35305,43.7082],[7.4163,43.71091],[7.45405,43.74506],[7.4943,43.74524],[7.57943,43.78424],[7.60552,43.78603],[7.60368,43.78898],[7.59588,43.79528],[7.59628,43.79549],[7.53853,43.84195],[7.45996,43.79988],[7.44781,43.80934],[7.32353,43.74806],[7.30822,43.76357],[6.64878,43.3885],[6.66865,43.37178],[6.51003,43.27803],[6.56584,43.22509],[6.12681,43.10527],[5.48229,43.24939],[5.47267,43.2309],[5.41567,43.24657],[5.45267,43.3451],[4.80191,43.48158],[4.76416,43.39244],[4.65716,43.42368],[4.67228,43.45608],[4.43203,43.52419],[4.41453,43.49255],[4.16102,43.56433],[4.14452,43.57067],[4.14165,43.57393],[4.18677,43.59946],[4.10565,43.68196],[3.79689,43.52165],[3.77851,43.51313],[3.76464,43.50597],[3.76201,43.50334],[3.74226,43.49328],[3.71601,43.52075],[3.26213,43.28143],[3.24638,43.29735],[3.18388,43.28052],[3.10675,43.24083],[3.15475,43.19419],[2.90625,43.19383],[2.90675,42.76189],[2.94613,42.76208],[2.9465,42.61516],[2.99238,42.61497],[2.99238,42.5125],[3.041,42.51259],[3.04121,42.50093],[3.09086,42.50082],[3.14769,42.40072]],[[6.35945,43.02321],[6.42477,43.02444],[6.45244,43.03504],[6.46985,43.05461],[6.51121,43.05765],[6.52156,43.04318],[6.48364,43.02444],[6.47179,43.00725],[6.41178,42.9918],[6.39852,42.98048],[6.35178,42.99905],[6.35945,43.02321]]],terms_url:"https://wiki.openstreetmap.org/wiki/WikiProject_France/G%C3%A9oLittoral",terms_text:"Ortho littorale 2000"},{id:"GeolittoralV2-Orthophotos",name:"Géolittoral V2 - Orthophotos 2011-2014",type:"wms",template:"http://geolittoral.din.developpement-durable.gouv.fr/wxs?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=ortholittorale_v2_rvb&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",endDate:"2014-01-01T00:00:00.000Z",startDate:"2011-01-01T00:00:00.000Z",polygon:[[[-0.98385,46.18807],[-0.89497,46.15628],[-0.93455,46.10163],[-0.84388,46.06949],[-0.88241,46.01637],[-0.53787,45.89558],[-0.63498,45.76444],[-0.86666,45.8479],[-0.76264,45.6245],[-0.69695,45.62659],[-0.69397,45.60184],[-0.68755,45.60174],[-0.688,45.50986],[-0.63799,45.50892],[-0.63978,45.44747],[-0.61574,45.44695],[-0.61619,45.38586],[-0.58544,45.38596],[-0.58529,45.32334],[-0.55379,45.32344],[-0.55275,45.19661],[-0.49094,45.19577],[-0.49184,45.13315],[-0.45661,45.13325],[-0.45512,45.07161],[-0.41611,45.07089],[-0.41621,45.02696],[-0.2907,44.98278],[-0.22,45.06771],[-0.12252,45.02563],[-0.18925,44.94591],[-0.09266,44.91019],[-0.14521,44.8392],[-0.15491,44.84238],[-0.19387,44.78678],[-0.43541,44.87317],[-0.39048,44.68413],[-0.58798,44.66014],[-0.66628,44.99129],[-0.77838,44.99263],[-0.77764,45.05389],[-0.81584,45.05321],[-0.81838,45.11962],[-0.88393,45.12051],[-0.88171,45.18081],[-0.93438,45.18185],[-0.9328,45.24484],[-1.00163,45.24439],[-1.00247,45.30827],[-1.0524,45.31013],[-1.04828,45.36911],[-1.06412,45.36911],[-1.05039,45.18252],[-1.10761,44.80787],[-1.01514,44.80113],[-1.01946,44.76914],[-0.93365,44.76149],[-0.9404,44.7018],[-0.96035,44.56434],[-1.01408,44.56765],[-1.09916,44.1456],[-1.22689,44.14022],[-1.21853,44.03249],[-1.30762,44.029],[-1.39572,43.74301],[-1.31296,43.72951],[-1.37439,43.53109],[-1.34589,43.50606],[-1.59964,43.35423],[-1.76549,43.25548],[-1.79281,43.28038],[-1.80281,43.40425],[-1.72832,43.45033],[-1.58531,43.489],[-1.33584,44.22832],[-1.30744,44.41847],[-1.22511,45.44416],[-1.48685,46.06042],[-1.60176,46.17019],[-1.64442,46.22375],[-1.75643,46.42214],[-2.03483,46.61895],[-2.3466,46.62382],[-2.46561,46.71196],[-2.3233,46.83812],[-2.45286,46.93856],[-2.31733,47.16214],[-2.92848,47.28413],[-2.96742,47.22147],[-3.35602,47.32474],[-3.18803,47.48441],[-3.22791,47.61132],[-3.38912,47.59473],[-3.9162,47.67831],[-4.10163,47.70921],[-4.14314,47.78847],[-4.37619,47.71067],[-4.47962,47.9776],[-4.98565,47.99896],[-4.96938,48.08972],[-4.60147,48.11469],[-4.5921,48.14758],[-4.67101,48.2331],[-4.84243,48.3005],[-5.19867,48.44926],[-5.10346,48.51722],[-4.83515,48.54319],[-4.63117,48.66129],[-3.96692,48.77978],[-3.94939,48.74715],[-3.67013,48.89508],[-3.54444,48.90297],[-3.40954,48.91866],[-3.33344,48.90458],[-3.02769,48.9275],[-2.80207,48.79793],[-2.69353,48.76722],[-2.45786,48.70896],[-2.28475,48.71909],[-2.17543,48.65016],[-2.0137,48.73221],[-1.80953,48.73178],[-1.7243,48.75828],[-1.70557,48.84512],[-1.90304,48.86288],[-1.91027,48.92348],[-1.68714,48.93249],[-1.74277,49.24473],[-1.85748,49.3253],[-1.9262,49.65573],[-2.03908,49.67872],[-2.00445,49.76087],[-1.61759,49.68498],[-1.28373,49.76067],[-1.1492,49.63504],[-1.18545,49.54836],[-0.96463,49.42509],[-0.74429,49.36802],[-0.39014,49.3622],[-0.24976,49.3158],[-0.13342,49.31293],[0.02731,49.37619],[0.01801,49.54656],[0.12211,49.69292],[0.51713,49.86466],[1.05727,49.94904],[1.43908,50.11819],[1.53177,50.46437],[1.52549,50.85867],[1.64118,50.95919],[2.59712,51.17355],[2.66071,51.0196],[2.07124,50.92022],[2.05937,50.94709],[1.7976,50.89906],[1.68089,50.8717],[1.65569,50.59729],[1.75357,50.5932],[1.72295,50.24702],[1.82156,50.24262],[1.80149,50.05116],[1.54565,50.06311],[1.54155,50.01267],[1.42462,50.01747],[1.42667,50.05276],[1.03838,49.84609],[0.9827,49.88916],[0.57961,49.82133],[0.42063,49.76297],[0.4281,49.75445],[0.20831,49.67269],[0.14765,49.57767],[0.13461,49.5809],[0.11117,49.54365],[0.56598,49.52045],[0.5632,49.49989],[0.63001,49.49666],[0.61478,49.37441],[0.54825,49.37851],[0.54254,49.33461],[0.45741,49.33938],[0.45843,49.34492],[0.32597,49.35456],[0.32846,49.38128],[0.28011,49.38433],[0.27689,49.36334],[0.21095,49.36658],[0.20817,49.35084],[0.14326,49.35532],[0.13769,49.3115],[0.07204,49.31532],[0.0675,49.28713],[0.00274,49.29076],[0.00508,49.25711],[-0.02027,49.26036],[-0.03492,49.1973],[-0.19448,49.21463],[-0.38966,49.12726],[-0.45369,49.18792],[-0.3561,49.23214],[-0.82088,49.28331],[-0.99778,49.30149],[-1.16728,49.24545],[-1.19515,49.28183],[-1.26768,49.24099],[-1.34114,49.2975],[-1.24768,49.35025],[-1.44583,49.60689],[-1.81105,49.61757],[-1.77479,49.44333],[-1.72775,49.46509],[-1.5339,49.29098],[-1.47909,49.29233],[-1.47608,49.24027],[-1.43557,49.20326],[-1.47225,49.1822],[-1.45091,48.75725],[-1.31155,48.76408],[-1.30533,48.70216],[-1.2584,48.70421],[-1.25229,48.64353],[-1.23519,48.64435],[-1.2269,48.56824],[-1.85218,48.53086],[-1.84908,48.4975],[-1.92326,48.49187],[-1.92813,48.44096],[-2.04272,48.43601],[-2.03889,48.48191],[-2.2895,48.46102],[-2.3021,48.52433],[-2.40863,48.51618],[-2.42035,48.56954],[-2.43084,48.57852],[-2.49083,48.54924],[-2.47353,48.53326],[-2.54978,48.49647],[-2.54005,48.48747],[-2.70681,48.40746],[-3.02979,48.69115],[-4.01034,48.53179],[-4.05342,48.64412],[-4.38281,48.57349],[-4.35482,48.5118],[-4.38853,48.50473],[-4.13495,48.44868],[-4.16411,48.38936],[-4.01832,48.35685],[-4.04733,48.29918],[-3.98814,48.2867],[-4.0214,48.21606],[-4.03634,48.21958],[-4.06623,48.16028],[-4.16675,48.18247],[-4.18331,48.14934],[-4.17232,48.1065],[-4.20111,48.10285],[-4.18643,48.04389],[-4.18806,48.04061],[-4.35686,48.02305],[-4.25657,47.93997],[-4.23363,47.93497],[-4.21371,47.97598],[-4.21854,47.97726],[-4.1806,48.05569],[-3.6172,47.93124],[-2.17991,47.58642],[-2.25449,47.44501],[-2.30182,47.4568],[-2.32043,47.42092],[-2.30372,47.41755],[-2.34753,47.33499],[-2.36219,47.33837],[-2.38079,47.3039],[-2.35852,47.29854],[-2.29962,47.29784],[-2.29742,47.3618],[-2.13199,47.35852],[-2.13478,47.39107],[-2.01565,47.39623],[-2.01404,47.38095],[-1.92862,47.38254],[-1.92891,47.37956],[-1.8322,47.38184],[-1.82986,47.34165],[-1.73608,47.34304],[-1.73418,47.305],[-1.64084,47.30639],[-1.64011,47.29427],[-1.58355,47.29566],[-1.58531,47.33708],[-1.4612,47.33966],[-1.46003,47.32924],[-1.37211,47.33221],[-1.36054,47.11239],[-1.48567,47.11149],[-1.48582,47.11877],[-1.66897,47.11688],[-1.66971,47.12864],[-1.72553,47.12764],[-1.72612,47.13761],[-1.93975,47.13263],[-1.94019,47.1422],[-1.9925,47.14309],[-1.81066,47.00588],[-1.94723,46.92078],[-1.92891,46.90677],[-1.99529,46.86461],[-1.73652,46.66839],[-1.77535,46.64386],[-1.82678,46.64174],[-1.82473,46.62071],[-1.18192,46.39987],[-0.91261,46.3048],[-0.95481,46.2489],[-0.94235,46.24424],[-0.98385,46.18807]],[[3.14769,42.40072],[3.14949,42.40015],[3.15305,42.40052],[3.15804,42.40243],[3.1877,42.42805],[3.14227,42.5248],[3.06837,42.54635],[3.04884,42.6942],[3.0799,43.03073],[3.22641,43.18727],[3.40916,43.26032],[3.52104,43.25877],[3.66429,43.37628],[3.73841,43.39054],[4.00979,43.53607],[4.17692,43.45636],[4.54355,43.43349],[4.54943,43.35401],[4.83506,43.30891],[4.97506,43.38309],[5.03219,43.31928],[5.25919,43.31928],[5.31082,43.20504],[5.35682,43.18645],[5.36882,43.16785],[5.40232,43.16211],[5.41382,43.17123],[5.40919,43.19921],[5.54232,43.18827],[5.60582,43.14797],[5.6197,43.1529],[5.63832,43.17159],[5.67157,43.1674],[5.69095,43.13411],[5.77607,43.10637],[5.7762,43.09432],[5.75407,43.08328],[5.75707,43.0725],[5.77032,43.06465],[5.85933,43.03469],[5.8877,43.06273],[5.9567,43.06109],[5.96383,43.09277],[6.00033,43.09186],[6.01745,43.06849],[6.10233,43.07415],[6.10483,43.0526],[6.0666,43.04318],[6.06722,43.03785],[6.1427,43.00923],[6.15676,42.98715],[6.19635,42.97331],[6.22221,42.9801],[6.26891,42.99651],[6.25515,43.03627],[6.2019,43.02713],[6.18378,43.09188],[6.30153,43.09909],[6.32478,43.07974],[6.37778,43.08011],[6.38866,43.13395],[6.51341,43.14608],[6.57704,43.17881],[6.62291,43.14563],[6.69779,43.19969],[6.68016,43.23357],[6.72116,43.26007],[6.72241,43.27472],[6.67054,43.29192],[6.68741,43.33113],[6.72416,43.34267],[6.75291,43.409],[6.79104,43.39674],[6.90629,43.41672],[6.96767,43.50273],[6.96617,43.52812],[7.00617,43.53845],[7.03554,43.4982],[7.06892,43.5001],[7.09079,43.51642],[7.06267,43.53672],[7.08254,43.5456],[7.1238,43.53074],[7.1558,43.5437],[7.1433,43.62284],[7.16867,43.64636],[7.2138,43.63469],[7.25417,43.68497],[7.3403,43.66744],[7.36442,43.6894],[7.35305,43.7082],[7.4163,43.71091],[7.45405,43.74506],[7.4943,43.74524],[7.57943,43.78424],[7.60552,43.78603],[7.60368,43.78898],[7.59588,43.79528],[7.59628,43.79549],[7.53853,43.84195],[7.45996,43.79988],[7.44781,43.80934],[7.32353,43.74806],[7.30822,43.76357],[6.64878,43.3885],[6.66865,43.37178],[6.51003,43.27803],[6.56584,43.22509],[6.12681,43.10527],[5.48229,43.24939],[5.47267,43.2309],[5.41567,43.24657],[5.45267,43.3451],[4.80191,43.48158],[4.76416,43.39244],[4.65716,43.42368],[4.67228,43.45608],[4.43203,43.52419],[4.41453,43.49255],[4.16102,43.56433],[4.14452,43.57067],[4.14165,43.57393],[4.18677,43.59946],[4.10565,43.68196],[3.79689,43.52165],[3.77851,43.51313],[3.76464,43.50597],[3.76201,43.50334],[3.74226,43.49328],[3.71601,43.52075],[3.26213,43.28143],[3.24638,43.29735],[3.18388,43.28052],[3.10675,43.24083],[3.15475,43.19419],[2.90625,43.19383],[2.90675,42.76189],[2.94613,42.76208],[2.9465,42.61516],[2.99238,42.61497],[2.99238,42.5125],[3.041,42.51259],[3.04121,42.50093],[3.09086,42.50082],[3.14769,42.40072]],[[6.35945,43.02321],[6.42477,43.02444],[6.45244,43.03504],[6.46985,43.05461],[6.51121,43.05765],[6.52156,43.04318],[6.48364,43.02444],[6.47179,43.00725],[6.41178,42.9918],[6.39852,42.98048],[6.35178,42.99905],[6.35945,43.02321]]],terms_url:"https://wiki.openstreetmap.org/wiki/WikiProject_France/G%C3%A9oLittoral",terms_text:"Ortho Littorale V2 - MEDDE"},{id:"lu.geoportail.opendata.ortho_10cm_proto_lidar",name:"geoportail.lu LIDAR prototype Nordstad 2017",type:"tms",template:"https://{switch:wmts1,wmts2}.geoportail.lu/opendata/wmts/ortho_10cm_proto_lidar/GLOBAL_WEBMERCATOR_4_V3/{zoom}/{x}/{y}.jpeg",endDate:"2017-04-09T00:00:00.000Z",startDate:"2017-04-09T00:00:00.000Z",zoomExtent:[0,21],polygon:[[[6.05001,49.82175],[6.04979,49.91166],[6.18901,49.91172],[6.18897,49.82181],[6.05001,49.82175]]],terms_url:"https://act.public.lu/fr/cartographie/lidar",terms_text:"Administration du Cadastre et de la Topographie",icon:"https://www.geoportail.lu/static/img/lion.png"},{id:"Geoportal2-PL-aerial_image",name:"Geoportal 2: Orthophotomap (aerial image)",type:"wms",template:"http://mapy.geoportal.gov.pl/wss/service/img/guest/ORTO/MapServer/WMSServer?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=Raster&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}{header(User-Agent,Mozilla/5.0 (JOSM)}",projection:"EPSG:4326",zoomExtent:[0,23],polygon:[[[15.9751,54.37092],[16.31116,54.55618],[17.13919,54.78457],[18.34485,54.90227],[19.66137,54.47372],[20.28152,54.42135],[21.46639,54.34064],[22.77599,54.37698],[22.8626,54.42336],[23.29567,54.26786],[23.53472,54.09553],[23.52086,53.97752],[23.71834,53.46296],[23.92968,53.18567],[23.92968,52.68873],[23.7322,52.60675],[23.5659,52.58781],[23.20905,52.33026],[23.19519,52.23701],[23.50354,52.18606],[23.69062,52.00301],[23.59708,51.7399],[23.66291,51.38886],[23.9366,50.98278],[24.16873,50.86048],[24.01975,50.80358],[24.10983,50.66105],[24.05786,50.41884],[23.61787,50.30834],[22.68244,49.51635],[22.73788,49.20949],[22.90417,49.07804],[22.8626,48.99401],[22.60969,49.03718],[22.07615,49.20044],[21.84749,49.37219],[21.37631,49.44883],[21.10262,49.37219],[20.91207,49.3022],[20.6453,49.39023],[20.18451,49.33156],[20.11869,49.20044],[19.942,49.13021],[19.76531,49.21176],[19.74798,49.39925],[19.60247,49.41503],[19.50893,49.58154],[19.42925,49.59052],[19.23177,49.41503],[18.99618,49.38798],[18.93382,49.4916],[18.83681,49.49386],[18.80216,49.66234],[18.6428,49.70941],[18.52154,49.89947],[18.08154,50.01092],[17.88753,49.98865],[17.73855,50.06877],[17.6069,50.17096],[17.74548,50.21532],[17.71084,50.3017],[17.41635,50.26407],[16.94864,50.44533],[16.89321,50.40339],[17.00061,50.31055],[17.01793,50.22419],[16.81352,50.18649],[16.64029,50.09767],[16.43242,50.28621],[16.19683,50.42767],[16.42203,50.58852],[16.33888,50.66324],[16.22802,50.63688],[16.05479,50.61271],[15.57322,50.76415],[15.26834,50.89764],[15.24409,50.9806],[15.02929,51.0133],[15.00157,50.85829],[14.81102,50.87359],[14.95653,51.07212],[15.01889,51.29146],[14.93921,51.46015],[14.72094,51.55718],[14.75212,51.62606],[14.59968,51.84276],[14.70362,52.07334],[14.55811,52.24974],[14.51654,52.42544],[14.60315,52.58781],[14.11465,52.82083],[14.15276,52.9734],[14.35024,53.07342],[14.42299,53.26656],[14.1978,53.87348],[14.22205,53.99585],[15.9751,54.37092]]],terms_url:"https://geoportal.gov.pl/web/guest/regulamin",terms_text:"Główny Urząd Geodezji i Kartografii",best:true,icon:"https://wiki.openstreetmap.org/w/images/2/25/Geoportal-josm.png"},{id:"Geoportal2-PL-prng",name:"Geoportal 2: PRNG (geo names)",type:"wms",template:"http://mapy.geoportal.gov.pl/wss/service/pub/guest/G2_PRNG_WMS/MapServer/WMSServer?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=PozostaleObiektyFizjograficzne,Hydrografia,PozostaleMiejscowosci,Wies,UksztaltowanieTerenu&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}{header(User-Agent,Mozilla/5.0 (JOSM)}",projection:"EPSG:4326",polygon:[[[15.9751,54.37092],[16.31116,54.55618],[17.13919,54.78457],[18.34485,54.90227],[19.66137,54.47372],[20.28152,54.42135],[21.46639,54.34064],[22.77599,54.37698],[22.8626,54.42336],[23.29567,54.26786],[23.53472,54.09553],[23.52086,53.97752],[23.71834,53.46296],[23.92968,53.18567],[23.92968,52.68873],[23.7322,52.60675],[23.5659,52.58781],[23.20905,52.33026],[23.19519,52.23701],[23.50354,52.18606],[23.69062,52.00301],[23.59708,51.7399],[23.66291,51.38886],[23.9366,50.98278],[24.16873,50.86048],[24.01975,50.80358],[24.10983,50.66105],[24.05786,50.41884],[23.61787,50.30834],[22.68244,49.51635],[22.73788,49.20949],[22.90417,49.07804],[22.8626,48.99401],[22.60969,49.03718],[22.07615,49.20044],[21.84749,49.37219],[21.37631,49.44883],[21.10262,49.37219],[20.91207,49.3022],[20.6453,49.39023],[20.18451,49.33156],[20.11869,49.20044],[19.942,49.13021],[19.76531,49.21176],[19.74798,49.39925],[19.60247,49.41503],[19.50893,49.58154],[19.42925,49.59052],[19.23177,49.41503],[18.99618,49.38798],[18.93382,49.4916],[18.83681,49.49386],[18.80216,49.66234],[18.6428,49.70941],[18.52154,49.89947],[18.08154,50.01092],[17.88753,49.98865],[17.73855,50.06877],[17.6069,50.17096],[17.74548,50.21532],[17.71084,50.3017],[17.41635,50.26407],[16.94864,50.44533],[16.89321,50.40339],[17.00061,50.31055],[17.01793,50.22419],[16.81352,50.18649],[16.64029,50.09767],[16.43242,50.28621],[16.19683,50.42767],[16.42203,50.58852],[16.33888,50.66324],[16.22802,50.63688],[16.05479,50.61271],[15.57322,50.76415],[15.26834,50.89764],[15.24409,50.9806],[15.02929,51.0133],[15.00157,50.85829],[14.81102,50.87359],[14.95653,51.07212],[15.01889,51.29146],[14.93921,51.46015],[14.72094,51.55718],[14.75212,51.62606],[14.59968,51.84276],[14.70362,52.07334],[14.55811,52.24974],[14.51654,52.42544],[14.60315,52.58781],[14.11465,52.82083],[14.15276,52.9734],[14.35024,53.07342],[14.42299,53.26656],[14.1978,53.87348],[14.22205,53.99585],[15.9751,54.37092]]],terms_url:"http://www.codgik.gov.pl/index.php/darmowe-dane/prng.html",terms_text:"Centralny Ośrodek Dokumentacji Geodezyjnej i Kartograficznej",icon:"https://wiki.openstreetmap.org/w/images/2/25/Geoportal-josm.png",overlay:true},{id:"Geoportal-PL-aerial_image",name:"Geoportal.gov.pl (Orthophotomap)",type:"tms",template:"https://wms.misek.pl/geoportal.orto/tms/{zoom}/{x}/{y}",zoomExtent:[6,24],polygon:[[[15.9751,54.37092],[16.31116,54.55618],[17.13919,54.78457],[18.34485,54.90227],[19.66137,54.47372],[20.28152,54.42135],[21.46639,54.34064],[22.77599,54.37698],[22.8626,54.42336],[23.29567,54.26786],[23.53472,54.09553],[23.52086,53.97752],[23.71834,53.46296],[23.92968,53.18567],[23.92968,52.68873],[23.7322,52.60675],[23.5659,52.58781],[23.20905,52.33026],[23.19519,52.23701],[23.50354,52.18606],[23.69062,52.00301],[23.59708,51.7399],[23.66291,51.38886],[23.9366,50.98278],[24.16873,50.86048],[24.01975,50.80358],[24.10983,50.66105],[24.05786,50.41884],[23.61787,50.30834],[22.68244,49.51635],[22.73788,49.20949],[22.90417,49.07804],[22.8626,48.99401],[22.60969,49.03718],[22.07615,49.20044],[21.84749,49.37219],[21.37631,49.44883],[21.10262,49.37219],[20.91207,49.3022],[20.6453,49.39023],[20.18451,49.33156],[20.11869,49.20044],[19.942,49.13021],[19.76531,49.21176],[19.74798,49.39925],[19.60247,49.41503],[19.50893,49.58154],[19.42925,49.59052],[19.23177,49.41503],[18.99618,49.38798],[18.93382,49.4916],[18.83681,49.49386],[18.80216,49.66234],[18.6428,49.70941],[18.52154,49.89947],[18.08154,50.01092],[17.88753,49.98865],[17.73855,50.06877],[17.6069,50.17096],[17.74548,50.21532],[17.71084,50.3017],[17.41635,50.26407],[16.94864,50.44533],[16.89321,50.40339],[17.00061,50.31055],[17.01793,50.22419],[16.81352,50.18649],[16.64029,50.09767],[16.43242,50.28621],[16.19683,50.42767],[16.42203,50.58852],[16.33888,50.66324],[16.22802,50.63688],[16.05479,50.61271],[15.57322,50.76415],[15.26834,50.89764],[15.24409,50.9806],[15.02929,51.0133],[15.00157,50.85829],[14.81102,50.87359],[14.95653,51.07212],[15.01889,51.29146],[14.93921,51.46015],[14.72094,51.55718],[14.75212,51.62606],[14.59968,51.84276],[14.70362,52.07334],[14.55811,52.24974],[14.51654,52.42544],[14.60315,52.58781],[14.11465,52.82083],[14.15276,52.9734],[14.35024,53.07342],[14.42299,53.26656],[14.1978,53.87348],[14.22205,53.99585],[15.9751,54.37092]]],terms_text:"Copyright © Główny Urząd Geodezji i Kartografii.",best:true,icon:"https://i.imgur.com/aFlvMpM.png"},{id:"girau_do_pnciano",name:"Girau do Ponciano",type:"wms",template:"http://geoserver.dados.al.gov.br:8080/geoserver/Alagoas/ows?LAYERS=Girau%20do%20Ponciano&SERVICE=WMS&FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.0&SERVICE=WMS&REQUEST=GetMap&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[-36.78013,-9.92939],[-36.78087,-9.83892],[-36.87233,-9.83917],[-36.87173,-9.90542],[-36.87037,-9.92989],[-36.86156,-9.92994],[-36.85566,-9.92981],[-36.85146,-9.92973],[-36.84575,-9.92977],[-36.83213,-9.92967],[-36.81456,-9.9296],[-36.78013,-9.92939]]],terms_url:"http://www.seplag.al.gov.br",terms_text:"Secretaria de Estado do Planejamento, Gestão e Patrimônio"},{id:"Gliwice-buildings",name:"Gliwice: Buildings",type:"wms",template:"http://185.60.246.14:9090/isdp/gs/ows?FORMAT=image/png&transparent=true&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=default:EGIB_budynek,default:pkt_adr&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",polygon:[[[18.57376,50.34828],[18.58723,50.35464],[18.58421,50.3601],[18.59264,50.37522],[18.65228,50.38297],[18.67384,50.37675],[18.67672,50.36174],[18.69218,50.34467],[18.70805,50.33799],[18.74154,50.3391],[18.75145,50.33046],[18.74679,50.31236],[18.75512,50.30193],[18.76358,50.29989],[18.76539,50.26873],[18.744,50.26541],[18.73482,50.25377],[18.72775,50.22843],[18.71439,50.22835],[18.71426,50.21978],[18.67522,50.21969],[18.67607,50.22562],[18.65098,50.23169],[18.6288,50.22539],[18.61744,50.24044],[18.62699,50.24369],[18.6315,50.25487],[18.61406,50.2576],[18.60319,50.25206],[18.56536,50.24763],[18.54841,50.2492],[18.55857,50.2826],[18.5459,50.29947],[18.52896,50.33687],[18.55118,50.35332],[18.57376,50.34828]]],terms_text:"Urząd Miasta Gliwice"},{id:"GRAFCAN-Canary_Islands",name:"GRAFCAN - Canary Islands",type:"wms",template:"https://idecan1.grafcan.es/ServicioWMS/OrtoUrb?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&Layers=OU&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",polygon:[[[-17.92917,28.89106],[-18.03334,28.79981],[-18.03743,28.73178],[-17.87811,28.43224],[-17.83113,28.41787],[-17.72696,28.56328],[-17.73105,28.67982],[-17.68407,28.73715],[-17.75352,28.86781],[-17.85768,28.86065],[-17.92917,28.89106]],[[-18.07818,27.77211],[-18.13707,27.78751],[-18.17054,27.76441],[-18.1779,27.70695],[-18.15782,27.68799],[-18.0581,27.6791],[-18.00656,27.62574],[-17.96105,27.62218],[-17.93896,27.70814],[-17.90751,27.7194],[-17.86199,27.80468],[-17.8727,27.84079],[-17.92558,27.86801],[-18.00522,27.83605],[-18.01392,27.8035],[-18.07818,27.77211]],[[-17.26878,28.23996],[-17.33403,28.21933],[-17.36331,28.1537],[-17.36666,28.08803],[-17.33069,28.04742],[-17.27296,28.00681],[-17.20017,28.00533],[-17.14412,28.02896],[-17.07803,28.0836],[-17.08723,28.1537],[-17.1826,28.2149],[-17.26878,28.23996]],[[-16.9358,28.37623],[-16.945,28.33574],[-16.71995,27.98317],[-16.62541,27.98317],[-16.52753,28.01641],[-16.39953,28.14632],[-16.33594,28.30922],[-16.33009,28.36445],[-16.10253,28.52408],[-16.09834,28.5814],[-16.14268,28.62547],[-16.33929,28.59609],[-16.43801,28.53143],[-16.53924,28.44025],[-16.83959,28.41229],[-16.9358,28.37623]],[[-15.68833,28.20585],[-15.47395,28.16437],[-15.42427,28.21046],[-15.36283,28.17244],[-15.38375,28.05598],[-15.33146,27.98444],[-15.3576,27.8042],[-15.5916,27.69777],[-15.7001,27.73365],[-15.79944,27.80305],[-15.87134,27.92439],[-15.84781,28.03637],[-15.74716,28.08943],[-15.73147,28.18396],[-15.68833,28.20585]],[[-14.50882,28.13448],[-14.41078,28.13448],[-14.24868,28.24278],[-14.23822,28.34637],[-14.03953,28.73911],[-13.89442,28.78265],[-13.78592,28.77692],[-13.82122,28.38433],[-13.91534,28.19095],[-14.18593,28.13563],[-14.30881,28.00529],[-14.54019,28.05144],[-14.50882,28.13448]],[[-13.5525,29.37727],[-13.50868,29.36824],[-13.47955,29.38728],[-13.47543,29.40963],[-13.5003,29.42807],[-13.5505,29.40712],[-13.5525,29.37727]],[[-13.3976,29.16102],[-13.42814,29.12157],[-13.44174,28.99084],[-13.53899,28.91947],[-13.70841,28.88468],[-13.77116,28.80865],[-13.90083,28.83522],[-13.90711,28.88926],[-13.85796,28.93686],[-13.85691,29.03657],[-13.67599,29.14988],[-13.56723,29.15719],[-13.55428,29.35073],[-13.39988,29.21806],[-13.3976,29.16102]],[[-13.33792,29.28667],[-13.35035,29.27436],[-13.3386,29.26533],[-13.32617,29.27765],[-13.33792,29.28667]]],terms_text:"GRAFCAN OrtoExpress Urbana 2009"},{id:"GRAFCAN_Express-Canary_Islands",name:"GRAFCAN Express - Canary Islands",type:"wms",template:"https://idecan1.grafcan.es/ServicioWMS/OrtoExpress?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&Layers=ortoexpress&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",polygon:[[[-17.92917,28.89106],[-18.03334,28.79981],[-18.03743,28.73178],[-17.87811,28.43224],[-17.83113,28.41787],[-17.72696,28.56328],[-17.73105,28.67982],[-17.68407,28.73715],[-17.75352,28.86781],[-17.85768,28.86065],[-17.92917,28.89106]],[[-18.07818,27.77211],[-18.13707,27.78751],[-18.17054,27.76441],[-18.1779,27.70695],[-18.15782,27.68799],[-18.0581,27.6791],[-18.00656,27.62574],[-17.96105,27.62218],[-17.93896,27.70814],[-17.90751,27.7194],[-17.86199,27.80468],[-17.8727,27.84079],[-17.92558,27.86801],[-18.00522,27.83605],[-18.01392,27.8035],[-18.07818,27.77211]],[[-17.26878,28.23996],[-17.33403,28.21933],[-17.36331,28.1537],[-17.36666,28.08803],[-17.33069,28.04742],[-17.27296,28.00681],[-17.20017,28.00533],[-17.14412,28.02896],[-17.07803,28.0836],[-17.08723,28.1537],[-17.1826,28.2149],[-17.26878,28.23996]],[[-16.9358,28.37623],[-16.945,28.33574],[-16.71995,27.98317],[-16.62541,27.98317],[-16.52753,28.01641],[-16.39953,28.14632],[-16.33594,28.30922],[-16.33009,28.36445],[-16.10253,28.52408],[-16.09834,28.5814],[-16.14268,28.62547],[-16.33929,28.59609],[-16.43801,28.53143],[-16.53924,28.44025],[-16.83959,28.41229],[-16.9358,28.37623]],[[-15.68833,28.20585],[-15.47395,28.16437],[-15.42427,28.21046],[-15.36283,28.17244],[-15.38375,28.05598],[-15.33146,27.98444],[-15.3576,27.8042],[-15.5916,27.69777],[-15.7001,27.73365],[-15.79944,27.80305],[-15.87134,27.92439],[-15.84781,28.03637],[-15.74716,28.08943],[-15.73147,28.18396],[-15.68833,28.20585]],[[-14.50882,28.13448],[-14.41078,28.13448],[-14.24868,28.24278],[-14.23822,28.34637],[-14.03953,28.73911],[-13.89442,28.78265],[-13.78592,28.77692],[-13.82122,28.38433],[-13.91534,28.19095],[-14.18593,28.13563],[-14.30881,28.00529],[-14.54019,28.05144],[-14.50882,28.13448]],[[-13.5525,29.37727],[-13.50868,29.36824],[-13.47955,29.38728],[-13.47543,29.40963],[-13.5003,29.42807],[-13.5505,29.40712],[-13.5525,29.37727]],[[-13.3976,29.16102],[-13.42814,29.12157],[-13.44174,28.99084],[-13.53899,28.91947],[-13.70841,28.88468],[-13.77116,28.80865],[-13.90083,28.83522],[-13.90711,28.88926],[-13.85796,28.93686],[-13.85691,29.03657],[-13.67599,29.14988],[-13.56723,29.15719],[-13.55428,29.35073],[-13.39988,29.21806],[-13.3976,29.16102]],[[-13.33792,29.28667],[-13.35035,29.27436],[-13.3386,29.26533],[-13.32617,29.27765],[-13.33792,29.28667]]],terms_text:"GRAFCAN OrtoExpress"},{id:"GrandNancy_Orthophotographie_2012",name:"GrandNancy - Orthophoto - 2012",type:"tms",template:"http://wms.openstreetmap.fr/tms/1.0.0/nancy_2012/{zoom}/{x}/{y}",endDate:"2012-01-01T00:00:00.000Z",startDate:"2012-01-01T00:00:00.000Z",zoomExtent:[0,22],polygon:[[[6.06066,48.60554],[6.29717,48.59923],[6.30611,48.74077],[6.06896,48.7471],[6.06066,48.60554]]],terms_url:"https://wiki.openstreetmap.org/wiki/Nancy/Orthophotographie",terms_text:"GrandNancy Orthophotographie 2012"},{id:"GURS-buildings",name:"GURS: Building outlines",type:"tms",template:"https://wms.openstreetmap.de/tms/GURS-building-outlines/{zoom}/{x}/{y}.png",zoomExtent:[8,19],polygon:[[[15.17101,45.41273],[15.06731,45.4781],[14.98353,45.48726],[14.93027,45.51869],[14.91295,45.46869],[14.81398,45.45019],[14.77755,45.49724],[14.71885,45.52386],[14.68383,45.51924],[14.68367,45.57107],[14.58902,45.61966],[14.59477,45.65727],[14.51653,45.5974],[14.49636,45.52968],[14.32388,45.46048],[14.28251,45.47949],[14.26083,45.47352],[14.2367,45.49569],[14.21022,45.45962],[14.1328,45.46542],[14.06694,45.47615],[14.01187,45.50769],[13.98752,45.49945],[14.00668,45.4739],[13.99154,45.44854],[13.91789,45.44329],[13.88867,45.416],[13.81063,45.42531],[13.7856,45.45577],[13.67553,45.43241],[13.38,45.5666],[13.63822,45.64153],[13.72158,45.60472],[13.83759,45.59226],[13.89962,45.63295],[13.82754,45.67917],[13.82429,45.70266],[13.78961,45.73525],[13.66355,45.79008],[13.62279,45.78613],[13.58835,45.80154],[13.56531,45.85522],[13.62633,45.93894],[13.62975,45.97662],[13.59233,45.97929],[13.57124,45.9591],[13.52998,45.95627],[13.46729,46.00147],[13.49765,46.03741],[13.4896,46.06574],[13.58839,46.11268],[13.63712,46.14524],[13.65358,46.17505],[13.57147,46.17434],[13.54859,46.19982],[13.48189,46.21479],[13.42003,46.19662],[13.40026,46.21037],[13.40304,46.23284],[13.36653,46.30266],[13.43369,46.33243],[13.43247,46.36779],[13.56263,46.40895],[13.59357,46.44846],[13.68393,46.44947],[13.71321,46.53296],[13.79725,46.5164],[13.91305,46.53108],[14.00849,46.49169],[14.09406,46.49538],[14.12664,46.4852],[14.16569,46.44341],[14.28242,46.45347],[14.3259,46.44111],[14.43178,46.4568],[14.45113,46.43239],[14.52618,46.43623],[14.56677,46.38549],[14.58993,46.44479],[14.65658,46.45447],[14.71191,46.50954],[14.80818,46.51778],[14.81442,46.55093],[14.86094,46.61239],[14.9102,46.61569],[14.95398,46.64257],[14.98376,46.61868],[15.02973,46.65796],[15.10645,46.66965],[15.23727,46.64973],[15.41364,46.66553],[15.46237,46.64732],[15.47411,46.6226],[15.53427,46.64346],[15.53636,46.6761],[15.59201,46.69952],[15.62405,46.69039],[15.65624,46.71643],[15.767,46.70899],[15.83801,46.73237],[15.91476,46.71958],[16.02919,46.67033],[16.02955,46.68778],[15.99495,46.71178],[15.97505,46.74967],[15.98671,46.84189],[16.0553,46.85049],[16.11022,46.87912],[16.15425,46.86525],[16.23302,46.88667],[16.29431,46.8824],[16.34649,46.85476],[16.36058,46.8278],[16.34711,46.79707],[16.32245,46.79068],[16.33977,46.7799],[16.33186,46.75896],[16.38893,46.70785],[16.4383,46.69655],[16.42822,46.65301],[16.40159,46.6439],[16.51477,46.57299],[16.54136,46.53627],[16.5416,46.50887],[16.611,46.48393],[16.61889,46.46203],[16.52219,46.45842],[16.47451,46.50108],[16.36776,46.53371],[16.2582,46.489],[16.28533,46.42441],[16.3168,46.40141],[16.30574,46.36921],[16.18689,46.36804],[16.14548,46.39515],[16.06959,46.38154],[16.08614,46.34087],[16.04058,46.32708],[16.01819,46.29964],[15.80777,46.25091],[15.79649,46.21296],[15.77128,46.19937],[15.67996,46.21707],[15.65737,46.20838],[15.65639,46.18456],[15.62037,46.16163],[15.61899,46.11595],[15.63483,46.09529],[15.71869,46.06873],[15.74241,46.04578],[15.71612,45.99489],[15.71645,45.9178],[15.69237,45.90013],[15.69375,45.87111],[15.71776,45.8416],[15.6441,45.81058],[15.57467,45.83999],[15.52333,45.81155],[15.49115,45.82041],[15.47514,45.78666],[15.40343,45.78216],[15.28683,45.73391],[15.27435,45.72408],[15.29763,45.70782],[15.36329,45.72191],[15.41517,45.65443],[15.39705,45.62929],[15.31501,45.62356],[15.31503,45.60696],[15.29266,45.60163],[15.30852,45.58653],[15.31145,45.5423],[15.39496,45.48325],[15.34824,45.44665],[15.27515,45.45599],[15.22848,45.41683],[15.17101,45.41273]]],terms_url:"http://egp.gu.gov.si/",terms_text:"CC-BY ©2019 Geodetska uprava Republike Slovenije (gu.gov.si).",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/si/GURSRoadlines.png",overlay:true},{id:"GURS-roads",name:"GURS: Road lines",type:"tms",template:"https://wms.openstreetmap.de/tms/GURS-road-lines/{zoom}/{x}/{y}.png",zoomExtent:[8,19],polygon:[[[15.17101,45.41273],[15.06731,45.4781],[14.98353,45.48726],[14.93027,45.51869],[14.91295,45.46869],[14.81398,45.45019],[14.77755,45.49724],[14.71885,45.52386],[14.68383,45.51924],[14.68367,45.57107],[14.58902,45.61966],[14.59477,45.65727],[14.51653,45.5974],[14.49636,45.52968],[14.32388,45.46048],[14.28251,45.47949],[14.26083,45.47352],[14.2367,45.49569],[14.21022,45.45962],[14.1328,45.46542],[14.06694,45.47615],[14.01187,45.50769],[13.98752,45.49945],[14.00668,45.4739],[13.99154,45.44854],[13.91789,45.44329],[13.88867,45.416],[13.81063,45.42531],[13.7856,45.45577],[13.67553,45.43241],[13.38,45.5666],[13.63822,45.64153],[13.72158,45.60472],[13.83759,45.59226],[13.89962,45.63295],[13.82754,45.67917],[13.82429,45.70266],[13.78961,45.73525],[13.66355,45.79008],[13.62279,45.78613],[13.58835,45.80154],[13.56531,45.85522],[13.62633,45.93894],[13.62975,45.97662],[13.59233,45.97929],[13.57124,45.9591],[13.52998,45.95627],[13.46729,46.00147],[13.49765,46.03741],[13.4896,46.06574],[13.58839,46.11268],[13.63712,46.14524],[13.65358,46.17505],[13.57147,46.17434],[13.54859,46.19982],[13.48189,46.21479],[13.42003,46.19662],[13.40026,46.21037],[13.40304,46.23284],[13.36653,46.30266],[13.43369,46.33243],[13.43247,46.36779],[13.56263,46.40895],[13.59357,46.44846],[13.68393,46.44947],[13.71321,46.53296],[13.79725,46.5164],[13.91305,46.53108],[14.00849,46.49169],[14.09406,46.49538],[14.12664,46.4852],[14.16569,46.44341],[14.28242,46.45347],[14.3259,46.44111],[14.43178,46.4568],[14.45113,46.43239],[14.52618,46.43623],[14.56677,46.38549],[14.58993,46.44479],[14.65658,46.45447],[14.71191,46.50954],[14.80818,46.51778],[14.81442,46.55093],[14.86094,46.61239],[14.9102,46.61569],[14.95398,46.64257],[14.98376,46.61868],[15.02973,46.65796],[15.10645,46.66965],[15.23727,46.64973],[15.41364,46.66553],[15.46237,46.64732],[15.47411,46.6226],[15.53427,46.64346],[15.53636,46.6761],[15.59201,46.69952],[15.62405,46.69039],[15.65624,46.71643],[15.767,46.70899],[15.83801,46.73237],[15.91476,46.71958],[16.02919,46.67033],[16.02955,46.68778],[15.99495,46.71178],[15.97505,46.74967],[15.98671,46.84189],[16.0553,46.85049],[16.11022,46.87912],[16.15425,46.86525],[16.23302,46.88667],[16.29431,46.8824],[16.34649,46.85476],[16.36058,46.8278],[16.34711,46.79707],[16.32245,46.79068],[16.33977,46.7799],[16.33186,46.75896],[16.38893,46.70785],[16.4383,46.69655],[16.42822,46.65301],[16.40159,46.6439],[16.51477,46.57299],[16.54136,46.53627],[16.5416,46.50887],[16.611,46.48393],[16.61889,46.46203],[16.52219,46.45842],[16.47451,46.50108],[16.36776,46.53371],[16.2582,46.489],[16.28533,46.42441],[16.3168,46.40141],[16.30574,46.36921],[16.18689,46.36804],[16.14548,46.39515],[16.06959,46.38154],[16.08614,46.34087],[16.04058,46.32708],[16.01819,46.29964],[15.80777,46.25091],[15.79649,46.21296],[15.77128,46.19937],[15.67996,46.21707],[15.65737,46.20838],[15.65639,46.18456],[15.62037,46.16163],[15.61899,46.11595],[15.63483,46.09529],[15.71869,46.06873],[15.74241,46.04578],[15.71612,45.99489],[15.71645,45.9178],[15.69237,45.90013],[15.69375,45.87111],[15.71776,45.8416],[15.6441,45.81058],[15.57467,45.83999],[15.52333,45.81155],[15.49115,45.82041],[15.47514,45.78666],[15.40343,45.78216],[15.28683,45.73391],[15.27435,45.72408],[15.29763,45.70782],[15.36329,45.72191],[15.41517,45.65443],[15.39705,45.62929],[15.31501,45.62356],[15.31503,45.60696],[15.29266,45.60163],[15.30852,45.58653],[15.31145,45.5423],[15.39496,45.48325],[15.34824,45.44665],[15.27515,45.45599],[15.22848,45.41683],[15.17101,45.41273]]],terms_url:"http://egp.gu.gov.si/",terms_text:"CC-BY ©2019 Geodetska uprava Republike Slovenije (gu.gov.si).",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/si/GURSRoadlines.png",overlay:true},{id:"hamburg-20cm",name:"Hamburg (20 cm)",type:"wms",template:"https://geodienste.hamburg.de/HH_WMS_DOP20?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=1&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[8.4826,53.9356],[8.48274,53.90924],[8.5275,53.90941],[8.52792,53.93577],[8.4826,53.9356]],[[9.77232,53.54352],[9.77434,53.55433],[9.76314,53.55521],[9.73047,53.55787],[9.73465,53.56536],[9.75793,53.61828],[9.77129,53.63131],[9.7707,53.61607],[9.79634,53.6103],[9.78993,53.60386],[9.81817,53.58591],[9.83773,53.59198],[9.84498,53.59498],[9.85416,53.59805],[9.86814,53.6093],[9.86931,53.61323],[9.88505,53.62199],[9.88697,53.6252],[9.89356,53.63026],[9.89637,53.63122],[9.89688,53.63492],[9.90678,53.65231],[9.93115,53.65262],[9.94552,53.65276],[9.95024,53.65085],[9.95155,53.65065],[9.97795,53.64887],[9.98492,53.6483],[9.98739,53.65072],[9.9996,53.68153],[10.02282,53.68157],[10.04338,53.68198],[10.05148,53.67759],[10.06925,53.67955],[10.0604,53.68833],[10.071,53.69585],[10.0707,53.70996],[10.08198,53.72044],[10.11908,53.71324],[10.16939,53.73896],[10.19369,53.731],[10.1779,53.70992],[10.15694,53.70451],[10.15829,53.68944],[10.14342,53.68057],[10.14176,53.67744],[10.14473,53.67613],[10.14643,53.67588],[10.14955,53.67545],[10.17153,53.66869],[10.19885,53.64675],[10.18973,53.63838],[10.22202,53.63349],[10.18887,53.61316],[10.19236,53.59474],[10.20117,53.58392],[10.15169,53.57619],[10.15067,53.56973],[10.148,53.5639],[10.15308,53.56242],[10.15942,53.56091],[10.15189,53.5417],[10.15465,53.53657],[10.16874,53.5374],[10.16327,53.52185],[10.16611,53.52013],[10.16919,53.51965],[10.18951,53.51148],[10.21043,53.51996],[10.21828,53.49923],[10.2367,53.49629],[10.25008,53.47898],[10.26592,53.47079],[10.29043,53.45512],[10.30962,53.44309],[10.31223,53.45229],[10.32514,53.44979],[10.30799,53.43332],[10.25598,53.41623],[10.25089,53.41024],[10.24578,53.40261],[10.24155,53.39797],[10.16555,53.39933],[10.14506,53.41614],[10.10949,53.42649],[10.1068,53.42658],[10.07581,53.45436],[10.05155,53.46394],[10.03517,53.4469],[10.01449,53.44203],[10.02294,53.43228],[9.99754,53.42546],[9.98243,53.41478],[9.97873,53.4142],[9.9581,53.42708],[9.92953,53.42007],[9.92552,53.41924],[9.90667,53.41596],[9.92305,53.43631],[9.91704,53.44664],[9.90436,53.45707],[9.89493,53.45583],[9.86885,53.44462],[9.86211,53.42942],[9.84872,53.44111],[9.80663,53.46648],[9.80021,53.47372],[9.8028,53.49383],[9.78203,53.49236],[9.76885,53.5053],[9.77107,53.52185],[9.78105,53.51838],[9.77352,53.52796],[9.77232,53.54352]]],terms_url:"https://www.hamburg.de/bsw/landesbetrieb-geoinformation-und-vermessung",terms_text:"Freie und Hansestadt Hamburg, Landesbetrieb Geoinformation und Vermessung"},{id:"Hamburg-DK5",name:"Hamburg (DK5)",type:"wms",template:"https://geodienste.hamburg.de/HH_WMS_DK5?FORMAT=image/png&TRANSPARENT=false&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=1&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[8.4826,53.9356],[8.48274,53.90924],[8.5275,53.90941],[8.52792,53.93577],[8.4826,53.9356]],[[9.77232,53.54352],[9.77434,53.55433],[9.76314,53.55521],[9.73047,53.55787],[9.73465,53.56536],[9.75793,53.61828],[9.77129,53.63131],[9.7707,53.61607],[9.79634,53.6103],[9.78993,53.60386],[9.81817,53.58591],[9.83773,53.59198],[9.84498,53.59498],[9.85416,53.59805],[9.86814,53.6093],[9.86931,53.61323],[9.88505,53.62199],[9.88697,53.6252],[9.89356,53.63026],[9.89637,53.63122],[9.89688,53.63492],[9.90678,53.65231],[9.93115,53.65262],[9.94552,53.65276],[9.95024,53.65085],[9.95155,53.65065],[9.97795,53.64887],[9.98492,53.6483],[9.98739,53.65072],[9.9996,53.68153],[10.02282,53.68157],[10.04338,53.68198],[10.05148,53.67759],[10.06925,53.67955],[10.0604,53.68833],[10.071,53.69585],[10.0707,53.70996],[10.08198,53.72044],[10.11908,53.71324],[10.16939,53.73896],[10.19369,53.731],[10.1779,53.70992],[10.15694,53.70451],[10.15829,53.68944],[10.14342,53.68057],[10.14176,53.67744],[10.14473,53.67613],[10.14643,53.67588],[10.14955,53.67545],[10.17153,53.66869],[10.19885,53.64675],[10.18973,53.63838],[10.22202,53.63349],[10.18887,53.61316],[10.19236,53.59474],[10.20117,53.58392],[10.15169,53.57619],[10.15067,53.56973],[10.148,53.5639],[10.15308,53.56242],[10.15942,53.56091],[10.15189,53.5417],[10.15465,53.53657],[10.16874,53.5374],[10.16327,53.52185],[10.16611,53.52013],[10.16919,53.51965],[10.18951,53.51148],[10.21043,53.51996],[10.21828,53.49923],[10.2367,53.49629],[10.25008,53.47898],[10.26592,53.47079],[10.29043,53.45512],[10.30962,53.44309],[10.31223,53.45229],[10.32514,53.44979],[10.30799,53.43332],[10.25598,53.41623],[10.25089,53.41024],[10.24578,53.40261],[10.24155,53.39797],[10.16555,53.39933],[10.14506,53.41614],[10.10949,53.42649],[10.1068,53.42658],[10.07581,53.45436],[10.05155,53.46394],[10.03517,53.4469],[10.01449,53.44203],[10.02294,53.43228],[9.99754,53.42546],[9.98243,53.41478],[9.97873,53.4142],[9.9581,53.42708],[9.92953,53.42007],[9.92552,53.41924],[9.90667,53.41596],[9.92305,53.43631],[9.91704,53.44664],[9.90436,53.45707],[9.89493,53.45583],[9.86885,53.44462],[9.86211,53.42942],[9.84872,53.44111],[9.80663,53.46648],[9.80021,53.47372],[9.8028,53.49383],[9.78203,53.49236],[9.76885,53.5053],[9.77107,53.52185],[9.78105,53.51838],[9.77352,53.52796],[9.77232,53.54352]]],terms_url:"https://www.hamburg.de/bsw/landesbetrieb-geoinformation-und-vermessung",terms_text:"Freie und Hansestadt Hamburg, Landesbetrieb Geoinformation und Vermessung"},{id:"Hampshire-Aerial-FCIR",name:"Hampshire Aerial FCIR",type:"tms",template:"https://{switch:a,b,c}.hampshire.aerial.openstreetmap.org.uk/layer/gb_hampshire_aerial_fcir/{zoom}/{x}/{y}.png",endDate:"2014-01-01T00:00:00.000Z",startDate:"2013-01-01T00:00:00.000Z",zoomExtent:[8,20],polygon:[[[-1.31567,50.77809],[-1.49139,50.73027],[-1.57113,50.69041],[-1.68095,50.71748],[-1.69338,50.73484],[-1.69528,50.74065],[-1.68689,50.74999],[-1.71068,50.74812],[-1.7195,50.75261],[-1.746,50.74452],[-1.74845,50.75675],[-1.74287,50.76397],[-1.75101,50.77577],[-1.78525,50.76177],[-1.79911,50.77236],[-1.82256,50.77225],[-1.82678,50.78077],[-1.8225,50.79933],[-1.80732,50.80074],[-1.81566,50.80752],[-1.80889,50.81358],[-1.80579,50.83249],[-1.79816,50.83535],[-1.80649,50.84414],[-1.80988,50.86189],[-1.81378,50.85591],[-1.83052,50.85261],[-1.85271,50.85651],[-1.85655,50.86684],[-1.8492,50.87802],[-1.85082,50.89178],[-1.84077,50.90051],[-1.82693,50.89939],[-1.82006,50.90492],[-1.82151,50.91691],[-1.81689,50.92412],[-1.84114,50.92886],[-1.87446,50.91441],[-1.91129,50.9439],[-1.92339,50.95917],[-1.95751,50.97575],[-1.9591,50.99152],[-1.94907,50.98649],[-1.92879,51.00055],[-1.88709,51.0026],[-1.87393,51.0097],[-1.8717,50.99083],[-1.85433,51.00786],[-1.83567,51.01238],[-1.81502,50.9899],[-1.80031,50.99457],[-1.75184,50.98133],[-1.71927,50.98047],[-1.69142,50.95943],[-1.66829,50.95041],[-1.6526,50.95029],[-1.63536,50.96269],[-1.62397,50.95903],[-1.6089,50.97686],[-1.62172,50.98099],[-1.63115,50.99984],[-1.60984,51.01225],[-1.60173,51.01042],[-1.60787,51.01582],[-1.6057,51.02271],[-1.63542,51.03176],[-1.63858,51.04126],[-1.63107,51.07819],[-1.64025,51.09201],[-1.6306,51.10359],[-1.63408,51.11099],[-1.63067,51.11652],[-1.64109,51.12237],[-1.66525,51.12546],[-1.65724,51.15539],[-1.67474,51.177],[-1.67213,51.18708],[-1.69679,51.20233],[-1.69247,51.21617],[-1.65288,51.22301],[-1.63564,51.22019],[-1.62395,51.24136],[-1.61402,51.24467],[-1.60741,51.25513],[-1.57717,51.25863],[-1.54443,51.24826],[-1.5384,51.25085],[-1.53436,51.25919],[-1.54345,51.25957],[-1.54007,51.27602],[-1.54596,51.28095],[-1.53591,51.28978],[-1.52595,51.28975],[-1.53093,51.29948],[-1.53008,51.3111],[-1.53628,51.31596],[-1.52986,51.34057],[-1.51552,51.34219],[-1.49498,51.33228],[-1.43599,51.33861],[-1.44759,51.3464],[-1.4463,51.35699],[-1.43056,51.35941],[-1.41608,51.37517],[-1.34899,51.37045],[-1.31472,51.37627],[-1.27555,51.3707],[-1.25116,51.37511],[-1.24118,51.36938],[-1.22209,51.37271],[-1.17602,51.36102],[-1.14321,51.36028],[-1.11875,51.36156],[-1.12096,51.36859],[-1.11678,51.3767],[-1.08363,51.38712],[-1.04754,51.36122],[-0.9904,51.36619],[-0.97264,51.36297],[-0.92376,51.36937],[-0.87681,51.3555],[-0.86549,51.35947],[-0.82728,51.35574],[-0.81122,51.34418],[-0.78322,51.34084],[-0.76325,51.32721],[-0.76005,51.32013],[-0.74183,51.31112],[-0.72842,51.28238],[-0.72631,51.25653],[-0.73713,51.23126],[-0.74898,51.2277],[-0.77712,51.23901],[-0.80193,51.23628],[-0.80611,51.24056],[-0.82491,51.23137],[-0.82701,51.22315],[-0.84493,51.20998],[-0.82268,51.18268],[-0.83042,51.15022],[-0.81952,51.15047],[-0.80504,51.15847],[-0.79382,51.15491],[-0.78879,51.14141],[-0.77846,51.13664],[-0.77813,51.13063],[-0.76654,51.11946],[-0.74365,51.11491],[-0.74715,51.10131],[-0.75411,51.10116],[-0.75122,51.09547],[-0.75506,51.08987],[-0.75076,51.0852],[-0.7785,51.07715],[-0.78645,51.06467],[-0.79954,51.06078],[-0.82645,51.05881],[-0.83646,51.0664],[-0.84519,51.06052],[-0.8499,51.0436],[-0.89485,51.01978],[-0.89065,51.00194],[-0.90461,50.99327],[-0.91461,50.97806],[-0.91278,50.9708],[-0.93246,50.94278],[-0.92119,50.9232],[-0.93793,50.91615],[-0.95132,50.89178],[-0.92368,50.86513],[-0.92976,50.85365],[-0.92903,50.84245],[-0.94342,50.82191],[-0.9299,50.78445],[-0.93275,50.77435],[-0.95347,50.73682],[-1.31567,50.77809]]]},{id:"Hampshire-Aerial-RGB",name:"Hampshire Aerial RGB",type:"tms",template:"https://{switch:a,b,c}.hampshire.aerial.openstreetmap.org.uk/layer/gb_hampshire_aerial_rgb/{zoom}/{x}/{y}.png",endDate:"2013-01-01T00:00:00.000Z",startDate:"2013-01-01T00:00:00.000Z",zoomExtent:[8,20],polygon:[[[-1.31567,50.77809],[-1.49139,50.73027],[-1.57113,50.69041],[-1.68095,50.71748],[-1.69338,50.73484],[-1.69528,50.74065],[-1.68689,50.74999],[-1.71068,50.74812],[-1.7195,50.75261],[-1.746,50.74452],[-1.74845,50.75675],[-1.74287,50.76397],[-1.75101,50.77577],[-1.78525,50.76177],[-1.79911,50.77236],[-1.82256,50.77225],[-1.82678,50.78077],[-1.8225,50.79933],[-1.80732,50.80074],[-1.81566,50.80752],[-1.80889,50.81358],[-1.80579,50.83249],[-1.79816,50.83535],[-1.80649,50.84414],[-1.80988,50.86189],[-1.81378,50.85591],[-1.83052,50.85261],[-1.85271,50.85651],[-1.85655,50.86684],[-1.8492,50.87802],[-1.85082,50.89178],[-1.84077,50.90051],[-1.82693,50.89939],[-1.82006,50.90492],[-1.82151,50.91691],[-1.81689,50.92412],[-1.84114,50.92886],[-1.87446,50.91441],[-1.91129,50.9439],[-1.92339,50.95917],[-1.95751,50.97575],[-1.9591,50.99152],[-1.94907,50.98649],[-1.92879,51.00055],[-1.88709,51.0026],[-1.87393,51.0097],[-1.8717,50.99083],[-1.85433,51.00786],[-1.83567,51.01238],[-1.81502,50.9899],[-1.80031,50.99457],[-1.75184,50.98133],[-1.71927,50.98047],[-1.69142,50.95943],[-1.66829,50.95041],[-1.6526,50.95029],[-1.63536,50.96269],[-1.62397,50.95903],[-1.6089,50.97686],[-1.62172,50.98099],[-1.63115,50.99984],[-1.60984,51.01225],[-1.60173,51.01042],[-1.60787,51.01582],[-1.6057,51.02271],[-1.63542,51.03176],[-1.63858,51.04126],[-1.63107,51.07819],[-1.64025,51.09201],[-1.6306,51.10359],[-1.63408,51.11099],[-1.63067,51.11652],[-1.64109,51.12237],[-1.66525,51.12546],[-1.65724,51.15539],[-1.67474,51.177],[-1.67213,51.18708],[-1.69679,51.20233],[-1.69247,51.21617],[-1.65288,51.22301],[-1.63564,51.22019],[-1.62395,51.24136],[-1.61402,51.24467],[-1.60741,51.25513],[-1.57717,51.25863],[-1.54443,51.24826],[-1.5384,51.25085],[-1.53436,51.25919],[-1.54345,51.25957],[-1.54007,51.27602],[-1.54596,51.28095],[-1.53591,51.28978],[-1.52595,51.28975],[-1.53093,51.29948],[-1.53008,51.3111],[-1.53628,51.31596],[-1.52986,51.34057],[-1.51552,51.34219],[-1.49498,51.33228],[-1.43599,51.33861],[-1.44759,51.3464],[-1.4463,51.35699],[-1.43056,51.35941],[-1.41608,51.37517],[-1.34899,51.37045],[-1.31472,51.37627],[-1.27555,51.3707],[-1.25116,51.37511],[-1.24118,51.36938],[-1.22209,51.37271],[-1.17602,51.36102],[-1.14321,51.36028],[-1.11875,51.36156],[-1.12096,51.36859],[-1.11678,51.3767],[-1.08363,51.38712],[-1.04754,51.36122],[-0.9904,51.36619],[-0.97264,51.36297],[-0.92376,51.36937],[-0.87681,51.3555],[-0.86549,51.35947],[-0.82728,51.35574],[-0.81122,51.34418],[-0.78322,51.34084],[-0.76325,51.32721],[-0.76005,51.32013],[-0.74183,51.31112],[-0.72842,51.28238],[-0.72631,51.25653],[-0.73713,51.23126],[-0.74898,51.2277],[-0.77712,51.23901],[-0.80193,51.23628],[-0.80611,51.24056],[-0.82491,51.23137],[-0.82701,51.22315],[-0.84493,51.20998],[-0.82268,51.18268],[-0.83042,51.15022],[-0.81952,51.15047],[-0.80504,51.15847],[-0.79382,51.15491],[-0.78879,51.14141],[-0.77846,51.13664],[-0.77813,51.13063],[-0.76654,51.11946],[-0.74365,51.11491],[-0.74715,51.10131],[-0.75411,51.10116],[-0.75122,51.09547],[-0.75506,51.08987],[-0.75076,51.0852],[-0.7785,51.07715],[-0.78645,51.06467],[-0.79954,51.06078],[-0.82645,51.05881],[-0.83646,51.0664],[-0.84519,51.06052],[-0.8499,51.0436],[-0.89485,51.01978],[-0.89065,51.00194],[-0.90461,50.99327],[-0.91461,50.97806],[-0.91278,50.9708],[-0.93246,50.94278],[-0.92119,50.9232],[-0.93793,50.91615],[-0.95132,50.89178],[-0.92368,50.86513],[-0.92976,50.85365],[-0.92903,50.84245],[-0.94342,50.82191],[-0.9299,50.78445],[-0.93275,50.77435],[-0.95347,50.73682],[-1.31567,50.77809]]]},{id:"helsingborg-orto",name:"Helsingborg Orthophoto",type:"tms",template:"http://mapproxy.openstreetmap.se/tiles/1.0.0/hborg2016_EPSG3857/{zoom}/{x}/{y}.jpeg",zoomExtent:[5,20],polygon:[[[12.74345,55.94997],[12.93777,55.90804],[13.00369,55.96842],[12.79083,56.25022],[12.56698,56.1356],[12.74345,55.94997]]],terms_url:"https://helsingborg.opendatasoft.com/",terms_text:"© Helsingborg municipality",best:true,description:"Orthophotos from the municipality of Helsingborg 2016, public domain",icon:"https://upload.wikimedia.org/wikipedia/commons/thumb/1/18/Helsingborg_vapen.svg/198px-Helsingborg_vapen.svg.png"},{id:"hri-orto",name:"Helsinki region orthophoto",type:"wms",template:"https://kartta.hsy.fi/geoserver/ows?SERVICE=WMS&FORMAT=image/jpeg&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=taustakartat_ja_aluejaot:Ortoilmakuva_2017&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",zoomExtent:[0,19],polygon:[[[24.26948,59.8593],[24.26674,60.22549],[24.55307,60.36703],[24.50363,60.49038],[24.76387,60.60079],[25.00625,60.54175],[24.90051,60.38197],[24.9884,60.35073],[25.06943,60.44096],[25.17517,60.45248],[25.18066,60.34122],[25.27954,60.2943],[25.19577,60.08813],[24.26948,59.8593]]],terms_url:"https://hri.fi/data/en_GB/dataset/paakaupunkiseudun-ortokuva-2017",terms_text:"© Espoon, Helsingin ja Vantaan kaupungit, Kirkkonummen ja Nurmijärven kunnat sekä HSL ja HSY",best:true,description:"Ortophotos from the municipalities of Espoo, Helsinki, Vantaa, Kirkkonummi and Nurmijärvi + HSL and HSY",icon:"https://raw.githubusercontent.com/osmlab/editor-layer-index/gh-pages/sources/europe/fi/hri_logo.png"},{id:"hu-hillshade",name:"Hillshade Hungary",type:"tms",template:"https://{switch:a,b,c}.map.turistautak.hu/tiles/shading/{zoom}/{x}/{y}.png",zoomExtent:[0,18],polygon:[[[15,45],[24,45],[24,49],[15,49],[15,45]]],terms_text:"SRTM",overlay:true},{id:"IBGE_DF_Addresses",name:"IBGE Distrito Federal",type:"tms",template:"https://{switch:a,b,c,d}.tiles.mapbox.com/styles/v1/wille/cirnnxni1000jg8nfppc8g7pm/tiles/256/{zoom}/{x}/{y}?access_token=pk.eyJ1Ijoid2lsbGUiLCJhIjoicFNVWk5VWSJ9.hluCd0YGvYHNlFi_utWe2g",zoomExtent:[0,20],polygon:[[[-48.2444,-16.0508],[-48.2444,-15.5005],[-47.5695,-15.5005],[-47.5695,-16.0508],[-48.2444,-16.0508]]],terms_text:"IBGE",description:"Addresses data from IBGE",overlay:true},{id:"IBGE_Setores_Rurais",name:"IBGE Mapa de Setores Rurais",type:"tms",template:"https://{switch:a,b,c,d}.tiles.mapbox.com/v4/tmpsantos.i00mo1kj/{zoom}/{x}/{y}.png?access_token=pk.eyJ1Ijoib3BlbnN0cmVldG1hcCIsImEiOiJjaml5MjVyb3MwMWV0M3hxYmUzdGdwbzE4In0.q548FjhsSJzvXsGlPsFxAQ",zoomExtent:[0,14],polygon:[[[-69.94793,-4.23168],[-69.45659,-1.49119],[-69.3973,-1.36508],[-69.42989,-1.22173],[-69.39523,-1.12555],[-69.44292,-1.03351],[-69.41861,-0.99827],[-69.528,-0.92514],[-69.52577,-0.86807],[-69.62491,-0.74667],[-69.56179,-0.63692],[-69.60783,-0.5008],[-69.8446,-0.33732],[-69.92054,-0.32573],[-70.04323,-0.18998],[-70.04302,0.56359],[-69.80272,0.57162],[-69.6711,0.66759],[-69.60529,0.61328],[-69.59701,0.6542],[-69.48002,0.73577],[-69.35277,0.61416],[-69.28914,0.64997],[-69.29484,0.60389],[-69.19975,0.60591],[-69.19425,0.64982],[-69.11563,0.64484],[-69.19001,0.74056],[-69.14881,0.76751],[-69.13576,0.87204],[-69.18846,0.91324],[-69.1646,0.94156],[-69.21679,0.97245],[-69.19773,0.99974],[-69.24494,1.05655],[-69.37641,1.08794],[-69.42312,1.04265],[-69.60989,1.09826],[-69.67718,1.06994],[-69.70963,1.11817],[-69.84266,1.07272],[-69.83972,1.71893],[-69.78236,1.69244],[-69.53464,1.77691],[-69.39109,1.72935],[-68.1645,1.72945],[-68.19207,1.7797],[-68.23954,1.77044],[-68.22688,1.82918],[-68.28555,1.83084],[-68.19583,2.03479],[-68.18033,1.9767],[-68.14417,1.97854],[-68.09043,1.89774],[-67.90162,1.81165],[-67.76942,2.00924],[-67.55095,2.04769],[-67.49519,2.16312],[-67.39404,2.22894],[-67.32672,2.06387],[-67.33083,1.94158],[-67.22831,1.84127],[-67.15384,1.8315],[-67.15922,1.67504],[-67.08017,1.38546],[-67.13923,1.32002],[-67.08675,1.16704],[-66.85119,1.22896],[-66.31032,0.74494],[-66.19737,0.78161],[-66.07783,0.76174],[-66.07024,0.8123],[-65.96712,0.81511],[-65.88369,0.94159],[-65.77261,0.95859],[-65.7421,1.00125],[-65.58894,1.00471],[-65.49624,0.87415],[-65.60623,0.70748],[-65.54116,0.64881],[-65.44499,0.68921],[-65.39213,0.75692],[-65.41198,0.82415],[-65.32734,0.93596],[-65.21302,0.90282],[-65.1749,0.94131],[-65.15831,1.1246],[-65.07232,1.15303],[-65.06317,1.11205],[-65.01361,1.10905],[-64.97445,1.20288],[-64.90439,1.25153],[-64.86966,1.22713],[-64.80053,1.31527],[-64.74446,1.22569],[-64.5789,1.34041],[-64.52608,1.44322],[-64.43586,1.47006],[-64.3939,1.52901],[-64.35111,1.52921],[-64.34777,1.49508],[-64.41019,1.40301],[-64.33791,1.36134],[-64.3136,1.45617],[-64.19707,1.52071],[-64.0735,1.64902],[-64.05781,1.92899],[-63.97219,1.99194],[-63.83555,1.96644],[-63.71155,2.04645],[-63.66501,2.01861],[-63.6268,2.11222],[-63.56474,2.13571],[-63.44059,2.126],[-63.36742,2.26864],[-63.37088,2.41121],[-63.42123,2.45102],[-63.46036,2.39684],[-63.56398,2.44573],[-63.76805,2.43994],[-63.84358,2.4916],[-64.01914,2.46135],[-64.0573,2.49752],[-63.98033,2.7237],[-64.07709,2.87262],[-64.07156,2.92142],[-64.12349,2.99048],[-64.15754,2.98243],[-64.14592,3.03459],[-64.22642,3.12356],[-64.19795,3.20121],[-64.2444,3.43036],[-64.17437,3.56841],[-64.281,3.70928],[-64.54357,3.85713],[-64.72239,4.11775],[-64.80203,4.17422],[-64.81123,4.27048],[-64.69522,4.25323],[-64.623,4.135],[-64.5565,4.10529],[-64.164,4.127],[-63.964,3.868],[-63.928,3.925],[-63.85,3.95],[-63.682,3.908],[-63.676,4.019],[-63.591,3.886],[-63.497,3.84],[-63.489,3.874],[-63.434,3.865],[-63.428,3.977],[-63.204,3.952],[-63.226,3.836],[-63.103,3.794],[-63.059,3.748],[-63.081,3.694],[-62.96,3.608],[-62.835,3.739],[-62.743,3.674],[-62.729,3.805],[-62.788,3.894],[-62.753,4.032],[-62.555,4.019],[-62.552,4.109],[-62.437,4.183],[-62.14308,4.07768],[-62.071,4.126],[-62.076,4.154],[-61.982,4.181],[-61.93175,4.12009],[-61.92213,4.16126],[-61.824,4.164],[-61.802,4.229],[-61.724,4.27],[-61.56,4.252],[-61.508,4.322],[-61.513,4.406],[-61.288,4.458],[-61.323,4.535],[-61.217,4.536],[-61.14559,4.48016],[-61.095,4.522],[-60.994,4.519],[-60.932,4.587],[-60.949,4.653],[-60.899,4.717],[-60.751,4.756],[-60.591,4.927],[-60.661,5.164],[-60.73197,5.21203],[-60.434,5.182],[-60.20825,5.28346],[-60.172,5.227],[-60.135,5.249],[-60.094,5.14],[-59.96984,5.06334],[-60.02524,4.7065],[-60.0705,4.61688],[-60.15725,4.57247],[-60.16114,4.51773],[-59.79503,4.46554],[-59.66948,4.37629],[-59.7319,4.28587],[-59.73069,4.18076],[-59.61818,4.13166],[-59.65406,4.06943],[-59.58417,3.96851],[-59.5153,3.94493],[-59.59279,3.88538],[-59.59631,3.79386],[-59.66555,3.78126],[-59.66842,3.70277],[-59.86728,3.57776],[-59.80205,3.50156],[-59.8408,3.43174],[-59.80488,3.35695],[-59.907,3.212],[-59.98944,2.88185],[-59.99,2.686],[-59.895,2.482],[-59.89872,2.36245],[-59.72315,2.27614],[-59.751,1.859],[-59.677,1.839],[-59.663,1.871],[-59.69,1.757],[-59.539,1.723],[-59.381,1.507],[-59.329,1.514],[-59.327,1.464],[-59.284,1.45],[-59.253,1.389],[-58.978,1.302],[-58.918,1.317],[-58.886,1.261],[-58.912,1.239],[-58.82512,1.17127],[-58.73956,1.1999],[-58.69456,1.29732],[-58.49622,1.26796],[-58.45787,1.37145],[-58.50511,1.40317],[-58.50873,1.46295],[-58.38559,1.46999],[-58.39472,1.52651],[-58.32237,1.59702],[-58.236,1.54669],[-58.16064,1.56011],[-58.12942,1.4989],[-58.00423,1.50303],[-57.99009,1.65844],[-57.85206,1.66782],[-57.77431,1.72973],[-57.70509,1.73093],[-57.65042,1.68237],[-57.5376,1.7005],[-57.50187,1.78609],[-57.43776,1.82681],[-57.43343,1.90598],[-57.36768,1.92372],[-57.36912,1.95638],[-57.30712,1.99665],[-57.22923,1.93759],[-57.08668,2.02644],[-57.01421,1.91489],[-56.91971,1.93036],[-56.79793,1.85336],[-56.72096,1.92582],[-56.62145,1.94588],[-56.57976,1.90588],[-56.45126,1.95614],[-56.24404,1.87808],[-56.1709,1.90048],[-56.11762,1.85097],[-55.95638,1.84509],[-55.90385,1.88803],[-55.93635,1.98647],[-55.9031,2.04108],[-56.00307,2.1676],[-56.05505,2.18464],[-56.04288,2.22778],[-56.13887,2.26574],[-56.09012,2.37228],[-56.02181,2.34247],[-55.97052,2.52931],[-55.76663,2.45524],[-55.71028,2.39917],[-55.49971,2.44324],[-55.38533,2.41836],[-55.32019,2.51537],[-55.23474,2.50338],[-55.1234,2.56762],[-55.10302,2.52564],[-54.95424,2.58359],[-54.86846,2.43989],[-54.68917,2.45389],[-54.68861,2.32472],[-54.54667,2.31833],[-54.53778,2.26556],[-54.46861,2.21306],[-54.24917,2.14667],[-54.18056,2.1725],[-54.11083,2.11222],[-54.06139,2.19167],[-53.94083,2.21917],[-53.93194,2.27194],[-53.88667,2.26778],[-53.745,2.37389],[-53.73389,2.31222],[-53.52972,2.24917],[-53.45861,2.2575],[-53.32833,2.35333],[-53.21667,2.25333],[-53.27899,2.18603],[-53.11861,2.2225],[-52.99472,2.17528],[-52.90972,2.19583],[-52.84722,2.28556],[-52.67528,2.37389],[-52.59444,2.47389],[-52.54028,2.57028],[-52.56417,2.63944],[-52.43944,2.87778],[-52.39583,2.90222],[-52.33187,3.16938],[-52.21472,3.26833],[-51.97104,3.70696],[-51.92148,3.72422],[-51.922,3.7792],[-51.79731,3.88888],[-51.77783,3.97406],[-51.65867,4.05276],[-51.61325,4.17437],[-51.63716,4.50834],[-51.49427,4.67426],[-51.11466,4.42286],[-50.94232,4.20165],[-50.85475,3.92491],[-50.85507,3.45573],[-50.75331,2.94057],[-50.29908,2.33079],[-49.73896,1.79143],[-48.23746,-0.07449],[-44.84728,-1.07246],[-43.54602,-2.04705],[-43.24389,-2.12403],[-42.78189,-2.33053],[-41.78084,-2.51859],[-41.5085,-2.68486],[-40.66365,-2.63829],[-40.50396,-2.57531],[-39.8907,-2.65328],[-39.15187,-3.04444],[-38.57151,-3.48047],[-38.34306,-3.54434],[-38.21421,-3.74103],[-38.12555,-3.80544],[-37.90182,-4.07265],[-37.77934,-4.18046],[-37.63401,-4.24454],[-37.51218,-4.41535],[-37.22122,-4.51045],[-37.07874,-4.71355],[-36.91716,-4.71372],[-36.62299,-4.85815],[-36.18969,-4.88505],[-35.93627,-4.83327],[-35.56471,-4.90758],[-35.33677,-4.99239],[-35.17659,-5.12497],[-34.79469,-6.33583],[-34.71587,-6.74615],[-34.62306,-6.90323],[-34.59953,-7.11133],[-34.64374,-7.98735],[-34.81497,-8.62472],[-35.0253,-9.13761],[-35.55848,-9.81261],[-35.69663,-9.90026],[-35.96401,-10.31281],[-36.06155,-10.37447],[-36.26639,-10.64593],[-36.61764,-10.81082],[-36.78725,-10.95151],[-36.99511,-11.29602],[-37.11368,-11.41261],[-37.46002,-12.10275],[-37.89668,-12.75844],[-38.22146,-13.09717],[-38.61146,-13.26537],[-38.85337,-14.65508],[-38.74388,-15.60089],[-38.66456,-15.74741],[-38.64697,-15.88327],[-38.8013,-16.24838],[-38.92933,-16.80775],[-38.53193,-17.80026],[-38.49171,-18.0046],[-38.53661,-18.09683],[-38.67053,-18.16855],[-39.35288,-18.10892],[-39.4675,-18.30359],[-39.54529,-18.78548],[-39.49227,-19.40134],[-39.63477,-19.74403],[-39.86353,-19.88681],[-40.17827,-20.75426],[-40.81442,-21.67672],[-40.76948,-21.87786],[-40.81442,-22.09702],[-41.5086,-22.52638],[-41.59666,-22.83627],[-41.79292,-23.08823],[-41.91484,-23.18527],[-43.19603,-23.26703],[-44.07735,-23.40501],[-45.13508,-24.12014],[-46.61368,-24.67512],[-47.85376,-25.47012],[-48.2801,-26.23036],[-48.34897,-26.75081],[-48.11076,-27.28208],[-48.21148,-27.85592],[-48.40713,-28.43255],[-48.68615,-28.76016],[-48.9156,-28.86305],[-49.1579,-29.02871],[-49.52748,-29.42005],[-49.82565,-29.86559],[-50.17344,-30.64282],[-50.60441,-31.24135],[-51.18785,-31.77646],[-51.74211,-32.10539],[-51.89236,-32.29596],[-52.06117,-32.38504],[-52.27087,-32.92102],[-52.45986,-33.25369],[-52.61505,-33.42291],[-53.18109,-33.86891],[-53.43053,-33.73947],[-53.43951,-33.69347],[-53.53228,-33.6888],[-53.51819,-33.15342],[-53.44438,-33.05296],[-53.24468,-32.93489],[-53.31008,-32.91875],[-53.29454,-32.89931],[-53.18496,-32.85043],[-53.14569,-32.79202],[-53.0858,-32.78835],[-53.07558,-32.74088],[-53.24992,-32.6041],[-53.39137,-32.58573],[-53.46423,-32.48446],[-53.58321,-32.45192],[-53.74599,-32.07848],[-53.83375,-32.05524],[-53.84978,-32.00064],[-53.96073,-31.95532],[-53.96972,-31.91765],[-54.10019,-31.92825],[-54.4549,-31.65295],[-54.4528,-31.59959],[-54.58676,-31.45656],[-54.8367,-31.442],[-54.88623,-31.3773],[-54.94087,-31.38068],[-55.00723,-31.26692],[-55.07446,-31.33216],[-55.24003,-31.26062],[-55.29118,-31.14226],[-55.34037,-31.13144],[-55.34981,-31.03922],[-55.42306,-31.01823],[-55.57742,-30.83309],[-55.65834,-30.864],[-55.66621,-30.95395],[-55.723,-30.943],[-55.727,-30.979],[-55.882,-31.077],[-56.00989,-31.08267],[-56.02241,-30.78565],[-56.12508,-30.73871],[-56.17074,-30.61517],[-56.26095,-30.58509],[-56.29193,-30.51967],[-56.38177,-30.49956],[-56.46126,-30.38486],[-56.54706,-30.35946],[-56.54115,-30.31291],[-56.6187,-30.30054],[-56.64628,-30.20346],[-56.77662,-30.1633],[-56.80777,-30.10301],[-57.07113,-30.08671],[-57.22081,-30.28928],[-57.31303,-30.25785],[-57.39229,-30.30474],[-57.46574,-30.26589],[-57.52431,-30.28569],[-57.56087,-30.21134],[-57.64744,-30.19483],[-57.48047,-30.12315],[-57.33713,-29.99284],[-57.294,-29.831],[-57.121,-29.765],[-56.89888,-29.53179],[-56.81905,-29.48816],[-56.76618,-29.37768],[-56.70164,-29.35913],[-56.59315,-29.12516],[-56.418,-29.075],[-56.40775,-28.9748],[-56.29995,-28.89614],[-56.29652,-28.8027],[-56.17858,-28.75922],[-56.00984,-28.60718],[-56.01249,-28.50873],[-55.88357,-28.47923],[-55.87739,-28.36159],[-55.75157,-28.37095],[-55.69433,-28.42204],[-55.67047,-28.33218],[-55.77415,-28.27414],[-55.7757,-28.24481],[-55.63167,-28.17719],[-55.60747,-28.11604],[-55.55957,-28.16523],[-55.4952,-28.07682],[-55.44611,-28.09787],[-55.368,-28.029],[-55.38299,-27.97948],[-55.343,-27.972],[-55.32706,-27.92664],[-55.26574,-27.92969],[-55.196,-27.856],[-55.133,-27.897],[-55.106,-27.846],[-55.035,-27.858],[-55.081,-27.779],[-54.936,-27.772],[-54.90617,-27.63871],[-54.85,-27.624],[-54.814,-27.533],[-54.775,-27.586],[-54.67926,-27.57394],[-54.67709,-27.508],[-54.621,-27.541],[-54.574,-27.453],[-54.5246,-27.5059],[-54.444,-27.472],[-54.47081,-27.42674],[-54.41,-27.405],[-54.35466,-27.46528],[-54.34067,-27.40311],[-54.28484,-27.44819],[-54.261,-27.397],[-54.21736,-27.38603],[-54.172,-27.254],[-54.15619,-27.29619],[-54.08872,-27.30149],[-54.01026,-27.19978],[-53.96219,-27.19698],[-53.95195,-27.15169],[-53.79879,-27.14629],[-53.80233,-27.04028],[-53.76087,-27.06543],[-53.78585,-27.02674],[-53.7473,-27.03218],[-53.7092,-26.93414],[-53.67125,-26.94222],[-53.69684,-26.86015],[-53.66059,-26.85814],[-53.75814,-26.72045],[-53.7205,-26.65099],[-53.75864,-26.64113],[-53.63739,-26.24968],[-53.742,-26.108],[-53.73409,-26.04333],[-53.83619,-25.97166],[-53.82214,-25.79377],[-53.89113,-25.62286],[-53.94895,-25.6117],[-53.95638,-25.64628],[-54.01,-25.567],[-54.07592,-25.55766],[-54.098,-25.619],[-54.099,-25.495],[-54.206,-25.541],[-54.178,-25.584],[-54.23,-25.562],[-54.25,-25.597],[-54.28,-25.556],[-54.38395,-25.59747],[-54.43288,-25.69756],[-54.4927,-25.6181],[-54.59354,-25.59275],[-54.61941,-25.45312],[-54.4295,-25.15915],[-54.43548,-24.94769],[-54.32437,-24.66059],[-54.32714,-24.47073],[-54.25877,-24.36377],[-54.34537,-24.14705],[-54.28223,-24.07336],[-54.43984,-23.90446],[-54.66978,-23.81262],[-54.70533,-23.86452],[-54.89,-23.898],[-54.924,-23.959],[-55.06223,-23.99335],[-55.107,-23.961],[-55.22907,-24.01383],[-55.30415,-23.96504],[-55.34542,-23.99458],[-55.41423,-23.9645],[-55.44167,-23.70084],[-55.47306,-23.64834],[-55.53989,-23.625],[-55.52356,-23.19733],[-55.54199,-23.1561],[-55.59635,-23.14993],[-55.66578,-22.85274],[-55.61432,-22.65521],[-55.72364,-22.55166],[-55.74302,-22.39266],[-55.78939,-22.3846],[-55.84304,-22.28725],[-56.20983,-22.27805],[-56.36485,-22.16949],[-56.39404,-22.07434],[-56.50711,-22.09561],[-56.63705,-22.26341],[-56.70344,-22.21693],[-56.72026,-22.26479],[-56.79344,-22.24238],[-56.84285,-22.30155],[-56.88343,-22.24755],[-56.9967,-22.22246],[-57.3744,-22.23204],[-57.5804,-22.17534],[-57.6106,-22.09462],[-57.70751,-22.09111],[-57.80183,-22.15072],[-57.99384,-22.09023],[-58.00946,-22.04038],[-57.91281,-21.88266],[-57.96603,-21.85045],[-57.90866,-21.77355],[-57.94714,-21.74413],[-57.88329,-21.68903],[-57.93436,-21.65037],[-57.91387,-21.59021],[-57.96795,-21.52432],[-57.8535,-21.33109],[-57.92019,-21.27655],[-57.85066,-21.22407],[-57.86834,-21.04417],[-57.81919,-20.94066],[-57.92836,-20.90036],[-57.8552,-20.83403],[-57.89863,-20.78872],[-57.96183,-20.7916],[-57.93478,-20.74565],[-57.86732,-20.73265],[-57.92414,-20.66392],[-57.98848,-20.69879],[-57.99847,-20.43551],[-58.09339,-20.35554],[-58.09596,-20.25445],[-58.16216,-20.25953],[-58.12152,-20.19246],[-58.16932,-20.1694],[-57.95347,-20.02094],[-57.90248,-20.04207],[-57.85796,-19.9703],[-58.131,-19.758],[-57.784,-19.033],[-57.694,-19.011],[-57.719,-18.899],[-57.766,-18.899],[-57.557,-18.24],[-57.453,-18.231],[-57.574,-18.131],[-57.72302,-17.83074],[-57.68472,-17.8306],[-57.70991,-17.72702],[-57.783,-17.639],[-57.73696,-17.5583],[-57.883,-17.449],[-57.996,-17.515],[-58.06,-17.45],[-58.116,-17.451],[-58.151,-17.384],[-58.263,-17.344],[-58.396,-17.181],[-58.423,-16.989],[-58.474,-16.935],[-58.47,-16.703],[-58.436,-16.592],[-58.333,-16.49],[-58.32227,-16.26559],[-58.388,-16.261],[-58.43059,-16.32264],[-60.17335,-16.26672],[-60.238,-15.473],[-60.57543,-15.09677],[-60.244,-15.096],[-60.272,-14.62],[-60.321,-14.608],[-60.492,-14.188],[-60.479,-14.097],[-60.38066,-13.9888],[-60.45062,-13.9364],[-60.45599,-13.85422],[-60.49068,-13.85782],[-60.46776,-13.79446],[-60.76755,-13.68329],[-60.87678,-13.62149],[-60.91857,-13.54334],[-61.0056,-13.552],[-61.0129,-13.48925],[-61.0938,-13.49081],[-61.10314,-13.53056],[-61.18155,-13.50557],[-61.19236,-13.53695],[-61.29954,-13.47718],[-61.46527,-13.55427],[-61.57927,-13.48711],[-61.852,-13.538],[-61.892,-13.431],[-61.96968,-13.40759],[-61.97592,-13.36695],[-62.11498,-13.25932],[-62.115,-13.163],[-62.15254,-13.15993],[-62.16703,-13.11346],[-62.19,-13.153],[-62.214,-13.111],[-62.27269,-13.15687],[-62.39178,-13.13471],[-62.453,-13.064],[-62.612,-13.041],[-62.65,-12.965],[-62.729,-13.02],[-62.779,-13.009],[-62.89672,-12.8539],[-63.01134,-12.83602],[-63.08186,-12.72323],[-63.06163,-12.68584],[-63.15726,-12.6138],[-63.24621,-12.66222],[-63.23713,-12.69043],[-63.30125,-12.68138],[-63.44052,-12.608],[-63.43627,-12.56526],[-63.50641,-12.56562],[-63.55295,-12.50598],[-63.7848,-12.42871],[-63.88957,-12.44745],[-63.89949,-12.50204],[-63.95144,-12.53179],[-64.13464,-12.47732],[-64.16781,-12.51503],[-64.17504,-12.46675],[-64.22945,-12.45419],[-64.29018,-12.50313],[-64.29452,-12.4582],[-64.41057,-12.44436],[-64.51217,-12.3551],[-64.51256,-12.22562],[-64.70406,-12.1827],[-64.70719,-12.08684],[-64.75486,-12.15762],[-64.7688,-12.09356],[-64.83747,-12.11786],[-64.80954,-12.05633],[-64.84077,-12.01027],[-65.03548,-11.99408],[-65.01398,-11.90303],[-65.0727,-11.86587],[-65.08672,-11.7082],[-65.18953,-11.72353],[-65.18216,-11.75609],[-65.2593,-11.71053],[-65.21178,-11.52857],[-65.3074,-11.49957],[-65.33276,-11.33986],[-65.29053,-11.32275],[-65.34347,-11.3082],[-65.35834,-11.26834],[-65.35938,-11.22067],[-65.31294,-11.19578],[-65.35387,-11.18419],[-65.36177,-11.14031],[-65.28269,-11.09009],[-65.30071,-11.03142],[-65.25053,-10.98506],[-65.27476,-10.87302],[-65.35376,-10.78881],[-65.34667,-10.68155],[-65.40569,-10.63935],[-65.43011,-10.48505],[-65.288,-10.219],[-65.333,-9.965],[-65.28588,-9.84413],[-65.39313,-9.68683],[-65.44394,-9.66957],[-65.4883,-9.71015],[-65.55611,-9.84498],[-65.627,-9.83804],[-65.66963,-9.78129],[-65.71023,-9.80857],[-65.68395,-9.74992],[-65.7432,-9.78296],[-65.77013,-9.73442],[-65.79437,-9.79295],[-65.79962,-9.75663],[-65.86532,-9.79533],[-65.87184,-9.75307],[-65.91976,-9.75314],[-65.98222,-9.81011],[-66.151,-9.785],[-66.426,-9.899],[-66.435,-9.866],[-66.61995,-9.89353],[-66.63701,-9.94983],[-66.8751,-10.08268],[-66.9528,-10.18886],[-66.99683,-10.20017],[-67.01537,-10.25919],[-67.17745,-10.33923],[-67.31545,-10.31932],[-67.31155,-10.37716],[-67.40717,-10.37386],[-67.44361,-10.45492],[-67.57925,-10.5028],[-67.64028,-10.59807],[-67.67631,-10.60484],[-67.70825,-10.71083],[-67.86386,-10.64067],[-68.03289,-10.65486],[-68.10456,-10.71426],[-68.10333,-10.77541],[-68.27819,-10.98926],[-68.71576,-11.14483],[-68.75767,-11.00079],[-68.9118,-11.02192],[-69.41453,-10.92575],[-69.73653,-10.97445],[-69.76903,-10.92972],[-69.93442,-10.9219],[-70.15869,-11.04096],[-70.30672,-11.06983],[-70.43675,-11.03923],[-70.53033,-10.93465],[-70.62103,-10.99982],[-70.62338,-9.82054],[-70.53663,-9.76584],[-70.59972,-9.56264],[-70.55282,-9.57093],[-70.56894,-9.53127],[-70.50506,-9.50557],[-70.49665,-9.42489],[-70.59581,-9.4425],[-70.6632,-9.52601],[-70.75067,-9.56043],[-70.79332,-9.63846],[-70.96337,-9.74891],[-70.99391,-9.81721],[-71.13974,-9.85702],[-71.22052,-9.96968],[-72.1804,-9.99967],[-72.15136,-9.79742],[-72.26296,-9.75085],[-72.25282,-9.61633],[-72.28821,-9.60316],[-72.2829,-9.53995],[-72.35688,-9.4946],[-72.51954,-9.49128],[-72.71676,-9.4122],[-73.2038,-9.40715],[-73.07352,-9.23461],[-73.0093,-9.22236],[-73.02612,-9.17786],[-72.9582,-9.14302],[-72.94091,-8.98494],[-72.99931,-8.91778],[-73.05901,-8.90561],[-73.14992,-8.6839],[-73.20907,-8.6857],[-73.28745,-8.61948],[-73.3055,-8.47197],[-73.38956,-8.46878],[-73.41286,-8.41099],[-73.53744,-8.34587],[-73.62739,-8.02187],[-73.73175,-7.9684],[-73.7725,-7.90237],[-73.76164,-7.85803],[-73.69706,-7.86527],[-73.6843,-7.77644],[-73.82217,-7.71788],[-73.99094,-7.53635],[-73.948,-7.52661],[-73.91981,-7.46568],[-73.96394,-7.34764],[-73.87014,-7.37882],[-73.7003,-7.30429],[-73.79842,-7.11306],[-73.71046,-6.84019],[-73.53639,-6.6834],[-73.39115,-6.64193],[-73.35281,-6.59327],[-73.22741,-6.58884],[-73.18797,-6.52302],[-73.13523,-6.51046],[-73.10473,-6.40666],[-73.24664,-6.14963],[-73.23821,-6.04399],[-73.1868,-6.00512],[-73.15207,-5.86796],[-73.05303,-5.79517],[-72.95912,-5.65689],[-72.95888,-5.46613],[-72.86052,-5.27117],[-72.88725,-5.16307],[-72.73986,-5.08859],[-72.72765,-5.05199],[-72.6212,-5.0518],[-72.598,-4.98386],[-72.38202,-4.87296],[-72.36895,-4.80387],[-72.12601,-4.73454],[-72.04335,-4.62384],[-72.00689,-4.64622],[-71.99464,-4.60996],[-71.94743,-4.60877],[-71.91909,-4.5298],[-71.88549,-4.53803],[-71.9073,-4.51644],[-71.76637,-4.50446],[-71.75109,-4.46887],[-71.70817,-4.51165],[-71.65479,-4.47246],[-71.65032,-4.50395],[-71.61548,-4.4687],[-71.6335,-4.51524],[-71.59625,-4.52928],[-71.53703,-4.46442],[-71.49428,-4.48701],[-71.50716,-4.43909],[-71.43438,-4.42882],[-71.42562,-4.47058],[-71.35026,-4.42728],[-71.30752,-4.46288],[-71.32091,-4.42009],[-71.27782,-4.44217],[-71.26975,-4.385],[-71.20263,-4.37987],[-71.19422,-4.42471],[-71.14478,-4.38158],[-71.11491,-4.41119],[-71.10616,-4.37764],[-70.99389,-4.38654],[-70.99595,-4.34632],[-70.9357,-4.38432],[-70.84483,-4.27905],[-70.86447,-4.25245],[-70.81677,-4.23005],[-70.8458,-4.21872],[-70.75901,-4.15944],[-70.68147,-4.20791],[-70.64256,-4.12805],[-70.62521,-4.19151],[-70.56118,-4.1775],[-70.57357,-4.21169],[-70.54796,-4.13671],[-70.51036,-4.14824],[-70.50417,-4.20098],[-70.48535,-4.16132],[-70.43435,-4.16266],[-70.43146,-4.13217],[-70.33892,-4.17997],[-70.32281,-4.14206],[-70.28769,-4.16555],[-70.29141,-4.28709],[-70.21457,-4.29749],[-70.19194,-4.36179],[-70.15508,-4.27308],[-70.11749,-4.28585],[-70.10881,-4.25454],[-70.04189,-4.29409],[-70.07948,-4.31428],[-70.02826,-4.3703],[-69.99182,-4.37482],[-69.94793,-4.23168]],[[-34.00035,-3.76654],[-34.01797,-3.84985],[-34.00664,-3.91809],[-33.98608,-3.95952],[-33.95923,-3.99217],[-33.8921,-4.03653],[-33.81658,-4.05077],[-33.72931,-4.03151],[-33.66638,-3.9838],[-33.62736,-3.9185],[-33.61519,-3.84985],[-33.63239,-3.76864],[-33.68693,-3.69537],[-33.74987,-3.65978],[-33.81658,-3.6489],[-33.89336,-3.66397],[-33.96007,-3.70877],[-34.00035,-3.76654]],[[-32.5538,-4.00884],[-32.59937,-3.9531],[-32.64061,-3.87309],[-32.61755,-3.73712],[-32.58338,-3.70527],[-32.54228,-3.65606],[-32.4592,-3.63029],[-32.35174,-3.63887],[-32.30049,-3.67684],[-32.24749,-3.75266],[-32.23155,-3.81889],[-32.2357,-3.90247],[-32.30194,-3.9883],[-32.42898,-4.0384],[-32.5538,-4.00884]],[[-29.50321,0.79391],[-29.54097,0.8689],[-29.54727,0.92553],[-29.52367,0.99422],[-29.48958,1.06134],[-29.43136,1.10224],[-29.35899,1.1206],[-29.29238,1.11378],[-29.22158,1.0776],[-29.16285,1.00314],[-29.14501,0.92605],[-29.14764,0.88358],[-29.17176,0.8196],[-29.24885,0.74357],[-29.29448,0.72521],[-29.36371,0.71892],[-29.43556,0.73937],[-29.50321,0.79391]],[[-29.09537,-20.42649],[-29.19756,-20.33509],[-29.3343,-20.28932],[-29.46741,-20.3288],[-29.54604,-20.42958],[-29.55396,-20.52706],[-29.51696,-20.62613],[-29.40995,-20.68955],[-29.27599,-20.72578],[-29.15968,-20.66209],[-29.07188,-20.57088],[-28.9712,-20.64769],[-28.83286,-20.69814],[-28.67968,-20.62099],[-28.63549,-20.49284],[-28.63412,-20.47146],[-28.7431,-20.30094],[-28.8683,-20.27288],[-29.0031,-20.32416],[-29.09537,-20.42649]]],terms_text:"IBGE",icon:"https://osmlab.github.io/editor-layer-index/sources/south-america/br/IBGE_Setores_Rurais.png"},{id:"IBGE_Setores_Urbanos",name:"IBGE Mapa de Setores Urbanos",type:"tms",template:"https://{switch:a,b,c,d}.tiles.mapbox.com/v4/tmpsantos.hgda0m6h/{zoom}/{x}/{y}.png?access_token=pk.eyJ1Ijoib3BlbnN0cmVldG1hcCIsImEiOiJjaml5MjVyb3MwMWV0M3hxYmUzdGdwbzE4In0.q548FjhsSJzvXsGlPsFxAQ",zoomExtent:[0,19],polygon:[[[-69.94793,-4.23168],[-69.45659,-1.49119],[-69.3973,-1.36508],[-69.42989,-1.22173],[-69.39523,-1.12555],[-69.44292,-1.03351],[-69.41861,-0.99827],[-69.528,-0.92514],[-69.52577,-0.86807],[-69.62491,-0.74667],[-69.56179,-0.63692],[-69.60783,-0.5008],[-69.8446,-0.33732],[-69.92054,-0.32573],[-70.04323,-0.18998],[-70.04302,0.56359],[-69.80272,0.57162],[-69.6711,0.66759],[-69.60529,0.61328],[-69.59701,0.6542],[-69.48002,0.73577],[-69.35277,0.61416],[-69.28914,0.64997],[-69.29484,0.60389],[-69.19975,0.60591],[-69.19425,0.64982],[-69.11563,0.64484],[-69.19001,0.74056],[-69.14881,0.76751],[-69.13576,0.87204],[-69.18846,0.91324],[-69.1646,0.94156],[-69.21679,0.97245],[-69.19773,0.99974],[-69.24494,1.05655],[-69.37641,1.08794],[-69.42312,1.04265],[-69.60989,1.09826],[-69.67718,1.06994],[-69.70963,1.11817],[-69.84266,1.07272],[-69.83972,1.71893],[-69.78236,1.69244],[-69.53464,1.77691],[-69.39109,1.72935],[-68.1645,1.72945],[-68.19207,1.7797],[-68.23954,1.77044],[-68.22688,1.82918],[-68.28555,1.83084],[-68.19583,2.03479],[-68.18033,1.9767],[-68.14417,1.97854],[-68.09043,1.89774],[-67.90162,1.81165],[-67.76942,2.00924],[-67.55095,2.04769],[-67.49519,2.16312],[-67.39404,2.22894],[-67.32672,2.06387],[-67.33083,1.94158],[-67.22831,1.84127],[-67.15384,1.8315],[-67.15922,1.67504],[-67.08017,1.38546],[-67.13923,1.32002],[-67.08675,1.16704],[-66.85119,1.22896],[-66.31032,0.74494],[-66.19737,0.78161],[-66.07783,0.76174],[-66.07024,0.8123],[-65.96712,0.81511],[-65.88369,0.94159],[-65.77261,0.95859],[-65.7421,1.00125],[-65.58894,1.00471],[-65.49624,0.87415],[-65.60623,0.70748],[-65.54116,0.64881],[-65.44499,0.68921],[-65.39213,0.75692],[-65.41198,0.82415],[-65.32734,0.93596],[-65.21302,0.90282],[-65.1749,0.94131],[-65.15831,1.1246],[-65.07232,1.15303],[-65.06317,1.11205],[-65.01361,1.10905],[-64.97445,1.20288],[-64.90439,1.25153],[-64.86966,1.22713],[-64.80053,1.31527],[-64.74446,1.22569],[-64.5789,1.34041],[-64.52608,1.44322],[-64.43586,1.47006],[-64.3939,1.52901],[-64.35111,1.52921],[-64.34777,1.49508],[-64.41019,1.40301],[-64.33791,1.36134],[-64.3136,1.45617],[-64.19707,1.52071],[-64.0735,1.64902],[-64.05781,1.92899],[-63.97219,1.99194],[-63.83555,1.96644],[-63.71155,2.04645],[-63.66501,2.01861],[-63.6268,2.11222],[-63.56474,2.13571],[-63.44059,2.126],[-63.36742,2.26864],[-63.37088,2.41121],[-63.42123,2.45102],[-63.46036,2.39684],[-63.56398,2.44573],[-63.76805,2.43994],[-63.84358,2.4916],[-64.01914,2.46135],[-64.0573,2.49752],[-63.98033,2.7237],[-64.07709,2.87262],[-64.07156,2.92142],[-64.12349,2.99048],[-64.15754,2.98243],[-64.14592,3.03459],[-64.22642,3.12356],[-64.19795,3.20121],[-64.2444,3.43036],[-64.17437,3.56841],[-64.281,3.70928],[-64.54357,3.85713],[-64.72239,4.11775],[-64.80203,4.17422],[-64.81123,4.27048],[-64.69522,4.25323],[-64.623,4.135],[-64.5565,4.10529],[-64.164,4.127],[-63.964,3.868],[-63.928,3.925],[-63.85,3.95],[-63.682,3.908],[-63.676,4.019],[-63.591,3.886],[-63.497,3.84],[-63.489,3.874],[-63.434,3.865],[-63.428,3.977],[-63.204,3.952],[-63.226,3.836],[-63.103,3.794],[-63.059,3.748],[-63.081,3.694],[-62.96,3.608],[-62.835,3.739],[-62.743,3.674],[-62.729,3.805],[-62.788,3.894],[-62.753,4.032],[-62.555,4.019],[-62.552,4.109],[-62.437,4.183],[-62.14308,4.07768],[-62.071,4.126],[-62.076,4.154],[-61.982,4.181],[-61.93175,4.12009],[-61.92213,4.16126],[-61.824,4.164],[-61.802,4.229],[-61.724,4.27],[-61.56,4.252],[-61.508,4.322],[-61.513,4.406],[-61.288,4.458],[-61.323,4.535],[-61.217,4.536],[-61.14559,4.48016],[-61.095,4.522],[-60.994,4.519],[-60.932,4.587],[-60.949,4.653],[-60.899,4.717],[-60.751,4.756],[-60.591,4.927],[-60.661,5.164],[-60.73197,5.21203],[-60.434,5.182],[-60.20825,5.28346],[-60.172,5.227],[-60.135,5.249],[-60.094,5.14],[-59.96984,5.06334],[-60.02524,4.7065],[-60.0705,4.61688],[-60.15725,4.57247],[-60.16114,4.51773],[-59.79503,4.46554],[-59.66948,4.37629],[-59.7319,4.28587],[-59.73069,4.18076],[-59.61818,4.13166],[-59.65406,4.06943],[-59.58417,3.96851],[-59.5153,3.94493],[-59.59279,3.88538],[-59.59631,3.79386],[-59.66555,3.78126],[-59.66842,3.70277],[-59.86728,3.57776],[-59.80205,3.50156],[-59.8408,3.43174],[-59.80488,3.35695],[-59.907,3.212],[-59.98944,2.88185],[-59.99,2.686],[-59.895,2.482],[-59.89872,2.36245],[-59.72315,2.27614],[-59.751,1.859],[-59.677,1.839],[-59.663,1.871],[-59.69,1.757],[-59.539,1.723],[-59.381,1.507],[-59.329,1.514],[-59.327,1.464],[-59.284,1.45],[-59.253,1.389],[-58.978,1.302],[-58.918,1.317],[-58.886,1.261],[-58.912,1.239],[-58.82512,1.17127],[-58.73956,1.1999],[-58.69456,1.29732],[-58.49622,1.26796],[-58.45787,1.37145],[-58.50511,1.40317],[-58.50873,1.46295],[-58.38559,1.46999],[-58.39472,1.52651],[-58.32237,1.59702],[-58.236,1.54669],[-58.16064,1.56011],[-58.12942,1.4989],[-58.00423,1.50303],[-57.99009,1.65844],[-57.85206,1.66782],[-57.77431,1.72973],[-57.70509,1.73093],[-57.65042,1.68237],[-57.5376,1.7005],[-57.50187,1.78609],[-57.43776,1.82681],[-57.43343,1.90598],[-57.36768,1.92372],[-57.36912,1.95638],[-57.30712,1.99665],[-57.22923,1.93759],[-57.08668,2.02644],[-57.01421,1.91489],[-56.91971,1.93036],[-56.79793,1.85336],[-56.72096,1.92582],[-56.62145,1.94588],[-56.57976,1.90588],[-56.45126,1.95614],[-56.24404,1.87808],[-56.1709,1.90048],[-56.11762,1.85097],[-55.95638,1.84509],[-55.90385,1.88803],[-55.93635,1.98647],[-55.9031,2.04108],[-56.00307,2.1676],[-56.05505,2.18464],[-56.04288,2.22778],[-56.13887,2.26574],[-56.09012,2.37228],[-56.02181,2.34247],[-55.97052,2.52931],[-55.76663,2.45524],[-55.71028,2.39917],[-55.49971,2.44324],[-55.38533,2.41836],[-55.32019,2.51537],[-55.23474,2.50338],[-55.1234,2.56762],[-55.10302,2.52564],[-54.95424,2.58359],[-54.86846,2.43989],[-54.68917,2.45389],[-54.68861,2.32472],[-54.54667,2.31833],[-54.53778,2.26556],[-54.46861,2.21306],[-54.24917,2.14667],[-54.18056,2.1725],[-54.11083,2.11222],[-54.06139,2.19167],[-53.94083,2.21917],[-53.93194,2.27194],[-53.88667,2.26778],[-53.745,2.37389],[-53.73389,2.31222],[-53.52972,2.24917],[-53.45861,2.2575],[-53.32833,2.35333],[-53.21667,2.25333],[-53.27899,2.18603],[-53.11861,2.2225],[-52.99472,2.17528],[-52.90972,2.19583],[-52.84722,2.28556],[-52.67528,2.37389],[-52.59444,2.47389],[-52.54028,2.57028],[-52.56417,2.63944],[-52.43944,2.87778],[-52.39583,2.90222],[-52.33187,3.16938],[-52.21472,3.26833],[-51.97104,3.70696],[-51.92148,3.72422],[-51.922,3.7792],[-51.79731,3.88888],[-51.77783,3.97406],[-51.65867,4.05276],[-51.61325,4.17437],[-51.63716,4.50834],[-51.49427,4.67426],[-51.11466,4.42286],[-50.94232,4.20165],[-50.85475,3.92491],[-50.85507,3.45573],[-50.75331,2.94057],[-50.29908,2.33079],[-49.73896,1.79143],[-48.23746,-0.07449],[-44.84728,-1.07246],[-43.54602,-2.04705],[-43.24389,-2.12403],[-42.78189,-2.33053],[-41.78084,-2.51859],[-41.5085,-2.68486],[-40.66365,-2.63829],[-40.50396,-2.57531],[-39.8907,-2.65328],[-39.15187,-3.04444],[-38.57151,-3.48047],[-38.34306,-3.54434],[-38.21421,-3.74103],[-38.12555,-3.80544],[-37.90182,-4.07265],[-37.77934,-4.18046],[-37.63401,-4.24454],[-37.51218,-4.41535],[-37.22122,-4.51045],[-37.07874,-4.71355],[-36.91716,-4.71372],[-36.62299,-4.85815],[-36.18969,-4.88505],[-35.93627,-4.83327],[-35.56471,-4.90758],[-35.33677,-4.99239],[-35.17659,-5.12497],[-34.79469,-6.33583],[-34.71587,-6.74615],[-34.62306,-6.90323],[-34.59953,-7.11133],[-34.64374,-7.98735],[-34.81497,-8.62472],[-35.0253,-9.13761],[-35.55848,-9.81261],[-35.69663,-9.90026],[-35.96401,-10.31281],[-36.06155,-10.37447],[-36.26639,-10.64593],[-36.61764,-10.81082],[-36.78725,-10.95151],[-36.99511,-11.29602],[-37.11368,-11.41261],[-37.46002,-12.10275],[-37.89668,-12.75844],[-38.22146,-13.09717],[-38.61146,-13.26537],[-38.85337,-14.65508],[-38.74388,-15.60089],[-38.66456,-15.74741],[-38.64697,-15.88327],[-38.8013,-16.24838],[-38.92933,-16.80775],[-38.53193,-17.80026],[-38.49171,-18.0046],[-38.53661,-18.09683],[-38.67053,-18.16855],[-39.35288,-18.10892],[-39.4675,-18.30359],[-39.54529,-18.78548],[-39.49227,-19.40134],[-39.63477,-19.74403],[-39.86353,-19.88681],[-40.17827,-20.75426],[-40.81442,-21.67672],[-40.76948,-21.87786],[-40.81442,-22.09702],[-41.5086,-22.52638],[-41.59666,-22.83627],[-41.79292,-23.08823],[-41.91484,-23.18527],[-43.19603,-23.26703],[-44.07735,-23.40501],[-45.13508,-24.12014],[-46.61368,-24.67512],[-47.85376,-25.47012],[-48.2801,-26.23036],[-48.34897,-26.75081],[-48.11076,-27.28208],[-48.21148,-27.85592],[-48.40713,-28.43255],[-48.68615,-28.76016],[-48.9156,-28.86305],[-49.1579,-29.02871],[-49.52748,-29.42005],[-49.82565,-29.86559],[-50.17344,-30.64282],[-50.60441,-31.24135],[-51.18785,-31.77646],[-51.74211,-32.10539],[-51.89236,-32.29596],[-52.06117,-32.38504],[-52.27087,-32.92102],[-52.45986,-33.25369],[-52.61505,-33.42291],[-53.18109,-33.86891],[-53.43053,-33.73947],[-53.43951,-33.69347],[-53.53228,-33.6888],[-53.51819,-33.15342],[-53.44438,-33.05296],[-53.24468,-32.93489],[-53.31008,-32.91875],[-53.29454,-32.89931],[-53.18496,-32.85043],[-53.14569,-32.79202],[-53.0858,-32.78835],[-53.07558,-32.74088],[-53.24992,-32.6041],[-53.39137,-32.58573],[-53.46423,-32.48446],[-53.58321,-32.45192],[-53.74599,-32.07848],[-53.83375,-32.05524],[-53.84978,-32.00064],[-53.96073,-31.95532],[-53.96972,-31.91765],[-54.10019,-31.92825],[-54.4549,-31.65295],[-54.4528,-31.59959],[-54.58676,-31.45656],[-54.8367,-31.442],[-54.88623,-31.3773],[-54.94087,-31.38068],[-55.00723,-31.26692],[-55.07446,-31.33216],[-55.24003,-31.26062],[-55.29118,-31.14226],[-55.34037,-31.13144],[-55.34981,-31.03922],[-55.42306,-31.01823],[-55.57742,-30.83309],[-55.65834,-30.864],[-55.66621,-30.95395],[-55.723,-30.943],[-55.727,-30.979],[-55.882,-31.077],[-56.00989,-31.08267],[-56.02241,-30.78565],[-56.12508,-30.73871],[-56.17074,-30.61517],[-56.26095,-30.58509],[-56.29193,-30.51967],[-56.38177,-30.49956],[-56.46126,-30.38486],[-56.54706,-30.35946],[-56.54115,-30.31291],[-56.6187,-30.30054],[-56.64628,-30.20346],[-56.77662,-30.1633],[-56.80777,-30.10301],[-57.07113,-30.08671],[-57.22081,-30.28928],[-57.31303,-30.25785],[-57.39229,-30.30474],[-57.46574,-30.26589],[-57.52431,-30.28569],[-57.56087,-30.21134],[-57.64744,-30.19483],[-57.48047,-30.12315],[-57.33713,-29.99284],[-57.294,-29.831],[-57.121,-29.765],[-56.89888,-29.53179],[-56.81905,-29.48816],[-56.76618,-29.37768],[-56.70164,-29.35913],[-56.59315,-29.12516],[-56.418,-29.075],[-56.40775,-28.9748],[-56.29995,-28.89614],[-56.29652,-28.8027],[-56.17858,-28.75922],[-56.00984,-28.60718],[-56.01249,-28.50873],[-55.88357,-28.47923],[-55.87739,-28.36159],[-55.75157,-28.37095],[-55.69433,-28.42204],[-55.67047,-28.33218],[-55.77415,-28.27414],[-55.7757,-28.24481],[-55.63167,-28.17719],[-55.60747,-28.11604],[-55.55957,-28.16523],[-55.4952,-28.07682],[-55.44611,-28.09787],[-55.368,-28.029],[-55.38299,-27.97948],[-55.343,-27.972],[-55.32706,-27.92664],[-55.26574,-27.92969],[-55.196,-27.856],[-55.133,-27.897],[-55.106,-27.846],[-55.035,-27.858],[-55.081,-27.779],[-54.936,-27.772],[-54.90617,-27.63871],[-54.85,-27.624],[-54.814,-27.533],[-54.775,-27.586],[-54.67926,-27.57394],[-54.67709,-27.508],[-54.621,-27.541],[-54.574,-27.453],[-54.5246,-27.5059],[-54.444,-27.472],[-54.47081,-27.42674],[-54.41,-27.405],[-54.35466,-27.46528],[-54.34067,-27.40311],[-54.28484,-27.44819],[-54.261,-27.397],[-54.21736,-27.38603],[-54.172,-27.254],[-54.15619,-27.29619],[-54.08872,-27.30149],[-54.01026,-27.19978],[-53.96219,-27.19698],[-53.95195,-27.15169],[-53.79879,-27.14629],[-53.80233,-27.04028],[-53.76087,-27.06543],[-53.78585,-27.02674],[-53.7473,-27.03218],[-53.7092,-26.93414],[-53.67125,-26.94222],[-53.69684,-26.86015],[-53.66059,-26.85814],[-53.75814,-26.72045],[-53.7205,-26.65099],[-53.75864,-26.64113],[-53.63739,-26.24968],[-53.742,-26.108],[-53.73409,-26.04333],[-53.83619,-25.97166],[-53.82214,-25.79377],[-53.89113,-25.62286],[-53.94895,-25.6117],[-53.95638,-25.64628],[-54.01,-25.567],[-54.07592,-25.55766],[-54.098,-25.619],[-54.099,-25.495],[-54.206,-25.541],[-54.178,-25.584],[-54.23,-25.562],[-54.25,-25.597],[-54.28,-25.556],[-54.38395,-25.59747],[-54.43288,-25.69756],[-54.4927,-25.6181],[-54.59354,-25.59275],[-54.61941,-25.45312],[-54.4295,-25.15915],[-54.43548,-24.94769],[-54.32437,-24.66059],[-54.32714,-24.47073],[-54.25877,-24.36377],[-54.34537,-24.14705],[-54.28223,-24.07336],[-54.43984,-23.90446],[-54.66978,-23.81262],[-54.70533,-23.86452],[-54.89,-23.898],[-54.924,-23.959],[-55.06223,-23.99335],[-55.107,-23.961],[-55.22907,-24.01383],[-55.30415,-23.96504],[-55.34542,-23.99458],[-55.41423,-23.9645],[-55.44167,-23.70084],[-55.47306,-23.64834],[-55.53989,-23.625],[-55.52356,-23.19733],[-55.54199,-23.1561],[-55.59635,-23.14993],[-55.66578,-22.85274],[-55.61432,-22.65521],[-55.72364,-22.55166],[-55.74302,-22.39266],[-55.78939,-22.3846],[-55.84304,-22.28725],[-56.20983,-22.27805],[-56.36485,-22.16949],[-56.39404,-22.07434],[-56.50711,-22.09561],[-56.63705,-22.26341],[-56.70344,-22.21693],[-56.72026,-22.26479],[-56.79344,-22.24238],[-56.84285,-22.30155],[-56.88343,-22.24755],[-56.9967,-22.22246],[-57.3744,-22.23204],[-57.5804,-22.17534],[-57.6106,-22.09462],[-57.70751,-22.09111],[-57.80183,-22.15072],[-57.99384,-22.09023],[-58.00946,-22.04038],[-57.91281,-21.88266],[-57.96603,-21.85045],[-57.90866,-21.77355],[-57.94714,-21.74413],[-57.88329,-21.68903],[-57.93436,-21.65037],[-57.91387,-21.59021],[-57.96795,-21.52432],[-57.8535,-21.33109],[-57.92019,-21.27655],[-57.85066,-21.22407],[-57.86834,-21.04417],[-57.81919,-20.94066],[-57.92836,-20.90036],[-57.8552,-20.83403],[-57.89863,-20.78872],[-57.96183,-20.7916],[-57.93478,-20.74565],[-57.86732,-20.73265],[-57.92414,-20.66392],[-57.98848,-20.69879],[-57.99847,-20.43551],[-58.09339,-20.35554],[-58.09596,-20.25445],[-58.16216,-20.25953],[-58.12152,-20.19246],[-58.16932,-20.1694],[-57.95347,-20.02094],[-57.90248,-20.04207],[-57.85796,-19.9703],[-58.131,-19.758],[-57.784,-19.033],[-57.694,-19.011],[-57.719,-18.899],[-57.766,-18.899],[-57.557,-18.24],[-57.453,-18.231],[-57.574,-18.131],[-57.72302,-17.83074],[-57.68472,-17.8306],[-57.70991,-17.72702],[-57.783,-17.639],[-57.73696,-17.5583],[-57.883,-17.449],[-57.996,-17.515],[-58.06,-17.45],[-58.116,-17.451],[-58.151,-17.384],[-58.263,-17.344],[-58.396,-17.181],[-58.423,-16.989],[-58.474,-16.935],[-58.47,-16.703],[-58.436,-16.592],[-58.333,-16.49],[-58.32227,-16.26559],[-58.388,-16.261],[-58.43059,-16.32264],[-60.17335,-16.26672],[-60.238,-15.473],[-60.57543,-15.09677],[-60.244,-15.096],[-60.272,-14.62],[-60.321,-14.608],[-60.492,-14.188],[-60.479,-14.097],[-60.38066,-13.9888],[-60.45062,-13.9364],[-60.45599,-13.85422],[-60.49068,-13.85782],[-60.46776,-13.79446],[-60.76755,-13.68329],[-60.87678,-13.62149],[-60.91857,-13.54334],[-61.0056,-13.552],[-61.0129,-13.48925],[-61.0938,-13.49081],[-61.10314,-13.53056],[-61.18155,-13.50557],[-61.19236,-13.53695],[-61.29954,-13.47718],[-61.46527,-13.55427],[-61.57927,-13.48711],[-61.852,-13.538],[-61.892,-13.431],[-61.96968,-13.40759],[-61.97592,-13.36695],[-62.11498,-13.25932],[-62.115,-13.163],[-62.15254,-13.15993],[-62.16703,-13.11346],[-62.19,-13.153],[-62.214,-13.111],[-62.27269,-13.15687],[-62.39178,-13.13471],[-62.453,-13.064],[-62.612,-13.041],[-62.65,-12.965],[-62.729,-13.02],[-62.779,-13.009],[-62.89672,-12.8539],[-63.01134,-12.83602],[-63.08186,-12.72323],[-63.06163,-12.68584],[-63.15726,-12.6138],[-63.24621,-12.66222],[-63.23713,-12.69043],[-63.30125,-12.68138],[-63.44052,-12.608],[-63.43627,-12.56526],[-63.50641,-12.56562],[-63.55295,-12.50598],[-63.7848,-12.42871],[-63.88957,-12.44745],[-63.89949,-12.50204],[-63.95144,-12.53179],[-64.13464,-12.47732],[-64.16781,-12.51503],[-64.17504,-12.46675],[-64.22945,-12.45419],[-64.29018,-12.50313],[-64.29452,-12.4582],[-64.41057,-12.44436],[-64.51217,-12.3551],[-64.51256,-12.22562],[-64.70406,-12.1827],[-64.70719,-12.08684],[-64.75486,-12.15762],[-64.7688,-12.09356],[-64.83747,-12.11786],[-64.80954,-12.05633],[-64.84077,-12.01027],[-65.03548,-11.99408],[-65.01398,-11.90303],[-65.0727,-11.86587],[-65.08672,-11.7082],[-65.18953,-11.72353],[-65.18216,-11.75609],[-65.2593,-11.71053],[-65.21178,-11.52857],[-65.3074,-11.49957],[-65.33276,-11.33986],[-65.29053,-11.32275],[-65.34347,-11.3082],[-65.35834,-11.26834],[-65.35938,-11.22067],[-65.31294,-11.19578],[-65.35387,-11.18419],[-65.36177,-11.14031],[-65.28269,-11.09009],[-65.30071,-11.03142],[-65.25053,-10.98506],[-65.27476,-10.87302],[-65.35376,-10.78881],[-65.34667,-10.68155],[-65.40569,-10.63935],[-65.43011,-10.48505],[-65.288,-10.219],[-65.333,-9.965],[-65.28588,-9.84413],[-65.39313,-9.68683],[-65.44394,-9.66957],[-65.4883,-9.71015],[-65.55611,-9.84498],[-65.627,-9.83804],[-65.66963,-9.78129],[-65.71023,-9.80857],[-65.68395,-9.74992],[-65.7432,-9.78296],[-65.77013,-9.73442],[-65.79437,-9.79295],[-65.79962,-9.75663],[-65.86532,-9.79533],[-65.87184,-9.75307],[-65.91976,-9.75314],[-65.98222,-9.81011],[-66.151,-9.785],[-66.426,-9.899],[-66.435,-9.866],[-66.61995,-9.89353],[-66.63701,-9.94983],[-66.8751,-10.08268],[-66.9528,-10.18886],[-66.99683,-10.20017],[-67.01537,-10.25919],[-67.17745,-10.33923],[-67.31545,-10.31932],[-67.31155,-10.37716],[-67.40717,-10.37386],[-67.44361,-10.45492],[-67.57925,-10.5028],[-67.64028,-10.59807],[-67.67631,-10.60484],[-67.70825,-10.71083],[-67.86386,-10.64067],[-68.03289,-10.65486],[-68.10456,-10.71426],[-68.10333,-10.77541],[-68.27819,-10.98926],[-68.71576,-11.14483],[-68.75767,-11.00079],[-68.9118,-11.02192],[-69.41453,-10.92575],[-69.73653,-10.97445],[-69.76903,-10.92972],[-69.93442,-10.9219],[-70.15869,-11.04096],[-70.30672,-11.06983],[-70.43675,-11.03923],[-70.53033,-10.93465],[-70.62103,-10.99982],[-70.62338,-9.82054],[-70.53663,-9.76584],[-70.59972,-9.56264],[-70.55282,-9.57093],[-70.56894,-9.53127],[-70.50506,-9.50557],[-70.49665,-9.42489],[-70.59581,-9.4425],[-70.6632,-9.52601],[-70.75067,-9.56043],[-70.79332,-9.63846],[-70.96337,-9.74891],[-70.99391,-9.81721],[-71.13974,-9.85702],[-71.22052,-9.96968],[-72.1804,-9.99967],[-72.15136,-9.79742],[-72.26296,-9.75085],[-72.25282,-9.61633],[-72.28821,-9.60316],[-72.2829,-9.53995],[-72.35688,-9.4946],[-72.51954,-9.49128],[-72.71676,-9.4122],[-73.2038,-9.40715],[-73.07352,-9.23461],[-73.0093,-9.22236],[-73.02612,-9.17786],[-72.9582,-9.14302],[-72.94091,-8.98494],[-72.99931,-8.91778],[-73.05901,-8.90561],[-73.14992,-8.6839],[-73.20907,-8.6857],[-73.28745,-8.61948],[-73.3055,-8.47197],[-73.38956,-8.46878],[-73.41286,-8.41099],[-73.53744,-8.34587],[-73.62739,-8.02187],[-73.73175,-7.9684],[-73.7725,-7.90237],[-73.76164,-7.85803],[-73.69706,-7.86527],[-73.6843,-7.77644],[-73.82217,-7.71788],[-73.99094,-7.53635],[-73.948,-7.52661],[-73.91981,-7.46568],[-73.96394,-7.34764],[-73.87014,-7.37882],[-73.7003,-7.30429],[-73.79842,-7.11306],[-73.71046,-6.84019],[-73.53639,-6.6834],[-73.39115,-6.64193],[-73.35281,-6.59327],[-73.22741,-6.58884],[-73.18797,-6.52302],[-73.13523,-6.51046],[-73.10473,-6.40666],[-73.24664,-6.14963],[-73.23821,-6.04399],[-73.1868,-6.00512],[-73.15207,-5.86796],[-73.05303,-5.79517],[-72.95912,-5.65689],[-72.95888,-5.46613],[-72.86052,-5.27117],[-72.88725,-5.16307],[-72.73986,-5.08859],[-72.72765,-5.05199],[-72.6212,-5.0518],[-72.598,-4.98386],[-72.38202,-4.87296],[-72.36895,-4.80387],[-72.12601,-4.73454],[-72.04335,-4.62384],[-72.00689,-4.64622],[-71.99464,-4.60996],[-71.94743,-4.60877],[-71.91909,-4.5298],[-71.88549,-4.53803],[-71.9073,-4.51644],[-71.76637,-4.50446],[-71.75109,-4.46887],[-71.70817,-4.51165],[-71.65479,-4.47246],[-71.65032,-4.50395],[-71.61548,-4.4687],[-71.6335,-4.51524],[-71.59625,-4.52928],[-71.53703,-4.46442],[-71.49428,-4.48701],[-71.50716,-4.43909],[-71.43438,-4.42882],[-71.42562,-4.47058],[-71.35026,-4.42728],[-71.30752,-4.46288],[-71.32091,-4.42009],[-71.27782,-4.44217],[-71.26975,-4.385],[-71.20263,-4.37987],[-71.19422,-4.42471],[-71.14478,-4.38158],[-71.11491,-4.41119],[-71.10616,-4.37764],[-70.99389,-4.38654],[-70.99595,-4.34632],[-70.9357,-4.38432],[-70.84483,-4.27905],[-70.86447,-4.25245],[-70.81677,-4.23005],[-70.8458,-4.21872],[-70.75901,-4.15944],[-70.68147,-4.20791],[-70.64256,-4.12805],[-70.62521,-4.19151],[-70.56118,-4.1775],[-70.57357,-4.21169],[-70.54796,-4.13671],[-70.51036,-4.14824],[-70.50417,-4.20098],[-70.48535,-4.16132],[-70.43435,-4.16266],[-70.43146,-4.13217],[-70.33892,-4.17997],[-70.32281,-4.14206],[-70.28769,-4.16555],[-70.29141,-4.28709],[-70.21457,-4.29749],[-70.19194,-4.36179],[-70.15508,-4.27308],[-70.11749,-4.28585],[-70.10881,-4.25454],[-70.04189,-4.29409],[-70.07948,-4.31428],[-70.02826,-4.3703],[-69.99182,-4.37482],[-69.94793,-4.23168]],[[-34.00035,-3.76654],[-34.01797,-3.84985],[-34.00664,-3.91809],[-33.98608,-3.95952],[-33.95923,-3.99217],[-33.8921,-4.03653],[-33.81658,-4.05077],[-33.72931,-4.03151],[-33.66638,-3.9838],[-33.62736,-3.9185],[-33.61519,-3.84985],[-33.63239,-3.76864],[-33.68693,-3.69537],[-33.74987,-3.65978],[-33.81658,-3.6489],[-33.89336,-3.66397],[-33.96007,-3.70877],[-34.00035,-3.76654]],[[-32.5538,-4.00884],[-32.59937,-3.9531],[-32.64061,-3.87309],[-32.61755,-3.73712],[-32.58338,-3.70527],[-32.54228,-3.65606],[-32.4592,-3.63029],[-32.35174,-3.63887],[-32.30049,-3.67684],[-32.24749,-3.75266],[-32.23155,-3.81889],[-32.2357,-3.90247],[-32.30194,-3.9883],[-32.42898,-4.0384],[-32.5538,-4.00884]],[[-29.50321,0.79391],[-29.54097,0.8689],[-29.54727,0.92553],[-29.52367,0.99422],[-29.48958,1.06134],[-29.43136,1.10224],[-29.35899,1.1206],[-29.29238,1.11378],[-29.22158,1.0776],[-29.16285,1.00314],[-29.14501,0.92605],[-29.14764,0.88358],[-29.17176,0.8196],[-29.24885,0.74357],[-29.29448,0.72521],[-29.36371,0.71892],[-29.43556,0.73937],[-29.50321,0.79391]],[[-29.09537,-20.42649],[-29.19756,-20.33509],[-29.3343,-20.28932],[-29.46741,-20.3288],[-29.54604,-20.42958],[-29.55396,-20.52706],[-29.51696,-20.62613],[-29.40995,-20.68955],[-29.27599,-20.72578],[-29.15968,-20.66209],[-29.07188,-20.57088],[-28.9712,-20.64769],[-28.83286,-20.69814],[-28.67968,-20.62099],[-28.63549,-20.49284],[-28.63412,-20.47146],[-28.7431,-20.30094],[-28.8683,-20.27288],[-29.0031,-20.32416],[-29.09537,-20.42649]]],terms_text:"IBGE",icon:"https://osmlab.github.io/editor-layer-index/sources/south-america/br/IBGE_Setores_Rurais.png"},{id:"IBGE_BC250_Aglomerado_Rural",name:"IBGE-BC250-Aglomerado Rural Isolado",type:"wms",template:"http://www.geoservicos.ibge.gov.br/geoserver/wms?service=WMS&version=1.1.0&request=GetMap&layers=CCAR:BC250_Aglomerado_Rural_Isolado_P&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}&FORMAT=image%2Fpng&TRANSPARENT=TRUE",projection:"EPSG:3857",polygon:[[[-29.3325,2.33596],[-28.72472,2.03155],[-27.76041,-8.93703],[-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.83894],[-66.52331,-9.98587],[-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.66908],[-71.27536,-10.08971],[-72.18053,-10.09967],[-72.41623,-9.5874],[-73.29207,-9.45415],[-73.0625,-9.01727],[-73.61432,-8.40982],[-74.09056,-7.52755],[-74.03652,-7.27885],[-73.84718,-7.23829],[-73.78618,-6.77487],[-73.22362,-6.43011],[-73.33719,-6.02974],[-72.93016,-5.03871],[-71.93973,-4.42503],[-70.96802,-4.24829],[-70.79598,-4.06493],[-70.02393,-4.16735],[-69.51025,-1.13409],[-69.70776,-0.56762],[-70.13645,-0.22616],[-70.14083,0.5844],[-69.26594,0.8065],[-69.34226,0.96892],[-69.92481,1.01571],[-69.92343,1.77385],[-68.38511,1.82943],[-68.24848,2.11981],[-67.94571,1.94842],[-67.37696,2.32747],[-67.05751,1.85834],[-67.00579,1.2916],[-66.79967,1.31468],[-66.28683,0.85771],[-65.67671,1.11115],[-65.42494,0.96655],[-65.15671,1.24203],[-64.27483,1.60159],[-64.0486,2.06514],[-63.47236,2.27936],[-64.13446,2.43391],[-64.10005,2.72378],[-64.32628,3.11828],[-64.28142,3.54198],[-64.88451,4.11767],[-64.88064,4.34246],[-64.13653,4.22315],[-63.95465,4.02132],[-63.17706,4.0483],[-62.96093,3.76366],[-62.82024,4.10602],[-62.49922,4.27081],[-61.91181,4.26284],[-61.35393,4.6301],[-61.04904,4.62312],[-60.70452,4.96985],[-60.78709,5.29676],[-60.22457,5.37121],[-59.89857,5.10754],[-59.97549,4.60302],[-59.59676,4.43987],[-59.41942,3.96994],[-59.71017,3.54201],[-59.88955,2.72301],[-59.63006,2.31633],[-59.63382,1.96658],[-59.18812,1.47808],[-58.80545,1.32073],[-58.35933,1.68993],[-57.6,1.80391],[-57.39854,2.06512],[-57.12392,2.12876],[-56.02925,1.94945],[-56.23884,2.26335],[-55.98195,2.62866],[-55.64816,2.51995],[-54.93958,2.68251],[-54.24988,2.25056],[-53.73937,2.47373],[-52.98578,2.28049],[-52.65712,2.56407],[-52.41739,3.22121],[-51.73983,4.11916],[-51.7246,4.55687],[-51.0112,5.5229],[-43.48209,5.33583],[-29.3325,2.33596]]],terms_text:"IBGE",overlay:true},{id:"IBGE_BC250_Pista_Pouso",name:"IBGE-BC250-Pista de Pouso",type:"wms",template:"http://geoservicos.ibge.gov.br/geoserver/wms?service=WMS&version=1.1.0&request=GetMap&layers=CCAR:BC250_Pista_Ponto_Pouso_L&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}&FORMAT=image%2Fpng&TRANSPARENT=TRUE",projection:"EPSG:3857",polygon:[[[-29.3325,2.33596],[-28.72472,2.03155],[-27.76041,-8.93703],[-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.83894],[-66.52331,-9.98587],[-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.66908],[-71.27536,-10.08971],[-72.18053,-10.09967],[-72.41623,-9.5874],[-73.29207,-9.45415],[-73.0625,-9.01727],[-73.61432,-8.40982],[-74.09056,-7.52755],[-74.03652,-7.27885],[-73.84718,-7.23829],[-73.78618,-6.77487],[-73.22362,-6.43011],[-73.33719,-6.02974],[-72.93016,-5.03871],[-71.93973,-4.42503],[-70.96802,-4.24829],[-70.79598,-4.06493],[-70.02393,-4.16735],[-69.51025,-1.13409],[-69.70776,-0.56762],[-70.13645,-0.22616],[-70.14083,0.5844],[-69.26594,0.8065],[-69.34226,0.96892],[-69.92481,1.01571],[-69.92343,1.77385],[-68.38511,1.82943],[-68.24848,2.11981],[-67.94571,1.94842],[-67.37696,2.32747],[-67.05751,1.85834],[-67.00579,1.2916],[-66.79967,1.31468],[-66.28683,0.85771],[-65.67671,1.11115],[-65.42494,0.96655],[-65.15671,1.24203],[-64.27483,1.60159],[-64.0486,2.06514],[-63.47236,2.27936],[-64.13446,2.43391],[-64.10005,2.72378],[-64.32628,3.11828],[-64.28142,3.54198],[-64.88451,4.11767],[-64.88064,4.34246],[-64.13653,4.22315],[-63.95465,4.02132],[-63.17706,4.0483],[-62.96093,3.76366],[-62.82024,4.10602],[-62.49922,4.27081],[-61.91181,4.26284],[-61.35393,4.6301],[-61.04904,4.62312],[-60.70452,4.96985],[-60.78709,5.29676],[-60.22457,5.37121],[-59.89857,5.10754],[-59.97549,4.60302],[-59.59676,4.43987],[-59.41942,3.96994],[-59.71017,3.54201],[-59.88955,2.72301],[-59.63006,2.31633],[-59.63382,1.96658],[-59.18812,1.47808],[-58.80545,1.32073],[-58.35933,1.68993],[-57.6,1.80391],[-57.39854,2.06512],[-57.12392,2.12876],[-56.02925,1.94945],[-56.23884,2.26335],[-55.98195,2.62866],[-55.64816,2.51995],[-54.93958,2.68251],[-54.24988,2.25056],[-53.73937,2.47373],[-52.98578,2.28049],[-52.65712,2.56407],[-52.41739,3.22121],[-51.73983,4.11916],[-51.7246,4.55687],[-51.0112,5.5229],[-43.48209,5.33583],[-29.3325,2.33596]]],terms_text:"IBGE",overlay:true},{id:"IBGE_BC250_Rios_Drenagem",name:"IBGE-BC250-Rios Drenagem",type:"wms",template:"http://www.geoservicos.ibge.gov.br/geoserver/wms?service=WMS&version=1.1.0&request=GetMap&layers=CCAR:BC250_Trecho_Drenagem_L&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}&FORMAT=image%2Fpng&TRANSPARENT=TRUE",projection:"EPSG:3857",polygon:[[[-29.3325,2.33596],[-28.72472,2.03155],[-27.76041,-8.93703],[-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.83894],[-66.52331,-9.98587],[-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.66908],[-71.27536,-10.08971],[-72.18053,-10.09967],[-72.41623,-9.5874],[-73.29207,-9.45415],[-73.0625,-9.01727],[-73.61432,-8.40982],[-74.09056,-7.52755],[-74.03652,-7.27885],[-73.84718,-7.23829],[-73.78618,-6.77487],[-73.22362,-6.43011],[-73.33719,-6.02974],[-72.93016,-5.03871],[-71.93973,-4.42503],[-70.96802,-4.24829],[-70.79598,-4.06493],[-70.02393,-4.16735],[-69.51025,-1.13409],[-69.70776,-0.56762],[-70.13645,-0.22616],[-70.14083,0.5844],[-69.26594,0.8065],[-69.34226,0.96892],[-69.92481,1.01571],[-69.92343,1.77385],[-68.38511,1.82943],[-68.24848,2.11981],[-67.94571,1.94842],[-67.37696,2.32747],[-67.05751,1.85834],[-67.00579,1.2916],[-66.79967,1.31468],[-66.28683,0.85771],[-65.67671,1.11115],[-65.42494,0.96655],[-65.15671,1.24203],[-64.27483,1.60159],[-64.0486,2.06514],[-63.47236,2.27936],[-64.13446,2.43391],[-64.10005,2.72378],[-64.32628,3.11828],[-64.28142,3.54198],[-64.88451,4.11767],[-64.88064,4.34246],[-64.13653,4.22315],[-63.95465,4.02132],[-63.17706,4.0483],[-62.96093,3.76366],[-62.82024,4.10602],[-62.49922,4.27081],[-61.91181,4.26284],[-61.35393,4.6301],[-61.04904,4.62312],[-60.70452,4.96985],[-60.78709,5.29676],[-60.22457,5.37121],[-59.89857,5.10754],[-59.97549,4.60302],[-59.59676,4.43987],[-59.41942,3.96994],[-59.71017,3.54201],[-59.88955,2.72301],[-59.63006,2.31633],[-59.63382,1.96658],[-59.18812,1.47808],[-58.80545,1.32073],[-58.35933,1.68993],[-57.6,1.80391],[-57.39854,2.06512],[-57.12392,2.12876],[-56.02925,1.94945],[-56.23884,2.26335],[-55.98195,2.62866],[-55.64816,2.51995],[-54.93958,2.68251],[-54.24988,2.25056],[-53.73937,2.47373],[-52.98578,2.28049],[-52.65712,2.56407],[-52.41739,3.22121],[-51.73983,4.11916],[-51.7246,4.55687],[-51.0112,5.5229],[-43.48209,5.33583],[-29.3325,2.33596]]],terms_text:"IBGE",overlay:true},{id:"IBGE_BC250_Terra_Indegina",name:"IBGE-BC250-Terra Indigena",type:"wms",template:"http://geoservicos.ibge.gov.br/geoserver/wms?service=WMS&version=1.1.0&request=GetMap&layers=CCAR:BC250_Terra_Indigena_A&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}&FORMAT=image%2Fpng&TRANSPARENT=TRUE",projection:"EPSG:3857",polygon:[[[-29.3325,2.33596],[-28.72472,2.03155],[-27.76041,-8.93703],[-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.83894],[-66.52331,-9.98587],[-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.66908],[-71.27536,-10.08971],[-72.18053,-10.09967],[-72.41623,-9.5874],[-73.29207,-9.45415],[-73.0625,-9.01727],[-73.61432,-8.40982],[-74.09056,-7.52755],[-74.03652,-7.27885],[-73.84718,-7.23829],[-73.78618,-6.77487],[-73.22362,-6.43011],[-73.33719,-6.02974],[-72.93016,-5.03871],[-71.93973,-4.42503],[-70.96802,-4.24829],[-70.79598,-4.06493],[-70.02393,-4.16735],[-69.51025,-1.13409],[-69.70776,-0.56762],[-70.13645,-0.22616],[-70.14083,0.5844],[-69.26594,0.8065],[-69.34226,0.96892],[-69.92481,1.01571],[-69.92343,1.77385],[-68.38511,1.82943],[-68.24848,2.11981],[-67.94571,1.94842],[-67.37696,2.32747],[-67.05751,1.85834],[-67.00579,1.2916],[-66.79967,1.31468],[-66.28683,0.85771],[-65.67671,1.11115],[-65.42494,0.96655],[-65.15671,1.24203],[-64.27483,1.60159],[-64.0486,2.06514],[-63.47236,2.27936],[-64.13446,2.43391],[-64.10005,2.72378],[-64.32628,3.11828],[-64.28142,3.54198],[-64.88451,4.11767],[-64.88064,4.34246],[-64.13653,4.22315],[-63.95465,4.02132],[-63.17706,4.0483],[-62.96093,3.76366],[-62.82024,4.10602],[-62.49922,4.27081],[-61.91181,4.26284],[-61.35393,4.6301],[-61.04904,4.62312],[-60.70452,4.96985],[-60.78709,5.29676],[-60.22457,5.37121],[-59.89857,5.10754],[-59.97549,4.60302],[-59.59676,4.43987],[-59.41942,3.96994],[-59.71017,3.54201],[-59.88955,2.72301],[-59.63006,2.31633],[-59.63382,1.96658],[-59.18812,1.47808],[-58.80545,1.32073],[-58.35933,1.68993],[-57.6,1.80391],[-57.39854,2.06512],[-57.12392,2.12876],[-56.02925,1.94945],[-56.23884,2.26335],[-55.98195,2.62866],[-55.64816,2.51995],[-54.93958,2.68251],[-54.24988,2.25056],[-53.73937,2.47373],[-52.98578,2.28049],[-52.65712,2.56407],[-52.41739,3.22121],[-51.73983,4.11916],[-51.7246,4.55687],[-51.0112,5.5229],[-43.48209,5.33583],[-29.3325,2.33596]]],terms_text:"IBGE",overlay:true},{id:"IBGE_BC250_Rodoviario",name:"IBGE-BC250-Trecho Rodoviario",type:"wms",template:"http://geoservicos.ibge.gov.br/geoserver/wms?service=WMS&version=1.1.0&request=GetMap&layers=CCAR:BC250_Trecho_Rodoviario_L&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}&FORMAT=image/png&TRANSPARENT=TRUE",projection:"EPSG:3857",polygon:[[[-29.3325,2.33596],[-28.72472,2.03155],[-27.76041,-8.93703],[-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.83894],[-66.52331,-9.98587],[-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.66908],[-71.27536,-10.08971],[-72.18053,-10.09967],[-72.41623,-9.5874],[-73.29207,-9.45415],[-73.0625,-9.01727],[-73.61432,-8.40982],[-74.09056,-7.52755],[-74.03652,-7.27885],[-73.84718,-7.23829],[-73.78618,-6.77487],[-73.22362,-6.43011],[-73.33719,-6.02974],[-72.93016,-5.03871],[-71.93973,-4.42503],[-70.96802,-4.24829],[-70.79598,-4.06493],[-70.02393,-4.16735],[-69.51025,-1.13409],[-69.70776,-0.56762],[-70.13645,-0.22616],[-70.14083,0.5844],[-69.26594,0.8065],[-69.34226,0.96892],[-69.92481,1.01571],[-69.92343,1.77385],[-68.38511,1.82943],[-68.24848,2.11981],[-67.94571,1.94842],[-67.37696,2.32747],[-67.05751,1.85834],[-67.00579,1.2916],[-66.79967,1.31468],[-66.28683,0.85771],[-65.67671,1.11115],[-65.42494,0.96655],[-65.15671,1.24203],[-64.27483,1.60159],[-64.0486,2.06514],[-63.47236,2.27936],[-64.13446,2.43391],[-64.10005,2.72378],[-64.32628,3.11828],[-64.28142,3.54198],[-64.88451,4.11767],[-64.88064,4.34246],[-64.13653,4.22315],[-63.95465,4.02132],[-63.17706,4.0483],[-62.96093,3.76366],[-62.82024,4.10602],[-62.49922,4.27081],[-61.91181,4.26284],[-61.35393,4.6301],[-61.04904,4.62312],[-60.70452,4.96985],[-60.78709,5.29676],[-60.22457,5.37121],[-59.89857,5.10754],[-59.97549,4.60302],[-59.59676,4.43987],[-59.41942,3.96994],[-59.71017,3.54201],[-59.88955,2.72301],[-59.63006,2.31633],[-59.63382,1.96658],[-59.18812,1.47808],[-58.80545,1.32073],[-58.35933,1.68993],[-57.6,1.80391],[-57.39854,2.06512],[-57.12392,2.12876],[-56.02925,1.94945],[-56.23884,2.26335],[-55.98195,2.62866],[-55.64816,2.51995],[-54.93958,2.68251],[-54.24988,2.25056],[-53.73937,2.47373],[-52.98578,2.28049],[-52.65712,2.56407],[-52.41739,3.22121],[-51.73983,4.11916],[-51.7246,4.55687],[-51.0112,5.5229],[-43.48209,5.33583],[-29.3325,2.33596]]],terms_text:"IBGE",overlay:true},{id:"IBGE_BC250_Uso_Sustentavel",name:"IBGE-BC250-Unidade de Uso Sistentável - APA",type:"wms",template:"http://geoservicos.ibge.gov.br/geoserver/wms?service=WMS&version=1.1.0&request=GetMap&layers=CCAR:BC250_Unidade_Uso_Sustentavel_A&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}&FORMAT=image%2Fpng&TRANSPARENT=TRUE",projection:"EPSG:3857",polygon:[[[-29.3325,2.33596],[-28.72472,2.03155],[-27.76041,-8.93703],[-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.83894],[-66.52331,-9.98587],[-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.66908],[-71.27536,-10.08971],[-72.18053,-10.09967],[-72.41623,-9.5874],[-73.29207,-9.45415],[-73.0625,-9.01727],[-73.61432,-8.40982],[-74.09056,-7.52755],[-74.03652,-7.27885],[-73.84718,-7.23829],[-73.78618,-6.77487],[-73.22362,-6.43011],[-73.33719,-6.02974],[-72.93016,-5.03871],[-71.93973,-4.42503],[-70.96802,-4.24829],[-70.79598,-4.06493],[-70.02393,-4.16735],[-69.51025,-1.13409],[-69.70776,-0.56762],[-70.13645,-0.22616],[-70.14083,0.5844],[-69.26594,0.8065],[-69.34226,0.96892],[-69.92481,1.01571],[-69.92343,1.77385],[-68.38511,1.82943],[-68.24848,2.11981],[-67.94571,1.94842],[-67.37696,2.32747],[-67.05751,1.85834],[-67.00579,1.2916],[-66.79967,1.31468],[-66.28683,0.85771],[-65.67671,1.11115],[-65.42494,0.96655],[-65.15671,1.24203],[-64.27483,1.60159],[-64.0486,2.06514],[-63.47236,2.27936],[-64.13446,2.43391],[-64.10005,2.72378],[-64.32628,3.11828],[-64.28142,3.54198],[-64.88451,4.11767],[-64.88064,4.34246],[-64.13653,4.22315],[-63.95465,4.02132],[-63.17706,4.0483],[-62.96093,3.76366],[-62.82024,4.10602],[-62.49922,4.27081],[-61.91181,4.26284],[-61.35393,4.6301],[-61.04904,4.62312],[-60.70452,4.96985],[-60.78709,5.29676],[-60.22457,5.37121],[-59.89857,5.10754],[-59.97549,4.60302],[-59.59676,4.43987],[-59.41942,3.96994],[-59.71017,3.54201],[-59.88955,2.72301],[-59.63006,2.31633],[-59.63382,1.96658],[-59.18812,1.47808],[-58.80545,1.32073],[-58.35933,1.68993],[-57.6,1.80391],[-57.39854,2.06512],[-57.12392,2.12876],[-56.02925,1.94945],[-56.23884,2.26335],[-55.98195,2.62866],[-55.64816,2.51995],[-54.93958,2.68251],[-54.24988,2.25056],[-53.73937,2.47373],[-52.98578,2.28049],[-52.65712,2.56407],[-52.41739,3.22121],[-51.73983,4.11916],[-51.7246,4.55687],[-51.0112,5.5229],[-43.48209,5.33583],[-29.3325,2.33596]]],terms_text:"IBGE",overlay:true},{id:"IBGE_BC250_Villa",name:"IBGE-BC250-Villa",type:"wms",template:"http://geoservicos.ibge.gov.br/geoserver/wms?service=WMS&version=1.1.0&request=GetMap&layers=CCAR:BC250_Vila_P&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}&FORMAT=image%2Fpng&TRANSPARENT=TRUE",projection:"EPSG:3857",polygon:[[[-29.3325,2.33596],[-28.72472,2.03155],[-27.76041,-8.93703],[-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.83894],[-66.52331,-9.98587],[-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.66908],[-71.27536,-10.08971],[-72.18053,-10.09967],[-72.41623,-9.5874],[-73.29207,-9.45415],[-73.0625,-9.01727],[-73.61432,-8.40982],[-74.09056,-7.52755],[-74.03652,-7.27885],[-73.84718,-7.23829],[-73.78618,-6.77487],[-73.22362,-6.43011],[-73.33719,-6.02974],[-72.93016,-5.03871],[-71.93973,-4.42503],[-70.96802,-4.24829],[-70.79598,-4.06493],[-70.02393,-4.16735],[-69.51025,-1.13409],[-69.70776,-0.56762],[-70.13645,-0.22616],[-70.14083,0.5844],[-69.26594,0.8065],[-69.34226,0.96892],[-69.92481,1.01571],[-69.92343,1.77385],[-68.38511,1.82943],[-68.24848,2.11981],[-67.94571,1.94842],[-67.37696,2.32747],[-67.05751,1.85834],[-67.00579,1.2916],[-66.79967,1.31468],[-66.28683,0.85771],[-65.67671,1.11115],[-65.42494,0.96655],[-65.15671,1.24203],[-64.27483,1.60159],[-64.0486,2.06514],[-63.47236,2.27936],[-64.13446,2.43391],[-64.10005,2.72378],[-64.32628,3.11828],[-64.28142,3.54198],[-64.88451,4.11767],[-64.88064,4.34246],[-64.13653,4.22315],[-63.95465,4.02132],[-63.17706,4.0483],[-62.96093,3.76366],[-62.82024,4.10602],[-62.49922,4.27081],[-61.91181,4.26284],[-61.35393,4.6301],[-61.04904,4.62312],[-60.70452,4.96985],[-60.78709,5.29676],[-60.22457,5.37121],[-59.89857,5.10754],[-59.97549,4.60302],[-59.59676,4.43987],[-59.41942,3.96994],[-59.71017,3.54201],[-59.88955,2.72301],[-59.63006,2.31633],[-59.63382,1.96658],[-59.18812,1.47808],[-58.80545,1.32073],[-58.35933,1.68993],[-57.6,1.80391],[-57.39854,2.06512],[-57.12392,2.12876],[-56.02925,1.94945],[-56.23884,2.26335],[-55.98195,2.62866],[-55.64816,2.51995],[-54.93958,2.68251],[-54.24988,2.25056],[-53.73937,2.47373],[-52.98578,2.28049],[-52.65712,2.56407],[-52.41739,3.22121],[-51.73983,4.11916],[-51.7246,4.55687],[-51.0112,5.5229],[-43.48209,5.33583],[-29.3325,2.33596]]],terms_text:"IBGE",overlay:true},{id:"IBGE_BCIM_Gerador_Eletrica",name:"IBGE-BCIM-Estações Geradora de Energia Elétrica",type:"wms",template:"http://www.geoservicos.ibge.gov.br/geoserver/wms?service=WMS&version=1.1.0&request=GetMap&layers=CCAR:BCIM_Est_Gerad_Energia_Eletrica_P&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}&FORMAT=image%2Fpng&TRANSPARENT=TRUE",projection:"EPSG:3857",polygon:[[[-29.3325,2.33596],[-28.72472,2.03155],[-27.76041,-8.93703],[-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.83894],[-66.52331,-9.98587],[-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.66908],[-71.27536,-10.08971],[-72.18053,-10.09967],[-72.41623,-9.5874],[-73.29207,-9.45415],[-73.0625,-9.01727],[-73.61432,-8.40982],[-74.09056,-7.52755],[-74.03652,-7.27885],[-73.84718,-7.23829],[-73.78618,-6.77487],[-73.22362,-6.43011],[-73.33719,-6.02974],[-72.93016,-5.03871],[-71.93973,-4.42503],[-70.96802,-4.24829],[-70.79598,-4.06493],[-70.02393,-4.16735],[-69.51025,-1.13409],[-69.70776,-0.56762],[-70.13645,-0.22616],[-70.14083,0.5844],[-69.26594,0.8065],[-69.34226,0.96892],[-69.92481,1.01571],[-69.92343,1.77385],[-68.38511,1.82943],[-68.24848,2.11981],[-67.94571,1.94842],[-67.37696,2.32747],[-67.05751,1.85834],[-67.00579,1.2916],[-66.79967,1.31468],[-66.28683,0.85771],[-65.67671,1.11115],[-65.42494,0.96655],[-65.15671,1.24203],[-64.27483,1.60159],[-64.0486,2.06514],[-63.47236,2.27936],[-64.13446,2.43391],[-64.10005,2.72378],[-64.32628,3.11828],[-64.28142,3.54198],[-64.88451,4.11767],[-64.88064,4.34246],[-64.13653,4.22315],[-63.95465,4.02132],[-63.17706,4.0483],[-62.96093,3.76366],[-62.82024,4.10602],[-62.49922,4.27081],[-61.91181,4.26284],[-61.35393,4.6301],[-61.04904,4.62312],[-60.70452,4.96985],[-60.78709,5.29676],[-60.22457,5.37121],[-59.89857,5.10754],[-59.97549,4.60302],[-59.59676,4.43987],[-59.41942,3.96994],[-59.71017,3.54201],[-59.88955,2.72301],[-59.63006,2.31633],[-59.63382,1.96658],[-59.18812,1.47808],[-58.80545,1.32073],[-58.35933,1.68993],[-57.6,1.80391],[-57.39854,2.06512],[-57.12392,2.12876],[-56.02925,1.94945],[-56.23884,2.26335],[-55.98195,2.62866],[-55.64816,2.51995],[-54.93958,2.68251],[-54.24988,2.25056],[-53.73937,2.47373],[-52.98578,2.28049],[-52.65712,2.56407],[-52.41739,3.22121],[-51.73983,4.11916],[-51.7246,4.55687],[-51.0112,5.5229],[-43.48209,5.33583],[-29.3325,2.33596]]],terms_text:"IBGE",overlay:true},{id:"IBGE_BCIM_Municipio",name:"IBGE-BCIM-Município",type:"wms",template:"http://www.geoservicos.ibge.gov.br/geoserver/wms?service=WMS&version=1.1.0&request=GetMap&layers=CCAR:BCIM_Municipio_A&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}&FORMAT=image%2Fpng&TRANSPARENT=TRUE",projection:"EPSG:3857",polygon:[[[-29.3325,2.33596],[-28.72472,2.03155],[-27.76041,-8.93703],[-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.83894],[-66.52331,-9.98587],[-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.66908],[-71.27536,-10.08971],[-72.18053,-10.09967],[-72.41623,-9.5874],[-73.29207,-9.45415],[-73.0625,-9.01727],[-73.61432,-8.40982],[-74.09056,-7.52755],[-74.03652,-7.27885],[-73.84718,-7.23829],[-73.78618,-6.77487],[-73.22362,-6.43011],[-73.33719,-6.02974],[-72.93016,-5.03871],[-71.93973,-4.42503],[-70.96802,-4.24829],[-70.79598,-4.06493],[-70.02393,-4.16735],[-69.51025,-1.13409],[-69.70776,-0.56762],[-70.13645,-0.22616],[-70.14083,0.5844],[-69.26594,0.8065],[-69.34226,0.96892],[-69.92481,1.01571],[-69.92343,1.77385],[-68.38511,1.82943],[-68.24848,2.11981],[-67.94571,1.94842],[-67.37696,2.32747],[-67.05751,1.85834],[-67.00579,1.2916],[-66.79967,1.31468],[-66.28683,0.85771],[-65.67671,1.11115],[-65.42494,0.96655],[-65.15671,1.24203],[-64.27483,1.60159],[-64.0486,2.06514],[-63.47236,2.27936],[-64.13446,2.43391],[-64.10005,2.72378],[-64.32628,3.11828],[-64.28142,3.54198],[-64.88451,4.11767],[-64.88064,4.34246],[-64.13653,4.22315],[-63.95465,4.02132],[-63.17706,4.0483],[-62.96093,3.76366],[-62.82024,4.10602],[-62.49922,4.27081],[-61.91181,4.26284],[-61.35393,4.6301],[-61.04904,4.62312],[-60.70452,4.96985],[-60.78709,5.29676],[-60.22457,5.37121],[-59.89857,5.10754],[-59.97549,4.60302],[-59.59676,4.43987],[-59.41942,3.96994],[-59.71017,3.54201],[-59.88955,2.72301],[-59.63006,2.31633],[-59.63382,1.96658],[-59.18812,1.47808],[-58.80545,1.32073],[-58.35933,1.68993],[-57.6,1.80391],[-57.39854,2.06512],[-57.12392,2.12876],[-56.02925,1.94945],[-56.23884,2.26335],[-55.98195,2.62866],[-55.64816,2.51995],[-54.93958,2.68251],[-54.24988,2.25056],[-53.73937,2.47373],[-52.98578,2.28049],[-52.65712,2.56407],[-52.41739,3.22121],[-51.73983,4.11916],[-51.7246,4.55687],[-51.0112,5.5229],[-43.48209,5.33583],[-29.3325,2.33596]]],terms_text:"IBGE",overlay:true},{id:"ign-topografico-tms",name:"IGN topographical map (TMS)",type:"tms",template:"https://ide.ign.gob.ar/geoservicios/rest/services/Mapas_IGN/mapa_topografico/MapServer/tile/{zoom}/{y}/{x}",zoomExtent:[1,20],polygon:[[[-55.5438,-35.77219],[-64.31743,-49.44788],[-61.52546,-55.68296],[-66.04226,-55.24192],[-66.6896,-55.17191],[-66.86233,-55.04496],[-67.23387,-54.9245],[-67.47633,-54.92785],[-67.71808,-54.91261],[-67.96138,-54.88571],[-68.18753,-54.89288],[-68.61804,-54.92151],[-68.66375,-52.66716],[-68.51023,-52.39432],[-70.01629,-52.05707],[-72.05562,-52.01749],[-72.09055,-51.93758],[-72.02273,-51.88832],[-72.49598,-51.597],[-72.3623,-51.25935],[-72.46252,-51.08654],[-72.31217,-50.90093],[-72.39293,-50.69005],[-72.49148,-50.66866],[-72.59646,-50.73916],[-72.76983,-50.68829],[-73.22154,-50.87193],[-73.22709,-50.66897],[-73.39438,-50.58008],[-73.57703,-50.15788],[-73.53993,-50.01443],[-73.61453,-49.91795],[-73.52684,-49.7716],[-73.02779,-49.70085],[-73.02788,-49.23743],[-73.16148,-49.13062],[-72.96385,-48.89084],[-72.80952,-48.90039],[-72.59462,-48.77255],[-72.63621,-48.45823],[-72.46698,-48.45706],[-72.42158,-48.31422],[-72.3428,-48.29046],[-72.37166,-48.15995],[-72.57678,-47.96054],[-72.5731,-47.72062],[-72.3839,-47.57888],[-72.38448,-47.41759],[-72.07162,-47.2755],[-72.04726,-47.14867],[-71.93566,-47.15037],[-72.00956,-47.08473],[-72.00759,-46.78833],[-71.71488,-46.64453],[-71.7985,-46.26925],[-71.97019,-46.14972],[-71.63332,-45.97063],[-71.66595,-45.89232],[-71.77408,-45.85187],[-71.8548,-45.61169],[-71.7885,-45.50505],[-71.58354,-45.45607],[-71.58236,-45.36316],[-71.40574,-45.27206],[-71.61593,-45.03146],[-72.07949,-44.93988],[-72.11766,-44.73884],[-71.47444,-44.68048],[-71.2897,-44.75036],[-71.28469,-44.60892],[-71.20209,-44.5359],[-71.40536,-44.44891],[-71.86374,-44.44274],[-71.9047,-44.10354],[-71.70007,-43.98287],[-71.78725,-43.80985],[-71.63263,-43.65888],[-71.87866,-43.56195],[-71.95542,-43.44292],[-71.91512,-43.319],[-71.80268,-43.29535],[-71.73869,-43.19234],[-71.94149,-43.11061],[-72.18001,-42.8948],[-72.18733,-42.66619],[-72.06314,-42.53751],[-72.0441,-42.41231],[-72.14365,-42.40333],[-72.20024,-42.17229],[-72.17802,-42.13207],[-72.06032,-42.10593],[-71.78041,-42.12128],[-71.83133,-41.78089],[-71.94135,-41.60926],[-71.9023,-41.06778],[-72.02097,-40.73647],[-71.91507,-40.61832],[-71.87117,-40.38959],[-71.76665,-40.35676],[-71.87961,-40.24227],[-71.8856,-40.10093],[-71.67779,-39.92156],[-71.74365,-39.86164],[-71.77001,-39.61946],[-71.68665,-39.50983],[-71.58545,-39.55159],[-71.45202,-39.31025],[-71.47673,-38.89162],[-71.25594,-38.74909],[-70.95844,-38.70272],[-70.89411,-38.57644],[-71.03346,-38.45451],[-71.08724,-38.09054],[-71.23505,-37.86541],[-71.26668,-37.68295],[-71.18031,-37.4828],[-71.27241,-37.28686],[-71.17697,-37.1077],[-71.27586,-36.9637],[-71.20495,-36.91075],[-71.2345,-36.83303],[-71.07654,-36.43571],[-70.96469,-36.43366],[-70.90086,-36.34336],[-70.77062,-36.35412],[-70.59553,-36.12118],[-70.44219,-36.14876],[-70.42788,-35.73781],[-70.50607,-35.38014],[-70.59764,-35.34459],[-70.63128,-35.23712],[-70.42629,-35.12462],[-70.32933,-34.83081],[-70.35687,-34.72532],[-70.07752,-34.38253],[-70.06901,-34.24694],[-69.87771,-34.20233],[-69.95948,-33.77235],[-69.83371,-33.34911],[-70.02502,-33.37388],[-70.14906,-33.04145],[-70.06223,-33.01233],[-70.00981,-32.90747],[-70.19517,-32.75732],[-70.19589,-32.50891],[-70.28486,-32.45564],[-70.44343,-32.05325],[-70.41077,-31.9809],[-70.29402,-31.95849],[-70.5117,-31.85844],[-70.62295,-31.59949],[-70.59941,-31.29869],[-70.5377,-31.08557],[-70.35748,-31.0002],[-70.20264,-30.32249],[-69.97775,-30.32288],[-69.847,-30.16294],[-70.01824,-30.10003],[-69.95038,-29.73744],[-70.03755,-29.35428],[-69.97565,-29.18743],[-69.85112,-29.06923],[-69.70118,-28.37779],[-69.20484,-27.90816],[-68.84844,-27.13115],[-68.76133,-27.08588],[-68.60693,-27.09636],[-68.3489,-26.92771],[-68.64137,-26.50722],[-68.60352,-26.25391],[-68.45177,-26.1377],[-68.63052,-25.43524],[-68.55582,-25.14476],[-68.44595,-25.0658],[-68.62011,-24.81717],[-68.55162,-24.58836],[-68.28078,-24.34935],[-67.32648,-24.02538],[-66.99882,-23.00044],[-67.18775,-22.81375],[-67.08088,-22.62433],[-67.03366,-22.53815],[-66.84345,-22.39746],[-66.73734,-22.22282],[-66.38248,-22.07602],[-66.28978,-21.76554],[-66.21845,-21.72575],[-65.89675,-21.88263],[-65.71368,-22.09054],[-65.61493,-22.09152],[-65.60973,-22.09505],[-65.60607,-22.09358],[-65.60256,-22.09658],[-65.60015,-22.09543],[-65.59229,-22.09511],[-65.59015,-22.09735],[-65.58691,-22.09645],[-65.58512,-22.08432],[-65.57523,-22.07312],[-65.47487,-22.08487],[-64.99026,-22.06739],[-64.59768,-22.19269],[-64.52643,-22.29504],[-64.33114,-22.68517],[-64.10381,-22.34114],[-64.10712,-22.32023],[-64.06522,-22.23093],[-64.04702,-22.23757],[-64.03654,-22.19469],[-64.0029,-22.10735],[-63.99022,-22.07925],[-63.97147,-22.07619],[-63.94118,-21.99823],[-63.70932,-21.99896],[-63.68839,-22.01037],[-63.68079,-22.03116],[-63.68507,-22.04019],[-63.68156,-22.05185],[-63.67659,-22.03287],[-63.67201,-22.02293],[-63.66821,-22.01634],[-63.67191,-22.01399],[-63.66566,-21.99839],[-62.79606,-21.98778],[-62.74618,-22.10033],[-62.18511,-22.50843],[-61.93761,-22.97376],[-61.45605,-23.36182],[-61.05842,-23.56621],[-60.95137,-23.75997],[-60.28746,-24.01906],[-60.03728,-24.00408],[-59.46607,-24.33428],[-59.12256,-24.59772],[-58.46645,-24.84584],[-58.332,-24.98132],[-58.2349,-24.91756],[-57.8565,-25.08005],[-57.76981,-25.15013],[-57.75374,-25.17277],[-57.71597,-25.26456],[-57.71837,-25.27146],[-57.71111,-25.27265],[-57.71008,-25.28146],[-57.70692,-25.2845],[-57.70438,-25.28159],[-57.70273,-25.28239],[-57.70175,-25.28459],[-57.69741,-25.28283],[-57.69281,-25.28588],[-57.69733,-25.29337],[-57.70246,-25.29847],[-57.69612,-25.30832],[-57.69763,-25.3199],[-57.69143,-25.32127],[-57.67993,-25.33318],[-57.64822,-25.3679],[-57.63902,-25.38287],[-57.61504,-25.38841],[-57.59954,-25.39704],[-57.57673,-25.42029],[-57.56698,-25.43147],[-57.55477,-25.43999],[-57.55285,-25.44705],[-57.55811,-25.45717],[-57.55763,-25.46897],[-57.56523,-25.48014],[-57.56806,-25.49501],[-57.57722,-25.50575],[-57.57566,-25.52264],[-57.5661,-25.54112],[-57.56809,-25.55797],[-57.58142,-25.57145],[-57.59952,-25.57438],[-57.60444,-25.59855],[-57.6122,-25.61963],[-57.6367,-25.61807],[-57.66569,-25.60273],[-57.67006,-25.65579],[-57.67513,-25.66052],[-57.68626,-25.66287],[-57.69808,-25.65933],[-57.71855,-25.64914],[-57.72537,-25.71924],[-57.77786,-25.77559],[-57.84986,-26.01142],[-58.08597,-26.14202],[-58.13896,-26.66834],[-58.28224,-26.80127],[-58.32056,-26.82169],[-58.3167,-26.86081],[-58.32384,-26.87074],[-58.56858,-27.20629],[-57.90834,-27.24265],[-56.99114,-27.41858],[-56.60886,-27.36586],[-56.40607,-27.52701],[-56.32355,-27.36897],[-56.09353,-27.25219],[-55.76168,-27.38106],[-55.65541,-27.30153],[-55.67524,-27.17004],[-55.59643,-27.06538],[-55.40826,-26.91763],[-55.20788,-26.89214],[-54.97304,-26.63717],[-54.8532,-26.59894],[-54.72264,-26.31238],[-54.73235,-25.98554],[-54.65309,-25.84138],[-54.71357,-25.66721],[-54.62995,-25.55106],[-54.44288,-25.5795],[-54.11451,-25.4396],[-53.80059,-25.65093],[-53.766,-25.94301],[-53.59024,-26.19274],[-53.67264,-26.61495],[-53.61669,-26.95395],[-53.76351,-27.18917],[-54.15393,-27.36033],[-54.26461,-27.49923],[-54.79439,-27.6397],[-55.0044,-27.90341],[-55.19076,-27.92946],[-55.41589,-28.14304],[-55.66542,-28.26547],[-55.61633,-28.32205],[-55.65957,-28.46539],[-55.83413,-28.42136],[-55.87339,-28.49468],[-56.13558,-28.7265],[-56.37343,-29.10817],[-56.569,-29.13892],[-56.76306,-29.48638],[-57.05958,-29.72263],[-57.24463,-29.86452],[-57.3045,-30.03966],[-57.61942,-30.20517],[-57.60863,-30.32424],[-57.82983,-30.53118],[-57.75241,-30.68756],[-57.75273,-30.91942],[-57.93419,-31.27388],[-57.99,-31.36053],[-57.98302,-31.3734],[-57.97736,-31.38022],[-57.97778,-31.38599],[-57.98203,-31.39213],[-58.00944,-31.41341],[-58.06637,-31.47395],[-57.92613,-31.57745],[-57.98622,-31.77449],[-58.12179,-31.89772],[-58.11905,-32.14059],[-58.04227,-32.29153],[-58.14327,-32.45845],[-58.0758,-33.00587],[-58.18964,-33.09402],[-58.2723,-33.1061],[-58.31012,-33.1048],[-58.35418,-33.1221],[-58.37567,-33.17644],[-58.44465,-33.5853],[-58.43016,-33.71813],[-58.42434,-33.86887],[-58.41858,-33.91742],[-58.33697,-34.00477],[-58.241,-34.16246],[-57.84696,-34.50017],[-55.5438,-35.77219]]],terms_url:"http://www.ign.gob.ar/",terms_text:"Instituto Geográfico Nacional de la República Argentina",icon:"http://www.ign.gob.ar/sites/default/files/favicon.png"},{id:"Haiti-Drone",name:"Imagerie Drone (Haiti)",type:"tms",template:"http://wms.openstreetmap.fr/tms/1.0.0/iomhaiti/{zoom}/{x}/{y}",zoomExtent:[0,21],polygon:[[[-72.15474,19.6879],[-72.15458,19.6878],[-72.15485,19.68776],[-72.15472,19.68685],[-72.15431,19.68707],[-72.15463,19.68544],[-72.15301,19.68499],[-72.15086,19.68435],[-72.15045,19.68479],[-72.15078,19.68315],[-72.15223,19.6833],[-72.15282,19.68066],[-72.15186,19.68051],[-72.15191,19.68034],[-72.15227,19.68035],[-72.15238,19.67972],[-72.15328,19.67965],[-72.15333,19.67698],[-72.15308,19.67694],[-72.15348,19.67638],[-72.14878,19.67107],[-72.13664,19.67081],[-72.13557,19.67408],[-72.13573,19.68351],[-72.13679,19.68407],[-72.13695,19.68559],[-72.13778,19.685],[-72.13782,19.68727],[-72.13888,19.68767],[-72.13881,19.69013],[-72.13853,19.68949],[-72.13806,19.68964],[-72.13869,19.69232],[-72.13825,19.69276],[-72.13948,19.69737],[-72.14101,19.7],[-72.1437,19.70112],[-72.14851,19.70015],[-72.14772,19.70268],[-72.14874,19.7029],[-72.1616,19.70357],[-72.16578,19.698],[-72.165,19.69324],[-72.16223,19.68901],[-72.15474,19.6879]],[[-72.13106,19.67189],[-72.12598,19.67728],[-72.12554,19.67762],[-72.12169,19.67764],[-72.11497,19.6726],[-72.11527,19.66872],[-72.11982,19.66275],[-72.12278,19.66257],[-72.1249,19.6627],[-72.12858,19.66454],[-72.13081,19.66617],[-72.13167,19.66879],[-72.13156,19.671],[-72.13106,19.67189]],[[-71.84579,19.67098],[-71.84294,19.67595],[-71.841,19.67595],[-71.83802,19.67553],[-71.83787,19.6745],[-71.83905,19.67439],[-71.83901,19.67411],[-71.83984,19.67395],[-71.83891,19.67361],[-71.83802,19.67209],[-71.83801,19.67263],[-71.83767,19.67272],[-71.83763,19.67254],[-71.83544,19.67321],[-71.83533,19.673],[-71.83312,19.67346],[-71.83267,19.67168],[-71.83216,19.67209],[-71.83072,19.66949],[-71.8306,19.66976],[-71.83022,19.66989],[-71.82918,19.66721],[-71.82907,19.66721],[-71.82891,19.66679],[-71.82895,19.66662],[-71.82883,19.66635],[-71.82856,19.66648],[-71.82887,19.66725],[-71.82876,19.66741],[-71.8278,19.66782],[-71.82771,19.66786],[-71.82783,19.66796],[-71.82718,19.66812],[-71.82718,19.66809],[-71.82644,19.66839],[-71.82641,19.66832],[-71.8262,19.66843],[-71.82618,19.66836],[-71.82589,19.66842],[-71.82589,19.66866],[-71.82516,19.66875],[-71.82545,19.66916],[-71.82293,19.66957],[-71.82271,19.66967],[-71.82277,19.66976],[-71.82018,19.67099],[-71.81985,19.67045],[-71.8198,19.6706],[-71.81947,19.67076],[-71.81825,19.67134],[-71.81814,19.67114],[-71.81758,19.67143],[-71.81696,19.67077],[-71.81764,19.6719],[-71.81714,19.67204],[-71.81582,19.6718],[-71.81384,19.67119],[-71.81233,19.6707],[-71.81218,19.67043],[-71.81243,19.67015],[-71.81192,19.67001],[-71.81188,19.67058],[-71.81117,19.67035],[-71.80959,19.66985],[-71.8078,19.66928],[-71.8056,19.66861],[-71.80514,19.66689],[-71.80512,19.66523],[-71.80523,19.66198],[-71.80656,19.65239],[-71.80734,19.64829],[-71.80997,19.64683],[-71.81475,19.64545],[-71.81477,19.64556],[-71.815,19.64551],[-71.81495,19.64538],[-71.81599,19.64502],[-71.81589,19.64489],[-71.81659,19.64461],[-71.81901,19.6438],[-71.82115,19.64345],[-71.82216,19.64333],[-71.8269,19.64321],[-71.82805,19.64322],[-71.83045,19.64408],[-71.83064,19.64486],[-71.82953,19.64504],[-71.82961,19.64561],[-71.82994,19.64557],[-71.83037,19.64517],[-71.83047,19.64535],[-71.83081,19.6452],[-71.83102,19.64511],[-71.83125,19.64585],[-71.83111,19.64582],[-71.83137,19.64659],[-71.83289,19.64619],[-71.83446,19.64571],[-71.83447,19.64631],[-71.83422,19.64619],[-71.8342,19.64655],[-71.83467,19.6463],[-71.83491,19.64639],[-71.8348,19.64622],[-71.83544,19.64585],[-71.8355,19.6458],[-71.83647,19.64613],[-71.83764,19.64727],[-71.83791,19.64789],[-71.83905,19.6508],[-71.84569,19.66962],[-71.84579,19.67098]],[[-72.09888,18.54843],[-72.09907,18.54838],[-72.09991,18.54809],[-72.10234,18.54813],[-72.10252,18.54814],[-72.10229,18.54826],[-72.10229,18.54828],[-72.10256,18.54815],[-72.10272,18.54814],[-72.10343,18.54871],[-72.10354,18.5489],[-72.10352,18.54974],[-72.10349,18.54974],[-72.10351,18.55003],[-72.10285,18.55018],[-72.1029,18.55025],[-72.10287,18.55031],[-72.10352,18.55024],[-72.1035,18.55152],[-72.10338,18.55152],[-72.10308,18.55161],[-72.10348,18.55162],[-72.10342,18.55435],[-72.10243,18.5555],[-72.10149,18.55562],[-72.10062,18.55559],[-72.0979,18.55521],[-72.09688,18.55466],[-72.09652,18.55421],[-72.09661,18.55417],[-72.09651,18.55417],[-72.09654,18.55398],[-72.09644,18.55355],[-72.09628,18.55357],[-72.09621,18.5532],[-72.09599,18.55337],[-72.09564,18.55267],[-72.09556,18.55185],[-72.09685,18.55035],[-72.09729,18.55032],[-72.09699,18.5502],[-72.09888,18.54843]],[[-72.25425,18.56826],[-72.25603,18.57178],[-72.25579,18.5748],[-72.2535,18.57555],[-72.25228,18.57555],[-72.24999,18.57409],[-72.24739,18.56983],[-72.24601,18.56673],[-72.24585,18.56295],[-72.24794,18.56254],[-72.25015,18.5628],[-72.25192,18.56508],[-72.25425,18.56826]],[[-72.30315,18.53327],[-72.30313,18.53318],[-72.30483,18.53111],[-72.30974,18.53111],[-72.31643,18.53243],[-72.32341,18.53661],[-72.32614,18.53878],[-72.32619,18.54264],[-72.31705,18.55406],[-72.31309,18.55406],[-72.29875,18.54533],[-72.29886,18.54073],[-72.2963,18.54047],[-72.29546,18.53952],[-72.29619,18.53386],[-72.29719,18.53322],[-72.3007,18.53328],[-72.30227,18.53423],[-72.30285,18.53352],[-72.3031,18.53334],[-72.30318,18.5334],[-72.30358,18.53356],[-72.30308,18.53465],[-72.30371,18.53399],[-72.30453,18.53441],[-72.3044,18.53451],[-72.30627,18.53526],[-72.30631,18.53527],[-72.30612,18.53576],[-72.30612,18.53582],[-72.30637,18.53589],[-72.30627,18.53549],[-72.30667,18.53509],[-72.3062,18.53497],[-72.30589,18.53494],[-72.30554,18.53468],[-72.30549,18.53461],[-72.30556,18.53451],[-72.30467,18.53423],[-72.30476,18.53388],[-72.30433,18.53375],[-72.30426,18.53363],[-72.30315,18.53327]],[[-72.29814,18.4775],[-72.29357,18.49486],[-72.29222,18.49643],[-72.29317,18.49725],[-72.28923,18.50571],[-72.28781,18.5081],[-72.28505,18.51199],[-72.28402,18.51132],[-72.28086,18.51588],[-72.27732,18.5176],[-72.27235,18.51752],[-72.26627,18.51446],[-72.26659,18.50668],[-72.26926,18.50462],[-72.2662,18.50298],[-72.26882,18.49652],[-72.26915,18.49594],[-72.27027,18.49615],[-72.27027,18.4956],[-72.26907,18.49557],[-72.26929,18.49377],[-72.2737,18.486],[-72.27467,18.48504],[-72.27518,18.4834],[-72.27654,18.48134],[-72.27735,18.4815],[-72.2783,18.48097],[-72.27785,18.4807],[-72.2771,18.48012],[-72.279,18.47758],[-72.27972,18.47729],[-72.28064,18.47764],[-72.28137,18.47716],[-72.28084,18.47698],[-72.28128,18.47584],[-72.28232,18.47518],[-72.28516,18.4751],[-72.28499,18.47637],[-72.28544,18.47698],[-72.28628,18.47563],[-72.28693,18.47547],[-72.2866,18.47519],[-72.2866,18.475],[-72.29098,18.47473],[-72.29466,18.47494],[-72.29739,18.47684],[-72.29814,18.4775]],[[-72.34667,18.52224],[-72.34683,18.52443],[-72.34753,18.52776],[-72.34555,18.52911],[-72.34031,18.52922],[-72.33833,18.52803],[-72.3369,18.53012],[-72.33381,18.52967],[-72.32893,18.52708],[-72.32865,18.52533],[-72.32921,18.52327],[-72.33041,18.52205],[-72.33216,18.52218],[-72.33225,18.5192],[-72.33692,18.51836],[-72.3382,18.51847],[-72.33815,18.51818],[-72.3412,18.51779],[-72.34549,18.5172],[-72.34926,18.51728],[-72.35043,18.51889],[-72.35035,18.52061],[-72.34968,18.52204],[-72.34667,18.52224]],[[-72.33031,18.54865],[-72.34297,18.55081],[-72.34332,18.55306],[-72.34131,18.56143],[-72.33906,18.56136],[-72.33847,18.56383],[-72.33753,18.56543],[-72.33484,18.56506],[-72.33118,18.56383],[-72.33121,18.56162],[-72.32321,18.56069],[-72.32124,18.5596],[-72.3208,18.5587],[-72.32088,18.55788],[-72.32595,18.55803],[-72.32662,18.5582],[-72.32592,18.55775],[-72.3251,18.55738],[-72.32338,18.55226],[-72.3246,18.54785],[-72.3289,18.54837],[-72.32998,18.54895],[-72.33031,18.54865]],[[-72.32314,18.52698],[-72.32234,18.52807],[-72.32096,18.52797],[-72.32078,18.52713],[-72.32085,18.52537],[-72.32146,18.52496],[-72.32257,18.52489],[-72.32285,18.52533],[-72.32324,18.52648],[-72.32314,18.52698]],[[-72.21608,18.64578],[-72.21596,18.65538],[-72.20303,18.65583],[-72.19471,18.65534],[-72.19222,18.65456],[-72.19206,18.65213],[-72.19348,18.64776],[-72.20125,18.63852],[-72.20693,18.63882],[-72.2121,18.64241],[-72.21181,18.64306],[-72.21217,18.64269],[-72.2128,18.64276],[-72.21347,18.64313],[-72.21356,18.64375],[-72.21542,18.64439],[-72.21589,18.64503],[-72.21608,18.64578]],[[-72.28677,18.6482],[-72.2901,18.65274],[-72.28981,18.65365],[-72.29007,18.65427],[-72.29072,18.65377],[-72.29103,18.65447],[-72.29125,18.65422],[-72.29168,18.65589],[-72.29122,18.65661],[-72.29227,18.65597],[-72.29269,18.65675],[-72.29307,18.65673],[-72.29413,18.65818],[-72.29602,18.66084],[-72.29597,18.66191],[-72.29329,18.66457],[-72.29067,18.666],[-72.28959,18.66613],[-72.28959,18.66657],[-72.2877,18.66647],[-72.28758,18.66766],[-72.28312,18.66972],[-72.27965,18.66965],[-72.27843,18.66908],[-72.2784,18.66877],[-72.27774,18.66917],[-72.27744,18.66914],[-72.27701,18.66832],[-72.27656,18.66811],[-72.27654,18.66806],[-72.27523,18.66852],[-72.27493,18.66746],[-72.27464,18.66743],[-72.27347,18.66821],[-72.27323,18.66827],[-72.27268,18.66716],[-72.27191,18.66743],[-72.27188,18.66734],[-72.26881,18.66819],[-72.26883,18.66718],[-72.26908,18.66682],[-72.26881,18.66679],[-72.26811,18.66707],[-72.26763,18.66738],[-72.26756,18.66669],[-72.26686,18.66695],[-72.26559,18.66736],[-72.26545,18.66701],[-72.26475,18.66741],[-72.26299,18.66819],[-72.26285,18.66818],[-72.26265,18.66761],[-72.2623,18.66771],[-72.26248,18.66792],[-72.26248,18.66823],[-72.26231,18.66826],[-72.2621,18.66797],[-72.26228,18.66892],[-72.26015,18.6689],[-72.25427,18.66879],[-72.25054,18.66835],[-72.25044,18.66954],[-72.24779,18.66989],[-72.24152,18.66979],[-72.24142,18.67419],[-72.23892,18.67398],[-72.23872,18.67346],[-72.23837,18.67331],[-72.2387,18.67395],[-72.23755,18.6739],[-72.23742,18.67351],[-72.23774,18.67334],[-72.23751,18.67326],[-72.23684,18.67349],[-72.23644,18.67241],[-72.23551,18.6726],[-72.2354,18.67242],[-72.2353,18.6729],[-72.23455,18.67269],[-72.23431,18.67246],[-72.23424,18.67347],[-72.23341,18.67346],[-72.23329,18.6733],[-72.23274,18.67329],[-72.23271,18.6735],[-72.2277,18.67253],[-72.22653,18.67165],[-72.2268,18.67157],[-72.2275,18.67159],[-72.22749,18.67145],[-72.22729,18.67146],[-72.22728,18.6713],[-72.22721,18.67136],[-72.22618,18.67137],[-72.2256,18.67088],[-72.22551,18.66945],[-72.22611,18.66969],[-72.22618,18.66959],[-72.22598,18.66955],[-72.22578,18.66914],[-72.22533,18.66946],[-72.22497,18.66947],[-72.22458,18.66788],[-72.22355,18.6677],[-72.22359,18.66759],[-72.22246,18.66763],[-72.22237,18.66702],[-72.22233,18.66709],[-72.22192,18.66703],[-72.22081,18.6669],[-72.22081,18.66653],[-72.22087,18.66636],[-72.2206,18.66681],[-72.22039,18.66664],[-72.21843,18.66505],[-72.21829,18.6641],[-72.21835,18.66084],[-72.21872,18.66065],[-72.21869,18.6606],[-72.21873,18.66045],[-72.21898,18.66032],[-72.21878,18.6602],[-72.2187,18.66024],[-72.21858,18.66004],[-72.21861,18.66],[-72.21878,18.66013],[-72.219,18.66002],[-72.21891,18.65991],[-72.21897,18.65979],[-72.21838,18.65958],[-72.21847,18.65397],[-72.2201,18.65116],[-72.2258,18.64695],[-72.2283,18.64573],[-72.23793,18.64586],[-72.23776,18.6447],[-72.24004,18.64325],[-72.2456,18.64335],[-72.24827,18.64504],[-72.24875,18.64367],[-72.25111,18.64298],[-72.25124,18.64334],[-72.25126,18.64316],[-72.25148,18.64314],[-72.25133,18.64297],[-72.25336,18.64235],[-72.25352,18.64268],[-72.25395,18.64254],[-72.25415,18.64293],[-72.25439,18.64287],[-72.25438,18.64275],[-72.25642,18.64232],[-72.25669,18.64314],[-72.25688,18.64286],[-72.25682,18.64253],[-72.25884,18.6421],[-72.25889,18.64225],[-72.25926,18.64223],[-72.25965,18.64241],[-72.25922,18.64069],[-72.25995,18.64048],[-72.26012,18.64063],[-72.26012,18.63994],[-72.26153,18.63947],[-72.26261,18.6391],[-72.26545,18.63873],[-72.27194,18.63868],[-72.2722,18.63886],[-72.27303,18.63942],[-72.27317,18.64126],[-72.27387,18.64103],[-72.27422,18.64161],[-72.27522,18.6417],[-72.27545,18.64157],[-72.27555,18.64169],[-72.27554,18.64175],[-72.27647,18.64186],[-72.27675,18.6419],[-72.2763,18.6426],[-72.27742,18.643],[-72.27798,18.64272],[-72.27858,18.64313],[-72.27857,18.64323],[-72.2789,18.64335],[-72.27985,18.64397],[-72.28587,18.64697],[-72.28677,18.6482]],[[-72.55572,18.53059],[-72.55559,18.5367],[-72.555,18.53797],[-72.5488,18.53792],[-72.54866,18.53728],[-72.54884,18.53063],[-72.54937,18.5301],[-72.55513,18.53012],[-72.55572,18.53059]],[[-72.62353,18.50799],[-72.62344,18.50952],[-72.62261,18.51043],[-72.62049,18.51185],[-72.61834,18.51075],[-72.61622,18.50832],[-72.61626,18.50647],[-72.61866,18.50444],[-72.6204,18.5045],[-72.62283,18.507],[-72.62353,18.50799]]]},{id:"osmim-imagicode-S2A_R119_N09_20160327T050917",name:"imagico.de: Adams Bridge",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=S2A_R119_N09_20160327T050917&z={zoom}&x={x}&y={-y}",endDate:"2016-03-27T00:00:00.000Z",startDate:"2016-03-27T00:00:00.000Z",zoomExtent:[0,14],polygon:[[[79.01779,8.82757],[79.01402,9.64678],[80.17642,9.65042],[80.17728,8.8313],[79.01779,8.82757]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Supplementing incomplete coverage in other sources (true color)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-LC80700162014211LGN00",name:"imagico.de: Alaska Range",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=LC80700162014211LGN00&z={zoom}&x={x}&y={-y}",endDate:"2014-07-31T00:00:00.000Z",startDate:"2014-07-31T00:00:00.000Z",zoomExtent:[0,12],polygon:[[[-152.70873,62.30357],[-152.70839,62.58153],[-152.00835,63.54646],[-148.99432,63.5333],[-148.99432,62.30357],[-152.70873,62.30357]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Recent summer image of the Alaska Range for mapping natural features (true color)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-aral2",name:"imagico.de: Aral Sea (high water level)",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=aral2&z={zoom}&x={x}&y={-y}",endDate:"2016-03-03T00:00:00.000Z",startDate:"2016-03-03T00:00:00.000Z",zoomExtent:[0,13],polygon:[[[58.049,43.2623],[58.049,46.7189],[58.1014,46.8645],[61.5524,46.8629],[61.5524,46.3896],[61.4675,45.3416],[60.6317,43.2623],[58.049,43.2623]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Water and wetland extents, dams etc. - some remaining winter ice in the north (true color)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-aral1",name:"imagico.de: Aral Sea (low water level)",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=aral1&z={zoom}&x={x}&y={-y}",endDate:"2016-09-09T00:00:00.000Z",startDate:"2016-09-09T00:00:00.000Z",zoomExtent:[0,13],polygon:[[[58.049,43.2623],[58.049,46.7334],[58.096,46.8645],[61.5524,46.8629],[61.5524,46.3896],[61.4685,45.3544],[60.6267,43.2623],[58.049,43.2623]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Water and wetland extents, dams etc. (true color)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-S2A_R067_S40_20170417T140051",name:"imagico.de: Bahía Blanca (high tide)",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=S2A_R067_S40_20170417T140051&z={zoom}&x={x}&y={-y}",endDate:"2017-04-17T00:00:00.000Z",startDate:"2017-04-17T00:00:00.000Z",zoomExtent:[0,14],polygon:[[[-62.9988,-40.7327],[-62.9988,-37.9476],[-61.7505,-37.9474],[-61.7501,-40.7322],[-62.9988,-40.7327]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Tidal flats and islands at the coast (true color)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-S2A_R067_S40_20170127T140051",name:"imagico.de: Bahía Blanca (low tide)",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=S2A_R067_S40_20170127T140051&z={zoom}&x={x}&y={-y}",endDate:"2017-01-27T00:00:00.000Z",startDate:"2017-01-27T00:00:00.000Z",zoomExtent:[0,14],polygon:[[[-62.9988,-40.7327],[-62.9988,-37.9476],[-61.7505,-37.9474],[-61.7501,-40.7322],[-62.9988,-40.7327]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Tidal flats and islands at the coast (true color)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-LC81190582014075LGN00",name:"imagico.de: Bakun Reservoir",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=LC81190582014075LGN00&z={zoom}&x={x}&y={-y}",endDate:"2014-03-16T00:00:00.000Z",startDate:"2014-03-16T00:00:00.000Z",zoomExtent:[0,13],polygon:[[[114.36,2.02846],[113.53448,2.03],[113.53619,3.07077],[114.76512,3.06751],[114.76254,2.08816],[114.36,2.02846]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Missing in older pre-2011 images (true color)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-LC81250592016107LGN00",name:"imagico.de: Batam",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=LC81250592016107LGN00&z={zoom}&x={x}&y={-y}",endDate:"2016-01-01T00:00:00.000Z",startDate:"2014-01-01T00:00:00.000Z",zoomExtent:[0,13],polygon:[[[104.00155,-0.00008],[104.00137,1.45099],[104.91015,1.45116],[104.91015,-0.00008],[104.00155,-0.00008]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Missing Islands in OSM (true color)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-LC80770232017156LGN00",name:"imagico.de: Bogoslof Island",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=LC80770232017156LGN00&z={zoom}&x={x}&y={-y}",endDate:"2017-06-05T00:00:00.000Z",startDate:"2017-06-05T00:00:00.000Z",zoomExtent:[0,13],polygon:[[[-168.2544,53.8749],[-168.2544,54.0213],[-167.8591,54.0213],[-167.8591,53.8749],[-168.2544,53.8749]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Recent image from after the eruption (true color)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-LC81800982013291LGN00",name:"imagico.de: Bouvet Island",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=LC81800982013291LGN00&z={zoom}&x={x}&y={-y}",endDate:"2013-10-18T00:00:00.000Z",startDate:"2013-10-18T00:00:00.000Z",zoomExtent:[0,13],polygon:[[[3.24653,-54.47047],[3.24653,-54.37539],[3.46385,-54.37539],[3.46385,-54.47047],[3.24653,-54.47047]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",best:true,description:"For more accurate coastline and glacier mapping (true color)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-S2A_R017_S67_20170223T022551",name:"imagico.de: Bunger Hills",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=S2A_R017_S67_20170223T022551&z={zoom}&x={x}&y={-y}",endDate:"2017-02-23T00:00:00.000Z",startDate:"2017-02-23T00:00:00.000Z",zoomExtent:[0,13],polygon:[[[96.1197,-67.6542],[96.1201,-67.1899],[98.7331,-65.044],[105.1028,-65.044],[105.1028,-65.7224],[103.3017,-67.6542],[96.1197,-67.6542]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Largest ice free area at the East Antarctic coast - shows considerable amounts of non-permanent ice. (true color)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-S2A_R065_N47_20160929T102022",name:"imagico.de: Central 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}",endDate:"2016-09-29T00:00:00.000Z",startDate:"2016-09-29T00:00:00.000Z",zoomExtent:[0,13],polygon:[[[10.55906,45.95485],[7.47396,45.95533],[7.55585,46.2708],[8.0547,47.66469],[11.75245,47.66481],[11.75245,46.81334],[11.38424,45.95509],[10.55906,45.95485]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Up-to-date image for glacier mapping - beware of some fresh snow at higher altitudes (true color)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-LC82050982015344LGN00",name:"imagico.de: Clerke Rocks",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=LC82050982015344LGN00&z={zoom}&x={x}&y={-y}",endDate:"2015-12-10T00:00:00.000Z",startDate:"2015-12-10T00:00:00.000Z",zoomExtent:[0,13],polygon:[[[-34.17701,-55.29693],[-35.19599,-55.28285],[-35.16664,-54.72097],[-34.12517,-54.73465],[-34.1401,-55.29693],[-34.17701,-55.29693]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Missing in other image sources (true color)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-S2A_R086_N60_20160831T213532",name:"imagico.de: Cook Inlet",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=S2A_R086_N60_20160831T213532&z={zoom}&x={x}&y={-y}",endDate:"2016-08-31T00:00:00.000Z",startDate:"2016-08-31T00:00:00.000Z",zoomExtent:[0,13],polygon:[[[-154.5102,59.4577],[-154.5097,60.6888],[-153.5403,62.1718],[-148.0423,62.1718],[-148.0445,61.5342],[-149.7291,59.4584],[-154.5102,59.4577]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Tidal flats and glaciers in surrounding mountains (true color)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-EO1A0040712016264110KF",name:"imagico.de: Coropuna",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=EO1A0040712016264110KF&z={zoom}&x={x}&y={-y}",endDate:"2016-09-21T00:00:00.000Z",startDate:"2016-09-21T00:00:00.000Z",zoomExtent:[0,14],polygon:[[[-72.75945,-15.68684],[-72.75945,-15.4957],[-72.74434,-15.4263],[-72.41286,-15.4263],[-72.41286,-15.65296],[-72.42411,-15.68667],[-72.75945,-15.68684]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Up-to-date image for glacier mapping (true color)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-S2A_R022_N06_20151221T103009",name:"imagico.de: Cotonou",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=S2A_R022_N06_20151221T103009&z={zoom}&x={x}&y={-y}",endDate:"2015-12-21T00:00:00.000Z",startDate:"2015-12-21T00:00:00.000Z",zoomExtent:[0,14],polygon:[[[1.83975,6.2578],[1.83975,7.11427],[2.5494,7.11427],[2.5494,6.48905],[2.49781,6.25806],[1.83975,6.2578]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Patchy and partly cloudy coverage in usual sources (true color)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-S2A_R040_N01_20160311T164128",name:"imagico.de: 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}",endDate:"2016-03-11T00:00:00.000Z",startDate:"2016-03-11T00:00:00.000Z",zoomExtent:[0,14],polygon:[[[-92.05216,1.3213],[-92.05216,1.72181],[-91.74849,1.72181],[-91.74849,1.3213],[-92.05216,1.3213]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Recent image, only old and poor images in other sources currently (true color)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-LC80360072014245LGN00",name:"imagico.de: Eastern Devon Island coast",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=LC80360072014245LGN00&z={zoom}&x={x}&y={-y}",endDate:"2014-09-02T00:00:00.000Z",startDate:"2014-09-02T00:00:00.000Z",zoomExtent:[0,11],polygon:[[[-84.34799,74.38946],[-84.34799,75.8903],[-79.14871,75.8903],[-79.14871,74.38946],[-84.34799,74.38946]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Coastline mostly mapped meanwhile (false color IR)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-LC82160152013239LGN00",name:"imagico.de: Eastern Iceland",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=LC82160152013239LGN00&z={zoom}&x={x}&y={-y}",endDate:"2013-08-27T00:00:00.000Z",startDate:"2013-08-27T00:00:00.000Z",zoomExtent:[0,12],polygon:[[[-13.04701,64.21109],[-15.16496,64.22408],[-15.16805,64.81573],[-13.04357,64.8036],[-13.04701,64.21109]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Missing islets and inaccurate coast (true color)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-AST_L1T_00302052007154424_20150518041444_91492",name:"imagico.de: El Altar",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=AST_L1T_00302052007154424_20150518041444_91492&z={zoom}&x={x}&y={-y}",endDate:"2012-02-05T00:00:00.000Z",startDate:"2012-02-05T00:00:00.000Z",zoomExtent:[0,14],polygon:[[[-78.532,-1.80509],[-78.532,-1.60811],[-78.33562,-1.60811],[-78.33562,-1.80509],[-78.532,-1.80509]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"2007 ASTER image offering better glacier coverage than common sources (true color with estimated blue)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-S2A_R009_S61_20160109",name:"imagico.de: 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}",endDate:"2016-01-09T00:00:00.000Z",startDate:"2016-01-09T00:00:00.000Z",zoomExtent:[0,13],polygon:[[[-56.13476,-61.63472],[-56.13476,-61.19936],[-55.83264,-60.84015],[-53.72343,-60.83982],[-53.72343,-61.63472],[-56.13476,-61.63472]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Fairly clear up-to-date image for updating glacier edges (true color)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-enderby",name:"imagico.de: Enderby Land and Kemp Coast",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=enderby&z={zoom}&x={x}&y={-y}",endDate:"2017-03-27T00:00:00.000Z",startDate:"2017-01-25T00:00:00.000Z",zoomExtent:[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",description:"Sentinel-2 images of Enderby Land and Kemp Coast (true color)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-LC82100502015347LGN00",name:"imagico.de: Fogo, Cape Verde",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=LC82100502015347LGN00&z={zoom}&x={x}&y={-y}",endDate:"2015-12-13T00:00:00.000Z",startDate:"2015-12-13T00:00:00.000Z",zoomExtent:[0,14],polygon:[[[-24.75878,14.74814],[-24.75878,15.09249],[-24.26706,15.09249],[-24.26706,14.74814],[-24.75878,14.74814]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Image from after the 2014/2015 eruption (true color)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-greenland",name:"imagico.de: Greenland mosaic",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=greenland&z={zoom}&x={x}&y={-y}",endDate:"2015-01-01T00:00:00.000Z",startDate:"2013-01-01T00:00:00.000Z",zoomExtent:[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",description:"Landsat mosaic of Greenland (true color)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-S2A_R047_S54_20160411T044330",name:"imagico.de: Heard Island coast",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=S2A_R047_S54_20160411T044330&z={zoom}&x={x}&y={-y}",endDate:"2016-04-12T00:00:00.000Z",startDate:"2016-04-12T00:00:00.000Z",zoomExtent:[0,13],polygon:[[[73.06897,-53.27059],[73.06897,-52.87549],[73.67338,-52.87673],[74.08863,-52.9495],[74.08863,-53.27059],[73.06897,-53.27059]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Recent image of Heard island with interior mostly cloud covered but mostly well visible coast (true color)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-LC82280982013259LGN00",name:"imagico.de: Isla Londonderry",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=LC82280982013259LGN00&z={zoom}&x={x}&y={-y}",endDate:"2013-09-16T00:00:00.000Z",startDate:"2013-09-16T00:00:00.000Z",zoomExtent:[0,12],polygon:[[[-69.8568,-55.55949],[-72.26521,-55.14943],[-72.26521,-54.51089],[-72.08531,-54.17909],[-69.49116,-54.17889],[-69.4915,-55.28379],[-69.62231,-55.5591],[-69.8568,-55.55949]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"A lot of very coarse coastlines could be improved here, much snow cover though so no use for glacier mapping (false color IR)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-dms_kangerlussuaq_20151008",name:"imagico.de: Kangerlussuaq Autumn",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=dms_kangerlussuaq_20151008&z={zoom}&x={x}&y={-y}",endDate:"2015-10-08T00:00:00.000Z",startDate:"2015-10-08T00:00:00.000Z",zoomExtent:[0,17],polygon:[[[-50.6992,66.9888],[-50.721,67.0017],[-50.7341,67.0125],[-50.7396,67.0193],[-50.7396,67.0212],[-50.7158,67.0265],[-50.7017,67.0265],[-50.6829,67.0176],[-50.6686,67.0077],[-50.6638,66.998],[-50.6642,66.9946],[-50.6891,66.9888],[-50.6992,66.9888]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Icebridge DMS image of the airport and settlement - alignment might be poor",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-dms_kangerlussuaq_20160518",name:"imagico.de: Kangerlussuaq Spring",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=dms_kangerlussuaq_20160518&z={zoom}&x={x}&y={-y}",endDate:"2016-05-18T00:00:00.000Z",startDate:"2016-05-18T00:00:00.000Z",zoomExtent:[0,18],polygon:[[[-50.7519,66.9996],[-50.7555,67.0023],[-50.7555,67.0033],[-50.6395,67.0297],[-50.6162,67.0339],[-50.6097,67.0281],[-50.6331,67.022],[-50.7323,66.9996],[-50.7519,66.9996]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Icebridge DMS image of the airport and roads - alignment might be poor",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-S2A_R021_N44_20160807T083013",name:"imagico.de: Kerch Strait",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=S2A_R021_N44_20160807T083013&z={zoom}&x={x}&y={-y}",endDate:"2016-08-07T00:00:00.000Z",startDate:"2016-08-07T00:00:00.000Z",zoomExtent:[0,14],polygon:[[[35.93259,44.96237],[35.93259,45.55926],[37.36991,45.55926],[37.36991,44.96237],[35.93259,44.96237]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"State of bridge construction in August 2016 (true color)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-S2A_R021_N44_20180429T082601",name:"imagico.de: Kerch Strait 2018",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=S2A_R021_N44_20180429T082601&z={zoom}&x={x}&y={-y}",endDate:"2018-04-29T00:00:00.000Z",startDate:"2018-04-29T00:00:00.000Z",zoomExtent:[0,14],polygon:[[[35.8787,45.0348],[35.8787,45.6095],[36.9208,45.6095],[36.9208,45.0348],[35.8787,45.0348]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Bridge and surrounding after completion in April 2018 (true color)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-ls_polar2",name:"imagico.de: Landsat off-nadir July 2016",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=ls_polar2&z={zoom}&x={x}&y={-y}",endDate:"2016-07-17T00:00:00.000Z",startDate:"2016-07-17T00:00:00.000Z",zoomExtent:[0,10],polygon:[[[-79.05175,81.91484],[-79.05175,83.43339],[-73.6039,83.80225],[-26.42449,83.80225],[-21.493,83.50352],[-16.88835,83.15095],[-16.88835,81.91484],[-79.05175,81.91484]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Latest images north of the regular Landsat limit (true color)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-larsen_2018",name:"imagico.de: Larsen C ice shelf after calving",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=larsen_2018&z={zoom}&x={x}&y={-y}",endDate:"2018-01-06T00:00:00.000Z",startDate:"2018-01-06T00:00:00.000Z",zoomExtent:[0,12],polygon:[[[-62.7282,-68.9652],[-64.0489,-68.7318],[-64.0486,-68.5373],[-60.8845,-65.9399],[-59.9187,-65.9389],[-59.1088,-66.0775],[-59.1088,-68.8359],[-59.2544,-68.9652],[-62.7282,-68.9652]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"For updating the ice edge after the 2017 iceberg calving (true color)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-AST_L1T_00311162013112731_20150618142416_109190",name:"imagico.de: 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}",endDate:"2013-11-16T00:00:00.000Z",startDate:"2013-11-16T00:00:00.000Z",zoomExtent:[0,13],polygon:[[[-28.21075,-56.72108],[-28.21075,-56.62498],[-27.96956,-56.62498],[-27.96956,-56.72108],[-28.21075,-56.72108]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Missing in other image sources (true color with estimated blue)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-LC81991002015286LGN00",name:"imagico.de: Leskov Island Landsat",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=LC81991002015286LGN00&z={zoom}&x={x}&y={-y}",endDate:"2015-10-13T00:00:00.000Z",startDate:"2015-10-13T00:00:00.000Z",zoomExtent:[0,13],polygon:[[[-27.99293,-56.73479],[-28.22776,-56.73262],[-28.22416,-56.60075],[-27.96975,-56.60283],[-27.97319,-56.73479],[-27.99293,-56.73479]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Missing in other image sources (true color)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-S2B_R005_S69_20180222T061749",name:"imagico.de: Lützow-Holm Bay",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=S2B_R005_S69_20180222T061749&z={zoom}&x={x}&y={-y}",endDate:"2018-02-22T00:00:00.000Z",startDate:"2018-02-22T00:00:00.000Z",zoomExtent:[0,13],polygon:[[[35.124,-70.3693],[35.1241,-69.2795],[36.3864,-68.4765],[42.2208,-68.4762],[42.2208,-70.3651],[35.124,-70.3693]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Up-to-date late season image or an area poorly mapped in OSM at the moment - lots of sea ice, be careful with distinguishing sea ice from ice shelves and floating glacier tongues. (true color)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-ls_polar",name:"imagico.de: May 2013 off-nadir Landsat",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=ls_polar&z={zoom}&x={x}&y={-y}",endDate:"2013-05-17T00:00:00.000Z",startDate:"2013-05-17T00:00:00.000Z",zoomExtent:[0,10],polygon:[[[-85.76109,81.39333],[-89.83016,82.14952],[-89.83153,82.24405],[-84.99342,82.73099],[-79.95207,83.13108],[-74.55641,83.46267],[-69.35851,83.70451],[-28.20784,83.70451],[-23.06624,83.46532],[-17.96584,83.15518],[-17.96721,82.72386],[-22.78197,81.4419],[-85.76109,81.39333]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"First available image north of the regular Landsat limit, mostly with seasonal snow cover so difficult to interpret (true color)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-S2A_R042_S78_20170214T202521",name:"imagico.de: McMurdo Sound and Dry Valleys",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=S2A_R042_S78_20170214T202521&z={zoom}&x={x}&y={-y}",endDate:"2017-02-14T00:00:00.000Z",startDate:"2017-02-14T00:00:00.000Z",zoomExtent:[0,12],polygon:[[[162.9125,-78.4514],[162.6595,-78.4257],[159.2712,-77.6013],[159.2712,-77.4108],[164.157,-76.477],[169.7813,-76.4764],[169.7813,-78.4514],[162.9125,-78.4514]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Up-to-date late season image - not ice minimum, be careful with distinguishing sea ice from ice shelves. (true color)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-S2A_R092_S02_20160613T075613",name:"imagico.de: Mount Kenya 2016",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=S2A_R092_S02_20160613T075613&z={zoom}&x={x}&y={-y}",endDate:"2016-06-13T00:00:00.000Z",startDate:"2016-06-13T00:00:00.000Z",zoomExtent:[0,14],polygon:[[[37.20666,-0.26685],[37.20666,-0.01193],[37.56552,-0.01193],[37.56552,-0.26685],[37.20666,-0.26685]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Up-to-date image for glacier mapping (true color)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-S2A_R092_S05_20160802T075556",name:"imagico.de: Mount Kilimanjaro 2016",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=S2A_R092_S05_20160802T075556&z={zoom}&x={x}&y={-y}",endDate:"2016-08-02T00:00:00.000Z",startDate:"2016-08-02T00:00:00.000Z",zoomExtent:[0,14],polygon:[[[37.24769,-3.22921],[37.24769,-2.96816],[37.61581,-2.96816],[37.61581,-3.22921],[37.24769,-3.22921]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Up-to-date image for glacier mapping (true color)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-LC80940622015159LGN00",name:"imagico.de: New Ireland",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=LC80940622015159LGN00&z={zoom}&x={x}&y={-y}",endDate:"2015-06-08T00:00:00.000Z",startDate:"2015-06-08T00:00:00.000Z",zoomExtent:[0,14],polygon:[[[150.38853,-2.80053],[150.38853,-2.3834],[150.83348,-2.3834],[150.83348,-2.80053],[150.38853,-2.80053]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Many missing islands in OSM (mostly mapped meanwhile) (true color)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-northsea_s2_2016",name:"imagico.de: North Sea Coast 2016",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=northsea_s2_2016&z={zoom}&x={x}&y={-y}",endDate:"2016-09-25T00:00:00.000Z",startDate:"2016-09-25T00:00:00.000Z",zoomExtent:[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",description:"Up-to-date low tide imagery of the coast for updating mapping of tidalflats and shoals (true color)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-northsea_s2_2017",name:"imagico.de: North Sea Coast 2017",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=northsea_s2_2017&z={zoom}&x={x}&y={-y}",endDate:"2017-06-02T00:00:00.000Z",startDate:"2017-06-02T00:00:00.000Z",zoomExtent:[0,13],polygon:[[[5.1713,53.0918],[6.477,55.8973],[9.8813,55.8973],[9.8813,53.2761],[9.7789,53.0918],[5.1713,53.0918]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Up-to-date low tide imagery of the coast for updating mapping of tidalflats and shoals (true color)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-northsea_s2_2018",name:"imagico.de: North Sea Coast spring 2018",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=northsea_s2_2018&z={zoom}&x={x}&y={-y}",endDate:"2018-05-08T00:00:00.000Z",startDate:"2018-05-08T00:00:00.000Z",zoomExtent:[0,13],polygon:[[[5.3179,53.0918],[5.322,53.4418],[6.7023,56.3572],[9.8813,56.3578],[9.8813,53.2819],[9.7758,53.0921],[5.3179,53.0918]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Up-to-date low tide imagery of the coast for updating mapping of tidalflats and shoals (true color)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-caspian_2018",name:"imagico.de: Northeast Caspian Sea 2018",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=caspian_2018&z={zoom}&x={x}&y={-y}",endDate:"2018-05-16T00:00:00.000Z",startDate:"2018-05-16T00:00:00.000Z",zoomExtent:[0,14],polygon:[[[51.0243,45.0729],[51.0243,46.569],[52.4259,46.5687],[53.6471,46.3177],[53.6474,45.0729],[51.0243,45.0729]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Coastal contruction and Kashagan oil field in Kazakhstan in May 2018 (true color)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-ural_s2_2016",name:"imagico.de: 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}",endDate:"2016-08-12T00:00:00.000Z",startDate:"2016-08-12T00:00:00.000Z",zoomExtent:[0,13],polygon:[[[59.19898,64.89205],[59.19898,66.91656],[60.73329,68.44289],[67.73295,68.44327],[67.73295,67.74883],[64.21647,64.91957],[59.19898,64.89205]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Up-to-date late summer imagery with few clouds - caution: not all visible snow is glaciers (true color)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-ndvina",name:"imagico.de: Northern Dvina delta at low tide",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=ndvina&z={zoom}&x={x}&y={-y}",endDate:"2015-09-13T00:00:00.000Z",startDate:"2015-09-13T00:00:00.000Z",zoomExtent:[0,12],polygon:[[[37.7291,64.1971],[37.7291,65.1161],[37.8592,65.2705],[41.3223,65.2705],[41.3223,64.3142],[41.2114,64.1973],[37.7291,64.1971]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Beaches, tidal flats and other costal forms (true color)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-nellesmere_ast",name:"imagico.de: Northern Ellesmere Island",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=nellesmere_ast&z={zoom}&x={x}&y={-y}",endDate:"2012-07-09T00:00:00.000Z",startDate:"2012-07-09T00:00:00.000Z",zoomExtent:[0,10],polygon:[[[-81.62923,82.4597],[-83.03136,82.47986],[-83.03136,83.05876],[-72.80309,83.09567],[-65.65786,83.03232],[-65.81167,82.4597],[-81.62923,82.4597]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Assembled from July 2012 ASTER imagery (true color with estimated blue)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-nellesmere_ast_2016",name:"imagico.de: 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}",endDate:"2012-07-15T00:00:00.000Z",startDate:"2012-07-08T00:00:00.000Z",zoomExtent:[0,10],polygon:[[[-78.89729,82.17577],[-82.64501,82.19426],[-82.64501,83.08067],[-66.58986,83.08497],[-63.78011,82.98908],[-63.78011,82.72198],[-65.0092,82.17577],[-78.89729,82.17577]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Assembled from July 2016 ASTER imagery (true color with estimated blue)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-LC81960222015233LGN00vis",name:"imagico.de: Northern German west coast tidalflats",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=LC81960222015233LGN00vis&z={zoom}&x={x}&y={-y}",endDate:"2015-08-21T00:00:00.000Z",startDate:"2015-08-21T00:00:00.000Z",zoomExtent:[0,12],polygon:[[[7.63568,53.28027],[7.63568,53.6677],[8.49433,55.50246],[9.20775,55.48106],[9.20775,53.28027],[7.63568,53.28027]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Up-to-date low tide imagery of the coast for updating mapping of tidalflats and shoals (true color)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-LC81960222015233LGN00ir",name:"imagico.de: Northern German west coast tidalflats (infrared)",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=LC81960222015233LGN00ir&z={zoom}&x={x}&y={-y}",endDate:"2015-08-21T00:00:00.000Z",startDate:"2015-08-21T00:00:00.000Z",zoomExtent:[0,12],polygon:[[[7.63568,53.28027],[7.63568,53.66811],[8.49433,55.50246],[9.20775,55.48106],[9.20775,53.28027],[7.63568,53.28027]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Up-to-date low tide imagery of the coast for updating mapping of tidalflats and shoals (false color IR)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-ngreenland_ast",name:"imagico.de: Northern Greenland ASTER",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=ngreenland_ast&z={zoom}&x={x}&y={-y}",endDate:"2012-08-13T00:00:00.000Z",startDate:"2005-06-21T00:00:00.000Z",zoomExtent:[0,10],polygon:[[[-52.49222,82.48972],[-52.49222,82.94295],[-49.28696,83.47312],[-44.5285,83.73214],[-29.5253,83.73214],[-25.26398,83.58271],[-21.18393,83.39776],[-21.18393,82.74312],[-23.40454,82.48972],[-52.49222,82.48972]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Assembled from mostly 2012 ASTER imagery, some 2005 images mainly in the northeast (true color with estimated blue)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-EO1A1350972013086110KF",name:"imagico.de: Northwest Heard Island",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=EO1A1350972013086110KF&z={zoom}&x={x}&y={-y}",endDate:"2013-03-13T00:00:00.000Z",startDate:"2013-03-13T00:00:00.000Z",zoomExtent:[0,13],polygon:[[[73.2279,-53.20333],[73.2279,-53.01073],[73.25949,-52.94944],[73.78992,-52.94944],[73.78992,-53.06048],[73.71783,-53.20333],[73.2279,-53.20333]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Glaciers of Northwest Heard Island (mapped meanwhile) (false color IR)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-S2A_R111_N09_20160604T154554",name:"imagico.de: Panama Canal",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=S2A_R111_N09_20160604T154554&z={zoom}&x={x}&y={-y}",endDate:"2016-06-07T00:00:00.000Z",startDate:"2016-06-07T00:00:00.000Z",zoomExtent:[0,14],polygon:[[[-80.01654,8.84898],[-80.01654,9.41481],[-79.46859,9.41481],[-79.46859,8.84898],[-80.01654,8.84898]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Images of the new locks (but partly cloudy) (true color)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-EO1A0120532016364110KF",name:"imagico.de: Panama Canal - Pacific side",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=EO1A0120532016364110KF&z={zoom}&x={x}&y={-y}",endDate:"2016-12-30T00:00:00.000Z",startDate:"2016-12-30T00:00:00.000Z",zoomExtent:[0,14],polygon:[[[-79.62539,8.77083],[-79.68684,8.82197],[-79.68667,8.93705],[-79.65363,9.09294],[-79.26816,9.09294],[-79.32833,8.77083],[-79.62539,8.77083]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"New locks with less clouds than in the Sentinel-2 image - make sure to check image alignment (true color)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-S2A_R078_N68_20160930T081002",name:"imagico.de: Pechora Sea Coast",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=S2A_R078_N68_20160930T081002&z={zoom}&x={x}&y={-y}",endDate:"2016-09-30T00:00:00.000Z",startDate:"2016-09-30T00:00:00.000Z",zoomExtent:[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",description:"Sentinel-2 image of the Pechora Sea coast in autumn 2016 (true color)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-LC81511242016033LGN00",name:"imagico.de: Pensacola Mountains",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=LC81511242016033LGN00&z={zoom}&x={x}&y={-y}",endDate:"2016-02-02T00:00:00.000Z",startDate:"2016-02-02T00:00:00.000Z",zoomExtent:[0,10],polygon:[[[-53.20922,-84.12525],[-60.61538,-83.78609],[-60.61538,-82.29969],[-48.72405,-82.29987],[-44.52178,-82.43683],[-44.51354,-84.12525],[-53.20922,-84.12525]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Outside regular Landsat coverage and therefore not in LIMA and Bing/Mapbox (true color)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-S2A_R136_N41_20150831T093006",name:"imagico.de: Prokletije Mountains",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=S2A_R136_N41_20150831T093006&z={zoom}&x={x}&y={-y}",endDate:"2015-08-31T00:00:00.000Z",startDate:"2015-08-31T00:00:00.000Z",zoomExtent:[0,14],polygon:[[[19.11233,42.15316],[19.08426,43.08074],[20.63299,43.09603],[20.63788,42.16779],[19.11233,42.15316]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Late summer imagery where usual sources are severely limited by clouds and snow (true color)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-DMS_1142622_03746_20110415_17533956",name:"imagico.de: Qasigiannguit",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=DMS_1142622_03746_20110415_17533956&z={zoom}&x={x}&y={-y}",endDate:"2011-04-15T00:00:00.000Z",startDate:"2011-04-15T00:00:00.000Z",zoomExtent:[0,15],polygon:[[[-51.23857,68.79972],[-51.24334,68.85303],[-51.15167,68.85303],[-51.14038,68.80116],[-51.23857,68.79972]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Icebridge DMS image of the settlement - alignment might be poor",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-LC81510432015030LGN00",name:"imagico.de: Rann of Kutch",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=LC81510432015030LGN00&z={zoom}&x={x}&y={-y}",endDate:"2015-01-01T00:00:00.000Z",startDate:"2015-01-01T00:00:00.000Z",zoomExtent:[0,12],polygon:[[[67.9684,22.36265],[67.86231,22.38392],[67.86231,24.88693],[71.48986,24.88693],[71.48986,22.36265],[67.9684,22.36265]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Land/water distinction difficult to properly map based on Bing/Mapbox images (false color IR)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-S2A_R093_N41_20150828T092005",name:"imagico.de: 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}",endDate:"2015-08-28T00:00:00.000Z",startDate:"2015-08-28T00:00:00.000Z",zoomExtent:[0,14],polygon:[[[23.80811,41.58488],[22.99238,41.60195],[23.01186,42.29984],[23.99402,42.28339],[23.96561,41.58488],[23.80811,41.58488]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Late summer imagery where usual sources are severely limited by clouds and snow (true color)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-LC81730602015040LGN00",name:"imagico.de: Rwenzori Mountains",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=LC81730602015040LGN00&z={zoom}&x={x}&y={-y}",endDate:"2015-02-09T00:00:00.000Z",startDate:"2015-02-09T00:00:00.000Z",zoomExtent:[0,13],polygon:[[[29.7663,0.20689],[29.7663,0.50918],[30.0346,0.50918],[30.0346,0.20689],[29.7663,0.20689]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Recent image of most of the remaining Rwenzori Mountains glaciers (false color IR)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-S2A_R078_N01_20160702T082522",name:"imagico.de: Rwenzori Mountains 2016",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=S2A_R078_N01_20160702T082522&z={zoom}&x={x}&y={-y}",endDate:"2016-07-02T00:00:00.000Z",startDate:"2016-07-02T00:00:00.000Z",zoomExtent:[0,14],polygon:[[[29.80514,0.23586],[29.80514,0.46709],[30.02503,0.46709],[30.02503,0.23586],[29.80514,0.23586]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Up-to-date image for glacier mapping (true color)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-LC80611072014036LGN00",name:"imagico.de: Scott Island",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=LC80611072014036LGN00&z={zoom}&x={x}&y={-y}",endDate:"2014-02-05T00:00:00.000Z",startDate:"2014-02-05T00:00:00.000Z",zoomExtent:[0,13],polygon:[[[-180,-67.42635],[-180,-67.32544],[-179.82473,-67.32538],[-179.82473,-67.42635],[-180,-67.42635]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Missing in other image sources (true color)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-LC82100972015347LGN00",name:"imagico.de: Shag Rocks",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=LC82100972015347LGN00&z={zoom}&x={x}&y={-y}",endDate:"2015-12-13T00:00:00.000Z",startDate:"2015-12-13T00:00:00.000Z",zoomExtent:[0,13],polygon:[[[-42.12875,-53.7205],[-42.14626,-53.45782],[-41.67573,-53.44586],[-41.65582,-53.70872],[-42.12875,-53.7205]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Missing in other image sources (true color)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-LC81130622013270LGN00",name:"imagico.de: Southeastern Sulawesi",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=LC81130622013270LGN00&z={zoom}&x={x}&y={-y}",endDate:"2013-09-27T00:00:00.000Z",startDate:"2013-09-27T00:00:00.000Z",zoomExtent:[0,13],polygon:[[[120.84382,-3.59545],[120.84382,-3.15985],[120.98184,-2.51468],[122.62618,-2.51468],[122.62618,-3.00215],[122.5007,-3.59545],[120.84382,-3.59545]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Missing islands and coarse coastline due to cloud cover in Bing, lakes could also use additional detail (true color)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-LC80281222016035LGN00",name:"imagico.de: Southern Transantarctic Mountains",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=LC80281222016035LGN00&z={zoom}&x={x}&y={-y}",endDate:"2016-02-04T00:00:00.000Z",startDate:"2016-02-04T00:00:00.000Z",zoomExtent:[0,10],polygon:[[[156.96951,-84.50098],[154.50858,-84.46255],[154.50858,-82.60681],[175.46774,-82.58505],[177.00583,-83.52807],[177.00583,-84.19262],[171.93839,-84.34633],[166.83798,-84.4437],[161.67029,-84.50045],[156.96951,-84.50098]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Outside regular Landsat coverage and therefore not in LIMA and Bing/Mapbox (true color)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-LC81030632015286LGN00",name:"imagico.de: Sudirman Range 2015",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=LC81030632015286LGN00&z={zoom}&x={x}&y={-y}",endDate:"2015-10-13T00:00:00.000Z",startDate:"2015-10-13T00:00:00.000Z",zoomExtent:[0,13],polygon:[[[136.4226,-4.2853],[136.4226,-3.6447],[137.7971,-3.6447],[137.7971,-4.2853],[136.4226,-4.2853]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Older image of the Sudirman Range with no fresh snow showing glacier extent (true color)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-S2A_R088_S05_20160812T011732",name:"imagico.de: Sudirman Range 2016",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=S2A_R088_S05_20160812T011732&z={zoom}&x={x}&y={-y}",endDate:"2016-08-12T00:00:00.000Z",startDate:"2016-08-12T00:00:00.000Z",zoomExtent:[0,14],polygon:[[[136.8044,-4.2585],[136.8044,-3.7836],[137.7701,-3.7836],[137.7701,-4.2585],[136.8044,-4.2585]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Cloud free image of the Sudirman Range but with fresh snow (true color)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-s2sval",name:"imagico.de: Svalbard mosaic",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=s2sval&z={zoom}&x={x}&y={-y}",endDate:"2016-01-01T00:00:00.000Z",startDate:"2016-01-01T00:00:00.000Z",zoomExtent:[0,12],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",description:"Sentinel-2 mosaic of Svalbard (true color)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-DMS_1142636_160xx_20110507_1822xxxx",name:"imagico.de: 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}",endDate:"2011-05-07T00:00:00.000Z",startDate:"2011-05-07T00:00:00.000Z",zoomExtent:[0,15],polygon:[[[-68.93977,76.51133],[-68.93977,76.5499],[-68.76635,76.55176],[-68.50993,76.55176],[-68.50744,76.51612],[-68.67897,76.51194],[-68.93977,76.51133]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Icebridge DMS image - alignment might be poor",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-dms_thule2_2015.09.25",name:"imagico.de: 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}",endDate:"2015-09-25T00:00:00.000Z",startDate:"2015-09-25T00:00:00.000Z",zoomExtent:[0,17],polygon:[[[-68.74292,76.52636],[-68.74446,76.5284],[-68.74807,76.54939],[-68.74615,76.56017],[-68.72276,76.56022],[-68.72017,76.55775],[-68.71853,76.52921],[-68.71978,76.52637],[-68.74292,76.52636]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Icebridge DMS aerial images from Thule Airbase - alignment might be poor",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-dms_thule_2015.10.06",name:"imagico.de: 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}",endDate:"2015-10-06T00:00:00.000Z",startDate:"2015-10-06T00:00:00.000Z",zoomExtent:[0,16],polygon:[[[-68.81924,76.5251],[-68.82651,76.54177],[-68.77345,76.5439],[-68.7021,76.54545],[-68.59177,76.5456],[-68.59183,76.52793],[-68.6597,76.5251],[-68.81924,76.5251]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Icebridge DMS aerial images from Thule Airbase - alignment might be poor",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-dms_thule_2015.09.25",name:"imagico.de: 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}",endDate:"2015-09-25T00:00:00.000Z",startDate:"2015-09-25T00:00:00.000Z",zoomExtent:[0,16],polygon:[[[-68.77771,76.50688],[-68.77662,76.57064],[-68.68115,76.57065],[-68.6763,76.55384],[-68.6762,76.53074],[-68.68523,76.50688],[-68.77771,76.50688]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Icebridge DMS aerial images from Thule Airbase - alignment might be poor",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-S2A_R094_N79_20160812T105622",name:"imagico.de: 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}",endDate:"2016-08-12T00:00:00.000Z",startDate:"2016-08-12T00:00:00.000Z",zoomExtent:[0,12],polygon:[[[78.45886,80.72643],[78.45886,80.9099],[80.48892,80.9099],[80.48892,80.72643],[78.45886,80.72643]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Up-to-date late summer imagery with few clouds (true color)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-LC80910682014358LGN00",name:"imagico.de: Vanatinai",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=LC80910682014358LGN00&z={zoom}&x={x}&y={-y}",endDate:"2014-12-24T00:00:00.000Z",startDate:"2014-12-24T00:00:00.000Z",zoomExtent:[0,13],polygon:[[[153.06138,-11.78923],[153.06138,-11.28869],[153.10927,-11.07229],[154.41201,-11.07229],[154.41201,-11.78923],[153.06138,-11.78923]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Coarse coastline due to cloud cover in Bing/Mapbox (true color)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-LC82330892016031LGN00",name:"imagico.de: Volcán Calbuco",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=LC82330892016031LGN00&z={zoom}&x={x}&y={-y}",endDate:"2016-01-31T00:00:00.000Z",startDate:"2016-01-31T00:00:00.000Z",zoomExtent:[0,13],polygon:[[[-72.86696,-41.51741],[-72.86696,-41.04527],[-72.23181,-41.04527],[-71.8751,-41.10829],[-72.00007,-41.51741],[-72.86696,-41.51741]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Image from after the 2015 eruption (true color)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-S2A_R089_N52_20160623T024048",name:"imagico.de: Vostochny Cosmodrome",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=S2A_R089_N52_20160623T024048&z={zoom}&x={x}&y={-y}",endDate:"2016-06-23T00:00:00.000Z",startDate:"2016-06-23T00:00:00.000Z",zoomExtent:[0,13],polygon:[[[126.36143,51.37553],[126.34804,52.33932],[128.60762,52.3409],[128.61174,51.37553],[126.36143,51.37553]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Recent image showing newest features (true color)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-walps_autumn_2017",name:"imagico.de: Western Alps autumn colors 2017",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=walps_autumn_2017&z={zoom}&x={x}&y={-y}",endDate:"2017-10-17T00:00:00.000Z",startDate:"2017-10-17T00:00:00.000Z",zoomExtent:[0,13],polygon:[[[4.6412,43.2493],[4.3118,43.2653],[4.3118,44.2167],[5.2562,46.965],[5.9151,48.7177],[7.3866,48.7467],[10.088,48.7467],[10.088,48.7032],[7.7819,43.2813],[7.76,43.2653],[7.3646,43.2493],[4.6412,43.2493]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Autumn colors in the Alps, Jura and southwestern Germany  (true color)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-LC81490352013282LGN00",name:"imagico.de: Western Karakoram",type:"tms",template:"http://imagico.de/map/osmim_tiles.php?layer=LC81490352013282LGN00&z={zoom}&x={x}&y={-y}",endDate:"2013-10-09T00:00:00.000Z",startDate:"2013-10-09T00:00:00.000Z",zoomExtent:[0,13],polygon:[[[75.98364,34.97851],[73.96164,35.36957],[74.44281,37.09391],[76.50601,36.70267],[75.98364,34.97851]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Represents approximately minimum snow cover so can be well used for glacier mapping (true color)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"osmim-imagicode-S2A_R039_S15_20160510T145731",name:"imagico.de: 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}",endDate:"2016-05-10T00:00:00.000Z",startDate:"2016-05-10T00:00:00.000Z",zoomExtent:[0,14],polygon:[[[-71.18071,-14.49785],[-71.17976,-13.71029],[-70.55637,-13.71263],[-70.55637,-14.49785],[-71.18071,-14.49785]]],terms_url:"http://maps.imagico.de/#osmim",terms_text:"imagico.de OSM images for mapping",description:"Poor and outdated imagery in other sources (true color)",icon:"https://osmlab.github.io/editor-layer-index/sources/misc/osmim-imagicode-LC81800982013291LGN00.png"},{id:"IPR-orotofoto-last-tms",name:"IPR ortofoto LAST (tmsproxy)",type:"tms",template:"https://osm-{switch:a,b,c}.zby.cz/tiles_ipr_last.php/{zoom}/{x}/{y}.jpg",zoomExtent:[1,20],polygon:[[[14.81232,49.93089],[14.18755,49.87687],[14.12025,50.19882],[14.74502,50.25247],[14.81232,49.93089]]]},{id:"IPR-orotofoto-vege-tms",name:"IPR ortofoto Low-Vegetation (tmsproxy)",type:"tms",template:"https://osm-{switch:a,b,c}.zby.cz/tiles_ipr_vege.php/{zoom}/{x}/{y}.jpg",zoomExtent:[1,20],polygon:[[[14.30454,49.99538],[14.31604,49.94205],[14.35,49.94508],[14.35384,49.92726],[14.42385,49.93352],[14.42009,49.95097],[14.48865,49.95709],[14.48479,49.97501],[14.55386,49.98117],[14.55012,49.99852],[14.58455,50.00159],[14.5883,49.98424],[14.69168,49.99346],[14.67634,50.06453],[14.71279,50.06777],[14.70115,50.12158],[14.6647,50.11834],[14.661,50.13543],[14.62755,50.13246],[14.61965,50.16895],[14.58543,50.16591],[14.58163,50.18344],[14.40776,50.168],[14.41156,50.15045],[14.37765,50.14744],[14.3738,50.16524],[14.33893,50.16214],[14.34278,50.14434],[14.27368,50.1382],[14.27749,50.12058],[14.2088,50.11447],[14.21289,50.09557],[14.24656,50.09857],[14.25417,50.06336],[14.21987,50.0603],[14.2237,50.04259],[14.258,50.04565],[14.26953,49.99226],[14.30454,49.99538]]]},{id:"GSGS3906",name:"Ireland British War Office 1:25k GSGS 3906",type:"tms",template:"https://mapwarper.net/layers/tile/101/{zoom}/{x}/{y}.png",zoomExtent:[0,18],polygon:[[[-9.31139,51.43828],[-7.36131,51.99302],[-7.33934,52.13149],[-6.9658,52.06231],[-6.23796,52.1534],[-6.21049,52.52928],[-5.98253,52.80079],[-5.96056,53.67037],[-6.20775,53.67851],[-6.22423,53.95255],[-5.86442,54.12513],[-5.85893,54.20392],[-5.53483,54.23122],[-5.39476,54.44739],[-5.50188,54.70052],[-6.21873,55.38194],[-6.86418,55.2162],[-7.25145,55.46455],[-7.53435,55.30853],[-8.25395,55.26787],[-8.61101,54.97259],[-8.49016,54.89369],[-8.83897,54.68306],[-8.42699,54.52397],[-8.75108,54.31302],[-9.29765,54.38985],[-10.05296,54.37866],[-10.30015,54.05747],[-10.02275,53.79386],[-10.30565,53.55142],[-9.99803,53.24354],[-9.09166,53.19256],[-9.81676,53.1102],[-9.48167,52.96984],[-9.70415,52.68107],[-10.00627,52.63608],[-9.78929,52.52426],[-9.99803,52.32663],[-10.64348,52.1753],[-10.39629,51.9761],[-10.16832,51.64668],[-10.28642,51.57334],[-9.88542,51.57163],[-9.79204,51.44684],[-9.31139,51.43828]]],terms_url:"https://wiki.openstreetmap.org/wiki/Ireland/Background_Imagery#Trinity_College_Dublin",terms_text:"Glucksman Map Library, Trinity College Dublin",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/ie/IrelandBritishWarOffice-GSGS3906.png"},{id:"Israel_Hiking",name:"Israel Hiking",type:"tms",template:"https://israelhiking.osm.org.il/Tiles/{zoom}/{x}/{y}.png",zoomExtent:[7,16],polygon:[[[34.64563,32.92073],[34.98374,33.13352],[35.15662,33.09994],[35.31781,33.11463],[35.36541,33.06285],[35.46229,33.09994],[35.51741,33.12652],[35.5266,33.21531],[35.53893,33.25442],[35.56446,33.2969],[35.61264,33.27918],[35.67429,33.30627],[35.70785,33.34269],[35.75363,33.35091],[35.81509,33.3392],[35.91531,32.9406],[35.80834,32.772],[35.77835,32.72446],[35.59491,32.62828],[35.5729,32.36541],[35.59461,32.21856],[35.55452,32.02901],[35.57225,31.75415],[35.48771,31.41951],[35.4209,31.25116],[35.47936,31.1783],[35.42771,30.95172],[35.3321,30.77107],[35.20709,30.53307],[35.17202,30.11204],[35.07514,29.83713],[35.02336,29.64569],[34.93992,29.39946],[34.89517,29.37711],[34.84785,29.59084],[34.69667,30.10714],[34.52423,30.40912],[34.48879,30.64515],[34.07929,31.52265],[34.64563,32.92073]]],terms_url:"https://israelhiking.osm.org.il/",terms_text:"Tiles © IsraelHiking, CC BY-SA-NC 3.0. Data by OpenStreetMap under ODbL.",description:"Israel Hiking map",icon:"https://israelhiking.osm.org.il/content/favicons/favicon.ico"},{id:"Israel_MTB",name:"Israel MTB",type:"tms",template:"https://israelhiking.osm.org.il/MTBTiles/{zoom}/{x}/{y}.png",zoomExtent:[7,16],polygon:[[[34.64563,32.92073],[34.98374,33.13352],[35.15662,33.09994],[35.31781,33.11463],[35.36541,33.06285],[35.46229,33.09994],[35.51741,33.12652],[35.5266,33.21531],[35.53893,33.25442],[35.56446,33.2969],[35.61264,33.27918],[35.67429,33.30627],[35.70785,33.34269],[35.75363,33.35091],[35.81509,33.3392],[35.91531,32.9406],[35.80834,32.772],[35.77835,32.72446],[35.59491,32.62828],[35.5729,32.36541],[35.59461,32.21856],[35.55452,32.02901],[35.57225,31.75415],[35.48771,31.41951],[35.4209,31.25116],[35.47936,31.1783],[35.42771,30.95172],[35.3321,30.77107],[35.20709,30.53307],[35.17202,30.11204],[35.07514,29.83713],[35.02336,29.64569],[34.93992,29.39946],[34.89517,29.37711],[34.84785,29.59084],[34.69667,30.10714],[34.52423,30.40912],[34.48879,30.64515],[34.07929,31.52265],[34.64563,32.92073]]],terms_url:"https://israelhiking.osm.org.il/",terms_text:"Tiles © IsraelHiking, CC BY-SA-NC 3.0. Data by OpenStreetMap under ODbL.",description:"Israel MTB map",icon:"https://israelhiking.osm.org.il/content/favicons/favicon.ico"},{id:"ITACyL-Castile-and-Leon",name:"ITACyL - Castile and León",type:"wms",template:"http://orto.wms.itacyl.es/WMS?REQUEST=GetMap&SERVICE=WMS&VERSION=1.1.1&LAYERS=Ortofoto_CyL&SRS={proj}&FORMAT=image/jpeg&STYLES=Default&TRANSPARENT=TRUE&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",polygon:[[[-1.9358,41.43834],[-1.89601,41.43869],[-1.89536,41.39687],[-1.9767,41.39616],[-1.97639,41.37623],[-2.06201,41.37548],[-2.06262,41.41471],[-2.10458,41.41434],[-2.10363,41.35367],[-2.14448,41.35331],[-2.1419,41.18683],[-2.06204,41.18753],[-2.06171,41.16624],[-2.02046,41.16661],[-2.01887,41.06334],[-2.10083,41.06262],[-2.10114,41.08296],[-2.22733,41.08185],[-2.22704,41.0635],[-2.26912,41.06313],[-2.2688,41.04257],[-2.35325,41.04182],[-2.35356,41.06148],[-2.39487,41.06112],[-2.39457,41.04206],[-2.43722,41.04168],[-2.43756,41.06315],[-2.47928,41.06278],[-2.47991,41.10369],[-2.52078,41.10333],[-2.5211,41.12429],[-2.60415,41.12357],[-2.60481,41.16628],[-2.6471,41.16591],[-2.64808,41.22931],[-2.72874,41.2286],[-2.72907,41.24974],[-2.89552,41.24828],[-2.89649,41.31063],[-2.9363,41.31028],[-2.93571,41.27231],[-3.14692,41.27046],[-3.14723,41.29045],[-3.22828,41.28974],[-3.22767,41.25008],[-3.39581,41.2486],[-3.39518,41.20808],[-3.43492,41.20773],[-3.43429,41.16696],[-3.47877,41.16657],[-3.47844,41.14556],[-3.60336,41.14446],[-3.6027,41.10169],[-3.64539,41.10131],[-3.64508,41.08159],[-3.68735,41.08122],[-3.68673,41.04104],[-3.72866,41.04067],[-3.72803,40.9998],[-3.76896,40.99944],[-3.76864,40.97886],[-3.85473,40.97811],[-3.8544,40.95653],[-3.89857,40.95615],[-3.89764,40.89575],[-3.93906,40.89539],[-3.93716,40.77204],[-4.06198,40.77093],[-4.06133,40.72926],[-4.10372,40.72888],[-4.10311,40.68918],[-4.14628,40.6888],[-4.14498,40.60421],[-4.19025,40.60381],[-4.18994,40.58362],[-4.22946,40.58327],[-4.22979,40.60487],[-4.27054,40.60451],[-4.26958,40.54211],[-4.31384,40.54171],[-4.31163,40.39758],[-4.39376,40.39685],[-4.39345,40.37677],[-4.43723,40.37638],[-4.43623,40.31123],[-4.52192,40.31046],[-4.52037,40.20897],[-4.56131,40.2086],[-4.56099,40.18763],[-4.68895,40.18649],[-4.68933,40.21101],[-4.73192,40.21063],[-4.73252,40.24966],[-4.76838,40.24934],[-4.76809,40.23035],[-4.81104,40.22996],[-4.81147,40.20726],[-4.8542,40.18414],[-4.85264,40.12563],[-4.93699,40.12488],[-4.93638,40.08529],[-5.35538,40.08155],[-5.35606,40.12562],[-5.44027,40.12487],[-5.44091,40.16673],[-5.60382,40.16527],[-5.60448,40.20881],[-5.68646,40.20808],[-5.68712,40.25131],[-6.02166,40.24834],[-6.02295,40.33257],[-6.10433,40.33184],[-6.1056,40.41451],[-6.18951,40.41376],[-6.19018,40.45745],[-6.26971,40.45675],[-6.26909,40.41653],[-6.35192,40.41579],[-6.35128,40.37422],[-6.43325,40.37349],[-6.43264,40.33361],[-6.52245,40.33281],[-6.52116,40.24849],[-6.59942,40.24779],[-6.59886,40.21128],[-6.85568,40.20899],[-6.85634,40.25257],[-6.93622,40.25186],[-6.93751,40.33657],[-6.85111,40.33734],[-6.86001,40.91672],[-6.93544,40.91605],[-6.93741,41.0435],[-6.85482,41.04423],[-6.85548,41.08706],[-6.77015,41.08781],[-6.77245,41.23623],[-6.68379,41.23701],[-6.60436,41.2377],[-6.60524,41.29474],[-6.5193,41.29549],[-6.51991,41.33479],[-6.43673,41.33552],[-6.43801,41.41814],[-6.35318,41.41888],[-6.35447,41.50141],[-6.26889,41.50216],[-6.2708,41.6245],[-6.35661,41.62375],[-6.35724,41.66401],[-6.43548,41.66333],[-6.4349,41.62651],[-6.52279,41.62575],[-6.52343,41.66635],[-6.6034,41.66565],[-6.60733,41.9166],[-7.02209,41.913],[-7.02406,42.03872],[-7.1054,42.03801],[-7.10613,42.08421],[-7.0208,42.08495],[-7.02276,42.2094],[-6.93699,42.21014],[-6.93763,42.25087],[-6.8548,42.25159],[-6.85545,42.29329],[-6.77342,42.294],[-6.77403,42.33244],[-6.85325,42.33176],[-6.85523,42.4569],[-7.10341,42.45477],[-7.10811,42.75115],[-7.02199,42.75189],[-7.02241,42.77825],[-6.93976,42.77896],[-6.94199,42.91962],[-6.77302,42.92106],[-6.77363,42.95958],[-6.52329,42.96172],[-6.52391,43.00095],[-6.43893,43.00167],[-6.44024,43.08361],[-5.93782,43.08789],[-5.93708,43.04189],[-5.85421,43.0426],[-5.85357,43.00258],[-5.77236,43.00327],[-5.77363,43.08308],[-5.6027,43.08453],[-5.60202,43.04222],[-5.52161,43.04291],[-5.52226,43.08409],[-5.4376,43.08481],[-5.43827,43.12651],[-5.10444,43.12935],[-5.10573,43.2099],[-5.02386,43.2106],[-5.02451,43.25117],[-4.90017,43.25222],[-4.89941,43.20501],[-4.81126,43.20576],[-4.80966,43.10538],[-4.76975,43.10571],[-4.76937,43.08168],[-4.72945,43.08202],[-4.72881,43.04219],[-4.56322,43.0436],[-4.56353,43.06296],[-4.39599,43.06438],[-4.39566,43.04336],[-4.3537,43.04371],[-4.35266,42.97836],[-4.23013,42.9794],[-4.22913,42.91625],[-4.18774,42.9166],[-4.18706,42.87407],[-4.10552,42.87476],[-4.10486,42.83348],[-3.97801,42.83457],[-3.97733,42.79214],[-3.9375,42.79248],[-3.93781,42.81183],[-3.85397,42.81254],[-3.85427,42.83193],[-3.89573,42.83158],[-3.89607,42.85343],[-3.93821,42.85307],[-3.93889,42.89577],[-3.9806,42.89542],[-3.98093,42.91627],[-4.0222,42.91591],[-4.0229,42.96014],[-3.97851,42.96052],[-3.97946,43.01999],[-3.93883,43.02034],[-3.93918,43.04239],[-3.89704,43.04275],[-3.89738,43.06414],[-3.85424,43.06451],[-3.8549,43.10583],[-3.77086,43.10654],[-3.77116,43.12515],[-3.72819,43.12551],[-3.72853,43.14656],[-3.68713,43.14691],[-3.68778,43.18786],[-3.60365,43.18858],[-3.60331,43.16747],[-3.52278,43.16815],[-3.52243,43.14619],[-3.39669,43.14726],[-3.39699,43.16601],[-3.35444,43.16637],[-3.35479,43.18837],[-3.31268,43.18873],[-3.31299,43.20828],[-3.22993,43.20899],[-3.22959,43.18768],[-3.10343,43.18875],[-3.10274,43.14562],[-3.14546,43.14526],[-3.14516,43.1271],[-3.10617,43.12743],[-3.10445,43.01915],[-3.02075,43.01987],[-3.0201,42.97903],[-2.9811,42.97936],[-2.97977,42.8958],[-3.10476,42.89473],[-3.10276,42.76928],[-3.02199,42.76997],[-3.02168,42.74983],[-2.98024,42.75019],[-2.97988,42.7275],[-2.89613,42.72822],[-2.89679,42.76967],[-2.8534,42.77004],[-2.85405,42.81087],[-2.68577,42.81231],[-2.68544,42.79159],[-2.64523,42.79194],[-2.64489,42.77024],[-2.52005,42.7713],[-2.51936,42.72827],[-2.5607,42.72791],[-2.56038,42.7076],[-2.51944,42.70795],[-2.5181,42.62357],[-2.60404,42.62283],[-2.60439,42.64497],[-2.77154,42.64353],[-2.77188,42.66544],[-2.81176,42.6651],[-2.8121,42.68624],[-2.85469,42.68588],[-2.85337,42.60302],[-2.89413,42.60267],[-2.89379,42.58159],[-3.0619,42.58015],[-3.06031,42.47952],[-3.02191,42.47985],[-3.0199,42.3525],[-3.06255,42.35213],[-3.06029,42.20906],[-3.1012,42.20871],[-3.10086,42.18682],[-3.06175,42.18716],[-3.0611,42.14559],[-3.02029,42.14594],[-3.01963,42.10375],[-2.89602,42.10482],[-2.89501,42.04071],[-2.81222,42.04143],[-2.81353,42.1246],[-2.76871,42.12499],[-2.76905,42.14674],[-2.72695,42.14711],[-2.7266,42.12485],[-2.68706,42.12519],[-2.68605,42.06109],[-2.72804,42.06073],[-2.72739,42.0193],[-2.60343,42.02037],[-2.60376,42.04135],[-2.561,42.04173],[-2.56198,42.10411],[-2.52266,42.10445],[-2.52299,42.12577],[-2.47933,42.12615],[-2.47963,42.145],[-2.35517,42.14608],[-2.3555,42.16747],[-2.31184,42.16785],[-2.3115,42.14605],[-2.2699,42.14641],[-2.26924,42.1048],[-2.2295,42.10515],[-2.22981,42.12514],[-2.14467,42.12587],[-2.14432,42.10386],[-2.10385,42.10421],[-2.10156,41.95811],[-1.97689,41.95919],[-1.97655,41.93765],[-1.93473,41.93801],[-1.93504,41.95776],[-1.89453,41.95811],[-1.89483,41.97715],[-1.854,41.97751],[-1.85304,41.91638],[-1.81381,41.91672],[-1.81151,41.76984],[-1.7706,41.77019],[-1.76866,41.64582],[-1.85335,41.64508],[-1.85305,41.62567],[-1.89471,41.6253],[-1.89403,41.58215],[-1.97716,41.58142],[-1.97683,41.56021],[-1.9377,41.56055],[-1.9358,41.43834]]],terms_text:"ITACyL"},{id:"gsi.go.jp_airphoto",name:"Japan GSI airphoto Imagery",type:"tms",template:"http://cyberjapandata.gsi.go.jp/xyz/airphoto/{zoom}/{x}/{y}.png",zoomExtent:[14,18],polygon:[[[140.88867,45.67548],[140.71289,45.41388],[141.04248,43.80282],[139.96582,43.35714],[138.99902,42.01665],[139.04297,41.26129],[137.5708,38.58253],[132.69287,36.86204],[130.84717,34.93999],[129.74854,34.994],[129.02344,34.56086],[128.36426,33.21112],[127.90283,31.87756],[128.4082,29.89781],[125.8374,26.78485],[123.33252,25.0657],[122.58545,24.42715],[123.53027,23.44309],[125.88135,24.10665],[129.96826,26.31311],[132.1875,30.20211],[134.42871,32.43561],[136.82373,33.28462],[137.85645,34.21634],[138.64746,33.24788],[138.58154,32.00808],[139.6582,28.67131],[141.65771,29.66896],[142.0752,32.06396],[141.21826,33.37641],[141.56982,35.44277],[141.43799,36.52729],[142.82227,39.16414],[143.04199,40.89691],[145.92041,42.40723],[146.18408,43.03678],[145.74463,43.54855],[145.32715,43.67582],[145.30518,43.91372],[145.61279,44.2452],[145.41504,44.62175],[144.38232,44.52784],[142.31689,45.53714],[141.3501,45.70618],[140.88867,45.67548]]],terms_url:"http://www.gsi.go.jp/kikakuchousei/kikakuchousei40182.html",terms_text:"GSI Japan",description:"Japan GSI airphoto Imagery. Not fully orthorectified, but a bit newer and/or differently covered than GSI ortho Imagery."},{id:"finds.jp_KBN_2500",name:"Japan GSI KIBAN 2500",type:"tms",template:"http://www.finds.jp/ws/tmc/1.0.0/KBN2500FN-900913-L/{zoom}/{x}/{y}.png",zoomExtent:[15,20],polygon:[[[140.88867,45.67548],[140.71289,45.41388],[141.04248,43.80282],[139.96582,43.35714],[138.99902,42.01665],[139.04297,41.26129],[137.5708,38.58253],[132.69287,36.86204],[130.84717,34.93999],[129.74854,34.994],[129.02344,34.56086],[128.36426,33.21112],[127.90283,31.87756],[128.4082,29.89781],[125.8374,26.78485],[123.33252,25.0657],[122.58545,24.42715],[123.53027,23.44309],[125.88135,24.10665],[129.96826,26.31311],[132.1875,30.20211],[134.42871,32.43561],[136.82373,33.28462],[137.85645,34.21634],[138.64746,33.24788],[138.58154,32.00808],[139.6582,28.67131],[141.65771,29.66896],[142.0752,32.06396],[141.21826,33.37641],[141.56982,35.44277],[141.43799,36.52729],[142.82227,39.16414],[143.04199,40.89691],[145.92041,42.40723],[146.18408,43.03678],[145.74463,43.54855],[145.32715,43.67582],[145.30518,43.91372],[145.61279,44.2452],[145.41504,44.62175],[144.38232,44.52784],[142.31689,45.53714],[141.3501,45.70618],[140.88867,45.67548]]],terms_url:"http://www.finds.jp/siteinfo/c_tou.html.ja",terms_text:"GSI KIBAN 2500",description:"GSI Kiban 2500 via finds.jp. Good for tracing, but a bit older."},{id:"gsi.go.jp",name:"Japan GSI ortho Imagery",type:"tms",template:"https://cyberjapandata.gsi.go.jp/xyz/ort/{zoom}/{x}/{y}.jpg",zoomExtent:[5,19],polygon:[[[130.35021,31.45741],[130.26851,31.45817],[130.20875,31.44939],[130.1002,31.44996],[130.09237,31.3919],[130.13355,31.37528],[130.35043,31.37528],[130.35021,31.45741]],[[130.4193,31.41715],[130.417,31.41672],[130.41677,31.47525],[130.34179,31.47506],[130.34179,31.48374],[130.33362,31.48374],[130.33329,31.50044],[130.36675,31.49997],[130.36664,31.52458],[130.35019,31.52544],[130.35041,31.54986],[130.32523,31.55024],[130.32501,31.60029],[130.31661,31.63336],[130.31634,31.65084],[130.3752,31.65084],[130.31164,31.67599],[130.29194,31.69179],[130.29105,31.73235],[130.2521,31.73387],[130.24986,31.71693],[130.24427,31.71712],[130.21629,31.75804],[130.17533,31.75919],[130.17422,31.78259],[130.18384,31.79096],[130.23644,31.79096],[130.26911,31.77003],[130.36334,31.75785],[130.42668,31.70893],[130.62409,31.7076],[130.62588,31.68627],[130.61088,31.62245],[130.55582,31.50249],[130.54239,31.41715],[130.42158,31.41715],[130.4193,31.41715]],[[130.52516,31.24184],[130.54441,31.24107],[130.56858,31.21715],[130.59924,31.21657],[130.59924,31.26633],[130.57641,31.26633],[130.57351,31.31625],[130.6308,31.28393],[130.68989,31.27666],[130.66706,31.26059],[130.66594,31.21925],[130.64401,31.18135],[130.59007,31.14688],[130.54239,31.17503],[130.54239,31.1913],[130.50009,31.19207],[130.50009,31.21581],[130.52494,31.21715],[130.52516,31.24184]],[[130.74987,31.16622],[130.74965,31.24107],[130.77449,31.25887],[130.77718,31.33307],[130.75122,31.37455],[130.74898,31.41658],[130.67557,31.46852],[130.67489,31.50077],[131.40006,31.5002],[131.40834,31.45916],[131.36694,31.40932],[131.3656,31.35142],[131.31703,31.34206],[131.29957,31.36595],[131.24317,31.36633],[131.19952,31.43358],[131.14782,31.45019],[131.13394,31.45],[131.1326,31.42899],[131.10059,31.42536],[131.05091,31.41639],[131.04912,31.39155],[131.08403,31.35085],[131.11626,31.35085],[131.11783,31.33422],[130.99943,31.33365],[130.99965,31.25102],[130.87521,31.25064],[130.87454,31.16679],[130.74987,31.16622]],[[130.86625,30.47468],[130.86602,30.49937],[130.93362,30.57493],[130.93227,30.61597],[131.00636,30.61655],[131.04933,30.59112],[131.04933,30.54275],[130.99203,30.50843],[130.99114,30.47526],[130.86625,30.47468]],[[137.87486,36.37519],[138.00005,36.37494],[138.00005,36.30839],[138.04159,36.30827],[138.04191,36.29175],[138.08306,36.29162],[138.08353,36.2499],[138.13307,36.24996],[138.13354,36.16677],[138.16654,36.1667],[138.16694,36.12485],[138.04167,36.12491],[138.04144,36.04158],[137.87479,36.04152],[137.87486,36.37519]],[[138.37446,35.83393],[138.4998,35.83285],[138.4998,35.75042],[138.74936,35.7506],[138.7507,35.58332],[138.62447,35.58386],[138.62536,35.49991],[138.37491,35.49972],[138.37446,35.83393]],[[135.79179,35.64165],[135.8006,35.64923],[135.834,35.65052],[135.8916,35.62003],[135.89271,35.6091],[135.95776,35.60858],[135.9834,35.6172],[135.98435,35.641],[135.95095,35.6419],[135.95048,35.68305],[135.94225,35.69204],[135.94178,35.73239],[136.00809,35.77516],[136.03167,35.77503],[136.05018,35.75012],[136.05003,35.66646],[136.0084,35.65836],[136.00856,35.61694],[136.03404,35.60022],[136.06664,35.59996],[136.06617,35.61656],[136.1002,35.62492],[136.1002,35.69127],[136.07598,35.69166],[136.07503,35.74922],[136.08342,35.76694],[136.12441,35.76605],[136.15021,35.7004],[136.15875,35.64216],[136.17442,35.62492],[136.17553,35.58342],[136.1749,35.55813],[136.15859,35.55832],[136.15875,35.56701],[136.1165,35.56675],[136.11626,35.52555],[136.04045,35.5247],[136.01684,35.50311],[136.01661,35.48334],[135.97543,35.48334],[135.94141,35.50885],[135.94186,35.56641],[135.93358,35.57487],[135.90873,35.57514],[135.90851,35.59953],[135.83185,35.59972],[135.7928,35.62519],[135.79179,35.64165]],[[135.80916,35.47505],[135.77044,35.53345],[135.7579,35.53326],[135.74168,35.51641],[135.70072,35.51705],[135.67464,35.53363],[135.67543,35.56659],[135.6996,35.58333],[135.81654,35.58343],[135.81654,35.56804],[135.85817,35.54956],[135.85851,35.52543],[135.8509,35.5247],[135.85012,35.47514],[135.80916,35.47505]],[[135.58333,35.44132],[135.61656,35.44989],[135.64163,35.47496],[135.71639,35.47478],[135.71728,35.46703],[135.81442,35.46539],[135.86668,35.44187],[135.86679,35.40868],[135.81722,35.40822],[135.81677,35.38496],[135.77548,35.3835],[135.75835,35.40804],[135.59183,35.4084],[135.58322,35.42536],[135.58333,35.44132]],[[135.40011,35.43312],[135.42496,35.44189],[135.45803,35.45008],[135.45899,35.49164],[135.46642,35.49184],[135.46619,35.50807],[135.44181,35.51709],[135.43968,35.53293],[135.45843,35.55804],[135.52324,35.55811],[135.52498,35.5091],[135.54152,35.50008],[135.54152,35.4834],[135.57515,35.48366],[135.57491,35.49164],[135.60878,35.49171],[135.60894,35.46684],[135.59208,35.45826],[135.53305,35.45826],[135.50029,35.45008],[135.50045,35.4415],[135.50789,35.42506],[135.53337,35.42513],[135.53297,35.38346],[135.5416,35.38333],[135.54176,35.36688],[135.5086,35.35836],[135.50892,35.34216],[135.50013,35.34164],[135.50013,35.41662],[135.39987,35.41655],[135.40011,35.43312]],[[133.70822,35.45816],[133.70822,35.33319],[133.12484,35.33328],[133.12495,35.3749],[132.95877,35.37508],[132.95821,35.4578],[132.87506,35.45853],[132.87461,35.52504],[132.95015,35.52522],[132.9497,35.55819],[133.01674,35.55855],[133.01685,35.56675],[133.03352,35.56693],[133.03308,35.59205],[133.06687,35.59187],[133.06654,35.6168],[133.14135,35.61671],[133.14151,35.59181],[133.36667,35.59186],[133.36689,35.57484],[133.34216,35.57447],[133.34194,35.558],[133.33321,35.55026],[133.28363,35.55017],[133.28341,35.49178],[133.33354,35.4916],[133.33354,35.47529],[133.41714,35.47492],[133.41714,35.37516],[133.49995,35.37534],[133.49973,35.45806],[133.45854,35.45806],[133.45854,35.51629],[133.49212,35.5335],[133.54136,35.54161],[133.58343,35.54197],[133.58355,35.45843],[133.70822,35.45816]],[[133.84174,35.46646],[133.84158,35.58367],[133.975,35.58329],[133.97532,35.5086],[134.00823,35.50834],[134.0334,35.49971],[134.0421,35.47497],[134.04432,35.45834],[134.08357,35.4586],[134.08309,35.53359],[134.13326,35.54969],[134.23328,35.55999],[134.27491,35.58342],[134.33299,35.58367],[134.33521,35.49172],[134.36654,35.49224],[134.36654,35.49997],[134.41718,35.49971],[134.41592,35.5417],[134.6253,35.54157],[134.62514,35.37554],[134.70839,35.37463],[134.70823,35.33398],[134.41655,35.33359],[134.41592,35.37528],[134.39218,35.37541],[134.39155,35.35011],[134.37477,35.33346],[134.20005,35.33359],[134.19939,35.35874],[134.24997,35.39971],[134.27515,35.39962],[134.27504,35.39205],[134.35819,35.39314],[134.35852,35.3999],[134.3752,35.39999],[134.37441,35.42489],[134.33256,35.42507],[134.33278,35.41659],[134.04954,35.41659],[134.05077,35.39178],[134.0661,35.39187],[134.06711,35.39999],[134.14187,35.40017],[134.14164,35.36678],[134.18339,35.35847],[134.18372,35.33337],[133.78309,35.33364],[133.78331,35.34159],[133.82472,35.3592],[133.82505,35.38311],[133.84173,35.40838],[133.89981,35.40893],[133.89981,35.41677],[133.85829,35.41659],[133.8574,35.46646],[133.84174,35.46646]],[[133.24987,33.66667],[133.41786,33.66674],[133.52485,33.66674],[133.52493,33.79178],[133.64157,33.79185],[133.64188,33.66681],[133.75006,33.66687],[133.75029,33.62517],[133.79152,33.62498],[133.79168,33.5084],[133.73336,33.5084],[133.73328,33.51658],[133.64196,33.51671],[133.60833,33.48346],[133.52493,33.46682],[133.47492,33.41935],[133.43313,33.38321],[133.37497,33.38334],[133.37497,33.49157],[133.20817,33.49191],[133.20824,33.55827],[133.24947,33.55833],[133.24987,33.66667]],[[134.3501,33.73355],[134.4832,33.73368],[134.48336,33.66732],[134.43366,33.65033],[134.43287,33.63412],[134.35279,33.63347],[134.3501,33.73355]],[[140.31656,36.21656],[140.31671,36.44984],[140.34973,36.44994],[140.35012,36.51668],[140.47467,36.51671],[140.47483,36.59159],[140.62489,36.59204],[140.62467,36.63354],[140.64974,36.6348],[140.65041,36.71684],[140.69912,36.81554],[140.71006,36.91306],[140.70838,36.95687],[140.74956,36.95866],[140.75323,37.06176],[140.75001,37.16671],[141.00832,37.16666],[141.00837,37.0917],[140.98331,37.05828],[140.98333,36.95834],[140.90834,36.90002],[140.81672,36.89999],[140.80828,36.87498],[140.80833,36.85],[140.81655,36.85004],[140.81669,36.8415],[140.81669,36.81816],[140.79988,36.80832],[140.7834,36.79992],[140.775,36.79523],[140.77498,36.78339],[140.75836,36.775],[140.75825,36.75837],[140.75002,36.75831],[140.74689,36.71939],[140.73336,36.65048],[140.69167,36.58337],[140.65003,36.51336],[140.64998,36.38351],[140.59986,36.27483],[140.57499,36.24796],[140.57463,36.21729],[140.31656,36.21656]],[[141.2166,41.24992],[141.41662,41.24971],[141.39858,41.17052],[141.40426,41.0968],[141.39503,41.04046],[141.39858,40.97185],[141.40625,40.91003],[141.41136,40.83011],[141.41307,40.80204],[141.42245,40.74987],[141.34161,40.75084],[141.3149,40.74556],[141.29203,40.74169],[141.23322,40.7419],[141.23307,40.85837],[141.25026,40.85858],[141.24941,40.91647],[141.17412,40.9169],[141.22498,40.9948],[141.23819,41.0696],[141.2497,41.1258],[141.27143,41.15875],[141.23336,41.22995],[141.2166,41.24992]],[[141.25854,41.3166],[141.15015,41.31672],[141.1499,41.39163],[141.18877,41.39205],[141.21625,41.37916],[141.25849,41.36012],[141.25854,41.3166]],[[141.05841,45.2584],[141.03453,45.25833],[141.00874,45.25815],[141.0083,45.27495],[140.99994,45.27495],[141.00002,45.30371],[140.99999,45.30828],[140.99196,45.30846],[140.99171,45.34162],[140.98351,45.34172],[140.98336,45.34998],[140.97477,45.35008],[140.97502,45.3667],[140.96664,45.36675],[140.96685,45.39818],[140.9665,45.42499],[140.9584,45.42484],[140.95816,45.43314],[140.95012,45.4335],[140.94967,45.51651],[140.97443,45.51672],[140.97448,45.50014],[140.98307,45.50042],[140.98332,45.46697],[140.99045,45.46704],[140.99135,45.45876],[141.00019,45.45813],[141.00035,45.45002],[141.01627,45.4502],[141.01637,45.47496],[141.04992,45.47532],[141.04992,45.46676],[141.06614,45.46679],[141.0665,45.4502],[141.07463,45.44999],[141.07498,45.34178],[141.0666,45.34168],[141.06418,45.30611],[141.06644,45.30565],[141.06629,45.28484],[141.05906,45.28357],[141.05841,45.2584]],[[144.27488,42.96671],[144.27502,42.99155],[144.25861,42.99145],[144.25805,42.98314],[144.20818,42.98319],[144.20854,42.97472],[144.16684,42.97503],[144.16684,43.00496],[144.16642,43.04178],[144.07486,43.04188],[144.07493,43.10025],[144.24988,43.1],[144.24988,43.1168],[144.29179,43.11675],[144.292,43.0919],[144.4168,43.09185],[144.4168,43.1168],[144.56654,43.1168],[144.56675,42.99171],[144.50005,42.9915],[144.5002,42.92481],[144.46653,42.92501],[144.31739,42.96675],[144.27488,42.96671]],[[140.69973,42.57513],[140.70015,42.61647],[140.84451,42.61673],[140.99961,42.61669],[141.00006,42.54168],[141.24984,42.54168],[141.24994,42.58336],[141.29163,42.58332],[141.29158,42.6251],[141.37501,42.62498],[141.37501,42.66662],[141.49992,42.66666],[141.49992,42.8165],[141.47496,42.8165],[141.47511,42.83341],[141.81236,42.83357],[141.95752,42.83328],[141.94355,42.77977],[141.95762,42.77896],[141.95832,42.7502],[141.99991,42.75086],[141.9992,42.71493],[142.00031,42.67632],[142.01799,42.65076],[142.09082,42.65002],[142.09122,42.5251],[142.02472,42.5251],[141.96033,42.52495],[141.8665,42.52518],[141.8656,42.57713],[141.83577,42.58519],[141.80482,42.57417],[141.74646,42.57705],[141.73069,42.61477],[141.61707,42.61055],[141.52134,42.60331],[141.45615,42.57587],[141.3562,42.52866],[141.27523,42.48822],[141.19507,42.43791],[141.10476,42.3914],[141.05393,42.33165],[141.0254,42.29161],[140.95187,42.29146],[140.9147,42.32682],[140.89451,42.37174],[140.88426,42.42723],[140.85041,42.46096],[140.76643,42.49978],[140.76663,42.52821],[140.69973,42.57513]],[[140.75005,43.23374],[140.82762,43.2135],[140.88245,43.22531],[140.97338,43.24601],[141.02139,43.24311],[141.04213,43.20211],[141.08346,43.18205],[141.17267,43.16382],[141.25678,43.19366],[141.37528,43.33327],[141.62491,43.33335],[141.62451,43.4168],[141.79146,43.4168],[141.79197,43.83339],[142.12487,43.83332],[142.12487,43.75022],[142.16656,43.74993],[142.16656,43.83317],[142.24954,43.83325],[142.24984,43.8581],[142.27465,43.8581],[142.27465,43.87425],[142.26671,43.8749],[142.26651,43.91688],[142.24994,43.9171],[142.25001,44.5],[142.49997,44.50013],[142.49977,43.88366],[142.51674,43.88344],[142.51644,43.83346],[142.62473,43.83346],[142.62473,43.58331],[142.54176,43.58403],[142.54196,43.50008],[142.50057,43.50022],[142.50037,43.25006],[142.25054,43.25014],[142.25004,43.45838],[142.00031,43.45816],[142.00001,43.41724],[141.91703,43.41688],[141.91703,43.33342],[141.87494,43.33327],[141.87454,43.17487],[141.93351,43.17473],[141.93391,43.15868],[141.99137,43.15802],[141.99207,43.1334],[141.87524,43.13332],[141.87484,43.00012],[141.49984,43.00027],[141.50015,42.91683],[141.25021,42.91631],[141.25001,42.9999],[141.12505,43.00005],[141.12525,43.08323],[140.99988,43.0836],[141.00008,43.16638],[140.75086,43.1666],[140.75005,43.23374]],[[140.59121,41.78353],[140.58382,41.8334],[140.58453,41.87732],[140.59092,41.91613],[140.60797,41.94403],[140.57544,41.95914],[140.58439,41.99979],[140.7104,42.00011],[140.86894,42.00011],[140.91724,42.00053],[140.99041,41.91909],[141.04737,41.90693],[141.12722,41.88398],[141.17552,41.83732],[141.20194,41.81488],[141.18418,41.78321],[141.11301,41.76711],[141.05689,41.71559],[140.99382,41.69968],[140.94267,41.70414],[140.89238,41.73563],[140.84806,41.74326],[140.80018,41.75672],[140.73299,41.74634],[140.69705,41.73234],[140.6881,41.76986],[140.59121,41.78353]],[[140.2418,42.2338],[140.24159,42.25827],[140.21005,42.25797],[140.20804,42.27485],[140.26611,42.27514],[140.2651,42.29179],[140.29001,42.2912],[140.29182,42.26779],[140.33914,42.24139],[140.34145,42.21662],[140.29323,42.21662],[140.2418,42.2338]],[[140.55007,42.08447],[140.54977,42.11387],[140.58066,42.11193],[140.62636,42.12069],[140.63365,42.12136],[140.6336,42.10061],[140.60853,42.09964],[140.60848,42.08327],[140.54972,42.08312],[140.55007,42.08447]],[[140.6583,41.06668],[140.67117,40.91974],[140.84492,40.91652],[140.91726,40.91688],[140.91712,40.87597],[140.9846,40.87533],[140.98503,40.79278],[141.13391,40.79192],[141.13972,40.68034],[141.17424,40.68174],[141.18504,40.60057],[141.43351,40.60078],[141.43308,40.51757],[141.18305,40.51649],[141.18362,40.58223],[141.16714,40.59172],[141.04397,40.59237],[141.04283,40.65825],[140.98402,40.65836],[140.72646,40.65857],[140.72589,40.57521],[140.66849,40.57467],[140.60883,40.57489],[140.60925,40.48311],[140.55058,40.483],[140.54888,40.51757],[140.40028,40.51692],[140.40013,40.5832],[140.25665,40.58233],[140.24898,40.63292],[140.33251,40.63292],[140.33251,40.66687],[140.41676,40.66698],[140.41704,40.73311],[140.33194,40.73375],[140.33351,40.75851],[140.28421,40.75818],[140.28037,40.85679],[140.30254,40.98507],[140.31845,41.00019],[140.42443,41.0004],[140.42443,40.90029],[140.55044,40.89975],[140.54994,41.06668],[140.6583,41.06668]],[[140.01669,40.33381],[140.25252,40.33381],[140.25006,39.33298],[139.98341,39.3332],[140.05622,39.72433],[140.00614,39.77043],[139.94073,39.88023],[139.94158,40.01081],[139.94055,40.08509],[139.94116,40.10876],[140.01669,40.33381]],[[139.85814,39.04176],[139.87552,39.04137],[139.87703,39.00009],[139.91671,39.00001],[139.9167,38.79173],[139.75493,38.79165],[139.7502,38.79386],[139.79376,38.89687],[139.79014,38.9254],[139.83615,38.99102],[139.85814,39.04176]],[[139.37551,38.1174],[139.38053,37.95893],[139.417,37.95845],[139.417,37.87413],[139.37571,37.8746],[139.37611,37.83296],[139.29234,37.83145],[139.30007,37.78074],[139.29173,37.68357],[139.29193,37.66473],[139.22935,37.6594],[139.18113,37.61024],[139.14537,37.60769],[139.12367,37.62671],[139.09816,37.65018],[139.08831,37.6664],[138.99951,37.66656],[138.99942,37.79171],[138.81261,37.79199],[138.86834,37.84689],[138.9915,37.91333],[139.08231,37.9775],[139.27679,38.03417],[139.37551,38.1174]],[[139.96008,38.49993],[140.50033,38.50009],[140.50023,38.16654],[140.37496,38.16654],[140.37536,38.08348],[140.2504,38.08293],[140.21705,38.07407],[140.22136,38.0422],[140.2512,38.04196],[140.2504,38.00017],[140.23372,37.99962],[140.23352,37.94197],[140.20861,37.9411],[140.20841,37.90013],[140.19253,37.89965],[140.19123,37.88372],[140.15838,37.883],[140.15828,37.85811],[140.0753,37.85945],[140.0741,37.87476],[140.05019,37.87571],[140.05019,37.89252],[140.05762,37.89355],[140.05813,37.92541],[140.0741,37.92573],[140.0742,37.94197],[140.09871,37.95369],[140.09821,37.99234],[140.10182,38.00041],[140.12282,38.00081],[140.11549,38.01806],[140.08977,38.02795],[140.0747,38.04133],[140.06727,38.03492],[140.06707,37.99186],[140.01634,37.9917],[140.01584,38.066],[139.99805,38.06656],[139.99966,38.13739],[139.99956,38.17514],[139.99795,38.3337],[139.95787,38.33378],[139.95837,38.50028],[139.96008,38.49993]],[[140.70822,38.7833],[140.70837,39.15023],[141.04194,39.14957],[141.04167,39.50008],[141.00147,39.49986],[140.99893,39.91638],[141.25077,39.91692],[141.25037,39.5007],[141.16709,39.50008],[141.16699,39.45627],[141.16669,39.40273],[141.16689,39.25073],[141.20798,39.24996],[141.20898,38.87471],[141.03399,38.8751],[141.03339,38.78354],[140.86794,38.78315],[140.70822,38.7833]],[[141.3759,38.36972],[141.37476,38.49992],[141.24904,38.50025],[141.25134,38.66886],[141.52524,38.66653],[141.54981,38.63369],[141.55052,38.55563],[141.55549,38.47938],[141.56558,38.39559],[141.54626,38.37398],[141.55919,38.32429],[141.59854,38.31226],[141.59527,38.26063],[141.50762,38.23664],[141.46983,38.24479],[141.39226,38.27725],[141.41158,38.34781],[141.3759,38.36972]],[[131.04175,33.7381],[131.0413,33.70887],[130.99956,33.70858],[131.00035,33.68392],[131.04959,33.68392],[131.05014,33.64171],[131.0751,33.64201],[131.07588,33.61683],[131.10039,33.61666],[131.10084,33.60082],[131.17448,33.60007],[131.19999,33.58422],[131.20066,33.55868],[131.2405,33.55868],[131.28258,33.54207],[131.33137,33.52528],[131.41821,33.55065],[131.51625,33.55084],[131.51692,33.5667],[131.63353,33.56688],[131.63308,33.47545],[131.7423,33.47452],[131.74946,33.45939],[131.75014,33.33289],[131.60756,33.33401],[131.60801,33.37421],[131.52565,33.37458],[131.52467,33.26691],[131.5769,33.25843],[131.64942,33.28332],[131.71634,33.28388],[131.77497,33.26687],[131.78385,33.25028],[131.83291,33.25015],[131.88403,33.2745],[131.90825,33.2749],[131.90809,33.25849],[131.87517,33.20607],[131.84985,33.18276],[131.85032,33.14964],[131.87525,33.15038],[131.90777,33.14129],[131.9171,33.13332],[131.91733,33.10858],[131.9505,33.09967],[131.95019,33.08349],[131.98279,33.08336],[131.98279,33.10007],[132.00036,33.1169],[132.0252,33.1169],[132.02473,33.0998],[132.00843,33.09172],[132.00843,33.06718],[132.01745,33.06705],[132.01715,33.04988],[131.99181,33.04211],[131.92518,33.04092],[131.9255,33.025],[131.95003,33.025],[131.95045,33.01347],[131.95034,32.97482],[131.98326,32.97536],[131.98492,32.95941],[132.0261,32.95922],[132.05828,32.95862],[132.05844,32.99142],[132.07198,32.9917],[132.08297,32.98332],[132.09168,32.92635],[132.02473,32.92542],[132.02473,32.90058],[132.03349,32.88294],[132.00795,32.88357],[131.98326,32.85871],[131.99988,32.8498],[132.01715,32.8429],[132.01603,32.82654],[131.97551,32.78396],[131.93411,32.76746],[131.8992,32.76614],[131.89179,32.71661],[131.83317,32.6507],[131.78369,32.64894],[131.78415,32.58396],[131.74185,32.58283],[131.7082,32.56669],[131.70773,32.54294],[131.74159,32.50852],[131.74141,32.45129],[131.70804,32.44216],[131.70112,32.40878],[131.65787,32.39219],[131.64226,32.33355],[131.59948,32.27572],[131.57492,32.18338],[131.54184,32.08474],[131.542,32.00009],[131.49975,32.00023],[131.50038,31.74971],[131.4586,31.75011],[131.45876,31.79182],[131.24969,31.79169],[131.24969,32.16704],[131.37488,32.16717],[131.37504,32.25046],[131.49991,32.25019],[131.49991,32.33341],[131.54137,32.33341],[131.54167,32.62506],[131.66645,32.62515],[131.66633,32.66662],[131.74993,32.66652],[131.75006,32.91664],[131.5977,32.91688],[131.25044,32.91663],[131.24902,33.00042],[131.49971,33.00002],[131.49987,33.06345],[131.50018,33.13915],[131.4804,33.16631],[131.284,33.16618],[131.26706,33.20035],[131.26627,33.25039],[131.29966,33.26985],[131.29951,33.31999],[131.24427,33.34114],[131.17511,33.34154],[131.17527,33.35806],[131.07525,33.35806],[131.07572,33.33347],[131.00055,33.33321],[131.00007,33.2496],[130.91445,33.2496],[130.7497,33.25013],[130.7497,33.08374],[130.62546,33.08321],[130.62546,33.00002],[130.72796,33.00171],[130.87492,33.00018],[130.8753,32.79131],[130.96677,32.79185],[130.96709,32.85808],[130.92531,32.85781],[130.92531,32.95029],[130.96679,32.95831],[131.00012,32.91683],[131.00017,32.50007],[130.66647,32.50046],[130.66669,32.33306],[130.62506,32.33306],[130.62461,32.24943],[130.49972,32.25037],[130.50039,32.12517],[130.33275,32.12498],[130.3437,32.16133],[130.34954,32.20815],[130.42748,32.29423],[130.46637,32.40054],[130.4939,32.40073],[130.523,32.43304],[130.54941,32.44456],[130.54986,32.4659],[130.48383,32.46647],[130.47421,32.47535],[130.4751,32.50064],[130.5089,32.54197],[130.62439,32.62571],[130.62484,32.6666],[130.52569,32.66679],[130.52524,32.68337],[130.55859,32.71671],[130.55903,32.7745],[130.57493,32.78372],[130.57493,32.82172],[130.50935,32.84185],[130.50778,32.86986],[130.44155,32.89158],[130.41624,32.94258],[130.41579,32.97488],[130.37438,33.00098],[130.37528,33.08315],[130.24927,33.08372],[130.24905,33.16076],[130.15863,33.09741],[130.17775,33.07174],[130.18369,33.06684],[130.18369,33.03401],[130.19958,33.025],[130.19977,33.00001],[130.12479,33.00001],[130.12457,32.96678],[130.0409,32.9407],[130.02501,32.94164],[130.02456,32.91647],[130.12457,32.9172],[130.12457,32.86739],[130.15031,32.86683],[130.19578,32.8661],[130.23334,32.89183],[130.29198,32.89183],[130.29243,32.84991],[130.29153,32.7916],[130.2922,32.71725],[130.18343,32.65791],[130.15034,32.65002],[130.11539,32.64962],[130.11744,32.70014],[130.15903,32.71706],[130.24856,32.75867],[130.24968,32.79085],[130.1333,32.79235],[130.12569,32.76751],[130.00147,32.74963],[129.9294,32.67317],[129.80048,32.57459],[129.80003,32.54704],[129.77425,32.54749],[129.71767,32.54987],[129.71632,32.59043],[129.7499,32.67487],[129.75012,32.72459],[129.80025,32.72553],[129.74161,32.77523],[129.62411,32.8501],[129.62646,32.91787],[129.83159,32.91738],[129.87121,32.91644],[129.89269,32.94105],[129.93343,33.00827],[129.967,33.07469],[130.05809,33.12025],[130.05876,33.21693],[130.24946,33.21674],[130.2499,33.33331],[130.21566,33.3335],[130.0422,33.33331],[129.92559,33.33294],[129.90836,33.35837],[129.90791,33.38304],[129.86695,33.38285],[129.86697,33.36012],[129.83338,33.34079],[129.80093,33.34098],[129.80003,33.31592],[129.75057,33.31686],[129.75034,33.27533],[129.72572,33.27477],[129.6917,33.30807],[129.69237,33.25025],[129.87479,33.25025],[129.8759,33.21299],[129.87521,33.11856],[129.87523,33.03323],[129.80831,33.03305],[129.7499,33.05031],[129.734,33.058],[129.72658,33.08172],[129.69842,33.09982],[129.62413,33.09928],[129.62374,33.12377],[129.62501,33.24201],[129.59255,33.24108],[129.59255,33.29928],[129.54197,33.3004],[129.50012,33.31761],[129.49989,33.41686],[129.59949,33.41593],[129.66753,33.40864],[129.66775,33.43274],[129.8336,33.56656],[129.93208,33.56787],[129.93522,33.40827],[130.04131,33.3836],[130.04108,33.48428],[130.24901,33.48465],[130.25057,33.61681],[130.28504,33.63405],[130.28303,33.69151],[130.30888,33.69151],[130.32365,33.66712],[130.39225,33.69179],[130.41777,33.72484],[130.43388,33.77546],[130.39024,33.87047],[130.39113,33.92509],[130.50774,33.92621],[130.60555,33.89166],[130.66665,33.9496],[130.74991,34.00844],[130.84973,34.00825],[130.8504,34.14155],[130.88308,34.19192],[130.85801,34.27519],[130.83228,34.36706],[130.97127,34.45052],[131.08608,34.43336],[131.19307,34.44166],[131.29356,34.44092],[131.36518,34.44591],[131.37548,34.5328],[131.44934,34.55013],[131.57445,34.69176],[131.62526,34.69158],[131.78596,34.70078],[131.86989,34.77435],[131.99545,34.88146],[132.37594,35.16739],[132.74972,35.16684],[132.75084,35.08318],[132.6255,35.08337],[132.62505,34.91671],[132.3755,34.91689],[132.37527,34.83426],[132.12482,34.83298],[132.12482,34.75008],[132.00038,34.7499],[132.00038,34.5833],[131.74989,34.58326],[131.75139,34.37954],[131.75147,34.1671],[132.12497,34.16683],[132.12481,34.2914],[132.25016,34.29193],[132.24929,34.40917],[132.25016,34.49983],[132.37249,34.49996],[132.37503,34.58339],[132.49167,34.58339],[132.49182,34.70831],[132.59177,34.70824],[132.58365,34.5417],[132.84148,34.54133],[132.84193,34.66623],[133.08343,34.66678],[133.08365,34.76631],[133.20743,34.76687],[133.20787,34.66678],[133.49973,34.66642],[133.50026,34.83314],[133.7012,34.83357],[133.69941,34.87526],[133.74984,34.87535],[133.74984,34.9999],[133.8751,35.00003],[133.87518,35.12504],[133.97425,35.12517],[133.97546,35.00097],[134.0585,34.99997],[134.05816,35.07464],[134.16654,35.0748],[134.1667,35.00016],[134.75338,35.00016],[134.83324,34.99997],[134.8333,35.04176],[135.24494,35.04176],[135.37472,35.04153],[135.37535,35.0836],[135.74948,35.08335],[135.75066,35.25004],[135.87474,35.2503],[135.87529,35.33388],[136.00001,35.33356],[136.00024,35.2587],[135.98331,35.24255],[135.93361,35.20027],[135.93306,35.1667],[135.97539,35.16664],[135.97523,35.15597],[136.04993,35.15829],[136.04993,35.21663],[136.05895,35.22484],[136.12455,35.23344],[136.12536,35.25011],[136.16667,35.24997],[136.16651,35.36441],[136.16664,35.45873],[136.33347,35.45857],[136.37478,35.33382],[136.49981,35.33356],[136.49965,35.49981],[136.74991,35.58365],[137.00003,35.58344],[136.99984,35.41254],[136.99999,35.33351],[137.24995,35.33357],[137.24998,34.91665],[137.6249,34.91658],[137.62516,35.00034],[137.69186,35.00052],[137.69182,35.06711],[137.74199,35.06668],[137.74222,35.10789],[137.77489,35.10844],[137.77474,35.15015],[138.16671,35.15021],[138.16666,35.2918],[138.38224,35.29138],[138.50029,35.29187],[138.50119,35.33333],[138.38256,35.33369],[138.38319,35.44169],[138.49985,35.44208],[138.49988,35.4584],[138.66644,35.45855],[138.66704,35.37476],[138.70818,35.37519],[138.70818,35.33348],[138.8334,35.33357],[138.83329,35.40832],[139.0082,35.40836],[139.00858,35.39192],[139.1243,35.39228],[139.12498,35.41668],[139.25001,35.41667],[139.24995,35.49996],[139.12487,35.50005],[139.12492,35.5833],[138.99999,35.58333],[138.99999,35.6667],[139.1249,35.66678],[139.12504,35.8092],[139.12474,35.91713],[139.00053,35.91713],[139.00006,36.00001],[139.12492,36.00012],[139.12547,36.11894],[139.12495,36.16664],[139,36.16668],[138.99941,36.25031],[138.95831,36.25002],[138.95822,36.29127],[138.91663,36.29166],[138.91678,36.37496],[138.95845,36.37565],[138.95836,36.45832],[139.08379,36.45868],[139.08334,36.5],[139.25009,36.50012],[139.2496,36.54136],[139.37464,36.54189],[139.37505,36.62499],[139.45022,36.62528],[139.44999,36.66667],[139.66374,36.66671],[139.75002,36.66665],[139.75005,36.75003],[140,36.75001],[139.99998,36.62209],[140.00001,36.41668],[140.25001,36.41666],[140.24999,36.04158],[140.50004,36.04158],[140.49989,35.83349],[140.41632,35.83374],[140.4168,35.7919],[140.45874,35.79113],[140.45874,35.72461],[140.51666,35.72486],[140.51691,35.7417],[140.59144,35.74174],[140.5915,35.94177],[140.65002,35.94164],[140.64994,36.00837],[140.67503,36.00834],[140.71403,35.92326],[140.77327,35.83877],[140.81532,35.78508],[140.89133,35.7501],[140.89211,35.71717],[140.86632,35.67853],[140.80694,35.70622],[140.72767,35.6761],[140.68235,35.68891],[140.60194,35.63074],[140.48545,35.54409],[140.4095,35.42897],[140.40816,35.33353],[140.30722,35.33371],[140.30767,35.41748],[140.30946,35.45851],[140.20762,35.45905],[140.20829,35.37478],[140.12503,35.37478],[140.12436,35.33408],[140.29155,35.33316],[140.29245,35.20909],[140.31707,35.20836],[140.31662,35.18422],[140.35042,35.18257],[140.3431,35.13152],[140.23201,35.10096],[140.13697,35.09271],[140.05542,35.03643],[139.98865,34.98849],[139.96379,34.91688],[139.91222,34.88262],[139.82272,34.89218],[139.78337,34.93633],[139.73961,34.95322],[139.7443,34.99303],[139.81476,35.00932],[139.7963,35.05283],[139.80169,35.09108],[139.80766,35.1529],[139.80866,35.19667],[139.85153,35.24127],[139.8325,35.29189],[139.74927,35.2961],[139.76149,35.33517],[139.79232,35.35267],[139.81035,35.49933],[140.0035,35.49988],[140.03349,35.53668],[140.06639,35.58384],[139.79714,35.58311],[139.80005,35.50079],[139.77087,35.47343],[139.70992,35.44207],[139.6987,35.40282],[139.66887,35.36715],[139.68478,35.30781],[139.73549,35.2728],[139.75069,35.25934],[139.73734,35.23092],[139.74388,35.20852],[139.69714,35.18971],[139.67426,35.1702],[139.68932,35.15394],[139.68151,35.13477],[139.62355,35.12199],[139.59783,35.1285],[139.60224,35.17253],[139.58363,35.18959],[139.59033,35.24164],[139.5496,35.28403],[139.49879,35.30084],[139.42314,35.30942],[139.29131,35.30066],[139.23074,35.27778],[139.15546,35.23542],[139.15031,35.17507],[139.16665,35.13316],[139.12502,35.13298],[139.09436,35.13335],[139.05832,35.13316],[139.05671,35.00443],[139.03348,34.98385],[138.99968,34.98367],[139.00057,34.88274],[139.14136,34.88348],[139.11002,34.84602],[139.08129,34.79529],[139.01691,34.74107],[138.9999,34.64151],[138.90044,34.6097],[138.87367,34.59159],[138.80026,34.59988],[138.75773,34.65881],[138.72528,34.67575],[138.72528,34.72506],[138.83316,34.72598],[138.83383,34.74952],[138.7419,34.75106],[138.7338,34.8136],[138.74985,34.90057],[138.76065,34.93773],[138.75028,34.98313],[138.77855,35.04352],[138.87546,35.03316],[138.87703,35.04929],[138.85845,35.04984],[138.76804,35.12107],[138.68294,35.12223],[138.61873,35.09015],[138.55409,35.05201],[138.54926,34.99442],[138.49996,34.95392],[138.39142,34.91129],[138.35562,34.86759],[138.33929,34.80042],[138.27635,34.72246],[138.24467,34.66616],[138.24396,34.58503],[138.12662,34.58573],[138.01467,34.62561],[137.88184,34.65541],[137.79532,34.63718],[137.68991,34.65307],[137.57654,34.66441],[137.38135,34.64618],[137.18402,34.58409],[137.03187,34.5662],[137.00794,34.57573],[137.0254,34.61792],[137.0599,34.66613],[137.17517,34.66686],[137.30767,34.75996],[137.29894,34.77595],[137.29088,34.79231],[137.25037,34.79213],[137.21635,34.76768],[137.15816,34.74911],[137.08318,34.75076],[137.03215,34.76345],[136.94061,34.80848],[136.93456,34.77522],[136.98335,34.72575],[137.06751,34.74212],[137.06773,34.70183],[137.02454,34.70809],[137.01581,34.64937],[136.98179,34.65029],[136.82601,34.74911],[136.84884,34.82319],[136.79266,34.82521],[136.79132,35.00048],[136.75081,35.00012],[136.74991,34.95849],[136.68277,34.96069],[136.6624,34.89701],[136.59078,34.80003],[136.53863,34.72704],[136.58294,34.62506],[136.75682,34.54181],[136.85798,34.54126],[136.93945,34.54347],[136.91675,34.49231],[136.94081,34.46687],[136.94113,34.40866],[136.92404,34.35876],[136.90742,34.30209],[136.90045,34.2666],[136.84981,34.23416],[136.81693,34.1923],[136.79948,34.19254],[136.79996,34.22906],[136.74203,34.25863],[136.73325,34.28285],[136.70896,34.28334],[136.64264,34.25902],[136.5594,34.22605],[136.53564,34.22167],[136.50068,34.20864],[136.44007,34.20053],[136.38325,34.16675],[136.3334,34.14802],[136.31583,34.08487],[136.2674,34.08316],[136.12497,34.08343],[136.12449,34.16688],[136.24968,34.16688],[136.24984,34.25012],[136.37486,34.25025],[136.37468,34.33331],[136.50021,34.33302],[136.49973,34.49192],[136.45843,34.49127],[136.45811,34.5416],[136.4168,34.54186],[136.41664,34.62516],[136.37494,34.62464],[136.37469,34.68106],[136.37485,34.74974],[136.33402,34.75026],[136.33354,34.79109],[136.37485,34.79213],[136.37533,34.95858],[136.33323,34.95858],[136.33323,34.83345],[136.29239,34.83371],[136.29208,34.792],[136.24966,34.79213],[136.24998,34.70838],[136.29192,34.70851],[136.2916,34.62475],[136.12487,34.62512],[136.12498,34.66674],[136.04161,34.66655],[136.04094,34.7499],[136.00023,34.75009],[135.99991,34.65993],[135.99975,34.58387],[136.04153,34.58374],[136.04185,34.50017],[136.04989,34.49997],[136.05005,34.42503],[135.91674,34.425],[135.91667,34.35836],[135.81665,34.35837],[135.81661,34.31668],[135.74991,34.31672],[135.75007,34.29167],[135.64152,34.29176],[135.64186,34.27512],[135.53325,34.27489],[135.53348,34.25834],[135.475,34.25834],[135.47511,34.22498],[135.37507,34.22512],[135.3749,34.20814],[135.50001,34.20837],[135.50001,33.66652],[135.87502,33.66661],[135.87558,33.74983],[136.03371,33.75021],[136.01272,33.71062],[135.99681,33.67327],[135.97948,33.63389],[135.97195,33.61271],[135.95831,33.56798],[135.85332,33.50522],[135.85353,33.48302],[135.87591,33.4814],[135.86057,33.44051],[135.77718,33.42558],[135.7418,33.42534],[135.74163,33.4665],[135.68498,33.47915],[135.59008,33.49633],[135.47373,33.52819],[135.3902,33.5752],[135.37485,33.61633],[135.37533,33.64967],[135.33371,33.6498],[135.32468,33.66653],[135.45794,33.66666],[135.45842,33.74987],[135.41727,33.75],[135.41663,33.78802],[135.41743,33.83273],[135.37517,33.83326],[135.37517,33.79171],[135.3284,33.78999],[135.28777,33.75622],[135.21503,33.7698],[135.14371,33.85113],[135.12013,33.87826],[135.05776,33.87991],[135.05947,33.96479],[135.07709,34.00837],[135.11345,34.05029],[135.06515,34.06759],[135.07041,34.121],[135.15522,34.16286],[135.1163,34.18742],[135.06316,34.25849],[135.04915,34.27082],[134.99554,34.27152],[134.9955,34.29122],[134.99945,34.29894],[135.00904,34.30357],[135.1457,34.34721],[135.20804,34.35108],[135.24174,34.39165],[135.19145,34.42482],[135.25012,34.46056],[135.29487,34.42658],[135.30902,34.44119],[135.36647,34.53277],[135.39147,34.53394],[135.38308,34.63128],[135.36409,34.66669],[135.29161,34.66695],[135.29061,34.6245],[135.08349,34.62463],[135.04725,34.61643],[134.92905,34.64799],[134.826,34.69662],[134.75874,34.74267],[134.71632,34.74982],[134.52561,34.74969],[134.41657,34.70885],[134.31671,34.66669],[134.25055,34.66656],[134.24992,34.68309],[134.15797,34.68348],[134.15781,34.70013],[134.12505,34.7],[134.12474,34.58386],[134.11666,34.55845],[134.02519,34.55024],[134.02535,34.44785],[134.02788,34.41639],[134.19168,34.41678],[134.19152,34.38401],[134.28347,34.38296],[134.28347,34.33371],[134.38082,34.29415],[134.40952,34.26539],[134.43268,34.24648],[134.56265,34.25055],[134.66663,34.24963],[134.64146,34.04963],[134.70809,33.96554],[134.74006,33.92825],[134.71221,33.86773],[134.76918,33.86691],[134.76712,33.82524],[134.66742,33.7754],[134.63102,33.77487],[134.50018,33.77493],[134.49978,33.95855],[134.4582,33.95874],[134.45816,34.00006],[134.34679,33.99889],[134.06047,33.99988],[133.74955,34.00047],[133.74998,34.33337],[133.875,34.33342],[133.87494,34.41668],[133.95888,34.41683],[133.95843,34.44157],[133.85055,34.44157],[133.84966,34.46621],[133.82537,34.46704],[133.81642,34.44222],[133.84205,34.43326],[133.84194,34.41656],[133.75822,34.41715],[133.74122,34.44175],[133.6913,34.44152],[133.69085,34.45739],[133.69097,34.46639],[133.70004,34.48346],[133.61655,34.48355],[133.61689,34.45827],[133.53351,34.45887],[133.53329,34.41752],[133.4897,34.41743],[133.46642,34.43313],[133.46631,34.44992],[133.4503,34.45002],[133.45008,34.4166],[133.41713,34.41696],[133.41668,34.35786],[133.34174,34.3583],[133.30304,34.37515],[133.2748,34.35876],[133.21655,34.35],[133.16694,34.35007],[133.16662,34.36659],[133.09184,34.36659],[133.09176,34.3417],[133.05837,34.34164],[133.05829,34.32491],[132.90003,34.32517],[132.89148,34.29164],[132.7917,34.29164],[132.79133,34.28281],[132.792,34.24212],[132.77492,34.22513],[132.71629,34.22499],[132.71652,34.21655],[132.75854,34.21636],[132.775,34.20877],[132.79218,34.20095],[132.79223,34.14177],[132.74138,34.14173],[132.70838,34.16655],[132.63354,34.16665],[132.61664,34.1917],[132.59185,34.1916],[132.5749,34.1666],[132.54155,34.16674],[132.54178,34.14196],[132.42515,34.14165],[132.42503,34.16657],[132.3749,34.16663],[132.37515,34.18348],[132.40833,34.18343],[132.3752,34.2168],[132.34991,34.23331],[132.35014,34.25834],[132.35814,34.25843],[132.35819,34.27503],[132.33922,34.25834],[132.29166,34.22494],[132.24992,34.22494],[132.25003,34.2043],[132.25809,34.18324],[132.28327,34.18352],[132.28321,34.19995],[132.29183,34.20837],[132.32501,34.20847],[132.31684,34.1753],[132.25843,34.17533],[132.25843,34.14171],[132.2502,34.11675],[132.21669,34.11684],[132.21685,34.0585],[132.22491,34.05827],[132.22502,33.99163],[132.21669,33.99177],[132.21652,33.97516],[132.25037,33.97526],[132.25014,33.91622],[131.95761,33.91733],[131.95783,33.92512],[131.91755,33.92495],[131.91586,33.95863],[131.88699,33.96671],[131.87569,33.95891],[131.84973,33.92502],[131.80049,33.92439],[131.79948,33.95046],[131.7752,33.95057],[131.75058,33.9668],[131.70828,33.97508],[131.70918,33.92551],[131.68366,33.92513],[131.68321,33.95056],[131.6916,33.96717],[131.69988,33.98323],[131.68332,33.99937],[131.68354,34.01681],[131.69999,34.017],[131.70011,34.03314],[131.68209,34.03352],[131.67515,34.02581],[131.62513,34.02488],[131.59122,33.97515],[131.38721,33.97497],[131.29981,33.91685],[131.16675,33.91667],[131.1172,33.97473],[131.06078,34.02462],[131.03349,34.02557],[131.04198,34.00848],[131.04175,33.7381]],[[135.98583,35.86595],[135.93905,35.95517],[135.95723,36.1316],[136.15271,36.29666],[136.6596,36.75695],[136.65846,37.00603],[136.66642,37.33477],[136.85167,37.42328],[137.11307,37.5288],[137.31877,37.54953],[137.39151,37.50356],[137.34765,37.35791],[137.20218,37.24762],[137.09307,37.06828],[137.0223,36.83795],[137.09532,36.80133],[137.22971,36.77368],[137.35387,36.80451],[137.39706,36.90966],[137.50588,36.95883],[137.72267,37.01579],[137.95199,37.10656],[138.053,37.16975],[138.18626,37.18254],[138.28854,37.24861],[138.43501,37.34512],[138.54909,37.41229],[138.61842,37.49225],[138.73903,37.51536],[138.78378,37.5674],[138.82185,37.62796],[138.91491,37.63009],[138.924,37.6032],[139.01321,37.59757],[139.01421,37.53507],[139.03452,37.52325],[139.03793,37.45798],[139.04887,37.42358],[139.13027,37.42312],[139.23881,37.4326],[139.26282,37.33326],[139.12289,37.32784],[139.11408,37.26354],[139.11422,37.16748],[139.05555,37.16658],[138.82825,37.17133],[138.87072,37.2338],[138.89104,37.31316],[138.72965,37.33259],[138.71403,37.29474],[138.71715,37.1642],[138.53517,37.16533],[138.39907,37.16692],[138.37478,37.13261],[138.3725,36.99907],[138.08823,36.99839],[138.08596,36.91586],[137.89233,36.91768],[137.87798,36.83517],[137.66517,36.8321],[137.52111,36.83142],[137.51216,36.74222],[137.39482,36.74427],[137.37138,36.58325],[137.29367,36.58371],[137.18016,36.55028],[137.21383,36.53133],[137.26384,36.33176],[136.63321,36.33496],[136.50436,36.29227],[136.39412,36.29444],[136.38034,36.25493],[136.37778,36.17665],[136.38218,36.09507],[136.38758,36.00065],[136.2593,35.99399],[136.25532,35.90923],[136.24992,35.83337],[136.12207,35.82876],[136.11184,35.88725],[136.05984,35.91165],[136.01793,35.86676],[135.98583,35.86595]],[[140.03281,37.29986],[140.03344,37.34643],[140.03344,37.47427],[140.03407,37.48281],[139.99973,37.48356],[140.00036,37.44198],[139.94212,37.44173],[139.94197,37.35007],[139.89116,37.35007],[139.89116,37.41698],[139.81725,37.41647],[139.81266,37.57468],[139.74192,37.57556],[139.74224,37.79174],[139.81789,37.79162],[139.98296,37.79112],[139.98359,37.58334],[140.0412,37.58334],[140.04151,37.47502],[140.1591,37.47528],[140.15815,37.63311],[140.3745,37.63399],[140.37481,37.83338],[140.5,37.83525],[140.49989,37.91662],[140.53144,37.9168],[140.62489,37.9167],[140.62489,37.84641],[140.62534,37.33359],[140.57502,37.33284],[140.57486,37.25881],[140.4579,37.25855],[140.45774,37.2084],[140.2501,37.20866],[140.24994,37.29998],[140.03281,37.29986]],[[141.00075,38.16707],[140.84264,38.16752],[140.68779,38.16405],[140.70788,38.09499],[140.70868,38.03346],[140.61627,38.03362],[140.53369,38.11364],[140.5359,38.14478],[140.61948,38.14478],[140.62471,38.2048],[140.6231,38.27376],[140.63073,38.33902],[140.81255,38.33698],[141.00362,38.33398],[141.00075,38.16707]],[[129.44454,34.73675],[129.52524,34.65452],[129.35703,34.19046],[129.23088,34.06063],[129.15132,34.11616],[129.27179,34.63488],[129.44454,34.73675]]],terms_url:"http://www.gsi.go.jp/kikakuchousei/kikakuchousei40182.html",terms_text:"GSI Japan",description:"Japan GSI ortho Imagery. Usually better than bing, but a bit older."},{id:"gsi.go.jp_std_map",name:"Japan GSI Standard Map",type:"tms",template:"https://cyberjapandata.gsi.go.jp/xyz/std/{zoom}/{x}/{y}.png",zoomExtent:[5,18],polygon:[[[141.85547,44.64912],[140.22949,43.9691],[138.95508,41.80408],[139.48242,40.17887],[138.86719,38.30718],[136.31836,37.19533],[132.14355,35.13788],[128.93555,33.35806],[129.50684,32.4727],[129.77051,31.69078],[130.20996,30.90223],[131.2207,30.78904],[131.66016,32.32428],[132.71484,32.87959],[133.76953,33.17434],[136.75781,33.87042],[139.30664,35.06597],[140.88867,35.17381],[141.15234,36.5626],[142.11914,39.94344],[141.76758,42.68243],[141.85547,44.64912]]],terms_url:"https://maps.gsi.go.jp/help/use.html",terms_text:"GSI Japan",description:"Japan GSI Standard Map. Widely covered."},{id:"kalmar-orto-2014",name:"Kalmar North Orthophoto 2014",type:"wms",template:"https://kartportal.kalmar.se/arcgisserver/services/Ortofoto/Kalmar_2014/ImageServer/WMSServer?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=0&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",endDate:"2014-01-01T00:00:00.000Z",startDate:"2014-01-01T00:00:00.000Z",zoomExtent:[9,22],polygon:[[[16.28473,56.70827],[16.38856,56.70798],[16.40843,56.7615],[16.46269,56.75672],[16.47753,56.76023],[16.48815,56.77023],[16.48754,56.79231],[16.48254,56.79547],[16.47667,56.8223],[16.4687,56.82614],[16.48584,56.86271],[16.48809,56.87369],[16.45694,56.87786],[16.46288,56.88769],[16.42696,56.88757],[16.39809,56.89604],[16.36791,56.8952],[16.36717,56.85985],[16.36431,56.84636],[16.36001,56.83657],[16.34423,56.82532],[16.32675,56.79284],[16.26114,56.74422],[16.28473,56.70827]]],terms_url:"http://data-kalmar.opendata.arcgis.com/",terms_text:"© Kalmar municipality",best:true,description:"Orthophotos for the north coast of the municipality of Kalmar 2014",icon:"https://upload.wikimedia.org/wikipedia/commons/thumb/6/67/Kalmarvapen_1a.svg/206px-Kalmarvapen_1a.svg.png"},{id:"kalmar-orto-2016",name:"Kalmar South Orthophoto 2016",type:"wms",template:"https://kartportal.kalmar.se/arcgisserver/services/Ortofoto/Kalmar_2016/ImageServer/WMSServer?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=0&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",endDate:"2016-01-01T00:00:00.000Z",startDate:"2016-01-01T00:00:00.000Z",zoomExtent:[9,22],polygon:[[[16.156,56.45834],[16.11389,56.46083],[16.09246,56.46633],[16.0724,56.4662],[16.07126,56.51153],[16.08516,56.56847],[16.14417,56.63933],[16.21168,56.68491],[16.28412,56.71655],[16.25135,56.74358],[16.25045,56.75062],[16.29558,56.7512],[16.33516,56.72511],[16.38922,56.71885],[16.41137,56.67602],[16.4053,56.66294],[16.33101,56.625],[16.28048,56.613],[16.21561,56.51967],[16.156,56.45834]]],terms_url:"http://data-kalmar.opendata.arcgis.com/",terms_text:"© Kalmar municipality",best:true,description:"Orthophotos for the south coast of the municipality of Kalmar 2016",icon:"https://upload.wikimedia.org/wikipedia/commons/thumb/6/67/Kalmarvapen_1a.svg/206px-Kalmarvapen_1a.svg.png"},{id:"kalmar-orto-2018",name:"Kalmar Urban Orthophoto 2018",type:"wms",template:"https://kartportal.kalmar.se/arcgisserver/services/Ortofoto/Kalmar_2018/ImageServer/WMSServer?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=0&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",endDate:"2018-01-01T00:00:00.000Z",startDate:"2018-01-01T00:00:00.000Z",zoomExtent:[9,22],polygon:[[[16.3416,56.81756],[16.32773,56.7973],[16.36692,56.78706],[16.37105,56.79153],[16.36978,56.80511],[16.35645,56.8133],[16.3416,56.81756]],[[16.39207,56.79339],[16.4608,56.78944],[16.48817,56.79067],[16.4833,56.76986],[16.46612,56.76711],[16.45409,56.76774],[16.43173,56.77309],[16.43178,56.77663],[16.40554,56.77214],[16.39325,56.77349],[16.39207,56.79339]],[[16.29836,56.79102],[16.28796,56.7883],[16.27727,56.78367],[16.27623,56.77952],[16.2862,56.7761],[16.3108,56.77696],[16.3118,56.78086],[16.30364,56.78883],[16.29836,56.79102]],[[16.20686,56.63637],[16.22098,56.62389],[16.2453,56.62467],[16.26751,56.62951],[16.28724,56.63831],[16.37871,56.65462],[16.38806,56.6897],[16.38664,56.72867],[16.31586,56.72879],[16.29956,56.7219],[16.29331,56.70021],[16.26799,56.66889],[16.23945,56.66991],[16.2266,56.6624],[16.21411,56.64972],[16.20686,56.63637]],[[16.15172,56.67843],[16.15712,56.69334],[16.15268,56.70297],[16.13274,56.71254],[16.10987,56.71964],[16.08638,56.7112],[16.07969,56.70056],[16.08149,56.69566],[16.09534,56.69599],[16.12877,56.67766],[16.15172,56.67843]],[[15.97369,56.62759],[16.00164,56.63215],[16.04126,56.62999],[16.05658,56.62489],[16.06201,56.61794],[16.09186,56.60378],[16.10527,56.5926],[16.09581,56.58161],[16.03481,56.60405],[16.0305,56.61252],[16.0088,56.60223],[15.98755,56.59742],[15.98449,56.57141],[15.94887,56.57264],[15.91878,56.55184],[15.90892,56.55393],[15.89921,56.56867],[15.9188,56.57287],[15.94612,56.57491],[15.96371,56.59004],[15.9496,56.59724],[15.94308,56.60903],[15.95726,56.61598],[15.97589,56.62005],[15.97369,56.62759]]],terms_url:"http://data-kalmar.opendata.arcgis.com/",terms_text:"© Kalmar municipality",best:true,description:"Orthophotos for urban areas of the municipality of Kalmar 2018",icon:"https://upload.wikimedia.org/wikipedia/commons/thumb/6/67/Kalmarvapen_1a.svg/206px-Kalmarvapen_1a.svg.png"},{id:"Aargau-AGIS-2014",name:"Kanton Aargau 25cm (AGIS 2014)",type:"tms",template:"https://mapproxy.osm.ch/tiles/AGIS2014/EPSG900913/{zoom}/{x}/{y}.png?origin=nw",endDate:"2014-01-01T00:00:00.000Z",startDate:"2014-01-01T00:00:00.000Z",zoomExtent:[8,19],polygon:[[[8.09602,47.57882],[8.10323,47.57879],[8.10323,47.58583],[8.10591,47.58732],[8.11019,47.58878],[8.11589,47.5893],[8.12168,47.58916],[8.12546,47.58873],[8.12959,47.58888],[8.13023,47.59122],[8.132,47.59358],[8.13506,47.59546],[8.13831,47.59698],[8.14161,47.59939],[8.14534,47.60076],[8.14961,47.60144],[8.15438,47.60127],[8.15751,47.60063],[8.16119,47.59914],[8.16255,47.59976],[8.16438,47.60148],[8.16653,47.60399],[8.17087,47.60673],[8.17608,47.60838],[8.17912,47.60868],[8.18153,47.6118],[8.18304,47.61489],[8.18498,47.6176],[8.18953,47.62151],[8.19212,47.62321],[8.22261,47.623],[8.22561,47.6212],[8.22849,47.61842],[8.22959,47.61621],[8.23008,47.61501],[8.23261,47.61686],[8.23657,47.61803],[8.24,47.61835],[8.24351,47.61783],[8.24749,47.61877],[8.25066,47.61988],[8.25708,47.6208],[8.26104,47.62069],[8.26491,47.61935],[8.26732,47.61769],[8.26902,47.61531],[8.27579,47.61702],[8.28106,47.61707],[8.28772,47.61626],[8.29421,47.61442],[8.29947,47.61221],[8.30311,47.60977],[8.30287,47.59447],[8.30438,47.59227],[8.30591,47.59109],[8.30791,47.59019],[8.31236,47.58917],[8.31655,47.58713],[8.32049,47.58436],[8.32598,47.57888],[8.32864,47.57716],[8.33219,47.57604],[8.33902,47.57577],[8.34702,47.57628],[8.35962,47.57552],[8.36475,47.57436],[8.37207,47.57377],[8.38002,47.57233],[8.38194,47.57496],[8.38387,47.57686],[8.38879,47.58027],[8.39232,47.58174],[8.39611,47.58247],[8.40013,47.58255],[8.40432,47.58158],[8.41158,47.57928],[8.418,47.57602],[8.42381,47.57452],[8.43039,47.57228],[8.43275,47.57035],[8.4336,47.56849],[8.43353,47.56669],[8.4319,47.56444],[8.4286,47.56217],[8.42575,47.56121],[8.4259,47.55854],[8.42498,47.55624],[8.42353,47.55469],[8.42296,47.5537],[8.4246,47.5517],[8.42492,47.54981],[8.42434,47.54836],[8.42539,47.54679],[8.425,47.54418],[8.4233,47.5422],[8.421,47.54106],[8.41832,47.54049],[8.41551,47.54062],[8.4139,47.53924],[8.41283,47.5372],[8.41194,47.53626],[8.41241,47.53415],[8.41185,47.53237],[8.41117,47.53158],[8.40143,47.53169],[8.40124,47.52443],[8.39936,47.5222],[8.39666,47.52082],[8.39385,47.51988],[8.39085,47.51973],[8.38877,47.52014],[8.38809,47.5146],[8.38551,47.51075],[8.38366,47.50944],[8.36776,47.50953],[8.36739,47.48709],[8.3751,47.48689],[8.37889,47.4853],[8.38196,47.48188],[8.38184,47.47521],[8.38328,47.47192],[8.38244,47.46879],[8.37943,47.46643],[8.37751,47.4659],[8.37787,47.46496],[8.38238,47.46423],[8.38671,47.46097],[8.39171,47.45743],[8.39315,47.45349],[8.39514,47.45031],[8.39418,47.44722],[8.39171,47.44535],[8.3896,47.44449],[8.38996,47.44339],[8.39111,47.4416],[8.39213,47.43924],[8.39339,47.4359],[8.39249,47.43411],[8.39369,47.43143],[8.39568,47.42854],[8.39959,47.42463],[8.39953,47.41954],[8.449,47.41897],[8.45369,47.41233],[8.45369,47.40451],[8.44858,47.39649],[8.40362,47.39685],[8.40483,47.39392],[8.4029,47.38903],[8.4035,47.38553],[8.40314,47.38304],[8.40483,47.37905],[8.40844,47.37575],[8.41379,47.37338],[8.4159,47.37016],[8.41584,47.36539],[8.4144,47.36327],[8.41494,47.35912],[8.41722,47.35573],[8.41632,47.35231],[8.41355,47.34913],[8.41367,47.34688],[8.41476,47.3448],[8.41885,47.34244],[8.42264,47.34052],[8.42469,47.33718],[8.42421,47.33163],[8.42914,47.33286],[8.4351,47.33192],[8.43763,47.33281],[8.44328,47.33506],[8.44527,47.33746],[8.45213,47.3402],[8.45761,47.33975],[8.46212,47.33649],[8.46278,47.33322],[8.46043,47.32829],[8.45797,47.32457],[8.45556,47.32005],[8.44918,47.31495],[8.44713,47.31217],[8.44021,47.30948],[8.43624,47.29817],[8.43311,47.29593],[8.42806,47.29397],[8.42318,47.29001],[8.41656,47.28789],[8.41024,47.28728],[8.4035,47.28409],[8.40188,47.2805],[8.40862,47.27593],[8.41066,47.2716],[8.40892,47.26613],[8.41235,47.2618],[8.41235,47.25873],[8.41109,47.25608],[8.41698,47.25142],[8.41885,47.2475],[8.41801,47.24305],[8.4144,47.23904],[8.41373,47.23565],[8.4106,47.23226],[8.40435,47.22797],[8.40296,47.2256],[8.40398,47.22127],[8.40856,47.21718],[8.40928,47.21326],[8.40844,47.20945],[8.41012,47.20258],[8.41319,47.19678],[8.41271,47.1924],[8.4088,47.18799],[8.40814,47.18475],[8.4091,47.1812],[8.41518,47.17915],[8.41915,47.17563],[8.42294,47.16553],[8.42294,47.15747],[8.42011,47.15325],[8.42246,47.14838],[8.42276,47.14392],[8.42053,47.13954],[8.41584,47.13524],[8.40898,47.13274],[8.40386,47.13201],[8.40116,47.13258],[8.39532,47.1327],[8.38437,47.1345],[8.37895,47.13385],[8.37245,47.13442],[8.36908,47.13659],[8.368,47.13876],[8.35656,47.14228],[8.35409,47.14564],[8.35331,47.14916],[8.3506,47.15161],[8.3503,47.15419],[8.34772,47.15669],[8.34561,47.15923],[8.34086,47.16164],[8.33935,47.16512],[8.3373,47.16896],[8.33315,47.17154],[8.33261,47.17351],[8.33062,47.17792],[8.33002,47.18717],[8.32924,47.18786],[8.32936,47.19494],[8.32292,47.19514],[8.32148,47.19854],[8.32196,47.20115],[8.31835,47.21043],[8.31413,47.21178],[8.31089,47.2153],[8.31107,47.21857],[8.31221,47.2198],[8.30884,47.22433],[8.30932,47.22646],[8.30715,47.23042],[8.30727,47.2321],[8.30595,47.23582],[8.30607,47.23949],[8.30378,47.24366],[8.30144,47.24677],[8.29554,47.24836],[8.29187,47.25293],[8.28814,47.25869],[8.28766,47.26143],[8.28627,47.26519],[8.28723,47.26805],[8.28838,47.26964],[8.2823,47.27478],[8.27718,47.27576],[8.27273,47.27531],[8.26749,47.27593],[8.26533,47.27719],[8.2616,47.27695],[8.25793,47.27781],[8.25576,47.27887],[8.25317,47.27678],[8.25034,47.27548],[8.2501,47.27348],[8.24956,47.27017],[8.24559,47.26715],[8.24095,47.26678],[8.23452,47.26727],[8.23145,47.26278],[8.2309,47.25931],[8.22663,47.24942],[8.222,47.24713],[8.21526,47.24431],[8.21363,47.24203],[8.21309,47.23602],[8.21123,47.23246],[8.21285,47.22548],[8.21117,47.22266],[8.20689,47.22053],[8.19762,47.22065],[8.19149,47.21861],[8.16976,47.21865],[8.16543,47.22315],[8.16085,47.22405],[8.15351,47.2294],[8.15171,47.2332],[8.14822,47.23647],[8.14798,47.241],[8.14635,47.24203],[8.13823,47.24166],[8.13558,47.23941],[8.12673,47.23606],[8.1218,47.23631],[8.11614,47.23872],[8.10675,47.23945],[8.10266,47.24113],[8.09983,47.24436],[8.09766,47.2493],[8.09797,47.25069],[8.09339,47.25567],[8.08852,47.2569],[8.08485,47.25583],[8.08323,47.25405],[8.07995,47.25246],[8.0769,47.25054],[8.06854,47.24284],[8.06325,47.24098],[8.05134,47.23865],[8.04857,47.23886],[8.03575,47.23747],[8.0322,47.23555],[8.02714,47.23534],[8.01139,47.23967],[8.00927,47.24116],[8.00791,47.24312],[8.00783,47.24821],[8.00857,47.25042],[8.0084,47.25769],[8.00712,47.25922],[8.00299,47.26162],[8.00052,47.26486],[7.99759,47.26789],[7.99627,47.27271],[7.99474,47.27369],[7.98993,47.27121],[7.97278,47.26907],[7.96857,47.27008],[7.96737,47.27098],[7.95861,47.27112],[7.9601,47.26748],[7.96274,47.26396],[7.96576,47.26171],[7.96699,47.25879],[7.96695,47.25001],[7.95963,47.24582],[7.95112,47.23918],[7.94469,47.236],[7.93733,47.23106],[7.93405,47.23051],[7.9298,47.23077],[7.9178,47.23305],[7.90784,47.23837],[7.89793,47.2377],[7.8695,47.23207],[7.85478,47.22719],[7.85137,47.22713],[7.83958,47.22947],[7.83584,47.22976],[7.83082,47.23259],[7.82707,47.23505],[7.82431,47.23831],[7.82129,47.24042],[7.82014,47.24264],[7.81822,47.24562],[7.81771,47.24917],[7.81822,47.25082],[7.81835,47.25371],[7.81988,47.25587],[7.82116,47.2568],[7.82112,47.25778],[7.8192,47.26058],[7.81912,47.26154],[7.81686,47.26486],[7.8175,47.26731],[7.81958,47.26982],[7.82439,47.27158],[7.82805,47.2721],[7.83592,47.27837],[7.83707,47.28342],[7.84005,47.2872],[7.84201,47.29067],[7.84588,47.29427],[7.84763,47.2982],[7.85137,47.30299],[7.8529,47.30741],[7.85571,47.31032],[7.86065,47.31254],[7.86422,47.31349],[7.87018,47.31672],[7.87631,47.31736],[7.88082,47.31716],[7.88337,47.31667],[7.88588,47.31941],[7.88886,47.32131],[7.88805,47.32443],[7.88907,47.3287],[7.8915,47.33262],[7.8978,47.34014],[7.9001,47.34156],[7.90005,47.3432],[7.90222,47.34557],[7.90635,47.34704],[7.90963,47.34735],[7.91359,47.34626],[7.91618,47.34456],[7.91699,47.34303],[7.92401,47.33899],[7.93839,47.33792],[7.94929,47.33784],[7.95431,47.33596],[7.95593,47.33317],[7.95691,47.32968],[7.95571,47.32535],[7.96993,47.32797],[7.97308,47.33017],[7.98333,47.33432],[7.98563,47.33692],[7.98954,47.33818],[7.99248,47.33827],[7.99784,47.34017],[7.99635,47.34257],[7.99601,47.34588],[7.99733,47.34859],[8.00116,47.35081],[8.00137,47.3569],[8.00261,47.3577],[8.00418,47.36044],[8.00976,47.36419],[8.01125,47.36598],[8.01746,47.36926],[8.01912,47.37157],[8.0198,47.37376],[8.02023,47.37598],[8.02172,47.37837],[8.02193,47.38093],[8.02282,47.38286],[8.02078,47.38857],[8.01606,47.38929],[8.01265,47.38897],[8.00772,47.39012],[8.00367,47.39205],[8.00163,47.39479],[8.00155,47.39998],[8.00023,47.40306],[7.99801,47.40453],[7.99261,47.40551],[7.98776,47.40637],[7.98418,47.40839],[7.98027,47.4081],[7.9732,47.41127],[7.96963,47.41383],[7.95695,47.41893],[7.95529,47.4218],[7.95593,47.42402],[7.95746,47.42621],[7.96274,47.42828],[7.97746,47.43254],[7.97567,47.43732],[7.97614,47.44138],[7.97431,47.44368],[7.95129,47.45111],[7.94861,47.4539],[7.94818,47.4566],[7.94678,47.45755],[7.94039,47.45669],[7.93588,47.45738],[7.93631,47.47625],[7.9318,47.47605],[7.92469,47.47717],[7.91571,47.47743],[7.90903,47.47947],[7.90316,47.47967],[7.90295,47.48965],[7.8969,47.4898],[7.8918,47.49405],[7.89086,47.49765],[7.8878,47.49931],[7.88631,47.5023],[7.87999,47.50397],[7.87403,47.50787],[7.86994,47.50944],[7.87006,47.51239],[7.86435,47.51245],[7.85851,47.51543],[7.8558,47.51854],[7.85625,47.52147],[7.8549,47.52474],[7.85183,47.5285],[7.84647,47.52714],[7.84148,47.52777],[7.8413,47.52406],[7.84015,47.51587],[7.83943,47.51259],[7.83688,47.51256],[7.83679,47.51049],[7.83352,47.50949],[7.83156,47.50765],[7.82981,47.50552],[7.82522,47.50354],[7.82049,47.5004],[7.81475,47.49491],[7.81181,47.49261],[7.80645,47.4914],[7.80403,47.49146],[7.80049,47.49014],[7.77977,47.49028],[7.77871,47.49304],[7.7796,47.496],[7.78386,47.5004],[7.78203,47.50368],[7.78088,47.5073],[7.78109,47.51018],[7.77977,47.51265],[7.77969,47.51529],[7.77045,47.51802],[7.75905,47.52003],[7.75266,47.52009],[7.74781,47.51957],[7.73368,47.52291],[7.72781,47.52719],[7.71985,47.52978],[7.71262,47.53095],[7.70764,47.5344],[7.70551,47.53917],[7.70696,47.54279],[7.71415,47.54627],[7.72245,47.54756],[7.749,47.54977],[7.75428,47.55339],[7.76654,47.55615],[7.77168,47.55761],[7.78007,47.55836],[7.78577,47.55982],[7.7902,47.5616],[7.79398,47.56634],[7.80492,47.57237],[7.80611,47.57989],[7.81173,47.58954],[7.81577,47.59218],[7.82211,47.59352],[7.83645,47.59163],[7.83952,47.59045],[7.84305,47.58778],[7.84875,47.58899],[7.85624,47.59189],[7.86488,47.59393],[7.87126,47.5943],[7.87726,47.59367],[7.88535,47.59424],[7.89343,47.59301],[7.90109,47.58976],[7.90833,47.58514],[7.91386,47.57923],[7.91867,47.57194],[7.91956,47.56772],[7.91875,47.56433],[7.9156,47.56008],[7.91577,47.55715],[7.91841,47.55405],[7.92126,47.55261],[7.92552,47.55227],[7.93471,47.55221],[7.9405,47.55078],[7.94326,47.54968],[7.94356,47.55052],[7.94458,47.55589],[7.94841,47.55979],[7.95394,47.56229],[7.96003,47.56333],[7.96577,47.56272],[7.97203,47.5612],[7.97833,47.56057],[7.98624,47.56094],[7.99718,47.56212],[8.0045,47.56137],[8.01114,47.55974],[8.01641,47.55701],[8.02046,47.55574],[8.0262,47.55741],[8.03799,47.55876],[8.04254,47.56028],[8.0485,47.56333],[8.05454,47.56798],[8.05931,47.56921],[8.0622,47.56895],[8.06693,47.57002],[8.07242,47.56973],[8.07739,47.56795],[8.08182,47.56436],[8.08522,47.56281],[8.08791,47.56298],[8.09259,47.56559],[8.09395,47.56809],[8.09484,47.57587],[8.09602,47.57882]]],terms_text:"AGIS OF2014"},{id:"Aargau-AGIS-2016",name:"Kanton Aargau 25cm (AGIS 2016)",type:"tms",template:"https://mapproxy.osm.ch/tiles/AGIS2016/EPSG900913/{zoom}/{x}/{y}.png?origin=nw",endDate:"2016-01-01T00:00:00.000Z",startDate:"2016-01-01T00:00:00.000Z",zoomExtent:[8,19],polygon:[[[7.70438,47.55794],[7.77076,47.55772],[7.77103,47.58025],[7.80408,47.58017],[7.80433,47.60248],[7.93713,47.60217],[7.93703,47.57962],[8.00374,47.57917],[8.00338,47.55687],[8.0364,47.55665],[8.03681,47.57928],[8.10313,47.57881],[8.10387,47.60112],[8.17011,47.60086],[8.17036,47.6235],[8.30311,47.62235],[8.30305,47.59988],[8.3362,47.59927],[8.33585,47.5771],[8.36913,47.57694],[8.36943,47.59931],[8.43564,47.59877],[8.43454,47.53133],[8.40144,47.53162],[8.40096,47.50926],[8.3678,47.50959],[8.3675,47.48698],[8.40042,47.48666],[8.39939,47.41929],[8.46558,47.4187],[8.46515,47.39647],[8.43206,47.39654],[8.43125,47.3516],[8.46434,47.35128],[8.46327,47.28387],[8.42997,47.28421],[8.42714,47.12676],[8.3293,47.12753],[8.32937,47.13007],[8.32833,47.13007],[8.3285,47.14529],[8.3294,47.19502],[8.2964,47.19526],[8.29714,47.24022],[8.2641,47.24046],[8.26446,47.26297],[8.23141,47.26316],[8.23075,47.21822],[8.09886,47.21912],[8.09874,47.24135],[8.066,47.24176],[8.06552,47.2192],[7.99993,47.21952],[8.00003,47.26433],[7.96735,47.26462],[7.96675,47.21961],[7.80153,47.22029],[7.80244,47.28791],[7.83518,47.28772],[7.83543,47.31017],[7.86837,47.31017],[7.86885,47.35542],[8.00097,47.3543],[8.00156,47.39928],[7.9353,47.39976],[7.93607,47.46716],[7.90278,47.46729],[7.90303,47.48981],[7.86987,47.48998],[7.86993,47.5125],[7.83689,47.51258],[7.83665,47.4901],[7.77027,47.49026],[7.77045,47.51274],[7.70452,47.51307],[7.70438,47.55794]]],terms_text:"AGIS OF2016"},{id:"Aargau-AGIS-2017",name:"Kanton Aargau 25cm (AGIS 2017)",type:"tms",template:"https://mapproxy.osm.ch/tiles/AGIS2017/EPSG900913/{zoom}/{x}/{y}.png?origin=nw",endDate:"2017-01-01T00:00:00.000Z",startDate:"2017-01-01T00:00:00.000Z",zoomExtent:[8,19],polygon:[[[7.70438,47.55794],[7.77076,47.55772],[7.77103,47.58025],[7.80408,47.58017],[7.80433,47.60248],[7.93713,47.60217],[7.93703,47.57962],[8.00374,47.57917],[8.00338,47.55687],[8.0364,47.55665],[8.03681,47.57928],[8.10313,47.57881],[8.10387,47.60112],[8.17011,47.60086],[8.17036,47.6235],[8.30311,47.62235],[8.30305,47.59988],[8.3362,47.59927],[8.33585,47.5771],[8.36913,47.57694],[8.36943,47.59931],[8.43564,47.59877],[8.43454,47.53133],[8.40144,47.53162],[8.40096,47.50926],[8.3678,47.50959],[8.3675,47.48698],[8.40042,47.48666],[8.39939,47.41929],[8.46558,47.4187],[8.46515,47.39647],[8.43206,47.39654],[8.43125,47.3516],[8.46434,47.35128],[8.46327,47.28387],[8.42997,47.28421],[8.42714,47.12676],[8.3293,47.12753],[8.32937,47.13007],[8.32833,47.13007],[8.3285,47.14529],[8.3294,47.19502],[8.2964,47.19526],[8.29714,47.24022],[8.2641,47.24046],[8.26446,47.26297],[8.23141,47.26316],[8.23075,47.21822],[8.09886,47.21912],[8.09874,47.24135],[8.066,47.24176],[8.06552,47.2192],[7.99993,47.21952],[8.00003,47.26433],[7.96735,47.26462],[7.96675,47.21961],[7.80153,47.22029],[7.80244,47.28791],[7.83518,47.28772],[7.83543,47.31017],[7.86837,47.31017],[7.86885,47.35542],[8.00097,47.3543],[8.00156,47.39928],[7.9353,47.39976],[7.93607,47.46716],[7.90278,47.46729],[7.90303,47.48981],[7.86987,47.48998],[7.86993,47.5125],[7.83689,47.51258],[7.83665,47.4901],[7.77027,47.49026],[7.77045,47.51274],[7.70452,47.51307],[7.70438,47.55794]]],terms_text:"AGIS OF2017",best:true},{id:"Basel-Landschaft-2015",name:"Kanton Basel-Landschaft 10cm (2015)",type:"tms",template:"https://mapproxy.osm.ch/tiles/KTBASELLANDSCHAFT2015/EPSG900913/{zoom}/{x}/{y}.png?origin=nw",endDate:"2015-01-01T00:00:00.000Z",startDate:"2015-01-01T00:00:00.000Z",zoomExtent:[18,21],polygon:[[[7.37028,47.41368],[7.35758,47.41508],[7.35792,47.41827],[7.35354,47.41961],[7.34488,47.42402],[7.33973,47.42971],[7.33269,47.43024],[7.32685,47.43192],[7.32528,47.43489],[7.3305,47.44176],[7.33899,47.44109],[7.34496,47.43608],[7.35266,47.43436],[7.3812,47.43208],[7.37599,47.41431],[7.37815,47.414],[7.38204,47.41331],[7.38839,47.41398],[7.41371,47.41093],[7.42074,47.4111],[7.42748,47.41448],[7.43811,47.41274],[7.4484,47.41507],[7.45558,47.42792],[7.45062,47.43534],[7.43784,47.44632],[7.42542,47.44328],[7.4209,47.44594],[7.42242,47.45072],[7.4288,47.45388],[7.43003,47.45949],[7.44577,47.46197],[7.44717,47.45696],[7.45651,47.44926],[7.49236,47.45897],[7.53068,47.46119],[7.52745,47.47391],[7.53633,47.48383],[7.53623,47.49105],[7.5326,47.49097],[7.53179,47.4974],[7.52004,47.49678],[7.51223,47.49892],[7.50935,47.50888],[7.49908,47.51628],[7.49787,47.52125],[7.50228,47.51491],[7.51746,47.51728],[7.5222,47.51409],[7.53096,47.52905],[7.51935,47.53472],[7.51075,47.52899],[7.5023,47.5284],[7.49804,47.53615],[7.50545,47.54438],[7.51676,47.54541],[7.52732,47.55278],[7.55466,47.56437],[7.56458,47.55704],[7.56124,47.55172],[7.55875,47.55235],[7.55588,47.54434],[7.56479,47.54569],[7.58726,47.5419],[7.58269,47.53247],[7.58948,47.52792],[7.59025,47.51979],[7.59478,47.51929],[7.61378,47.53925],[7.6223,47.53977],[7.62285,47.55004],[7.61774,47.55437],[7.61762,47.55865],[7.63273,47.56149],[7.63997,47.55816],[7.649,47.5483],[7.66131,47.54483],[7.66586,47.53746],[7.67467,47.53375],[7.69494,47.5325],[7.71347,47.53978],[7.71596,47.53582],[7.72362,47.53675],[7.72716,47.53293],[7.73322,47.53275],[7.73797,47.52732],[7.74902,47.52498],[7.75786,47.52605],[7.78763,47.52012],[7.79014,47.51864],[7.78887,47.50683],[7.7928,47.50068],[7.78663,47.49312],[7.79889,47.49565],[7.79816,47.4994],[7.7994,47.49748],[7.80742,47.49714],[7.81471,47.5048],[7.83198,47.51474],[7.83321,47.53382],[7.84653,47.53266],[7.85233,47.53524],[7.86257,47.52692],[7.86396,47.51931],[7.87666,47.52269],[7.87567,47.51319],[7.89399,47.50606],[7.90477,47.49218],[7.90482,47.48491],[7.93329,47.48141],[7.94702,47.48489],[7.94003,47.46202],[7.94885,47.46378],[7.95761,47.45881],[7.95785,47.45128],[7.94678,47.44319],[7.95003,47.43172],[7.96183,47.42183],[7.95657,47.41968],[7.95504,47.41561],[7.94839,47.41627],[7.93493,47.41177],[7.93672,47.40806],[7.93266,47.40527],[7.90974,47.39852],[7.89022,47.40714],[7.88333,47.4061],[7.88344,47.4012],[7.8777,47.40126],[7.86914,47.39551],[7.87943,47.38799],[7.87881,47.38351],[7.86265,47.38198],[7.84012,47.37476],[7.83055,47.36512],[7.80217,47.3611],[7.79637,47.35347],[7.79356,47.33905],[7.78529,47.33788],[7.76896,47.33891],[7.76642,47.34273],[7.75152,47.34433],[7.73415,47.35776],[7.72791,47.36886],[7.70195,47.37245],[7.6442,47.36721],[7.64176,47.38047],[7.63558,47.38059],[7.63332,47.38291],[7.63331,47.38534],[7.63725,47.38607],[7.63272,47.41003],[7.66405,47.41002],[7.6798,47.41751],[7.68658,47.43366],[7.68297,47.43872],[7.68485,47.44784],[7.69227,47.45421],[7.69883,47.45586],[7.69993,47.46191],[7.70988,47.46938],[7.69976,47.48063],[7.66833,47.48635],[7.66612,47.49687],[7.65217,47.49581],[7.64865,47.49183],[7.65539,47.49021],[7.65051,47.48826],[7.65593,47.48739],[7.64442,47.48564],[7.64097,47.48273],[7.6073,47.4894],[7.60885,47.48353],[7.60563,47.47936],[7.60815,47.47521],[7.60449,47.47045],[7.61887,47.46745],[7.62607,47.46291],[7.62217,47.46195],[7.61646,47.44523],[7.6158,47.43275],[7.59207,47.43271],[7.58121,47.42878],[7.57842,47.43491],[7.5689,47.4369],[7.5683,47.42233],[7.58074,47.4147],[7.52524,47.41163],[7.53117,47.40353],[7.51862,47.38822],[7.5113,47.38974],[7.50226,47.38481],[7.49233,47.38523],[7.47841,47.39056],[7.47747,47.40128],[7.46448,47.40251],[7.46092,47.40068],[7.45002,47.40393],[7.44951,47.39976],[7.4434,47.40231],[7.44131,47.40018],[7.44357,47.3889],[7.43732,47.38089],[7.41169,47.38057],[7.41628,47.38479],[7.41449,47.3943],[7.39894,47.39684],[7.39592,47.40338],[7.38869,47.40302],[7.38405,47.41236],[7.37968,47.41281],[7.37584,47.41401],[7.37028,47.41368]]],terms_url:"https://www.geo.bl.ch/fileadmin/user_upload/Geodaten/Nutzungsbedingungen_GBD_BL_V3p2.pdf",terms_text:"Geodaten des Kantons Basel-Landschaft 2015",best:true},{id:"KTBASELSTADT2015",name:"Kanton Basel-Stadt 2015",type:"tms",template:"https://mapproxy.osm.ch/tiles/KTBASELSTADT2015/EPSG900913/{zoom}/{x}/{y}.png?origin=nw",endDate:"2015-01-01T00:00:00.000Z",startDate:"2015-01-01T00:00:00.000Z",zoomExtent:[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:"KTBASELSTADT2017",name:"Kanton Basel-Stadt 2017",type:"tms",template:"https://mapproxy.osm.ch/tiles/KTBASELSTADT2017/EPSG900913/{zoom}/{x}/{y}.png?origin=nw",endDate:"2017-01-01T00:00:00.000Z",startDate:"2017-01-01T00:00:00.000Z",zoomExtent:[8,21],polygon:[[[7.67138,47.59522],[7.67996,47.60078],[7.68451,47.60182],[7.69438,47.60171],[7.69395,47.59667],[7.68708,47.59355],[7.67884,47.58712],[7.68571,47.58538],[7.68906,47.57612],[7.69412,47.5734],[7.6924,47.56691],[7.6847,47.5617],[7.66425,47.56164],[7.64872,47.55689],[7.63035,47.55869],[7.62357,47.55666],[7.62786,47.55145],[7.62738,47.53658],[7.61833,47.53662],[7.61335,47.53262],[7.59962,47.51911],[7.58503,47.51917],[7.58409,47.52636],[7.57713,47.53163],[7.58125,47.53986],[7.5719,47.54148],[7.55387,47.54148],[7.55379,47.55122],[7.55653,47.55828],[7.5537,47.56031],[7.55379,47.57473],[7.56434,47.58122],[7.57936,47.57988],[7.58331,47.59019],[7.58563,47.59233],[7.59207,47.59239],[7.59851,47.59071],[7.60915,47.58643],[7.60923,47.5811],[7.6191,47.58046],[7.63687,47.59314],[7.63782,47.59557],[7.64168,47.59887],[7.64528,47.60026],[7.66494,47.59618],[7.67138,47.59522]]],terms_text:"Kanton Basel-Stadt OF 2017",best:true},{id:"Solothurn-sogis2014-tms",name:"Kanton Solothurn (SOGIS)",type:"tms",template:"https://mapproxy.osm.ch/tiles/sogis2014/EPSG900913/{zoom}/{x}/{y}.png?origin=nw",endDate:"2017-01-01T00:00:00.000Z",startDate:"2015-01-01T00:00:00.000Z",zoomExtent:[15,19],polygon:[[[7.95595,47.47162],[7.98239,47.47155],[7.98239,47.45353],[7.99553,47.45353],[7.99521,47.41747],[8.0218,47.41743],[8.02155,47.39935],[8.03456,47.39926],[8.03468,47.39028],[8.04788,47.39022],[8.04769,47.37224],[8.03456,47.37232],[8.03437,47.3544],[8.02117,47.35427],[8.02072,47.32739],[7.99445,47.32747],[7.99426,47.31857],[7.96773,47.31866],[7.96767,47.30966],[7.94122,47.30978],[7.94133,47.32778],[7.91486,47.32786],[7.91467,47.30988],[7.9016,47.31005],[7.9014,47.30097],[7.87501,47.3011],[7.87501,47.29223],[7.86165,47.29212],[7.86154,47.27409],[7.84832,47.27416],[7.8483,47.26523],[7.83502,47.2652],[7.83502,47.25624],[7.79535,47.25636],[7.7953,47.24741],[7.72924,47.24756],[7.72929,47.25652],[7.71623,47.25667],[7.71618,47.26559],[7.70304,47.26559],[7.70304,47.27461],[7.68975,47.27467],[7.68989,47.28368],[7.66341,47.28371],[7.66332,47.2747],[7.61055,47.27476],[7.61041,47.24787],[7.62352,47.24777],[7.62356,47.23879],[7.64986,47.23876],[7.64999,47.22977],[7.6499,47.22083],[7.66308,47.22073],[7.6631,47.21178],[7.66297,47.20273],[7.67617,47.2027],[7.67623,47.19372],[7.68938,47.19369],[7.68924,47.17572],[7.70243,47.1756],[7.70234,47.14869],[7.66267,47.14881],[7.66281,47.13978],[7.63633,47.1399],[7.63647,47.14869],[7.5968,47.14893],[7.59684,47.13996],[7.57041,47.13999],[7.57042,47.15792],[7.55736,47.15795],[7.55732,47.14888],[7.54421,47.14895],[7.54417,47.13991],[7.53098,47.13991],[7.53095,47.13097],[7.51767,47.13097],[7.51765,47.12196],[7.51769,47.11292],[7.49131,47.11301],[7.49135,47.10403],[7.4782,47.104],[7.47813,47.07705],[7.46493,47.07708],[7.46498,47.06807],[7.42552,47.06801],[7.42543,47.08601],[7.37279,47.08598],[7.37288,47.10403],[7.3596,47.10403],[7.35955,47.131],[7.41228,47.131],[7.41223,47.14901],[7.42538,47.14901],[7.42552,47.15801],[7.3727,47.15796],[7.3727,47.18498],[7.34627,47.18492],[7.34636,47.20287],[7.33307,47.2029],[7.33307,47.22096],[7.34614,47.22096],[7.34614,47.22991],[7.37256,47.22991],[7.3727,47.2389],[7.399,47.23896],[7.39913,47.24792],[7.41228,47.24792],[7.41228,47.26592],[7.45186,47.26589],[7.45195,47.2749],[7.46505,47.27493],[7.4651,47.28385],[7.47829,47.28385],[7.47834,47.29293],[7.5046,47.29288],[7.50473,47.30183],[7.5312,47.30181],[7.53129,47.31979],[7.54448,47.31985],[7.54453,47.3288],[7.55768,47.32883],[7.55768,47.33786],[7.53125,47.33786],[7.53133,47.35586],[7.51801,47.35583],[7.5181,47.36483],[7.3988,47.36484],[7.39889,47.39182],[7.38564,47.39181],[7.38564,47.4008],[7.37234,47.4008],[7.37234,47.40978],[7.34584,47.40978],[7.34584,47.41878],[7.31925,47.41878],[7.31925,47.44578],[7.4121,47.44578],[7.4121,47.49078],[7.42535,47.49078],[7.42535,47.49981],[7.43856,47.49981],[7.43856,47.50876],[7.49177,47.50876],[7.49178,47.63468],[7.7845,47.63428],[7.78415,47.57123],[7.81074,47.57114],[7.81074,47.56216],[7.82395,47.56206],[7.82387,47.54414],[7.86368,47.54397],[7.86363,47.53498],[7.87679,47.53495],[7.87675,47.52599],[7.8901,47.52596],[7.89006,47.51695],[7.90319,47.51692],[7.9031,47.49886],[7.91649,47.49883],[7.91645,47.48976],[7.95612,47.48967],[7.95595,47.47162]]],terms_text:"Orthofoto WMS Solothurn",best:true,icon:"https://osmlab.github.io/editor-layer-index/sources/europe/ch/KantonSolothurn-SOGIS-wms.png"},{id:"Solothurn-infrared-SOGIS",name:"Kanton Solothurn Infrarot (SOGIS)",type:"wms",template:"https://geoweb.so.ch/wms/sogis_orthofoto.wms?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=Orthofoto_CIR_SO&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",endDate:"2017-01-01T00:00:00.000Z",startDate:"2015-01-01T00:00:00.000Z",zoomExtent:[15,19],polygon:[[[7.57042,47.15792],[7.55736,47.15795],[7.55732,47.14888],[7.54421,47.14895],[7.54417,47.13991],[7.53098,47.13991],[7.53093,47.12196],[7.51765,47.12196],[7.51769,47.11292],[7.49131,47.11301],[7.49135,47.10403],[7.4782,47.104],[7.47816,47.09496],[7.49144,47.09499],[7.4914,47.07702],[7.47816,47.07705],[7.4782,47.06804],[7.42552,47.06801],[7.42543,47.08601],[7.37279,47.08598],[7.37288,47.10403],[7.3596,47.10403],[7.35955,47.131],[7.41228,47.131],[7.41223,47.14901],[7.42538,47.14901],[7.42552,47.15801],[7.39913,47.15804],[7.39913,47.14901],[7.3727,47.14898],[7.3727,47.18498],[7.34627,47.18492],[7.34636,47.19391],[7.33307,47.19394],[7.33307,47.22991],[7.37256,47.22991],[7.3727,47.2389],[7.399,47.23896],[7.39913,47.24792],[7.41228,47.24792],[7.41228,47.26592],[7.45186,47.26589],[7.45195,47.2749],[7.46505,47.27493],[7.4651,47.28385],[7.47829,47.28385],[7.47834,47.29293],[7.49149,47.29289],[7.49162,47.30184],[7.5312,47.30181],[7.53129,47.31979],[7.54448,47.31985],[7.54453,47.3288],[7.55768,47.32883],[7.55768,47.33786],[7.53125,47.33786],[7.53133,47.35586],[7.51801,47.35583],[7.5181,47.36483],[7.43862,47.36492],[7.43867,47.37389],[7.42538,47.37395],[7.42543,47.40081],[7.38558,47.4009],[7.38567,47.4098],[7.35915,47.4098],[7.35915,47.41878],[7.37239,47.41884],[7.37247,47.43682],[7.38571,47.43682],[7.38571,47.44104],[7.39563,47.44016],[7.3963,47.44258],[7.40761,47.4411],[7.40793,47.44225],[7.40313,47.44246],[7.39738,47.44331],[7.39832,47.44583],[7.41214,47.44583],[7.41228,47.45478],[7.43867,47.45488],[7.4388,47.47053],[7.45007,47.46941],[7.45007,47.47223],[7.44647,47.47223],[7.44647,47.47381],[7.44293,47.4739],[7.44288,47.47553],[7.43921,47.4756],[7.43921,47.4772],[7.43557,47.47729],[7.43548,47.47899],[7.4174,47.47896],[7.41744,47.48573],[7.42099,47.48573],[7.42108,47.49082],[7.42763,47.49073],[7.42852,47.49349],[7.43099,47.49643],[7.43485,47.49889],[7.4419,47.49552],[7.44665,47.49455],[7.45011,47.49176],[7.45087,47.4907],[7.46451,47.49073],[7.46456,47.48903],[7.46819,47.489],[7.46819,47.48566],[7.47187,47.48573],[7.47192,47.48233],[7.48269,47.48239],[7.48264,47.48388],[7.48623,47.48397],[7.48637,47.48566],[7.48991,47.48566],[7.49,47.4907],[7.4997,47.49073],[7.49965,47.4914],[7.49175,47.49194],[7.49175,47.49513],[7.49822,47.49479],[7.49889,47.49585],[7.49566,47.49628],[7.49171,47.49625],[7.4918,47.49973],[7.50504,47.4997],[7.50504,47.50874],[7.5448,47.50871],[7.54474,47.45482],[7.49169,47.45469],[7.49175,47.44581],[7.46529,47.44577],[7.46522,47.40983],[7.49156,47.40979],[7.49175,47.39192],[7.50489,47.39183],[7.50489,47.40068],[7.51821,47.40077],[7.51834,47.41876],[7.55794,47.41872],[7.55813,47.44581],[7.58453,47.44572],[7.58441,47.43667],[7.61094,47.43662],[7.611,47.4637],[7.59767,47.4637],[7.59793,47.49964],[7.62433,47.49969],[7.62445,47.4906],[7.63778,47.49055],[7.63784,47.4996],[7.67757,47.49947],[7.67745,47.49047],[7.70385,47.49043],[7.70391,47.48146],[7.71711,47.48129],[7.71711,47.45452],[7.70397,47.45452],[7.70385,47.44559],[7.69046,47.44551],[7.69033,47.40957],[7.67713,47.40949],[7.67713,47.40068],[7.65066,47.40068],[7.65047,47.37365],[7.67706,47.37357],[7.67706,47.38251],[7.71667,47.38251],[7.71679,47.37344],[7.74307,47.3734],[7.74307,47.35538],[7.7562,47.35534],[7.75633,47.3464],[7.78261,47.34627],[7.78292,47.36433],[7.79612,47.36428],[7.79619,47.37327],[7.82265,47.37314],[7.82271,47.38229],[7.84912,47.38212],[7.84924,47.39106],[7.86251,47.39097],[7.86263,47.40906],[7.8759,47.40897],[7.87602,47.41803],[7.90242,47.41795],[7.90242,47.40897],[7.92889,47.4088],[7.92914,47.41782],[7.94215,47.41769],[7.94266,47.46276],[7.95592,47.46259],[7.95612,47.47164],[7.98239,47.47155],[7.98239,47.45353],[7.99553,47.45353],[7.99521,47.41747],[8.0218,47.41743],[8.02155,47.39935],[8.03456,47.39926],[8.03468,47.39028],[8.04788,47.39015],[8.04769,47.37224],[8.03456,47.37232],[8.03437,47.3544],[8.02117,47.35427],[8.02072,47.32739],[7.99445,47.32747],[7.99426,47.31857],[7.96773,47.31866],[7.96767,47.30966],[7.9412,47.30992],[7.94133,47.32778],[7.91486,47.32786],[7.91467,47.30988],[7.9016,47.31005],[7.9014,47.30097],[7.87501,47.3011],[7.87501,47.29223],[7.86165,47.29212],[7.86154,47.27409],[7.84843,47.27415],[7.8483,47.26523],[7.83502,47.2652],[7.83502,47.25624],[7.79535,47.25636],[7.7953,47.24741],[7.72924,47.24756],[7.72929,47.25652],[7.71623,47.25667],[7.71618,47.26559],[7.70304,47.26559],[7.70304,47.27461],[7.68975,47.27467],[7.68989,47.28368],[7.66341,47.28371],[7.66332,47.2747],[7.61055,47.27476],[7.61041,47.24787],[7.62352,47.24765],[7.62356,47.23879],[7.64986,47.23876],[7.64999,47.22977],[7.66305,47.22971],[7.6631,47.21178],[7.67621,47.21169],[7.67623,47.19372],[7.68938,47.19369],[7.68924,47.17572],[7.70243,47.1756],[7.70248,47.16663],[7.71567,47.16663],[7.71558,47.15769],[7.70239,47.15766],[7.70234,47.14869],[7.66267,47.14881],[7.66281,47.13978],[7.63633,47.1399],[7.63647,47.14869],[7.5968,47.14893],[7.59684,47.13996],[7.57041,47.13999],[7.57042,47.15792]]],terms_text:"Orthofoto WMS Solothurn",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/ch/KantonSolothurn-SOGIS-wms.png"},{id:"KTTHURGAU2017",name:"Kanton Thurgau OF 2017",type:"tms",template:"https://mapproxy.osm.ch/tiles/KTTHURGAU2017/EPSG900913/{zoom}/{x}/{y}.png?origin=nw",zoomExtent:[8,21],polygon:[[[8.63768,47.70041],[8.78328,47.6988],[8.78304,47.68533],[8.87027,47.68427],[8.86997,47.6709],[8.89901,47.67047],[8.89867,47.65698],[8.9277,47.65661],[8.92828,47.67015],[8.95726,47.66973],[8.95774,47.68327],[9.19061,47.67994],[9.19027,47.66645],[9.21922,47.66603],[9.21899,47.65256],[9.24784,47.6521],[9.24747,47.63864],[9.3057,47.63765],[9.30526,47.6242],[9.33417,47.62371],[9.33348,47.59674],[9.39151,47.59577],[9.39114,47.58235],[9.42007,47.58176],[9.4186,47.54139],[9.44754,47.54084],[9.44717,47.5273],[9.47605,47.52681],[9.47519,47.49986],[9.50414,47.49935],[9.5031,47.47242],[9.41596,47.47392],[9.41554,47.46045],[9.3576,47.46141],[9.35818,47.47498],[9.32896,47.47534],[9.32864,47.46188],[9.18361,47.4642],[9.18411,47.47769],[9.15492,47.4781],[9.15466,47.46463],[9.06736,47.46583],[9.06718,47.45234],[9.09609,47.45193],[9.09582,47.43853],[9.06663,47.43883],[9.06642,47.42537],[9.00829,47.4262],[9.00714,47.38573],[8.97811,47.38616],[8.9774,47.35913],[8.9194,47.35989],[8.92032,47.38697],[8.89136,47.38725],[8.89286,47.44117],[8.86398,47.44149],[8.86604,47.52251],[8.80784,47.52317],[8.80894,47.56373],[8.77985,47.56403],[8.78024,47.57751],[8.72209,47.57814],[8.72337,47.63213],[8.6652,47.63273],[8.6658,47.6598],[8.63674,47.66],[8.63768,47.70041]]],terms_text:"Kanton Thurgau OF 2017",best:true},{id:"KTZUERICH2015",name:"Kanton Zürich 2015  10cm",type:"tms",template:"https://mapproxy.osm.ch/tiles/KTZUERICH2015/EPSG900913/{zoom}/{x}/{y}.png?origin=nw",endDate:"2015-01-01T00:00:00.000Z",startDate:"2014-01-01T00:00:00.000Z",zoomExtent:[8,21],polygon:[[[8.71338,47.21388],[8.7137,47.22737],[8.8117,47.22626],[8.80337,47.23858],[8.80866,47.2431],[8.82448,47.24656],[8.82971,47.24539],[8.83652,47.24257],[8.84568,47.24253],[8.84837,47.24322],[8.85232,47.24034],[8.86206,47.23882],[8.86472,47.23966],[8.86863,47.23968],[8.87339,47.24125],[8.87882,47.24476],[8.88054,47.24791],[8.89878,47.24976],[8.90281,47.25094],[8.91025,47.25003],[8.92735,47.25406],[8.93644,47.25499],[8.94233,47.25849],[8.94423,47.26173],[8.94882,47.26536],[8.95094,47.2686],[8.95068,47.27108],[8.953,47.27285],[8.95411,47.27505],[8.95504,47.28251],[8.95171,47.28527],[8.94664,47.28647],[8.95258,47.28844],[8.95454,47.28982],[8.96141,47.30098],[8.97552,47.30245],[8.98006,47.30416],[8.99153,47.31893],[8.99069,47.32183],[8.98637,47.32542],[8.98548,47.32778],[8.98364,47.32931],[8.98592,47.33815],[8.98464,47.34061],[8.98079,47.34237],[8.98088,47.34835],[8.97785,47.35437],[8.9759,47.35606],[8.97002,47.35843],[8.96572,47.3589],[8.96238,47.36252],[8.95665,47.37432],[8.9521,47.37836],[8.94778,47.37971],[8.95023,47.38346],[8.95018,47.38596],[8.9488,47.38836],[8.9397,47.39403],[8.93637,47.39496],[8.93251,47.39871],[8.92801,47.40148],[8.92278,47.4038],[8.91388,47.40569],[8.91924,47.41213],[8.92049,47.41915],[8.91829,47.42323],[8.92094,47.42544],[8.92107,47.42828],[8.92571,47.42695],[8.93437,47.42796],[8.93877,47.43173],[8.93974,47.43411],[8.93889,47.43725],[8.93511,47.43973],[8.92349,47.43953],[8.91973,47.44081],[8.91322,47.44119],[8.91162,47.44347],[8.91527,47.44628],[8.91499,47.45004],[8.91196,47.45378],[8.90517,47.45791],[8.90183,47.46435],[8.89735,47.46898],[8.89581,47.47219],[8.89135,47.4738],[8.89143,47.47821],[8.90142,47.48133],[8.90428,47.48449],[8.90314,47.48928],[8.90001,47.49187],[8.89967,47.49885],[8.90357,47.50404],[8.90413,47.50745],[8.90322,47.51948],[8.90497,47.52447],[8.90365,47.52691],[8.89982,47.52965],[8.88423,47.53392],[8.87883,47.53277],[8.87061,47.53477],[8.8602,47.53488],[8.85674,47.53594],[8.84782,47.5358],[8.84614,47.54087],[8.8403,47.54654],[8.83728,47.55278],[8.84275,47.5537],[8.84648,47.5562],[8.85269,47.55645],[8.8562,47.55792],[8.85775,47.56141],[8.85728,47.56489],[8.85511,47.56721],[8.85079,47.56818],[8.84763,47.57023],[8.84538,47.57061],[8.8448,47.57309],[8.84211,47.57513],[8.83326,47.57769],[8.82962,47.57778],[8.82661,47.57662],[8.82137,47.57756],[8.81432,47.57598],[8.81234,47.5778],[8.81222,47.58473],[8.81067,47.58639],[8.80812,47.58738],[8.76818,47.59674],[8.7543,47.59729],[8.75529,47.60108],[8.75416,47.60273],[8.74883,47.60588],[8.74829,47.60874],[8.7507,47.60981],[8.75255,47.61292],[8.75575,47.61217],[8.76102,47.61335],[8.78169,47.60634],[8.78165,47.60345],[8.78467,47.59993],[8.80168,47.5966],[8.80512,47.59686],[8.80895,47.59938],[8.81074,47.60981],[8.81866,47.61372],[8.82001,47.61526],[8.82089,47.62058],[8.82015,47.62415],[8.82415,47.6256],[8.83079,47.63206],[8.83448,47.64099],[8.83182,47.64945],[8.82695,47.65206],[8.81168,47.65599],[8.81112,47.6621],[8.81192,47.66454],[8.81041,47.66752],[8.80881,47.66857],[8.80293,47.66978],[8.79299,47.66919],[8.78685,47.66978],[8.78453,47.66899],[8.78216,47.66659],[8.77921,47.65695],[8.77763,47.65563],[8.77398,47.65435],[8.76623,47.65438],[8.76108,47.65257],[8.75852,47.65033],[8.75464,47.64883],[8.7534,47.64733],[8.74839,47.64613],[8.74329,47.64749],[8.73882,47.64651],[8.72376,47.64753],[8.72063,47.64664],[8.71492,47.64885],[8.70826,47.64764],[8.70481,47.65039],[8.70053,47.65199],[8.69427,47.65307],[8.69242,47.65581],[8.68632,47.66094],[8.68485,47.66413],[8.68574,47.66799],[8.68326,47.67315],[8.68056,47.67561],[8.67521,47.6776],[8.67642,47.68177],[8.67561,47.68661],[8.67427,47.68799],[8.67227,47.68891],[8.66273,47.69029],[8.64644,47.69847],[8.63968,47.69877],[8.6355,47.69743],[8.62162,47.69554],[8.61818,47.69279],[8.61744,47.69087],[8.62007,47.68134],[8.61478,47.68308],[8.60917,47.68188],[8.60199,47.67451],[8.59954,47.66923],[8.60275,47.66132],[8.60979,47.6568],[8.6141,47.6564],[8.61574,47.65557],[8.62231,47.65104],[8.62227,47.65024],[8.62048,47.64758],[8.61939,47.65043],[8.61521,47.65452],[8.6093,47.65677],[8.60324,47.65654],[8.60069,47.65541],[8.59788,47.65276],[8.59645,47.64876],[8.59092,47.64623],[8.58937,47.6444],[8.58874,47.63936],[8.59116,47.62755],[8.59325,47.62233],[8.59838,47.61587],[8.59854,47.6145],[8.59114,47.60917],[8.58937,47.60682],[8.58796,47.60319],[8.58788,47.59909],[8.58203,47.59793],[8.57398,47.59329],[8.57146,47.58988],[8.57035,47.58633],[8.57203,47.57985],[8.56771,47.57799],[8.56506,47.57524],[8.56117,47.56407],[8.55707,47.55947],[8.55616,47.56336],[8.55206,47.56904],[8.55334,47.57146],[8.5526,47.57599],[8.55007,47.57806],[8.54666,47.57923],[8.5435,47.58228],[8.54319,47.5851],[8.54888,47.5879],[8.55175,47.58777],[8.55764,47.58963],[8.56114,47.59151],[8.56265,47.5946],[8.56668,47.59565],[8.56902,47.59748],[8.56953,47.60049],[8.57237,47.60386],[8.57308,47.60641],[8.57562,47.60676],[8.579,47.60845],[8.58076,47.61031],[8.58125,47.61203],[8.58025,47.61456],[8.57712,47.61636],[8.57525,47.61957],[8.57277,47.6211],[8.56785,47.62164],[8.56341,47.62697],[8.56105,47.62838],[8.54803,47.62998],[8.54558,47.63122],[8.54498,47.63297],[8.54288,47.63458],[8.53995,47.63565],[8.52769,47.63634],[8.52112,47.63887],[8.51478,47.6385],[8.50932,47.63559],[8.50829,47.62942],[8.50161,47.62597],[8.5007,47.62421],[8.50149,47.62154],[8.49253,47.61893],[8.48884,47.61953],[8.47669,47.61937],[8.47439,47.61838],[8.47154,47.61495],[8.47129,47.61307],[8.46785,47.61272],[8.46446,47.61109],[8.46173,47.60659],[8.45519,47.60676],[8.45061,47.60411],[8.4499,47.60164],[8.4507,47.59584],[8.45382,47.59343],[8.45428,47.5866],[8.4563,47.5848],[8.46014,47.58382],[8.46332,47.58044],[8.46881,47.5795],[8.46219,47.57653],[8.45419,47.57668],[8.43642,47.57154],[8.43161,47.57102],[8.42476,47.57231],[8.41477,47.56879],[8.41304,47.56745],[8.41034,47.56194],[8.41039,47.55972],[8.40789,47.55465],[8.40846,47.55018],[8.39964,47.54444],[8.39609,47.543],[8.39469,47.54094],[8.39495,47.53674],[8.39136,47.53568],[8.38835,47.53305],[8.38525,47.53316],[8.38113,47.53219],[8.3774,47.52969],[8.37518,47.52679],[8.37279,47.51651],[8.36579,47.51663],[8.35666,47.51348],[8.35439,47.51104],[8.35103,47.50314],[8.3524,47.49957],[8.35163,47.4973],[8.35274,47.49484],[8.3545,47.49355],[8.3557,47.48979],[8.35533,47.48525],[8.35698,47.47931],[8.35891,47.47743],[8.36187,47.47645],[8.36722,47.47654],[8.36702,47.47487],[8.36073,47.47222],[8.35903,47.46604],[8.35996,47.46381],[8.36326,47.46204],[8.3673,47.45653],[8.36975,47.45504],[8.37393,47.45472],[8.37754,47.45201],[8.37583,47.45068],[8.37441,47.44614],[8.37623,47.43818],[8.37168,47.43675],[8.36855,47.43406],[8.3681,47.43158],[8.36904,47.42863],[8.37222,47.42603],[8.38283,47.42346],[8.38371,47.42251],[8.38073,47.42207],[8.37555,47.4178],[8.37598,47.41378],[8.37441,47.40906],[8.36067,47.40664],[8.35789,47.40542],[8.35629,47.40377],[8.35661,47.39961],[8.36195,47.39516],[8.36577,47.39429],[8.37601,47.3947],[8.37743,47.39218],[8.38036,47.39048],[8.38761,47.39035],[8.38832,47.38012],[8.39034,47.37527],[8.39355,47.3719],[8.39387,47.36945],[8.39574,47.3671],[8.39902,47.36608],[8.39836,47.36408],[8.40012,47.36094],[8.40103,47.35433],[8.39728,47.34677],[8.39779,47.34475],[8.40186,47.3391],[8.40931,47.33409],[8.4061,47.32975],[8.40578,47.32667],[8.40689,47.32447],[8.41295,47.3205],[8.41611,47.31996],[8.42948,47.32227],[8.43556,47.32083],[8.43437,47.31954],[8.43155,47.31851],[8.42609,47.31375],[8.42276,47.30706],[8.42311,47.30368],[8.41745,47.3015],[8.41372,47.29824],[8.40012,47.29564],[8.39768,47.29392],[8.39518,47.29516],[8.39108,47.29552],[8.38602,47.29437],[8.38272,47.29225],[8.38198,47.29034],[8.38255,47.2881],[8.38508,47.28565],[8.38977,47.27507],[8.39563,47.271],[8.39407,47.26672],[8.39415,47.26361],[8.39756,47.25986],[8.39614,47.25481],[8.39742,47.25189],[8.40647,47.24452],[8.40826,47.24118],[8.40761,47.23957],[8.4096,47.23585],[8.41073,47.22799],[8.41248,47.22433],[8.41695,47.22014],[8.41959,47.21902],[8.42269,47.21886],[8.42977,47.22],[8.43936,47.21937],[8.45,47.21363],[8.4546,47.21334],[8.45625,47.21081],[8.4591,47.20934],[8.46447,47.20928],[8.46609,47.20862],[8.46868,47.20533],[8.47329,47.20398],[8.47693,47.20458],[8.48399,47.20392],[8.49489,47.20738],[8.504,47.20768],[8.51538,47.21152],[8.51753,47.21271],[8.51906,47.21495],[8.5306,47.21306],[8.53307,47.21325],[8.5415,47.21778],[8.54456,47.21707],[8.55407,47.21726],[8.55858,47.21517],[8.56984,47.2139],[8.57491,47.21255],[8.57749,47.20771],[8.58044,47.2064],[8.58408,47.20603],[8.59012,47.20714],[8.58965,47.2046],[8.59074,47.20195],[8.59358,47.1986],[8.59581,47.19753],[8.60168,47.19722],[8.60653,47.1992],[8.60725,47.19885],[8.61097,47.19387],[8.61128,47.19059],[8.61391,47.18838],[8.61522,47.18515],[8.61938,47.18045],[8.61976,47.17918],[8.61721,47.17359],[8.6196,47.1698],[8.62292,47.16821],[8.6339,47.16715],[8.63561,47.16578],[8.63965,47.16459],[8.64287,47.16443],[8.65216,47.16598],[8.65425,47.16552],[8.6549,47.15967],[8.65649,47.15783],[8.65882,47.15658],[8.66853,47.15492],[8.67847,47.15558],[8.68241,47.15759],[8.69361,47.15898],[8.69804,47.16134],[8.69886,47.16303],[8.6977,47.17033],[8.69599,47.17232],[8.68919,47.17566],[8.6872,47.17959],[8.6879,47.18229],[8.69186,47.18485],[8.69824,47.19205],[8.70323,47.19326],[8.70852,47.19602],[8.71423,47.19693],[8.71692,47.19893],[8.74212,47.2071],[8.74218,47.21355],[8.71338,47.21388]]],terms_text:"Kanton Zürich Orthophotos 2014/2015",best:true},{id:"Kanton-Zuerich-2015",name:"Kanton Zürich Orthophotos 2014/2015 10cm",type:"wms",template:"https://wms.zh.ch/OrthoZHWMS?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=orthophotos&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",endDate:"2015-01-01T00:00:00.000Z",startDate:"2014-01-01T00:00:00.000Z",zoomExtent:[8,21],polygon:[[[8.71338,47.21388],[8.7137,47.22737],[8.8117,47.22626],[8.80337,47.23858],[8.80866,47.2431],[8.82448,47.24656],[8.82971,47.24539],[8.83652,47.24257],[8.84568,47.24253],[8.84837,47.24322],[8.85232,47.24034],[8.86206,47.23882],[8.86472,47.23966],[8.86863,47.23968],[8.87339,47.24125],[8.87882,47.24476],[8.88054,47.24791],[8.89878,47.24976],[8.90281,47.25094],[8.91025,47.25003],[8.92735,47.25406],[8.93644,47.25499],[8.94233,47.25849],[8.94423,47.26173],[8.94882,47.26536],[8.95094,47.2686],[8.95068,47.27108],[8.953,47.27285],[8.95411,47.27505],[8.95504,47.28251],[8.95171,47.28527],[8.94664,47.28647],[8.95258,47.28844],[8.95454,47.28982],[8.96141,47.30098],[8.97552,47.30245],[8.98006,47.30416],[8.99153,47.31893],[8.99069,47.32183],[8.98637,47.32542],[8.98548,47.32778],[8.98364,47.32931],[8.98592,47.33815],[8.98464,47.34061],[8.98079,47.34237],[8.98088,47.34835],[8.97785,47.35437],[8.9759,47.35606],[8.97002,47.35843],[8.96572,47.3589],[8.96238,47.36252],[8.95665,47.37432],[8.9521,47.37836],[8.94778,47.37971],[8.95023,47.38346],[8.95018,47.38596],[8.9488,47.38836],[8.9397,47.39403],[8.93637,47.39496],[8.93251,47.39871],[8.92801,47.40148],[8.92278,47.4038],[8.91388,47.40569],[8.91924,47.41213],[8.92049,47.41915],[8.91829,47.42323],[8.92094,47.42544],[8.92107,47.42828],[8.92571,47.42695],[8.93437,47.42796],[8.93877,47.43173],[8.93974,47.43411],[8.93889,47.43725],[8.93511,47.43973],[8.92349,47.43953],[8.91973,47.44081],[8.91322,47.44119],[8.91162,47.44347],[8.91527,47.44628],[8.91499,47.45004],[8.91196,47.45378],[8.90517,47.45791],[8.90183,47.46435],[8.89735,47.46898],[8.89581,47.47219],[8.89135,47.4738],[8.89143,47.47821],[8.90142,47.48133],[8.90428,47.48449],[8.90314,47.48928],[8.90001,47.49187],[8.89967,47.49885],[8.90357,47.50404],[8.90413,47.50745],[8.90322,47.51948],[8.90497,47.52447],[8.90365,47.52691],[8.89982,47.52965],[8.88423,47.53392],[8.87883,47.53277],[8.87061,47.53477],[8.8602,47.53488],[8.85674,47.53594],[8.84782,47.5358],[8.84614,47.54087],[8.8403,47.54654],[8.83728,47.55278],[8.84275,47.5537],[8.84648,47.5562],[8.85269,47.55645],[8.8562,47.55792],[8.85775,47.56141],[8.85728,47.56489],[8.85511,47.56721],[8.85079,47.56818],[8.84763,47.57023],[8.84538,47.57061],[8.8448,47.57309],[8.84211,47.57513],[8.83326,47.57769],[8.82962,47.57778],[8.82661,47.57662],[8.82137,47.57756],[8.81432,47.57598],[8.81234,47.5778],[8.81222,47.58473],[8.81067,47.58639],[8.80812,47.58738],[8.76818,47.59674],[8.7543,47.59729],[8.75529,47.60108],[8.75416,47.60273],[8.74883,47.60588],[8.74829,47.60874],[8.7507,47.60981],[8.75255,47.61292],[8.75575,47.61217],[8.76102,47.61335],[8.78169,47.60634],[8.78165,47.60345],[8.78467,47.59993],[8.80168,47.5966],[8.80512,47.59686],[8.80895,47.59938],[8.81074,47.60981],[8.81866,47.61372],[8.82001,47.61526],[8.82089,47.62058],[8.82015,47.62415],[8.82415,47.6256],[8.83079,47.63206],[8.83448,47.64099],[8.83182,47.64945],[8.82695,47.65206],[8.81168,47.65599],[8.81112,47.6621],[8.81192,47.66454],[8.81041,47.66752],[8.80881,47.66857],[8.80293,47.66978],[8.79299,47.66919],[8.78685,47.66978],[8.78453,47.66899],[8.78216,47.66659],[8.77921,47.65695],[8.77763,47.65563],[8.77398,47.65435],[8.76623,47.65438],[8.76108,47.65257],[8.75852,47.65033],[8.75464,47.64883],[8.7534,47.64733],[8.74839,47.64613],[8.74329,47.64749],[8.73882,47.64651],[8.72376,47.64753],[8.72063,47.64664],[8.71492,47.64885],[8.70826,47.64764],[8.70481,47.65039],[8.70053,47.65199],[8.69427,47.65307],[8.69242,47.65581],[8.68632,47.66094],[8.68485,47.66413],[8.68574,47.66799],[8.68326,47.67315],[8.68056,47.67561],[8.67521,47.6776],[8.67642,47.68177],[8.67561,47.68661],[8.67427,47.68799],[8.67227,47.68891],[8.66273,47.69029],[8.64644,47.69847],[8.63968,47.69877],[8.6355,47.69743],[8.62162,47.69554],[8.61818,47.69279],[8.61744,47.69087],[8.62007,47.68134],[8.61478,47.68308],[8.60917,47.68188],[8.60199,47.67451],[8.59954,47.66923],[8.60275,47.66132],[8.60979,47.6568],[8.6141,47.6564],[8.61574,47.65557],[8.62231,47.65104],[8.62227,47.65024],[8.62048,47.64758],[8.61939,47.65043],[8.61521,47.65452],[8.6093,47.65677],[8.60324,47.65654],[8.60069,47.65541],[8.59788,47.65276],[8.59645,47.64876],[8.59092,47.64623],[8.58937,47.6444],[8.58874,47.63936],[8.59116,47.62755],[8.59325,47.62233],[8.59838,47.61587],[8.59854,47.6145],[8.59114,47.60917],[8.58937,47.60682],[8.58796,47.60319],[8.58788,47.59909],[8.58203,47.59793],[8.57398,47.59329],[8.57146,47.58988],[8.57035,47.58633],[8.57203,47.57985],[8.56771,47.57799],[8.56506,47.57524],[8.56117,47.56407],[8.55707,47.55947],[8.55616,47.56336],[8.55206,47.56904],[8.55334,47.57146],[8.5526,47.57599],[8.55007,47.57806],[8.54666,47.57923],[8.5435,47.58228],[8.54319,47.5851],[8.54888,47.5879],[8.55175,47.58777],[8.55764,47.58963],[8.56114,47.59151],[8.56265,47.5946],[8.56668,47.59565],[8.56902,47.59748],[8.56953,47.60049],[8.57237,47.60386],[8.57308,47.60641],[8.57562,47.60676],[8.579,47.60845],[8.58076,47.61031],[8.58125,47.61203],[8.58025,47.61456],[8.57712,47.61636],[8.57525,47.61957],[8.57277,47.6211],[8.56785,47.62164],[8.56341,47.62697],[8.56105,47.62838],[8.54803,47.62998],[8.54558,47.63122],[8.54498,47.63297],[8.54288,47.63458],[8.53995,47.63565],[8.52769,47.63634],[8.52112,47.63887],[8.51478,47.6385],[8.50932,47.63559],[8.50829,47.62942],[8.50161,47.62597],[8.5007,47.62421],[8.50149,47.62154],[8.49253,47.61893],[8.48884,47.61953],[8.47669,47.61937],[8.47439,47.61838],[8.47154,47.61495],[8.47129,47.61307],[8.46785,47.61272],[8.46446,47.61109],[8.46173,47.60659],[8.45519,47.60676],[8.45061,47.60411],[8.4499,47.60164],[8.4507,47.59584],[8.45382,47.59343],[8.45428,47.5866],[8.4563,47.5848],[8.46014,47.58382],[8.46332,47.58044],[8.46881,47.5795],[8.46219,47.57653],[8.45419,47.57668],[8.43642,47.57154],[8.43161,47.57102],[8.42476,47.57231],[8.41477,47.56879],[8.41304,47.56745],[8.41034,47.56194],[8.41039,47.55972],[8.40789,47.55465],[8.40846,47.55018],[8.39964,47.54444],[8.39609,47.543],[8.39469,47.54094],[8.39495,47.53674],[8.39136,47.53568],[8.38835,47.53305],[8.38525,47.53316],[8.38113,47.53219],[8.3774,47.52969],[8.37518,47.52679],[8.37279,47.51651],[8.36579,47.51663],[8.35666,47.51348],[8.35439,47.51104],[8.35103,47.50314],[8.3524,47.49957],[8.35163,47.4973],[8.35274,47.49484],[8.3545,47.49355],[8.3557,47.48979],[8.35533,47.48525],[8.35698,47.47931],[8.35891,47.47743],[8.36187,47.47645],[8.36722,47.47654],[8.36702,47.47487],[8.36073,47.47222],[8.35903,47.46604],[8.35996,47.46381],[8.36326,47.46204],[8.3673,47.45653],[8.36975,47.45504],[8.37393,47.45472],[8.37754,47.45201],[8.37583,47.45068],[8.37441,47.44614],[8.37623,47.43818],[8.37168,47.43675],[8.36855,47.43406],[8.3681,47.43158],[8.36904,47.42863],[8.37222,47.42603],[8.38283,47.42346],[8.38371,47.42251],[8.38073,47.42207],[8.37555,47.4178],[8.37598,47.41378],[8.37441,47.40906],[8.36067,47.40664],[8.35789,47.40542],[8.35629,47.40377],[8.35661,47.39961],[8.36195,47.39516],[8.36577,47.39429],[8.37601,47.3947],[8.37743,47.39218],[8.38036,47.39048],[8.38761,47.39035],[8.38832,47.38012],[8.39034,47.37527],[8.39355,47.3719],[8.39387,47.36945],[8.39574,47.3671],[8.39902,47.36608],[8.39836,47.36408],[8.40012,47.36094],[8.40103,47.35433],[8.39728,47.34677],[8.39779,47.34475],[8.40186,47.3391],[8.40931,47.33409],[8.4061,47.32975],[8.40578,47.32667],[8.40689,47.32447],[8.41295,47.3205],[8.41611,47.31996],[8.42948,47.32227],[8.43556,47.32083],[8.43437,47.31954],[8.43155,47.31851],[8.42609,47.31375],[8.42276,47.30706],[8.42311,47.30368],[8.41745,47.3015],[8.41372,47.29824],[8.40012,47.29564],[8.39768,47.29392],[8.39518,47.29516],[8.39108,47.29552],[8.38602,47.29437],[8.38272,47.29225],[8.38198,47.29034],[8.38255,47.2881],[8.38508,47.28565],[8.38977,47.27507],[8.39563,47.271],[8.39407,47.26672],[8.39415,47.26361],[8.39756,47.25986],[8.39614,47.25481],[8.39742,47.25189],[8.40647,47.24452],[8.40826,47.24118],[8.40761,47.23957],[8.4096,47.23585],[8.41073,47.22799],[8.41248,47.22433],[8.41695,47.22014],[8.41959,47.21902],[8.42269,47.21886],[8.42977,47.22],[8.43936,47.21937],[8.45,47.21363],[8.4546,47.21334],[8.45625,47.21081],[8.4591,47.20934],[8.46447,47.20928],[8.46609,47.20862],[8.46868,47.20533],[8.47329,47.20398],[8.47693,47.20458],[8.48399,47.20392],[8.49489,47.20738],[8.504,47.20768],[8.51538,47.21152],[8.51753,47.21271],[8.51906,47.21495],[8.5306,47.21306],[8.53307,47.21325],[8.5415,47.21778],[8.54456,47.21707],[8.55407,47.21726],[8.55858,47.21517],[8.56984,47.2139],[8.57491,47.21255],[8.57749,47.20771],[8.58044,47.2064],[8.58408,47.20603],[8.59012,47.20714],[8.58965,47.2046],[8.59074,47.20195],[8.59358,47.1986],[8.59581,47.19753],[8.60168,47.19722],[8.60653,47.1992],[8.60725,47.19885],[8.61097,47.19387],[8.61128,47.19059],[8.61391,47.18838],[8.61522,47.18515],[8.61938,47.18045],[8.61976,47.17918],[8.61721,47.17359],[8.6196,47.1698],[8.62292,47.16821],[8.6339,47.16715],[8.63561,47.16578],[8.63965,47.16459],[8.64287,47.16443],[8.65216,47.16598],[8.65425,47.16552],[8.6549,47.15967],[8.65649,47.15783],[8.65882,47.15658],[8.66853,47.15492],[8.67847,47.15558],[8.68241,47.15759],[8.69361,47.15898],[8.69804,47.16134],[8.69886,47.16303],[8.6977,47.17033],[8.69599,47.17232],[8.68919,47.17566],[8.6872,47.17959],[8.6879,47.18229],[8.69186,47.18485],[8.69824,47.19205],[8.70323,47.19326],[8.70852,47.19602],[8.71423,47.19693],[8.71692,47.19893],[8.74212,47.2071],[8.74218,47.21355],[8.71338,47.21388]]],terms_text:"Kanton Zürich Orthophotos 2014/2015",best:true},{id:"kartverket-abas",name:"Kartverket Administrative Boundaries overlay",type:"wms",template:"https://openwms.statkart.no/skwms1/wms.adm_enheter?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=avtaltavgrensningslinje,territorialgrense,riksgrense,fylker,kommuner&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",zoomExtent:[0,22],polygon:[[[31.90425,70.43681],[28.47652,71.32896],[23.6865,71.25143],[16.80906,70.07308],[11.16207,67.52539],[9.97554,64.81158],[4.21871,62.145],[4.37254,59.1872],[6.17431,57.8915],[7.93212,57.73936],[10.77758,58.86491],[11.7224,58.76251],[12.72216,60.11415],[13.05175,61.34935],[12.52439,63.61699],[14.23826,63.98561],[15.11717,65.90166],[18.69871,68.37491],[20.06101,68.26126],[21.00584,68.78415],[25.24656,68.3506],[26.93845,69.8472],[28.76219,69.61121],[28.5864,68.8556],[31.06931,69.51915],[31.90425,70.43681]]],terms_url:"https://www.kartverket.no/data/Kartdata/Grenser/",terms_text:"© Kartverket",description:"Official administrative boundaries at the national, county and municipality levels",icon:"https://www.kartverket.no/Content/Images/logo-graphic-512.png",overlay:true},{id:"kartverket-luftfartshindre",name:"Kartverket Aviation Obstructions overlay",type:"wms",template:"https://openwms.statkart.no/skwms1/wms.nrl?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=nrl3_wms&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",zoomExtent:[7,20],polygon:[[[31.90425,70.43681],[28.47652,71.32896],[23.6865,71.25143],[16.80906,70.07308],[11.16207,67.52539],[9.97554,64.81158],[4.21871,62.145],[4.37254,59.1872],[6.17431,57.8915],[7.93212,57.73936],[10.77758,58.86491],[11.7224,58.76251],[12.72216,60.11415],[13.05175,61.34935],[12.52439,63.61699],[14.23826,63.98561],[15.11717,65.90166],[18.69871,68.37491],[20.06101,68.26126],[21.00584,68.78415],[25.24656,68.3506],[26.93845,69.8472],[28.76219,69.61121],[28.5864,68.8556],[31.06931,69.51915],[31.90425,70.43681]]],terms_url:"https://kartverket.no/kart/Nasjonalt-register-over-luftfartshindre/",terms_text:"© Kartverket",description:"Vertical obstructions to aircrafts, above 15m in rural areas and 30m in urban areas (e.g. masts, towers, high buildings, power lines)",icon:"https://www.kartverket.no/Content/Images/logo-graphic-512.png",overlay:true},{id:"kartverket-matrikkel",name:"Kartverket Cadastral overlay",type:"wms",template:"https://wms.geonorge.no/skwms1/wms.matrikkel?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=matrikkel_WMS&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",zoomExtent:[14,20],polygon:[[[31.90425,70.43681],[28.47652,71.32896],[23.6865,71.25143],[16.80906,70.07308],[11.16207,67.52539],[9.97554,64.81158],[4.21871,62.145],[4.37254,59.1872],[6.17431,57.8915],[7.93212,57.73936],[10.77758,58.86491],[11.7224,58.76251],[12.72216,60.11415],[13.05175,61.34935],[12.52439,63.61699],[14.23826,63.98561],[15.11717,65.90166],[18.69871,68.37491],[20.06101,68.26126],[21.00584,68.78415],[25.24656,68.3506],[26.93845,69.8472],[28.76219,69.61121],[28.5864,68.8556],[31.06931,69.51915],[31.90425,70.43681]]],terms_url:"http://www.seeiendom.no/",terms_text:"© Kartverket",description:"Real estate boundaries from the official land register (`matrikkelen´). Monthly update.",icon:"https://www.kartverket.no/Content/Images/logo-graphic-512.png",overlay:true},{id:"kartverket-hoydekurver",name:"Kartverket Contour Lines overlay",type:"wms",template:"https://openwms.statkart.no/skwms1/wms.topo4?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=hoydetall5linje,hoydetall5punkt,hoydepunkt,vannpunkt,hoydekurver_1m,hoydekurver_5m,N50Hoydekurver,N250Hoydekurver,N500Hoydekurver,N1000Hoydekurver,N2000Hoydekurver&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",zoomExtent:[9,22],polygon:[[[31.90425,70.43681],[28.47652,71.32896],[23.6865,71.25143],[16.80906,70.07308],[11.16207,67.52539],[9.97554,64.81158],[4.21871,62.145],[4.37254,59.1872],[6.17431,57.8915],[7.93212,57.73936],[10.77758,58.86491],[11.7224,58.76251],[12.72216,60.11415],[13.05175,61.34935],[12.52439,63.61699],[14.23826,63.98561],[15.11717,65.90166],[18.69871,68.37491],[20.06101,68.26126],[21.00584,68.78415],[25.24656,68.3506],[26.93845,69.8472],[28.76219,69.61121],[28.5864,68.8556],[31.06931,69.51915],[31.90425,70.43681]]],terms_url:"https://www.kartverket.no/Prosjekter/Nasjonal-detaljert-hoydemodell/",terms_text:"© Kartverket",description:"Contours for Norway",icon:"https://www.kartverket.no/Content/Images/logo-graphic-512.png",overlay:true},{id:"kartverket-dom-skygge",name:"Kartverket DOM Digital Surface Model",type:"wms",template:"https://wms.geonorge.no/skwms1/wms.hoyde-dom_somlos_skyggerelieff?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=las_dom_skyggerelieff_somlos&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",zoomExtent:[0,24],polygon:[[[11.53568,58.86659],[11.66192,58.89784],[11.7935,59.09471],[11.84243,59.239],[11.82877,59.34509],[11.71279,59.60387],[11.86205,59.63771],[11.95608,59.69196],[11.93389,59.86895],[12.17881,59.8786],[12.46948,60.03124],[12.55438,60.18972],[12.51237,60.31659],[12.61793,60.40065],[12.61883,60.51512],[12.25387,61.01106],[12.69195,61.04632],[12.90756,61.34802],[12.57493,61.57623],[12.42465,61.57175],[12.15233,61.72694],[12.31212,62.26512],[12.07078,62.61109],[12.14907,62.7455],[12.08883,62.89668],[12.23464,62.99952],[11.99225,63.26684],[12.23327,63.47505],[12.17971,63.57117],[12.69313,63.96344],[13.21378,64.0839],[13.99183,64.00514],[14.17035,64.18236],[14.13253,64.47516],[13.67658,64.58356],[14.02455,64.88119],[14.33572,65.11098],[14.51699,65.30365],[14.54177,65.67762],[14.63674,65.81299],[14.53903,66.12496],[15.03881,66.14245],[15.50033,66.27956],[15.39368,66.4795],[15.63473,66.59685],[16.04695,66.90283],[16.39832,67.03827],[16.41439,67.21036],[16.10744,67.43617],[16.16455,67.5087],[16.42318,67.52589],[16.5866,67.64528],[16.7471,67.90466],[17.34741,68.09995],[17.90583,67.95885],[18.16489,68.19424],[18.13721,68.52675],[18.40761,68.57059],[18.62222,68.49607],[18.98574,68.50591],[19.92752,68.34558],[20.24505,68.49201],[19.99237,68.55586],[20.21137,68.65685],[20.34848,68.79976],[20.31623,68.93227],[20.10322,69.0359],[20.55694,69.04926],[20.7206,69.10837],[21.06178,69.02541],[21.12098,69.10587],[21.01135,69.21086],[21.2824,69.30076],[21.62645,69.26589],[22.33512,68.81965],[22.37485,68.70596],[22.5377,68.73329],[22.80161,68.67674],[23.04635,68.67833],[23.16467,68.61903],[23.68789,68.70049],[23.79776,68.81592],[23.96804,68.82287],[24.17541,68.7314],[24.76043,68.63655],[24.8544,68.55285],[24.90827,68.54387],[24.93347,68.6025],[25.12435,68.62003],[25.1667,68.79008],[25.43334,68.87886],[25.62945,68.88103],[25.79589,69.01157],[25.73272,69.19428],[26.02249,69.66758],[26.56631,69.94207],[27.10601,69.89539],[27.63679,70.05317],[27.93548,70.07401],[27.96569,70.00415],[28.40312,69.80824],[29.1014,69.69095],[29.328,69.47585],[28.82859,69.2316],[28.7931,69.0943],[29.04485,68.99986],[29.25292,69.10601],[29.32641,69.22982],[29.29229,69.27632],[29.39117,69.31298],[29.57038,69.31201],[29.85191,69.41631],[29.96795,69.39916],[30.13069,69.4667],[30.2008,69.5658],[30.13137,69.6609],[30.15678,69.66496],[30.51589,69.53787],[30.82077,69.52371],[30.95329,69.55563],[30.96221,69.67832],[30.83578,69.79192],[31.65161,70.17579],[31.78344,70.4662],[30.49255,70.86989],[28.43261,71.30079],[25.66406,71.40266],[23.81835,71.29374],[18.30322,70.40734],[14.24926,69.07641],[11.18408,67.47913],[11.74438,66.90852],[9.95361,64.88393],[4.72961,62.3649],[4.12948,61.69247],[4.08142,61.02637],[4.4577,59.19421],[5.31188,58.4276],[6.47094,57.84475],[7.56408,57.72468],[8.4375,57.91776],[10.59792,58.75006],[10.64905,58.88203],[11.09035,58.97673],[11.16173,59.06743],[11.34175,59.10293],[11.44922,58.99078],[11.45194,58.88136],[11.53568,58.86659]]],terms_url:"https://hoydedata.no/",terms_text:"© Kartverket",description:"Shaded relief representation of the Norwegian digital surface model (DOM), i.e. earth surface including trees, buildings and other objects on top of it.",icon:"https://www.kartverket.no/Content/Images/logo-graphic-512.png"},{id:"kartverket-dtm-skygge",name:"Kartverket DTM Digital Terrain Model",type:"wms",template:"https://wms.geonorge.no/skwms1/wms.hoyde-dtm_somlos_skyggerelieff?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=las_dtm_skyggerelieff_somlos&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",zoomExtent:[0,24],polygon:[[[11.53568,58.86659],[11.66192,58.89784],[11.7935,59.09471],[11.84243,59.239],[11.82877,59.34509],[11.71279,59.60387],[11.86205,59.63771],[11.95608,59.69196],[11.93389,59.86895],[12.17881,59.8786],[12.46948,60.03124],[12.55438,60.18972],[12.51237,60.31659],[12.61793,60.40065],[12.61883,60.51512],[12.25387,61.01106],[12.69195,61.04632],[12.90756,61.34802],[12.57493,61.57623],[12.42465,61.57175],[12.15233,61.72694],[12.31212,62.26512],[12.07078,62.61109],[12.14907,62.7455],[12.08883,62.89668],[12.23464,62.99952],[11.99225,63.26684],[12.23327,63.47505],[12.17971,63.57117],[12.69313,63.96344],[13.21378,64.0839],[13.99183,64.00514],[14.17035,64.18236],[14.13253,64.47516],[13.67658,64.58356],[14.02455,64.88119],[14.33572,65.11098],[14.51699,65.30365],[14.54177,65.67762],[14.63674,65.81299],[14.53903,66.12496],[15.03881,66.14245],[15.50033,66.27956],[15.39368,66.4795],[15.63473,66.59685],[16.04695,66.90283],[16.39832,67.03827],[16.41439,67.21036],[16.10744,67.43617],[16.16455,67.5087],[16.42318,67.52589],[16.5866,67.64528],[16.7471,67.90466],[17.34741,68.09995],[17.90583,67.95885],[18.16489,68.19424],[18.13721,68.52675],[18.40761,68.57059],[18.62222,68.49607],[18.98574,68.50591],[19.92752,68.34558],[20.24505,68.49201],[19.99237,68.55586],[20.21137,68.65685],[20.34848,68.79976],[20.31623,68.93227],[20.10322,69.0359],[20.55694,69.04926],[20.7206,69.10837],[21.06178,69.02541],[21.12098,69.10587],[21.01135,69.21086],[21.2824,69.30076],[21.62645,69.26589],[22.33512,68.81965],[22.37485,68.70596],[22.5377,68.73329],[22.80161,68.67674],[23.04635,68.67833],[23.16467,68.61903],[23.68789,68.70049],[23.79776,68.81592],[23.96804,68.82287],[24.17541,68.7314],[24.76043,68.63655],[24.8544,68.55285],[24.90827,68.54387],[24.93347,68.6025],[25.12435,68.62003],[25.1667,68.79008],[25.43334,68.87886],[25.62945,68.88103],[25.79589,69.01157],[25.73272,69.19428],[26.02249,69.66758],[26.56631,69.94207],[27.10601,69.89539],[27.63679,70.05317],[27.93548,70.07401],[27.96569,70.00415],[28.40312,69.80824],[29.1014,69.69095],[29.328,69.47585],[28.82859,69.2316],[28.7931,69.0943],[29.04485,68.99986],[29.25292,69.10601],[29.32641,69.22982],[29.29229,69.27632],[29.39117,69.31298],[29.57038,69.31201],[29.85191,69.41631],[29.96795,69.39916],[30.13069,69.4667],[30.2008,69.5658],[30.13137,69.6609],[30.15678,69.66496],[30.51589,69.53787],[30.82077,69.52371],[30.95329,69.55563],[30.96221,69.67832],[30.83578,69.79192],[31.65161,70.17579],[31.78344,70.4662],[30.49255,70.86989],[28.43261,71.30079],[25.66406,71.40266],[23.81835,71.29374],[18.30322,70.40734],[14.24926,69.07641],[11.18408,67.47913],[11.74438,66.90852],[9.95361,64.88393],[4.72961,62.3649],[4.12948,61.69247],[4.08142,61.02637],[4.4577,59.19421],[5.31188,58.4276],[6.47094,57.84475],[7.56408,57.72468],[8.4375,57.91776],[10.59792,58.75006],[10.64905,58.88203],[11.09035,58.97673],[11.16173,59.06743],[11.34175,59.10293],[11.44922,58.99078],[11.45194,58.88136],[11.53568,58.86659]]],terms_url:"https://hoydedata.no/",terms_text:"© Kartverket",description:"Shaded relief representation of the Norwegian digital terrain model (DTM), i.e. earth surface without trees, buildings and other objects.",icon:"https://www.kartverket.no/Content/Images/logo-graphic-512.png"},{id:"kartverket-ok-1st",name:"Kartverket Economic Maps (historic)",type:"wms",template:"https://wms.geonorge.no/skwms1/wms.n5raster2?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=n5raster_foerstegang_metadata,n5raster_foerstegang&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",zoomExtent:[11,20],polygon:[[[31.90425,70.43681],[28.47652,71.32896],[23.6865,71.25143],[16.80906,70.07308],[11.16207,67.52539],[9.97554,64.81158],[4.21871,62.145],[4.37254,59.1872],[6.17431,57.8915],[7.93212,57.73936],[10.77758,58.86491],[11.7224,58.76251],[12.72216,60.11415],[13.05175,61.34935],[12.52439,63.61699],[14.23826,63.98561],[15.11717,65.90166],[18.69871,68.37491],[20.06101,68.26126],[21.00584,68.78415],[25.24656,68.3506],[26.93845,69.8472],[28.76219,69.61121],[28.5864,68.8556],[31.06931,69.51915],[31.90425,70.43681]]],terms_url:"https://www.kartverket.no/kunnskap/historie/kartverkets-historiske-arkiv/",terms_text:"© Kartverket",description:"1st edition of historic Economic maps for Norway 1960-90s (`Økonomisk kartverk´). Available from zoom 16. Please correct local imagery offset.",icon:"https://www.kartverket.no/Content/Images/logo-graphic-512.png"},{id:"kartverket-friluft",name:"Kartverket Hiking Trails",type:"wms",template:"https://wms.geonorge.no/skwms1/wms.friluftsruter2?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=Fotrute&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",zoomExtent:[6,24],polygon:[[[11.53568,58.86659],[11.66192,58.89784],[11.7935,59.09471],[11.84243,59.239],[11.82877,59.34509],[11.71279,59.60387],[11.86205,59.63771],[11.95608,59.69196],[11.93389,59.86895],[12.17881,59.8786],[12.46948,60.03124],[12.55438,60.18972],[12.51237,60.31659],[12.61793,60.40065],[12.61883,60.51512],[12.25387,61.01106],[12.69195,61.04632],[12.90756,61.34802],[12.57493,61.57623],[12.42465,61.57175],[12.15233,61.72694],[12.31212,62.26512],[12.07078,62.61109],[12.14907,62.7455],[12.08883,62.89668],[12.23464,62.99952],[11.99225,63.26684],[12.23327,63.47505],[12.17971,63.57117],[12.69313,63.96344],[13.21378,64.0839],[13.99183,64.00514],[14.17035,64.18236],[14.13253,64.47516],[13.67658,64.58356],[14.02455,64.88119],[14.33572,65.11098],[14.51699,65.30365],[14.54177,65.67762],[14.63674,65.81299],[14.53903,66.12496],[15.03881,66.14245],[15.50033,66.27956],[15.39368,66.4795],[15.63473,66.59685],[16.04695,66.90283],[16.39832,67.03827],[16.41439,67.21036],[16.10744,67.43617],[16.16455,67.5087],[16.42318,67.52589],[16.5866,67.64528],[16.7471,67.90466],[17.34741,68.09995],[17.90583,67.95885],[18.16489,68.19424],[18.13721,68.52675],[18.40761,68.57059],[18.62222,68.49607],[18.98574,68.50591],[19.92752,68.34558],[20.24505,68.49201],[19.99237,68.55586],[20.21137,68.65685],[20.34848,68.79976],[20.31623,68.93227],[20.10322,69.0359],[20.55694,69.04926],[20.7206,69.10837],[21.06178,69.02541],[21.12098,69.10587],[21.01135,69.21086],[21.2824,69.30076],[21.62645,69.26589],[22.33512,68.81965],[22.37485,68.70596],[22.5377,68.73329],[22.80161,68.67674],[23.04635,68.67833],[23.16467,68.61903],[23.68789,68.70049],[23.79776,68.81592],[23.96804,68.82287],[24.17541,68.7314],[24.76043,68.63655],[24.8544,68.55285],[24.90827,68.54387],[24.93347,68.6025],[25.12435,68.62003],[25.1667,68.79008],[25.43334,68.87886],[25.62945,68.88103],[25.79589,69.01157],[25.73272,69.19428],[26.02249,69.66758],[26.56631,69.94207],[27.10601,69.89539],[27.63679,70.05317],[27.93548,70.07401],[27.96569,70.00415],[28.40312,69.80824],[29.1014,69.69095],[29.328,69.47585],[28.82859,69.2316],[28.7931,69.0943],[29.04485,68.99986],[29.25292,69.10601],[29.32641,69.22982],[29.29229,69.27632],[29.39117,69.31298],[29.57038,69.31201],[29.85191,69.41631],[29.96795,69.39916],[30.13069,69.4667],[30.2008,69.5658],[30.13137,69.6609],[30.15678,69.66496],[30.51589,69.53787],[30.82077,69.52371],[30.95329,69.55563],[30.96221,69.67832],[30.83578,69.79192],[31.65161,70.17579],[31.78344,70.4662],[30.49255,70.86989],[28.43261,71.30079],[25.66406,71.40266],[23.81835,71.29374],[18.30322,70.40734],[14.24926,69.07641],[11.18408,67.47913],[11.74438,66.90852],[9.95361,64.88393],[4.72961,62.3649],[4.12948,61.69247],[4.08142,61.02637],[4.4577,59.19421],[5.31188,58.4276],[6.47094,57.84475],[7.56408,57.72468],[8.4375,57.91776],[10.59792,58.75006],[10.64905,58.88203],[11.09035,58.97673],[11.16173,59.06743],[11.34175,59.10293],[11.44922,58.99078],[11.45194,58.88136],[11.53568,58.86659]]],terms_url:"https://kartverket.no/geodataarbeid/temadata/nasjonal-database-for-tur--og-friluftsruter/",terms_text:"© Kartverket",description:"Hiking trails from the Norwegian database `Tur- og Friluftsruter´, including DNT routes.",icon:"https://www.kartverket.no/Content/Images/logo-graphic-512.png",overlay:true},{id:"kartverket-fjellskygge",name:"Kartverket Hillshade overlay",type:"tms",template:"https://opencache{switch:,2,3}.statkart.no/gatekeeper/gk/gk.open_gmaps?layers=fjellskygge&zoom={zoom}&x={x}&y={y}",zoomExtent:[9,15],polygon:[[[31.90425,70.43681],[28.47652,71.32896],[23.6865,71.25143],[16.80906,70.07308],[11.16207,67.52539],[9.97554,64.81158],[4.21871,62.145],[4.37254,59.1872],[6.17431,57.8915],[7.93212,57.73936],[10.77758,58.86491],[11.7224,58.76251],[12.72216,60.11415],[13.05175,61.34935],[12.52439,63.61699],[14.23826,63.98561],[15.11717,65.90166],[18.69871,68.37491],[20.06101,68.26126],[21.00584,68.78415],[25.24656,68.3506],[26.93845,69.8472],[28.76219,69.61121],[28.5864,68.8556],[31.06931,69.51915],[31.90425,70.43681]]],terms_url:"https://kartkatalog.geonorge.no/metadata/kartverket/fjellskygge-cache/cca7c129-fe66-4c96-9091-40d92290dd81",terms_text:"© Kartverket",description:"Hillshade for Norway",icon:"https://www.kartverket.no/Content/Images/logo-graphic-512.png",overlay:true},{id:"kartverket-historic",name:"Kartverket Historic maps",type:"wms",template:"https://wms.geonorge.no/skwms1/wms.historiskekart?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=amt1&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",zoomExtent:[5,15],polygon:[[[31.90425,70.43681],[28.47652,71.32896],[23.6865,71.25143],[16.80906,70.07308],[11.16207,67.52539],[9.97554,64.81158],[4.21871,62.145],[4.37254,59.1872],[6.17431,57.8915],[7.93212,57.73936],[10.77758,58.86491],[11.7224,58.76251],[12.72216,60.11415],[13.05175,61.34935],[12.52439,63.61699],[14.23826,63.98561],[15.11717,65.90166],[18.69871,68.37491],[20.06101,68.26126],[21.00584,68.78415],[25.24656,68.3506],[26.93845,69.8472],[28.76219,69.61121],[28.5864,68.8556],[31.06931,69.51915],[31.90425,70.43681]]],terms_url:"https://www.kartverket.no/kart/historiske-kart/",terms_text:"© Kartverket",description:"Historic maps - for the time being `Amtskartserien´ 1826-1917.",icon:"https://www.kartverket.no/Content/Images/logo-graphic-512.png"},{id:"kartverket-topo4",name:"Kartverket N50 topo",type:"tms",template:"https://opencache{switch:,2,3}.statkart.no/gatekeeper/gk/gk.open_gmaps?layers=topo4&zoom={zoom}&x={x}&y={y}",zoomExtent:[3,15],polygon:[[[11.53568,58.86659],[11.66192,58.89784],[11.7935,59.09471],[11.84243,59.239],[11.82877,59.34509],[11.71279,59.60387],[11.86205,59.63771],[11.95608,59.69196],[11.93389,59.86895],[12.17881,59.8786],[12.46948,60.03124],[12.55438,60.18972],[12.51237,60.31659],[12.61793,60.40065],[12.61883,60.51512],[12.25387,61.01106],[12.69195,61.04632],[12.90756,61.34802],[12.57493,61.57623],[12.42465,61.57175],[12.15233,61.72694],[12.31212,62.26512],[12.07078,62.61109],[12.14907,62.7455],[12.08883,62.89668],[12.23464,62.99952],[11.99225,63.26684],[12.23327,63.47505],[12.17971,63.57117],[12.69313,63.96344],[13.21378,64.0839],[13.99183,64.00514],[14.17035,64.18236],[14.13253,64.47516],[13.67658,64.58356],[14.02455,64.88119],[14.33572,65.11098],[14.51699,65.30365],[14.54177,65.67762],[14.63674,65.81299],[14.53903,66.12496],[15.03881,66.14245],[15.50033,66.27956],[15.39368,66.4795],[15.63473,66.59685],[16.04695,66.90283],[16.39832,67.03827],[16.41439,67.21036],[16.10744,67.43617],[16.16455,67.5087],[16.42318,67.52589],[16.5866,67.64528],[16.7471,67.90466],[17.34741,68.09995],[17.90583,67.95885],[18.16489,68.19424],[18.13721,68.52675],[18.40761,68.57059],[18.62222,68.49607],[18.98574,68.50591],[19.92752,68.34558],[20.24505,68.49201],[19.99237,68.55586],[20.21137,68.65685],[20.34848,68.79976],[20.31623,68.93227],[20.10322,69.0359],[20.55694,69.04926],[20.7206,69.10837],[21.06178,69.02541],[21.12098,69.10587],[21.01135,69.21086],[21.2824,69.30076],[21.62645,69.26589],[22.33512,68.81965],[22.37485,68.70596],[22.5377,68.73329],[22.80161,68.67674],[23.04635,68.67833],[23.16467,68.61903],[23.68789,68.70049],[23.79776,68.81592],[23.96804,68.82287],[24.17541,68.7314],[24.76043,68.63655],[24.8544,68.55285],[24.90827,68.54387],[24.93347,68.6025],[25.12435,68.62003],[25.1667,68.79008],[25.43334,68.87886],[25.62945,68.88103],[25.79589,69.01157],[25.73272,69.19428],[26.02249,69.66758],[26.56631,69.94207],[27.10601,69.89539],[27.63679,70.05317],[27.93548,70.07401],[27.96569,70.00415],[28.40312,69.80824],[29.1014,69.69095],[29.328,69.47585],[28.82859,69.2316],[28.7931,69.0943],[29.04485,68.99986],[29.25292,69.10601],[29.32641,69.22982],[29.29229,69.27632],[29.39117,69.31298],[29.57038,69.31201],[29.85191,69.41631],[29.96795,69.39916],[30.13069,69.4667],[30.2008,69.5658],[30.13137,69.6609],[30.15678,69.66496],[30.51589,69.53787],[30.82077,69.52371],[30.95329,69.55563],[30.96221,69.67832],[30.83578,69.79192],[31.65161,70.17579],[31.78344,70.4662],[30.49255,70.86989],[28.43261,71.30079],[25.66406,71.40266],[23.81835,71.29374],[18.30322,70.40734],[14.24926,69.07641],[11.18408,67.47913],[11.74438,66.90852],[9.95361,64.88393],[4.72961,62.3649],[4.12948,61.69247],[4.08142,61.02637],[4.4577,59.19421],[5.31188,58.4276],[6.47094,57.84475],[7.56408,57.72468],[8.4375,57.91776],[10.59792,58.75006],[10.64905,58.88203],[11.09035,58.97673],[11.16173,59.06743],[11.34175,59.10293],[11.44922,58.99078],[11.45194,58.88136],[11.53568,58.86659]]],terms_url:"https://wiki.openstreetmap.org/wiki/No:Kartverket_import",terms_text:"© Kartverket",description:"Topographic map N50, equivalent to Norway 1:50.000 paper map series.",icon:"https://www.kartverket.no/Content/Images/logo-graphic-512.png"},{id:"kartverket-sjokart",name:"Kartverket Nautical Charts",type:"tms",template:"https://opencache{switch:,2,3}.statkart.no/gatekeeper/gk/gk.open_gmaps?layers=sjokartraster&zoom={zoom}&x={x}&y={y}",zoomExtent:[3,20],polygon:[[[-15.01273,-60.16205],[33.3326,-60.17016],[33.32144,-73.0009],[-15.0239,-72.99613],[-15.01273,-60.16205]],[[-173.00076,-70.54952],[-125.00321,-70.54878],[-125.00167,-78.99977],[-172.99922,-79.0002],[-173.00076,-70.54952]],[[3.24857,56.08599],[2.60924,56.59428],[1.47215,58.45924],[1.77704,61.36251],[-0.49301,63.88665],[-13.73292,69.76376],[-12.43655,72.58741],[-5.11965,74.39626],[-3.60356,79.12998],[5.85587,82.34863],[34.98861,82.3401],[37.96874,78.62784],[37.99619,75.79673],[36.95796,73.68962],[32.07458,70.27336],[30.3511,69.56882],[21.46179,69.57098],[18.3032,68.36681],[14.47997,66.2558],[11.50266,63.28307],[11.50166,58.95444],[11.08246,58.96771],[10.03051,58.25173],[8.88244,57.69534],[3.24857,56.08599]]],terms_url:"https://www.kartverket.no/Kart/Sjokart/",terms_text:"© Kartverket",description:"Norwegian nautical charts (includes Spitsbergen/Svalbard and Antarctica). Raster representation of paper charts. Updated biweekly.",icon:"https://www.kartverket.no/Content/Images/logo-graphic-512.png"},{id:"kartverket-vegnett",name:"Kartverket Road Network",type:"wms",template:"https://openwms.statkart.no/skwms1/wms.vegnett?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=all&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",zoomExtent:[3,24],polygon:[[[11.53568,58.86659],[11.66192,58.89784],[11.7935,59.09471],[11.84243,59.239],[11.82877,59.34509],[11.71279,59.60387],[11.86205,59.63771],[11.95608,59.69196],[11.93389,59.86895],[12.17881,59.8786],[12.46948,60.03124],[12.55438,60.18972],[12.51237,60.31659],[12.61793,60.40065],[12.61883,60.51512],[12.25387,61.01106],[12.69195,61.04632],[12.90756,61.34802],[12.57493,61.57623],[12.42465,61.57175],[12.15233,61.72694],[12.31212,62.26512],[12.07078,62.61109],[12.14907,62.7455],[12.08883,62.89668],[12.23464,62.99952],[11.99225,63.26684],[12.23327,63.47505],[12.17971,63.57117],[12.69313,63.96344],[13.21378,64.0839],[13.99183,64.00514],[14.17035,64.18236],[14.13253,64.47516],[13.67658,64.58356],[14.02455,64.88119],[14.33572,65.11098],[14.51699,65.30365],[14.54177,65.67762],[14.63674,65.81299],[14.53903,66.12496],[15.03881,66.14245],[15.50033,66.27956],[15.39368,66.4795],[15.63473,66.59685],[16.04695,66.90283],[16.39832,67.03827],[16.41439,67.21036],[16.10744,67.43617],[16.16455,67.5087],[16.42318,67.52589],[16.5866,67.64528],[16.7471,67.90466],[17.34741,68.09995],[17.90583,67.95885],[18.16489,68.19424],[18.13721,68.52675],[18.40761,68.57059],[18.62222,68.49607],[18.98574,68.50591],[19.92752,68.34558],[20.24505,68.49201],[19.99237,68.55586],[20.21137,68.65685],[20.34848,68.79976],[20.31623,68.93227],[20.10322,69.0359],[20.55694,69.04926],[20.7206,69.10837],[21.06178,69.02541],[21.12098,69.10587],[21.01135,69.21086],[21.2824,69.30076],[21.62645,69.26589],[22.33512,68.81965],[22.37485,68.70596],[22.5377,68.73329],[22.80161,68.67674],[23.04635,68.67833],[23.16467,68.61903],[23.68789,68.70049],[23.79776,68.81592],[23.96804,68.82287],[24.17541,68.7314],[24.76043,68.63655],[24.8544,68.55285],[24.90827,68.54387],[24.93347,68.6025],[25.12435,68.62003],[25.1667,68.79008],[25.43334,68.87886],[25.62945,68.88103],[25.79589,69.01157],[25.73272,69.19428],[26.02249,69.66758],[26.56631,69.94207],[27.10601,69.89539],[27.63679,70.05317],[27.93548,70.07401],[27.96569,70.00415],[28.40312,69.80824],[29.1014,69.69095],[29.328,69.47585],[28.82859,69.2316],[28.7931,69.0943],[29.04485,68.99986],[29.25292,69.10601],[29.32641,69.22982],[29.29229,69.27632],[29.39117,69.31298],[29.57038,69.31201],[29.85191,69.41631],[29.96795,69.39916],[30.13069,69.4667],[30.2008,69.5658],[30.13137,69.6609],[30.15678,69.66496],[30.51589,69.53787],[30.82077,69.52371],[30.95329,69.55563],[30.96221,69.67832],[30.83578,69.79192],[31.65161,70.17579],[31.78344,70.4662],[30.49255,70.86989],[28.43261,71.30079],[25.66406,71.40266],[23.81835,71.29374],[18.30322,70.40734],[14.24926,69.07641],[11.18408,67.47913],[11.74438,66.90852],[9.95361,64.88393],[4.72961,62.3649],[4.12948,61.69247],[4.08142,61.02637],[4.4577,59.19421],[5.31188,58.4276],[6.47094,57.84475],[7.56408,57.72468],[8.4375,57.91776],[10.59792,58.75006],[10.64905,58.88203],[11.09035,58.97673],[11.16173,59.06743],[11.34175,59.10293],[11.44922,58.99078],[11.45194,58.88136],[11.53568,58.86659]]],terms_url:"https://www.kartverket.no/data/kartdata/vegdata/",terms_text:"© Kartverket",description:"Norwegian road network from the National Road database (NVDB). Colours represent national, county, municipal, private and forest roads + footways/cycleways.",icon:"https://www.kartverket.no/Content/Images/logo-graphic-512.png",overlay:true},{id:"Katowice-buildings",name:"Katowice: Buildings",type:"wms",template:"http://mapserver.um.katowice.pl/services/ortowms/MapServer/WMSServer?FORMAT=image/png&transparent=true&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=4,5,6&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",polygon:[[[18.90884,50.24006],[18.90851,50.23542],[18.94279,50.23515],[18.94399,50.27138],[18.95469,50.27485],[18.95571,50.2894],[18.96692,50.29364],[18.98752,50.2848],[18.99888,50.2847],[18.99907,50.29368],[18.98892,50.29377],[18.98934,50.30244],[19.0094,50.30196],[19.03401,50.28842],[19.05533,50.30139],[19.07901,50.30087],[19.07908,50.29297],[19.12296,50.27784],[19.12267,50.25523],[19.11079,50.2428],[19.1098,50.17946],[19.12065,50.17936],[19.11957,50.14359],[19.10777,50.14386],[19.0973,50.13916],[19.09656,50.12786],[19.06379,50.12786],[19.02985,50.14009],[19.03007,50.16177],[19.01909,50.16698],[19.00848,50.16707],[18.96329,50.1498],[18.92907,50.15008],[18.92915,50.15426],[18.91854,50.15419],[18.91878,50.20421],[18.90792,50.20429],[18.90808,50.21297],[18.88588,50.21314],[18.88639,50.24024],[18.90884,50.24006]]],terms_text:"Urząd Miasta Katowic"},{id:"Katowice-aerial_image",name:"Katowice: Orthophotomap (aerial image)",type:"wms",template:"http://mapserver.um.katowice.pl/services/ortowms/MapServer/WMSServer?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=2&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",zoomExtent:[0,23],polygon:[[[18.90884,50.24006],[18.90851,50.23542],[18.94279,50.23515],[18.94399,50.27138],[18.95469,50.27485],[18.95571,50.2894],[18.96692,50.29364],[18.98752,50.2848],[18.99888,50.2847],[18.99907,50.29368],[18.98892,50.29377],[18.98934,50.30244],[19.0094,50.30196],[19.03401,50.28842],[19.05533,50.30139],[19.07901,50.30087],[19.07908,50.29297],[19.12296,50.27784],[19.12267,50.25523],[19.11079,50.2428],[19.1098,50.17946],[19.12065,50.17936],[19.11957,50.14359],[19.10777,50.14386],[19.0973,50.13916],[19.09656,50.12786],[19.06379,50.12786],[19.02985,50.14009],[19.03007,50.16177],[19.01909,50.16698],[19.00848,50.16707],[18.96329,50.1498],[18.92907,50.15008],[18.92915,50.15426],[18.91854,50.15419],[18.91878,50.20421],[18.90792,50.20429],[18.90808,50.21297],[18.88588,50.21314],[18.88639,50.24024],[18.90884,50.24006]]],terms_text:"Urząd Miasta Katowic"},{id:"kelowna_2012",name:"Kelowna 2012",type:"tms",template:"http://{switch:a,b,c,d}.tile.paulnorman.ca/kelowna2012/{zoom}/{x}/{y}.png",endDate:"2012-05-14T00:00:00.000Z",startDate:"2012-05-13T00:00:00.000Z",zoomExtent:[9,20],polygon:[[[-119.58673,49.79281],[-119.54657,49.79281],[-119.54657,49.80138],[-119.53434,49.80138],[-119.53434,49.80473],[-119.52962,49.80473],[-119.52962,49.81196],[-119.51045,49.81196],[-119.51157,49.87443],[-119.51089,49.87449],[-119.51141,49.88433],[-119.51141,49.92218],[-119.49386,49.92235],[-119.49405,49.9313],[-119.48039,49.93175],[-119.48046,49.94075],[-119.46667,49.94099],[-119.46928,49.99137],[-119.45513,49.99161],[-119.45567,50.01212],[-119.44167,50.01239],[-119.44173,50.01363],[-119.42215,50.01404],[-119.4221,50.01193],[-119.41213,50.01217],[-119.41261,50.02169],[-119.41234,50.02169],[-119.41248,50.02508],[-119.41209,50.02508],[-119.4122,50.02708],[-119.41261,50.02707],[-119.41283,50.03219],[-119.39363,50.03264],[-119.39353,50.03078],[-119.37957,50.03101],[-119.37954,50.02876],[-119.37358,50.02886],[-119.37154,49.97936],[-119.35735,49.97936],[-119.35484,49.92561],[-119.32681,49.92572],[-119.32566,49.88041],[-119.31389,49.88065],[-119.31371,49.87717],[-119.31322,49.87722],[-119.31315,49.87497],[-119.31245,49.87491],[-119.31223,49.87236],[-119.31176,49.87233],[-119.3116,49.86961],[-119.31122,49.86942],[-119.31092,49.86324],[-119.31037,49.86327],[-119.30951,49.85124],[-119.31064,49.85123],[-119.31039,49.84626],[-119.32453,49.846],[-119.3246,49.84507],[-119.3367,49.84488],[-119.33675,49.84351],[-119.33794,49.84347],[-119.3378,49.83821],[-119.33836,49.8381],[-119.33837,49.83512],[-119.33909,49.83511],[-119.3388,49.83212],[-119.33915,49.83206],[-119.33917,49.82933],[-119.33946,49.82933],[-119.33959,49.82679],[-119.35001,49.82658],[-119.34937,49.81806],[-119.4047,49.81638],[-119.40457,49.8099],[-119.41016,49.8099],[-119.41029,49.80728],[-119.43195,49.80691],[-119.43226,49.7908],[-119.44598,49.79055],[-119.44529,49.78202],[-119.49674,49.78116],[-119.49661,49.77849],[-119.54184,49.77751],[-119.54159,49.77183],[-119.55603,49.77149],[-119.55612,49.77184],[-119.57157,49.77151],[-119.57162,49.77173],[-119.58192,49.77149],[-119.58201,49.77177],[-119.5923,49.77152],[-119.59234,49.77181],[-119.60038,49.7716],[-119.60119,49.78391],[-119.58644,49.78439],[-119.58673,49.79281]]],description:"High quality aerial imagery taken for the City of Kelowna"},{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",zoomExtent:[9,20],polygon:[[[-119.58673,49.79281],[-119.54657,49.79281],[-119.54657,49.80138],[-119.53434,49.80138],[-119.53434,49.80473],[-119.52962,49.80473],[-119.52962,49.81196],[-119.51045,49.81196],[-119.51157,49.87443],[-119.51089,49.87449],[-119.51141,49.88433],[-119.51141,49.92218],[-119.49386,49.92235],[-119.49405,49.9313],[-119.48039,49.93175],[-119.48046,49.94075],[-119.46667,49.94099],[-119.46928,49.99137],[-119.45513,49.99161],[-119.45567,50.01212],[-119.44167,50.01239],[-119.44173,50.01363],[-119.42215,50.01404],[-119.4221,50.01193],[-119.41213,50.01217],[-119.41261,50.02169],[-119.41234,50.02169],[-119.41248,50.02508],[-119.41209,50.02508],[-119.4122,50.02708],[-119.41261,50.02707],[-119.41283,50.03219],[-119.39363,50.03264],[-119.39353,50.03078],[-119.37957,50.03101],[-119.37954,50.02876],[-119.37358,50.02886],[-119.37154,49.97936],[-119.35735,49.97936],[-119.35484,49.92561],[-119.32681,49.92572],[-119.32566,49.88041],[-119.31389,49.88065],[-119.31371,49.87717],[-119.31322,49.87722],[-119.31315,49.87497],[-119.31245,49.87491],[-119.31223,49.87236],[-119.31176,49.87233],[-119.3116,49.86961],[-119.31122,49.86942],[-119.31092,49.86324],[-119.31037,49.86327],[-119.30951,49.85124],[-119.31064,49.85123],[-119.31039,49.84626],[-119.32453,49.846],[-119.3246,49.84507],[-119.3367,49.84488],[-119.33675,49.84351],[-119.33794,49.84347],[-119.3378,49.83821],[-119.33836,49.8381],[-119.33837,49.83512],[-119.33909,49.83511],[-119.3388,49.83212],[-119.33915,49.83206],[-119.33917,49.82933],[-119.33946,49.82933],[-119.33959,49.82679],[-119.35001,49.82658],[-119.34937,49.81806],[-119.4047,49.81638],[-119.40457,49.8099],[-119.41016,49.8099],[-119.41029,49.80728],[-119.43195,49.80691],[-119.43226,49.7908],[-119.44598,49.79055],[-119.44529,49.78202],[-119.49674,49.78116],[-119.49661,49.77849],[-119.54184,49.77751],[-119.54159,49.77183],[-119.55603,49.77149],[-119.55612,49.77184],[-119.57157,49.77151],[-119.57162,49.77173],[-119.58192,49.77149],[-119.58201,49.77177],[-119.5923,49.77152],[-119.59234,49.77181],[-119.60038,49.7716],[-119.60119,49.78391],[-119.58644,49.78439],[-119.58673,49.79281]]],overlay:true},{id:"kystverket-navigasjon",name:"Kystverket Navigational Aid overlay",type:"wms",template:"https://nfs.kystverket.no/arcgis/services/nfs/NFSSistOperativ/MapServer/WmsServer?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=17,16,15,14,12,10,9,8,7,4&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",zoomExtent:[12,19],polygon:[[[3.24857,56.08599],[2.60924,56.59428],[1.47215,58.45924],[1.77704,61.36251],[-0.49301,63.88665],[-13.73292,69.76376],[-12.43655,72.58741],[-5.11965,74.39626],[-3.60356,79.12998],[5.85587,82.34863],[34.98861,82.3401],[37.96874,78.62784],[37.99619,75.79673],[36.95796,73.68962],[32.07458,70.27336],[30.3511,69.56882],[21.46179,69.57098],[18.3032,68.36681],[14.47997,66.2558],[11.50266,63.28307],[11.50166,58.95444],[11.08246,58.96771],[10.03051,58.25173],[8.88244,57.69534],[3.24857,56.08599]]],terms_url:"http://kystverket.no/Maritim-infrastruktur/Fyr-og-merker-/",terms_text:"© Kystverket",description:"Beacons, buoys, lights and fairways maintained by the Norwegian Coastal Administration",icon:"https://upload.wikimedia.org/wikipedia/commons/thumb/6/68/Coat_of_arms_of_the_Norwegian_Coastal_Administration.svg/143px-Coat_of_arms_of_the_Norwegian_Coastal_Administration.svg.png",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",endDate:"2013-09-03T00:00:00.000Z",startDate:"2013-09-03T00:00:00.000Z",zoomExtent:[5,14],polygon:[[[-60.855,6.1765],[-60.47626,7.91883],[-62.16169,8.27787],[-62.53225,6.53755],[-60.855,6.1765]]],description:"Recent Landsat imagery"},{id:"osmse-ekonomiska",name:"Lantmäteriet Economic Map 1950–1980",type:"tms",template:"https://mapproxy.openstreetmap.se/tms/1.0.0/ek_EPSG3857/{zoom}/{x}/{-y}.jpeg",zoomExtent:[3,17],polygon:[[[12.71117,55.2666],[14.38109,55.29163],[19.65453,57.24934],[19.85228,59.75087],[17.77587,61.13794],[18.06151,62.27815],[20.97289,63.5779],[24.35668,65.60842],[23.96117,66.79191],[20.61034,66.45189],[17.13866,63.96632],[11.99706,61.03702],[12.29369,60.31607],[10.70067,58.81375],[12.71117,55.2666]]],terms_url:"https://www.lantmateriet.se",terms_text:"© Lantmäteriet",description:"Scan of \"Economic maps\" ca. 1950–1980",icon:"https://raw.githubusercontent.com/osmlab/editor-layer-index/gh-pages/sources/europe/se/lantmateriet_icon.png"},{id:"lantmateriet-orto1960",name:"Lantmäteriet Historic Orthophoto 1960",type:"wms",template:"https://api.lantmateriet.se/historiska-ortofoton/wms/v1/token/9b342b7d9f12d4ddb92277be9869d860/?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=OI.Histortho_60&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",zoomExtent:[5,19],polygon:[[[12.80182,55.19612],[14.22729,55.27286],[18.44604,56.69244],[19.74242,57.98481],[20.0061,59.5371],[19.08394,60.19308],[20.49499,63.2497],[24.25231,65.57437],[23.81835,67.92514],[23.23607,68.34655],[20.43456,69.17038],[18.08349,68.5644],[16.50145,67.88382],[14.43602,66.14275],[11.82128,63.30775],[12.20031,60.31063],[10.62377,58.5482],[12.64251,56.03062],[12.80182,55.19612]]],terms_url:"https://www.lantmateriet.se/",terms_text:"© Lantmäteriet, CC0",description:"Mosaic of Swedish orthophotos from the period 1955–1965. Older and younger pictures may occur.",icon:"https://raw.githubusercontent.com/osmlab/editor-layer-index/gh-pages/sources/europe/se/lantmateriet_icon.png"},{id:"lantmateriet-orto1975",name:"Lantmäteriet Historic Orthophoto 1975",type:"wms",template:"https://api.lantmateriet.se/historiska-ortofoton/wms/v1/token/9b342b7d9f12d4ddb92277be9869d860/?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=OI.Histortho_75&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",zoomExtent:[5,19],polygon:[[[12.80182,55.19612],[14.22729,55.27286],[18.44604,56.69244],[19.74242,57.98481],[20.0061,59.5371],[17.85131,60.87407],[14.74558,60.53889],[11.60239,59.56416],[10.51799,58.66559],[12.64251,56.03062],[12.80182,55.19612]]],terms_url:"https://www.lantmateriet.se/",terms_text:"© Lantmäteriet, CC0",description:"Mosaic of Swedish orthophotos from the period 1970–1980. Is under construction.",icon:"https://raw.githubusercontent.com/osmlab/editor-layer-index/gh-pages/sources/europe/se/lantmateriet_icon.png"},{id:"lantmateriet-topowebb",name:"Lantmäteriet Topographic Map",type:"tms",template:"https://api.lantmateriet.se/open/topowebb-ccby/v1/wmts/token/9b342b7d9f12d4ddb92277be9869d860/1.0.0/topowebb/default/3857/{zoom}/{y}/{x}.png",zoomExtent:[3,15],polygon:[[[12.80182,55.19612],[14.22729,55.27286],[18.44604,56.69244],[19.74242,57.98481],[20.0061,59.5371],[19.08394,60.19308],[20.49499,63.2497],[24.25231,65.57437],[23.81835,67.92514],[23.23607,68.34655],[20.43456,69.17038],[18.08349,68.5644],[16.50145,67.88382],[14.43602,66.14275],[11.82128,63.30775],[12.20031,60.31063],[10.62377,58.5482],[12.64251,56.03062],[12.80182,55.19612]]],terms_url:"https://www.lantmateriet.se/",terms_text:"© Lantmäteriet, CC0",description:"Topographic map of Sweden 1:50 000",icon:"https://raw.githubusercontent.com/osmlab/editor-layer-index/gh-pages/sources/europe/se/lantmateriet_icon.png"},{id:"lu.geoportail.opendata.ortholatest",name:"Latest available ortho geoportail.lu",type:"tms",template:"https://{switch:wmts1,wmts2}.geoportail.lu/opendata/wmts/ortho_latest/GLOBAL_WEBMERCATOR_4_V3/{zoom}/{x}/{y}.jpeg",endDate:"2017-06-22T00:00:00.000Z",startDate:"2017-06-14T00:00:00.000Z",zoomExtent:[0,20],polygon:[[[5.96175,50.17631],[6.02627,50.18496],[6.03318,50.16395],[6.06069,50.15536],[6.07668,50.15913],[6.07824,50.17255],[6.10176,50.17199],[6.1225,50.16437],[6.1201,50.15594],[6.1277,50.14993],[6.11323,50.13739],[6.12369,50.13719],[6.14093,50.1305],[6.13555,50.11899],[6.13808,50.10263],[6.13108,50.09964],[6.13547,50.09119],[6.12194,50.09059],[6.12634,50.07817],[6.13186,50.07348],[6.12117,50.064],[6.11444,50.06139],[6.11563,50.05817],[6.12361,50.06323],[6.13661,50.04178],[6.13034,50.02975],[6.14821,50.02307],[6.13868,50.01572],[6.13594,50.01485],[6.13138,50.01905],[6.13024,50.01819],[6.13934,50.01116],[6.1517,50.01058],[6.14546,49.99689],[6.13966,49.9994],[6.13852,49.99829],[6.14218,49.99535],[6.15023,49.99518],[6.15625,49.98867],[6.17305,49.98589],[6.17348,49.98344],[6.17035,49.98376],[6.16549,49.97115],[6.17151,49.96298],[6.1763,49.962],[6.17995,49.95386],[6.18339,49.9548],[6.17983,49.96307],[6.18331,49.9686],[6.19277,49.97158],[6.19978,49.95352],[6.20707,49.95672],[6.21269,49.9514],[6.22502,49.95039],[6.22044,49.94369],[6.22824,49.93726],[6.22635,49.92766],[6.21913,49.92354],[6.22986,49.92125],[6.23603,49.91355],[6.23187,49.91064],[6.22769,49.91062],[6.23229,49.9072],[6.23381,49.90028],[6.24692,49.89535],[6.25781,49.88724],[6.26301,49.88101],[6.27646,49.87725],[6.28113,49.87957],[6.29166,49.87548],[6.2977,49.86673],[6.30989,49.87107],[6.31532,49.8673],[6.31465,49.86057],[6.32361,49.85188],[6.32158,49.8409],[6.32741,49.83673],[6.33656,49.83998],[6.33937,49.8507],[6.36465,49.85164],[6.4022,49.82098],[6.42643,49.81629],[6.42807,49.81186],[6.43097,49.81129],[6.44161,49.81547],[6.44344,49.81233],[6.45366,49.81275],[6.46454,49.81975],[6.47057,49.82385],[6.49681,49.81277],[6.50669,49.80993],[6.51155,49.80238],[6.51485,49.80513],[6.5196,49.81446],[6.52981,49.81048],[6.53225,49.80686],[6.53083,49.80116],[6.50622,49.78899],[6.51917,49.78344],[6.51105,49.77422],[6.52056,49.76818],[6.52052,49.76134],[6.50373,49.75086],[6.50263,49.73298],[6.50727,49.72938],[6.51809,49.7242],[6.51642,49.72129],[6.51176,49.72016],[6.50479,49.725],[6.49891,49.72639],[6.49558,49.72443],[6.50712,49.71655],[6.50788,49.71215],[6.5046,49.71227],[6.42714,49.66237],[6.4399,49.66025],[6.44251,49.65591],[6.42178,49.61809],[6.39898,49.60094],[6.37941,49.59526],[6.37551,49.58809],[6.38443,49.5801],[6.38119,49.57509],[6.36909,49.5783],[6.35791,49.57166],[6.3849,49.55817],[6.38009,49.54856],[6.35855,49.53296],[6.35932,49.52481],[6.37076,49.50545],[6.37056,49.45732],[6.3334,49.46493],[6.32189,49.47244],[6.29503,49.47928],[6.28789,49.48379],[6.27191,49.49995],[6.24133,49.50693],[6.19669,49.50331],[6.17337,49.50577],[6.16086,49.50085],[6.1671,49.49006],[6.14018,49.48525],[6.12937,49.48803],[6.12725,49.47081],[6.1014,49.46726],[6.10483,49.45076],[6.08167,49.45417],[6.07722,49.46139],[6.05917,49.46306],[6.05222,49.46028],[6.04421,49.44553],[6.02529,49.44703],[6.02154,49.45127],[6.01574,49.44885],[5.99412,49.45301],[5.97657,49.44885],[5.97773,49.45955],[5.97232,49.46087],[5.96891,49.48202],[5.9616,49.49026],[5.91578,49.49835],[5.89033,49.4948],[5.86332,49.50006],[5.84897,49.50826],[5.84828,49.51397],[5.83641,49.51817],[5.83187,49.52639],[5.84308,49.53081],[5.83562,49.54114],[5.81625,49.53325],[5.8052,49.54272],[5.85943,49.57158],[5.86866,49.587],[5.86289,49.58525],[5.8511,49.58379],[5.84712,49.58961],[5.84565,49.5981],[5.8694,49.6106],[5.88182,49.63815],[5.89998,49.63907],[5.89934,49.66239],[5.85656,49.67628],[5.85628,49.68211],[5.8757,49.71118],[5.86481,49.72331],[5.84325,49.71822],[5.82191,49.72128],[5.82489,49.73767],[5.82073,49.74878],[5.78626,49.79079],[5.76517,49.78961],[5.75094,49.79094],[5.74159,49.82126],[5.74581,49.82435],[5.7372,49.83353],[5.74053,49.84142],[5.74701,49.84048],[5.74624,49.84783],[5.75399,49.84878],[5.74066,49.85152],[5.75229,49.85922],[5.74955,49.87554],[5.77567,49.87438],[5.77505,49.88057],[5.7346,49.89341],[5.73303,49.90285],[5.75783,49.91737],[5.76039,49.93252],[5.77073,49.93711],[5.76878,49.94239],[5.7688,49.96104],[5.78672,49.96816],[5.80524,49.96677],[5.80652,49.97321],[5.83129,49.97995],[5.83462,49.98656],[5.81806,49.99936],[5.81561,50.01437],[5.84792,50.02809],[5.86189,50.04581],[5.85087,50.0563],[5.85781,50.07186],[5.881,50.08069],[5.89196,50.12041],[5.95286,50.13384],[5.96175,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,icon:"https://www.geoportail.lu/static/img/lion.png"},{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",endDate:"2013-09-12T00:00:00.000Z",startDate:"2013-09-12T00:00:00.000Z",zoomExtent:[5,13],polygon:[[[-121.93555,47.78206],[-121.57206,48.64101],[-121.20155,49.48462],[-121.83755,49.60232],[-122.4767,49.71617],[-123.11891,49.82688],[-123.76023,49.93358],[-124.08877,49.08705],[-124.41289,48.22526],[-123.79277,48.11973],[-123.17279,48.01096],[-122.55355,47.89823],[-121.93555,47.78206]]],description:"Recent lower-resolution landsat imagery for southwest British Columbia"},{id:"Lausanne-2012",name:"Lausanne - Orthophoto technique 2012",type:"tms",template:"http://osmdata.asitvd.ch/tiles/lausanne2012/{zoom}/{x}/{y}.png",endDate:"2012-01-01T00:00:00.000Z",startDate:"2012-01-01T00:00:00.000Z",zoomExtent:[14,20],polygon:[[[6.66668,46.49441],[6.61637,46.49406],[6.61636,46.49836],[6.60135,46.49825],[6.60131,46.50227],[6.55923,46.50194],[6.55773,46.59687],[6.72895,46.59805],[6.7304,46.49004],[6.67702,46.48978],[6.67703,46.49011],[6.67345,46.49006],[6.67347,46.49041],[6.66672,46.49036],[6.66668,46.49441]]],terms_url:"http://carto.lausanne.ch/lausanne-gc/",terms_text:"Ville de Lausanne - Orthophoto technique 2012"},{id:"linkoping-orto",name:"Linköping Orthophoto",type:"wms",template:"http://kartan.linkoping.se/wms?servicename=wms_ortofoto&FORMAT=image/jpeg&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=Kommun_2010_25cm&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",zoomExtent:[13,20],polygon:[[[15.36884,58.6305],[15.41279,58.65623],[15.46635,58.6339],[15.54291,58.64408],[15.54119,58.60672],[15.58376,58.6414],[15.7592,58.55267],[15.76675,58.52006],[15.91438,58.51755],[16.08089,58.37148],[15.82718,58.30588],[15.84915,58.21449],[15.65861,58.15513],[15.56763,58.19134],[15.55939,58.14661],[15.50171,58.07679],[15.37777,58.05881],[15.28713,58.1031],[15.27203,58.13483],[15.35889,58.16455],[15.32387,58.38012],[15.24971,58.40027],[15.3582,58.47288],[15.36884,58.6305]]],terms_url:"https://www.linkoping.se/open/",terms_text:"© Linköping municipality",best:true,description:"Orthophotos from the municipality of Linköping 2010, open data",icon:"https://upload.wikimedia.org/wikipedia/commons/thumb/2/29/Linköping_vapen.svg/198px-Linköping_vapen.svg.png"},{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",zoomExtent:[0,21],polygon:[[[167.25037,-47.21957],[167.24487,-47.28016],[167.50305,-47.37975],[168.25012,-47.1561],[168.74451,-46.7963],[169.32678,-46.75492],[169.78271,-46.60417],[170.42542,-46.11133],[170.80444,-45.95115],[170.95276,-45.44086],[171.30981,-44.91036],[171.40869,-44.39062],[172.56226,-43.92955],[172.90283,-43.9691],[173.16101,-43.90977],[173.25989,-43.69568],[172.97424,-43.5366],[172.76001,-43.37711],[173.15002,-43.17714],[173.70483,-42.63396],[174.36401,-41.7836],[174.32007,-41.40978],[174.84741,-41.52914],[175.07263,-41.70573],[175.50659,-41.67291],[176.2262,-41.10833],[176.83044,-40.42604],[177.17102,-39.67337],[177.03918,-39.39375],[177.44568,-39.18118],[177.60498,-39.33005],[177.97852,-39.36828],[178.33557,-38.65978],[178.70911,-37.74466],[178.62671,-37.54458],[178.3136,-37.43125],[177.62146,-37.37889],[177.03918,-37.39635],[176.56128,-37.37016],[176.33606,-37.05956],[176.00647,-36.29742],[175.67688,-36.05354],[174.67163,-35.1783],[173.19397,-34.28445],[172.67761,-34.23451],[172.38647,-34.40238],[172.47986,-34.71904],[172.98523,-35.32185],[173.56201,-36.14231],[174.30908,-37.07709],[174.55627,-38.05242],[174.47937,-38.65549],[174.32556,-38.86537],[173.79822,-38.95941],[173.60596,-39.23225],[173.69934,-39.56335],[174.58923,-39.95607],[174.98474,-40.21664],[174.98474,-40.49292],[174.72107,-40.80549],[174.14978,-40.65147],[173.28186,-40.4344],[172.58972,-40.35073],[172.08435,-40.53468],[171.76575,-40.82628],[171.57349,-41.39742],[171.28235,-41.65239],[170.87585,-42.53284],[170.354,-42.87194],[168.27759,-43.92955],[167.6239,-44.47691],[166.55273,-45.38688],[166.27258,-45.91677],[166.48132,-46.22545],[167.67883,-46.47192],[167.25037,-47.21957]]],terms_url:"https://www.linz.govt.nz/data/licensing-and-using-data/attributing-elevation-or-aerial-imagery-data",terms_text:"Sourced from LINZ CC-BY 4.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",zoomExtent:[0,21],polygon:[[[167.25037,-47.21957],[167.24487,-47.28016],[167.50305,-47.37975],[168.25012,-47.1561],[168.74451,-46.7963],[169.32678,-46.75492],[169.78271,-46.60417],[170.42542,-46.11133],[170.80444,-45.95115],[170.95276,-45.44086],[171.30981,-44.91036],[171.40869,-44.39062],[172.56226,-43.92955],[172.90283,-43.9691],[173.16101,-43.90977],[173.25989,-43.69568],[172.97424,-43.5366],[172.76001,-43.37711],[173.15002,-43.17714],[173.70483,-42.63396],[174.36401,-41.7836],[174.32007,-41.40978],[174.84741,-41.52914],[175.07263,-41.70573],[175.50659,-41.67291],[176.2262,-41.10833],[176.83044,-40.42604],[177.17102,-39.67337],[177.03918,-39.39375],[177.44568,-39.18118],[177.60498,-39.33005],[177.97852,-39.36828],[178.33557,-38.65978],[178.70911,-37.74466],[178.62671,-37.54458],[178.3136,-37.43125],[177.62146,-37.37889],[177.03918,-37.39635],[176.56128,-37.37016],[176.33606,-37.05956],[176.00647,-36.29742],[175.67688,-36.05354],[174.67163,-35.1783],[173.19397,-34.28445],[172.67761,-34.23451],[172.38647,-34.40238],[172.47986,-34.71904],[172.98523,-35.32185],[173.56201,-36.14231],[174.30908,-37.07709],[174.55627,-38.05242],[174.47937,-38.65549],[174.32556,-38.86537],[173.79822,-38.95941],[173.60596,-39.23225],[173.69934,-39.56335],[174.58923,-39.95607],[174.98474,-40.21664],[174.98474,-40.49292],[174.72107,-40.80549],[174.14978,-40.65147],[173.28186,-40.4344],[172.58972,-40.35073],[172.08435,-40.53468],[171.76575,-40.82628],[171.57349,-41.39742],[171.28235,-41.65239],[170.87585,-42.53284],[170.354,-42.87194],[168.27759,-43.92955],[167.6239,-44.47691],[166.55273,-45.38688],[166.27258,-45.91677],[166.48132,-46.22545],[167.67883,-46.47192],[167.25037,-47.21957]]],terms_url:"https://data.linz.govt.nz/layer/2343-nz-mainland-topo50-gridless-maps",terms_text:"CC BY 4.0 Land Information New Zealand"},{id:"ORT10LT",name:"Lithuania - NŽT ORT10LT",type:"tms",template:"https://ort10lt.openmap.lt/g16/{zoom}/{x}/{y}.jpeg",endDate:"2016-01-01T00:00:00.000Z",startDate:"2010-01-01T00:00:00.000Z",zoomExtent:[4,18],polygon:[[[26.21384,55.85075],[26.38583,55.70453],[26.63036,55.68067],[26.62053,55.56892],[26.52422,55.50992],[26.55415,55.38883],[26.43993,55.34794],[26.79197,55.3212],[26.82913,55.27635],[26.74346,55.25399],[26.67648,55.15883],[26.46112,55.12856],[26.35774,55.15054],[26.22963,55.10732],[26.27138,55.07759],[26.20851,54.99741],[26.06191,54.94161],[25.85782,54.9276],[25.74298,54.81506],[25.76261,54.5769],[25.53194,54.34182],[25.67716,54.32381],[25.78573,54.23362],[25.78588,54.15506],[25.55508,54.14619],[25.51095,54.17503],[25.58967,54.22858],[25.51362,54.30785],[25.26893,54.27447],[25.0706,54.13363],[24.95737,54.17206],[24.81338,54.14486],[24.77902,54.09991],[24.87128,54.0349],[24.81957,53.99772],[24.68459,53.96211],[24.69787,54.01714],[24.62591,54.0105],[24.43426,53.90144],[24.35206,53.89679],[24.20161,53.97001],[23.96833,53.9267],[23.91302,53.96968],[23.77812,53.89892],[23.70977,53.93945],[23.53704,53.94307],[23.48224,53.98938],[23.52734,54.04735],[23.48586,54.15323],[23.38679,54.22484],[23.04212,54.31597],[23.01021,54.3828],[22.85469,54.4104],[22.792,54.36332],[22.70234,54.4529],[22.68386,54.58597],[22.74897,54.63198],[22.74297,54.72682],[22.88668,54.8135],[22.8204,54.91198],[22.6424,54.97134],[22.58924,55.07024],[22.0806,55.02448],[22.03241,55.0841],[21.91307,55.08168],[21.64919,55.18081],[21.50151,55.18682],[21.38437,55.2937],[21.27098,55.24501],[21.09836,55.25639],[20.94217,55.28245],[21.08635,55.56183],[21.03995,55.83636],[21.06403,56.06995],[21.20478,56.08117],[21.2308,56.16233],[21.5021,56.2955],[21.72359,56.31382],[21.83566,56.37162],[21.96954,56.37665],[22.0153,56.42428],[22.43727,56.4064],[22.68,56.35159],[22.91917,56.37902],[22.94668,56.41465],[23.09325,56.30464],[23.17034,56.36677],[23.30645,56.38305],[23.55717,56.33382],[23.7648,56.37332],[23.76669,56.32381],[24.019,56.32976],[24.12146,56.2489],[24.28574,56.30064],[24.45415,56.25816],[24.57947,56.28824],[24.62841,56.37533],[24.90238,56.48053],[25.12774,56.20591],[25.57714,56.18241],[25.67312,56.14937],[26.21384,55.85075]]],terms_url:"https://www.geoportal.lt",terms_text:"NŽT ORT10LT",best:true},{id:"mapbox_locator_overlay",name:"Locator Overlay",type:"tms",template:"https://{switch:a,b,c,d}.tiles.mapbox.com/v4/openstreetmap.map-inh76ba2/{zoom}/{x}/{y}.png?access_token=pk.eyJ1Ijoib3BlbnN0cmVldG1hcCIsImEiOiJjaml5MjVyb3MwMWV0M3hxYmUzdGdwbzE4In0.q548FjhsSJzvXsGlPsFxAQ",zoomExtent:[0,16],overzoom:false,terms_url:"https://www.mapbox.com/about/maps",terms_text:"Terms & Feedback","default":true,description:"Shows major features to help orient you.",overlay:true},{id:"Lodz-buildings",name:"Łódź: Buildings",type:"wms",template:"http://gis.mapa.lodz.pl/awiskts/services/WMS_publikowane/LODZ/MapServer/WMSServer?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=Budynki,Ulice,Adresy&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",polygon:[[[19.55046,51.68509],[19.53843,51.68518],[19.53858,51.68067],[19.50381,51.68085],[19.50351,51.68564],[19.48084,51.68589],[19.48063,51.6815],[19.43517,51.68168],[19.43517,51.67754],[19.41155,51.67791],[19.41214,51.68703],[19.37723,51.68739],[19.37723,51.69172],[19.34216,51.692],[19.34291,51.70544],[19.33132,51.70572],[19.33176,51.71474],[19.31988,51.71493],[19.32077,51.74612],[19.33206,51.74612],[19.33251,51.75513],[19.32107,51.75532],[19.32225,51.79108],[19.31052,51.79126],[19.31141,51.81387],[19.323,51.81359],[19.32389,51.82709],[19.33488,51.82718],[19.33473,51.84481],[19.39342,51.84444],[19.39342,51.84022],[19.42789,51.83985],[19.42834,51.85738],[19.4634,51.85701],[19.4634,51.86133],[19.47499,51.86133],[19.47529,51.86601],[19.52194,51.86509],[19.52238,51.85619],[19.568,51.85582],[19.56785,51.85105],[19.57944,51.85105],[19.57825,51.82397],[19.63649,51.82342],[19.63411,51.76488],[19.65759,51.7647],[19.65714,51.74676],[19.64496,51.74695],[19.64421,51.7152],[19.63337,51.7152],[19.63322,51.70167],[19.62059,51.70167],[19.62044,51.68868],[19.55032,51.68942],[19.55046,51.68509]]],terms_text:"Urząd Miasta Łodzi",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/pl/dOrthophotomap2017(aerialimage).png"},{id:"Lodz-2015",name:"Łódź: Orthophotomap 2015 (aerial image)",type:"wms",template:"http://gis.mapa.lodz.pl/awiskts/services/Ortofotomapa/Ortofotomapa/MapServer/WMSServer?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=0&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",endDate:"2015-01-01T00:00:00.000Z",startDate:"2015-01-01T00:00:00.000Z",zoomExtent:[0,22],polygon:[[[19.55046,51.68509],[19.53843,51.68518],[19.53858,51.68067],[19.50381,51.68085],[19.50351,51.68564],[19.48084,51.68589],[19.48063,51.6815],[19.43517,51.68168],[19.43517,51.67754],[19.41155,51.67791],[19.41214,51.68703],[19.37723,51.68739],[19.37723,51.69172],[19.34216,51.692],[19.34291,51.70544],[19.33132,51.70572],[19.33176,51.71474],[19.31988,51.71493],[19.32077,51.74612],[19.33206,51.74612],[19.33251,51.75513],[19.32107,51.75532],[19.32225,51.79108],[19.31052,51.79126],[19.31141,51.81387],[19.323,51.81359],[19.32389,51.82709],[19.33488,51.82718],[19.33473,51.84481],[19.39342,51.84444],[19.39342,51.84022],[19.42789,51.83985],[19.42834,51.85738],[19.4634,51.85701],[19.4634,51.86133],[19.47499,51.86133],[19.47529,51.86601],[19.52194,51.86509],[19.52238,51.85619],[19.568,51.85582],[19.56785,51.85105],[19.57944,51.85105],[19.57825,51.82397],[19.63649,51.82342],[19.63411,51.76488],[19.65759,51.7647],[19.65714,51.74676],[19.64496,51.74695],[19.64421,51.7152],[19.63337,51.7152],[19.63322,51.70167],[19.62059,51.70167],[19.62044,51.68868],[19.55032,51.68942],[19.55046,51.68509]]],terms_text:"Urząd Miasta Łodzi",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/pl/dOrthophotomap2017(aerialimage).png"},{id:"Lodz-2017",name:"Łódź: Orthophotomap 2017 (aerial image)",type:"wms",template:"https://mapa.lodz.pl/3/services/OGC/Ortofotomapa/MapServer/WmsServer?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=0&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",endDate:"2017-01-01T00:00:00.000Z",startDate:"2017-01-01T00:00:00.000Z",zoomExtent:[0,22],polygon:[[[19.55046,51.68509],[19.53843,51.68518],[19.53858,51.68067],[19.50381,51.68085],[19.50351,51.68564],[19.48084,51.68589],[19.48063,51.6815],[19.43517,51.68168],[19.43517,51.67754],[19.41155,51.67791],[19.41214,51.68703],[19.37723,51.68739],[19.37723,51.69172],[19.34216,51.692],[19.34291,51.70544],[19.33132,51.70572],[19.33176,51.71474],[19.31988,51.71493],[19.32077,51.74612],[19.33206,51.74612],[19.33251,51.75513],[19.32107,51.75532],[19.32225,51.79108],[19.31052,51.79126],[19.31141,51.81387],[19.323,51.81359],[19.32389,51.82709],[19.33488,51.82718],[19.33473,51.84481],[19.39342,51.84444],[19.39342,51.84022],[19.42789,51.83985],[19.42834,51.85738],[19.4634,51.85701],[19.4634,51.86133],[19.47499,51.86133],[19.47529,51.86601],[19.52194,51.86509],[19.52238,51.85619],[19.568,51.85582],[19.56785,51.85105],[19.57944,51.85105],[19.57825,51.82397],[19.63649,51.82342],[19.63411,51.76488],[19.65759,51.7647],[19.65714,51.74676],[19.64496,51.74695],[19.64421,51.7152],[19.63337,51.7152],[19.63322,51.70167],[19.62059,51.70167],[19.62044,51.68868],[19.55032,51.68942],[19.55046,51.68509]]],terms_text:"Urząd Miasta Łodzi",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/pl/dOrthophotomap2017(aerialimage).png"},{id:"Loire_Atlantique-Orthophotos-2012",name:"Loire-Atlantique - Orthophotos 2012 - 20 cm",type:"tms",template:"http://{switch:a,b,c,d,e,f,g,h}.tiles.cg44.makina-corpus.net/ortho-2012/{zoom}/{x}/{-y}.jpg",endDate:"2012-01-01T00:00:00.000Z",startDate:"2012-01-01T00:00:00.000Z",zoomExtent:[0,19],polygon:[[[-1.48638,46.87691],[-1.54437,46.84873],[-1.73468,46.87246],[-1.89276,46.94234],[-1.95475,46.98084],[-2.07067,47.08521],[-2.2678,47.12656],[-2.22627,47.17124],[-2.19217,47.16914],[-2.19341,47.25546],[-2.29694,47.22769],[-2.41658,47.25336],[-2.54862,47.28575],[-2.63913,47.41678],[-2.50573,47.50812],[-2.31063,47.53021],[-2.24836,47.52384],[-2.23223,47.51499],[-2.12109,47.54674],[-2.11783,47.60126],[-2.1001,47.61123],[-2.09981,47.62005],[-2.11141,47.62873],[-2.10055,47.65141],[-2.08121,47.66578],[-1.98016,47.70751],[-1.83077,47.72419],[-1.67455,47.72544],[-1.63735,47.77463],[-1.49601,47.81752],[-1.49911,47.84166],[-1.38133,47.84415],[-1.346,47.81086],[-1.23007,47.78587],[-1.21643,47.75838],[-1.22635,47.73628],[-1.21086,47.7317],[-1.18668,47.73462],[-1.15196,47.69332],[-1.13151,47.63654],[-1.09121,47.6332],[-0.99265,47.6027],[-0.98459,47.58598],[-1.0317,47.55001],[-1.13585,47.55628],[-1.13275,47.5161],[-1.0317,47.51778],[-0.94863,47.50103],[-0.93686,47.47715],[-0.93376,47.43859],[-0.9009,47.39874],[-0.92694,47.37482],[-0.97157,47.35845],[-1.28339,47.32736],[-1.23379,47.26093],[-1.20032,47.26935],[-1.16498,47.24957],[-1.14143,47.1763],[-1.1563,47.15818],[-1.20652,47.12402],[-1.20838,47.10968],[-1.15568,47.10504],[-1.14081,47.08056],[-1.09431,47.0717],[-1.09989,47.03199],[-1.14453,47.01636],[-1.21582,47.02904],[-1.26727,47.06325],[-1.28524,47.02185],[-1.34972,47.02397],[-1.33918,46.969],[-1.3491,46.94446],[-1.45014,46.91186],[-1.47504,46.9176],[-1.48775,46.93063],[-1.49235,46.98433],[-1.48644,46.99943],[-1.49213,47.02722],[-1.52764,47.00541],[-1.52961,46.97252],[-1.50507,46.94439],[-1.50222,46.92973],[-1.51142,46.91371],[-1.48622,46.89724],[-1.48638,46.87691]]],terms_url:"http://data2.loire-atlantique.fr/licences/",terms_text:"Département de Loire-Atlantique"},{id:"Loire_Atlantique-Orthophotos-2016",name:"Loire-Atlantique - Orthophotos 2016 - 10 cm",type:"wms",template:"https://wms-vuduciel2.makina-corpus.net/geoserver/wms?SERVICE=WMS&FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=cg44:ortho44-2016&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",endDate:"2016-01-01T00:00:00.000Z",startDate:"2016-01-01T00:00:00.000Z",zoomExtent:[0,20],polygon:[[[-1.48638,46.87691],[-1.54437,46.84873],[-1.73468,46.87246],[-1.89276,46.94234],[-1.95475,46.98084],[-2.07067,47.08521],[-2.2678,47.12656],[-2.22627,47.17124],[-2.19217,47.16914],[-2.19341,47.25546],[-2.29694,47.22769],[-2.41658,47.25336],[-2.54862,47.28575],[-2.63913,47.41678],[-2.50573,47.50812],[-2.31063,47.53021],[-2.24836,47.52384],[-2.23223,47.51499],[-2.12109,47.54674],[-2.11783,47.60126],[-2.1001,47.61123],[-2.09981,47.62005],[-2.11141,47.62873],[-2.10055,47.65141],[-2.08121,47.66578],[-1.98016,47.70751],[-1.83077,47.72419],[-1.67455,47.72544],[-1.63735,47.77463],[-1.49601,47.81752],[-1.49911,47.84166],[-1.38133,47.84415],[-1.346,47.81086],[-1.23007,47.78587],[-1.21643,47.75838],[-1.22635,47.73628],[-1.21086,47.7317],[-1.18668,47.73462],[-1.15196,47.69332],[-1.13151,47.63654],[-1.09121,47.6332],[-0.99265,47.6027],[-0.98459,47.58598],[-1.0317,47.55001],[-1.13585,47.55628],[-1.13275,47.5161],[-1.0317,47.51778],[-0.94863,47.50103],[-0.93686,47.47715],[-0.93376,47.43859],[-0.9009,47.39874],[-0.92694,47.37482],[-0.97157,47.35845],[-1.28339,47.32736],[-1.23379,47.26093],[-1.20032,47.26935],[-1.16498,47.24957],[-1.14143,47.1763],[-1.1563,47.15818],[-1.20652,47.12402],[-1.20838,47.10968],[-1.15568,47.10504],[-1.14081,47.08056],[-1.09431,47.0717],[-1.09989,47.03199],[-1.14453,47.01636],[-1.21582,47.02904],[-1.26727,47.06325],[-1.28524,47.02185],[-1.34972,47.02397],[-1.33918,46.969],[-1.3491,46.94446],[-1.45014,46.91186],[-1.47504,46.9176],[-1.48775,46.93063],[-1.49235,46.98433],[-1.48644,46.99943],[-1.49213,47.02722],[-1.52764,47.00541],[-1.52961,46.97252],[-1.50507,46.94439],[-1.50222,46.92973],[-1.51142,46.91371],[-1.48622,46.89724],[-1.48638,46.87691]]],terms_url:"http://data2.loire-atlantique.fr/licences/",terms_text:"© Loire-Atlantique ouverture des données publiques"},{id:"Lombardia-Italy-CTR-DBT",name:"Lombardia - Italy (CTR DBT)",type:"wms",template:"https://www.cartografia.servizirl.it/arcgis/services/wms/ctr_wms/MapServer/WmsServer?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=Sfondo%20C.T.R.%2010000&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[8.4816,45.28938],[8.63085,45.01372],[8.78009,44.98189],[8.86775,45.02712],[9.07148,44.80063],[9.14966,44.79055],[9.19467,44.67106],[9.31549,44.65758],[9.36997,44.698],[9.37945,44.82752],[9.33207,44.91483],[9.41025,45.03716],[9.78692,45.04386],[9.78692,45.00032],[9.93853,45.002],[9.93379,45.08903],[10.00013,45.09071],[10.00013,44.99697],[10.20149,45.002],[10.20149,44.95004],[10.40523,44.9534],[10.40523,44.90476],[10.49288,44.90308],[10.49288,44.8628],[10.6516,44.85776],[10.64686,44.90308],[11.35282,44.89469],[11.35519,44.93663],[11.45706,44.93328],[11.44758,44.97351],[11.3623,45.00032],[11.35282,45.09238],[11.25806,45.09572],[11.25806,45.13752],[11.16094,45.14253],[11.16094,45.18262],[11.05196,45.19097],[11.05196,45.23436],[10.9572,45.23269],[10.9572,45.28605],[10.8577,45.28438],[10.85534,45.32271],[10.74636,45.32937],[10.75347,45.47408],[10.64686,45.48073],[10.60301,45.51074],[10.57636,45.47379],[10.53549,45.50036],[10.59116,45.53148],[10.61666,45.61304],[10.87429,45.84001],[10.82217,45.85982],[10.67529,45.85817],[10.57342,45.8103],[10.58624,46.00773],[10.5016,46.01596],[10.59325,46.11529],[10.60896,46.35583],[10.65634,46.38688],[10.64686,46.46037],[10.4147,46.57285],[10.32705,46.56797],[10.25124,46.65422],[10.07357,46.62494],[10.02382,46.53212],[10.02855,46.43588],[10.07357,46.39832],[10.12095,46.39669],[10.0783,46.32802],[10.14464,46.26582],[10.10436,46.24781],[9.97407,46.40812],[9.71111,46.3689],[9.68742,46.32312],[9.61872,46.30675],[9.55712,46.32475],[9.50264,46.39015],[9.47895,46.5256],[9.25626,46.51582],[9.22546,46.44078],[9.27284,46.34438],[9.17098,46.19044],[9.04305,46.12808],[9.062,46.09195],[8.97435,46.04593],[8.98856,46.00152],[8.93882,45.97354],[9.04068,45.8961],[9.01936,45.84827],[8.84879,46.0081],[8.89854,46.07059],[8.8251,46.11823],[8.70902,46.11659],[8.67823,46.07552],[8.7185,46.01468],[8.55504,45.90434],[8.59768,45.83836],[8.53372,45.79378],[8.6877,45.49235],[8.78009,45.41591],[8.68533,45.37931],[8.71139,45.34103],[8.69481,45.32104],[8.62848,45.37765],[8.5124,45.35768],[8.4816,45.28938]]],terms_url:"https://www.dati.gov.it/content/italian-open-data-license-v20",terms_text:"CTR DBT 10000 Regione Lombardia"},{id:"Lombardia-Italy-CTR",name:"Lombardia - Italy (CTR)",type:"wms",template:"https://www.cartografia.regione.lombardia.it/ArcGIS10/services/wms/ctr_wms/MapServer/WMSServer?STYLES=&FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&Layers=0&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[8.4816,45.28938],[8.63085,45.01372],[8.78009,44.98189],[8.86775,45.02712],[9.07148,44.80063],[9.14966,44.79055],[9.19467,44.67106],[9.31549,44.65758],[9.36997,44.698],[9.37945,44.82752],[9.33207,44.91483],[9.41025,45.03716],[9.78692,45.04386],[9.78692,45.00032],[9.93853,45.002],[9.93379,45.08903],[10.00013,45.09071],[10.00013,44.99697],[10.20149,45.002],[10.20149,44.95004],[10.40523,44.9534],[10.40523,44.90476],[10.49288,44.90308],[10.49288,44.8628],[10.6516,44.85776],[10.64686,44.90308],[11.35282,44.89469],[11.35519,44.93663],[11.45706,44.93328],[11.44758,44.97351],[11.3623,45.00032],[11.35282,45.09238],[11.25806,45.09572],[11.25806,45.13752],[11.16094,45.14253],[11.16094,45.18262],[11.05196,45.19097],[11.05196,45.23436],[10.9572,45.23269],[10.9572,45.28605],[10.8577,45.28438],[10.85534,45.32271],[10.74636,45.32937],[10.75347,45.47408],[10.64686,45.48073],[10.60301,45.51074],[10.57636,45.47379],[10.53549,45.50036],[10.59116,45.53148],[10.61666,45.61304],[10.87429,45.84001],[10.82217,45.85982],[10.67529,45.85817],[10.57342,45.8103],[10.58624,46.00773],[10.5016,46.01596],[10.59325,46.11529],[10.60896,46.35583],[10.65634,46.38688],[10.64686,46.46037],[10.4147,46.57285],[10.32705,46.56797],[10.25124,46.65422],[10.07357,46.62494],[10.02382,46.53212],[10.02855,46.43588],[10.07357,46.39832],[10.12095,46.39669],[10.0783,46.32802],[10.14464,46.26582],[10.10436,46.24781],[9.97407,46.40812],[9.71111,46.3689],[9.68742,46.32312],[9.61872,46.30675],[9.55712,46.32475],[9.50264,46.39015],[9.47895,46.5256],[9.25626,46.51582],[9.22546,46.44078],[9.27284,46.34438],[9.17098,46.19044],[9.04305,46.12808],[9.062,46.09195],[8.97435,46.04593],[8.98856,46.00152],[8.93882,45.97354],[9.04068,45.8961],[9.01936,45.84827],[8.84879,46.0081],[8.89854,46.07059],[8.8251,46.11823],[8.70902,46.11659],[8.67823,46.07552],[8.7185,46.01468],[8.55504,45.90434],[8.59768,45.83836],[8.53372,45.79378],[8.6877,45.49235],[8.78009,45.41591],[8.68533,45.37931],[8.71139,45.34103],[8.69481,45.32104],[8.62848,45.37765],[8.5124,45.35768],[8.4816,45.28938]]],terms_url:"https://www.dati.gov.it/content/italian-open-data-license-v20",terms_text:"Regione Lombardia - Infrastruttura per l'informazione territoriale"},{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}",endDate:"2011-01-01T00:00:00.000Z",startDate:"2011-01-01T00:00:00.000Z",zoomExtent:[0,19],polygon:[[[-51.10903,-23.39275],[-51.11015,-23.39112],[-51.11198,-23.3896],[-51.11358,-23.38977],[-51.121,-23.38593],[-51.12225,-23.38511],[-51.12483,-23.3835],[-51.12538,-23.38187],[-51.12482,-23.3777],[-51.12446,-23.37505],[-51.12437,-23.3723],[-51.12244,-23.37033],[-51.12302,-23.36643],[-51.12856,-23.36548],[-51.12832,-23.35884],[-51.12477,-23.35476],[-51.12703,-23.35091],[-51.12412,-23.3468],[-51.12025,-23.34781],[-51.11765,-23.33969],[-51.11265,-23.34129],[-51.1094,-23.33489],[-51.10756,-23.33409],[-51.10486,-23.33398],[-51.10253,-23.33419],[-51.09987,-23.33102],[-51.09801,-23.32936],[-51.09999,-23.32831],[-51.10323,-23.32532],[-51.10473,-23.32319],[-51.10466,-23.32129],[-51.10515,-23.31844],[-51.10636,-23.31575],[-51.10661,-23.31467],[-51.1105,-23.31167],[-51.11158,-23.30842],[-51.0995,-23.30947],[-51.0974,-23.30863],[-51.09512,-23.30745],[-51.09202,-23.30494],[-51.09036,-23.30371],[-51.09205,-23.29875],[-51.09269,-23.2975],[-51.09408,-23.29295],[-51.10074,-23.29332],[-51.10102,-23.28871],[-51.10068,-23.28837],[-51.10085,-23.28778],[-51.09938,-23.28664],[-51.09632,-23.27791],[-51.10285,-23.27302],[-51.10836,-23.27034],[-51.1131,-23.2684],[-51.1316,-23.26534],[-51.13188,-23.26201],[-51.13173,-23.25506],[-51.1329,-23.25468],[-51.13296,-23.25075],[-51.13474,-23.25127],[-51.13534,-23.25133],[-51.13517,-23.24359],[-51.13535,-23.24118],[-51.13752,-23.24219],[-51.13885,-23.2435],[-51.14109,-23.24521],[-51.14717,-23.24318],[-51.14761,-23.23828],[-51.14908,-23.23588],[-51.14977,-23.23681],[-51.15139,-23.23854],[-51.15289,-23.23884],[-51.15384,-23.23895],[-51.1582,-23.23814],[-51.16045,-23.23816],[-51.16035,-23.24658],[-51.15912,-23.24783],[-51.16131,-23.24777],[-51.16659,-23.24594],[-51.17193,-23.24582],[-51.17205,-23.24956],[-51.17424,-23.2484],[-51.17514,-23.24932],[-51.17686,-23.24816],[-51.17947,-23.25169],[-51.18135,-23.25381],[-51.18274,-23.25363],[-51.18379,-23.25326],[-51.18496,-23.2533],[-51.18627,-23.25215],[-51.18665,-23.24748],[-51.19118,-23.24914],[-51.19142,-23.25286],[-51.19369,-23.25278],[-51.19384,-23.26074],[-51.20097,-23.26055],[-51.20127,-23.2426],[-51.20994,-23.24278],[-51.2109,-23.26988],[-51.21969,-23.27222],[-51.22597,-23.27453],[-51.22934,-23.2786],[-51.23452,-23.2816],[-51.23498,-23.28325],[-51.23507,-23.28544],[-51.23371,-23.2859],[-51.23216,-23.28802],[-51.2287,-23.29229],[-51.2274,-23.2946],[-51.22679,-23.29548],[-51.2256,-23.29657],[-51.22393,-23.29721],[-51.22048,-23.30073],[-51.21864,-23.3013],[-51.21668,-23.30212],[-51.21424,-23.30441],[-51.21097,-23.30697],[-51.22328,-23.3183],[-51.22439,-23.31459],[-51.22521,-23.31289],[-51.22512,-23.31258],[-51.22521,-23.31251],[-51.22553,-23.31253],[-51.22595,-23.31239],[-51.22617,-23.31183],[-51.22936,-23.31489],[-51.22802,-23.31661],[-51.22789,-23.31902],[-51.22767,-23.32023],[-51.22723,-23.32151],[-51.22739,-23.32223],[-51.22725,-23.32285],[-51.23033,-23.32558],[-51.23046,-23.32671],[-51.22954,-23.32789],[-51.22916,-23.3305],[-51.22929,-23.33178],[-51.22681,-23.33447],[-51.22602,-23.33657],[-51.22473,-23.33839],[-51.2221,-23.34023],[-51.22257,-23.34196],[-51.22381,-23.34339],[-51.22384,-23.34531],[-51.22441,-23.347],[-51.22454,-23.34829],[-51.22404,-23.34968],[-51.22351,-23.35011],[-51.22382,-23.35077],[-51.22305,-23.35174],[-51.2226,-23.35296],[-51.22587,-23.35481],[-51.2265,-23.36706],[-51.22354,-23.36915],[-51.22367,-23.37968],[-51.22038,-23.38163],[-51.21647,-23.3817],[-51.21416,-23.37995],[-51.20928,-23.37395],[-51.20738,-23.36814],[-51.20629,-23.36723],[-51.20472,-23.36627],[-51.19823,-23.36668],[-51.19297,-23.36651],[-51.18986,-23.36544],[-51.18806,-23.36464],[-51.18718,-23.36453],[-51.1858,-23.36374],[-51.18304,-23.36359],[-51.18071,-23.36376],[-51.17907,-23.36158],[-51.17764,-23.35836],[-51.16684,-23.35626],[-51.16614,-23.35854],[-51.16476,-23.36039],[-51.16077,-23.35922],[-51.15983,-23.3666],[-51.16204,-23.36861],[-51.16276,-23.37416],[-51.15845,-23.3758],[-51.15505,-23.37631],[-51.15396,-23.37903],[-51.15299,-23.38105],[-51.15119,-23.38208],[-51.14917,-23.38251],[-51.14722,-23.38216],[-51.14518,-23.38259],[-51.1441,-23.38376],[-51.14512,-23.38808],[-51.1418,-23.3894],[-51.14031,-23.3888],[-51.14068,-23.39161],[-51.14127,-23.39354],[-51.14094,-23.39443],[-51.14046,-23.39536],[-51.13939,-23.3951],[-51.13739,-23.39315],[-51.13609,-23.3898],[-51.13429,-23.38976],[-51.13216,-23.39007],[-51.13172,-23.39286],[-51.12259,-23.38864],[-51.12228,-23.39166],[-51.11883,-23.39317],[-51.11568,-23.39335],[-51.10903,-23.39275]],[[-51.13829,-23.41601],[-51.13331,-23.41867],[-51.13209,-23.41644],[-51.13002,-23.41829],[-51.12869,-23.41901],[-51.12824,-23.42103],[-51.12696,-23.42186],[-51.12533,-23.42269],[-51.12445,-23.42097],[-51.12151,-23.42411],[-51.12063,-23.42327],[-51.11971,-23.42312],[-51.11977,-23.42157],[-51.1188,-23.42155],[-51.11643,-23.42084],[-51.11943,-23.41917],[-51.11787,-23.41678],[-51.11655,-23.41731],[-51.1157,-23.4157],[-51.11512,-23.41309],[-51.11908,-23.41111],[-51.1196,-23.4117],[-51.12052,-23.41489],[-51.12148,-23.41714],[-51.12309,-23.41863],[-51.12755,-23.41654],[-51.12803,-23.4174],[-51.1312,-23.41557],[-51.1308,-23.41477],[-51.13279,-23.41264],[-51.13522,-23.41106],[-51.13586,-23.41096],[-51.13682,-23.41119],[-51.13721,-23.41158],[-51.1373,-23.41324],[-51.13743,-23.41471],[-51.13829,-23.41601]],[[-51.18929,-23.61469],[-51.18869,-23.61385],[-51.18818,-23.61339],[-51.18731,-23.61302],[-51.18629,-23.61314],[-51.18402,-23.61396],[-51.18349,-23.61397],[-51.18183,-23.61284],[-51.1814,-23.61344],[-51.18063,-23.61314],[-51.18001,-23.61409],[-51.17866,-23.61329],[-51.18065,-23.6106],[-51.17972,-23.61018],[-51.18062,-23.60849],[-51.18212,-23.6085],[-51.18261,-23.60775],[-51.1832,-23.60804],[-51.18415,-23.60628],[-51.18511,-23.60666],[-51.18649,-23.6047],[-51.18902,-23.6061],[-51.18821,-23.60742],[-51.18919,-23.60802],[-51.1889,-23.60953],[-51.18962,-23.60993],[-51.19119,-23.61119],[-51.19015,-23.61245],[-51.19054,-23.61276],[-51.19029,-23.61378],[-51.18929,-23.61469]],[[-51.08006,-23.52984],[-51.07962,-23.52205],[-51.08468,-23.52194],[-51.08582,-23.52404],[-51.08589,-23.52704],[-51.08579,-23.52777],[-51.0853,-23.52806],[-51.08514,-23.52857],[-51.08512,-23.52982],[-51.08471,-23.53024],[-51.08343,-23.53024],[-51.0833,-23.52978],[-51.08006,-23.52984]]],terms_url:"http://siglon.londrina.pr.gov.br",terms_text:"Prefeitura do Londrinas, PR"},{id:"LPI_NSW_Administrative_Boundaries_County",name:"LPI NSW Administrative Boundaries County",type:"wms",template:"https://maps.six.nsw.gov.au/arcgis/services/public/NSW_Administrative_Boundaries/MapServer/WMSServer?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetMap&CRS={proj}&BBOX={bbox}&WIDTH={width}&HEIGHT={height}&LAYERS=4&STYLES=&FORMAT=image/png32&DPI=96&MAP_RESOLUTION=96&FORMAT_OPTIONS=dpi:96&TRANSPARENT=TRUE",projection:"EPSG:3857",zoomExtent:[1,21],polygon:[[[159.00339,-31.48767],[159.03789,-31.70558],[159.31098,-31.85952],[159.37278,-31.77892],[159.17443,-31.4374],[159.00339,-31.48767]],[[140.99865,-28.99893],[148.9452,-28.99487],[149.48562,-28.5615],[150.29914,-28.53373],[151.0954,-28.71792],[151.39436,-28.97978],[151.98941,-28.73557],[151.92904,-28.49836],[152.49246,-28.2353],[153.57907,-28.14156],[153.69692,-28.64983],[153.25847,-30.97354],[152.75437,-32.50849],[151.90879,-33.05535],[151.25834,-34.38081],[151.01442,-35.11568],[150.46154,-36.1203],[150.41275,-36.61786],[149.97847,-37.507],[148.20135,-36.80566],[148.07918,-36.81716],[147.88542,-36.09019],[147.69029,-36.04418],[146.82844,-36.18868],[145.23484,-35.98499],[144.84457,-36.21492],[144.51935,-36.1296],[143.20218,-35.13174],[142.47856,-34.81194],[140.9937,-34.07017],[141.0026,-34.01974],[140.99865,-28.99893]]],terms_url:"http://spatialservices.finance.nsw.gov.au/mapping_and_imagery/lpi_web_services",terms_text:"© Land and Property Information 2017",overlay:true},{id:"LPI_NSW_Administrative_Boundaries_LGA",name:"LPI NSW Administrative Boundaries LGA",type:"wms",template:"https://maps.six.nsw.gov.au/arcgis/services/public/NSW_Administrative_Boundaries/MapServer/WMSServer?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetMap&CRS={proj}&BBOX={bbox}&WIDTH={width}&HEIGHT={height}&LAYERS=6&STYLES=&FORMAT=image/png32&DPI=96&MAP_RESOLUTION=96&FORMAT_OPTIONS=dpi:96&TRANSPARENT=TRUE",projection:"EPSG:3857",zoomExtent:[1,21],polygon:[[[159.00339,-31.48767],[159.03789,-31.70558],[159.31098,-31.85952],[159.37278,-31.77892],[159.17443,-31.4374],[159.00339,-31.48767]],[[140.99865,-28.99893],[148.9452,-28.99487],[149.48562,-28.5615],[150.29914,-28.53373],[151.0954,-28.71792],[151.39436,-28.97978],[151.98941,-28.73557],[151.92904,-28.49836],[152.49246,-28.2353],[153.57907,-28.14156],[153.69692,-28.64983],[153.25847,-30.97354],[152.75437,-32.50849],[151.90879,-33.05535],[151.25834,-34.38081],[151.01442,-35.11568],[150.46154,-36.1203],[150.41275,-36.61786],[149.97847,-37.507],[148.20135,-36.80566],[148.07918,-36.81716],[147.88542,-36.09019],[147.69029,-36.04418],[146.82844,-36.18868],[145.23484,-35.98499],[144.84457,-36.21492],[144.51935,-36.1296],[143.20218,-35.13174],[142.47856,-34.81194],[140.9937,-34.07017],[141.0026,-34.01974],[140.99865,-28.99893]]],terms_url:"http://spatialservices.finance.nsw.gov.au/mapping_and_imagery/lpi_web_services",terms_text:"© Land and Property Information 2017",overlay:true},{id:"LPI_NSW_Administrative_Boundaries_NPWS_Reserve",name:"LPI NSW Administrative Boundaries NPWS Reserve",type:"wms",template:"https://maps.six.nsw.gov.au/arcgis/services/public/NSW_Administrative_Boundaries/MapServer/WMSServer?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetMap&CRS={proj}&BBOX={bbox}&WIDTH={width}&HEIGHT={height}&LAYERS=1&STYLES=&FORMAT=image/png32&DPI=96&MAP_RESOLUTION=96&FORMAT_OPTIONS=dpi:96&TRANSPARENT=TRUE",projection:"EPSG:3857",zoomExtent:[1,21],polygon:[[[159.00339,-31.48767],[159.03789,-31.70558],[159.31098,-31.85952],[159.37278,-31.77892],[159.17443,-31.4374],[159.00339,-31.48767]],[[140.99865,-28.99893],[148.9452,-28.99487],[149.48562,-28.5615],[150.29914,-28.53373],[151.0954,-28.71792],[151.39436,-28.97978],[151.98941,-28.73557],[151.92904,-28.49836],[152.49246,-28.2353],[153.57907,-28.14156],[153.69692,-28.64983],[153.25847,-30.97354],[152.75437,-32.50849],[151.90879,-33.05535],[151.25834,-34.38081],[151.01442,-35.11568],[150.46154,-36.1203],[150.41275,-36.61786],[149.97847,-37.507],[148.20135,-36.80566],[148.07918,-36.81716],[147.88542,-36.09019],[147.69029,-36.04418],[146.82844,-36.18868],[145.23484,-35.98499],[144.84457,-36.21492],[144.51935,-36.1296],[143.20218,-35.13174],[142.47856,-34.81194],[140.9937,-34.07017],[141.0026,-34.01974],[140.99865,-28.99893]]],terms_url:"http://spatialservices.finance.nsw.gov.au/mapping_and_imagery/lpi_web_services",terms_text:"© Land and Property Information 2017",overlay:true},{id:"LPI_NSW_Administrative_Boundaries_Parish",name:"LPI NSW Administrative Boundaries Parish",type:"wms",template:"https://maps.six.nsw.gov.au/arcgis/services/public/NSW_Administrative_Boundaries/MapServer/WMSServer?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetMap&CRS={proj}&BBOX={bbox}&WIDTH={width}&HEIGHT={height}&LAYERS=3&STYLES=&FORMAT=image/png32&DPI=96&MAP_RESOLUTION=96&FORMAT_OPTIONS=dpi:96&TRANSPARENT=TRUE",projection:"EPSG:3857",zoomExtent:[1,21],polygon:[[[159.00339,-31.48767],[159.03789,-31.70558],[159.31098,-31.85952],[159.37278,-31.77892],[159.17443,-31.4374],[159.00339,-31.48767]],[[140.99865,-28.99893],[148.9452,-28.99487],[149.48562,-28.5615],[150.29914,-28.53373],[151.0954,-28.71792],[151.39436,-28.97978],[151.98941,-28.73557],[151.92904,-28.49836],[152.49246,-28.2353],[153.57907,-28.14156],[153.69692,-28.64983],[153.25847,-30.97354],[152.75437,-32.50849],[151.90879,-33.05535],[151.25834,-34.38081],[151.01442,-35.11568],[150.46154,-36.1203],[150.41275,-36.61786],[149.97847,-37.507],[148.20135,-36.80566],[148.07918,-36.81716],[147.88542,-36.09019],[147.69029,-36.04418],[146.82844,-36.18868],[145.23484,-35.98499],[144.84457,-36.21492],[144.51935,-36.1296],[143.20218,-35.13174],[142.47856,-34.81194],[140.9937,-34.07017],[141.0026,-34.01974],[140.99865,-28.99893]]],terms_url:"http://spatialservices.finance.nsw.gov.au/mapping_and_imagery/lpi_web_services",terms_text:"© Land and Property Information 2017",overlay:true},{id:"LPI_NSW_Administrative_Boundaries_StateForest",name:"LPI NSW Administrative Boundaries State Forest",type:"wms",template:"https://maps.six.nsw.gov.au/arcgis/services/public/NSW_Administrative_Boundaries/MapServer/WMSServer?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetMap&CRS={proj}&BBOX={bbox}&WIDTH={width}&HEIGHT={height}&LAYERS=2&STYLES=&FORMAT=image/png32&DPI=96&MAP_RESOLUTION=96&FORMAT_OPTIONS=dpi:96&TRANSPARENT=TRUE",projection:"EPSG:3857",zoomExtent:[1,21],polygon:[[[159.00339,-31.48767],[159.03789,-31.70558],[159.31098,-31.85952],[159.37278,-31.77892],[159.17443,-31.4374],[159.00339,-31.48767]],[[140.99865,-28.99893],[148.9452,-28.99487],[149.48562,-28.5615],[150.29914,-28.53373],[151.0954,-28.71792],[151.39436,-28.97978],[151.98941,-28.73557],[151.92904,-28.49836],[152.49246,-28.2353],[153.57907,-28.14156],[153.69692,-28.64983],[153.25847,-30.97354],[152.75437,-32.50849],[151.90879,-33.05535],[151.25834,-34.38081],[151.01442,-35.11568],[150.46154,-36.1203],[150.41275,-36.61786],[149.97847,-37.507],[148.20135,-36.80566],[148.07918,-36.81716],[147.88542,-36.09019],[147.69029,-36.04418],[146.82844,-36.18868],[145.23484,-35.98499],[144.84457,-36.21492],[144.51935,-36.1296],[143.20218,-35.13174],[142.47856,-34.81194],[140.9937,-34.07017],[141.0026,-34.01974],[140.99865,-28.99893]]],terms_url:"http://spatialservices.finance.nsw.gov.au/mapping_and_imagery/lpi_web_services",terms_text:"© Land and Property Information 2017",overlay:true},{id:"LPI_NSW_Administrative_Boundaries_Suburb",name:"LPI NSW Administrative Boundaries Suburb",type:"wms",template:"https://maps.six.nsw.gov.au/arcgis/services/public/NSW_Administrative_Boundaries/MapServer/WMSServer?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetMap&CRS={proj}&BBOX={bbox}&WIDTH={width}&HEIGHT={height}&LAYERS=7&STYLES=&FORMAT=image/png32&DPI=96&MAP_RESOLUTION=96&FORMAT_OPTIONS=dpi:96&TRANSPARENT=TRUE",projection:"EPSG:3857",zoomExtent:[1,21],polygon:[[[159.00339,-31.48767],[159.03789,-31.70558],[159.31098,-31.85952],[159.37278,-31.77892],[159.17443,-31.4374],[159.00339,-31.48767]],[[140.99865,-28.99893],[148.9452,-28.99487],[149.48562,-28.5615],[150.29914,-28.53373],[151.0954,-28.71792],[151.39436,-28.97978],[151.98941,-28.73557],[151.92904,-28.49836],[152.49246,-28.2353],[153.57907,-28.14156],[153.69692,-28.64983],[153.25847,-30.97354],[152.75437,-32.50849],[151.90879,-33.05535],[151.25834,-34.38081],[151.01442,-35.11568],[150.46154,-36.1203],[150.41275,-36.61786],[149.97847,-37.507],[148.20135,-36.80566],[148.07918,-36.81716],[147.88542,-36.09019],[147.69029,-36.04418],[146.82844,-36.18868],[145.23484,-35.98499],[144.84457,-36.21492],[144.51935,-36.1296],[143.20218,-35.13174],[142.47856,-34.81194],[140.9937,-34.07017],[141.0026,-34.01974],[140.99865,-28.99893]]],terms_url:"http://spatialservices.finance.nsw.gov.au/mapping_and_imagery/lpi_web_services",terms_text:"© Land and Property Information 2017",overlay:true},{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}",zoomExtent:[1,19],polygon:[[[140.99486,-28.95297],[148.96114,-28.89977],[148.98701,-28.48623],[151.01361,-28.47865],[151.10847,-28.70329],[151.87599,-28.68312],[151.93348,-28.40788],[152.25544,-28.23327],[153.06608,-28.21047],[153.14082,-28.1091],[153.47351,-28.11648],[153.35765,-27.69361],[159.49383,-27.69925],[159.4857,-37.84741],[149.52569,-37.82815],[149.91596,-37.487],[148.04859,-36.81317],[147.9681,-36.15679],[146.71477,-36.28666],[145.30046,-36.15679],[144.53007,-36.14751],[142.8398,-35.02543],[142.35686,-34.78025],[141.97741,-34.40162],[140.99503,-34.13718],[140.99486,-28.95297]]],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}",zoomExtent:[1,21],polygon:[[[140.98687,-28.98878],[148.99515,-28.97275],[148.99667,-28.49151],[151.0029,-28.49307],[151.0029,-28.72617],[151.49151,-28.73239],[151.49187,-28.71553],[151.92282,-28.71964],[151.92516,-28.48971],[151.99559,-28.48987],[151.99899,-28.11927],[152.49676,-28.12209],[152.49682,-28.11464],[153.00446,-28.11544],[153.00446,-28.1204],[153.50386,-28.11934],[153.50393,-28.12271],[153.59194,-28.12236],[153.59266,-28.17769],[153.61112,-28.17579],[153.61139,-28.18252],[153.74268,-28.21621],[153.77873,-28.71091],[152.6238,-32.58772],[152.3124,-32.63288],[151.41419,-33.57904],[150.89299,-35.26487],[150.46207,-35.77773],[150.01565,-37.51036],[149.99181,-37.51268],[149.51978,-37.51307],[149.51996,-37.52169],[149.4463,-37.53537],[149.06334,-37.5358],[148.98366,-37.52176],[148.98169,-37.5192],[148.98638,-37.2585],[148.48754,-37.26585],[148.48248,-37.00927],[147.99439,-37.01434],[147.98829,-36.53322],[147.95297,-36.52607],[147.94865,-36.0686],[147.5035,-36.07168],[147.50477,-36.2651],[146.492,-36.26613],[146.49225,-36.2565],[145.99298,-36.25343],[145.99659,-36.01881],[145.98316,-36.01871],[145.96245,-36.0219],[145.94624,-36.01209],[145.94543,-36.00603],[145.50415,-36.00136],[145.50379,-36.01091],[145.0072,-36.00362],[145.00354,-36.15204],[144.48608,-36.14231],[144.48741,-36.01375],[143.98747,-36.00241],[143.99329,-35.57238],[143.49717,-35.58371],[143.4918,-35.40656],[143.46134,-35.36749],[143.45856,-35.35559],[143.48978,-35.33965],[143.48955,-35.33221],[143.4317,-35.25706],[143.25055,-35.26066],[143.24384,-35.01327],[142.99333,-35.01772],[142.99198,-34.79619],[142.49714,-34.80323],[142.49732,-34.80076],[142.42114,-34.80176],[142.42092,-34.78383],[142.23309,-34.78592],[142.23077,-34.78075],[142.227,-34.50613],[141.99753,-34.50837],[141.9946,-34.25267],[141.49823,-34.25569],[141.49817,-34.25228],[140.99454,-34.25284],[140.98687,-28.98878]]],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_Imagery_Dates",name:"LPI NSW Imagery Dates",type:"wms",template:"https://maps.six.nsw.gov.au/arcgis/services/public/NSW_Imagery_Dates/MapServer/WMSServer?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetMap&CRS={proj}&BBOX={bbox}&WIDTH={width}&HEIGHT={height}&LAYERS=0&STYLES=&FORMAT=image/png32&DPI=96&MAP_RESOLUTION=96&FORMAT_OPTIONS=dpi:96&TRANSPARENT=TRUE",projection:"EPSG:3857",zoomExtent:[0,21],polygon:[[[140.98687,-28.98878],[148.99515,-28.97275],[148.99667,-28.49151],[151.0029,-28.49307],[151.0029,-28.72617],[151.49151,-28.73239],[151.49187,-28.71553],[151.92282,-28.71964],[151.92516,-28.48971],[151.99559,-28.48987],[151.99899,-28.11927],[152.49676,-28.12209],[152.49682,-28.11464],[153.00446,-28.11544],[153.00446,-28.1204],[153.50386,-28.11934],[153.50393,-28.12271],[153.59194,-28.12236],[153.59266,-28.17769],[153.61112,-28.17579],[153.61139,-28.18252],[153.74268,-28.21621],[153.77873,-28.71091],[152.6238,-32.58772],[152.3124,-32.63288],[151.41419,-33.57904],[150.89299,-35.26487],[150.46207,-35.77773],[150.01565,-37.51036],[149.99181,-37.51268],[149.51978,-37.51307],[149.51996,-37.52169],[149.4463,-37.53537],[149.06334,-37.5358],[148.98366,-37.52176],[148.98169,-37.5192],[148.98638,-37.2585],[148.48754,-37.26585],[148.48248,-37.00927],[147.99439,-37.01434],[147.98829,-36.53322],[147.95297,-36.52607],[147.94865,-36.0686],[147.5035,-36.07168],[147.50477,-36.2651],[146.492,-36.26613],[146.49225,-36.2565],[145.99298,-36.25343],[145.99659,-36.01881],[145.98316,-36.01871],[145.96245,-36.0219],[145.94624,-36.01209],[145.94543,-36.00603],[145.50415,-36.00136],[145.50379,-36.01091],[145.0072,-36.00362],[145.00354,-36.15204],[144.48608,-36.14231],[144.48741,-36.01375],[143.98747,-36.00241],[143.99329,-35.57238],[143.49717,-35.58371],[143.4918,-35.40656],[143.46134,-35.36749],[143.45856,-35.35559],[143.48978,-35.33965],[143.48955,-35.33221],[143.4317,-35.25706],[143.25055,-35.26066],[143.24384,-35.01327],[142.99333,-35.01772],[142.99198,-34.79619],[142.49714,-34.80323],[142.49732,-34.80076],[142.42114,-34.80176],[142.42092,-34.78383],[142.23309,-34.78592],[142.23077,-34.78075],[142.227,-34.50613],[141.99753,-34.50837],[141.9946,-34.25267],[141.49823,-34.25569],[141.49817,-34.25228],[140.99454,-34.25284],[140.98687,-28.98878]]],terms_url:"http://spatialservices.finance.nsw.gov.au/mapping_and_imagery/lpi_web_services",terms_text:"© Land and Property Information 2017",overlay: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}",zoomExtent:[1,16],polygon:[[[140.99884,-28.99924],[148.95024,-28.99937],[148.94988,-28.96653],[148.99983,-28.96653],[149.00009,-28.81658],[149.10007,-28.81658],[149.0997,-28.74885],[148.99985,-28.74974],[148.99982,-28.50003],[151.00005,-28.50052],[151.00059,-28.73258],[151.02395,-28.73274],[151.02413,-28.74188],[151.03293,-28.74188],[151.03383,-28.75054],[151.99998,-28.74953],[151.99998,-28.71645],[152.0334,-28.71661],[152.03322,-28.6832],[152.00007,-28.68335],[151.99988,-28.64163],[151.98299,-28.64139],[151.98317,-28.62491],[151.93313,-28.62475],[151.93341,-28.50007],[151.99989,-28.50023],[151.99986,-28.37496],[152.24997,-28.37507],[152.24994,-28.25001],[152.99972,-28.24986],[152.9999,-28.28324],[153.1165,-28.2834],[153.11659,-28.24986],[153.16663,-28.25001],[153.16672,-28.23316],[153.24999,-28.23324],[153.25003,-28.12497],[153.62496,-28.12508],[153.62484,-28.49991],[153.7498,-28.49999],[153.74959,-28.7498],[153.62481,-28.75011],[153.62497,-28.99993],[153.49977,-29.00006],[153.49984,-29.49951],[153.3748,-29.50005],[153.37541,-29.87503],[153.49991,-29.87514],[153.49991,-30.00009],[153.24989,-29.99976],[153.25002,-30.19177],[153.27482,-30.19162],[153.27482,-30.21685],[153.21661,-30.21661],[153.21661,-30.25006],[153.25002,-30.25006],[153.24975,-30.37519],[153.12436,-30.37497],[153.12465,-30.62504],[153.03317,-30.62505],[153.03339,-30.87508],[153.12492,-30.87503],[153.12493,-31.12505],[153.00824,-31.12497],[153.00829,-31.24998],[153,-31.25],[152.99994,-31.62499],[152.87494,-31.62505],[152.87496,-31.74995],[152.78329,-31.75],[152.7832,-31.87486],[152.74991,-31.87501],[152.75004,-32.00002],[152.6249,-31.99994],[152.62491,-32.5],[152.49998,-32.49996],[152.50003,-32.56664],[152.41667,-32.56634],[152.41676,-32.625],[152.34985,-32.62499],[152.34985,-32.63323],[152.28308,-32.63322],[152.28326,-32.62498],[152.24948,-32.62498],[152.24981,-32.87491],[151.87457,-32.87504],[151.87485,-33.00001],[151.74977,-33.00015],[151.75047,-33.25004],[151.62524,-33.24974],[151.62508,-33.37516],[151.49958,-33.37514],[151.50031,-33.62494],[151.37415,-33.62437],[151.37279,-34.00196],[151.24778,-34.00112],[151.24778,-34.24931],[150.99573,-34.25015],[151.00081,-34.62483],[150.87174,-34.6265],[150.87276,-35.12427],[150.76706,-35.12344],[150.76909,-35.24638],[150.62579,-35.2497],[150.62803,-35.37515],[150.49997,-35.37515],[150.49591,-35.6275],[150.37192,-35.62503],[150.37497,-35.7538],[150.26724,-35.75132],[150.2652,-35.87412],[150.24792,-35.87083],[150.24589,-36.37488],[150.12292,-36.37488],[150.12597,-36.62243],[150.02535,-36.62407],[150.0284,-36.74713],[149.99283,-36.74958],[150.00401,-37.12245],[150.05889,-37.12731],[150.05686,-37.37809],[149.99791,-37.37324],[149.99994,-37.48301],[149.98774,-37.48462],[149.98571,-37.508],[148.06846,-36.80624],[147.99306,-36.138],[147.81483,-36.00556],[147.38939,-36.01137],[147.38221,-36.13103],[146.99725,-36.12755],[146.98863,-36.25283],[146.49564,-36.24471],[146.50426,-36.12639],[145.00118,-36.00795],[145.01541,-36.25421],[144.50725,-36.24765],[144.49912,-36.0211],[143.99654,-35.98105],[143.33826,-35.23318],[142.40976,-34.76694],[142.03614,-34.37588],[140.99652,-34.13858],[140.99884,-28.99924]]],terms_url:"http://spatialservices.finance.nsw.gov.au/mapping_and_imagery/lpi_web_services",terms_text:"© Land and Property Information 2017"},{id:"orthophoto_lyon_2012",name:"Lyon Orthophoto 2012-03 10cm",type:"wms",template:"https://download.data.grandlyon.com/wms/grandlyon?language=fre&FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=1830_5150_10cm_CC46,1830_5155_10cm_CC46,1830_5160_10cm_CC46,1830_5165_10cm_CC46,1830_5170_10cm_CC46,1830_5175_10cm_CC46,1830_5180_10cm_CC46,1830_5185_10cm_CC46,1830_5190_10cm_CC46,1835_5150_10cm_CC46,1835_5155_10cm_CC46,1835_5160_10cm_CC46,1835_5165_10cm_CC46,1835_5170_10cm_CC46,1835_5175_10cm_CC46,1835_5180_10cm_CC46,1835_5185_10cm_CC46,1835_5190_10cm_CC46,1840_5150_10cm_CC46,1840_5155_10cm_CC46,1840_5160_10cm_CC46,1840_5165_10cm_CC46,1840_5170_10cm_CC46,1840_5175_10cm_CC46,1840_5180_10cm_CC46,1840_5185_10cm_CC46,1840_5190_10cm_CC46,1845_5150_10cm_CC46,1845_5155_10cm_CC46,1845_5160_10cm_CC46,1845_5165_10cm_CC46,1845_5170_10cm_CC46,1845_5175_10cm_CC46,1845_5180_10cm_CC46,1845_5185_10cm_CC46,1845_5190_10cm_CC46,1850_5155_10cm_CC46,1850_5160_10cm_CC46,1850_5165_10cm_CC46,1850_5170_10cm_CC46,1850_5175_10cm_CC46,1850_5180_10cm_CC46,1850_5185_10cm_CC46,1855_5155_10cm_CC46,1855_5165_10cm_CC46,1855_5170_10cm_CC46,1855_5175_10cm_CC46,1855_5180_10cm_CC46,1855_5185_10cm_CC46,1860_5155_10cm_CC46,1860_5160_10cm_CC46,1860_5165_10cm_CC46,1860_5170_10cm_CC46,1860_5175_10cm_CC46,1860_5180_10cm_CC46,1860_5185_10cm_CC46,1865_5155_10cm_CC46,1865_5160_10cm_CC46,1865_5165_10cm_CC46,1865_5170_10cm_CC46&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",endDate:"2012-03-01T00:00:00.000Z",startDate:"2012-03-01T00:00:00.000Z",polygon:[[[4.69049,45.54652],[4.83131,45.54652],[4.83131,45.57131],[4.88344,45.57131],[4.88344,45.59745],[5.16622,45.59745],[5.16622,45.74533],[5.10793,45.74533],[5.10793,45.88145],[4.90698,45.88145],[4.90698,45.92107],[4.84377,45.92107],[4.84377,45.94011],[4.71543,45.94011],[4.71543,45.87018],[4.67458,45.87018],[4.67458,45.7178],[4.69567,45.7178],[4.69049,45.54652]]],terms_url:"https://data.grandlyon.com/imagerie/orthophotographie-2012-du-grand-lyon",terms_text:"Grand Lyon Smart Data DSIT"},{id:"orthophoto_lyon_2015_8cm",name:"Lyon Orthophoto 2015-05 8cm",type:"wms",template:"https://download.data.grandlyon.com/wms/grandlyon?language=fre&FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=1835_5155_8cm_CC46,1835_5160_8cm_CC46,1835_5165_8cm_CC46,1835_5170_8cm_CC46,1835_5180_8cm_CC46,1835_5175_8cm_CC46,1845_5175_8cm_CC46,1845_5180_8cm_CC46,1845_5185_8cm_CC46,1845_5190_8cm_CC46,1850_5165_8cm_CC46,1850_5160_8cm_CC46,1850_5155_8cm_CC46,1850_5170_8cm_CC46,1850_5175_8cm_CC46,1850_5180_8cm_CC46,1850_5185_8cm_CC46,1855_5155_8cm_CC46,1855_5160_8cm_CC46,1855_5185_8cm_CC46,1855_5180_8cm_CC46,1855_5175_8cm_CC46,1855_5170_8cm_CC46,1855_5165_8cm_CC46,1860_5160_8cm_CC46,1860_5155_8cm_CC46,1860_5165_8cm_CC46,1835_5185_8cm_CC46,1835_5190_8cm_CC46,1835_5195_8cm_CC46,1840_5160_8cm_CC46,1840_5155_8cm_CC46,1840_5150_8cm_CC46,1830_5195_8cm_CC46,1830_5190_8cm_CC46,1830_5175_8cm_CC46,1830_5170_8cm_CC46,1830_5165_8cm_CC46,1830_5160_8cm_CC46,1830_5155_8cm_CC46,1830_5180_8cm_CC46,1830_5185_8cm_CC46,1835_5150_8cm_CC46,1860_5170_8cm_CC46,1860_5175_8cm_CC46,1840_5180_8cm_CC46,1840_5175_8cm_CC46,1840_5185_8cm_CC46,1840_5190_8cm_CC46,1840_5195_8cm_CC46,1845_5150_8cm_CC46,1845_5155_8cm_CC46,1845_5160_8cm_CC46,1845_5170_8cm_CC46,1845_5165_8cm_CC46,1840_5170_8cm_CC46,1840_5165_8cm_CC46,1860_5180_8cm_CC46,1860_5185_8cm_CC46,1865_5155_8cm_CC46,1865_5160_8cm_CC46,1865_5165_8cm_CC46,1865_5170_8cm_CC46,1830_5150_8cm_CC46&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",endDate:"2015-05-01T00:00:00.000Z",startDate:"2015-05-01T00:00:00.000Z",polygon:[[[4.66489,45.54688],[4.88253,45.54348],[4.88435,45.59745],[5.16623,45.59242],[5.17217,45.74532],[5.10793,45.74653],[5.11305,45.88145],[4.90698,45.88508],[4.90822,45.92106],[4.84377,45.92212],[4.84497,45.9581],[4.67729,45.96069],[4.66489,45.54688]]],terms_url:"https://data.grandlyon.com/imagerie/orthophotographie-2015-du-grand-lyon",terms_text:"Métropole de Lyon DINSI",best:true},{id:"MainRoadsWA_Road_Hierarchy",name:"Main Roads WA Road Hierarchy",type:"wms",template:"https://services.slip.wa.gov.au/public/services/SLIP_Public_Services/Transport/MapServer/WMSServer?LAYERS=8&TRANSPARENT=TRUE&SERVICE=WMS&VERSION=1.1.1&REQUEST=GetMap&STYLES=&FORMAT=image%2Fpng&SRS={proj}&BBOX={bbox}&WIDTH={width}&HEIGHT={height}",projection:"EPSG:3857",zoomExtent:[0,21],polygon:[[[129.00009,-31.68764],[128.99872,-14.58225],[127.08984,-12.29707],[124.76074,-12.98315],[121.24512,-15.70766],[119.0918,-17.60214],[115.53223,-18.85431],[112.41211,-20.46819],[111.24756,-22.83695],[111.00586,-25.62172],[111.64307,-29.66896],[111.68701,-32.3614],[112.14844,-34.47034],[113.35693,-36.10238],[116.98242,-36.70366],[119.44336,-36.94989],[122.27783,-36.61553],[125.99121,-35.40696],[127.59521,-34.57895],[128.86963,-33.59632],[129.00009,-31.68764]]],terms_url:"https://catalogue.data.wa.gov.au/dataset/clss-road-hierarchy",terms_text:"Main Roads Western Australia",overlay:true},{id:"mainzlatestaerialimagery",name:"Mainz latest aerial imagery",type:"wms",template:"https://gint.mainz.de/gint1-cgi/mapserv?map=/data/mapbender-int/umn-www/client/a62/luftbild.map&FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=Luftbild_f_mz_2018&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",zoomExtent:[17,22],polygon:[[[8.10355,49.865],[8.38356,49.865],[8.38356,50.0466],[8.10355,50.0466],[8.10355,49.865]]],terms_url:"https://www.mainz.de/vv/oe/100140100000035141.php#tab-infos",terms_text:"Vermessung und Geoinformation Mainz",icon:"https://www.mainz.de/configuration.inc.php.media/27432/Logo-72px.png"},{id:"major_isidoro",name:"Major Isidoro AL",type:"wms",template:"http://geoserver.dados.al.gov.br:8080/geoserver/Alagoas/ows?LAYERS=Major%20Isidoro&SERVICE=WMS&FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.0&SERVICE=WMS&REQUEST=GetMap&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[-36.94048,-9.57588],[-36.94106,-9.48536],[-37.03215,-9.48606],[-37.03164,-9.57639],[-36.94048,-9.57588]]],terms_url:"http://www.seplag.al.gov.br",terms_text:"Secretaria de Estado do Planejamento, Gestão e Patrimônio"},{id:"Mapbox",name:"Mapbox Satellite",type:"tms",template:"https://{switch:a,b,c,d}.tiles.mapbox.com/v4/mapbox.satellite/{zoom}/{x}/{y}@2x.jpg?access_token=pk.eyJ1Ijoib3BlbnN0cmVldG1hcCIsImEiOiJjaml5MjVyb3MwMWV0M3hxYmUzdGdwbzE4In0.q548FjhsSJzvXsGlPsFxAQ",tileSize:512,zoomExtent:[0,22],terms_url:"https://www.mapbox.com/about/maps",terms_text:"Terms & Feedback","default":true,description:"Satellite and aerial imagery.",icon:"https://osmlab.github.io/editor-layer-index/sources/world/MapBoxSatellite.png"},{id:"Maps4BW-LGL_BW",name:"Maps4BW (LGL-BW, www.lgl-bw.de)",type:"wms",template:"https://owsproxy.lgl-bw.de/owsproxy/ows/WMS_Maps4BW?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=webatlasde&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[9.06954,49.57679],[9.10577,49.57952],[9.16079,49.58263],[9.24212,49.58402],[9.27192,49.63515],[9.30454,49.65561],[9.36753,49.65893],[9.38253,49.64341],[9.41191,49.66033],[9.39602,49.67143],[9.41828,49.69706],[9.40378,49.71957],[9.37769,49.70357],[9.35828,49.70334],[9.29438,49.73958],[9.31467,49.76859],[9.42435,49.79099],[9.50417,49.78962],[9.51808,49.78214],[9.65623,49.79286],[9.65317,49.73944],[9.63435,49.70076],[9.67054,49.69515],[9.67721,49.71846],[9.71079,49.72918],[9.8014,49.73429],[9.83728,49.70237],[9.87656,49.61362],[9.83362,49.55607],[9.84954,49.54793],[9.87463,49.5836],[9.91419,49.58955],[9.93066,49.56097],[9.92482,49.48951],[10.01787,49.48673],[10.03352,49.52978],[10.06372,49.55129],[10.09052,49.54218],[10.12792,49.51192],[10.11027,49.49272],[10.16753,49.38589],[10.12627,49.3809],[10.14385,49.32772],[10.16061,49.27043],[10.13569,49.26189],[10.14311,49.20387],[10.25161,49.15031],[10.26279,49.12959],[10.26869,49.05202],[10.36527,49.02557],[10.45894,48.93581],[10.46208,48.83947],[10.42886,48.74973],[10.46648,48.73627],[10.49761,48.68581],[10.45007,48.66277],[10.3553,48.65068],[10.32297,48.68241],[10.26028,48.67842],[10.32542,48.60763],[10.31448,48.52323],[10.17973,48.45977],[10.12892,48.45301],[10.10938,48.47445],[10.06355,48.45381],[10.03918,48.45125],[10.04492,48.43158],[10.0152,48.40323],[9.98709,48.38565],[9.97328,48.37944],[9.97549,48.36558],[9.99071,48.3734],[10.00265,48.3632],[9.99992,48.35572],[10.06698,48.28172],[10.08111,48.2253],[10.11306,48.12632],[10.13966,48.11307],[10.14695,48.07455],[10.13763,48.01938],[10.11725,47.9755],[10.11359,47.93422],[10.10709,47.86711],[10.14174,47.80956],[10.0732,47.78686],[10.11825,47.76126],[10.14213,47.70165],[10.13262,47.67678],[10.07445,47.63472],[10.06303,47.66923],[10.00359,47.67526],[9.95808,47.64376],[9.84481,47.67533],[9.83488,47.66042],[9.74926,47.60206],[9.70817,47.60007],[9.65788,47.60599],[9.64742,47.58931],[9.61389,47.57809],[9.56602,47.53274],[9.51199,47.53246],[9.25717,47.65752],[9.18684,47.65697],[9.17591,47.65379],[9.17028,47.65474],[9.15555,47.666],[9.1494,47.66713],[9.13947,47.66367],[9.02005,47.68616],[8.94127,47.65569],[8.89825,47.64821],[8.88263,47.65327],[8.87474,47.6545],[8.87235,47.66971],[8.84949,47.68089],[8.84993,47.70233],[8.81816,47.71242],[8.80108,47.72811],[8.77231,47.71606],[8.81295,47.6959],[8.79373,47.67216],[8.7533,47.68997],[8.72575,47.6917],[8.71002,47.68829],[8.68937,47.69318],[8.67046,47.68235],[8.65783,47.68883],[8.66161,47.71454],[8.70596,47.71584],[8.70932,47.73275],[8.73033,47.75527],[8.72003,47.76273],[8.68871,47.75314],[8.67898,47.78306],[8.64981,47.79435],[8.65592,47.76948],[8.63132,47.75749],[8.61918,47.76216],[8.61351,47.78451],[8.61686,47.79705],[8.568,47.79977],[8.57611,47.79015],[8.57847,47.78102],[8.56315,47.77654],[8.48889,47.76458],[8.45742,47.74126],[8.4623,47.72909],[8.44929,47.71663],[8.41471,47.69991],[8.4273,47.68562],[8.41061,47.6743],[8.46839,47.6568],[8.52474,47.64677],[8.5269,47.66373],[8.56441,47.67261],[8.57853,47.66373],[8.60454,47.6751],[8.63333,47.65212],[8.62386,47.63922],[8.60395,47.63193],[8.61281,47.61327],[8.57951,47.59306],[8.5602,47.59867],[8.56765,47.61442],[8.53394,47.62984],[8.51208,47.61641],[8.46581,47.60137],[8.46631,47.58666],[8.48985,47.59139],[8.5,47.58062],[8.43414,47.5629],[8.39882,47.57559],[8.38525,47.56408],[8.32701,47.56893],[8.29483,47.59077],[8.2948,47.60497],[8.26293,47.60823],[8.22435,47.60446],[8.18644,47.60508],[8.16904,47.59394],[8.13615,47.58246],[8.10503,47.56795],[8.09873,47.55933],[8.08261,47.55624],[8.07095,47.56299],[8.0274,47.54931],[7.94632,47.54209],[7.90966,47.54825],[7.90676,47.5603],[7.88681,47.58765],[7.83987,47.58122],[7.79648,47.55517],[7.69208,47.53137],[7.66583,47.53403],[7.63159,47.56044],[7.63879,47.56619],[7.68607,47.57205],[7.65278,47.59418],[7.62247,47.57767],[7.60473,47.57822],[7.58771,47.59015],[7.52156,47.65161],[7.50399,47.70235],[7.52096,47.77685],[7.55712,47.84839],[7.54946,47.8792],[7.57461,47.93028],[7.61318,47.96804],[7.6119,47.9871],[7.56124,48.03836],[7.57491,48.1258],[7.59534,48.15977],[7.63305,48.19717],[7.66275,48.22473],[7.68466,48.30305],[7.76346,48.49158],[7.80046,48.5126],[7.79958,48.5878],[7.83409,48.64439],[7.91211,48.68899],[7.96723,48.75716],[8.02069,48.78879],[8.04302,48.7956],[8.08647,48.81306],[8.13644,48.89782],[8.19706,48.96021],[8.28161,48.9949],[8.29967,49.02597],[8.31243,49.05996],[8.38654,49.23497],[8.46083,49.28407],[8.48783,49.29326],[8.47577,49.3079],[8.44839,49.31693],[8.45152,49.33135],[8.46288,49.3869],[8.49407,49.40186],[8.49762,49.41583],[8.50721,49.43414],[8.49834,49.44187],[8.47977,49.44391],[8.46414,49.44151],[8.44696,49.44516],[8.43947,49.45214],[8.44407,49.46085],[8.45992,49.46498],[8.46312,49.47135],[8.4554,49.48107],[8.44184,49.49297],[8.41194,49.55852],[8.42193,49.5843],[8.44117,49.59081],[8.45482,49.59157],[8.47738,49.5874],[8.56161,49.52237],[8.61486,49.54175],[8.59165,49.59179],[8.58706,49.61156],[8.65189,49.6209],[8.69494,49.62762],[8.70105,49.59869],[8.68726,49.57096],[8.72597,49.53085],[8.78493,49.51775],[8.81467,49.53187],[8.88863,49.51091],[8.90168,49.50363],[8.90315,49.486],[8.87995,49.46561],[8.83117,49.42147],[8.80845,49.40981],[8.82075,49.39647],[8.83009,49.41316],[8.85107,49.39663],[8.90247,49.44632],[8.93863,49.48179],[8.95154,49.50562],[8.98498,49.51153],[9.03553,49.50079],[9.05731,49.532],[9.10023,49.52728],[9.11009,49.51213],[9.12424,49.51722],[9.11286,49.53337],[9.08284,49.54211],[9.06694,49.56433],[9.06954,49.57679]]],terms_url:"https://www.lgl-bw.de/",terms_text:"Datengrundlage: LGL, www.lgl-bw.de"},{id:"mar_vermelho_al",name:"Mar Vermelho AL",type:"wms",template:"http://geoserver.dados.al.gov.br:8080/geoserver/Alagoas/ows?LAYERS=Mar%20Vermelho&SERVICE=WMS&FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.0&SERVICE=WMS&REQUEST=GetMap&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[-36.34201,-9.49289],[-36.3422,-9.47533],[-36.34275,-9.4029],[-36.34473,-9.4029],[-36.34537,-9.40279],[-36.34702,-9.40293],[-36.3508,-9.40291],[-36.359,-9.40307],[-36.36109,-9.403],[-36.36289,-9.40307],[-36.3659,-9.40305],[-36.36713,-9.40301],[-36.37571,-9.40307],[-36.38049,-9.40308],[-36.38663,-9.4032],[-36.38852,-9.40312],[-36.39286,-9.40325],[-36.39656,-9.40322],[-36.40309,-9.40327],[-36.41973,-9.40338],[-36.43368,-9.4034],[-36.43355,-9.41685],[-36.43344,-9.42386],[-36.43338,-9.43753],[-36.43329,-9.45012],[-36.433,-9.49359],[-36.40839,-9.4935],[-36.40442,-9.49354],[-36.40008,-9.49351],[-36.39787,-9.49342],[-36.39168,-9.49328],[-36.38757,-9.49331],[-36.38536,-9.49341],[-36.37673,-9.49331],[-36.37427,-9.49319],[-36.36707,-9.49299],[-36.36502,-9.493],[-36.36043,-9.49299],[-36.35955,-9.49295],[-36.35895,-9.49304],[-36.35703,-9.49294],[-36.35665,-9.493],[-36.3526,-9.493],[-36.34767,-9.49297],[-36.34201,-9.49289]]],terms_url:"http://www.seplag.al.gov.br",terms_text:"Secretaria de Estado do Planejamento, Gestão e Patrimônio"},{id:"MassGIS-L3-Parcels",name:"MassGIS L3 Parcels",type:"tms",template:"https://tiles.arcgis.com/tiles/hGdibHYSPO59RG1h/arcgis/rest/services/MassGIS_Level3_Parcels/MapServer/tile/{zoom}/{y}/{x}",zoomExtent:[15,20],polygon:[[[-72.13569,42.03025],[-72.53156,42.03458],[-72.57278,42.03022],[-72.58216,42.02474],[-72.60717,42.02515],[-72.60797,42.03108],[-72.64019,42.03205],[-72.69933,42.03696],[-72.75714,42.03635],[-72.75868,42.02439],[-72.76572,42.02276],[-72.76673,42.00327],[-72.81705,41.99769],[-72.81378,42.03674],[-73.03678,42.03929],[-73.43281,42.05059],[-73.49688,42.04968],[-73.50814,42.08626],[-73.26496,42.74594],[-72.6872,42.73348],[-71.97286,42.71307],[-71.69663,42.70572],[-71.29464,42.69704],[-71.27894,42.71136],[-71.26787,42.72603],[-71.25526,42.73659],[-71.24598,42.74231],[-71.23732,42.74491],[-71.22391,42.74643],[-71.18181,42.73732],[-71.18617,42.79088],[-71.16667,42.80891],[-71.13277,42.82145],[-71.06442,42.80626],[-71.05395,42.83337],[-71.04483,42.84869],[-71.03128,42.85924],[-70.96702,42.86887],[-70.94967,42.87588],[-70.92973,42.88504],[-70.91465,42.88661],[-70.90348,42.88671],[-70.88566,42.88288],[-70.84776,42.86088],[-70.82963,42.86875],[-70.81567,42.87204],[-70.45842,42.67694],[-70.8759,42.35302],[-69.88713,42.0519],[-69.89537,41.21643],[-70.81959,41.23192],[-71.09996,41.43386],[-71.12047,41.49717],[-71.13131,41.59231],[-71.14059,41.6051],[-71.14047,41.62389],[-71.13569,41.6284],[-71.13291,41.6601],[-71.17605,41.6681],[-71.17588,41.67154],[-71.1954,41.67514],[-71.26139,41.7523],[-71.32885,41.7811],[-71.33407,41.79455],[-71.34156,41.79817],[-71.33914,41.80842],[-71.3472,41.8231],[-71.3449,41.828],[-71.3352,41.8355],[-71.3422,41.8448],[-71.33392,41.86229],[-71.34086,41.87872],[-71.33865,41.89865],[-71.38174,41.8932],[-71.38127,42.01885],[-71.49744,42.01725],[-71.52888,42.01499],[-71.79925,42.00807],[-71.80067,42.02351],[-72.0635,42.02735],[-72.13569,42.03025]]],overlay:true},{id:"geodata.md.gov-MD_SixInchImagery",name:"MD Latest 6 Inch Aerial Imagery",type:"wms",template:"https://geodata.md.gov/imap/services/Imagery/MD_SixInchImagery/MapServer/WmsServer?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=MD_SixInchImagery&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",endDate:"2016-01-01T00:00:00.000Z",startDate:"2013-01-01T00:00:00.000Z",zoomExtent:[0,20],polygon:[[[-76.23413,37.92037],[-76.59805,38.15832],[-76.94,38.27053],[-77.03819,38.41379],[-77.23526,38.33627],[-77.31216,38.41056],[-77.26273,38.56642],[-77.043,38.71338],[-77.04987,38.7937],[-76.92627,38.8925],[-77.04094,38.9845],[-77.12162,38.92523],[-77.15012,38.95514],[-77.25243,38.97543],[-77.25929,39.02425],[-77.34581,39.05492],[-77.46185,39.07038],[-77.53738,39.13965],[-77.47421,39.22481],[-77.57275,39.30428],[-77.72347,39.32899],[-77.77702,39.46323],[-77.86148,39.51622],[-77.84088,39.60886],[-77.95624,39.59299],[-78.16635,39.69556],[-78.27003,39.62156],[-78.3387,39.64007],[-78.46641,39.52364],[-78.6628,39.54006],[-78.79875,39.60622],[-78.9814,39.4468],[-79.06723,39.47649],[-79.48505,39.19954],[-79.48557,39.72158],[-75.78836,39.72181],[-75.69099,38.46058],[-75.04924,38.45816],[-75.04984,38.40222],[-75.08151,38.32321],[-75.09773,38.30907],[-75.187,38.09755],[-75.23798,38.0224],[-75.61821,37.98967],[-75.86369,37.90953],[-76.23413,37.92037]]],terms_url:"http://imap.maryland.gov/Pages/imagery-products.aspx",terms_text:"DoIT, MD iMap, MDP",description:"Six Inch resolution aerial imagery for the State of Maryland"},{id:"geodata.md.gov-MD_ThreeInchImagery",name:"MD Three Inch Aerial Imagery",type:"wms",template:"https://geodata.md.gov/imap/services/Imagery/MD_ThreeInchImagery/MapServer/WmsServer?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=MD_ThreeInchImagery&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",zoomExtent:[0,20],polygon:[[[-76.46299,38.9808],[-76.46326,38.94779],[-76.49499,38.9369],[-76.51617,38.93697],[-76.54763,38.9591],[-76.54745,38.98667],[-76.51559,39.00306],[-76.4839,39.00292],[-76.46299,38.9808]],[[-76.09548,38.84133],[-76.0428,38.8409],[-76.04289,38.8298],[-76.03229,38.8297],[-76.03277,38.79667],[-76.02545,38.79664],[-76.02541,38.77462],[-76.03308,38.77472],[-76.03366,38.73073],[-76.05462,38.73094],[-76.0548,38.72005],[-76.10753,38.72043],[-76.10714,38.75338],[-76.11754,38.75346],[-76.11701,38.79731],[-76.09601,38.79715],[-76.09548,38.84133]],[[-77.23397,39.16838],[-77.25516,39.14647],[-77.25496,39.11343],[-77.18093,39.05337],[-77.14907,39.0477],[-77.12798,39.04779],[-77.10683,39.05325],[-77.10688,39.0917],[-77.11775,39.10827],[-77.16011,39.12485],[-77.15975,39.15214],[-77.17048,39.16302],[-77.21284,39.17272],[-77.23397,39.16838]]],terms_url:"http://imap.maryland.gov/Pages/imagery-products.aspx",terms_text:"DoIT, MD iMap, MDP",description:"Three Inch Resolution Imagery for the cities of Rockville, Gaithersburg and Annapolis"},{id:"geodata.md.gov-MD_ColorBasemap",name:"MD Transportation Basemap",type:"wms",template:"https://geodata.md.gov/imap/services/Transportation/MD_ColorBasemap/MapServer/WmsServer?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetMap&FORMAT=image/png&TRANSPARENT=true&LAYERS=MD_ColorBasemap&WIDTH={width}&HEIGHT={height}&CRS={proj}&STYLES=&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[-76.23413,37.92037],[-76.59805,38.15832],[-76.94,38.27053],[-77.03819,38.41379],[-77.23526,38.33627],[-77.31216,38.41056],[-77.26273,38.56642],[-77.043,38.71338],[-77.04987,38.7937],[-76.92627,38.8925],[-77.04094,38.9845],[-77.12162,38.92523],[-77.15012,38.95514],[-77.25243,38.97543],[-77.25929,39.02425],[-77.34581,39.05492],[-77.46185,39.07038],[-77.53738,39.13965],[-77.47421,39.22481],[-77.57275,39.30428],[-77.72347,39.32899],[-77.77702,39.46323],[-77.86148,39.51622],[-77.84088,39.60886],[-77.95624,39.59299],[-78.16635,39.69556],[-78.27003,39.62156],[-78.3387,39.64007],[-78.46641,39.52364],[-78.6628,39.54006],[-78.79875,39.60622],[-78.9814,39.4468],[-79.06723,39.47649],[-79.48505,39.19954],[-79.48557,39.72158],[-75.78836,39.72181],[-75.69099,38.46058],[-75.04924,38.45816],[-75.04984,38.40222],[-75.08151,38.32321],[-75.09773,38.30907],[-75.187,38.09755],[-75.23798,38.0224],[-75.61821,37.98967],[-75.86369,37.90953],[-76.23413,37.92037]]],terms_url:"http://imap.maryland.gov/Pages/imagery-products.aspx",terms_text:"DoIT, MD iMap, MDP",description:"Maryland State Highway Administration road features and additional Maryland focused landmarks"},{id:"MCGIS-County-NAIP-Imagery-2015",name:"Mesa County GIS NAIP 2015",type:"wms",template:"https://mcgis.mesacounty.us/image/services/Mosaic_Datasets/MesaCounty_2015/ImageServer/WMSServer?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=0&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",endDate:"2015-01-01T00:00:00.000Z",startDate:"2015-01-01T00:00:00.000Z",zoomExtent:[0,20],polygon:[[[-109.06765,39.37875],[-107.37012,39.37962],[-107.36995,39.18422],[-107.49574,39.18416],[-107.49568,39.12133],[-107.62081,39.12126],[-107.62076,39.05974],[-107.68231,39.05971],[-107.68226,38.99652],[-107.81774,38.99645],[-107.81779,39.05859],[-107.86948,39.05856],[-107.86943,38.99769],[-108.05698,38.99759],[-108.05688,38.87126],[-108.18204,38.8712],[-108.18198,38.8081],[-108.37142,38.808],[-108.3711,38.43452],[-109.06685,38.43416],[-109.06765,39.37875]]],terms_url:"http://gis.mesacounty.us/",terms_text:"Mesa County GIS",icon:"https://gis.mesacounty.us/globalassets/images/county-logos/mesa-county-logo.png"},{id:"MCGIS-County-NAIP-Imagery-2017",name:"Mesa County GIS NAIP 2017",type:"wms",template:"https://mcgis.mesacounty.us/image/services/Mosaic_Datasets/NAIP_2017/ImageServer/WMSServer?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=0&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",endDate:"2017-10-24T00:00:00.000Z",startDate:"2017-08-26T00:00:00.000Z",zoomExtent:[0,13],polygon:[[[-109.06765,39.37875],[-107.37012,39.37962],[-107.36995,39.18422],[-107.49574,39.18416],[-107.49568,39.12133],[-107.62081,39.12126],[-107.62076,39.05974],[-107.68231,39.05971],[-107.68226,38.99652],[-107.81774,38.99645],[-107.81779,39.05859],[-107.86948,39.05856],[-107.86943,38.99769],[-108.05698,38.99759],[-108.05688,38.87126],[-108.18204,38.8712],[-108.18198,38.8081],[-108.37142,38.808],[-108.3711,38.43452],[-109.06685,38.43416],[-109.06765,39.37875]]],terms_url:"http://gis.mesacounty.us/",terms_text:"Mesa County GIS",icon:"https://gis.mesacounty.us/globalassets/images/county-logos/mesa-county-logo.png"},{id:"MCGIS-County-Valleywide-Imagery-2018",name:"Mesa County GIS Valleywide 2018",type:"wms",template:"https://mcgis.mesacounty.us/image/services/Mosaic_Datasets/City_Color_2018/ImageServer/WMSServer?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=0&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",endDate:"2018-01-01T00:00:00.000Z",startDate:"2018-01-01T00:00:00.000Z",zoomExtent:[0,20],polygon:[[[-108.93915,39.23931],[-108.86841,39.23846],[-108.86843,39.23734],[-108.81245,39.23666],[-108.81274,39.22256],[-108.79405,39.22234],[-108.79432,39.20857],[-108.70096,39.20745],[-108.70123,39.1939],[-108.60764,39.19277],[-108.60791,39.17906],[-108.58915,39.17884],[-108.58943,39.1649],[-108.53332,39.16422],[-108.53361,39.14993],[-108.51461,39.14971],[-108.51489,39.13611],[-108.44076,39.13522],[-108.44104,39.12109],[-108.42192,39.12086],[-108.42201,39.1163],[-108.3984,39.11602],[-108.39798,39.13708],[-108.32446,39.13619],[-108.32416,39.15107],[-108.30718,39.15087],[-108.3066,39.18],[-108.28866,39.17979],[-108.28807,39.20939],[-108.26868,39.20916],[-108.26957,39.16484],[-108.2864,39.16505],[-108.28699,39.13571],[-108.30312,39.13591],[-108.3038,39.10194],[-108.32335,39.10218],[-108.32328,39.10574],[-108.32914,39.10581],[-108.32943,39.09121],[-108.34736,39.09142],[-108.34764,39.07715],[-108.36637,39.07738],[-108.36666,39.06268],[-108.38569,39.06291],[-108.38599,39.04799],[-108.42216,39.04843],[-108.42245,39.03377],[-108.44051,39.03399],[-108.44137,38.99101],[-108.42193,38.99077],[-108.42252,38.96127],[-108.44162,38.9615],[-108.44133,38.97595],[-108.46034,38.97618],[-108.46006,38.99024],[-108.47877,38.99047],[-108.47848,39.00485],[-108.51515,39.0053],[-108.51519,39.00287],[-108.51825,39.00291],[-108.51821,39.00517],[-108.53414,39.00536],[-108.53397,39.0139],[-108.54342,39.01401],[-108.54336,39.01733],[-108.5455,39.01735],[-108.54548,39.01855],[-108.65864,39.01991],[-108.65778,39.06287],[-108.67867,39.06313],[-108.67837,39.07793],[-108.69699,39.07816],[-108.69671,39.09203],[-108.71557,39.09225],[-108.71529,39.10619],[-108.7388,39.10648],[-108.73853,39.12033],[-108.75744,39.12056],[-108.75686,39.14927],[-108.79422,39.14972],[-108.79393,39.16386],[-108.83224,39.16432],[-108.83196,39.17845],[-108.85061,39.17868],[-108.85033,39.19302],[-108.86938,39.19325],[-108.86906,39.20925],[-108.90237,39.20965],[-108.90208,39.22384],[-108.93946,39.22429],[-108.93915,39.23931]]],terms_url:"http://gis.mesacounty.us/",terms_text:"Mesa County GIS",icon:"https://gis.mesacounty.us/globalassets/images/county-logos/mesa-county-logo.png"},{id:"Metropole_Ruhr_RVR-DOP10",name:"Metropole Ruhr: Luftbilder (10 cm)",type:"wms",template:"https://geodaten.metropoleruhr.de/dop/dop?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=DOP&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[6.51691,51.81714],[6.52258,51.81469],[6.52281,51.81041],[6.52834,51.81053],[6.53991,51.80134],[6.5511,51.799],[6.56818,51.78992],[6.57476,51.79606],[6.58457,51.79369],[6.59102,51.8024],[6.60911,51.80019],[6.61081,51.79423],[6.63264,51.79981],[6.65946,51.7892],[6.66837,51.77738],[6.7138,51.78084],[6.70876,51.77131],[6.72131,51.76899],[6.7475,51.77035],[6.74862,51.77551],[6.75824,51.77656],[6.7698,51.76649],[6.77219,51.74596],[6.78862,51.74884],[6.79861,51.74217],[6.81927,51.74341],[6.81956,51.73741],[6.82683,51.72983],[6.8403,51.73694],[6.84995,51.73712],[6.85551,51.73636],[6.8586,51.72956],[6.9103,51.74592],[6.90861,51.75275],[6.91511,51.76144],[6.9157,51.7786],[6.93527,51.7738],[6.95606,51.77245],[6.97559,51.79936],[6.98794,51.80129],[6.99485,51.80141],[6.99497,51.79884],[7.02118,51.80014],[7.0244,51.7899],[7.03141,51.78745],[7.0316,51.78317],[7.03847,51.78414],[7.05392,51.77839],[7.06079,51.77936],[7.0609,51.77679],[7.07333,51.777],[7.07867,51.78137],[7.11433,51.78795],[7.13435,51.80542],[7.1616,51.81528],[7.16419,51.8196],[7.19177,51.82174],[7.2141,51.81694],[7.22121,51.81191],[7.23658,51.80785],[7.23668,51.80528],[7.24916,51.80461],[7.2535,51.79953],[7.26179,51.79966],[7.26485,51.79198],[7.26245,51.78252],[7.27229,51.77838],[7.26002,51.77391],[7.26012,51.77134],[7.2688,51.76118],[7.27577,51.75957],[7.27889,51.75019],[7.31079,51.74636],[7.3151,51.74214],[7.31519,51.73957],[7.31102,51.74036],[7.3125,51.73781],[7.32081,51.73707],[7.31169,51.72237],[7.29963,51.71277],[7.2985,51.70589],[7.31069,51.71207],[7.30825,51.70346],[7.32762,51.70202],[7.33057,51.69692],[7.34427,51.69969],[7.34599,51.69028],[7.33919,51.68761],[7.35589,51.68356],[7.35877,51.68017],[7.3781,51.67959],[7.39086,51.66947],[7.40617,51.6654],[7.41031,51.66545],[7.4101,51.67145],[7.43089,51.6683],[7.43892,51.67527],[7.44854,51.67625],[7.44933,51.69341],[7.44094,51.69673],[7.43792,51.7044],[7.42406,51.70593],[7.42245,51.71277],[7.43451,51.72321],[7.44825,51.72511],[7.46718,51.7365],[7.47273,51.73572],[7.4771,51.72892],[7.4826,51.72985],[7.47877,51.72037],[7.48435,51.71872],[7.48449,51.71444],[7.49119,51.72053],[7.49947,51.72063],[7.50214,51.72324],[7.51738,51.72172],[7.51788,51.70629],[7.53035,51.70473],[7.52922,51.69701],[7.53349,51.69277],[7.54458,51.6912],[7.5378,51.68768],[7.54477,51.6852],[7.5528,51.69301],[7.56651,51.69575],[7.56642,51.69832],[7.58706,51.70029],[7.59379,51.70551],[7.6048,51.7065],[7.60743,51.71082],[7.6143,51.71176],[7.61419,51.71518],[7.62663,51.71447],[7.62814,51.7102],[7.64321,51.71381],[7.6531,51.70621],[7.65428,51.71308],[7.668,51.71581],[7.66915,51.72353],[7.68832,51.72889],[7.69283,51.71608],[7.7012,51.71275],[7.71352,51.71631],[7.71481,51.71976],[7.71899,51.71809],[7.71749,51.72236],[7.72163,51.7224],[7.72555,51.73016],[7.73659,51.73028],[7.73638,51.73799],[7.75154,51.73901],[7.7699,51.72378],[7.77119,51.72722],[7.78908,51.72912],[7.79037,51.73256],[7.80282,51.73183],[7.80137,51.73439],[7.80825,51.73531],[7.81228,51.73964],[7.82058,51.73887],[7.82457,51.74491],[7.83287,51.74413],[7.83314,51.73385],[7.83739,51.72961],[7.85815,51.72724],[7.85822,51.72467],[7.86374,51.72472],[7.87187,51.7308],[7.87745,51.72828],[7.88038,51.72145],[7.88875,51.7181],[7.88912,51.70267],[7.90148,51.70536],[7.90568,51.70283],[7.91249,51.70632],[7.92768,51.7056],[7.92912,51.70305],[7.94014,51.704],[7.93746,51.70055],[7.94296,51.70146],[7.96108,51.69305],[7.97631,51.69061],[7.97779,51.68633],[7.9875,51.68385],[7.98761,51.67871],[7.99732,51.67622],[7.9974,51.67279],[7.98365,51.67096],[7.96286,51.67592],[7.95466,51.67242],[7.95366,51.65612],[7.94689,51.65092],[7.94984,51.64237],[7.94443,51.63804],[7.93477,51.6388],[7.93224,51.62935],[7.92406,51.62585],[7.92414,51.62242],[7.91195,51.61374],[7.91632,51.60349],[7.91378,51.59489],[7.87529,51.59282],[7.86837,51.59446],[7.85742,51.59179],[7.85889,51.58837],[7.82749,51.57863],[7.84327,51.55307],[7.83262,51.53925],[7.83277,51.53325],[7.84115,51.52819],[7.8345,51.51955],[7.83755,51.50758],[7.83212,51.50496],[7.83912,51.49988],[7.83923,51.4956],[7.84474,51.49479],[7.8506,51.48028],[7.83418,51.4784],[7.82198,51.47228],[7.80819,51.47471],[7.79876,51.46776],[7.78906,51.47109],[7.76169,51.46823],[7.74785,51.47237],[7.7425,51.46717],[7.73567,51.46623],[7.72864,51.47216],[7.69838,51.4744],[7.67525,51.46728],[7.65606,51.46621],[7.65347,51.46103],[7.63843,51.45914],[7.63589,51.45226],[7.62083,51.45122],[7.61407,51.44772],[7.61977,51.44092],[7.62525,51.44099],[7.62127,51.43666],[7.62825,51.43245],[7.62561,51.42899],[7.63125,51.42391],[7.61633,51.41859],[7.62183,51.4178],[7.62196,51.41352],[7.63313,51.40679],[7.61322,51.38512],[7.60485,51.39017],[7.60609,51.39447],[7.59647,51.39521],[7.58704,51.38995],[7.59,51.38313],[7.58465,51.37878],[7.58644,51.36509],[7.59234,51.35144],[7.59934,51.34638],[7.59257,51.34373],[7.59407,51.33946],[7.58186,51.33588],[7.58334,51.33247],[7.57655,51.33067],[7.57816,51.32298],[7.58373,51.31962],[7.57837,51.31612],[7.58134,51.30844],[7.58547,51.30763],[7.58305,51.29732],[7.56826,51.28942],[7.56582,51.27996],[7.55089,51.27635],[7.54977,51.26862],[7.52923,51.27008],[7.52797,51.26663],[7.51302,51.26387],[7.51049,51.25784],[7.50371,51.25604],[7.50385,51.25175],[7.49563,51.2525],[7.49438,51.24906],[7.49708,51.24995],[7.50271,51.24488],[7.50143,51.24229],[7.48262,51.23262],[7.469,51.23158],[7.46505,51.22724],[7.45129,51.23049],[7.44191,51.22522],[7.44478,51.22098],[7.43534,51.21742],[7.43816,51.21489],[7.43413,51.21312],[7.42995,51.21563],[7.42962,51.22506],[7.42408,51.22756],[7.41182,51.22653],[7.41342,51.2197],[7.39824,51.22463],[7.39521,51.23317],[7.40319,51.23928],[7.3934,51.246],[7.38793,51.24593],[7.38672,51.24162],[7.37853,51.24151],[7.37289,51.24657],[7.35526,51.2429],[7.35405,51.23859],[7.34849,51.24109],[7.339,51.23924],[7.33872,51.24695],[7.32904,51.25024],[7.3238,51.24417],[7.31284,51.24487],[7.31027,51.24054],[7.30481,51.24046],[7.29643,51.24549],[7.29764,51.24979],[7.28262,51.24957],[7.27541,51.25975],[7.2715,51.25455],[7.26734,51.25621],[7.26578,51.26133],[7.27623,51.27434],[7.26764,51.2845],[7.25531,51.28518],[7.26537,51.30847],[7.26521,51.31276],[7.25974,51.31268],[7.26511,51.31533],[7.26365,51.31788],[7.23393,51.308],[7.22973,51.31051],[7.2271,51.3079],[7.22296,51.3087],[7.22309,51.30527],[7.20682,51.30159],[7.20026,51.29463],[7.18792,51.2953],[7.18232,51.29864],[7.16869,51.29757],[7.18065,51.30633],[7.16674,51.31211],[7.16924,51.31815],[7.16503,51.32066],[7.1662,51.32582],[7.15645,51.32996],[7.15351,51.33505],[7.14807,51.33411],[7.14927,51.33842],[7.14513,51.33921],[7.15292,51.34962],[7.14882,51.34956],[7.14731,51.35296],[7.15665,51.35911],[7.15911,51.36601],[7.15189,51.37532],[7.14634,51.37695],[7.13957,51.37513],[7.13802,51.37939],[7.13262,51.37759],[7.127,51.38093],[7.12163,51.37827],[7.12153,51.38084],[7.11742,51.38078],[7.11626,51.37561],[7.11215,51.37555],[7.11205,51.37812],[7.1039,51.37627],[7.09853,51.37361],[7.10004,51.37021],[7.0919,51.36836],[7.08765,51.37172],[7.08088,51.3699],[7.07796,51.37414],[7.0552,51.36176],[7.04973,51.36167],[7.04404,51.36671],[7.03604,51.36144],[7.01944,51.36544],[7.01,51.36185],[7.00745,51.35752],[6.98689,51.35803],[6.98301,51.35282],[6.97743,51.35529],[6.97621,51.35184],[6.96545,51.34737],[6.95033,51.34882],[6.94748,51.35134],[6.9257,51.34839],[6.92422,51.35093],[6.92825,51.35272],[6.92137,51.35346],[6.92391,51.35779],[6.90565,51.36775],[6.90022,51.3668],[6.8904,51.37176],[6.87848,51.36297],[6.86745,51.36449],[6.85115,51.36162],[6.84552,51.36495],[6.84991,51.35903],[6.83385,51.35101],[6.82295,51.34995],[6.81731,51.35328],[6.81615,51.34897],[6.80939,51.34713],[6.80649,51.3505],[6.7941,51.35198],[6.79314,51.34339],[6.77673,51.34308],[6.7475,51.35281],[6.73831,51.34492],[6.72749,51.34214],[6.71287,51.33328],[6.69193,51.34144],[6.66428,51.3469],[6.65435,51.35356],[6.65789,51.36477],[6.67409,51.36938],[6.67794,51.3746],[6.67511,51.37626],[6.6684,51.37356],[6.67309,51.38908],[6.66081,51.38798],[6.65693,51.38362],[6.64602,51.38254],[6.64443,51.3868],[6.63626,51.38577],[6.63586,51.39348],[6.611,51.39726],[6.59479,51.39265],[6.57148,51.39302],[6.56618,51.38948],[6.55797,51.38931],[6.55496,51.39439],[6.54679,51.39337],[6.54505,51.40019],[6.53816,51.4009],[6.52939,51.41101],[6.52596,51.42379],[6.5149,51.42527],[6.51453,51.43213],[6.51987,51.43481],[6.52092,51.44084],[6.51119,51.4432],[6.50821,51.44743],[6.50273,51.44731],[6.50198,51.46101],[6.50709,51.46798],[6.49868,51.47123],[6.49698,51.4772],[6.49012,51.47705],[6.48714,51.48127],[6.4818,51.47859],[6.47608,51.48275],[6.47404,51.49471],[6.46699,51.49799],[6.46245,51.50561],[6.45407,51.508],[6.45497,51.51659],[6.44796,51.51901],[6.45326,51.52255],[6.44876,51.52931],[6.45562,51.52946],[6.47816,51.51966],[6.47499,51.52731],[6.48673,51.53871],[6.46262,51.55191],[6.49612,51.56806],[6.46176,51.56732],[6.42276,51.5759],[6.41912,51.56725],[6.40847,51.56101],[6.38918,51.56144],[6.37657,51.56545],[6.36951,51.56872],[6.36916,51.57471],[6.37726,51.57747],[6.37284,51.58251],[6.37372,51.59111],[6.35235,51.60349],[6.33482,51.59709],[6.32362,51.60026],[6.32067,51.60363],[6.33275,51.60905],[6.33392,51.6125],[6.30035,51.62117],[6.30143,51.62633],[6.29113,51.63725],[6.29225,51.64156],[6.29903,51.64343],[6.32563,51.63632],[6.32819,51.63981],[6.35403,51.64554],[6.35313,51.66095],[6.36553,51.66123],[6.36262,51.66374],[6.37069,51.66735],[6.38091,51.6813],[6.38062,51.68643],[6.37195,51.6931],[6.35808,51.6945],[6.35482,51.703],[6.3682,51.71016],[6.37642,51.7112],[6.38041,51.71387],[6.37731,51.7198],[6.38829,51.7209],[6.38789,51.72775],[6.40932,51.73937],[6.41055,51.74197],[6.40346,51.74524],[6.40597,51.74959],[6.40178,51.75035],[6.40287,51.75552],[6.41405,51.75319],[6.42134,51.7465],[6.42188,51.73708],[6.40877,51.72478],[6.40921,51.71708],[6.4164,51.71209],[6.44839,51.70765],[6.46246,51.70281],[6.47677,51.71855],[6.48908,51.72053],[6.48418,51.73414],[6.48942,51.7394],[6.48908,51.74539],[6.48171,51.75381],[6.53363,51.76434],[6.52478,51.77444],[6.50784,51.78094],[6.4898,51.80714],[6.48961,51.81056],[6.51162,51.81274],[6.51691,51.81714]]],terms_url:"https://www.metropoleruhr.de/regionalverband-ruhr.html",terms_text:"Datengrundlage: Regionalverband Ruhr"},{id:"miljodirektoratet-vern",name:"Miljødirektoratet Protected Areas overlay",type:"wms",template:"https://kart.miljodirektoratet.no/arcgis/services/vern/MapServer/WmsServer?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=naturvern_klasser_omrade&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",zoomExtent:[0,22],polygon:[[[-10.95725,71.60964],[-6.16765,71.62095],[-6.13756,70.30991],[-10.92717,70.29784],[-10.95725,71.60964]],[[16.81947,74.9482],[21.25771,74.94213],[21.23712,73.8918],[16.79889,73.89828],[16.81947,74.9482]],[[4.04288,79.93593],[20.65421,81.54417],[36.6503,80.40108],[26.76265,75.8129],[13.88667,75.79135],[4.04288,79.93593]],[[31.90425,70.43681],[28.47652,71.32896],[23.6865,71.25143],[16.80906,70.07308],[11.16207,67.52539],[9.97554,64.81158],[4.21871,62.145],[4.37254,59.1872],[6.17431,57.8915],[7.93212,57.73936],[10.77758,58.86491],[11.7224,58.76251],[12.72216,60.11415],[13.05175,61.34935],[12.52439,63.61699],[14.23826,63.98561],[15.11717,65.90166],[18.69871,68.37491],[20.06101,68.26126],[21.00584,68.78415],[25.24656,68.3506],[26.93845,69.8472],[28.76219,69.61121],[28.5864,68.8556],[31.06931,69.51915],[31.90425,70.43681]]],terms_url:"https://kart.naturbase.no",terms_text:"© Miljødirektoratet",description:"Norwegian national parks, nature reserves and other protected areas and objects from Naturbase, including Svalbard/Spitsbergen",icon:"http://www.miljodirektoratet.no/Framework/favicon-32.png",overlay:true},{id:"miljodirektoratet-friluftsomrader",name:"Miljødirektoratet Public Recreation Areas overlay",type:"wms",template:"https://kart.miljodirektoratet.no/arcgis/services/friluftsliv_statlig_sikra/MapServer/WmsServer?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=friluftsliv_statlig_sikra&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",zoomExtent:[0,22],polygon:[[[31.90425,70.43681],[28.47652,71.32896],[23.6865,71.25143],[16.80906,70.07308],[11.16207,67.52539],[9.97554,64.81158],[4.21871,62.145],[4.37254,59.1872],[6.17431,57.8915],[7.93212,57.73936],[10.77758,58.86491],[11.7224,58.76251],[12.72216,60.11415],[13.05175,61.34935],[12.52439,63.61699],[14.23826,63.98561],[15.11717,65.90166],[18.69871,68.37491],[20.06101,68.26126],[21.00584,68.78415],[25.24656,68.3506],[26.93845,69.8472],[28.76219,69.61121],[28.5864,68.8556],[31.06931,69.51915],[31.90425,70.43681]]],terms_url:"http://www.miljostatus.no/tema/friluftsliv/statlig-sikra-friluftlivsomrader/",terms_text:"© Miljødirektoratet",description:"Public recreation areas with State ownership (\"friluftsområder\").",icon:"http://www.miljodirektoratet.no/Framework/favicon-32.png",overlay:true},{id:"minador_do_negrao",name:"Minador do Negrão",type:"wms",template:"http://geoserver.dados.al.gov.br:8080/geoserver/Alagoas/ows?LAYERS=Minador%20do%20Negrao&SERVICE=WMS&FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.0&SERVICE=WMS&REQUEST=GetMap&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[-36.8196,-9.35174],[-36.82017,-9.26142],[-36.82465,-9.26133],[-36.83064,-9.26147],[-36.83673,-9.2615],[-36.84228,-9.26148],[-36.84562,-9.2616],[-36.85564,-9.2616],[-36.86214,-9.26159],[-36.8659,-9.26147],[-36.86724,-9.2615],[-36.86952,-9.26149],[-36.87127,-9.26157],[-36.87476,-9.26153],[-36.87816,-9.26163],[-36.88321,-9.2617],[-36.88565,-9.26167],[-36.88857,-9.26148],[-36.89217,-9.26151],[-36.89383,-9.26163],[-36.8974,-9.26175],[-36.91122,-9.26183],[-36.9111,-9.26651],[-36.91112,-9.28542],[-36.91121,-9.29066],[-36.91118,-9.29368],[-36.91099,-9.29929],[-36.91091,-9.30729],[-36.9109,-9.3123],[-36.91083,-9.31597],[-36.91084,-9.32013],[-36.91098,-9.32395],[-36.91099,-9.32587],[-36.91079,-9.32964],[-36.91079,-9.33523],[-36.91074,-9.33944],[-36.91092,-9.34311],[-36.91084,-9.34471],[-36.91066,-9.35229],[-36.89277,-9.35225],[-36.87735,-9.35212],[-36.86463,-9.35203],[-36.85761,-9.35194],[-36.84344,-9.35191],[-36.83115,-9.3518],[-36.8196,-9.35174]]],terms_url:"http://www.seplag.al.gov.br",terms_text:"Secretaria de Estado do Planejamento, Gestão e Patrimônio"},{id:"mml-tausta",name:"MML Background Map",type:"tms",template:"http://tiles.kartat.kapsi.fi/taustakartta/{zoom}/{x}/{y}.jpg",zoomExtent:[2,19],polygon:[[[27.96569,70.0988],[27.57431,70.07728],[27.10876,69.93548],[26.70913,69.97549],[26.45507,69.94207],[25.87142,69.6671],[25.94833,69.61024],[25.83023,69.55323],[25.66955,69.20794],[25.73822,69.01797],[25.60089,68.90309],[25.45806,68.91199],[25.11749,68.80699],[25.07354,68.64355],[24.88128,68.62003],[23.97491,68.84568],[23.74969,68.8308],[23.63433,68.71645],[23.18939,68.68053],[22.52197,68.7553],[21.63894,69.28191],[21.26953,69.31783],[20.94131,69.21622],[21.08963,69.09307],[21.05941,69.04352],[20.72296,69.12491],[20.54443,69.0558],[20.84655,68.97416],[20.81634,68.91742],[21.38754,68.68461],[22.04734,68.47066],[22.80212,68.35464],[23.12072,68.13169],[23.5437,67.9633],[23.44757,67.8393],[23.48602,67.59352],[23.36517,67.46545],[23.71124,67.41592],[23.72772,67.32186],[23.54644,67.26885],[23.53128,67.16724],[23.89251,66.86863],[23.84582,66.57775],[23.61843,66.44562],[23.67171,66.20303],[23.87191,66.14551],[24.09988,65.87247],[24.1658,65.66959],[24.11636,65.39143],[21.37939,63.68037],[20.17639,63.29787],[19.08325,60.16064],[20.22033,59.44786],[22.29125,59.44507],[25.82336,59.933],[27.52075,60.23435],[27.83386,60.53229],[29.29641,61.26165],[31.20803,62.44759],[31.62826,62.90585],[31.2635,63.22106],[29.99605,63.75387],[30.28656,63.81704],[30.58319,64.0782],[30.5104,64.26428],[30.09979,64.39218],[30.02563,64.58736],[30.16845,64.63329],[30.09429,64.79518],[29.78393,64.79811],[29.65347,64.89733],[29.65759,65.05939],[29.91027,65.09527],[29.93225,65.20895],[29.72076,65.27853],[29.91577,65.63788],[30.1863,65.66223],[29.9913,66.09771],[29.07119,66.91983],[30.11077,67.63431],[29.3486,68.08099],[28.67568,68.20166],[28.46547,68.54039],[28.72375,68.72642],[28.82675,68.87341],[28.44985,68.90792],[28.95996,69.05089],[28.83324,69.10563],[28.87207,69.22132],[29.36096,69.46526],[29.15634,69.69667],[28.38455,69.83488],[28.35845,69.88312],[28.17169,69.92511],[28.00415,70.01495],[27.96569,70.0988]]],terms_url:"https://www.maanmittauslaitos.fi/en/",terms_text:"© Maanmittauslaitos",description:"Background map from the National Land Survey of Finland",icon:"https://www.maanmittauslaitos.fi/apple-touch-icon.png"},{id:"mml-orto",name:"MML Orthophoto",type:"tms",template:"http://tiles.kartat.kapsi.fi/ortokuva/{zoom}/{x}/{y}.jpg",zoomExtent:[2,19],polygon:[[[27.96569,70.0988],[27.57431,70.07728],[27.10876,69.93548],[26.70913,69.97549],[26.45507,69.94207],[25.87142,69.6671],[25.94833,69.61024],[25.83023,69.55323],[25.66955,69.20794],[25.73822,69.01797],[25.60089,68.90309],[25.45806,68.91199],[25.11749,68.80699],[25.07354,68.64355],[24.88128,68.62003],[23.97491,68.84568],[23.74969,68.8308],[23.63433,68.71645],[23.18939,68.68053],[22.52197,68.7553],[21.63894,69.28191],[21.26953,69.31783],[20.94131,69.21622],[21.08963,69.09307],[21.05941,69.04352],[20.72296,69.12491],[20.54443,69.0558],[20.84655,68.97416],[20.81634,68.91742],[21.38754,68.68461],[22.04734,68.47066],[22.80212,68.35464],[23.12072,68.13169],[23.5437,67.9633],[23.44757,67.8393],[23.48602,67.59352],[23.36517,67.46545],[23.71124,67.41592],[23.72772,67.32186],[23.54644,67.26885],[23.53128,67.16724],[23.89251,66.86863],[23.84582,66.57775],[23.61843,66.44562],[23.67171,66.20303],[23.87191,66.14551],[24.09988,65.87247],[24.1658,65.66959],[24.11636,65.39143],[21.37939,63.68037],[20.17639,63.29787],[19.08325,60.16064],[20.22033,59.44786],[22.29125,59.44507],[25.82336,59.933],[27.52075,60.23435],[27.83386,60.53229],[29.29641,61.26165],[31.20803,62.44759],[31.62826,62.90585],[31.2635,63.22106],[29.99605,63.75387],[30.28656,63.81704],[30.58319,64.0782],[30.5104,64.26428],[30.09979,64.39218],[30.02563,64.58736],[30.16845,64.63329],[30.09429,64.79518],[29.78393,64.79811],[29.65347,64.89733],[29.65759,65.05939],[29.91027,65.09527],[29.93225,65.20895],[29.72076,65.27853],[29.91577,65.63788],[30.1863,65.66223],[29.9913,66.09771],[29.07119,66.91983],[30.11077,67.63431],[29.3486,68.08099],[28.67568,68.20166],[28.46547,68.54039],[28.72375,68.72642],[28.82675,68.87341],[28.44985,68.90792],[28.95996,69.05089],[28.83324,69.10563],[28.87207,69.22132],[29.36096,69.46526],[29.15634,69.69667],[28.38455,69.83488],[28.35845,69.88312],[28.17169,69.92511],[28.00415,70.01495],[27.96569,70.0988]]],terms_url:"https://www.maanmittauslaitos.fi/en/",terms_text:"© Maanmittauslaitos",best:true,description:"Ortophotos from the National Land Survey of Finland",icon:"https://www.maanmittauslaitos.fi/apple-touch-icon.png"},{id:"mml-topo",name:"MML Topographic Map",type:"tms",template:"http://tiles.kartat.kapsi.fi/peruskartta/{zoom}/{x}/{y}.jpg",zoomExtent:[2,19],polygon:[[[27.96569,70.0988],[27.57431,70.07728],[27.10876,69.93548],[26.70913,69.97549],[26.45507,69.94207],[25.87142,69.6671],[25.94833,69.61024],[25.83023,69.55323],[25.66955,69.20794],[25.73822,69.01797],[25.60089,68.90309],[25.45806,68.91199],[25.11749,68.80699],[25.07354,68.64355],[24.88128,68.62003],[23.97491,68.84568],[23.74969,68.8308],[23.63433,68.71645],[23.18939,68.68053],[22.52197,68.7553],[21.63894,69.28191],[21.26953,69.31783],[20.94131,69.21622],[21.08963,69.09307],[21.05941,69.04352],[20.72296,69.12491],[20.54443,69.0558],[20.84655,68.97416],[20.81634,68.91742],[21.38754,68.68461],[22.04734,68.47066],[22.80212,68.35464],[23.12072,68.13169],[23.5437,67.9633],[23.44757,67.8393],[23.48602,67.59352],[23.36517,67.46545],[23.71124,67.41592],[23.72772,67.32186],[23.54644,67.26885],[23.53128,67.16724],[23.89251,66.86863],[23.84582,66.57775],[23.61843,66.44562],[23.67171,66.20303],[23.87191,66.14551],[24.09988,65.87247],[24.1658,65.66959],[24.11636,65.39143],[21.37939,63.68037],[20.17639,63.29787],[19.08325,60.16064],[20.22033,59.44786],[22.29125,59.44507],[25.82336,59.933],[27.52075,60.23435],[27.83386,60.53229],[29.29641,61.26165],[31.20803,62.44759],[31.62826,62.90585],[31.2635,63.22106],[29.99605,63.75387],[30.28656,63.81704],[30.58319,64.0782],[30.5104,64.26428],[30.09979,64.39218],[30.02563,64.58736],[30.16845,64.63329],[30.09429,64.79518],[29.78393,64.79811],[29.65347,64.89733],[29.65759,65.05939],[29.91027,65.09527],[29.93225,65.20895],[29.72076,65.27853],[29.91577,65.63788],[30.1863,65.66223],[29.9913,66.09771],[29.07119,66.91983],[30.11077,67.63431],[29.3486,68.08099],[28.67568,68.20166],[28.46547,68.54039],[28.72375,68.72642],[28.82675,68.87341],[28.44985,68.90792],[28.95996,69.05089],[28.83324,69.10563],[28.87207,69.22132],[29.36096,69.46526],[29.15634,69.69667],[28.38455,69.83488],[28.35845,69.88312],[28.17169,69.92511],[28.00415,70.01495],[27.96569,70.0988]]],terms_url:"https://www.maanmittauslaitos.fi/en/",terms_text:"© Maanmittauslaitos",description:"Topographic map from the National Land Survey of Finland",icon:"https://www.maanmittauslaitos.fi/apple-touch-icon.png"},{id:"mtbmap-no",name:"MTBmap.no",type:"tms",template:"https://mtbmap.no/tiles/osm/mtbmap/{zoom}/{x}/{y}.jpg",tileSize:512,zoomExtent:[3,14],polygon:[[[31.90425,70.43681],[28.47652,71.32896],[23.6865,71.25143],[16.80906,70.07308],[11.16207,67.52539],[9.97554,64.81158],[4.21871,62.145],[4.37254,59.1872],[6.17431,57.8915],[7.93212,57.73936],[10.77758,58.86491],[11.7224,58.76251],[12.72216,60.11415],[13.05175,61.34935],[12.52439,63.61699],[14.23826,63.98561],[15.11717,65.90166],[18.69871,68.37491],[20.06101,68.26126],[21.00584,68.78415],[25.24656,68.3506],[26.93845,69.8472],[28.76219,69.61121],[28.5864,68.8556],[31.06931,69.51915],[31.90425,70.43681]]],terms_url:"https://www.mtbmap.no/",terms_text:"© MTBmap.no",description:"Norwegian mountain biking map from OSM (max zoom 14-16, varies per region)",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/no/MTBmapno.png"},{id:"MunichLatestAerialImagery",name:"Munich latest aerial imagery 60cm",type:"wms",template:"https://ogc.muenchen.de/wms/opendata_luftbild?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=bgl0&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",endDate:"2015-01-01T00:00:00.000Z",startDate:"2015-01-01T00:00:00.000Z",zoomExtent:[11,22],polygon:[[[11.48878,48.053],[11.55589,48.05323],[11.55583,48.06224],[11.56915,48.06229],[11.56908,48.07128],[11.64986,48.07155],[11.64993,48.06256],[11.70326,48.06274],[11.70313,48.08074],[11.71673,48.08079],[11.71667,48.08968],[11.7299,48.08972],[11.72963,48.12566],[11.74313,48.1257],[11.74292,48.15276],[11.72943,48.15271],[11.72936,48.16152],[11.71612,48.16147],[11.71592,48.18859],[11.7027,48.18855],[11.70263,48.19752],[11.67558,48.19743],[11.67537,48.22446],[11.66176,48.22441],[11.66169,48.23355],[11.64863,48.2335],[11.64857,48.24246],[11.54064,48.2421],[11.54058,48.25093],[11.52735,48.25088],[11.52728,48.26001],[11.47335,48.25983],[11.47356,48.23291],[11.46014,48.23287],[11.46021,48.22373],[11.43336,48.22364],[11.43343,48.21439],[11.3798,48.21421],[11.37987,48.20518],[11.36607,48.20514],[11.36621,48.18741],[11.35259,48.18737],[11.35266,48.17817],[11.33946,48.17813],[11.33973,48.14216],[11.36684,48.14225],[11.36697,48.12443],[11.38083,48.12448],[11.3809,48.11558],[11.44769,48.1158],[11.44804,48.07087],[11.46186,48.07091],[11.46193,48.06193],[11.48872,48.06202],[11.48878,48.053]]],terms_url:"http://www.geodatenservice-muenchen.de/",terms_text:"Datenquelle: dl-de/by-2-0: Landeshauptstadt München – Kommunalreferat – GeodatenService – www.geodatenservice-muenchen.de",icon:"https://www.muenchen.de/media/css/images/favicon_114x114.png"},{id:"openlabs-geoportal-public-transport",name:"Municipality of Tirana - Public Transport (Open Labs GeoPortal) (overlay)",type:"tms",template:"https://geoportal.openlabs.cc/mapcache/tms/1.0.0/public-transport@GoogleMapsCompatibleExtended/{zoom}/{x}/{-y}.png",endDate:"2017-01-01T00:00:00.000Z",startDate:"2017-01-01T00:00:00.000Z",zoomExtent:[0,21],polygon:[[[19.73762,41.30154],[19.88628,41.27213],[19.86877,41.38582],[19.68338,41.3732],[19.73762,41.30154]]],terms_url:"https://geoportal.openlabs.cc/",terms_text:"Data provided by the Muncipality of Tirana hosted by Open Labs",description:"Bus stops & lines provided by the Muncipality of Tirana hosted by Open Labs",overlay:true},{id:"openlabs-geoportal-tirana",name:"Municipality of Tirana (Open Labs GeoPortal)",type:"tms",template:"https://geoportal.openlabs.cc/mapcache/tms/1.0.0/tirana@GoogleMapsCompatibleExtended/{zoom}/{x}/{-y}.png",endDate:"2017-01-01T00:00:00.000Z",startDate:"2017-01-01T00:00:00.000Z",zoomExtent:[0,21],polygon:[[[19.70226,41.1404],[19.77573,41.11868],[19.86431,41.12126],[20.24986,41.3495],[20.03082,41.41184],[19.92577,41.5204],[19.88869,41.50755],[19.88937,41.42265],[19.81659,41.46177],[19.7335,41.43037],[19.74174,41.37887],[19.65797,41.37475],[19.57214,41.24322],[19.61815,41.22567],[19.67171,41.22722],[19.70226,41.1404]]],terms_url:"https://geoportal.openlabs.cc",terms_text:"Data provided by the Muncipality of Tirana hosted by Open Labs",description:"Streets & Builings provided by the Muncipality of Tirana hosted by Open Labs"},{id:"NC-US",name:"NC Latest Orthoimagery",type:"wms",template:"https://services.nconemap.gov/secure/services/Imagery/Orthoimagery_Latest/ImageServer/WMSServer?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=0&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",endDate:"2014-01-01T00:00:00.000Z",startDate:"2010-01-01T00:00:00.000Z",polygon:[[[-81.6792,36.5974],[-80.25359,36.54793],[-75.8409,36.5671],[-75.4323,35.6441],[-75.50475,35.18806],[-75.70525,35.17684],[-76.14745,34.94077],[-76.53472,34.55487],[-76.69676,34.66789],[-77.27904,34.53224],[-77.68828,34.26482],[-77.9435,33.8269],[-78.21288,33.89402],[-78.5301,33.8304],[-79.6693,34.7916],[-80.8122,34.8085],[-80.84685,34.96329],[-80.95122,35.05552],[-81.06383,35.01729],[-81.07482,35.13417],[-82.3632,35.1805],[-82.9989,34.9919],[-84.3333,34.9767],[-84.27184,35.28229],[-84.09056,35.27332],[-83.91478,35.53301],[-83.55498,35.5911],[-83.2556,35.73392],[-82.98644,35.81414],[-82.92327,35.96767],[-82.67882,36.0854],[-82.60192,36.08984],[-82.536,35.96989],[-82.35472,36.14752],[-82.04436,36.14309],[-81.90428,36.33803],[-81.74224,36.37342],[-81.6792,36.5974]]],description:"Most recent true color imagery for the state of North Carolina. The imagery has a pixel resolution of 6 inches and is comprised of imagery flown in 2010, 2012, 2013, and 2014"},{id:"landsat-niger-2012_10",name:"Niger Delta Oct 2012 Landsat",type:"tms",template:"http://{switch:a,b,c,d}.imagery.paulnorman.ca/tiles/niger_oct_2012_321/{zoom}/{x}/{y}.png",endDate:"2012-10-01T00:00:00.000Z",startDate:"2012-10-01T00:00:00.000Z",zoomExtent:[1,13],polygon:[[[-6.92922,13.78574],[-5.13295,13.51884],[-5.07802,13.74039],[-3.60036,13.52418],[-3.54543,13.74039],[-2.06227,13.52685],[-1.3564,16.58454],[-3.17464,16.85285],[-3.22408,16.62665],[-4.72371,16.85022],[-4.76766,16.63455],[-6.27553,16.84759],[-6.92922,13.78574]]]},{id:"geodata.state.nj.us-Infrared2015",name:"NJ 2015 Aerial Imagery (Infrared)",type:"wms",template:"https://geodata.state.nj.us/imagerywms/Infrared2015?FORMAT=image/png&SERVICE=WMS&VERSION=1.1.1&REQUEST=GetMap&SRS={proj}&WIDTH={width}&HEIGHT={height}&LAYERS=Infrared2015&BBOX={bbox}",projection:"EPSG:3857",endDate:"2015-05-03T00:00:00.000Z",startDate:"2015-03-29T00:00:00.000Z",zoomExtent:[0,20],polygon:[[[-74.86599,40.08543],[-74.93534,40.07256],[-75.05653,40.00868],[-75.14236,39.95791],[-75.14456,39.88322],[-75.18515,39.88042],[-75.24499,39.85486],[-75.33339,39.8495],[-75.41531,39.80156],[-75.45131,39.78304],[-75.57744,39.62346],[-75.54245,39.56827],[-75.57847,39.48183],[-74.91678,38.84647],[-74.31702,39.38739],[-74.06708,39.75155],[-73.92141,40.49222],[-74.2382,40.49378],[-74.23859,40.54916],[-74.20211,40.54924],[-74.20228,40.57648],[-74.18406,40.57609],[-74.18436,40.63146],[-74.07587,40.63078],[-74.07532,40.64457],[-74.02124,40.65811],[-74.02081,40.69919],[-74.00265,40.69929],[-74.00247,40.74037],[-73.98434,40.74026],[-73.98402,40.78145],[-73.96591,40.78158],[-73.96597,40.80868],[-73.94777,40.80861],[-73.94769,40.82232],[-73.92966,40.82225],[-73.92906,40.86355],[-73.91104,40.86329],[-73.91061,40.91838],[-73.8923,40.91831],[-73.89215,40.95961],[-73.87413,40.95942],[-73.87386,40.99251],[-74.70601,41.36513],[-74.75716,41.34769],[-74.79801,41.32268],[-74.84024,41.27864],[-74.90547,41.17038],[-74.98152,41.1126],[-75.03902,41.03819],[-75.13515,40.99441],[-75.13773,40.97309],[-75.05705,40.86757],[-75.06846,40.85037],[-75.09687,40.85096],[-75.10099,40.83927],[-75.09018,40.82238],[-75.1367,40.77729],[-75.1724,40.78067],[-75.19833,40.75389],[-75.20506,40.69131],[-75.20373,40.61832],[-75.19764,40.57367],[-75.16777,40.55907],[-75.10237,40.56702],[-75.06906,40.5365],[-75.07421,40.45505],[-75.06134,40.4165],[-75.02684,40.40252],[-74.9671,40.3952],[-74.94461,40.33817],[-74.86839,40.29157],[-74.84402,40.24796],[-74.77552,40.21428],[-74.76334,40.19172],[-74.72918,40.16392],[-74.72609,40.14949],[-74.78805,40.12468],[-74.8229,40.13033],[-74.86599,40.08543]]],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)",description:"Digital orthophotography of New Jersey, Near Infrared, 1 foot resolution"},{id:"geodata.state.nj.us-Natural2015",name:"NJ 2015 Aerial Imagery (Natural Color)",type:"wms",template:"https://geodata.state.nj.us/imagerywms/Natural2015?FORMAT=image/png&SERVICE=WMS&VERSION=1.1.1&REQUEST=GetMap&SRS={proj}&WIDTH={width}&HEIGHT={height}&LAYERS=Natural2015&BBOX={bbox}",projection:"EPSG:3857",endDate:"2015-05-03T00:00:00.000Z",startDate:"2015-03-29T00:00:00.000Z",zoomExtent:[0,20],polygon:[[[-74.86599,40.08543],[-74.93534,40.07256],[-75.05653,40.00868],[-75.14236,39.95791],[-75.14456,39.88322],[-75.18515,39.88042],[-75.24499,39.85486],[-75.33339,39.8495],[-75.41531,39.80156],[-75.45131,39.78304],[-75.57744,39.62346],[-75.54245,39.56827],[-75.57847,39.48183],[-74.91678,38.84647],[-74.31702,39.38739],[-74.06708,39.75155],[-73.92141,40.49222],[-74.2382,40.49378],[-74.23859,40.54916],[-74.20211,40.54924],[-74.20228,40.57648],[-74.18406,40.57609],[-74.18436,40.63146],[-74.07587,40.63078],[-74.07532,40.64457],[-74.02124,40.65811],[-74.02081,40.69919],[-74.00265,40.69929],[-74.00247,40.74037],[-73.98434,40.74026],[-73.98402,40.78145],[-73.96591,40.78158],[-73.96597,40.80868],[-73.94777,40.80861],[-73.94769,40.82232],[-73.92966,40.82225],[-73.92906,40.86355],[-73.91104,40.86329],[-73.91061,40.91838],[-73.8923,40.91831],[-73.89215,40.95961],[-73.87413,40.95942],[-73.87386,40.99251],[-74.70601,41.36513],[-74.75716,41.34769],[-74.79801,41.32268],[-74.84024,41.27864],[-74.90547,41.17038],[-74.98152,41.1126],[-75.03902,41.03819],[-75.13515,40.99441],[-75.13773,40.97309],[-75.05705,40.86757],[-75.06846,40.85037],[-75.09687,40.85096],[-75.10099,40.83927],[-75.09018,40.82238],[-75.1367,40.77729],[-75.1724,40.78067],[-75.19833,40.75389],[-75.20506,40.69131],[-75.20373,40.61832],[-75.19764,40.57367],[-75.16777,40.55907],[-75.10237,40.56702],[-75.06906,40.5365],[-75.07421,40.45505],[-75.06134,40.4165],[-75.02684,40.40252],[-74.9671,40.3952],[-74.94461,40.33817],[-74.86839,40.29157],[-74.84402,40.24796],[-74.77552,40.21428],[-74.76334,40.19172],[-74.72918,40.16392],[-74.72609,40.14949],[-74.78805,40.12468],[-74.8229,40.13033],[-74.86599,40.08543]]],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)",description:"Digital orthophotography of New Jersey, Natural Color, 1 foot resolution"},{id:"NLSC-EMAP5",name:"NLSC General Map with Contour line",type:"tms",template:"https://wmts.nlsc.gov.tw/wmts/EMAP5_OPENDATA/default/EPSG:3857/{zoom}/{y}/{x}",startDate:"2015-01-01T00:00:00.000Z",zoomExtent:[0,15],polygon:[[[121.2237,25.76997],[122.2251,26.60305],[122.9312,22.57058],[120.6771,20.72799],[118.2509,23.26265],[118.3036,23.30751],[118.1978,24.34453],[118.1036,24.36172],[118.2283,24.49486],[118.4416,24.55302],[118.6024,24.46068],[120.0474,25.38843],[119.8935,25.78169],[119.787,26.2048],[120.4578,26.53253],[121.2237,25.76997]]],terms_url:"https://maps.nlsc.gov.tw",terms_text:"© National Land Surveying and Mapping Center, Taiwan OGDL 1.0",description:"The emap from Taiwan National Land Surveying and Mapping Center",icon:"https://osmlab.github.io/editor-layer-index/sources/asia/tw/Taiwane-MapOpenData.png"},{id:"IBGE_Salvador_Streets",name:"Nomes de Ruas IBGE Salvador-BA",type:"tms",template:"https://api.mapbox.com/styles/v1/wille/cj8lp78dn62wl2rquim47qo0g/tiles/256/{zoom}/{x}/{y}?access_token=pk.eyJ1Ijoid2lsbGUiLCJhIjoicFNVWk5VWSJ9.hluCd0YGvYHNlFi_utWe2g",zoomExtent:[0,20],polygon:[[[-38.48974,-12.81113],[-38.54485,-13.01392],[-38.47755,-13.03466],[-38.33473,-12.94685],[-38.30006,-12.90669],[-38.33954,-12.90435],[-38.35482,-12.83021],[-38.38091,-12.82184],[-38.40717,-12.86754],[-38.46537,-12.81599],[-38.48974,-12.81113]]],description:"Streets geometry and names of Salvador, Bahia. Source: Faces de Logradouro - IBGE.",overlay:true},{id:"kelkkareitit",name:"Nordic snowmobile overlay",type:"tms",template:"https://tiles.kelkkareitit.fi/kelkkareitit/{zoom}/{x}/{y}.png",zoomExtent:[3,18],polygon:[[[27.53173,60.21799],[31.35496,62.51233],[31.63513,62.90773],[30.09154,64.91889],[30.21239,65.87473],[29.13573,66.90422],[30.19041,67.67609],[28.70726,68.42748],[29.02587,68.9505],[31.04735,69.53452],[31.78344,70.44784],[28.32274,71.32192],[23.76342,71.29023],[17.1826,69.99806],[12.10691,68.01581],[9.97556,64.85828],[4.13084,61.95963],[4.57029,59.00664],[6.21826,57.95859],[8.14086,57.8506],[10.41502,58.75682],[12.63702,56.0383],[12.7716,55.25095],[14.2932,55.19769],[18.58886,56.84297],[20.69823,59.3444],[27.53173,60.21799]]],terms_url:"https://kelkkareitit.fi/",terms_text:"© Kelkkareitit.fi",description:"Kelkkareitit.fi snowmobile trails from OSM (Nordic coverage)",icon:"https://kelkkareitit.fi/img/favicon.png",overlay:true},{id:"geovekst-nib",name:"Norway Orthophoto",type:"tms",template:"https://waapi.webatlas.no/maptiles/tiles/webatlas-orto-newup/wa_grid/{zoom}/{x}/{y}.jpeg?api_key=b8e36d51-119a-423b-b156-d744d54123d5",zoomExtent:[0,21],polygon:[[[11.53568,58.86659],[11.66192,58.89784],[11.7935,59.09471],[11.84243,59.239],[11.82877,59.34509],[11.71279,59.60387],[11.86205,59.63771],[11.95608,59.69196],[11.93389,59.86895],[12.17881,59.8786],[12.46948,60.03124],[12.55438,60.18972],[12.51237,60.31659],[12.61793,60.40065],[12.61883,60.51512],[12.25387,61.01106],[12.69195,61.04632],[12.90756,61.34802],[12.57493,61.57623],[12.42465,61.57175],[12.15233,61.72694],[12.31212,62.26512],[12.07078,62.61109],[12.14907,62.7455],[12.08883,62.89668],[12.23464,62.99952],[11.99225,63.26684],[12.23327,63.47505],[12.17971,63.57117],[12.69313,63.96344],[13.21378,64.0839],[13.99183,64.00514],[14.17035,64.18236],[14.13253,64.47516],[13.67658,64.58356],[14.02455,64.88119],[14.33572,65.11098],[14.51699,65.30365],[14.54177,65.67762],[14.63674,65.81299],[14.53903,66.12496],[15.03881,66.14245],[15.50033,66.27956],[15.39368,66.4795],[15.63473,66.59685],[16.04695,66.90283],[16.39832,67.03827],[16.41439,67.21036],[16.10744,67.43617],[16.16455,67.5087],[16.42318,67.52589],[16.5866,67.64528],[16.7471,67.90466],[17.34741,68.09995],[17.90583,67.95885],[18.16489,68.19424],[18.13721,68.52675],[18.40761,68.57059],[18.62222,68.49607],[18.98574,68.50591],[19.92752,68.34558],[20.24505,68.49201],[19.99237,68.55586],[20.21137,68.65685],[20.34848,68.79976],[20.31623,68.93227],[20.10322,69.0359],[20.55694,69.04926],[20.7206,69.10837],[21.06178,69.02541],[21.12098,69.10587],[21.01135,69.21086],[21.2824,69.30076],[21.62645,69.26589],[22.33512,68.81965],[22.37485,68.70596],[22.5377,68.73329],[22.80161,68.67674],[23.04635,68.67833],[23.16467,68.61903],[23.68789,68.70049],[23.79776,68.81592],[23.96804,68.82287],[24.17541,68.7314],[24.76043,68.63655],[24.8544,68.55285],[24.90827,68.54387],[24.93347,68.6025],[25.12435,68.62003],[25.1667,68.79008],[25.43334,68.87886],[25.62945,68.88103],[25.79589,69.01157],[25.73272,69.19428],[26.02249,69.66758],[26.56631,69.94207],[27.10601,69.89539],[27.63679,70.05317],[27.93548,70.07401],[27.96569,70.00415],[28.40312,69.80824],[29.1014,69.69095],[29.328,69.47585],[28.82859,69.2316],[28.7931,69.0943],[29.04485,68.99986],[29.25292,69.10601],[29.32641,69.22982],[29.29229,69.27632],[29.39117,69.31298],[29.57038,69.31201],[29.85191,69.41631],[29.96795,69.39916],[30.13069,69.4667],[30.2008,69.5658],[30.13137,69.6609],[30.15678,69.66496],[30.51589,69.53787],[30.82077,69.52371],[30.95329,69.55563],[30.96221,69.67832],[30.83578,69.79192],[31.65161,70.17579],[31.78344,70.4662],[30.49255,70.86989],[28.43261,71.30079],[25.66406,71.40266],[23.81835,71.29374],[18.30322,70.40734],[14.24926,69.07641],[11.18408,67.47913],[11.74438,66.90852],[9.95361,64.88393],[4.72961,62.3649],[4.12948,61.69247],[4.08142,61.02637],[4.4577,59.19421],[5.31188,58.4276],[6.47094,57.84475],[7.56408,57.72468],[8.4375,57.91776],[10.59792,58.75006],[10.64905,58.88203],[11.09035,58.97673],[11.16173,59.06743],[11.34175,59.10293],[11.44922,58.99078],[11.45194,58.88136],[11.53568,58.86659]]],terms_url:"https://www.norgeibilder.no",terms_text:"© Geovekst",best:true,description:"Most recent Norwegian orthophotos, courtesy of Geovekst and Norkart.",icon:"https://register.geonorge.no/data/organizations/_L_norgeibilder96x96.png"},{id:"npd-offshore",name:"NPD Offshore Installations overlay",type:"wms",template:"http://gis.npd.no/ogc/factmaps/2_0?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=fclFixed,pplAll,fldByStatus&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",zoomExtent:[6,20],polygon:[[[8.51989,57.6454],[3.25195,56.08737],[2.61185,56.59434],[1.96321,57.90482],[1.48178,58.42936],[1.98303,60.31063],[1.78802,61.35659],[-0.49061,63.88725],[1.36226,67.01603],[14.99771,74.50082],[36.99371,74.50155],[36.99989,73.68633],[32.06909,70.27429],[23.97215,70.47356],[16.25974,68.58447],[12.12888,64.81157],[5.38328,61.92862],[5.7678,58.85355],[8.51989,57.6454]]],terms_url:"http://www.npd.no/no/Kart/Faktakart/",terms_text:"© Oljedirektoratet",description:"Production platforms and oil/natural gas fields on the Norwegian continental shelf",icon:"https://register.geonorge.no/data/organizations/870917732_od_liten.png",overlay:true},{id:"nve-snoskred",name:"NVE Avalanche Danger Areas overlay",type:"wms",template:"https://gis3.nve.no/map/services/SkredSnoAktR/MapServer/WmsServer?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=Snoskred-Aktsomhetsomrader&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",zoomExtent:[5,13],polygon:[[[31.90425,70.43681],[28.47652,71.32896],[23.6865,71.25143],[16.80906,70.07308],[11.16207,67.52539],[9.97554,64.81158],[4.21871,62.145],[4.37254,59.1872],[6.17431,57.8915],[7.93212,57.73936],[10.77758,58.86491],[11.7224,58.76251],[12.72216,60.11415],[13.05175,61.34935],[12.52439,63.61699],[14.23826,63.98561],[15.11717,65.90166],[18.69871,68.37491],[20.06101,68.26126],[21.00584,68.78415],[25.24656,68.3506],[26.93845,69.8472],[28.76219,69.61121],[28.5864,68.8556],[31.06931,69.51915],[31.90425,70.43681]]],terms_url:"https://www.nve.no/flaum-og-skred/kartlegging/aktsemdkart/aktsomhetskart-for-snoskred/",terms_text:"© NVE",description:"Potential snowslide areas, computed from theoretical height model. Valid for drops higher than 20-50 meters. Dark red=trigger area.",icon:"https://www.nve.no/Content/Images/nve-logo.png",overlay:true},{id:"nve-nettanlegg",name:"NVE Electricity Network overlay",type:"wms",template:"https://gis3.nve.no/map/services/Nettanlegg1/MapServer/WmsServer?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=Sentralnett,Regionalnett,Distribusjonsnett,Sjokabler,Master og stolper,Transformatorstasjoner&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",zoomExtent:[6,22],polygon:[[[31.90425,70.43681],[28.47652,71.32896],[23.6865,71.25143],[16.80906,70.07308],[11.16207,67.52539],[9.97554,64.81158],[4.21871,62.145],[4.37254,59.1872],[6.17431,57.8915],[7.93212,57.73936],[10.77758,58.86491],[11.7224,58.76251],[12.72216,60.11415],[13.05175,61.34935],[12.52439,63.61699],[14.23826,63.98561],[15.11717,65.90166],[18.69871,68.37491],[20.06101,68.26126],[21.00584,68.78415],[25.24656,68.3506],[26.93845,69.8472],[28.76219,69.61121],[28.5864,68.8556],[31.06931,69.51915],[31.90425,70.43681]]],terms_url:"https://www.nve.no/karttjenester/",terms_text:"© NVE",description:"Power lines (high voltage network) including transformers, submarine cables and pylons. Local distribution network is not included.",icon:"https://www.nve.no/Content/Images/nve-logo.png",overlay:true},{id:"nve-vannkraft",name:"NVE Hydropower Plants overlay",type:"wms",template:"https://gis3.nve.no/map/services/Vannkraft1/MapServer/WmsServer?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=Vannkraftverk,Vannvei,Dam&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",zoomExtent:[6,22],polygon:[[[31.90425,70.43681],[28.47652,71.32896],[23.6865,71.25143],[16.80906,70.07308],[11.16207,67.52539],[9.97554,64.81158],[4.21871,62.145],[4.37254,59.1872],[6.17431,57.8915],[7.93212,57.73936],[10.77758,58.86491],[11.7224,58.76251],[12.72216,60.11415],[13.05175,61.34935],[12.52439,63.61699],[14.23826,63.98561],[15.11717,65.90166],[18.69871,68.37491],[20.06101,68.26126],[21.00584,68.78415],[25.24656,68.3506],[26.93845,69.8472],[28.76219,69.61121],[28.5864,68.8556],[31.06931,69.51915],[31.90425,70.43681]]],terms_url:"https://www.nve.no/karttjenester/",terms_text:"© NVE",description:"Hydropower plants including waterways (tunnel, canal, pipeline) and dams",icon:"https://www.nve.no/Content/Images/nve-logo.png",overlay:true},{id:"nve-vindkraft",name:"NVE Wind Power Plants overlay",type:"wms",template:"https://gis3.nve.no/map/services/Vindkraft/MapServer/WmsServer?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=Vindkraft_utbygd,Vindkraft_under_bygging,Vindkraftomrade_konsesjonsbehandling,Vindturbin_konsesjonsbehandling&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",zoomExtent:[6,22],polygon:[[[31.90425,70.43681],[28.47652,71.32896],[23.6865,71.25143],[16.80906,70.07308],[11.16207,67.52539],[9.97554,64.81158],[4.21871,62.145],[4.37254,59.1872],[6.17431,57.8915],[7.93212,57.73936],[10.77758,58.86491],[11.7224,58.76251],[12.72216,60.11415],[13.05175,61.34935],[12.52439,63.61699],[14.23826,63.98561],[15.11717,65.90166],[18.69871,68.37491],[20.06101,68.26126],[21.00584,68.78415],[25.24656,68.3506],[26.93845,69.8472],[28.76219,69.61121],[28.5864,68.8556],[31.06931,69.51915],[31.90425,70.43681]]],terms_url:"https://www.nve.no/karttjenester/",terms_text:"© NVE",description:"Wind power turbines, farms and concession areas. Red colour = concession denied.",icon:"https://www.nve.no/Content/Images/nve-logo.png",overlay:true},{id:"orthos.dhses.ny.gov_latest",name:"NYS Orthos Online",type:"wms",template:"https://orthos.dhses.ny.gov/arcgis/services/Latest/MapServer/WmsServer?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=0,1,2,3,4&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",endDate:"2018-01-01T00:00:00.000Z",startDate:"2013-01-01T00:00:00.000Z",zoomExtent:[0,19],polygon:[[[-74.91231,45.03606],[-73.47788,45.02996],[-73.33846,45.03098],[-73.31978,45.00558],[-73.32265,44.98525],[-73.34852,44.9283],[-73.36721,44.8397],[-73.34277,44.81727],[-73.34565,44.77647],[-73.37296,44.73463],[-73.37008,44.67946],[-73.39739,44.64471],[-73.39308,44.60276],[-73.39739,44.54543],[-73.34996,44.51264],[-73.34565,44.49521],[-73.37871,44.4706],[-73.30828,44.43572],[-73.30397,44.41827],[-73.33271,44.33917],[-73.30828,44.27128],[-73.30828,44.25172],[-73.38014,44.14868],[-73.40458,44.04133],[-73.3399,43.79596],[-73.28097,43.64222],[-73.2091,43.54957],[-73.21342,43.51206],[-73.24647,42.67557],[-73.45919,42.14284],[-73.47069,42.03938],[-73.48794,41.73764],[-73.49944,41.64319],[-73.47788,41.62708],[-73.43189,41.57979],[-73.42614,41.56366],[-73.42685,41.45926],[-73.43979,41.40322],[-73.44985,41.38328],[-73.43835,41.37033],[-73.42757,41.35901],[-73.41751,41.3439],[-73.41895,41.27642],[-73.43045,41.24455],[-73.46566,41.19752],[-73.52962,41.14505],[-73.55477,41.13368],[-73.61586,41.13531],[-73.62664,41.10878],[-73.62736,41.05407],[-73.63958,40.99118],[-73.61873,40.98195],[-73.59933,40.96568],[-73.59933,40.93474],[-73.63455,40.91682],[-73.68054,40.89183],[-73.69851,40.87988],[-73.68629,40.87064],[-73.66257,40.87934],[-73.63814,40.90541],[-73.59789,40.91193],[-73.57562,40.9179],[-73.52675,40.92388],[-73.50159,40.94288],[-73.4901,40.95374],[-73.41751,40.96079],[-73.38374,40.96133],[-73.33702,40.95591],[-73.30828,40.93637],[-73.27091,40.92659],[-73.2091,40.91953],[-73.18682,40.92714],[-73.16814,40.93148],[-73.16598,40.95971],[-73.16886,40.97002],[-73.12933,40.98195],[-73.10777,40.98195],[-73.06681,40.9749],[-72.8584,40.97436],[-72.71826,40.98195],[-72.65574,41.00528],[-72.64424,41.00473],[-72.62628,40.99226],[-72.54148,41.03889],[-72.4768,41.06328],[-72.45811,41.08928],[-72.41859,41.09308],[-72.36612,41.13856],[-72.36037,41.1418],[-72.32229,41.15479],[-72.29067,41.16399],[-72.21449,41.18238],[-72.20083,41.19157],[-72.04848,41.25914],[-72.02548,41.2937],[-71.93924,41.30774],[-71.92343,41.30666],[-71.90259,41.2991],[-71.90187,41.28939],[-71.99458,41.24509],[-72.10453,41.19806],[-72.18287,41.16723],[-72.18934,41.16237],[-72.25186,41.12232],[-72.30432,41.10445],[-72.31582,41.09524],[-72.27917,41.08441],[-72.2727,41.08062],[-72.26839,41.04973],[-72.21736,41.04811],[-72.19652,41.04215],[-72.18646,41.05298],[-72.17137,41.0584],[-72.14981,41.05895],[-72.15628,41.09633],[-72.15268,41.1077],[-72.14909,41.14667],[-72.134,41.14505],[-72.07076,41.10553],[-72.07435,41.05678],[-72.08657,41.03185],[-72.10957,41.0069],[-72.08729,41.01287],[-72.06213,41.02534],[-72.04561,41.03239],[-72.01902,41.03293],[-72.00895,41.04215],[-72.00177,41.05136],[-71.96368,41.07737],[-71.922,41.08874],[-71.88966,41.08766],[-71.85588,41.08062],[-71.84582,41.07466],[-71.85588,41.05298],[-71.89038,41.03727],[-71.91625,41.03022],[-71.99099,41.00365],[-72.07938,40.97273],[-72.31941,40.88205],[-72.4423,40.8402],[-72.62771,40.7869],[-72.76569,40.75043],[-72.88499,40.71286],[-72.95973,40.68671],[-73.03735,40.66],[-73.08118,40.64855],[-73.22994,40.61637],[-73.32193,40.6131],[-73.35211,40.61855],[-73.55477,40.56944],[-73.75959,40.57708],[-73.88248,40.54815],[-73.9335,40.53449],[-73.945,40.53395],[-73.94572,40.56289],[-74.08227,40.56234],[-74.08011,40.54924],[-74.12251,40.52084],[-74.15772,40.51373],[-74.18719,40.50117],[-74.22887,40.48696],[-74.26121,40.48532],[-74.2763,40.4957],[-74.27918,40.54378],[-74.26983,40.56671],[-74.25834,40.57217],[-74.22528,40.57217],[-74.226,40.58309],[-74.25115,40.59564],[-74.25259,40.62237],[-74.24324,40.64091],[-74.2339,40.64909],[-74.20228,40.654],[-74.12538,40.65673],[-74.11532,40.69107],[-74.09951,40.68998],[-74.07795,40.71068],[-74.06286,40.7183],[-74.05208,40.7439],[-74.02549,40.79288],[-73.98094,40.86901],[-73.96225,40.92551],[-73.94931,40.96459],[-73.94644,40.99877],[-73.98165,41.01612],[-74.04561,41.04323],[-74.18072,41.09524],[-74.30792,41.14938],[-74.44087,41.21537],[-74.52783,41.25914],[-74.61335,41.30234],[-74.65791,41.31098],[-74.70246,41.33581],[-74.76714,41.38975],[-74.79661,41.41023],[-74.85338,41.42263],[-74.90728,41.43179],[-74.99783,41.47111],[-75.04167,41.52708],[-75.08479,41.59323],[-75.08407,41.61848],[-75.07329,41.66467],[-75.08766,41.70278],[-75.08766,41.71351],[-75.12144,41.76177],[-75.11928,41.79232],[-75.13078,41.81696],[-75.18755,41.83838],[-75.25295,41.84962],[-75.28745,41.85497],[-75.29823,41.88227],[-75.30613,41.9304],[-75.34063,41.94003],[-75.3665,41.9566],[-75.37225,41.97744],[-75.58066,41.97957],[-75.58137,41.92399],[-75.78906,41.92666],[-75.78691,41.98278],[-79.77687,41.98118],[-79.7819,42.20994],[-79.77184,42.28017],[-79.72153,42.29824],[-79.57349,42.36731],[-79.42976,42.46599],[-79.3737,42.49991],[-79.25728,42.54546],[-79.18973,42.5624],[-79.16529,42.56981],[-79.12074,42.62483],[-79.0963,42.64598],[-79.06899,42.6967],[-79.03162,42.71043],[-78.98851,42.72311],[-78.88358,42.77693],[-78.88646,42.8149],[-78.93964,42.88655],[-78.93964,42.93603],[-79.04887,42.96969],[-79.04743,43.05167],[-79.09343,43.05272],[-79.09199,43.09262],[-79.08624,43.26556],[-79.06468,43.27602],[-78.84909,43.33041],[-78.72979,43.35237],[-78.63924,43.37013],[-78.54869,43.37953],[-78.47826,43.38789],[-77.95508,43.38476],[-77.73158,43.34714],[-77.71146,43.34034],[-77.66259,43.31159],[-77.61516,43.28387],[-77.55336,43.253],[-77.5282,43.25509],[-77.45634,43.27864],[-77.42256,43.28492],[-77.16385,43.29433],[-77.0503,43.29381],[-76.94178,43.29329],[-76.91447,43.30793],[-76.85051,43.3163],[-76.80236,43.32832],[-76.75996,43.35184],[-76.64785,43.42809],[-76.54509,43.48026],[-76.51993,43.49486],[-76.44304,43.52717],[-76.4222,43.53811],[-76.28206,43.53863],[-76.23822,43.55686],[-76.24038,43.74147],[-76.30649,43.82915],[-76.31152,43.8675],[-76.34602,43.8618],[-76.40064,43.86128],[-76.47178,43.88408],[-76.46675,43.90893],[-76.4186,43.93119],[-76.37189,43.93223],[-76.36974,43.90272],[-76.33308,43.92964],[-76.27847,43.92964],[-76.27847,43.90427],[-76.26697,43.89599],[-76.23607,43.91204],[-76.19295,43.93326],[-76.19007,43.95086],[-76.21523,43.96017],[-76.25044,43.94982],[-76.31224,43.94775],[-76.30578,43.9762],[-76.33093,44.00464],[-76.39561,44.0248],[-76.39848,44.06251],[-76.37548,44.06457],[-76.3762,44.0909],[-76.47107,44.09297],[-76.46604,44.10948],[-76.44232,44.1296],[-76.39848,44.13218],[-76.39776,44.20435],[-76.3762,44.21671],[-76.23966,44.21929],[-76.23966,44.22804],[-76.21738,44.22856],[-76.21523,44.3479],[-76.11893,44.37103],[-76.04634,44.39157],[-75.93423,44.43418],[-75.83721,44.50341],[-75.76822,44.55823],[-75.69923,44.60379],[-75.63168,44.64829],[-75.56772,44.70501],[-75.50448,44.74586],[-75.45274,44.78157],[-75.31763,44.8723],[-75.15378,44.93745],[-75.09054,44.97305],[-74.97411,45.02793],[-74.91985,45.03682],[-74.91231,45.03606]]],terms_url:"https://gis.ny.gov/gateway/orthoprogram/index.cfm",terms_text:"New York State Statewide Digital Orthoimagery Program",description:"New York State High Resolution Digital Orthoimagery, 1 foot resolution",icon:"https://osmlab.github.io/editor-layer-index/sources/north-america/us/ny/NYS_Orthos_Online.png"},{id:"olho_dagua_do_casado",name:"Olho d'Agua do Casado AL",type:"wms",template:"http://geoserver.dados.al.gov.br:8080/geoserver/Alagoas/ows?LAYERS=Olho%20Dagua%20do%20Casado&SERVICE=WMS&FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.0&SERVICE=WMS&REQUEST=GetMap&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[-37.7822,-9.54444],[-37.7826,-9.45388],[-37.81147,-9.45412],[-37.81735,-9.45451],[-37.82057,-9.45416],[-37.87394,-9.45428],[-37.87358,-9.54475],[-37.7822,-9.54444]]],terms_url:"http://www.seplag.al.gov.br",terms_text:"Secretaria de Estado do Planejamento, Gestão e Patrimônio"},{id:"osmbe-nl",name:"OpenStreetMap (Belgian Style - Dutch)",type:"tms",template:"https://tile.openstreetmap.be/osmbe-nl/{zoom}/{x}/{y}.png",zoomExtent:[0,18],polygon:[[[5.47007,49.49196],[5.44409,49.51409],[5.46213,49.53677],[5.43766,49.54766],[5.42566,49.59145],[5.40775,49.60448],[5.35207,49.62396],[5.34232,49.61192],[5.30544,49.60645],[5.3026,49.63608],[5.32535,49.6575],[5.27025,49.68827],[5.24458,49.67985],[5.16215,49.6918],[5.16164,49.71172],[5.12622,49.70442],[5.09058,49.75946],[5.06262,49.75724],[5.01261,49.77534],[4.9921,49.79533],[4.95485,49.79586],[4.94404,49.78583],[4.90589,49.78055],[4.84827,49.78972],[4.86599,49.81918],[4.84266,49.86913],[4.85659,49.86973],[4.87961,49.91078],[4.84433,49.94482],[4.78844,49.95381],[4.78535,49.97018],[4.79004,49.98569],[4.81194,49.99563],[4.81579,50.02853],[4.83599,50.04069],[4.82339,50.04664],[4.81641,50.06702],[4.83456,50.06856],[4.83709,50.09442],[4.84472,50.10023],[4.85447,50.1029],[4.866,50.09623],[4.86587,50.12038],[4.8776,50.13223],[4.89443,50.13779],[4.88043,50.1403],[4.87725,50.15205],[4.8529,50.15168],[4.83169,50.1526],[4.82334,50.15923],[4.78067,50.14092],[4.76486,50.13634],[4.75217,50.11158],[4.71293,50.09598],[4.70278,50.09336],[4.68851,50.06595],[4.70309,50.05587],[4.68731,50.01802],[4.69495,49.99662],[4.69461,49.99504],[4.63074,49.98584],[4.58965,49.98336],[4.55981,49.96757],[4.54315,49.9679],[4.52365,49.94973],[4.51156,49.94579],[4.47953,49.94584],[4.44588,49.93656],[4.40593,49.94785],[4.39149,49.94697],[4.38072,49.95088],[4.34921,49.95202],[4.3137,49.96541],[4.19616,49.9536],[4.19304,49.95746],[4.19582,49.96629],[4.13704,49.97691],[4.15996,49.99544],[4.13683,50.00786],[4.13272,50.01973],[4.16174,50.05032],[4.17458,50.04772],[4.22857,50.06873],[4.19529,50.10571],[4.19766,50.12037],[4.19566,50.13394],[4.15448,50.12716],[4.13656,50.12909],[4.12568,50.13511],[4.13677,50.15213],[4.14989,50.1647],[4.14686,50.17314],[4.15567,50.19785],[4.14799,50.21344],[4.15979,50.21579],[4.19179,50.24106],[4.21836,50.25492],[4.20676,50.27068],[4.17487,50.27492],[4.16567,50.28779],[4.155,50.27742],[4.16937,50.26848],[4.16851,50.25626],[4.13426,50.25572],[4.13228,50.26754],[4.12086,50.27276],[4.12139,50.29732],[4.10928,50.30112],[4.0977,50.31201],[4.08017,50.30809],[4.07339,50.31754],[4.03817,50.33987],[4.02738,50.35491],[3.98611,50.34137],[3.96482,50.34012],[3.96355,50.34742],[3.90223,50.3257],[3.88419,50.32554],[3.88429,50.33511],[3.85645,50.34099],[3.84244,50.35243],[3.81321,50.34251],[3.80551,50.35098],[3.74124,50.34624],[3.73556,50.32532],[3.73175,50.30705],[3.70911,50.3021],[3.68231,50.31988],[3.66397,50.34724],[3.65542,50.37075],[3.66788,50.38597],[3.67276,50.40227],[3.66777,50.42262],[3.66743,50.43635],[3.65685,50.4464],[3.66129,50.45399],[3.64419,50.4618],[3.6099,50.4935],[3.58162,50.48917],[3.56897,50.4982],[3.49868,50.48577],[3.49448,50.49918],[3.51582,50.52075],[3.4742,50.53204],[3.44739,50.50415],[3.43663,50.5083],[3.42736,50.50327],[3.37405,50.48993],[3.35949,50.50325],[3.32767,50.50732],[3.31872,50.51788],[3.30319,50.51966],[3.28718,50.52552],[3.27549,50.53872],[3.27524,50.59381],[3.25497,50.62115],[3.24349,50.64031],[3.23893,50.65864],[3.24019,50.67023],[3.26029,50.67692],[3.25131,50.69091],[3.25881,50.69312],[3.24518,50.71225],[3.23779,50.71086],[3.22148,50.70958],[3.20498,50.71072],[3.18953,50.72603],[3.19445,50.7316],[3.14457,50.78871],[3.12547,50.78553],[3.11348,50.79278],[3.10455,50.78042],[3.08585,50.77064],[3.05758,50.77987],[3.04064,50.77484],[3.03691,50.77003],[3.02927,50.76813],[3.01945,50.77263],[2.99536,50.76043],[2.96822,50.74763],[2.9557,50.75181],[2.93962,50.74441],[2.94602,50.73167],[2.9349,50.72822],[2.92939,50.70786],[2.92206,50.70224],[2.91184,50.70267],[2.91281,50.69463],[2.90742,50.69209],[2.90017,50.69202],[2.88533,50.70547],[2.87992,50.70199],[2.86855,50.70242],[2.84646,50.72043],[2.81843,50.71386],[2.78869,50.72508],[2.77811,50.74686],[2.76469,50.75397],[2.75409,50.76251],[2.75922,50.77052],[2.73745,50.77967],[2.7236,50.79079],[2.71636,50.8123],[2.6788,50.81207],[2.67057,50.81562],[2.63543,50.80987],[2.61055,50.84419],[2.59427,50.84743],[2.60628,50.86565],[2.60151,50.90993],[2.58525,50.91825],[2.62479,50.94743],[2.62148,50.95406],[2.60263,50.98638],[2.56946,51.00113],[2.55892,51.06596],[2.34072,51.31453],[3.01078,51.59839],[3.32658,51.43728],[3.37581,51.3584],[3.38739,51.33392],[3.36094,51.31523],[3.3789,51.30251],[3.36832,51.29778],[3.38177,51.28732],[3.38342,51.27485],[3.38922,51.27329],[3.41852,51.25984],[3.43471,51.24621],[3.45031,51.24219],[3.527,51.24651],[3.51433,51.28799],[3.54179,51.29123],[3.56145,51.29637],[3.57559,51.29428],[3.58905,51.30652],[3.63839,51.29078],[3.6582,51.29056],[3.69139,51.28043],[3.71763,51.27428],[3.77605,51.26777],[3.79652,51.25635],[3.79031,51.24163],[3.78934,51.22711],[3.79294,51.21546],[3.85827,51.21334],[3.88901,51.22423],[3.89467,51.21743],[3.88782,51.20283],[3.91256,51.20837],[3.91482,51.21509],[3.9281,51.22508],[3.93751,51.2174],[3.95603,51.22117],[4.01551,51.24825],[4.0551,51.24402],[4.1651,51.2938],[4.23804,51.35274],[4.21772,51.36206],[4.21546,51.37487],[4.33535,51.37775],[4.34197,51.36012],[4.38556,51.35574],[4.39906,51.35785],[4.42462,51.3668],[4.42309,51.37577],[4.38147,51.41805],[4.39426,51.44251],[4.37771,51.44595],[4.38055,51.45075],[4.4768,51.47912],[4.53739,51.48358],[4.54967,51.47364],[4.53097,51.44965],[4.53758,51.42456],[4.57427,51.43404],[4.6431,51.42478],[4.64951,51.42741],[4.66744,51.42777],[4.66465,51.44625],[4.69115,51.45283],[4.70175,51.46691],[4.72792,51.48435],[4.74476,51.48977],[4.74945,51.49905],[4.75827,51.50302],[4.7766,51.50625],[4.81666,51.49552],[4.82318,51.48441],[4.84355,51.48177],[4.83884,51.46588],[4.84529,51.45817],[4.82521,51.44674],[4.83103,51.42488],[4.88072,51.4166],[4.91431,51.45952],[4.95767,51.4548],[4.94134,51.42928],[4.93775,51.40655],[4.96007,51.42194],[4.99955,51.44324],[5.00816,51.47134],[5.01937,51.48074],[5.03235,51.48827],[5.04093,51.4876],[5.04722,51.47217],[5.08032,51.47226],[5.10643,51.43135],[5.0727,51.39365],[5.11662,51.36118],[5.13225,51.3472],[5.13581,51.31594],[5.15592,51.31278],[5.20039,51.32325],[5.24326,51.3057],[5.22742,51.26844],[5.238,51.26255],[5.26216,51.26778],[5.335,51.26474],[5.34493,51.27681],[5.41551,51.2639],[5.44065,51.28246],[5.48215,51.30064],[5.51628,51.29599],[5.55816,51.26613],[5.56283,51.22287],[5.65253,51.19899],[5.65947,51.19052],[5.71011,51.18671],[5.74598,51.19455],[5.76873,51.18843],[5.78118,51.18082],[5.78447,51.15925],[5.82594,51.16827],[5.85709,51.14477],[5.83976,51.12993],[5.81435,51.11524],[5.83555,51.10842],[5.8338,51.09577],[5.82291,51.09124],[5.8119,51.0943],[5.79816,51.09023],[5.80612,51.07955],[5.80458,51.05888],[5.77731,51.05804],[5.76027,51.03223],[5.77383,51.02859],[5.77829,51.02399],[5.76759,51.00526],[5.76846,50.9985],[5.76419,50.99502],[5.74816,50.98087],[5.72174,50.96128],[5.73469,50.95683],[5.7426,50.96113],[5.74604,50.96209],[5.75617,50.95898],[5.76011,50.95227],[5.73223,50.9221],[5.72625,50.9059],[5.70051,50.90955],[5.69711,50.8958],[5.68051,50.88068],[5.64516,50.86533],[5.64337,50.84974],[5.64049,50.84701],[5.64576,50.83961],[5.64567,50.83789],[5.65094,50.83431],[5.65568,50.82591],[5.70296,50.80821],[5.69338,50.79687],[5.70259,50.78396],[5.69204,50.75629],[5.7218,50.76538],[5.73762,50.75842],[5.73912,50.76522],[5.76476,50.7837],[5.77748,50.78344],[5.78519,50.7684],[5.7927,50.77138],[5.80759,50.75681],[5.84525,50.76609],[5.84901,50.75975],[5.88667,50.77108],[5.89689,50.75501],[5.95896,50.76308],[6.02001,50.75521],[6.04208,50.74557],[6.03953,50.7295],[6.11623,50.72364],[6.1491,50.68465],[6.16312,50.67169],[6.17755,50.65576],[6.18715,50.6505],[6.18348,50.6457],[6.18205,50.63583],[6.26822,50.62829],[6.27251,50.62033],[6.24102,50.58657],[6.22795,50.58535],[6.18304,50.55597],[6.1833,50.54646],[6.19789,50.53715],[6.22586,50.49832],[6.26954,50.50961],[6.35349,50.49244],[6.34706,50.46422],[6.37423,50.45989],[6.3825,50.43975],[6.37408,50.40637],[6.35129,50.38206],[6.40305,50.34866],[6.41162,50.32769],[6.40783,50.31893],[6.38558,50.31658],[6.36388,50.30021],[6.32792,50.3186],[6.31289,50.31636],[6.29335,50.2909],[6.29547,50.27422],[6.28111,50.26236],[6.23624,50.25692],[6.21151,50.24816],[6.1981,50.23275],[6.18166,50.23125],[6.1789,50.22147],[6.19337,50.20761],[6.19683,50.17988],[6.15231,50.16841],[6.15923,50.14002],[6.13978,50.12527],[6.10856,50.1326],[6.11273,50.16093],[6.10156,50.16551],[6.08452,50.16697],[6.0821,50.15275],[6.06344,50.14834],[6.03055,50.15829],[6.02136,50.17685],[5.96932,50.16795],[5.96515,50.12813],[5.90347,50.11172],[5.89064,50.07554],[5.86237,50.06368],[5.8749,50.04624],[5.86392,50.02594],[5.82586,50.00934],[5.82665,50.00135],[5.8448,49.99123],[5.83952,49.9756],[5.80883,49.95773],[5.78215,49.957],[5.76822,49.91307],[5.74481,49.89975],[5.78087,49.88794],[5.78897,49.87213],[5.77636,49.86265],[5.75667,49.8703],[5.76191,49.85693],[5.75803,49.84287],[5.74291,49.83555],[5.75151,49.81985],[5.75473,49.79514],[5.7909,49.79765],[5.8179,49.75977],[5.83544,49.74713],[5.82702,49.72616],[5.86996,49.72777],[5.88817,49.70952],[5.86372,49.68213],[5.91262,49.66488],[5.90382,49.65192],[5.90876,49.63876],[5.89899,49.63401],[5.89117,49.63469],[5.87663,49.60771],[5.84953,49.59399],[5.87403,49.58991],[5.8736,49.57435],[5.84053,49.55222],[5.82582,49.54931],[5.81858,49.5461],[5.79504,49.55029],[5.77149,49.55832],[5.76226,49.554],[5.76126,49.53952],[5.74792,49.53452],[5.73009,49.53954],[5.6987,49.53744],[5.66008,49.55039],[5.64371,49.54565],[5.6228,49.5283],[5.62589,49.51698],[5.61175,49.50102],[5.59116,49.51734],[5.55638,49.52373],[5.54257,49.5105],[5.47007,49.49196]]],terms_url:"https://openstreetmap.org/",terms_text:"© OpenStreetMap contributors, CC-BY-SA; Tiles courtesy of GEO-6",icon:"https://osmlab.github.io/editor-layer-index/sources/world/OpenStreetMap-GPS.png"},{id:"osmbe-fr",name:"OpenStreetMap (Belgian Style - French)",type:"tms",template:"https://tile.openstreetmap.be/osmbe-fr/{zoom}/{x}/{y}.png",zoomExtent:[0,18],polygon:[[[5.47007,49.49196],[5.44409,49.51409],[5.46213,49.53677],[5.43766,49.54766],[5.42566,49.59145],[5.40775,49.60448],[5.35207,49.62396],[5.34232,49.61192],[5.30544,49.60645],[5.3026,49.63608],[5.32535,49.6575],[5.27025,49.68827],[5.24458,49.67985],[5.16215,49.6918],[5.16164,49.71172],[5.12622,49.70442],[5.09058,49.75946],[5.06262,49.75724],[5.01261,49.77534],[4.9921,49.79533],[4.95485,49.79586],[4.94404,49.78583],[4.90589,49.78055],[4.84827,49.78972],[4.86599,49.81918],[4.84266,49.86913],[4.85659,49.86973],[4.87961,49.91078],[4.84433,49.94482],[4.78844,49.95381],[4.78535,49.97018],[4.79004,49.98569],[4.81194,49.99563],[4.81579,50.02853],[4.83599,50.04069],[4.82339,50.04664],[4.81641,50.06702],[4.83456,50.06856],[4.83709,50.09442],[4.84472,50.10023],[4.85447,50.1029],[4.866,50.09623],[4.86587,50.12038],[4.8776,50.13223],[4.89443,50.13779],[4.88043,50.1403],[4.87725,50.15205],[4.8529,50.15168],[4.83169,50.1526],[4.82334,50.15923],[4.78067,50.14092],[4.76486,50.13634],[4.75217,50.11158],[4.71293,50.09598],[4.70278,50.09336],[4.68851,50.06595],[4.70309,50.05587],[4.68731,50.01802],[4.69495,49.99662],[4.69461,49.99504],[4.63074,49.98584],[4.58965,49.98336],[4.55981,49.96757],[4.54315,49.9679],[4.52365,49.94973],[4.51156,49.94579],[4.47953,49.94584],[4.44588,49.93656],[4.40593,49.94785],[4.39149,49.94697],[4.38072,49.95088],[4.34921,49.95202],[4.3137,49.96541],[4.19616,49.9536],[4.19304,49.95746],[4.19582,49.96629],[4.13704,49.97691],[4.15996,49.99544],[4.13683,50.00786],[4.13272,50.01973],[4.16174,50.05032],[4.17458,50.04772],[4.22857,50.06873],[4.19529,50.10571],[4.19766,50.12037],[4.19566,50.13394],[4.15448,50.12716],[4.13656,50.12909],[4.12568,50.13511],[4.13677,50.15213],[4.14989,50.1647],[4.14686,50.17314],[4.15567,50.19785],[4.14799,50.21344],[4.15979,50.21579],[4.19179,50.24106],[4.21836,50.25492],[4.20676,50.27068],[4.17487,50.27492],[4.16567,50.28779],[4.155,50.27742],[4.16937,50.26848],[4.16851,50.25626],[4.13426,50.25572],[4.13228,50.26754],[4.12086,50.27276],[4.12139,50.29732],[4.10928,50.30112],[4.0977,50.31201],[4.08017,50.30809],[4.07339,50.31754],[4.03817,50.33987],[4.02738,50.35491],[3.98611,50.34137],[3.96482,50.34012],[3.96355,50.34742],[3.90223,50.3257],[3.88419,50.32554],[3.88429,50.33511],[3.85645,50.34099],[3.84244,50.35243],[3.81321,50.34251],[3.80551,50.35098],[3.74124,50.34624],[3.73556,50.32532],[3.73175,50.30705],[3.70911,50.3021],[3.68231,50.31988],[3.66397,50.34724],[3.65542,50.37075],[3.66788,50.38597],[3.67276,50.40227],[3.66777,50.42262],[3.66743,50.43635],[3.65685,50.4464],[3.66129,50.45399],[3.64419,50.4618],[3.6099,50.4935],[3.58162,50.48917],[3.56897,50.4982],[3.49868,50.48577],[3.49448,50.49918],[3.51582,50.52075],[3.4742,50.53204],[3.44739,50.50415],[3.43663,50.5083],[3.42736,50.50327],[3.37405,50.48993],[3.35949,50.50325],[3.32767,50.50732],[3.31872,50.51788],[3.30319,50.51966],[3.28718,50.52552],[3.27549,50.53872],[3.27524,50.59381],[3.25497,50.62115],[3.24349,50.64031],[3.23893,50.65864],[3.24019,50.67023],[3.26029,50.67692],[3.25131,50.69091],[3.25881,50.69312],[3.24518,50.71225],[3.23779,50.71086],[3.22148,50.70958],[3.20498,50.71072],[3.18953,50.72603],[3.19445,50.7316],[3.14457,50.78871],[3.12547,50.78553],[3.11348,50.79278],[3.10455,50.78042],[3.08585,50.77064],[3.05758,50.77987],[3.04064,50.77484],[3.03691,50.77003],[3.02927,50.76813],[3.01945,50.77263],[2.99536,50.76043],[2.96822,50.74763],[2.9557,50.75181],[2.93962,50.74441],[2.94602,50.73167],[2.9349,50.72822],[2.92939,50.70786],[2.92206,50.70224],[2.91184,50.70267],[2.91281,50.69463],[2.90742,50.69209],[2.90017,50.69202],[2.88533,50.70547],[2.87992,50.70199],[2.86855,50.70242],[2.84646,50.72043],[2.81843,50.71386],[2.78869,50.72508],[2.77811,50.74686],[2.76469,50.75397],[2.75409,50.76251],[2.75922,50.77052],[2.73745,50.77967],[2.7236,50.79079],[2.71636,50.8123],[2.6788,50.81207],[2.67057,50.81562],[2.63543,50.80987],[2.61055,50.84419],[2.59427,50.84743],[2.60628,50.86565],[2.60151,50.90993],[2.58525,50.91825],[2.62479,50.94743],[2.62148,50.95406],[2.60263,50.98638],[2.56946,51.00113],[2.55892,51.06596],[2.34072,51.31453],[3.01078,51.59839],[3.32658,51.43728],[3.37581,51.3584],[3.38739,51.33392],[3.36094,51.31523],[3.3789,51.30251],[3.36832,51.29778],[3.38177,51.28732],[3.38342,51.27485],[3.38922,51.27329],[3.41852,51.25984],[3.43471,51.24621],[3.45031,51.24219],[3.527,51.24651],[3.51433,51.28799],[3.54179,51.29123],[3.56145,51.29637],[3.57559,51.29428],[3.58905,51.30652],[3.63839,51.29078],[3.6582,51.29056],[3.69139,51.28043],[3.71763,51.27428],[3.77605,51.26777],[3.79652,51.25635],[3.79031,51.24163],[3.78934,51.22711],[3.79294,51.21546],[3.85827,51.21334],[3.88901,51.22423],[3.89467,51.21743],[3.88782,51.20283],[3.91256,51.20837],[3.91482,51.21509],[3.9281,51.22508],[3.93751,51.2174],[3.95603,51.22117],[4.01551,51.24825],[4.0551,51.24402],[4.1651,51.2938],[4.23804,51.35274],[4.21772,51.36206],[4.21546,51.37487],[4.33535,51.37775],[4.34197,51.36012],[4.38556,51.35574],[4.39906,51.35785],[4.42462,51.3668],[4.42309,51.37577],[4.38147,51.41805],[4.39426,51.44251],[4.37771,51.44595],[4.38055,51.45075],[4.4768,51.47912],[4.53739,51.48358],[4.54967,51.47364],[4.53097,51.44965],[4.53758,51.42456],[4.57427,51.43404],[4.6431,51.42478],[4.64951,51.42741],[4.66744,51.42777],[4.66465,51.44625],[4.69115,51.45283],[4.70175,51.46691],[4.72792,51.48435],[4.74476,51.48977],[4.74945,51.49905],[4.75827,51.50302],[4.7766,51.50625],[4.81666,51.49552],[4.82318,51.48441],[4.84355,51.48177],[4.83884,51.46588],[4.84529,51.45817],[4.82521,51.44674],[4.83103,51.42488],[4.88072,51.4166],[4.91431,51.45952],[4.95767,51.4548],[4.94134,51.42928],[4.93775,51.40655],[4.96007,51.42194],[4.99955,51.44324],[5.00816,51.47134],[5.01937,51.48074],[5.03235,51.48827],[5.04093,51.4876],[5.04722,51.47217],[5.08032,51.47226],[5.10643,51.43135],[5.0727,51.39365],[5.11662,51.36118],[5.13225,51.3472],[5.13581,51.31594],[5.15592,51.31278],[5.20039,51.32325],[5.24326,51.3057],[5.22742,51.26844],[5.238,51.26255],[5.26216,51.26778],[5.335,51.26474],[5.34493,51.27681],[5.41551,51.2639],[5.44065,51.28246],[5.48215,51.30064],[5.51628,51.29599],[5.55816,51.26613],[5.56283,51.22287],[5.65253,51.19899],[5.65947,51.19052],[5.71011,51.18671],[5.74598,51.19455],[5.76873,51.18843],[5.78118,51.18082],[5.78447,51.15925],[5.82594,51.16827],[5.85709,51.14477],[5.83976,51.12993],[5.81435,51.11524],[5.83555,51.10842],[5.8338,51.09577],[5.82291,51.09124],[5.8119,51.0943],[5.79816,51.09023],[5.80612,51.07955],[5.80458,51.05888],[5.77731,51.05804],[5.76027,51.03223],[5.77383,51.02859],[5.77829,51.02399],[5.76759,51.00526],[5.76846,50.9985],[5.76419,50.99502],[5.74816,50.98087],[5.72174,50.96128],[5.73469,50.95683],[5.7426,50.96113],[5.74604,50.96209],[5.75617,50.95898],[5.76011,50.95227],[5.73223,50.9221],[5.72625,50.9059],[5.70051,50.90955],[5.69711,50.8958],[5.68051,50.88068],[5.64516,50.86533],[5.64337,50.84974],[5.64049,50.84701],[5.64576,50.83961],[5.64567,50.83789],[5.65094,50.83431],[5.65568,50.82591],[5.70296,50.80821],[5.69338,50.79687],[5.70259,50.78396],[5.69204,50.75629],[5.7218,50.76538],[5.73762,50.75842],[5.73912,50.76522],[5.76476,50.7837],[5.77748,50.78344],[5.78519,50.7684],[5.7927,50.77138],[5.80759,50.75681],[5.84525,50.76609],[5.84901,50.75975],[5.88667,50.77108],[5.89689,50.75501],[5.95896,50.76308],[6.02001,50.75521],[6.04208,50.74557],[6.03953,50.7295],[6.11623,50.72364],[6.1491,50.68465],[6.16312,50.67169],[6.17755,50.65576],[6.18715,50.6505],[6.18348,50.6457],[6.18205,50.63583],[6.26822,50.62829],[6.27251,50.62033],[6.24102,50.58657],[6.22795,50.58535],[6.18304,50.55597],[6.1833,50.54646],[6.19789,50.53715],[6.22586,50.49832],[6.26954,50.50961],[6.35349,50.49244],[6.34706,50.46422],[6.37423,50.45989],[6.3825,50.43975],[6.37408,50.40637],[6.35129,50.38206],[6.40305,50.34866],[6.41162,50.32769],[6.40783,50.31893],[6.38558,50.31658],[6.36388,50.30021],[6.32792,50.3186],[6.31289,50.31636],[6.29335,50.2909],[6.29547,50.27422],[6.28111,50.26236],[6.23624,50.25692],[6.21151,50.24816],[6.1981,50.23275],[6.18166,50.23125],[6.1789,50.22147],[6.19337,50.20761],[6.19683,50.17988],[6.15231,50.16841],[6.15923,50.14002],[6.13978,50.12527],[6.10856,50.1326],[6.11273,50.16093],[6.10156,50.16551],[6.08452,50.16697],[6.0821,50.15275],[6.06344,50.14834],[6.03055,50.15829],[6.02136,50.17685],[5.96932,50.16795],[5.96515,50.12813],[5.90347,50.11172],[5.89064,50.07554],[5.86237,50.06368],[5.8749,50.04624],[5.86392,50.02594],[5.82586,50.00934],[5.82665,50.00135],[5.8448,49.99123],[5.83952,49.9756],[5.80883,49.95773],[5.78215,49.957],[5.76822,49.91307],[5.74481,49.89975],[5.78087,49.88794],[5.78897,49.87213],[5.77636,49.86265],[5.75667,49.8703],[5.76191,49.85693],[5.75803,49.84287],[5.74291,49.83555],[5.75151,49.81985],[5.75473,49.79514],[5.7909,49.79765],[5.8179,49.75977],[5.83544,49.74713],[5.82702,49.72616],[5.86996,49.72777],[5.88817,49.70952],[5.86372,49.68213],[5.91262,49.66488],[5.90382,49.65192],[5.90876,49.63876],[5.89899,49.63401],[5.89117,49.63469],[5.87663,49.60771],[5.84953,49.59399],[5.87403,49.58991],[5.8736,49.57435],[5.84053,49.55222],[5.82582,49.54931],[5.81858,49.5461],[5.79504,49.55029],[5.77149,49.55832],[5.76226,49.554],[5.76126,49.53952],[5.74792,49.53452],[5.73009,49.53954],[5.6987,49.53744],[5.66008,49.55039],[5.64371,49.54565],[5.6228,49.5283],[5.62589,49.51698],[5.61175,49.50102],[5.59116,49.51734],[5.55638,49.52373],[5.54257,49.5105],[5.47007,49.49196]]],terms_url:"https://openstreetmap.org/",terms_text:"© OpenStreetMap contributors, CC-BY-SA; Tiles courtesy of GEO-6",icon:"https://osmlab.github.io/editor-layer-index/sources/world/OpenStreetMap-GPS.png"},{id:"MAPNIK",name:"OpenStreetMap (Standard)",type:"tms",template:"https://{switch:a,b,c}.tile.openstreetmap.org/{zoom}/{x}/{y}.png",zoomExtent:[0,19],terms_url:"https://www.openstreetmap.org",terms_text:"© OpenStreetMap contributors, CC-BY-SA","default":true,description:"The default OpenStreetMap layer.",icon:"https://osmlab.github.io/editor-layer-index/sources/world/OpenStreetMap-GPS.png"},{id:"osm-gps",name:"OpenStreetMap GPS traces",type:"tms",template:"https://{switch:a,b,c}.gps-tile.openstreetmap.org/lines/{zoom}/{x}/{y}.png",zoomExtent:[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>.",description:"Public GPS traces uploaded to OpenStreetMap.",icon:"https://osmlab.github.io/editor-layer-index/sources/world/OpenStreetMap-GPS.png",overlay:true},{id:"osm-hu-ortho",name:"openstreetmap.hu orthophotos",type:"tms",template:"http://adam.openstreetmap.hu/mapproxy/tiles/1.0.0/openstreetmap.hu.orthophotos/mercator/{zoom}/{x}/{y}.png",zoomExtent:[0,21],polygon:[[[18.8577,47.44553],[18.86169,47.44883],[18.86491,47.44704],[18.8609,47.44373],[18.8577,47.44553]],[[18.80614,47.59304],[18.81376,47.5974],[18.82295,47.59011],[18.81533,47.58574],[18.80614,47.59304]],[[17.66691,46.92167],[17.66369,46.93033],[17.67207,46.93178],[17.67529,46.92312],[17.66691,46.92167]],[[17.6725,46.93546],[17.67529,46.92708],[17.68409,46.92845],[17.68129,46.93683],[17.6725,46.93546]],[[17.82155,46.96075],[17.82507,46.9547],[17.83347,46.95701],[17.82995,46.96304],[17.82155,46.96075]],[[18.62796,47.19818],[18.63943,47.20324],[18.64953,47.1926],[18.63806,47.18753],[18.62796,47.19818]],[[17.51223,46.8789],[17.51406,46.88166],[17.5214,46.87939],[17.51957,46.87662],[17.51223,46.8789]],[[17.67724,46.91844],[17.68718,46.92344],[17.70594,46.90603],[17.69249,46.89926],[17.68144,46.90951],[17.68275,46.90595],[17.68198,46.90582],[17.68667,46.89926],[17.67947,46.89686],[17.67405,46.90445],[17.67131,46.90398],[17.66666,46.91662],[17.67724,46.91844]],[[18.80776,47.55615],[18.81638,47.55969],[18.81351,47.56305],[18.80473,47.55949],[18.80776,47.55615]],[[18.98706,47.46989],[18.97962,47.47042],[18.98056,47.47648],[18.988,47.47595],[18.98706,47.46989]],[[18.98356,47.41149],[19.00839,47.42511],[19.01568,47.41932],[18.9907,47.40518],[18.98356,47.41149]],[[19.02652,47.87563],[19.03163,47.87613],[19.03305,47.86957],[19.02793,47.86907],[19.02652,47.87563]],[[18.00803,46.86674],[18.01095,46.86028],[18.01323,46.86064],[18.01626,46.8536],[18.01682,46.85371],[18.01852,46.84948],[18.02021,46.84631],[18.02961,46.84829],[18.02742,46.85392],[18.03388,46.85534],[18.03056,46.86395],[18.03367,46.86456],[18.03058,46.87154],[18.00803,46.86674]],[[17.99509,46.87632],[17.98585,46.87595],[17.98535,46.88397],[17.98599,46.88412],[17.98531,46.88537],[17.95829,46.87876],[17.96077,46.87351],[17.92868,46.86631],[17.92467,46.87372],[17.93136,46.87535],[17.92995,46.87822],[17.9553,46.88415],[17.9946,46.89341],[17.99786,46.88671],[17.98771,46.88443],[17.98774,46.88411],[17.99415,46.88442],[17.99509,46.87632]],[[18.86533,47.42808],[18.87291,47.42455],[18.87701,47.42871],[18.86799,47.43238],[18.86774,47.43208],[18.86517,47.43317],[18.86477,47.4327],[18.86441,47.43285],[18.86288,47.43108],[18.86328,47.43092],[18.86288,47.43046],[18.86516,47.42947],[18.86448,47.42875],[18.86553,47.42829],[18.86533,47.42808]],[[19.16232,47.59776],[19.16893,47.59033],[19.17815,47.59512],[19.17291,47.60068],[19.16232,47.59776]],[[18.13162,47.02619],[18.14103,47.02111],[18.13923,47.01957],[18.15704,47.01044],[18.16271,47.00242],[18.16463,46.99571],[18.16639,46.9959],[18.16702,46.99363],[18.17101,46.99454],[18.1722,46.99571],[18.16977,47.00416],[18.17656,47.00709],[18.1761,47.00771],[18.17639,47.00781],[18.17057,47.01414],[18.1748,47.01815],[18.17782,47.01428],[18.18518,47.01746],[18.17933,47.0239],[18.17589,47.02268],[18.17277,47.02434],[18.17219,47.02377],[18.17159,47.02407],[18.16938,47.0221],[18.16216,47.02596],[18.16485,47.02832],[18.16245,47.02947],[18.16323,47.03025],[18.1521,47.03554],[18.15156,47.03498],[18.1503,47.03563],[18.14513,47.03112],[18.14337,47.0322],[18.1454,47.03419],[18.14441,47.03467],[18.14522,47.03539],[18.14168,47.03697],[18.13111,47.02745],[18.13226,47.0269],[18.13162,47.02619]],[[17.79852,46.81745],[17.79178,46.81585],[17.79601,46.80664],[17.7948,46.80598],[17.79693,46.80056],[17.80109,46.79993],[17.80736,46.80225],[17.79852,46.81745]],[[17.7788,46.81461],[17.78446,46.80714],[17.79083,46.80925],[17.7853,46.81683],[17.7788,46.81461]]],terms_text:"openstreetmap.hu"},{id:"OpenTopoMap",name:"OpenTopoMap",type:"tms",template:"https://{switch:a,b,c}.tile.opentopomap.org/{zoom}/{x}/{y}.png",zoomExtent:[3,17],terms_url:"https://tile.opentopomap.org/about#verwendung",terms_text:"Kartendaten: © OpenStreetMap-Mitwirkende, SRTM | Kartendarstellung: © OpenTopoMap (CC-BY-SA)",icon:"https://osmlab.github.io/editor-layer-index/sources/world/OpenTopoMap.png"},{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",endDate:"2010-07-02T00:00:00.000Z",startDate:"2010-06-24T00:00:00.000Z",zoomExtent:[0,20],polygon:[[[5.96175,50.17631],[6.02627,50.18496],[6.03318,50.16395],[6.06069,50.15536],[6.07668,50.15913],[6.07824,50.17255],[6.10176,50.17199],[6.1225,50.16437],[6.1201,50.15594],[6.1277,50.14993],[6.11323,50.13739],[6.12369,50.13719],[6.14093,50.1305],[6.13555,50.11899],[6.13808,50.10263],[6.13108,50.09964],[6.13547,50.09119],[6.12194,50.09059],[6.12634,50.07817],[6.13186,50.07348],[6.12117,50.064],[6.11444,50.06139],[6.11563,50.05817],[6.12361,50.06323],[6.13661,50.04178],[6.13034,50.02975],[6.14821,50.02307],[6.13868,50.01572],[6.13594,50.01485],[6.13138,50.01905],[6.13024,50.01819],[6.13934,50.01116],[6.1517,50.01058],[6.14546,49.99689],[6.13966,49.9994],[6.13852,49.99829],[6.14218,49.99535],[6.15023,49.99518],[6.15625,49.98867],[6.17305,49.98589],[6.17348,49.98344],[6.17035,49.98376],[6.16549,49.97115],[6.17151,49.96298],[6.1763,49.962],[6.17995,49.95386],[6.18339,49.9548],[6.17983,49.96307],[6.18331,49.9686],[6.19277,49.97158],[6.19978,49.95352],[6.20707,49.95672],[6.21269,49.9514],[6.22502,49.95039],[6.22044,49.94369],[6.22824,49.93726],[6.22635,49.92766],[6.21913,49.92354],[6.22986,49.92125],[6.23603,49.91355],[6.23187,49.91064],[6.22769,49.91062],[6.23229,49.9072],[6.23381,49.90028],[6.24692,49.89535],[6.25781,49.88724],[6.26301,49.88101],[6.27646,49.87725],[6.28113,49.87957],[6.29166,49.87548],[6.2977,49.86673],[6.30989,49.87107],[6.31532,49.8673],[6.31465,49.86057],[6.32361,49.85188],[6.32158,49.8409],[6.32741,49.83673],[6.33656,49.83998],[6.33937,49.8507],[6.36465,49.85164],[6.4022,49.82098],[6.42643,49.81629],[6.42807,49.81186],[6.43097,49.81129],[6.44161,49.81547],[6.44344,49.81233],[6.45366,49.81275],[6.46454,49.81975],[6.47057,49.82385],[6.49681,49.81277],[6.50669,49.80993],[6.51155,49.80238],[6.51485,49.80513],[6.5196,49.81446],[6.52981,49.81048],[6.53225,49.80686],[6.53083,49.80116],[6.50622,49.78899],[6.51917,49.78344],[6.51105,49.77422],[6.52056,49.76818],[6.52052,49.76134],[6.50373,49.75086],[6.50263,49.73298],[6.50727,49.72938],[6.51809,49.7242],[6.51642,49.72129],[6.51176,49.72016],[6.50479,49.725],[6.49891,49.72639],[6.49558,49.72443],[6.50712,49.71655],[6.50788,49.71215],[6.5046,49.71227],[6.42714,49.66237],[6.4399,49.66025],[6.44251,49.65591],[6.42178,49.61809],[6.39898,49.60094],[6.37941,49.59526],[6.37551,49.58809],[6.38443,49.5801],[6.38119,49.57509],[6.36909,49.5783],[6.35791,49.57166],[6.3849,49.55817],[6.38009,49.54856],[6.35855,49.53296],[6.35932,49.52481],[6.37076,49.50545],[6.37056,49.45732],[6.3334,49.46493],[6.32189,49.47244],[6.29503,49.47928],[6.28789,49.48379],[6.27191,49.49995],[6.24133,49.50693],[6.19669,49.50331],[6.17337,49.50577],[6.16086,49.50085],[6.1671,49.49006],[6.14018,49.48525],[6.12937,49.48803],[6.12725,49.47081],[6.1014,49.46726],[6.10483,49.45076],[6.08167,49.45417],[6.07722,49.46139],[6.05917,49.46306],[6.05222,49.46028],[6.04421,49.44553],[6.02529,49.44703],[6.02154,49.45127],[6.01574,49.44885],[5.99412,49.45301],[5.97657,49.44885],[5.97773,49.45955],[5.97232,49.46087],[5.96891,49.48202],[5.9616,49.49026],[5.91578,49.49835],[5.89033,49.4948],[5.86332,49.50006],[5.84897,49.50826],[5.84828,49.51397],[5.83641,49.51817],[5.83187,49.52639],[5.84308,49.53081],[5.83562,49.54114],[5.81625,49.53325],[5.8052,49.54272],[5.85943,49.57158],[5.86866,49.587],[5.86289,49.58525],[5.8511,49.58379],[5.84712,49.58961],[5.84565,49.5981],[5.8694,49.6106],[5.88182,49.63815],[5.89998,49.63907],[5.89934,49.66239],[5.85656,49.67628],[5.85628,49.68211],[5.8757,49.71118],[5.86481,49.72331],[5.84325,49.71822],[5.82191,49.72128],[5.82489,49.73767],[5.82073,49.74878],[5.78626,49.79079],[5.76517,49.78961],[5.75094,49.79094],[5.74159,49.82126],[5.74581,49.82435],[5.7372,49.83353],[5.74053,49.84142],[5.74701,49.84048],[5.74624,49.84783],[5.75399,49.84878],[5.74066,49.85152],[5.75229,49.85922],[5.74955,49.87554],[5.77567,49.87438],[5.77505,49.88057],[5.7346,49.89341],[5.73303,49.90285],[5.75783,49.91737],[5.76039,49.93252],[5.77073,49.93711],[5.76878,49.94239],[5.7688,49.96104],[5.78672,49.96816],[5.80524,49.96677],[5.80652,49.97321],[5.83129,49.97995],[5.83462,49.98656],[5.81806,49.99936],[5.81561,50.01437],[5.84792,50.02809],[5.86189,50.04581],[5.85087,50.0563],[5.85781,50.07186],[5.881,50.08069],[5.89196,50.12041],[5.95286,50.13384],[5.96175,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",icon:"https://www.geoportail.lu/static/img/lion.png"},{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",endDate:"2013-07-20T00:00:00.000Z",startDate:"2013-07-19T00:00:00.000Z",zoomExtent:[0,20],polygon:[[[5.96175,50.17631],[6.02627,50.18496],[6.03318,50.16395],[6.06069,50.15536],[6.07668,50.15913],[6.07824,50.17255],[6.10176,50.17199],[6.1225,50.16437],[6.1201,50.15594],[6.1277,50.14993],[6.11323,50.13739],[6.12369,50.13719],[6.14093,50.1305],[6.13555,50.11899],[6.13808,50.10263],[6.13108,50.09964],[6.13547,50.09119],[6.12194,50.09059],[6.12634,50.07817],[6.13186,50.07348],[6.12117,50.064],[6.11444,50.06139],[6.11563,50.05817],[6.12361,50.06323],[6.13661,50.04178],[6.13034,50.02975],[6.14821,50.02307],[6.13868,50.01572],[6.13594,50.01485],[6.13138,50.01905],[6.13024,50.01819],[6.13934,50.01116],[6.1517,50.01058],[6.14546,49.99689],[6.13966,49.9994],[6.13852,49.99829],[6.14218,49.99535],[6.15023,49.99518],[6.15625,49.98867],[6.17305,49.98589],[6.17348,49.98344],[6.17035,49.98376],[6.16549,49.97115],[6.17151,49.96298],[6.1763,49.962],[6.17995,49.95386],[6.18339,49.9548],[6.17983,49.96307],[6.18331,49.9686],[6.19277,49.97158],[6.19978,49.95352],[6.20707,49.95672],[6.21269,49.9514],[6.22502,49.95039],[6.22044,49.94369],[6.22824,49.93726],[6.22635,49.92766],[6.21913,49.92354],[6.22986,49.92125],[6.23603,49.91355],[6.23187,49.91064],[6.22769,49.91062],[6.23229,49.9072],[6.23381,49.90028],[6.24692,49.89535],[6.25781,49.88724],[6.26301,49.88101],[6.27646,49.87725],[6.28113,49.87957],[6.29166,49.87548],[6.2977,49.86673],[6.30989,49.87107],[6.31532,49.8673],[6.31465,49.86057],[6.32361,49.85188],[6.32158,49.8409],[6.32741,49.83673],[6.33656,49.83998],[6.33937,49.8507],[6.36465,49.85164],[6.4022,49.82098],[6.42643,49.81629],[6.42807,49.81186],[6.43097,49.81129],[6.44161,49.81547],[6.44344,49.81233],[6.45366,49.81275],[6.46454,49.81975],[6.47057,49.82385],[6.49681,49.81277],[6.50669,49.80993],[6.51155,49.80238],[6.51485,49.80513],[6.5196,49.81446],[6.52981,49.81048],[6.53225,49.80686],[6.53083,49.80116],[6.50622,49.78899],[6.51917,49.78344],[6.51105,49.77422],[6.52056,49.76818],[6.52052,49.76134],[6.50373,49.75086],[6.50263,49.73298],[6.50727,49.72938],[6.51809,49.7242],[6.51642,49.72129],[6.51176,49.72016],[6.50479,49.725],[6.49891,49.72639],[6.49558,49.72443],[6.50712,49.71655],[6.50788,49.71215],[6.5046,49.71227],[6.42714,49.66237],[6.4399,49.66025],[6.44251,49.65591],[6.42178,49.61809],[6.39898,49.60094],[6.37941,49.59526],[6.37551,49.58809],[6.38443,49.5801],[6.38119,49.57509],[6.36909,49.5783],[6.35791,49.57166],[6.3849,49.55817],[6.38009,49.54856],[6.35855,49.53296],[6.35932,49.52481],[6.37076,49.50545],[6.37056,49.45732],[6.3334,49.46493],[6.32189,49.47244],[6.29503,49.47928],[6.28789,49.48379],[6.27191,49.49995],[6.24133,49.50693],[6.19669,49.50331],[6.17337,49.50577],[6.16086,49.50085],[6.1671,49.49006],[6.14018,49.48525],[6.12937,49.48803],[6.12725,49.47081],[6.1014,49.46726],[6.10483,49.45076],[6.08167,49.45417],[6.07722,49.46139],[6.05917,49.46306],[6.05222,49.46028],[6.04421,49.44553],[6.02529,49.44703],[6.02154,49.45127],[6.01574,49.44885],[5.99412,49.45301],[5.97657,49.44885],[5.97773,49.45955],[5.97232,49.46087],[5.96891,49.48202],[5.9616,49.49026],[5.91578,49.49835],[5.89033,49.4948],[5.86332,49.50006],[5.84897,49.50826],[5.84828,49.51397],[5.83641,49.51817],[5.83187,49.52639],[5.84308,49.53081],[5.83562,49.54114],[5.81625,49.53325],[5.8052,49.54272],[5.85943,49.57158],[5.86866,49.587],[5.86289,49.58525],[5.8511,49.58379],[5.84712,49.58961],[5.84565,49.5981],[5.8694,49.6106],[5.88182,49.63815],[5.89998,49.63907],[5.89934,49.66239],[5.85656,49.67628],[5.85628,49.68211],[5.8757,49.71118],[5.86481,49.72331],[5.84325,49.71822],[5.82191,49.72128],[5.82489,49.73767],[5.82073,49.74878],[5.78626,49.79079],[5.76517,49.78961],[5.75094,49.79094],[5.74159,49.82126],[5.74581,49.82435],[5.7372,49.83353],[5.74053,49.84142],[5.74701,49.84048],[5.74624,49.84783],[5.75399,49.84878],[5.74066,49.85152],[5.75229,49.85922],[5.74955,49.87554],[5.77567,49.87438],[5.77505,49.88057],[5.7346,49.89341],[5.73303,49.90285],[5.75783,49.91737],[5.76039,49.93252],[5.77073,49.93711],[5.76878,49.94239],[5.7688,49.96104],[5.78672,49.96816],[5.80524,49.96677],[5.80652,49.97321],[5.83129,49.97995],[5.83462,49.98656],[5.81806,49.99936],[5.81561,50.01437],[5.84792,50.02809],[5.86189,50.04581],[5.85087,50.0563],[5.85781,50.07186],[5.881,50.08069],[5.89196,50.12041],[5.95286,50.13384],[5.96175,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",icon:"https://www.geoportail.lu/static/img/lion.png"},{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",endDate:"2016-08-16T00:00:00.000Z",startDate:"2013-08-30T00:00:00.000Z",zoomExtent:[0,20],polygon:[[[5.96175,50.17631],[6.02627,50.18496],[6.03318,50.16395],[6.06069,50.15536],[6.07668,50.15913],[6.07824,50.17255],[6.10176,50.17199],[6.1225,50.16437],[6.1201,50.15594],[6.1277,50.14993],[6.11323,50.13739],[6.12369,50.13719],[6.14093,50.1305],[6.13555,50.11899],[6.13808,50.10263],[6.13108,50.09964],[6.13547,50.09119],[6.12194,50.09059],[6.12634,50.07817],[6.13186,50.07348],[6.12117,50.064],[6.11444,50.06139],[6.11563,50.05817],[6.12361,50.06323],[6.13661,50.04178],[6.13034,50.02975],[6.14821,50.02307],[6.13868,50.01572],[6.13594,50.01485],[6.13138,50.01905],[6.13024,50.01819],[6.13934,50.01116],[6.1517,50.01058],[6.14546,49.99689],[6.13966,49.9994],[6.13852,49.99829],[6.14218,49.99535],[6.15023,49.99518],[6.15625,49.98867],[6.17305,49.98589],[6.17348,49.98344],[6.17035,49.98376],[6.16549,49.97115],[6.17151,49.96298],[6.1763,49.962],[6.17995,49.95386],[6.18339,49.9548],[6.17983,49.96307],[6.18331,49.9686],[6.19277,49.97158],[6.19978,49.95352],[6.20707,49.95672],[6.21269,49.9514],[6.22502,49.95039],[6.22044,49.94369],[6.22824,49.93726],[6.22635,49.92766],[6.21913,49.92354],[6.22986,49.92125],[6.23603,49.91355],[6.23187,49.91064],[6.22769,49.91062],[6.23229,49.9072],[6.23381,49.90028],[6.24692,49.89535],[6.25781,49.88724],[6.26301,49.88101],[6.27646,49.87725],[6.28113,49.87957],[6.29166,49.87548],[6.2977,49.86673],[6.30989,49.87107],[6.31532,49.8673],[6.31465,49.86057],[6.32361,49.85188],[6.32158,49.8409],[6.32741,49.83673],[6.33656,49.83998],[6.33937,49.8507],[6.36465,49.85164],[6.4022,49.82098],[6.42643,49.81629],[6.42807,49.81186],[6.43097,49.81129],[6.44161,49.81547],[6.44344,49.81233],[6.45366,49.81275],[6.46454,49.81975],[6.47057,49.82385],[6.49681,49.81277],[6.50669,49.80993],[6.51155,49.80238],[6.51485,49.80513],[6.5196,49.81446],[6.52981,49.81048],[6.53225,49.80686],[6.53083,49.80116],[6.50622,49.78899],[6.51917,49.78344],[6.51105,49.77422],[6.52056,49.76818],[6.52052,49.76134],[6.50373,49.75086],[6.50263,49.73298],[6.50727,49.72938],[6.51809,49.7242],[6.51642,49.72129],[6.51176,49.72016],[6.50479,49.725],[6.49891,49.72639],[6.49558,49.72443],[6.50712,49.71655],[6.50788,49.71215],[6.5046,49.71227],[6.42714,49.66237],[6.4399,49.66025],[6.44251,49.65591],[6.42178,49.61809],[6.39898,49.60094],[6.37941,49.59526],[6.37551,49.58809],[6.38443,49.5801],[6.38119,49.57509],[6.36909,49.5783],[6.35791,49.57166],[6.3849,49.55817],[6.38009,49.54856],[6.35855,49.53296],[6.35932,49.52481],[6.37076,49.50545],[6.37056,49.45732],[6.3334,49.46493],[6.32189,49.47244],[6.29503,49.47928],[6.28789,49.48379],[6.27191,49.49995],[6.24133,49.50693],[6.19669,49.50331],[6.17337,49.50577],[6.16086,49.50085],[6.1671,49.49006],[6.14018,49.48525],[6.12937,49.48803],[6.12725,49.47081],[6.1014,49.46726],[6.10483,49.45076],[6.08167,49.45417],[6.07722,49.46139],[6.05917,49.46306],[6.05222,49.46028],[6.04421,49.44553],[6.02529,49.44703],[6.02154,49.45127],[6.01574,49.44885],[5.99412,49.45301],[5.97657,49.44885],[5.97773,49.45955],[5.97232,49.46087],[5.96891,49.48202],[5.9616,49.49026],[5.91578,49.49835],[5.89033,49.4948],[5.86332,49.50006],[5.84897,49.50826],[5.84828,49.51397],[5.83641,49.51817],[5.83187,49.52639],[5.84308,49.53081],[5.83562,49.54114],[5.81625,49.53325],[5.8052,49.54272],[5.85943,49.57158],[5.86866,49.587],[5.86289,49.58525],[5.8511,49.58379],[5.84712,49.58961],[5.84565,49.5981],[5.8694,49.6106],[5.88182,49.63815],[5.89998,49.63907],[5.89934,49.66239],[5.85656,49.67628],[5.85628,49.68211],[5.8757,49.71118],[5.86481,49.72331],[5.84325,49.71822],[5.82191,49.72128],[5.82489,49.73767],[5.82073,49.74878],[5.78626,49.79079],[5.76517,49.78961],[5.75094,49.79094],[5.74159,49.82126],[5.74581,49.82435],[5.7372,49.83353],[5.74053,49.84142],[5.74701,49.84048],[5.74624,49.84783],[5.75399,49.84878],[5.74066,49.85152],[5.75229,49.85922],[5.74955,49.87554],[5.77567,49.87438],[5.77505,49.88057],[5.7346,49.89341],[5.73303,49.90285],[5.75783,49.91737],[5.76039,49.93252],[5.77073,49.93711],[5.76878,49.94239],[5.7688,49.96104],[5.78672,49.96816],[5.80524,49.96677],[5.80652,49.97321],[5.83129,49.97995],[5.83462,49.98656],[5.81806,49.99936],[5.81561,50.01437],[5.84792,50.02809],[5.86189,50.04581],[5.85087,50.0563],[5.85781,50.07186],[5.881,50.08069],[5.89196,50.12041],[5.95286,50.13384],[5.96175,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",icon:"https://www.geoportail.lu/static/img/lion.png"},{id:"lu.geoportail.opendata.ortho2017",name:"Ortho 2017 geoportail.lu",type:"tms",template:"https://{switch:wmts3,wmts4}.geoportail.lu/opendata/wmts/ortho_2017/GLOBAL_WEBMERCATOR_4_V3/{zoom}/{x}/{y}.jpeg",endDate:"2017-06-22T00:00:00.000Z",startDate:"2017-06-14T00:00:00.000Z",zoomExtent:[0,20],polygon:[[[5.96175,50.17631],[6.02627,50.18496],[6.03318,50.16395],[6.06069,50.15536],[6.07668,50.15913],[6.07824,50.17255],[6.10176,50.17199],[6.1225,50.16437],[6.1201,50.15594],[6.1277,50.14993],[6.11323,50.13739],[6.12369,50.13719],[6.14093,50.1305],[6.13555,50.11899],[6.13808,50.10263],[6.13108,50.09964],[6.13547,50.09119],[6.12194,50.09059],[6.12634,50.07817],[6.13186,50.07348],[6.12117,50.064],[6.11444,50.06139],[6.11563,50.05817],[6.12361,50.06323],[6.13661,50.04178],[6.13034,50.02975],[6.14821,50.02307],[6.13868,50.01572],[6.13594,50.01485],[6.13138,50.01905],[6.13024,50.01819],[6.13934,50.01116],[6.1517,50.01058],[6.14546,49.99689],[6.13966,49.9994],[6.13852,49.99829],[6.14218,49.99535],[6.15023,49.99518],[6.15625,49.98867],[6.17305,49.98589],[6.17348,49.98344],[6.17035,49.98376],[6.16549,49.97115],[6.17151,49.96298],[6.1763,49.962],[6.17995,49.95386],[6.18339,49.9548],[6.17983,49.96307],[6.18331,49.9686],[6.19277,49.97158],[6.19978,49.95352],[6.20707,49.95672],[6.21269,49.9514],[6.22502,49.95039],[6.22044,49.94369],[6.22824,49.93726],[6.22635,49.92766],[6.21913,49.92354],[6.22986,49.92125],[6.23603,49.91355],[6.23187,49.91064],[6.22769,49.91062],[6.23229,49.9072],[6.23381,49.90028],[6.24692,49.89535],[6.25781,49.88724],[6.26301,49.88101],[6.27646,49.87725],[6.28113,49.87957],[6.29166,49.87548],[6.2977,49.86673],[6.30989,49.87107],[6.31532,49.8673],[6.31465,49.86057],[6.32361,49.85188],[6.32158,49.8409],[6.32741,49.83673],[6.33656,49.83998],[6.33937,49.8507],[6.36465,49.85164],[6.4022,49.82098],[6.42643,49.81629],[6.42807,49.81186],[6.43097,49.81129],[6.44161,49.81547],[6.44344,49.81233],[6.45366,49.81275],[6.46454,49.81975],[6.47057,49.82385],[6.49681,49.81277],[6.50669,49.80993],[6.51155,49.80238],[6.51485,49.80513],[6.5196,49.81446],[6.52981,49.81048],[6.53225,49.80686],[6.53083,49.80116],[6.50622,49.78899],[6.51917,49.78344],[6.51105,49.77422],[6.52056,49.76818],[6.52052,49.76134],[6.50373,49.75086],[6.50263,49.73298],[6.50727,49.72938],[6.51809,49.7242],[6.51642,49.72129],[6.51176,49.72016],[6.50479,49.725],[6.49891,49.72639],[6.49558,49.72443],[6.50712,49.71655],[6.50788,49.71215],[6.5046,49.71227],[6.42714,49.66237],[6.4399,49.66025],[6.44251,49.65591],[6.42178,49.61809],[6.39898,49.60094],[6.37941,49.59526],[6.37551,49.58809],[6.38443,49.5801],[6.38119,49.57509],[6.36909,49.5783],[6.35791,49.57166],[6.3849,49.55817],[6.38009,49.54856],[6.35855,49.53296],[6.35932,49.52481],[6.37076,49.50545],[6.37056,49.45732],[6.3334,49.46493],[6.32189,49.47244],[6.29503,49.47928],[6.28789,49.48379],[6.27191,49.49995],[6.24133,49.50693],[6.19669,49.50331],[6.17337,49.50577],[6.16086,49.50085],[6.1671,49.49006],[6.14018,49.48525],[6.12937,49.48803],[6.12725,49.47081],[6.1014,49.46726],[6.10483,49.45076],[6.08167,49.45417],[6.07722,49.46139],[6.05917,49.46306],[6.05222,49.46028],[6.04421,49.44553],[6.02529,49.44703],[6.02154,49.45127],[6.01574,49.44885],[5.99412,49.45301],[5.97657,49.44885],[5.97773,49.45955],[5.97232,49.46087],[5.96891,49.48202],[5.9616,49.49026],[5.91578,49.49835],[5.89033,49.4948],[5.86332,49.50006],[5.84897,49.50826],[5.84828,49.51397],[5.83641,49.51817],[5.83187,49.52639],[5.84308,49.53081],[5.83562,49.54114],[5.81625,49.53325],[5.8052,49.54272],[5.85943,49.57158],[5.86866,49.587],[5.86289,49.58525],[5.8511,49.58379],[5.84712,49.58961],[5.84565,49.5981],[5.8694,49.6106],[5.88182,49.63815],[5.89998,49.63907],[5.89934,49.66239],[5.85656,49.67628],[5.85628,49.68211],[5.8757,49.71118],[5.86481,49.72331],[5.84325,49.71822],[5.82191,49.72128],[5.82489,49.73767],[5.82073,49.74878],[5.78626,49.79079],[5.76517,49.78961],[5.75094,49.79094],[5.74159,49.82126],[5.74581,49.82435],[5.7372,49.83353],[5.74053,49.84142],[5.74701,49.84048],[5.74624,49.84783],[5.75399,49.84878],[5.74066,49.85152],[5.75229,49.85922],[5.74955,49.87554],[5.77567,49.87438],[5.77505,49.88057],[5.7346,49.89341],[5.73303,49.90285],[5.75783,49.91737],[5.76039,49.93252],[5.77073,49.93711],[5.76878,49.94239],[5.7688,49.96104],[5.78672,49.96816],[5.80524,49.96677],[5.80652,49.97321],[5.83129,49.97995],[5.83462,49.98656],[5.81806,49.99936],[5.81561,50.01437],[5.84792,50.02809],[5.86189,50.04581],[5.85087,50.0563],[5.85781,50.07186],[5.881,50.08069],[5.89196,50.12041],[5.95286,50.13384],[5.96175,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",icon:"https://www.geoportail.lu/static/img/lion.png"},{id:"ORTOFOTO_V1",name:"Orthophoto 1st cycle (1994-1999) - Latvia",type:"wms",template:"https://services.lgia.gov.lv/arcfree/services/Ortofoto_v1/MapServer/WmsServer?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=0&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[27.66415,55.75354],[27.68475,55.93319],[28.26703,56.1908],[28.23682,56.49827],[27.82757,56.94886],[27.90997,57.37037],[27.58313,57.56387],[26.93219,57.63598],[26.5202,57.58596],[26.0368,57.87192],[25.1991,58.10487],[24.31744,57.90258],[24.31744,57.19669],[23.93567,56.9788],[23.55115,56.98479],[23.23804,57.10283],[23.14465,57.37333],[22.60632,57.60215],[22.60083,57.76953],[21.66699,57.56681],[21.40057,57.29625],[21.38409,57.0177],[21.04626,56.80026],[20.99133,56.36615],[21.0545,56.0392],[21.28796,56.05608],[21.29895,56.1908],[22.11743,56.41936],[24.44379,56.24425],[24.81183,56.3996],[25.15515,56.1694],[25.58087,56.12962],[26.53668,55.66146],[26.91296,55.66766],[27.0805,55.80991],[27.66415,55.75354]]],terms_text:"Latvijas Ģeotelpiskās informācijas aģentūras brīvais WMS serviss 1994 - 1999.gada Latvijas ortofotokarte"},{id:"ORTOS_DGRF_2004_06",name:"Ortofotos DGRF 2004-2006 (WMS)",type:"wms",template:"http://mapas.dgterritorio.pt:8888/wms/produtos?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=Ortos&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",endDate:"2006-01-01T00:00:00.000Z",startDate:"2004-01-01T00:00:00.000Z",zoomExtent:[14,19],polygon:[[[-7.31278,36.98391],[-7.44461,37.5718],[-7.1933,37.97019],[-6.97357,38.00807],[-6.90628,38.24142],[-7.06627,38.20743],[-7.27158,38.45628],[-7.20429,38.72356],[-7.0134,38.85468],[-6.91315,39.03839],[-6.97357,39.13113],[-7.17957,39.23651],[-7.28668,39.48497],[-7.44873,39.61838],[-7.34162,39.60886],[-6.99692,39.64906],[-6.81839,40.0192],[-7.01065,40.19986],[-6.85272,40.24285],[-6.76209,40.35073],[-6.77994,40.8886],[-6.88637,41.01151],[-6.79642,41.01721],[-6.63849,41.21689],[-6.4531,41.24116],[-6.29311,41.38763],[-6.15715,41.5908],[-6.31165,41.68932],[-6.51215,41.71188],[-6.49841,41.88081],[-6.56296,41.97991],[-6.80191,42.00951],[-7.20497,42.00135],[-7.22763,41.8849],[-7.36908,41.87058],[-7.72751,41.92885],[-7.92526,41.94009],[-8.07907,41.84706],[-8.1601,41.91812],[-8.01796,42.05031],[-8.19924,42.18681],[-8.39356,42.1023],[-8.66066,42.07886],[-8.88382,41.88081],[-9.17084,41.86956],[-9.04175,41.43655],[-9.01978,40.65981],[-9.15711,40.26695],[-9.81903,39.52099],[-9.74213,38.6512],[-9.12964,37.88136],[-9.27246,36.99378],[-9.09394,36.68604],[-7.80579,36.74989],[-7.31278,36.98391]]],terms_url:"http://www.dgterritorio.pt/dados_abertos/ortofotos/",terms_text:"Direcção-Geral do Território",icon:"http://www.igeo.pt/favicon.ico"},{id:"ORTOS_DGT_2014_15",name:"Ortofotos Litoral DGT 2014-2015 (WMS)",type:"wms",template:"http://ows.dgterritorio.pt/wss/service/ortos2014-2015-wms/guest?language=por&FORMAT=image/png&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=Ortoimagens_2014-2015_Litoral&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",endDate:"2015-01-01T00:00:00.000Z",startDate:"2014-01-01T00:00:00.000Z",zoomExtent:[1,20],polygon:[[[-7.38968,37.19205],[-7.52426,37.18002],[-7.89505,36.98171],[-8.15186,37.10886],[-8.65036,37.14062],[-8.95111,37.03545],[-8.78632,37.34833],[-8.76434,37.55111],[-8.7561,38.38258],[-8.47664,38.33466],[-8.47183,38.40141],[-8.66066,38.46596],[-8.66959,38.60882],[-9.142,38.53689],[-8.81104,38.67372],[-8.79318,38.85468],[-8.95935,38.9829],[-9.18732,38.84934],[-9.2395,38.72838],[-9.37821,38.74659],[-9.38233,39.07891],[-9.29169,39.2514],[-9.31915,39.33642],[-9.17084,39.38526],[-9.06372,39.48815],[-9.02252,39.69662],[-8.78632,40.14529],[-8.86322,40.2093],[-8.72589,40.53155],[-8.64075,40.50858],[-8.62427,40.63063],[-8.53089,40.6004],[-8.535,40.71292],[-8.61466,40.89275],[-8.61878,41.10419],[-8.53089,41.16728],[-8.66959,41.21689],[-8.72315,41.41081],[-8.76984,41.65958],[-8.66547,41.73955],[-8.81104,41.72316],[-8.81104,41.85217],[-8.74649,41.9125],[-8.83576,41.93089],[-8.91815,41.84501],[-8.89343,41.70778],[-8.82065,41.50755],[-8.73139,41.16315],[-8.67508,41.069],[-8.68469,40.90729],[-8.93326,40.17573],[-8.88107,40.12219],[-9.11453,39.64694],[-9.11865,39.5623],[-9.3013,39.40543],[-9.43039,39.37571],[-9.34799,39.23864],[-9.45099,39.04799],[-9.45786,38.89317],[-9.53201,38.78835],[-9.50043,38.68551],[-9.28894,38.663],[-9.19418,38.54172],[-9.25324,38.38473],[-9.03488,38.42347],[-8.92502,38.46757],[-8.81241,38.35997],[-8.7973,38.14968],[-8.91953,37.95286],[-8.84262,37.8651],[-8.83988,37.40617],[-9.02664,37.01023],[-8.92914,36.97513],[-8.61466,37.099],[-8.15048,37.05956],[-7.8923,36.93672],[-7.48993,37.15156],[-7.39105,37.15813],[-7.38968,37.19205]]],terms_url:"http://www.dgterritorio.pt/",terms_text:"Direcção-Geral do Território",icon:"http://www.igeo.pt/favicon.ico"},{id:"OS-historic-25k-OSM_Limited",name:"OS 1:25k historic (OSM)",type:"tms",template:"https://ooc.openstreetmap.org/os1/{zoom}/{x}/{y}.jpg",zoomExtent:[6,17],polygon:[[[-6.45854,49.90441],[-6.3872,49.98411],[-6.22968,49.98962],[-6.21713,49.86801],[-6.45512,49.85918],[-6.45854,49.90441]],[[-1.44951,60.86341],[-0.71671,60.85451],[-0.73497,60.43598],[-0.69388,60.41682],[-0.72584,60.39427],[-0.73954,60.04847],[-0.92674,60.04619],[-0.93815,59.82662],[-1.45865,59.8312],[-1.44552,60.0536],[-1.46321,60.0536],[-1.46435,60.063],[-1.57165,60.06385],[-1.56936,60.179],[-1.64356,60.1807],[-1.64356,60.18922],[-1.82162,60.1895],[-1.82048,60.36155],[-1.8416,60.36973],[-1.82162,60.38328],[-1.81799,60.59343],[-1.45317,60.59343],[-1.44951,60.86341]],[[-4.90892,54.42421],[-4.2826,54.44299],[-4.25354,54.02977],[-4.87664,54.02218],[-4.90892,54.42421]],[[-5.86674,59.14446],[-5.776,59.14709],[-5.772,59.10141],[-5.86218,59.09906],[-5.86674,59.14446]],[[-1.70659,59.57036],[-1.55792,59.56935],[-1.55649,59.49657],[-1.70545,59.49758],[-1.70659,59.57036]],[[-7.68658,58.2941],[-7.53306,58.3007],[-7.52564,58.26469],[-7.67973,58.25779],[-7.68658,58.2941]],[[-4.53383,59.03599],[-4.48132,59.03716],[-4.47961,59.01866],[-4.53326,59.01807],[-4.53383,59.03599]],[[-8.67107,57.87699],[-8.46732,57.88973],[-8.44678,57.7907],[-8.65109,57.77792],[-8.67107,57.87699]],[[-5.23955,50.35306],[-5.79201,50.33849],[-5.76005,49.9317],[-4.65514,49.95815],[-4.67797,50.28601],[-4.24422,50.28017],[-4.24878,50.20425],[-3.38129,50.20425],[-3.42238,50.51882],[-3.11648,50.52463],[-3.12105,50.65796],[-2.67364,50.66195],[-2.59535,50.63943],[-2.5905,50.57284],[-2.47912,50.57335],[-2.47589,50.50667],[-2.39679,50.50564],[-2.40164,50.57233],[-1.04003,50.57182],[-1.03357,50.70593],[-0.5493,50.70388],[-0.54607,50.78866],[-0.09247,50.7856],[-0.08763,50.71819],[0.47897,50.71206],[0.48704,50.81825],[0.97615,50.80499],[0.99229,51.01263],[1.44912,51.00044],[1.47818,51.40904],[1.02296,51.42716],[1.03588,51.76409],[1.61054,51.7501],[1.64606,52.156],[1.72677,52.15402],[1.74937,52.44818],[1.78707,52.48116],[1.7591,52.52251],[1.79335,52.96027],[0.37981,52.99585],[0.38952,53.25112],[0.34786,53.25112],[0.32389,53.28219],[0.34615,53.65385],[0.12849,53.65755],[0.11658,53.66747],[0.13506,54.06557],[-0.06098,54.06591],[-0.04142,54.47094],[-0.56627,54.47718],[-0.55921,54.65651],[-1.16656,54.66235],[-1.16374,54.84261],[-1.33162,54.84391],[-1.32571,55.24708],[-1.52945,55.24871],[-1.52418,55.65401],[-1.76388,55.65401],[-1.77337,55.97191],[-2.16079,55.9683],[-2.15433,56.06214],[-2.45781,56.05853],[-2.41906,56.64172],[-2.09622,56.64172],[-2.0833,57.00213],[-1.92834,57.01268],[-1.9181,57.35909],[-1.75022,57.36257],[-1.76959,57.76086],[-3.69376,57.75742],[-3.70667,57.98064],[-3.5969,57.97721],[-3.60336,58.12073],[-3.02223,58.13096],[-3.02869,58.54108],[-2.8479,58.53097],[-2.86081,58.84305],[-2.67962,58.8415],[-2.68419,58.88517],[-2.63397,58.90522],[-2.67962,58.93351],[-2.68876,59.02292],[-2.36687,59.02292],[-2.37029,59.26529],[-2.3429,59.2822],[-2.37144,59.29969],[-2.37372,59.37071],[-2.3429,59.38582],[-2.37258,59.40035],[-2.37144,59.42591],[-3.07342,59.42301],[-3.07114,59.34336],[-3.1031,59.33114],[-3.07456,59.31367],[-3.07228,59.2326],[-3.38503,59.14842],[-3.37476,58.93528],[-3.56538,58.93233],[-3.55483,58.69759],[-5.28086,58.66677],[-5.25342,58.35141],[-5.50685,58.34379],[-5.47618,58.03236],[-5.8975,58.02124],[-5.8523,57.61718],[-6.13963,57.61372],[-6.15416,57.74232],[-6.29137,57.73801],[-6.33657,58.13988],[-6.11219,58.14669],[-6.14738,58.51063],[-6.29348,58.54162],[-6.84137,58.29773],[-7.00574,58.29293],[-7.10162,58.20644],[-7.25731,58.17931],[-7.25311,58.10049],[-7.40707,58.09056],[-7.39135,57.79114],[-7.79099,57.77332],[-7.76242,57.54442],[-7.6985,57.14532],[-7.79438,57.13045],[-7.71676,56.73686],[-7.01221,56.76544],[-6.97992,56.54539],[-7.06386,56.54539],[-7.04449,56.35626],[-6.50068,56.38129],[-6.44914,55.97936],[-6.56329,55.96915],[-6.53937,55.70301],[-6.55955,55.69073],[-6.53453,55.67617],[-6.52162,55.57044],[-5.89126,55.59234],[-5.85601,55.23207],[-5.22936,55.2516],[-5.18371,54.62541],[-3.6656,54.65184],[-3.64962,54.432],[-3.54004,54.43067],[-3.53091,54.02902],[-3.06977,54.03036],[-3.06757,53.82214],[-3.08049,53.77399],[-3.06192,53.74775],[-3.06112,53.6737],[-3.21447,53.67084],[-3.20577,53.42262],[-3.27996,53.35522],[-3.28967,53.36084],[-3.33275,53.36493],[-3.37613,53.35403],[-4.0889,53.34331],[-4.09455,53.4612],[-4.69741,53.44486],[-4.68828,53.33186],[-4.72024,53.28958],[-4.68371,53.24862],[-4.67687,53.15426],[-4.84808,53.14468],[-4.81783,52.74403],[-4.25458,52.75589],[-4.22888,52.25488],[-4.26076,52.25364],[-4.27246,52.24326],[-4.81363,52.23009],[-4.80792,52.11389],[-5.38891,52.09917],[-5.37179,51.91297],[-5.42087,51.91015],[-5.41402,51.84532],[-5.36836,51.84744],[-5.34668,51.55953],[-4.77368,51.57585],[-4.76569,51.48851],[-4.19154,51.49704],[-4.18698,51.43447],[-3.61512,51.44443],[-3.61055,51.37465],[-3.14941,51.37893],[-3.14941,51.29193],[-4.30387,51.27459],[-4.28612,51.05087],[-4.85433,51.03666],[-4.83722,50.72128],[-5.26183,50.70827],[-5.23955,50.35306]],[[-2.15027,60.17132],[-2.00302,60.16961],[-2.00131,60.0997],[-2.14855,60.10112],[-2.15027,60.17132]],[[-6.2086,59.11635],[-6.12299,59.11664],[-6.12185,59.0715],[-6.20974,59.0715],[-6.2086,59.11635]],[[-4.41596,59.0889],[-4.4212,59.07708],[-4.39719,59.07791],[-4.39134,59.08973],[-4.41596,59.0889]]]},{id:"OS-New_Popular_Edition-historic",name:"OS New Popular Edition historic",type:"tms",template:"https://ooc.openstreetmap.org/npe/{zoom}/{x}/{y}.png",zoomExtent:[6,15],polygon:[[[-3.68466,55.23744],[-3.65106,54.42892],[-3.54463,54.43072],[-3.52815,54.02593],[-3.07016,54.03137],[-3.06123,53.6717],[-3.21298,53.67048],[-3.20371,53.35568],[-4.10424,53.34297],[-4.11042,53.46005],[-4.71124,53.44799],[-4.69339,53.15171],[-4.84307,53.1476],[-4.81595,52.74378],[-4.25342,52.75541],[-4.22733,52.24378],[-4.81303,52.23117],[-4.80754,52.11452],[-5.38913,52.09892],[-5.3493,51.56085],[-4.77252,51.57622],[-4.76772,51.48652],[-4.19299,51.49806],[-4.18956,51.43518],[-3.61278,51.44502],[-3.61072,51.37307],[-3.15067,51.37864],[-3.14723,51.28984],[-4.29462,51.2718],[-4.28363,51.04744],[-4.85423,51.03406],[-4.83707,50.76556],[-5.2621,50.75427],[-5.23395,50.34984],[-5.79562,50.33319],[-5.76228,49.92913],[-4.64717,49.96094],[-4.66914,50.2753],[-4.25166,50.2832],[-4.24617,50.19361],[-3.40159,50.20679],[-3.41395,50.52041],[-3.13105,50.52391],[-3.1338,50.66078],[-2.66963,50.66252],[-2.66688,50.5719],[-1.04228,50.56929],[-1.04502,50.70429],[-0.54652,50.69994],[-0.54103,50.79031],[-0.08784,50.78424],[-0.08887,50.72211],[0.47693,50.70907],[0.48242,50.81939],[0.98024,50.8068],[0.99328,51.01333],[1.44784,51.00036],[1.47805,51.40478],[1.018,51.41634],[1.04272,51.76742],[1.6195,51.75084],[1.65246,52.15456],[1.72662,52.15245],[1.79529,52.9594],[0.60396,52.99123],[0.60327,52.97222],[0.38148,52.97883],[0.39625,53.24796],[0.31934,53.24961],[0.34269,53.65319],[0.11609,53.65726],[0.13738,54.06181],[-0.06243,54.06584],[-0.04183,54.46924],[-0.56781,54.47722],[-0.56163,54.65715],[-1.18098,54.66271],[-1.17755,54.84183],[-1.33342,54.84381],[-1.32655,55.24743],[-1.53117,55.24821],[-1.52636,55.6528],[-1.76394,55.6528],[-1.76257,55.96765],[-2.40321,55.96727],[-2.39772,55.56243],[-2.16151,55.56282],[-2.15808,55.2486],[-2.92158,55.24571],[-3.68466,55.23744]]]},{id:"OS-OpenData_Locator",name:"OS OpenData Locator",type:"tms",template:"http://tiles.itoworld.com/os_locator/{zoom}/{x}/{y}.png",zoomExtent:[0,22],polygon:[[[-0.88639,61.11666],[-9.24009,57.92465],[-6.61235,55.46835],[-6.1039,55.40191],[-5.61358,55.06607],[-5.40088,54.90562],[-5.29371,54.77201],[-5.11832,54.5911],[-4.92368,54.38599],[-4.94067,53.59884],[-5.44172,52.27725],[-6.03376,51.6012],[-7.54473,49.33762],[-2.59721,50.2588],[0.65674,50.64047],[1.32419,50.83256],[1.87586,51.19234],[2.05883,52.88863],[-1.61452,56.47933],[-1.21085,57.64972],[-1.69525,59.08903],[0.21543,60.43058],[-0.88639,61.11666]]],overlay:true},{id:"OS-OpenData_StreetView",name:"OS OpenData StreetView",type:"tms",template:"https://{switch:a,b,c}.os.openstreetmap.org/sv/{zoom}/{x}/{y}.png",zoomExtent:[1,18],polygon:[[[-5.82929,50.02297],[-5.82929,50.25482],[-5.37336,50.25482],[-5.37336,50.35306],[-5.1756,50.35306],[-5.1756,50.59254],[-4.99707,50.59254],[-4.99707,50.69356],[-4.79657,50.69356],[-4.79657,50.78221],[-4.69495,50.78221],[-4.69495,50.96074],[-4.60431,50.96074],[-4.60431,51.06921],[-4.37922,51.06921],[-4.37922,51.25218],[-3.90393,51.25218],[-3.90393,51.2917],[-3.71717,51.2917],[-3.71717,51.2453],[-3.14862,51.2453],[-3.14862,51.36207],[-3.74463,51.36207],[-3.74463,51.43404],[-3.82978,51.43404],[-3.82978,51.52982],[-4.08521,51.52982],[-4.08521,51.49393],[-4.37922,51.49393],[-4.37922,51.54272],[-5.14442,51.54272],[-5.14442,51.6296],[-5.73871,51.6296],[-5.73871,51.77404],[-5.50954,51.77404],[-5.50954,51.98026],[-5.1988,51.98026],[-5.1988,52.09734],[-4.88806,52.09734],[-4.88806,52.18316],[-4.49575,52.18316],[-4.49575,52.29257],[-4.30154,52.29257],[-4.30154,52.36853],[-4.18112,52.36853],[-4.18112,52.79337],[-4.44137,52.79337],[-4.44137,52.73696],[-4.85698,52.73696],[-4.85698,52.93173],[-4.7288,52.93173],[-4.7288,53.50386],[-4.15782,53.50386],[-4.15782,53.41135],[-3.31105,53.41135],[-3.31105,53.50386],[-3.23337,53.50386],[-3.23337,54.01592],[-3.39262,54.01592],[-3.39262,54.1981],[-3.55964,54.1981],[-3.55964,54.43373],[-3.7189,54.43373],[-3.7189,54.7219],[-4.30154,54.7219],[-4.30154,54.61407],[-5.04731,54.61407],[-5.04731,54.75329],[-5.22987,54.75329],[-5.22987,55.21908],[-5.65326,55.21908],[-5.65326,55.25009],[-5.89796,55.25009],[-5.89796,55.48225],[-6.59332,55.48225],[-6.59332,56.30134],[-7.17277,56.30134],[-7.17277,56.56018],[-6.81717,56.56018],[-6.81717,56.69917],[-6.53153,56.69917],[-6.53153,56.9067],[-6.81168,56.9067],[-6.81168,57.37166],[-6.8721,57.37166],[-6.8721,57.55189],[-7.09732,57.55189],[-7.09732,57.24111],[-7.17423,57.24111],[-7.17423,56.9067],[-7.37198,56.9067],[-7.37198,56.80759],[-7.5203,56.80759],[-7.5203,56.71425],[-7.83068,56.71425],[-7.83068,56.89946],[-7.64941,56.89946],[-7.64941,57.47396],[-7.83068,57.47396],[-7.83068,57.79156],[-7.47362,57.79156],[-7.47362,58.08606],[-7.18798,58.08606],[-7.18798,58.3672],[-6.80346,58.3672],[-6.80346,58.41558],[-6.63866,58.41558],[-6.63866,58.46733],[-6.51781,58.46733],[-6.51781,58.56256],[-6.05362,58.56256],[-6.05362,58.15688],[-6.14701,58.15688],[-6.14701,58.11059],[-6.27998,58.11059],[-6.27998,57.71227],[-6.15913,57.71227],[-6.15913,57.66676],[-5.93391,57.66676],[-5.93391,57.88925],[-5.80643,57.88925],[-5.80643,57.96218],[-5.61417,57.96218],[-5.61417,58.09112],[-5.49082,58.09112],[-5.49082,58.37333],[-5.31991,58.37333],[-5.31991,58.75015],[-3.572,58.75015],[-3.572,59.20918],[-3.19445,59.20918],[-3.19445,59.47592],[-2.24358,59.47592],[-2.24358,59.13887],[-2.4611,59.13887],[-2.4611,58.81859],[-2.74077,58.81859],[-2.74077,58.58047],[-2.91167,58.58047],[-2.91167,58.11575],[-3.48654,58.11575],[-3.48654,57.74039],[-1.71532,57.74039],[-1.71532,57.22256],[-1.97945,57.22256],[-1.97945,56.87607],[-2.1659,56.87607],[-2.1659,56.63332],[-2.36011,56.63332],[-2.36011,56.04775],[-1.97945,56.04775],[-1.97945,55.86509],[-1.4745,55.86509],[-1.4745,55.24999],[-1.3222,55.24999],[-1.3222,54.82217],[-1.055,54.82217],[-1.055,54.67466],[-0.66188,54.67466],[-0.66188,54.55275],[-0.32476,54.55275],[-0.32476,54.28652],[0.00928,54.28652],[0.00928,53.79385],[0.2082,53.79385],[0.2082,53.52177],[0.41635,53.52177],[0.41635,53.02989],[1.42734,53.02989],[1.42734,52.92021],[1.83339,52.92021],[1.83339,52.04249],[1.52355,52.04249],[1.52355,51.82613],[1.2697,51.82613],[1.2697,51.69675],[1.11665,51.69675],[1.11665,51.44035],[1.52355,51.44035],[1.52355,51.33318],[1.45076,51.33318],[1.45076,51.02076],[1.06999,51.02076],[1.06999,50.90084],[0.77881,50.90084],[0.77881,50.72984],[-0.7256,50.72984],[-0.7256,50.70384],[-1.00744,50.70384],[-1.00744,50.57363],[-2.36253,50.57363],[-2.36253,50.48464],[-2.49878,50.48464],[-2.49878,50.57363],[-3.40964,50.57363],[-3.40964,50.20578],[-3.69224,50.20578],[-3.69224,50.13477],[-5.00547,50.13477],[-5.00547,49.94745],[-5.28395,49.94745],[-5.28395,50.02297],[-5.82929,50.02297]],[[-6.45807,49.86736],[-6.45807,49.94999],[-6.39788,49.94999],[-6.39788,50.00538],[-6.17996,50.00538],[-6.17996,49.91686],[-6.25402,49.91686],[-6.25402,49.86736],[-6.45807,49.86736]],[[-5.83432,49.93216],[-5.83432,49.97546],[-5.76833,49.97546],[-5.76833,49.93216],[-5.83432,49.93216]],[[-1.94838,60.68857],[-1.94838,60.30588],[-1.75431,60.30588],[-1.75431,60.12844],[-1.57549,60.12844],[-1.57549,59.79792],[-1.0317,59.79792],[-1.0317,60.03545],[-0.66269,60.03545],[-0.66269,60.91039],[-1.10344,60.91039],[-1.10344,60.804],[-1.35063,60.804],[-1.35063,60.68857],[-1.94838,60.68857]],[[-2.20338,60.19686],[-2.20338,60.09294],[-1.9864,60.09294],[-1.9864,60.19686],[-2.20338,60.19686]],[[-1.75431,59.56983],[-1.75431,59.46394],[-1.53733,59.46394],[-1.53733,59.56983],[-1.75431,59.56983]],[[-4.5586,59.13705],[-4.5586,58.95691],[-4.2867,58.95691],[-4.2867,59.13705],[-4.5586,59.13705]],[[-6.27877,59.20257],[-6.27877,59.02278],[-5.66506,59.02278],[-5.66506,59.20257],[-6.27877,59.20257]],[[-8.71635,57.94406],[-8.71635,57.73059],[-8.35929,57.73059],[-8.35929,57.94406],[-8.71635,57.94406]],[[-7.6077,50.4021],[-7.6077,50.26887],[-7.39072,50.26887],[-7.39072,50.4021],[-7.6077,50.4021]],[[-7.73043,58.35799],[-7.73043,58.24831],[-7.51345,58.24831],[-7.51345,58.35799],[-7.73043,58.35799]]]},{id:"OS-Scottish_Popular-historic",name:"OS Scottish Popular historic",type:"tms",template:"https://ooc.openstreetmap.org/npescotland/{zoom}/{x}/{y}.jpg",zoomExtent:[6,15],polygon:[[[-6.37546,57.1045],[-6.12998,57.11183],[-6.12586,56.94143],[-6.26045,56.93892],[-6.26045,56.83765],[-6.24259,56.65806],[-6.3552,56.65655],[-6.37649,56.79029],[-7.02812,56.76396],[-6.99636,56.54246],[-7.04391,56.53937],[-7.03206,56.44201],[-6.98331,56.44353],[-6.97593,56.36063],[-6.45271,56.37964],[-6.44035,56.2013],[-6.19315,56.21199],[-6.18354,56.12483],[-6.36379,56.11641],[-6.36173,55.98258],[-6.48944,55.97912],[-6.47777,55.84134],[-6.55467,55.8371],[-6.53545,55.66049],[-6.45442,55.66087],[-6.44412,55.57285],[-6.19985,55.57266],[-5.96845,55.58857],[-5.98562,55.7686],[-5.90665,55.77169],[-5.88949,55.59284],[-5.80983,55.594],[-5.79335,55.41395],[-5.827,55.41395],[-5.80915,55.24247],[-5.61826,55.24873],[-5.62101,55.26713],[-5.46239,55.27026],[-5.48642,55.514],[-5.43836,55.51516],[-5.42943,55.42681],[-5.24129,55.43071],[-5.19464,54.80351],[-5.07105,54.80668],[-5.05221,54.62471],[-4.3223,54.65173],[-4.33123,54.7319],[-4.06786,54.73697],[-4.06786,54.76471],[-3.55699,54.77342],[-3.55837,54.83754],[-2.42098,54.84671],[-2.42647,55.25265],[-2.03097,55.25265],[-2.01449,55.56606],[-1.76455,55.56606],[-1.76455,55.9724],[-2.35026,55.96548],[-2.5796,56.06527],[-2.58234,56.37071],[-2.65032,56.36919],[-2.65581,56.50585],[-2.48965,56.50509],[-2.42785,56.55356],[-2.42373,56.73026],[-2.1628,56.73177],[-2.17104,56.99301],[-2.00075,56.99301],[-1.98479,57.3159],[-1.83476,57.31553],[-1.83441,57.36074],[-1.75167,57.36111],[-1.74893,57.63046],[-1.83613,57.63009],[-1.83544,57.70171],[-2.00436,57.70207],[-2.00367,57.71968],[-3.22281,57.71418],[-3.22629,57.76157],[-3.51331,57.77622],[-3.50914,57.71051],[-3.84766,57.70611],[-3.85182,57.76853],[-3.79925,57.76989],[-3.80474,57.88578],[-3.85556,57.88651],[-3.85937,57.97558],[-3.79513,57.97656],[-3.79483,58.03052],[-3.69733,58.03161],[-3.69458,58.06722],[-3.52391,58.07437],[-3.52978,58.16007],[-3.35774,58.16286],[-3.3483,58.28742],[-3.07638,58.29121],[-3.03004,58.43744],[-3.01768,58.65814],[-2.85837,58.66028],[-2.86524,58.7943],[-2.75812,58.79715],[-2.76636,58.87461],[-2.6208,58.88668],[-2.62766,58.97527],[-2.54114,58.97668],[-2.54217,59.0841],[-2.52363,59.08375],[-2.52913,59.1574],[-2.43849,59.15705],[-2.4378,59.246],[-2.36914,59.24705],[-2.3688,59.40748],[-2.52947,59.40748],[-2.52741,59.33436],[-2.70319,59.33576],[-2.70525,59.40608],[-3.12891,59.40433],[-3.12411,59.15951],[-3.40288,59.1574],[-3.39464,58.9689],[-3.4276,58.96961],[-3.42572,58.88526],[-3.45215,58.87071],[-3.51017,58.86911],[-3.50708,58.78826],[-3.38555,58.79004],[-3.3828,58.6999],[-3.4494,58.69847],[-3.45078,58.65385],[-3.50159,58.65421],[-3.5009,58.62705],[-3.72612,58.62383],[-3.72475,58.60595],[-4.6476,58.5895],[-4.65996,58.67171],[-5.10697,58.66135],[-5.09804,58.58091],[-5.23743,58.57769],[-5.22455,58.26305],[-5.4127,58.25818],[-5.39965,58.12245],[-5.53286,58.11991],[-5.52393,57.99494],[-5.55346,57.99422],[-5.54728,57.93995],[-5.85696,57.93157],[-5.83181,57.73361],[-5.86374,57.73224],[-5.85773,57.66096],[-6.19624,57.64975],[-6.20242,57.72353],[-6.41666,57.7162],[-6.42421,57.75945],[-6.4764,57.75725],[-6.46884,57.71326],[-6.53339,57.71216],[-6.52721,57.6391],[-6.692,57.63395],[-6.68102,57.54341],[-6.78195,57.53826],[-6.75311,57.31608],[-6.50592,57.32498],[-6.49768,57.28084],[-6.4812,57.27824],[-6.47159,57.19203],[-6.38644,57.19352],[-6.37546,57.1045]],[[-7.65043,56.77461],[-7.40667,56.79304],[-7.41972,56.88281],[-7.38676,56.90268],[-7.25836,56.91056],[-7.24806,57.07141],[-7.11485,57.077],[-7.16772,57.43466],[-7.0352,57.44094],[-7.05236,57.69026],[-6.86834,57.6976],[-6.87315,57.71631],[-6.70286,57.72217],[-6.71591,57.81117],[-6.53188,57.81958],[-6.53875,57.88133],[-6.22015,57.89265],[-6.24143,58.09935],[-6.12676,58.10152],[-6.17758,58.53105],[-6.46734,58.52029],[-6.4591,58.45102],[-6.63145,58.44455],[-6.6239,58.39169],[-6.79212,58.38485],[-6.78869,58.34956],[-6.90885,58.34415],[-6.89718,58.25503],[-7.20136,58.24166],[-7.14094,57.83201],[-7.37509,57.82104],[-7.36822,57.69503],[-7.6573,57.68292],[-7.67652,57.80715],[-7.79257,57.80202],[-7.77327,57.67734],[-7.70756,57.68024],[-7.69376,57.59088],[-7.75947,57.58797],[-7.74587,57.49965],[-7.51241,57.5085],[-7.47911,57.29468],[-7.52855,57.2932],[-7.51276,57.05871],[-7.61163,57.05386],[-7.59859,56.87493],[-7.66725,56.87268],[-7.65043,56.77461]],[[-1.46238,59.82831],[-1.21519,59.83107],[-1.21519,59.96194],[-1.10533,59.96056],[-1.0986,60.09498],[-0.97632,60.09346],[-0.96352,60.3476],[-0.74028,60.34484],[-0.7147,60.84722],[-1.08215,60.85901],[-1.08455,60.76944],[-1.21296,60.77011],[-1.21579,60.68079],[-1.23364,60.68113],[-1.23467,60.5909],[-1.27132,60.59191],[-1.27338,60.64581],[-1.45466,60.64648],[-1.45397,60.59224],[-1.6373,60.59292],[-1.63954,60.3507],[-1.73172,60.35095],[-1.73172,60.18067],[-1.64177,60.17931],[-1.64177,60.1448],[-1.46393,60.14344],[-1.46238,59.82831]],[[-6.21496,56.97437],[-6.22525,57.06445],[-6.29117,57.06184],[-6.29237,57.08062],[-6.62162,57.06943],[-6.61338,57.00629],[-6.46163,57.01302],[-6.4582,56.96776],[-6.21496,56.97437]],[[-2.12774,60.10855],[-2.12803,60.16207],[-2.00203,60.16224],[-2.00174,60.10872],[-2.12774,60.10855]],[[-6.68977,56.95804],[-6.69228,56.9759],[-6.65984,56.97726],[-6.65733,56.9594],[-6.68977,56.95804]],[[-7.66365,58.25846],[-7.66844,58.28502],[-7.54896,58.29098],[-7.54417,58.26442],[-7.66365,58.25846]],[[-8.65104,57.78885],[-8.66674,57.875],[-8.48272,57.88449],[-8.46702,57.79836],[-8.65104,57.78885]]]},{id:"OSIP_1ft",name:"OSIP 1ft Imagery Most Current Available",type:"wms",template:"https://geo.oit.ohio.gov/arcgis/services/OSIP/osip_best_avail_1ft/ImageServer/WMSServer?FORMAT=image/jpeg&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=0&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",endDate:"2014-01-01T00:00:00.000Z",startDate:"2011-01-01T00:00:00.000Z",zoomExtent:[1,20],polygon:[[[-83.1356,41.75081],[-83.08101,41.7511],[-83.0796,41.62936],[-82.95011,41.54404],[-82.89032,41.54404],[-82.89032,41.69462],[-82.8494,41.7463],[-82.76758,41.73925],[-82.75184,41.63584],[-82.64799,41.62408],[-82.68575,41.50634],[-82.49063,41.40492],[-82.0217,41.53462],[-81.72901,41.52048],[-81.39541,41.7369],[-81.10587,41.84484],[-80.50161,41.99939],[-80.51105,40.62127],[-80.6275,40.59021],[-80.58344,40.49933],[-80.58973,40.2812],[-80.85095,39.625],[-81.19399,39.37974],[-81.38912,39.31159],[-81.45521,39.38704],[-81.515,39.35054],[-81.54333,39.26288],[-81.72586,39.19461],[-81.73216,38.9258],[-81.9021,38.85477],[-81.95875,38.89397],[-81.9084,38.93315],[-82.02799,38.99922],[-82.11611,38.92336],[-82.12555,38.8278],[-82.19794,38.78856],[-82.16647,38.72475],[-82.16017,38.58712],[-82.26718,38.57236],[-82.29865,38.43198],[-82.57875,38.39745],[-82.73925,38.53545],[-82.8494,38.56006],[-82.91235,38.73212],[-83.00676,38.71002],[-83.14524,38.59942],[-83.30575,38.58466],[-83.39387,38.64368],[-83.46625,38.64614],[-83.54178,38.69283],[-83.65193,38.61172],[-83.74635,38.63385],[-83.9635,38.76403],[-84.08624,38.75421],[-84.22157,38.7812],[-84.34117,38.99922],[-84.49223,39.07255],[-84.64015,39.05545],[-84.74086,39.11164],[-84.84471,39.08477],[-84.82898,41.70637],[-83.44737,41.76038],[-83.13438,41.64959],[-83.1356,41.75081]]],terms_url:"https://ogrip.oit.ohio.gov/ProjectsInitiatives/StatewideImagery.aspx",terms_text:"Ohio Statewide Imagery Program",description:"Most recent available 1-foot orthoimagery from the Ohio Statewide Imagery Program."},{id:"OSIP_6in",name:"OSIP 6in Imagery Most Current Available",type:"wms",template:"https://geo.oit.ohio.gov/arcgis/rest/services/OSIP/OSIP_6in_best_avail/ImageServer/exportImage?f=image&bbox={bbox}&imageSR=3857&bboxSR=4326&SR={proj}&size={width}%2C{height}",projection:"EPSG:4326",endDate:"2013-01-01T00:00:00.000Z",startDate:"2011-01-01T00:00:00.000Z",zoomExtent:[1,22],polygon:[[[-84.8172,39.566],[-84.47765,39.56679],[-84.00558,39.56441],[-84.01108,39.25379],[-83.99391,39.25273],[-84.05605,38.77041],[-83.95821,38.78567],[-83.86791,38.75274],[-83.83461,38.7123],[-83.79101,38.69623],[-83.76904,38.65093],[-83.66398,38.62331],[-83.63926,38.63725],[-83.62141,38.67801],[-83.52219,38.70025],[-83.46451,38.6705],[-83.37112,38.65602],[-83.32615,38.63189],[-83.31928,38.60265],[-83.29319,38.59353],[-83.26435,38.61499],[-83.241,38.62545],[-83.20599,38.61311],[-83.14796,38.61848],[-83.12222,38.64342],[-83.10505,38.67184],[-83.05527,38.6906],[-83.02299,38.7257],[-82.97733,38.72195],[-82.89459,38.75382],[-82.87365,38.73721],[-82.88189,38.68765],[-82.84927,38.59111],[-82.78748,38.55595],[-82.72533,38.55595],[-82.69238,38.53608],[-82.65495,38.48988],[-82.60998,38.46757],[-82.59899,38.41836],[-82.55333,38.39926],[-82.40364,38.43584],[-82.37514,38.43154],[-82.32468,38.4431],[-82.30614,38.48343],[-82.29927,38.5205],[-82.28416,38.58414],[-82.35901,38.58682],[-82.35249,38.67747],[-82.47059,38.68417],[-82.46475,38.7415],[-82.48466,38.74391],[-82.48158,38.77336],[-82.58045,38.78192],[-82.57393,38.84532],[-82.75795,38.85709],[-82.75074,38.94606],[-82.80739,38.9506],[-83.02265,38.95994],[-83.2053,38.96208],[-83.21011,38.99037],[-83.24032,39.01785],[-83.26778,39.02052],[-83.31242,39.05438],[-83.38486,39.05785],[-83.61111,39.02052],[-83.70586,39.02398],[-83.8686,39.02345],[-83.86414,39.24449],[-83.83598,39.24316],[-83.83804,39.22082],[-83.80646,39.22161],[-83.78277,39.26044],[-83.59051,39.37757],[-83.37044,39.37545],[-83.26435,39.51675],[-83.25096,39.69609],[-83.65093,39.71907],[-83.64578,39.77688],[-83.73642,39.78269],[-83.73951,39.79034],[-83.82568,39.79983],[-83.825,39.82409],[-83.93898,39.83095],[-83.93761,39.84492],[-84.05125,39.85283],[-84.00867,40.31147],[-84.00181,40.31121],[-83.9994,40.47986],[-83.98979,40.48038],[-83.99151,40.53285],[-83.88439,40.53442],[-83.8813,40.52972],[-83.52184,40.50753],[-83.54176,40.33686],[-83.63857,40.33739],[-83.63617,40.30179],[-83.56647,40.30179],[-83.54656,40.27612],[-83.55343,40.22817],[-83.49609,40.22371],[-83.50674,40.10985],[-83.16788,40.10565],[-83.17028,40.24521],[-83.2465,40.24678],[-83.2465,40.5091],[-83.41267,40.5078],[-83.41782,40.68741],[-83.43773,40.68923],[-83.43842,40.70433],[-83.49335,40.70355],[-83.493,40.81901],[-83.51395,40.82005],[-83.51257,40.90339],[-83.47584,40.90313],[-83.47515,40.94697],[-83.45592,40.94749],[-83.45592,40.99001],[-83.41747,40.99052],[-83.41782,41.16754],[-83.87787,41.17064],[-83.88062,41.41132],[-83.85143,41.41235],[-83.74432,41.4646],[-83.70827,41.49341],[-83.7038,41.52143],[-83.67805,41.54405],[-83.6063,41.56922],[-83.57094,41.61236],[-83.41782,41.61673],[-83.42297,41.25329],[-83.23139,41.25045],[-82.84241,41.25303],[-82.83245,40.99493],[-82.42973,40.99078],[-82.4342,41.06279],[-82.33463,41.06408],[-82.33944,41.28632],[-82.83897,41.29225],[-82.84515,41.43217],[-82.9509,41.4332],[-82.95158,41.48286],[-82.87262,41.48826],[-82.84447,41.49469],[-82.83417,41.45945],[-82.79984,41.4682],[-82.81494,41.49649],[-82.7528,41.50086],[-82.7401,41.48441],[-82.70199,41.49521],[-82.70817,41.55098],[-82.78164,41.54816],[-82.83142,41.59465],[-82.86507,41.57847],[-82.85854,41.5551],[-82.88807,41.52631],[-82.93098,41.51835],[-82.98626,41.53505],[-83.04016,41.5682],[-83.06694,41.60235],[-83.10574,41.6175],[-83.14247,41.61955],[-83.20564,41.63828],[-83.33954,41.70957],[-83.35327,41.69189],[-83.4264,41.69548],[-83.41679,41.70291],[-83.41816,41.7375],[-83.88405,41.72341],[-83.87993,41.62032],[-83.88783,41.62006],[-83.88577,41.48955],[-84.34547,41.48852],[-84.34513,41.42548],[-84.23183,41.42522],[-84.23355,41.16366],[-83.97366,41.16444],[-83.97434,41.17995],[-83.90259,41.17865],[-83.90327,41.16418],[-83.88371,41.16444],[-83.88336,40.92337],[-83.99975,40.92233],[-83.99769,40.90754],[-84.11167,40.90651],[-84.11167,40.8629],[-84.34444,40.86186],[-84.33758,40.90521],[-84.39491,40.90547],[-84.39663,40.98871],[-84.33861,40.98897],[-84.33964,41.21043],[-84.45362,41.21146],[-84.45499,41.25458],[-84.80621,41.2551],[-84.80724,40.72488],[-84.45877,40.7254],[-84.46083,40.35649],[-84.43851,40.35073],[-84.43474,40.17494],[-84.44504,40.15841],[-84.43336,40.15841],[-84.42959,39.92185],[-84.81651,39.91974],[-84.8172,39.57685],[-84.82647,39.56997],[-84.8172,39.566]],[[-82.83211,41.73033],[-82.80945,41.72828],[-82.77374,41.7006],[-82.78198,41.66368],[-82.84309,41.61544],[-82.86713,41.68266],[-82.83211,41.73033]],[[-81.09077,40.89742],[-81.09146,40.9913],[-81.00494,40.99026],[-81.007,41.1373],[-80.51537,41.13574],[-80.51468,40.89794],[-81.09077,40.89742]]],terms_url:"https://ogrip.oit.ohio.gov/ProjectsInitiatives/StatewideImagery.aspx",terms_text:"Ohio Statewide Imagery Program",description:"Most recent available 6-inch orthoimagery from the Ohio Statewide Imagery Program."},{id:"osmie_barony",name:"OSMIE Baronies",type:"tms",template:"https://tile.openstreetmap.ie/barony/{zoom}/{x}/{y}.png",zoomExtent:[7,20],polygon:[[[-6.32987,52.38838],[-6.16508,52.58073],[-5.9893,52.9811],[-6.05796,53.31713],[-5.9838,53.50704],[-6.24473,53.86326],[-6.35459,53.91182],[-6.31614,53.98133],[-6.13487,53.97002],[-5.61851,54.23574],[-5.3878,54.44708],[-5.53886,54.67641],[-6.07444,55.21277],[-6.21452,55.33168],[-6.78306,55.17828],[-6.9506,55.25505],[-7.17582,55.35355],[-7.22526,55.45024],[-7.50816,55.28791],[-7.63999,55.28009],[-8.02451,55.2206],[-8.25797,55.27853],[-8.28269,55.172],[-8.58482,55.01168],[-8.38432,54.86021],[-8.69743,54.78901],[-8.85124,54.67641],[-8.46946,54.57942],[-8.17008,54.62397],[-8.33763,54.4854],[-8.68644,54.36556],[-8.62876,54.27625],[-9.04075,54.3051],[-9.13688,54.23614],[-9.2852,54.33834],[-9.90043,54.32233],[-10.15037,54.2245],[-10.27397,53.94578],[-9.98832,53.85678],[-10.3289,53.60982],[-10.22727,53.39418],[-9.78233,53.21857],[-8.96934,53.26952],[-9.04624,53.1762],[-9.2852,53.15644],[-9.40879,52.99433],[-9.57084,52.75562],[-9.97321,52.54316],[-9.70405,52.57071],[-9.69444,52.4855],[-9.97733,52.41854],[-9.87296,52.33387],[-9.92378,52.2381],[-10.06523,52.34478],[-10.15586,52.30113],[-10.65849,52.07212],[-9.90318,52.12274],[-10.45799,51.88772],[-10.39344,51.82411],[-10.56098,51.76635],[-10.32478,51.79014],[-10.25749,51.70937],[-9.80705,51.81816],[-10.28289,51.57045],[-9.89631,51.60032],[-9.51454,51.70256],[-9.83177,51.55082],[-9.83039,51.43368],[-9.43351,51.50468],[-9.53788,51.41741],[-8.63151,51.59179],[-7.70316,51.95209],[-7.46421,52.12105],[-6.33537,52.17667],[-6.32987,52.38838]],[[-9.89082,53.14368],[-9.51042,53.03605],[-9.45274,53.08557],[-9.82902,53.18279],[-9.89082,53.14368]]],icon:"https://www.townlands.ie/static/logo_small.png"},{id:"osmie_cps",name:"OSMIE Civil Parishes",type:"tms",template:"https://tile.openstreetmap.ie/civilparish/{zoom}/{x}/{y}.png",zoomExtent:[7,20],polygon:[[[-6.32987,52.38838],[-6.16508,52.58073],[-5.9893,52.9811],[-6.05796,53.31713],[-5.9838,53.50704],[-6.24473,53.86326],[-6.35459,53.91182],[-6.31614,53.98133],[-6.13487,53.97002],[-5.61851,54.23574],[-5.3878,54.44708],[-5.53886,54.67641],[-6.07444,55.21277],[-6.21452,55.33168],[-6.78306,55.17828],[-6.9506,55.25505],[-7.17582,55.35355],[-7.22526,55.45024],[-7.50816,55.28791],[-7.63999,55.28009],[-8.02451,55.2206],[-8.25797,55.27853],[-8.28269,55.172],[-8.58482,55.01168],[-8.38432,54.86021],[-8.69743,54.78901],[-8.85124,54.67641],[-8.46946,54.57942],[-8.17008,54.62397],[-8.33763,54.4854],[-8.68644,54.36556],[-8.62876,54.27625],[-9.04075,54.3051],[-9.13688,54.23614],[-9.2852,54.33834],[-9.90043,54.32233],[-10.15037,54.2245],[-10.27397,53.94578],[-9.98832,53.85678],[-10.3289,53.60982],[-10.22727,53.39418],[-9.78233,53.21857],[-8.96934,53.26952],[-9.04624,53.1762],[-9.2852,53.15644],[-9.40879,52.99433],[-9.57084,52.75562],[-9.97321,52.54316],[-9.70405,52.57071],[-9.69444,52.4855],[-9.97733,52.41854],[-9.87296,52.33387],[-9.92378,52.2381],[-10.06523,52.34478],[-10.15586,52.30113],[-10.65849,52.07212],[-9.90318,52.12274],[-10.45799,51.88772],[-10.39344,51.82411],[-10.56098,51.76635],[-10.32478,51.79014],[-10.25749,51.70937],[-9.80705,51.81816],[-10.28289,51.57045],[-9.89631,51.60032],[-9.51454,51.70256],[-9.83177,51.55082],[-9.83039,51.43368],[-9.43351,51.50468],[-9.53788,51.41741],[-8.63151,51.59179],[-7.70316,51.95209],[-7.46421,52.12105],[-6.33537,52.17667],[-6.32987,52.38838]],[[-9.89082,53.14368],[-9.51042,53.03605],[-9.45274,53.08557],[-9.82902,53.18279],[-9.89082,53.14368]]],icon:"https://www.townlands.ie/static/logo_small.png"},{id:"osmie_dail_ea",name:"OSMIE Dail Election Areas",type:"tms",template:"https://tile.openstreetmap.ie/dail_ea/{zoom}/{x}/{y}.png",zoomExtent:[7,20],polygon:[[[-6.32987,52.38838],[-6.16508,52.58073],[-5.9893,52.9811],[-6.05796,53.31713],[-5.9838,53.50704],[-6.24473,53.86326],[-6.35459,53.91182],[-6.31614,53.98133],[-6.13487,53.97002],[-5.61851,54.23574],[-5.3878,54.44708],[-5.53886,54.67641],[-6.07444,55.21277],[-6.21452,55.33168],[-6.78306,55.17828],[-6.9506,55.25505],[-7.17582,55.35355],[-7.22526,55.45024],[-7.50816,55.28791],[-7.63999,55.28009],[-8.02451,55.2206],[-8.25797,55.27853],[-8.28269,55.172],[-8.58482,55.01168],[-8.38432,54.86021],[-8.69743,54.78901],[-8.85124,54.67641],[-8.46946,54.57942],[-8.17008,54.62397],[-8.33763,54.4854],[-8.68644,54.36556],[-8.62876,54.27625],[-9.04075,54.3051],[-9.13688,54.23614],[-9.2852,54.33834],[-9.90043,54.32233],[-10.15037,54.2245],[-10.27397,53.94578],[-9.98832,53.85678],[-10.3289,53.60982],[-10.22727,53.39418],[-9.78233,53.21857],[-8.96934,53.26952],[-9.04624,53.1762],[-9.2852,53.15644],[-9.40879,52.99433],[-9.57084,52.75562],[-9.97321,52.54316],[-9.70405,52.57071],[-9.69444,52.4855],[-9.97733,52.41854],[-9.87296,52.33387],[-9.92378,52.2381],[-10.06523,52.34478],[-10.15586,52.30113],[-10.65849,52.07212],[-9.90318,52.12274],[-10.45799,51.88772],[-10.39344,51.82411],[-10.56098,51.76635],[-10.32478,51.79014],[-10.25749,51.70937],[-9.80705,51.81816],[-10.28289,51.57045],[-9.89631,51.60032],[-9.51454,51.70256],[-9.83177,51.55082],[-9.83039,51.43368],[-9.43351,51.50468],[-9.53788,51.41741],[-8.63151,51.59179],[-7.70316,51.95209],[-7.46421,52.12105],[-6.33537,52.17667],[-6.32987,52.38838]],[[-9.89082,53.14368],[-9.51042,53.03605],[-9.45274,53.08557],[-9.82902,53.18279],[-9.89082,53.14368]]],icon:"https://www.townlands.ie/static/logo_small.png"},{id:"osmie_eds",name:"OSMIE EDs",type:"tms",template:"https://tile.openstreetmap.ie/ed/{zoom}/{x}/{y}.png",zoomExtent:[7,20],polygon:[[[-6.32987,52.38838],[-6.16508,52.58073],[-5.9893,52.9811],[-6.05796,53.31713],[-5.9838,53.50704],[-6.24473,53.86326],[-6.35459,53.91182],[-6.31614,53.98133],[-6.13487,53.97002],[-5.61851,54.23574],[-5.3878,54.44708],[-5.53886,54.67641],[-6.07444,55.21277],[-6.21452,55.33168],[-6.78306,55.17828],[-6.9506,55.25505],[-7.17582,55.35355],[-7.22526,55.45024],[-7.50816,55.28791],[-7.63999,55.28009],[-8.02451,55.2206],[-8.25797,55.27853],[-8.28269,55.172],[-8.58482,55.01168],[-8.38432,54.86021],[-8.69743,54.78901],[-8.85124,54.67641],[-8.46946,54.57942],[-8.17008,54.62397],[-8.33763,54.4854],[-8.68644,54.36556],[-8.62876,54.27625],[-9.04075,54.3051],[-9.13688,54.23614],[-9.2852,54.33834],[-9.90043,54.32233],[-10.15037,54.2245],[-10.27397,53.94578],[-9.98832,53.85678],[-10.3289,53.60982],[-10.22727,53.39418],[-9.78233,53.21857],[-8.96934,53.26952],[-9.04624,53.1762],[-9.2852,53.15644],[-9.40879,52.99433],[-9.57084,52.75562],[-9.97321,52.54316],[-9.70405,52.57071],[-9.69444,52.4855],[-9.97733,52.41854],[-9.87296,52.33387],[-9.92378,52.2381],[-10.06523,52.34478],[-10.15586,52.30113],[-10.65849,52.07212],[-9.90318,52.12274],[-10.45799,51.88772],[-10.39344,51.82411],[-10.56098,51.76635],[-10.32478,51.79014],[-10.25749,51.70937],[-9.80705,51.81816],[-10.28289,51.57045],[-9.89631,51.60032],[-9.51454,51.70256],[-9.83177,51.55082],[-9.83039,51.43368],[-9.43351,51.50468],[-9.53788,51.41741],[-8.63151,51.59179],[-7.70316,51.95209],[-7.46421,52.12105],[-6.33537,52.17667],[-6.32987,52.38838]],[[-9.89082,53.14368],[-9.51042,53.03605],[-9.45274,53.08557],[-9.82902,53.18279],[-9.89082,53.14368]]],icon:"https://www.townlands.ie/static/logo_small.png"},{id:"osmie_local_ea",name:"OSMIE Local Election Areas",type:"tms",template:"https://tile.openstreetmap.ie/local_ea/{zoom}/{x}/{y}.png",zoomExtent:[7,20],polygon:[[[-6.32987,52.38838],[-6.16508,52.58073],[-5.9893,52.9811],[-6.05796,53.31713],[-5.9838,53.50704],[-6.24473,53.86326],[-6.35459,53.91182],[-6.31614,53.98133],[-6.13487,53.97002],[-5.61851,54.23574],[-5.3878,54.44708],[-5.53886,54.67641],[-6.07444,55.21277],[-6.21452,55.33168],[-6.78306,55.17828],[-6.9506,55.25505],[-7.17582,55.35355],[-7.22526,55.45024],[-7.50816,55.28791],[-7.63999,55.28009],[-8.02451,55.2206],[-8.25797,55.27853],[-8.28269,55.172],[-8.58482,55.01168],[-8.38432,54.86021],[-8.69743,54.78901],[-8.85124,54.67641],[-8.46946,54.57942],[-8.17008,54.62397],[-8.33763,54.4854],[-8.68644,54.36556],[-8.62876,54.27625],[-9.04075,54.3051],[-9.13688,54.23614],[-9.2852,54.33834],[-9.90043,54.32233],[-10.15037,54.2245],[-10.27397,53.94578],[-9.98832,53.85678],[-10.3289,53.60982],[-10.22727,53.39418],[-9.78233,53.21857],[-8.96934,53.26952],[-9.04624,53.1762],[-9.2852,53.15644],[-9.40879,52.99433],[-9.57084,52.75562],[-9.97321,52.54316],[-9.70405,52.57071],[-9.69444,52.4855],[-9.97733,52.41854],[-9.87296,52.33387],[-9.92378,52.2381],[-10.06523,52.34478],[-10.15586,52.30113],[-10.65849,52.07212],[-9.90318,52.12274],[-10.45799,51.88772],[-10.39344,51.82411],[-10.56098,51.76635],[-10.32478,51.79014],[-10.25749,51.70937],[-9.80705,51.81816],[-10.28289,51.57045],[-9.89631,51.60032],[-9.51454,51.70256],[-9.83177,51.55082],[-9.83039,51.43368],[-9.43351,51.50468],[-9.53788,51.41741],[-8.63151,51.59179],[-7.70316,51.95209],[-7.46421,52.12105],[-6.33537,52.17667],[-6.32987,52.38838]],[[-9.89082,53.14368],[-9.51042,53.03605],[-9.45274,53.08557],[-9.82902,53.18279],[-9.89082,53.14368]]],icon:"https://www.townlands.ie/static/logo_small.png"},{id:"osmie_tie_not_counties",name:"OSMIE T.ie Land not in Counties",type:"tms",template:"https://www.townlands.ie/tiles/not_counties/{zoom}/{x}/{y}.png",zoomExtent:[2,19],polygon:[[[-6.32987,52.38838],[-6.16508,52.58073],[-5.9893,52.9811],[-6.05796,53.31713],[-5.9838,53.50704],[-6.24473,53.86326],[-6.35459,53.91182],[-6.31614,53.98133],[-6.13487,53.97002],[-5.61851,54.23574],[-5.3878,54.44708],[-5.53886,54.67641],[-6.07444,55.21277],[-6.21452,55.33168],[-6.78306,55.17828],[-6.9506,55.25505],[-7.17582,55.35355],[-7.22526,55.45024],[-7.50816,55.28791],[-7.63999,55.28009],[-8.02451,55.2206],[-8.25797,55.27853],[-8.28269,55.172],[-8.58482,55.01168],[-8.38432,54.86021],[-8.69743,54.78901],[-8.85124,54.67641],[-8.46946,54.57942],[-8.17008,54.62397],[-8.33763,54.4854],[-8.68644,54.36556],[-8.62876,54.27625],[-9.04075,54.3051],[-9.13688,54.23614],[-9.2852,54.33834],[-9.90043,54.32233],[-10.15037,54.2245],[-10.27397,53.94578],[-9.98832,53.85678],[-10.3289,53.60982],[-10.22727,53.39418],[-9.78233,53.21857],[-8.96934,53.26952],[-9.04624,53.1762],[-9.2852,53.15644],[-9.40879,52.99433],[-9.57084,52.75562],[-9.97321,52.54316],[-9.70405,52.57071],[-9.69444,52.4855],[-9.97733,52.41854],[-9.87296,52.33387],[-9.92378,52.2381],[-10.06523,52.34478],[-10.15586,52.30113],[-10.65849,52.07212],[-9.90318,52.12274],[-10.45799,51.88772],[-10.39344,51.82411],[-10.56098,51.76635],[-10.32478,51.79014],[-10.25749,51.70937],[-9.80705,51.81816],[-10.28289,51.57045],[-9.89631,51.60032],[-9.51454,51.70256],[-9.83177,51.55082],[-9.83039,51.43368],[-9.43351,51.50468],[-9.53788,51.41741],[-8.63151,51.59179],[-7.70316,51.95209],[-7.46421,52.12105],[-6.33537,52.17667],[-6.32987,52.38838]],[[-9.89082,53.14368],[-9.51042,53.03605],[-9.45274,53.08557],[-9.82902,53.18279],[-9.89082,53.14368]]],icon:"https://www.townlands.ie/static/logo_small.png"},{id:"osmie_tds",name:"OSMIE Townlands",type:"tms",template:"https://tile.openstreetmap.ie/townland/{zoom}/{x}/{y}.png",zoomExtent:[7,20],polygon:[[[-6.32987,52.38838],[-6.16508,52.58073],[-5.9893,52.9811],[-6.05796,53.31713],[-5.9838,53.50704],[-6.24473,53.86326],[-6.35459,53.91182],[-6.31614,53.98133],[-6.13487,53.97002],[-5.61851,54.23574],[-5.3878,54.44708],[-5.53886,54.67641],[-6.07444,55.21277],[-6.21452,55.33168],[-6.78306,55.17828],[-6.9506,55.25505],[-7.17582,55.35355],[-7.22526,55.45024],[-7.50816,55.28791],[-7.63999,55.28009],[-8.02451,55.2206],[-8.25797,55.27853],[-8.28269,55.172],[-8.58482,55.01168],[-8.38432,54.86021],[-8.69743,54.78901],[-8.85124,54.67641],[-8.46946,54.57942],[-8.17008,54.62397],[-8.33763,54.4854],[-8.68644,54.36556],[-8.62876,54.27625],[-9.04075,54.3051],[-9.13688,54.23614],[-9.2852,54.33834],[-9.90043,54.32233],[-10.15037,54.2245],[-10.27397,53.94578],[-9.98832,53.85678],[-10.3289,53.60982],[-10.22727,53.39418],[-9.78233,53.21857],[-8.96934,53.26952],[-9.04624,53.1762],[-9.2852,53.15644],[-9.40879,52.99433],[-9.57084,52.75562],[-9.97321,52.54316],[-9.70405,52.57071],[-9.69444,52.4855],[-9.97733,52.41854],[-9.87296,52.33387],[-9.92378,52.2381],[-10.06523,52.34478],[-10.15586,52.30113],[-10.65849,52.07212],[-9.90318,52.12274],[-10.45799,51.88772],[-10.39344,51.82411],[-10.56098,51.76635],[-10.32478,51.79014],[-10.25749,51.70937],[-9.80705,51.81816],[-10.28289,51.57045],[-9.89631,51.60032],[-9.51454,51.70256],[-9.83177,51.55082],[-9.83039,51.43368],[-9.43351,51.50468],[-9.53788,51.41741],[-8.63151,51.59179],[-7.70316,51.95209],[-7.46421,52.12105],[-6.33537,52.17667],[-6.32987,52.38838]],[[-9.89082,53.14368],[-9.51042,53.03605],[-9.45274,53.08557],[-9.82902,53.18279],[-9.89082,53.14368]]],icon:"https://www.townlands.ie/static/logo_small.png"},{id:"al_palestina",name:"Palestina AL",type:"wms",template:"http://geoserver.dados.al.gov.br:8080/geoserver/Alagoas/ows?LAYERS=Palestina&SERVICE=WMS&FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.0&SERVICE=WMS&REQUEST=GetMap&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[-37.28907,-9.71916],[-37.28904,-9.71114],[-37.28911,-9.7022],[-37.28915,-9.69175],[-37.28919,-9.68886],[-37.28927,-9.68069],[-37.28926,-9.67732],[-37.28936,-9.66999],[-37.28936,-9.66599],[-37.28931,-9.66133],[-37.28941,-9.65526],[-37.28946,-9.64556],[-37.2895,-9.63489],[-37.28954,-9.62926],[-37.2964,-9.62885],[-37.31188,-9.62897],[-37.32762,-9.62914],[-37.33181,-9.62919],[-37.34338,-9.62917],[-37.35876,-9.62923],[-37.37175,-9.6293],[-37.37839,-9.62913],[-37.38051,-9.62922],[-37.38061,-9.63143],[-37.38054,-9.63785],[-37.38043,-9.63895],[-37.38053,-9.64147],[-37.38051,-9.64876],[-37.3805,-9.6543],[-37.38043,-9.656],[-37.38024,-9.66028],[-37.38022,-9.66551],[-37.38019,-9.67054],[-37.38016,-9.67896],[-37.38013,-9.68781],[-37.38009,-9.70116],[-37.38003,-9.71053],[-37.3801,-9.71743],[-37.38005,-9.71959],[-37.37932,-9.71954],[-37.37392,-9.71956],[-37.36582,-9.71945],[-37.35849,-9.71946],[-37.35334,-9.71938],[-37.34414,-9.71937],[-37.33423,-9.71923],[-37.32933,-9.71927],[-37.3218,-9.71924],[-37.31983,-9.71927],[-37.31094,-9.7192],[-37.29589,-9.71921],[-37.28907,-9.71916]]],terms_url:"http://www.seplag.al.gov.br",terms_text:"Secretaria de Estado do Planejamento, Gestão e Patrimônio"},{id:"palmeira_dos_indios",name:"Palmeira dos Indios AL",type:"wms",template:"http://geoserver.dados.al.gov.br:8080/geoserver/Alagoas/ows?LAYERS=Palmeira%20dos%20Indios&SERVICE=WMS&FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.0&SERVICE=WMS&REQUEST=GetMap&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[-36.58664,-9.46124],[-36.58665,-9.45851],[-36.58619,-9.41968],[-36.58604,-9.41452],[-36.58596,-9.40593],[-36.58585,-9.39509],[-36.58579,-9.39163],[-36.58565,-9.38983],[-36.58549,-9.38249],[-36.58529,-9.37965],[-36.58511,-9.37744],[-36.58503,-9.37059],[-36.5889,-9.37058],[-36.59064,-9.37065],[-36.59389,-9.3706],[-36.60037,-9.37073],[-36.61046,-9.37049],[-36.62288,-9.37021],[-36.63377,-9.37002],[-36.63835,-9.36986],[-36.64743,-9.36997],[-36.65141,-9.36994],[-36.65534,-9.36972],[-36.65647,-9.36974],[-36.66111,-9.37024],[-36.66276,-9.37026],[-36.66704,-9.36973],[-36.67052,-9.36966],[-36.67325,-9.36966],[-36.67602,-9.36987],[-36.67593,-9.3726],[-36.67597,-9.37679],[-36.67639,-9.38138],[-36.67654,-9.38464],[-36.67663,-9.39265],[-36.67675,-9.39829],[-36.67689,-9.40875],[-36.67707,-9.41887],[-36.67717,-9.43179],[-36.67724,-9.43395],[-36.67718,-9.43753],[-36.67728,-9.44311],[-36.6773,-9.44933],[-36.67741,-9.45528],[-36.6774,-9.45938],[-36.67735,-9.46017],[-36.67568,-9.46021],[-36.66625,-9.4603],[-36.66224,-9.4603],[-36.65736,-9.46042],[-36.6504,-9.46047],[-36.63543,-9.46065],[-36.61979,-9.46083],[-36.61433,-9.46083],[-36.61029,-9.46097],[-36.60647,-9.46097],[-36.60186,-9.46099],[-36.59426,-9.46112],[-36.58664,-9.46124]]],terms_url:"http://www.seplag.al.gov.br",terms_text:"Secretaria de Estado do Planejamento, Gestão e Patrimônio"},{id:"Pangasinan_Bulacan_HiRes",name:"Pangasinán/Bulacan (Philippines HiRes)",type:"tms",template:"https://gravitystorm.dev.openstreetmap.org/imagery/philippines/{zoom}/{x}/{y}.png",zoomExtent:[12,19],polygon:[[[120.33659,15.98577],[120.44599,15.984],[120.44613,15.97446],[120.47646,15.97459],[120.59425,15.94683],[120.59806,16.09079],[120.59654,16.198],[120.36854,16.21853],[120.34758,16.04231],[120.33659,15.98577]],[[120.8268,15.3658],[121.2684,15.2602],[121.2699,14.7025],[120.695,14.8423],[120.8268,15.3658]]]},{id:"pao_de_acucar",name:"Pão de Açucar AL",type:"wms",template:"http://geoserver.dados.al.gov.br:8080/geoserver/Alagoas/ows?LAYERS=Pao%20de%20Acucar&SERVICE=WMS&FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.0&SERVICE=WMS&REQUEST=GetMap&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[-37.39003,-9.78589],[-37.39019,-9.7762],[-37.38993,-9.76575],[-37.38991,-9.75256],[-37.39015,-9.74102],[-37.39003,-9.73201],[-37.39012,-9.72254],[-37.39015,-9.71289],[-37.39019,-9.70341],[-37.3902,-9.69548],[-37.40377,-9.6955],[-37.41728,-9.6956],[-37.43224,-9.69569],[-37.44319,-9.69573],[-37.44723,-9.69582],[-37.45682,-9.69585],[-37.47062,-9.69591],[-37.47373,-9.69591],[-37.47586,-9.69604],[-37.48128,-9.69605],[-37.48131,-9.6989],[-37.48122,-9.70087],[-37.48121,-9.70239],[-37.48135,-9.70545],[-37.48138,-9.71046],[-37.48134,-9.71617],[-37.4812,-9.71875],[-37.48125,-9.72035],[-37.48136,-9.72134],[-37.48134,-9.7241],[-37.4813,-9.72506],[-37.48103,-9.72732],[-37.48102,-9.73088],[-37.48127,-9.73462],[-37.48131,-9.73638],[-37.48131,-9.73893],[-37.48131,-9.74388],[-37.4813,-9.74989],[-37.48122,-9.75315],[-37.48102,-9.75855],[-37.48084,-9.7642],[-37.48085,-9.76526],[-37.48094,-9.76675],[-37.48093,-9.76881],[-37.48084,-9.7721],[-37.48087,-9.77486],[-37.48076,-9.77993],[-37.48081,-9.7863],[-37.46382,-9.78623],[-37.45353,-9.7862],[-37.43979,-9.78611],[-37.42998,-9.78607],[-37.4208,-9.786],[-37.40853,-9.78596],[-37.39545,-9.78593],[-37.39003,-9.78589]]],terms_url:"http://www.seplag.al.gov.br",terms_text:"Secretaria de Estado do Planejamento, Gestão e Patrimônio"},{id:"PCN-Italy-2006",name:"PCN 2006 - Italy",type:"wms",template:"http://wms.pcn.minambiente.it/ogc?map=/ms_ogc/WMS_v1.3/raster/ortofoto_colore_06.map&FORMAT=image/png&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&Layers=OI.ORTOIMMAGINI.2006.33,OI.ORTOIMMAGINI.2006.32&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",endDate:"2006-01-01T00:00:00.000Z",startDate:"2006-01-01T00:00:00.000Z",polygon:[[[7.54795,43.73118],[8.10697,43.86701],[8.73593,44.38944],[10.18338,43.85116],[9.55016,43.13605],[10.27725,42.27515],[11.69748,42.08118],[12.90059,40.84897],[14.97466,40.20869],[16.04773,38.8953],[13.1086,38.74113],[11.77717,37.93605],[14.40624,36.74299],[15.13467,36.59364],[15.42867,37.027],[15.21993,37.43376],[15.4836,37.92936],[16.01644,37.8036],[17.21669,38.87425],[17.21669,39.40468],[16.55477,39.78775],[17.05464,40.45144],[18.32906,39.70539],[18.68773,40.0587],[18.04964,40.67064],[16.00545,41.52122],[16.38448,41.85964],[15.51837,42.1537],[14.57997,42.2461],[13.56099,43.65128],[12.57889,44.0867],[12.28795,44.62204],[12.56398,44.97092],[12.34151,45.17458],[12.41696,45.40557],[13.09252,45.62826],[13.69549,45.70806],[13.78445,45.5825],[13.9191,45.6322],[13.8235,45.7176],[13.59784,45.8072],[13.64307,45.98326],[13.52963,45.96588],[13.47474,46.00546],[13.66472,46.17392],[13.47587,46.22725],[13.42218,46.20758],[13.37671,46.29668],[13.59777,46.44137],[13.68684,46.43881],[13.7148,46.5222],[12.9151,46.60953],[12.38708,46.71529],[12.27591,46.88651],[12.17486,46.90895],[12.11675,47.01241],[12.21781,47.03996],[12.19254,47.09331],[11.74789,46.98484],[11.33355,46.99862],[11.10618,46.92966],[11.00764,46.76896],[10.72974,46.78972],[10.75753,46.82258],[10.66405,46.87614],[10.47197,46.85698],[10.38659,46.67847],[10.49375,46.62049],[10.46136,46.53164],[10.25309,46.57432],[10.23674,46.63484],[10.10307,46.61003],[10.03715,46.44479],[10.165,46.41051],[10.10506,46.3372],[10.17862,46.25626],[10.07055,46.21668],[9.95249,46.38045],[9.73086,46.35071],[9.71273,46.29266],[9.57015,46.2958],[9.46117,46.37481],[9.45936,46.50873],[9.40487,46.46621],[9.36128,46.5081],[9.28136,46.49685],[9.24503,46.23616],[8.95601,45.96503],[9.09065,45.89906],[9.0298,45.82127],[8.90992,45.8333],[8.9408,45.86682],[8.88904,45.95465],[8.78551,45.99063],[8.85617,46.0748],[8.62242,46.12112],[8.45032,46.26869],[8.42464,46.46367],[8.08814,46.26692],[8.15493,46.1834],[8.11383,46.11577],[8.02906,46.10331],[7.98881,45.99867],[7.9049,45.99945],[7.85949,45.91485],[7.56343,45.97421],[7.10685,45.85653],[7.04151,45.92435],[6.95315,45.85163],[6.80785,45.83265],[6.80785,45.71864],[6.98948,45.63869],[7.00037,45.509],[7.18019,45.40071],[7.10572,45.32924],[7.13115,45.25386],[6.85144,45.13226],[6.7697,45.16044],[6.62803,45.11175],[6.66981,45.02324],[6.74791,45.01939],[6.75518,44.89915],[7.02217,44.82519],[7.07484,44.68073],[6.95133,44.66264],[6.85507,44.53072],[6.94504,44.43112],[6.88784,44.42043],[6.89171,44.36637],[7.00764,44.23736],[7.36364,44.11882],[7.68694,44.17487],[7.72508,44.07578],[7.49355,43.86551],[7.54795,43.73118]],[[8.17134,39.14848],[8.62453,38.75119],[9.09831,39.03764],[9.03102,39.13144],[9.26585,39.18575],[9.64076,39.0227],[9.89894,40.67991],[9.50068,41.39257],[8.30317,40.91071],[8.41304,41.16139],[8.21254,41.13864],[8.07521,40.59862],[8.36154,40.35],[8.27914,39.98585],[8.38283,39.6536],[8.17134,39.14848]],[[12.51489,35.53423],[12.64054,35.5306],[12.63861,35.48641],[12.51296,35.49005],[12.51489,35.53423]],[[11.91218,36.85688],[12.08179,36.85523],[12.07958,36.70974],[11.90998,36.71139],[11.91218,36.85688]],[[12.84019,35.88131],[12.89186,35.88145],[12.89198,35.85003],[12.84031,35.84989],[12.84019,35.88131]]]},{id:"PCN-Lazio_Umbria-2008",name:"PCN 2008 - IT Lazio+Umbria",type:"wms",template:"http://wms.pcn.minambiente.it/ogc?map=/ms_ogc/WMS_v1.3/raster/ortofoto_colore_08.map&FORMAT=image/png&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&Layers=OI.ORTOIMMAGINI.2008.33&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",endDate:"2008-01-01T00:00:00.000Z",startDate:"2008-01-01T00:00:00.000Z",polygon:[[[12.33149,41.64637],[12.41178,41.64791],[12.41499,41.54635],[12.49574,41.54789],[12.4985,41.49619],[12.57948,41.49843],[12.58062,41.42932],[12.60632,41.4288],[12.60746,41.39663],[12.8293,41.39818],[12.83159,41.34688],[12.9128,41.34843],[12.9151,41.29726],[12.99585,41.2983],[12.99791,41.19636],[13.1679,41.19808],[13.16721,41.24692],[13.41337,41.24829],[13.4152,41.19705],[13.8341,41.19808],[13.83341,41.2476],[13.91737,41.24847],[13.91668,41.39749],[14.0011,41.39784],[13.99996,41.49774],[14.08415,41.49826],[14.08346,41.65014],[14.00087,41.6498],[13.99973,41.75051],[13.83433,41.74965],[13.83364,41.80047],[13.75151,41.79978],[13.7499,41.84987],[13.41841,41.8497],[13.41681,41.95027],[13.33445,41.94959],[13.3333,42.00041],[13.25141,41.99973],[13.25003,42.05051],[13.08509,42.04966],[13.08394,42.097],[13.33399,42.09819],[13.33376,42.1472],[13.41772,42.14822],[13.41635,42.25052],[13.33399,42.24984],[13.33353,42.30094],[13.25141,42.29992],[13.25003,42.54699],[13.41795,42.54817],[13.41589,42.75065],[13.33468,42.74947],[13.33307,42.90056],[13.16836,42.89938],[13.16721,42.95079],[12.96419,42.95012],[12.96258,43.0003],[12.91877,42.9998],[12.91601,43.25078],[12.83526,43.24994],[12.83228,43.50107],[12.66321,43.4994],[12.66482,43.45112],[12.58567,43.44996],[12.58246,43.5508],[12.50171,43.5498],[12.49987,43.65131],[12.16242,43.64915],[12.16494,43.60132],[12.07891,43.5995],[12.0819,43.45196],[11.99541,43.44913],[11.99862,43.34661],[12.07891,43.34795],[12.08075,43.30189],[11.9961,43.29955],[11.99862,43.20214],[11.91237,43.19929],[11.91466,43.15212],[11.83207,43.14944],[11.8323,43.09653],[11.91099,43.09837],[11.91466,42.90191],[11.82909,42.89922],[11.83139,42.85231],[11.74582,42.84945],[11.74811,42.65236],[11.6731,42.64966],[11.67493,42.6105],[11.49485,42.59936],[11.49852,42.49593],[11.57812,42.49796],[11.58156,42.45244],[11.41226,42.44872],[11.41524,42.34656],[11.49599,42.34792],[11.49921,42.29636],[11.57835,42.29822],[11.58225,42.24628],[11.66185,42.24832],[11.66621,42.09649],[11.74536,42.09819],[11.74903,41.99666],[11.91443,41.99922],[11.91535,41.98626],[11.99403,41.98745],[11.99862,41.89685],[12.07868,41.89907],[12.08144,41.84594],[12.16311,41.84799],[12.16563,41.6964],[12.3292,41.69863],[12.33149,41.64637]]]},{id:"PCN-Italy-2012",name:"PCN 2012 - Italy",type:"wms",template:"http://wms.pcn.minambiente.it/ogc?map=/ms_ogc/WMS_v1.3/raster/ortofoto_colore_12.map&FORMAT=image/png&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=OI.ORTOIMMAGINI.2012&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",endDate:"2012-01-01T00:00:00.000Z",startDate:"2012-01-01T00:00:00.000Z",polygon:[[[7.54795,43.73118],[8.10697,43.86701],[8.73593,44.38944],[10.18338,43.85116],[9.55016,43.13605],[10.27725,42.27515],[11.69748,42.08118],[12.90059,40.84897],[14.97466,40.20869],[16.04773,38.8953],[13.1086,38.74113],[11.77717,37.93605],[14.40624,36.74299],[15.13467,36.59364],[15.42867,37.027],[15.21993,37.43376],[15.4836,37.92936],[16.01644,37.8036],[17.21669,38.87425],[17.21669,39.40468],[16.55477,39.78775],[17.05464,40.45144],[18.32906,39.70539],[18.68773,40.0587],[18.04964,40.67064],[16.00545,41.52122],[16.38448,41.85964],[15.51837,42.1537],[14.57997,42.2461],[13.56099,43.65128],[12.57889,44.0867],[12.28795,44.62204],[12.56398,44.97092],[12.34151,45.17458],[12.41696,45.40557],[13.09252,45.62826],[13.69549,45.70806],[13.78445,45.5825],[13.9191,45.6322],[13.8235,45.7176],[13.59784,45.8072],[13.64307,45.98326],[13.52963,45.96588],[13.47474,46.00546],[13.66472,46.17392],[13.47587,46.22725],[13.42218,46.20758],[13.37671,46.29668],[13.59777,46.44137],[13.68684,46.43881],[13.7148,46.5222],[12.9151,46.60953],[12.38708,46.71529],[12.27591,46.88651],[12.17486,46.90895],[12.11675,47.01241],[12.21781,47.03996],[12.19254,47.09331],[11.74789,46.98484],[11.33355,46.99862],[11.10618,46.92966],[11.00764,46.76896],[10.72974,46.78972],[10.75753,46.82258],[10.66405,46.87614],[10.47197,46.85698],[10.38659,46.67847],[10.49375,46.62049],[10.46136,46.53164],[10.25309,46.57432],[10.23674,46.63484],[10.10307,46.61003],[10.03715,46.44479],[10.165,46.41051],[10.10506,46.3372],[10.17862,46.25626],[10.07055,46.21668],[9.95249,46.38045],[9.73086,46.35071],[9.71273,46.29266],[9.57015,46.2958],[9.46117,46.37481],[9.45936,46.50873],[9.40487,46.46621],[9.36128,46.5081],[9.28136,46.49685],[9.24503,46.23616],[8.95601,45.96503],[9.09065,45.89906],[9.0298,45.82127],[8.90992,45.8333],[8.9408,45.86682],[8.88904,45.95465],[8.78551,45.99063],[8.85617,46.0748],[8.62242,46.12112],[8.45032,46.26869],[8.42464,46.46367],[8.08814,46.26692],[8.15493,46.1834],[8.11383,46.11577],[8.02906,46.10331],[7.98881,45.99867],[7.9049,45.99945],[7.85949,45.91485],[7.56343,45.97421],[7.10685,45.85653],[7.04151,45.92435],[6.95315,45.85163],[6.80785,45.83265],[6.80785,45.71864],[6.98948,45.63869],[7.00037,45.509],[7.18019,45.40071],[7.10572,45.32924],[7.13115,45.25386],[6.85144,45.13226],[6.7697,45.16044],[6.62803,45.11175],[6.66981,45.02324],[6.74791,45.01939],[6.75518,44.89915],[7.02217,44.82519],[7.07484,44.68073],[6.95133,44.66264],[6.85507,44.53072],[6.94504,44.43112],[6.88784,44.42043],[6.89171,44.36637],[7.00764,44.23736],[7.36364,44.11882],[7.68694,44.17487],[7.72508,44.07578],[7.49355,43.86551],[7.54795,43.73118]],[[8.17134,39.14848],[8.62453,38.75119],[9.09831,39.03764],[9.03102,39.13144],[9.26585,39.18575],[9.64076,39.0227],[9.89894,40.67991],[9.50068,41.39257],[8.30317,40.91071],[8.41304,41.16139],[8.21254,41.13864],[8.07521,40.59862],[8.36154,40.35],[8.27914,39.98585],[8.38283,39.6536],[8.17134,39.14848]],[[12.51489,35.53423],[12.64054,35.5306],[12.63861,35.48641],[12.51296,35.49005],[12.51489,35.53423]],[[11.91218,36.85688],[12.08179,36.85523],[12.07958,36.70974],[11.90998,36.71139],[11.91218,36.85688]],[[12.84019,35.88131],[12.89186,35.88145],[12.89198,35.85003],[12.84031,35.84989],[12.84019,35.88131]]]},{id:"Actueel_ortho25_WMS",name:"PDOK aerial imagery Beeldmateriaal.nl 25cm latest",type:"tms",template:"https://geodata.nationaalgeoregister.nl/luchtfoto/rgb/wmts?FORMAT=image/jpeg&SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=Actueel_ortho25&STYLE=&FORMAT=image/jpeg&tileMatrixSet=OGC:1.0:GoogleMapsCompatible&tileMatrix={zoom}&tileRow={y}&tileCol={x}",zoomExtent:[0,19],polygon:[[[3.14377,51.35984],[3.1575,51.24113],[3.33878,51.11544],[3.91281,51.05851],[4.65714,51.28067],[4.89334,51.26348],[5.17899,51.12579],[5.38498,51.13096],[5.54428,51.05678],[5.42069,50.85956],[5.46738,50.70326],[5.65689,50.61926],[6.14853,50.62143],[6.30234,50.85782],[6.29959,50.95438],[6.26389,51.01835],[6.37238,51.09259],[6.40122,51.20114],[6.37375,51.25102],[6.44516,51.31587],[6.42044,51.5496],[6.34354,51.67922],[6.79672,51.76429],[7.04666,51.91024],[7.07138,52.04559],[7.27188,52.17041],[7.30759,52.38551],[7.20596,52.53195],[7.28287,52.61458],[7.29935,52.77853],[7.44217,52.97827],[7.43393,53.28314],[7.04392,53.55159],[6.78299,53.63635],[6.23917,53.54016],[5.6871,53.51241],[5.17349,53.43885],[4.81644,53.23384],[4.65164,53.06583],[4.54178,52.48598],[4.32205,52.19568],[4.08104,52.01369],[4.02199,52.01623],[3.93684,51.96379],[3.95195,51.88079],[3.84483,51.84942],[3.62373,51.70752],[3.65532,51.66069],[3.63335,51.62746],[3.54683,51.62234],[3.39577,51.56091],[3.38203,51.51735],[3.49876,51.43267],[3.32985,51.38556],[3.14377,51.35984]]],terms_url:"https://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,description:"Nationwide data set 25cm resolution color aerial imagery of the most recent year.",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/nl/PDOK-Luchtfoto-Beeldmateriaal-25cm-latest.png"},{id:"al_piranhas",name:"Piranhas AL",type:"wms",template:"http://geoserver.dados.al.gov.br:8080/geoserver/Alagoas/ows?LAYERS=Piranhas&SERVICE=WMS&FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.0&SERVICE=WMS&REQUEST=GetMap&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[-37.71918,-9.65236],[-37.71918,-9.63874],[-37.71914,-9.6321],[-37.71924,-9.62114],[-37.71929,-9.61023],[-37.71934,-9.59988],[-37.7194,-9.58891],[-37.71945,-9.57802],[-37.71944,-9.57173],[-37.71952,-9.56684],[-37.71956,-9.56225],[-37.71998,-9.56218],[-37.72258,-9.56195],[-37.72818,-9.56203],[-37.73254,-9.562],[-37.74107,-9.56206],[-37.74845,-9.56202],[-37.75926,-9.56216],[-37.76972,-9.56227],[-37.78036,-9.56244],[-37.78537,-9.56236],[-37.78907,-9.56233],[-37.79562,-9.56245],[-37.79771,-9.56237],[-37.81006,-9.56243],[-37.81061,-9.56241],[-37.81053,-9.56531],[-37.81049,-9.57629],[-37.81046,-9.58742],[-37.81038,-9.59757],[-37.81031,-9.61798],[-37.81018,-9.65197],[-37.81018,-9.6523],[-37.81024,-9.65259],[-37.80664,-9.65245],[-37.80206,-9.65253],[-37.79597,-9.65237],[-37.79179,-9.65252],[-37.78815,-9.65246],[-37.78723,-9.65242],[-37.78035,-9.65241],[-37.77865,-9.65223],[-37.77625,-9.6523],[-37.77475,-9.65219],[-37.77234,-9.65223],[-37.7696,-9.65245],[-37.76623,-9.65251],[-37.76345,-9.65246],[-37.7604,-9.6525],[-37.75102,-9.65237],[-37.75012,-9.65249],[-37.74155,-9.65248],[-37.7403,-9.65239],[-37.73785,-9.65246],[-37.73443,-9.65238],[-37.73106,-9.65243],[-37.72651,-9.65237],[-37.72195,-9.65225],[-37.71992,-9.65228],[-37.71918,-9.65236]]],terms_url:"http://www.seplag.al.gov.br",terms_text:"Secretaria de Estado do Planejamento, Gestão e Patrimônio"},{id:"PNOA-Spain-TMS",name:"PNOA Spain",type:"tms",template:"https://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}",zoomExtent:[0,20],polygon:[[[-17.88463,28.44606],[-17.89395,28.52255],[-18.02125,28.74819],[-18.02241,28.80384],[-17.9424,28.87261],[-17.89118,28.87371],[-17.89033,28.85151],[-17.76759,28.85378],[-17.76698,28.83122],[-17.74127,28.832],[-17.73949,28.76422],[-17.71398,28.76497],[-17.71293,28.73037],[-17.75744,28.69318],[-17.75708,28.67413],[-17.74579,28.67435],[-17.74573,28.61656],[-17.75197,28.58337],[-17.76225,28.5592],[-17.78331,28.54167],[-17.78316,28.49366],[-17.80861,28.4925],[-17.80601,28.4469],[-17.88463,28.44606]],[[-18.1661,27.78516],[-18.16349,27.69492],[-18.08898,27.69634],[-18.08734,27.67387],[-18.03641,27.67537],[-18.03501,27.63026],[-17.959,27.6324],[-17.86033,27.7926],[-17.86303,27.83688],[-17.8884,27.83649],[-17.88913,27.85905],[-17.99065,27.85675],[-18.03868,27.76558],[-18.11464,27.76379],[-18.11546,27.78636],[-18.1661,27.78516]],[[-17.36038,28.06398],[-17.36297,28.17572],[-17.33756,28.17637],[-17.33846,28.2213],[-17.18579,28.22388],[-17.08208,28.13518],[-17.08084,28.068],[-17.13154,28.06681],[-17.15633,28.02146],[-17.23211,28.02037],[-17.23199,27.99804],[-17.25768,27.99784],[-17.25785,28.01997],[-17.30867,28.01923],[-17.36038,28.06398]],[[-16.92782,28.32758],[-16.92866,28.37219],[-16.87767,28.37293],[-16.87807,28.39542],[-16.52143,28.42261],[-16.44571,28.49113],[-16.44625,28.53597],[-16.42059,28.53627],[-16.42092,28.55884],[-16.34433,28.55976],[-16.3446,28.58221],[-16.19125,28.58372],[-16.19162,28.60684],[-16.12793,28.60782],[-16.1278,28.59218],[-16.09951,28.5925],[-16.09934,28.51638],[-16.16481,28.51612],[-16.16475,28.49386],[-16.23858,28.44847],[-16.26535,28.44761],[-16.26586,28.403],[-16.31675,28.40176],[-16.31631,28.38019],[-16.34208,28.37951],[-16.34083,28.2893],[-16.41584,28.19761],[-16.4151,28.13113],[-16.51533,28.01648],[-16.61684,28.01532],[-16.61681,27.99305],[-16.71842,27.99192],[-16.7191,28.03714],[-16.7447,28.03679],[-16.74534,28.08181],[-16.7707,28.08161],[-16.8224,28.1259],[-16.82317,28.17087],[-16.8487,28.17075],[-16.85028,28.26079],[-16.87565,28.26055],[-16.87608,28.28322],[-16.90151,28.28277],[-16.90239,28.32793],[-16.92782,28.32758]],[[-15.85374,27.90089],[-15.8542,27.99018],[-15.82895,27.99066],[-15.82911,28.03558],[-15.7783,28.03632],[-15.75328,28.08143],[-15.72788,28.08157],[-15.72826,28.17186],[-15.49897,28.1728],[-15.49874,28.15041],[-15.44978,28.15075],[-15.45016,28.19614],[-15.39728,28.19614],[-15.39644,28.03836],[-15.37103,28.03802],[-15.37065,28.01532],[-15.34578,28.01532],[-15.34548,27.92544],[-15.3708,27.92524],[-15.37057,27.83521],[-15.39598,27.83474],[-15.421,27.78797],[-15.47181,27.78939],[-15.47188,27.76665],[-15.52277,27.76678],[-15.54771,27.72161],[-15.62361,27.72134],[-15.62415,27.74199],[-15.70075,27.74335],[-15.80167,27.81105],[-15.85374,27.90089]],[[-14.52156,28.04678],[-14.52244,28.11841],[-14.41575,28.11561],[-14.21688,28.22788],[-14.21537,28.33903],[-14.16417,28.45283],[-14.11151,28.4748],[-14.03358,28.72267],[-13.95652,28.74494],[-13.95617,28.76659],[-13.82902,28.76643],[-13.82896,28.78798],[-13.80007,28.78793],[-13.8013,28.71899],[-13.82757,28.71935],[-13.82786,28.6518],[-13.80258,28.6519],[-13.80339,28.53842],[-13.82885,28.53847],[-13.83151,28.39702],[-13.91582,28.22414],[-13.98564,28.22357],[-14.03696,28.17958],[-14.13871,28.17999],[-14.13866,28.15791],[-14.21537,28.15781],[-14.21472,28.11189],[-14.29132,28.04524],[-14.33197,28.03687],[-14.44578,28.04698],[-14.44666,28.0658],[-14.49628,28.06826],[-14.49593,28.04585],[-14.52156,28.04678]],[[-13.80066,28.84566],[-13.80093,28.82311],[-13.77569,28.82305],[-13.69729,28.88982],[-13.69729,28.91277],[-13.60725,28.9118],[-13.43886,29.00024],[-13.43746,29.13513],[-13.4117,29.13499],[-13.41056,29.22298],[-13.45928,29.25559],[-13.45974,29.2942],[-13.50913,29.29456],[-13.51006,29.31635],[-13.56354,29.31729],[-13.56406,29.27138],[-13.53892,29.2712],[-13.53897,29.25004],[-13.56613,29.25013],[-13.5666,29.203],[-13.51565,29.20223],[-13.51565,29.18206],[-13.5398,29.18278],[-13.54089,29.13753],[-13.65782,29.13685],[-13.71322,29.09351],[-13.76634,29.09345],[-13.85025,29.01659],[-13.85182,28.98343],[-13.85244,28.91486],[-13.90131,28.89245],[-13.9024,28.84698],[-13.80066,28.84566]],[[1.64799,38.99907],[1.73217,38.99936],[1.73147,39.04417],[1.64895,39.04319],[1.64816,39.12764],[1.39486,39.12657],[1.39544,39.08642],[1.22811,39.08526],[1.22911,39.0029],[1.14487,39.0018],[1.14528,38.832],[1.31136,38.83316],[1.31219,38.79065],[1.39469,38.79162],[1.39519,38.75296],[1.31128,38.75193],[1.31259,38.62388],[1.6489,38.62511],[1.64807,38.71115],[1.58456,38.71012],[1.58116,38.70054],[1.54915,38.70028],[1.51972,38.70921],[1.50355,38.72532],[1.48133,38.91551],[1.55189,38.92544],[1.56673,38.95666],[1.64874,38.95833],[1.64799,38.99907]],[[2.54507,39.41667],[2.43933,39.41611],[2.43871,39.48469],[2.43902,39.49934],[2.31223,39.49934],[2.31192,39.54179],[2.22907,39.541],[2.22835,39.62606],[2.34601,39.62709],[2.92704,39.96016],[3.14566,39.96005],[3.14608,40.00198],[3.23139,40.00198],[3.23129,39.83292],[3.14823,39.83316],[3.14844,39.79357],[3.48148,39.79318],[3.48035,39.5959],[3.31506,39.47846],[3.31462,39.37855],[3.08302,39.24994],[2.97986,39.25015],[2.97904,39.3335],[2.72874,39.33342],[2.72885,39.45814],[2.64569,39.45774],[2.64538,39.49966],[2.54528,39.49942],[2.54507,39.41667]],[[3.81204,40.04344],[3.72908,40.0438],[3.72862,39.95842],[3.81266,39.9576],[3.81228,39.91644],[3.9609,39.91598],[4.19381,39.79131],[4.31503,39.79058],[4.31599,39.83293],[4.39874,39.83204],[4.39737,39.91858],[4.3158,39.91933],[4.31619,40.0434],[4.2319,40.04436],[4.23248,40.08478],[4.14915,40.08611],[4.14906,40.12552],[4.0628,40.12722],[4.06242,40.08499],[3.81287,40.08529],[3.81204,40.04344]],[[-8.89106,41.82289],[-9.1092,42.57511],[-9.03655,42.73066],[-9.08834,42.72696],[-9.14661,42.77503],[-9.21855,42.90163],[-9.2761,42.86051],[-9.30991,42.93113],[-9.27898,42.9822],[-9.30991,43.06004],[-9.25236,43.10417],[-9.2315,43.17032],[-9.14733,43.21018],[-9.06748,43.19916],[-9.03367,43.24267],[-8.99842,43.24477],[-8.99986,43.29558],[-8.93727,43.30553],[-8.92936,43.32699],[-8.8639,43.32908],[-8.87613,43.37407],[-8.82217,43.37354],[-8.78548,43.31914],[-8.70635,43.305],[-8.60996,43.3296],[-8.55097,43.32332],[-8.52435,43.3364],[-8.52507,43.36465],[-8.45745,43.39184],[-8.36105,43.41118],[-8.36033,43.46342],[-8.33444,43.57974],[-8.27761,43.57088],[-8.06467,43.72392],[-7.99921,43.7234],[-7.9172,43.78264],[-7.85605,43.79146],[-7.83591,43.73743],[-7.66284,43.80982],[-7.31889,43.67827],[-7.19975,43.58308],[-6.24882,43.6075],[-6.12293,43.57901],[-5.85204,43.6799],[-5.60363,43.57087],[-5.28553,43.56191],[-5.17875,43.49916],[-4.90899,43.48367],[-4.61562,43.4192],[-4.18399,43.42492],[-3.80295,43.51954],[-3.74,43.48693],[-3.56128,43.54236],[-3.1083,43.38163],[-2.93857,43.46246],[-2.74524,43.47551],[-2.30462,43.31706],[-1.9854,43.3563],[-1.85528,43.39725],[-1.7698,43.39644],[-1.77005,43.37605],[-1.71005,43.37569],[-1.71135,43.33125],[-1.72259,43.31318],[-1.68904,43.31291],[-1.68811,43.33413],[-1.64467,43.33372],[-1.64498,43.31332],[-1.60299,43.31295],[-1.60344,43.29266],[-1.56359,43.29212],[-1.56305,43.31338],[-1.47799,43.31284],[-1.36677,43.27614],[-1.35688,43.23815],[-1.37037,43.1713],[-1.44231,43.08336],[-1.41983,43.06036],[-1.37307,43.05117],[-1.36407,43.11159],[-1.30203,43.13522],[-1.23549,43.13325],[-1.27955,43.07744],[-1.19232,43.06496],[-1.00619,43.00778],[-0.94234,42.9749],[-0.7562,42.98213],[-0.71484,42.96108],[-0.69685,42.90314],[-0.55118,42.82207],[-0.50442,42.84845],[-0.42889,42.82009],[-0.31648,42.86558],[-0.14563,42.81086],[-0.03143,42.71249],[0.18618,42.7541],[0.30218,42.71777],[0.36422,42.74287],[0.44875,42.71447],[0.62769,42.7224],[0.64118,42.85767],[0.71492,42.88272],[0.9676,42.81811],[1.10878,42.79898],[1.17532,42.73429],[1.36326,42.74155],[1.41137,42.70939],[1.48061,42.71034],[1.4813,42.50107],[1.64436,42.50203],[1.64328,42.54245],[1.73041,42.54342],[1.73164,42.50118],[2.06386,42.50164],[2.06456,42.45902],[2.39693,42.45994],[2.39768,42.41784],[2.48048,42.41797],[2.48098,42.37594],[2.64479,42.37626],[2.64448,42.45924],[2.81133,42.45961],[2.81126,42.50104],[3.06388,42.50085],[3.06388,42.45915],[3.23078,42.45934],[3.23049,42.37644],[3.31415,42.37604],[3.31412,42.33399],[3.39785,42.33404],[3.39739,42.29009],[3.31389,42.29084],[3.31397,42.20702],[3.14759,42.2073],[3.14759,42.12606],[3.23055,42.126],[3.24668,41.95294],[3.19452,41.85589],[3.06054,41.76474],[2.78358,41.63718],[2.26293,41.42716],[2.16492,41.29893],[1.86008,41.22322],[1.3763,41.11627],[1.17937,41.04646],[1.08585,41.04849],[0.75854,40.81956],[0.9114,40.73376],[0.87813,40.67514],[0.66502,40.53587],[0.55801,40.55022],[0.43392,40.37576],[0.26756,40.19192],[0.16415,40.06472],[0.07513,40.01447],[0.01039,39.89522],[-0.09392,39.81169],[-0.18474,39.63117],[-0.29085,39.50363],[-0.28636,39.33343],[-0.18564,39.17746],[-0.21352,39.15585],[-0.11101,38.97222],[0.00949,38.88268],[0.12189,38.87218],[0.23429,38.79864],[0.25587,38.72642],[0.09581,38.61338],[-0.0022,38.60706],[-0.05705,38.52691],[-0.27197,38.47624],[-0.37987,38.39312],[-0.38347,38.33813],[-0.45091,38.33108],[-0.50487,38.28309],[-0.48238,38.19481],[-0.42933,38.16583],[-0.45451,38.14886],[-0.584,38.17219],[-0.61367,38.11986],[-0.63705,37.96122],[-0.68111,37.94562],[-0.73237,37.88107],[-0.72158,37.78306],[-0.68831,37.734],[-0.66415,37.62315],[-0.71939,37.58784],[-0.91963,37.53758],[-1.11071,37.51641],[-1.33832,37.52867],[-1.44089,37.39037],[-1.6767,37.27652],[-1.85408,36.91229],[-2.06835,36.69291],[-2.21588,36.66192],[-2.37219,36.78018],[-2.68129,36.65911],[-2.92015,36.66756],[-3.09402,36.71263],[-3.46108,36.65488],[-3.72804,36.69291],[-4.37435,36.66333],[-4.65712,36.44042],[-4.9188,36.45313],[-5.16995,36.35135],[-5.28411,36.19702],[-5.26809,36.12418],[-5.35248,36.12247],[-5.35161,36.04014],[-5.43658,36.03889],[-5.43532,36.00344],[-5.68886,36.00365],[-5.68996,36.04053],[-5.85506,36.03856],[-5.85668,36.12421],[-5.93848,36.12215],[-5.94003,36.16556],[-5.99834,36.1645],[-6.03573,36.1781],[-6.07752,36.22241],[-6.15061,36.28646],[-6.23154,36.37701],[-6.33585,36.53106],[-6.32146,36.58163],[-6.40419,36.6235],[-6.47433,36.74897],[-6.41588,36.79939],[-6.49052,36.91738],[-6.62989,37.0194],[-6.87448,37.10838],[-7.04264,37.18507],[-7.26474,37.18435],[-7.37535,37.15354],[-7.40832,37.16822],[-7.42029,37.21183],[-7.42492,37.23505],[-7.43805,37.2452],[-7.44597,37.33261],[-7.4481,37.39094],[-7.46963,37.40758],[-7.4647,37.45305],[-7.50197,37.51641],[-7.51916,37.52292],[-7.52196,37.57237],[-7.45013,37.66958],[-7.4249,37.75992],[-7.31666,37.83997],[-7.26833,37.98895],[-7.15368,38.01552],[-7.11771,38.05536],[-7.0143,38.02438],[-6.99632,38.10756],[-6.96147,38.20125],[-7.08062,38.15708],[-7.34027,38.44024],[-7.26383,38.73807],[-7.04352,38.87297],[-7.06151,38.90796],[-6.96934,39.01983],[-7.00081,39.08879],[-7.15368,39.09577],[-7.15255,39.16029],[-7.24472,39.19689],[-7.25596,39.28133],[-7.33689,39.35351],[-7.3279,39.45599],[-7.51449,39.58865],[-7.55271,39.67954],[-7.05027,39.67522],[-6.99519,39.81954],[-6.92213,39.87909],[-6.88616,40.02299],[-7.04128,40.13479],[-7.01767,40.26615],[-6.8086,40.34501],[-6.86818,40.44516],[-6.85356,40.60664],[-6.83783,40.87576],[-6.9536,41.03704],[-6.80186,41.03959],[-6.76814,41.13871],[-6.64112,41.26556],[-6.56244,41.26303],[-6.21737,41.5791],[-6.31628,41.64465],[-6.51523,41.64129],[-6.58717,41.68832],[-6.54783,41.85597],[-6.62988,41.91121],[-7.13345,41.94048],[-7.16829,41.87188],[-7.42569,41.78477],[-7.95398,41.84593],[-8.13045,41.78058],[-8.25185,41.90786],[-8.12933,42.03488],[-8.24848,42.1008],[-8.36762,42.05575],[-8.60704,42.03405],[-8.89106,41.82289]]],terms_text:"PNOA",best:true},{id:"poco_das_trincheiras",name:"Poço das Trincheiras AL",type:"wms",template:"http://geoserver.dados.al.gov.br:8080/geoserver/Alagoas/ows?LAYERS=Poco%20das%20Trincheiras&SERVICE=WMS&FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.0&SERVICE=WMS&REQUEST=GetMap&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[-37.23942,-9.35157],[-37.23947,-9.34387],[-37.23942,-9.33792],[-37.23954,-9.33022],[-37.23973,-9.32791],[-37.23974,-9.3228],[-37.23964,-9.32085],[-37.23971,-9.31864],[-37.2398,-9.31706],[-37.23982,-9.31561],[-37.24053,-9.30933],[-37.24051,-9.30004],[-37.24008,-9.29687],[-37.23998,-9.29546],[-37.23992,-9.29319],[-37.23989,-9.28978],[-37.23995,-9.28818],[-37.24008,-9.28641],[-37.24036,-9.28212],[-37.24038,-9.27897],[-37.24051,-9.27557],[-37.24004,-9.26979],[-37.24018,-9.26721],[-37.24018,-9.26612],[-37.23995,-9.26455],[-37.23983,-9.26151],[-37.24333,-9.26136],[-37.24936,-9.26146],[-37.26445,-9.26161],[-37.28016,-9.26172],[-37.28294,-9.26171],[-37.29581,-9.26178],[-37.30685,-9.26178],[-37.31419,-9.26189],[-37.32437,-9.26192],[-37.33078,-9.26175],[-37.33057,-9.27275],[-37.33048,-9.28007],[-37.33054,-9.28117],[-37.33069,-9.28427],[-37.3307,-9.28535],[-37.33064,-9.28617],[-37.33071,-9.28717],[-37.33064,-9.28769],[-37.33062,-9.29027],[-37.33043,-9.29308],[-37.33038,-9.29655],[-37.33034,-9.30591],[-37.3304,-9.31203],[-37.33038,-9.32194],[-37.33041,-9.3342],[-37.33035,-9.34185],[-37.3303,-9.34783],[-37.33035,-9.35202],[-37.31509,-9.35194],[-37.30011,-9.3519],[-37.29531,-9.35183],[-37.28899,-9.35171],[-37.28497,-9.35182],[-37.27851,-9.35173],[-37.27431,-9.35181],[-37.27115,-9.3517],[-37.26351,-9.35168],[-37.26046,-9.35164],[-37.25402,-9.35177],[-37.24705,-9.35163],[-37.23942,-9.35157]]],terms_url:"http://www.seplag.al.gov.br",terms_text:"Secretaria de Estado do Planejamento, Gestão e Patrimônio"},{id:"e-mapa.net-buildings",name:"polska.e-mapa.net: Buildings",type:"wms",template:"http://wms02.epodgik.pl/cgi-bin/KrajowaIntegracjaEwidencjiGruntow?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=budynki&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",zoomExtent:[0,19],polygon:[[[15.9751,54.37092],[16.31116,54.55618],[17.13919,54.78457],[18.34485,54.90227],[19.66137,54.47372],[20.28152,54.42135],[21.46639,54.34064],[22.77599,54.37698],[22.8626,54.42336],[23.29567,54.26786],[23.53472,54.09553],[23.52086,53.97752],[23.71834,53.46296],[23.92968,53.18567],[23.92968,52.68873],[23.7322,52.60675],[23.5659,52.58781],[23.20905,52.33026],[23.19519,52.23701],[23.50354,52.18606],[23.69062,52.00301],[23.59708,51.7399],[23.66291,51.38886],[23.9366,50.98278],[24.16873,50.86048],[24.01975,50.80358],[24.10983,50.66105],[24.05786,50.41884],[23.61787,50.30834],[22.68244,49.51635],[22.73788,49.20949],[22.90417,49.07804],[22.8626,48.99401],[22.60969,49.03718],[22.07615,49.20044],[21.84749,49.37219],[21.37631,49.44883],[21.10262,49.37219],[20.91207,49.3022],[20.6453,49.39023],[20.18451,49.33156],[20.11869,49.20044],[19.942,49.13021],[19.76531,49.21176],[19.74798,49.39925],[19.60247,49.41503],[19.50893,49.58154],[19.42925,49.59052],[19.23177,49.41503],[18.99618,49.38798],[18.93382,49.4916],[18.83681,49.49386],[18.80216,49.66234],[18.6428,49.70941],[18.52154,49.89947],[18.08154,50.01092],[17.88753,49.98865],[17.73855,50.06877],[17.6069,50.17096],[17.74548,50.21532],[17.71084,50.3017],[17.41635,50.26407],[16.94864,50.44533],[16.89321,50.40339],[17.00061,50.31055],[17.01793,50.22419],[16.81352,50.18649],[16.64029,50.09767],[16.43242,50.28621],[16.19683,50.42767],[16.42203,50.58852],[16.33888,50.66324],[16.22802,50.63688],[16.05479,50.61271],[15.57322,50.76415],[15.26834,50.89764],[15.24409,50.9806],[15.02929,51.0133],[15.00157,50.85829],[14.81102,50.87359],[14.95653,51.07212],[15.01889,51.29146],[14.93921,51.46015],[14.72094,51.55718],[14.75212,51.62606],[14.59968,51.84276],[14.70362,52.07334],[14.55811,52.24974],[14.51654,52.42544],[14.60315,52.58781],[14.11465,52.82083],[14.15276,52.9734],[14.35024,53.07342],[14.42299,53.26656],[14.1978,53.87348],[14.22205,53.99585],[15.9751,54.37092]]],terms_url:"https://polska.e-mapa.net/",terms_text:"polska.e-mapa.net - Geoportal otwartych danych przestrzennych",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/pl/polskae-mapanetBuildings.png"},{id:"debicki-buildings",name:"Powiat dębicki: Buildings",type:"wms",template:"https://debica.geoportal2.pl/map/wms/wms.php?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=budynki,adresy,EBU,EBT,S&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",zoomExtent:[0,19],polygon:[[[21.53768,50.01085],[21.51944,50.05423],[21.58099,50.1233],[21.48804,50.18059],[21.13725,50.14835],[21.13939,50.12721],[21.18058,50.12101],[21.14315,50.05965],[21.15356,49.92854],[21.27892,49.92554],[21.22448,49.8861],[21.22362,49.84258],[21.35177,49.8349],[21.36368,49.86838],[21.41585,49.82003],[21.47943,49.8398],[21.52679,49.88911],[21.47689,50.00135],[21.53768,50.01085]]],terms_text:"Powiat dębicki",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/pl/PowiatrzeszowskiBuildings.png"},{id:"lancucki-buildings",name:"Powiat łańcucki: Buildings",type:"wms",template:"https://lancut.geoportal2.pl/map/wms/wms.php?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=EBT,budynki,adresy&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",zoomExtent:[0,19],polygon:[[[22.17224,50.10121],[22.12574,50.1079],[22.0823,50.17206],[22.13591,50.1867],[22.173,50.18117],[22.18418,50.22914],[22.235,50.24718],[22.3856,50.16031],[22.40346,50.13331],[22.45275,50.12745],[22.45275,50.10676],[22.41768,50.08997],[22.38364,50.08915],[22.38542,50.05393],[22.35315,50.05067],[22.3562,50.00627],[22.31478,49.99451],[22.32139,49.94614],[22.29979,49.92455],[22.24161,49.92847],[22.20901,49.93728],[22.22382,49.96085],[22.16683,50.00412],[22.1387,50.00251],[22.12015,50.04626],[22.17224,50.10121]]],terms_text:"Powiat łańcucki",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/pl/PowiatrzeszowskiBuildings.png"},{id:"lubaczowski-buildings",name:"Powiat lubaczowski: Buildings",type:"wms",template:"https://lubaczow.geoportal2.pl/map/wms/wms.php?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=S,EBT,adresy,budynki_ewid&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",zoomExtent:[0,19],polygon:[[[23.29224,50.09693],[23.55763,50.25704],[23.51394,50.26643],[23.522,50.29892],[23.40991,50.3083],[23.44482,50.35653],[23.38072,50.3699],[23.38829,50.4058],[23.35821,50.41105],[23.2527,50.36601],[23.19379,50.40529],[23.01962,50.2928],[22.84161,50.30574],[22.83572,50.27037],[22.82426,50.26923],[22.79651,50.20933],[22.86603,50.18949],[22.87414,50.13786],[22.93233,50.1678],[22.88954,50.11501],[22.95351,50.07178],[23.05556,50.04967],[22.99884,49.99028],[23.14951,49.97563],[23.29224,50.09693]]],terms_text:"Powiat lubaczowski",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/pl/PowiatrzeszowskiBuildings.png"},{id:"poznanski-buildings",name:"Powiat poznański: Buildings",type:"wms",template:"http://wms.podgik.poznan.pl/cgi-bin/poznan?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=budynki&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",polygon:[[[16.9585,52.46312],[17.03946,52.33605],[16.84291,52.36501],[16.78596,52.46566],[16.70022,52.53819],[16.6415,52.5288],[16.44898,52.36793],[16.47775,52.2696],[16.5659,52.26813],[16.58375,52.17007],[17.08099,52.14981],[17.37124,52.34522],[17.39853,52.44037],[17.35338,52.53949],[17.13689,52.57783],[17.13126,52.6419],[17.01608,52.68366],[16.9158,52.65079],[16.85814,52.58191],[16.7367,52.57459],[16.70022,52.53824],[16.78598,52.46567],[16.9585,52.46312]]],terms_text:"PODGIK Poznań",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/pl/PowiatpoznaskiOrthophotomap(aerialimage).png"},{id:"sropczyce-buildings",name:"Powiat ropczycko-sędziszowski: Buildings",type:"wms",template:"https://spropczyce.geoportal2.pl/map/wms/wms.php?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=budynki&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",zoomExtent:[0,19],polygon:[[[21.60041,50.21025],[21.74199,50.16538],[21.792,50.17829],[21.81459,50.15264],[21.78741,50.10859],[21.82597,50.09149],[21.82552,50.02925],[21.78666,49.97585],[21.70632,49.96022],[21.683,49.92431],[21.60062,49.91793],[21.54249,49.8862],[21.5188,49.89119],[21.45315,49.99268],[21.50364,50.0198],[21.49298,50.07161],[21.55535,50.11909],[21.50429,50.16559],[21.59816,50.17866],[21.60041,50.21025]]],terms_text:"Powiat ropczycko-sędziszowski",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/pl/PowiatrzeszowskiBuildings.png"},{id:"rzeszowski-buildings",name:"Powiat rzeszowski: Buildings",type:"wms",template:"https://powiatrzeszowski.geoportal2.pl/map/wms/wms.php?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=budynki,EBT,EBU&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",zoomExtent:[0,19],polygon:[[[22.18219,50.17339],[22.09834,50.17176],[22.18016,50.09784],[22.13779,50.00695],[22.09444,50.00841],[22.02839,50.06668],[21.9354,50.06636],[21.98164,49.94977],[22.05278,50.0097],[22.1771,50.00555],[22.23319,49.96829],[22.31144,49.87008],[22.34961,49.72826],[21.99951,49.82808],[21.84961,49.95739],[21.7495,49.96981],[21.78503,50.14212],[21.93307,50.24748],[22.08291,50.26471],[21.98553,50.31545],[22.0901,50.37369],[22.19821,50.35265],[22.2536,50.2647],[22.18219,50.17339]]],terms_text:"Powiat rzeszowski",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/pl/PowiatrzeszowskiBuildings.png"},{id:"rzeszowski-aerial",name:"Powiat rzeszowski: Orthophotomap (aerial image)",type:"wms",template:"https://powiatrzeszowski.geoportal2.pl/map/wms/wms.php?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=ortofotomapa&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",zoomExtent:[0,19],polygon:[[[22.18219,50.17339],[22.09834,50.17176],[22.18016,50.09784],[22.13779,50.00695],[22.09444,50.00841],[22.02839,50.06668],[21.9354,50.06636],[21.98164,49.94977],[22.05278,50.0097],[22.1771,50.00555],[22.23319,49.96829],[22.31144,49.87008],[22.34961,49.72826],[21.99951,49.82808],[21.84961,49.95739],[21.7495,49.96981],[21.78503,50.14212],[21.93307,50.24748],[22.08291,50.26471],[21.98553,50.31545],[22.0901,50.37369],[22.19821,50.35265],[22.2536,50.2647],[22.18219,50.17339]]],terms_text:"Powiat rzeszowski",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/pl/PowiatrzeszowskiBuildings.png"},{id:"stalowowolski-buildings",name:"Powiat stalowowolski: Buildings",type:"wms",template:"https://stalowawola.geoportal2.pl/map/wms/wms.php?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=EBT,adresy,budynki,centroidy&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",zoomExtent:[0,19],polygon:[[[22.017,50.35811],[22.09292,50.44916],[22.06785,50.51434],[22.09722,50.54302],[22.16347,50.52686],[22.23795,50.5503],[22.26768,50.60465],[22.22757,50.6653],[22.16235,50.66969],[22.20843,50.75403],[22.16239,50.80039],[22.0546,50.82234],[21.94394,50.77639],[21.86228,50.80439],[21.83413,50.75035],[21.87465,50.70066],[21.84046,50.65749],[21.97582,50.53164],[21.84797,50.47196],[21.88045,50.3913],[22.017,50.35811]]],terms_text:"Powiat stalowowolski",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/pl/PowiatrzeszowskiBuildings.png"},{id:"poznan-buildings",name:"Poznań: Buildings",type:"wms",template:"http://wms2.geopoz.poznan.pl:8080/geoserver/sip/wms?SERVICE=WMS&FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=budynki_ewidencyjne_sql&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",endDate:"2018-01-01T00:00:00.000Z",startDate:"2018-01-01T00:00:00.000Z",zoomExtent:[0,23],polygon:[[[16.72794,52.48838],[16.86925,52.48982],[16.86879,52.50779],[16.93948,52.50845],[16.93926,52.51743],[16.98639,52.51784],[16.98784,52.45494],[17.03491,52.45534],[17.0353,52.43736],[17.08235,52.43774],[17.0831,52.4018],[17.0596,52.40161],[17.06129,52.32075],[17.01438,52.32035],[17.01518,52.28441],[16.96829,52.28401],[16.96787,52.30198],[16.89752,52.30134],[16.89662,52.33728],[16.80273,52.33638],[16.80176,52.37232],[16.77828,52.3721],[16.77603,52.45294],[16.72897,52.45244],[16.72794,52.48838]]],terms_text:"Zarząd Geodezji i Katastru Miejskiego GEOPOZ"},{id:"poznan-ortofotomapa2014",name:"Poznań: Orthophotomap 2014 (aerial image)",type:"wms",template:"http://wms1.geopoz.poznan.pl:6080/arcgis/services/sip/ortofotomapa_2014/MapServer/WmsServer?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=ortofotomapa_2014_image&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",endDate:"2014-01-01T00:00:00.000Z",startDate:"2014-01-01T00:00:00.000Z",zoomExtent:[0,23],polygon:[[[16.72794,52.48838],[16.86925,52.48982],[16.86879,52.50779],[16.93948,52.50845],[16.93926,52.51743],[16.98639,52.51784],[16.98784,52.45494],[17.03491,52.45534],[17.0353,52.43736],[17.08235,52.43774],[17.0831,52.4018],[17.0596,52.40161],[17.06129,52.32075],[17.01438,52.32035],[17.01518,52.28441],[16.96829,52.28401],[16.96787,52.30198],[16.89752,52.30134],[16.89662,52.33728],[16.80273,52.33638],[16.80176,52.37232],[16.77828,52.3721],[16.77603,52.45294],[16.72897,52.45244],[16.72794,52.48838]]],terms_text:"Zarząd Geodezji i Katastru Miejskiego GEOPOZ"},{id:"poznan-ortofotomapa2016",name:"Poznań: Orthophotomap 2016 (aerial image)",type:"wms",template:"http://wms1.geopoz.poznan.pl:6080/arcgis/services/sip/ortofotomapy/MapServer/WmsServer?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=ortofotomapa_2016_image&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",endDate:"2016-01-01T00:00:00.000Z",startDate:"2016-01-01T00:00:00.000Z",zoomExtent:[0,23],polygon:[[[16.72794,52.48838],[16.86925,52.48982],[16.86879,52.50779],[16.93948,52.50845],[16.93926,52.51743],[16.98639,52.51784],[16.98784,52.45494],[17.03491,52.45534],[17.0353,52.43736],[17.08235,52.43774],[17.0831,52.4018],[17.0596,52.40161],[17.06129,52.32075],[17.01438,52.32035],[17.01518,52.28441],[16.96829,52.28401],[16.96787,52.30198],[16.89752,52.30134],[16.89662,52.33728],[16.80273,52.33638],[16.80176,52.37232],[16.77828,52.3721],[16.77603,52.45294],[16.72897,52.45244],[16.72794,52.48838]]],terms_text:"Zarząd Geodezji i Katastru Miejskiego GEOPOZ"},{id:"PrahaIPRlatestorthophoto",name:"Praha IPR latest orthophoto",type:"wms",template:"http://giswa1.mag.mepnet.cz/arcgis/services/MAP/letecke_snimky_posledni_snimkovani_cache/MapServer/WmsServer?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=0&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",zoomExtent:[1,20],polygon:[[[14.81232,49.93089],[14.18755,49.87687],[14.12025,50.19882],[14.74502,50.25247],[14.81232,49.93089]]]},{id:"PrahaIPRlow-vegetationorthophoto",name:"Praha IPR low-vegetation orthophoto",type:"wms",template:"http://giswa1.mag.mepnet.cz/arcgis/services/MAP/mimovegetacni_snimkovani_cache/MapServer/WmsServer?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=0&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",zoomExtent:[1,20],polygon:[[[14.30454,49.99538],[14.31604,49.94205],[14.35,49.94508],[14.35384,49.92726],[14.42385,49.93352],[14.42009,49.95097],[14.48865,49.95709],[14.48479,49.97501],[14.55386,49.98117],[14.55012,49.99852],[14.58455,50.00159],[14.5883,49.98424],[14.69168,49.99346],[14.67634,50.06453],[14.71279,50.06777],[14.70115,50.12158],[14.6647,50.11834],[14.661,50.13543],[14.62755,50.13246],[14.61965,50.16895],[14.58543,50.16591],[14.58163,50.18344],[14.40776,50.168],[14.41156,50.15045],[14.37765,50.14744],[14.3738,50.16524],[14.33893,50.16214],[14.34278,50.14434],[14.27368,50.1382],[14.27749,50.12058],[14.2088,50.11447],[14.21289,50.09557],[14.24656,50.09857],[14.25417,50.06336],[14.21987,50.0603],[14.2237,50.04259],[14.258,50.04565],[14.26953,49.99226],[14.30454,49.99538]]]},{id:"przemysl-buildings",name:"Przemyśl: Buildings",type:"wms",template:"http://przemysl.geoportal2.pl/map/wms/wms.php?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=adresy,budynki&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",zoomExtent:[0,19],polygon:[[[22.72268,49.76885],[22.73002,49.76787],[22.73097,49.77612],[22.72027,49.77662],[22.71787,49.78062],[22.73104,49.78553],[22.7244,49.79043],[22.73458,49.80441],[22.73167,49.81429],[22.7261,49.8165],[22.72762,49.82124],[22.74395,49.8187],[22.75952,49.80939],[22.79042,49.81462],[22.81169,49.80571],[22.79738,49.80146],[22.80384,49.79247],[22.83118,49.79664],[22.85752,49.78561],[22.84549,49.76746],[22.82485,49.77105],[22.82004,49.75674],[22.77358,49.74439],[22.73838,49.75895],[22.72205,49.74644],[22.71065,49.76288],[22.72268,49.76885]]],terms_text:"Miasto Przemyśl",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/pl/PowiatrzeszowskiBuildings.png"},{id:"przemysl-aerial",name:"Przemyśl: Ortophotomap (aerial image)",type:"wms",template:"http://przemysl.geoportal2.pl/map/wms/wms.php?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=ortofotomapa&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",zoomExtent:[0,23],polygon:[[[22.72268,49.76885],[22.73002,49.76787],[22.73097,49.77612],[22.72027,49.77662],[22.71787,49.78062],[22.73104,49.78553],[22.7244,49.79043],[22.73458,49.80441],[22.73167,49.81429],[22.7261,49.8165],[22.72762,49.82124],[22.74395,49.8187],[22.75952,49.80939],[22.79042,49.81462],[22.81169,49.80571],[22.79738,49.80146],[22.80384,49.79247],[22.83118,49.79664],[22.85752,49.78561],[22.84549,49.76746],[22.82485,49.77105],[22.82004,49.75674],[22.77358,49.74439],[22.73838,49.75895],[22.72205,49.74644],[22.71065,49.76288],[22.72268,49.76885]]],terms_text:"Miasto Przemyśl",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/pl/PowiatrzeszowskiBuildings.png"},{id:"RABA-KGZ-3000",name:"RABA-KGZ: Slovenia built-up areas",type:"tms",template:"https://wms.openstreetmap.de/tms/RABA3000/{zoom}/{x}/{y}.png",zoomExtent:[8,19],polygon:[[[15.17101,45.41273],[15.06731,45.4781],[14.98353,45.48726],[14.93027,45.51869],[14.91295,45.46869],[14.81398,45.45019],[14.77755,45.49724],[14.71885,45.52386],[14.68383,45.51924],[14.68367,45.57107],[14.58902,45.61966],[14.59477,45.65727],[14.51653,45.5974],[14.49636,45.52968],[14.32388,45.46048],[14.28251,45.47949],[14.26083,45.47352],[14.2367,45.49569],[14.21022,45.45962],[14.1328,45.46542],[14.06694,45.47615],[14.01187,45.50769],[13.98752,45.49945],[14.00668,45.4739],[13.99154,45.44854],[13.91789,45.44329],[13.88867,45.416],[13.81063,45.42531],[13.7856,45.45577],[13.67553,45.43241],[13.38,45.5666],[13.63822,45.64153],[13.72158,45.60472],[13.83759,45.59226],[13.89962,45.63295],[13.82754,45.67917],[13.82429,45.70266],[13.78961,45.73525],[13.66355,45.79008],[13.62279,45.78613],[13.58835,45.80154],[13.56531,45.85522],[13.62633,45.93894],[13.62975,45.97662],[13.59233,45.97929],[13.57124,45.9591],[13.52998,45.95627],[13.46729,46.00147],[13.49765,46.03741],[13.4896,46.06574],[13.58839,46.11268],[13.63712,46.14524],[13.65358,46.17505],[13.57147,46.17434],[13.54859,46.19982],[13.48189,46.21479],[13.42003,46.19662],[13.40026,46.21037],[13.40304,46.23284],[13.36653,46.30266],[13.43369,46.33243],[13.43247,46.36779],[13.56263,46.40895],[13.59357,46.44846],[13.68393,46.44947],[13.71321,46.53296],[13.79725,46.5164],[13.91305,46.53108],[14.00849,46.49169],[14.09406,46.49538],[14.12664,46.4852],[14.16569,46.44341],[14.28242,46.45347],[14.3259,46.44111],[14.43178,46.4568],[14.45113,46.43239],[14.52618,46.43623],[14.56677,46.38549],[14.58993,46.44479],[14.65658,46.45447],[14.71191,46.50954],[14.80818,46.51778],[14.81442,46.55093],[14.86094,46.61239],[14.9102,46.61569],[14.95398,46.64257],[14.98376,46.61868],[15.02973,46.65796],[15.10645,46.66965],[15.23727,46.64973],[15.41364,46.66553],[15.46237,46.64732],[15.47411,46.6226],[15.53427,46.64346],[15.53636,46.6761],[15.59201,46.69952],[15.62405,46.69039],[15.65624,46.71643],[15.767,46.70899],[15.83801,46.73237],[15.91476,46.71958],[16.02919,46.67033],[16.02955,46.68778],[15.99495,46.71178],[15.97505,46.74967],[15.98671,46.84189],[16.0553,46.85049],[16.11022,46.87912],[16.15425,46.86525],[16.23302,46.88667],[16.29431,46.8824],[16.34649,46.85476],[16.36058,46.8278],[16.34711,46.79707],[16.32245,46.79068],[16.33977,46.7799],[16.33186,46.75896],[16.38893,46.70785],[16.4383,46.69655],[16.42822,46.65301],[16.40159,46.6439],[16.51477,46.57299],[16.54136,46.53627],[16.5416,46.50887],[16.611,46.48393],[16.61889,46.46203],[16.52219,46.45842],[16.47451,46.50108],[16.36776,46.53371],[16.2582,46.489],[16.28533,46.42441],[16.3168,46.40141],[16.30574,46.36921],[16.18689,46.36804],[16.14548,46.39515],[16.06959,46.38154],[16.08614,46.34087],[16.04058,46.32708],[16.01819,46.29964],[15.80777,46.25091],[15.79649,46.21296],[15.77128,46.19937],[15.67996,46.21707],[15.65737,46.20838],[15.65639,46.18456],[15.62037,46.16163],[15.61899,46.11595],[15.63483,46.09529],[15.71869,46.06873],[15.74241,46.04578],[15.71612,45.99489],[15.71645,45.9178],[15.69237,45.90013],[15.69375,45.87111],[15.71776,45.8416],[15.6441,45.81058],[15.57467,45.83999],[15.52333,45.81155],[15.49115,45.82041],[15.47514,45.78666],[15.40343,45.78216],[15.28683,45.73391],[15.27435,45.72408],[15.29763,45.70782],[15.36329,45.72191],[15.41517,45.65443],[15.39705,45.62929],[15.31501,45.62356],[15.31503,45.60696],[15.29266,45.60163],[15.30852,45.58653],[15.31145,45.5423],[15.39496,45.48325],[15.34824,45.44665],[15.27515,45.45599],[15.22848,45.41683],[15.17101,45.41273]]],terms_url:"https://wiki.openstreetmap.org/wiki/Slovenia_Landcover_Import_-_RABA-KGZ",terms_text:"Copyright ©2019 Ministrstvo za kmetijstvo, gozdarstvo in prehrano (mkgp.gov.si). Some rights reserved.",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/si/RABA-KGZSloveniafarmlanduse.png"},{id:"RABA-KGZ",name:"RABA-KGZ: Slovenia farmland use",type:"tms",template:"https://wms.openstreetmap.de/tms/RABA/{zoom}/{x}/{y}.png",zoomExtent:[8,19],polygon:[[[15.17101,45.41273],[15.06731,45.4781],[14.98353,45.48726],[14.93027,45.51869],[14.91295,45.46869],[14.81398,45.45019],[14.77755,45.49724],[14.71885,45.52386],[14.68383,45.51924],[14.68367,45.57107],[14.58902,45.61966],[14.59477,45.65727],[14.51653,45.5974],[14.49636,45.52968],[14.32388,45.46048],[14.28251,45.47949],[14.26083,45.47352],[14.2367,45.49569],[14.21022,45.45962],[14.1328,45.46542],[14.06694,45.47615],[14.01187,45.50769],[13.98752,45.49945],[14.00668,45.4739],[13.99154,45.44854],[13.91789,45.44329],[13.88867,45.416],[13.81063,45.42531],[13.7856,45.45577],[13.67553,45.43241],[13.38,45.5666],[13.63822,45.64153],[13.72158,45.60472],[13.83759,45.59226],[13.89962,45.63295],[13.82754,45.67917],[13.82429,45.70266],[13.78961,45.73525],[13.66355,45.79008],[13.62279,45.78613],[13.58835,45.80154],[13.56531,45.85522],[13.62633,45.93894],[13.62975,45.97662],[13.59233,45.97929],[13.57124,45.9591],[13.52998,45.95627],[13.46729,46.00147],[13.49765,46.03741],[13.4896,46.06574],[13.58839,46.11268],[13.63712,46.14524],[13.65358,46.17505],[13.57147,46.17434],[13.54859,46.19982],[13.48189,46.21479],[13.42003,46.19662],[13.40026,46.21037],[13.40304,46.23284],[13.36653,46.30266],[13.43369,46.33243],[13.43247,46.36779],[13.56263,46.40895],[13.59357,46.44846],[13.68393,46.44947],[13.71321,46.53296],[13.79725,46.5164],[13.91305,46.53108],[14.00849,46.49169],[14.09406,46.49538],[14.12664,46.4852],[14.16569,46.44341],[14.28242,46.45347],[14.3259,46.44111],[14.43178,46.4568],[14.45113,46.43239],[14.52618,46.43623],[14.56677,46.38549],[14.58993,46.44479],[14.65658,46.45447],[14.71191,46.50954],[14.80818,46.51778],[14.81442,46.55093],[14.86094,46.61239],[14.9102,46.61569],[14.95398,46.64257],[14.98376,46.61868],[15.02973,46.65796],[15.10645,46.66965],[15.23727,46.64973],[15.41364,46.66553],[15.46237,46.64732],[15.47411,46.6226],[15.53427,46.64346],[15.53636,46.6761],[15.59201,46.69952],[15.62405,46.69039],[15.65624,46.71643],[15.767,46.70899],[15.83801,46.73237],[15.91476,46.71958],[16.02919,46.67033],[16.02955,46.68778],[15.99495,46.71178],[15.97505,46.74967],[15.98671,46.84189],[16.0553,46.85049],[16.11022,46.87912],[16.15425,46.86525],[16.23302,46.88667],[16.29431,46.8824],[16.34649,46.85476],[16.36058,46.8278],[16.34711,46.79707],[16.32245,46.79068],[16.33977,46.7799],[16.33186,46.75896],[16.38893,46.70785],[16.4383,46.69655],[16.42822,46.65301],[16.40159,46.6439],[16.51477,46.57299],[16.54136,46.53627],[16.5416,46.50887],[16.611,46.48393],[16.61889,46.46203],[16.52219,46.45842],[16.47451,46.50108],[16.36776,46.53371],[16.2582,46.489],[16.28533,46.42441],[16.3168,46.40141],[16.30574,46.36921],[16.18689,46.36804],[16.14548,46.39515],[16.06959,46.38154],[16.08614,46.34087],[16.04058,46.32708],[16.01819,46.29964],[15.80777,46.25091],[15.79649,46.21296],[15.77128,46.19937],[15.67996,46.21707],[15.65737,46.20838],[15.65639,46.18456],[15.62037,46.16163],[15.61899,46.11595],[15.63483,46.09529],[15.71869,46.06873],[15.74241,46.04578],[15.71612,45.99489],[15.71645,45.9178],[15.69237,45.90013],[15.69375,45.87111],[15.71776,45.8416],[15.6441,45.81058],[15.57467,45.83999],[15.52333,45.81155],[15.49115,45.82041],[15.47514,45.78666],[15.40343,45.78216],[15.28683,45.73391],[15.27435,45.72408],[15.29763,45.70782],[15.36329,45.72191],[15.41517,45.65443],[15.39705,45.62929],[15.31501,45.62356],[15.31503,45.60696],[15.29266,45.60163],[15.30852,45.58653],[15.31145,45.5423],[15.39496,45.48325],[15.34824,45.44665],[15.27515,45.45599],[15.22848,45.41683],[15.17101,45.41273]]],terms_url:"https://wiki.openstreetmap.org/wiki/Slovenia_Landcover_Import_-_RABA-KGZ",terms_text:"Copyright ©2019 Ministrstvo za kmetijstvo, gozdarstvo in prehrano (mkgp.gov.si). Some rights reserved.",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/si/RABA-KGZSloveniafarmlanduse.png"},{id:"riksantikvaren-kulturminner",name:"Riksantikvaren Heritage Sites overlay",type:"wms",template:"https://kart.ra.no/arcgis/services/Distribusjon/Kulturminner/MapServer/WmsServer?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=3,6&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",zoomExtent:[13,22],polygon:[[[-10.95725,71.60964],[-6.16765,71.62095],[-6.13756,70.30991],[-10.92717,70.29784],[-10.95725,71.60964]],[[16.81947,74.9482],[21.25771,74.94213],[21.23712,73.8918],[16.79889,73.89828],[16.81947,74.9482]],[[4.04288,79.93593],[20.65421,81.54417],[36.6503,80.40108],[26.76265,75.8129],[13.88667,75.79135],[4.04288,79.93593]],[[31.90425,70.43681],[28.47652,71.32896],[23.6865,71.25143],[16.80906,70.07308],[11.16207,67.52539],[9.97554,64.81158],[4.21871,62.145],[4.37254,59.1872],[6.17431,57.8915],[7.93212,57.73936],[10.77758,58.86491],[11.7224,58.76251],[12.72216,60.11415],[13.05175,61.34935],[12.52439,63.61699],[14.23826,63.98561],[15.11717,65.90166],[18.69871,68.37491],[20.06101,68.26126],[21.00584,68.78415],[25.24656,68.3506],[26.93845,69.8472],[28.76219,69.61121],[28.5864,68.8556],[31.06931,69.51915],[31.90425,70.43681]]],terms_url:"https://www.riksantikvaren.no/Veiledning/Data-og-tjenester/Karttjenester",terms_text:"© Riksantikvaren",description:"Archeological and architectural monuments/sites and cultural environments protected by law (''enkeltminner'') from the Norwegian Directorate for Cultural Heritage",icon:"https://www.riksantikvaren.no/extension/riksantikvaren/design/internetsite/images/logo_na.png",overlay:true},{id:"rio2013",name:"Rio Mosaic 2013",type:"wms",template:"http://geo.rio.rj.gov.br/ArcGIS/services/Imagens/Mosaico_2013/MapServer/WMSServer?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=1&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",endDate:"2013-01-01T00:00:00.000Z",startDate:"2013-01-01T00:00:00.000Z",polygon:[[[-43.17709,-22.96971],[-43.14586,-22.96959],[-43.14605,-22.92719],[-43.15625,-22.92731],[-43.15647,-22.87557],[-43.17739,-22.87494],[-43.17742,-22.88553],[-43.19804,-22.88571],[-43.19804,-22.85429],[-43.21875,-22.85444],[-43.21901,-22.83365],[-43.22937,-22.83365],[-43.22934,-22.82371],[-43.19869,-22.82353],[-43.19856,-22.83413],[-43.18826,-22.83398],[-43.18804,-22.84448],[-43.16667,-22.84442],[-43.16683,-22.83404],[-43.15638,-22.83407],[-43.15654,-22.81336],[-43.10436,-22.81306],[-43.10446,-22.80288],[-43.09387,-22.80276],[-43.0941,-22.73998],[-43.13599,-22.73992],[-43.13569,-22.75067],[-43.12573,-22.75055],[-43.12556,-22.77118],[-43.14595,-22.77109],[-43.14612,-22.76055],[-43.17771,-22.76088],[-43.17758,-22.77115],[-43.18807,-22.7713],[-43.18807,-22.78166],[-43.25067,-22.78163],[-43.25057,-22.79198],[-43.28054,-22.79282],[-43.30343,-22.79312],[-43.33353,-22.79297],[-43.33347,-22.80258],[-43.38574,-22.8024],[-43.38542,-22.81255],[-43.41691,-22.81285],[-43.41675,-22.82341],[-43.42717,-22.82335],[-43.4274,-22.83374],[-43.45844,-22.83362],[-43.45864,-22.81276],[-43.48984,-22.813],[-43.48994,-22.7965],[-43.50208,-22.79746],[-43.51543,-22.79737],[-43.52078,-22.79591],[-43.54169,-22.79603],[-43.54179,-22.80234],[-43.54653,-22.80246],[-43.54666,-22.81189],[-43.55251,-22.81279],[-43.56991,-22.81294],[-43.56998,-22.8197],[-43.57361,-22.82326],[-43.58348,-22.82329],[-43.58352,-22.83347],[-43.59391,-22.83374],[-43.59394,-22.85468],[-43.66099,-22.85459],[-43.66099,-22.85983],[-43.70852,-22.86019],[-43.70836,-22.86503],[-43.72206,-22.86488],[-43.72213,-22.86847],[-43.75015,-22.86859],[-43.75009,-22.8753],[-43.76038,-22.87527],[-43.75992,-22.8785],[-43.75976,-22.88457],[-43.76132,-22.88586],[-43.78129,-22.8858],[-43.78126,-22.89591],[-43.80213,-22.89621],[-43.80135,-22.91137],[-43.80119,-22.92758],[-43.79213,-22.92776],[-43.7922,-22.93822],[-43.78191,-22.93799],[-43.78184,-22.94869],[-43.75067,-22.94845],[-43.7506,-22.95909],[-43.72986,-22.95886],[-43.72966,-22.97984],[-43.70904,-22.97966],[-43.70891,-22.99033],[-43.69846,-22.99006],[-43.69836,-23.00065],[-43.66735,-23.00044],[-43.66726,-23.01117],[-43.63125,-23.00937],[-43.63131,-23.02079],[-43.63586,-23.02091],[-43.63602,-23.03164],[-43.67771,-23.03164],[-43.67765,-23.04233],[-43.67086,-23.0423],[-43.67109,-23.0631],[-43.64599,-23.06304],[-43.64605,-23.05276],[-43.60475,-23.05255],[-43.60452,-23.06307],[-43.58381,-23.06289],[-43.58368,-23.08404],[-43.54186,-23.08383],[-43.54195,-23.06319],[-43.52147,-23.06301],[-43.5213,-23.07352],[-43.50043,-23.07337],[-43.50043,-23.04218],[-43.45877,-23.04221],[-43.4587,-23.03194],[-43.43782,-23.03182],[-43.43776,-23.02154],[-43.3235,-23.02121],[-43.3233,-23.04212],[-43.31291,-23.04195],[-43.31275,-23.05267],[-43.30239,-23.05258],[-43.30236,-23.04227],[-43.29194,-23.04215],[-43.29197,-23.03194],[-43.27109,-23.03182],[-43.27119,-23.01093],[-43.26061,-23.01087],[-43.26067,-23.00059],[-43.25057,-23.00047],[-43.25054,-23.01126],[-43.23989,-23.01102],[-43.23986,-23.00062],[-43.21908,-23.0005],[-43.21904,-22.99021],[-43.20901,-22.99009],[-43.20862,-23.08389],[-43.18768,-23.08377],[-43.18761,-23.07334],[-43.13582,-23.07337],[-43.13589,-23.05249],[-43.17732,-23.05255],[-43.17709,-22.96971]]],terms_url:"https://pgeo3.rio.rj.gov.br/arcgis/rest/services/Imagens/Mosaico_2013_UTM/MapServer",terms_text:"Instituto Pereira Passos - Prefeitura da Cidade do Rio de Janeiro."},{id:"rio2015",name:"Rio Mosaic 2015",type:"wms",template:"https://pgeo3.rio.rj.gov.br/arcgis/services/Imagens/Mosaico_2015_UTM/MapServer/WmsServer?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=0&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",endDate:"2015-01-01T00:00:00.000Z",startDate:"2015-01-01T00:00:00.000Z",zoomExtent:[0,13],polygon:[[[-42.30363,-22.43698],[-44.10842,-22.06579],[-44.5313,-23.7863],[-42.70469,-24.16178],[-42.30363,-22.43698]]],terms_url:"https://pgeo3.rio.rj.gov.br/arcgis/rest/services/Imagens/Mosaico_2015_UTM/MapServer",terms_text:"Instituto Pereira Passos - Prefeitura da Cidade do Rio de Janeiro."},{id:"route500",name:"Route 500",type:"tms",template:"https://{switch:a,b,c}.tile.openstreetmap.fr/route500/{zoom}/{x}/{y}.png",zoomExtent:[12,20],polygon:[[[-2.7,43.9],[-6.3,48.98],[-2.25,50.09],[1.31,50.88],[2.35816,51.32937],[2.5488,51.09759],[2.57048,51.07409],[2.58741,51.01763],[2.59845,51.0051],[2.61558,50.99749],[2.63986,50.95766],[2.64225,50.94578],[2.62452,50.9256],[2.61962,50.91067],[2.62396,50.86071],[2.62781,50.85054],[2.63786,50.83696],[2.6511,50.82906],[2.73267,50.81738],[2.79995,50.73795],[2.81655,50.73092],[2.85265,50.73335],[2.89072,50.7162],[2.90492,50.71536],[2.9161,50.72418],[2.93508,50.75592],[3.00718,50.78377],[3.08218,50.78749],[3.09244,50.79092],[3.11412,50.80566],[3.14877,50.80195],[3.2154,50.73111],[3.22149,50.7267],[3.27051,50.70375],[3.27545,50.67757],[3.26576,50.6604],[3.26588,50.64054],[3.28922,50.60028],[3.29219,50.55037],[3.3056,50.53267],[3.37551,50.50839],[3.3898,50.50884],[3.4748,50.54445],[3.52173,50.53459],[3.53266,50.51873],[3.54779,50.51012],[3.61523,50.50558],[3.67378,50.45642],[3.68415,50.35277],[3.6901,50.34044],[3.70258,50.33482],[3.71576,50.33854],[3.74935,50.36279],[3.84109,50.36558],[3.90189,50.3436],[3.91317,50.34291],[4.02672,50.36904],[4.13761,50.29984],[4.14388,50.29727],[4.21444,50.28167],[4.22904,50.26664],[4.23078,50.25233],[4.17084,50.18579],[4.16601,50.16888],[4.1764,50.1547],[4.21195,50.13602],[4.24074,50.07102],[4.23193,50.05551],[4.18164,50.03436],[4.17177,50.02537],[4.16976,50.01217],[4.1765,50.00065],[4.20633,49.97546],[4.22164,49.97089],[4.30877,49.98145],[4.44542,49.9523],[4.45469,49.95251],[4.6581,50.00609],[4.66936,50.01392],[4.67293,50.02716],[4.66924,50.06972],[4.69517,50.10472],[4.83123,50.17941],[4.8815,50.16436],[4.90479,50.14451],[4.90426,50.12639],[4.88076,50.0815],[4.86277,50.0745],[4.85104,50.06216],[4.84331,50.03884],[4.84331,50.03883],[4.8433,50.03881],[4.82678,49.989],[4.82662,49.97692],[4.83343,49.96696],[4.89654,49.91753],[4.89755,49.89424],[4.87913,49.86942],[4.87625,49.85111],[4.88924,49.81266],[4.89769,49.80204],[4.91098,49.79926],[4.99534,49.81116],[5.01867,49.79272],[5.02686,49.78886],[5.09944,49.77323],[5.13458,49.73462],[5.1412,49.72984],[5.18761,49.70906],[5.19602,49.70732],[5.28157,49.70836],[5.33363,49.67308],[5.344,49.65049],[5.3544,49.64041],[5.43141,49.60791],[5.48205,49.52815],[5.49294,49.51979],[5.50666,49.52042],[5.55401,49.54025],[5.59311,49.53424],[5.6076,49.53761],[5.641,49.56095],[5.70676,49.55267],[5.71578,49.55361],[5.77526,49.57414],[5.8399,49.55321],[5.86126,49.52038],[5.876,49.5114],[5.97516,49.50129],[5.99801,49.47317],[6.01627,49.46597],[6.08635,49.47562],[6.09319,49.47787],[6.17397,49.52187],[6.24643,49.52511],[6.334,49.48235],[6.34423,49.48037],[6.43515,49.487],[6.5451,49.44384],[6.60639,49.37868],[6.60497,49.33739],[6.61627,49.31869],[6.67013,49.29269],[6.72996,49.22917],[6.74328,49.19086],[6.76026,49.17752],[6.80904,49.17284],[6.82473,49.17826],[6.83093,49.19366],[6.82982,49.21802],[6.85119,49.23136],[6.88453,49.2239],[6.89322,49.22389],[6.93753,49.23369],[7.04055,49.19794],[7.0463,49.17503],[7.05478,49.16313],[7.06908,49.16018],[7.10494,49.16634],[7.14315,49.14159],[7.1535,49.13839],[7.28683,49.13488],[7.29893,49.13856],[7.36095,49.18259],[7.45012,49.19517],[7.50113,49.17672],[7.54379,49.10572],[7.5579,49.09626],[7.6296,49.08527],[7.64722,49.06722],[7.6612,49.06119],[7.75401,49.05963],[7.76073,49.06067],[7.80291,49.07489],[7.85525,49.05329],[7.8673,49.05227],[7.93826,49.06832],[8.08069,49.00688],[8.2225,48.98787],[8.23704,48.97683],[8.23589,48.95817],[8.20888,48.94863],[8.20089,48.94339],[8.15824,48.89753],[8.10087,48.7993],[7.99071,48.74478],[7.98534,48.7409],[7.90422,48.65865],[7.85605,48.63606],[7.8484,48.62977],[7.81842,48.58883],[7.81456,48.57704],[7.81449,48.50968],[7.78547,48.48337],[7.78055,48.47652],[7.74506,48.39484],[7.74357,48.38427],[7.75159,48.32322],[7.71085,48.29841],[7.70241,48.28803],[7.67661,48.21555],[7.59605,48.11698],[7.59165,48.10648],[7.58522,48.04694],[7.59127,48.03035],[7.62437,47.99865],[7.63205,47.97081],[7.57554,47.87436],[7.5728,47.86435],[7.57267,47.83631],[7.54581,47.78793],[7.54418,47.77232],[7.55758,47.72899],[7.53526,47.6989],[7.53136,47.68564],[7.537,47.67302],[7.60016,47.60822],[7.58967,47.56755],[7.55424,47.55128],[7.54511,47.54283],[7.51256,47.48439],[7.38747,47.42111],[7.32653,47.4273],[7.24435,47.40939],[7.16708,47.4335],[7.15212,47.47612],[7.14279,47.48707],[7.12853,47.48893],[7.0801,47.47718],[7.03557,47.48695],[7.02102,47.48458],[7.01205,47.47287],[7.003,47.44095],[6.9551,47.40808],[6.94716,47.39698],[6.94818,47.38337],[6.95769,47.37359],[6.97126,47.37218],[7.018,47.38386],[7.05623,47.37035],[7.07007,47.35005],[7.05958,47.32257],[6.97424,47.27856],[6.96347,47.26233],[6.96134,47.23479],[6.89443,47.19393],[6.88913,47.18922],[6.85545,47.14636],[6.76907,47.10751],[6.76011,47.09953],[6.72561,47.0418],[6.62355,46.9811],[6.4812,46.9445],[6.46892,46.93522],[6.46686,46.91997],[6.47548,46.88771],[6.4535,46.8239],[6.45644,46.80534],[6.46722,46.79104],[6.46098,46.76887],[6.15817,46.59343],[6.14872,46.58069],[6.15152,46.56508],[6.16549,46.54399],[6.15811,46.52456],[6.10174,46.46979],[6.09572,46.45418],[6.09704,46.43317],[6.10829,46.41643],[6.16622,46.38839],[6.17817,46.36922],[6.13748,46.31297],[6.13371,46.30227],[6.13038,46.23737],[6.1103,46.22344],[6.08865,46.23081],[6.07717,46.23123],[6.01857,46.21601],[6.00681,46.20752],[6.00388,46.19332],[6.00787,46.16977],[6.01783,46.15564],[6.03509,46.15456],[6.05564,46.16288],[6.12468,46.15415],[6.13778,46.15702],[6.24026,46.22094],[6.24906,46.23299],[6.24707,46.24777],[6.21148,46.31057],[6.21219,46.32485],[6.23946,46.36705],[6.31648,46.41557],[6.41083,46.42495],[6.41748,46.42682],[6.50498,46.46871],[6.63047,46.47435],[6.74665,46.45695],[6.82244,46.42925],[6.81832,46.38181],[6.80484,46.36179],[6.80189,46.34639],[6.81095,46.33359],[6.86491,46.30038],[6.87504,46.28007],[6.86092,46.2439],[6.82698,46.21188],[6.82075,46.19862],[6.81863,46.16592],[6.82259,46.15261],[6.83427,46.14509],[6.90382,46.12971],[6.90491,46.09595],[6.90932,46.08406],[6.92001,46.07721],[6.94898,46.0699],[7.01556,46.00883],[7.05191,45.93066],[7.04533,45.92217],[7.04497,45.92064],[7.04394,45.92036],[6.99582,45.85822],[6.94097,45.83551],[6.84376,45.82387],[6.83102,45.81711],[6.82614,45.80353],[6.82787,45.73217],[6.83174,45.72082],[6.8414,45.71373],[6.90729,45.69124],[6.92419,45.66935],[6.94247,45.66172],[6.97131,45.66528],[7.00597,45.64945],[7.01151,45.63652],[6.9978,45.60877],[6.99643,45.59465],[7.0158,45.52354],[7.02774,45.5102],[7.1072,45.47877],[7.1228,45.44924],[7.13304,45.44001],[7.1856,45.41894],[7.19515,45.40409],[7.17075,45.35069],[7.14232,45.32298],[7.13649,45.30576],[7.14458,45.25048],[7.08417,45.20279],[6.99279,45.19823],[6.98106,45.19368],[6.90009,45.12689],[6.85843,45.11699],[6.78283,45.14228],[6.77056,45.14242],[6.67751,45.11356],[6.6653,45.10289],[6.66501,45.08667],[6.68237,45.04558],[6.69602,45.03395],[6.75744,45.01884],[6.78375,44.9146],[6.7942,44.90161],[6.86698,44.86519],[6.8798,44.86346],[6.93633,44.87461],[7.01795,44.84402],[7.03453,44.82282],[7.03711,44.75009],[7.0496,44.73226],[7.07224,44.72311],[7.08651,44.6968],[7.08666,44.68085],[7.07671,44.67134],[6.99007,44.67203],[6.97413,44.66431],[6.97056,44.64696],[6.97819,44.61784],[6.94659,44.57124],[6.88235,44.53479],[6.87233,44.5195],[6.87892,44.50245],[6.95894,44.43129],[6.95872,44.42908],[6.92167,44.41436],[6.91223,44.40659],[6.90907,44.39477],[6.90972,44.38195],[6.91637,44.36804],[6.99909,44.29414],[7.01181,44.256],[7.01983,44.24558],[7.03259,44.2424],[7.07312,44.2461],[7.1651,44.22112],[7.24533,44.18544],[7.26053,44.16682],[7.27537,44.15947],[7.33878,44.1574],[7.36278,44.13834],[7.37776,44.13416],[7.56283,44.15792],[7.5642,44.15836],[7.56478,44.15817],[7.60548,44.1634],[7.6162,44.16827],[7.63989,44.18928],[7.68608,44.1861],[7.69422,44.17795],[7.68937,44.13869],[7.69445,44.12276],[7.72786,44.08615],[7.72403,44.05704],[7.68603,44.02371],[7.68077,44.0164],[7.66016,43.9672],[7.59624,43.94466],[7.58419,43.93287],[7.56858,43.89159],[7.5271,43.87434],[7.51649,43.86397],[7.51594,43.84915],[7.53622,43.79234],[9.8,43.1],[9.63227,41.43244],[9.36968,41.35052],[9.27311,41.29196],[8.94186,41.27688],[5.8,41.64],[3.17358,42.41768],[3.16081,42.42757],[3.0944,42.41457],[3.03402,42.45331],[3.02214,42.45645],[2.87822,42.4487],[2.87019,42.44653],[2.78424,42.40256],[2.7413,42.41128],[2.72928,42.40998],[2.69331,42.39417],[2.68378,42.3854],[2.68162,42.37263],[2.68585,42.34679],[2.66719,42.33008],[2.58106,42.34418],[2.56777,42.34173],[2.5338,42.32197],[2.47795,42.32986],[2.41933,42.37658],[2.41222,42.38021],[2.26719,42.42055],[2.25973,42.42117],[2.20694,42.41558],[2.20653,42.41526],[2.20526,42.41541],[2.16028,42.41065],[2.14881,42.40545],[2.09393,42.35474],[2.00861,42.33818],[1.965,42.36473],[1.93076,42.42442],[1.92089,42.43302],[1.88467,42.44761],[1.88459,42.44762],[1.88444,42.4477],[1.82774,42.47056],[1.72567,42.48452],[1.71561,42.50125],[1.7272,42.56103],[1.72479,42.57499],[1.71011,42.59992],[1.69377,42.60975],[1.60283,42.61382],[1.56069,42.6392],[1.54636,42.64166],[1.50444,42.6331],[1.4921,42.62502],[1.47238,42.59703],[1.43792,42.59264],[1.41936,42.60643],[1.38032,42.67415],[1.37335,42.68127],[1.33313,42.70563],[1.32364,42.7085],[1.23221,42.71248],[1.16554,42.69928],[1.08546,42.76635],[1.07564,42.77079],[0.95937,42.78852],[0.95073,42.78794],[0.92265,42.7797],[0.84606,42.8157],[0.71511,42.8464],[0.70017,42.84402],[0.69117,42.83186],[0.67409,42.76479],[0.67474,42.75286],[0.69192,42.70684],[0.669,42.67901],[0.43024,42.67863],[0.3715,42.70308],[0.35954,42.70415],[0.34912,42.69817],[0.32567,42.67274],[0.29571,42.66388],[0.24594,42.70175],[0.23972,42.70494],[0.18967,42.72039],[0.17919,42.72075],[-0.01993,42.67389],[-0.06726,42.6848],[-0.16949,42.77157],[-0.29987,42.82697],[-0.31683,42.82635],[-0.39208,42.78766],[-0.44354,42.78453],[-0.48842,42.80255],[-0.50868,42.79935],[-0.54499,42.76906],[-0.56721,42.76937],[-0.67446,42.86392],[-0.68094,42.86775],[-0.73372,42.88666],[-0.7476,42.93879],[-0.75711,42.95107],[-0.77253,42.95284],[-0.82114,42.93865],[-0.94508,42.94192],[-1.02313,42.98206],[-1.10852,43.00409],[-1.1156,43.00461],[-1.14775,43.00124],[-1.15845,43.01452],[-1.16736,43.02083],[-1.21622,43.0381],[-1.22612,43.03898],[-1.26236,43.03303],[-1.30643,43.05531],[-1.31992,43.05696],[-1.33135,43.0496],[-1.3542,43.0197],[-1.43868,43.03371],[-1.4775,43.06889],[-1.48311,43.08561],[-1.47641,43.10248],[-1.43479,43.13087],[-1.42732,43.1404],[-1.39411,43.22935],[-1.39531,43.24596],[-1.40868,43.25591],[-1.52629,43.28099],[-1.54626,43.2737],[-1.57149,43.2412],[-1.61053,43.24223],[-1.65,43.29323],[-1.66953,43.30065],[-1.73359,43.28856],[-1.75606,43.31966],[-1.76297,43.32565],[-1.79156,43.34067],[-1.80099,43.37017],[-1.78509,43.39037],[-1.7835,43.39686],[-2.7,43.9]]],terms_url:"https://wiki.openstreetmap.org/wiki/FR:Servers/tile.openstreetmap.fr#Route500.E2.84.A2.C2.A9.C2.AE",terms_text:"Tiles © cquest@Openstreetmap France, data © IGN, LO/OL",description:"Routes du réseau classé (autoroutes, nationales, départementales)",overlay:true},{id:"Ruda_Slaska-aerial_image",name:"Ruda Śląska: Orthophotomap (aerial image)",type:"wms",template:"https://rudaslaska.geoportal2.pl/map/wmsorto/wms.php?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=ortofotomapa&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",zoomExtent:[0,23],polygon:[[[18.84294,50.32508],[18.84008,50.33091],[18.85132,50.33437],[18.86262,50.3305],[18.88693,50.333],[18.89493,50.3319],[18.90045,50.32562],[18.89713,50.31146],[18.89312,50.31149],[18.89114,50.30778],[18.8972,50.2999],[18.89073,50.29586],[18.90211,50.29204],[18.90706,50.28637],[18.90853,50.27823],[18.93583,50.27379],[18.94106,50.25859],[18.93848,50.25317],[18.95086,50.24267],[18.96531,50.24084],[18.94611,50.22907],[18.89932,50.22516],[18.90251,50.21749],[18.89075,50.21557],[18.89292,50.20913],[18.86474,50.20512],[18.85673,50.22078],[18.85258,50.22331],[18.84619,50.21761],[18.83341,50.21715],[18.83533,50.22307],[18.83051,50.23099],[18.82411,50.23055],[18.81641,50.23709],[18.81619,50.24125],[18.80635,50.24596],[18.80344,50.24293],[18.78831,50.24456],[18.79552,50.2768],[18.81681,50.27732],[18.81919,50.28794],[18.83893,50.29795],[18.83849,50.3004],[18.82699,50.30342],[18.82691,50.32073],[18.83007,50.32371],[18.84294,50.32508]]],terms_text:"Urząd Miasta Ruda Śląska"},{id:"Rzeszow-buildings",name:"Rzeszów: Buildings",type:"wms",template:"http://wms.erzeszow.pl/?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=komunikacja,budynki,adresy&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",zoomExtent:[0,19],polygon:[[[22.09538,50.08157],[22.0947,50.05584],[22.08892,50.05589],[22.08874,50.03671],[22.09505,50.03682],[22.09435,49.98723],[22.0609,49.98754],[22.0605,49.96525],[22.04757,49.96509],[22.04724,49.95792],[22.03139,49.95845],[22.0312,49.9574],[22.0014,49.95833],[22.00019,49.9375],[22.0014,49.93746],[22.00029,49.92047],[21.96799,49.92088],[21.969,49.93683],[21.95393,49.93706],[21.95441,49.94373],[21.94192,49.94378],[21.94253,49.96646],[21.93676,49.9665],[21.93776,49.97828],[21.92898,49.97858],[21.92951,49.98858],[21.91606,49.9888],[21.9165,50.01192],[21.90572,50.01195],[21.90653,50.04136],[21.87425,50.04183],[21.87546,50.06072],[21.90465,50.06083],[21.90672,50.0835],[22.09538,50.08157]]],terms_text:"Urząd Miasta Rzeszowa"},{id:"Rzeszow-aerial_image",name:"Rzeszów: Orthophotomap (aerial image)",type:"wms",template:"http://wms.erzeszow.pl/?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=rastry&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",zoomExtent:[0,23],polygon:[[[22.09538,50.08157],[22.0947,50.05584],[22.08892,50.05589],[22.08874,50.03671],[22.09505,50.03682],[22.09435,49.98723],[22.0609,49.98754],[22.0605,49.96525],[22.04757,49.96509],[22.04724,49.95792],[22.03139,49.95845],[22.0312,49.9574],[22.0014,49.95833],[22.00019,49.9375],[22.0014,49.93746],[22.00029,49.92047],[21.96799,49.92088],[21.969,49.93683],[21.95393,49.93706],[21.95441,49.94373],[21.94192,49.94378],[21.94253,49.96646],[21.93676,49.9665],[21.93776,49.97828],[21.92898,49.97858],[21.92951,49.98858],[21.91606,49.9888],[21.9165,50.01192],[21.90572,50.01195],[21.90653,50.04136],[21.87425,50.04183],[21.87546,50.06072],[21.90465,50.06083],[21.90672,50.0835],[22.09538,50.08157]]],terms_text:"Urząd Miasta Rzeszowa"},{id:"SanJuanMetroAreaUSACEOrthophotos",name:"San Juan Metro Area: 2013 USACE Orthophotos",type:"tms",template:"http://imagery-pr-usace-2013.s3-website-us-east-1.amazonaws.com/tiles/{zoom}/{x}/{y}.jpg",endDate:"2013-03-15T00:00:00.000Z",startDate:"2013-03-13T00:00:00.000Z",zoomExtent:[0,20],polygon:[[[-66.15007,18.35002],[-66.03337,18.35002],[-66.03328,18.45634],[-66.05464,18.45636],[-66.05463,18.46542],[-66.08303,18.46544],[-66.08302,18.47451],[-66.13034,18.47455],[-66.13034,18.4796],[-66.13983,18.47961],[-66.13984,18.46557],[-66.14995,18.46558],[-66.15007,18.35002]]]},{id:"santana_do_ipanema",name:"Santana do Ipanema AL",type:"wms",template:"http://geoserver.dados.al.gov.br:8080/geoserver/Alagoas/ows?LAYERS=Santana%20do%20Ipanema&SERVICE=WMS&FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.0&SERVICE=WMS&REQUEST=GetMap&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[-37.20224,-9.41356],[-37.20188,-9.37768],[-37.20208,-9.37455],[-37.20192,-9.36733],[-37.20169,-9.36045],[-37.20172,-9.35501],[-37.20195,-9.35101],[-37.20191,-9.34773],[-37.20175,-9.33835],[-37.2017,-9.33505],[-37.20171,-9.33301],[-37.20142,-9.32833],[-37.20121,-9.32469],[-37.20117,-9.32351],[-37.21425,-9.32346],[-37.21537,-9.3234],[-37.22078,-9.32328],[-37.23727,-9.32313],[-37.25181,-9.32293],[-37.2656,-9.32276],[-37.2803,-9.32259],[-37.29191,-9.32245],[-37.29205,-9.33522],[-37.29304,-9.4122],[-37.28357,-9.41235],[-37.27789,-9.4125],[-37.2716,-9.41249],[-37.26506,-9.41262],[-37.26165,-9.41274],[-37.25499,-9.41276],[-37.24991,-9.41296],[-37.24616,-9.41297],[-37.24108,-9.41303],[-37.23461,-9.41321],[-37.2284,-9.41325],[-37.22165,-9.41335],[-37.21686,-9.41346],[-37.21292,-9.41343],[-37.20224,-9.41356]]],terms_url:"http://www.seplag.al.gov.br",terms_text:"Secretaria de Estado do Planejamento, Gestão e Patrimônio"},{id:"Sao_miguel_dos_campos",name:"São Miguel dos Campos AL",type:"wms",template:"http://geoserver.dados.al.gov.br:8080/geoserver/Alagoas/ows?LAYERS=Sao_miguel_dos_campos&SERVICE=WMS&FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.0&SERVICE=WMS&REQUEST=GetMap&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[-36.1415,-9.83171],[-36.05047,-9.83246],[-36.04959,-9.74246],[-36.14059,-9.74166],[-36.1415,-9.83171]]],terms_url:"http://www.seplag.al.gov.br",terms_text:"Secretaria de Estado do Planejamento, Gestão e Patrimônio"},{id:"GEOSN-DOP-2005",name:"Saxony historical aerial imagery 2005",type:"wms",template:"https://geodienste.sachsen.de/wms_geosn_dop-2005/guest?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=dop_2005&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",endDate:"2005-01-01T00:00:00.000Z",startDate:"2005-01-01T00:00:00.000Z",polygon:[[[13.86571,50.71509],[13.86683,50.73012],[13.90116,50.73012],[13.90184,50.74446],[13.91043,50.74446],[13.91043,50.77378],[13.95266,50.77486],[13.95197,50.78897],[13.99969,50.78941],[13.999,50.79831],[14.16715,50.79762],[14.1747,50.8462],[14.32851,50.84534],[14.33503,50.87643],[14.41674,50.876],[14.41674,50.95025],[14.33263,50.95133],[14.3364,50.99802],[14.58188,50.99608],[14.57742,50.94895],[14.54068,50.95003],[14.54446,50.89831],[14.60557,50.89116],[14.60454,50.83439],[14.6605,50.83352],[14.65673,50.79578],[14.83422,50.79469],[14.84727,50.89138],[14.9204,50.88943],[14.9331,50.99478],[14.99902,50.99673],[15.00142,51.09709],[15.04159,51.09709],[15.04228,51.35317],[14.99696,51.35317],[15.00314,51.49959],[14.91593,51.50301],[14.91662,51.55043],[14.74908,51.55129],[14.75114,51.60121],[14.41056,51.59993],[14.41125,51.55129],[14.07891,51.54915],[14.07479,51.49831],[13.99446,51.50002],[13.99446,51.39817],[13.53921,51.39989],[13.53852,51.42516],[13.50041,51.42505],[13.50179,51.44945],[13.41596,51.45094],[13.41699,51.50013],[13.3315,51.50055],[13.33047,51.44966],[13.24945,51.44987],[13.25116,51.60036],[13.16773,51.60057],[13.16739,51.65023],[13.08328,51.65066],[13.08362,51.69941],[12.66202,51.70027],[12.66065,51.64832],[12.4162,51.65045],[12.41345,51.60057],[12.16146,51.60015],[12.16146,51.50109],[12.07631,51.50023],[12.07974,51.39625],[12.16008,51.39753],[12.16214,51.34995],[12.07906,51.35253],[12.07906,51.24562],[12.16214,51.24691],[12.16352,51.0958],[12.24317,51.09709],[12.2454,51.04813],[12.49688,51.04883],[12.49894,50.89966],[12.33346,50.89923],[12.32797,50.84984],[12.20712,50.8494],[12.20506,50.69829],[12.24694,50.69744],[12.24694,50.65023],[11.91529,50.64849],[11.91598,50.59839],[11.83221,50.59817],[11.83255,50.39922],[11.91495,50.39922],[11.91461,50.34886],[11.99486,50.34659],[11.99838,50.29897],[12.16506,50.29912],[12.16549,50.24904],[12.23673,50.24871],[12.24823,50.24212],[12.24772,50.14904],[12.33149,50.14893],[12.33852,50.19335],[12.33286,50.23927],[12.3538,50.23619],[12.35998,50.24926],[12.41457,50.24948],[12.41594,50.29906],[12.49851,50.29874],[12.49834,50.34948],[12.58142,50.34915],[12.58125,50.39896],[12.69489,50.39962],[12.70622,50.39426],[12.71257,50.39875],[13.0813,50.39907],[13.0813,50.4992],[13.24816,50.49898],[13.24884,50.54809],[13.33124,50.54918],[13.33056,50.59911],[13.50908,50.59759],[13.50462,50.62656],[13.5393,50.62635],[13.53827,50.65481],[13.54633,50.65547],[13.54599,50.66983],[13.5544,50.67027],[13.55457,50.68908],[13.54736,50.68887],[13.54582,50.69969],[13.63886,50.69947],[13.63955,50.71425],[13.86571,50.71509]]],terms_url:"https://geoportal.sachsen.de/cps/metadaten_portal.html?id=3f38c3f3-03db-4a2a-b6da-2704b9a1d5f0",terms_text:"Staatsbetrieb Geobasisinformation und Vermessung Sachsen",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/de/SaxonyWebAtlasSN.png"},{id:"GEOSN-DOP-2012_2014",name:"Saxony historical aerial imagery 2012-2014",type:"wms",template:"https://geodienste.sachsen.de/wms_geosn_dop_2012_2014/guest?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=dop_2012_2014_rgb&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",endDate:"2012-01-01T00:00:00.000Z",startDate:"2012-01-01T00:00:00.000Z",polygon:[[[13.86571,50.71509],[13.86683,50.73012],[13.90116,50.73012],[13.90184,50.74446],[13.91043,50.74446],[13.91043,50.77378],[13.95266,50.77486],[13.95197,50.78897],[13.99969,50.78941],[13.999,50.79831],[14.16715,50.79762],[14.1747,50.8462],[14.32851,50.84534],[14.33503,50.87643],[14.41674,50.876],[14.41674,50.95025],[14.33263,50.95133],[14.3364,50.99802],[14.58188,50.99608],[14.57742,50.94895],[14.54068,50.95003],[14.54446,50.89831],[14.60557,50.89116],[14.60454,50.83439],[14.6605,50.83352],[14.65673,50.79578],[14.83422,50.79469],[14.84727,50.89138],[14.9204,50.88943],[14.9331,50.99478],[14.99902,50.99673],[15.00142,51.09709],[15.04159,51.09709],[15.04228,51.35317],[14.99696,51.35317],[15.00314,51.49959],[14.91593,51.50301],[14.91662,51.55043],[14.74908,51.55129],[14.75114,51.60121],[14.41056,51.59993],[14.41125,51.55129],[14.07891,51.54915],[14.07479,51.49831],[13.99446,51.50002],[13.99446,51.39817],[13.53921,51.39989],[13.53852,51.42516],[13.50041,51.42505],[13.50179,51.44945],[13.41596,51.45094],[13.41699,51.50013],[13.3315,51.50055],[13.33047,51.44966],[13.24945,51.44987],[13.25116,51.60036],[13.16773,51.60057],[13.16739,51.65023],[13.08328,51.65066],[13.08362,51.69941],[12.66202,51.70027],[12.66065,51.64832],[12.4162,51.65045],[12.41345,51.60057],[12.16146,51.60015],[12.16146,51.50109],[12.07631,51.50023],[12.07974,51.39625],[12.16008,51.39753],[12.16214,51.34995],[12.07906,51.35253],[12.07906,51.24562],[12.16214,51.24691],[12.16352,51.0958],[12.24317,51.09709],[12.2454,51.04813],[12.49688,51.04883],[12.49894,50.89966],[12.33346,50.89923],[12.32797,50.84984],[12.20712,50.8494],[12.20506,50.69829],[12.24694,50.69744],[12.24694,50.65023],[11.91529,50.64849],[11.91598,50.59839],[11.83221,50.59817],[11.83255,50.39922],[11.91495,50.39922],[11.91461,50.34886],[11.99486,50.34659],[11.99838,50.29897],[12.16506,50.29912],[12.16549,50.24904],[12.23673,50.24871],[12.24823,50.24212],[12.24772,50.14904],[12.33149,50.14893],[12.33852,50.19335],[12.33286,50.23927],[12.3538,50.23619],[12.35998,50.24926],[12.41457,50.24948],[12.41594,50.29906],[12.49851,50.29874],[12.49834,50.34948],[12.58142,50.34915],[12.58125,50.39896],[12.69489,50.39962],[12.70622,50.39426],[12.71257,50.39875],[13.0813,50.39907],[13.0813,50.4992],[13.24816,50.49898],[13.24884,50.54809],[13.33124,50.54918],[13.33056,50.59911],[13.50908,50.59759],[13.50462,50.62656],[13.5393,50.62635],[13.53827,50.65481],[13.54633,50.65547],[13.54599,50.66983],[13.5544,50.67027],[13.55457,50.68908],[13.54736,50.68887],[13.54582,50.69969],[13.63886,50.69947],[13.63955,50.71425],[13.86571,50.71509]]],terms_url:"https://geoportal.sachsen.de/cps/metadaten_portal.html?id=8c276e3c-88af-462f-8128-6900bc7dd4f8",terms_text:"Staatsbetrieb Geobasisinformation und Vermessung Sachsen",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/de/SaxonyWebAtlasSN.png"},{id:"GEOSN-DOP-RGB",name:"Saxony latest aerial imagery",type:"wms",template:"https://geodienste.sachsen.de/wms_geosn_dop-rgb/guest?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=sn_dop_020&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[13.54901,50.69792],[13.84251,50.71126],[13.93239,50.74504],[14.04614,50.79389],[14.25257,50.85953],[14.40002,50.88966],[14.42671,50.9357],[14.35649,50.97197],[14.32559,50.99319],[14.27504,50.99054],[14.31577,51.04266],[14.41547,51.01263],[14.51939,51.0038],[14.5882,50.9817],[14.54467,50.91977],[14.57977,50.90649],[14.64718,50.92243],[14.64437,50.90915],[14.60505,50.85687],[14.7202,50.81785],[14.81008,50.81341],[14.85642,50.89055],[14.91259,50.94721],[14.99685,51.08679],[15.05303,51.24793],[15.05583,51.29274],[14.99264,51.34452],[14.98843,51.398],[14.97719,51.45754],[14.90979,51.49603],[14.73986,51.5371],[14.73986,51.59122],[14.70054,51.60605],[14.67948,51.5982],[14.68369,51.57813],[14.67386,51.55806],[14.61769,51.55718],[14.58399,51.59035],[14.51939,51.56941],[14.43513,51.5598],[14.327,51.52574],[14.13461,51.55544],[14.0672,51.49952],[14.02788,51.47854],[14.04333,51.45229],[13.99558,51.39274],[13.95767,51.40588],[13.88886,51.38836],[13.72455,51.37434],[13.55463,51.39274],[13.40437,51.45929],[13.35241,51.43916],[13.3159,51.44354],[13.28641,51.41815],[13.22602,51.40063],[13.21339,51.46104],[13.219,51.52661],[13.17406,51.5982],[13.00274,51.67751],[12.90584,51.65312],[12.90303,51.66619],[12.85388,51.69318],[12.76401,51.65922],[12.68817,51.67054],[12.64324,51.62959],[12.57723,51.63046],[12.42557,51.61041],[12.23037,51.57028],[12.17701,51.53011],[12.13909,51.46017],[12.16718,51.41727],[12.1742,51.33487],[12.13207,51.3182],[12.18684,51.21364],[12.15875,51.18812],[12.22054,51.09296],[12.49017,51.05414],[12.52106,50.99319],[12.60532,50.97286],[12.62639,50.91889],[12.50281,50.91092],[12.23739,50.81874],[12.21352,50.72993],[12.28654,50.665],[12.21773,50.6463],[12.13347,50.6276],[12.05343,50.56342],[12.01972,50.64719],[11.85963,50.54825],[11.87649,50.50808],[11.92704,50.5054],[11.93687,50.48664],[11.87087,50.44194],[11.93406,50.39989],[11.96917,50.33987],[12.12083,50.29773],[12.17279,50.3067],[12.18543,50.26094],[12.21212,50.25375],[12.25705,50.21603],[12.28233,50.15668],[12.35535,50.15848],[12.35535,50.22142],[12.41433,50.28158],[12.51123,50.34705],[12.53791,50.38735],[12.67835,50.40257],[12.71205,50.38646],[12.7289,50.39631],[12.75699,50.42584],[12.78648,50.43389],[12.81737,50.41779],[12.84686,50.43657],[12.94797,50.38735],[13.00976,50.41421],[13.04627,50.44999],[13.0561,50.48753],[13.21479,50.49289],[13.27517,50.56609],[13.34118,50.56877],[13.39173,50.61334],[13.47739,50.58571],[13.54761,50.63473],[13.56867,50.67212],[13.54901,50.69792]]],terms_url:"https://geoportal.sachsen.de/cps/metadaten_portal.html?id=cd01c334-7e32-482f-bd43-af286707178a",terms_text:"Staatsbetrieb Geobasisinformation und Vermessung Sachsen",best:true,icon:"https://osmlab.github.io/editor-layer-index/sources/europe/de/SaxonyWebAtlasSN.png"},{id:"GEOSN-DOP-CIR",name:"Saxony latest aerial imagery infrared",type:"wms",template:"https://geodienste.sachsen.de/wms_geosn_dop-cir/guest?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=sn_dop_020_cir&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[13.54901,50.69792],[13.84251,50.71126],[13.93239,50.74504],[14.04614,50.79389],[14.25257,50.85953],[14.40002,50.88966],[14.42671,50.9357],[14.35649,50.97197],[14.32559,50.99319],[14.27504,50.99054],[14.31577,51.04266],[14.41547,51.01263],[14.51939,51.0038],[14.5882,50.9817],[14.54467,50.91977],[14.57977,50.90649],[14.64718,50.92243],[14.64437,50.90915],[14.60505,50.85687],[14.7202,50.81785],[14.81008,50.81341],[14.85642,50.89055],[14.91259,50.94721],[14.99685,51.08679],[15.05303,51.24793],[15.05583,51.29274],[14.99264,51.34452],[14.98843,51.398],[14.97719,51.45754],[14.90979,51.49603],[14.73986,51.5371],[14.73986,51.59122],[14.70054,51.60605],[14.67948,51.5982],[14.68369,51.57813],[14.67386,51.55806],[14.61769,51.55718],[14.58399,51.59035],[14.51939,51.56941],[14.43513,51.5598],[14.327,51.52574],[14.13461,51.55544],[14.0672,51.49952],[14.02788,51.47854],[14.04333,51.45229],[13.99558,51.39274],[13.95767,51.40588],[13.88886,51.38836],[13.72455,51.37434],[13.55463,51.39274],[13.40437,51.45929],[13.35241,51.43916],[13.3159,51.44354],[13.28641,51.41815],[13.22602,51.40063],[13.21339,51.46104],[13.219,51.52661],[13.17406,51.5982],[13.00274,51.67751],[12.90584,51.65312],[12.90303,51.66619],[12.85388,51.69318],[12.76401,51.65922],[12.68817,51.67054],[12.64324,51.62959],[12.57723,51.63046],[12.42557,51.61041],[12.23037,51.57028],[12.17701,51.53011],[12.13909,51.46017],[12.16718,51.41727],[12.1742,51.33487],[12.13207,51.3182],[12.18684,51.21364],[12.15875,51.18812],[12.22054,51.09296],[12.49017,51.05414],[12.52106,50.99319],[12.60532,50.97286],[12.62639,50.91889],[12.50281,50.91092],[12.23739,50.81874],[12.21352,50.72993],[12.28654,50.665],[12.21773,50.6463],[12.13347,50.6276],[12.05343,50.56342],[12.01972,50.64719],[11.85963,50.54825],[11.87649,50.50808],[11.92704,50.5054],[11.93687,50.48664],[11.87087,50.44194],[11.93406,50.39989],[11.96917,50.33987],[12.12083,50.29773],[12.17279,50.3067],[12.18543,50.26094],[12.21212,50.25375],[12.25705,50.21603],[12.28233,50.15668],[12.35535,50.15848],[12.35535,50.22142],[12.41433,50.28158],[12.51123,50.34705],[12.53791,50.38735],[12.67835,50.40257],[12.71205,50.38646],[12.7289,50.39631],[12.75699,50.42584],[12.78648,50.43389],[12.81737,50.41779],[12.84686,50.43657],[12.94797,50.38735],[13.00976,50.41421],[13.04627,50.44999],[13.0561,50.48753],[13.21479,50.49289],[13.27517,50.56609],[13.34118,50.56877],[13.39173,50.61334],[13.47739,50.58571],[13.54761,50.63473],[13.56867,50.67212],[13.54901,50.69792]]],terms_url:"https://geoportal.sachsen.de/cps/metadaten_portal.html?id=ba87bbed-4cb5-4539-a9f5-f863de752f52",terms_text:"Staatsbetrieb Geobasisinformation und Vermessung Sachsen",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/de/SaxonyWebAtlasSN.png"},{id:"GEOSN-DTK",name:"Saxony topographic map",type:"wms",template:"https://geodienste.sachsen.de/wms_geosn_dtk-pg-color/guest?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=sn_dtk_pg_color&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[13.54901,50.69792],[13.84251,50.71126],[13.93239,50.74504],[14.04614,50.79389],[14.25257,50.85953],[14.40002,50.88966],[14.42671,50.9357],[14.35649,50.97197],[14.32559,50.99319],[14.27504,50.99054],[14.31577,51.04266],[14.41547,51.01263],[14.51939,51.0038],[14.5882,50.9817],[14.54467,50.91977],[14.57977,50.90649],[14.64718,50.92243],[14.64437,50.90915],[14.60505,50.85687],[14.7202,50.81785],[14.81008,50.81341],[14.85642,50.89055],[14.91259,50.94721],[14.99685,51.08679],[15.05303,51.24793],[15.05583,51.29274],[14.99264,51.34452],[14.98843,51.398],[14.97719,51.45754],[14.90979,51.49603],[14.73986,51.5371],[14.73986,51.59122],[14.70054,51.60605],[14.67948,51.5982],[14.68369,51.57813],[14.67386,51.55806],[14.61769,51.55718],[14.58399,51.59035],[14.51939,51.56941],[14.43513,51.5598],[14.327,51.52574],[14.13461,51.55544],[14.0672,51.49952],[14.02788,51.47854],[14.04333,51.45229],[13.99558,51.39274],[13.95767,51.40588],[13.88886,51.38836],[13.72455,51.37434],[13.55463,51.39274],[13.40437,51.45929],[13.35241,51.43916],[13.3159,51.44354],[13.28641,51.41815],[13.22602,51.40063],[13.21339,51.46104],[13.219,51.52661],[13.17406,51.5982],[13.00274,51.67751],[12.90584,51.65312],[12.90303,51.66619],[12.85388,51.69318],[12.76401,51.65922],[12.68817,51.67054],[12.64324,51.62959],[12.57723,51.63046],[12.42557,51.61041],[12.23037,51.57028],[12.17701,51.53011],[12.13909,51.46017],[12.16718,51.41727],[12.1742,51.33487],[12.13207,51.3182],[12.18684,51.21364],[12.15875,51.18812],[12.22054,51.09296],[12.49017,51.05414],[12.52106,50.99319],[12.60532,50.97286],[12.62639,50.91889],[12.50281,50.91092],[12.23739,50.81874],[12.21352,50.72993],[12.28654,50.665],[12.21773,50.6463],[12.13347,50.6276],[12.05343,50.56342],[12.01972,50.64719],[11.85963,50.54825],[11.87649,50.50808],[11.92704,50.5054],[11.93687,50.48664],[11.87087,50.44194],[11.93406,50.39989],[11.96917,50.33987],[12.12083,50.29773],[12.17279,50.3067],[12.18543,50.26094],[12.21212,50.25375],[12.25705,50.21603],[12.28233,50.15668],[12.35535,50.15848],[12.35535,50.22142],[12.41433,50.28158],[12.51123,50.34705],[12.53791,50.38735],[12.67835,50.40257],[12.71205,50.38646],[12.7289,50.39631],[12.75699,50.42584],[12.78648,50.43389],[12.81737,50.41779],[12.84686,50.43657],[12.94797,50.38735],[13.00976,50.41421],[13.04627,50.44999],[13.0561,50.48753],[13.21479,50.49289],[13.27517,50.56609],[13.34118,50.56877],[13.39173,50.61334],[13.47739,50.58571],[13.54761,50.63473],[13.56867,50.67212],[13.54901,50.69792]]],terms_url:"https://geoportal.sachsen.de/cps/metadaten_portal.html?id=d6d24c6d-94ea-447d-8a0c-40afdedeb5c6",terms_text:"Staatsbetrieb Geobasisinformation und Vermessung Sachsen",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/de/SaxonyWebAtlasSN.png"},{id:"GEOSN-WebAtlas",name:"Saxony WebAtlasSN",type:"wms",template:"https://geodienste.sachsen.de/wms_geosn_webatlas-sn/guest?FORMAT=image/png&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=Vegetation,Siedlung,Gewaesser,Verkehr,Administrative_Einheiten,Beschriftung&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[13.54901,50.69792],[13.84251,50.71126],[13.93239,50.74504],[14.04614,50.79389],[14.25257,50.85953],[14.40002,50.88966],[14.42671,50.9357],[14.35649,50.97197],[14.32559,50.99319],[14.27504,50.99054],[14.31577,51.04266],[14.41547,51.01263],[14.51939,51.0038],[14.5882,50.9817],[14.54467,50.91977],[14.57977,50.90649],[14.64718,50.92243],[14.64437,50.90915],[14.60505,50.85687],[14.7202,50.81785],[14.81008,50.81341],[14.85642,50.89055],[14.91259,50.94721],[14.99685,51.08679],[15.05303,51.24793],[15.05583,51.29274],[14.99264,51.34452],[14.98843,51.398],[14.97719,51.45754],[14.90979,51.49603],[14.73986,51.5371],[14.73986,51.59122],[14.70054,51.60605],[14.67948,51.5982],[14.68369,51.57813],[14.67386,51.55806],[14.61769,51.55718],[14.58399,51.59035],[14.51939,51.56941],[14.43513,51.5598],[14.327,51.52574],[14.13461,51.55544],[14.0672,51.49952],[14.02788,51.47854],[14.04333,51.45229],[13.99558,51.39274],[13.95767,51.40588],[13.88886,51.38836],[13.72455,51.37434],[13.55463,51.39274],[13.40437,51.45929],[13.35241,51.43916],[13.3159,51.44354],[13.28641,51.41815],[13.22602,51.40063],[13.21339,51.46104],[13.219,51.52661],[13.17406,51.5982],[13.00274,51.67751],[12.90584,51.65312],[12.90303,51.66619],[12.85388,51.69318],[12.76401,51.65922],[12.68817,51.67054],[12.64324,51.62959],[12.57723,51.63046],[12.42557,51.61041],[12.23037,51.57028],[12.17701,51.53011],[12.13909,51.46017],[12.16718,51.41727],[12.1742,51.33487],[12.13207,51.3182],[12.18684,51.21364],[12.15875,51.18812],[12.22054,51.09296],[12.49017,51.05414],[12.52106,50.99319],[12.60532,50.97286],[12.62639,50.91889],[12.50281,50.91092],[12.23739,50.81874],[12.21352,50.72993],[12.28654,50.665],[12.21773,50.6463],[12.13347,50.6276],[12.05343,50.56342],[12.01972,50.64719],[11.85963,50.54825],[11.87649,50.50808],[11.92704,50.5054],[11.93687,50.48664],[11.87087,50.44194],[11.93406,50.39989],[11.96917,50.33987],[12.12083,50.29773],[12.17279,50.3067],[12.18543,50.26094],[12.21212,50.25375],[12.25705,50.21603],[12.28233,50.15668],[12.35535,50.15848],[12.35535,50.22142],[12.41433,50.28158],[12.51123,50.34705],[12.53791,50.38735],[12.67835,50.40257],[12.71205,50.38646],[12.7289,50.39631],[12.75699,50.42584],[12.78648,50.43389],[12.81737,50.41779],[12.84686,50.43657],[12.94797,50.38735],[13.00976,50.41421],[13.04627,50.44999],[13.0561,50.48753],[13.21479,50.49289],[13.27517,50.56609],[13.34118,50.56877],[13.39173,50.61334],[13.47739,50.58571],[13.54761,50.63473],[13.56867,50.67212],[13.54901,50.69792]]],terms_url:"https://geoportal.sachsen.de/cps/metadaten_portal.html?id=475a9197-620f-4dcb-b8aa-7f71b626443f",terms_text:"Staatsbetrieb Geobasisinformation und Vermessung Sachsen",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/de/SaxonyWebAtlasSN.png"},{id:"Geodatastyrelsen_Denmark",name:"SDFE aerial imagery",type:"tms",template:"https://osmtools.septima.dk/mapproxy/tiles/1.0.0/kortforsyningen_ortoforaar/EPSG3857/{zoom}/{x}/{y}.jpeg",zoomExtent:[0,21],polygon:[[[8.37439,54.95517],[8.36838,55.40421],[8.2104,55.40398],[8.20873,55.49373],[8.05027,55.49247],[8.01851,56.75014],[8.18192,56.75099],[8.17633,57.02089],[8.34133,57.02199],[8.33925,57.11196],[8.50544,57.11232],[8.50339,57.20205],[9.33163,57.20276],[9.33191,57.29248],[9.49789,57.29196],[9.49886,57.38206],[9.66497,57.38116],[9.66873,57.56056],[9.8352,57.55963],[9.83749,57.64933],[10.17257,57.64628],[10.17542,57.73678],[10.51183,57.73303],[10.51521,57.82289],[10.68349,57.82077],[10.67516,57.6412],[10.5077,57.64331],[10.504,57.55351],[10.67104,57.55141],[10.65078,57.10245],[10.48577,57.10451],[10.47862,56.92491],[10.3144,56.92676],[10.31123,56.83693],[10.47503,56.83509],[10.4649,56.56567],[10.95242,56.55898],[10.94792,56.46922],[11.10993,56.46647],[11.10526,56.37683],[10.94299,56.37953],[10.93412,56.19948],[10.77197,56.20202],[10.76948,56.11201],[10.60797,56.11503],[10.44667,56.11672],[10.28659,56.11868],[10.28315,56.02819],[10.44393,56.02704],[10.44177,55.75792],[10.4335,55.66935],[10.74381,55.66469],[10.74381,55.57123],[10.8969,55.57123],[10.90518,55.39539],[11.06137,55.38128],[11.0593,55.11241],[11.04586,55.03186],[11.20308,55.02475],[11.20308,55.11714],[11.0593,55.11241],[11.06137,55.38128],[11.07896,55.57123],[10.8969,55.57123],[10.92587,55.66702],[10.74381,55.66469],[10.75623,55.75792],[10.44177,55.75792],[10.44393,56.02704],[10.44667,56.11672],[10.60797,56.11503],[10.60521,56.02475],[10.92587,56.02012],[10.91971,55.93094],[11.08028,55.92792],[11.08581,56.01783],[11.7265,56.00506],[11.732,56.09521],[12.05403,56.08713],[12.06085,56.17626],[12.70235,56.15944],[12.66111,55.71143],[12.97923,55.7014],[12.96129,55.52173],[12.32687,55.54121],[12.32061,55.45137],[12.47782,55.44707],[12.47024,55.35705],[12.62697,55.35238],[12.62009,55.26326],[12.46273,55.26722],[12.45529,55.17782],[12.2987,55.18223],[12.28973,55.09236],[12.60486,55.08329],[12.5872,54.90363],[12.27666,54.9119],[12.26102,54.73316],[12.10707,54.73782],[12.08586,54.46817],[11.7795,54.47536],[11.78374,54.56548],[11.16585,54.57822],[11.17064,54.66865],[10.86172,54.6734],[10.86512,54.76347],[10.77136,54.76439],[10.77073,54.73728],[10.75514,54.73758],[10.7544,54.71957],[10.73891,54.71976],[10.73844,54.71085],[10.70745,54.7113],[10.70411,54.67567],[10.5511,54.67817],[10.55472,54.76702],[10.2424,54.77059],[10.24598,54.86047],[10.09023,54.86221],[10.08737,54.77239],[9.15558,54.77696],[9.15628,54.86754],[8.5322,54.86638],[8.53143,54.95516],[8.37439,54.95517]],[[11.45777,56.81955],[11.78492,56.81274],[11.77167,56.63328],[11.44596,56.64011],[11.45777,56.81955]],[[11.32747,57.3613],[11.31618,57.1818],[11.15087,57.18473],[11.14566,57.09496],[10.81577,57.10017],[10.82906,57.36953],[11.32747,57.3613]],[[11.58433,56.27779],[11.57829,56.18804],[11.73923,56.18458],[11.74564,56.27432],[11.58433,56.27779]],[[14.68259,55.36394],[14.83952,55.35652],[14.82638,55.26713],[15.13934,55.25174],[15.1532,55.34108],[15.30992,55.33306],[15.29572,55.24374],[15.13934,55.25174],[15.12556,55.16238],[15.28158,55.15442],[15.25356,54.97576],[14.63175,55.00625],[14.68259,55.36394]]],terms_url:"https://download.kortforsyningen.dk/content/vilkaar-og-betingelser",terms_text:"Geodatastyrelsen og Danske Kommuner",best:true,icon:"https://osmlab.github.io/editor-layer-index/sources/europe/dk/SDFESkrmkort.png"},{id:"Geodatastyrelsen_Cadastral_Parcels_INSPIRE_View",name:"SDFE Cadastral Parcels INSPIRE View",type:"wms",template:"https://kortforsyningen.kms.dk/cp_inspire?login=OpenStreetMapDK2015&password=Gall4Peters&FORMAT=image/png&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&Layers=CP.CadastralParcel&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",zoomExtent:[0,20],polygon:[[[8.37439,54.95517],[8.36838,55.40421],[8.2104,55.40398],[8.20873,55.49373],[8.05027,55.49247],[8.01851,56.75014],[8.18192,56.75099],[8.17633,57.02089],[8.34133,57.02199],[8.33925,57.11196],[8.50544,57.11232],[8.50339,57.20205],[9.33163,57.20276],[9.33191,57.29248],[9.49789,57.29196],[9.49886,57.38206],[9.66497,57.38116],[9.66873,57.56056],[9.8352,57.55963],[9.83749,57.64933],[10.17257,57.64628],[10.17542,57.73678],[10.51183,57.73303],[10.51521,57.82289],[10.68349,57.82077],[10.67516,57.6412],[10.5077,57.64331],[10.504,57.55351],[10.67104,57.55141],[10.65078,57.10245],[10.48577,57.10451],[10.47862,56.92491],[10.3144,56.92676],[10.31123,56.83693],[10.47503,56.83509],[10.4649,56.56567],[10.95242,56.55898],[10.94792,56.46922],[11.10993,56.46647],[11.10526,56.37683],[10.94299,56.37953],[10.93412,56.19948],[10.77197,56.20202],[10.76948,56.11201],[10.60797,56.11503],[10.44667,56.11672],[10.28659,56.11868],[10.28315,56.02819],[10.44393,56.02704],[10.44177,55.75792],[10.4335,55.66935],[10.74381,55.66469],[10.74381,55.57123],[10.8969,55.57123],[10.90518,55.39539],[11.06137,55.38128],[11.0593,55.11241],[11.04586,55.03186],[11.20308,55.02475],[11.20308,55.11714],[11.0593,55.11241],[11.06137,55.38128],[11.07896,55.57123],[10.8969,55.57123],[10.92587,55.66702],[10.74381,55.66469],[10.75623,55.75792],[10.44177,55.75792],[10.44393,56.02704],[10.44667,56.11672],[10.60797,56.11503],[10.60521,56.02475],[10.92587,56.02012],[10.91971,55.93094],[11.08028,55.92792],[11.08581,56.01783],[11.7265,56.00506],[11.732,56.09521],[12.05403,56.08713],[12.06085,56.17626],[12.70235,56.15944],[12.66111,55.71143],[12.97923,55.7014],[12.96129,55.52173],[12.32687,55.54121],[12.32061,55.45137],[12.47782,55.44707],[12.47024,55.35705],[12.62697,55.35238],[12.62009,55.26326],[12.46273,55.26722],[12.45529,55.17782],[12.2987,55.18223],[12.28973,55.09236],[12.60486,55.08329],[12.5872,54.90363],[12.27666,54.9119],[12.26102,54.73316],[12.10707,54.73782],[12.08586,54.46817],[11.7795,54.47536],[11.78374,54.56548],[11.16585,54.57822],[11.17064,54.66865],[10.86172,54.6734],[10.86512,54.76347],[10.77136,54.76439],[10.77073,54.73728],[10.75514,54.73758],[10.7544,54.71957],[10.73891,54.71976],[10.73844,54.71085],[10.70745,54.7113],[10.70411,54.67567],[10.5511,54.67817],[10.55472,54.76702],[10.2424,54.77059],[10.24598,54.86047],[10.09023,54.86221],[10.08737,54.77239],[9.15558,54.77696],[9.15628,54.86754],[8.5322,54.86638],[8.53143,54.95516],[8.37439,54.95517]],[[11.45777,56.81955],[11.78492,56.81274],[11.77167,56.63328],[11.44596,56.64011],[11.45777,56.81955]],[[11.32747,57.3613],[11.31618,57.1818],[11.15087,57.18473],[11.14566,57.09496],[10.81577,57.10017],[10.82906,57.36953],[11.32747,57.3613]],[[11.58433,56.27779],[11.57829,56.18804],[11.73923,56.18458],[11.74564,56.27432],[11.58433,56.27779]],[[14.68259,55.36394],[14.83952,55.35652],[14.82638,55.26713],[15.13934,55.25174],[15.1532,55.34108],[15.30992,55.33306],[15.29572,55.24374],[15.13934,55.25174],[15.12556,55.16238],[15.28158,55.15442],[15.25356,54.97576],[14.63175,55.00625],[14.68259,55.36394]]],terms_text:"Geodatastyrelsen og Danske Kommuner",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/dk/SDFESkrmkort.png"},{id:"Geodatastyrelsen_DTK_Kort25",name:"SDFE DTK Kort25",type:"wms",template:"https://kortforsyningen.kms.dk/topo25?FORMAT=image/png&VERSION=1.1.1&login=OpenStreetMapDK2015&password=Gall4Peters&SERVICE=WMS&REQUEST=GetMap&Layers=topo25_klassisk&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",zoomExtent:[0,19],polygon:[[[8.37439,54.95517],[8.36838,55.40421],[8.2104,55.40398],[8.20873,55.49373],[8.05027,55.49247],[8.01851,56.75014],[8.18192,56.75099],[8.17633,57.02089],[8.34133,57.02199],[8.33925,57.11196],[8.50544,57.11232],[8.50339,57.20205],[9.33163,57.20276],[9.33191,57.29248],[9.49789,57.29196],[9.49886,57.38206],[9.66497,57.38116],[9.66873,57.56056],[9.8352,57.55963],[9.83749,57.64933],[10.17257,57.64628],[10.17542,57.73678],[10.51183,57.73303],[10.51521,57.82289],[10.68349,57.82077],[10.67516,57.6412],[10.5077,57.64331],[10.504,57.55351],[10.67104,57.55141],[10.65078,57.10245],[10.48577,57.10451],[10.47862,56.92491],[10.3144,56.92676],[10.31123,56.83693],[10.47503,56.83509],[10.4649,56.56567],[10.95242,56.55898],[10.94792,56.46922],[11.10993,56.46647],[11.10526,56.37683],[10.94299,56.37953],[10.93412,56.19948],[10.77197,56.20202],[10.76948,56.11201],[10.60797,56.11503],[10.44667,56.11672],[10.28659,56.11868],[10.28315,56.02819],[10.44393,56.02704],[10.44177,55.75792],[10.4335,55.66935],[10.74381,55.66469],[10.74381,55.57123],[10.8969,55.57123],[10.90518,55.39539],[11.06137,55.38128],[11.0593,55.11241],[11.04586,55.03186],[11.20308,55.02475],[11.20308,55.11714],[11.0593,55.11241],[11.06137,55.38128],[11.07896,55.57123],[10.8969,55.57123],[10.92587,55.66702],[10.74381,55.66469],[10.75623,55.75792],[10.44177,55.75792],[10.44393,56.02704],[10.44667,56.11672],[10.60797,56.11503],[10.60521,56.02475],[10.92587,56.02012],[10.91971,55.93094],[11.08028,55.92792],[11.08581,56.01783],[11.7265,56.00506],[11.732,56.09521],[12.05403,56.08713],[12.06085,56.17626],[12.70235,56.15944],[12.66111,55.71143],[12.97923,55.7014],[12.96129,55.52173],[12.32687,55.54121],[12.32061,55.45137],[12.47782,55.44707],[12.47024,55.35705],[12.62697,55.35238],[12.62009,55.26326],[12.46273,55.26722],[12.45529,55.17782],[12.2987,55.18223],[12.28973,55.09236],[12.60486,55.08329],[12.5872,54.90363],[12.27666,54.9119],[12.26102,54.73316],[12.10707,54.73782],[12.08586,54.46817],[11.7795,54.47536],[11.78374,54.56548],[11.16585,54.57822],[11.17064,54.66865],[10.86172,54.6734],[10.86512,54.76347],[10.77136,54.76439],[10.77073,54.73728],[10.75514,54.73758],[10.7544,54.71957],[10.73891,54.71976],[10.73844,54.71085],[10.70745,54.7113],[10.70411,54.67567],[10.5511,54.67817],[10.55472,54.76702],[10.2424,54.77059],[10.24598,54.86047],[10.09023,54.86221],[10.08737,54.77239],[9.15558,54.77696],[9.15628,54.86754],[8.5322,54.86638],[8.53143,54.95516],[8.37439,54.95517]],[[11.45777,56.81955],[11.78492,56.81274],[11.77167,56.63328],[11.44596,56.64011],[11.45777,56.81955]],[[11.32747,57.3613],[11.31618,57.1818],[11.15087,57.18473],[11.14566,57.09496],[10.81577,57.10017],[10.82906,57.36953],[11.32747,57.3613]],[[11.58433,56.27779],[11.57829,56.18804],[11.73923,56.18458],[11.74564,56.27432],[11.58433,56.27779]],[[14.68259,55.36394],[14.83952,55.35652],[14.82638,55.26713],[15.13934,55.25174],[15.1532,55.34108],[15.30992,55.33306],[15.29572,55.24374],[15.13934,55.25174],[15.12556,55.16238],[15.28158,55.15442],[15.25356,54.97576],[14.63175,55.00625],[14.68259,55.36394]]],terms_text:"Geodatastyrelsen og Danske Kommuner",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/dk/SDFESkrmkort.png"},{id:"Geodatastyrelsen_Skaermkort",name:"SDFE Skærmkort",type:"wms",template:"https://kortforsyningen.kms.dk/topo_skaermkort?FORMAT=image/png&VERSION=1.1.1&login=OpenStreetMapDK2015&password=Gall4Peters&SERVICE=WMS&REQUEST=GetMap&Layers=dtk_skaermkort&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",zoomExtent:[0,19],polygon:[[[8.37439,54.95517],[8.36838,55.40421],[8.2104,55.40398],[8.20873,55.49373],[8.05027,55.49247],[8.01851,56.75014],[8.18192,56.75099],[8.17633,57.02089],[8.34133,57.02199],[8.33925,57.11196],[8.50544,57.11232],[8.50339,57.20205],[9.33163,57.20276],[9.33191,57.29248],[9.49789,57.29196],[9.49886,57.38206],[9.66497,57.38116],[9.66873,57.56056],[9.8352,57.55963],[9.83749,57.64933],[10.17257,57.64628],[10.17542,57.73678],[10.51183,57.73303],[10.51521,57.82289],[10.68349,57.82077],[10.67516,57.6412],[10.5077,57.64331],[10.504,57.55351],[10.67104,57.55141],[10.65078,57.10245],[10.48577,57.10451],[10.47862,56.92491],[10.3144,56.92676],[10.31123,56.83693],[10.47503,56.83509],[10.4649,56.56567],[10.95242,56.55898],[10.94792,56.46922],[11.10993,56.46647],[11.10526,56.37683],[10.94299,56.37953],[10.93412,56.19948],[10.77197,56.20202],[10.76948,56.11201],[10.60797,56.11503],[10.44667,56.11672],[10.28659,56.11868],[10.28315,56.02819],[10.44393,56.02704],[10.44177,55.75792],[10.4335,55.66935],[10.74381,55.66469],[10.74381,55.57123],[10.8969,55.57123],[10.90518,55.39539],[11.06137,55.38128],[11.0593,55.11241],[11.04586,55.03186],[11.20308,55.02475],[11.20308,55.11714],[11.0593,55.11241],[11.06137,55.38128],[11.07896,55.57123],[10.8969,55.57123],[10.92587,55.66702],[10.74381,55.66469],[10.75623,55.75792],[10.44177,55.75792],[10.44393,56.02704],[10.44667,56.11672],[10.60797,56.11503],[10.60521,56.02475],[10.92587,56.02012],[10.91971,55.93094],[11.08028,55.92792],[11.08581,56.01783],[11.7265,56.00506],[11.732,56.09521],[12.05403,56.08713],[12.06085,56.17626],[12.70235,56.15944],[12.66111,55.71143],[12.97923,55.7014],[12.96129,55.52173],[12.32687,55.54121],[12.32061,55.45137],[12.47782,55.44707],[12.47024,55.35705],[12.62697,55.35238],[12.62009,55.26326],[12.46273,55.26722],[12.45529,55.17782],[12.2987,55.18223],[12.28973,55.09236],[12.60486,55.08329],[12.5872,54.90363],[12.27666,54.9119],[12.26102,54.73316],[12.10707,54.73782],[12.08586,54.46817],[11.7795,54.47536],[11.78374,54.56548],[11.16585,54.57822],[11.17064,54.66865],[10.86172,54.6734],[10.86512,54.76347],[10.77136,54.76439],[10.77073,54.73728],[10.75514,54.73758],[10.7544,54.71957],[10.73891,54.71976],[10.73844,54.71085],[10.70745,54.7113],[10.70411,54.67567],[10.5511,54.67817],[10.55472,54.76702],[10.2424,54.77059],[10.24598,54.86047],[10.09023,54.86221],[10.08737,54.77239],[9.15558,54.77696],[9.15628,54.86754],[8.5322,54.86638],[8.53143,54.95516],[8.37439,54.95517]],[[11.45777,56.81955],[11.78492,56.81274],[11.77167,56.63328],[11.44596,56.64011],[11.45777,56.81955]],[[11.32747,57.3613],[11.31618,57.1818],[11.15087,57.18473],[11.14566,57.09496],[10.81577,57.10017],[10.82906,57.36953],[11.32747,57.3613]],[[11.58433,56.27779],[11.57829,56.18804],[11.73923,56.18458],[11.74564,56.27432],[11.58433,56.27779]],[[14.68259,55.36394],[14.83952,55.35652],[14.82638,55.26713],[15.13934,55.25174],[15.1532,55.34108],[15.30992,55.33306],[15.29572,55.24374],[15.13934,55.25174],[15.12556,55.16238],[15.28158,55.15442],[15.25356,54.97576],[14.63175,55.00625],[14.68259,55.36394]]],terms_text:"Geodatastyrelsen og Danske Kommuner",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/dk/SDFESkrmkort.png"},{id:"SDFE_Overflade_Skyggekort_40cm",name:"SDFE Surface Shadow Map (40 cm)",type:"wms",template:"https://kortforsyningen.kms.dk/dhm?login=OpenStreetMapDK2015&password=Gall4Peters&FORMAT=image/png&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&Layers=dhm_overflade_skyggekort&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",zoomExtent:[0,20],polygon:[[[8.37439,54.95517],[8.36838,55.40421],[8.2104,55.40398],[8.20873,55.49373],[8.05027,55.49247],[8.01851,56.75014],[8.18192,56.75099],[8.17633,57.02089],[8.34133,57.02199],[8.33925,57.11196],[8.50544,57.11232],[8.50339,57.20205],[9.33163,57.20276],[9.33191,57.29248],[9.49789,57.29196],[9.49886,57.38206],[9.66497,57.38116],[9.66873,57.56056],[9.8352,57.55963],[9.83749,57.64933],[10.17257,57.64628],[10.17542,57.73678],[10.51183,57.73303],[10.51521,57.82289],[10.68349,57.82077],[10.67516,57.6412],[10.5077,57.64331],[10.504,57.55351],[10.67104,57.55141],[10.65078,57.10245],[10.48577,57.10451],[10.47862,56.92491],[10.3144,56.92676],[10.31123,56.83693],[10.47503,56.83509],[10.4649,56.56567],[10.95242,56.55898],[10.94792,56.46922],[11.10993,56.46647],[11.10526,56.37683],[10.94299,56.37953],[10.93412,56.19948],[10.77197,56.20202],[10.76948,56.11201],[10.60797,56.11503],[10.44667,56.11672],[10.28659,56.11868],[10.28315,56.02819],[10.44393,56.02704],[10.44177,55.75792],[10.4335,55.66935],[10.74381,55.66469],[10.74381,55.57123],[10.8969,55.57123],[10.90518,55.39539],[11.06137,55.38128],[11.0593,55.11241],[11.04586,55.03186],[11.20308,55.02475],[11.20308,55.11714],[11.0593,55.11241],[11.06137,55.38128],[11.07896,55.57123],[10.8969,55.57123],[10.92587,55.66702],[10.74381,55.66469],[10.75623,55.75792],[10.44177,55.75792],[10.44393,56.02704],[10.44667,56.11672],[10.60797,56.11503],[10.60521,56.02475],[10.92587,56.02012],[10.91971,55.93094],[11.08028,55.92792],[11.08581,56.01783],[11.7265,56.00506],[11.732,56.09521],[12.05403,56.08713],[12.06085,56.17626],[12.70235,56.15944],[12.66111,55.71143],[12.97923,55.7014],[12.96129,55.52173],[12.32687,55.54121],[12.32061,55.45137],[12.47782,55.44707],[12.47024,55.35705],[12.62697,55.35238],[12.62009,55.26326],[12.46273,55.26722],[12.45529,55.17782],[12.2987,55.18223],[12.28973,55.09236],[12.60486,55.08329],[12.5872,54.90363],[12.27666,54.9119],[12.26102,54.73316],[12.10707,54.73782],[12.08586,54.46817],[11.7795,54.47536],[11.78374,54.56548],[11.16585,54.57822],[11.17064,54.66865],[10.86172,54.6734],[10.86512,54.76347],[10.77136,54.76439],[10.77073,54.73728],[10.75514,54.73758],[10.7544,54.71957],[10.73891,54.71976],[10.73844,54.71085],[10.70745,54.7113],[10.70411,54.67567],[10.5511,54.67817],[10.55472,54.76702],[10.2424,54.77059],[10.24598,54.86047],[10.09023,54.86221],[10.08737,54.77239],[9.15558,54.77696],[9.15628,54.86754],[8.5322,54.86638],[8.53143,54.95516],[8.37439,54.95517]],[[11.45777,56.81955],[11.78492,56.81274],[11.77167,56.63328],[11.44596,56.64011],[11.45777,56.81955]],[[11.32747,57.3613],[11.31618,57.1818],[11.15087,57.18473],[11.14566,57.09496],[10.81577,57.10017],[10.82906,57.36953],[11.32747,57.3613]],[[11.58433,56.27779],[11.57829,56.18804],[11.73923,56.18458],[11.74564,56.27432],[11.58433,56.27779]],[[14.68259,55.36394],[14.83952,55.35652],[14.82638,55.26713],[15.13934,55.25174],[15.1532,55.34108],[15.30992,55.33306],[15.29572,55.24374],[15.13934,55.25174],[15.12556,55.16238],[15.28158,55.15442],[15.25356,54.97576],[14.63175,55.00625],[14.68259,55.36394]]],terms_text:"Geodatastyrelsen og Danske Kommuner",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/dk/SDFESkrmkort.png"},{id:"SDFE_Terraen_Skyggekort_40cm",name:"SDFE Terrain Shadow Map (40 cm)",type:"wms",template:"https://kortforsyningen.kms.dk/dhm?login=OpenStreetMapDK2015&password=Gall4Peters&FORMAT=image/png&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&Layers=dhm_terraen_skyggekort&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",zoomExtent:[0,20],polygon:[[[8.37439,54.95517],[8.36838,55.40421],[8.2104,55.40398],[8.20873,55.49373],[8.05027,55.49247],[8.01851,56.75014],[8.18192,56.75099],[8.17633,57.02089],[8.34133,57.02199],[8.33925,57.11196],[8.50544,57.11232],[8.50339,57.20205],[9.33163,57.20276],[9.33191,57.29248],[9.49789,57.29196],[9.49886,57.38206],[9.66497,57.38116],[9.66873,57.56056],[9.8352,57.55963],[9.83749,57.64933],[10.17257,57.64628],[10.17542,57.73678],[10.51183,57.73303],[10.51521,57.82289],[10.68349,57.82077],[10.67516,57.6412],[10.5077,57.64331],[10.504,57.55351],[10.67104,57.55141],[10.65078,57.10245],[10.48577,57.10451],[10.47862,56.92491],[10.3144,56.92676],[10.31123,56.83693],[10.47503,56.83509],[10.4649,56.56567],[10.95242,56.55898],[10.94792,56.46922],[11.10993,56.46647],[11.10526,56.37683],[10.94299,56.37953],[10.93412,56.19948],[10.77197,56.20202],[10.76948,56.11201],[10.60797,56.11503],[10.44667,56.11672],[10.28659,56.11868],[10.28315,56.02819],[10.44393,56.02704],[10.44177,55.75792],[10.4335,55.66935],[10.74381,55.66469],[10.74381,55.57123],[10.8969,55.57123],[10.90518,55.39539],[11.06137,55.38128],[11.0593,55.11241],[11.04586,55.03186],[11.20308,55.02475],[11.20308,55.11714],[11.0593,55.11241],[11.06137,55.38128],[11.07896,55.57123],[10.8969,55.57123],[10.92587,55.66702],[10.74381,55.66469],[10.75623,55.75792],[10.44177,55.75792],[10.44393,56.02704],[10.44667,56.11672],[10.60797,56.11503],[10.60521,56.02475],[10.92587,56.02012],[10.91971,55.93094],[11.08028,55.92792],[11.08581,56.01783],[11.7265,56.00506],[11.732,56.09521],[12.05403,56.08713],[12.06085,56.17626],[12.70235,56.15944],[12.66111,55.71143],[12.97923,55.7014],[12.96129,55.52173],[12.32687,55.54121],[12.32061,55.45137],[12.47782,55.44707],[12.47024,55.35705],[12.62697,55.35238],[12.62009,55.26326],[12.46273,55.26722],[12.45529,55.17782],[12.2987,55.18223],[12.28973,55.09236],[12.60486,55.08329],[12.5872,54.90363],[12.27666,54.9119],[12.26102,54.73316],[12.10707,54.73782],[12.08586,54.46817],[11.7795,54.47536],[11.78374,54.56548],[11.16585,54.57822],[11.17064,54.66865],[10.86172,54.6734],[10.86512,54.76347],[10.77136,54.76439],[10.77073,54.73728],[10.75514,54.73758],[10.7544,54.71957],[10.73891,54.71976],[10.73844,54.71085],[10.70745,54.7113],[10.70411,54.67567],[10.5511,54.67817],[10.55472,54.76702],[10.2424,54.77059],[10.24598,54.86047],[10.09023,54.86221],[10.08737,54.77239],[9.15558,54.77696],[9.15628,54.86754],[8.5322,54.86638],[8.53143,54.95516],[8.37439,54.95517]],[[11.45777,56.81955],[11.78492,56.81274],[11.77167,56.63328],[11.44596,56.64011],[11.45777,56.81955]],[[11.32747,57.3613],[11.31618,57.1818],[11.15087,57.18473],[11.14566,57.09496],[10.81577,57.10017],[10.82906,57.36953],[11.32747,57.3613]],[[11.58433,56.27779],[11.57829,56.18804],[11.73923,56.18458],[11.74564,56.27432],[11.58433,56.27779]],[[14.68259,55.36394],[14.83952,55.35652],[14.82638,55.26713],[15.13934,55.25174],[15.1532,55.34108],[15.30992,55.33306],[15.29572,55.24374],[15.13934,55.25174],[15.12556,55.16238],[15.28158,55.15442],[15.25356,54.97576],[14.63175,55.00625],[14.68259,55.36394]]],terms_text:"Geodatastyrelsen og Danske Kommuner",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/dk/SDFESkrmkort.png"},{id:"Sicily-ATA2007",name:"Sicily - Italy",type:"wms",template:"http://map.sitr.regione.sicilia.it/ArcGIS/services/WGS84_F33/Ortofoto_ATA20072008_f33/MapServer/WMSServer?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&Layers=0&STYLES=default&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[15.71165,38.25894],[15.23718,38.81938],[14.27124,38.55246],[13.15063,38.75408],[11.96411,37.97451],[12.52441,37.54022],[11.87897,36.79609],[12.49695,35.47409],[12.68921,35.46962],[14.57336,36.66401],[15.29709,36.62875],[15.39854,37.42171],[15.71165,38.25894]]]},{id:"Siemianowice_Slaskie-buildings",name:"Siemianowice Śląskie: Buildings",type:"wms",template:"https://siemianowice.geoportal2.pl/map/wms/wms.php?FORMAT=image/png&transparent=true&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=budynki,drogi,adresy,ulice&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",zoomExtent:[0,19],polygon:[[[19.03103,50.33933],[19.0316,50.35413],[19.0656,50.35373],[19.06529,50.34219],[19.06118,50.33749],[19.06069,50.31967],[19.05603,50.31975],[19.05562,50.30155],[19.06432,50.3015],[19.06366,50.27175],[19.04379,50.27179],[19.04375,50.27478],[19.0213,50.27505],[19.02156,50.28398],[19.01027,50.28856],[18.98791,50.28871],[18.98822,50.3022],[18.98143,50.30226],[18.98213,50.33977],[19.03103,50.33933]]],terms_text:"Urząd Miasta Siemianowice Śląskie"},{id:"Siemianowice_Slaskie-aerial_image",name:"Siemianowice Śląskie: Orthophotomap (aerial image)",type:"wms",template:"https://siemianowice.geoportal2.pl/map/wms/wms.php?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=ortofotomapa&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",zoomExtent:[0,23],polygon:[[[19.03103,50.33933],[19.0316,50.35413],[19.0656,50.35373],[19.06529,50.34219],[19.06118,50.33749],[19.06069,50.31967],[19.05603,50.31975],[19.05562,50.30155],[19.06432,50.3015],[19.06366,50.27175],[19.04379,50.27179],[19.04375,50.27478],[19.0213,50.27505],[19.02156,50.28398],[19.01027,50.28856],[18.98791,50.28871],[18.98822,50.3022],[18.98143,50.30226],[18.98213,50.33977],[19.03103,50.33933]]],terms_text:"Urząd Miasta Siemianowice Śląskie"},{id:"sc2012",name:"SIG Santa Catarina OrtoRGB 2012",type:"wms",template:"http://sigsc.sc.gov.br/sigserver/SIGSC/wms?SERVICE=WMS&FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=OrtoRGB-Landsat-2012&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",endDate:"2012-01-01T00:00:00.000Z",startDate:"2012-01-01T00:00:00.000Z",polygon:[[[-48.62488,-26.91624],[-48.62416,-26.83409],[-48.56163,-26.83412],[-48.56165,-26.74919],[-48.62675,-26.74918],[-48.62715,-26.73276],[-48.64126,-26.733],[-48.64174,-26.70912],[-48.62414,-26.70913],[-48.62418,-26.50079],[-48.57099,-26.50077],[-48.57155,-26.47415],[-48.55418,-26.47381],[-48.5545,-26.45736],[-48.56155,-26.45747],[-48.56161,-26.41746],[-48.4991,-26.41747],[-48.49909,-26.25081],[-48.43664,-26.25079],[-48.43661,-26.20752],[-48.4601,-26.20751],[-48.46195,-26.1242],[-48.56161,-26.12419],[-48.56163,-25.95753],[-48.62411,-25.95753],[-48.62411,-25.94507],[-48.68838,-25.94607],[-48.6884,-25.95752],[-49.25089,-25.95752],[-49.2509,-25.9992],[-49.31339,-25.9992],[-49.31338,-26.0825],[-49.37591,-26.0825],[-49.37591,-26.12419],[-49.50093,-26.12418],[-49.50092,-26.16586],[-49.68661,-26.16585],[-49.68661,-26.12417],[-49.74907,-26.08246],[-49.74908,-26.04084],[-49.8116,-26.04085],[-49.81159,-25.99918],[-49.93657,-25.99915],[-49.93661,-25.98244],[-50.00091,-25.98288],[-50.00094,-25.99915],[-50.31338,-25.99916],[-50.31342,-26.04083],[-50.37411,-26.04084],[-50.3741,-25.9992],[-50.49914,-25.99918],[-50.49911,-25.98414],[-50.62593,-25.98452],[-50.62595,-26.04084],[-50.6884,-26.04161],[-50.68845,-26.12416],[-50.75094,-26.12414],[-50.75095,-26.20752],[-51.12595,-26.20747],[-51.12595,-26.24913],[-51.18848,-26.24918],[-51.31344,-26.33245],[-51.31347,-26.62414],[-51.4366,-26.62415],[-51.43659,-26.56476],[-51.62409,-26.5641],[-51.62411,-26.5408],[-51.99907,-26.5408],[-52.06158,-26.49911],[-52.06158,-26.45747],[-52.12408,-26.45749],[-52.12406,-26.41579],[-52.37407,-26.4158],[-52.37409,-26.39133],[-52.56156,-26.3894],[-52.56158,-26.37415],[-52.62408,-26.37417],[-52.62409,-26.33247],[-53.12408,-26.33247],[-53.1241,-26.31707],[-53.1618,-26.3165],[-53.16136,-26.29082],[-53.18656,-26.29083],[-53.24907,-26.24911],[-53.24906,-26.23919],[-53.31159,-26.23824],[-53.3741,-26.22882],[-53.43845,-26.22777],[-53.43843,-26.24914],[-53.5616,-26.24916],[-53.56159,-26.23983],[-53.65501,-26.23814],[-53.65623,-26.29263],[-53.67011,-26.31684],[-53.68846,-26.33242],[-53.70322,-26.3741],[-53.70929,-26.38449],[-53.7098,-26.39568],[-53.70619,-26.40722],[-53.70721,-26.45927],[-53.71438,-26.46168],[-53.71476,-26.48118],[-53.73047,-26.49913],[-53.73146,-26.54081],[-53.75096,-26.5408],[-53.75095,-26.62417],[-53.7602,-26.62414],[-53.76125,-26.6675],[-53.75098,-26.66751],[-53.75096,-26.74298],[-53.72737,-26.7434],[-53.72133,-26.74905],[-53.72141,-26.75093],[-53.74571,-26.75943],[-53.74612,-26.77704],[-53.71948,-26.77755],[-53.72084,-26.83416],[-53.70047,-26.83414],[-53.70277,-26.93108],[-53.71168,-26.93091],[-53.71224,-26.95557],[-53.751,-26.95479],[-53.75092,-26.99915],[-53.76467,-26.99915],[-53.8037,-27.03751],[-53.80454,-27.07258],[-53.80809,-27.07249],[-53.80862,-27.09613],[-53.8269,-27.09577],[-53.82762,-27.12414],[-53.84644,-27.12413],[-53.84765,-27.17014],[-53.83506,-27.18932],[-53.83536,-27.20054],[-53.68847,-27.20284],[-53.68849,-27.22789],[-53.43654,-27.23246],[-53.43655,-27.16751],[-53.37598,-27.16751],[-53.37601,-27.23352],[-53.24905,-27.23564],[-53.24905,-27.20922],[-53.06344,-27.20918],[-53.06345,-27.2334],[-52.81348,-27.23685],[-52.81346,-27.27653],[-52.75096,-27.27732],[-52.75096,-27.29249],[-52.4385,-27.29252],[-52.43848,-27.32689],[-52.37603,-27.32753],[-52.37599,-27.3342],[-52.25098,-27.33418],[-52.25099,-27.34669],[-52.18655,-27.34728],[-52.18657,-27.33419],[-52.12598,-27.3342],[-52.12599,-27.36413],[-52.02979,-27.36489],[-52.03036,-27.42442],[-51.97534,-27.42479],[-51.97603,-27.50088],[-51.93845,-27.50085],[-51.93845,-27.54252],[-51.68846,-27.54247],[-51.68847,-27.55742],[-51.59903,-27.5579],[-51.59923,-27.59481],[-51.56351,-27.59498],[-51.56348,-27.62586],[-51.50088,-27.62586],[-51.50095,-27.66754],[-51.43937,-27.6675],[-51.43954,-27.70932],[-51.37597,-27.7095],[-51.37601,-27.75089],[-51.31349,-27.7509],[-51.31346,-27.79253],[-51.18847,-27.79251],[-51.18848,-27.87586],[-51.12598,-27.87586],[-51.12597,-27.91752],[-51.06348,-27.9175],[-51.06347,-27.95919],[-51.00095,-28.00086],[-50.9385,-28.00086],[-50.93849,-28.16755],[-50.81346,-28.16752],[-50.81345,-28.29253],[-50.75096,-28.29251],[-50.68845,-28.33418],[-50.68849,-28.41754],[-50.626,-28.41752],[-50.56352,-28.44094],[-50.43848,-28.44051],[-50.43847,-28.45917],[-50.37597,-28.45921],[-50.37598,-28.47554],[-50.18844,-28.47454],[-50.18849,-28.51143],[-50.12398,-28.51104],[-50.12402,-28.50086],[-49.87597,-28.50085],[-49.87601,-28.5142],[-49.81347,-28.51369],[-49.81347,-28.58255],[-49.83003,-28.58251],[-49.82951,-28.62597],[-49.8759,-28.66572],[-50.001,-28.74915],[-50.001,-29.04083],[-50.03319,-29.04081],[-50.03219,-29.14711],[-50.12602,-29.14774],[-50.12598,-29.16579],[-50.13613,-29.16581],[-50.1885,-29.19623],[-50.1885,-29.31905],[-50.1422,-29.31873],[-50.14208,-29.33422],[-50.126,-29.33418],[-50.12599,-29.36238],[-49.99906,-29.36153],[-49.99904,-29.24031],[-49.93848,-29.23986],[-49.93851,-29.25087],[-49.87601,-29.25087],[-49.876,-29.30098],[-49.82262,-29.30052],[-49.82227,-29.33419],[-49.81347,-29.33422],[-49.81354,-29.3411],[-49.68654,-29.33991],[-49.68651,-29.29255],[-49.62399,-29.29252],[-49.62398,-29.25085],[-49.56149,-29.25083],[-49.56145,-29.16749],[-49.49901,-29.16746],[-49.49902,-29.08419],[-49.4365,-29.08418],[-49.43651,-29.04251],[-49.37405,-29.04248],[-49.37402,-28.9592],[-49.31153,-28.95917],[-49.31152,-28.91749],[-49.24898,-28.9175],[-49.24897,-28.87582],[-49.18655,-28.87585],[-49.18653,-28.83414],[-49.12402,-28.83418],[-49.12401,-28.7925],[-49.06149,-28.79247],[-49.06146,-28.75084],[-48.99903,-28.75085],[-48.99903,-28.70919],[-48.93658,-28.70918],[-48.93658,-28.66752],[-48.87405,-28.66751],[-48.87404,-28.62585],[-48.74912,-28.62585],[-48.74912,-28.54254],[-48.68656,-28.54253],[-48.68658,-28.33417],[-48.62408,-28.33416],[-48.62406,-28.08418],[-48.5616,-28.08418],[-48.56159,-27.95919],[-48.49905,-27.95916],[-48.49904,-27.91581],[-48.56157,-27.9158],[-48.5616,-27.87584],[-48.49902,-27.87586],[-48.49902,-27.83422],[-48.43657,-27.83418],[-48.43661,-27.62583],[-48.37406,-27.62585],[-48.37405,-27.50086],[-48.31157,-27.50086],[-48.31153,-27.24913],[-48.43657,-27.24913],[-48.43654,-27.20916],[-48.37402,-27.2092],[-48.37405,-27.1658],[-48.43656,-27.1658],[-48.43656,-27.12415],[-48.49906,-27.12413],[-48.49907,-27.08667],[-48.50022,-27.08666],[-48.50031,-27.08247],[-48.5616,-27.08248],[-48.56159,-27.04252],[-48.49906,-27.04252],[-48.49906,-26.99913],[-48.56156,-26.99913],[-48.56157,-26.91579],[-48.62488,-26.91624]]],terms_url:"http://sigsc.sds.sc.gov.br/download/termo_sigsc.pdf",terms_text:"Sistema de Informações Geográficas - Governo de Santa Catarina"},{id:"SIGIP-2012",name:"SIGIP - Orthophoto 2012",type:"tms",template:"http://osmdata.asitvd.ch/tiles/sigip2012/{zoom}/{x}/{y}.png",endDate:"2012-01-01T00:00:00.000Z",startDate:"2012-01-01T00:00:00.000Z",zoomExtent:[14,20],polygon:[[[6.71057,46.54396],[6.72968,46.54408],[6.72995,46.52605],[6.71085,46.52596],[6.71113,46.50796],[6.6922,46.50788],[6.6923,46.49883],[6.63531,46.49847],[6.63488,46.52547],[6.65381,46.52558],[6.65361,46.54358],[6.69163,46.54384],[6.69155,46.55284],[6.71047,46.55293],[6.71057,46.54396]]],terms_url:"https://www.sigip.ch/",terms_text:"SIGIP"},{id:"Slovakia-Historic-Maps",name:"Slovakia Historic Maps",type:"tms",template:"http://tms.freemap.sk/historicke/{zoom}/{x}/{y}.png",zoomExtent:[0,12],polygon:[[[16.81969,47.49272],[16.81969,49.50303],[22.83883,49.50303],[22.83883,47.49272],[16.81969,47.49272]]],icon:"https://raw.githubusercontent.com/FreemapSlovakia/freemap-v3-react/master/src/images/freemap-logo-small.png"},{id:"skoterleder",name:"Snowmobile map Sweden",type:"tms",template:"https://tiles.skoterleder.org/tiles/{zoom}/{x}/{y}.png",zoomExtent:[5,14],polygon:[[[12.80182,55.19612],[14.22729,55.27286],[18.44604,56.69244],[19.74242,57.98481],[20.0061,59.5371],[19.08394,60.19308],[20.49499,63.2497],[23.87328,65.21069],[30.14647,65.19226],[30.19042,67.62596],[29.43236,69.62651],[27.93822,70.14037],[20.73119,69.2756],[18.08349,68.5644],[16.50145,67.88382],[14.43602,66.14275],[11.82128,63.30775],[12.20031,60.31063],[10.62377,58.5482],[12.64251,56.03062],[12.80182,55.19612]]],terms_url:"https://skoterleder.org/",terms_text:"© Skoterleder.org",description:"Snowmobile trails",icon:"https://upload.wikimedia.org/wikipedia/commons/thumb/8/8f/Sweden_road_sign_D9.svg/200px-Sweden_road_sign_D9.svg.png"},{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",endDate:"2017-03-01T00:00:00.000Z",startDate:"2017-03-01T00:00:00.000Z",zoomExtent:[11,20],polygon:[[[18.79273,47.37079],[18.79194,47.37048],[18.79139,47.37063],[18.79011,47.37176],[18.78916,47.37345],[18.78722,47.37566],[18.78603,47.37765],[18.78498,47.37905],[18.7837,47.38032],[18.78267,47.38195],[18.7814,47.38368],[18.77934,47.38713],[18.77666,47.3894],[18.76472,47.3967],[18.7617,47.39966],[18.75631,47.40328],[18.75837,47.40653],[18.7588,47.40776],[18.762,47.41217],[18.76304,47.41315],[18.76593,47.41471],[18.77041,47.41766],[18.77247,47.41809],[18.77248,47.4203],[18.8086,47.44041],[18.81742,47.43539],[18.82092,47.43572],[18.82804,47.43755],[18.83021,47.43526],[18.83585,47.43754],[18.84049,47.43346],[18.84765,47.43572],[18.851,47.43281],[18.869,47.43961],[18.87361,47.43597],[18.87499,47.43342],[18.87386,47.43248],[18.87604,47.42797],[18.8605,47.423],[18.86621,47.41798],[18.87243,47.41086],[18.8663,47.40773],[18.86964,47.40471],[18.86777,47.40207],[18.86509,47.40052],[18.87081,47.39838],[18.86772,47.39699],[18.86992,47.39655],[18.87649,47.39478],[18.87749,47.39495],[18.87867,47.39462],[18.88358,47.38996],[18.88291,47.38967],[18.88539,47.3853],[18.87748,47.38339],[18.88181,47.37605],[18.87914,47.37393],[18.88638,47.36923],[18.88206,47.36773],[18.87973,47.36641],[18.8747,47.36252],[18.87282,47.36137],[18.87028,47.36063],[18.86688,47.35853],[18.86234,47.35637],[18.85567,47.35199],[18.84874,47.34728],[18.83192,47.33841],[18.82497,47.34258],[18.8162,47.34925],[18.81079,47.35357],[18.80823,47.356],[18.80645,47.35854],[18.80708,47.35902],[18.80635,47.36021],[18.80465,47.36175],[18.80381,47.36335],[18.80055,47.36545],[18.79988,47.36617],[18.79416,47.36975],[18.79273,47.37079]],[[18.91871,47.40938],[18.91826,47.40998],[18.92067,47.41156],[18.9251,47.41372],[18.93473,47.41917],[18.94063,47.42241],[18.94982,47.41938],[18.95155,47.4175],[18.9569,47.41923],[18.9577,47.41878],[18.95755,47.41435],[18.96211,47.40507],[18.96266,47.40118],[18.96316,47.39903],[18.95446,47.39673],[18.95276,47.39526],[18.95202,47.39362],[18.95119,47.39356],[18.94692,47.39799],[18.94411,47.39845],[18.94161,47.39869],[18.93735,47.39633],[18.93617,47.39683],[18.93122,47.4],[18.9312,47.40023],[18.92924,47.40205],[18.92561,47.40605],[18.92466,47.40635],[18.92293,47.40926],[18.91871,47.40938]]],terms_url:"http://fototerkep.hu",terms_text:"Fototerkep.hu",best:true,description:"5 cm resolution bald image of 4 settlement"},{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",zoomExtent:[1,22],polygon:[[[17.83968,-32.79834],[17.88935,-32.69728],[18.00364,-32.69822],[18.09917,-32.74853],[18.28987,-32.55266],[18.29302,-32.04871],[18.10545,-31.6455],[17.85293,-31.3444],[17.548,-30.90217],[17.40445,-30.63747],[17.24937,-30.39917],[16.9937,-29.65436],[16.7988,-29.19437],[16.54941,-28.84159],[16.44987,-28.69188],[16.4491,-28.55158],[16.60026,-28.48257],[16.75141,-28.4487],[16.74622,-28.2459],[16.88551,-28.04729],[16.99295,-28.0244],[17.05297,-28.02571],[17.10076,-28.03388],[17.20115,-28.09305],[17.20263,-28.23284],[17.24746,-28.23382],[17.2508,-28.19889],[17.35119,-28.19759],[17.35156,-28.24427],[17.40158,-28.24524],[17.41491,-28.34898],[17.40083,-28.548],[17.4527,-28.54897],[17.45121,-28.64951],[17.49836,-28.68721],[17.60282,-28.683],[17.64997,-28.69679],[17.65259,-28.73815],[17.80139,-28.73815],[17.99943,-28.75606],[18.00027,-28.79562],[18.15745,-28.87181],[18.50638,-28.87181],[18.61536,-28.82959],[18.90875,-28.82775],[19.1047,-28.94885],[19.19691,-28.93785],[19.24301,-28.85162],[19.23149,-28.80296],[19.25873,-28.70099],[19.44315,-28.69732],[19.55003,-28.49583],[19.69673,-28.49399],[19.69882,-28.44794],[19.85076,-28.44333],[19.84971,-28.40278],[19.99536,-28.39909],[19.98937,-24.74979],[20.29167,-24.91923],[20.47246,-25.15017],[20.65324,-25.45294],[20.73326,-25.6802],[20.8281,-25.89635],[20.84292,-26.21585],[20.65028,-26.48409],[20.65324,-26.82049],[21.08891,-26.84693],[21.67277,-26.839],[21.7765,-26.66963],[21.97211,-26.64314],[22.28034,-26.32747],[22.57078,-26.1334],[22.77528,-25.67752],[23.00052,-25.27619],[23.46583,-25.27351],[23.88372,-25.59737],[24.2364,-25.6134],[24.60391,-25.78966],[25.1107,-25.73894],[25.50784,-25.68554],[25.64418,-25.48238],[25.84193,-24.78054],[25.84664,-24.75385],[26.39285,-24.63329],[26.47391,-24.56533],[26.509,-24.48424],[26.58619,-24.40758],[26.73006,-24.30145],[26.85674,-24.24995],[26.85744,-24.10269],[26.92155,-23.8991],[26.93183,-23.84619],[26.97148,-23.69943],[27.00061,-23.63676],[27.0578,-23.60526],[27.13605,-23.52034],[27.33396,-23.39738],[27.51441,-23.35939],[27.59581,-23.20855],[27.80986,-23.0995],[27.88285,-23.06205],[27.93829,-22.94965],[28.04076,-22.82551],[28.20568,-22.65529],[28.33972,-22.56394],[28.49061,-22.5607],[28.61088,-22.54002],[28.82818,-22.45502],[28.92853,-22.42323],[28.95941,-22.30901],[29.01626,-22.20834],[29.23241,-22.16935],[29.35312,-22.18429],[29.6549,-22.11864],[29.77771,-22.1362],[29.9293,-22.18494],[30.11668,-22.28303],[30.25634,-22.29148],[30.30336,-22.33952],[30.50618,-22.30576],[30.83743,-22.28498],[31.00586,-22.30771],[31.18342,-22.32329],[31.29306,-22.36746],[31.56806,-23.19034],[31.55683,-23.44308],[31.69311,-23.61752],[31.71197,-23.74114],[31.77747,-23.88006],[31.88863,-23.94811],[31.91444,-24.17467],[31.99483,-24.30409],[32.01667,-24.4406],[32.00773,-24.65366],[32.01964,-24.91407],[32.03552,-25.08498],[32.01964,-25.38214],[31.99285,-25.44938],[31.99979,-25.51657],[32.00575,-25.6079],[32.00575,-25.66248],[31.93627,-25.84037],[31.98094,-25.95465],[31.86878,-26.00373],[31.41621,-25.72777],[31.32291,-25.74386],[31.25046,-25.82965],[31.1393,-25.91627],[31.11647,-25.99124],[30.96561,-26.26658],[30.89217,-26.32797],[30.85346,-26.40356],[30.82269,-26.44888],[30.80226,-26.52407],[30.80384,-26.80821],[30.90209,-26.78075],[30.91003,-26.84895],[30.98249,-26.90826],[30.97653,-27.00292],[31.00344,-27.04416],[31.15433,-27.19804],[31.50156,-27.31112],[31.97002,-27.31112],[31.97002,-27.12047],[31.97697,-27.05066],[32.00025,-26.79839],[32.10698,-26.79846],[32.31145,-26.84795],[32.89999,-26.85161],[32.88609,-26.9817],[32.70943,-27.47854],[32.62407,-27.77751],[32.5814,-28.07479],[32.53872,-28.2288],[32.42756,-28.50216],[32.36404,-28.59457],[32.07026,-28.84698],[31.98788,-28.90695],[31.77648,-28.96949],[31.46385,-29.28593],[31.35963,-29.38543],[31.16808,-29.63074],[31.06486,-29.78935],[31.05345,-29.84705],[31.06699,-29.86403],[31.04555,-29.9502],[30.95186,-30.00339],[30.86518,-30.10241],[30.72447,-30.3925],[30.35563,-30.93089],[30.09724,-31.24583],[29.86731,-31.43043],[29.74094,-31.50147],[29.48131,-31.69787],[28.89432,-32.28989],[28.54971,-32.58946],[28.14365,-32.83207],[28.07487,-32.94169],[27.84509,-33.08287],[27.3758,-33.38607],[26.88054,-33.6459],[26.59169,-33.74808],[26.45273,-33.79358],[26.20675,-33.75489],[26.00779,-33.7224],[25.80555,-33.75243],[25.75111,-33.80065],[25.65291,-33.85436],[25.65291,-33.94698],[25.71958,-34.00401],[25.72028,-34.05112],[25.55089,-34.06315],[25.35046,-34.05026],[25.28106,-34.00203],[25.04763,-33.99946],[24.95472,-34.00436],[24.94966,-34.10104],[24.87704,-34.15065],[24.87629,-34.20053],[24.85326,-34.21896],[24.76453,-34.20179],[24.50014,-34.20033],[24.34867,-34.11638],[24.19888,-34.1019],[23.99634,-34.05144],[23.80175,-34.05243],[23.74936,-34.01119],[23.49735,-34.00901],[23.41552,-34.04346],[23.41543,-34.11404],[22.90009,-34.0993],[22.84124,-34.05479],[22.64703,-34.05026],[22.64598,-34.00728],[22.57002,-34.00641],[22.50505,-34.06459],[22.252,-34.06459],[22.22213,-34.10147],[22.16212,-34.1057],[22.17124,-34.15218],[22.15769,-34.21809],[22.00156,-34.21722],[21.9497,-34.322],[21.86115,-34.40071],[21.56147,-34.40201],[21.5468,-34.36612],[21.50174,-34.36699],[21.5007,-34.40201],[21.41949,-34.44652],[21.19787,-34.44782],[21.09882,-34.39913],[21.00337,-34.37539],[20.89319,-34.39971],[20.89766,-34.4854],[20.74468,-34.48281],[20.5042,-34.48626],[20.25272,-34.70148],[20.08035,-34.83619],[19.99233,-34.83791],[19.89907,-34.82758],[19.89383,-34.7936],[19.5973,-34.79618],[19.39297,-34.64202],[19.28771,-34.64048],[19.28614,-34.59866],[19.34744,-34.52445],[19.32853,-34.45344],[19.098,-34.44998],[19.07256,-34.38024],[19.00235,-34.35256],[18.95206,-34.39494],[18.7975,-34.39364],[18.79842,-34.10164],[18.50175,-34.10153],[18.49995,-34.36169],[18.44773,-34.362],[18.44799,-34.35227],[18.39744,-34.3514],[18.39717,-34.3023],[18.35657,-34.30056],[18.34793,-34.20204],[18.29721,-34.19503],[18.29511,-33.99371],[18.33745,-33.99141],[18.34766,-33.84924],[18.34793,-33.78155],[18.41247,-33.74488],[18.36155,-33.65016],[18.2992,-33.58559],[18.21668,-33.44887],[18.13899,-33.39741],[17.94735,-33.16026],[17.88552,-33.05757],[17.84859,-32.96685],[17.83968,-32.85073],[17.83968,-32.79834]]],best:true},{id:"South-Tyrol-Orthofoto2011",name:"South Tyrol Orthofoto 2011",type:"tms",template:"https://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",endDate:"2011-01-01T00:00:00.000Z",startDate:"2011-01-01T00:00:00.000Z",zoomExtent:[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:"https://geoservices.buergernetz.bz.it/geokatalog",terms_text:"© Autonomen Provinz Bozen/Provincia Autonoma di Bolzano CC-BY 3.0"},{id:"South-Tyrol-Orthofoto2011-20cm",name:"South Tyrol Orthofoto 2011 (highres)",type:"wms",template:"https://geoservices.buergernetz.bz.it/geoserver/ows?SERVICE=WMS&FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=P_BZ_OF_2011_EPSG3857,P_BZ_OF_2011_20cm_EPSG3857&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",endDate:"2011-01-01T00:00:00.000Z",startDate:"2011-01-01T00:00:00.000Z",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:"https://geoservices.buergernetz.bz.it/geokatalog",terms_text:"© Autonomen Provinz Bozen/Provincia Autonoma di Bolzano CC-BY 3.0",description:"Orthophoto of South Tyrol from 2011 with up to 20cm resolution (larger valleys)"},{id:"South-Tyrol-Orthofoto2014",name:"South Tyrol Orthofoto 2014",type:"tms",template:"https://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",endDate:"2014-01-01T00:00:00.000Z",startDate:"2014-01-01T00:00:00.000Z",zoomExtent:[0,18],polygon:[[[11.71495,46.51227],[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.61936,46.43957],[11.62508,46.43957],[11.62508,46.44797],[11.63349,46.44587],[11.63769,46.45846],[11.64399,46.45846],[11.6608,46.44587],[11.66711,46.44587],[11.66711,46.47525],[11.69442,46.47735],[11.69652,46.48575],[11.70913,46.49624],[11.70913,46.50254],[11.71333,46.50254],[11.71495,46.51227]],[[11.61435,46.41535],[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.20644,46.4156],[11.20485,46.3997],[11.17754,46.3997],[11.17543,46.3871],[11.16703,46.38081],[11.16703,46.36821],[11.16283,46.36821],[11.16283,46.29895],[11.12501,46.29895],[11.12291,46.25488],[11.13131,46.25278],[11.12711,46.24858],[11.16283,46.24858],[11.16283,46.215],[11.24898,46.2129],[11.25108,46.2234],[11.2889,46.2234],[11.2889,46.24019],[11.3015,46.25278],[11.30991,46.25278],[11.31201,46.24858],[11.33722,46.25068],[11.34143,46.26747],[11.34563,46.26747],[11.34773,46.25698],[11.35613,46.24858],[11.41707,46.25278],[11.41917,46.32414],[11.49271,46.32204],[11.48851,46.33044],[11.49901,46.32834],[11.50111,46.34723],[11.52423,46.34723],[11.53894,46.34513],[11.53894,46.32834],[11.55995,46.32414],[11.58306,46.34932],[11.58306,46.37241],[11.60407,46.37241],[11.60617,46.38291],[11.61458,46.38291],[11.62508,46.3934],[11.62508,46.41229],[11.61435,46.41535]],[[11.20663,46.41745],[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.96285,46.47718],[10.96952,46.45217],[10.98423,46.45217],[10.98843,46.44587],[10.99894,46.44587],[11.01154,46.42068],[11.04096,46.42068],[11.08088,46.43537],[11.08298,46.47525],[11.15232,46.47525],[11.18804,46.48365],[11.19014,46.47525],[11.20695,46.47315],[11.20485,46.44587],[11.19855,46.44167],[11.19435,46.42698],[11.19014,46.42698],[11.19014,46.42068],[11.20695,46.42068],[11.20663,46.41745]],[[10.47433,46.55501],[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.46952,46.62628],[10.47785,46.61797],[10.47785,46.59069],[10.47365,46.59069],[10.47155,46.5676],[10.46314,46.55501],[10.47433,46.55501]],[[10.46925,46.62643],[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],[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.43626,46.79843],[10.43373,46.81106],[10.42532,46.80686],[10.42532,46.79847],[10.42112,46.79847],[10.41692,46.78587],[10.41692,46.75229],[10.3938,46.7376],[10.3896,46.72081],[10.3854,46.72081],[10.3791,46.69353],[10.3791,46.66834],[10.3833,46.66414],[10.3812,46.64735],[10.3896,46.64525],[10.3938,46.63056],[10.42532,46.62846],[10.44843,46.63476],[10.46925,46.62643]]],terms_url:"https://geoservices.buergernetz.bz.it/geokatalog/",terms_text:"© Autonomen Provinz Bozen/Provincia Autonoma di Bolzano CC-BY 3.0"},{id:"South-Tyrol-Orthofoto-2014-2015",name:"South Tyrol Orthofoto 2014/2015",type:"tms",template:"https://geoservices.buergernetz.bz.it/geoserver/gwc/service/wmts/?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=P_BZ_OF_2014_2015_EPSG3857&STYLE=default&TILEMATRIXSET=GoogleMapsCompatible&TILEMATRIX=GoogleMapsCompatible%3A{zoom}&TILEROW={y}&TILECOL={x}&FORMAT=image%2Fjpeg",endDate:"2015-11-01T00:00:00.000Z",startDate:"2014-07-01T00:00:00.000Z",zoomExtent:[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:"https://geoservices.buergernetz.bz.it/geokatalog",terms_text:"© Autonomen Provinz Bozen/Provincia Autonoma di Bolzano CC-BY 4.0",best:true},{id:"South-Tyrol-Topomap",name:"South Tyrol Topomap",type:"tms",template:"https://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",zoomExtent:[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:"https://geoservices.buergernetz.bz.it/geokatalog",terms_text:"© Autonomen Provinz Bozen/Provincia Autonoma di Bolzano",description:"Topographical basemap of South Tyrol"},{id:"SPW2009",name:"SPW(allonie) 2009-2010 aerial imagery",type:"wms",template:"https://geoservices.wallonie.be/arcgis/services/IMAGERIE/ORTHO_2009_2010/MapServer/WMSServer?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=0&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",endDate:"2010-01-01T00:00:00.000Z",startDate:"2009-01-01T00:00:00.000Z",polygon:[[[5.78257,49.87573],[5.73919,49.83362],[5.75516,49.79146],[5.78839,49.79665],[5.91064,49.66249],[5.84857,49.59723],[5.87102,49.57599],[5.81857,49.54638],[5.66079,49.55362],[5.61108,49.50603],[5.55603,49.52928],[5.47051,49.49737],[5.45708,49.56703],[5.37522,49.62333],[5.31486,49.61137],[5.33243,49.65263],[5.26851,49.69657],[5.16628,49.69303],[4.99753,49.80006],[4.85164,49.79345],[4.84754,49.86806],[4.89013,49.90893],[4.79117,49.958],[4.87762,50.15374],[4.82418,50.16932],[4.70207,50.09556],[4.69441,49.99625],[4.44551,49.93722],[4.30589,49.96829],[4.19746,49.9546],[4.1352,50.01508],[4.22825,50.07842],[4.19682,50.13519],[4.12714,50.1355],[4.2052,50.27347],[4.16262,50.28896],[4.13538,50.25784],[4.02795,50.3584],[3.88574,50.32701],[3.84578,50.35323],[3.74546,50.35005],[3.70994,50.30316],[3.65756,50.37076],[3.65552,50.4617],[3.60586,50.49632],[3.4993,50.48921],[3.51992,50.52362],[3.47439,50.53368],[3.37698,50.49109],[3.28634,50.52793],[3.26104,50.70131],[3.20602,50.71139],[3.17839,50.75609],[3.30562,50.75466],[3.36077,50.70962],[3.45439,50.77072],[3.64047,50.72242],[3.67752,50.77062],[3.75857,50.78045],[3.77568,50.74789],[3.8798,50.75146],[3.9097,50.69245],[4.05868,50.69439],[4.14853,50.72834],[4.2467,50.6894],[4.46355,50.75511],[4.52399,50.72724],[4.59727,50.76359],[4.63445,50.74272],[4.64309,50.79755],[4.76014,50.80544],[4.92545,50.74275],[5.00339,50.76594],[5.07039,50.70649],[5.16508,50.6957],[5.16984,50.72257],[5.30912,50.71802],[5.35029,50.74629],[5.47863,50.72352],[5.68786,50.81193],[5.68225,50.75651],[5.7707,50.75132],[5.81963,50.71396],[5.88333,50.70992],[5.89217,50.75518],[5.96561,50.76107],[6.04045,50.74546],[6.03959,50.71833],[6.11066,50.72299],[6.18169,50.62383],[6.26953,50.62519],[6.17812,50.54153],[6.22658,50.49432],[6.35036,50.48854],[6.34298,50.38033],[6.40542,50.32331],[6.30647,50.32019],[6.27889,50.26734],[6.17377,50.23165],[6.19232,50.18203],[6.147,50.17775],[6.13779,50.12985],[6.10245,50.17055],[5.96368,50.17263],[5.96133,50.13136],[5.89532,50.11216],[5.81968,50.01329],[5.83578,49.97892],[5.77502,49.9608],[5.73577,49.89684],[5.78257,49.87573]],[[2.99943,50.81035],[2.93719,50.79361],[2.96,50.7735],[2.92247,50.75729],[2.84203,50.75153],[2.86315,50.70826],[2.91065,50.69409],[2.94001,50.74543],[3.02932,50.77896],[2.99943,50.81035]]],icon:"https://osmlab.github.io/editor-layer-index/sources/europe/be/SPW(allonie)2009-2010aerialimagery.png"},{id:"SPW2012",name:"SPW(allonie) 2012-2013 aerial imagery",type:"wms",template:"https://geoservices.wallonie.be/arcgis/services/IMAGERIE/ORTHO_2012_2013/MapServer/WMSServer?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=0&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",endDate:"2013-01-01T00:00:00.000Z",startDate:"2012-01-01T00:00:00.000Z",polygon:[[[5.78257,49.87573],[5.73919,49.83362],[5.75516,49.79146],[5.78839,49.79665],[5.91064,49.66249],[5.84857,49.59723],[5.87102,49.57599],[5.81857,49.54638],[5.66079,49.55362],[5.61108,49.50603],[5.55603,49.52928],[5.47051,49.49737],[5.45708,49.56703],[5.37522,49.62333],[5.31486,49.61137],[5.33243,49.65263],[5.26851,49.69657],[5.16628,49.69303],[4.99753,49.80006],[4.85164,49.79345],[4.84754,49.86806],[4.89013,49.90893],[4.79117,49.958],[4.87762,50.15374],[4.82418,50.16932],[4.70207,50.09556],[4.69441,49.99625],[4.44551,49.93722],[4.30589,49.96829],[4.19746,49.9546],[4.1352,50.01508],[4.22825,50.07842],[4.19682,50.13519],[4.12714,50.1355],[4.2052,50.27347],[4.16262,50.28896],[4.13538,50.25784],[4.02795,50.3584],[3.88574,50.32701],[3.84578,50.35323],[3.74546,50.35005],[3.70994,50.30316],[3.65756,50.37076],[3.65552,50.4617],[3.60586,50.49632],[3.4993,50.48921],[3.51992,50.52362],[3.47439,50.53368],[3.37698,50.49109],[3.28634,50.52793],[3.26104,50.70131],[3.20602,50.71139],[3.17839,50.75609],[3.30562,50.75466],[3.36077,50.70962],[3.45439,50.77072],[3.64047,50.72242],[3.67752,50.77062],[3.75857,50.78045],[3.77568,50.74789],[3.8798,50.75146],[3.9097,50.69245],[4.05868,50.69439],[4.14853,50.72834],[4.2467,50.6894],[4.46355,50.75511],[4.52399,50.72724],[4.59727,50.76359],[4.63445,50.74272],[4.64309,50.79755],[4.76014,50.80544],[4.92545,50.74275],[5.00339,50.76594],[5.07039,50.70649],[5.16508,50.6957],[5.16984,50.72257],[5.30912,50.71802],[5.35029,50.74629],[5.47863,50.72352],[5.68786,50.81193],[5.68225,50.75651],[5.7707,50.75132],[5.81963,50.71396],[5.88333,50.70992],[5.89217,50.75518],[5.96561,50.76107],[6.04045,50.74546],[6.03959,50.71833],[6.11066,50.72299],[6.18169,50.62383],[6.26953,50.62519],[6.17812,50.54153],[6.22658,50.49432],[6.35036,50.48854],[6.34298,50.38033],[6.40542,50.32331],[6.30647,50.32019],[6.27889,50.26734],[6.17377,50.23165],[6.19232,50.18203],[6.147,50.17775],[6.13779,50.12985],[6.10245,50.17055],[5.96368,50.17263],[5.96133,50.13136],[5.89532,50.11216],[5.81968,50.01329],[5.83578,49.97892],[5.77502,49.9608],[5.73577,49.89684],[5.78257,49.87573]],[[2.99943,50.81035],[2.93719,50.79361],[2.96,50.7735],[2.92247,50.75729],[2.84203,50.75153],[2.86315,50.70826],[2.91065,50.69409],[2.94001,50.74543],[3.02932,50.77896],[2.99943,50.81035]]],icon:"https://osmlab.github.io/editor-layer-index/sources/europe/be/SPW(allonie)2009-2010aerialimagery.png"},{id:"SPW2015",name:"SPW(allonie) 2015 aerial imagery",type:"wms",template:"https://geoservices.wallonie.be/arcgis/services/IMAGERIE/ORTHO_2015/MapServer/WmsServer?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=0&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",endDate:"2015-01-01T00:00:00.000Z",startDate:"2015-01-01T00:00:00.000Z",polygon:[[[5.78257,49.87573],[5.73919,49.83362],[5.75516,49.79146],[5.78839,49.79665],[5.91064,49.66249],[5.84857,49.59723],[5.87102,49.57599],[5.81857,49.54638],[5.66079,49.55362],[5.61108,49.50603],[5.55603,49.52928],[5.47051,49.49737],[5.45708,49.56703],[5.37522,49.62333],[5.31486,49.61137],[5.33243,49.65263],[5.26851,49.69657],[5.16628,49.69303],[4.99753,49.80006],[4.85164,49.79345],[4.84754,49.86806],[4.89013,49.90893],[4.79117,49.958],[4.87762,50.15374],[4.82418,50.16932],[4.70207,50.09556],[4.69441,49.99625],[4.44551,49.93722],[4.30589,49.96829],[4.19746,49.9546],[4.1352,50.01508],[4.22825,50.07842],[4.19682,50.13519],[4.12714,50.1355],[4.2052,50.27347],[4.16262,50.28896],[4.13538,50.25784],[4.02795,50.3584],[3.88574,50.32701],[3.84578,50.35323],[3.74546,50.35005],[3.70994,50.30316],[3.65756,50.37076],[3.65552,50.4617],[3.60586,50.49632],[3.4993,50.48921],[3.51992,50.52362],[3.47439,50.53368],[3.37698,50.49109],[3.28634,50.52793],[3.26104,50.70131],[3.20602,50.71139],[3.17839,50.75609],[3.30562,50.75466],[3.36077,50.70962],[3.45439,50.77072],[3.64047,50.72242],[3.67752,50.77062],[3.75857,50.78045],[3.77568,50.74789],[3.8798,50.75146],[3.9097,50.69245],[4.05868,50.69439],[4.14853,50.72834],[4.2467,50.6894],[4.46355,50.75511],[4.52399,50.72724],[4.59727,50.76359],[4.63445,50.74272],[4.64309,50.79755],[4.76014,50.80544],[4.92545,50.74275],[5.00339,50.76594],[5.07039,50.70649],[5.16508,50.6957],[5.16984,50.72257],[5.30912,50.71802],[5.35029,50.74629],[5.47863,50.72352],[5.68786,50.81193],[5.68225,50.75651],[5.7707,50.75132],[5.81963,50.71396],[5.88333,50.70992],[5.89217,50.75518],[5.96561,50.76107],[6.04045,50.74546],[6.03959,50.71833],[6.11066,50.72299],[6.18169,50.62383],[6.26953,50.62519],[6.17812,50.54153],[6.22658,50.49432],[6.35036,50.48854],[6.34298,50.38033],[6.40542,50.32331],[6.30647,50.32019],[6.27889,50.26734],[6.17377,50.23165],[6.19232,50.18203],[6.147,50.17775],[6.13779,50.12985],[6.10245,50.17055],[5.96368,50.17263],[5.96133,50.13136],[5.89532,50.11216],[5.81968,50.01329],[5.83578,49.97892],[5.77502,49.9608],[5.73577,49.89684],[5.78257,49.87573]],[[2.99943,50.81035],[2.93719,50.79361],[2.96,50.7735],[2.92247,50.75729],[2.84203,50.75153],[2.86315,50.70826],[2.91065,50.69409],[2.94001,50.74543],[3.02932,50.77896],[2.99943,50.81035]]],icon:"https://osmlab.github.io/editor-layer-index/sources/europe/be/SPW(allonie)2009-2010aerialimagery.png"},{id:"SPW2016",name:"SPW(allonie) 2016 aerial imagery",type:"wms",template:"https://geoservices.wallonie.be/arcgis/services/IMAGERIE/ORTHO_2016/MapServer/WmsServer?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=0&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",endDate:"2016-01-01T00:00:00.000Z",startDate:"2016-01-01T00:00:00.000Z",polygon:[[[5.78257,49.87573],[5.73919,49.83362],[5.75516,49.79146],[5.78839,49.79665],[5.91064,49.66249],[5.84857,49.59723],[5.87102,49.57599],[5.81857,49.54638],[5.66079,49.55362],[5.61108,49.50603],[5.55603,49.52928],[5.47051,49.49737],[5.45708,49.56703],[5.37522,49.62333],[5.31486,49.61137],[5.33243,49.65263],[5.26851,49.69657],[5.16628,49.69303],[4.99753,49.80006],[4.85164,49.79345],[4.84754,49.86806],[4.89013,49.90893],[4.79117,49.958],[4.87762,50.15374],[4.82418,50.16932],[4.70207,50.09556],[4.69441,49.99625],[4.44551,49.93722],[4.30589,49.96829],[4.19746,49.9546],[4.1352,50.01508],[4.22825,50.07842],[4.19682,50.13519],[4.12714,50.1355],[4.2052,50.27347],[4.16262,50.28896],[4.13538,50.25784],[4.02795,50.3584],[3.88574,50.32701],[3.84578,50.35323],[3.74546,50.35005],[3.70994,50.30316],[3.65756,50.37076],[3.65552,50.4617],[3.60586,50.49632],[3.4993,50.48921],[3.51992,50.52362],[3.47439,50.53368],[3.37698,50.49109],[3.28634,50.52793],[3.26104,50.70131],[3.20602,50.71139],[3.17839,50.75609],[3.30562,50.75466],[3.36077,50.70962],[3.45439,50.77072],[3.64047,50.72242],[3.67752,50.77062],[3.75857,50.78045],[3.77568,50.74789],[3.8798,50.75146],[3.9097,50.69245],[4.05868,50.69439],[4.14853,50.72834],[4.2467,50.6894],[4.46355,50.75511],[4.52399,50.72724],[4.59727,50.76359],[4.63445,50.74272],[4.64309,50.79755],[4.76014,50.80544],[4.92545,50.74275],[5.00339,50.76594],[5.07039,50.70649],[5.16508,50.6957],[5.16984,50.72257],[5.30912,50.71802],[5.35029,50.74629],[5.47863,50.72352],[5.68786,50.81193],[5.68225,50.75651],[5.7707,50.75132],[5.81963,50.71396],[5.88333,50.70992],[5.89217,50.75518],[5.96561,50.76107],[6.04045,50.74546],[6.03959,50.71833],[6.11066,50.72299],[6.18169,50.62383],[6.26953,50.62519],[6.17812,50.54153],[6.22658,50.49432],[6.35036,50.48854],[6.34298,50.38033],[6.40542,50.32331],[6.30647,50.32019],[6.27889,50.26734],[6.17377,50.23165],[6.19232,50.18203],[6.147,50.17775],[6.13779,50.12985],[6.10245,50.17055],[5.96368,50.17263],[5.96133,50.13136],[5.89532,50.11216],[5.81968,50.01329],[5.83578,49.97892],[5.77502,49.9608],[5.73577,49.89684],[5.78257,49.87573]],[[2.99943,50.81035],[2.93719,50.79361],[2.96,50.7735],[2.92247,50.75729],[2.84203,50.75153],[2.86315,50.70826],[2.91065,50.69409],[2.94001,50.74543],[3.02932,50.77896],[2.99943,50.81035]]],icon:"https://osmlab.github.io/editor-layer-index/sources/europe/be/SPW(allonie)2009-2010aerialimagery.png"},{id:"SPW_ORTHO_LAST",name:"SPW(allonie) most recent aerial imagery",type:"wms",template:"https://geoservices.wallonie.be/arcgis/services/IMAGERIE/ORTHO_LAST/MapServer/WmsServer?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=0&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[5.78257,49.87573],[5.73919,49.83362],[5.75516,49.79146],[5.78839,49.79665],[5.91064,49.66249],[5.84857,49.59723],[5.87102,49.57599],[5.81857,49.54638],[5.66079,49.55362],[5.61108,49.50603],[5.55603,49.52928],[5.47051,49.49737],[5.45708,49.56703],[5.37522,49.62333],[5.31486,49.61137],[5.33243,49.65263],[5.26851,49.69657],[5.16628,49.69303],[4.99753,49.80006],[4.85164,49.79345],[4.84754,49.86806],[4.89013,49.90893],[4.79117,49.958],[4.87762,50.15374],[4.82418,50.16932],[4.70207,50.09556],[4.69441,49.99625],[4.44551,49.93722],[4.30589,49.96829],[4.19746,49.9546],[4.1352,50.01508],[4.22825,50.07842],[4.19682,50.13519],[4.12714,50.1355],[4.2052,50.27347],[4.16262,50.28896],[4.13538,50.25784],[4.02795,50.3584],[3.88574,50.32701],[3.84578,50.35323],[3.74546,50.35005],[3.70994,50.30316],[3.65756,50.37076],[3.65552,50.4617],[3.60586,50.49632],[3.4993,50.48921],[3.51992,50.52362],[3.47439,50.53368],[3.37698,50.49109],[3.28634,50.52793],[3.26104,50.70131],[3.20602,50.71139],[3.17839,50.75609],[3.30562,50.75466],[3.36077,50.70962],[3.45439,50.77072],[3.64047,50.72242],[3.67752,50.77062],[3.75857,50.78045],[3.77568,50.74789],[3.8798,50.75146],[3.9097,50.69245],[4.05868,50.69439],[4.14853,50.72834],[4.2467,50.6894],[4.46355,50.75511],[4.52399,50.72724],[4.59727,50.76359],[4.63445,50.74272],[4.64309,50.79755],[4.76014,50.80544],[4.92545,50.74275],[5.00339,50.76594],[5.07039,50.70649],[5.16508,50.6957],[5.16984,50.72257],[5.30912,50.71802],[5.35029,50.74629],[5.47863,50.72352],[5.68786,50.81193],[5.68225,50.75651],[5.7707,50.75132],[5.81963,50.71396],[5.88333,50.70992],[5.89217,50.75518],[5.96561,50.76107],[6.04045,50.74546],[6.03959,50.71833],[6.11066,50.72299],[6.18169,50.62383],[6.26953,50.62519],[6.17812,50.54153],[6.22658,50.49432],[6.35036,50.48854],[6.34298,50.38033],[6.40542,50.32331],[6.30647,50.32019],[6.27889,50.26734],[6.17377,50.23165],[6.19232,50.18203],[6.147,50.17775],[6.13779,50.12985],[6.10245,50.17055],[5.96368,50.17263],[5.96133,50.13136],[5.89532,50.11216],[5.81968,50.01329],[5.83578,49.97892],[5.77502,49.9608],[5.73577,49.89684],[5.78257,49.87573]],[[2.99943,50.81035],[2.93719,50.79361],[2.96,50.7735],[2.92247,50.75729],[2.84203,50.75153],[2.86315,50.70826],[2.91065,50.69409],[2.94001,50.74543],[3.02932,50.77896],[2.99943,50.81035]]],best:true,icon:"https://osmlab.github.io/editor-layer-index/sources/europe/be/SPW(allonie)2009-2010aerialimagery.png"},{id:"SPW_PICC",name:"SPW(allonie) PICC numerical imagery",type:"wms",template:"https://geoservices.wallonie.be/arcgis/services/TOPOGRAPHIE/PICC_VDIFF/MapServer/WmsServer?SERVICE=WMS&VERSION=1.1.1&FORMAT=image/png8&TRANSPARENT=FALSE&REQUEST=GetMap&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}&LAYERS=0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29",projection:"EPSG:3857",polygon:[[[5.78257,49.87573],[5.73919,49.83362],[5.75516,49.79146],[5.78839,49.79665],[5.91064,49.66249],[5.84857,49.59723],[5.87102,49.57599],[5.81857,49.54638],[5.66079,49.55362],[5.61108,49.50603],[5.55603,49.52928],[5.47051,49.49737],[5.45708,49.56703],[5.37522,49.62333],[5.31486,49.61137],[5.33243,49.65263],[5.26851,49.69657],[5.16628,49.69303],[4.99753,49.80006],[4.85164,49.79345],[4.84754,49.86806],[4.89013,49.90893],[4.79117,49.958],[4.87762,50.15374],[4.82418,50.16932],[4.70207,50.09556],[4.69441,49.99625],[4.44551,49.93722],[4.30589,49.96829],[4.19746,49.9546],[4.1352,50.01508],[4.22825,50.07842],[4.19682,50.13519],[4.12714,50.1355],[4.2052,50.27347],[4.16262,50.28896],[4.13538,50.25784],[4.02795,50.3584],[3.88574,50.32701],[3.84578,50.35323],[3.74546,50.35005],[3.70994,50.30316],[3.65756,50.37076],[3.65552,50.4617],[3.60586,50.49632],[3.4993,50.48921],[3.51992,50.52362],[3.47439,50.53368],[3.37698,50.49109],[3.28634,50.52793],[3.26104,50.70131],[3.20602,50.71139],[3.17839,50.75609],[3.30562,50.75466],[3.36077,50.70962],[3.45439,50.77072],[3.64047,50.72242],[3.67752,50.77062],[3.75857,50.78045],[3.77568,50.74789],[3.8798,50.75146],[3.9097,50.69245],[4.05868,50.69439],[4.14853,50.72834],[4.2467,50.6894],[4.46355,50.75511],[4.52399,50.72724],[4.59727,50.76359],[4.63445,50.74272],[4.64309,50.79755],[4.76014,50.80544],[4.92545,50.74275],[5.00339,50.76594],[5.07039,50.70649],[5.16508,50.6957],[5.16984,50.72257],[5.30912,50.71802],[5.35029,50.74629],[5.47863,50.72352],[5.68786,50.81193],[5.68225,50.75651],[5.7707,50.75132],[5.81963,50.71396],[5.88333,50.70992],[5.89217,50.75518],[5.96561,50.76107],[6.04045,50.74546],[6.03959,50.71833],[6.11066,50.72299],[6.18169,50.62383],[6.26953,50.62519],[6.17812,50.54153],[6.22658,50.49432],[6.35036,50.48854],[6.34298,50.38033],[6.40542,50.32331],[6.30647,50.32019],[6.27889,50.26734],[6.17377,50.23165],[6.19232,50.18203],[6.147,50.17775],[6.13779,50.12985],[6.10245,50.17055],[5.96368,50.17263],[5.96133,50.13136],[5.89532,50.11216],[5.81968,50.01329],[5.83578,49.97892],[5.77502,49.9608],[5.73577,49.89684],[5.78257,49.87573]],[[2.99943,50.81035],[2.93719,50.79361],[2.96,50.7735],[2.92247,50.75729],[2.84203,50.75153],[2.86315,50.70826],[2.91065,50.69409],[2.94001,50.74543],[3.02932,50.77896],[2.99943,50.81035]]],icon:"https://osmlab.github.io/editor-layer-index/sources/europe/be/SPW(allonie)2009-2010aerialimagery.png"},{id:"SPWrelief2014",name:"SPW(allonie) shaded relief",type:"wms",template:"https://geoservices.wallonie.be/arcgis/services/RELIEF/WALLONIE_MNT_2013_2014_HILLSHADE/MapServer/WMSServer?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=0&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",endDate:"2014-01-01T00:00:00.000Z",startDate:"2013-01-01T00:00:00.000Z",polygon:[[[5.78257,49.87573],[5.73919,49.83362],[5.75516,49.79146],[5.78839,49.79665],[5.91064,49.66249],[5.84857,49.59723],[5.87102,49.57599],[5.81857,49.54638],[5.66079,49.55362],[5.61108,49.50603],[5.55603,49.52928],[5.47051,49.49737],[5.45708,49.56703],[5.37522,49.62333],[5.31486,49.61137],[5.33243,49.65263],[5.26851,49.69657],[5.16628,49.69303],[4.99753,49.80006],[4.85164,49.79345],[4.84754,49.86806],[4.89013,49.90893],[4.79117,49.958],[4.87762,50.15374],[4.82418,50.16932],[4.70207,50.09556],[4.69441,49.99625],[4.44551,49.93722],[4.30589,49.96829],[4.19746,49.9546],[4.1352,50.01508],[4.22825,50.07842],[4.19682,50.13519],[4.12714,50.1355],[4.2052,50.27347],[4.16262,50.28896],[4.13538,50.25784],[4.02795,50.3584],[3.88574,50.32701],[3.84578,50.35323],[3.74546,50.35005],[3.70994,50.30316],[3.65756,50.37076],[3.65552,50.4617],[3.60586,50.49632],[3.4993,50.48921],[3.51992,50.52362],[3.47439,50.53368],[3.37698,50.49109],[3.28634,50.52793],[3.26104,50.70131],[3.20602,50.71139],[3.17839,50.75609],[3.30562,50.75466],[3.36077,50.70962],[3.45439,50.77072],[3.64047,50.72242],[3.67752,50.77062],[3.75857,50.78045],[3.77568,50.74789],[3.8798,50.75146],[3.9097,50.69245],[4.05868,50.69439],[4.14853,50.72834],[4.2467,50.6894],[4.46355,50.75511],[4.52399,50.72724],[4.59727,50.76359],[4.63445,50.74272],[4.64309,50.79755],[4.76014,50.80544],[4.92545,50.74275],[5.00339,50.76594],[5.07039,50.70649],[5.16508,50.6957],[5.16984,50.72257],[5.30912,50.71802],[5.35029,50.74629],[5.47863,50.72352],[5.68786,50.81193],[5.68225,50.75651],[5.7707,50.75132],[5.81963,50.71396],[5.88333,50.70992],[5.89217,50.75518],[5.96561,50.76107],[6.04045,50.74546],[6.03959,50.71833],[6.11066,50.72299],[6.18169,50.62383],[6.26953,50.62519],[6.17812,50.54153],[6.22658,50.49432],[6.35036,50.48854],[6.34298,50.38033],[6.40542,50.32331],[6.30647,50.32019],[6.27889,50.26734],[6.17377,50.23165],[6.19232,50.18203],[6.147,50.17775],[6.13779,50.12985],[6.10245,50.17055],[5.96368,50.17263],[5.96133,50.13136],[5.89532,50.11216],[5.81968,50.01329],[5.83578,49.97892],[5.77502,49.9608],[5.73577,49.89684],[5.78257,49.87573]],[[2.99943,50.81035],[2.93719,50.79361],[2.96,50.7735],[2.92247,50.75729],[2.84203,50.75153],[2.86315,50.70826],[2.91065,50.69409],[2.94001,50.74543],[3.02932,50.77896],[2.99943,50.81035]]],icon:"https://osmlab.github.io/editor-layer-index/sources/europe/be/SPW(allonie)2009-2010aerialimagery.png"},{id:"ssb-sentrum",name:"SSB City Centres overlay",type:"wms",template:"https://ogc.ssb.no/wms.ashx?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=layer_193&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",zoomExtent:[0,22],polygon:[[[31.90425,70.43681],[28.47652,71.32896],[23.6865,71.25143],[16.80906,70.07308],[11.16207,67.52539],[9.97554,64.81158],[4.21871,62.145],[4.37254,59.1872],[6.17431,57.8915],[7.93212,57.73936],[10.77758,58.86491],[11.7224,58.76251],[12.72216,60.11415],[13.05175,61.34935],[12.52439,63.61699],[14.23826,63.98561],[15.11717,65.90166],[18.69871,68.37491],[20.06101,68.26126],[21.00584,68.78415],[25.24656,68.3506],[26.93845,69.8472],[28.76219,69.61121],[28.5864,68.8556],[31.06931,69.51915],[31.90425,70.43681]]],terms_url:"https://www.ssb.no/arealsentrum/",terms_text:"© SSB",description:"Downtown areas with significant commercial and service activities.",icon:"http://www.fosterhjemsforening.no/wp-content/uploads/2015/06/SSB_logo1.png",overlay:true},{id:"ssb-tettsteder",name:"SSB Urban Areas overlay",type:"wms",template:"https://ogc.ssb.no/wms.ashx?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=layer_198&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",zoomExtent:[0,22],polygon:[[[31.90425,70.43681],[28.47652,71.32896],[23.6865,71.25143],[16.80906,70.07308],[11.16207,67.52539],[9.97554,64.81158],[4.21871,62.145],[4.37254,59.1872],[6.17431,57.8915],[7.93212,57.73936],[10.77758,58.86491],[11.7224,58.76251],[12.72216,60.11415],[13.05175,61.34935],[12.52439,63.61699],[14.23826,63.98561],[15.11717,65.90166],[18.69871,68.37491],[20.06101,68.26126],[21.00584,68.78415],[25.24656,68.3506],[26.93845,69.8472],[28.76219,69.61121],[28.5864,68.8556],[31.06931,69.51915],[31.90425,70.43681]]],terms_url:"https://www.ssb.no/beftett",terms_text:"© SSB",description:"Human settlements of at least 200 people with less than 200 meters between households",icon:"http://www.fosterhjemsforening.no/wp-content/uploads/2015/06/SSB_logo1.png",overlay:true},{id:"Bern-bern2016-tms",name:"Stadt Bern 10cm (2016)",type:"tms",template:"https://mapproxy.osm.ch/tiles/bern2016/EPSG900913/{zoom}/{x}/{y}.png?origin=nw",endDate:"2016-01-01T00:00:00.000Z",startDate:"2016-01-01T00:00:00.000Z",zoomExtent:[8,21],polygon:[[[7.29431,46.92376],[7.29827,46.92747],[7.30616,46.93095],[7.30433,46.93623],[7.30686,46.94037],[7.32464,46.94328],[7.32845,46.94641],[7.34141,46.94608],[7.34385,46.94737],[7.34346,46.94879],[7.35136,46.94855],[7.35056,46.95021],[7.35309,46.95193],[7.3582,46.95118],[7.3685,46.95662],[7.37151,46.96073],[7.37503,46.95983],[7.37851,46.96147],[7.38062,46.96547],[7.38321,46.9663],[7.3938,46.96693],[7.40005,46.96918],[7.40829,46.96869],[7.42817,46.9738],[7.43271,46.97269],[7.43536,46.96843],[7.43785,46.96843],[7.44125,46.97679],[7.44569,46.97479],[7.44838,46.97564],[7.4477,46.97901],[7.44405,46.97807],[7.44127,46.97982],[7.45067,46.99015],[7.45221,46.98968],[7.45465,46.97782],[7.46804,46.97583],[7.47079,46.97],[7.47019,46.96741],[7.47816,46.97118],[7.48452,46.97016],[7.48613,46.9679],[7.48579,46.96468],[7.47847,46.9629],[7.48029,46.96068],[7.47893,46.95878],[7.47978,46.9566],[7.47701,46.95446],[7.48405,46.94999],[7.48339,46.9452],[7.49556,46.93962],[7.49351,46.93766],[7.4908,46.93876],[7.4895,46.93687],[7.47667,46.93695],[7.47811,46.93625],[7.4747,46.93392],[7.47535,46.93299],[7.4691,46.92924],[7.47077,46.9255],[7.45857,46.93484],[7.44764,46.93043],[7.43542,46.93497],[7.4338,46.93312],[7.43764,46.93074],[7.41469,46.93682],[7.41384,46.93157],[7.40708,46.93038],[7.40806,46.92563],[7.40213,46.9242],[7.40148,46.92119],[7.38757,46.93045],[7.38231,46.92728],[7.38002,46.92989],[7.38087,46.93241],[7.37487,46.93143],[7.37489,46.93271],[7.36807,46.93239],[7.36831,46.93043],[7.36041,46.92859],[7.36056,46.9272],[7.33878,46.92454],[7.33937,46.91967],[7.32746,46.91903],[7.32692,46.9236],[7.32437,46.92519],[7.30823,46.92229],[7.29431,46.92376]]],terms_text:"Orthophoto 2016, Vermessungsamt Stadt Bern",best:true},{id:"Bern-2012",name:"Stadt Bern 10cm/25cm (2012)",type:"tms",template:"https://mapproxy.osm.ch/tiles/bern2012/EPSG900913/{zoom}/{x}/{y}.png?origin=nw",endDate:"2012-01-01T00:00:00.000Z",startDate:"2012-01-01T00:00:00.000Z",zoomExtent:[14,19],polygon:[[[7.3807,47.00952],[7.38073,47.02301],[7.43853,47.02303],[7.43865,47.01408],[7.45174,47.014],[7.45172,47.00503],[7.54111,47.005],[7.54111,46.99873],[7.54378,46.99871],[7.54375,46.98696],[7.55682,46.987],[7.55685,46.96003],[7.51744,46.96001],[7.51744,46.95108],[7.53051,46.95106],[7.53051,46.92407],[7.51741,46.92405],[7.51738,46.91505],[7.53042,46.91507],[7.53048,46.9061],[7.54358,46.90602],[7.54358,46.87905],[7.55659,46.87903],[7.55662,46.8611],[7.54349,46.86104],[7.5434,46.85212],[7.49095,46.85212],[7.49107,46.87907],[7.47794,46.87909],[7.47797,46.89707],[7.45168,46.89713],[7.45171,46.88808],[7.43855,46.88814],[7.43858,46.87015],[7.41233,46.87015],[7.41236,46.87907],[7.39917,46.87911],[7.3992,46.86108],[7.38613,46.86114],[7.3861,46.85218],[7.373,46.85216],[7.37303,46.86112],[7.34677,46.8611],[7.3468,46.88808],[7.25488,46.88796],[7.25485,46.90596],[7.24172,46.90592],[7.24169,46.91497],[7.22856,46.91493],[7.22833,46.96887],[7.24146,46.96891],[7.24149,46.98688],[7.26769,46.98694],[7.26777,46.99593],[7.28078,46.99595],[7.2809,47.0094],[7.3807,47.00952]]],terms_text:"Orthophoto 2012, Vermessungsamt Stadt Bern"},{id:"Uster-2008",name:"Stadt Uster Orthophoto 2008 10cm",type:"tms",template:"https://mapproxy.osm.ch/tiles/uster/EPSG900913/{zoom}/{x}/{y}.png?origin=nw",endDate:"2008-01-01T00:00:00.000Z",startDate:"2008-01-01T00:00:00.000Z",zoomExtent:[0,21],polygon:[[[8.68,47.32],[8.74,47.32],[8.74,47.365],[8.68,47.365],[8.68,47.32]]],terms_text:"Stadt Uster Vermessung Orthophoto 2008"},{id:"Zuerich-zh_luftbild2011-tms",name:"Stadt Zürich Luftbild 2011",type:"tms",template:"https://mapproxy.osm.ch/tiles/zh_luftbild2011/EPSG900913/{zoom}/{x}/{y}.png?origin=nw",endDate:"2011-01-01T00:00:00.000Z",startDate:"2011-01-01T00:00:00.000Z",zoomExtent:[0,21],polygon:[[[8.44624,47.44143],[8.63178,47.43968],[8.62895,47.31377],[8.44381,47.31555],[8.44624,47.44143]]],terms_text:"Stadt Zürich Luftbild 2011"},{id:"Zuerich-city_map",name:"Stadtplan Zürich",type:"tms",template:"https://mapproxy.osm.ch/tiles/zh_stadtplan/EPSG900913/{zoom}/{x}/{y}.png?origin=nw",zoomExtent:[0,21],polygon:[[[8.56681,47.34713],[8.56665,47.34706],[8.56563,47.34684],[8.56575,47.34666],[8.56509,47.34645],[8.54207,47.33502],[8.54073,47.33376],[8.5403,47.33396],[8.54019,47.33372],[8.54042,47.33358],[8.5388,47.33208],[8.53642,47.33076],[8.53622,47.33018],[8.53345,47.32992],[8.5318,47.3295],[8.53145,47.32846],[8.53102,47.32789],[8.52974,47.32777],[8.52969,47.32687],[8.52899,47.32698],[8.52813,47.32685],[8.52802,47.32635],[8.52755,47.32639],[8.52762,47.32616],[8.52579,47.32619],[8.52563,47.32575],[8.52426,47.32608],[8.5242,47.32486],[8.52372,47.32416],[8.52304,47.32433],[8.52193,47.32436],[8.52194,47.32394],[8.51932,47.32401],[8.51868,47.32386],[8.51768,47.3232],[8.51642,47.32308],[8.5156,47.32315],[8.51472,47.32272],[8.51295,47.3229],[8.51162,47.32222],[8.50957,47.32202],[8.5095,47.32165],[8.50788,47.32203],[8.50735,47.32173],[8.50529,47.32144],[8.50476,47.32121],[8.5043,47.32074],[8.50317,47.32022],[8.50241,47.32053],[8.50227,47.32082],[8.50152,47.32129],[8.50102,47.32198],[8.50095,47.32259],[8.5006,47.32278],[8.50078,47.3237],[8.50066,47.32451],[8.50098,47.32595],[8.5015,47.3265],[8.50159,47.32732],[8.50188,47.32765],[8.50132,47.32883],[8.5014,47.32903],[8.50069,47.32979],[8.50087,47.33053],[8.50063,47.3311],[8.50112,47.33183],[8.50075,47.33202],[8.50078,47.33224],[8.50106,47.3326],[8.50191,47.33303],[8.5022,47.33364],[8.50177,47.33412],[8.50152,47.33504],[8.50199,47.33666],[8.50161,47.33728],[8.49877,47.33968],[8.49808,47.34169],[8.49702,47.34247],[8.49709,47.34326],[8.49798,47.34365],[8.4981,47.34387],[8.49817,47.34453],[8.49773,47.34521],[8.49636,47.34648],[8.4951,47.34691],[8.49467,47.3476],[8.49285,47.34828],[8.49206,47.3495],[8.49145,47.34964],[8.49128,47.34983],[8.49089,47.35067],[8.49,47.35056],[8.48813,47.352],[8.48691,47.35203],[8.4868,47.3522],[8.48728,47.35311],[8.4871,47.3534],[8.48501,47.35469],[8.48463,47.35536],[8.48463,47.3567],[8.48426,47.35737],[8.48321,47.35814],[8.48272,47.35907],[8.48205,47.35954],[8.47879,47.36078],[8.47698,47.36029],[8.47365,47.36081],[8.47275,47.36079],[8.47169,47.36132],[8.47053,47.36166],[8.46951,47.36438],[8.4664,47.36574],[8.46583,47.3661],[8.46545,47.36664],[8.46485,47.36681],[8.46427,47.36728],[8.46418,47.36838],[8.4649,47.36897],[8.46482,47.36911],[8.46938,47.37136],[8.47042,47.3726],[8.47022,47.37395],[8.46868,47.37382],[8.46761,47.37357],[8.46544,47.37444],[8.46288,47.37603],[8.45995,47.3775],[8.45638,47.37801],[8.45116,47.37817],[8.45047,47.37836],[8.44847,47.37967],[8.44801,47.38025],[8.45174,47.38062],[8.45371,47.38027],[8.45614,47.38072],[8.45669,47.38094],[8.45673,47.38244],[8.45745,47.38222],[8.45843,47.38231],[8.45841,47.38263],[8.45745,47.38325],[8.45767,47.3834],[8.45756,47.38371],[8.45807,47.38388],[8.46004,47.38594],[8.46088,47.38704],[8.46121,47.38795],[8.46104,47.38803],[8.46381,47.39053],[8.46518,47.39132],[8.46556,47.39113],[8.46618,47.39113],[8.46727,47.39065],[8.46697,47.39131],[8.46739,47.3929],[8.4671,47.39334],[8.46607,47.39378],[8.4651,47.39453],[8.46484,47.39481],[8.46488,47.39508],[8.46535,47.39492],[8.46854,47.39461],[8.47018,47.39401],[8.47066,47.39439],[8.47191,47.39388],[8.47208,47.39408],[8.47152,47.3943],[8.47151,47.3949],[8.4721,47.39517],[8.47301,47.39506],[8.47349,47.396],[8.46516,47.39829],[8.46568,47.39922],[8.46759,47.39873],[8.46806,47.39957],[8.46615,47.40006],[8.4677,47.403],[8.4699,47.40298],[8.47551,47.40381],[8.47815,47.40387],[8.47819,47.40508],[8.47738,47.40517],[8.47705,47.40619],[8.47729,47.40914],[8.47703,47.40935],[8.47543,47.40971],[8.47583,47.41077],[8.47605,47.41072],[8.47628,47.41102],[8.47665,47.41097],[8.47725,47.41194],[8.47488,47.41241],[8.47394,47.41222],[8.47303,47.41146],[8.47268,47.41058],[8.47101,47.41094],[8.47113,47.41137],[8.47085,47.41167],[8.47044,47.41159],[8.47031,47.41253],[8.46876,47.41225],[8.46801,47.41334],[8.46863,47.41363],[8.46857,47.41408],[8.46955,47.41484],[8.47007,47.41557],[8.46913,47.41649],[8.46913,47.41693],[8.46962,47.41752],[8.47158,47.41763],[8.4772,47.41974],[8.47688,47.42016],[8.47783,47.42212],[8.47895,47.42172],[8.47937,47.42113],[8.47972,47.42141],[8.48131,47.42134],[8.48171,47.423],[8.48294,47.42266],[8.48292,47.42222],[8.48609,47.42155],[8.48658,47.42164],[8.48683,47.42186],[8.48796,47.42201],[8.48851,47.42271],[8.49019,47.42234],[8.491,47.4239],[8.49006,47.42435],[8.49007,47.42532],[8.49027,47.42536],[8.49017,47.42578],[8.48552,47.42712],[8.48481,47.42784],[8.48466,47.42873],[8.48437,47.42896],[8.48445,47.42979],[8.48579,47.43103],[8.49562,47.43281],[8.50027,47.43442],[8.50207,47.43467],[8.50364,47.43402],[8.50997,47.43213],[8.51155,47.43116],[8.51274,47.43085],[8.516,47.43174],[8.51628,47.43175],[8.51681,47.43133],[8.51872,47.4319],[8.51979,47.43167],[8.52463,47.43126],[8.52549,47.43316],[8.5303,47.43207],[8.53063,47.43266],[8.533,47.43228],[8.53374,47.43251],[8.53467,47.432],[8.53521,47.43188],[8.53606,47.43187],[8.5374,47.4314],[8.53964,47.43126],[8.5401,47.4311],[8.54033,47.43186],[8.54363,47.43143],[8.54284,47.43289],[8.54311,47.43288],[8.54451,47.4325],[8.54459,47.43262],[8.54607,47.43207],[8.54858,47.43142],[8.55009,47.43128],[8.55098,47.43102],[8.55199,47.43104],[8.55535,47.43066],[8.5561,47.42803],[8.55684,47.42624],[8.55783,47.42554],[8.55697,47.4249],[8.55736,47.42472],[8.5569,47.42424],[8.55723,47.4241],[8.55419,47.4208],[8.56082,47.41817],[8.56129,47.41829],[8.56235,47.41632],[8.56282,47.41643],[8.56323,47.41565],[8.56622,47.41632],[8.56692,47.41629],[8.56735,47.41649],[8.5678,47.41684],[8.56875,47.41855],[8.56903,47.41871],[8.5696,47.41868],[8.56944,47.41926],[8.57223,47.41893],[8.57367,47.42004],[8.57378,47.4178],[8.57342,47.41711],[8.57386,47.41438],[8.57384,47.41324],[8.57331,47.41257],[8.5726,47.41207],[8.573,47.41144],[8.58806,47.40797],[8.58894,47.40756],[8.59312,47.40704],[8.59728,47.40631],[8.59722,47.406],[8.59608,47.40612],[8.59378,47.40222],[8.59622,47.40154],[8.5948,47.39918],[8.59725,47.39851],[8.59644,47.39715],[8.59637,47.39663],[8.59623,47.39646],[8.59453,47.39712],[8.59392,47.39647],[8.59335,47.39614],[8.59208,47.39691],[8.59172,47.39681],[8.59148,47.397],[8.58828,47.3958],[8.58905,47.39501],[8.58995,47.39478],[8.58818,47.39351],[8.58752,47.39321],[8.58747,47.39297],[8.58619,47.3928],[8.58442,47.39195],[8.58369,47.39008],[8.58305,47.38905],[8.58316,47.38831],[8.58437,47.38834],[8.58432,47.38894],[8.58492,47.39011],[8.58528,47.3904],[8.58696,47.39017],[8.5869,47.38977],[8.58765,47.38905],[8.58698,47.38793],[8.59181,47.38638],[8.59307,47.38565],[8.59299,47.38523],[8.59354,47.38522],[8.59274,47.38417],[8.59082,47.38476],[8.59013,47.38381],[8.58966,47.384],[8.58956,47.38373],[8.59217,47.38311],[8.59151,47.38244],[8.59384,47.38081],[8.59407,47.38061],[8.59406,47.38029],[8.59556,47.3796],[8.59574,47.37927],[8.59721,47.37849],[8.59674,47.37782],[8.59702,47.37716],[8.5976,47.37661],[8.59705,47.37589],[8.59778,47.37557],[8.59828,47.3751],[8.59855,47.37473],[8.59813,47.37447],[8.6002,47.37331],[8.60053,47.3734],[8.60096,47.37312],[8.60194,47.37198],[8.60192,47.37171],[8.60324,47.37131],[8.60607,47.36871],[8.60745,47.36816],[8.60812,47.36761],[8.61067,47.3673],[8.612,47.36684],[8.61308,47.36776],[8.61344,47.36779],[8.61366,47.36802],[8.61549,47.3677],[8.61645,47.36841],[8.61665,47.36828],[8.61764,47.36681],[8.61709,47.36626],[8.61682,47.36535],[8.61565,47.36466],[8.61495,47.36458],[8.61557,47.36342],[8.61566,47.36273],[8.61482,47.36263],[8.6147,47.36151],[8.61929,47.36121],[8.61996,47.36104],[8.62174,47.36007],[8.62257,47.35983],[8.62187,47.35946],[8.62133,47.35746],[8.62351,47.35592],[8.62352,47.35561],[8.62544,47.35466],[8.62416,47.35397],[8.62245,47.35364],[8.62209,47.35334],[8.61989,47.35367],[8.61976,47.35385],[8.61844,47.35382],[8.61839,47.35425],[8.61708,47.35414],[8.61569,47.35442],[8.6152,47.3541],[8.61386,47.35402],[8.61255,47.35437],[8.61156,47.35394],[8.61107,47.35352],[8.61042,47.35337],[8.60946,47.35352],[8.60776,47.35333],[8.60607,47.35363],[8.60506,47.35359],[8.6038,47.353],[8.60305,47.35219],[8.6032,47.35207],[8.60294,47.35175],[8.603,47.35076],[8.60262,47.35073],[8.6016,47.35073],[8.60104,47.35105],[8.60026,47.35112],[8.5996,47.35145],[8.59859,47.35145],[8.59824,47.35165],[8.59689,47.3514],[8.59666,47.35161],[8.59596,47.35169],[8.59564,47.3519],[8.59494,47.35161],[8.59454,47.35175],[8.5939,47.35161],[8.5935,47.35211],[8.59229,47.3523],[8.59189,47.35278],[8.59118,47.35321],[8.59047,47.35271],[8.59014,47.35286],[8.58846,47.35289],[8.58797,47.35307],[8.58748,47.35267],[8.5863,47.35288],[8.58591,47.35231],[8.5853,47.35201],[8.58462,47.35141],[8.58417,47.35129],[8.58438,47.35116],[8.58398,47.35085],[8.58348,47.35104],[8.58335,47.35087],[8.58221,47.35101],[8.58246,47.35062],[8.57851,47.34873],[8.57827,47.34888],[8.57786,47.34865],[8.57686,47.34878],[8.57688,47.34859],[8.57625,47.34839],[8.57308,47.34751],[8.573,47.34765],[8.57214,47.34744],[8.57163,47.34728],[8.5717,47.34712],[8.57029,47.34672],[8.56968,47.3476],[8.56741,47.34674],[8.56681,47.34713]]],terms_text:"Stadt Zürich Open Government Data"},{id:"stamen-terrain-background",name:"Stamen Terrain",type:"tms",template:"https://stamen-tiles-{switch:a,b,c,d}.a.ssl.fastly.net/terrain-background/{zoom}/{x}/{y}.jpg",zoomExtent:[4,18],terms_url:"http://maps.stamen.com/#terrain",terms_text:"Map tiles by Stamen Design, under CC BY 3.0. Data by OpenStreetMap, under ODbL",icon:"https://stamen.com/wp-content/uploads/2016/07/stamen_compass_rose_small-01.png"},{id:"stockholm-orto",name:"Stockholm Orthophoto",type:"wms",template:"http://openmap.stockholm.se/bios/wms/app/baggis/web/WMS_STHLM_ORTOFOTO_2015?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=p_1002820&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",zoomExtent:[5,21],polygon:[[[17.8755,59.2625],[17.94411,59.27307],[18.09551,59.22603],[18.19582,59.22786],[18.20297,59.24886],[18.12538,59.30779],[18.1786,59.32566],[18.09876,59.3721],[18.04264,59.37816],[18.00796,59.34334],[17.93655,59.37641],[17.97483,59.40246],[17.90882,59.4417],[17.8854,59.43792],[17.88918,59.41382],[17.84077,59.38568],[17.81708,59.40054],[17.77725,59.39984],[17.75622,59.3916],[17.79899,59.36204],[17.94993,59.31121],[17.85622,59.28412],[17.8755,59.2625]]],terms_url:"http://dataportalen.stockholm.se/dataportalen/",terms_text:"© Stockholm municipality, CC0",best:true,description:"Orthophotos from the municipality of Stockholm 2015, CC0 license",icon:"https://upload.wikimedia.org/wikipedia/commons/thumb/4/4d/Stockholm_vapen_bra.svg/196px-Stockholm_vapen_bra.svg.png"},{id:"Surrey-Air_Survey",name:"Surrey Air Survey",type:"tms",template:"https://{switch:a,b,c}.surrey.aerial.openstreetmap.org.uk/layer/gb_surrey_aerial/{zoom}/{x}/{y}.png",endDate:"2009-01-01T00:00:00.000Z",startDate:"2007-01-01T00:00:00.000Z",zoomExtent:[8,21],polygon:[[[-0.75248,51.08219],[-0.75952,51.08563],[-0.80143,51.14579],[-0.83989,51.14407],[-0.83577,51.18024],[-0.85295,51.20113],[-0.85227,51.20962],[-0.84952,51.2179],[-0.82669,51.24037],[-0.8121,51.24692],[-0.77365,51.24596],[-0.75442,51.23811],[-0.75408,51.23392],[-0.74464,51.23338],[-0.74307,51.28472],[-0.7515,51.30695],[-0.76644,51.3121],[-0.78206,51.32702],[-0.78154,51.33881],[-0.73743,51.37205],[-0.71923,51.37697],[-0.67958,51.3848],[-0.68078,51.39015],[-0.65314,51.39176],[-0.63014,51.39058],[-0.62911,51.39701],[-0.62344,51.39776],[-0.61314,51.42956],[-0.60025,51.44591],[-0.58671,51.44454],[-0.57624,51.4532],[-0.56268,51.45235],[-0.54774,51.447],[-0.53727,51.44486],[-0.5371,51.45267],[-0.54396,51.45459],[-0.54053,51.46989],[-0.53092,51.47609],[-0.50912,51.47448],[-0.5086,51.46957],[-0.49006,51.46828],[-0.45264,51.46069],[-0.44869,51.44293],[-0.44148,51.44186],[-0.44183,51.43694],[-0.41127,51.43801],[-0.40149,51.42795],[-0.38071,51.42624],[-0.38054,51.41617],[-0.34913,51.41382],[-0.3275,51.40375],[-0.30398,51.39904],[-0.30192,51.37547],[-0.30948,51.36969],[-0.31119,51.35297],[-0.29557,51.35415],[-0.29231,51.36733],[-0.2851,51.36808],[-0.27875,51.37719],[-0.26553,51.38372],[-0.24115,51.3848],[-0.21231,51.36283],[-0.21077,51.34986],[-0.19086,51.35029],[-0.15429,51.33388],[-0.14966,51.30577],[-0.10743,51.29665],[-0.08872,51.30996],[-0.08786,51.32208],[-0.0652,51.32154],[-0.06417,51.32648],[-0.05198,51.32637],[-0.05284,51.33463],[-0.03308,51.34309],[0.00192,51.33763],[0.01188,51.3282],[0.01393,51.29944],[0.02029,51.29944],[0.02406,51.30727],[0.03316,51.30867],[0.04552,51.30545],[0.05239,51.28774],[0.06166,51.25778],[0.06406,51.24155],[0.04621,51.21263],[0.04071,51.21091],[0.04483,51.19898],[0.04947,51.19973],[0.05582,51.19446],[0.06114,51.17907],[0.06234,51.15421],[0.05771,51.14171],[0.02046,51.13654],[-0.0446,51.13364],[-0.1567,51.13525],[-0.15721,51.129],[-0.22879,51.11834],[-0.24733,51.11834],[-0.25008,51.12114],[-0.29935,51.1137],[-0.32218,51.11198],[-0.32235,51.10584],[-0.3596,51.10196],[-0.35891,51.11133],[-0.38638,51.11176],[-0.3869,51.10625],[-0.4281,51.09472],[-0.48568,51.09516],[-0.48713,51.08723],[-0.52974,51.08654],[-0.53023,51.07899],[-0.61046,51.07655],[-0.60997,51.08067],[-0.6578,51.07922],[-0.65828,51.07434],[-0.68365,51.07075],[-0.6998,51.07083],[-0.72966,51.07449],[-0.75248,51.08219]]]},{id:"Swietochlowice-2008",name:"Świętochłowice: Orthophotomap 2008 (aerial image)",type:"wms",template:"https://swietochlowice.geoportal2.pl/map/wms/wms.php?SERVICE=WMS&REQUEST=GetMap&VERSION=1.1.1&LAYERS=ortofotomapa2008&STYLES=&FORMAT=image/jpeg&BBOX={bbox}&WIDTH={width}&HEIGHT={height}&SRS={proj}",projection:"EPSG:4326",endDate:"2008-01-01T00:00:00.000Z",startDate:"2008-01-01T00:00:00.000Z",zoomExtent:[0,23],polygon:[[[18.92818,50.32151],[18.93028,50.31766],[18.93402,50.31392],[18.93193,50.31119],[18.92556,50.30575],[18.92429,50.30354],[18.92964,50.30206],[18.93083,50.3004],[18.9283,50.2961],[18.93573,50.29356],[18.93885,50.28965],[18.9371,50.28727],[18.93966,50.28206],[18.93402,50.27553],[18.92953,50.27543],[18.93037,50.27338],[18.93413,50.27104],[18.93239,50.26883],[18.92716,50.26926],[18.90447,50.27371],[18.89758,50.27612],[18.89569,50.28028],[18.89783,50.28566],[18.89712,50.2878],[18.88292,50.29258],[18.88031,50.29473],[18.88311,50.29894],[18.88819,50.30164],[18.88326,50.30717],[18.88444,50.31183],[18.89149,50.31809],[18.89306,50.32558],[18.89568,50.32704],[18.92818,50.32151]]],terms_text:"Urząd Miasta Świętochłowice"},{id:"Swietochlowice-2009",name:"Świętochłowice: Orthophotomap 2009 (aerial image)",type:"wms",template:"https://swietochlowice.geoportal2.pl/map/wms/wms.php?SERVICE=WMS&REQUEST=GetMap&VERSION=1.1.1&LAYERS=ortofotomapa2009&STYLES=&FORMAT=image/jpeg&BBOX={bbox}&WIDTH={width}&HEIGHT={height}&SRS={proj}",projection:"EPSG:4326",endDate:"2009-01-01T00:00:00.000Z",startDate:"2009-01-01T00:00:00.000Z",zoomExtent:[0,23],polygon:[[[18.92818,50.32151],[18.93028,50.31766],[18.93402,50.31392],[18.93193,50.31119],[18.92556,50.30575],[18.92429,50.30354],[18.92964,50.30206],[18.93083,50.3004],[18.9283,50.2961],[18.93573,50.29356],[18.93885,50.28965],[18.9371,50.28727],[18.93966,50.28206],[18.93402,50.27553],[18.92953,50.27543],[18.93037,50.27338],[18.93413,50.27104],[18.93239,50.26883],[18.92716,50.26926],[18.90447,50.27371],[18.89758,50.27612],[18.89569,50.28028],[18.89783,50.28566],[18.89712,50.2878],[18.88292,50.29258],[18.88031,50.29473],[18.88311,50.29894],[18.88819,50.30164],[18.88326,50.30717],[18.88444,50.31183],[18.89149,50.31809],[18.89306,50.32558],[18.89568,50.32704],[18.92818,50.32151]]],terms_text:"Urząd Miasta Świętochłowice"},{id:"Swietochlowice-2012",name:"Świętochłowice: Orthophotomap 2012 (aerial image)",type:"wms",template:"https://swietochlowice.geoportal2.pl/map/wms/wms.php?SERVICE=WMS&REQUEST=GetMap&VERSION=1.1.1&LAYERS=ortofotomapa2012&STYLES=&FORMAT=image/jpeg&BBOX={bbox}&WIDTH={width}&HEIGHT={height}&SRS={proj}",projection:"EPSG:4326",endDate:"2012-01-01T00:00:00.000Z",startDate:"2012-01-01T00:00:00.000Z",zoomExtent:[0,23],polygon:[[[18.92818,50.32151],[18.93028,50.31766],[18.93402,50.31392],[18.93193,50.31119],[18.92556,50.30575],[18.92429,50.30354],[18.92964,50.30206],[18.93083,50.3004],[18.9283,50.2961],[18.93573,50.29356],[18.93885,50.28965],[18.9371,50.28727],[18.93966,50.28206],[18.93402,50.27553],[18.92953,50.27543],[18.93037,50.27338],[18.93413,50.27104],[18.93239,50.26883],[18.92716,50.26926],[18.90447,50.27371],[18.89758,50.27612],[18.89569,50.28028],[18.89783,50.28566],[18.89712,50.2878],[18.88292,50.29258],[18.88031,50.29473],[18.88311,50.29894],[18.88819,50.30164],[18.88326,50.30717],[18.88444,50.31183],[18.89149,50.31809],[18.89306,50.32558],[18.89568,50.32704],[18.92818,50.32151]]],terms_text:"Urząd Miasta Świętochłowice"},{id:"Szeged_2011",name:"Szeged orthophoto 2011",type:"tms",template:"http://e.tile.openstreetmap.hu/szeged-2011-10cm/{zoom}/{x}/{y}.png",endDate:"2011-01-01T00:00:00.000Z",startDate:"2011-01-01T00:00:00.000Z",zoomExtent:[10,22],polygon:[[[20.14599,46.22811],[20.13323,46.22904],[20.12584,46.22987],[20.12233,46.23099],[20.12085,46.23175],[20.11897,46.23351],[20.11312,46.24136],[20.11203,46.2433],[20.11157,46.245],[20.11119,46.24709],[20.11129,46.24877],[20.11159,46.25097],[20.11222,46.2528],[20.11299,46.25427],[20.11354,46.25535],[20.11477,46.2568],[20.13523,46.27685],[20.13664,46.27751],[20.13789,46.27803],[20.13939,46.27835],[20.14088,46.27846],[20.16115,46.27816],[20.16211,46.27816],[20.16359,46.2777],[20.16618,46.27615],[20.16878,46.27386],[20.16961,46.27144],[20.16959,46.27045],[20.17009,46.27044],[20.17399,46.26433],[20.17662,46.25829],[20.1948,46.25492],[20.18587,46.24481],[20.18466,46.24531],[20.17804,46.23831],[20.17818,46.23771],[20.17953,46.2371],[20.17257,46.23002],[20.16983,46.23504],[20.16877,46.23629],[20.16703,46.23785],[20.16594,46.23873],[20.16544,46.239],[20.16548,46.239],[20.16352,46.24014],[20.16021,46.2412],[20.15927,46.24153],[20.15927,46.24158],[20.15835,46.24185],[20.15495,46.24229],[20.15108,46.23515],[20.14938,46.23246],[20.14599,46.22811]]],terms_url:"http://www.geo.u-szeged.hu",terms_text:"SZTE TFGT - University of Szeged",best:true,description:"Inner part of Szeged"},{id:"TW_NLSC_WMS_EMAP6",name:"Taiwan e-Map Open Data",type:"tms",template:"https://wmts.nlsc.gov.tw/wmts/EMAP6_OPENDATA/default/GoogleMapsCompatible/{zoom}/{y}/{x}",zoomExtent:[0,15],polygon:[[[121.2237,25.76997],[122.2251,26.60305],[122.9312,22.57058],[120.6771,20.72799],[118.2509,23.26265],[118.3036,23.30751],[118.1978,24.34453],[118.1036,24.36172],[118.2283,24.49486],[118.4416,24.55302],[118.6024,24.46068],[120.0474,25.38843],[119.8935,25.78169],[119.787,26.2048],[120.4578,26.53253],[121.2237,25.76997]]],terms_url:"https://maps.nlsc.gov.tw/",terms_text:"© National Land Surveying and Mapping Center, Taiwan OGDL 1.0",icon:"https://osmlab.github.io/editor-layer-index/sources/asia/tw/Taiwane-MapOpenData.png"},{id:"TW_NLSC_WMS_LANDSECT",name:"Taiwan Land-Section Data",type:"wms",template:"https://wms.nlsc.gov.tw/wms?VERSION=1.1.1&FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=LANDSECT&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[121.2237,25.76997],[122.2251,26.60305],[122.9312,22.57058],[120.6771,20.72799],[118.2509,23.26265],[118.3036,23.30751],[118.1978,24.34453],[118.1036,24.36172],[118.2283,24.49486],[118.4416,24.55302],[118.6024,24.46068],[120.0474,25.38843],[119.8935,25.78169],[119.787,26.2048],[120.4578,26.53253],[121.2237,25.76997]]],terms_url:"https://maps.nlsc.gov.tw/",terms_text:"© National Land Surveying and Mapping Center, Taiwan OGDL 1.0",icon:"https://osmlab.github.io/editor-layer-index/sources/asia/tw/Taiwane-MapOpenData.png"},{id:"TW_NLSC_WMS_Village",name:"Taiwan Village Boundaries",type:"wms",template:"https://wms.nlsc.gov.tw/wms?VERSION=1.1.1&FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=Village&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[121.2237,25.76997],[122.2251,26.60305],[122.9312,22.57058],[120.6771,20.72799],[118.2509,23.26265],[118.3036,23.30751],[118.1978,24.34453],[118.1036,24.36172],[118.2283,24.49486],[118.4416,24.55302],[118.6024,24.46068],[120.0474,25.38843],[119.8935,25.78169],[119.787,26.2048],[120.4578,26.53253],[121.2237,25.76997]]],terms_url:"https://maps.nlsc.gov.tw/",terms_text:"© National Land Surveying and Mapping Center, Taiwan OGDL 1.0",icon:"https://osmlab.github.io/editor-layer-index/sources/asia/tw/Taiwane-MapOpenData.png"},{id:"TEClines",name:"TEC bus lines",type:"wms",template:"https://geodata.tec-wl.be/arcgis/services/Lignes/MapServer/WMSServer?FORMAT=image/png&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=0&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[5.40236,49.50688],[5.81984,49.54253],[6.1714,49.62089],[5.85829,49.68846],[5.7704,49.85343],[5.894,50.11832],[6.15492,50.13593],[6.39662,50.36775],[6.28126,50.46576],[6.11372,50.7933],[5.72646,50.77941],[5.70998,50.85229],[5.61385,50.80024],[5.46278,50.79677],[5.21284,50.70119],[4.94917,50.80371],[4.75966,50.80718],[4.72121,50.88869],[4.60585,50.77941],[4.48775,50.85749],[4.36964,50.85056],[4.15266,50.72728],[3.59236,50.76725],[3.29848,50.76377],[3.04579,50.80024],[2.86177,50.72728],[2.89748,50.68553],[3.0815,50.76725],[3.19685,50.68031],[3.28749,50.52691],[3.67201,50.47625],[3.68574,50.31692],[3.99062,50.27305],[4.14992,50.17465],[4.24055,50.08661],[4.15266,49.99842],[4.18562,49.96486],[4.55366,49.94542],[4.69923,50.03372],[4.81184,50.0919],[4.84206,50.01607],[4.86677,49.90475],[4.85854,49.80382],[5.08925,49.7648],[5.34743,49.60843],[5.40236,49.50688]]],icon:"https://osmlab.github.io/editor-layer-index/sources/europe/be/TECbusstops.png",overlay:true},{id:"TECstops",name:"TEC bus stops",type:"wms",template:"https://geodata.tec-wl.be/arcgis/services/Poteaux/MapServer/WMSServer?FORMAT=image/png&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=0&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[5.40236,49.50688],[5.81984,49.54253],[6.1714,49.62089],[5.85829,49.68846],[5.7704,49.85343],[5.894,50.11832],[6.15492,50.13593],[6.39662,50.36775],[6.28126,50.46576],[6.11372,50.7933],[5.72646,50.77941],[5.70998,50.85229],[5.61385,50.80024],[5.46278,50.79677],[5.21284,50.70119],[4.94917,50.80371],[4.75966,50.80718],[4.72121,50.88869],[4.60585,50.77941],[4.48775,50.85749],[4.36964,50.85056],[4.15266,50.72728],[3.59236,50.76725],[3.29848,50.76377],[3.04579,50.80024],[2.86177,50.72728],[2.89748,50.68553],[3.0815,50.76725],[3.19685,50.68031],[3.28749,50.52691],[3.67201,50.47625],[3.68574,50.31692],[3.99062,50.27305],[4.14992,50.17465],[4.24055,50.08661],[4.15266,49.99842],[4.18562,49.96486],[4.55366,49.94542],[4.69923,50.03372],[4.81184,50.0919],[4.84206,50.01607],[4.86677,49.90475],[4.85854,49.80382],[5.08925,49.7648],[5.34743,49.60843],[5.40236,49.50688]]],icon:"https://osmlab.github.io/editor-layer-index/sources/europe/be/TECbusstops.png",overlay:true},{id:"teotonio_vilela",name:"Teotonio Vilela AL",type:"wms",template:"http://geoserver.dados.al.gov.br:8080/geoserver/Alagoas/ows?LAYERS=Teotonio%20Vilela&SERVICE=WMS&FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.0&SERVICE=WMS&REQUEST=GetMap&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[-36.31164,-9.95468],[-36.31158,-9.94382],[-36.31145,-9.93197],[-36.31127,-9.92436],[-36.31123,-9.91848],[-36.31119,-9.91637],[-36.31141,-9.91324],[-36.3111,-9.90922],[-36.31108,-9.90318],[-36.31099,-9.89379],[-36.31089,-9.8842],[-36.31078,-9.87412],[-36.31068,-9.86457],[-36.3318,-9.86432],[-36.34001,-9.86437],[-36.3478,-9.86425],[-36.35917,-9.8642],[-36.37047,-9.86404],[-36.38448,-9.86386],[-36.40164,-9.86364],[-36.40221,-9.9225],[-36.40249,-9.93177],[-36.40259,-9.94183],[-36.40248,-9.94804],[-36.40266,-9.9537],[-36.3855,-9.95384],[-36.38283,-9.95392],[-36.37096,-9.95399],[-36.36232,-9.95423],[-36.34747,-9.95422],[-36.33287,-9.95446],[-36.3291,-9.95456],[-36.32089,-9.95459],[-36.31164,-9.95468]]],terms_url:"http://www.seplag.al.gov.br",terms_text:"Secretaria de Estado do Planejamento, Gestão e Patrimônio"},{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}",startDate:"2012-01-01T00:00:00.000Z",zoomExtent:[0,20],polygon:[[[-99.99854,34.56018],[-95.55655,33.99257],[-93.89679,33.61039],[-93.98468,32.04103],[-93.41614,31.02505],[-93.74531,29.57268],[-96.50492,28.23159],[-97.36942,26.95467],[-97.04867,25.8053],[-99.07342,26.32559],[-100.76599,29.02532],[-102.33154,29.84339],[-103.13355,28.88112],[-104.28879,29.28831],[-104.72698,29.94816],[-104.72697,30.23535],[-106.5345,31.78457],[-106.75767,31.78457],[-106.75766,32.04386],[-106.61848,32.04385],[-103.11949,32.04376],[-103.09544,36.50046],[-103.05798,36.54269],[-100.00042,36.54222],[-99.99854,34.56018]]],terms_url:"https://tnris.org/maps-and-data/online-mapping-services",terms_text:"Texas Natural Resources Information System"},{id:"US-TIGER-Roads-2017",name:"TIGER Roads 2017",type:"tms",template:"https://{switch:a,b,c,d}.tiles.mapbox.com/styles/v1/openstreetmapus/cj8dftc3q1ecn2tnx9qhwyj0c/tiles/256/{zoom}/{x}/{y}?access_token=pk.eyJ1Ijoib3BlbnN0cmVldG1hcHVzIiwiYSI6ImNpcnF4Ym43dDBoOXZmYW04bWhlNWdrY2EifQ.4SFexuTUuKkZeerO3dgtmw",endDate:"2017-01-01T00:00:00.000Z",startDate:"2017-01-01T00:00:00.000Z",zoomExtent:[0,22],polygon:[[[-124.76179,48.41301],[-124.60595,45.90245],[-124.99343,40.05576],[-122.53697,36.85661],[-119.97759,33.00641],[-117.67593,32.46302],[-114.86123,32.47999],[-111.00893,31.33601],[-108.19927,31.326],[-108.18711,31.77551],[-106.53072,31.78209],[-106.48421,31.74645],[-106.42932,31.75206],[-106.28689,31.56133],[-106.20525,31.4467],[-105.02053,30.5361],[-104.58819,29.69979],[-103.25189,28.89087],[-102.71736,29.39206],[-102.1514,29.74757],[-101.25529,29.48105],[-100.00624,28.00822],[-99.23511,26.4476],[-98.01091,25.9928],[-97.43502,25.8266],[-96.95553,25.98216],[-96.80617,27.79782],[-95.55633,28.58761],[-93.74053,29.47421],[-90.90285,28.85645],[-88.01567,28.99443],[-88.01625,30.00389],[-86.02775,30.00475],[-84.01879,28.99618],[-81.9972,25.98268],[-81.99666,25.01349],[-84.01656,25.01258],[-84.01601,24.00527],[-80.02,24.0071],[-79.89011,26.85507],[-80.02453,32.01613],[-75.41474,35.05319],[-74.02112,39.57279],[-72.00202,40.99125],[-69.87974,40.99205],[-69.84893,43.26199],[-66.94528,44.71049],[-67.75966,47.099],[-69.25051,47.51223],[-70.46149,46.21766],[-71.41227,45.25488],[-72.02225,45.00598],[-75.07988,44.98029],[-76.90231,43.80246],[-78.76239,43.62496],[-79.15798,43.44626],[-79.00601,42.80053],[-82.66248,41.68895],[-82.17616,43.58854],[-83.2814,46.13885],[-87.50645,48.01427],[-88.34922,48.29633],[-89.43531,47.98378],[-93.99811,49.00671],[-95.11054,49.412],[-96.01312,49.00605],[-123.32289,49.00429],[-123.22752,48.18499],[-124.76179,48.41301]],[[-160.57876,22.50629],[-160.57822,21.49846],[-158.74706,21.24398],[-157.50832,20.9958],[-155.99619,18.77902],[-154.62178,18.7587],[-154.68902,19.88057],[-156.29276,21.22259],[-157.50474,21.9985],[-159.00937,22.50702],[-160.57876,22.50629]],[[-167.1572,68.722],[-164.8554,67.0255],[-168.0022,66.0018],[-169.0087,66.0015],[-169.0075,64.9988],[-172.5143,63.8767],[-173.8197,59.7401],[-178.0001,52.2446],[-177.9993,51.2554],[-171.4689,51.8215],[-162.4025,53.9567],[-159.0076,55.0025],[-158.0191,55.0028],[-151.9963,55.9992],[-151.5003,57.9988],[-151.5013,58.992],[-138.516,58.9953],[-138.515,57.9986],[-133.9948,54.0032],[-130.0044,54.0043],[-130.0071,57.0001],[-131.9759,56.9995],[-135.123,59.7566],[-138.0072,59.9918],[-139.1716,60.4127],[-140.9874,61.0119],[-140.9684,69.9535],[-156.1769,71.5633],[-160.4136,70.7398],[-163.0218,69.9707],[-164.9717,68.9947],[-167.1572,68.722]],[[-68.2,17.8],[-64.32,17.38],[-64.64,18.36],[-65.33,18.57],[-67.9,18.67],[-68.2,17.8]],[[146.2,15.4],[145.7,15.6],[144.2,13.2],[144.8,12.9],[146.2,15.4]],[[179.99,52.2],[172,53.5],[172,52.5],[179.99,51],[179.99,52.2]]],description:"Yellow = Public domain map data from the US Census. Red = Data not found in OpenStreetMap",icon:"https://osmlab.github.io/editor-layer-index/sources/north-america/us/TIGER2017RoadsOverlay.png",overlay:true},{id:"US-TIGER-Roads-2018",name:"TIGER Roads 2018",type:"tms",template:"https://{switch:a,b,c,d}.tiles.mapbox.com/styles/v1/openstreetmapus/cjo1wbulo3ub82ro1c9onlzmh/tiles/256/{zoom}/{x}/{y}?access_token=pk.eyJ1Ijoib3BlbnN0cmVldG1hcHVzIiwiYSI6ImNpcnF4Ym43dDBoOXZmYW04bWhlNWdrY2EifQ.4SFexuTUuKkZeerO3dgtmw",endDate:"2018-01-01T00:00:00.000Z",startDate:"2018-01-01T00:00:00.000Z",zoomExtent:[0,22],polygon:[[[-124.76179,48.41301],[-124.60595,45.90245],[-124.99343,40.05576],[-122.53697,36.85661],[-119.97759,33.00641],[-117.67593,32.46302],[-114.86123,32.47999],[-111.00893,31.33601],[-108.19927,31.326],[-108.18711,31.77551],[-106.53072,31.78209],[-106.48421,31.74645],[-106.42932,31.75206],[-106.28689,31.56133],[-106.20525,31.4467],[-105.02053,30.5361],[-104.58819,29.69979],[-103.25189,28.89087],[-102.71736,29.39206],[-102.1514,29.74757],[-101.25529,29.48105],[-100.00624,28.00822],[-99.23511,26.4476],[-98.01091,25.9928],[-97.43502,25.8266],[-96.95553,25.98216],[-96.80617,27.79782],[-95.55633,28.58761],[-93.74053,29.47421],[-90.90285,28.85645],[-88.01567,28.99443],[-88.01625,30.00389],[-86.02775,30.00475],[-84.01879,28.99618],[-81.9972,25.98268],[-81.99666,25.01349],[-84.01656,25.01258],[-84.01601,24.00527],[-80.02,24.0071],[-79.89011,26.85507],[-80.02453,32.01613],[-75.41474,35.05319],[-74.02112,39.57279],[-72.00202,40.99125],[-69.87974,40.99205],[-69.84893,43.26199],[-66.94528,44.71049],[-67.75966,47.099],[-69.25051,47.51223],[-70.46149,46.21766],[-71.41227,45.25488],[-72.02225,45.00598],[-75.07988,44.98029],[-76.90231,43.80246],[-78.76239,43.62496],[-79.15798,43.44626],[-79.00601,42.80053],[-82.66248,41.68895],[-82.17616,43.58854],[-83.2814,46.13885],[-87.50645,48.01427],[-88.34922,48.29633],[-89.43531,47.98378],[-93.99811,49.00671],[-95.11054,49.412],[-96.01312,49.00605],[-123.32289,49.00429],[-123.22752,48.18499],[-124.76179,48.41301]],[[-160.57876,22.50629],[-160.57822,21.49846],[-158.74706,21.24398],[-157.50832,20.9958],[-155.99619,18.77902],[-154.62178,18.7587],[-154.68902,19.88057],[-156.29276,21.22259],[-157.50474,21.9985],[-159.00937,22.50702],[-160.57876,22.50629]],[[-167.1572,68.722],[-164.8554,67.0255],[-168.0022,66.0018],[-169.0087,66.0015],[-169.0075,64.9988],[-172.5143,63.8767],[-173.8197,59.7401],[-178.0001,52.2446],[-177.9993,51.2554],[-171.4689,51.8215],[-162.4025,53.9567],[-159.0076,55.0025],[-158.0191,55.0028],[-151.9963,55.9992],[-151.5003,57.9988],[-151.5013,58.992],[-138.516,58.9953],[-138.515,57.9986],[-133.9948,54.0032],[-130.0044,54.0043],[-130.0071,57.0001],[-131.9759,56.9995],[-135.123,59.7566],[-138.0072,59.9918],[-139.1716,60.4127],[-140.9874,61.0119],[-140.9684,69.9535],[-156.1769,71.5633],[-160.4136,70.7398],[-163.0218,69.9707],[-164.9717,68.9947],[-167.1572,68.722]],[[-68.2,17.8],[-64.32,17.38],[-64.64,18.36],[-65.33,18.57],[-67.9,18.67],[-68.2,17.8]],[[146.2,15.4],[145.7,15.6],[144.2,13.2],[144.8,12.9],[146.2,15.4]],[[179.99,52.2],[172,53.5],[172,52.5],[179.99,51],[179.99,52.2]]],description:"Yellow = Public domain map data from the US Census. Red = Data not found in OpenStreetMap",icon:"https://osmlab.github.io/editor-layer-index/sources/north-america/us/TIGER2017RoadsOverlay.png",overlay:true},{id:"tirol.gv.at-contourlines",name:"Tiris: contour lines",type:"wms",template:"https://gis.tirol.gv.at/arcgis/services/Service_Public/terrain/MapServer/WmsServer?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=Hoehenschichtlinien_20m&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",zoomExtent:[15,22],polygon:[[[10.43998,47.59768],[10.47886,47.59925],[10.50277,47.58656],[10.4838,47.55979],[10.51312,47.5435],[10.57177,47.54582],[10.57004,47.56212],[10.60109,47.58074],[10.63904,47.5691],[10.70804,47.57027],[10.71149,47.54932],[10.76841,47.55048],[10.78566,47.52603],[10.89605,47.55048],[10.93572,47.5237],[10.934,47.50506],[10.89088,47.49573],[10.95125,47.49107],[10.9547,47.46776],[11.003,47.43276],[10.99092,47.40825],[11.10304,47.40475],[11.11511,47.41993],[11.20998,47.4456],[11.26863,47.44093],[11.26691,47.41059],[11.29451,47.4421],[11.33073,47.46076],[11.38248,47.45843],[11.3704,47.47592],[11.4394,47.53069],[11.467,47.51787],[11.57394,47.5237],[11.57567,47.55863],[11.59809,47.59121],[11.63431,47.60633],[11.66881,47.5947],[11.793,47.60284],[11.83958,47.59238],[11.84993,47.61098],[12.00689,47.63656],[12.03622,47.62494],[12.07761,47.62726],[12.10866,47.61912],[12.19491,47.62261],[12.15351,47.68768],[12.15868,47.7167],[12.18111,47.71206],[12.21906,47.72482],[12.24148,47.75382],[12.27253,47.7515],[12.2846,47.73178],[12.26563,47.69581],[12.33635,47.7109],[12.37602,47.69581],[12.44329,47.70277],[12.45364,47.69232],[12.45364,47.6749],[12.51057,47.63191],[12.53126,47.64586],[12.58991,47.63424],[12.57956,47.61098],[12.66581,47.5947],[12.67961,47.57492],[12.64511,47.55048],[12.66753,47.53185],[12.68478,47.50389],[12.71238,47.48175],[12.66753,47.45609],[12.64166,47.45959],[12.65028,47.44326],[12.62096,47.40709],[12.57439,47.38607],[12.55024,47.39658],[12.49159,47.37205],[12.50884,47.35102],[12.48814,47.32063],[12.43467,47.32297],[12.41397,47.30426],[12.36395,47.30894],[12.3122,47.32764],[12.2708,47.29841],[12.17766,47.29373],[12.14833,47.28437],[12.11729,47.29958],[12.09831,47.27501],[12.12591,47.25042],[12.09659,47.19771],[12.11039,47.14846],[12.14143,47.10974],[12.13799,47.08977],[12.15006,47.07568],[12.00517,47.04395],[11.92065,47.02985],[11.83095,46.99103],[11.78783,46.98633],[11.77403,46.9675],[11.73091,46.96514],[11.70676,46.98986],[11.64294,46.99456],[11.61189,47.00515],[11.53254,46.97809],[11.49287,47.00868],[11.44457,46.9675],[11.4049,46.96161],[11.34453,46.98633],[11.20309,46.9569],[11.17549,46.96161],[11.17721,46.94395],[11.14616,46.92275],[11.12546,46.92275],[11.10822,46.90389],[11.11511,46.88857],[11.08234,46.85319],[11.09614,46.8237],[11.05129,46.80245],[11.02369,46.76229],[10.91848,46.77056],[10.88398,46.75756],[10.84085,46.77292],[10.82361,46.76938],[10.79083,46.78946],[10.75633,46.77883],[10.72529,46.79064],[10.74771,46.82724],[10.69424,46.84494],[10.67354,46.86971],[10.60799,46.85319],[10.55452,46.82724],[10.52002,46.83904],[10.46827,46.83668],[10.45103,46.8815],[10.47517,46.93217],[10.41308,46.95572],[10.3941,46.98868],[10.3665,46.98044],[10.33891,46.94748],[10.32856,46.91803],[10.29751,46.91332],[10.25956,46.9251],[10.23886,46.86263],[10.16642,46.83904],[10.13537,46.8473],[10.13192,46.87207],[10.10604,46.88621],[10.09224,46.92746],[10.12502,46.95219],[10.14572,47.00044],[10.11294,47.02514],[10.15262,47.04983],[10.13019,47.06276],[10.13364,47.09095],[10.15952,47.12617],[10.20091,47.1426],[10.19229,47.20005],[10.20954,47.21294],[10.18711,47.23989],[10.20091,47.25628],[10.16814,47.2633],[10.16814,47.28086],[10.20264,47.29139],[10.24404,47.28905],[10.33373,47.32063],[10.38893,47.39074],[10.4148,47.39424],[10.4562,47.43626],[10.44758,47.48175],[10.41998,47.50506],[10.4424,47.55514],[10.41308,47.57143],[10.43998,47.59768]],[[12.4019,47.16019],[12.35705,47.13908],[12.35015,47.11208],[12.31048,47.10739],[12.25528,47.07215],[12.21388,47.05923],[12.20008,47.02632],[12.14488,47.03102],[12.11556,47.0075],[12.13626,46.95926],[12.16731,46.9357],[12.14316,46.91096],[12.18973,46.90036],[12.21733,46.86617],[12.25528,46.88386],[12.27425,46.88268],[12.2984,46.83432],[12.27598,46.82016],[12.27943,46.77765],[12.35015,46.77174],[12.3812,46.715],[12.44329,46.68425],[12.51402,46.67004],[12.56576,46.64873],[12.62958,46.65347],[12.70203,46.65347],[12.70375,46.69844],[12.72963,46.70081],[12.72273,46.73747],[12.80207,46.74929],[12.85382,46.74456],[12.90384,46.77174],[12.92799,46.75992],[12.95732,46.77647],[12.97974,46.79772],[12.89522,46.83314],[12.89522,46.84848],[12.8452,46.86381],[12.84692,46.91568],[12.7969,46.93099],[12.78828,46.94748],[12.7486,46.96867],[12.73653,46.99691],[12.78138,47.0416],[12.7624,47.051],[12.7141,47.04513],[12.71065,47.07803],[12.62268,47.12617],[12.56921,47.14142],[12.55196,47.13321],[12.52609,47.15433],[12.48297,47.16488],[12.46054,47.14846],[12.43467,47.15785],[12.41915,47.14377],[12.4019,47.16019]]],terms_url:"https://tiris.tirol.gv.at",terms_text:"tiris.tirol.gv.at",icon:"https://static.tirol.gv.at/plainhtml/v1/tirollogo.gif",overlay:true},{id:"tirol.gv.at-DGM",name:"Tiris: DGM (Terrain model)",type:"wms",template:"https://gis.tirol.gv.at/arcgis/services/Service_Public/terrain/MapServer/WmsServer?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=Image_Schummerung_Gelaendemodell&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[10.43998,47.59768],[10.47886,47.59925],[10.50277,47.58656],[10.4838,47.55979],[10.51312,47.5435],[10.57177,47.54582],[10.57004,47.56212],[10.60109,47.58074],[10.63904,47.5691],[10.70804,47.57027],[10.71149,47.54932],[10.76841,47.55048],[10.78566,47.52603],[10.89605,47.55048],[10.93572,47.5237],[10.934,47.50506],[10.89088,47.49573],[10.95125,47.49107],[10.9547,47.46776],[11.003,47.43276],[10.99092,47.40825],[11.10304,47.40475],[11.11511,47.41993],[11.20998,47.4456],[11.26863,47.44093],[11.26691,47.41059],[11.29451,47.4421],[11.33073,47.46076],[11.38248,47.45843],[11.3704,47.47592],[11.4394,47.53069],[11.467,47.51787],[11.57394,47.5237],[11.57567,47.55863],[11.59809,47.59121],[11.63431,47.60633],[11.66881,47.5947],[11.793,47.60284],[11.83958,47.59238],[11.84993,47.61098],[12.00689,47.63656],[12.03622,47.62494],[12.07761,47.62726],[12.10866,47.61912],[12.19491,47.62261],[12.15351,47.68768],[12.15868,47.7167],[12.18111,47.71206],[12.21906,47.72482],[12.24148,47.75382],[12.27253,47.7515],[12.2846,47.73178],[12.26563,47.69581],[12.33635,47.7109],[12.37602,47.69581],[12.44329,47.70277],[12.45364,47.69232],[12.45364,47.6749],[12.51057,47.63191],[12.53126,47.64586],[12.58991,47.63424],[12.57956,47.61098],[12.66581,47.5947],[12.67961,47.57492],[12.64511,47.55048],[12.66753,47.53185],[12.68478,47.50389],[12.71238,47.48175],[12.66753,47.45609],[12.64166,47.45959],[12.65028,47.44326],[12.62096,47.40709],[12.57439,47.38607],[12.55024,47.39658],[12.49159,47.37205],[12.50884,47.35102],[12.48814,47.32063],[12.43467,47.32297],[12.41397,47.30426],[12.36395,47.30894],[12.3122,47.32764],[12.2708,47.29841],[12.17766,47.29373],[12.14833,47.28437],[12.11729,47.29958],[12.09831,47.27501],[12.12591,47.25042],[12.09659,47.19771],[12.11039,47.14846],[12.14143,47.10974],[12.13799,47.08977],[12.15006,47.07568],[12.00517,47.04395],[11.92065,47.02985],[11.83095,46.99103],[11.78783,46.98633],[11.77403,46.9675],[11.73091,46.96514],[11.70676,46.98986],[11.64294,46.99456],[11.61189,47.00515],[11.53254,46.97809],[11.49287,47.00868],[11.44457,46.9675],[11.4049,46.96161],[11.34453,46.98633],[11.20309,46.9569],[11.17549,46.96161],[11.17721,46.94395],[11.14616,46.92275],[11.12546,46.92275],[11.10822,46.90389],[11.11511,46.88857],[11.08234,46.85319],[11.09614,46.8237],[11.05129,46.80245],[11.02369,46.76229],[10.91848,46.77056],[10.88398,46.75756],[10.84085,46.77292],[10.82361,46.76938],[10.79083,46.78946],[10.75633,46.77883],[10.72529,46.79064],[10.74771,46.82724],[10.69424,46.84494],[10.67354,46.86971],[10.60799,46.85319],[10.55452,46.82724],[10.52002,46.83904],[10.46827,46.83668],[10.45103,46.8815],[10.47517,46.93217],[10.41308,46.95572],[10.3941,46.98868],[10.3665,46.98044],[10.33891,46.94748],[10.32856,46.91803],[10.29751,46.91332],[10.25956,46.9251],[10.23886,46.86263],[10.16642,46.83904],[10.13537,46.8473],[10.13192,46.87207],[10.10604,46.88621],[10.09224,46.92746],[10.12502,46.95219],[10.14572,47.00044],[10.11294,47.02514],[10.15262,47.04983],[10.13019,47.06276],[10.13364,47.09095],[10.15952,47.12617],[10.20091,47.1426],[10.19229,47.20005],[10.20954,47.21294],[10.18711,47.23989],[10.20091,47.25628],[10.16814,47.2633],[10.16814,47.28086],[10.20264,47.29139],[10.24404,47.28905],[10.33373,47.32063],[10.38893,47.39074],[10.4148,47.39424],[10.4562,47.43626],[10.44758,47.48175],[10.41998,47.50506],[10.4424,47.55514],[10.41308,47.57143],[10.43998,47.59768]],[[12.4019,47.16019],[12.35705,47.13908],[12.35015,47.11208],[12.31048,47.10739],[12.25528,47.07215],[12.21388,47.05923],[12.20008,47.02632],[12.14488,47.03102],[12.11556,47.0075],[12.13626,46.95926],[12.16731,46.9357],[12.14316,46.91096],[12.18973,46.90036],[12.21733,46.86617],[12.25528,46.88386],[12.27425,46.88268],[12.2984,46.83432],[12.27598,46.82016],[12.27943,46.77765],[12.35015,46.77174],[12.3812,46.715],[12.44329,46.68425],[12.51402,46.67004],[12.56576,46.64873],[12.62958,46.65347],[12.70203,46.65347],[12.70375,46.69844],[12.72963,46.70081],[12.72273,46.73747],[12.80207,46.74929],[12.85382,46.74456],[12.90384,46.77174],[12.92799,46.75992],[12.95732,46.77647],[12.97974,46.79772],[12.89522,46.83314],[12.89522,46.84848],[12.8452,46.86381],[12.84692,46.91568],[12.7969,46.93099],[12.78828,46.94748],[12.7486,46.96867],[12.73653,46.99691],[12.78138,47.0416],[12.7624,47.051],[12.7141,47.04513],[12.71065,47.07803],[12.62268,47.12617],[12.56921,47.14142],[12.55196,47.13321],[12.52609,47.15433],[12.48297,47.16488],[12.46054,47.14846],[12.43467,47.15785],[12.41915,47.14377],[12.4019,47.16019]]],terms_url:"https://tiris.tirol.gv.at",terms_text:"tiris.tirol.gv.at",icon:"https://static.tirol.gv.at/plainhtml/v1/tirollogo.gif"},{id:"tirol.gv.at-DOM",name:"Tiris: DOM (Surface model)",type:"wms",template:"https://gis.tirol.gv.at/arcgis/services/Service_Public/terrain/MapServer/WmsServer?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=Image_Schummerung_Oberflaechenmodell&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[10.43998,47.59768],[10.47886,47.59925],[10.50277,47.58656],[10.4838,47.55979],[10.51312,47.5435],[10.57177,47.54582],[10.57004,47.56212],[10.60109,47.58074],[10.63904,47.5691],[10.70804,47.57027],[10.71149,47.54932],[10.76841,47.55048],[10.78566,47.52603],[10.89605,47.55048],[10.93572,47.5237],[10.934,47.50506],[10.89088,47.49573],[10.95125,47.49107],[10.9547,47.46776],[11.003,47.43276],[10.99092,47.40825],[11.10304,47.40475],[11.11511,47.41993],[11.20998,47.4456],[11.26863,47.44093],[11.26691,47.41059],[11.29451,47.4421],[11.33073,47.46076],[11.38248,47.45843],[11.3704,47.47592],[11.4394,47.53069],[11.467,47.51787],[11.57394,47.5237],[11.57567,47.55863],[11.59809,47.59121],[11.63431,47.60633],[11.66881,47.5947],[11.793,47.60284],[11.83958,47.59238],[11.84993,47.61098],[12.00689,47.63656],[12.03622,47.62494],[12.07761,47.62726],[12.10866,47.61912],[12.19491,47.62261],[12.15351,47.68768],[12.15868,47.7167],[12.18111,47.71206],[12.21906,47.72482],[12.24148,47.75382],[12.27253,47.7515],[12.2846,47.73178],[12.26563,47.69581],[12.33635,47.7109],[12.37602,47.69581],[12.44329,47.70277],[12.45364,47.69232],[12.45364,47.6749],[12.51057,47.63191],[12.53126,47.64586],[12.58991,47.63424],[12.57956,47.61098],[12.66581,47.5947],[12.67961,47.57492],[12.64511,47.55048],[12.66753,47.53185],[12.68478,47.50389],[12.71238,47.48175],[12.66753,47.45609],[12.64166,47.45959],[12.65028,47.44326],[12.62096,47.40709],[12.57439,47.38607],[12.55024,47.39658],[12.49159,47.37205],[12.50884,47.35102],[12.48814,47.32063],[12.43467,47.32297],[12.41397,47.30426],[12.36395,47.30894],[12.3122,47.32764],[12.2708,47.29841],[12.17766,47.29373],[12.14833,47.28437],[12.11729,47.29958],[12.09831,47.27501],[12.12591,47.25042],[12.09659,47.19771],[12.11039,47.14846],[12.14143,47.10974],[12.13799,47.08977],[12.15006,47.07568],[12.00517,47.04395],[11.92065,47.02985],[11.83095,46.99103],[11.78783,46.98633],[11.77403,46.9675],[11.73091,46.96514],[11.70676,46.98986],[11.64294,46.99456],[11.61189,47.00515],[11.53254,46.97809],[11.49287,47.00868],[11.44457,46.9675],[11.4049,46.96161],[11.34453,46.98633],[11.20309,46.9569],[11.17549,46.96161],[11.17721,46.94395],[11.14616,46.92275],[11.12546,46.92275],[11.10822,46.90389],[11.11511,46.88857],[11.08234,46.85319],[11.09614,46.8237],[11.05129,46.80245],[11.02369,46.76229],[10.91848,46.77056],[10.88398,46.75756],[10.84085,46.77292],[10.82361,46.76938],[10.79083,46.78946],[10.75633,46.77883],[10.72529,46.79064],[10.74771,46.82724],[10.69424,46.84494],[10.67354,46.86971],[10.60799,46.85319],[10.55452,46.82724],[10.52002,46.83904],[10.46827,46.83668],[10.45103,46.8815],[10.47517,46.93217],[10.41308,46.95572],[10.3941,46.98868],[10.3665,46.98044],[10.33891,46.94748],[10.32856,46.91803],[10.29751,46.91332],[10.25956,46.9251],[10.23886,46.86263],[10.16642,46.83904],[10.13537,46.8473],[10.13192,46.87207],[10.10604,46.88621],[10.09224,46.92746],[10.12502,46.95219],[10.14572,47.00044],[10.11294,47.02514],[10.15262,47.04983],[10.13019,47.06276],[10.13364,47.09095],[10.15952,47.12617],[10.20091,47.1426],[10.19229,47.20005],[10.20954,47.21294],[10.18711,47.23989],[10.20091,47.25628],[10.16814,47.2633],[10.16814,47.28086],[10.20264,47.29139],[10.24404,47.28905],[10.33373,47.32063],[10.38893,47.39074],[10.4148,47.39424],[10.4562,47.43626],[10.44758,47.48175],[10.41998,47.50506],[10.4424,47.55514],[10.41308,47.57143],[10.43998,47.59768]],[[12.4019,47.16019],[12.35705,47.13908],[12.35015,47.11208],[12.31048,47.10739],[12.25528,47.07215],[12.21388,47.05923],[12.20008,47.02632],[12.14488,47.03102],[12.11556,47.0075],[12.13626,46.95926],[12.16731,46.9357],[12.14316,46.91096],[12.18973,46.90036],[12.21733,46.86617],[12.25528,46.88386],[12.27425,46.88268],[12.2984,46.83432],[12.27598,46.82016],[12.27943,46.77765],[12.35015,46.77174],[12.3812,46.715],[12.44329,46.68425],[12.51402,46.67004],[12.56576,46.64873],[12.62958,46.65347],[12.70203,46.65347],[12.70375,46.69844],[12.72963,46.70081],[12.72273,46.73747],[12.80207,46.74929],[12.85382,46.74456],[12.90384,46.77174],[12.92799,46.75992],[12.95732,46.77647],[12.97974,46.79772],[12.89522,46.83314],[12.89522,46.84848],[12.8452,46.86381],[12.84692,46.91568],[12.7969,46.93099],[12.78828,46.94748],[12.7486,46.96867],[12.73653,46.99691],[12.78138,47.0416],[12.7624,47.051],[12.7141,47.04513],[12.71065,47.07803],[12.62268,47.12617],[12.56921,47.14142],[12.55196,47.13321],[12.52609,47.15433],[12.48297,47.16488],[12.46054,47.14846],[12.43467,47.15785],[12.41915,47.14377],[12.4019,47.16019]]],terms_url:"https://tiris.tirol.gv.at",terms_text:"tiris.tirol.gv.at",icon:"https://static.tirol.gv.at/plainhtml/v1/tirollogo.gif"},{id:"tirol.gv.at-orthofoto",name:"Tiris: orthophoto",type:"wms",template:"https://gis.tirol.gv.at/arcgis/services/Service_Public/orthofoto/MapServer/WmsServer?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=Image_Aktuell_RGB&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[10.43998,47.59768],[10.47886,47.59925],[10.50277,47.58656],[10.4838,47.55979],[10.51312,47.5435],[10.57177,47.54582],[10.57004,47.56212],[10.60109,47.58074],[10.63904,47.5691],[10.70804,47.57027],[10.71149,47.54932],[10.76841,47.55048],[10.78566,47.52603],[10.89605,47.55048],[10.93572,47.5237],[10.934,47.50506],[10.89088,47.49573],[10.95125,47.49107],[10.9547,47.46776],[11.003,47.43276],[10.99092,47.40825],[11.10304,47.40475],[11.11511,47.41993],[11.20998,47.4456],[11.26863,47.44093],[11.26691,47.41059],[11.29451,47.4421],[11.33073,47.46076],[11.38248,47.45843],[11.3704,47.47592],[11.4394,47.53069],[11.467,47.51787],[11.57394,47.5237],[11.57567,47.55863],[11.59809,47.59121],[11.63431,47.60633],[11.66881,47.5947],[11.793,47.60284],[11.83958,47.59238],[11.84993,47.61098],[12.00689,47.63656],[12.03622,47.62494],[12.07761,47.62726],[12.10866,47.61912],[12.19491,47.62261],[12.15351,47.68768],[12.15868,47.7167],[12.18111,47.71206],[12.21906,47.72482],[12.24148,47.75382],[12.27253,47.7515],[12.2846,47.73178],[12.26563,47.69581],[12.33635,47.7109],[12.37602,47.69581],[12.44329,47.70277],[12.45364,47.69232],[12.45364,47.6749],[12.51057,47.63191],[12.53126,47.64586],[12.58991,47.63424],[12.57956,47.61098],[12.66581,47.5947],[12.67961,47.57492],[12.64511,47.55048],[12.66753,47.53185],[12.68478,47.50389],[12.71238,47.48175],[12.66753,47.45609],[12.64166,47.45959],[12.65028,47.44326],[12.62096,47.40709],[12.57439,47.38607],[12.55024,47.39658],[12.49159,47.37205],[12.50884,47.35102],[12.48814,47.32063],[12.43467,47.32297],[12.41397,47.30426],[12.36395,47.30894],[12.3122,47.32764],[12.2708,47.29841],[12.17766,47.29373],[12.14833,47.28437],[12.11729,47.29958],[12.09831,47.27501],[12.12591,47.25042],[12.09659,47.19771],[12.11039,47.14846],[12.14143,47.10974],[12.13799,47.08977],[12.15006,47.07568],[12.00517,47.04395],[11.92065,47.02985],[11.83095,46.99103],[11.78783,46.98633],[11.77403,46.9675],[11.73091,46.96514],[11.70676,46.98986],[11.64294,46.99456],[11.61189,47.00515],[11.53254,46.97809],[11.49287,47.00868],[11.44457,46.9675],[11.4049,46.96161],[11.34453,46.98633],[11.20309,46.9569],[11.17549,46.96161],[11.17721,46.94395],[11.14616,46.92275],[11.12546,46.92275],[11.10822,46.90389],[11.11511,46.88857],[11.08234,46.85319],[11.09614,46.8237],[11.05129,46.80245],[11.02369,46.76229],[10.91848,46.77056],[10.88398,46.75756],[10.84085,46.77292],[10.82361,46.76938],[10.79083,46.78946],[10.75633,46.77883],[10.72529,46.79064],[10.74771,46.82724],[10.69424,46.84494],[10.67354,46.86971],[10.60799,46.85319],[10.55452,46.82724],[10.52002,46.83904],[10.46827,46.83668],[10.45103,46.8815],[10.47517,46.93217],[10.41308,46.95572],[10.3941,46.98868],[10.3665,46.98044],[10.33891,46.94748],[10.32856,46.91803],[10.29751,46.91332],[10.25956,46.9251],[10.23886,46.86263],[10.16642,46.83904],[10.13537,46.8473],[10.13192,46.87207],[10.10604,46.88621],[10.09224,46.92746],[10.12502,46.95219],[10.14572,47.00044],[10.11294,47.02514],[10.15262,47.04983],[10.13019,47.06276],[10.13364,47.09095],[10.15952,47.12617],[10.20091,47.1426],[10.19229,47.20005],[10.20954,47.21294],[10.18711,47.23989],[10.20091,47.25628],[10.16814,47.2633],[10.16814,47.28086],[10.20264,47.29139],[10.24404,47.28905],[10.33373,47.32063],[10.38893,47.39074],[10.4148,47.39424],[10.4562,47.43626],[10.44758,47.48175],[10.41998,47.50506],[10.4424,47.55514],[10.41308,47.57143],[10.43998,47.59768]],[[12.4019,47.16019],[12.35705,47.13908],[12.35015,47.11208],[12.31048,47.10739],[12.25528,47.07215],[12.21388,47.05923],[12.20008,47.02632],[12.14488,47.03102],[12.11556,47.0075],[12.13626,46.95926],[12.16731,46.9357],[12.14316,46.91096],[12.18973,46.90036],[12.21733,46.86617],[12.25528,46.88386],[12.27425,46.88268],[12.2984,46.83432],[12.27598,46.82016],[12.27943,46.77765],[12.35015,46.77174],[12.3812,46.715],[12.44329,46.68425],[12.51402,46.67004],[12.56576,46.64873],[12.62958,46.65347],[12.70203,46.65347],[12.70375,46.69844],[12.72963,46.70081],[12.72273,46.73747],[12.80207,46.74929],[12.85382,46.74456],[12.90384,46.77174],[12.92799,46.75992],[12.95732,46.77647],[12.97974,46.79772],[12.89522,46.83314],[12.89522,46.84848],[12.8452,46.86381],[12.84692,46.91568],[12.7969,46.93099],[12.78828,46.94748],[12.7486,46.96867],[12.73653,46.99691],[12.78138,47.0416],[12.7624,47.051],[12.7141,47.04513],[12.71065,47.07803],[12.62268,47.12617],[12.56921,47.14142],[12.55196,47.13321],[12.52609,47.15433],[12.48297,47.16488],[12.46054,47.14846],[12.43467,47.15785],[12.41915,47.14377],[12.4019,47.16019]]],terms_url:"https://tiris.tirol.gv.at",terms_text:"tiris.tirol.gv.at",icon:"https://static.tirol.gv.at/plainhtml/v1/tirollogo.gif"},{id:"tirol.gv.at-orthofoto-cir",name:"Tiris: orthophoto infrared",type:"wms",template:"https://gis.tirol.gv.at/arcgis/services/Service_Public/orthofoto/MapServer/WmsServer?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=Image_Aktuell_CIR&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[10.43998,47.59768],[10.47886,47.59925],[10.50277,47.58656],[10.4838,47.55979],[10.51312,47.5435],[10.57177,47.54582],[10.57004,47.56212],[10.60109,47.58074],[10.63904,47.5691],[10.70804,47.57027],[10.71149,47.54932],[10.76841,47.55048],[10.78566,47.52603],[10.89605,47.55048],[10.93572,47.5237],[10.934,47.50506],[10.89088,47.49573],[10.95125,47.49107],[10.9547,47.46776],[11.003,47.43276],[10.99092,47.40825],[11.10304,47.40475],[11.11511,47.41993],[11.20998,47.4456],[11.26863,47.44093],[11.26691,47.41059],[11.29451,47.4421],[11.33073,47.46076],[11.38248,47.45843],[11.3704,47.47592],[11.4394,47.53069],[11.467,47.51787],[11.57394,47.5237],[11.57567,47.55863],[11.59809,47.59121],[11.63431,47.60633],[11.66881,47.5947],[11.793,47.60284],[11.83958,47.59238],[11.84993,47.61098],[12.00689,47.63656],[12.03622,47.62494],[12.07761,47.62726],[12.10866,47.61912],[12.19491,47.62261],[12.15351,47.68768],[12.15868,47.7167],[12.18111,47.71206],[12.21906,47.72482],[12.24148,47.75382],[12.27253,47.7515],[12.2846,47.73178],[12.26563,47.69581],[12.33635,47.7109],[12.37602,47.69581],[12.44329,47.70277],[12.45364,47.69232],[12.45364,47.6749],[12.51057,47.63191],[12.53126,47.64586],[12.58991,47.63424],[12.57956,47.61098],[12.66581,47.5947],[12.67961,47.57492],[12.64511,47.55048],[12.66753,47.53185],[12.68478,47.50389],[12.71238,47.48175],[12.66753,47.45609],[12.64166,47.45959],[12.65028,47.44326],[12.62096,47.40709],[12.57439,47.38607],[12.55024,47.39658],[12.49159,47.37205],[12.50884,47.35102],[12.48814,47.32063],[12.43467,47.32297],[12.41397,47.30426],[12.36395,47.30894],[12.3122,47.32764],[12.2708,47.29841],[12.17766,47.29373],[12.14833,47.28437],[12.11729,47.29958],[12.09831,47.27501],[12.12591,47.25042],[12.09659,47.19771],[12.11039,47.14846],[12.14143,47.10974],[12.13799,47.08977],[12.15006,47.07568],[12.00517,47.04395],[11.92065,47.02985],[11.83095,46.99103],[11.78783,46.98633],[11.77403,46.9675],[11.73091,46.96514],[11.70676,46.98986],[11.64294,46.99456],[11.61189,47.00515],[11.53254,46.97809],[11.49287,47.00868],[11.44457,46.9675],[11.4049,46.96161],[11.34453,46.98633],[11.20309,46.9569],[11.17549,46.96161],[11.17721,46.94395],[11.14616,46.92275],[11.12546,46.92275],[11.10822,46.90389],[11.11511,46.88857],[11.08234,46.85319],[11.09614,46.8237],[11.05129,46.80245],[11.02369,46.76229],[10.91848,46.77056],[10.88398,46.75756],[10.84085,46.77292],[10.82361,46.76938],[10.79083,46.78946],[10.75633,46.77883],[10.72529,46.79064],[10.74771,46.82724],[10.69424,46.84494],[10.67354,46.86971],[10.60799,46.85319],[10.55452,46.82724],[10.52002,46.83904],[10.46827,46.83668],[10.45103,46.8815],[10.47517,46.93217],[10.41308,46.95572],[10.3941,46.98868],[10.3665,46.98044],[10.33891,46.94748],[10.32856,46.91803],[10.29751,46.91332],[10.25956,46.9251],[10.23886,46.86263],[10.16642,46.83904],[10.13537,46.8473],[10.13192,46.87207],[10.10604,46.88621],[10.09224,46.92746],[10.12502,46.95219],[10.14572,47.00044],[10.11294,47.02514],[10.15262,47.04983],[10.13019,47.06276],[10.13364,47.09095],[10.15952,47.12617],[10.20091,47.1426],[10.19229,47.20005],[10.20954,47.21294],[10.18711,47.23989],[10.20091,47.25628],[10.16814,47.2633],[10.16814,47.28086],[10.20264,47.29139],[10.24404,47.28905],[10.33373,47.32063],[10.38893,47.39074],[10.4148,47.39424],[10.4562,47.43626],[10.44758,47.48175],[10.41998,47.50506],[10.4424,47.55514],[10.41308,47.57143],[10.43998,47.59768]],[[12.4019,47.16019],[12.35705,47.13908],[12.35015,47.11208],[12.31048,47.10739],[12.25528,47.07215],[12.21388,47.05923],[12.20008,47.02632],[12.14488,47.03102],[12.11556,47.0075],[12.13626,46.95926],[12.16731,46.9357],[12.14316,46.91096],[12.18973,46.90036],[12.21733,46.86617],[12.25528,46.88386],[12.27425,46.88268],[12.2984,46.83432],[12.27598,46.82016],[12.27943,46.77765],[12.35015,46.77174],[12.3812,46.715],[12.44329,46.68425],[12.51402,46.67004],[12.56576,46.64873],[12.62958,46.65347],[12.70203,46.65347],[12.70375,46.69844],[12.72963,46.70081],[12.72273,46.73747],[12.80207,46.74929],[12.85382,46.74456],[12.90384,46.77174],[12.92799,46.75992],[12.95732,46.77647],[12.97974,46.79772],[12.89522,46.83314],[12.89522,46.84848],[12.8452,46.86381],[12.84692,46.91568],[12.7969,46.93099],[12.78828,46.94748],[12.7486,46.96867],[12.73653,46.99691],[12.78138,47.0416],[12.7624,47.051],[12.7141,47.04513],[12.71065,47.07803],[12.62268,47.12617],[12.56921,47.14142],[12.55196,47.13321],[12.52609,47.15433],[12.48297,47.16488],[12.46054,47.14846],[12.43467,47.15785],[12.41915,47.14377],[12.4019,47.16019]]],terms_url:"https://tiris.tirol.gv.at",terms_text:"tiris.tirol.gv.at",icon:"https://static.tirol.gv.at/plainhtml/v1/tirollogo.gif"},{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",endDate:"2010-07-20T00:00:00.000Z",startDate:"2013-07-19T00:00:00.000Z",zoomExtent:[0,20],polygon:[[[5.96175,50.17631],[6.02627,50.18496],[6.03318,50.16395],[6.06069,50.15536],[6.07668,50.15913],[6.07824,50.17255],[6.10176,50.17199],[6.1225,50.16437],[6.1201,50.15594],[6.1277,50.14993],[6.11323,50.13739],[6.12369,50.13719],[6.14093,50.1305],[6.13555,50.11899],[6.13808,50.10263],[6.13108,50.09964],[6.13547,50.09119],[6.12194,50.09059],[6.12634,50.07817],[6.13186,50.07348],[6.12117,50.064],[6.11444,50.06139],[6.11563,50.05817],[6.12361,50.06323],[6.13661,50.04178],[6.13034,50.02975],[6.14821,50.02307],[6.13868,50.01572],[6.13594,50.01485],[6.13138,50.01905],[6.13024,50.01819],[6.13934,50.01116],[6.1517,50.01058],[6.14546,49.99689],[6.13966,49.9994],[6.13852,49.99829],[6.14218,49.99535],[6.15023,49.99518],[6.15625,49.98867],[6.17305,49.98589],[6.17348,49.98344],[6.17035,49.98376],[6.16549,49.97115],[6.17151,49.96298],[6.1763,49.962],[6.17995,49.95386],[6.18339,49.9548],[6.17983,49.96307],[6.18331,49.9686],[6.19277,49.97158],[6.19978,49.95352],[6.20707,49.95672],[6.21269,49.9514],[6.22502,49.95039],[6.22044,49.94369],[6.22824,49.93726],[6.22635,49.92766],[6.21913,49.92354],[6.22986,49.92125],[6.23603,49.91355],[6.23187,49.91064],[6.22769,49.91062],[6.23229,49.9072],[6.23381,49.90028],[6.24692,49.89535],[6.25781,49.88724],[6.26301,49.88101],[6.27646,49.87725],[6.28113,49.87957],[6.29166,49.87548],[6.2977,49.86673],[6.30989,49.87107],[6.31532,49.8673],[6.31465,49.86057],[6.32361,49.85188],[6.32158,49.8409],[6.32741,49.83673],[6.33656,49.83998],[6.33937,49.8507],[6.36465,49.85164],[6.4022,49.82098],[6.42643,49.81629],[6.42807,49.81186],[6.43097,49.81129],[6.44161,49.81547],[6.44344,49.81233],[6.45366,49.81275],[6.46454,49.81975],[6.47057,49.82385],[6.49681,49.81277],[6.50669,49.80993],[6.51155,49.80238],[6.51485,49.80513],[6.5196,49.81446],[6.52981,49.81048],[6.53225,49.80686],[6.53083,49.80116],[6.50622,49.78899],[6.51917,49.78344],[6.51105,49.77422],[6.52056,49.76818],[6.52052,49.76134],[6.50373,49.75086],[6.50263,49.73298],[6.50727,49.72938],[6.51809,49.7242],[6.51642,49.72129],[6.51176,49.72016],[6.50479,49.725],[6.49891,49.72639],[6.49558,49.72443],[6.50712,49.71655],[6.50788,49.71215],[6.5046,49.71227],[6.42714,49.66237],[6.4399,49.66025],[6.44251,49.65591],[6.42178,49.61809],[6.39898,49.60094],[6.37941,49.59526],[6.37551,49.58809],[6.38443,49.5801],[6.38119,49.57509],[6.36909,49.5783],[6.35791,49.57166],[6.3849,49.55817],[6.38009,49.54856],[6.35855,49.53296],[6.35932,49.52481],[6.37076,49.50545],[6.37056,49.45732],[6.3334,49.46493],[6.32189,49.47244],[6.29503,49.47928],[6.28789,49.48379],[6.27191,49.49995],[6.24133,49.50693],[6.19669,49.50331],[6.17337,49.50577],[6.16086,49.50085],[6.1671,49.49006],[6.14018,49.48525],[6.12937,49.48803],[6.12725,49.47081],[6.1014,49.46726],[6.10483,49.45076],[6.08167,49.45417],[6.07722,49.46139],[6.05917,49.46306],[6.05222,49.46028],[6.04421,49.44553],[6.02529,49.44703],[6.02154,49.45127],[6.01574,49.44885],[5.99412,49.45301],[5.97657,49.44885],[5.97773,49.45955],[5.97232,49.46087],[5.96891,49.48202],[5.9616,49.49026],[5.91578,49.49835],[5.89033,49.4948],[5.86332,49.50006],[5.84897,49.50826],[5.84828,49.51397],[5.83641,49.51817],[5.83187,49.52639],[5.84308,49.53081],[5.83562,49.54114],[5.81625,49.53325],[5.8052,49.54272],[5.85943,49.57158],[5.86866,49.587],[5.86289,49.58525],[5.8511,49.58379],[5.84712,49.58961],[5.84565,49.5981],[5.8694,49.6106],[5.88182,49.63815],[5.89998,49.63907],[5.89934,49.66239],[5.85656,49.67628],[5.85628,49.68211],[5.8757,49.71118],[5.86481,49.72331],[5.84325,49.71822],[5.82191,49.72128],[5.82489,49.73767],[5.82073,49.74878],[5.78626,49.79079],[5.76517,49.78961],[5.75094,49.79094],[5.74159,49.82126],[5.74581,49.82435],[5.7372,49.83353],[5.74053,49.84142],[5.74701,49.84048],[5.74624,49.84783],[5.75399,49.84878],[5.74066,49.85152],[5.75229,49.85922],[5.74955,49.87554],[5.77567,49.87438],[5.77505,49.88057],[5.7346,49.89341],[5.73303,49.90285],[5.75783,49.91737],[5.76039,49.93252],[5.77073,49.93711],[5.76878,49.94239],[5.7688,49.96104],[5.78672,49.96816],[5.80524,49.96677],[5.80652,49.97321],[5.83129,49.97995],[5.83462,49.98656],[5.81806,49.99936],[5.81561,50.01437],[5.84792,50.02809],[5.86189,50.04581],[5.85087,50.0563],[5.85781,50.07186],[5.881,50.08069],[5.89196,50.12041],[5.95286,50.13384],[5.96175,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",icon:"https://www.geoportail.lu/static/img/lion.png"},{id:"Torokbalint-orthophoto-2013",name:"Törökbálint orthophoto 2013",type:"wms",template:"https://terkep.torokbalint.hu/mapproxy/service?FORMAT=image/png&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=ORTO_2013_5CM_2013SZEPT_TAKARASSAL_512_512&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}&TRANSPARENT=true",projection:"EPSG:3857",endDate:"2013-09-01T00:00:00.000Z",startDate:"2013-09-01T00:00:00.000Z",polygon:[[[18.91731,47.40854],[18.91691,47.40849],[18.91606,47.40885],[18.91565,47.40905],[18.91458,47.40938],[18.91385,47.4097],[18.91376,47.40976],[18.91314,47.41038],[18.9122,47.41098],[18.91041,47.41175],[18.90932,47.41258],[18.90841,47.41317],[18.90676,47.41443],[18.90481,47.41568],[18.90362,47.41597],[18.90317,47.41616],[18.90062,47.41742],[18.90042,47.41755],[18.89968,47.41797],[18.89888,47.41818],[18.89814,47.41835],[18.89752,47.41855],[18.89666,47.41901],[18.8958,47.41954],[18.89421,47.4205],[18.89055,47.42209],[18.88743,47.42332],[18.88554,47.42424],[18.88436,47.42476],[18.88189,47.42553],[18.88085,47.42598],[18.8801,47.42629],[18.87956,47.42649],[18.87741,47.42738],[18.87602,47.42789],[18.87508,47.42836],[18.87281,47.42934],[18.87164,47.42968],[18.8714,47.43001],[18.87259,47.4323],[18.87273,47.43278],[18.87274,47.43324],[18.87244,47.43482],[18.87206,47.43526],[18.86891,47.43712],[18.86561,47.4375],[18.86466,47.43774],[18.86404,47.43809],[18.86378,47.43791],[18.8634,47.43784],[18.863,47.43798],[18.85195,47.44715],[18.85217,47.44847],[18.8593,47.45387],[18.85839,47.45512],[18.85777,47.45568],[18.85718,47.456],[18.8572,47.45636],[18.86015,47.45839],[18.86194,47.4595],[18.86099,47.46071],[18.85979,47.46201],[18.85929,47.46236],[18.85859,47.46272],[18.85713,47.46333],[18.85634,47.4636],[18.85628,47.46403],[18.85719,47.46528],[18.85663,47.46551],[18.85653,47.4658],[18.85693,47.46656],[18.85836,47.46953],[18.85826,47.4698],[18.85827,47.46991],[18.85838,47.47019],[18.85844,47.47027],[18.85852,47.47033],[18.85862,47.47036],[18.85873,47.47038],[18.8589,47.47036],[18.86146,47.46973],[18.86277,47.46929],[18.86617,47.46785],[18.86794,47.46656],[18.86997,47.46524],[18.8708,47.46457],[18.87268,47.46333],[18.87536,47.46113],[18.87687,47.45927],[18.88943,47.45987],[18.89024,47.45988],[18.90371,47.45534],[18.90427,47.4552],[18.90493,47.45506],[18.90542,47.4551],[18.90567,47.45505],[18.90629,47.45477],[18.90648,47.45453],[18.9066,47.45447],[18.90678,47.45439],[18.90811,47.45399],[18.90837,47.45395],[18.9089,47.45384],[18.90954,47.4537],[18.91326,47.45317],[18.91353,47.4532],[18.91372,47.45317],[18.91386,47.45307],[18.91431,47.45294],[18.91598,47.453],[18.91807,47.45317],[18.91846,47.453],[18.91903,47.45161],[18.92173,47.4508],[18.92246,47.45069],[18.92418,47.45025],[18.92756,47.44989],[18.92972,47.44951],[18.93221,47.44922],[18.93347,47.44932],[18.93921,47.44935],[18.94229,47.44903],[18.94549,47.4489],[18.94826,47.4487],[18.95003,47.44824],[18.9547,47.44722],[18.95749,47.44692],[18.95802,47.44715],[18.95844,47.44708],[18.95877,47.44666],[18.96145,47.4393],[18.96368,47.4358],[18.96598,47.43288],[18.96899,47.4297],[18.9701,47.42704],[18.97009,47.42679],[18.96695,47.4246],[18.95735,47.41842],[18.95676,47.4184],[18.95606,47.41813],[18.95385,47.41739],[18.95144,47.41665],[18.95131,47.41664],[18.9327,47.41703],[18.93257,47.41696],[18.93201,47.41674],[18.93149,47.4164],[18.93114,47.41612],[18.92123,47.41091],[18.91957,47.40987],[18.91927,47.40961],[18.91731,47.40854]]],terms_url:"http://www.torokbalint.hu",terms_text:"Törökbálint",description:"5 cm resolution bald image"},{id:"Torokbalint-orthophoto-2015",name:"Törökbálint orthophoto 2015",type:"wms",template:"https://terkep.torokbalint.hu/mapproxy/service?FORMAT=image/png&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=TBORTO_2015_20160218&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}&TRANSPARENT=true",projection:"EPSG:3857",endDate:"2015-01-01T00:00:00.000Z",startDate:"2015-01-01T00:00:00.000Z",polygon:[[[18.91731,47.40854],[18.91691,47.40849],[18.91606,47.40885],[18.91565,47.40905],[18.91458,47.40938],[18.91385,47.4097],[18.91376,47.40976],[18.91314,47.41038],[18.9122,47.41098],[18.91041,47.41175],[18.90932,47.41258],[18.90841,47.41317],[18.90676,47.41443],[18.90481,47.41568],[18.90362,47.41597],[18.90317,47.41616],[18.90062,47.41742],[18.90042,47.41755],[18.89968,47.41797],[18.89888,47.41818],[18.89814,47.41835],[18.89752,47.41855],[18.89666,47.41901],[18.8958,47.41954],[18.89421,47.4205],[18.89055,47.42209],[18.88743,47.42332],[18.88554,47.42424],[18.88436,47.42476],[18.88189,47.42553],[18.88085,47.42598],[18.8801,47.42629],[18.87956,47.42649],[18.87741,47.42738],[18.87602,47.42789],[18.87508,47.42836],[18.87281,47.42934],[18.87164,47.42968],[18.8714,47.43001],[18.87259,47.4323],[18.87273,47.43278],[18.87274,47.43324],[18.87244,47.43482],[18.87206,47.43526],[18.86891,47.43712],[18.86561,47.4375],[18.86466,47.43774],[18.86404,47.43809],[18.86378,47.43791],[18.8634,47.43784],[18.863,47.43798],[18.85195,47.44715],[18.85217,47.44847],[18.8593,47.45387],[18.85839,47.45512],[18.85777,47.45568],[18.85718,47.456],[18.8572,47.45636],[18.86015,47.45839],[18.86194,47.4595],[18.86099,47.46071],[18.85979,47.46201],[18.85929,47.46236],[18.85859,47.46272],[18.85713,47.46333],[18.85634,47.4636],[18.85628,47.46403],[18.85719,47.46528],[18.85663,47.46551],[18.85653,47.4658],[18.85693,47.46656],[18.85836,47.46953],[18.85826,47.4698],[18.85827,47.46991],[18.85838,47.47019],[18.85844,47.47027],[18.85852,47.47033],[18.85862,47.47036],[18.85873,47.47038],[18.8589,47.47036],[18.86146,47.46973],[18.86277,47.46929],[18.86617,47.46785],[18.86794,47.46656],[18.86997,47.46524],[18.8708,47.46457],[18.87268,47.46333],[18.87536,47.46113],[18.87687,47.45927],[18.88943,47.45987],[18.89024,47.45988],[18.90371,47.45534],[18.90427,47.4552],[18.90493,47.45506],[18.90542,47.4551],[18.90567,47.45505],[18.90629,47.45477],[18.90648,47.45453],[18.9066,47.45447],[18.90678,47.45439],[18.90811,47.45399],[18.90837,47.45395],[18.9089,47.45384],[18.90954,47.4537],[18.91326,47.45317],[18.91353,47.4532],[18.91372,47.45317],[18.91386,47.45307],[18.91431,47.45294],[18.91598,47.453],[18.91807,47.45317],[18.91846,47.453],[18.91903,47.45161],[18.92173,47.4508],[18.92246,47.45069],[18.92418,47.45025],[18.92756,47.44989],[18.92972,47.44951],[18.93221,47.44922],[18.93347,47.44932],[18.93921,47.44935],[18.94229,47.44903],[18.94549,47.4489],[18.94826,47.4487],[18.95003,47.44824],[18.9547,47.44722],[18.95749,47.44692],[18.95802,47.44715],[18.95844,47.44708],[18.95877,47.44666],[18.96145,47.4393],[18.96368,47.4358],[18.96598,47.43288],[18.96899,47.4297],[18.9701,47.42704],[18.97009,47.42679],[18.96695,47.4246],[18.95735,47.41842],[18.95676,47.4184],[18.95606,47.41813],[18.95385,47.41739],[18.95144,47.41665],[18.95131,47.41664],[18.9327,47.41703],[18.93257,47.41696],[18.93201,47.41674],[18.93149,47.4164],[18.93114,47.41612],[18.92123,47.41091],[18.91957,47.40987],[18.91927,47.40961],[18.91731,47.40854]]],terms_url:"http://www.torokbalint.hu/",terms_text:"Törökbálint",best:true,description:"5 cm resolution bald image"},{id:"Toulouse-Orthophotoplan-2007",name:"Toulouse - Orthophotoplan 2007",type:"wms",template:"https://wms.plan.toulouse.fr/geocache/wms?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=ortho2007&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",endDate:"2007-01-01T00:00:00.000Z",startDate:"2007-01-01T00:00:00.000Z",zoomExtent:[0,22],polygon:[[[1.192,43.63288],[1.20154,43.63297],[1.20111,43.65549],[1.2228,43.6557],[1.22262,43.66534],[1.22753,43.66538],[1.22754,43.66564],[1.23376,43.66569],[1.23376,43.66502],[1.23512,43.66503],[1.23509,43.66707],[1.24436,43.66716],[1.24416,43.67439],[1.2494,43.67443],[1.2494,43.67466],[1.25557,43.67472],[1.25557,43.67445],[1.25695,43.67447],[1.25688,43.67853],[1.28749,43.67883],[1.28708,43.70132],[1.30882,43.70146],[1.30865,43.71277],[1.33033,43.71295],[1.33002,43.73052],[1.33671,43.73058],[1.33673,43.73122],[1.37343,43.73105],[1.37358,43.72458],[1.46045,43.72529],[1.46078,43.7028],[1.48249,43.70295],[1.48298,43.66921],[1.50468,43.66936],[1.50484,43.65812],[1.52655,43.65827],[1.52669,43.64703],[1.54837,43.64716],[1.54854,43.63594],[1.57022,43.63608],[1.57051,43.61358],[1.54882,43.61343],[1.5491,43.59095],[1.57077,43.59107],[1.57094,43.57983],[1.57937,43.57989],[1.57948,43.57377],[1.58091,43.57378],[1.58109,43.55738],[1.57123,43.55731],[1.57165,43.52355],[1.39848,43.52226],[1.39865,43.51101],[1.3121,43.51025],[1.3119,43.52152],[1.29026,43.52131],[1.28986,43.54382],[1.31152,43.54401],[1.31133,43.55526],[1.30369,43.55519],[1.30361,43.55951],[1.29554,43.55943],[1.29554,43.55955],[1.28956,43.55945],[1.28929,43.57754],[1.26757,43.57736],[1.2674,43.58861],[1.25355,43.5885],[1.25338,43.59563],[1.2518,43.59563],[1.2518,43.59494],[1.23504,43.59478],[1.23504,43.5946],[1.22396,43.5946],[1.22394,43.59947],[1.21397,43.5993],[1.21388,43.60464],[1.20206,43.60448],[1.20195,43.61048],[1.19243,43.61037],[1.192,43.63288]]],terms_url:"https://wiki.openstreetmap.org/wiki/Toulouse/ToulouseMetropoleData",terms_text:"ToulouseMetropole"},{id:"Toulouse-Orthophotoplan-2011",name:"Toulouse - Orthophotoplan 2011",type:"wms",template:"https://wms.plan.toulouse.fr/geocache/wms?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=ortho2011&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",endDate:"2011-01-01T00:00:00.000Z",startDate:"2011-01-01T00:00:00.000Z",zoomExtent:[0,22],polygon:[[[1.11351,43.68676],[1.13518,43.68708],[1.13489,43.69835],[1.17829,43.69903],[1.17799,43.71028],[1.19966,43.71061],[1.19934,43.72187],[1.24274,43.72253],[1.24243,43.73375],[1.26415,43.73409],[1.26383,43.74536],[1.28553,43.74565],[1.28525,43.75693],[1.30692,43.75723],[1.30664,43.76848],[1.32834,43.76879],[1.32808,43.78003],[1.43673,43.78158],[1.43731,43.7591],[1.45901,43.75937],[1.45933,43.74815],[1.48103,43.7484],[1.48133,43.73718],[1.50303,43.73741],[1.50359,43.71497],[1.52531,43.71518],[1.52561,43.70401],[1.54727,43.70426],[1.54757,43.69304],[1.5692,43.69329],[1.56957,43.68203],[1.5912,43.68227],[1.59174,43.6598],[1.61342,43.66003],[1.61372,43.64883],[1.63538,43.64908],[1.63841,43.51407],[1.29216,43.50947],[1.29186,43.5207],[1.27021,43.5204],[1.26988,43.53164],[1.24823,43.53133],[1.2476,43.55378],[1.22596,43.55349],[1.22568,43.56472],[1.20398,43.56442],[1.20331,43.5869],[1.18162,43.58656],[1.18102,43.60904],[1.15928,43.60869],[1.15896,43.61995],[1.13726,43.61962],[1.13659,43.64209],[1.11491,43.64176],[1.11351,43.68676]]],terms_url:"https://wiki.openstreetmap.org/wiki/Toulouse/ToulouseMetropoleData",terms_text:"ToulouseMetropole"},{id:"Toulouse-Orthophotoplan-2013",name:"Toulouse - Orthophotoplan 2013",type:"wms",template:"https://wms.plan.toulouse.fr/geocache/wms?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=ortho2013&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",endDate:"2013-01-01T00:00:00.000Z",startDate:"2013-01-01T00:00:00.000Z",zoomExtent:[0,22],polygon:[[[1.11351,43.68676],[1.13518,43.68708],[1.13489,43.69835],[1.17829,43.69903],[1.17799,43.71028],[1.19966,43.71061],[1.19934,43.72187],[1.24274,43.72253],[1.24243,43.73375],[1.26415,43.73409],[1.26383,43.74536],[1.28553,43.74565],[1.28525,43.75693],[1.30692,43.75723],[1.30664,43.76848],[1.32834,43.76879],[1.32808,43.78003],[1.43673,43.78158],[1.43731,43.7591],[1.45901,43.75937],[1.45933,43.74815],[1.48103,43.7484],[1.48133,43.73718],[1.50303,43.73741],[1.50359,43.71497],[1.52531,43.71518],[1.52561,43.70401],[1.54727,43.70426],[1.54757,43.69304],[1.5692,43.69329],[1.56957,43.68203],[1.5912,43.68227],[1.59174,43.6598],[1.61342,43.66003],[1.61372,43.64883],[1.63538,43.64908],[1.63841,43.51407],[1.29216,43.50947],[1.29186,43.5207],[1.27021,43.5204],[1.26988,43.53164],[1.24823,43.53133],[1.2476,43.55378],[1.22596,43.55349],[1.22568,43.56472],[1.20398,43.56442],[1.20331,43.5869],[1.18162,43.58656],[1.18102,43.60904],[1.15928,43.60869],[1.15896,43.61995],[1.13726,43.61962],[1.13659,43.64209],[1.11491,43.64176],[1.11351,43.68676]]],terms_url:"https://wiki.openstreetmap.org/wiki/Toulouse/ToulouseMetropoleData",terms_text:"ToulouseMetropole"},{id:"Toulouse-Orthophotoplan-2015",name:"Toulouse - Orthophotoplan 2015",type:"wms",template:"https://wms.plan.toulouse.fr/geocache/wms?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=ortho2015&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",endDate:"2015-01-01T00:00:00.000Z",startDate:"2015-01-01T00:00:00.000Z",zoomExtent:[0,22],polygon:[[[1.11351,43.68676],[1.13518,43.68708],[1.13489,43.69835],[1.17829,43.69903],[1.17799,43.71028],[1.19966,43.71061],[1.19934,43.72187],[1.24274,43.72253],[1.24243,43.73375],[1.26415,43.73409],[1.26383,43.74536],[1.28553,43.74565],[1.28525,43.75693],[1.30692,43.75723],[1.30664,43.76848],[1.32834,43.76879],[1.32808,43.78003],[1.43673,43.78158],[1.43731,43.7591],[1.45901,43.75937],[1.45933,43.74815],[1.48103,43.7484],[1.48133,43.73718],[1.50303,43.73741],[1.50359,43.71497],[1.52531,43.71518],[1.52561,43.70401],[1.54727,43.70426],[1.54757,43.69304],[1.5692,43.69329],[1.56957,43.68203],[1.5912,43.68227],[1.59174,43.6598],[1.61342,43.66003],[1.61372,43.64883],[1.63538,43.64908],[1.63841,43.51407],[1.29216,43.50947],[1.29186,43.5207],[1.27021,43.5204],[1.26988,43.53164],[1.24823,43.53133],[1.2476,43.55378],[1.22596,43.55349],[1.22568,43.56472],[1.20398,43.56442],[1.20331,43.5869],[1.18162,43.58656],[1.18102,43.60904],[1.15928,43.60869],[1.15896,43.61995],[1.13726,43.61962],[1.13659,43.64209],[1.11491,43.64176],[1.11351,43.68676]]],terms_url:"https://wiki.openstreetmap.org/wiki/Toulouse/ToulouseMetropoleData",terms_text:"ToulouseMetropole"},{id:"Toulouse-Orthophotoplan-2017",name:"Toulouse - Orthophotoplan 2017",type:"wms",template:"https://wms.plan.toulouse.fr/geocache/wms?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=ortho2017&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",endDate:"2017-01-01T00:00:00.000Z",startDate:"2017-01-01T00:00:00.000Z",zoomExtent:[0,22],polygon:[[[1.11351,43.68676],[1.13518,43.68708],[1.13489,43.69835],[1.17829,43.69903],[1.17799,43.71028],[1.19966,43.71061],[1.19934,43.72187],[1.24274,43.72253],[1.24243,43.73375],[1.26415,43.73409],[1.26383,43.74536],[1.28553,43.74565],[1.28525,43.75693],[1.30692,43.75723],[1.30664,43.76848],[1.32834,43.76879],[1.32808,43.78003],[1.43673,43.78158],[1.43731,43.7591],[1.45901,43.75937],[1.45933,43.74815],[1.48103,43.7484],[1.48133,43.73718],[1.50303,43.73741],[1.50359,43.71497],[1.52531,43.71518],[1.52561,43.70401],[1.54727,43.70426],[1.54757,43.69304],[1.5692,43.69329],[1.56957,43.68203],[1.5912,43.68227],[1.59174,43.6598],[1.61342,43.66003],[1.61372,43.64883],[1.63538,43.64908],[1.63841,43.51407],[1.29216,43.50947],[1.29186,43.5207],[1.27021,43.5204],[1.26988,43.53164],[1.24823,43.53133],[1.2476,43.55378],[1.22596,43.55349],[1.22568,43.56472],[1.20398,43.56442],[1.20331,43.5869],[1.18162,43.58656],[1.18102,43.60904],[1.15928,43.60869],[1.15896,43.61995],[1.13726,43.61962],[1.13659,43.64209],[1.11491,43.64176],[1.11351,43.68676]]],terms_url:"https://wiki.openstreetmap.org/wiki/Toulouse/ToulouseMetropoleData",terms_text:"ToulouseMetropole",best:true},{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}",endDate:"2011-01-01T00:00:00.000Z",startDate:"2008-01-01T00:00:00.000Z",zoomExtent:[0,20],polygon:[[[0.54575,47.46526],[0.54585,47.46082],[0.53922,47.4607],[0.53935,47.45624],[0.5328,47.4561],[0.5329,47.45157],[0.52619,47.4514],[0.52659,47.44249],[0.50009,47.44207],[0.50024,47.43758],[0.4936,47.43743],[0.4937,47.43293],[0.46061,47.43246],[0.46072,47.42798],[0.4541,47.42781],[0.45493,47.40539],[0.46154,47.40545],[0.46191,47.39649],[0.46843,47.3966],[0.46913,47.37864],[0.47571,47.37876],[0.47621,47.3652],[0.48283,47.36535],[0.48296,47.36083],[0.47635,47.36074],[0.47665,47.35173],[0.47005,47.35162],[0.4702,47.34713],[0.46375,47.34701],[0.45714,47.34241],[0.45729,47.33791],[0.45067,47.33781],[0.45084,47.33331],[0.44422,47.3332],[0.44438,47.32871],[0.43114,47.3285],[0.43163,47.315],[0.43824,47.31511],[0.43838,47.31062],[0.47145,47.31114],[0.47131,47.31566],[0.47789,47.31575],[0.47807,47.31128],[0.48468,47.31136],[0.48486,47.30687],[0.49144,47.30698],[0.49174,47.29797],[0.48516,47.29787],[0.48543,47.28887],[0.47885,47.28877],[0.47916,47.27978],[0.48578,47.2799],[0.48591,47.27539],[0.49254,47.2755],[0.49267,47.27101],[0.4993,47.27111],[0.49943,47.26661],[0.51927,47.26692],[0.51942,47.26242],[0.52602,47.26252],[0.52587,47.26702],[0.5457,47.26734],[0.54555,47.27183],[0.55877,47.27204],[0.55863,47.27652],[0.56523,47.27663],[0.56508,47.28112],[0.57168,47.28123],[0.57152,47.28572],[0.57814,47.28583],[0.57799,47.29033],[0.5846,47.29043],[0.58431,47.29942],[0.5975,47.29961],[0.59766,47.29514],[0.65716,47.296],[0.6573,47.29151],[0.6705,47.29172],[0.67035,47.29621],[0.68362,47.29637],[0.68343,47.30089],[0.69006,47.30096],[0.68992,47.30547],[0.7362,47.30612],[0.73608,47.31061],[0.7559,47.31089],[0.75577,47.31539],[0.76238,47.31547],[0.76223,47.31999],[0.77549,47.32015],[0.77497,47.33882],[0.77458,47.35163],[0.76804,47.35159],[0.76759,47.36053],[0.77424,47.36062],[0.77335,47.39213],[0.76674,47.39202],[0.76644,47.40108],[0.77306,47.40111],[0.77289,47.41013],[0.76618,47.41002],[0.76603,47.4145],[0.75276,47.4143],[0.75298,47.40981],[0.74624,47.4097],[0.74594,47.42322],[0.73923,47.42315],[0.73887,47.43661],[0.73233,47.43652],[0.73219,47.44106],[0.7255,47.44098],[0.72542,47.44535],[0.73188,47.44548],[0.73185,47.45011],[0.73845,47.45023],[0.73831,47.45463],[0.74494,47.45474],[0.74432,47.4772],[0.73107,47.47697],[0.7309,47.48154],[0.71762,47.48126],[0.71779,47.47684],[0.69777,47.4765],[0.69805,47.47198],[0.69145,47.47189],[0.69173,47.46302],[0.6851,47.46293],[0.68494,47.46735],[0.67826,47.46733],[0.67798,47.47622],[0.67141,47.47616],[0.67104,47.4882],[0.65773,47.48797],[0.65782,47.48504],[0.65119,47.48483],[0.65147,47.47586],[0.64482,47.47572],[0.64493,47.47126],[0.6118,47.47075],[0.61188,47.46631],[0.60528,47.46612],[0.60542,47.46166],[0.59888,47.46155],[0.59902,47.45709],[0.57249,47.45669],[0.57218,47.46565],[0.54575,47.46526]]],terms_url:"https://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}",endDate:"2013-01-01T00:00:00.000Z",startDate:"2013-01-01T00:00:00.000Z",zoomExtent:[0,22],polygon:[[[0.77512,47.32983],[0.77427,47.35617],[0.77053,47.35611],[0.77024,47.36512],[0.77398,47.36517],[0.7728,47.40148],[0.7904,47.40147],[0.78988,47.4103],[0.79117,47.41047],[0.79108,47.41942],[0.79392,47.41942],[0.79319,47.43733],[0.79834,47.43742],[0.79808,47.45544],[0.80044,47.45541],[0.80138,47.46426],[0.80074,47.46899],[0.79396,47.47331],[0.78405,47.47323],[0.78387,47.47871],[0.77606,47.47859],[0.77585,47.48204],[0.77066,47.48219],[0.77044,47.4859],[0.76096,47.49092],[0.75718,47.49092],[0.73753,47.50336],[0.7259,47.50588],[0.71113,47.50576],[0.70418,47.50408],[0.69109,47.50038],[0.69045,47.49718],[0.67757,47.49683],[0.67757,47.49353],[0.66427,47.49301],[0.6635,47.48953],[0.65088,47.48958],[0.65133,47.48032],[0.64734,47.4803],[0.64747,47.47852],[0.64474,47.47846],[0.64479,47.47575],[0.64238,47.47578],[0.64225,47.47302],[0.63835,47.47294],[0.63792,47.47131],[0.60513,47.47079],[0.60513,47.46632],[0.59852,47.46603],[0.59878,47.46156],[0.592,47.46156],[0.59226,47.45976],[0.58084,47.45971],[0.58007,47.46145],[0.57234,47.46139],[0.57222,47.46512],[0.55874,47.46489],[0.5466,47.46052],[0.53269,47.45355],[0.52677,47.45315],[0.52677,47.45152],[0.52231,47.45123],[0.52256,47.44804],[0.51977,47.44776],[0.52007,47.44247],[0.4975,47.4416],[0.49716,47.44049],[0.49355,47.44015],[0.49355,47.43573],[0.47943,47.43575],[0.46171,47.42819],[0.45643,47.42088],[0.45489,47.41229],[0.45506,47.40218],[0.46149,47.40193],[0.46167,47.39641],[0.46879,47.39602],[0.47016,47.35173],[0.45677,47.3515],[0.45729,47.34254],[0.43085,47.34196],[0.43196,47.30602],[0.47154,47.3067],[0.47257,47.28004],[0.48527,47.28004],[0.48578,47.27084],[0.49935,47.27107],[0.49917,47.26245],[0.55273,47.26304],[0.55222,47.27201],[0.56561,47.27224],[0.56526,47.28156],[0.59118,47.28156],[0.59067,47.29099],[0.66912,47.29169],[0.6832,47.29564],[0.6832,47.30077],[0.69658,47.30123],[0.69641,47.3024],[0.71006,47.30245],[0.72293,47.30589],[0.72285,47.31043],[0.74165,47.31084],[0.75426,47.31392],[0.7625,47.31815],[0.76207,47.32013],[0.76619,47.32009],[0.76956,47.32207],[0.77233,47.32508],[0.77336,47.3267],[0.77512,47.32983]]],terms_url:"https://wiki.openstreetmap.org/wiki/Tours/Orthophoto",terms_text:"Orthophoto Tour(s)plus 2013"},{id:"trafikverket-baninfo",name:"Trafikverket Railway Network",type:"wms",template:"https://geo-baninfo.trafikverket.se/mapservice/wms.axd/BanInfo?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=Spar_Huvud_och_sidospar&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",zoomExtent:[7,20],polygon:[[[12.80182,55.19612],[14.22729,55.27286],[18.44604,56.69244],[19.74242,57.98481],[20.0061,59.5371],[19.08394,60.19308],[20.49499,63.2497],[24.25231,65.57437],[23.81835,67.92514],[23.23607,68.34655],[20.43456,69.17038],[18.08349,68.5644],[16.50145,67.88382],[14.43602,66.14275],[11.82128,63.30775],[12.20031,60.31063],[10.62377,58.5482],[12.64251,56.03062],[12.80182,55.19612]]],terms_url:"https://www.trafikverket.se",terms_text:"© Trafikverket, CC0",description:"Swedish railway network, including sidings",icon:"https://api.trafikinfo.trafikverket.se/img/apple-touch-icon-144-precomposed.png",overlay:true},{id:"trafikverket-vagnat",name:"Trafikverket Road Network",type:"wms",template:"https://geo-netinfo.trafikverket.se/mapservice/wms.axd/NetInfo?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=Vagtrafiknat,Funkvagklass,Farjeled&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",zoomExtent:[13,20],polygon:[[[12.80182,55.19612],[14.22729,55.27286],[18.44604,56.69244],[19.74242,57.98481],[20.0061,59.5371],[19.08394,60.19308],[20.49499,63.2497],[24.25231,65.57437],[23.81835,67.92514],[23.23607,68.34655],[20.43456,69.17038],[18.08349,68.5644],[16.50145,67.88382],[14.43602,66.14275],[11.82128,63.30775],[12.20031,60.31063],[10.62377,58.5482],[12.64251,56.03062],[12.80182,55.19612]]],terms_url:"https://www.trafikverket.se",terms_text:"© Trafikverket, CC0",description:"Swedish NVDB road network",icon:"https://api.trafikinfo.trafikverket.se/img/apple-touch-icon-144-precomposed.png",overlay:true},{id:"trafikverket-vagnat-extra",name:"Trafikverket Road Network extra",type:"wms",template:"https://geo-netinfo.trafikverket.se/mapservice/wms.axd/NetInfo?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=Vagnummer,Vaghinder,Rastplats,Rastficka,Hallplats,Farthinder,BroTunnel,ATK_Matplats&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",zoomExtent:[3,20],polygon:[[[12.80182,55.19612],[14.22729,55.27286],[18.44604,56.69244],[19.74242,57.98481],[20.0061,59.5371],[19.08394,60.19308],[20.49499,63.2497],[24.25231,65.57437],[23.81835,67.92514],[23.23607,68.34655],[20.43456,69.17038],[18.08349,68.5644],[16.50145,67.88382],[14.43602,66.14275],[11.82128,63.30775],[12.20031,60.31063],[10.62377,58.5482],[12.64251,56.03062],[12.80182,55.19612]]],terms_url:"https://www.trafikverket.se",terms_text:"© Trafikverket, CC0",description:"Swedish NVDB extra details: Highway reference, traffic calming, rest area, bus stop, bridge, tunnel, speed camera",icon:"https://api.trafikinfo.trafikverket.se/img/apple-touch-icon-144-precomposed.png",overlay:true},{id:"trafikverket-vagnat-navn",name:"Trafikverket Street Names",type:"tms",template:"https://mapproxy.openstreetmap.se/tiles/1.0.0/nvdb_names/EPSG3857/{zoom}/{x}/{y}.png",zoomExtent:[15,19],polygon:[[[12.80182,55.19612],[14.22729,55.27286],[18.44604,56.69244],[19.74242,57.98481],[20.0061,59.5371],[19.08394,60.19308],[20.49499,63.2497],[24.25231,65.57437],[23.81835,67.92514],[23.23607,68.34655],[20.43456,69.17038],[18.08349,68.5644],[16.50145,67.88382],[14.43602,66.14275],[11.82128,63.30775],[12.20031,60.31063],[10.62377,58.5482],[12.64251,56.03062],[12.80182,55.19612]]],terms_url:"https://www.trafikverket.se",terms_text:"© Trafikverket, CC0",description:"Swedish NVDB street names",icon:"https://api.trafikinfo.trafikverket.se/img/apple-touch-icon-144-precomposed.png",overlay:true},{id:"US_Forest_Service_roads_overlay",name:"U.S. Forest Roads Overlay",type:"tms",template:"https://{switch:a,b,c,d}.tiles.mapbox.com/styles/v1/glassman/cjf4qjmps0tgv2qpahj977mvz/tiles/256/{zoom}/{x}/{y}?access_token=pk.eyJ1IjoiZ2xhc3NtYW4iLCJhIjoiRjk3dWdwYyJ9.Tg_fMJWxygeKBgVTrZHmGA",zoomExtent:[0,20],polygon:[[[-124.76179,48.41301],[-124.60595,45.90245],[-124.99343,40.05576],[-122.53697,36.85661],[-119.97759,33.00641],[-117.67593,32.46302],[-114.86123,32.47999],[-111.00893,31.33601],[-108.19927,31.326],[-108.18711,31.77551],[-106.53072,31.78209],[-106.48421,31.74645],[-106.42932,31.75206],[-106.28689,31.56133],[-106.20525,31.4467],[-105.02053,30.5361],[-104.58819,29.69979],[-103.25189,28.89087],[-102.71736,29.39206],[-102.1514,29.74757],[-101.25529,29.48105],[-100.00624,28.00822],[-99.23511,26.4476],[-98.01091,25.9928],[-97.43502,25.8266],[-96.95553,25.98216],[-96.80617,27.79782],[-95.55633,28.58761],[-93.74053,29.47421],[-90.90285,28.85645],[-88.01567,28.99443],[-88.01625,30.00389],[-86.02775,30.00475],[-84.01879,28.99618],[-81.9972,25.98268],[-81.99666,25.01349],[-84.01656,25.01258],[-84.01601,24.00527],[-80.02,24.0071],[-79.89011,26.85507],[-80.02453,32.01613],[-75.41474,35.05319],[-74.02112,39.57279],[-72.00202,40.99125],[-69.87974,40.99205],[-69.84893,43.26199],[-66.94528,44.71049],[-67.75966,47.099],[-69.25051,47.51223],[-70.46149,46.21766],[-71.41227,45.25488],[-72.02225,45.00598],[-75.07988,44.98029],[-76.90231,43.80246],[-78.76239,43.62496],[-79.15798,43.44626],[-79.00601,42.80053],[-82.66248,41.68895],[-82.17616,43.58854],[-83.2814,46.13885],[-87.50645,48.01427],[-88.34922,48.29633],[-89.43531,47.98378],[-93.99811,49.00671],[-95.11054,49.412],[-96.01312,49.00605],[-123.32289,49.00429],[-123.22752,48.18499],[-124.76179,48.41301]],[[-160.57876,22.50629],[-160.57822,21.49846],[-158.74706,21.24398],[-157.50832,20.9958],[-155.99619,18.77902],[-154.62178,18.7587],[-154.68902,19.88057],[-156.29276,21.22259],[-157.50474,21.9985],[-159.00937,22.50702],[-160.57876,22.50629]],[[-167.15715,68.72197],[-164.8554,67.02551],[-168.0022,66.00175],[-169.00874,66.00155],[-169.00754,64.99877],[-172.51433,63.87673],[-173.8197,59.74014],[-162.50181,58.00058],[-160.0159,58.00124],[-160.01497,57.00003],[-160.50548,56.9999],[-165.80926,54.82485],[-178.0001,52.24465],[-177.9993,51.25543],[-171.46891,51.82153],[-162.40251,53.95666],[-159.00757,55.0025],[-158.01907,55.00278],[-151.99632,55.99919],[-151.50034,57.99879],[-151.50129,58.99198],[-138.516,58.99532],[-138.51505,57.99864],[-133.99482,54.00317],[-130.00444,54.00434],[-130.00708,57.00005],[-131.97588,56.99952],[-135.12299,59.7566],[-138.00718,59.9918],[-139.17159,60.41272],[-140.9874,61.01186],[-140.9684,69.95351],[-156.17689,71.56333],[-160.41363,70.73977],[-163.02183,69.97074],[-164.9717,68.99469],[-167.15715,68.72197]]],description:"Highway: Green casing = unclassified. Brown casing = track. Surface: gravel = light brown fill, Asphalt = black, paved = gray, ground =white, concrete = blue, grass = green. Seasonal = white bars",icon:"https://osmlab.github.io/editor-layer-index/sources/north-america/us/USForestService-overlay.png",overlay:true},{id:"US_Forest_Service_roads",name:"U.S. Forest Service roads",type:"tms",template:"https://osm.cycle.travel/forest/{zoom}/{x}/{y}.png",zoomExtent:[0,19],polygon:[[[-124.76179,48.41301],[-124.60595,45.90245],[-124.99343,40.05576],[-122.53697,36.85661],[-119.97759,33.00641],[-117.67593,32.46302],[-114.86123,32.47999],[-111.00893,31.33601],[-108.19927,31.326],[-108.18711,31.77551],[-106.53072,31.78209],[-106.48421,31.74645],[-106.42932,31.75206],[-106.28689,31.56133],[-106.20525,31.4467],[-105.02053,30.5361],[-104.58819,29.69979],[-103.25189,28.89087],[-102.71736,29.39206],[-102.1514,29.74757],[-101.25529,29.48105],[-100.00624,28.00822],[-99.23511,26.4476],[-98.01091,25.9928],[-97.43502,25.8266],[-96.95553,25.98216],[-96.80617,27.79782],[-95.55633,28.58761],[-93.74053,29.47421],[-90.90285,28.85645],[-88.01567,28.99443],[-88.01625,30.00389],[-86.02775,30.00475],[-84.01879,28.99618],[-81.9972,25.98268],[-81.99666,25.01349],[-84.01656,25.01258],[-84.01601,24.00527],[-80.02,24.0071],[-79.89011,26.85507],[-80.02453,32.01613],[-75.41474,35.05319],[-74.02112,39.57279],[-72.00202,40.99125],[-69.87974,40.99205],[-69.84893,43.26199],[-66.94528,44.71049],[-67.75966,47.099],[-69.25051,47.51223],[-70.46149,46.21766],[-71.41227,45.25488],[-72.02225,45.00598],[-75.07988,44.98029],[-76.90231,43.80246],[-78.76239,43.62496],[-79.15798,43.44626],[-79.00601,42.80053],[-82.66248,41.68895],[-82.17616,43.58854],[-83.2814,46.13885],[-87.50645,48.01427],[-88.34922,48.29633],[-89.43531,47.98378],[-93.99811,49.00671],[-95.11054,49.412],[-96.01312,49.00605],[-123.32289,49.00429],[-123.22752,48.18499],[-124.76179,48.41301]],[[-160.57876,22.50629],[-160.57822,21.49846],[-158.74706,21.24398],[-157.50832,20.9958],[-155.99619,18.77902],[-154.62178,18.7587],[-154.68902,19.88057],[-156.29276,21.22259],[-157.50474,21.9985],[-159.00937,22.50702],[-160.57876,22.50629]],[[-167.15715,68.72197],[-164.8554,67.02551],[-168.0022,66.00175],[-169.00874,66.00155],[-169.00754,64.99877],[-172.51433,63.87673],[-173.8197,59.74014],[-162.50181,58.00058],[-160.0159,58.00124],[-160.01497,57.00003],[-160.50548,56.9999],[-165.80926,54.82485],[-178.0001,52.24465],[-177.9993,51.25543],[-171.46891,51.82153],[-162.40251,53.95666],[-159.00757,55.0025],[-158.01907,55.00278],[-151.99632,55.99919],[-151.50034,57.99879],[-151.50129,58.99198],[-138.516,58.99532],[-138.51505,57.99864],[-133.99482,54.00317],[-130.00444,54.00434],[-130.00708,57.00005],[-131.97588,56.99952],[-135.12299,59.7566],[-138.00718,59.9918],[-139.17159,60.41272],[-140.9874,61.01186],[-140.9684,69.95351],[-156.17689,71.56333],[-160.41363,70.73977],[-163.02183,69.97074],[-164.9717,68.99469],[-167.15715,68.72197]]]},{id:"Zuerich-zh_uebersichtsplan-tms",name:"Übersichtsplan Zürich",type:"tms",template:"https://mapproxy.osm.ch/tiles/zh_uebersichtsplan/EPSG900913/{zoom}/{x}/{y}.png?origin=nw",zoomExtent:[0,21],polygon:[[[8.45788,47.44582],[8.57392,47.44477],[8.57362,47.43124],[8.60266,47.43096],[8.60231,47.41746],[8.6318,47.41716],[8.6295,47.33628],[8.57162,47.33679],[8.57152,47.32292],[8.54236,47.3236],[8.54212,47.31013],[8.48418,47.31062],[8.48478,47.33762],[8.45582,47.33787],[8.45609,47.35135],[8.42713,47.35161],[8.42864,47.43259],[8.45745,47.43231],[8.45788,47.44582]]],terms_text:"Stadt Zürich Open Government Data"},{id:"UkraineKyiv2014DZK",name:"Ukraine - Kyiv 2014 (DZK)",type:"tms",template:"http://map.land.gov.ua/map/ortho_kiev/{zoom}/{x}/{-y}.jpg",endDate:"2014-01-01T00:00:00.000Z",startDate:"2014-01-01T00:00:00.000Z",zoomExtent:[0,16],polygon:[[[30.30752,50.57184],[30.33155,50.57402],[30.37687,50.57925],[30.42288,50.58143],[30.4318,50.58579],[30.44416,50.58797],[30.45515,50.58754],[30.46545,50.58449],[30.46819,50.57751],[30.49085,50.57489],[30.51351,50.57489],[30.52519,50.57402],[30.55608,50.55221],[30.58424,50.53869],[30.5966,50.53781],[30.60896,50.5365],[30.64329,50.5352],[30.65496,50.53563],[30.65496,50.54305],[30.66045,50.54916],[30.66801,50.55439],[30.67762,50.55876],[30.68792,50.56137],[30.70783,50.55614],[30.71127,50.56356],[30.71127,50.57838],[30.72157,50.58231],[30.71882,50.58972],[30.72981,50.59103],[30.74011,50.58841],[30.76208,50.58536],[30.77306,50.58274],[30.78336,50.57795],[30.80259,50.57141],[30.81014,50.56617],[30.82182,50.55439],[30.82525,50.53956],[30.81701,50.53432],[30.79504,50.52909],[30.78474,50.52559],[30.76276,50.51992],[30.76208,50.5125],[30.75315,50.50769],[30.74354,50.50376],[30.73805,50.49721],[30.74629,50.49197],[30.75521,50.48847],[30.74835,50.48236],[30.75178,50.47537],[30.75315,50.46794],[30.74835,50.46138],[30.75178,50.45439],[30.78886,50.43646],[30.7971,50.43165],[30.80328,50.41765],[30.8225,50.40846],[30.82044,50.40102],[30.82319,50.39358],[30.81289,50.39095],[30.80122,50.39139],[30.78954,50.39314],[30.77787,50.3927],[30.77856,50.3857],[30.77169,50.38001],[30.76208,50.37519],[30.75109,50.37256],[30.73873,50.37256],[30.72775,50.37475],[30.71813,50.37957],[30.71539,50.36512],[30.71127,50.35855],[30.70577,50.35241],[30.69753,50.34716],[30.68586,50.34453],[30.65084,50.34058],[30.63848,50.34014],[30.62681,50.33795],[30.62887,50.3305],[30.64947,50.29279],[30.66663,50.28314],[30.67144,50.27656],[30.6632,50.27085],[30.65153,50.26997],[30.64535,50.27612],[30.63368,50.27787],[30.62132,50.27656],[30.61857,50.2691],[30.62956,50.25637],[30.6378,50.25154],[30.64535,50.23792],[30.64398,50.2309],[30.63917,50.22387],[30.62956,50.21992],[30.6069,50.2164],[30.59591,50.2186],[30.59042,50.23353],[30.5863,50.241],[30.57531,50.25505],[30.56501,50.25944],[30.5657,50.2669],[30.56432,50.29718],[30.56638,50.30463],[30.5657,50.31209],[30.55677,50.31691],[30.54441,50.31735],[30.52587,50.32699],[30.51489,50.3305],[30.50253,50.33182],[30.48055,50.33664],[30.47163,50.34146],[30.46957,50.34935],[30.47025,50.35679],[30.46201,50.36205],[30.4524,50.35679],[30.44004,50.35548],[30.43661,50.36512],[30.43111,50.37212],[30.43661,50.37826],[30.43455,50.3857],[30.40914,50.39883],[30.39678,50.40014],[30.3906,50.40671],[30.37069,50.41546],[30.36314,50.42159],[30.3597,50.42902],[30.3597,50.43646],[30.35696,50.44389],[30.3446,50.44477],[30.32056,50.44258],[30.29585,50.44477],[30.28349,50.44477],[30.27799,50.43864],[30.27525,50.43165],[30.26563,50.42771],[30.25396,50.42902],[30.24572,50.42377],[30.23542,50.42771],[30.2416,50.43427],[30.2416,50.44214],[30.23679,50.4487],[30.23885,50.45613],[30.24297,50.46313],[30.24915,50.46968],[30.25671,50.47493],[30.26083,50.48192],[30.26563,50.48847],[30.26907,50.49983],[30.26151,50.50595],[30.26357,50.51381],[30.26975,50.51992],[30.28898,50.52821],[30.29722,50.53345],[30.30271,50.54],[30.30203,50.54741],[30.30477,50.55483],[30.32743,50.55221],[30.33086,50.55919],[30.32262,50.56486],[30.31233,50.56835],[30.30752,50.57184]]],description:"Works only from within Ukraine or with an Ukrainian proxy server."},{id:"Ukraine-orto10000-2012",name:"Ukraine - Orthophotomaps 2012",type:"tms",template:"http://212.26.144.110/tile2/orto_10000/{zoom}/{x}/{-y}.jpg",endDate:"2012-01-01T00:00:00.000Z",startDate:"2012-01-01T00:00:00.000Z",zoomExtent:[0,16],polygon:[[[23.6193,51.65491],[24.09803,51.64047],[24.39723,51.89353],[25.19178,51.95913],[26.12263,51.92224],[26.49829,51.80933],[27.09005,51.77026],[27.62861,51.62603],[28.02422,51.59093],[28.28021,51.68172],[28.37662,51.5806],[28.82542,51.5682],[29.19111,51.64253],[29.41718,51.4399],[29.67316,51.51238],[29.82276,51.47512],[30.21837,51.50824],[30.54417,51.30709],[30.63726,51.38599],[30.51425,51.63634],[30.983,52.09005],[31.2822,52.07984],[31.48832,52.13497],[32.11,52.05531],[32.31279,52.11864],[32.43912,52.32434],[32.93114,52.28368],[33.29683,52.39337],[33.75561,52.35277],[34.35734,51.78055],[34.14457,51.76409],[34.05813,51.67965],[34.22103,51.47098],[34.25095,51.30085],[34.7197,51.19056],[35.11199,51.21139],[35.1818,51.08626],[35.38792,51.03402],[35.40787,50.62878],[35.62063,50.38563],[36.06944,50.4513],[36.21571,50.41106],[36.31212,50.28802],[36.4717,50.32624],[36.59138,50.2519],[37.46571,50.45977],[37.735,50.11353],[38.05747,49.9384],[38.19377,49.95765],[38.19045,50.07514],[38.35002,50.08154],[38.41651,49.98972],[38.73899,49.97476],[39.00827,49.83344],[39.14457,49.89987],[39.27755,49.78195],[39.54018,49.74544],[39.79949,49.58406],[40.18845,49.6013],[40.0588,49.50424],[40.20508,49.24666],[39.93247,49.06185],[39.71638,49.01608],[40.08872,48.85448],[39.79617,48.78443],[39.69311,48.65283],[39.86266,48.5693],[39.99231,48.31348],[39.83274,47.92287],[39.74297,47.83144],[39.57675,47.81135],[38.86532,47.85153],[38.77555,47.68618],[38.38327,47.60106],[38.30348,47.52704],[38.30016,47.23891],[38.13393,47.05577],[37.5455,47.05124],[37.31279,46.87654],[37.20973,46.92651],[36.96039,46.83107],[36.7443,46.61685],[36.72436,46.7719],[36.4451,46.72407],[36.10601,46.4728],[36.20574,46.66022],[35.92316,46.64424],[35.43114,46.39948],[35.10202,45.97138],[35.0455,45.75145],[35.47436,45.33],[35.86,45.53297],[35.9963,45.43274],[36.11598,45.51899],[36.66452,45.4514],[36.65454,45.34168],[36.50494,45.31363],[36.47502,45.24111],[36.48832,45.04884],[35.81013,44.98539],[35.5076,45.11222],[35.42782,44.93364],[35.12196,44.76394],[34.67649,44.75686],[33.985,44.37078],[33.68912,44.38504],[33.38327,44.50608],[33.35002,44.589],[33.55282,44.93128],[33.42981,45.1263],[33.19377,45.14271],[32.83141,45.33935],[32.60534,45.30896],[32.44577,45.3557],[32.50893,45.47005],[32.87795,45.68181],[33.57941,45.90665],[33.58938,46.02681],[33.25694,46.07065],[33.02422,45.97138],[31.61133,46.19506],[31.27555,46.61457],[30.87662,46.56887],[30.43446,45.98756],[29.69643,45.55159],[29.79284,45.46306],[29.73965,45.15913],[29.47369,45.41407],[29.18114,45.38373],[28.74896,45.22004],[28.56611,45.23409],[28.29018,45.33],[28.23367,45.49103],[28.31678,45.56789],[28.483,45.54228],[28.47303,45.73753],[28.95175,46.03143],[29.02489,46.18125],[28.9318,46.49569],[29.18779,46.57116],[29.59337,46.45448],[29.81944,46.46593],[29.95574,46.68759],[29.8959,46.8197],[29.56013,46.96963],[29.54683,47.29982],[29.14789,47.50234],[29.23101,47.77562],[29.17117,47.934],[28.86864,47.99411],[28.63593,48.16513],[28.44311,48.06525],[28.36332,48.17178],[28.25694,48.15404],[27.735,48.43494],[27.55547,48.45258],[26.92383,48.34884],[26.36532,48.17178],[26.1193,47.97408],[25.3846,47.91618],[24.91585,47.70408],[24.52024,47.94291],[24.18446,47.90058],[23.58274,48.00523],[23.43646,47.96963],[23.15388,48.10522],[23.07077,47.98743],[22.858,47.9585],[22.76824,48.09856],[22.58539,48.103],[22.51558,48.2161],[22.11332,48.4217],[22.49896,49.06621],[22.58872,49.11193],[22.87795,49.04006],[22.7217,49.18151],[22.71837,49.64652],[23.24364,50.105],[24.04484,50.49785],[24.05813,50.68779],[23.9451,50.81399],[24.10135,50.85388],[23.62928,51.29462],[23.6193,51.65491]]],description:"Works only from within Ukraine or with an Ukrainian proxy server."},{id:"uniao_dos_palmares",name:"União dos Palmares AL",type:"wms",template:"http://geoserver.dados.al.gov.br:8080/geoserver/Alagoas/ows?LAYERS=Uniao%20dos%20Palmares&SERVICE=WMS&FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.0&SERVICE=WMS&REQUEST=GetMap&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[-35.97725,-9.20752],[-35.9772,-9.19398],[-35.97694,-9.19053],[-35.97678,-9.18607],[-35.97702,-9.18208],[-35.97704,-9.17968],[-35.97682,-9.17734],[-35.97664,-9.17517],[-35.97701,-9.17518],[-35.97696,-9.1707],[-35.97674,-9.17066],[-35.97661,-9.16645],[-35.97618,-9.16222],[-35.9761,-9.16026],[-35.97661,-9.16026],[-35.97672,-9.14608],[-35.97654,-9.14122],[-35.97666,-9.1332],[-35.97653,-9.12184],[-35.97648,-9.11748],[-35.98618,-9.11755],[-35.98947,-9.11733],[-36.00561,-9.11733],[-36.01859,-9.11736],[-36.04601,-9.11722],[-36.06734,-9.11698],[-36.06756,-9.16134],[-36.06771,-9.16405],[-36.06745,-9.16408],[-36.06756,-9.16657],[-36.06777,-9.16654],[-36.06798,-9.20701],[-36.0498,-9.20711],[-36.04671,-9.20698],[-36.02941,-9.20709],[-36.01355,-9.20718],[-35.99318,-9.20733],[-35.97725,-9.20752]]],terms_url:"http://www.seplag.al.gov.br",terms_text:"Secretaria de Estado do Planejamento, Gestão e Patrimônio"},{id:"URBIS2009",name:"URBIS 2009 aerial imagery",type:"wms",template:"https://geoservices-urbis.irisnet.be/geoserver/ows?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetMap&FORMAT=image/png&TRANSPARENT=true&LAYERS=Urbis:Ortho2009&WIDTH={width}&HEIGHT={height}&CRS={proj}&STYLES=&BBOX={bbox}",projection:"EPSG:3857",endDate:"2009-01-01T00:00:00.000Z",startDate:"2009-01-01T00:00:00.000Z",polygon:[[[4.37973,50.76382],[4.38917,50.76377],[4.43028,50.77517],[4.435,50.775],[4.46427,50.78645],[4.4817,50.79134],[4.48238,50.79617],[4.45921,50.80626],[4.45947,50.81661],[4.47972,50.82036],[4.46959,50.83537],[4.46899,50.84573],[4.46238,50.85396],[4.44968,50.85591],[4.44599,50.85992],[4.4253,50.86615],[4.43183,50.87628],[4.44007,50.87845],[4.43106,50.89014],[4.43595,50.89502],[4.4296,50.90103],[4.41655,50.90757],[4.41543,50.91342],[4.39578,50.91407],[4.38462,50.91093],[4.38119,50.90319],[4.3726,50.90032],[4.36213,50.9033],[4.34857,50.90341],[4.34025,50.90411],[4.32892,50.90249],[4.31647,50.89605],[4.30634,50.89274],[4.29004,50.88982],[4.29149,50.88495],[4.29553,50.88262],[4.29561,50.88094],[4.28274,50.87227],[4.27699,50.86713],[4.27802,50.85911],[4.28042,50.85721],[4.28094,50.84215],[4.27193,50.84036],[4.25467,50.83695],[4.25107,50.83288],[4.25227,50.82697],[4.24343,50.82182],[4.24403,50.81548],[4.25519,50.8151],[4.25802,50.80935],[4.27218,50.81011],[4.27579,50.80696],[4.2854,50.80506],[4.28901,50.80691],[4.29802,50.80593],[4.30282,50.79709],[4.31458,50.79454],[4.31621,50.78624],[4.32952,50.77381],[4.34205,50.77164],[4.34522,50.77337],[4.37853,50.76811],[4.37973,50.76382]]],terms_text:"Realized by means of Brussels UrbIS®© - Distribution & Copyright CIRB",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/be/URBIS2015aerialimagery.png"},{id:"URBIS2012",name:"URBIS 2012 aerial imagery",type:"wms",template:"https://geoservices-urbis.irisnet.be/geoserver/ows?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetMap&FORMAT=image/png&TRANSPARENT=true&LAYERS=Urbis:Ortho2012&WIDTH={width}&HEIGHT={height}&CRS={proj}&STYLES=&BBOX={bbox}",projection:"EPSG:3857",endDate:"2012-01-01T00:00:00.000Z",startDate:"2012-01-01T00:00:00.000Z",polygon:[[[4.37973,50.76382],[4.38917,50.76377],[4.43028,50.77517],[4.435,50.775],[4.46427,50.78645],[4.4817,50.79134],[4.48238,50.79617],[4.45921,50.80626],[4.45947,50.81661],[4.47972,50.82036],[4.46959,50.83537],[4.46899,50.84573],[4.46238,50.85396],[4.44968,50.85591],[4.44599,50.85992],[4.4253,50.86615],[4.43183,50.87628],[4.44007,50.87845],[4.43106,50.89014],[4.43595,50.89502],[4.4296,50.90103],[4.41655,50.90757],[4.41543,50.91342],[4.39578,50.91407],[4.38462,50.91093],[4.38119,50.90319],[4.3726,50.90032],[4.36213,50.9033],[4.34857,50.90341],[4.34025,50.90411],[4.32892,50.90249],[4.31647,50.89605],[4.30634,50.89274],[4.29004,50.88982],[4.29149,50.88495],[4.29553,50.88262],[4.29561,50.88094],[4.28274,50.87227],[4.27699,50.86713],[4.27802,50.85911],[4.28042,50.85721],[4.28094,50.84215],[4.27193,50.84036],[4.25467,50.83695],[4.25107,50.83288],[4.25227,50.82697],[4.24343,50.82182],[4.24403,50.81548],[4.25519,50.8151],[4.25802,50.80935],[4.27218,50.81011],[4.27579,50.80696],[4.2854,50.80506],[4.28901,50.80691],[4.29802,50.80593],[4.30282,50.79709],[4.31458,50.79454],[4.31621,50.78624],[4.32952,50.77381],[4.34205,50.77164],[4.34522,50.77337],[4.37853,50.76811],[4.37973,50.76382]]],terms_text:"Realized by means of Brussels UrbIS®© - Distribution & Copyright CIRB",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/be/URBIS2015aerialimagery.png"},{id:"URBIS2014",name:"URBIS 2014 aerial imagery",type:"wms",template:"https://geoservices-urbis.irisnet.be/geoserver/ows?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetMap&FORMAT=image/png&TRANSPARENT=true&LAYERS=Urbis:Ortho2014&WIDTH={width}&HEIGHT={height}&CRS={proj}&STYLES=&BBOX={bbox}",projection:"EPSG:3857",endDate:"2014-01-01T00:00:00.000Z",startDate:"2014-01-01T00:00:00.000Z",polygon:[[[4.4001,50.76373],[4.43093,50.77254],[4.43586,50.77237],[4.46549,50.78373],[4.48189,50.78835],[4.48269,50.79849],[4.46363,50.80686],[4.46407,50.81546],[4.48204,50.81699],[4.48103,50.82343],[4.47465,50.83505],[4.47403,50.84587],[4.46712,50.85447],[4.45257,50.85797],[4.45017,50.86151],[4.42968,50.86764],[4.43423,50.87384],[4.44147,50.87513],[4.44381,50.88004],[4.43534,50.88977],[4.43968,50.89475],[4.43287,50.90363],[4.42096,50.90917],[4.42023,50.91387],[4.38315,50.91381],[4.37879,50.90637],[4.37334,50.90289],[4.36241,50.906],[4.34824,50.90611],[4.33955,50.90685],[4.32771,50.90515],[4.31471,50.89842],[4.30413,50.89498],[4.2871,50.89192],[4.28725,50.88532],[4.29293,50.88265],[4.27948,50.8736],[4.27347,50.86822],[4.27364,50.85871],[4.27688,50.85575],[4.27644,50.84376],[4.26664,50.8405],[4.25488,50.83992],[4.24755,50.83453],[4.24799,50.82866],[4.24357,50.82599],[4.24376,50.81356],[4.25233,50.81268],[4.25649,50.80711],[4.27025,50.8073],[4.27222,50.80537],[4.28414,50.80241],[4.28885,50.80434],[4.29544,50.8043],[4.30046,50.79506],[4.31076,50.79299],[4.31444,50.78372],[4.32628,50.77221],[4.34194,50.76891],[4.34474,50.77029],[4.37535,50.76577],[4.3755,50.76381],[4.4001,50.76373]]],terms_text:"Realized by means of Brussels UrbIS®© - Distribution & Copyright CIRB",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/be/URBIS2015aerialimagery.png"},{id:"URBIS2015",name:"URBIS 2015 aerial imagery",type:"wms",template:"https://geoservices-urbis.irisnet.be/geoserver/ows?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetMap&FORMAT=image/png&TRANSPARENT=true&LAYERS=Urbis:Ortho2015&WIDTH={width}&HEIGHT={height}&CRS={proj}&STYLES=&BBOX={bbox}",projection:"EPSG:3857",endDate:"2015-01-01T00:00:00.000Z",startDate:"2015-01-01T00:00:00.000Z",polygon:[[[4.37973,50.76382],[4.38917,50.76377],[4.43028,50.77517],[4.435,50.775],[4.46427,50.78645],[4.4817,50.79134],[4.48238,50.79617],[4.45921,50.80626],[4.45947,50.81661],[4.47972,50.82036],[4.46959,50.83537],[4.46899,50.84573],[4.46238,50.85396],[4.44968,50.85591],[4.44599,50.85992],[4.4253,50.86615],[4.43183,50.87628],[4.44007,50.87845],[4.43106,50.89014],[4.43595,50.89502],[4.4296,50.90103],[4.41655,50.90757],[4.41543,50.91342],[4.39578,50.91407],[4.38462,50.91093],[4.38119,50.90319],[4.3726,50.90032],[4.36213,50.9033],[4.34857,50.90341],[4.34025,50.90411],[4.32892,50.90249],[4.31647,50.89605],[4.30634,50.89274],[4.29004,50.88982],[4.29149,50.88495],[4.29553,50.88262],[4.29561,50.88094],[4.28274,50.87227],[4.27699,50.86713],[4.27802,50.85911],[4.28042,50.85721],[4.28094,50.84215],[4.27193,50.84036],[4.25467,50.83695],[4.25107,50.83288],[4.25227,50.82697],[4.24343,50.82182],[4.24403,50.81548],[4.25519,50.8151],[4.25802,50.80935],[4.27218,50.81011],[4.27579,50.80696],[4.2854,50.80506],[4.28901,50.80691],[4.29802,50.80593],[4.30282,50.79709],[4.31458,50.79454],[4.31621,50.78624],[4.32952,50.77381],[4.34205,50.77164],[4.34522,50.77337],[4.37853,50.76811],[4.37973,50.76382]]],terms_text:"Realized by means of Brussels UrbIS®© - Distribution & Copyright CIRB",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/be/URBIS2015aerialimagery.png"},{id:"UrbISOrtho2016",name:"UrbIS-Ortho 2016",type:"wms",template:"https://geoservices-urbis.irisnet.be/geoserver/ows?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetMap&FORMAT=image/png&TRANSPARENT=true&LAYERS=Urbis:Ortho2016&WIDTH={width}&HEIGHT={height}&CRS={proj}&STYLES=&BBOX={bbox}",projection:"EPSG:3857",endDate:"2016-01-01T00:00:00.000Z",startDate:"2016-01-01T00:00:00.000Z",polygon:[[[4.37973,50.76382],[4.38917,50.76377],[4.43028,50.77517],[4.435,50.775],[4.46427,50.78645],[4.4817,50.79134],[4.48238,50.79617],[4.45921,50.80626],[4.45947,50.81661],[4.47972,50.82036],[4.46959,50.83537],[4.46899,50.84573],[4.46238,50.85396],[4.44968,50.85591],[4.44599,50.85992],[4.4253,50.86615],[4.43183,50.87628],[4.44007,50.87845],[4.43106,50.89014],[4.43595,50.89502],[4.4296,50.90103],[4.41655,50.90757],[4.41543,50.91342],[4.39578,50.91407],[4.38462,50.91093],[4.38119,50.90319],[4.3726,50.90032],[4.36213,50.9033],[4.34857,50.90341],[4.34025,50.90411],[4.32892,50.90249],[4.31647,50.89605],[4.30634,50.89274],[4.29004,50.88982],[4.29149,50.88495],[4.29553,50.88262],[4.29561,50.88094],[4.28274,50.87227],[4.27699,50.86713],[4.27802,50.85911],[4.28042,50.85721],[4.28094,50.84215],[4.27193,50.84036],[4.25467,50.83695],[4.25107,50.83288],[4.25227,50.82697],[4.24343,50.82182],[4.24403,50.81548],[4.25519,50.8151],[4.25802,50.80935],[4.27218,50.81011],[4.27579,50.80696],[4.2854,50.80506],[4.28901,50.80691],[4.29802,50.80593],[4.30282,50.79709],[4.31458,50.79454],[4.31621,50.78624],[4.32952,50.77381],[4.34205,50.77164],[4.34522,50.77337],[4.37853,50.76811],[4.37973,50.76382]]],terms_text:"Realized by means of Brussels UrbIS®© - Distribution & Copyright CIRB",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/be/URBIS2015aerialimagery.png"},{id:"UrbISOrtho2017",name:"UrbIS-Ortho 2017",type:"wms",template:"https://geoservices-urbis.irisnet.be/geoserver/ows?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetMap&FORMAT=image/png&TRANSPARENT=true&LAYERS=Urbis:Ortho2017&WIDTH={width}&HEIGHT={height}&CRS={proj}&STYLES=&BBOX={bbox}",projection:"EPSG:3857",endDate:"2017-01-01T00:00:00.000Z",startDate:"2017-01-01T00:00:00.000Z",polygon:[[[4.37973,50.76382],[4.38917,50.76377],[4.43028,50.77517],[4.435,50.775],[4.46427,50.78645],[4.4817,50.79134],[4.48238,50.79617],[4.45921,50.80626],[4.45947,50.81661],[4.47972,50.82036],[4.46959,50.83537],[4.46899,50.84573],[4.46238,50.85396],[4.44968,50.85591],[4.44599,50.85992],[4.4253,50.86615],[4.43183,50.87628],[4.44007,50.87845],[4.43106,50.89014],[4.43595,50.89502],[4.4296,50.90103],[4.41655,50.90757],[4.41543,50.91342],[4.39578,50.91407],[4.38462,50.91093],[4.38119,50.90319],[4.3726,50.90032],[4.36213,50.9033],[4.34857,50.90341],[4.34025,50.90411],[4.32892,50.90249],[4.31647,50.89605],[4.30634,50.89274],[4.29004,50.88982],[4.29149,50.88495],[4.29553,50.88262],[4.29561,50.88094],[4.28274,50.87227],[4.27699,50.86713],[4.27802,50.85911],[4.28042,50.85721],[4.28094,50.84215],[4.27193,50.84036],[4.25467,50.83695],[4.25107,50.83288],[4.25227,50.82697],[4.24343,50.82182],[4.24403,50.81548],[4.25519,50.8151],[4.25802,50.80935],[4.27218,50.81011],[4.27579,50.80696],[4.2854,50.80506],[4.28901,50.80691],[4.29802,50.80593],[4.30282,50.79709],[4.31458,50.79454],[4.31621,50.78624],[4.32952,50.77381],[4.34205,50.77164],[4.34522,50.77337],[4.37853,50.76811],[4.37973,50.76382]]],terms_text:"Realized by means of Brussels UrbIS®© - Distribution & Copyright CIRB",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/be/URBIS2015aerialimagery.png"},{id:"UrbISOrtho2018",name:"UrbIS-Ortho 2018",type:"wms",template:"https://geoservices-urbis.irisnet.be/geoserver/ows?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetMap&FORMAT=image/png&TRANSPARENT=true&LAYERS=Urbis:Ortho2018&WIDTH={width}&HEIGHT={height}&CRS={proj}&STYLES=&BBOX={bbox}",projection:"EPSG:3857",endDate:"2018-01-01T00:00:00.000Z",startDate:"2018-01-01T00:00:00.000Z",polygon:[[[4.37973,50.76382],[4.38917,50.76377],[4.43028,50.77517],[4.435,50.775],[4.46427,50.78645],[4.4817,50.79134],[4.48238,50.79617],[4.45921,50.80626],[4.45947,50.81661],[4.47972,50.82036],[4.46959,50.83537],[4.46899,50.84573],[4.46238,50.85396],[4.44968,50.85591],[4.44599,50.85992],[4.4253,50.86615],[4.43183,50.87628],[4.44007,50.87845],[4.43106,50.89014],[4.43595,50.89502],[4.4296,50.90103],[4.41655,50.90757],[4.41543,50.91342],[4.39578,50.91407],[4.38462,50.91093],[4.38119,50.90319],[4.3726,50.90032],[4.36213,50.9033],[4.34857,50.90341],[4.34025,50.90411],[4.32892,50.90249],[4.31647,50.89605],[4.30634,50.89274],[4.29004,50.88982],[4.29149,50.88495],[4.29553,50.88262],[4.29561,50.88094],[4.28274,50.87227],[4.27699,50.86713],[4.27802,50.85911],[4.28042,50.85721],[4.28094,50.84215],[4.27193,50.84036],[4.25467,50.83695],[4.25107,50.83288],[4.25227,50.82697],[4.24343,50.82182],[4.24403,50.81548],[4.25519,50.8151],[4.25802,50.80935],[4.27218,50.81011],[4.27579,50.80696],[4.2854,50.80506],[4.28901,50.80691],[4.29802,50.80593],[4.30282,50.79709],[4.31458,50.79454],[4.31621,50.78624],[4.32952,50.77381],[4.34205,50.77164],[4.34522,50.77337],[4.37853,50.76811],[4.37973,50.76382]]],terms_text:"Realized by means of Brussels UrbIS®© - Distribution & Copyright CIRB",best:true,icon:"https://osmlab.github.io/editor-layer-index/sources/europe/be/URBIS2015aerialimagery.png"},{id:"UrbisAdmFR",name:"UrbisAdm FR",type:"wms",template:"https://geoservices-urbis.irisnet.be/geoserver/ows?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetMap&FORMAT=image/png&TRANSPARENT=true&LAYERS=urbisFR&WIDTH={width}&HEIGHT={height}&CRS={proj}&STYLES=&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[4.4347,50.77647],[4.45427,50.78367],[4.4635,50.78798],[4.48273,50.79313],[4.44715,50.80821],[4.44831,50.81147],[4.45788,50.81646],[4.45466,50.81838],[4.4768,50.82036],[4.46552,50.83549],[4.46835,50.83744],[4.46037,50.85218],[4.44578,50.85522],[4.44466,50.85809],[4.43891,50.86042],[4.43719,50.85868],[4.42612,50.86296],[4.42037,50.86789],[4.42973,50.87764],[4.43736,50.87867],[4.42681,50.89026],[4.43307,50.89464],[4.42277,50.90298],[4.41187,50.90753],[4.41376,50.91159],[4.4032,50.91381],[4.38758,50.9098],[4.37771,50.89713],[4.36303,50.90119],[4.34183,50.9026],[4.33093,50.90119],[4.31651,50.89389],[4.3057,50.8908],[4.29334,50.88847],[4.29428,50.88658],[4.29737,50.8849],[4.29918,50.87975],[4.28587,50.87201],[4.27858,50.86556],[4.28064,50.85944],[4.28999,50.85625],[4.28304,50.85354],[4.28793,50.84833],[4.28291,50.8479],[4.28158,50.83785],[4.27399,50.8392],[4.27184,50.8363],[4.25793,50.83571],[4.2545,50.83289],[4.25523,50.82839],[4.2509,50.82419],[4.24382,50.81928],[4.2566,50.81743],[4.25995,50.81106],[4.27274,50.81212],[4.2757,50.81087],[4.27708,50.80835],[4.28454,50.80732],[4.29274,50.80911],[4.2951,50.80881],[4.30162,50.81299],[4.3066,50.81239],[4.30205,50.80445],[4.30501,50.7987],[4.31527,50.79661],[4.31845,50.79403],[4.3193,50.78722],[4.32201,50.7832],[4.33089,50.7758],[4.3408,50.77354],[4.34677,50.77574],[4.3551,50.77354],[4.36527,50.77284],[4.38243,50.76917],[4.38303,50.76375],[4.43312,50.77802],[4.4347,50.77647]]],terms_text:"Realized by means of Brussels UrbIS®© - Distribution & Copyright CIRB",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/be/URBIS2015aerialimagery.png"},{id:"UrbisAdmNL",name:"UrbisAdm NL",type:"wms",template:"https://geoservices-urbis.irisnet.be/geoserver/ows?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetMap&FORMAT=image/png&TRANSPARENT=true&LAYERS=urbisNL&WIDTH={width}&HEIGHT={height}&CRS={proj}&STYLES=&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[4.4347,50.77647],[4.45427,50.78367],[4.4635,50.78798],[4.48273,50.79313],[4.44715,50.80821],[4.44831,50.81147],[4.45788,50.81646],[4.45466,50.81838],[4.4768,50.82036],[4.46552,50.83549],[4.46835,50.83744],[4.46037,50.85218],[4.44578,50.85522],[4.44466,50.85809],[4.43891,50.86042],[4.43719,50.85868],[4.42612,50.86296],[4.42037,50.86789],[4.42973,50.87764],[4.43736,50.87867],[4.42681,50.89026],[4.43307,50.89464],[4.42277,50.90298],[4.41187,50.90753],[4.41376,50.91159],[4.4032,50.91381],[4.38758,50.9098],[4.37771,50.89713],[4.36303,50.90119],[4.34183,50.9026],[4.33093,50.90119],[4.31651,50.89389],[4.3057,50.8908],[4.29334,50.88847],[4.29428,50.88658],[4.29737,50.8849],[4.29918,50.87975],[4.28587,50.87201],[4.27858,50.86556],[4.28064,50.85944],[4.28999,50.85625],[4.28304,50.85354],[4.28793,50.84833],[4.28291,50.8479],[4.28158,50.83785],[4.27399,50.8392],[4.27184,50.8363],[4.25793,50.83571],[4.2545,50.83289],[4.25523,50.82839],[4.2509,50.82419],[4.24382,50.81928],[4.2566,50.81743],[4.25995,50.81106],[4.27274,50.81212],[4.2757,50.81087],[4.27708,50.80835],[4.28454,50.80732],[4.29274,50.80911],[4.2951,50.80881],[4.30162,50.81299],[4.3066,50.81239],[4.30205,50.80445],[4.30501,50.7987],[4.31527,50.79661],[4.31845,50.79403],[4.3193,50.78722],[4.32201,50.7832],[4.33089,50.7758],[4.3408,50.77354],[4.34677,50.77574],[4.3551,50.77354],[4.36527,50.77284],[4.38243,50.76917],[4.38303,50.76375],[4.43312,50.77802],[4.4347,50.77647]]],terms_text:"Realized by means of Brussels UrbIS®© - Distribution & Copyright CIRB",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/be/URBIS2015aerialimagery.png"},{id:"URBISfr2013",name:"URBISfr numerical imagery (2013)",type:"wms",template:"https://gis.irisnet.be/arcgis/rest/services/basemap/urbisFR/MapServer/export?f=image&format=png8&transparent=False&SRS={proj}&bboxSR=3857&imageSR=3857&bbox={bbox}&size={width},{height}",projection:"EPSG:3857",endDate:"2013-01-01T00:00:00.000Z",startDate:"2013-01-01T00:00:00.000Z",polygon:[[[4.4347,50.77647],[4.45427,50.78367],[4.4635,50.78798],[4.48273,50.79313],[4.44715,50.80821],[4.44831,50.81147],[4.45788,50.81646],[4.45466,50.81838],[4.4768,50.82036],[4.46552,50.83549],[4.46835,50.83744],[4.46037,50.85218],[4.44578,50.85522],[4.44466,50.85809],[4.43891,50.86042],[4.43719,50.85868],[4.42612,50.86296],[4.42037,50.86789],[4.42973,50.87764],[4.43736,50.87867],[4.42681,50.89026],[4.43307,50.89464],[4.42277,50.90298],[4.41187,50.90753],[4.41376,50.91159],[4.4032,50.91381],[4.38758,50.9098],[4.37771,50.89713],[4.36303,50.90119],[4.34183,50.9026],[4.33093,50.90119],[4.31651,50.89389],[4.3057,50.8908],[4.29334,50.88847],[4.29428,50.88658],[4.29737,50.8849],[4.29918,50.87975],[4.28587,50.87201],[4.27858,50.86556],[4.28064,50.85944],[4.28999,50.85625],[4.28304,50.85354],[4.28793,50.84833],[4.28291,50.8479],[4.28158,50.83785],[4.27399,50.8392],[4.27184,50.8363],[4.25793,50.83571],[4.2545,50.83289],[4.25523,50.82839],[4.2509,50.82419],[4.24382,50.81928],[4.2566,50.81743],[4.25995,50.81106],[4.27274,50.81212],[4.2757,50.81087],[4.27708,50.80835],[4.28454,50.80732],[4.29274,50.80911],[4.2951,50.80881],[4.30162,50.81299],[4.3066,50.81239],[4.30205,50.80445],[4.30501,50.7987],[4.31527,50.79661],[4.31845,50.79403],[4.3193,50.78722],[4.32201,50.7832],[4.33089,50.7758],[4.3408,50.77354],[4.34677,50.77574],[4.3551,50.77354],[4.36527,50.77284],[4.38243,50.76917],[4.38303,50.76375],[4.43312,50.77802],[4.4347,50.77647]]],terms_text:"Realized by means of Brussels UrbIS®© - Distribution & Copyright CIRB",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/be/URBIS2015aerialimagery.png"},{id:"URBISnl2013",name:"URBISnl numerical imagery (2013)",type:"wms",template:"https://gis.irisnet.be/arcgis/rest/services/basemap/urbisNL/MapServer/export?f=image&format=png8&transparent=False&SRS={proj}&bboxSR=3857&imageSR=3857&bbox={bbox}&size={width},{height}",projection:"EPSG:3857",endDate:"2013-01-01T00:00:00.000Z",startDate:"2013-01-01T00:00:00.000Z",polygon:[[[4.4347,50.77647],[4.45427,50.78367],[4.4635,50.78798],[4.48273,50.79313],[4.44715,50.80821],[4.44831,50.81147],[4.45788,50.81646],[4.45466,50.81838],[4.4768,50.82036],[4.46552,50.83549],[4.46835,50.83744],[4.46037,50.85218],[4.44578,50.85522],[4.44466,50.85809],[4.43891,50.86042],[4.43719,50.85868],[4.42612,50.86296],[4.42037,50.86789],[4.42973,50.87764],[4.43736,50.87867],[4.42681,50.89026],[4.43307,50.89464],[4.42277,50.90298],[4.41187,50.90753],[4.41376,50.91159],[4.4032,50.91381],[4.38758,50.9098],[4.37771,50.89713],[4.36303,50.90119],[4.34183,50.9026],[4.33093,50.90119],[4.31651,50.89389],[4.3057,50.8908],[4.29334,50.88847],[4.29428,50.88658],[4.29737,50.8849],[4.29918,50.87975],[4.28587,50.87201],[4.27858,50.86556],[4.28064,50.85944],[4.28999,50.85625],[4.28304,50.85354],[4.28793,50.84833],[4.28291,50.8479],[4.28158,50.83785],[4.27399,50.8392],[4.27184,50.8363],[4.25793,50.83571],[4.2545,50.83289],[4.25523,50.82839],[4.2509,50.82419],[4.24382,50.81928],[4.2566,50.81743],[4.25995,50.81106],[4.27274,50.81212],[4.2757,50.81087],[4.27708,50.80835],[4.28454,50.80732],[4.29274,50.80911],[4.2951,50.80881],[4.30162,50.81299],[4.3066,50.81239],[4.30205,50.80445],[4.30501,50.7987],[4.31527,50.79661],[4.31845,50.79403],[4.3193,50.78722],[4.32201,50.7832],[4.33089,50.7758],[4.3408,50.77354],[4.34677,50.77574],[4.3551,50.77354],[4.36527,50.77284],[4.38243,50.76917],[4.38303,50.76375],[4.43312,50.77802],[4.4347,50.77647]]],terms_text:"Realized by means of Brussels UrbIS®© - Distribution & Copyright CIRB",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/be/URBIS2015aerialimagery.png"},{id:"USGS-Imagery",name:"USGS Imagery",type:"tms",template:"https://ags-proxy.openstreetmap.us/tiles/{zoom}/{x}/{y}?url=https%3A%2F%2Fbasemap.nationalmap.gov%2Farcgis%2Frest%2Fservices%2FUSGSImageryOnly%2FMapServer",zoomExtent:[12,20],polygon:[[[-123.25493,48.7529],[-123.25493,48.55923],[-123.19222,48.55923],[-123.19222,48.43484],[-122.94196,48.43484],[-122.94196,48.37208],[-122.88062,48.37208],[-122.88062,48.30948],[-122.81676,48.30948],[-122.81676,48.19046],[-123.00411,48.19046],[-123.00411,48.12759],[-123.05842,48.12759],[-123.05842,48.19051],[-123.25411,48.19051],[-123.25411,48.1275],[-123.37066,48.1275],[-123.37066,48.19084],[-124.05826,48.19084],[-124.05826,48.25344],[-124.18152,48.25344],[-124.18152,48.31647],[-124.43191,48.31647],[-124.43191,48.37826],[-124.55646,48.37826],[-124.55646,48.44083],[-124.75551,48.44083],[-124.75551,48.1915],[-124.81853,48.1915],[-124.81853,48.12284],[-124.7553,48.12284],[-124.7553,47.55353],[-124.38121,47.55353],[-124.38121,47.12187],[-124.19289,47.12187],[-124.19289,43.75694],[-124.44434,43.75694],[-124.44434,43.14256],[-124.63989,43.14256],[-124.63989,42.61945],[-124.44385,42.61945],[-124.44385,39.80807],[-123.88157,39.80807],[-123.88157,39.11028],[-123.75805,39.11028],[-123.75805,38.49688],[-123.27028,38.49688],[-123.27028,37.93319],[-122.81481,37.93319],[-122.81481,37.80196],[-122.56643,37.80196],[-122.56643,36.93196],[-121.8784,36.93196],[-121.8784,36.68976],[-122.00347,36.68976],[-122.00347,36.43411],[-121.94142,36.43411],[-121.94142,35.92976],[-121.5041,35.92976],[-121.5041,35.81003],[-121.37903,35.81003],[-121.37903,35.42392],[-120.94265,35.42392],[-120.94265,35.18497],[-120.8172,35.18497],[-120.8172,35.12199],[-120.69184,35.12199],[-120.69184,34.49668],[-120.50459,34.49668],[-120.50459,34.43397],[-120.00788,34.43397],[-120.00788,34.36826],[-119.52835,34.36826],[-119.52835,34.05764],[-119.0061,34.05764],[-119.0061,33.99753],[-118.50463,33.99753],[-118.50463,33.86946],[-118.44132,33.86946],[-118.44132,33.68653],[-118.06691,33.68653],[-118.06691,33.30638],[-117.503,33.30638],[-117.503,33.05003],[-117.31882,33.05003],[-117.31882,32.62059],[-117.1917,32.62059],[-117.1917,32.49746],[-116.7465,32.49746],[-116.7465,32.56092],[-115.99701,32.56092],[-115.99701,32.62649],[-114.88081,32.62649],[-114.88081,32.43408],[-114.62945,32.43408],[-114.62945,32.37316],[-114.44474,32.37316],[-114.44474,32.30754],[-114.25576,32.30754],[-114.25576,32.24446],[-114.06803,32.24446],[-114.06803,32.18291],[-113.81665,32.18291],[-113.81665,32.12076],[-113.63074,32.12076],[-113.63074,32.05651],[-113.44175,32.05651],[-113.44175,31.99844],[-113.2546,31.99844],[-113.2546,31.93254],[-113.06807,31.93254],[-113.06807,31.87181],[-112.81611,31.87181],[-112.81611,31.81042],[-112.63088,31.81042],[-112.63088,31.74647],[-112.44189,31.74647],[-112.44189,31.6856],[-112.25719,31.6856],[-112.25719,31.62104],[-112.00338,31.62104],[-112.00338,31.55958],[-111.81562,31.55958],[-111.81562,31.49702],[-111.62786,31.49702],[-111.62786,31.43399],[-111.4419,31.43399],[-111.4419,31.37339],[-111.25597,31.37339],[-111.25597,31.31132],[-108.18458,31.31132],[-108.18458,31.74595],[-106.50651,31.74595],[-106.50651,31.68423],[-106.37973,31.68423],[-106.37973,31.62175],[-106.31743,31.62175],[-106.31743,31.49682],[-106.25518,31.49682],[-106.25518,31.43449],[-106.19247,31.43449],[-106.19247,31.37213],[-106.00392,31.37213],[-106.00392,31.30933],[-105.94166,31.30933],[-105.94166,31.24575],[-105.87982,31.24575],[-105.87982,31.18362],[-105.81623,31.18362],[-105.81623,31.12072],[-105.69212,31.12072],[-105.69212,31.05848],[-105.63029,31.05848],[-105.63029,30.93283],[-105.50444,30.93283],[-105.50444,30.87159],[-105.4413,30.87159],[-105.4413,30.80846],[-105.37815,30.80846],[-105.37815,30.74718],[-105.19047,30.74718],[-105.19047,30.68432],[-105.12862,30.68432],[-105.12862,30.61997],[-105.00365,30.61997],[-105.00365,30.55891],[-104.9418,30.55891],[-104.9418,30.49632],[-104.8782,30.49632],[-104.8782,30.30983],[-104.81553,30.30983],[-104.81553,30.24783],[-104.75361,30.24783],[-104.75361,29.93539],[-104.69095,29.93539],[-104.69095,29.80902],[-104.62913,29.80902],[-104.62913,29.68436],[-104.56599,29.68436],[-104.56599,29.62235],[-104.50372,29.62235],[-104.50372,29.55954],[-104.44101,29.55954],[-104.44101,29.49748],[-104.25376,29.49748],[-104.25376,29.37167],[-104.1292,29.37167],[-104.1292,29.30916],[-104.06887,29.30916],[-104.06887,29.24673],[-103.81873,29.24673],[-103.81873,29.18431],[-103.75574,29.18431],[-103.75574,29.12232],[-103.56675,29.12232],[-103.56675,29.05981],[-103.50498,29.05981],[-103.50498,28.99675],[-103.31658,28.99675],[-103.31658,28.93469],[-103.05976,28.93469],[-103.05976,29.0593],[-102.99797,29.0593],[-102.99797,29.12129],[-102.93314,29.12129],[-102.93314,29.18486],[-102.8096,29.18486],[-102.8096,29.25262],[-102.87013,29.25262],[-102.87013,29.3081],[-102.80967,29.3081],[-102.80967,29.37155],[-102.74757,29.37155],[-102.74757,29.55819],[-102.68455,29.55819],[-102.68455,29.68477],[-102.49678,29.68477],[-102.49678,29.74577],[-102.30866,29.74577],[-102.30866,29.80866],[-102.19093,29.80866],[-102.19093,29.74601],[-101.50499,29.74601],[-101.50499,29.68468],[-101.38058,29.68468],[-101.38058,29.55945],[-101.31751,29.55945],[-101.31751,29.49589],[-101.19101,29.49589],[-101.19101,29.43261],[-101.0675,29.43261],[-101.0675,29.30881],[-100.94189,29.30881],[-100.94189,29.24562],[-100.81673,29.24562],[-100.81673,29.11904],[-100.75227,29.11904],[-100.75227,29.05782],[-100.69254,29.05782],[-100.69254,28.87204],[-100.62902,28.87204],[-100.62902,28.80954],[-100.56799,28.80954],[-100.56799,28.62255],[-100.50404,28.62255],[-100.50404,28.55838],[-100.44218,28.55838],[-100.44218,28.49683],[-100.37943,28.49683],[-100.37943,28.30929],[-100.31719,28.30929],[-100.31719,28.18357],[-100.25448,28.18357],[-100.25448,28.12139],[-100.12823,28.12139],[-100.12823,28.05921],[-100.06595,28.05921],[-100.06595,27.99661],[-100.00239,27.99661],[-100.00239,27.93322],[-99.94265,27.93322],[-99.94265,27.74547],[-99.81685,27.74547],[-99.81685,27.68343],[-99.75413,27.68343],[-99.75413,27.62215],[-99.62916,27.62215],[-99.62916,27.5589],[-99.56728,27.5589],[-99.56728,27.43538],[-99.50418,27.43538],[-99.50418,27.3774],[-99.56718,27.3774],[-99.56718,27.24637],[-99.50498,27.24637],[-99.50498,26.99656],[-99.44274,26.99656],[-99.44274,26.8728],[-99.38006,26.8728],[-99.38006,26.80682],[-99.31907,26.80682],[-99.31907,26.74736],[-99.25375,26.74736],[-99.25375,26.62101],[-99.19106,26.62101],[-99.19106,26.49567],[-99.13006,26.49567],[-99.13006,26.37138],[-99.00295,26.37138],[-99.00295,26.30938],[-98.81657,26.30938],[-98.81657,26.24578],[-98.69201,26.24578],[-98.69201,26.18371],[-98.44409,26.18371],[-98.44409,26.12172],[-98.38232,26.12172],[-98.38232,26.05965],[-98.25327,26.05965],[-98.25327,25.99869],[-98.01091,25.99869],[-98.01091,25.99323],[-97.69323,25.99323],[-97.69323,25.93341],[-97.63139,25.93341],[-97.63139,25.86959],[-97.50468,25.86959],[-97.50468,25.80735],[-97.30834,25.80735],[-97.30834,25.87312],[-97.24563,25.87312],[-97.24563,25.93537],[-97.11389,25.93537],[-97.11389,27.68092],[-97.0571,27.68092],[-97.0571,27.81082],[-95.58108,27.81082],[-95.58108,28.74688],[-94.27104,28.74688],[-94.27104,29.55941],[-92.50299,29.55941],[-92.50299,29.49748],[-91.87762,29.49748],[-91.87762,29.3727],[-91.37842,29.3727],[-91.37842,29.24683],[-91.3154,29.24683],[-91.3154,29.18443],[-91.12947,29.18443],[-91.12947,29.12326],[-91.00526,29.12326],[-91.00526,28.99684],[-89.45002,28.99684],[-89.45002,28.86774],[-88.81043,28.86774],[-88.81043,30.18419],[-85.87915,30.18419],[-85.87915,29.5455],[-84.83681,29.5455],[-84.83681,29.62252],[-84.74828,29.62252],[-84.74828,29.68362],[-84.68589,29.68362],[-84.68589,29.74684],[-83.6297,29.74684],[-83.6297,29.43244],[-83.31749,29.43244],[-83.31749,29.05794],[-82.87966,29.05794],[-82.87966,27.74535],[-82.81828,27.74535],[-82.81828,26.92909],[-82.37968,26.92909],[-82.37968,26.36942],[-81.87771,26.36942],[-81.87771,25.80597],[-81.50369,25.80597],[-81.50369,25.74748],[-81.44055,25.74748],[-81.44055,25.68515],[-81.31559,25.68515],[-81.31559,25.5601],[-81.25385,25.5601],[-81.25385,25.43424],[-81.1902,25.43424],[-81.1902,25.12343],[-81.12881,25.12343],[-81.12881,25.06194],[-81.06492,25.06194],[-81.06492,24.81578],[-81.62895,24.81578],[-81.62895,24.75384],[-81.69072,24.75384],[-81.69072,24.68994],[-81.81732,24.68994],[-81.81732,24.62792],[-82.191,24.62792],[-82.191,24.49629],[-81.62166,24.49629],[-81.62166,24.55948],[-81.37201,24.55948],[-81.37201,24.62207],[-81.05933,24.62207],[-81.05933,24.68483],[-80.93471,24.68483],[-80.93471,24.74748],[-80.74711,24.74748],[-80.74711,24.81006],[-80.36299,24.81006],[-80.36299,25.11759],[-80.12234,25.11759],[-80.12234,25.74724],[-80.05885,25.74724],[-80.05885,26.37083],[-79.99584,26.37083],[-79.99584,26.9398],[-80.05873,26.9398],[-80.05873,27.12775],[-80.12263,27.12775],[-80.12263,27.25343],[-80.1847,27.25343],[-80.1847,27.37812],[-80.24617,27.37812],[-80.24617,27.56587],[-80.30948,27.56587],[-80.30948,27.75303],[-80.37215,27.75303],[-80.37215,27.87745],[-80.43515,27.87745],[-80.43515,28.00334],[-80.49661,28.00334],[-80.49661,28.12773],[-80.55872,28.12773],[-80.55872,28.37235],[-80.49663,28.37235],[-80.49663,29.51603],[-81.12136,29.51603],[-81.12136,31.6847],[-80.60187,31.6847],[-80.60187,32.24753],[-79.4921,32.24753],[-79.4921,32.99703],[-79.11165,32.99703],[-79.11165,33.37295],[-78.61536,33.37295],[-78.61536,33.80976],[-77.9317,33.80976],[-77.9317,33.87182],[-77.86923,33.87182],[-77.86923,34.05525],[-77.68264,34.05525],[-77.68264,34.29746],[-77.24535,34.29746],[-77.24535,34.55986],[-76.49733,34.55986],[-76.49733,34.6228],[-76.43376,34.6228],[-76.43376,34.68493],[-76.37321,34.68493],[-76.37321,34.74677],[-76.30594,34.74677],[-76.30594,34.80855],[-76.2468,34.80855],[-76.2468,34.87284],[-76.18259,34.87284],[-76.18259,34.93353],[-76.12081,34.93353],[-76.12081,34.99524],[-75.9979,34.99524],[-75.9979,35.05782],[-75.87034,35.05782],[-75.87034,35.12191],[-75.74622,35.12191],[-75.74622,35.18189],[-75.49297,35.18189],[-75.49297,35.3083],[-75.43257,35.3083],[-75.43257,35.75425],[-75.49699,35.75425],[-75.49699,37.81056],[-75.3083,37.81056],[-75.3083,37.87201],[-75.2456,37.87201],[-75.2456,37.99548],[-75.18288,37.99548],[-75.18288,38.05851],[-75.11848,38.05851],[-75.11848,38.24691],[-75.05921,38.24691],[-75.05921,38.37043],[-74.99481,38.37043],[-74.99481,38.87184],[-74.48783,38.87184],[-74.48783,39.30894],[-74.17663,39.30894],[-74.17663,39.62247],[-74.0567,39.62247],[-74.0567,39.93318],[-73.9959,39.93318],[-73.9959,40.18549],[-73.93416,40.18549],[-73.93416,40.49595],[-73.8723,40.49595],[-73.8723,40.55271],[-71.80745,40.55271],[-71.80745,41.3088],[-70.88251,41.3088],[-70.88251,41.18498],[-70.74619,41.18498],[-70.74619,41.30919],[-70.43376,41.30919],[-70.43376,41.49639],[-69.93343,41.49639],[-69.93343,41.62308],[-69.86986,41.62308],[-69.86986,41.87769],[-69.93579,41.87769],[-69.93579,42.00323],[-69.99758,42.00323],[-69.99758,42.06502],[-70.06061,42.06502],[-70.06061,42.12943],[-70.55729,42.12943],[-70.55729,43.24871],[-70.49741,43.24871],[-70.49741,43.30922],[-70.37042,43.30922],[-70.37042,43.37196],[-70.30857,43.37196],[-70.30857,43.49699],[-70.18392,43.49699],[-70.18392,43.62235],[-70.05758,43.62235],[-70.05758,43.68502],[-69.74552,43.68502],[-69.74552,43.74766],[-69.24728,43.74766],[-69.24728,43.8107],[-69.05607,43.8107],[-69.05607,43.87172],[-68.99505,43.87172],[-68.99505,43.9982],[-68.49637,43.9982],[-68.49637,44.05974],[-68.3081,44.05974],[-68.3081,44.12214],[-68.18518,44.12214],[-68.18518,44.30814],[-67.9956,44.30814],[-67.9956,44.37275],[-67.8103,44.37275],[-67.8103,44.43518],[-67.49653,44.43518],[-67.49653,44.49688],[-67.37102,44.49688],[-67.37102,44.56006],[-67.18488,44.56006],[-67.18488,44.62133],[-67.12212,44.62133],[-67.12212,44.68679],[-67.05936,44.68679],[-67.05936,44.74737],[-66.93111,44.74737],[-66.93111,44.94066],[-66.99468,44.94066],[-66.99468,45.00245],[-67.05958,45.00245],[-67.05958,45.12734],[-67.1202,45.12734],[-67.1202,45.19101],[-67.24698,45.19101],[-67.24698,45.25344],[-67.31775,45.25344],[-67.31775,45.18984],[-67.37075,45.18984],[-67.37075,45.2534],[-67.43269,45.2534],[-67.43269,45.30834],[-67.37086,45.30834],[-67.37086,45.4397],[-67.43056,45.4397],[-67.43056,45.49501],[-67.37099,45.49501],[-67.37099,45.62645],[-67.6215,45.62645],[-67.6215,45.68961],[-67.68383,45.68961],[-67.68383,45.75326],[-67.74621,45.75326],[-67.74621,47.12682],[-67.87001,47.12682],[-67.87001,47.19003],[-67.93238,47.19003],[-67.93238,47.25397],[-67.99594,47.25397],[-67.99594,47.31497],[-68.12067,47.31497],[-68.12067,47.37808],[-68.44232,47.37808],[-68.44232,47.31661],[-68.63143,47.31661],[-68.63143,47.25447],[-68.9978,47.25447],[-68.9978,47.43989],[-69.06072,47.43989],[-69.06072,47.50476],[-69.25381,47.50476],[-69.25381,47.43981],[-69.31793,47.43981],[-69.31793,47.3786],[-69.44385,47.3786],[-69.44385,47.31563],[-69.50382,47.31563],[-69.50382,47.25258],[-69.56678,47.25258],[-69.56678,47.19109],[-69.63035,47.19109],[-69.63035,47.1287],[-69.69331,47.1287],[-69.69331,47.06543],[-69.75571,47.06543],[-69.75571,47.00428],[-69.81804,47.00428],[-69.81804,46.94153],[-69.8804,46.94153],[-69.8804,46.87925],[-69.94217,46.87925],[-69.94217,46.81774],[-70.00631,46.81774],[-70.00631,46.69203],[-70.07043,46.69203],[-70.07043,46.44259],[-70.19459,46.44259],[-70.19459,46.37859],[-70.2562,46.37859],[-70.2562,46.31526],[-70.32037,46.31526],[-70.32037,46.06512],[-70.3815,46.06512],[-70.3815,45.93552],[-70.32016,45.93552],[-70.32016,45.87948],[-70.44931,45.87948],[-70.44931,45.75387],[-70.507,45.75387],[-70.507,45.69169],[-70.63166,45.69169],[-70.63166,45.62916],[-70.75755,45.62916],[-70.75755,45.44147],[-70.88099,45.44147],[-70.88099,45.37806],[-71.13328,45.37806],[-71.13328,45.31515],[-71.38303,45.31515],[-71.38303,45.25342],[-71.50764,45.25342],[-71.50764,45.06557],[-73.94189,45.06557],[-73.94189,45.00312],[-74.74697,45.00312],[-74.74697,45.0649],[-74.8801,45.0649],[-74.8801,45.0029],[-75.06625,45.0029],[-75.06625,44.94152],[-75.25394,44.94152],[-75.25394,44.8776],[-75.37896,44.8776],[-75.37896,44.81535],[-75.44313,44.81535],[-75.44313,44.75361],[-75.56666,44.75361],[-75.56666,44.69099],[-75.62902,44.69099],[-75.62902,44.6285],[-75.75405,44.6285],[-75.75405,44.56638],[-75.81731,44.56638],[-75.81731,44.50289],[-75.87995,44.50289],[-75.87995,44.37849],[-76.13003,44.37849],[-76.13003,44.31592],[-76.1927,44.31592],[-76.1927,44.25344],[-76.31826,44.25344],[-76.31826,44.19167],[-76.3793,44.19167],[-76.3793,44.06537],[-76.44276,44.06537],[-76.44276,43.99638],[-76.31703,43.99638],[-76.31703,43.94146],[-76.50766,43.94146],[-76.50766,43.87233],[-76.383,43.87233],[-76.383,43.80919],[-76.25341,43.80919],[-76.25341,43.56652],[-76.50648,43.56652],[-76.50648,43.50339],[-76.63312,43.50339],[-76.63312,43.44323],[-76.69511,43.44323],[-76.69511,43.37869],[-76.81778,43.37869],[-76.81778,43.31807],[-77.682,43.31807],[-77.682,43.37894],[-78.05659,43.37894],[-78.05659,43.43969],[-78.43897,43.43969],[-78.43897,43.37944],[-78.88034,43.37944],[-78.88034,43.31497],[-79.12989,43.31497],[-79.12989,43.24293],[-79.06696,43.24293],[-79.06696,43.12999],[-79.12989,43.12999],[-79.12989,43.05773],[-79.07126,43.05773],[-79.07126,42.92949],[-78.94326,42.92949],[-78.94326,42.75422],[-79.06944,42.75422],[-79.06944,42.69416],[-79.13344,42.69416],[-79.13344,42.6297],[-79.19475,42.6297],[-79.19475,42.56635],[-79.37868,42.56635],[-79.37868,42.50334],[-79.4443,42.50334],[-79.4443,42.44106],[-79.56799,42.44106],[-79.56799,42.37753],[-79.69062,42.37753],[-79.69062,42.31711],[-79.81646,42.31711],[-79.81646,42.25345],[-80.00524,42.25345],[-80.00524,42.19092],[-80.19168,42.19092],[-80.19168,42.12726],[-80.3168,42.12726],[-80.3168,42.06699],[-80.50632,42.06699],[-80.50632,42.00343],[-80.69305,42.00343],[-80.69305,41.94151],[-80.94404,41.94151],[-80.94404,41.87812],[-81.19427,41.87812],[-81.19427,41.81665],[-81.31901,41.81665],[-81.31901,41.75455],[-81.44184,41.75455],[-81.44184,41.69096],[-81.50535,41.69096],[-81.50535,41.63016],[-82.74701,41.63016],[-82.74701,41.75369],[-82.88391,41.75369],[-82.88391,41.56561],[-82.99572,41.56561],[-82.99572,41.62704],[-83.12578,41.62704],[-83.12578,41.68784],[-83.24747,41.68784],[-83.24747,41.75369],[-83.37373,41.75369],[-83.37373,41.80928],[-83.3106,41.80928],[-83.3106,41.87161],[-83.24747,41.87161],[-83.24747,41.93614],[-83.18434,41.93614],[-83.18434,41.99609],[-83.12077,41.99609],[-83.12077,42.24648],[-83.05892,42.24648],[-83.05892,42.30896],[-82.86853,42.30896],[-82.86853,42.37177],[-82.80722,42.37177],[-82.80722,42.55855],[-82.75537,42.55855],[-82.75537,42.49549],[-82.5599,42.49549],[-82.5599,42.55855],[-82.49678,42.55855],[-82.49678,42.68336],[-82.43289,42.68336],[-82.43289,42.93422],[-82.37006,42.93422],[-82.37006,43.06481],[-82.43289,43.06481],[-82.43289,43.19176],[-82.49475,43.19176],[-82.49475,43.50346],[-82.55713,43.50346],[-82.55713,43.81609],[-82.61979,43.81609],[-82.61979,43.94221],[-82.68395,43.94221],[-82.68395,44.00226],[-82.74653,44.00226],[-82.74653,44.06705],[-82.87087,44.06705],[-82.87087,44.12919],[-83.00852,44.12919],[-83.00852,44.06648],[-83.13361,44.06648],[-83.13361,44.00539],[-83.24145,44.00539],[-83.24145,44.9962],[-83.18061,44.9962],[-83.18061,45.0673],[-83.24552,45.0673],[-83.24552,45.12874],[-83.30659,45.12874],[-83.30659,45.25515],[-83.37061,45.25515],[-83.37061,45.31659],[-83.43256,45.31659],[-83.43256,45.37921],[-83.61784,45.37921],[-83.61784,45.44197],[-83.80843,45.44197],[-83.80843,45.50362],[-84.05507,45.50362],[-84.05507,45.56479],[-84.12352,45.56479],[-84.12352,45.62878],[-84.18075,45.62878],[-84.18075,45.69147],[-84.31116,45.69147],[-84.31116,45.93371],[-83.821,45.93371],[-83.821,45.87251],[-83.49681,45.87251],[-83.49681,45.93371],[-83.43381,45.93371],[-83.43381,46.00169],[-83.49627,46.00169],[-83.49627,46.06682],[-83.56,46.06682],[-83.56,46.12616],[-83.99546,46.12616],[-83.99546,46.19317],[-84.05918,46.19317],[-84.05918,46.3815],[-84.11526,46.3815],[-84.11526,46.49536],[-84.05918,46.49536],[-84.05918,46.56827],[-84.25795,46.56827],[-84.25795,46.50512],[-84.30719,46.50512],[-84.30719,46.56827],[-84.44154,46.56827],[-84.44154,46.50453],[-84.99657,46.50453],[-84.99657,46.68429],[-84.92982,46.68429],[-84.92982,46.81808],[-85.31659,46.81808],[-85.31659,46.75358],[-87.55626,46.75358],[-87.55626,47.44074],[-87.68254,47.44074],[-87.68254,47.50356],[-88.25607,47.50356],[-88.25607,47.44337],[-88.44174,47.44337],[-88.44174,47.37899],[-88.50683,47.37899],[-88.50683,47.31539],[-88.63128,47.31539],[-88.63128,47.25398],[-88.75696,47.25398],[-88.75696,47.19347],[-88.88383,47.19347],[-88.88383,47.12847],[-88.94342,47.12847],[-88.94342,47.06621],[-89.07087,47.06621],[-89.07087,47.00268],[-89.25656,47.00268],[-89.25656,46.94108],[-90.36777,46.94108],[-90.36777,47.68448],[-90.307,47.68448],[-90.307,47.74602],[-89.99486,47.74602],[-89.99486,47.80827],[-89.80486,47.80827],[-89.80486,47.87006],[-89.67977,47.87006],[-89.67977,47.93396],[-89.49338,47.93396],[-89.49338,47.9958],[-89.42847,47.9958],[-89.42847,48.06564],[-89.99327,48.06564],[-89.99327,48.1283],[-90.74559,48.1283],[-90.74559,48.18931],[-90.80873,48.18931],[-90.80873,48.25221],[-91.06776,48.25221],[-91.06776,48.19167],[-91.19462,48.19167],[-91.19462,48.1279],[-91.68142,48.1279],[-91.68142,48.2526],[-91.93219,48.2526],[-91.93219,48.31425],[-91.99297,48.31425],[-91.99297,48.37808],[-92.31894,48.37808],[-92.31894,48.25291],[-92.37322,48.25291],[-92.37322,48.31534],[-92.43223,48.31534],[-92.43223,48.44114],[-92.49772,48.44114],[-92.49772,48.50178],[-92.56794,48.50178],[-92.56794,48.43958],[-92.62105,48.43958],[-92.62105,48.56508],[-92.80868,48.56508],[-92.80868,48.62869],[-92.80868,48.62674],[-92.93318,48.62674],[-92.93318,48.69221],[-93.00517,48.69221],[-93.00517,48.6283],[-93.12259,48.6283],[-93.12259,48.69221],[-93.31908,48.69221],[-93.31908,48.62674],[-93.50495,48.62674],[-93.50495,48.56352],[-93.74746,48.56352],[-93.74746,48.62674],[-93.81355,48.62674],[-93.81355,48.68988],[-94.24531,48.68988],[-94.24531,48.75543],[-94.61832,48.75543],[-94.61832,48.94104],[-94.6809,48.94104],[-94.6809,49.00297],[-94.74415,49.00297],[-94.74415,49.25361],[-94.80841,49.25361],[-94.80841,49.37841],[-95.11924,49.37841],[-95.11924,49.44253],[-95.19343,49.44253],[-95.19343,49.00353],[-96.87069,49.00353],[-96.87069,49.06561],[-99.00493,49.06561],[-99.00493,49.00507],[-109.36993,49.00507],[-109.36993,49.06682],[-109.50587,49.06682],[-109.50587,49.00507],[-114.183,49.00507],[-114.183,49.06873],[-114.75787,49.06873],[-114.75787,49.00507],[-115.43373,49.00507],[-115.43373,49.06714],[-116.50627,49.06714],[-116.50627,49.00507],[-117.30895,49.00507],[-117.30895,49.06598],[-119.88295,49.06598],[-119.88295,49.00507],[-120.12086,49.00507],[-120.12086,49.06784],[-121.44516,49.06784],[-121.44516,49.00507],[-121.93118,49.00507],[-121.93118,49.06561],[-122.81748,49.06561],[-122.81748,49.00291],[-122.87952,49.00291],[-122.87952,48.9347],[-122.81746,48.9347],[-122.81746,48.8102],[-122.75389,48.8102],[-122.75389,48.75338],[-122.87129,48.75338],[-122.87129,48.81539],[-123.00554,48.81539],[-123.00554,48.75295],[-123.12969,48.75295],[-123.12969,48.69022],[-123.18382,48.69022],[-123.18382,48.7529],[-123.25493,48.7529]],[[-122.93417,37.75215],[-122.93475,37.6842],[-123.0679,37.6849],[-123.06737,37.74753],[-123.12926,37.74785],[-123.12869,37.81569],[-123.05907,37.81532],[-123.05959,37.75281],[-122.93417,37.75215]],[[-71.62995,41.25409],[-71.49665,41.25414],[-71.49656,41.12297],[-71.62986,41.12291],[-71.62995,41.25409]],[[-70.31843,41.37752],[-70.31834,41.24482],[-70.19066,41.24487],[-70.19062,41.1886],[-69.9336,41.1887],[-69.93373,41.37919],[-69.99507,41.37917],[-69.99511,41.44316],[-70.07078,41.44313],[-70.0707,41.31449],[-70.24617,41.31443],[-70.24621,41.37755],[-70.31843,41.37752]],[[-68.94034,43.94041],[-68.68569,43.9405],[-68.68565,43.87218],[-68.74654,43.87216],[-68.7465,43.81025],[-68.80908,43.81023],[-68.80903,43.74673],[-68.87731,43.7467],[-68.87735,43.81178],[-68.94025,43.81176],[-68.94034,43.94041]],[[-123.12915,49.06451],[-122.99542,49.06451],[-122.99542,48.93432],[-123.12915,48.93432],[-123.12915,49.06451]],[[-82.94071,24.75359],[-82.87194,24.75359],[-82.87194,24.69057],[-82.74462,24.69057],[-82.74462,24.62146],[-82.8088,24.62146],[-82.8088,24.55949],[-82.94071,24.55949],[-82.94071,24.75359]]],description:"Public domain aerial imagery, mostly NAIP",icon:"https://osmlab.github.io/editor-layer-index/sources/north-america/us/USGSTopographicMaps.png"},{id:"USGS-Scanned_Topographic",name:"USGS Topographic Maps",type:"tms",template:"https://caltopo.s3.amazonaws.com/topo/{zoom}/{x}/{y}.png",zoomExtent:[0,16],polygon:[[[-55.99594,52.00107],[-112.02896,52.00107],[-112.03995,56.01308],[-120.00494,56.00592],[-120.01712,60.01202],[-132.00197,60.00239],[-132.01208,63.00193],[-133.96883,63.0005],[-133.9724,63.99225],[-141.04429,63.98726],[-141.06879,69.92046],[-156.24893,71.51583],[-160.44571,70.83527],[-167.08145,68.42906],[-164.08218,67.03914],[-169.01504,65.68269],[-166.57608,64.50778],[-161.82999,64.05006],[-165.08194,63.2603],[-168.02628,59.78623],[-162.53311,59.73089],[-162.35733,58.55905],[-157.83096,58.31753],[-158.00674,57.52404],[-168.22403,53.51022],[-166.55411,53.14277],[-158.77579,54.88541],[-158.6824,55.74964],[-156.55106,56.00848],[-156.15555,56.77466],[-154.70535,56.14337],[-152.07413,57.37035],[-151.62918,58.22653],[-152.00821,58.98056],[-145.9877,60.24741],[-140.38467,59.48634],[-136.53946,57.8061],[-133.79288,54.83483],[-133.33145,53.14277],[-131.46378,51.69838],[-128.52493,51.74602],[-129.79385,50.90159],[-124.56436,47.49786],[-124.03702,45.48627],[-124.6962,42.90428],[-124.49844,40.34146],[-122.80655,37.53929],[-119.99405,33.37085],[-117.24747,32.5412],[-111.13907,31.1977],[-106.70059,31.23529],[-103.20694,28.64618],[-101.84463,29.8158],[-99.20792,26.28744],[-96.79092,25.75432],[-96.92276,27.96911],[-93.47305,29.68226],[-88.94669,28.87732],[-88.6171,30.17736],[-86.2001,30.36713],[-84.96963,29.43379],[-84.09073,30.06333],[-82.97012,28.95426],[-82.97012,27.26824],[-81.25626,25.07956],[-82.09122,24.56105],[-80.06973,24.76073],[-79.85001,27.11188],[-81.27823,30.70777],[-78.99307,33.20554],[-75.03799,35.5983],[-75.85098,37.24252],[-73.74161,40.4586],[-69.89639,41.60224],[-70.68741,43.17629],[-66.93008,44.69516],[-66.53458,43.08007],[-64.20547,43.35229],[-59.50333,45.73221],[-59.51431,46.24762],[-60.0032,46.25901],[-59.99222,47.24506],[-59.00894,47.2376],[-58.99796,47.50267],[-56.51504,47.50267],[-56.52603,46.7477],[-53.99918,46.7477],[-53.9772,46.48358],[-52.49405,46.46354],[-52.50504,48.75361],[-52.99667,48.75451],[-53.01315,49.99551],[-55.00168,50.0061],[-55.03738,53.74721],[-56.00418,53.73421],[-55.99594,52.00107]],[[-59.50127,43.74954],[-60.5024,43.74954],[-60.5024,44],[-59.9984,44],[-59.9984,44.2494],[-59.50127,44.2494],[-59.50127,43.74954]],[[-155.95024,20.49523],[-157.32675,20.49153],[-157.32903,21.23181],[-155.95251,21.23549],[-155.95024,20.49523]],[[-157.64488,21.24845],[-158.28534,21.24674],[-158.2869,21.74996],[-157.64643,21.75167],[-157.64488,21.24845]],[[-156.12602,20.3247],[-154.74617,20.32841],[-154.74174,18.87578],[-156.1216,18.87203],[-156.12602,20.3247]],[[-159.29077,22.24504],[-159.2893,21.76857],[-160.28917,21.76591],[-160.29064,22.24239],[-159.29077,22.24504]]],terms_url:"https://caltopo.com",terms_text:"© Caltopo",icon:"https://osmlab.github.io/editor-layer-index/sources/north-america/us/USGSTopographicMaps.png"},{id:"USSR-Latvia",name:"USSR - Latvia",type:"wms",template:"http://www.gisnet.lv/cgi-bin/topo?FORMAT=image/jpeg&VERSION=1.1.1&service=WMS&REQUEST=GetMap&LAYERS=DTO,DTC,DIVDPTC,PD,VS,DS,PS,M&SRS={proj}&WIDTH={width}&height={height}&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[26.63086,57.56889],[25.16968,58.04882],[22.54395,57.76866],[21.54419,57.53352],[21.01685,56.81892],[21.01685,56.03523],[22.03857,56.38958],[24.71924,56.33481],[26.75171,55.66519],[28.19092,56.13943],[27.78442,57.40946],[26.63086,57.56889]]]},{id:"sjcgis.org-General_Basemap_WM",name:"Vector Streetmap for San Juan County WA",type:"tms",template:"https://sjcgis.org/arcgis/rest/services/Basemaps/General_Basemap_WM/MapServer/tile/{zoom}/{y}/{x}",zoomExtent:[0,19],polygon:[[[-123.27402,48.69297],[-123.00773,48.76726],[-123.00762,48.83158],[-122.7835,48.75842],[-122.6934,48.65852],[-122.76745,48.60361],[-122.74484,48.38708],[-123.24822,48.28353],[-123.11452,48.42261],[-123.21904,48.54857],[-123.27402,48.69297]]],best:true,description:"Public domain street and address data from the San Juan County, WA. Updated at least quarterly."},{id:"vicosa_al",name:"Viçosa AL",type:"wms",template:"http://geoserver.dados.al.gov.br:8080/geoserver/Alagoas/ows?LAYERS=Vicosa&SERVICE=WMS&FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.0&SERVICE=WMS&REQUEST=GetMap&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[-36.198,-9.42067],[-36.19777,-9.41789],[-36.1978,-9.41528],[-36.19801,-9.41074],[-36.19789,-9.40857],[-36.19793,-9.40637],[-36.19797,-9.40561],[-36.19793,-9.40405],[-36.19799,-9.40312],[-36.19827,-9.40028],[-36.19829,-9.39496],[-36.19789,-9.39169],[-36.19844,-9.38932],[-36.19837,-9.3862],[-36.19794,-9.38167],[-36.19801,-9.37972],[-36.19834,-9.37867],[-36.19832,-9.37698],[-36.19817,-9.37586],[-36.19852,-9.37139],[-36.19822,-9.36239],[-36.19862,-9.35319],[-36.19849,-9.35097],[-36.19857,-9.34852],[-36.1988,-9.34668],[-36.1986,-9.34349],[-36.19877,-9.34084],[-36.19895,-9.33301],[-36.19877,-9.33039],[-36.28958,-9.33114],[-36.28938,-9.33319],[-36.2895,-9.33538],[-36.28925,-9.34124],[-36.28945,-9.34291],[-36.28928,-9.34521],[-36.28897,-9.37311],[-36.28915,-9.37481],[-36.28892,-9.37708],[-36.2889,-9.38541],[-36.28872,-9.38633],[-36.28872,-9.39343],[-36.28887,-9.39558],[-36.28877,-9.40129],[-36.28862,-9.40652],[-36.28872,-9.40715],[-36.28877,-9.42133],[-36.198,-9.42067]]],terms_url:"http://www.seplag.al.gov.br",terms_text:"Secretaria de Estado do Planejamento, Gestão e Patrimônio"},{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",zoomExtent:[12,19],polygon:[[[16.54475,48.17286],[16.54103,48.17657],[16.54978,48.17675],[16.54665,48.17162],[16.55629,48.16171],[16.55567,48.16446],[16.56161,48.16037],[16.57306,48.16319],[16.57603,48.13522],[16.54301,48.14333],[16.51377,48.15893],[16.4777,48.15744],[16.45536,48.13951],[16.43313,48.13788],[16.43701,48.11994],[16.42291,48.12306],[16.4083,48.11791],[16.40511,48.12198],[16.3246,48.13779],[16.31181,48.11945],[16.29806,48.12896],[16.2711,48.13385],[16.23607,48.13001],[16.2189,48.12377],[16.2181,48.12807],[16.23861,48.13205],[16.23843,48.13716],[16.22081,48.13555],[16.20986,48.14762],[16.22321,48.15318],[16.19798,48.15454],[16.19619,48.16396],[16.18183,48.17112],[16.19981,48.18616],[16.20739,48.20235],[16.20194,48.20479],[16.20962,48.20963],[16.1976,48.21479],[16.19778,48.22288],[16.18517,48.2232],[16.19911,48.22858],[16.19251,48.23671],[16.20677,48.26483],[16.24105,48.24837],[16.24154,48.23832],[16.25662,48.23988],[16.27043,48.25193],[16.26406,48.25492],[16.28556,48.25832],[16.29412,48.26395],[16.28617,48.2667],[16.28901,48.27051],[16.32741,48.27721],[16.34813,48.29048],[16.35351,48.28369],[16.3706,48.2817],[16.36714,48.28685],[16.37787,48.28832],[16.37557,48.29592],[16.37982,48.30201],[16.38536,48.30146],[16.38043,48.31507],[16.39518,48.32257],[16.39412,48.31926],[16.40287,48.31676],[16.41682,48.32253],[16.43803,48.31628],[16.44041,48.29192],[16.47547,48.27501],[16.48123,48.27343],[16.4835,48.27971],[16.48132,48.29351],[16.49645,48.29249],[16.51491,48.28554],[16.5067,48.2736],[16.51285,48.26784],[16.53263,48.2621],[16.54697,48.263],[16.53941,48.24284],[16.55274,48.239],[16.53627,48.20044],[16.54184,48.18206],[16.53631,48.17755],[16.54475,48.17286]]],terms_url:"https://data.wien.gv.at",terms_text:"Stadt Wien",icon:"https://www.wien.gv.at/layout-a/logo/wappen-klein.gif",overlay:true},{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",zoomExtent:[10,19],polygon:[[[16.54475,48.17286],[16.54103,48.17657],[16.54978,48.17675],[16.54665,48.17162],[16.55629,48.16171],[16.55567,48.16446],[16.56161,48.16037],[16.57306,48.16319],[16.57603,48.13522],[16.54301,48.14333],[16.51377,48.15893],[16.4777,48.15744],[16.45536,48.13951],[16.43313,48.13788],[16.43701,48.11994],[16.42291,48.12306],[16.4083,48.11791],[16.40511,48.12198],[16.3246,48.13779],[16.31181,48.11945],[16.29806,48.12896],[16.2711,48.13385],[16.23607,48.13001],[16.2189,48.12377],[16.2181,48.12807],[16.23861,48.13205],[16.23843,48.13716],[16.22081,48.13555],[16.20986,48.14762],[16.22321,48.15318],[16.19798,48.15454],[16.19619,48.16396],[16.18183,48.17112],[16.19981,48.18616],[16.20739,48.20235],[16.20194,48.20479],[16.20962,48.20963],[16.1976,48.21479],[16.19778,48.22288],[16.18517,48.2232],[16.19911,48.22858],[16.19251,48.23671],[16.20677,48.26483],[16.24105,48.24837],[16.24154,48.23832],[16.25662,48.23988],[16.27043,48.25193],[16.26406,48.25492],[16.28556,48.25832],[16.29412,48.26395],[16.28617,48.2667],[16.28901,48.27051],[16.32741,48.27721],[16.34813,48.29048],[16.35351,48.28369],[16.3706,48.2817],[16.36714,48.28685],[16.37787,48.28832],[16.37557,48.29592],[16.37982,48.30201],[16.38536,48.30146],[16.38043,48.31507],[16.39518,48.32257],[16.39412,48.31926],[16.40287,48.31676],[16.41682,48.32253],[16.43803,48.31628],[16.44041,48.29192],[16.47547,48.27501],[16.48123,48.27343],[16.4835,48.27971],[16.48132,48.29351],[16.49645,48.29249],[16.51491,48.28554],[16.5067,48.2736],[16.51285,48.26784],[16.53263,48.2621],[16.54697,48.263],[16.53941,48.24284],[16.55274,48.239],[16.53627,48.20044],[16.54184,48.18206],[16.53631,48.17755],[16.54475,48.17286]]],terms_url:"https://data.wien.gv.at",terms_text:"Stadt Wien",icon:"https://www.wien.gv.at/layout-a/logo/wappen-klein.gif"},{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",zoomExtent:[10,19],polygon:[[[16.14995,48.10832],[16.14989,48.33315],[16.61873,48.33296],[16.61749,48.10813],[16.46644,48.10819],[16.46644,48.10744],[16.18104,48.10756],[16.18104,48.10831],[16.14995,48.10832]]],terms_url:"https://data.wien.gv.at",terms_text:"Stadt Wien",icon:"https://www.wien.gv.at/layout-a/logo/wappen-klein.gif"},{id:"Ville_de_Nyon-HD-2010",name:"Ville de Nyon - Orthophoto 2010 HD 5cm/pi",type:"tms",template:"http://osmdata.asitvd.ch/tiles/nyon2010/{zoom}/{x}/{y}.png",endDate:"2010-01-01T00:00:00.000Z",startDate:"2010-01-01T00:00:00.000Z",zoomExtent:[14,20],polygon:[[[6.24859,46.38252],[6.24848,46.38715],[6.24378,46.38944],[6.24182,46.39109],[6.2414,46.39159],[6.23919,46.39222],[6.23973,46.39373],[6.2379,46.3946],[6.23713,46.39698],[6.23071,46.40107],[6.22789,46.39903],[6.22326,46.40219],[6.22066,46.40189],[6.21582,46.40462],[6.21393,46.40698],[6.20989,46.40563],[6.20928,46.40528],[6.20985,46.40434],[6.20501,46.40332],[6.20527,46.40104],[6.20906,46.40131],[6.20951,46.4013],[6.2149,46.4008],[6.21154,46.39808],[6.21057,46.3968],[6.20954,46.39449],[6.21229,46.39243],[6.21374,46.39168],[6.21639,46.39079],[6.21296,46.38736],[6.21532,46.38514],[6.21403,46.38424],[6.2126,46.38232],[6.21211,46.38102],[6.21212,46.37992],[6.21231,46.37901],[6.21318,46.37697],[6.21454,46.37494],[6.21359,46.37463],[6.21365,46.37276],[6.22133,46.3699],[6.22752,46.36555],[6.22752,46.36541],[6.23738,46.37356],[6.24404,46.37842],[6.24859,46.38252]]],terms_url:"http://www.nyon.ch/fr/officiel/services-offices/informatique-et-population-776-3911",terms_text:"Ville de Nyon"},{id:"VGIN-BuildingFootprints_WM",name:"Virginia Building Footprints",type:"tms",template:"http://tileify-ags.herokuapp.com/tiles/{zoom}/{x}/{y}?url=https%3A%2F%2Fgismaps.vita.virginia.gov%2Farcgis%2Frest%2Fservices%2FVA_Base_layers%2FVA_Building_Footprints%2FMapServer&transparent=true&layers=show%3A20",endDate:"2018-06-01T00:00:00.000Z",startDate:"2015-05-01T00:00:00.000Z",zoomExtent:[0,20],polygon:[[[-83.64853,36.6023],[-79.9118,36.55819],[-75.90179,36.56701],[-75.8606,36.985],[-75.19867,38.0178],[-76.15448,37.99183],[-76.25336,37.92253],[-76.62689,38.1648],[-76.90704,38.22524],[-77.05536,38.42132],[-77.19818,38.37396],[-77.28333,38.3675],[-77.31628,38.45789],[-77.25586,38.58253],[-77.15698,38.61043],[-77.11853,38.68337],[-77.0636,38.69409],[-77.05811,38.82259],[-77.07458,38.88462],[-77.20367,38.99357],[-77.3822,39.07038],[-77.47833,39.09809],[-77.53876,39.16627],[-77.4646,39.23651],[-77.59918,39.30455],[-77.74475,39.33005],[-77.84637,39.14284],[-78.36273,39.45528],[-78.3847,39.36616],[-78.36548,39.32792],[-78.4671,39.19182],[-78.60168,39.03199],[-78.69232,38.94659],[-78.89282,38.76479],[-78.99719,38.8504],[-79.13727,38.68551],[-79.31854,38.42993],[-79.5108,38.46004],[-79.56299,38.54817],[-79.65637,38.58253],[-79.71954,38.50519],[-79.70856,38.44068],[-79.94476,38.16911],[-80.00519,38.0243],[-80.21942,37.83148],[-80.32379,37.67513],[-80.22766,37.62511],[-80.36224,37.56417],[-80.32928,37.52498],[-80.49408,37.42907],[-80.53253,37.48794],[-80.78522,37.37889],[-80.86487,37.43561],[-80.9198,37.39635],[-80.88135,37.36143],[-81.02692,37.28935],[-81.26038,37.25219],[-81.37024,37.34396],[-81.47736,37.26312],[-81.55426,37.22595],[-81.71906,37.20189],[-81.98273,37.42689],[-81.96899,37.55329],[-82.40845,37.26531],[-82.74078,37.13186],[-82.73529,37.05299],[-82.90283,36.985],[-82.87811,36.90818],[-83.02643,36.85765],[-83.07587,36.85765],[-83.16101,36.74989],[-83.44666,36.69265],[-83.61145,36.64418],[-83.63892,36.63592],[-83.69385,36.61222],[-83.70003,36.6023],[-83.64853,36.6023]]],terms_url:"https://vgin.maps.arcgis.com/home/item.html?id=bcd049dfcdc342a7a08ec81644eeb339",terms_text:"Virginia Geographic Information Network (VGIN)",description:"Virginia Building Footprint Map Service",overlay:true},{id:"VGIN-Imagery_WM",name:"Virginia Imagery Service - Most Recent",type:"tms",template:"http://tileify-ags.herokuapp.com/tiles/{zoom}/{x}/{y}?url=https%3A%2F%2Fgismaps.vita.virginia.gov%2Farcgis%2Frest%2Fservices%2FMostRecentImagery%2FMostRecentImagery_WGS%2FMapServer&transparent=true&layers=show%3A0",endDate:"2018-08-01T00:00:00.000Z",startDate:"2013-04-01T00:00:00.000Z",zoomExtent:[0,20],polygon:[[[-83.64853,36.6023],[-79.9118,36.55819],[-75.90179,36.56701],[-75.8606,36.985],[-75.19867,38.0178],[-76.15448,37.99183],[-76.25336,37.92253],[-76.62689,38.1648],[-76.90704,38.22524],[-77.05536,38.42132],[-77.19818,38.37396],[-77.28333,38.3675],[-77.31628,38.45789],[-77.25586,38.58253],[-77.15698,38.61043],[-77.11853,38.68337],[-77.0636,38.69409],[-77.05811,38.82259],[-77.07458,38.88462],[-77.20367,38.99357],[-77.3822,39.07038],[-77.47833,39.09809],[-77.53876,39.16627],[-77.4646,39.23651],[-77.59918,39.30455],[-77.74475,39.33005],[-77.84637,39.14284],[-78.36273,39.45528],[-78.3847,39.36616],[-78.36548,39.32792],[-78.4671,39.19182],[-78.60168,39.03199],[-78.69232,38.94659],[-78.89282,38.76479],[-78.99719,38.8504],[-79.13727,38.68551],[-79.31854,38.42993],[-79.5108,38.46004],[-79.56299,38.54817],[-79.65637,38.58253],[-79.71954,38.50519],[-79.70856,38.44068],[-79.94476,38.16911],[-80.00519,38.0243],[-80.21942,37.83148],[-80.32379,37.67513],[-80.22766,37.62511],[-80.36224,37.56417],[-80.32928,37.52498],[-80.49408,37.42907],[-80.53253,37.48794],[-80.78522,37.37889],[-80.86487,37.43561],[-80.9198,37.39635],[-80.88135,37.36143],[-81.02692,37.28935],[-81.26038,37.25219],[-81.37024,37.34396],[-81.47736,37.26312],[-81.55426,37.22595],[-81.71906,37.20189],[-81.98273,37.42689],[-81.96899,37.55329],[-82.40845,37.26531],[-82.74078,37.13186],[-82.73529,37.05299],[-82.90283,36.985],[-82.87811,36.90818],[-83.02643,36.85765],[-83.07587,36.85765],[-83.16101,36.74989],[-83.44666,36.69265],[-83.61145,36.64418],[-83.63892,36.63592],[-83.69385,36.61222],[-83.70003,36.6023],[-83.64853,36.6023]]],terms_url:"https://vgin.maps.arcgis.com/home/item.html?id=36386a7e7dae4032a33cb0b83a1711f1",terms_text:"Virginia Geographic Information Network (VGIN)",description:"The most recently available VBMP orthoimagery for all of Virginia."},{id:"VGIN-PropertyLines_WM",name:"Virginia Property Lines",type:"tms",template:"http://tileify-ags.herokuapp.com/tiles/{zoom}/{x}/{y}?url=http%3A%2F%2Fgismaps.vita.virginia.gov%2Farcgis%2Frest%2Fservices%2FVA_Base_layers%2FVA_Parcels%2FMapServer&transparent=true",endDate:"2018-06-01T00:00:00.000Z",startDate:"2015-05-01T00:00:00.000Z",zoomExtent:[0,20],polygon:[[[-83.64853,36.6023],[-79.9118,36.55819],[-75.90179,36.56701],[-75.8606,36.985],[-75.19867,38.0178],[-76.15448,37.99183],[-76.25336,37.92253],[-76.62689,38.1648],[-76.90704,38.22524],[-77.05536,38.42132],[-77.19818,38.37396],[-77.28333,38.3675],[-77.31628,38.45789],[-77.25586,38.58253],[-77.15698,38.61043],[-77.11853,38.68337],[-77.0636,38.69409],[-77.05811,38.82259],[-77.07458,38.88462],[-77.20367,38.99357],[-77.3822,39.07038],[-77.47833,39.09809],[-77.53876,39.16627],[-77.4646,39.23651],[-77.59918,39.30455],[-77.74475,39.33005],[-77.84637,39.14284],[-78.36273,39.45528],[-78.3847,39.36616],[-78.36548,39.32792],[-78.4671,39.19182],[-78.60168,39.03199],[-78.69232,38.94659],[-78.89282,38.76479],[-78.99719,38.8504],[-79.13727,38.68551],[-79.31854,38.42993],[-79.5108,38.46004],[-79.56299,38.54817],[-79.65637,38.58253],[-79.71954,38.50519],[-79.70856,38.44068],[-79.94476,38.16911],[-80.00519,38.0243],[-80.21942,37.83148],[-80.32379,37.67513],[-80.22766,37.62511],[-80.36224,37.56417],[-80.32928,37.52498],[-80.49408,37.42907],[-80.53253,37.48794],[-80.78522,37.37889],[-80.86487,37.43561],[-80.9198,37.39635],[-80.88135,37.36143],[-81.02692,37.28935],[-81.26038,37.25219],[-81.37024,37.34396],[-81.47736,37.26312],[-81.55426,37.22595],[-81.71906,37.20189],[-81.98273,37.42689],[-81.96899,37.55329],[-82.40845,37.26531],[-82.74078,37.13186],[-82.73529,37.05299],[-82.90283,36.985],[-82.87811,36.90818],[-83.02643,36.85765],[-83.07587,36.85765],[-83.16101,36.74989],[-83.44666,36.69265],[-83.61145,36.64418],[-83.63892,36.63592],[-83.69385,36.61222],[-83.70003,36.6023],[-83.64853,36.6023]]],terms_url:"https://vgin.maps.arcgis.com/home/item.html?id=f1dccaf1f42e40cbba791feae2e23690",terms_text:"Virginia Geographic Information Network (VGIN)",description:"A statewide Parcel service showing property ownership outlines where available",overlay:true},{id:"vogis.cnv.at-DGM",name:"VoGIS: DGM (Terrain model)",type:"wms",template:"http://vogis.cnv.at/mapserver/mapserv?map=i_hoehen_und_gelaende_r_wms.map&FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=schummerung_50cm_terrain&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[9.96805,47.54631],[9.96809,47.54627],[9.97125,47.54425],[9.96484,47.53803],[9.9684,47.52802],[9.96526,47.52089],[9.99569,47.50278],[9.98736,47.49847],[10.00076,47.48211],[10.02301,47.48411],[10.03743,47.48918],[10.04477,47.48762],[10.05413,47.47589],[10.05347,47.46686],[10.06468,47.46364],[10.06999,47.45595],[10.08057,47.45536],[10.08857,47.46029],[10.09164,47.45893],[10.09385,47.44046],[10.10559,47.42872],[10.09374,47.41688],[10.07418,47.41472],[10.06914,47.41018],[10.08624,47.39952],[10.08284,47.39381],[10.09984,47.35476],[10.11934,47.37561],[10.14169,47.36718],[10.16587,47.36887],[10.16958,47.3713],[10.1694,47.38583],[10.1813,47.38725],[10.18185,47.39243],[10.19508,47.38935],[10.19988,47.38334],[10.21259,47.38039],[10.22705,47.38889],[10.23619,47.38192],[10.23168,47.37897],[10.23716,47.37357],[10.21699,47.35436],[10.2171,47.34988],[10.20424,47.33675],[10.20742,47.33232],[10.19951,47.32646],[10.21113,47.31898],[10.21597,47.31106],[10.21236,47.31122],[10.19913,47.29754],[10.18964,47.29394],[10.17961,47.29603],[10.17208,47.27908],[10.17404,47.27025],[10.17834,47.27011],[10.17449,47.2637],[10.21884,47.25533],[10.22343,47.24983],[10.21087,47.2478],[10.19776,47.23666],[10.20791,47.2328],[10.21428,47.21684],[10.21269,47.20432],[10.19963,47.19539],[10.19951,47.18525],[10.21151,47.17124],[10.2092,47.16537],[10.20851,47.15948],[10.21321,47.1577],[10.2222,47.15323],[10.22166,47.14925],[10.21481,47.14352],[10.20333,47.14215],[10.20887,47.13164],[10.18629,47.12886],[10.18652,47.11946],[10.17288,47.12033],[10.16299,47.11361],[10.15766,47.11426],[10.15442,47.10578],[10.13243,47.08122],[10.13459,47.06392],[10.15085,47.06184],[10.15693,47.04883],[10.14418,47.03355],[10.12326,47.02209],[10.13284,47.01204],[10.15447,47.00545],[10.15961,46.99882],[10.15442,46.99299],[10.16001,46.984],[10.14463,46.98301],[10.13492,46.96584],[10.13501,46.95483],[10.12684,46.9435],[10.09772,46.92676],[10.09954,46.91712],[10.10921,46.90834],[10.10908,46.89431],[10.12497,46.88014],[10.14147,46.87468],[10.13967,46.86217],[10.14506,46.8511],[10.13941,46.84738],[10.12309,46.84848],[10.11912,46.84417],[10.10518,46.8409],[10.09195,46.85143],[10.09265,46.85818],[10.08712,46.86128],[10.05488,46.8617],[10.0509,46.86442],[10.05192,46.87405],[10.03891,46.88611],[10.03221,46.88802],[10.01782,46.90161],[10.00494,46.89889],[9.98243,46.9062],[9.97793,46.91603],[9.96657,46.91222],[9.95907,46.91602],[9.94612,46.91235],[9.93758,46.91324],[9.92153,46.91882],[9.91231,46.92606],[9.90632,46.9253],[9.89449,46.93164],[9.87613,46.93463],[9.88071,46.94011],[9.87657,46.94071],[9.87488,46.95039],[9.87872,46.95707],[9.87073,46.96321],[9.88482,46.98546],[9.8923,46.99036],[9.88878,47.00072],[9.8707,47.00965],[9.87115,47.01306],[9.88035,47.01722],[9.87779,47.02055],[9.85974,47.02321],[9.85273,47.01641],[9.83612,47.01253],[9.82353,47.01986],[9.80756,47.02356],[9.78491,47.03849],[9.74808,47.03692],[9.74185,47.04268],[9.71821,47.04337],[9.70701,47.04805],[9.7076,47.05381],[9.69756,47.05239],[9.68392,47.05765],[9.68184,47.0621],[9.67743,47.06141],[9.65821,47.05818],[9.64506,47.05978],[9.64158,47.05598],[9.63654,47.0517],[9.62633,47.05133],[9.60705,47.06077],[9.6134,47.0695],[9.61153,47.0794],[9.61869,47.07817],[9.62339,47.08258],[9.63346,47.08344],[9.63564,47.09553],[9.62858,47.10756],[9.62083,47.11032],[9.63503,47.12813],[9.62467,47.13265],[9.62258,47.14135],[9.62587,47.1459],[9.62059,47.15164],[9.6089,47.14775],[9.59679,47.16294],[9.57946,47.17116],[9.56456,47.17029],[9.57302,47.1756],[9.57259,47.19079],[9.58032,47.19578],[9.58477,47.20532],[9.5687,47.21968],[9.55851,47.22416],[9.55176,47.22377],[9.56679,47.24288],[9.53073,47.27058],[9.54619,47.28005],[9.55634,47.29829],[9.58805,47.3173],[9.59966,47.3455],[9.61073,47.35571],[9.62446,47.36615],[9.65876,47.36946],[9.67255,47.38021],[9.67311,47.39194],[9.65162,47.40463],[9.64551,47.4312],[9.64512,47.4378],[9.65799,47.44779],[9.65898,47.4522],[9.62234,47.45747],[9.60904,47.47054],[9.60292,47.46198],[9.59514,47.46331],[9.58217,47.48276],[9.5622,47.49592],[9.55057,47.53718],[9.5827,47.53592],[9.60465,47.52952],[9.73478,47.53396],[9.73517,47.54661],[9.74164,47.55499],[9.7471,47.55569],[9.74337,47.55867],[9.75207,47.56747],[9.74806,47.57052],[9.75632,47.57262],[9.75633,47.57963],[9.76197,47.58096],[9.76553,47.58912],[9.76933,47.58739],[9.77697,47.59544],[9.79151,47.59352],[9.79999,47.59611],[9.81414,47.58807],[9.82381,47.5871],[9.82728,47.57997],[9.82079,47.57076],[9.82562,47.55922],[9.8171,47.55333],[9.81579,47.54767],[9.85023,47.54164],[9.85839,47.53388],[9.87451,47.52854],[9.87804,47.53876],[9.87515,47.54343],[9.88125,47.54814],[9.8891,47.54399],[9.89935,47.54475],[9.90666,47.54217],[9.91358,47.53255],[9.92189,47.52964],[9.93352,47.53265],[9.94108,47.53822],[9.9637,47.53472],[9.95883,47.54313],[9.96318,47.54229],[9.96805,47.54631]]],terms_url:"https://www.vorarlberg.at/vorarlberg/bauen_wohnen/bauen/vermessung_geoinformation/weitereinformationen/services/wmsdienste.htm",terms_text:"Datenquelle: Land Vorarlberg – data.vorarlberg.gv.at",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/at/VoGISFlchenwidmungsplan.png"},{id:"vogis.cnv.at-DOM",name:"VoGIS: DOM (Surface model)",type:"wms",template:"http://vogis.cnv.at/mapserver/mapserv?map=i_hoehen_und_gelaende_r_wms.map&FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=schummerung_50cm_surface&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[9.96805,47.54631],[9.96809,47.54627],[9.97125,47.54425],[9.96484,47.53803],[9.9684,47.52802],[9.96526,47.52089],[9.99569,47.50278],[9.98736,47.49847],[10.00076,47.48211],[10.02301,47.48411],[10.03743,47.48918],[10.04477,47.48762],[10.05413,47.47589],[10.05347,47.46686],[10.06468,47.46364],[10.06999,47.45595],[10.08057,47.45536],[10.08857,47.46029],[10.09164,47.45893],[10.09385,47.44046],[10.10559,47.42872],[10.09374,47.41688],[10.07418,47.41472],[10.06914,47.41018],[10.08624,47.39952],[10.08284,47.39381],[10.09984,47.35476],[10.11934,47.37561],[10.14169,47.36718],[10.16587,47.36887],[10.16958,47.3713],[10.1694,47.38583],[10.1813,47.38725],[10.18185,47.39243],[10.19508,47.38935],[10.19988,47.38334],[10.21259,47.38039],[10.22705,47.38889],[10.23619,47.38192],[10.23168,47.37897],[10.23716,47.37357],[10.21699,47.35436],[10.2171,47.34988],[10.20424,47.33675],[10.20742,47.33232],[10.19951,47.32646],[10.21113,47.31898],[10.21597,47.31106],[10.21236,47.31122],[10.19913,47.29754],[10.18964,47.29394],[10.17961,47.29603],[10.17208,47.27908],[10.17404,47.27025],[10.17834,47.27011],[10.17449,47.2637],[10.21884,47.25533],[10.22343,47.24983],[10.21087,47.2478],[10.19776,47.23666],[10.20791,47.2328],[10.21428,47.21684],[10.21269,47.20432],[10.19963,47.19539],[10.19951,47.18525],[10.21151,47.17124],[10.2092,47.16537],[10.20851,47.15948],[10.21321,47.1577],[10.2222,47.15323],[10.22166,47.14925],[10.21481,47.14352],[10.20333,47.14215],[10.20887,47.13164],[10.18629,47.12886],[10.18652,47.11946],[10.17288,47.12033],[10.16299,47.11361],[10.15766,47.11426],[10.15442,47.10578],[10.13243,47.08122],[10.13459,47.06392],[10.15085,47.06184],[10.15693,47.04883],[10.14418,47.03355],[10.12326,47.02209],[10.13284,47.01204],[10.15447,47.00545],[10.15961,46.99882],[10.15442,46.99299],[10.16001,46.984],[10.14463,46.98301],[10.13492,46.96584],[10.13501,46.95483],[10.12684,46.9435],[10.09772,46.92676],[10.09954,46.91712],[10.10921,46.90834],[10.10908,46.89431],[10.12497,46.88014],[10.14147,46.87468],[10.13967,46.86217],[10.14506,46.8511],[10.13941,46.84738],[10.12309,46.84848],[10.11912,46.84417],[10.10518,46.8409],[10.09195,46.85143],[10.09265,46.85818],[10.08712,46.86128],[10.05488,46.8617],[10.0509,46.86442],[10.05192,46.87405],[10.03891,46.88611],[10.03221,46.88802],[10.01782,46.90161],[10.00494,46.89889],[9.98243,46.9062],[9.97793,46.91603],[9.96657,46.91222],[9.95907,46.91602],[9.94612,46.91235],[9.93758,46.91324],[9.92153,46.91882],[9.91231,46.92606],[9.90632,46.9253],[9.89449,46.93164],[9.87613,46.93463],[9.88071,46.94011],[9.87657,46.94071],[9.87488,46.95039],[9.87872,46.95707],[9.87073,46.96321],[9.88482,46.98546],[9.8923,46.99036],[9.88878,47.00072],[9.8707,47.00965],[9.87115,47.01306],[9.88035,47.01722],[9.87779,47.02055],[9.85974,47.02321],[9.85273,47.01641],[9.83612,47.01253],[9.82353,47.01986],[9.80756,47.02356],[9.78491,47.03849],[9.74808,47.03692],[9.74185,47.04268],[9.71821,47.04337],[9.70701,47.04805],[9.7076,47.05381],[9.69756,47.05239],[9.68392,47.05765],[9.68184,47.0621],[9.67743,47.06141],[9.65821,47.05818],[9.64506,47.05978],[9.64158,47.05598],[9.63654,47.0517],[9.62633,47.05133],[9.60705,47.06077],[9.6134,47.0695],[9.61153,47.0794],[9.61869,47.07817],[9.62339,47.08258],[9.63346,47.08344],[9.63564,47.09553],[9.62858,47.10756],[9.62083,47.11032],[9.63503,47.12813],[9.62467,47.13265],[9.62258,47.14135],[9.62587,47.1459],[9.62059,47.15164],[9.6089,47.14775],[9.59679,47.16294],[9.57946,47.17116],[9.56456,47.17029],[9.57302,47.1756],[9.57259,47.19079],[9.58032,47.19578],[9.58477,47.20532],[9.5687,47.21968],[9.55851,47.22416],[9.55176,47.22377],[9.56679,47.24288],[9.53073,47.27058],[9.54619,47.28005],[9.55634,47.29829],[9.58805,47.3173],[9.59966,47.3455],[9.61073,47.35571],[9.62446,47.36615],[9.65876,47.36946],[9.67255,47.38021],[9.67311,47.39194],[9.65162,47.40463],[9.64551,47.4312],[9.64512,47.4378],[9.65799,47.44779],[9.65898,47.4522],[9.62234,47.45747],[9.60904,47.47054],[9.60292,47.46198],[9.59514,47.46331],[9.58217,47.48276],[9.5622,47.49592],[9.55057,47.53718],[9.5827,47.53592],[9.60465,47.52952],[9.73478,47.53396],[9.73517,47.54661],[9.74164,47.55499],[9.7471,47.55569],[9.74337,47.55867],[9.75207,47.56747],[9.74806,47.57052],[9.75632,47.57262],[9.75633,47.57963],[9.76197,47.58096],[9.76553,47.58912],[9.76933,47.58739],[9.77697,47.59544],[9.79151,47.59352],[9.79999,47.59611],[9.81414,47.58807],[9.82381,47.5871],[9.82728,47.57997],[9.82079,47.57076],[9.82562,47.55922],[9.8171,47.55333],[9.81579,47.54767],[9.85023,47.54164],[9.85839,47.53388],[9.87451,47.52854],[9.87804,47.53876],[9.87515,47.54343],[9.88125,47.54814],[9.8891,47.54399],[9.89935,47.54475],[9.90666,47.54217],[9.91358,47.53255],[9.92189,47.52964],[9.93352,47.53265],[9.94108,47.53822],[9.9637,47.53472],[9.95883,47.54313],[9.96318,47.54229],[9.96805,47.54631]]],terms_url:"https://www.vorarlberg.at/vorarlberg/bauen_wohnen/bauen/vermessung_geoinformation/weitereinformationen/services/wmsdienste.htm",terms_text:"Datenquelle: Land Vorarlberg – data.vorarlberg.gv.at",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/at/VoGISFlchenwidmungsplan.png"},{id:"vogis.cnv.at-ef2012_12cm",name:"VoGIS: Echtfarbenbild 2012 (12cm)",type:"wms",template:"http://vogis.cnv.at/mapserver/mapserv?map=i_luftbilder_r_wms.map&FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=ef2012_12cm&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",endDate:"2012-01-01T00:00:00.000Z",startDate:"2012-01-01T00:00:00.000Z",polygon:[[[9.54367,47.48479],[9.61451,47.45058],[9.61359,47.38272],[9.44246,47.24798],[9.44614,47.096],[9.42866,47.08911],[9.42498,47.01513],[9.85281,47.00196],[9.85741,46.89896],[9.9669,46.88952],[10.04511,46.8499],[10.15828,46.83353],[10.1592,46.89204],[10.14718,46.89248],[10.15115,46.94331],[10.16317,46.94287],[10.1647,46.96238],[10.17852,46.96681],[10.17576,47.10351],[10.22912,47.10226],[10.22084,47.24361],[10.26133,47.41261],[10.12423,47.40576],[10.09387,47.47795],[10.00462,47.50717],[9.98622,47.56121],[9.84361,47.56245],[9.84085,47.60714],[9.53999,47.60652],[9.54367,47.48479]]],terms_url:"https://www.vorarlberg.at/vorarlberg/bauen_wohnen/bauen/vermessung_geoinformation/weitereinformationen/services/wmsdienste.htm",terms_text:"Datenquelle: Land Vorarlberg – data.vorarlberg.gv.at",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/at/VoGISFlchenwidmungsplan.png"},{id:"vogis.cnv.at-ef2015_10cm",name:"VoGIS: Echtfarbenbild 2015 (10cm)",type:"wms",template:"http://vogis.cnv.at/mapserver/mapserv?map=i_luftbilder_r_wms.map&FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=ef2015_10cm&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",endDate:"2015-01-01T00:00:00.000Z",startDate:"2015-01-01T00:00:00.000Z",polygon:[[[9.54367,47.48479],[9.61451,47.45058],[9.61359,47.38272],[9.44246,47.24798],[9.44614,47.096],[9.42866,47.08911],[9.42498,47.01513],[9.85281,47.00196],[9.85741,46.89896],[9.9669,46.88952],[10.04511,46.8499],[10.15828,46.83353],[10.1592,46.89204],[10.14718,46.89248],[10.15115,46.94331],[10.16317,46.94287],[10.1647,46.96238],[10.17852,46.96681],[10.17576,47.10351],[10.22912,47.10226],[10.22084,47.24361],[10.26133,47.41261],[10.12423,47.40576],[10.09387,47.47795],[10.00462,47.50717],[9.98622,47.56121],[9.84361,47.56245],[9.84085,47.60714],[9.53999,47.60652],[9.54367,47.48479]]],terms_url:"https://www.vorarlberg.at/vorarlberg/bauen_wohnen/bauen/vermessung_geoinformation/weitereinformationen/services/wmsdienste.htm",terms_text:"Datenquelle: Land Vorarlberg – data.vorarlberg.gv.at",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/at/VoGISFlchenwidmungsplan.png"},{id:"vogis.cnv.at-wi2015_20cm",name:"VoGIS: Echtfarbenbild Winter 2015 (20cm)",type:"wms",template:"http://vogis.cnv.at/mapserver/mapserv?map=i_luftbilder_r_wms.map&FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=wi2015_20cm&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",endDate:"2015-01-01T00:00:00.000Z",startDate:"2015-01-01T00:00:00.000Z",polygon:[[[10.17039,46.82979],[10.17108,46.93644],[10.18413,46.94113],[10.1855,47.10157],[10.23906,47.10437],[10.24283,47.15611],[10.25691,47.18704],[10.24558,47.27597],[10.25313,47.32347],[10.26893,47.32626],[10.26446,47.41102],[10.13194,47.4087],[10.13434,47.46107],[10.11752,47.46153],[10.11889,47.47337],[10.08731,47.47429],[10.08491,47.50724],[10.06843,47.507],[10.0674,47.5215],[10.02345,47.52428],[10.00079,47.57943],[9.84904,47.57757],[9.85042,47.61462],[9.72751,47.61277],[9.7203,47.59089],[9.70347,47.58915],[9.70313,47.54491],[9.68219,47.54491],[9.68047,47.55348],[9.56391,47.54931],[9.56202,47.53958],[9.55172,47.53958],[9.55172,47.53402],[9.52168,47.53471],[9.52701,47.30497],[9.50503,47.30264],[9.50091,47.23368],[9.52357,47.23228],[9.52426,47.16557],[9.54486,47.16405],[9.54383,47.15448],[9.57232,47.15401],[9.57026,47.12809],[9.59018,47.12867],[9.59189,47.10029],[9.57232,47.10017],[9.57713,47.02861],[9.72407,47.03048],[9.72304,47.01749],[9.77454,47.01562],[9.77626,47.00555],[9.79274,47.00391],[9.7948,46.99127],[9.83874,46.99314],[9.84012,46.90349],[9.89024,46.90725],[9.88543,46.88707],[9.95925,46.89141],[9.962,46.87675],[10.0001,46.87862],[9.99667,46.85715],[10.01864,46.85656],[10.02345,46.83073],[10.17039,46.82979]]],terms_url:"https://www.vorarlberg.at/vorarlberg/bauen_wohnen/bauen/vermessung_geoinformation/weitereinformationen/services/wmsdienste.htm",terms_text:"Datenquelle: Land Vorarlberg – data.vorarlberg.gv.at",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/at/VoGISFlchenwidmungsplan.png"},{id:"wroclaw-orto2015",name:"Wrocław: Orthophotomap 2015 (aerial image)",type:"wms",template:"http://gis1.um.wroc.pl/arcgis/services/ogc/OGC_ortofoto_2015/MapServer/WmsServer?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=0&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",endDate:"2015-01-01T00:00:00.000Z",startDate:"2015-01-01T00:00:00.000Z",zoomExtent:[0,23],polygon:[[[17.14217,51.12846],[17.15659,51.1499],[17.15933,51.16056],[17.15899,51.17886],[17.14371,51.18155],[17.13024,51.18128],[17.12466,51.17396],[17.11436,51.17746],[17.0778,51.17746],[17.07642,51.1766],[17.07548,51.16825],[17.06698,51.16745],[17.04698,51.17493],[17.03376,51.17729],[17.02741,51.17729],[17.02733,51.18246],[17.02252,51.18816],[17.01299,51.18816],[17.0093,51.18499],[17.00312,51.18504],[17.00261,51.20016],[16.99162,51.20559],[16.97008,51.20763],[16.96424,51.20989],[16.95394,51.20968],[16.94656,51.20586],[16.9233,51.2001],[16.90811,51.21043],[16.89927,51.21027],[16.89292,51.2071],[16.88322,51.2071],[16.88073,51.20489],[16.88047,51.19666],[16.88322,51.19048],[16.87403,51.18719],[16.87026,51.18203],[16.85455,51.18031],[16.8421,51.18488],[16.82434,51.18467],[16.82056,51.17875],[16.82099,51.16373],[16.82502,51.15647],[16.80915,51.15194],[16.80657,51.14613],[16.80648,51.1366],[16.80769,51.13595],[16.81687,51.13601],[16.8161,51.13337],[16.81636,51.12459],[16.82932,51.12329],[16.83266,51.11834],[16.82923,51.11386],[16.82923,51.10993],[16.83215,51.10869],[16.84949,51.10826],[16.85661,51.09899],[16.87901,51.09252],[16.88862,51.09258],[16.89197,51.09667],[16.92107,51.09662],[16.9209,51.09263],[16.91661,51.0812],[16.91686,51.07942],[16.93514,51.07948],[16.93849,51.0736],[16.95248,51.06686],[16.95068,51.05806],[16.95454,51.05369],[16.96188,51.0473],[16.96879,51.04568],[16.98072,51.04584],[16.98424,51.05197],[16.99969,51.04668],[17.00776,51.04422],[17.01973,51.04169],[17.03286,51.0419],[17.03415,51.04673],[17.04509,51.04339],[17.06363,51.04339],[17.07037,51.05286],[17.08363,51.04428],[17.095,51.04368],[17.10633,51.04376],[17.10835,51.04684],[17.10822,51.05377],[17.10226,51.05868],[17.11136,51.0716],[17.12341,51.07179],[17.12299,51.07856],[17.15088,51.07861],[17.17277,51.09344],[17.17277,51.09956],[17.17697,51.10303],[17.17676,51.1092],[17.16363,51.1203],[17.14217,51.12846]]],terms_text:"Urząd Miasta Wrocław",icon:"https://i.imgur.com/PRqROXB.png"},{id:"Zabrze-2011",name:"Zabrze: Orthophotomap 2011 (aerial image)",type:"wms",template:"http://siot.um.zabrze.pl/arcgis/services/UMZ_Ortofoto_2011/MapServer/WMSServer?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=0&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",endDate:"2011-01-01T00:00:00.000Z",startDate:"2011-01-01T00:00:00.000Z",zoomExtent:[0,23],polygon:[[[18.74396,50.2753],[18.75586,50.27523],[18.75578,50.27633],[18.74516,50.28105],[18.74609,50.28886],[18.75084,50.28948],[18.74832,50.2957],[18.73379,50.29618],[18.73208,50.31571],[18.73613,50.31646],[18.73882,50.32763],[18.73725,50.33016],[18.73121,50.33169],[18.73054,50.3344],[18.73422,50.3371],[18.73428,50.34097],[18.73866,50.34308],[18.75419,50.34182],[18.75982,50.34624],[18.75438,50.34744],[18.75119,50.34979],[18.74603,50.36876],[18.75705,50.3692],[18.7639,50.36754],[18.77263,50.37628],[18.78436,50.37077],[18.78713,50.37295],[18.79821,50.37048],[18.80466,50.37561],[18.80165,50.37718],[18.80164,50.38222],[18.80509,50.38317],[18.81527,50.38167],[18.81446,50.37515],[18.82183,50.36883],[18.81737,50.36802],[18.82104,50.35843],[18.8159,50.35336],[18.81687,50.35076],[18.82294,50.35156],[18.83281,50.34962],[18.83474,50.3443],[18.84615,50.34448],[18.86293,50.32852],[18.8607,50.32776],[18.85088,50.33191],[18.84578,50.32923],[18.84891,50.32352],[18.83179,50.32028],[18.83192,50.30483],[18.84451,50.30286],[18.84429,50.29627],[18.82282,50.28615],[18.82845,50.28482],[18.82745,50.27972],[18.82322,50.27994],[18.8214,50.27414],[18.81392,50.27309],[18.79981,50.27351],[18.7987,50.2613],[18.7923,50.24641],[18.78261,50.24583],[18.76416,50.25145],[18.75396,50.25669],[18.75004,50.26402],[18.73991,50.26738],[18.73421,50.27084],[18.74396,50.2753]]],terms_text:"Urząd Miasta Zabrza"}];
 
-  var presets = {aerialway:{fields:["aerialway"],geometry:["point","vertex","line"],tags:{aerialway:"*"},terms:["ski lift","funifor","funitel"],searchable:false,name:"Aerialway"},aeroway:{icon:"maki-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"},attraction:{icon:"maki-star",fields:["name","attraction","operator","opening_hours"],moreFields:["opening_hours","fee","payment_multi","address","website","phone","email","fax"],geometry:["point","vertex","line","area"],tags:{attraction:"*"},searchable:false,name:"Attraction"},circular:{geometry:["vertex","line"],fields:["name"],tags:{junction:"circular"},name:"Traffic Circle",searchable:false},embankment:{geometry:["line"],tags:{embankment:"yes"},name:"Embankment",matchScore:0.2,searchable:false},highway:{fields:["name","highway"],geometry:["point","vertex","line","area"],tags:{highway:"*"},searchable:false,name:"Highway"},place:{fields:["name","place"],geometry:["point","vertex","area"],tags:{place:"*"},searchable:false,name:"Place"},power:{geometry:["point","vertex","line","area"],tags:{power:"*"},fields:["power"],moreFields:["material"],searchable:false,name:"Power"},railway:{fields:["railway"],geometry:["point","vertex","line","area"],tags:{railway:"*"},searchable:false,name:"Railway"},roundabout:{geometry:["vertex","line"],fields:["name"],tags:{junction:"roundabout"},name:"Roundabout",searchable:false},seamark:{icon:"maki-harbor",fields:["seamark/type"],geometry:["point","vertex","line","area"],tags:{"seamark:type":"*"},searchable:false,name:"Seamark"},waterway:{fields:["name","waterway"],geometry:["point","vertex","line","area"],tags:{waterway:"*"},searchable:false,name:"Waterway"},address:{fields:["address"],geometry:["point","vertex","area"],tags:{"addr:*":"*"},addTags:{},removeTags:{},reference:{key:"addr"},name:"Address",matchScore:0.15},"advertising/billboard":{fields:["direction","lit"],geometry:["point","vertex","line"],tags:{advertising:"billboard"},name:"Billboard"},"advertising/column":{icon:"temaki-storage_tank",fields:["lit"],geometry:["point","area"],tags:{advertising:"column"},name:"Advertising Column"},"aerialway/station":{icon:"maki-aerialway",geometry:["point","vertex","area"],fields:["aerialway/access","aerialway/summer/access","elevation","building_area"],tags:{aerialway:"station"},name:"Aerialway Station",searchable:false},"aerialway/cable_car":{geometry:["line"],terms:["tramway","ropeway"],fields:["name","aerialway/occupancy","aerialway/capacity","aerialway/duration","aerialway/heating"],tags:{aerialway:"cable_car"},name:"Cable Car"},"aerialway/chair_lift":{icon:"temaki-chairlift",geometry:["line"],fields:["name","aerialway/occupancy","aerialway/capacity","aerialway/duration","aerialway/bubble","aerialway/heating"],tags:{aerialway:"chair_lift"},name:"Chair Lift"},"aerialway/drag_lift":{geometry:["line"],fields:["name","aerialway/capacity","aerialway/duration"],tags:{aerialway:"drag_lift"},name:"Drag Lift"},"aerialway/gondola":{geometry:["line"],fields:["name","aerialway/occupancy","aerialway/capacity","aerialway/duration","aerialway/bubble","aerialway/heating"],tags:{aerialway:"gondola"},name:"Gondola"},"aerialway/goods":{geometry:["line"],fields:["name","aerialway/capacity","aerialway/duration"],tags:{aerialway:"goods"},name:"Goods Aerialway"},"aerialway/magic_carpet":{geometry:["line"],fields:["name","aerialway/capacity","aerialway/duration","aerialway/heating"],tags:{aerialway:"magic_carpet"},name:"Magic Carpet Lift"},"aerialway/mixed_lift":{geometry:["line"],fields:["name","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:["name","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:["name","aerialway/capacity","aerialway/duration"],tags:{aerialway:"rope_tow"},name:"Rope Tow Lift"},"aerialway/t-bar":{geometry:["line"],fields:["name","aerialway/capacity","aerialway/duration"],terms:["tbar"],tags:{aerialway:"t-bar"},name:"T-bar Lift"},"aeroway/aerodrome":{icon:"maki-airport",geometry:["point","area"],fields:["name","iata","icao","operator","internet_access","internet_access/fee","internet_access/ssid"],terms:["aerodrome","aeroway","airplane","airport","jet","plane"],tags:{aeroway:"aerodrome"},matchScore:0.9,name:"Airport"},"aeroway/apron":{icon:"maki-airport",geometry:["area"],terms:["ramp"],fields:["ref","surface"],tags:{aeroway:"apron"},name:"Apron"},"aeroway/gate":{icon:"maki-airport",geometry:["point"],fields:["ref_aeroway_gate"],tags:{aeroway:"gate"},name:"Airport Gate"},"aeroway/hangar":{geometry:["area"],fields:["name","building_area"],tags:{aeroway:"hangar"},name:"Hangar"},"aeroway/helipad":{icon:"maki-heliport",geometry:["point","area"],fields:["ref"],terms:["helicopter","helipad","heliport"],tags:{aeroway:"helipad"},name:"Helipad"},"aeroway/runway":{icon:"fas-plane-departure",geometry:["line","area"],terms:["landing strip"],fields:["ref_runway","surface","length","width"],tags:{aeroway:"runway"},name:"Runway"},"aeroway/taxiway":{geometry:["line"],fields:["ref_taxiway","surface"],tags:{aeroway:"taxiway"},name:"Taxiway"},"aeroway/terminal":{icon:"maki-airport",geometry:["point","area"],terms:["airport","aerodrome"],fields:["name","operator","building_area"],moreFields:["wheelchair","smoking"],tags:{aeroway:"terminal"},name:"Airport Terminal"},"allotments/plot":{geometry:["area"],fields:["name","ref"],tags:{allotments:"plot"},reference:{key:"allotments",value:"plot"},name:"Community Garden Plot"},"amenity/bus_station":{icon:"maki-bus",fields:["name","building_area","operator","internet_access","internet_access/fee","internet_access/ssid"],geometry:["point","area"],tags:{amenity:"bus_station"},name:"Bus Station / Terminal",searchable:false},"amenity/coworking_space":{icon:"maki-commercial",fields:["name","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/ferry_terminal":{icon:"maki-ferry",fields:["name","network","operator","address","building_area"],geometry:["point","vertex","area"],terms:[],tags:{amenity:"ferry_terminal"},name:"Ferry Station / Terminal",searchable:false},"amenity/nursing_home":{icon:"maki-wheelchair",fields:["name","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/recycling":{icon:"maki-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",searchable:false},"amenity/register_office":{icon:"maki-town-hall",fields:["name","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/scrapyard":{icon:"maki-car",fields:["name","operator","address","opening_hours"],geometry:["point","area"],tags:{amenity:"scrapyard"},reference:{key:"industrial",value:"scrap_yard"},name:"Scrap Yard",searchable:false},"amenity/swimming_pool":{icon:"maki-swimming",geometry:["point","vertex","area"],tags:{amenity:"swimming_pool"},reference:{key:"leisure",value:"swimming_pool"},name:"Swimming Pool",searchable:false},"amenity/animal_boarding":{icon:"maki-veterinary",fields:["name","operator","address","building_area","opening_hours","animal_boarding"],moreFields:["payment_multi","website","phone","email","fax","wheelchair"],geometry:["point","area"],terms:["boarding","cat","cattery","dog","horse","kennel","kitten","pet","pet boarding","pet care","pet hotel","puppy","reptile"],tags:{amenity:"animal_boarding"},name:"Animal Boarding Facility"},"amenity/animal_breeding":{icon:"maki-veterinary",fields:["name","operator","address","building_area","opening_hours","animal_breeding"],moreFields:["website","phone","email","fax","wheelchair"],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:"maki-veterinary",fields:["name","operator","address","building_area","opening_hours","animal_shelter"],moreFields:["website","phone","email","fax","wheelchair"],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:"maki-theatre",fields:["name","address","building_area","opening_hours","website"],moreFields:["fee","payment_multi","website","phone","email","fax","wheelchair"],geometry:["point","area"],terms:[],tags:{amenity:"arts_centre"},name:"Arts Center"},"amenity/atm":{icon:"maki-bank",fields:["operator","network","cash_in","currency_multi","drive_through"],moreFields:["name","brand","lit","opening_hours","wheelchair","covered"],geometry:["point","vertex"],terms:["money","cash","machine"],tags:{amenity:"atm"},name:"ATM"},"amenity/bank":{icon:"maki-bank",fields:["name","operator","address","building_area","atm","drive_through"],moreFields:["opening_hours","currency_multi","website","phone","email","fax","wheelchair"],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:"maki-bar",fields:["name","address","building_area","outdoor_seating","brewery"],moreFields:["smoking","opening_hours","payment_multi","website","phone","email","fax","wheelchair"],geometry:["point","area"],terms:["dive","beer","bier","booze"],tags:{amenity:"bar"},name:"Bar"},"amenity/bbq":{icon:"maki-bbq",fields:["covered","fuel","access_simple"],moreFields:["lit"],geometry:["point"],terms:["bbq","grill"],tags:{amenity:"bbq"},name:"Barbecue/Grill"},"amenity/bench":{icon:"temaki-bench",fields:["backrest","material","seats","colour"],moreFields:["access_simple","inscription","lit"],geometry:["point","vertex","line"],terms:["seat"],tags:{amenity:"bench"},name:"Bench"},"amenity/bicycle_parking":{icon:"maki-bicycle",fields:["bicycle_parking","capacity","operator","covered","access_simple","fee"],moreFields:["payment_multi","covered"],geometry:["point","vertex","area"],terms:["bike"],tags:{amenity:"bicycle_parking"},name:"Bicycle Parking"},"amenity/bicycle_rental":{icon:"maki-bicycle",fields:["capacity","network","operator","fee","payment_multi"],moreFields:["opening_hours","address","website","phone","email","fax","wheelchair","covered"],geometry:["point","vertex","area"],terms:["bike"],tags:{amenity:"bicycle_rental"},name:"Bicycle Rental"},"amenity/bicycle_repair_station":{icon:"maki-bicycle",fields:["operator","brand","opening_hours","fee","service/bicycle"],moreFields:["payment_multi","covered"],geometry:["point","vertex"],terms:["bike","repair","chain","pump"],tags:{amenity:"bicycle_repair_station"},name:"Bicycle Repair Tool Stand"},"amenity/biergarten":{icon:"maki-beer",fields:["name","address","building","outdoor_seating","brewery"],moreFields:["{amenity/bar}"],geometry:["point","area"],tags:{amenity:"biergarten"},terms:["beer","bier","booze"],name:"Biergarten"},"amenity/boat_rental":{icon:"temaki-boating",fields:["name","operator","fee","payment_multi"],moreFields:["address","website","phone","email","fax","wheelchair"],geometry:["point","area"],tags:{amenity:"boat_rental"},name:"Boat Rental"},"amenity/bureau_de_change":{icon:"maki-bank",fields:["name","operator","payment_multi","currency_multi","address","building_area"],moreFields:["opening_hours","website","phone","email","fax","wheelchair"],geometry:["point","area"],terms:["bureau de change","money changer"],tags:{amenity:"bureau_de_change"},name:"Currency Exchange"},"amenity/cafe":{icon:"maki-cafe",fields:["name","cuisine","address","building_area","outdoor_seating"],moreFields:["diet_multi","takeaway","delivery","capacity","opening_hours","smoking","payment_multi","internet_access","internet_access/fee","internet_access/ssid","website","phone","email","fax","wheelchair"],geometry:["point","area"],terms:["bistro","coffee","tea"],tags:{amenity:"cafe"},name:"Cafe"},"amenity/car_pooling":{icon:"maki-car",fields:["name","operator","capacity","address","opening_hours","lit"],moreFields:["website","phone","email","fax","wheelchair"],geometry:["point","area"],tags:{amenity:"car_pooling"},name:"Car Pooling"},"amenity/car_rental":{icon:"maki-car-rental",fields:["name","operator","address","opening_hours","payment_multi"],moreFields:["brand","website","phone","email","fax","wheelchair"],geometry:["point","area"],tags:{amenity:"car_rental"},name:"Car Rental"},"amenity/car_sharing":{icon:"maki-car",fields:["name","operator","capacity","address","payment_multi","supervised"],moreFields:["lit","website","phone","email","fax","wheelchair"],geometry:["point","area"],tags:{amenity:"car_sharing"},name:"Car Sharing"},"amenity/car_wash":{icon:"temaki-car_wash",fields:["address","building_area","opening_hours","payment_multi"],moreFields:["website","phone","email","fax","wheelchair"],geometry:["point","area"],tags:{amenity:"car_wash"},name:"Car Wash"},"amenity/casino":{icon:"maki-casino",fields:["name","operator","address","building_area","opening_hours","smoking"],moreFields:["payment_multi","website","phone","email","fax","wheelchair"],geometry:["point","area"],terms:["gambling","roulette","craps","poker","blackjack"],tags:{amenity:"casino"},name:"Casino"},"amenity/charging_station":{icon:"fas-charging-station",fields:["name","operator","capacity","fee","payment_multi"],geometry:["point"],tags:{amenity:"charging_station"},terms:["EV","Electric Vehicle","Supercharger"],name:"Charging Station"},"amenity/childcare":{icon:"maki-school",fields:["name","operator","address","building_area","opening_hours"],moreFields:["payment_multi","website","phone","email","fax","wheelchair"],geometry:["point","area"],terms:["daycare","orphanage","playgroup"],tags:{amenity:"childcare"},name:"Nursery/Childcare"},"amenity/cinema":{icon:"maki-cinema",fields:["name","address","building_area","opening_hours","payment_multi"],moreFields:["website","phone","email","fax","wheelchair"],geometry:["point","area"],terms:["drive-in","film","flick","movie","theater","picture","show","screen"],tags:{amenity:"cinema"},name:"Cinema"},"amenity/clinic":{icon:"maki-doctor",fields:["name","operator","healthcare/speciality","address","building_area","opening_hours"],moreFields:["payment_multi","website","phone","email","fax","wheelchair"],geometry:["point","area"],terms:["medical","urgentcare"],tags:{amenity:"clinic"},addTags:{amenity:"clinic",healthcare:"clinic"},removeTags:{amenity:"clinic",healthcare:"clinic"},reference:{key:"amenity",value:"clinic"},name:"Clinic"},"amenity/clinic/abortion":{icon:"maki-hospital",fields:["name","operator","healthcare/speciality","address","building_area","opening_hours"],geometry:["point","area"],terms:[],tags:{amenity:"clinic",healthcare:"clinic","healthcare:speciality":"abortion"},reference:{key:"amenity",value:"clinic"},name:"Abortion Clinic"},"amenity/clinic/fertility":{icon:"maki-hospital",fields:["name","operator","healthcare/speciality","address","building_area","opening_hours"],geometry:["point","area"],terms:["egg","fertility","reproductive","sperm","ovulation"],tags:{amenity:"clinic",healthcare:"clinic","healthcare:speciality":"fertility"},reference:{key:"amenity",value:"clinic"},name:"Fertility Clinic"},"amenity/clock":{icon:"temaki-clock",fields:["name","support","display","visibility","date","faces"],moreFields:["lit"],geometry:["point","vertex"],tags:{amenity:"clock"},name:"Clock"},"amenity/college":{icon:"maki-college",fields:["name","operator","address","website","internet_access"],moreFields:["religion","denomination","internet_access/fee","internet_access/ssid","phone","email","fax","wheelchair"],geometry:["point","area"],terms:["university","undergraduate school"],tags:{amenity:"college"},name:"College Grounds"},"amenity/community_centre":{icon:"maki-town-hall",fields:["name","operator","address","building_area"],moreFields:["website","phone","email","fax","wheelchair"],geometry:["point","area"],terms:["event","hall"],tags:{amenity:"community_centre"},name:"Community Center"},"amenity/compressed_air":{icon:"maki-car",fields:["operator","fee","payment_multi","lit"],geometry:["point","area"],tags:{amenity:"compressed_air"},name:"Compressed Air"},"amenity/courthouse":{icon:"temaki-courthouse",fields:["name","operator","address","building_area"],moreFields:["website","phone","email","fax","wheelchair"],geometry:["point","area"],tags:{amenity:"courthouse"},name:"Courthouse"},"amenity/crematorium":{icon:"maki-cemetery",fields:["name","website","phone","opening_hours","wheelchair"],moreFields:["address","website","phone","email","fax","wheelchair"],geometry:["area","point"],tags:{amenity:"crematorium"},terms:["cemetery","funeral"],name:"Crematorium"},"amenity/dentist":{icon:"maki-dentist",fields:["name","operator","healthcare/speciality","address","building_area","opening_hours"],moreFields:["payment_multi","website","phone","email","fax","wheelchair"],geometry:["point","area"],terms:["tooth","teeth"],tags:{amenity:"dentist"},addTags:{amenity:"dentist",healthcare:"dentist"},removeTags:{amenity:"dentist",healthcare:"dentist"},reference:{key:"amenity",value:"dentist"},name:"Dentist"},"amenity/dive_centre":{icon:"maki-swimming",fields:["name","operator","address","building_area","opening_hours","scuba_diving"],moreFields:["payment_multi","website","phone","email","fax","wheelchair"],geometry:["point","area"],terms:["diving","scuba"],tags:{amenity:"dive_centre"},name:"Dive Center"},"amenity/doctors":{icon:"maki-doctor",fields:["name","operator","healthcare/speciality","address","building_area","opening_hours"],moreFields:["payment_multi","website","phone","email","fax","wheelchair"],geometry:["point","area"],terms:["medic*","physician"],tags:{amenity:"doctors"},addTags:{amenity:"doctors",healthcare:"doctor"},removeTags:{amenity:"doctors",healthcare:"doctor"},reference:{key:"amenity",value:"doctors"},name:"Doctor"},"amenity/dojo":{icon:"maki-pitch",fields:["name","sport","address","building_area","opening_hours"],moreFields:["payment_multi","website","phone","email","fax","wheelchair"],geometry:["point","area"],terms:["martial arts","dojang"],tags:{amenity:"dojo"},name:"Dojo / Martial Arts Academy"},"amenity/drinking_water":{icon:"maki-drinking-water",fields:["operator","access_simple","fee","wheelchair"],moreFields:["lit","covered"],geometry:["point"],tags:{amenity:"drinking_water"},terms:["potable water source","water fountain","drinking fountain","bubbler","water tap"],name:"Drinking Water"},"amenity/driving_school":{icon:"maki-car",fields:["name","operator","address","building_area","opening_hours"],moreFields:["payment_multi","website","phone","email","fax","wheelchair"],geometry:["point","area"],tags:{amenity:"driving_school"},name:"Driving School"},"amenity/embassy":{icon:"maki-embassy",fields:["name","country","address","building_area"],moreFields:["website","phone","email","fax","wheelchair"],geometry:["point","area"],tags:{amenity:"embassy"},name:"Embassy"},"amenity/fast_food":{icon:"maki-fast-food",fields:["name","cuisine","operator","address","building_area","drive_through"],moreFields:["opening_hours","diet_multi","takeaway","delivery","smoking","capacity","outdoor_seating","internet_access","internet_access/fee","internet_access/ssid","payment_multi","website","phone","email","fax","wheelchair"],geometry:["point","area"],tags:{amenity:"fast_food"},terms:["restaurant","takeaway"],name:"Fast Food"},"amenity/fast_food/burger":{icon:"maki-fast-food",geometry:["point","area"],terms:["breakfast","dine","dining","dinner","drive-in","eat","grill","lunch","table"],tags:{amenity:"fast_food",cuisine:"burger"},reference:{key:"cuisine",value:"burger"},name:"Burger Fast Food"},"amenity/fast_food/chicken":{icon:"fas-drumstick-bite",geometry:["point","area"],terms:["breakfast","canteen","dine","dining","dinner","drive-in","eat","grill","lunch","table"],tags:{amenity:"fast_food",cuisine:"chicken"},reference:{key:"cuisine",value:"chicken"},name:"Chicken Fast Food"},"amenity/fast_food/fish_and_chips":{icon:"fas-fish",geometry:["point","area"],terms:["breakfast","cafe","café","dine","dining","dinner","drive-in","eat","grill","lunch","table","french fries"],tags:{amenity:"fast_food",cuisine:"fish_and_chips"},reference:{key:"cuisine",value:"fish_and_chips"},name:"Fish & Chips Fast Food"},"amenity/fast_food/kebab":{icon:"maki-restaurant",geometry:["point","area"],terms:["bar","breakfast","cafe","café","canteen","dine","dining","dinner","drive-in","eat","grill","lunch","table"],tags:{amenity:"fast_food",cuisine:"kebab"},reference:{key:"cuisine",value:"kebab"},name:"Kebab Fast Food"},"amenity/fast_food/pizza":{icon:"maki-restaurant-pizza",geometry:["point","area"],terms:["dine","dining","dinner","drive-in","eat","lunch","table","deep dish","thin crust","slice"],tags:{amenity:"fast_food",cuisine:"pizza"},reference:{key:"cuisine",value:"pizza"},name:"Pizza Fast Food"},"amenity/fast_food/sandwich":{icon:"maki-restaurant",geometry:["point","area"],terms:["breakfast","cafe","café","dine","dining","dinner","drive-in","eat","grill","lunch","table"],tags:{amenity:"fast_food",cuisine:"sandwich"},reference:{key:"cuisine",value:"sandwich"},name:"Sandwich Fast Food"},"amenity/fire_station":{icon:"maki-fire-station",fields:["name","operator","address","building_area"],moreFields:["website","phone","email","fax","wheelchair"],geometry:["point","area"],terms:[],tags:{amenity:"fire_station"},name:"Fire Station"},"amenity/food_court":{icon:"maki-restaurant",fields:["name","operator","address","building_area","opening_hours"],moreFields:["smoking","outdoor_seating","capacity","internet_access","internet_access/fee","internet_access/ssid","diet_multi","website","phone","email","fax","wheelchair"],geometry:["point","area"],terms:["fast food","restaurant","food"],tags:{amenity:"food_court"},name:"Food Court"},"amenity/fountain":{icon:"temaki-fountain",fields:["name","operator","lit"],geometry:["point","area"],tags:{amenity:"fountain"},name:"Fountain"},"amenity/fuel":{icon:"maki-fuel",fields:["name","brand","operator","address","fuel_multi"],moreFields:["opening_hours","payment_multi","building","website","phone","email","fax","wheelchair"],geometry:["point","area"],terms:["petrol","fuel","gasoline","propane","diesel","lng","cng","biodiesel"],tags:{amenity:"fuel"},name:"Gas Station"},"amenity/grave_yard":{icon:"maki-cemetery",fields:["religion","address"],moreFields:["website","phone","email","fax"],geometry:["point","area"],tags:{amenity:"grave_yard"},name:"Graveyard"},"amenity/grit_bin":{icon:"fas-box",fields:["access_simple"],geometry:["point","vertex"],tags:{amenity:"grit_bin"},terms:["salt","sand"],name:"Grit Bin"},"amenity/hospital":{icon:"maki-hospital",fields:["name","operator","healthcare/speciality","address","emergency"],moreFields:["internet_access","internet_access/fee","internet_access/ssid","website","phone","email","fax","wheelchair"],geometry:["point","area"],terms:["clinic","doctor","emergency room","health","infirmary","institution","sanatorium","sanitarium","sick","surgery","ward"],tags:{amenity:"hospital"},addTags:{amenity:"hospital",healthcare:"hospital"},removeTags:{amenity:"hospital",healthcare:"hospital"},reference:{key:"amenity",value:"hospital"},name:"Hospital Grounds"},"amenity/hunting_stand":{icon:"temaki-binoculars",fields:["access_simple"],geometry:["point","vertex","area"],terms:["game","gun","lookout","rifle","shoot*","wild","watch"],tags:{amenity:"hunting_stand"},name:"Hunting Stand"},"amenity/ice_cream":{icon:"maki-ice-cream",fields:["name","address","building_area","opening_hours","outdoor_seating"],moreFields:["takeaway","delivery","drive_through","internet_access","internet_access/fee","internet_access/ssid","diet_multi","payment_multi","website","phone","email","fax","wheelchair"],geometry:["point","area"],terms:["gelato","sorbet","sherbet","frozen","yogurt"],tags:{amenity:"ice_cream"},name:"Ice Cream Shop"},"amenity/internet_cafe":{icon:"temaki-antenna",fields:["name","operator","address","building_area","internet_access","internet_access/fee","internet_access/ssid"],moreFields:["opening_hours","smoking","outdoor_seating","payment_multi","website","phone","email","fax","wheelchair"],geometry:["point","area"],terms:["cybercafe","taxiphone","teleboutique","coffee","cafe","net","lanhouse"],tags:{amenity:"internet_cafe"},name:"Internet Cafe"},"amenity/kindergarten":{icon:"maki-school",fields:["name","operator","address"],moreFields:["opening_hours","payment_multi","website","phone","email","fax","wheelchair"],geometry:["point","area"],terms:["kindergarden","pre-school"],tags:{amenity:"kindergarten"},name:"Preschool/Kindergarten Grounds"},"amenity/language_school":{icon:"maki-school",fields:["name","operator","address","building_area","opening_hours","language_multi"],moreFields:["payment_multi","website","phone","email","fax","wheelchair"],geometry:["point","area"],terms:["esl"],tags:{amenity:"language_school"},name:"Language School"},"amenity/library":{icon:"maki-library",fields:["name","operator","building_area","address","ref/isil"],moreFields:["opening_hours","internet_access","internet_access/fee","internet_access/ssid","website","phone","email","fax","wheelchair","payment_multi"],geometry:["point","area"],terms:["book"],tags:{amenity:"library"},name:"Library"},"amenity/love_hotel":{icon:"maki-heart",fields:["name","operator","address","building_area","rooms","internet_access"],moreFields:["smoking","payment_multi","internet_access/fee","internet_access/ssid","website","phone","email","fax","wheelchair"],geometry:["point","area"],tags:{amenity:"love_hotel"},name:"Love Hotel"},"amenity/marketplace":{icon:"maki-shop",fields:["name","operator","address","building","opening_hours"],moreFields:["website","phone","email","fax","wheelchair"],geometry:["point","area"],tags:{amenity:"marketplace"},name:"Marketplace"},"amenity/monastery":{icon:"maki-place-of-worship",fields:["name","religion","denomination","address","building_area"],moreFields:["website","phone","email","fax","wheelchair"],geometry:["point","area"],terms:["abbey","basilica","bethel","cathedral","chancel","chantry","chapel","church","fold","house of God","house of prayer","house of worship","minster","mission","monastery","mosque","oratory","parish","sacellum","sanctuary","shrine","synagogue","tabernacle","temple"],tags:{amenity:"monastery"},name:"Monastery Grounds"},"amenity/money_transfer":{icon:"maki-bank",fields:["name","brand","address","building_area","payment_multi","currency_multi"],moreFields:["opening_hours","website","phone","email","fax","wheelchair"],geometry:["point","area"],terms:["money order","check","bill","currency","finance","wire transfer","cable","person to person","cash to cash","exchange"],tags:{amenity:"money_transfer"},name:"Money Transfer Station"},"amenity/motorcycle_parking":{icon:"fas-motorcycle",fields:["capacity","operator","covered","access_simple"],geometry:["point","vertex","area"],tags:{amenity:"motorcycle_parking"},name:"Motorcycle Parking"},"amenity/music_school":{icon:"maki-school",fields:["name","operator","address","building_area","opening_hours"],moreFields:["payment_multi","website","phone","email","fax","wheelchair"],geometry:["point","area"],terms:["school of music"],tags:{amenity:"music_school"},name:"Music School"},"amenity/nightclub":{icon:"maki-bar",fields:["name","operator","address","building_area","opening_hours","smoking"],moreFields:["payment_multi","website","phone","email","fax","wheelchair"],geometry:["point","area"],tags:{amenity:"nightclub"},terms:["disco*","night club","dancing","dance club"],name:"Nightclub"},"amenity/parking_entrance":{icon:"maki-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:"maki-car",fields:["operator","parking","capacity","access_simple","fee","surface"],moreFields:["name","supervised","park_ride","maxstay","payment_multi","address","website","phone","email","fax","wheelchair","covered"],geometry:["point","vertex","area"],tags:{amenity:"parking"},terms:["automobile parking","car lot","car parking","rv parking","truck parking","vehicle parking"],name:"Parking Lot"},"amenity/parking/multi-storey":{icon:"maki-car",fields:["{amenity/parking}","building","levels","height"],geometry:["area"],tags:{amenity:"parking",parking:"multi-storey"},addTags:{building:"parking",amenity:"parking",parking:"multi-storey"},removeTags:{building:"parking",amenity:"parking",parking:"multi-storey"},reference:{key:"parking",value:"multi-storey"},terms:["car","indoor parking","multistorey car park","parkade","parking building","parking deck","parking garage","parking ramp","parking structure"],name:"Multilevel Parking Garage"},"amenity/payment_centre":{icon:"maki-bank",fields:["name","brand","address","building_area","opening_hours","payment_multi"],moreFields:["currency_multi","website","phone","email","fax","wheelchair"],geometry:["point","area"],terms:["check","tax pay","bill pay","currency","finance","cash","money"],tags:{amenity:"payment_centre"},name:"Payment Center"},"amenity/payment_terminal":{icon:"maki-bank",fields:["name","brand","address","opening_hours","payment_multi"],moreFields:["currency_multi","wheelchair"],geometry:["point"],terms:["interactive kiosk","ekiosk","atm","bill pay","tax pay","phone pay","finance","cash","money transfer","card"],tags:{amenity:"payment_terminal"},name:"Payment Terminal"},"amenity/pharmacy":{icon:"maki-pharmacy",fields:["name","operator","address","building_area","drive_through","dispensing"],moreFields:["opening_hours","payment_multi","website","phone","email","fax","wheelchair"],geometry:["point","area"],tags:{amenity:"pharmacy"},addTags:{amenity:"pharmacy",healthcare:"pharmacy"},removeTags:{amenity:"pharmacy",healthcare:"pharmacy"},reference:{key:"amenity",value:"pharmacy"},terms:["apothecary","drug store","drugstore","med*","prescription"],name:"Pharmacy Counter"},"amenity/place_of_worship":{icon:"maki-place-of-worship",fields:["name","religion","denomination","address","building_area","service_times"],moreFields:["opening_hours","internet_access","internet_access/ssid","website","phone","email","fax","wheelchair"],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:"maki-religious-buddhist",fields:["name","religion","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:"maki-religious-christian",fields:["name","religion","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:"Christian Church"},"amenity/place_of_worship/hindu":{icon:"temaki-hinduism",fields:["name","religion","denomination","building_area","address","service_times"],geometry:["point","area"],terms:["kovil","devasthana","mandir","kshetram","alayam","shrine","temple"],tags:{amenity:"place_of_worship",religion:"hindu"},reference:{key:"amenity",value:"place_of_worship"},name:"Hindu Temple"},"amenity/place_of_worship/jewish":{icon:"maki-religious-jewish",fields:["name","religion","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:"Jewish Synagogue"},"amenity/place_of_worship/muslim":{icon:"maki-religious-muslim",fields:["name","religion","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:"Muslim Mosque"},"amenity/place_of_worship/shinto":{icon:"temaki-shinto",fields:["name","religion","denomination","building_area","address","service_times"],geometry:["point","area"],terms:["kami","torii"],tags:{amenity:"place_of_worship",religion:"shinto"},reference:{key:"amenity",value:"place_of_worship"},name:"Shinto Shrine"},"amenity/place_of_worship/sikh":{icon:"temaki-sikhism",fields:["name","religion","denomination","building_area","address","service_times"],geometry:["point","area"],terms:["gurudwara","temple"],tags:{amenity:"place_of_worship",religion:"sikh"},reference:{key:"amenity",value:"place_of_worship"},name:"Sikh Temple"},"amenity/place_of_worship/taoist":{icon:"temaki-taoism",fields:["name","religion","denomination","building_area","address","service_times"],geometry:["point","area"],terms:["daoist","monastery","temple"],tags:{amenity:"place_of_worship",religion:"taoist"},reference:{key:"amenity",value:"place_of_worship"},name:"Taoist Temple"},"amenity/planetarium":{icon:"maki-museum",fields:["name","operator","address","building_area","opening_hours"],moreFields:["fee","payment_multi","website","phone","email","fax","wheelchair"],geometry:["point","area"],terms:["museum","astronomy","observatory"],tags:{amenity:"planetarium"},name:"Planetarium"},"amenity/police":{icon:"maki-police",fields:["name","operator","address","building_area","opening_hours"],moreFields:["website","phone","email","fax","wheelchair"],geometry:["point","area"],terms:["badge","constable","constabulary","cop","detective","fed","law","enforcement","officer","patrol"],tags:{amenity:"police"},name:"Police"},"amenity/post_box":{icon:"temaki-post_box",fields:["operator","collection_times","drive_through","ref"],moreFields:["wheelchair"],geometry:["point","vertex"],tags:{amenity:"post_box"},terms:["letter","post"],name:"Mailbox"},"amenity/post_office":{icon:"maki-post",fields:["name","operator","address","building_area","opening_hours"],moreFields:["payment_multi","website","phone","email","fax","wheelchair"],geometry:["point","area"],terms:["letter","mail"],tags:{amenity:"post_office"},name:"Post Office"},"amenity/prison":{icon:"maki-prison",fields:["name","operator","address"],moreFields:["website","phone","email","fax","wheelchair"],geometry:["point","area"],terms:["cell","jail"],tags:{amenity:"prison"},name:"Prison Grounds"},"amenity/pub":{icon:"maki-beer",fields:["name","address","building_area","opening_hours","smoking","brewery"],moreFields:["outdoor_seating","diet_multi","payment_multi","internet_access","internet_access/fee","internet_access/ssid","website","phone","email","fax","wheelchair"],geometry:["point","area"],tags:{amenity:"pub"},terms:["alcohol","drink","dive","beer","bier","booze"],name:"Pub"},"amenity/public_bath":{icon:"maki-water",fields:["name","bath/type","bath/open_air","bath/sand_bath","address","building_area","fee"],moreFields:["opening_hours","payment_multi","website","phone","email","fax","wheelchair"],geometry:["point","area"],tags:{amenity:"public_bath"},terms:["onsen","foot bath","hot springs"],name:"Public Bath"},"amenity/public_bookcase":{icon:"maki-library",fields:["name","operator","capacity","website","lit"],moreFields:["wheelchair"],geometry:["point","area"],terms:["library","bookcrossing"],tags:{amenity:"public_bookcase"},name:"Public Bookcase"},"amenity/ranger_station":{icon:"maki-ranger-station",fields:["name","operator","address","building_area","opening_hours"],moreFields:["website","phone","email","fax","wheelchair"],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:"maki-recycling",fields:["name","operator","address","building","opening_hours","recycling_accepts"],moreFields:["fee","payment_multi","website","phone","email","fax","wheelchair"],geometry:["point","area"],terms:["bottle","can","dump","glass","garbage","rubbish","scrap","trash"],tags:{amenity:"recycling",recycling_type:"centre"},reference:{key:"recycling_type",value:"*"},name:"Recycling Center"},"amenity/recycling_container":{icon:"maki-recycling",fields:["recycling_accepts","collection_times"],geometry:["point","area"],terms:["bin","can","bottle","glass","garbage","rubbish","scrap","trash"],tags:{amenity:"recycling",recycling_type:"container"},reference:{key:"amenity",value:"recycling"},name:"Recycling Container"},"amenity/restaurant":{icon:"maki-restaurant",fields:["name","cuisine","address","building_area","opening_hours","outdoor_seating"],moreFields:["takeaway","delivery","capacity","diet_multi","smoking","internet_access","internet_access/fee","internet_access/ssid","website","phone","email","fax","wheelchair"],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/restaurant/american":{icon:"maki-restaurant",geometry:["point","area"],terms:["bar","breakfast","cafe","café","canteen","coffee","dine","dining","dinner","drive-in","eat","grill","lunch","table"],tags:{amenity:"restaurant",cuisine:"american"},reference:{key:"cuisine",value:"american"},name:"American Restaurant"},"amenity/restaurant/asian":{icon:"maki-restaurant-noodle",geometry:["point","area"],terms:["bar","breakfast","cafe","café","canteen","dine","dining","dinner","drive-in","eat","grill","lunch","table"],tags:{amenity:"restaurant",cuisine:"asian"},reference:{key:"cuisine",value:"asian"},name:"Asian Restaurant"},"amenity/restaurant/chinese":{icon:"maki-restaurant-noodle",geometry:["point","area"],terms:["bar","breakfast","cafe","café","canteen","dine","dining","dinner","drive-in","eat","grill","lunch","table"],tags:{amenity:"restaurant",cuisine:"chinese"},reference:{key:"cuisine",value:"chinese"},name:"Chinese Restaurant"},"amenity/restaurant/french":{icon:"maki-restaurant",geometry:["point","area"],terms:["bar","breakfast","cafe","café","canteen","dine","dining","dinner","drive-in","eat","grill","lunch","table"],tags:{amenity:"restaurant",cuisine:"french"},reference:{key:"cuisine",value:"french"},name:"French Restaurant"},"amenity/restaurant/german":{icon:"maki-restaurant",geometry:["point","area"],terms:["bar","breakfast","cafe","café","canteen","dine","dining","dinner","drive-in","eat","grill","lunch","table"],tags:{amenity:"restaurant",cuisine:"german"},reference:{key:"cuisine",value:"german"},name:"German Restaurant"},"amenity/restaurant/greek":{icon:"maki-restaurant",geometry:["point","area"],terms:["bar","breakfast","cafe","café","canteen","dine","dining","dinner","drive-in","eat","grill","lunch","table","gyros","pitas","olives"],tags:{amenity:"restaurant",cuisine:"greek"},reference:{key:"cuisine",value:"greek"},name:"Greek Restaurant"},"amenity/restaurant/indian":{icon:"maki-restaurant",geometry:["point","area"],terms:["bar","breakfast","dine","dining","dinner","drive-in","eat","grill","lunch","table","curry"],tags:{amenity:"restaurant",cuisine:"indian"},reference:{key:"cuisine",value:"indian"},name:"Indian Restaurant"},"amenity/restaurant/italian":{icon:"maki-restaurant",geometry:["point","area"],terms:["bar","breakfast","cafe","café","canteen","dine","dining","dinner","drive-in","eat","grill","lunch","table","pasta","pizza"],tags:{amenity:"restaurant",cuisine:"italian"},reference:{key:"cuisine",value:"italian"},name:"Italian Restaurant"},"amenity/restaurant/japanese":{icon:"maki-restaurant-noodle",geometry:["point","area"],terms:["bar","breakfast","cafe","café","canteen","dine","dining","dinner","drive-in","eat","grill","lunch","table"],tags:{amenity:"restaurant",cuisine:"japanese"},reference:{key:"cuisine",value:"japanese"},name:"Japanese Restaurant"},"amenity/restaurant/mexican":{icon:"maki-restaurant",geometry:["point","area"],terms:["bar","breakfast","dine","dining","dinner","drive-in","eat","grill","lunch","table","tacos","burritos","enchiladas","fajitas","nachos","tortillas","salsa","tamales","quesadillas"],tags:{amenity:"restaurant",cuisine:"mexican"},reference:{key:"cuisine",value:"mexican"},name:"Mexican Restaurant"},"amenity/restaurant/noodle":{icon:"maki-restaurant-noodle",geometry:["point","area"],terms:["bar","breakfast","cafe","café","canteen","dine","dining","dinner","drive-in","eat","grill","lunch","table","ramen noodles","soup","soba noodles","cellophane noodles","rice noodles"],tags:{amenity:"restaurant",cuisine:"noodle"},reference:{key:"cuisine",value:"noodle"},name:"Noodle Restaurant"},"amenity/restaurant/pizza":{icon:"maki-restaurant-pizza",geometry:["point","area"],terms:["bar","dine","dining","dinner","drive-in","eat","lunch","table","deep dish","thin crust","slice"],tags:{amenity:"restaurant",cuisine:"pizza"},reference:{key:"cuisine",value:"pizza"},name:"Pizza Restaurant"},"amenity/restaurant/seafood":{icon:"maki-restaurant-seafood",geometry:["point","area"],terms:["bar","breakfast","cafe","café","dine","dining","dinner","drive-in","eat","grill","lunch","table","fish","shellfish","molluscs","crustaceans","clams","oysters","lobsters","crab","shrimp","squid","octopus"],tags:{amenity:"restaurant",cuisine:"seafood"},reference:{key:"cuisine",value:"seafood"},name:"Seafood Restaurant"},"amenity/restaurant/steakhouse":{icon:"maki-slaughterhouse",geometry:["point","area"],terms:["bar","breakfast","cafe","café","canteen","dine","dining","dinner","drive-in","eat","grill","lunch","table","steak house","chop house","beef"],tags:{amenity:"restaurant",cuisine:"steak_house"},reference:{key:"cuisine",value:"steak_house"},name:"Steakhouse"},"amenity/restaurant/sushi":{icon:"fas-fish",geometry:["point","area"],terms:["bar","breakfast","cafe","café","canteen","dine","dining","dinner","drive-in","eat","grill","lunch","table"],tags:{amenity:"restaurant",cuisine:"sushi"},reference:{key:"cuisine",value:"sushi"},name:"Sushi Restaurant"},"amenity/restaurant/thai":{icon:"maki-restaurant-noodle",geometry:["point","area"],terms:["bar","breakfast","cafe","café","canteen","dine","dining","dinner","drive-in","eat","grill","lunch","table"],tags:{amenity:"restaurant",cuisine:"thai"},reference:{key:"cuisine",value:"thai"},name:"Thai Restaurant"},"amenity/restaurant/turkish":{icon:"maki-restaurant",geometry:["point","area"],terms:["bar","breakfast","cafe","café","canteen","dine","dining","dinner","drive-in","eat","grill","lunch","table"],tags:{amenity:"restaurant",cuisine:"turkish"},reference:{key:"cuisine",value:"turkish"},name:"Turkish Restaurant"},"amenity/restaurant/vietnamese":{icon:"maki-restaurant-noodle",geometry:["point","area"],terms:["bar","breakfast","cafe","café","canteen","dine","dining","dinner","drive-in","eat","grill","lunch","table"],tags:{amenity:"restaurant",cuisine:"vietnamese"},reference:{key:"cuisine",value:"vietnamese"},name:"Vietnamese Restaurant"},"amenity/sanitary_dump_station":{icon:"temaki-storage_tank",fields:["operator","access_simple","fee","water_point"],moreFields:["payment_multi"],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:"maki-school",fields:["name","operator","address","religion","denomination","website"],moreFields:["internet_access","internet_access/ssid","phone","email","fax","wheelchair"],geometry:["point","area"],terms:["academy","elementary school","middle school","high school"],tags:{amenity:"school"},name:"School Grounds"},"amenity/shelter":{icon:"maki-shelter",fields:["name","shelter_type","building_area","bench","bin"],moreFields:["lit","wheelchair"],geometry:["point","vertex","area"],terms:["lean-to","gazebo","picnic"],tags:{amenity:"shelter"},name:"Shelter"},"amenity/shelter/gazebo":{icon:"maki-shelter",fields:["name","building_area","bench","lit"],geometry:["point","area"],tags:{amenity:"shelter",shelter_type:"gazebo"},name:"Gazebo"},"amenity/shelter/lean_to":{icon:"maki-shelter",fields:["name","operator","building_area"],geometry:["point","area"],tags:{amenity:"shelter",shelter_type:"lean_to"},name:"Lean-To"},"amenity/shelter/picnic_shelter":{icon:"maki-shelter",fields:["name","shelter_type","building_area","lit","bin"],geometry:["point","area"],tags:{amenity:"shelter",shelter_type:"picnic_shelter"},reference:{key:"shelter_type",value:"picnic_shelter"},terms:["pavilion"],name:"Picnic Shelter"},"amenity/shelter/public_transport":{icon:"maki-shelter",fields:["name","shelter_type","building_area","bench","lit"],geometry:["point","area"],terms:["bus stop","metro stop","waiting"],tags:{amenity:"shelter",shelter_type:"public_transport"},reference:{key:"shelter_type",value:"public_transport"},name:"Transit Shelter"},"amenity/shower":{icon:"temaki-shower",fields:["opening_hours","fee","supervised","building_area","access_simple","wheelchair"],moreFields:["operator","gender","payment_multi"],geometry:["point","vertex","area"],terms:["rain closet"],tags:{amenity:"shower"},name:"Shower"},"amenity/smoking_area":{icon:"fas-smoking",fields:["name","shelter","bin","bench","opening_hours"],moreFields:["lit","wheelchair","covered"],geometry:["point","vertex","area"],terms:[],tags:{amenity:"smoking_area"},name:"Smoking Area"},"amenity/social_facility":{icon:"temaki-social_facility",fields:["name","operator","address","building_area","social_facility","social_facility_for"],moreFields:["opening_hours","wheelchair","internet_access","internet_access/fee","internet_access/ssid","website","phone","email","fax"],geometry:["point","area"],terms:[],tags:{amenity:"social_facility"},name:"Social Facility"},"amenity/social_facility/food_bank":{icon:"temaki-social_facility",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:"maki-wheelchair",fields:["{amenity/social_facility}","wheelchair"],geometry:["point","area"],terms:["old","senior","living","care home","assisted 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:"temaki-social_facility",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:"maki-wheelchair",fields:["{amenity/social_facility}","wheelchair"],geometry:["point","area"],terms:["elderly","living","nursing","old","senior","assisted living"],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:"maki-karaoke",fields:["name","studio","address","building_area"],moreFields:["website","phone","email","fax","wheelchair"],geometry:["point","area"],terms:["recording","radio","television"],tags:{amenity:"studio"},name:"Studio"},"amenity/taxi":{icon:"fas-taxi",fields:["name","operator","capacity"],moreFields:["address","opening_hours","wheelchair"],geometry:["point","vertex","area"],terms:["cab"],tags:{amenity:"taxi"},name:"Taxi Stand"},"amenity/telephone":{icon:"maki-telephone",fields:["operator","phone","fee","payment_multi","booth"],moreFields:["covered","indoor","lit","wheelchair"],geometry:["point","vertex"],tags:{amenity:"telephone"},terms:["phone"],name:"Telephone"},"amenity/theatre":{icon:"maki-theatre",fields:["name","operator","address","building_area"],moreFields:["internet_access","internet_access/fee","internet_access/ssid","payment_multi","website","phone","email","fax","wheelchair"],geometry:["point","area"],terms:["theatre","performance","play","musical"],tags:{amenity:"theatre"},name:"Theater"},"amenity/theatre/type/amphi":{icon:"maki-theatre",fields:["name","operator","address","lit"],geometry:["point","area"],terms:["open air","outdoor","greek","ampi"],tags:{amenity:"theatre","theatre:type":"amphi"},name:"Amphitheatre"},"amenity/toilets":{icon:"maki-toilet",fields:["toilets/disposal","building_area","access_simple","gender","diaper","wheelchair"],moreFields:["fee","opening_hours","operator","payment_multi"],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:"maki-town-hall",fields:["name","operator","address","building_area"],moreFields:["website","phone","email","fax","wheelchair"],geometry:["point","area"],terms:["village","city","government","courthouse","municipal"],tags:{amenity:"townhall"},name:"Town Hall"},"amenity/university":{icon:"maki-college",fields:["{amenity/college}"],moreFields:["{amenity/college}"],geometry:["point","area"],terms:["college","graduate school","PhD program","master's degree program"],tags:{amenity:"university"},name:"University Grounds"},"amenity/vehicle_inspection":{icon:"maki-car",fields:["name","operator","address","building_area","opening_hours"],moreFields:["payment_multi","website","phone","email","fax","wheelchair"],geometry:["point","area"],terms:["car inspection"],tags:{amenity:"vehicle_inspection"},name:"Vehicle Inspection"},"amenity/vending_machine":{icon:"temaki-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:"temaki-vending_machine",fields:["vending","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:"temaki-vending_machine",geometry:["point"],terms:["cigarette"],tags:{amenity:"vending_machine",vending:"cigarettes"},reference:{key:"vending",value:"cigarettes"},name:"Cigarette Vending Machine"},"amenity/vending_machine/coffee":{icon:"temaki-vending_machine",geometry:["point"],terms:["coffee"],tags:{amenity:"vending_machine",vending:"coffee"},reference:{key:"vending",value:"coffee"},name:"Coffee Vending Machine"},"amenity/vending_machine/condoms":{icon:"temaki-vending_machine",geometry:["point"],terms:["condom"],tags:{amenity:"vending_machine",vending:"condoms"},reference:{key:"vending",value:"condoms"},name:"Condom Vending Machine"},"amenity/vending_machine/drinks":{icon:"temaki-vending_machine",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/electronics":{icon:"temaki-vending_machine",geometry:["point"],terms:["cable","charger","earbud","headphone","phone","tablet"],tags:{amenity:"vending_machine",vending:"electronics"},reference:{key:"vending",value:"electronics"},name:"Electronics Vending Machine"},"amenity/vending_machine/elongated_coin":{icon:"temaki-vending_machine",geometry:["point"],terms:["coin","crush","elongated","flatten","penny","souvenir"],tags:{amenity:"vending_machine",vending:"elongated_coin"},reference:{key:"vending",value:"elongated_coin"},name:"Flat Coin Vending Machine"},"amenity/vending_machine/excrement_bags":{icon:"temaki-vending_machine",fields:["{amenity/vending_machine}","fee","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/feminine_hygiene":{icon:"temaki-vending_machine",geometry:["point"],terms:["condom","tampon","pad","woman","women","menstrual hygiene products","personal care"],tags:{amenity:"vending_machine",vending:"feminine_hygiene"},reference:{key:"vending",value:"feminine_hygiene"},name:"Feminine Hygiene Vending Machine"},"amenity/vending_machine/food":{icon:"temaki-vending_machine",geometry:["point"],terms:["food"],tags:{amenity:"vending_machine",vending:"food"},reference:{key:"vending",value:"food"},name:"Food Vending Machine"},"amenity/vending_machine/fuel":{icon:"maki-fuel",geometry:["point"],terms:["petrol","fuel","gasoline","propane","diesel","lng","cng","biodiesel"],tags:{amenity:"vending_machine",vending:"fuel"},reference:{key:"vending",value:"fuel"},name:"Gas Pump",matchScore:0.5},"amenity/vending_machine/ice_cream":{icon:"temaki-vending_machine",geometry:["point"],terms:["chocolate","ice cream","frozen","popsicle","vanilla"],tags:{amenity:"vending_machine",vending:"ice_cream"},reference:{key:"vending",value:"ice_cream"},name:"Ice Cream Vending Machine"},"amenity/vending_machine/newspapers":{icon:"temaki-vending_machine",fields:["vending","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:"temaki-vending_machine",fields:["vending","operator","payment_multi","currency_multi"],geometry:["point"],terms:["mail","parcel","pickup"],tags:{amenity:"vending_machine",vending:"parcel_pickup;parcel_mail_in"},reference:{key:"vending",value:"parcel_pickup;parcel_mail_in"},name:"Parcel Pickup/Dropoff Locker"},"amenity/vending_machine/parcel_pickup":{icon:"temaki-vending_machine",fields:["vending","operator"],geometry:["point"],terms:["amazon","locker","mail","parcel","pickup"],tags:{amenity:"vending_machine",vending:"parcel_pickup"},reference:{key:"vending",value:"parcel_pickup"},name:"Parcel Pickup Locker"},"amenity/vending_machine/parking_tickets":{icon:"temaki-vending_machine",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:"temaki-vending_machine",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/stamps":{icon:"temaki-vending_machine",geometry:["point"],terms:["mail","postage","stamp"],tags:{amenity:"vending_machine",vending:"stamps"},reference:{key:"vending",value:"stamps"},name:"Postage Vending Machine"},"amenity/vending_machine/sweets":{icon:"temaki-vending_machine",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:"temaki-veterinary_care",fields:["name","operator","address","building_area","opening_hours"],moreFields:["fee","payment_multi","website","phone","email","fax","wheelchair"],geometry:["point","area"],terms:["pet clinic","veterinarian","animal hospital","pet doctor"],tags:{amenity:"veterinary"},name:"Veterinary"},"amenity/waste_basket":{icon:"maki-waste-basket",fields:["collection_times"],geometry:["point","vertex"],tags:{amenity:"waste_basket"},terms:["bin","garbage","rubbish","litter","trash"],name:"Waste Basket"},"amenity/waste_disposal":{icon:"maki-waste-basket",fields:["operator","collection_times"],geometry:["point","vertex","area"],tags:{amenity:"waste_disposal"},terms:["garbage","rubbish","litter","trash"],name:"Garbage Dumpster"},"amenity/waste_transfer_station":{icon:"maki-waste-basket",fields:["name","operator","address","opening_hours","fee","payment_multi"],moreFields:["website","phone","email","fax","wheelchair"],geometry:["point","area"],terms:["dump","garbage","recycling","rubbish","scrap","trash"],tags:{amenity:"waste_transfer_station"},name:"Waste Transfer Station"},"amenity/waste/dog_excrement":{icon:"maki-waste-basket",fields:["collection_times"],geometry:["point","vertex","area"],tags:{amenity:"waste_basket",waste:"dog_excrement"},reference:{key:"waste",value:"dog_excrement"},terms:["bin","garbage","rubbish","litter","trash","poo","dog"],name:"Dog Excrement Bin"},"amenity/water_point":{icon:"maki-drinking-water",fields:["operator","fee","payment_multi"],geometry:["area","vertex","point"],tags:{amenity:"water_point"},name:"RV Drinking Water"},"amenity/watering_place":{icon:"maki-drinking-water",fields:["operator","fee","payment_multi"],geometry:["area","vertex","point"],tags:{amenity:"watering_place"},name:"Animal Watering Place"},area:{fields:["name"],geometry:["area"],tags:{area:"yes"},name:"Area",matchScore:0.1},"area/highway":{fields:["name","area/highway"],geometry:["area"],tags:{"area:highway":"*"},name:"Road Surface"},"attraction/amusement_ride":{icon:"maki-amusement-park",geometry:["point","area"],terms:["theme park","carnival ride"],tags:{attraction:"amusement_ride"},name:"Amusement Ride"},"attraction/animal":{icon:"maki-zoo",fields:["name","operator"],geometry:["point","area"],terms:["zoo","theme park","animal park","lion","tiger","bear"],tags:{attraction:"animal"},name:"Animal"},"attraction/big_wheel":{icon:"maki-amusement-park",fields:["{attraction}","height"],geometry:["point"],terms:["ferris wheel","theme park","amusement ride"],tags:{attraction:"big_wheel"},name:"Big Wheel"},"attraction/bumper_car":{icon:"maki-car",geometry:["point","area"],terms:["theme park","dodgem cars","autoscooter"],tags:{attraction:"bumper_car"},name:"Bumper Car"},"attraction/bungee_jumping":{icon:"maki-pitch",fields:["{attraction}","height"],geometry:["point","area"],terms:["theme park","bungy jumping","jumping platform"],tags:{attraction:"bungee_jumping"},name:"Bungee Jumping"},"attraction/carousel":{icon:"temaki-amusement_park",fields:["{attraction}","building_area"],geometry:["point","area"],terms:["theme park","roundabout","merry-go-round","galloper","jumper","horseabout","flying horses"],tags:{attraction:"carousel"},name:"Carousel"},"attraction/dark_ride":{icon:"maki-rail-metro",fields:["{attraction}","building_area"],geometry:["point","line","area"],terms:["theme park","ghost train"],tags:{attraction:"dark_ride"},name:"Dark Ride"},"attraction/drop_tower":{icon:"temaki-tower",fields:["{attraction}","height"],geometry:["point","area"],terms:["theme park","amusement ride","gondola","tower","big drop"],tags:{attraction:"drop_tower"},name:"Drop Tower"},"attraction/maze":{icon:"maki-amusement-park",geometry:["point","area"],terms:["theme park","amusement ride","labyrinth"],tags:{attraction:"maze"},name:"Maze"},"attraction/pirate_ship":{icon:"maki-danger",geometry:["point"],terms:["theme park","carnival ride","amusement ride"],tags:{attraction:"pirate_ship"},name:"Pirate Ship"},"attraction/river_rafting":{icon:"maki-ferry",geometry:["point","line"],terms:["theme park","aquatic park","water park","rafting simulator","river rafting ride","river rapids ride"],tags:{attraction:"river_rafting"},name:"River Rafting"},"attraction/roller_coaster":{icon:"maki-amusement-park",geometry:["point","area"],terms:["theme park","amusement ride"],tags:{attraction:"roller_coaster"},name:"Roller Coaster"},"attraction/summer_toboggan":{geometry:["line"],terms:["alpine slide","mountain coaster"],tags:{attraction:"summer_toboggan"},name:"Summer Toboggan"},"attraction/train":{icon:"maki-rail",fields:["{attraction}","fee"],geometry:["point","line"],terms:["theme park","rackless train","road train","Tschu-Tschu train","dotto train","park train"],tags:{attraction:"train"},name:"Tourist Train"},"attraction/water_slide":{icon:"maki-swimming",fields:["{attraction}","height"],geometry:["line","area"],terms:["theme park","aquatic park","water park","flumes","water chutes","hydroslides"],tags:{attraction:"water_slide"},name:"Water Slide"},barrier:{icon:"maki-roadblock",geometry:["point","vertex","line","area"],tags:{barrier:"*"},fields:["barrier"],name:"Barrier",matchScore:0.4},"barrier/entrance":{icon:"maki-entrance-alt1",geometry:["vertex"],tags:{barrier:"entrance"},name:"Entrance",searchable:false},"barrier/block":{icon:"maki-roadblock",fields:["access","material"],geometry:["point","vertex"],tags:{barrier:"block"},name:"Block"},"barrier/bollard":{icon:"maki-roadblock",fields:["access","material"],geometry:["point","vertex","line"],tags:{barrier:"bollard"},name:"Bollard"},"barrier/border_control":{icon:"maki-roadblock",fields:["access","building_area"],moreFields:["address","website","phone","email","fax"],geometry:["vertex","area"],tags:{barrier:"border_control"},name:"Border Control"},"barrier/cattle_grid":{icon:"maki-barrier",geometry:["vertex"],tags:{barrier:"cattle_grid"},name:"Cattle Grid"},"barrier/city_wall":{icon:"temaki-wall",fields:["height","material"],geometry:["line","area"],tags:{barrier:"city_wall"},name:"City Wall"},"barrier/cycle_barrier":{icon:"maki-roadblock",fields:["access"],geometry:["vertex"],tags:{barrier:"cycle_barrier"},name:"Cycle Barrier"},"barrier/ditch":{icon:"maki-roadblock",geometry:["line","area"],tags:{barrier:"ditch"},name:"Trench",matchScore:0.25},"barrier/fence":{icon:"maki-fence",fields:["fence_type","height","material"],geometry:["line"],tags:{barrier:"fence"},name:"Fence",matchScore:0.25},"barrier/fence/railing":{icon:"temaki-railing",geometry:["line"],tags:{barrier:"fence",fence_type:"railing"},terms:["railing","handrail","guard rail"],name:"Railing",matchScore:0.5},"barrier/gate":{icon:"maki-barrier",fields:["access"],geometry:["vertex","line"],tags:{barrier:"gate"},name:"Gate"},"barrier/guard_rail":{icon:"temaki-guard_rail",fields:["material"],geometry:["line"],tags:{barrier:"guard_rail"},name:"Guard Rail",terms:["guardrail","traffic barrier","crash barrier","median barrier","roadside barrier","Armco barrier"],matchScore:0.75},"barrier/hedge":{fields:["height"],geometry:["line","area"],tags:{barrier:"hedge"},name:"Hedge",matchScore:0.25},"barrier/kerb":{fields:["kerb","tactile_paving"],moreFields:["material"],geometry:["vertex","line"],tags:{barrier:"kerb"},name:"Curb"},"barrier/kerb/flush":{icon:"maki-wheelchair",geometry:["vertex","line"],tags:{barrier:"kerb",kerb:"flush"},reference:{key:"kerb",value:"flush"},terms:["even curb","level curb","tactile curb"],name:"Flush Curb"},"barrier/kerb/lowered":{icon:"maki-wheelchair",geometry:["vertex","line"],tags:{barrier:"kerb",kerb:"lowered"},reference:{key:"kerb",value:"lowered"},terms:["curb cut","curb ramp","kerb ramp","dropped kerb","pram ramp"],name:"Lowered Curb"},"barrier/kissing_gate":{icon:"maki-barrier",fields:["access"],geometry:["vertex"],tags:{barrier:"kissing_gate"},name:"Kissing Gate"},"barrier/lift_gate":{icon:"maki-roadblock",fields:["access"],geometry:["vertex","line"],tags:{barrier:"lift_gate"},name:"Lift Gate"},"barrier/retaining_wall":{icon:"temaki-wall",fields:["height","material"],geometry:["line","area"],tags:{barrier:"retaining_wall"},name:"Retaining Wall"},"barrier/stile":{icon:"maki-roadblock",fields:["access"],geometry:["vertex"],tags:{barrier:"stile"},name:"Stile"},"barrier/toll_booth":{icon:"maki-roadblock",fields:["access","building_area","payment_multi","currency_multi"],moreFields:["address","website","phone","email","fax"],geometry:["vertex","area"],tags:{barrier:"toll_booth"},name:"Toll Booth"},"barrier/wall":{icon:"temaki-wall",fields:["wall","height","material"],geometry:["line","area"],tags:{barrier:"wall"},name:"Wall",matchScore:0.25},"boundary/administrative":{name:"Administrative Boundary",geometry:["line"],tags:{boundary:"administrative"},fields:["name","admin_level"]},"bridge/support":{icon:"fas-archway",fields:["bridge/support"],moreFields:["material","seamark/type"],geometry:["point","vertex","area"],tags:{"bridge:support":"*"},name:"Bridge Support"},"bridge/support/pier":{icon:"fas-archway",fields:["bridge/support"],moreFields:["material","seamark/type"],geometry:["point","vertex","area"],tags:{"bridge:support":"pier"},name:"Bridge Pier"},building:{icon:"maki-home",fields:["name","building","levels","height","address"],moreFields:["architect","building/material","roof/colour","smoking","wheelchair"],geometry:["point","area"],tags:{building:"*"},matchScore:0.6,terms:[],name:"Building"},"building/bunker":{geometry:["area"],tags:{building:"bunker"},matchScore:0.5,name:"Bunker",searchable:false},"building/entrance":{icon:"maki-entrance-alt1",fields:[],moreFields:[],geometry:["vertex"],tags:{building:"entrance"},name:"Entrance/Exit",searchable:false},"building/train_station":{icon:"maki-building",geometry:["point","vertex","area"],tags:{building:"train_station"},matchScore:0.5,name:"Train Station",searchable:false},"building/apartments":{icon:"maki-building",geometry:["area"],tags:{building:"apartments"},matchScore:0.5,name:"Apartment Building"},"building/barn":{icon:"maki-farm",geometry:["area"],tags:{building:"barn"},matchScore:0.5,name:"Barn"},"building/boathouse":{icon:"maki-harbor",geometry:["area"],tags:{building:"boathouse"},matchScore:0.5,terms:[],name:"Boathouse"},"building/bungalow":{icon:"maki-home",geometry:["area"],tags:{building:"bungalow"},terms:["home","detached"],matchScore:0.5,name:"Bungalow"},"building/cabin":{icon:"maki-home",geometry:["area"],tags:{building:"cabin"},matchScore:0.5,name:"Cabin"},"building/carport":{icon:"fas-warehouse",fields:["height","capacity"],geometry:["area"],tags:{building:"carport"},matchScore:0.5,terms:["covered parking space","garage","car","porch"],name:"Carport"},"building/cathedral":{icon:"maki-place-of-worship",geometry:["area"],tags:{building:"cathedral"},matchScore:0.5,name:"Cathedral Building"},"building/chapel":{icon:"maki-place-of-worship",geometry:["area"],tags:{building:"chapel"},matchScore:0.5,name:"Chapel Building"},"building/church":{icon:"maki-place-of-worship",geometry:["area"],tags:{building:"church"},matchScore:0.5,name:"Church Building"},"building/civic":{icon:"maki-building",fields:["{building}","smoking"],geometry:["area"],tags:{building:"civic"},matchScore:0.5,name:"Civic Building"},"building/college":{icon:"maki-building",geometry:["area"],terms:["university"],tags:{building:"college"},matchScore:0.5,name:"College Building"},"building/commercial":{icon:"maki-suitcase",fields:["{building}","smoking"],geometry:["area"],tags:{building:"commercial"},matchScore:0.5,name:"Commercial Building"},"building/construction":{icon:"maki-building",geometry:["area"],tags:{building:"construction"},matchScore:0.5,name:"Building Under Construction"},"building/detached":{icon:"maki-home",geometry:["area"],tags:{building:"detached"},terms:["home","single","family","residence","dwelling"],matchScore:0.5,name:"Detached House"},"building/dormitory":{icon:"maki-building",fields:["{building}","smoking"],geometry:["area"],tags:{building:"dormitory"},matchScore:0.5,name:"Dormitory"},"building/farm_auxiliary":{icon:"maki-farm",geometry:["area"],tags:{building:"farm_auxiliary"},matchScore:0.5,name:"Farm Building"},"building/farm":{icon:"maki-farm",geometry:["area"],tags:{building:"farm"},matchScore:0.5,name:"Farm House"},"building/garage":{icon:"fas-warehouse",fields:["name","capacity"],geometry:["area"],tags:{building:"garage"},matchScore:0.5,name:"Garage"},"building/garages":{icon:"fas-warehouse",fields:["name","capacity"],geometry:["area"],tags:{building:"garages"},matchScore:0.5,name:"Garages"},"building/grandstand":{icon:"maki-building",fields:["name","height"],geometry:["area"],tags:{building:"grandstand"},terms:["tribune","stand","stands","bleachers"],matchScore:0.5,name:"Grandstand"},"building/greenhouse":{icon:"maki-garden-centre",geometry:["area"],tags:{building:"greenhouse"},matchScore:0.5,name:"Greenhouse"},"building/hospital":{icon:"maki-building",geometry:["area"],tags:{building:"hospital"},matchScore:0.5,name:"Hospital Building"},"building/hotel":{icon:"maki-building",fields:["{building}","smoking"],geometry:["area"],tags:{building:"hotel"},matchScore:0.5,name:"Hotel Building"},"building/house":{icon:"maki-home",geometry:["area"],tags:{building:"house"},terms:["home","family","residence","dwelling"],matchScore:0.5,name:"House"},"building/hut":{icon:"maki-home",fields:["name"],geometry:["area"],tags:{building:"hut"},matchScore:0.5,name:"Hut"},"building/industrial":{icon:"maki-industry",geometry:["area"],tags:{building:"industrial"},matchScore:0.5,name:"Industrial Building"},"building/kindergarten":{icon:"maki-building",geometry:["area"],terms:["kindergarden","pre-school"],tags:{building:"kindergarten"},matchScore:0.5,name:"Preschool/Kindergarten Building"},"building/mosque":{icon:"maki-place-of-worship",geometry:["area"],tags:{building:"mosque"},matchScore:0.5,name:"Mosque Building"},"building/pavilion":{icon:"maki-building",fields:["{building}","smoking"],geometry:["area"],terms:["sports"],tags:{building:"pavilion"},matchScore:0.5,name:"Pavilion Building"},"building/public":{icon:"maki-building",fields:["{building}","smoking"],geometry:["area"],tags:{building:"public"},matchScore:0.5,name:"Public Building"},"building/residential":{icon:"maki-residential-community",geometry:["area"],tags:{building:"residential"},matchScore:0.5,name:"Residential Building"},"building/retail":{icon:"maki-commercial",fields:["{building}","smoking"],geometry:["area"],tags:{building:"retail"},matchScore:0.5,name:"Retail Building"},"building/roof":{icon:"maki-shelter",fields:["name","address","layer"],geometry:["area"],tags:{building:"roof"},matchScore:0.5,name:"Roof"},"building/ruins":{icon:"temaki-ruins",geometry:["area"],tags:{building:"ruins"},matchScore:0.5,name:"Building Ruins"},"building/school":{icon:"maki-building",geometry:["area"],terms:["academy","elementary school","middle school","high school"],tags:{building:"school"},matchScore:0.5,name:"School Building"},"building/semidetached_house":{icon:"maki-home",geometry:["area"],tags:{building:"semidetached_house"},terms:["home","double","duplex","twin","family","residence","dwelling"],matchScore:0.5,name:"Semi-Detached House"},"building/service":{icon:"maki-home",geometry:["area"],tags:{building:"service"},matchScore:0.5,name:"Service Building"},"building/shed":{icon:"maki-home",geometry:["area"],tags:{building:"shed"},matchScore:0.5,name:"Shed"},"building/stable":{icon:"maki-horse-riding",geometry:["area"],tags:{building:"stable"},matchScore:0.5,name:"Stable"},"building/stadium":{icon:"maki-stadium",fields:["{building}","smoking"],geometry:["area"],tags:{building:"stadium"},matchScore:0.5,name:"Stadium Building"},"building/static_caravan":{icon:"maki-home",geometry:["area"],tags:{building:"static_caravan"},matchScore:0.5,name:"Static Mobile Home"},"building/temple":{icon:"maki-place-of-worship",geometry:["area"],tags:{building:"temple"},matchScore:0.5,name:"Temple Building"},"building/terrace":{icon:"maki-building",geometry:["area"],tags:{building:"terrace"},terms:["home","terrace","brownstone","family","residence","dwelling"],matchScore:0.5,name:"Row Houses"},"building/transportation":{icon:"maki-building",fields:["{building}","smoking"],geometry:["area"],tags:{building:"transportation"},matchScore:0.5,name:"Transportation Building"},"building/university":{icon:"maki-building",geometry:["area"],terms:["college"],tags:{building:"university"},matchScore:0.5,name:"University Building"},"building/warehouse":{icon:"maki-warehouse",geometry:["area"],tags:{building:"warehouse"},matchScore:0.5,name:"Warehouse"},"camp_site/camp_pitch":{icon:"maki-campsite",fields:["name","ref"],geometry:["point","area"],terms:["tent","rv"],tags:{camp_site:"camp_pitch"},name:"Camp Pitch"},club:{icon:"maki-heart",fields:["name","club","operator","address","building_area","opening_hours"],moreFields:["access_simple","website","phone","email","fax","wheelchair"],geometry:["point","area"],tags:{club:"*"},terms:["social"],name:"Club"},"club/sport":{icon:"maki-heart",fields:["name","sport","{club}"],geometry:["point","area"],tags:{club:"sport"},terms:["athletics club","sporting club","sports association","sports society"],name:"Sports Club"},craft:{icon:"temaki-tools",fields:["name","craft","operator","address","building_area","opening_hours"],moreFields:["product","website","phone","email","fax","wheelchair"],geometry:["point","area"],tags:{craft:"*"},terms:[],name:"Craft"},"craft/jeweler":{icon:"maki-marker-stroked",geometry:["point","area"],tags:{craft:"jeweler"},reference:{key:"shop",value:"jewelry"},name:"Jeweler",searchable:false},"craft/locksmith":{icon:"maki-marker-stroked",geometry:["point","area"],tags:{craft:"locksmith"},reference:{key:"shop",value:"locksmith"},name:"Locksmith",searchable:false},"craft/optician":{icon:"maki-marker-stroked",geometry:["point","area"],tags:{craft:"optician"},reference:{key:"shop",value:"optician"},name:"Optician",searchable:false},"craft/tailor":{icon:"maki-clothing-store",geometry:["point","area"],terms:["clothes","suit"],tags:{craft:"tailor"},reference:{key:"shop",value:"tailor"},name:"Tailor",searchable:false},"craft/basket_maker":{icon:"maki-art-gallery",geometry:["point","area"],tags:{craft:"basket_maker"},name:"Basket Maker"},"craft/beekeeper":{icon:"maki-farm",geometry:["point","area"],tags:{craft:"beekeeper"},name:"Beekeeper"},"craft/blacksmith":{icon:"temaki-tools",geometry:["point","area"],tags:{craft:"blacksmith"},name:"Blacksmith"},"craft/boatbuilder":{icon:"temaki-tools",geometry:["point","area"],tags:{craft:"boatbuilder"},matchScore:0.4,name:"Boat Builder"},"craft/bookbinder":{icon:"maki-library",geometry:["point","area"],terms:["book repair"],tags:{craft:"bookbinder"},name:"Bookbinder"},"craft/brewery":{icon:"temaki-storage_tank",fields:["{craft}","product"],geometry:["point","area"],terms:["alcohol","beer","beverage","bier","booze","cider"],tags:{craft:"brewery"},name:"Brewery"},"craft/carpenter":{icon:"temaki-tools",geometry:["point","area"],terms:["woodworker"],tags:{craft:"carpenter"},name:"Carpenter"},"craft/carpet_layer":{icon:"temaki-tools",geometry:["point","area"],tags:{craft:"carpet_layer"},name:"Carpet Layer"},"craft/caterer":{icon:"maki-restaurant",fields:["name","cuisine","{craft}"],geometry:["point","area"],tags:{craft:"caterer"},name:"Caterer"},"craft/chimney_sweeper":{icon:"temaki-chimney",geometry:["point","area"],tags:{craft:"chimney_sweeper"},name:"Chimney Sweeper"},"craft/clockmaker":{icon:"temaki-clock",geometry:["point","area"],tags:{craft:"clockmaker"},name:"Clockmaker"},"craft/confectionery":{icon:"maki-confectionery",geometry:["point","area"],terms:["sweet","candy"],tags:{craft:"confectionery"},name:"Candy Maker"},"craft/distillery":{icon:"temaki-storage_tank",fields:["{craft}","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:"maki-clothing-store",geometry:["point","area"],terms:["seamstress"],tags:{craft:"dressmaker"},name:"Dressmaker"},"craft/electrician":{icon:"temaki-power",geometry:["point","area"],terms:["power","wire"],tags:{craft:"electrician"},name:"Electrician"},"craft/electronics_repair":{icon:"temaki-tools",geometry:["point","area"],tags:{craft:"electronics_repair"},name:"Electronics Repair Shop"},"craft/gardener":{icon:"maki-garden-centre",geometry:["point","area"],terms:["landscaper","grounds keeper"],tags:{craft:"gardener"},name:"Gardener"},"craft/glaziery":{icon:"temaki-window",geometry:["point","area"],terms:["glass","stained-glass","window"],tags:{craft:"glaziery"},name:"Glaziery"},"craft/handicraft":{icon:"maki-art-gallery",geometry:["point","area"],tags:{craft:"handicraft"},name:"Handicraft"},"craft/hvac":{icon:"temaki-tools",geometry:["point","area"],terms:["heat*","vent*","air conditioning"],tags:{craft:"hvac"},name:"HVAC"},"craft/insulator":{icon:"temaki-tools",geometry:["point","area"],tags:{craft:"insulation"},name:"Insulator"},"craft/key_cutter":{icon:"fas-key",geometry:["point","area"],tags:{craft:"key_cutter"},name:"Key Cutter"},"craft/metal_construction":{icon:"temaki-tools",geometry:["point","area"],tags:{craft:"metal_construction"},name:"Metal Construction"},"craft/painter":{icon:"fas-paint-roller",geometry:["point","area"],tags:{craft:"painter"},name:"Painter"},"craft/photographer":{icon:"maki-attraction",geometry:["point","area"],tags:{craft:"photographer"},name:"Photographer"},"craft/photographic_laboratory":{icon:"maki-attraction",geometry:["point","area"],terms:["film"],tags:{craft:"photographic_laboratory"},name:"Photographic Laboratory"},"craft/plasterer":{icon:"temaki-tools",geometry:["point","area"],tags:{craft:"plasterer"},name:"Plasterer"},"craft/plumber":{icon:"temaki-plumber",geometry:["point","area"],terms:["pipe"],tags:{craft:"plumber"},name:"Plumber"},"craft/pottery":{icon:"maki-art-gallery",geometry:["point","area"],terms:["ceramic"],tags:{craft:"pottery"},name:"Pottery"},"craft/rigger":{icon:"temaki-tools",geometry:["point","area"],tags:{craft:"rigger"},name:"Rigger"},"craft/roofer":{icon:"temaki-tools",geometry:["point","area"],tags:{craft:"roofer"},name:"Roofer"},"craft/saddler":{icon:"temaki-tools",geometry:["point","area"],tags:{craft:"saddler"},name:"Saddler"},"craft/sailmaker":{icon:"temaki-tools",geometry:["point","area"],tags:{craft:"sailmaker"},name:"Sailmaker"},"craft/sawmill":{icon:"maki-logging",geometry:["point","area"],terms:["lumber"],tags:{craft:"sawmill"},name:"Sawmill"},"craft/scaffolder":{icon:"temaki-tools",geometry:["point","area"],tags:{craft:"scaffolder"},name:"Scaffolder"},"craft/sculptor":{icon:"maki-art-gallery",geometry:["point","area"],tags:{craft:"sculptor"},name:"Sculptor"},"craft/shoemaker":{icon:"maki-shoe",geometry:["point","area"],terms:["cobbler"],tags:{craft:"shoemaker"},name:"Shoemaker"},"craft/stonemason":{icon:"temaki-tools",geometry:["point","area"],terms:["masonry"],tags:{craft:"stonemason"},name:"Stonemason"},"craft/tiler":{icon:"temaki-tools",geometry:["point","area"],tags:{craft:"tiler"},name:"Tiler"},"craft/tinsmith":{icon:"temaki-tools",geometry:["point","area"],tags:{craft:"tinsmith"},name:"Tinsmith"},"craft/upholsterer":{icon:"temaki-tools",geometry:["point","area"],tags:{craft:"upholsterer"},name:"Upholsterer"},"craft/watchmaker":{icon:"maki-watch",geometry:["point","area"],tags:{craft:"watchmaker"},name:"Watchmaker"},"craft/window_construction":{icon:"temaki-window",geometry:["point","area"],terms:["glass"],tags:{craft:"window_construction"},name:"Window Construction"},"craft/winery":{icon:"maki-alcohol-shop",geometry:["point","area"],tags:{craft:"winery"},name:"Winery"},"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:"fas-ambulance",fields:["name","operator","building_area","address"],moreFields:["website","phone","email","fax","wheelchair"],geometry:["point","area"],terms:["EMS","EMT","rescue"],tags:{emergency:"ambulance_station"},name:"Ambulance Station"},"emergency/defibrillator":{icon:"maki-defibrillator",fields:["indoor","ref","operator"],geometry:["point","vertex"],terms:["AED"],tags:{emergency:"defibrillator"},name:"Defibrillator"},"emergency/fire_alarm":{icon:"fas-bell",fields:["indoor","ref","operator"],geometry:["point","vertex"],tags:{emergency:"fire_alarm_box"},name:"Fire Alarm Call Box"},"emergency/fire_extinguisher":{icon:"fas-fire-extinguisher",fields:["indoor","ref","operator"],geometry:["point","vertex"],tags:{emergency:"fire_extinguisher"},name:"Fire Extinguisher"},"emergency/fire_hydrant":{icon:"temaki-fire_hydrant",fields:["ref","fire_hydrant/type","colour","water_source","couplings"],moreFields:["fire_hydrant/pressure","fire_hydrant/diameter","water_volume","survey/date"],geometry:["point","vertex"],terms:["fire plug","fire water well","hydrant"],tags:{emergency:"fire_hydrant"},name:"Fire Hydrant"},"emergency/first_aid_kit":{icon:"fas-medkit",fields:["indoor","ref","operator"],geometry:["point","vertex"],terms:["bandage","first aid","med","med kit","medic*","medkit"],tags:{emergency:"first_aid_kit"},name:"First Aid Kit"},"emergency/life_ring":{icon:"fas-life-ring",fields:["ref","operator"],geometry:["point","vertex"],terms:["life buoy","kisby ring","kisbie ring","perry buoy"],tags:{emergency:"life_ring"},name:"Life Ring"},"emergency/lifeguard":{icon:"fas-life-ring",fields:["ref","operator","building_area","opening_hours"],geometry:["point","area"],terms:["CPR","rescue"],tags:{emergency:"lifeguard"},name:"Lifeguard"},"emergency/phone":{icon:"maki-emergency-phone",fields:["ref","operator","covered","indoor","booth"],geometry:["point","vertex"],tags:{emergency:"phone"},name:"Emergency Phone"},"emergency/siren":{icon:"fas-volume-up",fields:["siren/purpose","siren/type","ref","operator"],geometry:["point","vertex"],terms:["air raid","loud","noise","storm","tornado","warning"],tags:{emergency:"siren"},name:"Siren"},"emergency/water_tank":{icon:"maki-water",fields:["name","ref","operator"],geometry:["point","vertex"],terms:["water tank","cistern","reservoir"],tags:{emergency:"water_tank"},name:"Emergency Water Tank"},entrance:{icon:"maki-entrance-alt1",geometry:["vertex"],terms:["entrance","exit","door"],tags:{entrance:"*"},fields:["entrance","access_simple","address"],name:"Entrance/Exit"},ford:{geometry:["vertex"],tags:{ford:"yes"},name:"Ford"},"golf/bunker":{icon:"maki-golf",fields:["name"],geometry:["area"],tags:{golf:"bunker",natural:"sand"},terms:["hazard","bunker"],reference:{key:"golf",value:"bunker"},name:"Sand Trap"},"golf/fairway":{icon:"maki-golf",fields:["name"],geometry:["area"],tags:{golf:"fairway",landuse:"grass"},reference:{key:"golf",value:"fairway"},name:"Fairway"},"golf/green":{icon:"maki-golf",fields:["name"],geometry:["area"],tags:{golf:"green",landuse:"grass",leisure:"pitch",sport:"golf"},reference:{key:"golf",value:"green"},name:"Putting Green"},"golf/hole":{icon:"maki-golf",fields:["name","ref_golf_hole","par","handicap"],geometry:["line"],tags:{golf:"hole"},name:"Golf Hole"},"golf/lateral_water_hazard_area":{icon:"maki-golf",fields:["name"],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:"maki-golf",fields:["name"],geometry:["line"],tags:{golf:"lateral_water_hazard"},name:"Lateral Water Hazard"},"golf/rough":{icon:"maki-golf",fields:["name"],geometry:["area"],tags:{golf:"rough",landuse:"grass"},reference:{key:"golf",value:"rough"},name:"Rough"},"golf/tee":{icon:"maki-golf",fields:["name"],geometry:["area"],tags:{golf:"tee",landuse:"grass"},terms:["teeing ground"],reference:{key:"golf",value:"tee"},name:"Tee Box"},"golf/water_hazard_area":{icon:"maki-golf",fields:["name"],geometry:["area"],tags:{golf:"water_hazard",natural:"water"},reference:{key:"golf",value:"water_hazard"},name:"Water Hazard"},"golf/water_hazard_line":{icon:"maki-golf",fields:["name"],geometry:["line"],tags:{golf:"water_hazard"},name:"Water Hazard"},healthcare:{icon:"maki-hospital",fields:["name","healthcare","operator","healthcare/speciality","address","building_area"],moreFields:["opening_hours","payment_multi","brand","website","phone","email","fax","wheelchair"],geometry:["point","area"],tags:{healthcare:"*"},terms:["clinic","doctor","disease","health","institution","sick","surgery","wellness"],name:"Healthcare Facility"},"healthcare/alternative":{icon:"maki-hospital",geometry:["point","area"],terms:["acupuncture","anthroposophical","applied kinesiology","aromatherapy","ayurveda","herbalism","homeopathy","hydrotherapy","hypnosis","naturopathy","osteopathy","reflexology","reiki","shiatsu","traditional","tuina","unani"],tags:{healthcare:"alternative"},name:"Alternative Medicine"},"healthcare/alternative/chiropractic":{icon:"maki-hospital",geometry:["point","area"],terms:["back","pain","spine"],tags:{healthcare:"alternative","healthcare:speciality":"chiropractic"},name:"Chiropractor"},"healthcare/audiologist":{icon:"maki-hospital",geometry:["point","area"],terms:["ear","hearing","sound"],tags:{healthcare:"audiologist"},name:"Audiologist"},"healthcare/birthing_center":{icon:"maki-hospital",geometry:["point","area"],terms:["baby","childbirth","delivery","labour","labor","pregnancy"],tags:{healthcare:"birthing_center"},name:"Birthing Center"},"healthcare/blood_donation":{icon:"maki-blood-bank",fields:["{healthcare}","blood_components"],geometry:["point","area"],terms:["blood bank","blood donation","blood transfusion","apheresis","plasmapheresis","plateletpheresis","stem cell donation"],tags:{healthcare:"blood_donation"},name:"Blood Donor Center"},"healthcare/hospice":{icon:"maki-hospital",geometry:["point","area"],terms:["terminal","illness"],tags:{healthcare:"hospice"},name:"Hospice"},"healthcare/laboratory":{icon:"maki-hospital",fields:["name","operator","website","ref","address","opening_hours"],geometry:["point","area"],terms:["medical_laboratory","medical_lab","blood_check"],tags:{healthcare:"laboratory"},name:"Medical Laboratory"},"healthcare/midwife":{icon:"maki-hospital",geometry:["point","area"],terms:["baby","childbirth","delivery","labour","labor","pregnancy"],tags:{healthcare:"midwife"},name:"Midwife"},"healthcare/occupational_therapist":{icon:"maki-hospital",geometry:["point","area"],terms:["therapist","therapy"],tags:{healthcare:"occupational_therapist"},name:"Occupational Therapist"},"healthcare/optometrist":{icon:"maki-hospital",geometry:["point","area"],terms:["eye","glasses","lasik","lenses","vision"],tags:{healthcare:"optometrist"},name:"Optometrist"},"healthcare/physiotherapist":{icon:"temaki-physiotherapist",geometry:["point","area"],terms:["physical","therapist","therapy"],tags:{healthcare:"physiotherapist"},name:"Physiotherapist"},"healthcare/podiatrist":{icon:"maki-hospital",geometry:["point","area"],terms:["foot","feet","nails"],tags:{healthcare:"podiatrist"},name:"Podiatrist"},"healthcare/psychotherapist":{icon:"maki-hospital",geometry:["point","area"],terms:["anxiety","counselor","depression","mental health","mind","suicide","therapist","therapy"],tags:{healthcare:"psychotherapist"},name:"Psychotherapist"},"healthcare/rehabilitation":{icon:"maki-hospital",geometry:["point","area"],terms:["rehab","therapist","therapy"],tags:{healthcare:"rehabilitation"},name:"Rehabilitation Facility"},"healthcare/speech_therapist":{icon:"maki-hospital",geometry:["point","area"],terms:["speech","therapist","therapy","voice"],tags:{healthcare:"speech_therapist"},name:"Speech Therapist"},"highway/bus_stop":{icon:"maki-bus",fields:["name","network","operator","bench","shelter"],geometry:["point","vertex"],tags:{highway:"bus_stop"},name:"Bus Stop / Platform",searchable:false},"highway/bridleway":{fields:["name","surface","width","structure","access","incline","horse_scale"],moreFields:["wheelchair","lit","smoothness","covered","dog"],icon:"iD-highway-bridleway",geometry:["line"],tags:{highway:"bridleway"},terms:["bridleway","equestrian","horse","trail"],name:"Bridle Path"},"highway/bus_guideway":{icon:"iD-highway-bus-guideway",fields:["name","operator","oneway","structure","covered"],geometry:["line"],tags:{highway:"bus_guideway"},addTags:{highway:"bus_guideway",access:"no",bus:"designated"},removeTags:{highway:"bus_guideway",access:"no",bus:"designated"},terms:[],name:"Bus Guideway"},"highway/construction":{icon:"iD-highway-construction",fields:["name","opening_date","check_date","note","oneway","structure","access"],geometry:["line"],tags:{highway:"construction",access:"no"},terms:["closed","closure","construction"],name:"Road Closed"},"highway/corridor":{icon:"iD-highway-footway",fields:["name","width","level","access_simple","wheelchair"],moreFields:["maxheight"],geometry:["line"],tags:{highway:"corridor"},terms:["gallery","hall","hallway","indoor","passage","passageway"],name:"Indoor Corridor"},"highway/crossing/zebra-raised":{icon:"temaki-pedestrian",fields:["crossing","kerb","tactile_paving"],geometry:["vertex"],tags:{highway:"crossing",crossing:"zebra",traffic_calming:"table"},reference:{key:"traffic_calming",value:"table"},terms:["zebra crossing","marked crossing","crosswalk","flat top","hump","speed","slow"],name:"Marked Crosswalk (Raised)",searchable:false},"highway/crossing/zebra":{icon:"temaki-pedestrian",fields:["crossing","kerb","tactile_paving"],geometry:["vertex"],tags:{highway:"crossing",crossing:"zebra"},reference:{key:"highway",value:"crossing"},terms:["zebra crossing","marked crossing","crosswalk"],name:"Marked Crosswalk",searchable:false},"highway/crossing/marked-raised":{icon:"temaki-pedestrian",fields:["crossing","kerb","tactile_paving"],geometry:["vertex"],tags:{highway:"crossing",crossing:"marked",traffic_calming:"table"},reference:{key:"traffic_calming",value:"table"},terms:["zebra crossing","marked crossing","crosswalk","flat top","hump","speed","slow"],name:"Marked Crosswalk (Raised)"},"highway/crossing/marked":{icon:"temaki-pedestrian",fields:["crossing","kerb","tactile_paving"],geometry:["vertex"],tags:{highway:"crossing",crossing:"marked"},reference:{key:"highway",value:"crossing"},terms:["zebra crossing","marked crossing","crosswalk"],name:"Marked Crosswalk"},"highway/crossing/unmarked-raised":{fields:["crossing","kerb","tactile_paving"],geometry:["vertex"],addTags:{highway:"crossing",crossing:"unmarked",traffic_calming:"table"},removeTags:{highway:"crossing",crossing:"unmarked",traffic_calming:"table"},tags:{highway:"crossing",traffic_calming:"table"},reference:{key:"traffic_calming",value:"table"},terms:["flat top","hump","speed","slow"],name:"Unmarked Crossing (Raised)"},"highway/crossing/unmarked":{fields:["crossing","kerb","tactile_paving"],geometry:["vertex"],addTags:{highway:"crossing",crossing:"unmarked"},removeTags:{highway:"crossing",crossing:"unmarked"},tags:{highway:"crossing"},reference:{key:"highway",value:"crossing"},terms:[],name:"Unmarked Crossing"},"highway/cycleway":{icon:"iD-highway-cycleway",fields:["name","oneway","surface","width","structure","access","incline"],moreFields:["wheelchair","lit","smoothness","maxspeed","covered","dog"],geometry:["line"],tags:{highway:"cycleway"},terms:["bike"],name:"Cycle Path"},"highway/elevator":{icon:"temaki-elevator",fields:["access_simple","opening_hours","maxweight","ref","wheelchair"],moreFields:["maxheight"],geometry:["vertex"],tags:{highway:"elevator"},terms:["lift"],name:"Elevator"},"highway/footway":{icon:"iD-highway-footway",fields:["name","surface","width","structure","access","incline"],moreFields:["wheelchair","lit","smoothness","covered","dog"],geometry:["line"],terms:["hike","hiking","trackway","trail","walk"],tags:{highway:"footway"},name:"Foot Path"},"highway/footway/zebra-raised":{icon:"iD-highway-footway",fields:["crossing","access","surface","kerb","tactile_paving"],geometry:["line"],tags:{highway:"footway",footway:"crossing",crossing:"zebra",traffic_calming:"table"},reference:{key:"traffic_calming",value:"table"},terms:["zebra crossing","marked crossing","crosswalk","flat top","hump","speed","slow"],name:"Marked Crosswalk (Raised)",searchable:false},"highway/footway/zebra":{icon:"iD-highway-footway",fields:["crossing","access","surface","kerb","tactile_paving"],geometry:["line"],tags:{highway:"footway",footway:"crossing",crossing:"zebra"},reference:{key:"footway",value:"crossing"},terms:["zebra crossing","marked crossing","crosswalk"],name:"Marked Crosswalk",searchable:false},"highway/footway/conveying":{icon:"iD-highway-footway",fields:["name","conveying","access_simple","lit","width","wheelchair"],geometry:["line"],terms:["moving sidewalk","autwalk","skywalk","travolator","travelator","travellator","conveyor"],tags:{highway:"footway",conveying:"*"},name:"Moving Walkway"},"highway/footway/marked-raised":{icon:"iD-highway-footway",fields:["crossing","access","surface","kerb","tactile_paving"],geometry:["line"],tags:{highway:"footway",footway:"crossing",crossing:"marked",traffic_calming:"table"},reference:{key:"traffic_calming",value:"table"},terms:["zebra crossing","marked crossing","crosswalk","flat top","hump","speed","slow"],name:"Marked Crosswalk (Raised)"},"highway/footway/marked":{icon:"iD-highway-footway",fields:["crossing","access","surface","kerb","tactile_paving"],geometry:["line"],tags:{highway:"footway",footway:"crossing",crossing:"marked"},reference:{key:"footway",value:"crossing"},terms:["zebra crossing","marked crossing","crosswalk"],name:"Marked Crosswalk"},"highway/footway/sidewalk":{icon:"iD-highway-footway",geometry:["line"],tags:{highway:"footway",footway:"sidewalk"},reference:{key:"footway",value:"sidewalk"},terms:["pavement","sidepath"],name:"Sidewalk"},"highway/footway/unmarked-raised":{fields:["crossing","access","surface","kerb","tactile_paving"],geometry:["line"],addTags:{highway:"footway",footway:"crossing",crossing:"unmarked",traffic_calming:"table"},removeTags:{highway:"footway",footway:"crossing",crossing:"unmarked",traffic_calming:"table"},tags:{highway:"footway",footway:"crossing",traffic_calming:"table"},reference:{key:"traffic_calming",value:"table"},terms:["flat top","hump","speed","slow"],name:"Unmarked Crossing (Raised)"},"highway/footway/unmarked":{fields:["crossing","access","surface","kerb","tactile_paving"],geometry:["line"],addTags:{highway:"footway",footway:"crossing",crossing:"unmarked"},removeTags:{highway:"footway",footway:"crossing",crossing:"unmarked"},tags:{highway:"footway",footway:"crossing"},reference:{key:"footway",value:"crossing"},terms:[],name:"Unmarked Crossing"},"highway/give_way":{icon:"temaki-yield",fields:["direction_vertex"],geometry:["vertex"],tags:{highway:"give_way"},terms:["give way","yield","sign"],name:"Yield Sign"},"highway/living_street":{icon:"iD-highway-living-street",fields:["name","oneway","maxspeed","lanes","surface","structure","access"],moreFields:["cycleway","maxheight","covered","lit","smoothness","oneway/bicycle"],geometry:["line"],tags:{highway:"living_street"},name:"Living Street"},"highway/milestone":{icon:"temaki-milestone",geometry:["point","vertex"],fields:["distance","direction_vertex"],tags:{highway:"milestone"},terms:["milestone","marker"],name:"Highway Milestone"},"highway/mini_roundabout":{icon:"maki-circle-stroked",geometry:["vertex"],tags:{highway:"mini_roundabout"},fields:["direction_clock"],name:"Mini-Roundabout"},"highway/motorway_junction":{icon:"temaki-junction",fields:["ref_highway_junction","name"],geometry:["vertex"],tags:{highway:"motorway_junction"},terms:["exit"],name:"Motorway Junction / Exit"},"highway/motorway_link":{icon:"iD-highway-motorway-link",fields:["destination_oneway","destination/ref_oneway","junction/ref_oneway","oneway","maxspeed","lanes","surface","structure","access"],moreFields:["covered","destination/symbol_oneway","lit","maxheight","maxspeed/advisory","name","ref_road_number","smoothness","toll"],geometry:["line"],tags:{highway:"motorway_link"},addTags:{highway:"motorway_link",oneway:"yes"},removeTags:{highway:"motorway_link",oneway:"yes"},terms:["exit","ramp","road","street","on ramp","off ramp"],name:"Motorway Link"},"highway/motorway":{icon:"iD-highway-motorway",fields:["name","ref_road_number","oneway_yes","maxspeed","lanes","surface","structure","access"],moreFields:["toll","maxheight","covered","lit","smoothness","minspeed"],geometry:["line"],tags:{highway:"motorway"},terms:["autobahn","expressway","freeway","highway","interstate","parkway","road","street","thruway","turnpike"],name:"Motorway"},"highway/passing_place":{icon:"maki-circle-stroked",geometry:["vertex"],tags:{highway:"passing_place"},terms:["turnout, pullout"],name:"Passing Place"},"highway/path":{icon:"iD-highway-path",fields:["name","surface","width","structure","access","incline"],moreFields:["wheelchair","lit","smoothness","trail_visibility","sac_scale","mtb/scale","mtb/scale/uphill","mtb/scale/imba","horse_scale","covered","ref","dog"],geometry:["line"],terms:["hike","hiking","trackway","trail","walk"],tags:{highway:"path"},name:"Path"},"highway/pedestrian_area":{icon:"temaki-pedestrian",fields:["name","surface","lit","width","structure","access"],geometry:["area"],tags:{highway:"pedestrian",area:"yes"},terms:["center","centre","plaza","quad","square","walkway"],name:"Pedestrian Area"},"highway/pedestrian_line":{icon:"iD-highway-footway",fields:["name","surface","lit","width","oneway","structure","access"],moreFields:["covered","smoothness"],geometry:["line"],tags:{highway:"pedestrian"},terms:["center","centre","plaza","quad","square","walkway"],name:"Pedestrian Street"},"highway/primary_link":{icon:"iD-highway-primary-link",fields:["destination_oneway","destination/ref_oneway","oneway","maxspeed","lanes","surface","structure","access"],moreFields:["covered","cycleway","destination/symbol_oneway","junction/ref_oneway","lit","maxheight","maxspeed/advisory","name","oneway/bicycle","ref_road_number","smoothness","toll"],geometry:["line"],tags:{highway:"primary_link"},terms:["on ramp","off ramp","ramp","road","street"],name:"Primary Link"},"highway/primary":{icon:"iD-highway-primary",fields:["name","oneway","maxspeed","lanes","surface","structure","ref_road_number","access"],moreFields:["covered","cycleway","lit","maxheight","maxspeed/advisory","oneway/bicycle","smoothness","toll"],geometry:["line"],tags:{highway:"primary"},terms:["road","street"],name:"Primary Road"},"highway/raceway":{icon:"iD-highway-unclassified",fields:["name","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:"iD-highway-residential",fields:["name","oneway","maxspeed","lanes","surface","structure","access"],moreFields:["covered","cycleway","lit","oneway/bicycle","maxheight","maxspeed/advisory","smoothness"],geometry:["line"],tags:{highway:"residential"},terms:["road","street"],name:"Residential Road"},"highway/rest_area":{icon:"maki-car",fields:["name","operator","opening_hours"],moreFields:["address","website","phone","email","fax","wheelchair"],geometry:["point","vertex","area"],tags:{highway:"rest_area"},terms:["rest stop"],name:"Rest Area"},"highway/road":{icon:"iD-highway-road",fields:["{highway/residential}"],moreFields:["{highway/residential}"],geometry:["line"],tags:{highway:"road"},terms:["road","street"],name:"Unknown Road"},"highway/secondary_link":{icon:"iD-highway-secondary-link",fields:["{highway/primary_link}"],moreFields:["{highway/primary_link}"],geometry:["line"],tags:{highway:"secondary_link"},terms:["on ramp","off ramp","ramp","road","street"],name:"Secondary Link"},"highway/secondary":{icon:"iD-highway-secondary",fields:["{highway/primary}"],moreFields:["{highway/primary}"],geometry:["line"],tags:{highway:"secondary"},terms:["road","street"],name:"Secondary Road"},"highway/service":{icon:"iD-highway-service",fields:["name","service","oneway","maxspeed","surface","structure","access"],moreFields:["covered","lanes","lit","maxheight","maxspeed/advisory","oneway/bicycle"],geometry:["line"],tags:{highway:"service"},terms:["road","street"],name:"Service Road"},"highway/service/alley":{icon:"iD-highway-service",geometry:["line"],tags:{highway:"service",service:"alley"},reference:{key:"service",value:"alley"},name:"Alley"},"highway/service/drive-through":{icon:"iD-highway-service",fields:["{highway/service}","covered"],geometry:["line"],tags:{highway:"service",service:"drive-through"},reference:{key:"service",value:"drive-through"},name:"Drive-Through"},"highway/service/driveway":{icon:"iD-highway-service",geometry:["line"],tags:{highway:"service",service:"driveway"},reference:{key:"service",value:"driveway"},name:"Driveway"},"highway/service/emergency_access":{icon:"iD-highway-service",geometry:["line"],tags:{highway:"service",service:"emergency_access"},reference:{key:"service",value:"emergency_access"},name:"Emergency Access"},"highway/service/parking_aisle":{icon:"iD-highway-service",geometry:["line"],tags:{highway:"service",service:"parking_aisle"},reference:{key:"service",value:"parking_aisle"},name:"Parking Aisle"},"highway/services":{icon:"maki-car",fields:["{highway/rest_area}"],moreFields:["{highway/rest_area}"],geometry:["point","vertex","area"],tags:{highway:"services"},terms:["services","travel plaza","service station"],name:"Service Area"},"highway/speed_camera":{icon:"maki-attraction",geometry:["point","vertex"],fields:["direction","ref","maxspeed"],tags:{highway:"speed_camera"},terms:[],name:"Speed Camera"},"highway/steps":{icon:"iD-highway-steps",fields:["surface","lit","width","incline_steps","handrail","step_count"],geometry:["line"],tags:{highway:"steps"},terms:["stairs","staircase"],name:"Steps"},"highway/steps/conveying":{icon:"maki-entrance",fields:["name","incline_steps","conveying","access_simple","lit","width","handrail","step_count"],geometry:["line"],terms:["moving staircase","moving stairway","people mover"],tags:{highway:"steps",conveying:"*"},name:"Escalator"},"highway/stop":{icon:"temaki-stop",fields:["stop","direction_vertex"],geometry:["vertex"],tags:{highway:"stop"},terms:["stop","halt","sign"],name:"Stop Sign"},"highway/street_lamp":{icon:"temaki-bulb",geometry:["point","vertex"],tags:{highway:"street_lamp"},fields:["lamp_type","direction","ref"],terms:["streetlight","street light","lamp","light","gaslight"],name:"Street Lamp"},"highway/tertiary_link":{icon:"iD-highway-tertiary-link",fields:["{highway/primary_link}"],moreFields:["{highway/primary_link}"],geometry:["line"],tags:{highway:"tertiary_link"},terms:["on ramp","off ramp","ramp","road","street"],name:"Tertiary Link"},"highway/tertiary":{icon:"iD-highway-tertiary",fields:["{highway/primary}"],moreFields:["{highway/primary}"],geometry:["line"],tags:{highway:"tertiary"},terms:["road","street"],name:"Tertiary Road"},"highway/track":{icon:"iD-highway-track",fields:["name","tracktype","surface","width","structure","access","incline","smoothness"],moreFields:["mtb/scale","mtb/scale/uphill","mtb/scale/imba","horse_scale","covered"],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","vertex"],fields:["direction"],tags:{highway:"traffic_mirror"},terms:["blind spot","convex","corner","curved","roadside","round","safety","sphere","visibility"],name:"Traffic Mirror"},"highway/traffic_signals":{icon:"temaki-traffic_signals",geometry:["vertex"],tags:{highway:"traffic_signals"},fields:["traffic_signals","traffic_signals/direction"],terms:["light","stoplight","traffic light"],name:"Traffic Signals"},"highway/trunk_link":{icon:"iD-highway-trunk-link",fields:["{highway/motorway_link}"],moreFields:["{highway/motorway_link}"],geometry:["line"],tags:{highway:"trunk_link"},terms:["on ramp","off ramp","ramp","road","street"],name:"Trunk Link"},"highway/trunk":{icon:"iD-highway-trunk",fields:["name","ref_road_number","oneway","maxspeed","lanes","surface","structure","access"],moreFields:["toll","maxheight","covered","lit","smoothness","minspeed"],geometry:["line"],tags:{highway:"trunk"},terms:["road","street"],name:"Trunk Road"},"highway/turning_circle":{icon:"maki-circle-stroked",geometry:["vertex"],tags:{highway:"turning_circle"},terms:["cul-de-sac"],name:"Turning Circle"},"highway/turning_loop":{icon:"maki-circle",geometry:["vertex"],tags:{highway:"turning_loop"},terms:["cul-de-sac"],name:"Turning Loop (Island)"},"highway/unclassified":{icon:"iD-highway-unclassified",fields:["{highway/residential}"],moreFields:["{highway/residential}"],geometry:["line"],tags:{highway:"unclassified"},terms:["road","street"],name:"Minor/Unclassified Road"},historic:{icon:"temaki-ruins",fields:["historic","inscription"],geometry:["point","vertex","area"],tags:{historic:"*"},name:"Historic Site"},"historic/archaeological_site":{icon:"temaki-ruins",fields:["name","site_type","historic/civilization","inscription","access_simple"],geometry:["point","vertex","area"],tags:{historic:"archaeological_site"},name:"Archaeological Site"},"historic/boundary_stone":{icon:"temaki-milestone",fields:["name","inscription"],moreFields:["material"],geometry:["point","vertex"],tags:{historic:"boundary_stone"},name:"Boundary Stone"},"historic/castle":{icon:"maki-castle",fields:["name","castle_type","building_area","historic/civilization","access_simple"],geometry:["point","area"],tags:{historic:"castle"},name:"Castle"},"historic/memorial":{icon:"maki-monument",fields:["name","memorial","inscription"],moreFields:["material","website"],geometry:["point","vertex","area"],terms:["dedicatory","epitaph","remember","remembrance","memory","monument","stolperstein"],tags:{historic:"memorial"},name:"Memorial"},"historic/monument":{icon:"maki-monument",fields:["name","inscription","access_simple"],moreFields:["material"],geometry:["point","vertex","area"],tags:{historic:"monument"},name:"Monument"},"historic/ruins":{icon:"temaki-ruins",fields:["name","historic/civilization","inscription","access_simple"],geometry:["point","vertex","area"],tags:{historic:"ruins"},name:"Ruins"},"historic/tomb":{icon:"maki-cemetery",fields:["name","tomb","building_area","inscription","access_simple"],geometry:["point","area"],tags:{historic:"tomb"},name:"Tomb"},"historic/wayside_cross":{icon:"maki-religious-christian",fields:["name","inscription"],moreFields:["material"],geometry:["point","vertex","area"],tags:{historic:"wayside_cross"},name:"Wayside Cross"},"historic/wayside_shrine":{icon:"maki-landmark",fields:["name","religion","denomination","inscription","access_simple"],geometry:["point","vertex","area"],tags:{historic:"wayside_shrine"},name:"Wayside Shrine"},"historic/wreck":{icon:"temaki-ruins",fields:["name","access_simple","seamark/wreck/category","historic/wreck/date_sunk","historic/wreck/visible_at_low_tide","historic/wreck/visible_at_high_tide"],moreFields:["seamark/type"],geometry:["point","area"],tags:{historic:"wreck"},addTags:{historic:"wreck","seamark:type":"wreck"},removeTags:{historic:"wreck","seamark:type":"wreck"},terms:["hull","mast","maritime","remains","ship","boat"],name:"Shipwreck"},"internet_access/wlan":{icon:"fas-wifi",geometry:["point","area"],fields:["internet_access/fee","internet_access/ssid"],terms:["wi-fi","wifi","hotspot"],tags:{internet_access:"wlan"},matchScore:0.25,name:"Wi-Fi Hotspot"},junction:{icon:"temaki-junction",fields:["name"],geometry:["vertex","area"],tags:{junction:"yes"},name:"Junction"},landuse:{fields:["name","landuse"],geometry:["area"],tags:{landuse:"*"},matchScore:0.9,name:"Land Use"},"landuse/basin":{icon:"maki-water",fields:["name","basin","intermittent_yes"],geometry:["area"],tags:{landuse:"basin"},name:"Basin",searchable:false},"landuse/farm":{icon:"maki-farm",fields:["name","operator","crop"],geometry:["point","area"],tags:{landuse:"farm"},name:"Farmland",searchable:false},"landuse/pond":{icon:"maki-water",fields:["name","intermittent"],geometry:["area"],tags:{landuse:"pond"},name:"Pond",searchable:false},"landuse/reservoir":{icon:"maki-water",fields:["name","intermittent"],geometry:["area"],tags:{landuse:"reservoir"},name:"Reservoir",searchable:false},"landuse/allotments":{icon:"maki-garden-centre",geometry:["area"],fields:["name"],moreFields:["address","website","phone","email","fax"],tags:{landuse:"allotments"},terms:["allotment","garden"],name:"Community Garden"},"landuse/aquaculture":{icon:"maki-aquarium",fields:["name","operator","produce"],moreFields:["address","website","phone","email","fax"],geometry:["area"],tags:{landuse:"aquaculture"},terms:["fish farm","crustacean","algae","aquafarming","shrimp farm","oyster farm","mariculture","algaculture"],name:"Aquaculture"},"landuse/brownfield":{geometry:["area"],fields:["name"],tags:{landuse:"brownfield"},terms:[],matchScore:0.9,name:"Brownfield"},"landuse/cemetery":{icon:"maki-cemetery",fields:["name","religion","denomination"],moreFields:["address","website","phone","email","fax"],geometry:["area"],tags:{landuse:"cemetery"},terms:[],name:"Cemetery"},"landuse/churchyard":{icon:"maki-religious-christian",fields:["name","religion","denomination"],moreFields:["address","website","phone","email","fax"],geometry:["area"],tags:{landuse:"churchyard"},terms:[],name:"Churchyard"},"landuse/commercial":{icon:"maki-suitcase",fields:["name"],moreFields:["address","website","phone","email","fax"],geometry:["area"],tags:{landuse:"commercial"},terms:[],matchScore:0.9,name:"Commercial Area"},"landuse/construction":{icon:"temaki-tools",fields:["name","construction","operator"],moreFields:["address","website","phone","email","fax"],geometry:["area"],tags:{landuse:"construction"},terms:[],name:"Construction"},"landuse/farmland":{icon:"maki-farm",fields:["name","operator","crop","produce"],moreFields:["address","website","phone","email","fax"],geometry:["area"],tags:{landuse:"farmland"},terms:["crop","grow","plant"],name:"Farmland"},"landuse/farmyard":{icon:"maki-farm",fields:["name","operator","crop"],moreFields:["address","website","phone","email","fax"],geometry:["area"],tags:{landuse:"farmyard"},terms:["crop","grow","plant"],name:"Farmyard"},"landuse/forest":{icon:"maki-park-alt1",fields:["name","leaf_type","leaf_cycle","produce"],moreFields:["address","website","phone","email","fax"],geometry:["area"],tags:{landuse:"forest"},terms:["cut","forest","forestry","lumber","silviculture","tree"],name:"Managed Forest"},"landuse/garages":{icon:"fas-warehouse",geometry:["area"],fields:["name"],moreFields:["address","website","phone","email","fax"],tags:{landuse:"garages"},terms:[],name:"Garage Landuse"},"landuse/grass":{geometry:["area"],tags:{landuse:"grass"},terms:[],name:"Grass"},"landuse/greenfield":{geometry:["area"],fields:["name"],tags:{landuse:"greenfield"},terms:[],matchScore:0.9,name:"Greenfield"},"landuse/greenhouse_horticulture":{icon:"maki-garden",fields:["name","operator"],moreFields:["address","website","phone","email","fax"],geometry:["area"],terms:["flower","greenhouse","horticulture","grow","vivero"],tags:{landuse:"greenhouse_horticulture"},matchScore:0.9,name:"Greenhouse Horticulture"},"landuse/harbour":{icon:"maki-harbor",fields:["name","operator"],moreFields:["address","website","phone","email","fax"],geometry:["area"],terms:["boat"],tags:{landuse:"harbour"},name:"Harbor"},"landuse/industrial":{icon:"maki-industry",fields:["name","industrial"],moreFields:["address","website","phone","email","fax"],geometry:["area"],tags:{landuse:"industrial"},terms:[],matchScore:0.9,name:"Industrial Area"},"landuse/industrial/scrap_yard":{icon:"maki-car",fields:["name","operator","address","opening_hours"],geometry:["point","area"],tags:{industrial:"scrap_yard"},addTags:{landuse:"industrial",industrial:"scrap_yard"},removeTags:{landuse:"industrial",industrial:"scrap_yard"},reference:{key:"industrial",value:"scrap_yard"},terms:["car","junk","metal","salvage","scrap","u-pull-it","vehicle","wreck","yard"],name:"Scrap Yard"},"landuse/industrial/slaughterhouse":{icon:"maki-slaughterhouse",fields:["name","operator","address","building_area","opening_hours"],geometry:["point","area"],tags:{industrial:"slaughterhouse"},addTags:{landuse:"industrial",industrial:"slaughterhouse"},removeTags:{landuse:"industrial",industrial:"slaughterhouse"},reference:{key:"industrial",value:"slaughterhouse"},terms:["abattoir","beef","butchery","calf","chicken","cow","killing house","meat","pig","pork","poultry","shambles","stockyard"],name:"Slaughterhouse"},"landuse/landfill":{geometry:["area"],fields:["name"],moreFields:["address","website","phone","email","fax"],tags:{landuse:"landfill"},terms:["dump"],name:"Landfill"},"landuse/meadow":{icon:"maki-garden",geometry:["area"],fields:["name"],tags:{landuse:"meadow"},terms:[],name:"Meadow"},"landuse/military":{icon:"temaki-military",fields:["name"],moreFields:["address","website","phone","email","fax"],geometry:["area"],tags:{landuse:"military"},terms:[],matchScore:0.9,name:"Military Area"},"landuse/military/airfield":{icon:"maki-airfield",fields:["name","iata","icao"],geometry:["point","area"],tags:{military:"airfield"},addTags:{aeroway:"aerodrome",landuse:"military",military:"airfield"},removeTags:{aeroway:"aerodrome",landuse:"military",military:"airfield"},reference:{key:"military",value:"airfield"},terms:["aerodrome","aeroway","air force","airplane","airport","army","base","bomb","fight","force","guard","heli*","jet","marine","navy","plane","troop","war"],name:"Military Airfield"},"landuse/military/barracks":{icon:"temaki-military",fields:["name","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:"temaki-military",fields:["name","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:"maki-barrier",fields:["name"],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:"maki-danger",fields:["name"],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:"temaki-military",fields:["name"],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:"maki-danger",fields:["name"],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:"temaki-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:"temaki-military",fields:["name","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:"temaki-military",fields:["name"],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:"temaki-military",fields:["name"],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:"maki-park-alt1",fields:["name","operator","trees"],moreFields:["address","website","phone","email","fax"],geometry:["area"],tags:{landuse:"orchard"},terms:["fruit"],name:"Orchard"},"landuse/plant_nursery":{icon:"maki-garden",fields:["name","operator","plant"],moreFields:["address","website","phone","email","fax"],geometry:["area"],tags:{landuse:"plant_nursery"},terms:["flower","garden","grow","vivero"],name:"Plant Nursery"},"landuse/quarry":{geometry:["area"],fields:["name"],moreFields:["address","website","phone","email","fax"],tags:{landuse:"quarry"},terms:[],name:"Quarry"},"landuse/railway":{icon:"maki-rail",fields:["operator"],geometry:["area"],tags:{landuse:"railway"},terms:["rail","train","track"],name:"Railway Corridor"},"landuse/recreation_ground":{icon:"maki-pitch",geometry:["area"],fields:["name"],moreFields:["address","website","phone","email","fax"],tags:{landuse:"recreation_ground"},terms:["playing fields"],name:"Recreation Ground"},"landuse/religious":{icon:"maki-place-of-worship",geometry:["area"],fields:["name","religion","denomination"],moreFields:["address","website","phone","email","fax"],tags:{landuse:"religious"},terms:[],name:"Religious Area"},"landuse/residential":{icon:"maki-building",geometry:["area"],tags:{landuse:"residential"},terms:[],matchScore:0.9,name:"Residential Area"},"landuse/residential/apartments":{icon:"maki-building",fields:["name","operator","address"],geometry:["point","area"],tags:{residential:"apartments"},addTags:{landuse:"residential",residential:"apartments"},removeTags:{landuse:"residential",residential:"apartments"},reference:{key:"residential",value:"apartments"},terms:["flat","residence","tenement"],name:"Apartment Complex"},"landuse/retail":{icon:"maki-commercial",geometry:["area"],fields:["name"],moreFields:["address","website","phone","email","fax"],tags:{landuse:"retail"},matchScore:0.9,name:"Retail Area"},"landuse/vineyard":{fields:["name","operator","grape_variety"],moreFields:["address","website","phone","email","fax"],geometry:["area"],tags:{landuse:"vineyard"},addTags:{landuse:"vineyard",crop:"grape"},removeTags:{landuse:"vineyard",crop:"grape",grape_variety:"*"},terms:["grape","wine"],name:"Vineyard"},leisure:{icon:"maki-pitch",fields:["name","leisure"],geometry:["point","vertex","area"],tags:{leisure:"*"},name:"Leisure"},"leisure/adult_gaming_centre":{icon:"temaki-casino",fields:["{amenity/casino}"],moreFields:["{amenity/casino}"],geometry:["point","area"],terms:["gambling","slot machine"],tags:{leisure:"adult_gaming_centre"},name:"Adult Gaming Center"},"leisure/amusement_arcade":{icon:"maki-gaming",fields:["name","operator","address","building_area"],moreFields:["opening_hours","payment_multi","smoking","website","phone","email","fax"],geometry:["point","area"],terms:["pay-to-play games","video games","driving simulators","pinball machines"],tags:{leisure:"amusement_arcade"},name:"Amusement Arcade"},"leisure/bandstand":{icon:"maki-music",fields:["name","building_area","operator"],moreFields:["website"],geometry:["point","area"],tags:{leisure:"bandstand"},name:"Bandstand"},"leisure/beach_resort":{icon:"maki-beach",fields:["name","address","fee"],moreFields:["opening_hours","payment_multi","smoking","website","phone","email","fax"],geometry:["point","area"],tags:{leisure:"beach_resort"},name:"Beach Resort"},"leisure/bird_hide":{icon:"temaki-binoculars",fields:["name","building_area","address","opening_hours"],moreFields:["website"],geometry:["point","area"],tags:{leisure:"bird_hide"},terms:["machan","ornithology"],name:"Bird Hide"},"leisure/bleachers":{geometry:["point","area"],tags:{leisure:"bleachers"},terms:["crowd","bench","sports","stand","stands","seat","seating"],name:"Bleachers"},"leisure/bowling_alley":{icon:"temaki-bowling",fields:["name","operator","address","building_area"],moreFields:["opening_hours","payment_multi","smoking","website","phone","email","fax"],geometry:["point","area"],terms:["bowling center"],tags:{leisure:"bowling_alley"},name:"Bowling Alley"},"leisure/common":{icon:"temaki-pedestrian",fields:["name"],moreFields:["website"],geometry:["point","area"],terms:["open space"],tags:{leisure:"common"},name:"Common"},"leisure/dance":{icon:"maki-music",fields:["name","operator","address","building_area","dance/style"],moreFields:["opening_hours","payment_multi","website","phone","email","fax"],geometry:["point","area"],terms:["ballroom","jive","swing","tango","waltz"],tags:{leisure:"dance"},name:"Dance Hall"},"leisure/dancing_school":{icon:"maki-music",fields:["name","operator","address","building_area","dance/style"],moreFields:["opening_hours","payment_multi","website","phone","email","fax"],geometry:["point","area"],terms:["jive","swing","tango","waltz","dance teaching"],tags:{leisure:"dance","dance:teaching":"yes"},reference:{key:"leisure",value:"dance"},name:"Dance School"},"leisure/dog_park":{icon:"maki-dog-park",fields:["name"],moreFields:["website","phone","email","fax"],geometry:["point","area"],terms:[],tags:{leisure:"dog_park"},name:"Dog Park"},"leisure/firepit":{icon:"maki-fire-station",fields:["access_simple"],geometry:["point","area"],tags:{leisure:"firepit"},terms:["fireplace","campfire"],name:"Firepit"},"leisure/fishing":{icon:"fas-fish",fields:["name","access_simple"],geometry:["point","area"],tags:{leisure:"fishing"},terms:["angler"],name:"Fishing Spot"},"leisure/fitness_centre":{icon:"fas-dumbbell",fields:["name","sport","address","building_area"],moreFields:["opening_hours","fee","payment_multi","website","phone","email","fax"],geometry:["point","area"],tags:{leisure:"fitness_centre"},terms:["health","gym","leisure","studio"],name:"Gym / Fitness Center"},"leisure/fitness_centre/yoga":{icon:"maki-pitch",geometry:["point","area"],terms:["studio","asanas","modern yoga","meditation"],tags:{leisure:"fitness_centre",sport:"yoga"},reference:{key:"sport",value:"yoga"},name:"Yoga Studio"},"leisure/fitness_station":{icon:"maki-pitch",fields:["fitness_station","ref"],moreFields:["opening_hours"],geometry:["point","area"],tags:{leisure:"fitness_station"},addTags:{leisure:"fitness_station",sport:"fitness"},removeTags:{leisure:"fitness_station",sport:"fitness"},reference:{key:"leisure",value:"fitness_station"},terms:["exercise","fitness","gym","trim trail"],name:"Outdoor Fitness Station"},"leisure/fitness_station/balance_beam":{icon:"maki-pitch",geometry:["point","area"],tags:{leisure:"fitness_station",fitness_station:"balance_beam"},addTags:{leisure:"fitness_station",fitness_station:"balance_beam",sport:"fitness"},removeTags:{leisure:"fitness_station",fitness_station:"balance_beam",sport:"fitness"},reference:{key:"leisure",value:"fitness_station"},terms:["balance","exercise","fitness","gym","trim trail"],name:"Exercise Balance Beam"},"leisure/fitness_station/box":{icon:"maki-pitch",geometry:["point","area"],tags:{leisure:"fitness_station",fitness_station:"box"},addTags:{leisure:"fitness_station",fitness_station:"box",sport:"fitness"},removeTags:{leisure:"fitness_station",fitness_station:"box",sport:"fitness"},reference:{key:"leisure",value:"fitness_station"},terms:["box","exercise","fitness","gym","jump","trim trail"],name:"Exercise Box"},"leisure/fitness_station/horizontal_bar":{icon:"maki-pitch",geometry:["point","area"],tags:{leisure:"fitness_station",fitness_station:"horizontal_bar"},addTags:{leisure:"fitness_station",fitness_station:"horizontal_bar",sport:"fitness"},removeTags:{leisure:"fitness_station",fitness_station:"horizontal_bar",sport:"fitness"},reference:{key:"leisure",value:"fitness_station"},terms:["bar","chinup","chin up","exercise","fitness","gym","pullup","pull up","trim trail"],name:"Exercise Horizontal Bar"},"leisure/fitness_station/horizontal_ladder":{icon:"maki-pitch",geometry:["point","area"],tags:{leisure:"fitness_station",fitness_station:"horizontal_ladder"},addTags:{leisure:"fitness_station",fitness_station:"horizontal_ladder",sport:"fitness"},removeTags:{leisure:"fitness_station",fitness_station:"horizontal_ladder",sport:"fitness"},reference:{key:"leisure",value:"fitness_station"},terms:["bar","chinup","chin up","exercise","fitness","gym","ladder","monkey bars","pullup","pull up","trim trail"],name:"Exercise Monkey Bars"},"leisure/fitness_station/hyperextension":{icon:"maki-pitch",geometry:["point","area"],tags:{leisure:"fitness_station",fitness_station:"hyperextension"},addTags:{leisure:"fitness_station",fitness_station:"hyperextension",sport:"fitness"},removeTags:{leisure:"fitness_station",fitness_station:"hyperextension",sport:"fitness"},reference:{key:"leisure",value:"fitness_station"},terms:["back","exercise","extension","fitness","gym","roman chair","trim trail"],name:"Hyperextension Station"},"leisure/fitness_station/parallel_bars":{icon:"maki-pitch",geometry:["point","area"],tags:{leisure:"fitness_station",fitness_station:"parallel_bars"},addTags:{leisure:"fitness_station",fitness_station:"parallel_bars",sport:"fitness"},removeTags:{leisure:"fitness_station",fitness_station:"parallel_bars",sport:"fitness"},reference:{key:"leisure",value:"fitness_station"},terms:["bar","dip","exercise","fitness","gym","trim trail"],name:"Parallel Bars"},"leisure/fitness_station/push-up":{icon:"maki-pitch",geometry:["point","area"],tags:{leisure:"fitness_station",fitness_station:"push-up"},addTags:{leisure:"fitness_station",fitness_station:"push-up",sport:"fitness"},removeTags:{leisure:"fitness_station",fitness_station:"push-up",sport:"fitness"},reference:{key:"leisure",value:"fitness_station"},terms:["bar","exercise","fitness","gym","pushup","push up","trim trail"],name:"Push-Up Station"},"leisure/fitness_station/rings":{icon:"maki-pitch",geometry:["point","area"],tags:{leisure:"fitness_station",fitness_station:"rings"},addTags:{leisure:"fitness_station",fitness_station:"rings",sport:"fitness"},removeTags:{leisure:"fitness_station",fitness_station:"rings",sport:"fitness"},reference:{key:"leisure",value:"fitness_station"},terms:["exercise","fitness","gym","muscle up","pullup","pull up","trim trail"],name:"Exercise Rings"},"leisure/fitness_station/sign":{icon:"maki-pitch",geometry:["point","area"],tags:{leisure:"fitness_station",fitness_station:"sign"},addTags:{leisure:"fitness_station",fitness_station:"sign",sport:"fitness"},removeTags:{leisure:"fitness_station",fitness_station:"sign",sport:"fitness"},reference:{key:"leisure",value:"fitness_station"},terms:["exercise","fitness","gym","trim trail"],name:"Exercise Instruction Sign"},"leisure/fitness_station/sit-up":{icon:"maki-pitch",geometry:["point","area"],tags:{leisure:"fitness_station",fitness_station:"sit-up"},addTags:{leisure:"fitness_station",fitness_station:"sit-up",sport:"fitness"},removeTags:{leisure:"fitness_station",fitness_station:"sit-up",sport:"fitness"},reference:{key:"leisure",value:"fitness_station"},terms:["crunch","exercise","fitness","gym","situp","sit up","trim trail"],name:"Sit-Up Station"},"leisure/fitness_station/stairs":{icon:"maki-pitch",geometry:["point","area"],tags:{leisure:"fitness_station",fitness_station:"stairs"},addTags:{leisure:"fitness_station",fitness_station:"stairs",sport:"fitness"},removeTags:{leisure:"fitness_station",fitness_station:"stairs",sport:"fitness"},reference:{key:"leisure",value:"fitness_station"},terms:["exercise","fitness","gym","steps","trim trail"],name:"Exercise Stairs"},"leisure/garden":{icon:"maki-garden",fields:["name","operator","access_simple"],moreFields:["fee","payment_multi","website","phone","email","fax"],geometry:["point","vertex","area"],tags:{leisure:"garden"},name:"Garden"},"leisure/golf_course":{icon:"maki-golf",fields:["name","operator","address","opening_hours"],moreFields:["payment_multi","website","phone","email","fax"],geometry:["point","area"],terms:["links"],tags:{leisure:"golf_course"},name:"Golf Course"},"leisure/hackerspace":{icon:"maki-commercial",fields:["name","address","building_area","opening_hours","website"],moreFields:["payment_multi","internet_access","internet_access/fee","internet_access/ssid","smoking","phone","email","fax"],geometry:["point","area"],terms:["makerspace","hackspace","hacklab"],tags:{leisure:"hackerspace"},name:"Hackerspace"},"leisure/horse_riding":{icon:"maki-horse-riding",fields:["name","access_simple","operator","address","building"],moreFields:["opening_hours","payment_multi","website","phone","email","fax"],geometry:["point","area"],terms:["equestrian","stable"],tags:{leisure:"horse_riding"},name:"Horseback Riding Facility"},"leisure/ice_rink":{icon:"fas-skating",fields:["name","seasonal","sport_ice","operator","address","building"],moreFields:["opening_hours","payment_multi","website","phone","email","fax"],geometry:["point","area"],terms:["hockey","skating","curling"],tags:{leisure:"ice_rink"},name:"Ice Rink"},"leisure/marina":{icon:"maki-harbor",fields:["name","operator","capacity","fee","sanitary_dump_station","power_supply"],moreFields:["address","payment_multi","internet_access","internet_access/fee","internet_access/ssid","seamark/type","website","phone","email","fax"],geometry:["point","vertex","area"],terms:["boat"],tags:{leisure:"marina"},name:"Marina"},"leisure/miniature_golf":{icon:"maki-golf",fields:["name","operator","address","opening_hours"],moreFields:["fee","payment_multi","website","phone","email","fax"],geometry:["point","area"],terms:["crazy golf","mini golf","putt-putt"],tags:{leisure:"miniature_golf"},name:"Miniature Golf"},"leisure/nature_reserve":{icon:"maki-park",geometry:["point","area"],fields:["name","operator","address","opening_hours"],moreFields:["dog","website","phone","email","fax"],tags:{leisure:"nature_reserve"},terms:["protected","wildlife"],name:"Nature Reserve"},"leisure/outdoor_seating":{icon:"maki-picnic-site",geometry:["point","area"],fields:["name","operator"],terms:["al fresco","beer garden","dining","cafe","restaurant","pub","bar","patio"],tags:{leisure:"outdoor_seating"},name:"Outdoor Seating Area"},"leisure/park":{icon:"maki-park",fields:["name","operator","address","opening_hours"],moreFields:["dog","smoking","website","phone","email","fax"],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:"maki-picnic-site",fields:["material","lit","bench"],geometry:["point"],tags:{leisure:"picnic_table"},terms:["bench"],name:"Picnic Table"},"leisure/pitch":{icon:"maki-pitch",fields:["name","sport","surface","lit"],moreFields:["access_simple","fee"],geometry:["point","area"],tags:{leisure:"pitch"},terms:["field"],name:"Sport Pitch"},"leisure/pitch/american_football":{icon:"maki-american-football",geometry:["point","area"],tags:{leisure:"pitch",sport:"american_football"},reference:{key:"sport",value:"american_football"},terms:["football","gridiron"],name:"American Football Field"},"leisure/pitch/australian_football":{icon:"maki-american-football",geometry:["point","area"],tags:{leisure:"pitch",sport:"australian_football"},reference:{key:"sport",value:"australian_football"},terms:["Aussie","AFL","football"],name:"Australian Football Field"},"leisure/pitch/badminton":{icon:"maki-tennis",fields:["{leisure/pitch}","access_simple"],geometry:["point","area"],tags:{leisure:"pitch",sport:"badminton"},reference:{key:"sport",value:"badminton"},terms:[],name:"Badminton Court"},"leisure/pitch/baseball":{icon:"maki-baseball",geometry:["point","area"],tags:{leisure:"pitch",sport:"baseball"},reference:{key:"sport",value:"baseball"},terms:[],name:"Baseball Field"},"leisure/pitch/basketball":{icon:"maki-basketball",fields:["name","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:"maki-volleyball",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/boules":{icon:"maki-pitch",fields:["name","boules","{leisure/pitch}"],geometry:["point","area"],tags:{leisure:"pitch",sport:"boules"},reference:{key:"sport",value:"boules"},terms:["bocce","lyonnaise","pétanque"],name:"Boules/Bocce Court"},"leisure/pitch/bowls":{icon:"maki-pitch",geometry:["point","area"],tags:{leisure:"pitch",sport:"bowls"},reference:{key:"sport",value:"bowls"},terms:[],name:"Bowling Green"},"leisure/pitch/cricket":{icon:"maki-cricket",geometry:["point","area"],tags:{leisure:"pitch",sport:"cricket"},reference:{key:"sport",value:"cricket"},terms:[],name:"Cricket Field"},"leisure/pitch/equestrian":{icon:"maki-horse-riding",fields:["{leisure/pitch}","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/netball":{icon:"maki-volleyball",geometry:["point","area"],tags:{leisure:"pitch",sport:"netball"},reference:{key:"sport",value:"netball"},terms:[],name:"Netball Court"},"leisure/pitch/rugby_league":{icon:"maki-american-football",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:"maki-american-football",geometry:["point","area"],tags:{leisure:"pitch",sport:"rugby_union"},reference:{key:"sport",value:"rugby_union"},terms:[],name:"Rugby Union Field"},"leisure/pitch/skateboard":{icon:"maki-skateboard",geometry:["point","area"],tags:{leisure:"pitch",sport:"skateboard"},reference:{key:"sport",value:"skateboard"},terms:[],name:"Skate Park"},"leisure/pitch/soccer":{icon:"maki-soccer",geometry:["point","area"],tags:{leisure:"pitch",sport:"soccer"},reference:{key:"sport",value:"soccer"},terms:["football"],name:"Soccer Field"},"leisure/pitch/softball":{icon:"maki-baseball",geometry:["point","area"],tags:{leisure:"pitch",sport:"softball"},reference:{key:"sport",value:"softball"},terms:["softball","diamond"],name:"Softball Field"},"leisure/pitch/table_tennis":{icon:"maki-tennis",fields:["name","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:"maki-tennis",fields:["{leisure/pitch}","access_simple"],geometry:["point","area"],tags:{leisure:"pitch",sport:"tennis"},reference:{key:"sport",value:"tennis"},terms:[],name:"Tennis Court"},"leisure/pitch/volleyball":{icon:"maki-volleyball",geometry:["point","area"],tags:{leisure:"pitch",sport:"volleyball"},reference:{key:"sport",value:"volleyball"},terms:[],name:"Volleyball Court"},"leisure/playground":{icon:"maki-playground",fields:["name","operator","surface","playground/max_age","playground/min_age","access_simple"],geometry:["point","area"],terms:["jungle gym","play area"],tags:{leisure:"playground"},name:"Playground"},"leisure/resort":{icon:"maki-lodging",fields:["name","operator","address","opening_hours"],moreFields:["payment_multi","website","phone","email","fax"],geometry:["point","area"],tags:{leisure:"resort"},name:"Resort"},"leisure/sauna":{icon:"fas-thermometer-three-quarters",fields:["name","operator","address","opening_hours","access_simple","fee"],moreFields:["payment_multi","website","phone","email","fax"],geometry:["point","area"],tags:{leisure:"sauna"},name:"Sauna"},"leisure/slipway":{icon:"maki-slipway",fields:["name","access_simple","fee"],moreFields:["seamark/type"],geometry:["point","vertex","line"],terms:["boat launch","boat ramp","boat landing"],tags:{leisure:"slipway"},name:"Slipway"},"leisure/sports_centre":{icon:"maki-pitch",fields:["name","sport","building","address","fee"],moreFields:["opening_hours","payment_multi","website","phone","email","fax"],geometry:["point","area"],tags:{leisure:"sports_centre"},terms:[],name:"Sports Center / Complex"},"leisure/sports_centre/swimming":{icon:"maki-swimming",geometry:["point","area"],terms:["dive","water"],tags:{leisure:"sports_centre",sport:"swimming"},reference:{key:"sport",value:"swimming"},name:"Swimming Pool Facility"},"leisure/stadium":{icon:"maki-pitch",fields:["name","sport","address"],moreFields:["website","phone","email","fax"],geometry:["point","area"],tags:{leisure:"stadium"},name:"Stadium"},"leisure/swimming_pool":{icon:"maki-swimming",fields:["name","access_simple","lit","location_pool","length","swimming_pool"],moreFields:["operator","address"],geometry:["point","area"],terms:["dive","water","aquatics"],tags:{leisure:"swimming_pool"},name:"Swimming Pool"},"leisure/track":{icon:"iD-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/track/horse_racing":{icon:"maki-horse-riding",fields:["surface","sport_racing_nonmotor","lit","width","lanes"],geometry:["point","line","area"],tags:{leisure:"track",sport:"horse_racing"},terms:["race*","horse","track"],name:"Racetrack (Horse Racing)"},"leisure/track/running":{icon:"maki-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/water_park":{icon:"maki-swimming",fields:["name","operator","address"],moreFields:["payment_multi","brand","website","phone","email","fax"],geometry:["point","area"],terms:["swim","pool","dive"],tags:{leisure:"water_park"},name:"Water Park"},line:{fields:["name"],geometry:["line"],tags:{},name:"Line",matchScore:0.1},man_made:{icon:"temaki-storage_tank",fields:["name","man_made"],moreFields:["material"],geometry:["point","vertex","line","area"],tags:{man_made:"*"},name:"Man Made"},"man_made/adit":{icon:"maki-triangle",geometry:["point","area"],fields:["operator","direction"],terms:["entrance","underground","mine","cave"],tags:{man_made:"adit"},name:"Adit"},"man_made/antenna":{icon:"temaki-antenna",fields:["height","communication_multi"],geometry:["point"],terms:["broadcast","cell phone","cell","communication","mobile phone","radio","television","transmission","tv"],tags:{man_made:"antenna"},name:"Antenna"},"man_made/breakwater":{geometry:["line","area"],tags:{man_made:"breakwater"},name:"Breakwater"},"man_made/bridge":{icon:"maki-bridge",fields:["name","bridge","layer","maxweight"],moreFields:["material","seamark/type"],geometry:["area"],tags:{man_made:"bridge"},addTags:{man_made:"bridge",layer:"1"},removeTags:{man_made:"bridge",layer:"*"},reference:{key:"man_made",value:"bridge"},name:"Bridge"},"man_made/bunker_silo":{icon:"temaki-silo",fields:["content"],geometry:["point","area"],terms:["Silage","Storage"],tags:{man_made:"bunker_silo"},name:"Bunker Silo"},"man_made/chimney":{icon:"temaki-chimney",fields:["material"],geometry:["point","area"],tags:{man_made:"chimney"},name:"Chimney"},"man_made/clearcut":{icon:"maki-logging",geometry:["area"],tags:{man_made:"clearcut"},terms:["cut","forest","lumber","tree","wood"],name:"Clearcut Forest"},"man_made/crane":{icon:"temaki-crane",fields:["operator","height","crane/type"],geometry:["point","line","vertex","area"],tags:{man_made:"crane"},name:"Crane"},"man_made/cutline":{icon:"maki-logging",geometry:["line"],tags:{man_made:"cutline"},name:"Cut line"},"man_made/embankment":{geometry:["line"],tags:{man_made:"embankment"},name:"Embankment"},"man_made/flagpole":{icon:"maki-embassy",fields:["operator","flag/type","country","lit","height"],moreFields:["material"],geometry:["point","vertex"],tags:{man_made:"flagpole"},name:"Flagpole"},"man_made/gasometer":{icon:"temaki-storage_tank",fields:["content","building_area"],geometry:["point","area"],terms:["gas holder"],tags:{man_made:"gasometer"},name:"Gasometer"},"man_made/groyne":{fields:["material"],geometry:["line","area"],tags:{man_made:"groyne"},name:"Groyne"},"man_made/lighthouse":{icon:"maki-lighthouse",fields:["name","operator","building_area","height"],moreFields:["address","website","phone","email","fax","seamark/type"],geometry:["point","area"],tags:{man_made:"lighthouse"},name:"Lighthouse"},"man_made/mast":{icon:"maki-communications-tower",fields:["tower/type","tower/construction","height"],moreFields:["material","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/mast/communication":{icon:"maki-communications-tower",fields:["{man_made/mast}","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","tower:type":"communication"},reference:{key:"tower:type",value:"communication"},name:"Communication Mast"},"man_made/mast/communication/mobile_phone":{icon:"maki-communications-tower",geometry:["point"],terms:["antenna","cell mast","cell phone mast","cell phone tower","cell tower","communication mast","communication tower","guyed tower","mobile phone tower","transmission mast","transmission tower"],tags:{man_made:"mast","tower:type":"communication","communication:mobile_phone":"yes"},reference:{key:"communication:mobile_phone",value:"yes"},name:"Mobile Phone Mast"},"man_made/mast/communication/radio":{icon:"maki-communications-tower",geometry:["point"],terms:["antenna","broadcast tower","communication mast","communication tower","guyed tower","radio mast","radio tower","transmission mast","transmission tower"],tags:{man_made:"mast","tower:type":"communication","communication:radio":"yes"},reference:{key:"communication:radio",value:"yes"},name:"Radio Broadcast Mast"},"man_made/mast/communication/television":{icon:"maki-communications-tower",geometry:["point"],terms:["antenna","broadcast tower","communication mast","communication tower","guyed tower","television mast","television tower","transmission mast","transmission tower","tv mast","tv tower"],tags:{man_made:"mast","tower:type":"communication","communication:television":"yes"},reference:{key:"communication:television",value:"yes"},name:"Television Broadcast Mast"},"man_made/monitoring_station":{icon:"temaki-antenna",geometry:["point","area"],fields:["monitoring_multi","operator"],terms:["weather","earthquake","seismology","air","gps"],tags:{man_made:"monitoring_station"},name:"Monitoring Station"},"man_made/observatory":{fields:["name","operator","address","access_simple","building_area"],moreFields:["website","phone","email","fax"],geometry:["point","area"],terms:["astronomical","meteorological"],tags:{man_made:"observatory"},name:"Observatory"},"man_made/petroleum_well":{icon:"temaki-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":{icon:"iD-highway-footway",fields:["name","surface","lit","width","access"],geometry:["line","area"],terms:["dock","jetty"],tags:{man_made:"pier"},name:"Pier"},"man_made/pipeline":{icon:"iD-pipeline-line",fields:["location","operator","substance","layer"],geometry:["line"],terms:["oil","natural gas","water","sewer","sewage"],tags:{man_made:"pipeline"},name:"Pipeline"},"man_made/pumping_station":{icon:"maki-water",geometry:["point","area"],tags:{man_made:"pumping_station"},name:"Pumping Station"},"man_made/silo":{icon:"temaki-silo",fields:["crop","building_area"],geometry:["point","area"],terms:["grain","corn","wheat"],tags:{man_made:"silo"},name:"Silo"},"man_made/storage_tank":{icon:"temaki-storage_tank",fields:["content","building_area"],geometry:["point","area"],terms:["water","oil","gas","petrol"],tags:{man_made:"storage_tank"},name:"Storage Tank"},"man_made/surveillance":{icon:"maki-attraction",geometry:["point","vertex"],fields:["surveillance","surveillance/type","surveillance/zone","direction"],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/surveillance/camera":{icon:"maki-attraction",geometry:["point","vertex"],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/survey_point":{icon:"maki-monument",fields:["ref"],geometry:["point","vertex"],terms:["trig point","triangulation pillar","trigonometrical station"],tags:{man_made:"survey_point"},name:"Survey Point"},"man_made/tower":{icon:"temaki-tower",fields:["tower/type","tower/construction","height"],geometry:["point","area"],tags:{man_made:"tower"},name:"Tower"},"man_made/tower/communication":{icon:"temaki-tower",fields:["tower/type","tower/construction","height","communication_multi"],geometry:["point","area"],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:"tower","tower:type":"communication"},reference:{key:"tower:type",value:"communication"},name:"Communication Tower"},"man_made/tower/observation":{icon:"temaki-tower",fields:["tower/type","tower/construction","height"],geometry:["point","area"],terms:["lookout tower","fire tower"],tags:{man_made:"tower","tower:type":"observation"},reference:{key:"tower:type",value:"observation"},name:"Observation Tower"},"man_made/wastewater_plant":{icon:"maki-water",fields:["name","operator","address"],moreFields:["website","phone","email","fax"],geometry:["point","area"],terms:["sewage*","water treatment plant","reclamation plant"],tags:{man_made:"wastewater_plant"},name:"Wastewater Plant"},"man_made/water_tower":{icon:"maki-water",fields:["operator"],geometry:["point","area"],tags:{man_made:"water_tower"},name:"Water Tower"},"man_made/water_well":{icon:"maki-water",fields:["operator"],geometry:["point","area"],tags:{man_made:"water_well"},name:"Water Well"},"man_made/water_works":{icon:"maki-water",fields:["name","operator","address"],geometry:["point","area"],tags:{man_made:"water_works"},name:"Water Works"},"man_made/watermill":{icon:"maki-watermill",fields:["building_area"],geometry:["point","area"],terms:["water","wheel","mill"],tags:{man_made:"watermill"},name:"Watermill"},"man_made/windmill":{icon:"maki-windmill",fields:["building_area"],geometry:["point","area"],terms:["wind","wheel","mill"],tags:{man_made:"windmill"},name:"Windmill"},"man_made/works":{icon:"maki-industry",fields:["name","operator","address","building_area","product"],moreFields:["website","phone","email","fax"],geometry:["point","area"],terms:["assembly","build","brewery","car","plant","plastic","processing","manufacture","refinery"],tags:{man_made:"works"},name:"Factory"},manhole:{icon:"maki-circle-stroked",fields:["manhole","operator","label","ref"],geometry:["point","vertex"],tags:{manhole:"*"},terms:["cover","hole","sewer","sewage","telecom"],name:"Manhole"},"manhole/drain":{icon:"maki-water",fields:["operator","ref"],geometry:["point","vertex"],tags:{manhole:"drain"},terms:["cover","drain","hole","rain","sewer","sewage","storm"],name:"Storm Drain"},"manhole/telecom":{icon:"maki-circle-stroked",fields:["operator","ref"],geometry:["point","vertex"],tags:{manhole:"telecom"},terms:["cover","phone","hole","telecom","telephone","bt"],name:"Telecom Manhole"},natural:{icon:"maki-natural",fields:["name","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:"temaki-beach",geometry:["point","area"],fields:["name"],tags:{natural:"bay"},terms:[],name:"Bay"},"natural/beach":{icon:"temaki-beach",fields:["surface"],geometry:["point","area"],tags:{natural:"beach"},terms:["shore"],name:"Beach"},"natural/cave_entrance":{icon:"maki-triangle",geometry:["point","area"],fields:["fee","access_simple","direction"],tags:{natural:"cave_entrance"},terms:["cavern","hollow","grotto","shelter","cavity"],name:"Cave Entrance"},"natural/cliff":{icon:"maki-triangle",fields:["name","height"],geometry:["point","vertex","line","area"],tags:{natural:"cliff"},terms:["crag","escarpment","rock face","scarp"],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/mud":{geometry:["area"],tags:{natural:"mud"},terms:["wetland"],name:"Mud"},"natural/peak":{icon:"maki-mountain",fields:["name","elevation"],geometry:["point","vertex"],tags:{natural:"peak"},terms:["acme","aiguille","alp","climax","crest","crown","hill","mount","mountain","pinnacle","summit","tip","top"],name:"Peak"},"natural/reef":{icon:"temaki-beach",geometry:["point","area"],tags:{natural:"reef"},terms:["barrier","coral","ocean","sand","shoal"],name:"Reef"},"natural/ridge":{geometry:["line"],tags:{natural:"ridge"},terms:["crest"],name:"Ridge"},"natural/saddle":{icon:"maki-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:"maki-water",fields:["name","intermittent"],geometry:["point","vertex"],tags:{natural:"spring"},terms:[],name:"Spring"},"natural/tree_row":{icon:"maki-park",fields:["leaf_type","leaf_cycle","denotation"],geometry:["line"],tags:{natural:"tree_row"},terms:[],name:"Tree Row"},"natural/tree":{icon:"maki-park",fields:["leaf_type_singular","leaf_cycle_singular","denotation"],geometry:["point","vertex"],tags:{natural:"tree"},terms:[],name:"Tree"},"natural/volcano":{icon:"maki-volcano",fields:["name","elevation","volcano/status","volcano/type"],geometry:["point","vertex"],tags:{natural:"volcano"},terms:["mountain","crater"],name:"Volcano"},"natural/water":{icon:"maki-water",fields:["name","water","intermittent"],geometry:["area"],tags:{natural:"water"},name:"Water"},"natural/water/basin":{icon:"maki-water",fields:["name","basin","intermittent_yes"],geometry:["area"],tags:{natural:"water",water:"basin"},reference:{key:"water",value:"basin"},terms:["detention","drain","overflow","rain","retention"],name:"Basin"},"natural/water/canal":{icon:"maki-water",geometry:["area"],tags:{natural:"water",water:"canal"},reference:{key:"water",value:"canal"},name:"Canal"},"natural/water/lake":{icon:"maki-water",geometry:["area"],tags:{natural:"water",water:"lake"},reference:{key:"water",value:"lake"},terms:["lakelet","loch","mere"],name:"Lake"},"natural/water/pond":{icon:"maki-water",geometry:["area"],tags:{natural:"water",water:"pond"},reference:{key:"water",value:"pond"},terms:["lakelet","millpond","tarn","pool","mere"],name:"Pond"},"natural/water/reservoir":{icon:"maki-water",geometry:["area"],tags:{natural:"water",water:"reservoir"},reference:{key:"water",value:"reservoir"},name:"Reservoir"},"natural/water/river":{icon:"maki-water",geometry:["area"],tags:{natural:"water",water:"river"},reference:{key:"water",value:"river"},terms:["beck","branch","brook","course","creek","estuary","rill","riverbank","rivulet","run","runnel","stream","tributary","watercourse"],name:"River"},"natural/water/stream":{icon:"maki-water",geometry:["area"],tags:{natural:"water",water:"stream"},reference:{key:"water",value:"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"],name:"Stream"},"natural/wetland":{icon:"maki-wetland",fields:["wetland"],geometry:["point","area"],tags:{natural:"wetland"},terms:["bog","marsh","reedbed","swamp","tidalflat"],name:"Wetland"},"natural/wood":{icon:"maki-park-alt1",fields:["name","leaf_type","leaf_cycle"],geometry:["point","area"],tags:{natural:"wood"},terms:["tree"],name:"Wood"},"noexit/yes":{icon:"maki-barrier",geometry:["vertex"],terms:["no exit","road end","dead end"],tags:{noexit:"yes"},reference:{key:"noexit",value:"*"},name:"No Exit"},office:{icon:"maki-suitcase",fields:["name","office","address","building_area","opening_hours"],moreFields:["operator","smoking","website","phone","email","fax","wheelchair"],geometry:["point","vertex","area"],tags:{office:"*"},terms:[],name:"Office"},"office/administrative":{icon:"maki-suitcase",geometry:["point","area"],tags:{office:"administrative"},terms:[],searchable:false,name:"Administrative Office"},"office/physician":{icon:"maki-suitcase",geometry:["point","area"],tags:{office:"physician"},searchable:false,name:"Physician"},"office/travel_agent":{icon:"maki-suitcase",geometry:["point","area"],tags:{office:"travel_agent"},reference:{key:"shop",value:"travel_agency"},terms:[],name:"Travel Agency",searchable:false},"office/accountant":{icon:"temaki-accounting",geometry:["point","area"],tags:{office:"accountant"},terms:[],name:"Accountant Office"},"office/adoption_agency":{icon:"maki-suitcase",geometry:["point","area"],tags:{office:"adoption_agency"},terms:[],name:"Adoption Agency"},"office/advertising_agency":{icon:"maki-suitcase",geometry:["point","area"],tags:{office:"advertising_agency"},terms:["ad","ad agency","advert agency","advertising","marketing"],name:"Advertising Agency"},"office/architect":{icon:"maki-suitcase",geometry:["point","area"],tags:{office:"architect"},terms:[],name:"Architect Office"},"office/association":{icon:"maki-suitcase",geometry:["point","area"],tags:{office:"association"},terms:["association","non-profit","nonprofit","organization","society"],name:"Nonprofit Organization Office"},"office/charity":{icon:"maki-suitcase",geometry:["point","area"],tags:{office:"charity"},terms:["charitable organization"],name:"Charity Office"},"office/company":{icon:"maki-suitcase",geometry:["point","area"],tags:{office:"company"},terms:[],name:"Corporate Office"},"office/coworking":{icon:"maki-suitcase",fields:["{office}","internet_access"],moreFields:["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:"maki-school",geometry:["point","area"],tags:{office:"educational_institution"},terms:[],name:"Educational Institution"},"office/employment_agency":{icon:"maki-suitcase",geometry:["point","area"],tags:{office:"employment_agency"},terms:["job"],name:"Employment Agency"},"office/energy_supplier":{icon:"maki-suitcase",geometry:["point","area"],tags:{office:"energy_supplier"},terms:["electricity","energy company","energy utility","gas utility"],name:"Energy Supplier Office"},"office/estate_agent":{icon:"temaki-real_estate_agency",geometry:["point","area"],tags:{office:"estate_agent"},terms:["real estate"],name:"Real Estate Office"},"office/financial":{icon:"maki-suitcase",geometry:["point","area"],tags:{office:"financial"},terms:[],name:"Financial Office"},"office/forestry":{icon:"maki-suitcase",geometry:["point","area"],tags:{office:"forestry"},terms:["forest","ranger"],name:"Forestry Office"},"office/foundation":{icon:"maki-suitcase",geometry:["point","area"],tags:{office:"foundation"},terms:[],name:"Foundation Office"},"office/government":{icon:"maki-town-hall",fields:["name","government","{office}"],geometry:["point","area"],tags:{office:"government"},terms:[],name:"Government Office"},"office/government/register_office":{icon:"maki-town-hall",fields:["{office}","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/government/tax":{icon:"maki-town-hall",fields:["{office}","operator"],geometry:["point","area"],terms:["fiscal authorities","revenue office","tax office"],tags:{office:"government",government:"tax"},reference:{key:"government",value:"tax"},name:"Tax and Revenue Office"},"office/guide":{icon:"maki-suitcase",geometry:["point","area"],tags:{office:"guide"},terms:["dive guide","mountain guide","tour guide"],name:"Tour Guide Office"},"office/insurance":{icon:"maki-suitcase",geometry:["point","area"],tags:{office:"insurance"},terms:[],name:"Insurance Office"},"office/it":{icon:"maki-suitcase",geometry:["point","area"],tags:{office:"it"},terms:["computer","information","software","technology"],name:"Information Technology Office"},"office/lawyer":{icon:"fas-balance-scale",geometry:["point","area"],tags:{office:"lawyer"},terms:[],name:"Law Office"},"office/lawyer/notary":{icon:"maki-suitcase",geometry:["point","area"],tags:{office:"lawyer",lawyer:"notary"},reference:{key:"office",value:"notary"},searchable:false,name:"Notary Office"},"office/moving_company":{icon:"fas-people-carry",geometry:["point","area"],tags:{office:"moving_company"},terms:["relocation"],name:"Moving Company Office"},"office/newspaper":{icon:"maki-library",geometry:["point","area"],tags:{office:"newspaper"},terms:[],name:"Newspaper Office"},"office/ngo":{icon:"maki-suitcase",geometry:["point","area"],tags:{office:"ngo"},terms:["ngo","non government","non-government","organization","organisation"],name:"NGO Office"},"office/notary":{icon:"maki-suitcase",geometry:["point","area"],tags:{office:"notary"},terms:["clerk","deeds","estate","signature","wills"],name:"Notary Office"},"office/political_party":{icon:"maki-town-hall",geometry:["point","area"],tags:{office:"political_party"},terms:[],name:"Political Party"},"office/private_investigator":{icon:"maki-suitcase",geometry:["point","area"],tags:{office:"private_investigator"},terms:["PI","private eye","private detective"],name:"Private Investigator Office"},"office/quango":{icon:"maki-suitcase",geometry:["point","area"],tags:{office:"quango"},terms:["ngo","non government","non-government","organization","organisation","quasi autonomous","quasi-autonomous"],name:"Quasi-NGO Office"},"office/religion":{icon:"maki-suitcase",fields:["{office}","religion","denomination"],geometry:["point","area"],tags:{office:"religion"},terms:[],name:"Religious Office"},"office/research":{icon:"maki-suitcase",geometry:["point","area"],tags:{office:"research"},terms:[],name:"Research Office"},"office/surveyor":{icon:"maki-suitcase",geometry:["point","area"],tags:{office:"surveyor"},terms:[],name:"Surveyor Office"},"office/tax_advisor":{icon:"maki-suitcase",geometry:["point","area"],tags:{office:"tax_advisor"},terms:["tax","tax consultant"],name:"Tax Advisor Office"},"office/telecommunication":{icon:"maki-telephone",geometry:["point","area"],tags:{office:"telecommunication"},terms:["communication","internet","phone","voice"],name:"Telecom Office"},"office/therapist":{icon:"maki-suitcase",geometry:["point","area"],tags:{office:"therapist"},terms:["therapy"],name:"Therapist Office"},"office/water_utility":{icon:"maki-suitcase",fields:["{office}","operator"],geometry:["point","area"],tags:{office:"water_utility"},terms:["water board","utility"],name:"Water Utility Office"},"piste/downhill":{icon:"fas-skiing",fields:["name","piste/type","piste/difficulty_downhill","piste/grooming_downhill","oneway","lit"],geometry:["line","area"],terms:["ski","alpine","snowboard","downhill","piste"],tags:{"piste:type":"downhill"},name:"Downhill Piste/Ski Run"},"piste/downhill/halfpipe":{icon:"fas-snowboarding",fields:["name","piste/type","piste/difficulty_downhill","piste/grooming_downhill","oneway","lit"],geometry:["line","area"],terms:["ski","alpine","halfpipe","half pipe","snowboard","downhill","piste"],tags:{"piste:type":"downhill",man_made:"piste:halfpipe"},name:"Halfpipe"},"piste/hike":{icon:"temaki-snow_shoeing",fields:["name","piste/type","piste/difficulty","piste/grooming_hike","oneway","lit"],geometry:["line","area"],terms:["hike","winter hiking","snowshoe","snowshoeing","piste","ski"],tags:{"piste:type":"hike"},name:"Snowshoeing or Winter Hiking Trail"},"piste/ice_skate":{icon:"fas-skating",fields:["name","piste/type","sport_ice","oneway","lit"],geometry:["line","area"],terms:["ice","skating","ski","piste"],tags:{"piste:type":"ice_skate"},name:"Ice Skating Piste"},"piste/nordic":{icon:"fas-skiing-nordic",fields:["name","piste/type","piste/difficulty_nordic","piste/grooming_nordic","oneway","lit"],geometry:["line","area"],terms:["ski","nordic","crosscountry","skating","piste"],tags:{"piste:type":"nordic"},name:"Nordic or Crosscountry Piste/Ski Trail"},"piste/piste":{icon:"fas-skiing",fields:["name","piste/type","piste/difficulty","piste/grooming","oneway","lit"],geometry:["line","area"],terms:["ski","nordic","crosscountry","downhill","alpine","snowboard","skitour","ski touring","sled","luge","sleigh","sledge","ski-joring","husky","horse","winter hiking","snowshoe","snowshoeing","ice","skating"],tags:{"piste:type":"*"},name:"Winter Sport Trails"},"piste/skitour":{icon:"fas-skiing-nordic",fields:["name","piste/type","piste/difficulty_skitour","piste/grooming","oneway","lit"],geometry:["line","area"],terms:["ski","skitour","crosscountry","ski touring","piste"],tags:{"piste:type":"skitour"},name:"Ski Touring Trail"},"piste/sled":{icon:"temaki-sledding",fields:["name","piste/type","piste/difficulty","piste/grooming","oneway","lit"],geometry:["line","area"],terms:["ski","sled","luge","sleigh","sledge","piste"],tags:{"piste:type":"sled"},name:"Sled Piste"},"piste/sleigh":{icon:"fas-sleigh",fields:["name","piste/type","piste/difficulty","piste/grooming","oneway","lit"],geometry:["line","area"],terms:["ski","piste","sled","luge","sleigh","sledge","ski-joring","husky","horse"],tags:{"piste:type":"sleigh"},name:"Sleigh Piste"},"place/farm":{icon:"maki-farm",geometry:["point","area"],fields:["name"],tags:{place:"farm"},name:"Farm",searchable:false},"place/city_block":{icon:"maki-triangle-stroked",fields:["name"],moreFields:["website"],geometry:["point","area"],tags:{place:"city_block"},name:"City Block"},"place/city":{icon:"maki-city",fields:["name","population"],moreFields:["website"],geometry:["point","area"],tags:{place:"city"},name:"City"},"place/hamlet":{icon:"maki-triangle-stroked",fields:["name","population"],moreFields:["website"],geometry:["point","area"],tags:{place:"hamlet"},name:"Hamlet"},"place/island":{icon:"maki-mountain",geometry:["point","area"],fields:["name"],terms:["archipelago","atoll","bar","cay","isle","islet","key","reef"],tags:{place:"island"},name:"Island"},"place/islet":{icon:"maki-mountain",geometry:["point","area"],fields:["name"],terms:["archipelago","atoll","bar","cay","isle","islet","key","reef"],tags:{place:"islet"},name:"Islet"},"place/isolated_dwelling":{icon:"maki-home",geometry:["point","area"],fields:["name"],tags:{place:"isolated_dwelling"},name:"Isolated Dwelling"},"place/locality":{icon:"maki-triangle-stroked",geometry:["point","area"],moreFields:["website"],fields:["name"],tags:{place:"locality"},name:"Locality"},"place/neighbourhood":{icon:"maki-triangle-stroked",fields:["name","population"],moreFields:["website"],geometry:["point","area"],tags:{place:"neighbourhood"},terms:["neighbourhood"],name:"Neighborhood"},"place/plot":{icon:"maki-triangle-stroked",fields:["name"],geometry:["point","area"],tags:{place:"plot"},terms:["tract","land","lot","parcel"],name:"Plot"},"place/quarter":{icon:"maki-triangle-stroked",fields:["name","population"],moreFields:["website"],geometry:["point","area"],tags:{place:"quarter"},terms:["boro","borough","quarter"],name:"Sub-Borough / Quarter"},"place/square":{geometry:["point","area"],fields:["name"],moreFields:["website"],tags:{place:"square"},name:"Square"},"place/suburb":{icon:"maki-triangle-stroked",fields:["name","population"],moreFields:["website"],geometry:["point","area"],tags:{place:"suburb"},terms:["boro","borough","quarter"],name:"Borough / Suburb"},"place/town":{icon:"maki-town",fields:["name","population"],moreFields:["website"],geometry:["point","area"],tags:{place:"town"},name:"Town"},"place/village":{icon:"maki-village",fields:["name","population"],moreFields:["website"],geometry:["point","area"],tags:{place:"village"},name:"Village"},"playground/balance_beam":{icon:"maki-playground",geometry:["point","line"],tags:{playground:"balancebeam"},name:"Play Balance Beam"},"playground/basket_spinner":{icon:"maki-playground",geometry:["point"],terms:["basket rotator"],tags:{playground:"basketrotator"},name:"Basket Spinner"},"playground/basket_swing":{icon:"maki-playground",geometry:["point"],tags:{playground:"basketswing"},name:"Basket Swing"},"playground/climbing_frame":{icon:"maki-playground",geometry:["point","area"],tags:{playground:"climbingframe"},name:"Climbing Frame"},"playground/cushion":{icon:"maki-playground",geometry:["point","area"],tags:{playground:"cushion"},name:"Bouncy Cushion"},"playground/horizontal_bar":{icon:"maki-pitch",fields:["height"],geometry:["point"],terms:["high bar"],tags:{playground:"horizontal_bar"},name:"Play Horizontal Bar"},"playground/rocker":{icon:"maki-playground",geometry:["point"],tags:{playground:"springy"},name:"Spring Rider",terms:["spring rocker","springy rocker"]},"playground/roundabout":{icon:"maki-stadium",fields:["bench"],geometry:["point","area"],tags:{playground:"roundabout"},name:"Play Roundabout",terms:["merry-go-round"]},"playground/sandpit":{icon:"maki-playground",geometry:["point","area"],tags:{playground:"sandpit"},name:"Sandpit"},"playground/seesaw":{icon:"maki-playground",geometry:["point"],tags:{playground:"seesaw"},name:"Seesaw"},"playground/slide":{icon:"maki-playground",geometry:["point","line"],tags:{playground:"slide"},name:"Slide"},"playground/structure":{icon:"maki-pitch",geometry:["point","area"],tags:{playground:"structure"},name:"Play Structure"},"playground/swing":{icon:"maki-playground",fields:["capacity","playground/baby","wheelchair"],geometry:["point"],tags:{playground:"swing"},name:"Swing"},"playground/zipwire":{icon:"maki-playground",geometry:["point","line"],tags:{playground:"zipwire"},name:"Zip Wire"},point:{fields:["name"],geometry:["point"],tags:{},name:"Point",matchScore:0.1},"power/sub_station":{icon:"temaki-power",fields:["substation","operator","building","ref"],geometry:["point","area"],tags:{power:"sub_station"},reference:{key:"power",value:"substation"},name:"Substation",searchable:false},"power/cable/underground":{fields:["name","operator","voltage","ref","layer"],geometry:["line"],tags:{power:"cable",location:"underground"},name:"Underground Power Cable"},"power/generator":{icon:"temaki-power",fields:["operator","generator/source","generator/method","generator/type","generator/output/electricity","ref"],geometry:["point","vertex","area"],terms:["hydro","solar","turbine","wind"],tags:{power:"generator"},name:"Power Generator"},"power/generator/method/photovoltaic":{icon:"fas-solar-panel",fields:["operator","generator/output/electricity","ref"],geometry:["point","vertex","area"],terms:["photovoltaic module","PV module","sunlight"],tags:{power:"generator","generator:source":"solar","generator:method":"photovoltaic","generator:type":"solar_photovoltaic_panel"},addTags:{power:"generator","generator:source":"solar","generator:method":"photovoltaic","generator:type":"solar_photovoltaic_panel","generator:output:electricity":"yes"},removeTags:{power:"generator","generator:source":"solar","generator:method":"photovoltaic","generator:type":"solar_photovoltaic_panel","generator:output:electricity":"yes"},reference:{key:"generator:method",value:"photovoltaic"},name:"Solar Panel"},"power/generator/source/nuclear":{icon:"temaki-radiation",fields:["operator","generator/source","generator/method","generator/type","generator/output/electricity","ref"],geometry:["point","vertex","area"],terms:["fission","generator","nuclear","nuke","reactor"],tags:{power:"generator","generator:source":"nuclear","generator:method":"fission"},reference:{key:"generator:source",value:"nuclear"},name:"Nuclear Reactor"},"power/generator/source/wind":{icon:"temaki-wind_turbine",fields:["operator","generator/source","generator/method","generator/type","generator/output/electricity","height","ref"],geometry:["point","vertex","area"],terms:["generator","turbine","windmill","wind"],tags:{power:"generator","generator:source":"wind","generator:method":"wind_turbine"},reference:{key:"generator:source",value:"wind"},name:"Wind Turbine"},"power/line":{icon:"iD-power-line",fields:["name","operator","voltage","ref","layer"],geometry:["line"],tags:{power:"line"},name:"Power Line"},"power/minor_line":{icon:"iD-power-line",fields:["name","operator","voltage","ref","layer"],geometry:["line"],tags:{power:"minor_line"},name:"Minor Power Line"},"power/plant":{icon:"maki-industry",fields:["name","operator","address","plant/output/electricity","start_date"],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":{fields:["ref","material"],geometry:["point","vertex"],tags:{power:"pole"},name:"Power Pole"},"power/substation":{icon:"temaki-power",fields:["substation","operator","building","ref"],geometry:["point","area"],tags:{power:"substation"},name:"Substation"},"power/switch":{icon:"temaki-power",fields:["switch","operator","location","cables","voltage","ref"],geometry:["point","vertex","area"],tags:{power:"switch"},name:"Power Switch"},"power/tower":{fields:["design","ref","material"],geometry:["point","vertex"],terms:["power"],tags:{power:"tower"},name:"High-Voltage Tower"},"power/transformer":{icon:"temaki-power",fields:["ref","operator","transformer","location","rating","devices","phases"],moreFields:["frequency","voltage/primary","voltage/secondary","voltage/tertiary","windings","windings/configuration"],geometry:["point","vertex","area"],tags:{power:"transformer"},name:"Transformer"},"public_transport/linear_platform_aerialway":{icon:"iD-highway-footway",fields:["{public_transport/linear_platform}"],moreFields:["{public_transport/linear_platform}"],geometry:["line"],tags:{public_transport:"platform",aerialway:"yes"},reference:{key:"public_transport",value:"platform"},terms:["aerialway","cable car","platform","public transit","public transportation","transit","transportation"],name:"Aerialway Stop / Platform"},"public_transport/linear_platform_bus":{icon:"iD-highway-footway",fields:["{public_transport/linear_platform}"],moreFields:["{public_transport/linear_platform}"],geometry:["line"],tags:{public_transport:"platform",bus:"yes"},addTags:{public_transport:"platform",bus:"yes",highway:"bus_stop"},removeTags:{public_transport:"platform",bus:"yes",highway:"bus_stop"},reference:{key:"public_transport",value:"platform"},terms:["bus","platform","public transit","public transportation","transit","transportation"],name:"Bus Stop / Platform"},"public_transport/linear_platform_ferry":{icon:"iD-highway-footway",fields:["{public_transport/linear_platform}"],moreFields:["{public_transport/linear_platform}"],geometry:["line"],tags:{public_transport:"platform",ferry:"yes"},reference:{key:"public_transport",value:"platform"},terms:["boat","dock","ferry","pier","platform","public transit","public transportation","transit","transportation"],name:"Ferry Stop / Platform"},"public_transport/linear_platform_light_rail":{icon:"iD-highway-footway",fields:["{public_transport/linear_platform}"],moreFields:["{public_transport/linear_platform}"],geometry:["line"],tags:{public_transport:"platform",light_rail:"yes"},addTags:{public_transport:"platform",light_rail:"yes",railway:"platform"},removeTags:{public_transport:"platform",light_rail:"yes",railway:"platform"},reference:{key:"railway",value:"platform"},terms:["electric","light rail","platform","public transit","public transportation","rail","track","tram","trolley","transit","transportation"],name:"Light Rail Stop / Platform"},"public_transport/linear_platform_monorail":{icon:"iD-highway-footway",fields:["{public_transport/linear_platform}"],moreFields:["{public_transport/linear_platform}"],geometry:["line"],tags:{public_transport:"platform",monorail:"yes"},addTags:{public_transport:"platform",monorail:"yes",railway:"platform"},removeTags:{public_transport:"platform",monorail:"yes",railway:"platform"},reference:{key:"railway",value:"platform"},terms:["monorail","platform","public transit","public transportation","rail","transit","transportation"],name:"Monorail Stop / Platform"},"public_transport/linear_platform_subway":{icon:"iD-highway-footway",fields:["{public_transport/linear_platform}"],moreFields:["{public_transport/linear_platform}"],geometry:["line"],tags:{public_transport:"platform",subway:"yes"},addTags:{public_transport:"platform",subway:"yes",railway:"platform"},removeTags:{public_transport:"platform",subway:"yes",railway:"platform"},reference:{key:"railway",value:"platform"},terms:["metro","platform","public transit","public transportation","rail","subway","track","transit","transportation","underground"],name:"Subway Stop / Platform"},"public_transport/linear_platform_train":{icon:"iD-highway-footway",fields:["{public_transport/linear_platform}"],moreFields:["{public_transport/linear_platform}"],geometry:["line"],tags:{public_transport:"platform",train:"yes"},addTags:{public_transport:"platform",train:"yes",railway:"platform"},removeTags:{public_transport:"platform",train:"yes",railway:"platform"},reference:{key:"railway",value:"platform"},terms:["platform","public transit","public transportation","rail","track","train","transit","transportation"],name:"Train Stop / Platform"},"public_transport/linear_platform_tram":{icon:"iD-highway-footway",fields:["{public_transport/linear_platform}"],moreFields:["{public_transport/linear_platform}"],geometry:["line"],tags:{public_transport:"platform",tram:"yes"},addTags:{public_transport:"platform",tram:"yes",railway:"platform"},removeTags:{public_transport:"platform",tram:"yes",railway:"platform"},reference:{key:"public_transport",value:"platform"},terms:["electric","light rail","platform","public transit","public transportation","rail","streetcar","track","tram","trolley","transit","transportation"],name:"Tram Stop / Platform"},"public_transport/linear_platform_trolleybus":{icon:"iD-highway-footway",fields:["{public_transport/linear_platform}"],moreFields:["{public_transport/linear_platform}"],geometry:["line"],tags:{public_transport:"platform",trolleybus:"yes"},addTags:{public_transport:"platform",trolleybus:"yes",highway:"bus_stop"},removeTags:{public_transport:"platform",trolleybus:"yes",highway:"bus_stop"},reference:{key:"public_transport",value:"platform"},terms:["bus","electric","platform","public transit","public transportation","streetcar","trackless","tram","trolley","transit","transportation"],name:"Trolleybus Stop / Platform"},"public_transport/linear_platform":{icon:"iD-highway-footway",fields:["name","ref_platform","network","operator","surface"],moreFields:["lit","bench","shelter","passenger_information_display","wheelchair"],geometry:["line"],tags:{public_transport:"platform"},terms:["platform","public transit","public transportation","transit","transportation"],name:"Transit Stop / Platform",matchScore:0.2},"public_transport/platform_aerialway":{icon:"maki-aerialway",fields:["{public_transport/platform}"],moreFields:["{public_transport/platform}"],geometry:["point","area"],tags:{public_transport:"platform",aerialway:"yes"},reference:{key:"public_transport",value:"platform"},terms:["aerialway","cable car","platform","public transit","public transportation","transit","transportation"],name:"Aerialway Stop / Platform"},"public_transport/platform_bus":{icon:"maki-bus",fields:["{public_transport/platform}"],moreFields:["{public_transport/platform}"],geometry:["point","area"],tags:{public_transport:"platform",bus:"yes"},addTags:{public_transport:"platform",bus:"yes",highway:"bus_stop"},removeTags:{public_transport:"platform",bus:"yes",highway:"bus_stop"},reference:{key:"public_transport",value:"platform"},terms:["bus","platform","public transit","public transportation","transit","transportation"],name:"Bus Stop / Platform"},"public_transport/platform_ferry":{icon:"maki-ferry",fields:["{public_transport/platform}"],moreFields:["{public_transport/platform}"],geometry:["point","area"],tags:{public_transport:"platform",ferry:"yes"},reference:{key:"public_transport",value:"platform"},terms:["boat","dock","ferry","pier","platform","public transit","public transportation","transit","transportation"],name:"Ferry Stop / Platform"},"public_transport/platform_light_rail":{icon:"temaki-light_rail",fields:["{public_transport/platform}"],moreFields:["{public_transport/platform}"],geometry:["point","area"],tags:{public_transport:"platform",light_rail:"yes"},addTags:{public_transport:"platform",light_rail:"yes",railway:"platform"},removeTags:{public_transport:"platform",light_rail:"yes",railway:"platform"},reference:{key:"railway",value:"platform"},terms:["electric","light rail","platform","public transit","public transportation","rail","track","tram","trolley","transit","transportation"],name:"Light Rail Stop / Platform"},"public_transport/platform_monorail":{icon:"temaki-monorail",fields:["{public_transport/platform}"],moreFields:["{public_transport/platform}"],geometry:["point","area"],tags:{public_transport:"platform",monorail:"yes"},addTags:{public_transport:"platform",monorail:"yes",railway:"platform"},removeTags:{public_transport:"platform",monorail:"yes",railway:"platform"},reference:{key:"railway",value:"platform"},terms:["monorail","platform","public transit","public transportation","rail","transit","transportation"],name:"Monorail Stop / Platform"},"public_transport/platform_subway":{icon:"temaki-subway",fields:["{public_transport/platform}"],moreFields:["{public_transport/platform}"],geometry:["point","area"],tags:{public_transport:"platform",subway:"yes"},addTags:{public_transport:"platform",subway:"yes",railway:"platform"},removeTags:{public_transport:"platform",subway:"yes",railway:"platform"},reference:{key:"railway",value:"platform"},terms:["metro","platform","public transit","public transportation","rail","subway","track","transit","transportation","underground"],name:"Subway Stop / Platform"},"public_transport/platform_train":{icon:"maki-rail",fields:["{public_transport/platform}"],moreFields:["{public_transport/platform}"],geometry:["point","area"],tags:{public_transport:"platform",train:"yes"},addTags:{public_transport:"platform",train:"yes",railway:"platform"},removeTags:{public_transport:"platform",train:"yes",railway:"platform"},reference:{key:"railway",value:"platform"},terms:["platform","public transit","public transportation","rail","track","train","transit","transportation"],name:"Train Stop / Platform"},"public_transport/platform_tram":{icon:"temaki-tram",fields:["{public_transport/platform}"],moreFields:["{public_transport/platform}"],geometry:["point","area"],tags:{public_transport:"platform",tram:"yes"},addTags:{public_transport:"platform",tram:"yes",railway:"platform"},removeTags:{public_transport:"platform",tram:"yes",railway:"platform"},reference:{key:"public_transport",value:"platform"},terms:["electric","light rail","platform","public transit","public transportation","rail","streetcar","track","tram","trolley","transit","transportation"],name:"Tram Stop / Platform"},"public_transport/platform_trolleybus":{icon:"temaki-trolleybus",fields:["{public_transport/platform}"],moreFields:["{public_transport/platform}"],geometry:["point","area"],tags:{public_transport:"platform",trolleybus:"yes"},addTags:{public_transport:"platform",trolleybus:"yes",highway:"bus_stop"},removeTags:{public_transport:"platform",trolleybus:"yes",highway:"bus_stop"},reference:{key:"public_transport",value:"platform"},terms:["bus","electric","platform","public transit","public transportation","streetcar","trackless","tram","trolley","transit","transportation"],name:"Trolleybus Stop / Platform"},"public_transport/platform":{icon:"maki-bus",fields:["name","ref_platform","network","operator","surface"],moreFields:["lit","bench","shelter","passenger_information_display","wheelchair"],geometry:["point","area"],tags:{public_transport:"platform"},terms:["platform","public transit","public transportation","transit","transportation"],name:"Transit Stop / Platform",matchScore:0.2},"public_transport/station_aerialway":{icon:"maki-aerialway",fields:["{public_transport/station}","aerialway/access","aerialway/summer/access"],moreFields:["{public_transport/station}"],geometry:["point","area"],tags:{public_transport:"station",aerialway:"yes"},reference:{key:"aerialway",value:"station"},terms:["aerialway","cable car","public transit","public transportation","station","terminal","transit","transportation"],name:"Aerialway Station"},"public_transport/station_bus":{icon:"maki-bus",fields:["{public_transport/station}"],moreFields:["{public_transport/station}"],geometry:["point","area"],tags:{public_transport:"station",bus:"yes"},addTags:{public_transport:"station",bus:"yes",amenity:"bus_station"},removeTags:{public_transport:"station",bus:"yes",amenity:"bus_station"},reference:{key:"amenity",value:"bus_station"},terms:["bus","public transit","public transportation","station","terminal","transit","transportation"],name:"Bus Station / Terminal"},"public_transport/station_ferry":{icon:"maki-ferry",fields:["{public_transport/station}"],moreFields:["{public_transport/station}"],geometry:["point","area"],tags:{public_transport:"station",ferry:"yes"},addTags:{public_transport:"station",ferry:"yes",amenity:"ferry_terminal"},removeTags:{public_transport:"station",ferry:"yes",amenity:"ferry_terminal"},reference:{key:"amenity",value:"ferry_terminal"},terms:["boat","dock","ferry","pier","public transit","public transportation","station","terminal","transit","transportation"],name:"Ferry Station / Terminal"},"public_transport/station_light_rail":{icon:"temaki-light_rail",fields:["{public_transport/station}"],moreFields:["{public_transport/station}"],geometry:["point","area"],tags:{public_transport:"station",light_rail:"yes"},addTags:{public_transport:"station",light_rail:"yes",railway:"station",station:"light_rail"},removeTags:{public_transport:"station",light_rail:"yes",railway:"station",station:"light_rail"},reference:{key:"station",value:"light_rail"},terms:["electric","light rail","public transit","public transportation","rail","station","terminal","track","tram","trolley","transit","transportation"],name:"Light Rail Station"},"public_transport/station_monorail":{icon:"temaki-monorail",fields:["{public_transport/station}"],moreFields:["{public_transport/station}"],geometry:["point","area"],tags:{public_transport:"station",monorail:"yes"},addTags:{public_transport:"station",monorail:"yes",railway:"station"},removeTags:{public_transport:"station",monorail:"yes",railway:"station"},reference:{key:"railway",value:"station"},terms:["monorail","public transit","public transportation","rail","station","terminal","transit","transportation"],name:"Monorail Station"},"public_transport/station_subway":{icon:"temaki-subway",fields:["{public_transport/station}"],moreFields:["{public_transport/station}"],geometry:["point","area"],tags:{public_transport:"station",subway:"yes"},addTags:{public_transport:"station",subway:"yes",railway:"station",station:"subway"},removeTags:{public_transport:"station",subway:"yes",railway:"station",station:"subway"},reference:{key:"station",value:"subway"},terms:["metro","public transit","public transportation","rail","station","subway","terminal","track","transit","transportation","underground"],name:"Subway Station"},"public_transport/station_train_halt":{icon:"maki-rail",fields:["{public_transport/station}"],moreFields:["{public_transport/station}"],geometry:["point","area"],tags:{public_transport:"station",train:"yes",railway:"halt"},reference:{key:"railway",value:"halt"},terms:["halt","public transit","public transportation","rail","station","track","train","transit","transportation","whistle stop"],name:"Train Station (Halt / Request)"},"public_transport/station_train":{icon:"maki-rail",fields:["{public_transport/station}"],moreFields:["{public_transport/station}"],geometry:["point","area"],tags:{public_transport:"station",train:"yes"},addTags:{public_transport:"station",train:"yes",railway:"station"},removeTags:{public_transport:"station",train:"yes",railway:"station"},reference:{key:"railway",value:"station"},terms:["public transit","public transportation","rail","station","terminal","track","train","transit","transportation"],name:"Train Station"},"public_transport/station_tram":{icon:"temaki-tram",fields:["{public_transport/station}"],moreFields:["{public_transport/station}"],geometry:["point","area"],tags:{public_transport:"station",tram:"yes"},reference:{key:"public_transport",value:"station"},terms:["electric","light rail","public transit","public transportation","rail","station","streetcar","terminal","track","tram","trolley","transit","transportation"],name:"Tram Station"},"public_transport/station_trolleybus":{icon:"temaki-trolleybus",fields:["{public_transport/station}"],moreFields:["{public_transport/station}"],geometry:["point","area"],tags:{public_transport:"station",trolleybus:"yes"},addTags:{public_transport:"station",trolleybus:"yes",amenity:"bus_station"},removeTags:{public_transport:"station",trolleybus:"yes",amenity:"bus_station"},reference:{key:"amenity",value:"bus_station"},terms:["bus","electric","public transit","public transportation","station","streetcar","terminal","trackless","tram","trolley","transit","transportation"],name:"Trolleybus Station / Terminal"},"public_transport/station":{icon:"maki-rail",fields:["name","network","operator","address","building_area","internet_access"],moreFields:["internet_access/fee","internet_access/ssid","website","phone","email","fax","wheelchair"],geometry:["point","area"],tags:{public_transport:"station"},terms:["public transit","public transportation","station","terminal","transit","transportation"],name:"Transit Station",matchScore:0.2},"public_transport/stop_area":{icon:"iD-relation",fields:["name","ref","network","operator"],geometry:["relation"],tags:{type:"public_transport",public_transport:"stop_area"},addTags:{type:"public_transport",public_transport:"stop_area","public_transport:version":"2"},removeTags:{type:"public_transport",public_transport:"stop_area","public_transport:version":"2"},reference:{key:"public_transport",value:"stop_area"},name:"Transit Stop Area"},"public_transport/stop_position_aerialway":{icon:"maki-aerialway",fields:["{public_transport/stop_position}"],moreFields:["{public_transport/stop_position}"],geometry:["vertex"],tags:{public_transport:"stop_position",aerialway:"yes"},reference:{key:"public_transport",value:"stop_position"},terms:["aerialway","cable car","public transit","public transportation","transit","transportation"],name:"Aerialway Stopping Location"},"public_transport/stop_position_bus":{icon:"maki-bus",fields:["{public_transport/stop_position}"],moreFields:["{public_transport/stop_position}"],geometry:["vertex"],tags:{public_transport:"stop_position",bus:"yes"},reference:{key:"public_transport",value:"stop_position"},terms:["bus","public transit","public transportation","transit","transportation"],name:"Bus Stopping Location"},"public_transport/stop_position_ferry":{icon:"maki-ferry",fields:["{public_transport/stop_position}"],moreFields:["{public_transport/stop_position}"],geometry:["vertex"],tags:{public_transport:"stop_position",ferry:"yes"},reference:{key:"public_transport",value:"stop_position"},terms:["boat","dock","ferry","pier","public transit","public transportation","transit","transportation"],name:"Ferry Stopping Location"},"public_transport/stop_position_light_rail":{icon:"temaki-light_rail",fields:["{public_transport/stop_position}"],moreFields:["{public_transport/stop_position}"],geometry:["vertex"],tags:{public_transport:"stop_position",light_rail:"yes"},addTags:{public_transport:"stop_position",light_rail:"yes",railway:"stop"},removeTags:{public_transport:"stop_position",light_rail:"yes",railway:"stop"},reference:{key:"railway",value:"stop"},terms:["electric","light rail","public transit","public transportation","rail","track","tram","trolley","transit","transportation"],name:"Light Rail Stopping Location"},"public_transport/stop_position_monorail":{icon:"temaki-monorail",fields:["{public_transport/stop_position}"],moreFields:["{public_transport/stop_position}"],geometry:["vertex"],tags:{public_transport:"stop_position",monorail:"yes"},addTags:{public_transport:"stop_position",monorail:"yes",railway:"stop"},removeTags:{public_transport:"stop_position",monorail:"yes",railway:"stop"},reference:{key:"railway",value:"stop"},terms:["monorail","public transit","public transportation","rail","transit","transportation"],name:"Monorail Stopping Location"},"public_transport/stop_position_subway":{icon:"temaki-subway",fields:["{public_transport/stop_position}"],moreFields:["{public_transport/stop_position}"],geometry:["vertex"],tags:{public_transport:"stop_position",subway:"yes"},addTags:{public_transport:"stop_position",subway:"yes",railway:"stop"},removeTags:{public_transport:"stop_position",subway:"yes",railway:"stop"},reference:{key:"railway",value:"stop"},terms:["metro","public transit","public transportation","rail","subway","track","transit","transportation","underground"],name:"Subway Stopping Location"},"public_transport/stop_position_train":{icon:"maki-rail",fields:["{public_transport/stop_position}"],moreFields:["{public_transport/stop_position}"],geometry:["vertex"],tags:{public_transport:"stop_position",train:"yes"},addTags:{public_transport:"stop_position",train:"yes",railway:"stop"},removeTags:{public_transport:"stop_position",train:"yes",railway:"stop"},reference:{key:"railway",value:"stop"},terms:["public transit","public transportation","rail","track","train","transit","transportation"],name:"Train Stopping Location"},"public_transport/stop_position_tram":{icon:"temaki-tram",fields:["{public_transport/stop_position}"],moreFields:["{public_transport/stop_position}"],geometry:["vertex"],tags:{public_transport:"stop_position",tram:"yes"},addTags:{public_transport:"stop_position",tram:"yes",railway:"tram_stop"},removeTags:{public_transport:"stop_position",tram:"yes",railway:"tram_stop"},reference:{key:"public_transport",value:"stop_position"},terms:["electric","light rail","public transit","public transportation","rail","streetcar","track","tram","trolley","transit","transportation"],name:"Tram Stopping Location"},"public_transport/stop_position_trolleybus":{icon:"temaki-trolleybus",fields:["{public_transport/stop_position}"],moreFields:["{public_transport/stop_position}"],geometry:["vertex"],tags:{public_transport:"stop_position",trolleybus:"yes"},reference:{key:"public_transport",value:"stop_position"},terms:["bus","electric","public transit","public transportation","streetcar","trackless","tram","trolley","transit","transportation"],name:"Trolleybus Stopping Location"},"public_transport/stop_position":{icon:"maki-bus",fields:["name","ref_stop_position","network","operator"],geometry:["vertex"],tags:{public_transport:"stop_position"},terms:["public transit","public transportation","transit","transportation"],name:"Transit Stopping Location",matchScore:0.2},"railway/halt":{icon:"maki-rail",geometry:["point","vertex"],tags:{railway:"halt"},terms:["break","interrupt","rest","wait","interruption"],name:"Train Station (Halt / Request)",searchable:false},"railway/platform":{icon:"iD-highway-footway",fields:["name","ref_platform","surface","lit","shelter"],geometry:["line","area"],tags:{railway:"platform"},name:"Train Stop / Platform",searchable:false},"railway/station":{icon:"maki-rail",fields:["name","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:"Train Station",searchable:false},"railway/tram_stop":{icon:"temaki-tram",fields:["name","network","operator"],geometry:["vertex"],tags:{railway:"tram_stop"},terms:["light rail","streetcar","tram","trolley"],name:"Tram Stopping Position",searchable:false},"railway/abandoned":{icon:"iD-railway-abandoned",fields:["name","structure","service_rail","usage_rail"],moreFields:["covered"],geometry:["line"],tags:{railway:"abandoned"},terms:[],name:"Abandoned Railway"},"railway/buffer_stop":{icon:"temaki-buffer_stop",geometry:["vertex"],tags:{railway:"buffer_stop"},terms:["stop","halt","buffer"],name:"Buffer Stop"},"railway/crossing":{icon:"temaki-pedestrian",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/derail":{icon:"maki-roadblock",geometry:["vertex"],tags:{railway:"derail"},terms:["derailer"],name:"Railway Derailer"},"railway/disused":{icon:"iD-railway-disused",fields:["structure","service_rail","usage_rail"],moreFields:["covered"],geometry:["line"],tags:{railway:"disused"},terms:[],name:"Disused Railway"},"railway/funicular":{icon:"iD-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/level_crossing":{icon:"maki-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/light_rail":{icon:"iD-railway-light-rail",fields:["name","structure","gauge","electrified","service_rail","usage_rail"],moreFields:["covered","frequency_electrified","maxspeed","voltage_electrified"],geometry:["line"],tags:{railway:"light_rail"},terms:["light rail","streetcar","trolley"],name:"Light Rail"},"railway/milestone":{icon:"temaki-milestone",geometry:["point","vertex"],fields:["railway/position","direction_vertex"],tags:{railway:"milestone"},terms:["milestone","marker"],name:"Railway Milestone"},"railway/miniature":{icon:"iD-railway-rail",fields:["name","structure","gauge","electrified","service_rail"],moreFields:["covered","frequency_electrified","maxspeed","voltage_electrified"],geometry:["line"],tags:{railway:"miniature"},terms:["rideable miniature railway","narrow gauge railway","minimum gauge railway"],name:"Miniature Railway"},"railway/monorail":{icon:"iD-railway-monorail",fields:["name","structure","electrified","service_rail","usage_rail"],moreFields:["covered","frequency_electrified","maxspeed","voltage_electrified"],geometry:["line"],tags:{railway:"monorail"},terms:[],name:"Monorail"},"railway/narrow_gauge":{icon:"iD-railway-rail",fields:["name","structure","gauge","electrified","service_rail","usage_rail"],moreFields:["covered","frequency_electrified","maxspeed","voltage_electrified"],geometry:["line"],tags:{railway:"narrow_gauge"},terms:["narrow gauge railway","narrow gauge railroad"],name:"Narrow Gauge Rail"},"railway/rail":{icon:"iD-railway-rail",fields:["name","structure","gauge","electrified","service_rail","usage_rail"],moreFields:["covered","frequency_electrified","maxspeed","voltage_electrified"],geometry:["line"],tags:{railway:"rail"},terms:[],name:"Rail"},"railway/signal":{icon:"temaki-railway_signals",geometry:["point","vertex"],fields:["railway/position","railway/signal/direction","ref"],tags:{railway:"signal"},terms:["signal","lights"],name:"Railway Signal"},"railway/subway_entrance":{icon:"maki-entrance",geometry:["point","vertex"],fields:["name"],tags:{railway:"subway_entrance"},terms:["metro","transit"],name:"Subway Entrance"},"railway/subway":{icon:"iD-railway-subway",fields:["name","structure","gauge","electrified","service_rail","usage_rail"],moreFields:["maxspeed","voltage_electrified","frequency_electrified"],geometry:["line"],tags:{railway:"subway"},terms:["metro","transit"],name:"Subway"},"railway/switch":{icon:"temaki-junction",geometry:["vertex"],tags:{railway:"switch"},terms:["switch","points"],name:"Railway Switch"},"railway/train_wash":{icon:"maki-rail",geometry:["point","vertex","area"],fields:["operator","building_area"],tags:{railway:"wash"},terms:["wash","clean"],name:"Train Wash"},"railway/tram":{icon:"iD-railway-light-rail",fields:["name","structure","gauge","electrified","service_rail","usage_rail"],moreFields:["covered","frequency_electrified","maxspeed","voltage_electrified"],geometry:["line"],tags:{railway:"tram"},terms:["light rail","streetcar","tram","trolley"],name:"Tram"},relation:{icon:"iD-relation",fields:["name","relation"],geometry:["relation"],tags:{},name:"Relation"},"route/ferry":{icon:"iD-ferry-line",geometry:["line"],fields:["name","operator","duration","access","to","from"],tags:{route:"ferry"},name:"Ferry Route"},"seamark/beacon_isolated_danger":{fields:["ref","operator","seamark/beacon_isolated_danger/shape","seamark/type"],geometry:["point","vertex"],terms:["beacon isolated danger","isolated danger beacon","iala"],tags:{"seamark:type":"beacon_isolated_danger"},name:"Danger Beacon"},"seamark/beacon_lateral":{fields:["ref","operator","seamark/beacon_lateral/colour","seamark/beacon_lateral/category","seamark/beacon_lateral/shape","seamark/beacon_lateral/system","seamark/type"],geometry:["point","vertex"],terms:["lateral beacon","beacon lateral","cevni","channel marker","iala","lateral mark"],tags:{"seamark:type":"beacon_lateral"},name:"Channel Beacon"},"seamark/buoy_lateral":{fields:["ref","operator","seamark/buoy_lateral/colour","seamark/buoy_lateral/category","seamark/buoy_lateral/shape","seamark/buoy_lateral/system","seamark/type"],geometry:["point","vertex"],terms:["lateral buoy","buoy lateral","cevni","channel marker","iala","lateral mark"],tags:{"seamark:type":"buoy_lateral"},name:"Channel Buoy"},"seamark/buoy_lateral/green":{geometry:["point","vertex"],terms:["lateral buoy","buoy lateral","cevni","channel marker","iala","lateral mark"],tags:{"seamark:type":"buoy_lateral","seamark:buoy_lateral:colour":"green"},name:"Green Buoy"},"seamark/buoy_lateral/red":{geometry:["point","vertex"],terms:["lateral buoy","buoy lateral","cevni","channel marker","iala","lateral mark"],tags:{"seamark:type":"buoy_lateral","seamark:buoy_lateral:colour":"red"},name:"Red Buoy"},"seamark/mooring":{fields:["ref","operator","seamark/mooring/category","seamark/type"],geometry:["point"],terms:["dolphin","pile","bollard","buoy","post"],tags:{"seamark:type":"mooring"},name:"Mooring"},shop:{icon:"maki-shop",fields:["name","shop","operator","address","building_area","opening_hours","payment_multi"],moreFields:["brand","currency_multi","website","phone","email","fax","wheelchair"],geometry:["point","area"],tags:{shop:"*"},terms:[],name:"Shop"},"shop/fishmonger":{icon:"maki-shop",geometry:["point","area"],tags:{shop:"fishmonger"},reference:{key:"shop",value:"seafood"},name:"Fishmonger",searchable:false},"shop/furnace":{icon:"maki-shop",geometry:["point","area"],terms:["oven","stove"],tags:{shop:"furnace"},name:"Furnace Store",searchable:false},"shop/vacant":{icon:"maki-shop",fields:["name","address","building_area"],geometry:["point","area"],tags:{shop:"vacant"},name:"Vacant Shop",searchable:false},"shop/agrarian":{icon:"maki-shop",fields:["{shop}","agrarian"],geometry:["point","area"],terms:["agricultural inputs","agricultural machines","seeds","pesticides","fertilizer","agricultural tools"],tags:{shop:"agrarian"},name:"Farm Supply Shop"},"shop/alcohol":{icon:"maki-alcohol-shop",fields:["{shop}","drive_through"],geometry:["point","area"],terms:["alcohol","beer","booze","wine"],tags:{shop:"alcohol"},name:"Liquor Store"},"shop/anime":{icon:"maki-shop",geometry:["point","area"],tags:{shop:"anime"},terms:["manga","japan","cosplay","figurine","dakimakura"],name:"Anime Shop"},"shop/antiques":{icon:"maki-shop",geometry:["point","area"],tags:{shop:"antiques"},name:"Antiques Shop"},"shop/appliance":{icon:"maki-shop",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:"maki-shop",geometry:["point","area"],terms:["art*","exhibit*","gallery"],tags:{shop:"art"},name:"Art Store"},"shop/baby_goods":{icon:"maki-shop",geometry:["point","area"],tags:{shop:"baby_goods"},name:"Baby Goods Store"},"shop/bag":{icon:"maki-shop",geometry:["point","area"],terms:["handbag","purse"],tags:{shop:"bag"},name:"Bag/Luggage Store"},"shop/bakery":{icon:"maki-bakery",geometry:["point","area"],tags:{shop:"bakery"},name:"Bakery"},"shop/bathroom_furnishing":{icon:"maki-shop",geometry:["point","area"],tags:{shop:"bathroom_furnishing"},name:"Bathroom Furnishing Store"},"shop/beauty":{icon:"maki-shop",fields:["{shop}","beauty"],geometry:["point","area"],terms:["spa","salon","tanning"],tags:{shop:"beauty"},name:"Beauty Shop"},"shop/beauty/nails":{icon:"maki-shop",geometry:["point","area"],terms:["manicure","pedicure"],tags:{shop:"beauty",beauty:"nails"},reference:{key:"shop",value:"beauty"},name:"Nail Salon"},"shop/beauty/tanning":{icon:"maki-shop",geometry:["point","area"],tags:{shop:"beauty",beauty:"tanning"},reference:{key:"leisure",value:"tanning_salon"},name:"Tanning Salon"},"shop/bed":{icon:"maki-lodging",geometry:["point","area"],tags:{shop:"bed"},name:"Bedding/Mattress Store"},"shop/beverages":{icon:"maki-shop",geometry:["point","area"],tags:{shop:"beverages"},name:"Beverage Store"},"shop/bicycle":{icon:"maki-bicycle",fields:["{shop}","service/bicycle"],geometry:["point","area"],terms:["bike","repair"],tags:{shop:"bicycle"},name:"Bicycle Shop"},"shop/bookmaker":{icon:"maki-shop",geometry:["point","area"],terms:["betting"],tags:{shop:"bookmaker"},name:"Bookmaker"},"shop/books":{icon:"maki-shop",fields:["{shop}","internet_access"],moreFields:["{shop}","internet_access/fee","internet_access/ssid"],geometry:["point","area"],tags:{shop:"books"},name:"Book Store"},"shop/boutique":{icon:"maki-shop",fields:["name","clothes","{shop}"],geometry:["point","area"],tags:{shop:"boutique"},name:"Boutique"},"shop/butcher":{icon:"maki-slaughterhouse",geometry:["point","area"],terms:["meat"],tags:{shop:"butcher"},name:"Butcher"},"shop/candles":{icon:"maki-shop",geometry:["point","area"],tags:{shop:"candles"},name:"Candle Shop"},"shop/car_parts":{icon:"maki-car",geometry:["point","area"],terms:["auto"],tags:{shop:"car_parts"},name:"Car Parts Store"},"shop/car_repair":{icon:"maki-car-repair",fields:["{shop}","service/vehicle"],geometry:["point","area"],terms:["auto","garage","service"],tags:{shop:"car_repair"},name:"Car Repair Shop"},"shop/car":{icon:"maki-car",fields:["name","brand","{shop}","second_hand","service/vehicle"],geometry:["point","area"],terms:["auto"],tags:{shop:"car"},name:"Car Dealership"},"shop/caravan":{icon:"temaki-rv_park",fields:["name","brand","{shop}","second_hand","service/vehicle"],geometry:["point","area"],terms:["auto"],tags:{shop:"caravan"},name:"RV Dealership"},"shop/carpet":{icon:"maki-shop",geometry:["point","area"],terms:["rug"],tags:{shop:"carpet"},name:"Carpet Store"},"shop/catalogue":{icon:"maki-shop",geometry:["point","area"],tags:{shop:"catalogue"},name:"Catalog Shop"},"shop/charity":{icon:"maki-shop",fields:["{shop}","second_hand"],geometry:["point","area"],terms:["thrift","op shop","nonprofit"],tags:{shop:"charity"},name:"Charity Store"},"shop/cheese":{icon:"maki-shop",geometry:["point","area"],tags:{shop:"cheese"},name:"Cheese Store"},"shop/chemist":{icon:"maki-grocery",geometry:["point","area"],tags:{shop:"chemist"},terms:["apothecary","beauty","drug store","drugstore","gift","hair","med*","pharmacy","prescription","tooth"],name:"Drugstore"},"shop/chocolate":{icon:"maki-shop",geometry:["point","area"],tags:{shop:"chocolate"},name:"Chocolate Store"},"shop/clothes":{icon:"maki-clothing-store",fields:["name","clothes","{shop}"],geometry:["point","area"],tags:{shop:"clothes"},name:"Clothing Store"},"shop/coffee":{icon:"maki-shop",geometry:["point","area"],tags:{shop:"coffee"},name:"Coffee Store"},"shop/computer":{icon:"maki-shop",geometry:["point","area"],tags:{shop:"computer"},name:"Computer Store"},"shop/confectionery":{icon:"maki-confectionery",geometry:["point","area"],terms:["sweet"],tags:{shop:"confectionery"},name:"Candy Store"},"shop/convenience":{icon:"maki-shop",geometry:["point","area"],tags:{shop:"convenience"},name:"Convenience Store"},"shop/copyshop":{icon:"maki-shop",geometry:["point","area"],tags:{shop:"copyshop"},name:"Copy Store"},"shop/cosmetics":{icon:"maki-shop",geometry:["point","area"],tags:{shop:"cosmetics"},name:"Cosmetics Store"},"shop/country_store":{icon:"maki-shop",geometry:["point","area"],tags:{shop:"country_store"},name:"Country Store"},"shop/craft":{icon:"maki-shop",geometry:["point","area"],tags:{shop:"craft"},terms:["art*","paint*","frame"],name:"Arts and Crafts Store"},"shop/curtain":{icon:"maki-shop",geometry:["point","area"],terms:["drape*","window"],tags:{shop:"curtain"},name:"Curtain Store"},"shop/dairy":{icon:"maki-shop",geometry:["point","area"],terms:["milk","egg","cheese"],tags:{shop:"dairy"},name:"Dairy Store"},"shop/deli":{icon:"maki-restaurant",geometry:["point","area"],terms:["lunch","meat","sandwich"],tags:{shop:"deli"},name:"Deli"},"shop/department_store":{icon:"maki-shop",geometry:["point","area"],tags:{shop:"department_store"},name:"Department Store"},"shop/doityourself":{icon:"temaki-tools",geometry:["point","area"],tags:{shop:"doityourself"},name:"DIY Store"},"shop/dry_cleaning":{icon:"maki-shop",geometry:["point","area"],tags:{shop:"dry_cleaning"},name:"Dry Cleaner"},"shop/e-cigarette":{icon:"maki-shop",geometry:["point","area"],tags:{shop:"e-cigarette"},terms:["electronic","vapor"],name:"E-Cigarette Shop"},"shop/electronics":{icon:"maki-shop",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:"maki-shop",geometry:["point","area"],terms:["sex","porn"],tags:{shop:"erotic"},name:"Erotic Store"},"shop/fabric":{icon:"maki-shop",geometry:["point","area"],terms:["sew"],tags:{shop:"fabric"},name:"Fabric Store"},"shop/farm":{icon:"maki-shop",geometry:["point","area"],terms:["farm shop","farm stand"],tags:{shop:"farm"},name:"Produce Stand"},"shop/fashion":{icon:"maki-shop",fields:["name","clothes","{shop}"],geometry:["point","area"],tags:{shop:"fashion"},name:"Fashion Store"},"shop/fireplace":{icon:"maki-shop",geometry:["point","area"],terms:["fireplace","stove","masonry heater"],tags:{shop:"fireplace"},name:"Fireplace Store"},"shop/fishing":{icon:"maki-shop",geometry:["point","area"],tags:{shop:"fishing"},name:"Fishing Shop"},"shop/florist":{icon:"maki-florist",geometry:["point","area"],terms:["flower"],tags:{shop:"florist"},name:"Florist"},"shop/frame":{icon:"maki-shop",geometry:["point","area"],tags:{shop:"frame"},terms:["art*","paint*","photo*","frame"],name:"Framing Shop"},"shop/frozen_food":{icon:"maki-shop",geometry:["point","area"],tags:{shop:"frozen_food"},name:"Frozen Food"},"shop/fuel":{icon:"maki-shop",fields:["{shop}","fuel_multi"],geometry:["point","area"],tags:{shop:"fuel"},name:"Fuel Shop",matchScore:0.5},"shop/funeral_directors":{icon:"maki-cemetery",fields:["{shop}","religion","denomination"],geometry:["point","area"],terms:["undertaker","memorial home"],tags:{shop:"funeral_directors"},name:"Funeral Home"},"shop/furniture":{icon:"fas-couch",geometry:["point","area"],terms:["chair","sofa","table"],tags:{shop:"furniture"},name:"Furniture Store"},"shop/garden_centre":{icon:"maki-garden-centre",geometry:["point","area"],terms:["landscape","mulch","shrub","tree"],tags:{shop:"garden_centre"},name:"Garden Center"},"shop/gas":{icon:"maki-shop",geometry:["point","area"],terms:["cng","lpg","natural gas","propane","refill","tank"],tags:{shop:"gas"},name:"Bottled Gas Shop"},"shop/gift":{icon:"maki-gift",geometry:["point","area"],terms:["souvenir"],tags:{shop:"gift"},name:"Gift Shop"},"shop/greengrocer":{icon:"maki-shop",geometry:["point","area"],terms:["fruit","vegetable"],tags:{shop:"greengrocer"},name:"Greengrocer"},"shop/hairdresser_supply":{icon:"maki-shop",geometry:["point","area"],terms:["barber","shampoo","conditioner"],tags:{shop:"hairdresser_supply"},name:"Hairdresser Supply Store"},"shop/hairdresser":{icon:"temaki-beauty_salon",geometry:["point","area"],terms:["barber"],tags:{shop:"hairdresser"},name:"Hairdresser"},"shop/hardware":{icon:"temaki-tools",geometry:["point","area"],tags:{shop:"hardware"},name:"Hardware Store"},"shop/health_food":{icon:"maki-shop",geometry:["point","area"],terms:["wholefood","vitamins","vegetarian","vegan"],tags:{shop:"health_food"},name:"Health Food Shop"},"shop/hearing_aids":{icon:"maki-shop",geometry:["point","area"],tags:{shop:"hearing_aids"},name:"Hearing Aids Store"},"shop/herbalist":{icon:"maki-shop",geometry:["point","area"],tags:{shop:"herbalist"},name:"Herbalist"},"shop/hifi":{icon:"maki-shop",geometry:["point","area"],terms:["stereo","video"],tags:{shop:"hifi"},name:"Hifi Store"},"shop/houseware":{icon:"fas-blender",geometry:["point","area"],terms:["home","household"],tags:{shop:"houseware"},name:"Houseware Store"},"shop/hunting":{icon:"maki-shop",geometry:["point","area"],tags:{shop:"hunting"},name:"Hunting Shop"},"shop/interior_decoration":{icon:"maki-shop",geometry:["point","area"],tags:{shop:"interior_decoration"},name:"Interior Decoration Store"},"shop/jewelry":{icon:"maki-jewelry-store",geometry:["point","area"],terms:["diamond","gem","ring"],tags:{shop:"jewelry"},name:"Jeweler"},"shop/kiosk":{icon:"maki-shop",fields:["{shop}","levels"],geometry:["point","area"],tags:{shop:"kiosk"},name:"Kiosk"},"shop/kitchen":{icon:"maki-shop",geometry:["point","area"],tags:{shop:"kitchen"},name:"Kitchen Design Store"},"shop/laundry":{icon:"maki-laundry",geometry:["point","area"],tags:{shop:"laundry"},name:"Laundry"},"shop/leather":{icon:"maki-shop",geometry:["point","area"],tags:{shop:"leather"},name:"Leather Store"},"shop/locksmith":{icon:"fas-key",geometry:["point","area"],terms:["key","lockpick"],tags:{shop:"locksmith"},name:"Locksmith"},"shop/lottery":{icon:"maki-shop",geometry:["point","area"],tags:{shop:"lottery"},name:"Lottery Shop"},"shop/mall":{icon:"maki-shop",geometry:["point","area"],terms:["shopping"],tags:{shop:"mall"},name:"Mall"},"shop/massage":{icon:"temaki-spa",geometry:["point","area"],tags:{shop:"massage"},name:"Massage Shop"},"shop/medical_supply":{icon:"maki-shop",geometry:["point","area"],tags:{shop:"medical_supply"},name:"Medical Supply Store"},"shop/mobile_phone":{icon:"maki-mobile-phone",geometry:["point","area"],tags:{shop:"mobile_phone"},name:"Mobile Phone Store"},"shop/money_lender":{icon:"maki-bank",fields:["{shop}","currency_multi"],geometry:["point","area"],tags:{shop:"money_lender"},name:"Money Lender"},"shop/motorcycle_repair":{icon:"fas-motorcycle",fields:["{shop}","service/vehicle"],geometry:["point","area"],terms:["auto","bike","garage","motorcycle","repair","service"],tags:{shop:"motorcycle_repair"},name:"Motorcycle Repair Shop"},"shop/motorcycle":{icon:"fas-motorcycle",fields:["name","brand","{shop}"],geometry:["point","area"],terms:["bike"],tags:{shop:"motorcycle"},name:"Motorcycle Dealership"},"shop/music":{icon:"maki-music",geometry:["point","area"],terms:["CD","vinyl"],tags:{shop:"music"},name:"Music Store"},"shop/musical_instrument":{icon:"maki-music",geometry:["point","area"],terms:["guitar"],tags:{shop:"musical_instrument"},name:"Musical Instrument Store"},"shop/newsagent":{icon:"maki-shop",geometry:["point","area"],tags:{shop:"newsagent"},name:"Newspaper/Magazine Shop"},"shop/nutrition_supplements":{icon:"maki-shop",geometry:["point","area"],tags:{shop:"nutrition_supplements"},name:"Nutrition Supplements Store"},"shop/optician":{icon:"maki-optician",geometry:["point","area"],terms:["eye","glasses"],tags:{shop:"optician"},name:"Optician"},"shop/organic":{icon:"maki-shop",geometry:["point","area"],tags:{shop:"supermarket",organic:"only"},name:"Organic Goods Store"},"shop/outdoor":{icon:"temaki-compass",geometry:["point","area"],terms:["camping","climbing","hiking","outfitter","outdoor equipment","outdoor supplies"],tags:{shop:"outdoor"},name:"Outdoors Store"},"shop/paint":{icon:"fas-paint-roller",geometry:["point","area"],tags:{shop:"paint"},name:"Paint Store"},"shop/party":{icon:"maki-shop",geometry:["point","area"],terms:["balloons","costumes","decorations","invitations"],tags:{shop:"party"},name:"Party Supply Store"},"shop/pastry":{icon:"maki-bakery",geometry:["point","area"],tags:{shop:"pastry"},terms:["patisserie","cake shop","cakery"],name:"Pastry Shop"},"shop/pawnbroker":{icon:"maki-shop",geometry:["point","area"],tags:{shop:"pawnbroker"},name:"Pawn Shop"},"shop/perfumery":{icon:"maki-shop",geometry:["point","area"],tags:{shop:"perfumery"},name:"Perfume Store"},"shop/pet_grooming":{icon:"maki-dog-park",geometry:["point","area"],terms:["dog"],tags:{shop:"pet_grooming"},name:"Pet Grooming Store"},"shop/pet":{icon:"maki-dog-park",geometry:["point","area"],terms:["animal","cat","dog","fish","kitten","puppy","reptile"],tags:{shop:"pet"},name:"Pet Store"},"shop/photo":{icon:"maki-attraction",geometry:["point","area"],terms:["camera","film"],tags:{shop:"photo"},name:"Photography Store"},"shop/pyrotechnics":{icon:"maki-shop",geometry:["point","area"],tags:{shop:"pyrotechnics"},name:"Fireworks Store"},"shop/radiotechnics":{icon:"maki-shop",geometry:["point","area"],tags:{shop:"radiotechnics"},name:"Radio/Electronic Component Store"},"shop/religion":{icon:"maki-shop",fields:["{shop}","religion","denomination"],geometry:["point","area"],tags:{shop:"religion"},name:"Religious Store"},"shop/scuba_diving":{icon:"maki-swimming",fields:["{shop}","scuba_diving"],geometry:["point","area"],terms:["diving","scuba"],tags:{shop:"scuba_diving"},name:"Scuba Diving Shop"},"shop/seafood":{icon:"maki-shop",geometry:["point","area"],terms:["fishmonger"],tags:{shop:"seafood"},name:"Seafood Shop"},"shop/second_hand":{icon:"maki-shop",fields:["{shop}","second_hand"],geometry:["point","area"],terms:["secondhand","second hand","resale","thrift","used"],tags:{shop:"second_hand"},name:"Consignment/Thrift Store"},"shop/sewing":{icon:"maki-shop",geometry:["point","area"],terms:["haberdashery"],tags:{shop:"sewing"},name:"Sewing Supply Shop"},"shop/shoes":{icon:"maki-shoe",geometry:["point","area"],tags:{shop:"shoes"},name:"Shoe Store"},"shop/sports":{icon:"maki-shop",geometry:["point","area"],tags:{shop:"sports"},name:"Sporting Goods Store"},"shop/stationery":{icon:"maki-shop",geometry:["point","area"],terms:["card","paper"],tags:{shop:"stationery"},name:"Stationery Store"},"shop/storage_rental":{icon:"fas-warehouse",geometry:["point","area"],tags:{shop:"storage_rental"},name:"Storage Rental"},"shop/supermarket":{icon:"maki-grocery",moreFields:["diet_multi","{shop}"],geometry:["point","area"],terms:["grocery","store","shop"],tags:{shop:"supermarket"},name:"Supermarket"},"shop/tailor":{icon:"maki-clothing-store",geometry:["point","area"],terms:["clothes","suit"],tags:{shop:"tailor"},name:"Tailor"},"shop/tattoo":{icon:"maki-shop",geometry:["point","area"],tags:{shop:"tattoo"},name:"Tattoo Parlor"},"shop/tea":{icon:"maki-teahouse",geometry:["point","area"],tags:{shop:"tea"},name:"Tea Store"},"shop/ticket":{icon:"maki-shop",geometry:["point","area"],tags:{shop:"ticket"},name:"Ticket Seller"},"shop/tiles":{icon:"maki-shop",geometry:["point","area"],tags:{shop:"tiles"},name:"Tile Shop"},"shop/tobacco":{icon:"maki-shop",geometry:["point","area"],tags:{shop:"tobacco"},name:"Tobacco Shop"},"shop/toys":{icon:"maki-shop",geometry:["point","area"],tags:{shop:"toys"},name:"Toy Store"},"shop/trade":{icon:"maki-shop",fields:["name","trade","{shop}"],geometry:["point","area"],tags:{shop:"trade"},name:"Trade Shop"},"shop/travel_agency":{icon:"maki-suitcase",geometry:["point","area"],tags:{shop:"travel_agency"},name:"Travel Agency"},"shop/tyres":{icon:"maki-shop",geometry:["point","area"],tags:{shop:"tyres"},name:"Tire Store"},"shop/vacuum_cleaner":{icon:"maki-shop",geometry:["point","area"],tags:{shop:"vacuum_cleaner"},name:"Vacuum Cleaner Store"},"shop/variety_store":{icon:"maki-shop",geometry:["point","area"],tags:{shop:"variety_store"},name:"Variety Store"},"shop/video_games":{icon:"maki-gaming",geometry:["point","area"],tags:{shop:"video_games"},name:"Video Game Store"},"shop/video":{icon:"temaki-movie_rental",geometry:["point","area"],terms:["DVD"],tags:{shop:"video"},name:"Video Store"},"shop/watches":{icon:"maki-watch",geometry:["point","area"],tags:{shop:"watches"},name:"Watches Shop"},"shop/water_sports":{icon:"maki-shop",geometry:["point","area"],tags:{shop:"water_sports"},name:"Watersport/Swim Shop"},"shop/water":{icon:"maki-shop",geometry:["point","area"],tags:{shop:"water"},name:"Drinking Water Shop"},"shop/weapons":{icon:"maki-shop",geometry:["point","area"],terms:["ammo","gun","knife","knives"],tags:{shop:"weapons"},name:"Weapon Shop"},"shop/wholesale":{icon:"maki-warehouse",fields:["{shop}","wholesale"],geometry:["point","area"],terms:["warehouse club","cash and carry"],tags:{shop:"wholesale"},name:"Wholesale Store"},"shop/window_blind":{icon:"temaki-window",geometry:["point","area"],tags:{shop:"window_blind"},name:"Window Blind Store"},"shop/wine":{icon:"maki-alcohol-shop",geometry:["point","area"],tags:{shop:"wine"},name:"Wine Shop"},tourism:{icon:"maki-attraction",fields:["name","tourism"],geometry:["point","vertex","area"],tags:{tourism:"*"},name:"Tourism"},"tourism/alpine_hut":{icon:"maki-lodging",fields:["name","operator","address","building_area","internet_access","fee"],moreFields:["payment_multi","internet_access/fee","internet_access/ssid","website","phone","email","fax","wheelchair"],geometry:["point","area"],terms:["climbing hut"],tags:{tourism:"alpine_hut"},name:"Alpine Hut"},"tourism/apartment":{icon:"maki-lodging",fields:["name","operator","address","building_area","rooms","internet_access"],moreFields:["smoking","payment_multi","internet_access/fee","internet_access/ssid","website","phone","email","fax","wheelchair"],geometry:["point","area"],tags:{tourism:"apartment"},name:"Guest Apartment / Condo"},"tourism/aquarium":{icon:"maki-aquarium",fields:["name","operator","address","building_area","opening_hours"],moreFields:["fee","payment_multi","smoking","website","phone","email","fax","wheelchair"],geometry:["point","area"],terms:["fish","sea","water"],tags:{tourism:"aquarium"},name:"Aquarium"},"tourism/artwork":{icon:"maki-art-gallery",fields:["name","artwork_type","artist"],moreFields:["material","website"],geometry:["point","vertex","line","area"],tags:{tourism:"artwork"},terms:["mural","sculpture","statue"],name:"Artwork"},"tourism/artwork/mural":{icon:"maki-art-gallery",fields:["name","artist"],geometry:["point","vertex","line","area"],tags:{tourism:"artwork",artwork_type:"mural"},reference:{key:"artwork_type",value:"mural"},terms:["fresco","wall painting"],name:"Mural"},"tourism/artwork/sculpture":{icon:"maki-art-gallery",fields:["name","artist","material"],geometry:["point","vertex","line","area"],tags:{tourism:"artwork",artwork_type:"sculpture"},reference:{key:"artwork_type",value:"sculpture"},terms:["statue","figure","carving"],name:"Sculpture"},"tourism/artwork/statue":{icon:"maki-art-gallery",fields:["name","artist","material"],geometry:["point","vertex","line","area"],tags:{tourism:"artwork",artwork_type:"statue"},reference:{key:"artwork_type",value:"statue"},terms:["sculpture","figure","carving"],name:"Statue"},"tourism/attraction":{icon:"maki-star",fields:["name","operator","address"],geometry:["point","vertex","area"],tags:{tourism:"attraction"},name:"Tourist Attraction"},"tourism/camp_site":{icon:"maki-campsite",fields:["name","operator","address","access_simple","capacity","fee","internet_access"],moreFields:["payment_multi","internet_access/fee","internet_access/ssid","sanitary_dump_station","power_supply","website","phone","email","fax","wheelchair"],geometry:["point","vertex","area"],terms:["tent","rv"],tags:{tourism:"camp_site"},name:"Campground"},"tourism/caravan_site":{icon:"temaki-rv_park",fields:["name","address","capacity","sanitary_dump_station","power_supply","internet_access"],moreFields:["operator","fee","payment_multi","internet_access/fee","internet_access/ssid","smoking","website","phone","email","fax","wheelchair"],geometry:["point","vertex","area"],terms:["Motor Home","Camper"],tags:{tourism:"caravan_site"},name:"RV Park"},"tourism/chalet":{icon:"maki-lodging",fields:["name","operator","address","building_area","internet_access"],moreFields:["smoking","payment_multi","internet_access/fee","internet_access/ssid","website","phone","email","fax","wheelchair"],geometry:["point","area"],terms:["holiday","holiday cottage","holiday home","vacation","vacation home"],tags:{tourism:"chalet"},name:"Holiday Cottage"},"tourism/gallery":{icon:"maki-art-gallery",fields:["name","operator","address","building_area","opening_hours"],moreFields:["payment_multi","website","phone","email","fax","wheelchair"],geometry:["point","area"],terms:["art*","exhibit*","paint*","photo*","sculpt*"],tags:{tourism:"gallery"},name:"Art Gallery"},"tourism/guest_house":{icon:"maki-lodging",fields:["name","operator","address","building_area","rooms","internet_access"],moreFields:["smoking","payment_multi","internet_access/fee","internet_access/ssid","website","phone","email","fax","wheelchair"],geometry:["point","area"],tags:{tourism:"guest_house"},terms:["B&B","Bed and Breakfast"],name:"Guest House"},"tourism/hostel":{icon:"maki-lodging",fields:["name","operator","address","building_area","rooms","internet_access"],moreFields:["smoking","payment_multi","internet_access/fee","internet_access/ssid","website","phone","email","fax","wheelchair"],geometry:["point","area"],tags:{tourism:"hostel"},name:"Hostel"},"tourism/hotel":{icon:"maki-lodging",fields:["name","brand","address","building_area","rooms","internet_access"],moreFields:["operator","smoking","payment_multi","internet_access/fee","internet_access/ssid","stars","website","phone","email","fax","wheelchair"],geometry:["point","area"],tags:{tourism:"hotel"},name:"Hotel"},"tourism/information":{icon:"maki-information",fields:["information","operator","address","building_area"],geometry:["point","vertex","area"],tags:{tourism:"information"},name:"Information"},"tourism/information/board":{icon:"maki-information",fields:["name","operator","board_type","direction"],geometry:["point","vertex"],tags:{tourism:"information",information:"board"},reference:{key:"information",value:"board"},name:"Information Board"},"tourism/information/guidepost":{icon:"maki-information",fields:["name","elevation","operator","ref"],moreFields:["material"],geometry:["point","vertex"],terms:["signpost"],tags:{tourism:"information",information:"guidepost"},reference:{key:"information",value:"guidepost"},name:"Guidepost"},"tourism/information/map":{icon:"maki-information",fields:["operator","map_type","map_size","direction"],geometry:["point","vertex"],tags:{tourism:"information",information:"map"},reference:{key:"information",value:"map"},name:"Map"},"tourism/information/office":{icon:"maki-information",fields:["name","operator","address","building_area"],moreFields:["internet_access","internet_access/fee","internet_access/ssid","website","phone","email","fax","wheelchair"],geometry:["point","vertex","area"],tags:{tourism:"information",information:"office"},reference:{key:"information",value:"office"},name:"Tourist Information Office"},"tourism/motel":{icon:"maki-lodging",fields:["name","brand","address","building_area","rooms","internet_access"],moreFields:["operator","smoking","payment_multi","internet_access/fee","internet_access/ssid","website","phone","email","fax","wheelchair"],geometry:["point","area"],tags:{tourism:"motel"},name:"Motel"},"tourism/museum":{icon:"maki-museum",fields:["name","operator","address","building_area","opening_hours"],moreFields:["fee","payment_multi","website","phone","email","fax","wheelchair"],geometry:["point","area"],terms:["art*","exhibit*","gallery","foundation","hall","institution","paint*","photo*","sculpt*"],tags:{tourism:"museum"},name:"Museum"},"tourism/picnic_site":{icon:"maki-picnic-site",fields:["name","operator","address","access_simple","capacity"],moreFields:["smoking","fee","payment_multi","website","wheelchair"],geometry:["point","vertex","area"],terms:["camp"],tags:{tourism:"picnic_site"},name:"Picnic Site"},"tourism/theme_park":{icon:"maki-amusement-park",fields:["name","operator","address","opening_hours"],moreFields:["payment_multi","website","phone","email","fax","wheelchair"],geometry:["point","area"],tags:{tourism:"theme_park"},name:"Theme Park"},"tourism/trail_riding_station":{icon:"maki-horse-riding",fields:["name","horse_stables","horse_riding","horse_dressage"],moreFields:["address","opening_hours","website","phone","email","fax"],geometry:["point","area"],tags:{tourism:"trail_riding_station"},name:"Trail Riding Station",matchScore:2},"tourism/viewpoint":{icon:"temaki-binoculars",geometry:["point","vertex"],fields:["direction"],tags:{tourism:"viewpoint"},name:"Viewpoint"},"tourism/wilderness_hut":{icon:"maki-lodging",fields:["name","operator","address","building_area","fee","fireplace"],moreFields:["payment_multi","wheelchair"],geometry:["point","area"],terms:["wilderness hut","backcountry hut","bothy"],tags:{tourism:"wilderness_hut"},name:"Wilderness Hut"},"tourism/zoo":{icon:"temaki-zoo",fields:["name","operator","address","opening_hours","fee"],moreFields:["payment_multi","website","phone","email","fax","wheelchair"],geometry:["point","area"],terms:["animal"],tags:{tourism:"zoo"},name:"Zoo"},traffic_calming:{icon:"temaki-diamond",fields:["traffic_calming","surface","direction_vertex"],geometry:["vertex","line","area"],tags:{traffic_calming:"*"},terms:["bump","hump","slow","speed"],name:"Traffic Calming"},"traffic_calming/bump":{icon:"temaki-diamond",fields:["surface","direction_vertex"],geometry:["vertex","line"],terms:["hump","speed","slow"],tags:{traffic_calming:"bump"},name:"Speed Bump"},"traffic_calming/chicane":{icon:"temaki-diamond",fields:["surface","direction_vertex"],geometry:["vertex","area"],terms:["driveway link","speed","slow"],tags:{traffic_calming:"chicane"},name:"Traffic Chicane"},"traffic_calming/choker":{icon:"temaki-diamond",fields:["surface","direction_vertex"],geometry:["vertex","area"],terms:["speed","slow"],tags:{traffic_calming:"choker"},name:"Traffic Choker"},"traffic_calming/cushion":{icon:"temaki-diamond",fields:["surface","direction_vertex"],geometry:["vertex","line"],terms:["bump","hump","speed","slow"],tags:{traffic_calming:"cushion"},name:"Speed Cushion"},"traffic_calming/dip":{icon:"temaki-diamond",fields:["surface","direction_vertex"],geometry:["vertex","line"],terms:["speed","slow"],tags:{traffic_calming:"dip"},name:"Dip"},"traffic_calming/hump":{icon:"temaki-diamond",fields:["surface","direction_vertex"],geometry:["vertex","line"],terms:["bump","speed","slow"],tags:{traffic_calming:"hump"},name:"Speed Hump"},"traffic_calming/island":{icon:"temaki-diamond",fields:["surface"],geometry:["vertex","area"],terms:["circle","roundabout","slow"],tags:{traffic_calming:"island"},name:"Traffic Island"},"traffic_calming/rumble_strip":{icon:"temaki-diamond",fields:["direction_vertex"],geometry:["vertex","line"],terms:["audible lines","sleeper lines","growlers"],tags:{traffic_calming:"rumble_strip"},name:"Rumble Strip"},"traffic_calming/table":{icon:"temaki-diamond",fields:["surface","direction_vertex"],geometry:["vertex"],tags:{traffic_calming:"table"},terms:["flat top","hump","speed","slow"],name:"Speed Table"},traffic_sign_vertex:{icon:"maki-square-stroked",fields:["traffic_sign","traffic_sign/direction"],geometry:["vertex"],tags:{traffic_sign:"*"},terms:["road","highway"],name:"Traffic Sign"},traffic_sign:{icon:"maki-square-stroked",fields:["traffic_sign","direction"],geometry:["point"],tags:{traffic_sign:"*"},terms:["road","highway"],name:"Traffic Sign"},"traffic_sign/city_limit_vertex":{icon:"maki-square-stroked",fields:["traffic_sign","traffic_sign/direction","name"],geometry:["vertex"],tags:{traffic_sign:"city_limit"},terms:["town","village","hamlet","boundary","edge","border","road","highway"],name:"City Limit Sign"},"traffic_sign/city_limit":{icon:"maki-square-stroked",fields:["traffic_sign","direction","name"],geometry:["point"],tags:{traffic_sign:"city_limit"},terms:["town","village","hamlet","boundary","edge","border","road","highway"],name:"City Limit Sign"},"traffic_sign/maxspeed_vertex":{icon:"maki-square-stroked",fields:["traffic_sign","traffic_sign/direction","maxspeed"],geometry:["vertex"],tags:{traffic_sign:"maxspeed"},terms:["max speed","maximum speed","road","highway"],name:"Speed Limit Sign"},"traffic_sign/maxspeed":{icon:"maki-square-stroked",fields:["traffic_sign","direction","maxspeed"],geometry:["point"],tags:{traffic_sign:"maxspeed"},terms:["max speed","maximum speed","road","highway"],name:"Speed Limit Sign"},"type/multipolygon":{icon:"iD-multipolygon",geometry:["area","relation"],tags:{type:"multipolygon"},removeTags:{},name:"Multipolygon",searchable:false,matchScore:0.1},"type/boundary":{icon:"iD-boundary",fields:["name","boundary"],geometry:["relation"],tags:{type:"boundary"},name:"Boundary"},"type/boundary/administrative":{icon:"iD-boundary",fields:["name","admin_level"],geometry:["relation"],tags:{type:"boundary",boundary:"administrative"},reference:{key:"boundary",value:"administrative"},name:"Administrative Boundary"},"type/enforcement":{icon:"iD-relation",fields:["name","enforcement"],geometry:["relation"],tags:{type:"enforcement"},name:"Enforcement"},"type/restriction":{icon:"iD-restriction",fields:["restriction","except"],geometry:["relation"],tags:{type:"restriction"},name:"Restriction"},"type/restriction/no_left_turn":{icon:"iD-restriction-no-left-turn",geometry:["relation"],tags:{type:"restriction",restriction:"no_left_turn"},name:"No Left Turn"},"type/restriction/no_right_turn":{icon:"iD-restriction-no-right-turn",geometry:["relation"],tags:{type:"restriction",restriction:"no_right_turn"},name:"No Right Turn"},"type/restriction/no_straight_on":{icon:"iD-restriction-no-straight-on",geometry:["relation"],tags:{type:"restriction",restriction:"no_straight_on"},name:"No Straight On"},"type/restriction/no_u_turn":{icon:"iD-restriction-no-u-turn",geometry:["relation"],tags:{type:"restriction",restriction:"no_u_turn"},name:"No U-turn"},"type/restriction/only_left_turn":{icon:"iD-restriction-only-left-turn",geometry:["relation"],tags:{type:"restriction",restriction:"only_left_turn"},name:"Only Left Turn"},"type/restriction/only_right_turn":{icon:"iD-restriction-only-right-turn",geometry:["relation"],tags:{type:"restriction",restriction:"only_right_turn"},name:"Only Right Turn"},"type/restriction/only_straight_on":{icon:"iD-restriction-only-straight-on",geometry:["relation"],tags:{type:"restriction",restriction:"only_straight_on"},name:"Only Straight On"},"type/restriction/only_u_turn":{icon:"iD-restriction-only-u-turn",geometry:["relation"],tags:{type:"restriction",restriction:"only_u_turn"},name:"Only U-turn"},"type/route_master":{icon:"iD-route-master",fields:["name","route_master","ref","operator","network"],geometry:["relation"],tags:{type:"route_master"},name:"Route Master"},"type/route":{icon:"iD-route",fields:["name","route","ref_route","operator","network"],geometry:["relation"],tags:{type:"route"},name:"Route"},"type/route/bicycle":{icon:"iD-route-bicycle",fields:["name","ref_route","network_bicycle","cycle_network","to","from"],geometry:["relation"],tags:{type:"route",route:"bicycle"},name:"Cycle Route"},"type/route/bus":{icon:"iD-route-bus",fields:["name","ref_route","operator","network","to","from"],geometry:["relation"],tags:{type:"route",route:"bus"},name:"Bus Route"},"type/route/detour":{icon:"iD-route-detour",fields:["name","ref_route","to","from"],geometry:["relation"],tags:{type:"route",route:"detour"},name:"Detour Route"},"type/route/ferry":{icon:"iD-route-ferry",fields:["name","ref_route","operator","network","to","from"],geometry:["relation"],tags:{type:"route",route:"ferry"},name:"Ferry Route"},"type/route/foot":{icon:"iD-route-foot",fields:["name","ref_route","operator","network_foot","to","from"],geometry:["relation"],tags:{type:"route",route:"foot"},name:"Foot Route"},"type/route/hiking":{icon:"iD-route-foot",fields:["name","ref_route","operator","network_foot","description","distance","to","from"],geometry:["relation"],tags:{type:"route",route:"hiking"},name:"Hiking Route"},"type/route/horse":{icon:"iD-route-horse",fields:["name","ref_route","operator","network_horse","description","distance","to","from"],geometry:["relation"],tags:{type:"route",route:"horse"},name:"Riding Route"},"type/route/light_rail":{icon:"iD-route-light-rail",fields:["name","ref_route","operator","network","to","from"],geometry:["relation"],tags:{type:"route",route:"light_rail"},name:"Light Rail Route"},"type/route/pipeline":{icon:"iD-route-pipeline",fields:["name","ref_route","operator","to","from"],geometry:["relation"],tags:{type:"route",route:"pipeline"},name:"Pipeline Route"},"type/route/piste":{icon:"iD-route-piste",fields:["name","piste/type","colour","ref_route","operator","to","from"],geometry:["relation"],tags:{type:"route",route:"piste"},name:"Piste/Ski Route"},"type/route/power":{icon:"iD-route-power",fields:["name","ref_route","operator","to","from"],geometry:["relation"],tags:{type:"route",route:"power"},name:"Power Route"},"type/route/road":{icon:"iD-route-road",fields:["name","ref_route","network_road","to","from"],geometry:["relation"],tags:{type:"route",route:"road"},name:"Road Route"},"type/route/subway":{icon:"iD-route-subway",fields:["name","ref_route","operator","network","to","from"],geometry:["relation"],tags:{type:"route",route:"subway"},name:"Subway Route"},"type/route/train":{icon:"iD-route-train",fields:["name","ref_route","operator","network","to","from"],geometry:["relation"],tags:{type:"route",route:"train"},name:"Train Route"},"type/route/tram":{icon:"iD-route-tram",fields:["name","ref_route","operator","network","to","from"],geometry:["relation"],tags:{type:"route",route:"tram"},name:"Tram Route"},"type/site":{icon:"iD-relation",fields:["name","site"],geometry:["relation"],tags:{type:"site"},name:"Site"},"type/waterway":{icon:"iD-route-water",fields:["name","waterway","ref"],geometry:["relation"],tags:{type:"waterway"},name:"Waterway"},vertex:{moreFields:["name"],geometry:["vertex"],tags:{},name:"Other",matchScore:0.1},"waterway/riverbank":{icon:"maki-water",geometry:["area"],tags:{waterway:"riverbank"},name:"Riverbank",searchable:false},"waterway/boatyard":{icon:"maki-harbor",fields:["name","operator"],moreFields:["address","website","phone","email","fax","wheelchair"],geometry:["area","vertex","point"],tags:{waterway:"boatyard"},name:"Boatyard"},"waterway/canal":{icon:"iD-waterway-canal",fields:["name","width","intermittent"],geometry:["line"],tags:{waterway:"canal"},name:"Canal"},"waterway/dam":{icon:"maki-dam",geometry:["point","vertex","line","area"],moreFields:["website"],fields:["name"],tags:{waterway:"dam"},name:"Dam"},"waterway/ditch":{icon:"iD-waterway-ditch",fields:["structure_waterway","intermittent"],geometry:["line"],tags:{waterway:"ditch"},name:"Ditch"},"waterway/dock":{icon:"maki-harbor",fields:["name","dock","operator"],geometry:["area","vertex","point"],terms:["boat","ship","vessel","marine"],tags:{waterway:"dock"},name:"Wet Dock / Dry Dock"},"waterway/drain":{icon:"iD-waterway-ditch",fields:["structure_waterway","intermittent"],geometry:["line"],tags:{waterway:"drain"},name:"Drain"},"waterway/fuel":{icon:"maki-fuel",fields:["name","operator","address","opening_hours","fuel_multi"],moreFields:["payment_multi","brand","seamark/type","building","website","phone","email","fax","wheelchair"],geometry:["point","area"],terms:["petrol","gas","diesel","boat"],tags:{waterway:"fuel"},name:"Marine Fuel Station"},"waterway/milestone":{icon:"temaki-milestone",fields:["distance","direction_vertex"],moreFields:["seamark/type"],geometry:["point","vertex"],tags:{waterway:"milestone"},terms:["milestone","marker"],name:"Waterway Milestone"},"waterway/river":{icon:"iD-waterway-river",fields:["name","structure_waterway","width","intermittent"],geometry:["line"],terms:["beck","branch","brook","course","creek","estuary","rill","rivulet","run","runnel","stream","tributary","watercourse"],tags:{waterway:"river"},name:"River"},"waterway/sanitary_dump_station":{icon:"temaki-storage_tank",fields:["name","operator","access_simple","fee","water_point"],moreFields:["opening_hours","payment_multi","seamark/type"],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_intermittent":{icon:"iD-waterway-stream",fields:["name","structure_waterway","width","intermittent"],geometry:["line"],terms:["arroyo","beck","branch","brook","burn","course","creek","drift","flood","flow","gully","run","runnel","rush","spate","spritz","tributary","wadi","wash","watercourse"],tags:{waterway:"stream",intermittent:"yes"},reference:{key:"waterway",value:"stream"},name:"Intermittent Stream"},"waterway/stream":{icon:"iD-waterway-stream",fields:["name","structure_waterway","width","intermittent"],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:"maki-drinking-water",geometry:["area","vertex","point"],tags:{waterway:"water_point"},name:"Marine Drinking Water"},"waterway/waterfall":{icon:"maki-waterfall",fields:["name","height","width","intermittent"],geometry:["vertex"],terms:["fall"],tags:{waterway:"waterfall"},name:"Waterfall"},"waterway/weir":{icon:"maki-dam",geometry:["vertex","line"],tags:{waterway:"weir"},name:"Weir"},"amenity/bank/ABANCA":{name:"ABANCA",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q9598744"},addTags:{amenity:"bank",brand:"ABANCA","brand:wikidata":"Q9598744","brand:wikipedia":"es:Abanca",name:"ABANCA"},removeTags:{amenity:"bank",brand:"ABANCA","brand:wikidata":"Q9598744","brand:wikipedia":"es:Abanca",name:"ABANCA"},matchScore:2,suggestion:true},"amenity/bank/ABN AMRO":{name:"ABN AMRO",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q287471"},addTags:{amenity:"bank",brand:"ABN AMRO","brand:wikidata":"Q287471","brand:wikipedia":"en:ABN AMRO",name:"ABN AMRO"},removeTags:{amenity:"bank",brand:"ABN AMRO","brand:wikidata":"Q287471","brand:wikipedia":"en:ABN AMRO",name:"ABN AMRO"},matchScore:2,suggestion:true},"amenity/bank/ABSA":{name:"ABSA",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q331688"},addTags:{amenity:"bank",brand:"ABSA","brand:wikidata":"Q331688","brand:wikipedia":"en:ABSA Group Limited",name:"ABSA"},removeTags:{amenity:"bank",brand:"ABSA","brand:wikidata":"Q331688","brand:wikipedia":"en:ABSA Group Limited",name:"ABSA"},matchScore:2,suggestion:true},"amenity/bank/AIB":{name:"AIB",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q1642179"},addTags:{amenity:"bank",brand:"AIB","brand:wikidata":"Q1642179","brand:wikipedia":"en:Allied Irish Banks",name:"AIB"},removeTags:{amenity:"bank",brand:"AIB","brand:wikidata":"Q1642179","brand:wikipedia":"en:Allied Irish Banks",name:"AIB"},matchScore:2,suggestion:true},"amenity/bank/ANZ":{name:"ANZ",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q714641"},addTags:{amenity:"bank",brand:"ANZ","brand:wikidata":"Q714641","brand:wikipedia":"en:Australia and New Zealand Banking Group",name:"ANZ"},removeTags:{amenity:"bank",brand:"ANZ","brand:wikidata":"Q714641","brand:wikipedia":"en:Australia and New Zealand Banking Group",name:"ANZ"},matchScore:2,suggestion:true},"amenity/bank/ASB Bank":{name:"ASB Bank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q297214"},addTags:{amenity:"bank",brand:"ASB Bank","brand:wikidata":"Q297214","brand:wikipedia":"en:ASB Bank",name:"ASB Bank"},removeTags:{amenity:"bank",brand:"ASB Bank","brand:wikidata":"Q297214","brand:wikipedia":"en:ASB Bank",name:"ASB Bank"},matchScore:2,suggestion:true},"amenity/bank/ATB Financial":{name:"ATB Financial",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q298762"},addTags:{amenity:"bank",brand:"ATB Financial","brand:wikidata":"Q298762","brand:wikipedia":"en:ATB Financial",name:"ATB Financial"},removeTags:{amenity:"bank",brand:"ATB Financial","brand:wikidata":"Q298762","brand:wikipedia":"en:ATB Financial",name:"ATB Financial"},matchScore:2,suggestion:true},"amenity/bank/AXA":{name:"AXA",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q160054"},addTags:{amenity:"bank",brand:"AXA","brand:wikidata":"Q160054","brand:wikipedia":"en:AXA",name:"AXA"},removeTags:{amenity:"bank",brand:"AXA","brand:wikidata":"Q160054","brand:wikipedia":"en:AXA",name:"AXA"},matchScore:2,suggestion:true},"amenity/bank/Agrani Bank Limited অগ্রণী ব্যাংক লিমিটেড":{name:"Agrani Bank Limited অগ্রণী ব্যাংক লিমিটেড",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q517050"},addTags:{amenity:"bank",brand:"Agrani Bank Limited অগ্রণী ব্যাংক লিমিটেড","brand:wikidata":"Q517050","brand:wikipedia":"en:Agrani Bank",name:"Agrani Bank Limited অগ্রণী ব্যাংক লিমিটেড"},removeTags:{amenity:"bank",brand:"Agrani Bank Limited অগ্রণী ব্যাংক লিমিটেড","brand:wikidata":"Q517050","brand:wikipedia":"en:Agrani Bank",name:"Agrani Bank Limited অগ্রণী ব্যাংক লিমিটেড"},matchScore:2,suggestion:true},"amenity/bank/Agribank":{name:"Agribank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q4693829"},addTags:{amenity:"bank",brand:"Agribank","brand:wikidata":"Q4693829","brand:wikipedia":"en:AgriBank",name:"Agribank"},removeTags:{amenity:"bank",brand:"Agribank","brand:wikidata":"Q4693829","brand:wikipedia":"en:AgriBank",name:"Agribank"},matchScore:2,suggestion:true},"amenity/bank/Akbank":{name:"Akbank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q416624"},addTags:{amenity:"bank",brand:"Akbank","brand:wikidata":"Q416624","brand:wikipedia":"en:Akbank",name:"Akbank"},removeTags:{amenity:"bank",brand:"Akbank","brand:wikidata":"Q416624","brand:wikipedia":"en:Akbank",name:"Akbank"},matchScore:2,suggestion:true},"amenity/bank/Alior Bank":{name:"Alior Bank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q9148395"},addTags:{amenity:"bank",brand:"Alior Bank","brand:wikidata":"Q9148395","brand:wikipedia":"en:Alior Bank",name:"Alior Bank"},removeTags:{amenity:"bank",brand:"Alior Bank","brand:wikidata":"Q9148395","brand:wikipedia":"en:Alior Bank",name:"Alior Bank"},matchScore:2,suggestion:true},"amenity/bank/Allahabad Bank":{name:"Allahabad Bank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q2018840"},addTags:{amenity:"bank",brand:"Allahabad Bank","brand:wikidata":"Q2018840","brand:wikipedia":"en:Allahabad Bank",name:"Allahabad Bank"},removeTags:{amenity:"bank",brand:"Allahabad Bank","brand:wikidata":"Q2018840","brand:wikipedia":"en:Allahabad Bank",name:"Allahabad Bank"},matchScore:2,suggestion:true},"amenity/bank/Allied Bank":{name:"Allied Bank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q4732555"},addTags:{amenity:"bank",brand:"Allied Bank","brand:wikidata":"Q4732555","brand:wikipedia":"en:Allied Banking Corporation",name:"Allied Bank"},removeTags:{amenity:"bank",brand:"Allied Bank","brand:wikidata":"Q4732555","brand:wikipedia":"en:Allied Banking Corporation",name:"Allied Bank"},matchScore:2,suggestion:true},"amenity/bank/Alpha Bank":{name:"Alpha Bank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q747394"},addTags:{amenity:"bank",brand:"Alpha Bank","brand:wikidata":"Q747394","brand:wikipedia":"en:Alpha Bank",name:"Alpha Bank"},removeTags:{amenity:"bank",brand:"Alpha Bank","brand:wikidata":"Q747394","brand:wikipedia":"en:Alpha Bank",name:"Alpha Bank"},matchScore:2,suggestion:true},"amenity/bank/Andhra Bank":{name:"Andhra Bank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q2003476"},addTags:{amenity:"bank",brand:"Andhra Bank","brand:wikidata":"Q2003476","brand:wikipedia":"en:Andhra Bank",name:"Andhra Bank"},removeTags:{amenity:"bank",brand:"Andhra Bank","brand:wikidata":"Q2003476","brand:wikipedia":"en:Andhra Bank",name:"Andhra Bank"},matchScore:2,suggestion:true},"amenity/bank/Antonveneta":{name:"Antonveneta",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q3633689"},addTags:{amenity:"bank",brand:"Antonveneta","brand:wikidata":"Q3633689","brand:wikipedia":"en:Banca Antonveneta",name:"Antonveneta"},removeTags:{amenity:"bank",brand:"Antonveneta","brand:wikidata":"Q3633689","brand:wikipedia":"en:Banca Antonveneta",name:"Antonveneta"},matchScore:2,suggestion:true},"amenity/bank/Argenta":{name:"Argenta",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q932856"},addTags:{amenity:"bank",brand:"Argenta","brand:wikidata":"Q932856","brand:wikipedia":"en:Argenta (bank)",name:"Argenta"},removeTags:{amenity:"bank",brand:"Argenta","brand:wikidata":"Q932856","brand:wikipedia":"en:Argenta (bank)",name:"Argenta"},matchScore:2,suggestion:true},"amenity/bank/Arvest Bank":{name:"Arvest Bank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q4802393"},addTags:{amenity:"bank",brand:"Arvest Bank","brand:wikidata":"Q4802393","brand:wikipedia":"en:Arvest Bank",name:"Arvest Bank"},removeTags:{amenity:"bank",brand:"Arvest Bank","brand:wikidata":"Q4802393","brand:wikipedia":"en:Arvest Bank",name:"Arvest Bank"},matchScore:2,suggestion:true},"amenity/bank/Asia United Bank":{name:"Asia United Bank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q4806482"},addTags:{amenity:"bank",brand:"Asia United Bank","brand:wikidata":"Q4806482","brand:wikipedia":"en:Asia United Bank",name:"Asia United Bank"},removeTags:{amenity:"bank",brand:"Asia United Bank","brand:wikidata":"Q4806482","brand:wikipedia":"en:Asia United Bank",name:"Asia United Bank"},matchScore:2,suggestion:true},"amenity/bank/Askari Bank":{name:"Askari Bank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q4807137"},addTags:{amenity:"bank",brand:"Askari Bank","brand:wikidata":"Q4807137","brand:wikipedia":"en:Askari Bank",name:"Askari Bank"},removeTags:{amenity:"bank",brand:"Askari Bank","brand:wikidata":"Q4807137","brand:wikipedia":"en:Askari Bank",name:"Askari Bank"},matchScore:2,suggestion:true},"amenity/bank/Associated Bank":{name:"Associated Bank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q4809155"},addTags:{amenity:"bank",brand:"Associated Bank","brand:wikidata":"Q4809155","brand:wikipedia":"en:Associated Banc-Corp",name:"Associated Bank"},removeTags:{amenity:"bank",brand:"Associated Bank","brand:wikidata":"Q4809155","brand:wikipedia":"en:Associated Banc-Corp",name:"Associated Bank"},matchScore:2,suggestion:true},"amenity/bank/Attijariwafa Bank":{name:"Attijariwafa Bank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q758052"},addTags:{amenity:"bank",brand:"Attijariwafa Bank","brand:wikidata":"Q758052","brand:wikipedia":"en:Attijariwafa Bank",name:"Attijariwafa Bank"},removeTags:{amenity:"bank",brand:"Attijariwafa Bank","brand:wikidata":"Q758052","brand:wikipedia":"en:Attijariwafa Bank",name:"Attijariwafa Bank"},matchScore:2,suggestion:true},"amenity/bank/Axis Bank":{name:"Axis Bank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q2003549"},addTags:{amenity:"bank",brand:"Axis Bank","brand:wikidata":"Q2003549","brand:wikipedia":"en:Axis Bank",name:"Axis Bank"},removeTags:{amenity:"bank",brand:"Axis Bank","brand:wikidata":"Q2003549","brand:wikipedia":"en:Axis Bank",name:"Axis Bank"},matchScore:2,suggestion:true},"amenity/bank/BAC":{name:"BAC",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q5715556"},addTags:{amenity:"bank",brand:"BAC","brand:wikidata":"Q5715556","brand:wikipedia":"en:Banco de America Central",name:"BAC"},removeTags:{amenity:"bank",brand:"BAC","brand:wikidata":"Q5715556","brand:wikipedia":"en:Banco de America Central",name:"BAC"},matchScore:2,suggestion:true},"amenity/bank/BAWAG PSK":{name:"BAWAG PSK",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q379938"},addTags:{amenity:"bank",brand:"BAWAG PSK","brand:wikidata":"Q379938","brand:wikipedia":"en:BAWAG P.S.K.",name:"BAWAG PSK"},removeTags:{amenity:"bank",brand:"BAWAG PSK","brand:wikidata":"Q379938","brand:wikipedia":"en:BAWAG P.S.K.",name:"BAWAG PSK"},matchScore:2,suggestion:true},"amenity/bank/BB&T":{name:"BB&T",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q795486"},addTags:{amenity:"bank",brand:"BB&T","brand:wikidata":"Q795486","brand:wikipedia":"en:BB&T",name:"BB&T"},removeTags:{amenity:"bank",brand:"BB&T","brand:wikidata":"Q795486","brand:wikipedia":"en:BB&T",name:"BB&T"},matchScore:2,suggestion:true},"amenity/bank/BBBank":{name:"BBBank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q795504"},addTags:{amenity:"bank",brand:"BBBank","brand:wikidata":"Q795504","brand:wikipedia":"en:BBBank",name:"BBBank"},removeTags:{amenity:"bank",brand:"BBBank","brand:wikidata":"Q795504","brand:wikipedia":"en:BBBank",name:"BBBank"},matchScore:2,suggestion:true},"amenity/bank/BBVA":{name:"BBVA",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q806189"},addTags:{amenity:"bank",brand:"BBVA","brand:wikidata":"Q806189","brand:wikipedia":"en:Banco Bilbao Vizcaya Argentaria",name:"BBVA"},removeTags:{amenity:"bank",brand:"BBVA","brand:wikidata":"Q806189","brand:wikipedia":"en:Banco Bilbao Vizcaya Argentaria",name:"BBVA"},matchScore:2,suggestion:true},"amenity/bank/BBVA Bancomer":{name:"BBVA Bancomer",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q2876794"},addTags:{amenity:"bank",brand:"BBVA Bancomer","brand:wikidata":"Q2876794","brand:wikipedia":"en:BBVA Bancomer",name:"BBVA Bancomer"},removeTags:{amenity:"bank",brand:"BBVA Bancomer","brand:wikidata":"Q2876794","brand:wikipedia":"en:BBVA Bancomer",name:"BBVA Bancomer"},matchScore:2,suggestion:true},"amenity/bank/BBVA Compass":{name:"BBVA Compass",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q4835088"},addTags:{amenity:"bank",brand:"BBVA Compass","brand:wikidata":"Q4835088","brand:wikipedia":"en:BBVA Compass",name:"BBVA Compass"},removeTags:{amenity:"bank",brand:"BBVA Compass","brand:wikidata":"Q4835088","brand:wikipedia":"en:BBVA Compass",name:"BBVA Compass"},matchScore:2,suggestion:true},"amenity/bank/BBVA Continental":{name:"BBVA Continental",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q4835089"},addTags:{amenity:"bank",brand:"BBVA Continental","brand:wikidata":"Q4835089","brand:wikipedia":"en:BBVA Continental",name:"BBVA Continental"},removeTags:{amenity:"bank",brand:"BBVA Continental","brand:wikidata":"Q4835089","brand:wikipedia":"en:BBVA Continental",name:"BBVA Continental"},matchScore:2,suggestion:true},"amenity/bank/BBVA Francés":{name:"BBVA Francés",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q2876788"},addTags:{amenity:"bank",brand:"BBVA Francés","brand:wikidata":"Q2876788","brand:wikipedia":"en:BBVA Francés",name:"BBVA Francés"},removeTags:{amenity:"bank",brand:"BBVA Francés","brand:wikidata":"Q2876788","brand:wikipedia":"en:BBVA Francés",name:"BBVA Francés"},matchScore:2,suggestion:true},"amenity/bank/BCA":{name:"BCA",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q806626"},addTags:{amenity:"bank",brand:"BCA","brand:wikidata":"Q806626","brand:wikipedia":"id:Bank Central Asia",name:"BCA"},removeTags:{amenity:"bank",brand:"BCA","brand:wikidata":"Q806626","brand:wikipedia":"id:Bank Central Asia",name:"BCA"},matchScore:2,suggestion:true},"amenity/bank/BCI":{name:"BCI",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q2882083"},addTags:{amenity:"bank",brand:"BCI","brand:wikidata":"Q2882083","brand:wikipedia":"es:Banco de Crédito e Inversiones",name:"BCI"},removeTags:{amenity:"bank",brand:"BCI","brand:wikidata":"Q2882083","brand:wikipedia":"es:Banco de Crédito e Inversiones",name:"BCI"},matchScore:2,suggestion:true},"amenity/bank/BCP (Bolivia)":{name:"BCP (Bolivia)",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q16826675"},addTags:{amenity:"bank",brand:"BCP","brand:wikidata":"Q16826675","brand:wikipedia":"es:Banco de Crédito de Bolivia",name:"BCP"},removeTags:{amenity:"bank",brand:"BCP","brand:wikidata":"Q16826675","brand:wikipedia":"es:Banco de Crédito de Bolivia",name:"BCP"},matchScore:2,suggestion:true},"amenity/bank/BCP (France)":{name:"BCP (France)",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q118581"},addTags:{amenity:"bank",brand:"BCP","brand:wikidata":"Q118581","brand:wikipedia":"pt:Banco Comercial Português",name:"BCP"},removeTags:{amenity:"bank",brand:"BCP","brand:wikidata":"Q118581","brand:wikipedia":"pt:Banco Comercial Português",name:"BCP"},matchScore:2,suggestion:true},"amenity/bank/BCP (Luxembourg)":{name:"BCP (Luxembourg)",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q118581"},addTags:{amenity:"bank",brand:"BCP","brand:wikidata":"Q118581","brand:wikipedia":"pt:Banco Comercial Português",name:"BCP"},removeTags:{amenity:"bank",brand:"BCP","brand:wikidata":"Q118581","brand:wikipedia":"pt:Banco Comercial Português",name:"BCP"},matchScore:2,suggestion:true},"amenity/bank/BCP (Peru)":{name:"BCP (Peru)",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q4854124"},addTags:{amenity:"bank",brand:"BCP","brand:wikidata":"Q4854124","brand:wikipedia":"es:Banco de Crédito del Perú",name:"BCP"},removeTags:{amenity:"bank",brand:"BCP","brand:wikidata":"Q4854124","brand:wikipedia":"es:Banco de Crédito del Perú",name:"BCP"},matchScore:2,suggestion:true},"amenity/bank/BCR":{name:"BCR",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q6951632"},addTags:{amenity:"bank",brand:"BCR","brand:wikidata":"Q6951632","brand:wikipedia":"es:Banco de Costa Rica",name:"BCR"},removeTags:{amenity:"bank",brand:"BCR","brand:wikidata":"Q6951632","brand:wikipedia":"es:Banco de Costa Rica",name:"BCR"},matchScore:2,suggestion:true},"amenity/bank/BDO":{name:"BDO",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q4854129"},addTags:{amenity:"bank",brand:"BDO","brand:wikidata":"Q4854129","brand:wikipedia":"en:Banco de Oro",name:"BDO"},removeTags:{amenity:"bank",brand:"BDO","brand:wikidata":"Q4854129","brand:wikipedia":"en:Banco de Oro",name:"BDO"},matchScore:2,suggestion:true},"amenity/bank/BGŻ BNP Paribas":{name:"BGŻ BNP Paribas",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q9164980"},addTags:{amenity:"bank",brand:"BGŻ BNP Paribas","brand:wikidata":"Q9164980","brand:wikipedia":"pl:Bank BGŻ BNP Paribas",name:"BGŻ BNP Paribas"},removeTags:{amenity:"bank",brand:"BGŻ BNP Paribas","brand:wikidata":"Q9164980","brand:wikipedia":"pl:Bank BGŻ BNP Paribas",name:"BGŻ BNP Paribas"},matchScore:2,suggestion:true},"amenity/bank/BMCE Bank":{name:"BMCE Bank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q2300433"},addTags:{amenity:"bank",brand:"BMCE Bank","brand:wikidata":"Q2300433","brand:wikipedia":"ar:البنك المغربي للتجارة الخارجية",name:"BMCE Bank"},removeTags:{amenity:"bank",brand:"BMCE Bank","brand:wikidata":"Q2300433","brand:wikipedia":"ar:البنك المغربي للتجارة الخارجية",name:"BMCE Bank"},matchScore:2,suggestion:true},"amenity/bank/BMCI":{name:"BMCI",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q2883409"},addTags:{amenity:"bank",brand:"BMCI","brand:wikidata":"Q2883409","brand:wikipedia":"ar:البنك المغربي للتجارة والصناعة",name:"BMCI"},removeTags:{amenity:"bank",brand:"BMCI","brand:wikidata":"Q2883409","brand:wikipedia":"ar:البنك المغربي للتجارة والصناعة",name:"BMCI"},matchScore:2,suggestion:true},"amenity/bank/BMN":{name:"BMN",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q3754900"},addTags:{amenity:"bank",brand:"BMN","brand:wikidata":"Q3754900","brand:wikipedia":"es:Banco Mare Nostrum",name:"BMN"},removeTags:{amenity:"bank",brand:"BMN","brand:wikidata":"Q3754900","brand:wikipedia":"es:Banco Mare Nostrum",name:"BMN"},matchScore:2,suggestion:true},"amenity/bank/BMO":{name:"BMO",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q806693"},addTags:{amenity:"bank",brand:"BMO","brand:wikidata":"Q806693","brand:wikipedia":"en:Bank of Montreal",name:"BMO"},removeTags:{amenity:"bank",brand:"BMO","brand:wikidata":"Q806693","brand:wikipedia":"en:Bank of Montreal",name:"BMO"},matchScore:2,suggestion:true},"amenity/bank/BMO Harris Bank":{name:"BMO Harris Bank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q4835981"},addTags:{amenity:"bank",brand:"BMO Harris Bank","brand:wikidata":"Q4835981","brand:wikipedia":"en:BMO Harris Bank",name:"BMO Harris Bank"},removeTags:{amenity:"bank",brand:"BMO Harris Bank","brand:wikidata":"Q4835981","brand:wikipedia":"en:BMO Harris Bank",name:"BMO Harris Bank"},matchScore:2,suggestion:true},"amenity/bank/BNA":{name:"BNA",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q2883410"},addTags:{amenity:"bank",brand:"BNA","brand:wikidata":"Q2883410","brand:wikipedia":"fr:Banque nationale d'Algérie",name:"BNA"},removeTags:{amenity:"bank",brand:"BNA","brand:wikidata":"Q2883410","brand:wikipedia":"fr:Banque nationale d'Algérie",name:"BNA"},matchScore:2,suggestion:true},"amenity/bank/BNI":{name:"BNI",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q2882611"},addTags:{amenity:"bank",brand:"BNI","brand:wikidata":"Q2882611","brand:wikipedia":"id:Bank Negara Indonesia",name:"BNI"},removeTags:{amenity:"bank",brand:"BNI","brand:wikidata":"Q2882611","brand:wikipedia":"id:Bank Negara Indonesia",name:"BNI"},matchScore:2,suggestion:true},"amenity/bank/BNL":{name:"BNL",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q2201225"},addTags:{amenity:"bank",brand:"BNL","brand:wikidata":"Q2201225","brand:wikipedia":"en:Banca Nazionale del Lavoro",name:"BNL"},removeTags:{amenity:"bank",brand:"BNL","brand:wikidata":"Q2201225","brand:wikipedia":"en:Banca Nazionale del Lavoro",name:"BNL"},matchScore:2,suggestion:true},"amenity/bank/BNP Paribas":{name:"BNP Paribas",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q499707"},addTags:{amenity:"bank",brand:"BNP Paribas","brand:wikidata":"Q499707","brand:wikipedia":"en:BNP Paribas",name:"BNP Paribas"},removeTags:{amenity:"bank",brand:"BNP Paribas","brand:wikidata":"Q499707","brand:wikipedia":"en:BNP Paribas",name:"BNP Paribas"},matchScore:2,suggestion:true},"amenity/bank/BNP Paribas Fortis":{name:"BNP Paribas Fortis",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q796827"},addTags:{amenity:"bank",brand:"BNP Paribas Fortis","brand:wikidata":"Q796827","brand:wikipedia":"en:BNP Paribas Fortis",name:"BNP Paribas Fortis"},removeTags:{amenity:"bank",brand:"BNP Paribas Fortis","brand:wikidata":"Q796827","brand:wikipedia":"en:BNP Paribas Fortis",name:"BNP Paribas Fortis"},matchScore:2,suggestion:true},"amenity/bank/BOC":{name:"BOC",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q790068"},addTags:{amenity:"bank",brand:"BOC","brand:wikidata":"Q790068","brand:wikipedia":"en:Bank of China",name:"BOC"},removeTags:{amenity:"bank",brand:"BOC","brand:wikidata":"Q790068","brand:wikipedia":"en:Bank of China",name:"BOC"},matchScore:2,suggestion:true},"amenity/bank/BPI":{name:"BPI",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q2501256"},addTags:{amenity:"bank",brand:"BPI","brand:wikidata":"Q2501256","brand:wikipedia":"en:Bank of the Philippine Islands",name:"BPI"},removeTags:{amenity:"bank",brand:"BPI","brand:wikidata":"Q2501256","brand:wikipedia":"en:Bank of the Philippine Islands",name:"BPI"},matchScore:2,suggestion:true},"amenity/bank/BRD":{name:"BRD",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q796927"},addTags:{amenity:"bank",brand:"BRD","brand:wikidata":"Q796927","brand:wikipedia":"ro:BRD - Groupe Société Générale",name:"BRD"},removeTags:{amenity:"bank",brand:"BRD","brand:wikidata":"Q796927","brand:wikipedia":"ro:BRD - Groupe Société Générale",name:"BRD"},matchScore:2,suggestion:true},"amenity/bank/BRED":{name:"BRED",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q2877455"},addTags:{amenity:"bank",brand:"BRED","brand:wikidata":"Q2877455","brand:wikipedia":"fr:BRED Banque populaire",name:"BRED"},removeTags:{amenity:"bank",brand:"BRED","brand:wikidata":"Q2877455","brand:wikipedia":"fr:BRED Banque populaire",name:"BRED"},matchScore:2,suggestion:true},"amenity/bank/BRI":{name:"BRI",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q623042"},addTags:{amenity:"bank",brand:"BRI","brand:wikidata":"Q623042","brand:wikipedia":"id:Bank Rakyat Indonesia",name:"BRI"},removeTags:{amenity:"bank",brand:"BRI","brand:wikidata":"Q623042","brand:wikipedia":"id:Bank Rakyat Indonesia",name:"BRI"},matchScore:2,suggestion:true},"amenity/bank/BTN":{name:"BTN",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q12474534"},addTags:{amenity:"bank",brand:"BTN","brand:en":"BTN","brand:wikidata":"Q12474534","brand:wikipedia":"id:Bank Tabungan Negara",name:"BTN","name:en":"BTN"},removeTags:{amenity:"bank",brand:"BTN","brand:en":"BTN","brand:wikidata":"Q12474534","brand:wikipedia":"id:Bank Tabungan Negara",name:"BTN","name:en":"BTN"},matchScore:2,suggestion:true},"amenity/bank/BW-Bank":{name:"BW-Bank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q798891"},addTags:{amenity:"bank",brand:"BW-Bank","brand:en":"BW-Bank","brand:wikidata":"Q798891","brand:wikipedia":"de:Baden-Württembergische Bank",name:"BW-Bank","name:en":"BW-Bank"},removeTags:{amenity:"bank",brand:"BW-Bank","brand:en":"BW-Bank","brand:wikidata":"Q798891","brand:wikipedia":"de:Baden-Württembergische Bank",name:"BW-Bank","name:en":"BW-Bank"},matchScore:2,suggestion:true},"amenity/bank/Banamex":{name:"Banamex",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q749474"},addTags:{amenity:"bank",brand:"Banamex","brand:wikidata":"Q749474","brand:wikipedia":"en:Grupo Financiero Banamex",name:"Banamex"},removeTags:{amenity:"bank",brand:"Banamex","brand:wikidata":"Q749474","brand:wikipedia":"en:Grupo Financiero Banamex",name:"Banamex"},matchScore:2,suggestion:true},"amenity/bank/Banca Intesa":{name:"Banca Intesa",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q647092"},addTags:{amenity:"bank",brand:"Banca Intesa","brand:wikidata":"Q647092","brand:wikipedia":"en:Banca Intesa",name:"Banca Intesa"},removeTags:{amenity:"bank",brand:"Banca Intesa","brand:wikidata":"Q647092","brand:wikipedia":"en:Banca Intesa",name:"Banca Intesa"},matchScore:2,suggestion:true},"amenity/bank/Banca March":{name:"Banca March",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q578252"},addTags:{amenity:"bank",brand:"Banca March","brand:wikidata":"Q578252","brand:wikipedia":"en:Banca March",name:"Banca March"},removeTags:{amenity:"bank",brand:"Banca March","brand:wikidata":"Q578252","brand:wikipedia":"en:Banca March",name:"Banca March"},matchScore:2,suggestion:true},"amenity/bank/Banca Popolare di Milano":{name:"Banca Popolare di Milano",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q806154"},addTags:{amenity:"bank",brand:"Banca Popolare di Milano","brand:wikidata":"Q806154","brand:wikipedia":"en:Banca Popolare di Milano",name:"Banca Popolare di Milano"},removeTags:{amenity:"bank",brand:"Banca Popolare di Milano","brand:wikidata":"Q806154","brand:wikipedia":"en:Banca Popolare di Milano",name:"Banca Popolare di Milano"},matchScore:2,suggestion:true},"amenity/bank/Banca Popolare di Novara":{name:"Banca Popolare di Novara",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q3633742"},addTags:{amenity:"bank",brand:"Banca Popolare di Novara","brand:wikidata":"Q3633742","brand:wikipedia":"en:Banca Popolare di Novara",name:"Banca Popolare di Novara"},removeTags:{amenity:"bank",brand:"Banca Popolare di Novara","brand:wikidata":"Q3633742","brand:wikipedia":"en:Banca Popolare di Novara",name:"Banca Popolare di Novara"},matchScore:2,suggestion:true},"amenity/bank/Banca Popolare di Sondrio":{name:"Banca Popolare di Sondrio",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q686176"},addTags:{amenity:"bank",brand:"Banca Popolare di Sondrio","brand:wikidata":"Q686176","brand:wikipedia":"en:Banca Popolare di Sondrio",name:"Banca Popolare di Sondrio"},removeTags:{amenity:"bank",brand:"Banca Popolare di Sondrio","brand:wikidata":"Q686176","brand:wikipedia":"en:Banca Popolare di Sondrio",name:"Banca Popolare di Sondrio"},matchScore:2,suggestion:true},"amenity/bank/Banca Popolare di Verona":{name:"Banca Popolare di Verona",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q3167468"},addTags:{amenity:"bank",brand:"Banca Popolare di Verona","brand:wikidata":"Q3167468","brand:wikipedia":"en:Banca Popolare di Verona",name:"Banca Popolare di Verona"},removeTags:{amenity:"bank",brand:"Banca Popolare di Verona","brand:wikidata":"Q3167468","brand:wikipedia":"en:Banca Popolare di Verona",name:"Banca Popolare di Verona"},matchScore:2,suggestion:true},"amenity/bank/Banca Popolare di Vicenza":{name:"Banca Popolare di Vicenza",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q3127200"},addTags:{amenity:"bank",brand:"Banca Popolare di Vicenza","brand:wikidata":"Q3127200","brand:wikipedia":"en:Banca Popolare di Vicenza",name:"Banca Popolare di Vicenza"},removeTags:{amenity:"bank",brand:"Banca Popolare di Vicenza","brand:wikidata":"Q3127200","brand:wikipedia":"en:Banca Popolare di Vicenza",name:"Banca Popolare di Vicenza"},matchScore:2,suggestion:true},"amenity/bank/Banca Românească":{name:"Banca Românească",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q4854052"},addTags:{amenity:"bank",brand:"Banca Românească","brand:wikidata":"Q4854052","brand:wikipedia":"en:Banca Românească",name:"Banca Românească"},removeTags:{amenity:"bank",brand:"Banca Românească","brand:wikidata":"Q4854052","brand:wikipedia":"en:Banca Românească",name:"Banca Românească"},matchScore:2,suggestion:true},"amenity/bank/Banca Sella":{name:"Banca Sella",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q3633749"},addTags:{amenity:"bank",brand:"Banca Sella","brand:wikidata":"Q3633749","brand:wikipedia":"en:Banca Sella Group",name:"Banca Sella"},removeTags:{amenity:"bank",brand:"Banca Sella","brand:wikidata":"Q3633749","brand:wikipedia":"en:Banca Sella Group",name:"Banca Sella"},matchScore:2,suggestion:true},"amenity/bank/Banca Transilvania":{name:"Banca Transilvania",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q806161"},addTags:{amenity:"bank",brand:"Banca Transilvania","brand:wikidata":"Q806161","brand:wikipedia":"en:Banca Transilvania",name:"Banca Transilvania"},removeTags:{amenity:"bank",brand:"Banca Transilvania","brand:wikidata":"Q806161","brand:wikipedia":"en:Banca Transilvania",name:"Banca Transilvania"},matchScore:2,suggestion:true},"amenity/bank/Bancaribe":{name:"Bancaribe",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q5717827"},addTags:{amenity:"bank",brand:"Bancaribe","brand:wikidata":"Q5717827","brand:wikipedia":"en:Bancaribe",name:"Bancaribe"},removeTags:{amenity:"bank",brand:"Bancaribe","brand:wikidata":"Q5717827","brand:wikipedia":"en:Bancaribe",name:"Bancaribe"},matchScore:2,suggestion:true},"amenity/bank/Banco AV Villas":{name:"Banco AV Villas",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q4854068"},addTags:{amenity:"bank",brand:"Banco AV Villas","brand:wikidata":"Q4854068","brand:wikipedia":"en:Banco AV Villas",name:"Banco AV Villas"},removeTags:{amenity:"bank",brand:"Banco AV Villas","brand:wikidata":"Q4854068","brand:wikipedia":"en:Banco AV Villas",name:"Banco AV Villas"},matchScore:2,suggestion:true},"amenity/bank/Banco Agrario":{name:"Banco Agrario",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q20013358"},addTags:{amenity:"bank",brand:"Banco Agrario","brand:wikidata":"Q20013358","brand:wikipedia":"en:Banco Agrario de Colombia",name:"Banco Agrario"},removeTags:{amenity:"bank",brand:"Banco Agrario","brand:wikidata":"Q20013358","brand:wikipedia":"en:Banco Agrario de Colombia",name:"Banco Agrario"},matchScore:2,suggestion:true},"amenity/bank/Banco Agrario de Colombia":{name:"Banco Agrario de Colombia",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q20013358"},addTags:{amenity:"bank",brand:"Banco Agrario de Colombia","brand:wikidata":"Q20013358","brand:wikipedia":"en:Banco Agrario de Colombia",name:"Banco Agrario de Colombia"},removeTags:{amenity:"bank",brand:"Banco Agrario de Colombia","brand:wikidata":"Q20013358","brand:wikipedia":"en:Banco Agrario de Colombia",name:"Banco Agrario de Colombia"},matchScore:2,suggestion:true},"amenity/bank/Banco Azteca":{name:"Banco Azteca",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q4854076"},addTags:{amenity:"bank",brand:"Banco Azteca","brand:wikidata":"Q4854076","brand:wikipedia":"en:Banco Azteca",name:"Banco Azteca"},removeTags:{amenity:"bank",brand:"Banco Azteca","brand:wikidata":"Q4854076","brand:wikipedia":"en:Banco Azteca",name:"Banco Azteca"},matchScore:2,suggestion:true},"amenity/bank/Banco BPM":{name:"Banco BPM",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q27331643"},addTags:{amenity:"bank",brand:"Banco BPM","brand:wikidata":"Q27331643","brand:wikipedia":"en:Banco BPM",name:"Banco BPM"},removeTags:{amenity:"bank",brand:"Banco BPM","brand:wikidata":"Q27331643","brand:wikipedia":"en:Banco BPM",name:"Banco BPM"},matchScore:2,suggestion:true},"amenity/bank/Banco Caja Social":{name:"Banco Caja Social",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q5717869"},addTags:{amenity:"bank",brand:"Banco Caja Social","brand:wikidata":"Q5717869","brand:wikipedia":"es:Banco Caja Social",name:"Banco Caja Social"},removeTags:{amenity:"bank",brand:"Banco Caja Social","brand:wikidata":"Q5717869","brand:wikipedia":"es:Banco Caja Social",name:"Banco Caja Social"},matchScore:2,suggestion:true},"amenity/bank/Banco Ciudad":{name:"Banco Ciudad",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q4856204"},addTags:{amenity:"bank",brand:"Banco Ciudad","brand:wikidata":"Q4856204","brand:wikipedia":"en:Bank of the City of Buenos Aires",name:"Banco Ciudad"},removeTags:{amenity:"bank",brand:"Banco Ciudad","brand:wikidata":"Q4856204","brand:wikipedia":"en:Bank of the City of Buenos Aires",name:"Banco Ciudad"},matchScore:2,suggestion:true},"amenity/bank/Banco Continental":{name:"Banco Continental",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q4835089"},addTags:{amenity:"bank",brand:"Banco Continental","brand:wikidata":"Q4835089","brand:wikipedia":"en:BBVA Continental",name:"Banco Continental"},removeTags:{amenity:"bank",brand:"Banco Continental","brand:wikidata":"Q4835089","brand:wikipedia":"en:BBVA Continental",name:"Banco Continental"},matchScore:2,suggestion:true},"amenity/bank/Banco Estado":{name:"Banco Estado",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q5718188"},addTags:{amenity:"bank",brand:"Banco Estado","brand:wikidata":"Q5718188","brand:wikipedia":"es:Banco del Estado de Chile",name:"Banco Estado"},removeTags:{amenity:"bank",brand:"Banco Estado","brand:wikidata":"Q5718188","brand:wikipedia":"es:Banco del Estado de Chile",name:"Banco Estado"},matchScore:2,suggestion:true},"amenity/bank/Banco Falabella":{name:"Banco Falabella",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q4854088"},addTags:{amenity:"bank",brand:"Banco Falabella","brand:wikidata":"Q4854088","brand:wikipedia":"en:Banco Falabella",name:"Banco Falabella"},removeTags:{amenity:"bank",brand:"Banco Falabella","brand:wikidata":"Q4854088","brand:wikipedia":"en:Banco Falabella",name:"Banco Falabella"},matchScore:2,suggestion:true},"amenity/bank/Banco G&T Continental":{name:"Banco G&T Continental",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q5717949"},addTags:{amenity:"bank",brand:"Banco G&T Continental","brand:wikidata":"Q5717949","brand:wikipedia":"es:Banco GYT Continental, S.A.",name:"Banco G&T Continental"},removeTags:{amenity:"bank",brand:"Banco G&T Continental","brand:wikidata":"Q5717949","brand:wikipedia":"es:Banco GYT Continental, S.A.",name:"Banco G&T Continental"},matchScore:2,suggestion:true},"amenity/bank/Banco General":{name:"Banco General",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q27618271"},addTags:{amenity:"bank",brand:"Banco General","brand:wikidata":"Q27618271","brand:wikipedia":"es:Banco General (Panamá)",name:"Banco General"},removeTags:{amenity:"bank",brand:"Banco General","brand:wikidata":"Q27618271","brand:wikipedia":"es:Banco General (Panamá)",name:"Banco General"},matchScore:2,suggestion:true},"amenity/bank/Banco Industrial":{name:"Banco Industrial",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q16489444"},addTags:{amenity:"bank",brand:"Banco Industrial","brand:wikidata":"Q16489444","brand:wikipedia":"es:Banco Industrial",name:"Banco Industrial"},removeTags:{amenity:"bank",brand:"Banco Industrial","brand:wikidata":"Q16489444","brand:wikipedia":"es:Banco Industrial",name:"Banco Industrial"},matchScore:2,suggestion:true},"amenity/bank/Banco Nacional":{name:"Banco Nacional",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q4854104"},addTags:{amenity:"bank",brand:"Banco Nacional","brand:wikidata":"Q4854104","brand:wikipedia":"en:Banco Nacional",name:"Banco Nacional"},removeTags:{amenity:"bank",brand:"Banco Nacional","brand:wikidata":"Q4854104","brand:wikipedia":"en:Banco Nacional",name:"Banco Nacional"},matchScore:2,suggestion:true},"amenity/bank/Banco Nación":{name:"Banco Nación",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q2883376"},addTags:{amenity:"bank",brand:"Banco Nación","brand:wikidata":"Q2883376","brand:wikipedia":"en:Banco de la Nación Argentina",name:"Banco Nación"},removeTags:{amenity:"bank",brand:"Banco Nación","brand:wikidata":"Q2883376","brand:wikipedia":"en:Banco de la Nación Argentina",name:"Banco Nación"},matchScore:2,suggestion:true},"amenity/bank/Banco Pastor":{name:"Banco Pastor",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q806193"},addTags:{amenity:"bank",brand:"Banco Pastor","brand:wikidata":"Q806193","brand:wikipedia":"en:Banco Pastor",name:"Banco Pastor"},removeTags:{amenity:"bank",brand:"Banco Pastor","brand:wikidata":"Q806193","brand:wikipedia":"en:Banco Pastor",name:"Banco Pastor"},matchScore:2,suggestion:true},"amenity/bank/Banco Pichincha":{name:"Banco Pichincha",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q4854135"},addTags:{amenity:"bank",brand:"Banco Pichincha","brand:wikidata":"Q4854135","brand:wikipedia":"en:Banco Pichincha",name:"Banco Pichincha"},removeTags:{amenity:"bank",brand:"Banco Pichincha","brand:wikidata":"Q4854135","brand:wikipedia":"en:Banco Pichincha",name:"Banco Pichincha"},matchScore:2,suggestion:true},"amenity/bank/Banco Popular":{name:"Banco Popular",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q537259"},addTags:{amenity:"bank",brand:"Banco Popular","brand:wikidata":"Q537259","brand:wikipedia":"es:Banco Popular Español",name:"Banco Popular"},removeTags:{amenity:"bank",brand:"Banco Popular","brand:wikidata":"Q537259","brand:wikipedia":"es:Banco Popular Español",name:"Banco Popular"},matchScore:2,suggestion:true},"amenity/bank/Banco Provincia":{name:"Banco Provincia",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q4856209"},addTags:{amenity:"bank",brand:"Banco Provincia","brand:wikidata":"Q4856209","brand:wikipedia":"es:Banco de la Provincia de Buenos Aires",name:"Banco Provincia"},removeTags:{amenity:"bank",brand:"Banco Provincia","brand:wikidata":"Q4856209","brand:wikipedia":"es:Banco de la Provincia de Buenos Aires",name:"Banco Provincia"},matchScore:2,suggestion:true},"amenity/bank/Banco Sabadell":{name:"Banco Sabadell",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q762330"},addTags:{amenity:"bank",brand:"Banco Sabadell","brand:wikidata":"Q762330","brand:wikipedia":"es:Banco Sabadell",name:"Banco Sabadell"},removeTags:{amenity:"bank",brand:"Banco Sabadell","brand:wikidata":"Q762330","brand:wikipedia":"es:Banco Sabadell",name:"Banco Sabadell"},matchScore:2,suggestion:true},"amenity/bank/Banco Santa Fe":{name:"Banco Santa Fe",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q6046871"},addTags:{amenity:"bank",brand:"Banco Santa Fe","brand:wikidata":"Q6046871","brand:wikipedia":"es:Nuevo Banco de Santa Fe",name:"Banco Santa Fe"},removeTags:{amenity:"bank",brand:"Banco Santa Fe","brand:wikidata":"Q6046871","brand:wikipedia":"es:Nuevo Banco de Santa Fe",name:"Banco Santa Fe"},matchScore:2,suggestion:true},"amenity/bank/Banco Santander":{name:"Banco Santander",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q6496310"},addTags:{amenity:"bank",brand:"Banco Santander","brand:wikidata":"Q6496310","brand:wikipedia":"es:Banco Santander",name:"Banco Santander"},removeTags:{amenity:"bank",brand:"Banco Santander","brand:wikidata":"Q6496310","brand:wikipedia":"es:Banco Santander",name:"Banco Santander"},matchScore:2,suggestion:true},"amenity/bank/Banco de Bogotá":{name:"Banco de Bogotá",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q4854122"},addTags:{amenity:"bank",brand:"Banco de Bogotá","brand:wikidata":"Q4854122","brand:wikipedia":"es:Banco de Bogotá",name:"Banco de Bogotá"},removeTags:{amenity:"bank",brand:"Banco de Bogotá","brand:wikidata":"Q4854122","brand:wikipedia":"es:Banco de Bogotá",name:"Banco de Bogotá"},matchScore:2,suggestion:true},"amenity/bank/Banco de Chile":{name:"Banco de Chile",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q2882085"},addTags:{amenity:"bank",brand:"Banco de Chile","brand:wikidata":"Q2882085","brand:wikipedia":"es:Banco de Chile",name:"Banco de Chile"},removeTags:{amenity:"bank",brand:"Banco de Chile","brand:wikidata":"Q2882085","brand:wikipedia":"es:Banco de Chile",name:"Banco de Chile"},matchScore:2,suggestion:true},"amenity/bank/Banco de Desarrollo Banrural":{name:"Banco de Desarrollo Banrural",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q5719130"},addTags:{amenity:"bank",brand:"Banco de Desarrollo Banrural","brand:wikidata":"Q5719130","brand:wikipedia":"es:Banrural",name:"Banco de Desarrollo Banrural"},removeTags:{amenity:"bank",brand:"Banco de Desarrollo Banrural","brand:wikidata":"Q5719130","brand:wikipedia":"es:Banrural",name:"Banco de Desarrollo Banrural"},matchScore:2,suggestion:true},"amenity/bank/Banco de Occidente":{name:"Banco de Occidente",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q4854127"},addTags:{amenity:"bank",brand:"Banco de Occidente","brand:wikidata":"Q4854127","brand:wikipedia":"es:Banco de Occidente (Colombia)",name:"Banco de Occidente"},removeTags:{amenity:"bank",brand:"Banco de Occidente","brand:wikidata":"Q4854127","brand:wikipedia":"es:Banco de Occidente (Colombia)",name:"Banco de Occidente"},matchScore:2,suggestion:true},"amenity/bank/Banco de Venezuela":{name:"Banco de Venezuela",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q517093"},addTags:{amenity:"bank",brand:"Banco de Venezuela","brand:wikidata":"Q517093","brand:wikipedia":"es:Banco de Venezuela",name:"Banco de Venezuela"},removeTags:{amenity:"bank",brand:"Banco de Venezuela","brand:wikidata":"Q517093","brand:wikipedia":"es:Banco de Venezuela",name:"Banco de Venezuela"},matchScore:2,suggestion:true},"amenity/bank/Banco de la Nación":{name:"Banco de la Nación",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q2883376"},addTags:{amenity:"bank",brand:"Banco de la Nación","brand:wikidata":"Q2883376","brand:wikipedia":"en:Banco de la Nación Argentina",name:"Banco de la Nación"},removeTags:{amenity:"bank",brand:"Banco de la Nación","brand:wikidata":"Q2883376","brand:wikipedia":"en:Banco de la Nación Argentina",name:"Banco de la Nación"},matchScore:2,suggestion:true},"amenity/bank/Banco di Napoli":{name:"Banco di Napoli",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q3633835"},addTags:{amenity:"bank",brand:"Banco di Napoli","brand:wikidata":"Q3633835","brand:wikipedia":"en:Banco di Napoli",name:"Banco di Napoli"},removeTags:{amenity:"bank",brand:"Banco di Napoli","brand:wikidata":"Q3633835","brand:wikipedia":"en:Banco di Napoli",name:"Banco di Napoli"},matchScore:2,suggestion:true},"amenity/bank/Banco di Sardegna":{name:"Banco di Sardegna",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q806205"},addTags:{amenity:"bank",brand:"Banco di Sardegna","brand:wikidata":"Q806205","brand:wikipedia":"en:Banco di Sardegna",name:"Banco di Sardegna"},removeTags:{amenity:"bank",brand:"Banco di Sardegna","brand:wikidata":"Q806205","brand:wikipedia":"en:Banco di Sardegna",name:"Banco di Sardegna"},matchScore:2,suggestion:true},"amenity/bank/Banco do Brasil":{name:"Banco do Brasil",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q610817"},addTags:{amenity:"bank",brand:"Banco do Brasil","brand:wikidata":"Q610817","brand:wikipedia":"en:Banco do Brasil",name:"Banco do Brasil"},removeTags:{amenity:"bank",brand:"Banco do Brasil","brand:wikidata":"Q610817","brand:wikipedia":"en:Banco do Brasil",name:"Banco do Brasil"},matchScore:2,suggestion:true},"amenity/bank/Banco do Nordeste":{name:"Banco do Nordeste",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q4854137"},addTags:{amenity:"bank",brand:"Banco do Nordeste","brand:wikidata":"Q4854137","brand:wikipedia":"en:Banco do Nordeste",name:"Banco do Nordeste"},removeTags:{amenity:"bank",brand:"Banco do Nordeste","brand:wikidata":"Q4854137","brand:wikipedia":"en:Banco do Nordeste",name:"Banco do Nordeste"},matchScore:2,suggestion:true},"amenity/bank/Bancolombia":{name:"Bancolombia",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q806206"},addTags:{amenity:"bank",brand:"Bancolombia","brand:wikidata":"Q806206","brand:wikipedia":"en:Bancolombia",name:"Bancolombia"},removeTags:{amenity:"bank",brand:"Bancolombia","brand:wikidata":"Q806206","brand:wikipedia":"en:Bancolombia",name:"Bancolombia"},matchScore:2,suggestion:true},"amenity/bank/Bancomer":{name:"Bancomer",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q2876794"},addTags:{amenity:"bank",brand:"Bancomer","brand:wikidata":"Q2876794","brand:wikipedia":"en:BBVA Bancomer",name:"Bancomer"},removeTags:{amenity:"bank",brand:"Bancomer","brand:wikidata":"Q2876794","brand:wikipedia":"en:BBVA Bancomer",name:"Bancomer"},matchScore:2,suggestion:true},"amenity/bank/Bancpost":{name:"Bancpost",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q4854143"},addTags:{amenity:"bank",brand:"Bancpost","brand:wikidata":"Q4854143","brand:wikipedia":"ro:Bancpost",name:"Bancpost"},removeTags:{amenity:"bank",brand:"Bancpost","brand:wikidata":"Q4854143","brand:wikipedia":"ro:Bancpost",name:"Bancpost"},matchScore:2,suggestion:true},"amenity/bank/Banesco":{name:"Banesco",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q4854841"},addTags:{amenity:"bank",brand:"Banesco","brand:wikidata":"Q4854841","brand:wikipedia":"en:Banesco",name:"Banesco"},removeTags:{amenity:"bank",brand:"Banesco","brand:wikidata":"Q4854841","brand:wikipedia":"en:Banesco",name:"Banesco"},matchScore:2,suggestion:true},"amenity/bank/Bangkok Bank":{name:"Bangkok Bank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q806483"},addTags:{amenity:"bank",brand:"Bangkok Bank","brand:wikidata":"Q806483","brand:wikipedia":"en:Bangkok Bank",name:"Bangkok Bank"},removeTags:{amenity:"bank",brand:"Bangkok Bank","brand:wikidata":"Q806483","brand:wikipedia":"en:Bangkok Bank",name:"Bangkok Bank"},matchScore:2,suggestion:true},"amenity/bank/Bank Al Habib":{name:"Bank Al Habib",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q4034833"},addTags:{amenity:"bank",brand:"Bank Al Habib","brand:wikidata":"Q4034833","brand:wikipedia":"ur:بينک الحبيب لمیٹڈ",name:"Bank Al Habib"},removeTags:{amenity:"bank",brand:"Bank Al Habib","brand:wikidata":"Q4034833","brand:wikipedia":"ur:بينک الحبيب لمیٹڈ",name:"Bank Al Habib"},matchScore:2,suggestion:true},"amenity/bank/Bank Alfalah":{name:"Bank Alfalah",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q4855895"},addTags:{amenity:"bank",brand:"Bank Alfalah","brand:wikidata":"Q4855895","brand:wikipedia":"en:Bank Alfalah",name:"Bank Alfalah"},removeTags:{amenity:"bank",brand:"Bank Alfalah","brand:wikidata":"Q4855895","brand:wikipedia":"en:Bank Alfalah",name:"Bank Alfalah"},matchScore:2,suggestion:true},"amenity/bank/Bank Austria":{name:"Bank Austria",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q697619"},addTags:{amenity:"bank",brand:"Bank Austria","brand:wikidata":"Q697619","brand:wikipedia":"en:Bank Austria",name:"Bank Austria"},removeTags:{amenity:"bank",brand:"Bank Austria","brand:wikidata":"Q697619","brand:wikipedia":"en:Bank Austria",name:"Bank Austria"},matchScore:2,suggestion:true},"amenity/bank/Bank Danamon":{name:"Bank Danamon",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q4855913"},addTags:{amenity:"bank",brand:"Bank Danamon","brand:wikidata":"Q4855913","brand:wikipedia":"en:Bank Danamon",name:"Bank Danamon"},removeTags:{amenity:"bank",brand:"Bank Danamon","brand:wikidata":"Q4855913","brand:wikipedia":"en:Bank Danamon",name:"Bank Danamon"},matchScore:2,suggestion:true},"amenity/bank/Bank Mandiri":{name:"Bank Mandiri",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q806639"},addTags:{amenity:"bank",brand:"Bank Mandiri","brand:wikidata":"Q806639","brand:wikipedia":"en:Bank Mandiri",name:"Bank Mandiri"},removeTags:{amenity:"bank",brand:"Bank Mandiri","brand:wikidata":"Q806639","brand:wikipedia":"en:Bank Mandiri",name:"Bank Mandiri"},matchScore:2,suggestion:true},"amenity/bank/Bank Mandiri Syariah":{name:"Bank Mandiri Syariah",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q12474533"},addTags:{amenity:"bank",brand:"Bank Mandiri Syariah","brand:wikidata":"Q12474533","brand:wikipedia":"id:Bank Syariah Mandiri",name:"Bank Mandiri Syariah"},removeTags:{amenity:"bank",brand:"Bank Mandiri Syariah","brand:wikidata":"Q12474533","brand:wikipedia":"id:Bank Syariah Mandiri",name:"Bank Mandiri Syariah"},matchScore:2,suggestion:true},"amenity/bank/Bank Mega":{name:"Bank Mega",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q12474504"},addTags:{amenity:"bank",brand:"Bank Mega","brand:wikidata":"Q12474504","brand:wikipedia":"id:Bank Mega",name:"Bank Mega"},removeTags:{amenity:"bank",brand:"Bank Mega","brand:wikidata":"Q12474504","brand:wikipedia":"id:Bank Mega",name:"Bank Mega"},matchScore:2,suggestion:true},"amenity/bank/Bank Muamalat":{name:"Bank Muamalat",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q4855949"},addTags:{amenity:"bank",brand:"Bank Muamalat","brand:wikidata":"Q4855949","brand:wikipedia":"en:Bank Muamalat",name:"Bank Muamalat"},removeTags:{amenity:"bank",brand:"Bank Muamalat","brand:wikidata":"Q4855949","brand:wikipedia":"en:Bank Muamalat",name:"Bank Muamalat"},matchScore:2,suggestion:true},"amenity/bank/Bank Rakyat":{name:"Bank Rakyat",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q4855964"},addTags:{amenity:"bank",brand:"Bank Rakyat","brand:wikidata":"Q4855964","brand:wikipedia":"ms:Bank Rakyat",name:"Bank Rakyat"},removeTags:{amenity:"bank",brand:"Bank Rakyat","brand:wikidata":"Q4855964","brand:wikipedia":"ms:Bank Rakyat",name:"Bank Rakyat"},matchScore:2,suggestion:true},"amenity/bank/Bank of Africa":{name:"Bank of Africa",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q2882627"},addTags:{amenity:"bank",brand:"Bank of Africa","brand:wikidata":"Q2882627","brand:wikipedia":"en:Bank of Africa Group",name:"Bank of Africa",short_name:"BOA"},removeTags:{amenity:"bank",brand:"Bank of Africa","brand:wikidata":"Q2882627","brand:wikipedia":"en:Bank of Africa Group",name:"Bank of Africa",short_name:"BOA"},matchScore:2,suggestion:true},"amenity/bank/Bank of America":{name:"Bank of America",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q487907"},addTags:{amenity:"bank",brand:"Bank of America","brand:wikidata":"Q487907","brand:wikipedia":"en:Bank of America",name:"Bank of America"},removeTags:{amenity:"bank",brand:"Bank of America","brand:wikidata":"Q487907","brand:wikipedia":"en:Bank of America",name:"Bank of America"},matchScore:2,suggestion:true},"amenity/bank/Bank of Baroda":{name:"Bank of Baroda",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q2003797"},addTags:{amenity:"bank",brand:"Bank of Baroda","brand:wikidata":"Q2003797","brand:wikipedia":"en:Bank of Baroda",name:"Bank of Baroda"},removeTags:{amenity:"bank",brand:"Bank of Baroda","brand:wikidata":"Q2003797","brand:wikipedia":"en:Bank of Baroda",name:"Bank of Baroda"},matchScore:2,suggestion:true},"amenity/bank/Bank of Ceylon":{name:"Bank of Ceylon",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q2882652"},addTags:{amenity:"bank",brand:"Bank of Ceylon","brand:wikidata":"Q2882652","brand:wikipedia":"en:Bank of Ceylon",name:"Bank of Ceylon"},removeTags:{amenity:"bank",brand:"Bank of Ceylon","brand:wikidata":"Q2882652","brand:wikipedia":"en:Bank of Ceylon",name:"Bank of Ceylon"},matchScore:2,suggestion:true},"amenity/bank/Bank of China":{name:"Bank of China",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q790068"},addTags:{amenity:"bank",brand:"Bank of China","brand:wikidata":"Q790068","brand:wikipedia":"en:Bank of China",name:"Bank of China"},removeTags:{amenity:"bank",brand:"Bank of China","brand:wikidata":"Q790068","brand:wikipedia":"en:Bank of China",name:"Bank of China"},matchScore:2,suggestion:true},"amenity/bank/Bank of Commerce":{name:"Bank of Commerce",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q4856092"},addTags:{amenity:"bank",brand:"Bank of Commerce","brand:wikidata":"Q4856092","brand:wikipedia":"en:Bank of Commerce",name:"Bank of Commerce"},removeTags:{amenity:"bank",brand:"Bank of Commerce","brand:wikidata":"Q4856092","brand:wikipedia":"en:Bank of Commerce",name:"Bank of Commerce"},matchScore:2,suggestion:true},"amenity/bank/Bank of Cyprus":{name:"Bank of Cyprus",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q806678"},addTags:{amenity:"bank",brand:"Bank of Cyprus","brand:wikidata":"Q806678","brand:wikipedia":"en:Bank of Cyprus",name:"Bank of Cyprus"},removeTags:{amenity:"bank",brand:"Bank of Cyprus","brand:wikidata":"Q806678","brand:wikipedia":"en:Bank of Cyprus",name:"Bank of Cyprus"},matchScore:2,suggestion:true},"amenity/bank/Bank of India":{name:"Bank of India",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q2004439"},addTags:{amenity:"bank",brand:"Bank of India","brand:wikidata":"Q2004439","brand:wikipedia":"en:Bank of India",name:"Bank of India"},removeTags:{amenity:"bank",brand:"Bank of India","brand:wikidata":"Q2004439","brand:wikipedia":"en:Bank of India",name:"Bank of India"},matchScore:2,suggestion:true},"amenity/bank/Bank of Ireland":{name:"Bank of Ireland",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q806689"},addTags:{amenity:"bank",brand:"Bank of Ireland","brand:wikidata":"Q806689","brand:wikipedia":"en:Bank of Ireland",name:"Bank of Ireland"},removeTags:{amenity:"bank",brand:"Bank of Ireland","brand:wikidata":"Q806689","brand:wikipedia":"en:Bank of Ireland",name:"Bank of Ireland"},matchScore:2,suggestion:true},"amenity/bank/Bank of Maharashtra":{name:"Bank of Maharashtra",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q2004304"},addTags:{amenity:"bank",brand:"Bank of Maharashtra","brand:wikidata":"Q2004304","brand:wikipedia":"en:Bank of Maharashtra",name:"Bank of Maharashtra"},removeTags:{amenity:"bank",brand:"Bank of Maharashtra","brand:wikidata":"Q2004304","brand:wikipedia":"en:Bank of Maharashtra",name:"Bank of Maharashtra"},matchScore:2,suggestion:true},"amenity/bank/Bank of Montreal":{name:"Bank of Montreal",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q806693"},addTags:{amenity:"bank",brand:"Bank of Montreal","brand:wikidata":"Q806693","brand:wikipedia":"en:Bank of Montreal",name:"Bank of Montreal"},removeTags:{amenity:"bank",brand:"Bank of Montreal","brand:wikidata":"Q806693","brand:wikipedia":"en:Bank of Montreal",name:"Bank of Montreal"},matchScore:2,suggestion:true},"amenity/bank/Bank of New Zealand":{name:"Bank of New Zealand",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q806687"},addTags:{amenity:"bank",brand:"Bank of New Zealand","brand:wikidata":"Q806687","brand:wikipedia":"en:Bank of New Zealand",name:"Bank of New Zealand"},removeTags:{amenity:"bank",brand:"Bank of New Zealand","brand:wikidata":"Q806687","brand:wikipedia":"en:Bank of New Zealand",name:"Bank of New Zealand"},matchScore:2,suggestion:true},"amenity/bank/Bank of Scotland":{name:"Bank of Scotland",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q627381"},addTags:{amenity:"bank",brand:"Bank of Scotland","brand:wikidata":"Q627381","brand:wikipedia":"en:Bank of Scotland",name:"Bank of Scotland"},removeTags:{amenity:"bank",brand:"Bank of Scotland","brand:wikidata":"Q627381","brand:wikipedia":"en:Bank of Scotland",name:"Bank of Scotland"},matchScore:2,suggestion:true},"amenity/bank/Bank of the West":{name:"Bank of the West",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q2881919"},addTags:{amenity:"bank",brand:"Bank of the West","brand:wikidata":"Q2881919","brand:wikipedia":"en:Bank of the West",name:"Bank of the West"},removeTags:{amenity:"bank",brand:"Bank of the West","brand:wikidata":"Q2881919","brand:wikipedia":"en:Bank of the West",name:"Bank of the West"},matchScore:2,suggestion:true},"amenity/bank/Bankia":{name:"Bankia",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q806807"},addTags:{amenity:"bank",brand:"Bankia","brand:wikidata":"Q806807","brand:wikipedia":"en:Bankia",name:"Bankia"},removeTags:{amenity:"bank",brand:"Bankia","brand:wikidata":"Q806807","brand:wikipedia":"en:Bankia",name:"Bankia"},matchScore:2,suggestion:true},"amenity/bank/Bankinter":{name:"Bankinter",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q806808"},addTags:{amenity:"bank",brand:"Bankinter","brand:wikidata":"Q806808","brand:wikipedia":"es:Bankinter",name:"Bankinter"},removeTags:{amenity:"bank",brand:"Bankinter","brand:wikidata":"Q806808","brand:wikipedia":"es:Bankinter",name:"Bankinter"},matchScore:2,suggestion:true},"amenity/bank/Banner Bank":{name:"Banner Bank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q4856910"},addTags:{amenity:"bank",brand:"Banner Bank","brand:wikidata":"Q4856910","brand:wikipedia":"en:Banner Bank",name:"Banner Bank"},removeTags:{amenity:"bank",brand:"Banner Bank","brand:wikidata":"Q4856910","brand:wikipedia":"en:Banner Bank",name:"Banner Bank"},matchScore:2,suggestion:true},"amenity/bank/Banorte":{name:"Banorte",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q806914"},addTags:{amenity:"bank",brand:"Banorte","brand:wikidata":"Q806914","brand:wikipedia":"en:Banorte",name:"Banorte"},removeTags:{amenity:"bank",brand:"Banorte","brand:wikidata":"Q806914","brand:wikipedia":"en:Banorte",name:"Banorte"},matchScore:2,suggestion:true},"amenity/bank/Banque Atlantique":{name:"Banque Atlantique",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q2882890"},addTags:{amenity:"bank",brand:"Banque Atlantique","brand:wikidata":"Q2882890","brand:wikipedia":"en:Atlantic Bank Group",name:"Banque Atlantique"},removeTags:{amenity:"bank",brand:"Banque Atlantique","brand:wikidata":"Q2882890","brand:wikipedia":"en:Atlantic Bank Group",name:"Banque Atlantique"},matchScore:2,suggestion:true},"amenity/bank/Banque Laurentienne":{name:"Banque Laurentienne",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q1360087"},addTags:{amenity:"bank",brand:"Banque Laurentienne","brand:wikidata":"Q1360087","brand:wikipedia":"en:Laurentian Bank of Canada",name:"Banque Laurentienne"},removeTags:{amenity:"bank",brand:"Banque Laurentienne","brand:wikidata":"Q1360087","brand:wikipedia":"en:Laurentian Bank of Canada",name:"Banque Laurentienne"},matchScore:2,suggestion:true},"amenity/bank/Banque Populaire":{name:"Banque Populaire",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q2883441"},addTags:{amenity:"bank",brand:"Banque Populaire","brand:wikidata":"Q2883441","brand:wikipedia":"en:Banque Populaire du Maroc",name:"Banque Populaire"},removeTags:{amenity:"bank",brand:"Banque Populaire","brand:wikidata":"Q2883441","brand:wikipedia":"en:Banque Populaire du Maroc",name:"Banque Populaire"},matchScore:2,suggestion:true},"amenity/bank/Banrisul":{name:"Banrisul",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q4857098"},addTags:{amenity:"bank",brand:"Banrisul","brand:wikidata":"Q4857098","brand:wikipedia":"en:Banrisul",name:"Banrisul"},removeTags:{amenity:"bank",brand:"Banrisul","brand:wikidata":"Q4857098","brand:wikipedia":"en:Banrisul",name:"Banrisul"},matchScore:2,suggestion:true},"amenity/bank/Barclays":{name:"Barclays",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q245343"},addTags:{amenity:"bank",brand:"Barclays","brand:wikidata":"Q245343","brand:wikipedia":"en:Barclays",name:"Barclays"},removeTags:{amenity:"bank",brand:"Barclays","brand:wikidata":"Q245343","brand:wikipedia":"en:Barclays",name:"Barclays"},matchScore:2,suggestion:true},"amenity/bank/Belfius":{name:"Belfius",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q1956014"},addTags:{amenity:"bank",brand:"Belfius","brand:wikidata":"Q1956014","brand:wikipedia":"en:Belfius",name:"Belfius"},removeTags:{amenity:"bank",brand:"Belfius","brand:wikidata":"Q1956014","brand:wikipedia":"en:Belfius",name:"Belfius"},matchScore:2,suggestion:true},"amenity/bank/Bendigo Bank":{name:"Bendigo Bank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q4887077"},addTags:{amenity:"bank",brand:"Bendigo Bank","brand:wikidata":"Q4887077","brand:wikipedia":"en:Bendigo and Adelaide Bank",name:"Bendigo Bank"},removeTags:{amenity:"bank",brand:"Bendigo Bank","brand:wikidata":"Q4887077","brand:wikipedia":"en:Bendigo and Adelaide Bank",name:"Bendigo Bank"},matchScore:2,suggestion:true},"amenity/bank/Berliner Volksbank":{name:"Berliner Volksbank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q821855"},addTags:{amenity:"bank",brand:"Berliner Volksbank","brand:wikidata":"Q821855","brand:wikipedia":"de:Berliner Volksbank",name:"Berliner Volksbank"},removeTags:{amenity:"bank",brand:"Berliner Volksbank","brand:wikidata":"Q821855","brand:wikipedia":"de:Berliner Volksbank",name:"Berliner Volksbank"},matchScore:2,suggestion:true},"amenity/bank/Bicentenario":{name:"Bicentenario",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q5728123"},addTags:{amenity:"bank",brand:"Bicentenario","brand:wikidata":"Q5728123","brand:wikipedia":"es:Bicentenario Banco Universal",name:"Bicentenario"},removeTags:{amenity:"bank",brand:"Bicentenario","brand:wikidata":"Q5728123","brand:wikipedia":"es:Bicentenario Banco Universal",name:"Bicentenario"},matchScore:2,suggestion:true},"amenity/bank/Bicici":{name:"Bicici",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q1667302"},addTags:{amenity:"bank",brand:"Bicici","brand:wikidata":"Q1667302","brand:wikipedia":"fr:Banque internationale pour le commerce et l'industrie de la Côte d'Ivoire",name:"Bicici"},removeTags:{amenity:"bank",brand:"Bicici","brand:wikidata":"Q1667302","brand:wikipedia":"fr:Banque internationale pour le commerce et l'industrie de la Côte d'Ivoire",name:"Bicici"},matchScore:2,suggestion:true},"amenity/bank/Bradesco":{name:"Bradesco",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q806181"},addTags:{amenity:"bank",brand:"Bradesco","brand:wikidata":"Q806181","brand:wikipedia":"en:Banco Bradesco",name:"Bradesco"},removeTags:{amenity:"bank",brand:"Bradesco","brand:wikidata":"Q806181","brand:wikipedia":"en:Banco Bradesco",name:"Bradesco"},matchScore:2,suggestion:true},"amenity/bank/Budapest Bank":{name:"Budapest Bank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q27493463"},addTags:{amenity:"bank",brand:"Budapest Bank","brand:wikidata":"Q27493463","brand:wikipedia":"en:Budapest Bank",name:"Budapest Bank"},removeTags:{amenity:"bank",brand:"Budapest Bank","brand:wikidata":"Q27493463","brand:wikipedia":"en:Budapest Bank",name:"Budapest Bank"},matchScore:2,suggestion:true},"amenity/bank/CBAO":{name:"CBAO",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q532104"},addTags:{amenity:"bank",brand:"CBAO","brand:wikidata":"Q532104","brand:wikipedia":"fr:CBAO Groupe Attijariwafa bank",name:"CBAO"},removeTags:{amenity:"bank",brand:"CBAO","brand:wikidata":"Q532104","brand:wikipedia":"fr:CBAO Groupe Attijariwafa bank",name:"CBAO"},matchScore:2,suggestion:true},"amenity/bank/CEC Bank":{name:"CEC Bank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q1023306"},addTags:{amenity:"bank",brand:"CEC Bank","brand:wikidata":"Q1023306","brand:wikipedia":"en:CEC Bank",name:"CEC Bank"},removeTags:{amenity:"bank",brand:"CEC Bank","brand:wikidata":"Q1023306","brand:wikipedia":"en:CEC Bank",name:"CEC Bank"},matchScore:2,suggestion:true},"amenity/bank/CIB Bank":{name:"CIB Bank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q839566"},addTags:{amenity:"bank",brand:"CIB Bank","brand:wikidata":"Q839566","brand:wikipedia":"en:CIB Bank",name:"CIB Bank"},removeTags:{amenity:"bank",brand:"CIB Bank","brand:wikidata":"Q839566","brand:wikipedia":"en:CIB Bank",name:"CIB Bank"},matchScore:2,suggestion:true},"amenity/bank/CIBC":{name:"CIBC",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q666694"},addTags:{amenity:"bank",brand:"CIBC","brand:wikidata":"Q666694","brand:wikipedia":"en:Canadian Imperial Bank of Commerce",name:"CIBC"},removeTags:{amenity:"bank",brand:"CIBC","brand:wikidata":"Q666694","brand:wikipedia":"en:Canadian Imperial Bank of Commerce",name:"CIBC"},matchScore:2,suggestion:true},"amenity/bank/CIC":{name:"CIC",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q746525"},addTags:{amenity:"bank",brand:"CIC","brand:wikidata":"Q746525","brand:wikipedia":"en:Crédit Industriel et Commercial",name:"CIC"},removeTags:{amenity:"bank",brand:"CIC","brand:wikidata":"Q746525","brand:wikipedia":"en:Crédit Industriel et Commercial",name:"CIC"},matchScore:2,suggestion:true},"amenity/bank/CIH Bank":{name:"CIH Bank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q3006220"},addTags:{amenity:"bank",brand:"CIH Bank","brand:wikidata":"Q3006220","brand:wikipedia":"en:CIH Bank",name:"CIH Bank"},removeTags:{amenity:"bank",brand:"CIH Bank","brand:wikidata":"Q3006220","brand:wikipedia":"en:CIH Bank",name:"CIH Bank"},matchScore:2,suggestion:true},"amenity/bank/CIMB Bank":{name:"CIMB Bank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q3045976"},addTags:{amenity:"bank",brand:"CIMB Bank","brand:wikidata":"Q3045976","brand:wikipedia":"en:CIMB",name:"CIMB Bank"},removeTags:{amenity:"bank",brand:"CIMB Bank","brand:wikidata":"Q3045976","brand:wikipedia":"en:CIMB",name:"CIMB Bank"},matchScore:2,suggestion:true},"amenity/bank/CIMB Niaga":{name:"CIMB Niaga",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q5011747"},addTags:{amenity:"bank",brand:"CIMB Niaga","brand:wikidata":"Q5011747","brand:wikipedia":"en:CIMB Niaga",name:"CIMB Niaga"},removeTags:{amenity:"bank",brand:"CIMB Niaga","brand:wikidata":"Q5011747","brand:wikipedia":"en:CIMB Niaga",name:"CIMB Niaga"},matchScore:2,suggestion:true},"amenity/bank/CNEP":{name:"CNEP",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q2931752"},addTags:{amenity:"bank",brand:"CNEP","brand:wikidata":"Q2931752","brand:wikipedia":"fr:CNEP-Banque",name:"CNEP"},removeTags:{amenity:"bank",brand:"CNEP","brand:wikidata":"Q2931752","brand:wikipedia":"fr:CNEP-Banque",name:"CNEP"},matchScore:2,suggestion:true},"amenity/bank/Caisse Desjardins":{name:"Caisse Desjardins",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q2933350"},addTags:{amenity:"bank",brand:"Caisse Desjardins","brand:wikidata":"Q2933350","brand:wikipedia":"en:Desjardins Group",name:"Caisse Desjardins"},removeTags:{amenity:"bank",brand:"Caisse Desjardins","brand:wikidata":"Q2933350","brand:wikipedia":"en:Desjardins Group",name:"Caisse Desjardins"},matchScore:2,suggestion:true},"amenity/bank/Caisse d'Épargne":{name:"Caisse d'Épargne",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q1547738"},addTags:{amenity:"bank",brand:"Caisse d'Épargne","brand:wikidata":"Q1547738","brand:wikipedia":"en:Groupe Caisse d'Épargne",name:"Caisse d'Épargne"},removeTags:{amenity:"bank",brand:"Caisse d'Épargne","brand:wikidata":"Q1547738","brand:wikipedia":"en:Groupe Caisse d'Épargne",name:"Caisse d'Épargne"},matchScore:2,suggestion:true},"amenity/bank/Caixa Econômica Federal":{name:"Caixa Econômica Federal",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q835283"},addTags:{amenity:"bank",brand:"Caixa Econômica Federal","brand:wikidata":"Q835283","brand:wikipedia":"pt:Caixa Econômica Federal",name:"Caixa Econômica Federal"},removeTags:{amenity:"bank",brand:"Caixa Econômica Federal","brand:wikidata":"Q835283","brand:wikipedia":"pt:Caixa Econômica Federal",name:"Caixa Econômica Federal"},matchScore:2,suggestion:true},"amenity/bank/Caixa Geral de Depósitos":{name:"Caixa Geral de Depósitos",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q1026044"},addTags:{amenity:"bank",brand:"Caixa Geral de Depósitos","brand:wikidata":"Q1026044","brand:wikipedia":"pt:Caixa Geral de Depósitos",name:"Caixa Geral de Depósitos"},removeTags:{amenity:"bank",brand:"Caixa Geral de Depósitos","brand:wikidata":"Q1026044","brand:wikipedia":"pt:Caixa Geral de Depósitos",name:"Caixa Geral de Depósitos"},matchScore:2,suggestion:true},"amenity/bank/Caixabank":{name:"Caixabank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q847225"},addTags:{amenity:"bank","brand:wikidata":"Q847225","brand:wikipedia":"en:CaixaBank",name:"Caixabank"},removeTags:{amenity:"bank","brand:wikidata":"Q847225","brand:wikipedia":"en:CaixaBank",name:"Caixabank"},matchScore:2,suggestion:true},"amenity/bank/Caja España":{name:"Caja España",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q966985"},addTags:{amenity:"bank",brand:"Caja España","brand:wikidata":"Q966985","brand:wikipedia":"es:Caja España",name:"Caja España"},removeTags:{amenity:"bank",brand:"Caja España","brand:wikidata":"Q966985","brand:wikipedia":"es:Caja España",name:"Caja España"},matchScore:2,suggestion:true},"amenity/bank/Caja Rural":{name:"Caja Rural",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q3649971"},addTags:{amenity:"bank",brand:"Caja Rural","brand:wikidata":"Q3649971","brand:wikipedia":"es:Caja Rural",name:"Caja Rural"},removeTags:{amenity:"bank",brand:"Caja Rural","brand:wikidata":"Q3649971","brand:wikipedia":"es:Caja Rural",name:"Caja Rural"},matchScore:2,suggestion:true},"amenity/bank/Caja Rural de Jaén":{name:"Caja Rural de Jaén",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q18720350"},addTags:{amenity:"bank",brand:"Caja Rural de Jaén","brand:wikidata":"Q18720350","brand:wikipedia":"es:Caja Rural de Jaén",name:"Caja Rural de Jaén"},removeTags:{amenity:"bank",brand:"Caja Rural de Jaén","brand:wikidata":"Q18720350","brand:wikipedia":"es:Caja Rural de Jaén",name:"Caja Rural de Jaén"},matchScore:2,suggestion:true},"amenity/bank/CajaSur":{name:"CajaSur",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q3751637"},addTags:{amenity:"bank",brand:"CajaSur","brand:wikidata":"Q3751637","brand:wikipedia":"en:CajaSur",name:"CajaSur"},removeTags:{amenity:"bank",brand:"CajaSur","brand:wikidata":"Q3751637","brand:wikipedia":"en:CajaSur",name:"CajaSur"},matchScore:2,suggestion:true},"amenity/bank/Cajamar":{name:"Cajamar",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q8254971"},addTags:{amenity:"bank",brand:"Cajamar","brand:wikidata":"Q8254971","brand:wikipedia":"es:Cajamar",name:"Cajamar"},removeTags:{amenity:"bank",brand:"Cajamar","brand:wikidata":"Q8254971","brand:wikipedia":"es:Cajamar",name:"Cajamar"},matchScore:2,suggestion:true},"amenity/bank/Canara Bank":{name:"Canara Bank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q2003777"},addTags:{amenity:"bank",brand:"Canara Bank","brand:wikidata":"Q2003777","brand:wikipedia":"en:Canara Bank",name:"Canara Bank"},removeTags:{amenity:"bank",brand:"Canara Bank","brand:wikidata":"Q2003777","brand:wikipedia":"en:Canara Bank",name:"Canara Bank"},matchScore:2,suggestion:true},"amenity/bank/Capital One":{name:"Capital One",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q1034654"},addTags:{amenity:"bank",brand:"Capital One","brand:wikidata":"Q1034654","brand:wikipedia":"en:Capital One",name:"Capital One"},removeTags:{amenity:"bank",brand:"Capital One","brand:wikidata":"Q1034654","brand:wikipedia":"en:Capital One",name:"Capital One"},matchScore:2,suggestion:true},"amenity/bank/Carige":{name:"Carige",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q3633695"},addTags:{amenity:"bank",brand:"Carige","brand:wikidata":"Q3633695","brand:wikipedia":"en:Banca Carige",name:"Carige"},removeTags:{amenity:"bank",brand:"Carige","brand:wikidata":"Q3633695","brand:wikipedia":"en:Banca Carige",name:"Carige"},matchScore:2,suggestion:true},"amenity/bank/Cariparma":{name:"Cariparma",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q2938832"},addTags:{amenity:"bank",brand:"Cariparma","brand:wikidata":"Q2938832","brand:wikipedia":"en:Crédit Agricole Italia",name:"Cariparma"},removeTags:{amenity:"bank",brand:"Cariparma","brand:wikidata":"Q2938832","brand:wikipedia":"en:Crédit Agricole Italia",name:"Cariparma"},matchScore:2,suggestion:true},"amenity/bank/Carisbo":{name:"Carisbo",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q3661937"},addTags:{amenity:"bank",brand:"Carisbo","brand:wikidata":"Q3661937","brand:wikipedia":"en:Cassa di Risparmio in Bologna",name:"Carisbo"},removeTags:{amenity:"bank",brand:"Carisbo","brand:wikidata":"Q3661937","brand:wikipedia":"en:Cassa di Risparmio in Bologna",name:"Carisbo"},matchScore:2,suggestion:true},"amenity/bank/Cassa di Risparmio del Veneto":{name:"Cassa di Risparmio del Veneto",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q3661909"},addTags:{amenity:"bank",brand:"Cassa di Risparmio del Veneto","brand:wikidata":"Q3661909","brand:wikipedia":"en:Cassa di Risparmio del Veneto",name:"Cassa di Risparmio del Veneto"},removeTags:{amenity:"bank",brand:"Cassa di Risparmio del Veneto","brand:wikidata":"Q3661909","brand:wikipedia":"en:Cassa di Risparmio del Veneto",name:"Cassa di Risparmio del Veneto"},matchScore:2,suggestion:true},"amenity/bank/CatalunyaCaixa":{name:"CatalunyaCaixa",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q3750952"},addTags:{amenity:"bank",brand:"CatalunyaCaixa","brand:wikidata":"Q3750952","brand:wikipedia":"en:CatalunyaCaixa",name:"CatalunyaCaixa"},removeTags:{amenity:"bank",brand:"CatalunyaCaixa","brand:wikidata":"Q3750952","brand:wikipedia":"en:CatalunyaCaixa",name:"CatalunyaCaixa"},matchScore:2,suggestion:true},"amenity/bank/Central Bank of India":{name:"Central Bank of India",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q2007090"},addTags:{amenity:"bank",brand:"Central Bank of India","brand:wikidata":"Q2007090","brand:wikipedia":"en:Central Bank of India",name:"Central Bank of India"},removeTags:{amenity:"bank",brand:"Central Bank of India","brand:wikidata":"Q2007090","brand:wikipedia":"en:Central Bank of India",name:"Central Bank of India"},matchScore:2,suggestion:true},"amenity/bank/Chase":{name:"Chase",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q524629"},addTags:{amenity:"bank",brand:"Chase","brand:wikidata":"Q524629","brand:wikipedia":"en:Chase Bank",name:"Chase"},removeTags:{amenity:"bank",brand:"Chase","brand:wikidata":"Q524629","brand:wikipedia":"en:Chase Bank",name:"Chase"},matchScore:2,suggestion:true},"amenity/bank/China Bank":{name:"China Bank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q5100080"},addTags:{amenity:"bank",brand:"China Bank","brand:wikidata":"Q5100080","brand:wikipedia":"en:Chinabank",name:"China Bank"},removeTags:{amenity:"bank",brand:"China Bank","brand:wikidata":"Q5100080","brand:wikipedia":"en:Chinabank",name:"China Bank"},matchScore:2,suggestion:true},"amenity/bank/China Bank Savings":{name:"China Bank Savings",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q18387359"},addTags:{amenity:"bank",brand:"China Bank Savings","brand:wikidata":"Q18387359","brand:wikipedia":"en:China Bank Savings",name:"China Bank Savings"},removeTags:{amenity:"bank",brand:"China Bank Savings","brand:wikidata":"Q18387359","brand:wikipedia":"en:China Bank Savings",name:"China Bank Savings"},matchScore:2,suggestion:true},"amenity/bank/China Construction Bank":{name:"China Construction Bank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q26299"},addTags:{amenity:"bank",brand:"China Construction Bank","brand:wikidata":"Q26299","brand:wikipedia":"en:China Construction Bank",name:"China Construction Bank"},removeTags:{amenity:"bank",brand:"China Construction Bank","brand:wikidata":"Q26299","brand:wikipedia":"en:China Construction Bank",name:"China Construction Bank"},matchScore:2,suggestion:true},"amenity/bank/Citibank":{name:"Citibank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q857063"},addTags:{amenity:"bank",brand:"Citibank","brand:wikidata":"Q857063","brand:wikipedia":"en:Citibank",name:"Citibank"},removeTags:{amenity:"bank",brand:"Citibank","brand:wikidata":"Q857063","brand:wikipedia":"en:Citibank",name:"Citibank"},matchScore:2,suggestion:true},"amenity/bank/Citizens Bank":{name:"Citizens Bank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q25209674"},addTags:{amenity:"bank",brand:"Citizens Bank","brand:wikidata":"Q25209674","brand:wikipedia":"en:Citizens Bank (South Bend, Indiana)",name:"Citizens Bank"},removeTags:{amenity:"bank",brand:"Citizens Bank","brand:wikidata":"Q25209674","brand:wikipedia":"en:Citizens Bank (South Bend, Indiana)",name:"Citizens Bank"},matchScore:2,suggestion:true},"amenity/bank/Clydesdale Bank":{name:"Clydesdale Bank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q971680"},addTags:{amenity:"bank",brand:"Clydesdale Bank","brand:wikipedia":"en:Clydesdale Bank","brand:wikidata":"Q971680",name:"Clydesdale Bank"},removeTags:{amenity:"bank",brand:"Clydesdale Bank","brand:wikipedia":"en:Clydesdale Bank","brand:wikidata":"Q971680",name:"Clydesdale Bank"},matchScore:2,suggestion:true},"amenity/bank/Comerica Bank":{name:"Comerica Bank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q1114148"},addTags:{amenity:"bank",brand:"Comerica Bank","brand:wikidata":"Q1114148","brand:wikipedia":"en:Comerica",name:"Comerica Bank"},removeTags:{amenity:"bank",brand:"Comerica Bank","brand:wikidata":"Q1114148","brand:wikipedia":"en:Comerica",name:"Comerica Bank"},matchScore:2,suggestion:true},"amenity/bank/Commercial Bank of Ceylon PLC":{name:"Commercial Bank of Ceylon PLC",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q5152468"},addTags:{amenity:"bank",brand:"Commercial Bank of Ceylon PLC","brand:wikidata":"Q5152468","brand:wikipedia":"en:Commercial Bank of Ceylon",name:"Commercial Bank of Ceylon PLC"},removeTags:{amenity:"bank",brand:"Commercial Bank of Ceylon PLC","brand:wikidata":"Q5152468","brand:wikipedia":"en:Commercial Bank of Ceylon",name:"Commercial Bank of Ceylon PLC"},matchScore:2,suggestion:true},"amenity/bank/Commerzbank":{name:"Commerzbank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q157617"},addTags:{amenity:"bank",brand:"Commerzbank","brand:wikidata":"Q157617","brand:wikipedia":"en:Commerzbank",name:"Commerzbank"},removeTags:{amenity:"bank",brand:"Commerzbank","brand:wikidata":"Q157617","brand:wikipedia":"en:Commerzbank",name:"Commerzbank"},matchScore:2,suggestion:true},"amenity/bank/Commonwealth Bank":{name:"Commonwealth Bank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q285328"},addTags:{amenity:"bank",brand:"Commonwealth Bank","brand:wikidata":"Q285328","brand:wikipedia":"en:Commonwealth Bank",name:"Commonwealth Bank"},removeTags:{amenity:"bank",brand:"Commonwealth Bank","brand:wikidata":"Q285328","brand:wikipedia":"en:Commonwealth Bank",name:"Commonwealth Bank"},matchScore:2,suggestion:true},"amenity/bank/Corporation Bank":{name:"Corporation Bank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q2003387"},addTags:{amenity:"bank",brand:"Corporation Bank","brand:wikidata":"Q2003387","brand:wikipedia":"en:Corporation Bank",name:"Corporation Bank"},removeTags:{amenity:"bank",brand:"Corporation Bank","brand:wikidata":"Q2003387","brand:wikipedia":"en:Corporation Bank",name:"Corporation Bank"},matchScore:2,suggestion:true},"amenity/bank/Credem":{name:"Credem",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q3696881"},addTags:{amenity:"bank",brand:"Credem","brand:wikidata":"Q3696881","brand:wikipedia":"en:Credito Emiliano",name:"Credem"},removeTags:{amenity:"bank",brand:"Credem","brand:wikidata":"Q3696881","brand:wikipedia":"en:Credito Emiliano",name:"Credem"},matchScore:2,suggestion:true},"amenity/bank/Credicoop":{name:"Credicoop",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q4854086"},addTags:{amenity:"bank",brand:"Credicoop","brand:wikidata":"Q4854086","brand:wikipedia":"en:Banco Credicoop",name:"Credicoop"},removeTags:{amenity:"bank",brand:"Credicoop","brand:wikidata":"Q4854086","brand:wikipedia":"en:Banco Credicoop",name:"Credicoop"},matchScore:2,suggestion:true},"amenity/bank/Credit Suisse":{name:"Credit Suisse",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q372657"},addTags:{amenity:"bank",brand:"Credit Suisse","brand:wikidata":"Q372657","brand:wikipedia":"en:Credit Suisse",name:"Credit Suisse"},removeTags:{amenity:"bank",brand:"Credit Suisse","brand:wikidata":"Q372657","brand:wikipedia":"en:Credit Suisse",name:"Credit Suisse"},matchScore:2,suggestion:true},"amenity/bank/Credito Valtellinese":{name:"Credito Valtellinese",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q3696888"},addTags:{amenity:"bank",brand:"Credito Valtellinese","brand:wikidata":"Q3696888","brand:wikipedia":"en:Credito Valtellinese",name:"Credito Valtellinese"},removeTags:{amenity:"bank",brand:"Credito Valtellinese","brand:wikidata":"Q3696888","brand:wikipedia":"en:Credito Valtellinese",name:"Credito Valtellinese"},matchScore:2,suggestion:true},"amenity/bank/Crelan":{name:"Crelan",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q389872"},addTags:{amenity:"bank",brand:"Crelan","brand:wikidata":"Q389872","brand:wikipedia":"en:Crelan",name:"Crelan"},removeTags:{amenity:"bank",brand:"Crelan","brand:wikidata":"Q389872","brand:wikipedia":"en:Crelan",name:"Crelan"},matchScore:2,suggestion:true},"amenity/bank/Crédit Agricole":{name:"Crédit Agricole",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q590952"},addTags:{amenity:"bank",brand:"Crédit Agricole","brand:wikidata":"Q590952","brand:wikipedia":"fr:Crédit agricole",name:"Crédit Agricole"},removeTags:{amenity:"bank",brand:"Crédit Agricole","brand:wikidata":"Q590952","brand:wikipedia":"fr:Crédit agricole",name:"Crédit Agricole"},matchScore:2,suggestion:true},"amenity/bank/Crédit Maritime":{name:"Crédit Maritime",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q17176866"},addTags:{amenity:"bank",brand:"Crédit Maritime","brand:wikidata":"Q17176866","brand:wikipedia":"fr:Crédit maritime",name:"Crédit Maritime"},removeTags:{amenity:"bank",brand:"Crédit Maritime","brand:wikidata":"Q17176866","brand:wikipedia":"fr:Crédit maritime",name:"Crédit Maritime"},matchScore:2,suggestion:true},"amenity/bank/Crédit Mutuel":{name:"Crédit Mutuel",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q642627"},addTags:{amenity:"bank",brand:"Crédit Mutuel","brand:wikidata":"Q642627","brand:wikipedia":"en:Crédit Mutuel",name:"Crédit Mutuel"},removeTags:{amenity:"bank",brand:"Crédit Mutuel","brand:wikidata":"Q642627","brand:wikipedia":"en:Crédit Mutuel",name:"Crédit Mutuel"},matchScore:2,suggestion:true},"amenity/bank/Crédit Mutuel de Bretagne":{name:"Crédit Mutuel de Bretagne",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q3006236"},addTags:{amenity:"bank",brand:"Crédit Mutuel de Bretagne","brand:wikidata":"Q3006236","brand:wikipedia":"fr:Crédit mutuel Arkéa",name:"Crédit Mutuel de Bretagne"},removeTags:{amenity:"bank",brand:"Crédit Mutuel de Bretagne","brand:wikidata":"Q3006236","brand:wikipedia":"fr:Crédit mutuel Arkéa",name:"Crédit Mutuel de Bretagne"},matchScore:2,suggestion:true},"amenity/bank/Crédit du Nord":{name:"Crédit du Nord",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q3006209"},addTags:{amenity:"bank",brand:"Crédit du Nord","brand:wikidata":"Q3006209","brand:wikipedia":"en:Crédit du Nord",name:"Crédit du Nord"},removeTags:{amenity:"bank",brand:"Crédit du Nord","brand:wikidata":"Q3006209","brand:wikipedia":"en:Crédit du Nord",name:"Crédit du Nord"},matchScore:2,suggestion:true},"amenity/bank/Crédito Agrícola":{name:"Crédito Agrícola",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q10262017"},addTags:{amenity:"bank",brand:"Crédito Agrícola","brand:wikidata":"Q10262017","brand:wikipedia":"pt:Crédito Agrícola",name:"Crédito Agrícola"},removeTags:{amenity:"bank",brand:"Crédito Agrícola","brand:wikidata":"Q10262017","brand:wikipedia":"pt:Crédito Agrícola",name:"Crédito Agrícola"},matchScore:2,suggestion:true},"amenity/bank/Cбербанк":{name:"Cбербанк",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q205012"},addTags:{amenity:"bank",brand:"Cбербанк","brand:wikidata":"Q205012","brand:wikipedia":"en:Sberbank of Russia",name:"Cбербанк"},removeTags:{amenity:"bank",brand:"Cбербанк","brand:wikidata":"Q205012","brand:wikipedia":"en:Sberbank of Russia",name:"Cбербанк"},matchScore:2,suggestion:true},"amenity/bank/Danske Bank":{name:"Danske Bank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q1636974"},addTags:{amenity:"bank",brand:"Danske Bank","brand:wikidata":"Q1636974","brand:wikipedia":"en:Danske Bank",name:"Danske Bank"},removeTags:{amenity:"bank",brand:"Danske Bank","brand:wikidata":"Q1636974","brand:wikipedia":"en:Danske Bank",name:"Danske Bank"},matchScore:2,suggestion:true},"amenity/bank/Davivienda":{name:"Davivienda",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q5242054"},addTags:{amenity:"bank",brand:"Davivienda","brand:wikidata":"Q5242054","brand:wikipedia":"en:Davivienda",name:"Davivienda"},removeTags:{amenity:"bank",brand:"Davivienda","brand:wikidata":"Q5242054","brand:wikipedia":"en:Davivienda",name:"Davivienda"},matchScore:2,suggestion:true},"amenity/bank/Denizbank":{name:"Denizbank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q1115064"},addTags:{amenity:"bank",brand:"Denizbank","brand:wikidata":"Q1115064","brand:wikipedia":"en:DenizBank",name:"Denizbank"},removeTags:{amenity:"bank",brand:"Denizbank","brand:wikidata":"Q1115064","brand:wikipedia":"en:DenizBank",name:"Denizbank"},matchScore:2,suggestion:true},"amenity/bank/Desjardins":{name:"Desjardins",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q2933350"},addTags:{amenity:"bank",brand:"Desjardins","brand:wikidata":"Q2933350","brand:wikipedia":"en:Desjardins Group",name:"Desjardins"},removeTags:{amenity:"bank",brand:"Desjardins","brand:wikidata":"Q2933350","brand:wikipedia":"en:Desjardins Group",name:"Desjardins"},matchScore:2,suggestion:true},"amenity/bank/Deutsche Bank":{name:"Deutsche Bank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q66048"},addTags:{amenity:"bank",brand:"Deutsche Bank","brand:wikidata":"Q66048","brand:wikipedia":"en:Deutsche Bank",name:"Deutsche Bank"},removeTags:{amenity:"bank",brand:"Deutsche Bank","brand:wikidata":"Q66048","brand:wikipedia":"en:Deutsche Bank",name:"Deutsche Bank"},matchScore:2,suggestion:true},"amenity/bank/Dubai Islamic Bank":{name:"Dubai Islamic Bank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q5310570"},addTags:{amenity:"bank",brand:"Dubai Islamic Bank","brand:wikidata":"Q5310570","brand:wikipedia":"en:Dubai Islamic Bank",name:"Dubai Islamic Bank"},removeTags:{amenity:"bank",brand:"Dubai Islamic Bank","brand:wikidata":"Q5310570","brand:wikipedia":"en:Dubai Islamic Bank",name:"Dubai Islamic Bank"},matchScore:2,suggestion:true},"amenity/bank/EastWest Bank":{name:"EastWest Bank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q5327595"},addTags:{amenity:"bank",brand:"EastWest Bank","brand:wikidata":"Q5327595","brand:wikipedia":"en:EastWest Bank",name:"EastWest Bank"},removeTags:{amenity:"bank",brand:"EastWest Bank","brand:wikidata":"Q5327595","brand:wikipedia":"en:EastWest Bank",name:"EastWest Bank"},matchScore:2,suggestion:true},"amenity/bank/EastWest Unibank":{name:"EastWest Unibank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q5327595"},addTags:{amenity:"bank",brand:"EastWest Unibank","brand:wikidata":"Q5327595","brand:wikipedia":"en:EastWest Bank",name:"EastWest Unibank"},removeTags:{amenity:"bank",brand:"EastWest Unibank","brand:wikidata":"Q5327595","brand:wikipedia":"en:EastWest Bank",name:"EastWest Unibank"},matchScore:2,suggestion:true},"amenity/bank/Ecobank":{name:"Ecobank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q930225"},addTags:{amenity:"bank",brand:"Ecobank","brand:wikidata":"Q930225","brand:wikipedia":"en:Ecobank",name:"Ecobank"},removeTags:{amenity:"bank",brand:"Ecobank","brand:wikidata":"Q930225","brand:wikipedia":"en:Ecobank",name:"Ecobank"},matchScore:2,suggestion:true},"amenity/bank/Erste Bank":{name:"Erste Bank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q696867"},addTags:{amenity:"bank",brand:"Erste Bank","brand:wikidata":"Q696867","brand:wikipedia":"de:Erste Bank",name:"Erste Bank"},removeTags:{amenity:"bank",brand:"Erste Bank","brand:wikidata":"Q696867","brand:wikipedia":"de:Erste Bank",name:"Erste Bank"},matchScore:2,suggestion:true},"amenity/bank/FNB":{name:"FNB",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q3072956"},addTags:{amenity:"bank",brand:"FNB","brand:wikidata":"Q3072956","brand:wikipedia":"en:First National Bank (South Africa)",name:"FNB"},removeTags:{amenity:"bank",brand:"FNB","brand:wikidata":"Q3072956","brand:wikipedia":"en:First National Bank (South Africa)",name:"FNB"},matchScore:2,suggestion:true},"amenity/bank/Faysal Bank":{name:"Faysal Bank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q5439099"},addTags:{amenity:"bank",brand:"Faysal Bank","brand:wikidata":"Q5439099","brand:wikipedia":"en:Faysal Bank",name:"Faysal Bank"},removeTags:{amenity:"bank",brand:"Faysal Bank","brand:wikidata":"Q5439099","brand:wikipedia":"en:Faysal Bank",name:"Faysal Bank"},matchScore:2,suggestion:true},"amenity/bank/Federal Bank":{name:"Federal Bank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q2044983"},addTags:{amenity:"bank",brand:"Federal Bank","brand:wikidata":"Q2044983","brand:wikipedia":"en:Federal Bank",name:"Federal Bank"},removeTags:{amenity:"bank",brand:"Federal Bank","brand:wikidata":"Q2044983","brand:wikipedia":"en:Federal Bank",name:"Federal Bank"},matchScore:2,suggestion:true},"amenity/bank/Fifth Third Bank":{name:"Fifth Third Bank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q1411810"},addTags:{amenity:"bank",brand:"Fifth Third Bank","brand:wikidata":"Q1411810","brand:wikipedia":"en:Fifth Third Bank",name:"Fifth Third Bank"},removeTags:{amenity:"bank",brand:"Fifth Third Bank","brand:wikidata":"Q1411810","brand:wikipedia":"en:Fifth Third Bank",name:"Fifth Third Bank"},matchScore:2,suggestion:true},"amenity/bank/Finansbank":{name:"Finansbank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q1416237"},addTags:{amenity:"bank",brand:"Finansbank","brand:wikidata":"Q1416237","brand:wikipedia":"en:Finansbank",name:"Finansbank"},removeTags:{amenity:"bank",brand:"Finansbank","brand:wikidata":"Q1416237","brand:wikipedia":"en:Finansbank",name:"Finansbank"},matchScore:2,suggestion:true},"amenity/bank/First Citizens Bank":{name:"First Citizens Bank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q5452734"},addTags:{amenity:"bank",brand:"First Citizens Bank","brand:wikidata":"Q5452734","brand:wikipedia":"en:First Citizens Bank (Trinidad and Tobago)",name:"First Citizens Bank"},removeTags:{amenity:"bank",brand:"First Citizens Bank","brand:wikidata":"Q5452734","brand:wikipedia":"en:First Citizens Bank (Trinidad and Tobago)",name:"First Citizens Bank"},matchScore:2,suggestion:true},"amenity/bank/Frost Bank":{name:"Frost Bank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q5506152"},addTags:{amenity:"bank",brand:"Frost Bank","brand:wikidata":"Q5506152","brand:wikipedia":"en:Frost Bank",name:"Frost Bank"},removeTags:{amenity:"bank",brand:"Frost Bank","brand:wikidata":"Q5506152","brand:wikipedia":"en:Frost Bank",name:"Frost Bank"},matchScore:2,suggestion:true},"amenity/bank/GCB Bank":{name:"GCB Bank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q1521346"},addTags:{amenity:"bank",brand:"GCB Bank","brand:wikidata":"Q1521346","brand:wikipedia":"en:GCB Bank Limited",name:"GCB Bank"},removeTags:{amenity:"bank",brand:"GCB Bank","brand:wikidata":"Q1521346","brand:wikipedia":"en:GCB Bank Limited",name:"GCB Bank"},matchScore:2,suggestion:true},"amenity/bank/Galicia":{name:"Galicia",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q5717952"},addTags:{amenity:"bank",brand:"Galicia","brand:wikidata":"Q5717952","brand:wikipedia":"es:Banco Galicia",name:"Galicia"},removeTags:{amenity:"bank",brand:"Galicia","brand:wikidata":"Q5717952","brand:wikipedia":"es:Banco Galicia",name:"Galicia"},matchScore:2,suggestion:true},"amenity/bank/Garanti":{name:"Garanti",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q322962"},addTags:{amenity:"bank",brand:"Garanti","brand:wikidata":"Q322962","brand:wikipedia":"en:Garanti Bank",name:"Garanti"},removeTags:{amenity:"bank",brand:"Garanti","brand:wikidata":"Q322962","brand:wikipedia":"en:Garanti Bank",name:"Garanti"},matchScore:2,suggestion:true},"amenity/bank/Garanti Bankası":{name:"Garanti Bankası",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q322962"},addTags:{amenity:"bank",brand:"Garanti Bankası","brand:wikidata":"Q322962","brand:wikipedia":"en:Garanti Bank",name:"Garanti Bankası"},removeTags:{amenity:"bank",brand:"Garanti Bankası","brand:wikidata":"Q322962","brand:wikipedia":"en:Garanti Bank",name:"Garanti Bankası"},matchScore:2,suggestion:true},"amenity/bank/Getin Bank":{name:"Getin Bank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q9267646"},addTags:{amenity:"bank",brand:"Getin Bank","brand:wikidata":"Q9267646","brand:wikipedia":"en:Getin Bank",name:"Getin Bank"},removeTags:{amenity:"bank",brand:"Getin Bank","brand:wikidata":"Q9267646","brand:wikipedia":"en:Getin Bank",name:"Getin Bank"},matchScore:2,suggestion:true},"amenity/bank/Great Western Bank":{name:"Great Western Bank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q5600185"},addTags:{amenity:"bank",brand:"Great Western Bank","brand:wikidata":"Q5600185","brand:wikipedia":"en:Great Western Bank (1907–present)",name:"Great Western Bank"},removeTags:{amenity:"bank",brand:"Great Western Bank","brand:wikidata":"Q5600185","brand:wikipedia":"en:Great Western Bank (1907–present)",name:"Great Western Bank"},matchScore:2,suggestion:true},"amenity/bank/Groupama":{name:"Groupama",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q3083531"},addTags:{amenity:"bank",brand:"Groupama","brand:wikidata":"Q3083531","brand:wikipedia":"en:Groupama",name:"Groupama"},removeTags:{amenity:"bank",brand:"Groupama","brand:wikidata":"Q3083531","brand:wikipedia":"en:Groupama",name:"Groupama"},matchScore:2,suggestion:true},"amenity/bank/HBL Bank":{name:"HBL Bank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q1566843"},addTags:{amenity:"bank",brand:"HBL Bank","brand:wikidata":"Q1566843","brand:wikipedia":"ur:ایچ بی ایل پاکستان",name:"HBL Bank"},removeTags:{amenity:"bank",brand:"HBL Bank","brand:wikidata":"Q1566843","brand:wikipedia":"ur:ایچ بی ایل پاکستان",name:"HBL Bank"},matchScore:2,suggestion:true},"amenity/bank/HDFC Bank":{name:"HDFC Bank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q631047"},addTags:{amenity:"bank",brand:"HDFC Bank","brand:wikidata":"Q631047","brand:wikipedia":"en:HDFC Bank",name:"HDFC Bank"},removeTags:{amenity:"bank",brand:"HDFC Bank","brand:wikidata":"Q631047","brand:wikipedia":"en:HDFC Bank",name:"HDFC Bank"},matchScore:2,suggestion:true},"amenity/bank/HNB":{name:"HNB",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q3532080"},addTags:{amenity:"bank",brand:"HNB","brand:wikidata":"Q3532080","brand:wikipedia":"en:Hatton National Bank",name:"HNB"},removeTags:{amenity:"bank",brand:"HNB","brand:wikidata":"Q3532080","brand:wikipedia":"en:Hatton National Bank",name:"HNB"},matchScore:2,suggestion:true},"amenity/bank/HSBC":{name:"HSBC",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q190464"},addTags:{amenity:"bank",brand:"HSBC","brand:wikidata":"Q190464","brand:wikipedia":"en:HSBC",name:"HSBC"},removeTags:{amenity:"bank",brand:"HSBC","brand:wikidata":"Q190464","brand:wikipedia":"en:HSBC",name:"HSBC"},matchScore:2,suggestion:true},"amenity/bank/Halifax":{name:"Halifax",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q3310164"},addTags:{amenity:"bank",brand:"Halifax","brand:wikidata":"Q3310164","brand:wikipedia":"en:Halifax (bank)",name:"Halifax"},removeTags:{amenity:"bank",brand:"Halifax","brand:wikidata":"Q3310164","brand:wikipedia":"en:Halifax (bank)",name:"Halifax"},matchScore:2,suggestion:true},"amenity/bank/Halkbank":{name:"Halkbank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q3593818"},addTags:{amenity:"bank",brand:"Halkbank","brand:wikidata":"Q3593818","brand:wikipedia":"en:Halkbank a.d.",name:"Halkbank"},removeTags:{amenity:"bank",brand:"Halkbank","brand:wikidata":"Q3593818","brand:wikipedia":"en:Halkbank a.d.",name:"Halkbank"},matchScore:2,suggestion:true},"amenity/bank/Handelsbanken":{name:"Handelsbanken",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q1421630"},addTags:{amenity:"bank",brand:"Handelsbanken","brand:wikidata":"Q1421630","brand:wikipedia":"en:Handelsbanken",name:"Handelsbanken"},removeTags:{amenity:"bank",brand:"Handelsbanken","brand:wikidata":"Q1421630","brand:wikipedia":"en:Handelsbanken",name:"Handelsbanken"},matchScore:2,suggestion:true},"amenity/bank/Heritage Bank":{name:"Heritage Bank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q5738690"},addTags:{amenity:"bank",brand:"Heritage Bank","brand:wikidata":"Q5738690","brand:wikipedia":"en:Heritage Bank",name:"Heritage Bank"},removeTags:{amenity:"bank",brand:"Heritage Bank","brand:wikidata":"Q5738690","brand:wikipedia":"en:Heritage Bank",name:"Heritage Bank"},matchScore:2,suggestion:true},"amenity/bank/Hong Leong Bank":{name:"Hong Leong Bank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q4383943"},addTags:{amenity:"bank",brand:"Hong Leong Bank","brand:wikidata":"Q4383943","brand:wikipedia":"en:Hong Leong Bank",name:"Hong Leong Bank"},removeTags:{amenity:"bank",brand:"Hong Leong Bank","brand:wikidata":"Q4383943","brand:wikipedia":"en:Hong Leong Bank",name:"Hong Leong Bank"},matchScore:2,suggestion:true},"amenity/bank/Hrvatska poštanska banka":{name:"Hrvatska poštanska banka",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q5923981"},addTags:{amenity:"bank",brand:"Hrvatska poštanska banka","brand:wikidata":"Q5923981","brand:wikipedia":"en:Hrvatska poštanska banka",name:"Hrvatska poštanska banka"},removeTags:{amenity:"bank",brand:"Hrvatska poštanska banka","brand:wikidata":"Q5923981","brand:wikipedia":"en:Hrvatska poštanska banka",name:"Hrvatska poštanska banka"},matchScore:2,suggestion:true},"amenity/bank/Huntington Bank":{name:"Huntington Bank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q798819"},addTags:{amenity:"bank",brand:"Huntington Bank","brand:wikidata":"Q798819","brand:wikipedia":"en:Huntington Bancshares",name:"Huntington Bank"},removeTags:{amenity:"bank",brand:"Huntington Bank","brand:wikidata":"Q798819","brand:wikipedia":"en:Huntington Bancshares",name:"Huntington Bank"},matchScore:2,suggestion:true},"amenity/bank/HypoVereinsbank":{name:"HypoVereinsbank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q220189"},addTags:{amenity:"bank",brand:"HypoVereinsbank","brand:wikidata":"Q220189","brand:wikipedia":"en:HypoVereinsbank",name:"HypoVereinsbank"},removeTags:{amenity:"bank",brand:"HypoVereinsbank","brand:wikidata":"Q220189","brand:wikipedia":"en:HypoVereinsbank",name:"HypoVereinsbank"},matchScore:2,suggestion:true},"amenity/bank/ICBC":{name:"ICBC",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q26463"},addTags:{amenity:"bank",brand:"ICBC","brand:wikidata":"Q26463","brand:wikipedia":"en:Industrial and Commercial Bank of China",name:"ICBC"},removeTags:{amenity:"bank",brand:"ICBC","brand:wikidata":"Q26463","brand:wikipedia":"en:Industrial and Commercial Bank of China",name:"ICBC"},matchScore:2,suggestion:true},"amenity/bank/ICICI Bank":{name:"ICICI Bank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q1653258"},addTags:{amenity:"bank",brand:"ICICI Bank","brand:wikidata":"Q1653258","brand:wikipedia":"en:ICICI Bank",name:"ICICI Bank"},removeTags:{amenity:"bank",brand:"ICICI Bank","brand:wikidata":"Q1653258","brand:wikipedia":"en:ICICI Bank",name:"ICICI Bank"},matchScore:2,suggestion:true},"amenity/bank/IDBI Bank":{name:"IDBI Bank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q3633485"},addTags:{amenity:"bank",brand:"IDBI Bank","brand:wikidata":"Q3633485","brand:wikipedia":"en:IDBI Bank",name:"IDBI Bank"},removeTags:{amenity:"bank",brand:"IDBI Bank","brand:wikidata":"Q3633485","brand:wikipedia":"en:IDBI Bank",name:"IDBI Bank"},matchScore:2,suggestion:true},"amenity/bank/ING":{name:"ING",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q645708"},addTags:{amenity:"bank",brand:"ING","brand:wikidata":"Q645708","brand:wikipedia":"en:ING Group",name:"ING"},removeTags:{amenity:"bank",brand:"ING","brand:wikidata":"Q645708","brand:wikipedia":"en:ING Group",name:"ING"},matchScore:2,suggestion:true},"amenity/bank/ING Bank Śląski":{name:"ING Bank Śląski",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q1410383"},addTags:{amenity:"bank",brand:"ING Bank Śląski","brand:wikidata":"Q1410383","brand:wikipedia":"en:ING Bank Śląski",name:"ING Bank Śląski"},removeTags:{amenity:"bank",brand:"ING Bank Śląski","brand:wikidata":"Q1410383","brand:wikipedia":"en:ING Bank Śląski",name:"ING Bank Śląski"},matchScore:2,suggestion:true},"amenity/bank/Ibercaja":{name:"Ibercaja",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q5907815"},addTags:{amenity:"bank",brand:"Ibercaja","brand:wikidata":"Q5907815","brand:wikipedia":"es:Ibercaja Banco",name:"Ibercaja"},removeTags:{amenity:"bank",brand:"Ibercaja","brand:wikidata":"Q5907815","brand:wikipedia":"es:Ibercaja Banco",name:"Ibercaja"},matchScore:2,suggestion:true},"amenity/bank/Indian Bank":{name:"Indian Bank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q2003789"},addTags:{amenity:"bank",brand:"Indian Bank","brand:wikidata":"Q2003789","brand:wikipedia":"en:Indian Bank",name:"Indian Bank"},removeTags:{amenity:"bank",brand:"Indian Bank","brand:wikidata":"Q2003789","brand:wikipedia":"en:Indian Bank",name:"Indian Bank"},matchScore:2,suggestion:true},"amenity/bank/Indian Overseas Bank":{name:"Indian Overseas Bank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q2003611"},addTags:{amenity:"bank",brand:"Indian Overseas Bank","brand:wikidata":"Q2003611","brand:wikipedia":"en:Indian Overseas Bank",name:"Indian Overseas Bank"},removeTags:{amenity:"bank",brand:"Indian Overseas Bank","brand:wikidata":"Q2003611","brand:wikipedia":"en:Indian Overseas Bank",name:"Indian Overseas Bank"},matchScore:2,suggestion:true},"amenity/bank/Interbank":{name:"Interbank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q2835558"},addTags:{amenity:"bank",brand:"Interbank","brand:wikidata":"Q2835558","brand:wikipedia":"es:Banco Interbank",name:"Interbank"},removeTags:{amenity:"bank",brand:"Interbank","brand:wikidata":"Q2835558","brand:wikipedia":"es:Banco Interbank",name:"Interbank"},matchScore:2,suggestion:true},"amenity/bank/Intesa Sanpaolo":{name:"Intesa Sanpaolo",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q1343118"},addTags:{amenity:"bank",brand:"Intesa Sanpaolo","brand:wikidata":"Q1343118","brand:wikipedia":"it:Intesa Sanpaolo",name:"Intesa Sanpaolo"},removeTags:{amenity:"bank",brand:"Intesa Sanpaolo","brand:wikidata":"Q1343118","brand:wikipedia":"it:Intesa Sanpaolo",name:"Intesa Sanpaolo"},matchScore:2,suggestion:true},"amenity/bank/Itaú":{name:"Itaú",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q2423252"},addTags:{amenity:"bank",brand:"Itaú","brand:wikidata":"Q2423252","brand:wikipedia":"en:Itaú Corpbanca",name:"Itaú"},removeTags:{amenity:"bank",brand:"Itaú","brand:wikidata":"Q2423252","brand:wikipedia":"en:Itaú Corpbanca",name:"Itaú"},matchScore:2,suggestion:true},"amenity/bank/JS Bank":{name:"JS Bank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q6108986"},addTags:{amenity:"bank",brand:"JS Bank","brand:wikidata":"Q6108986","brand:wikipedia":"en:JS Bank",name:"JS Bank"},removeTags:{amenity:"bank",brand:"JS Bank","brand:wikidata":"Q6108986","brand:wikipedia":"en:JS Bank",name:"JS Bank"},matchScore:2,suggestion:true},"amenity/bank/Janata Bank Limited জনতা ব্যাংক লিমিটেড":{name:"Janata Bank Limited জনতা ব্যাংক লিমিটেড",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q3347028"},addTags:{amenity:"bank",brand:"Janata Bank Limited জনতা ব্যাংক লিমিটেড","brand:wikidata":"Q3347028","brand:wikipedia":"en:Janata Bank",name:"Janata Bank Limited জনতা ব্যাংক লিমিটেড"},removeTags:{amenity:"bank",brand:"Janata Bank Limited জনতা ব্যাংক লিমিটেড","brand:wikidata":"Q3347028","brand:wikipedia":"en:Janata Bank",name:"Janata Bank Limited জনতা ব্যাংক লিমিটেড"},matchScore:2,suggestion:true},"amenity/bank/Jyske Bank":{name:"Jyske Bank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q136672"},addTags:{amenity:"bank",brand:"Jyske Bank","brand:wikidata":"Q136672","brand:wikipedia":"en:Jyske Bank",name:"Jyske Bank"},removeTags:{amenity:"bank",brand:"Jyske Bank","brand:wikidata":"Q136672","brand:wikipedia":"en:Jyske Bank",name:"Jyske Bank"},matchScore:2,suggestion:true},"amenity/bank/K&H Bank":{name:"K&H Bank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q6393834"},addTags:{amenity:"bank",brand:"K&H Bank","brand:wikidata":"Q6393834","brand:wikipedia":"en:K&H Bank",name:"K&H Bank"},removeTags:{amenity:"bank",brand:"K&H Bank","brand:wikidata":"Q6393834","brand:wikipedia":"en:K&H Bank",name:"K&H Bank"},matchScore:2,suggestion:true},"amenity/bank/KBC":{name:"KBC",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q941020"},addTags:{amenity:"bank",brand:"KBC","brand:wikidata":"Q941020","brand:wikipedia":"en:KBC Bank",name:"KBC"},removeTags:{amenity:"bank",brand:"KBC","brand:wikidata":"Q941020","brand:wikipedia":"en:KBC Bank",name:"KBC"},matchScore:2,suggestion:true},"amenity/bank/KBZ Bank":{name:"KBZ Bank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q6360949"},addTags:{amenity:"bank",brand:"KBZ Bank","brand:wikidata":"Q6360949","brand:wikipedia":"en:Kanbawza Bank",name:"KBZ Bank"},removeTags:{amenity:"bank",brand:"KBZ Bank","brand:wikidata":"Q6360949","brand:wikipedia":"en:Kanbawza Bank",name:"KBZ Bank"},matchScore:2,suggestion:true},"amenity/bank/Karnataka Bank":{name:"Karnataka Bank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q2042632"},addTags:{amenity:"bank",brand:"Karnataka Bank","brand:wikidata":"Q2042632","brand:wikipedia":"en:Karnataka Bank",name:"Karnataka Bank"},removeTags:{amenity:"bank",brand:"Karnataka Bank","brand:wikidata":"Q2042632","brand:wikipedia":"en:Karnataka Bank",name:"Karnataka Bank"},matchScore:2,suggestion:true},"amenity/bank/Kasa Stefczyka":{name:"Kasa Stefczyka",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q57624461"},addTags:{amenity:"bank",brand:"Kasa Stefczyka","brand:wikidata":"Q57624461",name:"Kasa Stefczyka"},removeTags:{amenity:"bank",brand:"Kasa Stefczyka","brand:wikidata":"Q57624461",name:"Kasa Stefczyka"},matchScore:2,suggestion:true},"amenity/bank/Key Bank":{name:"Key Bank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q1740314"},addTags:{amenity:"bank",brand:"Key Bank","brand:wikidata":"Q1740314","brand:wikipedia":"en:KeyBank",name:"Key Bank"},removeTags:{amenity:"bank",brand:"Key Bank","brand:wikidata":"Q1740314","brand:wikipedia":"en:KeyBank",name:"Key Bank"},matchScore:2,suggestion:true},"amenity/bank/Komerční banka":{name:"Komerční banka",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q1541079"},addTags:{amenity:"bank",brand:"Komerční banka","brand:wikidata":"Q1541079","brand:wikipedia":"en:Komerční banka",name:"Komerční banka"},removeTags:{amenity:"bank",brand:"Komerční banka","brand:wikidata":"Q1541079","brand:wikipedia":"en:Komerční banka",name:"Komerční banka"},matchScore:2,suggestion:true},"amenity/bank/Kreissparkasse":{name:"Kreissparkasse",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q2513770"},addTags:{amenity:"bank",brand:"Kreissparkasse","brand:wikidata":"Q2513770","brand:wikipedia":"de:Verband der Freien Sparkassen",name:"Kreissparkasse"},removeTags:{amenity:"bank",brand:"Kreissparkasse","brand:wikidata":"Q2513770","brand:wikipedia":"de:Verband der Freien Sparkassen",name:"Kreissparkasse"},matchScore:2,suggestion:true},"amenity/bank/Kutxabank":{name:"Kutxabank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q5139377"},addTags:{amenity:"bank",brand:"Kutxabank","brand:wikidata":"Q5139377","brand:wikipedia":"en:Kutxabank",name:"Kutxabank"},removeTags:{amenity:"bank",brand:"Kutxabank","brand:wikidata":"Q5139377","brand:wikipedia":"en:Kutxabank",name:"Kutxabank"},matchScore:2,suggestion:true},"amenity/bank/LCL":{name:"LCL",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q779722"},addTags:{amenity:"bank",brand:"LCL","brand:wikidata":"Q779722","brand:wikipedia":"en:Crédit Lyonnais",name:"LCL"},removeTags:{amenity:"bank",brand:"LCL","brand:wikidata":"Q779722","brand:wikipedia":"en:Crédit Lyonnais",name:"LCL"},matchScore:2,suggestion:true},"amenity/bank/La Banque Postale":{name:"La Banque Postale",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q3206431"},addTags:{amenity:"bank",brand:"La Banque Postale","brand:wikidata":"Q3206431","brand:wikipedia":"en:La Banque postale",name:"La Banque Postale"},removeTags:{amenity:"bank",brand:"La Banque Postale","brand:wikidata":"Q3206431","brand:wikipedia":"en:La Banque postale",name:"La Banque Postale"},matchScore:2,suggestion:true},"amenity/bank/La Caixa":{name:"La Caixa",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q287753"},addTags:{amenity:"bank",brand:"La Caixa","brand:wikidata":"Q287753","brand:wikipedia":"en:La Caixa",name:"La Caixa"},removeTags:{amenity:"bank",brand:"La Caixa","brand:wikidata":"Q287753","brand:wikipedia":"en:La Caixa",name:"La Caixa"},matchScore:2,suggestion:true},"amenity/bank/Laboral Kutxa":{name:"Laboral Kutxa",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q12052386"},addTags:{amenity:"bank",brand:"Laboral Kutxa","brand:wikidata":"Q12052386","brand:wikipedia":"en:Laboral Kutxa",name:"Laboral Kutxa"},removeTags:{amenity:"bank",brand:"Laboral Kutxa","brand:wikidata":"Q12052386","brand:wikipedia":"en:Laboral Kutxa",name:"Laboral Kutxa"},matchScore:2,suggestion:true},"amenity/bank/Landbank":{name:"Landbank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q6483872"},addTags:{amenity:"bank",brand:"Landbank","brand:wikidata":"Q6483872","brand:wikipedia":"en:Land Bank of the Philippines",name:"Landbank"},removeTags:{amenity:"bank",brand:"Landbank","brand:wikidata":"Q6483872","brand:wikipedia":"en:Land Bank of the Philippines",name:"Landbank"},matchScore:2,suggestion:true},"amenity/bank/Liberbank":{name:"Liberbank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q2891018"},addTags:{amenity:"bank",brand:"Liberbank","brand:wikidata":"Q2891018","brand:wikipedia":"en:Liberbank",name:"Liberbank"},removeTags:{amenity:"bank",brand:"Liberbank","brand:wikidata":"Q2891018","brand:wikipedia":"en:Liberbank",name:"Liberbank"},matchScore:2,suggestion:true},"amenity/bank/Lloyds Bank":{name:"Lloyds Bank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q1152847"},addTags:{amenity:"bank",brand:"Lloyds Bank","brand:wikidata":"Q1152847","brand:wikipedia":"en:Lloyds Bank",name:"Lloyds Bank"},removeTags:{amenity:"bank",brand:"Lloyds Bank","brand:wikidata":"Q1152847","brand:wikipedia":"en:Lloyds Bank",name:"Lloyds Bank"},matchScore:2,suggestion:true},"amenity/bank/M&T Bank":{name:"M&T Bank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q3272257"},addTags:{amenity:"bank",brand:"M&T Bank","brand:wikidata":"Q3272257","brand:wikipedia":"en:M&T Bank",name:"M&T Bank"},removeTags:{amenity:"bank",brand:"M&T Bank","brand:wikidata":"Q3272257","brand:wikipedia":"en:M&T Bank",name:"M&T Bank"},matchScore:2,suggestion:true},"amenity/bank/MCB":{name:"MCB",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q15982510"},addTags:{amenity:"bank",brand:"MCB","brand:wikidata":"Q15982510","brand:wikipedia":"ur:ایم سی بی بینک لمیٹڈ",name:"MCB"},removeTags:{amenity:"bank",brand:"MCB","brand:wikidata":"Q15982510","brand:wikipedia":"ur:ایم سی بی بینک لمیٹڈ",name:"MCB"},matchScore:2,suggestion:true},"amenity/bank/MONETA Money Bank":{name:"MONETA Money Bank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q24282966"},addTags:{amenity:"bank",brand:"MONETA Money Bank","brand:wikidata":"Q24282966","brand:wikipedia":"cs:Moneta Money Bank",name:"MONETA Money Bank"},removeTags:{amenity:"bank",brand:"MONETA Money Bank","brand:wikidata":"Q24282966","brand:wikipedia":"cs:Moneta Money Bank",name:"MONETA Money Bank"},matchScore:2,suggestion:true},"amenity/bank/Maybank":{name:"Maybank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q1364018"},addTags:{amenity:"bank",brand:"Maybank","brand:wikidata":"Q1364018","brand:wikipedia":"en:Maybank",name:"Maybank"},removeTags:{amenity:"bank",brand:"Maybank","brand:wikidata":"Q1364018","brand:wikipedia":"en:Maybank",name:"Maybank"},matchScore:2,suggestion:true},"amenity/bank/Meezan Bank":{name:"Meezan Bank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q6807934"},addTags:{amenity:"bank",brand:"Meezan Bank","brand:wikidata":"Q6807934","brand:wikipedia":"en:Meezan Bank",name:"Meezan Bank"},removeTags:{amenity:"bank",brand:"Meezan Bank","brand:wikidata":"Q6807934","brand:wikipedia":"en:Meezan Bank",name:"Meezan Bank"},matchScore:2,suggestion:true},"amenity/bank/Mibanco":{name:"Mibanco",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q5558589"},addTags:{amenity:"bank",brand:"Mibanco","brand:wikidata":"Q5558589","brand:wikipedia":"es:MiBanco",name:"Mibanco"},removeTags:{amenity:"bank",brand:"Mibanco","brand:wikidata":"Q5558589","brand:wikipedia":"es:MiBanco",name:"Mibanco"},matchScore:2,suggestion:true},"amenity/bank/Millennium Bank":{name:"Millennium Bank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q4855947"},addTags:{amenity:"bank",brand:"Millennium Bank","brand:wikidata":"Q4855947","brand:wikipedia":"pl:Bank Millennium",name:"Millennium Bank"},removeTags:{amenity:"bank",brand:"Millennium Bank","brand:wikidata":"Q4855947","brand:wikipedia":"pl:Bank Millennium",name:"Millennium Bank"},matchScore:2,suggestion:true},"amenity/bank/Millennium bcp":{name:"Millennium bcp",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q118581"},addTags:{amenity:"bank",brand:"Millennium bcp","brand:wikidata":"Q118581","brand:wikipedia":"pt:Banco Comercial Português",name:"Millennium bcp"},removeTags:{amenity:"bank",brand:"Millennium bcp","brand:wikidata":"Q118581","brand:wikipedia":"pt:Banco Comercial Português",name:"Millennium bcp"},matchScore:2,suggestion:true},"amenity/bank/Monte dei Paschi di Siena":{name:"Monte dei Paschi di Siena",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q46730"},addTags:{amenity:"bank",brand:"Monte dei Paschi di Siena","brand:wikidata":"Q46730","brand:wikipedia":"en:Banca Monte dei Paschi di Siena",name:"Monte dei Paschi di Siena"},removeTags:{amenity:"bank",brand:"Monte dei Paschi di Siena","brand:wikidata":"Q46730","brand:wikipedia":"en:Banca Monte dei Paschi di Siena",name:"Monte dei Paschi di Siena"},matchScore:2,suggestion:true},"amenity/bank/Montepio":{name:"Montepio",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q1946091"},addTags:{amenity:"bank",brand:"Montepio","brand:wikidata":"Q1946091","brand:wikipedia":"en:Montepio (bank)",name:"Montepio"},removeTags:{amenity:"bank",brand:"Montepio","brand:wikidata":"Q1946091","brand:wikipedia":"en:Montepio (bank)",name:"Montepio"},matchScore:2,suggestion:true},"amenity/bank/NAB":{name:"NAB",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q1430985"},addTags:{amenity:"bank",brand:"NAB","brand:wikidata":"Q1430985","brand:wikipedia":"en:National Australia Bank",name:"NAB"},removeTags:{amenity:"bank",brand:"NAB","brand:wikidata":"Q1430985","brand:wikipedia":"en:National Australia Bank",name:"NAB"},matchScore:2,suggestion:true},"amenity/bank/NatWest":{name:"NatWest",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q2740021"},addTags:{amenity:"bank",brand:"NatWest","brand:wikidata":"Q2740021","brand:wikipedia":"en:NatWest",name:"NatWest"},removeTags:{amenity:"bank",brand:"NatWest","brand:wikidata":"Q2740021","brand:wikipedia":"en:NatWest",name:"NatWest"},matchScore:2,suggestion:true},"amenity/bank/Nationwide":{name:"Nationwide",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q846735"},addTags:{amenity:"bank",brand:"Nationwide","brand:wikidata":"Q846735","brand:wikipedia":"en:Nationwide Building Society",name:"Nationwide"},removeTags:{amenity:"bank",brand:"Nationwide","brand:wikidata":"Q846735","brand:wikipedia":"en:Nationwide Building Society",name:"Nationwide"},matchScore:2,suggestion:true},"amenity/bank/Navy Federal Credit Union":{name:"Navy Federal Credit Union",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q6982632"},addTags:{amenity:"bank",brand:"Navy Federal Credit Union","brand:wikidata":"Q6982632","brand:wikipedia":"en:Navy Federal Credit Union",name:"Navy Federal Credit Union"},removeTags:{amenity:"bank",brand:"Navy Federal Credit Union","brand:wikidata":"Q6982632","brand:wikipedia":"en:Navy Federal Credit Union",name:"Navy Federal Credit Union"},matchScore:2,suggestion:true},"amenity/bank/Nedbank":{name:"Nedbank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q2751701"},addTags:{amenity:"bank",brand:"Nedbank","brand:wikidata":"Q2751701","brand:wikipedia":"en:Nedbank",name:"Nedbank"},removeTags:{amenity:"bank",brand:"Nedbank","brand:wikidata":"Q2751701","brand:wikipedia":"en:Nedbank",name:"Nedbank"},matchScore:2,suggestion:true},"amenity/bank/Nordea":{name:"Nordea",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q1123823"},addTags:{amenity:"bank",brand:"Nordea","brand:wikidata":"Q1123823","brand:wikipedia":"en:Nordea",name:"Nordea"},removeTags:{amenity:"bank",brand:"Nordea","brand:wikidata":"Q1123823","brand:wikipedia":"en:Nordea",name:"Nordea"},matchScore:2,suggestion:true},"amenity/bank/Novo Banco":{name:"Novo Banco",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q17488861"},addTags:{amenity:"bank",brand:"Novo Banco","brand:wikidata":"Q17488861","brand:wikipedia":"en:Novo Banco",name:"Novo Banco"},removeTags:{amenity:"bank",brand:"Novo Banco","brand:wikidata":"Q17488861","brand:wikipedia":"en:Novo Banco",name:"Novo Banco"},matchScore:2,suggestion:true},"amenity/bank/OLB":{name:"OLB",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q879591"},addTags:{amenity:"bank",brand:"OLB","brand:wikidata":"Q879591","brand:wikipedia":"en:Oldenburgische Landesbank",name:"OLB"},removeTags:{amenity:"bank",brand:"OLB","brand:wikidata":"Q879591","brand:wikipedia":"en:Oldenburgische Landesbank",name:"OLB"},matchScore:2,suggestion:true},"amenity/bank/OTP":{name:"OTP",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q912778"},addTags:{amenity:"bank",brand:"OTP","brand:wikidata":"Q912778","brand:wikipedia":"en:OTP Bank",name:"OTP"},removeTags:{amenity:"bank",brand:"OTP","brand:wikidata":"Q912778","brand:wikipedia":"en:OTP Bank",name:"OTP"},matchScore:2,suggestion:true},"amenity/bank/Oberbank":{name:"Oberbank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q2009139"},addTags:{amenity:"bank",brand:"Oberbank","brand:wikidata":"Q2009139","brand:wikipedia":"de:Oberbank",name:"Oberbank"},removeTags:{amenity:"bank",brand:"Oberbank","brand:wikidata":"Q2009139","brand:wikipedia":"de:Oberbank",name:"Oberbank"},matchScore:2,suggestion:true},"amenity/bank/Occidental de Descuento":{name:"Occidental de Descuento",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q4854108"},addTags:{amenity:"bank",brand:"Occidental de Descuento","brand:wikidata":"Q4854108","brand:wikipedia":"en:Banco Occidental de Descuento",name:"Occidental de Descuento"},removeTags:{amenity:"bank",brand:"Occidental de Descuento","brand:wikidata":"Q4854108","brand:wikipedia":"en:Banco Occidental de Descuento",name:"Occidental de Descuento"},matchScore:2,suggestion:true},"amenity/bank/Oldenburgische Landesbank":{name:"Oldenburgische Landesbank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q879591"},addTags:{amenity:"bank",brand:"Oldenburgische Landesbank","brand:wikidata":"Q879591","brand:wikipedia":"en:Oldenburgische Landesbank",name:"Oldenburgische Landesbank"},removeTags:{amenity:"bank",brand:"Oldenburgische Landesbank","brand:wikidata":"Q879591","brand:wikipedia":"en:Oldenburgische Landesbank",name:"Oldenburgische Landesbank"},matchScore:2,suggestion:true},"amenity/bank/One Network Bank":{name:"One Network Bank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q7093019"},addTags:{amenity:"bank",brand:"One Network Bank","brand:wikidata":"Q7093019","brand:wikipedia":"en:One Network Bank",name:"One Network Bank"},removeTags:{amenity:"bank",brand:"One Network Bank","brand:wikidata":"Q7093019","brand:wikipedia":"en:One Network Bank",name:"One Network Bank"},matchScore:2,suggestion:true},"amenity/bank/Oriental Bank of Commerce":{name:"Oriental Bank of Commerce",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q367008"},addTags:{amenity:"bank",brand:"Oriental Bank of Commerce","brand:wikidata":"Q367008","brand:wikipedia":"en:Oriental Bank of Commerce",name:"Oriental Bank of Commerce"},removeTags:{amenity:"bank",brand:"Oriental Bank of Commerce","brand:wikidata":"Q367008","brand:wikipedia":"en:Oriental Bank of Commerce",name:"Oriental Bank of Commerce"},matchScore:2,suggestion:true},"amenity/bank/PBZ":{name:"PBZ",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q7246343"},addTags:{amenity:"bank",brand:"PBZ","brand:wikidata":"Q7246343","brand:wikipedia":"en:Privredna banka Zagreb",name:"PBZ"},removeTags:{amenity:"bank",brand:"PBZ","brand:wikidata":"Q7246343","brand:wikipedia":"en:Privredna banka Zagreb",name:"PBZ"},matchScore:2,suggestion:true},"amenity/bank/PKO BP":{name:"PKO BP",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q578832"},addTags:{amenity:"bank",brand:"PKO BP","brand:wikidata":"Q578832","brand:wikipedia":"en:PKO Bank Polski",name:"PKO BP"},removeTags:{amenity:"bank",brand:"PKO BP","brand:wikidata":"Q578832","brand:wikipedia":"en:PKO Bank Polski",name:"PKO BP"},matchScore:2,suggestion:true},"amenity/bank/PNC Bank":{name:"PNC Bank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q38928"},addTags:{amenity:"bank",brand:"PNC Bank","brand:wikidata":"Q38928","brand:wikipedia":"en:PNC Financial Services",name:"PNC Bank"},removeTags:{amenity:"bank",brand:"PNC Bank","brand:wikidata":"Q38928","brand:wikipedia":"en:PNC Financial Services",name:"PNC Bank"},matchScore:2,suggestion:true},"amenity/bank/PSBank":{name:"PSBank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q7185203"},addTags:{amenity:"bank",brand:"PSBank","brand:wikidata":"Q7185203","brand:wikipedia":"en:Philippine Savings Bank",name:"PSBank"},removeTags:{amenity:"bank",brand:"PSBank","brand:wikidata":"Q7185203","brand:wikipedia":"en:Philippine Savings Bank",name:"PSBank"},matchScore:2,suggestion:true},"amenity/bank/Panin Bank":{name:"Panin Bank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q12502751"},addTags:{amenity:"bank",brand:"Panin Bank","brand:wikidata":"Q12502751","brand:wikipedia":"id:Panin Bank",name:"Panin Bank"},removeTags:{amenity:"bank",brand:"Panin Bank","brand:wikidata":"Q12502751","brand:wikipedia":"id:Panin Bank",name:"Panin Bank"},matchScore:2,suggestion:true},"amenity/bank/Patagonia":{name:"Patagonia",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q2882078"},addTags:{amenity:"bank",brand:"Patagonia","brand:wikidata":"Q2882078","brand:wikipedia":"en:Banco Patagonia",name:"Patagonia"},removeTags:{amenity:"bank",brand:"Patagonia","brand:wikidata":"Q2882078","brand:wikipedia":"en:Banco Patagonia",name:"Patagonia"},matchScore:2,suggestion:true},"amenity/bank/Pekao SA":{name:"Pekao SA",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q806642"},addTags:{amenity:"bank",brand:"Pekao SA","brand:wikidata":"Q806642","brand:wikipedia":"pl:Bank Polska Kasa Opieki",name:"Pekao SA"},removeTags:{amenity:"bank",brand:"Pekao SA","brand:wikidata":"Q806642","brand:wikipedia":"pl:Bank Polska Kasa Opieki",name:"Pekao SA"},matchScore:2,suggestion:true},"amenity/bank/People's United Bank":{name:"People's United Bank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q7165802"},addTags:{amenity:"bank",brand:"People's United Bank","brand:wikidata":"Q7165802","brand:wikipedia":"en:People's United Financial",name:"People's United Bank"},removeTags:{amenity:"bank",brand:"People's United Bank","brand:wikidata":"Q7165802","brand:wikipedia":"en:People's United Financial",name:"People's United Bank"},matchScore:2,suggestion:true},"amenity/bank/Peoples Bank":{name:"Peoples Bank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q7166050"},addTags:{amenity:"bank",brand:"Peoples Bank","brand:wikidata":"Q7166050","brand:wikipedia":"en:Peoples Bank",name:"Peoples Bank"},removeTags:{amenity:"bank",brand:"Peoples Bank","brand:wikidata":"Q7166050","brand:wikipedia":"en:Peoples Bank",name:"Peoples Bank"},matchScore:2,suggestion:true},"amenity/bank/Philippine National Bank":{name:"Philippine National Bank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q1657971"},addTags:{amenity:"bank",brand:"Philippine National Bank","brand:wikidata":"Q1657971","brand:wikipedia":"en:Philippine National Bank",name:"Philippine National Bank"},removeTags:{amenity:"bank",brand:"Philippine National Bank","brand:wikidata":"Q1657971","brand:wikipedia":"en:Philippine National Bank",name:"Philippine National Bank"},matchScore:2,suggestion:true},"amenity/bank/Piraeus Bank":{name:"Piraeus Bank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q3312"},addTags:{amenity:"bank",brand:"Piraeus Bank","brand:wikidata":"Q3312","brand:wikipedia":"en:Piraeus Bank",name:"Piraeus Bank"},removeTags:{amenity:"bank",brand:"Piraeus Bank","brand:wikidata":"Q3312","brand:wikipedia":"en:Piraeus Bank",name:"Piraeus Bank"},matchScore:2,suggestion:true},"amenity/bank/Postbank":{name:"Postbank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q708835"},addTags:{amenity:"bank",brand:"Postbank","brand:wikidata":"Q708835","brand:wikipedia":"en:Deutsche Postbank",name:"Postbank"},removeTags:{amenity:"bank",brand:"Postbank","brand:wikidata":"Q708835","brand:wikipedia":"en:Deutsche Postbank",name:"Postbank"},matchScore:2,suggestion:true},"amenity/bank/Prima banka":{name:"Prima banka",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q13538661"},addTags:{amenity:"bank",brand:"Prima banka","brand:wikidata":"Q13538661","brand:wikipedia":"sk:Prima banka Slovensko",name:"Prima banka"},removeTags:{amenity:"bank",brand:"Prima banka","brand:wikidata":"Q13538661","brand:wikipedia":"sk:Prima banka Slovensko",name:"Prima banka"},matchScore:2,suggestion:true},"amenity/bank/Punjab National Bank":{name:"Punjab National Bank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q2743499"},addTags:{amenity:"bank",brand:"Punjab National Bank","brand:wikidata":"Q2743499","brand:wikipedia":"en:Punjab National Bank",name:"Punjab National Bank"},removeTags:{amenity:"bank",brand:"Punjab National Bank","brand:wikidata":"Q2743499","brand:wikipedia":"en:Punjab National Bank",name:"Punjab National Bank"},matchScore:2,suggestion:true},"amenity/bank/RBC":{name:"RBC",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q735261"},addTags:{amenity:"bank",brand:"RBC","brand:wikidata":"Q735261","brand:wikipedia":"en:Royal Bank of Canada",name:"RBC"},removeTags:{amenity:"bank",brand:"RBC","brand:wikidata":"Q735261","brand:wikipedia":"en:Royal Bank of Canada",name:"RBC"},matchScore:2,suggestion:true},"amenity/bank/RBS":{name:"RBS",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q160126"},addTags:{amenity:"bank",brand:"RBS","brand:wikidata":"Q160126","brand:wikipedia":"en:Royal Bank of Scotland",name:"RBS"},removeTags:{amenity:"bank",brand:"RBS","brand:wikidata":"Q160126","brand:wikipedia":"en:Royal Bank of Scotland",name:"RBS"},matchScore:2,suggestion:true},"amenity/bank/RCBC":{name:"RCBC",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q7339070"},addTags:{amenity:"bank",brand:"RCBC","brand:wikidata":"Q7339070","brand:wikipedia":"en:Rizal Commercial Banking Corporation",name:"RCBC"},removeTags:{amenity:"bank",brand:"RCBC","brand:wikidata":"Q7339070","brand:wikipedia":"en:Rizal Commercial Banking Corporation",name:"RCBC"},matchScore:2,suggestion:true},"amenity/bank/Rabobank":{name:"Rabobank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q252004"},addTags:{amenity:"bank",brand:"Rabobank","brand:wikidata":"Q252004","brand:wikipedia":"en:Rabobank",name:"Rabobank"},removeTags:{amenity:"bank",brand:"Rabobank","brand:wikidata":"Q252004","brand:wikipedia":"en:Rabobank",name:"Rabobank"},matchScore:2,suggestion:true},"amenity/bank/Raiffeisen Polbank":{name:"Raiffeisen Polbank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q9303218"},addTags:{amenity:"bank",brand:"Raiffeisen Polbank","brand:wikidata":"Q9303218","brand:wikipedia":"pl:Raiffeisen Bank Polska",name:"Raiffeisen Polbank"},removeTags:{amenity:"bank",brand:"Raiffeisen Polbank","brand:wikidata":"Q9303218","brand:wikipedia":"pl:Raiffeisen Bank Polska",name:"Raiffeisen Polbank"},matchScore:2,suggestion:true},"amenity/bank/Regions Bank":{name:"Regions Bank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q917131"},addTags:{amenity:"bank",brand:"Regions Bank","brand:wikidata":"Q917131","brand:wikipedia":"en:Regions Financial Corporation",name:"Regions Bank"},removeTags:{amenity:"bank",brand:"Regions Bank","brand:wikidata":"Q917131","brand:wikipedia":"en:Regions Financial Corporation",name:"Regions Bank"},matchScore:2,suggestion:true},"amenity/bank/SEB":{name:"SEB",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q975655"},addTags:{amenity:"bank",brand:"SEB","brand:wikidata":"Q975655","brand:wikipedia":"en:SEB Group",name:"SEB"},removeTags:{amenity:"bank",brand:"SEB","brand:wikidata":"Q975655","brand:wikipedia":"en:SEB Group",name:"SEB"},matchScore:2,suggestion:true},"amenity/bank/SGBCI":{name:"SGBCI",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q3488360"},addTags:{amenity:"bank",brand:"SGBCI","brand:wikidata":"Q3488360","brand:wikipedia":"fr:Société générale de banques en Côte d'Ivoire",name:"SGBCI"},removeTags:{amenity:"bank",brand:"SGBCI","brand:wikidata":"Q3488360","brand:wikipedia":"fr:Société générale de banques en Côte d'Ivoire",name:"SGBCI"},matchScore:2,suggestion:true},"amenity/bank/SNS Bank":{name:"SNS Bank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q1857899"},addTags:{amenity:"bank",brand:"SNS Bank","brand:wikidata":"Q1857899","brand:wikipedia":"en:De Volksbank",name:"SNS Bank"},removeTags:{amenity:"bank",brand:"SNS Bank","brand:wikidata":"Q1857899","brand:wikipedia":"en:De Volksbank",name:"SNS Bank"},matchScore:2,suggestion:true},"amenity/bank/Sampath Bank":{name:"Sampath Bank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q7410095"},addTags:{amenity:"bank",brand:"Sampath Bank","brand:wikidata":"Q7410095","brand:wikipedia":"en:Sampath Bank",name:"Sampath Bank"},removeTags:{amenity:"bank",brand:"Sampath Bank","brand:wikidata":"Q7410095","brand:wikipedia":"en:Sampath Bank",name:"Sampath Bank"},matchScore:2,suggestion:true},"amenity/bank/Santander":{name:"Santander",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q5835668"},addTags:{amenity:"bank",brand:"Santander","brand:wikidata":"Q5835668","brand:wikipedia":"en:Santander Bank",name:"Santander"},removeTags:{amenity:"bank",brand:"Santander","brand:wikidata":"Q5835668","brand:wikipedia":"en:Santander Bank",name:"Santander"},matchScore:2,suggestion:true},"amenity/bank/Santander Río":{name:"Santander Río",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q3385268"},addTags:{amenity:"bank",brand:"Santander Río","brand:wikidata":"Q3385268","brand:wikipedia":"es:Banco Santander Río",name:"Santander Río"},removeTags:{amenity:"bank",brand:"Santander Río","brand:wikidata":"Q3385268","brand:wikipedia":"es:Banco Santander Río",name:"Santander Río"},matchScore:2,suggestion:true},"amenity/bank/Santander Totta":{name:"Santander Totta",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q4854116"},addTags:{amenity:"bank",brand:"Santander Totta","brand:wikidata":"Q4854116","brand:wikipedia":"pt:Banco Santander Portugal",name:"Santander Totta"},removeTags:{amenity:"bank",brand:"Santander Totta","brand:wikidata":"Q4854116","brand:wikipedia":"pt:Banco Santander Portugal",name:"Santander Totta"},matchScore:2,suggestion:true},"amenity/bank/Sberbank":{name:"Sberbank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q205012"},addTags:{amenity:"bank",brand:"Sberbank","brand:wikidata":"Q205012","brand:wikipedia":"en:Sberbank of Russia",name:"Sberbank"},removeTags:{amenity:"bank",brand:"Sberbank","brand:wikidata":"Q205012","brand:wikipedia":"en:Sberbank of Russia",name:"Sberbank"},matchScore:2,suggestion:true},"amenity/bank/Scotiabank":{name:"Scotiabank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q451476"},addTags:{amenity:"bank",brand:"Scotiabank","brand:wikidata":"Q451476","brand:wikipedia":"en:Scotiabank",name:"Scotiabank"},removeTags:{amenity:"bank",brand:"Scotiabank","brand:wikidata":"Q451476","brand:wikipedia":"en:Scotiabank",name:"Scotiabank"},matchScore:2,suggestion:true},"amenity/bank/Security Bank":{name:"Security Bank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q7444945"},addTags:{amenity:"bank",brand:"Security Bank","brand:wikidata":"Q7444945","brand:wikipedia":"en:Security Bank",name:"Security Bank"},removeTags:{amenity:"bank",brand:"Security Bank","brand:wikidata":"Q7444945","brand:wikipedia":"en:Security Bank",name:"Security Bank"},matchScore:2,suggestion:true},"amenity/bank/Seylan Bank":{name:"Seylan Bank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q3532083"},addTags:{amenity:"bank",brand:"Seylan Bank","brand:wikidata":"Q3532083","brand:wikipedia":"en:Seylan Bank",name:"Seylan Bank"},removeTags:{amenity:"bank",brand:"Seylan Bank","brand:wikidata":"Q3532083","brand:wikipedia":"en:Seylan Bank",name:"Seylan Bank"},matchScore:2,suggestion:true},"amenity/bank/Sicoob":{name:"Sicoob",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q28679754"},addTags:{amenity:"bank",brand:"Sicoob","brand:wikidata":"Q28679754","brand:wikipedia":"pt:Sistema de Cooperativas de Crédito do Brasil",name:"Sicoob"},removeTags:{amenity:"bank",brand:"Sicoob","brand:wikidata":"Q28679754","brand:wikipedia":"pt:Sistema de Cooperativas de Crédito do Brasil",name:"Sicoob"},matchScore:2,suggestion:true},"amenity/bank/Sicredi":{name:"Sicredi",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q3483060"},addTags:{amenity:"bank",brand:"Sicredi","brand:wikidata":"Q3483060","brand:wikipedia":"pt:Sistema de Crédito Cooperativo",name:"Sicredi"},removeTags:{amenity:"bank",brand:"Sicredi","brand:wikidata":"Q3483060","brand:wikipedia":"pt:Sistema de Crédito Cooperativo",name:"Sicredi"},matchScore:2,suggestion:true},"amenity/bank/Slovenská sporiteľňa":{name:"Slovenská sporiteľňa",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q7541907"},addTags:{amenity:"bank",brand:"Slovenská sporiteľňa","brand:wikidata":"Q7541907","brand:wikipedia":"en:Slovenská sporiteľňa",name:"Slovenská sporiteľňa"},removeTags:{amenity:"bank",brand:"Slovenská sporiteľňa","brand:wikidata":"Q7541907","brand:wikipedia":"en:Slovenská sporiteľňa",name:"Slovenská sporiteľňa"},matchScore:2,suggestion:true},"amenity/bank/Société Générale":{name:"Société Générale",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q270363"},addTags:{amenity:"bank",brand:"Société Générale","brand:wikidata":"Q270363","brand:wikipedia":"en:Société Générale",name:"Société Générale"},removeTags:{amenity:"bank",brand:"Société Générale","brand:wikidata":"Q270363","brand:wikipedia":"en:Société Générale",name:"Société Générale"},matchScore:2,suggestion:true},"amenity/bank/Sonali Bank":{name:"Sonali Bank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q3350382"},addTags:{amenity:"bank",brand:"Sonali Bank","brand:wikipedia":"en:Sonali Bank","brand:wikidata":"Q3350382",name:"Sonali Bank"},removeTags:{amenity:"bank",brand:"Sonali Bank","brand:wikipedia":"en:Sonali Bank","brand:wikidata":"Q3350382",name:"Sonali Bank"},matchScore:2,suggestion:true},"amenity/bank/Sparda-Bank":{name:"Sparda-Bank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q2307136"},addTags:{amenity:"bank",brand:"Sparda-Bank","brand:wikidata":"Q2307136","brand:wikipedia":"en:Sparda-Bank",name:"Sparda-Bank"},removeTags:{amenity:"bank",brand:"Sparda-Bank","brand:wikidata":"Q2307136","brand:wikipedia":"en:Sparda-Bank",name:"Sparda-Bank"},matchScore:2,suggestion:true},"amenity/bank/Sparkasse":{name:"Sparkasse",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q2513770"},addTags:{amenity:"bank",brand:"Sparkasse","brand:wikidata":"Q2513770","brand:wikipedia":"de:Verband der Freien Sparkassen",name:"Sparkasse"},removeTags:{amenity:"bank",brand:"Sparkasse","brand:wikidata":"Q2513770","brand:wikipedia":"de:Verband der Freien Sparkassen",name:"Sparkasse"},matchScore:2,suggestion:true},"amenity/bank/Stanbic Bank":{name:"Stanbic Bank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q7597999"},addTags:{amenity:"bank",brand:"Stanbic Bank","brand:wikidata":"Q7597999","brand:wikipedia":"en:Stanbic Bank",name:"Stanbic Bank"},removeTags:{amenity:"bank",brand:"Stanbic Bank","brand:wikidata":"Q7597999","brand:wikipedia":"en:Stanbic Bank",name:"Stanbic Bank"},matchScore:2,suggestion:true},"amenity/bank/Standard Bank":{name:"Standard Bank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q1576610"},addTags:{amenity:"bank",brand:"Standard Bank","brand:wikidata":"Q1576610","brand:wikipedia":"en:Standard Bank",name:"Standard Bank"},removeTags:{amenity:"bank",brand:"Standard Bank","brand:wikidata":"Q1576610","brand:wikipedia":"en:Standard Bank",name:"Standard Bank"},matchScore:2,suggestion:true},"amenity/bank/Standard Chartered":{name:"Standard Chartered",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q548278"},addTags:{amenity:"bank",brand:"Standard Chartered","brand:wikidata":"Q548278","brand:wikipedia":"en:Standard Chartered",name:"Standard Chartered"},removeTags:{amenity:"bank",brand:"Standard Chartered","brand:wikidata":"Q548278","brand:wikipedia":"en:Standard Chartered",name:"Standard Chartered"},matchScore:2,suggestion:true},"amenity/bank/State Bank of India":{name:"State Bank of India",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q1340361"},addTags:{amenity:"bank",brand:"State Bank of India","brand:wikidata":"Q1340361","brand:wikipedia":"en:State Bank of India",name:"State Bank of India"},removeTags:{amenity:"bank",brand:"State Bank of India","brand:wikidata":"Q1340361","brand:wikipedia":"en:State Bank of India",name:"State Bank of India"},matchScore:2,suggestion:true},"amenity/bank/Summit Bank":{name:"Summit Bank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q7637775"},addTags:{amenity:"bank",brand:"Summit Bank","brand:wikidata":"Q7637775","brand:wikipedia":"en:Summit Bank",name:"Summit Bank"},removeTags:{amenity:"bank",brand:"Summit Bank","brand:wikidata":"Q7637775","brand:wikipedia":"en:Summit Bank",name:"Summit Bank"},matchScore:2,suggestion:true},"amenity/bank/SunTrust":{name:"SunTrust",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q181507"},addTags:{amenity:"bank",brand:"SunTrust","brand:wikidata":"Q181507","brand:wikipedia":"en:SunTrust Banks",name:"SunTrust"},removeTags:{amenity:"bank",brand:"SunTrust","brand:wikidata":"Q181507","brand:wikipedia":"en:SunTrust Banks",name:"SunTrust"},matchScore:2,suggestion:true},"amenity/bank/Supervielle":{name:"Supervielle",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q5718035"},addTags:{amenity:"bank",brand:"Supervielle","brand:wikidata":"Q5718035","brand:wikipedia":"es:Banco Supervielle",name:"Supervielle"},removeTags:{amenity:"bank",brand:"Supervielle","brand:wikidata":"Q5718035","brand:wikipedia":"es:Banco Supervielle",name:"Supervielle"},matchScore:2,suggestion:true},"amenity/bank/Swedbank":{name:"Swedbank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q1145493"},addTags:{amenity:"bank",brand:"Swedbank","brand:wikidata":"Q1145493","brand:wikipedia":"en:Swedbank",name:"Swedbank"},removeTags:{amenity:"bank",brand:"Swedbank","brand:wikidata":"Q1145493","brand:wikipedia":"en:Swedbank",name:"Swedbank"},matchScore:2,suggestion:true},"amenity/bank/Syndicate Bank":{name:"Syndicate Bank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q2004088"},addTags:{amenity:"bank",brand:"Syndicate Bank","brand:wikidata":"Q2004088","brand:wikipedia":"en:Syndicate Bank",name:"Syndicate Bank"},removeTags:{amenity:"bank",brand:"Syndicate Bank","brand:wikidata":"Q2004088","brand:wikipedia":"en:Syndicate Bank",name:"Syndicate Bank"},matchScore:2,suggestion:true},"amenity/bank/TCF Bank":{name:"TCF Bank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q7669687"},addTags:{amenity:"bank",brand:"TCF Bank","brand:wikidata":"Q7669687","brand:wikipedia":"en:TCF Bank",name:"TCF Bank"},removeTags:{amenity:"bank",brand:"TCF Bank","brand:wikidata":"Q7669687","brand:wikipedia":"en:TCF Bank",name:"TCF Bank"},matchScore:2,suggestion:true},"amenity/bank/TD Bank":{name:"TD Bank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q7669891"},addTags:{amenity:"bank",brand:"TD Bank","brand:wikidata":"Q7669891","brand:wikipedia":"en:TD Bank, N.A.",name:"TD Bank"},removeTags:{amenity:"bank",brand:"TD Bank","brand:wikidata":"Q7669891","brand:wikipedia":"en:TD Bank, N.A.",name:"TD Bank"},matchScore:2,suggestion:true},"amenity/bank/TD Canada Trust":{name:"TD Canada Trust",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q1080670"},addTags:{amenity:"bank",brand:"TD Canada Trust","brand:wikidata":"Q1080670","brand:wikipedia":"en:TD Canada Trust",name:"TD Canada Trust"},removeTags:{amenity:"bank",brand:"TD Canada Trust","brand:wikidata":"Q1080670","brand:wikipedia":"en:TD Canada Trust",name:"TD Canada Trust"},matchScore:2,suggestion:true},"amenity/bank/TEB":{name:"TEB",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q7862447"},addTags:{amenity:"bank",brand:"TEB","brand:wikidata":"Q7862447","brand:wikipedia":"en:Türk Ekonomi Bankası",name:"TEB"},removeTags:{amenity:"bank",brand:"TEB","brand:wikidata":"Q7862447","brand:wikipedia":"en:Türk Ekonomi Bankası",name:"TEB"},matchScore:2,suggestion:true},"amenity/bank/TSB":{name:"TSB",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q7671560"},addTags:{amenity:"bank",brand:"TSB","brand:wikidata":"Q7671560","brand:wikipedia":"en:TSB Bank (United Kingdom)",name:"TSB"},removeTags:{amenity:"bank",brand:"TSB","brand:wikidata":"Q7671560","brand:wikipedia":"en:TSB Bank (United Kingdom)",name:"TSB"},matchScore:2,suggestion:true},"amenity/bank/Targobank":{name:"Targobank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q1455437"},addTags:{amenity:"bank",brand:"Targobank","brand:wikidata":"Q1455437","brand:wikipedia":"en:Targobank",name:"Targobank"},removeTags:{amenity:"bank",brand:"Targobank","brand:wikidata":"Q1455437","brand:wikipedia":"en:Targobank",name:"Targobank"},matchScore:2,suggestion:true},"amenity/bank/Tatra banka":{name:"Tatra banka",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q1718069"},addTags:{amenity:"bank",brand:"Tatra banka","brand:wikidata":"Q1718069","brand:wikipedia":"en:Tatra banka",name:"Tatra banka"},removeTags:{amenity:"bank",brand:"Tatra banka","brand:wikidata":"Q1718069","brand:wikipedia":"en:Tatra banka",name:"Tatra banka"},matchScore:2,suggestion:true},"amenity/bank/Türkiye İş Bankası":{name:"Türkiye İş Bankası",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q909613"},addTags:{amenity:"bank",brand:"Türkiye İş Bankası","brand:wikidata":"Q909613","brand:wikipedia":"en:Türkiye İş Bankası",name:"Türkiye İş Bankası"},removeTags:{amenity:"bank",brand:"Türkiye İş Bankası","brand:wikidata":"Q909613","brand:wikipedia":"en:Türkiye İş Bankası",name:"Türkiye İş Bankası"},matchScore:2,suggestion:true},"amenity/bank/UBA":{name:"UBA",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q513457"},addTags:{amenity:"bank",brand:"UBA","brand:wikidata":"Q513457","brand:wikipedia":"en:United Bank for Africa",name:"UBA"},removeTags:{amenity:"bank",brand:"UBA","brand:wikidata":"Q513457","brand:wikipedia":"en:United Bank for Africa",name:"UBA"},matchScore:2,suggestion:true},"amenity/bank/UBI Banca":{name:"UBI Banca",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q1476162"},addTags:{amenity:"bank",brand:"UBI Banca","brand:wikidata":"Q1476162","brand:wikipedia":"en:UBI Banca",name:"UBI Banca"},removeTags:{amenity:"bank",brand:"UBI Banca","brand:wikidata":"Q1476162","brand:wikipedia":"en:UBI Banca",name:"UBI Banca"},matchScore:2,suggestion:true},"amenity/bank/UBL":{name:"UBL",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q7887504"},addTags:{amenity:"bank",brand:"UBL","brand:en":"United Bank Limited Pakistan","brand:wikidata":"Q7887504","brand:wikipedia":"ur:یونائیٹڈ بینک (پاکستان)",name:"UBL","name:en":"United Bank Limited Pakistan"},removeTags:{amenity:"bank",brand:"UBL","brand:en":"United Bank Limited Pakistan","brand:wikidata":"Q7887504","brand:wikipedia":"ur:یونائیٹڈ بینک (پاکستان)",name:"UBL","name:en":"United Bank Limited Pakistan"},matchScore:2,suggestion:true},"amenity/bank/UBS":{name:"UBS",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q193199"},addTags:{amenity:"bank",brand:"UBS","brand:wikidata":"Q193199","brand:wikipedia":"en:UBS",name:"UBS"},removeTags:{amenity:"bank",brand:"UBS","brand:wikidata":"Q193199","brand:wikipedia":"en:UBS",name:"UBS"},matchScore:2,suggestion:true},"amenity/bank/UCO Bank":{name:"UCO Bank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q2005310"},addTags:{amenity:"bank",brand:"UCO Bank","brand:wikidata":"Q2005310","brand:wikipedia":"en:UCO Bank",name:"UCO Bank"},removeTags:{amenity:"bank",brand:"UCO Bank","brand:wikidata":"Q2005310","brand:wikipedia":"en:UCO Bank",name:"UCO Bank"},matchScore:2,suggestion:true},"amenity/bank/UCPB":{name:"UCPB",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q7887615"},addTags:{amenity:"bank",brand:"UCPB","brand:wikidata":"Q7887615","brand:wikipedia":"en:United Coconut Planters Bank",name:"UCPB"},removeTags:{amenity:"bank",brand:"UCPB","brand:wikidata":"Q7887615","brand:wikipedia":"en:United Coconut Planters Bank",name:"UCPB"},matchScore:2,suggestion:true},"amenity/bank/UOB":{name:"UOB",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q2064074"},addTags:{amenity:"bank",brand:"UOB","brand:wikidata":"Q2064074","brand:wikipedia":"en:United Overseas Bank",name:"UOB"},removeTags:{amenity:"bank",brand:"UOB","brand:wikidata":"Q2064074","brand:wikipedia":"en:United Overseas Bank",name:"UOB"},matchScore:2,suggestion:true},"amenity/bank/US Bank":{name:"US Bank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q739084"},addTags:{amenity:"bank",brand:"US Bank","brand:wikidata":"Q739084","brand:wikipedia":"en:U.S. Bancorp",name:"US Bank"},removeTags:{amenity:"bank",brand:"US Bank","brand:wikidata":"Q739084","brand:wikipedia":"en:U.S. Bancorp",name:"US Bank"},matchScore:2,suggestion:true},"amenity/bank/Ulster Bank":{name:"Ulster Bank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q2613366"},addTags:{amenity:"bank",brand:"Ulster Bank","brand:wikidata":"Q2613366","brand:wikipedia":"en:Ulster Bank",name:"Ulster Bank"},removeTags:{amenity:"bank",brand:"Ulster Bank","brand:wikidata":"Q2613366","brand:wikipedia":"en:Ulster Bank",name:"Ulster Bank"},matchScore:2,suggestion:true},"amenity/bank/Umpqua Bank":{name:"Umpqua Bank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q7881772"},addTags:{amenity:"bank",brand:"Umpqua Bank","brand:wikidata":"Q7881772","brand:wikipedia":"en:Umpqua Holdings Corporation",name:"Umpqua Bank"},removeTags:{amenity:"bank",brand:"Umpqua Bank","brand:wikidata":"Q7881772","brand:wikipedia":"en:Umpqua Holdings Corporation",name:"Umpqua Bank"},matchScore:2,suggestion:true},"amenity/bank/UniCredit Bank":{name:"UniCredit Bank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q45568"},addTags:{amenity:"bank",brand:"UniCredit Bank","brand:wikidata":"Q45568","brand:wikipedia":"en:UniCredit",name:"UniCredit Bank"},removeTags:{amenity:"bank",brand:"UniCredit Bank","brand:wikidata":"Q45568","brand:wikipedia":"en:UniCredit",name:"UniCredit Bank"},matchScore:2,suggestion:true},"amenity/bank/Unicaja Banco":{name:"Unicaja Banco",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q2543704"},addTags:{amenity:"bank",brand:"Unicaja Banco","brand:wikidata":"Q2543704","brand:wikipedia":"en:Unicaja",name:"Unicaja Banco"},removeTags:{amenity:"bank",brand:"Unicaja Banco","brand:wikidata":"Q2543704","brand:wikipedia":"en:Unicaja",name:"Unicaja Banco"},matchScore:2,suggestion:true},"amenity/bank/Union Bank of India":{name:"Union Bank of India",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q2004078"},addTags:{amenity:"bank",brand:"Union Bank of India","brand:wikidata":"Q2004078","brand:wikipedia":"en:Union Bank of India",name:"Union Bank of India"},removeTags:{amenity:"bank",brand:"Union Bank of India","brand:wikidata":"Q2004078","brand:wikipedia":"en:Union Bank of India",name:"Union Bank of India"},matchScore:2,suggestion:true},"amenity/bank/UnionBank (Philippines)":{name:"UnionBank (Philippines)",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q7885403"},addTags:{amenity:"bank",brand:"UnionBank","brand:wikidata":"Q7885403","brand:wikipedia":"en:Union Bank of the Philippines",name:"UnionBank"},removeTags:{amenity:"bank",brand:"UnionBank","brand:wikidata":"Q7885403","brand:wikipedia":"en:Union Bank of the Philippines",name:"UnionBank"},matchScore:2,suggestion:true},"amenity/bank/UnionBank (USA)":{name:"UnionBank (USA)",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q1442804"},addTags:{amenity:"bank",brand:"UnionBank","brand:wikidata":"Q1442804","brand:wikipedia":"en:MUFG Union Bank",name:"UnionBank"},removeTags:{amenity:"bank",brand:"UnionBank","brand:wikidata":"Q1442804","brand:wikipedia":"en:MUFG Union Bank",name:"UnionBank"},matchScore:2,suggestion:true},"amenity/bank/Vakıfbank":{name:"Vakıfbank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q1148521"},addTags:{amenity:"bank",brand:"Vakıfbank","brand:wikidata":"Q1148521","brand:wikipedia":"en:VakıfBank",name:"Vakıfbank"},removeTags:{amenity:"bank",brand:"Vakıfbank","brand:wikidata":"Q1148521","brand:wikipedia":"en:VakıfBank",name:"Vakıfbank"},matchScore:2,suggestion:true},"amenity/bank/Veneto Banca":{name:"Veneto Banca",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q3127221"},addTags:{amenity:"bank",brand:"Veneto Banca","brand:wikidata":"Q3127221","brand:wikipedia":"en:Veneto Banca",name:"Veneto Banca"},removeTags:{amenity:"bank",brand:"Veneto Banca","brand:wikidata":"Q3127221","brand:wikipedia":"en:Veneto Banca",name:"Veneto Banca"},matchScore:2,suggestion:true},"amenity/bank/Vijaya Bank":{name:"Vijaya Bank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q2003171"},addTags:{amenity:"bank",brand:"Vijaya Bank","brand:wikidata":"Q2003171","brand:wikipedia":"en:Vijaya Bank",name:"Vijaya Bank"},removeTags:{amenity:"bank",brand:"Vijaya Bank","brand:wikidata":"Q2003171","brand:wikipedia":"en:Vijaya Bank",name:"Vijaya Bank"},matchScore:2,suggestion:true},"amenity/bank/Volksbank":{name:"Volksbank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q695110"},addTags:{amenity:"bank",brand:"Volksbank","brand:wikidata":"Q695110","brand:wikipedia":"en:Volksbank",name:"Volksbank"},removeTags:{amenity:"bank",brand:"Volksbank","brand:wikidata":"Q695110","brand:wikipedia":"en:Volksbank",name:"Volksbank"},matchScore:2,suggestion:true},"amenity/bank/VÚB":{name:"VÚB",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q12778981"},addTags:{amenity:"bank",brand:"VÚB","brand:wikidata":"Q12778981","brand:wikipedia":"en:Všeobecná úverová banka",name:"VÚB"},removeTags:{amenity:"bank",brand:"VÚB","brand:wikidata":"Q12778981","brand:wikipedia":"en:Všeobecná úverová banka",name:"VÚB"},matchScore:2,suggestion:true},"amenity/bank/Washington Federal":{name:"Washington Federal",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q7971859"},addTags:{amenity:"bank",brand:"Washington Federal","brand:wikidata":"Q7971859","brand:wikipedia":"en:Washington Federal",name:"Washington Federal"},removeTags:{amenity:"bank",brand:"Washington Federal","brand:wikidata":"Q7971859","brand:wikipedia":"en:Washington Federal",name:"Washington Federal"},matchScore:2,suggestion:true},"amenity/bank/Wells Fargo":{name:"Wells Fargo",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q744149"},addTags:{amenity:"bank",brand:"Wells Fargo","brand:wikidata":"Q744149","brand:wikipedia":"en:Wells Fargo",name:"Wells Fargo"},removeTags:{amenity:"bank",brand:"Wells Fargo","brand:wikidata":"Q744149","brand:wikipedia":"en:Wells Fargo",name:"Wells Fargo"},matchScore:2,suggestion:true},"amenity/bank/Western Union":{name:"Western Union",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q861042"},addTags:{amenity:"bank",brand:"Western Union","brand:wikidata":"Q861042","brand:wikipedia":"en:Western Union",name:"Western Union"},removeTags:{amenity:"bank",brand:"Western Union","brand:wikidata":"Q861042","brand:wikipedia":"en:Western Union",name:"Western Union"},matchScore:2,suggestion:true},"amenity/bank/Westpac":{name:"Westpac",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q2031726"},addTags:{amenity:"bank",brand:"Westpac","brand:wikidata":"Q2031726","brand:wikipedia":"en:Westpac",name:"Westpac"},removeTags:{amenity:"bank",brand:"Westpac","brand:wikidata":"Q2031726","brand:wikipedia":"en:Westpac",name:"Westpac"},matchScore:2,suggestion:true},"amenity/bank/Yapı Kredi":{name:"Yapı Kredi",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q8049138"},addTags:{amenity:"bank",brand:"Yapı Kredi","brand:wikidata":"Q8049138","brand:wikipedia":"en:Yapı ve Kredi Bankası",name:"Yapı Kredi"},removeTags:{amenity:"bank",brand:"Yapı Kredi","brand:wikidata":"Q8049138","brand:wikipedia":"en:Yapı ve Kredi Bankası",name:"Yapı Kredi"},matchScore:2,suggestion:true},"amenity/bank/Yorkshire Bank":{name:"Yorkshire Bank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q8055678"},addTags:{amenity:"bank",brand:"Yorkshire Bank","brand:wikidata":"Q8055678","brand:wikipedia":"en:Yorkshire Bank",name:"Yorkshire Bank"},removeTags:{amenity:"bank",brand:"Yorkshire Bank","brand:wikidata":"Q8055678","brand:wikipedia":"en:Yorkshire Bank",name:"Yorkshire Bank"},matchScore:2,suggestion:true},"amenity/bank/Yorkshire Building Society":{name:"Yorkshire Building Society",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q12073381"},addTags:{amenity:"bank",brand:"Yorkshire Building Society","brand:wikidata":"Q12073381","brand:wikipedia":"en:Yorkshire Building Society",name:"Yorkshire Building Society"},removeTags:{amenity:"bank",brand:"Yorkshire Building Society","brand:wikidata":"Q12073381","brand:wikipedia":"en:Yorkshire Building Society",name:"Yorkshire Building Society"},matchScore:2,suggestion:true},"amenity/bank/Zagrebačka banka":{name:"Zagrebačka banka",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q140381"},addTags:{amenity:"bank",brand:"Zagrebačka banka","brand:wikidata":"Q140381","brand:wikipedia":"en:Zagrebačka banka",name:"Zagrebačka banka"},removeTags:{amenity:"bank",brand:"Zagrebačka banka","brand:wikidata":"Q140381","brand:wikipedia":"en:Zagrebačka banka",name:"Zagrebačka banka"},matchScore:2,suggestion:true},"amenity/bank/Zenith Bank":{name:"Zenith Bank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q5978240"},addTags:{amenity:"bank",brand:"Zenith Bank","brand:wikidata":"Q5978240","brand:wikipedia":"en:Zenith Bank",name:"Zenith Bank"},removeTags:{amenity:"bank",brand:"Zenith Bank","brand:wikidata":"Q5978240","brand:wikipedia":"en:Zenith Bank",name:"Zenith Bank"},matchScore:2,suggestion:true},"amenity/bank/Ziraat Bankası":{name:"Ziraat Bankası",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q696003"},addTags:{amenity:"bank",brand:"Ziraat Bankası","brand:wikidata":"Q696003","brand:wikipedia":"en:Ziraat Bankası",name:"Ziraat Bankası"},removeTags:{amenity:"bank",brand:"Ziraat Bankası","brand:wikidata":"Q696003","brand:wikipedia":"en:Ziraat Bankası",name:"Ziraat Bankası"},matchScore:2,suggestion:true},"amenity/bank/mBank":{name:"mBank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q1160928"},addTags:{amenity:"bank",brand:"mBank","brand:wikidata":"Q1160928","brand:wikipedia":"en:MBank",name:"mBank"},removeTags:{amenity:"bank",brand:"mBank","brand:wikidata":"Q1160928","brand:wikipedia":"en:MBank",name:"mBank"},matchScore:2,suggestion:true},"amenity/bank/ČSOB":{name:"ČSOB",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q340135"},addTags:{amenity:"bank",brand:"ČSOB","brand:wikidata":"Q340135","brand:wikipedia":"en:Československá obchodní banka",name:"ČSOB"},removeTags:{amenity:"bank",brand:"ČSOB","brand:wikidata":"Q340135","brand:wikipedia":"en:Československá obchodní banka",name:"ČSOB"},matchScore:2,suggestion:true},"amenity/bank/Česká spořitelna":{name:"Česká spořitelna",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q341100"},addTags:{amenity:"bank",brand:"Česká spořitelna","brand:wikidata":"Q341100","brand:wikipedia":"en:Česká spořitelna",name:"Česká spořitelna"},removeTags:{amenity:"bank",brand:"Česká spořitelna","brand:wikidata":"Q341100","brand:wikipedia":"en:Česká spořitelna",name:"Česká spořitelna"},matchScore:2,suggestion:true},"amenity/bank/İş Bankası":{name:"İş Bankası",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q909613"},addTags:{amenity:"bank",brand:"İş Bankası","brand:wikidata":"Q909613","brand:wikipedia":"en:Türkiye İş Bankası",name:"İş Bankası"},removeTags:{amenity:"bank",brand:"İş Bankası","brand:wikidata":"Q909613","brand:wikipedia":"en:Türkiye İş Bankası",name:"İş Bankası"},matchScore:2,suggestion:true},"amenity/bank/Εθνική Τράπεζα":{name:"Εθνική Τράπεζα",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q1816028"},addTags:{amenity:"bank",brand:"Εθνική Τράπεζα","brand:en":"National Bank of Greece","brand:wikidata":"Q1816028","brand:wikipedia":"en:National Bank of Greece",name:"Εθνική Τράπεζα","name:en":"National Bank of Greece"},removeTags:{amenity:"bank",brand:"Εθνική Τράπεζα","brand:en":"National Bank of Greece","brand:wikidata":"Q1816028","brand:wikipedia":"en:National Bank of Greece",name:"Εθνική Τράπεζα","name:en":"National Bank of Greece"},matchScore:2,suggestion:true},"amenity/bank/Τράπεζα Πειραιώς":{name:"Τράπεζα Πειραιώς",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q3312"},addTags:{amenity:"bank",brand:"Τράπεζα Πειραιώς","brand:en":"Piraeus Bank","brand:wikidata":"Q3312","brand:wikipedia":"en:Piraeus Bank",name:"Τράπεζα Πειραιώς","name:en":"Piraeus Bank"},removeTags:{amenity:"bank",brand:"Τράπεζα Πειραιώς","brand:en":"Piraeus Bank","brand:wikidata":"Q3312","brand:wikipedia":"en:Piraeus Bank",name:"Τράπεζα Πειραιώς","name:en":"Piraeus Bank"},matchScore:2,suggestion:true},"amenity/bank/Альфа-Банк":{name:"Альфа-Банк",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q1377835"},addTags:{amenity:"bank",brand:"Альфа-Банк","brand:en":"Alfa-Bank","brand:wikidata":"Q1377835","brand:wikipedia":"en:Alfa-Bank",name:"Альфа-Банк","name:en":"Alfa-Bank"},removeTags:{amenity:"bank",brand:"Альфа-Банк","brand:en":"Alfa-Bank","brand:wikidata":"Q1377835","brand:wikipedia":"en:Alfa-Bank",name:"Альфа-Банк","name:en":"Alfa-Bank"},matchScore:2,suggestion:true},"amenity/bank/Банка ДСК":{name:"Банка ДСК",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q5206146"},addTags:{amenity:"bank",brand:"Банка ДСК","brand:en":"DSK Bank","brand:wikidata":"Q5206146","brand:wikipedia":"en:DSK Bank",name:"Банка ДСК","name:en":"DSK Bank"},removeTags:{amenity:"bank",brand:"Банка ДСК","brand:en":"DSK Bank","brand:wikidata":"Q5206146","brand:wikipedia":"en:DSK Bank",name:"Банка ДСК","name:en":"DSK Bank"},matchScore:2,suggestion:true},"amenity/bank/Белагропромбанк":{name:"Белагропромбанк",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q1991373"},addTags:{amenity:"bank",brand:"Белагропромбанк","brand:en":"Belagroprom Bank","brand:wikidata":"Q1991373","brand:wikipedia":"be:Белаграпрамбанк",name:"Белагропромбанк","name:en":"Belagroprom Bank"},removeTags:{amenity:"bank",brand:"Белагропромбанк","brand:en":"Belagroprom Bank","brand:wikidata":"Q1991373","brand:wikipedia":"be:Белаграпрамбанк",name:"Белагропромбанк","name:en":"Belagroprom Bank"},matchScore:2,suggestion:true},"amenity/bank/Беларусбанк":{name:"Беларусбанк",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q1997334"},addTags:{amenity:"bank",brand:"Беларусбанк","brand:en":"Belarusbank","brand:wikidata":"Q1997334","brand:wikipedia":"en:Belarusbank",name:"Беларусбанк","name:en":"Belarusbank"},removeTags:{amenity:"bank",brand:"Беларусбанк","brand:en":"Belarusbank","brand:wikidata":"Q1997334","brand:wikipedia":"en:Belarusbank",name:"Беларусбанк","name:en":"Belarusbank"},matchScore:2,suggestion:true},"amenity/bank/Белинвестбанк":{name:"Белинвестбанк",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q4081940"},addTags:{amenity:"bank",brand:"Белинвестбанк","brand:wikidata":"Q4081940","brand:wikipedia":"ru:Белинвестбанк",name:"Белинвестбанк"},removeTags:{amenity:"bank",brand:"Белинвестбанк","brand:wikidata":"Q4081940","brand:wikipedia":"ru:Белинвестбанк",name:"Белинвестбанк"},matchScore:2,suggestion:true},"amenity/bank/Бинбанк":{name:"Бинбанк",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q4086829"},addTags:{amenity:"bank",brand:"Бинбанк","brand:en":"B&N Bank","brand:wikidata":"Q4086829","brand:wikipedia":"en:B&N Bank",name:"Бинбанк","name:en":"B&N Bank"},removeTags:{amenity:"bank",brand:"Бинбанк","brand:en":"B&N Bank","brand:wikidata":"Q4086829","brand:wikipedia":"en:B&N Bank",name:"Бинбанк","name:en":"B&N Bank"},matchScore:2,suggestion:true},"amenity/bank/ВТБ":{name:"ВТБ",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q1549389"},addTags:{amenity:"bank",brand:"ВТБ","brand:en":"VTB Bank","brand:wikidata":"Q1549389","brand:wikipedia":"en:VTB Bank",name:"ВТБ","name:en":"VTB Bank"},removeTags:{amenity:"bank",brand:"ВТБ","brand:en":"VTB Bank","brand:wikidata":"Q1549389","brand:wikipedia":"en:VTB Bank",name:"ВТБ","name:en":"VTB Bank"},matchScore:2,suggestion:true},"amenity/bank/Возрождение":{name:"Возрождение",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q4114952"},addTags:{amenity:"bank",brand:"Возрождение","brand:wikidata":"Q4114952","brand:wikipedia":"en:Возрождение (банк)",name:"Возрождение"},removeTags:{amenity:"bank",brand:"Возрождение","brand:wikidata":"Q4114952","brand:wikipedia":"en:Возрождение (банк)",name:"Возрождение"},matchScore:2,suggestion:true},"amenity/bank/Газпромбанк":{name:"Газпромбанк",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q1924338"},addTags:{amenity:"bank",brand:"Газпромбанк","brand:en":"Gazprombank","brand:wikidata":"Q1924338","brand:wikipedia":"en:Gazprombank",name:"Газпромбанк","name:en":"Gazprombank"},removeTags:{amenity:"bank",brand:"Газпромбанк","brand:en":"Gazprombank","brand:wikidata":"Q1924338","brand:wikipedia":"en:Gazprombank",name:"Газпромбанк","name:en":"Gazprombank"},matchScore:2,suggestion:true},"amenity/bank/Казкоммерцбанк":{name:"Казкоммерцбанк",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q1168179"},addTags:{amenity:"bank",brand:"Казкоммерцбанк","brand:en":"Kazkommertsbank","brand:wikidata":"Q1168179","brand:wikipedia":"en:Kazkommertsbank",name:"Казкоммерцбанк","name:en":"Kazkommertsbank"},removeTags:{amenity:"bank",brand:"Казкоммерцбанк","brand:en":"Kazkommertsbank","brand:wikidata":"Q1168179","brand:wikipedia":"en:Kazkommertsbank",name:"Казкоммерцбанк","name:en":"Kazkommertsbank"},matchScore:2,suggestion:true},"amenity/bank/Московский индустриальный банк":{name:"Московский индустриальный банк",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q4304145"},addTags:{amenity:"bank",brand:"Московский индустриальный банк","brand:en":"Moscow Industrial Bank","brand:wikidata":"Q4304145","brand:wikipedia":"ru:Московский индустриальный банк",name:"Московский индустриальный банк","name:en":"Moscow Industrial Bank"},removeTags:{amenity:"bank",brand:"Московский индустриальный банк","brand:en":"Moscow Industrial Bank","brand:wikidata":"Q4304145","brand:wikipedia":"ru:Московский индустриальный банк",name:"Московский индустриальный банк","name:en":"Moscow Industrial Bank"},matchScore:2,suggestion:true},"amenity/bank/Мособлбанк":{name:"Мособлбанк",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q4304446"},addTags:{amenity:"bank",brand:"Мособлбанк","brand:en":"Mosobl Bank","brand:wikidata":"Q4304446","brand:wikipedia":"ru:Мособлбанк",name:"Мособлбанк","name:en":"Mosobl Bank"},removeTags:{amenity:"bank",brand:"Мособлбанк","brand:en":"Mosobl Bank","brand:wikidata":"Q4304446","brand:wikipedia":"ru:Мособлбанк",name:"Мособлбанк","name:en":"Mosobl Bank"},matchScore:2,suggestion:true},"amenity/bank/ОТП Банк":{name:"ОТП Банк",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q912778"},addTags:{amenity:"bank",brand:"ОТП Банк","brand:en":"OTP Bank","brand:wikidata":"Q912778","brand:wikipedia":"en:OTP Bank",name:"ОТП Банк","name:en":"OTP Bank"},removeTags:{amenity:"bank",brand:"ОТП Банк","brand:en":"OTP Bank","brand:wikidata":"Q912778","brand:wikipedia":"en:OTP Bank",name:"ОТП Банк","name:en":"OTP Bank"},matchScore:2,suggestion:true},"amenity/bank/Обединена Българска Банка":{name:"Обединена Българска Банка",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q7887555"},addTags:{amenity:"bank",brand:"Обединена Българска Банка","brand:en":"United Bulgarian Bank","brand:wikidata":"Q7887555","brand:wikipedia":"en:United Bulgarian Bank",name:"Обединена Българска Банка","name:en":"United Bulgarian Bank"},removeTags:{amenity:"bank",brand:"Обединена Българска Банка","brand:en":"United Bulgarian Bank","brand:wikidata":"Q7887555","brand:wikipedia":"en:United Bulgarian Bank",name:"Обединена Българска Банка","name:en":"United Bulgarian Bank"},matchScore:2,suggestion:true},"amenity/bank/Ощадбанк":{name:"Ощадбанк",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q4340839"},addTags:{amenity:"bank",brand:"Ощадбанк","brand:en":"State Savings Bank of Ukraine","brand:wikidata":"Q4340839","brand:wikipedia":"uk:Ощадбанк",name:"Ощадбанк","name:en":"State Savings Bank of Ukraine"},removeTags:{amenity:"bank",brand:"Ощадбанк","brand:en":"State Savings Bank of Ukraine","brand:wikidata":"Q4340839","brand:wikipedia":"uk:Ощадбанк",name:"Ощадбанк","name:en":"State Savings Bank of Ukraine"},matchScore:2,suggestion:true},"amenity/bank/ПУМБ":{name:"ПУМБ",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q4341156"},addTags:{amenity:"bank",brand:"ПУМБ","brand:en":"First Ukrainian International Bank","brand:wikidata":"Q4341156","brand:wikipedia":"en:First Ukrainian International Bank",name:"ПУМБ","name:en":"First Ukrainian International Bank"},removeTags:{amenity:"bank",brand:"ПУМБ","brand:en":"First Ukrainian International Bank","brand:wikidata":"Q4341156","brand:wikipedia":"en:First Ukrainian International Bank",name:"ПУМБ","name:en":"First Ukrainian International Bank"},matchScore:2,suggestion:true},"amenity/bank/Почта Банк":{name:"Почта Банк",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q24930461"},addTags:{amenity:"bank",brand:"Почта Банк","brand:en":"Post Bank","brand:wikidata":"Q24930461","brand:wikipedia":"en:Post Bank (Russia)",name:"Почта Банк","name:en":"Post Bank"},removeTags:{amenity:"bank",brand:"Почта Банк","brand:en":"Post Bank","brand:wikidata":"Q24930461","brand:wikipedia":"en:Post Bank (Russia)",name:"Почта Банк","name:en":"Post Bank"},matchScore:2,suggestion:true},"amenity/bank/ПриватБанк":{name:"ПриватБанк",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q1515015"},addTags:{amenity:"bank",brand:"ПриватБанк","brand:en":"PrivatBank","brand:wikidata":"Q1515015","brand:wikipedia":"uk:ПриватБанк",name:"ПриватБанк","name:en":"PrivatBank"},removeTags:{amenity:"bank",brand:"ПриватБанк","brand:en":"PrivatBank","brand:wikidata":"Q1515015","brand:wikipedia":"uk:ПриватБанк",name:"ПриватБанк","name:en":"PrivatBank"},matchScore:2,suggestion:true},"amenity/bank/Приорбанк":{name:"Приорбанк",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q3919658"},addTags:{amenity:"bank",brand:"Приорбанк","brand:en":"PriorBank","brand:wikidata":"Q3919658","brand:wikipedia":"be:Пріорбанк",name:"Приорбанк","name:en":"PriorBank"},removeTags:{amenity:"bank",brand:"Приорбанк","brand:en":"PriorBank","brand:wikidata":"Q3919658","brand:wikipedia":"be:Пріорбанк",name:"Приорбанк","name:en":"PriorBank"},matchScore:2,suggestion:true},"amenity/bank/Промсвязьбанк":{name:"Промсвязьбанк",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q649100"},addTags:{amenity:"bank",brand:"Промсвязьбанк","brand:en":"Promsvyazbank","brand:wikidata":"Q649100","brand:wikipedia":"en:Promsvyazbank",name:"Промсвязьбанк","name:en":"Promsvyazbank"},removeTags:{amenity:"bank",brand:"Промсвязьбанк","brand:en":"Promsvyazbank","brand:wikidata":"Q649100","brand:wikipedia":"en:Promsvyazbank",name:"Промсвязьбанк","name:en":"Promsvyazbank"},matchScore:2,suggestion:true},"amenity/bank/РНКБ":{name:"РНКБ",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q16912944"},addTags:{amenity:"bank",brand:"РНКБ","brand:wikidata":"Q16912944","brand:wikipedia":"en:Russian National Commercial Bank",name:"РНКБ"},removeTags:{amenity:"bank",brand:"РНКБ","brand:wikidata":"Q16912944","brand:wikipedia":"en:Russian National Commercial Bank",name:"РНКБ"},matchScore:2,suggestion:true},"amenity/bank/Райффайзен":{name:"Райффайзен",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q4389244"},addTags:{amenity:"bank",brand:"Райффайзен","brand:en":"Raiffeisenbank","brand:wikidata":"Q4389244","brand:wikipedia":"en:Raiffeisenbank (Russia)",name:"Райффайзен","name:en":"Raiffeisenbank"},removeTags:{amenity:"bank",brand:"Райффайзен","brand:en":"Raiffeisenbank","brand:wikidata":"Q4389244","brand:wikipedia":"en:Raiffeisenbank (Russia)",name:"Райффайзен","name:en":"Raiffeisenbank"},matchScore:2,suggestion:true},"amenity/bank/Райффайзен Банк Аваль":{name:"Райффайзен Банк Аваль",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q4389243"},addTags:{amenity:"bank",brand:"Райффайзен Банк Аваль","brand:en":"Raiffeisen Bank Aval","brand:wikidata":"Q4389243","brand:wikipedia":"en:Raiffeisen Bank Aval",name:"Райффайзен Банк Аваль","name:en":"Raiffeisen Bank Aval"},removeTags:{amenity:"bank",brand:"Райффайзен Банк Аваль","brand:en":"Raiffeisen Bank Aval","brand:wikidata":"Q4389243","brand:wikipedia":"en:Raiffeisen Bank Aval",name:"Райффайзен Банк Аваль","name:en":"Raiffeisen Bank Aval"},matchScore:2,suggestion:true},"amenity/bank/Росбанк":{name:"Росбанк",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q1119857"},addTags:{amenity:"bank",brand:"Росбанк","brand:en":"Rosbank","brand:wikidata":"Q1119857","brand:wikipedia":"en:Rosbank",name:"Росбанк","name:en":"Rosbank"},removeTags:{amenity:"bank",brand:"Росбанк","brand:en":"Rosbank","brand:wikidata":"Q1119857","brand:wikipedia":"en:Rosbank",name:"Росбанк","name:en":"Rosbank"},matchScore:2,suggestion:true},"amenity/bank/Россельхозбанк":{name:"Россельхозбанк",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q3920226"},addTags:{amenity:"bank",brand:"Россельхозбанк","brand:en":"Rosselkhozbank","brand:wikidata":"Q3920226","brand:wikipedia":"en:Rosselkhozbank",name:"Россельхозбанк","name:en":"Rosselkhozbank"},removeTags:{amenity:"bank",brand:"Россельхозбанк","brand:en":"Rosselkhozbank","brand:wikidata":"Q3920226","brand:wikipedia":"en:Rosselkhozbank",name:"Россельхозбанк","name:en":"Rosselkhozbank"},matchScore:2,suggestion:true},"amenity/bank/Русский Стандарт":{name:"Русский Стандарт",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q4400854"},addTags:{amenity:"bank",brand:"Русский Стандарт","brand:en":"Russian Standard Bank","brand:wikidata":"Q4400854","brand:wikipedia":"en:Russian Standard Bank",name:"Русский Стандарт","name:en":"Russian Standard Bank"},removeTags:{amenity:"bank",brand:"Русский Стандарт","brand:en":"Russian Standard Bank","brand:wikidata":"Q4400854","brand:wikipedia":"en:Russian Standard Bank",name:"Русский Стандарт","name:en":"Russian Standard Bank"},matchScore:2,suggestion:true},"amenity/bank/Сбербанк":{name:"Сбербанк",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q4378147"},addTags:{amenity:"bank",brand:"Сбербанк","brand:en":"Prisbank","brand:wikidata":"Q4378147","brand:wikipedia":"ru:Приднестровский Сбербанк",name:"Сбербанк","name:en":"Prisbank"},removeTags:{amenity:"bank",brand:"Сбербанк","brand:en":"Prisbank","brand:wikidata":"Q4378147","brand:wikipedia":"ru:Приднестровский Сбербанк",name:"Сбербанк","name:en":"Prisbank"},matchScore:2,suggestion:true},"amenity/bank/Совкомбанк":{name:"Совкомбанк",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q4426566"},addTags:{amenity:"bank",brand:"Совкомбанк","brand:en":"Sovcom Bank","brand:wikidata":"Q4426566","brand:wikipedia":"ru:Совкомбанк",name:"Совкомбанк","name:en":"Sovcom Bank"},removeTags:{amenity:"bank",brand:"Совкомбанк","brand:en":"Sovcom Bank","brand:wikidata":"Q4426566","brand:wikipedia":"ru:Совкомбанк",name:"Совкомбанк","name:en":"Sovcom Bank"},matchScore:2,suggestion:true},"amenity/bank/УкрСиббанк":{name:"УкрСиббанк",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q1976290"},addTags:{amenity:"bank",brand:"УкрСиббанк","brand:en":"UkrSibbank","brand:wikidata":"Q1976290","brand:wikipedia":"en:UkrSibbank",name:"УкрСиббанк","name:en":"UkrSibbank"},removeTags:{amenity:"bank",brand:"УкрСиббанк","brand:en":"UkrSibbank","brand:wikidata":"Q1976290","brand:wikipedia":"en:UkrSibbank",name:"УкрСиббанк","name:en":"UkrSibbank"},matchScore:2,suggestion:true},"amenity/bank/Укргазбанк":{name:"Укргазбанк",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q4470692"},addTags:{amenity:"bank",brand:"Укргазбанк","brand:en":"Ukrgasbank","brand:wikidata":"Q4470692","brand:wikipedia":"ru:Укргазбанк",name:"Укргазбанк","name:en":"Ukrgasbank"},removeTags:{amenity:"bank",brand:"Укргазбанк","brand:en":"Ukrgasbank","brand:wikidata":"Q4470692","brand:wikipedia":"ru:Укргазбанк",name:"Укргазбанк","name:en":"Ukrgasbank"},matchScore:2,suggestion:true},"amenity/bank/Укрсоцбанк":{name:"Укрсоцбанк",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q3547885"},addTags:{amenity:"bank",brand:"Укрсоцбанк","brand:en":"Ukrsotsbank","brand:wikidata":"Q3547885","brand:wikipedia":"en:Ukrsotsbank",name:"Укрсоцбанк","name:en":"Ukrsotsbank"},removeTags:{amenity:"bank",brand:"Укрсоцбанк","brand:en":"Ukrsotsbank","brand:wikidata":"Q3547885","brand:wikipedia":"en:Ukrsotsbank",name:"Укрсоцбанк","name:en":"Ukrsotsbank"},matchScore:2,suggestion:true},"amenity/bank/Уралсиб":{name:"Уралсиб",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q4476693"},addTags:{amenity:"bank",brand:"Уралсиб","brand:en":"Uralsib bank","brand:wikidata":"Q4476693","brand:wikipedia":"ru:Уралсиб (банк)",name:"Уралсиб","name:en":"Uralsib bank"},removeTags:{amenity:"bank",brand:"Уралсиб","brand:en":"Uralsib bank","brand:wikidata":"Q4476693","brand:wikipedia":"ru:Уралсиб (банк)",name:"Уралсиб","name:en":"Uralsib bank"},matchScore:2,suggestion:true},"amenity/bank/Хаан банк":{name:"Хаан банк",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q25632240"},addTags:{amenity:"bank",brand:"Хаан банк","brand:wikidata":"Q25632240","brand:wikipedia":"mn:ХААН банк",name:"Хаан банк"},removeTags:{amenity:"bank",brand:"Хаан банк","brand:wikidata":"Q25632240","brand:wikipedia":"mn:ХААН банк",name:"Хаан банк"},matchScore:2,suggestion:true},"amenity/bank/Хоум Кредит":{name:"Хоум Кредит",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q4500466"},addTags:{amenity:"bank",brand:"Хоум Кредит","brand:en":"Home Credit & Finance Bank","brand:wikidata":"Q4500466","brand:wikipedia":"en:Home Credit & Finance Bank",name:"Хоум Кредит","name:en":"Home Credit & Finance Bank"},removeTags:{amenity:"bank",brand:"Хоум Кредит","brand:en":"Home Credit & Finance Bank","brand:wikidata":"Q4500466","brand:wikipedia":"en:Home Credit & Finance Bank",name:"Хоум Кредит","name:en":"Home Credit & Finance Bank"},matchScore:2,suggestion:true},"amenity/bank/בנק הפועלים":{name:"בנק הפועלים",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q2666775"},addTags:{amenity:"bank",brand:"בנק הפועלים","brand:en":"Bank Hapoalim","brand:wikidata":"Q2666775","brand:wikipedia":"en:Bank Hapoalim",name:"בנק הפועלים","name:en":"Bank Hapoalim"},removeTags:{amenity:"bank",brand:"בנק הפועלים","brand:en":"Bank Hapoalim","brand:wikidata":"Q2666775","brand:wikipedia":"en:Bank Hapoalim",name:"בנק הפועלים","name:en":"Bank Hapoalim"},matchScore:2,suggestion:true},"amenity/bank/בנק לאומי":{name:"בנק לאומי",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q806641"},addTags:{amenity:"bank",brand:"בנק לאומי","brand:en":"Bank Leumi","brand:wikidata":"Q806641","brand:wikipedia":"en:Bank Leumi",name:"בנק לאומי","name:en":"Bank Leumi"},removeTags:{amenity:"bank",brand:"בנק לאומי","brand:en":"Bank Leumi","brand:wikidata":"Q806641","brand:wikipedia":"en:Bank Leumi",name:"בנק לאומי","name:en":"Bank Leumi"},matchScore:2,suggestion:true},"amenity/bank/بانک آینده":{name:"بانک آینده",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q5938144"},addTags:{amenity:"bank",brand:"بانک آینده","brand:en":"Ayandeh Bank","brand:wikidata":"Q5938144","brand:wikipedia":"en:Ayandeh Bank",name:"بانک آینده","name:en":"Ayandeh Bank"},removeTags:{amenity:"bank",brand:"بانک آینده","brand:en":"Ayandeh Bank","brand:wikidata":"Q5938144","brand:wikipedia":"en:Ayandeh Bank",name:"بانک آینده","name:en":"Ayandeh Bank"},matchScore:2,suggestion:true},"amenity/bank/بانک اقتصاد نوین":{name:"بانک اقتصاد نوین",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q5323768"},addTags:{amenity:"bank",brand:"بانک اقتصاد نوین","brand:en":"EN Bank","brand:wikidata":"Q5323768","brand:wikipedia":"en:EN Bank",name:"بانک اقتصاد نوین","name:en":"EN Bank"},removeTags:{amenity:"bank",brand:"بانک اقتصاد نوین","brand:en":"EN Bank","brand:wikidata":"Q5323768","brand:wikipedia":"en:EN Bank",name:"بانک اقتصاد نوین","name:en":"EN Bank"},matchScore:2,suggestion:true},"amenity/bank/بانک رفاه":{name:"بانک رفاه",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q7307083"},addTags:{amenity:"bank",brand:"بانک رفاه","brand:en":"Refah Bank","brand:wikidata":"Q7307083","brand:wikipedia":"en:Refah Bank",name:"بانک رفاه","name:en":"Refah Bank"},removeTags:{amenity:"bank",brand:"بانک رفاه","brand:en":"Refah Bank","brand:wikidata":"Q7307083","brand:wikipedia":"en:Refah Bank",name:"بانک رفاه","name:en":"Refah Bank"},matchScore:2,suggestion:true},"amenity/bank/بانک سامان":{name:"بانک سامان",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q4117676"},addTags:{amenity:"bank",brand:"بانک سامان","brand:en":"Saman Bank","brand:wikidata":"Q4117676","brand:wikipedia":"en:Saman Bank",name:"بانک سامان","name:en":"Saman Bank"},removeTags:{amenity:"bank",brand:"بانک سامان","brand:en":"Saman Bank","brand:wikidata":"Q4117676","brand:wikipedia":"en:Saman Bank",name:"بانک سامان","name:en":"Saman Bank"},matchScore:2,suggestion:true},"amenity/bank/بانک سرمایه":{name:"بانک سرمایه",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q7424291"},addTags:{amenity:"bank",brand:"بانک سرمایه","brand:en":"Sarmayeh Bank","brand:wikidata":"Q7424291","brand:wikipedia":"en:Sarmayeh Bank",name:"بانک سرمایه","name:en":"Sarmayeh Bank"},removeTags:{amenity:"bank",brand:"بانک سرمایه","brand:en":"Sarmayeh Bank","brand:wikidata":"Q7424291","brand:wikipedia":"en:Sarmayeh Bank",name:"بانک سرمایه","name:en":"Sarmayeh Bank"},matchScore:2,suggestion:true},"amenity/bank/بانک سپه":{name:"بانک سپه",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q2882624"},addTags:{amenity:"bank",brand:"بانک سپه","brand:en":"Bank Sepah","brand:wikidata":"Q2882624","brand:wikipedia":"en:Bank Sepah",name:"بانک سپه","name:en":"Bank Sepah"},removeTags:{amenity:"bank",brand:"بانک سپه","brand:en":"Bank Sepah","brand:wikidata":"Q2882624","brand:wikipedia":"en:Bank Sepah",name:"بانک سپه","name:en":"Bank Sepah"},matchScore:2,suggestion:true},"amenity/bank/بانک سینا":{name:"بانک سینا",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q10860246"},addTags:{amenity:"bank",brand:"بانک سینا","brand:en":"Sina Bank","brand:wikidata":"Q10860246","brand:wikipedia":"en:Sina Bank",name:"بانک سینا","name:en":"Sina Bank"},removeTags:{amenity:"bank",brand:"بانک سینا","brand:en":"Sina Bank","brand:wikidata":"Q10860246","brand:wikipedia":"en:Sina Bank",name:"بانک سینا","name:en":"Sina Bank"},matchScore:2,suggestion:true},"amenity/bank/بانک شهر":{name:"بانک شهر",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q5941033"},addTags:{amenity:"bank",brand:"بانک شهر","brand:en":"Shahr Bank","brand:wikidata":"Q5941033","brand:wikipedia":"fa:بانک شهر",name:"بانک شهر","name:en":"Shahr Bank"},removeTags:{amenity:"bank",brand:"بانک شهر","brand:en":"Shahr Bank","brand:wikidata":"Q5941033","brand:wikipedia":"fa:بانک شهر",name:"بانک شهر","name:en":"Shahr Bank"},matchScore:2,suggestion:true},"amenity/bank/بانک صادرات":{name:"بانک صادرات",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q2882608"},addTags:{amenity:"bank",brand:"بانک صادرات","brand:en":"Bank Saderat Iran","brand:wikidata":"Q2882608","brand:wikipedia":"en:Bank Saderat Iran",name:"بانک صادرات","name:en":"Bank Saderat Iran"},removeTags:{amenity:"bank",brand:"بانک صادرات","brand:en":"Bank Saderat Iran","brand:wikidata":"Q2882608","brand:wikipedia":"en:Bank Saderat Iran",name:"بانک صادرات","name:en":"Bank Saderat Iran"},matchScore:2,suggestion:true},"amenity/bank/بانک قوامین":{name:"بانک قوامین",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q10860253"},addTags:{amenity:"bank",brand:"بانک قوامین","brand:en":"Ghavamin Bank","brand:wikidata":"Q10860253","brand:wikipedia":"en:Ghavamin Bank",name:"بانک قوامین","name:en":"Ghavamin Bank"},removeTags:{amenity:"bank",brand:"بانک قوامین","brand:en":"Ghavamin Bank","brand:wikidata":"Q10860253","brand:wikipedia":"en:Ghavamin Bank",name:"بانک قوامین","name:en":"Ghavamin Bank"},matchScore:2,suggestion:true},"amenity/bank/بانک مسکن":{name:"بانک مسکن",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q4855942"},addTags:{amenity:"bank",brand:"بانک مسکن","brand:en":"Bank Maskan","brand:wikidata":"Q4855942","brand:wikipedia":"en:Bank Maskan",name:"بانک مسکن","name:en":"Bank Maskan"},removeTags:{amenity:"bank",brand:"بانک مسکن","brand:en":"Bank Maskan","brand:wikidata":"Q4855942","brand:wikipedia":"en:Bank Maskan",name:"بانک مسکن","name:en":"Bank Maskan"},matchScore:2,suggestion:true},"amenity/bank/بانک ملت":{name:"بانک ملت",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q4855944"},addTags:{amenity:"bank",brand:"بانک ملت","brand:en":"Bank Mellat","brand:wikidata":"Q4855944","brand:wikipedia":"en:Bank Mellat",name:"بانک ملت","name:en":"Bank Mellat"},removeTags:{amenity:"bank",brand:"بانک ملت","brand:en":"Bank Mellat","brand:wikidata":"Q4855944","brand:wikipedia":"en:Bank Mellat",name:"بانک ملت","name:en":"Bank Mellat"},matchScore:2,suggestion:true},"amenity/bank/بانک ملی ایران":{name:"بانک ملی ایران",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q806640"},addTags:{amenity:"bank",brand:"بانک ملی ایران","brand:en":"Bank Melli Iran","brand:wikidata":"Q806640","brand:wikipedia":"en:Bank Melli Iran",name:"بانک ملی ایران","name:en":"Bank Melli Iran"},removeTags:{amenity:"bank",brand:"بانک ملی ایران","brand:en":"Bank Melli Iran","brand:wikidata":"Q806640","brand:wikipedia":"en:Bank Melli Iran",name:"بانک ملی ایران","name:en":"Bank Melli Iran"},matchScore:2,suggestion:true},"amenity/bank/بانک پارسیان":{name:"بانک پارسیان",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q2410404"},addTags:{amenity:"bank",brand:"بانک پارسیان","brand:en":"Parsian Bank","brand:wikidata":"Q2410404","brand:wikipedia":"en:Parsian Bank",name:"بانک پارسیان","name:en":"Parsian Bank"},removeTags:{amenity:"bank",brand:"بانک پارسیان","brand:en":"Parsian Bank","brand:wikidata":"Q2410404","brand:wikipedia":"en:Parsian Bank",name:"بانک پارسیان","name:en":"Parsian Bank"},matchScore:2,suggestion:true},"amenity/bank/بانک پاسارگاد":{name:"بانک پاسارگاد",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q4855962"},addTags:{amenity:"bank",brand:"بانک پاسارگاد","brand:en":"Bank Pasargad","brand:wikidata":"Q4855962","brand:wikipedia":"en:Bank Pasargad",name:"بانک پاسارگاد","name:en":"Bank Pasargad"},removeTags:{amenity:"bank",brand:"بانک پاسارگاد","brand:en":"Bank Pasargad","brand:wikidata":"Q4855962","brand:wikipedia":"en:Bank Pasargad",name:"بانک پاسارگاد","name:en":"Bank Pasargad"},matchScore:2,suggestion:true},"amenity/bank/بانک کشاورزی":{name:"بانک کشاورزی",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q6395007"},addTags:{amenity:"bank",brand:"بانک کشاورزی","brand:en":"Bank Keshavarzi Iran","brand:wikidata":"Q6395007","brand:wikipedia":"en:Bank Keshavarzi Iran",name:"بانک کشاورزی","name:en":"Bank Keshavarzi Iran"},removeTags:{amenity:"bank",brand:"بانک کشاورزی","brand:en":"Bank Keshavarzi Iran","brand:wikidata":"Q6395007","brand:wikipedia":"en:Bank Keshavarzi Iran",name:"بانک کشاورزی","name:en":"Bank Keshavarzi Iran"},matchScore:2,suggestion:true},"amenity/bank/پست بانک":{name:"پست بانک",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q7233625"},addTags:{amenity:"bank",brand:"پست بانک","brand:en":"Post Bank of Iran","brand:wikidata":"Q7233625","brand:wikipedia":"en:Post Bank of Iran",name:"پست بانک","name:en":"Post Bank of Iran"},removeTags:{amenity:"bank",brand:"پست بانک","brand:en":"Post Bank of Iran","brand:wikidata":"Q7233625","brand:wikipedia":"en:Post Bank of Iran",name:"پست بانک","name:en":"Post Bank of Iran"},matchScore:2,suggestion:true},"amenity/bank/ธนาคารกรุงเทพ":{name:"ธนาคารกรุงเทพ",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q806483"},addTags:{amenity:"bank",brand:"ธนาคารกรุงเทพ","brand:en":"Bangkok Bank","brand:wikidata":"Q806483","brand:wikipedia":"en:Bangkok Bank",name:"ธนาคารกรุงเทพ","name:en":"Bangkok Bank"},removeTags:{amenity:"bank",brand:"ธนาคารกรุงเทพ","brand:en":"Bangkok Bank","brand:wikidata":"Q806483","brand:wikipedia":"en:Bangkok Bank",name:"ธนาคารกรุงเทพ","name:en":"Bangkok Bank"},matchScore:2,suggestion:true},"amenity/bank/ธนาคารกรุงไทย":{name:"ธนาคารกรุงไทย",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q962865"},addTags:{amenity:"bank",brand:"ธนาคารกรุงไทย","brand:en":"Krung Thai Bank","brand:wikidata":"Q962865","brand:wikipedia":"en:Krung Thai Bank",name:"ธนาคารกรุงไทย","name:en":"Krung Thai Bank"},removeTags:{amenity:"bank",brand:"ธนาคารกรุงไทย","brand:en":"Krung Thai Bank","brand:wikidata":"Q962865","brand:wikipedia":"en:Krung Thai Bank",name:"ธนาคารกรุงไทย","name:en":"Krung Thai Bank"},matchScore:2,suggestion:true},"amenity/bank/ธนาคารกสิกรไทย":{name:"ธนาคารกสิกรไทย",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q276557"},addTags:{amenity:"bank",brand:"ธนาคารกสิกรไทย","brand:en":"en:Kasikornbank","brand:wikidata":"Q276557","brand:wikipedia":"en:Kasikornbank",name:"ธนาคารกสิกรไทย","name:en":"en:Kasikornbank"},removeTags:{amenity:"bank",brand:"ธนาคารกสิกรไทย","brand:en":"en:Kasikornbank","brand:wikidata":"Q276557","brand:wikipedia":"en:Kasikornbank",name:"ธนาคารกสิกรไทย","name:en":"en:Kasikornbank"},matchScore:2,suggestion:true},"amenity/bank/ธนาคารออมสิน":{name:"ธนาคารออมสิน",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q6579041"},addTags:{amenity:"bank",brand:"ธนาคารออมสิน","brand:en":"Government Savings Bank","brand:wikidata":"Q6579041","brand:wikipedia":"en:Government Savings Bank (Thailand)",name:"ธนาคารออมสิน","name:en":"Government Savings Bank"},removeTags:{amenity:"bank",brand:"ธนาคารออมสิน","brand:en":"Government Savings Bank","brand:wikidata":"Q6579041","brand:wikipedia":"en:Government Savings Bank (Thailand)",name:"ธนาคารออมสิน","name:en":"Government Savings Bank"},matchScore:2,suggestion:true},"amenity/bank/ธนาคารไทยพาณิชย์":{name:"ธนาคารไทยพาณิชย์",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q2038986"},addTags:{amenity:"bank",brand:"ธนาคารไทยพาณิชย์","brand:en":"Siam Commercial Bank","brand:wikidata":"Q2038986","brand:wikipedia":"en:Siam Commercial Bank",name:"ธนาคารไทยพาณิชย์","name:en":"Siam Commercial Bank"},removeTags:{amenity:"bank",brand:"ธนาคารไทยพาณิชย์","brand:en":"Siam Commercial Bank","brand:wikidata":"Q2038986","brand:wikipedia":"en:Siam Commercial Bank",name:"ธนาคารไทยพาณิชย์","name:en":"Siam Commercial Bank"},matchScore:2,suggestion:true},"amenity/bank/みずほ銀行":{name:"みずほ銀行",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q2882956"},addTags:{amenity:"bank",brand:"みずほ銀行","brand:en":"Mizuho Bank","brand:wikidata":"Q2882956","brand:wikipedia":"en:Mizuho Bank",name:"みずほ銀行","name:en":"Mizuho Bank"},removeTags:{amenity:"bank",brand:"みずほ銀行","brand:en":"Mizuho Bank","brand:wikidata":"Q2882956","brand:wikipedia":"en:Mizuho Bank",name:"みずほ銀行","name:en":"Mizuho Bank"},matchScore:2,suggestion:true},"amenity/bank/りそな銀行":{name:"りそな銀行",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q11281447"},addTags:{amenity:"bank",brand:"りそな銀行","brand:wikidata":"Q11281447","brand:wikipedia":"ja:りそな銀行",name:"りそな銀行"},removeTags:{amenity:"bank",brand:"りそな銀行","brand:wikidata":"Q11281447","brand:wikipedia":"ja:りそな銀行",name:"りそな銀行"},matchScore:2,suggestion:true},"amenity/bank/三井住友銀行":{name:"三井住友銀行",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q2660418"},addTags:{amenity:"bank",brand:"三井住友銀行","brand:en":"Sumitomo Mitsui Banking Corporation","brand:wikidata":"Q2660418","brand:wikipedia":"en:Sumitomo Mitsui Banking Corporation",name:"三井住友銀行","name:en":"Sumitomo Mitsui Banking Corporation"},removeTags:{amenity:"bank",brand:"三井住友銀行","brand:en":"Sumitomo Mitsui Banking Corporation","brand:wikidata":"Q2660418","brand:wikipedia":"en:Sumitomo Mitsui Banking Corporation",name:"三井住友銀行","name:en":"Sumitomo Mitsui Banking Corporation"},matchScore:2,suggestion:true},"amenity/bank/三菱東京UFJ銀行":{name:"三菱東京UFJ銀行",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q988284"},addTags:{amenity:"bank",brand:"三菱東京UFJ銀行","brand:en":"MUFG Bank","brand:wikidata":"Q988284","brand:wikipedia":"en:MUFG Bank",name:"三菱東京UFJ銀行","name:en":"MUFG Bank"},removeTags:{amenity:"bank",brand:"三菱東京UFJ銀行","brand:en":"MUFG Bank","brand:wikidata":"Q988284","brand:wikipedia":"en:MUFG Bank",name:"三菱東京UFJ銀行","name:en":"MUFG Bank"},matchScore:2,suggestion:true},"amenity/bank/上海商業儲蓄銀行":{name:"上海商業儲蓄銀行",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q4207208"},addTags:{amenity:"bank",brand:"上海商業儲蓄銀行","brand:en":"Shanghai Commercial and Savings Bank","brand:wikidata":"Q4207208","brand:wikipedia":"en:Shanghai Commercial and Savings Bank",name:"上海商業儲蓄銀行","name:en":"Shanghai Commercial and Savings Bank"},removeTags:{amenity:"bank",brand:"上海商業儲蓄銀行","brand:en":"Shanghai Commercial and Savings Bank","brand:wikidata":"Q4207208","brand:wikipedia":"en:Shanghai Commercial and Savings Bank",name:"上海商業儲蓄銀行","name:en":"Shanghai Commercial and Savings Bank"},matchScore:2,suggestion:true},"amenity/bank/中国农业银行":{name:"中国农业银行",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q26298"},addTags:{amenity:"bank",brand:"中国农业银行","brand:en":"Agricultural Bank of China","brand:wikidata":"Q26298","brand:wikipedia":"en:Agricultural Bank of China",name:"中国农业银行","name:en":"Agricultural Bank of China"},removeTags:{amenity:"bank",brand:"中国农业银行","brand:en":"Agricultural Bank of China","brand:wikidata":"Q26298","brand:wikipedia":"en:Agricultural Bank of China",name:"中国农业银行","name:en":"Agricultural Bank of China"},matchScore:2,suggestion:true},"amenity/bank/中国工商银行":{name:"中国工商银行",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q26463"},addTags:{amenity:"bank",brand:"中国工商银行","brand:en":"Industrial and Commercial Bank of China","brand:wikidata":"Q26463","brand:wikipedia":"en:Industrial and Commercial Bank of China",name:"中国工商银行","name:en":"Industrial and Commercial Bank of China"},removeTags:{amenity:"bank",brand:"中国工商银行","brand:en":"Industrial and Commercial Bank of China","brand:wikidata":"Q26463","brand:wikipedia":"en:Industrial and Commercial Bank of China",name:"中国工商银行","name:en":"Industrial and Commercial Bank of China"},matchScore:2,suggestion:true},"amenity/bank/中国建设银行":{name:"中国建设银行",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q26299"},addTags:{amenity:"bank",brand:"中国建设银行","brand:en":"China Construction Bank","brand:wikidata":"Q26299","brand:wikipedia":"en:China Construction Bank",name:"中国建设银行","name:en":"China Construction Bank"},removeTags:{amenity:"bank",brand:"中国建设银行","brand:en":"China Construction Bank","brand:wikidata":"Q26299","brand:wikipedia":"en:China Construction Bank",name:"中国建设银行","name:en":"China Construction Bank"},matchScore:2,suggestion:true},"amenity/bank/中国邮政储蓄银行":{name:"中国邮政储蓄银行",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q986744"},addTags:{amenity:"bank",brand:"中国邮政储蓄银行","brand:en":"Postal Savings Bank of China","brand:wikidata":"Q986744","brand:wikipedia":"en:Postal Savings Bank of China",name:"中国邮政储蓄银行","name:en":"Postal Savings Bank of China"},removeTags:{amenity:"bank",brand:"中国邮政储蓄银行","brand:en":"Postal Savings Bank of China","brand:wikidata":"Q986744","brand:wikipedia":"en:Postal Savings Bank of China",name:"中国邮政储蓄银行","name:en":"Postal Savings Bank of China"},matchScore:2,suggestion:true},"amenity/bank/中国银行":{name:"中国银行",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q790068"},addTags:{amenity:"bank",brand:"中国银行","brand:en":"Bank of China","brand:wikidata":"Q790068","brand:wikipedia":"en:Bank of China",name:"中国银行","name:en":"Bank of China"},removeTags:{amenity:"bank",brand:"中国银行","brand:en":"Bank of China","brand:wikidata":"Q790068","brand:wikipedia":"en:Bank of China",name:"中国银行","name:en":"Bank of China"},matchScore:2,suggestion:true},"amenity/bank/中國信託商業銀行":{name:"中國信託商業銀行",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q5100191"},addTags:{amenity:"bank",brand:"中國信託商業銀行","brand:en":"CTBC Bank","brand:wikidata":"Q5100191","brand:wikipedia":"en:CTBC Bank",name:"中國信託商業銀行","name:en":"CTBC Bank"},removeTags:{amenity:"bank",brand:"中國信託商業銀行","brand:en":"CTBC Bank","brand:wikidata":"Q5100191","brand:wikipedia":"en:CTBC Bank",name:"中國信託商業銀行","name:en":"CTBC Bank"},matchScore:2,suggestion:true},"amenity/bank/交通银行":{name:"交通银行",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q806680"},addTags:{amenity:"bank",brand:"交通银行","brand:en":"Bank of Communications","brand:wikidata":"Q806680","brand:wikipedia":"en:Bank of Communications",name:"交通银行","name:en":"Bank of Communications"},removeTags:{amenity:"bank",brand:"交通银行","brand:en":"Bank of Communications","brand:wikidata":"Q806680","brand:wikipedia":"en:Bank of Communications",name:"交通银行","name:en":"Bank of Communications"},matchScore:2,suggestion:true},"amenity/bank/京城商業銀行":{name:"京城商業銀行",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q10883132"},addTags:{amenity:"bank",brand:"京城商業銀行","brand:wikidata":"Q10883132","brand:wikipedia":"zh:京城商業銀行",name:"京城商業銀行"},removeTags:{amenity:"bank",brand:"京城商業銀行","brand:wikidata":"Q10883132","brand:wikipedia":"zh:京城商業銀行",name:"京城商業銀行"},matchScore:2,suggestion:true},"amenity/bank/京都中央信用金庫":{name:"京都中央信用金庫",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q11374844"},addTags:{amenity:"bank",brand:"京都中央信用金庫","brand:en":"Kyoto Chuo Shinkin Bank","brand:wikidata":"Q11374844","brand:wikipedia":"jp:京都中央信用金庫",name:"京都中央信用金庫","name:en":"Kyoto Chuo Shinkin Bank"},removeTags:{amenity:"bank",brand:"京都中央信用金庫","brand:en":"Kyoto Chuo Shinkin Bank","brand:wikidata":"Q11374844","brand:wikipedia":"jp:京都中央信用金庫",name:"京都中央信用金庫","name:en":"Kyoto Chuo Shinkin Bank"},matchScore:2,suggestion:true},"amenity/bank/京都銀行":{name:"京都銀行",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q11375713"},addTags:{amenity:"bank",brand:"京都銀行","brand:en":"Bank of Kyoto","brand:wikidata":"Q11375713","brand:wikipedia":"en:Bank of Kyoto",name:"京都銀行","name:en":"Bank of Kyoto"},removeTags:{amenity:"bank",brand:"京都銀行","brand:en":"Bank of Kyoto","brand:wikidata":"Q11375713","brand:wikipedia":"en:Bank of Kyoto",name:"京都銀行","name:en":"Bank of Kyoto"},matchScore:2,suggestion:true},"amenity/bank/元大商業銀行":{name:"元大商業銀行",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q10889602"},addTags:{amenity:"bank",brand:"元大商業銀行","brand:en":"Yuanta Commercial Bank","brand:wikidata":"Q10889602","brand:wikipedia":"zh:元大商業銀行",name:"元大商業銀行","name:en":"Yuanta Commercial Bank"},removeTags:{amenity:"bank",brand:"元大商業銀行","brand:en":"Yuanta Commercial Bank","brand:wikidata":"Q10889602","brand:wikipedia":"zh:元大商業銀行",name:"元大商業銀行","name:en":"Yuanta Commercial Bank"},matchScore:2,suggestion:true},"amenity/bank/兆豐國際商業銀行":{name:"兆豐國際商業銀行",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q709757"},addTags:{amenity:"bank",brand:"兆豐國際商業銀行","brand:en":"Mega International Commercial Bank","brand:wikidata":"Q709757","brand:wikipedia":"en:Mega International Commercial Bank",name:"兆豐國際商業銀行","name:en":"Mega International Commercial Bank"},removeTags:{amenity:"bank",brand:"兆豐國際商業銀行","brand:en":"Mega International Commercial Bank","brand:wikidata":"Q709757","brand:wikipedia":"en:Mega International Commercial Bank",name:"兆豐國際商業銀行","name:en":"Mega International Commercial Bank"},matchScore:2,suggestion:true},"amenity/bank/北洋銀行":{name:"北洋銀行",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q11402354"},addTags:{amenity:"bank",brand:"北洋銀行","brand:en":"North Pacific Bank","brand:wikidata":"Q11402354","brand:wikipedia":"ja:北洋銀行",name:"北洋銀行","name:en":"North Pacific Bank"},removeTags:{amenity:"bank",brand:"北洋銀行","brand:en":"North Pacific Bank","brand:wikidata":"Q11402354","brand:wikipedia":"ja:北洋銀行",name:"北洋銀行","name:en":"North Pacific Bank"},matchScore:2,suggestion:true},"amenity/bank/北海道銀行":{name:"北海道銀行",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q5878076"},addTags:{amenity:"bank",brand:"北海道銀行","brand:en":"Hokkaido Bank","brand:wikidata":"Q5878076","brand:wikipedia":"en:Hokkaido Bank",name:"北海道銀行","name:en":"Hokkaido Bank"},removeTags:{amenity:"bank",brand:"北海道銀行","brand:en":"Hokkaido Bank","brand:wikidata":"Q5878076","brand:wikipedia":"en:Hokkaido Bank",name:"北海道銀行","name:en":"Hokkaido Bank"},matchScore:2,suggestion:true},"amenity/bank/台中商業銀行":{name:"台中商業銀行",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q6136958"},addTags:{amenity:"bank",brand:"台中商業銀行","brand:en":"Taichung Bank","brand:wikidata":"Q6136958","brand:wikipedia":"en:Taichung Bank",name:"台中商業銀行","name:en":"Taichung Bank"},removeTags:{amenity:"bank",brand:"台中商業銀行","brand:en":"Taichung Bank","brand:wikidata":"Q6136958","brand:wikipedia":"en:Taichung Bank",name:"台中商業銀行","name:en":"Taichung Bank"},matchScore:2,suggestion:true},"amenity/bank/台北富邦商業銀行":{name:"台北富邦商業銀行",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q697293"},addTags:{amenity:"bank",brand:"台北富邦商業銀行","brand:en":"Taipei Fubon Bank","brand:wikidata":"Q697293","brand:wikipedia":"en:Taipei Fubon Bank",name:"台北富邦商業銀行","name:en":"Taipei Fubon Bank"},removeTags:{amenity:"bank",brand:"台北富邦商業銀行","brand:en":"Taipei Fubon Bank","brand:wikidata":"Q697293","brand:wikipedia":"en:Taipei Fubon Bank",name:"台北富邦商業銀行","name:en":"Taipei Fubon Bank"},matchScore:2,suggestion:true},"amenity/bank/台新國際商業銀行":{name:"台新國際商業銀行",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q7676420"},addTags:{amenity:"bank",brand:"台新國際商業銀行","brand:en":"Taishin International Bank","brand:wikidata":"Q7676420","brand:wikipedia":"en:Taishin International Bank",name:"台新國際商業銀行","name:en":"Taishin International Bank"},removeTags:{amenity:"bank",brand:"台新國際商業銀行","brand:en":"Taishin International Bank","brand:wikidata":"Q7676420","brand:wikipedia":"en:Taishin International Bank",name:"台新國際商業銀行","name:en":"Taishin International Bank"},matchScore:2,suggestion:true},"amenity/bank/合作金庫商業銀行":{name:"合作金庫商業銀行",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q701540"},addTags:{amenity:"bank",brand:"合作金庫商業銀行","brand:en":"Taiwan Cooperative Bank","brand:wikidata":"Q701540","brand:wikipedia":"en:Taiwan Cooperative Bank",name:"合作金庫商業銀行","name:en":"Taiwan Cooperative Bank"},removeTags:{amenity:"bank",brand:"合作金庫商業銀行","brand:en":"Taiwan Cooperative Bank","brand:wikidata":"Q701540","brand:wikipedia":"en:Taiwan Cooperative Bank",name:"合作金庫商業銀行","name:en":"Taiwan Cooperative Bank"},matchScore:2,suggestion:true},"amenity/bank/國泰世華商業銀行":{name:"國泰世華商業銀行",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q702656"},addTags:{amenity:"bank",brand:"國泰世華商業銀行","brand:en":"Cathay United Bank","brand:wikidata":"Q702656","brand:wikipedia":"en:Cathay United Bank",name:"國泰世華商業銀行","name:en":"Cathay United Bank"},removeTags:{amenity:"bank",brand:"國泰世華商業銀行","brand:en":"Cathay United Bank","brand:wikidata":"Q702656","brand:wikipedia":"en:Cathay United Bank",name:"國泰世華商業銀行","name:en":"Cathay United Bank"},matchScore:2,suggestion:true},"amenity/bank/大眾商業銀行":{name:"大眾商業銀行",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q10937047"},addTags:{amenity:"bank",brand:"大眾商業銀行","brand:en":"Ta Chong Commercial Bank","brand:wikidata":"Q10937047","brand:wikipedia":"zh:大眾商業銀行",name:"大眾商業銀行","name:en":"Ta Chong Commercial Bank"},removeTags:{amenity:"bank",brand:"大眾商業銀行","brand:en":"Ta Chong Commercial Bank","brand:wikidata":"Q10937047","brand:wikipedia":"zh:大眾商業銀行",name:"大眾商業銀行","name:en":"Ta Chong Commercial Bank"},matchScore:2,suggestion:true},"amenity/bank/安泰商業銀行":{name:"安泰商業銀行",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q10946952"},addTags:{amenity:"bank",brand:"安泰商業銀行","brand:en":"Entie Commercial Bank","brand:wikidata":"Q10946952","brand:wikipedia":"zh:安泰商業銀行",name:"安泰商業銀行","name:en":"Entie Commercial Bank"},removeTags:{amenity:"bank",brand:"安泰商業銀行","brand:en":"Entie Commercial Bank","brand:wikidata":"Q10946952","brand:wikipedia":"zh:安泰商業銀行",name:"安泰商業銀行","name:en":"Entie Commercial Bank"},matchScore:2,suggestion:true},"amenity/bank/工商银行":{name:"工商银行",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q26463"},addTags:{amenity:"bank",brand:"工商银行","brand:en":"Industrial and Commercial Bank of China","brand:wikidata":"Q26463","brand:wikipedia":"en:Industrial and Commercial Bank of China",name:"工商银行","name:en":"Industrial and Commercial Bank of China"},removeTags:{amenity:"bank",brand:"工商银行","brand:en":"Industrial and Commercial Bank of China","brand:wikidata":"Q26463","brand:wikipedia":"en:Industrial and Commercial Bank of China",name:"工商银行","name:en":"Industrial and Commercial Bank of China"},matchScore:2,suggestion:true},"amenity/bank/彰化商業銀行":{name:"彰化商業銀行",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q5071627"},addTags:{amenity:"bank",brand:"彰化商業銀行","brand:en":"Chang Hwa Bank","brand:wikidata":"Q5071627","brand:wikipedia":"en:Chang Hwa Bank",name:"彰化商業銀行","name:en":"Chang Hwa Bank"},removeTags:{amenity:"bank",brand:"彰化商業銀行","brand:en":"Chang Hwa Bank","brand:wikidata":"Q5071627","brand:wikipedia":"en:Chang Hwa Bank",name:"彰化商業銀行","name:en":"Chang Hwa Bank"},matchScore:2,suggestion:true},"amenity/bank/招商银行":{name:"招商银行",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q1073327"},addTags:{amenity:"bank",brand:"招商银行","brand:en":"China Merchants Bank","brand:wikidata":"Q1073327","brand:wikipedia":"en:China Merchants Bank",name:"招商银行","name:en":"China Merchants Bank"},removeTags:{amenity:"bank",brand:"招商银行","brand:en":"China Merchants Bank","brand:wikidata":"Q1073327","brand:wikipedia":"en:China Merchants Bank",name:"招商银行","name:en":"China Merchants Bank"},matchScore:2,suggestion:true},"amenity/bank/板信商業銀行":{name:"板信商業銀行",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q11104946"},addTags:{amenity:"bank",brand:"板信商業銀行","brand:en":"Bank of Panshin","brand:wikidata":"Q11104946","brand:wikipedia":"zh:板信商業銀行",name:"板信商業銀行","name:en":"Bank of Panshin"},removeTags:{amenity:"bank",brand:"板信商業銀行","brand:en":"Bank of Panshin","brand:wikidata":"Q11104946","brand:wikipedia":"zh:板信商業銀行",name:"板信商業銀行","name:en":"Bank of Panshin"},matchScore:2,suggestion:true},"amenity/bank/横浜銀行":{name:"横浜銀行",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q2744340"},addTags:{amenity:"bank",brand:"横浜銀行","brand:en":"Bank of Yokohama","brand:wikidata":"Q2744340","brand:wikipedia":"en:Bank of Yokohama",name:"横浜銀行","name:en":"Bank of Yokohama"},removeTags:{amenity:"bank",brand:"横浜銀行","brand:en":"Bank of Yokohama","brand:wikidata":"Q2744340","brand:wikipedia":"en:Bank of Yokohama",name:"横浜銀行","name:en":"Bank of Yokohama"},matchScore:2,suggestion:true},"amenity/bank/永豐商業銀行":{name:"永豐商業銀行",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q4855976"},addTags:{amenity:"bank",brand:"永豐商業銀行","brand:en":"Bank SinoPac","brand:wikidata":"Q4855976","brand:wikipedia":"en:Bank SinoPac",name:"永豐商業銀行","name:en":"Bank SinoPac"},removeTags:{amenity:"bank",brand:"永豐商業銀行","brand:en":"Bank SinoPac","brand:wikidata":"Q4855976","brand:wikipedia":"en:Bank SinoPac",name:"永豐商業銀行","name:en":"Bank SinoPac"},matchScore:2,suggestion:true},"amenity/bank/玉山商業銀行":{name:"玉山商業銀行",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q5321663"},addTags:{amenity:"bank",brand:"玉山商業銀行","brand:en":"E.SUN Commercial Bank","brand:wikidata":"Q5321663","brand:wikipedia":"en:E.SUN Commercial Bank",name:"玉山商業銀行","name:en":"E.SUN Commercial Bank"},removeTags:{amenity:"bank",brand:"玉山商業銀行","brand:en":"E.SUN Commercial Bank","brand:wikidata":"Q5321663","brand:wikipedia":"en:E.SUN Commercial Bank",name:"玉山商業銀行","name:en":"E.SUN Commercial Bank"},matchScore:2,suggestion:true},"amenity/bank/第一商業銀行":{name:"第一商業銀行",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q11602128"},addTags:{amenity:"bank",brand:"第一商業銀行","brand:en":"First Commercial Bank","brand:wikidata":"Q11602128","brand:wikipedia":"zh:第一商業銀行",name:"第一商業銀行","name:en":"First Commercial Bank"},removeTags:{amenity:"bank",brand:"第一商業銀行","brand:en":"First Commercial Bank","brand:wikidata":"Q11602128","brand:wikipedia":"zh:第一商業銀行",name:"第一商業銀行","name:en":"First Commercial Bank"},matchScore:2,suggestion:true},"amenity/bank/聯邦商業銀行":{name:"聯邦商業銀行",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q15927195"},addTags:{amenity:"bank",brand:"聯邦商業銀行","brand:en":"Union Bank of Taiwan","brand:wikidata":"Q15927195","brand:wikipedia":"zh:聯邦商業銀行",name:"聯邦商業銀行","name:en":"Union Bank of Taiwan"},removeTags:{amenity:"bank",brand:"聯邦商業銀行","brand:en":"Union Bank of Taiwan","brand:wikidata":"Q15927195","brand:wikipedia":"zh:聯邦商業銀行",name:"聯邦商業銀行","name:en":"Union Bank of Taiwan"},matchScore:2,suggestion:true},"amenity/bank/臺灣中小企業銀行":{name:"臺灣中小企業銀行",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q15913812"},addTags:{amenity:"bank",brand:"臺灣中小企業銀行","brand:en":"Taiwan Business Bank","brand:wikidata":"Q15913812","brand:wikipedia":"zh:臺灣中小企業銀行",name:"臺灣中小企業銀行","name:en":"Taiwan Business Bank"},removeTags:{amenity:"bank",brand:"臺灣中小企業銀行","brand:en":"Taiwan Business Bank","brand:wikidata":"Q15913812","brand:wikipedia":"zh:臺灣中小企業銀行",name:"臺灣中小企業銀行","name:en":"Taiwan Business Bank"},matchScore:2,suggestion:true},"amenity/bank/臺灣土地銀行":{name:"臺灣土地銀行",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q717592"},addTags:{amenity:"bank",brand:"臺灣土地銀行","brand:en":"Land Bank of Taiwan","brand:wikidata":"Q717592","brand:wikipedia":"en:Land Bank of Taiwan",name:"臺灣土地銀行","name:en":"Land Bank of Taiwan"},removeTags:{amenity:"bank",brand:"臺灣土地銀行","brand:en":"Land Bank of Taiwan","brand:wikidata":"Q717592","brand:wikipedia":"en:Land Bank of Taiwan",name:"臺灣土地銀行","name:en":"Land Bank of Taiwan"},matchScore:2,suggestion:true},"amenity/bank/臺灣新光商業銀行":{name:"臺灣新光商業銀行",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q15909616"},addTags:{amenity:"bank",brand:"臺灣新光商業銀行","brand:en":"Shin Kong Commercial Bank","brand:wikidata":"Q15909616","brand:wikipedia":"zh:臺灣新光商業銀行",name:"臺灣新光商業銀行","name:en":"Shin Kong Commercial Bank"},removeTags:{amenity:"bank",brand:"臺灣新光商業銀行","brand:en":"Shin Kong Commercial Bank","brand:wikidata":"Q15909616","brand:wikipedia":"zh:臺灣新光商業銀行",name:"臺灣新光商業銀行","name:en":"Shin Kong Commercial Bank"},matchScore:2,suggestion:true},"amenity/bank/臺灣銀行":{name:"臺灣銀行",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q706533"},addTags:{amenity:"bank",brand:"臺灣銀行","brand:en":"Bank of Taiwan","brand:wikidata":"Q706533","brand:wikipedia":"en:Bank of Taiwan",name:"臺灣銀行","name:en":"Bank of Taiwan"},removeTags:{amenity:"bank",brand:"臺灣銀行","brand:en":"Bank of Taiwan","brand:wikidata":"Q706533","brand:wikipedia":"en:Bank of Taiwan",name:"臺灣銀行","name:en":"Bank of Taiwan"},matchScore:2,suggestion:true},"amenity/bank/華南商業銀行":{name:"華南商業銀行",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q11620043"},addTags:{amenity:"bank",brand:"華南商業銀行","brand:en":"Hua Nan Commercial Bank","brand:wikidata":"Q11620043","brand:wikipedia":"zh:華南商業銀行",name:"華南商業銀行","name:en":"Hua Nan Commercial Bank"},removeTags:{amenity:"bank",brand:"華南商業銀行","brand:en":"Hua Nan Commercial Bank","brand:wikidata":"Q11620043","brand:wikipedia":"zh:華南商業銀行",name:"華南商業銀行","name:en":"Hua Nan Commercial Bank"},matchScore:2,suggestion:true},"amenity/bank/遠東國際商業銀行":{name:"遠東國際商業銀行",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q15911143"},addTags:{amenity:"bank",brand:"遠東國際商業銀行","brand:en":"Far Eastern International Bank","brand:wikidata":"Q15911143","brand:wikipedia":"zh:遠東國際商業銀行",name:"遠東國際商業銀行","name:en":"Far Eastern International Bank"},removeTags:{amenity:"bank",brand:"遠東國際商業銀行","brand:en":"Far Eastern International Bank","brand:wikidata":"Q15911143","brand:wikipedia":"zh:遠東國際商業銀行",name:"遠東國際商業銀行","name:en":"Far Eastern International Bank"},matchScore:2,suggestion:true},"amenity/bank/陽信商業銀行":{name:"陽信商業銀行",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q11658759"},addTags:{amenity:"bank",brand:"陽信商業銀行","brand:en":"Sunny Commercial Bank","brand:wikidata":"Q11658759","brand:wikipedia":"zh:陽信商業銀行",name:"陽信商業銀行","name:en":"Sunny Commercial Bank"},removeTags:{amenity:"bank",brand:"陽信商業銀行","brand:en":"Sunny Commercial Bank","brand:wikidata":"Q11658759","brand:wikipedia":"zh:陽信商業銀行",name:"陽信商業銀行","name:en":"Sunny Commercial Bank"},matchScore:2,suggestion:true},"amenity/bank/静岡銀行":{name:"静岡銀行",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q7499501"},addTags:{amenity:"bank",brand:"静岡銀行","brand:en":"Shizuoka Bank","brand:wikidata":"Q7499501","brand:wikipedia":"en:Shizuoka Bank",name:"静岡銀行","name:en":"Shizuoka Bank"},removeTags:{amenity:"bank",brand:"静岡銀行","brand:en":"Shizuoka Bank","brand:wikidata":"Q7499501","brand:wikipedia":"en:Shizuoka Bank",name:"静岡銀行","name:en":"Shizuoka Bank"},matchScore:2,suggestion:true},"amenity/bank/국민은행":{name:"국민은행",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q496606"},addTags:{amenity:"bank",brand:"국민은행","brand:en":"KB Kookmin Bank","brand:wikidata":"Q496606","brand:wikipedia":"en:KB Kookmin Bank",name:"국민은행","name:en":"KB Kookmin Bank"},removeTags:{amenity:"bank",brand:"국민은행","brand:en":"KB Kookmin Bank","brand:wikidata":"Q496606","brand:wikipedia":"en:KB Kookmin Bank",name:"국민은행","name:en":"KB Kookmin Bank"},matchScore:2,suggestion:true},"amenity/bank/기업은행":{name:"기업은행",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q483855"},addTags:{amenity:"bank",brand:"기업은행","brand:en":"Industrial Bank of Korea","brand:wikidata":"Q483855","brand:wikipedia":"en:Industrial Bank of Korea",name:"기업은행","name:en":"Industrial Bank of Korea"},removeTags:{amenity:"bank",brand:"기업은행","brand:en":"Industrial Bank of Korea","brand:wikidata":"Q483855","brand:wikipedia":"en:Industrial Bank of Korea",name:"기업은행","name:en":"Industrial Bank of Korea"},matchScore:2,suggestion:true},"amenity/bank/신한은행":{name:"신한은행",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q487230"},addTags:{amenity:"bank",brand:"신한은행","brand:en":"Sinhan Bank","brand:wikidata":"Q487230","brand:wikipedia":"en:Shinhan Bank",name:"신한은행","name:en":"Sinhan Bank"},removeTags:{amenity:"bank",brand:"신한은행","brand:en":"Sinhan Bank","brand:wikidata":"Q487230","brand:wikipedia":"en:Shinhan Bank",name:"신한은행","name:en":"Sinhan Bank"},matchScore:2,suggestion:true},"amenity/bank/우리은행":{name:"우리은행",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q494369"},addTags:{amenity:"bank",brand:"우리은행","brand:en":"Woori Bank","brand:wikidata":"Q494369","brand:wikipedia":"en:Woori Bank",name:"우리은행","name:en":"Woori Bank"},removeTags:{amenity:"bank",brand:"우리은행","brand:en":"Woori Bank","brand:wikidata":"Q494369","brand:wikipedia":"en:Woori Bank",name:"우리은행","name:en":"Woori Bank"},matchScore:2,suggestion:true},"amenity/bank/하나은행":{name:"하나은행",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q484047"},addTags:{amenity:"bank",brand:"하나은행","brand:en":"Korea Exchange Bank","brand:wikidata":"Q484047","brand:wikipedia":"en:Korea Exchange Bank",name:"하나은행","name:en":"Korea Exchange Bank"},removeTags:{amenity:"bank",brand:"하나은행","brand:en":"Korea Exchange Bank","brand:wikidata":"Q484047","brand:wikipedia":"en:Korea Exchange Bank",name:"하나은행","name:en":"Korea Exchange Bank"},matchScore:2,suggestion:true},"amenity/bicycle_rental/Call a Bike":{name:"Call a Bike",icon:"maki-bicycle",geometry:["point","vertex","area"],tags:{amenity:"bicycle_rental","brand:wikidata":"Q1060525"},addTags:{amenity:"bicycle_rental",brand:"Call a Bike","brand:wikidata":"Q1060525","brand:wikipedia":"en:Call a Bike",name:"Call a Bike"},removeTags:{amenity:"bicycle_rental",brand:"Call a Bike","brand:wikidata":"Q1060525","brand:wikipedia":"en:Call a Bike",name:"Call a Bike"},matchScore:2,suggestion:true},"amenity/bureau_de_change/Travelex":{name:"Travelex",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bureau_de_change","brand:wikidata":"Q2337964"},addTags:{amenity:"bureau_de_change",brand:"Travelex","brand:wikidata":"Q2337964","brand:wikipedia":"en:Travelex",name:"Travelex"},removeTags:{amenity:"bureau_de_change",brand:"Travelex","brand:wikidata":"Q2337964","brand:wikipedia":"en:Travelex",name:"Travelex"},matchScore:2,suggestion:true},"amenity/cafe/85度C":{name:"85度C",icon:"maki-cafe",geometry:["point","area"],tags:{amenity:"cafe","brand:wikidata":"Q4644852"},addTags:{amenity:"cafe",brand:"85度C","brand:en":"85C Bakery Cafe","brand:wikidata":"Q4644852","brand:wikipedia":"en:85C Bakery Cafe",name:"85度C","name:en":"85C Bakery Cafe"},removeTags:{amenity:"cafe",brand:"85度C","brand:en":"85C Bakery Cafe","brand:wikidata":"Q4644852","brand:wikipedia":"en:85C Bakery Cafe",name:"85度C","name:en":"85C Bakery Cafe"},matchScore:2,suggestion:true},"amenity/cafe/Barista":{name:"Barista",icon:"maki-cafe",geometry:["point","area"],tags:{amenity:"cafe","brand:wikidata":"Q644735"},addTags:{amenity:"cafe",brand:"Barista","brand:wikidata":"Q644735","brand:wikipedia":"en:Barista (company)",name:"Barista"},removeTags:{amenity:"cafe",brand:"Barista","brand:wikidata":"Q644735","brand:wikipedia":"en:Barista (company)",name:"Barista"},matchScore:2,suggestion:true},"amenity/cafe/Cafe Coffee Day":{name:"Cafe Coffee Day",icon:"maki-cafe",geometry:["point","area"],tags:{amenity:"cafe","brand:wikidata":"Q5017235"},addTags:{amenity:"cafe",brand:"Cafe Coffee Day","brand:wikidata":"Q5017235","brand:wikipedia":"en:Café Coffee Day",name:"Cafe Coffee Day"},removeTags:{amenity:"cafe",brand:"Cafe Coffee Day","brand:wikidata":"Q5017235","brand:wikipedia":"en:Café Coffee Day",name:"Cafe Coffee Day"},matchScore:2,suggestion:true},"amenity/cafe/Caffè Nero":{name:"Caffè Nero",icon:"maki-cafe",geometry:["point","area"],tags:{amenity:"cafe","brand:wikidata":"Q675808"},addTags:{amenity:"cafe",brand:"Caffè Nero","brand:wikidata":"Q675808","brand:wikipedia":"en:Caffè Nero",name:"Caffè Nero"},removeTags:{amenity:"cafe",brand:"Caffè Nero","brand:wikidata":"Q675808","brand:wikipedia":"en:Caffè Nero",name:"Caffè Nero"},matchScore:2,suggestion:true},"amenity/cafe/Café Amazon":{name:"Café Amazon",icon:"maki-cafe",geometry:["point","area"],tags:{amenity:"cafe","brand:wikidata":"Q43247503"},addTags:{amenity:"cafe",brand:"Café Amazon","brand:wikidata":"Q43247503","brand:wikipedia":"en:Café Amazon",name:"Café Amazon"},removeTags:{amenity:"cafe",brand:"Café Amazon","brand:wikidata":"Q43247503","brand:wikipedia":"en:Café Amazon",name:"Café Amazon"},matchScore:2,suggestion:true},"amenity/cafe/Café Martínez":{name:"Café Martínez",icon:"maki-cafe",geometry:["point","area"],tags:{amenity:"cafe","brand:wikidata":"Q16540032"},addTags:{amenity:"cafe",brand:"Café Martínez","brand:wikidata":"Q16540032","brand:wikipedia":"es:Café Martínez",name:"Café Martínez"},removeTags:{amenity:"cafe",brand:"Café Martínez","brand:wikidata":"Q16540032","brand:wikipedia":"es:Café Martínez",name:"Café Martínez"},matchScore:2,suggestion:true},"amenity/cafe/Caribou Coffee":{name:"Caribou Coffee",icon:"maki-cafe",geometry:["point","area"],tags:{amenity:"cafe","brand:wikidata":"Q5039494"},addTags:{amenity:"cafe",brand:"Caribou Coffee","brand:wikidata":"Q5039494","brand:wikipedia":"en:Caribou Coffee",name:"Caribou Coffee"},removeTags:{amenity:"cafe",brand:"Caribou Coffee","brand:wikidata":"Q5039494","brand:wikipedia":"en:Caribou Coffee",name:"Caribou Coffee"},matchScore:2,suggestion:true},"amenity/cafe/Chatime":{name:"Chatime",icon:"maki-cafe",geometry:["point","area"],tags:{amenity:"cafe","brand:wikidata":"Q16829306"},addTags:{amenity:"cafe",brand:"Chatime","brand:wikidata":"Q16829306","brand:wikipedia":"en:Chatime",name:"Chatime"},removeTags:{amenity:"cafe",brand:"Chatime","brand:wikidata":"Q16829306","brand:wikipedia":"en:Chatime",name:"Chatime"},matchScore:2,suggestion:true},"amenity/cafe/Coffee Fellows":{name:"Coffee Fellows",icon:"maki-cafe",geometry:["point","area"],tags:{amenity:"cafe","brand:wikidata":"Q23461429"},addTags:{amenity:"cafe",brand:"Coffee Fellows","brand:wikidata":"Q23461429","brand:wikipedia":"en:Coffee Fellows",name:"Coffee Fellows"},removeTags:{amenity:"cafe",brand:"Coffee Fellows","brand:wikidata":"Q23461429","brand:wikipedia":"en:Coffee Fellows",name:"Coffee Fellows"},matchScore:2,suggestion:true},"amenity/cafe/Coffee House":{name:"Coffee House",icon:"maki-cafe",geometry:["point","area"],tags:{amenity:"cafe","brand:wikidata":"Q11855430"},addTags:{amenity:"cafe",brand:"Coffee House","brand:wikidata":"Q11855430","brand:wikipedia":"fi:Coffee House",name:"Coffee House"},removeTags:{amenity:"cafe",brand:"Coffee House","brand:wikidata":"Q11855430","brand:wikipedia":"fi:Coffee House",name:"Coffee House"},matchScore:2,suggestion:true},"amenity/cafe/Coffee Island":{name:"Coffee Island",icon:"maki-cafe",geometry:["point","area"],tags:{amenity:"cafe","brand:wikidata":"Q60867333"},addTags:{amenity:"cafe",brand:"Coffee Island","brand:wikidata":"Q60867333","brand:wikipedia":"en:Coffee Island",name:"Coffee Island"},removeTags:{amenity:"cafe",brand:"Coffee Island","brand:wikidata":"Q60867333","brand:wikipedia":"en:Coffee Island",name:"Coffee Island"},matchScore:2,suggestion:true},"amenity/cafe/Coffee Time":{name:"Coffee Time",icon:"maki-cafe",geometry:["point","area"],tags:{amenity:"cafe","brand:wikidata":"Q5140932"},addTags:{amenity:"cafe",brand:"Coffee Time","brand:wikidata":"Q5140932","brand:wikipedia":"en:Coffee Time",name:"Coffee Time"},removeTags:{amenity:"cafe",brand:"Coffee Time","brand:wikidata":"Q5140932","brand:wikipedia":"en:Coffee Time",name:"Coffee Time"},matchScore:2,suggestion:true},"amenity/cafe/Costa":{name:"Costa",icon:"maki-cafe",geometry:["point","area"],tags:{amenity:"cafe","brand:wikidata":"Q608845"},addTags:{amenity:"cafe",brand:"Costa","brand:wikidata":"Q608845","brand:wikipedia":"en:Costa Coffee",name:"Costa"},removeTags:{amenity:"cafe",brand:"Costa","brand:wikidata":"Q608845","brand:wikipedia":"en:Costa Coffee",name:"Costa"},matchScore:2,suggestion:true},"amenity/cafe/Country Style":{name:"Country Style",icon:"maki-cafe",geometry:["point","area"],tags:{amenity:"cafe","brand:wikidata":"Q5177435"},addTags:{amenity:"cafe",brand:"Country Style","brand:wikidata":"Q5177435","brand:wikipedia":"en:Country Style",name:"Country Style"},removeTags:{amenity:"cafe",brand:"Country Style","brand:wikidata":"Q5177435","brand:wikipedia":"en:Country Style",name:"Country Style"},matchScore:2,suggestion:true},"amenity/cafe/Espresso House":{name:"Espresso House",icon:"maki-cafe",geometry:["point","area"],tags:{amenity:"cafe","brand:wikidata":"Q10489162"},addTags:{amenity:"cafe",brand:"Espresso House","brand:wikidata":"Q10489162","brand:wikipedia":"en:Espresso House",name:"Espresso House"},removeTags:{amenity:"cafe",brand:"Espresso House","brand:wikidata":"Q10489162","brand:wikipedia":"en:Espresso House",name:"Espresso House"},matchScore:2,suggestion:true},"amenity/cafe/Havanna":{name:"Havanna",icon:"maki-cafe",geometry:["point","area"],tags:{amenity:"cafe","brand:wikidata":"Q2900869"},addTags:{amenity:"cafe",brand:"Havanna","brand:wikidata":"Q2900869","brand:wikipedia":"es:Havanna",name:"Havanna"},removeTags:{amenity:"cafe",brand:"Havanna","brand:wikidata":"Q2900869","brand:wikipedia":"es:Havanna",name:"Havanna"},matchScore:2,suggestion:true},"amenity/cafe/Insomnia":{name:"Insomnia",icon:"maki-cafe",geometry:["point","area"],tags:{amenity:"cafe","brand:wikidata":"Q6038271"},addTags:{amenity:"cafe",brand:"Insomnia","brand:wikidata":"Q6038271","brand:wikipedia":"en:Insomnia Coffee Company",name:"Insomnia"},removeTags:{amenity:"cafe",brand:"Insomnia","brand:wikidata":"Q6038271","brand:wikipedia":"en:Insomnia Coffee Company",name:"Insomnia"},matchScore:2,suggestion:true},"amenity/cafe/Joe & The Juice":{name:"Joe & The Juice",icon:"maki-cafe",geometry:["point","area"],tags:{amenity:"cafe","brand:wikidata":"Q26221514"},addTags:{amenity:"cafe",brand:"Joe & The Juice","brand:wikidata":"Q26221514","brand:wikipedia":"en:Joe & The Juice",name:"Joe & The Juice"},removeTags:{amenity:"cafe",brand:"Joe & The Juice","brand:wikidata":"Q26221514","brand:wikipedia":"en:Joe & The Juice",name:"Joe & The Juice"},matchScore:2,suggestion:true},"amenity/cafe/Le Pain Quotidien":{name:"Le Pain Quotidien",icon:"maki-cafe",geometry:["point","area"],tags:{amenity:"cafe","brand:wikidata":"Q2046903"},addTags:{amenity:"cafe",brand:"Le Pain Quotidien","brand:wikidata":"Q2046903","brand:wikipedia":"en:Le Pain Quotidien",name:"Le Pain Quotidien"},removeTags:{amenity:"cafe",brand:"Le Pain Quotidien","brand:wikidata":"Q2046903","brand:wikipedia":"en:Le Pain Quotidien",name:"Le Pain Quotidien"},matchScore:2,suggestion:true},"amenity/cafe/Mado":{name:"Mado",icon:"maki-cafe",geometry:["point","area"],tags:{amenity:"cafe","brand:wikidata":"Q17116336"},addTags:{amenity:"cafe",brand:"Mado","brand:wikidata":"Q17116336","brand:wikipedia":"en:Mado (food company)",name:"Mado"},removeTags:{amenity:"cafe",brand:"Mado","brand:wikidata":"Q17116336","brand:wikipedia":"en:Mado (food company)",name:"Mado"},matchScore:2,suggestion:true},"amenity/cafe/McCafé":{name:"McCafé",icon:"maki-cafe",geometry:["point","area"],tags:{amenity:"cafe","brand:wikidata":"Q3114287"},addTags:{amenity:"cafe",brand:"McCafé","brand:wikidata":"Q3114287","brand:wikipedia":"en:McCafé",cuisine:"coffee_shop",name:"McCafé"},removeTags:{amenity:"cafe",brand:"McCafé","brand:wikidata":"Q3114287","brand:wikipedia":"en:McCafé",cuisine:"coffee_shop",name:"McCafé"},matchScore:2,suggestion:true},"amenity/cafe/Patisserie Valerie":{name:"Patisserie Valerie",icon:"maki-cafe",geometry:["point","area"],tags:{amenity:"cafe","brand:wikidata":"Q22101966"},addTags:{amenity:"cafe",brand:"Patisserie Valerie","brand:wikidata":"Q22101966","brand:wikipedia":"en:Patisserie Valerie",cuisine:"cake",name:"Patisserie Valerie"},removeTags:{amenity:"cafe",brand:"Patisserie Valerie","brand:wikidata":"Q22101966","brand:wikipedia":"en:Patisserie Valerie",cuisine:"cake",name:"Patisserie Valerie"},matchScore:2,suggestion:true},"amenity/cafe/Peet's Coffee":{name:"Peet's Coffee",icon:"maki-cafe",geometry:["point","area"],tags:{amenity:"cafe","brand:wikidata":"Q1094101"},addTags:{amenity:"cafe",brand:"Peet's Coffee","brand:wikidata":"Q1094101","brand:wikipedia":"en:Peet's Coffee",name:"Peet's Coffee"},removeTags:{amenity:"cafe",brand:"Peet's Coffee","brand:wikidata":"Q1094101","brand:wikipedia":"en:Peet's Coffee",name:"Peet's Coffee"},matchScore:2,suggestion:true},"amenity/cafe/Pret A Manger":{name:"Pret A Manger",icon:"maki-cafe",geometry:["point","area"],tags:{amenity:"cafe","brand:wikidata":"Q2109109"},addTags:{amenity:"cafe",brand:"Pret A Manger","brand:wikidata":"Q2109109","brand:wikipedia":"en:Pret a Manger",name:"Pret A Manger"},removeTags:{amenity:"cafe",brand:"Pret A Manger","brand:wikidata":"Q2109109","brand:wikipedia":"en:Pret a Manger",name:"Pret A Manger"},matchScore:2,suggestion:true},"amenity/cafe/Pumpkin":{name:"Pumpkin",icon:"maki-cafe",geometry:["point","area"],tags:{amenity:"cafe","brand:wikidata":"Q27825961"},addTags:{amenity:"cafe",brand:"Pumpkin","brand:wikidata":"Q27825961","brand:wikipedia":"en:Pumpkin Café Shop",name:"Pumpkin"},removeTags:{amenity:"cafe",brand:"Pumpkin","brand:wikidata":"Q27825961","brand:wikipedia":"en:Pumpkin Café Shop",name:"Pumpkin"},matchScore:2,suggestion:true},"amenity/cafe/Second Cup":{name:"Second Cup",icon:"maki-cafe",geometry:["point","area"],tags:{amenity:"cafe","brand:wikidata":"Q862180"},addTags:{amenity:"cafe",brand:"Second Cup","brand:wikidata":"Q862180","brand:wikipedia":"en:Second Cup",name:"Second Cup"},removeTags:{amenity:"cafe",brand:"Second Cup","brand:wikidata":"Q862180","brand:wikipedia":"en:Second Cup",name:"Second Cup"},matchScore:2,suggestion:true},"amenity/cafe/Segafredo":{name:"Segafredo",icon:"maki-cafe",geometry:["point","area"],tags:{amenity:"cafe","brand:wikidata":"Q21282762"},addTags:{amenity:"cafe",brand:"Segafredo","brand:wikidata":"Q21282762","brand:wikipedia":"it:Segafredo Zanetti",name:"Segafredo"},removeTags:{amenity:"cafe",brand:"Segafredo","brand:wikidata":"Q21282762","brand:wikipedia":"it:Segafredo Zanetti",name:"Segafredo"},matchScore:2,suggestion:true},"amenity/cafe/Starbucks":{name:"Starbucks",icon:"maki-cafe",geometry:["point","area"],tags:{amenity:"cafe","brand:wikidata":"Q37158"},addTags:{amenity:"cafe",brand:"Starbucks","brand:wikidata":"Q37158","brand:wikipedia":"en:Starbucks",cuisine:"coffee_shop",name:"Starbucks"},removeTags:{amenity:"cafe",brand:"Starbucks","brand:wikidata":"Q37158","brand:wikipedia":"en:Starbucks",cuisine:"coffee_shop",name:"Starbucks"},matchScore:2,suggestion:true},"amenity/cafe/The Coffee Bean & Tea Leaf":{name:"The Coffee Bean & Tea Leaf",icon:"maki-cafe",geometry:["point","area"],tags:{amenity:"cafe","brand:wikidata":"Q1141384"},addTags:{amenity:"cafe",brand:"The Coffee Bean & Tea Leaf","brand:wikidata":"Q1141384","brand:wikipedia":"en:The Coffee Bean & Tea Leaf",name:"The Coffee Bean & Tea Leaf"},removeTags:{amenity:"cafe",brand:"The Coffee Bean & Tea Leaf","brand:wikidata":"Q1141384","brand:wikipedia":"en:The Coffee Bean & Tea Leaf",name:"The Coffee Bean & Tea Leaf"},matchScore:2,suggestion:true},"amenity/cafe/The Coffee Club":{name:"The Coffee Club",icon:"maki-cafe",geometry:["point","area"],tags:{amenity:"cafe","brand:wikidata":"Q7726599"},addTags:{amenity:"cafe",brand:"The Coffee Club","brand:wikidata":"Q7726599","brand:wikipedia":"en:The Coffee Club",name:"The Coffee Club"},removeTags:{amenity:"cafe",brand:"The Coffee Club","brand:wikidata":"Q7726599","brand:wikipedia":"en:The Coffee Club",name:"The Coffee Club"},matchScore:2,suggestion:true},"amenity/cafe/Tim Hortons":{name:"Tim Hortons",icon:"maki-cafe",geometry:["point","area"],tags:{amenity:"cafe","brand:wikidata":"Q175106"},addTags:{amenity:"cafe",brand:"Tim Hortons","brand:wikidata":"Q175106","brand:wikipedia":"en:Tim Hortons",name:"Tim Hortons"},removeTags:{amenity:"cafe",brand:"Tim Hortons","brand:wikidata":"Q175106","brand:wikipedia":"en:Tim Hortons",name:"Tim Hortons"},matchScore:2,suggestion:true},"amenity/cafe/Traveler's Coffee":{name:"Traveler's Coffee",icon:"maki-cafe",geometry:["point","area"],tags:{amenity:"cafe","brand:wikidata":"Q4051716"},addTags:{amenity:"cafe",brand:"Traveler's Coffee","brand:wikidata":"Q4051716","brand:wikipedia":"ru:Traveler’s Coffee",name:"Traveler's Coffee"},removeTags:{amenity:"cafe",brand:"Traveler's Coffee","brand:wikidata":"Q4051716","brand:wikipedia":"ru:Traveler’s Coffee",name:"Traveler's Coffee"},matchScore:2,suggestion:true},"amenity/cafe/Wayne's Coffee":{name:"Wayne's Coffee",icon:"maki-cafe",geometry:["point","area"],tags:{amenity:"cafe","brand:wikidata":"Q2637272"},addTags:{amenity:"cafe",brand:"Wayne's Coffee","brand:wikidata":"Q2637272","brand:wikipedia":"en:Wayne's Coffee",name:"Wayne's Coffee"},removeTags:{amenity:"cafe",brand:"Wayne's Coffee","brand:wikidata":"Q2637272","brand:wikipedia":"en:Wayne's Coffee",name:"Wayne's Coffee"},matchScore:2,suggestion:true},"amenity/cafe/Старбакс":{name:"Старбакс",icon:"maki-cafe",geometry:["point","area"],tags:{amenity:"cafe","brand:wikidata":"Q37158"},addTags:{amenity:"cafe",brand:"Старбакс","brand:en":"Starbucks","brand:wikidata":"Q37158","brand:wikipedia":"en:Starbucks",name:"Старбакс","name:en":"Starbucks"},removeTags:{amenity:"cafe",brand:"Старбакс","brand:en":"Starbucks","brand:wikidata":"Q37158","brand:wikipedia":"en:Starbucks",name:"Старбакс","name:en":"Starbucks"},matchScore:2,suggestion:true},"amenity/cafe/Шоколадница":{name:"Шоколадница",icon:"maki-cafe",geometry:["point","area"],tags:{amenity:"cafe","brand:wikidata":"Q30891188"},addTags:{amenity:"cafe",brand:"Шоколадница","brand:en":"Chocolate","brand:wikidata":"Q30891188","brand:wikipedia":"ru:Шоколадница (сеть кофеен)",name:"Шоколадница","name:en":"Chocolate"},removeTags:{amenity:"cafe",brand:"Шоколадница","brand:en":"Chocolate","brand:wikidata":"Q30891188","brand:wikipedia":"ru:Шоколадница (сеть кофеен)",name:"Шоколадница","name:en":"Chocolate"},matchScore:2,suggestion:true},"amenity/cafe/ארומה":{name:"ארומה",icon:"maki-cafe",geometry:["point","area"],tags:{amenity:"cafe","brand:wikidata":"Q2909872"},addTags:{amenity:"cafe",brand:"ארומה","brand:en":"Aroma Espresso Bar","brand:wikidata":"Q2909872","brand:wikipedia":"en:Aroma Espresso Bar",name:"ארומה","name:en":"Aroma Espresso Bar"},removeTags:{amenity:"cafe",brand:"ארומה","brand:en":"Aroma Espresso Bar","brand:wikidata":"Q2909872","brand:wikipedia":"en:Aroma Espresso Bar",name:"ארומה","name:en":"Aroma Espresso Bar"},matchScore:2,suggestion:true},"amenity/cafe/คาเฟ่ อเมซอน":{name:"คาเฟ่ อเมซอน",icon:"maki-cafe",geometry:["point","area"],tags:{amenity:"cafe","brand:wikidata":"Q43247503"},addTags:{amenity:"cafe",brand:"คาเฟ่ อเมซอน","brand:en":"Café Amazon","brand:wikidata":"Q43247503","brand:wikipedia":"en:Café Amazon",name:"คาเฟ่ อเมซอน","name:en":"Café Amazon"},removeTags:{amenity:"cafe",brand:"คาเฟ่ อเมซอน","brand:en":"Café Amazon","brand:wikidata":"Q43247503","brand:wikipedia":"en:Café Amazon",name:"คาเฟ่ อเมซอน","name:en":"Café Amazon"},matchScore:2,suggestion:true},"amenity/cafe/エクセルシオール カフェ":{name:"エクセルシオール カフェ",icon:"maki-cafe",geometry:["point","area"],tags:{amenity:"cafe","brand:wikidata":"Q11289828"},addTags:{amenity:"cafe",brand:"エクセルシオール カフェ","brand:en":"EXCELSIOR CAFFÉ","brand:wikidata":"Q11289828","brand:wikipedia":"ja:エクセルシオール カフェ",cuisine:"coffee_shop",name:"エクセルシオール カフェ"},removeTags:{amenity:"cafe",brand:"エクセルシオール カフェ","brand:en":"EXCELSIOR CAFFÉ","brand:wikidata":"Q11289828","brand:wikipedia":"ja:エクセルシオール カフェ",cuisine:"coffee_shop",name:"エクセルシオール カフェ"},matchScore:2,suggestion:true},"amenity/cafe/カフェ・ド・クリエ":{name:"カフェ・ド・クリエ",icon:"maki-cafe",geometry:["point","area"],tags:{amenity:"cafe","brand:wikidata":"Q17219077"},addTags:{amenity:"cafe",brand:"カフェ・ド・クリエ","brand:en":"Cafe de CRIE","brand:wikidata":"Q17219077","brand:wikipedia":"ja:ポッカクリエイト",name:"カフェ・ド・クリエ","name:en":"Cafe de CRIE"},removeTags:{amenity:"cafe",brand:"カフェ・ド・クリエ","brand:en":"Cafe de CRIE","brand:wikidata":"Q17219077","brand:wikipedia":"ja:ポッカクリエイト",name:"カフェ・ド・クリエ","name:en":"Cafe de CRIE"},matchScore:2,suggestion:true},"amenity/cafe/カフェ・ベローチェ":{name:"カフェ・ベローチェ",icon:"maki-cafe",geometry:["point","area"],tags:{amenity:"cafe","brand:wikidata":"Q11294597"},addTags:{amenity:"cafe",brand:"カフェ・ベローチェ","brand:en":"CAFFÈ VELOCE","brand:wikidata":"Q11294597","brand:wikipedia":"ja:カフェ・ベローチェ",cuisine:"coffee_shop",name:"カフェ・ベローチェ","name:en":"CAFFÈ VELOCE"},removeTags:{amenity:"cafe",brand:"カフェ・ベローチェ","brand:en":"CAFFÈ VELOCE","brand:wikidata":"Q11294597","brand:wikipedia":"ja:カフェ・ベローチェ",cuisine:"coffee_shop",name:"カフェ・ベローチェ","name:en":"CAFFÈ VELOCE"},matchScore:2,suggestion:true},"amenity/cafe/コメダ珈琲店":{name:"コメダ珈琲店",icon:"maki-cafe",geometry:["point","area"],tags:{amenity:"cafe","brand:wikidata":"Q11302679"},addTags:{amenity:"cafe",brand:"コメダ珈琲店","brand:en":"Komeda Coffee Shop","brand:wikidata":"Q11302679","brand:wikipedia":"ja:コメダ",cuisine:"coffee_shop",name:"コメダ珈琲店","name:en":"Komeda Coffee Shop"},removeTags:{amenity:"cafe",brand:"コメダ珈琲店","brand:en":"Komeda Coffee Shop","brand:wikidata":"Q11302679","brand:wikipedia":"ja:コメダ",cuisine:"coffee_shop",name:"コメダ珈琲店","name:en":"Komeda Coffee Shop"},matchScore:2,suggestion:true},"amenity/cafe/サンマルクカフェ":{name:"サンマルクカフェ",icon:"maki-cafe",geometry:["point","area"],tags:{amenity:"cafe","brand:wikidata":"Q11305989"},addTags:{amenity:"cafe",brand:"サンマルクカフェ","brand:en":"ST.MARC CAFÉ","brand:wikidata":"Q11305989","brand:wikipedia":"ja:サンマルクホールディングス",cuisine:"coffee_shop",name:"サンマルクカフェ","name:en":"ST.MARC CAFÉ"},removeTags:{amenity:"cafe",brand:"サンマルクカフェ","brand:en":"ST.MARC CAFÉ","brand:wikidata":"Q11305989","brand:wikipedia":"ja:サンマルクホールディングス",cuisine:"coffee_shop",name:"サンマルクカフェ","name:en":"ST.MARC CAFÉ"},matchScore:2,suggestion:true},"amenity/cafe/スターバックス":{name:"スターバックス",icon:"maki-cafe",geometry:["point","area"],tags:{amenity:"cafe","brand:wikidata":"Q37158"},addTags:{amenity:"cafe",brand:"スターバックス","brand:en":"Starbucks","brand:wikidata":"Q37158","brand:wikipedia":"ja:スターバックス",cuisine:"coffee_shop",name:"スターバックス","name:en":"Starbucks"},removeTags:{amenity:"cafe",brand:"スターバックス","brand:en":"Starbucks","brand:wikidata":"Q37158","brand:wikipedia":"ja:スターバックス",cuisine:"coffee_shop",name:"スターバックス","name:en":"Starbucks"},matchScore:2,suggestion:true},"amenity/cafe/タリーズコーヒー":{name:"タリーズコーヒー",icon:"maki-cafe",geometry:["point","area"],tags:{amenity:"cafe","brand:wikidata":"Q3541983"},addTags:{amenity:"cafe",brand:"タリーズコーヒー","brand:en":"Tully's Coffee","brand:wikidata":"Q3541983","brand:wikipedia":"en:Tully's Coffee",name:"タリーズコーヒー","name:en":"Tully's Coffee"},removeTags:{amenity:"cafe",brand:"タリーズコーヒー","brand:en":"Tully's Coffee","brand:wikidata":"Q3541983","brand:wikipedia":"en:Tully's Coffee",name:"タリーズコーヒー","name:en":"Tully's Coffee"},matchScore:2,suggestion:true},"amenity/cafe/ドトールコーヒーショップ":{name:"ドトールコーヒーショップ",icon:"maki-cafe",geometry:["point","area"],tags:{amenity:"cafe","brand:wikidata":"Q11322732"},addTags:{amenity:"cafe",brand:"ドトールコーヒーショップ","brand:en":"Doutor","brand:wikidata":"Q11322732","brand:wikipedia":"ja:ドトールコーヒーショップ",cuisine:"coffee_shop",name:"ドトールコーヒーショップ","name:en":"Doutor Coffee Shop"},removeTags:{amenity:"cafe",brand:"ドトールコーヒーショップ","brand:en":"Doutor","brand:wikidata":"Q11322732","brand:wikipedia":"ja:ドトールコーヒーショップ",cuisine:"coffee_shop",name:"ドトールコーヒーショップ","name:en":"Doutor Coffee Shop"},matchScore:2,suggestion:true},"amenity/cafe/星巴克":{name:"星巴克",icon:"maki-cafe",geometry:["point","area"],tags:{amenity:"cafe","brand:wikidata":"Q37158"},addTags:{amenity:"cafe",brand:"星巴克","brand:en":"Starbucks","brand:wikidata":"Q37158","brand:wikipedia":"zh:星巴克",cuisine:"coffee_shop",name:"星巴克","name:en":"Starbucks"},removeTags:{amenity:"cafe",brand:"星巴克","brand:en":"Starbucks","brand:wikidata":"Q37158","brand:wikipedia":"zh:星巴克",cuisine:"coffee_shop",name:"星巴克","name:en":"Starbucks"},matchScore:2,suggestion:true},"amenity/cafe/스타벅스":{name:"스타벅스",icon:"maki-cafe",geometry:["point","area"],tags:{amenity:"cafe","brand:wikidata":"Q37158"},addTags:{amenity:"cafe",brand:"스타벅스","brand:en":"Starbucks","brand:wikidata":"Q37158","brand:wikipedia":"ko:스타벅스",cuisine:"coffee_shop",name:"스타벅스","name:en":"Starbucks"},removeTags:{amenity:"cafe",brand:"스타벅스","brand:en":"Starbucks","brand:wikidata":"Q37158","brand:wikipedia":"ko:스타벅스",cuisine:"coffee_shop",name:"스타벅스","name:en":"Starbucks"},matchScore:2,suggestion:true},"amenity/car_rental/Alamo":{name:"Alamo",icon:"maki-car-rental",geometry:["point","area"],tags:{amenity:"car_rental","brand:wikidata":"Q1429287"},addTags:{amenity:"car_rental",brand:"Alamo","brand:wikidata":"Q1429287","brand:wikipedia":"en:Alamo Rent a Car",name:"Alamo"},removeTags:{amenity:"car_rental",brand:"Alamo","brand:wikidata":"Q1429287","brand:wikipedia":"en:Alamo Rent a Car",name:"Alamo"},matchScore:2,suggestion:true},"amenity/car_rental/Avis":{name:"Avis",icon:"maki-car-rental",geometry:["point","area"],tags:{amenity:"car_rental","brand:wikidata":"Q791136"},addTags:{amenity:"car_rental",brand:"Avis","brand:wikidata":"Q791136","brand:wikipedia":"en:Avis Rent a Car",name:"Avis"},removeTags:{amenity:"car_rental",brand:"Avis","brand:wikidata":"Q791136","brand:wikipedia":"en:Avis Rent a Car",name:"Avis"},matchScore:2,suggestion:true},"amenity/car_rental/Budget":{name:"Budget",icon:"maki-car-rental",geometry:["point","area"],tags:{amenity:"car_rental","brand:wikidata":"Q1001437"},addTags:{amenity:"car_rental",brand:"Budget","brand:wikidata":"Q1001437","brand:wikipedia":"en:Budget Rent a Car",name:"Budget"},removeTags:{amenity:"car_rental",brand:"Budget","brand:wikidata":"Q1001437","brand:wikipedia":"en:Budget Rent a Car",name:"Budget"},matchScore:2,suggestion:true},"amenity/car_rental/Dollar":{name:"Dollar",icon:"maki-car-rental",geometry:["point","area"],tags:{amenity:"car_rental","brand:wikidata":"Q1235661"},addTags:{amenity:"car_rental",brand:"Dollar","brand:wikidata":"Q1235661","brand:wikipedia":"en:Dollar Rent A Car",name:"Dollar"},removeTags:{amenity:"car_rental",brand:"Dollar","brand:wikidata":"Q1235661","brand:wikipedia":"en:Dollar Rent A Car",name:"Dollar"},matchScore:2,suggestion:true},"amenity/car_rental/Enterprise":{name:"Enterprise",icon:"maki-car-rental",geometry:["point","area"],tags:{amenity:"car_rental","brand:wikidata":"Q17085454"},addTags:{amenity:"car_rental",brand:"Enterprise","brand:wikidata":"Q17085454","brand:wikipedia":"en:Enterprise Rent-A-Car",name:"Enterprise"},removeTags:{amenity:"car_rental",brand:"Enterprise","brand:wikidata":"Q17085454","brand:wikipedia":"en:Enterprise Rent-A-Car",name:"Enterprise"},matchScore:2,suggestion:true},"amenity/car_rental/Europcar":{name:"Europcar",icon:"maki-car-rental",geometry:["point","area"],tags:{amenity:"car_rental","brand:wikidata":"Q1376256"},addTags:{amenity:"car_rental",brand:"Europcar","brand:wikidata":"Q1376256","brand:wikipedia":"en:Europcar",name:"Europcar"},removeTags:{amenity:"car_rental",brand:"Europcar","brand:wikidata":"Q1376256","brand:wikipedia":"en:Europcar",name:"Europcar"},matchScore:2,suggestion:true},"amenity/car_rental/Hertz":{name:"Hertz",icon:"maki-car-rental",geometry:["point","area"],tags:{amenity:"car_rental","brand:wikidata":"Q1543874"},addTags:{amenity:"car_rental",brand:"Hertz","brand:wikidata":"Q1543874","brand:wikipedia":"en:The Hertz Corporation",name:"Hertz"},removeTags:{amenity:"car_rental",brand:"Hertz","brand:wikidata":"Q1543874","brand:wikipedia":"en:The Hertz Corporation",name:"Hertz"},matchScore:2,suggestion:true},"amenity/car_rental/Localiza":{name:"Localiza",icon:"maki-car-rental",geometry:["point","area"],tags:{amenity:"car_rental","brand:wikidata":"Q10319490"},addTags:{amenity:"car_rental",brand:"Localiza","brand:wikidata":"Q10319490","brand:wikipedia":"en:Localiza",name:"Localiza"},removeTags:{amenity:"car_rental",brand:"Localiza","brand:wikidata":"Q10319490","brand:wikipedia":"en:Localiza",name:"Localiza"},matchScore:2,suggestion:true},"amenity/car_rental/Sixt":{name:"Sixt",icon:"maki-car-rental",geometry:["point","area"],tags:{amenity:"car_rental","brand:wikidata":"Q705664"},addTags:{amenity:"car_rental",brand:"Sixt","brand:wikidata":"Q705664","brand:wikipedia":"en:Sixt",name:"Sixt"},removeTags:{amenity:"car_rental",brand:"Sixt","brand:wikidata":"Q705664","brand:wikipedia":"en:Sixt",name:"Sixt"},matchScore:2,suggestion:true},"amenity/car_rental/Thrifty":{name:"Thrifty",icon:"maki-car-rental",geometry:["point","area"],tags:{amenity:"car_rental","brand:wikidata":"Q2429546"},addTags:{amenity:"car_rental",brand:"Thrifty","brand:wikidata":"Q2429546","brand:wikipedia":"en:Thrifty Car Rental",name:"Thrifty"},removeTags:{amenity:"car_rental",brand:"Thrifty","brand:wikidata":"Q2429546","brand:wikipedia":"en:Thrifty Car Rental",name:"Thrifty"},matchScore:2,suggestion:true},"amenity/car_rental/U-Haul":{name:"U-Haul",icon:"maki-car-rental",geometry:["point","area"],tags:{amenity:"car_rental","brand:wikidata":"Q7862902"},addTags:{amenity:"car_rental",brand:"U-Haul","brand:wikidata":"Q7862902","brand:wikipedia":"en:U-Haul",name:"U-Haul"},removeTags:{amenity:"car_rental",brand:"U-Haul","brand:wikidata":"Q7862902","brand:wikipedia":"en:U-Haul",name:"U-Haul"},matchScore:2,suggestion:true},"amenity/car_rental/オリックスレンタカー":{name:"オリックスレンタカー",icon:"maki-car-rental",geometry:["point","area"],tags:{amenity:"car_rental","brand:wikidata":"Q11123021"},addTags:{amenity:"car_rental",brand:"オリックスレンタカー","brand:en":"ORIX Car Rental","brand:wikidata":"Q11123021","brand:wikipedia":"ja:オリックスレンタカー",name:"オリックスレンタカー","name:en":"ORIX Car Rental"},removeTags:{amenity:"car_rental",brand:"オリックスレンタカー","brand:en":"ORIX Car Rental","brand:wikidata":"Q11123021","brand:wikipedia":"ja:オリックスレンタカー",name:"オリックスレンタカー","name:en":"ORIX Car Rental"},matchScore:2,suggestion:true},"amenity/car_rental/トヨタレンタカー":{name:"トヨタレンタカー",icon:"maki-car-rental",geometry:["point","area"],tags:{amenity:"car_rental","brand:wikidata":"Q11321580"},addTags:{amenity:"car_rental",brand:"トヨタレンタカー","brand:en":"Toyota Rental Car","brand:wikidata":"Q11321580","brand:wikipedia":"ja:トヨタレンタリース",name:"トヨタレンタカー","name:en":"Toyota Rental Car"},removeTags:{amenity:"car_rental",brand:"トヨタレンタカー","brand:en":"Toyota Rental Car","brand:wikidata":"Q11321580","brand:wikipedia":"ja:トヨタレンタリース",name:"トヨタレンタカー","name:en":"Toyota Rental Car"},matchScore:2,suggestion:true},"amenity/car_rental/ニッポンレンタカー":{name:"ニッポンレンタカー",icon:"maki-car-rental",geometry:["point","area"],tags:{amenity:"car_rental","brand:wikidata":"Q11086533"},addTags:{amenity:"car_rental",brand:"ニッポンレンタカー","brand:en":"Nippon Car Rental","brand:wikidata":"Q11086533","brand:wikipedia":"ja:ニッポンレンタカー",name:"ニッポンレンタカー","name:en":"Nippon Car Rental"},removeTags:{amenity:"car_rental",brand:"ニッポンレンタカー","brand:en":"Nippon Car Rental","brand:wikidata":"Q11086533","brand:wikipedia":"ja:ニッポンレンタカー",name:"ニッポンレンタカー","name:en":"Nippon Car Rental"},matchScore:2,suggestion:true},"amenity/car_rental/日産レンタカー":{name:"日産レンタカー",icon:"maki-car-rental",geometry:["point","area"],tags:{amenity:"car_rental","brand:wikidata":"Q11086838"},addTags:{amenity:"car_rental",brand:"日産レンタカー","brand:en":"Nissan Car Rental","brand:wikidata":"Q11086838","brand:wikipedia":"ja:日産レンタカー",name:"日産レンタカー","name:en":"Nissan Car Rental"},removeTags:{amenity:"car_rental",brand:"日産レンタカー","brand:en":"Nissan Car Rental","brand:wikidata":"Q11086838","brand:wikipedia":"ja:日産レンタカー",name:"日産レンタカー","name:en":"Nissan Car Rental"},matchScore:2,suggestion:true},"amenity/charging_station/ChargePoint":{name:"ChargePoint",icon:"fas-charging-station",geometry:["point"],tags:{amenity:"charging_station","brand:wikidata":"Q5176149"},addTags:{amenity:"charging_station",brand:"ChargePoint","brand:wikidata":"Q5176149","brand:wikipedia":"en:ChargePoint",name:"ChargePoint"},removeTags:{amenity:"charging_station",brand:"ChargePoint","brand:wikidata":"Q5176149","brand:wikipedia":"en:ChargePoint",name:"ChargePoint"},matchScore:2,suggestion:true},"amenity/charging_station/Enel - stazione di ricarica":{name:"Enel - stazione di ricarica",icon:"fas-charging-station",geometry:["point"],tags:{amenity:"charging_station","brand:wikidata":"Q651222"},addTags:{amenity:"charging_station",brand:"Enel - stazione di ricarica","brand:wikidata":"Q651222","brand:wikipedia":"en:Enel",name:"Enel - stazione di ricarica"},removeTags:{amenity:"charging_station",brand:"Enel - stazione di ricarica","brand:wikidata":"Q651222","brand:wikipedia":"en:Enel",name:"Enel - stazione di ricarica"},matchScore:2,suggestion:true},"amenity/charging_station/Tesla Supercharger":{name:"Tesla Supercharger",icon:"fas-charging-station",geometry:["point"],tags:{amenity:"charging_station","brand:wikidata":"Q17089620"},addTags:{amenity:"charging_station",brand:"Tesla Supercharger","brand:wikidata":"Q17089620","brand:wikipedia":"en:Tesla Supercharger",name:"Tesla Supercharger"},removeTags:{amenity:"charging_station",brand:"Tesla Supercharger","brand:wikidata":"Q17089620","brand:wikipedia":"en:Tesla Supercharger",name:"Tesla Supercharger"},matchScore:2,suggestion:true},"amenity/cinema/Cinema City":{name:"Cinema City",icon:"maki-cinema",geometry:["point","area"],tags:{amenity:"cinema","brand:wikidata":"Q543651"},addTags:{amenity:"cinema",brand:"Cinema City","brand:wikidata":"Q543651","brand:wikipedia":"en:Cinema City International",name:"Cinema City"},removeTags:{amenity:"cinema",brand:"Cinema City","brand:wikidata":"Q543651","brand:wikipedia":"en:Cinema City International",name:"Cinema City"},matchScore:2,suggestion:true},"amenity/cinema/Cinemark":{name:"Cinemark",icon:"maki-cinema",geometry:["point","area"],tags:{amenity:"cinema","brand:wikidata":"Q707530"},addTags:{amenity:"cinema",brand:"Cinemark","brand:wikidata":"Q707530","brand:wikipedia":"en:Cinemark Theatres",name:"Cinemark"},removeTags:{amenity:"cinema",brand:"Cinemark","brand:wikidata":"Q707530","brand:wikipedia":"en:Cinemark Theatres",name:"Cinemark"},matchScore:2,suggestion:true},"amenity/cinema/Cinemex":{name:"Cinemex",icon:"maki-cinema",geometry:["point","area"],tags:{amenity:"cinema","brand:wikidata":"Q3333072"},addTags:{amenity:"cinema",brand:"Cinemex","brand:wikidata":"Q3333072","brand:wikipedia":"en:Cinemex",name:"Cinemex"},removeTags:{amenity:"cinema",brand:"Cinemex","brand:wikidata":"Q3333072","brand:wikipedia":"en:Cinemex",name:"Cinemex"},matchScore:2,suggestion:true},"amenity/cinema/Cinepolis":{name:"Cinepolis",icon:"maki-cinema",geometry:["point","area"],tags:{amenity:"cinema","brand:wikidata":"Q5686673"},addTags:{amenity:"cinema",brand:"Cinepolis","brand:wikidata":"Q5686673","brand:wikipedia":"en:Cinépolis",name:"Cinepolis"},removeTags:{amenity:"cinema",brand:"Cinepolis","brand:wikidata":"Q5686673","brand:wikipedia":"en:Cinépolis",name:"Cinepolis"},matchScore:2,suggestion:true},"amenity/cinema/Cineworld":{name:"Cineworld",icon:"maki-cinema",geometry:["point","area"],tags:{amenity:"cinema","brand:wikidata":"Q5120901"},addTags:{amenity:"cinema",brand:"Cineworld","brand:wikidata":"Q5120901","brand:wikipedia":"en:Cineworld",name:"Cineworld"},removeTags:{amenity:"cinema",brand:"Cineworld","brand:wikidata":"Q5120901","brand:wikipedia":"en:Cineworld",name:"Cineworld"},matchScore:2,suggestion:true},"amenity/cinema/Odeon":{name:"Odeon",icon:"maki-cinema",geometry:["point","area"],tags:{amenity:"cinema","brand:wikidata":"Q6127470"},addTags:{amenity:"cinema",brand:"Odeon","brand:wikidata":"Q6127470","brand:wikipedia":"en:Odeon Cinemas",name:"Odeon"},removeTags:{amenity:"cinema",brand:"Odeon","brand:wikidata":"Q6127470","brand:wikipedia":"en:Odeon Cinemas",name:"Odeon"},matchScore:2,suggestion:true},"amenity/fast_food/burger/A&W (Canada)":{name:"A&W (Canada)",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food",cuisine:"burger","brand:wikidata":"Q2818848"},addTags:{amenity:"fast_food",brand:"A&W","brand:wikidata":"Q2818848","brand:wikipedia":"en:A&W (Canada)",cuisine:"burger",name:"A&W"},removeTags:{amenity:"fast_food",brand:"A&W","brand:wikidata":"Q2818848","brand:wikipedia":"en:A&W (Canada)",cuisine:"burger",name:"A&W"},reference:{key:"cuisine",value:"burger"},matchScore:2,suggestion:true},"amenity/fast_food/burger/A&W (USA)":{name:"A&W (USA)",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food",cuisine:"burger","brand:wikidata":"Q277641"},addTags:{amenity:"fast_food",brand:"A&W","brand:wikidata":"Q277641","brand:wikipedia":"en:A&W Restaurants",cuisine:"burger",name:"A&W"},removeTags:{amenity:"fast_food",brand:"A&W","brand:wikidata":"Q277641","brand:wikipedia":"en:A&W Restaurants",cuisine:"burger",name:"A&W"},reference:{key:"cuisine",value:"burger"},matchScore:2,suggestion:true},"amenity/fast_food/sandwich/Arby's":{name:"Arby's",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"fast_food",cuisine:"sandwich","brand:wikidata":"Q630866"},addTags:{amenity:"fast_food",brand:"Arby's","brand:wikidata":"Q630866","brand:wikipedia":"en:Arby's",cuisine:"sandwich",name:"Arby's"},removeTags:{amenity:"fast_food",brand:"Arby's","brand:wikidata":"Q630866","brand:wikipedia":"en:Arby's",cuisine:"sandwich",name:"Arby's"},reference:{key:"cuisine",value:"sandwich"},matchScore:2,suggestion:true},"amenity/fast_food/Auntie Anne's":{name:"Auntie Anne's",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food","brand:wikidata":"Q4822010"},addTags:{amenity:"fast_food",brand:"Auntie Anne's","brand:wikidata":"Q4822010","brand:wikipedia":"en:Auntie Anne's",cuisine:"pretzel",name:"Auntie Anne's"},removeTags:{amenity:"fast_food",brand:"Auntie Anne's","brand:wikidata":"Q4822010","brand:wikipedia":"en:Auntie Anne's",cuisine:"pretzel",name:"Auntie Anne's"},matchScore:2,suggestion:true},"amenity/fast_food/burger/Bob's":{name:"Bob's",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food",cuisine:"burger","brand:wikidata":"Q1392113"},addTags:{amenity:"fast_food",brand:"Bob's","brand:wikidata":"Q1392113","brand:wikipedia":"en:Bob's",cuisine:"burger",name:"Bob's"},removeTags:{amenity:"fast_food",brand:"Bob's","brand:wikidata":"Q1392113","brand:wikipedia":"en:Bob's",cuisine:"burger",name:"Bob's"},reference:{key:"cuisine",value:"burger"},matchScore:2,suggestion:true},"amenity/fast_food/chicken/Bojangles'":{name:"Bojangles'",icon:"fas-drumstick-bite",geometry:["point","area"],tags:{amenity:"fast_food",cuisine:"chicken","brand:wikidata":"Q891163"},addTags:{amenity:"fast_food",brand:"Bojangles'","brand:wikidata":"Q891163","brand:wikipedia":"en:Bojangles' Famous Chicken 'n Biscuits",cuisine:"chicken",name:"Bojangles'"},removeTags:{amenity:"fast_food",brand:"Bojangles'","brand:wikidata":"Q891163","brand:wikipedia":"en:Bojangles' Famous Chicken 'n Biscuits",cuisine:"chicken",name:"Bojangles'"},reference:{key:"cuisine",value:"chicken"},matchScore:2,suggestion:true},"amenity/fast_food/Booster Juice":{name:"Booster Juice",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food","brand:wikidata":"Q4943796"},addTags:{amenity:"fast_food",brand:"Booster Juice","brand:wikidata":"Q4943796","brand:wikipedia":"en:Booster Juice",name:"Booster Juice"},removeTags:{amenity:"fast_food",brand:"Booster Juice","brand:wikidata":"Q4943796","brand:wikipedia":"en:Booster Juice",name:"Booster Juice"},matchScore:2,suggestion:true},"amenity/fast_food/Boston Market":{name:"Boston Market",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food","brand:wikidata":"Q603617"},addTags:{amenity:"fast_food",brand:"Boston Market","brand:wikidata":"Q603617","brand:wikipedia":"en:Boston Market",name:"Boston Market"},removeTags:{amenity:"fast_food",brand:"Boston Market","brand:wikidata":"Q603617","brand:wikipedia":"en:Boston Market",name:"Boston Market"},matchScore:2,suggestion:true},"amenity/fast_food/Braum's":{name:"Braum's",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food","brand:wikidata":"Q4958263"},addTags:{amenity:"fast_food",brand:"Braum's","brand:wikidata":"Q4958263","brand:wikipedia":"en:Braum's",name:"Braum's"},removeTags:{amenity:"fast_food",brand:"Braum's","brand:wikidata":"Q4958263","brand:wikipedia":"en:Braum's",name:"Braum's"},matchScore:2,suggestion:true},"amenity/fast_food/burger/Burger King":{name:"Burger King",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food",cuisine:"burger","brand:wikidata":"Q177054"},addTags:{amenity:"fast_food",brand:"Burger King","brand:wikidata":"Q177054","brand:wikipedia":"en:Burger King",cuisine:"burger",name:"Burger King"},removeTags:{amenity:"fast_food",brand:"Burger King","brand:wikidata":"Q177054","brand:wikipedia":"en:Burger King",cuisine:"burger",name:"Burger King"},reference:{key:"cuisine",value:"burger"},matchScore:2,suggestion:true},"amenity/fast_food/burger/Burger Machine":{name:"Burger Machine",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food",cuisine:"burger","brand:wikidata":"Q4998549"},addTags:{amenity:"fast_food",brand:"Burger Machine","brand:wikidata":"Q4998549","brand:wikipedia":"en:Burger Machine",cuisine:"burger",name:"Burger Machine"},removeTags:{amenity:"fast_food",brand:"Burger Machine","brand:wikidata":"Q4998549","brand:wikipedia":"en:Burger Machine",cuisine:"burger",name:"Burger Machine"},reference:{key:"cuisine",value:"burger"},matchScore:2,suggestion:true},"amenity/fast_food/burger/BurgerFi":{name:"BurgerFi",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food",cuisine:"burger","brand:wikidata":"Q39045496"},addTags:{amenity:"fast_food",brand:"BurgerFi","brand:wikidata":"Q39045496","brand:wikipedia":"en:BurgerFi",cuisine:"burger",name:"BurgerFi"},removeTags:{amenity:"fast_food",brand:"BurgerFi","brand:wikidata":"Q39045496","brand:wikipedia":"en:BurgerFi",cuisine:"burger",name:"BurgerFi"},reference:{key:"cuisine",value:"burger"},matchScore:2,suggestion:true},"amenity/fast_food/Captain D's":{name:"Captain D's",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food","brand:wikidata":"Q5036616"},addTags:{amenity:"fast_food",brand:"Captain D's","brand:wikidata":"Q5036616","brand:wikipedia":"en:Captain D's",cuisine:"seafood",name:"Captain D's"},removeTags:{amenity:"fast_food",brand:"Captain D's","brand:wikidata":"Q5036616","brand:wikipedia":"en:Captain D's",cuisine:"seafood",name:"Captain D's"},matchScore:2,suggestion:true},"amenity/fast_food/burger/Carl's Jr.":{name:"Carl's Jr.",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food",cuisine:"burger","brand:wikidata":"Q1043486"},addTags:{amenity:"fast_food",brand:"Carl's Jr.","brand:wikidata":"Q1043486","brand:wikipedia":"en:Carl's Jr.",cuisine:"burger",name:"Carl's Jr."},removeTags:{amenity:"fast_food",brand:"Carl's Jr.","brand:wikidata":"Q1043486","brand:wikipedia":"en:Carl's Jr.",cuisine:"burger",name:"Carl's Jr."},reference:{key:"cuisine",value:"burger"},matchScore:2,suggestion:true},"amenity/fast_food/burger/Checkers":{name:"Checkers",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food",cuisine:"burger","brand:wikidata":"Q3419341"},addTags:{amenity:"fast_food",brand:"Checkers","brand:wikidata":"Q3419341","brand:wikipedia":"en:Checkers and Rally's",cuisine:"burger",name:"Checkers"},removeTags:{amenity:"fast_food",brand:"Checkers","brand:wikidata":"Q3419341","brand:wikipedia":"en:Checkers and Rally's",cuisine:"burger",name:"Checkers"},reference:{key:"cuisine",value:"burger"},matchScore:2,suggestion:true},"amenity/fast_food/chicken/Chick-fil-A":{name:"Chick-fil-A",icon:"fas-drumstick-bite",geometry:["point","area"],tags:{amenity:"fast_food",cuisine:"chicken","brand:wikidata":"Q491516"},addTags:{amenity:"fast_food",brand:"Chick-fil-A","brand:wikidata":"Q491516","brand:wikipedia":"en:Chick-fil-A",cuisine:"chicken",name:"Chick-fil-A"},removeTags:{amenity:"fast_food",brand:"Chick-fil-A","brand:wikidata":"Q491516","brand:wikipedia":"en:Chick-fil-A",cuisine:"chicken",name:"Chick-fil-A"},reference:{key:"cuisine",value:"chicken"},matchScore:2,suggestion:true},"amenity/fast_food/chicken/Chicken Express":{name:"Chicken Express",icon:"fas-drumstick-bite",geometry:["point","area"],tags:{amenity:"fast_food",cuisine:"chicken","brand:wikidata":"Q5096235"},addTags:{amenity:"fast_food",brand:"Chicken Express","brand:wikidata":"Q5096235","brand:wikipedia":"en:Chicken Express",cuisine:"chicken",name:"Chicken Express"},removeTags:{amenity:"fast_food",brand:"Chicken Express","brand:wikidata":"Q5096235","brand:wikipedia":"en:Chicken Express",cuisine:"chicken",name:"Chicken Express"},reference:{key:"cuisine",value:"chicken"},matchScore:2,suggestion:true},"amenity/fast_food/Chipotle":{name:"Chipotle",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food","brand:wikidata":"Q465751"},addTags:{amenity:"fast_food",brand:"Chipotle","brand:wikidata":"Q465751","brand:wikipedia":"en:Chipotle Mexican Grill",cuisine:"mexican",name:"Chipotle"},removeTags:{amenity:"fast_food",brand:"Chipotle","brand:wikidata":"Q465751","brand:wikipedia":"en:Chipotle Mexican Grill",cuisine:"mexican",name:"Chipotle"},matchScore:2,suggestion:true},"amenity/fast_food/Chowking":{name:"Chowking",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food","brand:wikidata":"Q1076816"},addTags:{amenity:"fast_food",brand:"Chowking","brand:wikidata":"Q1076816","brand:wikipedia":"en:Chowking",cuisine:"asian",name:"Chowking"},removeTags:{amenity:"fast_food",brand:"Chowking","brand:wikidata":"Q1076816","brand:wikipedia":"en:Chowking",cuisine:"asian",name:"Chowking"},matchScore:2,suggestion:true},"amenity/fast_food/chicken/Church's Chicken":{name:"Church's Chicken",icon:"fas-drumstick-bite",geometry:["point","area"],tags:{amenity:"fast_food",cuisine:"chicken","brand:wikidata":"Q1089932"},addTags:{amenity:"fast_food",brand:"Church's Chicken","brand:wikidata":"Q1089932","brand:wikipedia":"en:Church's Chicken",cuisine:"chicken",name:"Church's Chicken"},removeTags:{amenity:"fast_food",brand:"Church's Chicken","brand:wikidata":"Q1089932","brand:wikipedia":"en:Church's Chicken",cuisine:"chicken",name:"Church's Chicken"},reference:{key:"cuisine",value:"chicken"},matchScore:2,suggestion:true},"amenity/fast_food/CoCo壱番屋":{name:"CoCo壱番屋",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food","brand:wikidata":"Q5986105"},addTags:{amenity:"fast_food",brand:"CoCo壱番屋","brand:en":"Ichibanya","brand:wikidata":"Q5986105","brand:wikipedia":"en:Ichibanya",cuisine:"japanese",name:"CoCo壱番屋","name:en":"Ichibanya"},removeTags:{amenity:"fast_food",brand:"CoCo壱番屋","brand:en":"Ichibanya","brand:wikidata":"Q5986105","brand:wikipedia":"en:Ichibanya",cuisine:"japanese",name:"CoCo壱番屋","name:en":"Ichibanya"},matchScore:2,suggestion:true},"amenity/fast_food/Cook Out":{name:"Cook Out",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food","brand:wikidata":"Q5166992"},addTags:{amenity:"fast_food",brand:"Cook Out","brand:wikidata":"Q5166992","brand:wikipedia":"en:Cook Out (restaurant)",cuisine:"american",name:"Cook Out"},removeTags:{amenity:"fast_food",brand:"Cook Out","brand:wikidata":"Q5166992","brand:wikipedia":"en:Cook Out (restaurant)",cuisine:"american",name:"Cook Out"},matchScore:2,suggestion:true},"amenity/fast_food/Culver's":{name:"Culver's",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food","brand:wikidata":"Q1143589"},addTags:{amenity:"fast_food",brand:"Culver's","brand:wikidata":"Q1143589","brand:wikipedia":"en:Culver's",name:"Culver's"},removeTags:{amenity:"fast_food",brand:"Culver's","brand:wikidata":"Q1143589","brand:wikipedia":"en:Culver's",name:"Culver's"},matchScore:2,suggestion:true},"amenity/fast_food/Dairy Queen":{name:"Dairy Queen",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food","brand:wikidata":"Q1141226"},addTags:{amenity:"fast_food",brand:"Dairy Queen","brand:wikidata":"Q1141226","brand:wikipedia":"en:Dairy Queen",cuisine:"ice_cream",name:"Dairy Queen"},removeTags:{amenity:"fast_food",brand:"Dairy Queen","brand:wikidata":"Q1141226","brand:wikipedia":"en:Dairy Queen",cuisine:"ice_cream",name:"Dairy Queen"},matchScore:2,suggestion:true},"amenity/fast_food/Daylight Donuts":{name:"Daylight Donuts",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food","brand:wikidata":"Q48970508"},addTags:{amenity:"fast_food",brand:"Daylight Donuts","brand:wikidata":"Q48970508","brand:wikipedia":"en:Daylight Donuts",cuisine:"donut",name:"Daylight Donuts"},removeTags:{amenity:"fast_food",brand:"Daylight Donuts","brand:wikidata":"Q48970508","brand:wikipedia":"en:Daylight Donuts",cuisine:"donut",name:"Daylight Donuts"},matchScore:2,suggestion:true},"amenity/fast_food/Del Taco":{name:"Del Taco",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food","brand:wikidata":"Q1183818"},addTags:{amenity:"fast_food",brand:"Del Taco","brand:wikidata":"Q1183818","brand:wikipedia":"en:Del Taco",cuisine:"mexican",name:"Del Taco"},removeTags:{amenity:"fast_food",brand:"Del Taco","brand:wikidata":"Q1183818","brand:wikipedia":"en:Del Taco",cuisine:"mexican",name:"Del Taco"},matchScore:2,suggestion:true},"amenity/fast_food/pizza/Domino's Pizza":{name:"Domino's Pizza",icon:"maki-restaurant-pizza",geometry:["point","area"],tags:{amenity:"fast_food",cuisine:"pizza","brand:wikidata":"Q839466"},addTags:{amenity:"fast_food",brand:"Domino's Pizza","brand:wikidata":"Q839466","brand:wikipedia":"en:Domino's Pizza",cuisine:"pizza",name:"Domino's Pizza"},removeTags:{amenity:"fast_food",brand:"Domino's Pizza","brand:wikidata":"Q839466","brand:wikipedia":"en:Domino's Pizza",cuisine:"pizza",name:"Domino's Pizza"},reference:{key:"cuisine",value:"pizza"},matchScore:2,suggestion:true},"amenity/fast_food/Dunkin' Donuts":{name:"Dunkin' Donuts",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food","brand:wikidata":"Q847743"},addTags:{amenity:"fast_food",brand:"Dunkin' Donuts","brand:wikidata":"Q847743","brand:wikipedia":"en:Dunkin' Donuts",cuisine:"donut",name:"Dunkin' Donuts"},removeTags:{amenity:"fast_food",brand:"Dunkin' Donuts","brand:wikidata":"Q847743","brand:wikipedia":"en:Dunkin' Donuts",cuisine:"donut",name:"Dunkin' Donuts"},matchScore:2,suggestion:true},"amenity/fast_food/Einstein Bros. Bagels":{name:"Einstein Bros. Bagels",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food","brand:wikidata":"Q5349788"},addTags:{amenity:"fast_food",brand:"Einstein Bros. Bagels","brand:wikidata":"Q5349788","brand:wikipedia":"en:Einstein Bros. Bagels",cuisine:"bagel",name:"Einstein Bros. Bagels"},removeTags:{amenity:"fast_food",brand:"Einstein Bros. Bagels","brand:wikidata":"Q5349788","brand:wikipedia":"en:Einstein Bros. Bagels",cuisine:"bagel",name:"Einstein Bros. Bagels"},matchScore:2,suggestion:true},"amenity/fast_food/El Pollo Loco":{name:"El Pollo Loco",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food","brand:wikidata":"Q2353849"},addTags:{amenity:"fast_food",brand:"El Pollo Loco","brand:wikidata":"Q2353849","brand:wikipedia":"en:El Pollo Loco",cuisine:"mexican",name:"El Pollo Loco"},removeTags:{amenity:"fast_food",brand:"El Pollo Loco","brand:wikidata":"Q2353849","brand:wikipedia":"en:El Pollo Loco",cuisine:"mexican",name:"El Pollo Loco"},matchScore:2,suggestion:true},"amenity/fast_food/Extreme Pita":{name:"Extreme Pita",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food","brand:wikidata":"Q5422367"},addTags:{amenity:"fast_food",brand:"Extreme Pita","brand:wikidata":"Q5422367","brand:wikipedia":"en:Extreme Pita",cuisine:"pita",name:"Extreme Pita"},removeTags:{amenity:"fast_food",brand:"Extreme Pita","brand:wikidata":"Q5422367","brand:wikipedia":"en:Extreme Pita",cuisine:"pita",name:"Extreme Pita"},matchScore:2,suggestion:true},"amenity/fast_food/Fazoli's":{name:"Fazoli's",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food","brand:wikidata":"Q1399195"},addTags:{amenity:"fast_food",brand:"Fazoli's","brand:wikidata":"Q1399195","brand:wikipedia":"en:Fazoli's",cuisine:"italian",name:"Fazoli's"},removeTags:{amenity:"fast_food",brand:"Fazoli's","brand:wikidata":"Q1399195","brand:wikipedia":"en:Fazoli's",cuisine:"italian",name:"Fazoli's"},matchScore:2,suggestion:true},"amenity/fast_food/sandwich/Firehouse Subs":{name:"Firehouse Subs",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"fast_food",cuisine:"sandwich","brand:wikidata":"Q5451873"},addTags:{amenity:"fast_food",brand:"Firehouse Subs","brand:wikidata":"Q5451873","brand:wikipedia":"en:Firehouse Subs",cuisine:"sandwich",name:"Firehouse Subs"},removeTags:{amenity:"fast_food",brand:"Firehouse Subs","brand:wikidata":"Q5451873","brand:wikipedia":"en:Firehouse Subs",cuisine:"sandwich",name:"Firehouse Subs"},reference:{key:"cuisine",value:"sandwich"},matchScore:2,suggestion:true},"amenity/fast_food/burger/Five Guys":{name:"Five Guys",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food",cuisine:"burger","brand:wikidata":"Q1131810"},addTags:{amenity:"fast_food",brand:"Five Guys","brand:wikidata":"Q1131810","brand:wikipedia":"en:Five Guys",cuisine:"burger",name:"Five Guys"},removeTags:{amenity:"fast_food",brand:"Five Guys","brand:wikidata":"Q1131810","brand:wikipedia":"en:Five Guys",cuisine:"burger",name:"Five Guys"},reference:{key:"cuisine",value:"burger"},matchScore:2,suggestion:true},"amenity/fast_food/burger/Freddy's":{name:"Freddy's",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food",cuisine:"burger","brand:wikidata":"Q5496837"},addTags:{amenity:"fast_food",brand:"Freddy's","brand:wikidata":"Q5496837","brand:wikipedia":"en:Freddy's Frozen Custard & Steakburgers",cuisine:"burger",name:"Freddy's"},removeTags:{amenity:"fast_food",brand:"Freddy's","brand:wikidata":"Q5496837","brand:wikipedia":"en:Freddy's Frozen Custard & Steakburgers",cuisine:"burger",name:"Freddy's"},reference:{key:"cuisine",value:"burger"},matchScore:2,suggestion:true},"amenity/fast_food/Freebirds":{name:"Freebirds",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food","brand:wikidata":"Q5500367"},addTags:{amenity:"fast_food",brand:"Freebirds","brand:wikidata":"Q5500367","brand:wikipedia":"en:Freebirds World Burrito",cuisine:"mexican",name:"Freebirds"},removeTags:{amenity:"fast_food",brand:"Freebirds","brand:wikidata":"Q5500367","brand:wikipedia":"en:Freebirds World Burrito",cuisine:"mexican",name:"Freebirds"},matchScore:2,suggestion:true},"amenity/fast_food/pizza/Greenwich":{name:"Greenwich",icon:"maki-restaurant-pizza",geometry:["point","area"],tags:{amenity:"fast_food",cuisine:"pizza","brand:wikidata":"Q2691308"},addTags:{amenity:"fast_food",brand:"Greenwich","brand:wikidata":"Q2691308","brand:wikipedia":"en:Greenwich Pizza",cuisine:"pizza",name:"Greenwich"},removeTags:{amenity:"fast_food",brand:"Greenwich","brand:wikidata":"Q2691308","brand:wikipedia":"en:Greenwich Pizza",cuisine:"pizza",name:"Greenwich"},reference:{key:"cuisine",value:"pizza"},matchScore:2,suggestion:true},"amenity/fast_food/Habib's":{name:"Habib's",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food","brand:wikidata":"Q2504930"},addTags:{amenity:"fast_food",brand:"Habib's","brand:wikidata":"Q2504930","brand:wikipedia":"en:Habib's",cuisine:"middle_eastern",name:"Habib's"},removeTags:{amenity:"fast_food",brand:"Habib's","brand:wikidata":"Q2504930","brand:wikipedia":"en:Habib's",cuisine:"middle_eastern",name:"Habib's"},matchScore:2,suggestion:true},"amenity/fast_food/pizza/Hallo Pizza":{name:"Hallo Pizza",icon:"maki-restaurant-pizza",geometry:["point","area"],tags:{amenity:"fast_food",cuisine:"pizza","brand:wikidata":"Q1571798"},addTags:{amenity:"fast_food",brand:"Hallo Pizza","brand:wikidata":"Q1571798","brand:wikipedia":"de:Hallo Pizza",cuisine:"pizza",name:"Hallo Pizza"},removeTags:{amenity:"fast_food",brand:"Hallo Pizza","brand:wikidata":"Q1571798","brand:wikipedia":"de:Hallo Pizza",cuisine:"pizza",name:"Hallo Pizza"},reference:{key:"cuisine",value:"pizza"},matchScore:2,suggestion:true},"amenity/fast_food/burger/Hardee's":{name:"Hardee's",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food",cuisine:"burger","brand:wikidata":"Q1585088"},addTags:{amenity:"fast_food",brand:"Hardee's","brand:wikidata":"Q1585088","brand:wikipedia":"en:Hardee's",cuisine:"burger",name:"Hardee's"},removeTags:{amenity:"fast_food",brand:"Hardee's","brand:wikidata":"Q1585088","brand:wikipedia":"en:Hardee's",cuisine:"burger",name:"Hardee's"},reference:{key:"cuisine",value:"burger"},matchScore:2,suggestion:true},"amenity/fast_food/burger/Harvey's":{name:"Harvey's",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food",cuisine:"burger","brand:wikidata":"Q1466184"},addTags:{amenity:"fast_food",brand:"Harvey's","brand:wikidata":"Q1466184","brand:wikipedia":"en:Harvey's",cuisine:"burger",name:"Harvey's"},removeTags:{amenity:"fast_food",brand:"Harvey's","brand:wikidata":"Q1466184","brand:wikipedia":"en:Harvey's",cuisine:"burger",name:"Harvey's"},reference:{key:"cuisine",value:"burger"},matchScore:2,suggestion:true},"amenity/fast_food/burger/Hesburger":{name:"Hesburger",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food",cuisine:"burger","brand:wikidata":"Q1276832"},addTags:{amenity:"fast_food",brand:"Hesburger","brand:wikidata":"Q1276832","brand:wikipedia":"en:Hesburger",cuisine:"burger",name:"Hesburger"},removeTags:{amenity:"fast_food",brand:"Hesburger","brand:wikidata":"Q1276832","brand:wikipedia":"en:Hesburger",cuisine:"burger",name:"Hesburger"},reference:{key:"cuisine",value:"burger"},matchScore:2,suggestion:true},"amenity/fast_food/burger/Hungry Jacks":{name:"Hungry Jacks",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food",cuisine:"burger","brand:wikidata":"Q3036373"},addTags:{amenity:"fast_food",brand:"Hungry Jacks","brand:wikidata":"Q3036373","brand:wikipedia":"en:Hungry Jack's",cuisine:"burger",name:"Hungry Jacks"},removeTags:{amenity:"fast_food",brand:"Hungry Jacks","brand:wikidata":"Q3036373","brand:wikipedia":"en:Hungry Jack's",cuisine:"burger",name:"Hungry Jacks"},reference:{key:"cuisine",value:"burger"},matchScore:2,suggestion:true},"amenity/fast_food/burger/In-N-Out Burger":{name:"In-N-Out Burger",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food",cuisine:"burger","brand:wikidata":"Q1205312"},addTags:{amenity:"fast_food",brand:"In-N-Out Burger","brand:wikidata":"Q1205312","brand:wikipedia":"en:In-N-Out Burger",cuisine:"burger",name:"In-N-Out Burger"},removeTags:{amenity:"fast_food",brand:"In-N-Out Burger","brand:wikidata":"Q1205312","brand:wikipedia":"en:In-N-Out Burger",cuisine:"burger",name:"In-N-Out Burger"},reference:{key:"cuisine",value:"burger"},matchScore:2,suggestion:true},"amenity/fast_food/burger/Jack in the Box":{name:"Jack in the Box",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food",cuisine:"burger","brand:wikidata":"Q1538507"},addTags:{amenity:"fast_food",brand:"Jack in the Box","brand:wikidata":"Q1538507","brand:wikipedia":"en:Jack in the Box",cuisine:"burger",name:"Jack in the Box"},removeTags:{amenity:"fast_food",brand:"Jack in the Box","brand:wikidata":"Q1538507","brand:wikipedia":"en:Jack in the Box",cuisine:"burger",name:"Jack in the Box"},reference:{key:"cuisine",value:"burger"},matchScore:2,suggestion:true},"amenity/fast_food/Jamba Juice":{name:"Jamba Juice",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food","brand:wikidata":"Q3088784"},addTags:{amenity:"fast_food",brand:"Jamba Juice","brand:wikidata":"Q3088784","brand:wikipedia":"en:Jamba Juice",cuisine:"juice",name:"Jamba Juice"},removeTags:{amenity:"fast_food",brand:"Jamba Juice","brand:wikidata":"Q3088784","brand:wikipedia":"en:Jamba Juice",cuisine:"juice",name:"Jamba Juice"},matchScore:2,suggestion:true},"amenity/fast_food/sandwich/Jersey Mike's Subs":{name:"Jersey Mike's Subs",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"fast_food",cuisine:"sandwich","brand:wikidata":"Q6184897"},addTags:{amenity:"fast_food",brand:"Jersey Mike's Subs","brand:wikidata":"Q6184897","brand:wikipedia":"en:Jersey Mike's Subs",cuisine:"sandwich",name:"Jersey Mike's Subs"},removeTags:{amenity:"fast_food",brand:"Jersey Mike's Subs","brand:wikidata":"Q6184897","brand:wikipedia":"en:Jersey Mike's Subs",cuisine:"sandwich",name:"Jersey Mike's Subs"},reference:{key:"cuisine",value:"sandwich"},matchScore:2,suggestion:true},"amenity/fast_food/sandwich/Jimmy John's":{name:"Jimmy John's",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"fast_food",cuisine:"sandwich","brand:wikidata":"Q1689380"},addTags:{amenity:"fast_food",brand:"Jimmy John's","brand:wikidata":"Q1689380","brand:wikipedia":"en:Jimmy John's",cuisine:"sandwich",name:"Jimmy John's"},removeTags:{amenity:"fast_food",brand:"Jimmy John's","brand:wikidata":"Q1689380","brand:wikipedia":"en:Jimmy John's",cuisine:"sandwich",name:"Jimmy John's"},reference:{key:"cuisine",value:"sandwich"},matchScore:2,suggestion:true},"amenity/fast_food/burger/Jollibee":{name:"Jollibee",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food",cuisine:"burger","brand:wikidata":"Q37614"},addTags:{amenity:"fast_food",brand:"Jollibee","brand:wikidata":"Q37614","brand:wikipedia":"en:Jollibee",cuisine:"burger",name:"Jollibee"},removeTags:{amenity:"fast_food",brand:"Jollibee","brand:wikidata":"Q37614","brand:wikipedia":"en:Jollibee",cuisine:"burger",name:"Jollibee"},reference:{key:"cuisine",value:"burger"},matchScore:2,suggestion:true},"amenity/fast_food/chicken/KFC":{name:"KFC",icon:"fas-drumstick-bite",geometry:["point","area"],tags:{amenity:"fast_food",cuisine:"chicken","brand:wikidata":"Q524757"},addTags:{amenity:"fast_food",brand:"KFC","brand:wikidata":"Q524757","brand:wikipedia":"en:KFC",cuisine:"chicken",name:"KFC"},removeTags:{amenity:"fast_food",brand:"KFC","brand:wikidata":"Q524757","brand:wikipedia":"en:KFC",cuisine:"chicken",name:"KFC"},reference:{key:"cuisine",value:"chicken"},matchScore:2,suggestion:true},"amenity/fast_food/burger/Kochlöffel":{name:"Kochlöffel",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food",cuisine:"burger","brand:wikidata":"Q315539"},addTags:{amenity:"fast_food",brand:"Kochlöffel","brand:wikidata":"Q315539","brand:wikipedia":"en:Kochlöffel",cuisine:"burger",name:"Kochlöffel"},removeTags:{amenity:"fast_food",brand:"Kochlöffel","brand:wikidata":"Q315539","brand:wikipedia":"en:Kochlöffel",cuisine:"burger",name:"Kochlöffel"},reference:{key:"cuisine",value:"burger"},matchScore:2,suggestion:true},"amenity/fast_food/pizza/Kotipizza":{name:"Kotipizza",icon:"maki-restaurant-pizza",geometry:["point","area"],tags:{amenity:"fast_food",cuisine:"pizza","brand:wikidata":"Q1628625"},addTags:{amenity:"fast_food",brand:"Kotipizza","brand:wikidata":"Q1628625","brand:wikipedia":"en:Kotipizza",cuisine:"pizza",name:"Kotipizza"},removeTags:{amenity:"fast_food",brand:"Kotipizza","brand:wikidata":"Q1628625","brand:wikipedia":"en:Kotipizza",cuisine:"pizza",name:"Kotipizza"},reference:{key:"cuisine",value:"pizza"},matchScore:2,suggestion:true},"amenity/fast_food/Krispy Kreme":{name:"Krispy Kreme",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food","brand:wikidata":"Q1192805"},addTags:{amenity:"fast_food",brand:"Krispy Kreme","brand:wikidata":"Q1192805","brand:wikipedia":"en:Krispy Kreme",cuisine:"donut",name:"Krispy Kreme"},removeTags:{amenity:"fast_food",brand:"Krispy Kreme","brand:wikidata":"Q1192805","brand:wikipedia":"en:Krispy Kreme",cuisine:"donut",name:"Krispy Kreme"},matchScore:2,suggestion:true},"amenity/fast_food/burger/Krystal":{name:"Krystal",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food",cuisine:"burger","brand:wikidata":"Q472195"},addTags:{amenity:"fast_food",brand:"Krystal","brand:wikidata":"Q472195","brand:wikipedia":"en:Krystal (restaurant)",cuisine:"burger",name:"Krystal"},removeTags:{amenity:"fast_food",brand:"Krystal","brand:wikidata":"Q472195","brand:wikipedia":"en:Krystal (restaurant)",cuisine:"burger",name:"Krystal"},reference:{key:"cuisine",value:"burger"},matchScore:2,suggestion:true},"amenity/fast_food/pizza/Little Caesars":{name:"Little Caesars",icon:"maki-restaurant-pizza",geometry:["point","area"],tags:{amenity:"fast_food",cuisine:"pizza","brand:wikidata":"Q1393809"},addTags:{amenity:"fast_food",brand:"Little Caesars","brand:wikidata":"Q1393809","brand:wikipedia":"en:Little Caesars",cuisine:"pizza",name:"Little Caesars"},removeTags:{amenity:"fast_food",brand:"Little Caesars","brand:wikidata":"Q1393809","brand:wikipedia":"en:Little Caesars",cuisine:"pizza",name:"Little Caesars"},reference:{key:"cuisine",value:"pizza"},matchScore:2,suggestion:true},"amenity/fast_food/Long John Silver's":{name:"Long John Silver's",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food","brand:wikidata":"Q1535221"},addTags:{amenity:"fast_food",brand:"Long John Silver's","brand:wikidata":"Q1535221","brand:wikipedia":"en:Long John Silver's",cuisine:"seafood",name:"Long John Silver's"},removeTags:{amenity:"fast_food",brand:"Long John Silver's","brand:wikidata":"Q1535221","brand:wikipedia":"en:Long John Silver's",cuisine:"seafood",name:"Long John Silver's"},matchScore:2,suggestion:true},"amenity/fast_food/burger/Lotteria":{name:"Lotteria",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food",cuisine:"burger","brand:wikidata":"Q249525"},addTags:{amenity:"fast_food",brand:"Lotteria","brand:wikidata":"Q249525","brand:wikipedia":"en:Lotteria",cuisine:"burger",name:"Lotteria"},removeTags:{amenity:"fast_food",brand:"Lotteria","brand:wikidata":"Q249525","brand:wikipedia":"en:Lotteria",cuisine:"burger",name:"Lotteria"},reference:{key:"cuisine",value:"burger"},matchScore:2,suggestion:true},"amenity/fast_food/Mang Inasal":{name:"Mang Inasal",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food","brand:wikidata":"Q6748573"},addTags:{amenity:"fast_food",brand:"Mang Inasal","brand:wikidata":"Q6748573","brand:wikipedia":"en:Mang Inasal",cuisine:"barbecue",name:"Mang Inasal"},removeTags:{amenity:"fast_food",brand:"Mang Inasal","brand:wikidata":"Q6748573","brand:wikipedia":"en:Mang Inasal",cuisine:"barbecue",name:"Mang Inasal"},matchScore:2,suggestion:true},"amenity/fast_food/burger/Max":{name:"Max",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food",cuisine:"burger","brand:wikidata":"Q1912172"},addTags:{amenity:"fast_food",brand:"Max","brand:wikidata":"Q1912172","brand:wikipedia":"en:Max Hamburgers",cuisine:"burger",name:"Max"},removeTags:{amenity:"fast_food",brand:"Max","brand:wikidata":"Q1912172","brand:wikipedia":"en:Max Hamburgers",cuisine:"burger",name:"Max"},reference:{key:"cuisine",value:"burger"},matchScore:2,suggestion:true},"amenity/fast_food/burger/McDonald's":{name:"McDonald's",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food",cuisine:"burger","brand:wikidata":"Q38076"},addTags:{amenity:"fast_food",brand:"McDonald's","brand:wikidata":"Q38076","brand:wikipedia":"en:McDonald's",cuisine:"burger",name:"McDonald's"},removeTags:{amenity:"fast_food",brand:"McDonald's","brand:wikidata":"Q38076","brand:wikipedia":"en:McDonald's",cuisine:"burger",name:"McDonald's"},reference:{key:"cuisine",value:"burger"},matchScore:2,suggestion:true},"amenity/fast_food/Moe's Southwest Grill":{name:"Moe's Southwest Grill",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food","brand:wikidata":"Q6889938"},addTags:{amenity:"fast_food",brand:"Moe's Southwest Grill","brand:wikidata":"Q6889938","brand:wikipedia":"en:Moe's Southwest Grill",cuisine:"mexican",name:"Moe's Southwest Grill"},removeTags:{amenity:"fast_food",brand:"Moe's Southwest Grill","brand:wikidata":"Q6889938","brand:wikipedia":"en:Moe's Southwest Grill",cuisine:"mexican",name:"Moe's Southwest Grill"},matchScore:2,suggestion:true},"amenity/fast_food/sandwich/Mr. Sub":{name:"Mr. Sub",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"fast_food",cuisine:"sandwich","brand:wikidata":"Q6929225"},addTags:{amenity:"fast_food",brand:"Mr. Sub","brand:wikidata":"Q6929225","brand:wikipedia":"en:Mr. Sub",cuisine:"sandwich",name:"Mr. Sub"},removeTags:{amenity:"fast_food",brand:"Mr. Sub","brand:wikidata":"Q6929225","brand:wikipedia":"en:Mr. Sub",cuisine:"sandwich",name:"Mr. Sub"},reference:{key:"cuisine",value:"sandwich"},matchScore:2,suggestion:true},"amenity/fast_food/pizza/New York Pizza":{name:"New York Pizza",icon:"maki-restaurant-pizza",geometry:["point","area"],tags:{amenity:"fast_food",cuisine:"pizza","brand:wikidata":"Q2639128"},addTags:{amenity:"fast_food",brand:"New York Pizza","brand:wikidata":"Q2639128","brand:wikipedia":"nl:New York Pizza",cuisine:"pizza",name:"New York Pizza"},removeTags:{amenity:"fast_food",brand:"New York Pizza","brand:wikidata":"Q2639128","brand:wikipedia":"nl:New York Pizza",cuisine:"pizza",name:"New York Pizza"},reference:{key:"cuisine",value:"pizza"},matchScore:2,suggestion:true},"amenity/fast_food/Nordsee":{name:"Nordsee",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food","brand:wikidata":"Q74866"},addTags:{amenity:"fast_food",brand:"Nordsee","brand:wikidata":"Q74866","brand:wikipedia":"en:Nordsee",cuisine:"seafood",name:"Nordsee"},removeTags:{amenity:"fast_food",brand:"Nordsee","brand:wikidata":"Q74866","brand:wikipedia":"en:Nordsee",cuisine:"seafood",name:"Nordsee"},matchScore:2,suggestion:true},"amenity/fast_food/O'Tacos":{name:"O'Tacos",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food","brand:wikidata":"Q28494040"},addTags:{amenity:"fast_food",brand:"O'Tacos","brand:wikidata":"Q28494040","brand:wikipedia":"en:O'Tacos",cuisine:"mexican",name:"O'Tacos"},removeTags:{amenity:"fast_food",brand:"O'Tacos","brand:wikidata":"Q28494040","brand:wikipedia":"en:O'Tacos",cuisine:"mexican",name:"O'Tacos"},matchScore:2,suggestion:true},"amenity/fast_food/burger/Pal's":{name:"Pal's",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food",cuisine:"burger","brand:wikidata":"Q7126094"},addTags:{amenity:"fast_food",brand:"Pal's","brand:wikidata":"Q7126094","brand:wikipedia":"en:Pal's",cuisine:"burger",name:"Pal's"},removeTags:{amenity:"fast_food",brand:"Pal's","brand:wikidata":"Q7126094","brand:wikipedia":"en:Pal's",cuisine:"burger",name:"Pal's"},reference:{key:"cuisine",value:"burger"},matchScore:2,suggestion:true},"amenity/fast_food/pizza/Panago":{name:"Panago",icon:"maki-restaurant-pizza",geometry:["point","area"],tags:{amenity:"fast_food",cuisine:"pizza","brand:wikidata":"Q17111672"},addTags:{amenity:"fast_food",brand:"Panago","brand:wikidata":"Q17111672","brand:wikipedia":"en:Panago",cuisine:"pizza",name:"Panago"},removeTags:{amenity:"fast_food",brand:"Panago","brand:wikidata":"Q17111672","brand:wikipedia":"en:Panago",cuisine:"pizza",name:"Panago"},reference:{key:"cuisine",value:"pizza"},matchScore:2,suggestion:true},"amenity/fast_food/Panda Express":{name:"Panda Express",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food","brand:wikidata":"Q1358690"},addTags:{amenity:"fast_food",brand:"Panda Express","brand:wikidata":"Q1358690","brand:wikipedia":"en:Panda Express",cuisine:"chinese",name:"Panda Express"},removeTags:{amenity:"fast_food",brand:"Panda Express","brand:wikidata":"Q1358690","brand:wikipedia":"en:Panda Express",cuisine:"chinese",name:"Panda Express"},matchScore:2,suggestion:true},"amenity/fast_food/sandwich/Panera Bread":{name:"Panera Bread",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"fast_food",cuisine:"sandwich","brand:wikidata":"Q7130852"},addTags:{amenity:"fast_food",brand:"Panera Bread","brand:wikidata":"Q7130852","brand:wikipedia":"en:Panera Bread",cuisine:"sandwich",name:"Panera Bread"},removeTags:{amenity:"fast_food",brand:"Panera Bread","brand:wikidata":"Q7130852","brand:wikipedia":"en:Panera Bread",cuisine:"sandwich",name:"Panera Bread"},reference:{key:"cuisine",value:"sandwich"},matchScore:2,suggestion:true},"amenity/fast_food/pizza/Papa John's":{name:"Papa John's",icon:"maki-restaurant-pizza",geometry:["point","area"],tags:{amenity:"fast_food",cuisine:"pizza","brand:wikidata":"Q2759586"},addTags:{amenity:"fast_food",brand:"Papa John's","brand:wikidata":"Q2759586","brand:wikipedia":"en:Papa John's Pizza",cuisine:"pizza",name:"Papa John's"},removeTags:{amenity:"fast_food",brand:"Papa John's","brand:wikidata":"Q2759586","brand:wikipedia":"en:Papa John's Pizza",cuisine:"pizza",name:"Papa John's"},reference:{key:"cuisine",value:"pizza"},matchScore:2,suggestion:true},"amenity/fast_food/pizza/Papa Murphy's":{name:"Papa Murphy's",icon:"maki-restaurant-pizza",geometry:["point","area"],tags:{amenity:"fast_food",cuisine:"pizza","brand:wikidata":"Q7132349"},addTags:{amenity:"fast_food",brand:"Papa Murphy's","brand:wikidata":"Q7132349","brand:wikipedia":"en:Papa Murphy's",cuisine:"pizza",name:"Papa Murphy's"},removeTags:{amenity:"fast_food",brand:"Papa Murphy's","brand:wikidata":"Q7132349","brand:wikipedia":"en:Papa Murphy's",cuisine:"pizza",name:"Papa Murphy's"},reference:{key:"cuisine",value:"pizza"},matchScore:2,suggestion:true},"amenity/fast_food/Philly Pretzel Factory":{name:"Philly Pretzel Factory",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food","brand:wikidata":"Q60097339"},addTags:{amenity:"fast_food",brand:"Philly Pretzel Factory","brand:wikidata":"Q60097339",cuisine:"pretzel",name:"Philly Pretzel Factory"},removeTags:{amenity:"fast_food",brand:"Philly Pretzel Factory","brand:wikidata":"Q60097339",cuisine:"pretzel",name:"Philly Pretzel Factory"},matchScore:2,suggestion:true},"amenity/fast_food/Pita Pit":{name:"Pita Pit",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food","brand:wikidata":"Q7757289"},addTags:{amenity:"fast_food",brand:"Pita Pit","brand:wikidata":"Q7757289","brand:wikipedia":"en:Pita Pit",cuisine:"pita",name:"Pita Pit"},removeTags:{amenity:"fast_food",brand:"Pita Pit","brand:wikidata":"Q7757289","brand:wikipedia":"en:Pita Pit",cuisine:"pita",name:"Pita Pit"},matchScore:2,suggestion:true},"amenity/fast_food/pizza/Pizza Hut Delivery":{name:"Pizza Hut Delivery",icon:"maki-restaurant-pizza",geometry:["point","area"],tags:{amenity:"fast_food",cuisine:"pizza","brand:wikidata":"Q191615"},addTags:{amenity:"fast_food",brand:"Pizza Hut","brand:wikidata":"Q191615","brand:wikipedia":"en:Pizza Hut",cuisine:"pizza",name:"Pizza Hut Delivery"},removeTags:{amenity:"fast_food",brand:"Pizza Hut","brand:wikidata":"Q191615","brand:wikipedia":"en:Pizza Hut",cuisine:"pizza",name:"Pizza Hut Delivery"},reference:{key:"cuisine",value:"pizza"},matchScore:2,suggestion:true},"amenity/fast_food/pizza/Pizza Hut Express":{name:"Pizza Hut Express",icon:"maki-restaurant-pizza",geometry:["point","area"],tags:{amenity:"fast_food",cuisine:"pizza","brand:wikidata":"Q191615"},addTags:{amenity:"fast_food",brand:"Pizza Hut","brand:wikipedia":"en:Pizza Hut","brand:wikidata":"Q191615",cuisine:"pizza",name:"Pizza Hut Express"},removeTags:{amenity:"fast_food",brand:"Pizza Hut","brand:wikipedia":"en:Pizza Hut","brand:wikidata":"Q191615",cuisine:"pizza",name:"Pizza Hut Express"},reference:{key:"cuisine",value:"pizza"},matchScore:2,suggestion:true},"amenity/fast_food/pizza/Pizza Nova":{name:"Pizza Nova",icon:"maki-restaurant-pizza",geometry:["point","area"],tags:{amenity:"fast_food",cuisine:"pizza","brand:wikidata":"Q7199971"},addTags:{amenity:"fast_food",brand:"Pizza Nova","brand:wikidata":"Q7199971","brand:wikipedia":"en:Pizza Nova",cuisine:"pizza",name:"Pizza Nova"},removeTags:{amenity:"fast_food",brand:"Pizza Nova","brand:wikidata":"Q7199971","brand:wikipedia":"en:Pizza Nova",cuisine:"pizza",name:"Pizza Nova"},reference:{key:"cuisine",value:"pizza"},matchScore:2,suggestion:true},"amenity/fast_food/pizza/Pizza Pizza":{name:"Pizza Pizza",icon:"maki-restaurant-pizza",geometry:["point","area"],tags:{amenity:"fast_food",cuisine:"pizza","brand:wikidata":"Q1194143"},addTags:{amenity:"fast_food",brand:"Pizza Pizza","brand:wikidata":"Q1194143","brand:wikipedia":"en:Pizza Pizza",cuisine:"pizza",name:"Pizza Pizza"},removeTags:{amenity:"fast_food",brand:"Pizza Pizza","brand:wikidata":"Q1194143","brand:wikipedia":"en:Pizza Pizza",cuisine:"pizza",name:"Pizza Pizza"},reference:{key:"cuisine",value:"pizza"},matchScore:2,suggestion:true},"amenity/fast_food/chicken/Pollo Campero":{name:"Pollo Campero",icon:"fas-drumstick-bite",geometry:["point","area"],tags:{amenity:"fast_food",cuisine:"chicken","brand:wikidata":"Q942741"},addTags:{amenity:"fast_food",brand:"Pollo Campero","brand:wikidata":"Q942741","brand:wikipedia":"en:Pollo Campero",cuisine:"chicken",name:"Pollo Campero"},removeTags:{amenity:"fast_food",brand:"Pollo Campero","brand:wikidata":"Q942741","brand:wikipedia":"en:Pollo Campero",cuisine:"chicken",name:"Pollo Campero"},reference:{key:"cuisine",value:"chicken"},matchScore:2,suggestion:true},"amenity/fast_food/chicken/Popeye's":{name:"Popeye's",icon:"fas-drumstick-bite",geometry:["point","area"],tags:{amenity:"fast_food",cuisine:"chicken","brand:wikidata":"Q1330910"},addTags:{amenity:"fast_food",brand:"Popeye's","brand:wikidata":"Q1330910","brand:wikipedia":"en:Popeyes",cuisine:"chicken",name:"Popeye's"},removeTags:{amenity:"fast_food",brand:"Popeye's","brand:wikidata":"Q1330910","brand:wikipedia":"en:Popeyes",cuisine:"chicken",name:"Popeye's"},reference:{key:"cuisine",value:"chicken"},matchScore:2,suggestion:true},"amenity/fast_food/sandwich/Potbelly":{name:"Potbelly",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"fast_food",cuisine:"sandwich","brand:wikidata":"Q7234777"},addTags:{amenity:"fast_food",brand:"Potbelly","brand:wikidata":"Q7234777","brand:wikipedia":"en:Potbelly Sandwich Works",cuisine:"sandwich",name:"Potbelly"},removeTags:{amenity:"fast_food",brand:"Potbelly","brand:wikidata":"Q7234777","brand:wikipedia":"en:Potbelly Sandwich Works",cuisine:"sandwich",name:"Potbelly"},reference:{key:"cuisine",value:"sandwich"},matchScore:2,suggestion:true},"amenity/fast_food/Qdoba":{name:"Qdoba",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food","brand:wikidata":"Q1363885"},addTags:{amenity:"fast_food",brand:"Qdoba","brand:wikidata":"Q1363885","brand:wikipedia":"en:Qdoba",cuisine:"mexican",name:"Qdoba"},removeTags:{amenity:"fast_food",brand:"Qdoba","brand:wikidata":"Q1363885","brand:wikipedia":"en:Qdoba",cuisine:"mexican",name:"Qdoba"},matchScore:2,suggestion:true},"amenity/fast_food/burger/Quick":{name:"Quick",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food",cuisine:"burger","brand:wikidata":"Q286494"},addTags:{amenity:"fast_food",brand:"Quick","brand:wikidata":"Q286494","brand:wikipedia":"en:Quick (restaurant)",cuisine:"burger",name:"Quick"},removeTags:{amenity:"fast_food",brand:"Quick","brand:wikidata":"Q286494","brand:wikipedia":"en:Quick (restaurant)",cuisine:"burger",name:"Quick"},reference:{key:"cuisine",value:"burger"},matchScore:2,suggestion:true},"amenity/fast_food/sandwich/Quiznos":{name:"Quiznos",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"fast_food",cuisine:"sandwich","brand:wikidata":"Q1936229"},addTags:{amenity:"fast_food",brand:"Quiznos","brand:wikidata":"Q1936229","brand:wikipedia":"en:Quiznos",cuisine:"sandwich",name:"Quiznos"},removeTags:{amenity:"fast_food",brand:"Quiznos","brand:wikidata":"Q1936229","brand:wikipedia":"en:Quiznos",cuisine:"sandwich",name:"Quiznos"},reference:{key:"cuisine",value:"sandwich"},matchScore:2,suggestion:true},"amenity/fast_food/chicken/Raising Cane's":{name:"Raising Cane's",icon:"fas-drumstick-bite",geometry:["point","area"],tags:{amenity:"fast_food",cuisine:"chicken","brand:wikidata":"Q7285144"},addTags:{amenity:"fast_food",brand:"Raising Cane's","brand:wikidata":"Q7285144","brand:wikipedia":"en:Raising Cane's Chicken Fingers",cuisine:"chicken",name:"Raising Cane's"},removeTags:{amenity:"fast_food",brand:"Raising Cane's","brand:wikidata":"Q7285144","brand:wikipedia":"en:Raising Cane's Chicken Fingers",cuisine:"chicken",name:"Raising Cane's"},reference:{key:"cuisine",value:"chicken"},matchScore:2,suggestion:true},"amenity/fast_food/burger/Rally's":{name:"Rally's",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food",cuisine:"burger","brand:wikidata":"Q3419341"},addTags:{amenity:"fast_food",brand:"Rally's","brand:wikidata":"Q3419341","brand:wikipedia":"en:Checkers and Rally's",cuisine:"burger",name:"Rally's"},removeTags:{amenity:"fast_food",brand:"Rally's","brand:wikidata":"Q3419341","brand:wikipedia":"en:Checkers and Rally's",cuisine:"burger",name:"Rally's"},reference:{key:"cuisine",value:"burger"},matchScore:2,suggestion:true},"amenity/fast_food/chicken/Red Rooster":{name:"Red Rooster",icon:"fas-drumstick-bite",geometry:["point","area"],tags:{amenity:"fast_food",cuisine:"chicken","brand:wikidata":"Q376466"},addTags:{amenity:"fast_food",brand:"Red Rooster","brand:wikidata":"Q376466","brand:wikipedia":"en:Red Rooster",cuisine:"chicken",name:"Red Rooster"},removeTags:{amenity:"fast_food",brand:"Red Rooster","brand:wikidata":"Q376466","brand:wikipedia":"en:Red Rooster",cuisine:"chicken",name:"Red Rooster"},reference:{key:"cuisine",value:"chicken"},matchScore:2,suggestion:true},"amenity/fast_food/pizza/Sbarro":{name:"Sbarro",icon:"maki-restaurant-pizza",geometry:["point","area"],tags:{amenity:"fast_food",cuisine:"pizza","brand:wikidata":"Q2589409"},addTags:{amenity:"fast_food",brand:"Sbarro","brand:wikidata":"Q2589409","brand:wikipedia":"en:Sbarro",cuisine:"pizza",name:"Sbarro"},removeTags:{amenity:"fast_food",brand:"Sbarro","brand:wikidata":"Q2589409","brand:wikipedia":"en:Sbarro",cuisine:"pizza",name:"Sbarro"},reference:{key:"cuisine",value:"pizza"},matchScore:2,suggestion:true},"amenity/fast_food/sandwich/Schlotzsky's":{name:"Schlotzsky's",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"fast_food",cuisine:"sandwich","brand:wikidata":"Q2244796"},addTags:{amenity:"fast_food",brand:"Schlotzsky's","brand:wikidata":"Q2244796","brand:wikipedia":"en:Schlotzsky's",cuisine:"sandwich",name:"Schlotzsky's"},removeTags:{amenity:"fast_food",brand:"Schlotzsky's","brand:wikidata":"Q2244796","brand:wikipedia":"en:Schlotzsky's",cuisine:"sandwich",name:"Schlotzsky's"},reference:{key:"cuisine",value:"sandwich"},matchScore:2,suggestion:true},"amenity/fast_food/burger/Shake Shack":{name:"Shake Shack",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food",cuisine:"burger","brand:wikidata":"Q1058722"},addTags:{amenity:"fast_food",brand:"Shake Shack","brand:wikidata":"Q1058722","brand:wikipedia":"en:Shake Shack",cuisine:"burger",name:"Shake Shack"},removeTags:{amenity:"fast_food",brand:"Shake Shack","brand:wikidata":"Q1058722","brand:wikipedia":"en:Shake Shack",cuisine:"burger",name:"Shake Shack"},reference:{key:"cuisine",value:"burger"},matchScore:2,suggestion:true},"amenity/fast_food/burger/Sibylla":{name:"Sibylla",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food",cuisine:"burger","brand:wikidata":"Q488643"},addTags:{amenity:"fast_food",brand:"Sibylla","brand:wikidata":"Q488643","brand:wikipedia":"en:Sibylla (fast food)",cuisine:"burger",name:"Sibylla"},removeTags:{amenity:"fast_food",brand:"Sibylla","brand:wikidata":"Q488643","brand:wikipedia":"en:Sibylla (fast food)",cuisine:"burger",name:"Sibylla"},reference:{key:"cuisine",value:"burger"},matchScore:2,suggestion:true},"amenity/fast_food/burger/Smashburger":{name:"Smashburger",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food",cuisine:"burger","brand:wikidata":"Q17061332"},addTags:{amenity:"fast_food",brand:"Smashburger","brand:wikidata":"Q17061332","brand:wikipedia":"en:Smashburger",cuisine:"burger",name:"Smashburger"},removeTags:{amenity:"fast_food",brand:"Smashburger","brand:wikidata":"Q17061332","brand:wikipedia":"en:Smashburger",cuisine:"burger",name:"Smashburger"},reference:{key:"cuisine",value:"burger"},matchScore:2,suggestion:true},"amenity/fast_food/Smoothie King":{name:"Smoothie King",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food","brand:wikidata":"Q5491421"},addTags:{amenity:"fast_food",brand:"Smoothie King","brand:wikidata":"Q5491421","brand:wikipedia":"en:Smoothie King",cuisine:"juice",name:"Smoothie King"},removeTags:{amenity:"fast_food",brand:"Smoothie King","brand:wikidata":"Q5491421","brand:wikipedia":"en:Smoothie King",cuisine:"juice",name:"Smoothie King"},matchScore:2,suggestion:true},"amenity/fast_food/burger/Sonic":{name:"Sonic",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food",cuisine:"burger","brand:wikidata":"Q7561808"},addTags:{amenity:"fast_food",brand:"Sonic","brand:wikidata":"Q7561808","brand:wikipedia":"en:Sonic Drive-In",cuisine:"burger",name:"Sonic"},removeTags:{amenity:"fast_food",brand:"Sonic","brand:wikidata":"Q7561808","brand:wikipedia":"en:Sonic Drive-In",cuisine:"burger",name:"Sonic"},reference:{key:"cuisine",value:"burger"},matchScore:2,suggestion:true},"amenity/fast_food/burger/Steers":{name:"Steers",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food",cuisine:"burger","brand:wikidata":"Q56599145"},addTags:{amenity:"fast_food",brand:"Steers","brand:wikidata":"Q56599145","brand:wikipedia":"en:Steers",cuisine:"burger",name:"Steers"},removeTags:{amenity:"fast_food",brand:"Steers","brand:wikidata":"Q56599145","brand:wikipedia":"en:Steers",cuisine:"burger",name:"Steers"},reference:{key:"cuisine",value:"burger"},matchScore:2,suggestion:true},"amenity/fast_food/sandwich/Subway":{name:"Subway",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"fast_food",cuisine:"sandwich","brand:wikidata":"Q244457"},addTags:{amenity:"fast_food",brand:"Subway","brand:wikidata":"Q244457","brand:wikipedia":"en:Subway (restaurant)",cuisine:"sandwich",name:"Subway"},removeTags:{amenity:"fast_food",brand:"Subway","brand:wikidata":"Q244457","brand:wikipedia":"en:Subway (restaurant)",cuisine:"sandwich",name:"Subway"},reference:{key:"cuisine",value:"sandwich"},matchScore:2,suggestion:true},"amenity/fast_food/burger/Supermac's":{name:"Supermac's",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food",cuisine:"burger","brand:wikidata":"Q7643750"},addTags:{amenity:"fast_food",brand:"Supermac's","brand:wikidata":"Q7643750","brand:wikipedia":"en:Supermac's",cuisine:"burger",name:"Supermac's"},removeTags:{amenity:"fast_food",brand:"Supermac's","brand:wikidata":"Q7643750","brand:wikipedia":"en:Supermac's",cuisine:"burger",name:"Supermac's"},reference:{key:"cuisine",value:"burger"},matchScore:2,suggestion:true},"amenity/fast_food/Taco Bell":{name:"Taco Bell",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food","brand:wikidata":"Q752941"},addTags:{amenity:"fast_food",brand:"Taco Bell","brand:wikidata":"Q752941","brand:wikipedia":"en:Taco Bell",cuisine:"tex-mex",name:"Taco Bell"},removeTags:{amenity:"fast_food",brand:"Taco Bell","brand:wikidata":"Q752941","brand:wikipedia":"en:Taco Bell",cuisine:"tex-mex",name:"Taco Bell"},matchScore:2,suggestion:true},"amenity/fast_food/Taco Bueno":{name:"Taco Bueno",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food","brand:wikidata":"Q7673958"},addTags:{amenity:"fast_food",brand:"Taco Bueno","brand:wikidata":"Q7673958","brand:wikipedia":"en:Taco Bueno",cuisine:"mexican",name:"Taco Bueno"},removeTags:{amenity:"fast_food",brand:"Taco Bueno","brand:wikidata":"Q7673958","brand:wikipedia":"en:Taco Bueno",cuisine:"mexican",name:"Taco Bueno"},matchScore:2,suggestion:true},"amenity/fast_food/Taco Cabana":{name:"Taco Cabana",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food","brand:wikidata":"Q12070488"},addTags:{amenity:"fast_food",brand:"Taco Cabana","brand:wikidata":"Q12070488","brand:wikipedia":"en:Taco Cabana",cuisine:"mexican",name:"Taco Cabana"},removeTags:{amenity:"fast_food",brand:"Taco Cabana","brand:wikidata":"Q12070488","brand:wikipedia":"en:Taco Cabana",cuisine:"mexican",name:"Taco Cabana"},matchScore:2,suggestion:true},"amenity/fast_food/Taco Del Mar":{name:"Taco Del Mar",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food","brand:wikidata":"Q7673972"},addTags:{amenity:"fast_food",brand:"Taco Del Mar","brand:wikidata":"Q7673972","brand:wikipedia":"en:Taco del Mar",cuisine:"mexican",name:"Taco Del Mar"},removeTags:{amenity:"fast_food",brand:"Taco Del Mar","brand:wikidata":"Q7673972","brand:wikipedia":"en:Taco del Mar",cuisine:"mexican",name:"Taco Del Mar"},matchScore:2,suggestion:true},"amenity/fast_food/Taco John's":{name:"Taco John's",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food","brand:wikidata":"Q7673962"},addTags:{amenity:"fast_food",brand:"Taco John's","brand:wikidata":"Q7673962","brand:wikipedia":"en:Taco John's",cuisine:"mexican",name:"Taco John's"},removeTags:{amenity:"fast_food",brand:"Taco John's","brand:wikidata":"Q7673962","brand:wikipedia":"en:Taco John's",cuisine:"mexican",name:"Taco John's"},matchScore:2,suggestion:true},"amenity/fast_food/Taco Time":{name:"Taco Time",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food","brand:wikidata":"Q7673969"},addTags:{amenity:"fast_food",brand:"Taco Time","brand:wikidata":"Q7673969","brand:wikipedia":"en:Taco Time",cuisine:"mexican",name:"Taco Time"},removeTags:{amenity:"fast_food",brand:"Taco Time","brand:wikidata":"Q7673969","brand:wikipedia":"en:Taco Time",cuisine:"mexican",name:"Taco Time"},matchScore:2,suggestion:true},"amenity/fast_food/pizza/Telepizza":{name:"Telepizza",icon:"maki-restaurant-pizza",geometry:["point","area"],tags:{amenity:"fast_food",cuisine:"pizza","brand:wikidata":"Q2699863"},addTags:{amenity:"fast_food",brand:"Telepizza","brand:wikidata":"Q2699863","brand:wikipedia":"en:Telepizza",cuisine:"pizza",name:"Telepizza"},removeTags:{amenity:"fast_food",brand:"Telepizza","brand:wikidata":"Q2699863","brand:wikipedia":"en:Telepizza",cuisine:"pizza",name:"Telepizza"},reference:{key:"cuisine",value:"pizza"},matchScore:2,suggestion:true},"amenity/fast_food/Thai Express":{name:"Thai Express",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food","brand:wikidata":"Q7709119"},addTags:{amenity:"fast_food",brand:"Thai Express","brand:wikidata":"Q7709119","brand:wikipedia":"en:Thai Express",cuisine:"thai",name:"Thai Express"},removeTags:{amenity:"fast_food",brand:"Thai Express","brand:wikidata":"Q7709119","brand:wikipedia":"en:Thai Express",cuisine:"thai",name:"Thai Express"},matchScore:2,suggestion:true},"amenity/fast_food/pizza/The Pizza Company":{name:"The Pizza Company",icon:"maki-restaurant-pizza",geometry:["point","area"],tags:{amenity:"fast_food",cuisine:"pizza","brand:wikidata":"Q2413520"},addTags:{amenity:"fast_food",brand:"The Pizza Company","brand:wikidata":"Q2413520","brand:wikipedia":"en:The Pizza Company",cuisine:"pizza",name:"The Pizza Company"},removeTags:{amenity:"fast_food",brand:"The Pizza Company","brand:wikidata":"Q2413520","brand:wikipedia":"en:The Pizza Company",cuisine:"pizza",name:"The Pizza Company"},reference:{key:"cuisine",value:"pizza"},matchScore:2,suggestion:true},"amenity/fast_food/burger/Wendy's":{name:"Wendy's",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food",cuisine:"burger","brand:wikidata":"Q550258"},addTags:{amenity:"fast_food",brand:"Wendy's","brand:wikidata":"Q550258","brand:wikipedia":"en:Wendy's",cuisine:"burger",name:"Wendy's"},removeTags:{amenity:"fast_food",brand:"Wendy's","brand:wikidata":"Q550258","brand:wikipedia":"en:Wendy's",cuisine:"burger",name:"Wendy's"},reference:{key:"cuisine",value:"burger"},matchScore:2,suggestion:true},"amenity/fast_food/burger/Whataburger":{name:"Whataburger",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food",cuisine:"burger","brand:wikidata":"Q376627"},addTags:{amenity:"fast_food",brand:"Whataburger","brand:wikidata":"Q376627","brand:wikipedia":"en:Whataburger",cuisine:"burger",name:"Whataburger"},removeTags:{amenity:"fast_food",brand:"Whataburger","brand:wikidata":"Q376627","brand:wikipedia":"en:Whataburger",cuisine:"burger",name:"Whataburger"},reference:{key:"cuisine",value:"burger"},matchScore:2,suggestion:true},"amenity/fast_food/burger/White Castle":{name:"White Castle",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food",cuisine:"burger","brand:wikidata":"Q1244034"},addTags:{amenity:"fast_food",brand:"White Castle","brand:wikidata":"Q1244034","brand:wikipedia":"en:White Castle (restaurant)",cuisine:"burger",name:"White Castle"},removeTags:{amenity:"fast_food",brand:"White Castle","brand:wikidata":"Q1244034","brand:wikipedia":"en:White Castle (restaurant)",cuisine:"burger",name:"White Castle"},reference:{key:"cuisine",value:"burger"},matchScore:2,suggestion:true},"amenity/fast_food/Wienerschnitzel":{name:"Wienerschnitzel",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food","brand:wikidata":"Q324679"},addTags:{amenity:"fast_food",brand:"Wienerschnitzel","brand:wikidata":"Q324679","brand:wikipedia":"en:Wienerschnitzel",cuisine:"hot_dog",name:"Wienerschnitzel"},removeTags:{amenity:"fast_food",brand:"Wienerschnitzel","brand:wikidata":"Q324679","brand:wikipedia":"en:Wienerschnitzel",cuisine:"hot_dog",name:"Wienerschnitzel"},matchScore:2,suggestion:true},"amenity/fast_food/burger/Wimpy":{name:"Wimpy",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food",cuisine:"burger","brand:wikidata":"Q2811992"},addTags:{amenity:"fast_food",brand:"Wimpy","brand:wikidata":"Q2811992","brand:wikipedia":"en:Wimpy (restaurant)",cuisine:"burger",name:"Wimpy"},removeTags:{amenity:"fast_food",brand:"Wimpy","brand:wikidata":"Q2811992","brand:wikipedia":"en:Wimpy (restaurant)",cuisine:"burger",name:"Wimpy"},reference:{key:"cuisine",value:"burger"},matchScore:2,suggestion:true},"amenity/fast_food/chicken/Zaxby's":{name:"Zaxby's",icon:"fas-drumstick-bite",geometry:["point","area"],tags:{amenity:"fast_food",cuisine:"chicken","brand:wikidata":"Q8067525"},addTags:{amenity:"fast_food",brand:"Zaxby's","brand:wikidata":"Q8067525","brand:wikipedia":"en:Zaxby's",cuisine:"chicken",name:"Zaxby's"},removeTags:{amenity:"fast_food",brand:"Zaxby's","brand:wikidata":"Q8067525","brand:wikipedia":"en:Zaxby's",cuisine:"chicken",name:"Zaxby's"},reference:{key:"cuisine",value:"chicken"},matchScore:2,suggestion:true},"amenity/fast_food/burger/Бургер Кинг":{name:"Бургер Кинг",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food",cuisine:"burger","brand:wikidata":"Q177054"},addTags:{amenity:"fast_food",brand:"Бургер Кинг","brand:en":"Burger King","brand:wikidata":"Q177054","brand:wikipedia":"en:Burger King",cuisine:"burger",name:"Бургер Кинг","name:en":"Burger King"},removeTags:{amenity:"fast_food",brand:"Бургер Кинг","brand:en":"Burger King","brand:wikidata":"Q177054","brand:wikipedia":"en:Burger King",cuisine:"burger",name:"Бургер Кинг","name:en":"Burger King"},reference:{key:"cuisine",value:"burger"},matchScore:2,suggestion:true},"amenity/fast_food/Крошка Картошка":{name:"Крошка Картошка",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food","brand:wikidata":"Q4241838"},addTags:{amenity:"fast_food",brand:"Крошка Картошка","brand:wikidata":"Q4241838","brand:wikipedia":"ru:Крошка Картошка",name:"Крошка Картошка"},removeTags:{amenity:"fast_food",brand:"Крошка Картошка","brand:wikidata":"Q4241838","brand:wikipedia":"ru:Крошка Картошка",name:"Крошка Картошка"},matchScore:2,suggestion:true},"amenity/fast_food/burger/Макдоналдс":{name:"Макдоналдс",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food",cuisine:"burger","brand:wikidata":"Q38076"},addTags:{amenity:"fast_food",brand:"Макдоналдс","brand:en":"McDonald's","brand:wikidata":"Q38076","brand:wikipedia":"en:McDonald's",cuisine:"burger",name:"Макдоналдс","name:en":"McDonald's"},removeTags:{amenity:"fast_food",brand:"Макдоналдс","brand:en":"McDonald's","brand:wikidata":"Q38076","brand:wikipedia":"en:McDonald's",cuisine:"burger",name:"Макдоналдс","name:en":"McDonald's"},reference:{key:"cuisine",value:"burger"},matchScore:2,suggestion:true},"amenity/fast_food/pizza/Папа Джонс":{name:"Папа Джонс",icon:"maki-restaurant-pizza",geometry:["point","area"],tags:{amenity:"fast_food",cuisine:"pizza","brand:wikidata":"Q2759586"},addTags:{amenity:"fast_food",brand:"Папа Джонс","brand:en":"Papa John's","brand:wikidata":"Q2759586","brand:wikipedia":"ru:Papa John’s",cuisine:"pizza",name:"Папа Джонс","name:en":"Papa John's"},removeTags:{amenity:"fast_food",brand:"Папа Джонс","brand:en":"Papa John's","brand:wikidata":"Q2759586","brand:wikipedia":"ru:Papa John’s",cuisine:"pizza",name:"Папа Джонс","name:en":"Papa John's"},reference:{key:"cuisine",value:"pizza"},matchScore:2,suggestion:true},"amenity/fast_food/Стардог!s":{name:"Стардог!s",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food","brand:wikidata":"Q4439856"},addTags:{amenity:"fast_food",brand:"Стардог!s","brand:en":"Stardog!s","brand:wikidata":"Q4439856","brand:wikipedia":"ru:Стардогс",cuisine:"sausage",name:"Стардог!s","name:en":"Stardog!s"},removeTags:{amenity:"fast_food",brand:"Стардог!s","brand:en":"Stardog!s","brand:wikidata":"Q4439856","brand:wikipedia":"ru:Стардогс",cuisine:"sausage",name:"Стардог!s","name:en":"Stardog!s"},matchScore:2,suggestion:true},"amenity/fast_food/Суши Wok":{name:"Суши Wok",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food","brand:wikidata":"Q25444754"},addTags:{amenity:"fast_food",brand:"Суши Wok","brand:en":"Sushi Wok","brand:wikidata":"Q25444754","brand:wikipedia":"uk:Суши Wok (мережа магазинів)",cuisine:"asian",name:"Суши Wok","name:en":"Sushi Wok"},removeTags:{amenity:"fast_food",brand:"Суши Wok","brand:en":"Sushi Wok","brand:wikidata":"Q25444754","brand:wikipedia":"uk:Суши Wok (мережа магазинів)",cuisine:"asian",name:"Суши Wok","name:en":"Sushi Wok"},matchScore:2,suggestion:true},"amenity/fast_food/Теремок":{name:"Теремок",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food","brand:wikidata":"Q4455593"},addTags:{amenity:"fast_food",brand:"Теремок","brand:en":"Teremok","brand:wikidata":"Q4455593","brand:wikipedia":"ru:Теремок (сеть быстрого питания)",name:"Теремок","name:en":"Teremok"},removeTags:{amenity:"fast_food",brand:"Теремок","brand:en":"Teremok","brand:wikidata":"Q4455593","brand:wikipedia":"ru:Теремок (сеть быстрого питания)",name:"Теремок","name:en":"Teremok"},matchScore:2,suggestion:true},"amenity/fast_food/burger/מקדונלד'ס":{name:"מקדונלד'ס",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food",cuisine:"burger","brand:wikidata":"Q12061542"},addTags:{amenity:"fast_food",brand:"מקדונלד'ס","brand:en":"McDonald's","brand:wikidata":"Q12061542","brand:wikipedia":"en:McDonald's Israel",cuisine:"burger",name:"מקדונלד'ס","name:en":"McDonald's"},removeTags:{amenity:"fast_food",brand:"מקדונלד'ס","brand:en":"McDonald's","brand:wikidata":"Q12061542","brand:wikipedia":"en:McDonald's Israel",cuisine:"burger",name:"מקדונלד'ס","name:en":"McDonald's"},reference:{key:"cuisine",value:"burger"},matchScore:2,suggestion:true},"amenity/fast_food/かっぱ寿司":{name:"かっぱ寿司",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food","brand:wikidata":"Q11263916"},addTags:{amenity:"fast_food",brand:"かっぱ寿司","brand:en":"Kappazushi","brand:wikidata":"Q11263916","brand:wikipedia":"ja:かっぱ寿司",cuisine:"sushi",name:"かっぱ寿司","name:en":"Kappazushi"},removeTags:{amenity:"fast_food",brand:"かっぱ寿司","brand:en":"Kappazushi","brand:wikidata":"Q11263916","brand:wikipedia":"ja:かっぱ寿司",cuisine:"sushi",name:"かっぱ寿司","name:en":"Kappazushi"},matchScore:2,suggestion:true},"amenity/fast_food/かつや":{name:"かつや",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food","brand:wikidata":"Q2855257"},addTags:{amenity:"fast_food",brand:"かつや","brand:en":"Katsuya","brand:wikidata":"Q2855257","brand:wikipedia":"ja:かつや",cuisine:"fried_food",name:"かつや","name:en":"Katsuya","name:ko":"카쯔야","name:zh":"吉豚屋"},removeTags:{amenity:"fast_food",brand:"かつや","brand:en":"Katsuya","brand:wikidata":"Q2855257","brand:wikipedia":"ja:かつや",cuisine:"fried_food",name:"かつや","name:en":"Katsuya","name:ko":"카쯔야","name:zh":"吉豚屋"},matchScore:2,suggestion:true},"amenity/fast_food/くら寿司":{name:"くら寿司",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food","brand:wikidata":"Q6445491"},addTags:{amenity:"fast_food",brand:"くら寿司","brand:en":"Kurazushi","brand:wikidata":"Q6445491","brand:wikipedia":"ja:くらコーポレーション",cuisine:"sushi",name:"くら寿司","name:en":"Kurazushi"},removeTags:{amenity:"fast_food",brand:"くら寿司","brand:en":"Kurazushi","brand:wikidata":"Q6445491","brand:wikipedia":"ja:くらコーポレーション",cuisine:"sushi",name:"くら寿司","name:en":"Kurazushi"},matchScore:2,suggestion:true},"amenity/fast_food/すき家":{name:"すき家",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food","brand:wikidata":"Q6137375"},addTags:{amenity:"fast_food",brand:"すき家","brand:en":"Sukiya","brand:wikidata":"Q6137375","brand:wikipedia":"ja:すき家",name:"すき家","name:en":"Sukiya"},removeTags:{amenity:"fast_food",brand:"すき家","brand:en":"Sukiya","brand:wikidata":"Q6137375","brand:wikipedia":"ja:すき家",name:"すき家","name:en":"Sukiya"},matchScore:2,suggestion:true},"amenity/fast_food/なか卯":{name:"なか卯",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food","brand:wikidata":"Q11274132"},addTags:{amenity:"fast_food",brand:"なか卯","brand:en":"Nakau","brand:wikidata":"Q11274132","brand:wikipedia":"ja:なか卯",name:"なか卯","name:en":"Nakau"},removeTags:{amenity:"fast_food",brand:"なか卯","brand:en":"Nakau","brand:wikidata":"Q11274132","brand:wikipedia":"ja:なか卯",name:"なか卯","name:en":"Nakau"},matchScore:2,suggestion:true},"amenity/fast_food/はま寿司":{name:"はま寿司",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food","brand:wikidata":"Q17220385"},addTags:{amenity:"fast_food",brand:"はま寿司","brand:en":"Hamazushi","brand:wikidata":"Q17220385","brand:wikipedia":"ja:はま寿司",name:"はま寿司","name:en":"Hamazushi"},removeTags:{amenity:"fast_food",brand:"はま寿司","brand:en":"Hamazushi","brand:wikidata":"Q17220385","brand:wikipedia":"ja:はま寿司",name:"はま寿司","name:en":"Hamazushi"},matchScore:2,suggestion:true},"amenity/fast_food/ほっかほっか亭":{name:"ほっかほっか亭",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food","brand:wikidata":"Q5878035"},addTags:{amenity:"fast_food",brand:"ほっかほっか亭","brand:en":"Hokka Hokka Tei","brand:wikidata":"Q5878035","brand:wikipedia":"ja:ほっかほっか亭",name:"ほっかほっか亭","name:en":"Hokka Hokka Tei"},removeTags:{amenity:"fast_food",brand:"ほっかほっか亭","brand:en":"Hokka Hokka Tei","brand:wikidata":"Q5878035","brand:wikipedia":"ja:ほっかほっか亭",name:"ほっかほっか亭","name:en":"Hokka Hokka Tei"},matchScore:2,suggestion:true},"amenity/fast_food/ほっともっと":{name:"ほっともっと",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food","brand:wikidata":"Q10850949"},addTags:{amenity:"fast_food",brand:"ほっともっと","brand:en":"Hotto Motto","brand:wikidata":"Q10850949","brand:wikipedia":"ja:ほっともっと",name:"ほっともっと","name:en":"Hotto Motto"},removeTags:{amenity:"fast_food",brand:"ほっともっと","brand:en":"Hotto Motto","brand:wikidata":"Q10850949","brand:wikipedia":"ja:ほっともっと",name:"ほっともっと","name:en":"Hotto Motto"},matchScore:2,suggestion:true},"amenity/fast_food/オリジン弁当":{name:"オリジン弁当",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food","brand:wikidata":"Q11292632"},addTags:{amenity:"fast_food",brand:"オリジン弁当","brand:en":"Origin Bentō","brand:wikidata":"Q11292632","brand:wikipedia":"ja:オリジン東秀",name:"オリジン弁当","name:en":"Origin Bentō"},removeTags:{amenity:"fast_food",brand:"オリジン弁当","brand:en":"Origin Bentō","brand:wikidata":"Q11292632","brand:wikipedia":"ja:オリジン東秀",name:"オリジン弁当","name:en":"Origin Bentō"},matchScore:2,suggestion:true},"amenity/fast_food/chicken/ケンタッキーフライドチキン":{name:"ケンタッキーフライドチキン",icon:"fas-drumstick-bite",geometry:["point","area"],tags:{amenity:"fast_food",cuisine:"chicken","brand:wikidata":"Q524757"},addTags:{amenity:"fast_food",brand:"ケンタッキーフライドチキン","brand:en":"KFC","brand:wikidata":"Q524757","brand:wikipedia":"ja:KFCコーポレーション",cuisine:"chicken",name:"ケンタッキーフライドチキン","name:en":"KFC"},removeTags:{amenity:"fast_food",brand:"ケンタッキーフライドチキン","brand:en":"KFC","brand:wikidata":"Q524757","brand:wikipedia":"ja:KFCコーポレーション",cuisine:"chicken",name:"ケンタッキーフライドチキン","name:en":"KFC"},reference:{key:"cuisine",value:"chicken"},matchScore:2,suggestion:true},"amenity/fast_food/sandwich/サブウェイ":{name:"サブウェイ",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"fast_food",cuisine:"sandwich","brand:wikidata":"Q244457"},addTags:{amenity:"fast_food",brand:"サブウェイ","brand:en":"Subway","brand:wikidata":"Q244457","brand:wikipedia":"ja:サブウェイ",cuisine:"sandwich",name:"サブウェイ","name:en":"Subway"},removeTags:{amenity:"fast_food",brand:"サブウェイ","brand:en":"Subway","brand:wikidata":"Q244457","brand:wikipedia":"ja:サブウェイ",cuisine:"sandwich",name:"サブウェイ","name:en":"Subway"},reference:{key:"cuisine",value:"sandwich"},matchScore:2,suggestion:true},"amenity/fast_food/スシロー":{name:"スシロー",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food","brand:wikidata":"Q11257037"},addTags:{amenity:"fast_food",brand:"スシロー","brand:en":"Sushiro","brand:wikidata":"Q11257037","brand:wikipedia":"ja:あきんどスシロー",cuisine:"sushi",name:"スシロー","name:en":"Sushiro","name:zh":"壽司郎"},removeTags:{amenity:"fast_food",brand:"スシロー","brand:en":"Sushiro","brand:wikidata":"Q11257037","brand:wikipedia":"ja:あきんどスシロー",cuisine:"sushi",name:"スシロー","name:en":"Sushiro","name:zh":"壽司郎"},matchScore:2,suggestion:true},"amenity/fast_food/pizza/ピザハット":{name:"ピザハット",icon:"maki-restaurant-pizza",geometry:["point","area"],tags:{amenity:"fast_food",cuisine:"pizza","brand:wikidata":"Q191615"},addTags:{amenity:"fast_food",brand:"ピザハット","brand:en":"Pizza Hut","brand:wikidata":"Q191615","brand:wikipedia":"ja:ピザハット",cuisine:"pizza",name:"ピザハット","name:en":"Pizza Hut"},removeTags:{amenity:"fast_food",brand:"ピザハット","brand:en":"Pizza Hut","brand:wikidata":"Q191615","brand:wikipedia":"ja:ピザハット",cuisine:"pizza",name:"ピザハット","name:en":"Pizza Hut"},reference:{key:"cuisine",value:"pizza"},matchScore:2,suggestion:true},"amenity/fast_food/burger/マクドナルド":{name:"マクドナルド",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food",cuisine:"burger","brand:wikidata":"Q38076"},addTags:{amenity:"fast_food",brand:"マクドナルド","brand:en":"McDonald's","brand:wikidata":"Q38076","brand:wikipedia":"ja:マクドナルド",cuisine:"burger",name:"マクドナルド","name:en":"McDonald's"},removeTags:{amenity:"fast_food",brand:"マクドナルド","brand:en":"McDonald's","brand:wikidata":"Q38076","brand:wikipedia":"ja:マクドナルド",cuisine:"burger",name:"マクドナルド","name:en":"McDonald's"},reference:{key:"cuisine",value:"burger"},matchScore:2,suggestion:true},"amenity/fast_food/ミスタードーナツ":{name:"ミスタードーナツ",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food","brand:wikidata":"Q1065819"},addTags:{amenity:"fast_food",brand:"ミスタードーナツ","brand:en":"Mister Donut","brand:wikidata":"Q1065819","brand:wikipedia":"en:Mister Donut",cuisine:"donut",name:"ミスタードーナツ","name:en":"Mister Donut"},removeTags:{amenity:"fast_food",brand:"ミスタードーナツ","brand:en":"Mister Donut","brand:wikidata":"Q1065819","brand:wikipedia":"en:Mister Donut",cuisine:"donut",name:"ミスタードーナツ","name:en":"Mister Donut"},matchScore:2,suggestion:true},"amenity/fast_food/burger/モスバーガー":{name:"モスバーガー",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food",cuisine:"burger","brand:wikidata":"Q1204169"},addTags:{amenity:"fast_food",brand:"モスバーガー","brand:en":"MOS Burger","brand:wikidata":"Q1204169","brand:wikipedia":"ja:モスバーガー",cuisine:"burger",name:"モスバーガー","name:en":"MOS Burger"},removeTags:{amenity:"fast_food",brand:"モスバーガー","brand:en":"MOS Burger","brand:wikidata":"Q1204169","brand:wikipedia":"ja:モスバーガー",cuisine:"burger",name:"モスバーガー","name:en":"MOS Burger"},reference:{key:"cuisine",value:"burger"},matchScore:2,suggestion:true},"amenity/fast_food/burger/ロッテリア":{name:"ロッテリア",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food",cuisine:"burger","brand:wikidata":"Q249525"},addTags:{amenity:"fast_food",brand:"ロッテリア","brand:en":"Lotteria","brand:wikidata":"Q249525","brand:wikipedia":"ja:ロッテリア",cuisine:"burger",name:"ロッテリア","name:en":"Lotteria"},removeTags:{amenity:"fast_food",brand:"ロッテリア","brand:en":"Lotteria","brand:wikidata":"Q249525","brand:wikipedia":"ja:ロッテリア",cuisine:"burger",name:"ロッテリア","name:en":"Lotteria"},reference:{key:"cuisine",value:"burger"},matchScore:2,suggestion:true},"amenity/fast_food/吉野家":{name:"吉野家",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food","brand:wikidata":"Q776272"},addTags:{amenity:"fast_food",brand:"吉野家","brand:en":"Yoshinoya","brand:wikidata":"Q776272","brand:wikipedia":"ja:吉野家",name:"吉野家","name:en":"Yoshinoya"},removeTags:{amenity:"fast_food",brand:"吉野家","brand:en":"Yoshinoya","brand:wikidata":"Q776272","brand:wikipedia":"ja:吉野家",name:"吉野家","name:en":"Yoshinoya"},matchScore:2,suggestion:true},"amenity/fast_food/富士そば":{name:"富士そば",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food","brand:wikidata":"Q11414722"},addTags:{amenity:"fast_food",brand:"富士そば","brand:en":"Fuji Soba","brand:wikidata":"Q11414722","brand:wikipedia":"ja:名代富士そば",name:"富士そば","name:en":"Fuji Soba"},removeTags:{amenity:"fast_food",brand:"富士そば","brand:en":"Fuji Soba","brand:wikidata":"Q11414722","brand:wikipedia":"ja:名代富士そば",name:"富士そば","name:en":"Fuji Soba"},matchScore:2,suggestion:true},"amenity/fast_food/幸楽苑":{name:"幸楽苑",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food","brand:wikidata":"Q11484003"},addTags:{amenity:"fast_food",brand:"幸楽苑","brand:en":"Kourakuen","brand:wikidata":"Q11484003","brand:wikipedia":"ja:幸楽苑",name:"幸楽苑","name:en":"Kourakuen"},removeTags:{amenity:"fast_food",brand:"幸楽苑","brand:en":"Kourakuen","brand:wikidata":"Q11484003","brand:wikipedia":"ja:幸楽苑",name:"幸楽苑","name:en":"Kourakuen"},matchScore:2,suggestion:true},"amenity/fast_food/burger/摩斯漢堡":{name:"摩斯漢堡",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food",cuisine:"burger","brand:wikidata":"Q1204169"},addTags:{amenity:"fast_food",brand:"摩斯漢堡","brand:en":"MOS Burger","brand:wikidata":"Q1204169","brand:wikipedia":"zh:摩斯漢堡",cuisine:"burger",name:"摩斯漢堡","name:en":"MOS Burger"},removeTags:{amenity:"fast_food",brand:"摩斯漢堡","brand:en":"MOS Burger","brand:wikidata":"Q1204169","brand:wikipedia":"zh:摩斯漢堡",cuisine:"burger",name:"摩斯漢堡","name:en":"MOS Burger"},reference:{key:"cuisine",value:"burger"},matchScore:2,suggestion:true},"amenity/fast_food/松屋":{name:"松屋",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food","brand:wikidata":"Q848773"},addTags:{amenity:"fast_food",brand:"松屋","brand:en":"Matsuya Foods","brand:wikidata":"Q848773","brand:wikipedia":"zh:松屋食品",name:"松屋","name:en":"Matsuya Foods"},removeTags:{amenity:"fast_food",brand:"松屋","brand:en":"Matsuya Foods","brand:wikidata":"Q848773","brand:wikipedia":"zh:松屋食品",name:"松屋","name:en":"Matsuya Foods"},matchScore:2,suggestion:true},"amenity/fast_food/肯德基":{name:"肯德基",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food","brand:wikidata":"Q524757"},addTags:{amenity:"fast_food",brand:"肯德基","brand:en":"KFC","brand:wikidata":"Q524757","brand:wikipedia":"zh:肯德基",name:"肯德基","name:en":"KFC"},removeTags:{amenity:"fast_food",brand:"肯德基","brand:en":"KFC","brand:wikidata":"Q524757","brand:wikipedia":"zh:肯德基",name:"肯德基","name:en":"KFC"},matchScore:2,suggestion:true},"amenity/fast_food/burger/麥當勞":{name:"麥當勞",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food",cuisine:"burger","brand:wikidata":"Q38076"},addTags:{amenity:"fast_food",brand:"麥當勞","brand:en":"McDonald's","brand:wikidata":"Q38076","brand:wikipedia":"zh_classical:麥當勞",cuisine:"burger",name:"麥當勞","name:en":"McDonald's"},removeTags:{amenity:"fast_food",brand:"麥當勞","brand:en":"McDonald's","brand:wikidata":"Q38076","brand:wikipedia":"zh_classical:麥當勞",cuisine:"burger",name:"麥當勞","name:en":"McDonald's"},reference:{key:"cuisine",value:"burger"},matchScore:2,suggestion:true},"amenity/fast_food/burger/麦当劳":{name:"麦当劳",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food",cuisine:"burger","brand:wikidata":"Q38076"},addTags:{amenity:"fast_food",brand:"麦当劳","brand:en":"McDonald's","brand:wikidata":"Q38076","brand:wikipedia":"zh:麦当劳",cuisine:"burger",name:"麦当劳","name:en":"McDonald's"},removeTags:{amenity:"fast_food",brand:"麦当劳","brand:en":"McDonald's","brand:wikidata":"Q38076","brand:wikipedia":"zh:麦当劳",cuisine:"burger",name:"麦当劳","name:en":"McDonald's"},reference:{key:"cuisine",value:"burger"},matchScore:2,suggestion:true},"amenity/fast_food/burger/롯데리아":{name:"롯데리아",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food",cuisine:"burger","brand:wikidata":"Q249525"},addTags:{amenity:"fast_food",brand:"롯데리아","brand:en":"Lotteria","brand:wikidata":"Q249525","brand:wikipedia":"ko:롯데리아",cuisine:"burger",name:"롯데리아","name:en":"Lotteria"},removeTags:{amenity:"fast_food",brand:"롯데리아","brand:en":"Lotteria","brand:wikidata":"Q249525","brand:wikipedia":"ko:롯데리아",cuisine:"burger",name:"롯데리아","name:en":"Lotteria"},reference:{key:"cuisine",value:"burger"},matchScore:2,suggestion:true},"amenity/fuel/1-2-3":{name:"1-2-3",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q4545742"},addTags:{amenity:"fuel",brand:"1-2-3","brand:wikidata":"Q4545742","brand:wikipedia":"en:1-2-3 (fuel station)",name:"1-2-3"},removeTags:{amenity:"fuel",brand:"1-2-3","brand:wikidata":"Q4545742","brand:wikipedia":"en:1-2-3 (fuel station)",name:"1-2-3"},matchScore:2,suggestion:true},"amenity/fuel/7-Eleven":{name:"7-Eleven",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q259340"},addTags:{amenity:"fuel",brand:"7-Eleven","brand:wikidata":"Q259340","brand:wikipedia":"en:7-Eleven",name:"7-Eleven"},removeTags:{amenity:"fuel",brand:"7-Eleven","brand:wikidata":"Q259340","brand:wikipedia":"en:7-Eleven",name:"7-Eleven"},matchScore:2,suggestion:true},"amenity/fuel/ABC":{name:"ABC",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q10397504"},addTags:{amenity:"fuel",brand:"ABC","brand:wikidata":"Q10397504","brand:wikipedia":"fi:ABC-ketju",name:"ABC"},removeTags:{amenity:"fuel",brand:"ABC","brand:wikidata":"Q10397504","brand:wikipedia":"fi:ABC-ketju",name:"ABC"},matchScore:2,suggestion:true},"amenity/fuel/ADNOC":{name:"ADNOC",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q166729"},addTags:{amenity:"fuel",brand:"ADNOC","brand:wikidata":"Q166729","brand:wikipedia":"en:Abu Dhabi National Oil Company",name:"ADNOC"},removeTags:{amenity:"fuel",brand:"ADNOC","brand:wikidata":"Q166729","brand:wikipedia":"en:Abu Dhabi National Oil Company",name:"ADNOC"},matchScore:2,suggestion:true},"amenity/fuel/Afriquia":{name:"Afriquia",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q2829178"},addTags:{amenity:"fuel",brand:"Afriquia","brand:wikidata":"Q2829178","brand:wikipedia":"en:Akwa Group",name:"Afriquia"},removeTags:{amenity:"fuel",brand:"Afriquia","brand:wikidata":"Q2829178","brand:wikipedia":"en:Akwa Group",name:"Afriquia"},matchScore:2,suggestion:true},"amenity/fuel/Agip":{name:"Agip",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q377915"},addTags:{amenity:"fuel",brand:"Agip","brand:wikidata":"Q377915","brand:wikipedia":"en:Agip",name:"Agip"},removeTags:{amenity:"fuel",brand:"Agip","brand:wikidata":"Q377915","brand:wikipedia":"en:Agip",name:"Agip"},matchScore:2,suggestion:true},"amenity/fuel/Agrola":{name:"Agrola",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q397351"},addTags:{amenity:"fuel",brand:"Agrola","brand:wikidata":"Q397351","brand:wikipedia":"de:Agrola",name:"Agrola"},removeTags:{amenity:"fuel",brand:"Agrola","brand:wikidata":"Q397351","brand:wikipedia":"de:Agrola",name:"Agrola"},matchScore:2,suggestion:true},"amenity/fuel/Api":{name:"Api",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q466043"},addTags:{amenity:"fuel",brand:"Api","brand:wikidata":"Q466043","brand:wikipedia":"en:American Petroleum Institute",name:"Api"},removeTags:{amenity:"fuel",brand:"Api","brand:wikidata":"Q466043","brand:wikipedia":"en:American Petroleum Institute",name:"Api"},matchScore:2,suggestion:true},"amenity/fuel/Aral":{name:"Aral",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q565734"},addTags:{amenity:"fuel",brand:"Aral","brand:wikidata":"Q565734","brand:wikipedia":"en:Aral AG",name:"Aral"},removeTags:{amenity:"fuel",brand:"Aral","brand:wikidata":"Q565734","brand:wikipedia":"en:Aral AG",name:"Aral"},matchScore:2,suggestion:true},"amenity/fuel/Arco":{name:"Arco",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q304769"},addTags:{amenity:"fuel",brand:"Arco","brand:wikidata":"Q304769","brand:wikipedia":"en:ARCO",name:"Arco"},removeTags:{amenity:"fuel",brand:"Arco","brand:wikidata":"Q304769","brand:wikipedia":"en:ARCO",name:"Arco"},matchScore:2,suggestion:true},"amenity/fuel/Asda":{name:"Asda",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q297410"},addTags:{amenity:"fuel",brand:"Asda","brand:wikidata":"Q297410","brand:wikipedia":"en:Asda",name:"Asda"},removeTags:{amenity:"fuel",brand:"Asda","brand:wikidata":"Q297410","brand:wikipedia":"en:Asda",name:"Asda"},matchScore:2,suggestion:true},"amenity/fuel/Auchan":{name:"Auchan",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q758603"},addTags:{amenity:"fuel",brand:"Auchan","brand:wikidata":"Q758603","brand:wikipedia":"en:Auchan",name:"Auchan"},removeTags:{amenity:"fuel",brand:"Auchan","brand:wikidata":"Q758603","brand:wikipedia":"en:Auchan",name:"Auchan"},matchScore:2,suggestion:true},"amenity/fuel/Avanti":{name:"Avanti",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q168238"},addTags:{amenity:"fuel",brand:"Avanti","brand:wikidata":"Q168238","brand:wikipedia":"en:OMV",name:"Avanti"},removeTags:{amenity:"fuel",brand:"Avanti","brand:wikidata":"Q168238","brand:wikipedia":"en:OMV",name:"Avanti"},matchScore:2,suggestion:true},"amenity/fuel/Avia":{name:"Avia",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q300147"},addTags:{amenity:"fuel",brand:"Avia","brand:wikidata":"Q300147","brand:wikipedia":"de:Avia International",name:"Avia"},removeTags:{amenity:"fuel",brand:"Avia","brand:wikidata":"Q300147","brand:wikipedia":"de:Avia International",name:"Avia"},matchScore:2,suggestion:true},"amenity/fuel/Avin":{name:"Avin",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q19903165"},addTags:{amenity:"fuel",brand:"Avin","brand:wikidata":"Q19903165","brand:wikipedia":"en:Avin International",name:"Avin"},removeTags:{amenity:"fuel",brand:"Avin","brand:wikidata":"Q19903165","brand:wikipedia":"en:Avin International",name:"Avin"},matchScore:2,suggestion:true},"amenity/fuel/BP":{name:"BP",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q152057"},addTags:{amenity:"fuel",brand:"BP","brand:wikidata":"Q152057","brand:wikipedia":"en:BP",name:"BP"},removeTags:{amenity:"fuel",brand:"BP","brand:wikidata":"Q152057","brand:wikipedia":"en:BP",name:"BP"},matchScore:2,suggestion:true},"amenity/fuel/Bangchak":{name:"Bangchak",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q6579719"},addTags:{amenity:"fuel",brand:"Bangchak","brand:wikidata":"Q6579719","brand:wikipedia":"zh:曼差石油股份",name:"Bangchak"},removeTags:{amenity:"fuel",brand:"Bangchak","brand:wikidata":"Q6579719","brand:wikipedia":"zh:曼差石油股份",name:"Bangchak"},matchScore:2,suggestion:true},"amenity/fuel/Bharat Petroleum":{name:"Bharat Petroleum",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q854826"},addTags:{amenity:"fuel",brand:"Bharat Petroleum","brand:wikidata":"Q854826","brand:wikipedia":"en:Bharat Petroleum",name:"Bharat Petroleum"},removeTags:{amenity:"fuel",brand:"Bharat Petroleum","brand:wikidata":"Q854826","brand:wikipedia":"en:Bharat Petroleum",name:"Bharat Petroleum"},matchScore:2,suggestion:true},"amenity/fuel/Bliska":{name:"Bliska",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q4016378"},addTags:{amenity:"fuel",brand:"Bliska","brand:wikidata":"Q4016378","brand:wikipedia":"pl:Bliska",name:"Bliska"},removeTags:{amenity:"fuel",brand:"Bliska","brand:wikidata":"Q4016378","brand:wikipedia":"pl:Bliska",name:"Bliska"},matchScore:2,suggestion:true},"amenity/fuel/CAMPSA":{name:"CAMPSA",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q1031623"},addTags:{amenity:"fuel",brand:"CAMPSA","brand:wikidata":"Q1031623","brand:wikipedia":"en:Campsa",name:"CAMPSA"},removeTags:{amenity:"fuel",brand:"CAMPSA","brand:wikidata":"Q1031623","brand:wikipedia":"en:Campsa",name:"CAMPSA"},matchScore:2,suggestion:true},"amenity/fuel/CEPSA":{name:"CEPSA",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q608819"},addTags:{amenity:"fuel",brand:"CEPSA","brand:wikidata":"Q608819","brand:wikipedia":"en:Compañía Española de Petróleos",name:"CEPSA"},removeTags:{amenity:"fuel",brand:"CEPSA","brand:wikidata":"Q608819","brand:wikipedia":"en:Compañía Española de Petróleos",name:"CEPSA"},matchScore:2,suggestion:true},"amenity/fuel/Caltex":{name:"Caltex",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q277470"},addTags:{amenity:"fuel",brand:"Caltex","brand:wikidata":"Q277470","brand:wikipedia":"en:Caltex",name:"Caltex"},removeTags:{amenity:"fuel",brand:"Caltex","brand:wikidata":"Q277470","brand:wikipedia":"en:Caltex",name:"Caltex"},matchScore:2,suggestion:true},"amenity/fuel/Canadian Tire Gas+":{name:"Canadian Tire Gas+",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q1032400"},addTags:{amenity:"fuel",brand:"Canadian Tire","brand:wikidata":"Q1032400","brand:wikipedia":"en:Canadian Tire",name:"Canadian Tire"},removeTags:{amenity:"fuel",brand:"Canadian Tire","brand:wikidata":"Q1032400","brand:wikipedia":"en:Canadian Tire",name:"Canadian Tire"},matchScore:2,suggestion:true},"amenity/fuel/Carrefour Market":{name:"Carrefour Market",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q217599"},addTags:{amenity:"fuel",brand:"Carrefour Market","brand:wikidata":"Q217599","brand:wikipedia":"en:Carrefour",name:"Carrefour Market"},removeTags:{amenity:"fuel",brand:"Carrefour Market","brand:wikidata":"Q217599","brand:wikipedia":"en:Carrefour",name:"Carrefour Market"},matchScore:2,suggestion:true},"amenity/fuel/Casey's General Store":{name:"Casey's General Store",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q2940968"},addTags:{amenity:"fuel",brand:"Casey's General Store","brand:wikidata":"Q2940968","brand:wikipedia":"en:Casey's General Stores",name:"Casey's General Store"},removeTags:{amenity:"fuel",brand:"Casey's General Store","brand:wikidata":"Q2940968","brand:wikipedia":"en:Casey's General Stores",name:"Casey's General Store"},matchScore:2,suggestion:true},"amenity/fuel/Cenex":{name:"Cenex",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q5011381"},addTags:{amenity:"fuel",brand:"Cenex","brand:wikidata":"Q5011381","brand:wikipedia":"en:CHS Inc.",name:"Cenex"},removeTags:{amenity:"fuel",brand:"Cenex","brand:wikidata":"Q5011381","brand:wikipedia":"en:CHS Inc.",name:"Cenex"},matchScore:2,suggestion:true},"amenity/fuel/Ceypetco":{name:"Ceypetco",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q5065795"},addTags:{amenity:"fuel",brand:"Ceypetco","brand:wikidata":"Q5065795","brand:wikipedia":"en:Ceylon Petroleum Corporation",name:"Ceypetco"},removeTags:{amenity:"fuel",brand:"Ceypetco","brand:wikidata":"Q5065795","brand:wikipedia":"en:Ceylon Petroleum Corporation",name:"Ceypetco"},matchScore:2,suggestion:true},"amenity/fuel/Chevron":{name:"Chevron",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q319642"},addTags:{amenity:"fuel",brand:"Chevron","brand:wikidata":"Q319642","brand:wikipedia":"en:Chevron Corporation",name:"Chevron"},removeTags:{amenity:"fuel",brand:"Chevron","brand:wikidata":"Q319642","brand:wikipedia":"en:Chevron Corporation",name:"Chevron"},matchScore:2,suggestion:true},"amenity/fuel/Circle K":{name:"Circle K",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q3268010"},addTags:{amenity:"fuel",brand:"Circle K","brand:wikidata":"Q3268010","brand:wikipedia":"en:Circle K",name:"Circle K"},removeTags:{amenity:"fuel",brand:"Circle K","brand:wikidata":"Q3268010","brand:wikipedia":"en:Circle K",name:"Circle K"},matchScore:2,suggestion:true},"amenity/fuel/Citgo":{name:"Citgo",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q2974437"},addTags:{amenity:"fuel",brand:"Citgo","brand:wikidata":"Q2974437","brand:wikipedia":"en:Citgo",name:"Citgo"},removeTags:{amenity:"fuel",brand:"Citgo","brand:wikidata":"Q2974437","brand:wikipedia":"en:Citgo",name:"Citgo"},matchScore:2,suggestion:true},"amenity/fuel/Clark":{name:"Clark",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q5127157"},addTags:{amenity:"fuel",brand:"Clark","brand:wikidata":"Q5127157","brand:wikipedia":"en:Clark Brands",name:"Clark"},removeTags:{amenity:"fuel",brand:"Clark","brand:wikidata":"Q5127157","brand:wikipedia":"en:Clark Brands",name:"Clark"},matchScore:2,suggestion:true},"amenity/fuel/Co-op":{name:"Co-op",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q5440676"},addTags:{amenity:"fuel",brand:"Federated Co-operatives","brand:wikidata":"Q5440676","brand:wikipedia":"en:Federated Co-operatives",name:"Co-op"},removeTags:{amenity:"fuel",brand:"Federated Co-operatives","brand:wikidata":"Q5440676","brand:wikipedia":"en:Federated Co-operatives",name:"Co-op"},matchScore:2,suggestion:true},"amenity/fuel/Coles Express":{name:"Coles Express",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q5144653"},addTags:{amenity:"fuel",brand:"Coles Express","brand:wikidata":"Q5144653","brand:wikipedia":"en:Coles Express",name:"Coles Express"},removeTags:{amenity:"fuel",brand:"Coles Express","brand:wikidata":"Q5144653","brand:wikipedia":"en:Coles Express",name:"Coles Express"},matchScore:2,suggestion:true},"amenity/fuel/Conoco":{name:"Conoco",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q1126518"},addTags:{amenity:"fuel",brand:"Conoco","brand:wikidata":"Q1126518","brand:wikipedia":"en:Conoco",name:"Conoco"},removeTags:{amenity:"fuel",brand:"Conoco","brand:wikidata":"Q1126518","brand:wikipedia":"en:Conoco",name:"Conoco"},matchScore:2,suggestion:true},"amenity/fuel/Copec":{name:"Copec",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q11681461"},addTags:{amenity:"fuel",brand:"Copec","brand:wikidata":"Q11681461","brand:wikipedia":"en:Empresas Copec",name:"Copec"},removeTags:{amenity:"fuel",brand:"Copec","brand:wikidata":"Q11681461","brand:wikipedia":"en:Empresas Copec",name:"Copec"},matchScore:2,suggestion:true},"amenity/fuel/Cosmo":{name:"Cosmo",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q2498318"},addTags:{amenity:"fuel",brand:"Cosmo","brand:wikidata":"Q2498318","brand:wikipedia":"en:Cosmo Oil Company",name:"Cosmo"},removeTags:{amenity:"fuel",brand:"Cosmo","brand:wikidata":"Q2498318","brand:wikipedia":"en:Cosmo Oil Company",name:"Cosmo"},matchScore:2,suggestion:true},"amenity/fuel/Costco Gasoline":{name:"Costco Gasoline",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q715583"},addTags:{amenity:"fuel",brand:"Costco Gasoline","brand:wikidata":"Q715583","brand:wikipedia":"en:Costco",name:"Costco Gasoline"},removeTags:{amenity:"fuel",brand:"Costco Gasoline","brand:wikidata":"Q715583","brand:wikipedia":"en:Costco",name:"Costco Gasoline"},matchScore:2,suggestion:true},"amenity/fuel/Couche-Tard":{name:"Couche-Tard",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q2836957"},addTags:{amenity:"fuel",brand:"Couche-Tard","brand:wikidata":"Q2836957","brand:wikipedia":"en:Alimentation Couche-Tard",name:"Couche-Tard"},removeTags:{amenity:"fuel",brand:"Couche-Tard","brand:wikidata":"Q2836957","brand:wikipedia":"en:Alimentation Couche-Tard",name:"Couche-Tard"},matchScore:2,suggestion:true},"amenity/fuel/Cumberland Farms":{name:"Cumberland Farms",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q1143685"},addTags:{amenity:"fuel",brand:"Cumberland Farms","brand:wikidata":"Q1143685","brand:wikipedia":"en:Cumberland Farms",name:"Cumberland Farms"},removeTags:{amenity:"fuel",brand:"Cumberland Farms","brand:wikidata":"Q1143685","brand:wikipedia":"en:Cumberland Farms",name:"Cumberland Farms"},matchScore:2,suggestion:true},"amenity/fuel/Diamond Shamrock":{name:"Diamond Shamrock",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q16973722"},addTags:{amenity:"fuel",brand:"Diamond Shamrock","brand:wikidata":"Q16973722","brand:wikipedia":"en:Diamond Shamrock",name:"Diamond Shamrock"},removeTags:{amenity:"fuel",brand:"Diamond Shamrock","brand:wikidata":"Q16973722","brand:wikipedia":"en:Diamond Shamrock",name:"Diamond Shamrock"},matchScore:2,suggestion:true},"amenity/fuel/Domo":{name:"Domo",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q5291326"},addTags:{amenity:"fuel",brand:"Domo","brand:wikidata":"Q5291326","brand:wikipedia":"en:Domo Gasoline",name:"Domo"},removeTags:{amenity:"fuel",brand:"Domo","brand:wikidata":"Q5291326","brand:wikipedia":"en:Domo Gasoline",name:"Domo"},matchScore:2,suggestion:true},"amenity/fuel/EKO (Canada)":{name:"EKO (Canada)",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q3045934"},addTags:{amenity:"fuel",brand:"EKO","brand:wikidata":"Q3045934","brand:wikipedia":"fr:EKO",name:"EKO"},removeTags:{amenity:"fuel",brand:"EKO","brand:wikidata":"Q3045934","brand:wikipedia":"fr:EKO",name:"EKO"},matchScore:2,suggestion:true},"amenity/fuel/EKO (Greece)":{name:"EKO (Greece)",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q903198"},addTags:{amenity:"fuel",brand:"EKO","brand:wikidata":"Q903198","brand:wikipedia":"el:Ελληνικά Πετρέλαια",name:"EKO"},removeTags:{amenity:"fuel",brand:"EKO","brand:wikidata":"Q903198","brand:wikipedia":"el:Ελληνικά Πετρέλαια",name:"EKO"},matchScore:2,suggestion:true},"amenity/fuel/ENEOS":{name:"ENEOS",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q1640290"},addTags:{amenity:"fuel",brand:"ENEOS","brand:wikidata":"Q1640290","brand:wikipedia":"en:JXTG Nippon Oil & Energy",name:"ENEOS"},removeTags:{amenity:"fuel",brand:"ENEOS","brand:wikidata":"Q1640290","brand:wikipedia":"en:JXTG Nippon Oil & Energy",name:"ENEOS"},matchScore:2,suggestion:true},"amenity/fuel/Elan":{name:"Elan",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q57980752"},addTags:{amenity:"fuel",brand:"Elan","brand:wikidata":"Q57980752",name:"Elan"},removeTags:{amenity:"fuel",brand:"Elan","brand:wikidata":"Q57980752",name:"Elan"},matchScore:2,suggestion:true},"amenity/fuel/Engen":{name:"Engen",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q3054251"},addTags:{amenity:"fuel",brand:"Engen","brand:wikidata":"Q3054251","brand:wikipedia":"en:Engen Petroleum",name:"Engen"},removeTags:{amenity:"fuel",brand:"Engen","brand:wikidata":"Q3054251","brand:wikipedia":"en:Engen Petroleum",name:"Engen"},matchScore:2,suggestion:true},"amenity/fuel/Eni":{name:"Eni",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q565594"},addTags:{amenity:"fuel",brand:"Eni","brand:wikidata":"Q565594","brand:wikipedia":"en:Eni",name:"Eni"},removeTags:{amenity:"fuel",brand:"Eni","brand:wikidata":"Q565594","brand:wikipedia":"en:Eni",name:"Eni"},matchScore:2,suggestion:true},"amenity/fuel/Erg":{name:"Erg",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q739503"},addTags:{amenity:"fuel",brand:"Erg","brand:wikidata":"Q739503","brand:wikipedia":"it:ERG (azienda)",name:"Erg"},removeTags:{amenity:"fuel",brand:"Erg","brand:wikidata":"Q739503","brand:wikipedia":"it:ERG (azienda)",name:"Erg"},matchScore:2,suggestion:true},"amenity/fuel/Esso":{name:"Esso",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q867662"},addTags:{amenity:"fuel",brand:"Esso","brand:wikidata":"Q867662","brand:wikipedia":"en:Esso",name:"Esso"},removeTags:{amenity:"fuel",brand:"Esso","brand:wikidata":"Q867662","brand:wikipedia":"en:Esso",name:"Esso"},matchScore:2,suggestion:true},"amenity/fuel/Esso Express":{name:"Esso Express",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q2350336"},addTags:{amenity:"fuel",brand:"Esso Express","brand:wikidata":"Q2350336","brand:wikipedia":"nl:Esso Express",name:"Esso Express"},removeTags:{amenity:"fuel",brand:"Esso Express","brand:wikidata":"Q2350336","brand:wikipedia":"nl:Esso Express",name:"Esso Express"},matchScore:2,suggestion:true},"amenity/fuel/Exxon":{name:"Exxon",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q4781944"},addTags:{amenity:"fuel",brand:"Exxon","brand:wikidata":"Q4781944","brand:wikipedia":"en:Exxon",name:"Exxon"},removeTags:{amenity:"fuel",brand:"Exxon","brand:wikidata":"Q4781944","brand:wikipedia":"en:Exxon",name:"Exxon"},matchScore:2,suggestion:true},"amenity/fuel/Firezone":{name:"Firezone",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q14628080"},addTags:{amenity:"fuel",brand:"Firezone","brand:wikidata":"Q14628080","brand:wikipedia":"nl:Firezone",name:"Firezone"},removeTags:{amenity:"fuel",brand:"Firezone","brand:wikidata":"Q14628080","brand:wikipedia":"nl:Firezone",name:"Firezone"},matchScore:2,suggestion:true},"amenity/fuel/Flying J":{name:"Flying J",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q1434601"},addTags:{amenity:"fuel",brand:"Flying J","brand:wikidata":"Q1434601","brand:wikipedia":"en:Pilot Flying J",name:"Flying J"},removeTags:{amenity:"fuel",brand:"Flying J","brand:wikidata":"Q1434601","brand:wikipedia":"en:Pilot Flying J",name:"Flying J"},matchScore:2,suggestion:true},"amenity/fuel/Freie Tankstelle":{name:"Freie Tankstelle",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q1009104"},addTags:{amenity:"fuel",brand:"Freie Tankstelle","brand:wikidata":"Q1009104","brand:wikipedia":"de:Bundesverband freier Tankstellen",name:"Freie Tankstelle"},removeTags:{amenity:"fuel",brand:"Freie Tankstelle","brand:wikidata":"Q1009104","brand:wikipedia":"de:Bundesverband freier Tankstellen",name:"Freie Tankstelle"},matchScore:2,suggestion:true},"amenity/fuel/GALP":{name:"GALP",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q1492739"},addTags:{amenity:"fuel",brand:"GALP","brand:wikidata":"Q1492739","brand:wikipedia":"en:Galp Energia",name:"GALP"},removeTags:{amenity:"fuel",brand:"GALP","brand:wikidata":"Q1492739","brand:wikipedia":"en:Galp Energia",name:"GALP"},matchScore:2,suggestion:true},"amenity/fuel/Gazprom":{name:"Gazprom",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q102673"},addTags:{amenity:"fuel",brand:"Gazprom","brand:wikidata":"Q102673","brand:wikipedia":"en:Gazprom",name:"Gazprom"},removeTags:{amenity:"fuel",brand:"Gazprom","brand:wikidata":"Q102673","brand:wikipedia":"en:Gazprom",name:"Gazprom"},matchScore:2,suggestion:true},"amenity/fuel/GetGo":{name:"GetGo",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q5553766"},addTags:{amenity:"fuel",brand:"GetGo","brand:wikidata":"Q5553766","brand:wikipedia":"en:GetGo",name:"GetGo"},removeTags:{amenity:"fuel",brand:"GetGo","brand:wikidata":"Q5553766","brand:wikipedia":"en:GetGo",name:"GetGo"},matchScore:2,suggestion:true},"amenity/fuel/Goil":{name:"Goil",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q5555383"},addTags:{amenity:"fuel",brand:"Goil","brand:wikidata":"Q5555383","brand:wikipedia":"en:Ghana Oil Company",name:"Goil"},removeTags:{amenity:"fuel",brand:"Goil","brand:wikidata":"Q5555383","brand:wikipedia":"en:Ghana Oil Company",name:"Goil"},matchScore:2,suggestion:true},"amenity/fuel/Gulf":{name:"Gulf",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q1296860"},addTags:{amenity:"fuel",brand:"Gulf","brand:wikidata":"Q1296860","brand:wikipedia":"en:Gulf Oil",name:"Gulf"},removeTags:{amenity:"fuel",brand:"Gulf","brand:wikidata":"Q1296860","brand:wikipedia":"en:Gulf Oil",name:"Gulf"},matchScore:2,suggestion:true},"amenity/fuel/Gull":{name:"Gull",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q5617739"},addTags:{amenity:"fuel",brand:"Gull","brand:wikidata":"Q5617739","brand:wikipedia":"en:Gull Petroleum",name:"Gull"},removeTags:{amenity:"fuel",brand:"Gull","brand:wikidata":"Q5617739","brand:wikipedia":"en:Gull Petroleum",name:"Gull"},matchScore:2,suggestion:true},"amenity/fuel/H-E-B Fuel":{name:"H-E-B Fuel",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q830621"},addTags:{amenity:"fuel",brand:"H-E-B Fuel","brand:wikidata":"Q830621","brand:wikipedia":"en:H-E-B",name:"H-E-B Fuel"},removeTags:{amenity:"fuel",brand:"H-E-B Fuel","brand:wikidata":"Q830621","brand:wikipedia":"en:H-E-B",name:"H-E-B Fuel"},matchScore:2,suggestion:true},"amenity/fuel/HEM":{name:"HEM",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q1563517"},addTags:{amenity:"fuel",brand:"HEM","brand:wikidata":"Q1563517","brand:wikipedia":"de:Deutsche Tamoil",name:"HEM"},removeTags:{amenity:"fuel",brand:"HEM","brand:wikidata":"Q1563517","brand:wikipedia":"de:Deutsche Tamoil",name:"HEM"},matchScore:2,suggestion:true},"amenity/fuel/Hess":{name:"Hess",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q1615684"},addTags:{amenity:"fuel",brand:"Hess","brand:wikidata":"Q1615684","brand:wikipedia":"en:Hess Corporation",name:"Hess"},removeTags:{amenity:"fuel",brand:"Hess","brand:wikidata":"Q1615684","brand:wikipedia":"en:Hess Corporation",name:"Hess"},matchScore:2,suggestion:true},"amenity/fuel/Hindustan Petroleum":{name:"Hindustan Petroleum",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q1619375"},addTags:{amenity:"fuel",brand:"Hindustan Petroleum","brand:wikidata":"Q1619375","brand:wikipedia":"en:Hindustan Petroleum",name:"Hindustan Petroleum"},removeTags:{amenity:"fuel",brand:"Hindustan Petroleum","brand:wikidata":"Q1619375","brand:wikipedia":"en:Hindustan Petroleum",name:"Hindustan Petroleum"},matchScore:2,suggestion:true},"amenity/fuel/Hofer":{name:"Hofer",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q15815751"},addTags:{amenity:"fuel",brand:"Hofer","brand:wikidata":"Q15815751","brand:wikipedia":"de:Hofer KG",name:"Hofer"},removeTags:{amenity:"fuel",brand:"Hofer","brand:wikidata":"Q15815751","brand:wikipedia":"de:Hofer KG",name:"Hofer"},matchScore:2,suggestion:true},"amenity/fuel/Holiday":{name:"Holiday",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q5880490"},addTags:{amenity:"fuel",brand:"Holiday","brand:wikidata":"Q5880490","brand:wikipedia":"en:Holiday Stationstores",name:"Holiday"},removeTags:{amenity:"fuel",brand:"Holiday","brand:wikidata":"Q5880490","brand:wikipedia":"en:Holiday Stationstores",name:"Holiday"},matchScore:2,suggestion:true},"amenity/fuel/IP":{name:"IP",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q646807"},addTags:{amenity:"fuel",brand:"IP","brand:wikidata":"Q646807","brand:wikipedia":"en:Anonima Petroli Italiana",name:"IP"},removeTags:{amenity:"fuel",brand:"IP","brand:wikidata":"Q646807","brand:wikipedia":"en:Anonima Petroli Italiana",name:"IP"},matchScore:2,suggestion:true},"amenity/fuel/Indian Oil":{name:"Indian Oil",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q1289348"},addTags:{amenity:"fuel",brand:"Indian Oil","brand:wikidata":"Q1289348","brand:wikipedia":"en:Indian Oil Corporation",name:"Indian Oil"},removeTags:{amenity:"fuel",brand:"Indian Oil","brand:wikidata":"Q1289348","brand:wikipedia":"en:Indian Oil Corporation",name:"Indian Oil"},matchScore:2,suggestion:true},"amenity/fuel/Ingo":{name:"Ingo",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q17048617"},addTags:{amenity:"fuel",brand:"Ingo","brand:wikidata":"Q17048617","brand:wikipedia":"en:Ingo (brand)",name:"Ingo"},removeTags:{amenity:"fuel",brand:"Ingo","brand:wikidata":"Q17048617","brand:wikipedia":"en:Ingo (brand)",name:"Ingo"},matchScore:2,suggestion:true},"amenity/fuel/Intermarché":{name:"Intermarché",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q3153200"},addTags:{amenity:"fuel",brand:"Intermarché","brand:wikidata":"Q3153200","brand:wikipedia":"fr:Intermarché",name:"Intermarché"},removeTags:{amenity:"fuel",brand:"Intermarché","brand:wikidata":"Q3153200","brand:wikipedia":"fr:Intermarché",name:"Intermarché"},matchScore:2,suggestion:true},"amenity/fuel/Ipiranga":{name:"Ipiranga",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q2081136"},addTags:{amenity:"fuel",brand:"Ipiranga","brand:wikidata":"Q2081136","brand:wikipedia":"pt:Ipiranga (empresa)",name:"Ipiranga"},removeTags:{amenity:"fuel",brand:"Ipiranga","brand:wikidata":"Q2081136","brand:wikipedia":"pt:Ipiranga (empresa)",name:"Ipiranga"},matchScore:2,suggestion:true},"amenity/fuel/Irving":{name:"Irving",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q1673286"},addTags:{amenity:"fuel",brand:"Irving","brand:wikidata":"Q1673286","brand:wikipedia":"en:Irving Oil",name:"Irving"},removeTags:{amenity:"fuel",brand:"Irving","brand:wikidata":"Q1673286","brand:wikipedia":"en:Irving Oil",name:"Irving"},matchScore:2,suggestion:true},"amenity/fuel/JA-SS":{name:"JA-SS",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q11225213"},addTags:{amenity:"fuel",brand:"JA-SS","brand:wikidata":"Q11225213","brand:wikipedia":"ja:JA-SS",name:"JA-SS"},removeTags:{amenity:"fuel",brand:"JA-SS","brand:wikidata":"Q11225213","brand:wikipedia":"ja:JA-SS",name:"JA-SS"},matchScore:2,suggestion:true},"amenity/fuel/Jet":{name:"Jet",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q568940"},addTags:{amenity:"fuel",brand:"Jet","brand:wikidata":"Q568940","brand:wikipedia":"en:Jet (brand)",name:"Jet"},removeTags:{amenity:"fuel",brand:"Jet","brand:wikidata":"Q568940","brand:wikipedia":"en:Jet (brand)",name:"Jet"},matchScore:2,suggestion:true},"amenity/fuel/Kobil":{name:"Kobil",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q22906119"},addTags:{amenity:"fuel",brand:"Kobil","brand:wikidata":"Q22906119","brand:wikipedia":"en:KenolKobil",name:"Kobil"},removeTags:{amenity:"fuel",brand:"Kobil","brand:wikidata":"Q22906119","brand:wikipedia":"en:KenolKobil",name:"Kobil"},matchScore:2,suggestion:true},"amenity/fuel/Kroger":{name:"Kroger",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q153417"},addTags:{amenity:"fuel",brand:"Kroger","brand:wikidata":"Q153417","brand:wikipedia":"en:Kroger",name:"Kroger"},removeTags:{amenity:"fuel",brand:"Kroger","brand:wikidata":"Q153417","brand:wikipedia":"en:Kroger",name:"Kroger"},matchScore:2,suggestion:true},"amenity/fuel/Kum & Go":{name:"Kum & Go",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q6443340"},addTags:{amenity:"fuel",brand:"Kum & Go","brand:wikidata":"Q6443340","brand:wikipedia":"en:Kum & Go",name:"Kum & Go"},removeTags:{amenity:"fuel",brand:"Kum & Go","brand:wikidata":"Q6443340","brand:wikipedia":"en:Kum & Go",name:"Kum & Go"},matchScore:2,suggestion:true},"amenity/fuel/Kwik Trip":{name:"Kwik Trip",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q6450420"},addTags:{amenity:"fuel",brand:"Kwik Trip","brand:wikidata":"Q6450420","brand:wikipedia":"en:Kwik Trip",name:"Kwik Trip"},removeTags:{amenity:"fuel",brand:"Kwik Trip","brand:wikidata":"Q6450420","brand:wikipedia":"en:Kwik Trip",name:"Kwik Trip"},matchScore:2,suggestion:true},"amenity/fuel/Lotos":{name:"Lotos",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q1256909"},addTags:{amenity:"fuel",brand:"Lotos","brand:wikidata":"Q1256909","brand:wikipedia":"en:Grupa Lotos",name:"Lotos"},removeTags:{amenity:"fuel",brand:"Lotos","brand:wikidata":"Q1256909","brand:wikipedia":"en:Grupa Lotos",name:"Lotos"},matchScore:2,suggestion:true},"amenity/fuel/Love's":{name:"Love's",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q1872496"},addTags:{amenity:"fuel",brand:"Love's","brand:wikidata":"Q1872496","brand:wikipedia":"en:Love's Travel Stops & Country Stores",name:"Love's"},removeTags:{amenity:"fuel",brand:"Love's","brand:wikidata":"Q1872496","brand:wikipedia":"en:Love's Travel Stops & Country Stores",name:"Love's"},matchScore:2,suggestion:true},"amenity/fuel/Lukoil":{name:"Lukoil",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q329347"},addTags:{amenity:"fuel",brand:"Lukoil","brand:wikidata":"Q329347","brand:wikipedia":"en:Lukoil",name:"Lukoil"},removeTags:{amenity:"fuel",brand:"Lukoil","brand:wikidata":"Q329347","brand:wikipedia":"en:Lukoil",name:"Lukoil"},matchScore:2,suggestion:true},"amenity/fuel/MOL":{name:"MOL",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q549181"},addTags:{amenity:"fuel",brand:"MOL","brand:wikidata":"Q549181","brand:wikipedia":"en:MOL (company)",name:"MOL"},removeTags:{amenity:"fuel",brand:"MOL","brand:wikidata":"Q549181","brand:wikipedia":"en:MOL (company)",name:"MOL"},matchScore:2,suggestion:true},"amenity/fuel/MRS":{name:"MRS",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q56274919"},addTags:{amenity:"fuel",brand:"MRS","brand:wikidata":"Q56274919","brand:wikipedia":"en:MRS Oil Nigeria Plc",name:"MRS"},removeTags:{amenity:"fuel",brand:"MRS","brand:wikidata":"Q56274919","brand:wikipedia":"en:MRS Oil Nigeria Plc",name:"MRS"},matchScore:2,suggestion:true},"amenity/fuel/Mac's":{name:"Mac's",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q4043527"},addTags:{amenity:"fuel",brand:"Mac's","brand:wikidata":"Q4043527","brand:wikipedia":"en:Mac's Convenience Stores",name:"Mac's"},removeTags:{amenity:"fuel",brand:"Mac's","brand:wikidata":"Q4043527","brand:wikipedia":"en:Mac's Convenience Stores",name:"Mac's"},matchScore:2,suggestion:true},"amenity/fuel/Marathon":{name:"Marathon",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q458363"},addTags:{amenity:"fuel",brand:"Marathon","brand:wikidata":"Q458363","brand:wikipedia":"en:Marathon Petroleum",name:"Marathon"},removeTags:{amenity:"fuel",brand:"Marathon","brand:wikidata":"Q458363","brand:wikipedia":"en:Marathon Petroleum",name:"Marathon"},matchScore:2,suggestion:true},"amenity/fuel/Maverik":{name:"Maverik",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q16974822"},addTags:{amenity:"fuel",brand:"Maverik","brand:wikidata":"Q16974822","brand:wikipedia":"en:FJ Management",name:"Maverik"},removeTags:{amenity:"fuel",brand:"Maverik","brand:wikidata":"Q16974822","brand:wikipedia":"en:FJ Management",name:"Maverik"},matchScore:2,suggestion:true},"amenity/fuel/Maxol":{name:"Maxol",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q3302837"},addTags:{amenity:"fuel",brand:"Maxol","brand:wikidata":"Q3302837","brand:wikipedia":"en:Maxol",name:"Maxol"},removeTags:{amenity:"fuel",brand:"Maxol","brand:wikidata":"Q3302837","brand:wikipedia":"en:Maxol",name:"Maxol"},matchScore:2,suggestion:true},"amenity/fuel/Migrol":{name:"Migrol",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q1747771"},addTags:{amenity:"fuel",brand:"Migrol","brand:wikidata":"Q1747771","brand:wikipedia":"de:Migrol",name:"Migrol"},removeTags:{amenity:"fuel",brand:"Migrol","brand:wikidata":"Q1747771","brand:wikipedia":"de:Migrol",name:"Migrol"},matchScore:2,suggestion:true},"amenity/fuel/Mobil":{name:"Mobil",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q3088656"},addTags:{amenity:"fuel",brand:"Mobil","brand:wikidata":"Q3088656","brand:wikipedia":"en:Mobil",name:"Mobil"},removeTags:{amenity:"fuel",brand:"Mobil","brand:wikidata":"Q3088656","brand:wikipedia":"en:Mobil",name:"Mobil"},matchScore:2,suggestion:true},"amenity/fuel/Morrisons":{name:"Morrisons",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q922344"},addTags:{amenity:"fuel",brand:"Morrisons","brand:wikidata":"Q922344","brand:wikipedia":"en:Morrisons",name:"Morrisons"},removeTags:{amenity:"fuel",brand:"Morrisons","brand:wikidata":"Q922344","brand:wikipedia":"en:Morrisons",name:"Morrisons"},matchScore:2,suggestion:true},"amenity/fuel/Murphy USA":{name:"Murphy USA",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q19604459"},addTags:{amenity:"fuel",brand:"Murphy USA","brand:wikidata":"Q19604459","brand:wikipedia":"en:Murphy USA",name:"Murphy USA"},removeTags:{amenity:"fuel",brand:"Murphy USA","brand:wikidata":"Q19604459","brand:wikipedia":"en:Murphy USA",name:"Murphy USA"},matchScore:2,suggestion:true},"amenity/fuel/NP":{name:"NP",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q7842382"},addTags:{amenity:"fuel",brand:"NP","brand:wikidata":"Q7842382","brand:wikipedia":"en:Trinidad & Tobago National Petroleum Marketing Company Limited",name:"NP"},removeTags:{amenity:"fuel",brand:"NP","brand:wikidata":"Q7842382","brand:wikipedia":"en:Trinidad & Tobago National Petroleum Marketing Company Limited",name:"NP"},matchScore:2,suggestion:true},"amenity/fuel/Neste":{name:"Neste",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q616376"},addTags:{amenity:"fuel",brand:"Neste","brand:wikidata":"Q616376","brand:wikipedia":"en:Neste",name:"Neste"},removeTags:{amenity:"fuel",brand:"Neste","brand:wikidata":"Q616376","brand:wikipedia":"en:Neste",name:"Neste"},matchScore:2,suggestion:true},"amenity/fuel/OIL!":{name:"OIL!",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q2007561"},addTags:{amenity:"fuel",brand:"OIL!","brand:wikidata":"Q2007561","brand:wikipedia":"de:OIL! Tankstellen",name:"OIL!"},removeTags:{amenity:"fuel",brand:"OIL!","brand:wikidata":"Q2007561","brand:wikipedia":"de:OIL! Tankstellen",name:"OIL!"},matchScore:2,suggestion:true},"amenity/fuel/OK":{name:"OK",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q12329785"},addTags:{amenity:"fuel",brand:"OK","brand:wikidata":"Q12329785","brand:wikipedia":"da:OK a.m.b.a.",name:"OK"},removeTags:{amenity:"fuel",brand:"OK","brand:wikidata":"Q12329785","brand:wikipedia":"da:OK a.m.b.a.",name:"OK"},matchScore:2,suggestion:true},"amenity/fuel/OKQ8":{name:"OKQ8",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q1634762"},addTags:{amenity:"fuel",brand:"OKQ8","brand:wikidata":"Q1634762","brand:wikipedia":"en:Kuwait Petroleum Corporation",name:"OKQ8"},removeTags:{amenity:"fuel",brand:"OKQ8","brand:wikidata":"Q1634762","brand:wikipedia":"en:Kuwait Petroleum Corporation",name:"OKQ8"},matchScore:2,suggestion:true},"amenity/fuel/OMV":{name:"OMV",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q168238"},addTags:{amenity:"fuel",brand:"OMV","brand:wikidata":"Q168238","brand:wikipedia":"en:OMV",name:"OMV"},removeTags:{amenity:"fuel",brand:"OMV","brand:wikidata":"Q168238","brand:wikipedia":"en:OMV",name:"OMV"},matchScore:2,suggestion:true},"amenity/fuel/Oilibya":{name:"Oilibya",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q7081491"},addTags:{amenity:"fuel",brand:"Oilibya","brand:wikidata":"Q7081491","brand:wikipedia":"en:Oilibya",name:"Oilibya","name:ar":"أويليبيا"},removeTags:{amenity:"fuel",brand:"Oilibya","brand:wikidata":"Q7081491","brand:wikipedia":"en:Oilibya",name:"Oilibya","name:ar":"أويليبيا"},matchScore:2,suggestion:true},"amenity/fuel/Opet":{name:"Opet",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q7072824"},addTags:{amenity:"fuel",brand:"Opet","brand:wikidata":"Q7072824","brand:wikipedia":"en:Opet",name:"Opet"},removeTags:{amenity:"fuel",brand:"Opet","brand:wikidata":"Q7072824","brand:wikipedia":"en:Opet",name:"Opet"},matchScore:2,suggestion:true},"amenity/fuel/Orlen":{name:"Orlen",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q971649"},addTags:{amenity:"fuel",brand:"Orlen","brand:wikidata":"Q971649","brand:wikipedia":"en:PKN Orlen",name:"Orlen"},removeTags:{amenity:"fuel",brand:"Orlen","brand:wikidata":"Q971649","brand:wikipedia":"en:PKN Orlen",name:"Orlen"},matchScore:2,suggestion:true},"amenity/fuel/Oxxo":{name:"Oxxo",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q1342538"},addTags:{brand:"Oxxo","brand:wikidata":"Q1342538","brand:wikipedia":"es:Oxxo",name:"Oxxo",amenity:"fuel"},removeTags:{brand:"Oxxo","brand:wikidata":"Q1342538","brand:wikipedia":"es:Oxxo",name:"Oxxo",amenity:"fuel"},matchScore:2,suggestion:true},"amenity/fuel/PSO":{name:"PSO",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q2741455"},addTags:{amenity:"fuel",brand:"PSO","brand:wikidata":"Q2741455","brand:wikipedia":"en:Pakistan State Oil",name:"PSO"},removeTags:{amenity:"fuel",brand:"PSO","brand:wikidata":"Q2741455","brand:wikipedia":"en:Pakistan State Oil",name:"PSO"},matchScore:2,suggestion:true},"amenity/fuel/PTT":{name:"PTT",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q1810389"},addTags:{amenity:"fuel",brand:"PTT","brand:wikidata":"Q1810389","brand:wikipedia":"en:PTT Public Company Limited",name:"PTT"},removeTags:{amenity:"fuel",brand:"PTT","brand:wikidata":"Q1810389","brand:wikipedia":"en:PTT Public Company Limited",name:"PTT"},matchScore:2,suggestion:true},"amenity/fuel/PV Oil":{name:"PV Oil",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q2089536"},addTags:{amenity:"fuel",brand:"PV Oil","brand:wikidata":"Q2089536","brand:wikipedia":"en:Petrovietnam",name:"PV Oil"},removeTags:{amenity:"fuel",brand:"PV Oil","brand:wikidata":"Q2089536","brand:wikipedia":"en:Petrovietnam",name:"PV Oil"},matchScore:2,suggestion:true},"amenity/fuel/Pacific Pride":{name:"Pacific Pride",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q7122637"},addTags:{amenity:"fuel",brand:"Pacific Pride","brand:wikidata":"Q7122637","brand:wikipedia":"en:Pacific Pride",name:"Pacific Pride"},removeTags:{amenity:"fuel",brand:"Pacific Pride","brand:wikidata":"Q7122637","brand:wikipedia":"en:Pacific Pride",name:"Pacific Pride"},matchScore:2,suggestion:true},"amenity/fuel/Pemex":{name:"Pemex",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q871308"},addTags:{amenity:"fuel",brand:"Pemex","brand:wikidata":"Q871308","brand:wikipedia":"en:Pemex",name:"Pemex"},removeTags:{amenity:"fuel",brand:"Pemex","brand:wikidata":"Q871308","brand:wikipedia":"en:Pemex",name:"Pemex"},matchScore:2,suggestion:true},"amenity/fuel/Pertamina":{name:"Pertamina",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q1641044"},addTags:{amenity:"fuel",brand:"Pertamina","brand:wikidata":"Q1641044","brand:wikipedia":"en:Pertamina",name:"Pertamina"},removeTags:{amenity:"fuel",brand:"Pertamina","brand:wikidata":"Q1641044","brand:wikipedia":"en:Pertamina",name:"Pertamina"},matchScore:2,suggestion:true},"amenity/fuel/PetroPerú":{name:"PetroPerú",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q2506390"},addTags:{amenity:"fuel",brand:"PetroPerú","brand:wikidata":"Q2506390","brand:wikipedia":"es:Petroperú",name:"PetroPerú"},removeTags:{amenity:"fuel",brand:"PetroPerú","brand:wikidata":"Q2506390","brand:wikipedia":"es:Petroperú",name:"PetroPerú"},matchScore:2,suggestion:true},"amenity/fuel/Petrochina":{name:"Petrochina",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q503182"},addTags:{amenity:"fuel",brand:"Petrochina","brand:wikidata":"Q503182","brand:wikipedia":"en:PetroChina",name:"Petrochina"},removeTags:{amenity:"fuel",brand:"Petrochina","brand:wikidata":"Q503182","brand:wikipedia":"en:PetroChina",name:"Petrochina"},matchScore:2,suggestion:true},"amenity/fuel/Petroecuador":{name:"Petroecuador",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q1812822"},addTags:{amenity:"fuel",brand:"Petroecuador","brand:wikidata":"Q1812822","brand:wikipedia":"en:Petroecuador",name:"Petroecuador"},removeTags:{amenity:"fuel",brand:"Petroecuador","brand:wikidata":"Q1812822","brand:wikipedia":"en:Petroecuador",name:"Petroecuador"},matchScore:2,suggestion:true},"amenity/fuel/Petrol Ofisi":{name:"Petrol Ofisi",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q1278087"},addTags:{amenity:"fuel",brand:"Petrol Ofisi","brand:wikidata":"Q1278087","brand:wikipedia":"en:Petrol Ofisi",name:"Petrol Ofisi"},removeTags:{amenity:"fuel",brand:"Petrol Ofisi","brand:wikidata":"Q1278087","brand:wikipedia":"en:Petrol Ofisi",name:"Petrol Ofisi"},matchScore:2,suggestion:true},"amenity/fuel/Petrolimex":{name:"Petrolimex",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q10831598"},addTags:{amenity:"fuel",brand:"Petrolimex","brand:wikidata":"Q10831598","brand:wikipedia":"en:Petrolimex",name:"Petrolimex"},removeTags:{amenity:"fuel",brand:"Petrolimex","brand:wikidata":"Q10831598","brand:wikipedia":"en:Petrolimex",name:"Petrolimex"},matchScore:2,suggestion:true},"amenity/fuel/Petrolina":{name:"Petrolina",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q17013948"},addTags:{amenity:"fuel",brand:"Petrolina","brand:wikidata":"Q17013948","brand:wikipedia":"en:Petrolina (company)",name:"Petrolina"},removeTags:{amenity:"fuel",brand:"Petrolina","brand:wikidata":"Q17013948","brand:wikipedia":"en:Petrolina (company)",name:"Petrolina"},matchScore:2,suggestion:true},"amenity/fuel/Petrom":{name:"Petrom",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q1755034"},addTags:{amenity:"fuel",brand:"Petrom","brand:wikidata":"Q1755034","brand:wikipedia":"en:Petrom",name:"Petrom"},removeTags:{amenity:"fuel",brand:"Petrom","brand:wikidata":"Q1755034","brand:wikipedia":"en:Petrom",name:"Petrom"},matchScore:2,suggestion:true},"amenity/fuel/Petron":{name:"Petron",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q7179011"},addTags:{amenity:"fuel",brand:"Petron","brand:wikidata":"Q7179011","brand:wikipedia":"en:Petron Corporation",name:"Petron"},removeTags:{amenity:"fuel",brand:"Petron","brand:wikidata":"Q7179011","brand:wikipedia":"en:Petron Corporation",name:"Petron"},matchScore:2,suggestion:true},"amenity/fuel/Petronas":{name:"Petronas",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q221692"},addTags:{amenity:"fuel",brand:"Petronas","brand:wikidata":"Q221692","brand:wikipedia":"en:Petronas",name:"Petronas"},removeTags:{amenity:"fuel",brand:"Petronas","brand:wikidata":"Q221692","brand:wikipedia":"en:Petronas",name:"Petronas"},matchScore:2,suggestion:true},"amenity/fuel/Petronor":{name:"Petronor",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q1726547"},addTags:{amenity:"fuel",brand:"Petronor","brand:wikidata":"Q1726547","brand:wikipedia":"es:Petronor",name:"Petronor"},removeTags:{amenity:"fuel",brand:"Petronor","brand:wikidata":"Q1726547","brand:wikipedia":"es:Petronor",name:"Petronor"},matchScore:2,suggestion:true},"amenity/fuel/Phillips 66":{name:"Phillips 66",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q1656230"},addTags:{amenity:"fuel",brand:"Phillips 66","brand:wikidata":"Q1656230","brand:wikipedia":"en:Phillips 66",name:"Phillips 66"},removeTags:{amenity:"fuel",brand:"Phillips 66","brand:wikidata":"Q1656230","brand:wikipedia":"en:Phillips 66",name:"Phillips 66"},matchScore:2,suggestion:true},"amenity/fuel/Phoenix":{name:"Phoenix",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q7186949"},addTags:{amenity:"fuel",brand:"Phoenix","brand:wikidata":"Q7186949","brand:wikipedia":"en:Phoenix Petroleum",name:"Phoenix"},removeTags:{amenity:"fuel",brand:"Phoenix","brand:wikidata":"Q7186949","brand:wikipedia":"en:Phoenix Petroleum",name:"Phoenix"},matchScore:2,suggestion:true},"amenity/fuel/Pioneer":{name:"Pioneer",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q7196684"},addTags:{amenity:"fuel",brand:"Pioneer","brand:wikidata":"Q7196684","brand:wikipedia":"en:Pioneer Energy",name:"Pioneer"},removeTags:{amenity:"fuel",brand:"Pioneer","brand:wikidata":"Q7196684","brand:wikipedia":"en:Pioneer Energy",name:"Pioneer"},matchScore:2,suggestion:true},"amenity/fuel/Preem":{name:"Preem",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q598835"},addTags:{amenity:"fuel",brand:"Preem","brand:wikidata":"Q598835","brand:wikipedia":"en:Preem",name:"Preem"},removeTags:{amenity:"fuel",brand:"Preem","brand:wikidata":"Q598835","brand:wikipedia":"en:Preem",name:"Preem"},matchScore:2,suggestion:true},"amenity/fuel/Puma":{name:"Puma",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q7259769"},addTags:{amenity:"fuel",brand:"Puma","brand:wikidata":"Q7259769","brand:wikipedia":"en:Puma Energy",name:"Puma"},removeTags:{amenity:"fuel",brand:"Puma","brand:wikidata":"Q7259769","brand:wikipedia":"en:Puma Energy",name:"Puma"},matchScore:2,suggestion:true},"amenity/fuel/Q8":{name:"Q8",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q1634762"},addTags:{amenity:"fuel",brand:"Q8","brand:wikidata":"Q1634762","brand:wikipedia":"en:Kuwait Petroleum Corporation",name:"Q8"},removeTags:{amenity:"fuel",brand:"Q8","brand:wikidata":"Q1634762","brand:wikipedia":"en:Kuwait Petroleum Corporation",name:"Q8"},matchScore:2,suggestion:true},"amenity/fuel/Q8 Easy":{name:"Q8 Easy",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q1806948"},addTags:{amenity:"fuel",brand:"Q8 Easy","brand:wikidata":"Q1806948","brand:wikipedia":"nl:Q8 Easy",name:"Q8 Easy"},removeTags:{amenity:"fuel",brand:"Q8 Easy","brand:wikidata":"Q1806948","brand:wikipedia":"nl:Q8 Easy",name:"Q8 Easy"},matchScore:2,suggestion:true},"amenity/fuel/QT":{name:"QT",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q7271953"},addTags:{amenity:"fuel",brand:"QT","brand:wikidata":"Q7271953","brand:wikipedia":"en:QuikTrip",name:"QT"},removeTags:{amenity:"fuel",brand:"QT","brand:wikidata":"Q7271953","brand:wikipedia":"en:QuikTrip",name:"QT"},matchScore:2,suggestion:true},"amenity/fuel/Qstar":{name:"Qstar",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q10647961"},addTags:{amenity:"fuel",brand:"Qstar","brand:wikidata":"Q10647961","brand:wikipedia":"sv:Qstar",name:"Qstar"},removeTags:{amenity:"fuel",brand:"Qstar","brand:wikidata":"Q10647961","brand:wikipedia":"sv:Qstar",name:"Qstar"},matchScore:2,suggestion:true},"amenity/fuel/QuikTrip":{name:"QuikTrip",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q7271953"},addTags:{amenity:"fuel",brand:"QuikTrip","brand:wikidata":"Q7271953","brand:wikipedia":"en:QuikTrip",name:"QuikTrip"},removeTags:{amenity:"fuel",brand:"QuikTrip","brand:wikidata":"Q7271953","brand:wikipedia":"en:QuikTrip",name:"QuikTrip"},matchScore:2,suggestion:true},"amenity/fuel/Race Trac":{name:"Race Trac",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q735942"},addTags:{amenity:"fuel",brand:"Race Trac","brand:wikidata":"Q735942","brand:wikipedia":"en:RaceTrac",name:"Race Trac"},removeTags:{amenity:"fuel",brand:"Race Trac","brand:wikidata":"Q735942","brand:wikipedia":"en:RaceTrac",name:"Race Trac"},matchScore:2,suggestion:true},"amenity/fuel/Repsol":{name:"Repsol",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q174747"},addTags:{amenity:"fuel",brand:"Repsol","brand:wikidata":"Q174747","brand:wikipedia":"es:Repsol",name:"Repsol"},removeTags:{amenity:"fuel",brand:"Repsol","brand:wikidata":"Q174747","brand:wikipedia":"es:Repsol",name:"Repsol"},matchScore:2,suggestion:true},"amenity/fuel/Rompetrol":{name:"Rompetrol",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q1788862"},addTags:{amenity:"fuel",brand:"Rompetrol","brand:wikidata":"Q1788862","brand:wikipedia":"en:Rompetrol",name:"Rompetrol"},removeTags:{amenity:"fuel",brand:"Rompetrol","brand:wikidata":"Q1788862","brand:wikipedia":"en:Rompetrol",name:"Rompetrol"},matchScore:2,suggestion:true},"amenity/fuel/Royal Farms":{name:"Royal Farms",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q7374169"},addTags:{amenity:"fuel",brand:"Royal Farms","brand:wikidata":"Q7374169","brand:wikipedia":"en:Royal Farms",name:"Royal Farms"},removeTags:{amenity:"fuel",brand:"Royal Farms","brand:wikidata":"Q7374169","brand:wikipedia":"en:Royal Farms",name:"Royal Farms"},matchScore:2,suggestion:true},"amenity/fuel/Rubis":{name:"Rubis",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q3446514"},addTags:{amenity:"fuel",brand:"Rubis","brand:wikidata":"Q3446514","brand:wikipedia":"en:Rubis (company)",name:"Rubis"},removeTags:{amenity:"fuel",brand:"Rubis","brand:wikidata":"Q3446514","brand:wikipedia":"en:Rubis (company)",name:"Rubis"},matchScore:2,suggestion:true},"amenity/fuel/Safeway":{name:"Safeway",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q1508234"},addTags:{amenity:"fuel",brand:"Safeway","brand:wikidata":"Q1508234","brand:wikipedia":"en:Safeway Inc.",name:"Safeway"},removeTags:{amenity:"fuel",brand:"Safeway","brand:wikidata":"Q1508234","brand:wikipedia":"en:Safeway Inc.",name:"Safeway"},matchScore:2,suggestion:true},"amenity/fuel/Sainsbury's":{name:"Sainsbury's",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q152096"},addTags:{amenity:"fuel",brand:"Sainsbury's","brand:wikidata":"Q152096","brand:wikipedia":"en:Sainsbury's",name:"Sainsbury's"},removeTags:{amenity:"fuel",brand:"Sainsbury's","brand:wikidata":"Q152096","brand:wikipedia":"en:Sainsbury's",name:"Sainsbury's"},matchScore:2,suggestion:true},"amenity/fuel/Sam's Club":{name:"Sam's Club",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q1972120"},addTags:{amenity:"fuel",brand:"Sam's Club","brand:wikidata":"Q1972120","brand:wikipedia":"en:Sam's Club",name:"Sam's Club",operator:"Walmart","operator:wikidata":"Q483551","operator:wikipedia":"en:Walmart"},removeTags:{amenity:"fuel",brand:"Sam's Club","brand:wikidata":"Q1972120","brand:wikipedia":"en:Sam's Club",name:"Sam's Club",operator:"Walmart","operator:wikidata":"Q483551","operator:wikipedia":"en:Walmart"},matchScore:2,suggestion:true},"amenity/fuel/Sasol":{name:"Sasol",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q905998"},addTags:{amenity:"fuel",brand:"Sasol","brand:wikidata":"Q905998","brand:wikipedia":"en:Sasol",name:"Sasol"},removeTags:{amenity:"fuel",brand:"Sasol","brand:wikidata":"Q905998","brand:wikipedia":"en:Sasol",name:"Sasol"},matchScore:2,suggestion:true},"amenity/fuel/Sea Oil":{name:"Sea Oil",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q7389549"},addTags:{amenity:"fuel",brand:"Sea Oil","brand:wikidata":"Q7389549","brand:wikipedia":"en:Seaoil Philippines",name:"Sea Oil"},removeTags:{amenity:"fuel",brand:"Sea Oil","brand:wikidata":"Q7389549","brand:wikipedia":"en:Seaoil Philippines",name:"Sea Oil"},matchScore:2,suggestion:true},"amenity/fuel/Sheetz":{name:"Sheetz",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q7492551"},addTags:{amenity:"fuel",brand:"Sheetz","brand:wikidata":"Q7492551","brand:wikipedia":"en:Sheetz",name:"Sheetz"},removeTags:{amenity:"fuel",brand:"Sheetz","brand:wikidata":"Q7492551","brand:wikipedia":"en:Sheetz",name:"Sheetz"},matchScore:2,suggestion:true},"amenity/fuel/Shell":{name:"Shell",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q154950"},addTags:{amenity:"fuel",brand:"Shell","brand:wikidata":"Q154950","brand:wikipedia":"en:Royal Dutch Shell",name:"Shell"},removeTags:{amenity:"fuel",brand:"Shell","brand:wikidata":"Q154950","brand:wikipedia":"en:Royal Dutch Shell",name:"Shell"},matchScore:2,suggestion:true},"amenity/fuel/Shell Express":{name:"Shell Express",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q2289188"},addTags:{amenity:"fuel",brand:"Shell Express","brand:wikidata":"Q2289188","brand:wikipedia":"nl:Shell Express",name:"Shell Express"},removeTags:{amenity:"fuel",brand:"Shell Express","brand:wikidata":"Q2289188","brand:wikipedia":"nl:Shell Express",name:"Shell Express"},matchScore:2,suggestion:true},"amenity/fuel/Sinclair":{name:"Sinclair",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q1290900"},addTags:{amenity:"fuel",brand:"Sinclair","brand:wikidata":"Q1290900","brand:wikipedia":"en:Sinclair Oil Corporation",name:"Sinclair"},removeTags:{amenity:"fuel",brand:"Sinclair","brand:wikidata":"Q1290900","brand:wikipedia":"en:Sinclair Oil Corporation",name:"Sinclair"},matchScore:2,suggestion:true},"amenity/fuel/Sinopec":{name:"Sinopec",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q831445"},addTags:{amenity:"fuel",brand:"Sinopec","brand:wikidata":"Q831445","brand:wikipedia":"en:Sinopec",name:"Sinopec"},removeTags:{amenity:"fuel",brand:"Sinopec","brand:wikidata":"Q831445","brand:wikipedia":"en:Sinopec",name:"Sinopec"},matchScore:2,suggestion:true},"amenity/fuel/Slovnaft":{name:"Slovnaft",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q1587563"},addTags:{amenity:"fuel",brand:"Slovnaft","brand:wikidata":"Q1587563","brand:wikipedia":"en:Slovnaft",name:"Slovnaft"},removeTags:{amenity:"fuel",brand:"Slovnaft","brand:wikidata":"Q1587563","brand:wikipedia":"en:Slovnaft",name:"Slovnaft"},matchScore:2,suggestion:true},"amenity/fuel/Socar":{name:"Socar",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q1622293"},addTags:{amenity:"fuel",brand:"Socar","brand:wikidata":"Q1622293","brand:wikipedia":"en:SOCAR",name:"Socar"},removeTags:{amenity:"fuel",brand:"Socar","brand:wikidata":"Q1622293","brand:wikipedia":"en:SOCAR",name:"Socar"},matchScore:2,suggestion:true},"amenity/fuel/Sokimex":{name:"Sokimex",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q1149575"},addTags:{amenity:"fuel",brand:"Sokimex","brand:wikidata":"Q1149575","brand:wikipedia":"en:Sokimex",name:"Sokimex"},removeTags:{amenity:"fuel",brand:"Sokimex","brand:wikidata":"Q1149575","brand:wikipedia":"en:Sokimex",name:"Sokimex"},matchScore:2,suggestion:true},"amenity/fuel/Speedway":{name:"Speedway",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q7575683"},addTags:{amenity:"fuel",brand:"Speedway","brand:wikidata":"Q7575683","brand:wikipedia":"en:Speedway LLC",name:"Speedway"},removeTags:{amenity:"fuel",brand:"Speedway","brand:wikidata":"Q7575683","brand:wikipedia":"en:Speedway LLC",name:"Speedway"},matchScore:2,suggestion:true},"amenity/fuel/Sprint":{name:"Sprint",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q57588452"},addTags:{amenity:"fuel",brand:"Sprint","brand:wikidata":"Q57588452",name:"Sprint"},removeTags:{amenity:"fuel",brand:"Sprint","brand:wikidata":"Q57588452",name:"Sprint"},matchScore:2,suggestion:true},"amenity/fuel/St1":{name:"St1",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q7592214"},addTags:{amenity:"fuel",brand:"St1","brand:wikidata":"Q7592214","brand:wikipedia":"en:St1",name:"St1"},removeTags:{amenity:"fuel",brand:"St1","brand:wikidata":"Q7592214","brand:wikipedia":"en:St1",name:"St1"},matchScore:2,suggestion:true},"amenity/fuel/Star":{name:"Star",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q2031095"},addTags:{amenity:"fuel",brand:"Star","brand:wikidata":"Q2031095","brand:wikipedia":"de:Orlen Deutschland",name:"Star"},removeTags:{amenity:"fuel",brand:"Star","brand:wikidata":"Q2031095","brand:wikipedia":"de:Orlen Deutschland",name:"Star"},matchScore:2,suggestion:true},"amenity/fuel/Statoil":{name:"Statoil",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q1776022"},addTags:{amenity:"fuel",brand:"Statoil","brand:wikidata":"Q1776022","brand:wikipedia":"en:Equinor",name:"Statoil"},removeTags:{amenity:"fuel",brand:"Statoil","brand:wikidata":"Q1776022","brand:wikipedia":"en:Equinor",name:"Statoil"},matchScore:2,suggestion:true},"amenity/fuel/Stewart's":{name:"Stewart's",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q7615690"},addTags:{amenity:"fuel",brand:"Stewart's","brand:wikidata":"Q7615690","brand:wikipedia":"en:Stewart's Shops",name:"Stewart's"},removeTags:{amenity:"fuel",brand:"Stewart's","brand:wikidata":"Q7615690","brand:wikipedia":"en:Stewart's Shops",name:"Stewart's"},matchScore:2,suggestion:true},"amenity/fuel/Sunoco":{name:"Sunoco",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q1423218"},addTags:{amenity:"fuel",brand:"Sunoco","brand:wikidata":"Q1423218","brand:wikipedia":"en:Sunoco",name:"Sunoco"},removeTags:{amenity:"fuel",brand:"Sunoco","brand:wikidata":"Q1423218","brand:wikipedia":"en:Sunoco",name:"Sunoco"},matchScore:2,suggestion:true},"amenity/fuel/Super U":{name:"Super U",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q2529029"},addTags:{amenity:"fuel",brand:"Super U","brand:wikidata":"Q2529029","brand:wikipedia":"en:Système U",name:"Super U"},removeTags:{amenity:"fuel",brand:"Super U","brand:wikidata":"Q2529029","brand:wikipedia":"en:Système U",name:"Super U"},matchScore:2,suggestion:true},"amenity/fuel/Tamoil":{name:"Tamoil",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q706793"},addTags:{amenity:"fuel",brand:"Tamoil","brand:wikidata":"Q706793","brand:wikipedia":"en:Tamoil",name:"Tamoil"},removeTags:{amenity:"fuel",brand:"Tamoil","brand:wikidata":"Q706793","brand:wikipedia":"en:Tamoil",name:"Tamoil"},matchScore:2,suggestion:true},"amenity/fuel/Tango":{name:"Tango",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q2423920"},addTags:{amenity:"fuel",brand:"Tango","brand:wikidata":"Q2423920","brand:wikipedia":"nl:Tango CV",name:"Tango"},removeTags:{amenity:"fuel",brand:"Tango","brand:wikidata":"Q2423920","brand:wikipedia":"nl:Tango CV",name:"Tango"},matchScore:2,suggestion:true},"amenity/fuel/Tanka":{name:"Tanka",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q10690640"},addTags:{amenity:"fuel",brand:"Tanka","brand:wikidata":"Q10690640","brand:wikipedia":"sv:Tanka (bensinstationskedja)",name:"Tanka"},removeTags:{amenity:"fuel",brand:"Tanka","brand:wikidata":"Q10690640","brand:wikipedia":"sv:Tanka (bensinstationskedja)",name:"Tanka"},matchScore:2,suggestion:true},"amenity/fuel/Teboil":{name:"Teboil",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q7692079"},addTags:{amenity:"fuel",brand:"Teboil","brand:wikidata":"Q7692079","brand:wikipedia":"en:Teboil",name:"Teboil"},removeTags:{amenity:"fuel",brand:"Teboil","brand:wikidata":"Q7692079","brand:wikipedia":"en:Teboil",name:"Teboil"},matchScore:2,suggestion:true},"amenity/fuel/Terpel":{name:"Terpel",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q7703003"},addTags:{amenity:"fuel",brand:"Terpel","brand:wikidata":"Q7703003","brand:wikipedia":"en:Terpel",name:"Terpel"},removeTags:{amenity:"fuel",brand:"Terpel","brand:wikidata":"Q7703003","brand:wikipedia":"en:Terpel",name:"Terpel"},matchScore:2,suggestion:true},"amenity/fuel/Tesco":{name:"Tesco",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q17145596"},addTags:{amenity:"fuel",brand:"Tesco","brand:wikidata":"Q17145596","brand:wikipedia":"en:Tesco Corporation",name:"Tesco"},removeTags:{amenity:"fuel",brand:"Tesco","brand:wikidata":"Q17145596","brand:wikipedia":"en:Tesco Corporation",name:"Tesco"},matchScore:2,suggestion:true},"amenity/fuel/Texaco":{name:"Texaco",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q775060"},addTags:{amenity:"fuel",brand:"Texaco","brand:wikidata":"Q775060","brand:wikipedia":"en:Texaco",name:"Texaco"},removeTags:{amenity:"fuel",brand:"Texaco","brand:wikidata":"Q775060","brand:wikipedia":"en:Texaco",name:"Texaco"},matchScore:2,suggestion:true},"amenity/fuel/Tinq":{name:"Tinq",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q2132028"},addTags:{amenity:"fuel",brand:"Tinq","brand:wikidata":"Q2132028","brand:wikipedia":"nl:Tinq",name:"Tinq"},removeTags:{amenity:"fuel",brand:"Tinq","brand:wikidata":"Q2132028","brand:wikipedia":"nl:Tinq",name:"Tinq"},matchScore:2,suggestion:true},"amenity/fuel/Topaz":{name:"Topaz",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q7824764"},addTags:{amenity:"fuel",brand:"Topaz","brand:wikidata":"Q7824764","brand:wikipedia":"en:Topaz Energy",name:"Topaz"},removeTags:{amenity:"fuel",brand:"Topaz","brand:wikidata":"Q7824764","brand:wikipedia":"en:Topaz Energy",name:"Topaz"},matchScore:2,suggestion:true},"amenity/fuel/Total":{name:"Total",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q154037"},addTags:{amenity:"fuel",brand:"Total","brand:wikidata":"Q154037","brand:wikipedia":"fr:Total (entreprise)",name:"Total"},removeTags:{amenity:"fuel",brand:"Total","brand:wikidata":"Q154037","brand:wikipedia":"fr:Total (entreprise)",name:"Total"},matchScore:2,suggestion:true},"amenity/fuel/Turkey Hill":{name:"Turkey Hill",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q42376970"},addTags:{amenity:"fuel",brand:"Turkey Hill","brand:wikidata":"Q42376970","brand:wikipedia":"en:Turkey Hill Minit Markets",name:"Turkey Hill"},removeTags:{amenity:"fuel",brand:"Turkey Hill","brand:wikidata":"Q42376970","brand:wikipedia":"en:Turkey Hill Minit Markets",name:"Turkey Hill"},matchScore:2,suggestion:true},"amenity/fuel/Turmöl":{name:"Turmöl",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q1473279"},addTags:{amenity:"fuel",brand:"Turmöl","brand:wikidata":"Q1473279","brand:wikipedia":"de:Turmöl",name:"Turmöl"},removeTags:{amenity:"fuel",brand:"Turmöl","brand:wikidata":"Q1473279","brand:wikipedia":"de:Turmöl",name:"Turmöl"},matchScore:2,suggestion:true},"amenity/fuel/UDF Fuel":{name:"UDF Fuel",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q7887677"},addTags:{amenity:"fuel",brand:"United Dairy Farmers","brand:wikidata":"Q7887677","brand:wikipedia":"en:United Dairy Farmers",name:"UDF Fuel",short_name:"UDF"},removeTags:{amenity:"fuel",brand:"United Dairy Farmers","brand:wikidata":"Q7887677","brand:wikipedia":"en:United Dairy Farmers",name:"UDF Fuel",short_name:"UDF"},matchScore:2,suggestion:true},"amenity/fuel/Ultramar":{name:"Ultramar",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q3548078"},addTags:{amenity:"fuel",brand:"Ultramar","brand:wikidata":"Q3548078","brand:wikipedia":"en:Ultramar",name:"Ultramar"},removeTags:{amenity:"fuel",brand:"Ultramar","brand:wikidata":"Q3548078","brand:wikipedia":"en:Ultramar",name:"Ultramar"},matchScore:2,suggestion:true},"amenity/fuel/United":{name:"United",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q28224393"},addTags:{amenity:"fuel",brand:"United","brand:wikidata":"Q28224393","brand:wikipedia":"en:United Petroleum",name:"United"},removeTags:{amenity:"fuel",brand:"United","brand:wikidata":"Q28224393","brand:wikipedia":"en:United Petroleum",name:"United"},matchScore:2,suggestion:true},"amenity/fuel/Uno-X":{name:"Uno-X",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q3362746"},addTags:{amenity:"fuel",brand:"Uno-X","brand:wikidata":"Q3362746","brand:wikipedia":"en:Uno-X",name:"Uno-X"},removeTags:{amenity:"fuel",brand:"Uno-X","brand:wikidata":"Q3362746","brand:wikipedia":"en:Uno-X",name:"Uno-X"},matchScore:2,suggestion:true},"amenity/fuel/Valero":{name:"Valero",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q1283291"},addTags:{amenity:"fuel",brand:"Valero","brand:wikidata":"Q1283291","brand:wikipedia":"en:Valero Energy",name:"Valero"},removeTags:{amenity:"fuel",brand:"Valero","brand:wikidata":"Q1283291","brand:wikipedia":"en:Valero Energy",name:"Valero"},matchScore:2,suggestion:true},"amenity/fuel/Viada":{name:"Viada",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q12663942"},addTags:{amenity:"fuel",brand:"Viada","brand:wikidata":"Q12663942","brand:wikipedia":"en:Lukoil Baltija",name:"Viada"},removeTags:{amenity:"fuel",brand:"Viada","brand:wikidata":"Q12663942","brand:wikipedia":"en:Lukoil Baltija",name:"Viada"},matchScore:2,suggestion:true},"amenity/fuel/WOG":{name:"WOG",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q12072939"},addTags:{amenity:"fuel",brand:"WOG","brand:wikidata":"Q12072939","brand:wikipedia":"en:WOG (gas stations)",name:"WOG"},removeTags:{amenity:"fuel",brand:"WOG","brand:wikidata":"Q12072939","brand:wikipedia":"en:WOG (gas stations)",name:"WOG"},matchScore:2,suggestion:true},"amenity/fuel/Wawa":{name:"Wawa",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q5936320"},addTags:{amenity:"fuel",brand:"Wawa","brand:wikidata":"Q5936320","brand:wikipedia":"en:Wawa (company)",name:"Wawa"},removeTags:{amenity:"fuel",brand:"Wawa","brand:wikidata":"Q5936320","brand:wikipedia":"en:Wawa (company)",name:"Wawa"},matchScore:2,suggestion:true},"amenity/fuel/Westfalen":{name:"Westfalen",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q1411209"},addTags:{amenity:"fuel",brand:"Westfalen","brand:wikidata":"Q1411209","brand:wikipedia":"en:Westfalen AG",name:"Westfalen"},removeTags:{amenity:"fuel",brand:"Westfalen","brand:wikidata":"Q1411209","brand:wikipedia":"en:Westfalen AG",name:"Westfalen"},matchScore:2,suggestion:true},"amenity/fuel/Woolworths Petrol":{name:"Woolworths Petrol",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q5023980"},addTags:{amenity:"fuel",brand:"Caltex","brand:wikidata":"Q5023980","brand:wikipedia":"en:Caltex Woolworths",name:"Woolworths Petrol"},removeTags:{amenity:"fuel",brand:"Caltex","brand:wikidata":"Q5023980","brand:wikipedia":"en:Caltex Woolworths",name:"Woolworths Petrol"},matchScore:2,suggestion:true},"amenity/fuel/YPF":{name:"YPF",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q2006989"},addTags:{amenity:"fuel",brand:"YPF","brand:wikidata":"Q2006989","brand:wikipedia":"en:YPF",name:"YPF"},removeTags:{amenity:"fuel",brand:"YPF","brand:wikidata":"Q2006989","brand:wikipedia":"en:YPF",name:"YPF"},matchScore:2,suggestion:true},"amenity/fuel/Z":{name:"Z",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q8063337"},addTags:{amenity:"fuel",brand:"Z","brand:wikidata":"Q8063337","brand:wikipedia":"en:Z Energy",name:"Z"},removeTags:{amenity:"fuel",brand:"Z","brand:wikidata":"Q8063337","brand:wikipedia":"en:Z Energy",name:"Z"},matchScore:2,suggestion:true},"amenity/fuel/bft":{name:"bft",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q1009104"},addTags:{amenity:"fuel",brand:"bft","brand:wikidata":"Q1009104","brand:wikipedia":"de:Bundesverband freier Tankstellen",name:"bft"},removeTags:{amenity:"fuel",brand:"bft","brand:wikidata":"Q1009104","brand:wikipedia":"de:Bundesverband freier Tankstellen",name:"bft"},matchScore:2,suggestion:true},"amenity/fuel/АЗС":{name:"АЗС",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q12122687"},addTags:{amenity:"fuel",brand:"АЗС","brand:wikidata":"Q12122687","brand:wikipedia":"uk:Мережа АЗС Приват",name:"АЗС"},removeTags:{amenity:"fuel",brand:"АЗС","brand:wikidata":"Q12122687","brand:wikipedia":"uk:Мережа АЗС Приват",name:"АЗС"},matchScore:2,suggestion:true},"amenity/fuel/БРСМ-Нафта":{name:"БРСМ-Нафта",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q56356523"},addTags:{amenity:"fuel",brand:"БРСМ-Нафта","brand:wikidata":"Q56356523","brand:wikipedia":"uk:БРСМ-Нафта",name:"БРСМ-Нафта"},removeTags:{amenity:"fuel",brand:"БРСМ-Нафта","brand:wikidata":"Q56356523","brand:wikipedia":"uk:БРСМ-Нафта",name:"БРСМ-Нафта"},matchScore:2,suggestion:true},"amenity/fuel/Башнефть":{name:"Башнефть",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q809985"},addTags:{amenity:"fuel",brand:"Башнефть","brand:en":"Bashneft","brand:wikidata":"Q809985","brand:wikipedia":"en:Bashneft",name:"Башнефть","name:en":"Bashneft"},removeTags:{amenity:"fuel",brand:"Башнефть","brand:en":"Bashneft","brand:wikidata":"Q809985","brand:wikipedia":"en:Bashneft",name:"Башнефть","name:en":"Bashneft"},matchScore:2,suggestion:true},"amenity/fuel/Белоруснефть":{name:"Белоруснефть",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q4082693"},addTags:{amenity:"fuel",brand:"Белоруснефть","brand:wikidata":"Q4082693","brand:wikipedia":"ru:Белоруснефть",name:"Белоруснефть"},removeTags:{amenity:"fuel",brand:"Белоруснефть","brand:wikidata":"Q4082693","brand:wikipedia":"ru:Белоруснефть",name:"Белоруснефть"},matchScore:2,suggestion:true},"amenity/fuel/КазМунайГаз":{name:"КазМунайГаз",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q1417227"},addTags:{amenity:"fuel",brand:"КазМунайГаз","brand:wikidata":"Q1417227","brand:wikipedia":"en:KazMunayGas",name:"КазМунайГаз"},removeTags:{amenity:"fuel",brand:"КазМунайГаз","brand:wikidata":"Q1417227","brand:wikipedia":"en:KazMunayGas",name:"КазМунайГаз"},matchScore:2,suggestion:true},"amenity/fuel/Лукойл":{name:"Лукойл",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q329347"},addTags:{amenity:"fuel",brand:"Лукойл","brand:wikidata":"Q329347","brand:wikipedia":"ru:Лукойл",name:"Лукойл"},removeTags:{amenity:"fuel",brand:"Лукойл","brand:wikidata":"Q329347","brand:wikipedia":"ru:Лукойл",name:"Лукойл"},matchScore:2,suggestion:true},"amenity/fuel/Макпетрол":{name:"Макпетрол",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q1886438"},addTags:{amenity:"fuel",brand:"Макпетрол","brand:wikidata":"Q1886438","brand:wikipedia":"en:Makpetrol",name:"Макпетрол"},removeTags:{amenity:"fuel",brand:"Макпетрол","brand:wikidata":"Q1886438","brand:wikipedia":"en:Makpetrol",name:"Макпетрол"},matchScore:2,suggestion:true},"amenity/fuel/НК Альянс":{name:"НК Альянс",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q4063700"},addTags:{amenity:"fuel",brand:"НК Альянс","brand:wikidata":"Q4063700","brand:wikipedia":"ru:Альянс (компания)",name:"НК Альянс"},removeTags:{amenity:"fuel",brand:"НК Альянс","brand:wikidata":"Q4063700","brand:wikipedia":"ru:Альянс (компания)",name:"НК Альянс"},matchScore:2,suggestion:true},"amenity/fuel/ОККО":{name:"ОККО",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q7072617"},addTags:{amenity:"fuel",brand:"ОККО","brand:en":"OKKO","brand:wikidata":"Q7072617","brand:wikipedia":"en:OKKO",name:"ОККО","name:en":"OKKO"},removeTags:{amenity:"fuel",brand:"ОККО","brand:en":"OKKO","brand:wikidata":"Q7072617","brand:wikipedia":"en:OKKO",name:"ОККО","name:en":"OKKO"},matchScore:2,suggestion:true},"amenity/fuel/ПТК":{name:"ПТК",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q4360193"},addTags:{amenity:"fuel",brand:"ПТК","brand:en":"The Petersburg Fuel Company","brand:wikidata":"Q4360193","brand:wikipedia":"en:Petersburg Fuel Company",name:"ПТК","name:en":"The Petersburg Fuel Company"},removeTags:{amenity:"fuel",brand:"ПТК","brand:en":"The Petersburg Fuel Company","brand:wikidata":"Q4360193","brand:wikipedia":"en:Petersburg Fuel Company",name:"ПТК","name:en":"The Petersburg Fuel Company"},matchScore:2,suggestion:true},"amenity/fuel/Петрол":{name:"Петрол",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q24315"},addTags:{amenity:"fuel",brand:"Петрол","brand:wikidata":"Q24315","brand:wikipedia":"en:Petrol AD",name:"Петрол"},removeTags:{amenity:"fuel",brand:"Петрол","brand:wikidata":"Q24315","brand:wikipedia":"en:Petrol AD",name:"Петрол"},matchScore:2,suggestion:true},"amenity/fuel/Роснефть":{name:"Роснефть",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q1141123"},addTags:{amenity:"fuel",brand:"Роснефть","brand:en":"Rosneft","brand:wikidata":"Q1141123","brand:wikipedia":"en:Rosneft",name:"Роснефть","name:en":"Rosneft"},removeTags:{amenity:"fuel",brand:"Роснефть","brand:en":"Rosneft","brand:wikidata":"Q1141123","brand:wikipedia":"en:Rosneft",name:"Роснефть","name:en":"Rosneft"},matchScore:2,suggestion:true},"amenity/fuel/Сургутнефтегаз":{name:"Сургутнефтегаз",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q680776"},addTags:{amenity:"fuel",brand:"Сургутнефтегаз","brand:en":"Surgutneftegas","brand:wikidata":"Q680776","brand:wikipedia":"en:Surgutneftegas",name:"Сургутнефтегаз","name:en":"Surgutneftegas"},removeTags:{amenity:"fuel",brand:"Сургутнефтегаз","brand:en":"Surgutneftegas","brand:wikidata":"Q680776","brand:wikipedia":"en:Surgutneftegas",name:"Сургутнефтегаз","name:en":"Surgutneftegas"},matchScore:2,suggestion:true},"amenity/fuel/ТНК":{name:"ТНК",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q2298901"},addTags:{amenity:"fuel",brand:"ТНК","brand:wikidata":"Q2298901","brand:wikipedia":"en:TNK-BP",name:"ТНК"},removeTags:{amenity:"fuel",brand:"ТНК","brand:wikidata":"Q2298901","brand:wikipedia":"en:TNK-BP",name:"ТНК"},matchScore:2,suggestion:true},"amenity/fuel/Татнефть":{name:"Татнефть",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q1616858"},addTags:{amenity:"fuel",brand:"Татнефть","brand:en":"Tatneft","brand:wikidata":"Q1616858","brand:wikipedia":"en:Tatneft",name:"Татнефть","name:en":"Tatneft"},removeTags:{amenity:"fuel",brand:"Татнефть","brand:en":"Tatneft","brand:wikidata":"Q1616858","brand:wikipedia":"en:Tatneft",name:"Татнефть","name:en":"Tatneft"},matchScore:2,suggestion:true},"amenity/fuel/Укрнафта":{name:"Укрнафта",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q2447961"},addTags:{amenity:"fuel",brand:"Укрнафта","brand:en":"Ukrnafta","brand:wikidata":"Q2447961","brand:wikipedia":"en:Ukrnafta",name:"Укрнафта","name:en":"Ukrnafta"},removeTags:{amenity:"fuel",brand:"Укрнафта","brand:en":"Ukrnafta","brand:wikidata":"Q2447961","brand:wikipedia":"en:Ukrnafta",name:"Укрнафта","name:en":"Ukrnafta"},matchScore:2,suggestion:true},"amenity/fuel/סונול":{name:"סונול",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q3701622"},addTags:{amenity:"fuel",brand:"סונול","brand:en":"Sonol","brand:wikidata":"Q3701622","brand:wikipedia":"en:Sonol",name:"סונול","name:en":"Sonol"},removeTags:{amenity:"fuel",brand:"סונול","brand:en":"Sonol","brand:wikidata":"Q3701622","brand:wikipedia":"en:Sonol",name:"סונול","name:en":"Sonol"},matchScore:2,suggestion:true},"amenity/fuel/เอสโซ่":{name:"เอสโซ่",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q867662"},addTags:{amenity:"fuel",brand:"เอสโซ่","brand:en":"Esso","brand:wikidata":"Q867662","brand:wikipedia":"en:Esso",name:"เอสโซ่","name:en":"Esso"},removeTags:{amenity:"fuel",brand:"เอสโซ่","brand:en":"Esso","brand:wikidata":"Q867662","brand:wikipedia":"en:Esso",name:"เอสโซ่","name:en":"Esso"},matchScore:2,suggestion:true},"amenity/fuel/エッソ":{name:"エッソ",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q867662"},addTags:{amenity:"fuel",brand:"エッソ","brand:en":"Esso","brand:wikidata":"Q867662","brand:wikipedia":"en:Esso",name:"エッソ","name:en":"Esso"},removeTags:{amenity:"fuel",brand:"エッソ","brand:en":"Esso","brand:wikidata":"Q867662","brand:wikipedia":"en:Esso",name:"エッソ","name:en":"Esso"},matchScore:2,suggestion:true},"amenity/fuel/エネオス":{name:"エネオス",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q1640290"},addTags:{amenity:"fuel",brand:"エネオス","brand:en":"JXTG Nippon Oil & Energy","brand:wikidata":"Q1640290","brand:wikipedia":"en:JXTG Nippon Oil & Energy",name:"エネオス","name:en":"JXTG Nippon Oil & Energy"},removeTags:{amenity:"fuel",brand:"エネオス","brand:en":"JXTG Nippon Oil & Energy","brand:wikidata":"Q1640290","brand:wikipedia":"en:JXTG Nippon Oil & Energy",name:"エネオス","name:en":"JXTG Nippon Oil & Energy"},matchScore:2,suggestion:true},"amenity/fuel/コスモ石油":{name:"コスモ石油",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q2498318"},addTags:{amenity:"fuel",brand:"コスモ石油","brand:en":"Cosmo Oil Company","brand:wikidata":"Q2498318","brand:wikipedia":"en:Cosmo Oil Company",name:"コスモ石油","name:en":"Cosmo Oil Company"},removeTags:{amenity:"fuel",brand:"コスモ石油","brand:en":"Cosmo Oil Company","brand:wikidata":"Q2498318","brand:wikipedia":"en:Cosmo Oil Company",name:"コスモ石油","name:en":"Cosmo Oil Company"},matchScore:2,suggestion:true},"amenity/fuel/中国石化":{name:"中国石化",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q831445"},addTags:{amenity:"fuel",brand:"中国石化","brand:en":"Sinopec","brand:wikidata":"Q831445","brand:wikipedia":"en:Sinopec",name:"中国石化","name:en":"Sinopec"},removeTags:{amenity:"fuel",brand:"中国石化","brand:en":"Sinopec","brand:wikidata":"Q831445","brand:wikipedia":"en:Sinopec",name:"中国石化","name:en":"Sinopec"},matchScore:2,suggestion:true},"amenity/fuel/中国石化 Sinopec":{name:"中国石化 Sinopec",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q831445"},addTags:{amenity:"fuel",brand:"中国石化 Sinopec","brand:wikidata":"Q831445","brand:wikipedia":"zh:中国石化",name:"中国石化 Sinopec"},removeTags:{amenity:"fuel",brand:"中国石化 Sinopec","brand:wikidata":"Q831445","brand:wikipedia":"zh:中国石化",name:"中国石化 Sinopec"},matchScore:2,suggestion:true},"amenity/fuel/中国石油":{name:"中国石油",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q503182"},addTags:{amenity:"fuel",brand:"中国石油","brand:en":"PetroChina","brand:wikidata":"Q503182","brand:wikipedia":"en:PetroChina",name:"中国石油","name:en":"PetroChina"},removeTags:{amenity:"fuel",brand:"中国石油","brand:en":"PetroChina","brand:wikidata":"Q503182","brand:wikipedia":"en:PetroChina",name:"中国石油","name:en":"PetroChina"},matchScore:2,suggestion:true},"amenity/fuel/出光":{name:"出光",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q2216770"},addTags:{amenity:"fuel",brand:"出光","brand:en":"Idemitsu Kosan","brand:wikidata":"Q2216770","brand:wikipedia":"en:Idemitsu Kosan",name:"出光","name:en":"Idemitsu Kosan"},removeTags:{amenity:"fuel",brand:"出光","brand:en":"Idemitsu Kosan","brand:wikidata":"Q2216770","brand:wikipedia":"en:Idemitsu Kosan",name:"出光","name:en":"Idemitsu Kosan"},matchScore:2,suggestion:true},"amenity/fuel/台灣中油":{name:"台灣中油",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q21527177"},addTags:{amenity:"fuel",brand:"台灣中油","brand:en":"CPC Corporation, Taiwan","brand:wikidata":"Q21527177","brand:wikipedia":"en:CPC Corporation",name:"台灣中油","name:en":"CPC Corporation, Taiwan"},removeTags:{amenity:"fuel",brand:"台灣中油","brand:en":"CPC Corporation, Taiwan","brand:wikidata":"Q21527177","brand:wikipedia":"en:CPC Corporation",name:"台灣中油","name:en":"CPC Corporation, Taiwan"},matchScore:2,suggestion:true},"amenity/fuel/昭和シェル":{name:"昭和シェル",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q277115"},addTags:{amenity:"fuel",brand:"昭和シェル","brand:en":"Showa Shell Sekiyu","brand:wikidata":"Q277115","brand:wikipedia":"en:Showa Shell Sekiyu",name:"昭和シェル","name:en":"Showa Shell Sekiyu"},removeTags:{amenity:"fuel",brand:"昭和シェル","brand:en":"Showa Shell Sekiyu","brand:wikidata":"Q277115","brand:wikipedia":"en:Showa Shell Sekiyu",name:"昭和シェル","name:en":"Showa Shell Sekiyu"},matchScore:2,suggestion:true},"amenity/ice_cream/Baskin-Robbins":{name:"Baskin-Robbins",icon:"maki-ice-cream",geometry:["point","area"],tags:{amenity:"ice_cream","brand:wikidata":"Q584601"},addTags:{amenity:"ice_cream",brand:"Baskin-Robbins","brand:wikidata":"Q584601","brand:wikipedia":"en:Baskin-Robbins",cuisine:"ice_cream",name:"Baskin-Robbins"},removeTags:{amenity:"ice_cream",brand:"Baskin-Robbins","brand:wikidata":"Q584601","brand:wikipedia":"en:Baskin-Robbins",cuisine:"ice_cream",name:"Baskin-Robbins"},matchScore:2,suggestion:true},"amenity/ice_cream/Ben & Jerry's":{name:"Ben & Jerry's",icon:"maki-ice-cream",geometry:["point","area"],tags:{amenity:"ice_cream","brand:wikidata":"Q816412"},addTags:{amenity:"ice_cream",brand:"Ben & Jerry's","brand:wikidata":"Q816412","brand:wikipedia":"en:Ben & Jerry's",cuisine:"ice_cream",name:"Ben & Jerry's"},removeTags:{amenity:"ice_cream",brand:"Ben & Jerry's","brand:wikidata":"Q816412","brand:wikipedia":"en:Ben & Jerry's",cuisine:"ice_cream",name:"Ben & Jerry's"},matchScore:2,suggestion:true},"amenity/ice_cream/Cold Stone Creamery":{name:"Cold Stone Creamery",icon:"maki-ice-cream",geometry:["point","area"],tags:{amenity:"ice_cream","brand:wikidata":"Q1094923"},addTags:{amenity:"ice_cream",brand:"Cold Stone Creamery","brand:wikidata":"Q1094923","brand:wikipedia":"en:Cold Stone Creamery",cuisine:"ice_cream",name:"Cold Stone Creamery"},removeTags:{amenity:"ice_cream",brand:"Cold Stone Creamery","brand:wikidata":"Q1094923","brand:wikipedia":"en:Cold Stone Creamery",cuisine:"ice_cream",name:"Cold Stone Creamery"},matchScore:2,suggestion:true},"amenity/ice_cream/Freddo":{name:"Freddo",icon:"maki-ice-cream",geometry:["point","area"],tags:{amenity:"ice_cream","brand:wikidata":"Q28823999"},addTags:{amenity:"ice_cream",brand:"Freddo","brand:wikidata":"Q28823999","brand:wikipedia":"es:Freddo",cuisine:"ice_cream",name:"Freddo"},removeTags:{amenity:"ice_cream",brand:"Freddo","brand:wikidata":"Q28823999","brand:wikipedia":"es:Freddo",cuisine:"ice_cream",name:"Freddo"},matchScore:2,suggestion:true},"amenity/ice_cream/Grido":{name:"Grido",icon:"maki-ice-cream",geometry:["point","area"],tags:{amenity:"ice_cream","brand:wikidata":"Q5885724"},addTags:{amenity:"ice_cream",brand:"Grido","brand:wikidata":"Q5885724","brand:wikipedia":"es:Grido Helado",cuisine:"ice_cream",name:"Grido"},removeTags:{amenity:"ice_cream",brand:"Grido","brand:wikidata":"Q5885724","brand:wikipedia":"es:Grido Helado",cuisine:"ice_cream",name:"Grido"},matchScore:2,suggestion:true},"amenity/ice_cream/Rita's Italian Ice":{name:"Rita's Italian Ice",icon:"maki-ice-cream",geometry:["point","area"],tags:{amenity:"ice_cream","brand:wikidata":"Q7336456"},addTags:{amenity:"ice_cream",brand:"Rita's Italian Ice","brand:wikidata":"Q7336456","brand:wikipedia":"en:Rita's Italian Ice",cuisine:"ice_cream",name:"Rita's Italian Ice"},removeTags:{amenity:"ice_cream",brand:"Rita's Italian Ice","brand:wikidata":"Q7336456","brand:wikipedia":"en:Rita's Italian Ice",cuisine:"ice_cream",name:"Rita's Italian Ice"},matchScore:2,suggestion:true},"amenity/ice_cream/sweetFrog":{name:"sweetFrog",icon:"maki-ice-cream",geometry:["point","area"],tags:{amenity:"ice_cream","brand:wikidata":"Q16952110"},addTags:{amenity:"ice_cream",brand:"sweetFrog","brand:wikidata":"Q16952110","brand:wikipedia":"en:Sweet Frog",cuisine:"frozen_yogurt",name:"sweetFrog"},removeTags:{amenity:"ice_cream",brand:"sweetFrog","brand:wikidata":"Q16952110","brand:wikipedia":"en:Sweet Frog",cuisine:"frozen_yogurt",name:"sweetFrog"},matchScore:2,suggestion:true},"amenity/money_transfer/Express Union":{name:"Express Union",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"money_transfer","brand:wikidata":"Q3062276"},addTags:{amenity:"money_transfer",brand:"Express Union","brand:wikidata":"Q3062276","brand:wikipedia":"fr:Express Union",name:"Express Union"},removeTags:{amenity:"money_transfer",brand:"Express Union","brand:wikidata":"Q3062276","brand:wikipedia":"fr:Express Union",name:"Express Union"},matchScore:2,suggestion:true},"amenity/money_transfer/Western Union":{name:"Western Union",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"money_transfer","brand:wikidata":"Q861042"},addTags:{amenity:"money_transfer",brand:"Western Union","brand:wikidata":"Q861042","brand:wikipedia":"en:Western Union",name:"Western Union"},removeTags:{amenity:"money_transfer",brand:"Western Union","brand:wikidata":"Q861042","brand:wikipedia":"en:Western Union",name:"Western Union"},matchScore:2,suggestion:true},"amenity/payment_centre/Abitab":{name:"Abitab",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"payment_centre","brand:wikidata":"Q16488129"},addTags:{amenity:"payment_centre",brand:"Abitab","brand:wikidata":"Q16488129","brand:wikipedia":"es:Abitab",name:"Abitab"},removeTags:{amenity:"payment_centre",brand:"Abitab","brand:wikidata":"Q16488129","brand:wikipedia":"es:Abitab",name:"Abitab"},matchScore:2,suggestion:true},"amenity/payment_centre/Rapipago":{name:"Rapipago",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"payment_centre","brand:wikidata":"Q6100413"},addTags:{amenity:"payment_centre",brand:"Rapipago","brand:wikidata":"Q6100413","brand:wikipedia":"es:Rapipago",name:"Rapipago"},removeTags:{amenity:"payment_centre",brand:"Rapipago","brand:wikidata":"Q6100413","brand:wikipedia":"es:Rapipago",name:"Rapipago"},matchScore:2,suggestion:true},"amenity/payment_terminal/Qiwi":{name:"Qiwi",icon:"maki-bank",geometry:["point"],tags:{amenity:"payment_terminal","brand:wikidata":"Q4047736"},addTags:{amenity:"payment_terminal",brand:"Qiwi","brand:wikidata":"Q4047736","brand:wikipedia":"en:Qiwi",name:"Qiwi"},removeTags:{amenity:"payment_terminal",brand:"Qiwi","brand:wikidata":"Q4047736","brand:wikipedia":"en:Qiwi",name:"Qiwi"},matchScore:2,suggestion:true},"amenity/payment_terminal/ПриватБанк":{name:"ПриватБанк",icon:"maki-bank",geometry:["point"],tags:{amenity:"payment_terminal","brand:wikidata":"Q1515015"},addTags:{amenity:"payment_terminal",brand:"ПриватБанк","brand:wikidata":"Q1515015","brand:wikipedia":"en:PrivatBank",name:"ПриватБанк"},removeTags:{amenity:"payment_terminal",brand:"ПриватБанк","brand:wikidata":"Q1515015","brand:wikipedia":"en:PrivatBank",name:"ПриватБанк"},matchScore:2,suggestion:true},"amenity/payment_terminal/Элекснет":{name:"Элекснет",icon:"maki-bank",geometry:["point"],tags:{amenity:"payment_terminal","brand:wikidata":"Q4530795"},addTags:{amenity:"payment_terminal",brand:"Элекснет","brand:wikidata":"Q4530795","brand:wikipedia":"ru:Элекснет",name:"Элекснет"},removeTags:{amenity:"payment_terminal",brand:"Элекснет","brand:wikidata":"Q4530795","brand:wikipedia":"ru:Элекснет",name:"Элекснет"},matchScore:2,suggestion:true},"amenity/pharmacy/36,6":{name:"36,6",icon:"maki-pharmacy",geometry:["point","area"],tags:{amenity:"pharmacy","brand:wikidata":"Q226889"},addTags:{amenity:"pharmacy",brand:"36,6","brand:wikidata":"Q226889","brand:wikipedia":"ru:36,6 (аптечная сеть)",healthcare:"pharmacy",name:"36,6"},removeTags:{amenity:"pharmacy",brand:"36,6","brand:wikidata":"Q226889","brand:wikipedia":"ru:36,6 (аптечная сеть)",healthcare:"pharmacy",name:"36,6"},reference:{key:"amenity",value:"pharmacy"},matchScore:2,suggestion:true},"amenity/pharmacy/Apotek Hjärtat":{name:"Apotek Hjärtat",icon:"maki-pharmacy",geometry:["point","area"],tags:{amenity:"pharmacy","brand:wikidata":"Q10416114"},addTags:{amenity:"pharmacy",brand:"Apotek Hjärtat","brand:wikidata":"Q10416114","brand:wikipedia":"sv:Apotek Hjärtat",healthcare:"pharmacy",name:"Apotek Hjärtat"},removeTags:{amenity:"pharmacy",brand:"Apotek Hjärtat","brand:wikidata":"Q10416114","brand:wikipedia":"sv:Apotek Hjärtat",healthcare:"pharmacy",name:"Apotek Hjärtat"},reference:{key:"amenity",value:"pharmacy"},matchScore:2,suggestion:true},"amenity/pharmacy/Bartell Drugs":{name:"Bartell Drugs",icon:"maki-pharmacy",geometry:["point","area"],tags:{amenity:"pharmacy","brand:wikidata":"Q4865152"},addTags:{amenity:"pharmacy",brand:"Bartell Drugs","brand:wikidata":"Q4865152","brand:wikipedia":"en:Bartell Drugs",healthcare:"pharmacy",name:"Bartell Drugs"},removeTags:{amenity:"pharmacy",brand:"Bartell Drugs","brand:wikidata":"Q4865152","brand:wikipedia":"en:Bartell Drugs",healthcare:"pharmacy",name:"Bartell Drugs"},reference:{key:"amenity",value:"pharmacy"},matchScore:2,suggestion:true},"amenity/pharmacy/Benavides":{name:"Benavides",icon:"maki-pharmacy",geometry:["point","area"],tags:{amenity:"pharmacy","brand:wikidata":"Q5435613"},addTags:{amenity:"pharmacy",brand:"Benavides","brand:wikidata":"Q5435613","brand:wikipedia":"en:Farmacias Benavides",healthcare:"pharmacy",name:"Benavides"},removeTags:{amenity:"pharmacy",brand:"Benavides","brand:wikidata":"Q5435613","brand:wikipedia":"en:Farmacias Benavides",healthcare:"pharmacy",name:"Benavides"},reference:{key:"amenity",value:"pharmacy"},matchScore:2,suggestion:true},"amenity/pharmacy/Boots":{name:"Boots",icon:"maki-pharmacy",geometry:["point","area"],tags:{amenity:"pharmacy","brand:wikidata":"Q6123139"},addTags:{amenity:"pharmacy",brand:"Boots","brand:wikidata":"Q6123139","brand:wikipedia":"en:Boots UK",healthcare:"pharmacy",name:"Boots"},removeTags:{amenity:"pharmacy",brand:"Boots","brand:wikidata":"Q6123139","brand:wikipedia":"en:Boots UK",healthcare:"pharmacy",name:"Boots"},reference:{key:"amenity",value:"pharmacy"},matchScore:2,suggestion:true},"amenity/pharmacy/Brookshire Brothers Pharmacy":{name:"Brookshire Brothers Pharmacy",icon:"maki-pharmacy",geometry:["point","area"],tags:{amenity:"pharmacy","brand:wikidata":"Q4975084"},addTags:{amenity:"pharmacy",brand:"Brookshire Brothers Pharmacy","brand:wikidata":"Q4975084","brand:wikipedia":"en:Brookshire Brothers",healthcare:"pharmacy",name:"Brookshire Brothers Pharmacy"},removeTags:{amenity:"pharmacy",brand:"Brookshire Brothers Pharmacy","brand:wikidata":"Q4975084","brand:wikipedia":"en:Brookshire Brothers",healthcare:"pharmacy",name:"Brookshire Brothers Pharmacy"},reference:{key:"amenity",value:"pharmacy"},matchScore:2,suggestion:true},"amenity/pharmacy/CVS":{name:"CVS",icon:"maki-pharmacy",geometry:["point","area"],tags:{amenity:"pharmacy","brand:wikidata":"Q2078880"},addTags:{amenity:"pharmacy",brand:"CVS","brand:wikidata":"Q2078880","brand:wikipedia":"en:CVS Pharmacy",healthcare:"pharmacy",name:"CVS"},removeTags:{amenity:"pharmacy",brand:"CVS","brand:wikidata":"Q2078880","brand:wikipedia":"en:CVS Pharmacy",healthcare:"pharmacy",name:"CVS"},reference:{key:"amenity",value:"pharmacy"},matchScore:2,suggestion:true},"amenity/pharmacy/Catena":{name:"Catena",icon:"maki-pharmacy",geometry:["point","area"],tags:{amenity:"pharmacy","brand:wikidata":"Q24035728"},addTags:{amenity:"pharmacy",brand:"Catena","brand:wikidata":"Q24035728","brand:wikipedia":"ro:Farmacia Catena",healthcare:"pharmacy",name:"Catena"},removeTags:{amenity:"pharmacy",brand:"Catena","brand:wikidata":"Q24035728","brand:wikipedia":"ro:Farmacia Catena",healthcare:"pharmacy",name:"Catena"},reference:{key:"amenity",value:"pharmacy"},matchScore:2,suggestion:true},"amenity/pharmacy/Chemist Warehouse":{name:"Chemist Warehouse",icon:"maki-pharmacy",geometry:["point","area"],tags:{amenity:"pharmacy","brand:wikidata":"Q48782120"},addTags:{amenity:"pharmacy",brand:"Chemist Warehouse","brand:wikidata":"Q48782120","brand:wikipedia":"en:Chemist Warehouse",healthcare:"pharmacy",name:"Chemist Warehouse"},removeTags:{amenity:"pharmacy",brand:"Chemist Warehouse","brand:wikidata":"Q48782120","brand:wikipedia":"en:Chemist Warehouse",healthcare:"pharmacy",name:"Chemist Warehouse"},reference:{key:"amenity",value:"pharmacy"},matchScore:2,suggestion:true},"amenity/pharmacy/Costco Pharmacy":{name:"Costco Pharmacy",icon:"maki-pharmacy",geometry:["point","area"],tags:{amenity:"pharmacy","brand:wikidata":"Q715583"},addTags:{amenity:"pharmacy",healthcare:"pharmacy",brand:"Costco Pharmacy","brand:wikidata":"Q715583","brand:wikipedia":"en:Costco",name:"Costco Pharmacy"},removeTags:{amenity:"pharmacy",healthcare:"pharmacy",brand:"Costco Pharmacy","brand:wikidata":"Q715583","brand:wikipedia":"en:Costco",name:"Costco Pharmacy"},reference:{key:"amenity",value:"pharmacy"},matchScore:2,suggestion:true},"amenity/pharmacy/Cruz Verde":{name:"Cruz Verde",icon:"maki-pharmacy",geometry:["point","area"],tags:{amenity:"pharmacy","brand:wikidata":"Q5856071"},addTags:{amenity:"pharmacy",brand:"Cruz Verde","brand:wikidata":"Q5856071","brand:wikipedia":"es:Farmacias Cruz Verde",healthcare:"pharmacy",name:"Cruz Verde"},removeTags:{amenity:"pharmacy",brand:"Cruz Verde","brand:wikidata":"Q5856071","brand:wikipedia":"es:Farmacias Cruz Verde",healthcare:"pharmacy",name:"Cruz Verde"},reference:{key:"amenity",value:"pharmacy"},matchScore:2,suggestion:true},"amenity/pharmacy/Droga Raia":{name:"Droga Raia",icon:"maki-pharmacy",geometry:["point","area"],tags:{amenity:"pharmacy","brand:wikidata":"Q10357101"},addTags:{amenity:"pharmacy",brand:"Droga Raia","brand:wikidata":"Q10357101","brand:wikipedia":"pt:RaiaDrogasil",healthcare:"pharmacy",name:"Droga Raia"},removeTags:{amenity:"pharmacy",brand:"Droga Raia","brand:wikidata":"Q10357101","brand:wikipedia":"pt:RaiaDrogasil",healthcare:"pharmacy",name:"Droga Raia"},reference:{key:"amenity",value:"pharmacy"},matchScore:2,suggestion:true},"amenity/pharmacy/Drogaria São Paulo":{name:"Drogaria São Paulo",icon:"maki-pharmacy",geometry:["point","area"],tags:{amenity:"pharmacy","brand:wikidata":"Q5308184"},addTags:{amenity:"pharmacy",brand:"Drogaria São Paulo","brand:wikidata":"Q5308184","brand:wikipedia":"en:Grupo DPSP",healthcare:"pharmacy",name:"Drogaria São Paulo"},removeTags:{amenity:"pharmacy",brand:"Drogaria São Paulo","brand:wikidata":"Q5308184","brand:wikipedia":"en:Grupo DPSP",healthcare:"pharmacy",name:"Drogaria São Paulo"},reference:{key:"amenity",value:"pharmacy"},matchScore:2,suggestion:true},"amenity/pharmacy/Duane Reade":{name:"Duane Reade",icon:"maki-pharmacy",geometry:["point","area"],tags:{amenity:"pharmacy","brand:wikidata":"Q5310380"},addTags:{amenity:"pharmacy",brand:"Duane Reade","brand:wikidata":"Q5310380","brand:wikipedia":"en:Duane Reade",healthcare:"pharmacy",name:"Duane Reade"},removeTags:{amenity:"pharmacy",brand:"Duane Reade","brand:wikidata":"Q5310380","brand:wikipedia":"en:Duane Reade",healthcare:"pharmacy",name:"Duane Reade"},reference:{key:"amenity",value:"pharmacy"},matchScore:2,suggestion:true},"amenity/pharmacy/Eurovaistinė":{name:"Eurovaistinė",icon:"maki-pharmacy",geometry:["point","area"],tags:{amenity:"pharmacy","brand:wikidata":"Q267205"},addTags:{amenity:"pharmacy",brand:"Eurovaistinė","brand:wikidata":"Q267205","brand:wikipedia":"en:Euroapotheca",healthcare:"pharmacy",name:"Eurovaistinė"},removeTags:{amenity:"pharmacy",brand:"Eurovaistinė","brand:wikidata":"Q267205","brand:wikipedia":"en:Euroapotheca",healthcare:"pharmacy",name:"Eurovaistinė"},reference:{key:"amenity",value:"pharmacy"},matchScore:2,suggestion:true},"amenity/pharmacy/Familiprix":{name:"Familiprix",icon:"maki-pharmacy",geometry:["point","area"],tags:{amenity:"pharmacy","brand:wikidata":"Q3064881"},addTags:{amenity:"pharmacy",brand:"Familiprix","brand:wikidata":"Q3064881","brand:wikipedia":"en:Familiprix",healthcare:"pharmacy",name:"Familiprix"},removeTags:{amenity:"pharmacy",brand:"Familiprix","brand:wikidata":"Q3064881","brand:wikipedia":"en:Familiprix",healthcare:"pharmacy",name:"Familiprix"},reference:{key:"amenity",value:"pharmacy"},matchScore:2,suggestion:true},"amenity/pharmacy/Farmacia Benavides":{name:"Farmacia Benavides",icon:"maki-pharmacy",geometry:["point","area"],tags:{amenity:"pharmacy","brand:wikidata":"Q5435613"},addTags:{amenity:"pharmacy",brand:"Farmacia Benavides","brand:wikidata":"Q5435613","brand:wikipedia":"en:Farmacias Benavides",healthcare:"pharmacy",name:"Farmacia Benavides"},removeTags:{amenity:"pharmacy",brand:"Farmacia Benavides","brand:wikidata":"Q5435613","brand:wikipedia":"en:Farmacias Benavides",healthcare:"pharmacy",name:"Farmacia Benavides"},reference:{key:"amenity",value:"pharmacy"},matchScore:2,suggestion:true},"amenity/pharmacy/Farmacia Guadalajara":{name:"Farmacia Guadalajara",icon:"maki-pharmacy",geometry:["point","area"],tags:{amenity:"pharmacy","brand:wikidata":"Q5435609"},addTags:{amenity:"pharmacy",brand:"Farmacia Guadalajara","brand:wikidata":"Q5435609","brand:wikipedia":"en:Farmacias Guadalajara",healthcare:"pharmacy",name:"Farmacia Guadalajara"},removeTags:{amenity:"pharmacy",brand:"Farmacia Guadalajara","brand:wikidata":"Q5435609","brand:wikipedia":"en:Farmacias Guadalajara",healthcare:"pharmacy",name:"Farmacia Guadalajara"},reference:{key:"amenity",value:"pharmacy"},matchScore:2,suggestion:true},"amenity/pharmacy/Farmacias Ahumada":{name:"Farmacias Ahumada",icon:"maki-pharmacy",geometry:["point","area"],tags:{amenity:"pharmacy","brand:wikidata":"Q5856069"},addTags:{amenity:"pharmacy",brand:"Farmacias Ahumada","brand:wikidata":"Q5856069","brand:wikipedia":"es:Farmacias Ahumada",healthcare:"pharmacy",name:"Farmacias Ahumada"},removeTags:{amenity:"pharmacy",brand:"Farmacias Ahumada","brand:wikidata":"Q5856069","brand:wikipedia":"es:Farmacias Ahumada",healthcare:"pharmacy",name:"Farmacias Ahumada"},reference:{key:"amenity",value:"pharmacy"},matchScore:2,suggestion:true},"amenity/pharmacy/Farmacias Cruz Verde":{name:"Farmacias Cruz Verde",icon:"maki-pharmacy",geometry:["point","area"],tags:{amenity:"pharmacy","brand:wikidata":"Q5856071"},addTags:{amenity:"pharmacy",brand:"Farmacias Cruz Verde","brand:wikidata":"Q5856071","brand:wikipedia":"es:Farmacias Cruz Verde",healthcare:"pharmacy",name:"Farmacias Cruz Verde"},removeTags:{amenity:"pharmacy",brand:"Farmacias Cruz Verde","brand:wikidata":"Q5856071","brand:wikipedia":"es:Farmacias Cruz Verde",healthcare:"pharmacy",name:"Farmacias Cruz Verde"},reference:{key:"amenity",value:"pharmacy"},matchScore:2,suggestion:true},"amenity/pharmacy/Farmacias SalcoBrand":{name:"Farmacias SalcoBrand",icon:"maki-pharmacy",geometry:["point","area"],tags:{amenity:"pharmacy","brand:wikidata":"Q2877054"},addTags:{amenity:"pharmacy",brand:"Farmacias SalcoBrand","brand:wikidata":"Q2877054","brand:wikipedia":"es:Farmacias Salcobrand",healthcare:"pharmacy",name:"Farmacias SalcoBrand"},removeTags:{amenity:"pharmacy",brand:"Farmacias SalcoBrand","brand:wikidata":"Q2877054","brand:wikipedia":"es:Farmacias Salcobrand",healthcare:"pharmacy",name:"Farmacias SalcoBrand"},reference:{key:"amenity",value:"pharmacy"},matchScore:2,suggestion:true},"amenity/pharmacy/Farmacity":{name:"Farmacity",icon:"maki-pharmacy",geometry:["point","area"],tags:{amenity:"pharmacy","brand:wikidata":"Q5856076"},addTags:{amenity:"pharmacy",brand:"Farmacity","brand:wikidata":"Q5856076","brand:wikipedia":"es:Farmacity",healthcare:"pharmacy",name:"Farmacity"},removeTags:{amenity:"pharmacy",brand:"Farmacity","brand:wikidata":"Q5856076","brand:wikipedia":"es:Farmacity",healthcare:"pharmacy",name:"Farmacity"},reference:{key:"amenity",value:"pharmacy"},matchScore:2,suggestion:true},"amenity/pharmacy/Farmahorro":{name:"Farmahorro",icon:"maki-pharmacy",geometry:["point","area"],tags:{amenity:"pharmacy","brand:wikidata":"Q20015002"},addTags:{amenity:"pharmacy",brand:"Farmahorro","brand:wikidata":"Q20015002","brand:wikipedia":"es:Farmahorro",healthcare:"pharmacy",name:"Farmahorro"},removeTags:{amenity:"pharmacy",brand:"Farmahorro","brand:wikidata":"Q20015002","brand:wikipedia":"es:Farmahorro",healthcare:"pharmacy",name:"Farmahorro"},reference:{key:"amenity",value:"pharmacy"},matchScore:2,suggestion:true},"amenity/pharmacy/Farmatodo":{name:"Farmatodo",icon:"maki-pharmacy",geometry:["point","area"],tags:{amenity:"pharmacy","brand:wikidata":"Q5856092"},addTags:{amenity:"pharmacy",brand:"Farmatodo","brand:wikidata":"Q5856092","brand:wikipedia":"es:Farmatodo",healthcare:"pharmacy",name:"Farmatodo"},removeTags:{amenity:"pharmacy",brand:"Farmatodo","brand:wikidata":"Q5856092","brand:wikipedia":"es:Farmatodo",healthcare:"pharmacy",name:"Farmatodo"},reference:{key:"amenity",value:"pharmacy"},matchScore:2,suggestion:true},"amenity/pharmacy/Gintarinė vaistinė":{name:"Gintarinė vaistinė",icon:"maki-pharmacy",geometry:["point","area"],tags:{amenity:"pharmacy","brand:wikidata":"Q15857801"},addTags:{amenity:"pharmacy",brand:"Gintarinė vaistinė","brand:wikidata":"Q15857801","brand:wikipedia":"lt:Gintarinė vaistinė",healthcare:"pharmacy",name:"Gintarinė vaistinė"},removeTags:{amenity:"pharmacy",brand:"Gintarinė vaistinė","brand:wikidata":"Q15857801","brand:wikipedia":"lt:Gintarinė vaistinė",healthcare:"pharmacy",name:"Gintarinė vaistinė"},reference:{key:"amenity",value:"pharmacy"},matchScore:2,suggestion:true},"amenity/pharmacy/Guardian":{name:"Guardian",icon:"maki-pharmacy",geometry:["point","area"],tags:{amenity:"pharmacy","brand:wikidata":"Q13646560"},addTags:{amenity:"pharmacy",brand:"Guardian","brand:wikidata":"Q13646560","brand:wikipedia":"en:Mannings",healthcare:"pharmacy",name:"Guardian"},removeTags:{amenity:"pharmacy",brand:"Guardian","brand:wikidata":"Q13646560","brand:wikipedia":"en:Mannings",healthcare:"pharmacy",name:"Guardian"},reference:{key:"amenity",value:"pharmacy"},matchScore:2,suggestion:true},"amenity/pharmacy/H-E-B Pharmacy":{name:"H-E-B Pharmacy",icon:"maki-pharmacy",geometry:["point","area"],tags:{amenity:"pharmacy","brand:wikidata":"Q830621"},addTags:{amenity:"pharmacy",brand:"H-E-B Pharmacy","brand:wikidata":"Q830621","brand:wikipedia":"en:H-E-B",healthcare:"pharmacy",name:"H-E-B Pharmacy"},removeTags:{amenity:"pharmacy",brand:"H-E-B Pharmacy","brand:wikidata":"Q830621","brand:wikipedia":"en:H-E-B",healthcare:"pharmacy",name:"H-E-B Pharmacy"},reference:{key:"amenity",value:"pharmacy"},matchScore:2,suggestion:true},"amenity/pharmacy/Hy-Vee Pharmacy":{name:"Hy-Vee Pharmacy",icon:"maki-pharmacy",geometry:["point","area"],tags:{amenity:"pharmacy","brand:wikidata":"Q1639719"},addTags:{amenity:"pharmacy",brand:"Hy-Vee Pharmacy","brand:wikidata":"Q1639719","brand:wikipedia":"en:Hy-Vee",healthcare:"pharmacy",name:"Hy-Vee Pharmacy"},removeTags:{amenity:"pharmacy",brand:"Hy-Vee Pharmacy","brand:wikidata":"Q1639719","brand:wikipedia":"en:Hy-Vee",healthcare:"pharmacy",name:"Hy-Vee Pharmacy"},reference:{key:"amenity",value:"pharmacy"},matchScore:2,suggestion:true},"amenity/pharmacy/Inkafarma":{name:"Inkafarma",icon:"maki-pharmacy",geometry:["point","area"],tags:{amenity:"pharmacy","brand:wikidata":"Q10997748"},addTags:{amenity:"pharmacy",brand:"Inkafarma","brand:wikidata":"Q10997748","brand:wikipedia":"es:Inkafarma",healthcare:"pharmacy",name:"Inkafarma"},removeTags:{amenity:"pharmacy",brand:"Inkafarma","brand:wikidata":"Q10997748","brand:wikipedia":"es:Inkafarma",healthcare:"pharmacy",name:"Inkafarma"},reference:{key:"amenity",value:"pharmacy"},matchScore:2,suggestion:true},"amenity/pharmacy/Jean Coutu":{name:"Jean Coutu",icon:"maki-pharmacy",geometry:["point","area"],tags:{amenity:"pharmacy","brand:wikidata":"Q3117457"},addTags:{amenity:"pharmacy",brand:"Jean Coutu","brand:wikidata":"Q3117457","brand:wikipedia":"en:Jean Coutu Group",healthcare:"pharmacy",name:"Jean Coutu"},removeTags:{amenity:"pharmacy",brand:"Jean Coutu","brand:wikidata":"Q3117457","brand:wikipedia":"en:Jean Coutu Group",healthcare:"pharmacy",name:"Jean Coutu"},reference:{key:"amenity",value:"pharmacy"},matchScore:2,suggestion:true},"amenity/pharmacy/Kimia Farma":{name:"Kimia Farma",icon:"maki-pharmacy",geometry:["point","area"],tags:{amenity:"pharmacy","brand:wikidata":"Q11264892"},addTags:{amenity:"pharmacy",brand:"Kimia Farma","brand:wikidata":"Q11264892","brand:wikipedia":"en:Kimia Farma",healthcare:"pharmacy",name:"Kimia Farma"},removeTags:{amenity:"pharmacy",brand:"Kimia Farma","brand:wikidata":"Q11264892","brand:wikipedia":"en:Kimia Farma",healthcare:"pharmacy",name:"Kimia Farma"},reference:{key:"amenity",value:"pharmacy"},matchScore:2,suggestion:true},"amenity/pharmacy/Kinney Drugs":{name:"Kinney Drugs",icon:"maki-pharmacy",geometry:["point","area"],tags:{amenity:"pharmacy","brand:wikidata":"Q6414090"},addTags:{amenity:"pharmacy",brand:"Kinney Drugs","brand:wikidata":"Q6414090","brand:wikipedia":"en:Kinney Drugs",healthcare:"pharmacy",name:"Kinney Drugs"},removeTags:{amenity:"pharmacy",brand:"Kinney Drugs","brand:wikidata":"Q6414090","brand:wikipedia":"en:Kinney Drugs",healthcare:"pharmacy",name:"Kinney Drugs"},reference:{key:"amenity",value:"pharmacy"},matchScore:2,suggestion:true},"amenity/pharmacy/Lloyds Pharmacy":{name:"Lloyds Pharmacy",icon:"maki-pharmacy",geometry:["point","area"],tags:{amenity:"pharmacy","brand:wikidata":"Q6662870"},addTags:{amenity:"pharmacy",brand:"Lloyds Pharmacy","brand:wikidata":"Q6662870","brand:wikipedia":"en:LloydsPharmacy",healthcare:"pharmacy",name:"Lloyds Pharmacy"},removeTags:{amenity:"pharmacy",brand:"Lloyds Pharmacy","brand:wikidata":"Q6662870","brand:wikipedia":"en:LloydsPharmacy",healthcare:"pharmacy",name:"Lloyds Pharmacy"},reference:{key:"amenity",value:"pharmacy"},matchScore:2,suggestion:true},"amenity/pharmacy/London Drugs":{name:"London Drugs",icon:"maki-pharmacy",geometry:["point","area"],tags:{amenity:"pharmacy","brand:wikidata":"Q3258955"},addTags:{amenity:"pharmacy",brand:"London Drugs","brand:wikidata":"Q3258955","brand:wikipedia":"en:London Drugs",healthcare:"pharmacy",name:"London Drugs"},removeTags:{amenity:"pharmacy",brand:"London Drugs","brand:wikidata":"Q3258955","brand:wikipedia":"en:London Drugs",healthcare:"pharmacy",name:"London Drugs"},reference:{key:"amenity",value:"pharmacy"},matchScore:2,suggestion:true},"amenity/pharmacy/Mercury Drug":{name:"Mercury Drug",icon:"maki-pharmacy",geometry:["point","area"],tags:{amenity:"pharmacy","brand:wikidata":"Q6818610"},addTags:{amenity:"pharmacy",brand:"Mercury Drug","brand:wikidata":"Q6818610","brand:wikipedia":"en:Mercury Drug",healthcare:"pharmacy",name:"Mercury Drug"},removeTags:{amenity:"pharmacy",brand:"Mercury Drug","brand:wikidata":"Q6818610","brand:wikipedia":"en:Mercury Drug",healthcare:"pharmacy",name:"Mercury Drug"},reference:{key:"amenity",value:"pharmacy"},matchScore:2,suggestion:true},"amenity/pharmacy/Mēness aptieka":{name:"Mēness aptieka",icon:"maki-pharmacy",geometry:["point","area"],tags:{amenity:"pharmacy","brand:wikidata":"Q57583051"},addTags:{amenity:"pharmacy",brand:"Mēness aptieka","brand:wikidata":"Q57583051",healthcare:"pharmacy",name:"Mēness aptieka"},removeTags:{amenity:"pharmacy",brand:"Mēness aptieka","brand:wikidata":"Q57583051",healthcare:"pharmacy",name:"Mēness aptieka"},reference:{key:"amenity",value:"pharmacy"},matchScore:2,suggestion:true},"amenity/pharmacy/Pague Menos":{name:"Pague Menos",icon:"maki-pharmacy",geometry:["point","area"],tags:{amenity:"pharmacy","brand:wikidata":"Q7124466"},addTags:{amenity:"pharmacy",brand:"Pague Menos","brand:wikidata":"Q7124466","brand:wikipedia":"pt:Pague Menos",healthcare:"pharmacy",name:"Pague Menos"},removeTags:{amenity:"pharmacy",brand:"Pague Menos","brand:wikidata":"Q7124466","brand:wikipedia":"pt:Pague Menos",healthcare:"pharmacy",name:"Pague Menos"},reference:{key:"amenity",value:"pharmacy"},matchScore:2,suggestion:true},"amenity/pharmacy/Pharmacie Principale":{name:"Pharmacie Principale",icon:"maki-pharmacy",geometry:["point","area"],tags:{amenity:"pharmacy","brand:wikidata":"Q1547749"},addTags:{amenity:"pharmacy",brand:"Pharmacie Principale","brand:wikidata":"Q1547749","brand:wikipedia":"fr:PP Holding Group",healthcare:"pharmacy",name:"Pharmacie Principale"},removeTags:{amenity:"pharmacy",brand:"Pharmacie Principale","brand:wikidata":"Q1547749","brand:wikipedia":"fr:PP Holding Group",healthcare:"pharmacy",name:"Pharmacie Principale"},reference:{key:"amenity",value:"pharmacy"},matchScore:2,suggestion:true},"amenity/pharmacy/Pharmaprix":{name:"Pharmaprix",icon:"maki-pharmacy",geometry:["point","area"],tags:{amenity:"pharmacy","brand:wikidata":"Q1820137"},addTags:{amenity:"pharmacy",brand:"Pharmaprix","brand:wikidata":"Q1820137","brand:wikipedia":"en:Shoppers Drug Mart",healthcare:"pharmacy",name:"Pharmaprix"},removeTags:{amenity:"pharmacy",brand:"Pharmaprix","brand:wikidata":"Q1820137","brand:wikipedia":"en:Shoppers Drug Mart",healthcare:"pharmacy",name:"Pharmaprix"},reference:{key:"amenity",value:"pharmacy"},matchScore:2,suggestion:true},"amenity/pharmacy/Pharmasave":{name:"Pharmasave",icon:"maki-pharmacy",geometry:["point","area"],tags:{amenity:"pharmacy","brand:wikidata":"Q17093822"},addTags:{amenity:"pharmacy",brand:"Pharmasave","brand:wikidata":"Q17093822","brand:wikipedia":"en:Pharmasave",healthcare:"pharmacy",name:"Pharmasave"},removeTags:{amenity:"pharmacy",brand:"Pharmasave","brand:wikidata":"Q17093822","brand:wikipedia":"en:Pharmasave",healthcare:"pharmacy",name:"Pharmasave"},reference:{key:"amenity",value:"pharmacy"},matchScore:2,suggestion:true},"amenity/pharmacy/Rexall":{name:"Rexall",icon:"maki-pharmacy",geometry:["point","area"],tags:{amenity:"pharmacy","brand:wikidata":"Q7319360"},addTags:{amenity:"pharmacy",brand:"Rexall","brand:wikidata":"Q7319360","brand:wikipedia":"en:Rexall",healthcare:"pharmacy",name:"Rexall"},removeTags:{amenity:"pharmacy",brand:"Rexall","brand:wikidata":"Q7319360","brand:wikipedia":"en:Rexall",healthcare:"pharmacy",name:"Rexall"},reference:{key:"amenity",value:"pharmacy"},matchScore:2,suggestion:true},"amenity/pharmacy/Rite Aid":{name:"Rite Aid",icon:"maki-pharmacy",geometry:["point","area"],tags:{amenity:"pharmacy","brand:wikidata":"Q3433273"},addTags:{amenity:"pharmacy",brand:"Rite Aid","brand:wikidata":"Q3433273","brand:wikipedia":"en:Rite Aid",healthcare:"pharmacy",name:"Rite Aid"},removeTags:{amenity:"pharmacy",brand:"Rite Aid","brand:wikidata":"Q3433273","brand:wikipedia":"en:Rite Aid",healthcare:"pharmacy",name:"Rite Aid"},reference:{key:"amenity",value:"pharmacy"},matchScore:2,suggestion:true},"amenity/pharmacy/SalcoBrand":{name:"SalcoBrand",icon:"maki-pharmacy",geometry:["point","area"],tags:{amenity:"pharmacy","brand:wikidata":"Q2877054"},addTags:{amenity:"pharmacy",brand:"SalcoBrand","brand:wikidata":"Q2877054","brand:wikipedia":"es:Farmacias Salcobrand",healthcare:"pharmacy",name:"SalcoBrand"},removeTags:{amenity:"pharmacy",brand:"SalcoBrand","brand:wikidata":"Q2877054","brand:wikipedia":"es:Farmacias Salcobrand",healthcare:"pharmacy",name:"SalcoBrand"},reference:{key:"amenity",value:"pharmacy"},matchScore:2,suggestion:true},"amenity/pharmacy/Sensiblu":{name:"Sensiblu",icon:"maki-pharmacy",geometry:["point","area"],tags:{amenity:"pharmacy","brand:wikidata":"Q12740640"},addTags:{amenity:"pharmacy",brand:"Sensiblu","brand:wikidata":"Q12740640","brand:wikipedia":"ro:Sensiblu",healthcare:"pharmacy",name:"Sensiblu"},removeTags:{amenity:"pharmacy",brand:"Sensiblu","brand:wikidata":"Q12740640","brand:wikipedia":"ro:Sensiblu",healthcare:"pharmacy",name:"Sensiblu"},reference:{key:"amenity",value:"pharmacy"},matchScore:2,suggestion:true},"amenity/pharmacy/Shoppers Drug Mart":{name:"Shoppers Drug Mart",icon:"maki-pharmacy",geometry:["point","area"],tags:{amenity:"pharmacy","brand:wikidata":"Q1820137"},addTags:{amenity:"pharmacy",brand:"Shoppers Drug Mart","brand:wikidata":"Q1820137","brand:wikipedia":"en:Shoppers Drug Mart",healthcare:"pharmacy",name:"Shoppers Drug Mart"},removeTags:{amenity:"pharmacy",brand:"Shoppers Drug Mart","brand:wikidata":"Q1820137","brand:wikipedia":"en:Shoppers Drug Mart",healthcare:"pharmacy",name:"Shoppers Drug Mart"},reference:{key:"amenity",value:"pharmacy"},matchScore:2,suggestion:true},"amenity/pharmacy/South Star Drug":{name:"South Star Drug",icon:"maki-pharmacy",geometry:["point","area"],tags:{amenity:"pharmacy","brand:wikidata":"Q7568544"},addTags:{amenity:"pharmacy",brand:"South Star Drug","brand:wikidata":"Q7568544","brand:wikipedia":"en:South Star Drug",healthcare:"pharmacy",name:"South Star Drug"},removeTags:{amenity:"pharmacy",brand:"South Star Drug","brand:wikidata":"Q7568544","brand:wikipedia":"en:South Star Drug",healthcare:"pharmacy",name:"South Star Drug"},reference:{key:"amenity",value:"pharmacy"},matchScore:2,suggestion:true},"amenity/pharmacy/Superdrug":{name:"Superdrug",icon:"maki-pharmacy",geometry:["point","area"],tags:{amenity:"pharmacy","brand:wikidata":"Q7643261"},addTags:{amenity:"pharmacy",brand:"Superdrug","brand:wikidata":"Q7643261","brand:wikipedia":"en:Superdrug",healthcare:"pharmacy",name:"Superdrug"},removeTags:{amenity:"pharmacy",brand:"Superdrug","brand:wikidata":"Q7643261","brand:wikipedia":"en:Superdrug",healthcare:"pharmacy",name:"Superdrug"},reference:{key:"amenity",value:"pharmacy"},matchScore:2,suggestion:true},"amenity/pharmacy/Uniprix":{name:"Uniprix",icon:"maki-pharmacy",geometry:["point","area"],tags:{amenity:"pharmacy","brand:wikidata":"Q683265"},addTags:{amenity:"pharmacy",brand:"Uniprix","brand:wikidata":"Q683265","brand:wikipedia":"en:Uniprix",healthcare:"pharmacy",name:"Uniprix"},removeTags:{amenity:"pharmacy",brand:"Uniprix","brand:wikidata":"Q683265","brand:wikipedia":"en:Uniprix",healthcare:"pharmacy",name:"Uniprix"},reference:{key:"amenity",value:"pharmacy"},matchScore:2,suggestion:true},"amenity/pharmacy/Walgreens":{name:"Walgreens",icon:"maki-pharmacy",geometry:["point","area"],tags:{amenity:"pharmacy","brand:wikidata":"Q1591889"},addTags:{amenity:"pharmacy",brand:"Walgreens","brand:wikidata":"Q1591889","brand:wikipedia":"en:Walgreens",healthcare:"pharmacy",name:"Walgreens"},removeTags:{amenity:"pharmacy",brand:"Walgreens","brand:wikidata":"Q1591889","brand:wikipedia":"en:Walgreens",healthcare:"pharmacy",name:"Walgreens"},reference:{key:"amenity",value:"pharmacy"},matchScore:2,suggestion:true},"amenity/pharmacy/Walmart Pharmacy":{name:"Walmart Pharmacy",icon:"maki-pharmacy",geometry:["point","area"],tags:{amenity:"pharmacy","brand:wikidata":"Q483551"},addTags:{amenity:"pharmacy",brand:"Walmart","brand:wikidata":"Q483551","brand:wikipedia":"en:Walmart",healthcare:"pharmacy",name:"Walmart Pharmacy",operator:"Walmart","operator:wikidata":"Q483551","operator:wikipedia":"en:Walmart"},removeTags:{amenity:"pharmacy",brand:"Walmart","brand:wikidata":"Q483551","brand:wikipedia":"en:Walmart",healthcare:"pharmacy",name:"Walmart Pharmacy",operator:"Walmart","operator:wikidata":"Q483551","operator:wikipedia":"en:Walmart"},reference:{key:"amenity",value:"pharmacy"},matchScore:2,suggestion:true},"amenity/pharmacy/Watsons":{name:"Watsons",icon:"maki-pharmacy",geometry:["point","area"],tags:{amenity:"pharmacy","brand:wikidata":"Q7974785"},addTags:{amenity:"pharmacy",brand:"Watsons","brand:wikidata":"Q7974785","brand:wikipedia":"en:Watsons",healthcare:"pharmacy",name:"Watsons"},removeTags:{amenity:"pharmacy",brand:"Watsons","brand:wikidata":"Q7974785","brand:wikipedia":"en:Watsons",healthcare:"pharmacy",name:"Watsons"},reference:{key:"amenity",value:"pharmacy"},matchScore:2,suggestion:true},"amenity/pharmacy/Well Pharmacy":{name:"Well Pharmacy",icon:"maki-pharmacy",geometry:["point","area"],tags:{amenity:"pharmacy","brand:wikidata":"Q7726524"},addTags:{amenity:"pharmacy",brand:"Well Pharmacy","brand:wikidata":"Q7726524","brand:wikipedia":"en:Well Pharmacy",healthcare:"pharmacy",name:"Well Pharmacy"},removeTags:{amenity:"pharmacy",brand:"Well Pharmacy","brand:wikidata":"Q7726524","brand:wikipedia":"en:Well Pharmacy",healthcare:"pharmacy",name:"Well Pharmacy"},reference:{key:"amenity",value:"pharmacy"},matchScore:2,suggestion:true},"amenity/pharmacy/くすりの福太郎":{name:"くすりの福太郎",icon:"maki-pharmacy",geometry:["point","area"],tags:{amenity:"pharmacy","brand:wikidata":"Q17214460"},addTags:{amenity:"pharmacy",brand:"くすりの福太郎","brand:wikidata":"Q17214460","brand:wikipedia":"ja:くすりの福太郎",healthcare:"pharmacy",name:"くすりの福太郎"},removeTags:{amenity:"pharmacy",brand:"くすりの福太郎","brand:wikidata":"Q17214460","brand:wikipedia":"ja:くすりの福太郎",healthcare:"pharmacy",name:"くすりの福太郎"},reference:{key:"amenity",value:"pharmacy"},matchScore:2,suggestion:true},"amenity/pharmacy/ウエルシア":{name:"ウエルシア",icon:"maki-pharmacy",geometry:["point","area"],tags:{amenity:"pharmacy","brand:wikidata":"Q11288684"},addTags:{amenity:"pharmacy",brand:"ウエルシア","brand:wikidata":"Q11288684","brand:wikipedia":"ja:ウエルシアホールディングス",healthcare:"pharmacy",name:"ウエルシア"},removeTags:{amenity:"pharmacy",brand:"ウエルシア","brand:wikidata":"Q11288684","brand:wikipedia":"ja:ウエルシアホールディングス",healthcare:"pharmacy",name:"ウエルシア"},reference:{key:"amenity",value:"pharmacy"},matchScore:2,suggestion:true},"amenity/pharmacy/ウエルシア薬局":{name:"ウエルシア薬局",icon:"maki-pharmacy",geometry:["point","area"],tags:{amenity:"pharmacy","brand:wikidata":"Q11288687"},addTags:{amenity:"pharmacy",brand:"ウエルシア薬局","brand:wikidata":"Q11288687","brand:wikipedia":"ja:ウエルシア薬局",healthcare:"pharmacy",name:"ウエルシア薬局"},removeTags:{amenity:"pharmacy",brand:"ウエルシア薬局","brand:wikidata":"Q11288687","brand:wikipedia":"ja:ウエルシア薬局",healthcare:"pharmacy",name:"ウエルシア薬局"},reference:{key:"amenity",value:"pharmacy"},matchScore:2,suggestion:true},"amenity/pharmacy/カワチ薬品":{name:"カワチ薬品",icon:"maki-pharmacy",geometry:["point","area"],tags:{amenity:"pharmacy","brand:wikidata":"Q11295397"},addTags:{amenity:"pharmacy",brand:"カワチ薬品","brand:wikidata":"Q11295397","brand:wikipedia":"ja:カワチ薬品",healthcare:"pharmacy",name:"カワチ薬品"},removeTags:{amenity:"pharmacy",brand:"カワチ薬品","brand:wikidata":"Q11295397","brand:wikipedia":"ja:カワチ薬品",healthcare:"pharmacy",name:"カワチ薬品"},reference:{key:"amenity",value:"pharmacy"},matchScore:2,suggestion:true},"amenity/pharmacy/キリン堂":{name:"キリン堂",icon:"maki-pharmacy",geometry:["point","area"],tags:{amenity:"pharmacy","brand:wikidata":"Q11297751"},addTags:{amenity:"pharmacy",brand:"キリン堂","brand:wikidata":"Q11297751","brand:wikipedia":"ja:キリン堂",healthcare:"pharmacy",name:"キリン堂"},removeTags:{amenity:"pharmacy",brand:"キリン堂","brand:wikidata":"Q11297751","brand:wikipedia":"ja:キリン堂",healthcare:"pharmacy",name:"キリン堂"},reference:{key:"amenity",value:"pharmacy"},matchScore:2,suggestion:true},"amenity/pharmacy/ココカラファイン":{name:"ココカラファイン",icon:"maki-pharmacy",geometry:["point","area"],tags:{amenity:"pharmacy","brand:wikidata":"Q11301948"},addTags:{amenity:"pharmacy",brand:"ココカラファイン","brand:wikidata":"Q11301948","brand:wikipedia":"ja:ココカラファイン",healthcare:"pharmacy",name:"ココカラファイン"},removeTags:{amenity:"pharmacy",brand:"ココカラファイン","brand:wikidata":"Q11301948","brand:wikipedia":"ja:ココカラファイン",healthcare:"pharmacy",name:"ココカラファイン"},reference:{key:"amenity",value:"pharmacy"},matchScore:2,suggestion:true},"amenity/pharmacy/サンドラッグ":{name:"サンドラッグ",icon:"maki-pharmacy",geometry:["point","area"],tags:{amenity:"pharmacy","brand:wikidata":"Q11305867"},addTags:{amenity:"pharmacy",brand:"サンドラッグ","brand:wikidata":"Q11305867","brand:wikipedia":"ja:サンドラッグ",healthcare:"pharmacy",name:"サンドラッグ"},removeTags:{amenity:"pharmacy",brand:"サンドラッグ","brand:wikidata":"Q11305867","brand:wikipedia":"ja:サンドラッグ",healthcare:"pharmacy",name:"サンドラッグ"},reference:{key:"amenity",value:"pharmacy"},matchScore:2,suggestion:true},"amenity/pharmacy/セイジョー":{name:"セイジョー",icon:"maki-pharmacy",geometry:["point","area"],tags:{amenity:"pharmacy","brand:wikidata":"Q11314133"},addTags:{amenity:"pharmacy",brand:"セイジョー","brand:wikidata":"Q11314133","brand:wikipedia":"ja:セイジョー",healthcare:"pharmacy",name:"セイジョー"},removeTags:{amenity:"pharmacy",brand:"セイジョー","brand:wikidata":"Q11314133","brand:wikipedia":"ja:セイジョー",healthcare:"pharmacy",name:"セイジョー"},reference:{key:"amenity",value:"pharmacy"},matchScore:2,suggestion:true},"amenity/pharmacy/マツモトキヨシ":{name:"マツモトキヨシ",icon:"maki-pharmacy",geometry:["point","area"],tags:{amenity:"pharmacy","brand:wikidata":"Q8014776"},addTags:{amenity:"pharmacy",brand:"マツモトキヨシ","brand:wikidata":"Q8014776","brand:wikipedia":"ja:マツモトキヨシ",healthcare:"pharmacy",name:"マツモトキヨシ"},removeTags:{amenity:"pharmacy",brand:"マツモトキヨシ","brand:wikidata":"Q8014776","brand:wikipedia":"ja:マツモトキヨシ",healthcare:"pharmacy",name:"マツモトキヨシ"},reference:{key:"amenity",value:"pharmacy"},matchScore:2,suggestion:true},"amenity/post_box/Deutsche Post":{name:"Deutsche Post",icon:"temaki-post_box",geometry:["point","vertex"],tags:{amenity:"post_box","brand:wikidata":"Q157645"},addTags:{amenity:"post_box",brand:"Deutsche Post","brand:wikidata":"Q157645","brand:wikipedia":"en:Deutsche Post",name:"Deutsche Post"},removeTags:{amenity:"post_box",brand:"Deutsche Post","brand:wikidata":"Q157645","brand:wikipedia":"en:Deutsche Post",name:"Deutsche Post"},matchScore:2,suggestion:true},"amenity/post_box/USPS":{name:"USPS",icon:"temaki-post_box",geometry:["point","vertex"],tags:{amenity:"post_box","brand:wikidata":"Q668687"},addTags:{amenity:"post_box",brand:"USPS","brand:wikidata":"Q668687","brand:wikipedia":"en:United States Postal Service",name:"USPS",operator:"USPS"},removeTags:{amenity:"post_box",brand:"USPS","brand:wikidata":"Q668687","brand:wikipedia":"en:United States Postal Service",name:"USPS",operator:"USPS"},matchScore:2,suggestion:true},"amenity/post_office/Australia Post":{name:"Australia Post",icon:"maki-post",geometry:["point","area"],tags:{amenity:"post_office","brand:wikidata":"Q1142936"},addTags:{amenity:"post_office",brand:"Australia Post","brand:wikidata":"Q1142936","brand:wikipedia":"en:Australia Post",name:"Australia Post"},removeTags:{amenity:"post_office",brand:"Australia Post","brand:wikidata":"Q1142936","brand:wikipedia":"en:Australia Post",name:"Australia Post"},matchScore:2,suggestion:true},"amenity/post_office/CTT":{name:"CTT",icon:"maki-post",geometry:["point","area"],tags:{amenity:"post_office","brand:wikidata":"Q909429"},addTags:{amenity:"post_office",brand:"CTT","brand:wikidata":"Q909429","brand:wikipedia":"en:CTT (Macau)",name:"CTT"},removeTags:{amenity:"post_office",brand:"CTT","brand:wikidata":"Q909429","brand:wikipedia":"en:CTT (Macau)",name:"CTT"},matchScore:2,suggestion:true},"amenity/post_office/Canada Post":{name:"Canada Post",icon:"maki-post",geometry:["point","area"],tags:{amenity:"post_office","brand:wikidata":"Q1032001"},addTags:{amenity:"post_office",brand:"Canada Post","brand:wikidata":"Q1032001","brand:wikipedia":"en:Canada Post",name:"Canada Post"},removeTags:{amenity:"post_office",brand:"Canada Post","brand:wikidata":"Q1032001","brand:wikipedia":"en:Canada Post",name:"Canada Post"},matchScore:2,suggestion:true},"amenity/post_office/Correios":{name:"Correios",icon:"maki-post",geometry:["point","area"],tags:{amenity:"post_office","brand:wikidata":"Q3375004"},addTags:{amenity:"post_office",brand:"Correios","brand:wikidata":"Q3375004","brand:wikipedia":"en:Correios",name:"Correios"},removeTags:{amenity:"post_office",brand:"Correios","brand:wikidata":"Q3375004","brand:wikipedia":"en:Correios",name:"Correios"},matchScore:2,suggestion:true},"amenity/post_office/Correo Argentino":{name:"Correo Argentino",icon:"maki-post",geometry:["point","area"],tags:{amenity:"post_office","brand:wikidata":"Q4036566"},addTags:{amenity:"post_office",brand:"Correo Argentino","brand:wikidata":"Q4036566","brand:wikipedia":"en:Correo Argentino",name:"Correo Argentino"},removeTags:{amenity:"post_office",brand:"Correo Argentino","brand:wikidata":"Q4036566","brand:wikipedia":"en:Correo Argentino",name:"Correo Argentino"},matchScore:2,suggestion:true},"amenity/post_office/Correos de Chile":{name:"Correos de Chile",icon:"maki-post",geometry:["point","area"],tags:{amenity:"post_office","brand:wikidata":"Q5172893"},addTags:{amenity:"post_office",brand:"Correos de Chile","brand:wikidata":"Q5172893","brand:wikipedia":"en:Correos de Chile",name:"Correos de Chile"},removeTags:{amenity:"post_office",brand:"Correos de Chile","brand:wikidata":"Q5172893","brand:wikipedia":"en:Correos de Chile",name:"Correos de Chile"},matchScore:2,suggestion:true},"amenity/post_office/Correos de Costa Rica":{name:"Correos de Costa Rica",icon:"maki-post",geometry:["point","area"],tags:{amenity:"post_office","brand:wikidata":"Q5172894"},addTags:{amenity:"post_office",brand:"Correos de Costa Rica","brand:wikidata":"Q5172894","brand:wikipedia":"en:Correos de Costa Rica",name:"Correos de Costa Rica"},removeTags:{amenity:"post_office",brand:"Correos de Costa Rica","brand:wikidata":"Q5172894","brand:wikipedia":"en:Correos de Costa Rica",name:"Correos de Costa Rica"},matchScore:2,suggestion:true},"amenity/post_office/DHL":{name:"DHL",icon:"maki-post",geometry:["point","area"],tags:{amenity:"post_office","brand:wikidata":"Q489815"},addTags:{amenity:"post_office",brand:"DHL","brand:wikidata":"Q489815","brand:wikipedia":"en:DHL Express",name:"DHL",operator:"DHL"},removeTags:{amenity:"post_office",brand:"DHL","brand:wikidata":"Q489815","brand:wikipedia":"en:DHL Express",name:"DHL",operator:"DHL"},matchScore:2,suggestion:true},"amenity/post_office/DPD Paketshop":{name:"DPD Paketshop",icon:"maki-post",geometry:["point","area"],tags:{amenity:"post_office","brand:wikidata":"Q541030"},addTags:{amenity:"post_office",brand:"DPD Paketshop","brand:wikidata":"Q541030","brand:wikipedia":"en:DPDgroup",name:"DPD Paketshop"},removeTags:{amenity:"post_office",brand:"DPD Paketshop","brand:wikidata":"Q541030","brand:wikipedia":"en:DPDgroup",name:"DPD Paketshop"},matchScore:2,suggestion:true},"amenity/post_office/Deutsche Post":{name:"Deutsche Post",icon:"maki-post",geometry:["point","area"],tags:{amenity:"post_office","brand:wikidata":"Q157645"},addTags:{amenity:"post_office",brand:"Deutsche Post","brand:wikidata":"Q157645","brand:wikipedia":"en:Deutsche Post",name:"Deutsche Post"},removeTags:{amenity:"post_office",brand:"Deutsche Post","brand:wikidata":"Q157645","brand:wikipedia":"en:Deutsche Post",name:"Deutsche Post"},matchScore:2,suggestion:true},"amenity/post_office/Fancourier":{name:"Fancourier",icon:"maki-post",geometry:["point","area"],tags:{amenity:"post_office","brand:wikidata":"Q12727984"},addTags:{amenity:"post_office",brand:"Fancourier","brand:wikidata":"Q12727984","brand:wikipedia":"ro:FAN Courier Express",name:"Fancourier"},removeTags:{amenity:"post_office",brand:"Fancourier","brand:wikidata":"Q12727984","brand:wikipedia":"ro:FAN Courier Express",name:"Fancourier"},matchScore:2,suggestion:true},"amenity/post_office/FedEx":{name:"FedEx",icon:"maki-post",geometry:["point","area"],tags:{amenity:"post_office","brand:wikidata":"Q459477"},addTags:{amenity:"post_office",brand:"FedEx","brand:wikidata":"Q459477","brand:wikipedia":"en:FedEx",name:"FedEx"},removeTags:{amenity:"post_office",brand:"FedEx","brand:wikidata":"Q459477","brand:wikipedia":"en:FedEx",name:"FedEx"},matchScore:2,suggestion:true},"amenity/post_office/Hermes Paketshop":{name:"Hermes Paketshop",icon:"maki-post",geometry:["point","area"],tags:{amenity:"post_office","brand:wikidata":"Q1613532"},addTags:{amenity:"post_office",brand:"Hermes Paketshop","brand:wikidata":"Q1613532","brand:wikipedia":"en:Hermes Group",name:"Hermes Paketshop"},removeTags:{amenity:"post_office",brand:"Hermes Paketshop","brand:wikidata":"Q1613532","brand:wikipedia":"en:Hermes Group",name:"Hermes Paketshop"},matchScore:2,suggestion:true},"amenity/post_office/LBC":{name:"LBC",icon:"maki-post",geometry:["point","area"],tags:{amenity:"post_office","brand:wikidata":"Q17075584"},addTags:{amenity:"post_office",brand:"LBC","brand:wikidata":"Q17075584","brand:wikipedia":"en:LBC Express",name:"LBC"},removeTags:{amenity:"post_office",brand:"LBC","brand:wikidata":"Q17075584","brand:wikipedia":"en:LBC Express",name:"LBC"},matchScore:2,suggestion:true},"amenity/post_office/La Poste":{name:"La Poste",icon:"maki-post",geometry:["point","area"],tags:{amenity:"post_office","brand:wikidata":"Q373724"},addTags:{amenity:"post_office",brand:"La Poste","brand:wikidata":"Q373724","brand:wikipedia":"fr:La Poste (entreprise française)",name:"La Poste"},removeTags:{amenity:"post_office",brand:"La Poste","brand:wikidata":"Q373724","brand:wikipedia":"fr:La Poste (entreprise française)",name:"La Poste"},matchScore:2,suggestion:true},"amenity/post_office/MRW":{name:"MRW",icon:"maki-post",geometry:["point","area"],tags:{amenity:"post_office","brand:wikidata":"Q23767821"},addTags:{amenity:"post_office",brand:"MRW","brand:wikidata":"Q23767821","brand:wikipedia":"es:MRW",name:"MRW"},removeTags:{amenity:"post_office",brand:"MRW","brand:wikidata":"Q23767821","brand:wikipedia":"es:MRW",name:"MRW"},matchScore:2,suggestion:true},"amenity/post_office/Oficina de Correos":{name:"Oficina de Correos",icon:"maki-post",geometry:["point","area"],tags:{amenity:"post_office","brand:wikidata":"Q776605"},addTags:{amenity:"post_office",brand:"Oficina de Correos","brand:wikidata":"Q776605","brand:wikipedia":"es:Correos (España)",name:"Oficina de Correos"},removeTags:{amenity:"post_office",brand:"Oficina de Correos","brand:wikidata":"Q776605","brand:wikipedia":"es:Correos (España)",name:"Oficina de Correos"},matchScore:2,suggestion:true},"amenity/post_office/Poczta Polska":{name:"Poczta Polska",icon:"maki-post",geometry:["point","area"],tags:{amenity:"post_office","brand:wikidata":"Q168833"},addTags:{amenity:"post_office",brand:"Poczta Polska","brand:wikidata":"Q168833","brand:wikipedia":"en:Poczta Polska",name:"Poczta Polska"},removeTags:{amenity:"post_office",brand:"Poczta Polska","brand:wikidata":"Q168833","brand:wikipedia":"en:Poczta Polska",name:"Poczta Polska"},matchScore:2,suggestion:true},"amenity/post_office/Poste Italiane":{name:"Poste Italiane",icon:"maki-post",geometry:["point","area"],tags:{amenity:"post_office","brand:wikidata":"Q495026"},addTags:{amenity:"post_office",brand:"Poste Italiane","brand:wikidata":"Q495026","brand:wikipedia":"en:Poste italiane",name:"Poste Italiane"},removeTags:{amenity:"post_office",brand:"Poste Italiane","brand:wikidata":"Q495026","brand:wikipedia":"en:Poste italiane",name:"Poste Italiane"},matchScore:2,suggestion:true},"amenity/post_office/Slovenská pošta":{name:"Slovenská pošta",icon:"maki-post",geometry:["point","area"],tags:{amenity:"post_office","brand:wikidata":"Q1191849"},addTags:{amenity:"post_office",brand:"Slovenská pošta","brand:wikidata":"Q1191849","brand:wikipedia":"en:Slovenská pošta",name:"Slovenská pošta"},removeTags:{amenity:"post_office",brand:"Slovenská pošta","brand:wikidata":"Q1191849","brand:wikipedia":"en:Slovenská pošta",name:"Slovenská pošta"},matchScore:2,suggestion:true},"amenity/post_office/The UPS Store":{name:"The UPS Store",icon:"maki-post",geometry:["point","area"],tags:{amenity:"post_office","brand:wikidata":"Q7771029"},addTags:{amenity:"post_office",brand:"The UPS Store","brand:wikidata":"Q7771029","brand:wikipedia":"en:The UPS Store",name:"The UPS Store"},removeTags:{amenity:"post_office",brand:"The UPS Store","brand:wikidata":"Q7771029","brand:wikipedia":"en:The UPS Store",name:"The UPS Store"},matchScore:2,suggestion:true},"amenity/post_office/US Post Office":{name:"US Post Office",icon:"maki-post",geometry:["point","area"],tags:{amenity:"post_office","brand:wikidata":"Q668687"},addTags:{amenity:"post_office",brand:"US Post Office","brand:wikidata":"Q668687","brand:wikipedia":"en:United States Postal Service",name:"US Post Office",operator:"USPS"},removeTags:{amenity:"post_office",brand:"US Post Office","brand:wikidata":"Q668687","brand:wikipedia":"en:United States Postal Service",name:"US Post Office",operator:"USPS"},matchScore:2,suggestion:true},"amenity/post_office/ΕΛΤΑ":{name:"ΕΛΤΑ",icon:"maki-post",geometry:["point","area"],tags:{amenity:"post_office","brand:wikidata":"Q1275135"},addTags:{amenity:"post_office",brand:"ΕΛΤΑ","brand:wikidata":"Q1275135","brand:wikipedia":"el:Ελληνικά Ταχυδρομεία",name:"ΕΛΤΑ"},removeTags:{amenity:"post_office",brand:"ΕΛΤΑ","brand:wikidata":"Q1275135","brand:wikipedia":"el:Ελληνικά Ταχυδρομεία",name:"ΕΛΤΑ"},matchScore:2,suggestion:true},"amenity/post_office/Белпочта":{name:"Белпочта",icon:"maki-post",geometry:["point","area"],tags:{amenity:"post_office","brand:wikidata":"Q2662336"},addTags:{amenity:"post_office",brand:"Белпочта","brand:wikidata":"Q2662336","brand:wikipedia":"en:Belposhta",name:"Белпочта"},removeTags:{amenity:"post_office",brand:"Белпочта","brand:wikidata":"Q2662336","brand:wikipedia":"en:Belposhta",name:"Белпочта"},matchScore:2,suggestion:true},"amenity/post_office/Казпочта":{name:"Казпочта",icon:"maki-post",geometry:["point","area"],tags:{amenity:"post_office","brand:wikidata":"Q746263"},addTags:{amenity:"post_office",brand:"Казпочта","brand:wikidata":"Q746263","brand:wikipedia":"ru:Казпочта",name:"Казпочта"},removeTags:{amenity:"post_office",brand:"Казпочта","brand:wikidata":"Q746263","brand:wikipedia":"ru:Казпочта",name:"Казпочта"},matchScore:2,suggestion:true},"amenity/post_office/Нова Пошта №1":{name:"Нова Пошта №1",icon:"maki-post",geometry:["point","area"],tags:{amenity:"post_office","brand:wikidata":"Q12133863"},addTags:{amenity:"post_office",brand:"Нова Пошта №1","brand:wikidata":"Q12133863","brand:wikipedia":"uk:Нова пошта",name:"Нова Пошта №1"},removeTags:{amenity:"post_office",brand:"Нова Пошта №1","brand:wikidata":"Q12133863","brand:wikipedia":"uk:Нова пошта",name:"Нова Пошта №1"},matchScore:2,suggestion:true},"amenity/post_office/Почта России":{name:"Почта России",icon:"maki-post",geometry:["point","area"],tags:{amenity:"post_office","brand:wikidata":"Q1502763"},addTags:{amenity:"post_office",brand:"Почта России","brand:wikidata":"Q1502763","brand:wikipedia":"ru:Почта России",name:"Почта России"},removeTags:{amenity:"post_office",brand:"Почта России","brand:wikidata":"Q1502763","brand:wikipedia":"ru:Почта России",name:"Почта России"},matchScore:2,suggestion:true},"amenity/post_office/Укрпошта":{name:"Укрпошта",icon:"maki-post",geometry:["point","area"],tags:{amenity:"post_office","brand:wikidata":"Q2470783"},addTags:{amenity:"post_office",brand:"Укрпошта","brand:wikidata":"Q2470783","brand:wikipedia":"en:Ukrposhta",name:"Укрпошта"},removeTags:{amenity:"post_office",brand:"Укрпошта","brand:wikidata":"Q2470783","brand:wikipedia":"en:Ukrposhta",name:"Укрпошта"},matchScore:2,suggestion:true},"amenity/post_office/中国邮政":{name:"中国邮政",icon:"maki-post",geometry:["point","area"],tags:{amenity:"post_office","brand:wikidata":"Q1066476"},addTags:{amenity:"post_office",brand:"中国邮政","brand:en":"China Post","brand:wikidata":"Q1066476","brand:wikipedia":"en:China Post",name:"中国邮政","name:en":"China Post"},removeTags:{amenity:"post_office",brand:"中国邮政","brand:en":"China Post","brand:wikidata":"Q1066476","brand:wikipedia":"en:China Post",name:"中国邮政","name:en":"China Post"},matchScore:2,suggestion:true},"amenity/public_bookcase/Little Free Library":{name:"Little Free Library",icon:"maki-library",geometry:["point","area"],tags:{amenity:"public_bookcase","brand:wikidata":"Q6650101"},addTags:{amenity:"public_bookcase",brand:"Little Free Library","brand:wikidata":"Q6650101","brand:wikipedia":"en:Little Free Library",name:"Little Free Library"},removeTags:{amenity:"public_bookcase",brand:"Little Free Library","brand:wikidata":"Q6650101","brand:wikipedia":"en:Little Free Library",name:"Little Free Library"},matchScore:2,suggestion:true},"amenity/restaurant/100 Montaditos":{name:"100 Montaditos",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant","brand:wikidata":"Q8355805"},addTags:{amenity:"restaurant",brand:"100 Montaditos","brand:wikidata":"Q8355805","brand:wikipedia":"en:Cervecería 100 Montaditos",name:"100 Montaditos"},removeTags:{amenity:"restaurant",brand:"100 Montaditos","brand:wikidata":"Q8355805","brand:wikipedia":"en:Cervecería 100 Montaditos",name:"100 Montaditos"},matchScore:2,suggestion:true},"amenity/restaurant/italian/ASK Italian":{name:"ASK Italian",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant",cuisine:"italian","brand:wikidata":"Q4807056"},addTags:{amenity:"restaurant",brand:"ASK Italian","brand:wikipedia":"en:ASK Italian","brand:wikidata":"Q4807056",cuisine:"italian",name:"ASK Italian"},removeTags:{amenity:"restaurant",brand:"ASK Italian","brand:wikipedia":"en:ASK Italian","brand:wikidata":"Q4807056",cuisine:"italian",name:"ASK Italian"},reference:{key:"cuisine",value:"italian"},matchScore:2,suggestion:true},"amenity/restaurant/american/Applebee’s Neighborhood Grill & Bar":{name:"Applebee’s Neighborhood Grill & Bar",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant",cuisine:"american","brand:wikidata":"Q621532"},addTags:{amenity:"restaurant",brand:"Applebee’s Neighborhood Grill & Bar","brand:wikidata":"Q621532","brand:wikipedia":"en:Applebee's",cuisine:"american",name:"Applebee’s Neighborhood Grill & Bar"},removeTags:{amenity:"restaurant",brand:"Applebee’s Neighborhood Grill & Bar","brand:wikidata":"Q621532","brand:wikipedia":"en:Applebee's",cuisine:"american",name:"Applebee’s Neighborhood Grill & Bar"},reference:{key:"cuisine",value:"american"},matchScore:2,suggestion:true},"amenity/restaurant/Autogrill":{name:"Autogrill",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant","brand:wikidata":"Q786790"},addTags:{amenity:"restaurant",brand:"Autogrill","brand:wikidata":"Q786790","brand:wikipedia":"en:Autogrill",name:"Autogrill"},removeTags:{amenity:"restaurant",brand:"Autogrill","brand:wikidata":"Q786790","brand:wikipedia":"en:Autogrill",name:"Autogrill"},matchScore:2,suggestion:true},"amenity/restaurant/Bella Italia":{name:"Bella Italia",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant","brand:wikidata":"Q4883362"},addTags:{amenity:"restaurant",brand:"Bella Italia","brand:wikidata":"Q4883362","brand:wikipedia":"en:Bella Italia",name:"Bella Italia"},removeTags:{amenity:"restaurant",brand:"Bella Italia","brand:wikidata":"Q4883362","brand:wikipedia":"en:Bella Italia",name:"Bella Italia"},matchScore:2,suggestion:true},"amenity/restaurant/Big Boy":{name:"Big Boy",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant","brand:wikidata":"Q4386779"},addTags:{amenity:"restaurant",brand:"Big Boy","brand:wikidata":"Q4386779","brand:wikipedia":"en:Big Boy Restaurants",name:"Big Boy"},removeTags:{amenity:"restaurant",brand:"Big Boy","brand:wikidata":"Q4386779","brand:wikipedia":"en:Big Boy Restaurants",name:"Big Boy"},matchScore:2,suggestion:true},"amenity/restaurant/american/Black Bear Diner":{name:"Black Bear Diner",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant",cuisine:"american","brand:wikidata":"Q4920343"},addTags:{amenity:"restaurant",brand:"Black Bear Diner","brand:wikidata":"Q4920343","brand:wikipedia":"en:Black Bear Diner",cuisine:"american",name:"Black Bear Diner"},removeTags:{amenity:"restaurant",brand:"Black Bear Diner","brand:wikidata":"Q4920343","brand:wikipedia":"en:Black Bear Diner",cuisine:"american",name:"Black Bear Diner"},reference:{key:"cuisine",value:"american"},matchScore:2,suggestion:true},"amenity/restaurant/Bob Evans":{name:"Bob Evans",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant","brand:wikidata":"Q4932385"},addTags:{amenity:"restaurant",brand:"Bob Evans","brand:wikidata":"Q4932385","brand:wikipedia":"en:Bob Evans (restaurateur)",name:"Bob Evans"},removeTags:{amenity:"restaurant",brand:"Bob Evans","brand:wikidata":"Q4932385","brand:wikipedia":"en:Bob Evans (restaurateur)",name:"Bob Evans"},matchScore:2,suggestion:true},"amenity/restaurant/seafood/Bonefish Grill":{name:"Bonefish Grill",icon:"maki-restaurant-seafood",geometry:["point","area"],tags:{amenity:"restaurant",cuisine:"seafood","brand:wikidata":"Q4941599"},addTags:{amenity:"restaurant",brand:"Bonefish Grill","brand:wikidata":"Q4941599","brand:wikipedia":"en:Bonefish Grill",cuisine:"seafood",name:"Bonefish Grill"},removeTags:{amenity:"restaurant",brand:"Bonefish Grill","brand:wikidata":"Q4941599","brand:wikipedia":"en:Bonefish Grill",cuisine:"seafood",name:"Bonefish Grill"},reference:{key:"cuisine",value:"seafood"},matchScore:2,suggestion:true},"amenity/restaurant/pizza/Boston Pizza":{name:"Boston Pizza",icon:"maki-restaurant-pizza",geometry:["point","area"],tags:{amenity:"restaurant",cuisine:"pizza","brand:wikidata":"Q894578"},addTags:{amenity:"restaurant",brand:"Boston Pizza","brand:wikidata":"Q894578","brand:wikipedia":"en:Boston Pizza",cuisine:"pizza",name:"Boston Pizza"},removeTags:{amenity:"restaurant",brand:"Boston Pizza","brand:wikidata":"Q894578","brand:wikipedia":"en:Boston Pizza",cuisine:"pizza",name:"Boston Pizza"},reference:{key:"cuisine",value:"pizza"},matchScore:2,suggestion:true},"amenity/restaurant/Buffalo Grill":{name:"Buffalo Grill",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant","brand:wikidata":"Q944655"},addTags:{amenity:"restaurant",brand:"Buffalo Grill","brand:wikidata":"Q944655","brand:wikipedia":"en:Buffalo Grill",cuisine:"steak_house",name:"Buffalo Grill"},removeTags:{amenity:"restaurant",brand:"Buffalo Grill","brand:wikidata":"Q944655","brand:wikipedia":"en:Buffalo Grill",cuisine:"steak_house",name:"Buffalo Grill"},matchScore:2,suggestion:true},"amenity/restaurant/Buffalo Wild Wings":{name:"Buffalo Wild Wings",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant","brand:wikidata":"Q509255"},addTags:{amenity:"restaurant",brand:"Buffalo Wild Wings","brand:wikidata":"Q509255","brand:wikipedia":"en:Buffalo Wild Wings",cuisine:"wings",name:"Buffalo Wild Wings"},removeTags:{amenity:"restaurant",brand:"Buffalo Wild Wings","brand:wikidata":"Q509255","brand:wikipedia":"en:Buffalo Wild Wings",cuisine:"wings",name:"Buffalo Wild Wings"},matchScore:2,suggestion:true},"amenity/restaurant/mexican/Cafe Rio":{name:"Cafe Rio",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant",cuisine:"mexican","brand:wikidata":"Q5017108"},addTags:{amenity:"restaurant",brand:"Cafe Rio","brand:wikidata":"Q5017108","brand:wikipedia":"en:Cafe Rio",cuisine:"mexican",name:"Cafe Rio"},removeTags:{amenity:"restaurant",brand:"Cafe Rio","brand:wikidata":"Q5017108","brand:wikipedia":"en:Cafe Rio",cuisine:"mexican",name:"Cafe Rio"},reference:{key:"cuisine",value:"mexican"},matchScore:2,suggestion:true},"amenity/restaurant/pizza/California Pizza Kitchen":{name:"California Pizza Kitchen",icon:"maki-restaurant-pizza",geometry:["point","area"],tags:{amenity:"restaurant",cuisine:"pizza","brand:wikidata":"Q15109854"},addTags:{amenity:"restaurant",brand:"California Pizza Kitchen","brand:wikidata":"Q15109854","brand:wikipedia":"en:California Pizza Kitchen",cuisine:"pizza",name:"California Pizza Kitchen"},removeTags:{amenity:"restaurant",brand:"California Pizza Kitchen","brand:wikidata":"Q15109854","brand:wikipedia":"en:California Pizza Kitchen",cuisine:"pizza",name:"California Pizza Kitchen"},reference:{key:"cuisine",value:"pizza"},matchScore:2,suggestion:true},"amenity/restaurant/italian/Carluccio's":{name:"Carluccio's",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant",cuisine:"italian","brand:wikidata":"Q25111797"},addTags:{amenity:"restaurant",brand:"Carluccio's","brand:wikidata":"Q25111797","brand:wikipedia":"en:Carluccio's Ltd",cuisine:"italian",name:"Carluccio's"},removeTags:{amenity:"restaurant",brand:"Carluccio's","brand:wikidata":"Q25111797","brand:wikipedia":"en:Carluccio's Ltd",cuisine:"italian",name:"Carluccio's"},reference:{key:"cuisine",value:"italian"},matchScore:2,suggestion:true},"amenity/restaurant/italian/Carrabba's Italian Grill":{name:"Carrabba's Italian Grill",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant",cuisine:"italian","brand:wikidata":"Q5045999"},addTags:{amenity:"restaurant",brand:"Carrabba's Italian Grill","brand:wikidata":"Q5045999","brand:wikipedia":"en:Carrabba's Italian Grill",cuisine:"italian",name:"Carrabba's Italian Grill"},removeTags:{amenity:"restaurant",brand:"Carrabba's Italian Grill","brand:wikidata":"Q5045999","brand:wikipedia":"en:Carrabba's Italian Grill",cuisine:"italian",name:"Carrabba's Italian Grill"},reference:{key:"cuisine",value:"italian"},matchScore:2,suggestion:true},"amenity/restaurant/american/Cheesecake Factory":{name:"Cheesecake Factory",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant",cuisine:"american","brand:wikidata":"Q1045842"},addTags:{amenity:"restaurant",brand:"Cheesecake Factory","brand:wikidata":"Q1045842","brand:wikipedia":"en:The Cheesecake Factory",cuisine:"american",name:"Cheesecake Factory"},removeTags:{amenity:"restaurant",brand:"Cheesecake Factory","brand:wikidata":"Q1045842","brand:wikipedia":"en:The Cheesecake Factory",cuisine:"american",name:"Cheesecake Factory"},reference:{key:"cuisine",value:"american"},matchScore:2,suggestion:true},"amenity/restaurant/Chili's":{name:"Chili's",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant","brand:wikidata":"Q1072948"},addTags:{amenity:"restaurant",brand:"Chili's","brand:wikidata":"Q1072948","brand:wikipedia":"en:Chili's",cuisine:"tex-mex",name:"Chili's"},removeTags:{amenity:"restaurant",brand:"Chili's","brand:wikidata":"Q1072948","brand:wikipedia":"en:Chili's",cuisine:"tex-mex",name:"Chili's"},matchScore:2,suggestion:true},"amenity/restaurant/Chiquito":{name:"Chiquito",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant","brand:wikidata":"Q5101775"},addTags:{amenity:"restaurant",brand:"Chiquito","brand:wikidata":"Q5101775","brand:wikipedia":"en:Chiquito (restaurant)",cuisine:"tex-mex",name:"Chiquito"},removeTags:{amenity:"restaurant",brand:"Chiquito","brand:wikidata":"Q5101775","brand:wikipedia":"en:Chiquito (restaurant)",cuisine:"tex-mex",name:"Chiquito"},matchScore:2,suggestion:true},"amenity/restaurant/pizza/Chuck E. Cheese's":{name:"Chuck E. Cheese's",icon:"maki-restaurant-pizza",geometry:["point","area"],tags:{amenity:"restaurant",cuisine:"pizza","brand:wikidata":"Q2438391"},addTags:{amenity:"restaurant",brand:"Chuck E. Cheese's","brand:wikidata":"Q2438391","brand:wikipedia":"en:Chuck E. Cheese's",cuisine:"pizza",name:"Chuck E. Cheese's"},removeTags:{amenity:"restaurant",brand:"Chuck E. Cheese's","brand:wikidata":"Q2438391","brand:wikipedia":"en:Chuck E. Cheese's",cuisine:"pizza",name:"Chuck E. Cheese's"},reference:{key:"cuisine",value:"pizza"},matchScore:2,suggestion:true},"amenity/restaurant/pizza/Cici's Pizza":{name:"Cici's Pizza",icon:"maki-restaurant-pizza",geometry:["point","area"],tags:{amenity:"restaurant",cuisine:"pizza","brand:wikidata":"Q2972189"},addTags:{amenity:"restaurant",brand:"Cici's Pizza","brand:wikidata":"Q2972189","brand:wikipedia":"en:Cicis",cuisine:"pizza",name:"Cici's Pizza"},removeTags:{amenity:"restaurant",brand:"Cici's Pizza","brand:wikidata":"Q2972189","brand:wikipedia":"en:Cicis",cuisine:"pizza",name:"Cici's Pizza"},reference:{key:"cuisine",value:"pizza"},matchScore:2,suggestion:true},"amenity/restaurant/french/Courtepaille":{name:"Courtepaille",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant",cuisine:"french","brand:wikidata":"Q3116688"},addTags:{amenity:"restaurant",brand:"Courtepaille","brand:wikidata":"Q3116688","brand:wikipedia":"fr:Grill Courtepaille",cuisine:"french",name:"Courtepaille"},removeTags:{amenity:"restaurant",brand:"Courtepaille","brand:wikidata":"Q3116688","brand:wikipedia":"fr:Grill Courtepaille",cuisine:"french",name:"Courtepaille"},reference:{key:"cuisine",value:"french"},matchScore:2,suggestion:true},"amenity/restaurant/american/Cracker Barrel":{name:"Cracker Barrel",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant",cuisine:"american","brand:wikidata":"Q4492609"},addTags:{amenity:"restaurant",brand:"Cracker Barrel","brand:wikidata":"Q4492609","brand:wikipedia":"en:Cracker Barrel",cuisine:"american",name:"Cracker Barrel"},removeTags:{amenity:"restaurant",brand:"Cracker Barrel","brand:wikidata":"Q4492609","brand:wikipedia":"en:Cracker Barrel",cuisine:"american",name:"Cracker Barrel"},reference:{key:"cuisine",value:"american"},matchScore:2,suggestion:true},"amenity/restaurant/american/Denny's":{name:"Denny's",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant",cuisine:"american","brand:wikidata":"Q1189695"},addTags:{amenity:"restaurant",brand:"Denny's","brand:wikidata":"Q1189695","brand:wikipedia":"en:Denny's",cuisine:"american",name:"Denny's"},removeTags:{amenity:"restaurant",brand:"Denny's","brand:wikidata":"Q1189695","brand:wikipedia":"en:Denny's",cuisine:"american",name:"Denny's"},reference:{key:"cuisine",value:"american"},matchScore:2,suggestion:true},"amenity/restaurant/Dickey's Barbecue Pit":{name:"Dickey's Barbecue Pit",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant","brand:wikidata":"Q19880747"},addTags:{amenity:"restaurant",brand:"Dickey's Barbecue Pit","brand:wikidata":"Q19880747","brand:wikipedia":"en:Dickey's Barbecue Pit",cuisine:"barbecue",name:"Dickey's Barbecue Pit"},removeTags:{amenity:"restaurant",brand:"Dickey's Barbecue Pit","brand:wikidata":"Q19880747","brand:wikipedia":"en:Dickey's Barbecue Pit",cuisine:"barbecue",name:"Dickey's Barbecue Pit"},matchScore:2,suggestion:true},"amenity/restaurant/italian/East Side Mario's":{name:"East Side Mario's",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant",cuisine:"italian","brand:wikidata":"Q5329375"},addTags:{amenity:"restaurant",brand:"East Side Mario's","brand:wikidata":"Q5329375","brand:wikipedia":"en:East Side Mario's",cuisine:"italian",name:"East Side Mario's"},removeTags:{amenity:"restaurant",brand:"East Side Mario's","brand:wikidata":"Q5329375","brand:wikipedia":"en:East Side Mario's",cuisine:"italian",name:"East Side Mario's"},reference:{key:"cuisine",value:"italian"},matchScore:2,suggestion:true},"amenity/restaurant/Famous Dave's":{name:"Famous Dave's",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant","brand:wikidata":"Q5433448"},addTags:{amenity:"restaurant",brand:"Famous Dave's","brand:wikidata":"Q5433448","brand:wikipedia":"en:Famous Dave's",cuisine:"barbecue",name:"Famous Dave's"},removeTags:{amenity:"restaurant",brand:"Famous Dave's","brand:wikidata":"Q5433448","brand:wikipedia":"en:Famous Dave's",cuisine:"barbecue",name:"Famous Dave's"},matchScore:2,suggestion:true},"amenity/restaurant/french/Flunch":{name:"Flunch",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant",cuisine:"french","brand:wikidata":"Q629326"},addTags:{amenity:"restaurant",brand:"Flunch","brand:wikidata":"Q629326","brand:wikipedia":"en:Flunch",cuisine:"french",name:"Flunch"},removeTags:{amenity:"restaurant",brand:"Flunch","brand:wikidata":"Q629326","brand:wikipedia":"en:Flunch",cuisine:"french",name:"Flunch"},reference:{key:"cuisine",value:"french"},matchScore:2,suggestion:true},"amenity/restaurant/american/Foster's Hollywood":{name:"Foster's Hollywood",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant",cuisine:"american","brand:wikidata":"Q5864366"},addTags:{amenity:"restaurant",brand:"Foster's Hollywood","brand:wikidata":"Q5864366","brand:wikipedia":"en:Foster's Hollywood",cuisine:"american",name:"Foster's Hollywood"},removeTags:{amenity:"restaurant",brand:"Foster's Hollywood","brand:wikidata":"Q5864366","brand:wikipedia":"en:Foster's Hollywood",cuisine:"american",name:"Foster's Hollywood"},reference:{key:"cuisine",value:"american"},matchScore:2,suggestion:true},"amenity/restaurant/italian/Frankie & Benny's":{name:"Frankie & Benny's",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant",cuisine:"italian","brand:wikidata":"Q5490892"},addTags:{amenity:"restaurant",brand:"Frankie & Benny's","brand:wikidata":"Q5490892","brand:wikipedia":"en:Frankie & Benny's",cuisine:"italian",name:"Frankie & Benny's"},removeTags:{amenity:"restaurant",brand:"Frankie & Benny's","brand:wikidata":"Q5490892","brand:wikipedia":"en:Frankie & Benny's",cuisine:"italian",name:"Frankie & Benny's"},reference:{key:"cuisine",value:"italian"},matchScore:2,suggestion:true},"amenity/restaurant/american/Friendly's":{name:"Friendly's",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant",cuisine:"american","brand:wikidata":"Q1464513"},addTags:{amenity:"restaurant",brand:"Friendly's","brand:wikidata":"Q1464513","brand:wikipedia":"en:Friendly's",cuisine:"american",name:"Friendly's"},removeTags:{amenity:"restaurant",brand:"Friendly's","brand:wikidata":"Q1464513","brand:wikipedia":"en:Friendly's",cuisine:"american",name:"Friendly's"},reference:{key:"cuisine",value:"american"},matchScore:2,suggestion:true},"amenity/restaurant/Fuddruckers":{name:"Fuddruckers",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant","brand:wikidata":"Q5507056"},addTags:{amenity:"restaurant",brand:"Fuddruckers","brand:wikidata":"Q5507056","brand:wikipedia":"en:Fuddruckers",cuisine:"burger",name:"Fuddruckers"},removeTags:{amenity:"restaurant",brand:"Fuddruckers","brand:wikidata":"Q5507056","brand:wikipedia":"en:Fuddruckers",cuisine:"burger",name:"Fuddruckers"},matchScore:2,suggestion:true},"amenity/restaurant/american/Golden Corral":{name:"Golden Corral",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant",cuisine:"american","brand:wikidata":"Q4039560"},addTags:{amenity:"restaurant",brand:"Golden Corral","brand:wikidata":"Q4039560","brand:wikipedia":"en:Golden Corral",cuisine:"american",name:"Golden Corral"},removeTags:{amenity:"restaurant",brand:"Golden Corral","brand:wikidata":"Q4039560","brand:wikipedia":"en:Golden Corral",cuisine:"american",name:"Golden Corral"},reference:{key:"cuisine",value:"american"},matchScore:2,suggestion:true},"amenity/restaurant/Gourmet Burger Kitchen":{name:"Gourmet Burger Kitchen",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant","brand:wikidata":"Q5588445"},addTags:{amenity:"restaurant",brand:"Gourmet Burger Kitchen","brand:wikidata":"Q5588445","brand:wikipedia":"en:Gourmet Burger Kitchen",cuisine:"burger",name:"Gourmet Burger Kitchen"},removeTags:{amenity:"restaurant",brand:"Gourmet Burger Kitchen","brand:wikidata":"Q5588445","brand:wikipedia":"en:Gourmet Burger Kitchen",cuisine:"burger",name:"Gourmet Burger Kitchen"},matchScore:2,suggestion:true},"amenity/restaurant/Hard Rock Cafe":{name:"Hard Rock Cafe",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant","brand:wikidata":"Q918151"},addTags:{amenity:"restaurant",brand:"Hard Rock Cafe","brand:wikidata":"Q918151","brand:wikipedia":"en:Hard Rock Cafe",name:"Hard Rock Cafe"},removeTags:{amenity:"restaurant",brand:"Hard Rock Cafe","brand:wikidata":"Q918151","brand:wikipedia":"en:Hard Rock Cafe",name:"Hard Rock Cafe"},matchScore:2,suggestion:true},"amenity/restaurant/american/Harvester":{name:"Harvester",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant",cuisine:"american","brand:wikidata":"Q5676915"},addTags:{amenity:"restaurant",brand:"Harvester","brand:wikidata":"Q5676915","brand:wikipedia":"en:Harvester (restaurant)",cuisine:"american",name:"Harvester"},removeTags:{amenity:"restaurant",brand:"Harvester","brand:wikidata":"Q5676915","brand:wikipedia":"en:Harvester (restaurant)",cuisine:"american",name:"Harvester"},reference:{key:"cuisine",value:"american"},matchScore:2,suggestion:true},"amenity/restaurant/Hippopotamus":{name:"Hippopotamus",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant","brand:wikidata":"Q3136174"},addTags:{amenity:"restaurant",brand:"Hippopotamus","brand:wikidata":"Q3136174","brand:wikipedia":"fr:Hippopotamus (restaurant)",name:"Hippopotamus"},removeTags:{amenity:"restaurant",brand:"Hippopotamus","brand:wikidata":"Q3136174","brand:wikipedia":"fr:Hippopotamus (restaurant)",name:"Hippopotamus"},matchScore:2,suggestion:true},"amenity/restaurant/Hooters":{name:"Hooters",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant","brand:wikidata":"Q1025921"},addTags:{amenity:"restaurant",brand:"Hooters","brand:wikidata":"Q1025921","brand:wikipedia":"en:Hooters",cuisine:"burger",name:"Hooters"},removeTags:{amenity:"restaurant",brand:"Hooters","brand:wikidata":"Q1025921","brand:wikipedia":"en:Hooters",cuisine:"burger",name:"Hooters"},matchScore:2,suggestion:true},"amenity/restaurant/american/Huddle House":{name:"Huddle House",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant",cuisine:"american","brand:wikidata":"Q5928324"},addTags:{amenity:"restaurant",brand:"Huddle House","brand:wikidata":"Q5928324","brand:wikipedia":"en:Huddle House",cuisine:"american",name:"Huddle House"},removeTags:{amenity:"restaurant",brand:"Huddle House","brand:wikidata":"Q5928324","brand:wikipedia":"en:Huddle House",cuisine:"american",name:"Huddle House"},reference:{key:"cuisine",value:"american"},matchScore:2,suggestion:true},"amenity/restaurant/IHOP":{name:"IHOP",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant","brand:wikidata":"Q1185675"},addTags:{amenity:"restaurant",brand:"IHOP","brand:wikidata":"Q1185675","brand:wikipedia":"en:IHOP",cuisine:"pancake",name:"IHOP"},removeTags:{amenity:"restaurant",brand:"IHOP","brand:wikidata":"Q1185675","brand:wikipedia":"en:IHOP",cuisine:"pancake",name:"IHOP"},matchScore:2,suggestion:true},"amenity/restaurant/american/IL Патио":{name:"IL Патио",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant",cuisine:"american","brand:wikidata":"Q4397763"},addTags:{amenity:"restaurant",brand:"IL Патио","brand:wikidata":"Q4397763","brand:wikipedia":"en:Росинтер",cuisine:"american",name:"IL Патио"},removeTags:{amenity:"restaurant",brand:"IL Патио","brand:wikidata":"Q4397763","brand:wikipedia":"en:Росинтер",cuisine:"american",name:"IL Патио"},reference:{key:"cuisine",value:"american"},matchScore:2,suggestion:true},"amenity/restaurant/Jason's Deli":{name:"Jason's Deli",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant","brand:wikidata":"Q16997641"},addTags:{amenity:"restaurant",brand:"Jason's Deli","brand:wikidata":"Q16997641","brand:wikipedia":"en:Jason's Deli",name:"Jason's Deli"},removeTags:{amenity:"restaurant",brand:"Jason's Deli","brand:wikidata":"Q16997641","brand:wikipedia":"en:Jason's Deli",name:"Jason's Deli"},matchScore:2,suggestion:true},"amenity/restaurant/pizza/Jet's Pizza":{name:"Jet's Pizza",icon:"maki-restaurant-pizza",geometry:["point","area"],tags:{amenity:"restaurant",cuisine:"pizza","brand:wikidata":"Q16997713"},addTags:{amenity:"restaurant",brand:"Jet's Pizza","brand:wikidata":"Q16997713","brand:wikipedia":"en:Jet's Pizza",cuisine:"pizza",name:"Jet's Pizza"},removeTags:{amenity:"restaurant",brand:"Jet's Pizza","brand:wikidata":"Q16997713","brand:wikipedia":"en:Jet's Pizza",cuisine:"pizza",name:"Jet's Pizza"},reference:{key:"cuisine",value:"pizza"},matchScore:2,suggestion:true},"amenity/restaurant/seafood/Joe's Crab Shack":{name:"Joe's Crab Shack",icon:"maki-restaurant-seafood",geometry:["point","area"],tags:{amenity:"restaurant",cuisine:"seafood","brand:wikidata":"Q6208210"},addTags:{amenity:"restaurant",brand:"Joe's Crab Shack","brand:wikidata":"Q6208210","brand:wikipedia":"en:Joe's Crab Shack",cuisine:"seafood",name:"Joe's Crab Shack"},removeTags:{amenity:"restaurant",brand:"Joe's Crab Shack","brand:wikidata":"Q6208210","brand:wikipedia":"en:Joe's Crab Shack",cuisine:"seafood",name:"Joe's Crab Shack"},reference:{key:"cuisine",value:"seafood"},matchScore:2,suggestion:true},"amenity/restaurant/Kelsey's":{name:"Kelsey's",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant","brand:wikidata":"Q6386459"},addTags:{amenity:"restaurant",brand:"Kelsey's","brand:wikidata":"Q6386459","brand:wikipedia":"en:Kelseys Original Roadhouse",name:"Kelsey's"},removeTags:{amenity:"restaurant",brand:"Kelsey's","brand:wikidata":"Q6386459","brand:wikipedia":"en:Kelseys Original Roadhouse",name:"Kelsey's"},matchScore:2,suggestion:true},"amenity/restaurant/Kudu":{name:"Kudu",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant","brand:wikidata":"Q6441777"},addTags:{amenity:"restaurant",brand:"Kudu","brand:wikidata":"Q6441777","brand:wikipedia":"en:Kudu (restaurant)",cuisine:"sandwich",name:"Kudu"},removeTags:{amenity:"restaurant",brand:"Kudu","brand:wikidata":"Q6441777","brand:wikipedia":"en:Kudu (restaurant)",cuisine:"sandwich",name:"Kudu"},matchScore:2,suggestion:true},"amenity/restaurant/Logan's Roadhouse":{name:"Logan's Roadhouse",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant","brand:wikidata":"Q6666872"},addTags:{amenity:"restaurant",brand:"Logan's Roadhouse","brand:wikidata":"Q6666872","brand:wikipedia":"en:Logan's Roadhouse",cuisine:"america",name:"Logan's Roadhouse"},removeTags:{amenity:"restaurant",brand:"Logan's Roadhouse","brand:wikidata":"Q6666872","brand:wikipedia":"en:Logan's Roadhouse",cuisine:"america",name:"Logan's Roadhouse"},matchScore:2,suggestion:true},"amenity/restaurant/LongHorn Steakhouse":{name:"LongHorn Steakhouse",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant","brand:wikidata":"Q3259007"},addTags:{amenity:"restaurant",brand:"LongHorn Steakhouse","brand:wikidata":"Q3259007","brand:wikipedia":"en:LongHorn Steakhouse",name:"LongHorn Steakhouse"},removeTags:{amenity:"restaurant",brand:"LongHorn Steakhouse","brand:wikidata":"Q3259007","brand:wikipedia":"en:LongHorn Steakhouse",name:"LongHorn Steakhouse"},matchScore:2,suggestion:true},"amenity/restaurant/Loving Hut":{name:"Loving Hut",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant","brand:wikidata":"Q3491655"},addTags:{amenity:"restaurant",brand:"Loving Hut","brand:wikidata":"Q3491655","brand:wikipedia":"en:Loving Hut",name:"Loving Hut"},removeTags:{amenity:"restaurant",brand:"Loving Hut","brand:wikidata":"Q3491655","brand:wikipedia":"en:Loving Hut",name:"Loving Hut"},matchScore:2,suggestion:true},"amenity/restaurant/Léon de Bruxelles":{name:"Léon de Bruxelles",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant","brand:wikidata":"Q21041507"},addTags:{amenity:"restaurant",brand:"Léon de Bruxelles","brand:wikidata":"Q21041507","brand:wikipedia":"en:Léon de Bruxelles",cuisine:"friture",name:"Léon de Bruxelles"},removeTags:{amenity:"restaurant",brand:"Léon de Bruxelles","brand:wikidata":"Q21041507","brand:wikipedia":"en:Léon de Bruxelles",cuisine:"friture",name:"Léon de Bruxelles"},matchScore:2,suggestion:true},"amenity/restaurant/pizza/MOD Pizza":{name:"MOD Pizza",icon:"maki-restaurant-pizza",geometry:["point","area"],tags:{amenity:"restaurant",cuisine:"pizza","brand:wikidata":"Q19903469"},addTags:{amenity:"restaurant",brand:"MOD Pizza","brand:wikidata":"Q19903469","brand:wikipedia":"en:MOD Pizza",cuisine:"pizza",name:"MOD Pizza"},removeTags:{amenity:"restaurant",brand:"MOD Pizza","brand:wikidata":"Q19903469","brand:wikipedia":"en:MOD Pizza",cuisine:"pizza",name:"MOD Pizza"},reference:{key:"cuisine",value:"pizza"},matchScore:2,suggestion:true},"amenity/restaurant/pizza/Marco's Pizza":{name:"Marco's Pizza",icon:"maki-restaurant-pizza",geometry:["point","area"],tags:{amenity:"restaurant",cuisine:"pizza","brand:wikidata":"Q6757382"},addTags:{amenity:"restaurant",brand:"Marco's Pizza","brand:wikidata":"Q6757382","brand:wikipedia":"en:Marco's Pizza",cuisine:"pizza",name:"Marco's Pizza"},removeTags:{amenity:"restaurant",brand:"Marco's Pizza","brand:wikidata":"Q6757382","brand:wikipedia":"en:Marco's Pizza",cuisine:"pizza",name:"Marco's Pizza"},reference:{key:"cuisine",value:"pizza"},matchScore:2,suggestion:true},"amenity/restaurant/asian/Max's Restaurant":{name:"Max's Restaurant",icon:"maki-restaurant-noodle",geometry:["point","area"],tags:{amenity:"restaurant",cuisine:"asian","brand:wikidata":"Q6794477"},addTags:{amenity:"restaurant",brand:"Max's Restaurant","brand:wikidata":"Q6794477","brand:wikipedia":"en:Max's of Manila",cuisine:"asian",name:"Max's Restaurant"},removeTags:{amenity:"restaurant",brand:"Max's Restaurant","brand:wikidata":"Q6794477","brand:wikipedia":"en:Max's of Manila",cuisine:"asian",name:"Max's Restaurant"},reference:{key:"cuisine",value:"asian"},matchScore:2,suggestion:true},"amenity/restaurant/McAlister's Deli":{name:"McAlister's Deli",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant","brand:wikidata":"Q17020829"},addTags:{amenity:"restaurant",brand:"McAlister's Deli","brand:wikidata":"Q17020829","brand:wikipedia":"en:McAlister's Deli",name:"McAlister's Deli"},removeTags:{amenity:"restaurant",brand:"McAlister's Deli","brand:wikidata":"Q17020829","brand:wikipedia":"en:McAlister's Deli",name:"McAlister's Deli"},matchScore:2,suggestion:true},"amenity/restaurant/pizza/Mellow Mushroom":{name:"Mellow Mushroom",icon:"maki-restaurant-pizza",geometry:["point","area"],tags:{amenity:"restaurant",cuisine:"pizza","brand:wikidata":"Q17021360"},addTags:{amenity:"restaurant",brand:"Mellow Mushroom","brand:wikidata":"Q17021360","brand:wikipedia":"en:Mellow Mushroom",cuisine:"pizza",name:"Mellow Mushroom"},removeTags:{amenity:"restaurant",brand:"Mellow Mushroom","brand:wikidata":"Q17021360","brand:wikipedia":"en:Mellow Mushroom",cuisine:"pizza",name:"Mellow Mushroom"},reference:{key:"cuisine",value:"pizza"},matchScore:2,suggestion:true},"amenity/restaurant/french/Mimi's Cafe":{name:"Mimi's Cafe",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant",cuisine:"french","brand:wikidata":"Q17022081"},addTags:{amenity:"restaurant",brand:"Mimi's Cafe",cuisine:"french","brand:wikidata":"Q17022081","brand:wikipedia":"en:Mimi's Cafe",name:"Mimi's Cafe"},removeTags:{amenity:"restaurant",brand:"Mimi's Cafe",cuisine:"french","brand:wikidata":"Q17022081","brand:wikipedia":"en:Mimi's Cafe",name:"Mimi's Cafe"},reference:{key:"cuisine",value:"french"},matchScore:2,suggestion:true},"amenity/restaurant/Nando's":{name:"Nando's",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant","brand:wikidata":"Q3472954"},addTags:{amenity:"restaurant",brand:"Nando's","brand:wikidata":"Q3472954","brand:wikipedia":"en:Nando's",cuisine:"portuguese",name:"Nando's"},removeTags:{amenity:"restaurant",brand:"Nando's","brand:wikidata":"Q3472954","brand:wikipedia":"en:Nando's",cuisine:"portuguese",name:"Nando's"},matchScore:2,suggestion:true},"amenity/restaurant/Noodles & Company":{name:"Noodles & Company",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant","brand:wikidata":"Q7049673"},addTags:{amenity:"restaurant",brand:"Noodles & Company","brand:wikidata":"Q7049673","brand:wikipedia":"en:Noodles & Company",cuisine:"pasta",name:"Noodles & Company"},removeTags:{amenity:"restaurant",brand:"Noodles & Company","brand:wikidata":"Q7049673","brand:wikipedia":"en:Noodles & Company",cuisine:"pasta",name:"Noodles & Company"},matchScore:2,suggestion:true},"amenity/restaurant/O'Charley's":{name:"O'Charley's",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant","brand:wikidata":"Q7071703"},addTags:{amenity:"restaurant",brand:"O'Charley's","brand:wikidata":"Q7071703","brand:wikipedia":"en:O'Charley's",name:"O'Charley's"},removeTags:{amenity:"restaurant",brand:"O'Charley's","brand:wikidata":"Q7071703","brand:wikipedia":"en:O'Charley's",name:"O'Charley's"},matchScore:2,suggestion:true},"amenity/restaurant/pizza/Old Chicago":{name:"Old Chicago",icon:"maki-restaurant-pizza",geometry:["point","area"],tags:{amenity:"restaurant",cuisine:"pizza","brand:wikidata":"Q5180522"},addTags:{amenity:"restaurant",brand:"Old Chicago","brand:wikidata":"Q5180522","brand:wikipedia":"en:CraftWorks Restaurants & Breweries",cuisine:"pizza",name:"Old Chicago"},removeTags:{amenity:"restaurant",brand:"Old Chicago","brand:wikidata":"Q5180522","brand:wikipedia":"en:CraftWorks Restaurants & Breweries",cuisine:"pizza",name:"Old Chicago"},reference:{key:"cuisine",value:"pizza"},matchScore:2,suggestion:true},"amenity/restaurant/american/Old Wild West":{name:"Old Wild West",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant",cuisine:"american","brand:wikidata":"Q25402475"},addTags:{amenity:"restaurant",brand:"Old Wild West","brand:wikidata":"Q25402475","brand:wikipedia":"it:Old Wild West",cuisine:"american",name:"Old Wild West"},removeTags:{amenity:"restaurant",brand:"Old Wild West","brand:wikidata":"Q25402475","brand:wikipedia":"it:Old Wild West",cuisine:"american",name:"Old Wild West"},reference:{key:"cuisine",value:"american"},matchScore:2,suggestion:true},"amenity/restaurant/italian/Olive Garden":{name:"Olive Garden",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant",cuisine:"italian","brand:wikidata":"Q3045312"},addTags:{amenity:"restaurant",brand:"Olive Garden","brand:wikidata":"Q3045312","brand:wikipedia":"en:Olive Garden",cuisine:"italian",name:"Olive Garden"},removeTags:{amenity:"restaurant",brand:"Olive Garden","brand:wikidata":"Q3045312","brand:wikipedia":"en:Olive Garden",cuisine:"italian",name:"Olive Garden"},reference:{key:"cuisine",value:"italian"},matchScore:2,suggestion:true},"amenity/restaurant/american/Outback Steakhouse":{name:"Outback Steakhouse",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant",cuisine:"american","brand:wikidata":"Q1064893"},addTags:{amenity:"restaurant",brand:"Outback Steakhouse","brand:wikidata":"Q1064893","brand:wikipedia":"en:Outback Steakhouse",cuisine:"american",name:"Outback Steakhouse"},removeTags:{amenity:"restaurant",brand:"Outback Steakhouse","brand:wikidata":"Q1064893","brand:wikipedia":"en:Outback Steakhouse",cuisine:"american",name:"Outback Steakhouse"},reference:{key:"cuisine",value:"american"},matchScore:2,suggestion:true},"amenity/restaurant/asian/P.F. Chang's":{name:"P.F. Chang's",icon:"maki-restaurant-noodle",geometry:["point","area"],tags:{amenity:"restaurant",cuisine:"asian","brand:wikidata":"Q5360181"},addTags:{amenity:"restaurant",brand:"P.F. Chang's","brand:wikidata":"Q5360181","brand:wikipedia":"en:P. F. Chang's China Bistro",cuisine:"asian",name:"P.F. Chang's"},removeTags:{amenity:"restaurant",brand:"P.F. Chang's","brand:wikidata":"Q5360181","brand:wikipedia":"en:P. F. Chang's China Bistro",cuisine:"asian",name:"P.F. Chang's"},reference:{key:"cuisine",value:"asian"},matchScore:2,suggestion:true},"amenity/restaurant/asian/Pei Wei":{name:"Pei Wei",icon:"maki-restaurant-noodle",geometry:["point","area"],tags:{amenity:"restaurant",cuisine:"asian","brand:wikidata":"Q7160898"},addTags:{amenity:"restaurant",brand:"Pei Wei","brand:wikidata":"Q7160898","brand:wikipedia":"en:Pei Wei Asian Diner",cuisine:"asian",name:"Pei Wei"},removeTags:{amenity:"restaurant",brand:"Pei Wei","brand:wikidata":"Q7160898","brand:wikipedia":"en:Pei Wei Asian Diner",cuisine:"asian",name:"Pei Wei"},reference:{key:"cuisine",value:"asian"},matchScore:2,suggestion:true},"amenity/restaurant/american/Perkins":{name:"Perkins",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant",cuisine:"american","brand:wikidata":"Q7169056"},addTags:{amenity:"restaurant",brand:"Perkins","brand:wikidata":"Q7169056","brand:wikipedia":"en:Perkins Restaurant and Bakery",cuisine:"american",name:"Perkins"},removeTags:{amenity:"restaurant",brand:"Perkins","brand:wikidata":"Q7169056","brand:wikipedia":"en:Perkins Restaurant and Bakery",cuisine:"american",name:"Perkins"},reference:{key:"cuisine",value:"american"},matchScore:2,suggestion:true},"amenity/restaurant/pizza/Pizza Factory":{name:"Pizza Factory",icon:"maki-restaurant-pizza",geometry:["point","area"],tags:{amenity:"restaurant",cuisine:"pizza","brand:wikidata":"Q39054369"},addTags:{amenity:"restaurant",brand:"Pizza Factory","brand:wikidata":"Q39054369","brand:wikipedia":"en:Pizza Factory",cuisine:"pizza",name:"Pizza Factory"},removeTags:{amenity:"restaurant",brand:"Pizza Factory","brand:wikidata":"Q39054369","brand:wikipedia":"en:Pizza Factory",cuisine:"pizza",name:"Pizza Factory"},reference:{key:"cuisine",value:"pizza"},matchScore:2,suggestion:true},"amenity/restaurant/pizza/Pizza Hut":{name:"Pizza Hut",icon:"maki-restaurant-pizza",geometry:["point","area"],tags:{amenity:"restaurant",cuisine:"pizza","brand:wikidata":"Q191615"},addTags:{amenity:"restaurant",brand:"Pizza Hut","brand:wikidata":"Q191615","brand:wikipedia":"en:Pizza Hut",cuisine:"pizza",name:"Pizza Hut"},removeTags:{amenity:"restaurant",brand:"Pizza Hut","brand:wikidata":"Q191615","brand:wikipedia":"en:Pizza Hut",cuisine:"pizza",name:"Pizza Hut"},reference:{key:"cuisine",value:"pizza"},matchScore:2,suggestion:true},"amenity/restaurant/pizza/Pizza Ranch":{name:"Pizza Ranch",icon:"maki-restaurant-pizza",geometry:["point","area"],tags:{amenity:"restaurant",cuisine:"pizza","brand:wikidata":"Q7199978"},addTags:{amenity:"restaurant",brand:"Pizza Ranch","brand:wikidata":"Q7199978","brand:wikipedia":"en:Pizza Ranch",cuisine:"pizza",name:"Pizza Ranch"},removeTags:{amenity:"restaurant",brand:"Pizza Ranch","brand:wikidata":"Q7199978","brand:wikipedia":"en:Pizza Ranch",cuisine:"pizza",name:"Pizza Ranch"},reference:{key:"cuisine",value:"pizza"},matchScore:2,suggestion:true},"amenity/restaurant/pizza/PizzaExpress":{name:"PizzaExpress",icon:"maki-restaurant-pizza",geometry:["point","area"],tags:{amenity:"restaurant",cuisine:"pizza","brand:wikidata":"Q662845"},addTags:{amenity:"restaurant",brand:"PizzaExpress","brand:wikipedia":"en:PizzaExpress","brand:wikidata":"Q662845",cuisine:"pizza",name:"PizzaExpress"},removeTags:{amenity:"restaurant",brand:"PizzaExpress","brand:wikipedia":"en:PizzaExpress","brand:wikidata":"Q662845",cuisine:"pizza",name:"PizzaExpress"},reference:{key:"cuisine",value:"pizza"},matchScore:2,suggestion:true},"amenity/restaurant/french/Poivre Rouge":{name:"Poivre Rouge",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant",cuisine:"french","brand:wikidata":"Q7316076"},addTags:{amenity:"restaurant",brand:"Poivre Rouge","brand:wikidata":"Q7316076","brand:wikipedia":"fr:Poivre Rouge (restauration)",cuisine:"french",name:"Poivre Rouge"},removeTags:{amenity:"restaurant",brand:"Poivre Rouge","brand:wikidata":"Q7316076","brand:wikipedia":"fr:Poivre Rouge (restauration)",cuisine:"french",name:"Poivre Rouge"},reference:{key:"cuisine",value:"french"},matchScore:2,suggestion:true},"amenity/restaurant/italian/Prezzo":{name:"Prezzo",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant",cuisine:"italian","brand:wikidata":"Q7242489"},addTags:{amenity:"restaurant",brand:"Prezzo","brand:wikidata":"Q7242489","brand:wikipedia":"en:Prezzo (restaurant)",cuisine:"italian",name:"Prezzo"},removeTags:{amenity:"restaurant",brand:"Prezzo","brand:wikidata":"Q7242489","brand:wikipedia":"en:Prezzo (restaurant)",cuisine:"italian",name:"Prezzo"},reference:{key:"cuisine",value:"italian"},matchScore:2,suggestion:true},"amenity/restaurant/seafood/Red Lobster":{name:"Red Lobster",icon:"maki-restaurant-seafood",geometry:["point","area"],tags:{amenity:"restaurant",cuisine:"seafood","brand:wikidata":"Q846301"},addTags:{amenity:"restaurant",brand:"Red Lobster","brand:wikidata":"Q846301","brand:wikipedia":"en:Red Lobster",cuisine:"seafood",name:"Red Lobster"},removeTags:{amenity:"restaurant",brand:"Red Lobster","brand:wikidata":"Q846301","brand:wikipedia":"en:Red Lobster",cuisine:"seafood",name:"Red Lobster"},reference:{key:"cuisine",value:"seafood"},matchScore:2,suggestion:true},"amenity/restaurant/Red Robin":{name:"Red Robin",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant","brand:wikidata":"Q7304886"},addTags:{amenity:"restaurant",brand:"Red Robin","brand:wikidata":"Q7304886","brand:wikipedia":"en:Red Robin",cuisine:"burger",name:"Red Robin"},removeTags:{amenity:"restaurant",brand:"Red Robin","brand:wikidata":"Q7304886","brand:wikipedia":"en:Red Robin",cuisine:"burger",name:"Red Robin"},matchScore:2,suggestion:true},"amenity/restaurant/pizza/Round Table Pizza":{name:"Round Table Pizza",icon:"maki-restaurant-pizza",geometry:["point","area"],tags:{amenity:"restaurant",cuisine:"pizza","brand:wikidata":"Q7371139"},addTags:{amenity:"restaurant",brand:"Round Table Pizza","brand:wikidata":"Q7371139","brand:wikipedia":"en:Round Table Pizza",cuisine:"pizza",name:"Round Table Pizza"},removeTags:{amenity:"restaurant",brand:"Round Table Pizza","brand:wikidata":"Q7371139","brand:wikipedia":"en:Round Table Pizza",cuisine:"pizza",name:"Round Table Pizza"},reference:{key:"cuisine",value:"pizza"},matchScore:2,suggestion:true},"amenity/restaurant/Ruby Tuesday":{name:"Ruby Tuesday",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant","brand:wikidata":"Q7376400"},addTags:{amenity:"restaurant",brand:"Ruby Tuesday","brand:wikidata":"Q7376400","brand:wikipedia":"en:Ruby Tuesday (restaurant)",cuisine:"america",name:"Ruby Tuesday"},removeTags:{amenity:"restaurant",brand:"Ruby Tuesday","brand:wikidata":"Q7376400","brand:wikipedia":"en:Ruby Tuesday (restaurant)",cuisine:"america",name:"Ruby Tuesday"},matchScore:2,suggestion:true},"amenity/restaurant/pizza/Shakey's":{name:"Shakey's",icon:"maki-restaurant-pizza",geometry:["point","area"],tags:{amenity:"restaurant",cuisine:"pizza","brand:wikidata":"Q6134929"},addTags:{amenity:"restaurant",brand:"Shakey's","brand:wikidata":"Q6134929","brand:wikipedia":"en:Shakey's Pizza",cuisine:"pizza",name:"Shakey's"},removeTags:{amenity:"restaurant",brand:"Shakey's","brand:wikidata":"Q6134929","brand:wikipedia":"en:Shakey's Pizza",cuisine:"pizza",name:"Shakey's"},reference:{key:"cuisine",value:"pizza"},matchScore:2,suggestion:true},"amenity/restaurant/american/Shari's":{name:"Shari's",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant",cuisine:"american","brand:wikidata":"Q7489612"},addTags:{amenity:"restaurant",brand:"Shari's","brand:wikidata":"Q7489612","brand:wikipedia":"en:Shari's Cafe & Pies",cuisine:"american",name:"Shari's"},removeTags:{amenity:"restaurant",brand:"Shari's","brand:wikidata":"Q7489612","brand:wikipedia":"en:Shari's Cafe & Pies",cuisine:"american",name:"Shari's"},reference:{key:"cuisine",value:"american"},matchScore:2,suggestion:true},"amenity/restaurant/american/Shoney's":{name:"Shoney's",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant",cuisine:"american","brand:wikidata":"Q7500392"},addTags:{amenity:"restaurant",brand:"Shoney's","brand:wikidata":"Q7500392","brand:wikipedia":"en:Shoney's",cuisine:"american",name:"Shoney's"},removeTags:{amenity:"restaurant",brand:"Shoney's","brand:wikidata":"Q7500392","brand:wikipedia":"en:Shoney's",cuisine:"american",name:"Shoney's"},reference:{key:"cuisine",value:"american"},matchScore:2,suggestion:true},"amenity/restaurant/Sizzler":{name:"Sizzler",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant","brand:wikidata":"Q1848822"},addTags:{amenity:"restaurant",brand:"Sizzler","brand:wikidata":"Q1848822","brand:wikipedia":"en:Sizzler",name:"Sizzler"},removeTags:{amenity:"restaurant",brand:"Sizzler","brand:wikidata":"Q1848822","brand:wikipedia":"en:Sizzler",name:"Sizzler"},matchScore:2,suggestion:true},"amenity/restaurant/american/Skyline Chili":{name:"Skyline Chili",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant",cuisine:"american","brand:wikidata":"Q151224"},addTags:{amenity:"restaurant",brand:"Skyline Chili","brand:wikidata":"Q151224","brand:wikipedia":"en:Skyline Chili",cuisine:"american",name:"Skyline Chili"},removeTags:{amenity:"restaurant",brand:"Skyline Chili","brand:wikidata":"Q151224","brand:wikipedia":"en:Skyline Chili",cuisine:"american",name:"Skyline Chili"},reference:{key:"cuisine",value:"american"},matchScore:2,suggestion:true},"amenity/restaurant/Smitty's":{name:"Smitty's",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant","brand:wikidata":"Q7545728"},addTags:{amenity:"restaurant",brand:"Smitty's","brand:wikidata":"Q7545728","brand:wikipedia":"en:Smitty's",cuisine:"pancake",name:"Smitty's"},removeTags:{amenity:"restaurant",brand:"Smitty's","brand:wikidata":"Q7545728","brand:wikipedia":"en:Smitty's",cuisine:"pancake",name:"Smitty's"},matchScore:2,suggestion:true},"amenity/restaurant/Spur":{name:"Spur",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant","brand:wikidata":"Q7581546"},addTags:{amenity:"restaurant",brand:"Spur","brand:wikidata":"Q7581546","brand:wikipedia":"en:Spur Steak Ranches",cuisine:"steak_house",name:"Spur"},removeTags:{amenity:"restaurant",brand:"Spur","brand:wikidata":"Q7581546","brand:wikipedia":"en:Spur Steak Ranches",cuisine:"steak_house",name:"Spur"},matchScore:2,suggestion:true},"amenity/restaurant/Steak 'n Shake":{name:"Steak 'n Shake",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant","brand:wikidata":"Q7605233"},addTags:{amenity:"restaurant",brand:"Steak 'n Shake","brand:wikidata":"Q7605233","brand:wikipedia":"en:Steak 'n Shake",cuisine:"burger",name:"Steak 'n Shake"},removeTags:{amenity:"restaurant",brand:"Steak 'n Shake","brand:wikidata":"Q7605233","brand:wikipedia":"en:Steak 'n Shake",cuisine:"burger",name:"Steak 'n Shake"},matchScore:2,suggestion:true},"amenity/restaurant/Sunset Grill":{name:"Sunset Grill",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant","brand:wikidata":"Q7641264"},addTags:{amenity:"restaurant",brand:"Sunset Grill","brand:wikidata":"Q7641264","brand:wikipedia":"en:Sunset Grill (restaurant)",name:"Sunset Grill"},removeTags:{amenity:"restaurant",brand:"Sunset Grill","brand:wikidata":"Q7641264","brand:wikipedia":"en:Sunset Grill (restaurant)",name:"Sunset Grill"},matchScore:2,suggestion:true},"amenity/restaurant/Swiss Chalet":{name:"Swiss Chalet",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant","brand:wikidata":"Q2372909"},addTags:{amenity:"restaurant",brand:"Swiss Chalet","brand:wikidata":"Q2372909","brand:wikipedia":"en:Swiss Chalet",name:"Swiss Chalet"},removeTags:{amenity:"restaurant",brand:"Swiss Chalet","brand:wikidata":"Q2372909","brand:wikipedia":"en:Swiss Chalet",name:"Swiss Chalet"},matchScore:2,suggestion:true},"amenity/restaurant/american/TGI Friday's":{name:"TGI Friday's",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant",cuisine:"american","brand:wikidata":"Q1524184"},addTags:{amenity:"restaurant",brand:"TGI Friday's","brand:wikidata":"Q1524184","brand:wikipedia":"en:TGI Fridays",cuisine:"american",name:"TGI Friday's"},removeTags:{amenity:"restaurant",brand:"TGI Friday's","brand:wikidata":"Q1524184","brand:wikipedia":"en:TGI Fridays",cuisine:"american",name:"TGI Friday's"},reference:{key:"cuisine",value:"american"},matchScore:2,suggestion:true},"amenity/restaurant/Texas Roadhouse":{name:"Texas Roadhouse",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant","brand:wikidata":"Q7707945"},addTags:{amenity:"restaurant",brand:"Texas Roadhouse","brand:wikidata":"Q7707945","brand:wikipedia":"en:Texas Roadhouse",cuisine:"steak_house",name:"Texas Roadhouse"},removeTags:{amenity:"restaurant",brand:"Texas Roadhouse","brand:wikidata":"Q7707945","brand:wikipedia":"en:Texas Roadhouse",cuisine:"steak_house",name:"Texas Roadhouse"},matchScore:2,suggestion:true},"amenity/restaurant/The Cheesecake Factory":{name:"The Cheesecake Factory",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant","brand:wikidata":"Q1045842"},addTags:{amenity:"restaurant",brand:"The Cheesecake Factory","brand:wikidata":"Q1045842","brand:wikipedia":"en:The Cheesecake Factory",name:"The Cheesecake Factory"},removeTags:{amenity:"restaurant",brand:"The Cheesecake Factory","brand:wikidata":"Q1045842","brand:wikipedia":"en:The Cheesecake Factory",name:"The Cheesecake Factory"},matchScore:2,suggestion:true},"amenity/restaurant/The Keg":{name:"The Keg",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant","brand:wikidata":"Q7744066"},addTags:{amenity:"restaurant",brand:"The Keg","brand:wikidata":"Q7744066","brand:wikipedia":"en:The Keg",cuisine:"steak_house",name:"The Keg"},removeTags:{amenity:"restaurant",brand:"The Keg","brand:wikidata":"Q7744066","brand:wikipedia":"en:The Keg",cuisine:"steak_house",name:"The Keg"},matchScore:2,suggestion:true},"amenity/restaurant/Toby Carvery":{name:"Toby Carvery",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant","brand:wikidata":"Q7811777"},addTags:{amenity:"restaurant",brand:"Toby Carvery","brand:wikidata":"Q7811777","brand:wikipedia":"en:Toby Carvery",name:"Toby Carvery"},removeTags:{amenity:"restaurant",brand:"Toby Carvery","brand:wikidata":"Q7811777","brand:wikipedia":"en:Toby Carvery",name:"Toby Carvery"},matchScore:2,suggestion:true},"amenity/restaurant/mexican/Toks":{name:"Toks",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant",cuisine:"mexican","brand:wikidata":"Q48835586"},addTags:{amenity:"restaurant",brand:"Toks","brand:wikidata":"Q48835586","brand:wikipedia":"en:Toks",cuisine:"mexican",name:"Toks"},removeTags:{amenity:"restaurant",brand:"Toks","brand:wikidata":"Q48835586","brand:wikipedia":"en:Toks",cuisine:"mexican",name:"Toks"},reference:{key:"cuisine",value:"mexican"},matchScore:2,suggestion:true},"amenity/restaurant/Tony Roma's":{name:"Tony Roma's",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant","brand:wikidata":"Q2213883"},addTags:{amenity:"restaurant",brand:"Tony Roma's","brand:wikidata":"Q2213883","brand:wikipedia":"en:Tony Roma's",cuisine:"barbecue",name:"Tony Roma's"},removeTags:{amenity:"restaurant",brand:"Tony Roma's","brand:wikidata":"Q2213883","brand:wikipedia":"en:Tony Roma's",cuisine:"barbecue",name:"Tony Roma's"},matchScore:2,suggestion:true},"amenity/restaurant/italian/Vapiano":{name:"Vapiano",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant",cuisine:"italian","brand:wikidata":"Q506252"},addTags:{amenity:"restaurant",brand:"Vapiano","brand:wikidata":"Q506252","brand:wikipedia":"en:Vapiano",cuisine:"italian",name:"Vapiano"},removeTags:{amenity:"restaurant",brand:"Vapiano","brand:wikidata":"Q506252","brand:wikipedia":"en:Vapiano",cuisine:"italian",name:"Vapiano"},reference:{key:"cuisine",value:"italian"},matchScore:2,suggestion:true},"amenity/restaurant/american/Village Inn":{name:"Village Inn",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant",cuisine:"american","brand:wikidata":"Q7930659"},addTags:{amenity:"restaurant",brand:"Village Inn","brand:wikidata":"Q7930659","brand:wikipedia":"en:Village Inn",cuisine:"american",name:"Village Inn"},removeTags:{amenity:"restaurant",brand:"Village Inn","brand:wikidata":"Q7930659","brand:wikipedia":"en:Village Inn",cuisine:"american",name:"Village Inn"},reference:{key:"cuisine",value:"american"},matchScore:2,suggestion:true},"amenity/restaurant/Vips":{name:"Vips",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant","brand:wikidata":"Q12599540"},addTags:{amenity:"restaurant",brand:"Vips","brand:wikidata":"Q12599540","brand:wikipedia":"en:VIPS (restaurant)",name:"Vips"},removeTags:{amenity:"restaurant",brand:"Vips","brand:wikidata":"Q12599540","brand:wikipedia":"en:VIPS (restaurant)",name:"Vips"},matchScore:2,suggestion:true},"amenity/restaurant/american/Waffle House":{name:"Waffle House",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant",cuisine:"american","brand:wikidata":"Q1701206"},addTags:{amenity:"restaurant",brand:"Waffle House","brand:wikidata":"Q1701206","brand:wikipedia":"en:Waffle House",cuisine:"american",name:"Waffle House"},removeTags:{amenity:"restaurant",brand:"Waffle House","brand:wikidata":"Q1701206","brand:wikipedia":"en:Waffle House",cuisine:"american",name:"Waffle House"},reference:{key:"cuisine",value:"american"},matchScore:2,suggestion:true},"amenity/restaurant/asian/Wagamama":{name:"Wagamama",icon:"maki-restaurant-noodle",geometry:["point","area"],tags:{amenity:"restaurant",cuisine:"asian","brand:wikidata":"Q503715"},addTags:{amenity:"restaurant",brand:"Wagamama","brand:wikidata":"Q503715","brand:wikipedia":"en:Wagamama",cuisine:"asian",name:"Wagamama"},removeTags:{amenity:"restaurant",brand:"Wagamama","brand:wikidata":"Q503715","brand:wikipedia":"en:Wagamama",cuisine:"asian",name:"Wagamama"},reference:{key:"cuisine",value:"asian"},matchScore:2,suggestion:true},"amenity/restaurant/japanese/Wasabi":{name:"Wasabi",icon:"maki-restaurant-noodle",geometry:["point","area"],tags:{amenity:"restaurant",cuisine:"japanese","brand:wikidata":"Q23891278"},addTags:{amenity:"restaurant",brand:"Wasabi","brand:wikidata":"Q23891278","brand:wikipedia":"en:Wasabi (restaurant)",cuisine:"japanese",name:"Wasabi"},removeTags:{amenity:"restaurant",brand:"Wasabi","brand:wikidata":"Q23891278","brand:wikipedia":"en:Wasabi (restaurant)",cuisine:"japanese",name:"Wasabi"},reference:{key:"cuisine",value:"japanese"},matchScore:2,suggestion:true},"amenity/restaurant/White Spot":{name:"White Spot",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant","brand:wikidata":"Q7995414"},addTags:{amenity:"restaurant",brand:"White Spot","brand:wikidata":"Q7995414","brand:wikipedia":"en:White Spot",cuisine:"burger",name:"White Spot"},removeTags:{amenity:"restaurant",brand:"White Spot","brand:wikidata":"Q7995414","brand:wikipedia":"en:White Spot",cuisine:"burger",name:"White Spot"},matchScore:2,suggestion:true},"amenity/restaurant/Wingstop":{name:"Wingstop",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant","brand:wikidata":"Q8025339"},addTags:{amenity:"restaurant",brand:"Wingstop","brand:wikidata":"Q8025339","brand:wikipedia":"en:Wingstop",cuisine:"wings",name:"Wingstop"},removeTags:{amenity:"restaurant",brand:"Wingstop","brand:wikidata":"Q8025339","brand:wikipedia":"en:Wingstop",cuisine:"wings",name:"Wingstop"},matchScore:2,suggestion:true},"amenity/restaurant/sushi/YO! Sushi":{name:"YO! Sushi",icon:"fas-fish",geometry:["point","area"],tags:{amenity:"restaurant",cuisine:"sushi","brand:wikidata":"Q3105441"},addTags:{amenity:"restaurant",brand:"YO! Sushi","brand:wikidata":"Q3105441","brand:wikipedia":"en:YO! Sushi",cuisine:"sushi",name:"YO! Sushi"},removeTags:{amenity:"restaurant",brand:"YO! Sushi","brand:wikidata":"Q3105441","brand:wikipedia":"en:YO! Sushi",cuisine:"sushi",name:"YO! Sushi"},reference:{key:"cuisine",value:"sushi"},matchScore:2,suggestion:true},"amenity/restaurant/italian/Zizzi":{name:"Zizzi",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant",cuisine:"italian","brand:wikidata":"Q8072944"},addTags:{amenity:"restaurant",brand:"Zizzi","brand:wikidata":"Q8072944","brand:wikipedia":"en:Zizzi",cuisine:"italian",name:"Zizzi"},removeTags:{amenity:"restaurant",brand:"Zizzi","brand:wikidata":"Q8072944","brand:wikipedia":"en:Zizzi",cuisine:"italian",name:"Zizzi"},reference:{key:"cuisine",value:"italian"},matchScore:2,suggestion:true},"amenity/restaurant/はなまるうどん":{name:"はなまるうどん",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant","brand:wikidata":"Q11275674"},addTags:{amenity:"restaurant",brand:"はなまるうどん","brand:en":"Hanamarūdon","brand:wikidata":"Q11275674","brand:wikipedia":"ja:はなまるうどん",name:"はなまるうどん","name:en":"Hanamarūdon"},removeTags:{amenity:"restaurant",brand:"はなまるうどん","brand:en":"Hanamarūdon","brand:wikidata":"Q11275674","brand:wikipedia":"ja:はなまるうどん",name:"はなまるうどん","name:en":"Hanamarūdon"},matchScore:2,suggestion:true},"amenity/restaurant/びっくりドンキー":{name:"びっくりドンキー",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant","brand:wikidata":"Q11276815"},addTags:{amenity:"restaurant",brand:"びっくりドンキー","brand:en":"Bikkuri Donkey","brand:wikidata":"Q11276815","brand:wikipedia":"ja:びっくりドンキー",name:"びっくりドンキー","name:en":"Bikkuri Donkey"},removeTags:{amenity:"restaurant",brand:"びっくりドンキー","brand:en":"Bikkuri Donkey","brand:wikidata":"Q11276815","brand:wikipedia":"ja:びっくりドンキー",name:"びっくりドンキー","name:en":"Bikkuri Donkey"},matchScore:2,suggestion:true},"amenity/restaurant/やよい軒":{name:"やよい軒",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant","brand:wikidata":"Q11280577"},addTags:{amenity:"restaurant",brand:"やよい軒","brand:en":"YAYOI","brand:wikidata":"Q11280577","brand:wikipedia":"ja:やよい軒",name:"やよい軒","name:en":"YAYOI"},removeTags:{amenity:"restaurant",brand:"やよい軒","brand:en":"YAYOI","brand:wikidata":"Q11280577","brand:wikipedia":"ja:やよい軒",name:"やよい軒","name:en":"YAYOI"},matchScore:2,suggestion:true},"amenity/restaurant/ガスト":{name:"ガスト",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant","brand:wikidata":"Q11253593"},addTags:{amenity:"restaurant",brand:"ガスト","brand:en":"Gusto","brand:wikidata":"Q11253593","brand:wikipedia":"ja:すかいらーく",name:"ガスト","name:en":"Gusto"},removeTags:{amenity:"restaurant",brand:"ガスト","brand:en":"Gusto","brand:wikidata":"Q11253593","brand:wikipedia":"ja:すかいらーく",name:"ガスト","name:en":"Gusto"},matchScore:2,suggestion:true},"amenity/restaurant/ココス":{name:"ココス",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant","brand:wikidata":"Q11301951"},addTags:{amenity:"restaurant",brand:"ココス","brand:en":"Coco's","brand:wikidata":"Q11301951","brand:wikipedia":"ja:ココスジャパン",name:"ココス","name:en":"Coco's"},removeTags:{amenity:"restaurant",brand:"ココス","brand:en":"Coco's","brand:wikidata":"Q11301951","brand:wikipedia":"ja:ココスジャパン",name:"ココス","name:en":"Coco's"},matchScore:2,suggestion:true},"amenity/restaurant/サイゼリヤ":{name:"サイゼリヤ",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant","brand:wikidata":"Q886564"},addTags:{amenity:"restaurant",brand:"サイゼリヤ","brand:en":"Saizeriya","brand:wikidata":"Q886564","brand:wikipedia":"en:Saizeriya",name:"サイゼリヤ","name:en":"Saizeriya"},removeTags:{amenity:"restaurant",brand:"サイゼリヤ","brand:en":"Saizeriya","brand:wikidata":"Q886564","brand:wikipedia":"en:Saizeriya",name:"サイゼリヤ","name:en":"Saizeriya"},matchScore:2,suggestion:true},"amenity/restaurant/ジョイフル":{name:"ジョイフル",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant","brand:wikidata":"Q11310517"},addTags:{amenity:"restaurant",brand:"ジョイフル","brand:en":"Joyfull","brand:wikidata":"Q11310517","brand:wikipedia":"ja:ジョイフル",name:"ジョイフル","name:en":"Joyfull"},removeTags:{amenity:"restaurant",brand:"ジョイフル","brand:en":"Joyfull","brand:wikidata":"Q11310517","brand:wikipedia":"ja:ジョイフル",name:"ジョイフル","name:en":"Joyfull"},matchScore:2,suggestion:true},"amenity/restaurant/ジョナサン":{name:"ジョナサン",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant","brand:wikidata":"Q11310628"},addTags:{amenity:"restaurant",brand:"ジョナサン","brand:en":"Jonathan's","brand:wikidata":"Q11310628","brand:wikipedia":"ja:ジョナサン (ファミリーレストラン)",name:"ジョナサン","name:en":"Jonathan's"},removeTags:{amenity:"restaurant",brand:"ジョナサン","brand:en":"Jonathan's","brand:wikidata":"Q11310628","brand:wikipedia":"ja:ジョナサン (ファミリーレストラン)",name:"ジョナサン","name:en":"Jonathan's"},matchScore:2,suggestion:true},"amenity/restaurant/ジョリーパスタ":{name:"ジョリーパスタ",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant","brand:wikidata":"Q10852718"},addTags:{amenity:"restaurant",brand:"ジョリーパスタ","brand:en":"Jolly-Pasta","brand:wikidata":"Q10852718","brand:wikipedia":"ja:ジョリーパスタ",name:"ジョリーパスタ","name:en":"Jolly-Pasta"},removeTags:{amenity:"restaurant",brand:"ジョリーパスタ","brand:en":"Jolly-Pasta","brand:wikidata":"Q10852718","brand:wikipedia":"ja:ジョリーパスタ",name:"ジョリーパスタ","name:en":"Jolly-Pasta"},matchScore:2,suggestion:true},"amenity/restaurant/デニーズ":{name:"デニーズ",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant","brand:wikidata":"Q11320661"},addTags:{amenity:"restaurant",brand:"デニーズ","brand:en":"Denny's","brand:wikidata":"Q11320661","brand:wikipedia":"ja:デニーズ (日本)",name:"デニーズ","name:en":"Denny's"},removeTags:{amenity:"restaurant",brand:"デニーズ","brand:en":"Denny's","brand:wikidata":"Q11320661","brand:wikipedia":"ja:デニーズ (日本)",name:"デニーズ","name:en":"Denny's"},matchScore:2,suggestion:true},"amenity/restaurant/バーミヤン":{name:"バーミヤン",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant","brand:wikidata":"Q11328598"},addTags:{amenity:"restaurant",brand:"バーミヤン","brand:en":"Bamiyan","brand:wikidata":"Q11328598","brand:wikipedia":"ja:バーミヤン (レストランチェーン)",name:"バーミヤン","name:en":"Bamiyan"},removeTags:{amenity:"restaurant",brand:"バーミヤン","brand:en":"Bamiyan","brand:wikidata":"Q11328598","brand:wikipedia":"ja:バーミヤン (レストランチェーン)",name:"バーミヤン","name:en":"Bamiyan"},matchScore:2,suggestion:true},"amenity/restaurant/ビッグボーイ":{name:"ビッグボーイ",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant","brand:wikidata":"Q4386779"},addTags:{amenity:"restaurant",brand:"ビッグボーイ","brand:en":"Big Boy Restaurants","brand:wikidata":"Q4386779","brand:wikipedia":"en:Big Boy Restaurants",name:"ビッグボーイ","name:en":"Big Boy Restaurants"},removeTags:{amenity:"restaurant",brand:"ビッグボーイ","brand:en":"Big Boy Restaurants","brand:wikidata":"Q4386779","brand:wikipedia":"en:Big Boy Restaurants",name:"ビッグボーイ","name:en":"Big Boy Restaurants"},matchScore:2,suggestion:true},"amenity/restaurant/リンガーハット":{name:"リンガーハット",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant","brand:wikidata":"Q7334856"},addTags:{amenity:"restaurant",brand:"リンガーハット","brand:en":"Ringer Hut","brand:wikidata":"Q7334856","brand:wikipedia":"en:Ringer Hut",name:"リンガーハット","name:en":"Ringer Hut"},removeTags:{amenity:"restaurant",brand:"リンガーハット","brand:en":"Ringer Hut","brand:wikidata":"Q7334856","brand:wikipedia":"en:Ringer Hut",name:"リンガーハット","name:en":"Ringer Hut"},matchScore:2,suggestion:true},"amenity/restaurant/ロイヤルホスト":{name:"ロイヤルホスト",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant","brand:wikidata":"Q11120884"},addTags:{amenity:"restaurant",brand:"ロイヤルホスト","brand:en":"Royal Host","brand:wikidata":"Q11120884","brand:wikipedia":"ja:ロイヤルホスト",name:"ロイヤルホスト","name:en":"Royal Host"},removeTags:{amenity:"restaurant",brand:"ロイヤルホスト","brand:en":"Royal Host","brand:wikidata":"Q11120884","brand:wikipedia":"ja:ロイヤルホスト",name:"ロイヤルホスト","name:en":"Royal Host"},matchScore:2,suggestion:true},"amenity/restaurant/noodle/丸亀製麺":{name:"丸亀製麺",icon:"maki-restaurant-noodle",geometry:["point","area"],tags:{amenity:"restaurant",cuisine:"noodle","brand:wikidata":"Q10877253"},addTags:{amenity:"restaurant",brand:"丸亀製麺","brand:en":"Marugame Seimen","brand:wikidata":"Q10877253","brand:wikipedia":"ja:丸亀製麺",cuisine:"noodle",name:"丸亀製麺","name:en":"Marugame Seimen","name:ko":"마루가메 제면"},removeTags:{amenity:"restaurant",brand:"丸亀製麺","brand:en":"Marugame Seimen","brand:wikidata":"Q10877253","brand:wikipedia":"ja:丸亀製麺",cuisine:"noodle",name:"丸亀製麺","name:en":"Marugame Seimen","name:ko":"마루가메 제면"},reference:{key:"cuisine",value:"noodle"},matchScore:2,suggestion:true},"amenity/restaurant/和食さと":{name:"和食さと",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant","brand:wikidata":"Q11304897"},addTags:{amenity:"restaurant",brand:"和食さと","brand:en":"Washoku Sato","brand:wikidata":"Q11304897","brand:wikipedia":"ja:SRSホールディングス",name:"和食さと","name:en":"Washoku Sato"},removeTags:{amenity:"restaurant",brand:"和食さと","brand:en":"Washoku Sato","brand:wikidata":"Q11304897","brand:wikipedia":"ja:SRSホールディングス",name:"和食さと","name:en":"Washoku Sato"},matchScore:2,suggestion:true},"amenity/restaurant/夢庵":{name:"夢庵",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant","brand:wikidata":"Q11253593"},addTags:{amenity:"restaurant",brand:"夢庵","brand:en":"Yumean","brand:wikidata":"Q11253593","brand:wikipedia":"ja:すかいらーく",name:"夢庵","name:en":"Yumean"},removeTags:{amenity:"restaurant",brand:"夢庵","brand:en":"Yumean","brand:wikidata":"Q11253593","brand:wikipedia":"ja:すかいらーく",name:"夢庵","name:en":"Yumean"},matchScore:2,suggestion:true},"amenity/restaurant/japanese/大戸屋":{name:"大戸屋",icon:"maki-restaurant-noodle",geometry:["point","area"],tags:{amenity:"restaurant",cuisine:"japanese","brand:wikidata":"Q11435522"},addTags:{amenity:"restaurant",brand:"大戸屋","brand:en":"Ootoya","brand:wikidata":"Q11435522","brand:wikipedia":"ja:大戸屋ホールディングス",cuisine:"japanese",name:"大戸屋","name:en":"Ootoya"},removeTags:{amenity:"restaurant",brand:"大戸屋","brand:en":"Ootoya","brand:wikidata":"Q11435522","brand:wikipedia":"ja:大戸屋ホールディングス",cuisine:"japanese",name:"大戸屋","name:en":"Ootoya"},reference:{key:"cuisine",value:"japanese"},matchScore:2,suggestion:true},"amenity/restaurant/大阪王将":{name:"大阪王将",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant","brand:wikidata":"Q48743717"},addTags:{amenity:"restaurant",brand:"大阪王将","brand:en":"Osaka Ohsho","brand:wikidata":"Q48743717","brand:wikipedia":"ja:大阪王将",name:"大阪王将","name:en":"Osaka Ohsho"},removeTags:{amenity:"restaurant",brand:"大阪王将","brand:en":"Osaka Ohsho","brand:wikidata":"Q48743717","brand:wikipedia":"ja:大阪王将",name:"大阪王将","name:en":"Osaka Ohsho"},matchScore:2,suggestion:true},"amenity/restaurant/天下一品":{name:"天下一品",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant","brand:wikidata":"Q11442172"},addTags:{amenity:"restaurant",brand:"天下一品","brand:en":"Tenkaippin","brand:wikidata":"Q11442172","brand:wikipedia":"en:Tenkaippin",name:"天下一品","name:en":"Tenkaippin"},removeTags:{amenity:"restaurant",brand:"天下一品","brand:en":"Tenkaippin","brand:wikidata":"Q11442172","brand:wikipedia":"en:Tenkaippin",name:"天下一品","name:en":"Tenkaippin"},matchScore:2,suggestion:true},"amenity/restaurant/安楽亭":{name:"安楽亭",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant","brand:wikidata":"Q11450866"},addTags:{amenity:"restaurant",brand:"安楽亭","brand:en":"Anrakutei","brand:wikidata":"Q11450866","brand:wikipedia":"ja:安楽亭",cuisine:"barbecue",name:"安楽亭","name:en":"Anrakutei"},removeTags:{amenity:"restaurant",brand:"安楽亭","brand:en":"Anrakutei","brand:wikidata":"Q11450866","brand:wikipedia":"ja:安楽亭",cuisine:"barbecue",name:"安楽亭","name:en":"Anrakutei"},matchScore:2,suggestion:true},"amenity/restaurant/noodle/日高屋":{name:"日高屋",icon:"maki-restaurant-noodle",geometry:["point","area"],tags:{amenity:"restaurant",cuisine:"noodle","brand:wikidata":"Q11326050"},addTags:{amenity:"restaurant",brand:"日高屋","brand:en":"Hidakaya","brand:wikidata":"Q11326050","brand:wikipedia":"ja:ハイデイ日高",cuisine:"noodle",name:"日高屋","name:en":"Hidakaya"},removeTags:{amenity:"restaurant",brand:"日高屋","brand:en":"Hidakaya","brand:wikidata":"Q11326050","brand:wikipedia":"ja:ハイデイ日高",cuisine:"noodle",name:"日高屋","name:en":"Hidakaya"},reference:{key:"cuisine",value:"noodle"},matchScore:2,suggestion:true},"amenity/restaurant/牛角":{name:"牛角",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant","brand:wikidata":"Q11349387"},addTags:{amenity:"restaurant",brand:"牛角","brand:en":"Gyū-Kaku","brand:wikidata":"Q11349387","brand:wikipedia":"en:Gyu-Kaku",cuisine:"barbecue",name:"牛角","name:en":"Gyū-Kaku"},removeTags:{amenity:"restaurant",brand:"牛角","brand:en":"Gyū-Kaku","brand:wikidata":"Q11349387","brand:wikipedia":"en:Gyu-Kaku",cuisine:"barbecue",name:"牛角","name:en":"Gyū-Kaku"},matchScore:2,suggestion:true},"amenity/restaurant/餃子の王将":{name:"餃子の王将",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant","brand:wikidata":"Q11666805"},addTags:{amenity:"restaurant",brand:"餃子の王将","brand:en":"Gyoza no Ohsho","brand:wikidata":"Q11666805","brand:wikipedia":"en:Gyoza no Ohsho",name:"餃子の王将","name:en":"Gyoza no Ohsho"},removeTags:{amenity:"restaurant",brand:"餃子の王将","brand:en":"Gyoza no Ohsho","brand:wikidata":"Q11666805","brand:wikipedia":"en:Gyoza no Ohsho",name:"餃子の王将","name:en":"Gyoza no Ohsho"},matchScore:2,suggestion:true},"amenity/vending_machine/parcel_pickup_dropoff/DHL Packstation":{name:"DHL Packstation",icon:"temaki-vending_machine",geometry:["point"],tags:{amenity:"vending_machine",vending:"parcel_pickup;parcel_mail_in","brand:wikidata":"Q489815"},addTags:{amenity:"vending_machine",brand:"DHL","brand:wikidata":"Q489815","brand:wikipedia":"en:DHL Express",name:"DHL Packstation",operator:"DHL",vending:"parcel_pickup;parcel_mail_in"},removeTags:{amenity:"vending_machine",brand:"DHL","brand:wikidata":"Q489815","brand:wikipedia":"en:DHL Express",name:"DHL Packstation",operator:"DHL",vending:"parcel_pickup;parcel_mail_in"},reference:{key:"vending",value:"parcel_pickup;parcel_mail_in"},matchScore:2,suggestion:true},"amenity/vending_machine/public_transport_tickets/KKM":{name:"KKM",icon:"temaki-vending_machine",geometry:["point"],tags:{amenity:"vending_machine",vending:"public_transport_tickets","brand:wikidata":"Q57515549"},addTags:{amenity:"vending_machine",brand:"KKM","brand:wikidata":"Q57515549",name:"KKM",vending:"public_transport_tickets"},removeTags:{amenity:"vending_machine",brand:"KKM","brand:wikidata":"Q57515549",name:"KKM",vending:"public_transport_tickets"},reference:{key:"vending",value:"public_transport_tickets"},matchScore:2,suggestion:true},"amenity/vending_machine/parcel_pickup_dropoff/Paczkomat InPost":{name:"Paczkomat InPost",icon:"temaki-vending_machine",geometry:["point"],tags:{amenity:"vending_machine",vending:"parcel_pickup;parcel_mail_in","brand:wikidata":"Q3182097"},addTags:{amenity:"vending_machine",brand:"InPost","brand:wikidata":"Q3182097","brand:wikipedia":"pl:InPost",name:"Paczkomat InPost",vending:"parcel_pickup;parcel_mail_in"},removeTags:{amenity:"vending_machine",brand:"InPost","brand:wikidata":"Q3182097","brand:wikipedia":"pl:InPost",name:"Paczkomat InPost",vending:"parcel_pickup;parcel_mail_in"},reference:{key:"vending",value:"parcel_pickup;parcel_mail_in"},matchScore:2,suggestion:true},"amenity/vending_machine/Redbox":{name:"Redbox",icon:"temaki-vending_machine",geometry:["point"],tags:{amenity:"vending_machine","brand:wikidata":"Q7305489"},addTags:{amenity:"vending_machine",brand:"Redbox","brand:wikidata":"Q7305489","brand:wikipedia":"en:Redbox",name:"Redbox"},removeTags:{amenity:"vending_machine",brand:"Redbox","brand:wikidata":"Q7305489","brand:wikipedia":"en:Redbox",name:"Redbox"},matchScore:2,suggestion:true},"amenity/vending_machine/Robidog":{name:"Robidog",icon:"temaki-vending_machine",geometry:["point"],tags:{amenity:"vending_machine","brand:wikidata":"Q2159689"},addTags:{amenity:"vending_machine",brand:"Robidog","brand:wikidata":"Q2159689","brand:wikipedia":"de:Robidog",name:"Robidog"},removeTags:{amenity:"vending_machine",brand:"Robidog","brand:wikidata":"Q2159689","brand:wikipedia":"de:Robidog",name:"Robidog"},matchScore:2,suggestion:true},"amenity/veterinary/Banfield Pet Hospital":{name:"Banfield Pet Hospital",icon:"temaki-veterinary_care",geometry:["point","area"],tags:{amenity:"veterinary","brand:wikidata":"Q2882416"},addTags:{amenity:"veterinary",brand:"Banfield Pet Hospital","brand:wikidata":"Q2882416","brand:wikipedia":"en:Banfield Pet Hospital",name:"Banfield Pet Hospital"},removeTags:{amenity:"veterinary",brand:"Banfield Pet Hospital","brand:wikidata":"Q2882416","brand:wikipedia":"en:Banfield Pet Hospital",name:"Banfield Pet Hospital"},matchScore:2,suggestion:true},"leisure/fitness_centre/24 Hour Fitness":{name:"24 Hour Fitness",icon:"fas-dumbbell",geometry:["point","area"],tags:{leisure:"fitness_centre","brand:wikidata":"Q4631849"},addTags:{brand:"24 Hour Fitness","brand:wikidata":"Q4631849","brand:wikipedia":"en:24 Hour Fitness",leisure:"fitness_centre",name:"24 Hour Fitness"},removeTags:{brand:"24 Hour Fitness","brand:wikidata":"Q4631849","brand:wikipedia":"en:24 Hour Fitness",leisure:"fitness_centre",name:"24 Hour Fitness"},matchScore:2,suggestion:true},"leisure/fitness_centre/Anytime Fitness":{name:"Anytime Fitness",icon:"fas-dumbbell",geometry:["point","area"],tags:{leisure:"fitness_centre","brand:wikidata":"Q4778364"},addTags:{brand:"Anytime Fitness","brand:wikidata":"Q4778364","brand:wikipedia":"en:Anytime Fitness",leisure:"fitness_centre",name:"Anytime Fitness"},removeTags:{brand:"Anytime Fitness","brand:wikidata":"Q4778364","brand:wikipedia":"en:Anytime Fitness",leisure:"fitness_centre",name:"Anytime Fitness"},matchScore:2,suggestion:true},"leisure/fitness_centre/Curves":{name:"Curves",icon:"fas-dumbbell",geometry:["point","area"],tags:{leisure:"fitness_centre","brand:wikidata":"Q5196080"},addTags:{brand:"Curves","brand:wikidata":"Q5196080","brand:wikipedia":"en:Curves International",leisure:"fitness_centre",name:"Curves"},removeTags:{brand:"Curves","brand:wikidata":"Q5196080","brand:wikipedia":"en:Curves International",leisure:"fitness_centre",name:"Curves"},matchScore:2,suggestion:true},"leisure/fitness_centre/Gold's Gym":{name:"Gold's Gym",icon:"fas-dumbbell",geometry:["point","area"],tags:{leisure:"fitness_centre","brand:wikidata":"Q1536234"},addTags:{brand:"Gold's Gym","brand:wikidata":"Q1536234","brand:wikipedia":"en:Gold's Gym",leisure:"fitness_centre",name:"Gold's Gym"},removeTags:{brand:"Gold's Gym","brand:wikidata":"Q1536234","brand:wikipedia":"en:Gold's Gym",leisure:"fitness_centre",name:"Gold's Gym"},matchScore:2,suggestion:true},"leisure/fitness_centre/LA Fitness":{name:"LA Fitness",icon:"fas-dumbbell",geometry:["point","area"],tags:{leisure:"fitness_centre","brand:wikidata":"Q6457180"},addTags:{brand:"LA Fitness","brand:wikidata":"Q6457180","brand:wikipedia":"en:LA Fitness",leisure:"fitness_centre",name:"LA Fitness"},removeTags:{brand:"LA Fitness","brand:wikidata":"Q6457180","brand:wikipedia":"en:LA Fitness",leisure:"fitness_centre",name:"LA Fitness"},matchScore:2,suggestion:true},"leisure/fitness_centre/Planet Fitness":{name:"Planet Fitness",icon:"fas-dumbbell",geometry:["point","area"],tags:{leisure:"fitness_centre","brand:wikidata":"Q7201095"},addTags:{brand:"Planet Fitness","brand:wikidata":"Q7201095","brand:wikipedia":"en:Planet Fitness",leisure:"fitness_centre",name:"Planet Fitness"},removeTags:{brand:"Planet Fitness","brand:wikidata":"Q7201095","brand:wikipedia":"en:Planet Fitness",leisure:"fitness_centre",name:"Planet Fitness"},matchScore:2,suggestion:true},"leisure/fitness_centre/PureGym":{name:"PureGym",icon:"fas-dumbbell",geometry:["point","area"],tags:{leisure:"fitness_centre","brand:wikidata":"Q18345898"},addTags:{brand:"PureGym","brand:wikidata":"Q18345898","brand:wikipedia":"en:PureGym",leisure:"fitness_centre",name:"PureGym"},removeTags:{brand:"PureGym","brand:wikidata":"Q18345898","brand:wikipedia":"en:PureGym",leisure:"fitness_centre",name:"PureGym"},matchScore:2,suggestion:true},"leisure/fitness_centre/Snap Fitness":{name:"Snap Fitness",icon:"fas-dumbbell",geometry:["point","area"],tags:{leisure:"fitness_centre","brand:wikidata":"Q7547254"},addTags:{brand:"Snap Fitness","brand:wikidata":"Q7547254","brand:wikipedia":"en:Snap Fitness",leisure:"fitness_centre",name:"Snap Fitness"},removeTags:{brand:"Snap Fitness","brand:wikidata":"Q7547254","brand:wikipedia":"en:Snap Fitness",leisure:"fitness_centre",name:"Snap Fitness"},matchScore:2,suggestion:true},"leisure/fitness_centre/YMCA":{name:"YMCA",icon:"fas-dumbbell",geometry:["point","area"],tags:{leisure:"fitness_centre","brand:wikidata":"Q157169"},addTags:{brand:"YMCA","brand:wikidata":"Q157169","brand:wikipedia":"en:YMCA",leisure:"fitness_centre",name:"YMCA"},removeTags:{brand:"YMCA","brand:wikidata":"Q157169","brand:wikipedia":"en:YMCA",leisure:"fitness_centre",name:"YMCA"},matchScore:2,suggestion:true},"shop/alcohol/Alko":{name:"Alko",icon:"maki-alcohol-shop",geometry:["point","area"],tags:{shop:"alcohol","brand:wikidata":"Q1849187"},addTags:{brand:"Alko","brand:wikidata":"Q1849187","brand:wikipedia":"en:Alko",name:"Alko",shop:"alcohol"},removeTags:{brand:"Alko","brand:wikidata":"Q1849187","brand:wikipedia":"en:Alko",name:"Alko",shop:"alcohol"},matchScore:2,suggestion:true},"shop/alcohol/BC Liquor Store":{name:"BC Liquor Store",icon:"maki-alcohol-shop",geometry:["point","area"],tags:{shop:"alcohol","brand:wikidata":"Q43079557"},addTags:{brand:"BC Liquor Store","brand:wikidata":"Q43079557","brand:wikipedia":"en:BC Liquor Stores",name:"BC Liquor Store",shop:"alcohol"},removeTags:{brand:"BC Liquor Store","brand:wikidata":"Q43079557","brand:wikipedia":"en:BC Liquor Stores",name:"BC Liquor Store",shop:"alcohol"},matchScore:2,suggestion:true},"shop/alcohol/BWS":{name:"BWS",icon:"maki-alcohol-shop",geometry:["point","area"],tags:{shop:"alcohol","brand:wikidata":"Q4836848"},addTags:{brand:"BWS","brand:wikidata":"Q4836848","brand:wikipedia":"en:BWS (liquor retailer)",name:"BWS",shop:"alcohol"},removeTags:{brand:"BWS","brand:wikidata":"Q4836848","brand:wikipedia":"en:BWS (liquor retailer)",name:"BWS",shop:"alcohol"},matchScore:2,suggestion:true},"shop/alcohol/Bargain Booze":{name:"Bargain Booze",icon:"maki-alcohol-shop",geometry:["point","area"],tags:{shop:"alcohol","brand:wikidata":"Q16971315"},addTags:{brand:"Bargain Booze","brand:wikidata":"Q16971315","brand:wikipedia":"en:Bargain Booze",name:"Bargain Booze",shop:"alcohol"},removeTags:{brand:"Bargain Booze","brand:wikidata":"Q16971315","brand:wikipedia":"en:Bargain Booze",name:"Bargain Booze",shop:"alcohol"},matchScore:2,suggestion:true},"shop/alcohol/Dan Murphy's":{name:"Dan Murphy's",icon:"maki-alcohol-shop",geometry:["point","area"],tags:{shop:"alcohol","brand:wikidata":"Q5214075"},addTags:{brand:"Dan Murphy's","brand:wikidata":"Q5214075","brand:wikipedia":"en:Dan Murphy's",name:"Dan Murphy's",shop:"alcohol"},removeTags:{brand:"Dan Murphy's","brand:wikidata":"Q5214075","brand:wikipedia":"en:Dan Murphy's",name:"Dan Murphy's",shop:"alcohol"},matchScore:2,suggestion:true},"shop/alcohol/Gall & Gall":{name:"Gall & Gall",icon:"maki-alcohol-shop",geometry:["point","area"],tags:{shop:"alcohol","brand:wikidata":"Q13639185"},addTags:{brand:"Gall & Gall","brand:wikidata":"Q13639185","brand:wikipedia":"nl:Gall & Gall",name:"Gall & Gall",shop:"alcohol"},removeTags:{brand:"Gall & Gall","brand:wikidata":"Q13639185","brand:wikipedia":"nl:Gall & Gall",name:"Gall & Gall",shop:"alcohol"},matchScore:2,suggestion:true},"shop/alcohol/LCBO":{name:"LCBO",icon:"maki-alcohol-shop",geometry:["point","area"],tags:{shop:"alcohol","brand:wikidata":"Q845263"},addTags:{brand:"LCBO","brand:wikidata":"Q845263","brand:wikipedia":"en:Liquor Control Board of Ontario",name:"LCBO",shop:"alcohol"},removeTags:{brand:"LCBO","brand:wikidata":"Q845263","brand:wikipedia":"en:Liquor Control Board of Ontario",name:"LCBO",shop:"alcohol"},matchScore:2,suggestion:true},"shop/alcohol/Liquorland":{name:"Liquorland",icon:"maki-alcohol-shop",geometry:["point","area"],tags:{shop:"alcohol","brand:wikidata":"Q2283837"},addTags:{brand:"Liquorland","brand:wikidata":"Q2283837","brand:wikipedia":"en:Liquorland",name:"Liquorland",shop:"alcohol"},removeTags:{brand:"Liquorland","brand:wikidata":"Q2283837","brand:wikipedia":"en:Liquorland",name:"Liquorland",shop:"alcohol"},matchScore:2,suggestion:true},"shop/alcohol/Nicolas":{name:"Nicolas",icon:"maki-alcohol-shop",geometry:["point","area"],tags:{shop:"alcohol","brand:wikidata":"Q3340012"},addTags:{brand:"Nicolas","brand:wikidata":"Q3340012","brand:wikipedia":"en:Nicolas (wine retailer)",name:"Nicolas",shop:"alcohol"},removeTags:{brand:"Nicolas","brand:wikidata":"Q3340012","brand:wikipedia":"en:Nicolas (wine retailer)",name:"Nicolas",shop:"alcohol"},matchScore:2,suggestion:true},"shop/alcohol/SAQ":{name:"SAQ",icon:"maki-alcohol-shop",geometry:["point","area"],tags:{shop:"alcohol","brand:wikidata":"Q3488077"},addTags:{brand:"SAQ","brand:wikidata":"Q3488077","brand:wikipedia":"en:Société des alcools du Québec",name:"SAQ",shop:"alcohol"},removeTags:{brand:"SAQ","brand:wikidata":"Q3488077","brand:wikipedia":"en:Société des alcools du Québec",name:"SAQ",shop:"alcohol"},matchScore:2,suggestion:true},"shop/alcohol/Spec's":{name:"Spec's",icon:"maki-alcohol-shop",geometry:["point","area"],tags:{shop:"alcohol","brand:wikidata":"Q7574415"},addTags:{brand:"Spec's","brand:wikidata":"Q7574415","brand:wikipedia":"en:Spec's Wine, Spirits & Finer Foods",name:"Spec's",shop:"alcohol"},removeTags:{brand:"Spec's","brand:wikidata":"Q7574415","brand:wikipedia":"en:Spec's Wine, Spirits & Finer Foods",name:"Spec's",shop:"alcohol"},matchScore:2,suggestion:true},"shop/alcohol/Systembolaget":{name:"Systembolaget",icon:"maki-alcohol-shop",geometry:["point","area"],tags:{shop:"alcohol","brand:wikidata":"Q1476113"},addTags:{brand:"Systembolaget","brand:wikidata":"Q1476113","brand:wikipedia":"en:Systembolaget",name:"Systembolaget",shop:"alcohol"},removeTags:{brand:"Systembolaget","brand:wikidata":"Q1476113","brand:wikipedia":"en:Systembolaget",name:"Systembolaget",shop:"alcohol"},matchScore:2,suggestion:true},"shop/alcohol/The Beer Store":{name:"The Beer Store",icon:"maki-alcohol-shop",geometry:["point","area"],tags:{shop:"alcohol","brand:wikidata":"Q16243674"},addTags:{brand:"The Beer Store","brand:wikidata":"Q16243674","brand:wikipedia":"en:The Beer Store",name:"The Beer Store",shop:"alcohol"},removeTags:{brand:"The Beer Store","brand:wikidata":"Q16243674","brand:wikipedia":"en:The Beer Store",name:"The Beer Store",shop:"alcohol"},matchScore:2,suggestion:true},"shop/alcohol/Total Wine":{name:"Total Wine",icon:"maki-alcohol-shop",geometry:["point","area"],tags:{shop:"alcohol","brand:wikidata":"Q7828084"},addTags:{brand:"Total Wine","brand:wikidata":"Q7828084","brand:wikipedia":"en:Total Wine & More",name:"Total Wine",shop:"alcohol"},removeTags:{brand:"Total Wine","brand:wikidata":"Q7828084","brand:wikipedia":"en:Total Wine & More",name:"Total Wine",shop:"alcohol"},matchScore:2,suggestion:true},"shop/alcohol/Vinmonopolet":{name:"Vinmonopolet",icon:"maki-alcohol-shop",geometry:["point","area"],tags:{shop:"alcohol","brand:wikidata":"Q1740534"},addTags:{brand:"Vinmonopolet","brand:wikidata":"Q1740534","brand:wikipedia":"en:Vinmonopolet",name:"Vinmonopolet",shop:"alcohol"},removeTags:{brand:"Vinmonopolet","brand:wikidata":"Q1740534","brand:wikipedia":"en:Vinmonopolet",name:"Vinmonopolet",shop:"alcohol"},matchScore:2,suggestion:true},"shop/alcohol/Virginia ABC":{name:"Virginia ABC",icon:"maki-alcohol-shop",geometry:["point","area"],tags:{shop:"alcohol","brand:wikidata":"Q7934236"},addTags:{brand:"Virginia ABC","brand:wikidata":"Q7934236","brand:wikipedia":"en:Virginia Alcoholic Beverage Control Authority",name:"Virginia ABC",shop:"alcohol"},removeTags:{brand:"Virginia ABC","brand:wikidata":"Q7934236","brand:wikipedia":"en:Virginia Alcoholic Beverage Control Authority",name:"Virginia ABC",shop:"alcohol"},matchScore:2,suggestion:true},"shop/alcohol/Красное & Белое":{name:"Красное & Белое",icon:"maki-alcohol-shop",geometry:["point","area"],tags:{shop:"alcohol","brand:wikidata":"Q24933790"},addTags:{brand:"Красное & Белое","brand:en":"Red&White","brand:wikidata":"Q24933790","brand:wikipedia":"en:Red&White",name:"Красное & Белое","name:en":"Red&White",shop:"alcohol"},removeTags:{brand:"Красное & Белое","brand:en":"Red&White","brand:wikidata":"Q24933790","brand:wikipedia":"en:Red&White",name:"Красное & Белое","name:en":"Red&White",shop:"alcohol"},matchScore:2,suggestion:true},"shop/baby_goods/Babies R Us":{name:"Babies R Us",icon:"maki-shop",geometry:["point","area"],tags:{shop:"baby_goods","brand:wikidata":"Q696334"},addTags:{brand:"Babies R Us","brand:wikidata":"Q696334","brand:wikipedia":"en:Toys \"R\" Us",name:"Babies R Us",shop:"baby_goods"},removeTags:{brand:"Babies R Us","brand:wikidata":"Q696334","brand:wikipedia":"en:Toys \"R\" Us",name:"Babies R Us",shop:"baby_goods"},matchScore:2,suggestion:true},"shop/baby_goods/BabyOne":{name:"BabyOne",icon:"maki-shop",geometry:["point","area"],tags:{shop:"baby_goods","brand:wikidata":"Q57540408"},addTags:{brand:"BabyOne","brand:wikidata":"Q57540408",name:"BabyOne",shop:"baby_goods"},removeTags:{brand:"BabyOne","brand:wikidata":"Q57540408",name:"BabyOne",shop:"baby_goods"},matchScore:2,suggestion:true},"shop/baby_goods/Mothercare":{name:"Mothercare",icon:"maki-shop",geometry:["point","area"],tags:{shop:"baby_goods","brand:wikidata":"Q136738"},addTags:{brand:"Mothercare","brand:wikidata":"Q136738","brand:wikipedia":"en:Mothercare",name:"Mothercare",shop:"baby_goods"},removeTags:{brand:"Mothercare","brand:wikidata":"Q136738","brand:wikipedia":"en:Mothercare",name:"Mothercare",shop:"baby_goods"},matchScore:2,suggestion:true},"shop/bakery/Bakers Delight":{name:"Bakers Delight",icon:"maki-bakery",geometry:["point","area"],tags:{shop:"bakery","brand:wikidata":"Q4849261"},addTags:{brand:"Bakers Delight","brand:wikidata":"Q4849261","brand:wikipedia":"en:Bakers Delight",name:"Bakers Delight",shop:"bakery"},removeTags:{brand:"Bakers Delight","brand:wikidata":"Q4849261","brand:wikipedia":"en:Bakers Delight",name:"Bakers Delight",shop:"bakery"},matchScore:2,suggestion:true},"shop/bakery/Bakker Bart":{name:"Bakker Bart",icon:"maki-bakery",geometry:["point","area"],tags:{shop:"bakery","brand:wikidata":"Q2177445"},addTags:{brand:"Bakker Bart","brand:wikidata":"Q2177445","brand:wikipedia":"nl:Bakker Bart",name:"Bakker Bart",shop:"bakery"},removeTags:{brand:"Bakker Bart","brand:wikidata":"Q2177445","brand:wikipedia":"nl:Bakker Bart",name:"Bakker Bart",shop:"bakery"},matchScore:2,suggestion:true},"shop/bakery/Banette":{name:"Banette",icon:"maki-bakery",geometry:["point","area"],tags:{shop:"bakery","brand:wikidata":"Q2882405"},addTags:{brand:"Banette","brand:wikidata":"Q2882405","brand:wikipedia":"fr:Banette (entreprise)",name:"Banette",shop:"bakery"},removeTags:{brand:"Banette","brand:wikidata":"Q2882405","brand:wikipedia":"fr:Banette (entreprise)",name:"Banette",shop:"bakery"},matchScore:2,suggestion:true},"shop/bakery/Bäckerei Fuchs":{name:"Bäckerei Fuchs",icon:"maki-bakery",geometry:["point","area"],tags:{shop:"bakery","brand:wikidata":"Q42825993"},addTags:{brand:"Bäckerei Fuchs","brand:wikidata":"Q42825993","brand:wikipedia":"de:Harald Fuchs Bäckerei – Konditorei",name:"Bäckerei Fuchs",shop:"bakery"},removeTags:{brand:"Bäckerei Fuchs","brand:wikidata":"Q42825993","brand:wikipedia":"de:Harald Fuchs Bäckerei – Konditorei",name:"Bäckerei Fuchs",shop:"bakery"},matchScore:2,suggestion:true},"shop/bakery/Cooplands":{name:"Cooplands",icon:"maki-bakery",geometry:["point","area"],tags:{shop:"bakery","brand:wikidata":"Q5167971"},addTags:{brand:"Cooplands","brand:wikidata":"Q5167971","brand:wikipedia":"en:Cooplands",name:"Cooplands",shop:"bakery"},removeTags:{brand:"Cooplands","brand:wikidata":"Q5167971","brand:wikipedia":"en:Cooplands",name:"Cooplands",shop:"bakery"},matchScore:2,suggestion:true},"shop/bakery/Der Beck":{name:"Der Beck",icon:"maki-bakery",geometry:["point","area"],tags:{shop:"bakery","brand:wikidata":"Q1192443"},addTags:{brand:"Der Beck","brand:wikidata":"Q1192443","brand:wikipedia":"en:Der Beck",name:"Der Beck",shop:"bakery"},removeTags:{brand:"Der Beck","brand:wikidata":"Q1192443","brand:wikipedia":"en:Der Beck",name:"Der Beck",shop:"bakery"},matchScore:2,suggestion:true},"shop/bakery/Ditsch":{name:"Ditsch",icon:"maki-bakery",geometry:["point","area"],tags:{shop:"bakery","brand:wikidata":"Q911573"},addTags:{brand:"Ditsch","brand:wikidata":"Q911573","brand:wikipedia":"en:Ditsch",name:"Ditsch",shop:"bakery"},removeTags:{brand:"Ditsch","brand:wikidata":"Q911573","brand:wikipedia":"en:Ditsch",name:"Ditsch",shop:"bakery"},matchScore:2,suggestion:true},"shop/bakery/Fornetti":{name:"Fornetti",icon:"maki-bakery",geometry:["point","area"],tags:{shop:"bakery","brand:wikidata":"Q1003020"},addTags:{brand:"Fornetti","brand:wikidata":"Q1003020","brand:wikipedia":"en:Fornetti",name:"Fornetti",shop:"bakery"},removeTags:{brand:"Fornetti","brand:wikidata":"Q1003020","brand:wikipedia":"en:Fornetti",name:"Fornetti",shop:"bakery"},matchScore:2,suggestion:true},"shop/bakery/Goldilocks":{name:"Goldilocks",icon:"maki-bakery",geometry:["point","area"],tags:{shop:"bakery","brand:wikidata":"Q5580198"},addTags:{brand:"Goldilocks","brand:wikidata":"Q5580198","brand:wikipedia":"en:Goldilocks Bakeshop",name:"Goldilocks",shop:"bakery"},removeTags:{brand:"Goldilocks","brand:wikidata":"Q5580198","brand:wikipedia":"en:Goldilocks Bakeshop",name:"Goldilocks",shop:"bakery"},matchScore:2,suggestion:true},"shop/bakery/Greggs":{name:"Greggs",icon:"maki-bakery",geometry:["point","area"],tags:{shop:"bakery","brand:wikidata":"Q3403981"},addTags:{brand:"Greggs","brand:wikidata":"Q3403981","brand:wikipedia":"en:Greggs",name:"Greggs",shop:"bakery"},removeTags:{brand:"Greggs","brand:wikidata":"Q3403981","brand:wikipedia":"en:Greggs",name:"Greggs",shop:"bakery"},matchScore:2,suggestion:true},"shop/bakery/Hofpfisterei":{name:"Hofpfisterei",icon:"maki-bakery",geometry:["point","area"],tags:{shop:"bakery","brand:wikidata":"Q1623217"},addTags:{brand:"Hofpfisterei","brand:wikidata":"Q1623217","brand:wikipedia":"en:Hofpfisterei",name:"Hofpfisterei",shop:"bakery"},removeTags:{brand:"Hofpfisterei","brand:wikidata":"Q1623217","brand:wikipedia":"en:Hofpfisterei",name:"Hofpfisterei",shop:"bakery"},matchScore:2,suggestion:true},"shop/bakery/Ihle":{name:"Ihle",icon:"maki-bakery",geometry:["point","area"],tags:{shop:"bakery","brand:wikidata":"Q881821"},addTags:{brand:"Ihle","brand:wikidata":"Q881821","brand:wikipedia":"en:Ihle",name:"Ihle",shop:"bakery"},removeTags:{brand:"Ihle","brand:wikidata":"Q881821","brand:wikipedia":"en:Ihle",name:"Ihle",shop:"bakery"},matchScore:2,suggestion:true},"shop/bakery/K&U Bäckerei":{name:"K&U Bäckerei",icon:"maki-bakery",geometry:["point","area"],tags:{shop:"bakery","brand:wikidata":"Q1719433"},addTags:{brand:"K&U Bäckerei","brand:wikidata":"Q1719433","brand:wikipedia":"de:K & U Bäckerei",name:"K&U Bäckerei",shop:"bakery"},removeTags:{brand:"K&U Bäckerei","brand:wikidata":"Q1719433","brand:wikipedia":"de:K & U Bäckerei",name:"K&U Bäckerei",shop:"bakery"},matchScore:2,suggestion:true},"shop/bakery/Kamps":{name:"Kamps",icon:"maki-bakery",geometry:["point","area"],tags:{shop:"bakery","brand:wikidata":"Q1723381"},addTags:{brand:"Kamps","brand:wikidata":"Q1723381","brand:wikipedia":"de:Kamps (Unternehmen)",name:"Kamps",shop:"bakery"},removeTags:{brand:"Kamps","brand:wikidata":"Q1723381","brand:wikipedia":"de:Kamps (Unternehmen)",name:"Kamps",shop:"bakery"},matchScore:2,suggestion:true},"shop/bakery/La Mie Câline":{name:"La Mie Câline",icon:"maki-bakery",geometry:["point","area"],tags:{shop:"bakery","brand:wikidata":"Q3210704"},addTags:{brand:"La Mie Câline","brand:wikidata":"Q3210704","brand:wikipedia":"fr:La Mie câline",name:"La Mie Câline",shop:"bakery"},removeTags:{brand:"La Mie Câline","brand:wikidata":"Q3210704","brand:wikipedia":"fr:La Mie câline",name:"La Mie Câline",shop:"bakery"},matchScore:2,suggestion:true},"shop/bakery/Le Crobag":{name:"Le Crobag",icon:"maki-bakery",geometry:["point","area"],tags:{shop:"bakery","brand:wikidata":"Q1558025"},addTags:{brand:"Le Crobag","brand:wikidata":"Q1558025","brand:wikipedia":"de:Le Crobag",name:"Le Crobag",shop:"bakery"},removeTags:{brand:"Le Crobag","brand:wikidata":"Q1558025","brand:wikipedia":"de:Le Crobag",name:"Le Crobag",shop:"bakery"},matchScore:2,suggestion:true},"shop/bakery/Lila Bäcker":{name:"Lila Bäcker",icon:"maki-bakery",geometry:["point","area"],tags:{shop:"bakery","brand:wikidata":"Q57516591"},addTags:{brand:"Lila Bäcker","brand:wikidata":"Q57516591",name:"Lila Bäcker",shop:"bakery"},removeTags:{brand:"Lila Bäcker","brand:wikidata":"Q57516591",name:"Lila Bäcker",shop:"bakery"},matchScore:2,suggestion:true},"shop/bakery/Musmanni":{name:"Musmanni",icon:"maki-bakery",geometry:["point","area"],tags:{shop:"bakery","brand:wikidata":"Q19382082"},addTags:{brand:"Musmanni","brand:wikidata":"Q19382082","brand:wikipedia":"no:Musmanni",name:"Musmanni",shop:"bakery"},removeTags:{brand:"Musmanni","brand:wikidata":"Q19382082","brand:wikipedia":"no:Musmanni",name:"Musmanni",shop:"bakery"},matchScore:2,suggestion:true},"shop/bakery/Paul":{name:"Paul",icon:"maki-bakery",geometry:["point","area"],tags:{shop:"bakery","brand:wikidata":"Q3370417"},addTags:{brand:"Paul","brand:wikidata":"Q3370417","brand:wikipedia":"en:Paul (bakery)",name:"Paul",shop:"bakery"},removeTags:{brand:"Paul","brand:wikidata":"Q3370417","brand:wikipedia":"en:Paul (bakery)",name:"Paul",shop:"bakery"},matchScore:2,suggestion:true},"shop/bakery/Red Ribbon":{name:"Red Ribbon",icon:"maki-bakery",geometry:["point","area"],tags:{shop:"bakery","brand:wikidata":"Q7304789"},addTags:{brand:"Red Ribbon","brand:wikidata":"Q7304789","brand:wikipedia":"en:Red Ribbon Bakeshop",name:"Red Ribbon",shop:"bakery"},removeTags:{brand:"Red Ribbon","brand:wikidata":"Q7304789","brand:wikipedia":"en:Red Ribbon Bakeshop",name:"Red Ribbon",shop:"bakery"},matchScore:2,suggestion:true},"shop/bakery/Ronde des Pains":{name:"Ronde des Pains",icon:"maki-bakery",geometry:["point","area"],tags:{shop:"bakery","brand:wikidata":"Q3441707"},addTags:{brand:"Ronde des Pains","brand:wikidata":"Q3441707","brand:wikipedia":"fr:Ronde des Pains",name:"Ronde des Pains",shop:"bakery"},removeTags:{brand:"Ronde des Pains","brand:wikidata":"Q3441707","brand:wikipedia":"fr:Ronde des Pains",name:"Ronde des Pains",shop:"bakery"},matchScore:2,suggestion:true},"shop/bakery/Sehne":{name:"Sehne",icon:"maki-bakery",geometry:["point","area"],tags:{shop:"bakery","brand:wikidata":"Q1314761"},addTags:{brand:"Sehne","brand:wikidata":"Q1314761","brand:wikipedia":"de:Sehne Backwaren",name:"Sehne",shop:"bakery"},removeTags:{brand:"Sehne","brand:wikidata":"Q1314761","brand:wikipedia":"de:Sehne Backwaren",name:"Sehne",shop:"bakery"},matchScore:2,suggestion:true},"shop/bakery/Steinecke":{name:"Steinecke",icon:"maki-bakery",geometry:["point","area"],tags:{shop:"bakery","brand:wikidata":"Q57516278"},addTags:{brand:"Steinecke","brand:wikidata":"Q57516278",name:"Steinecke",shop:"bakery"},removeTags:{brand:"Steinecke","brand:wikidata":"Q57516278",name:"Steinecke",shop:"bakery"},matchScore:2,suggestion:true},"shop/bakery/Ströck":{name:"Ströck",icon:"maki-bakery",geometry:["point","area"],tags:{shop:"bakery","brand:wikidata":"Q2357607"},addTags:{brand:"Ströck","brand:wikidata":"Q2357607","brand:wikipedia":"de:Ströck-Brot",name:"Ströck",shop:"bakery"},removeTags:{brand:"Ströck","brand:wikidata":"Q2357607","brand:wikipedia":"de:Ströck-Brot",name:"Ströck",shop:"bakery"},matchScore:2,suggestion:true},"shop/bakery/Wiener Feinbäcker":{name:"Wiener Feinbäcker",icon:"maki-bakery",geometry:["point","area"],tags:{shop:"bakery","brand:wikidata":"Q15854357"},addTags:{brand:"Wiener Feinbäcker","brand:wikidata":"Q15854357","brand:wikipedia":"de:Wiener Feinbäckerei Heberer",name:"Wiener Feinbäcker",shop:"bakery"},removeTags:{brand:"Wiener Feinbäcker","brand:wikidata":"Q15854357","brand:wikipedia":"de:Wiener Feinbäckerei Heberer",name:"Wiener Feinbäcker",shop:"bakery"},matchScore:2,suggestion:true},"shop/bakery/von Allwörden":{name:"von Allwörden",icon:"maki-bakery",geometry:["point","area"],tags:{shop:"bakery","brand:wikidata":"Q60411349"},addTags:{brand:"von Allwörden","brand:wikidata":"Q60411349","brand:wikipedia":"nds:Heinrich von Allwörden GmbH",name:"von Allwörden",shop:"bakery"},removeTags:{brand:"von Allwörden","brand:wikidata":"Q60411349","brand:wikipedia":"nds:Heinrich von Allwörden GmbH",name:"von Allwörden",shop:"bakery"},matchScore:2,suggestion:true},"shop/bakery/뚜레쥬르":{name:"뚜레쥬르",icon:"maki-bakery",geometry:["point","area"],tags:{shop:"bakery","brand:wikidata":"Q3535609"},addTags:{brand:"뚜레쥬르","brand:en":"Tous Les Jours","brand:wikidata":"Q3535609","brand:wikipedia":"ko:뚜레쥬르",name:"뚜레쥬르","name:en":"Tous Les Jours",shop:"bakery"},removeTags:{brand:"뚜레쥬르","brand:en":"Tous Les Jours","brand:wikidata":"Q3535609","brand:wikipedia":"ko:뚜레쥬르",name:"뚜레쥬르","name:en":"Tous Les Jours",shop:"bakery"},matchScore:2,suggestion:true},"shop/beauty/Bath & Body Works":{name:"Bath & Body Works",icon:"maki-shop",geometry:["point","area"],tags:{shop:"beauty","brand:wikidata":"Q810773"},addTags:{brand:"Bath & Body Works","brand:wikidata":"Q810773","brand:wikipedia":"en:Bath & Body Works",name:"Bath & Body Works",shop:"beauty"},removeTags:{brand:"Bath & Body Works","brand:wikidata":"Q810773","brand:wikipedia":"en:Bath & Body Works",name:"Bath & Body Works",shop:"beauty"},matchScore:2,suggestion:true},"shop/beauty/European Wax Center":{name:"European Wax Center",icon:"maki-shop",geometry:["point","area"],tags:{shop:"beauty","brand:wikidata":"Q5413426"},addTags:{brand:"European Wax Center","brand:wikidata":"Q5413426","brand:wikipedia":"en:European Wax Center",name:"European Wax Center",shop:"beauty"},removeTags:{brand:"European Wax Center","brand:wikidata":"Q5413426","brand:wikipedia":"en:European Wax Center",name:"European Wax Center",shop:"beauty"},matchScore:2,suggestion:true},"shop/beauty/Ulta Beauty":{name:"Ulta Beauty",icon:"maki-shop",geometry:["point","area"],tags:{shop:"beauty","brand:wikidata":"Q7880076"},addTags:{brand:"Ulta Beauty","brand:wikidata":"Q7880076","brand:wikipedia":"en:Ulta Beauty",name:"Ulta Beauty",shop:"beauty"},removeTags:{brand:"Ulta Beauty","brand:wikidata":"Q7880076","brand:wikipedia":"en:Ulta Beauty",name:"Ulta Beauty",shop:"beauty"},matchScore:2,suggestion:true},"shop/beauty/Yves Rocher":{name:"Yves Rocher",icon:"maki-shop",geometry:["point","area"],tags:{shop:"beauty","brand:wikidata":"Q28496595"},addTags:{brand:"Yves Rocher","brand:wikidata":"Q28496595","brand:wikipedia":"fr:Yves Rocher (entreprise)",name:"Yves Rocher",shop:"beauty"},removeTags:{brand:"Yves Rocher","brand:wikidata":"Q28496595","brand:wikipedia":"fr:Yves Rocher (entreprise)",name:"Yves Rocher",shop:"beauty"},matchScore:2,suggestion:true},"shop/bed/Dreams":{name:"Dreams",icon:"maki-lodging",geometry:["point","area"],tags:{shop:"bed","brand:wikidata":"Q5306688"},addTags:{brand:"Dreams","brand:wikidata":"Q5306688","brand:wikipedia":"en:Dreams (bed retailer)",name:"Dreams",shop:"bed"},removeTags:{brand:"Dreams","brand:wikidata":"Q5306688","brand:wikipedia":"en:Dreams (bed retailer)",name:"Dreams",shop:"bed"},matchScore:2,suggestion:true},"shop/bed/Matratzen Concord":{name:"Matratzen Concord",icon:"maki-lodging",geometry:["point","area"],tags:{shop:"bed","brand:wikidata":"Q18629057"},addTags:{brand:"Matratzen Concord","brand:wikidata":"Q18629057","brand:wikipedia":"de:Matratzen Concord",name:"Matratzen Concord",shop:"bed"},removeTags:{brand:"Matratzen Concord","brand:wikidata":"Q18629057","brand:wikipedia":"de:Matratzen Concord",name:"Matratzen Concord",shop:"bed"},matchScore:2,suggestion:true},"shop/bed/Mattress Firm":{name:"Mattress Firm",icon:"maki-lodging",geometry:["point","area"],tags:{shop:"bed","brand:wikidata":"Q6791878"},addTags:{brand:"Mattress Firm","brand:wikidata":"Q6791878","brand:wikipedia":"en:Mattress Firm",name:"Mattress Firm",shop:"bed"},removeTags:{brand:"Mattress Firm","brand:wikidata":"Q6791878","brand:wikipedia":"en:Mattress Firm",name:"Mattress Firm",shop:"bed"},matchScore:2,suggestion:true},"shop/bed/Sleep Number":{name:"Sleep Number",icon:"maki-lodging",geometry:["point","area"],tags:{shop:"bed","brand:wikidata":"Q7447640"},addTags:{brand:"Sleep Number","brand:wikidata":"Q7447640","brand:wikipedia":"en:Sleep Number",name:"Sleep Number",shop:"bed"},removeTags:{brand:"Sleep Number","brand:wikidata":"Q7447640","brand:wikipedia":"en:Sleep Number",name:"Sleep Number",shop:"bed"},matchScore:2,suggestion:true},"shop/bed/Sleepy's":{name:"Sleepy's",icon:"maki-lodging",geometry:["point","area"],tags:{shop:"bed","brand:wikidata":"Q17088336"},addTags:{brand:"Sleepy's","brand:wikidata":"Q17088336","brand:wikipedia":"en:Sleepy's",name:"Sleepy's",shop:"bed"},removeTags:{brand:"Sleepy's","brand:wikidata":"Q17088336","brand:wikipedia":"en:Sleepy's",name:"Sleepy's",shop:"bed"},matchScore:2,suggestion:true},"shop/beverages/Dursty":{name:"Dursty",icon:"maki-shop",geometry:["point","area"],tags:{shop:"beverages","brand:wikidata":"Q1267518"},addTags:{brand:"Dursty","brand:wikidata":"Q1267518","brand:wikipedia":"de:Dursty Getränkemärkte",name:"Dursty",shop:"beverages"},removeTags:{brand:"Dursty","brand:wikidata":"Q1267518","brand:wikipedia":"de:Dursty Getränkemärkte",name:"Dursty",shop:"beverages"},matchScore:2,suggestion:true},"shop/beverages/Edeka Getränkemarkt":{name:"Edeka Getränkemarkt",icon:"maki-shop",geometry:["point","area"],tags:{shop:"beverages","brand:wikidata":"Q57450576"},addTags:{brand:"Edeka Getränkemarkt","brand:wikidata":"Q57450576",name:"Edeka Getränkemarkt",shop:"beverages"},removeTags:{brand:"Edeka Getränkemarkt","brand:wikidata":"Q57450576",name:"Edeka Getränkemarkt",shop:"beverages"},matchScore:2,suggestion:true},"shop/beverages/Fristo Getränkemarkt":{name:"Fristo Getränkemarkt",icon:"maki-shop",geometry:["point","area"],tags:{shop:"beverages","brand:wikidata":"Q1465151"},addTags:{brand:"Fristo Getränkemarkt","brand:wikidata":"Q1465151","brand:wikipedia":"de:Fristo",name:"Fristo Getränkemarkt",shop:"beverages"},removeTags:{brand:"Fristo Getränkemarkt","brand:wikidata":"Q1465151","brand:wikipedia":"de:Fristo",name:"Fristo Getränkemarkt",shop:"beverages"},matchScore:2,suggestion:true},"shop/beverages/Getränke Hoffmann":{name:"Getränke Hoffmann",icon:"maki-shop",geometry:["point","area"],tags:{shop:"beverages","brand:wikidata":"Q19284021"},addTags:{brand:"Getränke Hoffmann","brand:wikidata":"Q19284021","brand:wikipedia":"de:Getränke Hoffmann",name:"Getränke Hoffmann",shop:"beverages"},removeTags:{brand:"Getränke Hoffmann","brand:wikidata":"Q19284021","brand:wikipedia":"de:Getränke Hoffmann",name:"Getränke Hoffmann",shop:"beverages"},matchScore:2,suggestion:true},"shop/beverages/Hol'ab":{name:"Hol'ab",icon:"maki-shop",geometry:["point","area"],tags:{shop:"beverages","brand:wikidata":"Q57557270"},addTags:{brand:"Hol'ab","brand:wikidata":"Q57557270",name:"Hol'ab",shop:"beverages"},removeTags:{brand:"Hol'ab","brand:wikidata":"Q57557270",name:"Hol'ab",shop:"beverages"},matchScore:2,suggestion:true},"shop/beverages/Orterer Getränkemarkt":{name:"Orterer Getränkemarkt",icon:"maki-shop",geometry:["point","area"],tags:{shop:"beverages","brand:wikidata":"Q23787118"},addTags:{brand:"Orterer Getränkemarkt","brand:wikidata":"Q23787118","brand:wikipedia":"de:Orterer Gruppe",name:"Orterer Getränkemarkt",shop:"beverages"},removeTags:{brand:"Orterer Getränkemarkt","brand:wikidata":"Q23787118","brand:wikipedia":"de:Orterer Gruppe",name:"Orterer Getränkemarkt",shop:"beverages"},matchScore:2,suggestion:true},"shop/beverages/Rewe Getränkemarkt":{name:"Rewe Getränkemarkt",icon:"maki-shop",geometry:["point","area"],tags:{shop:"beverages","brand:wikidata":"Q57519344"},addTags:{brand:"Rewe Getränkemarkt","brand:wikidata":"Q57519344",name:"Rewe Getränkemarkt",shop:"beverages"},removeTags:{brand:"Rewe Getränkemarkt","brand:wikidata":"Q57519344",name:"Rewe Getränkemarkt",shop:"beverages"},matchScore:2,suggestion:true},"shop/beverages/Trinkgut":{name:"Trinkgut",icon:"maki-shop",geometry:["point","area"],tags:{shop:"beverages","brand:wikidata":"Q2453627"},addTags:{brand:"Trinkgut","brand:wikidata":"Q2453627","brand:wikipedia":"de:Trinkgut",name:"Trinkgut",shop:"beverages"},removeTags:{brand:"Trinkgut","brand:wikidata":"Q2453627","brand:wikipedia":"de:Trinkgut",name:"Trinkgut",shop:"beverages"},matchScore:2,suggestion:true},"shop/beverages/清心福全":{name:"清心福全",icon:"maki-shop",geometry:["point","area"],tags:{shop:"beverages","brand:wikidata":"Q10391229"},addTags:{brand:"清心福全","brand:wikidata":"Q10391229","brand:wikipedia":"zh:清心福全冷飲站",name:"清心福全",shop:"beverages"},removeTags:{brand:"清心福全","brand:wikidata":"Q10391229","brand:wikipedia":"zh:清心福全冷飲站",name:"清心福全",shop:"beverages"},matchScore:2,suggestion:true},"shop/bicycle/Evans Cycles":{name:"Evans Cycles",icon:"maki-bicycle",geometry:["point","area"],tags:{shop:"bicycle","brand:wikidata":"Q5415901"},addTags:{brand:"Evans Cycles","brand:wikidata":"Q5415901","brand:wikipedia":"en:Evans Cycles",name:"Evans Cycles",shop:"bicycle"},removeTags:{brand:"Evans Cycles","brand:wikidata":"Q5415901","brand:wikipedia":"en:Evans Cycles",name:"Evans Cycles",shop:"bicycle"},matchScore:2,suggestion:true},"shop/bicycle/Fri BikeShop":{name:"Fri BikeShop",icon:"maki-bicycle",geometry:["point","area"],tags:{shop:"bicycle","brand:wikidata":"Q26721030"},addTags:{brand:"Fri BikeShop","brand:wikidata":"Q26721030",name:"Fri BikeShop",shop:"bicycle"},removeTags:{brand:"Fri BikeShop","brand:wikidata":"Q26721030",name:"Fri BikeShop",shop:"bicycle"},matchScore:2,suggestion:true},"shop/bicycle/サイクルベースあさひ":{name:"サイクルベースあさひ",icon:"maki-bicycle",geometry:["point","area"],tags:{shop:"bicycle","brand:wikidata":"Q11257202"},addTags:{brand:"サイクルベースあさひ","brand:wikidata":"Q11257202","brand:wikipedia":"ja:あさひ (企業)",name:"サイクルベースあさひ",shop:"bicycle"},removeTags:{brand:"サイクルベースあさひ","brand:wikidata":"Q11257202","brand:wikipedia":"ja:あさひ (企業)",name:"サイクルベースあさひ",shop:"bicycle"},matchScore:2,suggestion:true},"shop/bookmaker/Betfred":{name:"Betfred",icon:"maki-shop",geometry:["point","area"],tags:{shop:"bookmaker","brand:wikidata":"Q4897425"},addTags:{brand:"Betfred","brand:wikidata":"Q4897425","brand:wikipedia":"en:Betfred",name:"Betfred",shop:"bookmaker"},removeTags:{brand:"Betfred","brand:wikidata":"Q4897425","brand:wikipedia":"en:Betfred",name:"Betfred",shop:"bookmaker"},matchScore:2,suggestion:true},"shop/bookmaker/Coral":{name:"Coral",icon:"maki-shop",geometry:["point","area"],tags:{shop:"bookmaker","brand:wikidata":"Q54621344"},addTags:{brand:"Coral","brand:wikidata":"Q54621344","brand:wikipedia":"en:Coral (bookmaker)",name:"Coral",shop:"bookmaker"},removeTags:{brand:"Coral","brand:wikidata":"Q54621344","brand:wikipedia":"en:Coral (bookmaker)",name:"Coral",shop:"bookmaker"},matchScore:2,suggestion:true},"shop/bookmaker/Ladbrokes":{name:"Ladbrokes",icon:"maki-shop",geometry:["point","area"],tags:{shop:"bookmaker","brand:wikidata":"Q1799875"},addTags:{brand:"Ladbrokes","brand:wikidata":"Q1799875","brand:wikipedia":"en:Ladbrokes Coral",name:"Ladbrokes",shop:"bookmaker"},removeTags:{brand:"Ladbrokes","brand:wikidata":"Q1799875","brand:wikipedia":"en:Ladbrokes Coral",name:"Ladbrokes",shop:"bookmaker"},matchScore:2,suggestion:true},"shop/bookmaker/Paddy Power":{name:"Paddy Power",icon:"maki-shop",geometry:["point","area"],tags:{shop:"bookmaker","brand:wikidata":"Q3888718"},addTags:{brand:"Paddy Power","brand:wikidata":"Q3888718","brand:wikipedia":"en:Paddy Power",name:"Paddy Power",shop:"bookmaker"},removeTags:{brand:"Paddy Power","brand:wikidata":"Q3888718","brand:wikipedia":"en:Paddy Power",name:"Paddy Power",shop:"bookmaker"},matchScore:2,suggestion:true},"shop/bookmaker/Tipico":{name:"Tipico",icon:"maki-shop",geometry:["point","area"],tags:{shop:"bookmaker","brand:wikidata":"Q15851003"},addTags:{brand:"Tipico","brand:wikidata":"Q15851003","brand:wikipedia":"en:Tipico",name:"Tipico",shop:"bookmaker"},removeTags:{brand:"Tipico","brand:wikidata":"Q15851003","brand:wikipedia":"en:Tipico",name:"Tipico",shop:"bookmaker"},matchScore:2,suggestion:true},"shop/bookmaker/William Hill":{name:"William Hill",icon:"maki-shop",geometry:["point","area"],tags:{shop:"bookmaker","brand:wikidata":"Q4053147"},addTags:{brand:"William Hill","brand:wikidata":"Q4053147","brand:wikipedia":"en:William Hill (bookmaker)",name:"William Hill",shop:"bookmaker"},removeTags:{brand:"William Hill","brand:wikidata":"Q4053147","brand:wikipedia":"en:William Hill (bookmaker)",name:"William Hill",shop:"bookmaker"},matchScore:2,suggestion:true},"shop/bookmaker/ΟΠΑΠ":{name:"ΟΠΑΠ",icon:"maki-shop",geometry:["point","area"],tags:{shop:"bookmaker","brand:wikidata":"Q2007823"},addTags:{brand:"ΟΠΑΠ","brand:en":"OPAP","brand:wikidata":"Q2007823","brand:wikipedia":"en:OPAP",name:"ΟΠΑΠ","name:en":"OPAP",shop:"bookmaker"},removeTags:{brand:"ΟΠΑΠ","brand:en":"OPAP","brand:wikidata":"Q2007823","brand:wikipedia":"en:OPAP",name:"ΟΠΑΠ","name:en":"OPAP",shop:"bookmaker"},matchScore:2,suggestion:true},"shop/bookmaker/Фонбет":{name:"Фонбет",icon:"maki-shop",geometry:["point","area"],tags:{shop:"bookmaker","brand:wikidata":"Q49137910"},addTags:{brand:"Фонбет","brand:wikidata":"Q49137910","brand:wikipedia":"ru:Фонбет",name:"Фонбет",shop:"bookmaker"},removeTags:{brand:"Фонбет","brand:wikidata":"Q49137910","brand:wikipedia":"ru:Фонбет",name:"Фонбет",shop:"bookmaker"},matchScore:2,suggestion:true},"shop/books/Akademibokhandeln":{name:"Akademibokhandeln",icon:"maki-shop",geometry:["point","area"],tags:{shop:"books","brand:wikidata":"Q10403918"},addTags:{brand:"Akademibokhandeln","brand:wikidata":"Q10403918","brand:wikipedia":"sv:Akademibokhandeln",name:"Akademibokhandeln",shop:"books"},removeTags:{brand:"Akademibokhandeln","brand:wikidata":"Q10403918","brand:wikipedia":"sv:Akademibokhandeln",name:"Akademibokhandeln",shop:"books"},matchScore:2,suggestion:true},"shop/books/Barnes & Noble":{name:"Barnes & Noble",icon:"maki-shop",geometry:["point","area"],tags:{shop:"books","brand:wikidata":"Q795454"},addTags:{brand:"Barnes & Noble","brand:wikidata":"Q795454","brand:wikipedia":"en:Barnes & Noble",name:"Barnes & Noble",shop:"books"},removeTags:{brand:"Barnes & Noble","brand:wikidata":"Q795454","brand:wikipedia":"en:Barnes & Noble",name:"Barnes & Noble",shop:"books"},matchScore:2,suggestion:true},"shop/books/Bruna":{name:"Bruna",icon:"maki-shop",geometry:["point","area"],tags:{shop:"books","brand:wikidata":"Q3317555"},addTags:{brand:"Bruna","brand:wikidata":"Q3317555","brand:wikipedia":"nl:Bruna (retail chain)",name:"Bruna",shop:"books"},removeTags:{brand:"Bruna","brand:wikidata":"Q3317555","brand:wikipedia":"nl:Bruna (retail chain)",name:"Bruna",shop:"books"},matchScore:2,suggestion:true},"shop/books/Chapters":{name:"Chapters",icon:"maki-shop",geometry:["point","area"],tags:{shop:"books","brand:wikidata":"Q5073540"},addTags:{brand:"Chapters","brand:wikidata":"Q5073540","brand:wikipedia":"en:Chapters",name:"Chapters",shop:"books"},removeTags:{brand:"Chapters","brand:wikidata":"Q5073540","brand:wikipedia":"en:Chapters",name:"Chapters",shop:"books"},matchScore:2,suggestion:true},"shop/books/Empik":{name:"Empik",icon:"maki-shop",geometry:["point","area"],tags:{shop:"books","brand:wikidata":"Q3045978"},addTags:{brand:"Empik","brand:wikidata":"Q3045978","brand:wikipedia":"en:Empik",name:"Empik",shop:"books"},removeTags:{brand:"Empik","brand:wikidata":"Q3045978","brand:wikipedia":"en:Empik",name:"Empik",shop:"books"},matchScore:2,suggestion:true},"shop/books/Fnac":{name:"Fnac",icon:"maki-shop",geometry:["point","area"],tags:{shop:"books","brand:wikidata":"Q676585"},addTags:{brand:"Fnac","brand:wikidata":"Q676585","brand:wikipedia":"en:Fnac",name:"Fnac",shop:"books"},removeTags:{brand:"Fnac","brand:wikidata":"Q676585","brand:wikipedia":"en:Fnac",name:"Fnac",shop:"books"},matchScore:2,suggestion:true},"shop/books/Half Price Books":{name:"Half Price Books",icon:"maki-shop",geometry:["point","area"],tags:{shop:"books","brand:wikidata":"Q5641744"},addTags:{brand:"Half Price Books","brand:wikidata":"Q5641744","brand:wikipedia":"en:Half Price Books",name:"Half Price Books",shop:"books"},removeTags:{brand:"Half Price Books","brand:wikidata":"Q5641744","brand:wikipedia":"en:Half Price Books",name:"Half Price Books",shop:"books"},matchScore:2,suggestion:true},"shop/books/Hugendubel":{name:"Hugendubel",icon:"maki-shop",geometry:["point","area"],tags:{shop:"books","brand:wikidata":"Q1634142"},addTags:{brand:"Hugendubel","brand:wikidata":"Q1634142","brand:wikipedia":"en:Hugendubel",name:"Hugendubel",shop:"books"},removeTags:{brand:"Hugendubel","brand:wikidata":"Q1634142","brand:wikipedia":"en:Hugendubel",name:"Hugendubel",shop:"books"},matchScore:2,suggestion:true},"shop/books/National Book Store":{name:"National Book Store",icon:"maki-shop",geometry:["point","area"],tags:{shop:"books","brand:wikidata":"Q6971094"},addTags:{brand:"National Book Store","brand:wikidata":"Q6971094","brand:wikipedia":"en:National Book Store",name:"National Book Store",shop:"books"},removeTags:{brand:"National Book Store","brand:wikidata":"Q6971094","brand:wikipedia":"en:National Book Store",name:"National Book Store",shop:"books"},matchScore:2,suggestion:true},"shop/books/Standaard Boekhandel":{name:"Standaard Boekhandel",icon:"maki-shop",geometry:["point","area"],tags:{shop:"books","brand:wikidata":"Q3496554"},addTags:{brand:"Standaard Boekhandel","brand:wikidata":"Q3496554","brand:wikipedia":"nl:Standaard Boekhandel",name:"Standaard Boekhandel",shop:"books"},removeTags:{brand:"Standaard Boekhandel","brand:wikidata":"Q3496554","brand:wikipedia":"nl:Standaard Boekhandel",name:"Standaard Boekhandel",shop:"books"},matchScore:2,suggestion:true},"shop/books/TSUTAYA":{name:"TSUTAYA",icon:"maki-shop",geometry:["point","area"],tags:{shop:"books","brand:wikidata":"Q5193457"},addTags:{brand:"TSUTAYA","brand:wikidata":"Q5193457","brand:wikipedia":"ja:カルチュア・コンビニエンス・クラブ",name:"TSUTAYA",shop:"books"},removeTags:{brand:"TSUTAYA","brand:wikidata":"Q5193457","brand:wikipedia":"ja:カルチュア・コンビニエンス・クラブ",name:"TSUTAYA",shop:"books"},matchScore:2,suggestion:true},"shop/books/Thalia":{name:"Thalia",icon:"maki-shop",geometry:["point","area"],tags:{shop:"books","brand:wikidata":"Q2408854"},addTags:{brand:"Thalia","brand:wikidata":"Q2408854","brand:wikipedia":"de:Thalia Bücher",name:"Thalia",shop:"books"},removeTags:{brand:"Thalia","brand:wikidata":"Q2408854","brand:wikipedia":"de:Thalia Bücher",name:"Thalia",shop:"books"},matchScore:2,suggestion:true},"shop/books/The Works":{name:"The Works",icon:"maki-shop",geometry:["point","area"],tags:{shop:"books","brand:wikidata":"Q7775853"},addTags:{brand:"The Works","brand:wikidata":"Q7775853","brand:wikipedia":"en:The Works (retailer)",name:"The Works",shop:"books"},removeTags:{brand:"The Works","brand:wikidata":"Q7775853","brand:wikipedia":"en:The Works (retailer)",name:"The Works",shop:"books"},matchScore:2,suggestion:true},"shop/books/Waterstones":{name:"Waterstones",icon:"maki-shop",geometry:["point","area"],tags:{shop:"books","brand:wikidata":"Q151779"},addTags:{brand:"Waterstones","brand:wikidata":"Q151779","brand:wikipedia":"en:Waterstones",name:"Waterstones",shop:"books"},removeTags:{brand:"Waterstones","brand:wikidata":"Q151779","brand:wikipedia":"en:Waterstones",name:"Waterstones",shop:"books"},matchScore:2,suggestion:true},"shop/books/Weltbild":{name:"Weltbild",icon:"maki-shop",geometry:["point","area"],tags:{shop:"books","brand:wikidata":"Q883522"},addTags:{brand:"Weltbild","brand:wikidata":"Q883522","brand:wikipedia":"en:Weltbild Publishing Group",name:"Weltbild",shop:"books"},removeTags:{brand:"Weltbild","brand:wikidata":"Q883522","brand:wikipedia":"en:Weltbild Publishing Group",name:"Weltbild",shop:"books"},matchScore:2,suggestion:true},"shop/books/Буквоед":{name:"Буквоед",icon:"maki-shop",geometry:["point","area"],tags:{shop:"books","brand:wikidata":"Q4098549"},addTags:{brand:"Буквоед","brand:wikidata":"Q4098549","brand:wikipedia":"ru:Буквоед",name:"Буквоед",shop:"books"},removeTags:{brand:"Буквоед","brand:wikidata":"Q4098549","brand:wikipedia":"ru:Буквоед",name:"Буквоед",shop:"books"},matchScore:2,suggestion:true},"shop/books/Читай-город":{name:"Читай-город",icon:"maki-shop",geometry:["point","area"],tags:{shop:"books","brand:wikidata":"Q4516645"},addTags:{brand:"Читай-город","brand:wikidata":"Q4516645","brand:wikipedia":"ru:Читай-город",name:"Читай-город",shop:"books"},removeTags:{brand:"Читай-город","brand:wikidata":"Q4516645","brand:wikipedia":"ru:Читай-город",name:"Читай-город",shop:"books"},matchScore:2,suggestion:true},"shop/books/ブックオフ":{name:"ブックオフ",icon:"maki-shop",geometry:["point","area"],tags:{shop:"books","brand:wikidata":"Q893011"},addTags:{brand:"ブックオフ","brand:en":"Book Off","brand:wikidata":"Q893011","brand:wikipedia":"en:Book Off",name:"ブックオフ","name:en":"Book Off",shop:"books"},removeTags:{brand:"ブックオフ","brand:en":"Book Off","brand:wikidata":"Q893011","brand:wikipedia":"en:Book Off",name:"ブックオフ","name:en":"Book Off",shop:"books"},matchScore:2,suggestion:true},"shop/books/新华书店":{name:"新华书店",icon:"maki-shop",geometry:["point","area"],tags:{shop:"books","brand:wikidata":"Q6124193"},addTags:{brand:"新华书店","brand:en":"Xinhua Bookstore","brand:wikidata":"Q6124193","brand:wikipedia":"en:Xinhua Bookstore",name:"新华书店","name:en":"Xinhua Bookstore",shop:"books"},removeTags:{brand:"新华书店","brand:en":"Xinhua Bookstore","brand:wikidata":"Q6124193","brand:wikipedia":"en:Xinhua Bookstore",name:"新华书店","name:en":"Xinhua Bookstore",shop:"books"},matchScore:2,suggestion:true},"shop/butcher/Coqivoire":{name:"Coqivoire",icon:"maki-slaughterhouse",geometry:["point","area"],tags:{shop:"butcher","brand:wikidata":"Q60183284"},addTags:{brand:"Coqivoire","brand:wikidata":"Q60183284",butcher:"poultry",name:"Coqivoire",shop:"butcher"},removeTags:{brand:"Coqivoire","brand:wikidata":"Q60183284",butcher:"poultry",name:"Coqivoire",shop:"butcher"},matchScore:2,suggestion:true},"shop/butcher/Foani":{name:"Foani",icon:"maki-slaughterhouse",geometry:["point","area"],tags:{shop:"butcher","brand:wikidata":"Q60183335"},addTags:{brand:"Foani","brand:wikidata":"Q60183335",butcher:"poultry",name:"Foani",shop:"butcher"},removeTags:{brand:"Foani","brand:wikidata":"Q60183335",butcher:"poultry",name:"Foani",shop:"butcher"},matchScore:2,suggestion:true},"shop/butcher/Vinzenzmurr":{name:"Vinzenzmurr",icon:"maki-slaughterhouse",geometry:["point","area"],tags:{shop:"butcher","brand:wikidata":"Q2527361"},addTags:{brand:"Vinzenzmurr","brand:wikidata":"Q2527361","brand:wikipedia":"de:Vinzenzmurr",name:"Vinzenzmurr",shop:"butcher"},removeTags:{brand:"Vinzenzmurr","brand:wikidata":"Q2527361","brand:wikipedia":"de:Vinzenzmurr",name:"Vinzenzmurr",shop:"butcher"},matchScore:2,suggestion:true},"shop/butcher/Великолукский мясокомбинат":{name:"Великолукский мясокомбинат",icon:"maki-slaughterhouse",geometry:["point","area"],tags:{shop:"butcher","brand:wikidata":"Q18401767"},addTags:{brand:"Великолукский мясокомбинат","brand:wikidata":"Q18401767","brand:wikipedia":"ru:Великолукский мясокомбинат",name:"Великолукский мясокомбинат",shop:"butcher"},removeTags:{brand:"Великолукский мясокомбинат","brand:wikidata":"Q18401767","brand:wikipedia":"ru:Великолукский мясокомбинат",name:"Великолукский мясокомбинат",shop:"butcher"},matchScore:2,suggestion:true},"shop/butcher/Родинна ковбаска":{name:"Родинна ковбаска",icon:"maki-slaughterhouse",geometry:["point","area"],tags:{shop:"butcher","brand:wikidata":"Q30969660"},addTags:{brand:"Родинна ковбаска","brand:en":"Rodynna-kovbaska","brand:wikidata":"Q30969660","brand:wikipedia":"uk:ТзОВ «Барком»",name:"Родинна ковбаска","name:en":"Rodynna-kovbaska",shop:"butcher"},removeTags:{brand:"Родинна ковбаска","brand:en":"Rodynna-kovbaska","brand:wikidata":"Q30969660","brand:wikipedia":"uk:ТзОВ «Барком»",name:"Родинна ковбаска","name:en":"Rodynna-kovbaska",shop:"butcher"},matchScore:2,suggestion:true},"shop/car_parts/Advance Auto Parts":{name:"Advance Auto Parts",icon:"maki-car",geometry:["point","area"],tags:{shop:"car_parts","brand:wikidata":"Q4686051"},addTags:{brand:"Advance Auto Parts","brand:wikidata":"Q4686051","brand:wikipedia":"en:Advance Auto Parts",name:"Advance Auto Parts",shop:"car_parts"},removeTags:{brand:"Advance Auto Parts","brand:wikidata":"Q4686051","brand:wikipedia":"en:Advance Auto Parts",name:"Advance Auto Parts",shop:"car_parts"},matchScore:2,suggestion:true},"shop/car_parts/AutoZone":{name:"AutoZone",icon:"maki-car",geometry:["point","area"],tags:{shop:"car_parts","brand:wikidata":"Q4826087"},addTags:{brand:"AutoZone","brand:wikidata":"Q4826087","brand:wikipedia":"en:AutoZone",name:"AutoZone",shop:"car_parts"},removeTags:{brand:"AutoZone","brand:wikidata":"Q4826087","brand:wikipedia":"en:AutoZone",name:"AutoZone",shop:"car_parts"},matchScore:2,suggestion:true},"shop/car_parts/Halfords":{name:"Halfords",icon:"maki-car",geometry:["point","area"],tags:{shop:"car_parts","brand:wikidata":"Q3398786"},addTags:{brand:"Halfords","brand:wikidata":"Q3398786","brand:wikipedia":"en:Halfords",name:"Halfords","service:bicycle:retail":"yes",shop:"car_parts"},removeTags:{brand:"Halfords","brand:wikidata":"Q3398786","brand:wikipedia":"en:Halfords",name:"Halfords","service:bicycle:retail":"yes",shop:"car_parts"},matchScore:2,suggestion:true},"shop/car_parts/NAPA Auto Parts":{name:"NAPA Auto Parts",icon:"maki-car",geometry:["point","area"],tags:{shop:"car_parts","brand:wikidata":"Q6970842"},addTags:{brand:"NAPA Auto Parts","brand:wikidata":"Q6970842","brand:wikipedia":"en:National Automotive Parts Association",name:"NAPA Auto Parts",shop:"car_parts"},removeTags:{brand:"NAPA Auto Parts","brand:wikidata":"Q6970842","brand:wikipedia":"en:National Automotive Parts Association",name:"NAPA Auto Parts",shop:"car_parts"},matchScore:2,suggestion:true},"shop/car_parts/O'Reilly Auto Parts":{name:"O'Reilly Auto Parts",icon:"maki-car",geometry:["point","area"],tags:{shop:"car_parts","brand:wikidata":"Q7071951"},addTags:{brand:"O'Reilly Auto Parts","brand:wikidata":"Q7071951","brand:wikipedia":"en:O'Reilly Auto Parts",name:"O'Reilly Auto Parts",shop:"car_parts"},removeTags:{brand:"O'Reilly Auto Parts","brand:wikidata":"Q7071951","brand:wikipedia":"en:O'Reilly Auto Parts",name:"O'Reilly Auto Parts",shop:"car_parts"},matchScore:2,suggestion:true},"shop/car_parts/Repco":{name:"Repco",icon:"maki-car",geometry:["point","area"],tags:{shop:"car_parts","brand:wikidata":"Q173425"},addTags:{brand:"Repco","brand:wikidata":"Q173425","brand:wikipedia":"en:Repco",name:"Repco",shop:"car_parts"},removeTags:{brand:"Repco","brand:wikidata":"Q173425","brand:wikipedia":"en:Repco",name:"Repco",shop:"car_parts"},matchScore:2,suggestion:true},"shop/car_parts/Supercheap Auto":{name:"Supercheap Auto",icon:"maki-car",geometry:["point","area"],tags:{shop:"car_parts","brand:wikidata":"Q7643119"},addTags:{brand:"Supercheap Auto","brand:wikidata":"Q7643119","brand:wikipedia":"en:Supercheap Auto",name:"Supercheap Auto",shop:"car_parts"},removeTags:{brand:"Supercheap Auto","brand:wikidata":"Q7643119","brand:wikipedia":"en:Supercheap Auto",name:"Supercheap Auto",shop:"car_parts"},matchScore:2,suggestion:true},"shop/car_parts/Автомир":{name:"Автомир",icon:"maki-car",geometry:["point","area"],tags:{shop:"car_parts","brand:wikidata":"Q4056321"},addTags:{brand:"Автомир","brand:wikidata":"Q4056321","brand:wikipedia":"ru:Автомир (автодилер)",name:"Автомир",shop:"car_parts"},removeTags:{brand:"Автомир","brand:wikidata":"Q4056321","brand:wikipedia":"ru:Автомир (автодилер)",name:"Автомир",shop:"car_parts"},matchScore:2,suggestion:true},"shop/car_parts/イエローハット":{name:"イエローハット",icon:"maki-car",geometry:["point","area"],tags:{shop:"car_parts","brand:wikidata":"Q11285915"},addTags:{brand:"イエローハット","brand:wikidata":"Q11285915","brand:wikipedia":"ja:イエローハット",name:"イエローハット",shop:"car_parts"},removeTags:{brand:"イエローハット","brand:wikidata":"Q11285915","brand:wikipedia":"ja:イエローハット",name:"イエローハット",shop:"car_parts"},matchScore:2,suggestion:true},"shop/car_parts/オートバックス":{name:"オートバックス",icon:"maki-car",geometry:["point","area"],tags:{shop:"car_parts","brand:wikidata":"Q7886426"},addTags:{brand:"オートバックス","brand:wikidata":"Q7886426","brand:wikipedia":"ja:オートバックスセブン",name:"オートバックス",shop:"car_parts"},removeTags:{brand:"オートバックス","brand:wikidata":"Q7886426","brand:wikipedia":"ja:オートバックスセブン",name:"オートバックス",shop:"car_parts"},matchScore:2,suggestion:true},"shop/car_parts/タイヤ館":{name:"タイヤ館",icon:"maki-car",geometry:["point","area"],tags:{shop:"car_parts","brand:wikidata":"Q11315808"},addTags:{brand:"タイヤ館","brand:wikidata":"Q11315808","brand:wikipedia":"ja:タイヤ館",name:"タイヤ館",shop:"car_parts"},removeTags:{brand:"タイヤ館","brand:wikidata":"Q11315808","brand:wikipedia":"ja:タイヤ館",name:"タイヤ館",shop:"car_parts"},matchScore:2,suggestion:true},"shop/car_repair/A.T.U":{name:"A.T.U",icon:"maki-car-repair",geometry:["point","area"],tags:{shop:"car_repair","brand:wikidata":"Q784721"},addTags:{brand:"A.T.U","brand:wikidata":"Q784721","brand:wikipedia":"de:Auto-Teile-Unger",name:"A.T.U",shop:"car_repair"},removeTags:{brand:"A.T.U","brand:wikidata":"Q784721","brand:wikipedia":"de:Auto-Teile-Unger",name:"A.T.U",shop:"car_repair"},matchScore:2,suggestion:true},"shop/car_repair/ATS Euromaster":{name:"ATS Euromaster",icon:"maki-car-repair",geometry:["point","area"],tags:{shop:"car_repair","brand:wikidata":"Q4654920"},addTags:{brand:"ATS Euromaster","brand:wikidata":"Q4654920","brand:wikipedia":"en:ATS Euromaster",name:"ATS Euromaster",shop:"car_repair"},removeTags:{brand:"ATS Euromaster","brand:wikidata":"Q4654920","brand:wikipedia":"en:ATS Euromaster",name:"ATS Euromaster",shop:"car_repair"},matchScore:2,suggestion:true},"shop/car_repair/Bosch Car Service":{name:"Bosch Car Service",icon:"maki-car-repair",geometry:["point","area"],tags:{shop:"car_repair","brand:wikidata":"Q234021"},addTags:{brand:"Bosch Car Service","brand:wikidata":"Q234021","brand:wikipedia":"de:Robert Bosch GmbH",name:"Bosch Car Service",shop:"car_repair"},removeTags:{brand:"Bosch Car Service","brand:wikidata":"Q234021","brand:wikipedia":"de:Robert Bosch GmbH",name:"Bosch Car Service",shop:"car_repair"},matchScore:2,suggestion:true},"shop/car_repair/Carglass":{name:"Carglass",icon:"maki-car-repair",geometry:["point","area"],tags:{shop:"car_repair","brand:wikidata":"Q1035997"},addTags:{brand:"Carglass","brand:wikidata":"Q1035997","brand:wikipedia":"de:Carglass",name:"Carglass",shop:"car_repair"},removeTags:{brand:"Carglass","brand:wikidata":"Q1035997","brand:wikipedia":"de:Carglass",name:"Carglass",shop:"car_repair"},matchScore:2,suggestion:true},"shop/car_repair/Feu Vert":{name:"Feu Vert",icon:"maki-car-repair",geometry:["point","area"],tags:{shop:"car_repair","brand:wikidata":"Q3070922"},addTags:{brand:"Feu Vert","brand:wikidata":"Q3070922","brand:wikipedia":"fr:Feu Vert (entreprise)",name:"Feu Vert",shop:"car_repair"},removeTags:{brand:"Feu Vert","brand:wikidata":"Q3070922","brand:wikipedia":"fr:Feu Vert (entreprise)",name:"Feu Vert",shop:"car_repair"},matchScore:2,suggestion:true},"shop/car_repair/Firestone":{name:"Firestone",icon:"maki-car-repair",geometry:["point","area"],tags:{shop:"car_repair","brand:wikidata":"Q420837"},addTags:{brand:"Firestone","brand:wikidata":"Q420837","brand:wikipedia":"en:Firestone Tire and Rubber Company",name:"Firestone",shop:"car_repair"},removeTags:{brand:"Firestone","brand:wikidata":"Q420837","brand:wikipedia":"en:Firestone Tire and Rubber Company",name:"Firestone",shop:"car_repair"},matchScore:2,suggestion:true},"shop/car_repair/Ford":{name:"Ford",icon:"maki-car-repair",geometry:["point","area"],tags:{shop:"car_repair","brand:wikidata":"Q44294"},addTags:{brand:"Ford","brand:wikidata":"Q44294","brand:wikipedia":"en:Ford Motor Company",name:"Ford",shop:"car_repair"},removeTags:{brand:"Ford","brand:wikidata":"Q44294","brand:wikipedia":"en:Ford Motor Company",name:"Ford",shop:"car_repair"},matchScore:2,suggestion:true},"shop/car_repair/Goodyear":{name:"Goodyear",icon:"maki-car-repair",geometry:["point","area"],tags:{shop:"car_repair","brand:wikidata":"Q620875"},addTags:{brand:"Goodyear","brand:wikidata":"Q620875","brand:wikipedia":"en:Goodyear Tire and Rubber Company",name:"Goodyear",shop:"car_repair"},removeTags:{brand:"Goodyear","brand:wikidata":"Q620875","brand:wikipedia":"en:Goodyear Tire and Rubber Company",name:"Goodyear",shop:"car_repair"},matchScore:2,suggestion:true},"shop/car_repair/Grease Monkey":{name:"Grease Monkey",icon:"maki-car-repair",geometry:["point","area"],tags:{shop:"car_repair","brand:wikidata":"Q5598563"},addTags:{brand:"Grease Monkey","brand:wikidata":"Q5598563","brand:wikipedia":"en:Grease Monkey (business)",name:"Grease Monkey",shop:"car_repair"},removeTags:{brand:"Grease Monkey","brand:wikidata":"Q5598563","brand:wikipedia":"en:Grease Monkey (business)",name:"Grease Monkey",shop:"car_repair"},matchScore:2,suggestion:true},"shop/car_repair/Halfords Autocentre":{name:"Halfords Autocentre",icon:"maki-car-repair",geometry:["point","area"],tags:{shop:"car_repair","brand:wikidata":"Q5641894"},addTags:{brand:"Halfords Auocentre","brand:wikidata":"Q5641894","brand:wikipedia":"en:Halfords Autocentre",name:"Halfords Autocentre",shop:"car_repair"},removeTags:{brand:"Halfords Auocentre","brand:wikidata":"Q5641894","brand:wikipedia":"en:Halfords Autocentre",name:"Halfords Autocentre",shop:"car_repair"},matchScore:2,suggestion:true},"shop/car_repair/Jiffy Lube":{name:"Jiffy Lube",icon:"maki-car-repair",geometry:["point","area"],tags:{shop:"car_repair","brand:wikidata":"Q6192247"},addTags:{brand:"Jiffy Lube","brand:wikidata":"Q6192247","brand:wikipedia":"en:Jiffy Lube",name:"Jiffy Lube",shop:"car_repair"},removeTags:{brand:"Jiffy Lube","brand:wikidata":"Q6192247","brand:wikipedia":"en:Jiffy Lube",name:"Jiffy Lube",shop:"car_repair"},matchScore:2,suggestion:true},"shop/car_repair/Kwik Fit":{name:"Kwik Fit",icon:"maki-car-repair",geometry:["point","area"],tags:{shop:"car_repair","brand:wikidata":"Q958053"},addTags:{brand:"Kwik Fit","brand:wikidata":"Q958053","brand:wikipedia":"en:Kwik Fit",name:"Kwik Fit",shop:"car_repair"},removeTags:{brand:"Kwik Fit","brand:wikidata":"Q958053","brand:wikipedia":"en:Kwik Fit",name:"Kwik Fit",shop:"car_repair"},matchScore:2,suggestion:true},"shop/car_repair/Meineke":{name:"Meineke",icon:"maki-car-repair",geometry:["point","area"],tags:{shop:"car_repair","brand:wikidata":"Q6810159"},addTags:{brand:"Meineke","brand:wikidata":"Q6810159","brand:wikipedia":"en:Meineke Car Care Centers",name:"Meineke",shop:"car_repair"},removeTags:{brand:"Meineke","brand:wikidata":"Q6810159","brand:wikipedia":"en:Meineke Car Care Centers",name:"Meineke",shop:"car_repair"},matchScore:2,suggestion:true},"shop/car_repair/Mekonomen":{name:"Mekonomen",icon:"maki-car-repair",geometry:["point","area"],tags:{shop:"car_repair","brand:wikidata":"Q10580079"},addTags:{brand:"Mekonomen","brand:wikidata":"Q10580079","brand:wikipedia":"sv:Mekonomen",name:"Mekonomen",shop:"car_repair"},removeTags:{brand:"Mekonomen","brand:wikidata":"Q10580079","brand:wikipedia":"sv:Mekonomen",name:"Mekonomen",shop:"car_repair"},matchScore:2,suggestion:true},"shop/car_repair/Midas":{name:"Midas",icon:"maki-car-repair",geometry:["point","area"],tags:{shop:"car_repair","brand:wikidata":"Q3312613"},addTags:{brand:"Midas","brand:wikidata":"Q3312613","brand:wikipedia":"en:Midas (automotive service)",name:"Midas",shop:"car_repair"},removeTags:{brand:"Midas","brand:wikidata":"Q3312613","brand:wikipedia":"en:Midas (automotive service)",name:"Midas",shop:"car_repair"},matchScore:2,suggestion:true},"shop/car_repair/Mr. Lube":{name:"Mr. Lube",icon:"maki-car-repair",geometry:["point","area"],tags:{shop:"car_repair","brand:wikidata":"Q17104067"},addTags:{brand:"Mr. Lube","brand:wikidata":"Q17104067","brand:wikipedia":"en:Mr. Lube",name:"Mr. Lube",shop:"car_repair"},removeTags:{brand:"Mr. Lube","brand:wikidata":"Q17104067","brand:wikipedia":"en:Mr. Lube",name:"Mr. Lube",shop:"car_repair"},matchScore:2,suggestion:true},"shop/car_repair/Norauto":{name:"Norauto",icon:"maki-car-repair",geometry:["point","area"],tags:{shop:"car_repair","brand:wikidata":"Q3317698"},addTags:{brand:"Norauto","brand:wikidata":"Q3317698","brand:wikipedia":"en:Mobivia Groupe",name:"Norauto",shop:"car_repair"},removeTags:{brand:"Norauto","brand:wikidata":"Q3317698","brand:wikipedia":"en:Mobivia Groupe",name:"Norauto",shop:"car_repair"},matchScore:2,suggestion:true},"shop/car_repair/Pep Boys":{name:"Pep Boys",icon:"maki-car-repair",geometry:["point","area"],tags:{shop:"car_repair","brand:wikidata":"Q3375007"},addTags:{brand:"Pep Boys","brand:wikidata":"Q3375007","brand:wikipedia":"en:Pep Boys",name:"Pep Boys",shop:"car_repair"},removeTags:{brand:"Pep Boys","brand:wikidata":"Q3375007","brand:wikipedia":"en:Pep Boys",name:"Pep Boys",shop:"car_repair"},matchScore:2,suggestion:true},"shop/car_repair/Peugeot":{name:"Peugeot",icon:"maki-car-repair",geometry:["point","area"],tags:{shop:"car_repair","brand:wikidata":"Q6742"},addTags:{brand:"Peugeot","brand:wikidata":"Q6742","brand:wikipedia":"en:Peugeot",name:"Peugeot",shop:"car_repair"},removeTags:{brand:"Peugeot","brand:wikidata":"Q6742","brand:wikipedia":"en:Peugeot",name:"Peugeot",shop:"car_repair"},matchScore:2,suggestion:true},"shop/car_repair/Point S":{name:"Point S",icon:"maki-car-repair",geometry:["point","area"],tags:{shop:"car_repair","brand:wikidata":"Q3393358"},addTags:{brand:"Point S","brand:wikidata":"Q3393358","brand:wikipedia":"fr:Point S",name:"Point S",shop:"car_repair"},removeTags:{brand:"Point S","brand:wikidata":"Q3393358","brand:wikipedia":"fr:Point S",name:"Point S",shop:"car_repair"},matchScore:2,suggestion:true},"shop/car_repair/Renault":{name:"Renault",icon:"maki-car-repair",geometry:["point","area"],tags:{shop:"car_repair","brand:wikidata":"Q6686"},addTags:{brand:"Renault","brand:wikidata":"Q6686","brand:wikipedia":"en:Renault",name:"Renault",shop:"car_repair"},removeTags:{brand:"Renault","brand:wikidata":"Q6686","brand:wikipedia":"en:Renault",name:"Renault",shop:"car_repair"},matchScore:2,suggestion:true},"shop/car_repair/Roady":{name:"Roady",icon:"maki-car-repair",geometry:["point","area"],tags:{shop:"car_repair","brand:wikidata":"Q3434112"},addTags:{brand:"Roady","brand:wikidata":"Q3434112","brand:wikipedia":"en:Roady (Mousquetaires)",name:"Roady",shop:"car_repair"},removeTags:{brand:"Roady","brand:wikidata":"Q3434112","brand:wikipedia":"en:Roady (Mousquetaires)",name:"Roady",shop:"car_repair"},matchScore:2,suggestion:true},"shop/car_repair/Safelite AutoGlass":{name:"Safelite AutoGlass",icon:"maki-car-repair",geometry:["point","area"],tags:{shop:"car_repair","brand:wikidata":"Q28797369"},addTags:{brand:"Safelite AutoGlass","brand:wikidata":"Q28797369","brand:wikipedia":"en:Safelite",operator:"Belron","operator:wikidata":"Q785614","operator:wikipedia":"en:Belron",name:"Safelite AutoGlass",shop:"car_repair"},removeTags:{brand:"Safelite AutoGlass","brand:wikidata":"Q28797369","brand:wikipedia":"en:Safelite",operator:"Belron","operator:wikidata":"Q785614","operator:wikipedia":"en:Belron",name:"Safelite AutoGlass",shop:"car_repair"},matchScore:2,suggestion:true},"shop/car_repair/Toyota":{name:"Toyota",icon:"maki-car-repair",geometry:["point","area"],tags:{shop:"car_repair","brand:wikidata":"Q53268"},addTags:{brand:"Toyota","brand:wikidata":"Q53268","brand:wikipedia":"en:Toyota",name:"Toyota",shop:"car_repair"},removeTags:{brand:"Toyota","brand:wikidata":"Q53268","brand:wikipedia":"en:Toyota",name:"Toyota",shop:"car_repair"},matchScore:2,suggestion:true},"shop/car_repair/Valvoline":{name:"Valvoline",icon:"maki-car-repair",geometry:["point","area"],tags:{shop:"car_repair","brand:wikidata":"Q7912852"},addTags:{brand:"Valvoline","brand:wikidata":"Q7912852","brand:wikipedia":"en:Valvoline Instant Oil Change",name:"Valvoline",shop:"car_repair"},removeTags:{brand:"Valvoline","brand:wikidata":"Q7912852","brand:wikipedia":"en:Valvoline Instant Oil Change",name:"Valvoline",shop:"car_repair"},matchScore:2,suggestion:true},"shop/carpet/Carpetright":{name:"Carpetright",icon:"maki-shop",geometry:["point","area"],tags:{shop:"carpet","brand:wikidata":"Q5045782"},addTags:{brand:"Carpetright","brand:wikidata":"Q5045782","brand:wikipedia":"en:Carpetright",name:"Carpetright",shop:"carpet"},removeTags:{brand:"Carpetright","brand:wikidata":"Q5045782","brand:wikipedia":"en:Carpetright",name:"Carpetright",shop:"carpet"},matchScore:2,suggestion:true},"shop/car/Audi":{name:"Audi",icon:"maki-car",geometry:["point","area"],tags:{shop:"car","brand:wikidata":"Q23317"},addTags:{brand:"Audi","brand:wikidata":"Q23317","brand:wikipedia":"en:Audi",name:"Audi",shop:"car"},removeTags:{brand:"Audi","brand:wikidata":"Q23317","brand:wikipedia":"en:Audi",name:"Audi",shop:"car"},matchScore:2,suggestion:true},"shop/car/BMW":{name:"BMW",icon:"maki-car",geometry:["point","area"],tags:{shop:"car","brand:wikidata":"Q26678"},addTags:{brand:"BMW","brand:wikidata":"Q26678","brand:wikipedia":"en:BMW",name:"BMW",shop:"car"},removeTags:{brand:"BMW","brand:wikidata":"Q26678","brand:wikipedia":"en:BMW",name:"BMW",shop:"car"},matchScore:2,suggestion:true},"shop/car/Chevrolet":{name:"Chevrolet",icon:"maki-car",geometry:["point","area"],tags:{shop:"car","brand:wikidata":"Q29570"},addTags:{brand:"Chevrolet","brand:wikidata":"Q29570","brand:wikipedia":"en:Chevrolet",name:"Chevrolet",shop:"car"},removeTags:{brand:"Chevrolet","brand:wikidata":"Q29570","brand:wikipedia":"en:Chevrolet",name:"Chevrolet",shop:"car"},matchScore:2,suggestion:true},"shop/car/Dacia":{name:"Dacia",icon:"maki-car",geometry:["point","area"],tags:{shop:"car","brand:wikidata":"Q27460"},addTags:{brand:"Dacia","brand:wikidata":"Q27460","brand:wikipedia":"en:Automobile Dacia",name:"Dacia",shop:"car"},removeTags:{brand:"Dacia","brand:wikidata":"Q27460","brand:wikipedia":"en:Automobile Dacia",name:"Dacia",shop:"car"},matchScore:2,suggestion:true},"shop/car/Fiat":{name:"Fiat",icon:"maki-car",geometry:["point","area"],tags:{shop:"car","brand:wikidata":"Q27597"},addTags:{brand:"Fiat","brand:wikidata":"Q27597","brand:wikipedia":"en:Fiat Automobiles",name:"Fiat",shop:"car"},removeTags:{brand:"Fiat","brand:wikidata":"Q27597","brand:wikipedia":"en:Fiat Automobiles",name:"Fiat",shop:"car"},matchScore:2,suggestion:true},"shop/car/Ford":{name:"Ford",icon:"maki-car",geometry:["point","area"],tags:{shop:"car","brand:wikidata":"Q44294"},addTags:{brand:"Ford","brand:wikidata":"Q44294","brand:wikipedia":"en:Ford Motor Company",name:"Ford",shop:"car"},removeTags:{brand:"Ford","brand:wikidata":"Q44294","brand:wikipedia":"en:Ford Motor Company",name:"Ford",shop:"car"},matchScore:2,suggestion:true},"shop/car/Honda":{name:"Honda",icon:"maki-car",geometry:["point","area"],tags:{shop:"car","brand:wikidata":"Q9584"},addTags:{brand:"Honda","brand:wikidata":"Q9584","brand:wikipedia":"en:Honda",name:"Honda",shop:"car"},removeTags:{brand:"Honda","brand:wikidata":"Q9584","brand:wikipedia":"en:Honda",name:"Honda",shop:"car"},matchScore:2,suggestion:true},"shop/car/Hyundai":{name:"Hyundai",icon:"maki-car",geometry:["point","area"],tags:{shop:"car","brand:wikidata":"Q55931"},addTags:{brand:"Hyundai","brand:wikidata":"Q55931","brand:wikipedia":"en:Hyundai Motor Company",name:"Hyundai",shop:"car"},removeTags:{brand:"Hyundai","brand:wikidata":"Q55931","brand:wikipedia":"en:Hyundai Motor Company",name:"Hyundai",shop:"car"},matchScore:2,suggestion:true},"shop/car/Isuzu":{name:"Isuzu",icon:"maki-car",geometry:["point","area"],tags:{shop:"car","brand:wikidata":"Q29803"},addTags:{brand:"Isuzu","brand:wikidata":"Q29803","brand:wikipedia":"en:Isuzu Motors",name:"Isuzu",shop:"car"},removeTags:{brand:"Isuzu","brand:wikidata":"Q29803","brand:wikipedia":"en:Isuzu Motors",name:"Isuzu",shop:"car"},matchScore:2,suggestion:true},"shop/car/Kia":{name:"Kia",icon:"maki-car",geometry:["point","area"],tags:{shop:"car","brand:wikidata":"Q35349"},addTags:{brand:"Kia","brand:wikidata":"Q35349","brand:wikipedia":"en:Kia Motors",name:"Kia",shop:"car"},removeTags:{brand:"Kia","brand:wikidata":"Q35349","brand:wikipedia":"en:Kia Motors",name:"Kia",shop:"car"},matchScore:2,suggestion:true},"shop/car/Land Rover":{name:"Land Rover",icon:"maki-car",geometry:["point","area"],tags:{shop:"car","brand:wikidata":"Q35907"},addTags:{brand:"Land Rover","brand:wikidata":"Q35907","brand:wikipedia":"en:Land Rover",name:"Land Rover",shop:"car"},removeTags:{brand:"Land Rover","brand:wikidata":"Q35907","brand:wikipedia":"en:Land Rover",name:"Land Rover",shop:"car"},matchScore:2,suggestion:true},"shop/car/Lexus":{name:"Lexus",icon:"maki-car",geometry:["point","area"],tags:{shop:"car","brand:wikidata":"Q35919"},addTags:{brand:"Lexus","brand:wikidata":"Q35919","brand:wikipedia":"en:Lexus",name:"Lexus",shop:"car"},removeTags:{brand:"Lexus","brand:wikidata":"Q35919","brand:wikipedia":"en:Lexus",name:"Lexus",shop:"car"},matchScore:2,suggestion:true},"shop/car/Mazda":{name:"Mazda",icon:"maki-car",geometry:["point","area"],tags:{shop:"car","brand:wikidata":"Q35996"},addTags:{brand:"Mazda","brand:wikidata":"Q35996","brand:wikipedia":"en:Mazda",name:"Mazda",shop:"car"},removeTags:{brand:"Mazda","brand:wikidata":"Q35996","brand:wikipedia":"en:Mazda",name:"Mazda",shop:"car"},matchScore:2,suggestion:true},"shop/car/Mercedes-Benz":{name:"Mercedes-Benz",icon:"maki-car",geometry:["point","area"],tags:{shop:"car","brand:wikidata":"Q36008"},addTags:{brand:"Mercedes-Benz","brand:wikidata":"Q36008","brand:wikipedia":"en:Mercedes-Benz",name:"Mercedes-Benz",shop:"car"},removeTags:{brand:"Mercedes-Benz","brand:wikidata":"Q36008","brand:wikipedia":"en:Mercedes-Benz",name:"Mercedes-Benz",shop:"car"},matchScore:2,suggestion:true},"shop/car/Mitsubishi":{name:"Mitsubishi",icon:"maki-car",geometry:["point","area"],tags:{shop:"car","brand:wikidata":"Q36033"},addTags:{brand:"Mitsubishi","brand:wikidata":"Q36033","brand:wikipedia":"en:Mitsubishi Motors",name:"Mitsubishi",shop:"car"},removeTags:{brand:"Mitsubishi","brand:wikidata":"Q36033","brand:wikipedia":"en:Mitsubishi Motors",name:"Mitsubishi",shop:"car"},matchScore:2,suggestion:true},"shop/car/Netz":{name:"Netz",icon:"maki-car",geometry:["point","area"],tags:{shop:"car","brand:wikidata":"Q11325416"},addTags:{brand:"Netz","brand:wikidata":"Q11325416","brand:wikipedia":"ja:ネッツ店",name:"Netz",shop:"car"},removeTags:{brand:"Netz","brand:wikidata":"Q11325416","brand:wikipedia":"ja:ネッツ店",name:"Netz",shop:"car"},matchScore:2,suggestion:true},"shop/car/Nissan":{name:"Nissan",icon:"maki-car",geometry:["point","area"],tags:{shop:"car","brand:wikidata":"Q20165"},addTags:{brand:"Nissan","brand:wikidata":"Q20165","brand:wikipedia":"ja:日産自動車",name:"Nissan",shop:"car"},removeTags:{brand:"Nissan","brand:wikidata":"Q20165","brand:wikipedia":"ja:日産自動車",name:"Nissan",shop:"car"},matchScore:2,suggestion:true},"shop/car/Opel":{name:"Opel",icon:"maki-car",geometry:["point","area"],tags:{shop:"car","brand:wikidata":"Q40966"},addTags:{brand:"Opel","brand:wikidata":"Q40966","brand:wikipedia":"en:Opel",name:"Opel",shop:"car"},removeTags:{brand:"Opel","brand:wikidata":"Q40966","brand:wikipedia":"en:Opel",name:"Opel",shop:"car"},matchScore:2,suggestion:true},"shop/car/Peugeot":{name:"Peugeot",icon:"maki-car",geometry:["point","area"],tags:{shop:"car","brand:wikidata":"Q6742"},addTags:{brand:"Peugeot","brand:wikidata":"Q6742","brand:wikipedia":"en:Peugeot",name:"Peugeot",shop:"car"},removeTags:{brand:"Peugeot","brand:wikidata":"Q6742","brand:wikipedia":"en:Peugeot",name:"Peugeot",shop:"car"},matchScore:2,suggestion:true},"shop/car/Porsche":{name:"Porsche",icon:"maki-car",geometry:["point","area"],tags:{shop:"car","brand:wikidata":"Q40993"},addTags:{brand:"Porsche","brand:wikidata":"Q40993","brand:wikipedia":"en:Porsche",name:"Porsche",shop:"car"},removeTags:{brand:"Porsche","brand:wikidata":"Q40993","brand:wikipedia":"en:Porsche",name:"Porsche",shop:"car"},matchScore:2,suggestion:true},"shop/car/Renault":{name:"Renault",icon:"maki-car",geometry:["point","area"],tags:{shop:"car","brand:wikidata":"Q6686"},addTags:{brand:"Renault","brand:wikidata":"Q6686","brand:wikipedia":"en:Renault",name:"Renault",shop:"car"},removeTags:{brand:"Renault","brand:wikidata":"Q6686","brand:wikipedia":"en:Renault",name:"Renault",shop:"car"},matchScore:2,suggestion:true},"shop/car/Seat":{name:"Seat",icon:"maki-car",geometry:["point","area"],tags:{shop:"car","brand:wikidata":"Q188217"},addTags:{brand:"Seat","brand:wikidata":"Q188217","brand:wikipedia":"en:SEAT",name:"Seat",shop:"car"},removeTags:{brand:"Seat","brand:wikidata":"Q188217","brand:wikipedia":"en:SEAT",name:"Seat",shop:"car"},matchScore:2,suggestion:true},"shop/car/Skoda":{name:"Skoda",icon:"maki-car",geometry:["point","area"],tags:{shop:"car","brand:wikidata":"Q29637"},addTags:{brand:"Skoda","brand:wikidata":"Q29637","brand:wikipedia":"en:Škoda Auto",name:"Skoda",shop:"car"},removeTags:{brand:"Skoda","brand:wikidata":"Q29637","brand:wikipedia":"en:Škoda Auto",name:"Skoda",shop:"car"},matchScore:2,suggestion:true},"shop/car/Subaru":{name:"Subaru",icon:"maki-car",geometry:["point","area"],tags:{shop:"car","brand:wikidata":"Q172741"},addTags:{brand:"Subaru","brand:wikidata":"Q172741","brand:wikipedia":"en:Subaru",name:"Subaru",shop:"car"},removeTags:{brand:"Subaru","brand:wikidata":"Q172741","brand:wikipedia":"en:Subaru",name:"Subaru",shop:"car"},matchScore:2,suggestion:true},"shop/car/Suzuki":{name:"Suzuki",icon:"maki-car",geometry:["point","area"],tags:{shop:"car","brand:wikidata":"Q181642"},addTags:{brand:"Suzuki","brand:wikidata":"Q181642","brand:wikipedia":"en:Suzuki",name:"Suzuki",shop:"car"},removeTags:{brand:"Suzuki","brand:wikidata":"Q181642","brand:wikipedia":"en:Suzuki",name:"Suzuki",shop:"car"},matchScore:2,suggestion:true},"shop/car/Tesla":{name:"Tesla",icon:"maki-car",geometry:["point","area"],tags:{shop:"car","brand:wikidata":"Q478214"},addTags:{brand:"Tesla","brand:wikidata":"Q478214","brand:wikipedia":"en:Tesla, Inc.",name:"Tesla",shop:"car"},removeTags:{brand:"Tesla","brand:wikidata":"Q478214","brand:wikipedia":"en:Tesla, Inc.",name:"Tesla",shop:"car"},matchScore:2,suggestion:true},"shop/car/Toyota":{name:"Toyota",icon:"maki-car",geometry:["point","area"],tags:{shop:"car","brand:wikidata":"Q53268"},addTags:{brand:"Toyota","brand:wikidata":"Q53268","brand:wikipedia":"en:Toyota",name:"Toyota",shop:"car"},removeTags:{brand:"Toyota","brand:wikidata":"Q53268","brand:wikipedia":"en:Toyota",name:"Toyota",shop:"car"},matchScore:2,suggestion:true},"shop/car/Volkswagen":{name:"Volkswagen",icon:"maki-car",geometry:["point","area"],tags:{shop:"car","brand:wikidata":"Q246"},addTags:{brand:"Volkswagen","brand:wikidata":"Q246","brand:wikipedia":"en:Volkswagen",name:"Volkswagen",shop:"car"},removeTags:{brand:"Volkswagen","brand:wikidata":"Q246","brand:wikipedia":"en:Volkswagen",name:"Volkswagen",shop:"car"},matchScore:2,suggestion:true},"shop/car/Volvo":{name:"Volvo",icon:"maki-car",geometry:["point","area"],tags:{shop:"car","brand:wikidata":"Q215293"},addTags:{brand:"Volvo","brand:wikidata":"Q215293","brand:wikipedia":"en:Volvo Cars",name:"Volvo",shop:"car"},removeTags:{brand:"Volvo","brand:wikidata":"Q215293","brand:wikipedia":"en:Volvo Cars",name:"Volvo",shop:"car"},matchScore:2,suggestion:true},"shop/car/ホンダ":{name:"ホンダ",icon:"maki-car",geometry:["point","area"],tags:{shop:"car","brand:wikidata":"Q9584"},addTags:{brand:"ホンダ","brand:en":"Honda","brand:wikidata":"Q9584","brand:wikipedia":"ja:本田技研工業",name:"ホンダ","name:en":"Honda",shop:"car"},removeTags:{brand:"ホンダ","brand:en":"Honda","brand:wikidata":"Q9584","brand:wikipedia":"ja:本田技研工業",name:"ホンダ","name:en":"Honda",shop:"car"},matchScore:2,suggestion:true},"shop/catalogue/Argos":{name:"Argos",icon:"maki-shop",geometry:["point","area"],tags:{shop:"catalogue","brand:wikidata":"Q4789707"},addTags:{brand:"Argos","brand:wikidata":"Q4789707","brand:wikipedia":"en:Argos (retailer)",name:"Argos",shop:"catalogue"},removeTags:{brand:"Argos","brand:wikidata":"Q4789707","brand:wikipedia":"en:Argos (retailer)",name:"Argos",shop:"catalogue"},matchScore:2,suggestion:true},"shop/charity/Age UK":{name:"Age UK",icon:"maki-shop",geometry:["point","area"],tags:{shop:"charity","brand:wikidata":"Q4691850"},addTags:{brand:"Age UK","brand:wikidata":"Q4691850","brand:wikipedia":"en:Age UK",name:"Age UK",shop:"charity"},removeTags:{brand:"Age UK","brand:wikidata":"Q4691850","brand:wikipedia":"en:Age UK",name:"Age UK",shop:"charity"},matchScore:2,suggestion:true},"shop/charity/Barnardo's":{name:"Barnardo's",icon:"maki-shop",geometry:["point","area"],tags:{shop:"charity","brand:wikidata":"Q2884670"},addTags:{brand:"Barnardo's","brand:wikidata":"Q2884670","brand:wikipedia":"en:Barnardo's",name:"Barnardo's",shop:"charity"},removeTags:{brand:"Barnardo's","brand:wikidata":"Q2884670","brand:wikipedia":"en:Barnardo's",name:"Barnardo's",shop:"charity"},matchScore:2,suggestion:true},"shop/charity/British Heart Foundation":{name:"British Heart Foundation",icon:"maki-shop",geometry:["point","area"],tags:{shop:"charity","brand:wikidata":"Q4970039"},addTags:{brand:"British Heart Foundation","brand:wikidata":"Q4970039","brand:wikipedia":"en:British Heart Foundation",name:"British Heart Foundation",shop:"charity"},removeTags:{brand:"British Heart Foundation","brand:wikidata":"Q4970039","brand:wikipedia":"en:British Heart Foundation",name:"British Heart Foundation",shop:"charity"},matchScore:2,suggestion:true},"shop/charity/British Red Cross":{name:"British Red Cross",icon:"maki-shop",geometry:["point","area"],tags:{shop:"charity","brand:wikidata":"Q4970966"},addTags:{brand:"British Red Cross","brand:wikidata":"Q4970966","brand:wikipedia":"en:British Red Cross",name:"British Red Cross",shop:"charity"},removeTags:{brand:"British Red Cross","brand:wikidata":"Q4970966","brand:wikipedia":"en:British Red Cross",name:"British Red Cross",shop:"charity"},matchScore:2,suggestion:true},"shop/charity/Cancer Research UK":{name:"Cancer Research UK",icon:"maki-shop",geometry:["point","area"],tags:{shop:"charity","brand:wikidata":"Q326079"},addTags:{brand:"Cancer Research UK","brand:wikidata":"Q326079","brand:wikipedia":"en:Cancer Research UK",name:"Cancer Research UK",shop:"charity"},removeTags:{brand:"Cancer Research UK","brand:wikidata":"Q326079","brand:wikipedia":"en:Cancer Research UK",name:"Cancer Research UK",shop:"charity"},matchScore:2,suggestion:true},"shop/charity/Goodwill":{name:"Goodwill",icon:"maki-shop",geometry:["point","area"],tags:{shop:"charity","brand:wikidata":"Q5583655"},addTags:{brand:"Goodwill","brand:wikidata":"Q5583655","brand:wikipedia":"en:Goodwill Industries",name:"Goodwill",shop:"charity"},removeTags:{brand:"Goodwill","brand:wikidata":"Q5583655","brand:wikipedia":"en:Goodwill Industries",name:"Goodwill",shop:"charity"},matchScore:2,suggestion:true},"shop/charity/Mind":{name:"Mind",icon:"maki-shop",geometry:["point","area"],tags:{shop:"charity","brand:wikidata":"Q3314763"},addTags:{brand:"Mind","brand:wikidata":"Q3314763","brand:wikipedia":"en:Mind (charity)",name:"Mind",shop:"charity"},removeTags:{brand:"Mind","brand:wikidata":"Q3314763","brand:wikipedia":"en:Mind (charity)",name:"Mind",shop:"charity"},matchScore:2,suggestion:true},"shop/charity/Myrorna":{name:"Myrorna",icon:"maki-shop",geometry:["point","area"],tags:{shop:"charity","brand:wikidata":"Q10592609"},addTags:{brand:"Myrorna","brand:wikidata":"Q10592609","brand:wikipedia":"sv:Myrorna",name:"Myrorna",shop:"charity"},removeTags:{brand:"Myrorna","brand:wikidata":"Q10592609","brand:wikipedia":"sv:Myrorna",name:"Myrorna",shop:"charity"},matchScore:2,suggestion:true},"shop/charity/Oxfam":{name:"Oxfam",icon:"maki-shop",geometry:["point","area"],tags:{shop:"charity","brand:wikidata":"Q267941"},addTags:{brand:"Oxfam","brand:wikidata":"Q267941","brand:wikipedia":"en:Oxfam",name:"Oxfam",shop:"charity"},removeTags:{brand:"Oxfam","brand:wikidata":"Q267941","brand:wikipedia":"en:Oxfam",name:"Oxfam",shop:"charity"},matchScore:2,suggestion:true},"shop/charity/RSPCA":{name:"RSPCA",icon:"maki-shop",geometry:["point","area"],tags:{shop:"charity","brand:wikidata":"Q584819"},addTags:{brand:"RSPCA","brand:wikidata":"Q584819","brand:wikipedia":"en:Royal Society for the Prevention of Cruelty to Animals",name:"RSPCA",shop:"charity"},removeTags:{brand:"RSPCA","brand:wikidata":"Q584819","brand:wikipedia":"en:Royal Society for the Prevention of Cruelty to Animals",name:"RSPCA",shop:"charity"},matchScore:2,suggestion:true},"shop/charity/Salvation Army":{name:"Salvation Army",icon:"maki-shop",geometry:["point","area"],tags:{shop:"charity","brand:wikidata":"Q188307"},addTags:{brand:"Salvation Army","brand:wikidata":"Q188307","brand:wikipedia":"en:The Salvation Army",name:"Salvation Army",shop:"charity"},removeTags:{brand:"Salvation Army","brand:wikidata":"Q188307","brand:wikipedia":"en:The Salvation Army",name:"Salvation Army",shop:"charity"},matchScore:2,suggestion:true},"shop/charity/Scope":{name:"Scope",icon:"maki-shop",geometry:["point","area"],tags:{shop:"charity","brand:wikidata":"Q7434435"},addTags:{brand:"Scope","brand:wikidata":"Q7434435","brand:wikipedia":"en:Scope (charity)",name:"Scope",shop:"charity"},removeTags:{brand:"Scope","brand:wikidata":"Q7434435","brand:wikipedia":"en:Scope (charity)",name:"Scope",shop:"charity"},matchScore:2,suggestion:true},"shop/charity/Sue Ryder":{name:"Sue Ryder",icon:"maki-shop",geometry:["point","area"],tags:{shop:"charity","brand:wikidata":"Q7634271"},addTags:{brand:"Sue Ryder","brand:wikidata":"Q7634271","brand:wikipedia":"en:Sue Ryder (charity)",name:"Sue Ryder",shop:"charity"},removeTags:{brand:"Sue Ryder","brand:wikidata":"Q7634271","brand:wikipedia":"en:Sue Ryder (charity)",name:"Sue Ryder",shop:"charity"},matchScore:2,suggestion:true},"shop/charity/The Salvation Army":{name:"The Salvation Army",icon:"maki-shop",geometry:["point","area"],tags:{shop:"charity","brand:wikidata":"Q188307"},addTags:{brand:"The Salvation Army","brand:wikidata":"Q188307","brand:wikipedia":"en:The Salvation Army",name:"The Salvation Army",shop:"charity"},removeTags:{brand:"The Salvation Army","brand:wikidata":"Q188307","brand:wikipedia":"en:The Salvation Army",name:"The Salvation Army",shop:"charity"},matchScore:2,suggestion:true},"shop/chemist/Bipa":{name:"Bipa",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"chemist","brand:wikidata":"Q864933"},addTags:{brand:"Bipa","brand:wikidata":"Q864933","brand:wikipedia":"de:Bipa",name:"Bipa",shop:"chemist"},removeTags:{brand:"Bipa","brand:wikidata":"Q864933","brand:wikipedia":"de:Bipa",name:"Bipa",shop:"chemist"},matchScore:2,suggestion:true},"shop/chemist/Budnikowsky":{name:"Budnikowsky",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"chemist","brand:wikidata":"Q1001516"},addTags:{brand:"Budnikowsky","brand:wikidata":"Q1001516","brand:wikipedia":"de:Budnikowsky",name:"Budnikowsky",shop:"chemist"},removeTags:{brand:"Budnikowsky","brand:wikidata":"Q1001516","brand:wikipedia":"de:Budnikowsky",name:"Budnikowsky",shop:"chemist"},matchScore:2,suggestion:true},"shop/chemist/Drogeria Natura":{name:"Drogeria Natura",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"chemist","brand:wikidata":"Q9212032"},addTags:{brand:"Drogeria Natura","brand:wikidata":"Q9212032","brand:wikipedia":"pl:Drogerie Natura",name:"Drogeria Natura",shop:"chemist"},removeTags:{brand:"Drogeria Natura","brand:wikidata":"Q9212032","brand:wikipedia":"pl:Drogerie Natura",name:"Drogeria Natura",shop:"chemist"},matchScore:2,suggestion:true},"shop/chemist/Etos":{name:"Etos",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"chemist","brand:wikidata":"Q2609459"},addTags:{brand:"Etos","brand:wikidata":"Q2609459","brand:wikipedia":"en:Etos",name:"Etos",shop:"chemist"},removeTags:{brand:"Etos","brand:wikidata":"Q2609459","brand:wikipedia":"en:Etos",name:"Etos",shop:"chemist"},matchScore:2,suggestion:true},"shop/chemist/Kruidvat":{name:"Kruidvat",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"chemist","brand:wikidata":"Q2226366"},addTags:{brand:"Kruidvat","brand:wikidata":"Q2226366","brand:wikipedia":"en:Kruidvat",name:"Kruidvat",shop:"chemist"},removeTags:{brand:"Kruidvat","brand:wikidata":"Q2226366","brand:wikipedia":"en:Kruidvat",name:"Kruidvat",shop:"chemist"},matchScore:2,suggestion:true},"shop/chemist/Matas":{name:"Matas",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"chemist","brand:wikidata":"Q6786143"},addTags:{brand:"Matas","brand:wikidata":"Q6786143","brand:wikipedia":"en:Matas (drug store)",name:"Matas",shop:"chemist"},removeTags:{brand:"Matas","brand:wikidata":"Q6786143","brand:wikipedia":"en:Matas (drug store)",name:"Matas",shop:"chemist"},matchScore:2,suggestion:true},"shop/chemist/Rossmann":{name:"Rossmann",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"chemist","brand:wikidata":"Q316004"},addTags:{brand:"Rossmann","brand:wikidata":"Q316004","brand:wikipedia":"de:Dirk Rossmann GmbH",name:"Rossmann",shop:"chemist"},removeTags:{brand:"Rossmann","brand:wikidata":"Q316004","brand:wikipedia":"de:Dirk Rossmann GmbH",name:"Rossmann",shop:"chemist"},matchScore:2,suggestion:true},"shop/chemist/Teta":{name:"Teta",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"chemist","brand:wikidata":"Q20860823"},addTags:{brand:"Teta","brand:wikidata":"Q20860823","brand:wikipedia":"cs:Teta drogerie",name:"Teta",shop:"chemist"},removeTags:{brand:"Teta","brand:wikidata":"Q20860823","brand:wikipedia":"cs:Teta drogerie",name:"Teta",shop:"chemist"},matchScore:2,suggestion:true},"shop/chemist/Trekpleister":{name:"Trekpleister",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"chemist","brand:wikidata":"Q2551576"},addTags:{brand:"Trekpleister","brand:wikidata":"Q2551576","brand:wikipedia":"nl:Trekpleister (drogisterij)",name:"Trekpleister",shop:"chemist"},removeTags:{brand:"Trekpleister","brand:wikidata":"Q2551576","brand:wikipedia":"nl:Trekpleister (drogisterij)",name:"Trekpleister",shop:"chemist"},matchScore:2,suggestion:true},"shop/chemist/dm":{name:"dm",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"chemist","brand:wikidata":"Q266572"},addTags:{brand:"dm","brand:wikidata":"Q266572","brand:wikipedia":"en:Dm-drogerie markt",name:"dm",shop:"chemist"},removeTags:{brand:"dm","brand:wikidata":"Q266572","brand:wikipedia":"en:Dm-drogerie markt",name:"dm",shop:"chemist"},matchScore:2,suggestion:true},"shop/chocolate/Cacau Show":{name:"Cacau Show",icon:"maki-shop",geometry:["point","area"],tags:{shop:"chocolate","brand:wikidata":"Q9671713"},addTags:{brand:"Cacau Show","brand:wikidata":"Q9671713","brand:wikipedia":"en:Cacau show",name:"Cacau Show",shop:"chocolate"},removeTags:{brand:"Cacau Show","brand:wikidata":"Q9671713","brand:wikipedia":"en:Cacau show",name:"Cacau Show",shop:"chocolate"},matchScore:2,suggestion:true},"shop/chocolate/Leonidas":{name:"Leonidas",icon:"maki-shop",geometry:["point","area"],tags:{shop:"chocolate","brand:wikidata":"Q80335"},addTags:{brand:"Leonidas","brand:wikidata":"Q80335","brand:wikipedia":"en:Leonidas (chocolate maker)",name:"Leonidas",shop:"chocolate"},removeTags:{brand:"Leonidas","brand:wikidata":"Q80335","brand:wikipedia":"en:Leonidas (chocolate maker)",name:"Leonidas",shop:"chocolate"},matchScore:2,suggestion:true},"shop/clothes/Abercrombie & Fitch":{name:"Abercrombie & Fitch",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q319344"},addTags:{brand:"Abercrombie & Fitch","brand:wikidata":"Q319344","brand:wikipedia":"en:Abercrombie & Fitch",name:"Abercrombie & Fitch",shop:"clothes"},removeTags:{brand:"Abercrombie & Fitch","brand:wikidata":"Q319344","brand:wikipedia":"en:Abercrombie & Fitch",name:"Abercrombie & Fitch",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Accessorize":{name:"Accessorize",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q3069980"},addTags:{brand:"Accessorize","brand:wikidata":"Q3069980","brand:wikipedia":"en:Monsoon Accessorize",name:"Accessorize",shop:"clothes"},removeTags:{brand:"Accessorize","brand:wikidata":"Q3069980","brand:wikipedia":"en:Monsoon Accessorize",name:"Accessorize",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Ackermans":{name:"Ackermans",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q4674255"},addTags:{brand:"Ackermans","brand:wikidata":"Q4674255","brand:wikipedia":"en:Ackermans",name:"Ackermans",shop:"clothes"},removeTags:{brand:"Ackermans","brand:wikidata":"Q4674255","brand:wikipedia":"en:Ackermans",name:"Ackermans",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Aeropostale":{name:"Aeropostale",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q794565"},addTags:{brand:"Aeropostale","brand:wikidata":"Q794565","brand:wikipedia":"en:Aéropostale (clothing)",name:"Aeropostale",shop:"clothes"},removeTags:{brand:"Aeropostale","brand:wikidata":"Q794565","brand:wikipedia":"en:Aéropostale (clothing)",name:"Aeropostale",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/American Apparel":{name:"American Apparel",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q463378"},addTags:{brand:"American Apparel","brand:wikidata":"Q463378","brand:wikipedia":"en:American Apparel",name:"American Apparel",shop:"clothes"},removeTags:{brand:"American Apparel","brand:wikidata":"Q463378","brand:wikipedia":"en:American Apparel",name:"American Apparel",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/American Eagle Outfitters":{name:"American Eagle Outfitters",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q2842931"},addTags:{brand:"American Eagle Outfitters","brand:wikidata":"Q2842931","brand:wikipedia":"en:American Eagle Outfitters",name:"American Eagle Outfitters",shop:"clothes"},removeTags:{brand:"American Eagle Outfitters","brand:wikidata":"Q2842931","brand:wikipedia":"en:American Eagle Outfitters",name:"American Eagle Outfitters",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Anthropologie":{name:"Anthropologie",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q4773903"},addTags:{brand:"Anthropologie","brand:wikidata":"Q4773903","brand:wikipedia":"en:Anthropologie",name:"Anthropologie",shop:"clothes"},removeTags:{brand:"Anthropologie","brand:wikidata":"Q4773903","brand:wikipedia":"en:Anthropologie",name:"Anthropologie",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Ardene":{name:"Ardene",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q2860764"},addTags:{brand:"Ardene","brand:wikidata":"Q2860764","brand:wikipedia":"en:Ardene",name:"Ardene",shop:"clothes"},removeTags:{brand:"Ardene","brand:wikidata":"Q2860764","brand:wikipedia":"en:Ardene",name:"Ardene",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Armand Thiery":{name:"Armand Thiery",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q2861975"},addTags:{brand:"Armand Thiery","brand:wikidata":"Q2861975","brand:wikipedia":"fr:Armand Thiery",name:"Armand Thiery",shop:"clothes"},removeTags:{brand:"Armand Thiery","brand:wikidata":"Q2861975","brand:wikipedia":"fr:Armand Thiery",name:"Armand Thiery",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Banana Republic":{name:"Banana Republic",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q806085"},addTags:{brand:"Banana Republic","brand:wikidata":"Q806085","brand:wikipedia":"en:Banana Republic",name:"Banana Republic",shop:"clothes"},removeTags:{brand:"Banana Republic","brand:wikidata":"Q806085","brand:wikipedia":"en:Banana Republic",name:"Banana Republic",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Bershka":{name:"Bershka",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q827258"},addTags:{brand:"Bershka","brand:wikidata":"Q827258","brand:wikipedia":"en:Bershka",name:"Bershka",shop:"clothes"},removeTags:{brand:"Bershka","brand:wikidata":"Q827258","brand:wikipedia":"en:Bershka",name:"Bershka",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Betty Barclay":{name:"Betty Barclay",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q850250"},addTags:{brand:"Betty Barclay","brand:wikidata":"Q850250","brand:wikipedia":"de:Betty Barclay",name:"Betty Barclay",shop:"clothes"},removeTags:{brand:"Betty Barclay","brand:wikidata":"Q850250","brand:wikipedia":"de:Betty Barclay",name:"Betty Barclay",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Big Star":{name:"Big Star",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q9171569"},addTags:{brand:"Big Star","brand:wikidata":"Q9171569","brand:wikipedia":"pl:Big Star Limited",name:"Big Star",shop:"clothes"},removeTags:{brand:"Big Star","brand:wikidata":"Q9171569","brand:wikipedia":"pl:Big Star Limited",name:"Big Star",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Bonita":{name:"Bonita",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q945463"},addTags:{brand:"Bonita","brand:wikidata":"Q945463","brand:wikipedia":"en:Bonia (fashion)",name:"Bonita",shop:"clothes"},removeTags:{brand:"Bonita","brand:wikidata":"Q945463","brand:wikipedia":"en:Bonia (fashion)",name:"Bonita",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Bonobo":{name:"Bonobo",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q4942546"},addTags:{brand:"Bonobo","brand:wikidata":"Q4942546","brand:wikipedia":"en:Bonobos (apparel)",name:"Bonobo",shop:"clothes"},removeTags:{brand:"Bonobo","brand:wikidata":"Q4942546","brand:wikipedia":"en:Bonobos (apparel)",name:"Bonobo",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Brooks Brothers":{name:"Brooks Brothers",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q929722"},addTags:{brand:"Brooks Brothers","brand:wikidata":"Q929722","brand:wikipedia":"en:Brooks Brothers",name:"Brooks Brothers",shop:"clothes"},removeTags:{brand:"Brooks Brothers","brand:wikidata":"Q929722","brand:wikipedia":"en:Brooks Brothers",name:"Brooks Brothers",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Burberry":{name:"Burberry",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q390107"},addTags:{brand:"Burberry","brand:wikidata":"Q390107","brand:wikipedia":"en:Burberry",name:"Burberry",shop:"clothes"},removeTags:{brand:"Burberry","brand:wikidata":"Q390107","brand:wikipedia":"en:Burberry",name:"Burberry",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Burlington Coat Factory":{name:"Burlington Coat Factory",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q4999220"},addTags:{brand:"Burlington Coat Factory","brand:wikidata":"Q4999220","brand:wikipedia":"en:Burlington (department store)",name:"Burlington Coat Factory",shop:"clothes"},removeTags:{brand:"Burlington Coat Factory","brand:wikidata":"Q4999220","brand:wikipedia":"en:Burlington (department store)",name:"Burlington Coat Factory",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Burton":{name:"Burton",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q5000795"},addTags:{brand:"Burton","brand:wikidata":"Q5000795","brand:wikipedia":"en:Burton (retailer)",name:"Burton",shop:"clothes"},removeTags:{brand:"Burton","brand:wikidata":"Q5000795","brand:wikipedia":"en:Burton (retailer)",name:"Burton",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/C&A":{name:"C&A",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q701338"},addTags:{brand:"C&A","brand:wikidata":"Q701338","brand:wikipedia":"en:C&A",name:"C&A",shop:"clothes"},removeTags:{brand:"C&A","brand:wikidata":"Q701338","brand:wikipedia":"en:C&A",name:"C&A",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/COS":{name:"COS",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q60772401"},addTags:{brand:"COS","brand:wikidata":"Q60772401","brand:wikipedia":"en:COS (Collection Of Style)",name:"COS",shop:"clothes"},removeTags:{brand:"COS","brand:wikidata":"Q60772401","brand:wikipedia":"en:COS (Collection Of Style)",name:"COS",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Calvin Klein":{name:"Calvin Klein",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q1068628"},addTags:{brand:"Calvin Klein","brand:wikidata":"Q1068628","brand:wikipedia":"en:Calvin Klein",name:"Calvin Klein",shop:"clothes"},removeTags:{brand:"Calvin Klein","brand:wikidata":"Q1068628","brand:wikipedia":"en:Calvin Klein",name:"Calvin Klein",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Calzedonia":{name:"Calzedonia",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q1027874"},addTags:{brand:"Calzedonia","brand:wikidata":"Q1027874","brand:wikipedia":"en:Calzedonia",name:"Calzedonia",shop:"clothes"},removeTags:{brand:"Calzedonia","brand:wikidata":"Q1027874","brand:wikipedia":"en:Calzedonia",name:"Calzedonia",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Camaïeu":{name:"Camaïeu",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q2934647"},addTags:{brand:"Camaïeu","brand:wikidata":"Q2934647","brand:wikipedia":"en:Camaïeu (company)",name:"Camaïeu",shop:"clothes"},removeTags:{brand:"Camaïeu","brand:wikidata":"Q2934647","brand:wikipedia":"en:Camaïeu (company)",name:"Camaïeu",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Camp David":{name:"Camp David",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q50540636"},addTags:{brand:"Camp David","brand:wikidata":"Q50540636","brand:wikipedia":"en:Camp David (fashion)",name:"Camp David",shop:"clothes"},removeTags:{brand:"Camp David","brand:wikidata":"Q50540636","brand:wikipedia":"en:Camp David (fashion)",name:"Camp David",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Carter's":{name:"Carter's",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q5047083"},addTags:{brand:"Carter's","brand:wikidata":"Q5047083","brand:wikipedia":"en:Carter's",name:"Carter's",shop:"clothes"},removeTags:{brand:"Carter's","brand:wikidata":"Q5047083","brand:wikipedia":"en:Carter's",name:"Carter's",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Cato":{name:"Cato",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q16956136"},addTags:{brand:"Cato","brand:wikidata":"Q16956136","brand:wikipedia":"en:Cato Corporation",name:"Cato",shop:"clothes"},removeTags:{brand:"Cato","brand:wikidata":"Q16956136","brand:wikipedia":"en:Cato Corporation",name:"Cato",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Celio":{name:"Celio",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q2672003"},addTags:{brand:"Celio","brand:wikidata":"Q2672003","brand:wikipedia":"en:Celio (retailer)",name:"Celio",shop:"clothes"},removeTags:{brand:"Celio","brand:wikidata":"Q2672003","brand:wikipedia":"en:Celio (retailer)",name:"Celio",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Charles Vögele":{name:"Charles Vögele",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q1066326"},addTags:{brand:"Charles Vögele","brand:wikidata":"Q1066326","brand:wikipedia":"de:Charles Vögele Holding",name:"Charles Vögele",shop:"clothes"},removeTags:{brand:"Charles Vögele","brand:wikidata":"Q1066326","brand:wikipedia":"de:Charles Vögele Holding",name:"Charles Vögele",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Charlotte Russe":{name:"Charlotte Russe",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q5086126"},addTags:{brand:"Charlotte Russe","brand:wikidata":"Q5086126","brand:wikipedia":"en:Charlotte Russe (clothing retailer)",name:"Charlotte Russe",shop:"clothes"},removeTags:{brand:"Charlotte Russe","brand:wikidata":"Q5086126","brand:wikipedia":"en:Charlotte Russe (clothing retailer)",name:"Charlotte Russe",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Chico's":{name:"Chico's",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q5096393"},addTags:{brand:"Chico's","brand:wikidata":"Q5096393","brand:wikipedia":"en:Chico's (clothing retailer)",name:"Chico's",shop:"clothes"},removeTags:{brand:"Chico's","brand:wikidata":"Q5096393","brand:wikipedia":"en:Chico's (clothing retailer)",name:"Chico's",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Christopher & Banks":{name:"Christopher & Banks",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q5111816"},addTags:{brand:"Christopher & Banks","brand:wikidata":"Q5111816","brand:wikipedia":"en:Christopher & Banks",name:"Christopher & Banks",shop:"clothes"},removeTags:{brand:"Christopher & Banks","brand:wikidata":"Q5111816","brand:wikipedia":"en:Christopher & Banks",name:"Christopher & Banks",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Colin's":{name:"Colin's",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q28729658"},addTags:{brand:"Colin's","brand:wikidata":"Q28729658",name:"Colin's",shop:"clothes"},removeTags:{brand:"Colin's","brand:wikidata":"Q28729658",name:"Colin's",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Columbia":{name:"Columbia",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q1112588"},addTags:{brand:"Columbia","brand:wikidata":"Q1112588","brand:wikipedia":"en:Columbia Sportswear",name:"Columbia",shop:"clothes"},removeTags:{brand:"Columbia","brand:wikidata":"Q1112588","brand:wikipedia":"en:Columbia Sportswear",name:"Columbia",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Cubus":{name:"Cubus",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q3439593"},addTags:{brand:"Cubus","brand:wikidata":"Q3439593","brand:wikipedia":"no:Cubus",name:"Cubus",shop:"clothes"},removeTags:{brand:"Cubus","brand:wikidata":"Q3439593","brand:wikipedia":"no:Cubus",name:"Cubus",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/David's Bridal":{name:"David's Bridal",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q5230388"},addTags:{brand:"David's Bridal","brand:wikidata":"Q5230388","brand:wikipedia":"en:David's Bridal",name:"David's Bridal",shop:"clothes"},removeTags:{brand:"David's Bridal","brand:wikidata":"Q5230388","brand:wikipedia":"en:David's Bridal",name:"David's Bridal",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Desigual":{name:"Desigual",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q83750"},addTags:{brand:"Desigual","brand:wikidata":"Q83750","brand:wikipedia":"en:Desigual",name:"Desigual",shop:"clothes"},removeTags:{brand:"Desigual","brand:wikidata":"Q83750","brand:wikipedia":"en:Desigual",name:"Desigual",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Devred":{name:"Devred",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q3025542"},addTags:{brand:"Devred","brand:wikidata":"Q3025542","brand:wikipedia":"fr:Devred 1902",name:"Devred",shop:"clothes"},removeTags:{brand:"Devred","brand:wikidata":"Q3025542","brand:wikipedia":"fr:Devred 1902",name:"Devred",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Diesel":{name:"Diesel",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q158285"},addTags:{brand:"Diesel","brand:wikidata":"Q158285","brand:wikipedia":"en:Diesel (brand)",name:"Diesel",shop:"clothes"},removeTags:{brand:"Diesel","brand:wikidata":"Q158285","brand:wikipedia":"en:Diesel (brand)",name:"Diesel",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Diverse":{name:"Diverse",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q11694298"},addTags:{brand:"Diverse","brand:wikidata":"Q11694298","brand:wikipedia":"pl:Diverse",name:"Diverse",shop:"clothes"},removeTags:{brand:"Diverse","brand:wikidata":"Q11694298","brand:wikipedia":"pl:Diverse",name:"Diverse",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Dorothy Perkins":{name:"Dorothy Perkins",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q5298588"},addTags:{brand:"Dorothy Perkins","brand:wikidata":"Q5298588","brand:wikipedia":"en:Dorothy Perkins",name:"Dorothy Perkins",shop:"clothes"},removeTags:{brand:"Dorothy Perkins","brand:wikidata":"Q5298588","brand:wikipedia":"en:Dorothy Perkins",name:"Dorothy Perkins",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Dress Barn":{name:"Dress Barn",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q5307031"},addTags:{brand:"Dress Barn","brand:wikidata":"Q5307031","brand:wikipedia":"en:Ascena Retail Group",name:"Dress Barn",shop:"clothes"},removeTags:{brand:"Dress Barn","brand:wikidata":"Q5307031","brand:wikipedia":"en:Ascena Retail Group",name:"Dress Barn",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Dressmann":{name:"Dressmann",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q3357081"},addTags:{brand:"Dressmann","brand:wikidata":"Q3357081","brand:wikipedia":"en:Dressmann",name:"Dressmann",shop:"clothes"},removeTags:{brand:"Dressmann","brand:wikidata":"Q3357081","brand:wikipedia":"en:Dressmann",name:"Dressmann",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Eddie Bauer":{name:"Eddie Bauer",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q842174"},addTags:{brand:"Eddie Bauer","brand:wikidata":"Q842174","brand:wikipedia":"en:Eddie Bauer",name:"Eddie Bauer",shop:"clothes"},removeTags:{brand:"Eddie Bauer","brand:wikidata":"Q842174","brand:wikipedia":"en:Eddie Bauer",name:"Eddie Bauer",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Engbers":{name:"Engbers",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q1290088"},addTags:{brand:"Engbers","brand:wikidata":"Q1290088","brand:wikipedia":"de:Engbers",name:"Engbers",shop:"clothes"},removeTags:{brand:"Engbers","brand:wikidata":"Q1290088","brand:wikipedia":"de:Engbers",name:"Engbers",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Ernsting's family":{name:"Ernsting's family",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q1361016"},addTags:{brand:"Ernsting's family","brand:wikidata":"Q1361016","brand:wikipedia":"de:Ernsting’s family",name:"Ernsting's family",shop:"clothes"},removeTags:{brand:"Ernsting's family","brand:wikidata":"Q1361016","brand:wikipedia":"de:Ernsting’s family",name:"Ernsting's family",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Esprit":{name:"Esprit",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q532746"},addTags:{brand:"Esprit","brand:wikidata":"Q532746","brand:wikipedia":"en:Esprit Holdings",name:"Esprit",shop:"clothes"},removeTags:{brand:"Esprit","brand:wikidata":"Q532746","brand:wikipedia":"en:Esprit Holdings",name:"Esprit",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Etam":{name:"Etam",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q3059202"},addTags:{brand:"Etam","brand:wikidata":"Q3059202","brand:wikipedia":"en:Etam Développement",name:"Etam",shop:"clothes"},removeTags:{brand:"Etam","brand:wikidata":"Q3059202","brand:wikipedia":"en:Etam Développement",name:"Etam",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Fat Face":{name:"Fat Face",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q5437186"},addTags:{brand:"Fat Face","brand:wikidata":"Q5437186","brand:wikipedia":"en:Fat Face",name:"Fat Face",shop:"clothes"},removeTags:{brand:"Fat Face","brand:wikidata":"Q5437186","brand:wikipedia":"en:Fat Face",name:"Fat Face",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Forever 21":{name:"Forever 21",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q1060537"},addTags:{brand:"Forever 21","brand:wikidata":"Q1060537","brand:wikipedia":"en:Forever 21",name:"Forever 21",shop:"clothes"},removeTags:{brand:"Forever 21","brand:wikidata":"Q1060537","brand:wikipedia":"en:Forever 21",name:"Forever 21",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Gant":{name:"Gant",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q1493667"},addTags:{brand:"Gant","brand:wikidata":"Q1493667","brand:wikipedia":"en:Gant (retailer)",name:"Gant",shop:"clothes"},removeTags:{brand:"Gant","brand:wikidata":"Q1493667","brand:wikipedia":"en:Gant (retailer)",name:"Gant",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Gap":{name:"Gap",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q420822"},addTags:{brand:"Gap","brand:wikidata":"Q420822","brand:wikipedia":"en:Gap Inc.",name:"Gap",shop:"clothes"},removeTags:{brand:"Gap","brand:wikidata":"Q420822","brand:wikipedia":"en:Gap Inc.",name:"Gap",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Gerry Weber":{name:"Gerry Weber",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q873447"},addTags:{brand:"Gerry Weber","brand:wikidata":"Q873447","brand:wikipedia":"en:Gerry Weber",name:"Gerry Weber",shop:"clothes"},removeTags:{brand:"Gerry Weber","brand:wikidata":"Q873447","brand:wikipedia":"en:Gerry Weber",name:"Gerry Weber",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Gina Laura":{name:"Gina Laura",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q2700576"},addTags:{brand:"Gina Laura","brand:wikidata":"Q2700576","brand:wikipedia":"de:Gina Laura",name:"Gina Laura",shop:"clothes"},removeTags:{brand:"Gina Laura","brand:wikidata":"Q2700576","brand:wikipedia":"de:Gina Laura",name:"Gina Laura",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Gucci":{name:"Gucci",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q178516"},addTags:{brand:"Gucci","brand:wikidata":"Q178516","brand:wikipedia":"en:Gucci",name:"Gucci",shop:"clothes"},removeTags:{brand:"Gucci","brand:wikidata":"Q178516","brand:wikipedia":"en:Gucci",name:"Gucci",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Guess":{name:"Guess",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q2470307"},addTags:{brand:"Guess","brand:wikidata":"Q2470307","brand:wikipedia":"en:Guess (clothing)",name:"Guess",shop:"clothes"},removeTags:{brand:"Guess","brand:wikidata":"Q2470307","brand:wikipedia":"en:Guess (clothing)",name:"Guess",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Gymboree":{name:"Gymboree",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q4039771"},addTags:{brand:"Gymboree","brand:wikidata":"Q4039771","brand:wikipedia":"en:Gymboree",name:"Gymboree",shop:"clothes"},removeTags:{brand:"Gymboree","brand:wikidata":"Q4039771","brand:wikipedia":"en:Gymboree",name:"Gymboree",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Gémo":{name:"Gémo",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q3122954"},addTags:{brand:"Gémo","brand:wikidata":"Q3122954","brand:wikipedia":"fr:Gémo",name:"Gémo",shop:"clothes"},removeTags:{brand:"Gémo","brand:wikidata":"Q3122954","brand:wikipedia":"fr:Gémo",name:"Gémo",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/H&M":{name:"H&M",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q188326"},addTags:{brand:"H&M","brand:wikidata":"Q188326","brand:wikipedia":"en:H&M",name:"H&M",shop:"clothes"},removeTags:{brand:"H&M","brand:wikidata":"Q188326","brand:wikipedia":"en:H&M",name:"H&M",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Hallhuber":{name:"Hallhuber",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q1571714"},addTags:{brand:"Hallhuber","brand:wikidata":"Q1571714","brand:wikipedia":"de:Hallhuber (Bekleidungshaus)",name:"Hallhuber",shop:"clothes"},removeTags:{brand:"Hallhuber","brand:wikidata":"Q1571714","brand:wikipedia":"de:Hallhuber (Bekleidungshaus)",name:"Hallhuber",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Hollister":{name:"Hollister",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q1257477"},addTags:{brand:"Hollister","brand:wikidata":"Q1257477","brand:wikipedia":"en:Hollister Co.",name:"Hollister",shop:"clothes"},removeTags:{brand:"Hollister","brand:wikidata":"Q1257477","brand:wikipedia":"en:Hollister Co.",name:"Hollister",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Hot Topic":{name:"Hot Topic",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q9294032"},addTags:{brand:"Hot Topic","brand:wikidata":"Q9294032","brand:wikipedia":"en:Hot Topic",name:"Hot Topic",shop:"clothes"},removeTags:{brand:"Hot Topic","brand:wikidata":"Q9294032","brand:wikipedia":"en:Hot Topic",name:"Hot Topic",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Hugo Boss":{name:"Hugo Boss",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q491627"},addTags:{brand:"Hugo Boss","brand:wikidata":"Q491627","brand:wikipedia":"en:Hugo Boss",name:"Hugo Boss",shop:"clothes"},removeTags:{brand:"Hugo Boss","brand:wikidata":"Q491627","brand:wikipedia":"en:Hugo Boss",name:"Hugo Boss",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Hunkemöller":{name:"Hunkemöller",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q2604175"},addTags:{brand:"Hunkemöller","brand:wikidata":"Q2604175","brand:wikipedia":"en:Hunkemöller",name:"Hunkemöller",shop:"clothes"},removeTags:{brand:"Hunkemöller","brand:wikidata":"Q2604175","brand:wikipedia":"en:Hunkemöller",name:"Hunkemöller",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Intimissimi":{name:"Intimissimi",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q305404"},addTags:{brand:"Intimissimi","brand:wikidata":"Q305404","brand:wikipedia":"en:Intimissimi",clothes:"underwear",name:"Intimissimi",shop:"clothes"},removeTags:{brand:"Intimissimi","brand:wikidata":"Q305404","brand:wikipedia":"en:Intimissimi",clothes:"underwear",name:"Intimissimi",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/JBC":{name:"JBC",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q2671470"},addTags:{brand:"JBC","brand:wikidata":"Q2671470","brand:wikipedia":"nl:JBC",name:"JBC",shop:"clothes"},removeTags:{brand:"JBC","brand:wikidata":"Q2671470","brand:wikipedia":"nl:JBC",name:"JBC",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Jack & Jones":{name:"Jack & Jones",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q6077665"},addTags:{brand:"Jack & Jones","brand:wikidata":"Q6077665","brand:wikipedia":"en:Jack & Jones",name:"Jack & Jones",shop:"clothes"},removeTags:{brand:"Jack & Jones","brand:wikidata":"Q6077665","brand:wikipedia":"en:Jack & Jones",name:"Jack & Jones",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Jack Wills":{name:"Jack Wills",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q6115814"},addTags:{brand:"Jack Wills","brand:wikidata":"Q6115814","brand:wikipedia":"en:Jack Wills",name:"Jack Wills",shop:"clothes"},removeTags:{brand:"Jack Wills","brand:wikidata":"Q6115814","brand:wikipedia":"en:Jack Wills",name:"Jack Wills",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Jeans Fritz":{name:"Jeans Fritz",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q1686071"},addTags:{brand:"Jeans Fritz","brand:wikidata":"Q1686071","brand:wikipedia":"de:Jeans Fritz",name:"Jeans Fritz",shop:"clothes"},removeTags:{brand:"Jeans Fritz","brand:wikidata":"Q1686071","brand:wikipedia":"de:Jeans Fritz",name:"Jeans Fritz",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Jennyfer":{name:"Jennyfer",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q3177174"},addTags:{brand:"Jennyfer","brand:wikidata":"Q3177174","brand:wikipedia":"fr:Jennyfer",name:"Jennyfer",shop:"clothes"},removeTags:{brand:"Jennyfer","brand:wikidata":"Q3177174","brand:wikipedia":"fr:Jennyfer",name:"Jennyfer",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Jigsaw":{name:"Jigsaw",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q6192383"},addTags:{brand:"Jigsaw","brand:wikidata":"Q6192383","brand:wikipedia":"en:Jigsaw (clothing retailer)",name:"Jigsaw",shop:"clothes"},removeTags:{brand:"Jigsaw","brand:wikidata":"Q6192383","brand:wikipedia":"en:Jigsaw (clothing retailer)",name:"Jigsaw",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Joules":{name:"Joules",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q25351738"},addTags:{brand:"Joules","brand:wikidata":"Q25351738","brand:wikipedia":"en:Joules (clothing)",name:"Joules",shop:"clothes"},removeTags:{brand:"Joules","brand:wikidata":"Q25351738","brand:wikipedia":"en:Joules (clothing)",name:"Joules",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/KappAhl":{name:"KappAhl",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q4349016"},addTags:{brand:"KappAhl","brand:wikidata":"Q4349016","brand:wikipedia":"sv:Kappahl",name:"KappAhl",shop:"clothes"},removeTags:{brand:"KappAhl","brand:wikidata":"Q4349016","brand:wikipedia":"sv:Kappahl",name:"KappAhl",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/KiK":{name:"KiK",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q883965"},addTags:{brand:"KiK","brand:wikidata":"Q883965","brand:wikipedia":"en:KiK",name:"KiK",shop:"clothes"},removeTags:{brand:"KiK","brand:wikidata":"Q883965","brand:wikipedia":"en:KiK",name:"KiK",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Kiabi":{name:"Kiabi",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q3196299"},addTags:{brand:"Kiabi","brand:wikidata":"Q3196299","brand:wikipedia":"fr:Kiabi",name:"Kiabi",shop:"clothes"},removeTags:{brand:"Kiabi","brand:wikidata":"Q3196299","brand:wikipedia":"fr:Kiabi",name:"Kiabi",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/LC Waikiki":{name:"LC Waikiki",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q3205965"},addTags:{brand:"LC Waikiki","brand:wikidata":"Q3205965","brand:wikipedia":"fr:LC Waikiki",name:"LC Waikiki",shop:"clothes"},removeTags:{brand:"LC Waikiki","brand:wikidata":"Q3205965","brand:wikipedia":"fr:LC Waikiki",name:"LC Waikiki",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/La Senza":{name:"La Senza",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q3212802"},addTags:{brand:"La Senza","brand:wikidata":"Q3212802","brand:wikipedia":"en:La Senza",name:"La Senza",shop:"clothes"},removeTags:{brand:"La Senza","brand:wikidata":"Q3212802","brand:wikipedia":"en:La Senza",name:"La Senza",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Lacoste":{name:"Lacoste",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q309031"},addTags:{brand:"Lacoste","brand:wikidata":"Q309031","brand:wikipedia":"en:Lacoste",name:"Lacoste",shop:"clothes"},removeTags:{brand:"Lacoste","brand:wikidata":"Q309031","brand:wikipedia":"en:Lacoste",name:"Lacoste",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Lane Bryant":{name:"Lane Bryant",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q6485350"},addTags:{brand:"Lane Bryant","brand:wikidata":"Q6485350","brand:wikipedia":"en:Lane Bryant",name:"Lane Bryant",shop:"clothes"},removeTags:{brand:"Lane Bryant","brand:wikidata":"Q6485350","brand:wikipedia":"en:Lane Bryant",name:"Lane Bryant",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Levi's":{name:"Levi's",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q127962"},addTags:{brand:"Levi's","brand:wikidata":"Q127962","brand:wikipedia":"en:Levi Strauss & Co.",name:"Levi's",shop:"clothes"},removeTags:{brand:"Levi's","brand:wikidata":"Q127962","brand:wikipedia":"en:Levi Strauss & Co.",name:"Levi's",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Lindex":{name:"Lindex",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q1786717"},addTags:{brand:"Lindex","brand:wikidata":"Q1786717","brand:wikipedia":"en:Lindex",name:"Lindex",shop:"clothes"},removeTags:{brand:"Lindex","brand:wikidata":"Q1786717","brand:wikipedia":"en:Lindex",name:"Lindex",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Louis Vuitton":{name:"Louis Vuitton",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q191485"},addTags:{brand:"Louis Vuitton","brand:wikidata":"Q191485","brand:wikipedia":"en:Louis Vuitton",name:"Louis Vuitton",shop:"clothes"},removeTags:{brand:"Louis Vuitton","brand:wikidata":"Q191485","brand:wikipedia":"en:Louis Vuitton",name:"Louis Vuitton",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/M&Co":{name:"M&Co",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q6711808"},addTags:{brand:"M&Co","brand:wikidata":"Q6711808","brand:wikipedia":"en:M&Co.",name:"M&Co",shop:"clothes"},removeTags:{brand:"M&Co","brand:wikidata":"Q6711808","brand:wikipedia":"en:M&Co.",name:"M&Co",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Mango":{name:"Mango",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q136503"},addTags:{brand:"Mango","brand:wikidata":"Q136503","brand:wikipedia":"en:Mango (retailer)",name:"Mango",shop:"clothes"},removeTags:{brand:"Mango","brand:wikidata":"Q136503","brand:wikipedia":"en:Mango (retailer)",name:"Mango",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Marc O'Polo":{name:"Marc O'Polo",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q1892752"},addTags:{brand:"Marc O'Polo","brand:wikidata":"Q1892752","brand:wikipedia":"en:Marc O'Polo",name:"Marc O'Polo",shop:"clothes"},removeTags:{brand:"Marc O'Polo","brand:wikidata":"Q1892752","brand:wikipedia":"en:Marc O'Polo",name:"Marc O'Polo",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Mark's":{name:"Mark's",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q6766373"},addTags:{brand:"Mark's","brand:wikidata":"Q6766373","brand:wikipedia":"en:Mark's",name:"Mark's",shop:"clothes"},removeTags:{brand:"Mark's","brand:wikidata":"Q6766373","brand:wikipedia":"en:Mark's",name:"Mark's",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Massimo Dutti":{name:"Massimo Dutti",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q788231"},addTags:{brand:"Massimo Dutti","brand:wikidata":"Q788231","brand:wikipedia":"en:Massimo Dutti",name:"Massimo Dutti",shop:"clothes"},removeTags:{brand:"Massimo Dutti","brand:wikidata":"Q788231","brand:wikipedia":"en:Massimo Dutti",name:"Massimo Dutti",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Matalan":{name:"Matalan",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q12061509"},addTags:{brand:"Matalan","brand:wikidata":"Q12061509","brand:wikipedia":"en:Matalan",name:"Matalan",shop:"clothes"},removeTags:{brand:"Matalan","brand:wikidata":"Q12061509","brand:wikipedia":"en:Matalan",name:"Matalan",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Maurices":{name:"Maurices",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q6793571"},addTags:{brand:"Maurices","brand:wikidata":"Q6793571","brand:wikipedia":"en:Maurices",name:"Maurices",shop:"clothes"},removeTags:{brand:"Maurices","brand:wikidata":"Q6793571","brand:wikipedia":"en:Maurices",name:"Maurices",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Max Mara":{name:"Max Mara",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q1151774"},addTags:{brand:"Max Mara","brand:wikidata":"Q1151774","brand:wikipedia":"en:Max Mara",name:"Max Mara",shop:"clothes"},removeTags:{brand:"Max Mara","brand:wikidata":"Q1151774","brand:wikipedia":"en:Max Mara",name:"Max Mara",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Men's Wearhouse":{name:"Men's Wearhouse",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q57405513"},addTags:{brand:"Men's Wearhouse","brand:wikidata":"Q57405513",name:"Men's Wearhouse",shop:"clothes"},removeTags:{brand:"Men's Wearhouse","brand:wikidata":"Q57405513",name:"Men's Wearhouse",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Mexx":{name:"Mexx",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q1837290"},addTags:{brand:"Mexx","brand:wikidata":"Q1837290","brand:wikipedia":"en:Mexx",name:"Mexx",shop:"clothes"},removeTags:{brand:"Mexx","brand:wikidata":"Q1837290","brand:wikipedia":"en:Mexx",name:"Mexx",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Michael Kors":{name:"Michael Kors",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q19572998"},addTags:{brand:"Michael Kors","brand:wikidata":"Q19572998","brand:wikipedia":"en:Michael Kors (brand)",name:"Michael Kors",shop:"clothes"},removeTags:{brand:"Michael Kors","brand:wikidata":"Q19572998","brand:wikipedia":"en:Michael Kors (brand)",name:"Michael Kors",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Monsoon":{name:"Monsoon",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q3069980"},addTags:{brand:"Monsoon","brand:wikidata":"Q3069980","brand:wikipedia":"en:Monsoon Accessorize",name:"Monsoon",shop:"clothes"},removeTags:{brand:"Monsoon","brand:wikidata":"Q3069980","brand:wikipedia":"en:Monsoon Accessorize",name:"Monsoon",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Mr Price":{name:"Mr Price",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q6929120"},addTags:{brand:"Mr Price","brand:wikidata":"Q6929120","brand:wikipedia":"en:Mr. Price",name:"Mr Price",shop:"clothes"},removeTags:{brand:"Mr Price","brand:wikidata":"Q6929120","brand:wikipedia":"en:Mr. Price",name:"Mr Price",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/NKD":{name:"NKD",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q927272"},addTags:{brand:"NKD","brand:wikidata":"Q927272","brand:wikipedia":"de:NKD",name:"NKD",shop:"clothes"},removeTags:{brand:"NKD","brand:wikidata":"Q927272","brand:wikipedia":"de:NKD",name:"NKD",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Naf Naf":{name:"Naf Naf",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q3334188"},addTags:{brand:"Naf Naf","brand:wikidata":"Q3334188","brand:wikipedia":"fr:Naf Naf",name:"Naf Naf",shop:"clothes"},removeTags:{brand:"Naf Naf","brand:wikidata":"Q3334188","brand:wikipedia":"fr:Naf Naf",name:"Naf Naf",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/New Look":{name:"New Look",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q12063852"},addTags:{brand:"New Look","brand:wikidata":"Q12063852","brand:wikipedia":"en:New Look (company)",name:"New Look",shop:"clothes"},removeTags:{brand:"New Look","brand:wikidata":"Q12063852","brand:wikipedia":"en:New Look (company)",name:"New Look",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/New Yorker":{name:"New Yorker",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q706421"},addTags:{brand:"New Yorker","brand:wikidata":"Q706421","brand:wikipedia":"en:NewYorker",name:"New Yorker",shop:"clothes"},removeTags:{brand:"New Yorker","brand:wikidata":"Q706421","brand:wikipedia":"en:NewYorker",name:"New Yorker",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Next":{name:"Next",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q246655"},addTags:{brand:"Next","brand:wikidata":"Q246655","brand:wikipedia":"en:Next plc",name:"Next",shop:"clothes"},removeTags:{brand:"Next","brand:wikidata":"Q246655","brand:wikipedia":"en:Next plc",name:"Next",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Nike":{name:"Nike",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q483915"},addTags:{brand:"Nike","brand:wikidata":"Q483915","brand:wikipedia":"en:Nike, Inc.",name:"Nike",shop:"clothes"},removeTags:{brand:"Nike","brand:wikidata":"Q483915","brand:wikipedia":"en:Nike, Inc.",name:"Nike",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Nordstrom Rack":{name:"Nordstrom Rack",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q21463374"},addTags:{brand:"Nordstrom Rack","brand:wikidata":"Q21463374","brand:wikipedia":"en:Nordstrom Rack",name:"Nordstrom Rack",shop:"clothes"},removeTags:{brand:"Nordstrom Rack","brand:wikidata":"Q21463374","brand:wikipedia":"en:Nordstrom Rack",name:"Nordstrom Rack",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/OVS":{name:"OVS",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q2042514"},addTags:{brand:"OVS","brand:wikidata":"Q2042514","brand:wikipedia":"en:OVS (company)",name:"OVS",shop:"clothes"},removeTags:{brand:"OVS","brand:wikidata":"Q2042514","brand:wikipedia":"en:OVS (company)",name:"OVS",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Okaïdi":{name:"Okaïdi",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q3350027"},addTags:{brand:"Okaïdi","brand:wikidata":"Q3350027","brand:wikipedia":"fr:Okaïdi",name:"Okaïdi",shop:"clothes"},removeTags:{brand:"Okaïdi","brand:wikidata":"Q3350027","brand:wikipedia":"fr:Okaïdi",name:"Okaïdi",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Old Navy":{name:"Old Navy",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q2735242"},addTags:{brand:"Old Navy","brand:wikidata":"Q2735242","brand:wikipedia":"en:Old Navy",name:"Old Navy",shop:"clothes"},removeTags:{brand:"Old Navy","brand:wikidata":"Q2735242","brand:wikipedia":"en:Old Navy",name:"Old Navy",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Orchestra":{name:"Orchestra",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q28042940"},addTags:{brand:"Orchestra","brand:wikidata":"Q28042940","brand:wikipedia":"fr:Orchestra Prémaman",name:"Orchestra",shop:"clothes"},removeTags:{brand:"Orchestra","brand:wikidata":"Q28042940","brand:wikipedia":"fr:Orchestra Prémaman",name:"Orchestra",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Orsay":{name:"Orsay",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q883245"},addTags:{brand:"Orsay","brand:wikidata":"Q883245","brand:wikipedia":"de:Orsay (Modeunternehmen)",name:"Orsay",shop:"clothes"},removeTags:{brand:"Orsay","brand:wikidata":"Q883245","brand:wikipedia":"de:Orsay (Modeunternehmen)",name:"Orsay",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Outfit":{name:"Outfit",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q7112061"},addTags:{brand:"Outfit","brand:wikidata":"Q7112061","brand:wikipedia":"en:Outfit (retailer)",name:"Outfit",shop:"clothes"},removeTags:{brand:"Outfit","brand:wikidata":"Q7112061","brand:wikipedia":"en:Outfit (retailer)",name:"Outfit",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Oysho":{name:"Oysho",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q3327046"},addTags:{brand:"Oysho","brand:wikidata":"Q3327046","brand:wikipedia":"en:Oysho",name:"Oysho",shop:"clothes"},removeTags:{brand:"Oysho","brand:wikidata":"Q3327046","brand:wikipedia":"en:Oysho",name:"Oysho",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Palmers":{name:"Palmers",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q1509985"},addTags:{brand:"Palmers","brand:wikidata":"Q1509985","brand:wikipedia":"de:Palmers",name:"Palmers",shop:"clothes"},removeTags:{brand:"Palmers","brand:wikidata":"Q1509985","brand:wikipedia":"de:Palmers",name:"Palmers",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Peacocks":{name:"Peacocks",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q7157762"},addTags:{brand:"Peacocks","brand:wikidata":"Q7157762","brand:wikipedia":"en:Peacocks (clothing)",name:"Peacocks",shop:"clothes"},removeTags:{brand:"Peacocks","brand:wikidata":"Q7157762","brand:wikipedia":"en:Peacocks (clothing)",name:"Peacocks",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Peek & Cloppenburg":{name:"Peek & Cloppenburg",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q2066959"},addTags:{brand:"Peek & Cloppenburg","brand:wikidata":"Q2066959","brand:wikipedia":"en:Peek & Cloppenburg",name:"Peek & Cloppenburg",shop:"clothes"},removeTags:{brand:"Peek & Cloppenburg","brand:wikidata":"Q2066959","brand:wikipedia":"en:Peek & Cloppenburg",name:"Peek & Cloppenburg",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Pep":{name:"Pep",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q7166182"},addTags:{brand:"Pep","brand:wikidata":"Q7166182","brand:wikipedia":"en:Pep (store)",name:"Pep",shop:"clothes"},removeTags:{brand:"Pep","brand:wikidata":"Q7166182","brand:wikipedia":"en:Pep (store)",name:"Pep",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Pepco":{name:"Pepco",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q11815580"},addTags:{brand:"Pepco","brand:wikidata":"Q11815580","brand:wikipedia":"pl:Pepco",name:"Pepco",shop:"clothes"},removeTags:{brand:"Pepco","brand:wikidata":"Q11815580","brand:wikipedia":"pl:Pepco",name:"Pepco",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Petit Bateau":{name:"Petit Bateau",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q3377090"},addTags:{brand:"Petit Bateau","brand:wikidata":"Q3377090","brand:wikipedia":"en:Petit Bateau",name:"Petit Bateau",shop:"clothes"},removeTags:{brand:"Petit Bateau","brand:wikidata":"Q3377090","brand:wikipedia":"en:Petit Bateau",name:"Petit Bateau",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Phase Eight":{name:"Phase Eight",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q17020730"},addTags:{brand:"Phase Eight","brand:wikidata":"Q17020730","brand:wikipedia":"en:Phase Eight",name:"Phase Eight",shop:"clothes"},removeTags:{brand:"Phase Eight","brand:wikidata":"Q17020730","brand:wikipedia":"en:Phase Eight",name:"Phase Eight",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Pimkie":{name:"Pimkie",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q1758066"},addTags:{brand:"Pimkie","brand:wikidata":"Q1758066","brand:wikipedia":"en:Pimkie",name:"Pimkie",shop:"clothes"},removeTags:{brand:"Pimkie","brand:wikidata":"Q1758066","brand:wikipedia":"en:Pimkie",name:"Pimkie",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Primark":{name:"Primark",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q137023"},addTags:{brand:"Primark","brand:wikidata":"Q137023","brand:wikipedia":"en:Primark",name:"Primark",shop:"clothes"},removeTags:{brand:"Primark","brand:wikidata":"Q137023","brand:wikipedia":"en:Primark",name:"Primark",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Promod":{name:"Promod",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q3407429"},addTags:{brand:"Promod","brand:wikidata":"Q3407429","brand:wikipedia":"en:Promod",name:"Promod",shop:"clothes"},removeTags:{brand:"Promod","brand:wikidata":"Q3407429","brand:wikipedia":"en:Promod",name:"Promod",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Pull & Bear":{name:"Pull & Bear",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q691029"},addTags:{brand:"Pull & Bear","brand:wikidata":"Q691029","brand:wikipedia":"en:Pull&Bear",name:"Pull & Bear",shop:"clothes"},removeTags:{brand:"Pull & Bear","brand:wikidata":"Q691029","brand:wikipedia":"en:Pull&Bear",name:"Pull & Bear",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Rainbow":{name:"Rainbow",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q7284708"},addTags:{brand:"Rainbow","brand:wikidata":"Q7284708","brand:wikipedia":"en:Rainbow Shops",name:"Rainbow",shop:"clothes"},removeTags:{brand:"Rainbow","brand:wikidata":"Q7284708","brand:wikipedia":"en:Rainbow Shops",name:"Rainbow",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Reitmans":{name:"Reitmans",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q7310506"},addTags:{brand:"Reitmans","brand:wikidata":"Q7310506","brand:wikipedia":"en:Reitmans",name:"Reitmans",shop:"clothes"},removeTags:{brand:"Reitmans","brand:wikidata":"Q7310506","brand:wikipedia":"en:Reitmans",name:"Reitmans",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Reserved":{name:"Reserved",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q21809354"},addTags:{brand:"Reserved","brand:wikidata":"Q21809354","brand:wikipedia":"en:Reserved (retail)",name:"Reserved",shop:"clothes"},removeTags:{brand:"Reserved","brand:wikidata":"Q21809354","brand:wikipedia":"en:Reserved (retail)",name:"Reserved",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/River Island":{name:"River Island",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q2670328"},addTags:{brand:"River Island","brand:wikidata":"Q2670328","brand:wikipedia":"en:River Island",name:"River Island",shop:"clothes"},removeTags:{brand:"River Island","brand:wikidata":"Q2670328","brand:wikipedia":"en:River Island",name:"River Island",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Ross":{name:"Ross",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q3442791"},addTags:{brand:"Ross","brand:wikidata":"Q3442791","brand:wikipedia":"en:Ross Stores",name:"Ross",shop:"clothes"},removeTags:{brand:"Ross","brand:wikidata":"Q3442791","brand:wikipedia":"en:Ross Stores",name:"Ross",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Sisley":{name:"Sisley",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q12054325"},addTags:{brand:"Sisley","brand:wikidata":"Q12054325","brand:wikipedia":"cs:Sisley",name:"Sisley",shop:"clothes"},removeTags:{brand:"Sisley","brand:wikidata":"Q12054325","brand:wikipedia":"cs:Sisley",name:"Sisley",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Springfield":{name:"Springfield",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q958209"},addTags:{brand:"Springfield","brand:wikidata":"Q958209","brand:wikipedia":"es:Springfield (cadena de tiendas)",name:"Springfield",shop:"clothes"},removeTags:{brand:"Springfield","brand:wikidata":"Q958209","brand:wikipedia":"es:Springfield (cadena de tiendas)",name:"Springfield",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Stefanel":{name:"Stefanel",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q2338087"},addTags:{brand:"Stefanel","brand:wikidata":"Q2338087","brand:wikipedia":"ro:Stefanel (companie)",name:"Stefanel",shop:"clothes"},removeTags:{brand:"Stefanel","brand:wikidata":"Q2338087","brand:wikipedia":"ro:Stefanel (companie)",name:"Stefanel",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Stradivarius":{name:"Stradivarius",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q3322945"},addTags:{brand:"Stradivarius","brand:wikidata":"Q3322945","brand:wikipedia":"en:Stradivarius (clothing brand)",name:"Stradivarius",shop:"clothes"},removeTags:{brand:"Stradivarius","brand:wikidata":"Q3322945","brand:wikipedia":"en:Stradivarius (clothing brand)",name:"Stradivarius",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Suburbia":{name:"Suburbia",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q6134992"},addTags:{brand:"Suburbia","brand:wikidata":"Q6134992","brand:wikipedia":"en:Suburbia (department store)",name:"Suburbia",shop:"clothes"},removeTags:{brand:"Suburbia","brand:wikidata":"Q6134992","brand:wikipedia":"en:Suburbia (department store)",name:"Suburbia",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Superdry":{name:"Superdry",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q1684445"},addTags:{brand:"Superdry","brand:wikidata":"Q1684445","brand:wikipedia":"en:Superdry",name:"Superdry",shop:"clothes"},removeTags:{brand:"Superdry","brand:wikidata":"Q1684445","brand:wikipedia":"en:Superdry",name:"Superdry",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/TJ Maxx":{name:"TJ Maxx",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q10860683"},addTags:{brand:"TJ Maxx","brand:wikidata":"Q10860683","brand:wikipedia":"en:TJ Maxx",name:"TJ Maxx",shop:"clothes"},removeTags:{brand:"TJ Maxx","brand:wikidata":"Q10860683","brand:wikipedia":"en:TJ Maxx",name:"TJ Maxx",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/TK Maxx":{name:"TK Maxx",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q23823668"},addTags:{brand:"TK Maxx","brand:wikidata":"Q23823668","brand:wikipedia":"en:TK Maxx",name:"TK Maxx",shop:"clothes"},removeTags:{brand:"TK Maxx","brand:wikidata":"Q23823668","brand:wikipedia":"en:TK Maxx",name:"TK Maxx",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Takko":{name:"Takko",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q1371302"},addTags:{brand:"Takko","brand:wikidata":"Q1371302","brand:wikipedia":"de:Takko",name:"Takko",shop:"clothes"},removeTags:{brand:"Takko","brand:wikidata":"Q1371302","brand:wikipedia":"de:Takko",name:"Takko",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Talbots":{name:"Talbots",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q7679064"},addTags:{brand:"Talbots","brand:wikidata":"Q7679064","brand:wikipedia":"en:Talbots",name:"Talbots",shop:"clothes"},removeTags:{brand:"Talbots","brand:wikidata":"Q7679064","brand:wikipedia":"en:Talbots",name:"Talbots",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Tally Weijl":{name:"Tally Weijl",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q689695"},addTags:{brand:"Tally Weijl","brand:wikidata":"Q689695","brand:wikipedia":"en:Tally Weijl",name:"Tally Weijl",shop:"clothes"},removeTags:{brand:"Tally Weijl","brand:wikidata":"Q689695","brand:wikipedia":"en:Tally Weijl",name:"Tally Weijl",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Tezenis":{name:"Tezenis",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q28056374"},addTags:{brand:"Tezenis","brand:wikidata":"Q28056374",name:"Tezenis",shop:"clothes"},removeTags:{brand:"Tezenis","brand:wikidata":"Q28056374",name:"Tezenis",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/The Children's Place":{name:"The Children's Place",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q3520257"},addTags:{brand:"The Children's Place","brand:wikidata":"Q3520257","brand:wikipedia":"en:The Children's Place",name:"The Children's Place",shop:"clothes"},removeTags:{brand:"The Children's Place","brand:wikidata":"Q3520257","brand:wikipedia":"en:The Children's Place",name:"The Children's Place",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/The North Face":{name:"The North Face",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q152784"},addTags:{brand:"The North Face","brand:wikidata":"Q152784","brand:wikipedia":"en:The North Face",name:"The North Face",shop:"clothes"},removeTags:{brand:"The North Face","brand:wikidata":"Q152784","brand:wikipedia":"en:The North Face",name:"The North Face",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/The Sting":{name:"The Sting",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q2518794"},addTags:{brand:"The Sting","brand:wikidata":"Q2518794","brand:wikipedia":"nl:The Sting Companies",name:"The Sting",shop:"clothes"},removeTags:{brand:"The Sting","brand:wikidata":"Q2518794","brand:wikipedia":"nl:The Sting Companies",name:"The Sting",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Timberland":{name:"Timberland",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q1539185"},addTags:{brand:"Timberland","brand:wikidata":"Q1539185","brand:wikipedia":"en:The Timberland Company",name:"Timberland",shop:"clothes"},removeTags:{brand:"Timberland","brand:wikidata":"Q1539185","brand:wikipedia":"en:The Timberland Company",name:"Timberland",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Tom Tailor":{name:"Tom Tailor",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q571206"},addTags:{brand:"Tom Tailor","brand:wikidata":"Q571206","brand:wikipedia":"en:Tom Tailor",name:"Tom Tailor",shop:"clothes"},removeTags:{brand:"Tom Tailor","brand:wikidata":"Q571206","brand:wikipedia":"en:Tom Tailor",name:"Tom Tailor",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Tommy Hilfiger":{name:"Tommy Hilfiger",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q634881"},addTags:{brand:"Tommy Hilfiger","brand:wikidata":"Q634881","brand:wikipedia":"en:Tommy Hilfiger (company)",name:"Tommy Hilfiger",shop:"clothes"},removeTags:{brand:"Tommy Hilfiger","brand:wikidata":"Q634881","brand:wikipedia":"en:Tommy Hilfiger (company)",name:"Tommy Hilfiger",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Topshop":{name:"Topshop",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q1893576"},addTags:{brand:"Topshop","brand:wikidata":"Q1893576","brand:wikipedia":"en:Topshop",name:"Topshop",shop:"clothes"},removeTags:{brand:"Topshop","brand:wikidata":"Q1893576","brand:wikipedia":"en:Topshop",name:"Topshop",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Torrid":{name:"Torrid",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q7827120"},addTags:{brand:"Torrid","brand:wikidata":"Q7827120","brand:wikipedia":"en:Torrid (clothing retailer)",name:"Torrid",shop:"clothes"},removeTags:{brand:"Torrid","brand:wikidata":"Q7827120","brand:wikipedia":"en:Torrid (clothing retailer)",name:"Torrid",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Triumph":{name:"Triumph",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q671216"},addTags:{brand:"Triumph","brand:wikidata":"Q671216","brand:wikipedia":"en:Triumph International",name:"Triumph",shop:"clothes"},removeTags:{brand:"Triumph","brand:wikidata":"Q671216","brand:wikipedia":"en:Triumph International",name:"Triumph",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Truworths":{name:"Truworths",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q24233998"},addTags:{brand:"Truworths","brand:wikidata":"Q24233998","brand:wikipedia":"en:Truworths",name:"Truworths",shop:"clothes"},removeTags:{brand:"Truworths","brand:wikidata":"Q24233998","brand:wikipedia":"en:Truworths",name:"Truworths",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Ulla Popken":{name:"Ulla Popken",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q2475146"},addTags:{brand:"Ulla Popken","brand:wikidata":"Q2475146","brand:wikipedia":"en:Ulla Popken",name:"Ulla Popken",shop:"clothes"},removeTags:{brand:"Ulla Popken","brand:wikidata":"Q2475146","brand:wikipedia":"en:Ulla Popken",name:"Ulla Popken",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Uniqlo":{name:"Uniqlo",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q26070"},addTags:{brand:"Uniqlo","brand:wikidata":"Q26070","brand:wikipedia":"en:Uniqlo",name:"Uniqlo",shop:"clothes"},removeTags:{brand:"Uniqlo","brand:wikidata":"Q26070","brand:wikipedia":"en:Uniqlo",name:"Uniqlo",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/United Colors of Benetton":{name:"United Colors of Benetton",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q817139"},addTags:{brand:"United Colors of Benetton","brand:wikidata":"Q817139","brand:wikipedia":"en:Benetton Group",name:"United Colors of Benetton",shop:"clothes"},removeTags:{brand:"United Colors of Benetton","brand:wikidata":"Q817139","brand:wikipedia":"en:Benetton Group",name:"United Colors of Benetton",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Urban Outfitters":{name:"Urban Outfitters",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q3552193"},addTags:{brand:"Urban Outfitters","brand:wikidata":"Q3552193","brand:wikipedia":"en:Urban Outfitters",name:"Urban Outfitters",shop:"clothes"},removeTags:{brand:"Urban Outfitters","brand:wikidata":"Q3552193","brand:wikipedia":"en:Urban Outfitters",name:"Urban Outfitters",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Vero Moda":{name:"Vero Moda",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q594721"},addTags:{brand:"Vero Moda","brand:wikidata":"Q594721","brand:wikipedia":"en:Bestseller (company)",name:"Vero Moda",shop:"clothes"},removeTags:{brand:"Vero Moda","brand:wikidata":"Q594721","brand:wikipedia":"en:Bestseller (company)",name:"Vero Moda",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Victoria's Secret":{name:"Victoria's Secret",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q332477"},addTags:{brand:"Victoria's Secret","brand:wikidata":"Q332477","brand:wikipedia":"en:Victoria's Secret",name:"Victoria's Secret",shop:"clothes"},removeTags:{brand:"Victoria's Secret","brand:wikidata":"Q332477","brand:wikipedia":"en:Victoria's Secret",name:"Victoria's Secret",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/WE":{name:"WE",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q1987861"},addTags:{brand:"WE","brand:wikidata":"Q1987861","brand:wikipedia":"en:WE (clothing)",name:"WE",shop:"clothes"},removeTags:{brand:"WE","brand:wikidata":"Q1987861","brand:wikipedia":"en:WE (clothing)",name:"WE",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/White House Black Market":{name:"White House Black Market",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q7994858"},addTags:{brand:"White House Black Market","brand:wikidata":"Q7994858","brand:wikipedia":"en:White House Black Market",name:"White House Black Market",shop:"clothes"},removeTags:{brand:"White House Black Market","brand:wikidata":"Q7994858","brand:wikipedia":"en:White House Black Market",name:"White House Black Market",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/White Stuff":{name:"White Stuff",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q7995442"},addTags:{brand:"White Stuff","brand:wikidata":"Q7995442","brand:wikipedia":"en:White Stuff Clothing",name:"White Stuff",shop:"clothes"},removeTags:{brand:"White Stuff","brand:wikidata":"Q7995442","brand:wikipedia":"en:White Stuff Clothing",name:"White Stuff",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Wibra":{name:"Wibra",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q943405"},addTags:{brand:"Wibra","brand:wikidata":"Q943405","brand:wikipedia":"en:Wibra",name:"Wibra",shop:"clothes"},removeTags:{brand:"Wibra","brand:wikidata":"Q943405","brand:wikipedia":"en:Wibra",name:"Wibra",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Winners":{name:"Winners",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q845257"},addTags:{brand:"Winners","brand:wikidata":"Q845257","brand:wikipedia":"en:Winners",name:"Winners",shop:"clothes"},removeTags:{brand:"Winners","brand:wikidata":"Q845257","brand:wikipedia":"en:Winners",name:"Winners",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Woolworths":{name:"Woolworths",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q8033997"},addTags:{brand:"Woolworths","brand:wikidata":"Q8033997","brand:wikipedia":"en:Woolworths (South Africa)",name:"Woolworths",shop:"clothes"},removeTags:{brand:"Woolworths","brand:wikidata":"Q8033997","brand:wikipedia":"en:Woolworths (South Africa)",name:"Woolworths",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Yamamay":{name:"Yamamay",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q2599214"},addTags:{brand:"Yamamay","brand:wikidata":"Q2599214","brand:wikipedia":"it:Yamamay",name:"Yamamay",shop:"clothes"},removeTags:{brand:"Yamamay","brand:wikidata":"Q2599214","brand:wikipedia":"it:Yamamay",name:"Yamamay",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Zara":{name:"Zara",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q147662"},addTags:{brand:"Zara","brand:wikidata":"Q147662","brand:wikipedia":"en:Zara (retailer)",name:"Zara",shop:"clothes"},removeTags:{brand:"Zara","brand:wikidata":"Q147662","brand:wikipedia":"en:Zara (retailer)",name:"Zara",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Zeeman":{name:"Zeeman",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q184399"},addTags:{brand:"Zeeman","brand:wikidata":"Q184399","brand:wikipedia":"en:Zeeman (store)",name:"Zeeman",shop:"clothes"},removeTags:{brand:"Zeeman","brand:wikidata":"Q184399","brand:wikipedia":"en:Zeeman (store)",name:"Zeeman",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Zumiez":{name:"Zumiez",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q8075252"},addTags:{brand:"Zumiez","brand:wikidata":"Q8075252","brand:wikipedia":"en:Zumiez",name:"Zumiez",shop:"clothes"},removeTags:{brand:"Zumiez","brand:wikidata":"Q8075252","brand:wikipedia":"en:Zumiez",name:"Zumiez",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/mister*lady":{name:"mister*lady",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q18640136"},addTags:{brand:"mister*lady","brand:wikidata":"Q18640136","brand:wikipedia":"de:mister*lady",name:"mister*lady",shop:"clothes"},removeTags:{brand:"mister*lady","brand:wikidata":"Q18640136","brand:wikipedia":"de:mister*lady",name:"mister*lady",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/rue21":{name:"rue21",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q7377762"},addTags:{brand:"rue21","brand:wikidata":"Q7377762","brand:wikipedia":"en:rue21",name:"rue21",shop:"clothes"},removeTags:{brand:"rue21","brand:wikidata":"Q7377762","brand:wikipedia":"en:rue21",name:"rue21",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/s.Oliver":{name:"s.Oliver",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q265056"},addTags:{brand:"s.Oliver","brand:wikidata":"Q265056","brand:wikipedia":"en:S.Oliver",name:"s.Oliver",shop:"clothes"},removeTags:{brand:"s.Oliver","brand:wikidata":"Q265056","brand:wikipedia":"en:S.Oliver",name:"s.Oliver",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/しまむら":{name:"しまむら",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q7758173"},addTags:{brand:"しまむら","brand:wikidata":"Q7758173","brand:wikipedia":"ja:しまむら",name:"しまむら",shop:"clothes"},removeTags:{brand:"しまむら","brand:wikidata":"Q7758173","brand:wikipedia":"ja:しまむら",name:"しまむら",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/ユニクロ":{name:"ユニクロ",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q26070"},addTags:{brand:"ユニクロ","brand:en":"UNIQLO","brand:wikidata":"Q26070","brand:wikipedia":"en:Uniqlo",name:"ユニクロ","name:en":"UNIQLO",shop:"clothes"},removeTags:{brand:"ユニクロ","brand:en":"UNIQLO","brand:wikidata":"Q26070","brand:wikipedia":"en:Uniqlo",name:"ユニクロ","name:en":"UNIQLO",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/ワークマン":{name:"ワークマン",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q11351660"},addTags:{brand:"ワークマン","brand:wikidata":"Q11351660","brand:wikipedia":"ja:ワークマン",name:"ワークマン",shop:"clothes"},removeTags:{brand:"ワークマン","brand:wikidata":"Q11351660","brand:wikipedia":"ja:ワークマン",name:"ワークマン",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/洋服の青山":{name:"洋服の青山",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q11661241"},addTags:{brand:"洋服の青山","brand:wikidata":"Q11661241","brand:wikipedia":"ja:青山商事",name:"洋服の青山",shop:"clothes"},removeTags:{brand:"洋服の青山","brand:wikidata":"Q11661241","brand:wikipedia":"ja:青山商事",name:"洋服の青山",shop:"clothes"},matchScore:2,suggestion:true},"shop/coffee/Nespresso":{name:"Nespresso",icon:"maki-shop",geometry:["point","area"],tags:{shop:"coffee","brand:wikidata":"Q301301"},addTags:{brand:"Nespresso","brand:wikidata":"Q301301","brand:wikipedia":"en:Nespresso",name:"Nespresso",shop:"coffee"},removeTags:{brand:"Nespresso","brand:wikidata":"Q301301","brand:wikipedia":"en:Nespresso",name:"Nespresso",shop:"coffee"},matchScore:2,suggestion:true},"shop/coffee/Tchibo":{name:"Tchibo",icon:"maki-shop",geometry:["point","area"],tags:{shop:"coffee","brand:wikidata":"Q564213"},addTags:{brand:"Tchibo","brand:wikidata":"Q564213","brand:wikipedia":"de:Tchibo",name:"Tchibo",shop:"coffee"},removeTags:{brand:"Tchibo","brand:wikidata":"Q564213","brand:wikipedia":"de:Tchibo",name:"Tchibo",shop:"coffee"},matchScore:2,suggestion:true},"shop/computer/PC World":{name:"PC World",icon:"maki-shop",geometry:["point","area"],tags:{shop:"computer","brand:wikidata":"Q7118727"},addTags:{brand:"PC World","brand:wikidata":"Q7118727","brand:wikipedia":"en:PC World (retailer)",name:"PC World",shop:"computer"},removeTags:{brand:"PC World","brand:wikidata":"Q7118727","brand:wikipedia":"en:PC World (retailer)",name:"PC World",shop:"computer"},matchScore:2,suggestion:true},"shop/confectionery/Adyar Ananda Bhavan":{name:"Adyar Ananda Bhavan",icon:"maki-confectionery",geometry:["point","area"],tags:{shop:"confectionery","brand:wikidata":"Q15178238"},addTags:{shop:"confectionery",brand:"Adyar Ananda Bhavan","brand:wikidata":"Q15178238","brand:wikipedia":"en:Adyar Ananda Bhavan",name:"Adyar Ananda Bhavan"},removeTags:{shop:"confectionery",brand:"Adyar Ananda Bhavan","brand:wikidata":"Q15178238","brand:wikipedia":"en:Adyar Ananda Bhavan",name:"Adyar Ananda Bhavan"},matchScore:2,suggestion:true},"shop/confectionery/Hussel":{name:"Hussel",icon:"maki-confectionery",geometry:["point","area"],tags:{shop:"confectionery","brand:wikidata":"Q17123688"},addTags:{brand:"Hussel","brand:wikidata":"Q17123688","brand:wikipedia":"de:Hussel",name:"Hussel",shop:"confectionery"},removeTags:{brand:"Hussel","brand:wikidata":"Q17123688","brand:wikipedia":"de:Hussel",name:"Hussel",shop:"confectionery"},matchScore:2,suggestion:true},"shop/confectionery/Thorntons":{name:"Thorntons",icon:"maki-confectionery",geometry:["point","area"],tags:{shop:"confectionery","brand:wikidata":"Q683102"},addTags:{brand:"Thorntons","brand:wikidata":"Q683102","brand:wikipedia":"en:Thorntons",name:"Thorntons",shop:"confectionery"},removeTags:{brand:"Thorntons","brand:wikidata":"Q683102","brand:wikipedia":"en:Thorntons",name:"Thorntons",shop:"confectionery"},matchScore:2,suggestion:true},"shop/confectionery/Вацак":{name:"Вацак",icon:"maki-confectionery",geometry:["point","area"],tags:{shop:"confectionery","brand:wikidata":"Q30966576"},addTags:{brand:"Вацак","brand:wikidata":"Q30966576","brand:wikipedia":"uk:Кондитерський Дім «Вацак»",name:"Вацак",shop:"confectionery"},removeTags:{brand:"Вацак","brand:wikidata":"Q30966576","brand:wikipedia":"uk:Кондитерський Дім «Вацак»",name:"Вацак",shop:"confectionery"},matchScore:2,suggestion:true},"shop/confectionery/シャトレーゼ":{name:"シャトレーゼ",icon:"maki-confectionery",geometry:["point","area"],tags:{shop:"confectionery","brand:wikidata":"Q11307696"},addTags:{brand:"シャトレーゼ","brand:wikidata":"Q11307696","brand:wikipedia":"ja:シャトレーゼ",name:"シャトレーゼ",shop:"confectionery"},removeTags:{brand:"シャトレーゼ","brand:wikidata":"Q11307696","brand:wikipedia":"ja:シャトレーゼ",name:"シャトレーゼ",shop:"confectionery"},matchScore:2,suggestion:true},"shop/convenience/7-Eleven":{name:"7-Eleven",icon:"maki-shop",geometry:["point","area"],tags:{shop:"convenience","brand:wikidata":"Q259340"},addTags:{brand:"7-Eleven","brand:wikidata":"Q259340","brand:wikipedia":"en:7-Eleven",name:"7-Eleven",shop:"convenience"},removeTags:{brand:"7-Eleven","brand:wikidata":"Q259340","brand:wikipedia":"en:7-Eleven",name:"7-Eleven",shop:"convenience"},matchScore:2,suggestion:true},"shop/convenience/8 à Huit":{name:"8 à Huit",icon:"maki-shop",geometry:["point","area"],tags:{shop:"convenience","brand:wikidata":"Q2818601"},addTags:{brand:"8 à Huit","brand:wikidata":"Q2818601","brand:wikipedia":"en:8 à Huit",name:"8 à Huit",shop:"convenience"},removeTags:{brand:"8 à Huit","brand:wikidata":"Q2818601","brand:wikipedia":"en:8 à Huit",name:"8 à Huit",shop:"convenience"},matchScore:2,suggestion:true},"shop/convenience/ABC":{name:"ABC",icon:"maki-shop",geometry:["point","area"],tags:{shop:"convenience","brand:wikidata":"Q4650251"},addTags:{brand:"ABC","brand:wikidata":"Q4650251","brand:wikipedia":"en:ABC Stores (Hawaii)",name:"ABC",shop:"convenience"},removeTags:{brand:"ABC","brand:wikidata":"Q4650251","brand:wikipedia":"en:ABC Stores (Hawaii)",name:"ABC",shop:"convenience"},matchScore:2,suggestion:true},"shop/convenience/Aibė":{name:"Aibė",icon:"maki-shop",geometry:["point","area"],tags:{shop:"convenience","brand:wikidata":"Q1022952"},addTags:{brand:"Aibė","brand:wikidata":"Q1022952","brand:wikipedia":"de:Aibė",name:"Aibė",shop:"convenience"},removeTags:{brand:"Aibė","brand:wikidata":"Q1022952","brand:wikipedia":"de:Aibė",name:"Aibė",shop:"convenience"},matchScore:2,suggestion:true},"shop/convenience/Albert Heijn to go":{name:"Albert Heijn to go",icon:"maki-shop",geometry:["point","area"],tags:{shop:"convenience","brand:wikidata":"Q1653985"},addTags:{brand:"Albert Heijn to go","brand:wikidata":"Q1653985","brand:wikipedia":"en:Albert Heijn",name:"Albert Heijn to go",shop:"convenience"},removeTags:{brand:"Albert Heijn to go","brand:wikidata":"Q1653985","brand:wikipedia":"en:Albert Heijn",name:"Albert Heijn to go",shop:"convenience"},matchScore:2,suggestion:true},"shop/convenience/Alfamidi":{name:"Alfamidi",icon:"maki-shop",geometry:["point","area"],tags:{shop:"convenience","brand:wikidata":"Q12471462"},addTags:{brand:"Alfamidi","brand:wikidata":"Q12471462","brand:wikipedia":"id:Alfamidi",name:"Alfamidi",shop:"convenience"},removeTags:{brand:"Alfamidi","brand:wikidata":"Q12471462","brand:wikipedia":"id:Alfamidi",name:"Alfamidi",shop:"convenience"},matchScore:2,suggestion:true},"shop/convenience/BP Shop":{name:"BP Shop",icon:"maki-shop",geometry:["point","area"],tags:{shop:"convenience","brand:wikidata":"Q152057"},addTags:{brand:"BP Shop","brand:wikidata":"Q152057","brand:wikipedia":"en:BP",name:"BP Shop",shop:"convenience"},removeTags:{brand:"BP Shop","brand:wikidata":"Q152057","brand:wikipedia":"en:BP",name:"BP Shop",shop:"convenience"},matchScore:2,suggestion:true},"shop/convenience/Buc-ee's":{name:"Buc-ee's",icon:"maki-shop",geometry:["point","area"],tags:{shop:"convenience","brand:wikidata":"Q4982335"},addTags:{brand:"Buc-ee's","brand:wikidata":"Q4982335","brand:wikipedia":"en:Buc-ee's",name:"Buc-ee's",shop:"convenience"},removeTags:{brand:"Buc-ee's","brand:wikidata":"Q4982335","brand:wikipedia":"en:Buc-ee's",name:"Buc-ee's",shop:"convenience"},matchScore:2,suggestion:true},"shop/convenience/COOP Jednota":{name:"COOP Jednota",icon:"maki-shop",geometry:["point","area"],tags:{shop:"convenience","brand:wikidata":"Q41629254"},addTags:{brand:"COOP Jednota","brand:wikidata":"Q41629254","brand:wikipedia":"sk:COOP Jednota Slovensko",name:"COOP Jednota",shop:"convenience"},removeTags:{brand:"COOP Jednota","brand:wikidata":"Q41629254","brand:wikipedia":"sk:COOP Jednota Slovensko",name:"COOP Jednota",shop:"convenience"},matchScore:2,suggestion:true},"shop/convenience/Circle K":{name:"Circle K",icon:"maki-shop",geometry:["point","area"],tags:{shop:"convenience","brand:wikidata":"Q3268010"},addTags:{brand:"Circle K","brand:wikidata":"Q3268010","brand:wikipedia":"en:Circle K",name:"Circle K",shop:"convenience"},removeTags:{brand:"Circle K","brand:wikidata":"Q3268010","brand:wikipedia":"en:Circle K",name:"Circle K",shop:"convenience"},matchScore:2,suggestion:true},"shop/convenience/Co-op":{name:"Co-op",icon:"maki-shop",geometry:["point","area"],tags:{shop:"convenience","brand:wikidata":"Q5440676"},addTags:{brand:"Federated Co-operatives","brand:wikidata":"Q5440676","brand:wikipedia":"en:Federated Co-operatives",name:"Co-op",shop:"convenience"},removeTags:{brand:"Federated Co-operatives","brand:wikidata":"Q5440676","brand:wikipedia":"en:Federated Co-operatives",name:"Co-op",shop:"convenience"},matchScore:2,suggestion:true},"shop/convenience/Coop Pronto":{name:"Coop Pronto",icon:"maki-shop",geometry:["point","area"],tags:{shop:"convenience","brand:wikidata":"Q1129777"},addTags:{brand:"Coop Pronto","brand:wikidata":"Q1129777","brand:wikipedia":"de:Coop Mineraloel",name:"Coop Pronto",shop:"convenience"},removeTags:{brand:"Coop Pronto","brand:wikidata":"Q1129777","brand:wikipedia":"de:Coop Mineraloel",name:"Coop Pronto",shop:"convenience"},matchScore:2,suggestion:true},"shop/convenience/FamilyMart":{name:"FamilyMart",icon:"maki-shop",geometry:["point","area"],tags:{shop:"convenience","brand:wikidata":"Q1191685"},addTags:{brand:"FamilyMart","brand:wikidata":"Q1191685","brand:wikipedia":"en:FamilyMart",name:"FamilyMart",shop:"convenience"},removeTags:{brand:"FamilyMart","brand:wikidata":"Q1191685","brand:wikipedia":"en:FamilyMart",name:"FamilyMart",shop:"convenience"},matchScore:2,suggestion:true},"shop/convenience/Four Square":{name:"Four Square",icon:"maki-shop",geometry:["point","area"],tags:{shop:"convenience","brand:wikidata":"Q5475558"},addTags:{brand:"Four Square","brand:wikidata":"Q5475558","brand:wikipedia":"en:Four Square (supermarket)",name:"Four Square",shop:"convenience"},removeTags:{brand:"Four Square","brand:wikidata":"Q5475558","brand:wikipedia":"en:Four Square (supermarket)",name:"Four Square",shop:"convenience"},matchScore:2,suggestion:true},"shop/convenience/Hasty Market":{name:"Hasty Market",icon:"maki-shop",geometry:["point","area"],tags:{shop:"convenience","brand:wikidata":"Q58022603"},addTags:{brand:"Hasty Market","brand:wikidata":"Q58022603",name:"Hasty Market",shop:"convenience"},removeTags:{brand:"Hasty Market","brand:wikidata":"Q58022603",name:"Hasty Market",shop:"convenience"},matchScore:2,suggestion:true},"shop/convenience/Intermarché Contact":{name:"Intermarché Contact",icon:"maki-shop",geometry:["point","area"],tags:{shop:"convenience","brand:wikidata":"Q3153200"},addTags:{brand:"Intermarché Contact",name:"Intermarché Contact","brand:wikidata":"Q3153200","brand:wikipedia":"fr:Intermarché",shop:"convenience"},removeTags:{brand:"Intermarché Contact",name:"Intermarché Contact","brand:wikidata":"Q3153200","brand:wikipedia":"fr:Intermarché",shop:"convenience"},matchScore:2,suggestion:true},"shop/convenience/Jacksons":{name:"Jacksons",icon:"maki-shop",geometry:["point","area"],tags:{shop:"convenience","brand:wikidata":"Q6117880"},addTags:{brand:"Jacksons","brand:wikidata":"Q6117880","brand:wikipedia":"en:Jacksons Stores",name:"Jacksons",shop:"convenience"},removeTags:{brand:"Jacksons","brand:wikidata":"Q6117880","brand:wikipedia":"en:Jacksons Stores",name:"Jacksons",shop:"convenience"},matchScore:2,suggestion:true},"shop/convenience/K-Market":{name:"K-Market",icon:"maki-shop",geometry:["point","area"],tags:{shop:"convenience","brand:wikidata":"Q11868562"},addTags:{brand:"K-Market","brand:wikidata":"Q11868562","brand:wikipedia":"fi:K-Market",name:"K-Market",shop:"convenience"},removeTags:{brand:"K-Market","brand:wikidata":"Q11868562","brand:wikipedia":"fi:K-Market",name:"K-Market",shop:"convenience"},matchScore:2,suggestion:true},"shop/convenience/Kwik Trip":{name:"Kwik Trip",icon:"maki-shop",geometry:["point","area"],tags:{shop:"convenience","brand:wikidata":"Q6450420"},addTags:{brand:"Kwik Trip","brand:wikidata":"Q6450420","brand:wikipedia":"en:Kwik Trip",name:"Kwik Trip",shop:"convenience"},removeTags:{brand:"Kwik Trip","brand:wikidata":"Q6450420","brand:wikipedia":"en:Kwik Trip",name:"Kwik Trip",shop:"convenience"},matchScore:2,suggestion:true},"shop/convenience/Lawson":{name:"Lawson",icon:"maki-shop",geometry:["point","area"],tags:{shop:"convenience","brand:wikidata":"Q1557223"},addTags:{brand:"Lawson","brand:wikidata":"Q1557223","brand:wikipedia":"en:Lawson (store)",name:"Lawson",shop:"convenience"},removeTags:{brand:"Lawson","brand:wikidata":"Q1557223","brand:wikipedia":"en:Lawson (store)",name:"Lawson",shop:"convenience"},matchScore:2,suggestion:true},"shop/convenience/Mace":{name:"Mace",icon:"maki-shop",geometry:["point","area"],tags:{shop:"convenience","brand:wikidata":"Q17089386"},addTags:{brand:"Mace","brand:wikidata":"Q17089386","brand:wikipedia":"en:Mace (shop)",name:"Mace",shop:"convenience"},removeTags:{brand:"Mace","brand:wikidata":"Q17089386","brand:wikipedia":"en:Mace (shop)",name:"Mace",shop:"convenience"},matchScore:2,suggestion:true},"shop/convenience/Marathon":{name:"Marathon",icon:"maki-shop",geometry:["point","area"],tags:{shop:"convenience","brand:wikidata":"Q458363"},addTags:{brand:"Marathon","brand:wikidata":"Q458363","brand:wikipedia":"en:Marathon Petroleum",name:"Marathon",shop:"convenience"},removeTags:{brand:"Marathon","brand:wikidata":"Q458363","brand:wikipedia":"en:Marathon Petroleum",name:"Marathon",shop:"convenience"},matchScore:2,suggestion:true},"shop/convenience/Małpka Express":{name:"Małpka Express",icon:"maki-shop",geometry:["point","area"],tags:{shop:"convenience","brand:wikidata":"Q18431946"},addTags:{brand:"Małpka Express","brand:wikidata":"Q18431946","brand:wikipedia":"en:Małpka Express",name:"Małpka Express",shop:"convenience"},removeTags:{brand:"Małpka Express","brand:wikidata":"Q18431946","brand:wikipedia":"en:Małpka Express",name:"Małpka Express",shop:"convenience"},matchScore:2,suggestion:true},"shop/convenience/McColl's":{name:"McColl's",icon:"maki-shop",geometry:["point","area"],tags:{shop:"convenience","brand:wikidata":"Q16997477"},addTags:{brand:"McColl's","brand:wikidata":"Q16997477","brand:wikipedia":"en:McColl's",name:"McColl's",shop:"convenience"},removeTags:{brand:"McColl's","brand:wikidata":"Q16997477","brand:wikipedia":"en:McColl's",name:"McColl's",shop:"convenience"},matchScore:2,suggestion:true},"shop/convenience/Migrolino":{name:"Migrolino",icon:"maki-shop",geometry:["point","area"],tags:{shop:"convenience","brand:wikidata":"Q56745088"},addTags:{brand:"Migrolino","brand:wikidata":"Q56745088","brand:wikipedia":"de:Migrolino",name:"Migrolino",shop:"convenience"},removeTags:{brand:"Migrolino","brand:wikidata":"Q56745088","brand:wikipedia":"de:Migrolino",name:"Migrolino",shop:"convenience"},matchScore:2,suggestion:true},"shop/convenience/Ministop":{name:"Ministop",icon:"maki-shop",geometry:["point","area"],tags:{shop:"convenience","brand:wikidata":"Q1038929"},addTags:{brand:"Ministop","brand:wikidata":"Q1038929","brand:wikipedia":"en:Ministop",name:"Ministop",shop:"convenience"},removeTags:{brand:"Ministop","brand:wikidata":"Q1038929","brand:wikipedia":"en:Ministop",name:"Ministop",shop:"convenience"},matchScore:2,suggestion:true},"shop/convenience/Mobil Mart":{name:"Mobil Mart",icon:"maki-shop",geometry:["point","area"],tags:{shop:"convenience","brand:wikidata":"Q3088656"},addTags:{brand:"Mobil Mart","brand:wikidata":"Q3088656","brand:wikipedia":"en:Mobil",name:"Mobil Mart",shop:"convenience"},removeTags:{brand:"Mobil Mart","brand:wikidata":"Q3088656","brand:wikipedia":"en:Mobil",name:"Mobil Mart",shop:"convenience"},matchScore:2,suggestion:true},"shop/convenience/Nisa":{name:"Nisa",icon:"maki-shop",geometry:["point","area"],tags:{shop:"convenience","brand:wikidata":"Q16999069"},addTags:{brand:"Nisa","brand:wikidata":"Q16999069","brand:wikipedia":"en:Nisa (retailer)",name:"Nisa",shop:"convenience"},removeTags:{brand:"Nisa","brand:wikidata":"Q16999069","brand:wikipedia":"en:Nisa (retailer)",name:"Nisa",shop:"convenience"},matchScore:2,suggestion:true},"shop/convenience/Nisa Local":{name:"Nisa Local",icon:"maki-shop",geometry:["point","area"],tags:{shop:"convenience","brand:wikidata":"Q16999069"},addTags:{brand:"Nisa Local","brand:wikidata":"Q16999069","brand:wikipedia":"en:Nisa (retailer)",name:"Nisa Local",shop:"convenience"},removeTags:{brand:"Nisa Local","brand:wikidata":"Q16999069","brand:wikipedia":"en:Nisa (retailer)",name:"Nisa Local",shop:"convenience"},matchScore:2,suggestion:true},"shop/convenience/OK便利商店":{name:"OK便利商店",icon:"maki-shop",geometry:["point","area"],tags:{shop:"convenience","brand:wikidata":"Q3268010"},addTags:{brand:"OK便利商店","brand:en":"Circle K","brand:wikidata":"Q3268010","brand:wikipedia":"zh:OK便利店",name:"OK便利商店","name:en":"Circle K",shop:"convenience"},removeTags:{brand:"OK便利商店","brand:en":"Circle K","brand:wikidata":"Q3268010","brand:wikipedia":"zh:OK便利店",name:"OK便利商店","name:en":"Circle K",shop:"convenience"},matchScore:2,suggestion:true},"shop/convenience/On the Run":{name:"On the Run",icon:"maki-shop",geometry:["point","area"],tags:{shop:"convenience","brand:wikidata":"Q16931259"},addTags:{brand:"On the Run","brand:wikidata":"Q16931259","brand:wikipedia":"en:On the Run (convenience store)",name:"On the Run",shop:"convenience"},removeTags:{brand:"On the Run","brand:wikidata":"Q16931259","brand:wikipedia":"en:On the Run (convenience store)",name:"On the Run",shop:"convenience"},matchScore:2,suggestion:true},"shop/convenience/Oxxo":{name:"Oxxo",icon:"maki-shop",geometry:["point","area"],tags:{shop:"convenience","brand:wikidata":"Q1342538"},addTags:{brand:"Oxxo","brand:wikidata":"Q1342538","brand:wikipedia":"es:Oxxo",name:"Oxxo",shop:"convenience"},removeTags:{brand:"Oxxo","brand:wikidata":"Q1342538","brand:wikipedia":"es:Oxxo",name:"Oxxo",shop:"convenience"},matchScore:2,suggestion:true},"shop/convenience/Plaid Pantry":{name:"Plaid Pantry",icon:"maki-shop",geometry:["point","area"],tags:{shop:"convenience","brand:wikidata":"Q7200591"},addTags:{brand:"Plaid Pantry","brand:wikidata":"Q7200591","brand:wikipedia":"en:Plaid Pantry",name:"Plaid Pantry",shop:"convenience"},removeTags:{brand:"Plaid Pantry","brand:wikidata":"Q7200591","brand:wikipedia":"en:Plaid Pantry",name:"Plaid Pantry",shop:"convenience"},matchScore:2,suggestion:true},"shop/convenience/Premier":{name:"Premier",icon:"maki-shop",geometry:["point","area"],tags:{shop:"convenience","brand:wikidata":"Q7240340"},addTags:{brand:"Premier","brand:wikidata":"Q7240340","brand:wikipedia":"en:Premier Stores",name:"Premier",shop:"convenience"},removeTags:{brand:"Premier","brand:wikidata":"Q7240340","brand:wikipedia":"en:Premier Stores",name:"Premier",shop:"convenience"},matchScore:2,suggestion:true},"shop/convenience/Sainsbury's Local":{name:"Sainsbury's Local",icon:"maki-shop",geometry:["point","area"],tags:{shop:"convenience","brand:wikidata":"Q13218434"},addTags:{brand:"Sainsbury's Local","brand:wikidata":"Q13218434","brand:wikipedia":"en:Sainsbury's Local",name:"Sainsbury's Local",shop:"convenience"},removeTags:{brand:"Sainsbury's Local","brand:wikidata":"Q13218434","brand:wikipedia":"en:Sainsbury's Local",name:"Sainsbury's Local",shop:"convenience"},matchScore:2,suggestion:true},"shop/convenience/Sheetz":{name:"Sheetz",icon:"maki-shop",geometry:["point","area"],tags:{shop:"convenience","brand:wikidata":"Q7492551"},addTags:{brand:"Sheetz","brand:wikidata":"Q7492551","brand:wikipedia":"en:Sheetz",name:"Sheetz",shop:"convenience"},removeTags:{brand:"Sheetz","brand:wikidata":"Q7492551","brand:wikipedia":"en:Sheetz",name:"Sheetz",shop:"convenience"},matchScore:2,suggestion:true},"shop/convenience/Shell Select":{name:"Shell Select",icon:"maki-shop",geometry:["point","area"],tags:{shop:"convenience","brand:wikidata":"Q154950"},addTags:{brand:"Shell Select","brand:wikidata":"Q154950","brand:wikipedia":"en:Royal Dutch Shell",name:"Shell Select",shop:"convenience"},removeTags:{brand:"Shell Select","brand:wikidata":"Q154950","brand:wikipedia":"en:Royal Dutch Shell",name:"Shell Select",shop:"convenience"},matchScore:2,suggestion:true},"shop/convenience/Siwa":{name:"Siwa",icon:"maki-shop",geometry:["point","area"],tags:{shop:"convenience","brand:wikidata":"Q11893827"},addTags:{brand:"Siwa","brand:wikidata":"Q11893827",name:"Siwa",shop:"convenience"},removeTags:{brand:"Siwa","brand:wikidata":"Q11893827",name:"Siwa",shop:"convenience"},matchScore:2,suggestion:true},"shop/convenience/Speedway":{name:"Speedway",icon:"maki-shop",geometry:["point","area"],tags:{shop:"convenience","brand:wikidata":"Q7575683"},addTags:{brand:"Speedway","brand:wikidata":"Q7575683","brand:wikipedia":"en:Speedway LLC",name:"Speedway",shop:"convenience"},removeTags:{brand:"Speedway","brand:wikidata":"Q7575683","brand:wikipedia":"en:Speedway LLC",name:"Speedway",shop:"convenience"},matchScore:2,suggestion:true},"shop/convenience/Stripes":{name:"Stripes",icon:"maki-shop",geometry:["point","area"],tags:{shop:"convenience","brand:wikidata":"Q7624135"},addTags:{brand:"Stripes","brand:wikidata":"Q7624135","brand:wikipedia":"en:Stripes Convenience Stores",name:"Stripes",shop:"convenience"},removeTags:{brand:"Stripes","brand:wikidata":"Q7624135","brand:wikipedia":"en:Stripes Convenience Stores",name:"Stripes",shop:"convenience"},matchScore:2,suggestion:true},"shop/convenience/The Co-operative Food":{name:"The Co-operative Food",icon:"maki-shop",geometry:["point","area"],tags:{shop:"convenience","brand:wikidata":"Q3277439"},addTags:{brand:"The Co-operative Food","brand:wikidata":"Q3277439","brand:wikipedia":"en:Co-op Food",name:"The Co-operative Food",shop:"convenience"},removeTags:{brand:"The Co-operative Food","brand:wikidata":"Q3277439","brand:wikipedia":"en:Co-op Food",name:"The Co-operative Food",shop:"convenience"},matchScore:2,suggestion:true},"shop/convenience/Tiger Mart":{name:"Tiger Mart",icon:"maki-shop",geometry:["point","area"],tags:{shop:"convenience","brand:wikidata":"Q57643977"},addTags:{brand:"Tiger Mart","brand:wikidata":"Q57643977",name:"Tiger Mart",shop:"convenience"},removeTags:{brand:"Tiger Mart","brand:wikidata":"Q57643977",name:"Tiger Mart",shop:"convenience"},matchScore:2,suggestion:true},"shop/convenience/United Dairy Farmers":{name:"United Dairy Farmers",icon:"maki-shop",geometry:["point","area"],tags:{shop:"convenience","brand:wikidata":"Q7887677"},addTags:{amenity:"ice_cream",brand:"United Dairy Farmers","brand:wikidata":"Q7887677","brand:wikipedia":"en:United Dairy Farmers",name:"United Dairy Farmers",shop:"convenience",short_name:"UDF"},removeTags:{amenity:"ice_cream",brand:"United Dairy Farmers","brand:wikidata":"Q7887677","brand:wikipedia":"en:United Dairy Farmers",name:"United Dairy Farmers",shop:"convenience",short_name:"UDF"},matchScore:2,suggestion:true},"shop/convenience/Utile":{name:"Utile",icon:"maki-shop",geometry:["point","area"],tags:{shop:"convenience","brand:wikidata":"Q2529029"},addTags:{brand:"Utile","brand:wikidata":"Q2529029","brand:wikipedia":"en:Système U",name:"Utile",shop:"convenience"},removeTags:{brand:"Utile","brand:wikidata":"Q2529029","brand:wikipedia":"en:Système U",name:"Utile",shop:"convenience"},matchScore:2,suggestion:true},"shop/convenience/VinMart+":{name:"VinMart+",icon:"maki-shop",geometry:["point","area"],tags:{shop:"convenience","brand:wikidata":"Q60245505"},addTags:{brand:"VinMart","brand:wikidata":"Q60245505","brand:wikipedia":"vi:VinMart",name:"VinMart+",shop:"convenience"},removeTags:{brand:"VinMart","brand:wikidata":"Q60245505","brand:wikipedia":"vi:VinMart",name:"VinMart+",shop:"convenience"},matchScore:2,suggestion:true},"shop/convenience/Wawa":{name:"Wawa",icon:"maki-shop",geometry:["point","area"],tags:{shop:"convenience","brand:wikidata":"Q5936320"},addTags:{brand:"Wawa","brand:wikidata":"Q5936320","brand:wikipedia":"en:Wawa (company)",name:"Wawa",shop:"convenience"},removeTags:{brand:"Wawa","brand:wikidata":"Q5936320","brand:wikipedia":"en:Wawa (company)",name:"Wawa",shop:"convenience"},matchScore:2,suggestion:true},"shop/convenience/Weltladen":{name:"Weltladen",icon:"maki-shop",geometry:["point","area"],tags:{shop:"convenience","brand:wikidata":"Q1640782"},addTags:{brand:"Weltladen","brand:wikidata":"Q1640782","brand:wikipedia":"de:Weltladen",name:"Weltladen",shop:"convenience"},removeTags:{brand:"Weltladen","brand:wikidata":"Q1640782","brand:wikipedia":"de:Weltladen",name:"Weltladen",shop:"convenience"},matchScore:2,suggestion:true},"shop/convenience/Woolworths Petrol":{name:"Woolworths Petrol",icon:"maki-shop",geometry:["point","area"],tags:{shop:"convenience","brand:wikidata":"Q5023980"},addTags:{brand:"Caltex","brand:wikidata":"Q5023980","brand:wikipedia":"en:Caltex Woolworths",name:"Woolworths Petrol",shop:"convenience"},removeTags:{brand:"Caltex","brand:wikidata":"Q5023980","brand:wikipedia":"en:Caltex Woolworths",name:"Woolworths Petrol",shop:"convenience"},matchScore:2,suggestion:true},"shop/convenience/abc":{name:"abc",icon:"maki-shop",geometry:["point","area"],tags:{shop:"convenience","brand:wikidata":"Q11683985"},addTags:{brand:"abc","brand:wikidata":"Q11683985","brand:wikipedia":"pl:abc (sieć handlowa)",name:"abc",shop:"convenience"},removeTags:{brand:"abc","brand:wikidata":"Q11683985","brand:wikipedia":"pl:abc (sieć handlowa)",name:"abc",shop:"convenience"},matchScore:2,suggestion:true},"shop/convenience/ampm":{name:"ampm",icon:"maki-shop",geometry:["point","area"],tags:{shop:"convenience","brand:wikidata":"Q306960"},addTags:{brand:"ampm","brand:wikidata":"Q306960","brand:wikipedia":"en:Ampm",name:"ampm",shop:"convenience"},removeTags:{brand:"ampm","brand:wikidata":"Q306960","brand:wikipedia":"en:Ampm",name:"ampm",shop:"convenience"},matchScore:2,suggestion:true},"shop/convenience/Żabka":{name:"Żabka",icon:"maki-shop",geometry:["point","area"],tags:{shop:"convenience","brand:wikidata":"Q2589061"},addTags:{brand:"Żabka","brand:wikidata":"Q2589061","brand:wikipedia":"en:Żabka (convenience store)",name:"Żabka",shop:"convenience"},removeTags:{brand:"Żabka","brand:wikidata":"Q2589061","brand:wikipedia":"en:Żabka (convenience store)",name:"Żabka",shop:"convenience"},matchScore:2,suggestion:true},"shop/convenience/ВкусВилл":{name:"ВкусВилл",icon:"maki-shop",geometry:["point","area"],tags:{shop:"convenience","brand:wikidata":"Q57271676"},addTags:{brand:"ВкусВилл","brand:wikidata":"Q57271676","brand:wikipedia":"ru:ВкусВилл",name:"ВкусВилл",shop:"convenience"},removeTags:{brand:"ВкусВилл","brand:wikidata":"Q57271676","brand:wikipedia":"ru:ВкусВилл",name:"ВкусВилл",shop:"convenience"},matchScore:2,suggestion:true},"shop/convenience/Копейка":{name:"Копейка",icon:"maki-shop",geometry:["point","area"],tags:{shop:"convenience","brand:wikidata":"Q1783878"},addTags:{brand:"Копейка","brand:en":"Kopeyka","brand:wikidata":"Q1783878","brand:wikipedia":"en:Kopeyka (supermarket)",name:"Копейка","name:en":"Kopeyka",shop:"convenience"},removeTags:{brand:"Копейка","brand:en":"Kopeyka","brand:wikidata":"Q1783878","brand:wikipedia":"en:Kopeyka (supermarket)",name:"Копейка","name:en":"Kopeyka",shop:"convenience"},matchScore:2,suggestion:true},"shop/convenience/Магнит":{name:"Магнит",icon:"maki-shop",geometry:["point","area"],tags:{shop:"convenience","brand:wikidata":"Q940518"},addTags:{brand:"Магнит","brand:en":"Magnit","brand:wikidata":"Q940518","brand:wikipedia":"ru:Магнит (сеть магазинов)",name:"Магнит","name:en":"Magnit",shop:"convenience"},removeTags:{brand:"Магнит","brand:en":"Magnit","brand:wikidata":"Q940518","brand:wikipedia":"ru:Магнит (сеть магазинов)",name:"Магнит","name:en":"Magnit",shop:"convenience"},matchScore:2,suggestion:true},"shop/convenience/Сельпо":{name:"Сельпо",icon:"maki-shop",geometry:["point","area"],tags:{shop:"convenience","brand:wikidata":"Q4419434"},addTags:{brand:"Сельпо","brand:wikidata":"Q4419434","brand:wikipedia":"ru:Сильпо",name:"Сельпо",shop:"convenience"},removeTags:{brand:"Сельпо","brand:wikidata":"Q4419434","brand:wikipedia":"ru:Сильпо",name:"Сельпо",shop:"convenience"},matchScore:2,suggestion:true},"shop/convenience/サンクス":{name:"サンクス",icon:"maki-shop",geometry:["point","area"],tags:{shop:"convenience","brand:wikidata":"Q16141064"},addTags:{brand:"サンクス","brand:en":"Sunkus","brand:wikidata":"Q16141064","brand:wikipedia":"ja:サークルKサンクス",name:"サンクス","name:en":"Sunkus",shop:"convenience"},removeTags:{brand:"サンクス","brand:en":"Sunkus","brand:wikidata":"Q16141064","brand:wikipedia":"ja:サークルKサンクス",name:"サンクス","name:en":"Sunkus",shop:"convenience"},matchScore:2,suggestion:true},"shop/convenience/サークルK":{name:"サークルK",icon:"maki-shop",geometry:["point","area"],tags:{shop:"convenience","brand:wikidata":"Q3268010"},addTags:{brand:"サークルK","brand:en":"Circle K","brand:wikidata":"Q3268010","brand:wikipedia":"en:Circle K",name:"サークルK","name:en":"Circle K",shop:"convenience"},removeTags:{brand:"サークルK","brand:en":"Circle K","brand:wikidata":"Q3268010","brand:wikipedia":"en:Circle K",name:"サークルK","name:en":"Circle K",shop:"convenience"},matchScore:2,suggestion:true},"shop/convenience/スリーエフ":{name:"スリーエフ",icon:"maki-shop",geometry:["point","area"],tags:{shop:"convenience","brand:wikidata":"Q11313419"},addTags:{brand:"スリーエフ","brand:en":"Three F","brand:wikidata":"Q11313419","brand:wikipedia":"ja:スリーエフ",name:"スリーエフ","name:en":"Three F",shop:"convenience"},removeTags:{brand:"スリーエフ","brand:en":"Three F","brand:wikidata":"Q11313419","brand:wikipedia":"ja:スリーエフ",name:"スリーエフ","name:en":"Three F",shop:"convenience"},matchScore:2,suggestion:true},"shop/convenience/セイコーマート":{name:"セイコーマート",icon:"maki-shop",geometry:["point","area"],tags:{shop:"convenience","brand:wikidata":"Q11314123"},addTags:{brand:"セイコーマート","brand:en":"Seicomart","brand:wikidata":"Q11314123","brand:wikipedia":"ja:セイコーマート",name:"セイコーマート","name:en":"Seicomart",shop:"convenience"},removeTags:{brand:"セイコーマート","brand:en":"Seicomart","brand:wikidata":"Q11314123","brand:wikipedia":"ja:セイコーマート",name:"セイコーマート","name:en":"Seicomart",shop:"convenience"},matchScore:2,suggestion:true},"shop/convenience/セブン-イレブン":{name:"セブン-イレブン",icon:"maki-shop",geometry:["point","area"],tags:{shop:"convenience","brand:wikidata":"Q259340"},addTags:{brand:"セブン-イレブン","brand:en":"7-Eleven","brand:wikidata":"Q259340","brand:wikipedia":"en:7-Eleven",name:"セブン-イレブン","name:en":"7-Eleven",shop:"convenience"},removeTags:{brand:"セブン-イレブン","brand:en":"7-Eleven","brand:wikidata":"Q259340","brand:wikipedia":"en:7-Eleven",name:"セブン-イレブン","name:en":"7-Eleven",shop:"convenience"},matchScore:2,suggestion:true},"shop/convenience/セーブオン":{name:"セーブオン",icon:"maki-shop",geometry:["point","area"],tags:{shop:"convenience","brand:wikidata":"Q11314868"},addTags:{brand:"セーブオン","brand:en":"Save On","brand:wikidata":"Q11314868","brand:wikipedia":"ja:セーブオン",name:"セーブオン","name:en":"Save On",shop:"convenience"},removeTags:{brand:"セーブオン","brand:en":"Save On","brand:wikidata":"Q11314868","brand:wikipedia":"ja:セーブオン",name:"セーブオン","name:en":"Save On",shop:"convenience"},matchScore:2,suggestion:true},"shop/convenience/デイリーヤマザキ":{name:"デイリーヤマザキ",icon:"maki-shop",geometry:["point","area"],tags:{shop:"convenience","brand:wikidata":"Q5209392"},addTags:{brand:"デイリーヤマザキ","brand:en":"Daily Yamazaki","brand:wikidata":"Q5209392","brand:wikipedia":"en:Daily Yamazaki",name:"デイリーヤマザキ","name:en":"Daily Yamazaki",shop:"convenience"},removeTags:{brand:"デイリーヤマザキ","brand:en":"Daily Yamazaki","brand:wikidata":"Q5209392","brand:wikipedia":"en:Daily Yamazaki",name:"デイリーヤマザキ","name:en":"Daily Yamazaki",shop:"convenience"},matchScore:2,suggestion:true},"shop/convenience/ファミリーマート":{name:"ファミリーマート",icon:"maki-shop",geometry:["point","area"],tags:{shop:"convenience","brand:wikidata":"Q1191685"},addTags:{brand:"ファミリーマート","brand:en":"FamilyMart","brand:wikidata":"Q1191685","brand:wikipedia":"en:FamilyMart",name:"ファミリーマート","name:en":"FamilyMart",shop:"convenience"},removeTags:{brand:"ファミリーマート","brand:en":"FamilyMart","brand:wikidata":"Q1191685","brand:wikipedia":"en:FamilyMart",name:"ファミリーマート","name:en":"FamilyMart",shop:"convenience"},matchScore:2,suggestion:true},"shop/convenience/ポプラ":{name:"ポプラ",icon:"maki-shop",geometry:["point","area"],tags:{shop:"convenience","brand:wikidata":"Q7229380"},addTags:{brand:"ポプラ","brand:wikidata":"Q7229380","brand:wikipedia":"ja:ポプラ (コンビニエンスストア)",name:"ポプラ","name:en":"Poplar",shop:"convenience"},removeTags:{brand:"ポプラ","brand:wikidata":"Q7229380","brand:wikipedia":"ja:ポプラ (コンビニエンスストア)",name:"ポプラ","name:en":"Poplar",shop:"convenience"},matchScore:2,suggestion:true},"shop/convenience/ミニストップ":{name:"ミニストップ",icon:"maki-shop",geometry:["point","area"],tags:{shop:"convenience","brand:wikidata":"Q1038929"},addTags:{brand:"ミニストップ","brand:en":"Ministop","brand:wikidata":"Q1038929","brand:wikipedia":"ja:ミニストップ",name:"ミニストップ","name:en":"Ministop",shop:"convenience"},removeTags:{brand:"ミニストップ","brand:en":"Ministop","brand:wikidata":"Q1038929","brand:wikipedia":"ja:ミニストップ",name:"ミニストップ","name:en":"Ministop",shop:"convenience"},matchScore:2,suggestion:true},"shop/convenience/ヤマザキショップ":{name:"ヤマザキショップ",icon:"maki-shop",geometry:["point","area"],tags:{shop:"convenience","brand:wikidata":"Q11345131"},addTags:{brand:"ヤマザキショップ","brand:wikidata":"Q11345131","brand:wikipedia":"ja:ヤマザキショップ",name:"ヤマザキショップ","name:en":"Yamazaki Shop",shop:"convenience"},removeTags:{brand:"ヤマザキショップ","brand:wikidata":"Q11345131","brand:wikipedia":"ja:ヤマザキショップ",name:"ヤマザキショップ","name:en":"Yamazaki Shop",shop:"convenience"},matchScore:2,suggestion:true},"shop/convenience/ローソン":{name:"ローソン",icon:"maki-shop",geometry:["point","area"],tags:{shop:"convenience","brand:wikidata":"Q1557223"},addTags:{brand:"ローソン","brand:en":"LAWSON","brand:wikidata":"Q1557223","brand:wikipedia":"ja:ローソン",name:"ローソン","name:en":"Lawson",shop:"convenience"},removeTags:{brand:"ローソン","brand:en":"LAWSON","brand:wikidata":"Q1557223","brand:wikipedia":"ja:ローソン",name:"ローソン","name:en":"Lawson",shop:"convenience"},matchScore:2,suggestion:true},"shop/convenience/ローソンストア100":{name:"ローソンストア100",icon:"maki-shop",geometry:["point","area"],tags:{shop:"convenience","brand:wikidata":"Q11350960"},addTags:{brand:"ローソンストア100","brand:wikidata":"Q11350960","brand:wikipedia":"ja:ローソンストア100",name:"ローソンストア100",shop:"convenience"},removeTags:{brand:"ローソンストア100","brand:wikidata":"Q11350960","brand:wikipedia":"ja:ローソンストア100",name:"ローソンストア100",shop:"convenience"},matchScore:2,suggestion:true},"shop/convenience/全家":{name:"全家",icon:"maki-shop",geometry:["point","area"],tags:{shop:"convenience","brand:wikidata":"Q1191685"},addTags:{brand:"全家","brand:en":"FamilyMart","brand:wikidata":"Q1191685","brand:wikipedia":"en:FamilyMart",name:"全家","name:en":"FamilyMart",shop:"convenience"},removeTags:{brand:"全家","brand:en":"FamilyMart","brand:wikidata":"Q1191685","brand:wikipedia":"en:FamilyMart",name:"全家","name:en":"FamilyMart",shop:"convenience"},matchScore:2,suggestion:true},"shop/convenience/全家便利商店":{name:"全家便利商店",icon:"maki-shop",geometry:["point","area"],tags:{shop:"convenience","brand:wikidata":"Q10891564"},addTags:{brand:"全家便利商店","brand:wikidata":"Q10891564","brand:wikipedia":"zh:全家便利商店",name:"全家便利商店",shop:"convenience"},removeTags:{brand:"全家便利商店","brand:wikidata":"Q10891564","brand:wikipedia":"zh:全家便利商店",name:"全家便利商店",shop:"convenience"},matchScore:2,suggestion:true},"shop/convenience/萊爾富":{name:"萊爾富",icon:"maki-shop",geometry:["point","area"],tags:{shop:"convenience","brand:wikidata":"Q11326216"},addTags:{brand:"萊爾富","brand:wikidata":"Q11326216","brand:wikipedia":"zh:萊爾富",name:"萊爾富",shop:"convenience"},removeTags:{brand:"萊爾富","brand:wikidata":"Q11326216","brand:wikipedia":"zh:萊爾富",name:"萊爾富",shop:"convenience"},matchScore:2,suggestion:true},"shop/convenience/세븐일레븐":{name:"세븐일레븐",icon:"maki-shop",geometry:["point","area"],tags:{shop:"convenience","brand:wikidata":"Q259340"},addTags:{brand:"세븐일레븐","brand:en":"7-Eleven","brand:wikidata":"Q259340","brand:wikipedia":"en:7-Eleven",name:"세븐일레븐","name:en":"7-Eleven",shop:"convenience"},removeTags:{brand:"세븐일레븐","brand:en":"7-Eleven","brand:wikidata":"Q259340","brand:wikipedia":"en:7-Eleven",name:"세븐일레븐","name:en":"7-Eleven",shop:"convenience"},matchScore:2,suggestion:true},"shop/copyshop/FedEx Office":{name:"FedEx Office",icon:"maki-shop",geometry:["point","area"],tags:{shop:"copyshop","brand:wikidata":"Q474379"},addTags:{brand:"FedEx Office","brand:wikidata":"Q474379","brand:wikipedia":"en:FedEx Office",name:"FedEx Office",shop:"copyshop"},removeTags:{brand:"FedEx Office","brand:wikidata":"Q474379","brand:wikipedia":"en:FedEx Office",name:"FedEx Office",shop:"copyshop"},matchScore:2,suggestion:true},"shop/cosmetics/KIKO Milano":{name:"KIKO Milano",icon:"maki-shop",geometry:["point","area"],tags:{shop:"cosmetics","brand:wikidata":"Q3812045"},addTags:{brand:"KIKO Milano","brand:wikidata":"Q3812045","brand:wikipedia":"it:KIKO",name:"KIKO Milano",shop:"cosmetics"},removeTags:{brand:"KIKO Milano","brand:wikidata":"Q3812045","brand:wikipedia":"it:KIKO",name:"KIKO Milano",shop:"cosmetics"},matchScore:2,suggestion:true},"shop/cosmetics/Lush":{name:"Lush",icon:"maki-shop",geometry:["point","area"],tags:{shop:"cosmetics","brand:wikidata":"Q1585448"},addTags:{brand:"Lush","brand:wikidata":"Q1585448","brand:wikipedia":"en:Lush (company)",name:"Lush",shop:"cosmetics"},removeTags:{brand:"Lush","brand:wikidata":"Q1585448","brand:wikipedia":"en:Lush (company)",name:"Lush",shop:"cosmetics"},matchScore:2,suggestion:true},"shop/cosmetics/Nocibé":{name:"Nocibé",icon:"maki-shop",geometry:["point","area"],tags:{shop:"cosmetics","brand:wikidata":"Q3342592"},addTags:{brand:"Nocibé","brand:wikidata":"Q3342592","brand:wikipedia":"fr:Nocibé",name:"Nocibé",shop:"cosmetics"},removeTags:{brand:"Nocibé","brand:wikidata":"Q3342592","brand:wikipedia":"fr:Nocibé",name:"Nocibé",shop:"cosmetics"},matchScore:2,suggestion:true},"shop/cosmetics/Sephora":{name:"Sephora",icon:"maki-shop",geometry:["point","area"],tags:{shop:"cosmetics","brand:wikidata":"Q2408041"},addTags:{brand:"Sephora","brand:wikidata":"Q2408041","brand:wikipedia":"en:Sephora",name:"Sephora",shop:"cosmetics"},removeTags:{brand:"Sephora","brand:wikidata":"Q2408041","brand:wikipedia":"en:Sephora",name:"Sephora",shop:"cosmetics"},matchScore:2,suggestion:true},"shop/cosmetics/The Body Shop":{name:"The Body Shop",icon:"maki-shop",geometry:["point","area"],tags:{shop:"cosmetics","brand:wikidata":"Q837851"},addTags:{brand:"The Body Shop","brand:wikidata":"Q837851","brand:wikipedia":"en:The Body Shop",name:"The Body Shop",shop:"cosmetics"},removeTags:{brand:"The Body Shop","brand:wikidata":"Q837851","brand:wikipedia":"en:The Body Shop",name:"The Body Shop",shop:"cosmetics"},matchScore:2,suggestion:true},"shop/cosmetics/Л'Этуаль":{name:"Л'Этуаль",icon:"maki-shop",geometry:["point","area"],tags:{shop:"cosmetics","brand:wikidata":"Q18400706"},addTags:{brand:"Л'Этуаль","brand:wikidata":"Q18400706","brand:wikipedia":"ru:Л’Этуаль",name:"Л'Этуаль",shop:"cosmetics"},removeTags:{brand:"Л'Этуаль","brand:wikidata":"Q18400706","brand:wikipedia":"ru:Л’Этуаль",name:"Л'Этуаль",shop:"cosmetics"},matchScore:2,suggestion:true},"shop/cosmetics/Магнит Косметик":{name:"Магнит Косметик",icon:"maki-shop",geometry:["point","area"],tags:{shop:"cosmetics","brand:wikidata":"Q940518"},addTags:{brand:"Магнит Косметик","brand:en":"Magnit Cosmetics","brand:wikidata":"Q940518","brand:wikipedia":"ru:Магнит (сеть магазинов)",name:"Магнит Косметик","name:en":"Magnit Cosmetics",shop:"cosmetics"},removeTags:{brand:"Магнит Косметик","brand:en":"Magnit Cosmetics","brand:wikidata":"Q940518","brand:wikipedia":"ru:Магнит (сеть магазинов)",name:"Магнит Косметик","name:en":"Magnit Cosmetics",shop:"cosmetics"},matchScore:2,suggestion:true},"shop/country_store/Rural King":{name:"Rural King",icon:"maki-shop",geometry:["point","area"],tags:{shop:"country_store","brand:wikidata":"Q7380525"},addTags:{brand:"Rural King","brand:wikidata":"Q7380525","brand:wikipedia":"en:Rural King",name:"Rural King",shop:"country_store"},removeTags:{brand:"Rural King","brand:wikidata":"Q7380525","brand:wikipedia":"en:Rural King",name:"Rural King",shop:"country_store"},matchScore:2,suggestion:true},"shop/country_store/Tractor Supply Company":{name:"Tractor Supply Company",icon:"maki-shop",geometry:["point","area"],tags:{shop:"country_store","brand:wikidata":"Q15109925"},addTags:{brand:"Tractor Supply Company","brand:wikidata":"Q15109925","brand:wikipedia":"en:Tractor Supply Company",name:"Tractor Supply Company",shop:"country_store"},removeTags:{brand:"Tractor Supply Company","brand:wikidata":"Q15109925","brand:wikipedia":"en:Tractor Supply Company",name:"Tractor Supply Company",shop:"country_store"},matchScore:2,suggestion:true},"shop/craft/Hobby Lobby":{name:"Hobby Lobby",icon:"maki-shop",geometry:["point","area"],tags:{shop:"craft","brand:wikidata":"Q5874938"},addTags:{brand:"Hobby Lobby","brand:wikidata":"Q5874938","brand:wikipedia":"en:Hobby Lobby",name:"Hobby Lobby",shop:"craft"},removeTags:{brand:"Hobby Lobby","brand:wikidata":"Q5874938","brand:wikipedia":"en:Hobby Lobby",name:"Hobby Lobby",shop:"craft"},matchScore:2,suggestion:true},"shop/craft/Hobbycraft":{name:"Hobbycraft",icon:"maki-shop",geometry:["point","area"],tags:{shop:"craft","brand:wikidata":"Q16984508"},addTags:{brand:"Hobbycraft","brand:wikidata":"Q16984508","brand:wikipedia":"en:Hobbycraft",name:"Hobbycraft",shop:"craft"},removeTags:{brand:"Hobbycraft","brand:wikidata":"Q16984508","brand:wikipedia":"en:Hobbycraft",name:"Hobbycraft",shop:"craft"},matchScore:2,suggestion:true},"shop/craft/Jo-Ann":{name:"Jo-Ann",icon:"maki-shop",geometry:["point","area"],tags:{shop:"craft","brand:wikidata":"Q6203968"},addTags:{brand:"Jo-Ann","brand:wikidata":"Q6203968","brand:wikipedia":"en:Jo-Ann Stores",name:"Jo-Ann",shop:"craft"},removeTags:{brand:"Jo-Ann","brand:wikidata":"Q6203968","brand:wikipedia":"en:Jo-Ann Stores",name:"Jo-Ann",shop:"craft"},matchScore:2,suggestion:true},"shop/craft/Michaels":{name:"Michaels",icon:"maki-shop",geometry:["point","area"],tags:{shop:"craft","brand:wikidata":"Q6835667"},addTags:{brand:"Michaels","brand:wikidata":"Q6835667","brand:wikipedia":"en:Michaels",name:"Michaels",shop:"craft"},removeTags:{brand:"Michaels","brand:wikidata":"Q6835667","brand:wikipedia":"en:Michaels",name:"Michaels",shop:"craft"},matchScore:2,suggestion:true},"shop/department_store/Belk":{name:"Belk",icon:"maki-shop",geometry:["point","area"],tags:{shop:"department_store","brand:wikidata":"Q127428"},addTags:{brand:"Belk","brand:wikidata":"Q127428","brand:wikipedia":"en:Belk",name:"Belk",shop:"department_store"},removeTags:{brand:"Belk","brand:wikidata":"Q127428","brand:wikipedia":"en:Belk",name:"Belk",shop:"department_store"},matchScore:2,suggestion:true},"shop/department_store/Big Lots":{name:"Big Lots",icon:"maki-shop",geometry:["point","area"],tags:{shop:"department_store","brand:wikidata":"Q4905973"},addTags:{brand:"Big Lots","brand:wikidata":"Q4905973","brand:wikipedia":"en:Big Lots",name:"Big Lots",shop:"department_store"},removeTags:{brand:"Big Lots","brand:wikidata":"Q4905973","brand:wikipedia":"en:Big Lots",name:"Big Lots",shop:"department_store"},matchScore:2,suggestion:true},"shop/department_store/Big W":{name:"Big W",icon:"maki-shop",geometry:["point","area"],tags:{shop:"department_store","brand:wikidata":"Q4906646"},addTags:{brand:"Big W","brand:wikidata":"Q4906646","brand:wikipedia":"en:Big W",name:"Big W",shop:"department_store"},removeTags:{brand:"Big W","brand:wikidata":"Q4906646","brand:wikipedia":"en:Big W",name:"Big W",shop:"department_store"},matchScore:2,suggestion:true},"shop/department_store/Canadian Tire":{name:"Canadian Tire",icon:"maki-shop",geometry:["point","area"],tags:{shop:"department_store","brand:wikidata":"Q1032400"},addTags:{brand:"Canadian Tire","brand:wikidata":"Q1032400","brand:wikipedia":"en:Canadian Tire",name:"Canadian Tire",shop:"department_store"},removeTags:{brand:"Canadian Tire","brand:wikidata":"Q1032400","brand:wikipedia":"en:Canadian Tire",name:"Canadian Tire",shop:"department_store"},matchScore:2,suggestion:true},"shop/department_store/Coppel":{name:"Coppel",icon:"maki-shop",geometry:["point","area"],tags:{shop:"department_store","brand:wikidata":"Q2497795"},addTags:{brand:"Coppel","brand:wikidata":"Q2497795","brand:wikipedia":"en:Coppel",name:"Coppel",shop:"department_store"},removeTags:{brand:"Coppel","brand:wikidata":"Q2497795","brand:wikipedia":"en:Coppel",name:"Coppel",shop:"department_store"},matchScore:2,suggestion:true},"shop/department_store/Debenhams":{name:"Debenhams",icon:"maki-shop",geometry:["point","area"],tags:{shop:"department_store","brand:wikidata":"Q1181484"},addTags:{brand:"Debenhams","brand:wikidata":"Q1181484","brand:wikipedia":"en:Debenhams",name:"Debenhams",shop:"department_store"},removeTags:{brand:"Debenhams","brand:wikidata":"Q1181484","brand:wikipedia":"en:Debenhams",name:"Debenhams",shop:"department_store"},matchScore:2,suggestion:true},"shop/department_store/Dillard's":{name:"Dillard's",icon:"maki-shop",geometry:["point","area"],tags:{shop:"department_store","brand:wikidata":"Q844805"},addTags:{brand:"Dillard's","brand:wikidata":"Q844805","brand:wikipedia":"en:Dillard's",name:"Dillard's",shop:"department_store"},removeTags:{brand:"Dillard's","brand:wikidata":"Q844805","brand:wikipedia":"en:Dillard's",name:"Dillard's",shop:"department_store"},matchScore:2,suggestion:true},"shop/department_store/El Corte Inglés":{name:"El Corte Inglés",icon:"maki-shop",geometry:["point","area"],tags:{shop:"department_store","brand:wikidata":"Q623133"},addTags:{brand:"El Corte Inglés","brand:wikidata":"Q623133","brand:wikipedia":"en:El Corte Inglés",name:"El Corte Inglés",shop:"department_store"},removeTags:{brand:"El Corte Inglés","brand:wikidata":"Q623133","brand:wikipedia":"en:El Corte Inglés",name:"El Corte Inglés",shop:"department_store"},matchScore:2,suggestion:true},"shop/department_store/Falabella":{name:"Falabella",icon:"maki-shop",geometry:["point","area"],tags:{shop:"department_store","brand:wikidata":"Q5135229"},addTags:{brand:"Falabella","brand:wikidata":"Q5135229","brand:wikipedia":"en:Falabella (retail store)",name:"Falabella",shop:"department_store"},removeTags:{brand:"Falabella","brand:wikidata":"Q5135229","brand:wikipedia":"en:Falabella (retail store)",name:"Falabella",shop:"department_store"},matchScore:2,suggestion:true},"shop/department_store/Galeria Kaufhof":{name:"Galeria Kaufhof",icon:"maki-shop",geometry:["point","area"],tags:{shop:"department_store","brand:wikidata":"Q322598"},addTags:{brand:"Galeria Kaufhof","brand:wikidata":"Q322598","brand:wikipedia":"en:Galeria Kaufhof",name:"Galeria Kaufhof",shop:"department_store"},removeTags:{brand:"Galeria Kaufhof","brand:wikidata":"Q322598","brand:wikipedia":"en:Galeria Kaufhof",name:"Galeria Kaufhof",shop:"department_store"},matchScore:2,suggestion:true},"shop/department_store/Giant Tiger":{name:"Giant Tiger",icon:"maki-shop",geometry:["point","area"],tags:{shop:"department_store","brand:wikidata":"Q5558429"},addTags:{brand:"Giant Tiger","brand:wikidata":"Q5558429","brand:wikipedia":"en:Giant Tiger",name:"Giant Tiger",shop:"department_store"},removeTags:{brand:"Giant Tiger","brand:wikidata":"Q5558429","brand:wikipedia":"en:Giant Tiger",name:"Giant Tiger",shop:"department_store"},matchScore:2,suggestion:true},"shop/department_store/HEMA":{name:"HEMA",icon:"maki-shop",geometry:["point","area"],tags:{shop:"department_store","brand:wikidata":"Q903805"},addTags:{brand:"HEMA","brand:wikidata":"Q903805","brand:wikipedia":"en:HEMA (store)",name:"HEMA",shop:"department_store"},removeTags:{brand:"HEMA","brand:wikidata":"Q903805","brand:wikipedia":"en:HEMA (store)",name:"HEMA",shop:"department_store"},matchScore:2,suggestion:true},"shop/department_store/Harvey Norman":{name:"Harvey Norman",icon:"maki-shop",geometry:["point","area"],tags:{shop:"department_store","brand:wikidata":"Q4040441"},addTags:{brand:"Harvey Norman","brand:wikidata":"Q4040441","brand:wikipedia":"en:Harvey Norman",name:"Harvey Norman",shop:"department_store"},removeTags:{brand:"Harvey Norman","brand:wikidata":"Q4040441","brand:wikipedia":"en:Harvey Norman",name:"Harvey Norman",shop:"department_store"},matchScore:2,suggestion:true},"shop/department_store/JCPenney":{name:"JCPenney",icon:"maki-shop",geometry:["point","area"],tags:{shop:"department_store","brand:wikidata":"Q920037"},addTags:{brand:"JCPenney","brand:wikidata":"Q920037","brand:wikipedia":"en:J. C. Penney",name:"JCPenney",shop:"department_store"},removeTags:{brand:"JCPenney","brand:wikidata":"Q920037","brand:wikipedia":"en:J. C. Penney",name:"JCPenney",shop:"department_store"},matchScore:2,suggestion:true},"shop/department_store/Karstadt":{name:"Karstadt",icon:"maki-shop",geometry:["point","area"],tags:{shop:"department_store","brand:wikidata":"Q182910"},addTags:{brand:"Karstadt","brand:wikidata":"Q182910","brand:wikipedia":"en:Karstadt",name:"Karstadt",shop:"department_store"},removeTags:{brand:"Karstadt","brand:wikidata":"Q182910","brand:wikipedia":"en:Karstadt",name:"Karstadt",shop:"department_store"},matchScore:2,suggestion:true},"shop/department_store/Kmart (Australia)":{name:"Kmart (Australia)",icon:"maki-shop",geometry:["point","area"],tags:{shop:"department_store","brand:wikidata":"Q6421682"},addTags:{brand:"Kmart","brand:wikidata":"Q6421682","brand:wikipedia":"en:Kmart Australia",name:"Kmart",shop:"department_store"},removeTags:{brand:"Kmart","brand:wikidata":"Q6421682","brand:wikipedia":"en:Kmart Australia",name:"Kmart",shop:"department_store"},matchScore:2,suggestion:true},"shop/department_store/Kmart (USA)":{name:"Kmart (USA)",icon:"maki-shop",geometry:["point","area"],tags:{shop:"department_store","brand:wikidata":"Q1753080"},addTags:{brand:"Kmart","brand:wikidata":"Q1753080","brand:wikipedia":"en:Kmart",name:"Kmart",shop:"department_store"},removeTags:{brand:"Kmart","brand:wikidata":"Q1753080","brand:wikipedia":"en:Kmart",name:"Kmart",shop:"department_store"},matchScore:2,suggestion:true},"shop/department_store/Kohl's":{name:"Kohl's",icon:"maki-shop",geometry:["point","area"],tags:{shop:"department_store","brand:wikidata":"Q967265"},addTags:{brand:"Kohl's","brand:wikidata":"Q967265","brand:wikipedia":"en:Kohl's",name:"Kohl's",shop:"department_store"},removeTags:{brand:"Kohl's","brand:wikidata":"Q967265","brand:wikipedia":"en:Kohl's",name:"Kohl's",shop:"department_store"},matchScore:2,suggestion:true},"shop/department_store/Lojas Americanas":{name:"Lojas Americanas",icon:"maki-shop",geometry:["point","area"],tags:{shop:"department_store","brand:wikidata":"Q3064093"},addTags:{brand:"Lojas Americanas","brand:wikidata":"Q3064093","brand:wikipedia":"en:Lojas Americanas",name:"Lojas Americanas",shop:"department_store"},removeTags:{brand:"Lojas Americanas","brand:wikidata":"Q3064093","brand:wikipedia":"en:Lojas Americanas",name:"Lojas Americanas",shop:"department_store"},matchScore:2,suggestion:true},"shop/department_store/Macy's":{name:"Macy's",icon:"maki-shop",geometry:["point","area"],tags:{shop:"department_store","brand:wikidata":"Q629269"},addTags:{brand:"Macy's","brand:wikidata":"Q629269","brand:wikipedia":"en:Macy's",name:"Macy's",shop:"department_store"},removeTags:{brand:"Macy's","brand:wikidata":"Q629269","brand:wikipedia":"en:Macy's",name:"Macy's",shop:"department_store"},matchScore:2,suggestion:true},"shop/department_store/Marks & Spencer":{name:"Marks & Spencer",icon:"maki-shop",geometry:["point","area"],tags:{shop:"department_store","brand:wikidata":"Q714491"},addTags:{brand:"Marks & Spencer","brand:wikidata":"Q714491","brand:wikipedia":"en:Marks & Spencer",name:"Marks & Spencer",shop:"department_store"},removeTags:{brand:"Marks & Spencer","brand:wikidata":"Q714491","brand:wikipedia":"en:Marks & Spencer",name:"Marks & Spencer",shop:"department_store"},matchScore:2,suggestion:true},"shop/department_store/Marshalls":{name:"Marshalls",icon:"maki-shop",geometry:["point","area"],tags:{shop:"department_store","brand:wikidata":"Q15903261"},addTags:{brand:"Marshalls","brand:wikidata":"Q15903261","brand:wikipedia":"en:Marshalls",name:"Marshalls",shop:"department_store"},removeTags:{brand:"Marshalls","brand:wikidata":"Q15903261","brand:wikipedia":"en:Marshalls",name:"Marshalls",shop:"department_store"},matchScore:2,suggestion:true},"shop/department_store/Myer":{name:"Myer",icon:"maki-shop",geometry:["point","area"],tags:{shop:"department_store","brand:wikidata":"Q1110323"},addTags:{brand:"Myer","brand:wikidata":"Q1110323","brand:wikipedia":"en:Myer",name:"Myer",shop:"department_store"},removeTags:{brand:"Myer","brand:wikidata":"Q1110323","brand:wikipedia":"en:Myer",name:"Myer",shop:"department_store"},matchScore:2,suggestion:true},"shop/department_store/Neiman Marcus":{name:"Neiman Marcus",icon:"maki-shop",geometry:["point","area"],tags:{shop:"department_store","brand:wikidata":"Q743497"},addTags:{brand:"Neiman Marcus","brand:wikidata":"Q743497","brand:wikipedia":"en:Neiman Marcus",name:"Neiman Marcus",shop:"department_store"},removeTags:{brand:"Neiman Marcus","brand:wikidata":"Q743497","brand:wikipedia":"en:Neiman Marcus",name:"Neiman Marcus",shop:"department_store"},matchScore:2,suggestion:true},"shop/department_store/Nordstrom":{name:"Nordstrom",icon:"maki-shop",geometry:["point","area"],tags:{shop:"department_store","brand:wikidata":"Q174310"},addTags:{brand:"Nordstrom","brand:wikidata":"Q174310","brand:wikipedia":"en:Nordstrom",name:"Nordstrom",shop:"department_store"},removeTags:{brand:"Nordstrom","brand:wikidata":"Q174310","brand:wikipedia":"en:Nordstrom",name:"Nordstrom",shop:"department_store"},matchScore:2,suggestion:true},"shop/department_store/Ripley":{name:"Ripley",icon:"maki-shop",geometry:["point","area"],tags:{shop:"department_store","brand:wikidata":"Q3433040"},addTags:{brand:"Ripley","brand:wikidata":"Q3433040","brand:wikipedia":"en:Ripley S.A.",name:"Ripley",shop:"department_store"},removeTags:{brand:"Ripley","brand:wikidata":"Q3433040","brand:wikipedia":"en:Ripley S.A.",name:"Ripley",shop:"department_store"},matchScore:2,suggestion:true},"shop/department_store/Saks Fifth Avenue":{name:"Saks Fifth Avenue",icon:"maki-shop",geometry:["point","area"],tags:{shop:"department_store","brand:wikidata":"Q2723882"},addTags:{brand:"Saks Fifth Avenue","brand:wikidata":"Q2723882","brand:wikipedia":"en:Saks Fifth Avenue",name:"Saks Fifth Avenue",shop:"department_store"},removeTags:{brand:"Saks Fifth Avenue","brand:wikidata":"Q2723882","brand:wikipedia":"en:Saks Fifth Avenue",name:"Saks Fifth Avenue",shop:"department_store"},matchScore:2,suggestion:true},"shop/department_store/Saks Off 5th":{name:"Saks Off 5th",icon:"maki-shop",geometry:["point","area"],tags:{shop:"department_store","brand:wikidata":"Q2723882"},addTags:{brand:"Saks Off 5th","brand:wikidata":"Q2723882","brand:wikipedia":"en:Saks Fifth Avenue",name:"Saks Off 5th",shop:"department_store"},removeTags:{brand:"Saks Off 5th","brand:wikidata":"Q2723882","brand:wikipedia":"en:Saks Fifth Avenue",name:"Saks Off 5th",shop:"department_store"},matchScore:2,suggestion:true},"shop/department_store/Sears":{name:"Sears",icon:"maki-shop",geometry:["point","area"],tags:{shop:"department_store","brand:wikidata":"Q6499202"},addTags:{brand:"Sears","brand:wikidata":"Q6499202","brand:wikipedia":"en:Sears",name:"Sears",shop:"department_store"},removeTags:{brand:"Sears","brand:wikidata":"Q6499202","brand:wikipedia":"en:Sears",name:"Sears",shop:"department_store"},matchScore:2,suggestion:true},"shop/department_store/Shopko":{name:"Shopko",icon:"maki-shop",geometry:["point","area"],tags:{shop:"department_store","brand:wikidata":"Q7501155"},addTags:{brand:"Shopko","brand:wikidata":"Q7501155","brand:wikipedia":"en:Shopko",name:"Shopko",shop:"department_store"},removeTags:{brand:"Shopko","brand:wikidata":"Q7501155","brand:wikipedia":"en:Shopko",name:"Shopko",shop:"department_store"},matchScore:2,suggestion:true},"shop/department_store/Target (Australia)":{name:"Target (Australia)",icon:"maki-shop",geometry:["point","area"],tags:{shop:"department_store","brand:wikidata":"Q7685854"},addTags:{brand:"Target","brand:wikidata":"Q7685854","brand:wikipedia":"en:Target Australia",name:"Target",shop:"department_store"},removeTags:{brand:"Target","brand:wikidata":"Q7685854","brand:wikipedia":"en:Target Australia",name:"Target",shop:"department_store"},matchScore:2,suggestion:true},"shop/department_store/Target (USA)":{name:"Target (USA)",icon:"maki-shop",geometry:["point","area"],tags:{shop:"department_store","brand:wikidata":"Q1046951"},addTags:{brand:"Target","brand:wikidata":"Q1046951","brand:wikipedia":"en:Target Corporation",name:"Target",shop:"department_store"},removeTags:{brand:"Target","brand:wikidata":"Q1046951","brand:wikipedia":"en:Target Corporation",name:"Target",shop:"department_store"},matchScore:2,suggestion:true},"shop/department_store/The Warehouse":{name:"The Warehouse",icon:"maki-shop",geometry:["point","area"],tags:{shop:"department_store","brand:wikidata":"Q3566291"},addTags:{brand:"The Warehouse","brand:wikidata":"Q3566291","brand:wikipedia":"en:The Warehouse Group",name:"The Warehouse",shop:"department_store"},removeTags:{brand:"The Warehouse","brand:wikidata":"Q3566291","brand:wikipedia":"en:The Warehouse Group",name:"The Warehouse",shop:"department_store"},matchScore:2,suggestion:true},"shop/department_store/Walmart":{name:"Walmart",icon:"maki-shop",geometry:["point","area"],tags:{shop:"department_store","brand:wikidata":"Q483551"},addTags:{brand:"Walmart","brand:wikidata":"Q483551","brand:wikipedia":"en:Walmart",name:"Walmart",operator:"Walmart","operator:wikidata":"Q483551","operator:wikipedia":"en:Walmart",shop:"department_store"},removeTags:{brand:"Walmart","brand:wikidata":"Q483551","brand:wikipedia":"en:Walmart",name:"Walmart",operator:"Walmart","operator:wikidata":"Q483551","operator:wikipedia":"en:Walmart",shop:"department_store"},matchScore:2,suggestion:true},"shop/department_store/Woolworth":{name:"Woolworth",icon:"maki-shop",geometry:["point","area"],tags:{shop:"department_store","brand:wikidata":"Q183538"},addTags:{brand:"Woolworth","brand:wikidata":"Q183538","brand:wikipedia":"de:Woolworth Deutschland",name:"Woolworth",shop:"department_store"},removeTags:{brand:"Woolworth","brand:wikidata":"Q183538","brand:wikipedia":"de:Woolworth Deutschland",name:"Woolworth",shop:"department_store"},matchScore:2,suggestion:true},"shop/department_store/Åhléns":{name:"Åhléns",icon:"maki-shop",geometry:["point","area"],tags:{shop:"department_store","brand:wikidata":"Q270851"},addTags:{brand:"Åhléns","brand:wikidata":"Q270851","brand:wikipedia":"sv:Åhléns",name:"Åhléns",shop:"department_store"},removeTags:{brand:"Åhléns","brand:wikidata":"Q270851","brand:wikipedia":"sv:Åhléns",name:"Åhléns",shop:"department_store"},matchScore:2,suggestion:true},"shop/doityourself/Ace Hardware":{name:"Ace Hardware",icon:"temaki-tools",geometry:["point","area"],tags:{shop:"doityourself","brand:wikidata":"Q4672981"},addTags:{brand:"Ace Hardware","brand:wikidata":"Q4672981","brand:wikipedia":"en:Ace Hardware",name:"Ace Hardware",shop:"doityourself"},removeTags:{brand:"Ace Hardware","brand:wikidata":"Q4672981","brand:wikipedia":"en:Ace Hardware",name:"Ace Hardware",shop:"doityourself"},matchScore:2,suggestion:true},"shop/doityourself/B&Q":{name:"B&Q",icon:"temaki-tools",geometry:["point","area"],tags:{shop:"doityourself","brand:wikidata":"Q707602"},addTags:{brand:"B&Q","brand:wikidata":"Q707602","brand:wikipedia":"en:B&Q",name:"B&Q",shop:"doityourself"},removeTags:{brand:"B&Q","brand:wikidata":"Q707602","brand:wikipedia":"en:B&Q",name:"B&Q",shop:"doityourself"},matchScore:2,suggestion:true},"shop/doityourself/Bauhaus":{name:"Bauhaus",icon:"temaki-tools",geometry:["point","area"],tags:{shop:"doityourself","brand:wikidata":"Q672043"},addTags:{brand:"Bauhaus","brand:wikidata":"Q672043","brand:wikipedia":"en:Bauhaus (company)",name:"Bauhaus",shop:"doityourself"},removeTags:{brand:"Bauhaus","brand:wikidata":"Q672043","brand:wikipedia":"en:Bauhaus (company)",name:"Bauhaus",shop:"doityourself"},matchScore:2,suggestion:true},"shop/doityourself/Biltema":{name:"Biltema",icon:"temaki-tools",geometry:["point","area"],tags:{shop:"doityourself","brand:wikidata":"Q3355552"},addTags:{brand:"Biltema","brand:wikidata":"Q3355552","brand:wikipedia":"en:Biltema",name:"Biltema",shop:"doityourself"},removeTags:{brand:"Biltema","brand:wikidata":"Q3355552","brand:wikipedia":"en:Biltema",name:"Biltema",shop:"doityourself"},matchScore:2,suggestion:true},"shop/doityourself/Brico":{name:"Brico",icon:"temaki-tools",geometry:["point","area"],tags:{shop:"doityourself","brand:wikidata":"Q2510786"},addTags:{brand:"Brico","brand:wikidata":"Q2510786","brand:wikipedia":"en:Brico",name:"Brico",shop:"doityourself"},removeTags:{brand:"Brico","brand:wikidata":"Q2510786","brand:wikipedia":"en:Brico",name:"Brico",shop:"doityourself"},matchScore:2,suggestion:true},"shop/doityourself/Brico Dépôt":{name:"Brico Dépôt",icon:"temaki-tools",geometry:["point","area"],tags:{shop:"doityourself","brand:wikidata":"Q2889702"},addTags:{brand:"Brico Dépôt","brand:wikidata":"Q2889702","brand:wikipedia":"en:Brico Dépôt",name:"Brico Dépôt",shop:"doityourself"},removeTags:{brand:"Brico Dépôt","brand:wikidata":"Q2889702","brand:wikipedia":"en:Brico Dépôt",name:"Brico Dépôt",shop:"doityourself"},matchScore:2,suggestion:true},"shop/doityourself/Bricoman":{name:"Bricoman",icon:"temaki-tools",geometry:["point","area"],tags:{shop:"doityourself","brand:wikidata":"Q2925142"},addTags:{brand:"Bricoman","brand:wikidata":"Q2925142","brand:wikipedia":"it:Bricoman",name:"Bricoman",shop:"doityourself"},removeTags:{brand:"Bricoman","brand:wikidata":"Q2925142","brand:wikipedia":"it:Bricoman",name:"Bricoman",shop:"doityourself"},matchScore:2,suggestion:true},"shop/doityourself/Bricomarché":{name:"Bricomarché",icon:"temaki-tools",geometry:["point","area"],tags:{shop:"doityourself","brand:wikidata":"Q2925147"},addTags:{brand:"Bricomarché","brand:wikidata":"Q2925147","brand:wikipedia":"en:Bricomarché",name:"Bricomarché",shop:"doityourself"},removeTags:{brand:"Bricomarché","brand:wikidata":"Q2925147","brand:wikipedia":"en:Bricomarché",name:"Bricomarché",shop:"doityourself"},matchScore:2,suggestion:true},"shop/doityourself/Bricorama":{name:"Bricorama",icon:"temaki-tools",geometry:["point","area"],tags:{shop:"doityourself","brand:wikidata":"Q2925146"},addTags:{brand:"Bricorama","brand:wikidata":"Q2925146","brand:wikipedia":"en:Bricorama",name:"Bricorama",shop:"doityourself"},removeTags:{brand:"Bricorama","brand:wikidata":"Q2925146","brand:wikipedia":"en:Bricorama",name:"Bricorama",shop:"doityourself"},matchScore:2,suggestion:true},"shop/doityourself/Bunnings Warehouse":{name:"Bunnings Warehouse",icon:"temaki-tools",geometry:["point","area"],tags:{shop:"doityourself","brand:wikidata":"Q4997829"},addTags:{brand:"Bunnings Warehouse","brand:wikidata":"Q4997829","brand:wikipedia":"en:Bunnings Warehouse",name:"Bunnings Warehouse",shop:"doityourself"},removeTags:{brand:"Bunnings Warehouse","brand:wikidata":"Q4997829","brand:wikipedia":"en:Bunnings Warehouse",name:"Bunnings Warehouse",shop:"doityourself"},matchScore:2,suggestion:true},"shop/doityourself/Castorama":{name:"Castorama",icon:"temaki-tools",geometry:["point","area"],tags:{shop:"doityourself","brand:wikidata":"Q966971"},addTags:{brand:"Castorama","brand:wikidata":"Q966971","brand:wikipedia":"en:Castorama",name:"Castorama",shop:"doityourself"},removeTags:{brand:"Castorama","brand:wikidata":"Q966971","brand:wikipedia":"en:Castorama",name:"Castorama",shop:"doityourself"},matchScore:2,suggestion:true},"shop/doityourself/Clas Ohlson":{name:"Clas Ohlson",icon:"temaki-tools",geometry:["point","area"],tags:{shop:"doityourself","brand:wikidata":"Q3356220"},addTags:{brand:"Clas Ohlson","brand:wikidata":"Q3356220","brand:wikipedia":"en:Clas Ohlson",name:"Clas Ohlson",shop:"doityourself"},removeTags:{brand:"Clas Ohlson","brand:wikidata":"Q3356220","brand:wikipedia":"en:Clas Ohlson",name:"Clas Ohlson",shop:"doityourself"},matchScore:2,suggestion:true},"shop/doityourself/Easy":{name:"Easy",icon:"temaki-tools",geometry:["point","area"],tags:{shop:"doityourself","brand:wikidata":"Q5331091"},addTags:{brand:"Easy","brand:wikidata":"Q5331091","brand:wikipedia":"en:Easy (store)",name:"Easy",shop:"doityourself"},removeTags:{brand:"Easy","brand:wikidata":"Q5331091","brand:wikipedia":"en:Easy (store)",name:"Easy",shop:"doityourself"},matchScore:2,suggestion:true},"shop/doityourself/Gamma":{name:"Gamma",icon:"temaki-tools",geometry:["point","area"],tags:{shop:"doityourself","brand:wikidata":"Q2294120"},addTags:{brand:"Gamma","brand:wikidata":"Q2294120","brand:wikipedia":"en:Gamma (store)",name:"Gamma",shop:"doityourself"},removeTags:{brand:"Gamma","brand:wikidata":"Q2294120","brand:wikipedia":"en:Gamma (store)",name:"Gamma",shop:"doityourself"},matchScore:2,suggestion:true},"shop/doityourself/Globus Baumarkt":{name:"Globus Baumarkt",icon:"temaki-tools",geometry:["point","area"],tags:{shop:"doityourself","brand:wikidata":"Q457503"},addTags:{brand:"Globus Baumarkt","brand:wikidata":"Q457503","brand:wikipedia":"de:Globus Holding",name:"Globus Baumarkt",shop:"doityourself"},removeTags:{brand:"Globus Baumarkt","brand:wikidata":"Q457503","brand:wikipedia":"de:Globus Holding",name:"Globus Baumarkt",shop:"doityourself"},matchScore:2,suggestion:true},"shop/doityourself/Hagebaumarkt":{name:"Hagebaumarkt",icon:"temaki-tools",geometry:["point","area"],tags:{shop:"doityourself","brand:wikidata":"Q1568279"},addTags:{brand:"Hagebaumarkt","brand:wikidata":"Q1568279","brand:wikipedia":"de:Hagebau",name:"Hagebaumarkt",shop:"doityourself"},removeTags:{brand:"Hagebaumarkt","brand:wikidata":"Q1568279","brand:wikipedia":"de:Hagebau",name:"Hagebaumarkt",shop:"doityourself"},matchScore:2,suggestion:true},"shop/doityourself/Hammer":{name:"Hammer",icon:"temaki-tools",geometry:["point","area"],tags:{shop:"doityourself","brand:wikidata":"Q52159668"},addTags:{brand:"Hammer","brand:wikidata":"Q52159668","brand:wikipedia":"de:Hammer (Fachmarktkette)",name:"Hammer",shop:"doityourself"},removeTags:{brand:"Hammer","brand:wikidata":"Q52159668","brand:wikipedia":"de:Hammer (Fachmarktkette)",name:"Hammer",shop:"doityourself"},matchScore:2,suggestion:true},"shop/doityourself/Hellweg":{name:"Hellweg",icon:"temaki-tools",geometry:["point","area"],tags:{shop:"doityourself","brand:wikidata":"Q1603084"},addTags:{brand:"Hellweg","brand:wikidata":"Q1603084","brand:wikipedia":"de:Hellweg (Baumarkt)",name:"Hellweg",shop:"doityourself"},removeTags:{brand:"Hellweg","brand:wikidata":"Q1603084","brand:wikipedia":"de:Hellweg (Baumarkt)",name:"Hellweg",shop:"doityourself"},matchScore:2,suggestion:true},"shop/doityourself/Home Depot":{name:"Home Depot",icon:"temaki-tools",geometry:["point","area"],tags:{shop:"doityourself","brand:wikidata":"Q864407"},addTags:{brand:"Home Depot","brand:wikidata":"Q864407","brand:wikipedia":"en:The Home Depot",name:"Home Depot",shop:"doityourself"},removeTags:{brand:"Home Depot","brand:wikidata":"Q864407","brand:wikipedia":"en:The Home Depot",name:"Home Depot",shop:"doityourself"},matchScore:2,suggestion:true},"shop/doityourself/Homebase":{name:"Homebase",icon:"temaki-tools",geometry:["point","area"],tags:{shop:"doityourself","brand:wikidata":"Q9293447"},addTags:{brand:"Homebase","brand:wikidata":"Q9293447","brand:wikipedia":"en:Homebase",name:"Homebase",shop:"doityourself"},removeTags:{brand:"Homebase","brand:wikidata":"Q9293447","brand:wikipedia":"en:Homebase",name:"Homebase",shop:"doityourself"},matchScore:2,suggestion:true},"shop/doityourself/Hornbach":{name:"Hornbach",icon:"temaki-tools",geometry:["point","area"],tags:{shop:"doityourself","brand:wikidata":"Q685926"},addTags:{brand:"Hornbach","brand:wikidata":"Q685926","brand:wikipedia":"en:Hornbach (retailer)",name:"Hornbach",shop:"doityourself"},removeTags:{brand:"Hornbach","brand:wikidata":"Q685926","brand:wikipedia":"en:Hornbach (retailer)",name:"Hornbach",shop:"doityourself"},matchScore:2,suggestion:true},"shop/doityourself/Hubo":{name:"Hubo",icon:"temaki-tools",geometry:["point","area"],tags:{shop:"doityourself","brand:wikidata":"Q3142153"},addTags:{brand:"Hubo","brand:wikidata":"Q3142153","brand:wikipedia":"en:Hubo Belgium",name:"Hubo",shop:"doityourself"},removeTags:{brand:"Hubo","brand:wikidata":"Q3142153","brand:wikipedia":"en:Hubo Belgium",name:"Hubo",shop:"doityourself"},matchScore:2,suggestion:true},"shop/doityourself/Jewson":{name:"Jewson",icon:"temaki-tools",geometry:["point","area"],tags:{shop:"doityourself","brand:wikidata":"Q6190226"},addTags:{brand:"Jewson","brand:wikidata":"Q6190226","brand:wikipedia":"en:Jewson",name:"Jewson",shop:"doityourself"},removeTags:{brand:"Jewson","brand:wikidata":"Q6190226","brand:wikipedia":"en:Jewson",name:"Jewson",shop:"doityourself"},matchScore:2,suggestion:true},"shop/doityourself/Karwei":{name:"Karwei",icon:"temaki-tools",geometry:["point","area"],tags:{shop:"doityourself","brand:wikidata":"Q2097480"},addTags:{brand:"Karwei","brand:wikidata":"Q2097480","brand:wikipedia":"en:Karwei",name:"Karwei",shop:"doityourself"},removeTags:{brand:"Karwei","brand:wikidata":"Q2097480","brand:wikipedia":"en:Karwei",name:"Karwei",shop:"doityourself"},matchScore:2,suggestion:true},"shop/doityourself/Lagerhaus":{name:"Lagerhaus",icon:"temaki-tools",geometry:["point","area"],tags:{shop:"doityourself","brand:wikidata":"Q10553211"},addTags:{brand:"Lagerhaus","brand:wikidata":"Q10553211","brand:wikipedia":"sv:Lagerhaus",name:"Lagerhaus",shop:"doityourself"},removeTags:{brand:"Lagerhaus","brand:wikidata":"Q10553211","brand:wikipedia":"sv:Lagerhaus",name:"Lagerhaus",shop:"doityourself"},matchScore:2,suggestion:true},"shop/doityourself/Leroy Merlin":{name:"Leroy Merlin",icon:"temaki-tools",geometry:["point","area"],tags:{shop:"doityourself","brand:wikidata":"Q889624"},addTags:{brand:"Leroy Merlin","brand:wikidata":"Q889624","brand:wikipedia":"en:Leroy Merlin",name:"Leroy Merlin",shop:"doityourself"},removeTags:{brand:"Leroy Merlin","brand:wikidata":"Q889624","brand:wikipedia":"en:Leroy Merlin",name:"Leroy Merlin",shop:"doityourself"},matchScore:2,suggestion:true},"shop/doityourself/Lowe's":{name:"Lowe's",icon:"temaki-tools",geometry:["point","area"],tags:{shop:"doityourself","brand:wikidata":"Q1373493"},addTags:{brand:"Lowe's","brand:wikidata":"Q1373493","brand:wikipedia":"en:Lowe's",name:"Lowe's",shop:"doityourself"},removeTags:{brand:"Lowe's","brand:wikidata":"Q1373493","brand:wikipedia":"en:Lowe's",name:"Lowe's",shop:"doityourself"},matchScore:2,suggestion:true},"shop/doityourself/Menards":{name:"Menards",icon:"temaki-tools",geometry:["point","area"],tags:{shop:"doityourself","brand:wikidata":"Q1639897"},addTags:{brand:"Menards","brand:wikidata":"Q1639897","brand:wikipedia":"en:Menards",name:"Menards",shop:"doityourself"},removeTags:{brand:"Menards","brand:wikidata":"Q1639897","brand:wikipedia":"en:Menards",name:"Menards",shop:"doityourself"},matchScore:2,suggestion:true},"shop/doityourself/Mr.Bricolage":{name:"Mr.Bricolage",icon:"temaki-tools",geometry:["point","area"],tags:{shop:"doityourself","brand:wikidata":"Q3141657"},addTags:{brand:"Mr.Bricolage","brand:wikidata":"Q3141657","brand:wikipedia":"fr:Mr Bricolage",name:"Mr.Bricolage",shop:"doityourself"},removeTags:{brand:"Mr.Bricolage","brand:wikidata":"Q3141657","brand:wikipedia":"fr:Mr Bricolage",name:"Mr.Bricolage",shop:"doityourself"},matchScore:2,suggestion:true},"shop/doityourself/OBI":{name:"OBI",icon:"temaki-tools",geometry:["point","area"],tags:{shop:"doityourself","brand:wikidata":"Q300518"},addTags:{brand:"OBI","brand:wikidata":"Q300518","brand:wikipedia":"en:Obi (store)",name:"OBI",shop:"doityourself"},removeTags:{brand:"OBI","brand:wikidata":"Q300518","brand:wikipedia":"en:Obi (store)",name:"OBI",shop:"doityourself"},matchScore:2,suggestion:true},"shop/doityourself/Point P":{name:"Point P",icon:"temaki-tools",geometry:["point","area"],tags:{shop:"doityourself","brand:wikidata":"Q3393350"},addTags:{brand:"Point P","brand:wikidata":"Q3393350","brand:wikipedia":"fr:Saint-Gobain Distribution Bâtiment France",name:"Point P",shop:"doityourself"},removeTags:{brand:"Point P","brand:wikidata":"Q3393350","brand:wikipedia":"fr:Saint-Gobain Distribution Bâtiment France",name:"Point P",shop:"doityourself"},matchScore:2,suggestion:true},"shop/doityourself/Praktiker":{name:"Praktiker",icon:"temaki-tools",geometry:["point","area"],tags:{shop:"doityourself","brand:wikidata":"Q680214"},addTags:{brand:"Praktiker","brand:wikidata":"Q680214","brand:wikipedia":"en:Praktiker",name:"Praktiker",shop:"doityourself"},removeTags:{brand:"Praktiker","brand:wikidata":"Q680214","brand:wikipedia":"en:Praktiker",name:"Praktiker",shop:"doityourself"},matchScore:2,suggestion:true},"shop/doityourself/Praxis":{name:"Praxis",icon:"temaki-tools",geometry:["point","area"],tags:{shop:"doityourself","brand:wikidata":"Q2741995"},addTags:{brand:"Praxis","brand:wikidata":"Q2741995","brand:wikipedia":"nl:Praxis (winkel)",name:"Praxis",shop:"doityourself"},removeTags:{brand:"Praxis","brand:wikidata":"Q2741995","brand:wikipedia":"nl:Praxis (winkel)",name:"Praxis",shop:"doityourself"},matchScore:2,suggestion:true},"shop/doityourself/Rona":{name:"Rona",icon:"temaki-tools",geometry:["point","area"],tags:{shop:"doityourself","brand:wikidata":"Q3415283"},addTags:{brand:"Rona","brand:wikidata":"Q3415283","brand:wikipedia":"en:Rona, Inc.",name:"Rona",shop:"doityourself"},removeTags:{brand:"Rona","brand:wikidata":"Q3415283","brand:wikipedia":"en:Rona, Inc.",name:"Rona",shop:"doityourself"},matchScore:2,suggestion:true},"shop/doityourself/Screwfix":{name:"Screwfix",icon:"temaki-tools",geometry:["point","area"],tags:{shop:"doityourself","brand:wikidata":"Q7439115"},addTags:{brand:"Screwfix","brand:wikidata":"Q7439115","brand:wikipedia":"en:Screwfix",name:"Screwfix",shop:"doityourself"},removeTags:{brand:"Screwfix","brand:wikidata":"Q7439115","brand:wikipedia":"en:Screwfix",name:"Screwfix",shop:"doityourself"},matchScore:2,suggestion:true},"shop/doityourself/Sonderpreis Baumarkt":{name:"Sonderpreis Baumarkt",icon:"temaki-tools",geometry:["point","area"],tags:{shop:"doityourself","brand:wikidata":"Q811530"},addTags:{brand:"Sonderpreis Baumarkt","brand:wikidata":"Q811530","brand:wikipedia":"de:Baumarkt",name:"Sonderpreis Baumarkt",shop:"doityourself"},removeTags:{brand:"Sonderpreis Baumarkt","brand:wikidata":"Q811530","brand:wikipedia":"de:Baumarkt",name:"Sonderpreis Baumarkt",shop:"doityourself"},matchScore:2,suggestion:true},"shop/doityourself/Tekzen":{name:"Tekzen",icon:"temaki-tools",geometry:["point","area"],tags:{shop:"doityourself","brand:wikidata":"Q25475379"},addTags:{brand:"Tekzen","brand:wikidata":"Q25475379","brand:wikipedia":"tr:Tekzen",name:"Tekzen",shop:"doityourself"},removeTags:{brand:"Tekzen","brand:wikidata":"Q25475379","brand:wikipedia":"tr:Tekzen",name:"Tekzen",shop:"doityourself"},matchScore:2,suggestion:true},"shop/doityourself/Toom Baumarkt":{name:"Toom Baumarkt",icon:"temaki-tools",geometry:["point","area"],tags:{shop:"doityourself","brand:wikidata":"Q2442970"},addTags:{brand:"Toom Baumarkt","brand:wikidata":"Q2442970","brand:wikipedia":"de:Toom Baumarkt",name:"Toom Baumarkt",shop:"doityourself"},removeTags:{brand:"Toom Baumarkt","brand:wikidata":"Q2442970","brand:wikipedia":"de:Toom Baumarkt",name:"Toom Baumarkt",shop:"doityourself"},matchScore:2,suggestion:true},"shop/doityourself/Travis Perkins":{name:"Travis Perkins",icon:"temaki-tools",geometry:["point","area"],tags:{shop:"doityourself","brand:wikidata":"Q2450664"},addTags:{brand:"Travis Perkins","brand:wikidata":"Q2450664","brand:wikipedia":"en:Travis Perkins",name:"Travis Perkins",shop:"doityourself"},removeTags:{brand:"Travis Perkins","brand:wikidata":"Q2450664","brand:wikipedia":"en:Travis Perkins",name:"Travis Perkins",shop:"doityourself"},matchScore:2,suggestion:true},"shop/doityourself/Weldom":{name:"Weldom",icon:"temaki-tools",geometry:["point","area"],tags:{shop:"doityourself","brand:wikidata":"Q16683226"},addTags:{brand:"Weldom","brand:wikidata":"Q16683226","brand:wikipedia":"fr:Weldom",name:"Weldom",shop:"doityourself"},removeTags:{brand:"Weldom","brand:wikidata":"Q16683226","brand:wikipedia":"fr:Weldom",name:"Weldom",shop:"doityourself"},matchScore:2,suggestion:true},"shop/doityourself/Wickes":{name:"Wickes",icon:"temaki-tools",geometry:["point","area"],tags:{shop:"doityourself","brand:wikidata":"Q7998350"},addTags:{brand:"Wickes","brand:wikidata":"Q7998350","brand:wikipedia":"en:Wickes",name:"Wickes",shop:"doityourself"},removeTags:{brand:"Wickes","brand:wikidata":"Q7998350","brand:wikipedia":"en:Wickes",name:"Wickes",shop:"doityourself"},matchScore:2,suggestion:true},"shop/doityourself/jem & fix":{name:"jem & fix",icon:"temaki-tools",geometry:["point","area"],tags:{shop:"doityourself","brand:wikidata":"Q12319200"},addTags:{brand:"jem & fix","brand:wikidata":"Q12319200","brand:wikipedia":"da:jem & fix",name:"jem & fix",shop:"doityourself"},removeTags:{brand:"jem & fix","brand:wikidata":"Q12319200","brand:wikipedia":"da:jem & fix",name:"jem & fix",shop:"doityourself"},matchScore:2,suggestion:true},"shop/doityourself/Леруа Мерлен":{name:"Леруа Мерлен",icon:"temaki-tools",geometry:["point","area"],tags:{shop:"doityourself","brand:wikidata":"Q889624"},addTags:{brand:"Леруа Мерлен","brand:en":"Leroy Merlin","brand:wikidata":"Q889624","brand:wikipedia":"en:Leroy Merlin",name:"Леруа Мерлен","name:en":"Leroy Merlin",shop:"doityourself"},removeTags:{brand:"Леруа Мерлен","brand:en":"Leroy Merlin","brand:wikidata":"Q889624","brand:wikipedia":"en:Leroy Merlin",name:"Леруа Мерлен","name:en":"Leroy Merlin",shop:"doityourself"},matchScore:2,suggestion:true},"shop/doityourself/カインズホーム":{name:"カインズホーム",icon:"temaki-tools",geometry:["point","area"],tags:{shop:"doityourself","brand:wikidata":"Q11293852"},addTags:{brand:"カインズホーム","brand:en":"Cainz Home","brand:wikidata":"Q11293852","brand:wikipedia":"ja:カインズ",name:"カインズホーム","name:en":"Cainz Home",shop:"doityourself"},removeTags:{brand:"カインズホーム","brand:en":"Cainz Home","brand:wikidata":"Q11293852","brand:wikipedia":"ja:カインズ",name:"カインズホーム","name:en":"Cainz Home",shop:"doityourself"},matchScore:2,suggestion:true},"shop/doityourself/コメリ":{name:"コメリ",icon:"temaki-tools",geometry:["point","area"],tags:{shop:"doityourself","brand:wikidata":"Q11302690"},addTags:{brand:"コメリ","brand:wikidata":"Q11302690","brand:wikipedia":"ja:コメリ",name:"コメリ","name:en":"Komeri",shop:"doityourself"},removeTags:{brand:"コメリ","brand:wikidata":"Q11302690","brand:wikipedia":"ja:コメリ",name:"コメリ","name:en":"Komeri",shop:"doityourself"},matchScore:2,suggestion:true},"shop/doityourself/コーナン":{name:"コーナン",icon:"temaki-tools",geometry:["point","area"],tags:{shop:"doityourself","brand:wikidata":"Q11303403"},addTags:{brand:"コーナン","brand:wikidata":"Q11303403","brand:wikipedia":"ja:コーナン",name:"コーナン","name:en":"Kohnan",shop:"doityourself"},removeTags:{brand:"コーナン","brand:wikidata":"Q11303403","brand:wikipedia":"ja:コーナン",name:"コーナン","name:en":"Kohnan",shop:"doityourself"},matchScore:2,suggestion:true},"shop/dry_cleaning/ホワイト急便":{name:"ホワイト急便",icon:"maki-shop",geometry:["point","area"],tags:{shop:"dry_cleaning","brand:wikidata":"Q11505557"},addTags:{brand:"ホワイト急便","brand:en":"White Kyuubin","brand:wikidata":"Q11505557","brand:wikipedia":"ja:日本さわやかグループ",name:"ホワイト急便","name:en":"White Kyuubin",shop:"dry_cleaning"},removeTags:{brand:"ホワイト急便","brand:en":"White Kyuubin","brand:wikidata":"Q11505557","brand:wikipedia":"ja:日本さわやかグループ",name:"ホワイト急便","name:en":"White Kyuubin",shop:"dry_cleaning"},matchScore:2,suggestion:true},"shop/dry_cleaning/白洋舎":{name:"白洋舎",icon:"maki-shop",geometry:["point","area"],tags:{shop:"dry_cleaning","brand:wikidata":"Q11579995"},addTags:{brand:"白洋舎","brand:en":"Hakuyosha","brand:wikidata":"Q11579995","brand:wikipedia":"ja:白洋舎",name:"白洋舎","name:en":"Hakuyosha",shop:"dry_cleaning"},removeTags:{brand:"白洋舎","brand:en":"Hakuyosha","brand:wikidata":"Q11579995","brand:wikipedia":"ja:白洋舎",name:"白洋舎","name:en":"Hakuyosha",shop:"dry_cleaning"},matchScore:2,suggestion:true},"shop/electronics/Apple Store":{name:"Apple Store",icon:"maki-shop",geometry:["point","area"],tags:{shop:"electronics","brand:wikidata":"Q421253"},addTags:{brand:"Apple Store","brand:wikidata":"Q421253","brand:wikipedia":"en:Apple Store",name:"Apple Store",shop:"electronics"},removeTags:{brand:"Apple Store","brand:wikidata":"Q421253","brand:wikipedia":"en:Apple Store",name:"Apple Store",shop:"electronics"},matchScore:2,suggestion:true},"shop/electronics/Batteries Plus Bulbs":{name:"Batteries Plus Bulbs",icon:"maki-shop",geometry:["point","area"],tags:{shop:"electronics","brand:wikidata":"Q17005157"},addTags:{brand:"Batteries Plus Bulbs","brand:wikidata":"Q17005157",name:"Batteries Plus Bulbs",shop:"electronics"},removeTags:{brand:"Batteries Plus Bulbs","brand:wikidata":"Q17005157",name:"Batteries Plus Bulbs",shop:"electronics"},matchScore:2,suggestion:true},"shop/electronics/Best Buy":{name:"Best Buy",icon:"maki-shop",geometry:["point","area"],tags:{shop:"electronics","brand:wikidata":"Q533415"},addTags:{brand:"Best Buy","brand:wikidata":"Q533415","brand:wikipedia":"en:Best Buy",name:"Best Buy",shop:"electronics"},removeTags:{brand:"Best Buy","brand:wikidata":"Q533415","brand:wikipedia":"en:Best Buy",name:"Best Buy",shop:"electronics"},matchScore:2,suggestion:true},"shop/electronics/Boulanger":{name:"Boulanger",icon:"maki-shop",geometry:["point","area"],tags:{shop:"electronics","brand:wikidata":"Q2921695"},addTags:{brand:"Boulanger","brand:wikidata":"Q2921695","brand:wikipedia":"fr:Boulanger (entreprise)",name:"Boulanger",shop:"electronics"},removeTags:{brand:"Boulanger","brand:wikidata":"Q2921695","brand:wikipedia":"fr:Boulanger (entreprise)",name:"Boulanger",shop:"electronics"},matchScore:2,suggestion:true},"shop/electronics/CeX":{name:"CeX",icon:"maki-shop",geometry:["point","area"],tags:{shop:"electronics","brand:wikidata":"Q5055676"},addTags:{brand:"CeX","brand:wikidata":"Q5055676","brand:wikipedia":"en:CeX (company)",name:"CeX",shop:"electronics"},removeTags:{brand:"CeX","brand:wikidata":"Q5055676","brand:wikipedia":"en:CeX (company)",name:"CeX",shop:"electronics"},matchScore:2,suggestion:true},"shop/electronics/Currys":{name:"Currys",icon:"maki-shop",geometry:["point","area"],tags:{shop:"electronics","brand:wikidata":"Q3246464"},addTags:{brand:"Currys","brand:wikidata":"Q3246464","brand:wikipedia":"en:Currys",name:"Currys",shop:"electronics"},removeTags:{brand:"Currys","brand:wikidata":"Q3246464","brand:wikipedia":"en:Currys",name:"Currys",shop:"electronics"},matchScore:2,suggestion:true},"shop/electronics/Currys PC World":{name:"Currys PC World",icon:"maki-shop",geometry:["point","area"],tags:{shop:"electronics","brand:wikidata":"Q7118727"},addTags:{brand:"Currys PC World","brand:wikidata":"Q7118727","brand:wikipedia":"en:PC World (retailer)",name:"Currys PC World",shop:"electronics"},removeTags:{brand:"Currys PC World","brand:wikidata":"Q7118727","brand:wikipedia":"en:PC World (retailer)",name:"Currys PC World",shop:"electronics"},matchScore:2,suggestion:true},"shop/electronics/Darty":{name:"Darty",icon:"maki-shop",geometry:["point","area"],tags:{shop:"electronics","brand:wikidata":"Q3117381"},addTags:{brand:"Darty","brand:wikidata":"Q3117381","brand:wikipedia":"en:Groupe Fnac Darty",name:"Darty",shop:"electronics"},removeTags:{brand:"Darty","brand:wikidata":"Q3117381","brand:wikipedia":"en:Groupe Fnac Darty",name:"Darty",shop:"electronics"},matchScore:2,suggestion:true},"shop/electronics/Elgiganten":{name:"Elgiganten",icon:"maki-shop",geometry:["point","area"],tags:{shop:"electronics","brand:wikidata":"Q17050121"},addTags:{brand:"Elgiganten","brand:wikidata":"Q17050121","brand:wikipedia":"en:Elgiganten",name:"Elgiganten",shop:"electronics"},removeTags:{brand:"Elgiganten","brand:wikidata":"Q17050121","brand:wikipedia":"en:Elgiganten",name:"Elgiganten",shop:"electronics"},matchScore:2,suggestion:true},"shop/electronics/Euronics":{name:"Euronics",icon:"maki-shop",geometry:["point","area"],tags:{shop:"electronics","brand:wikidata":"Q184860"},addTags:{brand:"Euronics","brand:wikidata":"Q184860","brand:wikipedia":"en:Euronics",name:"Euronics",shop:"electronics"},removeTags:{brand:"Euronics","brand:wikidata":"Q184860","brand:wikipedia":"en:Euronics",name:"Euronics",shop:"electronics"},matchScore:2,suggestion:true},"shop/electronics/Expert":{name:"Expert",icon:"maki-shop",geometry:["point","area"],tags:{shop:"electronics","brand:wikidata":"Q680990"},addTags:{brand:"Expert","brand:wikidata":"Q680990","brand:wikipedia":"en:Expert (company)",name:"Expert",shop:"electronics"},removeTags:{brand:"Expert","brand:wikidata":"Q680990","brand:wikipedia":"en:Expert (company)",name:"Expert",shop:"electronics"},matchScore:2,suggestion:true},"shop/electronics/Hartlauer":{name:"Hartlauer",icon:"maki-shop",geometry:["point","area"],tags:{shop:"electronics","brand:wikidata":"Q1587223"},addTags:{brand:"Hartlauer","brand:wikidata":"Q1587223","brand:wikipedia":"de:Hartlauer",name:"Hartlauer",shop:"electronics"},removeTags:{brand:"Hartlauer","brand:wikidata":"Q1587223","brand:wikipedia":"de:Hartlauer",name:"Hartlauer",shop:"electronics"},matchScore:2,suggestion:true},"shop/electronics/Interdiscount":{name:"Interdiscount",icon:"maki-shop",geometry:["point","area"],tags:{shop:"electronics","brand:wikidata":"Q1665980"},addTags:{brand:"Interdiscount","brand:wikidata":"Q1665980","brand:wikipedia":"de:Interdiscount",name:"Interdiscount",shop:"electronics"},removeTags:{brand:"Interdiscount","brand:wikidata":"Q1665980","brand:wikipedia":"de:Interdiscount",name:"Interdiscount",shop:"electronics"},matchScore:2,suggestion:true},"shop/electronics/JB Hi-Fi":{name:"JB Hi-Fi",icon:"maki-shop",geometry:["point","area"],tags:{shop:"electronics","brand:wikidata":"Q3310113"},addTags:{brand:"JB Hi-Fi","brand:wikidata":"Q3310113","brand:wikipedia":"en:JB Hi-Fi",name:"JB Hi-Fi",shop:"electronics"},removeTags:{brand:"JB Hi-Fi","brand:wikidata":"Q3310113","brand:wikipedia":"en:JB Hi-Fi",name:"JB Hi-Fi",shop:"electronics"},matchScore:2,suggestion:true},"shop/electronics/Kjell & Company":{name:"Kjell & Company",icon:"maki-shop",geometry:["point","area"],tags:{shop:"electronics","brand:wikidata":"Q6419332"},addTags:{brand:"Kjell & Company","brand:wikidata":"Q6419332","brand:wikipedia":"en:Kjell & Company",name:"Kjell & Company",shop:"electronics"},removeTags:{brand:"Kjell & Company","brand:wikidata":"Q6419332","brand:wikipedia":"en:Kjell & Company",name:"Kjell & Company",shop:"electronics"},matchScore:2,suggestion:true},"shop/electronics/Komputronik":{name:"Komputronik",icon:"maki-shop",geometry:["point","area"],tags:{shop:"electronics","brand:wikidata":"Q11742085"},addTags:{brand:"Komputronik","brand:wikidata":"Q11742085","brand:wikipedia":"pl:Komputronik",name:"Komputronik",shop:"electronics"},removeTags:{brand:"Komputronik","brand:wikidata":"Q11742085","brand:wikipedia":"pl:Komputronik",name:"Komputronik",shop:"electronics"},matchScore:2,suggestion:true},"shop/electronics/La Curacao":{name:"La Curacao",icon:"maki-shop",geometry:["point","area"],tags:{shop:"electronics","brand:wikidata":"Q5194599"},addTags:{brand:"La Curacao","brand:wikidata":"Q5194599","brand:wikipedia":"en:Curacao (retail store)",name:"La Curacao",shop:"electronics"},removeTags:{brand:"La Curacao","brand:wikidata":"Q5194599","brand:wikipedia":"en:Curacao (retail store)",name:"La Curacao",shop:"electronics"},matchScore:2,suggestion:true},"shop/electronics/Maplin":{name:"Maplin",icon:"maki-shop",geometry:["point","area"],tags:{shop:"electronics","brand:wikidata":"Q6754124"},addTags:{brand:"Maplin","brand:wikidata":"Q6754124","brand:wikipedia":"en:Maplin (retailer)",name:"Maplin",shop:"electronics"},removeTags:{brand:"Maplin","brand:wikidata":"Q6754124","brand:wikipedia":"en:Maplin (retailer)",name:"Maplin",shop:"electronics"},matchScore:2,suggestion:true},"shop/electronics/Media Expert":{name:"Media Expert",icon:"maki-shop",geometry:["point","area"],tags:{shop:"electronics","brand:wikidata":"Q11776794"},addTags:{brand:"Media Expert","brand:wikidata":"Q11776794","brand:wikipedia":"pl:Media Expert",name:"Media Expert",shop:"electronics"},removeTags:{brand:"Media Expert","brand:wikidata":"Q11776794","brand:wikipedia":"pl:Media Expert",name:"Media Expert",shop:"electronics"},matchScore:2,suggestion:true},"shop/electronics/Media Markt":{name:"Media Markt",icon:"maki-shop",geometry:["point","area"],tags:{shop:"electronics","brand:wikidata":"Q2381223"},addTags:{brand:"Media Markt","brand:wikidata":"Q2381223","brand:wikipedia":"en:Media Markt",name:"Media Markt",shop:"electronics"},removeTags:{brand:"Media Markt","brand:wikidata":"Q2381223","brand:wikipedia":"en:Media Markt",name:"Media Markt",shop:"electronics"},matchScore:2,suggestion:true},"shop/electronics/Musimundo":{name:"Musimundo",icon:"maki-shop",geometry:["point","area"],tags:{shop:"electronics","brand:wikidata":"Q6034719"},addTags:{brand:"Musimundo","brand:wikidata":"Q6034719","brand:wikipedia":"es:Musimundo",name:"Musimundo",shop:"electronics"},removeTags:{brand:"Musimundo","brand:wikidata":"Q6034719","brand:wikipedia":"es:Musimundo",name:"Musimundo",shop:"electronics"},matchScore:2,suggestion:true},"shop/electronics/Neonet":{name:"Neonet",icon:"maki-shop",geometry:["point","area"],tags:{shop:"electronics","brand:wikidata":"Q11790622"},addTags:{brand:"Neonet","brand:wikidata":"Q11790622","brand:wikipedia":"pl:Neonet",name:"Neonet",shop:"electronics"},removeTags:{brand:"Neonet","brand:wikidata":"Q11790622","brand:wikipedia":"pl:Neonet",name:"Neonet",shop:"electronics"},matchScore:2,suggestion:true},"shop/electronics/RTV Euro AGD":{name:"RTV Euro AGD",icon:"maki-shop",geometry:["point","area"],tags:{shop:"electronics","brand:wikidata":"Q7277895"},addTags:{brand:"RTV Euro AGD","brand:wikidata":"Q7277895","brand:wikipedia":"en:RTV Euro AGD",name:"RTV Euro AGD",shop:"electronics"},removeTags:{brand:"RTV Euro AGD","brand:wikidata":"Q7277895","brand:wikipedia":"en:RTV Euro AGD",name:"RTV Euro AGD",shop:"electronics"},matchScore:2,suggestion:true},"shop/electronics/Radio Shack":{name:"Radio Shack",icon:"maki-shop",geometry:["point","area"],tags:{shop:"electronics","brand:wikidata":"Q1195490"},addTags:{brand:"Radio Shack","brand:wikidata":"Q1195490","brand:wikipedia":"en:RadioShack",name:"Radio Shack",shop:"electronics"},removeTags:{brand:"Radio Shack","brand:wikidata":"Q1195490","brand:wikipedia":"en:RadioShack",name:"Radio Shack",shop:"electronics"},matchScore:2,suggestion:true},"shop/electronics/Samsung":{name:"Samsung",icon:"maki-shop",geometry:["point","area"],tags:{shop:"electronics","brand:wikidata":"Q20718"},addTags:{brand:"Samsung","brand:wikidata":"Q20718","brand:wikipedia":"en:Samsung Electronics",name:"Samsung",shop:"electronics"},removeTags:{brand:"Samsung","brand:wikidata":"Q20718","brand:wikipedia":"en:Samsung Electronics",name:"Samsung",shop:"electronics"},matchScore:2,suggestion:true},"shop/electronics/Saturn":{name:"Saturn",icon:"maki-shop",geometry:["point","area"],tags:{shop:"electronics","brand:wikidata":"Q2543504"},addTags:{brand:"Saturn","brand:wikidata":"Q2543504","brand:wikipedia":"en:Saturn (retailer)",name:"Saturn",shop:"electronics"},removeTags:{brand:"Saturn","brand:wikidata":"Q2543504","brand:wikipedia":"en:Saturn (retailer)",name:"Saturn",shop:"electronics"},matchScore:2,suggestion:true},"shop/electronics/Sony":{name:"Sony",icon:"maki-shop",geometry:["point","area"],tags:{shop:"electronics","brand:wikidata":"Q41187"},addTags:{brand:"Sony","brand:wikidata":"Q41187","brand:wikipedia":"en:Sony",name:"Sony",shop:"electronics"},removeTags:{brand:"Sony","brand:wikidata":"Q41187","brand:wikipedia":"en:Sony",name:"Sony",shop:"electronics"},matchScore:2,suggestion:true},"shop/electronics/Teknikmagasinet":{name:"Teknikmagasinet",icon:"maki-shop",geometry:["point","area"],tags:{shop:"electronics","brand:wikidata":"Q3357520"},addTags:{brand:"Teknikmagasinet","brand:wikidata":"Q3357520","brand:wikipedia":"en:Teknikmagasinet",name:"Teknikmagasinet",shop:"electronics"},removeTags:{brand:"Teknikmagasinet","brand:wikidata":"Q3357520","brand:wikipedia":"en:Teknikmagasinet",name:"Teknikmagasinet",shop:"electronics"},matchScore:2,suggestion:true},"shop/electronics/The Source":{name:"The Source",icon:"maki-shop",geometry:["point","area"],tags:{shop:"electronics","brand:wikidata":"Q3212934"},addTags:{brand:"The Source","brand:wikidata":"Q3212934","brand:wikipedia":"en:The Source (retailer)",name:"The Source",shop:"electronics"},removeTags:{brand:"The Source","brand:wikidata":"Q3212934","brand:wikipedia":"en:The Source (retailer)",name:"The Source",shop:"electronics"},matchScore:2,suggestion:true},"shop/electronics/Unieuro":{name:"Unieuro",icon:"maki-shop",geometry:["point","area"],tags:{shop:"electronics","brand:wikidata":"Q4004687"},addTags:{brand:"Unieuro","brand:wikidata":"Q4004687","brand:wikipedia":"en:Unieuro",name:"Unieuro",shop:"electronics"},removeTags:{brand:"Unieuro","brand:wikidata":"Q4004687","brand:wikipedia":"en:Unieuro",name:"Unieuro",shop:"electronics"},matchScore:2,suggestion:true},"shop/electronics/Worten":{name:"Worten",icon:"maki-shop",geometry:["point","area"],tags:{shop:"electronics","brand:wikidata":"Q10394039"},addTags:{brand:"Worten","brand:wikidata":"Q10394039","brand:wikipedia":"pt:Worten",name:"Worten",shop:"electronics"},removeTags:{brand:"Worten","brand:wikidata":"Q10394039","brand:wikipedia":"pt:Worten",name:"Worten",shop:"electronics"},matchScore:2,suggestion:true},"shop/electronics/М.Видео":{name:"М.Видео",icon:"maki-shop",geometry:["point","area"],tags:{shop:"electronics","brand:wikidata":"Q6558800"},addTags:{brand:"М.Видео","brand:en":"M.video","brand:wikidata":"Q6558800","brand:wikipedia":"en:M.video",name:"М.Видео","name:en":"M.video",shop:"electronics"},removeTags:{brand:"М.Видео","brand:en":"M.video","brand:wikidata":"Q6558800","brand:wikipedia":"en:M.video",name:"М.Видео","name:en":"M.video",shop:"electronics"},matchScore:2,suggestion:true},"shop/electronics/Фокстрот":{name:"Фокстрот",icon:"maki-shop",geometry:["point","area"],tags:{shop:"electronics","brand:wikidata":"Q16721578"},addTags:{brand:"Фокстрот","brand:wikidata":"Q16721578","brand:wikipedia":"uk:Фокстрот (торгова мережа)",name:"Фокстрот",shop:"electronics"},removeTags:{brand:"Фокстрот","brand:wikidata":"Q16721578","brand:wikipedia":"uk:Фокстрот (торгова мережа)",name:"Фокстрот",shop:"electronics"},matchScore:2,suggestion:true},"shop/electronics/Эльдорадо":{name:"Эльдорадо",icon:"maki-shop",geometry:["point","area"],tags:{shop:"electronics","brand:wikidata":"Q4531492"},addTags:{brand:"Эльдорадо","brand:wikidata":"Q4531492","brand:wikipedia":"ru:Эльдорадо (сеть магазинов)",name:"Эльдорадо",shop:"electronics"},removeTags:{brand:"Эльдорадо","brand:wikidata":"Q4531492","brand:wikipedia":"ru:Эльдорадо (сеть магазинов)",name:"Эльдорадо",shop:"electronics"},matchScore:2,suggestion:true},"shop/electronics/エディオン":{name:"エディオン",icon:"maki-shop",geometry:["point","area"],tags:{shop:"electronics","brand:wikidata":"Q11290252"},addTags:{brand:"エディオン","brand:en":"EDION","brand:wikidata":"Q11290252","brand:wikipedia":"ja:エディオン",name:"エディオン","name:en":"EDION",shop:"electronics"},removeTags:{brand:"エディオン","brand:en":"EDION","brand:wikidata":"Q11290252","brand:wikipedia":"ja:エディオン",name:"エディオン","name:en":"EDION",shop:"electronics"},matchScore:2,suggestion:true},"shop/electronics/ケーズデンキ":{name:"ケーズデンキ",icon:"maki-shop",geometry:["point","area"],tags:{shop:"electronics","brand:wikidata":"Q6322472"},addTags:{brand:"ケーズデンキ","brand:en":"K's Denki","brand:wikidata":"Q6322472","brand:wikipedia":"ja:ケーズホールディングス",name:"ケーズデンキ","name:en":"K's Denki",shop:"electronics"},removeTags:{brand:"ケーズデンキ","brand:en":"K's Denki","brand:wikidata":"Q6322472","brand:wikipedia":"ja:ケーズホールディングス",name:"ケーズデンキ","name:en":"K's Denki",shop:"electronics"},matchScore:2,suggestion:true},"shop/electronics/コジマ":{name:"コジマ",icon:"maki-shop",geometry:["point","area"],tags:{shop:"electronics","brand:wikidata":"Q11302052"},addTags:{brand:"コジマ","brand:en":"Kojima","brand:wikidata":"Q11302052","brand:wikipedia":"ja:コジマ",name:"コジマ","name:en":"Kojima",shop:"electronics"},removeTags:{brand:"コジマ","brand:en":"Kojima","brand:wikidata":"Q11302052","brand:wikipedia":"ja:コジマ",name:"コジマ","name:en":"Kojima",shop:"electronics"},matchScore:2,suggestion:true},"shop/electronics/ヤマダ電機":{name:"ヤマダ電機",icon:"maki-shop",geometry:["point","area"],tags:{shop:"electronics","brand:wikidata":"Q1096390"},addTags:{brand:"ヤマダ電機","brand:en":"Yamada Denki","brand:wikidata":"Q1096390","brand:wikipedia":"en:Yamada Denki",name:"ヤマダ電機","name:en":"Yamada Denki",shop:"electronics"},removeTags:{brand:"ヤマダ電機","brand:en":"Yamada Denki","brand:wikidata":"Q1096390","brand:wikipedia":"en:Yamada Denki",name:"ヤマダ電機","name:en":"Yamada Denki",shop:"electronics"},matchScore:2,suggestion:true},"shop/electronics/全國電子":{name:"全國電子",icon:"maki-shop",geometry:["point","area"],tags:{shop:"electronics","brand:wikidata":"Q10891540"},addTags:{brand:"全國電子","brand:en":"E-life Mall","brand:wikidata":"Q10891540","brand:wikipedia":"zh:全國電子",name:"全國電子","name:en":"E-life Mall",shop:"electronics"},removeTags:{brand:"全國電子","brand:en":"E-life Mall","brand:wikidata":"Q10891540","brand:wikipedia":"zh:全國電子",name:"全國電子","name:en":"E-life Mall",shop:"electronics"},matchScore:2,suggestion:true},"shop/electronics/燦坤3C":{name:"燦坤3C",icon:"maki-shop",geometry:["point","area"],tags:{shop:"electronics","brand:wikidata":"Q11569285"},addTags:{brand:"燦坤3C","brand:en":"Tsannkuen 3C","brand:wikidata":"Q11569285","brand:wikipedia":"zh:燦坤",name:"燦坤3C","name:en":"Tsannkuen 3C",shop:"electronics"},removeTags:{brand:"燦坤3C","brand:en":"Tsannkuen 3C","brand:wikidata":"Q11569285","brand:wikipedia":"zh:燦坤",name:"燦坤3C","name:en":"Tsannkuen 3C",shop:"electronics"},matchScore:2,suggestion:true},"shop/erotic/Orion":{name:"Orion",icon:"maki-shop",geometry:["point","area"],tags:{shop:"erotic","brand:wikidata":"Q1609577"},addTags:{brand:"Orion","brand:wikidata":"Q1609577","brand:wikipedia":"de:Orion (Erotik)",name:"Orion",shop:"erotic"},removeTags:{brand:"Orion","brand:wikidata":"Q1609577","brand:wikipedia":"de:Orion (Erotik)",name:"Orion",shop:"erotic"},matchScore:2,suggestion:true},"shop/fabric/Mondial Tissus":{name:"Mondial Tissus",icon:"maki-shop",geometry:["point","area"],tags:{shop:"fabric","brand:wikidata":"Q17635288"},addTags:{brand:"Mondial Tissus","brand:wikidata":"Q17635288","brand:wikipedia":"fr:Mondial Tissus",name:"Mondial Tissus",shop:"fabric"},removeTags:{brand:"Mondial Tissus","brand:wikidata":"Q17635288","brand:wikipedia":"fr:Mondial Tissus",name:"Mondial Tissus",shop:"fabric"},matchScore:2,suggestion:true},"shop/florist/Blume 2000":{name:"Blume 2000",icon:"maki-florist",geometry:["point","area"],tags:{shop:"florist","brand:wikidata":"Q886166"},addTags:{brand:"Blume 2000","brand:wikidata":"Q886166","brand:wikipedia":"de:Blume 2000",name:"Blume 2000",shop:"florist"},removeTags:{brand:"Blume 2000","brand:wikidata":"Q886166","brand:wikipedia":"de:Blume 2000",name:"Blume 2000",shop:"florist"},matchScore:2,suggestion:true},"shop/florist/Blumen Risse":{name:"Blumen Risse",icon:"maki-florist",geometry:["point","area"],tags:{shop:"florist","brand:wikidata":"Q886177"},addTags:{brand:"Blumen Risse","brand:wikidata":"Q886177","brand:wikipedia":"de:Blumen Risse",name:"Blumen Risse",shop:"florist"},removeTags:{brand:"Blumen Risse","brand:wikidata":"Q886177","brand:wikipedia":"de:Blumen Risse",name:"Blumen Risse",shop:"florist"},matchScore:2,suggestion:true},"shop/florist/Interflora":{name:"Interflora",icon:"maki-florist",geometry:["point","area"],tags:{shop:"florist","brand:wikidata":"Q692179"},addTags:{brand:"Interflora","brand:wikidata":"Q692179","brand:wikipedia":"en:Interflora",name:"Interflora",shop:"florist"},removeTags:{brand:"Interflora","brand:wikidata":"Q692179","brand:wikipedia":"en:Interflora",name:"Interflora",shop:"florist"},matchScore:2,suggestion:true},"shop/florist/Monceau Fleurs":{name:"Monceau Fleurs",icon:"maki-florist",geometry:["point","area"],tags:{shop:"florist","brand:wikidata":"Q17629431"},addTags:{brand:"Monceau Fleurs","brand:wikidata":"Q17629431","brand:wikipedia":"fr:Emova Group",name:"Monceau Fleurs",shop:"florist"},removeTags:{brand:"Monceau Fleurs","brand:wikidata":"Q17629431","brand:wikipedia":"fr:Emova Group",name:"Monceau Fleurs",shop:"florist"},matchScore:2,suggestion:true},"shop/frozen_food/Picard":{name:"Picard",icon:"maki-shop",geometry:["point","area"],tags:{shop:"frozen_food","brand:wikidata":"Q3382454"},addTags:{brand:"Picard","brand:wikidata":"Q3382454","brand:wikipedia":"en:Picard Surgelés",name:"Picard",shop:"frozen_food"},removeTags:{brand:"Picard","brand:wikidata":"Q3382454","brand:wikipedia":"en:Picard Surgelés",name:"Picard",shop:"frozen_food"},matchScore:2,suggestion:true},"shop/funeral_directors/The Co-operative Funeralcare":{name:"The Co-operative Funeralcare",icon:"maki-cemetery",geometry:["point","area"],tags:{shop:"funeral_directors","brand:wikidata":"Q7726521"},addTags:{brand:"The Co-operative Funeralcare","brand:wikidata":"Q7726521","brand:wikipedia":"en:Co-op Funeralcare",name:"The Co-operative Funeralcare",shop:"funeral_directors"},removeTags:{brand:"The Co-operative Funeralcare","brand:wikidata":"Q7726521","brand:wikipedia":"en:Co-op Funeralcare",name:"The Co-operative Funeralcare",shop:"funeral_directors"},matchScore:2,suggestion:true},"shop/furniture/Black Red White":{name:"Black Red White",icon:"fas-couch",geometry:["point","area"],tags:{shop:"furniture","brand:wikidata":"Q4921546"},addTags:{brand:"Black Red White","brand:wikidata":"Q4921546","brand:wikipedia":"en:Black Red White",name:"Black Red White",shop:"furniture"},removeTags:{brand:"Black Red White","brand:wikidata":"Q4921546","brand:wikipedia":"en:Black Red White",name:"Black Red White",shop:"furniture"},matchScore:2,suggestion:true},"shop/furniture/Bodzio":{name:"Bodzio",icon:"fas-couch",geometry:["point","area"],tags:{shop:"furniture","brand:wikidata":"Q20034845"},addTags:{brand:"Bodzio","brand:wikidata":"Q20034845","brand:wikipedia":"pl:Fabryka Mebli Bodzio",name:"Bodzio",shop:"furniture"},removeTags:{brand:"Bodzio","brand:wikidata":"Q20034845","brand:wikipedia":"pl:Fabryka Mebli Bodzio",name:"Bodzio",shop:"furniture"},matchScore:2,suggestion:true},"shop/furniture/But":{name:"But",icon:"fas-couch",geometry:["point","area"],tags:{shop:"furniture","brand:wikidata":"Q18720442"},addTags:{brand:"But","brand:wikidata":"Q18720442","brand:wikipedia":"en:BUT (retailer)",name:"But",shop:"furniture"},removeTags:{brand:"But","brand:wikidata":"Q18720442","brand:wikipedia":"en:BUT (retailer)",name:"But",shop:"furniture"},matchScore:2,suggestion:true},"shop/furniture/Conforama":{name:"Conforama",icon:"fas-couch",geometry:["point","area"],tags:{shop:"furniture","brand:wikidata":"Q541134"},addTags:{brand:"Conforama","brand:wikidata":"Q541134","brand:wikipedia":"en:Conforama",name:"Conforama",shop:"furniture"},removeTags:{brand:"Conforama","brand:wikidata":"Q541134","brand:wikipedia":"en:Conforama",name:"Conforama",shop:"furniture"},matchScore:2,suggestion:true},"shop/furniture/DFS":{name:"DFS",icon:"fas-couch",geometry:["point","area"],tags:{shop:"furniture","brand:wikidata":"Q5204927"},addTags:{brand:"DFS","brand:wikidata":"Q5204927","brand:wikipedia":"en:DFS Furniture",name:"DFS",shop:"furniture"},removeTags:{brand:"DFS","brand:wikidata":"Q5204927","brand:wikipedia":"en:DFS Furniture",name:"DFS",shop:"furniture"},matchScore:2,suggestion:true},"shop/furniture/Dänisches Bettenlager":{name:"Dänisches Bettenlager",icon:"fas-couch",geometry:["point","area"],tags:{shop:"furniture","brand:wikidata":"Q138913"},addTags:{brand:"Dänisches Bettenlager","brand:wikidata":"Q138913","brand:wikipedia":"en:Jysk (store)",name:"Dänisches Bettenlager",shop:"furniture"},removeTags:{brand:"Dänisches Bettenlager","brand:wikidata":"Q138913","brand:wikipedia":"en:Jysk (store)",name:"Dänisches Bettenlager",shop:"furniture"},matchScore:2,suggestion:true},"shop/furniture/Ethan Allen":{name:"Ethan Allen",icon:"fas-couch",geometry:["point","area"],tags:{shop:"furniture","brand:wikidata":"Q5402870"},addTags:{brand:"Ethan Allen","brand:wikidata":"Q5402870","brand:wikipedia":"en:Ethan Allen (furniture company)",name:"Ethan Allen",shop:"furniture"},removeTags:{brand:"Ethan Allen","brand:wikidata":"Q5402870","brand:wikipedia":"en:Ethan Allen (furniture company)",name:"Ethan Allen",shop:"furniture"},matchScore:2,suggestion:true},"shop/furniture/Fly":{name:"Fly",icon:"fas-couch",geometry:["point","area"],tags:{shop:"furniture","brand:wikidata":"Q1389184"},addTags:{brand:"Fly","brand:wikidata":"Q1389184","brand:wikipedia":"fr:Fly (entreprise)",name:"Fly",shop:"furniture"},removeTags:{brand:"Fly","brand:wikidata":"Q1389184","brand:wikipedia":"fr:Fly (entreprise)",name:"Fly",shop:"furniture"},matchScore:2,suggestion:true},"shop/furniture/Harveys":{name:"Harveys",icon:"fas-couch",geometry:["point","area"],tags:{shop:"furniture","brand:wikidata":"Q5677754"},addTags:{brand:"Harveys","brand:wikidata":"Q5677754","brand:wikipedia":"en:Harveys Furniture",name:"Harveys",shop:"furniture"},removeTags:{brand:"Harveys","brand:wikidata":"Q5677754","brand:wikipedia":"en:Harveys Furniture",name:"Harveys",shop:"furniture"},matchScore:2,suggestion:true},"shop/furniture/Havertys":{name:"Havertys",icon:"fas-couch",geometry:["point","area"],tags:{shop:"furniture","brand:wikidata":"Q5683881"},addTags:{brand:"Havertys","brand:wikidata":"Q5683881","brand:wikipedia":"en:Havertys",name:"Havertys",shop:"furniture"},removeTags:{brand:"Havertys","brand:wikidata":"Q5683881","brand:wikipedia":"en:Havertys",name:"Havertys",shop:"furniture"},matchScore:2,suggestion:true},"shop/furniture/IKEA":{name:"IKEA",icon:"fas-couch",geometry:["point","area"],tags:{shop:"furniture","brand:wikidata":"Q54078"},addTags:{brand:"IKEA","brand:wikidata":"Q54078","brand:wikipedia":"en:IKEA",name:"IKEA",shop:"furniture"},removeTags:{brand:"IKEA","brand:wikidata":"Q54078","brand:wikipedia":"en:IKEA",name:"IKEA",shop:"furniture"},matchScore:2,suggestion:true},"shop/furniture/JYSK":{name:"JYSK",icon:"fas-couch",geometry:["point","area"],tags:{shop:"furniture","brand:wikidata":"Q138913"},addTags:{brand:"JYSK","brand:wikidata":"Q138913","brand:wikipedia":"en:Jysk (store)",name:"JYSK",shop:"furniture"},removeTags:{brand:"JYSK","brand:wikidata":"Q138913","brand:wikipedia":"en:Jysk (store)",name:"JYSK",shop:"furniture"},matchScore:2,suggestion:true},"shop/furniture/La-Z-Boy":{name:"La-Z-Boy",icon:"fas-couch",geometry:["point","area"],tags:{shop:"furniture","brand:wikidata":"Q6391583"},addTags:{brand:"La-Z-Boy","brand:wikidata":"Q6391583","brand:wikipedia":"en:La-Z-Boy",name:"La-Z-Boy",shop:"furniture"},removeTags:{brand:"La-Z-Boy","brand:wikidata":"Q6391583","brand:wikipedia":"en:La-Z-Boy",name:"La-Z-Boy",shop:"furniture"},matchScore:2,suggestion:true},"shop/furniture/Rent-A-Center":{name:"Rent-A-Center",icon:"fas-couch",geometry:["point","area"],tags:{shop:"furniture","brand:wikidata":"Q7313497"},addTags:{brand:"Rent-A-Center","brand:wikidata":"Q7313497","brand:wikipedia":"en:Rent-A-Center",name:"Rent-A-Center",shop:"furniture"},removeTags:{brand:"Rent-A-Center","brand:wikidata":"Q7313497","brand:wikipedia":"en:Rent-A-Center",name:"Rent-A-Center",shop:"furniture"},matchScore:2,suggestion:true},"shop/furniture/Roller":{name:"Roller",icon:"fas-couch",geometry:["point","area"],tags:{shop:"furniture","brand:wikidata":"Q1621286"},addTags:{brand:"Roller","brand:wikidata":"Q1621286","brand:wikipedia":"de:Roller (Möbelhaus)",name:"Roller",shop:"furniture"},removeTags:{brand:"Roller","brand:wikidata":"Q1621286","brand:wikipedia":"de:Roller (Möbelhaus)",name:"Roller",shop:"furniture"},matchScore:2,suggestion:true},"shop/furniture/Rooms To Go":{name:"Rooms To Go",icon:"fas-couch",geometry:["point","area"],tags:{shop:"furniture","brand:wikidata":"Q7366329"},addTags:{brand:"Rooms To Go","brand:wikidata":"Q7366329","brand:wikipedia":"en:Rooms To Go",name:"Rooms To Go",shop:"furniture"},removeTags:{brand:"Rooms To Go","brand:wikidata":"Q7366329","brand:wikipedia":"en:Rooms To Go",name:"Rooms To Go",shop:"furniture"},matchScore:2,suggestion:true},"shop/furniture/ScS":{name:"ScS",icon:"fas-couch",geometry:["point","area"],tags:{shop:"furniture","brand:wikidata":"Q19654399"},addTags:{brand:"ScS","brand:wikidata":"Q19654399","brand:wikipedia":"en:ScS",name:"ScS",shop:"furniture"},removeTags:{brand:"ScS","brand:wikidata":"Q19654399","brand:wikipedia":"en:ScS",name:"ScS",shop:"furniture"},matchScore:2,suggestion:true},"shop/furniture/The Brick":{name:"The Brick",icon:"fas-couch",geometry:["point","area"],tags:{shop:"furniture","brand:wikidata":"Q7720000"},addTags:{brand:"The Brick","brand:wikidata":"Q7720000","brand:wikipedia":"en:The Brick",name:"The Brick",shop:"furniture"},removeTags:{brand:"The Brick","brand:wikidata":"Q7720000","brand:wikipedia":"en:The Brick",name:"The Brick",shop:"furniture"},matchScore:2,suggestion:true},"shop/furniture/ニトリ":{name:"ニトリ",icon:"fas-couch",geometry:["point","area"],tags:{shop:"furniture","brand:wikidata":"Q10801453"},addTags:{brand:"ニトリ","brand:en":"Nitori","brand:wikidata":"Q10801453","brand:wikipedia":"en:Nitori",name:"ニトリ","name:en":"Nitori",shop:"furniture"},removeTags:{brand:"ニトリ","brand:en":"Nitori","brand:wikidata":"Q10801453","brand:wikipedia":"en:Nitori",name:"ニトリ","name:en":"Nitori",shop:"furniture"},matchScore:2,suggestion:true},"shop/garden_centre/Dehner":{name:"Dehner",icon:"maki-garden-centre",geometry:["point","area"],tags:{shop:"garden_centre","brand:wikidata":"Q1183029"},addTags:{brand:"Dehner","brand:wikidata":"Q1183029","brand:wikipedia":"de:Dehner",name:"Dehner",shop:"garden_centre"},removeTags:{brand:"Dehner","brand:wikidata":"Q1183029","brand:wikipedia":"de:Dehner",name:"Dehner",shop:"garden_centre"},matchScore:2,suggestion:true},"shop/garden_centre/Gamm Vert":{name:"Gamm Vert",icon:"maki-garden-centre",geometry:["point","area"],tags:{shop:"garden_centre","brand:wikidata":"Q3095006"},addTags:{brand:"Gamm Vert","brand:wikidata":"Q3095006","brand:wikipedia":"fr:Gamm Vert",name:"Gamm Vert",shop:"garden_centre"},removeTags:{brand:"Gamm Vert","brand:wikidata":"Q3095006","brand:wikipedia":"fr:Gamm Vert",name:"Gamm Vert",shop:"garden_centre"},matchScore:2,suggestion:true},"shop/garden_centre/Jardiland":{name:"Jardiland",icon:"maki-garden-centre",geometry:["point","area"],tags:{shop:"garden_centre","brand:wikidata":"Q3162276"},addTags:{brand:"Jardiland","brand:wikidata":"Q3162276","brand:wikipedia":"fr:Jardiland",name:"Jardiland",shop:"garden_centre"},removeTags:{brand:"Jardiland","brand:wikidata":"Q3162276","brand:wikipedia":"fr:Jardiland",name:"Jardiland",shop:"garden_centre"},matchScore:2,suggestion:true},"shop/garden_centre/Point Vert":{name:"Point Vert",icon:"maki-garden-centre",geometry:["point","area"],tags:{shop:"garden_centre","brand:wikidata":"Q16661975"},addTags:{brand:"Point Vert","brand:wikidata":"Q16661975","brand:wikipedia":"fr:Magasin vert",name:"Point Vert",shop:"garden_centre"},removeTags:{brand:"Point Vert","brand:wikidata":"Q16661975","brand:wikipedia":"fr:Magasin vert",name:"Point Vert",shop:"garden_centre"},matchScore:2,suggestion:true},"shop/gift/Card Factory":{name:"Card Factory",icon:"maki-gift",geometry:["point","area"],tags:{shop:"gift","brand:wikidata":"Q5038192"},addTags:{brand:"Card Factory","brand:wikidata":"Q5038192","brand:wikipedia":"en:Card Factory",name:"Card Factory",shop:"gift"},removeTags:{brand:"Card Factory","brand:wikidata":"Q5038192","brand:wikipedia":"en:Card Factory",name:"Card Factory",shop:"gift"},matchScore:2,suggestion:true},"shop/gift/Hallmark":{name:"Hallmark",icon:"maki-gift",geometry:["point","area"],tags:{shop:"gift","brand:wikidata":"Q1521910"},addTags:{brand:"Hallmark","brand:wikidata":"Q1521910","brand:wikipedia":"en:Hallmark Cards",name:"Hallmark",shop:"gift"},removeTags:{brand:"Hallmark","brand:wikidata":"Q1521910","brand:wikipedia":"en:Hallmark Cards",name:"Hallmark",shop:"gift"},matchScore:2,suggestion:true},"shop/gift/Nanu-Nana":{name:"Nanu-Nana",icon:"maki-gift",geometry:["point","area"],tags:{shop:"gift","brand:wikidata":"Q1720245"},addTags:{brand:"Nanu-Nana","brand:wikidata":"Q1720245","brand:wikipedia":"de:Nanu-Nana",name:"Nanu-Nana",shop:"gift"},removeTags:{brand:"Nanu-Nana","brand:wikidata":"Q1720245","brand:wikipedia":"de:Nanu-Nana",name:"Nanu-Nana",shop:"gift"},matchScore:2,suggestion:true},"shop/greengrocer/Produce Junction":{name:"Produce Junction",icon:"maki-shop",geometry:["point","area"],tags:{shop:"greengrocer","brand:wikidata":"Q60583541"},addTags:{brand:"Produce Junction","brand:wikidata":"Q60583541",name:"Produce Junction",shop:"greengrocer"},removeTags:{brand:"Produce Junction","brand:wikidata":"Q60583541",name:"Produce Junction",shop:"greengrocer"},matchScore:2,suggestion:true},"shop/hairdresser_supply/Sally Beauty Supply":{name:"Sally Beauty Supply",icon:"maki-shop",geometry:["point","area"],tags:{shop:"hairdresser_supply","brand:wikidata":"Q7405065"},addTags:{brand:"Sally Beauty Supply","brand:wikidata":"Q7405065","brand:wikipedia":"en:Sally Beauty Holdings",name:"Sally Beauty Supply",shop:"hairdresser_supply"},removeTags:{brand:"Sally Beauty Supply","brand:wikidata":"Q7405065","brand:wikipedia":"en:Sally Beauty Holdings",name:"Sally Beauty Supply",shop:"hairdresser_supply"},matchScore:2,suggestion:true},"shop/hairdresser/Fantastic Sams":{name:"Fantastic Sams",icon:"temaki-beauty_salon",geometry:["point","area"],tags:{shop:"hairdresser","brand:wikidata":"Q5434222"},addTags:{brand:"Fantastic Sams","brand:wikidata":"Q5434222","brand:wikipedia":"en:Fantastic Sams",name:"Fantastic Sams",shop:"hairdresser"},removeTags:{brand:"Fantastic Sams","brand:wikidata":"Q5434222","brand:wikipedia":"en:Fantastic Sams",name:"Fantastic Sams",shop:"hairdresser"},matchScore:2,suggestion:true},"shop/hairdresser/First Choice Haircutters":{name:"First Choice Haircutters",icon:"temaki-beauty_salon",geometry:["point","area"],tags:{shop:"hairdresser","brand:wikidata":"Q5452622"},addTags:{brand:"First Choice Haircutters","brand:wikidata":"Q5452622","brand:wikipedia":"en:First Choice Haircutters",name:"First Choice Haircutters",shop:"hairdresser"},removeTags:{brand:"First Choice Haircutters","brand:wikidata":"Q5452622","brand:wikipedia":"en:First Choice Haircutters",name:"First Choice Haircutters",shop:"hairdresser"},matchScore:2,suggestion:true},"shop/hairdresser/Great Clips":{name:"Great Clips",icon:"temaki-beauty_salon",geometry:["point","area"],tags:{shop:"hairdresser","brand:wikidata":"Q5598967"},addTags:{brand:"Great Clips","brand:wikidata":"Q5598967","brand:wikipedia":"en:Great Clips",name:"Great Clips",shop:"hairdresser"},removeTags:{brand:"Great Clips","brand:wikidata":"Q5598967","brand:wikipedia":"en:Great Clips",name:"Great Clips",shop:"hairdresser"},matchScore:2,suggestion:true},"shop/hairdresser/Hair Cuttery":{name:"Hair Cuttery",icon:"temaki-beauty_salon",geometry:["point","area"],tags:{shop:"hairdresser","brand:wikidata":"Q5639484"},addTags:{brand:"Hair Cuttery","brand:wikidata":"Q5639484","brand:wikipedia":"en:Hair Cuttery",name:"Hair Cuttery",shop:"hairdresser"},removeTags:{brand:"Hair Cuttery","brand:wikidata":"Q5639484","brand:wikipedia":"en:Hair Cuttery",name:"Hair Cuttery",shop:"hairdresser"},matchScore:2,suggestion:true},"shop/hairdresser/Hair Express":{name:"Hair Express",icon:"temaki-beauty_salon",geometry:["point","area"],tags:{shop:"hairdresser","brand:wikidata":"Q57550814"},addTags:{brand:"Hair Express","brand:wikidata":"Q57550814",name:"Hair Express",shop:"hairdresser"},removeTags:{brand:"Hair Express","brand:wikidata":"Q57550814",name:"Hair Express",shop:"hairdresser"},matchScore:2,suggestion:true},"shop/hairdresser/Hairkiller":{name:"Hairkiller",icon:"temaki-beauty_salon",geometry:["point","area"],tags:{shop:"hairdresser","brand:wikidata":"Q58305998"},addTags:{brand:"Hairkiller","brand:wikidata":"Q58305998",name:"Hairkiller",shop:"hairdresser"},removeTags:{brand:"Hairkiller","brand:wikidata":"Q58305998",name:"Hairkiller",shop:"hairdresser"},matchScore:2,suggestion:true},"shop/hairdresser/Klier":{name:"Klier",icon:"temaki-beauty_salon",geometry:["point","area"],tags:{shop:"hairdresser","brand:wikidata":"Q1465159"},addTags:{brand:"Klier","brand:wikidata":"Q1465159","brand:wikipedia":"de:Frisör Klier",name:"Klier",shop:"hairdresser"},removeTags:{brand:"Klier","brand:wikidata":"Q1465159","brand:wikipedia":"de:Frisör Klier",name:"Klier",shop:"hairdresser"},matchScore:2,suggestion:true},"shop/hairdresser/Klipp":{name:"Klipp",icon:"temaki-beauty_salon",geometry:["point","area"],tags:{shop:"hairdresser","brand:wikidata":"Q1737304"},addTags:{brand:"Klipp","brand:wikidata":"Q1737304","brand:wikipedia":"de:Klipp Frisör",name:"Klipp",shop:"hairdresser"},removeTags:{brand:"Klipp","brand:wikidata":"Q1737304","brand:wikipedia":"de:Klipp Frisör",name:"Klipp",shop:"hairdresser"},matchScore:2,suggestion:true},"shop/hairdresser/Sport Clips":{name:"Sport Clips",icon:"temaki-beauty_salon",geometry:["point","area"],tags:{shop:"hairdresser","brand:wikidata":"Q7579310"},addTags:{brand:"Sport Clips","brand:wikidata":"Q7579310",name:"Sport Clips",shop:"hairdresser"},removeTags:{brand:"Sport Clips","brand:wikidata":"Q7579310",name:"Sport Clips",shop:"hairdresser"},matchScore:2,suggestion:true},"shop/hairdresser/Supercuts":{name:"Supercuts",icon:"temaki-beauty_salon",geometry:["point","area"],tags:{shop:"hairdresser","brand:wikidata":"Q7643239"},addTags:{brand:"Supercuts","brand:wikidata":"Q7643239","brand:wikipedia":"en:Supercuts",name:"Supercuts",shop:"hairdresser"},removeTags:{brand:"Supercuts","brand:wikidata":"Q7643239","brand:wikipedia":"en:Supercuts",name:"Supercuts",shop:"hairdresser"},matchScore:2,suggestion:true},"shop/hairdresser/Toni & Guy":{name:"Toni & Guy",icon:"temaki-beauty_salon",geometry:["point","area"],tags:{shop:"hairdresser","brand:wikidata":"Q324784"},addTags:{brand:"Toni & Guy","brand:wikidata":"Q324784","brand:wikipedia":"en:Toni & Guy",name:"Toni & Guy",shop:"hairdresser"},removeTags:{brand:"Toni & Guy","brand:wikidata":"Q324784","brand:wikipedia":"en:Toni & Guy",name:"Toni & Guy",shop:"hairdresser"},matchScore:2,suggestion:true},"shop/hardware/Harbor Freight Tools":{name:"Harbor Freight Tools",icon:"temaki-tools",geometry:["point","area"],tags:{shop:"hardware","brand:wikidata":"Q5654601"},addTags:{brand:"Harbor Freight Tools","brand:wikidata":"Q5654601","brand:wikipedia":"en:Harbor Freight Tools",name:"Harbor Freight Tools",shop:"hardware"},removeTags:{brand:"Harbor Freight Tools","brand:wikidata":"Q5654601","brand:wikipedia":"en:Harbor Freight Tools",name:"Harbor Freight Tools",shop:"hardware"},matchScore:2,suggestion:true},"shop/hardware/True Value":{name:"True Value",icon:"temaki-tools",geometry:["point","area"],tags:{shop:"hardware","brand:wikidata":"Q7847545"},addTags:{brand:"True Value","brand:wikidata":"Q7847545","brand:wikipedia":"en:True Value",name:"True Value",shop:"hardware"},removeTags:{brand:"True Value","brand:wikidata":"Q7847545","brand:wikipedia":"en:True Value",name:"True Value",shop:"hardware"},matchScore:2,suggestion:true},"shop/health_food/Holland & Barrett":{name:"Holland & Barrett",icon:"maki-shop",geometry:["point","area"],tags:{shop:"health_food","brand:wikidata":"Q5880870"},addTags:{brand:"Holland & Barrett","brand:wikidata":"Q5880870","brand:wikipedia":"en:Holland & Barrett",name:"Holland & Barrett",shop:"health_food"},removeTags:{brand:"Holland & Barrett","brand:wikidata":"Q5880870","brand:wikipedia":"en:Holland & Barrett",name:"Holland & Barrett",shop:"health_food"},matchScore:2,suggestion:true},"shop/hearing_aids/Amplifon":{name:"Amplifon",icon:"maki-shop",geometry:["point","area"],tags:{shop:"hearing_aids","brand:wikidata":"Q477222"},addTags:{brand:"Amplifon","brand:wikidata":"Q477222","brand:wikipedia":"en:Amplifon",name:"Amplifon",shop:"hearing_aids"},removeTags:{brand:"Amplifon","brand:wikidata":"Q477222","brand:wikipedia":"en:Amplifon",name:"Amplifon",shop:"hearing_aids"},matchScore:2,suggestion:true},"shop/hearing_aids/Audika":{name:"Audika",icon:"maki-shop",geometry:["point","area"],tags:{shop:"hearing_aids","brand:wikidata":"Q2870745"},addTags:{brand:"Audika","brand:wikidata":"Q2870745","brand:wikipedia":"fr:Audika",name:"Audika",shop:"hearing_aids"},removeTags:{brand:"Audika","brand:wikidata":"Q2870745","brand:wikipedia":"fr:Audika",name:"Audika",shop:"hearing_aids"},matchScore:2,suggestion:true},"shop/hearing_aids/Geers":{name:"Geers",icon:"maki-shop",geometry:["point","area"],tags:{shop:"hearing_aids","brand:wikidata":"Q1497707"},addTags:{brand:"Geers","brand:wikidata":"Q1497707","brand:wikipedia":"de:Geers Hörakustik",name:"Geers",shop:"hearing_aids"},removeTags:{brand:"Geers","brand:wikidata":"Q1497707","brand:wikipedia":"de:Geers Hörakustik",name:"Geers",shop:"hearing_aids"},matchScore:2,suggestion:true},"shop/hearing_aids/Kind Hörgeräte":{name:"Kind Hörgeräte",icon:"maki-shop",geometry:["point","area"],tags:{shop:"hearing_aids","brand:wikidata":"Q43598590"},addTags:{brand:"Kind Hörgeräte","brand:wikidata":"Q43598590","brand:wikipedia":"de:Kind Hörgeräte",name:"Kind Hörgeräte",shop:"hearing_aids"},removeTags:{brand:"Kind Hörgeräte","brand:wikidata":"Q43598590","brand:wikipedia":"de:Kind Hörgeräte",name:"Kind Hörgeräte",shop:"hearing_aids"},matchScore:2,suggestion:true},"shop/hearing_aids/Neuroth":{name:"Neuroth",icon:"maki-shop",geometry:["point","area"],tags:{shop:"hearing_aids","brand:wikidata":"Q15836645"},addTags:{brand:"Neuroth","brand:wikidata":"Q15836645",name:"Neuroth",shop:"hearing_aids"},removeTags:{brand:"Neuroth","brand:wikidata":"Q15836645",name:"Neuroth",shop:"hearing_aids"},matchScore:2,suggestion:true},"shop/hifi/Bang & Olufsen":{name:"Bang & Olufsen",icon:"maki-shop",geometry:["point","area"],tags:{shop:"hifi","brand:wikidata":"Q790020"},addTags:{brand:"Bang & Olufsen","brand:wikidata":"Q790020","brand:wikipedia":"en:Bang & Olufsen",name:"Bang & Olufsen",shop:"hifi"},removeTags:{brand:"Bang & Olufsen","brand:wikidata":"Q790020","brand:wikipedia":"en:Bang & Olufsen",name:"Bang & Olufsen",shop:"hifi"},matchScore:2,suggestion:true},"shop/houseware/Bed Bath & Beyond":{name:"Bed Bath & Beyond",icon:"fas-blender",geometry:["point","area"],tags:{shop:"houseware","brand:wikidata":"Q813782"},addTags:{brand:"Bed Bath & Beyond","brand:wikidata":"Q813782","brand:wikipedia":"en:Bed Bath & Beyond",name:"Bed Bath & Beyond",shop:"houseware"},removeTags:{brand:"Bed Bath & Beyond","brand:wikidata":"Q813782","brand:wikipedia":"en:Bed Bath & Beyond",name:"Bed Bath & Beyond",shop:"houseware"},matchScore:2,suggestion:true},"shop/houseware/Blokker":{name:"Blokker",icon:"fas-blender",geometry:["point","area"],tags:{shop:"houseware","brand:wikidata":"Q884934"},addTags:{brand:"Blokker","brand:wikidata":"Q884934","brand:wikipedia":"en:Blokker Holding",name:"Blokker",shop:"houseware"},removeTags:{brand:"Blokker","brand:wikidata":"Q884934","brand:wikipedia":"en:Blokker Holding",name:"Blokker",shop:"houseware"},matchScore:2,suggestion:true},"shop/houseware/Cervera":{name:"Cervera",icon:"fas-blender",geometry:["point","area"],tags:{shop:"houseware","brand:wikidata":"Q10447179"},addTags:{brand:"Cervera","brand:wikidata":"Q10447179","brand:wikipedia":"sv:Cervera (företag)",name:"Cervera",shop:"houseware"},removeTags:{brand:"Cervera","brand:wikidata":"Q10447179","brand:wikipedia":"sv:Cervera (företag)",name:"Cervera",shop:"houseware"},matchScore:2,suggestion:true},"shop/houseware/HomeGoods":{name:"HomeGoods",icon:"fas-blender",geometry:["point","area"],tags:{shop:"houseware","brand:wikidata":"Q5887941"},addTags:{brand:"HomeGoods","brand:wikidata":"Q5887941","brand:wikipedia":"en:HomeGoods",name:"HomeGoods",shop:"houseware"},removeTags:{brand:"HomeGoods","brand:wikidata":"Q5887941","brand:wikipedia":"en:HomeGoods",name:"HomeGoods",shop:"houseware"},matchScore:2,suggestion:true},"shop/houseware/Marskramer":{name:"Marskramer",icon:"fas-blender",geometry:["point","area"],tags:{shop:"houseware","brand:wikidata":"Q2305917"},addTags:{brand:"Marskramer","brand:wikidata":"Q2305917","brand:wikipedia":"nl:Marskramer (warenhuis)",name:"Marskramer",shop:"houseware"},removeTags:{brand:"Marskramer","brand:wikidata":"Q2305917","brand:wikipedia":"nl:Marskramer (warenhuis)",name:"Marskramer",shop:"houseware"},matchScore:2,suggestion:true},"shop/houseware/WMF":{name:"WMF",icon:"fas-blender",geometry:["point","area"],tags:{shop:"houseware","brand:wikidata":"Q451423"},addTags:{brand:"WMF","brand:wikidata":"Q451423","brand:wikipedia":"en:WMF Group",name:"WMF",shop:"houseware"},removeTags:{brand:"WMF","brand:wikidata":"Q451423","brand:wikipedia":"en:WMF Group",name:"WMF",shop:"houseware"},matchScore:2,suggestion:true},"shop/houseware/Xenos":{name:"Xenos",icon:"fas-blender",geometry:["point","area"],tags:{shop:"houseware","brand:wikidata":"Q16547960"},addTags:{brand:"Xenos","brand:wikidata":"Q16547960","brand:wikipedia":"nl:Xenos",name:"Xenos",shop:"houseware"},removeTags:{brand:"Xenos","brand:wikidata":"Q16547960","brand:wikipedia":"nl:Xenos",name:"Xenos",shop:"houseware"},matchScore:2,suggestion:true},"shop/interior_decoration/Depot":{name:"Depot",icon:"maki-shop",geometry:["point","area"],tags:{shop:"interior_decoration","brand:wikidata":"Q1191740"},addTags:{brand:"Depot","brand:wikidata":"Q1191740","brand:wikipedia":"de:Gries Deco Holding",name:"Depot",shop:"interior_decoration"},removeTags:{brand:"Depot","brand:wikidata":"Q1191740","brand:wikipedia":"de:Gries Deco Holding",name:"Depot",shop:"interior_decoration"},matchScore:2,suggestion:true},"shop/interior_decoration/Hemtex":{name:"Hemtex",icon:"maki-shop",geometry:["point","area"],tags:{shop:"interior_decoration","brand:wikidata":"Q10521868"},addTags:{brand:"Hemtex",name:"Hemtex","brand:wikidata":"Q10521868","brand:wikipedia":"sv:Hemtex",shop:"interior_decoration"},removeTags:{brand:"Hemtex",name:"Hemtex","brand:wikidata":"Q10521868","brand:wikipedia":"sv:Hemtex",shop:"interior_decoration"},matchScore:2,suggestion:true},"shop/interior_decoration/Pier 1 Imports":{name:"Pier 1 Imports",icon:"maki-shop",geometry:["point","area"],tags:{shop:"interior_decoration","brand:wikidata":"Q7191691"},addTags:{brand:"Pier 1 Imports","brand:wikidata":"Q7191691","brand:wikipedia":"en:Pier 1 Imports",name:"Pier 1 Imports",shop:"interior_decoration"},removeTags:{brand:"Pier 1 Imports","brand:wikidata":"Q7191691","brand:wikipedia":"en:Pier 1 Imports",name:"Pier 1 Imports",shop:"interior_decoration"},matchScore:2,suggestion:true},"shop/jewelry/Apart":{name:"Apart",icon:"maki-jewelry-store",geometry:["point","area"],tags:{shop:"jewelry","brand:wikidata":"Q11686561"},addTags:{brand:"Apart","brand:wikidata":"Q11686561","brand:wikipedia":"pl:Apart",name:"Apart",shop:"jewelry"},removeTags:{brand:"Apart","brand:wikidata":"Q11686561","brand:wikipedia":"pl:Apart",name:"Apart",shop:"jewelry"},matchScore:2,suggestion:true},"shop/jewelry/Bijou Brigitte":{name:"Bijou Brigitte",icon:"maki-jewelry-store",geometry:["point","area"],tags:{shop:"jewelry","brand:wikidata":"Q599545"},addTags:{brand:"Bijou Brigitte","brand:wikidata":"Q599545","brand:wikipedia":"de:Bijou Brigitte",name:"Bijou Brigitte",shop:"jewelry"},removeTags:{brand:"Bijou Brigitte","brand:wikidata":"Q599545","brand:wikipedia":"de:Bijou Brigitte",name:"Bijou Brigitte",shop:"jewelry"},matchScore:2,suggestion:true},"shop/jewelry/Cartier":{name:"Cartier",icon:"maki-jewelry-store",geometry:["point","area"],tags:{shop:"jewelry","brand:wikidata":"Q538587"},addTags:{brand:"Cartier","brand:wikidata":"Q538587","brand:wikipedia":"en:Cartier (jeweler)",name:"Cartier",shop:"jewelry"},removeTags:{brand:"Cartier","brand:wikidata":"Q538587","brand:wikipedia":"en:Cartier (jeweler)",name:"Cartier",shop:"jewelry"},matchScore:2,suggestion:true},"shop/jewelry/Ernest Jones":{name:"Ernest Jones",icon:"maki-jewelry-store",geometry:["point","area"],tags:{shop:"jewelry","brand:wikidata":"Q5393358"},addTags:{brand:"Ernest Jones","brand:wikidata":"Q5393358","brand:wikipedia":"en:Ernest Jones (retailer)",name:"Ernest Jones",shop:"jewelry"},removeTags:{brand:"Ernest Jones","brand:wikidata":"Q5393358","brand:wikipedia":"en:Ernest Jones (retailer)",name:"Ernest Jones",shop:"jewelry"},matchScore:2,suggestion:true},"shop/jewelry/Guldfynd":{name:"Guldfynd",icon:"maki-jewelry-store",geometry:["point","area"],tags:{shop:"jewelry","brand:wikidata":"Q49099223"},addTags:{brand:"Guldfynd","brand:wikidata":"Q49099223","brand:wikipedia":"sv:Guldfynd",name:"Guldfynd",shop:"jewelry"},removeTags:{brand:"Guldfynd","brand:wikidata":"Q49099223","brand:wikipedia":"sv:Guldfynd",name:"Guldfynd",shop:"jewelry"},matchScore:2,suggestion:true},"shop/jewelry/H Samuel":{name:"H Samuel",icon:"maki-jewelry-store",geometry:["point","area"],tags:{shop:"jewelry","brand:wikidata":"Q5628558"},addTags:{brand:"H Samuel","brand:wikidata":"Q5628558","brand:wikipedia":"en:H. Samuel",name:"H Samuel",shop:"jewelry"},removeTags:{brand:"H Samuel","brand:wikidata":"Q5628558","brand:wikipedia":"en:H. Samuel",name:"H Samuel",shop:"jewelry"},matchScore:2,suggestion:true},"shop/jewelry/James Avery Jewelry":{name:"James Avery Jewelry",icon:"maki-jewelry-store",geometry:["point","area"],tags:{shop:"jewelry","brand:wikidata":"Q6129024"},addTags:{brand:"James Avery Jewelry","brand:wikidata":"Q6129024","brand:wikipedia":"en:James Avery Artisan Jewelry",name:"James Avery Jewelry",shop:"jewelry"},removeTags:{brand:"James Avery Jewelry","brand:wikidata":"Q6129024","brand:wikipedia":"en:James Avery Artisan Jewelry",name:"James Avery Jewelry",shop:"jewelry"},matchScore:2,suggestion:true},"shop/jewelry/Kay Jewelers":{name:"Kay Jewelers",icon:"maki-jewelry-store",geometry:["point","area"],tags:{shop:"jewelry","brand:wikidata":"Q7611434"},addTags:{brand:"Kay Jewelers","brand:wikidata":"Q7611434","brand:wikipedia":"en:Sterling Jewelers",name:"Kay Jewelers",shop:"jewelry"},removeTags:{brand:"Kay Jewelers","brand:wikidata":"Q7611434","brand:wikipedia":"en:Sterling Jewelers",name:"Kay Jewelers",shop:"jewelry"},matchScore:2,suggestion:true},"shop/jewelry/Pandora":{name:"Pandora",icon:"maki-jewelry-store",geometry:["point","area"],tags:{shop:"jewelry","brand:wikidata":"Q2241604"},addTags:{brand:"Pandora","brand:wikidata":"Q2241604","brand:wikipedia":"en:Pandora (jewelry)",name:"Pandora",shop:"jewelry"},removeTags:{brand:"Pandora","brand:wikidata":"Q2241604","brand:wikipedia":"en:Pandora (jewelry)",name:"Pandora",shop:"jewelry"},matchScore:2,suggestion:true},"shop/jewelry/Swarovski":{name:"Swarovski",icon:"maki-jewelry-store",geometry:["point","area"],tags:{shop:"jewelry","brand:wikidata":"Q611115"},addTags:{brand:"Swarovski","brand:wikidata":"Q611115","brand:wikipedia":"en:Swarovski",name:"Swarovski",shop:"jewelry"},removeTags:{brand:"Swarovski","brand:wikidata":"Q611115","brand:wikipedia":"en:Swarovski",name:"Swarovski",shop:"jewelry"},matchScore:2,suggestion:true},"shop/kiosk/Lietuvos spauda":{name:"Lietuvos spauda",icon:"maki-shop",geometry:["point","area"],tags:{shop:"kiosk","brand:wikidata":"Q6514414"},addTags:{brand:"Lietuvos spauda","brand:wikidata":"Q6514414","brand:wikipedia":"lt:Lietuvos spauda",name:"Lietuvos spauda",shop:"kiosk"},removeTags:{brand:"Lietuvos spauda","brand:wikidata":"Q6514414","brand:wikipedia":"lt:Lietuvos spauda",name:"Lietuvos spauda",shop:"kiosk"},matchScore:2,suggestion:true},"shop/kiosk/Narvesen":{name:"Narvesen",icon:"maki-shop",geometry:["point","area"],tags:{shop:"kiosk","brand:wikidata":"Q6514414"},addTags:{brand:"Narvesen","brand:wikidata":"Q6514414","brand:wikipedia":"en:Narvesen",name:"Narvesen",shop:"kiosk"},removeTags:{brand:"Narvesen","brand:wikidata":"Q6514414","brand:wikipedia":"en:Narvesen",name:"Narvesen",shop:"kiosk"},matchScore:2,suggestion:true},"shop/kiosk/Pressbyrån":{name:"Pressbyrån",icon:"maki-shop",geometry:["point","area"],tags:{shop:"kiosk","brand:wikidata":"Q2489072"},addTags:{brand:"Pressbyrån","brand:wikidata":"Q2489072","brand:wikipedia":"en:Pressbyrån",name:"Pressbyrån",shop:"kiosk"},removeTags:{brand:"Pressbyrån","brand:wikidata":"Q2489072","brand:wikipedia":"en:Pressbyrån",name:"Pressbyrån",shop:"kiosk"},matchScore:2,suggestion:true},"shop/kiosk/R-Kioski":{name:"R-Kioski",icon:"maki-shop",geometry:["point","area"],tags:{shop:"kiosk","brand:wikidata":"Q1571400"},addTags:{brand:"R-Kioski","brand:wikidata":"Q1571400","brand:wikipedia":"en:R-kioski",name:"R-Kioski",shop:"kiosk"},removeTags:{brand:"R-Kioski","brand:wikidata":"Q1571400","brand:wikipedia":"en:R-kioski",name:"R-Kioski",shop:"kiosk"},matchScore:2,suggestion:true},"shop/kiosk/Ruch":{name:"Ruch",icon:"maki-shop",geometry:["point","area"],tags:{shop:"kiosk","brand:wikidata":"Q1260314"},addTags:{brand:"Ruch","brand:wikidata":"Q1260314","brand:wikipedia":"pl:Ruch (przedsiębiorstwo)",name:"Ruch",shop:"kiosk"},removeTags:{brand:"Ruch","brand:wikidata":"Q1260314","brand:wikipedia":"pl:Ruch (przedsiębiorstwo)",name:"Ruch",shop:"kiosk"},matchScore:2,suggestion:true},"shop/kiosk/k kiosk":{name:"k kiosk",icon:"maki-shop",geometry:["point","area"],tags:{shop:"kiosk","brand:wikidata":"Q60381703"},addTags:{brand:"k kiosk","brand:wikidata":"Q60381703","brand:wikipedia":"it:K Kiosk",name:"k kiosk",shop:"kiosk"},removeTags:{brand:"k kiosk","brand:wikidata":"Q60381703","brand:wikipedia":"it:K Kiosk",name:"k kiosk",shop:"kiosk"},matchScore:2,suggestion:true},"shop/kitchen/Cuisinella":{name:"Cuisinella",icon:"maki-shop",geometry:["point","area"],tags:{shop:"kitchen","brand:wikidata":"Q3007012"},addTags:{brand:"Cuisinella","brand:wikidata":"Q3007012","brand:wikipedia":"fr:Cuisinella",name:"Cuisinella",shop:"kitchen"},removeTags:{brand:"Cuisinella","brand:wikidata":"Q3007012","brand:wikipedia":"fr:Cuisinella",name:"Cuisinella",shop:"kitchen"},matchScore:2,suggestion:true},"shop/kitchen/Schmidt":{name:"Schmidt",icon:"maki-shop",geometry:["point","area"],tags:{shop:"kitchen","brand:wikidata":"Q3487620"},addTags:{brand:"Schmidt","brand:wikidata":"Q3487620","brand:wikipedia":"de:Schmidt Groupe",name:"Schmidt",shop:"kitchen"},removeTags:{brand:"Schmidt","brand:wikidata":"Q3487620","brand:wikipedia":"de:Schmidt Groupe",name:"Schmidt",shop:"kitchen"},matchScore:2,suggestion:true},"shop/massage/Massage Envy":{name:"Massage Envy",icon:"temaki-spa",geometry:["point","area"],tags:{shop:"massage","brand:wikidata":"Q22922899"},addTags:{brand:"Massage Envy","brand:wikidata":"Q22922899","brand:wikipedia":"en:Massage Envy",name:"Massage Envy",shop:"massage"},removeTags:{brand:"Massage Envy","brand:wikidata":"Q22922899","brand:wikipedia":"en:Massage Envy",name:"Massage Envy",shop:"massage"},matchScore:2,suggestion:true},"shop/mobile_phone/3 Store":{name:"3 Store",icon:"maki-mobile-phone",geometry:["point","area"],tags:{shop:"mobile_phone","brand:wikidata":"Q407009"},addTags:{brand:"3 Store","brand:wikidata":"Q407009","brand:wikipedia":"en:3 (telecommunications)",name:"3 Store",shop:"mobile_phone"},removeTags:{brand:"3 Store","brand:wikidata":"Q407009","brand:wikipedia":"en:3 (telecommunications)",name:"3 Store",shop:"mobile_phone"},matchScore:2,suggestion:true},"shop/mobile_phone/AT&T":{name:"AT&T",icon:"maki-mobile-phone",geometry:["point","area"],tags:{shop:"mobile_phone","brand:wikidata":"Q298594"},addTags:{brand:"AT&T","brand:wikidata":"Q298594","brand:wikipedia":"en:AT&T Mobility",name:"AT&T",shop:"mobile_phone"},removeTags:{brand:"AT&T","brand:wikidata":"Q298594","brand:wikipedia":"en:AT&T Mobility",name:"AT&T",shop:"mobile_phone"},matchScore:2,suggestion:true},"shop/mobile_phone/Bell":{name:"Bell",icon:"maki-mobile-phone",geometry:["point","area"],tags:{shop:"mobile_phone","brand:wikidata":"Q2894594"},addTags:{brand:"Bell","brand:wikidata":"Q2894594","brand:wikipedia":"en:Bell Mobility",name:"Bell",shop:"mobile_phone"},removeTags:{brand:"Bell","brand:wikidata":"Q2894594","brand:wikipedia":"en:Bell Mobility",name:"Bell",shop:"mobile_phone"},matchScore:2,suggestion:true},"shop/mobile_phone/Boost Mobile":{name:"Boost Mobile",icon:"maki-mobile-phone",geometry:["point","area"],tags:{shop:"mobile_phone","brand:wikidata":"Q4943790"},addTags:{brand:"Boost Mobile","brand:wikidata":"Q4943790","brand:wikipedia":"en:Boost Mobile",name:"Boost Mobile",shop:"mobile_phone"},removeTags:{brand:"Boost Mobile","brand:wikidata":"Q4943790","brand:wikipedia":"en:Boost Mobile",name:"Boost Mobile",shop:"mobile_phone"},matchScore:2,suggestion:true},"shop/mobile_phone/Carphone Warehouse":{name:"Carphone Warehouse",icon:"maki-mobile-phone",geometry:["point","area"],tags:{shop:"mobile_phone","brand:wikidata":"Q118046"},addTags:{brand:"Carphone Warehouse","brand:wikidata":"Q118046","brand:wikipedia":"en:Carphone Warehouse",name:"Carphone Warehouse",shop:"mobile_phone"},removeTags:{brand:"Carphone Warehouse","brand:wikidata":"Q118046","brand:wikipedia":"en:Carphone Warehouse",name:"Carphone Warehouse",shop:"mobile_phone"},matchScore:2,suggestion:true},"shop/mobile_phone/Claro":{name:"Claro",icon:"maki-mobile-phone",geometry:["point","area"],tags:{shop:"mobile_phone","brand:wikidata":"Q1770208"},addTags:{brand:"Claro","brand:wikidata":"Q1770208","brand:wikipedia":"en:Claro (company)",name:"Claro",shop:"mobile_phone"},removeTags:{brand:"Claro","brand:wikidata":"Q1770208","brand:wikipedia":"en:Claro (company)",name:"Claro",shop:"mobile_phone"},matchScore:2,suggestion:true},"shop/mobile_phone/Cricket Wireless":{name:"Cricket Wireless",icon:"maki-mobile-phone",geometry:["point","area"],tags:{shop:"mobile_phone","brand:wikidata":"Q5184987"},addTags:{brand:"Cricket Wireless","brand:wikidata":"Q5184987","brand:wikipedia":"en:Cricket Wireless",name:"Cricket Wireless",shop:"mobile_phone"},removeTags:{brand:"Cricket Wireless","brand:wikidata":"Q5184987","brand:wikipedia":"en:Cricket Wireless",name:"Cricket Wireless",shop:"mobile_phone"},matchScore:2,suggestion:true},"shop/mobile_phone/Digicel":{name:"Digicel",icon:"maki-mobile-phone",geometry:["point","area"],tags:{shop:"mobile_phone","brand:wikidata":"Q2117506"},addTags:{brand:"Digicel","brand:wikidata":"Q2117506","brand:wikipedia":"en:Digicel",name:"Digicel",shop:"mobile_phone"},removeTags:{brand:"Digicel","brand:wikidata":"Q2117506","brand:wikipedia":"en:Digicel",name:"Digicel",shop:"mobile_phone"},matchScore:2,suggestion:true},"shop/mobile_phone/EE":{name:"EE",icon:"maki-mobile-phone",geometry:["point","area"],tags:{shop:"mobile_phone","brand:wikidata":"Q5322942"},addTags:{brand:"EE","brand:wikidata":"Q5322942","brand:wikipedia":"en:EE Limited",name:"EE",shop:"mobile_phone"},removeTags:{brand:"EE","brand:wikidata":"Q5322942","brand:wikipedia":"en:EE Limited",name:"EE",shop:"mobile_phone"},matchScore:2,suggestion:true},"shop/mobile_phone/Entel":{name:"Entel",icon:"maki-mobile-phone",geometry:["point","area"],tags:{shop:"mobile_phone","brand:wikidata":"Q5323742"},addTags:{brand:"Entel","brand:wikidata":"Q5323742","brand:wikipedia":"en:ENTel",name:"Entel",shop:"mobile_phone"},removeTags:{brand:"Entel","brand:wikidata":"Q5323742","brand:wikipedia":"en:ENTel",name:"Entel",shop:"mobile_phone"},matchScore:2,suggestion:true},"shop/mobile_phone/MTN":{name:"MTN",icon:"maki-mobile-phone",geometry:["point","area"],tags:{shop:"mobile_phone","brand:wikidata":"Q1813361"},addTags:{brand:"MTN","brand:wikidata":"Q1813361","brand:wikipedia":"en:MTN Group",name:"MTN",shop:"mobile_phone"},removeTags:{brand:"MTN","brand:wikidata":"Q1813361","brand:wikipedia":"en:MTN Group",name:"MTN",shop:"mobile_phone"},matchScore:2,suggestion:true},"shop/mobile_phone/MetroPCS":{name:"MetroPCS",icon:"maki-mobile-phone",geometry:["point","area"],tags:{shop:"mobile_phone","brand:wikidata":"Q1925685"},addTags:{brand:"MetroPCS","brand:wikidata":"Q1925685","brand:wikipedia":"en:Metro by T-Mobile",name:"MetroPCS",shop:"mobile_phone"},removeTags:{brand:"MetroPCS","brand:wikidata":"Q1925685","brand:wikipedia":"en:Metro by T-Mobile",name:"MetroPCS",shop:"mobile_phone"},matchScore:2,suggestion:true},"shop/mobile_phone/Mobilcom Debitel":{name:"Mobilcom Debitel",icon:"maki-mobile-phone",geometry:["point","area"],tags:{shop:"mobile_phone","brand:wikidata":"Q344744"},addTags:{brand:"Mobilcom Debitel","brand:wikidata":"Q344744","brand:wikipedia":"en:Debitel",name:"Mobilcom Debitel",shop:"mobile_phone"},removeTags:{brand:"Mobilcom Debitel","brand:wikidata":"Q344744","brand:wikipedia":"en:Debitel",name:"Mobilcom Debitel",shop:"mobile_phone"},matchScore:2,suggestion:true},"shop/mobile_phone/Moov":{name:"Moov",icon:"maki-mobile-phone",geometry:["point","area"],tags:{shop:"mobile_phone","brand:wikidata":"Q3323637"},addTags:{brand:"Moov","brand:wikidata":"Q3323637","brand:wikipedia":"fr:Moov Côte d'Ivoire",name:"Moov",shop:"mobile_phone"},removeTags:{brand:"Moov","brand:wikidata":"Q3323637","brand:wikipedia":"fr:Moov Côte d'Ivoire",name:"Moov",shop:"mobile_phone"},matchScore:2,suggestion:true},"shop/mobile_phone/Movistar":{name:"Movistar",icon:"maki-mobile-phone",geometry:["point","area"],tags:{shop:"mobile_phone","brand:wikidata":"Q967735"},addTags:{brand:"Movistar","brand:wikidata":"Q967735","brand:wikipedia":"en:Movistar",name:"Movistar",shop:"mobile_phone"},removeTags:{brand:"Movistar","brand:wikidata":"Q967735","brand:wikipedia":"en:Movistar",name:"Movistar",shop:"mobile_phone"},matchScore:2,suggestion:true},"shop/mobile_phone/O2":{name:"O2",icon:"maki-mobile-phone",geometry:["point","area"],tags:{shop:"mobile_phone","brand:wikidata":"Q7072246"},addTags:{brand:"O2","brand:wikidata":"Q7072246","brand:wikipedia":"en:O2 (Ireland)",name:"O2",shop:"mobile_phone"},removeTags:{brand:"O2","brand:wikidata":"Q7072246","brand:wikipedia":"en:O2 (Ireland)",name:"O2",shop:"mobile_phone"},matchScore:2,suggestion:true},"shop/mobile_phone/Orange":{name:"Orange",icon:"maki-mobile-phone",geometry:["point","area"],tags:{shop:"mobile_phone","brand:wikidata":"Q1431486"},addTags:{brand:"Orange","brand:wikidata":"Q1431486","brand:wikipedia":"fr:Orange S.A.",name:"Orange",shop:"mobile_phone"},removeTags:{brand:"Orange","brand:wikidata":"Q1431486","brand:wikipedia":"fr:Orange S.A.",name:"Orange",shop:"mobile_phone"},matchScore:2,suggestion:true},"shop/mobile_phone/Phone House":{name:"Phone House",icon:"maki-mobile-phone",geometry:["point","area"],tags:{shop:"mobile_phone","brand:wikidata":"Q118046"},addTags:{brand:"Phone House","brand:wikidata":"Q118046","brand:wikipedia":"en:Carphone Warehouse",name:"Phone House",shop:"mobile_phone"},removeTags:{brand:"Phone House","brand:wikidata":"Q118046","brand:wikipedia":"en:Carphone Warehouse",name:"Phone House",shop:"mobile_phone"},matchScore:2,suggestion:true},"shop/mobile_phone/Play":{name:"Play",icon:"maki-mobile-phone",geometry:["point","area"],tags:{shop:"mobile_phone","brand:wikidata":"Q7202998"},addTags:{brand:"Play","brand:wikidata":"Q7202998","brand:wikipedia":"en:Play (telecommunications)",name:"Play",shop:"mobile_phone"},removeTags:{brand:"Play","brand:wikidata":"Q7202998","brand:wikipedia":"en:Play (telecommunications)",name:"Play",shop:"mobile_phone"},matchScore:2,suggestion:true},"shop/mobile_phone/Plus":{name:"Plus",icon:"maki-mobile-phone",geometry:["point","area"],tags:{shop:"mobile_phone","brand:wikidata":"Q7205598"},addTags:{brand:"Plus","brand:wikidata":"Q7205598","brand:wikipedia":"pl:Plus (sieć telefonii komórkowej)",name:"Plus",shop:"mobile_phone"},removeTags:{brand:"Plus","brand:wikidata":"Q7205598","brand:wikipedia":"pl:Plus (sieć telefonii komórkowej)",name:"Plus",shop:"mobile_phone"},matchScore:2,suggestion:true},"shop/mobile_phone/Rogers":{name:"Rogers",icon:"maki-mobile-phone",geometry:["point","area"],tags:{shop:"mobile_phone","brand:wikidata":"Q3439663"},addTags:{brand:"Rogers","brand:wikidata":"Q3439663","brand:wikipedia":"en:Rogers Wireless",name:"Rogers",shop:"mobile_phone"},removeTags:{brand:"Rogers","brand:wikidata":"Q3439663","brand:wikipedia":"en:Rogers Wireless",name:"Rogers",shop:"mobile_phone"},matchScore:2,suggestion:true},"shop/mobile_phone/SFR":{name:"SFR",icon:"maki-mobile-phone",geometry:["point","area"],tags:{shop:"mobile_phone","brand:wikidata":"Q218765"},addTags:{brand:"SFR","brand:wikidata":"Q218765","brand:wikipedia":"en:SFR",name:"SFR",shop:"mobile_phone"},removeTags:{brand:"SFR","brand:wikidata":"Q218765","brand:wikipedia":"en:SFR",name:"SFR",shop:"mobile_phone"},matchScore:2,suggestion:true},"shop/mobile_phone/Sprint":{name:"Sprint",icon:"maki-mobile-phone",geometry:["point","area"],tags:{shop:"mobile_phone","brand:wikidata":"Q301965"},addTags:{brand:"Sprint","brand:wikidata":"Q301965","brand:wikipedia":"en:Sprint Corporation",name:"Sprint",shop:"mobile_phone"},removeTags:{brand:"Sprint","brand:wikidata":"Q301965","brand:wikipedia":"en:Sprint Corporation",name:"Sprint",shop:"mobile_phone"},matchScore:2,suggestion:true},"shop/mobile_phone/T-Mobile":{name:"T-Mobile",icon:"maki-mobile-phone",geometry:["point","area"],tags:{shop:"mobile_phone","brand:wikidata":"Q327634"},addTags:{brand:"T-Mobile","brand:wikidata":"Q327634","brand:wikipedia":"en:T-Mobile",name:"T-Mobile",shop:"mobile_phone"},removeTags:{brand:"T-Mobile","brand:wikidata":"Q327634","brand:wikipedia":"en:T-Mobile",name:"T-Mobile",shop:"mobile_phone"},matchScore:2,suggestion:true},"shop/mobile_phone/TIM":{name:"TIM",icon:"maki-mobile-phone",geometry:["point","area"],tags:{shop:"mobile_phone","brand:wikidata":"Q144617"},addTags:{brand:"TIM","brand:wikidata":"Q144617","brand:wikipedia":"en:Telecom Italia",name:"TIM",shop:"mobile_phone"},removeTags:{brand:"TIM","brand:wikidata":"Q144617","brand:wikipedia":"en:Telecom Italia",name:"TIM",shop:"mobile_phone"},matchScore:2,suggestion:true},"shop/mobile_phone/Telcel":{name:"Telcel",icon:"maki-mobile-phone",geometry:["point","area"],tags:{shop:"mobile_phone","brand:wikidata":"Q3517255"},addTags:{brand:"Telcel","brand:wikidata":"Q3517255","brand:wikipedia":"en:Telcel",name:"Telcel",shop:"mobile_phone"},removeTags:{brand:"Telcel","brand:wikidata":"Q3517255","brand:wikipedia":"en:Telcel",name:"Telcel",shop:"mobile_phone"},matchScore:2,suggestion:true},"shop/mobile_phone/Tele2":{name:"Tele2",icon:"maki-mobile-phone",geometry:["point","area"],tags:{shop:"mobile_phone","brand:wikidata":"Q309865"},addTags:{brand:"Tele2","brand:wikidata":"Q309865","brand:wikipedia":"en:Tele2",name:"Tele2",shop:"mobile_phone"},removeTags:{brand:"Tele2","brand:wikidata":"Q309865","brand:wikipedia":"en:Tele2",name:"Tele2",shop:"mobile_phone"},matchScore:2,suggestion:true},"shop/mobile_phone/Telekom":{name:"Telekom",icon:"maki-mobile-phone",geometry:["point","area"],tags:{shop:"mobile_phone","brand:wikidata":"Q9396"},addTags:{brand:"Telekom","brand:wikidata":"Q9396","brand:wikipedia":"en:Deutsche Telekom",name:"Telekom",shop:"mobile_phone"},removeTags:{brand:"Telekom","brand:wikidata":"Q9396","brand:wikipedia":"en:Deutsche Telekom",name:"Telekom",shop:"mobile_phone"},matchScore:2,suggestion:true},"shop/mobile_phone/Telenor":{name:"Telenor",icon:"maki-mobile-phone",geometry:["point","area"],tags:{shop:"mobile_phone","brand:wikidata":"Q845632"},addTags:{brand:"Telenor","brand:wikidata":"Q845632","brand:wikipedia":"en:Telenor",name:"Telenor",shop:"mobile_phone"},removeTags:{brand:"Telenor","brand:wikidata":"Q845632","brand:wikipedia":"en:Telenor",name:"Telenor",shop:"mobile_phone"},matchScore:2,suggestion:true},"shop/mobile_phone/Telstra":{name:"Telstra",icon:"maki-mobile-phone",geometry:["point","area"],tags:{shop:"mobile_phone","brand:wikidata":"Q721162"},addTags:{brand:"Telstra","brand:wikidata":"Q721162","brand:wikipedia":"en:Telstra",name:"Telstra",shop:"mobile_phone"},removeTags:{brand:"Telstra","brand:wikidata":"Q721162","brand:wikipedia":"en:Telstra",name:"Telstra",shop:"mobile_phone"},matchScore:2,suggestion:true},"shop/mobile_phone/Telus":{name:"Telus",icon:"maki-mobile-phone",geometry:["point","area"],tags:{shop:"mobile_phone","brand:wikidata":"Q165858"},addTags:{brand:"Telus","brand:wikidata":"Q165858","brand:wikipedia":"en:Telus",name:"Telus",shop:"mobile_phone"},removeTags:{brand:"Telus","brand:wikidata":"Q165858","brand:wikipedia":"en:Telus",name:"Telus",shop:"mobile_phone"},matchScore:2,suggestion:true},"shop/mobile_phone/Turkcell":{name:"Turkcell",icon:"maki-mobile-phone",geometry:["point","area"],tags:{shop:"mobile_phone","brand:wikidata":"Q283852"},addTags:{brand:"Turkcell","brand:wikidata":"Q283852","brand:wikipedia":"en:Turkcell",name:"Turkcell",shop:"mobile_phone"},removeTags:{brand:"Turkcell","brand:wikidata":"Q283852","brand:wikipedia":"en:Turkcell",name:"Turkcell",shop:"mobile_phone"},matchScore:2,suggestion:true},"shop/mobile_phone/Télécentre":{name:"Télécentre",icon:"maki-mobile-phone",geometry:["point","area"],tags:{shop:"mobile_phone","brand:wikidata":"Q180034"},addTags:{brand:"Télécentre","brand:wikidata":"Q180034","brand:wikipedia":"en:Telecentre",name:"Télécentre",shop:"mobile_phone"},removeTags:{brand:"Télécentre","brand:wikidata":"Q180034","brand:wikipedia":"en:Telecentre",name:"Télécentre",shop:"mobile_phone"},matchScore:2,suggestion:true},"shop/mobile_phone/Verizon Wireless":{name:"Verizon Wireless",icon:"maki-mobile-phone",geometry:["point","area"],tags:{shop:"mobile_phone","brand:wikidata":"Q919641"},addTags:{brand:"Verizon Wireless","brand:wikidata":"Q919641","brand:wikipedia":"en:Verizon Wireless",name:"Verizon Wireless",shop:"mobile_phone"},removeTags:{brand:"Verizon Wireless","brand:wikidata":"Q919641","brand:wikipedia":"en:Verizon Wireless",name:"Verizon Wireless",shop:"mobile_phone"},matchScore:2,suggestion:true},"shop/mobile_phone/Vodafone":{name:"Vodafone",icon:"maki-mobile-phone",geometry:["point","area"],tags:{shop:"mobile_phone","brand:wikidata":"Q122141"},addTags:{brand:"Vodafone","brand:wikidata":"Q122141","brand:wikipedia":"en:Vodafone",name:"Vodafone",shop:"mobile_phone"},removeTags:{brand:"Vodafone","brand:wikidata":"Q122141","brand:wikipedia":"en:Vodafone",name:"Vodafone",shop:"mobile_phone"},matchScore:2,suggestion:true},"shop/mobile_phone/WIFI_ETECSA":{name:"WIFI_ETECSA",icon:"maki-mobile-phone",geometry:["point","area"],tags:{shop:"mobile_phone","brand:wikidata":"Q490323"},addTags:{brand:"WIFI_ETECSA","brand:wikidata":"Q490323","brand:wikipedia":"es:Empresa de Telecomunicaciones de Cuba",name:"WIFI_ETECSA",shop:"mobile_phone"},removeTags:{brand:"WIFI_ETECSA","brand:wikidata":"Q490323","brand:wikipedia":"es:Empresa de Telecomunicaciones de Cuba",name:"WIFI_ETECSA",shop:"mobile_phone"},matchScore:2,suggestion:true},"shop/mobile_phone/Wind":{name:"Wind",icon:"maki-mobile-phone",geometry:["point","area"],tags:{shop:"mobile_phone","brand:wikidata":"Q650467"},addTags:{brand:"Wind","brand:wikidata":"Q650467","brand:wikipedia":"en:WIND (Italy)",name:"Wind",shop:"mobile_phone"},removeTags:{brand:"Wind","brand:wikidata":"Q650467","brand:wikipedia":"en:WIND (Italy)",name:"Wind",shop:"mobile_phone"},matchScore:2,suggestion:true},"shop/mobile_phone/Yoigo":{name:"Yoigo",icon:"maki-mobile-phone",geometry:["point","area"],tags:{shop:"mobile_phone","brand:wikidata":"Q2630989"},addTags:{brand:"Yoigo","brand:wikidata":"Q2630989","brand:wikipedia":"en:Yoigo",name:"Yoigo",shop:"mobile_phone"},removeTags:{brand:"Yoigo","brand:wikidata":"Q2630989","brand:wikipedia":"en:Yoigo",name:"Yoigo",shop:"mobile_phone"},matchScore:2,suggestion:true},"shop/mobile_phone/auショップ":{name:"auショップ",icon:"maki-mobile-phone",geometry:["point","area"],tags:{shop:"mobile_phone","brand:wikidata":"Q11190521"},addTags:{brand:"au","brand:wikidata":"Q11190521","brand:wikipedia":"ja:au (通信)",name:"auショップ",shop:"mobile_phone"},removeTags:{brand:"au","brand:wikidata":"Q11190521","brand:wikipedia":"ja:au (通信)",name:"auショップ",shop:"mobile_phone"},matchScore:2,suggestion:true},"shop/mobile_phone/Алло":{name:"Алло",icon:"maki-mobile-phone",geometry:["point","area"],tags:{shop:"mobile_phone","brand:wikidata":"Q18683057"},addTags:{brand:"Алло","brand:wikidata":"Q18683057","brand:wikipedia":"uk:Алло (торгова мережа)",name:"Алло",shop:"mobile_phone"},removeTags:{brand:"Алло","brand:wikidata":"Q18683057","brand:wikipedia":"uk:Алло (торгова мережа)",name:"Алло",shop:"mobile_phone"},matchScore:2,suggestion:true},"shop/mobile_phone/Билайн":{name:"Билайн",icon:"maki-mobile-phone",geometry:["point","area"],tags:{shop:"mobile_phone","brand:wikidata":"Q402880"},addTags:{brand:"Билайн","brand:en":"Beeline","brand:wikidata":"Q402880","brand:wikipedia":"en:Beeline (brand)",name:"Билайн","name:en":"Beeline",shop:"mobile_phone"},removeTags:{brand:"Билайн","brand:en":"Beeline","brand:wikidata":"Q402880","brand:wikipedia":"en:Beeline (brand)",name:"Билайн","name:en":"Beeline",shop:"mobile_phone"},matchScore:2,suggestion:true},"shop/mobile_phone/Евросеть":{name:"Евросеть",icon:"maki-mobile-phone",geometry:["point","area"],tags:{shop:"mobile_phone","brand:wikidata":"Q65310"},addTags:{brand:"Евросеть","brand:en":"Euroset","brand:wikidata":"Q65310","brand:wikipedia":"en:Euroset",name:"Евросеть","name:en":"Euroset",shop:"mobile_phone"},removeTags:{brand:"Евросеть","brand:en":"Euroset","brand:wikidata":"Q65310","brand:wikipedia":"en:Euroset",name:"Евросеть","name:en":"Euroset",shop:"mobile_phone"},matchScore:2,suggestion:true},"shop/mobile_phone/Київстар":{name:"Київстар",icon:"maki-mobile-phone",geometry:["point","area"],tags:{shop:"mobile_phone","brand:wikidata":"Q2288463"},addTags:{brand:"Київстар","brand:en":"Kyivstar","brand:wikidata":"Q2288463","brand:wikipedia":"en:Kyivstar",name:"Київстар","name:en":"Kyivstar",shop:"mobile_phone"},removeTags:{brand:"Київстар","brand:en":"Kyivstar","brand:wikidata":"Q2288463","brand:wikipedia":"en:Kyivstar",name:"Київстар","name:en":"Kyivstar",shop:"mobile_phone"},matchScore:2,suggestion:true},"shop/mobile_phone/МТС":{name:"МТС",icon:"maki-mobile-phone",geometry:["point","area"],tags:{shop:"mobile_phone","brand:wikidata":"Q1368919"},addTags:{brand:"МТС","brand:en":"MTS","brand:wikidata":"Q1368919","brand:wikipedia":"en:MTS (network provider)",name:"МТС","name:en":"MTS",shop:"mobile_phone"},removeTags:{brand:"МТС","brand:en":"MTS","brand:wikidata":"Q1368919","brand:wikipedia":"en:MTS (network provider)",name:"МТС","name:en":"MTS",shop:"mobile_phone"},matchScore:2,suggestion:true},"shop/mobile_phone/Мегафон":{name:"Мегафон",icon:"maki-mobile-phone",geometry:["point","area"],tags:{shop:"mobile_phone","brand:wikidata":"Q1720713"},addTags:{brand:"Мегафон","brand:en":"MegaFon","brand:wikidata":"Q1720713","brand:wikipedia":"en:MegaFon",name:"Мегафон","name:en":"MegaFon",shop:"mobile_phone"},removeTags:{brand:"Мегафон","brand:en":"MegaFon","brand:wikidata":"Q1720713","brand:wikipedia":"en:MegaFon",name:"Мегафон","name:en":"MegaFon",shop:"mobile_phone"},matchScore:2,suggestion:true},"shop/mobile_phone/Связной":{name:"Связной",icon:"maki-mobile-phone",geometry:["point","area"],tags:{shop:"mobile_phone","brand:wikidata":"Q65371"},addTags:{brand:"Связной","brand:en":"Svyaznoy","brand:wikidata":"Q65371","brand:wikipedia":"en:Svyaznoy",name:"Связной","name:en":"Svyaznoy",shop:"mobile_phone"},removeTags:{brand:"Связной","brand:en":"Svyaznoy","brand:wikidata":"Q65371","brand:wikipedia":"en:Svyaznoy",name:"Связной","name:en":"Svyaznoy",shop:"mobile_phone"},matchScore:2,suggestion:true},"shop/mobile_phone/Теле2":{name:"Теле2",icon:"maki-mobile-phone",geometry:["point","area"],tags:{shop:"mobile_phone","brand:wikidata":"Q309865"},addTags:{brand:"Теле2","brand:en":"Tele2","brand:wikidata":"Q309865","brand:wikipedia":"en:Tele2",name:"Теле2","name:en":"Tele2",shop:"mobile_phone"},removeTags:{brand:"Теле2","brand:en":"Tele2","brand:wikidata":"Q309865","brand:wikipedia":"en:Tele2",name:"Теле2","name:en":"Tele2",shop:"mobile_phone"},matchScore:2,suggestion:true},"shop/mobile_phone/ソフトバンク":{name:"ソフトバンク",icon:"maki-mobile-phone",geometry:["point","area"],tags:{shop:"mobile_phone","brand:wikidata":"Q7553832"},addTags:{brand:"ソフトバンク","brand:en":"SoftBank Telecom","brand:wikidata":"Q7553832","brand:wikipedia":"en:SoftBank Telecom",name:"ソフトバンク","name:en":"SoftBank Telecom",shop:"mobile_phone"},removeTags:{brand:"ソフトバンク","brand:en":"SoftBank Telecom","brand:wikidata":"Q7553832","brand:wikipedia":"en:SoftBank Telecom",name:"ソフトバンク","name:en":"SoftBank Telecom",shop:"mobile_phone"},matchScore:2,suggestion:true},"shop/mobile_phone/ソフトバンクショップ":{name:"ソフトバンクショップ",icon:"maki-mobile-phone",geometry:["point","area"],tags:{shop:"mobile_phone","brand:wikidata":"Q11315281"},addTags:{brand:"ソフトバンクショップ","brand:en":"SoftBankShop","brand:wikidata":"Q11315281","brand:wikipedia":"ja:ソフトバンクショップ",name:"ソフトバンクショップ","name:en":"SoftBankShop",shop:"mobile_phone"},removeTags:{brand:"ソフトバンクショップ","brand:en":"SoftBankShop","brand:wikidata":"Q11315281","brand:wikipedia":"ja:ソフトバンクショップ",name:"ソフトバンクショップ","name:en":"SoftBankShop",shop:"mobile_phone"},matchScore:2,suggestion:true},"shop/mobile_phone/ドコモショップ":{name:"ドコモショップ",icon:"maki-mobile-phone",geometry:["point","area"],tags:{shop:"mobile_phone","brand:wikidata":"Q853958"},addTags:{brand:"ドコモショップ","brand:en":"DoCoMo Shop","brand:wikidata":"Q853958","brand:wikipedia":"ja:NTTドコモ",name:"ドコモショップ","name:en":"DoCoMo Shop",shop:"mobile_phone"},removeTags:{brand:"ドコモショップ","brand:en":"DoCoMo Shop","brand:wikidata":"Q853958","brand:wikipedia":"ja:NTTドコモ",name:"ドコモショップ","name:en":"DoCoMo Shop",shop:"mobile_phone"},matchScore:2,suggestion:true},"shop/money_lender/Money Mart":{name:"Money Mart",icon:"maki-bank",geometry:["point","area"],tags:{shop:"money_lender","brand:wikidata":"Q6899166"},addTags:{brand:"Money Mart","brand:wikidata":"Q6899166","brand:wikipedia":"en:Money Mart",name:"Money Mart",shop:"money_lender"},removeTags:{brand:"Money Mart","brand:wikidata":"Q6899166","brand:wikipedia":"en:Money Mart",name:"Money Mart",shop:"money_lender"},matchScore:2,suggestion:true},"shop/motorcycle/Harley-Davidson":{name:"Harley-Davidson",icon:"fas-motorcycle",geometry:["point","area"],tags:{shop:"motorcycle","brand:wikidata":"Q192814"},addTags:{brand:"Harley-Davidson","brand:wikidata":"Q192814","brand:wikipedia":"en:Harley-Davidson",name:"Harley-Davidson",shop:"motorcycle"},removeTags:{brand:"Harley-Davidson","brand:wikidata":"Q192814","brand:wikipedia":"en:Harley-Davidson",name:"Harley-Davidson",shop:"motorcycle"},matchScore:2,suggestion:true},"shop/motorcycle/Honda":{name:"Honda",icon:"fas-motorcycle",geometry:["point","area"],tags:{shop:"motorcycle","brand:wikidata":"Q9584"},addTags:{brand:"Honda","brand:wikidata":"Q9584","brand:wikipedia":"en:Honda",name:"Honda",shop:"motorcycle"},removeTags:{brand:"Honda","brand:wikidata":"Q9584","brand:wikipedia":"en:Honda",name:"Honda",shop:"motorcycle"},matchScore:2,suggestion:true},"shop/motorcycle/Kawasaki":{name:"Kawasaki",icon:"fas-motorcycle",geometry:["point","area"],tags:{shop:"motorcycle","brand:wikidata":"Q6379855"},addTags:{brand:"Kawasaki","brand:wikidata":"Q6379855","brand:wikipedia":"en:Kawasaki motorcycles",name:"Kawasaki",shop:"motorcycle"},removeTags:{brand:"Kawasaki","brand:wikidata":"Q6379855","brand:wikipedia":"en:Kawasaki motorcycles",name:"Kawasaki",shop:"motorcycle"},matchScore:2,suggestion:true},"shop/motorcycle/Motortrade":{name:"Motortrade",icon:"fas-motorcycle",geometry:["point","area"],tags:{shop:"motorcycle","brand:wikidata":"Q48803162"},addTags:{brand:"Motortrade","brand:wikidata":"Q48803162","brand:wikipedia":"en:Motortrade",name:"Motortrade",shop:"motorcycle"},removeTags:{brand:"Motortrade","brand:wikidata":"Q48803162","brand:wikipedia":"en:Motortrade",name:"Motortrade",shop:"motorcycle"},matchScore:2,suggestion:true},"shop/motorcycle/Suzuki":{name:"Suzuki",icon:"fas-motorcycle",geometry:["point","area"],tags:{shop:"motorcycle","brand:wikidata":"Q181642"},addTags:{brand:"Suzuki","brand:wikidata":"Q181642","brand:wikipedia":"en:Suzuki",name:"Suzuki",shop:"motorcycle"},removeTags:{brand:"Suzuki","brand:wikidata":"Q181642","brand:wikipedia":"en:Suzuki",name:"Suzuki",shop:"motorcycle"},matchScore:2,suggestion:true},"shop/motorcycle/Yamaha":{name:"Yamaha",icon:"fas-motorcycle",geometry:["point","area"],tags:{shop:"motorcycle","brand:wikidata":"Q158888"},addTags:{brand:"Yamaha","brand:wikidata":"Q158888","brand:wikipedia":"en:Yamaha Motor Company",name:"Yamaha",shop:"motorcycle"},removeTags:{brand:"Yamaha","brand:wikidata":"Q158888","brand:wikipedia":"en:Yamaha Motor Company",name:"Yamaha",shop:"motorcycle"},matchScore:2,suggestion:true},"shop/musical_instrument/Guitar Center":{name:"Guitar Center",icon:"maki-music",geometry:["point","area"],tags:{shop:"musical_instrument","brand:wikidata":"Q3622794"},addTags:{brand:"Guitar Center","brand:wikidata":"Q3622794","brand:wikipedia":"en:Guitar Center",name:"Guitar Center",shop:"musical_instrument"},removeTags:{brand:"Guitar Center","brand:wikidata":"Q3622794","brand:wikipedia":"en:Guitar Center",name:"Guitar Center",shop:"musical_instrument"},matchScore:2,suggestion:true},"shop/music/HMV":{name:"HMV",icon:"maki-music",geometry:["point","area"],tags:{shop:"music","brand:wikidata":"Q10854572"},addTags:{brand:"HMV","brand:wikidata":"Q10854572","brand:wikipedia":"en:HMV",name:"HMV",shop:"music"},removeTags:{brand:"HMV","brand:wikidata":"Q10854572","brand:wikipedia":"en:HMV",name:"HMV",shop:"music"},matchScore:2,suggestion:true},"shop/music/TSUTAYA":{name:"TSUTAYA",icon:"maki-music",geometry:["point","area"],tags:{shop:"music","brand:wikidata":"Q5193457"},addTags:{brand:"TSUTAYA","brand:wikidata":"Q5193457","brand:wikipedia":"ja:カルチュア・コンビニエンス・クラブ",name:"TSUTAYA",shop:"music"},removeTags:{brand:"TSUTAYA","brand:wikidata":"Q5193457","brand:wikipedia":"ja:カルチュア・コンビニエンス・クラブ",name:"TSUTAYA",shop:"music"},matchScore:2,suggestion:true},"shop/newsagent/Kolporter":{name:"Kolporter",icon:"maki-shop",geometry:["point","area"],tags:{shop:"newsagent","brand:wikidata":"Q6427874"},addTags:{brand:"Kolporter","brand:wikidata":"Q6427874","brand:wikipedia":"pl:Kolporter (przedsiębiorstwo)",name:"Kolporter",shop:"kiosk"},removeTags:{brand:"Kolporter","brand:wikidata":"Q6427874","brand:wikipedia":"pl:Kolporter (przedsiębiorstwo)",name:"Kolporter",shop:"kiosk"},matchScore:2,suggestion:true},"shop/newsagent/読売新聞":{name:"読売新聞",icon:"maki-shop",geometry:["point","area"],tags:{shop:"newsagent","brand:wikidata":"Q645218"},addTags:{brand:"読売新聞","brand:en":"Yomiuri Shimbun","brand:wikidata":"Q645218","brand:wikipedia":"en:Yomiuri Shimbun",name:"読売新聞","name:en":"Yomiuri Shimbun",shop:"newsagent"},removeTags:{brand:"読売新聞","brand:en":"Yomiuri Shimbun","brand:wikidata":"Q645218","brand:wikipedia":"en:Yomiuri Shimbun",name:"読売新聞","name:en":"Yomiuri Shimbun",shop:"newsagent"},matchScore:2,suggestion:true},"shop/nutrition_supplements/GNC":{name:"GNC",icon:"maki-shop",geometry:["point","area"],tags:{shop:"nutrition_supplements","brand:wikidata":"Q4808595"},addTags:{brand:"GNC","brand:wikidata":"Q4808595","brand:wikipedia":"en:GNC (store)",name:"GNC",shop:"nutrition_supplements"},removeTags:{brand:"GNC","brand:wikidata":"Q4808595","brand:wikipedia":"en:GNC (store)",name:"GNC",shop:"nutrition_supplements"},matchScore:2,suggestion:true},"shop/optician/Alain Afflelou":{name:"Alain Afflelou",icon:"maki-optician",geometry:["point","area"],tags:{shop:"optician","brand:wikidata":"Q2829511"},addTags:{brand:"Alain Afflelou","brand:wikidata":"Q2829511","brand:wikipedia":"fr:Alain Afflelou (entreprise)",name:"Alain Afflelou",shop:"optician"},removeTags:{brand:"Alain Afflelou","brand:wikidata":"Q2829511","brand:wikipedia":"fr:Alain Afflelou (entreprise)",name:"Alain Afflelou",shop:"optician"},matchScore:2,suggestion:true},"shop/optician/Apollo":{name:"Apollo",icon:"maki-optician",geometry:["point","area"],tags:{shop:"optician","brand:wikidata":"Q618940"},addTags:{brand:"Apollo","brand:wikidata":"Q618940","brand:wikipedia":"de:Apollo-Optik",name:"Apollo",shop:"optician"},removeTags:{brand:"Apollo","brand:wikidata":"Q618940","brand:wikipedia":"de:Apollo-Optik",name:"Apollo",shop:"optician"},matchScore:2,suggestion:true},"shop/optician/Atol":{name:"Atol",icon:"maki-optician",geometry:["point","area"],tags:{shop:"optician","brand:wikidata":"Q2869542"},addTags:{brand:"Atol","brand:wikidata":"Q2869542","brand:wikipedia":"fr:Atol (opticien)",name:"Atol",shop:"optician"},removeTags:{brand:"Atol","brand:wikidata":"Q2869542","brand:wikipedia":"fr:Atol (opticien)",name:"Atol",shop:"optician"},matchScore:2,suggestion:true},"shop/optician/Boots Opticians":{name:"Boots Opticians",icon:"maki-optician",geometry:["point","area"],tags:{shop:"optician","brand:wikidata":"Q4944037"},addTags:{brand:"Boots Opticians","brand:wikidata":"Q4944037","brand:wikipedia":"en:Boots Opticians",name:"Boots Opticians",shop:"optician"},removeTags:{brand:"Boots Opticians","brand:wikidata":"Q4944037","brand:wikipedia":"en:Boots Opticians",name:"Boots Opticians",shop:"optician"},matchScore:2,suggestion:true},"shop/optician/Fielmann":{name:"Fielmann",icon:"maki-optician",geometry:["point","area"],tags:{shop:"optician","brand:wikidata":"Q457822"},addTags:{brand:"Fielmann","brand:wikidata":"Q457822","brand:wikipedia":"en:Fielmann",name:"Fielmann",shop:"optician"},removeTags:{brand:"Fielmann","brand:wikidata":"Q457822","brand:wikipedia":"en:Fielmann",name:"Fielmann",shop:"optician"},matchScore:2,suggestion:true},"shop/optician/Grand Optical":{name:"Grand Optical",icon:"maki-optician",geometry:["point","area"],tags:{shop:"optician","brand:wikidata":"Q3113677"},addTags:{brand:"Grand Optical","brand:wikidata":"Q3113677","brand:wikipedia":"fr:Grand Optical",name:"Grand Optical",shop:"optician"},removeTags:{brand:"Grand Optical","brand:wikidata":"Q3113677","brand:wikipedia":"fr:Grand Optical",name:"Grand Optical",shop:"optician"},matchScore:2,suggestion:true},"shop/optician/Hakim Optical":{name:"Hakim Optical",icon:"maki-optician",geometry:["point","area"],tags:{shop:"optician","brand:wikidata":"Q28232761"},addTags:{brand:"Hakim Optical","brand:wikidata":"Q28232761","brand:wikipedia":"en:Hakim Optical",name:"Hakim Optical",shop:"optician"},removeTags:{brand:"Hakim Optical","brand:wikidata":"Q28232761","brand:wikipedia":"en:Hakim Optical",name:"Hakim Optical",shop:"optician"},matchScore:2,suggestion:true},"shop/optician/Hans Anders":{name:"Hans Anders",icon:"maki-optician",geometry:["point","area"],tags:{shop:"optician","brand:wikidata":"Q1884976"},addTags:{brand:"Hans Anders","brand:wikidata":"Q1884976","brand:wikipedia":"nl:Hans Anders",name:"Hans Anders",shop:"optician"},removeTags:{brand:"Hans Anders","brand:wikidata":"Q1884976","brand:wikipedia":"nl:Hans Anders",name:"Hans Anders",shop:"optician"},matchScore:2,suggestion:true},"shop/optician/Krys":{name:"Krys",icon:"maki-optician",geometry:["point","area"],tags:{shop:"optician","brand:wikidata":"Q3119538"},addTags:{brand:"Krys","brand:wikidata":"Q3119538","brand:wikipedia":"fr:Krys Group",name:"Krys",shop:"optician"},removeTags:{brand:"Krys","brand:wikidata":"Q3119538","brand:wikipedia":"fr:Krys Group",name:"Krys",shop:"optician"},matchScore:2,suggestion:true},"shop/optician/LensCrafters":{name:"LensCrafters",icon:"maki-optician",geometry:["point","area"],tags:{shop:"optician","brand:wikidata":"Q6523209"},addTags:{brand:"LensCrafters","brand:wikidata":"Q6523209","brand:wikipedia":"en:LensCrafters",name:"LensCrafters",shop:"optician"},removeTags:{brand:"LensCrafters","brand:wikidata":"Q6523209","brand:wikipedia":"en:LensCrafters",name:"LensCrafters",shop:"optician"},matchScore:2,suggestion:true},"shop/optician/Les Opticiens Mutualistes":{name:"Les Opticiens Mutualistes",icon:"maki-optician",geometry:["point","area"],tags:{shop:"optician","brand:wikidata":"Q18414551"},addTags:{brand:"Les Opticiens Mutualistes","brand:wikidata":"Q18414551","brand:wikipedia":"fr:Les Opticiens Mutualistes",name:"Les Opticiens Mutualistes",shop:"optician"},removeTags:{brand:"Les Opticiens Mutualistes","brand:wikidata":"Q18414551","brand:wikipedia":"fr:Les Opticiens Mutualistes",name:"Les Opticiens Mutualistes",shop:"optician"},matchScore:2,suggestion:true},"shop/optician/Optic 2000":{name:"Optic 2000",icon:"maki-optician",geometry:["point","area"],tags:{shop:"optician","brand:wikidata":"Q3354445"},addTags:{brand:"Optic 2000","brand:wikidata":"Q3354445","brand:wikipedia":"fr:Optic 2000",name:"Optic 2000",shop:"optician"},removeTags:{brand:"Optic 2000","brand:wikidata":"Q3354445","brand:wikipedia":"fr:Optic 2000",name:"Optic 2000",shop:"optician"},matchScore:2,suggestion:true},"shop/optician/Pearle":{name:"Pearle",icon:"maki-optician",geometry:["point","area"],tags:{shop:"optician","brand:wikidata":"Q2231148"},addTags:{brand:"Pearle","brand:wikidata":"Q2231148","brand:wikipedia":"en:Pearle Vision",name:"Pearle",shop:"optician"},removeTags:{brand:"Pearle","brand:wikidata":"Q2231148","brand:wikipedia":"en:Pearle Vision",name:"Pearle",shop:"optician"},matchScore:2,suggestion:true},"shop/optician/Pearle Vision":{name:"Pearle Vision",icon:"maki-optician",geometry:["point","area"],tags:{shop:"optician","brand:wikidata":"Q2231148"},addTags:{brand:"Pearle Vision","brand:wikidata":"Q2231148","brand:wikipedia":"en:Pearle Vision",name:"Pearle Vision",shop:"optician"},removeTags:{brand:"Pearle Vision","brand:wikidata":"Q2231148","brand:wikipedia":"en:Pearle Vision",name:"Pearle Vision",shop:"optician"},matchScore:2,suggestion:true},"shop/optician/Specsavers":{name:"Specsavers",icon:"maki-optician",geometry:["point","area"],tags:{shop:"optician","brand:wikidata":"Q2000610"},addTags:{brand:"Specsavers","brand:wikidata":"Q2000610","brand:wikipedia":"en:Specsavers",name:"Specsavers",shop:"optician"},removeTags:{brand:"Specsavers","brand:wikidata":"Q2000610","brand:wikipedia":"en:Specsavers",name:"Specsavers",shop:"optician"},matchScore:2,suggestion:true},"shop/optician/Sunglass Hut":{name:"Sunglass Hut",icon:"maki-optician",geometry:["point","area"],tags:{shop:"optician","brand:wikidata":"Q136311"},addTags:{brand:"Sunglass Hut","brand:wikidata":"Q136311","brand:wikipedia":"en:Sunglass Hut",name:"Sunglass Hut",shop:"optician"},removeTags:{brand:"Sunglass Hut","brand:wikidata":"Q136311","brand:wikipedia":"en:Sunglass Hut",name:"Sunglass Hut",shop:"optician"},matchScore:2,suggestion:true},"shop/optician/Synoptik":{name:"Synoptik",icon:"maki-optician",geometry:["point","area"],tags:{shop:"optician","brand:wikidata":"Q10687541"},addTags:{brand:"Synoptik","brand:wikidata":"Q10687541","brand:wikipedia":"sv:Synoptik",name:"Synoptik",shop:"optician"},removeTags:{brand:"Synoptik","brand:wikidata":"Q10687541","brand:wikipedia":"sv:Synoptik",name:"Synoptik",shop:"optician"},matchScore:2,suggestion:true},"shop/optician/Synsam":{name:"Synsam",icon:"maki-optician",geometry:["point","area"],tags:{shop:"optician","brand:wikidata":"Q12004589"},addTags:{brand:"Synsam","brand:wikidata":"Q12004589","brand:wikipedia":"sv:Synsam",name:"Synsam",shop:"optician"},removeTags:{brand:"Synsam","brand:wikidata":"Q12004589","brand:wikipedia":"sv:Synsam",name:"Synsam",shop:"optician"},matchScore:2,suggestion:true},"shop/optician/Vision Express":{name:"Vision Express",icon:"maki-optician",geometry:["point","area"],tags:{shop:"optician","brand:wikidata":"Q7936150"},addTags:{brand:"Vision Express","brand:wikidata":"Q7936150","brand:wikipedia":"en:Vision Express",name:"Vision Express",shop:"optician"},removeTags:{brand:"Vision Express","brand:wikidata":"Q7936150","brand:wikipedia":"en:Vision Express",name:"Vision Express",shop:"optician"},matchScore:2,suggestion:true},"shop/optician/Visionworks":{name:"Visionworks",icon:"maki-optician",geometry:["point","area"],tags:{shop:"optician","brand:wikidata":"Q5422607"},addTags:{brand:"Visionworks","brand:wikidata":"Q5422607","brand:wikipedia":"en:Visionworks",name:"Visionworks",shop:"optician"},removeTags:{brand:"Visionworks","brand:wikidata":"Q5422607","brand:wikipedia":"en:Visionworks",name:"Visionworks",shop:"optician"},matchScore:2,suggestion:true},"shop/optician/メガネスーパー":{name:"メガネスーパー",icon:"maki-optician",geometry:["point","area"],tags:{shop:"optician","brand:wikidata":"Q11343504"},addTags:{brand:"メガネスーパー","brand:wikidata":"Q11343504","brand:wikipedia":"ja:メガネスーパー",name:"メガネスーパー",shop:"optician"},removeTags:{brand:"メガネスーパー","brand:wikidata":"Q11343504","brand:wikipedia":"ja:メガネスーパー",name:"メガネスーパー",shop:"optician"},matchScore:2,suggestion:true},"shop/outdoor/Jack Wolfskin":{name:"Jack Wolfskin",icon:"temaki-compass",geometry:["point","area"],tags:{shop:"outdoor","brand:wikidata":"Q536133"},addTags:{brand:"Jack Wolfskin","brand:wikidata":"Q536133","brand:wikipedia":"en:Jack Wolfskin",name:"Jack Wolfskin",shop:"outdoor"},removeTags:{brand:"Jack Wolfskin","brand:wikidata":"Q536133","brand:wikipedia":"en:Jack Wolfskin",name:"Jack Wolfskin",shop:"outdoor"},matchScore:2,suggestion:true},"shop/outdoor/Kathmandu":{name:"Kathmandu",icon:"temaki-compass",geometry:["point","area"],tags:{shop:"outdoor","brand:wikidata":"Q1736294"},addTags:{brand:"Kathmandu","brand:wikidata":"Q1736294","brand:wikipedia":"en:Kathmandu (company)",name:"Kathmandu",shop:"outdoor"},removeTags:{brand:"Kathmandu","brand:wikidata":"Q1736294","brand:wikipedia":"en:Kathmandu (company)",name:"Kathmandu",shop:"outdoor"},matchScore:2,suggestion:true},"shop/outdoor/Mountain Warehouse":{name:"Mountain Warehouse",icon:"temaki-compass",geometry:["point","area"],tags:{shop:"outdoor","brand:wikidata":"Q6925414"},addTags:{brand:"Mountain Warehouse","brand:wikidata":"Q6925414","brand:wikipedia":"en:Mountain Warehouse",name:"Mountain Warehouse",shop:"outdoor"},removeTags:{brand:"Mountain Warehouse","brand:wikidata":"Q6925414","brand:wikipedia":"en:Mountain Warehouse",name:"Mountain Warehouse",shop:"outdoor"},matchScore:2,suggestion:true},"shop/outdoor/REI":{name:"REI",icon:"temaki-compass",geometry:["point","area"],tags:{shop:"outdoor","brand:wikidata":"Q3414933"},addTags:{brand:"REI","brand:wikidata":"Q3414933","brand:wikipedia":"en:Recreational Equipment, Inc.",name:"REI",shop:"outdoor"},removeTags:{brand:"REI","brand:wikidata":"Q3414933","brand:wikipedia":"en:Recreational Equipment, Inc.",name:"REI",shop:"outdoor"},matchScore:2,suggestion:true},"shop/outdoor/Trespass":{name:"Trespass",icon:"temaki-compass",geometry:["point","area"],tags:{shop:"outdoor","brand:wikidata":"Q17035733"},addTags:{brand:"Trespass","brand:wikidata":"Q17035733","brand:wikipedia":"en:Trespass (clothing)",name:"Trespass",shop:"outdoor"},removeTags:{brand:"Trespass","brand:wikidata":"Q17035733","brand:wikipedia":"en:Trespass (clothing)",name:"Trespass",shop:"outdoor"},matchScore:2,suggestion:true},"shop/paint/Benjamin Moore":{name:"Benjamin Moore",icon:"fas-paint-roller",geometry:["point","area"],tags:{shop:"paint","brand:wikidata":"Q4889038"},addTags:{brand:"Benjamin Moore","brand:wikidata":"Q4889038","brand:wikipedia":"en:Benjamin Moore & Co.",name:"Benjamin Moore",shop:"paint"},removeTags:{brand:"Benjamin Moore","brand:wikidata":"Q4889038","brand:wikipedia":"en:Benjamin Moore & Co.",name:"Benjamin Moore",shop:"paint"},matchScore:2,suggestion:true},"shop/paint/Comex":{name:"Comex",icon:"fas-paint-roller",geometry:["point","area"],tags:{shop:"paint","brand:wikidata":"Q5151654"},addTags:{brand:"Comex","brand:wikidata":"Q5151654","brand:wikipedia":"en:Comex Group",name:"Comex",shop:"paint"},removeTags:{brand:"Comex","brand:wikidata":"Q5151654","brand:wikipedia":"en:Comex Group",name:"Comex",shop:"paint"},matchScore:2,suggestion:true},"shop/paint/Jotun":{name:"Jotun",icon:"fas-paint-roller",geometry:["point","area"],tags:{shop:"paint","brand:wikidata":"Q1778870"},addTags:{brand:"Jotun","brand:wikidata":"Q1778870","brand:wikipedia":"en:Jotun (company)",name:"Jotun",shop:"paint"},removeTags:{brand:"Jotun","brand:wikidata":"Q1778870","brand:wikipedia":"en:Jotun (company)",name:"Jotun",shop:"paint"},matchScore:2,suggestion:true},"shop/paint/Sherwin Williams":{name:"Sherwin Williams",icon:"fas-paint-roller",geometry:["point","area"],tags:{shop:"paint","brand:wikidata":"Q48881"},addTags:{brand:"Sherwin Williams","brand:wikidata":"Q48881","brand:wikipedia":"en:Sherwin-Williams",name:"Sherwin Williams",shop:"paint"},removeTags:{brand:"Sherwin Williams","brand:wikidata":"Q48881","brand:wikipedia":"en:Sherwin-Williams",name:"Sherwin Williams",shop:"paint"},matchScore:2,suggestion:true},"shop/party/Party City":{name:"Party City",icon:"maki-shop",geometry:["point","area"],tags:{shop:"party","brand:wikidata":"Q7140896"},addTags:{brand:"Party City","brand:wikidata":"Q7140896","brand:wikipedia":"en:Party City",name:"Party City",shop:"party"},removeTags:{brand:"Party City","brand:wikidata":"Q7140896","brand:wikipedia":"en:Party City",name:"Party City",shop:"party"},matchScore:2,suggestion:true},"shop/pawnbroker/Cash Converters":{name:"Cash Converters",icon:"maki-shop",geometry:["point","area"],tags:{shop:"pawnbroker","brand:wikidata":"Q5048645"},addTags:{brand:"Cash Converters","brand:wikidata":"Q5048645","brand:wikipedia":"en:Cash Converters",name:"Cash Converters",shop:"pawnbroker"},removeTags:{brand:"Cash Converters","brand:wikidata":"Q5048645","brand:wikipedia":"en:Cash Converters",name:"Cash Converters",shop:"pawnbroker"},matchScore:2,suggestion:true},"shop/pawnbroker/Cebuana Lhuillier":{name:"Cebuana Lhuillier",icon:"maki-shop",geometry:["point","area"],tags:{shop:"pawnbroker","brand:wikidata":"Q17064661"},addTags:{brand:"Cebuana Lhuillier","brand:wikidata":"Q17064661","brand:wikipedia":"en:Cebuana Lhuillier",name:"Cebuana Lhuillier",shop:"pawnbroker"},removeTags:{brand:"Cebuana Lhuillier","brand:wikidata":"Q17064661","brand:wikipedia":"en:Cebuana Lhuillier",name:"Cebuana Lhuillier",shop:"pawnbroker"},matchScore:2,suggestion:true},"shop/perfumery/Douglas":{name:"Douglas",icon:"maki-shop",geometry:["point","area"],tags:{shop:"perfumery","brand:wikidata":"Q2052213"},addTags:{brand:"Douglas","brand:wikidata":"Q2052213","brand:wikipedia":"de:Parfümerie Douglas",name:"Douglas",shop:"perfumery"},removeTags:{brand:"Douglas","brand:wikidata":"Q2052213","brand:wikipedia":"de:Parfümerie Douglas",name:"Douglas",shop:"perfumery"},matchScore:2,suggestion:true},"shop/perfumery/ICI PARIS XL":{name:"ICI PARIS XL",icon:"maki-shop",geometry:["point","area"],tags:{shop:"perfumery","brand:wikidata":"Q769749"},addTags:{brand:"ICI PARIS XL","brand:wikidata":"Q769749","brand:wikipedia":"en:ICI Paris XL",name:"ICI PARIS XL",shop:"perfumery"},removeTags:{brand:"ICI PARIS XL","brand:wikidata":"Q769749","brand:wikipedia":"en:ICI Paris XL",name:"ICI PARIS XL",shop:"perfumery"},matchScore:2,suggestion:true},"shop/perfumery/Marionnaud":{name:"Marionnaud",icon:"maki-shop",geometry:["point","area"],tags:{shop:"perfumery","brand:wikidata":"Q1129073"},addTags:{brand:"Marionnaud","brand:wikidata":"Q1129073","brand:wikipedia":"fr:Marionnaud Parfumeries",name:"Marionnaud",shop:"perfumery"},removeTags:{brand:"Marionnaud","brand:wikidata":"Q1129073","brand:wikipedia":"fr:Marionnaud Parfumeries",name:"Marionnaud",shop:"perfumery"},matchScore:2,suggestion:true},"shop/perfumery/O Boticário":{name:"O Boticário",icon:"maki-shop",geometry:["point","area"],tags:{shop:"perfumery","brand:wikidata":"Q7073219"},addTags:{brand:"O Boticário","brand:wikidata":"Q7073219","brand:wikipedia":"en:O Boticário",name:"O Boticário",shop:"perfumery"},removeTags:{brand:"O Boticário","brand:wikidata":"Q7073219","brand:wikipedia":"en:O Boticário",name:"O Boticário",shop:"perfumery"},matchScore:2,suggestion:true},"shop/pet/Das Futterhaus":{name:"Das Futterhaus",icon:"maki-dog-park",geometry:["point","area"],tags:{shop:"pet","brand:wikidata":"Q1167914"},addTags:{brand:"Das Futterhaus","brand:wikidata":"Q1167914","brand:wikipedia":"de:Das Futterhaus",name:"Das Futterhaus",shop:"pet"},removeTags:{brand:"Das Futterhaus","brand:wikidata":"Q1167914","brand:wikipedia":"de:Das Futterhaus",name:"Das Futterhaus",shop:"pet"},matchScore:2,suggestion:true},"shop/pet/Fressnapf":{name:"Fressnapf",icon:"maki-dog-park",geometry:["point","area"],tags:{shop:"pet","brand:wikidata":"Q875796"},addTags:{brand:"Fressnapf","brand:wikidata":"Q875796","brand:wikipedia":"en:Fressnapf",name:"Fressnapf",shop:"pet"},removeTags:{brand:"Fressnapf","brand:wikidata":"Q875796","brand:wikipedia":"en:Fressnapf",name:"Fressnapf",shop:"pet"},matchScore:2,suggestion:true},"shop/pet/Global Pet Foods":{name:"Global Pet Foods",icon:"maki-dog-park",geometry:["point","area"],tags:{shop:"pet","brand:wikidata":"Q57985699"},addTags:{brand:"Global Pet Foods","brand:wikidata":"Q57985699",name:"Global Pet Foods",shop:"pet"},removeTags:{brand:"Global Pet Foods","brand:wikidata":"Q57985699",name:"Global Pet Foods",shop:"pet"},matchScore:2,suggestion:true},"shop/pet/Maxi Zoo":{name:"Maxi Zoo",icon:"maki-dog-park",geometry:["point","area"],tags:{shop:"pet","brand:wikidata":"Q875796"},addTags:{brand:"Maxi Zoo","brand:wikidata":"Q875796","brand:wikipedia":"en:Fressnapf",name:"Maxi Zoo",shop:"pet"},removeTags:{brand:"Maxi Zoo","brand:wikidata":"Q875796","brand:wikipedia":"en:Fressnapf",name:"Maxi Zoo",shop:"pet"},matchScore:2,suggestion:true},"shop/pet/Pet Supplies Plus":{name:"Pet Supplies Plus",icon:"maki-dog-park",geometry:["point","area"],tags:{shop:"pet","brand:wikidata":"Q7171563"},addTags:{brand:"Pet Supplies Plus","brand:wikidata":"Q7171563","brand:wikipedia":"en:Pet Supplies Plus",name:"Pet Supplies Plus",shop:"pet"},removeTags:{brand:"Pet Supplies Plus","brand:wikidata":"Q7171563","brand:wikipedia":"en:Pet Supplies Plus",name:"Pet Supplies Plus",shop:"pet"},matchScore:2,suggestion:true},"shop/pet/Pet Valu":{name:"Pet Valu",icon:"maki-dog-park",geometry:["point","area"],tags:{shop:"pet","brand:wikidata":"Q58009635"},addTags:{brand:"Pet Valu","brand:wikidata":"Q58009635",name:"Pet Valu",shop:"pet"},removeTags:{brand:"Pet Valu","brand:wikidata":"Q58009635",name:"Pet Valu",shop:"pet"},matchScore:2,suggestion:true},"shop/pet/PetSmart":{name:"PetSmart",icon:"maki-dog-park",geometry:["point","area"],tags:{shop:"pet","brand:wikidata":"Q3307147"},addTags:{brand:"PetSmart","brand:wikidata":"Q3307147","brand:wikipedia":"en:PetSmart",name:"PetSmart",shop:"pet"},removeTags:{brand:"PetSmart","brand:wikidata":"Q3307147","brand:wikipedia":"en:PetSmart",name:"PetSmart",shop:"pet"},matchScore:2,suggestion:true},"shop/pet/Petco":{name:"Petco",icon:"maki-dog-park",geometry:["point","area"],tags:{shop:"pet","brand:wikidata":"Q7171798"},addTags:{brand:"Petco","brand:wikidata":"Q7171798","brand:wikipedia":"en:Petco",name:"Petco",shop:"pet"},removeTags:{brand:"Petco","brand:wikidata":"Q7171798","brand:wikipedia":"en:Petco",name:"Petco",shop:"pet"},matchScore:2,suggestion:true},"shop/pet/Pets at Home":{name:"Pets at Home",icon:"maki-dog-park",geometry:["point","area"],tags:{shop:"pet","brand:wikidata":"Q7179258"},addTags:{brand:"Pets at Home","brand:wikidata":"Q7179258","brand:wikipedia":"en:Pets at Home",name:"Pets at Home",shop:"pet"},removeTags:{brand:"Pets at Home","brand:wikidata":"Q7179258","brand:wikipedia":"en:Pets at Home",name:"Pets at Home",shop:"pet"},matchScore:2,suggestion:true},"shop/photo/Kodak Express":{name:"Kodak Express",icon:"maki-attraction",geometry:["point","area"],tags:{shop:"photo","brand:wikidata":"Q6425126"},addTags:{brand:"Kodak Express","brand:wikidata":"Q6425126","brand:wikipedia":"en:Kodak Express",name:"Kodak Express",shop:"photo"},removeTags:{brand:"Kodak Express","brand:wikidata":"Q6425126","brand:wikipedia":"en:Kodak Express",name:"Kodak Express",shop:"photo"},matchScore:2,suggestion:true},"shop/second_hand/Value Village":{name:"Value Village",icon:"maki-shop",geometry:["point","area"],tags:{shop:"second_hand","brand:wikidata":"Q7428188"},addTags:{brand:"Value Village","brand:wikidata":"Q7428188","brand:wikipedia":"en:Savers",name:"Value Village",shop:"second_hand"},removeTags:{brand:"Value Village","brand:wikidata":"Q7428188","brand:wikipedia":"en:Savers",name:"Value Village",shop:"second_hand"},matchScore:2,suggestion:true},"shop/shoes/Aldo":{name:"Aldo",icon:"maki-shoe",geometry:["point","area"],tags:{shop:"shoes","brand:wikidata":"Q2832297"},addTags:{brand:"Aldo","brand:wikidata":"Q2832297","brand:wikipedia":"en:Aldo Group",name:"Aldo",shop:"shoes"},removeTags:{brand:"Aldo","brand:wikidata":"Q2832297","brand:wikipedia":"en:Aldo Group",name:"Aldo",shop:"shoes"},matchScore:2,suggestion:true},"shop/shoes/André":{name:"André",icon:"maki-shoe",geometry:["point","area"],tags:{shop:"shoes","brand:wikidata":"Q2847114"},addTags:{brand:"André","brand:wikidata":"Q2847114","brand:wikipedia":"fr:André (chaussure)",name:"André",shop:"shoes"},removeTags:{brand:"André","brand:wikidata":"Q2847114","brand:wikipedia":"fr:André (chaussure)",name:"André",shop:"shoes"},matchScore:2,suggestion:true},"shop/shoes/Bata":{name:"Bata",icon:"maki-shoe",geometry:["point","area"],tags:{shop:"shoes","brand:wikidata":"Q688082"},addTags:{brand:"Bata","brand:wikidata":"Q688082","brand:wikipedia":"en:Bata (company)",name:"Bata",shop:"shoes"},removeTags:{brand:"Bata","brand:wikidata":"Q688082","brand:wikipedia":"en:Bata (company)",name:"Bata",shop:"shoes"},matchScore:2,suggestion:true},"shop/shoes/Besson Chaussures":{name:"Besson Chaussures",icon:"maki-shoe",geometry:["point","area"],tags:{shop:"shoes","brand:wikidata":"Q2899930"},addTags:{brand:"Besson Chaussures","brand:wikidata":"Q2899930","brand:wikipedia":"fr:Besson Chaussures",name:"Besson Chaussures",shop:"shoes"},removeTags:{brand:"Besson Chaussures","brand:wikidata":"Q2899930","brand:wikipedia":"fr:Besson Chaussures",name:"Besson Chaussures",shop:"shoes"},matchScore:2,suggestion:true},"shop/shoes/Birkenstock":{name:"Birkenstock",icon:"maki-shoe",geometry:["point","area"],tags:{shop:"shoes","brand:wikidata":"Q648458"},addTags:{brand:"Birkenstock","brand:wikidata":"Q648458","brand:wikipedia":"en:Birkenstock",name:"Birkenstock",shop:"shoes"},removeTags:{brand:"Birkenstock","brand:wikidata":"Q648458","brand:wikipedia":"en:Birkenstock",name:"Birkenstock",shop:"shoes"},matchScore:2,suggestion:true},"shop/shoes/Brantano":{name:"Brantano",icon:"maki-shoe",geometry:["point","area"],tags:{shop:"shoes","brand:wikidata":"Q4957616"},addTags:{brand:"Brantano","brand:wikidata":"Q4957616","brand:wikipedia":"en:Brantano Footwear",name:"Brantano",shop:"shoes"},removeTags:{brand:"Brantano","brand:wikidata":"Q4957616","brand:wikipedia":"en:Brantano Footwear",name:"Brantano",shop:"shoes"},matchScore:2,suggestion:true},"shop/shoes/CCC":{name:"CCC",icon:"maki-shoe",geometry:["point","area"],tags:{shop:"shoes","brand:wikidata":"Q11788344"},addTags:{brand:"CCC","brand:wikidata":"Q11788344","brand:wikipedia":"de:CCC (Unternehmen)",name:"CCC",shop:"shoes"},removeTags:{brand:"CCC","brand:wikidata":"Q11788344","brand:wikipedia":"de:CCC (Unternehmen)",name:"CCC",shop:"shoes"},matchScore:2,suggestion:true},"shop/shoes/Camper":{name:"Camper",icon:"maki-shoe",geometry:["point","area"],tags:{shop:"shoes","brand:wikidata":"Q1030922"},addTags:{brand:"Camper","brand:wikidata":"Q1030922","brand:wikipedia":"en:Camper (company)",name:"Camper",shop:"shoes"},removeTags:{brand:"Camper","brand:wikidata":"Q1030922","brand:wikipedia":"en:Camper (company)",name:"Camper",shop:"shoes"},matchScore:2,suggestion:true},"shop/shoes/Clarks":{name:"Clarks",icon:"maki-shoe",geometry:["point","area"],tags:{shop:"shoes","brand:wikidata":"Q1095857"},addTags:{brand:"Clarks","brand:wikidata":"Q1095857","brand:wikipedia":"en:C. & J. Clark",name:"Clarks",shop:"shoes"},removeTags:{brand:"Clarks","brand:wikidata":"Q1095857","brand:wikipedia":"en:C. & J. Clark",name:"Clarks",shop:"shoes"},matchScore:2,suggestion:true},"shop/shoes/Converse":{name:"Converse",icon:"maki-shoe",geometry:["point","area"],tags:{shop:"shoes","brand:wikidata":"Q319515"},addTags:{brand:"Converse","brand:wikidata":"Q319515","brand:wikipedia":"en:Converse (shoe company)",name:"Converse",shop:"shoes"},removeTags:{brand:"Converse","brand:wikidata":"Q319515","brand:wikipedia":"en:Converse (shoe company)",name:"Converse",shop:"shoes"},matchScore:2,suggestion:true},"shop/shoes/Crocs":{name:"Crocs",icon:"maki-shoe",geometry:["point","area"],tags:{shop:"shoes","brand:wikidata":"Q926699"},addTags:{brand:"Crocs","brand:wikidata":"Q926699","brand:wikipedia":"en:Crocs",name:"Crocs",shop:"shoes"},removeTags:{brand:"Crocs","brand:wikidata":"Q926699","brand:wikipedia":"en:Crocs",name:"Crocs",shop:"shoes"},matchScore:2,suggestion:true},"shop/shoes/DSW":{name:"DSW",icon:"maki-shoe",geometry:["point","area"],tags:{shop:"shoes","brand:wikidata":"Q5206207"},addTags:{brand:"DSW","brand:wikidata":"Q5206207","brand:wikipedia":"en:DSW, Inc.",name:"DSW",shop:"shoes"},removeTags:{brand:"DSW","brand:wikidata":"Q5206207","brand:wikipedia":"en:DSW, Inc.",name:"DSW",shop:"shoes"},matchScore:2,suggestion:true},"shop/shoes/Deichmann":{name:"Deichmann",icon:"maki-shoe",geometry:["point","area"],tags:{shop:"shoes","brand:wikidata":"Q664543"},addTags:{brand:"Deichmann","brand:wikidata":"Q664543","brand:wikipedia":"en:Deichmann SE",name:"Deichmann",shop:"shoes"},removeTags:{brand:"Deichmann","brand:wikidata":"Q664543","brand:wikipedia":"en:Deichmann SE",name:"Deichmann",shop:"shoes"},matchScore:2,suggestion:true},"shop/shoes/Din sko":{name:"Din sko",icon:"maki-shoe",geometry:["point","area"],tags:{shop:"shoes","brand:wikidata":"Q10472869"},addTags:{brand:"Din sko","brand:wikidata":"Q10472869","brand:wikipedia":"sv:Din sko",name:"Din sko",shop:"shoes"},removeTags:{brand:"Din sko","brand:wikidata":"Q10472869","brand:wikipedia":"sv:Din sko",name:"Din sko",shop:"shoes"},matchScore:2,suggestion:true},"shop/shoes/Dosenbach":{name:"Dosenbach",icon:"maki-shoe",geometry:["point","area"],tags:{shop:"shoes","brand:wikidata":"Q2677329"},addTags:{brand:"Dosenbach","brand:wikidata":"Q2677329","brand:wikipedia":"de:Dosenbach-Ochsner",name:"Dosenbach",shop:"shoes"},removeTags:{brand:"Dosenbach","brand:wikidata":"Q2677329","brand:wikipedia":"de:Dosenbach-Ochsner",name:"Dosenbach",shop:"shoes"},matchScore:2,suggestion:true},"shop/shoes/Ecco":{name:"Ecco",icon:"maki-shoe",geometry:["point","area"],tags:{shop:"shoes","brand:wikidata":"Q1280255"},addTags:{brand:"Ecco","brand:wikidata":"Q1280255","brand:wikipedia":"en:ECCO",name:"Ecco",shop:"shoes"},removeTags:{brand:"Ecco","brand:wikidata":"Q1280255","brand:wikipedia":"en:ECCO",name:"Ecco",shop:"shoes"},matchScore:2,suggestion:true},"shop/shoes/Famous Footwear":{name:"Famous Footwear",icon:"maki-shoe",geometry:["point","area"],tags:{shop:"shoes","brand:wikidata":"Q5433457"},addTags:{brand:"Famous Footwear","brand:wikidata":"Q5433457","brand:wikipedia":"en:Famous Footwear",name:"Famous Footwear",shop:"shoes"},removeTags:{brand:"Famous Footwear","brand:wikidata":"Q5433457","brand:wikipedia":"en:Famous Footwear",name:"Famous Footwear",shop:"shoes"},matchScore:2,suggestion:true},"shop/shoes/Foot Locker":{name:"Foot Locker",icon:"maki-shoe",geometry:["point","area"],tags:{shop:"shoes","brand:wikidata":"Q63335"},addTags:{brand:"Foot Locker","brand:wikidata":"Q63335","brand:wikipedia":"en:Foot Locker",name:"Foot Locker",shop:"shoes"},removeTags:{brand:"Foot Locker","brand:wikidata":"Q63335","brand:wikipedia":"en:Foot Locker",name:"Foot Locker",shop:"shoes"},matchScore:2,suggestion:true},"shop/shoes/Geox":{name:"Geox",icon:"maki-shoe",geometry:["point","area"],tags:{shop:"shoes","brand:wikidata":"Q588001"},addTags:{brand:"Geox","brand:wikidata":"Q588001","brand:wikipedia":"en:Geox",name:"Geox",shop:"shoes"},removeTags:{brand:"Geox","brand:wikidata":"Q588001","brand:wikipedia":"en:Geox",name:"Geox",shop:"shoes"},matchScore:2,suggestion:true},"shop/shoes/Humanic":{name:"Humanic",icon:"maki-shoe",geometry:["point","area"],tags:{shop:"shoes","brand:wikidata":"Q1636668"},addTags:{brand:"Humanic","brand:wikidata":"Q1636668","brand:wikipedia":"en:Humanic",name:"Humanic",shop:"shoes"},removeTags:{brand:"Humanic","brand:wikidata":"Q1636668","brand:wikipedia":"en:Humanic",name:"Humanic",shop:"shoes"},matchScore:2,suggestion:true},"shop/shoes/Journeys":{name:"Journeys",icon:"maki-shoe",geometry:["point","area"],tags:{shop:"shoes","brand:wikidata":"Q5532704"},addTags:{brand:"Journeys","brand:wikidata":"Q5532704","brand:wikipedia":"en:Genesco",name:"Journeys",shop:"shoes"},removeTags:{brand:"Journeys","brand:wikidata":"Q5532704","brand:wikipedia":"en:Genesco",name:"Journeys",shop:"shoes"},matchScore:2,suggestion:true},"shop/shoes/Mephisto":{name:"Mephisto",icon:"maki-shoe",geometry:["point","area"],tags:{shop:"shoes","brand:wikidata":"Q822975"},addTags:{brand:"Mephisto","brand:wikidata":"Q822975","brand:wikipedia":"fr:Mephisto (chaussure)",name:"Mephisto",shop:"shoes"},removeTags:{brand:"Mephisto","brand:wikidata":"Q822975","brand:wikipedia":"fr:Mephisto (chaussure)",name:"Mephisto",shop:"shoes"},matchScore:2,suggestion:true},"shop/shoes/New Balance":{name:"New Balance",icon:"maki-shoe",geometry:["point","area"],tags:{shop:"shoes","brand:wikidata":"Q742988"},addTags:{brand:"New Balance","brand:wikidata":"Q742988","brand:wikipedia":"en:New Balance",name:"New Balance",shop:"shoes"},removeTags:{brand:"New Balance","brand:wikidata":"Q742988","brand:wikipedia":"en:New Balance",name:"New Balance",shop:"shoes"},matchScore:2,suggestion:true},"shop/shoes/Payless ShoeSource":{name:"Payless ShoeSource",icon:"maki-shoe",geometry:["point","area"],tags:{shop:"shoes","brand:wikidata":"Q7156755"},addTags:{brand:"Payless ShoeSource","brand:wikidata":"Q7156755","brand:wikipedia":"en:Payless ShoeSource",name:"Payless ShoeSource",shop:"shoes"},removeTags:{brand:"Payless ShoeSource","brand:wikidata":"Q7156755","brand:wikipedia":"en:Payless ShoeSource",name:"Payless ShoeSource",shop:"shoes"},matchScore:2,suggestion:true},"shop/shoes/Quick Schuh":{name:"Quick Schuh",icon:"maki-shoe",geometry:["point","area"],tags:{shop:"shoes","brand:wikidata":"Q2123069"},addTags:{brand:"Quick Schuh","brand:wikidata":"Q2123069","brand:wikipedia":"de:Quick Schuh",name:"Quick Schuh",shop:"shoes"},removeTags:{brand:"Quick Schuh","brand:wikidata":"Q2123069","brand:wikipedia":"de:Quick Schuh",name:"Quick Schuh",shop:"shoes"},matchScore:2,suggestion:true},"shop/shoes/Rack Room Shoes":{name:"Rack Room Shoes",icon:"maki-shoe",geometry:["point","area"],tags:{shop:"shoes","brand:wikidata":"Q17109937"},addTags:{brand:"Rack Room Shoes","brand:wikidata":"Q17109937","brand:wikipedia":"en:Rack Room Shoes",name:"Rack Room Shoes",shop:"shoes"},removeTags:{brand:"Rack Room Shoes","brand:wikidata":"Q17109937","brand:wikipedia":"en:Rack Room Shoes",name:"Rack Room Shoes",shop:"shoes"},matchScore:2,suggestion:true},"shop/shoes/Reno":{name:"Reno",icon:"maki-shoe",geometry:["point","area"],tags:{shop:"shoes","brand:wikidata":"Q2144204"},addTags:{brand:"Reno","brand:wikidata":"Q2144204","brand:wikipedia":"de:Reno (Schuhhandel)",name:"Reno",shop:"shoes"},removeTags:{brand:"Reno","brand:wikidata":"Q2144204","brand:wikipedia":"de:Reno (Schuhhandel)",name:"Reno",shop:"shoes"},matchScore:2,suggestion:true},"shop/shoes/Rieker":{name:"Rieker",icon:"maki-shoe",geometry:["point","area"],tags:{shop:"shoes","brand:wikidata":"Q2152193"},addTags:{brand:"Rieker","brand:wikidata":"Q2152193","brand:wikipedia":"en:Rieker Shoes",name:"Rieker",shop:"shoes"},removeTags:{brand:"Rieker","brand:wikidata":"Q2152193","brand:wikipedia":"en:Rieker Shoes",name:"Rieker",shop:"shoes"},matchScore:2,suggestion:true},"shop/shoes/Salamander":{name:"Salamander",icon:"maki-shoe",geometry:["point","area"],tags:{shop:"shoes","brand:wikidata":"Q878354"},addTags:{brand:"Salamander","brand:wikidata":"Q878354","brand:wikipedia":"de:Salamander (Schuhe)",name:"Salamander",shop:"shoes"},removeTags:{brand:"Salamander","brand:wikidata":"Q878354","brand:wikipedia":"de:Salamander (Schuhe)",name:"Salamander",shop:"shoes"},matchScore:2,suggestion:true},"shop/shoes/San Marina":{name:"San Marina",icon:"maki-shoe",geometry:["point","area"],tags:{shop:"shoes","brand:wikidata":"Q3471558"},addTags:{brand:"San Marina","brand:wikidata":"Q3471558","brand:wikipedia":"fr:San Marina",name:"San Marina",shop:"shoes"},removeTags:{brand:"San Marina","brand:wikidata":"Q3471558","brand:wikipedia":"fr:San Marina",name:"San Marina",shop:"shoes"},matchScore:2,suggestion:true},"shop/shoes/Scapino":{name:"Scapino",icon:"maki-shoe",geometry:["point","area"],tags:{shop:"shoes","brand:wikidata":"Q2298792"},addTags:{brand:"Scapino","brand:wikidata":"Q2298792","brand:wikipedia":"nl:Scapino (winkelketen)",name:"Scapino",shop:"shoes"},removeTags:{brand:"Scapino","brand:wikidata":"Q2298792","brand:wikipedia":"nl:Scapino (winkelketen)",name:"Scapino",shop:"shoes"},matchScore:2,suggestion:true},"shop/shoes/Schuh":{name:"Schuh",icon:"maki-shoe",geometry:["point","area"],tags:{shop:"shoes","brand:wikidata":"Q7432952"},addTags:{brand:"Schuh","brand:wikidata":"Q7432952","brand:wikipedia":"en:Schuh",name:"Schuh",shop:"shoes"},removeTags:{brand:"Schuh","brand:wikidata":"Q7432952","brand:wikipedia":"en:Schuh",name:"Schuh",shop:"shoes"},matchScore:2,suggestion:true},"shop/shoes/Shoe Carnival":{name:"Shoe Carnival",icon:"maki-shoe",geometry:["point","area"],tags:{shop:"shoes","brand:wikidata":"Q7500007"},addTags:{brand:"Shoe Carnival","brand:wikidata":"Q7500007","brand:wikipedia":"en:Shoe Carnival",name:"Shoe Carnival",shop:"shoes"},removeTags:{brand:"Shoe Carnival","brand:wikidata":"Q7500007","brand:wikipedia":"en:Shoe Carnival",name:"Shoe Carnival",shop:"shoes"},matchScore:2,suggestion:true},"shop/shoes/Shoe Zone":{name:"Shoe Zone",icon:"maki-shoe",geometry:["point","area"],tags:{shop:"shoes","brand:wikidata":"Q7500016"},addTags:{brand:"Shoe Zone","brand:wikidata":"Q7500016","brand:wikipedia":"en:Shoe Zone",name:"Shoe Zone",shop:"shoes"},removeTags:{brand:"Shoe Zone","brand:wikidata":"Q7500016","brand:wikipedia":"en:Shoe Zone",name:"Shoe Zone",shop:"shoes"},matchScore:2,suggestion:true},"shop/shoes/Siemes Schuhcenter":{name:"Siemes Schuhcenter",icon:"maki-shoe",geometry:["point","area"],tags:{shop:"shoes","brand:wikidata":"Q2800720"},addTags:{brand:"Siemes Schuhcenter","brand:wikidata":"Q2800720","brand:wikipedia":"de:Siemes (Unternehmen)",name:"Siemes Schuhcenter",shop:"shoes"},removeTags:{brand:"Siemes Schuhcenter","brand:wikidata":"Q2800720","brand:wikipedia":"de:Siemes (Unternehmen)",name:"Siemes Schuhcenter",shop:"shoes"},matchScore:2,suggestion:true},"shop/shoes/Skechers":{name:"Skechers",icon:"maki-shoe",geometry:["point","area"],tags:{shop:"shoes","brand:wikidata":"Q2945643"},addTags:{brand:"Skechers","brand:wikidata":"Q2945643","brand:wikipedia":"en:Skechers",name:"Skechers",shop:"shoes"},removeTags:{brand:"Skechers","brand:wikidata":"Q2945643","brand:wikipedia":"en:Skechers",name:"Skechers",shop:"shoes"},matchScore:2,suggestion:true},"shop/shoes/Vans":{name:"Vans",icon:"maki-shoe",geometry:["point","area"],tags:{shop:"shoes","brand:wikidata":"Q1135366"},addTags:{brand:"Vans","brand:wikidata":"Q1135366","brand:wikipedia":"en:Vans",name:"Vans",shop:"shoes"},removeTags:{brand:"Vans","brand:wikidata":"Q1135366","brand:wikipedia":"en:Vans",name:"Vans",shop:"shoes"},matchScore:2,suggestion:true},"shop/shoes/Éram":{name:"Éram",icon:"maki-shoe",geometry:["point","area"],tags:{shop:"shoes","brand:wikidata":"Q16684192"},addTags:{brand:"Éram","brand:wikidata":"Q16684192","brand:wikipedia":"fr:Éram",name:"Éram",shop:"shoes"},removeTags:{brand:"Éram","brand:wikidata":"Q16684192","brand:wikipedia":"fr:Éram",name:"Éram",shop:"shoes"},matchScore:2,suggestion:true},"shop/shoes/ЦентрОбувь":{name:"ЦентрОбувь",icon:"maki-shoe",geometry:["point","area"],tags:{shop:"shoes","brand:wikidata":"Q4504072"},addTags:{brand:"ЦентрОбувь","brand:wikidata":"Q4504072","brand:wikipedia":"ru:ЦентрОбувь",name:"ЦентрОбувь",shop:"shoes"},removeTags:{brand:"ЦентрОбувь","brand:wikidata":"Q4504072","brand:wikipedia":"ru:ЦентрОбувь",name:"ЦентрОбувь",shop:"shoes"},matchScore:2,suggestion:true},"shop/shoes/東京靴流通センター":{name:"東京靴流通センター",icon:"maki-shoe",geometry:["point","area"],tags:{shop:"shoes","brand:wikidata":"Q11318515"},addTags:{brand:"東京靴流通センター","brand:en":"Tokyo Shoes Retailing Center","brand:wikidata":"Q11318515","brand:wikipedia":"ja:チヨダ",name:"東京靴流通センター","name:en":"Tokyo Shoes Retailing Center",shop:"shoes"},removeTags:{brand:"東京靴流通センター","brand:en":"Tokyo Shoes Retailing Center","brand:wikidata":"Q11318515","brand:wikipedia":"ja:チヨダ",name:"東京靴流通センター","name:en":"Tokyo Shoes Retailing Center",shop:"shoes"},matchScore:2,suggestion:true},"shop/sports/Adidas":{name:"Adidas",icon:"maki-shop",geometry:["point","area"],tags:{shop:"sports","brand:wikidata":"Q3895"},addTags:{brand:"Adidas","brand:wikidata":"Q3895","brand:wikipedia":"en:Adidas",name:"Adidas",shop:"sports"},removeTags:{brand:"Adidas","brand:wikidata":"Q3895","brand:wikipedia":"en:Adidas",name:"Adidas",shop:"sports"},matchScore:2,suggestion:true},"shop/sports/Aktiesport":{name:"Aktiesport",icon:"maki-shop",geometry:["point","area"],tags:{shop:"sports","brand:wikidata":"Q57546889"},addTags:{brand:"Aktiesport","brand:wikidata":"Q57546889",name:"Aktiesport",shop:"sports"},removeTags:{brand:"Aktiesport","brand:wikidata":"Q57546889",name:"Aktiesport",shop:"sports"},matchScore:2,suggestion:true},"shop/sports/Big 5 Sporting Goods":{name:"Big 5 Sporting Goods",icon:"maki-shop",geometry:["point","area"],tags:{shop:"sports","brand:wikidata":"Q4904902"},addTags:{brand:"Big 5 Sporting Goods","brand:wikidata":"Q4904902","brand:wikipedia":"en:Big 5 Sporting Goods",name:"Big 5 Sporting Goods",shop:"sports"},removeTags:{brand:"Big 5 Sporting Goods","brand:wikidata":"Q4904902","brand:wikipedia":"en:Big 5 Sporting Goods",name:"Big 5 Sporting Goods",shop:"sports"},matchScore:2,suggestion:true},"shop/sports/Decathlon":{name:"Decathlon",icon:"maki-shop",geometry:["point","area"],tags:{shop:"sports","brand:wikidata":"Q509349"},addTags:{brand:"Decathlon","brand:wikidata":"Q509349","brand:wikipedia":"en:Decathlon Group",name:"Decathlon",shop:"sports"},removeTags:{brand:"Decathlon","brand:wikidata":"Q509349","brand:wikipedia":"en:Decathlon Group",name:"Decathlon",shop:"sports"},matchScore:2,suggestion:true},"shop/sports/Dick's Sporting Goods":{name:"Dick's Sporting Goods",icon:"maki-shop",geometry:["point","area"],tags:{shop:"sports","brand:wikidata":"Q5272601"},addTags:{brand:"Dick's Sporting Goods","brand:wikidata":"Q5272601","brand:wikipedia":"en:Dick's Sporting Goods",name:"Dick's Sporting Goods",shop:"sports"},removeTags:{brand:"Dick's Sporting Goods","brand:wikidata":"Q5272601","brand:wikipedia":"en:Dick's Sporting Goods",name:"Dick's Sporting Goods",shop:"sports"},matchScore:2,suggestion:true},"shop/sports/Hervis":{name:"Hervis",icon:"maki-shop",geometry:["point","area"],tags:{shop:"sports","brand:wikidata":"Q1614816"},addTags:{brand:"Hervis","brand:wikidata":"Q1614816","brand:wikipedia":"de:Hervis",name:"Hervis",shop:"sports"},removeTags:{brand:"Hervis","brand:wikidata":"Q1614816","brand:wikipedia":"de:Hervis",name:"Hervis",shop:"sports"},matchScore:2,suggestion:true},"shop/sports/Hibbett Sports":{name:"Hibbett Sports",icon:"maki-shop",geometry:["point","area"],tags:{shop:"sports","brand:wikidata":"Q5750671"},addTags:{brand:"Hibbett Sports","brand:wikidata":"Q5750671","brand:wikipedia":"en:Hibbett Sports",name:"Hibbett Sports",shop:"sports"},removeTags:{brand:"Hibbett Sports","brand:wikidata":"Q5750671","brand:wikipedia":"en:Hibbett Sports",name:"Hibbett Sports",shop:"sports"},matchScore:2,suggestion:true},"shop/sports/Intersport":{name:"Intersport",icon:"maki-shop",geometry:["point","area"],tags:{shop:"sports","brand:wikidata":"Q666888"},addTags:{brand:"Intersport","brand:wikidata":"Q666888","brand:wikipedia":"en:Intersport",name:"Intersport",shop:"sports"},removeTags:{brand:"Intersport","brand:wikidata":"Q666888","brand:wikipedia":"en:Intersport",name:"Intersport",shop:"sports"},matchScore:2,suggestion:true},"shop/sports/JD Sports":{name:"JD Sports",icon:"maki-shop",geometry:["point","area"],tags:{shop:"sports","brand:wikidata":"Q6108019"},addTags:{brand:"JD Sports","brand:wikidata":"Q6108019","brand:wikipedia":"en:JD Sports",name:"JD Sports",shop:"sports"},removeTags:{brand:"JD Sports","brand:wikidata":"Q6108019","brand:wikipedia":"en:JD Sports",name:"JD Sports",shop:"sports"},matchScore:2,suggestion:true},"shop/sports/Play It Again Sports":{name:"Play It Again Sports",icon:"maki-shop",geometry:["point","area"],tags:{shop:"sports","brand:wikidata":"Q7203029"},addTags:{brand:"Play It Again Sports","brand:wikidata":"Q7203029","brand:wikipedia":"en:Play It Again Sports",name:"Play It Again Sports",shop:"sports"},removeTags:{brand:"Play It Again Sports","brand:wikidata":"Q7203029","brand:wikipedia":"en:Play It Again Sports",name:"Play It Again Sports",shop:"sports"},matchScore:2,suggestion:true},"shop/sports/Sport 2000":{name:"Sport 2000",icon:"maki-shop",geometry:["point","area"],tags:{shop:"sports","brand:wikidata":"Q262394"},addTags:{brand:"Sport 2000","brand:wikidata":"Q262394","brand:wikipedia":"de:Sport 2000",name:"Sport 2000",shop:"sports"},removeTags:{brand:"Sport 2000","brand:wikidata":"Q262394","brand:wikipedia":"de:Sport 2000",name:"Sport 2000",shop:"sports"},matchScore:2,suggestion:true},"shop/sports/Sportisimo":{name:"Sportisimo",icon:"maki-shop",geometry:["point","area"],tags:{shop:"sports","brand:wikidata":"Q54974273"},addTags:{brand:"Sportisimo","brand:wikidata":"Q54974273",name:"Sportisimo",shop:"sports"},removeTags:{brand:"Sportisimo","brand:wikidata":"Q54974273",name:"Sportisimo",shop:"sports"},matchScore:2,suggestion:true},"shop/sports/Sports Authority":{name:"Sports Authority",icon:"maki-shop",geometry:["point","area"],tags:{shop:"sports","brand:wikidata":"Q7579688"},addTags:{brand:"Sports Authority","brand:wikidata":"Q7579688","brand:wikipedia":"en:Sports Authority",name:"Sports Authority",shop:"sports"},removeTags:{brand:"Sports Authority","brand:wikidata":"Q7579688","brand:wikipedia":"en:Sports Authority",name:"Sports Authority",shop:"sports"},matchScore:2,suggestion:true},"shop/sports/Sports Direct":{name:"Sports Direct",icon:"maki-shop",geometry:["point","area"],tags:{shop:"sports","brand:wikidata":"Q2913554"},addTags:{brand:"Sports Direct","brand:wikidata":"Q2913554","brand:wikipedia":"en:Sports Direct",name:"Sports Direct",shop:"sports"},removeTags:{brand:"Sports Direct","brand:wikidata":"Q2913554","brand:wikipedia":"en:Sports Direct",name:"Sports Direct",shop:"sports"},matchScore:2,suggestion:true},"shop/sports/Спортмастер":{name:"Спортмастер",icon:"maki-shop",geometry:["point","area"],tags:{shop:"sports","brand:wikidata":"Q4438176"},addTags:{brand:"Спортмастер","brand:wikidata":"Q4438176","brand:wikipedia":"ru:Спортмастер",name:"Спортмастер",shop:"sports"},removeTags:{brand:"Спортмастер","brand:wikidata":"Q4438176","brand:wikipedia":"ru:Спортмастер",name:"Спортмастер",shop:"sports"},matchScore:2,suggestion:true},"shop/stationery/Bureau Vallée":{name:"Bureau Vallée",icon:"maki-shop",geometry:["point","area"],tags:{shop:"stationery","brand:wikidata":"Q18385014"},addTags:{brand:"Bureau Vallée","brand:wikidata":"Q18385014","brand:wikipedia":"fr:Bureau Vallée",name:"Bureau Vallée",shop:"stationery"},removeTags:{brand:"Bureau Vallée","brand:wikidata":"Q18385014","brand:wikipedia":"fr:Bureau Vallée",name:"Bureau Vallée",shop:"stationery"},matchScore:2,suggestion:true},"shop/stationery/McPaper":{name:"McPaper",icon:"maki-shop",geometry:["point","area"],tags:{shop:"stationery","brand:wikidata":"Q1915329"},addTags:{brand:"McPaper","brand:wikidata":"Q1915329","brand:wikipedia":"de:McPaper",name:"McPaper",shop:"stationery"},removeTags:{brand:"McPaper","brand:wikidata":"Q1915329","brand:wikipedia":"de:McPaper",name:"McPaper",shop:"stationery"},matchScore:2,suggestion:true},"shop/stationery/Office Depot":{name:"Office Depot",icon:"maki-shop",geometry:["point","area"],tags:{shop:"stationery","brand:wikidata":"Q1337797"},addTags:{brand:"Office Depot","brand:wikidata":"Q1337797","brand:wikipedia":"en:Office Depot",name:"Office Depot",shop:"stationery"},removeTags:{brand:"Office Depot","brand:wikidata":"Q1337797","brand:wikipedia":"en:Office Depot",name:"Office Depot",shop:"stationery"},matchScore:2,suggestion:true},"shop/stationery/OfficeMax":{name:"OfficeMax",icon:"maki-shop",geometry:["point","area"],tags:{shop:"stationery","brand:wikidata":"Q7079111"},addTags:{brand:"OfficeMax","brand:wikidata":"Q7079111","brand:wikipedia":"en:OfficeMax",name:"OfficeMax",shop:"stationery"},removeTags:{brand:"OfficeMax","brand:wikidata":"Q7079111","brand:wikipedia":"en:OfficeMax",name:"OfficeMax",shop:"stationery"},matchScore:2,suggestion:true},"shop/stationery/Officeworks":{name:"Officeworks",icon:"maki-shop",geometry:["point","area"],tags:{shop:"stationery","brand:wikidata":"Q7079486"},addTags:{brand:"Officeworks","brand:wikidata":"Q7079486","brand:wikipedia":"en:Officeworks",name:"Officeworks",shop:"stationery"},removeTags:{brand:"Officeworks","brand:wikidata":"Q7079486","brand:wikipedia":"en:Officeworks",name:"Officeworks",shop:"stationery"},matchScore:2,suggestion:true},"shop/stationery/Pagro":{name:"Pagro",icon:"maki-shop",geometry:["point","area"],tags:{shop:"stationery","brand:wikidata":"Q57550022"},addTags:{brand:"Pagro","brand:wikidata":"Q57550022",name:"Pagro",shop:"stationery"},removeTags:{brand:"Pagro","brand:wikidata":"Q57550022",name:"Pagro",shop:"stationery"},matchScore:2,suggestion:true},"shop/stationery/Paperchase":{name:"Paperchase",icon:"maki-shop",geometry:["point","area"],tags:{shop:"stationery","brand:wikidata":"Q7132739"},addTags:{brand:"Paperchase","brand:wikidata":"Q7132739","brand:wikipedia":"en:Paperchase",name:"Paperchase",shop:"stationery"},removeTags:{brand:"Paperchase","brand:wikidata":"Q7132739","brand:wikipedia":"en:Paperchase",name:"Paperchase",shop:"stationery"},matchScore:2,suggestion:true},"shop/stationery/Ryman":{name:"Ryman",icon:"maki-shop",geometry:["point","area"],tags:{shop:"stationery","brand:wikidata":"Q7385188"},addTags:{brand:"Ryman","brand:wikidata":"Q7385188","brand:wikipedia":"en:Ryman",name:"Ryman",shop:"stationery"},removeTags:{brand:"Ryman","brand:wikidata":"Q7385188","brand:wikipedia":"en:Ryman",name:"Ryman",shop:"stationery"},matchScore:2,suggestion:true},"shop/stationery/Staples":{name:"Staples",icon:"maki-shop",geometry:["point","area"],tags:{shop:"stationery","brand:wikidata":"Q785943"},addTags:{brand:"Staples","brand:wikidata":"Q785943","brand:wikipedia":"en:Staples Inc.",name:"Staples",shop:"stationery"},removeTags:{brand:"Staples","brand:wikidata":"Q785943","brand:wikipedia":"en:Staples Inc.",name:"Staples",shop:"stationery"},matchScore:2,suggestion:true},"shop/stationery/Комус":{name:"Комус",icon:"maki-shop",geometry:["point","area"],tags:{shop:"stationery","brand:wikidata":"Q4230314"},addTags:{brand:"Комус","brand:en":"Komus","brand:wikidata":"Q4230314","brand:wikipedia":"en:Komus (company)",name:"Комус","name:en":"Komus",shop:"stationery"},removeTags:{brand:"Комус","brand:en":"Komus","brand:wikidata":"Q4230314","brand:wikipedia":"en:Komus (company)",name:"Комус","name:en":"Komus",shop:"stationery"},matchScore:2,suggestion:true},"shop/storage_rental/Extra Space Storage":{name:"Extra Space Storage",icon:"fas-warehouse",geometry:["point","area"],tags:{shop:"storage_rental","brand:wikidata":"Q5422162"},addTags:{brand:"Extra Space Storage","brand:wikidata":"Q5422162","brand:wikipedia":"en:Extra Space Storage",name:"Extra Space Storage",shop:"storage_rental"},removeTags:{brand:"Extra Space Storage","brand:wikidata":"Q5422162","brand:wikipedia":"en:Extra Space Storage",name:"Extra Space Storage",shop:"storage_rental"},matchScore:2,suggestion:true},"shop/storage_rental/Public Storage":{name:"Public Storage",icon:"fas-warehouse",geometry:["point","area"],tags:{shop:"storage_rental","brand:wikidata":"Q1156045"},addTags:{brand:"Public Storage","brand:wikidata":"Q1156045","brand:wikipedia":"en:Public Storage",name:"Public Storage",shop:"storage_rental"},removeTags:{brand:"Public Storage","brand:wikidata":"Q1156045","brand:wikipedia":"en:Public Storage",name:"Public Storage",shop:"storage_rental"},matchScore:2,suggestion:true},"shop/supermarket/A&O":{name:"A&O",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q3600279"},addTags:{brand:"A&O","brand:wikidata":"Q3600279","brand:wikipedia":"it:A&O",name:"A&O",shop:"supermarket"},removeTags:{brand:"A&O","brand:wikidata":"Q3600279","brand:wikipedia":"it:A&O",name:"A&O",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/A101":{name:"A101",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q6034496"},addTags:{brand:"A101","brand:wikidata":"Q6034496","brand:wikipedia":"tr:A101",name:"A101",shop:"supermarket"},removeTags:{brand:"A101","brand:wikidata":"Q6034496","brand:wikipedia":"tr:A101",name:"A101",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/ADEG":{name:"ADEG",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q290211"},addTags:{brand:"ADEG","brand:wikidata":"Q290211","brand:wikipedia":"de:ADEG Österreich",name:"ADEG",shop:"supermarket"},removeTags:{brand:"ADEG","brand:wikidata":"Q290211","brand:wikipedia":"de:ADEG Österreich",name:"ADEG",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Ahorramás":{name:"Ahorramás",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q58221883"},addTags:{brand:"Ahorramás","brand:wikidata":"Q58221883",name:"Ahorramás",shop:"supermarket"},removeTags:{brand:"Ahorramás","brand:wikidata":"Q58221883",name:"Ahorramás",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Albert":{name:"Albert",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q9144241"},addTags:{brand:"Albert","brand:wikidata":"Q9144241","brand:wikipedia":"cs:Albert (obchodní řetězec)",name:"Albert",shop:"supermarket"},removeTags:{brand:"Albert","brand:wikidata":"Q9144241","brand:wikipedia":"cs:Albert (obchodní řetězec)",name:"Albert",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Albert Heijn":{name:"Albert Heijn",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q1653985"},addTags:{brand:"Albert Heijn","brand:wikidata":"Q1653985","brand:wikipedia":"nl:Albert Heijn (supermarkt)",name:"Albert Heijn",shop:"supermarket"},removeTags:{brand:"Albert Heijn","brand:wikidata":"Q1653985","brand:wikipedia":"nl:Albert Heijn (supermarkt)",name:"Albert Heijn",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Albertsons":{name:"Albertsons",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q4712282"},addTags:{brand:"Albertsons","brand:wikidata":"Q4712282","brand:wikipedia":"en:Albertsons",name:"Albertsons",shop:"supermarket"},removeTags:{brand:"Albertsons","brand:wikidata":"Q4712282","brand:wikipedia":"en:Albertsons",name:"Albertsons",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Aldi":{name:"Aldi",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q125054"},addTags:{brand:"Aldi","brand:wikidata":"Q125054","brand:wikipedia":"en:Aldi",name:"Aldi",shop:"supermarket"},removeTags:{brand:"Aldi","brand:wikidata":"Q125054","brand:wikipedia":"en:Aldi",name:"Aldi",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Aldi Nord":{name:"Aldi Nord",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q41171373"},addTags:{brand:"Aldi Nord","brand:wikidata":"Q41171373","brand:wikipedia":"en:Aldi",name:"Aldi Nord",shop:"supermarket"},removeTags:{brand:"Aldi Nord","brand:wikidata":"Q41171373","brand:wikipedia":"en:Aldi",name:"Aldi Nord",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Aldi Süd":{name:"Aldi Süd",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q41171672"},addTags:{brand:"Aldi Süd","brand:wikidata":"Q41171672","brand:wikipedia":"en:Aldi",name:"Aldi Süd",shop:"supermarket"},removeTags:{brand:"Aldi Süd","brand:wikidata":"Q41171672","brand:wikipedia":"en:Aldi",name:"Aldi Süd",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Alimerka":{name:"Alimerka",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q16482738"},addTags:{brand:"Alimerka","brand:wikidata":"Q16482738","brand:wikipedia":"es:Alimerka",name:"Alimerka",shop:"supermarket"},removeTags:{brand:"Alimerka","brand:wikidata":"Q16482738","brand:wikipedia":"es:Alimerka",name:"Alimerka",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Alnatura":{name:"Alnatura",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q876811"},addTags:{brand:"Alnatura","brand:wikidata":"Q876811","brand:wikipedia":"en:Alnatura",name:"Alnatura",shop:"supermarket"},removeTags:{brand:"Alnatura","brand:wikidata":"Q876811","brand:wikipedia":"en:Alnatura",name:"Alnatura",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Atacadão":{name:"Atacadão",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q2868739"},addTags:{brand:"Atacadão","brand:wikidata":"Q2868739","brand:wikipedia":"en:Atacadão",name:"Atacadão",shop:"supermarket"},removeTags:{brand:"Atacadão","brand:wikidata":"Q2868739","brand:wikipedia":"en:Atacadão",name:"Atacadão",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Auchan":{name:"Auchan",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q758603"},addTags:{brand:"Auchan","brand:wikidata":"Q758603","brand:wikipedia":"en:Auchan",name:"Auchan",shop:"supermarket"},removeTags:{brand:"Auchan","brand:wikidata":"Q758603","brand:wikipedia":"en:Auchan",name:"Auchan",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Bi-Lo":{name:"Bi-Lo",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q4835622"},addTags:{brand:"Bi-Lo","brand:wikidata":"Q4835622","brand:wikipedia":"en:BI-LO (Australia)",name:"Bi-Lo",shop:"supermarket"},removeTags:{brand:"Bi-Lo","brand:wikidata":"Q4835622","brand:wikipedia":"en:BI-LO (Australia)",name:"Bi-Lo",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Biedronka":{name:"Biedronka",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q857182"},addTags:{brand:"Biedronka","brand:wikidata":"Q857182","brand:wikipedia":"en:Biedronka",name:"Biedronka",shop:"supermarket"},removeTags:{brand:"Biedronka","brand:wikidata":"Q857182","brand:wikipedia":"en:Biedronka",name:"Biedronka",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Big C":{name:"Big C",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q858665"},addTags:{brand:"Big C","brand:wikidata":"Q858665","brand:wikipedia":"en:Big C",name:"Big C",shop:"supermarket"},removeTags:{brand:"Big C","brand:wikidata":"Q858665","brand:wikipedia":"en:Big C",name:"Big C",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Billa":{name:"Billa",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q537781"},addTags:{brand:"Billa","brand:wikidata":"Q537781","brand:wikipedia":"en:Billa (supermarket)",name:"Billa",shop:"supermarket"},removeTags:{brand:"Billa","brand:wikidata":"Q537781","brand:wikipedia":"en:Billa (supermarket)",name:"Billa",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Bingo":{name:"Bingo",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q16842066"},addTags:{brand:"Bingo","brand:wikidata":"Q16842066","brand:wikipedia":"bs:Bingo (kompanija)",name:"Bingo",shop:"supermarket"},removeTags:{brand:"Bingo","brand:wikidata":"Q16842066","brand:wikipedia":"bs:Bingo (kompanija)",name:"Bingo",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Biocoop":{name:"Biocoop",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q2904039"},addTags:{brand:"Biocoop","brand:wikidata":"Q2904039","brand:wikipedia":"fr:Biocoop",name:"Biocoop",shop:"supermarket"},removeTags:{brand:"Biocoop","brand:wikidata":"Q2904039","brand:wikipedia":"fr:Biocoop",name:"Biocoop",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Brookshire Brothers":{name:"Brookshire Brothers",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q4975084"},addTags:{brand:"Brookshire Brothers","brand:wikidata":"Q4975084","brand:wikipedia":"en:Brookshire Brothers",name:"Brookshire Brothers",shop:"supermarket"},removeTags:{brand:"Brookshire Brothers","brand:wikidata":"Q4975084","brand:wikipedia":"en:Brookshire Brothers",name:"Brookshire Brothers",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Brookshire's":{name:"Brookshire's",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q4975085"},addTags:{brand:"Brookshire's","brand:wikidata":"Q4975085","brand:wikipedia":"en:Brookshire Grocery Company",name:"Brookshire's",shop:"supermarket"},removeTags:{brand:"Brookshire's","brand:wikidata":"Q4975085","brand:wikipedia":"en:Brookshire Grocery Company",name:"Brookshire's",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Budgens":{name:"Budgens",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q4985016"},addTags:{brand:"Budgens","brand:wikidata":"Q4985016","brand:wikipedia":"en:Budgens",name:"Budgens",shop:"supermarket"},removeTags:{brand:"Budgens","brand:wikidata":"Q4985016","brand:wikipedia":"en:Budgens",name:"Budgens",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Bulk Barn":{name:"Bulk Barn",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q4996466"},addTags:{brand:"Bulk Barn","brand:wikidata":"Q4996466",name:"Bulk Barn",shop:"supermarket"},removeTags:{brand:"Bulk Barn","brand:wikidata":"Q4996466",name:"Bulk Barn",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Bunnpris":{name:"Bunnpris",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q1774634"},addTags:{brand:"Bunnpris","brand:wikidata":"Q1774634","brand:wikipedia":"en:Bunnpris",name:"Bunnpris",shop:"supermarket"},removeTags:{brand:"Bunnpris","brand:wikidata":"Q1774634","brand:wikipedia":"en:Bunnpris",name:"Bunnpris",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/COOP Jednota":{name:"COOP Jednota",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q41629254"},addTags:{brand:"COOP Jednota","brand:wikidata":"Q41629254","brand:wikipedia":"sk:COOP Jednota Slovensko",name:"COOP Jednota",shop:"supermarket"},removeTags:{brand:"COOP Jednota","brand:wikidata":"Q41629254","brand:wikipedia":"sk:COOP Jednota Slovensko",name:"COOP Jednota",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Caprabo":{name:"Caprabo",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q1980781"},addTags:{brand:"Caprabo","brand:wikidata":"Q1980781","brand:wikipedia":"en:Caprabo",name:"Caprabo",shop:"supermarket"},removeTags:{brand:"Caprabo","brand:wikidata":"Q1980781","brand:wikipedia":"en:Caprabo",name:"Caprabo",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Cargills Food City":{name:"Cargills Food City",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q58353955"},addTags:{brand:"Cargills Food City","brand:wikidata":"Q58353955",name:"Cargills Food City","operator:wikidata":"Q5039260","operator:wikipedia":"en:Cargills (Ceylon)",shop:"supermarket"},removeTags:{brand:"Cargills Food City","brand:wikidata":"Q58353955",name:"Cargills Food City","operator:wikidata":"Q5039260","operator:wikipedia":"en:Cargills (Ceylon)",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Carrefour":{name:"Carrefour",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q217599"},addTags:{brand:"Carrefour","brand:wikidata":"Q217599","brand:wikipedia":"fr:Carrefour (enseigne)",name:"Carrefour",operator:"Groupe Carrefour","operator:wikidata":"Q3117359","operator:wikipedia":"fr:Groupe Carrefour",shop:"supermarket"},removeTags:{brand:"Carrefour","brand:wikidata":"Q217599","brand:wikipedia":"fr:Carrefour (enseigne)",name:"Carrefour",operator:"Groupe Carrefour","operator:wikidata":"Q3117359","operator:wikipedia":"fr:Groupe Carrefour",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Carrefour City":{name:"Carrefour City",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q2940187"},addTags:{brand:"Carrefour City","brand:wikidata":"Q2940187","brand:wikipedia":"fr:Carrefour City",name:"Carrefour City",operator:"Groupe Carrefour","operator:wikidata":"Q3117359","operator:wikipedia":"fr:Groupe Carrefour",shop:"supermarket"},removeTags:{brand:"Carrefour City","brand:wikidata":"Q2940187","brand:wikipedia":"fr:Carrefour City",name:"Carrefour City",operator:"Groupe Carrefour","operator:wikidata":"Q3117359","operator:wikipedia":"fr:Groupe Carrefour",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Carrefour Contact":{name:"Carrefour Contact",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q2940188"},addTags:{brand:"Carrefour Contact","brand:wikidata":"Q2940188","brand:wikipedia":"fr:Carrefour Contact",name:"Carrefour Contact",operator:"Groupe Carrefour","operator:wikidata":"Q3117359","operator:wikipedia":"fr:Groupe Carrefour",shop:"supermarket"},removeTags:{brand:"Carrefour Contact","brand:wikidata":"Q2940188","brand:wikipedia":"fr:Carrefour Contact",name:"Carrefour Contact",operator:"Groupe Carrefour","operator:wikidata":"Q3117359","operator:wikipedia":"fr:Groupe Carrefour",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Carrefour Express":{name:"Carrefour Express",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q2940190"},addTags:{brand:"Carrefour Express","brand:wikidata":"Q2940190","brand:wikipedia":"fr:Carrefour Express",name:"Carrefour Express",operator:"Groupe Carrefour","operator:wikidata":"Q3117359","operator:wikipedia":"fr:Groupe Carrefour",shop:"supermarket"},removeTags:{brand:"Carrefour Express","brand:wikidata":"Q2940190","brand:wikipedia":"fr:Carrefour Express",name:"Carrefour Express",operator:"Groupe Carrefour","operator:wikidata":"Q3117359","operator:wikipedia":"fr:Groupe Carrefour",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Carrefour Market":{name:"Carrefour Market",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q2689639"},addTags:{brand:"Carrefour Market","brand:wikidata":"Q2689639","brand:wikipedia":"fr:Carrefour Market",name:"Carrefour Market",operator:"Groupe Carrefour","operator:wikidata":"Q3117359","operator:wikipedia":"fr:Groupe Carrefour",shop:"supermarket"},removeTags:{brand:"Carrefour Market","brand:wikidata":"Q2689639","brand:wikipedia":"fr:Carrefour Market",name:"Carrefour Market",operator:"Groupe Carrefour","operator:wikidata":"Q3117359","operator:wikipedia":"fr:Groupe Carrefour",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Carulla":{name:"Carulla",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q5047480"},addTags:{brand:"Carulla","brand:wikidata":"Q5047480","brand:wikipedia":"en:Carulla",name:"Carulla",shop:"supermarket"},removeTags:{brand:"Carulla","brand:wikidata":"Q5047480","brand:wikipedia":"en:Carulla",name:"Carulla",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Checkers":{name:"Checkers",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q5089126"},addTags:{brand:"Checkers","brand:wikidata":"Q5089126","brand:wikipedia":"en:Checkers (supermarket chain)",name:"Checkers",shop:"supermarket"},removeTags:{brand:"Checkers","brand:wikidata":"Q5089126","brand:wikipedia":"en:Checkers (supermarket chain)",name:"Checkers",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Chedraui":{name:"Chedraui",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q2961952"},addTags:{brand:"Chedraui","brand:wikidata":"Q2961952","brand:wikipedia":"en:Chedraui",name:"Chedraui",shop:"supermarket"},removeTags:{brand:"Chedraui","brand:wikidata":"Q2961952","brand:wikipedia":"en:Chedraui",name:"Chedraui",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/City Market":{name:"City Market",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q5123299"},addTags:{brand:"City Market","brand:wikidata":"Q5123299","brand:wikipedia":"en:City Market (US grocery store chain)",name:"City Market",shop:"supermarket"},removeTags:{brand:"City Market","brand:wikidata":"Q5123299","brand:wikipedia":"en:City Market (US grocery store chain)",name:"City Market",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Co-op":{name:"Co-op",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q5440676"},addTags:{brand:"Federated Co-operatives","brand:wikidata":"Q5440676","brand:wikipedia":"en:Federated Co-operatives",name:"Co-op",shop:"supermarket"},removeTags:{brand:"Federated Co-operatives","brand:wikidata":"Q5440676","brand:wikipedia":"en:Federated Co-operatives",name:"Co-op",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Coles":{name:"Coles",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q1108172"},addTags:{brand:"Coles","brand:wikidata":"Q1108172","brand:wikipedia":"en:Coles Supermarkets",name:"Coles",shop:"supermarket"},removeTags:{brand:"Coles","brand:wikidata":"Q1108172","brand:wikipedia":"en:Coles Supermarkets",name:"Coles",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Colruyt":{name:"Colruyt",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q2363991"},addTags:{brand:"Colruyt","brand:wikidata":"Q2363991","brand:wikipedia":"en:Colruyt (supermarket)",name:"Colruyt",shop:"supermarket"},removeTags:{brand:"Colruyt","brand:wikidata":"Q2363991","brand:wikipedia":"en:Colruyt (supermarket)",name:"Colruyt",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Combi":{name:"Combi",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q1113618"},addTags:{brand:"Combi","brand:wikidata":"Q1113618","brand:wikipedia":"de:Combi (Einkaufsmarkt)",name:"Combi",shop:"supermarket"},removeTags:{brand:"Combi","brand:wikidata":"Q1113618","brand:wikipedia":"de:Combi (Einkaufsmarkt)",name:"Combi",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Comercial Mexicana":{name:"Comercial Mexicana",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q2985173"},addTags:{brand:"Comercial Mexicana","brand:wikidata":"Q2985173","brand:wikipedia":"en:Comercial Mexicana",name:"Comercial Mexicana",shop:"supermarket"},removeTags:{brand:"Comercial Mexicana","brand:wikidata":"Q2985173","brand:wikipedia":"en:Comercial Mexicana",name:"Comercial Mexicana",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Conad":{name:"Conad",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q639075"},addTags:{brand:"Conad","brand:wikidata":"Q639075","brand:wikipedia":"it:Conad",name:"Conad",shop:"supermarket"},removeTags:{brand:"Conad","brand:wikidata":"Q639075","brand:wikipedia":"it:Conad",name:"Conad",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Conad City":{name:"Conad City",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q57543102"},addTags:{brand:"Conad City","brand:wikidata":"Q57543102",name:"Conad City",shop:"supermarket"},removeTags:{brand:"Conad City","brand:wikidata":"Q57543102",name:"Conad City",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Condis":{name:"Condis",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q57417581"},addTags:{brand:"Condis","brand:wikidata":"Q57417581",name:"Condis",shop:"supermarket"},removeTags:{brand:"Condis","brand:wikidata":"Q57417581",name:"Condis",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Consum":{name:"Consum",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q8350308"},addTags:{brand:"Consum","brand:wikidata":"Q8350308","brand:wikipedia":"es:Consum",name:"Consum",shop:"supermarket"},removeTags:{brand:"Consum","brand:wikidata":"Q8350308","brand:wikipedia":"es:Consum",name:"Consum",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Continente":{name:"Continente",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q2995683"},addTags:{brand:"Continente","brand:wikidata":"Q2995683","brand:wikipedia":"en:Continente (Supermarket)",name:"Continente",shop:"supermarket"},removeTags:{brand:"Continente","brand:wikidata":"Q2995683","brand:wikipedia":"en:Continente (Supermarket)",name:"Continente",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Coop Prix":{name:"Coop Prix",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q5167705"},addTags:{brand:"Coop Prix","brand:wikidata":"Q5167705","brand:wikipedia":"no:Coop Prix",name:"Coop Prix",shop:"supermarket"},removeTags:{brand:"Coop Prix","brand:wikidata":"Q5167705","brand:wikipedia":"no:Coop Prix",name:"Coop Prix",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Cora":{name:"Cora",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q686643"},addTags:{brand:"Cora","brand:wikidata":"Q686643","brand:wikipedia":"en:Cora (hypermarket)",name:"Cora",shop:"supermarket"},removeTags:{brand:"Cora","brand:wikidata":"Q686643","brand:wikipedia":"en:Cora (hypermarket)",name:"Cora",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Costcutter":{name:"Costcutter",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q5175072"},addTags:{brand:"Costcutter","brand:wikidata":"Q5175072","brand:wikipedia":"en:Costcutter",name:"Costcutter",shop:"supermarket"},removeTags:{brand:"Costcutter","brand:wikidata":"Q5175072","brand:wikipedia":"en:Costcutter",name:"Costcutter",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Coto":{name:"Coto",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q5175411"},addTags:{brand:"Coto","brand:wikidata":"Q5175411","brand:wikipedia":"es:Coto (supermercado)",name:"Coto",shop:"supermarket"},removeTags:{brand:"Coto","brand:wikidata":"Q5175411","brand:wikipedia":"es:Coto (supermercado)",name:"Coto",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Countdown":{name:"Countdown",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q5176845"},addTags:{brand:"Countdown","brand:wikidata":"Q5176845","brand:wikipedia":"en:Countdown (supermarket)",name:"Countdown",shop:"supermarket"},removeTags:{brand:"Countdown","brand:wikidata":"Q5176845","brand:wikipedia":"en:Countdown (supermarket)",name:"Countdown",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Cub Foods":{name:"Cub Foods",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q5191916"},addTags:{brand:"Cub Foods","brand:wikidata":"Q5191916","brand:wikipedia":"en:Cub Foods",name:"Cub Foods",shop:"supermarket"},removeTags:{brand:"Cub Foods","brand:wikidata":"Q5191916","brand:wikipedia":"en:Cub Foods",name:"Cub Foods",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/D1":{name:"D1",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q43403418"},addTags:{brand:"D1","brand:wikidata":"Q43403418","brand:wikipedia":"es:Tiendas D1",name:"D1",shop:"supermarket"},removeTags:{brand:"D1","brand:wikidata":"Q43403418","brand:wikipedia":"es:Tiendas D1",name:"D1",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Dagli'Brugsen":{name:"Dagli'Brugsen",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q12307017"},addTags:{brand:"Dagli'Brugsen","brand:wikidata":"Q12307017","brand:wikipedia":"en:Dagli'Brugsen",name:"Dagli'Brugsen",shop:"supermarket"},removeTags:{brand:"Dagli'Brugsen","brand:wikidata":"Q12307017","brand:wikipedia":"en:Dagli'Brugsen",name:"Dagli'Brugsen",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Deen":{name:"Deen",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q13571727"},addTags:{brand:"Deen","brand:wikidata":"Q13571727","brand:wikipedia":"nl:Deen (supermarkt)",name:"Deen",shop:"supermarket"},removeTags:{brand:"Deen","brand:wikidata":"Q13571727","brand:wikipedia":"nl:Deen (supermarkt)",name:"Deen",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Delhaize":{name:"Delhaize",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q1184173"},addTags:{brand:"Delhaize","brand:wikidata":"Q1184173","brand:wikipedia":"fr:Delhaize",name:"Delhaize",shop:"supermarket"},removeTags:{brand:"Delhaize","brand:wikidata":"Q1184173","brand:wikipedia":"fr:Delhaize",name:"Delhaize",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Delikatesy Centrum":{name:"Delikatesy Centrum",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q11693824"},addTags:{brand:"Delikatesy Centrum","brand:wikidata":"Q11693824","brand:wikipedia":"pl:Delikatesy Centrum",name:"Delikatesy Centrum",shop:"supermarket"},removeTags:{brand:"Delikatesy Centrum","brand:wikidata":"Q11693824","brand:wikipedia":"pl:Delikatesy Centrum",name:"Delikatesy Centrum",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Denner":{name:"Denner",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q379911"},addTags:{brand:"Denner","brand:wikidata":"Q379911","brand:wikipedia":"en:Denner (supermarkets)",name:"Denner",shop:"supermarket"},removeTags:{brand:"Denner","brand:wikidata":"Q379911","brand:wikipedia":"en:Denner (supermarkets)",name:"Denner",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Despar":{name:"Despar",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q610492"},addTags:{brand:"Despar","brand:wikidata":"Q610492","brand:wikipedia":"en:Spar (retailer)",name:"Despar",shop:"supermarket"},removeTags:{brand:"Despar","brand:wikidata":"Q610492","brand:wikipedia":"en:Spar (retailer)",name:"Despar",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Dia":{name:"Dia",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q925132"},addTags:{brand:"Dia","brand:wikidata":"Q925132","brand:wikipedia":"es:Supermercados Dia",name:"Dia",shop:"supermarket"},removeTags:{brand:"Dia","brand:wikidata":"Q925132","brand:wikipedia":"es:Supermercados Dia",name:"Dia",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Dia Market":{name:"Dia Market",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q925132"},addTags:{brand:"Dia Market","brand:wikidata":"Q925132","brand:wikipedia":"es:Supermercados Dia",name:"Dia Market",shop:"supermarket"},removeTags:{brand:"Dia Market","brand:wikidata":"Q925132","brand:wikipedia":"es:Supermercados Dia",name:"Dia Market",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Dino":{name:"Dino",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q11694239"},addTags:{brand:"Dino","brand:wikidata":"Q11694239","brand:wikipedia":"pl:Dino Polska",name:"Dino",shop:"supermarket"},removeTags:{brand:"Dino","brand:wikidata":"Q11694239","brand:wikipedia":"pl:Dino Polska",name:"Dino",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Dirk van den Broek":{name:"Dirk van den Broek",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q17502722"},addTags:{brand:"Dirk van den Broek","brand:wikidata":"Q17502722","brand:wikipedia":"en:Dirk (supermarket)",name:"Dirk van den Broek",shop:"supermarket"},removeTags:{brand:"Dirk van den Broek","brand:wikidata":"Q17502722","brand:wikipedia":"en:Dirk (supermarket)",name:"Dirk van den Broek",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Dunnes Stores":{name:"Dunnes Stores",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q1266203"},addTags:{brand:"Dunnes Stores","brand:wikidata":"Q1266203","brand:wikipedia":"en:Dunnes Stores",name:"Dunnes Stores",shop:"supermarket"},removeTags:{brand:"Dunnes Stores","brand:wikidata":"Q1266203","brand:wikipedia":"en:Dunnes Stores",name:"Dunnes Stores",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/E. Leclerc":{name:"E. Leclerc",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q1273376"},addTags:{brand:"E. Leclerc","brand:wikidata":"Q1273376","brand:wikipedia":"en:E.Leclerc",name:"E. Leclerc",shop:"supermarket"},removeTags:{brand:"E. Leclerc","brand:wikidata":"Q1273376","brand:wikipedia":"en:E.Leclerc",name:"E. Leclerc",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/E. Leclerc Drive":{name:"E. Leclerc Drive",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q1273376"},addTags:{brand:"E. Leclerc Drive","brand:wikidata":"Q1273376","brand:wikipedia":"fr:E.Leclerc",name:"E. Leclerc Drive",shop:"supermarket"},removeTags:{brand:"E. Leclerc Drive","brand:wikidata":"Q1273376","brand:wikipedia":"fr:E.Leclerc",name:"E. Leclerc Drive",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/EMTÉ":{name:"EMTÉ",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q3119122"},addTags:{brand:"EMTÉ","brand:wikidata":"Q3119122","brand:wikipedia":"en:EMTÉ",name:"EMTÉ",shop:"supermarket"},removeTags:{brand:"EMTÉ","brand:wikidata":"Q3119122","brand:wikipedia":"en:EMTÉ",name:"EMTÉ",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Edeka":{name:"Edeka",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q701755"},addTags:{brand:"Edeka","brand:wikidata":"Q701755","brand:wikipedia":"en:Edeka",name:"Edeka",shop:"supermarket"},removeTags:{brand:"Edeka","brand:wikidata":"Q701755","brand:wikipedia":"en:Edeka",name:"Edeka",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Eko":{name:"Eko",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q9251859"},addTags:{brand:"Eko","brand:wikidata":"Q9251859","brand:wikipedia":"pl:Eko Holding",name:"Eko",shop:"supermarket"},removeTags:{brand:"Eko","brand:wikidata":"Q9251859","brand:wikipedia":"pl:Eko Holding",name:"Eko",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Ekono":{name:"Ekono",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q2842729"},addTags:{brand:"Ekono","brand:wikidata":"Q2842729","brand:wikipedia":"es:Ekono",name:"Ekono",shop:"supermarket"},removeTags:{brand:"Ekono","brand:wikidata":"Q2842729","brand:wikipedia":"es:Ekono",name:"Ekono",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Eroski":{name:"Eroski",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q1361349"},addTags:{brand:"Eroski","brand:wikidata":"Q1361349","brand:wikipedia":"en:Eroski",name:"Eroski",shop:"supermarket"},removeTags:{brand:"Eroski","brand:wikidata":"Q1361349","brand:wikipedia":"en:Eroski",name:"Eroski",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Esselunga":{name:"Esselunga",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q1059636"},addTags:{brand:"Esselunga","brand:wikidata":"Q1059636","brand:wikipedia":"en:Esselunga",name:"Esselunga",shop:"supermarket"},removeTags:{brand:"Esselunga","brand:wikidata":"Q1059636","brand:wikipedia":"en:Esselunga",name:"Esselunga",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/EuroSpin":{name:"EuroSpin",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q1374674"},addTags:{brand:"EuroSpin","brand:wikidata":"Q1374674","brand:wikipedia":"it:EuroSpin",name:"EuroSpin",shop:"supermarket"},removeTags:{brand:"EuroSpin","brand:wikidata":"Q1374674","brand:wikipedia":"it:EuroSpin",name:"EuroSpin",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Eurospar":{name:"Eurospar",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q12309283"},addTags:{brand:"Eurospar","brand:wikidata":"Q12309283","brand:wikipedia":"da:Eurospar",name:"Eurospar",shop:"supermarket"},removeTags:{brand:"Eurospar","brand:wikidata":"Q12309283","brand:wikipedia":"da:Eurospar",name:"Eurospar",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Extra":{name:"Extra",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q11964085"},addTags:{brand:"Extra","brand:wikidata":"Q11964085","brand:wikipedia":"no:Extra (Coop)",name:"Extra",shop:"supermarket"},removeTags:{brand:"Extra","brand:wikidata":"Q11964085","brand:wikipedia":"no:Extra (Coop)",name:"Extra",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Famila":{name:"Famila",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q1395108"},addTags:{brand:"Famila","brand:wikidata":"Q1395108","brand:wikipedia":"de:Famila",name:"Famila",shop:"supermarket"},removeTags:{brand:"Famila","brand:wikidata":"Q1395108","brand:wikipedia":"de:Famila",name:"Famila",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Fareway":{name:"Fareway",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q5434998"},addTags:{brand:"Fareway","brand:wikidata":"Q5434998","brand:wikipedia":"en:Fareway",name:"Fareway",shop:"supermarket"},removeTags:{brand:"Fareway","brand:wikidata":"Q5434998","brand:wikipedia":"en:Fareway",name:"Fareway",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Farmfoods":{name:"Farmfoods",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q5435841"},addTags:{brand:"Farmfoods","brand:wikidata":"Q5435841","brand:wikipedia":"en:Farmfoods",name:"Farmfoods",shop:"supermarket"},removeTags:{brand:"Farmfoods","brand:wikidata":"Q5435841","brand:wikipedia":"en:Farmfoods",name:"Farmfoods",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Feneberg":{name:"Feneberg",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q5345378"},addTags:{brand:"Feneberg","brand:wikidata":"Q5345378","brand:wikipedia":"de:Feneberg Lebensmittel",name:"Feneberg",shop:"supermarket"},removeTags:{brand:"Feneberg","brand:wikidata":"Q5345378","brand:wikipedia":"de:Feneberg Lebensmittel",name:"Feneberg",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Food 4 Less":{name:"Food 4 Less",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q5465282"},addTags:{brand:"Food 4 Less","brand:wikidata":"Q5465282","brand:wikipedia":"en:Food 4 Less",name:"Food 4 Less",shop:"supermarket"},removeTags:{brand:"Food 4 Less","brand:wikidata":"Q5465282","brand:wikipedia":"en:Food 4 Less",name:"Food 4 Less",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Food Basics":{name:"Food Basics",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q5465300"},addTags:{brand:"Food Basics","brand:wikidata":"Q5465300","brand:wikipedia":"en:Food Basics",name:"Food Basics",shop:"supermarket"},removeTags:{brand:"Food Basics","brand:wikidata":"Q5465300","brand:wikipedia":"en:Food Basics",name:"Food Basics",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Food City":{name:"Food City",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q5465306"},addTags:{brand:"Food City","brand:wikidata":"Q5465306","brand:wikipedia":"en:Food City (Canada)",name:"Food City",shop:"supermarket"},removeTags:{brand:"Food City","brand:wikidata":"Q5465306","brand:wikipedia":"en:Food City (Canada)",name:"Food City",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Food Lion":{name:"Food Lion",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q1435950"},addTags:{brand:"Food Lion","brand:wikidata":"Q1435950","brand:wikipedia":"en:Food Lion",name:"Food Lion",shop:"supermarket"},removeTags:{brand:"Food Lion","brand:wikidata":"Q1435950","brand:wikipedia":"en:Food Lion",name:"Food Lion",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Foodworks":{name:"Foodworks",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q5465579"},addTags:{brand:"Foodworks","brand:wikidata":"Q5465579","brand:wikipedia":"en:Foodworks",name:"Foodworks",shop:"supermarket"},removeTags:{brand:"Foodworks","brand:wikidata":"Q5465579","brand:wikipedia":"en:Foodworks",name:"Foodworks",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Fred Meyer":{name:"Fred Meyer",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q5495932"},addTags:{brand:"Fred Meyer","brand:wikidata":"Q5495932","brand:wikipedia":"en:Fred Meyer",name:"Fred Meyer",shop:"supermarket"},removeTags:{brand:"Fred Meyer","brand:wikidata":"Q5495932","brand:wikipedia":"en:Fred Meyer",name:"Fred Meyer",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/FreshCo":{name:"FreshCo",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q5502915"},addTags:{brand:"FreshCo","brand:wikidata":"Q5502915","brand:wikipedia":"en:FreshCo",name:"FreshCo",shop:"supermarket"},removeTags:{brand:"FreshCo","brand:wikidata":"Q5502915","brand:wikipedia":"en:FreshCo",name:"FreshCo",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Froiz":{name:"Froiz",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q17070775"},addTags:{brand:"Froiz","brand:wikidata":"Q17070775","brand:wikipedia":"en:Froiz",name:"Froiz",shop:"supermarket"},removeTags:{brand:"Froiz","brand:wikidata":"Q17070775","brand:wikipedia":"en:Froiz",name:"Froiz",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Føtex":{name:"Føtex",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q1480395"},addTags:{brand:"Føtex","brand:wikidata":"Q1480395","brand:wikipedia":"en:Føtex",name:"Føtex",shop:"supermarket"},removeTags:{brand:"Føtex","brand:wikidata":"Q1480395","brand:wikipedia":"en:Føtex",name:"Føtex",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/G20":{name:"G20",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q3504731"},addTags:{brand:"G20","brand:wikidata":"Q3504731","brand:wikipedia":"fr:Supermarchés G20",name:"G20",shop:"supermarket"},removeTags:{brand:"G20","brand:wikidata":"Q3504731","brand:wikipedia":"fr:Supermarchés G20",name:"G20",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Gadis":{name:"Gadis",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q12389151"},addTags:{brand:"Gadis","brand:wikidata":"Q12389151","brand:wikipedia":"gl:Gadisa",name:"Gadis",shop:"supermarket"},removeTags:{brand:"Gadis","brand:wikidata":"Q12389151","brand:wikipedia":"gl:Gadisa",name:"Gadis",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Giant Eagle":{name:"Giant Eagle",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q1522721"},addTags:{brand:"Giant Eagle","brand:wikidata":"Q1522721","brand:wikipedia":"en:Giant Eagle",name:"Giant Eagle",shop:"supermarket"},removeTags:{brand:"Giant Eagle","brand:wikidata":"Q1522721","brand:wikipedia":"en:Giant Eagle",name:"Giant Eagle",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Globus":{name:"Globus",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q457503"},addTags:{brand:"Globus","brand:wikidata":"Q457503","brand:wikipedia":"en:Globus (hypermarket)",name:"Globus",shop:"supermarket"},removeTags:{brand:"Globus","brand:wikidata":"Q457503","brand:wikipedia":"en:Globus (hypermarket)",name:"Globus",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Grand Frais":{name:"Grand Frais",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q3114675"},addTags:{brand:"Grand Frais","brand:wikidata":"Q3114675","brand:wikipedia":"fr:Grand Frais",name:"Grand Frais",shop:"supermarket"},removeTags:{brand:"Grand Frais","brand:wikidata":"Q3114675","brand:wikipedia":"fr:Grand Frais",name:"Grand Frais",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Grocery Outlet":{name:"Grocery Outlet",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q5609934"},addTags:{brand:"Grocery Outlet","brand:wikidata":"Q5609934","brand:wikipedia":"en:Grocery Outlet",name:"Grocery Outlet",shop:"supermarket"},removeTags:{brand:"Grocery Outlet","brand:wikidata":"Q5609934","brand:wikipedia":"en:Grocery Outlet",name:"Grocery Outlet",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Géant Casino":{name:"Géant Casino",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q1380537"},addTags:{brand:"Géant Casino","brand:wikidata":"Q1380537","brand:wikipedia":"en:Géant Casino",name:"Géant Casino",shop:"supermarket"},removeTags:{brand:"Géant Casino","brand:wikidata":"Q1380537","brand:wikipedia":"en:Géant Casino",name:"Géant Casino",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/H-E-B":{name:"H-E-B",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q830621"},addTags:{brand:"H-E-B","brand:wikidata":"Q830621","brand:wikipedia":"en:H-E-B",name:"H-E-B",shop:"supermarket"},removeTags:{brand:"H-E-B","brand:wikidata":"Q830621","brand:wikipedia":"en:H-E-B",name:"H-E-B",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/HIT":{name:"HIT",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q1548713"},addTags:{brand:"HIT","brand:wikidata":"Q1548713","brand:wikipedia":"de:HIT Handelsgruppe",name:"HIT",shop:"supermarket"},removeTags:{brand:"HIT","brand:wikidata":"Q1548713","brand:wikipedia":"de:HIT Handelsgruppe",name:"HIT",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Hannaford":{name:"Hannaford",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q5648760"},addTags:{brand:"Hannaford","brand:wikidata":"Q5648760","brand:wikipedia":"en:Hannaford Brothers Company",name:"Hannaford",shop:"supermarket"},removeTags:{brand:"Hannaford","brand:wikidata":"Q5648760","brand:wikipedia":"en:Hannaford Brothers Company",name:"Hannaford",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Harris Teeter":{name:"Harris Teeter",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q5665067"},addTags:{brand:"Harris Teeter","brand:wikidata":"Q5665067","brand:wikipedia":"en:Harris Teeter",name:"Harris Teeter",shop:"supermarket"},removeTags:{brand:"Harris Teeter","brand:wikidata":"Q5665067","brand:wikipedia":"en:Harris Teeter",name:"Harris Teeter",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Hemköp":{name:"Hemköp",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q10521746"},addTags:{brand:"Hemköp","brand:wikidata":"Q10521746","brand:wikipedia":"sv:Hemköp",name:"Hemköp",shop:"supermarket"},removeTags:{brand:"Hemköp","brand:wikidata":"Q10521746","brand:wikipedia":"sv:Hemköp",name:"Hemköp",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Heron Foods":{name:"Heron Foods",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q5743472"},addTags:{brand:"Heron Foods","brand:wikidata":"Q5743472","brand:wikipedia":"en:Heron Foods",name:"Heron Foods",shop:"supermarket"},removeTags:{brand:"Heron Foods","brand:wikidata":"Q5743472","brand:wikipedia":"en:Heron Foods",name:"Heron Foods",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Hofer":{name:"Hofer",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q15815751"},addTags:{brand:"Hofer","brand:wikidata":"Q15815751","brand:wikipedia":"de:Hofer KG",name:"Hofer",shop:"supermarket"},removeTags:{brand:"Hofer","brand:wikidata":"Q15815751","brand:wikipedia":"de:Hofer KG",name:"Hofer",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Hoogvliet":{name:"Hoogvliet",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q1642179"},addTags:{brand:"Hoogvliet","brand:wikidata":"Q1642179","brand:wikipedia":"nl:Hoogvliet (supermarkt)",name:"Hoogvliet",shop:"supermarket"},removeTags:{brand:"Hoogvliet","brand:wikidata":"Q1642179","brand:wikipedia":"nl:Hoogvliet (supermarkt)",name:"Hoogvliet",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Hy-Vee":{name:"Hy-Vee",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q1639719"},addTags:{brand:"Hy-Vee","brand:wikidata":"Q1639719","brand:wikipedia":"en:Hy-Vee",name:"Hy-Vee",shop:"supermarket"},removeTags:{brand:"Hy-Vee","brand:wikidata":"Q1639719","brand:wikipedia":"en:Hy-Vee",name:"Hy-Vee",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Hyper U":{name:"Hyper U",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q2529029"},addTags:{brand:"Hyper U","brand:wikidata":"Q2529029","brand:wikipedia":"en:Système U",name:"Hyper U",shop:"supermarket"},removeTags:{brand:"Hyper U","brand:wikidata":"Q2529029","brand:wikipedia":"en:Système U",name:"Hyper U",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/ICA":{name:"ICA",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q1663776"},addTags:{brand:"ICA","brand:wikidata":"Q1663776","brand:wikipedia":"sv:Ica",name:"ICA",shop:"supermarket"},removeTags:{brand:"ICA","brand:wikidata":"Q1663776","brand:wikipedia":"sv:Ica",name:"ICA",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/ICA Kvantum":{name:"ICA Kvantum",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q1663776"},addTags:{brand:"ICA Kvantum","brand:wikidata":"Q1663776","brand:wikipedia":"sv:Ica",name:"ICA Kvantum",shop:"supermarket"},removeTags:{brand:"ICA Kvantum","brand:wikidata":"Q1663776","brand:wikipedia":"sv:Ica",name:"ICA Kvantum",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/ICA Maxi":{name:"ICA Maxi",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q1663776"},addTags:{brand:"ICA Maxi","brand:wikidata":"Q1663776","brand:wikipedia":"sv:Ica",name:"ICA Maxi",shop:"supermarket"},removeTags:{brand:"ICA Maxi","brand:wikidata":"Q1663776","brand:wikipedia":"sv:Ica",name:"ICA Maxi",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/IDEA":{name:"IDEA",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q23461622"},addTags:{brand:"IDEA","brand:wikidata":"Q23461622","brand:wikipedia":"en:Idea (supermarkets)",name:"IDEA",shop:"supermarket"},removeTags:{brand:"IDEA","brand:wikidata":"Q23461622","brand:wikipedia":"en:Idea (supermarkets)",name:"IDEA",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/IGA":{name:"IGA",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q3146662"},addTags:{brand:"IGA","brand:wikidata":"Q3146662","brand:wikipedia":"en:IGA (supermarkets)",name:"IGA",shop:"supermarket"},removeTags:{brand:"IGA","brand:wikidata":"Q3146662","brand:wikipedia":"en:IGA (supermarkets)",name:"IGA",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Iceland":{name:"Iceland",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q721810"},addTags:{brand:"Iceland","brand:wikidata":"Q721810","brand:wikipedia":"en:Iceland (supermarket)",name:"Iceland",shop:"supermarket"},removeTags:{brand:"Iceland","brand:wikidata":"Q721810","brand:wikipedia":"en:Iceland (supermarket)",name:"Iceland",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Ingles":{name:"Ingles",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q6032595"},addTags:{brand:"Ingles","brand:wikidata":"Q6032595","brand:wikipedia":"en:Ingles",name:"Ingles",shop:"supermarket"},removeTags:{brand:"Ingles","brand:wikidata":"Q6032595","brand:wikipedia":"en:Ingles",name:"Ingles",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Intermarché":{name:"Intermarché",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q3153200"},addTags:{brand:"Intermarché","brand:wikidata":"Q3153200","brand:wikipedia":"fr:Intermarché",name:"Intermarché",shop:"supermarket"},removeTags:{brand:"Intermarché","brand:wikidata":"Q3153200","brand:wikipedia":"fr:Intermarché",name:"Intermarché",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Intermarché Super":{name:"Intermarché Super",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q3153200"},addTags:{brand:"Intermarché Super","brand:wikidata":"Q3153200","brand:wikipedia":"fr:Intermarché",name:"Intermarché Super",shop:"supermarket"},removeTags:{brand:"Intermarché Super","brand:wikidata":"Q3153200","brand:wikipedia":"fr:Intermarché",name:"Intermarché Super",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Interspar":{name:"Interspar",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q15820339"},addTags:{brand:"Interspar","brand:wikidata":"Q15820339","brand:wikipedia":"de:Interspar (Österreich)",name:"Interspar",shop:"supermarket"},removeTags:{brand:"Interspar","brand:wikidata":"Q15820339","brand:wikipedia":"de:Interspar (Österreich)",name:"Interspar",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Irma":{name:"Irma",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q797150"},addTags:{brand:"Irma","brand:wikidata":"Q797150","brand:wikipedia":"en:Irma (supermarket)",name:"Irma",shop:"supermarket"},removeTags:{brand:"Irma","brand:wikidata":"Q797150","brand:wikipedia":"en:Irma (supermarket)",name:"Irma",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Jewel-Osco":{name:"Jewel-Osco",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q3178470"},addTags:{brand:"Jewel-Osco","brand:wikidata":"Q3178470","brand:wikipedia":"en:Jewel (supermarket)",name:"Jewel-Osco",shop:"supermarket"},removeTags:{brand:"Jewel-Osco","brand:wikidata":"Q3178470","brand:wikipedia":"en:Jewel (supermarket)",name:"Jewel-Osco",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Joker":{name:"Joker",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q716328"},addTags:{brand:"Joker","brand:wikidata":"Q716328","brand:wikipedia":"en:Joker (store)",name:"Joker",shop:"supermarket"},removeTags:{brand:"Joker","brand:wikidata":"Q716328","brand:wikipedia":"en:Joker (store)",name:"Joker",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Jumbo":{name:"Jumbo",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q2262314"},addTags:{brand:"Jumbo","brand:wikidata":"Q2262314","brand:wikipedia":"en:Jumbo (supermarket)",name:"Jumbo",shop:"supermarket"},removeTags:{brand:"Jumbo","brand:wikidata":"Q2262314","brand:wikipedia":"en:Jumbo (supermarket)",name:"Jumbo",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Kaufland":{name:"Kaufland",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q685967"},addTags:{brand:"Kaufland","brand:wikidata":"Q685967","brand:wikipedia":"en:Kaufland",name:"Kaufland",shop:"supermarket"},removeTags:{brand:"Kaufland","brand:wikidata":"Q685967","brand:wikipedia":"en:Kaufland",name:"Kaufland",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/King Soopers":{name:"King Soopers",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q6412065"},addTags:{brand:"King Soopers","brand:wikidata":"Q6412065","brand:wikipedia":"en:King Soopers",name:"King Soopers",shop:"supermarket"},removeTags:{brand:"King Soopers","brand:wikidata":"Q6412065","brand:wikipedia":"en:King Soopers",name:"King Soopers",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Kiwi":{name:"Kiwi",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q1613639"},addTags:{brand:"Kiwi","brand:wikidata":"Q1613639","brand:wikipedia":"en:Kiwi (store)",name:"Kiwi",shop:"supermarket"},removeTags:{brand:"Kiwi","brand:wikidata":"Q1613639","brand:wikipedia":"en:Kiwi (store)",name:"Kiwi",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Kroger":{name:"Kroger",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q153417"},addTags:{brand:"Kroger","brand:wikidata":"Q153417","brand:wikipedia":"en:Kroger",name:"Kroger",shop:"supermarket"},removeTags:{brand:"Kroger","brand:wikidata":"Q153417","brand:wikipedia":"en:Kroger",name:"Kroger",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Kvickly":{name:"Kvickly",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q7061148"},addTags:{brand:"Kvickly","brand:wikidata":"Q7061148","brand:wikipedia":"en:Kvickly",name:"Kvickly",shop:"supermarket"},removeTags:{brand:"Kvickly","brand:wikidata":"Q7061148","brand:wikipedia":"en:Kvickly",name:"Kvickly",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/La Anónima":{name:"La Anónima",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q6135985"},addTags:{brand:"La Anónima","brand:wikidata":"Q6135985","brand:wikipedia":"es:La Anónima",name:"La Anónima",shop:"supermarket"},removeTags:{brand:"La Anónima","brand:wikidata":"Q6135985","brand:wikipedia":"es:La Anónima",name:"La Anónima",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/La Plaza de DIA":{name:"La Plaza de DIA",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q58904673"},addTags:{brand:"La Plaza de DIA","brand:wikidata":"Q58904673",name:"La Plaza de DIA","operator:wikidata":"Q925132","operator:wikipedia":"es:Supermercados Dia",shop:"supermarket"},removeTags:{brand:"La Plaza de DIA","brand:wikidata":"Q58904673",name:"La Plaza de DIA","operator:wikidata":"Q925132","operator:wikipedia":"es:Supermercados Dia",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/La Vie Claire":{name:"La Vie Claire",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q3213589"},addTags:{brand:"La Vie Claire","brand:wikidata":"Q3213589","brand:wikipedia":"en:La Vie Claire (company)",name:"La Vie Claire",shop:"supermarket"},removeTags:{brand:"La Vie Claire","brand:wikidata":"Q3213589","brand:wikipedia":"en:La Vie Claire (company)",name:"La Vie Claire",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Landi":{name:"Landi",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q1803010"},addTags:{brand:"Landi","brand:wikidata":"Q1803010","brand:wikipedia":"en:Landi (Unternehmen)",name:"Landi",shop:"supermarket"},removeTags:{brand:"Landi","brand:wikidata":"Q1803010","brand:wikipedia":"en:Landi (Unternehmen)",name:"Landi",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Leader Price":{name:"Leader Price",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q2181426"},addTags:{brand:"Leader Price","brand:wikidata":"Q2181426","brand:wikipedia":"en:Leader Price",name:"Leader Price",shop:"supermarket"},removeTags:{brand:"Leader Price","brand:wikidata":"Q2181426","brand:wikipedia":"en:Leader Price",name:"Leader Price",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Lider":{name:"Lider",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q6711261"},addTags:{brand:"Lider","brand:wikidata":"Q6711261","brand:wikipedia":"es:Líder (supermercado)",name:"Lider",shop:"supermarket"},removeTags:{brand:"Lider","brand:wikidata":"Q6711261","brand:wikipedia":"es:Líder (supermercado)",name:"Lider",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Lider Express":{name:"Lider Express",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q6711261"},addTags:{brand:"Lider","brand:wikidata":"Q6711261","brand:wikipedia":"es:Líder (supermercado)",name:"Lider Express",shop:"supermarket"},removeTags:{brand:"Lider","brand:wikidata":"Q6711261","brand:wikipedia":"es:Líder (supermercado)",name:"Lider Express",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Lidl":{name:"Lidl",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q151954"},addTags:{brand:"Lidl","brand:wikidata":"Q151954","brand:wikipedia":"en:Lidl",name:"Lidl",shop:"supermarket"},removeTags:{brand:"Lidl","brand:wikidata":"Q151954","brand:wikipedia":"en:Lidl",name:"Lidl",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Lowe's Market":{name:"Lowe's Market",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q6693107"},addTags:{brand:"Lowe's Market","brand:wikidata":"Q6693107","brand:wikipedia":"en:Lowe's Market",name:"Lowe's Market",shop:"supermarket"},removeTags:{brand:"Lowe's Market","brand:wikidata":"Q6693107","brand:wikipedia":"en:Lowe's Market",name:"Lowe's Market",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Lowes Foods":{name:"Lowes Foods",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q6693991"},addTags:{brand:"Lowes Foods","brand:wikidata":"Q6693991","brand:wikipedia":"en:Lowes Foods",name:"Lowes Foods",shop:"supermarket"},removeTags:{brand:"Lowes Foods","brand:wikidata":"Q6693991","brand:wikipedia":"en:Lowes Foods",name:"Lowes Foods",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Lupa":{name:"Lupa",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q58044048"},addTags:{brand:"Lupa","brand:wikidata":"Q58044048",name:"Lupa",shop:"supermarket"},removeTags:{brand:"Lupa","brand:wikidata":"Q58044048",name:"Lupa",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/MD":{name:"MD",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q3841263"},addTags:{brand:"MD","brand:wikidata":"Q3841263","brand:wikipedia":"en:MD Discount",name:"MD",shop:"supermarket"},removeTags:{brand:"MD","brand:wikidata":"Q3841263","brand:wikipedia":"en:MD Discount",name:"MD",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/MPREIS":{name:"MPREIS",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q873491"},addTags:{brand:"MPREIS","brand:wikidata":"Q873491","brand:wikipedia":"de:MPreis",name:"MPREIS",shop:"supermarket"},removeTags:{brand:"MPREIS","brand:wikidata":"Q873491","brand:wikipedia":"de:MPreis",name:"MPREIS",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Markant":{name:"Markant",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q57523365"},addTags:{brand:"Markant","brand:wikidata":"Q57523365",name:"Markant",shop:"supermarket"},removeTags:{brand:"Markant","brand:wikidata":"Q57523365",name:"Markant",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Market Basket":{name:"Market Basket",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q2079198"},addTags:{brand:"Market Basket","brand:wikidata":"Q2079198","brand:wikipedia":"en:Market Basket (New England)",name:"Market Basket",shop:"supermarket"},removeTags:{brand:"Market Basket","brand:wikidata":"Q2079198","brand:wikipedia":"en:Market Basket (New England)",name:"Market Basket",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Marktkauf":{name:"Marktkauf",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q1533254"},addTags:{brand:"Marktkauf","brand:wikidata":"Q1533254","brand:wikipedia":"de:Marktkauf Holding",name:"Marktkauf",shop:"supermarket"},removeTags:{brand:"Marktkauf","brand:wikidata":"Q1533254","brand:wikipedia":"de:Marktkauf Holding",name:"Marktkauf",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Martin's Super Markets":{name:"Martin's Super Markets",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q6774803"},addTags:{brand:"Martin's Super Markets","brand:wikidata":"Q6774803","brand:wikipedia":"en:Martin's Super Markets",name:"Martin's Super Markets",shop:"supermarket"},removeTags:{brand:"Martin's Super Markets","brand:wikidata":"Q6774803","brand:wikipedia":"en:Martin's Super Markets",name:"Martin's Super Markets",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Match":{name:"Match",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q513977"},addTags:{brand:"Match","brand:wikidata":"Q513977","brand:wikipedia":"en:Match (supermarket)",name:"Match",shop:"supermarket"},removeTags:{brand:"Match","brand:wikidata":"Q513977","brand:wikipedia":"en:Match (supermarket)",name:"Match",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Maxi Dia":{name:"Maxi Dia",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q925132"},addTags:{brand:"Maxi Dia","brand:wikidata":"Q925132","brand:wikipedia":"es:Supermercados Dia",name:"Maxi Dia",shop:"supermarket"},removeTags:{brand:"Maxi Dia","brand:wikidata":"Q925132","brand:wikipedia":"es:Supermercados Dia",name:"Maxi Dia",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Maxima X":{name:"Maxima X",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q1881222"},addTags:{brand:"Maxima X","brand:wikidata":"Q1881222","brand:wikipedia":"en:Maxima Group",name:"Maxima X",shop:"supermarket"},removeTags:{brand:"Maxima X","brand:wikidata":"Q1881222","brand:wikipedia":"en:Maxima Group",name:"Maxima X",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Maxima XX":{name:"Maxima XX",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q1881222"},addTags:{brand:"Maxima XX","brand:wikidata":"Q1881222","brand:wikipedia":"en:Maxima Group",name:"Maxima XX",shop:"supermarket"},removeTags:{brand:"Maxima XX","brand:wikidata":"Q1881222","brand:wikipedia":"en:Maxima Group",name:"Maxima XX",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Maxima XXX":{name:"Maxima XXX",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q1881222"},addTags:{brand:"Maxima XXX",name:"Maxima XXX","brand:wikidata":"Q1881222","brand:wikipedia":"en:Maxima Group",shop:"supermarket"},removeTags:{brand:"Maxima XXX",name:"Maxima XXX","brand:wikidata":"Q1881222","brand:wikipedia":"en:Maxima Group",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Maxi (Canada)":{name:"Maxi (Canada)",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q3302441"},addTags:{brand:"Maxi","brand:wikidata":"Q3302441","brand:wikipedia":"en:Maxi (Canadian supermarket)",name:"Maxi",shop:"supermarket"},removeTags:{brand:"Maxi","brand:wikidata":"Q3302441","brand:wikipedia":"en:Maxi (Canadian supermarket)",name:"Maxi",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Maxi (Serbia)":{name:"Maxi (Serbia)",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q6795490"},addTags:{brand:"Maxi","brand:wikidata":"Q6795490","brand:wikipedia":"en:Maxi (supermarkets)",name:"Maxi",shop:"supermarket"},removeTags:{brand:"Maxi","brand:wikidata":"Q6795490","brand:wikipedia":"en:Maxi (supermarkets)",name:"Maxi",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Mega Image":{name:"Mega Image",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q6808085"},addTags:{brand:"Mega Image","brand:wikidata":"Q6808085","brand:wikipedia":"en:Mega Image",name:"Mega Image",shop:"supermarket"},removeTags:{brand:"Mega Image","brand:wikidata":"Q6808085","brand:wikipedia":"en:Mega Image",name:"Mega Image",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Mego":{name:"Mego",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q16363314"},addTags:{brand:"Mego","brand:wikidata":"Q16363314","brand:wikipedia":"lv:Mego",name:"Mego",shop:"supermarket"},removeTags:{brand:"Mego","brand:wikidata":"Q16363314","brand:wikipedia":"lv:Mego",name:"Mego",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Meijer":{name:"Meijer",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q1917753"},addTags:{brand:"Meijer","brand:wikidata":"Q1917753","brand:wikipedia":"en:Meijer",name:"Meijer",shop:"supermarket"},removeTags:{brand:"Meijer","brand:wikidata":"Q1917753","brand:wikipedia":"en:Meijer",name:"Meijer",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Meny":{name:"Meny",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q10581720"},addTags:{brand:"Meny","brand:wikidata":"Q10581720","brand:wikipedia":"en:Meny",name:"Meny",shop:"supermarket"},removeTags:{brand:"Meny","brand:wikidata":"Q10581720","brand:wikipedia":"en:Meny",name:"Meny",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Mercadona":{name:"Mercadona",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q377705"},addTags:{brand:"Mercadona","brand:wikidata":"Q377705","brand:wikipedia":"en:Mercadona",name:"Mercadona",shop:"supermarket"},removeTags:{brand:"Mercadona","brand:wikidata":"Q377705","brand:wikipedia":"en:Mercadona",name:"Mercadona",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Merkur":{name:"Merkur",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q1921857"},addTags:{brand:"Merkur","brand:wikidata":"Q1921857","brand:wikipedia":"de:Merkur (Österreich)",name:"Merkur",shop:"supermarket"},removeTags:{brand:"Merkur","brand:wikidata":"Q1921857","brand:wikipedia":"de:Merkur (Österreich)",name:"Merkur",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Migros":{name:"Migros",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q680727"},addTags:{brand:"Migros","brand:wikidata":"Q680727","brand:wikipedia":"en:Migros",name:"Migros",shop:"supermarket"},removeTags:{brand:"Migros","brand:wikidata":"Q680727","brand:wikipedia":"en:Migros",name:"Migros",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Mila":{name:"Mila",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q48844636"},addTags:{brand:"Mila","brand:wikidata":"Q48844636","brand:wikipedia":"pl:Mila (sieć sklepów)",name:"Mila",shop:"supermarket"},removeTags:{brand:"Mila","brand:wikidata":"Q48844636","brand:wikipedia":"pl:Mila (sieć sklepów)",name:"Mila",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Minipreço":{name:"Minipreço",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q3042224"},addTags:{brand:"Minipreço","brand:wikidata":"Q3042224","brand:wikipedia":"en:Minipreço",name:"Minipreço",shop:"supermarket"},removeTags:{brand:"Minipreço","brand:wikidata":"Q3042224","brand:wikipedia":"en:Minipreço",name:"Minipreço",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Mix Markt":{name:"Mix Markt",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q327854"},addTags:{brand:"Mix Markt","brand:wikidata":"Q327854","brand:wikipedia":"de:Mix Markt",name:"Mix Markt",shop:"supermarket"},removeTags:{brand:"Mix Markt","brand:wikidata":"Q327854","brand:wikipedia":"de:Mix Markt",name:"Mix Markt",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Monoprix":{name:"Monoprix",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q3321241"},addTags:{brand:"Monoprix","brand:wikidata":"Q3321241","brand:wikipedia":"en:Monoprix",name:"Monoprix",shop:"supermarket"},removeTags:{brand:"Monoprix","brand:wikidata":"Q3321241","brand:wikipedia":"en:Monoprix",name:"Monoprix",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/More":{name:"More",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q6910891"},addTags:{brand:"More","brand:wikidata":"Q6910891","brand:wikipedia":"en:More (store)",name:"More",shop:"supermarket"},removeTags:{brand:"More","brand:wikidata":"Q6910891","brand:wikipedia":"en:More (store)",name:"More",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Morrisons":{name:"Morrisons",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q922344"},addTags:{brand:"Morrisons","brand:wikidata":"Q922344","brand:wikipedia":"en:Morrisons",name:"Morrisons",shop:"supermarket"},removeTags:{brand:"Morrisons","brand:wikidata":"Q922344","brand:wikipedia":"en:Morrisons",name:"Morrisons",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Nah & Frisch":{name:"Nah & Frisch",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q1963643"},addTags:{brand:"Nah & Frisch","brand:wikidata":"Q1963643","brand:wikipedia":"de:Nah & Frisch",name:"Nah & Frisch",shop:"supermarket"},removeTags:{brand:"Nah & Frisch","brand:wikidata":"Q1963643","brand:wikipedia":"de:Nah & Frisch",name:"Nah & Frisch",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Nahkauf":{name:"Nahkauf",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q57515238"},addTags:{brand:"Nahkauf","brand:wikidata":"Q57515238",name:"Nahkauf",shop:"supermarket"},removeTags:{brand:"Nahkauf","brand:wikidata":"Q57515238",name:"Nahkauf",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Naturalia":{name:"Naturalia",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q3337081"},addTags:{brand:"Naturalia","brand:wikidata":"Q3337081","brand:wikipedia":"fr:Naturalia",name:"Naturalia",shop:"supermarket"},removeTags:{brand:"Naturalia","brand:wikidata":"Q3337081","brand:wikipedia":"fr:Naturalia",name:"Naturalia",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Netto":{name:"Netto",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q552652"},addTags:{brand:"Netto","brand:wikidata":"Q552652","brand:wikipedia":"en:Netto (store)",name:"Netto",shop:"supermarket"},removeTags:{brand:"Netto","brand:wikidata":"Q552652","brand:wikipedia":"en:Netto (store)",name:"Netto",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Netto Marken-Discount":{name:"Netto Marken-Discount",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q879858"},addTags:{brand:"Netto Marken-Discount","brand:wikidata":"Q879858","brand:wikipedia":"en:Netto Marken-Discount",name:"Netto Marken-Discount",shop:"supermarket"},removeTags:{brand:"Netto Marken-Discount","brand:wikidata":"Q879858","brand:wikipedia":"en:Netto Marken-Discount",name:"Netto Marken-Discount",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/New World":{name:"New World",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q7012488"},addTags:{brand:"New World","brand:wikidata":"Q7012488","brand:wikipedia":"en:New World (supermarket)",name:"New World",shop:"supermarket"},removeTags:{brand:"New World","brand:wikidata":"Q7012488","brand:wikipedia":"en:New World (supermarket)",name:"New World",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/No Frills":{name:"No Frills",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q3342407"},addTags:{brand:"No Frills","brand:wikidata":"Q3342407","brand:wikipedia":"en:No Frills (grocery store)",name:"No Frills",shop:"supermarket"},removeTags:{brand:"No Frills","brand:wikidata":"Q3342407","brand:wikipedia":"en:No Frills (grocery store)",name:"No Frills",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Norfa XL":{name:"Norfa XL",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q1998983"},addTags:{brand:"Norfa XL","brand:wikidata":"Q1998983","brand:wikipedia":"lt:Norfa",name:"Norfa XL",shop:"supermarket"},removeTags:{brand:"Norfa XL","brand:wikidata":"Q1998983","brand:wikipedia":"lt:Norfa",name:"Norfa XL",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Norma":{name:"Norma",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q450180"},addTags:{brand:"Norma","brand:wikidata":"Q450180","brand:wikipedia":"de:Norma (Handelskette)",name:"Norma",shop:"supermarket"},removeTags:{brand:"Norma","brand:wikidata":"Q450180","brand:wikipedia":"de:Norma (Handelskette)",name:"Norma",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Okay":{name:"Okay",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q2159701"},addTags:{brand:"Okay","brand:wikidata":"Q2159701","brand:wikipedia":"fr:OKay",name:"Okay",shop:"supermarket"},removeTags:{brand:"Okay","brand:wikidata":"Q2159701","brand:wikipedia":"fr:OKay",name:"Okay",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Olímpica":{name:"Olímpica",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q24749847"},addTags:{brand:"Olímpica","brand:wikidata":"Q24749847","brand:wikipedia":"es:Olímpica (supermercado)",name:"Olímpica",shop:"supermarket"},removeTags:{brand:"Olímpica","brand:wikidata":"Q24749847","brand:wikipedia":"es:Olímpica (supermercado)",name:"Olímpica",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/PLUS":{name:"PLUS",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q1978981"},addTags:{brand:"PLUS","brand:wikidata":"Q1978981","brand:wikipedia":"nl:PLUS (Nederlandse supermarkt)",name:"PLUS",shop:"supermarket"},removeTags:{brand:"PLUS","brand:wikidata":"Q1978981","brand:wikipedia":"nl:PLUS (Nederlandse supermarkt)",name:"PLUS",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/POLOmarket":{name:"POLOmarket",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q11821937"},addTags:{brand:"POLOmarket","brand:wikidata":"Q11821937","brand:wikipedia":"en:Polomarket",name:"POLOmarket",shop:"supermarket"},removeTags:{brand:"POLOmarket","brand:wikidata":"Q11821937","brand:wikipedia":"en:Polomarket",name:"POLOmarket",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Palí":{name:"Palí",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q1064887"},addTags:{brand:"Palí","brand:wikidata":"Q1064887","brand:wikipedia":"es:Walmart de México y Centroamérica",name:"Palí",shop:"supermarket"},removeTags:{brand:"Palí","brand:wikidata":"Q1064887","brand:wikipedia":"es:Walmart de México y Centroamérica",name:"Palí",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Pam":{name:"Pam",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q3777398"},addTags:{brand:"Pam","brand:wikidata":"Q3777398","brand:wikipedia":"it:Gruppo PAM",name:"Pam",shop:"supermarket"},removeTags:{brand:"Pam","brand:wikidata":"Q3777398","brand:wikipedia":"it:Gruppo PAM",name:"Pam",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Pavilions":{name:"Pavilions",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q7155886"},addTags:{brand:"Pavilions","brand:wikidata":"Q7155886","brand:wikipedia":"en:Pavilions (supermarket)",name:"Pavilions",shop:"supermarket"},removeTags:{brand:"Pavilions","brand:wikidata":"Q7155886","brand:wikipedia":"en:Pavilions (supermarket)",name:"Pavilions",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Penny":{name:"Penny",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q284688"},addTags:{brand:"Penny","brand:wikidata":"Q284688","brand:wikipedia":"en:Penny (supermarket)",name:"Penny",shop:"supermarket"},removeTags:{brand:"Penny","brand:wikidata":"Q284688","brand:wikipedia":"en:Penny (supermarket)",name:"Penny",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Pick n Pay":{name:"Pick n Pay",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q7190735"},addTags:{brand:"Pick n Pay","brand:wikidata":"Q7190735","brand:wikipedia":"en:Pick n Pay Stores",name:"Pick n Pay",shop:"supermarket"},removeTags:{brand:"Pick n Pay","brand:wikidata":"Q7190735","brand:wikipedia":"en:Pick n Pay Stores",name:"Pick n Pay",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Piggly Wiggly":{name:"Piggly Wiggly",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q3388303"},addTags:{brand:"Piggly Wiggly","brand:wikidata":"Q3388303","brand:wikipedia":"en:Piggly Wiggly",name:"Piggly Wiggly",shop:"supermarket"},removeTags:{brand:"Piggly Wiggly","brand:wikidata":"Q3388303","brand:wikipedia":"en:Piggly Wiggly",name:"Piggly Wiggly",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Pingo Doce":{name:"Pingo Doce",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q1575057"},addTags:{brand:"Pingo Doce","brand:wikidata":"Q1575057","brand:wikipedia":"en:Pingo Doce",name:"Pingo Doce",shop:"supermarket"},removeTags:{brand:"Pingo Doce","brand:wikidata":"Q1575057","brand:wikipedia":"en:Pingo Doce",name:"Pingo Doce",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Piotr i Paweł":{name:"Piotr i Paweł",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q2096356"},addTags:{brand:"Piotr i Paweł","brand:wikidata":"Q2096356","brand:wikipedia":"en:Piotr i Paweł",name:"Piotr i Paweł",shop:"supermarket"},removeTags:{brand:"Piotr i Paweł","brand:wikidata":"Q2096356","brand:wikipedia":"en:Piotr i Paweł",name:"Piotr i Paweł",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Plaza Vea":{name:"Plaza Vea",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q7203672"},addTags:{brand:"Plaza Vea","brand:wikidata":"Q7203672","brand:wikipedia":"en:Plaza Vea",name:"Plaza Vea",shop:"supermarket"},removeTags:{brand:"Plaza Vea","brand:wikidata":"Q7203672","brand:wikipedia":"en:Plaza Vea",name:"Plaza Vea",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Plodine":{name:"Plodine",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q58040098"},addTags:{brand:"Plodine","brand:wikidata":"Q58040098",name:"Plodine",shop:"supermarket"},removeTags:{brand:"Plodine","brand:wikidata":"Q58040098",name:"Plodine",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Poiesz":{name:"Poiesz",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q2521700"},addTags:{brand:"Poiesz","brand:wikidata":"Q2521700","brand:wikipedia":"nl:Poiesz Supermarkten",name:"Poiesz",shop:"supermarket"},removeTags:{brand:"Poiesz","brand:wikidata":"Q2521700","brand:wikipedia":"nl:Poiesz Supermarkten",name:"Poiesz",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Price Chopper (Kansas City)":{name:"Price Chopper (Kansas City)",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q7242572"},addTags:{brand:"Price Chopper","brand:wikidata":"Q7242572","brand:wikipedia":"en:Price Chopper (supermarket)",name:"Price Chopper",shop:"supermarket"},removeTags:{brand:"Price Chopper","brand:wikidata":"Q7242572","brand:wikipedia":"en:Price Chopper (supermarket)",name:"Price Chopper",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Price Chopper (New York)":{name:"Price Chopper (New York)",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q7242574"},addTags:{brand:"Price Chopper","brand:wikidata":"Q7242574","brand:wikipedia":"en:Price Chopper Supermarkets",name:"Price Chopper",shop:"supermarket"},removeTags:{brand:"Price Chopper","brand:wikidata":"Q7242574","brand:wikipedia":"en:Price Chopper Supermarkets",name:"Price Chopper",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Profi":{name:"Profi",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q956664"},addTags:{brand:"Profi","brand:wikidata":"Q956664","brand:wikipedia":"en:Profi",name:"Profi",shop:"supermarket"},removeTags:{brand:"Profi","brand:wikidata":"Q956664","brand:wikipedia":"en:Profi",name:"Profi",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Provigo":{name:"Provigo",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q3408306"},addTags:{brand:"Provigo","brand:wikidata":"Q3408306","brand:wikipedia":"en:Provigo",name:"Provigo",shop:"supermarket"},removeTags:{brand:"Provigo","brand:wikidata":"Q3408306","brand:wikipedia":"en:Provigo",name:"Provigo",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Proxi":{name:"Proxi",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q3408522"},addTags:{brand:"Proxi","brand:wikidata":"Q3408522","brand:wikipedia":"fr:Proxi",name:"Proxi",shop:"supermarket"},removeTags:{brand:"Proxi","brand:wikidata":"Q3408522","brand:wikipedia":"fr:Proxi",name:"Proxi",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Proxy Delhaize":{name:"Proxy Delhaize",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q14903417"},addTags:{brand:"Proxy Delhaize","brand:wikidata":"Q14903417","brand:wikipedia":"en:Delhaize Group",name:"Proxy Delhaize",shop:"supermarket"},removeTags:{brand:"Proxy Delhaize","brand:wikidata":"Q14903417","brand:wikipedia":"en:Delhaize Group",name:"Proxy Delhaize",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Publix":{name:"Publix",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q672170"},addTags:{brand:"Publix","brand:wikidata":"Q672170","brand:wikipedia":"en:Publix",name:"Publix",shop:"supermarket"},removeTags:{brand:"Publix","brand:wikidata":"Q672170","brand:wikipedia":"en:Publix",name:"Publix",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Punto Simply":{name:"Punto Simply",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q3484790"},addTags:{brand:"Punto Simply","brand:wikidata":"Q3484790","brand:wikipedia":"it:Simply Market",name:"Punto Simply",shop:"supermarket"},removeTags:{brand:"Punto Simply","brand:wikidata":"Q3484790","brand:wikipedia":"it:Simply Market",name:"Punto Simply",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Puregold":{name:"Puregold",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q7261170"},addTags:{brand:"Puregold","brand:wikidata":"Q7261170","brand:wikipedia":"en:Puregold",name:"Puregold",shop:"supermarket"},removeTags:{brand:"Puregold","brand:wikidata":"Q7261170","brand:wikipedia":"en:Puregold",name:"Puregold",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Pão de Açúcar":{name:"Pão de Açúcar",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q3411543"},addTags:{brand:"Pão de Açúcar","brand:wikidata":"Q3411543","brand:wikipedia":"pt:Pão de Açúcar (supermercado brasileiro)",name:"Pão de Açúcar",shop:"supermarket"},removeTags:{brand:"Pão de Açúcar","brand:wikidata":"Q3411543","brand:wikipedia":"pt:Pão de Açúcar (supermercado brasileiro)",name:"Pão de Açúcar",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/QFC":{name:"QFC",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q7265425"},addTags:{brand:"QFC","brand:wikidata":"Q7265425","brand:wikipedia":"en:QFC",name:"QFC",shop:"supermarket"},removeTags:{brand:"QFC","brand:wikidata":"Q7265425","brand:wikipedia":"en:QFC",name:"QFC",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Ralphs":{name:"Ralphs",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q3929820"},addTags:{brand:"Ralphs","brand:wikidata":"Q3929820","brand:wikipedia":"en:Ralphs",name:"Ralphs",shop:"supermarket"},removeTags:{brand:"Ralphs","brand:wikidata":"Q3929820","brand:wikipedia":"en:Ralphs",name:"Ralphs",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Real":{name:"Real",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q698473"},addTags:{brand:"Real","brand:wikidata":"Q698473","brand:wikipedia":"en:Real (hypermarket)",name:"Real",shop:"supermarket"},removeTags:{brand:"Real","brand:wikidata":"Q698473","brand:wikipedia":"en:Real (hypermarket)",name:"Real",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Real Canadian Superstore":{name:"Real Canadian Superstore",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q7300856"},addTags:{brand:"Real Canadian Superstore","brand:wikidata":"Q7300856","brand:wikipedia":"en:Real Canadian Superstore",name:"Real Canadian Superstore",shop:"supermarket"},removeTags:{brand:"Real Canadian Superstore","brand:wikidata":"Q7300856","brand:wikipedia":"en:Real Canadian Superstore",name:"Real Canadian Superstore",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Redner's Markets":{name:"Redner's Markets",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q7306166"},addTags:{brand:"Redner's Markets","brand:wikidata":"Q7306166","brand:wikipedia":"en:Redner's Markets",name:"Redner's Markets",shop:"supermarket"},removeTags:{brand:"Redner's Markets","brand:wikidata":"Q7306166","brand:wikipedia":"en:Redner's Markets",name:"Redner's Markets",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Reliance Fresh":{name:"Reliance Fresh",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q7311014"},addTags:{brand:"Reliance Fresh","brand:wikidata":"Q7311014","brand:wikipedia":"en:Reliance Fresh",name:"Reliance Fresh",shop:"supermarket"},removeTags:{brand:"Reliance Fresh","brand:wikidata":"Q7311014","brand:wikipedia":"en:Reliance Fresh",name:"Reliance Fresh",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Rema 1000":{name:"Rema 1000",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q28459"},addTags:{brand:"Rema 1000","brand:wikidata":"Q28459","brand:wikipedia":"en:REMA 1000",name:"Rema 1000",shop:"supermarket"},removeTags:{brand:"Rema 1000","brand:wikidata":"Q28459","brand:wikipedia":"en:REMA 1000",name:"Rema 1000",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Rewe":{name:"Rewe",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q16968817"},addTags:{brand:"Rewe","brand:wikidata":"Q16968817","brand:wikipedia":"en:REWE",name:"Rewe",shop:"supermarket"},removeTags:{brand:"Rewe","brand:wikidata":"Q16968817","brand:wikipedia":"en:REWE",name:"Rewe",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Rewe City":{name:"Rewe City",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q16968817"},addTags:{brand:"Rewe City","brand:wikidata":"Q16968817","brand:wikipedia":"en:REWE",name:"Rewe City",shop:"supermarket"},removeTags:{brand:"Rewe City","brand:wikidata":"Q16968817","brand:wikipedia":"en:REWE",name:"Rewe City",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Rimi":{name:"Rimi",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q7334456"},addTags:{brand:"Rimi","brand:wikidata":"Q7334456","brand:wikipedia":"en:Rimi (Norway)",name:"Rimi",shop:"supermarket"},removeTags:{brand:"Rimi","brand:wikidata":"Q7334456","brand:wikipedia":"en:Rimi (Norway)",name:"Rimi",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/S-Market":{name:"S-Market",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q11891613"},addTags:{brand:"S-Market","brand:wikidata":"Q11891613","brand:wikipedia":"fi:S-market",name:"S-Market",shop:"supermarket"},removeTags:{brand:"S-Market","brand:wikidata":"Q11891613","brand:wikipedia":"fi:S-market",name:"S-Market",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Safeway":{name:"Safeway",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q1508234"},addTags:{brand:"Safeway","brand:wikidata":"Q1508234","brand:wikipedia":"en:Safeway Inc.",name:"Safeway",shop:"supermarket"},removeTags:{brand:"Safeway","brand:wikidata":"Q1508234","brand:wikipedia":"en:Safeway Inc.",name:"Safeway",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Sainsbury's":{name:"Sainsbury's",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q152096"},addTags:{brand:"Sainsbury's","brand:wikidata":"Q152096","brand:wikipedia":"en:Sainsbury's",name:"Sainsbury's",shop:"supermarket"},removeTags:{brand:"Sainsbury's","brand:wikidata":"Q152096","brand:wikipedia":"en:Sainsbury's",name:"Sainsbury's",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Santa Isabel":{name:"Santa Isabel",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q7419620"},addTags:{brand:"Santa Isabel","brand:wikidata":"Q7419620","brand:wikipedia":"es:Santa Isabel (supermercado)",name:"Santa Isabel",shop:"supermarket"},removeTags:{brand:"Santa Isabel","brand:wikidata":"Q7419620","brand:wikipedia":"es:Santa Isabel (supermercado)",name:"Santa Isabel",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Save-A-Lot":{name:"Save-A-Lot",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q7427972"},addTags:{brand:"Save-A-Lot","brand:wikidata":"Q7427972","brand:wikipedia":"en:Save-A-Lot",name:"Save-A-Lot",shop:"supermarket"},removeTags:{brand:"Save-A-Lot","brand:wikidata":"Q7427972","brand:wikipedia":"en:Save-A-Lot",name:"Save-A-Lot",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Schnucks":{name:"Schnucks",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q7431920"},addTags:{brand:"Schnucks","brand:wikidata":"Q7431920","brand:wikipedia":"en:Schnucks",name:"Schnucks",shop:"supermarket"},removeTags:{brand:"Schnucks","brand:wikidata":"Q7431920","brand:wikipedia":"en:Schnucks",name:"Schnucks",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Shaw's":{name:"Shaw's",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q578387"},addTags:{brand:"Shaw's","brand:wikidata":"Q578387","brand:wikipedia":"en:Shaw's and Star Market",name:"Shaw's",shop:"supermarket"},removeTags:{brand:"Shaw's","brand:wikidata":"Q578387","brand:wikipedia":"en:Shaw's and Star Market",name:"Shaw's",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/ShopRite":{name:"ShopRite",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q7501097"},addTags:{brand:"ShopRite","brand:wikidata":"Q7501097","brand:wikipedia":"en:ShopRite (United States)",name:"ShopRite",shop:"supermarket"},removeTags:{brand:"ShopRite","brand:wikidata":"Q7501097","brand:wikipedia":"en:ShopRite (United States)",name:"ShopRite",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Shoprite":{name:"Shoprite",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q1857639"},addTags:{brand:"Shoprite","brand:wikidata":"Q1857639","brand:wikipedia":"en:ShopRite (South Africa)",name:"Shoprite",shop:"supermarket"},removeTags:{brand:"Shoprite","brand:wikidata":"Q1857639","brand:wikipedia":"en:ShopRite (South Africa)",name:"Shoprite",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Sigma":{name:"Sigma",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q3977979"},addTags:{brand:"Sigma","brand:wikidata":"Q3977979","brand:wikipedia":"it:Supermercati Sigma",name:"Sigma",shop:"supermarket"},removeTags:{brand:"Sigma","brand:wikidata":"Q3977979","brand:wikipedia":"it:Supermercati Sigma",name:"Sigma",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Simply Market":{name:"Simply Market",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q3484790"},addTags:{brand:"Simply Market","brand:wikidata":"Q3484790","brand:wikipedia":"en:Simply Market",name:"Simply Market",shop:"supermarket"},removeTags:{brand:"Simply Market","brand:wikidata":"Q3484790","brand:wikipedia":"en:Simply Market",name:"Simply Market",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Sky":{name:"Sky",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q1129779"},addTags:{name:"Sky",brand:"Sky","brand:wikipedia":"de:Coop eG","brand:wikidata":"Q1129779",shop:"supermarket"},removeTags:{name:"Sky",brand:"Sky","brand:wikipedia":"de:Coop eG","brand:wikidata":"Q1129779",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Smith's":{name:"Smith's",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q7544856"},addTags:{brand:"Smith's","brand:wikidata":"Q7544856","brand:wikipedia":"en:Smith's Food and Drug",name:"Smith's",shop:"supermarket"},removeTags:{brand:"Smith's","brand:wikidata":"Q7544856","brand:wikipedia":"en:Smith's Food and Drug",name:"Smith's",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Sobeys":{name:"Sobeys",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q1143340"},addTags:{brand:"Sobeys","brand:wikidata":"Q1143340","brand:wikipedia":"en:Sobeys",name:"Sobeys",shop:"supermarket"},removeTags:{brand:"Sobeys","brand:wikidata":"Q1143340","brand:wikipedia":"en:Sobeys",name:"Sobeys",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Soriana":{name:"Soriana",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q735562"},addTags:{brand:"Soriana","brand:wikidata":"Q735562","brand:wikipedia":"en:Soriana",name:"Soriana",shop:"supermarket"},removeTags:{brand:"Soriana","brand:wikidata":"Q735562","brand:wikipedia":"en:Soriana",name:"Soriana",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Sprouts Farmers Market":{name:"Sprouts Farmers Market",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q7581369"},addTags:{brand:"Sprouts Farmers Market","brand:wikidata":"Q7581369","brand:wikipedia":"en:Sprouts Farmers Market",name:"Sprouts Farmers Market",shop:"supermarket"},removeTags:{brand:"Sprouts Farmers Market","brand:wikidata":"Q7581369","brand:wikipedia":"en:Sprouts Farmers Market",name:"Sprouts Farmers Market",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Stater Bros.":{name:"Stater Bros.",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q7604016"},addTags:{brand:"Stater Bros.","brand:wikidata":"Q7604016","brand:wikipedia":"en:Stater Bros.",name:"Stater Bros.",shop:"supermarket"},removeTags:{brand:"Stater Bros.","brand:wikidata":"Q7604016","brand:wikipedia":"en:Stater Bros.",name:"Stater Bros.",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Stokrotka":{name:"Stokrotka",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q9345945"},addTags:{brand:"Stokrotka","brand:wikidata":"Q9345945","brand:wikipedia":"en:Stokrotka",name:"Stokrotka",shop:"supermarket"},removeTags:{brand:"Stokrotka","brand:wikidata":"Q9345945","brand:wikipedia":"en:Stokrotka",name:"Stokrotka",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Stop & Shop":{name:"Stop & Shop",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q3658429"},addTags:{brand:"Stop & Shop","brand:wikidata":"Q3658429","brand:wikipedia":"en:Stop & Shop",name:"Stop & Shop",shop:"supermarket"},removeTags:{brand:"Stop & Shop","brand:wikidata":"Q3658429","brand:wikipedia":"en:Stop & Shop",name:"Stop & Shop",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Suma":{name:"Suma",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q58012362"},addTags:{brand:"Suma","brand:wikidata":"Q58012362",name:"Suma",shop:"supermarket"},removeTags:{brand:"Suma","brand:wikidata":"Q58012362",name:"Suma",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Super C":{name:"Super C",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q3504127"},addTags:{brand:"Super C","brand:wikidata":"Q3504127","brand:wikipedia":"en:Super C (supermarket)",name:"Super C",shop:"supermarket"},removeTags:{brand:"Super C","brand:wikidata":"Q3504127","brand:wikipedia":"en:Super C (supermarket)",name:"Super C",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Super U":{name:"Super U",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q2529029"},addTags:{brand:"Super U","brand:wikidata":"Q2529029","brand:wikipedia":"en:Système U",name:"Super U",shop:"supermarket"},removeTags:{brand:"Super U","brand:wikidata":"Q2529029","brand:wikipedia":"en:Système U",name:"Super U",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/SuperBrugsen":{name:"SuperBrugsen",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q12337746"},addTags:{brand:"SuperBrugsen","brand:wikidata":"Q12337746","brand:wikipedia":"en:SuperBrugsen",name:"SuperBrugsen",shop:"supermarket"},removeTags:{brand:"SuperBrugsen","brand:wikidata":"Q12337746","brand:wikipedia":"en:SuperBrugsen",name:"SuperBrugsen",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/SuperValu":{name:"SuperValu",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q7642081"},addTags:{brand:"SuperValu","brand:wikidata":"Q7642081","brand:wikipedia":"en:SuperValu (Ireland)`",name:"SuperValu",shop:"supermarket"},removeTags:{brand:"SuperValu","brand:wikidata":"Q7642081","brand:wikipedia":"en:SuperValu (Ireland)`",name:"SuperValu",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Superama":{name:"Superama",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q6135762"},addTags:{brand:"Superama","brand:wikidata":"Q6135762","brand:wikipedia":"es:Superama",name:"Superama",shop:"supermarket"},removeTags:{brand:"Superama","brand:wikidata":"Q6135762","brand:wikipedia":"es:Superama",name:"Superama",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Superspar":{name:"Superspar",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q610492"},addTags:{brand:"Superspar","brand:wikidata":"Q610492","brand:wikipedia":"en:Spar (retailer)",name:"Superspar",shop:"supermarket"},removeTags:{brand:"Superspar","brand:wikidata":"Q610492","brand:wikipedia":"en:Spar (retailer)",name:"Superspar",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Tegut":{name:"Tegut",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q1547993"},addTags:{brand:"Tegut","brand:wikidata":"Q1547993","brand:wikipedia":"en:Tegut",name:"Tegut",shop:"supermarket"},removeTags:{brand:"Tegut","brand:wikidata":"Q1547993","brand:wikipedia":"en:Tegut",name:"Tegut",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Tesco":{name:"Tesco",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q487494"},addTags:{brand:"Tesco","brand:wikidata":"Q487494","brand:wikipedia":"en:Tesco",name:"Tesco",shop:"supermarket"},removeTags:{brand:"Tesco","brand:wikidata":"Q487494","brand:wikipedia":"en:Tesco",name:"Tesco",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Tesco Express":{name:"Tesco Express",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q487494"},addTags:{brand:"Tesco Express","brand:wikidata":"Q487494","brand:wikipedia":"en:Tesco",name:"Tesco Express",shop:"supermarket"},removeTags:{brand:"Tesco Express","brand:wikidata":"Q487494","brand:wikipedia":"en:Tesco",name:"Tesco Express",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Tesco Extra":{name:"Tesco Extra",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q25172225"},addTags:{brand:"Tesco Extra","brand:wikidata":"Q25172225","brand:wikipedia":"en:Tesco Extra",name:"Tesco Extra",shop:"supermarket"},removeTags:{brand:"Tesco Extra","brand:wikidata":"Q25172225","brand:wikipedia":"en:Tesco Extra",name:"Tesco Extra",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Tesco Metro":{name:"Tesco Metro",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q57551648"},addTags:{brand:"Tesco Metro","brand:wikidata":"Q57551648",name:"Tesco Metro",shop:"supermarket"},removeTags:{brand:"Tesco Metro","brand:wikidata":"Q57551648",name:"Tesco Metro",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/The Co-operative Food":{name:"The Co-operative Food",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q3277439"},addTags:{brand:"The Co-operative Food","brand:wikidata":"Q3277439","brand:wikipedia":"en:Co-op Food",name:"The Co-operative Food",shop:"supermarket"},removeTags:{brand:"The Co-operative Food","brand:wikidata":"Q3277439","brand:wikipedia":"en:Co-op Food",name:"The Co-operative Food",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/The Fresh Market":{name:"The Fresh Market",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q7735265"},addTags:{brand:"The Fresh Market","brand:wikidata":"Q7735265","brand:wikipedia":"en:The Fresh Market",name:"The Fresh Market",shop:"supermarket"},removeTags:{brand:"The Fresh Market","brand:wikidata":"Q7735265","brand:wikipedia":"en:The Fresh Market",name:"The Fresh Market",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Todis":{name:"Todis",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q3992174"},addTags:{brand:"Todis","brand:wikidata":"Q3992174","brand:wikipedia":"it:Todis",name:"Todis",shop:"supermarket"},removeTags:{brand:"Todis","brand:wikidata":"Q3992174","brand:wikipedia":"it:Todis",name:"Todis",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Tommy":{name:"Tommy",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q12643718"},addTags:{brand:"Tommy","brand:wikidata":"Q12643718","brand:wikipedia":"hr:Tommy",name:"Tommy",shop:"supermarket"},removeTags:{brand:"Tommy","brand:wikidata":"Q12643718","brand:wikipedia":"hr:Tommy",name:"Tommy",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Tops":{name:"Tops",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q7825137"},addTags:{brand:"Tops","brand:wikidata":"Q7825137","brand:wikipedia":"en:Tops Friendly Markets",name:"Tops",shop:"supermarket"},removeTags:{brand:"Tops","brand:wikidata":"Q7825137","brand:wikipedia":"en:Tops Friendly Markets",name:"Tops",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Tottus":{name:"Tottus",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q7828510"},addTags:{brand:"Tottus","brand:wikidata":"Q7828510","brand:wikipedia":"en:Tottus",name:"Tottus",shop:"supermarket"},removeTags:{brand:"Tottus","brand:wikidata":"Q7828510","brand:wikipedia":"en:Tottus",name:"Tottus",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Trader Joe's":{name:"Trader Joe's",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q688825"},addTags:{brand:"Trader Joe's","brand:wikidata":"Q688825","brand:wikipedia":"en:Trader Joe's",name:"Trader Joe's",shop:"supermarket"},removeTags:{brand:"Trader Joe's","brand:wikidata":"Q688825","brand:wikipedia":"en:Trader Joe's",name:"Trader Joe's",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Treff 3000":{name:"Treff 3000",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q701755"},addTags:{brand:"Treff 3000","brand:wikidata":"Q701755","brand:wikipedia":"de:Edeka",name:"Treff 3000",shop:"supermarket"},removeTags:{brand:"Treff 3000","brand:wikidata":"Q701755","brand:wikipedia":"de:Edeka",name:"Treff 3000",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/U Express":{name:"U Express",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q2529029"},addTags:{brand:"U Express","brand:wikidata":"Q2529029","brand:wikipedia":"en:Système U",name:"U Express",shop:"supermarket"},removeTags:{brand:"U Express","brand:wikidata":"Q2529029","brand:wikipedia":"en:Système U",name:"U Express",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Unimarc":{name:"Unimarc",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q6156244"},addTags:{brand:"Unimarc","brand:wikidata":"Q6156244","brand:wikipedia":"es:Unimarc",name:"Unimarc",shop:"supermarket"},removeTags:{brand:"Unimarc","brand:wikidata":"Q6156244","brand:wikipedia":"es:Unimarc",name:"Unimarc",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Unimarkt":{name:"Unimarkt",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q1169599"},addTags:{brand:"Unimarkt","brand:wikidata":"Q1169599","brand:wikipedia":"de:Unimarkt",name:"Unimarkt",shop:"supermarket"},removeTags:{brand:"Unimarkt","brand:wikidata":"Q1169599","brand:wikipedia":"de:Unimarkt",name:"Unimarkt",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Vea":{name:"Vea",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q5858167"},addTags:{brand:"Vea","brand:wikidata":"Q5858167","brand:wikipedia":"es:Vea (supermercado)",name:"Vea",shop:"supermarket"},removeTags:{brand:"Vea","brand:wikidata":"Q5858167","brand:wikipedia":"es:Vea (supermercado)",name:"Vea",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/VinMart":{name:"VinMart",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q60245505"},addTags:{brand:"VinMart","brand:wikidata":"Q60245505","brand:wikipedia":"vi:VinMart",name:"VinMart",shop:"supermarket"},removeTags:{brand:"VinMart","brand:wikidata":"Q60245505","brand:wikipedia":"vi:VinMart",name:"VinMart",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Vons":{name:"Vons",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q7941609"},addTags:{brand:"Vons","brand:wikidata":"Q7941609","brand:wikipedia":"en:Vons",name:"Vons",shop:"supermarket"},removeTags:{brand:"Vons","brand:wikidata":"Q7941609","brand:wikipedia":"en:Vons",name:"Vons",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Waitrose":{name:"Waitrose",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q771734"},addTags:{brand:"Waitrose","brand:wikidata":"Q771734","brand:wikipedia":"en:Waitrose",name:"Waitrose",shop:"supermarket"},removeTags:{brand:"Waitrose","brand:wikidata":"Q771734","brand:wikipedia":"en:Waitrose",name:"Waitrose",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Walmart Neighborhood Market":{name:"Walmart Neighborhood Market",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q483551"},addTags:{brand:"Walmart","brand:wikidata":"Q483551","brand:wikipedia":"en:Walmart",name:"Walmart Neighborhood Market",operator:"Walmart","operator:wikidata":"Q483551","operator:wikipedia":"en:Walmart",shop:"supermarket"},removeTags:{brand:"Walmart","brand:wikidata":"Q483551","brand:wikipedia":"en:Walmart",name:"Walmart Neighborhood Market",operator:"Walmart","operator:wikidata":"Q483551","operator:wikipedia":"en:Walmart",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Walmart Supercenter":{name:"Walmart Supercenter",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q483551"},addTags:{brand:"Walmart","brand:wikidata":"Q483551","brand:wikipedia":"en:Walmart",name:"Walmart Supercenter",operator:"Walmart","operator:wikidata":"Q483551","operator:wikipedia":"en:Walmart",shop:"supermarket"},removeTags:{brand:"Walmart","brand:wikidata":"Q483551","brand:wikipedia":"en:Walmart",name:"Walmart Supercenter",operator:"Walmart","operator:wikidata":"Q483551","operator:wikipedia":"en:Walmart",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Wasgau":{name:"Wasgau",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q2536857"},addTags:{brand:"Wasgau","brand:wikidata":"Q2536857","brand:wikipedia":"de:Wasgau (Unternehmen)",name:"Wasgau",shop:"supermarket"},removeTags:{brand:"Wasgau","brand:wikidata":"Q2536857","brand:wikipedia":"de:Wasgau (Unternehmen)",name:"Wasgau",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Wegmans":{name:"Wegmans",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q11288478"},addTags:{brand:"Wegmans","brand:wikidata":"Q11288478","brand:wikipedia":"en:Wegmans",name:"Wegmans",shop:"supermarket"},removeTags:{brand:"Wegmans","brand:wikidata":"Q11288478","brand:wikipedia":"en:Wegmans",name:"Wegmans",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Weis":{name:"Weis",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q7980370"},addTags:{brand:"Weis","brand:wikidata":"Q7980370","brand:wikipedia":"en:Weis Markets",name:"Weis",shop:"supermarket"},removeTags:{brand:"Weis","brand:wikidata":"Q7980370","brand:wikipedia":"en:Weis Markets",name:"Weis",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Whole Foods Market":{name:"Whole Foods Market",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q1809448"},addTags:{brand:"Whole Foods Market","brand:wikidata":"Q1809448","brand:wikipedia":"en:Whole Foods Market",name:"Whole Foods Market",shop:"supermarket"},removeTags:{brand:"Whole Foods Market","brand:wikidata":"Q1809448","brand:wikipedia":"en:Whole Foods Market",name:"Whole Foods Market",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Willys":{name:"Willys",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q10720214"},addTags:{brand:"Willys","brand:wikidata":"Q10720214","brand:wikipedia":"sv:Willys",name:"Willys",shop:"supermarket"},removeTags:{brand:"Willys","brand:wikidata":"Q10720214","brand:wikipedia":"sv:Willys",name:"Willys",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/WinCo Foods":{name:"WinCo Foods",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q8023592"},addTags:{brand:"WinCo Foods","brand:wikidata":"Q8023592","brand:wikipedia":"en:WinCo Foods",name:"WinCo Foods",shop:"supermarket"},removeTags:{brand:"WinCo Foods","brand:wikidata":"Q8023592","brand:wikipedia":"en:WinCo Foods",name:"WinCo Foods",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Winn Dixie":{name:"Winn Dixie",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q1264366"},addTags:{brand:"Winn Dixie","brand:wikidata":"Q1264366","brand:wikipedia":"en:Winn-Dixie",name:"Winn Dixie",shop:"supermarket"},removeTags:{brand:"Winn Dixie","brand:wikidata":"Q1264366","brand:wikipedia":"en:Winn-Dixie",name:"Winn Dixie",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Woolworths":{name:"Woolworths",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q3249145"},addTags:{brand:"Woolworths","brand:wikidata":"Q3249145","brand:wikipedia":"en:Woolworths Supermarkets",name:"Woolworths",shop:"supermarket"},removeTags:{brand:"Woolworths","brand:wikidata":"Q3249145","brand:wikipedia":"en:Woolworths Supermarkets",name:"Woolworths",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/denn's Biomarkt":{name:"denn's Biomarkt",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q48883773"},addTags:{brand:"denn's Biomarkt","brand:wikidata":"Q48883773","brand:wikipedia":"de:Dennree",name:"denn's Biomarkt",shop:"supermarket"},removeTags:{brand:"denn's Biomarkt","brand:wikidata":"Q48883773","brand:wikipedia":"de:Dennree",name:"denn's Biomarkt",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/fakta":{name:"fakta",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q3172238"},addTags:{brand:"fakta","brand:wikidata":"Q3172238","brand:wikipedia":"en:Fakta",name:"fakta",shop:"supermarket"},removeTags:{brand:"fakta","brand:wikidata":"Q3172238","brand:wikipedia":"en:Fakta",name:"fakta",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Şok":{name:"Şok",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q19613992"},addTags:{brand:"Şok","brand:wikidata":"Q19613992","brand:wikipedia":"tr:Şok (market)",name:"Şok",shop:"supermarket"},removeTags:{brand:"Şok","brand:wikidata":"Q19613992","brand:wikipedia":"tr:Şok (market)",name:"Şok",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/ΑΒ Βασιλόπουλος":{name:"ΑΒ Βασιλόπουλος",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q4721807"},addTags:{brand:"ΑΒ Βασιλόπουλος","brand:en":"AB Vassilopoulos","brand:wikidata":"Q4721807","brand:wikipedia":"el:Άλφα Βήτα Βασιλόπουλος",name:"ΑΒ Βασιλόπουλος","name:en":"AB Vassilopoulos",shop:"supermarket"},removeTags:{brand:"ΑΒ Βασιλόπουλος","brand:en":"AB Vassilopoulos","brand:wikidata":"Q4721807","brand:wikipedia":"el:Άλφα Βήτα Βασιλόπουλος",name:"ΑΒ Βασιλόπουλος","name:en":"AB Vassilopoulos",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Γαλαξίας":{name:"Γαλαξίας",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q5518063"},addTags:{brand:"Γαλαξίας","brand:en":"Galaxias","brand:wikidata":"Q5518063","brand:wikipedia":"el:Γαλαξίας (σούπερ μάρκετ)",name:"Γαλαξίας","name:en":"Galaxias",shop:"supermarket"},removeTags:{brand:"Γαλαξίας","brand:en":"Galaxias","brand:wikidata":"Q5518063","brand:wikipedia":"el:Γαλαξίας (σούπερ μάρκετ)",name:"Γαλαξίας","name:en":"Galaxias",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Μασούτης":{name:"Μασούτης",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q6783887"},addTags:{brand:"Μασούτης","brand:en":"Masoutis","brand:wikidata":"Q6783887","brand:wikipedia":"en:Masoutis",name:"Μασούτης","name:en":"Masoutis",shop:"supermarket"},removeTags:{brand:"Μασούτης","brand:en":"Masoutis","brand:wikidata":"Q6783887","brand:wikipedia":"en:Masoutis",name:"Μασούτης","name:en":"Masoutis",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Σκλαβενίτης":{name:"Σκλαβενίτης",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q7536037"},addTags:{brand:"Σκλαβενίτης","brand:en":"Sklavenitis","brand:wikidata":"Q7536037","brand:wikipedia":"el:Σκλαβενίτης",name:"Σκλαβενίτης","name:en":"Sklavenitis",shop:"supermarket"},removeTags:{brand:"Σκλαβενίτης","brand:en":"Sklavenitis","brand:wikidata":"Q7536037","brand:wikipedia":"el:Σκλαβενίτης",name:"Σκλαβενίτης","name:en":"Sklavenitis",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Азбука Вкуса":{name:"Азбука Вкуса",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q4058209"},addTags:{brand:"Азбука Вкуса","brand:en":"Azbuka Vkusa","brand:wikidata":"Q4058209","brand:wikipedia":"en:Azbuka Vkusa",name:"Азбука Вкуса","name:en":"Azbuka Vkusa",shop:"supermarket"},removeTags:{brand:"Азбука Вкуса","brand:en":"Azbuka Vkusa","brand:wikidata":"Q4058209","brand:wikipedia":"en:Azbuka Vkusa",name:"Азбука Вкуса","name:en":"Azbuka Vkusa",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Атак":{name:"Атак",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q2868738"},addTags:{brand:"Атак","brand:en":"Atac","brand:wikidata":"Q2868738","brand:wikipedia":"ru:Atac",name:"Атак","name:en":"Atac",shop:"supermarket"},removeTags:{brand:"Атак","brand:en":"Atac","brand:wikidata":"Q2868738","brand:wikipedia":"ru:Atac",name:"Атак","name:en":"Atac",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Ашан":{name:"Ашан",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q758603"},addTags:{brand:"Ашан","brand:en":"Auchan","brand:wikidata":"Q758603","brand:wikipedia":"ru:Auchan",name:"Ашан","name:en":"Auchan",shop:"supermarket"},removeTags:{brand:"Ашан","brand:en":"Auchan","brand:wikidata":"Q758603","brand:wikipedia":"ru:Auchan",name:"Ашан","name:en":"Auchan",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Брусничка":{name:"Брусничка",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q21656645"},addTags:{brand:"Брусничка","brand:en":"Brusnichka","brand:wikidata":"Q21656645","brand:wikipedia":"uk:Брусничка (торгова мережа)",name:"Брусничка","name:en":"Brusnichka",shop:"supermarket"},removeTags:{brand:"Брусничка","brand:en":"Brusnichka","brand:wikidata":"Q21656645","brand:wikipedia":"uk:Брусничка (торгова мережа)",name:"Брусничка","name:en":"Brusnichka",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Виктория":{name:"Виктория",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q4111046"},addTags:{brand:"Виктория","brand:wikidata":"Q4111046","brand:wikipedia":"ru:Виктория (сеть магазинов)",name:"Виктория",shop:"supermarket"},removeTags:{brand:"Виктория","brand:wikidata":"Q4111046","brand:wikipedia":"ru:Виктория (сеть магазинов)",name:"Виктория",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Вопак":{name:"Вопак",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q30966107"},addTags:{brand:"Вопак","brand:en":"Vopak","brand:wikidata":"Q30966107","brand:wikipedia":"uk:Вопак",name:"Вопак","name:en":"Vopak",shop:"supermarket"},removeTags:{brand:"Вопак","brand:en":"Vopak","brand:wikidata":"Q30966107","brand:wikipedia":"uk:Вопак",name:"Вопак","name:en":"Vopak",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Гулливер":{name:"Гулливер",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q58003470"},addTags:{brand:"Гулливер","brand:wikidata":"Q58003470",name:"Гулливер",shop:"supermarket"},removeTags:{brand:"Гулливер","brand:wikidata":"Q58003470",name:"Гулливер",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Дикси":{name:"Дикси",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q4161561"},addTags:{brand:"Дикси","brand:en":"Dixy","brand:wikidata":"Q4161561","brand:wikipedia":"ru:Дикси (сеть магазинов)",name:"Дикси",shop:"supermarket"},removeTags:{brand:"Дикси","brand:en":"Dixy","brand:wikidata":"Q4161561","brand:wikipedia":"ru:Дикси (сеть магазинов)",name:"Дикси",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Карусель":{name:"Карусель",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q4216307"},addTags:{brand:"Карусель","brand:en":"Karusel","brand:wikidata":"Q4216307","brand:wikipedia":"ru:Карусель (сеть магазинов)",name:"Карусель","name:en":"Karusel",shop:"supermarket"},removeTags:{brand:"Карусель","brand:en":"Karusel","brand:wikidata":"Q4216307","brand:wikipedia":"ru:Карусель (сеть магазинов)",name:"Карусель","name:en":"Karusel",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Лента":{name:"Лента",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q4258608"},addTags:{brand:"Лента","brand:en":"Lenta","brand:wikidata":"Q4258608","brand:wikipedia":"ru:Лента (сеть магазинов)",name:"Лента","name:en":"Lenta",shop:"supermarket"},removeTags:{brand:"Лента","brand:en":"Lenta","brand:wikidata":"Q4258608","brand:wikipedia":"ru:Лента (сеть магазинов)",name:"Лента","name:en":"Lenta",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Магнит":{name:"Магнит",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q940518"},addTags:{brand:"Магнит","brand:en":"Magnit","brand:wikidata":"Q940518","brand:wikipedia":"ru:Магнит (сеть магазинов)",name:"Магнит","name:en":"Magnit",shop:"supermarket"},removeTags:{brand:"Магнит","brand:en":"Magnit","brand:wikidata":"Q940518","brand:wikipedia":"ru:Магнит (сеть магазинов)",name:"Магнит","name:en":"Magnit",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Мария-Ра":{name:"Мария-Ра",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q4281631"},addTags:{brand:"Мария-Ра","brand:en":"Maria-ra","brand:wikidata":"Q4281631","brand:wikipedia":"ru:Мария-Ра",name:"Мария-Ра","name:en":"Maria-ra",shop:"supermarket"},removeTags:{brand:"Мария-Ра","brand:en":"Maria-ra","brand:wikidata":"Q4281631","brand:wikipedia":"ru:Мария-Ра",name:"Мария-Ра","name:en":"Maria-ra",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Монетка":{name:"Монетка",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q4301704"},addTags:{brand:"Монетка","brand:en":"Monetka","brand:wikidata":"Q4301704","brand:wikipedia":"ru:Монетка (сеть магазинов)",name:"Монетка","name:en":"Monetka",shop:"supermarket"},removeTags:{brand:"Монетка","brand:en":"Monetka","brand:wikidata":"Q4301704","brand:wikipedia":"ru:Монетка (сеть магазинов)",name:"Монетка","name:en":"Monetka",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Народная 7Я семьЯ":{name:"Народная 7Я семьЯ",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q4032436"},addTags:{brand:"Народная 7Я семьЯ","brand:en":"People's 7th Family","brand:wikidata":"Q4032436","brand:wikipedia":"ru:Народная 7Я семья",name:"Народная 7Я семьЯ","name:en":"People's 7th Family",shop:"supermarket"},removeTags:{brand:"Народная 7Я семьЯ","brand:en":"People's 7th Family","brand:wikidata":"Q4032436","brand:wikipedia":"ru:Народная 7Я семья",name:"Народная 7Я семьЯ","name:en":"People's 7th Family",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Перекрёсток":{name:"Перекрёсток",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q1684639"},addTags:{brand:"Перекрёсток","brand:en":"Perekryostok","brand:wikidata":"Q1684639","brand:wikipedia":"en:Perekrestok (supermarket chain)",name:"Перекрёсток",shop:"supermarket"},removeTags:{brand:"Перекрёсток","brand:en":"Perekryostok","brand:wikidata":"Q1684639","brand:wikipedia":"en:Perekrestok (supermarket chain)",name:"Перекрёсток",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Покупочка":{name:"Покупочка",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q58003270"},addTags:{brand:"Покупочка","brand:wikidata":"Q58003270",name:"Покупочка",shop:"supermarket"},removeTags:{brand:"Покупочка","brand:wikidata":"Q58003270",name:"Покупочка",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Полушка":{name:"Полушка",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q4371080"},addTags:{brand:"Полушка","brand:en":"Polushka","brand:wikidata":"Q4371080","brand:wikipedia":"ru:Полушка (сеть магазинов)",name:"Полушка","name:en":"Polushka",shop:"supermarket"},removeTags:{brand:"Полушка","brand:en":"Polushka","brand:wikidata":"Q4371080","brand:wikipedia":"ru:Полушка (сеть магазинов)",name:"Полушка","name:en":"Polushka",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Пятёрочка":{name:"Пятёрочка",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q1768969"},addTags:{brand:"Пятёрочка","brand:en":"Pyaterochka","brand:wikidata":"Q1768969","brand:wikipedia":"ru:Пятёрочка",name:"Пятёрочка","name:en":"Pyaterochka",shop:"supermarket"},removeTags:{brand:"Пятёрочка","brand:en":"Pyaterochka","brand:wikidata":"Q1768969","brand:wikipedia":"ru:Пятёрочка",name:"Пятёрочка","name:en":"Pyaterochka",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Радеж":{name:"Радеж",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q4387165"},addTags:{brand:"Радеж","brand:en":"Radezh","brand:wikidata":"Q4387165","brand:wikipedia":"ru:Радеж (торговая сеть)",name:"Радеж","name:en":"Radezh",shop:"supermarket"},removeTags:{brand:"Радеж","brand:en":"Radezh","brand:wikidata":"Q4387165","brand:wikipedia":"ru:Радеж (торговая сеть)",name:"Радеж","name:en":"Radezh",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Рукавичка":{name:"Рукавичка",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q20092568"},addTags:{brand:"Рукавичка","brand:en":"Rukavychka","brand:wikidata":"Q20092568","brand:wikipedia":"uk:Рукавичка (торгова мережа)",name:"Рукавичка","name:en":"Rukavychka",shop:"supermarket"},removeTags:{brand:"Рукавичка","brand:en":"Rukavychka","brand:wikidata":"Q20092568","brand:wikipedia":"uk:Рукавичка (торгова мережа)",name:"Рукавичка","name:en":"Rukavychka",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Семишагофф":{name:"Семишагофф",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q58003374"},addTags:{brand:"Семишагофф","brand:wikidata":"Q58003374",name:"Семишагофф",shop:"supermarket"},removeTags:{brand:"Семишагофф","brand:wikidata":"Q58003374",name:"Семишагофф",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Сільпо":{name:"Сільпо",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q4419434"},addTags:{brand:"Сільпо","brand:en":"Silpo","brand:wikidata":"Q4419434","brand:wikipedia":"en:Silpo",name:"Сільпо","name:en":"Silpo",shop:"supermarket"},removeTags:{brand:"Сільпо","brand:en":"Silpo","brand:wikidata":"Q4419434","brand:wikipedia":"en:Silpo",name:"Сільпо","name:en":"Silpo",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Фора":{name:"Фора",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q12165977"},addTags:{brand:"Фора","brand:en":"Fora","brand:wikidata":"Q12165977","brand:wikipedia":"uk:Фора (мережа магазинів)",name:"Фора","name:en":"Fora",shop:"supermarket"},removeTags:{brand:"Фора","brand:en":"Fora","brand:wikidata":"Q12165977","brand:wikipedia":"uk:Фора (мережа магазинів)",name:"Фора","name:en":"Fora",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Фуршет":{name:"Фуршет",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q4493564"},addTags:{brand:"Фуршет","brand:en":"Furshet","brand:wikidata":"Q4493564","brand:wikipedia":"uk:Фуршет (мережа супермаркетів)",name:"Фуршет","name:en":"Furshet",shop:"supermarket"},removeTags:{brand:"Фуршет","brand:en":"Furshet","brand:wikidata":"Q4493564","brand:wikipedia":"uk:Фуршет (мережа супермаркетів)",name:"Фуршет","name:en":"Furshet",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Эдельвейс":{name:"Эдельвейс",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q57979368"},addTags:{brand:"Эдельвейс","brand:en":"Edelveis","brand:wikidata":"Q57979368",name:"Эдельвейс","name:en":"Edelveis",shop:"supermarket"},removeTags:{brand:"Эдельвейс","brand:en":"Edelveis","brand:wikidata":"Q57979368",name:"Эдельвейс","name:en":"Edelveis",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/いなげや":{name:"いなげや",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q17193392"},addTags:{brand:"いなげや","brand:en":"Inageya","brand:wikidata":"Q17193392","brand:wikipedia":"ja:いなげや",name:"いなげや","name:en":"Inageya",shop:"supermarket"},removeTags:{brand:"いなげや","brand:en":"Inageya","brand:wikidata":"Q17193392","brand:wikipedia":"ja:いなげや",name:"いなげや","name:en":"Inageya",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/まいばすけっと":{name:"まいばすけっと",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q11278154"},addTags:{brand:"まいばすけっと","brand:en":"My Basket","brand:wikidata":"Q11278154","brand:wikipedia":"ja:まいばすけっと",name:"まいばすけっと","name:en":"My Basket",shop:"supermarket"},removeTags:{brand:"まいばすけっと","brand:en":"My Basket","brand:wikidata":"Q11278154","brand:wikipedia":"ja:まいばすけっと",name:"まいばすけっと","name:en":"My Basket",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/イオン":{name:"イオン",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q11285951"},addTags:{brand:"イオン","brand:en":"AEON","brand:wikidata":"Q11285951","brand:wikipedia":"ja:イオン (店舗ブランド)",name:"イオン","name:en":"AEON",shop:"supermarket"},removeTags:{brand:"イオン","brand:en":"AEON","brand:wikidata":"Q11285951","brand:wikipedia":"ja:イオン (店舗ブランド)",name:"イオン","name:en":"AEON",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/イトーヨーカドー":{name:"イトーヨーカドー",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q3088746"},addTags:{brand:"イトーヨーカドー","brand:en":"Ito-Yokado","brand:wikidata":"Q3088746","brand:wikipedia":"en:Ito-Yokado",name:"イトーヨーカドー","name:en":"Ito-Yokado",shop:"supermarket"},removeTags:{brand:"イトーヨーカドー","brand:en":"Ito-Yokado","brand:wikidata":"Q3088746","brand:wikipedia":"en:Ito-Yokado",name:"イトーヨーカドー","name:en":"Ito-Yokado",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/カスミ":{name:"カスミ",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q11294160"},addTags:{brand:"カスミ","brand:en":"Kasumi","brand:wikidata":"Q11294160","brand:wikipedia":"ja:カスミ",name:"カスミ","name:en":"Kasumi",shop:"supermarket"},removeTags:{brand:"カスミ","brand:en":"Kasumi","brand:wikidata":"Q11294160","brand:wikipedia":"ja:カスミ",name:"カスミ","name:en":"Kasumi",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/バロー":{name:"バロー",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q11328346"},addTags:{brand:"バロー","brand:en":"Valor","brand:wikidata":"Q11328346","brand:wikipedia":"ja:バロー (チェーンストア)",name:"バロー","name:en":"Valor",shop:"supermarket"},removeTags:{brand:"バロー","brand:en":"Valor","brand:wikidata":"Q11328346","brand:wikipedia":"ja:バロー (チェーンストア)",name:"バロー","name:en":"Valor",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/マックスバリュ":{name:"マックスバリュ",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q1960109"},addTags:{brand:"マックスバリュ","brand:en":"Maxvalu Tokai","brand:wikidata":"Q1960109","brand:wikipedia":"en:MaxValu",name:"マックスバリュ","name:en":"Maxvalu Tokai",shop:"supermarket"},removeTags:{brand:"マックスバリュ","brand:en":"Maxvalu Tokai","brand:wikidata":"Q1960109","brand:wikipedia":"en:MaxValu",name:"マックスバリュ","name:en":"Maxvalu Tokai",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/マルエツ":{name:"マルエツ",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q11341197"},addTags:{brand:"マルエツ","brand:en":"Maruetsu","brand:wikidata":"Q11341197","brand:wikipedia":"ja:マルエツ",name:"マルエツ","name:en":"Maruetsu",shop:"supermarket"},removeTags:{brand:"マルエツ","brand:en":"Maruetsu","brand:wikidata":"Q11341197","brand:wikipedia":"ja:マルエツ",name:"マルエツ","name:en":"Maruetsu",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/ヤオコー":{name:"ヤオコー",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q11344967"},addTags:{brand:"ヤオコー","brand:en":"Yaoko","brand:wikidata":"Q11344967","brand:wikipedia":"ja:ヤオコー",name:"ヤオコー","name:en":"Yaoko",shop:"supermarket"},removeTags:{brand:"ヤオコー","brand:en":"Yaoko","brand:wikidata":"Q11344967","brand:wikipedia":"ja:ヤオコー",name:"ヤオコー","name:en":"Yaoko",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/ヨークベニマル":{name:"ヨークベニマル",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q11346199"},addTags:{brand:"ヨークベニマル","brand:en":"York Benimaru","brand:wikidata":"Q11346199","brand:wikipedia":"ja:ヨークベニマル",name:"ヨークベニマル","name:en":"York Benimaru",shop:"supermarket"},removeTags:{brand:"ヨークベニマル","brand:en":"York Benimaru","brand:wikidata":"Q11346199","brand:wikipedia":"ja:ヨークベニマル",name:"ヨークベニマル","name:en":"York Benimaru",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/ライフ":{name:"ライフ",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q11346476"},addTags:{brand:"ライフ","brand:en":"Life","brand:wikidata":"Q11346476","brand:wikipedia":"ja:ライフコーポレーション",name:"ライフ","name:en":"Life",shop:"supermarket"},removeTags:{brand:"ライフ","brand:en":"Life","brand:wikidata":"Q11346476","brand:wikipedia":"ja:ライフコーポレーション",name:"ライフ","name:en":"Life",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/全聯":{name:"全聯",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q7262792"},addTags:{brand:"全聯","brand:en":"Pxmart","brand:wikidata":"Q7262792","brand:wikipedia":"en:PX Mart",name:"全聯","name:en":"Pxmart",shop:"supermarket"},removeTags:{brand:"全聯","brand:en":"Pxmart","brand:wikidata":"Q7262792","brand:wikipedia":"en:PX Mart",name:"全聯","name:en":"Pxmart",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/全聯福利中心":{name:"全聯福利中心",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q7262792"},addTags:{brand:"全聯福利中心","brand:en":"Pxmart","brand:wikidata":"Q7262792","brand:wikipedia":"en:PX Mart",name:"全聯福利中心","name:en":"Pxmart",shop:"supermarket"},removeTags:{brand:"全聯福利中心","brand:en":"Pxmart","brand:wikidata":"Q7262792","brand:wikipedia":"en:PX Mart",name:"全聯福利中心","name:en":"Pxmart",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/惠康 Wellcome":{name:"惠康 Wellcome",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q706247"},addTags:{brand:"惠康 Wellcome","brand:en":"Wellcome","brand:wikidata":"Q706247","brand:wikipedia":"zh:惠康",name:"惠康 Wellcome","name:en":"Wellcome",shop:"supermarket"},removeTags:{brand:"惠康 Wellcome","brand:en":"Wellcome","brand:wikidata":"Q706247","brand:wikipedia":"zh:惠康",name:"惠康 Wellcome","name:en":"Wellcome",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/業務スーパー":{name:"業務スーパー",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q11590183"},addTags:{brand:"業務スーパー","brand:en":"Gyōmu sūpā","brand:wikidata":"Q11590183","brand:wikipedia":"ja:業務スーパー",name:"業務スーパー","name:en":"Gyōmu sūpā",shop:"supermarket"},removeTags:{brand:"業務スーパー","brand:en":"Gyōmu sūpā","brand:wikidata":"Q11590183","brand:wikipedia":"ja:業務スーパー",name:"業務スーパー","name:en":"Gyōmu sūpā",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/美廉社":{name:"美廉社",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q15914017"},addTags:{brand:"美廉社","brand:en":"Simple Mart","brand:wikidata":"Q15914017","brand:wikipedia":"zh:美廉社",name:"美廉社","name:en":"Simple Mart",shop:"supermarket"},removeTags:{brand:"美廉社","brand:en":"Simple Mart","brand:wikidata":"Q15914017","brand:wikipedia":"zh:美廉社",name:"美廉社","name:en":"Simple Mart",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/西友":{name:"西友",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q3108542"},addTags:{brand:"西友","brand:en":"Seiyu Group","brand:wikidata":"Q3108542","brand:wikipedia":"en:Seiyu Group",name:"西友","name:en":"Seiyu Group",shop:"supermarket"},removeTags:{brand:"西友","brand:en":"Seiyu Group","brand:wikidata":"Q3108542","brand:wikipedia":"en:Seiyu Group",name:"西友","name:en":"Seiyu Group",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/頂好":{name:"頂好",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q706247"},addTags:{brand:"頂好","brand:en":"Wellcome","brand:wikidata":"Q706247","brand:wikipedia":"en:Wellcome",name:"頂好","name:en":"Wellcome",shop:"supermarket"},removeTags:{brand:"頂好","brand:en":"Wellcome","brand:wikidata":"Q706247","brand:wikipedia":"en:Wellcome",name:"頂好","name:en":"Wellcome",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/頂好超市":{name:"頂好超市",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q706247"},addTags:{brand:"頂好超市","brand:en":"Wellcome","brand:wikidata":"Q706247","brand:wikipedia":"en:Wellcome",name:"頂好超市","name:en":"Wellcome",shop:"supermarket"},removeTags:{brand:"頂好超市","brand:en":"Wellcome","brand:wikidata":"Q706247","brand:wikipedia":"en:Wellcome",name:"頂好超市","name:en":"Wellcome",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/하나로마트":{name:"하나로마트",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q12590611"},addTags:{brand:"하나로마트","brand:en":"Hanaro Mart","brand:wikidata":"Q12590611","brand:wikipedia":"ko:농협유통",name:"하나로마트",shop:"supermarket"},removeTags:{brand:"하나로마트","brand:en":"Hanaro Mart","brand:wikidata":"Q12590611","brand:wikipedia":"ko:농협유통",name:"하나로마트",shop:"supermarket"},matchScore:2,suggestion:true},"shop/tea/T2":{name:"T2",icon:"maki-teahouse",geometry:["point","area"],tags:{shop:"tea","brand:wikidata":"Q48802134"},addTags:{brand:"T2","brand:wikidata":"Q48802134","brand:wikipedia":"en:T2 (Australian company)",name:"T2",shop:"tea"},removeTags:{brand:"T2","brand:wikidata":"Q48802134","brand:wikipedia":"en:T2 (Australian company)",name:"T2",shop:"tea"},matchScore:2,suggestion:true},"shop/ticket/Boutique Grandes Lignes":{name:"Boutique Grandes Lignes",icon:"maki-shop",geometry:["point","area"],tags:{shop:"ticket","brand:wikidata":"Q13646"},addTags:{brand:"Boutique Grandes Lignes","brand:wikidata":"Q13646","brand:wikipedia":"fr:Société nationale des chemins de fer français",name:"Boutique Grandes Lignes",shop:"ticket"},removeTags:{brand:"Boutique Grandes Lignes","brand:wikidata":"Q13646","brand:wikipedia":"fr:Société nationale des chemins de fer français",name:"Boutique Grandes Lignes",shop:"ticket"},matchScore:2,suggestion:true},"shop/ticket/Guichet Transilien":{name:"Guichet Transilien",icon:"maki-shop",geometry:["point","area"],tags:{shop:"ticket","brand:wikidata":"Q389554"},addTags:{brand:"Guichet Transilien","brand:wikidata":"Q389554","brand:wikipedia":"fr:Transilien",name:"Guichet Transilien",shop:"ticket"},removeTags:{brand:"Guichet Transilien","brand:wikidata":"Q389554","brand:wikipedia":"fr:Transilien",name:"Guichet Transilien",shop:"ticket"},matchScore:2,suggestion:true},"shop/toys/Dráčik":{name:"Dráčik",icon:"maki-shop",geometry:["point","area"],tags:{shop:"toys","brand:wikidata":"Q57653669"},addTags:{brand:"Dráčik","brand:wikidata":"Q57653669",name:"Dráčik",shop:"toys"},removeTags:{brand:"Dráčik","brand:wikidata":"Q57653669",name:"Dráčik",shop:"toys"},matchScore:2,suggestion:true},"shop/toys/Intertoys":{name:"Intertoys",icon:"maki-shop",geometry:["point","area"],tags:{shop:"toys","brand:wikidata":"Q1891407"},addTags:{brand:"Intertoys","brand:wikidata":"Q1891407","brand:wikipedia":"nl:Intertoys",name:"Intertoys",shop:"toys"},removeTags:{brand:"Intertoys","brand:wikidata":"Q1891407","brand:wikipedia":"nl:Intertoys",name:"Intertoys",shop:"toys"},matchScore:2,suggestion:true},"shop/toys/JouéClub":{name:"JouéClub",icon:"maki-shop",geometry:["point","area"],tags:{shop:"toys","brand:wikidata":"Q3187152"},addTags:{brand:"JouéClub","brand:wikidata":"Q3187152","brand:wikipedia":"fr:JouéClub",name:"JouéClub",shop:"toys"},removeTags:{brand:"JouéClub","brand:wikidata":"Q3187152","brand:wikipedia":"fr:JouéClub",name:"JouéClub",shop:"toys"},matchScore:2,suggestion:true},"shop/toys/King Jouet":{name:"King Jouet",icon:"maki-shop",geometry:["point","area"],tags:{shop:"toys","brand:wikidata":"Q3197009"},addTags:{brand:"King Jouet","brand:en":"King Toy","brand:wikidata":"Q3197009","brand:wikipedia":"fr:King Jouet",name:"King Jouet","name:en":"King Toy",shop:"toys"},removeTags:{brand:"King Jouet","brand:en":"King Toy","brand:wikidata":"Q3197009","brand:wikipedia":"fr:King Jouet",name:"King Jouet","name:en":"King Toy",shop:"toys"},matchScore:2,suggestion:true},"shop/toys/La Grande Récré":{name:"La Grande Récré",icon:"maki-shop",geometry:["point","area"],tags:{shop:"toys","brand:wikidata":"Q3209556"},addTags:{brand:"La Grande Récré","brand:wikidata":"Q3209556","brand:wikipedia":"fr:La Grande Récré (magasin)",name:"La Grande Récré",shop:"toys"},removeTags:{brand:"La Grande Récré","brand:wikidata":"Q3209556","brand:wikipedia":"fr:La Grande Récré (magasin)",name:"La Grande Récré",shop:"toys"},matchScore:2,suggestion:true},"shop/toys/Lego":{name:"Lego",icon:"maki-shop",geometry:["point","area"],tags:{shop:"toys","brand:wikidata":"Q1063455"},addTags:{brand:"Lego","brand:wikidata":"Q1063455","brand:wikipedia":"en:The Lego Group",name:"Lego",shop:"toys"},removeTags:{brand:"Lego","brand:wikidata":"Q1063455","brand:wikipedia":"en:The Lego Group",name:"Lego",shop:"toys"},matchScore:2,suggestion:true},"shop/toys/Lekia":{name:"Lekia",icon:"maki-shop",geometry:["point","area"],tags:{shop:"toys","brand:wikidata":"Q56303274"},addTags:{brand:"Lekia","brand:wikidata":"Q56303274","brand:wikipedia":"sv:Lekia",name:"Lekia",shop:"toys"},removeTags:{brand:"Lekia","brand:wikidata":"Q56303274","brand:wikipedia":"sv:Lekia",name:"Lekia",shop:"toys"},matchScore:2,suggestion:true},"shop/toys/Maxi Toys":{name:"Maxi Toys",icon:"maki-shop",geometry:["point","area"],tags:{shop:"toys","brand:wikidata":"Q16663879"},addTags:{brand:"Maxi Toys","brand:wikidata":"Q16663879","brand:wikipedia":"fr:Maxi Toys",name:"Maxi Toys",shop:"toys"},removeTags:{brand:"Maxi Toys","brand:wikidata":"Q16663879","brand:wikipedia":"fr:Maxi Toys",name:"Maxi Toys",shop:"toys"},matchScore:2,suggestion:true},"shop/toys/The Entertainer":{name:"The Entertainer",icon:"maki-shop",geometry:["point","area"],tags:{shop:"toys","brand:wikidata":"Q7732289"},addTags:{brand:"The Entertainer","brand:wikidata":"Q7732289","brand:wikipedia":"en:The Entertainer (retailer)",name:"The Entertainer",shop:"toys"},removeTags:{brand:"The Entertainer","brand:wikidata":"Q7732289","brand:wikipedia":"en:The Entertainer (retailer)",name:"The Entertainer",shop:"toys"},matchScore:2,suggestion:true},"shop/toys/Toys R Us":{name:"Toys R Us",icon:"maki-shop",geometry:["point","area"],tags:{shop:"toys","brand:wikidata":"Q696334"},addTags:{brand:"Toys R Us","brand:wikidata":"Q696334","brand:wikipedia":"en:Toys \"R\" Us",name:"Toys R Us",shop:"toys"},removeTags:{brand:"Toys R Us","brand:wikidata":"Q696334","brand:wikipedia":"en:Toys \"R\" Us",name:"Toys R Us",shop:"toys"},matchScore:2,suggestion:true},"shop/toys/Детский мир":{name:"Детский мир",icon:"maki-shop",geometry:["point","area"],tags:{shop:"toys","brand:wikidata":"Q16643324"},addTags:{brand:"Детский мир","brand:en":"Detskiy Mir","brand:wikidata":"Q16643324","brand:wikipedia":"en:Detsky Mir",name:"Детский мир","name:en":"Detskiy Mir",shop:"toys"},removeTags:{brand:"Детский мир","brand:en":"Detskiy Mir","brand:wikidata":"Q16643324","brand:wikipedia":"en:Detsky Mir",name:"Детский мир","name:en":"Detskiy Mir",shop:"toys"},matchScore:2,suggestion:true},"shop/toys/Кораблик":{name:"Кораблик",icon:"maki-shop",geometry:["point","area"],tags:{shop:"toys","brand:wikidata":"Q57653416"},addTags:{brand:"Кораблик","brand:wikidata":"Q57653416",name:"Кораблик",shop:"toys"},removeTags:{brand:"Кораблик","brand:wikidata":"Q57653416",name:"Кораблик",shop:"toys"},matchScore:2,suggestion:true},"shop/travel_agency/Coral Travel":{name:"Coral Travel",icon:"maki-suitcase",geometry:["point","area"],tags:{shop:"travel_agency","brand:wikidata":"Q58011479"},addTags:{brand:"Coral Travel","brand:wikidata":"Q58011479",name:"Coral Travel",shop:"travel_agency"},removeTags:{brand:"Coral Travel","brand:wikidata":"Q58011479",name:"Coral Travel",shop:"travel_agency"},matchScore:2,suggestion:true},"shop/travel_agency/D-reizen":{name:"D-reizen",icon:"maki-suitcase",geometry:["point","area"],tags:{shop:"travel_agency","brand:wikidata":"Q2445498"},addTags:{brand:"D-reizen","brand:wikidata":"Q2445498","brand:wikipedia":"nl:D-reizen",name:"D-reizen",shop:"travel_agency"},removeTags:{brand:"D-reizen","brand:wikidata":"Q2445498","brand:wikipedia":"nl:D-reizen",name:"D-reizen",shop:"travel_agency"},matchScore:2,suggestion:true},"shop/travel_agency/DER Reisebüro":{name:"DER Reisebüro",icon:"maki-suitcase",geometry:["point","area"],tags:{shop:"travel_agency","brand:wikidata":"Q56729186"},addTags:{brand:"DER Reisebüro","brand:wikidata":"Q56729186","brand:wikipedia":"de:Deutsches Reisebüro",name:"DER Reisebüro",shop:"travel_agency"},removeTags:{brand:"DER Reisebüro","brand:wikidata":"Q56729186","brand:wikipedia":"de:Deutsches Reisebüro",name:"DER Reisebüro",shop:"travel_agency"},matchScore:2,suggestion:true},"shop/travel_agency/First Reisebüro":{name:"First Reisebüro",icon:"maki-suitcase",geometry:["point","area"],tags:{shop:"travel_agency","brand:wikidata":"Q573103"},addTags:{brand:"First Reisebüro","brand:wikidata":"Q573103","brand:wikipedia":"en:TUI Group",name:"First Reisebüro",shop:"travel_agency"},removeTags:{brand:"First Reisebüro","brand:wikidata":"Q573103","brand:wikipedia":"en:TUI Group",name:"First Reisebüro",shop:"travel_agency"},matchScore:2,suggestion:true},"shop/travel_agency/Flight Centre":{name:"Flight Centre",icon:"maki-suitcase",geometry:["point","area"],tags:{shop:"travel_agency","brand:wikidata":"Q5459202"},addTags:{brand:"Flight Centre","brand:wikidata":"Q5459202","brand:wikipedia":"en:Flight Centre",name:"Flight Centre",shop:"travel_agency"},removeTags:{brand:"Flight Centre","brand:wikidata":"Q5459202","brand:wikipedia":"en:Flight Centre",name:"Flight Centre",shop:"travel_agency"},matchScore:2,suggestion:true},"shop/travel_agency/Halcón Viajes":{name:"Halcón Viajes",icon:"maki-suitcase",geometry:["point","area"],tags:{shop:"travel_agency","brand:wikidata":"Q57591939"},addTags:{brand:"Halcón Viajes","brand:wikidata":"Q57591939",name:"Halcón Viajes",shop:"travel_agency"},removeTags:{brand:"Halcón Viajes","brand:wikidata":"Q57591939",name:"Halcón Viajes",shop:"travel_agency"},matchScore:2,suggestion:true},"shop/travel_agency/Havas Voyages":{name:"Havas Voyages",icon:"maki-suitcase",geometry:["point","area"],tags:{shop:"travel_agency","brand:wikidata":"Q57628091"},addTags:{brand:"Havas Voyages","brand:wikidata":"Q57628091",name:"Havas Voyages",shop:"travel_agency"},removeTags:{brand:"Havas Voyages","brand:wikidata":"Q57628091",name:"Havas Voyages",shop:"travel_agency"},matchScore:2,suggestion:true},"shop/travel_agency/Reiseland":{name:"Reiseland",icon:"maki-suitcase",geometry:["point","area"],tags:{shop:"travel_agency","brand:wikidata":"Q40387610"},addTags:{brand:"Reiseland","brand:wikidata":"Q40387610","brand:wikipedia":"de:OTTO Reisen",name:"Reiseland",shop:"travel_agency"},removeTags:{brand:"Reiseland","brand:wikidata":"Q40387610","brand:wikipedia":"de:OTTO Reisen",name:"Reiseland",shop:"travel_agency"},matchScore:2,suggestion:true},"shop/travel_agency/TUI":{name:"TUI",icon:"maki-suitcase",geometry:["point","area"],tags:{shop:"travel_agency","brand:wikidata":"Q573103"},addTags:{brand:"TUI","brand:wikidata":"Q573103","brand:wikipedia":"en:TUI Group",name:"TUI",shop:"travel_agency"},removeTags:{brand:"TUI","brand:wikidata":"Q573103","brand:wikipedia":"en:TUI Group",name:"TUI",shop:"travel_agency"},matchScore:2,suggestion:true},"shop/travel_agency/The Co-operative Travel":{name:"The Co-operative Travel",icon:"maki-suitcase",geometry:["point","area"],tags:{shop:"travel_agency","brand:wikidata":"Q7726526"},addTags:{brand:"The Co-operative Travel","brand:wikidata":"Q7726526","brand:wikipedia":"en:The Co-operative Travel",name:"The Co-operative Travel",shop:"travel_agency"},removeTags:{brand:"The Co-operative Travel","brand:wikidata":"Q7726526","brand:wikipedia":"en:The Co-operative Travel",name:"The Co-operative Travel",shop:"travel_agency"},matchScore:2,suggestion:true},"shop/travel_agency/Thomas Cook":{name:"Thomas Cook",icon:"maki-suitcase",geometry:["point","area"],tags:{shop:"travel_agency","brand:wikidata":"Q2141800"},addTags:{brand:"Thomas Cook","brand:wikidata":"Q2141800","brand:wikipedia":"en:Thomas Cook Group",name:"Thomas Cook",shop:"travel_agency"},removeTags:{brand:"Thomas Cook","brand:wikidata":"Q2141800","brand:wikipedia":"en:Thomas Cook Group",name:"Thomas Cook",shop:"travel_agency"},matchScore:2,suggestion:true},"shop/travel_agency/Thomson":{name:"Thomson",icon:"maki-suitcase",geometry:["point","area"],tags:{shop:"travel_agency","brand:wikidata":"Q7795876"},addTags:{brand:"Thomson","brand:wikidata":"Q7795876","brand:wikipedia":"en:TUI UK",name:"Thomson",shop:"travel_agency"},removeTags:{brand:"Thomson","brand:wikidata":"Q7795876","brand:wikipedia":"en:TUI UK",name:"Thomson",shop:"travel_agency"},matchScore:2,suggestion:true},"shop/travel_agency/Поехали с нами":{name:"Поехали с нами",icon:"maki-suitcase",geometry:["point","area"],tags:{shop:"travel_agency","brand:wikidata":"Q25439141"},addTags:{brand:"Поехали с нами","brand:wikidata":"Q25439141","brand:wikipedia":"uk:Поїхали з нами",name:"Поехали с нами",shop:"travel_agency"},removeTags:{brand:"Поехали с нами","brand:wikidata":"Q25439141","brand:wikipedia":"uk:Поїхали з нами",name:"Поехали с нами",shop:"travel_agency"},matchScore:2,suggestion:true},"shop/tyres/Big O Tires":{name:"Big O Tires",icon:"maki-shop",geometry:["point","area"],tags:{shop:"tyres","brand:wikidata":"Q4906085"},addTags:{brand:"Big O Tires","brand:wikidata":"Q4906085","brand:wikipedia":"en:Big O Tires",name:"Big O Tires",shop:"tyres"},removeTags:{brand:"Big O Tires","brand:wikidata":"Q4906085","brand:wikipedia":"en:Big O Tires",name:"Big O Tires",shop:"tyres"},matchScore:2,suggestion:true},"shop/tyres/Bridgestone":{name:"Bridgestone",icon:"maki-shop",geometry:["point","area"],tags:{shop:"tyres","brand:wikidata":"Q179433"},addTags:{brand:"Bridgestone","brand:wikidata":"Q179433","brand:wikipedia":"en:Bridgestone",name:"Bridgestone",shop:"tyres"},removeTags:{brand:"Bridgestone","brand:wikidata":"Q179433","brand:wikipedia":"en:Bridgestone",name:"Bridgestone",shop:"tyres"},matchScore:2,suggestion:true},"shop/tyres/Discount Tire":{name:"Discount Tire",icon:"maki-shop",geometry:["point","area"],tags:{shop:"tyres","brand:wikidata":"Q5281735"},addTags:{brand:"Discount Tire","brand:wikidata":"Q5281735","brand:wikipedia":"en:Discount Tire",name:"Discount Tire",shop:"tyres"},removeTags:{brand:"Discount Tire","brand:wikidata":"Q5281735","brand:wikipedia":"en:Discount Tire",name:"Discount Tire",shop:"tyres"},matchScore:2,suggestion:true},"shop/tyres/Express Oil Change & Tire Engineers":{name:"Express Oil Change & Tire Engineers",icon:"maki-shop",geometry:["point","area"],tags:{shop:"tyres","brand:wikidata":"Q39057654"},addTags:{brand:"Express Oil Change & Tire Engineers","brand:wikidata":"Q39057654","brand:wikipedia":"en:Express Oil Change & Tire Engineers",name:"Express Oil Change & Tire Engineers",shop:"tyres"},removeTags:{brand:"Express Oil Change & Tire Engineers","brand:wikidata":"Q39057654","brand:wikipedia":"en:Express Oil Change & Tire Engineers",name:"Express Oil Change & Tire Engineers",shop:"tyres"},matchScore:2,suggestion:true},"shop/tyres/Les Schwab Tire Center":{name:"Les Schwab Tire Center",icon:"maki-shop",geometry:["point","area"],tags:{shop:"tyres","brand:wikidata":"Q6529977"},addTags:{brand:"Les Schwab Tire Center","brand:wikidata":"Q6529977","brand:wikipedia":"en:Les Schwab Tire Centers",name:"Les Schwab Tire Center",shop:"tyres"},removeTags:{brand:"Les Schwab Tire Center","brand:wikidata":"Q6529977","brand:wikipedia":"en:Les Schwab Tire Centers",name:"Les Schwab Tire Center",shop:"tyres"},matchScore:2,suggestion:true},"shop/tyres/Michelin":{name:"Michelin",icon:"maki-shop",geometry:["point","area"],tags:{shop:"tyres","brand:wikidata":"Q151107"},addTags:{brand:"Michelin","brand:wikidata":"Q151107","brand:wikipedia":"en:Michelin",name:"Michelin",shop:"tyres"},removeTags:{brand:"Michelin","brand:wikidata":"Q151107","brand:wikipedia":"en:Michelin",name:"Michelin",shop:"tyres"},matchScore:2,suggestion:true},"shop/tyres/Vianor":{name:"Vianor",icon:"maki-shop",geometry:["point","area"],tags:{shop:"tyres","brand:wikidata":"Q10714920"},addTags:{brand:"Vianor","brand:wikidata":"Q10714920","brand:wikipedia":"sv:Vianor",name:"Vianor",shop:"tyres"},removeTags:{brand:"Vianor","brand:wikidata":"Q10714920","brand:wikipedia":"sv:Vianor",name:"Vianor",shop:"tyres"},matchScore:2,suggestion:true},"shop/variety_store/Action":{name:"Action",icon:"maki-shop",geometry:["point","area"],tags:{shop:"variety_store","brand:wikidata":"Q2634111"},addTags:{brand:"Action","brand:wikidata":"Q2634111","brand:wikipedia":"nl:Action (winkel)",name:"Action",shop:"variety_store"},removeTags:{brand:"Action","brand:wikidata":"Q2634111","brand:wikipedia":"nl:Action (winkel)",name:"Action",shop:"variety_store"},matchScore:2,suggestion:true},"shop/variety_store/Big Bazaar":{name:"Big Bazaar",icon:"maki-shop",geometry:["point","area"],tags:{shop:"variety_store","brand:wikidata":"Q3631008"},addTags:{brand:"Big Bazaar","brand:wikidata":"Q3631008","brand:wikipedia":"en:Big Bazaar",name:"Big Bazaar",shop:"variety_store"},removeTags:{brand:"Big Bazaar","brand:wikidata":"Q3631008","brand:wikipedia":"en:Big Bazaar",name:"Big Bazaar",shop:"variety_store"},matchScore:2,suggestion:true},"shop/variety_store/Big Bazar":{name:"Big Bazar",icon:"maki-shop",geometry:["point","area"],tags:{shop:"variety_store","brand:wikidata":"Q15873104"},addTags:{brand:"Big Bazar","brand:wikidata":"Q15873104","brand:wikipedia":"nl:Big Bazar",name:"Big Bazar",shop:"variety_store"},removeTags:{brand:"Big Bazar","brand:wikidata":"Q15873104","brand:wikipedia":"nl:Big Bazar",name:"Big Bazar",shop:"variety_store"},matchScore:2,suggestion:true},"shop/variety_store/Dollar General":{name:"Dollar General",icon:"maki-shop",geometry:["point","area"],tags:{shop:"variety_store","brand:wikidata":"Q145168"},addTags:{brand:"Dollar General","brand:wikidata":"Q145168","brand:wikipedia":"en:Dollar General",name:"Dollar General",shop:"variety_store"},removeTags:{brand:"Dollar General","brand:wikidata":"Q145168","brand:wikipedia":"en:Dollar General",name:"Dollar General",shop:"variety_store"},matchScore:2,suggestion:true},"shop/variety_store/Dollar Tree":{name:"Dollar Tree",icon:"maki-shop",geometry:["point","area"],tags:{shop:"variety_store","brand:wikidata":"Q5289230"},addTags:{brand:"Dollar Tree","brand:wikidata":"Q5289230","brand:wikipedia":"en:Dollar Tree",name:"Dollar Tree",shop:"variety_store"},removeTags:{brand:"Dollar Tree","brand:wikidata":"Q5289230","brand:wikipedia":"en:Dollar Tree",name:"Dollar Tree",shop:"variety_store"},matchScore:2,suggestion:true},"shop/variety_store/Dollarama":{name:"Dollarama",icon:"maki-shop",geometry:["point","area"],tags:{shop:"variety_store","brand:wikidata":"Q3033947"},addTags:{brand:"Dollarama","brand:wikidata":"Q3033947","brand:wikipedia":"en:Dollarama",name:"Dollarama",shop:"variety_store"},removeTags:{brand:"Dollarama","brand:wikidata":"Q3033947","brand:wikipedia":"en:Dollarama",name:"Dollarama",shop:"variety_store"},matchScore:2,suggestion:true},"shop/variety_store/Family Dollar":{name:"Family Dollar",icon:"maki-shop",geometry:["point","area"],tags:{shop:"variety_store","brand:wikidata":"Q5433101"},addTags:{brand:"Family Dollar","brand:wikidata":"Q5433101","brand:wikipedia":"en:Family Dollar",name:"Family Dollar",shop:"variety_store"},removeTags:{brand:"Family Dollar","brand:wikidata":"Q5433101","brand:wikipedia":"en:Family Dollar",name:"Family Dollar",shop:"variety_store"},matchScore:2,suggestion:true},"shop/variety_store/Five Below":{name:"Five Below",icon:"maki-shop",geometry:["point","area"],tags:{shop:"variety_store","brand:wikidata":"Q5455836"},addTags:{brand:"Five Below","brand:wikidata":"Q5455836","brand:wikipedia":"en:Five Below",name:"Five Below",shop:"variety_store"},removeTags:{brand:"Five Below","brand:wikidata":"Q5455836","brand:wikipedia":"en:Five Below",name:"Five Below",shop:"variety_store"},matchScore:2,suggestion:true},"shop/variety_store/Fix Price":{name:"Fix Price",icon:"maki-shop",geometry:["point","area"],tags:{shop:"variety_store","brand:wikidata":"Q4038791"},addTags:{brand:"Fix Price","brand:wikidata":"Q4038791","brand:wikipedia":"ru:Fix Price (сеть магазинов)",name:"Fix Price",shop:"variety_store"},removeTags:{brand:"Fix Price","brand:wikidata":"Q4038791","brand:wikipedia":"ru:Fix Price (сеть магазинов)",name:"Fix Price",shop:"variety_store"},matchScore:2,suggestion:true},"shop/variety_store/GiFi":{name:"GiFi",icon:"maki-shop",geometry:["point","area"],tags:{shop:"variety_store","brand:wikidata":"Q3105439"},addTags:{brand:"GiFi","brand:wikidata":"Q3105439","brand:wikipedia":"fr:Gifi",name:"GiFi",shop:"variety_store"},removeTags:{brand:"GiFi","brand:wikidata":"Q3105439","brand:wikipedia":"fr:Gifi",name:"GiFi",shop:"variety_store"},matchScore:2,suggestion:true},"shop/variety_store/Home Bargains":{name:"Home Bargains",icon:"maki-shop",geometry:["point","area"],tags:{shop:"variety_store","brand:wikidata":"Q5888229"},addTags:{brand:"Home Bargains","brand:wikidata":"Q5888229","brand:wikipedia":"en:Home Bargains",name:"Home Bargains",shop:"variety_store"},removeTags:{brand:"Home Bargains","brand:wikidata":"Q5888229","brand:wikipedia":"en:Home Bargains",name:"Home Bargains",shop:"variety_store"},matchScore:2,suggestion:true},"shop/variety_store/Mäc-Geiz":{name:"Mäc-Geiz",icon:"maki-shop",geometry:["point","area"],tags:{shop:"variety_store","brand:wikidata":"Q1957126"},addTags:{brand:"Mäc-Geiz","brand:wikidata":"Q1957126","brand:wikipedia":"de:Mäc-Geiz",name:"Mäc-Geiz",shop:"variety_store"},removeTags:{brand:"Mäc-Geiz","brand:wikidata":"Q1957126","brand:wikipedia":"de:Mäc-Geiz",name:"Mäc-Geiz",shop:"variety_store"},matchScore:2,suggestion:true},"shop/variety_store/NOZ":{name:"NOZ",icon:"maki-shop",geometry:["point","area"],tags:{shop:"variety_store","brand:wikidata":"Q3345688"},addTags:{brand:"NOZ","brand:wikidata":"Q3345688","brand:wikipedia":"fr:Noz",name:"NOZ",shop:"variety_store"},removeTags:{brand:"NOZ","brand:wikidata":"Q3345688","brand:wikipedia":"fr:Noz",name:"NOZ",shop:"variety_store"},matchScore:2,suggestion:true},"shop/variety_store/Poundland":{name:"Poundland",icon:"maki-shop",geometry:["point","area"],tags:{shop:"variety_store","brand:wikidata":"Q1434528"},addTags:{brand:"Poundland","brand:wikidata":"Q1434528","brand:wikipedia":"en:Poundland",name:"Poundland",shop:"variety_store"},removeTags:{brand:"Poundland","brand:wikidata":"Q1434528","brand:wikipedia":"en:Poundland",name:"Poundland",shop:"variety_store"},matchScore:2,suggestion:true},"shop/variety_store/Poundstretcher":{name:"Poundstretcher",icon:"maki-shop",geometry:["point","area"],tags:{shop:"variety_store","brand:wikidata":"Q7235675"},addTags:{brand:"Poundstretcher","brand:wikidata":"Q7235675","brand:wikipedia":"en:Poundstretcher",name:"Poundstretcher",shop:"variety_store"},removeTags:{brand:"Poundstretcher","brand:wikidata":"Q7235675","brand:wikipedia":"en:Poundstretcher",name:"Poundstretcher",shop:"variety_store"},matchScore:2,suggestion:true},"shop/variety_store/Poundworld":{name:"Poundworld",icon:"maki-shop",geometry:["point","area"],tags:{shop:"variety_store","brand:wikidata":"Q16967516"},addTags:{brand:"Poundworld","brand:wikidata":"Q16967516","brand:wikipedia":"en:Poundworld",name:"Poundworld",shop:"variety_store"},removeTags:{brand:"Poundworld","brand:wikidata":"Q16967516","brand:wikipedia":"en:Poundworld",name:"Poundworld",shop:"variety_store"},matchScore:2,suggestion:true},"shop/variety_store/TEDi":{name:"TEDi",icon:"maki-shop",geometry:["point","area"],tags:{shop:"variety_store","brand:wikidata":"Q1364603"},addTags:{brand:"TEDi","brand:wikidata":"Q1364603","brand:wikipedia":"de:TEDi",name:"TEDi",shop:"variety_store"},removeTags:{brand:"TEDi","brand:wikidata":"Q1364603","brand:wikipedia":"de:TEDi",name:"TEDi",shop:"variety_store"},matchScore:2,suggestion:true},"shop/variety_store/Wilko":{name:"Wilko",icon:"maki-shop",geometry:["point","area"],tags:{shop:"variety_store","brand:wikidata":"Q8002536"},addTags:{brand:"Wilko","brand:wikidata":"Q8002536","brand:wikipedia":"en:Wilko (retailer)",name:"Wilko",shop:"variety_store"},removeTags:{brand:"Wilko","brand:wikidata":"Q8002536","brand:wikipedia":"en:Wilko (retailer)",name:"Wilko",shop:"variety_store"},matchScore:2,suggestion:true},"shop/variety_store/キャンドゥ":{name:"キャンドゥ",icon:"maki-shop",geometry:["point","area"],tags:{shop:"variety_store","brand:wikidata":"Q11297367"},addTags:{brand:"キャンドゥ","brand:en":"CAN DO","brand:wikidata":"Q11297367","brand:wikipedia":"ja:キャンドゥ",name:"キャンドゥ","name:en":"CAN DO",shop:"variety_store"},removeTags:{brand:"キャンドゥ","brand:en":"CAN DO","brand:wikidata":"Q11297367","brand:wikipedia":"ja:キャンドゥ",name:"キャンドゥ","name:en":"CAN DO",shop:"variety_store"},matchScore:2,suggestion:true},"shop/variety_store/セリア":{name:"セリア",icon:"maki-shop",geometry:["point","area"],tags:{shop:"variety_store","brand:wikidata":"Q11314509"},addTags:{brand:"セリア","brand:en":"Seria","brand:wikidata":"Q11314509","brand:wikipedia":"ja:セリア (100円ショップ)",name:"セリア","name:en":"Seria",shop:"variety_store"},removeTags:{brand:"セリア","brand:en":"Seria","brand:wikidata":"Q11314509","brand:wikipedia":"ja:セリア (100円ショップ)",name:"セリア","name:en":"Seria",shop:"variety_store"},matchScore:2,suggestion:true},"shop/variety_store/ダイソー":{name:"ダイソー",icon:"maki-shop",geometry:["point","area"],tags:{shop:"variety_store","brand:wikidata":"Q866991"},addTags:{brand:"ダイソー","brand:en":"Daiso","brand:wikidata":"Q866991","brand:wikipedia":"ja:大創産業",name:"ダイソー","name:en":"Daiso",shop:"variety_store"},removeTags:{brand:"ダイソー","brand:en":"Daiso","brand:wikidata":"Q866991","brand:wikipedia":"ja:大創産業",name:"ダイソー","name:en":"Daiso",shop:"variety_store"},matchScore:2,suggestion:true},"shop/video_games/EB Games":{name:"EB Games",icon:"maki-gaming",geometry:["point","area"],tags:{shop:"video_games","brand:wikidata":"Q4993686"},addTags:{brand:"EB Games","brand:wikidata":"Q4993686","brand:wikipedia":"en:EB Games",name:"EB Games",shop:"video_games"},removeTags:{brand:"EB Games","brand:wikidata":"Q4993686","brand:wikipedia":"en:EB Games",name:"EB Games",shop:"video_games"},matchScore:2,suggestion:true},"shop/video_games/GameStop":{name:"GameStop",icon:"maki-gaming",geometry:["point","area"],tags:{shop:"video_games","brand:wikidata":"Q202210"},addTags:{brand:"GameStop","brand:wikidata":"Q202210","brand:wikipedia":"en:GameStop",name:"GameStop",shop:"video_games"},removeTags:{brand:"GameStop","brand:wikidata":"Q202210","brand:wikipedia":"en:GameStop",name:"GameStop",shop:"video_games"},matchScore:2,suggestion:true},"shop/video_games/Micromania":{name:"Micromania",icon:"maki-gaming",geometry:["point","area"],tags:{shop:"video_games","brand:wikidata":"Q3312221"},addTags:{brand:"Micromania","brand:wikidata":"Q3312221","brand:wikipedia":"en:Micromania (video game retailer)",name:"Micromania",shop:"video_games"},removeTags:{brand:"Micromania","brand:wikidata":"Q3312221","brand:wikipedia":"en:Micromania (video game retailer)",name:"Micromania",shop:"video_games"},matchScore:2,suggestion:true},"shop/video/Blockbuster":{name:"Blockbuster",icon:"temaki-movie_rental",geometry:["point","area"],tags:{shop:"video","brand:wikidata":"Q884711"},addTags:{brand:"Blockbuster","brand:wikidata":"Q884711","brand:wikipedia":"en:Blockbuster LLC",name:"Blockbuster",shop:"video"},removeTags:{brand:"Blockbuster","brand:wikidata":"Q884711","brand:wikipedia":"en:Blockbuster LLC",name:"Blockbuster",shop:"video"},matchScore:2,suggestion:true},"shop/video/Family Video":{name:"Family Video",icon:"temaki-movie_rental",geometry:["point","area"],tags:{shop:"video","brand:wikidata":"Q5433297"},addTags:{brand:"Family Video","brand:wikidata":"Q5433297","brand:wikipedia":"en:Family Video",name:"Family Video",shop:"video"},removeTags:{brand:"Family Video","brand:wikidata":"Q5433297","brand:wikipedia":"en:Family Video",name:"Family Video",shop:"video"},matchScore:2,suggestion:true},"shop/video/TSUTAYA":{name:"TSUTAYA",icon:"temaki-movie_rental",geometry:["point","area"],tags:{shop:"video","brand:wikidata":"Q5193457"},addTags:{brand:"TSUTAYA","brand:wikidata":"Q5193457","brand:wikipedia":"ja:カルチュア・コンビニエンス・クラブ",name:"TSUTAYA",shop:"video"},removeTags:{brand:"TSUTAYA","brand:wikidata":"Q5193457","brand:wikipedia":"ja:カルチュア・コンビニエンス・クラブ",name:"TSUTAYA",shop:"video"},matchScore:2,suggestion:true},"shop/video/ゲオ":{name:"ゲオ",icon:"temaki-movie_rental",geometry:["point","area"],tags:{shop:"video","brand:wikidata":"Q5533938"},addTags:{brand:"GEO","brand:wikidata":"Q5533938","brand:wikipedia":"ja:ゲオ",name:"ゲオ",shop:"video"},removeTags:{brand:"GEO","brand:wikidata":"Q5533938","brand:wikipedia":"ja:ゲオ",name:"ゲオ",shop:"video"},matchScore:2,suggestion:true},"shop/watches/Swatch":{name:"Swatch",icon:"maki-watch",geometry:["point","area"],tags:{shop:"watches","brand:wikidata":"Q573422"},addTags:{brand:"Swatch","brand:wikidata":"Q573422","brand:wikipedia":"en:Swatch",name:"Swatch",shop:"watches"},removeTags:{brand:"Swatch","brand:wikidata":"Q573422","brand:wikipedia":"en:Swatch",name:"Swatch",shop:"watches"},matchScore:2,suggestion:true},"shop/wholesale/Costco":{name:"Costco",icon:"maki-warehouse",geometry:["point","area"],tags:{shop:"wholesale","brand:wikidata":"Q715583"},addTags:{brand:"Costco","brand:wikidata":"Q715583","brand:wikipedia":"en:Costco",name:"Costco",shop:"wholesale",operator:"Costco"},removeTags:{brand:"Costco","brand:wikidata":"Q715583","brand:wikipedia":"en:Costco",name:"Costco",shop:"wholesale",operator:"Costco"},matchScore:2,suggestion:true},"shop/wholesale/Makro":{name:"Makro",icon:"maki-warehouse",geometry:["point","area"],tags:{shop:"wholesale","brand:wikidata":"Q704606"},addTags:{brand:"Makro","brand:wikidata":"Q704606","brand:wikipedia":"en:Makro",name:"Makro",shop:"wholesale"},removeTags:{brand:"Makro","brand:wikidata":"Q704606","brand:wikipedia":"en:Makro",name:"Makro",shop:"wholesale"},matchScore:2,suggestion:true},"shop/wholesale/Sam's Club":{name:"Sam's Club",icon:"maki-warehouse",geometry:["point","area"],tags:{shop:"wholesale","brand:wikidata":"Q1972120"},addTags:{brand:"Sam's Club","brand:wikipedia":"en:Sam's Club","brand:wikidata":"Q1972120",name:"Sam's Club",operator:"Walmart","operator:wikidata":"Q483551","operator:wikipedia":"en:Walmart",shop:"wholesale"},removeTags:{brand:"Sam's Club","brand:wikipedia":"en:Sam's Club","brand:wikidata":"Q1972120",name:"Sam's Club",operator:"Walmart","operator:wikidata":"Q483551","operator:wikipedia":"en:Walmart",shop:"wholesale"},matchScore:2,suggestion:true},"tourism/hotel/B&B Hôtel":{name:"B&B Hôtel",icon:"maki-lodging",geometry:["point","area"],tags:{tourism:"hotel","brand:wikidata":"Q794939"},addTags:{brand:"B&B Hôtel","brand:wikidata":"Q794939","brand:wikipedia":"en:B&B Hotels",name:"B&B Hôtel",tourism:"hotel"},removeTags:{brand:"B&B Hôtel","brand:wikidata":"Q794939","brand:wikipedia":"en:B&B Hotels",name:"B&B Hôtel",tourism:"hotel"},matchScore:2,suggestion:true},"tourism/hotel/Best Western":{name:"Best Western",icon:"maki-lodging",geometry:["point","area"],tags:{tourism:"hotel","brand:wikidata":"Q830334"},addTags:{brand:"Best Western","brand:wikidata":"Q830334","brand:wikipedia":"en:Best Western",name:"Best Western",tourism:"hotel"},removeTags:{brand:"Best Western","brand:wikidata":"Q830334","brand:wikipedia":"en:Best Western",name:"Best Western",tourism:"hotel"},matchScore:2,suggestion:true},"tourism/hotel/Best Western Plus":{name:"Best Western Plus",icon:"maki-lodging",geometry:["point","area"],tags:{tourism:"hotel","brand:wikidata":"Q830334"},addTags:{brand:"Best Western","brand:wikidata":"Q830334","brand:wikipedia":"en:Best Western",name:"Best Western Plus",tourism:"hotel"},removeTags:{brand:"Best Western","brand:wikidata":"Q830334","brand:wikipedia":"en:Best Western",name:"Best Western Plus",tourism:"hotel"},matchScore:2,suggestion:true},"tourism/hotel/Campanile":{name:"Campanile",icon:"maki-lodging",geometry:["point","area"],tags:{tourism:"hotel","brand:wikidata":"Q2412064"},addTags:{brand:"Campanile","brand:wikidata":"Q2412064","brand:wikipedia":"fr:Campanile (chaîne d'hôtels)",name:"Campanile",tourism:"hotel"},removeTags:{brand:"Campanile","brand:wikidata":"Q2412064","brand:wikipedia":"fr:Campanile (chaîne d'hôtels)",name:"Campanile",tourism:"hotel"},matchScore:2,suggestion:true},"tourism/hotel/Candlewood Suites":{name:"Candlewood Suites",icon:"maki-lodging",geometry:["point","area"],tags:{tourism:"hotel","brand:wikidata":"Q5032010"},addTags:{brand:"Candlewood Suites","brand:wikidata":"Q5032010","brand:wikipedia":"en:Candlewood Suites",name:"Candlewood Suites",tourism:"hotel"},removeTags:{brand:"Candlewood Suites","brand:wikidata":"Q5032010","brand:wikipedia":"en:Candlewood Suites",name:"Candlewood Suites",tourism:"hotel"},matchScore:2,suggestion:true},"tourism/hotel/Comfort Inn":{name:"Comfort Inn",icon:"maki-lodging",geometry:["point","area"],tags:{tourism:"hotel","brand:wikidata":"Q1075788"},addTags:{brand:"Comfort Inn","brand:wikidata":"Q1075788","brand:wikipedia":"en:Choice Hotels",name:"Comfort Inn",tourism:"hotel"},removeTags:{brand:"Comfort Inn","brand:wikidata":"Q1075788","brand:wikipedia":"en:Choice Hotels",name:"Comfort Inn",tourism:"hotel"},matchScore:2,suggestion:true},"tourism/hotel/Comfort Inn & Suites":{name:"Comfort Inn & Suites",icon:"maki-lodging",geometry:["point","area"],tags:{tourism:"hotel","brand:wikidata":"Q1075788"},addTags:{brand:"Comfort Inn & Suites","brand:wikidata":"Q1075788","brand:wikipedia":"en:Choice Hotels",name:"Comfort Inn & Suites",tourism:"hotel"},removeTags:{brand:"Comfort Inn & Suites","brand:wikidata":"Q1075788","brand:wikipedia":"en:Choice Hotels",name:"Comfort Inn & Suites",tourism:"hotel"},matchScore:2,suggestion:true},"tourism/hotel/Comfort Suites":{name:"Comfort Suites",icon:"maki-lodging",geometry:["point","area"],tags:{tourism:"hotel","brand:wikidata":"Q1075788"},addTags:{brand:"Comfort Suites","brand:wikidata":"Q1075788","brand:wikipedia":"en:Choice Hotels",name:"Comfort Suites",tourism:"hotel"},removeTags:{brand:"Comfort Suites","brand:wikidata":"Q1075788","brand:wikipedia":"en:Choice Hotels",name:"Comfort Suites",tourism:"hotel"},matchScore:2,suggestion:true},"tourism/hotel/Country Inn & Suites":{name:"Country Inn & Suites",icon:"maki-lodging",geometry:["point","area"],tags:{tourism:"hotel","brand:wikidata":"Q5177332"},addTags:{brand:"Country Inn & Suites","brand:wikidata":"Q5177332","brand:wikipedia":"en:Country Inns & Suites",name:"Country Inn & Suites",tourism:"hotel"},removeTags:{brand:"Country Inn & Suites","brand:wikidata":"Q5177332","brand:wikipedia":"en:Country Inns & Suites",name:"Country Inn & Suites",tourism:"hotel"},matchScore:2,suggestion:true},"tourism/hotel/Courtyard by Marriott":{name:"Courtyard by Marriott",icon:"maki-lodging",geometry:["point","area"],tags:{tourism:"hotel","brand:wikidata":"Q1053170"},addTags:{brand:"Courtyard by Marriott","brand:wikidata":"Q1053170","brand:wikipedia":"en:Courtyard by Marriott",name:"Courtyard by Marriott",tourism:"hotel"},removeTags:{brand:"Courtyard by Marriott","brand:wikidata":"Q1053170","brand:wikipedia":"en:Courtyard by Marriott",name:"Courtyard by Marriott",tourism:"hotel"},matchScore:2,suggestion:true},"tourism/hotel/Crowne Plaza":{name:"Crowne Plaza",icon:"maki-lodging",geometry:["point","area"],tags:{tourism:"hotel","brand:wikidata":"Q2746220"},addTags:{brand:"Crowne Plaza","brand:wikidata":"Q2746220","brand:wikipedia":"en:Crowne Plaza",name:"Crowne Plaza",tourism:"hotel"},removeTags:{brand:"Crowne Plaza","brand:wikidata":"Q2746220","brand:wikipedia":"en:Crowne Plaza",name:"Crowne Plaza",tourism:"hotel"},matchScore:2,suggestion:true},"tourism/hotel/Days Inn":{name:"Days Inn",icon:"maki-lodging",geometry:["point","area"],tags:{tourism:"hotel","brand:wikidata":"Q1047239"},addTags:{brand:"Days Inn","brand:wikidata":"Q1047239","brand:wikipedia":"en:Days Inn",name:"Days Inn",tourism:"hotel"},removeTags:{brand:"Days Inn","brand:wikidata":"Q1047239","brand:wikipedia":"en:Days Inn",name:"Days Inn",tourism:"hotel"},matchScore:2,suggestion:true},"tourism/hotel/Embassy Suites":{name:"Embassy Suites",icon:"maki-lodging",geometry:["point","area"],tags:{tourism:"hotel","brand:wikidata":"Q5369524"},addTags:{brand:"Embassy Suites","brand:wikidata":"Q5369524","brand:wikipedia":"en:Embassy Suites by Hilton",name:"Embassy Suites",tourism:"hotel"},removeTags:{brand:"Embassy Suites","brand:wikidata":"Q5369524","brand:wikipedia":"en:Embassy Suites by Hilton",name:"Embassy Suites",tourism:"hotel"},matchScore:2,suggestion:true},"tourism/hotel/Extended Stay America":{name:"Extended Stay America",icon:"maki-lodging",geometry:["point","area"],tags:{tourism:"hotel","brand:wikidata":"Q5421850"},addTags:{brand:"Extended Stay America","brand:wikidata":"Q5421850","brand:wikipedia":"en:Extended Stay America",name:"Extended Stay America",tourism:"hotel"},removeTags:{brand:"Extended Stay America","brand:wikidata":"Q5421850","brand:wikipedia":"en:Extended Stay America",name:"Extended Stay America",tourism:"hotel"},matchScore:2,suggestion:true},"tourism/hotel/Fairfield Inn":{name:"Fairfield Inn",icon:"maki-lodging",geometry:["point","area"],tags:{tourism:"hotel","brand:wikidata":"Q5430314"},addTags:{brand:"Fairfield Inn","brand:wikidata":"Q5430314","brand:wikipedia":"en:Fairfield Inn by Marriott",name:"Fairfield Inn",tourism:"hotel"},removeTags:{brand:"Fairfield Inn","brand:wikidata":"Q5430314","brand:wikipedia":"en:Fairfield Inn by Marriott",name:"Fairfield Inn",tourism:"hotel"},matchScore:2,suggestion:true},"tourism/hotel/Formule 1":{name:"Formule 1",icon:"maki-lodging",geometry:["point","area"],tags:{tourism:"hotel","brand:wikidata":"Q1630895"},addTags:{brand:"Formule 1","brand:wikidata":"Q1630895","brand:wikipedia":"en:Hotel Formule 1",name:"Formule 1",tourism:"hotel"},removeTags:{brand:"Formule 1","brand:wikidata":"Q1630895","brand:wikipedia":"en:Hotel Formule 1",name:"Formule 1",tourism:"hotel"},matchScore:2,suggestion:true},"tourism/hotel/Hampton Inn":{name:"Hampton Inn",icon:"maki-lodging",geometry:["point","area"],tags:{tourism:"hotel","brand:wikidata":"Q5646230"},addTags:{brand:"Hampton Inn","brand:wikidata":"Q5646230","brand:wikipedia":"en:Hampton by Hilton",name:"Hampton Inn",tourism:"hotel"},removeTags:{brand:"Hampton Inn","brand:wikidata":"Q5646230","brand:wikipedia":"en:Hampton by Hilton",name:"Hampton Inn",tourism:"hotel"},matchScore:2,suggestion:true},"tourism/hotel/Hilton":{name:"Hilton",icon:"maki-lodging",geometry:["point","area"],tags:{tourism:"hotel","brand:wikidata":"Q598884"},addTags:{brand:"Hilton","brand:wikidata":"Q598884","brand:wikipedia":"en:Hilton Hotels & Resorts",name:"Hilton",tourism:"hotel"},removeTags:{brand:"Hilton","brand:wikidata":"Q598884","brand:wikipedia":"en:Hilton Hotels & Resorts",name:"Hilton",tourism:"hotel"},matchScore:2,suggestion:true},"tourism/hotel/Hilton Garden Inn":{name:"Hilton Garden Inn",icon:"maki-lodging",geometry:["point","area"],tags:{tourism:"hotel","brand:wikidata":"Q1162859"},addTags:{brand:"Hilton Garden Inn","brand:wikidata":"Q1162859","brand:wikipedia":"en:Hilton Garden Inn",name:"Hilton Garden Inn",tourism:"hotel"},removeTags:{brand:"Hilton Garden Inn","brand:wikidata":"Q1162859","brand:wikipedia":"en:Hilton Garden Inn",name:"Hilton Garden Inn",tourism:"hotel"},matchScore:2,suggestion:true},"tourism/hotel/Holiday Inn":{name:"Holiday Inn",icon:"maki-lodging",geometry:["point","area"],tags:{tourism:"hotel","brand:wikidata":"Q2717882"},addTags:{brand:"Holiday Inn","brand:wikidata":"Q2717882","brand:wikipedia":"en:Holiday Inn",name:"Holiday Inn",tourism:"hotel"},removeTags:{brand:"Holiday Inn","brand:wikidata":"Q2717882","brand:wikipedia":"en:Holiday Inn",name:"Holiday Inn",tourism:"hotel"},matchScore:2,suggestion:true},"tourism/hotel/Holiday Inn Express":{name:"Holiday Inn Express",icon:"maki-lodging",geometry:["point","area"],tags:{tourism:"hotel","brand:wikidata":"Q5880423"},addTags:{brand:"Holiday Inn Express","brand:wikidata":"Q5880423","brand:wikipedia":"en:Holiday Inn Express",name:"Holiday Inn Express",tourism:"hotel"},removeTags:{brand:"Holiday Inn Express","brand:wikidata":"Q5880423","brand:wikipedia":"en:Holiday Inn Express",name:"Holiday Inn Express",tourism:"hotel"},matchScore:2,suggestion:true},"tourism/hotel/Holiday Inn Express & Suites":{name:"Holiday Inn Express & Suites",icon:"maki-lodging",geometry:["point","area"],tags:{tourism:"hotel","brand:wikidata":"Q5880423"},addTags:{brand:"Holiday Inn Express & Suites","brand:wikidata":"Q5880423","brand:wikipedia":"en:Holiday Inn Express",name:"Holiday Inn Express & Suites",tourism:"hotel"},removeTags:{brand:"Holiday Inn Express & Suites","brand:wikidata":"Q5880423","brand:wikipedia":"en:Holiday Inn Express",name:"Holiday Inn Express & Suites",tourism:"hotel"},matchScore:2,suggestion:true},"tourism/hotel/Homewood Suites":{name:"Homewood Suites",icon:"maki-lodging",geometry:["point","area"],tags:{tourism:"hotel","brand:wikidata":"Q5890701"},addTags:{brand:"Homewood Suites","brand:wikidata":"Q5890701","brand:wikipedia":"en:Homewood Suites by Hilton",name:"Homewood Suites",tourism:"hotel"},removeTags:{brand:"Homewood Suites","brand:wikidata":"Q5890701","brand:wikipedia":"en:Homewood Suites by Hilton",name:"Homewood Suites",tourism:"hotel"},matchScore:2,suggestion:true},"tourism/hotel/Ibis":{name:"Ibis",icon:"maki-lodging",geometry:["point","area"],tags:{tourism:"hotel","brand:wikidata":"Q920166"},addTags:{brand:"Ibis","brand:wikidata":"Q920166","brand:wikipedia":"en:Ibis (hotel)",name:"Ibis",tourism:"hotel"},removeTags:{brand:"Ibis","brand:wikidata":"Q920166","brand:wikipedia":"en:Ibis (hotel)",name:"Ibis",tourism:"hotel"},matchScore:2,suggestion:true},"tourism/hotel/Ibis Budget":{name:"Ibis Budget",icon:"maki-lodging",geometry:["point","area"],tags:{tourism:"hotel","brand:wikidata":"Q1458135"},addTags:{brand:"Ibis Budget","brand:wikidata":"Q1458135","brand:wikipedia":"en:Ibis Budget",name:"Ibis Budget",tourism:"hotel"},removeTags:{brand:"Ibis Budget","brand:wikidata":"Q1458135","brand:wikipedia":"en:Ibis Budget",name:"Ibis Budget",tourism:"hotel"},matchScore:2,suggestion:true},"tourism/hotel/Ibis Hotel":{name:"Ibis Hotel",icon:"maki-lodging",geometry:["point","area"],tags:{tourism:"hotel","brand:wikidata":"Q920166"},addTags:{brand:"Ibis Hotel","brand:wikidata":"Q920166","brand:wikipedia":"en:Ibis (hotel)",name:"Ibis Hotel",tourism:"hotel"},removeTags:{brand:"Ibis Hotel","brand:wikidata":"Q920166","brand:wikipedia":"en:Ibis (hotel)",name:"Ibis Hotel",tourism:"hotel"},matchScore:2,suggestion:true},"tourism/hotel/Ibis Styles":{name:"Ibis Styles",icon:"maki-lodging",geometry:["point","area"],tags:{tourism:"hotel","brand:wikidata":"Q3147425"},addTags:{brand:"Ibis Styles","brand:wikidata":"Q3147425","brand:wikipedia":"en:Ibis Styles",name:"Ibis Styles",tourism:"hotel"},removeTags:{brand:"Ibis Styles","brand:wikidata":"Q3147425","brand:wikipedia":"en:Ibis Styles",name:"Ibis Styles",tourism:"hotel"},matchScore:2,suggestion:true},"tourism/hotel/Kyriad":{name:"Kyriad",icon:"maki-lodging",geometry:["point","area"],tags:{tourism:"hotel","brand:wikidata":"Q11751808"},addTags:{brand:"Kyriad","brand:wikidata":"Q11751808","brand:wikipedia":"pl:Kyriad",name:"Kyriad",tourism:"hotel"},removeTags:{brand:"Kyriad","brand:wikidata":"Q11751808","brand:wikipedia":"pl:Kyriad",name:"Kyriad",tourism:"hotel"},matchScore:2,suggestion:true},"tourism/hotel/La Quinta":{name:"La Quinta",icon:"maki-lodging",geometry:["point","area"],tags:{tourism:"hotel","brand:wikidata":"Q6464734"},addTags:{brand:"La Quinta","brand:wikidata":"Q6464734","brand:wikipedia":"en:La Quinta Inns & Suites",name:"La Quinta",tourism:"hotel"},removeTags:{brand:"La Quinta","brand:wikidata":"Q6464734","brand:wikipedia":"en:La Quinta Inns & Suites",name:"La Quinta",tourism:"hotel"},matchScore:2,suggestion:true},"tourism/hotel/Marriott":{name:"Marriott",icon:"maki-lodging",geometry:["point","area"],tags:{tourism:"hotel","brand:wikidata":"Q1141173"},addTags:{brand:"Marriott","brand:wikidata":"Q1141173","brand:wikipedia":"en:Marriott International",name:"Marriott",tourism:"hotel"},removeTags:{brand:"Marriott","brand:wikidata":"Q1141173","brand:wikipedia":"en:Marriott International",name:"Marriott",tourism:"hotel"},matchScore:2,suggestion:true},"tourism/hotel/Mercure":{name:"Mercure",icon:"maki-lodging",geometry:["point","area"],tags:{tourism:"hotel","brand:wikidata":"Q1709809"},addTags:{brand:"Mercure","brand:wikidata":"Q1709809","brand:wikipedia":"en:Mercure (hotel)",name:"Mercure",tourism:"hotel"},removeTags:{brand:"Mercure","brand:wikidata":"Q1709809","brand:wikipedia":"en:Mercure (hotel)",name:"Mercure",tourism:"hotel"},matchScore:2,suggestion:true},"tourism/hotel/Novotel":{name:"Novotel",icon:"maki-lodging",geometry:["point","area"],tags:{tourism:"hotel","brand:wikidata":"Q420545"},addTags:{brand:"Novotel","brand:wikidata":"Q420545","brand:wikipedia":"en:Novotel",name:"Novotel",tourism:"hotel"},removeTags:{brand:"Novotel","brand:wikidata":"Q420545","brand:wikipedia":"en:Novotel",name:"Novotel",tourism:"hotel"},matchScore:2,suggestion:true},"tourism/hotel/Premier Inn":{name:"Premier Inn",icon:"maki-lodging",geometry:["point","area"],tags:{tourism:"hotel","brand:wikidata":"Q2108626"},addTags:{brand:"Premier Inn","brand:wikidata":"Q2108626","brand:wikipedia":"en:Premier Inn",name:"Premier Inn",tourism:"hotel"},removeTags:{brand:"Premier Inn","brand:wikidata":"Q2108626","brand:wikipedia":"en:Premier Inn",name:"Premier Inn",tourism:"hotel"},matchScore:2,suggestion:true},"tourism/hotel/Première Classe":{name:"Première Classe",icon:"maki-lodging",geometry:["point","area"],tags:{tourism:"hotel","brand:wikidata":"Q5964551"},addTags:{brand:"Première Classe","brand:wikidata":"Q5964551","brand:wikipedia":"en:Hôtel Première Classe",name:"Première Classe",tourism:"hotel"},removeTags:{brand:"Première Classe","brand:wikidata":"Q5964551","brand:wikipedia":"en:Hôtel Première Classe",name:"Première Classe",tourism:"hotel"},matchScore:2,suggestion:true},"tourism/hotel/Quality Inn":{name:"Quality Inn",icon:"maki-lodging",geometry:["point","area"],tags:{tourism:"hotel","brand:wikidata":"Q1075788"},addTags:{brand:"Quality Inn","brand:wikidata":"Q1075788","brand:wikipedia":"en:Choice Hotels",name:"Quality Inn",tourism:"hotel"},removeTags:{brand:"Quality Inn","brand:wikidata":"Q1075788","brand:wikipedia":"en:Choice Hotels",name:"Quality Inn",tourism:"hotel"},matchScore:2,suggestion:true},"tourism/hotel/Quality Inn & Suites":{name:"Quality Inn & Suites",icon:"maki-lodging",geometry:["point","area"],tags:{tourism:"hotel","brand:wikidata":"Q1075788"},addTags:{brand:"Quality Inn & Suites","brand:wikidata":"Q1075788","brand:wikipedia":"en:Choice Hotels",name:"Quality Inn & Suites",tourism:"hotel"},removeTags:{brand:"Quality Inn & Suites","brand:wikidata":"Q1075788","brand:wikipedia":"en:Choice Hotels",name:"Quality Inn & Suites",tourism:"hotel"},matchScore:2,suggestion:true},"tourism/hotel/Ramada":{name:"Ramada",icon:"maki-lodging",geometry:["point","area"],tags:{tourism:"hotel","brand:wikidata":"Q1502859"},addTags:{brand:"Ramada","brand:wikidata":"Q1502859","brand:wikipedia":"en:Ramada",name:"Ramada",tourism:"hotel"},removeTags:{brand:"Ramada","brand:wikidata":"Q1502859","brand:wikipedia":"en:Ramada",name:"Ramada",tourism:"hotel"},matchScore:2,suggestion:true},"tourism/hotel/Red Roof Inn":{name:"Red Roof Inn",icon:"maki-lodging",geometry:["point","area"],tags:{tourism:"hotel","brand:wikidata":"Q7304949"},addTags:{brand:"Red Roof Inn","brand:wikidata":"Q7304949","brand:wikipedia":"en:Red Roof Inn",name:"Red Roof Inn",tourism:"hotel"},removeTags:{brand:"Red Roof Inn","brand:wikidata":"Q7304949","brand:wikipedia":"en:Red Roof Inn",name:"Red Roof Inn",tourism:"hotel"},matchScore:2,suggestion:true},"tourism/hotel/Residence Inn":{name:"Residence Inn",icon:"maki-lodging",geometry:["point","area"],tags:{tourism:"hotel","brand:wikidata":"Q7315394"},addTags:{brand:"Residence Inn","brand:wikidata":"Q7315394","brand:wikipedia":"en:Residence Inn by Marriott",name:"Residence Inn",tourism:"hotel"},removeTags:{brand:"Residence Inn","brand:wikidata":"Q7315394","brand:wikipedia":"en:Residence Inn by Marriott",name:"Residence Inn",tourism:"hotel"},matchScore:2,suggestion:true},"tourism/hotel/Sheraton":{name:"Sheraton",icon:"maki-lodging",geometry:["point","area"],tags:{tourism:"hotel","brand:wikidata":"Q634831"},addTags:{brand:"Sheraton","brand:wikidata":"Q634831","brand:wikipedia":"en:Sheraton Hotels and Resorts",name:"Sheraton",tourism:"hotel"},removeTags:{brand:"Sheraton","brand:wikidata":"Q634831","brand:wikipedia":"en:Sheraton Hotels and Resorts",name:"Sheraton",tourism:"hotel"},matchScore:2,suggestion:true},"tourism/hotel/Sleep Inn":{name:"Sleep Inn",icon:"maki-lodging",geometry:["point","area"],tags:{tourism:"hotel","brand:wikidata":"Q1075788"},addTags:{brand:"Sleep Inn","brand:wikidata":"Q1075788","brand:wikipedia":"en:Choice Hotels",name:"Sleep Inn",tourism:"hotel"},removeTags:{brand:"Sleep Inn","brand:wikidata":"Q1075788","brand:wikipedia":"en:Choice Hotels",name:"Sleep Inn",tourism:"hotel"},matchScore:2,suggestion:true},"tourism/hotel/Staybridge Suites":{name:"Staybridge Suites",icon:"maki-lodging",geometry:["point","area"],tags:{tourism:"hotel","brand:wikidata":"Q7605116"},addTags:{brand:"Staybridge Suites","brand:wikidata":"Q7605116","brand:wikipedia":"en:Staybridge Suites",name:"Staybridge Suites",tourism:"hotel"},removeTags:{brand:"Staybridge Suites","brand:wikidata":"Q7605116","brand:wikipedia":"en:Staybridge Suites",name:"Staybridge Suites",tourism:"hotel"},matchScore:2,suggestion:true},"tourism/hotel/Travelodge":{name:"Travelodge",icon:"maki-lodging",geometry:["point","area"],tags:{tourism:"hotel","brand:wikidata":"Q7836087"},addTags:{brand:"Travelodge","brand:wikidata":"Q7836087","brand:wikipedia":"en:Travelodge",name:"Travelodge",tourism:"hotel"},removeTags:{brand:"Travelodge","brand:wikidata":"Q7836087","brand:wikipedia":"en:Travelodge",name:"Travelodge",tourism:"hotel"},matchScore:2,suggestion:true},"tourism/hotel/東横イン":{name:"東横イン",icon:"maki-lodging",geometry:["point","area"],tags:{tourism:"hotel","brand:wikidata":"Q1320541"},addTags:{brand:"東横イン","brand:en":"Toyoko Inn","brand:wikidata":"Q1320541","brand:wikipedia":"en:Toyoko Inn",name:"東横イン","name:en":"Toyoko Inn",tourism:"hotel"},removeTags:{brand:"東横イン","brand:en":"Toyoko Inn","brand:wikidata":"Q1320541","brand:wikipedia":"en:Toyoko Inn",name:"東横イン","name:en":"Toyoko Inn",tourism:"hotel"},matchScore:2,suggestion:true},"tourism/motel/Econo Lodge":{name:"Econo Lodge",icon:"maki-lodging",geometry:["point","area"],tags:{tourism:"motel","brand:wikidata":"Q5333330"},addTags:{brand:"Econo Lodge","brand:wikidata":"Q5333330","brand:wikipedia":"en:Econo Lodge",name:"Econo Lodge",tourism:"motel"},removeTags:{brand:"Econo Lodge","brand:wikidata":"Q5333330","brand:wikipedia":"en:Econo Lodge",name:"Econo Lodge",tourism:"motel"},matchScore:2,suggestion:true},"tourism/motel/Motel 6":{name:"Motel 6",icon:"maki-lodging",geometry:["point","area"],tags:{tourism:"motel","brand:wikidata":"Q2188884"},addTags:{brand:"Motel 6","brand:wikidata":"Q2188884","brand:wikipedia":"en:Motel 6",name:"Motel 6",tourism:"motel"},removeTags:{brand:"Motel 6","brand:wikidata":"Q2188884","brand:wikipedia":"en:Motel 6",name:"Motel 6",tourism:"motel"},matchScore:2,suggestion:true},"tourism/motel/Rodeway Inn":{name:"Rodeway Inn",icon:"maki-lodging",geometry:["point","area"],tags:{tourism:"motel","brand:wikidata":"Q7356709"},addTags:{brand:"Rodeway Inn","brand:wikidata":"Q7356709","brand:wikipedia":"en:Rodeway Inn",name:"Rodeway Inn",tourism:"motel"},removeTags:{brand:"Rodeway Inn","brand:wikidata":"Q7356709","brand:wikipedia":"en:Rodeway Inn",name:"Rodeway Inn",tourism:"motel"},matchScore:2,suggestion:true},"tourism/motel/Super 8":{name:"Super 8",icon:"maki-lodging",geometry:["point","area"],tags:{tourism:"motel","brand:wikidata":"Q5364003"},addTags:{brand:"Super 8","brand:wikidata":"Q5364003","brand:wikipedia":"en:Super 8 Motels",name:"Super 8",tourism:"motel"},removeTags:{brand:"Super 8","brand:wikidata":"Q5364003","brand:wikipedia":"en:Super 8 Motels",name:"Super 8",tourism:"motel"},matchScore:2,suggestion:true}};
+  var presets = {aerialway:{fields:["aerialway"],geometry:["point","vertex","line"],tags:{aerialway:"*"},searchable:false,name:"Aerialway"},aeroway:{icon:"maki-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"},attraction:{icon:"maki-star",fields:["name","attraction","operator","opening_hours"],moreFields:["opening_hours","fee","payment_multi","address","website","phone","email","fax"],geometry:["point","vertex","line","area"],tags:{attraction:"*"},searchable:false,name:"Attraction"},circular:{geometry:["vertex","line"],fields:["name"],tags:{junction:"circular"},name:"Traffic Circle",searchable:false},embankment:{geometry:["line"],tags:{embankment:"yes"},name:"Embankment",matchScore:0.2,searchable:false},highway:{fields:["name","highway"],geometry:["point","vertex","line","area"],tags:{highway:"*"},searchable:false,name:"Highway"},landuse:{fields:["name","landuse"],geometry:["area"],tags:{landuse:"*"},matchScore:0.9,searchable:false,name:"Land Use"},leisure:{icon:"maki-pitch",fields:["name","leisure"],geometry:["point","vertex","area"],tags:{leisure:"*"},searchable:false,name:"Leisure"},man_made:{icon:"temaki-storage_tank",fields:["name","man_made"],moreFields:["material"],geometry:["point","vertex","line","area"],tags:{man_made:"*"},searchable:false,name:"Man Made"},natural:{icon:"maki-natural",fields:["name","natural"],geometry:["point","vertex","area"],tags:{natural:"*"},searchable:false,name:"Natural"},place:{fields:["name","place"],geometry:["point","vertex","area"],tags:{place:"*"},searchable:false,name:"Place"},power:{geometry:["point","vertex","line","area"],tags:{power:"*"},fields:["power"],moreFields:["material"],searchable:false,name:"Power"},railway:{fields:["railway"],geometry:["point","vertex","line","area"],tags:{railway:"*"},searchable:false,name:"Railway"},roundabout:{geometry:["vertex","line"],fields:["name"],tags:{junction:"roundabout"},name:"Roundabout",searchable:false},seamark:{icon:"maki-harbor",fields:["seamark/type"],geometry:["point","vertex","line","area"],tags:{"seamark:type":"*"},searchable:false,name:"Seamark"},tourism:{icon:"maki-attraction",fields:["name","tourism"],geometry:["point","vertex","area"],tags:{tourism:"*"},searchable:false,name:"Tourism"},waterway:{fields:["name","waterway"],geometry:["point","vertex","line","area"],tags:{waterway:"*"},searchable:false,name:"Waterway"},address:{fields:["address"],geometry:["point","vertex","area"],tags:{"addr:*":"*"},addTags:{},removeTags:{},reference:{key:"addr"},name:"Address",matchScore:0.15},"advertising/billboard":{fields:["direction","lit"],geometry:["point","vertex","line"],tags:{advertising:"billboard"},name:"Billboard"},"advertising/column":{icon:"temaki-storage_tank",fields:["lit"],geometry:["point","area"],tags:{advertising:"column"},name:"Advertising Column"},"aerialway/station":{icon:"maki-aerialway",geometry:["point","vertex","area"],fields:["aerialway/access","aerialway/summer/access","elevation","building_area"],tags:{aerialway:"station"},name:"Aerialway Station",searchable:false},"aerialway/cable_car":{geometry:["line"],terms:["tramway","ropeway"],fields:["name","aerialway/occupancy","aerialway/capacity","aerialway/duration","aerialway/heating"],tags:{aerialway:"cable_car"},name:"Cable Car"},"aerialway/chair_lift":{icon:"temaki-chairlift",geometry:["line"],fields:["name","aerialway/occupancy","aerialway/capacity","aerialway/duration","aerialway/bubble","aerialway/heating"],tags:{aerialway:"chair_lift"},name:"Chair Lift"},"aerialway/drag_lift":{geometry:["line"],fields:["name","aerialway/capacity","aerialway/duration"],tags:{aerialway:"drag_lift"},name:"Drag Lift"},"aerialway/gondola":{geometry:["line"],fields:["name","aerialway/occupancy","aerialway/capacity","aerialway/duration","aerialway/bubble","aerialway/heating"],tags:{aerialway:"gondola"},name:"Gondola"},"aerialway/goods":{geometry:["line"],fields:["name","aerialway/capacity","aerialway/duration"],tags:{aerialway:"goods"},name:"Goods Aerialway"},"aerialway/magic_carpet":{geometry:["line"],fields:["name","aerialway/capacity","aerialway/duration","aerialway/heating"],tags:{aerialway:"magic_carpet"},name:"Magic Carpet Lift"},"aerialway/mixed_lift":{geometry:["line"],fields:["name","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:["name","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:["name","aerialway/capacity","aerialway/duration"],tags:{aerialway:"rope_tow"},name:"Rope Tow Lift"},"aerialway/t-bar":{geometry:["line"],fields:["name","aerialway/capacity","aerialway/duration"],terms:["tbar"],tags:{aerialway:"t-bar"},name:"T-bar Lift"},"aeroway/aerodrome":{icon:"maki-airport",geometry:["point","area"],fields:["name","iata","icao","operator","internet_access","internet_access/fee","internet_access/ssid"],terms:["aerodrome","aeroway","airplane","airport","jet","plane"],tags:{aeroway:"aerodrome"},matchScore:0.9,name:"Airport"},"aeroway/apron":{icon:"maki-airport",geometry:["area"],terms:["ramp"],fields:["ref","surface"],tags:{aeroway:"apron"},name:"Apron"},"aeroway/gate":{icon:"maki-airport",geometry:["point"],fields:["ref_aeroway_gate"],tags:{aeroway:"gate"},name:"Airport Gate"},"aeroway/hangar":{geometry:["area"],fields:["name","building_area"],tags:{aeroway:"hangar"},name:"Hangar"},"aeroway/helipad":{icon:"maki-heliport",geometry:["point","area"],fields:["ref"],terms:["helicopter","helipad","heliport"],tags:{aeroway:"helipad"},name:"Helipad"},"aeroway/runway":{icon:"fas-plane-departure",geometry:["line","area"],terms:["landing strip"],fields:["ref_runway","surface","length","width"],tags:{aeroway:"runway"},name:"Runway"},"aeroway/taxiway":{geometry:["line"],fields:["ref_taxiway","surface"],tags:{aeroway:"taxiway"},name:"Taxiway"},"aeroway/terminal":{icon:"maki-airport",geometry:["point","area"],terms:["airport","aerodrome"],fields:["name","operator","building_area"],moreFields:["wheelchair","smoking"],tags:{aeroway:"terminal"},name:"Airport Terminal"},"allotments/plot":{geometry:["area"],fields:["name","ref"],tags:{allotments:"plot"},reference:{key:"allotments",value:"plot"},name:"Community Garden Plot"},"amenity/bus_station":{icon:"maki-bus",fields:["name","building_area","operator","internet_access","internet_access/fee","internet_access/ssid"],geometry:["point","area"],tags:{amenity:"bus_station"},name:"Bus Station / Terminal",searchable:false},"amenity/coworking_space":{icon:"maki-commercial",fields:["name","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/ferry_terminal":{icon:"maki-ferry",fields:["name","network","operator","address","building_area"],geometry:["point","vertex","area"],terms:[],tags:{amenity:"ferry_terminal"},name:"Ferry Station / Terminal",searchable:false},"amenity/nursing_home":{icon:"maki-wheelchair",fields:["name","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/recycling":{icon:"maki-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",searchable:false},"amenity/register_office":{icon:"maki-town-hall",fields:["name","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/scrapyard":{icon:"maki-car",fields:["name","operator","address","opening_hours"],geometry:["point","area"],tags:{amenity:"scrapyard"},reference:{key:"industrial",value:"scrap_yard"},name:"Scrap Yard",searchable:false},"amenity/swimming_pool":{icon:"maki-swimming",geometry:["point","vertex","area"],tags:{amenity:"swimming_pool"},reference:{key:"leisure",value:"swimming_pool"},name:"Swimming Pool",searchable:false},"amenity/animal_boarding":{icon:"maki-veterinary",fields:["name","operator","address","building_area","opening_hours","animal_boarding"],moreFields:["payment_multi","website","phone","email","fax","wheelchair"],geometry:["point","area"],terms:["boarding","cat","cattery","dog","horse","kennel","kitten","pet","pet boarding","pet care","pet hotel","puppy","reptile"],tags:{amenity:"animal_boarding"},name:"Animal Boarding Facility"},"amenity/animal_breeding":{icon:"maki-veterinary",fields:["name","operator","address","building_area","opening_hours","animal_breeding"],moreFields:["website","phone","email","fax","wheelchair"],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:"maki-veterinary",fields:["name","operator","address","building_area","opening_hours","animal_shelter"],moreFields:["website","phone","email","fax","wheelchair"],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:"maki-theatre",fields:["name","address","building_area","opening_hours","website"],moreFields:["fee","payment_multi","website","phone","email","fax","wheelchair"],geometry:["point","area"],terms:[],tags:{amenity:"arts_centre"},name:"Arts Center"},"amenity/atm":{icon:"maki-bank",fields:["operator","network","cash_in","currency_multi","drive_through"],moreFields:["name","brand","lit","opening_hours","wheelchair","covered"],geometry:["point","vertex"],terms:["money","cash","machine"],tags:{amenity:"atm"},name:"ATM"},"amenity/bank":{icon:"maki-bank",fields:["name","operator","address","building_area","atm","drive_through"],moreFields:["opening_hours","currency_multi","website","phone","email","fax","wheelchair"],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:"maki-bar",fields:["name","address","building_area","outdoor_seating","brewery"],moreFields:["smoking","opening_hours","payment_multi","website","phone","email","fax","wheelchair"],geometry:["point","area"],terms:["dive","beer","bier","booze"],tags:{amenity:"bar"},name:"Bar"},"amenity/bbq":{icon:"maki-bbq",fields:["covered","fuel","access_simple"],moreFields:["lit"],geometry:["point"],terms:["bbq","grill"],tags:{amenity:"bbq"},name:"Barbecue/Grill"},"amenity/bench":{icon:"temaki-bench",fields:["backrest","material","seats","colour"],moreFields:["access_simple","inscription","lit"],geometry:["point","vertex","line"],terms:["seat"],tags:{amenity:"bench"},name:"Bench"},"amenity/bicycle_parking":{icon:"maki-bicycle",fields:["bicycle_parking","capacity","operator","covered","access_simple","fee"],moreFields:["payment_multi","covered"],geometry:["point","vertex","area"],terms:["bike"],tags:{amenity:"bicycle_parking"},name:"Bicycle Parking"},"amenity/bicycle_rental":{icon:"maki-bicycle",fields:["capacity","network","operator","fee","payment_multi"],moreFields:["opening_hours","address","website","phone","email","fax","wheelchair","covered"],geometry:["point","vertex","area"],terms:["bike"],tags:{amenity:"bicycle_rental"},name:"Bicycle Rental"},"amenity/bicycle_repair_station":{icon:"maki-bicycle",fields:["operator","brand","opening_hours","fee","service/bicycle"],moreFields:["payment_multi","covered"],geometry:["point","vertex"],terms:["bike","repair","chain","pump"],tags:{amenity:"bicycle_repair_station"},name:"Bicycle Repair Tool Stand"},"amenity/biergarten":{icon:"maki-beer",fields:["name","address","building","outdoor_seating","brewery"],moreFields:["{amenity/bar}"],geometry:["point","area"],tags:{amenity:"biergarten"},terms:["beer","bier","booze"],name:"Biergarten"},"amenity/boat_rental":{icon:"temaki-boating",fields:["name","operator","fee","payment_multi"],moreFields:["address","website","phone","email","fax","wheelchair"],geometry:["point","area"],tags:{amenity:"boat_rental"},name:"Boat Rental"},"amenity/bureau_de_change":{icon:"maki-bank",fields:["name","operator","payment_multi","currency_multi","address","building_area"],moreFields:["opening_hours","website","phone","email","fax","wheelchair"],geometry:["point","area"],terms:["bureau de change","money changer"],tags:{amenity:"bureau_de_change"},name:"Currency Exchange"},"amenity/cafe":{icon:"maki-cafe",fields:["name","cuisine","address","building_area","outdoor_seating"],moreFields:["diet_multi","takeaway","delivery","capacity","opening_hours","smoking","payment_multi","internet_access","internet_access/fee","internet_access/ssid","website","phone","email","fax","wheelchair"],geometry:["point","area"],terms:["bistro","coffee","tea"],tags:{amenity:"cafe"},name:"Cafe"},"amenity/car_pooling":{icon:"maki-car",fields:["name","operator","capacity","address","opening_hours","lit"],moreFields:["website","phone","email","fax","wheelchair"],geometry:["point","area"],tags:{amenity:"car_pooling"},name:"Car Pooling"},"amenity/car_rental":{icon:"maki-car-rental",fields:["name","operator","address","opening_hours","payment_multi"],moreFields:["brand","website","phone","email","fax","wheelchair"],geometry:["point","area"],tags:{amenity:"car_rental"},name:"Car Rental"},"amenity/car_sharing":{icon:"maki-car",fields:["name","operator","capacity","address","payment_multi","supervised"],moreFields:["lit","website","phone","email","fax","wheelchair"],geometry:["point","area"],tags:{amenity:"car_sharing"},name:"Car Sharing"},"amenity/car_wash":{icon:"temaki-car_wash",fields:["address","building_area","opening_hours","payment_multi"],moreFields:["website","phone","email","fax","wheelchair"],geometry:["point","area"],tags:{amenity:"car_wash"},name:"Car Wash"},"amenity/casino":{icon:"maki-casino",fields:["name","operator","address","building_area","opening_hours","smoking"],moreFields:["payment_multi","website","phone","email","fax","wheelchair"],geometry:["point","area"],terms:["gambling","roulette","craps","poker","blackjack"],tags:{amenity:"casino"},name:"Casino"},"amenity/charging_station":{icon:"fas-charging-station",fields:["name","operator","capacity","fee","payment_multi"],geometry:["point"],tags:{amenity:"charging_station"},terms:["EV","Electric Vehicle","Supercharger"],name:"Charging Station"},"amenity/childcare":{icon:"maki-school",fields:["name","operator","address","building_area","opening_hours"],moreFields:["payment_multi","website","phone","email","fax","wheelchair"],geometry:["point","area"],terms:["daycare","orphanage","playgroup"],tags:{amenity:"childcare"},name:"Nursery/Childcare"},"amenity/cinema":{icon:"maki-cinema",fields:["name","address","building_area","opening_hours","payment_multi"],moreFields:["website","phone","email","fax","wheelchair"],geometry:["point","area"],terms:["drive-in","film","flick","movie","theater","picture","show","screen"],tags:{amenity:"cinema"},name:"Cinema"},"amenity/clinic":{icon:"maki-doctor",fields:["name","operator","healthcare/speciality","address","building_area","opening_hours"],moreFields:["payment_multi","website","phone","email","fax","wheelchair"],geometry:["point","area"],terms:["medical","urgentcare"],tags:{amenity:"clinic"},addTags:{amenity:"clinic",healthcare:"clinic"},removeTags:{amenity:"clinic",healthcare:"clinic"},reference:{key:"amenity",value:"clinic"},name:"Clinic"},"amenity/clinic/abortion":{icon:"maki-hospital",fields:["name","operator","healthcare/speciality","address","building_area","opening_hours"],geometry:["point","area"],terms:[],tags:{amenity:"clinic",healthcare:"clinic","healthcare:speciality":"abortion"},reference:{key:"amenity",value:"clinic"},name:"Abortion Clinic"},"amenity/clinic/fertility":{icon:"maki-hospital",fields:["name","operator","healthcare/speciality","address","building_area","opening_hours"],geometry:["point","area"],terms:["egg","fertility","reproductive","sperm","ovulation"],tags:{amenity:"clinic",healthcare:"clinic","healthcare:speciality":"fertility"},reference:{key:"amenity",value:"clinic"},name:"Fertility Clinic"},"amenity/clock":{icon:"temaki-clock",fields:["name","support","display","visibility","date","faces"],moreFields:["lit"],geometry:["point","vertex"],tags:{amenity:"clock"},name:"Clock"},"amenity/clock/sundial":{icon:"temaki-clock",fields:["name","support","visibility","inscription"],moreFields:[],geometry:["point","vertex"],terms:["gnomon","shadow"],tags:{amenity:"clock",display:"sundial"},reference:{key:"display",value:"sundial"},name:"Sundial"},"amenity/college":{icon:"maki-college",fields:["name","operator","address","website","internet_access"],moreFields:["religion","denomination","internet_access/fee","internet_access/ssid","phone","email","fax","wheelchair"],geometry:["point","area"],terms:["university","undergraduate school"],tags:{amenity:"college"},name:"College Grounds"},"amenity/community_centre":{icon:"maki-town-hall",fields:["name","operator","address","building_area"],moreFields:["website","phone","email","fax","wheelchair"],geometry:["point","area"],terms:["event","hall"],tags:{amenity:"community_centre"},name:"Community Center"},"amenity/compressed_air":{icon:"maki-car",fields:["operator","fee","payment_multi","lit"],geometry:["point","area"],tags:{amenity:"compressed_air"},name:"Compressed Air"},"amenity/courthouse":{icon:"temaki-courthouse",fields:["name","operator","address","building_area"],moreFields:["website","phone","email","fax","wheelchair"],geometry:["point","area"],tags:{amenity:"courthouse"},name:"Courthouse"},"amenity/crematorium":{icon:"maki-cemetery",fields:["name","website","phone","opening_hours","wheelchair"],moreFields:["address","website","phone","email","fax","wheelchair"],geometry:["area","point"],tags:{amenity:"crematorium"},terms:["cemetery","funeral"],name:"Crematorium"},"amenity/dentist":{icon:"maki-dentist",fields:["name","operator","healthcare/speciality","address","building_area","opening_hours"],moreFields:["payment_multi","website","phone","email","fax","wheelchair"],geometry:["point","area"],terms:["tooth","teeth"],tags:{amenity:"dentist"},addTags:{amenity:"dentist",healthcare:"dentist"},removeTags:{amenity:"dentist",healthcare:"dentist"},reference:{key:"amenity",value:"dentist"},name:"Dentist"},"amenity/dive_centre":{icon:"maki-swimming",fields:["name","operator","address","building_area","opening_hours","scuba_diving"],moreFields:["payment_multi","website","phone","email","fax","wheelchair"],geometry:["point","area"],terms:["diving","scuba"],tags:{amenity:"dive_centre"},name:"Dive Center"},"amenity/doctors":{icon:"maki-doctor",fields:["name","operator","healthcare/speciality","address","building_area","opening_hours"],moreFields:["payment_multi","website","phone","email","fax","wheelchair"],geometry:["point","area"],terms:["medic*","physician"],tags:{amenity:"doctors"},addTags:{amenity:"doctors",healthcare:"doctor"},removeTags:{amenity:"doctors",healthcare:"doctor"},reference:{key:"amenity",value:"doctors"},name:"Doctor"},"amenity/dojo":{icon:"maki-pitch",fields:["name","sport","address","building_area","opening_hours"],moreFields:["payment_multi","website","phone","email","fax","wheelchair"],geometry:["point","area"],terms:["martial arts","dojang"],tags:{amenity:"dojo"},name:"Dojo / Martial Arts Academy"},"amenity/drinking_water":{icon:"maki-drinking-water",fields:["operator","access_simple","fee","wheelchair"],moreFields:["lit","covered"],geometry:["point"],tags:{amenity:"drinking_water"},terms:["potable water source","water fountain","drinking fountain","bubbler","water tap"],name:"Drinking Water"},"amenity/driving_school":{icon:"maki-car",fields:["name","operator","address","building_area","opening_hours"],moreFields:["payment_multi","website","phone","email","fax","wheelchair"],geometry:["point","area"],tags:{amenity:"driving_school"},name:"Driving School"},"amenity/embassy":{icon:"maki-embassy",fields:["name","country","address","building_area"],moreFields:["website","phone","email","fax","wheelchair"],geometry:["point","area"],tags:{amenity:"embassy"},name:"Embassy"},"amenity/fast_food":{icon:"maki-fast-food",fields:["name","cuisine","operator","address","building_area","drive_through"],moreFields:["opening_hours","diet_multi","takeaway","delivery","smoking","capacity","outdoor_seating","internet_access","internet_access/fee","internet_access/ssid","payment_multi","website","phone","email","fax","wheelchair"],geometry:["point","area"],tags:{amenity:"fast_food"},terms:["restaurant","takeaway"],name:"Fast Food"},"amenity/fast_food/burger":{icon:"maki-fast-food",geometry:["point","area"],terms:["breakfast","dine","dining","dinner","drive-in","eat","grill","lunch","table"],tags:{amenity:"fast_food",cuisine:"burger"},reference:{key:"cuisine",value:"burger"},name:"Burger Fast Food"},"amenity/fast_food/chicken":{icon:"fas-drumstick-bite",geometry:["point","area"],terms:["breakfast","canteen","dine","dining","dinner","drive-in","eat","grill","lunch","table"],tags:{amenity:"fast_food",cuisine:"chicken"},reference:{key:"cuisine",value:"chicken"},name:"Chicken Fast Food"},"amenity/fast_food/fish_and_chips":{icon:"fas-fish",geometry:["point","area"],terms:["breakfast","cafe","café","dine","dining","dinner","drive-in","eat","grill","lunch","table","french fries"],tags:{amenity:"fast_food",cuisine:"fish_and_chips"},reference:{key:"cuisine",value:"fish_and_chips"},name:"Fish & Chips Fast Food"},"amenity/fast_food/kebab":{icon:"maki-restaurant",geometry:["point","area"],terms:["bar","breakfast","cafe","café","canteen","dine","dining","dinner","drive-in","eat","grill","lunch","table"],tags:{amenity:"fast_food",cuisine:"kebab"},reference:{key:"cuisine",value:"kebab"},name:"Kebab Fast Food"},"amenity/fast_food/mexican":{icon:"fas-pepper-hot",geometry:["point","area"],terms:["breakfast","dine","dining","dinner","drive-in","eat","grill","lunch","table","tacos","burritos","enchiladas","fajitas","nachos","tortillas","salsa","tamales","quesadillas"],tags:{amenity:"fast_food",cuisine:"mexican"},reference:{key:"cuisine",value:"mexican"},name:"Mexican Fast Food"},"amenity/fast_food/pizza":{icon:"maki-restaurant-pizza",geometry:["point","area"],terms:["dine","dining","dinner","drive-in","eat","lunch","table","deep dish","thin crust","slice"],tags:{amenity:"fast_food",cuisine:"pizza"},reference:{key:"cuisine",value:"pizza"},name:"Pizza Fast Food"},"amenity/fast_food/sandwich":{icon:"maki-restaurant",geometry:["point","area"],terms:["breakfast","cafe","café","dine","dining","dinner","drive-in","eat","grill","lunch","table"],tags:{amenity:"fast_food",cuisine:"sandwich"},reference:{key:"cuisine",value:"sandwich"},name:"Sandwich Fast Food"},"amenity/fire_station":{icon:"maki-fire-station",fields:["name","operator","address","building_area"],moreFields:["website","phone","email","fax","wheelchair"],geometry:["point","area"],terms:[],tags:{amenity:"fire_station"},name:"Fire Station"},"amenity/food_court":{icon:"maki-restaurant",fields:["name","operator","address","building_area","opening_hours"],moreFields:["smoking","outdoor_seating","capacity","internet_access","internet_access/fee","internet_access/ssid","diet_multi","website","phone","email","fax","wheelchair"],geometry:["point","area"],terms:["fast food","restaurant","food"],tags:{amenity:"food_court"},name:"Food Court"},"amenity/fountain":{icon:"temaki-fountain",fields:["name","operator","lit"],geometry:["point","area"],tags:{amenity:"fountain"},name:"Fountain"},"amenity/fuel":{icon:"maki-fuel",fields:["name","brand","operator","address","fuel_multi"],moreFields:["opening_hours","payment_multi","building","website","phone","email","fax","wheelchair"],geometry:["point","area"],terms:["petrol","fuel","gasoline","propane","diesel","lng","cng","biodiesel"],tags:{amenity:"fuel"},name:"Gas Station"},"amenity/grave_yard":{icon:"maki-cemetery",fields:["religion","address"],moreFields:["website","phone","email","fax"],geometry:["point","area"],tags:{amenity:"grave_yard"},name:"Graveyard"},"amenity/grit_bin":{icon:"fas-box",fields:["access_simple"],geometry:["point","vertex"],tags:{amenity:"grit_bin"},terms:["salt","sand"],name:"Grit Bin"},"amenity/hospital":{icon:"maki-hospital",fields:["name","operator","healthcare/speciality","address","emergency"],moreFields:["internet_access","internet_access/fee","internet_access/ssid","website","phone","email","fax","wheelchair"],geometry:["point","area"],terms:["clinic","doctor","emergency room","health","infirmary","institution","sanatorium","sanitarium","sick","surgery","ward"],tags:{amenity:"hospital"},addTags:{amenity:"hospital",healthcare:"hospital"},removeTags:{amenity:"hospital",healthcare:"hospital"},reference:{key:"amenity",value:"hospital"},name:"Hospital Grounds"},"amenity/hunting_stand":{icon:"temaki-binoculars",fields:["access_simple"],geometry:["point","vertex","area"],terms:["game","gun","lookout","rifle","shoot*","wild","watch"],tags:{amenity:"hunting_stand"},name:"Hunting Stand"},"amenity/ice_cream":{icon:"maki-ice-cream",fields:["name","address","building_area","opening_hours","outdoor_seating"],moreFields:["takeaway","delivery","drive_through","internet_access","internet_access/fee","internet_access/ssid","diet_multi","payment_multi","website","phone","email","fax","wheelchair"],geometry:["point","area"],terms:["gelato","sorbet","sherbet","frozen","yogurt"],tags:{amenity:"ice_cream"},name:"Ice Cream Shop"},"amenity/internet_cafe":{icon:"temaki-antenna",fields:["name","operator","address","building_area","internet_access","internet_access/fee","internet_access/ssid"],moreFields:["opening_hours","smoking","outdoor_seating","payment_multi","website","phone","email","fax","wheelchair"],geometry:["point","area"],terms:["cybercafe","taxiphone","teleboutique","coffee","cafe","net","lanhouse"],tags:{amenity:"internet_cafe"},name:"Internet Cafe"},"amenity/kindergarten":{icon:"maki-school",fields:["name","operator","address"],moreFields:["opening_hours","payment_multi","website","phone","email","fax","wheelchair"],geometry:["point","area"],terms:["kindergarden","pre-school"],tags:{amenity:"kindergarten"},name:"Preschool/Kindergarten Grounds"},"amenity/language_school":{icon:"maki-school",fields:["name","operator","address","building_area","opening_hours","language_multi"],moreFields:["payment_multi","website","phone","email","fax","wheelchair"],geometry:["point","area"],terms:["esl"],tags:{amenity:"language_school"},name:"Language School"},"amenity/library":{icon:"maki-library",fields:["name","operator","building_area","address","ref/isil","internet_access"],moreFields:["access_simple","opening_hours","internet_access/fee","internet_access/ssid","website","phone","email","fax","wheelchair","payment_multi"],geometry:["point","area"],terms:["book"],tags:{amenity:"library"},name:"Library"},"amenity/love_hotel":{icon:"maki-heart",fields:["name","operator","address","building_area","rooms","internet_access"],moreFields:["smoking","payment_multi","internet_access/fee","internet_access/ssid","website","phone","email","fax","wheelchair"],geometry:["point","area"],tags:{amenity:"love_hotel"},name:"Love Hotel"},"amenity/marketplace":{icon:"maki-shop",fields:["name","operator","address","building","opening_hours"],moreFields:["website","phone","email","fax","wheelchair"],geometry:["point","area"],tags:{amenity:"marketplace"},name:"Marketplace"},"amenity/monastery":{icon:"maki-place-of-worship",fields:["name","religion","denomination","address","building_area"],moreFields:["website","phone","email","fax","wheelchair"],geometry:["point","area"],terms:["abbey","basilica","bethel","cathedral","chancel","chantry","chapel","church","fold","house of God","house of prayer","house of worship","minster","mission","monastery","mosque","oratory","parish","sacellum","sanctuary","shrine","synagogue","tabernacle","temple"],tags:{amenity:"monastery"},name:"Monastery Grounds"},"amenity/money_transfer":{icon:"maki-bank",fields:["name","brand","address","building_area","payment_multi","currency_multi"],moreFields:["opening_hours","website","phone","email","fax","wheelchair"],geometry:["point","area"],terms:["money order","check","bill","currency","finance","wire transfer","cable","person to person","cash to cash","exchange"],tags:{amenity:"money_transfer"},name:"Money Transfer Station"},"amenity/motorcycle_parking":{icon:"fas-motorcycle",fields:["capacity","operator","covered","access_simple"],geometry:["point","vertex","area"],tags:{amenity:"motorcycle_parking"},name:"Motorcycle Parking"},"amenity/music_school":{icon:"maki-school",fields:["name","operator","address","building_area","opening_hours"],moreFields:["payment_multi","website","phone","email","fax","wheelchair"],geometry:["point","area"],terms:["school of music"],tags:{amenity:"music_school"},name:"Music School"},"amenity/nightclub":{icon:"maki-bar",fields:["name","operator","address","building_area","opening_hours","smoking"],moreFields:["payment_multi","website","phone","email","fax","wheelchair"],geometry:["point","area"],tags:{amenity:"nightclub"},terms:["disco*","night club","dancing","dance club"],name:"Nightclub"},"amenity/parking_entrance":{icon:"maki-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:"maki-car",fields:["operator","parking","capacity","access_simple","fee","surface"],moreFields:["name","supervised","park_ride","maxstay","payment_multi","address","website","phone","email","fax","wheelchair","covered"],geometry:["point","vertex","area"],tags:{amenity:"parking"},terms:["automobile parking","car lot","car parking","rv parking","truck parking","vehicle parking"],name:"Parking Lot"},"amenity/parking/multi-storey":{icon:"maki-car",fields:["{amenity/parking}","building","levels","height"],geometry:["area"],tags:{amenity:"parking",parking:"multi-storey"},addTags:{building:"parking",amenity:"parking",parking:"multi-storey"},removeTags:{building:"parking",amenity:"parking",parking:"multi-storey"},reference:{key:"parking",value:"multi-storey"},terms:["car","indoor parking","multistorey car park","parkade","parking building","parking deck","parking garage","parking ramp","parking structure"],name:"Multilevel Parking Garage"},"amenity/payment_centre":{icon:"maki-bank",fields:["name","brand","address","building_area","opening_hours","payment_multi"],moreFields:["currency_multi","website","phone","email","fax","wheelchair"],geometry:["point","area"],terms:["check","tax pay","bill pay","currency","finance","cash","money"],tags:{amenity:"payment_centre"},name:"Payment Center"},"amenity/payment_terminal":{icon:"maki-bank",fields:["name","brand","address","opening_hours","payment_multi"],moreFields:["currency_multi","wheelchair"],geometry:["point"],terms:["interactive kiosk","ekiosk","atm","bill pay","tax pay","phone pay","finance","cash","money transfer","card"],tags:{amenity:"payment_terminal"},name:"Payment Terminal"},"amenity/pharmacy":{icon:"maki-pharmacy",fields:["name","operator","address","building_area","drive_through","dispensing"],moreFields:["opening_hours","payment_multi","website","phone","email","fax","wheelchair"],geometry:["point","area"],tags:{amenity:"pharmacy"},addTags:{amenity:"pharmacy",healthcare:"pharmacy"},removeTags:{amenity:"pharmacy",healthcare:"pharmacy"},reference:{key:"amenity",value:"pharmacy"},terms:["apothecary","drug store","drugstore","med*","prescription"],name:"Pharmacy Counter"},"amenity/photo_booth":{icon:"maki-attraction",fields:["name","operator","payment_multi","wheelchair"],geometry:["point","area"],terms:["photobooth","photo","booth","kiosk","camera"],tags:{amenity:"photo_booth"},name:"Photo Booth"},"amenity/place_of_worship":{icon:"maki-place-of-worship",fields:["name","religion","denomination","address","building_area","service_times"],moreFields:["opening_hours","internet_access","internet_access/ssid","website","phone","email","fax","wheelchair"],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:"maki-religious-buddhist",fields:["name","religion","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:"maki-religious-christian",fields:["name","religion","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:"Christian Church"},"amenity/place_of_worship/hindu":{icon:"temaki-hinduism",fields:["name","religion","denomination","building_area","address","service_times"],geometry:["point","area"],terms:["kovil","devasthana","mandir","kshetram","alayam","shrine","temple"],tags:{amenity:"place_of_worship",religion:"hindu"},reference:{key:"amenity",value:"place_of_worship"},name:"Hindu Temple"},"amenity/place_of_worship/jewish":{icon:"maki-religious-jewish",fields:["name","religion","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:"Jewish Synagogue"},"amenity/place_of_worship/muslim":{icon:"maki-religious-muslim",fields:["name","religion","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:"Muslim Mosque"},"amenity/place_of_worship/shinto":{icon:"temaki-shinto",fields:["name","religion","denomination","building_area","address","service_times"],geometry:["point","area"],terms:["kami","torii"],tags:{amenity:"place_of_worship",religion:"shinto"},reference:{key:"amenity",value:"place_of_worship"},name:"Shinto Shrine"},"amenity/place_of_worship/sikh":{icon:"temaki-sikhism",fields:["name","religion","denomination","building_area","address","service_times"],geometry:["point","area"],terms:["gurudwara","temple"],tags:{amenity:"place_of_worship",religion:"sikh"},reference:{key:"amenity",value:"place_of_worship"},name:"Sikh Temple"},"amenity/place_of_worship/taoist":{icon:"temaki-taoism",fields:["name","religion","denomination","building_area","address","service_times"],geometry:["point","area"],terms:["daoist","monastery","temple"],tags:{amenity:"place_of_worship",religion:"taoist"},reference:{key:"amenity",value:"place_of_worship"},name:"Taoist Temple"},"amenity/planetarium":{icon:"maki-globe",fields:["name","operator","address","building_area","opening_hours"],moreFields:["fee","payment_multi","website","phone","email","fax","wheelchair"],geometry:["point","area"],terms:["museum","astronomy","observatory"],tags:{amenity:"planetarium"},name:"Planetarium"},"amenity/police":{icon:"maki-police",fields:["name","operator","address","building_area","opening_hours"],moreFields:["website","phone","email","fax","wheelchair"],geometry:["point","area"],terms:["badge","constable","constabulary","cop","detective","fed","law","enforcement","officer","patrol"],tags:{amenity:"police"},name:"Police"},"amenity/post_box":{icon:"temaki-post_box",fields:["operator","collection_times","drive_through","ref"],moreFields:["wheelchair"],geometry:["point","vertex"],tags:{amenity:"post_box"},terms:["letter","post"],name:"Mailbox"},"amenity/post_office":{icon:"maki-post",fields:["name","operator","address","building_area","opening_hours"],moreFields:["payment_multi","website","phone","email","fax","wheelchair"],geometry:["point","area"],terms:["letter","mail"],tags:{amenity:"post_office"},name:"Post Office"},"amenity/prison":{icon:"maki-prison",fields:["name","operator","address"],moreFields:["website","phone","email","fax","wheelchair"],geometry:["point","area"],terms:["cell","jail"],tags:{amenity:"prison"},name:"Prison Grounds"},"amenity/pub":{icon:"maki-beer",fields:["name","address","building_area","opening_hours","smoking","brewery"],moreFields:["outdoor_seating","diet_multi","payment_multi","internet_access","internet_access/fee","internet_access/ssid","website","phone","email","fax","wheelchair"],geometry:["point","area"],tags:{amenity:"pub"},terms:["alcohol","drink","dive","beer","bier","booze"],name:"Pub"},"amenity/public_bath":{icon:"maki-water",fields:["name","bath/type","bath/open_air","bath/sand_bath","address","building_area","fee"],moreFields:["opening_hours","payment_multi","website","phone","email","fax","wheelchair"],geometry:["point","area"],tags:{amenity:"public_bath"},terms:["onsen","foot bath","hot springs"],name:"Public Bath"},"amenity/public_bookcase":{icon:"maki-library",fields:["name","operator","capacity","website","lit"],moreFields:["wheelchair"],geometry:["point","area"],terms:["library","bookcrossing"],tags:{amenity:"public_bookcase"},name:"Public Bookcase"},"amenity/ranger_station":{icon:"maki-ranger-station",fields:["name","operator","address","building_area","opening_hours"],moreFields:["website","phone","email","fax","wheelchair"],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:"maki-recycling",fields:["name","operator","address","building","opening_hours","recycling_accepts"],moreFields:["fee","payment_multi","website","phone","email","fax","wheelchair"],geometry:["point","area"],terms:["bottle","can","dump","glass","garbage","rubbish","scrap","trash"],tags:{amenity:"recycling",recycling_type:"centre"},reference:{key:"recycling_type",value:"*"},name:"Recycling Center"},"amenity/recycling_container":{icon:"maki-recycling",fields:["recycling_accepts","collection_times"],geometry:["point","area"],terms:["bin","can","bottle","glass","garbage","rubbish","scrap","trash"],tags:{amenity:"recycling",recycling_type:"container"},reference:{key:"amenity",value:"recycling"},name:"Recycling Container"},"amenity/restaurant":{icon:"maki-restaurant",fields:["name","cuisine","address","building_area","opening_hours","outdoor_seating"],moreFields:["takeaway","delivery","capacity","diet_multi","smoking","internet_access","internet_access/fee","internet_access/ssid","website","phone","email","fax","wheelchair"],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/restaurant/american":{icon:"maki-restaurant",geometry:["point","area"],terms:["bar","breakfast","cafe","café","canteen","coffee","dine","dining","dinner","drive-in","eat","grill","lunch","table"],tags:{amenity:"restaurant",cuisine:"american"},reference:{key:"cuisine",value:"american"},name:"American Restaurant"},"amenity/restaurant/asian":{icon:"maki-restaurant-noodle",geometry:["point","area"],terms:["bar","breakfast","cafe","café","canteen","dine","dining","dinner","drive-in","eat","grill","lunch","table"],tags:{amenity:"restaurant",cuisine:"asian"},reference:{key:"cuisine",value:"asian"},name:"Asian Restaurant"},"amenity/restaurant/chinese":{icon:"maki-restaurant-noodle",geometry:["point","area"],terms:["bar","breakfast","cafe","café","canteen","dine","dining","dinner","drive-in","eat","grill","lunch","table"],tags:{amenity:"restaurant",cuisine:"chinese"},reference:{key:"cuisine",value:"chinese"},name:"Chinese Restaurant"},"amenity/restaurant/french":{icon:"maki-restaurant",geometry:["point","area"],terms:["bar","breakfast","cafe","café","canteen","dine","dining","dinner","drive-in","eat","grill","lunch","table"],tags:{amenity:"restaurant",cuisine:"french"},reference:{key:"cuisine",value:"french"},name:"French Restaurant"},"amenity/restaurant/german":{icon:"maki-restaurant",geometry:["point","area"],terms:["bar","breakfast","cafe","café","canteen","dine","dining","dinner","drive-in","eat","grill","lunch","table"],tags:{amenity:"restaurant",cuisine:"german"},reference:{key:"cuisine",value:"german"},name:"German Restaurant"},"amenity/restaurant/greek":{icon:"maki-restaurant",geometry:["point","area"],terms:["bar","breakfast","cafe","café","canteen","dine","dining","dinner","drive-in","eat","grill","lunch","table","gyros","pitas","olives"],tags:{amenity:"restaurant",cuisine:"greek"},reference:{key:"cuisine",value:"greek"},name:"Greek Restaurant"},"amenity/restaurant/indian":{icon:"maki-restaurant",geometry:["point","area"],terms:["bar","breakfast","dine","dining","dinner","drive-in","eat","grill","lunch","table","curry"],tags:{amenity:"restaurant",cuisine:"indian"},reference:{key:"cuisine",value:"indian"},name:"Indian Restaurant"},"amenity/restaurant/italian":{icon:"maki-restaurant",geometry:["point","area"],terms:["bar","breakfast","cafe","café","canteen","dine","dining","dinner","drive-in","eat","grill","lunch","table","pasta","pizza"],tags:{amenity:"restaurant",cuisine:"italian"},reference:{key:"cuisine",value:"italian"},name:"Italian Restaurant"},"amenity/restaurant/japanese":{icon:"maki-restaurant-noodle",geometry:["point","area"],terms:["bar","breakfast","cafe","café","canteen","dine","dining","dinner","drive-in","eat","grill","lunch","table"],tags:{amenity:"restaurant",cuisine:"japanese"},reference:{key:"cuisine",value:"japanese"},name:"Japanese Restaurant"},"amenity/restaurant/mexican":{icon:"fas-pepper-hot",geometry:["point","area"],terms:["bar","breakfast","dine","dining","dinner","drive-in","eat","grill","lunch","table","tacos","burritos","enchiladas","fajitas","nachos","tortillas","salsa","tamales","quesadillas"],tags:{amenity:"restaurant",cuisine:"mexican"},reference:{key:"cuisine",value:"mexican"},name:"Mexican Restaurant"},"amenity/restaurant/noodle":{icon:"maki-restaurant-noodle",geometry:["point","area"],terms:["bar","breakfast","cafe","café","canteen","dine","dining","dinner","drive-in","eat","grill","lunch","table","ramen noodles","soup","soba noodles","cellophane noodles","rice noodles"],tags:{amenity:"restaurant",cuisine:"noodle"},reference:{key:"cuisine",value:"noodle"},name:"Noodle Restaurant"},"amenity/restaurant/pizza":{icon:"maki-restaurant-pizza",geometry:["point","area"],terms:["bar","dine","dining","dinner","drive-in","eat","lunch","table","deep dish","thin crust","slice"],tags:{amenity:"restaurant",cuisine:"pizza"},reference:{key:"cuisine",value:"pizza"},name:"Pizza Restaurant"},"amenity/restaurant/seafood":{icon:"maki-restaurant-seafood",geometry:["point","area"],terms:["bar","breakfast","cafe","café","dine","dining","dinner","drive-in","eat","grill","lunch","table","fish","shellfish","molluscs","crustaceans","clams","oysters","lobsters","crab","shrimp","squid","octopus"],tags:{amenity:"restaurant",cuisine:"seafood"},reference:{key:"cuisine",value:"seafood"},name:"Seafood Restaurant"},"amenity/restaurant/steakhouse":{icon:"maki-slaughterhouse",geometry:["point","area"],terms:["bar","breakfast","cafe","café","canteen","dine","dining","dinner","drive-in","eat","grill","lunch","table","steak house","chop house","beef"],tags:{amenity:"restaurant",cuisine:"steak_house"},reference:{key:"cuisine",value:"steak_house"},name:"Steakhouse"},"amenity/restaurant/sushi":{icon:"fas-fish",geometry:["point","area"],terms:["bar","breakfast","cafe","café","canteen","dine","dining","dinner","drive-in","eat","grill","lunch","table"],tags:{amenity:"restaurant",cuisine:"sushi"},reference:{key:"cuisine",value:"sushi"},name:"Sushi Restaurant"},"amenity/restaurant/thai":{icon:"maki-restaurant-noodle",geometry:["point","area"],terms:["bar","breakfast","cafe","café","canteen","dine","dining","dinner","drive-in","eat","grill","lunch","table"],tags:{amenity:"restaurant",cuisine:"thai"},reference:{key:"cuisine",value:"thai"},name:"Thai Restaurant"},"amenity/restaurant/turkish":{icon:"maki-restaurant",geometry:["point","area"],terms:["bar","breakfast","cafe","café","canteen","dine","dining","dinner","drive-in","eat","grill","lunch","table"],tags:{amenity:"restaurant",cuisine:"turkish"},reference:{key:"cuisine",value:"turkish"},name:"Turkish Restaurant"},"amenity/restaurant/vietnamese":{icon:"maki-restaurant-noodle",geometry:["point","area"],terms:["bar","breakfast","cafe","café","canteen","dine","dining","dinner","drive-in","eat","grill","lunch","table"],tags:{amenity:"restaurant",cuisine:"vietnamese"},reference:{key:"cuisine",value:"vietnamese"},name:"Vietnamese Restaurant"},"amenity/sanitary_dump_station":{icon:"temaki-storage_tank",fields:["operator","access_simple","fee","water_point"],moreFields:["payment_multi"],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:"maki-school",fields:["name","operator","address","religion","denomination","website"],moreFields:["internet_access","internet_access/ssid","phone","email","fax","wheelchair"],geometry:["point","area"],terms:["academy","elementary school","middle school","high school"],tags:{amenity:"school"},name:"School Grounds"},"amenity/shelter":{icon:"maki-shelter",fields:["name","shelter_type","building_area","bench","bin"],moreFields:["lit","wheelchair"],geometry:["point","vertex","area"],terms:["lean-to","gazebo","picnic"],tags:{amenity:"shelter"},name:"Shelter"},"amenity/shelter/gazebo":{icon:"maki-shelter",fields:["name","building_area","bench","lit"],geometry:["point","area"],tags:{amenity:"shelter",shelter_type:"gazebo"},name:"Gazebo"},"amenity/shelter/lean_to":{icon:"maki-shelter",fields:["name","operator","building_area"],geometry:["point","area"],tags:{amenity:"shelter",shelter_type:"lean_to"},name:"Lean-To"},"amenity/shelter/picnic_shelter":{icon:"maki-shelter",fields:["name","shelter_type","building_area","lit","bin"],geometry:["point","area"],tags:{amenity:"shelter",shelter_type:"picnic_shelter"},reference:{key:"shelter_type",value:"picnic_shelter"},terms:["pavilion"],name:"Picnic Shelter"},"amenity/shelter/public_transport":{icon:"maki-shelter",fields:["name","shelter_type","building_area","bench","lit"],geometry:["point","area"],terms:["bus stop","metro stop","waiting"],tags:{amenity:"shelter",shelter_type:"public_transport"},reference:{key:"shelter_type",value:"public_transport"},name:"Transit Shelter"},"amenity/shower":{icon:"temaki-shower",fields:["opening_hours","fee","supervised","building_area","access_simple","wheelchair"],moreFields:["operator","gender","payment_multi"],geometry:["point","vertex","area"],terms:["rain closet"],tags:{amenity:"shower"},name:"Shower"},"amenity/smoking_area":{icon:"fas-smoking",fields:["name","shelter","bin","bench","opening_hours"],moreFields:["lit","wheelchair","covered"],geometry:["point","vertex","area"],terms:[],tags:{amenity:"smoking_area"},name:"Smoking Area"},"amenity/social_facility":{icon:"temaki-social_facility",fields:["name","operator","address","building_area","social_facility","social_facility_for"],moreFields:["opening_hours","wheelchair","internet_access","internet_access/fee","internet_access/ssid","website","phone","email","fax"],geometry:["point","area"],terms:[],tags:{amenity:"social_facility"},name:"Social Facility"},"amenity/social_facility/food_bank":{icon:"temaki-social_facility",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:"maki-wheelchair",fields:["{amenity/social_facility}","wheelchair"],geometry:["point","area"],terms:["old","senior","living","care home","assisted 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:"temaki-social_facility",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:"maki-wheelchair",fields:["{amenity/social_facility}","wheelchair"],geometry:["point","area"],terms:["elderly","living","nursing","old","senior","assisted living"],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:"maki-karaoke",fields:["name","studio","address","building_area"],moreFields:["website","phone","email","fax","wheelchair"],geometry:["point","area"],terms:["recording","radio","television"],tags:{amenity:"studio"},name:"Studio"},"amenity/taxi":{icon:"fas-taxi",fields:["name","operator","capacity"],moreFields:["address","opening_hours","wheelchair"],geometry:["point","vertex","area"],terms:["cab"],tags:{amenity:"taxi"},name:"Taxi Stand"},"amenity/telephone":{icon:"maki-telephone",fields:["operator","phone","fee","payment_multi","booth"],moreFields:["covered","indoor","lit","wheelchair"],geometry:["point","vertex"],tags:{amenity:"telephone"},terms:["phone"],name:"Telephone"},"amenity/theatre":{icon:"maki-theatre",fields:["name","operator","address","building_area"],moreFields:["internet_access","internet_access/fee","internet_access/ssid","payment_multi","website","phone","email","fax","wheelchair"],geometry:["point","area"],terms:["theatre","performance","play","musical"],tags:{amenity:"theatre"},name:"Theater"},"amenity/theatre/type/amphi":{icon:"maki-theatre",fields:["name","operator","address","lit"],geometry:["point","area"],terms:["open air","outdoor","greek","ampi"],tags:{amenity:"theatre","theatre:type":"amphi"},name:"Amphitheatre"},"amenity/toilets":{icon:"maki-toilet",fields:["toilets/disposal","building_area","access_simple","gender","diaper","wheelchair"],moreFields:["fee","opening_hours","operator","payment_multi"],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:"maki-town-hall",fields:["name","operator","address","building_area"],moreFields:["website","phone","email","fax","wheelchair"],geometry:["point","area"],terms:["village","city","government","courthouse","municipal"],tags:{amenity:"townhall"},name:"Town Hall"},"amenity/university":{icon:"maki-college",fields:["{amenity/college}"],moreFields:["{amenity/college}"],geometry:["point","area"],terms:["college","graduate school","PhD program","master's degree program"],tags:{amenity:"university"},name:"University Grounds"},"amenity/vehicle_inspection":{icon:"maki-car",fields:["name","operator","address","building_area","opening_hours"],moreFields:["payment_multi","website","phone","email","fax","wheelchair"],geometry:["point","area"],terms:["car inspection"],tags:{amenity:"vehicle_inspection"},name:"Vehicle Inspection"},"amenity/vending_machine":{icon:"temaki-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:"temaki-vending_machine",fields:["vending","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:"temaki-vending_machine",geometry:["point"],terms:["cigarette"],tags:{amenity:"vending_machine",vending:"cigarettes"},reference:{key:"vending",value:"cigarettes"},name:"Cigarette Vending Machine"},"amenity/vending_machine/coffee":{icon:"temaki-vending_machine",geometry:["point"],terms:["coffee"],tags:{amenity:"vending_machine",vending:"coffee"},reference:{key:"vending",value:"coffee"},name:"Coffee Vending Machine"},"amenity/vending_machine/condoms":{icon:"temaki-vending_machine",geometry:["point"],terms:["condom"],tags:{amenity:"vending_machine",vending:"condoms"},reference:{key:"vending",value:"condoms"},name:"Condom Vending Machine"},"amenity/vending_machine/drinks":{icon:"temaki-vending_machine",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/electronics":{icon:"temaki-vending_machine",geometry:["point"],terms:["cable","charger","earbud","headphone","phone","tablet"],tags:{amenity:"vending_machine",vending:"electronics"},reference:{key:"vending",value:"electronics"},name:"Electronics Vending Machine"},"amenity/vending_machine/elongated_coin":{icon:"temaki-vending_machine",geometry:["point"],terms:["coin","crush","elongated","flatten","penny","souvenir"],tags:{amenity:"vending_machine",vending:"elongated_coin"},reference:{key:"vending",value:"elongated_coin"},name:"Flat Coin Vending Machine"},"amenity/vending_machine/excrement_bags":{icon:"temaki-vending_machine",fields:["{amenity/vending_machine}","fee","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/feminine_hygiene":{icon:"temaki-vending_machine",geometry:["point"],terms:["condom","tampon","pad","woman","women","menstrual hygiene products","personal care"],tags:{amenity:"vending_machine",vending:"feminine_hygiene"},reference:{key:"vending",value:"feminine_hygiene"},name:"Feminine Hygiene Vending Machine"},"amenity/vending_machine/food":{icon:"temaki-vending_machine",geometry:["point"],terms:["food"],tags:{amenity:"vending_machine",vending:"food"},reference:{key:"vending",value:"food"},name:"Food Vending Machine"},"amenity/vending_machine/fuel":{icon:"maki-fuel",geometry:["point"],terms:["petrol","fuel","gasoline","propane","diesel","lng","cng","biodiesel"],tags:{amenity:"vending_machine",vending:"fuel"},reference:{key:"vending",value:"fuel"},name:"Gas Pump",matchScore:0.5},"amenity/vending_machine/ice_cream":{icon:"temaki-vending_machine",geometry:["point"],terms:["chocolate","ice cream","frozen","popsicle","vanilla"],tags:{amenity:"vending_machine",vending:"ice_cream"},reference:{key:"vending",value:"ice_cream"},name:"Ice Cream Vending Machine"},"amenity/vending_machine/newspapers":{icon:"temaki-vending_machine",fields:["vending","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:"temaki-vending_machine",fields:["vending","operator","payment_multi","currency_multi"],geometry:["point"],terms:["mail","parcel","pickup"],tags:{amenity:"vending_machine",vending:"parcel_pickup;parcel_mail_in"},reference:{key:"vending",value:"parcel_pickup;parcel_mail_in"},name:"Parcel Pickup/Dropoff Locker"},"amenity/vending_machine/parcel_pickup":{icon:"temaki-vending_machine",fields:["vending","operator"],geometry:["point"],terms:["amazon","locker","mail","parcel","pickup"],tags:{amenity:"vending_machine",vending:"parcel_pickup"},reference:{key:"vending",value:"parcel_pickup"},name:"Parcel Pickup Locker"},"amenity/vending_machine/parking_tickets":{icon:"temaki-vending_machine",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:"temaki-vending_machine",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/stamps":{icon:"temaki-vending_machine",geometry:["point"],terms:["mail","postage","stamp"],tags:{amenity:"vending_machine",vending:"stamps"},reference:{key:"vending",value:"stamps"},name:"Postage Vending Machine"},"amenity/vending_machine/sweets":{icon:"temaki-vending_machine",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:"temaki-veterinary_care",fields:["name","operator","address","building_area","opening_hours"],moreFields:["fee","payment_multi","website","phone","email","fax","wheelchair"],geometry:["point","area"],terms:["pet clinic","veterinarian","animal hospital","pet doctor"],tags:{amenity:"veterinary"},name:"Veterinary"},"amenity/waste_basket":{icon:"maki-waste-basket",fields:["collection_times"],geometry:["point","vertex"],tags:{amenity:"waste_basket"},terms:["bin","garbage","rubbish","litter","trash"],name:"Waste Basket"},"amenity/waste_disposal":{icon:"maki-waste-basket",fields:["operator","collection_times"],geometry:["point","vertex","area"],tags:{amenity:"waste_disposal"},terms:["garbage","rubbish","litter","trash"],name:"Garbage Dumpster"},"amenity/waste_transfer_station":{icon:"maki-waste-basket",fields:["name","operator","address","opening_hours","fee","payment_multi"],moreFields:["website","phone","email","fax","wheelchair"],geometry:["point","area"],terms:["dump","garbage","recycling","rubbish","scrap","trash"],tags:{amenity:"waste_transfer_station"},name:"Waste Transfer Station"},"amenity/waste/dog_excrement":{icon:"maki-waste-basket",fields:["collection_times"],geometry:["point","vertex","area"],tags:{amenity:"waste_basket",waste:"dog_excrement"},reference:{key:"waste",value:"dog_excrement"},terms:["bin","garbage","rubbish","litter","trash","poo","dog"],name:"Dog Excrement Bin"},"amenity/water_point":{icon:"maki-drinking-water",fields:["operator","fee","payment_multi"],geometry:["area","vertex","point"],tags:{amenity:"water_point"},name:"RV Drinking Water"},"amenity/watering_place":{icon:"maki-drinking-water",fields:["operator","fee","payment_multi"],geometry:["area","vertex","point"],tags:{amenity:"watering_place"},name:"Animal Watering Place"},area:{fields:["name"],geometry:["area"],tags:{area:"yes"},name:"Area",matchScore:0.1},"area/highway":{fields:["name","area/highway"],geometry:["area"],tags:{"area:highway":"*"},name:"Road Surface"},"attraction/amusement_ride":{icon:"maki-amusement-park",geometry:["point","area"],terms:["theme park","carnival ride"],tags:{attraction:"amusement_ride"},name:"Amusement Ride"},"attraction/animal":{icon:"maki-zoo",fields:["name","operator"],geometry:["point","area"],terms:["zoo","theme park","animal park","lion","tiger","bear"],tags:{attraction:"animal"},name:"Animal"},"attraction/big_wheel":{icon:"maki-amusement-park",fields:["{attraction}","height"],geometry:["point"],terms:["ferris wheel","theme park","amusement ride"],tags:{attraction:"big_wheel"},name:"Big Wheel"},"attraction/bumper_car":{icon:"maki-car",geometry:["point","area"],terms:["theme park","dodgem cars","autoscooter"],tags:{attraction:"bumper_car"},name:"Bumper Car"},"attraction/bungee_jumping":{icon:"maki-pitch",fields:["{attraction}","height"],geometry:["point","area"],terms:["theme park","bungy jumping","jumping platform"],tags:{attraction:"bungee_jumping"},name:"Bungee Jumping"},"attraction/carousel":{icon:"temaki-amusement_park",fields:["{attraction}","building_area"],geometry:["point","area"],terms:["theme park","roundabout","merry-go-round","galloper","jumper","horseabout","flying horses"],tags:{attraction:"carousel"},name:"Carousel"},"attraction/dark_ride":{icon:"maki-rail-metro",fields:["{attraction}","building_area"],geometry:["point","line","area"],terms:["theme park","ghost train"],tags:{attraction:"dark_ride"},name:"Dark Ride"},"attraction/drop_tower":{icon:"temaki-tower",fields:["{attraction}","height"],geometry:["point","area"],terms:["theme park","amusement ride","gondola","tower","big drop"],tags:{attraction:"drop_tower"},name:"Drop Tower"},"attraction/maze":{icon:"maki-amusement-park",geometry:["point","area"],terms:["theme park","amusement ride","labyrinth"],tags:{attraction:"maze"},name:"Maze"},"attraction/pirate_ship":{icon:"maki-danger",geometry:["point"],terms:["theme park","carnival ride","amusement ride"],tags:{attraction:"pirate_ship"},name:"Pirate Ship"},"attraction/river_rafting":{icon:"maki-ferry",geometry:["point","line"],terms:["theme park","aquatic park","water park","rafting simulator","river rafting ride","river rapids ride"],tags:{attraction:"river_rafting"},name:"River Rafting"},"attraction/roller_coaster":{icon:"maki-amusement-park",geometry:["point","area"],terms:["theme park","amusement ride"],tags:{attraction:"roller_coaster"},name:"Roller Coaster"},"attraction/summer_toboggan":{geometry:["line"],terms:["alpine slide","mountain coaster"],tags:{attraction:"summer_toboggan"},name:"Summer Toboggan"},"attraction/train":{icon:"maki-rail",fields:["{attraction}","fee"],geometry:["point","line"],terms:["theme park","rackless train","road train","Tschu-Tschu train","dotto train","park train"],tags:{attraction:"train"},name:"Tourist Train"},"attraction/water_slide":{icon:"maki-swimming",fields:["{attraction}","height"],geometry:["line","area"],terms:["theme park","aquatic park","water park","flumes","water chutes","hydroslides"],tags:{attraction:"water_slide"},name:"Water Slide"},barrier:{icon:"maki-roadblock",geometry:["point","vertex","line","area"],tags:{barrier:"*"},fields:["barrier"],name:"Barrier",matchScore:0.4},"barrier/entrance":{icon:"maki-entrance-alt1",geometry:["vertex"],tags:{barrier:"entrance"},name:"Entrance",searchable:false},"barrier/block":{icon:"maki-roadblock",fields:["access","material"],geometry:["point","vertex"],tags:{barrier:"block"},name:"Block"},"barrier/bollard":{icon:"maki-roadblock",fields:["access","material"],geometry:["point","vertex","line"],tags:{barrier:"bollard"},name:"Bollard"},"barrier/border_control":{icon:"maki-roadblock",fields:["access","building_area"],moreFields:["address","website","phone","email","fax"],geometry:["vertex","area"],tags:{barrier:"border_control"},name:"Border Control"},"barrier/cattle_grid":{icon:"maki-barrier",geometry:["vertex"],tags:{barrier:"cattle_grid"},name:"Cattle Grid"},"barrier/city_wall":{icon:"temaki-wall",fields:["height","material"],geometry:["line","area"],tags:{barrier:"city_wall"},name:"City Wall"},"barrier/cycle_barrier":{icon:"maki-roadblock",fields:["access"],geometry:["vertex"],tags:{barrier:"cycle_barrier"},name:"Cycle Barrier"},"barrier/ditch":{icon:"maki-roadblock",geometry:["line","area"],tags:{barrier:"ditch"},name:"Trench",matchScore:0.25},"barrier/fence":{icon:"maki-fence",fields:["fence_type","height","material"],geometry:["line"],tags:{barrier:"fence"},name:"Fence",matchScore:0.25},"barrier/fence/railing":{icon:"temaki-railing",geometry:["line"],tags:{barrier:"fence",fence_type:"railing"},terms:["railing","handrail","guard rail"],name:"Railing",matchScore:0.5},"barrier/gate":{icon:"maki-barrier",fields:["access"],geometry:["vertex","line"],tags:{barrier:"gate"},name:"Gate"},"barrier/guard_rail":{icon:"temaki-guard_rail",fields:["material"],geometry:["line"],tags:{barrier:"guard_rail"},name:"Guard Rail",terms:["guardrail","traffic barrier","crash barrier","median barrier","roadside barrier","Armco barrier"],matchScore:0.75},"barrier/hedge":{fields:["height"],geometry:["line","area"],tags:{barrier:"hedge"},name:"Hedge",matchScore:0.25},"barrier/kerb":{fields:["kerb","tactile_paving"],moreFields:["material"],geometry:["vertex","line"],tags:{barrier:"kerb"},name:"Curb"},"barrier/kerb/flush":{icon:"maki-wheelchair",geometry:["vertex","line"],tags:{barrier:"kerb",kerb:"flush"},reference:{key:"kerb",value:"flush"},terms:["even curb","level curb","tactile curb"],name:"Flush Curb"},"barrier/kerb/lowered":{icon:"maki-wheelchair",geometry:["vertex","line"],tags:{barrier:"kerb",kerb:"lowered"},reference:{key:"kerb",value:"lowered"},terms:["curb cut","curb ramp","kerb ramp","dropped kerb","pram ramp"],name:"Lowered Curb"},"barrier/kissing_gate":{icon:"maki-barrier",fields:["access"],geometry:["vertex"],tags:{barrier:"kissing_gate"},name:"Kissing Gate"},"barrier/lift_gate":{icon:"maki-roadblock",fields:["access"],geometry:["vertex","line"],tags:{barrier:"lift_gate"},name:"Lift Gate"},"barrier/retaining_wall":{icon:"temaki-wall",fields:["height","material"],geometry:["line","area"],tags:{barrier:"retaining_wall"},name:"Retaining Wall"},"barrier/stile":{icon:"maki-roadblock",fields:["access"],geometry:["vertex"],tags:{barrier:"stile"},name:"Stile"},"barrier/toll_booth":{icon:"maki-roadblock",fields:["access","building_area","payment_multi","currency_multi"],moreFields:["address","website","phone","email","fax"],geometry:["vertex","area"],tags:{barrier:"toll_booth"},name:"Toll Booth"},"barrier/wall":{icon:"temaki-wall",fields:["wall","height","material"],geometry:["line","area"],tags:{barrier:"wall"},name:"Wall",matchScore:0.25},"boundary/administrative":{name:"Administrative Boundary",geometry:["line"],tags:{boundary:"administrative"},fields:["name","admin_level"]},"bridge/support":{icon:"fas-archway",fields:["bridge/support"],moreFields:["material","seamark/type"],geometry:["point","vertex","area"],tags:{"bridge:support":"*"},name:"Bridge Support"},"bridge/support/pier":{icon:"fas-archway",fields:["bridge/support"],moreFields:["material","seamark/type"],geometry:["point","vertex","area"],tags:{"bridge:support":"pier"},name:"Bridge Pier"},building:{icon:"maki-home",fields:["name","building","levels","height","address"],moreFields:["architect","building/material","layer","roof/colour","smoking","wheelchair"],geometry:["point","area"],tags:{building:"*"},matchScore:0.6,terms:[],name:"Building"},"building/bunker":{geometry:["area"],tags:{building:"bunker"},matchScore:0.5,name:"Bunker",searchable:false},"building/entrance":{icon:"maki-entrance-alt1",fields:[],moreFields:[],geometry:["vertex"],tags:{building:"entrance"},name:"Entrance/Exit",searchable:false},"building/train_station":{icon:"maki-building",geometry:["point","vertex","area"],tags:{building:"train_station"},matchScore:0.5,name:"Train Station Building",searchable:false},"building/apartments":{icon:"maki-building",geometry:["area"],tags:{building:"apartments"},matchScore:0.5,name:"Apartment Building"},"building/barn":{icon:"maki-farm",geometry:["area"],tags:{building:"barn"},matchScore:0.5,name:"Barn"},"building/boathouse":{icon:"maki-harbor",geometry:["area"],tags:{building:"boathouse"},matchScore:0.5,terms:[],name:"Boathouse"},"building/bungalow":{icon:"maki-home",geometry:["area"],tags:{building:"bungalow"},terms:["home","detached"],matchScore:0.5,name:"Bungalow"},"building/cabin":{icon:"maki-home",geometry:["area"],tags:{building:"cabin"},matchScore:0.5,name:"Cabin"},"building/carport":{icon:"fas-warehouse",fields:["height","capacity"],geometry:["area"],tags:{building:"carport"},matchScore:0.5,terms:["covered parking space","garage","car","porch"],name:"Carport"},"building/cathedral":{icon:"maki-place-of-worship",geometry:["area"],tags:{building:"cathedral"},matchScore:0.5,name:"Cathedral Building"},"building/chapel":{icon:"maki-place-of-worship",geometry:["area"],tags:{building:"chapel"},matchScore:0.5,name:"Chapel Building"},"building/church":{icon:"maki-place-of-worship",geometry:["area"],tags:{building:"church"},matchScore:0.5,name:"Church Building"},"building/civic":{icon:"maki-building",fields:["{building}","smoking"],geometry:["area"],tags:{building:"civic"},matchScore:0.5,name:"Civic Building"},"building/college":{icon:"maki-building",geometry:["area"],terms:["university"],tags:{building:"college"},matchScore:0.5,name:"College Building"},"building/commercial":{icon:"maki-suitcase",fields:["{building}","smoking"],geometry:["area"],tags:{building:"commercial"},matchScore:0.5,name:"Commercial Building"},"building/construction":{icon:"maki-building",geometry:["area"],tags:{building:"construction"},matchScore:0.5,name:"Building Under Construction"},"building/detached":{icon:"maki-home",geometry:["area"],tags:{building:"detached"},terms:["home","single","family","residence","dwelling"],matchScore:0.5,name:"Detached House"},"building/dormitory":{icon:"maki-building",fields:["{building}","smoking"],geometry:["area"],tags:{building:"dormitory"},matchScore:0.5,name:"Dormitory"},"building/farm_auxiliary":{icon:"maki-farm",geometry:["area"],tags:{building:"farm_auxiliary"},matchScore:0.5,name:"Farm Building"},"building/farm":{icon:"maki-farm",geometry:["area"],tags:{building:"farm"},matchScore:0.5,name:"Farm House"},"building/garage":{icon:"fas-warehouse",fields:["name","capacity"],geometry:["area"],tags:{building:"garage"},matchScore:0.5,name:"Garage"},"building/garages":{icon:"fas-warehouse",fields:["name","capacity"],geometry:["area"],tags:{building:"garages"},matchScore:0.5,name:"Garages"},"building/grandstand":{icon:"maki-building",fields:["name","height"],geometry:["area"],tags:{building:"grandstand"},terms:["tribune","stand","stands","bleachers"],matchScore:0.5,name:"Grandstand"},"building/greenhouse":{icon:"maki-garden-centre",geometry:["area"],tags:{building:"greenhouse"},matchScore:0.5,name:"Greenhouse"},"building/hospital":{icon:"maki-building",geometry:["area"],tags:{building:"hospital"},matchScore:0.5,name:"Hospital Building"},"building/hotel":{icon:"maki-building",fields:["{building}","smoking"],geometry:["area"],tags:{building:"hotel"},matchScore:0.5,name:"Hotel Building"},"building/house":{icon:"maki-home",geometry:["area"],tags:{building:"house"},terms:["home","family","residence","dwelling"],matchScore:0.5,name:"House"},"building/hut":{icon:"maki-home",fields:["name"],geometry:["area"],tags:{building:"hut"},matchScore:0.5,name:"Hut"},"building/industrial":{icon:"maki-industry",geometry:["area"],tags:{building:"industrial"},matchScore:0.5,name:"Industrial Building"},"building/kindergarten":{icon:"maki-building",geometry:["area"],terms:["kindergarden","pre-school"],tags:{building:"kindergarten"},matchScore:0.5,name:"Preschool/Kindergarten Building"},"building/mosque":{icon:"maki-place-of-worship",geometry:["area"],tags:{building:"mosque"},matchScore:0.5,name:"Mosque Building"},"building/pavilion":{icon:"maki-building",fields:["{building}","smoking"],geometry:["area"],terms:["sports"],tags:{building:"pavilion"},matchScore:0.5,name:"Pavilion Building"},"building/public":{icon:"maki-building",fields:["{building}","smoking"],geometry:["area"],tags:{building:"public"},matchScore:0.5,name:"Public Building"},"building/residential":{icon:"maki-residential-community",geometry:["area"],tags:{building:"residential"},matchScore:0.5,name:"Residential Building"},"building/retail":{icon:"maki-commercial",fields:["{building}","smoking"],geometry:["area"],tags:{building:"retail"},matchScore:0.5,name:"Retail Building"},"building/roof":{icon:"maki-shelter",fields:["name","address","layer"],geometry:["area"],tags:{building:"roof"},matchScore:0.5,name:"Roof"},"building/ruins":{icon:"temaki-ruins",geometry:["area"],tags:{building:"ruins"},matchScore:0.5,name:"Building Ruins"},"building/school":{icon:"maki-building",geometry:["area"],terms:["academy","elementary school","middle school","high school"],tags:{building:"school"},matchScore:0.5,name:"School Building"},"building/semidetached_house":{icon:"maki-home",geometry:["area"],tags:{building:"semidetached_house"},terms:["home","double","duplex","twin","family","residence","dwelling"],matchScore:0.5,name:"Semi-Detached House"},"building/service":{icon:"maki-home",geometry:["area"],tags:{building:"service"},matchScore:0.5,name:"Service Building"},"building/shed":{icon:"maki-home",geometry:["area"],tags:{building:"shed"},matchScore:0.5,name:"Shed"},"building/stable":{icon:"maki-horse-riding",geometry:["area"],tags:{building:"stable"},matchScore:0.5,name:"Stable"},"building/stadium":{icon:"maki-stadium",fields:["{building}","smoking"],geometry:["area"],tags:{building:"stadium"},matchScore:0.5,name:"Stadium Building"},"building/static_caravan":{icon:"maki-home",geometry:["area"],tags:{building:"static_caravan"},matchScore:0.5,name:"Static Mobile Home"},"building/temple":{icon:"maki-place-of-worship",geometry:["area"],tags:{building:"temple"},matchScore:0.5,name:"Temple Building"},"building/terrace":{icon:"maki-building",geometry:["area"],tags:{building:"terrace"},terms:["home","terrace","brownstone","family","residence","dwelling"],matchScore:0.5,name:"Row Houses"},"building/transportation":{icon:"maki-building",fields:["{building}","smoking"],geometry:["area"],tags:{building:"transportation"},matchScore:0.5,name:"Transportation Building"},"building/university":{icon:"maki-building",geometry:["area"],terms:["college"],tags:{building:"university"},matchScore:0.5,name:"University Building"},"building/warehouse":{icon:"maki-warehouse",geometry:["area"],tags:{building:"warehouse"},matchScore:0.5,name:"Warehouse"},"camp_site/camp_pitch":{icon:"maki-campsite",fields:["name","ref"],geometry:["point","area"],terms:["tent","rv"],tags:{camp_site:"camp_pitch"},name:"Camp Pitch"},club:{icon:"fas-handshake",fields:["name","club","operator","address","building_area","opening_hours"],moreFields:["access_simple","website","phone","email","fax","wheelchair"],geometry:["point","area"],tags:{club:"*"},terms:["social"],name:"Club"},"club/sport":{icon:"maki-pitch",fields:["name","sport","{club}"],geometry:["point","area"],tags:{club:"sport"},terms:["athletics club","sporting club","sports association","sports society"],name:"Sports Club"},craft:{icon:"temaki-tools",fields:["name","craft","operator","address","building_area","opening_hours"],moreFields:["product","website","phone","email","fax","wheelchair"],geometry:["point","area"],tags:{craft:"*"},terms:[],name:"Craft"},"craft/jeweler":{icon:"maki-marker-stroked",geometry:["point","area"],tags:{craft:"jeweler"},reference:{key:"shop",value:"jewelry"},name:"Jeweler",searchable:false},"craft/locksmith":{icon:"maki-marker-stroked",geometry:["point","area"],tags:{craft:"locksmith"},reference:{key:"shop",value:"locksmith"},name:"Locksmith",searchable:false},"craft/optician":{icon:"maki-marker-stroked",geometry:["point","area"],tags:{craft:"optician"},reference:{key:"shop",value:"optician"},name:"Optician",searchable:false},"craft/tailor":{icon:"maki-clothing-store",geometry:["point","area"],terms:["clothes","suit"],tags:{craft:"tailor"},reference:{key:"shop",value:"tailor"},name:"Tailor",searchable:false},"craft/basket_maker":{icon:"maki-art-gallery",geometry:["point","area"],tags:{craft:"basket_maker"},name:"Basket Maker"},"craft/beekeeper":{icon:"maki-farm",geometry:["point","area"],tags:{craft:"beekeeper"},name:"Beekeeper"},"craft/blacksmith":{icon:"temaki-tools",geometry:["point","area"],tags:{craft:"blacksmith"},name:"Blacksmith"},"craft/boatbuilder":{icon:"temaki-tools",geometry:["point","area"],tags:{craft:"boatbuilder"},matchScore:0.4,name:"Boat Builder"},"craft/bookbinder":{icon:"maki-library",geometry:["point","area"],terms:["book repair"],tags:{craft:"bookbinder"},name:"Bookbinder"},"craft/brewery":{icon:"temaki-storage_tank",fields:["{craft}","product"],geometry:["point","area"],terms:["alcohol","beer","beverage","bier","booze","cider"],tags:{craft:"brewery"},name:"Brewery"},"craft/carpenter":{icon:"temaki-tools",geometry:["point","area"],terms:["woodworker"],tags:{craft:"carpenter"},name:"Carpenter"},"craft/carpet_layer":{icon:"temaki-tools",geometry:["point","area"],tags:{craft:"carpet_layer"},name:"Carpet Layer"},"craft/caterer":{icon:"maki-restaurant",fields:["name","cuisine","{craft}"],geometry:["point","area"],tags:{craft:"caterer"},name:"Caterer"},"craft/chimney_sweeper":{icon:"temaki-chimney",geometry:["point","area"],tags:{craft:"chimney_sweeper"},name:"Chimney Sweeper"},"craft/clockmaker":{icon:"temaki-clock",geometry:["point","area"],tags:{craft:"clockmaker"},name:"Clockmaker"},"craft/confectionery":{icon:"maki-confectionery",geometry:["point","area"],terms:["sweet","candy"],tags:{craft:"confectionery"},name:"Candy Maker"},"craft/distillery":{icon:"temaki-storage_tank",fields:["{craft}","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:"maki-clothing-store",geometry:["point","area"],terms:["seamstress"],tags:{craft:"dressmaker"},name:"Dressmaker"},"craft/electrician":{icon:"temaki-power",geometry:["point","area"],terms:["power","wire"],tags:{craft:"electrician"},name:"Electrician"},"craft/electronics_repair":{icon:"temaki-tools",geometry:["point","area"],tags:{craft:"electronics_repair"},name:"Electronics Repair Shop"},"craft/gardener":{icon:"maki-garden-centre",geometry:["point","area"],terms:["landscaper","grounds keeper"],tags:{craft:"gardener"},name:"Gardener"},"craft/glaziery":{icon:"temaki-window",geometry:["point","area"],terms:["glass","stained-glass","window"],tags:{craft:"glaziery"},name:"Glaziery"},"craft/handicraft":{icon:"maki-art-gallery",geometry:["point","area"],tags:{craft:"handicraft"},name:"Handicraft"},"craft/hvac":{icon:"temaki-tools",geometry:["point","area"],terms:["heat*","vent*","air conditioning"],tags:{craft:"hvac"},name:"HVAC"},"craft/insulator":{icon:"temaki-tools",geometry:["point","area"],tags:{craft:"insulation"},name:"Insulator"},"craft/key_cutter":{icon:"fas-key",geometry:["point","area"],tags:{craft:"key_cutter"},name:"Key Cutter"},"craft/metal_construction":{icon:"temaki-tools",geometry:["point","area"],tags:{craft:"metal_construction"},name:"Metal Construction"},"craft/painter":{icon:"fas-paint-roller",geometry:["point","area"],tags:{craft:"painter"},name:"Painter"},"craft/photographer":{icon:"maki-attraction",geometry:["point","area"],tags:{craft:"photographer"},name:"Photographer"},"craft/photographic_laboratory":{icon:"maki-attraction",geometry:["point","area"],terms:["film"],tags:{craft:"photographic_laboratory"},name:"Photographic Laboratory"},"craft/plasterer":{icon:"temaki-tools",geometry:["point","area"],tags:{craft:"plasterer"},name:"Plasterer"},"craft/plumber":{icon:"temaki-plumber",geometry:["point","area"],terms:["pipe"],tags:{craft:"plumber"},name:"Plumber"},"craft/pottery":{icon:"maki-art-gallery",geometry:["point","area"],terms:["ceramic"],tags:{craft:"pottery"},name:"Pottery"},"craft/rigger":{icon:"temaki-tools",geometry:["point","area"],tags:{craft:"rigger"},name:"Rigger"},"craft/roofer":{icon:"temaki-tools",geometry:["point","area"],tags:{craft:"roofer"},name:"Roofer"},"craft/saddler":{icon:"temaki-tools",geometry:["point","area"],tags:{craft:"saddler"},name:"Saddler"},"craft/sailmaker":{icon:"temaki-tools",geometry:["point","area"],tags:{craft:"sailmaker"},name:"Sailmaker"},"craft/sawmill":{icon:"maki-logging",geometry:["point","area"],terms:["lumber"],tags:{craft:"sawmill"},name:"Sawmill"},"craft/scaffolder":{icon:"temaki-tools",geometry:["point","area"],tags:{craft:"scaffolder"},name:"Scaffolder"},"craft/sculptor":{icon:"maki-art-gallery",geometry:["point","area"],tags:{craft:"sculptor"},name:"Sculptor"},"craft/shoemaker":{icon:"maki-shoe",geometry:["point","area"],terms:["cobbler"],tags:{craft:"shoemaker"},name:"Shoemaker"},"craft/stonemason":{icon:"temaki-tools",geometry:["point","area"],terms:["masonry"],tags:{craft:"stonemason"},name:"Stonemason"},"craft/tiler":{icon:"temaki-tools",geometry:["point","area"],tags:{craft:"tiler"},name:"Tiler"},"craft/tinsmith":{icon:"temaki-tools",geometry:["point","area"],tags:{craft:"tinsmith"},name:"Tinsmith"},"craft/upholsterer":{icon:"temaki-tools",geometry:["point","area"],tags:{craft:"upholsterer"},name:"Upholsterer"},"craft/watchmaker":{icon:"maki-watch",geometry:["point","area"],tags:{craft:"watchmaker"},name:"Watchmaker"},"craft/window_construction":{icon:"temaki-window",geometry:["point","area"],terms:["glass"],tags:{craft:"window_construction"},name:"Window Construction"},"craft/winery":{icon:"maki-alcohol-shop",geometry:["point","area"],tags:{craft:"winery"},name:"Winery"},"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:"fas-ambulance",fields:["name","operator","building_area","address"],moreFields:["website","phone","email","fax","wheelchair"],geometry:["point","area"],terms:["EMS","EMT","rescue"],tags:{emergency:"ambulance_station"},name:"Ambulance Station"},"emergency/defibrillator":{icon:"maki-defibrillator",fields:["indoor","ref","operator"],geometry:["point","vertex"],terms:["AED"],tags:{emergency:"defibrillator"},name:"Defibrillator"},"emergency/fire_alarm":{icon:"fas-bell",fields:["indoor","ref","operator"],geometry:["point","vertex"],tags:{emergency:"fire_alarm_box"},name:"Fire Alarm Call Box"},"emergency/fire_extinguisher":{icon:"fas-fire-extinguisher",fields:["indoor","ref","operator"],geometry:["point","vertex"],tags:{emergency:"fire_extinguisher"},name:"Fire Extinguisher"},"emergency/fire_hydrant":{icon:"temaki-fire_hydrant",fields:["ref","fire_hydrant/type","colour","water_source","couplings"],moreFields:["fire_hydrant/pressure","fire_hydrant/diameter","water_volume","survey/date"],geometry:["point","vertex"],terms:["fire plug","fire water well","hydrant"],tags:{emergency:"fire_hydrant"},name:"Fire Hydrant"},"emergency/first_aid_kit":{icon:"fas-medkit",fields:["indoor","ref","operator"],geometry:["point","vertex"],terms:["bandage","first aid","med","med kit","medic*","medkit"],tags:{emergency:"first_aid_kit"},name:"First Aid Kit"},"emergency/life_ring":{icon:"fas-life-ring",fields:["ref","operator"],geometry:["point","vertex"],terms:["life buoy","kisby ring","kisbie ring","perry buoy"],tags:{emergency:"life_ring"},name:"Life Ring"},"emergency/lifeguard":{icon:"fas-life-ring",fields:["ref","operator","building_area","opening_hours"],geometry:["point","area"],terms:["CPR","rescue"],tags:{emergency:"lifeguard"},name:"Lifeguard"},"emergency/phone":{icon:"maki-emergency-phone",fields:["ref","operator","covered","indoor","booth"],geometry:["point","vertex"],tags:{emergency:"phone"},name:"Emergency Phone"},"emergency/siren":{icon:"fas-volume-up",fields:["siren/purpose","siren/type","ref","operator"],geometry:["point","vertex"],terms:["air raid","loud","noise","storm","tornado","warning"],tags:{emergency:"siren"},name:"Siren"},"emergency/water_tank":{icon:"maki-water",fields:["name","ref","operator"],geometry:["point","vertex"],terms:["water tank","cistern","reservoir"],tags:{emergency:"water_tank"},name:"Emergency Water Tank"},entrance:{icon:"maki-entrance-alt1",geometry:["vertex"],terms:["entrance","exit","door"],tags:{entrance:"*"},fields:["entrance","access_simple","address"],name:"Entrance/Exit"},ford:{geometry:["vertex"],tags:{ford:"yes"},name:"Ford"},"golf/bunker":{icon:"maki-golf",fields:["name"],geometry:["area"],tags:{golf:"bunker",natural:"sand"},terms:["hazard","bunker"],reference:{key:"golf",value:"bunker"},name:"Sand Trap"},"golf/cartpath_service":{icon:"maki-golf",fields:["{golf/path}","maxspeed"],geometry:["line"],tags:{highway:"service",golf:"cartpath",golf_cart:"designated"},reference:{key:"golf",value:"cartpath"},name:"Golf Cartpath / Service Road"},"golf/cartpath":{icon:"maki-golf",fields:["{golf/path}"],geometry:["line"],tags:{golf:"cartpath",golf_cart:"designated"},reference:{key:"golf",value:"cartpath"},name:"Golf Cartpath"},"golf/driving_range":{icon:"maki-golf",fields:["name","capacity"],geometry:["area"],tags:{golf:"driving_range",landuse:"grass"},reference:{key:"golf",value:"driving_range"},name:"Driving Range"},"golf/fairway":{icon:"maki-golf",fields:["name"],geometry:["area"],tags:{golf:"fairway",landuse:"grass"},reference:{key:"golf",value:"fairway"},name:"Fairway"},"golf/green":{icon:"maki-golf",fields:["name"],geometry:["area"],tags:{golf:"green",landuse:"grass",leisure:"pitch",sport:"golf"},reference:{key:"golf",value:"green"},name:"Putting Green"},"golf/hole":{icon:"maki-golf",fields:["name","ref_golf_hole","par","handicap"],geometry:["line"],tags:{golf:"hole"},name:"Golf Hole"},"golf/lateral_water_hazard":{icon:"maki-golf",fields:["name"],geometry:["area"],tags:{golf:"lateral_water_hazard",natural:"water"},reference:{key:"golf",value:"lateral_water_hazard"},name:"Lateral Water Hazard"},"golf/path":{icon:"maki-golf",fields:["name","surface","width","structure","incline"],geometry:["line"],tags:{golf:"path",foot:"designated"},reference:{key:"golf",value:"path"},name:"Golf Walking Path"},"golf/rough":{icon:"maki-golf",fields:["name"],geometry:["area"],tags:{golf:"rough",landuse:"grass"},reference:{key:"golf",value:"rough"},name:"Rough"},"golf/tee":{icon:"maki-golf",fields:["name"],geometry:["area"],tags:{golf:"tee",landuse:"grass"},terms:["teeing ground"],reference:{key:"golf",value:"tee"},name:"Tee Box"},"golf/water_hazard":{icon:"maki-golf",fields:["name"],geometry:["area"],tags:{golf:"water_hazard",natural:"water"},reference:{key:"golf",value:"water_hazard"},name:"Water Hazard"},healthcare:{icon:"maki-hospital",fields:["name","healthcare","operator","healthcare/speciality","address","building_area"],moreFields:["opening_hours","payment_multi","brand","website","phone","email","fax","wheelchair"],geometry:["point","area"],tags:{healthcare:"*"},terms:["clinic","doctor","disease","health","institution","sick","surgery","wellness"],name:"Healthcare Facility"},"healthcare/alternative":{icon:"maki-hospital",geometry:["point","area"],terms:["acupuncture","anthroposophical","applied kinesiology","aromatherapy","ayurveda","herbalism","homeopathy","hydrotherapy","hypnosis","naturopathy","osteopathy","reflexology","reiki","shiatsu","traditional","tuina","unani"],tags:{healthcare:"alternative"},name:"Alternative Medicine"},"healthcare/alternative/chiropractic":{icon:"maki-hospital",geometry:["point","area"],terms:["back","pain","spine"],tags:{healthcare:"alternative","healthcare:speciality":"chiropractic"},name:"Chiropractor"},"healthcare/audiologist":{icon:"maki-hospital",geometry:["point","area"],terms:["ear","hearing","sound"],tags:{healthcare:"audiologist"},name:"Audiologist"},"healthcare/birthing_center":{icon:"maki-hospital",geometry:["point","area"],terms:["baby","childbirth","delivery","labour","labor","pregnancy"],tags:{healthcare:"birthing_center"},name:"Birthing Center"},"healthcare/blood_donation":{icon:"maki-blood-bank",fields:["{healthcare}","blood_components"],geometry:["point","area"],terms:["blood bank","blood donation","blood transfusion","apheresis","plasmapheresis","plateletpheresis","stem cell donation"],tags:{healthcare:"blood_donation"},name:"Blood Donor Center"},"healthcare/hospice":{icon:"maki-hospital",geometry:["point","area"],terms:["terminal","illness"],tags:{healthcare:"hospice"},name:"Hospice"},"healthcare/laboratory":{icon:"maki-hospital",fields:["name","operator","website","ref","address","opening_hours"],geometry:["point","area"],terms:["medical_laboratory","medical_lab","blood_check"],tags:{healthcare:"laboratory"},name:"Medical Laboratory"},"healthcare/midwife":{icon:"maki-hospital",geometry:["point","area"],terms:["baby","childbirth","delivery","labour","labor","pregnancy"],tags:{healthcare:"midwife"},name:"Midwife"},"healthcare/occupational_therapist":{icon:"maki-hospital",geometry:["point","area"],terms:["therapist","therapy"],tags:{healthcare:"occupational_therapist"},name:"Occupational Therapist"},"healthcare/optometrist":{icon:"maki-hospital",geometry:["point","area"],terms:["eye","glasses","lasik","lenses","vision"],tags:{healthcare:"optometrist"},name:"Optometrist"},"healthcare/physiotherapist":{icon:"temaki-physiotherapist",geometry:["point","area"],terms:["physical","therapist","therapy"],tags:{healthcare:"physiotherapist"},name:"Physiotherapist"},"healthcare/podiatrist":{icon:"maki-hospital",geometry:["point","area"],terms:["foot","feet","nails"],tags:{healthcare:"podiatrist"},name:"Podiatrist"},"healthcare/psychotherapist":{icon:"maki-hospital",geometry:["point","area"],terms:["anxiety","counselor","depression","mental health","mind","suicide","therapist","therapy"],tags:{healthcare:"psychotherapist"},name:"Psychotherapist"},"healthcare/rehabilitation":{icon:"maki-hospital",geometry:["point","area"],terms:["rehab","therapist","therapy"],tags:{healthcare:"rehabilitation"},name:"Rehabilitation Facility"},"healthcare/speech_therapist":{icon:"maki-hospital",geometry:["point","area"],terms:["speech","therapist","therapy","voice"],tags:{healthcare:"speech_therapist"},name:"Speech Therapist"},"highway/bus_stop":{icon:"maki-bus",fields:["name","network","operator","bench","shelter"],geometry:["point","vertex"],tags:{highway:"bus_stop"},name:"Bus Stop / Platform",searchable:false},"highway/bridleway":{fields:["name","surface","width","structure","access","incline","horse_scale"],moreFields:["wheelchair","lit","smoothness","covered","dog"],icon:"maki-horse-riding",geometry:["line"],tags:{highway:"bridleway"},terms:["bridleway","equestrian","horse","trail"],name:"Bridle Path"},"highway/bus_guideway":{icon:"maki-bus",fields:["name","operator","oneway","structure","covered"],geometry:["line"],tags:{highway:"bus_guideway"},addTags:{highway:"bus_guideway",access:"no",bus:"designated"},removeTags:{highway:"bus_guideway",access:"no",bus:"designated"},terms:[],name:"Bus Guideway"},"highway/construction":{icon:"maki-barrier",fields:["name","opening_date","check_date","note","oneway","structure","access"],geometry:["line"],tags:{highway:"construction",access:"no"},terms:["closed","closure","construction"],name:"Road Closed"},"highway/corridor":{icon:"temaki-pedestrian",fields:["name","width","level","access_simple","wheelchair"],moreFields:["maxheight"],geometry:["line"],tags:{highway:"corridor"},terms:["gallery","hall","hallway","indoor","passage","passageway"],name:"Indoor Corridor"},"highway/crossing/zebra-raised":{icon:"temaki-pedestrian",fields:["crossing","kerb","tactile_paving"],geometry:["vertex"],tags:{highway:"crossing",crossing:"zebra",traffic_calming:"table"},reference:{key:"traffic_calming",value:"table"},terms:["zebra crossing","marked crossing","crosswalk","flat top","hump","speed","slow"],name:"Marked Crosswalk (Raised)",searchable:false},"highway/crossing/zebra":{icon:"temaki-pedestrian",fields:["crossing","kerb","tactile_paving"],geometry:["vertex"],tags:{highway:"crossing",crossing:"zebra"},reference:{key:"highway",value:"crossing"},terms:["zebra crossing","marked crossing","crosswalk"],name:"Marked Crosswalk",searchable:false},"highway/crossing/marked-raised":{icon:"temaki-pedestrian",fields:["crossing","kerb","tactile_paving"],geometry:["vertex"],tags:{highway:"crossing",crossing:"marked",traffic_calming:"table"},reference:{key:"traffic_calming",value:"table"},terms:["zebra crossing","marked crossing","crosswalk","flat top","hump","speed","slow"],name:"Marked Crosswalk (Raised)"},"highway/crossing/marked":{icon:"temaki-pedestrian",fields:["crossing","kerb","tactile_paving"],geometry:["vertex"],tags:{highway:"crossing",crossing:"marked"},reference:{key:"highway",value:"crossing"},terms:["zebra crossing","marked crossing","crosswalk"],name:"Marked Crosswalk"},"highway/crossing/unmarked-raised":{fields:["crossing","kerb","tactile_paving"],geometry:["vertex"],addTags:{highway:"crossing",crossing:"unmarked",traffic_calming:"table"},removeTags:{highway:"crossing",crossing:"unmarked",traffic_calming:"table"},tags:{highway:"crossing",traffic_calming:"table"},reference:{key:"traffic_calming",value:"table"},terms:["flat top","hump","speed","slow"],name:"Unmarked Crossing (Raised)"},"highway/crossing/unmarked":{fields:["crossing","kerb","tactile_paving"],geometry:["vertex"],addTags:{highway:"crossing",crossing:"unmarked"},removeTags:{highway:"crossing",crossing:"unmarked"},tags:{highway:"crossing"},reference:{key:"highway",value:"crossing"},terms:[],name:"Unmarked Crossing"},"highway/cycleway":{icon:"maki-bicycle",fields:["name","oneway","surface","width","structure","access","incline"],moreFields:["wheelchair","lit","smoothness","maxspeed","covered","dog"],geometry:["line"],tags:{highway:"cycleway"},terms:["bike"],name:"Cycle Path"},"highway/elevator":{icon:"temaki-elevator",fields:["access_simple","opening_hours","maxweight","ref","wheelchair"],moreFields:["maxheight"],geometry:["vertex"],tags:{highway:"elevator"},terms:["lift"],name:"Elevator"},"highway/footway":{icon:"temaki-pedestrian",fields:["name","surface","width","structure","access","incline"],moreFields:["wheelchair","lit","smoothness","covered","dog"],geometry:["line"],terms:["hike","hiking","trackway","trail","walk"],tags:{highway:"footway"},name:"Foot Path"},"highway/footway/zebra-raised":{icon:"temaki-pedestrian",fields:["crossing","access","surface","kerb","tactile_paving"],geometry:["line"],tags:{highway:"footway",footway:"crossing",crossing:"zebra",traffic_calming:"table"},reference:{key:"traffic_calming",value:"table"},terms:["zebra crossing","marked crossing","crosswalk","flat top","hump","speed","slow"],name:"Marked Crosswalk (Raised)",searchable:false},"highway/footway/zebra":{icon:"temaki-pedestrian",fields:["crossing","access","surface","kerb","tactile_paving"],geometry:["line"],tags:{highway:"footway",footway:"crossing",crossing:"zebra"},reference:{key:"footway",value:"crossing"},terms:["zebra crossing","marked crossing","crosswalk"],name:"Marked Crosswalk",searchable:false},"highway/footway/conveying":{icon:"temaki-pedestrian",fields:["name","conveying","access_simple","lit","width","wheelchair"],geometry:["line"],terms:["moving sidewalk","autwalk","skywalk","travolator","travelator","travellator","conveyor"],tags:{highway:"footway",conveying:"*"},name:"Moving Walkway"},"highway/footway/marked-raised":{icon:"temaki-pedestrian",fields:["crossing","access","surface","kerb","tactile_paving"],geometry:["line"],tags:{highway:"footway",footway:"crossing",crossing:"marked",traffic_calming:"table"},reference:{key:"traffic_calming",value:"table"},terms:["zebra crossing","marked crossing","crosswalk","flat top","hump","speed","slow"],name:"Marked Crosswalk (Raised)"},"highway/footway/marked":{icon:"temaki-pedestrian",fields:["crossing","access","surface","kerb","tactile_paving"],geometry:["line"],tags:{highway:"footway",footway:"crossing",crossing:"marked"},reference:{key:"footway",value:"crossing"},terms:["zebra crossing","marked crossing","crosswalk"],name:"Marked Crosswalk"},"highway/footway/sidewalk":{icon:"temaki-pedestrian",geometry:["line"],tags:{highway:"footway",footway:"sidewalk"},reference:{key:"footway",value:"sidewalk"},terms:["pavement","sidepath"],name:"Sidewalk"},"highway/footway/unmarked-raised":{fields:["crossing","access","surface","kerb","tactile_paving"],geometry:["line"],addTags:{highway:"footway",footway:"crossing",crossing:"unmarked",traffic_calming:"table"},removeTags:{highway:"footway",footway:"crossing",crossing:"unmarked",traffic_calming:"table"},tags:{highway:"footway",footway:"crossing",traffic_calming:"table"},reference:{key:"traffic_calming",value:"table"},terms:["flat top","hump","speed","slow"],name:"Unmarked Crossing (Raised)"},"highway/footway/unmarked":{fields:["crossing","access","surface","kerb","tactile_paving"],geometry:["line"],addTags:{highway:"footway",footway:"crossing",crossing:"unmarked"},removeTags:{highway:"footway",footway:"crossing",crossing:"unmarked"},tags:{highway:"footway",footway:"crossing"},reference:{key:"footway",value:"crossing"},terms:[],name:"Unmarked Crossing"},"highway/give_way":{icon:"temaki-yield",fields:["direction_vertex"],geometry:["vertex"],tags:{highway:"give_way"},terms:["give way","yield","sign"],name:"Yield Sign"},"highway/living_street":{icon:"iD-highway-living-street",fields:["name","oneway","maxspeed","lanes","surface","structure","access"],moreFields:["cycleway","maxheight","covered","junction_line","lit","smoothness","oneway/bicycle"],geometry:["line"],tags:{highway:"living_street"},name:"Living Street"},"highway/milestone":{icon:"temaki-milestone",geometry:["point","vertex"],fields:["distance","direction_vertex"],tags:{highway:"milestone"},terms:["milestone","marker"],name:"Highway Milestone"},"highway/mini_roundabout":{icon:"maki-circle-stroked",geometry:["vertex"],tags:{highway:"mini_roundabout"},fields:["direction_clock"],name:"Mini-Roundabout"},"highway/motorway_junction":{icon:"temaki-junction",fields:["ref_highway_junction","name"],geometry:["vertex"],tags:{highway:"motorway_junction"},terms:["exit"],name:"Motorway Junction / Exit"},"highway/motorway_link":{icon:"iD-highway-motorway-link",fields:["destination_oneway","destination/ref_oneway","junction/ref_oneway","oneway","maxspeed","lanes","surface","structure","access"],moreFields:["covered","destination/symbol_oneway","junction_line","lit","maxheight","maxspeed/advisory","name","ref_road_number","smoothness","toll"],geometry:["line"],tags:{highway:"motorway_link"},addTags:{highway:"motorway_link",oneway:"yes"},removeTags:{highway:"motorway_link",oneway:"yes"},terms:["exit","ramp","road","street","on ramp","off ramp"],name:"Motorway Link"},"highway/motorway":{icon:"iD-highway-motorway",fields:["name","ref_road_number","oneway_yes","maxspeed","lanes","surface","structure","access"],moreFields:["toll","maxheight","covered","lit","smoothness","minspeed","junction_line"],geometry:["line"],tags:{highway:"motorway"},terms:["autobahn","expressway","freeway","highway","interstate","parkway","road","street","thruway","turnpike"],name:"Motorway"},"highway/passing_place":{icon:"maki-circle-stroked",geometry:["vertex"],tags:{highway:"passing_place"},terms:["turnout, pullout"],name:"Passing Place"},"highway/path":{icon:"iD-other-line",fields:["name","surface","width","structure","access","incline"],moreFields:["wheelchair","lit","smoothness","trail_visibility","sac_scale","mtb/scale","mtb/scale/uphill","mtb/scale/imba","horse_scale","covered","ref","dog"],geometry:["line"],terms:["hike","hiking","trackway","trail","walk"],tags:{highway:"path"},name:"Path"},"highway/pedestrian_area":{icon:"temaki-pedestrian",fields:["name","surface","lit","width","structure","access"],geometry:["area"],tags:{highway:"pedestrian",area:"yes"},terms:["center","centre","plaza","quad","square","walkway"],name:"Pedestrian Area"},"highway/pedestrian_line":{icon:"temaki-pedestrian",fields:["name","surface","lit","width","oneway","structure","access"],moreFields:["covered","smoothness"],geometry:["line"],tags:{highway:"pedestrian"},terms:["center","centre","plaza","quad","square","walkway"],name:"Pedestrian Street"},"highway/primary_link":{icon:"iD-highway-primary-link",fields:["destination_oneway","destination/ref_oneway","oneway","maxspeed","lanes","surface","structure","access"],moreFields:["covered","cycleway","destination/symbol_oneway","junction/ref_oneway","junction_line","lit","maxheight","maxspeed/advisory","name","oneway/bicycle","ref_road_number","smoothness","toll"],geometry:["line"],tags:{highway:"primary_link"},terms:["on ramp","off ramp","ramp","road","street"],name:"Primary Link"},"highway/primary":{icon:"iD-highway-primary",fields:["name","oneway","maxspeed","lanes","surface","structure","ref_road_number","access"],moreFields:["covered","cycleway","junction_line","lit","maxheight","maxspeed/advisory","oneway/bicycle","smoothness","toll"],geometry:["line"],tags:{highway:"primary"},terms:["road","street"],name:"Primary Road"},"highway/raceway":{icon:"iD-highway-unclassified",fields:["name","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:"iD-highway-residential",fields:["name","oneway","maxspeed","lanes","surface","structure","access"],moreFields:["covered","cycleway","junction_line","lit","oneway/bicycle","maxheight","maxspeed/advisory","smoothness"],geometry:["line"],tags:{highway:"residential"},terms:["road","street"],name:"Residential Road"},"highway/rest_area":{icon:"maki-car",fields:["name","operator","opening_hours"],moreFields:["address","website","phone","email","fax","wheelchair"],geometry:["point","vertex","area"],tags:{highway:"rest_area"},terms:["rest stop"],name:"Rest Area"},"highway/road":{icon:"iD-other-line",fields:["{highway/residential}"],moreFields:["{highway/residential}"],geometry:["line"],tags:{highway:"road"},terms:["road","street"],name:"Unknown Road"},"highway/secondary_link":{icon:"iD-highway-secondary-link",fields:["{highway/primary_link}"],moreFields:["{highway/primary_link}"],geometry:["line"],tags:{highway:"secondary_link"},terms:["on ramp","off ramp","ramp","road","street"],name:"Secondary Link"},"highway/secondary":{icon:"iD-highway-secondary",fields:["{highway/primary}"],moreFields:["{highway/primary}"],geometry:["line"],tags:{highway:"secondary"},terms:["road","street"],name:"Secondary Road"},"highway/service":{icon:"iD-highway-service",fields:["name","service","oneway","maxspeed","surface","structure","access"],moreFields:["covered","lanes","lit","maxheight","maxspeed/advisory","oneway/bicycle"],geometry:["line"],tags:{highway:"service"},terms:["road","street"],name:"Service Road"},"highway/service/alley":{icon:"iD-highway-service",geometry:["line"],tags:{highway:"service",service:"alley"},reference:{key:"service",value:"alley"},name:"Alley"},"highway/service/drive-through":{icon:"iD-highway-service",fields:["{highway/service}","covered"],geometry:["line"],tags:{highway:"service",service:"drive-through"},reference:{key:"service",value:"drive-through"},name:"Drive-Through"},"highway/service/driveway":{icon:"iD-highway-service",geometry:["line"],tags:{highway:"service",service:"driveway"},reference:{key:"service",value:"driveway"},name:"Driveway"},"highway/service/emergency_access":{icon:"iD-highway-service",geometry:["line"],tags:{highway:"service",service:"emergency_access"},reference:{key:"service",value:"emergency_access"},name:"Emergency Access"},"highway/service/parking_aisle":{icon:"iD-highway-service",geometry:["line"],tags:{highway:"service",service:"parking_aisle"},reference:{key:"service",value:"parking_aisle"},name:"Parking Aisle"},"highway/services":{icon:"maki-car",fields:["{highway/rest_area}"],moreFields:["{highway/rest_area}"],geometry:["point","vertex","area"],tags:{highway:"services"},terms:["services","travel plaza","service station"],name:"Service Area"},"highway/speed_camera":{icon:"maki-attraction",geometry:["point","vertex"],fields:["direction","ref","maxspeed"],tags:{highway:"speed_camera"},terms:[],name:"Speed Camera"},"highway/steps":{icon:"iD-highway-steps",fields:["surface","lit","width","incline_steps","handrail","step_count"],geometry:["line"],tags:{highway:"steps"},terms:["stairs","staircase"],name:"Steps"},"highway/steps/conveying":{icon:"maki-entrance",fields:["name","incline_steps","conveying","access_simple","lit","width","handrail","step_count"],geometry:["line"],terms:["moving staircase","moving stairway","people mover"],tags:{highway:"steps",conveying:"*"},name:"Escalator"},"highway/stop":{icon:"temaki-stop",fields:["stop","direction_vertex"],geometry:["vertex"],tags:{highway:"stop"},terms:["stop","halt","sign"],name:"Stop Sign"},"highway/street_lamp":{icon:"temaki-bulb",geometry:["point","vertex"],tags:{highway:"street_lamp"},fields:["lamp_type","direction","ref"],terms:["streetlight","street light","lamp","light","gaslight"],name:"Street Lamp"},"highway/tertiary_link":{icon:"iD-highway-tertiary-link",fields:["{highway/primary_link}"],moreFields:["{highway/primary_link}"],geometry:["line"],tags:{highway:"tertiary_link"},terms:["on ramp","off ramp","ramp","road","street"],name:"Tertiary Link"},"highway/tertiary":{icon:"iD-highway-tertiary",fields:["{highway/primary}"],moreFields:["{highway/primary}"],geometry:["line"],tags:{highway:"tertiary"},terms:["road","street"],name:"Tertiary Road"},"highway/track":{icon:"iD-highway-track",fields:["name","tracktype","surface","width","structure","access","incline","smoothness"],moreFields:["mtb/scale","mtb/scale/uphill","mtb/scale/imba","horse_scale","covered"],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","vertex"],fields:["direction"],tags:{highway:"traffic_mirror"},terms:["blind spot","convex","corner","curved","roadside","round","safety","sphere","visibility"],name:"Traffic Mirror"},"highway/traffic_signals":{icon:"temaki-traffic_signals",geometry:["vertex"],tags:{highway:"traffic_signals"},fields:["traffic_signals","traffic_signals/direction"],terms:["light","stoplight","traffic light"],name:"Traffic Signals"},"highway/trunk_link":{icon:"iD-highway-trunk-link",fields:["{highway/motorway_link}"],moreFields:["{highway/motorway_link}"],geometry:["line"],tags:{highway:"trunk_link"},terms:["on ramp","off ramp","ramp","road","street"],name:"Trunk Link"},"highway/trunk":{icon:"iD-highway-trunk",fields:["name","ref_road_number","oneway","maxspeed","lanes","surface","structure","access"],moreFields:["toll","maxheight","covered","lit","smoothness","minspeed","junction_line"],geometry:["line"],tags:{highway:"trunk"},terms:["road","street"],name:"Trunk Road"},"highway/turning_circle":{icon:"maki-circle-stroked",geometry:["vertex"],tags:{highway:"turning_circle"},terms:["cul-de-sac"],name:"Turning Circle"},"highway/turning_loop":{icon:"maki-circle",geometry:["vertex"],tags:{highway:"turning_loop"},terms:["cul-de-sac"],name:"Turning Loop (Island)"},"highway/unclassified":{icon:"iD-highway-unclassified",fields:["{highway/residential}"],moreFields:["{highway/residential}"],geometry:["line"],tags:{highway:"unclassified"},terms:["road","street"],name:"Minor/Unclassified Road"},historic:{icon:"temaki-ruins",fields:["historic","inscription"],geometry:["point","vertex","area"],tags:{historic:"*"},name:"Historic Site"},"historic/archaeological_site":{icon:"temaki-ruins",fields:["name","site_type","historic/civilization","inscription","access_simple"],geometry:["point","vertex","area"],tags:{historic:"archaeological_site"},name:"Archaeological Site"},"historic/boundary_stone":{icon:"temaki-milestone",fields:["name","inscription"],moreFields:["material"],geometry:["point","vertex"],tags:{historic:"boundary_stone"},name:"Boundary Stone"},"historic/castle":{icon:"maki-castle",fields:["name","castle_type","building_area","historic/civilization","access_simple"],geometry:["point","area"],tags:{historic:"castle"},name:"Castle"},"historic/memorial":{icon:"maki-monument",fields:["name","memorial","inscription"],moreFields:["material","website"],geometry:["point","vertex","area"],terms:["dedicatory","epitaph","remember","remembrance","memory","monument","stolperstein"],tags:{historic:"memorial"},name:"Memorial"},"historic/monument":{icon:"maki-monument",fields:["name","inscription","access_simple"],moreFields:["material"],geometry:["point","vertex","area"],tags:{historic:"monument"},name:"Monument"},"historic/ruins":{icon:"temaki-ruins",fields:["name","historic/civilization","inscription","access_simple"],geometry:["point","vertex","area"],tags:{historic:"ruins"},name:"Ruins"},"historic/tomb":{icon:"maki-cemetery",fields:["name","tomb","building_area","inscription","access_simple"],geometry:["point","area"],tags:{historic:"tomb"},name:"Tomb"},"historic/wayside_cross":{icon:"maki-religious-christian",fields:["name","inscription"],moreFields:["material"],geometry:["point","vertex","area"],tags:{historic:"wayside_cross"},name:"Wayside Cross"},"historic/wayside_shrine":{icon:"maki-landmark",fields:["name","religion","denomination","inscription","access_simple"],geometry:["point","vertex","area"],tags:{historic:"wayside_shrine"},name:"Wayside Shrine"},"historic/wreck":{icon:"temaki-ruins",fields:["name","access_simple","seamark/wreck/category","historic/wreck/date_sunk","historic/wreck/visible_at_low_tide","historic/wreck/visible_at_high_tide"],moreFields:["seamark/type"],geometry:["point","area"],tags:{historic:"wreck"},addTags:{historic:"wreck","seamark:type":"wreck"},removeTags:{historic:"wreck","seamark:type":"wreck"},terms:["hull","mast","maritime","remains","ship","boat"],name:"Shipwreck"},"internet_access/wlan":{icon:"fas-wifi",geometry:["point","area"],fields:["internet_access/fee","internet_access/ssid"],terms:["wi-fi","wifi","hotspot"],tags:{internet_access:"wlan"},matchScore:0.25,name:"Wi-Fi Hotspot"},junction:{icon:"temaki-junction",fields:["name"],geometry:["vertex","area"],tags:{junction:"yes"},name:"Junction"},"landuse/basin":{icon:"maki-water",fields:["name","basin","intermittent_yes"],geometry:["area"],tags:{landuse:"basin"},name:"Basin",searchable:false},"landuse/farm":{icon:"maki-farm",fields:["name","operator","crop"],geometry:["point","area"],tags:{landuse:"farm"},name:"Farmland",searchable:false},"landuse/pond":{icon:"maki-water",fields:["name","intermittent"],geometry:["area"],tags:{landuse:"pond"},name:"Pond",searchable:false},"landuse/reservoir":{icon:"maki-water",fields:["name","intermittent"],geometry:["area"],tags:{landuse:"reservoir"},name:"Reservoir",searchable:false},"landuse/allotments":{icon:"maki-garden-centre",geometry:["area"],fields:["name"],moreFields:["address","website","phone","email","fax"],tags:{landuse:"allotments"},terms:["allotment","garden"],name:"Community Garden"},"landuse/aquaculture":{icon:"maki-aquarium",fields:["name","operator","produce"],moreFields:["address","website","phone","email","fax"],geometry:["area"],tags:{landuse:"aquaculture"},terms:["fish farm","crustacean","algae","aquafarming","shrimp farm","oyster farm","mariculture","algaculture"],name:"Aquaculture"},"landuse/brownfield":{geometry:["area"],fields:["name"],tags:{landuse:"brownfield"},terms:[],matchScore:0.9,name:"Brownfield"},"landuse/cemetery":{icon:"maki-cemetery",fields:["name","religion","denomination"],moreFields:["address","website","phone","email","fax"],geometry:["area"],tags:{landuse:"cemetery"},terms:[],name:"Cemetery"},"landuse/churchyard":{icon:"maki-religious-christian",fields:["name","religion","denomination"],moreFields:["address","website","phone","email","fax"],geometry:["area"],tags:{landuse:"churchyard"},terms:[],name:"Churchyard"},"landuse/commercial":{icon:"maki-suitcase",fields:["name"],moreFields:["address","website","phone","email","fax"],geometry:["area"],tags:{landuse:"commercial"},terms:[],matchScore:0.9,name:"Commercial Area"},"landuse/construction":{icon:"temaki-tools",fields:["name","construction","operator"],moreFields:["address","website","phone","email","fax"],geometry:["area"],tags:{landuse:"construction"},terms:[],name:"Construction"},"landuse/farmland":{icon:"maki-farm",fields:["name","operator","crop","produce"],moreFields:["address","website","phone","email","fax"],geometry:["area"],tags:{landuse:"farmland"},terms:["crop","grow","plant"],name:"Farmland"},"landuse/farmyard":{icon:"maki-farm",fields:["name","operator","crop"],moreFields:["address","website","phone","email","fax"],geometry:["area"],tags:{landuse:"farmyard"},terms:["crop","grow","plant"],name:"Farmyard"},"landuse/forest":{icon:"maki-park-alt1",fields:["name","leaf_type","leaf_cycle","produce"],moreFields:["address","website","phone","email","fax"],geometry:["area"],tags:{landuse:"forest"},terms:["cut","forest","forestry","lumber","silviculture","tree"],name:"Managed Forest"},"landuse/garages":{icon:"fas-warehouse",geometry:["area"],fields:["name"],moreFields:["address","website","phone","email","fax"],tags:{landuse:"garages"},terms:[],name:"Garage Landuse"},"landuse/grass":{geometry:["area"],tags:{landuse:"grass"},terms:[],name:"Grass"},"landuse/greenfield":{geometry:["area"],fields:["name"],tags:{landuse:"greenfield"},terms:[],matchScore:0.9,name:"Greenfield"},"landuse/greenhouse_horticulture":{icon:"maki-garden",fields:["name","operator"],moreFields:["address","website","phone","email","fax"],geometry:["area"],terms:["flower","greenhouse","horticulture","grow","vivero"],tags:{landuse:"greenhouse_horticulture"},matchScore:0.9,name:"Greenhouse Horticulture"},"landuse/harbour":{icon:"maki-harbor",fields:["name","operator"],moreFields:["address","website","phone","email","fax"],geometry:["area"],terms:["boat"],tags:{landuse:"harbour"},name:"Harbor"},"landuse/industrial":{icon:"maki-industry",fields:["name","industrial"],moreFields:["address","website","phone","email","fax"],geometry:["area"],tags:{landuse:"industrial"},terms:[],matchScore:0.9,name:"Industrial Area"},"landuse/industrial/scrap_yard":{icon:"maki-car",fields:["name","operator","address","opening_hours"],geometry:["point","area"],tags:{industrial:"scrap_yard"},addTags:{landuse:"industrial",industrial:"scrap_yard"},removeTags:{landuse:"industrial",industrial:"scrap_yard"},reference:{key:"industrial",value:"scrap_yard"},terms:["car","junk","metal","salvage","scrap","u-pull-it","vehicle","wreck","yard"],name:"Scrap Yard"},"landuse/industrial/slaughterhouse":{icon:"maki-slaughterhouse",fields:["name","operator","address","building_area","opening_hours"],geometry:["point","area"],tags:{industrial:"slaughterhouse"},addTags:{landuse:"industrial",industrial:"slaughterhouse"},removeTags:{landuse:"industrial",industrial:"slaughterhouse"},reference:{key:"industrial",value:"slaughterhouse"},terms:["abattoir","beef","butchery","calf","chicken","cow","killing house","meat","pig","pork","poultry","shambles","stockyard"],name:"Slaughterhouse"},"landuse/landfill":{geometry:["area"],fields:["name"],moreFields:["address","website","phone","email","fax"],tags:{landuse:"landfill"},terms:["dump"],name:"Landfill"},"landuse/meadow":{icon:"maki-garden",geometry:["area"],fields:["name"],tags:{landuse:"meadow"},terms:[],name:"Meadow"},"landuse/military":{icon:"temaki-military",fields:["name"],moreFields:["address","website","phone","email","fax"],geometry:["area"],tags:{landuse:"military"},terms:[],matchScore:0.9,name:"Military Area"},"landuse/military/airfield":{icon:"maki-airfield",fields:["name","iata","icao"],geometry:["point","area"],tags:{military:"airfield"},addTags:{aeroway:"aerodrome",landuse:"military",military:"airfield"},removeTags:{aeroway:"aerodrome",landuse:"military",military:"airfield"},reference:{key:"military",value:"airfield"},terms:["aerodrome","aeroway","air force","airplane","airport","army","base","bomb","fight","force","guard","heli*","jet","marine","navy","plane","troop","war"],name:"Military Airfield"},"landuse/military/barracks":{icon:"temaki-military",fields:["name","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:"temaki-military",fields:["name","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:"maki-barrier",fields:["name"],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:"maki-danger",fields:["name"],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:"temaki-military",fields:["name"],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:"maki-danger",fields:["name"],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:"temaki-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:"temaki-military",fields:["name","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:"temaki-military",fields:["name"],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:"temaki-military",fields:["name"],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:"maki-park-alt1",fields:["name","operator","trees"],moreFields:["address","website","phone","email","fax"],geometry:["area"],tags:{landuse:"orchard"},terms:["fruit"],name:"Orchard"},"landuse/plant_nursery":{icon:"maki-garden",fields:["name","operator","plant"],moreFields:["address","website","phone","email","fax"],geometry:["area"],tags:{landuse:"plant_nursery"},terms:["flower","garden","grow","vivero"],name:"Plant Nursery"},"landuse/quarry":{geometry:["area"],fields:["name"],moreFields:["address","website","phone","email","fax"],tags:{landuse:"quarry"},terms:[],name:"Quarry"},"landuse/railway":{icon:"maki-rail",fields:["operator"],geometry:["area"],tags:{landuse:"railway"},terms:["rail","train","track"],name:"Railway Corridor"},"landuse/recreation_ground":{icon:"maki-pitch",geometry:["area"],fields:["name"],moreFields:["address","website","phone","email","fax"],tags:{landuse:"recreation_ground"},terms:["playing fields"],name:"Recreation Ground"},"landuse/religious":{icon:"maki-place-of-worship",geometry:["area"],fields:["name","religion","denomination"],moreFields:["address","website","phone","email","fax"],tags:{landuse:"religious"},terms:[],name:"Religious Area"},"landuse/residential":{icon:"maki-building",geometry:["area"],tags:{landuse:"residential"},terms:[],matchScore:0.9,name:"Residential Area"},"landuse/residential/apartments":{icon:"maki-building",fields:["name","operator","address"],geometry:["point","area"],tags:{residential:"apartments"},addTags:{landuse:"residential",residential:"apartments"},removeTags:{landuse:"residential",residential:"apartments"},reference:{key:"residential",value:"apartments"},terms:["flat","residence","tenement"],name:"Apartment Complex"},"landuse/retail":{icon:"maki-commercial",geometry:["area"],fields:["name"],moreFields:["address","website","phone","email","fax"],tags:{landuse:"retail"},matchScore:0.9,name:"Retail Area"},"landuse/vineyard":{fields:["name","operator","grape_variety"],moreFields:["address","website","phone","email","fax"],geometry:["area"],tags:{landuse:"vineyard"},addTags:{landuse:"vineyard",crop:"grape"},removeTags:{landuse:"vineyard",crop:"grape",grape_variety:"*"},terms:["grape","wine"],name:"Vineyard"},"leisure/adult_gaming_centre":{icon:"temaki-casino",fields:["{amenity/casino}"],moreFields:["{amenity/casino}"],geometry:["point","area"],terms:["gambling","slot machine"],tags:{leisure:"adult_gaming_centre"},name:"Adult Gaming Center"},"leisure/amusement_arcade":{icon:"maki-gaming",fields:["name","operator","address","building_area"],moreFields:["opening_hours","payment_multi","smoking","website","phone","email","fax"],geometry:["point","area"],terms:["pay-to-play games","video games","driving simulators","pinball machines"],tags:{leisure:"amusement_arcade"},name:"Amusement Arcade"},"leisure/bandstand":{icon:"maki-music",fields:["name","building_area","operator"],moreFields:["website"],geometry:["point","area"],tags:{leisure:"bandstand"},name:"Bandstand"},"leisure/beach_resort":{icon:"maki-beach",fields:["name","address","fee"],moreFields:["opening_hours","payment_multi","smoking","website","phone","email","fax"],geometry:["point","area"],tags:{leisure:"beach_resort"},name:"Beach Resort"},"leisure/bird_hide":{icon:"temaki-binoculars",fields:["name","building_area","address","opening_hours"],moreFields:["website"],geometry:["point","area"],tags:{leisure:"bird_hide"},terms:["machan","ornithology"],name:"Bird Hide"},"leisure/bleachers":{geometry:["point","area"],tags:{leisure:"bleachers"},terms:["crowd","bench","sports","stand","stands","seat","seating"],name:"Bleachers"},"leisure/bowling_alley":{icon:"temaki-bowling",fields:["name","operator","address","building_area"],moreFields:["opening_hours","payment_multi","smoking","website","phone","email","fax"],geometry:["point","area"],terms:["bowling center"],tags:{leisure:"bowling_alley"},name:"Bowling Alley"},"leisure/common":{icon:"temaki-pedestrian",fields:["name"],moreFields:["website"],geometry:["point","area"],terms:["open space"],tags:{leisure:"common"},name:"Common"},"leisure/dance":{icon:"maki-music",fields:["name","operator","address","building_area","dance/style"],moreFields:["opening_hours","payment_multi","website","phone","email","fax"],geometry:["point","area"],terms:["ballroom","jive","swing","tango","waltz"],tags:{leisure:"dance"},name:"Dance Hall"},"leisure/dancing_school":{icon:"maki-music",fields:["name","operator","address","building_area","dance/style"],moreFields:["opening_hours","payment_multi","website","phone","email","fax"],geometry:["point","area"],terms:["jive","swing","tango","waltz","dance teaching"],tags:{leisure:"dance","dance:teaching":"yes"},reference:{key:"leisure",value:"dance"},name:"Dance School"},"leisure/dog_park":{icon:"maki-dog-park",fields:["name"],moreFields:["website","phone","email","fax"],geometry:["point","area"],terms:[],tags:{leisure:"dog_park"},name:"Dog Park"},"leisure/firepit":{icon:"maki-fire-station",fields:["access_simple"],geometry:["point","area"],tags:{leisure:"firepit"},terms:["fireplace","campfire"],name:"Firepit"},"leisure/fishing":{icon:"fas-fish",fields:["name","access_simple"],geometry:["point","area"],tags:{leisure:"fishing"},terms:["angler"],name:"Fishing Spot"},"leisure/fitness_centre":{icon:"fas-dumbbell",fields:["name","sport","address","building_area"],moreFields:["opening_hours","fee","payment_multi","website","phone","email","fax"],geometry:["point","area"],tags:{leisure:"fitness_centre"},terms:["health","gym","leisure","studio"],name:"Gym / Fitness Center"},"leisure/fitness_centre/yoga":{icon:"maki-pitch",geometry:["point","area"],terms:["studio","asanas","modern yoga","meditation"],tags:{leisure:"fitness_centre",sport:"yoga"},reference:{key:"sport",value:"yoga"},name:"Yoga Studio"},"leisure/fitness_station":{icon:"maki-pitch",fields:["fitness_station","ref"],moreFields:["opening_hours"],geometry:["point","area"],tags:{leisure:"fitness_station"},addTags:{leisure:"fitness_station",sport:"fitness"},removeTags:{leisure:"fitness_station",sport:"fitness"},reference:{key:"leisure",value:"fitness_station"},terms:["exercise","fitness","gym","trim trail"],name:"Outdoor Fitness Station"},"leisure/fitness_station/balance_beam":{icon:"maki-pitch",geometry:["point","area"],tags:{leisure:"fitness_station",fitness_station:"balance_beam"},addTags:{leisure:"fitness_station",fitness_station:"balance_beam",sport:"fitness"},removeTags:{leisure:"fitness_station",fitness_station:"balance_beam",sport:"fitness"},reference:{key:"leisure",value:"fitness_station"},terms:["balance","exercise","fitness","gym","trim trail"],name:"Exercise Balance Beam"},"leisure/fitness_station/box":{icon:"maki-pitch",geometry:["point","area"],tags:{leisure:"fitness_station",fitness_station:"box"},addTags:{leisure:"fitness_station",fitness_station:"box",sport:"fitness"},removeTags:{leisure:"fitness_station",fitness_station:"box",sport:"fitness"},reference:{key:"leisure",value:"fitness_station"},terms:["box","exercise","fitness","gym","jump","trim trail"],name:"Exercise Box"},"leisure/fitness_station/horizontal_bar":{icon:"maki-pitch",geometry:["point","area"],tags:{leisure:"fitness_station",fitness_station:"horizontal_bar"},addTags:{leisure:"fitness_station",fitness_station:"horizontal_bar",sport:"fitness"},removeTags:{leisure:"fitness_station",fitness_station:"horizontal_bar",sport:"fitness"},reference:{key:"leisure",value:"fitness_station"},terms:["bar","chinup","chin up","exercise","fitness","gym","pullup","pull up","trim trail"],name:"Exercise Horizontal Bar"},"leisure/fitness_station/horizontal_ladder":{icon:"maki-pitch",geometry:["point","area"],tags:{leisure:"fitness_station",fitness_station:"horizontal_ladder"},addTags:{leisure:"fitness_station",fitness_station:"horizontal_ladder",sport:"fitness"},removeTags:{leisure:"fitness_station",fitness_station:"horizontal_ladder",sport:"fitness"},reference:{key:"leisure",value:"fitness_station"},terms:["bar","chinup","chin up","exercise","fitness","gym","ladder","monkey bars","pullup","pull up","trim trail"],name:"Exercise Monkey Bars"},"leisure/fitness_station/hyperextension":{icon:"maki-pitch",geometry:["point","area"],tags:{leisure:"fitness_station",fitness_station:"hyperextension"},addTags:{leisure:"fitness_station",fitness_station:"hyperextension",sport:"fitness"},removeTags:{leisure:"fitness_station",fitness_station:"hyperextension",sport:"fitness"},reference:{key:"leisure",value:"fitness_station"},terms:["back","exercise","extension","fitness","gym","roman chair","trim trail"],name:"Hyperextension Station"},"leisure/fitness_station/parallel_bars":{icon:"maki-pitch",geometry:["point","area"],tags:{leisure:"fitness_station",fitness_station:"parallel_bars"},addTags:{leisure:"fitness_station",fitness_station:"parallel_bars",sport:"fitness"},removeTags:{leisure:"fitness_station",fitness_station:"parallel_bars",sport:"fitness"},reference:{key:"leisure",value:"fitness_station"},terms:["bar","dip","exercise","fitness","gym","trim trail"],name:"Parallel Bars"},"leisure/fitness_station/push-up":{icon:"maki-pitch",geometry:["point","area"],tags:{leisure:"fitness_station",fitness_station:"push-up"},addTags:{leisure:"fitness_station",fitness_station:"push-up",sport:"fitness"},removeTags:{leisure:"fitness_station",fitness_station:"push-up",sport:"fitness"},reference:{key:"leisure",value:"fitness_station"},terms:["bar","exercise","fitness","gym","pushup","push up","trim trail"],name:"Push-Up Station"},"leisure/fitness_station/rings":{icon:"maki-pitch",geometry:["point","area"],tags:{leisure:"fitness_station",fitness_station:"rings"},addTags:{leisure:"fitness_station",fitness_station:"rings",sport:"fitness"},removeTags:{leisure:"fitness_station",fitness_station:"rings",sport:"fitness"},reference:{key:"leisure",value:"fitness_station"},terms:["exercise","fitness","gym","muscle up","pullup","pull up","trim trail"],name:"Exercise Rings"},"leisure/fitness_station/sign":{icon:"maki-pitch",geometry:["point","area"],tags:{leisure:"fitness_station",fitness_station:"sign"},addTags:{leisure:"fitness_station",fitness_station:"sign",sport:"fitness"},removeTags:{leisure:"fitness_station",fitness_station:"sign",sport:"fitness"},reference:{key:"leisure",value:"fitness_station"},terms:["exercise","fitness","gym","trim trail"],name:"Exercise Instruction Sign"},"leisure/fitness_station/sit-up":{icon:"maki-pitch",geometry:["point","area"],tags:{leisure:"fitness_station",fitness_station:"sit-up"},addTags:{leisure:"fitness_station",fitness_station:"sit-up",sport:"fitness"},removeTags:{leisure:"fitness_station",fitness_station:"sit-up",sport:"fitness"},reference:{key:"leisure",value:"fitness_station"},terms:["crunch","exercise","fitness","gym","situp","sit up","trim trail"],name:"Sit-Up Station"},"leisure/fitness_station/stairs":{icon:"maki-pitch",geometry:["point","area"],tags:{leisure:"fitness_station",fitness_station:"stairs"},addTags:{leisure:"fitness_station",fitness_station:"stairs",sport:"fitness"},removeTags:{leisure:"fitness_station",fitness_station:"stairs",sport:"fitness"},reference:{key:"leisure",value:"fitness_station"},terms:["exercise","fitness","gym","steps","trim trail"],name:"Exercise Stairs"},"leisure/garden":{icon:"maki-garden",fields:["name","operator","access_simple"],moreFields:["fee","payment_multi","website","phone","email","fax"],geometry:["point","vertex","area"],tags:{leisure:"garden"},name:"Garden"},"leisure/golf_course":{icon:"maki-golf",fields:["name","operator","address","opening_hours"],moreFields:["payment_multi","website","phone","email","fax"],geometry:["point","area"],terms:["links"],tags:{leisure:"golf_course"},name:"Golf Course"},"leisure/hackerspace":{icon:"maki-commercial",fields:["name","address","building_area","opening_hours","website"],moreFields:["payment_multi","internet_access","internet_access/fee","internet_access/ssid","smoking","phone","email","fax"],geometry:["point","area"],terms:["makerspace","hackspace","hacklab"],tags:{leisure:"hackerspace"},name:"Hackerspace"},"leisure/horse_riding":{icon:"maki-horse-riding",fields:["name","access_simple","operator","address","building"],moreFields:["opening_hours","payment_multi","website","phone","email","fax"],geometry:["point","area"],terms:["equestrian","stable"],tags:{leisure:"horse_riding"},name:"Horseback Riding Facility"},"leisure/ice_rink":{icon:"fas-skating",fields:["name","seasonal","sport_ice","operator","address","building"],moreFields:["opening_hours","payment_multi","website","phone","email","fax"],geometry:["point","area"],terms:["hockey","skating","curling"],tags:{leisure:"ice_rink"},name:"Ice Rink"},"leisure/marina":{icon:"maki-harbor",fields:["name","operator","capacity","fee","sanitary_dump_station","power_supply"],moreFields:["address","payment_multi","internet_access","internet_access/fee","internet_access/ssid","seamark/type","website","phone","email","fax"],geometry:["point","vertex","area"],terms:["boat"],tags:{leisure:"marina"},name:"Marina"},"leisure/miniature_golf":{icon:"maki-golf",fields:["name","operator","address","opening_hours"],moreFields:["fee","payment_multi","website","phone","email","fax"],geometry:["point","area"],terms:["crazy golf","mini golf","putt-putt"],tags:{leisure:"miniature_golf"},name:"Miniature Golf"},"leisure/nature_reserve":{icon:"maki-park",geometry:["point","area"],fields:["name","operator","address","opening_hours"],moreFields:["dog","website","phone","email","fax"],tags:{leisure:"nature_reserve"},terms:["protected","wildlife"],name:"Nature Reserve"},"leisure/outdoor_seating":{icon:"maki-picnic-site",geometry:["point","area"],fields:["name","operator"],terms:["al fresco","beer garden","dining","cafe","restaurant","pub","bar","patio"],tags:{leisure:"outdoor_seating"},name:"Outdoor Seating Area"},"leisure/park":{icon:"maki-park",fields:["name","operator","address","opening_hours"],moreFields:["dog","smoking","website","phone","email","fax"],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:"maki-picnic-site",fields:["material","lit","bench"],geometry:["point"],tags:{leisure:"picnic_table"},terms:["bench"],name:"Picnic Table"},"leisure/picnic_table/chess":{icon:"fas-chess-knight",geometry:["point"],tags:{leisure:"picnic_table",sport:"chess"},reference:{key:"sport",value:"chess"},terms:["bench","chess board","checkerboard","checkers","chequerboard","game table"],name:"Chess Table"},"leisure/pitch":{icon:"maki-pitch",fields:["name","sport","surface","lit"],moreFields:["access_simple","fee"],geometry:["point","area"],tags:{leisure:"pitch"},terms:["field"],name:"Sport Pitch"},"leisure/pitch/american_football":{icon:"maki-american-football",geometry:["point","area"],tags:{leisure:"pitch",sport:"american_football"},reference:{key:"sport",value:"american_football"},terms:["football","gridiron"],name:"American Football Field"},"leisure/pitch/australian_football":{icon:"maki-american-football",geometry:["point","area"],tags:{leisure:"pitch",sport:"australian_football"},reference:{key:"sport",value:"australian_football"},terms:["Aussie","AFL","football"],name:"Australian Football Field"},"leisure/pitch/badminton":{icon:"maki-tennis",fields:["{leisure/pitch}","access_simple"],geometry:["point","area"],tags:{leisure:"pitch",sport:"badminton"},reference:{key:"sport",value:"badminton"},terms:[],name:"Badminton Court"},"leisure/pitch/baseball":{icon:"maki-baseball",geometry:["point","area"],tags:{leisure:"pitch",sport:"baseball"},reference:{key:"sport",value:"baseball"},terms:[],name:"Baseball Field"},"leisure/pitch/basketball":{icon:"maki-basketball",fields:["name","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:"maki-volleyball",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/boules":{icon:"maki-pitch",fields:["name","boules","{leisure/pitch}"],geometry:["point","area"],tags:{leisure:"pitch",sport:"boules"},reference:{key:"sport",value:"boules"},terms:["bocce","lyonnaise","pétanque"],name:"Boules/Bocce Court"},"leisure/pitch/bowls":{icon:"maki-pitch",geometry:["point","area"],tags:{leisure:"pitch",sport:"bowls"},reference:{key:"sport",value:"bowls"},terms:[],name:"Bowling Green"},"leisure/pitch/cricket":{icon:"maki-cricket",geometry:["point","area"],tags:{leisure:"pitch",sport:"cricket"},reference:{key:"sport",value:"cricket"},terms:[],name:"Cricket Field"},"leisure/pitch/equestrian":{icon:"maki-horse-riding",fields:["{leisure/pitch}","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/netball":{icon:"maki-volleyball",geometry:["point","area"],tags:{leisure:"pitch",sport:"netball"},reference:{key:"sport",value:"netball"},terms:[],name:"Netball Court"},"leisure/pitch/rugby_league":{icon:"maki-american-football",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:"maki-american-football",geometry:["point","area"],tags:{leisure:"pitch",sport:"rugby_union"},reference:{key:"sport",value:"rugby_union"},terms:[],name:"Rugby Union Field"},"leisure/pitch/skateboard":{icon:"maki-skateboard",geometry:["point","area"],tags:{leisure:"pitch",sport:"skateboard"},reference:{key:"sport",value:"skateboard"},terms:[],name:"Skate Park"},"leisure/pitch/soccer":{icon:"maki-soccer",geometry:["point","area"],tags:{leisure:"pitch",sport:"soccer"},reference:{key:"sport",value:"soccer"},terms:["football"],name:"Soccer Field"},"leisure/pitch/softball":{icon:"maki-baseball",geometry:["point","area"],tags:{leisure:"pitch",sport:"softball"},reference:{key:"sport",value:"softball"},terms:["softball","diamond"],name:"Softball Field"},"leisure/pitch/table_tennis":{icon:"maki-tennis",fields:["name","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:"maki-tennis",fields:["{leisure/pitch}","access_simple"],geometry:["point","area"],tags:{leisure:"pitch",sport:"tennis"},reference:{key:"sport",value:"tennis"},terms:[],name:"Tennis Court"},"leisure/pitch/volleyball":{icon:"maki-volleyball",geometry:["point","area"],tags:{leisure:"pitch",sport:"volleyball"},reference:{key:"sport",value:"volleyball"},terms:[],name:"Volleyball Court"},"leisure/playground":{icon:"maki-playground",fields:["name","operator","surface","playground/max_age","playground/min_age","access_simple"],geometry:["point","area"],terms:["jungle gym","play area"],tags:{leisure:"playground"},name:"Playground"},"leisure/resort":{icon:"maki-lodging",fields:["name","operator","address","opening_hours"],moreFields:["payment_multi","website","phone","email","fax"],geometry:["point","area"],tags:{leisure:"resort"},name:"Resort"},"leisure/sauna":{icon:"fas-thermometer-three-quarters",fields:["name","operator","address","opening_hours","access_simple","fee"],moreFields:["payment_multi","website","phone","email","fax"],geometry:["point","area"],tags:{leisure:"sauna"},name:"Sauna"},"leisure/slipway":{icon:"maki-slipway",fields:["name","access_simple","fee"],moreFields:["seamark/type"],geometry:["point","vertex","line"],terms:["boat launch","boat ramp","boat landing"],tags:{leisure:"slipway"},name:"Slipway"},"leisure/sports_centre":{icon:"maki-pitch",fields:["name","sport","building","address","fee"],moreFields:["opening_hours","payment_multi","website","phone","email","fax"],geometry:["point","area"],tags:{leisure:"sports_centre"},terms:[],name:"Sports Center / Complex"},"leisure/sports_centre/climbing":{icon:"temaki-abseiling",geometry:["point","area"],terms:["abseiling","artificial climbing wall","belaying","bouldering","rock climbing facility","indoor rock wall","rappeling","rock gym","ropes"],tags:{leisure:"sports_centre",sport:"climbing"},reference:{key:"sport",value:"climbing"},name:"Climbing Gym"},"leisure/sports_centre/swimming":{icon:"maki-swimming",geometry:["point","area"],terms:["dive","water"],tags:{leisure:"sports_centre",sport:"swimming"},reference:{key:"sport",value:"swimming"},name:"Swimming Pool Facility"},"leisure/stadium":{icon:"maki-pitch",fields:["name","sport","address"],moreFields:["website","phone","email","fax"],geometry:["point","area"],tags:{leisure:"stadium"},name:"Stadium"},"leisure/swimming_pool":{icon:"maki-swimming",fields:["name","access_simple","lit","location_pool","length","swimming_pool"],moreFields:["operator","address"],geometry:["point","area"],terms:["dive","water","aquatics"],tags:{leisure:"swimming_pool"},name:"Swimming Pool"},"leisure/track":{icon:"iD-other-line",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/track/horse_racing":{icon:"maki-horse-riding",fields:["surface","sport_racing_nonmotor","lit","width","lanes"],geometry:["point","line","area"],tags:{leisure:"track",sport:"horse_racing"},terms:["race*","horse","track"],name:"Racetrack (Horse Racing)"},"leisure/track/running":{icon:"maki-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/water_park":{icon:"maki-swimming",fields:["name","operator","address"],moreFields:["payment_multi","brand","website","phone","email","fax"],geometry:["point","area"],terms:["swim","pool","dive"],tags:{leisure:"water_park"},name:"Water Park"},line:{fields:["name"],geometry:["line"],tags:{},name:"Line",matchScore:0.1},"man_made/adit":{icon:"maki-triangle",geometry:["point","area"],fields:["operator","direction"],terms:["entrance","underground","mine","cave"],tags:{man_made:"adit"},name:"Adit"},"man_made/antenna":{icon:"temaki-antenna",fields:["height","communication_multi"],geometry:["point"],terms:["broadcast","cell phone","cell","communication","mobile phone","radio","television","transmission","tv"],tags:{man_made:"antenna"},name:"Antenna"},"man_made/breakwater":{geometry:["line","area"],tags:{man_made:"breakwater"},name:"Breakwater"},"man_made/bridge":{icon:"maki-bridge",fields:["name","bridge","layer","maxweight"],moreFields:["material","seamark/type"],geometry:["area"],tags:{man_made:"bridge"},addTags:{man_made:"bridge",layer:"1"},removeTags:{man_made:"bridge",layer:"*"},reference:{key:"man_made",value:"bridge"},name:"Bridge"},"man_made/bunker_silo":{icon:"temaki-silo",fields:["content"],geometry:["point","area"],terms:["Silage","Storage"],tags:{man_made:"bunker_silo"},name:"Bunker Silo"},"man_made/chimney":{icon:"temaki-chimney",fields:["material"],geometry:["point","area"],tags:{man_made:"chimney"},name:"Chimney"},"man_made/clearcut":{icon:"maki-logging",geometry:["area"],tags:{man_made:"clearcut"},terms:["cut","forest","lumber","tree","wood"],name:"Clearcut Forest"},"man_made/crane":{icon:"temaki-crane",fields:["operator","height","crane/type"],geometry:["point","line","vertex","area"],tags:{man_made:"crane"},name:"Crane"},"man_made/cutline":{icon:"maki-logging",geometry:["line"],tags:{man_made:"cutline"},name:"Cut line"},"man_made/embankment":{geometry:["line"],tags:{man_made:"embankment"},name:"Embankment"},"man_made/flagpole":{icon:"maki-embassy",fields:["operator","flag/type","country","lit","height"],moreFields:["material"],geometry:["point","vertex"],tags:{man_made:"flagpole"},name:"Flagpole"},"man_made/gasometer":{icon:"temaki-storage_tank",fields:["content","building_area"],geometry:["point","area"],terms:["gas holder"],tags:{man_made:"gasometer"},name:"Gasometer"},"man_made/groyne":{fields:["material"],geometry:["line","area"],tags:{man_made:"groyne"},name:"Groyne"},"man_made/lighthouse":{icon:"maki-lighthouse",fields:["name","operator","building_area","height"],moreFields:["address","website","phone","email","fax","seamark/type"],geometry:["point","area"],tags:{man_made:"lighthouse"},name:"Lighthouse"},"man_made/mast":{icon:"maki-communications-tower",fields:["tower/type","tower/construction","height"],moreFields:["material","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/mast/communication":{icon:"maki-communications-tower",fields:["{man_made/mast}","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","tower:type":"communication"},reference:{key:"tower:type",value:"communication"},name:"Communication Mast"},"man_made/mast/communication/mobile_phone":{icon:"maki-communications-tower",geometry:["point"],terms:["antenna","cell mast","cell phone mast","cell phone tower","cell tower","communication mast","communication tower","guyed tower","mobile phone tower","transmission mast","transmission tower"],tags:{man_made:"mast","tower:type":"communication","communication:mobile_phone":"yes"},reference:{key:"communication:mobile_phone",value:"yes"},name:"Mobile Phone Mast"},"man_made/mast/communication/radio":{icon:"maki-communications-tower",geometry:["point"],terms:["antenna","broadcast tower","communication mast","communication tower","guyed tower","radio mast","radio tower","transmission mast","transmission tower"],tags:{man_made:"mast","tower:type":"communication","communication:radio":"yes"},reference:{key:"communication:radio",value:"yes"},name:"Radio Broadcast Mast"},"man_made/mast/communication/television":{icon:"maki-communications-tower",geometry:["point"],terms:["antenna","broadcast tower","communication mast","communication tower","guyed tower","television mast","television tower","transmission mast","transmission tower","tv mast","tv tower"],tags:{man_made:"mast","tower:type":"communication","communication:television":"yes"},reference:{key:"communication:television",value:"yes"},name:"Television Broadcast Mast"},"man_made/monitoring_station":{icon:"temaki-antenna",geometry:["point","vertex","area"],fields:["monitoring_multi","operator"],terms:["weather","earthquake","seismology","air","gps"],tags:{man_made:"monitoring_station"},name:"Monitoring Station"},"man_made/observatory":{fields:["name","operator","address","access_simple","building_area"],moreFields:["website","phone","email","fax"],geometry:["point","area"],terms:["astronomical","meteorological"],tags:{man_made:"observatory"},name:"Observatory"},"man_made/petroleum_well":{icon:"temaki-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":{icon:"temaki-pedestrian",fields:["name","surface","lit","width","access"],geometry:["line","area"],terms:["dock","jetty"],tags:{man_made:"pier"},name:"Pier"},"man_made/pipeline":{icon:"iD-pipeline-line",fields:["location","operator","substance","layer"],geometry:["line"],terms:["oil","natural gas","water","sewer","sewage"],tags:{man_made:"pipeline"},name:"Pipeline"},"man_made/pumping_station":{icon:"maki-water",geometry:["point","area"],tags:{man_made:"pumping_station"},name:"Pumping Station"},"man_made/silo":{icon:"temaki-silo",fields:["crop","building_area"],geometry:["point","area"],terms:["grain","corn","wheat"],tags:{man_made:"silo"},name:"Silo"},"man_made/storage_tank":{icon:"temaki-storage_tank",fields:["content","building_area"],geometry:["point","area"],terms:["water","oil","gas","petrol"],tags:{man_made:"storage_tank"},name:"Storage Tank"},"man_made/surveillance":{icon:"maki-attraction",geometry:["point","vertex"],fields:["surveillance","surveillance/type","surveillance/zone","direction"],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/surveillance/camera":{icon:"maki-attraction",geometry:["point","vertex"],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/survey_point":{icon:"maki-monument",fields:["ref"],geometry:["point","vertex"],terms:["trig point","triangulation pillar","trigonometrical station"],tags:{man_made:"survey_point"},name:"Survey Point"},"man_made/tower":{icon:"temaki-tower",fields:["tower/type","tower/construction","height","building_area"],moreFields:["architect"],geometry:["point","area"],tags:{man_made:"tower"},name:"Tower"},"man_made/tower/bell_tower":{icon:"fas-bell",moreFields:["{man_made/tower}","opening_hours"],geometry:["point","area"],terms:["belfry","bell gable","campanile","church tower","klockstapel"],tags:{man_made:"tower","tower:type":"bell_tower"},reference:{key:"tower:type",value:"bell_tower"},name:"Bell Tower"},"man_made/tower/communication":{icon:"temaki-tower",fields:["{man_made/tower}","communication_multi"],geometry:["point","area"],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:"tower","tower:type":"communication"},reference:{key:"tower:type",value:"communication"},name:"Communication Tower"},"man_made/tower/minaret":{icon:"temaki-tower",geometry:["point","area"],terms:["Islam","mosque","Muezzin","Muslim"],tags:{man_made:"tower","tower:type":"minaret"},reference:{key:"tower:type",value:"minaret"},name:"Minaret"},"man_made/tower/observation":{icon:"temaki-tower",moreFields:["{man_made/tower}","opening_hours"],geometry:["point","area"],terms:["lookout tower","fire tower"],tags:{man_made:"tower","tower:type":"observation"},reference:{key:"tower:type",value:"observation"},name:"Observation Tower"},"man_made/wastewater_plant":{icon:"maki-water",fields:["name","operator","address"],moreFields:["website","phone","email","fax"],geometry:["point","area"],terms:["sewage*","water treatment plant","reclamation plant"],tags:{man_made:"wastewater_plant"},name:"Wastewater Plant"},"man_made/water_tower":{icon:"maki-water",fields:["operator"],geometry:["point","area"],tags:{man_made:"water_tower"},name:"Water Tower"},"man_made/water_well":{icon:"maki-water",fields:["operator"],geometry:["point","area"],tags:{man_made:"water_well"},name:"Water Well"},"man_made/water_works":{icon:"maki-water",fields:["name","operator","address"],geometry:["point","area"],tags:{man_made:"water_works"},name:"Water Works"},"man_made/watermill":{icon:"maki-watermill",fields:["building_area"],geometry:["point","area"],terms:["water","wheel","mill"],tags:{man_made:"watermill"},name:"Watermill"},"man_made/windmill":{icon:"maki-windmill",fields:["building_area"],geometry:["point","area"],terms:["wind","wheel","mill"],tags:{man_made:"windmill"},name:"Windmill"},"man_made/works":{icon:"maki-industry",fields:["name","operator","address","building_area","product"],moreFields:["website","phone","email","fax"],geometry:["point","area"],terms:["assembly","build","brewery","car","plant","plastic","processing","manufacture","refinery"],tags:{man_made:"works"},name:"Factory"},manhole:{icon:"maki-circle-stroked",fields:["manhole","operator","label","ref"],geometry:["point","vertex"],tags:{manhole:"*"},terms:["cover","hole","sewer","sewage","telecom"],name:"Manhole"},"manhole/drain":{icon:"maki-water",fields:["operator","ref"],geometry:["point","vertex"],tags:{manhole:"drain"},terms:["cover","drain","hole","rain","sewer","sewage","storm"],name:"Storm Drain"},"manhole/telecom":{icon:"maki-circle-stroked",fields:["operator","ref"],geometry:["point","vertex"],tags:{manhole:"telecom"},terms:["cover","phone","hole","telecom","telephone","bt"],name:"Telecom Manhole"},"natural/bare_rock":{geometry:["area"],tags:{natural:"bare_rock"},terms:["rock"],name:"Bare Rock"},"natural/bay":{icon:"temaki-beach",geometry:["point","area"],fields:["name"],tags:{natural:"bay"},terms:[],name:"Bay"},"natural/beach":{icon:"temaki-beach",fields:["surface"],geometry:["point","area"],tags:{natural:"beach"},terms:["shore"],name:"Beach"},"natural/cave_entrance":{icon:"maki-triangle",geometry:["point","area"],fields:["fee","access_simple","direction"],tags:{natural:"cave_entrance"},terms:["cavern","hollow","grotto","shelter","cavity"],name:"Cave Entrance"},"natural/cliff":{icon:"maki-triangle",fields:["name","height"],geometry:["point","vertex","line","area"],tags:{natural:"cliff"},terms:["crag","escarpment","rock face","scarp"],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/mud":{geometry:["area"],tags:{natural:"mud"},terms:["wetland"],name:"Mud"},"natural/peak":{icon:"maki-mountain",fields:["name","elevation"],geometry:["point","vertex"],tags:{natural:"peak"},terms:["acme","aiguille","alp","climax","crest","crown","hill","mount","mountain","pinnacle","summit","tip","top"],name:"Peak"},"natural/reef":{icon:"temaki-beach",geometry:["point","area"],tags:{natural:"reef"},terms:["barrier","coral","ocean","sand","shoal"],name:"Reef"},"natural/ridge":{geometry:["line"],tags:{natural:"ridge"},terms:["crest"],name:"Ridge"},"natural/saddle":{icon:"maki-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:"maki-water",fields:["name","intermittent"],geometry:["point","vertex"],tags:{natural:"spring"},terms:[],name:"Spring"},"natural/tree_row":{icon:"maki-park",fields:["leaf_type","leaf_cycle","denotation"],geometry:["line"],tags:{natural:"tree_row"},terms:[],name:"Tree Row"},"natural/tree":{icon:"maki-park",fields:["leaf_type_singular","leaf_cycle_singular","denotation"],geometry:["point","vertex"],tags:{natural:"tree"},terms:[],name:"Tree"},"natural/volcano":{icon:"maki-volcano",fields:["name","elevation","volcano/status","volcano/type"],geometry:["point","vertex"],tags:{natural:"volcano"},terms:["mountain","crater"],name:"Volcano"},"natural/water":{icon:"maki-water",fields:["name","water","intermittent"],moreFields:["salt","tidal"],geometry:["area"],tags:{natural:"water"},name:"Water"},"natural/water/basin":{icon:"maki-water",fields:["name","basin","intermittent_yes"],geometry:["area"],tags:{natural:"water",water:"basin"},reference:{key:"water",value:"basin"},terms:["detention","drain","overflow","rain","retention"],name:"Basin"},"natural/water/canal":{icon:"maki-water",fields:["{natural/water}","salt"],geometry:["area"],tags:{natural:"water",water:"canal"},reference:{key:"water",value:"canal"},name:"Canal"},"natural/water/lake":{icon:"maki-water",fields:["{natural/water}","salt","tidal"],geometry:["area"],tags:{natural:"water",water:"lake"},reference:{key:"water",value:"lake"},terms:["lakelet","loch","mere"],name:"Lake"},"natural/water/pond":{icon:"maki-water",fields:["{natural/water}","salt"],geometry:["area"],tags:{natural:"water",water:"pond"},reference:{key:"water",value:"pond"},terms:["lakelet","millpond","tarn","pool","mere"],name:"Pond"},"natural/water/reservoir":{icon:"maki-water",geometry:["area"],tags:{natural:"water",water:"reservoir"},reference:{key:"water",value:"reservoir"},name:"Reservoir"},"natural/water/river":{icon:"maki-water",fields:["{natural/water}","tidal"],geometry:["area"],tags:{natural:"water",water:"river"},reference:{key:"water",value:"river"},terms:["beck","branch","brook","course","creek","estuary","rill","riverbank","rivulet","run","runnel","stream","tributary","watercourse"],name:"River"},"natural/water/stream":{icon:"maki-water",fields:["{natural/water}"],geometry:["area"],tags:{natural:"water",water:"stream"},reference:{key:"water",value:"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"],name:"Stream"},"natural/wetland":{icon:"maki-wetland",fields:["wetland"],geometry:["point","area"],tags:{natural:"wetland"},terms:["bog","marsh","reedbed","swamp","tidalflat"],name:"Wetland"},"natural/wood":{icon:"maki-park-alt1",fields:["name","leaf_type","leaf_cycle"],geometry:["point","area"],tags:{natural:"wood"},terms:["tree"],name:"Wood"},"noexit/yes":{icon:"maki-barrier",geometry:["vertex"],terms:["no exit","road end","dead end"],tags:{noexit:"yes"},reference:{key:"noexit",value:"*"},name:"No Exit"},office:{icon:"maki-suitcase",fields:["name","office","address","building_area","opening_hours"],moreFields:["operator","smoking","website","phone","email","fax","wheelchair"],geometry:["point","vertex","area"],tags:{office:"*"},terms:[],name:"Office"},"office/administrative":{icon:"maki-suitcase",geometry:["point","area"],tags:{office:"administrative"},terms:[],searchable:false,name:"Administrative Office"},"office/physician":{icon:"maki-suitcase",geometry:["point","area"],tags:{office:"physician"},searchable:false,name:"Physician"},"office/travel_agent":{icon:"maki-suitcase",geometry:["point","area"],tags:{office:"travel_agent"},reference:{key:"shop",value:"travel_agency"},terms:[],name:"Travel Agency",searchable:false},"office/accountant":{icon:"temaki-accounting",geometry:["point","area"],tags:{office:"accountant"},terms:[],name:"Accountant Office"},"office/adoption_agency":{icon:"maki-suitcase",geometry:["point","area"],tags:{office:"adoption_agency"},terms:[],name:"Adoption Agency"},"office/advertising_agency":{icon:"maki-suitcase",geometry:["point","area"],tags:{office:"advertising_agency"},terms:["ad","ad agency","advert agency","advertising","marketing"],name:"Advertising Agency"},"office/architect":{icon:"maki-suitcase",geometry:["point","area"],tags:{office:"architect"},terms:[],name:"Architect Office"},"office/association":{icon:"maki-suitcase",geometry:["point","area"],tags:{office:"association"},terms:["association","non-profit","nonprofit","organization","society"],name:"Nonprofit Organization Office"},"office/charity":{icon:"maki-suitcase",geometry:["point","area"],tags:{office:"charity"},terms:["charitable organization"],name:"Charity Office"},"office/company":{icon:"maki-suitcase",geometry:["point","area"],tags:{office:"company"},terms:[],name:"Corporate Office"},"office/coworking":{icon:"maki-suitcase",fields:["{office}","internet_access"],moreFields:["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:"maki-school",geometry:["point","area"],tags:{office:"educational_institution"},terms:[],name:"Educational Institution"},"office/employment_agency":{icon:"maki-suitcase",geometry:["point","area"],tags:{office:"employment_agency"},terms:["job"],name:"Employment Agency"},"office/energy_supplier":{icon:"maki-suitcase",geometry:["point","area"],tags:{office:"energy_supplier"},terms:["electricity","energy company","energy utility","gas utility"],name:"Energy Supplier Office"},"office/estate_agent":{icon:"temaki-real_estate_agency",geometry:["point","area"],tags:{office:"estate_agent"},terms:["real estate"],name:"Real Estate Office"},"office/financial":{icon:"maki-suitcase",geometry:["point","area"],tags:{office:"financial"},terms:[],name:"Financial Office"},"office/forestry":{icon:"maki-suitcase",geometry:["point","area"],tags:{office:"forestry"},terms:["forest","ranger"],name:"Forestry Office"},"office/foundation":{icon:"maki-suitcase",geometry:["point","area"],tags:{office:"foundation"},terms:[],name:"Foundation Office"},"office/government":{icon:"maki-town-hall",fields:["name","government","{office}"],geometry:["point","area"],tags:{office:"government"},terms:[],name:"Government Office"},"office/government/register_office":{icon:"maki-town-hall",fields:["{office}","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/government/tax":{icon:"maki-town-hall",fields:["{office}","operator"],geometry:["point","area"],terms:["fiscal authorities","revenue office","tax office"],tags:{office:"government",government:"tax"},reference:{key:"government",value:"tax"},name:"Tax and Revenue Office"},"office/guide":{icon:"maki-suitcase",geometry:["point","area"],tags:{office:"guide"},terms:["dive guide","mountain guide","tour guide"],name:"Tour Guide Office"},"office/insurance":{icon:"maki-suitcase",geometry:["point","area"],tags:{office:"insurance"},terms:[],name:"Insurance Office"},"office/it":{icon:"maki-suitcase",geometry:["point","area"],tags:{office:"it"},terms:["computer","information","software","technology"],name:"Information Technology Office"},"office/lawyer":{icon:"fas-balance-scale",geometry:["point","area"],tags:{office:"lawyer"},terms:[],name:"Law Office"},"office/lawyer/notary":{icon:"maki-suitcase",geometry:["point","area"],tags:{office:"lawyer",lawyer:"notary"},reference:{key:"office",value:"notary"},searchable:false,name:"Notary Office"},"office/moving_company":{icon:"fas-people-carry",geometry:["point","area"],tags:{office:"moving_company"},terms:["relocation"],name:"Moving Company Office"},"office/newspaper":{icon:"maki-library",geometry:["point","area"],tags:{office:"newspaper"},terms:[],name:"Newspaper Office"},"office/ngo":{icon:"maki-suitcase",geometry:["point","area"],tags:{office:"ngo"},terms:["ngo","non government","non-government","organization","organisation"],name:"NGO Office"},"office/notary":{icon:"maki-suitcase",geometry:["point","area"],tags:{office:"notary"},terms:["clerk","deeds","estate","signature","wills"],name:"Notary Office"},"office/political_party":{icon:"maki-town-hall",geometry:["point","area"],tags:{office:"political_party"},terms:[],name:"Political Party"},"office/private_investigator":{icon:"maki-suitcase",geometry:["point","area"],tags:{office:"private_investigator"},terms:["PI","private eye","private detective"],name:"Private Investigator Office"},"office/quango":{icon:"maki-suitcase",geometry:["point","area"],tags:{office:"quango"},terms:["ngo","non government","non-government","organization","organisation","quasi autonomous","quasi-autonomous"],name:"Quasi-NGO Office"},"office/religion":{icon:"maki-suitcase",fields:["{office}","religion","denomination"],geometry:["point","area"],tags:{office:"religion"},terms:[],name:"Religious Office"},"office/research":{icon:"maki-suitcase",geometry:["point","area"],tags:{office:"research"},terms:[],name:"Research Office"},"office/surveyor":{icon:"maki-suitcase",geometry:["point","area"],tags:{office:"surveyor"},terms:[],name:"Surveyor Office"},"office/tax_advisor":{icon:"maki-suitcase",geometry:["point","area"],tags:{office:"tax_advisor"},terms:["tax","tax consultant"],name:"Tax Advisor Office"},"office/telecommunication":{icon:"maki-telephone",geometry:["point","area"],tags:{office:"telecommunication"},terms:["communication","internet","phone","voice"],name:"Telecom Office"},"office/therapist":{icon:"maki-suitcase",geometry:["point","area"],tags:{office:"therapist"},terms:["therapy"],name:"Therapist Office"},"office/water_utility":{icon:"maki-suitcase",fields:["{office}","operator"],geometry:["point","area"],tags:{office:"water_utility"},terms:["water board","utility"],name:"Water Utility Office"},"piste/downhill":{icon:"fas-skiing",fields:["name","piste/type","piste/difficulty_downhill","piste/grooming_downhill","oneway","lit"],geometry:["line","area"],terms:["ski","alpine","snowboard","downhill","piste"],tags:{"piste:type":"downhill"},name:"Downhill Piste/Ski Run"},"piste/downhill/halfpipe":{icon:"fas-snowboarding",fields:["name","piste/type","piste/difficulty_downhill","piste/grooming_downhill","oneway","lit"],geometry:["line","area"],terms:["ski","alpine","halfpipe","half pipe","snowboard","downhill","piste"],tags:{"piste:type":"downhill",man_made:"piste:halfpipe"},name:"Halfpipe"},"piste/hike":{icon:"temaki-snow_shoeing",fields:["name","piste/type","piste/difficulty","piste/grooming_hike","oneway","lit"],geometry:["line","area"],terms:["hike","winter hiking","snowshoe","snowshoeing","piste","ski"],tags:{"piste:type":"hike"},name:"Snowshoeing or Winter Hiking Trail"},"piste/ice_skate":{icon:"fas-skating",fields:["name","piste/type","sport_ice","oneway","lit"],geometry:["line","area"],terms:["ice","skating","ski","piste"],tags:{"piste:type":"ice_skate"},name:"Ice Skating Piste"},"piste/nordic":{icon:"fas-skiing-nordic",fields:["name","piste/type","piste/difficulty_nordic","piste/grooming_nordic","oneway","lit"],geometry:["line","area"],terms:["ski","nordic","crosscountry","skating","piste"],tags:{"piste:type":"nordic"},name:"Nordic or Crosscountry Piste/Ski Trail"},"piste/piste":{icon:"fas-skiing",fields:["name","piste/type","piste/difficulty","piste/grooming","oneway","lit"],geometry:["line","area"],terms:["ski","nordic","crosscountry","downhill","alpine","snowboard","skitour","ski touring","sled","luge","sleigh","sledge","ski-joring","husky","horse","winter hiking","snowshoe","snowshoeing","ice","skating"],tags:{"piste:type":"*"},name:"Winter Sport Trails"},"piste/skitour":{icon:"fas-skiing-nordic",fields:["name","piste/type","piste/difficulty_skitour","piste/grooming","oneway","lit"],geometry:["line","area"],terms:["ski","skitour","crosscountry","ski touring","piste"],tags:{"piste:type":"skitour"},name:"Ski Touring Trail"},"piste/sled":{icon:"temaki-sledding",fields:["name","piste/type","piste/difficulty","piste/grooming","oneway","lit"],geometry:["line","area"],terms:["ski","sled","luge","sleigh","sledge","piste"],tags:{"piste:type":"sled"},name:"Sled Piste"},"piste/sleigh":{icon:"fas-sleigh",fields:["name","piste/type","piste/difficulty","piste/grooming","oneway","lit"],geometry:["line","area"],terms:["ski","piste","sled","luge","sleigh","sledge","ski-joring","husky","horse"],tags:{"piste:type":"sleigh"},name:"Sleigh Piste"},"place/farm":{icon:"maki-farm",geometry:["point","area"],fields:["name"],tags:{place:"farm"},name:"Farm",searchable:false},"place/city_block":{icon:"maki-triangle-stroked",fields:["name"],moreFields:["website"],geometry:["point","area"],tags:{place:"city_block"},name:"City Block"},"place/city":{icon:"maki-city",fields:["name","population"],moreFields:["website"],geometry:["point","area"],tags:{place:"city"},name:"City"},"place/hamlet":{icon:"maki-triangle-stroked",fields:["name","population"],moreFields:["website"],geometry:["point","area"],tags:{place:"hamlet"},name:"Hamlet"},"place/island":{icon:"maki-mountain",geometry:["point","area"],fields:["name"],terms:["archipelago","atoll","bar","cay","isle","islet","key","reef"],tags:{place:"island"},name:"Island"},"place/islet":{icon:"maki-mountain",geometry:["point","area"],fields:["name"],terms:["archipelago","atoll","bar","cay","isle","islet","key","reef"],tags:{place:"islet"},name:"Islet"},"place/isolated_dwelling":{icon:"maki-home",geometry:["point","area"],fields:["name"],tags:{place:"isolated_dwelling"},name:"Isolated Dwelling"},"place/locality":{icon:"maki-triangle-stroked",geometry:["point","area"],moreFields:["website"],fields:["name"],tags:{place:"locality"},name:"Locality"},"place/neighbourhood":{icon:"maki-triangle-stroked",fields:["name","population"],moreFields:["website"],geometry:["point","area"],tags:{place:"neighbourhood"},terms:["neighbourhood"],name:"Neighborhood"},"place/plot":{icon:"maki-triangle-stroked",fields:["name"],geometry:["point","area"],tags:{place:"plot"},terms:["tract","land","lot","parcel"],name:"Plot"},"place/quarter":{icon:"maki-triangle-stroked",fields:["name","population"],moreFields:["website"],geometry:["point","area"],tags:{place:"quarter"},terms:["boro","borough","quarter"],name:"Sub-Borough / Quarter"},"place/square":{geometry:["point","area"],fields:["name"],moreFields:["website"],tags:{place:"square"},name:"Square"},"place/suburb":{icon:"maki-triangle-stroked",fields:["name","population"],moreFields:["website"],geometry:["point","area"],tags:{place:"suburb"},terms:["boro","borough","quarter"],name:"Borough / Suburb"},"place/town":{icon:"maki-town",fields:["name","population"],moreFields:["website"],geometry:["point","area"],tags:{place:"town"},name:"Town"},"place/village":{icon:"maki-village",fields:["name","population"],moreFields:["website"],geometry:["point","area"],tags:{place:"village"},name:"Village"},"playground/balance_beam":{icon:"maki-playground",geometry:["point","line"],tags:{playground:"balancebeam"},name:"Play Balance Beam"},"playground/basket_spinner":{icon:"maki-playground",geometry:["point"],terms:["basket rotator"],tags:{playground:"basketrotator"},name:"Basket Spinner"},"playground/basket_swing":{icon:"maki-playground",geometry:["point"],tags:{playground:"basketswing"},name:"Basket Swing"},"playground/climbing_frame":{icon:"maki-playground",geometry:["point","area"],tags:{playground:"climbingframe"},name:"Climbing Frame"},"playground/cushion":{icon:"maki-playground",geometry:["point","area"],tags:{playground:"cushion"},name:"Bouncy Cushion"},"playground/horizontal_bar":{icon:"maki-pitch",fields:["height"],geometry:["point"],terms:["high bar"],tags:{playground:"horizontal_bar"},name:"Play Horizontal Bar"},"playground/rocker":{icon:"maki-playground",geometry:["point"],tags:{playground:"springy"},name:"Spring Rider",terms:["spring rocker","springy rocker"]},"playground/roundabout":{icon:"maki-stadium",fields:["bench"],geometry:["point","area"],tags:{playground:"roundabout"},name:"Play Roundabout",terms:["merry-go-round"]},"playground/sandpit":{icon:"maki-playground",geometry:["point","area"],tags:{playground:"sandpit"},name:"Sandpit"},"playground/seesaw":{icon:"maki-playground",geometry:["point"],tags:{playground:"seesaw"},name:"Seesaw"},"playground/slide":{icon:"maki-playground",geometry:["point","line"],tags:{playground:"slide"},name:"Slide"},"playground/structure":{icon:"maki-pitch",geometry:["point","area"],tags:{playground:"structure"},name:"Play Structure"},"playground/swing":{icon:"maki-playground",fields:["capacity","playground/baby","wheelchair"],geometry:["point"],tags:{playground:"swing"},name:"Swing"},"playground/zipwire":{icon:"maki-playground",geometry:["point","line"],tags:{playground:"zipwire"},name:"Zip Wire"},point:{fields:["name"],geometry:["point"],tags:{},name:"Point",matchScore:0.1},"power/sub_station":{icon:"temaki-power",fields:["substation","operator","building","ref"],geometry:["point","area"],tags:{power:"sub_station"},reference:{key:"power",value:"substation"},name:"Substation",searchable:false},"power/cable/underground":{fields:["name","operator","voltage","ref","layer"],geometry:["line"],tags:{power:"cable",location:"underground"},name:"Underground Power Cable"},"power/generator":{icon:"temaki-power",fields:["operator","generator/source","generator/method","generator/type","generator/output/electricity","ref"],geometry:["point","vertex","area"],terms:["hydro","solar","turbine","wind"],tags:{power:"generator"},name:"Power Generator"},"power/generator/method/photovoltaic":{icon:"fas-solar-panel",fields:["operator","generator/output/electricity","ref"],geometry:["point","vertex","area"],terms:["photovoltaic module","PV module","sunlight"],tags:{power:"generator","generator:source":"solar","generator:method":"photovoltaic","generator:type":"solar_photovoltaic_panel"},addTags:{power:"generator","generator:source":"solar","generator:method":"photovoltaic","generator:type":"solar_photovoltaic_panel","generator:output:electricity":"yes"},removeTags:{power:"generator","generator:source":"solar","generator:method":"photovoltaic","generator:type":"solar_photovoltaic_panel","generator:output:electricity":"yes"},reference:{key:"generator:method",value:"photovoltaic"},name:"Solar Panel"},"power/generator/source/nuclear":{icon:"temaki-radiation",fields:["operator","generator/source","generator/method","generator/type","generator/output/electricity","ref"],geometry:["point","vertex","area"],terms:["fission","generator","nuclear","nuke","reactor"],tags:{power:"generator","generator:source":"nuclear","generator:method":"fission"},reference:{key:"generator:source",value:"nuclear"},name:"Nuclear Reactor"},"power/generator/source/wind":{icon:"temaki-wind_turbine",fields:["operator","generator/source","generator/method","generator/type","generator/output/electricity","height","ref"],geometry:["point","vertex","area"],terms:["generator","turbine","windmill","wind"],tags:{power:"generator","generator:source":"wind","generator:method":"wind_turbine"},reference:{key:"generator:source",value:"wind"},name:"Wind Turbine"},"power/line":{icon:"iD-power-line",fields:["name","operator","voltage","ref","layer"],geometry:["line"],tags:{power:"line"},name:"Power Line"},"power/minor_line":{icon:"iD-power-line",fields:["name","operator","voltage","ref","layer"],geometry:["line"],tags:{power:"minor_line"},name:"Minor Power Line"},"power/plant":{icon:"maki-industry",fields:["name","operator","address","plant/output/electricity","start_date"],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":{fields:["ref","material"],geometry:["point","vertex"],tags:{power:"pole"},name:"Power Pole"},"power/substation":{icon:"temaki-power",fields:["substation","operator","building","ref"],geometry:["point","area"],tags:{power:"substation"},name:"Substation"},"power/switch":{icon:"temaki-power",fields:["switch","operator","location","cables","voltage","ref"],geometry:["point","vertex","area"],tags:{power:"switch"},name:"Power Switch"},"power/tower":{fields:["design","ref","material"],geometry:["point","vertex"],terms:["power"],tags:{power:"tower"},name:"High-Voltage Tower"},"power/transformer":{icon:"temaki-power",fields:["ref","operator","transformer","location","rating","devices","phases"],moreFields:["frequency","voltage/primary","voltage/secondary","voltage/tertiary","windings","windings/configuration"],geometry:["point","vertex","area"],tags:{power:"transformer"},name:"Transformer"},"public_transport/platform_aerialway":{icon:"temaki-pedestrian",fields:["{public_transport/platform}"],moreFields:["{public_transport/platform}"],geometry:["point","line","area"],tags:{public_transport:"platform",aerialway:"yes"},reference:{key:"public_transport",value:"platform"},terms:["aerialway","cable car","platform","public transit","public transportation","transit","transportation"],name:"Aerialway Stop / Platform"},"public_transport/platform_bus":{icon:"temaki-pedestrian",fields:["{public_transport/platform}"],moreFields:["{public_transport/platform}"],geometry:["point","line","area"],tags:{public_transport:"platform",bus:"yes"},addTags:{public_transport:"platform",bus:"yes",highway:"bus_stop"},removeTags:{public_transport:"platform",bus:"yes",highway:"bus_stop"},reference:{key:"public_transport",value:"platform"},terms:["bus","platform","public transit","public transportation","transit","transportation"],name:"Bus Stop / Platform"},"public_transport/platform_ferry":{icon:"temaki-pedestrian",fields:["{public_transport/platform}"],moreFields:["{public_transport/platform}"],geometry:["point","line","area"],tags:{public_transport:"platform",ferry:"yes"},reference:{key:"public_transport",value:"platform"},terms:["boat","dock","ferry","pier","platform","public transit","public transportation","transit","transportation"],name:"Ferry Stop / Platform"},"public_transport/platform_light_rail":{icon:"temaki-pedestrian",fields:["{public_transport/platform}"],moreFields:["{public_transport/platform}"],geometry:["point","line","area"],tags:{public_transport:"platform",light_rail:"yes"},addTags:{public_transport:"platform",light_rail:"yes",railway:"platform"},removeTags:{public_transport:"platform",light_rail:"yes",railway:"platform"},reference:{key:"railway",value:"platform"},terms:["electric","light rail","platform","public transit","public transportation","rail","track","tram","trolley","transit","transportation"],name:"Light Rail Stop / Platform"},"public_transport/platform_monorail":{icon:"temaki-pedestrian",fields:["{public_transport/platform}"],moreFields:["{public_transport/platform}"],geometry:["point","line","area"],tags:{public_transport:"platform",monorail:"yes"},addTags:{public_transport:"platform",monorail:"yes",railway:"platform"},removeTags:{public_transport:"platform",monorail:"yes",railway:"platform"},reference:{key:"railway",value:"platform"},terms:["monorail","platform","public transit","public transportation","rail","transit","transportation"],name:"Monorail Stop / Platform"},"public_transport/platform_subway":{icon:"temaki-pedestrian",fields:["{public_transport/platform}"],moreFields:["{public_transport/platform}"],geometry:["point","line","area"],tags:{public_transport:"platform",subway:"yes"},addTags:{public_transport:"platform",subway:"yes",railway:"platform"},removeTags:{public_transport:"platform",subway:"yes",railway:"platform"},reference:{key:"railway",value:"platform"},terms:["metro","platform","public transit","public transportation","rail","subway","track","transit","transportation","underground"],name:"Subway Stop / Platform"},"public_transport/platform_train":{icon:"temaki-pedestrian",fields:["{public_transport/platform}"],moreFields:["{public_transport/platform}"],geometry:["point","line","area"],tags:{public_transport:"platform",train:"yes"},addTags:{public_transport:"platform",train:"yes",railway:"platform"},removeTags:{public_transport:"platform",train:"yes",railway:"platform"},reference:{key:"railway",value:"platform"},terms:["platform","public transit","public transportation","rail","track","train","transit","transportation"],name:"Train Stop / Platform"},"public_transport/platform_tram":{icon:"temaki-pedestrian",fields:["{public_transport/platform}"],moreFields:["{public_transport/platform}"],geometry:["point","line","area"],tags:{public_transport:"platform",tram:"yes"},addTags:{public_transport:"platform",tram:"yes",railway:"platform"},removeTags:{public_transport:"platform",tram:"yes",railway:"platform"},reference:{key:"public_transport",value:"platform"},terms:["electric","light rail","platform","public transit","public transportation","rail","streetcar","track","tram","trolley","transit","transportation"],name:"Tram Stop / Platform"},"public_transport/platform_trolleybus":{icon:"temaki-pedestrian",fields:["{public_transport/platform}"],moreFields:["{public_transport/platform}"],geometry:["point","line","area"],tags:{public_transport:"platform",trolleybus:"yes"},addTags:{public_transport:"platform",trolleybus:"yes",highway:"bus_stop"},removeTags:{public_transport:"platform",trolleybus:"yes",highway:"bus_stop"},reference:{key:"public_transport",value:"platform"},terms:["bus","electric","platform","public transit","public transportation","streetcar","trackless","tram","trolley","transit","transportation"],name:"Trolleybus Stop / Platform"},"public_transport/platform":{icon:"temaki-pedestrian",fields:["name","ref_platform","network","operator","departures_board","surface"],moreFields:["lit","bench","shelter","wheelchair"],geometry:["point","line","area"],tags:{public_transport:"platform"},terms:["platform","public transit","public transportation","transit","transportation"],name:"Transit Stop / Platform",matchScore:0.2},"public_transport/station_aerialway":{icon:"maki-aerialway",fields:["{public_transport/station}","aerialway/access","aerialway/summer/access"],moreFields:["{public_transport/station}"],geometry:["point","area"],tags:{public_transport:"station",aerialway:"yes"},reference:{key:"aerialway",value:"station"},terms:["aerialway","cable car","public transit","public transportation","station","terminal","transit","transportation"],name:"Aerialway Station"},"public_transport/station_bus":{icon:"maki-bus",fields:["{public_transport/station}"],moreFields:["{public_transport/station}"],geometry:["point","area"],tags:{public_transport:"station",bus:"yes"},addTags:{public_transport:"station",bus:"yes",amenity:"bus_station"},removeTags:{public_transport:"station",bus:"yes",amenity:"bus_station"},reference:{key:"amenity",value:"bus_station"},terms:["bus","public transit","public transportation","station","terminal","transit","transportation"],name:"Bus Station / Terminal"},"public_transport/station_ferry":{icon:"maki-ferry",fields:["{public_transport/station}"],moreFields:["{public_transport/station}"],geometry:["point","area"],tags:{public_transport:"station",ferry:"yes"},addTags:{public_transport:"station",ferry:"yes",amenity:"ferry_terminal"},removeTags:{public_transport:"station",ferry:"yes",amenity:"ferry_terminal"},reference:{key:"amenity",value:"ferry_terminal"},terms:["boat","dock","ferry","pier","public transit","public transportation","station","terminal","transit","transportation"],name:"Ferry Station / Terminal"},"public_transport/station_light_rail":{icon:"temaki-light_rail",fields:["{public_transport/station}"],moreFields:["{public_transport/station}"],geometry:["point","area"],tags:{public_transport:"station",light_rail:"yes"},addTags:{public_transport:"station",light_rail:"yes",railway:"station",station:"light_rail"},removeTags:{public_transport:"station",light_rail:"yes",railway:"station",station:"light_rail"},reference:{key:"station",value:"light_rail"},terms:["electric","light rail","public transit","public transportation","rail","station","terminal","track","tram","trolley","transit","transportation"],name:"Light Rail Station"},"public_transport/station_monorail":{icon:"temaki-monorail",fields:["{public_transport/station}"],moreFields:["{public_transport/station}"],geometry:["point","area"],tags:{public_transport:"station",monorail:"yes"},addTags:{public_transport:"station",monorail:"yes",railway:"station"},removeTags:{public_transport:"station",monorail:"yes",railway:"station"},reference:{key:"railway",value:"station"},terms:["monorail","public transit","public transportation","rail","station","terminal","transit","transportation"],name:"Monorail Station"},"public_transport/station_subway":{icon:"temaki-subway",fields:["{public_transport/station}"],moreFields:["{public_transport/station}"],geometry:["point","area"],tags:{public_transport:"station",subway:"yes"},addTags:{public_transport:"station",subway:"yes",railway:"station",station:"subway"},removeTags:{public_transport:"station",subway:"yes",railway:"station",station:"subway"},reference:{key:"station",value:"subway"},terms:["metro","public transit","public transportation","rail","station","subway","terminal","track","transit","transportation","underground"],name:"Subway Station"},"public_transport/station_train_halt":{icon:"maki-rail",fields:["{public_transport/station}"],moreFields:["{public_transport/station}"],geometry:["point","area"],tags:{public_transport:"station",train:"yes",railway:"halt"},reference:{key:"railway",value:"halt"},terms:["halt","public transit","public transportation","rail","station","track","train","transit","transportation","whistle stop"],name:"Train Station (Halt / Request)"},"public_transport/station_train":{icon:"maki-rail",fields:["{public_transport/station}"],moreFields:["{public_transport/station}"],geometry:["point","area"],tags:{public_transport:"station",train:"yes"},addTags:{public_transport:"station",train:"yes",railway:"station"},removeTags:{public_transport:"station",train:"yes",railway:"station"},reference:{key:"railway",value:"station"},terms:["public transit","public transportation","rail","station","terminal","track","train","transit","transportation"],name:"Train Station"},"public_transport/station_tram":{icon:"temaki-tram",fields:["{public_transport/station}"],moreFields:["{public_transport/station}"],geometry:["point","area"],tags:{public_transport:"station",tram:"yes"},reference:{key:"public_transport",value:"station"},terms:["electric","light rail","public transit","public transportation","rail","station","streetcar","terminal","track","tram","trolley","transit","transportation"],name:"Tram Station"},"public_transport/station_trolleybus":{icon:"temaki-trolleybus",fields:["{public_transport/station}"],moreFields:["{public_transport/station}"],geometry:["point","area"],tags:{public_transport:"station",trolleybus:"yes"},addTags:{public_transport:"station",trolleybus:"yes",amenity:"bus_station"},removeTags:{public_transport:"station",trolleybus:"yes",amenity:"bus_station"},reference:{key:"amenity",value:"bus_station"},terms:["bus","electric","public transit","public transportation","station","streetcar","terminal","trackless","tram","trolley","transit","transportation"],name:"Trolleybus Station / Terminal"},"public_transport/station":{icon:"maki-rail",fields:["name","network","operator","address","building_area","internet_access"],moreFields:["internet_access/fee","internet_access/ssid","website","phone","email","fax","wheelchair"],geometry:["point","area"],tags:{public_transport:"station"},terms:["public transit","public transportation","station","terminal","transit","transportation"],name:"Transit Station",matchScore:0.2},"public_transport/stop_area":{icon:"iD-relation",fields:["name","ref","network","operator"],geometry:["relation"],tags:{type:"public_transport",public_transport:"stop_area"},addTags:{type:"public_transport",public_transport:"stop_area","public_transport:version":"2"},removeTags:{type:"public_transport",public_transport:"stop_area","public_transport:version":"2"},reference:{key:"public_transport",value:"stop_area"},name:"Transit Stop Area"},"public_transport/stop_position_aerialway":{icon:"maki-aerialway",fields:["{public_transport/stop_position}"],moreFields:["{public_transport/stop_position}"],geometry:["vertex"],tags:{public_transport:"stop_position",aerialway:"yes"},reference:{key:"public_transport",value:"stop_position"},terms:["aerialway","cable car","public transit","public transportation","transit","transportation"],name:"Aerialway Stopping Location"},"public_transport/stop_position_bus":{icon:"maki-bus",fields:["{public_transport/stop_position}"],moreFields:["{public_transport/stop_position}"],geometry:["vertex"],tags:{public_transport:"stop_position",bus:"yes"},reference:{key:"public_transport",value:"stop_position"},terms:["bus","public transit","public transportation","transit","transportation"],name:"Bus Stopping Location"},"public_transport/stop_position_ferry":{icon:"maki-ferry",fields:["{public_transport/stop_position}"],moreFields:["{public_transport/stop_position}"],geometry:["vertex"],tags:{public_transport:"stop_position",ferry:"yes"},reference:{key:"public_transport",value:"stop_position"},terms:["boat","dock","ferry","pier","public transit","public transportation","transit","transportation"],name:"Ferry Stopping Location"},"public_transport/stop_position_light_rail":{icon:"temaki-light_rail",fields:["{public_transport/stop_position}"],moreFields:["{public_transport/stop_position}"],geometry:["vertex"],tags:{public_transport:"stop_position",light_rail:"yes"},addTags:{public_transport:"stop_position",light_rail:"yes",railway:"stop"},removeTags:{public_transport:"stop_position",light_rail:"yes",railway:"stop"},reference:{key:"railway",value:"stop"},terms:["electric","light rail","public transit","public transportation","rail","track","tram","trolley","transit","transportation"],name:"Light Rail Stopping Location"},"public_transport/stop_position_monorail":{icon:"temaki-monorail",fields:["{public_transport/stop_position}"],moreFields:["{public_transport/stop_position}"],geometry:["vertex"],tags:{public_transport:"stop_position",monorail:"yes"},addTags:{public_transport:"stop_position",monorail:"yes",railway:"stop"},removeTags:{public_transport:"stop_position",monorail:"yes",railway:"stop"},reference:{key:"railway",value:"stop"},terms:["monorail","public transit","public transportation","rail","transit","transportation"],name:"Monorail Stopping Location"},"public_transport/stop_position_subway":{icon:"temaki-subway",fields:["{public_transport/stop_position}"],moreFields:["{public_transport/stop_position}"],geometry:["vertex"],tags:{public_transport:"stop_position",subway:"yes"},addTags:{public_transport:"stop_position",subway:"yes",railway:"stop"},removeTags:{public_transport:"stop_position",subway:"yes",railway:"stop"},reference:{key:"railway",value:"stop"},terms:["metro","public transit","public transportation","rail","subway","track","transit","transportation","underground"],name:"Subway Stopping Location"},"public_transport/stop_position_train":{icon:"maki-rail",fields:["{public_transport/stop_position}"],moreFields:["{public_transport/stop_position}"],geometry:["vertex"],tags:{public_transport:"stop_position",train:"yes"},addTags:{public_transport:"stop_position",train:"yes",railway:"stop"},removeTags:{public_transport:"stop_position",train:"yes",railway:"stop"},reference:{key:"railway",value:"stop"},terms:["public transit","public transportation","rail","track","train","transit","transportation"],name:"Train Stopping Location"},"public_transport/stop_position_tram":{icon:"temaki-tram",fields:["{public_transport/stop_position}"],moreFields:["{public_transport/stop_position}"],geometry:["vertex"],tags:{public_transport:"stop_position",tram:"yes"},addTags:{public_transport:"stop_position",tram:"yes",railway:"tram_stop"},removeTags:{public_transport:"stop_position",tram:"yes",railway:"tram_stop"},reference:{key:"public_transport",value:"stop_position"},terms:["electric","light rail","public transit","public transportation","rail","streetcar","track","tram","trolley","transit","transportation"],name:"Tram Stopping Location"},"public_transport/stop_position_trolleybus":{icon:"temaki-trolleybus",fields:["{public_transport/stop_position}"],moreFields:["{public_transport/stop_position}"],geometry:["vertex"],tags:{public_transport:"stop_position",trolleybus:"yes"},reference:{key:"public_transport",value:"stop_position"},terms:["bus","electric","public transit","public transportation","streetcar","trackless","tram","trolley","transit","transportation"],name:"Trolleybus Stopping Location"},"public_transport/stop_position":{icon:"maki-bus",fields:["name","ref_stop_position","network","operator"],geometry:["vertex"],tags:{public_transport:"stop_position"},terms:["public transit","public transportation","transit","transportation"],name:"Transit Stopping Location",matchScore:0.2},"railway/halt":{icon:"maki-rail",geometry:["point","vertex"],tags:{railway:"halt"},terms:["break","interrupt","rest","wait","interruption"],name:"Train Station (Halt / Request)",searchable:false},"railway/platform":{icon:"iD-highway-footway",fields:["name","ref_platform","surface","lit","shelter"],geometry:["line","area"],tags:{railway:"platform"},name:"Train Stop / Platform",searchable:false},"railway/station":{icon:"maki-rail",fields:["name","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:"Train Station",searchable:false},"railway/tram_stop":{icon:"temaki-tram",fields:["name","network","operator"],geometry:["vertex"],tags:{railway:"tram_stop"},terms:["light rail","streetcar","tram","trolley"],name:"Tram Stopping Position",searchable:false},"railway/abandoned":{icon:"iD-railway-abandoned",fields:["name","structure","service_rail","usage_rail"],moreFields:["covered"],geometry:["line"],tags:{railway:"abandoned"},terms:[],name:"Abandoned Railway"},"railway/buffer_stop":{icon:"temaki-buffer_stop",geometry:["vertex"],tags:{railway:"buffer_stop"},terms:["stop","halt","buffer"],name:"Buffer Stop"},"railway/crossing":{icon:"temaki-pedestrian",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/derail":{icon:"maki-roadblock",geometry:["vertex"],tags:{railway:"derail"},terms:["derailer"],name:"Railway Derailer"},"railway/disused":{icon:"iD-railway-disused",fields:["structure","service_rail","usage_rail"],moreFields:["covered"],geometry:["line"],tags:{railway:"disused"},terms:[],name:"Disused Railway"},"railway/funicular":{icon:"iD-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/level_crossing":{icon:"maki-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/light_rail":{icon:"temaki-light_rail",fields:["name","structure","gauge","electrified","service_rail","usage_rail"],moreFields:["covered","frequency_electrified","maxspeed","voltage_electrified"],geometry:["line"],tags:{railway:"light_rail"},terms:["light rail","streetcar","trolley"],name:"Light Rail"},"railway/milestone":{icon:"temaki-milestone",geometry:["point","vertex"],fields:["railway/position","direction_vertex"],tags:{railway:"milestone"},terms:["milestone","marker"],name:"Railway Milestone"},"railway/miniature":{icon:"iD-railway-rail",fields:["name","structure","gauge","electrified","service_rail"],moreFields:["covered","frequency_electrified","maxspeed","voltage_electrified"],geometry:["line"],tags:{railway:"miniature"},terms:["rideable miniature railway","narrow gauge railway","minimum gauge railway"],name:"Miniature Railway"},"railway/monorail":{icon:"temaki-monorail",fields:["name","structure","electrified","service_rail","usage_rail"],moreFields:["covered","frequency_electrified","maxspeed","voltage_electrified"],geometry:["line"],tags:{railway:"monorail"},terms:[],name:"Monorail"},"railway/narrow_gauge":{icon:"iD-railway-rail",fields:["name","structure","gauge","electrified","service_rail","usage_rail"],moreFields:["covered","frequency_electrified","maxspeed","voltage_electrified"],geometry:["line"],tags:{railway:"narrow_gauge"},terms:["narrow gauge railway","narrow gauge railroad"],name:"Narrow Gauge Rail"},"railway/rail":{icon:"iD-railway-rail",fields:["name","structure","gauge","electrified","service_rail","usage_rail"],moreFields:["covered","frequency_electrified","maxspeed","voltage_electrified"],geometry:["line"],tags:{railway:"rail"},terms:[],name:"Rail"},"railway/signal":{icon:"temaki-railway_signals",geometry:["point","vertex"],fields:["railway/position","railway/signal/direction","ref"],tags:{railway:"signal"},terms:["signal","lights"],name:"Railway Signal"},"railway/subway_entrance":{icon:"maki-entrance",geometry:["point","vertex"],fields:["name"],tags:{railway:"subway_entrance"},terms:["metro","transit"],name:"Subway Entrance"},"railway/subway":{icon:"temaki-subway",fields:["name","structure","gauge","electrified","service_rail","usage_rail"],moreFields:["maxspeed","voltage_electrified","frequency_electrified"],geometry:["line"],tags:{railway:"subway"},terms:["metro","transit"],name:"Subway"},"railway/switch":{icon:"temaki-junction",geometry:["vertex"],tags:{railway:"switch"},terms:["switch","points"],name:"Railway Switch"},"railway/train_wash":{icon:"maki-rail",geometry:["point","vertex","area"],fields:["operator","building_area"],tags:{railway:"wash"},terms:["wash","clean"],name:"Train Wash"},"railway/tram":{icon:"temaki-tram",fields:["name","structure","gauge","electrified","service_rail","usage_rail"],moreFields:["covered","frequency_electrified","maxspeed","voltage_electrified"],geometry:["line"],tags:{railway:"tram"},terms:["light rail","streetcar","tram","trolley"],name:"Tram"},relation:{icon:"iD-relation",fields:["name","relation"],geometry:["relation"],tags:{},name:"Relation"},"route/ferry":{icon:"maki-ferry",geometry:["line"],fields:["name","operator","duration","access","to","from"],tags:{route:"ferry"},name:"Ferry Route"},"seamark/beacon_isolated_danger":{fields:["ref","operator","seamark/beacon_isolated_danger/shape","seamark/type"],geometry:["point","vertex"],terms:["beacon isolated danger","isolated danger beacon","iala"],tags:{"seamark:type":"beacon_isolated_danger"},name:"Danger Beacon"},"seamark/beacon_lateral":{fields:["ref","operator","seamark/beacon_lateral/colour","seamark/beacon_lateral/category","seamark/beacon_lateral/shape","seamark/beacon_lateral/system","seamark/type"],geometry:["point","vertex"],terms:["lateral beacon","beacon lateral","cevni","channel marker","iala","lateral mark"],tags:{"seamark:type":"beacon_lateral"},name:"Channel Beacon"},"seamark/buoy_lateral":{fields:["ref","operator","seamark/buoy_lateral/colour","seamark/buoy_lateral/category","seamark/buoy_lateral/shape","seamark/buoy_lateral/system","seamark/type"],geometry:["point","vertex"],terms:["lateral buoy","buoy lateral","cevni","channel marker","iala","lateral mark"],tags:{"seamark:type":"buoy_lateral"},name:"Channel Buoy"},"seamark/buoy_lateral/green":{geometry:["point","vertex"],terms:["lateral buoy","buoy lateral","cevni","channel marker","iala","lateral mark"],tags:{"seamark:type":"buoy_lateral","seamark:buoy_lateral:colour":"green"},name:"Green Buoy"},"seamark/buoy_lateral/red":{geometry:["point","vertex"],terms:["lateral buoy","buoy lateral","cevni","channel marker","iala","lateral mark"],tags:{"seamark:type":"buoy_lateral","seamark:buoy_lateral:colour":"red"},name:"Red Buoy"},"seamark/mooring":{fields:["ref","operator","seamark/mooring/category","seamark/type"],geometry:["point"],terms:["dolphin","pile","bollard","buoy","post"],tags:{"seamark:type":"mooring"},name:"Mooring"},shop:{icon:"maki-shop",fields:["name","shop","operator","address","building_area","opening_hours","payment_multi"],moreFields:["brand","currency_multi","website","phone","email","fax","wheelchair"],geometry:["point","area"],tags:{shop:"*"},terms:[],name:"Shop"},"shop/fishmonger":{icon:"maki-shop",geometry:["point","area"],tags:{shop:"fishmonger"},reference:{key:"shop",value:"seafood"},name:"Fishmonger",searchable:false},"shop/furnace":{icon:"maki-shop",geometry:["point","area"],terms:["oven","stove"],tags:{shop:"furnace"},name:"Furnace Store",searchable:false},"shop/vacant":{icon:"maki-shop",fields:["name","address","building_area"],geometry:["point","area"],tags:{shop:"vacant"},name:"Vacant Shop",searchable:false},"shop/agrarian":{icon:"maki-shop",fields:["{shop}","agrarian"],geometry:["point","area"],terms:["agricultural inputs","agricultural machines","seeds","pesticides","fertilizer","agricultural tools"],tags:{shop:"agrarian"},name:"Farm Supply Shop"},"shop/alcohol":{icon:"maki-alcohol-shop",fields:["{shop}","drive_through"],geometry:["point","area"],terms:["alcohol","beer","booze","wine"],tags:{shop:"alcohol"},name:"Liquor Store"},"shop/anime":{icon:"maki-shop",geometry:["point","area"],tags:{shop:"anime"},terms:["manga","japan","cosplay","figurine","dakimakura"],name:"Anime Shop"},"shop/antiques":{icon:"maki-shop",geometry:["point","area"],tags:{shop:"antiques"},name:"Antiques Shop"},"shop/appliance":{icon:"maki-shop",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:"maki-shop",geometry:["point","area"],terms:["art*","exhibit*","gallery"],tags:{shop:"art"},name:"Art Store"},"shop/baby_goods":{icon:"maki-shop",geometry:["point","area"],tags:{shop:"baby_goods"},name:"Baby Goods Store"},"shop/bag":{icon:"maki-shop",geometry:["point","area"],terms:["handbag","purse"],tags:{shop:"bag"},name:"Bag/Luggage Store"},"shop/bakery":{icon:"maki-bakery",geometry:["point","area"],tags:{shop:"bakery"},terms:["bread","cakes","rolls"],name:"Bakery"},"shop/bathroom_furnishing":{icon:"maki-shop",geometry:["point","area"],tags:{shop:"bathroom_furnishing"},name:"Bathroom Furnishing Store"},"shop/beauty":{icon:"maki-shop",fields:["{shop}","beauty"],geometry:["point","area"],terms:["spa","salon","tanning"],tags:{shop:"beauty"},name:"Beauty Shop"},"shop/beauty/nails":{icon:"maki-shop",geometry:["point","area"],terms:["manicure","pedicure"],tags:{shop:"beauty",beauty:"nails"},reference:{key:"shop",value:"beauty"},name:"Nail Salon"},"shop/beauty/tanning":{icon:"maki-shop",geometry:["point","area"],tags:{shop:"beauty",beauty:"tanning"},reference:{key:"leisure",value:"tanning_salon"},name:"Tanning Salon"},"shop/bed":{icon:"maki-lodging",geometry:["point","area"],tags:{shop:"bed"},name:"Bedding/Mattress Store"},"shop/beverages":{icon:"maki-shop",geometry:["point","area"],tags:{shop:"beverages"},terms:["drinks"],name:"Beverage Store"},"shop/bicycle":{icon:"maki-bicycle",fields:["{shop}","service/bicycle"],geometry:["point","area"],terms:["bike","repair","tricycle","unicycle"],tags:{shop:"bicycle"},name:"Bicycle Shop"},"shop/bookmaker":{icon:"maki-shop",geometry:["point","area"],terms:["betting","bookie"],tags:{shop:"bookmaker"},name:"Bookmaker"},"shop/books":{icon:"maki-shop",fields:["{shop}","internet_access"],moreFields:["{shop}","internet_access/fee","internet_access/ssid"],geometry:["point","area"],tags:{shop:"books"},name:"Book Store"},"shop/boutique":{icon:"maki-shop",fields:["name","clothes","{shop}"],geometry:["point","area"],tags:{shop:"boutique"},name:"Boutique"},"shop/butcher":{icon:"fas-bacon",geometry:["point","area"],terms:["chicken","beef","lamb","meat","pork"],tags:{shop:"butcher"},name:"Butcher"},"shop/candles":{icon:"maki-shop",geometry:["point","area"],tags:{shop:"candles"},terms:["wax"],name:"Candle Shop"},"shop/car_parts":{icon:"maki-car",geometry:["point","area"],terms:["automobile","automotive"],tags:{shop:"car_parts"},name:"Car Parts Store"},"shop/car_repair":{icon:"maki-car-repair",fields:["{shop}","service/vehicle"],geometry:["point","area"],terms:["automobile","automotive","garage","service"],tags:{shop:"car_repair"},name:"Car Repair Shop"},"shop/car":{icon:"maki-car",fields:["name","brand","{shop}","second_hand","service/vehicle"],geometry:["point","area"],terms:["automobile","automotive"],tags:{shop:"car"},name:"Car Dealership"},"shop/caravan":{icon:"temaki-rv_park",fields:["name","brand","{shop}","second_hand","service/vehicle"],geometry:["point","area"],tags:{shop:"caravan"},terms:["auto","camper","recreational vehicle"],name:"RV Dealership"},"shop/carpet":{icon:"maki-shop",geometry:["point","area"],terms:["rug"],tags:{shop:"carpet"},name:"Carpet Store"},"shop/catalogue":{icon:"maki-shop",geometry:["point","area"],tags:{shop:"catalogue"},name:"Catalog Shop"},"shop/charity":{icon:"maki-shop",fields:["{shop}","second_hand"],geometry:["point","area"],terms:["thrift","op shop","nonprofit"],tags:{shop:"charity"},name:"Charity Store"},"shop/cheese":{icon:"fas-cheese",geometry:["point","area"],tags:{shop:"cheese"},name:"Cheese Store"},"shop/chemist":{icon:"maki-grocery",geometry:["point","area"],tags:{shop:"chemist"},terms:["apothecary","beauty","drug store","drugstore","gift","hair","med*","pharmacy","prescription","tooth"],name:"Drugstore"},"shop/chocolate":{icon:"maki-shop",geometry:["point","area"],tags:{shop:"chocolate"},terms:["cocoa"],name:"Chocolate Store"},"shop/clothes":{icon:"maki-clothing-store",fields:["name","clothes","{shop}"],geometry:["point","area"],tags:{shop:"clothes"},name:"Clothing Store"},"shop/coffee":{icon:"maki-shop",geometry:["point","area"],tags:{shop:"coffee"},name:"Coffee Store"},"shop/computer":{icon:"maki-shop",geometry:["point","area"],tags:{shop:"computer"},terms:["desktop","laptop","hardware","operating system","software"],name:"Computer Store"},"shop/confectionery":{icon:"maki-confectionery",geometry:["point","area"],terms:["sweet"],tags:{shop:"confectionery"},name:"Candy Store"},"shop/convenience":{icon:"maki-shop",geometry:["point","area"],tags:{shop:"convenience"},name:"Convenience Store"},"shop/copyshop":{icon:"fas-print",geometry:["point","area"],tags:{shop:"copyshop"},terms:["print","scan"],name:"Copy Store"},"shop/cosmetics":{icon:"maki-shop",geometry:["point","area"],tags:{shop:"cosmetics"},terms:["make-up","makeup"],name:"Cosmetics Store"},"shop/country_store":{icon:"maki-shop",geometry:["point","area"],tags:{shop:"country_store"},name:"Country Store"},"shop/craft":{icon:"maki-shop",geometry:["point","area"],tags:{shop:"craft"},terms:["art*","paint*","frame"],name:"Arts and Crafts Store"},"shop/curtain":{icon:"maki-shop",geometry:["point","area"],terms:["drape*","window"],tags:{shop:"curtain"},name:"Curtain Store"},"shop/dairy":{icon:"fas-cheese",geometry:["point","area"],terms:["milk","egg","cheese"],tags:{shop:"dairy"},name:"Dairy Store"},"shop/deli":{icon:"maki-restaurant",geometry:["point","area"],terms:["lunch","meat","sandwich"],tags:{shop:"deli"},name:"Deli"},"shop/department_store":{icon:"maki-shop",geometry:["point","area"],tags:{shop:"department_store"},name:"Department Store"},"shop/doityourself":{icon:"temaki-tools",geometry:["point","area"],tags:{shop:"doityourself"},name:"DIY Store"},"shop/dry_cleaning":{icon:"maki-shop",geometry:["point","area"],tags:{shop:"dry_cleaning"},name:"Dry Cleaner"},"shop/e-cigarette":{icon:"maki-shop",geometry:["point","area"],tags:{shop:"e-cigarette"},terms:["electronic","vape","vaping","vapor"],name:"E-Cigarette Shop"},"shop/electronics":{icon:"maki-shop",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:"maki-shop",geometry:["point","area"],terms:["sex","porn"],tags:{shop:"erotic"},name:"Erotic Store"},"shop/fabric":{icon:"maki-shop",geometry:["point","area"],terms:["sew"],tags:{shop:"fabric"},name:"Fabric Store"},"shop/farm":{icon:"maki-shop",geometry:["point","area"],terms:["farm shop","farm stand"],tags:{shop:"farm"},name:"Produce Stand"},"shop/fashion":{icon:"maki-shop",fields:["name","clothes","{shop}"],geometry:["point","area"],tags:{shop:"fashion"},name:"Fashion Store"},"shop/fireplace":{icon:"maki-shop",geometry:["point","area"],terms:["fireplace","stove","masonry heater"],tags:{shop:"fireplace"},name:"Fireplace Store"},"shop/fishing":{icon:"maki-shop",geometry:["point","area"],tags:{shop:"fishing"},terms:["bait","fishing line","flies","fly","lure","reel","rod","tackle"],name:"Fishing Shop"},"shop/florist":{icon:"maki-florist",geometry:["point","area"],terms:["flower"],tags:{shop:"florist"},name:"Florist"},"shop/frame":{icon:"maki-shop",geometry:["point","area"],tags:{shop:"frame"},terms:["art*","paint*","photo*","frame"],name:"Framing Shop"},"shop/frozen_food":{icon:"maki-shop",geometry:["point","area"],tags:{shop:"frozen_food"},name:"Frozen Food"},"shop/fuel":{icon:"maki-shop",fields:["{shop}","fuel_multi"],geometry:["point","area"],tags:{shop:"fuel"},name:"Fuel Shop",matchScore:0.5},"shop/funeral_directors":{icon:"maki-cemetery",fields:["{shop}","religion","denomination"],geometry:["point","area"],terms:["undertaker","memorial home"],tags:{shop:"funeral_directors"},name:"Funeral Home"},"shop/furniture":{icon:"fas-couch",geometry:["point","area"],terms:["chair","sofa","table"],tags:{shop:"furniture"},name:"Furniture Store"},"shop/garden_centre":{icon:"maki-garden-centre",geometry:["point","area"],terms:["landscape","mulch","shrub","tree"],tags:{shop:"garden_centre"},name:"Garden Center"},"shop/gas":{icon:"maki-shop",geometry:["point","area"],terms:["cng","lpg","natural gas","propane","refill","tank"],tags:{shop:"gas"},name:"Bottled Gas Shop"},"shop/gift":{icon:"maki-gift",geometry:["point","area"],terms:["souvenir"],tags:{shop:"gift"},name:"Gift Shop"},"shop/greengrocer":{icon:"maki-shop",geometry:["point","area"],terms:["fruit","produce","vegetable"],tags:{shop:"greengrocer"},name:"Greengrocer"},"shop/hairdresser_supply":{icon:"maki-shop",geometry:["point","area"],terms:["barber","shampoo","conditioner"],tags:{shop:"hairdresser_supply"},name:"Hairdresser Supply Store"},"shop/hairdresser":{icon:"temaki-beauty_salon",geometry:["point","area"],terms:["barber"],tags:{shop:"hairdresser"},name:"Hairdresser"},"shop/hardware":{icon:"temaki-tools",geometry:["point","area"],tags:{shop:"hardware"},name:"Hardware Store"},"shop/health_food":{icon:"maki-shop",geometry:["point","area"],terms:["wholefood","vitamins","vegetarian","vegan"],tags:{shop:"health_food"},name:"Health Food Shop"},"shop/hearing_aids":{icon:"maki-shop",geometry:["point","area"],tags:{shop:"hearing_aids"},name:"Hearing Aids Store"},"shop/herbalist":{icon:"maki-shop",geometry:["point","area"],tags:{shop:"herbalist"},name:"Herbalist"},"shop/hifi":{icon:"maki-shop",geometry:["point","area"],terms:["audio","hi-fi","high fidelity","stereo","video"],tags:{shop:"hifi"},name:"Hifi Store"},"shop/houseware":{icon:"fas-blender",geometry:["point","area"],terms:["home","household"],tags:{shop:"houseware"},name:"Houseware Store"},"shop/hunting":{icon:"maki-shop",geometry:["point","area"],tags:{shop:"hunting"},terms:["arrows","bows","bullets","crossbows","rifles","traps"],name:"Hunting Shop"},"shop/interior_decoration":{icon:"maki-shop",geometry:["point","area"],tags:{shop:"interior_decoration"},name:"Interior Decoration Store"},"shop/jewelry":{icon:"maki-jewelry-store",geometry:["point","area"],terms:["bracelet","diamond","earrings","gem","necklace","pins","ring"],tags:{shop:"jewelry"},name:"Jeweler"},"shop/kiosk":{icon:"maki-shop",fields:["{shop}","levels"],geometry:["point","area"],tags:{shop:"kiosk"},name:"Kiosk"},"shop/kitchen":{icon:"maki-shop",geometry:["point","area"],tags:{shop:"kitchen"},terms:["cabinets","countertops","sinks"],name:"Kitchen Design Store"},"shop/laundry":{icon:"maki-laundry",geometry:["point","area"],tags:{shop:"laundry"},name:"Laundry"},"shop/leather":{icon:"maki-shop",geometry:["point","area"],tags:{shop:"leather"},name:"Leather Store"},"shop/locksmith":{icon:"fas-key",geometry:["point","area"],terms:["key","lockpick"],tags:{shop:"locksmith"},name:"Locksmith"},"shop/lottery":{icon:"maki-shop",geometry:["point","area"],tags:{shop:"lottery"},name:"Lottery Shop"},"shop/mall":{icon:"maki-shop",geometry:["point","area"],terms:["shopping"],tags:{shop:"mall"},name:"Mall"},"shop/massage":{icon:"temaki-spa",geometry:["point","area"],tags:{shop:"massage"},name:"Massage Shop"},"shop/medical_supply":{icon:"maki-shop",geometry:["point","area"],tags:{shop:"medical_supply"},name:"Medical Supply Store"},"shop/mobile_phone":{icon:"maki-mobile-phone",geometry:["point","area"],tags:{shop:"mobile_phone"},name:"Mobile Phone Store"},"shop/money_lender":{icon:"maki-bank",fields:["{shop}","currency_multi"],geometry:["point","area"],tags:{shop:"money_lender"},name:"Money Lender"},"shop/motorcycle_repair":{icon:"fas-motorcycle",fields:["{shop}","service/vehicle"],geometry:["point","area"],terms:["auto","bike","garage","motorcycle","repair","service"],tags:{shop:"motorcycle_repair"},name:"Motorcycle Repair Shop"},"shop/motorcycle":{icon:"fas-motorcycle",fields:["name","brand","{shop}"],geometry:["point","area"],terms:["bike"],tags:{shop:"motorcycle"},name:"Motorcycle Dealership"},"shop/music":{icon:"maki-music",geometry:["point","area"],terms:["tape casettes","CDs","compact discs","vinyl records"],tags:{shop:"music"},name:"Music Store"},"shop/musical_instrument":{icon:"maki-music",geometry:["point","area"],terms:["guitar"],tags:{shop:"musical_instrument"},name:"Musical Instrument Store"},"shop/newsagent":{icon:"maki-shop",geometry:["point","area"],tags:{shop:"newsagent"},name:"Newspaper/Magazine Shop"},"shop/nutrition_supplements":{icon:"maki-shop",geometry:["point","area"],tags:{shop:"nutrition_supplements"},name:"Nutrition Supplements Store"},"shop/optician":{icon:"maki-optician",geometry:["point","area"],terms:["eye","glasses"],tags:{shop:"optician"},name:"Optician"},"shop/organic":{icon:"maki-shop",geometry:["point","area"],tags:{shop:"supermarket",organic:"only"},name:"Organic Goods Store"},"shop/outdoor":{icon:"temaki-compass",geometry:["point","area"],terms:["camping","climbing","hiking","outfitter","outdoor equipment","outdoor supplies"],tags:{shop:"outdoor"},name:"Outdoors Store"},"shop/paint":{icon:"fas-paint-roller",geometry:["point","area"],tags:{shop:"paint"},name:"Paint Store"},"shop/party":{icon:"maki-shop",geometry:["point","area"],terms:["balloons","costumes","decorations","invitations"],tags:{shop:"party"},name:"Party Supply Store"},"shop/pastry":{icon:"maki-bakery",geometry:["point","area"],tags:{shop:"pastry"},terms:["patisserie","cake shop","cakery"],name:"Pastry Shop"},"shop/pawnbroker":{icon:"maki-shop",geometry:["point","area"],tags:{shop:"pawnbroker"},name:"Pawn Shop"},"shop/perfumery":{icon:"maki-shop",geometry:["point","area"],tags:{shop:"perfumery"},name:"Perfume Store"},"shop/pet_grooming":{icon:"maki-dog-park",geometry:["point","area"],terms:["cat","dog"],tags:{shop:"pet_grooming"},name:"Pet Grooming Store"},"shop/pet":{icon:"maki-dog-park",geometry:["point","area"],terms:["animal","cat","dog","fish","kitten","puppy","reptile"],tags:{shop:"pet"},name:"Pet Store"},"shop/photo":{icon:"maki-attraction",geometry:["point","area"],terms:["camera","film"],tags:{shop:"photo"},name:"Photography Store"},"shop/pyrotechnics":{icon:"maki-shop",geometry:["point","area"],tags:{shop:"pyrotechnics"},name:"Fireworks Store"},"shop/radiotechnics":{icon:"maki-shop",geometry:["point","area"],tags:{shop:"radiotechnics"},terms:["antenna","transistor"],name:"Radio/Electronic Component Store"},"shop/religion":{icon:"maki-shop",fields:["{shop}","religion","denomination"],geometry:["point","area"],tags:{shop:"religion"},name:"Religious Store"},"shop/scuba_diving":{icon:"maki-swimming",fields:["{shop}","scuba_diving"],geometry:["point","area"],terms:["diving","scuba"],tags:{shop:"scuba_diving"},name:"Scuba Diving Shop"},"shop/seafood":{icon:"maki-shop",geometry:["point","area"],terms:["fishmonger"],tags:{shop:"seafood"},name:"Seafood Shop"},"shop/second_hand":{icon:"maki-shop",fields:["{shop}","second_hand"],geometry:["point","area"],terms:["secondhand","second hand","resale","thrift","used"],tags:{shop:"second_hand"},name:"Consignment/Thrift Store"},"shop/sewing":{icon:"maki-shop",geometry:["point","area"],terms:["haberdashery"],tags:{shop:"sewing"},name:"Sewing Supply Shop"},"shop/shoes":{icon:"maki-shoe",geometry:["point","area"],tags:{shop:"shoes"},terms:["boots","cleats","clogs","heels","loafers","oxfords","sneakers"],name:"Shoe Store"},"shop/sports":{icon:"maki-shop",geometry:["point","area"],tags:{shop:"sports"},terms:["athletics"],name:"Sporting Goods Store"},"shop/stationery":{icon:"maki-shop",geometry:["point","area"],terms:["card","paper"],tags:{shop:"stationery"},name:"Stationery Store"},"shop/storage_rental":{icon:"fas-warehouse",geometry:["point","area"],tags:{shop:"storage_rental"},terms:["garages"],name:"Storage Rental"},"shop/supermarket":{icon:"maki-grocery",moreFields:["diet_multi","{shop}"],geometry:["point","area"],terms:["grocery","store","shop"],tags:{shop:"supermarket"},name:"Supermarket"},"shop/tailor":{icon:"maki-clothing-store",geometry:["point","area"],terms:["clothes","suit"],tags:{shop:"tailor"},name:"Tailor"},"shop/tattoo":{icon:"maki-shop",geometry:["point","area"],tags:{shop:"tattoo"},terms:["ink"],name:"Tattoo Parlor"},"shop/tea":{icon:"maki-teahouse",geometry:["point","area"],tags:{shop:"tea"},name:"Tea Store"},"shop/ticket":{icon:"maki-shop",geometry:["point","area"],tags:{shop:"ticket"},terms:["box office"],name:"Ticket Seller"},"shop/tiles":{icon:"maki-shop",geometry:["point","area"],tags:{shop:"tiles"},name:"Tile Shop"},"shop/tobacco":{icon:"maki-shop",geometry:["point","area"],tags:{shop:"tobacco"},terms:["cigarettes","cigars"],name:"Tobacco Shop"},"shop/toys":{icon:"maki-shop",geometry:["point","area"],tags:{shop:"toys"},terms:["games"],name:"Toy Store"},"shop/trade":{icon:"maki-shop",fields:["name","trade","{shop}"],geometry:["point","area"],tags:{shop:"trade"},name:"Trade Shop"},"shop/travel_agency":{icon:"maki-suitcase",geometry:["point","area"],tags:{shop:"travel_agency"},name:"Travel Agency"},"shop/tyres":{icon:"maki-shop",geometry:["point","area"],tags:{shop:"tyres"},name:"Tire Store"},"shop/vacuum_cleaner":{icon:"maki-shop",geometry:["point","area"],tags:{shop:"vacuum_cleaner"},name:"Vacuum Cleaner Store"},"shop/variety_store":{icon:"maki-shop",geometry:["point","area"],tags:{shop:"variety_store"},name:"Variety Store"},"shop/video_games":{icon:"maki-gaming",geometry:["point","area"],tags:{shop:"video_games"},name:"Video Game Store"},"shop/video":{icon:"temaki-movie_rental",geometry:["point","area"],terms:["DVD","VHS","video casette"],tags:{shop:"video"},name:"Video Store"},"shop/watches":{icon:"maki-watch",geometry:["point","area"],tags:{shop:"watches"},name:"Watches Shop"},"shop/water_sports":{icon:"maki-shop",geometry:["point","area"],tags:{shop:"water_sports"},name:"Watersport/Swim Shop"},"shop/water":{icon:"maki-shop",geometry:["point","area"],tags:{shop:"water"},name:"Drinking Water Shop"},"shop/weapons":{icon:"maki-shop",geometry:["point","area"],terms:["ammo","gun","knife","knives"],tags:{shop:"weapons"},name:"Weapon Shop"},"shop/wholesale":{icon:"maki-warehouse",fields:["{shop}","wholesale"],geometry:["point","area"],terms:["warehouse club","cash and carry"],tags:{shop:"wholesale"},name:"Wholesale Store"},"shop/window_blind":{icon:"temaki-window",geometry:["point","area"],tags:{shop:"window_blind"},name:"Window Blind Store"},"shop/wine":{icon:"maki-alcohol-shop",geometry:["point","area"],tags:{shop:"wine"},name:"Wine Shop"},"tourism/alpine_hut":{icon:"maki-lodging",fields:["name","operator","address","building_area","internet_access","fee"],moreFields:["payment_multi","internet_access/fee","internet_access/ssid","website","phone","email","fax","wheelchair"],geometry:["point","area"],terms:["climbing hut"],tags:{tourism:"alpine_hut"},name:"Alpine Hut"},"tourism/apartment":{icon:"maki-lodging",fields:["name","operator","address","building_area","rooms","internet_access"],moreFields:["smoking","payment_multi","internet_access/fee","internet_access/ssid","website","phone","email","fax","wheelchair"],geometry:["point","area"],tags:{tourism:"apartment"},name:"Guest Apartment / Condo"},"tourism/aquarium":{icon:"maki-aquarium",fields:["name","operator","address","building_area","opening_hours"],moreFields:["fee","payment_multi","smoking","website","phone","email","fax","wheelchair"],geometry:["point","area"],terms:["fish","sea","water"],tags:{tourism:"aquarium"},name:"Aquarium"},"tourism/artwork":{icon:"maki-art-gallery",fields:["name","artwork_type","artist"],moreFields:["material","website"],geometry:["point","vertex","line","area"],tags:{tourism:"artwork"},terms:["mural","sculpture","statue"],name:"Artwork"},"tourism/artwork/mural":{icon:"maki-art-gallery",fields:["name","artist"],geometry:["point","vertex","line","area"],tags:{tourism:"artwork",artwork_type:"mural"},reference:{key:"artwork_type",value:"mural"},terms:["fresco","wall painting"],name:"Mural"},"tourism/artwork/sculpture":{icon:"maki-art-gallery",fields:["name","artist","material"],geometry:["point","vertex","line","area"],tags:{tourism:"artwork",artwork_type:"sculpture"},reference:{key:"artwork_type",value:"sculpture"},terms:["statue","figure","carving"],name:"Sculpture"},"tourism/artwork/statue":{icon:"maki-art-gallery",fields:["name","artist","material"],geometry:["point","vertex","line","area"],tags:{tourism:"artwork",artwork_type:"statue"},reference:{key:"artwork_type",value:"statue"},terms:["sculpture","figure","carving"],name:"Statue"},"tourism/attraction":{icon:"maki-star",fields:["name","operator","address"],geometry:["point","vertex","area"],tags:{tourism:"attraction"},name:"Tourist Attraction"},"tourism/camp_site":{icon:"maki-campsite",fields:["name","operator","address","access_simple","capacity","fee","internet_access"],moreFields:["payment_multi","internet_access/fee","internet_access/ssid","sanitary_dump_station","power_supply","website","phone","email","fax","wheelchair"],geometry:["point","vertex","area"],terms:["tent","rv"],tags:{tourism:"camp_site"},name:"Campground"},"tourism/caravan_site":{icon:"temaki-rv_park",fields:["name","address","capacity","sanitary_dump_station","power_supply","internet_access"],moreFields:["operator","fee","payment_multi","internet_access/fee","internet_access/ssid","smoking","website","phone","email","fax","wheelchair"],geometry:["point","vertex","area"],terms:["Motor Home","Camper"],tags:{tourism:"caravan_site"},name:"RV Park"},"tourism/chalet":{icon:"maki-lodging",fields:["name","operator","address","building_area","internet_access"],moreFields:["smoking","payment_multi","internet_access/fee","internet_access/ssid","website","phone","email","fax","wheelchair"],geometry:["point","area"],terms:["holiday","holiday cottage","holiday home","vacation","vacation home"],tags:{tourism:"chalet"},name:"Holiday Cottage"},"tourism/gallery":{icon:"maki-art-gallery",fields:["name","operator","address","building_area","opening_hours"],moreFields:["payment_multi","website","phone","email","fax","wheelchair"],geometry:["point","area"],terms:["art*","exhibit*","paint*","photo*","sculpt*"],tags:{tourism:"gallery"},name:"Art Gallery"},"tourism/guest_house":{icon:"maki-lodging",fields:["name","operator","address","building_area","rooms","internet_access"],moreFields:["smoking","payment_multi","internet_access/fee","internet_access/ssid","website","phone","email","fax","wheelchair"],geometry:["point","area"],tags:{tourism:"guest_house"},terms:["B&B","Bed and Breakfast"],name:"Guest House"},"tourism/hostel":{icon:"maki-lodging",fields:["name","operator","address","building_area","rooms","internet_access"],moreFields:["smoking","payment_multi","internet_access/fee","internet_access/ssid","website","phone","email","fax","wheelchair"],geometry:["point","area"],tags:{tourism:"hostel"},name:"Hostel"},"tourism/hotel":{icon:"maki-lodging",fields:["name","brand","address","building_area","rooms","internet_access"],moreFields:["operator","smoking","payment_multi","internet_access/fee","internet_access/ssid","stars","website","phone","email","fax","wheelchair"],geometry:["point","area"],tags:{tourism:"hotel"},name:"Hotel"},"tourism/information":{icon:"maki-information",fields:["information","operator","address","building_area"],geometry:["point","vertex","area"],tags:{tourism:"information"},name:"Information"},"tourism/information/board":{icon:"maki-information",fields:["name","operator","board_type","direction"],geometry:["point","vertex"],tags:{tourism:"information",information:"board"},reference:{key:"information",value:"board"},name:"Information Board"},"tourism/information/guidepost":{icon:"maki-information",fields:["name","elevation","operator","ref"],moreFields:["material"],geometry:["point","vertex"],terms:["signpost"],tags:{tourism:"information",information:"guidepost"},reference:{key:"information",value:"guidepost"},name:"Guidepost"},"tourism/information/map":{icon:"maki-information",fields:["operator","map_type","map_size","direction"],geometry:["point","vertex"],tags:{tourism:"information",information:"map"},reference:{key:"information",value:"map"},name:"Map"},"tourism/information/office":{icon:"maki-information",fields:["name","operator","address","building_area"],moreFields:["internet_access","internet_access/fee","internet_access/ssid","website","phone","email","fax","wheelchair"],geometry:["point","vertex","area"],tags:{tourism:"information",information:"office"},reference:{key:"information",value:"office"},name:"Tourist Information Office"},"tourism/motel":{icon:"maki-lodging",fields:["name","brand","address","building_area","rooms","internet_access"],moreFields:["operator","smoking","payment_multi","internet_access/fee","internet_access/ssid","website","phone","email","fax","wheelchair"],geometry:["point","area"],tags:{tourism:"motel"},name:"Motel"},"tourism/museum":{icon:"temaki-museum",fields:["name","operator","address","building_area","opening_hours"],moreFields:["fee","payment_multi","website","phone","email","fax","wheelchair"],geometry:["point","area"],terms:["art*","exhibit*","gallery","foundation","hall","institution","paint*","photo*","sculpt*"],tags:{tourism:"museum"},name:"Museum"},"tourism/picnic_site":{icon:"maki-picnic-site",fields:["name","operator","address","access_simple","capacity"],moreFields:["smoking","fee","payment_multi","website","wheelchair"],geometry:["point","vertex","area"],terms:["camp"],tags:{tourism:"picnic_site"},name:"Picnic Site"},"tourism/theme_park":{icon:"maki-amusement-park",fields:["name","operator","address","opening_hours"],moreFields:["payment_multi","website","phone","email","fax","wheelchair"],geometry:["point","area"],tags:{tourism:"theme_park"},name:"Theme Park"},"tourism/trail_riding_station":{icon:"maki-horse-riding",fields:["name","horse_stables","horse_riding","horse_dressage"],moreFields:["address","opening_hours","website","phone","email","fax"],geometry:["point","area"],tags:{tourism:"trail_riding_station"},name:"Trail Riding Station",matchScore:2},"tourism/viewpoint":{icon:"temaki-binoculars",geometry:["point","vertex"],fields:["direction"],tags:{tourism:"viewpoint"},name:"Viewpoint"},"tourism/wilderness_hut":{icon:"maki-lodging",fields:["name","operator","address","building_area","fee","fireplace"],moreFields:["payment_multi","wheelchair"],geometry:["point","area"],terms:["wilderness hut","backcountry hut","bothy"],tags:{tourism:"wilderness_hut"},name:"Wilderness Hut"},"tourism/zoo":{icon:"temaki-zoo",fields:["name","operator","address","opening_hours","fee"],moreFields:["payment_multi","website","phone","email","fax","wheelchair"],geometry:["point","area"],terms:["animal"],tags:{tourism:"zoo"},name:"Zoo"},traffic_calming:{icon:"temaki-diamond",fields:["traffic_calming","surface","direction_vertex"],geometry:["vertex","line","area"],tags:{traffic_calming:"*"},terms:["bump","hump","slow","speed"],name:"Traffic Calming"},"traffic_calming/bump":{icon:"temaki-diamond",fields:["surface","direction_vertex"],geometry:["vertex","line"],terms:["hump","speed","slow"],tags:{traffic_calming:"bump"},name:"Speed Bump"},"traffic_calming/chicane":{icon:"temaki-diamond",fields:["surface","direction_vertex"],geometry:["vertex","area"],terms:["driveway link","speed","slow"],tags:{traffic_calming:"chicane"},name:"Traffic Chicane"},"traffic_calming/choker":{icon:"temaki-diamond",fields:["surface","direction_vertex"],geometry:["vertex","area"],terms:["speed","slow"],tags:{traffic_calming:"choker"},name:"Traffic Choker"},"traffic_calming/cushion":{icon:"temaki-diamond",fields:["surface","direction_vertex"],geometry:["vertex","line"],terms:["bump","hump","speed","slow"],tags:{traffic_calming:"cushion"},name:"Speed Cushion"},"traffic_calming/dip":{icon:"temaki-diamond",fields:["surface","direction_vertex"],geometry:["vertex","line"],terms:["speed","slow"],tags:{traffic_calming:"dip"},name:"Dip"},"traffic_calming/hump":{icon:"temaki-diamond",fields:["surface","direction_vertex"],geometry:["vertex","line"],terms:["bump","speed","slow"],tags:{traffic_calming:"hump"},name:"Speed Hump"},"traffic_calming/island":{icon:"temaki-diamond",fields:["surface"],geometry:["vertex","area"],terms:["circle","roundabout","slow"],tags:{traffic_calming:"island"},name:"Traffic Island"},"traffic_calming/rumble_strip":{icon:"temaki-diamond",fields:["direction_vertex"],geometry:["vertex","line"],terms:["audible lines","sleeper lines","growlers"],tags:{traffic_calming:"rumble_strip"},name:"Rumble Strip"},"traffic_calming/table":{icon:"temaki-diamond",fields:["surface","direction_vertex"],geometry:["vertex"],tags:{traffic_calming:"table"},terms:["flat top","hump","speed","slow"],name:"Speed Table"},traffic_sign_vertex:{icon:"maki-square-stroked",fields:["traffic_sign","traffic_sign/direction"],geometry:["vertex"],tags:{traffic_sign:"*"},terms:["road","highway"],name:"Traffic Sign"},traffic_sign:{icon:"maki-square-stroked",fields:["traffic_sign","direction"],geometry:["point"],tags:{traffic_sign:"*"},terms:["road","highway"],name:"Traffic Sign"},"traffic_sign/city_limit_vertex":{icon:"maki-square-stroked",fields:["traffic_sign","traffic_sign/direction","name"],geometry:["vertex"],tags:{traffic_sign:"city_limit"},terms:["town","village","hamlet","boundary","edge","border","road","highway"],name:"City Limit Sign"},"traffic_sign/city_limit":{icon:"maki-square-stroked",fields:["traffic_sign","direction","name"],geometry:["point"],tags:{traffic_sign:"city_limit"},terms:["town","village","hamlet","boundary","edge","border","road","highway"],name:"City Limit Sign"},"traffic_sign/maxspeed_vertex":{icon:"maki-square-stroked",fields:["traffic_sign","traffic_sign/direction","maxspeed"],geometry:["vertex"],tags:{traffic_sign:"maxspeed"},terms:["max speed","maximum speed","road","highway"],name:"Speed Limit Sign"},"traffic_sign/maxspeed":{icon:"maki-square-stroked",fields:["traffic_sign","direction","maxspeed"],geometry:["point"],tags:{traffic_sign:"maxspeed"},terms:["max speed","maximum speed","road","highway"],name:"Speed Limit Sign"},"type/multipolygon":{icon:"iD-multipolygon",geometry:["area","relation"],tags:{type:"multipolygon"},removeTags:{},name:"Multipolygon",searchable:false,matchScore:0.1},"type/boundary":{icon:"iD-boundary",fields:["name","boundary"],geometry:["relation"],tags:{type:"boundary"},name:"Boundary"},"type/boundary/administrative":{icon:"iD-boundary",fields:["name","admin_level"],geometry:["relation"],tags:{type:"boundary",boundary:"administrative"},reference:{key:"boundary",value:"administrative"},name:"Administrative Boundary"},"type/enforcement":{icon:"iD-relation",fields:["name","enforcement"],geometry:["relation"],tags:{type:"enforcement"},name:"Enforcement"},"type/restriction":{icon:"iD-restriction",fields:["restriction","except"],geometry:["relation"],tags:{type:"restriction"},name:"Restriction"},"type/restriction/no_left_turn":{icon:"iD-restriction-no-left-turn",geometry:["relation"],tags:{type:"restriction",restriction:"no_left_turn"},name:"No Left Turn"},"type/restriction/no_right_turn":{icon:"iD-restriction-no-right-turn",geometry:["relation"],tags:{type:"restriction",restriction:"no_right_turn"},name:"No Right Turn"},"type/restriction/no_straight_on":{icon:"iD-restriction-no-straight-on",geometry:["relation"],tags:{type:"restriction",restriction:"no_straight_on"},name:"No Straight On"},"type/restriction/no_u_turn":{icon:"iD-restriction-no-u-turn",geometry:["relation"],tags:{type:"restriction",restriction:"no_u_turn"},name:"No U-turn"},"type/restriction/only_left_turn":{icon:"iD-restriction-only-left-turn",geometry:["relation"],tags:{type:"restriction",restriction:"only_left_turn"},name:"Only Left Turn"},"type/restriction/only_right_turn":{icon:"iD-restriction-only-right-turn",geometry:["relation"],tags:{type:"restriction",restriction:"only_right_turn"},name:"Only Right Turn"},"type/restriction/only_straight_on":{icon:"iD-restriction-only-straight-on",geometry:["relation"],tags:{type:"restriction",restriction:"only_straight_on"},name:"Only Straight On"},"type/restriction/only_u_turn":{icon:"iD-restriction-only-u-turn",geometry:["relation"],tags:{type:"restriction",restriction:"only_u_turn"},name:"Only U-turn"},"type/route_master":{icon:"iD-route-master",fields:["name","route_master","ref","operator","network"],geometry:["relation"],tags:{type:"route_master"},name:"Route Master"},"type/route":{icon:"iD-route",fields:["name","route","ref_route","operator","network"],geometry:["relation"],tags:{type:"route"},name:"Route"},"type/route/bicycle":{icon:"iD-route-bicycle",fields:["name","ref_route","network_bicycle","cycle_network","to","from"],geometry:["relation"],tags:{type:"route",route:"bicycle"},name:"Cycle Route"},"type/route/bus":{icon:"iD-route-bus",fields:["name","ref_route","operator","network","to","from"],geometry:["relation"],tags:{type:"route",route:"bus"},name:"Bus Route"},"type/route/detour":{icon:"iD-route-detour",fields:["name","ref_route","to","from"],geometry:["relation"],tags:{type:"route",route:"detour"},name:"Detour Route"},"type/route/ferry":{icon:"iD-route-ferry",fields:["name","ref_route","operator","network","to","from"],geometry:["relation"],tags:{type:"route",route:"ferry"},name:"Ferry Route"},"type/route/foot":{icon:"iD-route-foot",fields:["name","ref_route","operator","network_foot","to","from"],geometry:["relation"],tags:{type:"route",route:"foot"},name:"Foot Route"},"type/route/hiking":{icon:"iD-route-foot",fields:["name","ref_route","operator","network_foot","description","distance","to","from"],geometry:["relation"],tags:{type:"route",route:"hiking"},name:"Hiking Route"},"type/route/horse":{icon:"iD-route-horse",fields:["name","ref_route","operator","network_horse","description","distance","to","from"],geometry:["relation"],tags:{type:"route",route:"horse"},name:"Riding Route"},"type/route/light_rail":{icon:"iD-route-light-rail",fields:["name","ref_route","operator","network","to","from"],geometry:["relation"],tags:{type:"route",route:"light_rail"},name:"Light Rail Route"},"type/route/pipeline":{icon:"iD-route-pipeline",fields:["name","ref_route","operator","to","from"],geometry:["relation"],tags:{type:"route",route:"pipeline"},name:"Pipeline Route"},"type/route/piste":{icon:"iD-route-piste",fields:["name","piste/type","colour","ref_route","operator","to","from"],geometry:["relation"],tags:{type:"route",route:"piste"},name:"Piste/Ski Route"},"type/route/power":{icon:"iD-route-power",fields:["name","ref_route","operator","to","from"],geometry:["relation"],tags:{type:"route",route:"power"},name:"Power Route"},"type/route/road":{icon:"iD-route-road",fields:["name","ref_route","network_road","to","from"],geometry:["relation"],tags:{type:"route",route:"road"},name:"Road Route"},"type/route/subway":{icon:"iD-route-subway",fields:["name","ref_route","operator","network","to","from"],geometry:["relation"],tags:{type:"route",route:"subway"},name:"Subway Route"},"type/route/train":{icon:"iD-route-train",fields:["name","ref_route","operator","network","to","from"],geometry:["relation"],tags:{type:"route",route:"train"},name:"Train Route"},"type/route/tram":{icon:"iD-route-tram",fields:["name","ref_route","operator","network","to","from"],geometry:["relation"],tags:{type:"route",route:"tram"},name:"Tram Route"},"type/site":{icon:"iD-relation",fields:["name","site"],geometry:["relation"],tags:{type:"site"},name:"Site"},"type/waterway":{icon:"iD-route-water",fields:["name","waterway","ref"],geometry:["relation"],tags:{type:"waterway"},name:"Waterway"},vertex:{moreFields:["name"],geometry:["vertex"],tags:{},name:"Other",matchScore:0.1},"waterway/riverbank":{icon:"maki-water",geometry:["area"],tags:{waterway:"riverbank"},name:"Riverbank",searchable:false},"waterway/boatyard":{icon:"maki-harbor",fields:["name","operator"],moreFields:["address","website","phone","email","fax","wheelchair"],geometry:["area","vertex","point"],tags:{waterway:"boatyard"},name:"Boatyard"},"waterway/canal":{icon:"iD-waterway-canal",fields:["name","width","intermittent"],moreFields:["salt"],geometry:["line"],tags:{waterway:"canal"},name:"Canal"},"waterway/dam":{icon:"maki-dam",geometry:["point","vertex","line","area"],moreFields:["website"],fields:["name"],tags:{waterway:"dam"},name:"Dam"},"waterway/ditch":{icon:"iD-waterway-ditch",fields:["structure_waterway","intermittent"],geometry:["line"],tags:{waterway:"ditch"},name:"Ditch"},"waterway/dock":{icon:"maki-harbor",fields:["name","dock","operator"],geometry:["area","vertex","point"],terms:["boat","ship","vessel","marine"],tags:{waterway:"dock"},name:"Wet Dock / Dry Dock"},"waterway/drain":{icon:"iD-waterway-ditch",fields:["structure_waterway","intermittent"],geometry:["line"],tags:{waterway:"drain"},name:"Drain"},"waterway/fuel":{icon:"maki-fuel",fields:["name","operator","address","opening_hours","fuel_multi"],moreFields:["payment_multi","brand","seamark/type","building","website","phone","email","fax","wheelchair"],geometry:["point","area"],terms:["petrol","gas","diesel","boat"],tags:{waterway:"fuel"},name:"Marine Fuel Station"},"waterway/milestone":{icon:"temaki-milestone",fields:["distance","direction_vertex"],moreFields:["seamark/type"],geometry:["point","vertex"],tags:{waterway:"milestone"},terms:["milestone","marker"],name:"Waterway Milestone"},"waterway/river":{icon:"iD-waterway-river",fields:["name","structure_waterway","width","intermittent","tidal"],moreFields:["salt"],geometry:["line"],terms:["beck","branch","brook","course","creek","estuary","rill","rivulet","run","runnel","stream","tributary","watercourse"],tags:{waterway:"river"},name:"River"},"waterway/sanitary_dump_station":{icon:"temaki-storage_tank",fields:["name","operator","access_simple","fee","water_point"],moreFields:["opening_hours","payment_multi","seamark/type"],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_intermittent":{icon:"iD-waterway-stream",fields:["name","structure_waterway","width","intermittent"],geometry:["line"],terms:["arroyo","beck","branch","brook","burn","course","creek","drift","flood","flow","gully","run","runnel","rush","spate","spritz","tributary","wadi","wash","watercourse"],tags:{waterway:"stream",intermittent:"yes"},reference:{key:"waterway",value:"stream"},name:"Intermittent Stream"},"waterway/stream":{icon:"iD-waterway-stream",fields:["name","structure_waterway","width","intermittent"],moreFields:["salt","tidal"],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:"maki-drinking-water",geometry:["area","vertex","point"],tags:{waterway:"water_point"},name:"Marine Drinking Water"},"waterway/waterfall":{icon:"maki-waterfall",fields:["name","height","width","intermittent"],geometry:["vertex"],terms:["fall"],tags:{waterway:"waterfall"},name:"Waterfall"},"waterway/weir":{icon:"maki-dam",geometry:["vertex","line"],tags:{waterway:"weir"},name:"Weir"},"amenity/bank/ABANCA":{name:"ABANCA",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q9598744"},addTags:{amenity:"bank",brand:"ABANCA","brand:wikidata":"Q9598744","brand:wikipedia":"es:Abanca",name:"ABANCA"},removeTags:{amenity:"bank",brand:"ABANCA","brand:wikidata":"Q9598744","brand:wikipedia":"es:Abanca",name:"ABANCA"},matchScore:2,suggestion:true},"amenity/bank/ABN AMRO":{name:"ABN AMRO",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q287471"},addTags:{amenity:"bank",brand:"ABN AMRO","brand:wikidata":"Q287471","brand:wikipedia":"en:ABN AMRO",name:"ABN AMRO"},removeTags:{amenity:"bank",brand:"ABN AMRO","brand:wikidata":"Q287471","brand:wikipedia":"en:ABN AMRO",name:"ABN AMRO"},matchScore:2,suggestion:true},"amenity/bank/ABSA":{name:"ABSA",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q331688"},addTags:{amenity:"bank",brand:"ABSA","brand:wikidata":"Q331688","brand:wikipedia":"en:ABSA Group Limited",name:"ABSA"},removeTags:{amenity:"bank",brand:"ABSA","brand:wikidata":"Q331688","brand:wikipedia":"en:ABSA Group Limited",name:"ABSA"},matchScore:2,suggestion:true},"amenity/bank/AIB":{name:"AIB",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q1642179"},addTags:{amenity:"bank",brand:"AIB","brand:wikidata":"Q1642179","brand:wikipedia":"en:Allied Irish Banks",name:"AIB"},removeTags:{amenity:"bank",brand:"AIB","brand:wikidata":"Q1642179","brand:wikipedia":"en:Allied Irish Banks",name:"AIB"},matchScore:2,suggestion:true},"amenity/bank/ANZ":{name:"ANZ",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q714641"},addTags:{amenity:"bank",brand:"ANZ","brand:wikidata":"Q714641","brand:wikipedia":"en:Australia and New Zealand Banking Group",name:"ANZ"},removeTags:{amenity:"bank",brand:"ANZ","brand:wikidata":"Q714641","brand:wikipedia":"en:Australia and New Zealand Banking Group",name:"ANZ"},matchScore:2,suggestion:true},"amenity/bank/ASB Bank":{name:"ASB Bank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q297214"},addTags:{amenity:"bank",brand:"ASB Bank","brand:wikidata":"Q297214","brand:wikipedia":"en:ASB Bank",name:"ASB Bank"},removeTags:{amenity:"bank",brand:"ASB Bank","brand:wikidata":"Q297214","brand:wikipedia":"en:ASB Bank",name:"ASB Bank"},matchScore:2,suggestion:true},"amenity/bank/ATB Financial":{name:"ATB Financial",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q298762"},addTags:{amenity:"bank",brand:"ATB Financial","brand:wikidata":"Q298762","brand:wikipedia":"en:ATB Financial",name:"ATB Financial"},removeTags:{amenity:"bank",brand:"ATB Financial","brand:wikidata":"Q298762","brand:wikipedia":"en:ATB Financial",name:"ATB Financial"},matchScore:2,suggestion:true},"amenity/bank/AXA":{name:"AXA",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q160054"},addTags:{amenity:"bank",brand:"AXA","brand:wikidata":"Q160054","brand:wikipedia":"en:AXA",name:"AXA"},removeTags:{amenity:"bank",brand:"AXA","brand:wikidata":"Q160054","brand:wikipedia":"en:AXA",name:"AXA"},matchScore:2,suggestion:true},"amenity/bank/Access Bank":{name:"Access Bank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q4672420"},addTags:{amenity:"bank","brand:wikidata":"Q4672420","brand:wikipedia":"en:Access Bank Group",name:"Access Bank"},removeTags:{amenity:"bank","brand:wikidata":"Q4672420","brand:wikipedia":"en:Access Bank Group",name:"Access Bank"},matchScore:2,suggestion:true},"amenity/bank/Agrani Bank Limited অগ্রণী ব্যাংক লিমিটেড":{name:"Agrani Bank Limited অগ্রণী ব্যাংক লিমিটেড",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q517050"},addTags:{amenity:"bank",brand:"Agrani Bank Limited অগ্রণী ব্যাংক লিমিটেড","brand:wikidata":"Q517050","brand:wikipedia":"en:Agrani Bank",name:"Agrani Bank Limited অগ্রণী ব্যাংক লিমিটেড"},removeTags:{amenity:"bank",brand:"Agrani Bank Limited অগ্রণী ব্যাংক লিমিটেড","brand:wikidata":"Q517050","brand:wikipedia":"en:Agrani Bank",name:"Agrani Bank Limited অগ্রণী ব্যাংক লিমিটেড"},matchScore:2,suggestion:true},"amenity/bank/Agribank":{name:"Agribank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q4693829"},addTags:{amenity:"bank",brand:"Agribank","brand:wikidata":"Q4693829","brand:wikipedia":"en:AgriBank",name:"Agribank"},removeTags:{amenity:"bank",brand:"Agribank","brand:wikidata":"Q4693829","brand:wikipedia":"en:AgriBank",name:"Agribank"},matchScore:2,suggestion:true},"amenity/bank/Akbank":{name:"Akbank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q416624"},addTags:{amenity:"bank",brand:"Akbank","brand:wikidata":"Q416624","brand:wikipedia":"en:Akbank",name:"Akbank"},removeTags:{amenity:"bank",brand:"Akbank","brand:wikidata":"Q416624","brand:wikipedia":"en:Akbank",name:"Akbank"},matchScore:2,suggestion:true},"amenity/bank/Alior Bank":{name:"Alior Bank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q9148395"},addTags:{amenity:"bank",brand:"Alior Bank","brand:wikidata":"Q9148395","brand:wikipedia":"en:Alior Bank",name:"Alior Bank"},removeTags:{amenity:"bank",brand:"Alior Bank","brand:wikidata":"Q9148395","brand:wikipedia":"en:Alior Bank",name:"Alior Bank"},matchScore:2,suggestion:true},"amenity/bank/Allahabad Bank":{name:"Allahabad Bank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q2018840"},addTags:{amenity:"bank",brand:"Allahabad Bank","brand:wikidata":"Q2018840","brand:wikipedia":"en:Allahabad Bank",name:"Allahabad Bank"},removeTags:{amenity:"bank",brand:"Allahabad Bank","brand:wikidata":"Q2018840","brand:wikipedia":"en:Allahabad Bank",name:"Allahabad Bank"},matchScore:2,suggestion:true},"amenity/bank/Allied Bank":{name:"Allied Bank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q4732555"},addTags:{amenity:"bank",brand:"Allied Bank","brand:wikidata":"Q4732555","brand:wikipedia":"en:Allied Banking Corporation",name:"Allied Bank"},removeTags:{amenity:"bank",brand:"Allied Bank","brand:wikidata":"Q4732555","brand:wikipedia":"en:Allied Banking Corporation",name:"Allied Bank"},matchScore:2,suggestion:true},"amenity/bank/Alpha Bank":{name:"Alpha Bank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q747394"},addTags:{amenity:"bank",brand:"Alpha Bank","brand:wikidata":"Q747394","brand:wikipedia":"en:Alpha Bank",name:"Alpha Bank"},removeTags:{amenity:"bank",brand:"Alpha Bank","brand:wikidata":"Q747394","brand:wikipedia":"en:Alpha Bank",name:"Alpha Bank"},matchScore:2,suggestion:true},"amenity/bank/Andhra Bank":{name:"Andhra Bank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q2003476"},addTags:{amenity:"bank",brand:"Andhra Bank","brand:wikidata":"Q2003476","brand:wikipedia":"en:Andhra Bank",name:"Andhra Bank"},removeTags:{amenity:"bank",brand:"Andhra Bank","brand:wikidata":"Q2003476","brand:wikipedia":"en:Andhra Bank",name:"Andhra Bank"},matchScore:2,suggestion:true},"amenity/bank/Antonveneta":{name:"Antonveneta",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q3633689"},addTags:{amenity:"bank",brand:"Antonveneta","brand:wikidata":"Q3633689","brand:wikipedia":"en:Banca Antonveneta",name:"Antonveneta"},removeTags:{amenity:"bank",brand:"Antonveneta","brand:wikidata":"Q3633689","brand:wikipedia":"en:Banca Antonveneta",name:"Antonveneta"},matchScore:2,suggestion:true},"amenity/bank/Argenta":{name:"Argenta",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q932856"},addTags:{amenity:"bank",brand:"Argenta","brand:wikidata":"Q932856","brand:wikipedia":"en:Argenta (bank)",name:"Argenta"},removeTags:{amenity:"bank",brand:"Argenta","brand:wikidata":"Q932856","brand:wikipedia":"en:Argenta (bank)",name:"Argenta"},matchScore:2,suggestion:true},"amenity/bank/Arvest Bank":{name:"Arvest Bank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q4802393"},addTags:{amenity:"bank",brand:"Arvest Bank","brand:wikidata":"Q4802393","brand:wikipedia":"en:Arvest Bank",name:"Arvest Bank"},removeTags:{amenity:"bank",brand:"Arvest Bank","brand:wikidata":"Q4802393","brand:wikipedia":"en:Arvest Bank",name:"Arvest Bank"},matchScore:2,suggestion:true},"amenity/bank/Asia United Bank":{name:"Asia United Bank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q4806482"},addTags:{amenity:"bank",brand:"Asia United Bank","brand:wikidata":"Q4806482","brand:wikipedia":"en:Asia United Bank",name:"Asia United Bank"},removeTags:{amenity:"bank",brand:"Asia United Bank","brand:wikidata":"Q4806482","brand:wikipedia":"en:Asia United Bank",name:"Asia United Bank"},matchScore:2,suggestion:true},"amenity/bank/Askari Bank":{name:"Askari Bank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q4807137"},addTags:{amenity:"bank",brand:"Askari Bank","brand:wikidata":"Q4807137","brand:wikipedia":"en:Askari Bank",name:"Askari Bank"},removeTags:{amenity:"bank",brand:"Askari Bank","brand:wikidata":"Q4807137","brand:wikipedia":"en:Askari Bank",name:"Askari Bank"},matchScore:2,suggestion:true},"amenity/bank/Associated Bank":{name:"Associated Bank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q4809155"},addTags:{amenity:"bank",brand:"Associated Bank","brand:wikidata":"Q4809155","brand:wikipedia":"en:Associated Banc-Corp",name:"Associated Bank"},removeTags:{amenity:"bank",brand:"Associated Bank","brand:wikidata":"Q4809155","brand:wikipedia":"en:Associated Banc-Corp",name:"Associated Bank"},matchScore:2,suggestion:true},"amenity/bank/Attijariwafa Bank":{name:"Attijariwafa Bank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q758052"},addTags:{amenity:"bank",brand:"Attijariwafa Bank","brand:wikidata":"Q758052","brand:wikipedia":"en:Attijariwafa Bank",name:"Attijariwafa Bank"},removeTags:{amenity:"bank",brand:"Attijariwafa Bank","brand:wikidata":"Q758052","brand:wikipedia":"en:Attijariwafa Bank",name:"Attijariwafa Bank"},matchScore:2,suggestion:true},"amenity/bank/Axis Bank":{name:"Axis Bank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q2003549"},addTags:{amenity:"bank",brand:"Axis Bank","brand:wikidata":"Q2003549","brand:wikipedia":"en:Axis Bank",name:"Axis Bank"},removeTags:{amenity:"bank",brand:"Axis Bank","brand:wikidata":"Q2003549","brand:wikipedia":"en:Axis Bank",name:"Axis Bank"},matchScore:2,suggestion:true},"amenity/bank/BAC":{name:"BAC",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q5715556"},addTags:{amenity:"bank",brand:"BAC","brand:wikidata":"Q5715556","brand:wikipedia":"en:Banco de America Central",name:"BAC"},removeTags:{amenity:"bank",brand:"BAC","brand:wikidata":"Q5715556","brand:wikipedia":"en:Banco de America Central",name:"BAC"},matchScore:2,suggestion:true},"amenity/bank/BAWAG PSK":{name:"BAWAG PSK",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q379938"},addTags:{amenity:"bank",brand:"BAWAG PSK","brand:wikidata":"Q379938","brand:wikipedia":"en:BAWAG P.S.K.",name:"BAWAG PSK"},removeTags:{amenity:"bank",brand:"BAWAG PSK","brand:wikidata":"Q379938","brand:wikipedia":"en:BAWAG P.S.K.",name:"BAWAG PSK"},matchScore:2,suggestion:true},"amenity/bank/BB&T":{name:"BB&T",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q795486"},addTags:{amenity:"bank",brand:"BB&T","brand:wikidata":"Q795486","brand:wikipedia":"en:BB&T",name:"BB&T"},removeTags:{amenity:"bank",brand:"BB&T","brand:wikidata":"Q795486","brand:wikipedia":"en:BB&T",name:"BB&T"},matchScore:2,suggestion:true},"amenity/bank/BBBank":{name:"BBBank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q795504"},addTags:{amenity:"bank",brand:"BBBank","brand:wikidata":"Q795504","brand:wikipedia":"en:BBBank",name:"BBBank"},removeTags:{amenity:"bank",brand:"BBBank","brand:wikidata":"Q795504","brand:wikipedia":"en:BBBank",name:"BBBank"},matchScore:2,suggestion:true},"amenity/bank/BBVA":{name:"BBVA",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q806189"},addTags:{amenity:"bank",brand:"BBVA","brand:wikidata":"Q806189","brand:wikipedia":"en:Banco Bilbao Vizcaya Argentaria",name:"BBVA"},removeTags:{amenity:"bank",brand:"BBVA","brand:wikidata":"Q806189","brand:wikipedia":"en:Banco Bilbao Vizcaya Argentaria",name:"BBVA"},matchScore:2,suggestion:true},"amenity/bank/BBVA Bancomer":{name:"BBVA Bancomer",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q2876794"},addTags:{amenity:"bank",brand:"BBVA Bancomer","brand:wikidata":"Q2876794","brand:wikipedia":"en:BBVA Bancomer",name:"BBVA Bancomer"},removeTags:{amenity:"bank",brand:"BBVA Bancomer","brand:wikidata":"Q2876794","brand:wikipedia":"en:BBVA Bancomer",name:"BBVA Bancomer"},matchScore:2,suggestion:true},"amenity/bank/BBVA Compass":{name:"BBVA Compass",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q4835088"},addTags:{amenity:"bank",brand:"BBVA Compass","brand:wikidata":"Q4835088","brand:wikipedia":"en:BBVA Compass",name:"BBVA Compass"},removeTags:{amenity:"bank",brand:"BBVA Compass","brand:wikidata":"Q4835088","brand:wikipedia":"en:BBVA Compass",name:"BBVA Compass"},matchScore:2,suggestion:true},"amenity/bank/BBVA Continental":{name:"BBVA Continental",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q4835089"},addTags:{amenity:"bank",brand:"BBVA Continental","brand:wikidata":"Q4835089","brand:wikipedia":"en:BBVA Continental",name:"BBVA Continental"},removeTags:{amenity:"bank",brand:"BBVA Continental","brand:wikidata":"Q4835089","brand:wikipedia":"en:BBVA Continental",name:"BBVA Continental"},matchScore:2,suggestion:true},"amenity/bank/BBVA Francés":{name:"BBVA Francés",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q2876788"},addTags:{amenity:"bank",brand:"BBVA Francés","brand:wikidata":"Q2876788","brand:wikipedia":"en:BBVA Francés",name:"BBVA Francés"},removeTags:{amenity:"bank",brand:"BBVA Francés","brand:wikidata":"Q2876788","brand:wikipedia":"en:BBVA Francés",name:"BBVA Francés"},matchScore:2,suggestion:true},"amenity/bank/BCA":{name:"BCA",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q806626"},addTags:{amenity:"bank",brand:"BCA","brand:wikidata":"Q806626","brand:wikipedia":"id:Bank Central Asia",name:"BCA"},removeTags:{amenity:"bank",brand:"BCA","brand:wikidata":"Q806626","brand:wikipedia":"id:Bank Central Asia",name:"BCA"},matchScore:2,suggestion:true},"amenity/bank/BCI":{name:"BCI",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q2882083"},addTags:{amenity:"bank",brand:"BCI","brand:wikidata":"Q2882083","brand:wikipedia":"es:Banco de Crédito e Inversiones",name:"BCI"},removeTags:{amenity:"bank",brand:"BCI","brand:wikidata":"Q2882083","brand:wikipedia":"es:Banco de Crédito e Inversiones",name:"BCI"},matchScore:2,suggestion:true},"amenity/bank/BCP (Bolivia)":{name:"BCP (Bolivia)",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q16826675"},addTags:{amenity:"bank",brand:"BCP","brand:wikidata":"Q16826675","brand:wikipedia":"es:Banco de Crédito de Bolivia",name:"BCP"},removeTags:{amenity:"bank",brand:"BCP","brand:wikidata":"Q16826675","brand:wikipedia":"es:Banco de Crédito de Bolivia",name:"BCP"},matchScore:2,suggestion:true},"amenity/bank/BCP (France)":{name:"BCP (France)",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q118581"},addTags:{amenity:"bank",brand:"BCP","brand:wikidata":"Q118581","brand:wikipedia":"pt:Banco Comercial Português",name:"BCP"},removeTags:{amenity:"bank",brand:"BCP","brand:wikidata":"Q118581","brand:wikipedia":"pt:Banco Comercial Português",name:"BCP"},matchScore:2,suggestion:true},"amenity/bank/BCP (Luxembourg)":{name:"BCP (Luxembourg)",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q118581"},addTags:{amenity:"bank",brand:"BCP","brand:wikidata":"Q118581","brand:wikipedia":"pt:Banco Comercial Português",name:"BCP"},removeTags:{amenity:"bank",brand:"BCP","brand:wikidata":"Q118581","brand:wikipedia":"pt:Banco Comercial Português",name:"BCP"},matchScore:2,suggestion:true},"amenity/bank/BCP (Peru)":{name:"BCP (Peru)",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q4854124"},addTags:{amenity:"bank",brand:"BCP","brand:wikidata":"Q4854124","brand:wikipedia":"es:Banco de Crédito del Perú",name:"BCP"},removeTags:{amenity:"bank",brand:"BCP","brand:wikidata":"Q4854124","brand:wikipedia":"es:Banco de Crédito del Perú",name:"BCP"},matchScore:2,suggestion:true},"amenity/bank/BCR":{name:"BCR",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q6951632"},addTags:{amenity:"bank",brand:"BCR","brand:wikidata":"Q6951632","brand:wikipedia":"es:Banco de Costa Rica",name:"BCR"},removeTags:{amenity:"bank",brand:"BCR","brand:wikidata":"Q6951632","brand:wikipedia":"es:Banco de Costa Rica",name:"BCR"},matchScore:2,suggestion:true},"amenity/bank/BDO":{name:"BDO",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q4854129"},addTags:{amenity:"bank",brand:"BDO","brand:wikidata":"Q4854129","brand:wikipedia":"en:Banco de Oro",name:"BDO"},removeTags:{amenity:"bank",brand:"BDO","brand:wikidata":"Q4854129","brand:wikipedia":"en:Banco de Oro",name:"BDO"},matchScore:2,suggestion:true},"amenity/bank/BGŻ BNP Paribas":{name:"BGŻ BNP Paribas",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q9164980"},addTags:{amenity:"bank",brand:"BGŻ BNP Paribas","brand:wikidata":"Q9164980","brand:wikipedia":"pl:Bank BGŻ BNP Paribas",name:"BGŻ BNP Paribas"},removeTags:{amenity:"bank",brand:"BGŻ BNP Paribas","brand:wikidata":"Q9164980","brand:wikipedia":"pl:Bank BGŻ BNP Paribas",name:"BGŻ BNP Paribas"},matchScore:2,suggestion:true},"amenity/bank/BMCE Bank":{name:"BMCE Bank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q2300433"},addTags:{amenity:"bank",brand:"BMCE Bank","brand:wikidata":"Q2300433","brand:wikipedia":"ar:البنك المغربي للتجارة الخارجية",name:"BMCE Bank"},removeTags:{amenity:"bank",brand:"BMCE Bank","brand:wikidata":"Q2300433","brand:wikipedia":"ar:البنك المغربي للتجارة الخارجية",name:"BMCE Bank"},matchScore:2,suggestion:true},"amenity/bank/BMCI":{name:"BMCI",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q2883409"},addTags:{amenity:"bank",brand:"BMCI","brand:wikidata":"Q2883409","brand:wikipedia":"ar:البنك المغربي للتجارة والصناعة",name:"BMCI"},removeTags:{amenity:"bank",brand:"BMCI","brand:wikidata":"Q2883409","brand:wikipedia":"ar:البنك المغربي للتجارة والصناعة",name:"BMCI"},matchScore:2,suggestion:true},"amenity/bank/BMN":{name:"BMN",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q3754900"},addTags:{amenity:"bank",brand:"BMN","brand:wikidata":"Q3754900","brand:wikipedia":"es:Banco Mare Nostrum",name:"BMN"},removeTags:{amenity:"bank",brand:"BMN","brand:wikidata":"Q3754900","brand:wikipedia":"es:Banco Mare Nostrum",name:"BMN"},matchScore:2,suggestion:true},"amenity/bank/BMO":{name:"BMO",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q806693"},addTags:{amenity:"bank",brand:"BMO","brand:wikidata":"Q806693","brand:wikipedia":"en:Bank of Montreal",name:"BMO"},removeTags:{amenity:"bank",brand:"BMO","brand:wikidata":"Q806693","brand:wikipedia":"en:Bank of Montreal",name:"BMO"},matchScore:2,suggestion:true},"amenity/bank/BMO Harris Bank":{name:"BMO Harris Bank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q4835981"},addTags:{amenity:"bank",brand:"BMO Harris Bank","brand:wikidata":"Q4835981","brand:wikipedia":"en:BMO Harris Bank",name:"BMO Harris Bank"},removeTags:{amenity:"bank",brand:"BMO Harris Bank","brand:wikidata":"Q4835981","brand:wikipedia":"en:BMO Harris Bank",name:"BMO Harris Bank"},matchScore:2,suggestion:true},"amenity/bank/BNA":{name:"BNA",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q2883410"},addTags:{amenity:"bank",brand:"BNA","brand:wikidata":"Q2883410","brand:wikipedia":"fr:Banque nationale d'Algérie",name:"BNA"},removeTags:{amenity:"bank",brand:"BNA","brand:wikidata":"Q2883410","brand:wikipedia":"fr:Banque nationale d'Algérie",name:"BNA"},matchScore:2,suggestion:true},"amenity/bank/BNI":{name:"BNI",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q2882611"},addTags:{amenity:"bank",brand:"BNI","brand:wikidata":"Q2882611","brand:wikipedia":"id:Bank Negara Indonesia",name:"BNI"},removeTags:{amenity:"bank",brand:"BNI","brand:wikidata":"Q2882611","brand:wikipedia":"id:Bank Negara Indonesia",name:"BNI"},matchScore:2,suggestion:true},"amenity/bank/BNL":{name:"BNL",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q2201225"},addTags:{amenity:"bank",brand:"BNL","brand:wikidata":"Q2201225","brand:wikipedia":"en:Banca Nazionale del Lavoro",name:"BNL"},removeTags:{amenity:"bank",brand:"BNL","brand:wikidata":"Q2201225","brand:wikipedia":"en:Banca Nazionale del Lavoro",name:"BNL"},matchScore:2,suggestion:true},"amenity/bank/BNP Paribas":{name:"BNP Paribas",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q499707"},addTags:{amenity:"bank",brand:"BNP Paribas","brand:wikidata":"Q499707","brand:wikipedia":"en:BNP Paribas",name:"BNP Paribas"},removeTags:{amenity:"bank",brand:"BNP Paribas","brand:wikidata":"Q499707","brand:wikipedia":"en:BNP Paribas",name:"BNP Paribas"},matchScore:2,suggestion:true},"amenity/bank/BNP Paribas Fortis":{name:"BNP Paribas Fortis",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q796827"},addTags:{amenity:"bank",brand:"BNP Paribas Fortis","brand:wikidata":"Q796827","brand:wikipedia":"en:BNP Paribas Fortis",name:"BNP Paribas Fortis"},removeTags:{amenity:"bank",brand:"BNP Paribas Fortis","brand:wikidata":"Q796827","brand:wikipedia":"en:BNP Paribas Fortis",name:"BNP Paribas Fortis"},matchScore:2,suggestion:true},"amenity/bank/BOC":{name:"BOC",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q790068"},addTags:{amenity:"bank",brand:"BOC","brand:wikidata":"Q790068","brand:wikipedia":"en:Bank of China",name:"BOC"},removeTags:{amenity:"bank",brand:"BOC","brand:wikidata":"Q790068","brand:wikipedia":"en:Bank of China",name:"BOC"},matchScore:2,suggestion:true},"amenity/bank/BPI":{name:"BPI",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q2501256"},addTags:{amenity:"bank",brand:"BPI","brand:wikidata":"Q2501256","brand:wikipedia":"en:Bank of the Philippine Islands",name:"BPI"},removeTags:{amenity:"bank",brand:"BPI","brand:wikidata":"Q2501256","brand:wikipedia":"en:Bank of the Philippine Islands",name:"BPI"},matchScore:2,suggestion:true},"amenity/bank/BRD":{name:"BRD",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q796927"},addTags:{amenity:"bank",brand:"BRD","brand:wikidata":"Q796927","brand:wikipedia":"ro:BRD - Groupe Société Générale",name:"BRD"},removeTags:{amenity:"bank",brand:"BRD","brand:wikidata":"Q796927","brand:wikipedia":"ro:BRD - Groupe Société Générale",name:"BRD"},matchScore:2,suggestion:true},"amenity/bank/BRED":{name:"BRED",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q2877455"},addTags:{amenity:"bank",brand:"BRED","brand:wikidata":"Q2877455","brand:wikipedia":"fr:BRED Banque populaire",name:"BRED"},removeTags:{amenity:"bank",brand:"BRED","brand:wikidata":"Q2877455","brand:wikipedia":"fr:BRED Banque populaire",name:"BRED"},matchScore:2,suggestion:true},"amenity/bank/BRI":{name:"BRI",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q623042"},addTags:{amenity:"bank",brand:"BRI","brand:wikidata":"Q623042","brand:wikipedia":"id:Bank Rakyat Indonesia",name:"BRI"},removeTags:{amenity:"bank",brand:"BRI","brand:wikidata":"Q623042","brand:wikipedia":"id:Bank Rakyat Indonesia",name:"BRI"},matchScore:2,suggestion:true},"amenity/bank/BTN":{name:"BTN",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q12474534"},addTags:{amenity:"bank",brand:"BTN","brand:en":"BTN","brand:wikidata":"Q12474534","brand:wikipedia":"id:Bank Tabungan Negara",name:"BTN","name:en":"BTN"},removeTags:{amenity:"bank",brand:"BTN","brand:en":"BTN","brand:wikidata":"Q12474534","brand:wikipedia":"id:Bank Tabungan Negara",name:"BTN","name:en":"BTN"},matchScore:2,suggestion:true},"amenity/bank/BW-Bank":{name:"BW-Bank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q798891"},addTags:{amenity:"bank",brand:"BW-Bank","brand:en":"BW-Bank","brand:wikidata":"Q798891","brand:wikipedia":"de:Baden-Württembergische Bank",name:"BW-Bank","name:en":"BW-Bank"},removeTags:{amenity:"bank",brand:"BW-Bank","brand:en":"BW-Bank","brand:wikidata":"Q798891","brand:wikipedia":"de:Baden-Württembergische Bank",name:"BW-Bank","name:en":"BW-Bank"},matchScore:2,suggestion:true},"amenity/bank/Banamex":{name:"Banamex",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q749474"},addTags:{amenity:"bank",brand:"Banamex","brand:wikidata":"Q749474","brand:wikipedia":"en:Grupo Financiero Banamex",name:"Banamex"},removeTags:{amenity:"bank",brand:"Banamex","brand:wikidata":"Q749474","brand:wikipedia":"en:Grupo Financiero Banamex",name:"Banamex"},matchScore:2,suggestion:true},"amenity/bank/Banca Intesa":{name:"Banca Intesa",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q647092"},addTags:{amenity:"bank",brand:"Banca Intesa","brand:wikidata":"Q647092","brand:wikipedia":"en:Banca Intesa",name:"Banca Intesa"},removeTags:{amenity:"bank",brand:"Banca Intesa","brand:wikidata":"Q647092","brand:wikipedia":"en:Banca Intesa",name:"Banca Intesa"},matchScore:2,suggestion:true},"amenity/bank/Banca March":{name:"Banca March",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q578252"},addTags:{amenity:"bank",brand:"Banca March","brand:wikidata":"Q578252","brand:wikipedia":"en:Banca March",name:"Banca March"},removeTags:{amenity:"bank",brand:"Banca March","brand:wikidata":"Q578252","brand:wikipedia":"en:Banca March",name:"Banca March"},matchScore:2,suggestion:true},"amenity/bank/Banca Popolare di Milano":{name:"Banca Popolare di Milano",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q806154"},addTags:{amenity:"bank",brand:"Banca Popolare di Milano","brand:wikidata":"Q806154","brand:wikipedia":"en:Banca Popolare di Milano",name:"Banca Popolare di Milano"},removeTags:{amenity:"bank",brand:"Banca Popolare di Milano","brand:wikidata":"Q806154","brand:wikipedia":"en:Banca Popolare di Milano",name:"Banca Popolare di Milano"},matchScore:2,suggestion:true},"amenity/bank/Banca Popolare di Novara":{name:"Banca Popolare di Novara",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q3633742"},addTags:{amenity:"bank",brand:"Banca Popolare di Novara","brand:wikidata":"Q3633742","brand:wikipedia":"en:Banca Popolare di Novara",name:"Banca Popolare di Novara"},removeTags:{amenity:"bank",brand:"Banca Popolare di Novara","brand:wikidata":"Q3633742","brand:wikipedia":"en:Banca Popolare di Novara",name:"Banca Popolare di Novara"},matchScore:2,suggestion:true},"amenity/bank/Banca Popolare di Sondrio":{name:"Banca Popolare di Sondrio",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q686176"},addTags:{amenity:"bank",brand:"Banca Popolare di Sondrio","brand:wikidata":"Q686176","brand:wikipedia":"en:Banca Popolare di Sondrio",name:"Banca Popolare di Sondrio"},removeTags:{amenity:"bank",brand:"Banca Popolare di Sondrio","brand:wikidata":"Q686176","brand:wikipedia":"en:Banca Popolare di Sondrio",name:"Banca Popolare di Sondrio"},matchScore:2,suggestion:true},"amenity/bank/Banca Popolare di Verona":{name:"Banca Popolare di Verona",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q3167468"},addTags:{amenity:"bank",brand:"Banca Popolare di Verona","brand:wikidata":"Q3167468","brand:wikipedia":"en:Banca Popolare di Verona",name:"Banca Popolare di Verona"},removeTags:{amenity:"bank",brand:"Banca Popolare di Verona","brand:wikidata":"Q3167468","brand:wikipedia":"en:Banca Popolare di Verona",name:"Banca Popolare di Verona"},matchScore:2,suggestion:true},"amenity/bank/Banca Popolare di Vicenza":{name:"Banca Popolare di Vicenza",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q3127200"},addTags:{amenity:"bank",brand:"Banca Popolare di Vicenza","brand:wikidata":"Q3127200","brand:wikipedia":"en:Banca Popolare di Vicenza",name:"Banca Popolare di Vicenza"},removeTags:{amenity:"bank",brand:"Banca Popolare di Vicenza","brand:wikidata":"Q3127200","brand:wikipedia":"en:Banca Popolare di Vicenza",name:"Banca Popolare di Vicenza"},matchScore:2,suggestion:true},"amenity/bank/Banca Românească":{name:"Banca Românească",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q4854052"},addTags:{amenity:"bank",brand:"Banca Românească","brand:wikidata":"Q4854052","brand:wikipedia":"en:Banca Românească",name:"Banca Românească"},removeTags:{amenity:"bank",brand:"Banca Românească","brand:wikidata":"Q4854052","brand:wikipedia":"en:Banca Românească",name:"Banca Românească"},matchScore:2,suggestion:true},"amenity/bank/Banca Sella":{name:"Banca Sella",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q3633749"},addTags:{amenity:"bank",brand:"Banca Sella","brand:wikidata":"Q3633749","brand:wikipedia":"en:Banca Sella Group",name:"Banca Sella"},removeTags:{amenity:"bank",brand:"Banca Sella","brand:wikidata":"Q3633749","brand:wikipedia":"en:Banca Sella Group",name:"Banca Sella"},matchScore:2,suggestion:true},"amenity/bank/Banca Transilvania":{name:"Banca Transilvania",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q806161"},addTags:{amenity:"bank",brand:"Banca Transilvania","brand:wikidata":"Q806161","brand:wikipedia":"en:Banca Transilvania",name:"Banca Transilvania"},removeTags:{amenity:"bank",brand:"Banca Transilvania","brand:wikidata":"Q806161","brand:wikipedia":"en:Banca Transilvania",name:"Banca Transilvania"},matchScore:2,suggestion:true},"amenity/bank/Bancaribe":{name:"Bancaribe",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q5717827"},addTags:{amenity:"bank",brand:"Bancaribe","brand:wikidata":"Q5717827","brand:wikipedia":"en:Bancaribe",name:"Bancaribe"},removeTags:{amenity:"bank",brand:"Bancaribe","brand:wikidata":"Q5717827","brand:wikipedia":"en:Bancaribe",name:"Bancaribe"},matchScore:2,suggestion:true},"amenity/bank/Banco AV Villas":{name:"Banco AV Villas",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q4854068"},addTags:{amenity:"bank",brand:"Banco AV Villas","brand:wikidata":"Q4854068","brand:wikipedia":"en:Banco AV Villas",name:"Banco AV Villas"},removeTags:{amenity:"bank",brand:"Banco AV Villas","brand:wikidata":"Q4854068","brand:wikipedia":"en:Banco AV Villas",name:"Banco AV Villas"},matchScore:2,suggestion:true},"amenity/bank/Banco Agrario":{name:"Banco Agrario",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q20013358"},addTags:{amenity:"bank",brand:"Banco Agrario","brand:wikidata":"Q20013358","brand:wikipedia":"en:Banco Agrario de Colombia",name:"Banco Agrario"},removeTags:{amenity:"bank",brand:"Banco Agrario","brand:wikidata":"Q20013358","brand:wikipedia":"en:Banco Agrario de Colombia",name:"Banco Agrario"},matchScore:2,suggestion:true},"amenity/bank/Banco Agrario de Colombia":{name:"Banco Agrario de Colombia",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q20013358"},addTags:{amenity:"bank",brand:"Banco Agrario de Colombia","brand:wikidata":"Q20013358","brand:wikipedia":"en:Banco Agrario de Colombia",name:"Banco Agrario de Colombia"},removeTags:{amenity:"bank",brand:"Banco Agrario de Colombia","brand:wikidata":"Q20013358","brand:wikipedia":"en:Banco Agrario de Colombia",name:"Banco Agrario de Colombia"},matchScore:2,suggestion:true},"amenity/bank/Banco Azteca":{name:"Banco Azteca",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q4854076"},addTags:{amenity:"bank",brand:"Banco Azteca","brand:wikidata":"Q4854076","brand:wikipedia":"en:Banco Azteca",name:"Banco Azteca"},removeTags:{amenity:"bank",brand:"Banco Azteca","brand:wikidata":"Q4854076","brand:wikipedia":"en:Banco Azteca",name:"Banco Azteca"},matchScore:2,suggestion:true},"amenity/bank/Banco BPM":{name:"Banco BPM",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q27331643"},addTags:{amenity:"bank",brand:"Banco BPM","brand:wikidata":"Q27331643","brand:wikipedia":"en:Banco BPM",name:"Banco BPM"},removeTags:{amenity:"bank",brand:"Banco BPM","brand:wikidata":"Q27331643","brand:wikipedia":"en:Banco BPM",name:"Banco BPM"},matchScore:2,suggestion:true},"amenity/bank/Banco Caja Social":{name:"Banco Caja Social",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q5717869"},addTags:{amenity:"bank",brand:"Banco Caja Social","brand:wikidata":"Q5717869","brand:wikipedia":"es:Banco Caja Social",name:"Banco Caja Social"},removeTags:{amenity:"bank",brand:"Banco Caja Social","brand:wikidata":"Q5717869","brand:wikipedia":"es:Banco Caja Social",name:"Banco Caja Social"},matchScore:2,suggestion:true},"amenity/bank/Banco Ciudad":{name:"Banco Ciudad",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q4856204"},addTags:{amenity:"bank",brand:"Banco Ciudad","brand:wikidata":"Q4856204","brand:wikipedia":"en:Bank of the City of Buenos Aires",name:"Banco Ciudad"},removeTags:{amenity:"bank",brand:"Banco Ciudad","brand:wikidata":"Q4856204","brand:wikipedia":"en:Bank of the City of Buenos Aires",name:"Banco Ciudad"},matchScore:2,suggestion:true},"amenity/bank/Banco Continental":{name:"Banco Continental",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q4835089"},addTags:{amenity:"bank",brand:"Banco Continental","brand:wikidata":"Q4835089","brand:wikipedia":"en:BBVA Continental",name:"Banco Continental"},removeTags:{amenity:"bank",brand:"Banco Continental","brand:wikidata":"Q4835089","brand:wikipedia":"en:BBVA Continental",name:"Banco Continental"},matchScore:2,suggestion:true},"amenity/bank/Banco Estado":{name:"Banco Estado",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q5718188"},addTags:{amenity:"bank",brand:"Banco Estado","brand:wikidata":"Q5718188","brand:wikipedia":"es:Banco del Estado de Chile",name:"Banco Estado"},removeTags:{amenity:"bank",brand:"Banco Estado","brand:wikidata":"Q5718188","brand:wikipedia":"es:Banco del Estado de Chile",name:"Banco Estado"},matchScore:2,suggestion:true},"amenity/bank/Banco Falabella":{name:"Banco Falabella",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q4854088"},addTags:{amenity:"bank",brand:"Banco Falabella","brand:wikidata":"Q4854088","brand:wikipedia":"en:Banco Falabella",name:"Banco Falabella"},removeTags:{amenity:"bank",brand:"Banco Falabella","brand:wikidata":"Q4854088","brand:wikipedia":"en:Banco Falabella",name:"Banco Falabella"},matchScore:2,suggestion:true},"amenity/bank/Banco G&T Continental":{name:"Banco G&T Continental",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q5717949"},addTags:{amenity:"bank",brand:"Banco G&T Continental","brand:wikidata":"Q5717949","brand:wikipedia":"es:Banco GYT Continental, S.A.",name:"Banco G&T Continental"},removeTags:{amenity:"bank",brand:"Banco G&T Continental","brand:wikidata":"Q5717949","brand:wikipedia":"es:Banco GYT Continental, S.A.",name:"Banco G&T Continental"},matchScore:2,suggestion:true},"amenity/bank/Banco General":{name:"Banco General",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q27618271"},addTags:{amenity:"bank",brand:"Banco General","brand:wikidata":"Q27618271","brand:wikipedia":"es:Banco General (Panamá)",name:"Banco General"},removeTags:{amenity:"bank",brand:"Banco General","brand:wikidata":"Q27618271","brand:wikipedia":"es:Banco General (Panamá)",name:"Banco General"},matchScore:2,suggestion:true},"amenity/bank/Banco Industrial":{name:"Banco Industrial",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q16489444"},addTags:{amenity:"bank",brand:"Banco Industrial","brand:wikidata":"Q16489444","brand:wikipedia":"es:Banco Industrial",name:"Banco Industrial"},removeTags:{amenity:"bank",brand:"Banco Industrial","brand:wikidata":"Q16489444","brand:wikipedia":"es:Banco Industrial",name:"Banco Industrial"},matchScore:2,suggestion:true},"amenity/bank/Banco Nacional":{name:"Banco Nacional",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q4854104"},addTags:{amenity:"bank",brand:"Banco Nacional","brand:wikidata":"Q4854104","brand:wikipedia":"en:Banco Nacional",name:"Banco Nacional"},removeTags:{amenity:"bank",brand:"Banco Nacional","brand:wikidata":"Q4854104","brand:wikipedia":"en:Banco Nacional",name:"Banco Nacional"},matchScore:2,suggestion:true},"amenity/bank/Banco Nación":{name:"Banco Nación",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q2883376"},addTags:{amenity:"bank",brand:"Banco Nación","brand:wikidata":"Q2883376","brand:wikipedia":"en:Banco de la Nación Argentina",name:"Banco Nación"},removeTags:{amenity:"bank",brand:"Banco Nación","brand:wikidata":"Q2883376","brand:wikipedia":"en:Banco de la Nación Argentina",name:"Banco Nación"},matchScore:2,suggestion:true},"amenity/bank/Banco Pastor":{name:"Banco Pastor",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q806193"},addTags:{amenity:"bank",brand:"Banco Pastor","brand:wikidata":"Q806193","brand:wikipedia":"en:Banco Pastor",name:"Banco Pastor"},removeTags:{amenity:"bank",brand:"Banco Pastor","brand:wikidata":"Q806193","brand:wikipedia":"en:Banco Pastor",name:"Banco Pastor"},matchScore:2,suggestion:true},"amenity/bank/Banco Pichincha":{name:"Banco Pichincha",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q4854135"},addTags:{amenity:"bank",brand:"Banco Pichincha","brand:wikidata":"Q4854135","brand:wikipedia":"en:Banco Pichincha",name:"Banco Pichincha"},removeTags:{amenity:"bank",brand:"Banco Pichincha","brand:wikidata":"Q4854135","brand:wikipedia":"en:Banco Pichincha",name:"Banco Pichincha"},matchScore:2,suggestion:true},"amenity/bank/Banco Popular":{name:"Banco Popular",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q537259"},addTags:{amenity:"bank",brand:"Banco Popular","brand:wikidata":"Q537259","brand:wikipedia":"es:Banco Popular Español",name:"Banco Popular"},removeTags:{amenity:"bank",brand:"Banco Popular","brand:wikidata":"Q537259","brand:wikipedia":"es:Banco Popular Español",name:"Banco Popular"},matchScore:2,suggestion:true},"amenity/bank/Banco Provincia":{name:"Banco Provincia",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q4856209"},addTags:{amenity:"bank",brand:"Banco Provincia","brand:wikidata":"Q4856209","brand:wikipedia":"es:Banco de la Provincia de Buenos Aires",name:"Banco Provincia"},removeTags:{amenity:"bank",brand:"Banco Provincia","brand:wikidata":"Q4856209","brand:wikipedia":"es:Banco de la Provincia de Buenos Aires",name:"Banco Provincia"},matchScore:2,suggestion:true},"amenity/bank/Banco Sabadell":{name:"Banco Sabadell",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q762330"},addTags:{amenity:"bank",brand:"Banco Sabadell","brand:wikidata":"Q762330","brand:wikipedia":"es:Banco Sabadell",name:"Banco Sabadell"},removeTags:{amenity:"bank",brand:"Banco Sabadell","brand:wikidata":"Q762330","brand:wikipedia":"es:Banco Sabadell",name:"Banco Sabadell"},matchScore:2,suggestion:true},"amenity/bank/Banco Santa Fe":{name:"Banco Santa Fe",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q6046871"},addTags:{amenity:"bank",brand:"Banco Santa Fe","brand:wikidata":"Q6046871","brand:wikipedia":"es:Nuevo Banco de Santa Fe",name:"Banco Santa Fe"},removeTags:{amenity:"bank",brand:"Banco Santa Fe","brand:wikidata":"Q6046871","brand:wikipedia":"es:Nuevo Banco de Santa Fe",name:"Banco Santa Fe"},matchScore:2,suggestion:true},"amenity/bank/Banco Santander":{name:"Banco Santander",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q6496310"},addTags:{amenity:"bank",brand:"Banco Santander","brand:wikidata":"Q6496310","brand:wikipedia":"es:Banco Santander",name:"Banco Santander"},removeTags:{amenity:"bank",brand:"Banco Santander","brand:wikidata":"Q6496310","brand:wikipedia":"es:Banco Santander",name:"Banco Santander"},matchScore:2,suggestion:true},"amenity/bank/Banco de Bogotá":{name:"Banco de Bogotá",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q4854122"},addTags:{amenity:"bank",brand:"Banco de Bogotá","brand:wikidata":"Q4854122","brand:wikipedia":"es:Banco de Bogotá",name:"Banco de Bogotá"},removeTags:{amenity:"bank",brand:"Banco de Bogotá","brand:wikidata":"Q4854122","brand:wikipedia":"es:Banco de Bogotá",name:"Banco de Bogotá"},matchScore:2,suggestion:true},"amenity/bank/Banco de Chile":{name:"Banco de Chile",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q2882085"},addTags:{amenity:"bank",brand:"Banco de Chile","brand:wikidata":"Q2882085","brand:wikipedia":"es:Banco de Chile",name:"Banco de Chile"},removeTags:{amenity:"bank",brand:"Banco de Chile","brand:wikidata":"Q2882085","brand:wikipedia":"es:Banco de Chile",name:"Banco de Chile"},matchScore:2,suggestion:true},"amenity/bank/Banco de Desarrollo Banrural":{name:"Banco de Desarrollo Banrural",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q5719130"},addTags:{amenity:"bank",brand:"Banco de Desarrollo Banrural","brand:wikidata":"Q5719130","brand:wikipedia":"es:Banrural",name:"Banco de Desarrollo Banrural"},removeTags:{amenity:"bank",brand:"Banco de Desarrollo Banrural","brand:wikidata":"Q5719130","brand:wikipedia":"es:Banrural",name:"Banco de Desarrollo Banrural"},matchScore:2,suggestion:true},"amenity/bank/Banco de Occidente":{name:"Banco de Occidente",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q4854127"},addTags:{amenity:"bank",brand:"Banco de Occidente","brand:wikidata":"Q4854127","brand:wikipedia":"es:Banco de Occidente (Colombia)",name:"Banco de Occidente"},removeTags:{amenity:"bank",brand:"Banco de Occidente","brand:wikidata":"Q4854127","brand:wikipedia":"es:Banco de Occidente (Colombia)",name:"Banco de Occidente"},matchScore:2,suggestion:true},"amenity/bank/Banco de Venezuela":{name:"Banco de Venezuela",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q517093"},addTags:{amenity:"bank",brand:"Banco de Venezuela","brand:wikidata":"Q517093","brand:wikipedia":"es:Banco de Venezuela",name:"Banco de Venezuela"},removeTags:{amenity:"bank",brand:"Banco de Venezuela","brand:wikidata":"Q517093","brand:wikipedia":"es:Banco de Venezuela",name:"Banco de Venezuela"},matchScore:2,suggestion:true},"amenity/bank/Banco de la Nación":{name:"Banco de la Nación",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q2883376"},addTags:{amenity:"bank",brand:"Banco de la Nación","brand:wikidata":"Q2883376","brand:wikipedia":"en:Banco de la Nación Argentina",name:"Banco de la Nación"},removeTags:{amenity:"bank",brand:"Banco de la Nación","brand:wikidata":"Q2883376","brand:wikipedia":"en:Banco de la Nación Argentina",name:"Banco de la Nación"},matchScore:2,suggestion:true},"amenity/bank/Banco di Napoli":{name:"Banco di Napoli",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q3633835"},addTags:{amenity:"bank",brand:"Banco di Napoli","brand:wikidata":"Q3633835","brand:wikipedia":"en:Banco di Napoli",name:"Banco di Napoli"},removeTags:{amenity:"bank",brand:"Banco di Napoli","brand:wikidata":"Q3633835","brand:wikipedia":"en:Banco di Napoli",name:"Banco di Napoli"},matchScore:2,suggestion:true},"amenity/bank/Banco di Sardegna":{name:"Banco di Sardegna",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q806205"},addTags:{amenity:"bank",brand:"Banco di Sardegna","brand:wikidata":"Q806205","brand:wikipedia":"en:Banco di Sardegna",name:"Banco di Sardegna"},removeTags:{amenity:"bank",brand:"Banco di Sardegna","brand:wikidata":"Q806205","brand:wikipedia":"en:Banco di Sardegna",name:"Banco di Sardegna"},matchScore:2,suggestion:true},"amenity/bank/Banco do Brasil":{name:"Banco do Brasil",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q610817"},addTags:{amenity:"bank",brand:"Banco do Brasil","brand:wikidata":"Q610817","brand:wikipedia":"en:Banco do Brasil",name:"Banco do Brasil"},removeTags:{amenity:"bank",brand:"Banco do Brasil","brand:wikidata":"Q610817","brand:wikipedia":"en:Banco do Brasil",name:"Banco do Brasil"},matchScore:2,suggestion:true},"amenity/bank/Banco do Nordeste":{name:"Banco do Nordeste",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q4854137"},addTags:{amenity:"bank",brand:"Banco do Nordeste","brand:wikidata":"Q4854137","brand:wikipedia":"en:Banco do Nordeste",name:"Banco do Nordeste"},removeTags:{amenity:"bank",brand:"Banco do Nordeste","brand:wikidata":"Q4854137","brand:wikipedia":"en:Banco do Nordeste",name:"Banco do Nordeste"},matchScore:2,suggestion:true},"amenity/bank/Bancolombia":{name:"Bancolombia",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q806206"},addTags:{amenity:"bank",brand:"Bancolombia","brand:wikidata":"Q806206","brand:wikipedia":"en:Bancolombia",name:"Bancolombia"},removeTags:{amenity:"bank",brand:"Bancolombia","brand:wikidata":"Q806206","brand:wikipedia":"en:Bancolombia",name:"Bancolombia"},matchScore:2,suggestion:true},"amenity/bank/Bancomer":{name:"Bancomer",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q2876794"},addTags:{amenity:"bank",brand:"Bancomer","brand:wikidata":"Q2876794","brand:wikipedia":"en:BBVA Bancomer",name:"Bancomer"},removeTags:{amenity:"bank",brand:"Bancomer","brand:wikidata":"Q2876794","brand:wikipedia":"en:BBVA Bancomer",name:"Bancomer"},matchScore:2,suggestion:true},"amenity/bank/Bancpost":{name:"Bancpost",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q4854143"},addTags:{amenity:"bank",brand:"Bancpost","brand:wikidata":"Q4854143","brand:wikipedia":"ro:Bancpost",name:"Bancpost"},removeTags:{amenity:"bank",brand:"Bancpost","brand:wikidata":"Q4854143","brand:wikipedia":"ro:Bancpost",name:"Bancpost"},matchScore:2,suggestion:true},"amenity/bank/Banesco":{name:"Banesco",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q4854841"},addTags:{amenity:"bank",brand:"Banesco","brand:wikidata":"Q4854841","brand:wikipedia":"en:Banesco",name:"Banesco"},removeTags:{amenity:"bank",brand:"Banesco","brand:wikidata":"Q4854841","brand:wikipedia":"en:Banesco",name:"Banesco"},matchScore:2,suggestion:true},"amenity/bank/Bangkok Bank":{name:"Bangkok Bank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q806483"},addTags:{amenity:"bank",brand:"Bangkok Bank","brand:wikidata":"Q806483","brand:wikipedia":"en:Bangkok Bank",name:"Bangkok Bank"},removeTags:{amenity:"bank",brand:"Bangkok Bank","brand:wikidata":"Q806483","brand:wikipedia":"en:Bangkok Bank",name:"Bangkok Bank"},matchScore:2,suggestion:true},"amenity/bank/Bank Al Habib":{name:"Bank Al Habib",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q4034833"},addTags:{amenity:"bank",brand:"Bank Al Habib","brand:wikidata":"Q4034833","brand:wikipedia":"ur:بينک الحبيب لمیٹڈ",name:"Bank Al Habib"},removeTags:{amenity:"bank",brand:"Bank Al Habib","brand:wikidata":"Q4034833","brand:wikipedia":"ur:بينک الحبيب لمیٹڈ",name:"Bank Al Habib"},matchScore:2,suggestion:true},"amenity/bank/Bank Alfalah":{name:"Bank Alfalah",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q4855895"},addTags:{amenity:"bank",brand:"Bank Alfalah","brand:wikidata":"Q4855895","brand:wikipedia":"en:Bank Alfalah",name:"Bank Alfalah"},removeTags:{amenity:"bank",brand:"Bank Alfalah","brand:wikidata":"Q4855895","brand:wikipedia":"en:Bank Alfalah",name:"Bank Alfalah"},matchScore:2,suggestion:true},"amenity/bank/Bank Austria":{name:"Bank Austria",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q697619"},addTags:{amenity:"bank",brand:"Bank Austria","brand:wikidata":"Q697619","brand:wikipedia":"en:Bank Austria",name:"Bank Austria"},removeTags:{amenity:"bank",brand:"Bank Austria","brand:wikidata":"Q697619","brand:wikipedia":"en:Bank Austria",name:"Bank Austria"},matchScore:2,suggestion:true},"amenity/bank/Bank Danamon":{name:"Bank Danamon",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q4855913"},addTags:{amenity:"bank",brand:"Bank Danamon","brand:wikidata":"Q4855913","brand:wikipedia":"en:Bank Danamon",name:"Bank Danamon"},removeTags:{amenity:"bank",brand:"Bank Danamon","brand:wikidata":"Q4855913","brand:wikipedia":"en:Bank Danamon",name:"Bank Danamon"},matchScore:2,suggestion:true},"amenity/bank/Bank Mandiri":{name:"Bank Mandiri",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q806639"},addTags:{amenity:"bank",brand:"Bank Mandiri","brand:wikidata":"Q806639","brand:wikipedia":"en:Bank Mandiri",name:"Bank Mandiri"},removeTags:{amenity:"bank",brand:"Bank Mandiri","brand:wikidata":"Q806639","brand:wikipedia":"en:Bank Mandiri",name:"Bank Mandiri"},matchScore:2,suggestion:true},"amenity/bank/Bank Mandiri Syariah":{name:"Bank Mandiri Syariah",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q12474533"},addTags:{amenity:"bank",brand:"Bank Mandiri Syariah","brand:wikidata":"Q12474533","brand:wikipedia":"id:Bank Syariah Mandiri",name:"Bank Mandiri Syariah"},removeTags:{amenity:"bank",brand:"Bank Mandiri Syariah","brand:wikidata":"Q12474533","brand:wikipedia":"id:Bank Syariah Mandiri",name:"Bank Mandiri Syariah"},matchScore:2,suggestion:true},"amenity/bank/Bank Mega":{name:"Bank Mega",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q12474504"},addTags:{amenity:"bank",brand:"Bank Mega","brand:wikidata":"Q12474504","brand:wikipedia":"id:Bank Mega",name:"Bank Mega"},removeTags:{amenity:"bank",brand:"Bank Mega","brand:wikidata":"Q12474504","brand:wikipedia":"id:Bank Mega",name:"Bank Mega"},matchScore:2,suggestion:true},"amenity/bank/Bank Muamalat":{name:"Bank Muamalat",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q4855949"},addTags:{amenity:"bank",brand:"Bank Muamalat","brand:wikidata":"Q4855949","brand:wikipedia":"en:Bank Muamalat",name:"Bank Muamalat"},removeTags:{amenity:"bank",brand:"Bank Muamalat","brand:wikidata":"Q4855949","brand:wikipedia":"en:Bank Muamalat",name:"Bank Muamalat"},matchScore:2,suggestion:true},"amenity/bank/Bank Pekao":{name:"Bank Pekao",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q806642"},addTags:{amenity:"bank",brand:"Bank Pekao","brand:wikidata":"Q806642","brand:wikipedia":"en:Bank Pekao",name:"Bank Pekao"},removeTags:{amenity:"bank",brand:"Bank Pekao","brand:wikidata":"Q806642","brand:wikipedia":"en:Bank Pekao",name:"Bank Pekao"},matchScore:2,suggestion:true},"amenity/bank/Bank Rakyat":{name:"Bank Rakyat",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q4855964"},addTags:{amenity:"bank",brand:"Bank Rakyat","brand:wikidata":"Q4855964","brand:wikipedia":"ms:Bank Rakyat",name:"Bank Rakyat"},removeTags:{amenity:"bank",brand:"Bank Rakyat","brand:wikidata":"Q4855964","brand:wikipedia":"ms:Bank Rakyat",name:"Bank Rakyat"},matchScore:2,suggestion:true},"amenity/bank/Bank of Africa":{name:"Bank of Africa",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q2882627"},addTags:{amenity:"bank",brand:"Bank of Africa","brand:wikidata":"Q2882627","brand:wikipedia":"en:Bank of Africa Group",name:"Bank of Africa",short_name:"BOA"},removeTags:{amenity:"bank",brand:"Bank of Africa","brand:wikidata":"Q2882627","brand:wikipedia":"en:Bank of Africa Group",name:"Bank of Africa",short_name:"BOA"},matchScore:2,suggestion:true},"amenity/bank/Bank of America":{name:"Bank of America",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q487907"},addTags:{amenity:"bank",brand:"Bank of America","brand:wikidata":"Q487907","brand:wikipedia":"en:Bank of America",name:"Bank of America"},removeTags:{amenity:"bank",brand:"Bank of America","brand:wikidata":"Q487907","brand:wikipedia":"en:Bank of America",name:"Bank of America"},matchScore:2,suggestion:true},"amenity/bank/Bank of Baroda":{name:"Bank of Baroda",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q2003797"},addTags:{amenity:"bank",brand:"Bank of Baroda","brand:wikidata":"Q2003797","brand:wikipedia":"en:Bank of Baroda",name:"Bank of Baroda"},removeTags:{amenity:"bank",brand:"Bank of Baroda","brand:wikidata":"Q2003797","brand:wikipedia":"en:Bank of Baroda",name:"Bank of Baroda"},matchScore:2,suggestion:true},"amenity/bank/Bank of Ceylon":{name:"Bank of Ceylon",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q2882652"},addTags:{amenity:"bank",brand:"Bank of Ceylon","brand:wikidata":"Q2882652","brand:wikipedia":"en:Bank of Ceylon",name:"Bank of Ceylon"},removeTags:{amenity:"bank",brand:"Bank of Ceylon","brand:wikidata":"Q2882652","brand:wikipedia":"en:Bank of Ceylon",name:"Bank of Ceylon"},matchScore:2,suggestion:true},"amenity/bank/Bank of China":{name:"Bank of China",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q790068"},addTags:{amenity:"bank",brand:"Bank of China","brand:wikidata":"Q790068","brand:wikipedia":"en:Bank of China",name:"Bank of China"},removeTags:{amenity:"bank",brand:"Bank of China","brand:wikidata":"Q790068","brand:wikipedia":"en:Bank of China",name:"Bank of China"},matchScore:2,suggestion:true},"amenity/bank/Bank of Commerce":{name:"Bank of Commerce",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q4856092"},addTags:{amenity:"bank",brand:"Bank of Commerce","brand:wikidata":"Q4856092","brand:wikipedia":"en:Bank of Commerce",name:"Bank of Commerce"},removeTags:{amenity:"bank",brand:"Bank of Commerce","brand:wikidata":"Q4856092","brand:wikipedia":"en:Bank of Commerce",name:"Bank of Commerce"},matchScore:2,suggestion:true},"amenity/bank/Bank of Cyprus":{name:"Bank of Cyprus",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q806678"},addTags:{amenity:"bank",brand:"Bank of Cyprus","brand:wikidata":"Q806678","brand:wikipedia":"en:Bank of Cyprus",name:"Bank of Cyprus"},removeTags:{amenity:"bank",brand:"Bank of Cyprus","brand:wikidata":"Q806678","brand:wikipedia":"en:Bank of Cyprus",name:"Bank of Cyprus"},matchScore:2,suggestion:true},"amenity/bank/Bank of India":{name:"Bank of India",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q2004439"},addTags:{amenity:"bank",brand:"Bank of India","brand:wikidata":"Q2004439","brand:wikipedia":"en:Bank of India",name:"Bank of India"},removeTags:{amenity:"bank",brand:"Bank of India","brand:wikidata":"Q2004439","brand:wikipedia":"en:Bank of India",name:"Bank of India"},matchScore:2,suggestion:true},"amenity/bank/Bank of Ireland":{name:"Bank of Ireland",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q806689"},addTags:{amenity:"bank",brand:"Bank of Ireland","brand:wikidata":"Q806689","brand:wikipedia":"en:Bank of Ireland",name:"Bank of Ireland"},removeTags:{amenity:"bank",brand:"Bank of Ireland","brand:wikidata":"Q806689","brand:wikipedia":"en:Bank of Ireland",name:"Bank of Ireland"},matchScore:2,suggestion:true},"amenity/bank/Bank of Maharashtra":{name:"Bank of Maharashtra",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q2004304"},addTags:{amenity:"bank",brand:"Bank of Maharashtra","brand:wikidata":"Q2004304","brand:wikipedia":"en:Bank of Maharashtra",name:"Bank of Maharashtra"},removeTags:{amenity:"bank",brand:"Bank of Maharashtra","brand:wikidata":"Q2004304","brand:wikipedia":"en:Bank of Maharashtra",name:"Bank of Maharashtra"},matchScore:2,suggestion:true},"amenity/bank/Bank of Montreal":{name:"Bank of Montreal",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q806693"},addTags:{amenity:"bank",brand:"Bank of Montreal","brand:wikidata":"Q806693","brand:wikipedia":"en:Bank of Montreal",name:"Bank of Montreal"},removeTags:{amenity:"bank",brand:"Bank of Montreal","brand:wikidata":"Q806693","brand:wikipedia":"en:Bank of Montreal",name:"Bank of Montreal"},matchScore:2,suggestion:true},"amenity/bank/Bank of New Zealand":{name:"Bank of New Zealand",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q806687"},addTags:{amenity:"bank",brand:"Bank of New Zealand","brand:wikidata":"Q806687","brand:wikipedia":"en:Bank of New Zealand",name:"Bank of New Zealand"},removeTags:{amenity:"bank",brand:"Bank of New Zealand","brand:wikidata":"Q806687","brand:wikipedia":"en:Bank of New Zealand",name:"Bank of New Zealand"},matchScore:2,suggestion:true},"amenity/bank/Bank of Scotland":{name:"Bank of Scotland",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q627381"},addTags:{amenity:"bank",brand:"Bank of Scotland","brand:wikidata":"Q627381","brand:wikipedia":"en:Bank of Scotland",name:"Bank of Scotland"},removeTags:{amenity:"bank",brand:"Bank of Scotland","brand:wikidata":"Q627381","brand:wikipedia":"en:Bank of Scotland",name:"Bank of Scotland"},matchScore:2,suggestion:true},"amenity/bank/Bank of the West":{name:"Bank of the West",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q2881919"},addTags:{amenity:"bank",brand:"Bank of the West","brand:wikidata":"Q2881919","brand:wikipedia":"en:Bank of the West",name:"Bank of the West"},removeTags:{amenity:"bank",brand:"Bank of the West","brand:wikidata":"Q2881919","brand:wikipedia":"en:Bank of the West",name:"Bank of the West"},matchScore:2,suggestion:true},"amenity/bank/Bankia":{name:"Bankia",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q806807"},addTags:{amenity:"bank",brand:"Bankia","brand:wikidata":"Q806807","brand:wikipedia":"en:Bankia",name:"Bankia"},removeTags:{amenity:"bank",brand:"Bankia","brand:wikidata":"Q806807","brand:wikipedia":"en:Bankia",name:"Bankia"},matchScore:2,suggestion:true},"amenity/bank/Bankinter":{name:"Bankinter",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q806808"},addTags:{amenity:"bank",brand:"Bankinter","brand:wikidata":"Q806808","brand:wikipedia":"es:Bankinter",name:"Bankinter"},removeTags:{amenity:"bank",brand:"Bankinter","brand:wikidata":"Q806808","brand:wikipedia":"es:Bankinter",name:"Bankinter"},matchScore:2,suggestion:true},"amenity/bank/Banner Bank":{name:"Banner Bank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q4856910"},addTags:{amenity:"bank",brand:"Banner Bank","brand:wikidata":"Q4856910","brand:wikipedia":"en:Banner Bank",name:"Banner Bank"},removeTags:{amenity:"bank",brand:"Banner Bank","brand:wikidata":"Q4856910","brand:wikipedia":"en:Banner Bank",name:"Banner Bank"},matchScore:2,suggestion:true},"amenity/bank/Banorte":{name:"Banorte",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q806914"},addTags:{amenity:"bank",brand:"Banorte","brand:wikidata":"Q806914","brand:wikipedia":"en:Banorte",name:"Banorte"},removeTags:{amenity:"bank",brand:"Banorte","brand:wikidata":"Q806914","brand:wikipedia":"en:Banorte",name:"Banorte"},matchScore:2,suggestion:true},"amenity/bank/Banque Atlantique":{name:"Banque Atlantique",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q2882890"},addTags:{amenity:"bank",brand:"Banque Atlantique","brand:wikidata":"Q2882890","brand:wikipedia":"en:Atlantic Bank Group",name:"Banque Atlantique"},removeTags:{amenity:"bank",brand:"Banque Atlantique","brand:wikidata":"Q2882890","brand:wikipedia":"en:Atlantic Bank Group",name:"Banque Atlantique"},matchScore:2,suggestion:true},"amenity/bank/Banque Laurentienne":{name:"Banque Laurentienne",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q1360087"},addTags:{amenity:"bank",brand:"Banque Laurentienne","brand:wikidata":"Q1360087","brand:wikipedia":"en:Laurentian Bank of Canada",name:"Banque Laurentienne"},removeTags:{amenity:"bank",brand:"Banque Laurentienne","brand:wikidata":"Q1360087","brand:wikipedia":"en:Laurentian Bank of Canada",name:"Banque Laurentienne"},matchScore:2,suggestion:true},"amenity/bank/Banque Populaire":{name:"Banque Populaire",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q2883441"},addTags:{amenity:"bank",brand:"Banque Populaire","brand:wikidata":"Q2883441","brand:wikipedia":"en:Banque Populaire du Maroc",name:"Banque Populaire"},removeTags:{amenity:"bank",brand:"Banque Populaire","brand:wikidata":"Q2883441","brand:wikipedia":"en:Banque Populaire du Maroc",name:"Banque Populaire"},matchScore:2,suggestion:true},"amenity/bank/Banrisul":{name:"Banrisul",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q4857098"},addTags:{amenity:"bank",brand:"Banrisul","brand:wikidata":"Q4857098","brand:wikipedia":"en:Banrisul",name:"Banrisul"},removeTags:{amenity:"bank",brand:"Banrisul","brand:wikidata":"Q4857098","brand:wikipedia":"en:Banrisul",name:"Banrisul"},matchScore:2,suggestion:true},"amenity/bank/Barclays":{name:"Barclays",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q245343"},addTags:{amenity:"bank",brand:"Barclays","brand:wikidata":"Q245343","brand:wikipedia":"en:Barclays",name:"Barclays"},removeTags:{amenity:"bank",brand:"Barclays","brand:wikidata":"Q245343","brand:wikipedia":"en:Barclays",name:"Barclays"},matchScore:2,suggestion:true},"amenity/bank/Belfius":{name:"Belfius",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q1956014"},addTags:{amenity:"bank",brand:"Belfius","brand:wikidata":"Q1956014","brand:wikipedia":"en:Belfius",name:"Belfius"},removeTags:{amenity:"bank",brand:"Belfius","brand:wikidata":"Q1956014","brand:wikipedia":"en:Belfius",name:"Belfius"},matchScore:2,suggestion:true},"amenity/bank/Bendigo Bank":{name:"Bendigo Bank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q4887077"},addTags:{amenity:"bank",brand:"Bendigo Bank","brand:wikidata":"Q4887077","brand:wikipedia":"en:Bendigo and Adelaide Bank",name:"Bendigo Bank"},removeTags:{amenity:"bank",brand:"Bendigo Bank","brand:wikidata":"Q4887077","brand:wikipedia":"en:Bendigo and Adelaide Bank",name:"Bendigo Bank"},matchScore:2,suggestion:true},"amenity/bank/Berliner Volksbank":{name:"Berliner Volksbank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q821855"},addTags:{amenity:"bank",brand:"Berliner Volksbank","brand:wikidata":"Q821855","brand:wikipedia":"de:Berliner Volksbank",name:"Berliner Volksbank"},removeTags:{amenity:"bank",brand:"Berliner Volksbank","brand:wikidata":"Q821855","brand:wikipedia":"de:Berliner Volksbank",name:"Berliner Volksbank"},matchScore:2,suggestion:true},"amenity/bank/Bicentenario":{name:"Bicentenario",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q5728123"},addTags:{amenity:"bank",brand:"Bicentenario","brand:wikidata":"Q5728123","brand:wikipedia":"es:Bicentenario Banco Universal",name:"Bicentenario"},removeTags:{amenity:"bank",brand:"Bicentenario","brand:wikidata":"Q5728123","brand:wikipedia":"es:Bicentenario Banco Universal",name:"Bicentenario"},matchScore:2,suggestion:true},"amenity/bank/Bicici":{name:"Bicici",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q1667302"},addTags:{amenity:"bank",brand:"Bicici","brand:wikidata":"Q1667302","brand:wikipedia":"fr:Banque internationale pour le commerce et l'industrie de la Côte d'Ivoire",name:"Bicici"},removeTags:{amenity:"bank",brand:"Bicici","brand:wikidata":"Q1667302","brand:wikipedia":"fr:Banque internationale pour le commerce et l'industrie de la Côte d'Ivoire",name:"Bicici"},matchScore:2,suggestion:true},"amenity/bank/Bradesco":{name:"Bradesco",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q806181"},addTags:{amenity:"bank",brand:"Bradesco","brand:wikidata":"Q806181","brand:wikipedia":"en:Banco Bradesco",name:"Bradesco"},removeTags:{amenity:"bank",brand:"Bradesco","brand:wikidata":"Q806181","brand:wikipedia":"en:Banco Bradesco",name:"Bradesco"},matchScore:2,suggestion:true},"amenity/bank/Budapest Bank":{name:"Budapest Bank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q27493463"},addTags:{amenity:"bank",brand:"Budapest Bank","brand:wikidata":"Q27493463","brand:wikipedia":"en:Budapest Bank",name:"Budapest Bank"},removeTags:{amenity:"bank",brand:"Budapest Bank","brand:wikidata":"Q27493463","brand:wikipedia":"en:Budapest Bank",name:"Budapest Bank"},matchScore:2,suggestion:true},"amenity/bank/CBAO":{name:"CBAO",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q532104"},addTags:{amenity:"bank",brand:"CBAO","brand:wikidata":"Q532104","brand:wikipedia":"fr:CBAO Groupe Attijariwafa bank",name:"CBAO"},removeTags:{amenity:"bank",brand:"CBAO","brand:wikidata":"Q532104","brand:wikipedia":"fr:CBAO Groupe Attijariwafa bank",name:"CBAO"},matchScore:2,suggestion:true},"amenity/bank/CEC Bank":{name:"CEC Bank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q1023306"},addTags:{amenity:"bank",brand:"CEC Bank","brand:wikidata":"Q1023306","brand:wikipedia":"en:CEC Bank",name:"CEC Bank"},removeTags:{amenity:"bank",brand:"CEC Bank","brand:wikidata":"Q1023306","brand:wikipedia":"en:CEC Bank",name:"CEC Bank"},matchScore:2,suggestion:true},"amenity/bank/CIB Bank":{name:"CIB Bank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q839566"},addTags:{amenity:"bank",brand:"CIB Bank","brand:wikidata":"Q839566","brand:wikipedia":"en:CIB Bank",name:"CIB Bank"},removeTags:{amenity:"bank",brand:"CIB Bank","brand:wikidata":"Q839566","brand:wikipedia":"en:CIB Bank",name:"CIB Bank"},matchScore:2,suggestion:true},"amenity/bank/CIBC":{name:"CIBC",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q666694"},addTags:{amenity:"bank",brand:"CIBC","brand:wikidata":"Q666694","brand:wikipedia":"en:Canadian Imperial Bank of Commerce",name:"CIBC"},removeTags:{amenity:"bank",brand:"CIBC","brand:wikidata":"Q666694","brand:wikipedia":"en:Canadian Imperial Bank of Commerce",name:"CIBC"},matchScore:2,suggestion:true},"amenity/bank/CIC":{name:"CIC",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q746525"},addTags:{amenity:"bank",brand:"CIC","brand:wikidata":"Q746525","brand:wikipedia":"en:Crédit Industriel et Commercial",name:"CIC"},removeTags:{amenity:"bank",brand:"CIC","brand:wikidata":"Q746525","brand:wikipedia":"en:Crédit Industriel et Commercial",name:"CIC"},matchScore:2,suggestion:true},"amenity/bank/CIH Bank":{name:"CIH Bank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q3006220"},addTags:{amenity:"bank",brand:"CIH Bank","brand:wikidata":"Q3006220","brand:wikipedia":"en:CIH Bank",name:"CIH Bank"},removeTags:{amenity:"bank",brand:"CIH Bank","brand:wikidata":"Q3006220","brand:wikipedia":"en:CIH Bank",name:"CIH Bank"},matchScore:2,suggestion:true},"amenity/bank/CIMB Bank":{name:"CIMB Bank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q3045976"},addTags:{amenity:"bank",brand:"CIMB Bank","brand:wikidata":"Q3045976","brand:wikipedia":"en:CIMB",name:"CIMB Bank"},removeTags:{amenity:"bank",brand:"CIMB Bank","brand:wikidata":"Q3045976","brand:wikipedia":"en:CIMB",name:"CIMB Bank"},matchScore:2,suggestion:true},"amenity/bank/CIMB Niaga":{name:"CIMB Niaga",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q5011747"},addTags:{amenity:"bank",brand:"CIMB Niaga","brand:wikidata":"Q5011747","brand:wikipedia":"en:CIMB Niaga",name:"CIMB Niaga"},removeTags:{amenity:"bank",brand:"CIMB Niaga","brand:wikidata":"Q5011747","brand:wikipedia":"en:CIMB Niaga",name:"CIMB Niaga"},matchScore:2,suggestion:true},"amenity/bank/CNEP":{name:"CNEP",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q2931752"},addTags:{amenity:"bank",brand:"CNEP","brand:wikidata":"Q2931752","brand:wikipedia":"fr:CNEP-Banque",name:"CNEP"},removeTags:{amenity:"bank",brand:"CNEP","brand:wikidata":"Q2931752","brand:wikipedia":"fr:CNEP-Banque",name:"CNEP"},matchScore:2,suggestion:true},"amenity/bank/Caisse Desjardins":{name:"Caisse Desjardins",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q2933350"},addTags:{amenity:"bank",brand:"Caisse Desjardins","brand:wikidata":"Q2933350","brand:wikipedia":"en:Desjardins Group",name:"Caisse Desjardins"},removeTags:{amenity:"bank",brand:"Caisse Desjardins","brand:wikidata":"Q2933350","brand:wikipedia":"en:Desjardins Group",name:"Caisse Desjardins"},matchScore:2,suggestion:true},"amenity/bank/Caisse d'Épargne":{name:"Caisse d'Épargne",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q1547738"},addTags:{amenity:"bank",brand:"Caisse d'Épargne","brand:wikidata":"Q1547738","brand:wikipedia":"en:Groupe Caisse d'Épargne",name:"Caisse d'Épargne"},removeTags:{amenity:"bank",brand:"Caisse d'Épargne","brand:wikidata":"Q1547738","brand:wikipedia":"en:Groupe Caisse d'Épargne",name:"Caisse d'Épargne"},matchScore:2,suggestion:true},"amenity/bank/Caixa Econômica Federal":{name:"Caixa Econômica Federal",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q835283"},addTags:{amenity:"bank",brand:"Caixa Econômica Federal","brand:wikidata":"Q835283","brand:wikipedia":"pt:Caixa Econômica Federal",name:"Caixa Econômica Federal"},removeTags:{amenity:"bank",brand:"Caixa Econômica Federal","brand:wikidata":"Q835283","brand:wikipedia":"pt:Caixa Econômica Federal",name:"Caixa Econômica Federal"},matchScore:2,suggestion:true},"amenity/bank/Caixa Geral de Depósitos":{name:"Caixa Geral de Depósitos",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q1026044"},addTags:{amenity:"bank",brand:"Caixa Geral de Depósitos","brand:wikidata":"Q1026044","brand:wikipedia":"pt:Caixa Geral de Depósitos",name:"Caixa Geral de Depósitos"},removeTags:{amenity:"bank",brand:"Caixa Geral de Depósitos","brand:wikidata":"Q1026044","brand:wikipedia":"pt:Caixa Geral de Depósitos",name:"Caixa Geral de Depósitos"},matchScore:2,suggestion:true},"amenity/bank/Caixabank":{name:"Caixabank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q847225"},addTags:{amenity:"bank","brand:wikidata":"Q847225","brand:wikipedia":"en:CaixaBank",name:"Caixabank"},removeTags:{amenity:"bank","brand:wikidata":"Q847225","brand:wikipedia":"en:CaixaBank",name:"Caixabank"},matchScore:2,suggestion:true},"amenity/bank/Caja España":{name:"Caja España",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q966985"},addTags:{amenity:"bank",brand:"Caja España","brand:wikidata":"Q966985","brand:wikipedia":"es:Caja España",name:"Caja España"},removeTags:{amenity:"bank",brand:"Caja España","brand:wikidata":"Q966985","brand:wikipedia":"es:Caja España",name:"Caja España"},matchScore:2,suggestion:true},"amenity/bank/Caja Rural":{name:"Caja Rural",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q3649971"},addTags:{amenity:"bank",brand:"Caja Rural","brand:wikidata":"Q3649971","brand:wikipedia":"es:Caja Rural",name:"Caja Rural"},removeTags:{amenity:"bank",brand:"Caja Rural","brand:wikidata":"Q3649971","brand:wikipedia":"es:Caja Rural",name:"Caja Rural"},matchScore:2,suggestion:true},"amenity/bank/Caja Rural de Jaén":{name:"Caja Rural de Jaén",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q18720350"},addTags:{amenity:"bank",brand:"Caja Rural de Jaén","brand:wikidata":"Q18720350","brand:wikipedia":"es:Caja Rural de Jaén",name:"Caja Rural de Jaén"},removeTags:{amenity:"bank",brand:"Caja Rural de Jaén","brand:wikidata":"Q18720350","brand:wikipedia":"es:Caja Rural de Jaén",name:"Caja Rural de Jaén"},matchScore:2,suggestion:true},"amenity/bank/CajaSur":{name:"CajaSur",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q3751637"},addTags:{amenity:"bank",brand:"CajaSur","brand:wikidata":"Q3751637","brand:wikipedia":"en:CajaSur",name:"CajaSur"},removeTags:{amenity:"bank",brand:"CajaSur","brand:wikidata":"Q3751637","brand:wikipedia":"en:CajaSur",name:"CajaSur"},matchScore:2,suggestion:true},"amenity/bank/Cajamar":{name:"Cajamar",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q8254971"},addTags:{amenity:"bank",brand:"Cajamar","brand:wikidata":"Q8254971","brand:wikipedia":"es:Cajamar",name:"Cajamar"},removeTags:{amenity:"bank",brand:"Cajamar","brand:wikidata":"Q8254971","brand:wikipedia":"es:Cajamar",name:"Cajamar"},matchScore:2,suggestion:true},"amenity/bank/Canara Bank":{name:"Canara Bank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q2003777"},addTags:{amenity:"bank",brand:"Canara Bank","brand:wikidata":"Q2003777","brand:wikipedia":"en:Canara Bank",name:"Canara Bank"},removeTags:{amenity:"bank",brand:"Canara Bank","brand:wikidata":"Q2003777","brand:wikipedia":"en:Canara Bank",name:"Canara Bank"},matchScore:2,suggestion:true},"amenity/bank/Capital One":{name:"Capital One",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q1034654"},addTags:{amenity:"bank",brand:"Capital One","brand:wikidata":"Q1034654","brand:wikipedia":"en:Capital One",name:"Capital One"},removeTags:{amenity:"bank",brand:"Capital One","brand:wikidata":"Q1034654","brand:wikipedia":"en:Capital One",name:"Capital One"},matchScore:2,suggestion:true},"amenity/bank/Carige":{name:"Carige",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q3633695"},addTags:{amenity:"bank",brand:"Carige","brand:wikidata":"Q3633695","brand:wikipedia":"en:Banca Carige",name:"Carige"},removeTags:{amenity:"bank",brand:"Carige","brand:wikidata":"Q3633695","brand:wikipedia":"en:Banca Carige",name:"Carige"},matchScore:2,suggestion:true},"amenity/bank/Cariparma":{name:"Cariparma",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q2938832"},addTags:{amenity:"bank",brand:"Cariparma","brand:wikidata":"Q2938832","brand:wikipedia":"en:Crédit Agricole Italia",name:"Cariparma"},removeTags:{amenity:"bank",brand:"Cariparma","brand:wikidata":"Q2938832","brand:wikipedia":"en:Crédit Agricole Italia",name:"Cariparma"},matchScore:2,suggestion:true},"amenity/bank/Carisbo":{name:"Carisbo",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q3661937"},addTags:{amenity:"bank",brand:"Carisbo","brand:wikidata":"Q3661937","brand:wikipedia":"en:Cassa di Risparmio in Bologna",name:"Carisbo"},removeTags:{amenity:"bank",brand:"Carisbo","brand:wikidata":"Q3661937","brand:wikipedia":"en:Cassa di Risparmio in Bologna",name:"Carisbo"},matchScore:2,suggestion:true},"amenity/bank/Cassa di Risparmio del Veneto":{name:"Cassa di Risparmio del Veneto",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q3661909"},addTags:{amenity:"bank",brand:"Cassa di Risparmio del Veneto","brand:wikidata":"Q3661909","brand:wikipedia":"en:Cassa di Risparmio del Veneto",name:"Cassa di Risparmio del Veneto"},removeTags:{amenity:"bank",brand:"Cassa di Risparmio del Veneto","brand:wikidata":"Q3661909","brand:wikipedia":"en:Cassa di Risparmio del Veneto",name:"Cassa di Risparmio del Veneto"},matchScore:2,suggestion:true},"amenity/bank/CatalunyaCaixa":{name:"CatalunyaCaixa",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q3750952"},addTags:{amenity:"bank",brand:"CatalunyaCaixa","brand:wikidata":"Q3750952","brand:wikipedia":"en:CatalunyaCaixa",name:"CatalunyaCaixa"},removeTags:{amenity:"bank",brand:"CatalunyaCaixa","brand:wikidata":"Q3750952","brand:wikipedia":"en:CatalunyaCaixa",name:"CatalunyaCaixa"},matchScore:2,suggestion:true},"amenity/bank/Central Bank of India":{name:"Central Bank of India",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q2007090"},addTags:{amenity:"bank",brand:"Central Bank of India","brand:wikidata":"Q2007090","brand:wikipedia":"en:Central Bank of India",name:"Central Bank of India"},removeTags:{amenity:"bank",brand:"Central Bank of India","brand:wikidata":"Q2007090","brand:wikipedia":"en:Central Bank of India",name:"Central Bank of India"},matchScore:2,suggestion:true},"amenity/bank/Chase":{name:"Chase",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q524629"},addTags:{amenity:"bank",brand:"Chase","brand:wikidata":"Q524629","brand:wikipedia":"en:Chase Bank",name:"Chase"},removeTags:{amenity:"bank",brand:"Chase","brand:wikidata":"Q524629","brand:wikipedia":"en:Chase Bank",name:"Chase"},matchScore:2,suggestion:true},"amenity/bank/China Bank":{name:"China Bank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q5100080"},addTags:{amenity:"bank",brand:"China Bank","brand:wikidata":"Q5100080","brand:wikipedia":"en:Chinabank",name:"China Bank"},removeTags:{amenity:"bank",brand:"China Bank","brand:wikidata":"Q5100080","brand:wikipedia":"en:Chinabank",name:"China Bank"},matchScore:2,suggestion:true},"amenity/bank/China Bank Savings":{name:"China Bank Savings",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q18387359"},addTags:{amenity:"bank",brand:"China Bank Savings","brand:wikidata":"Q18387359","brand:wikipedia":"en:China Bank Savings",name:"China Bank Savings"},removeTags:{amenity:"bank",brand:"China Bank Savings","brand:wikidata":"Q18387359","brand:wikipedia":"en:China Bank Savings",name:"China Bank Savings"},matchScore:2,suggestion:true},"amenity/bank/China Construction Bank":{name:"China Construction Bank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q26299"},addTags:{amenity:"bank",brand:"China Construction Bank","brand:wikidata":"Q26299","brand:wikipedia":"en:China Construction Bank",name:"China Construction Bank"},removeTags:{amenity:"bank",brand:"China Construction Bank","brand:wikidata":"Q26299","brand:wikipedia":"en:China Construction Bank",name:"China Construction Bank"},matchScore:2,suggestion:true},"amenity/bank/Citibank":{name:"Citibank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q857063"},addTags:{amenity:"bank",brand:"Citibank","brand:wikidata":"Q857063","brand:wikipedia":"en:Citibank",name:"Citibank"},removeTags:{amenity:"bank",brand:"Citibank","brand:wikidata":"Q857063","brand:wikipedia":"en:Citibank",name:"Citibank"},matchScore:2,suggestion:true},"amenity/bank/Citizens Bank":{name:"Citizens Bank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q25209674"},addTags:{amenity:"bank",brand:"Citizens Bank","brand:wikidata":"Q25209674","brand:wikipedia":"en:Citizens Bank (South Bend, Indiana)",name:"Citizens Bank"},removeTags:{amenity:"bank",brand:"Citizens Bank","brand:wikidata":"Q25209674","brand:wikipedia":"en:Citizens Bank (South Bend, Indiana)",name:"Citizens Bank"},matchScore:2,suggestion:true},"amenity/bank/Clydesdale Bank":{name:"Clydesdale Bank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q971680"},addTags:{amenity:"bank",brand:"Clydesdale Bank","brand:wikipedia":"en:Clydesdale Bank","brand:wikidata":"Q971680",name:"Clydesdale Bank"},removeTags:{amenity:"bank",brand:"Clydesdale Bank","brand:wikipedia":"en:Clydesdale Bank","brand:wikidata":"Q971680",name:"Clydesdale Bank"},matchScore:2,suggestion:true},"amenity/bank/Comerica Bank":{name:"Comerica Bank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q1114148"},addTags:{amenity:"bank",brand:"Comerica Bank","brand:wikidata":"Q1114148","brand:wikipedia":"en:Comerica",name:"Comerica Bank"},removeTags:{amenity:"bank",brand:"Comerica Bank","brand:wikidata":"Q1114148","brand:wikipedia":"en:Comerica",name:"Comerica Bank"},matchScore:2,suggestion:true},"amenity/bank/Commercial Bank of Ceylon PLC":{name:"Commercial Bank of Ceylon PLC",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q5152468"},addTags:{amenity:"bank",brand:"Commercial Bank of Ceylon PLC","brand:wikidata":"Q5152468","brand:wikipedia":"en:Commercial Bank of Ceylon",name:"Commercial Bank of Ceylon PLC"},removeTags:{amenity:"bank",brand:"Commercial Bank of Ceylon PLC","brand:wikidata":"Q5152468","brand:wikipedia":"en:Commercial Bank of Ceylon",name:"Commercial Bank of Ceylon PLC"},matchScore:2,suggestion:true},"amenity/bank/Commerzbank":{name:"Commerzbank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q157617"},addTags:{amenity:"bank",brand:"Commerzbank","brand:wikidata":"Q157617","brand:wikipedia":"en:Commerzbank",name:"Commerzbank"},removeTags:{amenity:"bank",brand:"Commerzbank","brand:wikidata":"Q157617","brand:wikipedia":"en:Commerzbank",name:"Commerzbank"},matchScore:2,suggestion:true},"amenity/bank/Commonwealth Bank":{name:"Commonwealth Bank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q285328"},addTags:{amenity:"bank",brand:"Commonwealth Bank","brand:wikidata":"Q285328","brand:wikipedia":"en:Commonwealth Bank",name:"Commonwealth Bank"},removeTags:{amenity:"bank",brand:"Commonwealth Bank","brand:wikidata":"Q285328","brand:wikipedia":"en:Commonwealth Bank",name:"Commonwealth Bank"},matchScore:2,suggestion:true},"amenity/bank/Corporation Bank":{name:"Corporation Bank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q2003387"},addTags:{amenity:"bank",brand:"Corporation Bank","brand:wikidata":"Q2003387","brand:wikipedia":"en:Corporation Bank",name:"Corporation Bank"},removeTags:{amenity:"bank",brand:"Corporation Bank","brand:wikidata":"Q2003387","brand:wikipedia":"en:Corporation Bank",name:"Corporation Bank"},matchScore:2,suggestion:true},"amenity/bank/Credem":{name:"Credem",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q3696881"},addTags:{amenity:"bank",brand:"Credem","brand:wikidata":"Q3696881","brand:wikipedia":"en:Credito Emiliano",name:"Credem"},removeTags:{amenity:"bank",brand:"Credem","brand:wikidata":"Q3696881","brand:wikipedia":"en:Credito Emiliano",name:"Credem"},matchScore:2,suggestion:true},"amenity/bank/Credicoop":{name:"Credicoop",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q4854086"},addTags:{amenity:"bank",brand:"Credicoop","brand:wikidata":"Q4854086","brand:wikipedia":"en:Banco Credicoop",name:"Credicoop"},removeTags:{amenity:"bank",brand:"Credicoop","brand:wikidata":"Q4854086","brand:wikipedia":"en:Banco Credicoop",name:"Credicoop"},matchScore:2,suggestion:true},"amenity/bank/Credit Suisse":{name:"Credit Suisse",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q372657"},addTags:{amenity:"bank",brand:"Credit Suisse","brand:wikidata":"Q372657","brand:wikipedia":"en:Credit Suisse",name:"Credit Suisse"},removeTags:{amenity:"bank",brand:"Credit Suisse","brand:wikidata":"Q372657","brand:wikipedia":"en:Credit Suisse",name:"Credit Suisse"},matchScore:2,suggestion:true},"amenity/bank/Credito Valtellinese":{name:"Credito Valtellinese",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q3696888"},addTags:{amenity:"bank",brand:"Credito Valtellinese","brand:wikidata":"Q3696888","brand:wikipedia":"en:Credito Valtellinese",name:"Credito Valtellinese"},removeTags:{amenity:"bank",brand:"Credito Valtellinese","brand:wikidata":"Q3696888","brand:wikipedia":"en:Credito Valtellinese",name:"Credito Valtellinese"},matchScore:2,suggestion:true},"amenity/bank/Crelan":{name:"Crelan",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q389872"},addTags:{amenity:"bank",brand:"Crelan","brand:wikidata":"Q389872","brand:wikipedia":"en:Crelan",name:"Crelan"},removeTags:{amenity:"bank",brand:"Crelan","brand:wikidata":"Q389872","brand:wikipedia":"en:Crelan",name:"Crelan"},matchScore:2,suggestion:true},"amenity/bank/Crédit Agricole":{name:"Crédit Agricole",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q590952"},addTags:{amenity:"bank",brand:"Crédit Agricole","brand:wikidata":"Q590952","brand:wikipedia":"fr:Crédit agricole",name:"Crédit Agricole"},removeTags:{amenity:"bank",brand:"Crédit Agricole","brand:wikidata":"Q590952","brand:wikipedia":"fr:Crédit agricole",name:"Crédit Agricole"},matchScore:2,suggestion:true},"amenity/bank/Crédit Maritime":{name:"Crédit Maritime",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q17176866"},addTags:{amenity:"bank",brand:"Crédit Maritime","brand:wikidata":"Q17176866","brand:wikipedia":"fr:Crédit maritime",name:"Crédit Maritime"},removeTags:{amenity:"bank",brand:"Crédit Maritime","brand:wikidata":"Q17176866","brand:wikipedia":"fr:Crédit maritime",name:"Crédit Maritime"},matchScore:2,suggestion:true},"amenity/bank/Crédit Mutuel":{name:"Crédit Mutuel",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q642627"},addTags:{amenity:"bank",brand:"Crédit Mutuel","brand:wikidata":"Q642627","brand:wikipedia":"en:Crédit Mutuel",name:"Crédit Mutuel"},removeTags:{amenity:"bank",brand:"Crédit Mutuel","brand:wikidata":"Q642627","brand:wikipedia":"en:Crédit Mutuel",name:"Crédit Mutuel"},matchScore:2,suggestion:true},"amenity/bank/Crédit Mutuel de Bretagne":{name:"Crédit Mutuel de Bretagne",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q3006236"},addTags:{amenity:"bank",brand:"Crédit Mutuel de Bretagne","brand:wikidata":"Q3006236","brand:wikipedia":"fr:Crédit mutuel Arkéa",name:"Crédit Mutuel de Bretagne"},removeTags:{amenity:"bank",brand:"Crédit Mutuel de Bretagne","brand:wikidata":"Q3006236","brand:wikipedia":"fr:Crédit mutuel Arkéa",name:"Crédit Mutuel de Bretagne"},matchScore:2,suggestion:true},"amenity/bank/Crédit du Nord":{name:"Crédit du Nord",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q3006209"},addTags:{amenity:"bank",brand:"Crédit du Nord","brand:wikidata":"Q3006209","brand:wikipedia":"en:Crédit du Nord",name:"Crédit du Nord"},removeTags:{amenity:"bank",brand:"Crédit du Nord","brand:wikidata":"Q3006209","brand:wikipedia":"en:Crédit du Nord",name:"Crédit du Nord"},matchScore:2,suggestion:true},"amenity/bank/Crédito Agrícola":{name:"Crédito Agrícola",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q10262017"},addTags:{amenity:"bank",brand:"Crédito Agrícola","brand:wikidata":"Q10262017","brand:wikipedia":"pt:Crédito Agrícola",name:"Crédito Agrícola"},removeTags:{amenity:"bank",brand:"Crédito Agrícola","brand:wikidata":"Q10262017","brand:wikipedia":"pt:Crédito Agrícola",name:"Crédito Agrícola"},matchScore:2,suggestion:true},"amenity/bank/Cбербанк":{name:"Cбербанк",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q205012"},addTags:{amenity:"bank",brand:"Cбербанк","brand:wikidata":"Q205012","brand:wikipedia":"en:Sberbank of Russia",name:"Cбербанк"},removeTags:{amenity:"bank",brand:"Cбербанк","brand:wikidata":"Q205012","brand:wikipedia":"en:Sberbank of Russia",name:"Cбербанк"},matchScore:2,suggestion:true},"amenity/bank/Danske Bank":{name:"Danske Bank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q1636974"},addTags:{amenity:"bank",brand:"Danske Bank","brand:wikidata":"Q1636974","brand:wikipedia":"en:Danske Bank",name:"Danske Bank"},removeTags:{amenity:"bank",brand:"Danske Bank","brand:wikidata":"Q1636974","brand:wikipedia":"en:Danske Bank",name:"Danske Bank"},matchScore:2,suggestion:true},"amenity/bank/Davivienda":{name:"Davivienda",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q5242054"},addTags:{amenity:"bank",brand:"Davivienda","brand:wikidata":"Q5242054","brand:wikipedia":"en:Davivienda",name:"Davivienda"},removeTags:{amenity:"bank",brand:"Davivienda","brand:wikidata":"Q5242054","brand:wikipedia":"en:Davivienda",name:"Davivienda"},matchScore:2,suggestion:true},"amenity/bank/Denizbank":{name:"Denizbank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q1115064"},addTags:{amenity:"bank",brand:"Denizbank","brand:wikidata":"Q1115064","brand:wikipedia":"en:DenizBank",name:"Denizbank"},removeTags:{amenity:"bank",brand:"Denizbank","brand:wikidata":"Q1115064","brand:wikipedia":"en:DenizBank",name:"Denizbank"},matchScore:2,suggestion:true},"amenity/bank/Desjardins":{name:"Desjardins",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q2933350"},addTags:{amenity:"bank",brand:"Desjardins","brand:wikidata":"Q2933350","brand:wikipedia":"en:Desjardins Group",name:"Desjardins"},removeTags:{amenity:"bank",brand:"Desjardins","brand:wikidata":"Q2933350","brand:wikipedia":"en:Desjardins Group",name:"Desjardins"},matchScore:2,suggestion:true},"amenity/bank/Deutsche Bank":{name:"Deutsche Bank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q66048"},addTags:{amenity:"bank",brand:"Deutsche Bank","brand:wikidata":"Q66048","brand:wikipedia":"en:Deutsche Bank",name:"Deutsche Bank"},removeTags:{amenity:"bank",brand:"Deutsche Bank","brand:wikidata":"Q66048","brand:wikipedia":"en:Deutsche Bank",name:"Deutsche Bank"},matchScore:2,suggestion:true},"amenity/bank/Dubai Islamic Bank":{name:"Dubai Islamic Bank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q5310570"},addTags:{amenity:"bank",brand:"Dubai Islamic Bank","brand:wikidata":"Q5310570","brand:wikipedia":"en:Dubai Islamic Bank",name:"Dubai Islamic Bank"},removeTags:{amenity:"bank",brand:"Dubai Islamic Bank","brand:wikidata":"Q5310570","brand:wikipedia":"en:Dubai Islamic Bank",name:"Dubai Islamic Bank"},matchScore:2,suggestion:true},"amenity/bank/EastWest Bank":{name:"EastWest Bank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q5327595"},addTags:{amenity:"bank",brand:"EastWest Bank","brand:wikidata":"Q5327595","brand:wikipedia":"en:EastWest Bank",name:"EastWest Bank"},removeTags:{amenity:"bank",brand:"EastWest Bank","brand:wikidata":"Q5327595","brand:wikipedia":"en:EastWest Bank",name:"EastWest Bank"},matchScore:2,suggestion:true},"amenity/bank/EastWest Unibank":{name:"EastWest Unibank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q5327595"},addTags:{amenity:"bank",brand:"EastWest Unibank","brand:wikidata":"Q5327595","brand:wikipedia":"en:EastWest Bank",name:"EastWest Unibank"},removeTags:{amenity:"bank",brand:"EastWest Unibank","brand:wikidata":"Q5327595","brand:wikipedia":"en:EastWest Bank",name:"EastWest Unibank"},matchScore:2,suggestion:true},"amenity/bank/Ecobank":{name:"Ecobank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q930225"},addTags:{amenity:"bank",brand:"Ecobank","brand:wikidata":"Q930225","brand:wikipedia":"en:Ecobank",name:"Ecobank"},removeTags:{amenity:"bank",brand:"Ecobank","brand:wikidata":"Q930225","brand:wikipedia":"en:Ecobank",name:"Ecobank"},matchScore:2,suggestion:true},"amenity/bank/Erste Bank":{name:"Erste Bank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q696867"},addTags:{amenity:"bank",brand:"Erste Bank","brand:wikidata":"Q696867","brand:wikipedia":"de:Erste Bank",name:"Erste Bank"},removeTags:{amenity:"bank",brand:"Erste Bank","brand:wikidata":"Q696867","brand:wikipedia":"de:Erste Bank",name:"Erste Bank"},matchScore:2,suggestion:true},"amenity/bank/FNB":{name:"FNB",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q3072956"},addTags:{amenity:"bank",brand:"FNB","brand:wikidata":"Q3072956","brand:wikipedia":"en:First National Bank (South Africa)",name:"FNB"},removeTags:{amenity:"bank",brand:"FNB","brand:wikidata":"Q3072956","brand:wikipedia":"en:First National Bank (South Africa)",name:"FNB"},matchScore:2,suggestion:true},"amenity/bank/Faysal Bank":{name:"Faysal Bank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q5439099"},addTags:{amenity:"bank",brand:"Faysal Bank","brand:wikidata":"Q5439099","brand:wikipedia":"en:Faysal Bank",name:"Faysal Bank"},removeTags:{amenity:"bank",brand:"Faysal Bank","brand:wikidata":"Q5439099","brand:wikipedia":"en:Faysal Bank",name:"Faysal Bank"},matchScore:2,suggestion:true},"amenity/bank/Federal Bank":{name:"Federal Bank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q2044983"},addTags:{amenity:"bank",brand:"Federal Bank","brand:wikidata":"Q2044983","brand:wikipedia":"en:Federal Bank",name:"Federal Bank"},removeTags:{amenity:"bank",brand:"Federal Bank","brand:wikidata":"Q2044983","brand:wikipedia":"en:Federal Bank",name:"Federal Bank"},matchScore:2,suggestion:true},"amenity/bank/Fifth Third Bank":{name:"Fifth Third Bank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q1411810"},addTags:{amenity:"bank",brand:"Fifth Third Bank","brand:wikidata":"Q1411810","brand:wikipedia":"en:Fifth Third Bank",name:"Fifth Third Bank"},removeTags:{amenity:"bank",brand:"Fifth Third Bank","brand:wikidata":"Q1411810","brand:wikipedia":"en:Fifth Third Bank",name:"Fifth Third Bank"},matchScore:2,suggestion:true},"amenity/bank/Finansbank":{name:"Finansbank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q1416237"},addTags:{amenity:"bank",brand:"Finansbank","brand:wikidata":"Q1416237","brand:wikipedia":"en:Finansbank",name:"Finansbank"},removeTags:{amenity:"bank",brand:"Finansbank","brand:wikidata":"Q1416237","brand:wikipedia":"en:Finansbank",name:"Finansbank"},matchScore:2,suggestion:true},"amenity/bank/First Citizens Bank":{name:"First Citizens Bank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q5452734"},addTags:{amenity:"bank",brand:"First Citizens Bank","brand:wikidata":"Q5452734","brand:wikipedia":"en:First Citizens Bank (Trinidad and Tobago)",name:"First Citizens Bank"},removeTags:{amenity:"bank",brand:"First Citizens Bank","brand:wikidata":"Q5452734","brand:wikipedia":"en:First Citizens Bank (Trinidad and Tobago)",name:"First Citizens Bank"},matchScore:2,suggestion:true},"amenity/bank/First National Bank":{name:"First National Bank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q5426765"},addTags:{amenity:"bank",brand:"First National Bank","brand:wikidata":"Q5426765","brand:wikipedia":"en:F.N.B. Corporation",name:"First National Bank"},removeTags:{amenity:"bank",brand:"First National Bank","brand:wikidata":"Q5426765","brand:wikipedia":"en:F.N.B. Corporation",name:"First National Bank"},matchScore:2,suggestion:true},"amenity/bank/Frost Bank":{name:"Frost Bank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q5506152"},addTags:{amenity:"bank",brand:"Frost Bank","brand:wikidata":"Q5506152","brand:wikipedia":"en:Frost Bank",name:"Frost Bank"},removeTags:{amenity:"bank",brand:"Frost Bank","brand:wikidata":"Q5506152","brand:wikipedia":"en:Frost Bank",name:"Frost Bank"},matchScore:2,suggestion:true},"amenity/bank/GCB Bank":{name:"GCB Bank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q1521346"},addTags:{amenity:"bank",brand:"GCB Bank","brand:wikidata":"Q1521346","brand:wikipedia":"en:GCB Bank Limited",name:"GCB Bank"},removeTags:{amenity:"bank",brand:"GCB Bank","brand:wikidata":"Q1521346","brand:wikipedia":"en:GCB Bank Limited",name:"GCB Bank"},matchScore:2,suggestion:true},"amenity/bank/Galicia":{name:"Galicia",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q5717952"},addTags:{amenity:"bank",brand:"Galicia","brand:wikidata":"Q5717952","brand:wikipedia":"es:Banco Galicia",name:"Galicia"},removeTags:{amenity:"bank",brand:"Galicia","brand:wikidata":"Q5717952","brand:wikipedia":"es:Banco Galicia",name:"Galicia"},matchScore:2,suggestion:true},"amenity/bank/Garanti":{name:"Garanti",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q322962"},addTags:{amenity:"bank",brand:"Garanti","brand:wikidata":"Q322962","brand:wikipedia":"en:Garanti Bank",name:"Garanti"},removeTags:{amenity:"bank",brand:"Garanti","brand:wikidata":"Q322962","brand:wikipedia":"en:Garanti Bank",name:"Garanti"},matchScore:2,suggestion:true},"amenity/bank/Garanti Bankası":{name:"Garanti Bankası",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q322962"},addTags:{amenity:"bank",brand:"Garanti Bankası","brand:wikidata":"Q322962","brand:wikipedia":"en:Garanti Bank",name:"Garanti Bankası"},removeTags:{amenity:"bank",brand:"Garanti Bankası","brand:wikidata":"Q322962","brand:wikipedia":"en:Garanti Bank",name:"Garanti Bankası"},matchScore:2,suggestion:true},"amenity/bank/Getin Bank":{name:"Getin Bank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q9267646"},addTags:{amenity:"bank",brand:"Getin Bank","brand:wikidata":"Q9267646","brand:wikipedia":"en:Getin Bank",name:"Getin Bank"},removeTags:{amenity:"bank",brand:"Getin Bank","brand:wikidata":"Q9267646","brand:wikipedia":"en:Getin Bank",name:"Getin Bank"},matchScore:2,suggestion:true},"amenity/bank/Great Western Bank":{name:"Great Western Bank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q5600185"},addTags:{amenity:"bank",brand:"Great Western Bank","brand:wikidata":"Q5600185","brand:wikipedia":"en:Great Western Bank (1907–present)",name:"Great Western Bank"},removeTags:{amenity:"bank",brand:"Great Western Bank","brand:wikidata":"Q5600185","brand:wikipedia":"en:Great Western Bank (1907–present)",name:"Great Western Bank"},matchScore:2,suggestion:true},"amenity/bank/Groupama":{name:"Groupama",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q3083531"},addTags:{amenity:"bank",brand:"Groupama","brand:wikidata":"Q3083531","brand:wikipedia":"en:Groupama",name:"Groupama"},removeTags:{amenity:"bank",brand:"Groupama","brand:wikidata":"Q3083531","brand:wikipedia":"en:Groupama",name:"Groupama"},matchScore:2,suggestion:true},"amenity/bank/HBL Bank":{name:"HBL Bank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q1566843"},addTags:{amenity:"bank",brand:"HBL Bank","brand:wikidata":"Q1566843","brand:wikipedia":"ur:ایچ بی ایل پاکستان",name:"HBL Bank"},removeTags:{amenity:"bank",brand:"HBL Bank","brand:wikidata":"Q1566843","brand:wikipedia":"ur:ایچ بی ایل پاکستان",name:"HBL Bank"},matchScore:2,suggestion:true},"amenity/bank/HDFC Bank":{name:"HDFC Bank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q631047"},addTags:{amenity:"bank",brand:"HDFC Bank","brand:wikidata":"Q631047","brand:wikipedia":"en:HDFC Bank",name:"HDFC Bank"},removeTags:{amenity:"bank",brand:"HDFC Bank","brand:wikidata":"Q631047","brand:wikipedia":"en:HDFC Bank",name:"HDFC Bank"},matchScore:2,suggestion:true},"amenity/bank/HNB":{name:"HNB",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q3532080"},addTags:{amenity:"bank",brand:"HNB","brand:wikidata":"Q3532080","brand:wikipedia":"en:Hatton National Bank",name:"HNB"},removeTags:{amenity:"bank",brand:"HNB","brand:wikidata":"Q3532080","brand:wikipedia":"en:Hatton National Bank",name:"HNB"},matchScore:2,suggestion:true},"amenity/bank/HSBC":{name:"HSBC",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q190464"},addTags:{amenity:"bank",brand:"HSBC","brand:wikidata":"Q190464","brand:wikipedia":"en:HSBC",name:"HSBC"},removeTags:{amenity:"bank",brand:"HSBC","brand:wikidata":"Q190464","brand:wikipedia":"en:HSBC",name:"HSBC"},matchScore:2,suggestion:true},"amenity/bank/Halifax":{name:"Halifax",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q3310164"},addTags:{amenity:"bank",brand:"Halifax","brand:wikidata":"Q3310164","brand:wikipedia":"en:Halifax (bank)",name:"Halifax"},removeTags:{amenity:"bank",brand:"Halifax","brand:wikidata":"Q3310164","brand:wikipedia":"en:Halifax (bank)",name:"Halifax"},matchScore:2,suggestion:true},"amenity/bank/Halkbank":{name:"Halkbank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q3593818"},addTags:{amenity:"bank",brand:"Halkbank","brand:wikidata":"Q3593818","brand:wikipedia":"en:Halkbank a.d.",name:"Halkbank"},removeTags:{amenity:"bank",brand:"Halkbank","brand:wikidata":"Q3593818","brand:wikipedia":"en:Halkbank a.d.",name:"Halkbank"},matchScore:2,suggestion:true},"amenity/bank/Handelsbanken":{name:"Handelsbanken",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q1421630"},addTags:{amenity:"bank",brand:"Handelsbanken","brand:wikidata":"Q1421630","brand:wikipedia":"en:Handelsbanken",name:"Handelsbanken"},removeTags:{amenity:"bank",brand:"Handelsbanken","brand:wikidata":"Q1421630","brand:wikipedia":"en:Handelsbanken",name:"Handelsbanken"},matchScore:2,suggestion:true},"amenity/bank/Heritage Bank":{name:"Heritage Bank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q5738690"},addTags:{amenity:"bank",brand:"Heritage Bank","brand:wikidata":"Q5738690","brand:wikipedia":"en:Heritage Bank",name:"Heritage Bank"},removeTags:{amenity:"bank",brand:"Heritage Bank","brand:wikidata":"Q5738690","brand:wikipedia":"en:Heritage Bank",name:"Heritage Bank"},matchScore:2,suggestion:true},"amenity/bank/Hong Leong Bank":{name:"Hong Leong Bank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q4383943"},addTags:{amenity:"bank",brand:"Hong Leong Bank","brand:wikidata":"Q4383943","brand:wikipedia":"en:Hong Leong Bank",name:"Hong Leong Bank"},removeTags:{amenity:"bank",brand:"Hong Leong Bank","brand:wikidata":"Q4383943","brand:wikipedia":"en:Hong Leong Bank",name:"Hong Leong Bank"},matchScore:2,suggestion:true},"amenity/bank/Hrvatska poštanska banka":{name:"Hrvatska poštanska banka",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q5923981"},addTags:{amenity:"bank",brand:"Hrvatska poštanska banka","brand:wikidata":"Q5923981","brand:wikipedia":"en:Hrvatska poštanska banka",name:"Hrvatska poštanska banka"},removeTags:{amenity:"bank",brand:"Hrvatska poštanska banka","brand:wikidata":"Q5923981","brand:wikipedia":"en:Hrvatska poštanska banka",name:"Hrvatska poštanska banka"},matchScore:2,suggestion:true},"amenity/bank/Huntington Bank":{name:"Huntington Bank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q798819"},addTags:{amenity:"bank",brand:"Huntington Bank","brand:wikidata":"Q798819","brand:wikipedia":"en:Huntington Bancshares",name:"Huntington Bank"},removeTags:{amenity:"bank",brand:"Huntington Bank","brand:wikidata":"Q798819","brand:wikipedia":"en:Huntington Bancshares",name:"Huntington Bank"},matchScore:2,suggestion:true},"amenity/bank/HypoVereinsbank":{name:"HypoVereinsbank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q220189"},addTags:{amenity:"bank",brand:"HypoVereinsbank","brand:wikidata":"Q220189","brand:wikipedia":"en:HypoVereinsbank",name:"HypoVereinsbank"},removeTags:{amenity:"bank",brand:"HypoVereinsbank","brand:wikidata":"Q220189","brand:wikipedia":"en:HypoVereinsbank",name:"HypoVereinsbank"},matchScore:2,suggestion:true},"amenity/bank/ICBC":{name:"ICBC",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q26463"},addTags:{amenity:"bank",brand:"ICBC","brand:wikidata":"Q26463","brand:wikipedia":"en:Industrial and Commercial Bank of China",name:"ICBC"},removeTags:{amenity:"bank",brand:"ICBC","brand:wikidata":"Q26463","brand:wikipedia":"en:Industrial and Commercial Bank of China",name:"ICBC"},matchScore:2,suggestion:true},"amenity/bank/ICICI Bank":{name:"ICICI Bank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q1653258"},addTags:{amenity:"bank",brand:"ICICI Bank","brand:wikidata":"Q1653258","brand:wikipedia":"en:ICICI Bank",name:"ICICI Bank"},removeTags:{amenity:"bank",brand:"ICICI Bank","brand:wikidata":"Q1653258","brand:wikipedia":"en:ICICI Bank",name:"ICICI Bank"},matchScore:2,suggestion:true},"amenity/bank/IDBI Bank":{name:"IDBI Bank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q3633485"},addTags:{amenity:"bank",brand:"IDBI Bank","brand:wikidata":"Q3633485","brand:wikipedia":"en:IDBI Bank",name:"IDBI Bank"},removeTags:{amenity:"bank",brand:"IDBI Bank","brand:wikidata":"Q3633485","brand:wikipedia":"en:IDBI Bank",name:"IDBI Bank"},matchScore:2,suggestion:true},"amenity/bank/ING":{name:"ING",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q645708"},addTags:{amenity:"bank",brand:"ING","brand:wikidata":"Q645708","brand:wikipedia":"en:ING Group",name:"ING"},removeTags:{amenity:"bank",brand:"ING","brand:wikidata":"Q645708","brand:wikipedia":"en:ING Group",name:"ING"},matchScore:2,suggestion:true},"amenity/bank/ING Bank Śląski":{name:"ING Bank Śląski",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q1410383"},addTags:{amenity:"bank",brand:"ING Bank Śląski","brand:wikidata":"Q1410383","brand:wikipedia":"en:ING Bank Śląski",name:"ING Bank Śląski"},removeTags:{amenity:"bank",brand:"ING Bank Śląski","brand:wikidata":"Q1410383","brand:wikipedia":"en:ING Bank Śląski",name:"ING Bank Śląski"},matchScore:2,suggestion:true},"amenity/bank/Ibercaja":{name:"Ibercaja",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q5907815"},addTags:{amenity:"bank",brand:"Ibercaja","brand:wikidata":"Q5907815","brand:wikipedia":"es:Ibercaja Banco",name:"Ibercaja"},removeTags:{amenity:"bank",brand:"Ibercaja","brand:wikidata":"Q5907815","brand:wikipedia":"es:Ibercaja Banco",name:"Ibercaja"},matchScore:2,suggestion:true},"amenity/bank/Indian Bank":{name:"Indian Bank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q2003789"},addTags:{amenity:"bank",brand:"Indian Bank","brand:wikidata":"Q2003789","brand:wikipedia":"en:Indian Bank",name:"Indian Bank"},removeTags:{amenity:"bank",brand:"Indian Bank","brand:wikidata":"Q2003789","brand:wikipedia":"en:Indian Bank",name:"Indian Bank"},matchScore:2,suggestion:true},"amenity/bank/Indian Overseas Bank":{name:"Indian Overseas Bank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q2003611"},addTags:{amenity:"bank",brand:"Indian Overseas Bank","brand:wikidata":"Q2003611","brand:wikipedia":"en:Indian Overseas Bank",name:"Indian Overseas Bank"},removeTags:{amenity:"bank",brand:"Indian Overseas Bank","brand:wikidata":"Q2003611","brand:wikipedia":"en:Indian Overseas Bank",name:"Indian Overseas Bank"},matchScore:2,suggestion:true},"amenity/bank/Interbank":{name:"Interbank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q2835558"},addTags:{amenity:"bank",brand:"Interbank","brand:wikidata":"Q2835558","brand:wikipedia":"es:Banco Interbank",name:"Interbank"},removeTags:{amenity:"bank",brand:"Interbank","brand:wikidata":"Q2835558","brand:wikipedia":"es:Banco Interbank",name:"Interbank"},matchScore:2,suggestion:true},"amenity/bank/Intesa Sanpaolo":{name:"Intesa Sanpaolo",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q1343118"},addTags:{amenity:"bank",brand:"Intesa Sanpaolo","brand:wikidata":"Q1343118","brand:wikipedia":"it:Intesa Sanpaolo",name:"Intesa Sanpaolo"},removeTags:{amenity:"bank",brand:"Intesa Sanpaolo","brand:wikidata":"Q1343118","brand:wikipedia":"it:Intesa Sanpaolo",name:"Intesa Sanpaolo"},matchScore:2,suggestion:true},"amenity/bank/Itaú":{name:"Itaú",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q2423252"},addTags:{amenity:"bank",brand:"Itaú","brand:wikidata":"Q2423252","brand:wikipedia":"en:Itaú Corpbanca",name:"Itaú"},removeTags:{amenity:"bank",brand:"Itaú","brand:wikidata":"Q2423252","brand:wikipedia":"en:Itaú Corpbanca",name:"Itaú"},matchScore:2,suggestion:true},"amenity/bank/JS Bank":{name:"JS Bank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q6108986"},addTags:{amenity:"bank",brand:"JS Bank","brand:wikidata":"Q6108986","brand:wikipedia":"en:JS Bank",name:"JS Bank"},removeTags:{amenity:"bank",brand:"JS Bank","brand:wikidata":"Q6108986","brand:wikipedia":"en:JS Bank",name:"JS Bank"},matchScore:2,suggestion:true},"amenity/bank/Janata Bank Limited জনতা ব্যাংক লিমিটেড":{name:"Janata Bank Limited জনতা ব্যাংক লিমিটেড",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q3347028"},addTags:{amenity:"bank",brand:"Janata Bank Limited জনতা ব্যাংক লিমিটেড","brand:wikidata":"Q3347028","brand:wikipedia":"en:Janata Bank",name:"Janata Bank Limited জনতা ব্যাংক লিমিটেড"},removeTags:{amenity:"bank",brand:"Janata Bank Limited জনতা ব্যাংক লিমিটেড","brand:wikidata":"Q3347028","brand:wikipedia":"en:Janata Bank",name:"Janata Bank Limited জনতা ব্যাংক লিমিটেড"},matchScore:2,suggestion:true},"amenity/bank/Jyske Bank":{name:"Jyske Bank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q136672"},addTags:{amenity:"bank",brand:"Jyske Bank","brand:wikidata":"Q136672","brand:wikipedia":"en:Jyske Bank",name:"Jyske Bank"},removeTags:{amenity:"bank",brand:"Jyske Bank","brand:wikidata":"Q136672","brand:wikipedia":"en:Jyske Bank",name:"Jyske Bank"},matchScore:2,suggestion:true},"amenity/bank/K&H Bank":{name:"K&H Bank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q6393834"},addTags:{amenity:"bank",brand:"K&H Bank","brand:wikidata":"Q6393834","brand:wikipedia":"en:K&H Bank",name:"K&H Bank"},removeTags:{amenity:"bank",brand:"K&H Bank","brand:wikidata":"Q6393834","brand:wikipedia":"en:K&H Bank",name:"K&H Bank"},matchScore:2,suggestion:true},"amenity/bank/KBC":{name:"KBC",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q941020"},addTags:{amenity:"bank",brand:"KBC","brand:wikidata":"Q941020","brand:wikipedia":"en:KBC Bank",name:"KBC"},removeTags:{amenity:"bank",brand:"KBC","brand:wikidata":"Q941020","brand:wikipedia":"en:KBC Bank",name:"KBC"},matchScore:2,suggestion:true},"amenity/bank/KBZ Bank":{name:"KBZ Bank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q6360949"},addTags:{amenity:"bank",brand:"KBZ Bank","brand:wikidata":"Q6360949","brand:wikipedia":"en:Kanbawza Bank",name:"KBZ Bank"},removeTags:{amenity:"bank",brand:"KBZ Bank","brand:wikidata":"Q6360949","brand:wikipedia":"en:Kanbawza Bank",name:"KBZ Bank"},matchScore:2,suggestion:true},"amenity/bank/Karnataka Bank":{name:"Karnataka Bank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q2042632"},addTags:{amenity:"bank",brand:"Karnataka Bank","brand:wikidata":"Q2042632","brand:wikipedia":"en:Karnataka Bank",name:"Karnataka Bank"},removeTags:{amenity:"bank",brand:"Karnataka Bank","brand:wikidata":"Q2042632","brand:wikipedia":"en:Karnataka Bank",name:"Karnataka Bank"},matchScore:2,suggestion:true},"amenity/bank/Kasa Stefczyka":{name:"Kasa Stefczyka",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q57624461"},addTags:{amenity:"bank",brand:"Kasa Stefczyka","brand:wikidata":"Q57624461",name:"Kasa Stefczyka"},removeTags:{amenity:"bank",brand:"Kasa Stefczyka","brand:wikidata":"Q57624461",name:"Kasa Stefczyka"},matchScore:2,suggestion:true},"amenity/bank/Key Bank":{name:"Key Bank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q1740314"},addTags:{amenity:"bank",brand:"Key Bank","brand:wikidata":"Q1740314","brand:wikipedia":"en:KeyBank",name:"Key Bank"},removeTags:{amenity:"bank",brand:"Key Bank","brand:wikidata":"Q1740314","brand:wikipedia":"en:KeyBank",name:"Key Bank"},matchScore:2,suggestion:true},"amenity/bank/Komerční banka":{name:"Komerční banka",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q1541079"},addTags:{amenity:"bank",brand:"Komerční banka","brand:wikidata":"Q1541079","brand:wikipedia":"en:Komerční banka",name:"Komerční banka"},removeTags:{amenity:"bank",brand:"Komerční banka","brand:wikidata":"Q1541079","brand:wikipedia":"en:Komerční banka",name:"Komerční banka"},matchScore:2,suggestion:true},"amenity/bank/Kotak Mahindra Bank":{name:"Kotak Mahindra Bank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q2040404"},addTags:{amenity:"bank","brand:wikidata":"Q2040404","brand:wikipedia":"en:Kotak Mahindra Bank",name:"Kotak Mahindra Bank"},removeTags:{amenity:"bank","brand:wikidata":"Q2040404","brand:wikipedia":"en:Kotak Mahindra Bank",name:"Kotak Mahindra Bank"},matchScore:2,suggestion:true},"amenity/bank/Kreissparkasse":{name:"Kreissparkasse",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q2513770"},addTags:{amenity:"bank",brand:"Kreissparkasse","brand:wikidata":"Q2513770","brand:wikipedia":"de:Verband der Freien Sparkassen",name:"Kreissparkasse"},removeTags:{amenity:"bank",brand:"Kreissparkasse","brand:wikidata":"Q2513770","brand:wikipedia":"de:Verband der Freien Sparkassen",name:"Kreissparkasse"},matchScore:2,suggestion:true},"amenity/bank/Kutxabank":{name:"Kutxabank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q5139377"},addTags:{amenity:"bank",brand:"Kutxabank","brand:wikidata":"Q5139377","brand:wikipedia":"en:Kutxabank",name:"Kutxabank"},removeTags:{amenity:"bank",brand:"Kutxabank","brand:wikidata":"Q5139377","brand:wikipedia":"en:Kutxabank",name:"Kutxabank"},matchScore:2,suggestion:true},"amenity/bank/LCL":{name:"LCL",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q779722"},addTags:{amenity:"bank",brand:"LCL","brand:wikidata":"Q779722","brand:wikipedia":"en:Crédit Lyonnais",name:"LCL"},removeTags:{amenity:"bank",brand:"LCL","brand:wikidata":"Q779722","brand:wikipedia":"en:Crédit Lyonnais",name:"LCL"},matchScore:2,suggestion:true},"amenity/bank/La Banque Postale":{name:"La Banque Postale",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q3206431"},addTags:{amenity:"bank",brand:"La Banque Postale","brand:wikidata":"Q3206431","brand:wikipedia":"en:La Banque postale",name:"La Banque Postale"},removeTags:{amenity:"bank",brand:"La Banque Postale","brand:wikidata":"Q3206431","brand:wikipedia":"en:La Banque postale",name:"La Banque Postale"},matchScore:2,suggestion:true},"amenity/bank/La Caixa":{name:"La Caixa",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q287753"},addTags:{amenity:"bank",brand:"La Caixa","brand:wikidata":"Q287753","brand:wikipedia":"en:La Caixa",name:"La Caixa"},removeTags:{amenity:"bank",brand:"La Caixa","brand:wikidata":"Q287753","brand:wikipedia":"en:La Caixa",name:"La Caixa"},matchScore:2,suggestion:true},"amenity/bank/Laboral Kutxa":{name:"Laboral Kutxa",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q12052386"},addTags:{amenity:"bank",brand:"Laboral Kutxa","brand:wikidata":"Q12052386","brand:wikipedia":"en:Laboral Kutxa",name:"Laboral Kutxa"},removeTags:{amenity:"bank",brand:"Laboral Kutxa","brand:wikidata":"Q12052386","brand:wikipedia":"en:Laboral Kutxa",name:"Laboral Kutxa"},matchScore:2,suggestion:true},"amenity/bank/Landbank":{name:"Landbank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q6483872"},addTags:{amenity:"bank",brand:"Landbank","brand:wikidata":"Q6483872","brand:wikipedia":"en:Land Bank of the Philippines",name:"Landbank"},removeTags:{amenity:"bank",brand:"Landbank","brand:wikidata":"Q6483872","brand:wikipedia":"en:Land Bank of the Philippines",name:"Landbank"},matchScore:2,suggestion:true},"amenity/bank/Liberbank":{name:"Liberbank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q2891018"},addTags:{amenity:"bank",brand:"Liberbank","brand:wikidata":"Q2891018","brand:wikipedia":"en:Liberbank",name:"Liberbank"},removeTags:{amenity:"bank",brand:"Liberbank","brand:wikidata":"Q2891018","brand:wikipedia":"en:Liberbank",name:"Liberbank"},matchScore:2,suggestion:true},"amenity/bank/Lloyds Bank":{name:"Lloyds Bank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q1152847"},addTags:{amenity:"bank",brand:"Lloyds Bank","brand:wikidata":"Q1152847","brand:wikipedia":"en:Lloyds Bank",name:"Lloyds Bank"},removeTags:{amenity:"bank",brand:"Lloyds Bank","brand:wikidata":"Q1152847","brand:wikipedia":"en:Lloyds Bank",name:"Lloyds Bank"},matchScore:2,suggestion:true},"amenity/bank/M&T Bank":{name:"M&T Bank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q3272257"},addTags:{amenity:"bank",brand:"M&T Bank","brand:wikidata":"Q3272257","brand:wikipedia":"en:M&T Bank",name:"M&T Bank"},removeTags:{amenity:"bank",brand:"M&T Bank","brand:wikidata":"Q3272257","brand:wikipedia":"en:M&T Bank",name:"M&T Bank"},matchScore:2,suggestion:true},"amenity/bank/MCB":{name:"MCB",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q15982510"},addTags:{amenity:"bank",brand:"MCB","brand:wikidata":"Q15982510","brand:wikipedia":"ur:ایم سی بی بینک لمیٹڈ",name:"MCB"},removeTags:{amenity:"bank",brand:"MCB","brand:wikidata":"Q15982510","brand:wikipedia":"ur:ایم سی بی بینک لمیٹڈ",name:"MCB"},matchScore:2,suggestion:true},"amenity/bank/MONETA Money Bank":{name:"MONETA Money Bank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q24282966"},addTags:{amenity:"bank",brand:"MONETA Money Bank","brand:wikidata":"Q24282966","brand:wikipedia":"cs:Moneta Money Bank",name:"MONETA Money Bank"},removeTags:{amenity:"bank",brand:"MONETA Money Bank","brand:wikidata":"Q24282966","brand:wikipedia":"cs:Moneta Money Bank",name:"MONETA Money Bank"},matchScore:2,suggestion:true},"amenity/bank/Macro":{name:"Macro",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q2335199"},addTags:{amenity:"bank",brand:"Macro","brand:wikidata":"Q2335199","brand:wikipedia":"en:Banco Macro",name:"Macro"},removeTags:{amenity:"bank",brand:"Macro","brand:wikidata":"Q2335199","brand:wikipedia":"en:Banco Macro",name:"Macro"},matchScore:2,suggestion:true},"amenity/bank/Maybank":{name:"Maybank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q1364018"},addTags:{amenity:"bank",brand:"Maybank","brand:wikidata":"Q1364018","brand:wikipedia":"en:Maybank",name:"Maybank"},removeTags:{amenity:"bank",brand:"Maybank","brand:wikidata":"Q1364018","brand:wikipedia":"en:Maybank",name:"Maybank"},matchScore:2,suggestion:true},"amenity/bank/Meezan Bank":{name:"Meezan Bank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q6807934"},addTags:{amenity:"bank",brand:"Meezan Bank","brand:wikidata":"Q6807934","brand:wikipedia":"en:Meezan Bank",name:"Meezan Bank"},removeTags:{amenity:"bank",brand:"Meezan Bank","brand:wikidata":"Q6807934","brand:wikipedia":"en:Meezan Bank",name:"Meezan Bank"},matchScore:2,suggestion:true},"amenity/bank/Mercantil":{name:"Mercantil",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q6818004"},addTags:{amenity:"bank",brand:"Mercantil","brand:wikidata":"Q6818004","brand:wikipedia":"en:Mercantil Servicios Financieros",name:"Mercantil"},removeTags:{amenity:"bank",brand:"Mercantil","brand:wikidata":"Q6818004","brand:wikipedia":"en:Mercantil Servicios Financieros",name:"Mercantil"},matchScore:2,suggestion:true},"amenity/bank/Mibanco":{name:"Mibanco",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q5558589"},addTags:{amenity:"bank",brand:"Mibanco","brand:wikidata":"Q5558589","brand:wikipedia":"es:MiBanco",name:"Mibanco"},removeTags:{amenity:"bank",brand:"Mibanco","brand:wikidata":"Q5558589","brand:wikipedia":"es:MiBanco",name:"Mibanco"},matchScore:2,suggestion:true},"amenity/bank/Millennium Bank":{name:"Millennium Bank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q4855947"},addTags:{amenity:"bank",brand:"Millennium Bank","brand:wikidata":"Q4855947","brand:wikipedia":"pl:Bank Millennium",name:"Millennium Bank"},removeTags:{amenity:"bank",brand:"Millennium Bank","brand:wikidata":"Q4855947","brand:wikipedia":"pl:Bank Millennium",name:"Millennium Bank"},matchScore:2,suggestion:true},"amenity/bank/Millennium bcp":{name:"Millennium bcp",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q118581"},addTags:{amenity:"bank",brand:"Millennium bcp","brand:wikidata":"Q118581","brand:wikipedia":"pt:Banco Comercial Português",name:"Millennium bcp"},removeTags:{amenity:"bank",brand:"Millennium bcp","brand:wikidata":"Q118581","brand:wikipedia":"pt:Banco Comercial Português",name:"Millennium bcp"},matchScore:2,suggestion:true},"amenity/bank/Monte dei Paschi di Siena":{name:"Monte dei Paschi di Siena",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q46730"},addTags:{amenity:"bank",brand:"Monte dei Paschi di Siena","brand:wikidata":"Q46730","brand:wikipedia":"en:Banca Monte dei Paschi di Siena",name:"Monte dei Paschi di Siena"},removeTags:{amenity:"bank",brand:"Monte dei Paschi di Siena","brand:wikidata":"Q46730","brand:wikipedia":"en:Banca Monte dei Paschi di Siena",name:"Monte dei Paschi di Siena"},matchScore:2,suggestion:true},"amenity/bank/Montepio":{name:"Montepio",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q1946091"},addTags:{amenity:"bank",brand:"Montepio","brand:wikidata":"Q1946091","brand:wikipedia":"en:Montepio (bank)",name:"Montepio"},removeTags:{amenity:"bank",brand:"Montepio","brand:wikidata":"Q1946091","brand:wikipedia":"en:Montepio (bank)",name:"Montepio"},matchScore:2,suggestion:true},"amenity/bank/NAB":{name:"NAB",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q1430985"},addTags:{amenity:"bank",brand:"NAB","brand:wikidata":"Q1430985","brand:wikipedia":"en:National Australia Bank",name:"NAB"},removeTags:{amenity:"bank",brand:"NAB","brand:wikidata":"Q1430985","brand:wikipedia":"en:National Australia Bank",name:"NAB"},matchScore:2,suggestion:true},"amenity/bank/NatWest":{name:"NatWest",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q2740021"},addTags:{amenity:"bank",brand:"NatWest","brand:wikidata":"Q2740021","brand:wikipedia":"en:NatWest",name:"NatWest"},removeTags:{amenity:"bank",brand:"NatWest","brand:wikidata":"Q2740021","brand:wikipedia":"en:NatWest",name:"NatWest"},matchScore:2,suggestion:true},"amenity/bank/Nationwide":{name:"Nationwide",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q846735"},addTags:{amenity:"bank",brand:"Nationwide","brand:wikidata":"Q846735","brand:wikipedia":"en:Nationwide Building Society",name:"Nationwide"},removeTags:{amenity:"bank",brand:"Nationwide","brand:wikidata":"Q846735","brand:wikipedia":"en:Nationwide Building Society",name:"Nationwide"},matchScore:2,suggestion:true},"amenity/bank/Navy Federal Credit Union":{name:"Navy Federal Credit Union",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q6982632"},addTags:{amenity:"bank",brand:"Navy Federal Credit Union","brand:wikidata":"Q6982632","brand:wikipedia":"en:Navy Federal Credit Union",name:"Navy Federal Credit Union"},removeTags:{amenity:"bank",brand:"Navy Federal Credit Union","brand:wikidata":"Q6982632","brand:wikipedia":"en:Navy Federal Credit Union",name:"Navy Federal Credit Union"},matchScore:2,suggestion:true},"amenity/bank/Nedbank":{name:"Nedbank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q2751701"},addTags:{amenity:"bank",brand:"Nedbank","brand:wikidata":"Q2751701","brand:wikipedia":"en:Nedbank",name:"Nedbank"},removeTags:{amenity:"bank",brand:"Nedbank","brand:wikidata":"Q2751701","brand:wikipedia":"en:Nedbank",name:"Nedbank"},matchScore:2,suggestion:true},"amenity/bank/Nordea":{name:"Nordea",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q1123823"},addTags:{amenity:"bank",brand:"Nordea","brand:wikidata":"Q1123823","brand:wikipedia":"en:Nordea",name:"Nordea"},removeTags:{amenity:"bank",brand:"Nordea","brand:wikidata":"Q1123823","brand:wikipedia":"en:Nordea",name:"Nordea"},matchScore:2,suggestion:true},"amenity/bank/Novo Banco":{name:"Novo Banco",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q17488861"},addTags:{amenity:"bank",brand:"Novo Banco","brand:wikidata":"Q17488861","brand:wikipedia":"en:Novo Banco",name:"Novo Banco"},removeTags:{amenity:"bank",brand:"Novo Banco","brand:wikidata":"Q17488861","brand:wikipedia":"en:Novo Banco",name:"Novo Banco"},matchScore:2,suggestion:true},"amenity/bank/OLB":{name:"OLB",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q879591"},addTags:{amenity:"bank",brand:"OLB","brand:wikidata":"Q879591","brand:wikipedia":"en:Oldenburgische Landesbank",name:"OLB"},removeTags:{amenity:"bank",brand:"OLB","brand:wikidata":"Q879591","brand:wikipedia":"en:Oldenburgische Landesbank",name:"OLB"},matchScore:2,suggestion:true},"amenity/bank/OTP":{name:"OTP",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q912778"},addTags:{amenity:"bank",brand:"OTP","brand:wikidata":"Q912778","brand:wikipedia":"en:OTP Bank",name:"OTP"},removeTags:{amenity:"bank",brand:"OTP","brand:wikidata":"Q912778","brand:wikipedia":"en:OTP Bank",name:"OTP"},matchScore:2,suggestion:true},"amenity/bank/Oberbank":{name:"Oberbank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q2009139"},addTags:{amenity:"bank",brand:"Oberbank","brand:wikidata":"Q2009139","brand:wikipedia":"de:Oberbank",name:"Oberbank"},removeTags:{amenity:"bank",brand:"Oberbank","brand:wikidata":"Q2009139","brand:wikipedia":"de:Oberbank",name:"Oberbank"},matchScore:2,suggestion:true},"amenity/bank/Occidental de Descuento":{name:"Occidental de Descuento",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q4854108"},addTags:{amenity:"bank",brand:"Occidental de Descuento","brand:wikidata":"Q4854108","brand:wikipedia":"en:Banco Occidental de Descuento",name:"Occidental de Descuento"},removeTags:{amenity:"bank",brand:"Occidental de Descuento","brand:wikidata":"Q4854108","brand:wikipedia":"en:Banco Occidental de Descuento",name:"Occidental de Descuento"},matchScore:2,suggestion:true},"amenity/bank/Oldenburgische Landesbank":{name:"Oldenburgische Landesbank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q879591"},addTags:{amenity:"bank",brand:"Oldenburgische Landesbank","brand:wikidata":"Q879591","brand:wikipedia":"en:Oldenburgische Landesbank",name:"Oldenburgische Landesbank"},removeTags:{amenity:"bank",brand:"Oldenburgische Landesbank","brand:wikidata":"Q879591","brand:wikipedia":"en:Oldenburgische Landesbank",name:"Oldenburgische Landesbank"},matchScore:2,suggestion:true},"amenity/bank/One Network Bank":{name:"One Network Bank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q7093019"},addTags:{amenity:"bank",brand:"One Network Bank","brand:wikidata":"Q7093019","brand:wikipedia":"en:One Network Bank",name:"One Network Bank"},removeTags:{amenity:"bank",brand:"One Network Bank","brand:wikidata":"Q7093019","brand:wikipedia":"en:One Network Bank",name:"One Network Bank"},matchScore:2,suggestion:true},"amenity/bank/Oriental Bank of Commerce":{name:"Oriental Bank of Commerce",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q367008"},addTags:{amenity:"bank",brand:"Oriental Bank of Commerce","brand:wikidata":"Q367008","brand:wikipedia":"en:Oriental Bank of Commerce",name:"Oriental Bank of Commerce"},removeTags:{amenity:"bank",brand:"Oriental Bank of Commerce","brand:wikidata":"Q367008","brand:wikipedia":"en:Oriental Bank of Commerce",name:"Oriental Bank of Commerce"},matchScore:2,suggestion:true},"amenity/bank/PBZ":{name:"PBZ",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q7246343"},addTags:{amenity:"bank",brand:"PBZ","brand:wikidata":"Q7246343","brand:wikipedia":"en:Privredna banka Zagreb",name:"PBZ"},removeTags:{amenity:"bank",brand:"PBZ","brand:wikidata":"Q7246343","brand:wikipedia":"en:Privredna banka Zagreb",name:"PBZ"},matchScore:2,suggestion:true},"amenity/bank/PKO BP":{name:"PKO BP",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q578832"},addTags:{amenity:"bank",brand:"PKO BP","brand:wikidata":"Q578832","brand:wikipedia":"en:PKO Bank Polski",name:"PKO BP"},removeTags:{amenity:"bank",brand:"PKO BP","brand:wikidata":"Q578832","brand:wikipedia":"en:PKO Bank Polski",name:"PKO BP"},matchScore:2,suggestion:true},"amenity/bank/PNC Bank":{name:"PNC Bank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q38928"},addTags:{amenity:"bank",brand:"PNC Bank","brand:wikidata":"Q38928","brand:wikipedia":"en:PNC Financial Services",name:"PNC Bank"},removeTags:{amenity:"bank",brand:"PNC Bank","brand:wikidata":"Q38928","brand:wikipedia":"en:PNC Financial Services",name:"PNC Bank"},matchScore:2,suggestion:true},"amenity/bank/PSBank":{name:"PSBank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q7185203"},addTags:{amenity:"bank",brand:"PSBank","brand:wikidata":"Q7185203","brand:wikipedia":"en:Philippine Savings Bank",name:"PSBank"},removeTags:{amenity:"bank",brand:"PSBank","brand:wikidata":"Q7185203","brand:wikipedia":"en:Philippine Savings Bank",name:"PSBank"},matchScore:2,suggestion:true},"amenity/bank/Panin Bank":{name:"Panin Bank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q12502751"},addTags:{amenity:"bank",brand:"Panin Bank","brand:wikidata":"Q12502751","brand:wikipedia":"id:Panin Bank",name:"Panin Bank"},removeTags:{amenity:"bank",brand:"Panin Bank","brand:wikidata":"Q12502751","brand:wikipedia":"id:Panin Bank",name:"Panin Bank"},matchScore:2,suggestion:true},"amenity/bank/Patagonia":{name:"Patagonia",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q2882078"},addTags:{amenity:"bank",brand:"Patagonia","brand:wikidata":"Q2882078","brand:wikipedia":"en:Banco Patagonia",name:"Patagonia"},removeTags:{amenity:"bank",brand:"Patagonia","brand:wikidata":"Q2882078","brand:wikipedia":"en:Banco Patagonia",name:"Patagonia"},matchScore:2,suggestion:true},"amenity/bank/Pekao SA":{name:"Pekao SA",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q806642"},addTags:{amenity:"bank",brand:"Pekao SA","brand:wikidata":"Q806642","brand:wikipedia":"pl:Bank Polska Kasa Opieki",name:"Pekao SA"},removeTags:{amenity:"bank",brand:"Pekao SA","brand:wikidata":"Q806642","brand:wikipedia":"pl:Bank Polska Kasa Opieki",name:"Pekao SA"},matchScore:2,suggestion:true},"amenity/bank/People's United Bank":{name:"People's United Bank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q7165802"},addTags:{amenity:"bank",brand:"People's United Bank","brand:wikidata":"Q7165802","brand:wikipedia":"en:People's United Financial",name:"People's United Bank"},removeTags:{amenity:"bank",brand:"People's United Bank","brand:wikidata":"Q7165802","brand:wikipedia":"en:People's United Financial",name:"People's United Bank"},matchScore:2,suggestion:true},"amenity/bank/Peoples Bank":{name:"Peoples Bank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q7166050"},addTags:{amenity:"bank",brand:"Peoples Bank","brand:wikidata":"Q7166050","brand:wikipedia":"en:Peoples Bank",name:"Peoples Bank"},removeTags:{amenity:"bank",brand:"Peoples Bank","brand:wikidata":"Q7166050","brand:wikipedia":"en:Peoples Bank",name:"Peoples Bank"},matchScore:2,suggestion:true},"amenity/bank/Philippine National Bank":{name:"Philippine National Bank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q1657971"},addTags:{amenity:"bank",brand:"Philippine National Bank","brand:wikidata":"Q1657971","brand:wikipedia":"en:Philippine National Bank",name:"Philippine National Bank"},removeTags:{amenity:"bank",brand:"Philippine National Bank","brand:wikidata":"Q1657971","brand:wikipedia":"en:Philippine National Bank",name:"Philippine National Bank"},matchScore:2,suggestion:true},"amenity/bank/Piraeus Bank":{name:"Piraeus Bank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q3312"},addTags:{amenity:"bank",brand:"Piraeus Bank","brand:wikidata":"Q3312","brand:wikipedia":"en:Piraeus Bank",name:"Piraeus Bank"},removeTags:{amenity:"bank",brand:"Piraeus Bank","brand:wikidata":"Q3312","brand:wikipedia":"en:Piraeus Bank",name:"Piraeus Bank"},matchScore:2,suggestion:true},"amenity/bank/Postbank":{name:"Postbank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q708835"},addTags:{amenity:"bank",brand:"Postbank","brand:wikidata":"Q708835","brand:wikipedia":"en:Deutsche Postbank",name:"Postbank"},removeTags:{amenity:"bank",brand:"Postbank","brand:wikidata":"Q708835","brand:wikipedia":"en:Deutsche Postbank",name:"Postbank"},matchScore:2,suggestion:true},"amenity/bank/Prima banka":{name:"Prima banka",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q13538661"},addTags:{amenity:"bank",brand:"Prima banka","brand:wikidata":"Q13538661","brand:wikipedia":"sk:Prima banka Slovensko",name:"Prima banka"},removeTags:{amenity:"bank",brand:"Prima banka","brand:wikidata":"Q13538661","brand:wikipedia":"sk:Prima banka Slovensko",name:"Prima banka"},matchScore:2,suggestion:true},"amenity/bank/Punjab National Bank":{name:"Punjab National Bank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q2743499"},addTags:{amenity:"bank",brand:"Punjab National Bank","brand:wikidata":"Q2743499","brand:wikipedia":"en:Punjab National Bank",name:"Punjab National Bank"},removeTags:{amenity:"bank",brand:"Punjab National Bank","brand:wikidata":"Q2743499","brand:wikipedia":"en:Punjab National Bank",name:"Punjab National Bank"},matchScore:2,suggestion:true},"amenity/bank/RBC":{name:"RBC",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q735261"},addTags:{amenity:"bank",brand:"RBC","brand:wikidata":"Q735261","brand:wikipedia":"en:Royal Bank of Canada",name:"RBC"},removeTags:{amenity:"bank",brand:"RBC","brand:wikidata":"Q735261","brand:wikipedia":"en:Royal Bank of Canada",name:"RBC"},matchScore:2,suggestion:true},"amenity/bank/RBS":{name:"RBS",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q160126"},addTags:{amenity:"bank",brand:"RBS","brand:wikidata":"Q160126","brand:wikipedia":"en:Royal Bank of Scotland",name:"RBS"},removeTags:{amenity:"bank",brand:"RBS","brand:wikidata":"Q160126","brand:wikipedia":"en:Royal Bank of Scotland",name:"RBS"},matchScore:2,suggestion:true},"amenity/bank/RCBC":{name:"RCBC",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q7339070"},addTags:{amenity:"bank",brand:"RCBC","brand:wikidata":"Q7339070","brand:wikipedia":"en:Rizal Commercial Banking Corporation",name:"RCBC"},removeTags:{amenity:"bank",brand:"RCBC","brand:wikidata":"Q7339070","brand:wikipedia":"en:Rizal Commercial Banking Corporation",name:"RCBC"},matchScore:2,suggestion:true},"amenity/bank/Rabobank":{name:"Rabobank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q252004"},addTags:{amenity:"bank",brand:"Rabobank","brand:wikidata":"Q252004","brand:wikipedia":"en:Rabobank",name:"Rabobank"},removeTags:{amenity:"bank",brand:"Rabobank","brand:wikidata":"Q252004","brand:wikipedia":"en:Rabobank",name:"Rabobank"},matchScore:2,suggestion:true},"amenity/bank/Raiffeisen Polbank":{name:"Raiffeisen Polbank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q9303218"},addTags:{amenity:"bank",brand:"Raiffeisen Polbank","brand:wikidata":"Q9303218","brand:wikipedia":"pl:Raiffeisen Bank Polska",name:"Raiffeisen Polbank"},removeTags:{amenity:"bank",brand:"Raiffeisen Polbank","brand:wikidata":"Q9303218","brand:wikipedia":"pl:Raiffeisen Bank Polska",name:"Raiffeisen Polbank"},matchScore:2,suggestion:true},"amenity/bank/Regions Bank":{name:"Regions Bank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q917131"},addTags:{amenity:"bank",brand:"Regions Bank","brand:wikidata":"Q917131","brand:wikipedia":"en:Regions Financial Corporation",name:"Regions Bank"},removeTags:{amenity:"bank",brand:"Regions Bank","brand:wikidata":"Q917131","brand:wikipedia":"en:Regions Financial Corporation",name:"Regions Bank"},matchScore:2,suggestion:true},"amenity/bank/SEB":{name:"SEB",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q975655"},addTags:{amenity:"bank",brand:"SEB","brand:wikidata":"Q975655","brand:wikipedia":"en:SEB Group",name:"SEB"},removeTags:{amenity:"bank",brand:"SEB","brand:wikidata":"Q975655","brand:wikipedia":"en:SEB Group",name:"SEB"},matchScore:2,suggestion:true},"amenity/bank/SGBCI":{name:"SGBCI",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q3488360"},addTags:{amenity:"bank",brand:"SGBCI","brand:wikidata":"Q3488360","brand:wikipedia":"fr:Société générale de banques en Côte d'Ivoire",name:"SGBCI"},removeTags:{amenity:"bank",brand:"SGBCI","brand:wikidata":"Q3488360","brand:wikipedia":"fr:Société générale de banques en Côte d'Ivoire",name:"SGBCI"},matchScore:2,suggestion:true},"amenity/bank/SNS Bank":{name:"SNS Bank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q1857899"},addTags:{amenity:"bank",brand:"SNS Bank","brand:wikidata":"Q1857899","brand:wikipedia":"en:De Volksbank",name:"SNS Bank"},removeTags:{amenity:"bank",brand:"SNS Bank","brand:wikidata":"Q1857899","brand:wikipedia":"en:De Volksbank",name:"SNS Bank"},matchScore:2,suggestion:true},"amenity/bank/Sampath Bank":{name:"Sampath Bank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q7410095"},addTags:{amenity:"bank",brand:"Sampath Bank","brand:wikidata":"Q7410095","brand:wikipedia":"en:Sampath Bank",name:"Sampath Bank"},removeTags:{amenity:"bank",brand:"Sampath Bank","brand:wikidata":"Q7410095","brand:wikipedia":"en:Sampath Bank",name:"Sampath Bank"},matchScore:2,suggestion:true},"amenity/bank/Santander":{name:"Santander",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q5835668"},addTags:{amenity:"bank",brand:"Santander","brand:wikidata":"Q5835668","brand:wikipedia":"en:Santander Bank",name:"Santander"},removeTags:{amenity:"bank",brand:"Santander","brand:wikidata":"Q5835668","brand:wikipedia":"en:Santander Bank",name:"Santander"},matchScore:2,suggestion:true},"amenity/bank/Santander Río":{name:"Santander Río",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q3385268"},addTags:{amenity:"bank",brand:"Santander Río","brand:wikidata":"Q3385268","brand:wikipedia":"es:Banco Santander Río",name:"Santander Río"},removeTags:{amenity:"bank",brand:"Santander Río","brand:wikidata":"Q3385268","brand:wikipedia":"es:Banco Santander Río",name:"Santander Río"},matchScore:2,suggestion:true},"amenity/bank/Santander Totta":{name:"Santander Totta",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q4854116"},addTags:{amenity:"bank",brand:"Santander Totta","brand:wikidata":"Q4854116","brand:wikipedia":"pt:Banco Santander Portugal",name:"Santander Totta"},removeTags:{amenity:"bank",brand:"Santander Totta","brand:wikidata":"Q4854116","brand:wikipedia":"pt:Banco Santander Portugal",name:"Santander Totta"},matchScore:2,suggestion:true},"amenity/bank/Sberbank":{name:"Sberbank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q205012"},addTags:{amenity:"bank",brand:"Sberbank","brand:wikidata":"Q205012","brand:wikipedia":"en:Sberbank of Russia",name:"Sberbank"},removeTags:{amenity:"bank",brand:"Sberbank","brand:wikidata":"Q205012","brand:wikipedia":"en:Sberbank of Russia",name:"Sberbank"},matchScore:2,suggestion:true},"amenity/bank/Scotiabank":{name:"Scotiabank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q451476"},addTags:{amenity:"bank",brand:"Scotiabank","brand:wikidata":"Q451476","brand:wikipedia":"en:Scotiabank",name:"Scotiabank"},removeTags:{amenity:"bank",brand:"Scotiabank","brand:wikidata":"Q451476","brand:wikipedia":"en:Scotiabank",name:"Scotiabank"},matchScore:2,suggestion:true},"amenity/bank/Security Bank":{name:"Security Bank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q7444945"},addTags:{amenity:"bank",brand:"Security Bank","brand:wikidata":"Q7444945","brand:wikipedia":"en:Security Bank",name:"Security Bank"},removeTags:{amenity:"bank",brand:"Security Bank","brand:wikidata":"Q7444945","brand:wikipedia":"en:Security Bank",name:"Security Bank"},matchScore:2,suggestion:true},"amenity/bank/Seylan Bank":{name:"Seylan Bank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q3532083"},addTags:{amenity:"bank",brand:"Seylan Bank","brand:wikidata":"Q3532083","brand:wikipedia":"en:Seylan Bank",name:"Seylan Bank"},removeTags:{amenity:"bank",brand:"Seylan Bank","brand:wikidata":"Q3532083","brand:wikipedia":"en:Seylan Bank",name:"Seylan Bank"},matchScore:2,suggestion:true},"amenity/bank/Siam Commercial Bank":{name:"Siam Commercial Bank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q2038986"},addTags:{amenity:"bank",brand:"Siam Commercial Bank","brand:wikidata":"Q2038986","brand:wikipedia":"en:Siam Commercial Bank",name:"Siam Commercial Bank"},removeTags:{amenity:"bank",brand:"Siam Commercial Bank","brand:wikidata":"Q2038986","brand:wikipedia":"en:Siam Commercial Bank",name:"Siam Commercial Bank"},matchScore:2,suggestion:true},"amenity/bank/Sicoob":{name:"Sicoob",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q28679754"},addTags:{amenity:"bank",brand:"Sicoob","brand:wikidata":"Q28679754","brand:wikipedia":"pt:Sistema de Cooperativas de Crédito do Brasil",name:"Sicoob"},removeTags:{amenity:"bank",brand:"Sicoob","brand:wikidata":"Q28679754","brand:wikipedia":"pt:Sistema de Cooperativas de Crédito do Brasil",name:"Sicoob"},matchScore:2,suggestion:true},"amenity/bank/Sicredi":{name:"Sicredi",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q3483060"},addTags:{amenity:"bank",brand:"Sicredi","brand:wikidata":"Q3483060","brand:wikipedia":"pt:Sistema de Crédito Cooperativo",name:"Sicredi"},removeTags:{amenity:"bank",brand:"Sicredi","brand:wikidata":"Q3483060","brand:wikipedia":"pt:Sistema de Crédito Cooperativo",name:"Sicredi"},matchScore:2,suggestion:true},"amenity/bank/Slovenská sporiteľňa":{name:"Slovenská sporiteľňa",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q7541907"},addTags:{amenity:"bank",brand:"Slovenská sporiteľňa","brand:wikidata":"Q7541907","brand:wikipedia":"en:Slovenská sporiteľňa",name:"Slovenská sporiteľňa"},removeTags:{amenity:"bank",brand:"Slovenská sporiteľňa","brand:wikidata":"Q7541907","brand:wikipedia":"en:Slovenská sporiteľňa",name:"Slovenská sporiteľňa"},matchScore:2,suggestion:true},"amenity/bank/Société Générale":{name:"Société Générale",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q270363"},addTags:{amenity:"bank",brand:"Société Générale","brand:wikidata":"Q270363","brand:wikipedia":"en:Société Générale",name:"Société Générale"},removeTags:{amenity:"bank",brand:"Société Générale","brand:wikidata":"Q270363","brand:wikipedia":"en:Société Générale",name:"Société Générale"},matchScore:2,suggestion:true},"amenity/bank/Sonali Bank":{name:"Sonali Bank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q3350382"},addTags:{amenity:"bank",brand:"Sonali Bank","brand:wikipedia":"en:Sonali Bank","brand:wikidata":"Q3350382",name:"Sonali Bank"},removeTags:{amenity:"bank",brand:"Sonali Bank","brand:wikipedia":"en:Sonali Bank","brand:wikidata":"Q3350382",name:"Sonali Bank"},matchScore:2,suggestion:true},"amenity/bank/South Indian Bank":{name:"South Indian Bank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q2044973"},addTags:{amenity:"bank",brand:"South Indian Bank","brand:wikipedia":"en:South Indian Bank","brand:wikidata":"Q2044973",name:"South Indian Bank"},removeTags:{amenity:"bank",brand:"South Indian Bank","brand:wikipedia":"en:South Indian Bank","brand:wikidata":"Q2044973",name:"South Indian Bank"},matchScore:2,suggestion:true},"amenity/bank/Sparda-Bank":{name:"Sparda-Bank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q2307136"},addTags:{amenity:"bank",brand:"Sparda-Bank","brand:wikidata":"Q2307136","brand:wikipedia":"en:Sparda-Bank",name:"Sparda-Bank"},removeTags:{amenity:"bank",brand:"Sparda-Bank","brand:wikidata":"Q2307136","brand:wikipedia":"en:Sparda-Bank",name:"Sparda-Bank"},matchScore:2,suggestion:true},"amenity/bank/Sparkasse":{name:"Sparkasse",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q2513770"},addTags:{amenity:"bank",brand:"Sparkasse","brand:wikidata":"Q2513770","brand:wikipedia":"de:Verband der Freien Sparkassen",name:"Sparkasse"},removeTags:{amenity:"bank",brand:"Sparkasse","brand:wikidata":"Q2513770","brand:wikipedia":"de:Verband der Freien Sparkassen",name:"Sparkasse"},matchScore:2,suggestion:true},"amenity/bank/Stanbic Bank":{name:"Stanbic Bank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q7597999"},addTags:{amenity:"bank",brand:"Stanbic Bank","brand:wikidata":"Q7597999","brand:wikipedia":"en:Stanbic Bank",name:"Stanbic Bank"},removeTags:{amenity:"bank",brand:"Stanbic Bank","brand:wikidata":"Q7597999","brand:wikipedia":"en:Stanbic Bank",name:"Stanbic Bank"},matchScore:2,suggestion:true},"amenity/bank/Standard Bank":{name:"Standard Bank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q1576610"},addTags:{amenity:"bank",brand:"Standard Bank","brand:wikidata":"Q1576610","brand:wikipedia":"en:Standard Bank",name:"Standard Bank"},removeTags:{amenity:"bank",brand:"Standard Bank","brand:wikidata":"Q1576610","brand:wikipedia":"en:Standard Bank",name:"Standard Bank"},matchScore:2,suggestion:true},"amenity/bank/Standard Chartered":{name:"Standard Chartered",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q548278"},addTags:{amenity:"bank",brand:"Standard Chartered","brand:wikidata":"Q548278","brand:wikipedia":"en:Standard Chartered",name:"Standard Chartered"},removeTags:{amenity:"bank",brand:"Standard Chartered","brand:wikidata":"Q548278","brand:wikipedia":"en:Standard Chartered",name:"Standard Chartered"},matchScore:2,suggestion:true},"amenity/bank/State Bank of India":{name:"State Bank of India",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q1340361"},addTags:{amenity:"bank",brand:"State Bank of India","brand:wikidata":"Q1340361","brand:wikipedia":"en:State Bank of India",name:"State Bank of India"},removeTags:{amenity:"bank",brand:"State Bank of India","brand:wikidata":"Q1340361","brand:wikipedia":"en:State Bank of India",name:"State Bank of India"},matchScore:2,suggestion:true},"amenity/bank/Summit Bank":{name:"Summit Bank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q7637775"},addTags:{amenity:"bank",brand:"Summit Bank","brand:wikidata":"Q7637775","brand:wikipedia":"en:Summit Bank",name:"Summit Bank"},removeTags:{amenity:"bank",brand:"Summit Bank","brand:wikidata":"Q7637775","brand:wikipedia":"en:Summit Bank",name:"Summit Bank"},matchScore:2,suggestion:true},"amenity/bank/SunTrust":{name:"SunTrust",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q181507"},addTags:{amenity:"bank",brand:"SunTrust","brand:wikidata":"Q181507","brand:wikipedia":"en:SunTrust Banks",name:"SunTrust"},removeTags:{amenity:"bank",brand:"SunTrust","brand:wikidata":"Q181507","brand:wikipedia":"en:SunTrust Banks",name:"SunTrust"},matchScore:2,suggestion:true},"amenity/bank/Supervielle":{name:"Supervielle",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q5718035"},addTags:{amenity:"bank",brand:"Supervielle","brand:wikidata":"Q5718035","brand:wikipedia":"es:Banco Supervielle",name:"Supervielle"},removeTags:{amenity:"bank",brand:"Supervielle","brand:wikidata":"Q5718035","brand:wikipedia":"es:Banco Supervielle",name:"Supervielle"},matchScore:2,suggestion:true},"amenity/bank/Swedbank":{name:"Swedbank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q1145493"},addTags:{amenity:"bank",brand:"Swedbank","brand:wikidata":"Q1145493","brand:wikipedia":"en:Swedbank",name:"Swedbank"},removeTags:{amenity:"bank",brand:"Swedbank","brand:wikidata":"Q1145493","brand:wikipedia":"en:Swedbank",name:"Swedbank"},matchScore:2,suggestion:true},"amenity/bank/Syndicate Bank":{name:"Syndicate Bank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q2004088"},addTags:{amenity:"bank",brand:"Syndicate Bank","brand:wikidata":"Q2004088","brand:wikipedia":"en:Syndicate Bank",name:"Syndicate Bank"},removeTags:{amenity:"bank",brand:"Syndicate Bank","brand:wikidata":"Q2004088","brand:wikipedia":"en:Syndicate Bank",name:"Syndicate Bank"},matchScore:2,suggestion:true},"amenity/bank/TCF Bank":{name:"TCF Bank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q7669687"},addTags:{amenity:"bank",brand:"TCF Bank","brand:wikidata":"Q7669687","brand:wikipedia":"en:TCF Bank",name:"TCF Bank"},removeTags:{amenity:"bank",brand:"TCF Bank","brand:wikidata":"Q7669687","brand:wikipedia":"en:TCF Bank",name:"TCF Bank"},matchScore:2,suggestion:true},"amenity/bank/TD Bank":{name:"TD Bank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q7669891"},addTags:{amenity:"bank",brand:"TD Bank","brand:wikidata":"Q7669891","brand:wikipedia":"en:TD Bank, N.A.",name:"TD Bank"},removeTags:{amenity:"bank",brand:"TD Bank","brand:wikidata":"Q7669891","brand:wikipedia":"en:TD Bank, N.A.",name:"TD Bank"},matchScore:2,suggestion:true},"amenity/bank/TD Canada Trust":{name:"TD Canada Trust",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q1080670"},addTags:{amenity:"bank",brand:"TD Canada Trust","brand:wikidata":"Q1080670","brand:wikipedia":"en:TD Canada Trust",name:"TD Canada Trust"},removeTags:{amenity:"bank",brand:"TD Canada Trust","brand:wikidata":"Q1080670","brand:wikipedia":"en:TD Canada Trust",name:"TD Canada Trust"},matchScore:2,suggestion:true},"amenity/bank/TEB":{name:"TEB",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q7862447"},addTags:{amenity:"bank",brand:"TEB","brand:wikidata":"Q7862447","brand:wikipedia":"en:Türk Ekonomi Bankası",name:"TEB"},removeTags:{amenity:"bank",brand:"TEB","brand:wikidata":"Q7862447","brand:wikipedia":"en:Türk Ekonomi Bankası",name:"TEB"},matchScore:2,suggestion:true},"amenity/bank/TSB":{name:"TSB",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q7671560"},addTags:{amenity:"bank",brand:"TSB","brand:wikidata":"Q7671560","brand:wikipedia":"en:TSB Bank (United Kingdom)",name:"TSB"},removeTags:{amenity:"bank",brand:"TSB","brand:wikidata":"Q7671560","brand:wikipedia":"en:TSB Bank (United Kingdom)",name:"TSB"},matchScore:2,suggestion:true},"amenity/bank/Targobank":{name:"Targobank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q1455437"},addTags:{amenity:"bank",brand:"Targobank","brand:wikidata":"Q1455437","brand:wikipedia":"en:Targobank",name:"Targobank"},removeTags:{amenity:"bank",brand:"Targobank","brand:wikidata":"Q1455437","brand:wikipedia":"en:Targobank",name:"Targobank"},matchScore:2,suggestion:true},"amenity/bank/Tatra banka":{name:"Tatra banka",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q1718069"},addTags:{amenity:"bank",brand:"Tatra banka","brand:wikidata":"Q1718069","brand:wikipedia":"en:Tatra banka",name:"Tatra banka"},removeTags:{amenity:"bank",brand:"Tatra banka","brand:wikidata":"Q1718069","brand:wikipedia":"en:Tatra banka",name:"Tatra banka"},matchScore:2,suggestion:true},"amenity/bank/Türkiye İş Bankası":{name:"Türkiye İş Bankası",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q909613"},addTags:{amenity:"bank",brand:"Türkiye İş Bankası","brand:wikidata":"Q909613","brand:wikipedia":"en:Türkiye İş Bankası",name:"Türkiye İş Bankası"},removeTags:{amenity:"bank",brand:"Türkiye İş Bankası","brand:wikidata":"Q909613","brand:wikipedia":"en:Türkiye İş Bankası",name:"Türkiye İş Bankası"},matchScore:2,suggestion:true},"amenity/bank/UBA":{name:"UBA",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q513457"},addTags:{amenity:"bank",brand:"UBA","brand:wikidata":"Q513457","brand:wikipedia":"en:United Bank for Africa",name:"UBA"},removeTags:{amenity:"bank",brand:"UBA","brand:wikidata":"Q513457","brand:wikipedia":"en:United Bank for Africa",name:"UBA"},matchScore:2,suggestion:true},"amenity/bank/UBI Banca":{name:"UBI Banca",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q1476162"},addTags:{amenity:"bank",brand:"UBI Banca","brand:wikidata":"Q1476162","brand:wikipedia":"en:UBI Banca",name:"UBI Banca"},removeTags:{amenity:"bank",brand:"UBI Banca","brand:wikidata":"Q1476162","brand:wikipedia":"en:UBI Banca",name:"UBI Banca"},matchScore:2,suggestion:true},"amenity/bank/UBL":{name:"UBL",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q7887504"},addTags:{amenity:"bank",brand:"UBL","brand:en":"United Bank Limited Pakistan","brand:wikidata":"Q7887504","brand:wikipedia":"ur:یونائیٹڈ بینک (پاکستان)",name:"UBL","name:en":"United Bank Limited Pakistan"},removeTags:{amenity:"bank",brand:"UBL","brand:en":"United Bank Limited Pakistan","brand:wikidata":"Q7887504","brand:wikipedia":"ur:یونائیٹڈ بینک (پاکستان)",name:"UBL","name:en":"United Bank Limited Pakistan"},matchScore:2,suggestion:true},"amenity/bank/UBS":{name:"UBS",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q193199"},addTags:{amenity:"bank",brand:"UBS","brand:wikidata":"Q193199","brand:wikipedia":"en:UBS",name:"UBS"},removeTags:{amenity:"bank",brand:"UBS","brand:wikidata":"Q193199","brand:wikipedia":"en:UBS",name:"UBS"},matchScore:2,suggestion:true},"amenity/bank/UCO Bank":{name:"UCO Bank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q2005310"},addTags:{amenity:"bank",brand:"UCO Bank","brand:wikidata":"Q2005310","brand:wikipedia":"en:UCO Bank",name:"UCO Bank"},removeTags:{amenity:"bank",brand:"UCO Bank","brand:wikidata":"Q2005310","brand:wikipedia":"en:UCO Bank",name:"UCO Bank"},matchScore:2,suggestion:true},"amenity/bank/UCPB":{name:"UCPB",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q7887615"},addTags:{amenity:"bank",brand:"UCPB","brand:wikidata":"Q7887615","brand:wikipedia":"en:United Coconut Planters Bank",name:"UCPB"},removeTags:{amenity:"bank",brand:"UCPB","brand:wikidata":"Q7887615","brand:wikipedia":"en:United Coconut Planters Bank",name:"UCPB"},matchScore:2,suggestion:true},"amenity/bank/UOB":{name:"UOB",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q2064074"},addTags:{amenity:"bank",brand:"UOB","brand:wikidata":"Q2064074","brand:wikipedia":"en:United Overseas Bank",name:"UOB"},removeTags:{amenity:"bank",brand:"UOB","brand:wikidata":"Q2064074","brand:wikipedia":"en:United Overseas Bank",name:"UOB"},matchScore:2,suggestion:true},"amenity/bank/US Bank":{name:"US Bank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q739084"},addTags:{amenity:"bank",brand:"US Bank","brand:wikidata":"Q739084","brand:wikipedia":"en:U.S. Bancorp",name:"US Bank"},removeTags:{amenity:"bank",brand:"US Bank","brand:wikidata":"Q739084","brand:wikipedia":"en:U.S. Bancorp",name:"US Bank"},matchScore:2,suggestion:true},"amenity/bank/Ulster Bank":{name:"Ulster Bank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q2613366"},addTags:{amenity:"bank",brand:"Ulster Bank","brand:wikidata":"Q2613366","brand:wikipedia":"en:Ulster Bank",name:"Ulster Bank"},removeTags:{amenity:"bank",brand:"Ulster Bank","brand:wikidata":"Q2613366","brand:wikipedia":"en:Ulster Bank",name:"Ulster Bank"},matchScore:2,suggestion:true},"amenity/bank/Umpqua Bank":{name:"Umpqua Bank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q7881772"},addTags:{amenity:"bank",brand:"Umpqua Bank","brand:wikidata":"Q7881772","brand:wikipedia":"en:Umpqua Holdings Corporation",name:"Umpqua Bank"},removeTags:{amenity:"bank",brand:"Umpqua Bank","brand:wikidata":"Q7881772","brand:wikipedia":"en:Umpqua Holdings Corporation",name:"Umpqua Bank"},matchScore:2,suggestion:true},"amenity/bank/UniCredit Bank":{name:"UniCredit Bank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q45568"},addTags:{amenity:"bank",brand:"UniCredit Bank","brand:wikidata":"Q45568","brand:wikipedia":"en:UniCredit",name:"UniCredit Bank"},removeTags:{amenity:"bank",brand:"UniCredit Bank","brand:wikidata":"Q45568","brand:wikipedia":"en:UniCredit",name:"UniCredit Bank"},matchScore:2,suggestion:true},"amenity/bank/Unicaja Banco":{name:"Unicaja Banco",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q2543704"},addTags:{amenity:"bank",brand:"Unicaja Banco","brand:wikidata":"Q2543704","brand:wikipedia":"en:Unicaja",name:"Unicaja Banco"},removeTags:{amenity:"bank",brand:"Unicaja Banco","brand:wikidata":"Q2543704","brand:wikipedia":"en:Unicaja",name:"Unicaja Banco"},matchScore:2,suggestion:true},"amenity/bank/Union Bank of India":{name:"Union Bank of India",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q2004078"},addTags:{amenity:"bank",brand:"Union Bank of India","brand:wikidata":"Q2004078","brand:wikipedia":"en:Union Bank of India",name:"Union Bank of India"},removeTags:{amenity:"bank",brand:"Union Bank of India","brand:wikidata":"Q2004078","brand:wikipedia":"en:Union Bank of India",name:"Union Bank of India"},matchScore:2,suggestion:true},"amenity/bank/UnionBank (Philippines)":{name:"UnionBank (Philippines)",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q7885403"},addTags:{amenity:"bank",brand:"UnionBank","brand:wikidata":"Q7885403","brand:wikipedia":"en:Union Bank of the Philippines",name:"UnionBank"},removeTags:{amenity:"bank",brand:"UnionBank","brand:wikidata":"Q7885403","brand:wikipedia":"en:Union Bank of the Philippines",name:"UnionBank"},matchScore:2,suggestion:true},"amenity/bank/UnionBank (USA)":{name:"UnionBank (USA)",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q1442804"},addTags:{amenity:"bank",brand:"UnionBank","brand:wikidata":"Q1442804","brand:wikipedia":"en:MUFG Union Bank",name:"UnionBank"},removeTags:{amenity:"bank",brand:"UnionBank","brand:wikidata":"Q1442804","brand:wikipedia":"en:MUFG Union Bank",name:"UnionBank"},matchScore:2,suggestion:true},"amenity/bank/Vakıfbank":{name:"Vakıfbank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q1148521"},addTags:{amenity:"bank",brand:"Vakıfbank","brand:wikidata":"Q1148521","brand:wikipedia":"en:VakıfBank",name:"Vakıfbank"},removeTags:{amenity:"bank",brand:"Vakıfbank","brand:wikidata":"Q1148521","brand:wikipedia":"en:VakıfBank",name:"Vakıfbank"},matchScore:2,suggestion:true},"amenity/bank/Veneto Banca":{name:"Veneto Banca",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q3127221"},addTags:{amenity:"bank",brand:"Veneto Banca","brand:wikidata":"Q3127221","brand:wikipedia":"en:Veneto Banca",name:"Veneto Banca"},removeTags:{amenity:"bank",brand:"Veneto Banca","brand:wikidata":"Q3127221","brand:wikipedia":"en:Veneto Banca",name:"Veneto Banca"},matchScore:2,suggestion:true},"amenity/bank/Vijaya Bank":{name:"Vijaya Bank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q2003171"},addTags:{amenity:"bank",brand:"Vijaya Bank","brand:wikidata":"Q2003171","brand:wikipedia":"en:Vijaya Bank",name:"Vijaya Bank"},removeTags:{amenity:"bank",brand:"Vijaya Bank","brand:wikidata":"Q2003171","brand:wikipedia":"en:Vijaya Bank",name:"Vijaya Bank"},matchScore:2,suggestion:true},"amenity/bank/Volksbank":{name:"Volksbank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q695110"},addTags:{amenity:"bank",brand:"Volksbank","brand:wikidata":"Q695110","brand:wikipedia":"en:Volksbank",name:"Volksbank"},removeTags:{amenity:"bank",brand:"Volksbank","brand:wikidata":"Q695110","brand:wikipedia":"en:Volksbank",name:"Volksbank"},matchScore:2,suggestion:true},"amenity/bank/Volksbank Köln Bonn eG":{name:"Volksbank Köln Bonn eG",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q41680844"},addTags:{amenity:"bank",brand:"Volksbank Köln Bonn eG","brand:wikidata":"Q41680844","brand:wikipedia":"de:Volksbank Köln Bonn",name:"Volksbank"},removeTags:{amenity:"bank",brand:"Volksbank Köln Bonn eG","brand:wikidata":"Q41680844","brand:wikipedia":"de:Volksbank Köln Bonn",name:"Volksbank"},matchScore:2,suggestion:true},"amenity/bank/VÚB":{name:"VÚB",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q12778981"},addTags:{amenity:"bank",brand:"VÚB","brand:wikidata":"Q12778981","brand:wikipedia":"en:Všeobecná úverová banka",name:"VÚB"},removeTags:{amenity:"bank",brand:"VÚB","brand:wikidata":"Q12778981","brand:wikipedia":"en:Všeobecná úverová banka",name:"VÚB"},matchScore:2,suggestion:true},"amenity/bank/Washington Federal":{name:"Washington Federal",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q7971859"},addTags:{amenity:"bank",brand:"Washington Federal","brand:wikidata":"Q7971859","brand:wikipedia":"en:Washington Federal",name:"Washington Federal"},removeTags:{amenity:"bank",brand:"Washington Federal","brand:wikidata":"Q7971859","brand:wikipedia":"en:Washington Federal",name:"Washington Federal"},matchScore:2,suggestion:true},"amenity/bank/Wells Fargo":{name:"Wells Fargo",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q744149"},addTags:{amenity:"bank",brand:"Wells Fargo","brand:wikidata":"Q744149","brand:wikipedia":"en:Wells Fargo",name:"Wells Fargo"},removeTags:{amenity:"bank",brand:"Wells Fargo","brand:wikidata":"Q744149","brand:wikipedia":"en:Wells Fargo",name:"Wells Fargo"},matchScore:2,suggestion:true},"amenity/bank/Western Union":{name:"Western Union",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q861042"},addTags:{amenity:"bank",brand:"Western Union","brand:wikidata":"Q861042","brand:wikipedia":"en:Western Union",name:"Western Union"},removeTags:{amenity:"bank",brand:"Western Union","brand:wikidata":"Q861042","brand:wikipedia":"en:Western Union",name:"Western Union"},matchScore:2,suggestion:true},"amenity/bank/Westpac":{name:"Westpac",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q2031726"},addTags:{amenity:"bank",brand:"Westpac","brand:wikidata":"Q2031726","brand:wikipedia":"en:Westpac",name:"Westpac"},removeTags:{amenity:"bank",brand:"Westpac","brand:wikidata":"Q2031726","brand:wikipedia":"en:Westpac",name:"Westpac"},matchScore:2,suggestion:true},"amenity/bank/Yapı Kredi":{name:"Yapı Kredi",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q8049138"},addTags:{amenity:"bank",brand:"Yapı Kredi","brand:wikidata":"Q8049138","brand:wikipedia":"en:Yapı ve Kredi Bankası",name:"Yapı Kredi"},removeTags:{amenity:"bank",brand:"Yapı Kredi","brand:wikidata":"Q8049138","brand:wikipedia":"en:Yapı ve Kredi Bankası",name:"Yapı Kredi"},matchScore:2,suggestion:true},"amenity/bank/Yorkshire Bank":{name:"Yorkshire Bank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q8055678"},addTags:{amenity:"bank",brand:"Yorkshire Bank","brand:wikidata":"Q8055678","brand:wikipedia":"en:Yorkshire Bank",name:"Yorkshire Bank"},removeTags:{amenity:"bank",brand:"Yorkshire Bank","brand:wikidata":"Q8055678","brand:wikipedia":"en:Yorkshire Bank",name:"Yorkshire Bank"},matchScore:2,suggestion:true},"amenity/bank/Yorkshire Building Society":{name:"Yorkshire Building Society",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q12073381"},addTags:{amenity:"bank",brand:"Yorkshire Building Society","brand:wikidata":"Q12073381","brand:wikipedia":"en:Yorkshire Building Society",name:"Yorkshire Building Society"},removeTags:{amenity:"bank",brand:"Yorkshire Building Society","brand:wikidata":"Q12073381","brand:wikipedia":"en:Yorkshire Building Society",name:"Yorkshire Building Society"},matchScore:2,suggestion:true},"amenity/bank/Zagrebačka banka":{name:"Zagrebačka banka",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q140381"},addTags:{amenity:"bank",brand:"Zagrebačka banka","brand:wikidata":"Q140381","brand:wikipedia":"en:Zagrebačka banka",name:"Zagrebačka banka"},removeTags:{amenity:"bank",brand:"Zagrebačka banka","brand:wikidata":"Q140381","brand:wikipedia":"en:Zagrebačka banka",name:"Zagrebačka banka"},matchScore:2,suggestion:true},"amenity/bank/Zenith Bank":{name:"Zenith Bank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q5978240"},addTags:{amenity:"bank",brand:"Zenith Bank","brand:wikidata":"Q5978240","brand:wikipedia":"en:Zenith Bank",name:"Zenith Bank"},removeTags:{amenity:"bank",brand:"Zenith Bank","brand:wikidata":"Q5978240","brand:wikipedia":"en:Zenith Bank",name:"Zenith Bank"},matchScore:2,suggestion:true},"amenity/bank/Ziraat Bankası":{name:"Ziraat Bankası",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q696003"},addTags:{amenity:"bank",brand:"Ziraat Bankası","brand:wikidata":"Q696003","brand:wikipedia":"en:Ziraat Bankası",name:"Ziraat Bankası"},removeTags:{amenity:"bank",brand:"Ziraat Bankası","brand:wikidata":"Q696003","brand:wikipedia":"en:Ziraat Bankası",name:"Ziraat Bankası"},matchScore:2,suggestion:true},"amenity/bank/mBank":{name:"mBank",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q1160928"},addTags:{amenity:"bank",brand:"mBank","brand:wikidata":"Q1160928","brand:wikipedia":"en:MBank",name:"mBank"},removeTags:{amenity:"bank",brand:"mBank","brand:wikidata":"Q1160928","brand:wikipedia":"en:MBank",name:"mBank"},matchScore:2,suggestion:true},"amenity/bank/ČSOB":{name:"ČSOB",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q340135"},addTags:{amenity:"bank",brand:"ČSOB","brand:wikidata":"Q340135","brand:wikipedia":"en:Československá obchodní banka",name:"ČSOB"},removeTags:{amenity:"bank",brand:"ČSOB","brand:wikidata":"Q340135","brand:wikipedia":"en:Československá obchodní banka",name:"ČSOB"},matchScore:2,suggestion:true},"amenity/bank/Česká spořitelna":{name:"Česká spořitelna",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q341100"},addTags:{amenity:"bank",brand:"Česká spořitelna","brand:wikidata":"Q341100","brand:wikipedia":"en:Česká spořitelna",name:"Česká spořitelna"},removeTags:{amenity:"bank",brand:"Česká spořitelna","brand:wikidata":"Q341100","brand:wikipedia":"en:Česká spořitelna",name:"Česká spořitelna"},matchScore:2,suggestion:true},"amenity/bank/İş Bankası":{name:"İş Bankası",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q909613"},addTags:{amenity:"bank",brand:"İş Bankası","brand:wikidata":"Q909613","brand:wikipedia":"en:Türkiye İş Bankası",name:"İş Bankası"},removeTags:{amenity:"bank",brand:"İş Bankası","brand:wikidata":"Q909613","brand:wikipedia":"en:Türkiye İş Bankası",name:"İş Bankası"},matchScore:2,suggestion:true},"amenity/bank/Εθνική Τράπεζα":{name:"Εθνική Τράπεζα",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q1816028"},addTags:{amenity:"bank",brand:"Εθνική Τράπεζα","brand:en":"National Bank of Greece","brand:wikidata":"Q1816028","brand:wikipedia":"en:National Bank of Greece",name:"Εθνική Τράπεζα","name:en":"National Bank of Greece"},removeTags:{amenity:"bank",brand:"Εθνική Τράπεζα","brand:en":"National Bank of Greece","brand:wikidata":"Q1816028","brand:wikipedia":"en:National Bank of Greece",name:"Εθνική Τράπεζα","name:en":"National Bank of Greece"},matchScore:2,suggestion:true},"amenity/bank/Τράπεζα Πειραιώς":{name:"Τράπεζα Πειραιώς",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q3312"},addTags:{amenity:"bank",brand:"Τράπεζα Πειραιώς","brand:en":"Piraeus Bank","brand:wikidata":"Q3312","brand:wikipedia":"en:Piraeus Bank",name:"Τράπεζα Πειραιώς","name:en":"Piraeus Bank"},removeTags:{amenity:"bank",brand:"Τράπεζα Πειραιώς","brand:en":"Piraeus Bank","brand:wikidata":"Q3312","brand:wikipedia":"en:Piraeus Bank",name:"Τράπεζα Πειραιώς","name:en":"Piraeus Bank"},matchScore:2,suggestion:true},"amenity/bank/Альфа-Банк":{name:"Альфа-Банк",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q1377835"},addTags:{amenity:"bank",brand:"Альфа-Банк","brand:en":"Alfa-Bank","brand:wikidata":"Q1377835","brand:wikipedia":"en:Alfa-Bank",name:"Альфа-Банк","name:en":"Alfa-Bank"},removeTags:{amenity:"bank",brand:"Альфа-Банк","brand:en":"Alfa-Bank","brand:wikidata":"Q1377835","brand:wikipedia":"en:Alfa-Bank",name:"Альфа-Банк","name:en":"Alfa-Bank"},matchScore:2,suggestion:true},"amenity/bank/Банка ДСК":{name:"Банка ДСК",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q5206146"},addTags:{amenity:"bank",brand:"Банка ДСК","brand:en":"DSK Bank","brand:wikidata":"Q5206146","brand:wikipedia":"en:DSK Bank",name:"Банка ДСК","name:en":"DSK Bank"},removeTags:{amenity:"bank",brand:"Банка ДСК","brand:en":"DSK Bank","brand:wikidata":"Q5206146","brand:wikipedia":"en:DSK Bank",name:"Банка ДСК","name:en":"DSK Bank"},matchScore:2,suggestion:true},"amenity/bank/Белагропромбанк":{name:"Белагропромбанк",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q1991373"},addTags:{amenity:"bank",brand:"Белагропромбанк","brand:en":"Belagroprom Bank","brand:wikidata":"Q1991373","brand:wikipedia":"be:Белаграпрамбанк",name:"Белагропромбанк","name:en":"Belagroprom Bank"},removeTags:{amenity:"bank",brand:"Белагропромбанк","brand:en":"Belagroprom Bank","brand:wikidata":"Q1991373","brand:wikipedia":"be:Белаграпрамбанк",name:"Белагропромбанк","name:en":"Belagroprom Bank"},matchScore:2,suggestion:true},"amenity/bank/Беларусбанк":{name:"Беларусбанк",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q1997334"},addTags:{amenity:"bank",brand:"Беларусбанк","brand:en":"Belarusbank","brand:wikidata":"Q1997334","brand:wikipedia":"en:Belarusbank",name:"Беларусбанк","name:en":"Belarusbank"},removeTags:{amenity:"bank",brand:"Беларусбанк","brand:en":"Belarusbank","brand:wikidata":"Q1997334","brand:wikipedia":"en:Belarusbank",name:"Беларусбанк","name:en":"Belarusbank"},matchScore:2,suggestion:true},"amenity/bank/Белинвестбанк":{name:"Белинвестбанк",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q4081940"},addTags:{amenity:"bank",brand:"Белинвестбанк","brand:wikidata":"Q4081940","brand:wikipedia":"ru:Белинвестбанк",name:"Белинвестбанк"},removeTags:{amenity:"bank",brand:"Белинвестбанк","brand:wikidata":"Q4081940","brand:wikipedia":"ru:Белинвестбанк",name:"Белинвестбанк"},matchScore:2,suggestion:true},"amenity/bank/Бинбанк":{name:"Бинбанк",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q4086829"},addTags:{amenity:"bank",brand:"Бинбанк","brand:en":"B&N Bank","brand:wikidata":"Q4086829","brand:wikipedia":"en:B&N Bank",name:"Бинбанк","name:en":"B&N Bank"},removeTags:{amenity:"bank",brand:"Бинбанк","brand:en":"B&N Bank","brand:wikidata":"Q4086829","brand:wikipedia":"en:B&N Bank",name:"Бинбанк","name:en":"B&N Bank"},matchScore:2,suggestion:true},"amenity/bank/ВТБ":{name:"ВТБ",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q1549389"},addTags:{amenity:"bank",brand:"ВТБ","brand:en":"VTB Bank","brand:wikidata":"Q1549389","brand:wikipedia":"en:VTB Bank",name:"ВТБ","name:en":"VTB Bank"},removeTags:{amenity:"bank",brand:"ВТБ","brand:en":"VTB Bank","brand:wikidata":"Q1549389","brand:wikipedia":"en:VTB Bank",name:"ВТБ","name:en":"VTB Bank"},matchScore:2,suggestion:true},"amenity/bank/Возрождение":{name:"Возрождение",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q4114952"},addTags:{amenity:"bank",brand:"Возрождение","brand:wikidata":"Q4114952","brand:wikipedia":"en:Возрождение (банк)",name:"Возрождение"},removeTags:{amenity:"bank",brand:"Возрождение","brand:wikidata":"Q4114952","brand:wikipedia":"en:Возрождение (банк)",name:"Возрождение"},matchScore:2,suggestion:true},"amenity/bank/Газпромбанк":{name:"Газпромбанк",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q1924338"},addTags:{amenity:"bank",brand:"Газпромбанк","brand:en":"Gazprombank","brand:wikidata":"Q1924338","brand:wikipedia":"en:Gazprombank",name:"Газпромбанк","name:en":"Gazprombank"},removeTags:{amenity:"bank",brand:"Газпромбанк","brand:en":"Gazprombank","brand:wikidata":"Q1924338","brand:wikipedia":"en:Gazprombank",name:"Газпромбанк","name:en":"Gazprombank"},matchScore:2,suggestion:true},"amenity/bank/Казкоммерцбанк":{name:"Казкоммерцбанк",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q1168179"},addTags:{amenity:"bank",brand:"Казкоммерцбанк","brand:en":"Kazkommertsbank","brand:wikidata":"Q1168179","brand:wikipedia":"en:Kazkommertsbank",name:"Казкоммерцбанк","name:en":"Kazkommertsbank"},removeTags:{amenity:"bank",brand:"Казкоммерцбанк","brand:en":"Kazkommertsbank","brand:wikidata":"Q1168179","brand:wikipedia":"en:Kazkommertsbank",name:"Казкоммерцбанк","name:en":"Kazkommertsbank"},matchScore:2,suggestion:true},"amenity/bank/Московский индустриальный банк":{name:"Московский индустриальный банк",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q4304145"},addTags:{amenity:"bank",brand:"Московский индустриальный банк","brand:en":"Moscow Industrial Bank","brand:wikidata":"Q4304145","brand:wikipedia":"ru:Московский индустриальный банк",name:"Московский индустриальный банк","name:en":"Moscow Industrial Bank"},removeTags:{amenity:"bank",brand:"Московский индустриальный банк","brand:en":"Moscow Industrial Bank","brand:wikidata":"Q4304145","brand:wikipedia":"ru:Московский индустриальный банк",name:"Московский индустриальный банк","name:en":"Moscow Industrial Bank"},matchScore:2,suggestion:true},"amenity/bank/Мособлбанк":{name:"Мособлбанк",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q4304446"},addTags:{amenity:"bank",brand:"Мособлбанк","brand:en":"Mosobl Bank","brand:wikidata":"Q4304446","brand:wikipedia":"ru:Мособлбанк",name:"Мособлбанк","name:en":"Mosobl Bank"},removeTags:{amenity:"bank",brand:"Мособлбанк","brand:en":"Mosobl Bank","brand:wikidata":"Q4304446","brand:wikipedia":"ru:Мособлбанк",name:"Мособлбанк","name:en":"Mosobl Bank"},matchScore:2,suggestion:true},"amenity/bank/ОТП Банк":{name:"ОТП Банк",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q912778"},addTags:{amenity:"bank",brand:"ОТП Банк","brand:en":"OTP Bank","brand:wikidata":"Q912778","brand:wikipedia":"en:OTP Bank",name:"ОТП Банк","name:en":"OTP Bank"},removeTags:{amenity:"bank",brand:"ОТП Банк","brand:en":"OTP Bank","brand:wikidata":"Q912778","brand:wikipedia":"en:OTP Bank",name:"ОТП Банк","name:en":"OTP Bank"},matchScore:2,suggestion:true},"amenity/bank/Обединена Българска Банка":{name:"Обединена Българска Банка",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q7887555"},addTags:{amenity:"bank",brand:"Обединена Българска Банка","brand:en":"United Bulgarian Bank","brand:wikidata":"Q7887555","brand:wikipedia":"en:United Bulgarian Bank",name:"Обединена Българска Банка","name:en":"United Bulgarian Bank"},removeTags:{amenity:"bank",brand:"Обединена Българска Банка","brand:en":"United Bulgarian Bank","brand:wikidata":"Q7887555","brand:wikipedia":"en:United Bulgarian Bank",name:"Обединена Българска Банка","name:en":"United Bulgarian Bank"},matchScore:2,suggestion:true},"amenity/bank/Ощадбанк":{name:"Ощадбанк",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q4340839"},addTags:{amenity:"bank",brand:"Ощадбанк","brand:en":"State Savings Bank of Ukraine","brand:wikidata":"Q4340839","brand:wikipedia":"uk:Ощадбанк",name:"Ощадбанк","name:en":"State Savings Bank of Ukraine"},removeTags:{amenity:"bank",brand:"Ощадбанк","brand:en":"State Savings Bank of Ukraine","brand:wikidata":"Q4340839","brand:wikipedia":"uk:Ощадбанк",name:"Ощадбанк","name:en":"State Savings Bank of Ukraine"},matchScore:2,suggestion:true},"amenity/bank/ПУМБ":{name:"ПУМБ",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q4341156"},addTags:{amenity:"bank",brand:"ПУМБ","brand:en":"First Ukrainian International Bank","brand:wikidata":"Q4341156","brand:wikipedia":"en:First Ukrainian International Bank",name:"ПУМБ","name:en":"First Ukrainian International Bank"},removeTags:{amenity:"bank",brand:"ПУМБ","brand:en":"First Ukrainian International Bank","brand:wikidata":"Q4341156","brand:wikipedia":"en:First Ukrainian International Bank",name:"ПУМБ","name:en":"First Ukrainian International Bank"},matchScore:2,suggestion:true},"amenity/bank/Почта Банк":{name:"Почта Банк",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q24930461"},addTags:{amenity:"bank",brand:"Почта Банк","brand:en":"Post Bank","brand:wikidata":"Q24930461","brand:wikipedia":"en:Post Bank (Russia)",name:"Почта Банк","name:en":"Post Bank"},removeTags:{amenity:"bank",brand:"Почта Банк","brand:en":"Post Bank","brand:wikidata":"Q24930461","brand:wikipedia":"en:Post Bank (Russia)",name:"Почта Банк","name:en":"Post Bank"},matchScore:2,suggestion:true},"amenity/bank/ПриватБанк":{name:"ПриватБанк",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q1515015"},addTags:{amenity:"bank",brand:"ПриватБанк","brand:en":"PrivatBank","brand:wikidata":"Q1515015","brand:wikipedia":"uk:ПриватБанк",name:"ПриватБанк","name:en":"PrivatBank"},removeTags:{amenity:"bank",brand:"ПриватБанк","brand:en":"PrivatBank","brand:wikidata":"Q1515015","brand:wikipedia":"uk:ПриватБанк",name:"ПриватБанк","name:en":"PrivatBank"},matchScore:2,suggestion:true},"amenity/bank/Приорбанк":{name:"Приорбанк",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q3919658"},addTags:{amenity:"bank",brand:"Приорбанк","brand:en":"PriorBank","brand:wikidata":"Q3919658","brand:wikipedia":"be:Пріорбанк",name:"Приорбанк","name:en":"PriorBank"},removeTags:{amenity:"bank",brand:"Приорбанк","brand:en":"PriorBank","brand:wikidata":"Q3919658","brand:wikipedia":"be:Пріорбанк",name:"Приорбанк","name:en":"PriorBank"},matchScore:2,suggestion:true},"amenity/bank/Промсвязьбанк":{name:"Промсвязьбанк",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q649100"},addTags:{amenity:"bank",brand:"Промсвязьбанк","brand:en":"Promsvyazbank","brand:wikidata":"Q649100","brand:wikipedia":"en:Promsvyazbank",name:"Промсвязьбанк","name:en":"Promsvyazbank"},removeTags:{amenity:"bank",brand:"Промсвязьбанк","brand:en":"Promsvyazbank","brand:wikidata":"Q649100","brand:wikipedia":"en:Promsvyazbank",name:"Промсвязьбанк","name:en":"Promsvyazbank"},matchScore:2,suggestion:true},"amenity/bank/РНКБ":{name:"РНКБ",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q16912944"},addTags:{amenity:"bank",brand:"РНКБ","brand:wikidata":"Q16912944","brand:wikipedia":"en:Russian National Commercial Bank",name:"РНКБ"},removeTags:{amenity:"bank",brand:"РНКБ","brand:wikidata":"Q16912944","brand:wikipedia":"en:Russian National Commercial Bank",name:"РНКБ"},matchScore:2,suggestion:true},"amenity/bank/Райффайзен":{name:"Райффайзен",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q4389244"},addTags:{amenity:"bank",brand:"Райффайзен","brand:en":"Raiffeisenbank","brand:wikidata":"Q4389244","brand:wikipedia":"en:Raiffeisenbank (Russia)",name:"Райффайзен","name:en":"Raiffeisenbank"},removeTags:{amenity:"bank",brand:"Райффайзен","brand:en":"Raiffeisenbank","brand:wikidata":"Q4389244","brand:wikipedia":"en:Raiffeisenbank (Russia)",name:"Райффайзен","name:en":"Raiffeisenbank"},matchScore:2,suggestion:true},"amenity/bank/Райффайзен Банк Аваль":{name:"Райффайзен Банк Аваль",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q4389243"},addTags:{amenity:"bank",brand:"Райффайзен Банк Аваль","brand:en":"Raiffeisen Bank Aval","brand:wikidata":"Q4389243","brand:wikipedia":"en:Raiffeisen Bank Aval",name:"Райффайзен Банк Аваль","name:en":"Raiffeisen Bank Aval"},removeTags:{amenity:"bank",brand:"Райффайзен Банк Аваль","brand:en":"Raiffeisen Bank Aval","brand:wikidata":"Q4389243","brand:wikipedia":"en:Raiffeisen Bank Aval",name:"Райффайзен Банк Аваль","name:en":"Raiffeisen Bank Aval"},matchScore:2,suggestion:true},"amenity/bank/Росбанк":{name:"Росбанк",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q1119857"},addTags:{amenity:"bank",brand:"Росбанк","brand:en":"Rosbank","brand:wikidata":"Q1119857","brand:wikipedia":"en:Rosbank",name:"Росбанк","name:en":"Rosbank"},removeTags:{amenity:"bank",brand:"Росбанк","brand:en":"Rosbank","brand:wikidata":"Q1119857","brand:wikipedia":"en:Rosbank",name:"Росбанк","name:en":"Rosbank"},matchScore:2,suggestion:true},"amenity/bank/Россельхозбанк":{name:"Россельхозбанк",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q3920226"},addTags:{amenity:"bank",brand:"Россельхозбанк","brand:en":"Rosselkhozbank","brand:wikidata":"Q3920226","brand:wikipedia":"en:Rosselkhozbank",name:"Россельхозбанк","name:en":"Rosselkhozbank"},removeTags:{amenity:"bank",brand:"Россельхозбанк","brand:en":"Rosselkhozbank","brand:wikidata":"Q3920226","brand:wikipedia":"en:Rosselkhozbank",name:"Россельхозбанк","name:en":"Rosselkhozbank"},matchScore:2,suggestion:true},"amenity/bank/Русский Стандарт":{name:"Русский Стандарт",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q4400854"},addTags:{amenity:"bank",brand:"Русский Стандарт","brand:en":"Russian Standard Bank","brand:wikidata":"Q4400854","brand:wikipedia":"en:Russian Standard Bank",name:"Русский Стандарт","name:en":"Russian Standard Bank"},removeTags:{amenity:"bank",brand:"Русский Стандарт","brand:en":"Russian Standard Bank","brand:wikidata":"Q4400854","brand:wikipedia":"en:Russian Standard Bank",name:"Русский Стандарт","name:en":"Russian Standard Bank"},matchScore:2,suggestion:true},"amenity/bank/Сбербанк":{name:"Сбербанк",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q4378147"},addTags:{amenity:"bank",brand:"Сбербанк","brand:en":"Prisbank","brand:wikidata":"Q4378147","brand:wikipedia":"ru:Приднестровский Сбербанк",name:"Сбербанк","name:en":"Prisbank"},removeTags:{amenity:"bank",brand:"Сбербанк","brand:en":"Prisbank","brand:wikidata":"Q4378147","brand:wikipedia":"ru:Приднестровский Сбербанк",name:"Сбербанк","name:en":"Prisbank"},matchScore:2,suggestion:true},"amenity/bank/Совкомбанк":{name:"Совкомбанк",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q4426566"},addTags:{amenity:"bank",brand:"Совкомбанк","brand:en":"Sovcom Bank","brand:wikidata":"Q4426566","brand:wikipedia":"ru:Совкомбанк",name:"Совкомбанк","name:en":"Sovcom Bank"},removeTags:{amenity:"bank",brand:"Совкомбанк","brand:en":"Sovcom Bank","brand:wikidata":"Q4426566","brand:wikipedia":"ru:Совкомбанк",name:"Совкомбанк","name:en":"Sovcom Bank"},matchScore:2,suggestion:true},"amenity/bank/УкрСиббанк":{name:"УкрСиббанк",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q1976290"},addTags:{amenity:"bank",brand:"УкрСиббанк","brand:en":"UkrSibbank","brand:wikidata":"Q1976290","brand:wikipedia":"en:UkrSibbank",name:"УкрСиббанк","name:en":"UkrSibbank"},removeTags:{amenity:"bank",brand:"УкрСиббанк","brand:en":"UkrSibbank","brand:wikidata":"Q1976290","brand:wikipedia":"en:UkrSibbank",name:"УкрСиббанк","name:en":"UkrSibbank"},matchScore:2,suggestion:true},"amenity/bank/Укргазбанк":{name:"Укргазбанк",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q4470692"},addTags:{amenity:"bank",brand:"Укргазбанк","brand:en":"Ukrgasbank","brand:wikidata":"Q4470692","brand:wikipedia":"ru:Укргазбанк",name:"Укргазбанк","name:en":"Ukrgasbank"},removeTags:{amenity:"bank",brand:"Укргазбанк","brand:en":"Ukrgasbank","brand:wikidata":"Q4470692","brand:wikipedia":"ru:Укргазбанк",name:"Укргазбанк","name:en":"Ukrgasbank"},matchScore:2,suggestion:true},"amenity/bank/Укрсоцбанк":{name:"Укрсоцбанк",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q3547885"},addTags:{amenity:"bank",brand:"Укрсоцбанк","brand:en":"Ukrsotsbank","brand:wikidata":"Q3547885","brand:wikipedia":"en:Ukrsotsbank",name:"Укрсоцбанк","name:en":"Ukrsotsbank"},removeTags:{amenity:"bank",brand:"Укрсоцбанк","brand:en":"Ukrsotsbank","brand:wikidata":"Q3547885","brand:wikipedia":"en:Ukrsotsbank",name:"Укрсоцбанк","name:en":"Ukrsotsbank"},matchScore:2,suggestion:true},"amenity/bank/Уралсиб":{name:"Уралсиб",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q4476693"},addTags:{amenity:"bank",brand:"Уралсиб","brand:en":"Uralsib bank","brand:wikidata":"Q4476693","brand:wikipedia":"ru:Уралсиб (банк)",name:"Уралсиб","name:en":"Uralsib bank"},removeTags:{amenity:"bank",brand:"Уралсиб","brand:en":"Uralsib bank","brand:wikidata":"Q4476693","brand:wikipedia":"ru:Уралсиб (банк)",name:"Уралсиб","name:en":"Uralsib bank"},matchScore:2,suggestion:true},"amenity/bank/Хаан банк":{name:"Хаан банк",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q25632240"},addTags:{amenity:"bank",brand:"Хаан банк","brand:wikidata":"Q25632240","brand:wikipedia":"mn:ХААН банк",name:"Хаан банк"},removeTags:{amenity:"bank",brand:"Хаан банк","brand:wikidata":"Q25632240","brand:wikipedia":"mn:ХААН банк",name:"Хаан банк"},matchScore:2,suggestion:true},"amenity/bank/Хоум Кредит":{name:"Хоум Кредит",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q4500466"},addTags:{amenity:"bank",brand:"Хоум Кредит","brand:en":"Home Credit & Finance Bank","brand:wikidata":"Q4500466","brand:wikipedia":"en:Home Credit & Finance Bank",name:"Хоум Кредит","name:en":"Home Credit & Finance Bank"},removeTags:{amenity:"bank",brand:"Хоум Кредит","brand:en":"Home Credit & Finance Bank","brand:wikidata":"Q4500466","brand:wikipedia":"en:Home Credit & Finance Bank",name:"Хоум Кредит","name:en":"Home Credit & Finance Bank"},matchScore:2,suggestion:true},"amenity/bank/בנק הפועלים":{name:"בנק הפועלים",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q2666775"},addTags:{amenity:"bank",brand:"בנק הפועלים","brand:en":"Bank Hapoalim","brand:wikidata":"Q2666775","brand:wikipedia":"en:Bank Hapoalim",name:"בנק הפועלים","name:en":"Bank Hapoalim"},removeTags:{amenity:"bank",brand:"בנק הפועלים","brand:en":"Bank Hapoalim","brand:wikidata":"Q2666775","brand:wikipedia":"en:Bank Hapoalim",name:"בנק הפועלים","name:en":"Bank Hapoalim"},matchScore:2,suggestion:true},"amenity/bank/בנק לאומי":{name:"בנק לאומי",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q806641"},addTags:{amenity:"bank",brand:"בנק לאומי","brand:en":"Bank Leumi","brand:wikidata":"Q806641","brand:wikipedia":"en:Bank Leumi",name:"בנק לאומי","name:en":"Bank Leumi"},removeTags:{amenity:"bank",brand:"בנק לאומי","brand:en":"Bank Leumi","brand:wikidata":"Q806641","brand:wikipedia":"en:Bank Leumi",name:"בנק לאומי","name:en":"Bank Leumi"},matchScore:2,suggestion:true},"amenity/bank/بانک آینده":{name:"بانک آینده",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q5938144"},addTags:{amenity:"bank",brand:"بانک آینده","brand:en":"Ayandeh Bank","brand:wikidata":"Q5938144","brand:wikipedia":"en:Ayandeh Bank",name:"بانک آینده","name:en":"Ayandeh Bank"},removeTags:{amenity:"bank",brand:"بانک آینده","brand:en":"Ayandeh Bank","brand:wikidata":"Q5938144","brand:wikipedia":"en:Ayandeh Bank",name:"بانک آینده","name:en":"Ayandeh Bank"},matchScore:2,suggestion:true},"amenity/bank/بانک اقتصاد نوین":{name:"بانک اقتصاد نوین",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q5323768"},addTags:{amenity:"bank",brand:"بانک اقتصاد نوین","brand:en":"EN Bank","brand:wikidata":"Q5323768","brand:wikipedia":"en:EN Bank",name:"بانک اقتصاد نوین","name:en":"EN Bank"},removeTags:{amenity:"bank",brand:"بانک اقتصاد نوین","brand:en":"EN Bank","brand:wikidata":"Q5323768","brand:wikipedia":"en:EN Bank",name:"بانک اقتصاد نوین","name:en":"EN Bank"},matchScore:2,suggestion:true},"amenity/bank/بانک ایران زمین":{name:"بانک ایران زمین",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q5934423"},addTags:{amenity:"bank",brand:"بانک ایران زمین","brand:wikidata":"Q5934423","brand:wikipedia":"en:Iran Zamin Bank",name:"بانک ایران زمین"},removeTags:{amenity:"bank",brand:"بانک ایران زمین","brand:wikidata":"Q5934423","brand:wikipedia":"en:Iran Zamin Bank",name:"بانک ایران زمین"},matchScore:2,suggestion:true},"amenity/bank/بانک رفاه":{name:"بانک رفاه",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q7307083"},addTags:{amenity:"bank",brand:"بانک رفاه","brand:en":"Refah Bank","brand:wikidata":"Q7307083","brand:wikipedia":"en:Refah Bank",name:"بانک رفاه","name:en":"Refah Bank"},removeTags:{amenity:"bank",brand:"بانک رفاه","brand:en":"Refah Bank","brand:wikidata":"Q7307083","brand:wikipedia":"en:Refah Bank",name:"بانک رفاه","name:en":"Refah Bank"},matchScore:2,suggestion:true},"amenity/bank/بانک سامان":{name:"بانک سامان",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q4117676"},addTags:{amenity:"bank",brand:"بانک سامان","brand:en":"Saman Bank","brand:wikidata":"Q4117676","brand:wikipedia":"en:Saman Bank",name:"بانک سامان","name:en":"Saman Bank"},removeTags:{amenity:"bank",brand:"بانک سامان","brand:en":"Saman Bank","brand:wikidata":"Q4117676","brand:wikipedia":"en:Saman Bank",name:"بانک سامان","name:en":"Saman Bank"},matchScore:2,suggestion:true},"amenity/bank/بانک سرمایه":{name:"بانک سرمایه",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q7424291"},addTags:{amenity:"bank",brand:"بانک سرمایه","brand:en":"Sarmayeh Bank","brand:wikidata":"Q7424291","brand:wikipedia":"en:Sarmayeh Bank",name:"بانک سرمایه","name:en":"Sarmayeh Bank"},removeTags:{amenity:"bank",brand:"بانک سرمایه","brand:en":"Sarmayeh Bank","brand:wikidata":"Q7424291","brand:wikipedia":"en:Sarmayeh Bank",name:"بانک سرمایه","name:en":"Sarmayeh Bank"},matchScore:2,suggestion:true},"amenity/bank/بانک سپه":{name:"بانک سپه",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q2882624"},addTags:{amenity:"bank",brand:"بانک سپه","brand:en":"Bank Sepah","brand:wikidata":"Q2882624","brand:wikipedia":"en:Bank Sepah",name:"بانک سپه","name:en":"Bank Sepah"},removeTags:{amenity:"bank",brand:"بانک سپه","brand:en":"Bank Sepah","brand:wikidata":"Q2882624","brand:wikipedia":"en:Bank Sepah",name:"بانک سپه","name:en":"Bank Sepah"},matchScore:2,suggestion:true},"amenity/bank/بانک سینا":{name:"بانک سینا",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q10860246"},addTags:{amenity:"bank",brand:"بانک سینا","brand:en":"Sina Bank","brand:wikidata":"Q10860246","brand:wikipedia":"en:Sina Bank",name:"بانک سینا","name:en":"Sina Bank"},removeTags:{amenity:"bank",brand:"بانک سینا","brand:en":"Sina Bank","brand:wikidata":"Q10860246","brand:wikipedia":"en:Sina Bank",name:"بانک سینا","name:en":"Sina Bank"},matchScore:2,suggestion:true},"amenity/bank/بانک شهر":{name:"بانک شهر",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q5941033"},addTags:{amenity:"bank",brand:"بانک شهر","brand:en":"Shahr Bank","brand:wikidata":"Q5941033","brand:wikipedia":"fa:بانک شهر",name:"بانک شهر","name:en":"Shahr Bank"},removeTags:{amenity:"bank",brand:"بانک شهر","brand:en":"Shahr Bank","brand:wikidata":"Q5941033","brand:wikipedia":"fa:بانک شهر",name:"بانک شهر","name:en":"Shahr Bank"},matchScore:2,suggestion:true},"amenity/bank/بانک صادرات":{name:"بانک صادرات",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q2882608"},addTags:{amenity:"bank",brand:"بانک صادرات","brand:en":"Bank Saderat Iran","brand:wikidata":"Q2882608","brand:wikipedia":"en:Bank Saderat Iran",name:"بانک صادرات","name:en":"Bank Saderat Iran"},removeTags:{amenity:"bank",brand:"بانک صادرات","brand:en":"Bank Saderat Iran","brand:wikidata":"Q2882608","brand:wikipedia":"en:Bank Saderat Iran",name:"بانک صادرات","name:en":"Bank Saderat Iran"},matchScore:2,suggestion:true},"amenity/bank/بانک قوامین":{name:"بانک قوامین",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q10860253"},addTags:{amenity:"bank",brand:"بانک قوامین","brand:en":"Ghavamin Bank","brand:wikidata":"Q10860253","brand:wikipedia":"en:Ghavamin Bank",name:"بانک قوامین","name:en":"Ghavamin Bank"},removeTags:{amenity:"bank",brand:"بانک قوامین","brand:en":"Ghavamin Bank","brand:wikidata":"Q10860253","brand:wikipedia":"en:Ghavamin Bank",name:"بانک قوامین","name:en":"Ghavamin Bank"},matchScore:2,suggestion:true},"amenity/bank/بانک مسکن":{name:"بانک مسکن",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q4855942"},addTags:{amenity:"bank",brand:"بانک مسکن","brand:en":"Bank Maskan","brand:wikidata":"Q4855942","brand:wikipedia":"en:Bank Maskan",name:"بانک مسکن","name:en":"Bank Maskan"},removeTags:{amenity:"bank",brand:"بانک مسکن","brand:en":"Bank Maskan","brand:wikidata":"Q4855942","brand:wikipedia":"en:Bank Maskan",name:"بانک مسکن","name:en":"Bank Maskan"},matchScore:2,suggestion:true},"amenity/bank/بانک ملت":{name:"بانک ملت",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q4855944"},addTags:{amenity:"bank",brand:"بانک ملت","brand:en":"Bank Mellat","brand:wikidata":"Q4855944","brand:wikipedia":"en:Bank Mellat",name:"بانک ملت","name:en":"Bank Mellat"},removeTags:{amenity:"bank",brand:"بانک ملت","brand:en":"Bank Mellat","brand:wikidata":"Q4855944","brand:wikipedia":"en:Bank Mellat",name:"بانک ملت","name:en":"Bank Mellat"},matchScore:2,suggestion:true},"amenity/bank/بانک ملی ایران":{name:"بانک ملی ایران",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q806640"},addTags:{amenity:"bank",brand:"بانک ملی ایران","brand:en":"Bank Melli Iran","brand:wikidata":"Q806640","brand:wikipedia":"en:Bank Melli Iran",name:"بانک ملی ایران","name:en":"Bank Melli Iran"},removeTags:{amenity:"bank",brand:"بانک ملی ایران","brand:en":"Bank Melli Iran","brand:wikidata":"Q806640","brand:wikipedia":"en:Bank Melli Iran",name:"بانک ملی ایران","name:en":"Bank Melli Iran"},matchScore:2,suggestion:true},"amenity/bank/بانک پارسیان":{name:"بانک پارسیان",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q2410404"},addTags:{amenity:"bank",brand:"بانک پارسیان","brand:en":"Parsian Bank","brand:wikidata":"Q2410404","brand:wikipedia":"en:Parsian Bank",name:"بانک پارسیان","name:en":"Parsian Bank"},removeTags:{amenity:"bank",brand:"بانک پارسیان","brand:en":"Parsian Bank","brand:wikidata":"Q2410404","brand:wikipedia":"en:Parsian Bank",name:"بانک پارسیان","name:en":"Parsian Bank"},matchScore:2,suggestion:true},"amenity/bank/بانک پاسارگاد":{name:"بانک پاسارگاد",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q4855962"},addTags:{amenity:"bank",brand:"بانک پاسارگاد","brand:en":"Bank Pasargad","brand:wikidata":"Q4855962","brand:wikipedia":"en:Bank Pasargad",name:"بانک پاسارگاد","name:en":"Bank Pasargad"},removeTags:{amenity:"bank",brand:"بانک پاسارگاد","brand:en":"Bank Pasargad","brand:wikidata":"Q4855962","brand:wikipedia":"en:Bank Pasargad",name:"بانک پاسارگاد","name:en":"Bank Pasargad"},matchScore:2,suggestion:true},"amenity/bank/بانک کشاورزی":{name:"بانک کشاورزی",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q6395007"},addTags:{amenity:"bank",brand:"بانک کشاورزی","brand:en":"Bank Keshavarzi Iran","brand:wikidata":"Q6395007","brand:wikipedia":"en:Bank Keshavarzi Iran",name:"بانک کشاورزی","name:en":"Bank Keshavarzi Iran"},removeTags:{amenity:"bank",brand:"بانک کشاورزی","brand:en":"Bank Keshavarzi Iran","brand:wikidata":"Q6395007","brand:wikipedia":"en:Bank Keshavarzi Iran",name:"بانک کشاورزی","name:en":"Bank Keshavarzi Iran"},matchScore:2,suggestion:true},"amenity/bank/پست بانک":{name:"پست بانک",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q7233625"},addTags:{amenity:"bank",brand:"پست بانک","brand:en":"Post Bank of Iran","brand:wikidata":"Q7233625","brand:wikipedia":"en:Post Bank of Iran",name:"پست بانک","name:en":"Post Bank of Iran"},removeTags:{amenity:"bank",brand:"پست بانک","brand:en":"Post Bank of Iran","brand:wikidata":"Q7233625","brand:wikipedia":"en:Post Bank of Iran",name:"پست بانک","name:en":"Post Bank of Iran"},matchScore:2,suggestion:true},"amenity/bank/ธนาคารกรุงเทพ":{name:"ธนาคารกรุงเทพ",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q806483"},addTags:{amenity:"bank",brand:"ธนาคารกรุงเทพ","brand:en":"Bangkok Bank","brand:wikidata":"Q806483","brand:wikipedia":"en:Bangkok Bank",name:"ธนาคารกรุงเทพ","name:en":"Bangkok Bank"},removeTags:{amenity:"bank",brand:"ธนาคารกรุงเทพ","brand:en":"Bangkok Bank","brand:wikidata":"Q806483","brand:wikipedia":"en:Bangkok Bank",name:"ธนาคารกรุงเทพ","name:en":"Bangkok Bank"},matchScore:2,suggestion:true},"amenity/bank/ธนาคารกรุงไทย":{name:"ธนาคารกรุงไทย",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q962865"},addTags:{amenity:"bank",brand:"ธนาคารกรุงไทย","brand:en":"Krung Thai Bank","brand:wikidata":"Q962865","brand:wikipedia":"en:Krung Thai Bank",name:"ธนาคารกรุงไทย","name:en":"Krung Thai Bank"},removeTags:{amenity:"bank",brand:"ธนาคารกรุงไทย","brand:en":"Krung Thai Bank","brand:wikidata":"Q962865","brand:wikipedia":"en:Krung Thai Bank",name:"ธนาคารกรุงไทย","name:en":"Krung Thai Bank"},matchScore:2,suggestion:true},"amenity/bank/ธนาคารกสิกรไทย":{name:"ธนาคารกสิกรไทย",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q276557"},addTags:{amenity:"bank",brand:"ธนาคารกสิกรไทย","brand:en":"en:Kasikornbank","brand:wikidata":"Q276557","brand:wikipedia":"en:Kasikornbank",name:"ธนาคารกสิกรไทย","name:en":"en:Kasikornbank"},removeTags:{amenity:"bank",brand:"ธนาคารกสิกรไทย","brand:en":"en:Kasikornbank","brand:wikidata":"Q276557","brand:wikipedia":"en:Kasikornbank",name:"ธนาคารกสิกรไทย","name:en":"en:Kasikornbank"},matchScore:2,suggestion:true},"amenity/bank/ธนาคารออมสิน":{name:"ธนาคารออมสิน",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q6579041"},addTags:{amenity:"bank",brand:"ธนาคารออมสิน","brand:en":"Government Savings Bank","brand:wikidata":"Q6579041","brand:wikipedia":"en:Government Savings Bank (Thailand)",name:"ธนาคารออมสิน","name:en":"Government Savings Bank"},removeTags:{amenity:"bank",brand:"ธนาคารออมสิน","brand:en":"Government Savings Bank","brand:wikidata":"Q6579041","brand:wikipedia":"en:Government Savings Bank (Thailand)",name:"ธนาคารออมสิน","name:en":"Government Savings Bank"},matchScore:2,suggestion:true},"amenity/bank/ธนาคารไทยพาณิชย์":{name:"ธนาคารไทยพาณิชย์",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q2038986"},addTags:{amenity:"bank",brand:"ธนาคารไทยพาณิชย์","brand:en":"Siam Commercial Bank","brand:wikidata":"Q2038986","brand:wikipedia":"en:Siam Commercial Bank",name:"ธนาคารไทยพาณิชย์","name:en":"Siam Commercial Bank"},removeTags:{amenity:"bank",brand:"ธนาคารไทยพาณิชย์","brand:en":"Siam Commercial Bank","brand:wikidata":"Q2038986","brand:wikipedia":"en:Siam Commercial Bank",name:"ธนาคารไทยพาณิชย์","name:en":"Siam Commercial Bank"},matchScore:2,suggestion:true},"amenity/bank/みずほ銀行":{name:"みずほ銀行",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q2882956"},addTags:{amenity:"bank",brand:"みずほ銀行","brand:en":"Mizuho Bank","brand:wikidata":"Q2882956","brand:wikipedia":"en:Mizuho Bank",name:"みずほ銀行","name:en":"Mizuho Bank"},removeTags:{amenity:"bank",brand:"みずほ銀行","brand:en":"Mizuho Bank","brand:wikidata":"Q2882956","brand:wikipedia":"en:Mizuho Bank",name:"みずほ銀行","name:en":"Mizuho Bank"},matchScore:2,suggestion:true},"amenity/bank/りそな銀行":{name:"りそな銀行",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q11281447"},addTags:{amenity:"bank",brand:"りそな銀行","brand:wikidata":"Q11281447","brand:wikipedia":"ja:りそな銀行",name:"りそな銀行"},removeTags:{amenity:"bank",brand:"りそな銀行","brand:wikidata":"Q11281447","brand:wikipedia":"ja:りそな銀行",name:"りそな銀行"},matchScore:2,suggestion:true},"amenity/bank/三井住友銀行":{name:"三井住友銀行",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q2660418"},addTags:{amenity:"bank",brand:"三井住友銀行","brand:en":"Sumitomo Mitsui Banking Corporation","brand:wikidata":"Q2660418","brand:wikipedia":"en:Sumitomo Mitsui Banking Corporation",name:"三井住友銀行","name:en":"Sumitomo Mitsui Banking Corporation"},removeTags:{amenity:"bank",brand:"三井住友銀行","brand:en":"Sumitomo Mitsui Banking Corporation","brand:wikidata":"Q2660418","brand:wikipedia":"en:Sumitomo Mitsui Banking Corporation",name:"三井住友銀行","name:en":"Sumitomo Mitsui Banking Corporation"},matchScore:2,suggestion:true},"amenity/bank/三菱東京UFJ銀行":{name:"三菱東京UFJ銀行",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q988284"},addTags:{amenity:"bank",brand:"三菱東京UFJ銀行","brand:en":"MUFG Bank","brand:wikidata":"Q988284","brand:wikipedia":"en:MUFG Bank",name:"三菱東京UFJ銀行","name:en":"MUFG Bank"},removeTags:{amenity:"bank",brand:"三菱東京UFJ銀行","brand:en":"MUFG Bank","brand:wikidata":"Q988284","brand:wikipedia":"en:MUFG Bank",name:"三菱東京UFJ銀行","name:en":"MUFG Bank"},matchScore:2,suggestion:true},"amenity/bank/上海商業儲蓄銀行":{name:"上海商業儲蓄銀行",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q4207208"},addTags:{amenity:"bank",brand:"上海商業儲蓄銀行","brand:en":"Shanghai Commercial and Savings Bank","brand:wikidata":"Q4207208","brand:wikipedia":"en:Shanghai Commercial and Savings Bank",name:"上海商業儲蓄銀行","name:en":"Shanghai Commercial and Savings Bank"},removeTags:{amenity:"bank",brand:"上海商業儲蓄銀行","brand:en":"Shanghai Commercial and Savings Bank","brand:wikidata":"Q4207208","brand:wikipedia":"en:Shanghai Commercial and Savings Bank",name:"上海商業儲蓄銀行","name:en":"Shanghai Commercial and Savings Bank"},matchScore:2,suggestion:true},"amenity/bank/中信银行":{name:"中信银行",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q38960"},addTags:{amenity:"bank",brand:"中信银行","brand:en":"China CITIC Bank","brand:wikidata":"Q38960","brand:wikipedia":"en:China CITIC Bank",name:"中信银行"},removeTags:{amenity:"bank",brand:"中信银行","brand:en":"China CITIC Bank","brand:wikidata":"Q38960","brand:wikipedia":"en:China CITIC Bank",name:"中信银行"},matchScore:2,suggestion:true},"amenity/bank/中国农业银行":{name:"中国农业银行",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q26298"},addTags:{amenity:"bank",brand:"中国农业银行","brand:en":"Agricultural Bank of China","brand:wikidata":"Q26298","brand:wikipedia":"en:Agricultural Bank of China",name:"中国农业银行","name:en":"Agricultural Bank of China"},removeTags:{amenity:"bank",brand:"中国农业银行","brand:en":"Agricultural Bank of China","brand:wikidata":"Q26298","brand:wikipedia":"en:Agricultural Bank of China",name:"中国农业银行","name:en":"Agricultural Bank of China"},matchScore:2,suggestion:true},"amenity/bank/中国工商银行":{name:"中国工商银行",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q26463"},addTags:{amenity:"bank",brand:"中国工商银行","brand:en":"Industrial and Commercial Bank of China","brand:wikidata":"Q26463","brand:wikipedia":"en:Industrial and Commercial Bank of China",name:"中国工商银行","name:en":"Industrial and Commercial Bank of China"},removeTags:{amenity:"bank",brand:"中国工商银行","brand:en":"Industrial and Commercial Bank of China","brand:wikidata":"Q26463","brand:wikipedia":"en:Industrial and Commercial Bank of China",name:"中国工商银行","name:en":"Industrial and Commercial Bank of China"},matchScore:2,suggestion:true},"amenity/bank/中国建设银行":{name:"中国建设银行",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q26299"},addTags:{amenity:"bank",brand:"中国建设银行","brand:en":"China Construction Bank","brand:wikidata":"Q26299","brand:wikipedia":"en:China Construction Bank",name:"中国建设银行","name:en":"China Construction Bank"},removeTags:{amenity:"bank",brand:"中国建设银行","brand:en":"China Construction Bank","brand:wikidata":"Q26299","brand:wikipedia":"en:China Construction Bank",name:"中国建设银行","name:en":"China Construction Bank"},matchScore:2,suggestion:true},"amenity/bank/中国邮政储蓄银行":{name:"中国邮政储蓄银行",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q986744"},addTags:{amenity:"bank",brand:"中国邮政储蓄银行","brand:en":"Postal Savings Bank of China","brand:wikidata":"Q986744","brand:wikipedia":"en:Postal Savings Bank of China",name:"中国邮政储蓄银行","name:en":"Postal Savings Bank of China"},removeTags:{amenity:"bank",brand:"中国邮政储蓄银行","brand:en":"Postal Savings Bank of China","brand:wikidata":"Q986744","brand:wikipedia":"en:Postal Savings Bank of China",name:"中国邮政储蓄银行","name:en":"Postal Savings Bank of China"},matchScore:2,suggestion:true},"amenity/bank/中国银行":{name:"中国银行",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q790068"},addTags:{amenity:"bank",brand:"中国银行","brand:en":"Bank of China","brand:wikidata":"Q790068","brand:wikipedia":"en:Bank of China",name:"中国银行","name:en":"Bank of China"},removeTags:{amenity:"bank",brand:"中国银行","brand:en":"Bank of China","brand:wikidata":"Q790068","brand:wikipedia":"en:Bank of China",name:"中国银行","name:en":"Bank of China"},matchScore:2,suggestion:true},"amenity/bank/中國信託商業銀行":{name:"中國信託商業銀行",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q5100191"},addTags:{amenity:"bank",brand:"中國信託商業銀行","brand:en":"CTBC Bank","brand:wikidata":"Q5100191","brand:wikipedia":"en:CTBC Bank",name:"中國信託商業銀行","name:en":"CTBC Bank"},removeTags:{amenity:"bank",brand:"中國信託商業銀行","brand:en":"CTBC Bank","brand:wikidata":"Q5100191","brand:wikipedia":"en:CTBC Bank",name:"中國信託商業銀行","name:en":"CTBC Bank"},matchScore:2,suggestion:true},"amenity/bank/交通银行":{name:"交通银行",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q806680"},addTags:{amenity:"bank",brand:"交通银行","brand:en":"Bank of Communications","brand:wikidata":"Q806680","brand:wikipedia":"en:Bank of Communications",name:"交通银行","name:en":"Bank of Communications"},removeTags:{amenity:"bank",brand:"交通银行","brand:en":"Bank of Communications","brand:wikidata":"Q806680","brand:wikipedia":"en:Bank of Communications",name:"交通银行","name:en":"Bank of Communications"},matchScore:2,suggestion:true},"amenity/bank/京城商業銀行":{name:"京城商業銀行",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q10883132"},addTags:{amenity:"bank",brand:"京城商業銀行","brand:wikidata":"Q10883132","brand:wikipedia":"zh:京城商業銀行",name:"京城商業銀行"},removeTags:{amenity:"bank",brand:"京城商業銀行","brand:wikidata":"Q10883132","brand:wikipedia":"zh:京城商業銀行",name:"京城商業銀行"},matchScore:2,suggestion:true},"amenity/bank/京都中央信用金庫":{name:"京都中央信用金庫",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q11374844"},addTags:{amenity:"bank",brand:"京都中央信用金庫","brand:en":"Kyoto Chuo Shinkin Bank","brand:wikidata":"Q11374844","brand:wikipedia":"jp:京都中央信用金庫",name:"京都中央信用金庫","name:en":"Kyoto Chuo Shinkin Bank"},removeTags:{amenity:"bank",brand:"京都中央信用金庫","brand:en":"Kyoto Chuo Shinkin Bank","brand:wikidata":"Q11374844","brand:wikipedia":"jp:京都中央信用金庫",name:"京都中央信用金庫","name:en":"Kyoto Chuo Shinkin Bank"},matchScore:2,suggestion:true},"amenity/bank/京都銀行":{name:"京都銀行",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q11375713"},addTags:{amenity:"bank",brand:"京都銀行","brand:en":"Bank of Kyoto","brand:wikidata":"Q11375713","brand:wikipedia":"en:Bank of Kyoto",name:"京都銀行","name:en":"Bank of Kyoto"},removeTags:{amenity:"bank",brand:"京都銀行","brand:en":"Bank of Kyoto","brand:wikidata":"Q11375713","brand:wikipedia":"en:Bank of Kyoto",name:"京都銀行","name:en":"Bank of Kyoto"},matchScore:2,suggestion:true},"amenity/bank/元大商業銀行":{name:"元大商業銀行",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q10889602"},addTags:{amenity:"bank",brand:"元大商業銀行","brand:en":"Yuanta Commercial Bank","brand:wikidata":"Q10889602","brand:wikipedia":"zh:元大商業銀行",name:"元大商業銀行","name:en":"Yuanta Commercial Bank"},removeTags:{amenity:"bank",brand:"元大商業銀行","brand:en":"Yuanta Commercial Bank","brand:wikidata":"Q10889602","brand:wikipedia":"zh:元大商業銀行",name:"元大商業銀行","name:en":"Yuanta Commercial Bank"},matchScore:2,suggestion:true},"amenity/bank/兆豐國際商業銀行":{name:"兆豐國際商業銀行",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q709757"},addTags:{amenity:"bank",brand:"兆豐國際商業銀行","brand:en":"Mega International Commercial Bank","brand:wikidata":"Q709757","brand:wikipedia":"en:Mega International Commercial Bank",name:"兆豐國際商業銀行","name:en":"Mega International Commercial Bank"},removeTags:{amenity:"bank",brand:"兆豐國際商業銀行","brand:en":"Mega International Commercial Bank","brand:wikidata":"Q709757","brand:wikipedia":"en:Mega International Commercial Bank",name:"兆豐國際商業銀行","name:en":"Mega International Commercial Bank"},matchScore:2,suggestion:true},"amenity/bank/农业银行":{name:"农业银行",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q26298"},addTags:{amenity:"bank",brand:"农业银行","brand:wikidata":"Q26298","brand:wikipedia":"zh:中国农业银行",name:"农业银行"},removeTags:{amenity:"bank",brand:"农业银行","brand:wikidata":"Q26298","brand:wikipedia":"zh:中国农业银行",name:"农业银行"},matchScore:2,suggestion:true},"amenity/bank/北洋銀行":{name:"北洋銀行",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q11402354"},addTags:{amenity:"bank",brand:"北洋銀行","brand:en":"North Pacific Bank","brand:wikidata":"Q11402354","brand:wikipedia":"ja:北洋銀行",name:"北洋銀行","name:en":"North Pacific Bank"},removeTags:{amenity:"bank",brand:"北洋銀行","brand:en":"North Pacific Bank","brand:wikidata":"Q11402354","brand:wikipedia":"ja:北洋銀行",name:"北洋銀行","name:en":"North Pacific Bank"},matchScore:2,suggestion:true},"amenity/bank/北海道銀行":{name:"北海道銀行",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q5878076"},addTags:{amenity:"bank",brand:"北海道銀行","brand:en":"Hokkaido Bank","brand:wikidata":"Q5878076","brand:wikipedia":"en:Hokkaido Bank",name:"北海道銀行","name:en":"Hokkaido Bank"},removeTags:{amenity:"bank",brand:"北海道銀行","brand:en":"Hokkaido Bank","brand:wikidata":"Q5878076","brand:wikipedia":"en:Hokkaido Bank",name:"北海道銀行","name:en":"Hokkaido Bank"},matchScore:2,suggestion:true},"amenity/bank/台中商業銀行":{name:"台中商業銀行",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q6136958"},addTags:{amenity:"bank",brand:"台中商業銀行","brand:en":"Taichung Bank","brand:wikidata":"Q6136958","brand:wikipedia":"en:Taichung Bank",name:"台中商業銀行","name:en":"Taichung Bank"},removeTags:{amenity:"bank",brand:"台中商業銀行","brand:en":"Taichung Bank","brand:wikidata":"Q6136958","brand:wikipedia":"en:Taichung Bank",name:"台中商業銀行","name:en":"Taichung Bank"},matchScore:2,suggestion:true},"amenity/bank/台北富邦商業銀行":{name:"台北富邦商業銀行",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q697293"},addTags:{amenity:"bank",brand:"台北富邦商業銀行","brand:en":"Taipei Fubon Bank","brand:wikidata":"Q697293","brand:wikipedia":"en:Taipei Fubon Bank",name:"台北富邦商業銀行","name:en":"Taipei Fubon Bank"},removeTags:{amenity:"bank",brand:"台北富邦商業銀行","brand:en":"Taipei Fubon Bank","brand:wikidata":"Q697293","brand:wikipedia":"en:Taipei Fubon Bank",name:"台北富邦商業銀行","name:en":"Taipei Fubon Bank"},matchScore:2,suggestion:true},"amenity/bank/台新國際商業銀行":{name:"台新國際商業銀行",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q7676420"},addTags:{amenity:"bank",brand:"台新國際商業銀行","brand:en":"Taishin International Bank","brand:wikidata":"Q7676420","brand:wikipedia":"en:Taishin International Bank",name:"台新國際商業銀行","name:en":"Taishin International Bank"},removeTags:{amenity:"bank",brand:"台新國際商業銀行","brand:en":"Taishin International Bank","brand:wikidata":"Q7676420","brand:wikipedia":"en:Taishin International Bank",name:"台新國際商業銀行","name:en":"Taishin International Bank"},matchScore:2,suggestion:true},"amenity/bank/合作金庫商業銀行":{name:"合作金庫商業銀行",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q701540"},addTags:{amenity:"bank",brand:"合作金庫商業銀行","brand:en":"Taiwan Cooperative Bank","brand:wikidata":"Q701540","brand:wikipedia":"en:Taiwan Cooperative Bank",name:"合作金庫商業銀行","name:en":"Taiwan Cooperative Bank"},removeTags:{amenity:"bank",brand:"合作金庫商業銀行","brand:en":"Taiwan Cooperative Bank","brand:wikidata":"Q701540","brand:wikipedia":"en:Taiwan Cooperative Bank",name:"合作金庫商業銀行","name:en":"Taiwan Cooperative Bank"},matchScore:2,suggestion:true},"amenity/bank/國泰世華商業銀行":{name:"國泰世華商業銀行",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q702656"},addTags:{amenity:"bank",brand:"國泰世華商業銀行","brand:en":"Cathay United Bank","brand:wikidata":"Q702656","brand:wikipedia":"en:Cathay United Bank",name:"國泰世華商業銀行","name:en":"Cathay United Bank"},removeTags:{amenity:"bank",brand:"國泰世華商業銀行","brand:en":"Cathay United Bank","brand:wikidata":"Q702656","brand:wikipedia":"en:Cathay United Bank",name:"國泰世華商業銀行","name:en":"Cathay United Bank"},matchScore:2,suggestion:true},"amenity/bank/大眾商業銀行":{name:"大眾商業銀行",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q10937047"},addTags:{amenity:"bank",brand:"大眾商業銀行","brand:en":"Ta Chong Commercial Bank","brand:wikidata":"Q10937047","brand:wikipedia":"zh:大眾商業銀行",name:"大眾商業銀行","name:en":"Ta Chong Commercial Bank"},removeTags:{amenity:"bank",brand:"大眾商業銀行","brand:en":"Ta Chong Commercial Bank","brand:wikidata":"Q10937047","brand:wikipedia":"zh:大眾商業銀行",name:"大眾商業銀行","name:en":"Ta Chong Commercial Bank"},matchScore:2,suggestion:true},"amenity/bank/安泰商業銀行":{name:"安泰商業銀行",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q10946952"},addTags:{amenity:"bank",brand:"安泰商業銀行","brand:en":"Entie Commercial Bank","brand:wikidata":"Q10946952","brand:wikipedia":"zh:安泰商業銀行",name:"安泰商業銀行","name:en":"Entie Commercial Bank"},removeTags:{amenity:"bank",brand:"安泰商業銀行","brand:en":"Entie Commercial Bank","brand:wikidata":"Q10946952","brand:wikipedia":"zh:安泰商業銀行",name:"安泰商業銀行","name:en":"Entie Commercial Bank"},matchScore:2,suggestion:true},"amenity/bank/工商银行":{name:"工商银行",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q26463"},addTags:{amenity:"bank",brand:"工商银行","brand:en":"Industrial and Commercial Bank of China","brand:wikidata":"Q26463","brand:wikipedia":"en:Industrial and Commercial Bank of China",name:"工商银行","name:en":"Industrial and Commercial Bank of China"},removeTags:{amenity:"bank",brand:"工商银行","brand:en":"Industrial and Commercial Bank of China","brand:wikidata":"Q26463","brand:wikipedia":"en:Industrial and Commercial Bank of China",name:"工商银行","name:en":"Industrial and Commercial Bank of China"},matchScore:2,suggestion:true},"amenity/bank/建设银行":{name:"建设银行",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q26299"},addTags:{amenity:"bank",brand:"建设银行","brand:wikidata":"Q26299","brand:wikipedia":"zh:中国建设银行",name:"建设银行"},removeTags:{amenity:"bank",brand:"建设银行","brand:wikidata":"Q26299","brand:wikipedia":"zh:中国建设银行",name:"建设银行"},matchScore:2,suggestion:true},"amenity/bank/彰化商業銀行":{name:"彰化商業銀行",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q5071627"},addTags:{amenity:"bank",brand:"彰化商業銀行","brand:en":"Chang Hwa Bank","brand:wikidata":"Q5071627","brand:wikipedia":"en:Chang Hwa Bank",name:"彰化商業銀行","name:en":"Chang Hwa Bank"},removeTags:{amenity:"bank",brand:"彰化商業銀行","brand:en":"Chang Hwa Bank","brand:wikidata":"Q5071627","brand:wikipedia":"en:Chang Hwa Bank",name:"彰化商業銀行","name:en":"Chang Hwa Bank"},matchScore:2,suggestion:true},"amenity/bank/招商银行":{name:"招商银行",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q1073327"},addTags:{amenity:"bank",brand:"招商银行","brand:en":"China Merchants Bank","brand:wikidata":"Q1073327","brand:wikipedia":"en:China Merchants Bank",name:"招商银行","name:en":"China Merchants Bank"},removeTags:{amenity:"bank",brand:"招商银行","brand:en":"China Merchants Bank","brand:wikidata":"Q1073327","brand:wikipedia":"en:China Merchants Bank",name:"招商银行","name:en":"China Merchants Bank"},matchScore:2,suggestion:true},"amenity/bank/板信商業銀行":{name:"板信商業銀行",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q11104946"},addTags:{amenity:"bank",brand:"板信商業銀行","brand:en":"Bank of Panshin","brand:wikidata":"Q11104946","brand:wikipedia":"zh:板信商業銀行",name:"板信商業銀行","name:en":"Bank of Panshin"},removeTags:{amenity:"bank",brand:"板信商業銀行","brand:en":"Bank of Panshin","brand:wikidata":"Q11104946","brand:wikipedia":"zh:板信商業銀行",name:"板信商業銀行","name:en":"Bank of Panshin"},matchScore:2,suggestion:true},"amenity/bank/横浜銀行":{name:"横浜銀行",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q2744340"},addTags:{amenity:"bank",brand:"横浜銀行","brand:en":"Bank of Yokohama","brand:wikidata":"Q2744340","brand:wikipedia":"en:Bank of Yokohama",name:"横浜銀行","name:en":"Bank of Yokohama"},removeTags:{amenity:"bank",brand:"横浜銀行","brand:en":"Bank of Yokohama","brand:wikidata":"Q2744340","brand:wikipedia":"en:Bank of Yokohama",name:"横浜銀行","name:en":"Bank of Yokohama"},matchScore:2,suggestion:true},"amenity/bank/永豐商業銀行":{name:"永豐商業銀行",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q4855976"},addTags:{amenity:"bank",brand:"永豐商業銀行","brand:en":"Bank SinoPac","brand:wikidata":"Q4855976","brand:wikipedia":"en:Bank SinoPac",name:"永豐商業銀行","name:en":"Bank SinoPac"},removeTags:{amenity:"bank",brand:"永豐商業銀行","brand:en":"Bank SinoPac","brand:wikidata":"Q4855976","brand:wikipedia":"en:Bank SinoPac",name:"永豐商業銀行","name:en":"Bank SinoPac"},matchScore:2,suggestion:true},"amenity/bank/玉山商業銀行":{name:"玉山商業銀行",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q5321663"},addTags:{amenity:"bank",brand:"玉山商業銀行","brand:en":"E.SUN Commercial Bank","brand:wikidata":"Q5321663","brand:wikipedia":"en:E.SUN Commercial Bank",name:"玉山商業銀行","name:en":"E.SUN Commercial Bank"},removeTags:{amenity:"bank",brand:"玉山商業銀行","brand:en":"E.SUN Commercial Bank","brand:wikidata":"Q5321663","brand:wikipedia":"en:E.SUN Commercial Bank",name:"玉山商業銀行","name:en":"E.SUN Commercial Bank"},matchScore:2,suggestion:true},"amenity/bank/第一商業銀行":{name:"第一商業銀行",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q11602128"},addTags:{amenity:"bank",brand:"第一商業銀行","brand:en":"First Commercial Bank","brand:wikidata":"Q11602128","brand:wikipedia":"zh:第一商業銀行",name:"第一商業銀行","name:en":"First Commercial Bank"},removeTags:{amenity:"bank",brand:"第一商業銀行","brand:en":"First Commercial Bank","brand:wikidata":"Q11602128","brand:wikipedia":"zh:第一商業銀行",name:"第一商業銀行","name:en":"First Commercial Bank"},matchScore:2,suggestion:true},"amenity/bank/聯邦商業銀行":{name:"聯邦商業銀行",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q15927195"},addTags:{amenity:"bank",brand:"聯邦商業銀行","brand:en":"Union Bank of Taiwan","brand:wikidata":"Q15927195","brand:wikipedia":"zh:聯邦商業銀行",name:"聯邦商業銀行","name:en":"Union Bank of Taiwan"},removeTags:{amenity:"bank",brand:"聯邦商業銀行","brand:en":"Union Bank of Taiwan","brand:wikidata":"Q15927195","brand:wikipedia":"zh:聯邦商業銀行",name:"聯邦商業銀行","name:en":"Union Bank of Taiwan"},matchScore:2,suggestion:true},"amenity/bank/臺灣中小企業銀行":{name:"臺灣中小企業銀行",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q15913812"},addTags:{amenity:"bank",brand:"臺灣中小企業銀行","brand:en":"Taiwan Business Bank","brand:wikidata":"Q15913812","brand:wikipedia":"zh:臺灣中小企業銀行",name:"臺灣中小企業銀行","name:en":"Taiwan Business Bank"},removeTags:{amenity:"bank",brand:"臺灣中小企業銀行","brand:en":"Taiwan Business Bank","brand:wikidata":"Q15913812","brand:wikipedia":"zh:臺灣中小企業銀行",name:"臺灣中小企業銀行","name:en":"Taiwan Business Bank"},matchScore:2,suggestion:true},"amenity/bank/臺灣土地銀行":{name:"臺灣土地銀行",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q717592"},addTags:{amenity:"bank",brand:"臺灣土地銀行","brand:en":"Land Bank of Taiwan","brand:wikidata":"Q717592","brand:wikipedia":"en:Land Bank of Taiwan",name:"臺灣土地銀行","name:en":"Land Bank of Taiwan"},removeTags:{amenity:"bank",brand:"臺灣土地銀行","brand:en":"Land Bank of Taiwan","brand:wikidata":"Q717592","brand:wikipedia":"en:Land Bank of Taiwan",name:"臺灣土地銀行","name:en":"Land Bank of Taiwan"},matchScore:2,suggestion:true},"amenity/bank/臺灣新光商業銀行":{name:"臺灣新光商業銀行",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q15909616"},addTags:{amenity:"bank",brand:"臺灣新光商業銀行","brand:en":"Shin Kong Commercial Bank","brand:wikidata":"Q15909616","brand:wikipedia":"zh:臺灣新光商業銀行",name:"臺灣新光商業銀行","name:en":"Shin Kong Commercial Bank"},removeTags:{amenity:"bank",brand:"臺灣新光商業銀行","brand:en":"Shin Kong Commercial Bank","brand:wikidata":"Q15909616","brand:wikipedia":"zh:臺灣新光商業銀行",name:"臺灣新光商業銀行","name:en":"Shin Kong Commercial Bank"},matchScore:2,suggestion:true},"amenity/bank/臺灣銀行":{name:"臺灣銀行",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q706533"},addTags:{amenity:"bank",brand:"臺灣銀行","brand:en":"Bank of Taiwan","brand:wikidata":"Q706533","brand:wikipedia":"en:Bank of Taiwan",name:"臺灣銀行","name:en":"Bank of Taiwan"},removeTags:{amenity:"bank",brand:"臺灣銀行","brand:en":"Bank of Taiwan","brand:wikidata":"Q706533","brand:wikipedia":"en:Bank of Taiwan",name:"臺灣銀行","name:en":"Bank of Taiwan"},matchScore:2,suggestion:true},"amenity/bank/華南商業銀行":{name:"華南商業銀行",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q11620043"},addTags:{amenity:"bank",brand:"華南商業銀行","brand:en":"Hua Nan Commercial Bank","brand:wikidata":"Q11620043","brand:wikipedia":"zh:華南商業銀行",name:"華南商業銀行","name:en":"Hua Nan Commercial Bank"},removeTags:{amenity:"bank",brand:"華南商業銀行","brand:en":"Hua Nan Commercial Bank","brand:wikidata":"Q11620043","brand:wikipedia":"zh:華南商業銀行",name:"華南商業銀行","name:en":"Hua Nan Commercial Bank"},matchScore:2,suggestion:true},"amenity/bank/遠東國際商業銀行":{name:"遠東國際商業銀行",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q15911143"},addTags:{amenity:"bank",brand:"遠東國際商業銀行","brand:en":"Far Eastern International Bank","brand:wikidata":"Q15911143","brand:wikipedia":"zh:遠東國際商業銀行",name:"遠東國際商業銀行","name:en":"Far Eastern International Bank"},removeTags:{amenity:"bank",brand:"遠東國際商業銀行","brand:en":"Far Eastern International Bank","brand:wikidata":"Q15911143","brand:wikipedia":"zh:遠東國際商業銀行",name:"遠東國際商業銀行","name:en":"Far Eastern International Bank"},matchScore:2,suggestion:true},"amenity/bank/陽信商業銀行":{name:"陽信商業銀行",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q11658759"},addTags:{amenity:"bank",brand:"陽信商業銀行","brand:en":"Sunny Commercial Bank","brand:wikidata":"Q11658759","brand:wikipedia":"zh:陽信商業銀行",name:"陽信商業銀行","name:en":"Sunny Commercial Bank"},removeTags:{amenity:"bank",brand:"陽信商業銀行","brand:en":"Sunny Commercial Bank","brand:wikidata":"Q11658759","brand:wikipedia":"zh:陽信商業銀行",name:"陽信商業銀行","name:en":"Sunny Commercial Bank"},matchScore:2,suggestion:true},"amenity/bank/静岡銀行":{name:"静岡銀行",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q7499501"},addTags:{amenity:"bank",brand:"静岡銀行","brand:en":"Shizuoka Bank","brand:wikidata":"Q7499501","brand:wikipedia":"en:Shizuoka Bank",name:"静岡銀行","name:en":"Shizuoka Bank"},removeTags:{amenity:"bank",brand:"静岡銀行","brand:en":"Shizuoka Bank","brand:wikidata":"Q7499501","brand:wikipedia":"en:Shizuoka Bank",name:"静岡銀行","name:en":"Shizuoka Bank"},matchScore:2,suggestion:true},"amenity/bank/국민은행":{name:"국민은행",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q496606"},addTags:{amenity:"bank",brand:"국민은행","brand:en":"KB Kookmin Bank","brand:wikidata":"Q496606","brand:wikipedia":"en:KB Kookmin Bank",name:"국민은행","name:en":"KB Kookmin Bank"},removeTags:{amenity:"bank",brand:"국민은행","brand:en":"KB Kookmin Bank","brand:wikidata":"Q496606","brand:wikipedia":"en:KB Kookmin Bank",name:"국민은행","name:en":"KB Kookmin Bank"},matchScore:2,suggestion:true},"amenity/bank/기업은행":{name:"기업은행",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q483855"},addTags:{amenity:"bank",brand:"기업은행","brand:en":"Industrial Bank of Korea","brand:wikidata":"Q483855","brand:wikipedia":"en:Industrial Bank of Korea",name:"기업은행","name:en":"Industrial Bank of Korea"},removeTags:{amenity:"bank",brand:"기업은행","brand:en":"Industrial Bank of Korea","brand:wikidata":"Q483855","brand:wikipedia":"en:Industrial Bank of Korea",name:"기업은행","name:en":"Industrial Bank of Korea"},matchScore:2,suggestion:true},"amenity/bank/신한은행":{name:"신한은행",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q487230"},addTags:{amenity:"bank",brand:"신한은행","brand:en":"Sinhan Bank","brand:wikidata":"Q487230","brand:wikipedia":"en:Shinhan Bank",name:"신한은행","name:en":"Sinhan Bank"},removeTags:{amenity:"bank",brand:"신한은행","brand:en":"Sinhan Bank","brand:wikidata":"Q487230","brand:wikipedia":"en:Shinhan Bank",name:"신한은행","name:en":"Sinhan Bank"},matchScore:2,suggestion:true},"amenity/bank/우리은행":{name:"우리은행",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q494369"},addTags:{amenity:"bank",brand:"우리은행","brand:en":"Woori Bank","brand:wikidata":"Q494369","brand:wikipedia":"en:Woori Bank",name:"우리은행","name:en":"Woori Bank"},removeTags:{amenity:"bank",brand:"우리은행","brand:en":"Woori Bank","brand:wikidata":"Q494369","brand:wikipedia":"en:Woori Bank",name:"우리은행","name:en":"Woori Bank"},matchScore:2,suggestion:true},"amenity/bank/하나은행":{name:"하나은행",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bank","brand:wikidata":"Q484047"},addTags:{amenity:"bank",brand:"하나은행","brand:en":"Korea Exchange Bank","brand:wikidata":"Q484047","brand:wikipedia":"en:Korea Exchange Bank",name:"하나은행","name:en":"Korea Exchange Bank"},removeTags:{amenity:"bank",brand:"하나은행","brand:en":"Korea Exchange Bank","brand:wikidata":"Q484047","brand:wikipedia":"en:Korea Exchange Bank",name:"하나은행","name:en":"Korea Exchange Bank"},matchScore:2,suggestion:true},"amenity/bicycle_rental/Call a Bike":{name:"Call a Bike",icon:"maki-bicycle",geometry:["point","vertex","area"],tags:{amenity:"bicycle_rental","brand:wikidata":"Q1060525"},addTags:{amenity:"bicycle_rental",brand:"Call a Bike","brand:wikidata":"Q1060525","brand:wikipedia":"en:Call a Bike",name:"Call a Bike"},removeTags:{amenity:"bicycle_rental",brand:"Call a Bike","brand:wikidata":"Q1060525","brand:wikipedia":"en:Call a Bike",name:"Call a Bike"},matchScore:2,suggestion:true},"amenity/bureau_de_change/Travelex":{name:"Travelex",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"bureau_de_change","brand:wikidata":"Q2337964"},addTags:{amenity:"bureau_de_change",brand:"Travelex","brand:wikidata":"Q2337964","brand:wikipedia":"en:Travelex",name:"Travelex"},removeTags:{amenity:"bureau_de_change",brand:"Travelex","brand:wikidata":"Q2337964","brand:wikipedia":"en:Travelex",name:"Travelex"},matchScore:2,suggestion:true},"amenity/cafe/85度C":{name:"85度C",icon:"maki-cafe",geometry:["point","area"],tags:{amenity:"cafe","brand:wikidata":"Q4644852"},addTags:{amenity:"cafe",brand:"85度C","brand:en":"85C Bakery Cafe","brand:wikidata":"Q4644852","brand:wikipedia":"en:85C Bakery Cafe",name:"85度C","name:en":"85C Bakery Cafe"},removeTags:{amenity:"cafe",brand:"85度C","brand:en":"85C Bakery Cafe","brand:wikidata":"Q4644852","brand:wikipedia":"en:85C Bakery Cafe",name:"85度C","name:en":"85C Bakery Cafe"},matchScore:2,suggestion:true},"amenity/cafe/Barista":{name:"Barista",icon:"maki-cafe",geometry:["point","area"],tags:{amenity:"cafe","brand:wikidata":"Q644735"},addTags:{amenity:"cafe",brand:"Barista","brand:wikidata":"Q644735","brand:wikipedia":"en:Barista (company)",name:"Barista"},removeTags:{amenity:"cafe",brand:"Barista","brand:wikidata":"Q644735","brand:wikipedia":"en:Barista (company)",name:"Barista"},matchScore:2,suggestion:true},"amenity/cafe/Cafe Coffee Day":{name:"Cafe Coffee Day",icon:"maki-cafe",geometry:["point","area"],tags:{amenity:"cafe","brand:wikidata":"Q5017235"},addTags:{amenity:"cafe",brand:"Cafe Coffee Day","brand:wikidata":"Q5017235","brand:wikipedia":"en:Café Coffee Day",name:"Cafe Coffee Day"},removeTags:{amenity:"cafe",brand:"Cafe Coffee Day","brand:wikidata":"Q5017235","brand:wikipedia":"en:Café Coffee Day",name:"Cafe Coffee Day"},matchScore:2,suggestion:true},"amenity/cafe/Caffè Nero":{name:"Caffè Nero",icon:"maki-cafe",geometry:["point","area"],tags:{amenity:"cafe","brand:wikidata":"Q675808"},addTags:{amenity:"cafe",brand:"Caffè Nero","brand:wikidata":"Q675808","brand:wikipedia":"en:Caffè Nero",name:"Caffè Nero"},removeTags:{amenity:"cafe",brand:"Caffè Nero","brand:wikidata":"Q675808","brand:wikipedia":"en:Caffè Nero",name:"Caffè Nero"},matchScore:2,suggestion:true},"amenity/cafe/Café Amazon":{name:"Café Amazon",icon:"maki-cafe",geometry:["point","area"],tags:{amenity:"cafe","brand:wikidata":"Q43247503"},addTags:{amenity:"cafe",brand:"Café Amazon","brand:wikidata":"Q43247503","brand:wikipedia":"en:Café Amazon",name:"Café Amazon"},removeTags:{amenity:"cafe",brand:"Café Amazon","brand:wikidata":"Q43247503","brand:wikipedia":"en:Café Amazon",name:"Café Amazon"},matchScore:2,suggestion:true},"amenity/cafe/Café Martínez":{name:"Café Martínez",icon:"maki-cafe",geometry:["point","area"],tags:{amenity:"cafe","brand:wikidata":"Q16540032"},addTags:{amenity:"cafe",brand:"Café Martínez","brand:wikidata":"Q16540032","brand:wikipedia":"es:Café Martínez",name:"Café Martínez"},removeTags:{amenity:"cafe",brand:"Café Martínez","brand:wikidata":"Q16540032","brand:wikipedia":"es:Café Martínez",name:"Café Martínez"},matchScore:2,suggestion:true},"amenity/cafe/Caribou Coffee":{name:"Caribou Coffee",icon:"maki-cafe",geometry:["point","area"],tags:{amenity:"cafe","brand:wikidata":"Q5039494"},addTags:{amenity:"cafe",brand:"Caribou Coffee","brand:wikidata":"Q5039494","brand:wikipedia":"en:Caribou Coffee",name:"Caribou Coffee"},removeTags:{amenity:"cafe",brand:"Caribou Coffee","brand:wikidata":"Q5039494","brand:wikipedia":"en:Caribou Coffee",name:"Caribou Coffee"},matchScore:2,suggestion:true},"amenity/cafe/Chatime":{name:"Chatime",icon:"maki-cafe",geometry:["point","area"],tags:{amenity:"cafe","brand:wikidata":"Q16829306"},addTags:{amenity:"cafe",brand:"Chatime","brand:wikidata":"Q16829306","brand:wikipedia":"en:Chatime",name:"Chatime"},removeTags:{amenity:"cafe",brand:"Chatime","brand:wikidata":"Q16829306","brand:wikipedia":"en:Chatime",name:"Chatime"},matchScore:2,suggestion:true},"amenity/cafe/Coffee Fellows":{name:"Coffee Fellows",icon:"maki-cafe",geometry:["point","area"],tags:{amenity:"cafe","brand:wikidata":"Q23461429"},addTags:{amenity:"cafe",brand:"Coffee Fellows","brand:wikidata":"Q23461429","brand:wikipedia":"en:Coffee Fellows",name:"Coffee Fellows"},removeTags:{amenity:"cafe",brand:"Coffee Fellows","brand:wikidata":"Q23461429","brand:wikipedia":"en:Coffee Fellows",name:"Coffee Fellows"},matchScore:2,suggestion:true},"amenity/cafe/Coffee House":{name:"Coffee House",icon:"maki-cafe",geometry:["point","area"],tags:{amenity:"cafe","brand:wikidata":"Q11855430"},addTags:{amenity:"cafe",brand:"Coffee House","brand:wikidata":"Q11855430","brand:wikipedia":"fi:Coffee House",name:"Coffee House"},removeTags:{amenity:"cafe",brand:"Coffee House","brand:wikidata":"Q11855430","brand:wikipedia":"fi:Coffee House",name:"Coffee House"},matchScore:2,suggestion:true},"amenity/cafe/Coffee Island":{name:"Coffee Island",icon:"maki-cafe",geometry:["point","area"],tags:{amenity:"cafe","brand:wikidata":"Q60867333"},addTags:{amenity:"cafe",brand:"Coffee Island","brand:wikidata":"Q60867333","brand:wikipedia":"en:Coffee Island",name:"Coffee Island"},removeTags:{amenity:"cafe",brand:"Coffee Island","brand:wikidata":"Q60867333","brand:wikipedia":"en:Coffee Island",name:"Coffee Island"},matchScore:2,suggestion:true},"amenity/cafe/Coffee Time":{name:"Coffee Time",icon:"maki-cafe",geometry:["point","area"],tags:{amenity:"cafe","brand:wikidata":"Q5140932"},addTags:{amenity:"cafe",brand:"Coffee Time","brand:wikidata":"Q5140932","brand:wikipedia":"en:Coffee Time",name:"Coffee Time"},removeTags:{amenity:"cafe",brand:"Coffee Time","brand:wikidata":"Q5140932","brand:wikipedia":"en:Coffee Time",name:"Coffee Time"},matchScore:2,suggestion:true},"amenity/cafe/Costa":{name:"Costa",icon:"maki-cafe",geometry:["point","area"],tags:{amenity:"cafe","brand:wikidata":"Q608845"},addTags:{amenity:"cafe",brand:"Costa","brand:wikidata":"Q608845","brand:wikipedia":"en:Costa Coffee",name:"Costa"},removeTags:{amenity:"cafe",brand:"Costa","brand:wikidata":"Q608845","brand:wikipedia":"en:Costa Coffee",name:"Costa"},matchScore:2,suggestion:true},"amenity/cafe/Country Style":{name:"Country Style",icon:"maki-cafe",geometry:["point","area"],tags:{amenity:"cafe","brand:wikidata":"Q5177435"},addTags:{amenity:"cafe",brand:"Country Style","brand:wikidata":"Q5177435","brand:wikipedia":"en:Country Style",name:"Country Style"},removeTags:{amenity:"cafe",brand:"Country Style","brand:wikidata":"Q5177435","brand:wikipedia":"en:Country Style",name:"Country Style"},matchScore:2,suggestion:true},"amenity/cafe/Espresso House":{name:"Espresso House",icon:"maki-cafe",geometry:["point","area"],tags:{amenity:"cafe","brand:wikidata":"Q10489162"},addTags:{amenity:"cafe",brand:"Espresso House","brand:wikidata":"Q10489162","brand:wikipedia":"en:Espresso House",name:"Espresso House"},removeTags:{amenity:"cafe",brand:"Espresso House","brand:wikidata":"Q10489162","brand:wikipedia":"en:Espresso House",name:"Espresso House"},matchScore:2,suggestion:true},"amenity/cafe/Havanna":{name:"Havanna",icon:"maki-cafe",geometry:["point","area"],tags:{amenity:"cafe","brand:wikidata":"Q2900869"},addTags:{amenity:"cafe",brand:"Havanna","brand:wikidata":"Q2900869","brand:wikipedia":"es:Havanna",name:"Havanna"},removeTags:{amenity:"cafe",brand:"Havanna","brand:wikidata":"Q2900869","brand:wikipedia":"es:Havanna",name:"Havanna"},matchScore:2,suggestion:true},"amenity/cafe/Insomnia":{name:"Insomnia",icon:"maki-cafe",geometry:["point","area"],tags:{amenity:"cafe","brand:wikidata":"Q6038271"},addTags:{amenity:"cafe",brand:"Insomnia","brand:wikidata":"Q6038271","brand:wikipedia":"en:Insomnia Coffee Company",name:"Insomnia"},removeTags:{amenity:"cafe",brand:"Insomnia","brand:wikidata":"Q6038271","brand:wikipedia":"en:Insomnia Coffee Company",name:"Insomnia"},matchScore:2,suggestion:true},"amenity/cafe/Joe & The Juice":{name:"Joe & The Juice",icon:"maki-cafe",geometry:["point","area"],tags:{amenity:"cafe","brand:wikidata":"Q26221514"},addTags:{amenity:"cafe",brand:"Joe & The Juice","brand:wikidata":"Q26221514","brand:wikipedia":"en:Joe & The Juice",name:"Joe & The Juice"},removeTags:{amenity:"cafe",brand:"Joe & The Juice","brand:wikidata":"Q26221514","brand:wikipedia":"en:Joe & The Juice",name:"Joe & The Juice"},matchScore:2,suggestion:true},"amenity/cafe/Le Pain Quotidien":{name:"Le Pain Quotidien",icon:"maki-cafe",geometry:["point","area"],tags:{amenity:"cafe","brand:wikidata":"Q2046903"},addTags:{amenity:"cafe",brand:"Le Pain Quotidien","brand:wikidata":"Q2046903","brand:wikipedia":"en:Le Pain Quotidien",name:"Le Pain Quotidien"},removeTags:{amenity:"cafe",brand:"Le Pain Quotidien","brand:wikidata":"Q2046903","brand:wikipedia":"en:Le Pain Quotidien",name:"Le Pain Quotidien"},matchScore:2,suggestion:true},"amenity/cafe/Mado":{name:"Mado",icon:"maki-cafe",geometry:["point","area"],tags:{amenity:"cafe","brand:wikidata":"Q17116336"},addTags:{amenity:"cafe",brand:"Mado","brand:wikidata":"Q17116336","brand:wikipedia":"en:Mado (food company)",name:"Mado"},removeTags:{amenity:"cafe",brand:"Mado","brand:wikidata":"Q17116336","brand:wikipedia":"en:Mado (food company)",name:"Mado"},matchScore:2,suggestion:true},"amenity/cafe/McCafé":{name:"McCafé",icon:"maki-cafe",geometry:["point","area"],tags:{amenity:"cafe","brand:wikidata":"Q3114287"},addTags:{amenity:"cafe",brand:"McCafé","brand:wikidata":"Q3114287","brand:wikipedia":"en:McCafé",cuisine:"coffee_shop",name:"McCafé"},removeTags:{amenity:"cafe",brand:"McCafé","brand:wikidata":"Q3114287","brand:wikipedia":"en:McCafé",cuisine:"coffee_shop",name:"McCafé"},matchScore:2,suggestion:true},"amenity/cafe/Patisserie Valerie":{name:"Patisserie Valerie",icon:"maki-cafe",geometry:["point","area"],tags:{amenity:"cafe","brand:wikidata":"Q22101966"},addTags:{amenity:"cafe",brand:"Patisserie Valerie","brand:wikidata":"Q22101966","brand:wikipedia":"en:Patisserie Valerie",cuisine:"cake",name:"Patisserie Valerie"},removeTags:{amenity:"cafe",brand:"Patisserie Valerie","brand:wikidata":"Q22101966","brand:wikipedia":"en:Patisserie Valerie",cuisine:"cake",name:"Patisserie Valerie"},matchScore:2,suggestion:true},"amenity/cafe/Peet's Coffee":{name:"Peet's Coffee",icon:"maki-cafe",geometry:["point","area"],tags:{amenity:"cafe","brand:wikidata":"Q1094101"},addTags:{amenity:"cafe",brand:"Peet's Coffee","brand:wikidata":"Q1094101","brand:wikipedia":"en:Peet's Coffee",name:"Peet's Coffee"},removeTags:{amenity:"cafe",brand:"Peet's Coffee","brand:wikidata":"Q1094101","brand:wikipedia":"en:Peet's Coffee",name:"Peet's Coffee"},matchScore:2,suggestion:true},"amenity/cafe/Pret A Manger":{name:"Pret A Manger",icon:"maki-cafe",geometry:["point","area"],tags:{amenity:"cafe","brand:wikidata":"Q2109109"},addTags:{amenity:"cafe",brand:"Pret A Manger","brand:wikidata":"Q2109109","brand:wikipedia":"en:Pret a Manger",name:"Pret A Manger"},removeTags:{amenity:"cafe",brand:"Pret A Manger","brand:wikidata":"Q2109109","brand:wikipedia":"en:Pret a Manger",name:"Pret A Manger"},matchScore:2,suggestion:true},"amenity/cafe/Pumpkin":{name:"Pumpkin",icon:"maki-cafe",geometry:["point","area"],tags:{amenity:"cafe","brand:wikidata":"Q27825961"},addTags:{amenity:"cafe",brand:"Pumpkin","brand:wikidata":"Q27825961","brand:wikipedia":"en:Pumpkin Café Shop",name:"Pumpkin"},removeTags:{amenity:"cafe",brand:"Pumpkin","brand:wikidata":"Q27825961","brand:wikipedia":"en:Pumpkin Café Shop",name:"Pumpkin"},matchScore:2,suggestion:true},"amenity/cafe/Second Cup":{name:"Second Cup",icon:"maki-cafe",geometry:["point","area"],tags:{amenity:"cafe","brand:wikidata":"Q862180"},addTags:{amenity:"cafe",brand:"Second Cup","brand:wikidata":"Q862180","brand:wikipedia":"en:Second Cup",name:"Second Cup"},removeTags:{amenity:"cafe",brand:"Second Cup","brand:wikidata":"Q862180","brand:wikipedia":"en:Second Cup",name:"Second Cup"},matchScore:2,suggestion:true},"amenity/cafe/Segafredo":{name:"Segafredo",icon:"maki-cafe",geometry:["point","area"],tags:{amenity:"cafe","brand:wikidata":"Q21282762"},addTags:{amenity:"cafe",brand:"Segafredo","brand:wikidata":"Q21282762","brand:wikipedia":"it:Segafredo Zanetti",name:"Segafredo"},removeTags:{amenity:"cafe",brand:"Segafredo","brand:wikidata":"Q21282762","brand:wikipedia":"it:Segafredo Zanetti",name:"Segafredo"},matchScore:2,suggestion:true},"amenity/cafe/Starbucks":{name:"Starbucks",icon:"maki-cafe",geometry:["point","area"],tags:{amenity:"cafe","brand:wikidata":"Q37158"},addTags:{amenity:"cafe",brand:"Starbucks","brand:wikidata":"Q37158","brand:wikipedia":"en:Starbucks",cuisine:"coffee_shop",name:"Starbucks"},removeTags:{amenity:"cafe",brand:"Starbucks","brand:wikidata":"Q37158","brand:wikipedia":"en:Starbucks",cuisine:"coffee_shop",name:"Starbucks"},matchScore:2,suggestion:true},"amenity/cafe/The Coffee Bean & Tea Leaf":{name:"The Coffee Bean & Tea Leaf",icon:"maki-cafe",geometry:["point","area"],tags:{amenity:"cafe","brand:wikidata":"Q1141384"},addTags:{amenity:"cafe",brand:"The Coffee Bean & Tea Leaf","brand:wikidata":"Q1141384","brand:wikipedia":"en:The Coffee Bean & Tea Leaf",name:"The Coffee Bean & Tea Leaf"},removeTags:{amenity:"cafe",brand:"The Coffee Bean & Tea Leaf","brand:wikidata":"Q1141384","brand:wikipedia":"en:The Coffee Bean & Tea Leaf",name:"The Coffee Bean & Tea Leaf"},matchScore:2,suggestion:true},"amenity/cafe/The Coffee Club":{name:"The Coffee Club",icon:"maki-cafe",geometry:["point","area"],tags:{amenity:"cafe","brand:wikidata":"Q7726599"},addTags:{amenity:"cafe",brand:"The Coffee Club","brand:wikidata":"Q7726599","brand:wikipedia":"en:The Coffee Club",name:"The Coffee Club"},removeTags:{amenity:"cafe",brand:"The Coffee Club","brand:wikidata":"Q7726599","brand:wikipedia":"en:The Coffee Club",name:"The Coffee Club"},matchScore:2,suggestion:true},"amenity/cafe/Tim Hortons":{name:"Tim Hortons",icon:"maki-cafe",geometry:["point","area"],tags:{amenity:"cafe","brand:wikidata":"Q175106"},addTags:{amenity:"cafe",brand:"Tim Hortons","brand:wikidata":"Q175106","brand:wikipedia":"en:Tim Hortons",name:"Tim Hortons"},removeTags:{amenity:"cafe",brand:"Tim Hortons","brand:wikidata":"Q175106","brand:wikipedia":"en:Tim Hortons",name:"Tim Hortons"},matchScore:2,suggestion:true},"amenity/cafe/Traveler's Coffee":{name:"Traveler's Coffee",icon:"maki-cafe",geometry:["point","area"],tags:{amenity:"cafe","brand:wikidata":"Q4051716"},addTags:{amenity:"cafe",brand:"Traveler's Coffee","brand:wikidata":"Q4051716","brand:wikipedia":"ru:Traveler’s Coffee",name:"Traveler's Coffee"},removeTags:{amenity:"cafe",brand:"Traveler's Coffee","brand:wikidata":"Q4051716","brand:wikipedia":"ru:Traveler’s Coffee",name:"Traveler's Coffee"},matchScore:2,suggestion:true},"amenity/cafe/Wayne's Coffee":{name:"Wayne's Coffee",icon:"maki-cafe",geometry:["point","area"],tags:{amenity:"cafe","brand:wikidata":"Q2637272"},addTags:{amenity:"cafe",brand:"Wayne's Coffee","brand:wikidata":"Q2637272","brand:wikipedia":"en:Wayne's Coffee",name:"Wayne's Coffee"},removeTags:{amenity:"cafe",brand:"Wayne's Coffee","brand:wikidata":"Q2637272","brand:wikipedia":"en:Wayne's Coffee",name:"Wayne's Coffee"},matchScore:2,suggestion:true},"amenity/cafe/Старбакс":{name:"Старбакс",icon:"maki-cafe",geometry:["point","area"],tags:{amenity:"cafe","brand:wikidata":"Q37158"},addTags:{amenity:"cafe",brand:"Старбакс","brand:en":"Starbucks","brand:wikidata":"Q37158","brand:wikipedia":"en:Starbucks",name:"Старбакс","name:en":"Starbucks"},removeTags:{amenity:"cafe",brand:"Старбакс","brand:en":"Starbucks","brand:wikidata":"Q37158","brand:wikipedia":"en:Starbucks",name:"Старбакс","name:en":"Starbucks"},matchScore:2,suggestion:true},"amenity/cafe/Шоколадница":{name:"Шоколадница",icon:"maki-cafe",geometry:["point","area"],tags:{amenity:"cafe","brand:wikidata":"Q30891188"},addTags:{amenity:"cafe",brand:"Шоколадница","brand:en":"Chocolate","brand:wikidata":"Q30891188","brand:wikipedia":"ru:Шоколадница (сеть кофеен)",name:"Шоколадница","name:en":"Chocolate"},removeTags:{amenity:"cafe",brand:"Шоколадница","brand:en":"Chocolate","brand:wikidata":"Q30891188","brand:wikipedia":"ru:Шоколадница (сеть кофеен)",name:"Шоколадница","name:en":"Chocolate"},matchScore:2,suggestion:true},"amenity/cafe/ארומה":{name:"ארומה",icon:"maki-cafe",geometry:["point","area"],tags:{amenity:"cafe","brand:wikidata":"Q2909872"},addTags:{amenity:"cafe",brand:"ארומה","brand:en":"Aroma Espresso Bar","brand:wikidata":"Q2909872","brand:wikipedia":"en:Aroma Espresso Bar",name:"ארומה","name:en":"Aroma Espresso Bar"},removeTags:{amenity:"cafe",brand:"ארומה","brand:en":"Aroma Espresso Bar","brand:wikidata":"Q2909872","brand:wikipedia":"en:Aroma Espresso Bar",name:"ארומה","name:en":"Aroma Espresso Bar"},matchScore:2,suggestion:true},"amenity/cafe/คาเฟ่ อเมซอน":{name:"คาเฟ่ อเมซอน",icon:"maki-cafe",geometry:["point","area"],tags:{amenity:"cafe","brand:wikidata":"Q43247503"},addTags:{amenity:"cafe",brand:"คาเฟ่ อเมซอน","brand:en":"Café Amazon","brand:wikidata":"Q43247503","brand:wikipedia":"en:Café Amazon",name:"คาเฟ่ อเมซอน","name:en":"Café Amazon"},removeTags:{amenity:"cafe",brand:"คาเฟ่ อเมซอน","brand:en":"Café Amazon","brand:wikidata":"Q43247503","brand:wikipedia":"en:Café Amazon",name:"คาเฟ่ อเมซอน","name:en":"Café Amazon"},matchScore:2,suggestion:true},"amenity/cafe/エクセルシオール カフェ":{name:"エクセルシオール カフェ",icon:"maki-cafe",geometry:["point","area"],tags:{amenity:"cafe","brand:wikidata":"Q11289828"},addTags:{amenity:"cafe",brand:"エクセルシオール カフェ","brand:en":"EXCELSIOR CAFFÉ","brand:wikidata":"Q11289828","brand:wikipedia":"ja:エクセルシオール カフェ",cuisine:"coffee_shop",name:"エクセルシオール カフェ"},removeTags:{amenity:"cafe",brand:"エクセルシオール カフェ","brand:en":"EXCELSIOR CAFFÉ","brand:wikidata":"Q11289828","brand:wikipedia":"ja:エクセルシオール カフェ",cuisine:"coffee_shop",name:"エクセルシオール カフェ"},matchScore:2,suggestion:true},"amenity/cafe/カフェ・ド・クリエ":{name:"カフェ・ド・クリエ",icon:"maki-cafe",geometry:["point","area"],tags:{amenity:"cafe","brand:wikidata":"Q17219077"},addTags:{amenity:"cafe",brand:"カフェ・ド・クリエ","brand:en":"Cafe de CRIE","brand:wikidata":"Q17219077","brand:wikipedia":"ja:ポッカクリエイト",name:"カフェ・ド・クリエ","name:en":"Cafe de CRIE"},removeTags:{amenity:"cafe",brand:"カフェ・ド・クリエ","brand:en":"Cafe de CRIE","brand:wikidata":"Q17219077","brand:wikipedia":"ja:ポッカクリエイト",name:"カフェ・ド・クリエ","name:en":"Cafe de CRIE"},matchScore:2,suggestion:true},"amenity/cafe/カフェ・ベローチェ":{name:"カフェ・ベローチェ",icon:"maki-cafe",geometry:["point","area"],tags:{amenity:"cafe","brand:wikidata":"Q11294597"},addTags:{amenity:"cafe",brand:"カフェ・ベローチェ","brand:en":"CAFFÈ VELOCE","brand:wikidata":"Q11294597","brand:wikipedia":"ja:カフェ・ベローチェ",cuisine:"coffee_shop",name:"カフェ・ベローチェ","name:en":"CAFFÈ VELOCE"},removeTags:{amenity:"cafe",brand:"カフェ・ベローチェ","brand:en":"CAFFÈ VELOCE","brand:wikidata":"Q11294597","brand:wikipedia":"ja:カフェ・ベローチェ",cuisine:"coffee_shop",name:"カフェ・ベローチェ","name:en":"CAFFÈ VELOCE"},matchScore:2,suggestion:true},"amenity/cafe/コメダ珈琲店":{name:"コメダ珈琲店",icon:"maki-cafe",geometry:["point","area"],tags:{amenity:"cafe","brand:wikidata":"Q11302679"},addTags:{amenity:"cafe",brand:"コメダ珈琲店","brand:en":"Komeda Coffee Shop","brand:wikidata":"Q11302679","brand:wikipedia":"ja:コメダ",cuisine:"coffee_shop",name:"コメダ珈琲店","name:en":"Komeda Coffee Shop"},removeTags:{amenity:"cafe",brand:"コメダ珈琲店","brand:en":"Komeda Coffee Shop","brand:wikidata":"Q11302679","brand:wikipedia":"ja:コメダ",cuisine:"coffee_shop",name:"コメダ珈琲店","name:en":"Komeda Coffee Shop"},matchScore:2,suggestion:true},"amenity/cafe/サンマルクカフェ":{name:"サンマルクカフェ",icon:"maki-cafe",geometry:["point","area"],tags:{amenity:"cafe","brand:wikidata":"Q11305989"},addTags:{amenity:"cafe",brand:"サンマルクカフェ","brand:en":"ST.MARC CAFÉ","brand:wikidata":"Q11305989","brand:wikipedia":"ja:サンマルクホールディングス",cuisine:"coffee_shop",name:"サンマルクカフェ","name:en":"ST.MARC CAFÉ"},removeTags:{amenity:"cafe",brand:"サンマルクカフェ","brand:en":"ST.MARC CAFÉ","brand:wikidata":"Q11305989","brand:wikipedia":"ja:サンマルクホールディングス",cuisine:"coffee_shop",name:"サンマルクカフェ","name:en":"ST.MARC CAFÉ"},matchScore:2,suggestion:true},"amenity/cafe/スターバックス":{name:"スターバックス",icon:"maki-cafe",geometry:["point","area"],tags:{amenity:"cafe","brand:wikidata":"Q37158"},addTags:{amenity:"cafe",brand:"スターバックス","brand:en":"Starbucks","brand:wikidata":"Q37158","brand:wikipedia":"ja:スターバックス",cuisine:"coffee_shop",name:"スターバックス","name:en":"Starbucks"},removeTags:{amenity:"cafe",brand:"スターバックス","brand:en":"Starbucks","brand:wikidata":"Q37158","brand:wikipedia":"ja:スターバックス",cuisine:"coffee_shop",name:"スターバックス","name:en":"Starbucks"},matchScore:2,suggestion:true},"amenity/cafe/タリーズコーヒー":{name:"タリーズコーヒー",icon:"maki-cafe",geometry:["point","area"],tags:{amenity:"cafe","brand:wikidata":"Q3541983"},addTags:{amenity:"cafe",brand:"タリーズコーヒー","brand:en":"Tully's Coffee","brand:wikidata":"Q3541983","brand:wikipedia":"en:Tully's Coffee",name:"タリーズコーヒー","name:en":"Tully's Coffee"},removeTags:{amenity:"cafe",brand:"タリーズコーヒー","brand:en":"Tully's Coffee","brand:wikidata":"Q3541983","brand:wikipedia":"en:Tully's Coffee",name:"タリーズコーヒー","name:en":"Tully's Coffee"},matchScore:2,suggestion:true},"amenity/cafe/ドトールコーヒーショップ":{name:"ドトールコーヒーショップ",icon:"maki-cafe",geometry:["point","area"],tags:{amenity:"cafe","brand:wikidata":"Q11322732"},addTags:{amenity:"cafe",brand:"ドトールコーヒーショップ","brand:en":"Doutor","brand:wikidata":"Q11322732","brand:wikipedia":"ja:ドトールコーヒーショップ",cuisine:"coffee_shop",name:"ドトールコーヒーショップ","name:en":"Doutor Coffee Shop"},removeTags:{amenity:"cafe",brand:"ドトールコーヒーショップ","brand:en":"Doutor","brand:wikidata":"Q11322732","brand:wikipedia":"ja:ドトールコーヒーショップ",cuisine:"coffee_shop",name:"ドトールコーヒーショップ","name:en":"Doutor Coffee Shop"},matchScore:2,suggestion:true},"amenity/cafe/星巴克":{name:"星巴克",icon:"maki-cafe",geometry:["point","area"],tags:{amenity:"cafe","brand:wikidata":"Q37158"},addTags:{amenity:"cafe",brand:"星巴克","brand:en":"Starbucks","brand:wikidata":"Q37158","brand:wikipedia":"zh:星巴克",cuisine:"coffee_shop",name:"星巴克","name:en":"Starbucks"},removeTags:{amenity:"cafe",brand:"星巴克","brand:en":"Starbucks","brand:wikidata":"Q37158","brand:wikipedia":"zh:星巴克",cuisine:"coffee_shop",name:"星巴克","name:en":"Starbucks"},matchScore:2,suggestion:true},"amenity/cafe/스타벅스":{name:"스타벅스",icon:"maki-cafe",geometry:["point","area"],tags:{amenity:"cafe","brand:wikidata":"Q37158"},addTags:{amenity:"cafe",brand:"스타벅스","brand:en":"Starbucks","brand:wikidata":"Q37158","brand:wikipedia":"ko:스타벅스",cuisine:"coffee_shop",name:"스타벅스","name:en":"Starbucks"},removeTags:{amenity:"cafe",brand:"스타벅스","brand:en":"Starbucks","brand:wikidata":"Q37158","brand:wikipedia":"ko:스타벅스",cuisine:"coffee_shop",name:"스타벅스","name:en":"Starbucks"},matchScore:2,suggestion:true},"amenity/car_rental/Alamo":{name:"Alamo",icon:"maki-car-rental",geometry:["point","area"],tags:{amenity:"car_rental","brand:wikidata":"Q1429287"},addTags:{amenity:"car_rental",brand:"Alamo","brand:wikidata":"Q1429287","brand:wikipedia":"en:Alamo Rent a Car",name:"Alamo"},removeTags:{amenity:"car_rental",brand:"Alamo","brand:wikidata":"Q1429287","brand:wikipedia":"en:Alamo Rent a Car",name:"Alamo"},matchScore:2,suggestion:true},"amenity/car_rental/Avis":{name:"Avis",icon:"maki-car-rental",geometry:["point","area"],tags:{amenity:"car_rental","brand:wikidata":"Q791136"},addTags:{amenity:"car_rental",brand:"Avis","brand:wikidata":"Q791136","brand:wikipedia":"en:Avis Rent a Car",name:"Avis"},removeTags:{amenity:"car_rental",brand:"Avis","brand:wikidata":"Q791136","brand:wikipedia":"en:Avis Rent a Car",name:"Avis"},matchScore:2,suggestion:true},"amenity/car_rental/Budget":{name:"Budget",icon:"maki-car-rental",geometry:["point","area"],tags:{amenity:"car_rental","brand:wikidata":"Q1001437"},addTags:{amenity:"car_rental",brand:"Budget","brand:wikidata":"Q1001437","brand:wikipedia":"en:Budget Rent a Car",name:"Budget"},removeTags:{amenity:"car_rental",brand:"Budget","brand:wikidata":"Q1001437","brand:wikipedia":"en:Budget Rent a Car",name:"Budget"},matchScore:2,suggestion:true},"amenity/car_rental/Dollar":{name:"Dollar",icon:"maki-car-rental",geometry:["point","area"],tags:{amenity:"car_rental","brand:wikidata":"Q1235661"},addTags:{amenity:"car_rental",brand:"Dollar","brand:wikidata":"Q1235661","brand:wikipedia":"en:Dollar Rent A Car",name:"Dollar"},removeTags:{amenity:"car_rental",brand:"Dollar","brand:wikidata":"Q1235661","brand:wikipedia":"en:Dollar Rent A Car",name:"Dollar"},matchScore:2,suggestion:true},"amenity/car_rental/Enterprise":{name:"Enterprise",icon:"maki-car-rental",geometry:["point","area"],tags:{amenity:"car_rental","brand:wikidata":"Q17085454"},addTags:{amenity:"car_rental",brand:"Enterprise","brand:wikidata":"Q17085454","brand:wikipedia":"en:Enterprise Rent-A-Car",name:"Enterprise"},removeTags:{amenity:"car_rental",brand:"Enterprise","brand:wikidata":"Q17085454","brand:wikipedia":"en:Enterprise Rent-A-Car",name:"Enterprise"},matchScore:2,suggestion:true},"amenity/car_rental/Europcar":{name:"Europcar",icon:"maki-car-rental",geometry:["point","area"],tags:{amenity:"car_rental","brand:wikidata":"Q1376256"},addTags:{amenity:"car_rental",brand:"Europcar","brand:wikidata":"Q1376256","brand:wikipedia":"en:Europcar",name:"Europcar"},removeTags:{amenity:"car_rental",brand:"Europcar","brand:wikidata":"Q1376256","brand:wikipedia":"en:Europcar",name:"Europcar"},matchScore:2,suggestion:true},"amenity/car_rental/Hertz":{name:"Hertz",icon:"maki-car-rental",geometry:["point","area"],tags:{amenity:"car_rental","brand:wikidata":"Q1543874"},addTags:{amenity:"car_rental",brand:"Hertz","brand:wikidata":"Q1543874","brand:wikipedia":"en:The Hertz Corporation",name:"Hertz"},removeTags:{amenity:"car_rental",brand:"Hertz","brand:wikidata":"Q1543874","brand:wikipedia":"en:The Hertz Corporation",name:"Hertz"},matchScore:2,suggestion:true},"amenity/car_rental/Localiza":{name:"Localiza",icon:"maki-car-rental",geometry:["point","area"],tags:{amenity:"car_rental","brand:wikidata":"Q10319490"},addTags:{amenity:"car_rental",brand:"Localiza","brand:wikidata":"Q10319490","brand:wikipedia":"en:Localiza",name:"Localiza"},removeTags:{amenity:"car_rental",brand:"Localiza","brand:wikidata":"Q10319490","brand:wikipedia":"en:Localiza",name:"Localiza"},matchScore:2,suggestion:true},"amenity/car_rental/Sixt":{name:"Sixt",icon:"maki-car-rental",geometry:["point","area"],tags:{amenity:"car_rental","brand:wikidata":"Q705664"},addTags:{amenity:"car_rental",brand:"Sixt","brand:wikidata":"Q705664","brand:wikipedia":"en:Sixt",name:"Sixt"},removeTags:{amenity:"car_rental",brand:"Sixt","brand:wikidata":"Q705664","brand:wikipedia":"en:Sixt",name:"Sixt"},matchScore:2,suggestion:true},"amenity/car_rental/Thrifty":{name:"Thrifty",icon:"maki-car-rental",geometry:["point","area"],tags:{amenity:"car_rental","brand:wikidata":"Q2429546"},addTags:{amenity:"car_rental",brand:"Thrifty","brand:wikidata":"Q2429546","brand:wikipedia":"en:Thrifty Car Rental",name:"Thrifty"},removeTags:{amenity:"car_rental",brand:"Thrifty","brand:wikidata":"Q2429546","brand:wikipedia":"en:Thrifty Car Rental",name:"Thrifty"},matchScore:2,suggestion:true},"amenity/car_rental/U-Haul":{name:"U-Haul",icon:"maki-car-rental",geometry:["point","area"],tags:{amenity:"car_rental","brand:wikidata":"Q7862902"},addTags:{amenity:"car_rental",brand:"U-Haul","brand:wikidata":"Q7862902","brand:wikipedia":"en:U-Haul",name:"U-Haul"},removeTags:{amenity:"car_rental",brand:"U-Haul","brand:wikidata":"Q7862902","brand:wikipedia":"en:U-Haul",name:"U-Haul"},matchScore:2,suggestion:true},"amenity/car_rental/オリックスレンタカー":{name:"オリックスレンタカー",icon:"maki-car-rental",geometry:["point","area"],tags:{amenity:"car_rental","brand:wikidata":"Q11123021"},addTags:{amenity:"car_rental",brand:"オリックスレンタカー","brand:en":"ORIX Car Rental","brand:wikidata":"Q11123021","brand:wikipedia":"ja:オリックスレンタカー",name:"オリックスレンタカー","name:en":"ORIX Car Rental"},removeTags:{amenity:"car_rental",brand:"オリックスレンタカー","brand:en":"ORIX Car Rental","brand:wikidata":"Q11123021","brand:wikipedia":"ja:オリックスレンタカー",name:"オリックスレンタカー","name:en":"ORIX Car Rental"},matchScore:2,suggestion:true},"amenity/car_rental/トヨタレンタカー":{name:"トヨタレンタカー",icon:"maki-car-rental",geometry:["point","area"],tags:{amenity:"car_rental","brand:wikidata":"Q11321580"},addTags:{amenity:"car_rental",brand:"トヨタレンタカー","brand:en":"Toyota Rental Car","brand:wikidata":"Q11321580","brand:wikipedia":"ja:トヨタレンタリース",name:"トヨタレンタカー","name:en":"Toyota Rental Car"},removeTags:{amenity:"car_rental",brand:"トヨタレンタカー","brand:en":"Toyota Rental Car","brand:wikidata":"Q11321580","brand:wikipedia":"ja:トヨタレンタリース",name:"トヨタレンタカー","name:en":"Toyota Rental Car"},matchScore:2,suggestion:true},"amenity/car_rental/ニッポンレンタカー":{name:"ニッポンレンタカー",icon:"maki-car-rental",geometry:["point","area"],tags:{amenity:"car_rental","brand:wikidata":"Q11086533"},addTags:{amenity:"car_rental",brand:"ニッポンレンタカー","brand:en":"Nippon Car Rental","brand:wikidata":"Q11086533","brand:wikipedia":"ja:ニッポンレンタカー",name:"ニッポンレンタカー","name:en":"Nippon Car Rental"},removeTags:{amenity:"car_rental",brand:"ニッポンレンタカー","brand:en":"Nippon Car Rental","brand:wikidata":"Q11086533","brand:wikipedia":"ja:ニッポンレンタカー",name:"ニッポンレンタカー","name:en":"Nippon Car Rental"},matchScore:2,suggestion:true},"amenity/car_rental/日産レンタカー":{name:"日産レンタカー",icon:"maki-car-rental",geometry:["point","area"],tags:{amenity:"car_rental","brand:wikidata":"Q11086838"},addTags:{amenity:"car_rental",brand:"日産レンタカー","brand:en":"Nissan Car Rental","brand:wikidata":"Q11086838","brand:wikipedia":"ja:日産レンタカー",name:"日産レンタカー","name:en":"Nissan Car Rental"},removeTags:{amenity:"car_rental",brand:"日産レンタカー","brand:en":"Nissan Car Rental","brand:wikidata":"Q11086838","brand:wikipedia":"ja:日産レンタカー",name:"日産レンタカー","name:en":"Nissan Car Rental"},matchScore:2,suggestion:true},"amenity/charging_station/ChargePoint":{name:"ChargePoint",icon:"fas-charging-station",geometry:["point"],tags:{amenity:"charging_station","brand:wikidata":"Q5176149"},addTags:{amenity:"charging_station",brand:"ChargePoint","brand:wikidata":"Q5176149","brand:wikipedia":"en:ChargePoint",name:"ChargePoint"},removeTags:{amenity:"charging_station",brand:"ChargePoint","brand:wikidata":"Q5176149","brand:wikipedia":"en:ChargePoint",name:"ChargePoint"},matchScore:2,suggestion:true},"amenity/charging_station/Enel - stazione di ricarica":{name:"Enel - stazione di ricarica",icon:"fas-charging-station",geometry:["point"],tags:{amenity:"charging_station","brand:wikidata":"Q651222"},addTags:{amenity:"charging_station",brand:"Enel - stazione di ricarica","brand:wikidata":"Q651222","brand:wikipedia":"en:Enel",name:"Enel - stazione di ricarica"},removeTags:{amenity:"charging_station",brand:"Enel - stazione di ricarica","brand:wikidata":"Q651222","brand:wikipedia":"en:Enel",name:"Enel - stazione di ricarica"},matchScore:2,suggestion:true},"amenity/charging_station/Tesla Supercharger":{name:"Tesla Supercharger",icon:"fas-charging-station",geometry:["point"],tags:{amenity:"charging_station","brand:wikidata":"Q17089620"},addTags:{amenity:"charging_station",brand:"Tesla Supercharger","brand:wikidata":"Q17089620","brand:wikipedia":"en:Tesla Supercharger",name:"Tesla Supercharger"},removeTags:{amenity:"charging_station",brand:"Tesla Supercharger","brand:wikidata":"Q17089620","brand:wikipedia":"en:Tesla Supercharger",name:"Tesla Supercharger"},matchScore:2,suggestion:true},"amenity/cinema/Cinema City":{name:"Cinema City",icon:"maki-cinema",geometry:["point","area"],tags:{amenity:"cinema","brand:wikidata":"Q543651"},addTags:{amenity:"cinema",brand:"Cinema City","brand:wikidata":"Q543651","brand:wikipedia":"en:Cinema City International",name:"Cinema City"},removeTags:{amenity:"cinema",brand:"Cinema City","brand:wikidata":"Q543651","brand:wikipedia":"en:Cinema City International",name:"Cinema City"},matchScore:2,suggestion:true},"amenity/cinema/Cinemark":{name:"Cinemark",icon:"maki-cinema",geometry:["point","area"],tags:{amenity:"cinema","brand:wikidata":"Q707530"},addTags:{amenity:"cinema",brand:"Cinemark","brand:wikidata":"Q707530","brand:wikipedia":"en:Cinemark Theatres",name:"Cinemark"},removeTags:{amenity:"cinema",brand:"Cinemark","brand:wikidata":"Q707530","brand:wikipedia":"en:Cinemark Theatres",name:"Cinemark"},matchScore:2,suggestion:true},"amenity/cinema/Cinemex":{name:"Cinemex",icon:"maki-cinema",geometry:["point","area"],tags:{amenity:"cinema","brand:wikidata":"Q3333072"},addTags:{amenity:"cinema",brand:"Cinemex","brand:wikidata":"Q3333072","brand:wikipedia":"en:Cinemex",name:"Cinemex"},removeTags:{amenity:"cinema",brand:"Cinemex","brand:wikidata":"Q3333072","brand:wikipedia":"en:Cinemex",name:"Cinemex"},matchScore:2,suggestion:true},"amenity/cinema/Cinepolis":{name:"Cinepolis",icon:"maki-cinema",geometry:["point","area"],tags:{amenity:"cinema","brand:wikidata":"Q5686673"},addTags:{amenity:"cinema",brand:"Cinepolis","brand:wikidata":"Q5686673","brand:wikipedia":"en:Cinépolis",name:"Cinepolis"},removeTags:{amenity:"cinema",brand:"Cinepolis","brand:wikidata":"Q5686673","brand:wikipedia":"en:Cinépolis",name:"Cinepolis"},matchScore:2,suggestion:true},"amenity/cinema/Cineworld":{name:"Cineworld",icon:"maki-cinema",geometry:["point","area"],tags:{amenity:"cinema","brand:wikidata":"Q5120901"},addTags:{amenity:"cinema",brand:"Cineworld","brand:wikidata":"Q5120901","brand:wikipedia":"en:Cineworld",name:"Cineworld"},removeTags:{amenity:"cinema",brand:"Cineworld","brand:wikidata":"Q5120901","brand:wikipedia":"en:Cineworld",name:"Cineworld"},matchScore:2,suggestion:true},"amenity/cinema/Odeon":{name:"Odeon",icon:"maki-cinema",geometry:["point","area"],tags:{amenity:"cinema","brand:wikidata":"Q6127470"},addTags:{amenity:"cinema",brand:"Odeon","brand:wikidata":"Q6127470","brand:wikipedia":"en:Odeon Cinemas",name:"Odeon"},removeTags:{amenity:"cinema",brand:"Odeon","brand:wikidata":"Q6127470","brand:wikipedia":"en:Odeon Cinemas",name:"Odeon"},matchScore:2,suggestion:true},"amenity/fast_food/burger/A&W (Canada)":{name:"A&W (Canada)",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food",cuisine:"burger","brand:wikidata":"Q2818848"},addTags:{amenity:"fast_food",brand:"A&W","brand:wikidata":"Q2818848","brand:wikipedia":"en:A&W (Canada)",cuisine:"burger",name:"A&W"},removeTags:{amenity:"fast_food",brand:"A&W","brand:wikidata":"Q2818848","brand:wikipedia":"en:A&W (Canada)",cuisine:"burger",name:"A&W"},reference:{key:"cuisine",value:"burger"},matchScore:2,suggestion:true},"amenity/fast_food/burger/A&W (USA)":{name:"A&W (USA)",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food",cuisine:"burger","brand:wikidata":"Q277641"},addTags:{amenity:"fast_food",brand:"A&W","brand:wikidata":"Q277641","brand:wikipedia":"en:A&W Restaurants",cuisine:"burger",name:"A&W"},removeTags:{amenity:"fast_food",brand:"A&W","brand:wikidata":"Q277641","brand:wikipedia":"en:A&W Restaurants",cuisine:"burger",name:"A&W"},reference:{key:"cuisine",value:"burger"},matchScore:2,suggestion:true},"amenity/fast_food/sandwich/Arby's":{name:"Arby's",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"fast_food",cuisine:"sandwich","brand:wikidata":"Q630866"},addTags:{amenity:"fast_food",brand:"Arby's","brand:wikidata":"Q630866","brand:wikipedia":"en:Arby's",cuisine:"sandwich",name:"Arby's"},removeTags:{amenity:"fast_food",brand:"Arby's","brand:wikidata":"Q630866","brand:wikipedia":"en:Arby's",cuisine:"sandwich",name:"Arby's"},reference:{key:"cuisine",value:"sandwich"},matchScore:2,suggestion:true},"amenity/fast_food/Auntie Anne's":{name:"Auntie Anne's",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food","brand:wikidata":"Q4822010"},addTags:{amenity:"fast_food",brand:"Auntie Anne's","brand:wikidata":"Q4822010","brand:wikipedia":"en:Auntie Anne's",cuisine:"pretzel",name:"Auntie Anne's"},removeTags:{amenity:"fast_food",brand:"Auntie Anne's","brand:wikidata":"Q4822010","brand:wikipedia":"en:Auntie Anne's",cuisine:"pretzel",name:"Auntie Anne's"},matchScore:2,suggestion:true},"amenity/fast_food/mexican/Baja Fresh":{name:"Baja Fresh",icon:"fas-pepper-hot",geometry:["point","area"],tags:{amenity:"fast_food",cuisine:"mexican","brand:wikidata":"Q2880019"},addTags:{amenity:"fast_food",brand:"Baja Fresh","brand:wikidata":"Q2880019","brand:wikipedia":"en:Baja Fresh",cuisine:"mexican",name:"Baja Fresh"},removeTags:{amenity:"fast_food",brand:"Baja Fresh","brand:wikidata":"Q2880019","brand:wikipedia":"en:Baja Fresh",cuisine:"mexican",name:"Baja Fresh"},reference:{key:"cuisine",value:"mexican"},matchScore:2,suggestion:true},"amenity/fast_food/burger/Bob's":{name:"Bob's",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food",cuisine:"burger","brand:wikidata":"Q1392113"},addTags:{amenity:"fast_food",brand:"Bob's","brand:wikidata":"Q1392113","brand:wikipedia":"en:Bob's",cuisine:"burger",name:"Bob's"},removeTags:{amenity:"fast_food",brand:"Bob's","brand:wikidata":"Q1392113","brand:wikipedia":"en:Bob's",cuisine:"burger",name:"Bob's"},reference:{key:"cuisine",value:"burger"},matchScore:2,suggestion:true},"amenity/fast_food/chicken/Bojangles'":{name:"Bojangles'",icon:"fas-drumstick-bite",geometry:["point","area"],tags:{amenity:"fast_food",cuisine:"chicken","brand:wikidata":"Q891163"},addTags:{amenity:"fast_food",brand:"Bojangles'","brand:wikidata":"Q891163","brand:wikipedia":"en:Bojangles' Famous Chicken 'n Biscuits",cuisine:"chicken",name:"Bojangles'"},removeTags:{amenity:"fast_food",brand:"Bojangles'","brand:wikidata":"Q891163","brand:wikipedia":"en:Bojangles' Famous Chicken 'n Biscuits",cuisine:"chicken",name:"Bojangles'"},reference:{key:"cuisine",value:"chicken"},matchScore:2,suggestion:true},"amenity/fast_food/Booster Juice":{name:"Booster Juice",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food","brand:wikidata":"Q4943796"},addTags:{amenity:"fast_food",brand:"Booster Juice","brand:wikidata":"Q4943796","brand:wikipedia":"en:Booster Juice",cuisine:"juice",name:"Booster Juice"},removeTags:{amenity:"fast_food",brand:"Booster Juice","brand:wikidata":"Q4943796","brand:wikipedia":"en:Booster Juice",cuisine:"juice",name:"Booster Juice"},matchScore:2,suggestion:true},"amenity/fast_food/Boston Market":{name:"Boston Market",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food","brand:wikidata":"Q603617"},addTags:{amenity:"fast_food",brand:"Boston Market","brand:wikidata":"Q603617","brand:wikipedia":"en:Boston Market",cuisine:"american",name:"Boston Market"},removeTags:{amenity:"fast_food",brand:"Boston Market","brand:wikidata":"Q603617","brand:wikipedia":"en:Boston Market",cuisine:"american",name:"Boston Market"},matchScore:2,suggestion:true},"amenity/fast_food/Braum's":{name:"Braum's",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food","brand:wikidata":"Q4958263"},addTags:{amenity:"fast_food",brand:"Braum's","brand:wikidata":"Q4958263","brand:wikipedia":"en:Braum's",cuisine:"american",name:"Braum's"},removeTags:{amenity:"fast_food",brand:"Braum's","brand:wikidata":"Q4958263","brand:wikipedia":"en:Braum's",cuisine:"american",name:"Braum's"},matchScore:2,suggestion:true},"amenity/fast_food/burger/Burger King":{name:"Burger King",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food",cuisine:"burger","brand:wikidata":"Q177054"},addTags:{amenity:"fast_food",brand:"Burger King","brand:wikidata":"Q177054","brand:wikipedia":"en:Burger King",cuisine:"burger",name:"Burger King"},removeTags:{amenity:"fast_food",brand:"Burger King","brand:wikidata":"Q177054","brand:wikipedia":"en:Burger King",cuisine:"burger",name:"Burger King"},reference:{key:"cuisine",value:"burger"},matchScore:2,suggestion:true},"amenity/fast_food/burger/Burger Machine":{name:"Burger Machine",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food",cuisine:"burger","brand:wikidata":"Q4998549"},addTags:{amenity:"fast_food",brand:"Burger Machine","brand:wikidata":"Q4998549","brand:wikipedia":"en:Burger Machine",cuisine:"burger",name:"Burger Machine"},removeTags:{amenity:"fast_food",brand:"Burger Machine","brand:wikidata":"Q4998549","brand:wikipedia":"en:Burger Machine",cuisine:"burger",name:"Burger Machine"},reference:{key:"cuisine",value:"burger"},matchScore:2,suggestion:true},"amenity/fast_food/burger/BurgerFi":{name:"BurgerFi",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food",cuisine:"burger","brand:wikidata":"Q39045496"},addTags:{amenity:"fast_food",brand:"BurgerFi","brand:wikidata":"Q39045496","brand:wikipedia":"en:BurgerFi",cuisine:"burger",name:"BurgerFi"},removeTags:{amenity:"fast_food",brand:"BurgerFi","brand:wikidata":"Q39045496","brand:wikipedia":"en:BurgerFi",cuisine:"burger",name:"BurgerFi"},reference:{key:"cuisine",value:"burger"},matchScore:2,suggestion:true},"amenity/fast_food/Captain D's":{name:"Captain D's",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food","brand:wikidata":"Q5036616"},addTags:{amenity:"fast_food",brand:"Captain D's","brand:wikidata":"Q5036616","brand:wikipedia":"en:Captain D's",cuisine:"seafood",name:"Captain D's"},removeTags:{amenity:"fast_food",brand:"Captain D's","brand:wikidata":"Q5036616","brand:wikipedia":"en:Captain D's",cuisine:"seafood",name:"Captain D's"},matchScore:2,suggestion:true},"amenity/fast_food/burger/Carl's Jr.":{name:"Carl's Jr.",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food",cuisine:"burger","brand:wikidata":"Q1043486"},addTags:{amenity:"fast_food",brand:"Carl's Jr.","brand:wikidata":"Q1043486","brand:wikipedia":"en:Carl's Jr.",cuisine:"burger",name:"Carl's Jr."},removeTags:{amenity:"fast_food",brand:"Carl's Jr.","brand:wikidata":"Q1043486","brand:wikipedia":"en:Carl's Jr.",cuisine:"burger",name:"Carl's Jr."},reference:{key:"cuisine",value:"burger"},matchScore:2,suggestion:true},"amenity/fast_food/burger/Checkers":{name:"Checkers",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food",cuisine:"burger","brand:wikidata":"Q3419341"},addTags:{amenity:"fast_food",brand:"Checkers","brand:wikidata":"Q3419341","brand:wikipedia":"en:Checkers and Rally's",cuisine:"burger",name:"Checkers"},removeTags:{amenity:"fast_food",brand:"Checkers","brand:wikidata":"Q3419341","brand:wikipedia":"en:Checkers and Rally's",cuisine:"burger",name:"Checkers"},reference:{key:"cuisine",value:"burger"},matchScore:2,suggestion:true},"amenity/fast_food/chicken/Chick-fil-A":{name:"Chick-fil-A",icon:"fas-drumstick-bite",geometry:["point","area"],tags:{amenity:"fast_food",cuisine:"chicken","brand:wikidata":"Q491516"},addTags:{amenity:"fast_food",brand:"Chick-fil-A","brand:wikidata":"Q491516","brand:wikipedia":"en:Chick-fil-A",cuisine:"chicken",name:"Chick-fil-A"},removeTags:{amenity:"fast_food",brand:"Chick-fil-A","brand:wikidata":"Q491516","brand:wikipedia":"en:Chick-fil-A",cuisine:"chicken",name:"Chick-fil-A"},reference:{key:"cuisine",value:"chicken"},matchScore:2,suggestion:true},"amenity/fast_food/chicken/Chicken Express":{name:"Chicken Express",icon:"fas-drumstick-bite",geometry:["point","area"],tags:{amenity:"fast_food",cuisine:"chicken","brand:wikidata":"Q5096235"},addTags:{amenity:"fast_food",brand:"Chicken Express","brand:wikidata":"Q5096235","brand:wikipedia":"en:Chicken Express",cuisine:"chicken",name:"Chicken Express"},removeTags:{amenity:"fast_food",brand:"Chicken Express","brand:wikidata":"Q5096235","brand:wikipedia":"en:Chicken Express",cuisine:"chicken",name:"Chicken Express"},reference:{key:"cuisine",value:"chicken"},matchScore:2,suggestion:true},"amenity/fast_food/mexican/Chipotle":{name:"Chipotle",icon:"fas-pepper-hot",geometry:["point","area"],tags:{amenity:"fast_food",cuisine:"mexican","brand:wikidata":"Q465751"},addTags:{amenity:"fast_food",brand:"Chipotle","brand:wikidata":"Q465751","brand:wikipedia":"en:Chipotle Mexican Grill",cuisine:"mexican",name:"Chipotle"},removeTags:{amenity:"fast_food",brand:"Chipotle","brand:wikidata":"Q465751","brand:wikipedia":"en:Chipotle Mexican Grill",cuisine:"mexican",name:"Chipotle"},reference:{key:"cuisine",value:"mexican"},matchScore:2,suggestion:true},"amenity/fast_food/Chowking":{name:"Chowking",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food","brand:wikidata":"Q1076816"},addTags:{amenity:"fast_food",brand:"Chowking","brand:wikidata":"Q1076816","brand:wikipedia":"en:Chowking",cuisine:"asian",name:"Chowking"},removeTags:{amenity:"fast_food",brand:"Chowking","brand:wikidata":"Q1076816","brand:wikipedia":"en:Chowking",cuisine:"asian",name:"Chowking"},matchScore:2,suggestion:true},"amenity/fast_food/chicken/Church's Chicken":{name:"Church's Chicken",icon:"fas-drumstick-bite",geometry:["point","area"],tags:{amenity:"fast_food",cuisine:"chicken","brand:wikidata":"Q1089932"},addTags:{amenity:"fast_food",brand:"Church's Chicken","brand:wikidata":"Q1089932","brand:wikipedia":"en:Church's Chicken",cuisine:"chicken",name:"Church's Chicken"},removeTags:{amenity:"fast_food",brand:"Church's Chicken","brand:wikidata":"Q1089932","brand:wikipedia":"en:Church's Chicken",cuisine:"chicken",name:"Church's Chicken"},reference:{key:"cuisine",value:"chicken"},matchScore:2,suggestion:true},"amenity/fast_food/Cinnabon":{name:"Cinnabon",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food","brand:wikidata":"Q1092539"},addTags:{brand:"Cinnabon","brand:website":"https://www.cinnabon.com/","brand:wikidata":"Q1092539","brand:wikipedia":"en:Cinnabon",name:"Cinnabon",amenity:"fast_food",cuisine:"dessert"},removeTags:{brand:"Cinnabon","brand:website":"https://www.cinnabon.com/","brand:wikidata":"Q1092539","brand:wikipedia":"en:Cinnabon",name:"Cinnabon",amenity:"fast_food",cuisine:"dessert"},matchScore:2,suggestion:true},"amenity/fast_food/CoCo壱番屋":{name:"CoCo壱番屋",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food","brand:wikidata":"Q5986105"},addTags:{amenity:"fast_food",brand:"CoCo壱番屋","brand:en":"Ichibanya","brand:wikidata":"Q5986105","brand:wikipedia":"en:Ichibanya",cuisine:"japanese",name:"CoCo壱番屋","name:en":"Ichibanya"},removeTags:{amenity:"fast_food",brand:"CoCo壱番屋","brand:en":"Ichibanya","brand:wikidata":"Q5986105","brand:wikipedia":"en:Ichibanya",cuisine:"japanese",name:"CoCo壱番屋","name:en":"Ichibanya"},matchScore:2,suggestion:true},"amenity/fast_food/Cook Out":{name:"Cook Out",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food","brand:wikidata":"Q5166992"},addTags:{amenity:"fast_food",brand:"Cook Out","brand:wikidata":"Q5166992","brand:wikipedia":"en:Cook Out (restaurant)",cuisine:"american",name:"Cook Out"},removeTags:{amenity:"fast_food",brand:"Cook Out","brand:wikidata":"Q5166992","brand:wikipedia":"en:Cook Out (restaurant)",cuisine:"american",name:"Cook Out"},matchScore:2,suggestion:true},"amenity/fast_food/burger/Culver's":{name:"Culver's",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food",cuisine:"burger","brand:wikidata":"Q1143589"},addTags:{amenity:"fast_food",brand:"Culver's","brand:wikidata":"Q1143589","brand:wikipedia":"en:Culver's",cuisine:"burger",name:"Culver's"},removeTags:{amenity:"fast_food",brand:"Culver's","brand:wikidata":"Q1143589","brand:wikipedia":"en:Culver's",cuisine:"burger",name:"Culver's"},reference:{key:"cuisine",value:"burger"},matchScore:2,suggestion:true},"amenity/fast_food/burger/DQ Grill & Chill":{name:"DQ Grill & Chill",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food",cuisine:"burger","brand:wikidata":"Q1141226"},addTags:{amenity:"fast_food",brand:"DQ Grill & Chill","brand:wikidata":"Q1141226","brand:wikipedia":"en:Dairy Queen",cuisine:"burger",name:"DQ Grill & Chill",operator:"Dairy Queen"},removeTags:{amenity:"fast_food",brand:"DQ Grill & Chill","brand:wikidata":"Q1141226","brand:wikipedia":"en:Dairy Queen",cuisine:"burger",name:"DQ Grill & Chill",operator:"Dairy Queen"},reference:{key:"cuisine",value:"burger"},matchScore:2,suggestion:true},"amenity/fast_food/Dairy Queen":{name:"Dairy Queen",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food","brand:wikidata":"Q1141226"},addTags:{amenity:"fast_food",brand:"Dairy Queen","brand:wikidata":"Q1141226","brand:wikipedia":"en:Dairy Queen",cuisine:"ice_cream",name:"Dairy Queen"},removeTags:{amenity:"fast_food",brand:"Dairy Queen","brand:wikidata":"Q1141226","brand:wikipedia":"en:Dairy Queen",cuisine:"ice_cream",name:"Dairy Queen"},matchScore:2,suggestion:true},"amenity/fast_food/Daylight Donuts":{name:"Daylight Donuts",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food","brand:wikidata":"Q48970508"},addTags:{amenity:"fast_food",brand:"Daylight Donuts","brand:wikidata":"Q48970508","brand:wikipedia":"en:Daylight Donuts",cuisine:"donut",name:"Daylight Donuts"},removeTags:{amenity:"fast_food",brand:"Daylight Donuts","brand:wikidata":"Q48970508","brand:wikipedia":"en:Daylight Donuts",cuisine:"donut",name:"Daylight Donuts"},matchScore:2,suggestion:true},"amenity/fast_food/mexican/Del Taco":{name:"Del Taco",icon:"fas-pepper-hot",geometry:["point","area"],tags:{amenity:"fast_food",cuisine:"mexican","brand:wikidata":"Q1183818"},addTags:{amenity:"fast_food",brand:"Del Taco","brand:wikidata":"Q1183818","brand:wikipedia":"en:Del Taco",cuisine:"mexican",name:"Del Taco"},removeTags:{amenity:"fast_food",brand:"Del Taco","brand:wikidata":"Q1183818","brand:wikipedia":"en:Del Taco",cuisine:"mexican",name:"Del Taco"},reference:{key:"cuisine",value:"mexican"},matchScore:2,suggestion:true},"amenity/fast_food/pizza/Domino's Pizza":{name:"Domino's Pizza",icon:"maki-restaurant-pizza",geometry:["point","area"],tags:{amenity:"fast_food",cuisine:"pizza","brand:wikidata":"Q839466"},addTags:{amenity:"fast_food",brand:"Domino's Pizza","brand:wikidata":"Q839466","brand:wikipedia":"en:Domino's Pizza",cuisine:"pizza",name:"Domino's Pizza"},removeTags:{amenity:"fast_food",brand:"Domino's Pizza","brand:wikidata":"Q839466","brand:wikipedia":"en:Domino's Pizza",cuisine:"pizza",name:"Domino's Pizza"},reference:{key:"cuisine",value:"pizza"},matchScore:2,suggestion:true},"amenity/fast_food/Dunkin' Donuts":{name:"Dunkin' Donuts",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food","brand:wikidata":"Q847743"},addTags:{amenity:"fast_food",brand:"Dunkin' Donuts","brand:wikidata":"Q847743","brand:wikipedia":"en:Dunkin' Donuts",cuisine:"donut",name:"Dunkin' Donuts"},removeTags:{amenity:"fast_food",brand:"Dunkin' Donuts","brand:wikidata":"Q847743","brand:wikipedia":"en:Dunkin' Donuts",cuisine:"donut",name:"Dunkin' Donuts"},matchScore:2,suggestion:true},"amenity/fast_food/Einstein Bros. Bagels":{name:"Einstein Bros. Bagels",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food","brand:wikidata":"Q5349788"},addTags:{amenity:"fast_food",brand:"Einstein Bros. Bagels","brand:wikidata":"Q5349788","brand:wikipedia":"en:Einstein Bros. Bagels",cuisine:"bagel",name:"Einstein Bros. Bagels"},removeTags:{amenity:"fast_food",brand:"Einstein Bros. Bagels","brand:wikidata":"Q5349788","brand:wikipedia":"en:Einstein Bros. Bagels",cuisine:"bagel",name:"Einstein Bros. Bagels"},matchScore:2,suggestion:true},"amenity/fast_food/mexican/El Pollo Loco":{name:"El Pollo Loco",icon:"fas-pepper-hot",geometry:["point","area"],tags:{amenity:"fast_food",cuisine:"mexican","brand:wikidata":"Q2353849"},addTags:{amenity:"fast_food",brand:"El Pollo Loco","brand:wikidata":"Q2353849","brand:wikipedia":"en:El Pollo Loco",cuisine:"mexican",name:"El Pollo Loco"},removeTags:{amenity:"fast_food",brand:"El Pollo Loco","brand:wikidata":"Q2353849","brand:wikipedia":"en:El Pollo Loco",cuisine:"mexican",name:"El Pollo Loco"},reference:{key:"cuisine",value:"mexican"},matchScore:2,suggestion:true},"amenity/fast_food/Extreme Pita":{name:"Extreme Pita",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food","brand:wikidata":"Q5422367"},addTags:{amenity:"fast_food",brand:"Extreme Pita","brand:wikidata":"Q5422367","brand:wikipedia":"en:Extreme Pita",cuisine:"pita",name:"Extreme Pita"},removeTags:{amenity:"fast_food",brand:"Extreme Pita","brand:wikidata":"Q5422367","brand:wikipedia":"en:Extreme Pita",cuisine:"pita",name:"Extreme Pita"},matchScore:2,suggestion:true},"amenity/fast_food/Fazoli's":{name:"Fazoli's",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food","brand:wikidata":"Q1399195"},addTags:{amenity:"fast_food",brand:"Fazoli's","brand:wikidata":"Q1399195","brand:wikipedia":"en:Fazoli's",cuisine:"italian",name:"Fazoli's"},removeTags:{amenity:"fast_food",brand:"Fazoli's","brand:wikidata":"Q1399195","brand:wikipedia":"en:Fazoli's",cuisine:"italian",name:"Fazoli's"},matchScore:2,suggestion:true},"amenity/fast_food/sandwich/Firehouse Subs":{name:"Firehouse Subs",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"fast_food",cuisine:"sandwich","brand:wikidata":"Q5451873"},addTags:{amenity:"fast_food",brand:"Firehouse Subs","brand:wikidata":"Q5451873","brand:wikipedia":"en:Firehouse Subs",cuisine:"sandwich",name:"Firehouse Subs"},removeTags:{amenity:"fast_food",brand:"Firehouse Subs","brand:wikidata":"Q5451873","brand:wikipedia":"en:Firehouse Subs",cuisine:"sandwich",name:"Firehouse Subs"},reference:{key:"cuisine",value:"sandwich"},matchScore:2,suggestion:true},"amenity/fast_food/burger/Five Guys":{name:"Five Guys",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food",cuisine:"burger","brand:wikidata":"Q1131810"},addTags:{amenity:"fast_food",brand:"Five Guys","brand:wikidata":"Q1131810","brand:wikipedia":"en:Five Guys",cuisine:"burger",name:"Five Guys"},removeTags:{amenity:"fast_food",brand:"Five Guys","brand:wikidata":"Q1131810","brand:wikipedia":"en:Five Guys",cuisine:"burger",name:"Five Guys"},reference:{key:"cuisine",value:"burger"},matchScore:2,suggestion:true},"amenity/fast_food/burger/Freddy's":{name:"Freddy's",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food",cuisine:"burger","brand:wikidata":"Q5496837"},addTags:{amenity:"fast_food",brand:"Freddy's","brand:wikidata":"Q5496837","brand:wikipedia":"en:Freddy's Frozen Custard & Steakburgers",cuisine:"burger",name:"Freddy's"},removeTags:{amenity:"fast_food",brand:"Freddy's","brand:wikidata":"Q5496837","brand:wikipedia":"en:Freddy's Frozen Custard & Steakburgers",cuisine:"burger",name:"Freddy's"},reference:{key:"cuisine",value:"burger"},matchScore:2,suggestion:true},"amenity/fast_food/mexican/Freebirds":{name:"Freebirds",icon:"fas-pepper-hot",geometry:["point","area"],tags:{amenity:"fast_food",cuisine:"mexican","brand:wikidata":"Q5500367"},addTags:{amenity:"fast_food",brand:"Freebirds","brand:wikidata":"Q5500367","brand:wikipedia":"en:Freebirds World Burrito",cuisine:"mexican",name:"Freebirds"},removeTags:{amenity:"fast_food",brand:"Freebirds","brand:wikidata":"Q5500367","brand:wikipedia":"en:Freebirds World Burrito",cuisine:"mexican",name:"Freebirds"},reference:{key:"cuisine",value:"mexican"},matchScore:2,suggestion:true},"amenity/fast_food/pizza/Greenwich":{name:"Greenwich",icon:"maki-restaurant-pizza",geometry:["point","area"],tags:{amenity:"fast_food",cuisine:"pizza","brand:wikidata":"Q2691308"},addTags:{amenity:"fast_food",brand:"Greenwich","brand:wikidata":"Q2691308","brand:wikipedia":"en:Greenwich Pizza",cuisine:"pizza",name:"Greenwich"},removeTags:{amenity:"fast_food",brand:"Greenwich","brand:wikidata":"Q2691308","brand:wikipedia":"en:Greenwich Pizza",cuisine:"pizza",name:"Greenwich"},reference:{key:"cuisine",value:"pizza"},matchScore:2,suggestion:true},"amenity/fast_food/Habib's":{name:"Habib's",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food","brand:wikidata":"Q2504930"},addTags:{amenity:"fast_food",brand:"Habib's","brand:wikidata":"Q2504930","brand:wikipedia":"en:Habib's",cuisine:"middle_eastern",name:"Habib's"},removeTags:{amenity:"fast_food",brand:"Habib's","brand:wikidata":"Q2504930","brand:wikipedia":"en:Habib's",cuisine:"middle_eastern",name:"Habib's"},matchScore:2,suggestion:true},"amenity/fast_food/pizza/Hallo Pizza":{name:"Hallo Pizza",icon:"maki-restaurant-pizza",geometry:["point","area"],tags:{amenity:"fast_food",cuisine:"pizza","brand:wikidata":"Q1571798"},addTags:{amenity:"fast_food",brand:"Hallo Pizza","brand:wikidata":"Q1571798","brand:wikipedia":"de:Hallo Pizza",cuisine:"pizza",name:"Hallo Pizza"},removeTags:{amenity:"fast_food",brand:"Hallo Pizza","brand:wikidata":"Q1571798","brand:wikipedia":"de:Hallo Pizza",cuisine:"pizza",name:"Hallo Pizza"},reference:{key:"cuisine",value:"pizza"},matchScore:2,suggestion:true},"amenity/fast_food/burger/Hardee's":{name:"Hardee's",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food",cuisine:"burger","brand:wikidata":"Q1585088"},addTags:{amenity:"fast_food",brand:"Hardee's","brand:wikidata":"Q1585088","brand:wikipedia":"en:Hardee's",cuisine:"burger",name:"Hardee's"},removeTags:{amenity:"fast_food",brand:"Hardee's","brand:wikidata":"Q1585088","brand:wikipedia":"en:Hardee's",cuisine:"burger",name:"Hardee's"},reference:{key:"cuisine",value:"burger"},matchScore:2,suggestion:true},"amenity/fast_food/burger/Harvey's":{name:"Harvey's",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food",cuisine:"burger","brand:wikidata":"Q1466184"},addTags:{amenity:"fast_food",brand:"Harvey's","brand:wikidata":"Q1466184","brand:wikipedia":"en:Harvey's",cuisine:"burger",name:"Harvey's"},removeTags:{amenity:"fast_food",brand:"Harvey's","brand:wikidata":"Q1466184","brand:wikipedia":"en:Harvey's",cuisine:"burger",name:"Harvey's"},reference:{key:"cuisine",value:"burger"},matchScore:2,suggestion:true},"amenity/fast_food/burger/Hesburger":{name:"Hesburger",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food",cuisine:"burger","brand:wikidata":"Q1276832"},addTags:{amenity:"fast_food",brand:"Hesburger","brand:wikidata":"Q1276832","brand:wikipedia":"en:Hesburger",cuisine:"burger",name:"Hesburger"},removeTags:{amenity:"fast_food",brand:"Hesburger","brand:wikidata":"Q1276832","brand:wikipedia":"en:Hesburger",cuisine:"burger",name:"Hesburger"},reference:{key:"cuisine",value:"burger"},matchScore:2,suggestion:true},"amenity/fast_food/burger/Hungry Jacks":{name:"Hungry Jacks",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food",cuisine:"burger","brand:wikidata":"Q3036373"},addTags:{amenity:"fast_food",brand:"Hungry Jacks","brand:wikidata":"Q3036373","brand:wikipedia":"en:Hungry Jack's",cuisine:"burger",name:"Hungry Jacks"},removeTags:{amenity:"fast_food",brand:"Hungry Jacks","brand:wikidata":"Q3036373","brand:wikipedia":"en:Hungry Jack's",cuisine:"burger",name:"Hungry Jacks"},reference:{key:"cuisine",value:"burger"},matchScore:2,suggestion:true},"amenity/fast_food/burger/In-N-Out Burger":{name:"In-N-Out Burger",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food",cuisine:"burger","brand:wikidata":"Q1205312"},addTags:{amenity:"fast_food",brand:"In-N-Out Burger","brand:wikidata":"Q1205312","brand:wikipedia":"en:In-N-Out Burger",cuisine:"burger",name:"In-N-Out Burger"},removeTags:{amenity:"fast_food",brand:"In-N-Out Burger","brand:wikidata":"Q1205312","brand:wikipedia":"en:In-N-Out Burger",cuisine:"burger",name:"In-N-Out Burger"},reference:{key:"cuisine",value:"burger"},matchScore:2,suggestion:true},"amenity/fast_food/burger/Jack in the Box":{name:"Jack in the Box",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food",cuisine:"burger","brand:wikidata":"Q1538507"},addTags:{amenity:"fast_food",brand:"Jack in the Box","brand:wikidata":"Q1538507","brand:wikipedia":"en:Jack in the Box",cuisine:"burger",name:"Jack in the Box"},removeTags:{amenity:"fast_food",brand:"Jack in the Box","brand:wikidata":"Q1538507","brand:wikipedia":"en:Jack in the Box",cuisine:"burger",name:"Jack in the Box"},reference:{key:"cuisine",value:"burger"},matchScore:2,suggestion:true},"amenity/fast_food/Jamba Juice":{name:"Jamba Juice",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food","brand:wikidata":"Q3088784"},addTags:{amenity:"fast_food",brand:"Jamba Juice","brand:wikidata":"Q3088784","brand:wikipedia":"en:Jamba Juice",cuisine:"juice",name:"Jamba Juice"},removeTags:{amenity:"fast_food",brand:"Jamba Juice","brand:wikidata":"Q3088784","brand:wikipedia":"en:Jamba Juice",cuisine:"juice",name:"Jamba Juice"},matchScore:2,suggestion:true},"amenity/fast_food/sandwich/Jersey Mike's Subs":{name:"Jersey Mike's Subs",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"fast_food",cuisine:"sandwich","brand:wikidata":"Q6184897"},addTags:{amenity:"fast_food",brand:"Jersey Mike's Subs","brand:wikidata":"Q6184897","brand:wikipedia":"en:Jersey Mike's Subs",cuisine:"sandwich",name:"Jersey Mike's Subs"},removeTags:{amenity:"fast_food",brand:"Jersey Mike's Subs","brand:wikidata":"Q6184897","brand:wikipedia":"en:Jersey Mike's Subs",cuisine:"sandwich",name:"Jersey Mike's Subs"},reference:{key:"cuisine",value:"sandwich"},matchScore:2,suggestion:true},"amenity/fast_food/sandwich/Jimmy John's":{name:"Jimmy John's",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"fast_food",cuisine:"sandwich","brand:wikidata":"Q1689380"},addTags:{amenity:"fast_food",brand:"Jimmy John's","brand:wikidata":"Q1689380","brand:wikipedia":"en:Jimmy John's",cuisine:"sandwich",name:"Jimmy John's"},removeTags:{amenity:"fast_food",brand:"Jimmy John's","brand:wikidata":"Q1689380","brand:wikipedia":"en:Jimmy John's",cuisine:"sandwich",name:"Jimmy John's"},reference:{key:"cuisine",value:"sandwich"},matchScore:2,suggestion:true},"amenity/fast_food/burger/Jollibee":{name:"Jollibee",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food",cuisine:"burger","brand:wikidata":"Q37614"},addTags:{amenity:"fast_food",brand:"Jollibee","brand:wikidata":"Q37614","brand:wikipedia":"en:Jollibee",cuisine:"burger",name:"Jollibee"},removeTags:{amenity:"fast_food",brand:"Jollibee","brand:wikidata":"Q37614","brand:wikipedia":"en:Jollibee",cuisine:"burger",name:"Jollibee"},reference:{key:"cuisine",value:"burger"},matchScore:2,suggestion:true},"amenity/fast_food/chicken/KFC":{name:"KFC",icon:"fas-drumstick-bite",geometry:["point","area"],tags:{amenity:"fast_food",cuisine:"chicken","brand:wikidata":"Q524757"},addTags:{amenity:"fast_food",brand:"KFC","brand:wikidata":"Q524757","brand:wikipedia":"en:KFC",cuisine:"chicken",name:"KFC"},removeTags:{amenity:"fast_food",brand:"KFC","brand:wikidata":"Q524757","brand:wikipedia":"en:KFC",cuisine:"chicken",name:"KFC"},reference:{key:"cuisine",value:"chicken"},matchScore:2,suggestion:true},"amenity/fast_food/burger/Kochlöffel":{name:"Kochlöffel",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food",cuisine:"burger","brand:wikidata":"Q315539"},addTags:{amenity:"fast_food",brand:"Kochlöffel","brand:wikidata":"Q315539","brand:wikipedia":"en:Kochlöffel",cuisine:"burger",name:"Kochlöffel"},removeTags:{amenity:"fast_food",brand:"Kochlöffel","brand:wikidata":"Q315539","brand:wikipedia":"en:Kochlöffel",cuisine:"burger",name:"Kochlöffel"},reference:{key:"cuisine",value:"burger"},matchScore:2,suggestion:true},"amenity/fast_food/pizza/Kotipizza":{name:"Kotipizza",icon:"maki-restaurant-pizza",geometry:["point","area"],tags:{amenity:"fast_food",cuisine:"pizza","brand:wikidata":"Q1628625"},addTags:{amenity:"fast_food",brand:"Kotipizza","brand:wikidata":"Q1628625","brand:wikipedia":"en:Kotipizza",cuisine:"pizza",name:"Kotipizza"},removeTags:{amenity:"fast_food",brand:"Kotipizza","brand:wikidata":"Q1628625","brand:wikipedia":"en:Kotipizza",cuisine:"pizza",name:"Kotipizza"},reference:{key:"cuisine",value:"pizza"},matchScore:2,suggestion:true},"amenity/fast_food/Krispy Kreme":{name:"Krispy Kreme",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food","brand:wikidata":"Q1192805"},addTags:{amenity:"fast_food",brand:"Krispy Kreme","brand:wikidata":"Q1192805","brand:wikipedia":"en:Krispy Kreme",cuisine:"donut",name:"Krispy Kreme"},removeTags:{amenity:"fast_food",brand:"Krispy Kreme","brand:wikidata":"Q1192805","brand:wikipedia":"en:Krispy Kreme",cuisine:"donut",name:"Krispy Kreme"},matchScore:2,suggestion:true},"amenity/fast_food/burger/Krystal":{name:"Krystal",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food",cuisine:"burger","brand:wikidata":"Q472195"},addTags:{amenity:"fast_food",brand:"Krystal","brand:wikidata":"Q472195","brand:wikipedia":"en:Krystal (restaurant)",cuisine:"burger",name:"Krystal"},removeTags:{amenity:"fast_food",brand:"Krystal","brand:wikidata":"Q472195","brand:wikipedia":"en:Krystal (restaurant)",cuisine:"burger",name:"Krystal"},reference:{key:"cuisine",value:"burger"},matchScore:2,suggestion:true},"amenity/fast_food/pizza/Little Caesars":{name:"Little Caesars",icon:"maki-restaurant-pizza",geometry:["point","area"],tags:{amenity:"fast_food",cuisine:"pizza","brand:wikidata":"Q1393809"},addTags:{amenity:"fast_food",brand:"Little Caesars","brand:wikidata":"Q1393809","brand:wikipedia":"en:Little Caesars",cuisine:"pizza",name:"Little Caesars"},removeTags:{amenity:"fast_food",brand:"Little Caesars","brand:wikidata":"Q1393809","brand:wikipedia":"en:Little Caesars",cuisine:"pizza",name:"Little Caesars"},reference:{key:"cuisine",value:"pizza"},matchScore:2,suggestion:true},"amenity/fast_food/Long John Silver's":{name:"Long John Silver's",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food","brand:wikidata":"Q1535221"},addTags:{amenity:"fast_food",brand:"Long John Silver's","brand:wikidata":"Q1535221","brand:wikipedia":"en:Long John Silver's",cuisine:"seafood",name:"Long John Silver's"},removeTags:{amenity:"fast_food",brand:"Long John Silver's","brand:wikidata":"Q1535221","brand:wikipedia":"en:Long John Silver's",cuisine:"seafood",name:"Long John Silver's"},matchScore:2,suggestion:true},"amenity/fast_food/burger/Lotteria":{name:"Lotteria",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food",cuisine:"burger","brand:wikidata":"Q249525"},addTags:{amenity:"fast_food",brand:"Lotteria","brand:wikidata":"Q249525","brand:wikipedia":"en:Lotteria",cuisine:"burger",name:"Lotteria"},removeTags:{amenity:"fast_food",brand:"Lotteria","brand:wikidata":"Q249525","brand:wikipedia":"en:Lotteria",cuisine:"burger",name:"Lotteria"},reference:{key:"cuisine",value:"burger"},matchScore:2,suggestion:true},"amenity/fast_food/Mang Inasal":{name:"Mang Inasal",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food","brand:wikidata":"Q6748573"},addTags:{amenity:"fast_food",brand:"Mang Inasal","brand:wikidata":"Q6748573","brand:wikipedia":"en:Mang Inasal",cuisine:"barbecue",name:"Mang Inasal"},removeTags:{amenity:"fast_food",brand:"Mang Inasal","brand:wikidata":"Q6748573","brand:wikipedia":"en:Mang Inasal",cuisine:"barbecue",name:"Mang Inasal"},matchScore:2,suggestion:true},"amenity/fast_food/burger/Max":{name:"Max",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food",cuisine:"burger","brand:wikidata":"Q1912172"},addTags:{amenity:"fast_food",brand:"Max","brand:wikidata":"Q1912172","brand:wikipedia":"en:Max Hamburgers",cuisine:"burger",name:"Max"},removeTags:{amenity:"fast_food",brand:"Max","brand:wikidata":"Q1912172","brand:wikipedia":"en:Max Hamburgers",cuisine:"burger",name:"Max"},reference:{key:"cuisine",value:"burger"},matchScore:2,suggestion:true},"amenity/fast_food/burger/McDonald's":{name:"McDonald's",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food",cuisine:"burger","brand:wikidata":"Q38076"},addTags:{amenity:"fast_food",brand:"McDonald's","brand:wikidata":"Q38076","brand:wikipedia":"en:McDonald's",cuisine:"burger",name:"McDonald's"},removeTags:{amenity:"fast_food",brand:"McDonald's","brand:wikidata":"Q38076","brand:wikipedia":"en:McDonald's",cuisine:"burger",name:"McDonald's"},reference:{key:"cuisine",value:"burger"},matchScore:2,suggestion:true},"amenity/fast_food/mexican/Moe's Southwest Grill":{name:"Moe's Southwest Grill",icon:"fas-pepper-hot",geometry:["point","area"],tags:{amenity:"fast_food",cuisine:"mexican","brand:wikidata":"Q6889938"},addTags:{amenity:"fast_food",brand:"Moe's Southwest Grill","brand:wikidata":"Q6889938","brand:wikipedia":"en:Moe's Southwest Grill",cuisine:"mexican",name:"Moe's Southwest Grill"},removeTags:{amenity:"fast_food",brand:"Moe's Southwest Grill","brand:wikidata":"Q6889938","brand:wikipedia":"en:Moe's Southwest Grill",cuisine:"mexican",name:"Moe's Southwest Grill"},reference:{key:"cuisine",value:"mexican"},matchScore:2,suggestion:true},"amenity/fast_food/sandwich/Mr. Sub":{name:"Mr. Sub",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"fast_food",cuisine:"sandwich","brand:wikidata":"Q6929225"},addTags:{amenity:"fast_food",brand:"Mr. Sub","brand:wikidata":"Q6929225","brand:wikipedia":"en:Mr. Sub",cuisine:"sandwich",name:"Mr. Sub"},removeTags:{amenity:"fast_food",brand:"Mr. Sub","brand:wikidata":"Q6929225","brand:wikipedia":"en:Mr. Sub",cuisine:"sandwich",name:"Mr. Sub"},reference:{key:"cuisine",value:"sandwich"},matchScore:2,suggestion:true},"amenity/fast_food/pizza/New York Pizza":{name:"New York Pizza",icon:"maki-restaurant-pizza",geometry:["point","area"],tags:{amenity:"fast_food",cuisine:"pizza","brand:wikidata":"Q2639128"},addTags:{amenity:"fast_food",brand:"New York Pizza","brand:wikidata":"Q2639128","brand:wikipedia":"nl:New York Pizza",cuisine:"pizza",name:"New York Pizza"},removeTags:{amenity:"fast_food",brand:"New York Pizza","brand:wikidata":"Q2639128","brand:wikipedia":"nl:New York Pizza",cuisine:"pizza",name:"New York Pizza"},reference:{key:"cuisine",value:"pizza"},matchScore:2,suggestion:true},"amenity/fast_food/Nordsee":{name:"Nordsee",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food","brand:wikidata":"Q74866"},addTags:{amenity:"fast_food",brand:"Nordsee","brand:wikidata":"Q74866","brand:wikipedia":"en:Nordsee",cuisine:"seafood",name:"Nordsee"},removeTags:{amenity:"fast_food",brand:"Nordsee","brand:wikidata":"Q74866","brand:wikipedia":"en:Nordsee",cuisine:"seafood",name:"Nordsee"},matchScore:2,suggestion:true},"amenity/fast_food/mexican/O'Tacos":{name:"O'Tacos",icon:"fas-pepper-hot",geometry:["point","area"],tags:{amenity:"fast_food",cuisine:"mexican","brand:wikidata":"Q28494040"},addTags:{amenity:"fast_food",brand:"O'Tacos","brand:wikidata":"Q28494040","brand:wikipedia":"en:O'Tacos",cuisine:"mexican",name:"O'Tacos"},removeTags:{amenity:"fast_food",brand:"O'Tacos","brand:wikidata":"Q28494040","brand:wikipedia":"en:O'Tacos",cuisine:"mexican",name:"O'Tacos"},reference:{key:"cuisine",value:"mexican"},matchScore:2,suggestion:true},"amenity/fast_food/burger/Pal's":{name:"Pal's",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food",cuisine:"burger","brand:wikidata":"Q7126094"},addTags:{amenity:"fast_food",brand:"Pal's","brand:wikidata":"Q7126094","brand:wikipedia":"en:Pal's",cuisine:"burger",name:"Pal's"},removeTags:{amenity:"fast_food",brand:"Pal's","brand:wikidata":"Q7126094","brand:wikipedia":"en:Pal's",cuisine:"burger",name:"Pal's"},reference:{key:"cuisine",value:"burger"},matchScore:2,suggestion:true},"amenity/fast_food/pizza/Panago":{name:"Panago",icon:"maki-restaurant-pizza",geometry:["point","area"],tags:{amenity:"fast_food",cuisine:"pizza","brand:wikidata":"Q17111672"},addTags:{amenity:"fast_food",brand:"Panago","brand:wikidata":"Q17111672","brand:wikipedia":"en:Panago",cuisine:"pizza",name:"Panago"},removeTags:{amenity:"fast_food",brand:"Panago","brand:wikidata":"Q17111672","brand:wikipedia":"en:Panago",cuisine:"pizza",name:"Panago"},reference:{key:"cuisine",value:"pizza"},matchScore:2,suggestion:true},"amenity/fast_food/Panda Express":{name:"Panda Express",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food","brand:wikidata":"Q1358690"},addTags:{amenity:"fast_food",brand:"Panda Express","brand:wikidata":"Q1358690","brand:wikipedia":"en:Panda Express",cuisine:"chinese",name:"Panda Express"},removeTags:{amenity:"fast_food",brand:"Panda Express","brand:wikidata":"Q1358690","brand:wikipedia":"en:Panda Express",cuisine:"chinese",name:"Panda Express"},matchScore:2,suggestion:true},"amenity/fast_food/sandwich/Panera Bread":{name:"Panera Bread",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"fast_food",cuisine:"sandwich","brand:wikidata":"Q7130852"},addTags:{amenity:"fast_food",brand:"Panera Bread","brand:wikidata":"Q7130852","brand:wikipedia":"en:Panera Bread",cuisine:"sandwich",name:"Panera Bread"},removeTags:{amenity:"fast_food",brand:"Panera Bread","brand:wikidata":"Q7130852","brand:wikipedia":"en:Panera Bread",cuisine:"sandwich",name:"Panera Bread"},reference:{key:"cuisine",value:"sandwich"},matchScore:2,suggestion:true},"amenity/fast_food/pizza/Papa John's":{name:"Papa John's",icon:"maki-restaurant-pizza",geometry:["point","area"],tags:{amenity:"fast_food",cuisine:"pizza","brand:wikidata":"Q2759586"},addTags:{amenity:"fast_food",brand:"Papa John's","brand:wikidata":"Q2759586","brand:wikipedia":"en:Papa John's Pizza",cuisine:"pizza",name:"Papa John's"},removeTags:{amenity:"fast_food",brand:"Papa John's","brand:wikidata":"Q2759586","brand:wikipedia":"en:Papa John's Pizza",cuisine:"pizza",name:"Papa John's"},reference:{key:"cuisine",value:"pizza"},matchScore:2,suggestion:true},"amenity/fast_food/pizza/Papa Murphy's":{name:"Papa Murphy's",icon:"maki-restaurant-pizza",geometry:["point","area"],tags:{amenity:"fast_food",cuisine:"pizza","brand:wikidata":"Q7132349"},addTags:{amenity:"fast_food",brand:"Papa Murphy's","brand:wikidata":"Q7132349","brand:wikipedia":"en:Papa Murphy's",cuisine:"pizza",name:"Papa Murphy's"},removeTags:{amenity:"fast_food",brand:"Papa Murphy's","brand:wikidata":"Q7132349","brand:wikipedia":"en:Papa Murphy's",cuisine:"pizza",name:"Papa Murphy's"},reference:{key:"cuisine",value:"pizza"},matchScore:2,suggestion:true},"amenity/fast_food/Philly Pretzel Factory":{name:"Philly Pretzel Factory",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food","brand:wikidata":"Q60097339"},addTags:{amenity:"fast_food",brand:"Philly Pretzel Factory","brand:wikidata":"Q60097339",cuisine:"pretzel",name:"Philly Pretzel Factory"},removeTags:{amenity:"fast_food",brand:"Philly Pretzel Factory","brand:wikidata":"Q60097339",cuisine:"pretzel",name:"Philly Pretzel Factory"},matchScore:2,suggestion:true},"amenity/fast_food/Pita Pit":{name:"Pita Pit",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food","brand:wikidata":"Q7757289"},addTags:{amenity:"fast_food",brand:"Pita Pit","brand:wikidata":"Q7757289","brand:wikipedia":"en:Pita Pit",cuisine:"pita",name:"Pita Pit"},removeTags:{amenity:"fast_food",brand:"Pita Pit","brand:wikidata":"Q7757289","brand:wikipedia":"en:Pita Pit",cuisine:"pita",name:"Pita Pit"},matchScore:2,suggestion:true},"amenity/fast_food/pizza/Pizza Hut Delivery":{name:"Pizza Hut Delivery",icon:"maki-restaurant-pizza",geometry:["point","area"],tags:{amenity:"fast_food",cuisine:"pizza","brand:wikidata":"Q191615"},addTags:{amenity:"fast_food",brand:"Pizza Hut","brand:wikidata":"Q191615","brand:wikipedia":"en:Pizza Hut",cuisine:"pizza",name:"Pizza Hut Delivery"},removeTags:{amenity:"fast_food",brand:"Pizza Hut","brand:wikidata":"Q191615","brand:wikipedia":"en:Pizza Hut",cuisine:"pizza",name:"Pizza Hut Delivery"},reference:{key:"cuisine",value:"pizza"},matchScore:2,suggestion:true},"amenity/fast_food/pizza/Pizza Hut Express":{name:"Pizza Hut Express",icon:"maki-restaurant-pizza",geometry:["point","area"],tags:{amenity:"fast_food",cuisine:"pizza","brand:wikidata":"Q191615"},addTags:{amenity:"fast_food",brand:"Pizza Hut","brand:wikipedia":"en:Pizza Hut","brand:wikidata":"Q191615",cuisine:"pizza",name:"Pizza Hut Express"},removeTags:{amenity:"fast_food",brand:"Pizza Hut","brand:wikipedia":"en:Pizza Hut","brand:wikidata":"Q191615",cuisine:"pizza",name:"Pizza Hut Express"},reference:{key:"cuisine",value:"pizza"},matchScore:2,suggestion:true},"amenity/fast_food/pizza/Pizza Nova":{name:"Pizza Nova",icon:"maki-restaurant-pizza",geometry:["point","area"],tags:{amenity:"fast_food",cuisine:"pizza","brand:wikidata":"Q7199971"},addTags:{amenity:"fast_food",brand:"Pizza Nova","brand:wikidata":"Q7199971","brand:wikipedia":"en:Pizza Nova",cuisine:"pizza",name:"Pizza Nova"},removeTags:{amenity:"fast_food",brand:"Pizza Nova","brand:wikidata":"Q7199971","brand:wikipedia":"en:Pizza Nova",cuisine:"pizza",name:"Pizza Nova"},reference:{key:"cuisine",value:"pizza"},matchScore:2,suggestion:true},"amenity/fast_food/pizza/Pizza Pizza":{name:"Pizza Pizza",icon:"maki-restaurant-pizza",geometry:["point","area"],tags:{amenity:"fast_food",cuisine:"pizza","brand:wikidata":"Q1194143"},addTags:{amenity:"fast_food",brand:"Pizza Pizza","brand:wikidata":"Q1194143","brand:wikipedia":"en:Pizza Pizza",cuisine:"pizza",name:"Pizza Pizza"},removeTags:{amenity:"fast_food",brand:"Pizza Pizza","brand:wikidata":"Q1194143","brand:wikipedia":"en:Pizza Pizza",cuisine:"pizza",name:"Pizza Pizza"},reference:{key:"cuisine",value:"pizza"},matchScore:2,suggestion:true},"amenity/fast_food/chicken/Pollo Campero":{name:"Pollo Campero",icon:"fas-drumstick-bite",geometry:["point","area"],tags:{amenity:"fast_food",cuisine:"chicken","brand:wikidata":"Q942741"},addTags:{amenity:"fast_food",brand:"Pollo Campero","brand:wikidata":"Q942741","brand:wikipedia":"en:Pollo Campero",cuisine:"chicken",name:"Pollo Campero"},removeTags:{amenity:"fast_food",brand:"Pollo Campero","brand:wikidata":"Q942741","brand:wikipedia":"en:Pollo Campero",cuisine:"chicken",name:"Pollo Campero"},reference:{key:"cuisine",value:"chicken"},matchScore:2,suggestion:true},"amenity/fast_food/chicken/Popeye's":{name:"Popeye's",icon:"fas-drumstick-bite",geometry:["point","area"],tags:{amenity:"fast_food",cuisine:"chicken","brand:wikidata":"Q1330910"},addTags:{amenity:"fast_food",brand:"Popeye's","brand:wikidata":"Q1330910","brand:wikipedia":"en:Popeyes",cuisine:"chicken",name:"Popeye's"},removeTags:{amenity:"fast_food",brand:"Popeye's","brand:wikidata":"Q1330910","brand:wikipedia":"en:Popeyes",cuisine:"chicken",name:"Popeye's"},reference:{key:"cuisine",value:"chicken"},matchScore:2,suggestion:true},"amenity/fast_food/sandwich/Potbelly":{name:"Potbelly",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"fast_food",cuisine:"sandwich","brand:wikidata":"Q7234777"},addTags:{amenity:"fast_food",brand:"Potbelly","brand:wikidata":"Q7234777","brand:wikipedia":"en:Potbelly Sandwich Works",cuisine:"sandwich",name:"Potbelly"},removeTags:{amenity:"fast_food",brand:"Potbelly","brand:wikidata":"Q7234777","brand:wikipedia":"en:Potbelly Sandwich Works",cuisine:"sandwich",name:"Potbelly"},reference:{key:"cuisine",value:"sandwich"},matchScore:2,suggestion:true},"amenity/fast_food/mexican/Qdoba":{name:"Qdoba",icon:"fas-pepper-hot",geometry:["point","area"],tags:{amenity:"fast_food",cuisine:"mexican","brand:wikidata":"Q1363885"},addTags:{amenity:"fast_food",brand:"Qdoba","brand:wikidata":"Q1363885","brand:wikipedia":"en:Qdoba",cuisine:"mexican",name:"Qdoba"},removeTags:{amenity:"fast_food",brand:"Qdoba","brand:wikidata":"Q1363885","brand:wikipedia":"en:Qdoba",cuisine:"mexican",name:"Qdoba"},reference:{key:"cuisine",value:"mexican"},matchScore:2,suggestion:true},"amenity/fast_food/burger/Quick":{name:"Quick",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food",cuisine:"burger","brand:wikidata":"Q286494"},addTags:{amenity:"fast_food",brand:"Quick","brand:wikidata":"Q286494","brand:wikipedia":"en:Quick (restaurant)",cuisine:"burger",name:"Quick"},removeTags:{amenity:"fast_food",brand:"Quick","brand:wikidata":"Q286494","brand:wikipedia":"en:Quick (restaurant)",cuisine:"burger",name:"Quick"},reference:{key:"cuisine",value:"burger"},matchScore:2,suggestion:true},"amenity/fast_food/sandwich/Quiznos":{name:"Quiznos",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"fast_food",cuisine:"sandwich","brand:wikidata":"Q1936229"},addTags:{amenity:"fast_food",brand:"Quiznos","brand:wikidata":"Q1936229","brand:wikipedia":"en:Quiznos",cuisine:"sandwich",name:"Quiznos"},removeTags:{amenity:"fast_food",brand:"Quiznos","brand:wikidata":"Q1936229","brand:wikipedia":"en:Quiznos",cuisine:"sandwich",name:"Quiznos"},reference:{key:"cuisine",value:"sandwich"},matchScore:2,suggestion:true},"amenity/fast_food/chicken/Raising Cane's":{name:"Raising Cane's",icon:"fas-drumstick-bite",geometry:["point","area"],tags:{amenity:"fast_food",cuisine:"chicken","brand:wikidata":"Q7285144"},addTags:{amenity:"fast_food",brand:"Raising Cane's","brand:wikidata":"Q7285144","brand:wikipedia":"en:Raising Cane's Chicken Fingers",cuisine:"chicken",name:"Raising Cane's"},removeTags:{amenity:"fast_food",brand:"Raising Cane's","brand:wikidata":"Q7285144","brand:wikipedia":"en:Raising Cane's Chicken Fingers",cuisine:"chicken",name:"Raising Cane's"},reference:{key:"cuisine",value:"chicken"},matchScore:2,suggestion:true},"amenity/fast_food/burger/Rally's":{name:"Rally's",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food",cuisine:"burger","brand:wikidata":"Q3419341"},addTags:{amenity:"fast_food",brand:"Rally's","brand:wikidata":"Q3419341","brand:wikipedia":"en:Checkers and Rally's",cuisine:"burger",name:"Rally's"},removeTags:{amenity:"fast_food",brand:"Rally's","brand:wikidata":"Q3419341","brand:wikipedia":"en:Checkers and Rally's",cuisine:"burger",name:"Rally's"},reference:{key:"cuisine",value:"burger"},matchScore:2,suggestion:true},"amenity/fast_food/chicken/Red Rooster":{name:"Red Rooster",icon:"fas-drumstick-bite",geometry:["point","area"],tags:{amenity:"fast_food",cuisine:"chicken","brand:wikidata":"Q376466"},addTags:{amenity:"fast_food",brand:"Red Rooster","brand:wikidata":"Q376466","brand:wikipedia":"en:Red Rooster",cuisine:"chicken",name:"Red Rooster"},removeTags:{amenity:"fast_food",brand:"Red Rooster","brand:wikidata":"Q376466","brand:wikipedia":"en:Red Rooster",cuisine:"chicken",name:"Red Rooster"},reference:{key:"cuisine",value:"chicken"},matchScore:2,suggestion:true},"amenity/fast_food/pizza/Sbarro":{name:"Sbarro",icon:"maki-restaurant-pizza",geometry:["point","area"],tags:{amenity:"fast_food",cuisine:"pizza","brand:wikidata":"Q2589409"},addTags:{amenity:"fast_food",brand:"Sbarro","brand:wikidata":"Q2589409","brand:wikipedia":"en:Sbarro",cuisine:"pizza",name:"Sbarro"},removeTags:{amenity:"fast_food",brand:"Sbarro","brand:wikidata":"Q2589409","brand:wikipedia":"en:Sbarro",cuisine:"pizza",name:"Sbarro"},reference:{key:"cuisine",value:"pizza"},matchScore:2,suggestion:true},"amenity/fast_food/sandwich/Schlotzsky's":{name:"Schlotzsky's",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"fast_food",cuisine:"sandwich","brand:wikidata":"Q2244796"},addTags:{amenity:"fast_food",brand:"Schlotzsky's","brand:wikidata":"Q2244796","brand:wikipedia":"en:Schlotzsky's",cuisine:"sandwich",name:"Schlotzsky's"},removeTags:{amenity:"fast_food",brand:"Schlotzsky's","brand:wikidata":"Q2244796","brand:wikipedia":"en:Schlotzsky's",cuisine:"sandwich",name:"Schlotzsky's"},reference:{key:"cuisine",value:"sandwich"},matchScore:2,suggestion:true},"amenity/fast_food/burger/Shake Shack":{name:"Shake Shack",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food",cuisine:"burger","brand:wikidata":"Q1058722"},addTags:{amenity:"fast_food",brand:"Shake Shack","brand:wikidata":"Q1058722","brand:wikipedia":"en:Shake Shack",cuisine:"burger",name:"Shake Shack"},removeTags:{amenity:"fast_food",brand:"Shake Shack","brand:wikidata":"Q1058722","brand:wikipedia":"en:Shake Shack",cuisine:"burger",name:"Shake Shack"},reference:{key:"cuisine",value:"burger"},matchScore:2,suggestion:true},"amenity/fast_food/burger/Sibylla":{name:"Sibylla",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food",cuisine:"burger","brand:wikidata":"Q488643"},addTags:{amenity:"fast_food",brand:"Sibylla","brand:wikidata":"Q488643","brand:wikipedia":"en:Sibylla (fast food)",cuisine:"burger",name:"Sibylla"},removeTags:{amenity:"fast_food",brand:"Sibylla","brand:wikidata":"Q488643","brand:wikipedia":"en:Sibylla (fast food)",cuisine:"burger",name:"Sibylla"},reference:{key:"cuisine",value:"burger"},matchScore:2,suggestion:true},"amenity/fast_food/burger/Smashburger":{name:"Smashburger",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food",cuisine:"burger","brand:wikidata":"Q17061332"},addTags:{amenity:"fast_food",brand:"Smashburger","brand:wikidata":"Q17061332","brand:wikipedia":"en:Smashburger",cuisine:"burger",name:"Smashburger"},removeTags:{amenity:"fast_food",brand:"Smashburger","brand:wikidata":"Q17061332","brand:wikipedia":"en:Smashburger",cuisine:"burger",name:"Smashburger"},reference:{key:"cuisine",value:"burger"},matchScore:2,suggestion:true},"amenity/fast_food/Smoothie King":{name:"Smoothie King",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food","brand:wikidata":"Q5491421"},addTags:{amenity:"fast_food",brand:"Smoothie King","brand:wikidata":"Q5491421","brand:wikipedia":"en:Smoothie King",cuisine:"juice",name:"Smoothie King"},removeTags:{amenity:"fast_food",brand:"Smoothie King","brand:wikidata":"Q5491421","brand:wikipedia":"en:Smoothie King",cuisine:"juice",name:"Smoothie King"},matchScore:2,suggestion:true},"amenity/fast_food/burger/Sonic":{name:"Sonic",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food",cuisine:"burger","brand:wikidata":"Q7561808"},addTags:{amenity:"fast_food",brand:"Sonic","brand:wikidata":"Q7561808","brand:wikipedia":"en:Sonic Drive-In",cuisine:"burger",name:"Sonic"},removeTags:{amenity:"fast_food",brand:"Sonic","brand:wikidata":"Q7561808","brand:wikipedia":"en:Sonic Drive-In",cuisine:"burger",name:"Sonic"},reference:{key:"cuisine",value:"burger"},matchScore:2,suggestion:true},"amenity/fast_food/burger/Steers":{name:"Steers",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food",cuisine:"burger","brand:wikidata":"Q56599145"},addTags:{amenity:"fast_food",brand:"Steers","brand:wikidata":"Q56599145","brand:wikipedia":"en:Steers",cuisine:"burger",name:"Steers"},removeTags:{amenity:"fast_food",brand:"Steers","brand:wikidata":"Q56599145","brand:wikipedia":"en:Steers",cuisine:"burger",name:"Steers"},reference:{key:"cuisine",value:"burger"},matchScore:2,suggestion:true},"amenity/fast_food/sandwich/Subway":{name:"Subway",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"fast_food",cuisine:"sandwich","brand:wikidata":"Q244457"},addTags:{amenity:"fast_food",brand:"Subway","brand:wikidata":"Q244457","brand:wikipedia":"en:Subway (restaurant)",cuisine:"sandwich",name:"Subway"},removeTags:{amenity:"fast_food",brand:"Subway","brand:wikidata":"Q244457","brand:wikipedia":"en:Subway (restaurant)",cuisine:"sandwich",name:"Subway"},reference:{key:"cuisine",value:"sandwich"},matchScore:2,suggestion:true},"amenity/fast_food/burger/Supermac's":{name:"Supermac's",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food",cuisine:"burger","brand:wikidata":"Q7643750"},addTags:{amenity:"fast_food",brand:"Supermac's","brand:wikidata":"Q7643750","brand:wikipedia":"en:Supermac's",cuisine:"burger",name:"Supermac's"},removeTags:{amenity:"fast_food",brand:"Supermac's","brand:wikidata":"Q7643750","brand:wikipedia":"en:Supermac's",cuisine:"burger",name:"Supermac's"},reference:{key:"cuisine",value:"burger"},matchScore:2,suggestion:true},"amenity/fast_food/TCBY":{name:"TCBY",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food","brand:wikidata":"Q7669631"},addTags:{amenity:"fast_food",brand:"TCBY","brand:wikidata":"Q7669631","brand:wikipedia":"en:TCBY",cuisine:"frozen_yogurt",name:"TCBY"},removeTags:{amenity:"fast_food",brand:"TCBY","brand:wikidata":"Q7669631","brand:wikipedia":"en:TCBY",cuisine:"frozen_yogurt",name:"TCBY"},matchScore:2,suggestion:true},"amenity/fast_food/Taco Bell":{name:"Taco Bell",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food","brand:wikidata":"Q752941"},addTags:{amenity:"fast_food",brand:"Taco Bell","brand:wikidata":"Q752941","brand:wikipedia":"en:Taco Bell",cuisine:"tex-mex",name:"Taco Bell"},removeTags:{amenity:"fast_food",brand:"Taco Bell","brand:wikidata":"Q752941","brand:wikipedia":"en:Taco Bell",cuisine:"tex-mex",name:"Taco Bell"},matchScore:2,suggestion:true},"amenity/fast_food/mexican/Taco Bueno":{name:"Taco Bueno",icon:"fas-pepper-hot",geometry:["point","area"],tags:{amenity:"fast_food",cuisine:"mexican","brand:wikidata":"Q7673958"},addTags:{amenity:"fast_food",brand:"Taco Bueno","brand:wikidata":"Q7673958","brand:wikipedia":"en:Taco Bueno",cuisine:"mexican",name:"Taco Bueno"},removeTags:{amenity:"fast_food",brand:"Taco Bueno","brand:wikidata":"Q7673958","brand:wikipedia":"en:Taco Bueno",cuisine:"mexican",name:"Taco Bueno"},reference:{key:"cuisine",value:"mexican"},matchScore:2,suggestion:true},"amenity/fast_food/mexican/Taco Cabana":{name:"Taco Cabana",icon:"fas-pepper-hot",geometry:["point","area"],tags:{amenity:"fast_food",cuisine:"mexican","brand:wikidata":"Q12070488"},addTags:{amenity:"fast_food",brand:"Taco Cabana","brand:wikidata":"Q12070488","brand:wikipedia":"en:Taco Cabana",cuisine:"mexican",name:"Taco Cabana"},removeTags:{amenity:"fast_food",brand:"Taco Cabana","brand:wikidata":"Q12070488","brand:wikipedia":"en:Taco Cabana",cuisine:"mexican",name:"Taco Cabana"},reference:{key:"cuisine",value:"mexican"},matchScore:2,suggestion:true},"amenity/fast_food/mexican/Taco Del Mar":{name:"Taco Del Mar",icon:"fas-pepper-hot",geometry:["point","area"],tags:{amenity:"fast_food",cuisine:"mexican","brand:wikidata":"Q7673972"},addTags:{amenity:"fast_food",brand:"Taco Del Mar","brand:wikidata":"Q7673972","brand:wikipedia":"en:Taco del Mar",cuisine:"mexican",name:"Taco Del Mar"},removeTags:{amenity:"fast_food",brand:"Taco Del Mar","brand:wikidata":"Q7673972","brand:wikipedia":"en:Taco del Mar",cuisine:"mexican",name:"Taco Del Mar"},reference:{key:"cuisine",value:"mexican"},matchScore:2,suggestion:true},"amenity/fast_food/mexican/Taco John's":{name:"Taco John's",icon:"fas-pepper-hot",geometry:["point","area"],tags:{amenity:"fast_food",cuisine:"mexican","brand:wikidata":"Q7673962"},addTags:{amenity:"fast_food",brand:"Taco John's","brand:wikidata":"Q7673962","brand:wikipedia":"en:Taco John's",cuisine:"mexican",name:"Taco John's"},removeTags:{amenity:"fast_food",brand:"Taco John's","brand:wikidata":"Q7673962","brand:wikipedia":"en:Taco John's",cuisine:"mexican",name:"Taco John's"},reference:{key:"cuisine",value:"mexican"},matchScore:2,suggestion:true},"amenity/fast_food/mexican/Taco Time":{name:"Taco Time",icon:"fas-pepper-hot",geometry:["point","area"],tags:{amenity:"fast_food",cuisine:"mexican","brand:wikidata":"Q7673969"},addTags:{amenity:"fast_food",brand:"Taco Time","brand:wikidata":"Q7673969","brand:wikipedia":"en:Taco Time",cuisine:"mexican",name:"Taco Time"},removeTags:{amenity:"fast_food",brand:"Taco Time","brand:wikidata":"Q7673969","brand:wikipedia":"en:Taco Time",cuisine:"mexican",name:"Taco Time"},reference:{key:"cuisine",value:"mexican"},matchScore:2,suggestion:true},"amenity/fast_food/pizza/Telepizza":{name:"Telepizza",icon:"maki-restaurant-pizza",geometry:["point","area"],tags:{amenity:"fast_food",cuisine:"pizza","brand:wikidata":"Q2699863"},addTags:{amenity:"fast_food",brand:"Telepizza","brand:wikidata":"Q2699863","brand:wikipedia":"en:Telepizza",cuisine:"pizza",name:"Telepizza"},removeTags:{amenity:"fast_food",brand:"Telepizza","brand:wikidata":"Q2699863","brand:wikipedia":"en:Telepizza",cuisine:"pizza",name:"Telepizza"},reference:{key:"cuisine",value:"pizza"},matchScore:2,suggestion:true},"amenity/fast_food/Thai Express":{name:"Thai Express",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food","brand:wikidata":"Q7709119"},addTags:{amenity:"fast_food",brand:"Thai Express","brand:wikidata":"Q7709119","brand:wikipedia":"en:Thai Express",cuisine:"thai",name:"Thai Express"},removeTags:{amenity:"fast_food",brand:"Thai Express","brand:wikidata":"Q7709119","brand:wikipedia":"en:Thai Express",cuisine:"thai",name:"Thai Express"},matchScore:2,suggestion:true},"amenity/fast_food/pizza/The Pizza Company":{name:"The Pizza Company",icon:"maki-restaurant-pizza",geometry:["point","area"],tags:{amenity:"fast_food",cuisine:"pizza","brand:wikidata":"Q2413520"},addTags:{amenity:"fast_food",brand:"The Pizza Company","brand:wikidata":"Q2413520","brand:wikipedia":"en:The Pizza Company",cuisine:"pizza",name:"The Pizza Company"},removeTags:{amenity:"fast_food",brand:"The Pizza Company","brand:wikidata":"Q2413520","brand:wikipedia":"en:The Pizza Company",cuisine:"pizza",name:"The Pizza Company"},reference:{key:"cuisine",value:"pizza"},matchScore:2,suggestion:true},"amenity/fast_food/Veggie Grill":{name:"Veggie Grill",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food","brand:wikidata":"Q18636427"},addTags:{amenity:"fast_food",brand:"Veggie Grill","brand:wikidata":"Q18636427","brand:wikipedia":"en:Veggie Grill","diet:vegan":"only",cuisine:"american",name:"Veggie Grill"},removeTags:{amenity:"fast_food",brand:"Veggie Grill","brand:wikidata":"Q18636427","brand:wikipedia":"en:Veggie Grill","diet:vegan":"only",cuisine:"american",name:"Veggie Grill"},matchScore:2,suggestion:true},"amenity/fast_food/burger/Wendy's":{name:"Wendy's",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food",cuisine:"burger","brand:wikidata":"Q550258"},addTags:{amenity:"fast_food",brand:"Wendy's","brand:wikidata":"Q550258","brand:wikipedia":"en:Wendy's",cuisine:"burger",name:"Wendy's"},removeTags:{amenity:"fast_food",brand:"Wendy's","brand:wikidata":"Q550258","brand:wikipedia":"en:Wendy's",cuisine:"burger",name:"Wendy's"},reference:{key:"cuisine",value:"burger"},matchScore:2,suggestion:true},"amenity/fast_food/burger/Whataburger":{name:"Whataburger",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food",cuisine:"burger","brand:wikidata":"Q376627"},addTags:{amenity:"fast_food",brand:"Whataburger","brand:wikidata":"Q376627","brand:wikipedia":"en:Whataburger",cuisine:"burger",name:"Whataburger"},removeTags:{amenity:"fast_food",brand:"Whataburger","brand:wikidata":"Q376627","brand:wikipedia":"en:Whataburger",cuisine:"burger",name:"Whataburger"},reference:{key:"cuisine",value:"burger"},matchScore:2,suggestion:true},"amenity/fast_food/burger/White Castle":{name:"White Castle",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food",cuisine:"burger","brand:wikidata":"Q1244034"},addTags:{amenity:"fast_food",brand:"White Castle","brand:wikidata":"Q1244034","brand:wikipedia":"en:White Castle (restaurant)",cuisine:"burger",name:"White Castle"},removeTags:{amenity:"fast_food",brand:"White Castle","brand:wikidata":"Q1244034","brand:wikipedia":"en:White Castle (restaurant)",cuisine:"burger",name:"White Castle"},reference:{key:"cuisine",value:"burger"},matchScore:2,suggestion:true},"amenity/fast_food/Wienerschnitzel":{name:"Wienerschnitzel",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food","brand:wikidata":"Q324679"},addTags:{amenity:"fast_food",brand:"Wienerschnitzel","brand:wikidata":"Q324679","brand:wikipedia":"en:Wienerschnitzel",cuisine:"hot_dog",name:"Wienerschnitzel"},removeTags:{amenity:"fast_food",brand:"Wienerschnitzel","brand:wikidata":"Q324679","brand:wikipedia":"en:Wienerschnitzel",cuisine:"hot_dog",name:"Wienerschnitzel"},matchScore:2,suggestion:true},"amenity/fast_food/burger/Wimpy":{name:"Wimpy",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food",cuisine:"burger","brand:wikidata":"Q2811992"},addTags:{amenity:"fast_food",brand:"Wimpy","brand:wikidata":"Q2811992","brand:wikipedia":"en:Wimpy (restaurant)",cuisine:"burger",name:"Wimpy"},removeTags:{amenity:"fast_food",brand:"Wimpy","brand:wikidata":"Q2811992","brand:wikipedia":"en:Wimpy (restaurant)",cuisine:"burger",name:"Wimpy"},reference:{key:"cuisine",value:"burger"},matchScore:2,suggestion:true},"amenity/fast_food/chicken/Zaxby's":{name:"Zaxby's",icon:"fas-drumstick-bite",geometry:["point","area"],tags:{amenity:"fast_food",cuisine:"chicken","brand:wikidata":"Q8067525"},addTags:{amenity:"fast_food",brand:"Zaxby's","brand:wikidata":"Q8067525","brand:wikipedia":"en:Zaxby's",cuisine:"chicken",name:"Zaxby's"},removeTags:{amenity:"fast_food",brand:"Zaxby's","brand:wikidata":"Q8067525","brand:wikipedia":"en:Zaxby's",cuisine:"chicken",name:"Zaxby's"},reference:{key:"cuisine",value:"chicken"},matchScore:2,suggestion:true},"amenity/fast_food/burger/Бургер Кинг":{name:"Бургер Кинг",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food",cuisine:"burger","brand:wikidata":"Q177054"},addTags:{amenity:"fast_food",brand:"Бургер Кинг","brand:en":"Burger King","brand:wikidata":"Q177054","brand:wikipedia":"en:Burger King",cuisine:"burger",name:"Бургер Кинг","name:en":"Burger King"},removeTags:{amenity:"fast_food",brand:"Бургер Кинг","brand:en":"Burger King","brand:wikidata":"Q177054","brand:wikipedia":"en:Burger King",cuisine:"burger",name:"Бургер Кинг","name:en":"Burger King"},reference:{key:"cuisine",value:"burger"},matchScore:2,suggestion:true},"amenity/fast_food/Крошка Картошка":{name:"Крошка Картошка",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food","brand:wikidata":"Q4241838"},addTags:{amenity:"fast_food",brand:"Крошка Картошка","brand:wikidata":"Q4241838","brand:wikipedia":"ru:Крошка Картошка",name:"Крошка Картошка"},removeTags:{amenity:"fast_food",brand:"Крошка Картошка","brand:wikidata":"Q4241838","brand:wikipedia":"ru:Крошка Картошка",name:"Крошка Картошка"},matchScore:2,suggestion:true},"amenity/fast_food/burger/Макдоналдс":{name:"Макдоналдс",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food",cuisine:"burger","brand:wikidata":"Q38076"},addTags:{amenity:"fast_food",brand:"Макдоналдс","brand:en":"McDonald's","brand:wikidata":"Q38076","brand:wikipedia":"en:McDonald's",cuisine:"burger",name:"Макдоналдс","name:en":"McDonald's"},removeTags:{amenity:"fast_food",brand:"Макдоналдс","brand:en":"McDonald's","brand:wikidata":"Q38076","brand:wikipedia":"en:McDonald's",cuisine:"burger",name:"Макдоналдс","name:en":"McDonald's"},reference:{key:"cuisine",value:"burger"},matchScore:2,suggestion:true},"amenity/fast_food/pizza/Папа Джонс":{name:"Папа Джонс",icon:"maki-restaurant-pizza",geometry:["point","area"],tags:{amenity:"fast_food",cuisine:"pizza","brand:wikidata":"Q2759586"},addTags:{amenity:"fast_food",brand:"Папа Джонс","brand:en":"Papa John's","brand:wikidata":"Q2759586","brand:wikipedia":"ru:Papa John’s",cuisine:"pizza",name:"Папа Джонс","name:en":"Papa John's"},removeTags:{amenity:"fast_food",brand:"Папа Джонс","brand:en":"Papa John's","brand:wikidata":"Q2759586","brand:wikipedia":"ru:Papa John’s",cuisine:"pizza",name:"Папа Джонс","name:en":"Papa John's"},reference:{key:"cuisine",value:"pizza"},matchScore:2,suggestion:true},"amenity/fast_food/Стардог!s":{name:"Стардог!s",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food","brand:wikidata":"Q4439856"},addTags:{amenity:"fast_food",brand:"Стардог!s","brand:en":"Stardog!s","brand:wikidata":"Q4439856","brand:wikipedia":"ru:Стардогс",cuisine:"sausage",name:"Стардог!s","name:en":"Stardog!s"},removeTags:{amenity:"fast_food",brand:"Стардог!s","brand:en":"Stardog!s","brand:wikidata":"Q4439856","brand:wikipedia":"ru:Стардогс",cuisine:"sausage",name:"Стардог!s","name:en":"Stardog!s"},matchScore:2,suggestion:true},"amenity/fast_food/Суши Wok":{name:"Суши Wok",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food","brand:wikidata":"Q25444754"},addTags:{amenity:"fast_food",brand:"Суши Wok","brand:en":"Sushi Wok","brand:wikidata":"Q25444754","brand:wikipedia":"uk:Суши Wok (мережа магазинів)",cuisine:"asian",name:"Суши Wok","name:en":"Sushi Wok"},removeTags:{amenity:"fast_food",brand:"Суши Wok","brand:en":"Sushi Wok","brand:wikidata":"Q25444754","brand:wikipedia":"uk:Суши Wok (мережа магазинів)",cuisine:"asian",name:"Суши Wok","name:en":"Sushi Wok"},matchScore:2,suggestion:true},"amenity/fast_food/Теремок":{name:"Теремок",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food","brand:wikidata":"Q4455593"},addTags:{amenity:"fast_food",brand:"Теремок","brand:en":"Teremok","brand:wikidata":"Q4455593","brand:wikipedia":"ru:Теремок (сеть быстрого питания)",name:"Теремок","name:en":"Teremok"},removeTags:{amenity:"fast_food",brand:"Теремок","brand:en":"Teremok","brand:wikidata":"Q4455593","brand:wikipedia":"ru:Теремок (сеть быстрого питания)",name:"Теремок","name:en":"Teremok"},matchScore:2,suggestion:true},"amenity/fast_food/burger/מקדונלד'ס":{name:"מקדונלד'ס",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food",cuisine:"burger","brand:wikidata":"Q12061542"},addTags:{amenity:"fast_food",brand:"מקדונלד'ס","brand:en":"McDonald's","brand:wikidata":"Q12061542","brand:wikipedia":"en:McDonald's Israel",cuisine:"burger",name:"מקדונלד'ס","name:en":"McDonald's"},removeTags:{amenity:"fast_food",brand:"מקדונלד'ס","brand:en":"McDonald's","brand:wikidata":"Q12061542","brand:wikipedia":"en:McDonald's Israel",cuisine:"burger",name:"מקדונלד'ס","name:en":"McDonald's"},reference:{key:"cuisine",value:"burger"},matchScore:2,suggestion:true},"amenity/fast_food/かっぱ寿司":{name:"かっぱ寿司",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food","brand:wikidata":"Q11263916"},addTags:{amenity:"fast_food",brand:"かっぱ寿司","brand:en":"Kappazushi","brand:wikidata":"Q11263916","brand:wikipedia":"ja:かっぱ寿司",cuisine:"sushi",name:"かっぱ寿司","name:en":"Kappazushi"},removeTags:{amenity:"fast_food",brand:"かっぱ寿司","brand:en":"Kappazushi","brand:wikidata":"Q11263916","brand:wikipedia":"ja:かっぱ寿司",cuisine:"sushi",name:"かっぱ寿司","name:en":"Kappazushi"},matchScore:2,suggestion:true},"amenity/fast_food/かつや":{name:"かつや",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food","brand:wikidata":"Q2855257"},addTags:{amenity:"fast_food",brand:"かつや","brand:en":"Katsuya","brand:wikidata":"Q2855257","brand:wikipedia":"ja:かつや",cuisine:"fried_food",name:"かつや","name:en":"Katsuya","name:ko":"카쯔야","name:zh":"吉豚屋"},removeTags:{amenity:"fast_food",brand:"かつや","brand:en":"Katsuya","brand:wikidata":"Q2855257","brand:wikipedia":"ja:かつや",cuisine:"fried_food",name:"かつや","name:en":"Katsuya","name:ko":"카쯔야","name:zh":"吉豚屋"},matchScore:2,suggestion:true},"amenity/fast_food/くら寿司":{name:"くら寿司",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food","brand:wikidata":"Q6445491"},addTags:{amenity:"fast_food",brand:"くら寿司","brand:en":"Kurazushi","brand:wikidata":"Q6445491","brand:wikipedia":"ja:くらコーポレーション",cuisine:"sushi",name:"くら寿司","name:en":"Kurazushi"},removeTags:{amenity:"fast_food",brand:"くら寿司","brand:en":"Kurazushi","brand:wikidata":"Q6445491","brand:wikipedia":"ja:くらコーポレーション",cuisine:"sushi",name:"くら寿司","name:en":"Kurazushi"},matchScore:2,suggestion:true},"amenity/fast_food/すき家":{name:"すき家",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food","brand:wikidata":"Q6137375"},addTags:{amenity:"fast_food",brand:"すき家","brand:en":"Sukiya","brand:wikidata":"Q6137375","brand:wikipedia":"ja:すき家",name:"すき家","name:en":"Sukiya"},removeTags:{amenity:"fast_food",brand:"すき家","brand:en":"Sukiya","brand:wikidata":"Q6137375","brand:wikipedia":"ja:すき家",name:"すき家","name:en":"Sukiya"},matchScore:2,suggestion:true},"amenity/fast_food/なか卯":{name:"なか卯",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food","brand:wikidata":"Q11274132"},addTags:{amenity:"fast_food",brand:"なか卯","brand:en":"Nakau","brand:wikidata":"Q11274132","brand:wikipedia":"ja:なか卯",name:"なか卯","name:en":"Nakau"},removeTags:{amenity:"fast_food",brand:"なか卯","brand:en":"Nakau","brand:wikidata":"Q11274132","brand:wikipedia":"ja:なか卯",name:"なか卯","name:en":"Nakau"},matchScore:2,suggestion:true},"amenity/fast_food/はま寿司":{name:"はま寿司",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food","brand:wikidata":"Q17220385"},addTags:{amenity:"fast_food",brand:"はま寿司","brand:en":"Hamazushi","brand:wikidata":"Q17220385","brand:wikipedia":"ja:はま寿司",name:"はま寿司","name:en":"Hamazushi"},removeTags:{amenity:"fast_food",brand:"はま寿司","brand:en":"Hamazushi","brand:wikidata":"Q17220385","brand:wikipedia":"ja:はま寿司",name:"はま寿司","name:en":"Hamazushi"},matchScore:2,suggestion:true},"amenity/fast_food/ほっかほっか亭":{name:"ほっかほっか亭",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food","brand:wikidata":"Q5878035"},addTags:{amenity:"fast_food",brand:"ほっかほっか亭","brand:en":"Hokka Hokka Tei","brand:wikidata":"Q5878035","brand:wikipedia":"ja:ほっかほっか亭",name:"ほっかほっか亭","name:en":"Hokka Hokka Tei"},removeTags:{amenity:"fast_food",brand:"ほっかほっか亭","brand:en":"Hokka Hokka Tei","brand:wikidata":"Q5878035","brand:wikipedia":"ja:ほっかほっか亭",name:"ほっかほっか亭","name:en":"Hokka Hokka Tei"},matchScore:2,suggestion:true},"amenity/fast_food/ほっともっと":{name:"ほっともっと",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food","brand:wikidata":"Q10850949"},addTags:{amenity:"fast_food",brand:"ほっともっと","brand:en":"Hotto Motto","brand:wikidata":"Q10850949","brand:wikipedia":"ja:ほっともっと",name:"ほっともっと","name:en":"Hotto Motto"},removeTags:{amenity:"fast_food",brand:"ほっともっと","brand:en":"Hotto Motto","brand:wikidata":"Q10850949","brand:wikipedia":"ja:ほっともっと",name:"ほっともっと","name:en":"Hotto Motto"},matchScore:2,suggestion:true},"amenity/fast_food/オリジン弁当":{name:"オリジン弁当",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food","brand:wikidata":"Q11292632"},addTags:{amenity:"fast_food",brand:"オリジン弁当","brand:en":"Origin Bentō","brand:wikidata":"Q11292632","brand:wikipedia":"ja:オリジン東秀",name:"オリジン弁当","name:en":"Origin Bentō"},removeTags:{amenity:"fast_food",brand:"オリジン弁当","brand:en":"Origin Bentō","brand:wikidata":"Q11292632","brand:wikipedia":"ja:オリジン東秀",name:"オリジン弁当","name:en":"Origin Bentō"},matchScore:2,suggestion:true},"amenity/fast_food/chicken/ケンタッキーフライドチキン":{name:"ケンタッキーフライドチキン",icon:"fas-drumstick-bite",geometry:["point","area"],tags:{amenity:"fast_food",cuisine:"chicken","brand:wikidata":"Q524757"},addTags:{amenity:"fast_food",brand:"ケンタッキーフライドチキン","brand:en":"KFC","brand:wikidata":"Q524757","brand:wikipedia":"ja:KFCコーポレーション",cuisine:"chicken",name:"ケンタッキーフライドチキン","name:en":"KFC"},removeTags:{amenity:"fast_food",brand:"ケンタッキーフライドチキン","brand:en":"KFC","brand:wikidata":"Q524757","brand:wikipedia":"ja:KFCコーポレーション",cuisine:"chicken",name:"ケンタッキーフライドチキン","name:en":"KFC"},reference:{key:"cuisine",value:"chicken"},matchScore:2,suggestion:true},"amenity/fast_food/sandwich/サブウェイ":{name:"サブウェイ",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"fast_food",cuisine:"sandwich","brand:wikidata":"Q244457"},addTags:{amenity:"fast_food",brand:"サブウェイ","brand:en":"Subway","brand:wikidata":"Q244457","brand:wikipedia":"ja:サブウェイ",cuisine:"sandwich",name:"サブウェイ","name:en":"Subway"},removeTags:{amenity:"fast_food",brand:"サブウェイ","brand:en":"Subway","brand:wikidata":"Q244457","brand:wikipedia":"ja:サブウェイ",cuisine:"sandwich",name:"サブウェイ","name:en":"Subway"},reference:{key:"cuisine",value:"sandwich"},matchScore:2,suggestion:true},"amenity/fast_food/スシロー":{name:"スシロー",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food","brand:wikidata":"Q11257037"},addTags:{amenity:"fast_food",brand:"スシロー","brand:en":"Sushiro","brand:wikidata":"Q11257037","brand:wikipedia":"ja:あきんどスシロー",cuisine:"sushi",name:"スシロー","name:en":"Sushiro","name:zh":"壽司郎"},removeTags:{amenity:"fast_food",brand:"スシロー","brand:en":"Sushiro","brand:wikidata":"Q11257037","brand:wikipedia":"ja:あきんどスシロー",cuisine:"sushi",name:"スシロー","name:en":"Sushiro","name:zh":"壽司郎"},matchScore:2,suggestion:true},"amenity/fast_food/pizza/ピザハット":{name:"ピザハット",icon:"maki-restaurant-pizza",geometry:["point","area"],tags:{amenity:"fast_food",cuisine:"pizza","brand:wikidata":"Q191615"},addTags:{amenity:"fast_food",brand:"ピザハット","brand:en":"Pizza Hut","brand:wikidata":"Q191615","brand:wikipedia":"ja:ピザハット",cuisine:"pizza",name:"ピザハット","name:en":"Pizza Hut"},removeTags:{amenity:"fast_food",brand:"ピザハット","brand:en":"Pizza Hut","brand:wikidata":"Q191615","brand:wikipedia":"ja:ピザハット",cuisine:"pizza",name:"ピザハット","name:en":"Pizza Hut"},reference:{key:"cuisine",value:"pizza"},matchScore:2,suggestion:true},"amenity/fast_food/burger/マクドナルド":{name:"マクドナルド",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food",cuisine:"burger","brand:wikidata":"Q38076"},addTags:{amenity:"fast_food",brand:"マクドナルド","brand:en":"McDonald's","brand:wikidata":"Q38076","brand:wikipedia":"ja:マクドナルド",cuisine:"burger",name:"マクドナルド","name:en":"McDonald's"},removeTags:{amenity:"fast_food",brand:"マクドナルド","brand:en":"McDonald's","brand:wikidata":"Q38076","brand:wikipedia":"ja:マクドナルド",cuisine:"burger",name:"マクドナルド","name:en":"McDonald's"},reference:{key:"cuisine",value:"burger"},matchScore:2,suggestion:true},"amenity/fast_food/ミスタードーナツ":{name:"ミスタードーナツ",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food","brand:wikidata":"Q1065819"},addTags:{amenity:"fast_food",brand:"ミスタードーナツ","brand:en":"Mister Donut","brand:wikidata":"Q1065819","brand:wikipedia":"en:Mister Donut",cuisine:"donut",name:"ミスタードーナツ","name:en":"Mister Donut"},removeTags:{amenity:"fast_food",brand:"ミスタードーナツ","brand:en":"Mister Donut","brand:wikidata":"Q1065819","brand:wikipedia":"en:Mister Donut",cuisine:"donut",name:"ミスタードーナツ","name:en":"Mister Donut"},matchScore:2,suggestion:true},"amenity/fast_food/burger/モスバーガー":{name:"モスバーガー",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food",cuisine:"burger","brand:wikidata":"Q1204169"},addTags:{amenity:"fast_food",brand:"モスバーガー","brand:en":"MOS Burger","brand:wikidata":"Q1204169","brand:wikipedia":"ja:モスバーガー",cuisine:"burger",name:"モスバーガー","name:en":"MOS Burger"},removeTags:{amenity:"fast_food",brand:"モスバーガー","brand:en":"MOS Burger","brand:wikidata":"Q1204169","brand:wikipedia":"ja:モスバーガー",cuisine:"burger",name:"モスバーガー","name:en":"MOS Burger"},reference:{key:"cuisine",value:"burger"},matchScore:2,suggestion:true},"amenity/fast_food/burger/ロッテリア":{name:"ロッテリア",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food",cuisine:"burger","brand:wikidata":"Q249525"},addTags:{amenity:"fast_food",brand:"ロッテリア","brand:en":"Lotteria","brand:wikidata":"Q249525","brand:wikipedia":"ja:ロッテリア",cuisine:"burger",name:"ロッテリア","name:en":"Lotteria"},removeTags:{amenity:"fast_food",brand:"ロッテリア","brand:en":"Lotteria","brand:wikidata":"Q249525","brand:wikipedia":"ja:ロッテリア",cuisine:"burger",name:"ロッテリア","name:en":"Lotteria"},reference:{key:"cuisine",value:"burger"},matchScore:2,suggestion:true},"amenity/fast_food/吉野家":{name:"吉野家",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food","brand:wikidata":"Q776272"},addTags:{amenity:"fast_food",brand:"吉野家","brand:en":"Yoshinoya","brand:wikidata":"Q776272","brand:wikipedia":"ja:吉野家",name:"吉野家","name:en":"Yoshinoya"},removeTags:{amenity:"fast_food",brand:"吉野家","brand:en":"Yoshinoya","brand:wikidata":"Q776272","brand:wikipedia":"ja:吉野家",name:"吉野家","name:en":"Yoshinoya"},matchScore:2,suggestion:true},"amenity/fast_food/富士そば":{name:"富士そば",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food","brand:wikidata":"Q11414722"},addTags:{amenity:"fast_food",brand:"富士そば","brand:en":"Fuji Soba","brand:wikidata":"Q11414722","brand:wikipedia":"ja:名代富士そば",name:"富士そば","name:en":"Fuji Soba"},removeTags:{amenity:"fast_food",brand:"富士そば","brand:en":"Fuji Soba","brand:wikidata":"Q11414722","brand:wikipedia":"ja:名代富士そば",name:"富士そば","name:en":"Fuji Soba"},matchScore:2,suggestion:true},"amenity/fast_food/幸楽苑":{name:"幸楽苑",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food","brand:wikidata":"Q11484003"},addTags:{amenity:"fast_food",brand:"幸楽苑","brand:en":"Kourakuen","brand:wikidata":"Q11484003","brand:wikipedia":"ja:幸楽苑",name:"幸楽苑","name:en":"Kourakuen"},removeTags:{amenity:"fast_food",brand:"幸楽苑","brand:en":"Kourakuen","brand:wikidata":"Q11484003","brand:wikipedia":"ja:幸楽苑",name:"幸楽苑","name:en":"Kourakuen"},matchScore:2,suggestion:true},"amenity/fast_food/burger/摩斯漢堡":{name:"摩斯漢堡",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food",cuisine:"burger","brand:wikidata":"Q1204169"},addTags:{amenity:"fast_food",brand:"摩斯漢堡","brand:en":"MOS Burger","brand:wikidata":"Q1204169","brand:wikipedia":"zh:摩斯漢堡",cuisine:"burger",name:"摩斯漢堡","name:en":"MOS Burger"},removeTags:{amenity:"fast_food",brand:"摩斯漢堡","brand:en":"MOS Burger","brand:wikidata":"Q1204169","brand:wikipedia":"zh:摩斯漢堡",cuisine:"burger",name:"摩斯漢堡","name:en":"MOS Burger"},reference:{key:"cuisine",value:"burger"},matchScore:2,suggestion:true},"amenity/fast_food/松屋":{name:"松屋",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food","brand:wikidata":"Q848773"},addTags:{amenity:"fast_food",brand:"松屋","brand:en":"Matsuya Foods","brand:wikidata":"Q848773","brand:wikipedia":"zh:松屋食品",name:"松屋","name:en":"Matsuya Foods"},removeTags:{amenity:"fast_food",brand:"松屋","brand:en":"Matsuya Foods","brand:wikidata":"Q848773","brand:wikipedia":"zh:松屋食品",name:"松屋","name:en":"Matsuya Foods"},matchScore:2,suggestion:true},"amenity/fast_food/肯德基":{name:"肯德基",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food","brand:wikidata":"Q524757"},addTags:{amenity:"fast_food",brand:"肯德基","brand:en":"KFC","brand:wikidata":"Q524757","brand:wikipedia":"zh:肯德基",name:"肯德基","name:en":"KFC"},removeTags:{amenity:"fast_food",brand:"肯德基","brand:en":"KFC","brand:wikidata":"Q524757","brand:wikipedia":"zh:肯德基",name:"肯德基","name:en":"KFC"},matchScore:2,suggestion:true},"amenity/fast_food/burger/麥當勞":{name:"麥當勞",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food",cuisine:"burger","brand:wikidata":"Q38076"},addTags:{amenity:"fast_food",brand:"麥當勞","brand:en":"McDonald's","brand:wikidata":"Q38076","brand:wikipedia":"zh_classical:麥當勞",cuisine:"burger",name:"麥當勞","name:en":"McDonald's"},removeTags:{amenity:"fast_food",brand:"麥當勞","brand:en":"McDonald's","brand:wikidata":"Q38076","brand:wikipedia":"zh_classical:麥當勞",cuisine:"burger",name:"麥當勞","name:en":"McDonald's"},reference:{key:"cuisine",value:"burger"},matchScore:2,suggestion:true},"amenity/fast_food/burger/麦当劳":{name:"麦当劳",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food",cuisine:"burger","brand:wikidata":"Q38076"},addTags:{amenity:"fast_food",brand:"麦当劳","brand:en":"McDonald's","brand:wikidata":"Q38076","brand:wikipedia":"zh:麦当劳",cuisine:"burger",name:"麦当劳","name:en":"McDonald's"},removeTags:{amenity:"fast_food",brand:"麦当劳","brand:en":"McDonald's","brand:wikidata":"Q38076","brand:wikipedia":"zh:麦当劳",cuisine:"burger",name:"麦当劳","name:en":"McDonald's"},reference:{key:"cuisine",value:"burger"},matchScore:2,suggestion:true},"amenity/fast_food/burger/롯데리아":{name:"롯데리아",icon:"maki-fast-food",geometry:["point","area"],tags:{amenity:"fast_food",cuisine:"burger","brand:wikidata":"Q249525"},addTags:{amenity:"fast_food",brand:"롯데리아","brand:en":"Lotteria","brand:wikidata":"Q249525","brand:wikipedia":"ko:롯데리아",cuisine:"burger",name:"롯데리아","name:en":"Lotteria"},removeTags:{amenity:"fast_food",brand:"롯데리아","brand:en":"Lotteria","brand:wikidata":"Q249525","brand:wikipedia":"ko:롯데리아",cuisine:"burger",name:"롯데리아","name:en":"Lotteria"},reference:{key:"cuisine",value:"burger"},matchScore:2,suggestion:true},"amenity/fuel/1-2-3":{name:"1-2-3",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q4545742"},addTags:{amenity:"fuel",brand:"1-2-3","brand:wikidata":"Q4545742","brand:wikipedia":"en:1-2-3 (fuel station)",name:"1-2-3"},removeTags:{amenity:"fuel",brand:"1-2-3","brand:wikidata":"Q4545742","brand:wikipedia":"en:1-2-3 (fuel station)",name:"1-2-3"},matchScore:2,suggestion:true},"amenity/fuel/7-Eleven":{name:"7-Eleven",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q259340"},addTags:{amenity:"fuel",brand:"7-Eleven","brand:wikidata":"Q259340","brand:wikipedia":"en:7-Eleven",name:"7-Eleven"},removeTags:{amenity:"fuel",brand:"7-Eleven","brand:wikidata":"Q259340","brand:wikipedia":"en:7-Eleven",name:"7-Eleven"},matchScore:2,suggestion:true},"amenity/fuel/ABC":{name:"ABC",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q10397504"},addTags:{amenity:"fuel",brand:"ABC","brand:wikidata":"Q10397504","brand:wikipedia":"fi:ABC-ketju",name:"ABC"},removeTags:{amenity:"fuel",brand:"ABC","brand:wikidata":"Q10397504","brand:wikipedia":"fi:ABC-ketju",name:"ABC"},matchScore:2,suggestion:true},"amenity/fuel/ADNOC":{name:"ADNOC",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q166729"},addTags:{amenity:"fuel",brand:"ADNOC","brand:wikidata":"Q166729","brand:wikipedia":"en:Abu Dhabi National Oil Company",name:"ADNOC"},removeTags:{amenity:"fuel",brand:"ADNOC","brand:wikidata":"Q166729","brand:wikipedia":"en:Abu Dhabi National Oil Company",name:"ADNOC"},matchScore:2,suggestion:true},"amenity/fuel/Afriquia":{name:"Afriquia",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q2829178"},addTags:{amenity:"fuel",brand:"Afriquia","brand:wikidata":"Q2829178","brand:wikipedia":"en:Akwa Group",name:"Afriquia"},removeTags:{amenity:"fuel",brand:"Afriquia","brand:wikidata":"Q2829178","brand:wikipedia":"en:Akwa Group",name:"Afriquia"},matchScore:2,suggestion:true},"amenity/fuel/Agip":{name:"Agip",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q377915"},addTags:{amenity:"fuel",brand:"Agip","brand:wikidata":"Q377915","brand:wikipedia":"en:Agip",name:"Agip"},removeTags:{amenity:"fuel",brand:"Agip","brand:wikidata":"Q377915","brand:wikipedia":"en:Agip",name:"Agip"},matchScore:2,suggestion:true},"amenity/fuel/Agrola":{name:"Agrola",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q397351"},addTags:{amenity:"fuel",brand:"Agrola","brand:wikidata":"Q397351","brand:wikipedia":"de:Agrola",name:"Agrola"},removeTags:{amenity:"fuel",brand:"Agrola","brand:wikidata":"Q397351","brand:wikipedia":"de:Agrola",name:"Agrola"},matchScore:2,suggestion:true},"amenity/fuel/Api":{name:"Api",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q466043"},addTags:{amenity:"fuel",brand:"Api","brand:wikidata":"Q466043","brand:wikipedia":"en:American Petroleum Institute",name:"Api"},removeTags:{amenity:"fuel",brand:"Api","brand:wikidata":"Q466043","brand:wikipedia":"en:American Petroleum Institute",name:"Api"},matchScore:2,suggestion:true},"amenity/fuel/Aral":{name:"Aral",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q565734"},addTags:{amenity:"fuel",brand:"Aral","brand:wikidata":"Q565734","brand:wikipedia":"en:Aral AG",name:"Aral"},removeTags:{amenity:"fuel",brand:"Aral","brand:wikidata":"Q565734","brand:wikipedia":"en:Aral AG",name:"Aral"},matchScore:2,suggestion:true},"amenity/fuel/Arco":{name:"Arco",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q304769"},addTags:{amenity:"fuel",brand:"Arco","brand:wikidata":"Q304769","brand:wikipedia":"en:ARCO",name:"Arco"},removeTags:{amenity:"fuel",brand:"Arco","brand:wikidata":"Q304769","brand:wikipedia":"en:ARCO",name:"Arco"},matchScore:2,suggestion:true},"amenity/fuel/Asda":{name:"Asda",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q297410"},addTags:{amenity:"fuel",brand:"Asda","brand:wikidata":"Q297410","brand:wikipedia":"en:Asda",name:"Asda"},removeTags:{amenity:"fuel",brand:"Asda","brand:wikidata":"Q297410","brand:wikipedia":"en:Asda",name:"Asda"},matchScore:2,suggestion:true},"amenity/fuel/Auchan":{name:"Auchan",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q758603"},addTags:{amenity:"fuel",brand:"Auchan","brand:wikidata":"Q758603","brand:wikipedia":"en:Auchan",name:"Auchan"},removeTags:{amenity:"fuel",brand:"Auchan","brand:wikidata":"Q758603","brand:wikipedia":"en:Auchan",name:"Auchan"},matchScore:2,suggestion:true},"amenity/fuel/Avanti":{name:"Avanti",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q168238"},addTags:{amenity:"fuel",brand:"Avanti","brand:wikidata":"Q168238","brand:wikipedia":"en:OMV",name:"Avanti"},removeTags:{amenity:"fuel",brand:"Avanti","brand:wikidata":"Q168238","brand:wikipedia":"en:OMV",name:"Avanti"},matchScore:2,suggestion:true},"amenity/fuel/Avia":{name:"Avia",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q300147"},addTags:{amenity:"fuel",brand:"Avia","brand:wikidata":"Q300147","brand:wikipedia":"de:Avia International",name:"Avia"},removeTags:{amenity:"fuel",brand:"Avia","brand:wikidata":"Q300147","brand:wikipedia":"de:Avia International",name:"Avia"},matchScore:2,suggestion:true},"amenity/fuel/Avin":{name:"Avin",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q19903165"},addTags:{amenity:"fuel",brand:"Avin","brand:wikidata":"Q19903165","brand:wikipedia":"en:Avin International",name:"Avin"},removeTags:{amenity:"fuel",brand:"Avin","brand:wikidata":"Q19903165","brand:wikipedia":"en:Avin International",name:"Avin"},matchScore:2,suggestion:true},"amenity/fuel/BP":{name:"BP",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q152057"},addTags:{amenity:"fuel",brand:"BP","brand:wikidata":"Q152057","brand:wikipedia":"en:BP",name:"BP"},removeTags:{amenity:"fuel",brand:"BP","brand:wikidata":"Q152057","brand:wikipedia":"en:BP",name:"BP"},matchScore:2,suggestion:true},"amenity/fuel/Bangchak":{name:"Bangchak",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q6579719"},addTags:{amenity:"fuel",brand:"Bangchak","brand:wikidata":"Q6579719","brand:wikipedia":"zh:曼差石油股份",name:"Bangchak"},removeTags:{amenity:"fuel",brand:"Bangchak","brand:wikidata":"Q6579719","brand:wikipedia":"zh:曼差石油股份",name:"Bangchak"},matchScore:2,suggestion:true},"amenity/fuel/Bharat Petroleum":{name:"Bharat Petroleum",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q854826"},addTags:{amenity:"fuel",brand:"Bharat Petroleum","brand:wikidata":"Q854826","brand:wikipedia":"en:Bharat Petroleum",name:"Bharat Petroleum"},removeTags:{amenity:"fuel",brand:"Bharat Petroleum","brand:wikidata":"Q854826","brand:wikipedia":"en:Bharat Petroleum",name:"Bharat Petroleum"},matchScore:2,suggestion:true},"amenity/fuel/Bliska":{name:"Bliska",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q4016378"},addTags:{amenity:"fuel",brand:"Bliska","brand:wikidata":"Q4016378","brand:wikipedia":"pl:Bliska",name:"Bliska"},removeTags:{amenity:"fuel",brand:"Bliska","brand:wikidata":"Q4016378","brand:wikipedia":"pl:Bliska",name:"Bliska"},matchScore:2,suggestion:true},"amenity/fuel/CAMPSA":{name:"CAMPSA",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q1031623"},addTags:{amenity:"fuel",brand:"CAMPSA","brand:wikidata":"Q1031623","brand:wikipedia":"en:Campsa",name:"CAMPSA"},removeTags:{amenity:"fuel",brand:"CAMPSA","brand:wikidata":"Q1031623","brand:wikipedia":"en:Campsa",name:"CAMPSA"},matchScore:2,suggestion:true},"amenity/fuel/CEPSA":{name:"CEPSA",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q608819"},addTags:{amenity:"fuel",brand:"CEPSA","brand:wikidata":"Q608819","brand:wikipedia":"en:Compañía Española de Petróleos",name:"CEPSA"},removeTags:{amenity:"fuel",brand:"CEPSA","brand:wikidata":"Q608819","brand:wikipedia":"en:Compañía Española de Petróleos",name:"CEPSA"},matchScore:2,suggestion:true},"amenity/fuel/Caltex":{name:"Caltex",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q277470"},addTags:{amenity:"fuel",brand:"Caltex","brand:wikidata":"Q277470","brand:wikipedia":"en:Caltex",name:"Caltex"},removeTags:{amenity:"fuel",brand:"Caltex","brand:wikidata":"Q277470","brand:wikipedia":"en:Caltex",name:"Caltex"},matchScore:2,suggestion:true},"amenity/fuel/Canadian Tire Gas+":{name:"Canadian Tire Gas+",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q1032400"},addTags:{amenity:"fuel",brand:"Canadian Tire","brand:wikidata":"Q1032400","brand:wikipedia":"en:Canadian Tire",name:"Canadian Tire"},removeTags:{amenity:"fuel",brand:"Canadian Tire","brand:wikidata":"Q1032400","brand:wikipedia":"en:Canadian Tire",name:"Canadian Tire"},matchScore:2,suggestion:true},"amenity/fuel/Carrefour Market":{name:"Carrefour Market",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q217599"},addTags:{amenity:"fuel",brand:"Carrefour Market","brand:wikidata":"Q217599","brand:wikipedia":"en:Carrefour",name:"Carrefour Market"},removeTags:{amenity:"fuel",brand:"Carrefour Market","brand:wikidata":"Q217599","brand:wikipedia":"en:Carrefour",name:"Carrefour Market"},matchScore:2,suggestion:true},"amenity/fuel/Casey's General Store":{name:"Casey's General Store",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q2940968"},addTags:{amenity:"fuel",brand:"Casey's General Store","brand:wikidata":"Q2940968","brand:wikipedia":"en:Casey's General Stores",name:"Casey's General Store"},removeTags:{amenity:"fuel",brand:"Casey's General Store","brand:wikidata":"Q2940968","brand:wikipedia":"en:Casey's General Stores",name:"Casey's General Store"},matchScore:2,suggestion:true},"amenity/fuel/Cenex":{name:"Cenex",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q5011381"},addTags:{amenity:"fuel",brand:"Cenex","brand:wikidata":"Q5011381","brand:wikipedia":"en:CHS Inc.",name:"Cenex"},removeTags:{amenity:"fuel",brand:"Cenex","brand:wikidata":"Q5011381","brand:wikipedia":"en:CHS Inc.",name:"Cenex"},matchScore:2,suggestion:true},"amenity/fuel/Ceypetco":{name:"Ceypetco",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q5065795"},addTags:{amenity:"fuel",brand:"Ceypetco","brand:wikidata":"Q5065795","brand:wikipedia":"en:Ceylon Petroleum Corporation",name:"Ceypetco"},removeTags:{amenity:"fuel",brand:"Ceypetco","brand:wikidata":"Q5065795","brand:wikipedia":"en:Ceylon Petroleum Corporation",name:"Ceypetco"},matchScore:2,suggestion:true},"amenity/fuel/Chevron":{name:"Chevron",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q319642"},addTags:{amenity:"fuel",brand:"Chevron","brand:wikidata":"Q319642","brand:wikipedia":"en:Chevron Corporation",name:"Chevron"},removeTags:{amenity:"fuel",brand:"Chevron","brand:wikidata":"Q319642","brand:wikipedia":"en:Chevron Corporation",name:"Chevron"},matchScore:2,suggestion:true},"amenity/fuel/Circle K":{name:"Circle K",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q3268010"},addTags:{amenity:"fuel",brand:"Circle K","brand:wikidata":"Q3268010","brand:wikipedia":"en:Circle K",name:"Circle K"},removeTags:{amenity:"fuel",brand:"Circle K","brand:wikidata":"Q3268010","brand:wikipedia":"en:Circle K",name:"Circle K"},matchScore:2,suggestion:true},"amenity/fuel/Citgo":{name:"Citgo",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q2974437"},addTags:{amenity:"fuel",brand:"Citgo","brand:wikidata":"Q2974437","brand:wikipedia":"en:Citgo",name:"Citgo"},removeTags:{amenity:"fuel",brand:"Citgo","brand:wikidata":"Q2974437","brand:wikipedia":"en:Citgo",name:"Citgo"},matchScore:2,suggestion:true},"amenity/fuel/Clark":{name:"Clark",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q5127157"},addTags:{amenity:"fuel",brand:"Clark","brand:wikidata":"Q5127157","brand:wikipedia":"en:Clark Brands",name:"Clark"},removeTags:{amenity:"fuel",brand:"Clark","brand:wikidata":"Q5127157","brand:wikipedia":"en:Clark Brands",name:"Clark"},matchScore:2,suggestion:true},"amenity/fuel/Co-op":{name:"Co-op",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q5440676"},addTags:{amenity:"fuel",brand:"Federated Co-operatives","brand:wikidata":"Q5440676","brand:wikipedia":"en:Federated Co-operatives",name:"Co-op"},removeTags:{amenity:"fuel",brand:"Federated Co-operatives","brand:wikidata":"Q5440676","brand:wikipedia":"en:Federated Co-operatives",name:"Co-op"},matchScore:2,suggestion:true},"amenity/fuel/Coles Express":{name:"Coles Express",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q5144653"},addTags:{amenity:"fuel",brand:"Coles Express","brand:wikidata":"Q5144653","brand:wikipedia":"en:Coles Express",name:"Coles Express"},removeTags:{amenity:"fuel",brand:"Coles Express","brand:wikidata":"Q5144653","brand:wikipedia":"en:Coles Express",name:"Coles Express"},matchScore:2,suggestion:true},"amenity/fuel/Conoco":{name:"Conoco",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q1126518"},addTags:{amenity:"fuel",brand:"Conoco","brand:wikidata":"Q1126518","brand:wikipedia":"en:Conoco",name:"Conoco"},removeTags:{amenity:"fuel",brand:"Conoco","brand:wikidata":"Q1126518","brand:wikipedia":"en:Conoco",name:"Conoco"},matchScore:2,suggestion:true},"amenity/fuel/Copec":{name:"Copec",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q11681461"},addTags:{amenity:"fuel",brand:"Copec","brand:wikidata":"Q11681461","brand:wikipedia":"en:Empresas Copec",name:"Copec"},removeTags:{amenity:"fuel",brand:"Copec","brand:wikidata":"Q11681461","brand:wikipedia":"en:Empresas Copec",name:"Copec"},matchScore:2,suggestion:true},"amenity/fuel/Cosmo":{name:"Cosmo",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q2498318"},addTags:{amenity:"fuel",brand:"Cosmo","brand:wikidata":"Q2498318","brand:wikipedia":"en:Cosmo Oil Company",name:"Cosmo"},removeTags:{amenity:"fuel",brand:"Cosmo","brand:wikidata":"Q2498318","brand:wikipedia":"en:Cosmo Oil Company",name:"Cosmo"},matchScore:2,suggestion:true},"amenity/fuel/Costco Gasoline":{name:"Costco Gasoline",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q715583"},addTags:{amenity:"fuel",brand:"Costco Gasoline","brand:wikidata":"Q715583","brand:wikipedia":"en:Costco",name:"Costco Gasoline"},removeTags:{amenity:"fuel",brand:"Costco Gasoline","brand:wikidata":"Q715583","brand:wikipedia":"en:Costco",name:"Costco Gasoline"},matchScore:2,suggestion:true},"amenity/fuel/Couche-Tard":{name:"Couche-Tard",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q2836957"},addTags:{amenity:"fuel",brand:"Couche-Tard","brand:wikidata":"Q2836957","brand:wikipedia":"en:Alimentation Couche-Tard",name:"Couche-Tard"},removeTags:{amenity:"fuel",brand:"Couche-Tard","brand:wikidata":"Q2836957","brand:wikipedia":"en:Alimentation Couche-Tard",name:"Couche-Tard"},matchScore:2,suggestion:true},"amenity/fuel/Crevier":{name:"Crevier",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q61743451"},addTags:{amenity:"fuel",brand:"Crevier","brand:wikidata":"Q61743451",name:"Crevier"},removeTags:{amenity:"fuel",brand:"Crevier","brand:wikidata":"Q61743451",name:"Crevier"},matchScore:2,suggestion:true},"amenity/fuel/Cumberland Farms":{name:"Cumberland Farms",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q1143685"},addTags:{amenity:"fuel",brand:"Cumberland Farms","brand:wikidata":"Q1143685","brand:wikipedia":"en:Cumberland Farms",name:"Cumberland Farms"},removeTags:{amenity:"fuel",brand:"Cumberland Farms","brand:wikidata":"Q1143685","brand:wikipedia":"en:Cumberland Farms",name:"Cumberland Farms"},matchScore:2,suggestion:true},"amenity/fuel/Diamond Shamrock":{name:"Diamond Shamrock",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q16973722"},addTags:{amenity:"fuel",brand:"Diamond Shamrock","brand:wikidata":"Q16973722","brand:wikipedia":"en:Diamond Shamrock",name:"Diamond Shamrock"},removeTags:{amenity:"fuel",brand:"Diamond Shamrock","brand:wikidata":"Q16973722","brand:wikipedia":"en:Diamond Shamrock",name:"Diamond Shamrock"},matchScore:2,suggestion:true},"amenity/fuel/Domo":{name:"Domo",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q5291326"},addTags:{amenity:"fuel",brand:"Domo","brand:wikidata":"Q5291326","brand:wikipedia":"en:Domo Gasoline",name:"Domo"},removeTags:{amenity:"fuel",brand:"Domo","brand:wikidata":"Q5291326","brand:wikipedia":"en:Domo Gasoline",name:"Domo"},matchScore:2,suggestion:true},"amenity/fuel/EKO (Canada)":{name:"EKO (Canada)",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q3045934"},addTags:{amenity:"fuel",brand:"EKO","brand:wikidata":"Q3045934","brand:wikipedia":"fr:EKO",name:"EKO"},removeTags:{amenity:"fuel",brand:"EKO","brand:wikidata":"Q3045934","brand:wikipedia":"fr:EKO",name:"EKO"},matchScore:2,suggestion:true},"amenity/fuel/EKO (Greece)":{name:"EKO (Greece)",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q903198"},addTags:{amenity:"fuel",brand:"EKO","brand:wikidata":"Q903198","brand:wikipedia":"el:Ελληνικά Πετρέλαια",name:"EKO"},removeTags:{amenity:"fuel",brand:"EKO","brand:wikidata":"Q903198","brand:wikipedia":"el:Ελληνικά Πετρέλαια",name:"EKO"},matchScore:2,suggestion:true},"amenity/fuel/ENEOS":{name:"ENEOS",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q1640290"},addTags:{amenity:"fuel",brand:"ENEOS","brand:wikidata":"Q1640290","brand:wikipedia":"en:JXTG Nippon Oil & Energy",name:"ENEOS"},removeTags:{amenity:"fuel",brand:"ENEOS","brand:wikidata":"Q1640290","brand:wikipedia":"en:JXTG Nippon Oil & Energy",name:"ENEOS"},matchScore:2,suggestion:true},"amenity/fuel/Elan":{name:"Elan",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q57980752"},addTags:{amenity:"fuel",brand:"Elan","brand:wikidata":"Q57980752",name:"Elan"},removeTags:{amenity:"fuel",brand:"Elan","brand:wikidata":"Q57980752",name:"Elan"},matchScore:2,suggestion:true},"amenity/fuel/Engen":{name:"Engen",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q3054251"},addTags:{amenity:"fuel",brand:"Engen","brand:wikidata":"Q3054251","brand:wikipedia":"en:Engen Petroleum",name:"Engen"},removeTags:{amenity:"fuel",brand:"Engen","brand:wikidata":"Q3054251","brand:wikipedia":"en:Engen Petroleum",name:"Engen"},matchScore:2,suggestion:true},"amenity/fuel/Eni":{name:"Eni",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q565594"},addTags:{amenity:"fuel",brand:"Eni","brand:wikidata":"Q565594","brand:wikipedia":"en:Eni",name:"Eni"},removeTags:{amenity:"fuel",brand:"Eni","brand:wikidata":"Q565594","brand:wikipedia":"en:Eni",name:"Eni"},matchScore:2,suggestion:true},"amenity/fuel/Erg":{name:"Erg",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q739503"},addTags:{amenity:"fuel",brand:"Erg","brand:wikidata":"Q739503","brand:wikipedia":"it:ERG (azienda)",name:"Erg"},removeTags:{amenity:"fuel",brand:"Erg","brand:wikidata":"Q739503","brand:wikipedia":"it:ERG (azienda)",name:"Erg"},matchScore:2,suggestion:true},"amenity/fuel/Esso":{name:"Esso",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q867662"},addTags:{amenity:"fuel",brand:"Esso","brand:wikidata":"Q867662","brand:wikipedia":"en:Esso",name:"Esso"},removeTags:{amenity:"fuel",brand:"Esso","brand:wikidata":"Q867662","brand:wikipedia":"en:Esso",name:"Esso"},matchScore:2,suggestion:true},"amenity/fuel/Esso Express":{name:"Esso Express",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q2350336"},addTags:{amenity:"fuel",brand:"Esso Express","brand:wikidata":"Q2350336","brand:wikipedia":"nl:Esso Express",name:"Esso Express"},removeTags:{amenity:"fuel",brand:"Esso Express","brand:wikidata":"Q2350336","brand:wikipedia":"nl:Esso Express",name:"Esso Express"},matchScore:2,suggestion:true},"amenity/fuel/Exxon":{name:"Exxon",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q4781944"},addTags:{amenity:"fuel",brand:"Exxon","brand:wikidata":"Q4781944","brand:wikipedia":"en:Exxon",name:"Exxon"},removeTags:{amenity:"fuel",brand:"Exxon","brand:wikidata":"Q4781944","brand:wikipedia":"en:Exxon",name:"Exxon"},matchScore:2,suggestion:true},"amenity/fuel/Fas Gas":{name:"Fas Gas",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q61743505"},addTags:{amenity:"fuel",brand:"Fas Gas","brand:wikidata":"Q61743505","brand:wikipedia":"en:Parkland Fuel",name:"Fas Gas"},removeTags:{amenity:"fuel",brand:"Fas Gas","brand:wikidata":"Q61743505","brand:wikipedia":"en:Parkland Fuel",name:"Fas Gas"},matchScore:2,suggestion:true},"amenity/fuel/Firezone":{name:"Firezone",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q14628080"},addTags:{amenity:"fuel",brand:"Firezone","brand:wikidata":"Q14628080","brand:wikipedia":"nl:Firezone",name:"Firezone"},removeTags:{amenity:"fuel",brand:"Firezone","brand:wikidata":"Q14628080","brand:wikipedia":"nl:Firezone",name:"Firezone"},matchScore:2,suggestion:true},"amenity/fuel/Flying J":{name:"Flying J",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q1434601"},addTags:{amenity:"fuel",brand:"Flying J","brand:wikidata":"Q1434601","brand:wikipedia":"en:Pilot Flying J",name:"Flying J"},removeTags:{amenity:"fuel",brand:"Flying J","brand:wikidata":"Q1434601","brand:wikipedia":"en:Pilot Flying J",name:"Flying J"},matchScore:2,suggestion:true},"amenity/fuel/Freie Tankstelle":{name:"Freie Tankstelle",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q1009104"},addTags:{amenity:"fuel",brand:"Freie Tankstelle","brand:wikidata":"Q1009104","brand:wikipedia":"de:Bundesverband freier Tankstellen",name:"Freie Tankstelle"},removeTags:{amenity:"fuel",brand:"Freie Tankstelle","brand:wikidata":"Q1009104","brand:wikipedia":"de:Bundesverband freier Tankstellen",name:"Freie Tankstelle"},matchScore:2,suggestion:true},"amenity/fuel/GALP":{name:"GALP",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q1492739"},addTags:{amenity:"fuel",brand:"GALP","brand:wikidata":"Q1492739","brand:wikipedia":"en:Galp Energia",name:"GALP"},removeTags:{amenity:"fuel",brand:"GALP","brand:wikidata":"Q1492739","brand:wikipedia":"en:Galp Energia",name:"GALP"},matchScore:2,suggestion:true},"amenity/fuel/Gazprom":{name:"Gazprom",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q102673"},addTags:{amenity:"fuel",brand:"Gazprom","brand:wikidata":"Q102673","brand:wikipedia":"en:Gazprom",name:"Gazprom"},removeTags:{amenity:"fuel",brand:"Gazprom","brand:wikidata":"Q102673","brand:wikipedia":"en:Gazprom",name:"Gazprom"},matchScore:2,suggestion:true},"amenity/fuel/GetGo":{name:"GetGo",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q5553766"},addTags:{amenity:"fuel",brand:"GetGo","brand:wikidata":"Q5553766","brand:wikipedia":"en:GetGo",name:"GetGo"},removeTags:{amenity:"fuel",brand:"GetGo","brand:wikidata":"Q5553766","brand:wikipedia":"en:GetGo",name:"GetGo"},matchScore:2,suggestion:true},"amenity/fuel/Goil":{name:"Goil",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q5555383"},addTags:{amenity:"fuel",brand:"Goil","brand:wikidata":"Q5555383","brand:wikipedia":"en:Ghana Oil Company",name:"Goil"},removeTags:{amenity:"fuel",brand:"Goil","brand:wikidata":"Q5555383","brand:wikipedia":"en:Ghana Oil Company",name:"Goil"},matchScore:2,suggestion:true},"amenity/fuel/Gulf":{name:"Gulf",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q1296860"},addTags:{amenity:"fuel",brand:"Gulf","brand:wikidata":"Q1296860","brand:wikipedia":"en:Gulf Oil",name:"Gulf"},removeTags:{amenity:"fuel",brand:"Gulf","brand:wikidata":"Q1296860","brand:wikipedia":"en:Gulf Oil",name:"Gulf"},matchScore:2,suggestion:true},"amenity/fuel/Gull":{name:"Gull",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q5617739"},addTags:{amenity:"fuel",brand:"Gull","brand:wikidata":"Q5617739","brand:wikipedia":"en:Gull Petroleum",name:"Gull"},removeTags:{amenity:"fuel",brand:"Gull","brand:wikidata":"Q5617739","brand:wikipedia":"en:Gull Petroleum",name:"Gull"},matchScore:2,suggestion:true},"amenity/fuel/H-E-B Fuel":{name:"H-E-B Fuel",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q830621"},addTags:{amenity:"fuel",brand:"H-E-B Fuel","brand:wikidata":"Q830621","brand:wikipedia":"en:H-E-B",name:"H-E-B Fuel"},removeTags:{amenity:"fuel",brand:"H-E-B Fuel","brand:wikidata":"Q830621","brand:wikipedia":"en:H-E-B",name:"H-E-B Fuel"},matchScore:2,suggestion:true},"amenity/fuel/HEM":{name:"HEM",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q1563517"},addTags:{amenity:"fuel",brand:"HEM","brand:wikidata":"Q1563517","brand:wikipedia":"de:Deutsche Tamoil",name:"HEM"},removeTags:{amenity:"fuel",brand:"HEM","brand:wikidata":"Q1563517","brand:wikipedia":"de:Deutsche Tamoil",name:"HEM"},matchScore:2,suggestion:true},"amenity/fuel/Harnois":{name:"Harnois",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q61743558"},addTags:{amenity:"fuel",brand:"Harnois","brand:wikidata":"Q61743558",name:"Harnois"},removeTags:{amenity:"fuel",brand:"Harnois","brand:wikidata":"Q61743558",name:"Harnois"},matchScore:2,suggestion:true},"amenity/fuel/Hess":{name:"Hess",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q1615684"},addTags:{amenity:"fuel",brand:"Hess","brand:wikidata":"Q1615684","brand:wikipedia":"en:Hess Corporation",name:"Hess"},removeTags:{amenity:"fuel",brand:"Hess","brand:wikidata":"Q1615684","brand:wikipedia":"en:Hess Corporation",name:"Hess"},matchScore:2,suggestion:true},"amenity/fuel/Hindustan Petroleum":{name:"Hindustan Petroleum",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q1619375"},addTags:{amenity:"fuel",brand:"Hindustan Petroleum","brand:wikidata":"Q1619375","brand:wikipedia":"en:Hindustan Petroleum",name:"Hindustan Petroleum"},removeTags:{amenity:"fuel",brand:"Hindustan Petroleum","brand:wikidata":"Q1619375","brand:wikipedia":"en:Hindustan Petroleum",name:"Hindustan Petroleum"},matchScore:2,suggestion:true},"amenity/fuel/Hofer":{name:"Hofer",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q15815751"},addTags:{amenity:"fuel",brand:"Hofer","brand:wikidata":"Q15815751","brand:wikipedia":"de:Hofer KG",name:"Hofer"},removeTags:{amenity:"fuel",brand:"Hofer","brand:wikidata":"Q15815751","brand:wikipedia":"de:Hofer KG",name:"Hofer"},matchScore:2,suggestion:true},"amenity/fuel/Holiday":{name:"Holiday",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q5880490"},addTags:{amenity:"fuel",brand:"Holiday","brand:wikidata":"Q5880490","brand:wikipedia":"en:Holiday Stationstores",name:"Holiday"},removeTags:{amenity:"fuel",brand:"Holiday","brand:wikidata":"Q5880490","brand:wikipedia":"en:Holiday Stationstores",name:"Holiday"},matchScore:2,suggestion:true},"amenity/fuel/IP":{name:"IP",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q646807"},addTags:{amenity:"fuel",brand:"IP","brand:wikidata":"Q646807","brand:wikipedia":"en:Anonima Petroli Italiana",name:"IP"},removeTags:{amenity:"fuel",brand:"IP","brand:wikidata":"Q646807","brand:wikipedia":"en:Anonima Petroli Italiana",name:"IP"},matchScore:2,suggestion:true},"amenity/fuel/Indian Oil":{name:"Indian Oil",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q1289348"},addTags:{amenity:"fuel",brand:"Indian Oil","brand:wikidata":"Q1289348","brand:wikipedia":"en:Indian Oil Corporation",name:"Indian Oil"},removeTags:{amenity:"fuel",brand:"Indian Oil","brand:wikidata":"Q1289348","brand:wikipedia":"en:Indian Oil Corporation",name:"Indian Oil"},matchScore:2,suggestion:true},"amenity/fuel/Ingo":{name:"Ingo",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q17048617"},addTags:{amenity:"fuel",brand:"Ingo","brand:wikidata":"Q17048617","brand:wikipedia":"en:Ingo (brand)",name:"Ingo"},removeTags:{amenity:"fuel",brand:"Ingo","brand:wikidata":"Q17048617","brand:wikipedia":"en:Ingo (brand)",name:"Ingo"},matchScore:2,suggestion:true},"amenity/fuel/Intermarché":{name:"Intermarché",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q3153200"},addTags:{amenity:"fuel",brand:"Intermarché","brand:wikidata":"Q3153200","brand:wikipedia":"fr:Intermarché",name:"Intermarché"},removeTags:{amenity:"fuel",brand:"Intermarché","brand:wikidata":"Q3153200","brand:wikipedia":"fr:Intermarché",name:"Intermarché"},matchScore:2,suggestion:true},"amenity/fuel/Ipiranga":{name:"Ipiranga",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q2081136"},addTags:{amenity:"fuel",brand:"Ipiranga","brand:wikidata":"Q2081136","brand:wikipedia":"pt:Ipiranga (empresa)",name:"Ipiranga"},removeTags:{amenity:"fuel",brand:"Ipiranga","brand:wikidata":"Q2081136","brand:wikipedia":"pt:Ipiranga (empresa)",name:"Ipiranga"},matchScore:2,suggestion:true},"amenity/fuel/Irving":{name:"Irving",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q1673286"},addTags:{amenity:"fuel",brand:"Irving","brand:wikidata":"Q1673286","brand:wikipedia":"en:Irving Oil",name:"Irving"},removeTags:{amenity:"fuel",brand:"Irving","brand:wikidata":"Q1673286","brand:wikipedia":"en:Irving Oil",name:"Irving"},matchScore:2,suggestion:true},"amenity/fuel/JA-SS":{name:"JA-SS",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q11225213"},addTags:{amenity:"fuel",brand:"JA-SS","brand:wikidata":"Q11225213","brand:wikipedia":"ja:JA-SS",name:"JA-SS"},removeTags:{amenity:"fuel",brand:"JA-SS","brand:wikidata":"Q11225213","brand:wikipedia":"ja:JA-SS",name:"JA-SS"},matchScore:2,suggestion:true},"amenity/fuel/Jet":{name:"Jet",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q568940"},addTags:{amenity:"fuel",brand:"Jet","brand:wikidata":"Q568940","brand:wikipedia":"en:Jet (brand)",name:"Jet"},removeTags:{amenity:"fuel",brand:"Jet","brand:wikidata":"Q568940","brand:wikipedia":"en:Jet (brand)",name:"Jet"},matchScore:2,suggestion:true},"amenity/fuel/Kobil":{name:"Kobil",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q22906119"},addTags:{amenity:"fuel",brand:"Kobil","brand:wikidata":"Q22906119","brand:wikipedia":"en:KenolKobil",name:"Kobil"},removeTags:{amenity:"fuel",brand:"Kobil","brand:wikidata":"Q22906119","brand:wikipedia":"en:KenolKobil",name:"Kobil"},matchScore:2,suggestion:true},"amenity/fuel/Kroger":{name:"Kroger",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q153417"},addTags:{amenity:"fuel",brand:"Kroger","brand:wikidata":"Q153417","brand:wikipedia":"en:Kroger",name:"Kroger"},removeTags:{amenity:"fuel",brand:"Kroger","brand:wikidata":"Q153417","brand:wikipedia":"en:Kroger",name:"Kroger"},matchScore:2,suggestion:true},"amenity/fuel/Kum & Go":{name:"Kum & Go",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q6443340"},addTags:{amenity:"fuel",brand:"Kum & Go","brand:wikidata":"Q6443340","brand:wikipedia":"en:Kum & Go",name:"Kum & Go"},removeTags:{amenity:"fuel",brand:"Kum & Go","brand:wikidata":"Q6443340","brand:wikipedia":"en:Kum & Go",name:"Kum & Go"},matchScore:2,suggestion:true},"amenity/fuel/Kwik Trip":{name:"Kwik Trip",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q6450420"},addTags:{amenity:"fuel",brand:"Kwik Trip","brand:wikidata":"Q6450420","brand:wikipedia":"en:Kwik Trip",name:"Kwik Trip"},removeTags:{amenity:"fuel",brand:"Kwik Trip","brand:wikidata":"Q6450420","brand:wikipedia":"en:Kwik Trip",name:"Kwik Trip"},matchScore:2,suggestion:true},"amenity/fuel/Lotos":{name:"Lotos",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q1256909"},addTags:{amenity:"fuel",brand:"Lotos","brand:wikidata":"Q1256909","brand:wikipedia":"en:Grupa Lotos",name:"Lotos"},removeTags:{amenity:"fuel",brand:"Lotos","brand:wikidata":"Q1256909","brand:wikipedia":"en:Grupa Lotos",name:"Lotos"},matchScore:2,suggestion:true},"amenity/fuel/Love's":{name:"Love's",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q1872496"},addTags:{amenity:"fuel",brand:"Love's","brand:wikidata":"Q1872496","brand:wikipedia":"en:Love's Travel Stops & Country Stores",name:"Love's"},removeTags:{amenity:"fuel",brand:"Love's","brand:wikidata":"Q1872496","brand:wikipedia":"en:Love's Travel Stops & Country Stores",name:"Love's"},matchScore:2,suggestion:true},"amenity/fuel/Lukoil":{name:"Lukoil",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q329347"},addTags:{amenity:"fuel",brand:"Lukoil","brand:wikidata":"Q329347","brand:wikipedia":"en:Lukoil",name:"Lukoil"},removeTags:{amenity:"fuel",brand:"Lukoil","brand:wikidata":"Q329347","brand:wikipedia":"en:Lukoil",name:"Lukoil"},matchScore:2,suggestion:true},"amenity/fuel/MOL":{name:"MOL",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q549181"},addTags:{amenity:"fuel",brand:"MOL","brand:wikidata":"Q549181","brand:wikipedia":"en:MOL (company)",name:"MOL"},removeTags:{amenity:"fuel",brand:"MOL","brand:wikidata":"Q549181","brand:wikipedia":"en:MOL (company)",name:"MOL"},matchScore:2,suggestion:true},"amenity/fuel/MRS":{name:"MRS",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q56274919"},addTags:{amenity:"fuel",brand:"MRS","brand:wikidata":"Q56274919","brand:wikipedia":"en:MRS Oil Nigeria Plc",name:"MRS"},removeTags:{amenity:"fuel",brand:"MRS","brand:wikidata":"Q56274919","brand:wikipedia":"en:MRS Oil Nigeria Plc",name:"MRS"},matchScore:2,suggestion:true},"amenity/fuel/Mac's":{name:"Mac's",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q4043527"},addTags:{amenity:"fuel",brand:"Mac's","brand:wikidata":"Q4043527","brand:wikipedia":"en:Mac's Convenience Stores",name:"Mac's"},removeTags:{amenity:"fuel",brand:"Mac's","brand:wikidata":"Q4043527","brand:wikipedia":"en:Mac's Convenience Stores",name:"Mac's"},matchScore:2,suggestion:true},"amenity/fuel/MacEwen":{name:"MacEwen",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q61740335"},addTags:{amenity:"fuel",brand:"MacEwen","brand:wikidata":"Q61740335",name:"MacEwen"},removeTags:{amenity:"fuel",brand:"MacEwen","brand:wikidata":"Q61740335",name:"MacEwen"},matchScore:2,suggestion:true},"amenity/fuel/Marathon":{name:"Marathon",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q458363"},addTags:{amenity:"fuel",brand:"Marathon","brand:wikidata":"Q458363","brand:wikipedia":"en:Marathon Petroleum",name:"Marathon"},removeTags:{amenity:"fuel",brand:"Marathon","brand:wikidata":"Q458363","brand:wikipedia":"en:Marathon Petroleum",name:"Marathon"},matchScore:2,suggestion:true},"amenity/fuel/Maverik":{name:"Maverik",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q16974822"},addTags:{amenity:"fuel",brand:"Maverik","brand:wikidata":"Q16974822","brand:wikipedia":"en:FJ Management",name:"Maverik"},removeTags:{amenity:"fuel",brand:"Maverik","brand:wikidata":"Q16974822","brand:wikipedia":"en:FJ Management",name:"Maverik"},matchScore:2,suggestion:true},"amenity/fuel/Maxol":{name:"Maxol",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q3302837"},addTags:{amenity:"fuel",brand:"Maxol","brand:wikidata":"Q3302837","brand:wikipedia":"en:Maxol",name:"Maxol"},removeTags:{amenity:"fuel",brand:"Maxol","brand:wikidata":"Q3302837","brand:wikipedia":"en:Maxol",name:"Maxol"},matchScore:2,suggestion:true},"amenity/fuel/Migrol":{name:"Migrol",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q1747771"},addTags:{amenity:"fuel",brand:"Migrol","brand:wikidata":"Q1747771","brand:wikipedia":"de:Migrol",name:"Migrol"},removeTags:{amenity:"fuel",brand:"Migrol","brand:wikidata":"Q1747771","brand:wikipedia":"de:Migrol",name:"Migrol"},matchScore:2,suggestion:true},"amenity/fuel/Mobil":{name:"Mobil",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q3088656"},addTags:{amenity:"fuel",brand:"Mobil","brand:wikidata":"Q3088656","brand:wikipedia":"en:Mobil",name:"Mobil"},removeTags:{amenity:"fuel",brand:"Mobil","brand:wikidata":"Q3088656","brand:wikipedia":"en:Mobil",name:"Mobil"},matchScore:2,suggestion:true},"amenity/fuel/Morrisons":{name:"Morrisons",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q922344"},addTags:{amenity:"fuel",brand:"Morrisons","brand:wikidata":"Q922344","brand:wikipedia":"en:Morrisons",name:"Morrisons"},removeTags:{amenity:"fuel",brand:"Morrisons","brand:wikidata":"Q922344","brand:wikipedia":"en:Morrisons",name:"Morrisons"},matchScore:2,suggestion:true},"amenity/fuel/Murphy USA":{name:"Murphy USA",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q19604459"},addTags:{amenity:"fuel",brand:"Murphy USA","brand:wikidata":"Q19604459","brand:wikipedia":"en:Murphy USA",name:"Murphy USA"},removeTags:{amenity:"fuel",brand:"Murphy USA","brand:wikidata":"Q19604459","brand:wikipedia":"en:Murphy USA",name:"Murphy USA"},matchScore:2,suggestion:true},"amenity/fuel/NP":{name:"NP",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q7842382"},addTags:{amenity:"fuel",brand:"NP","brand:wikidata":"Q7842382","brand:wikipedia":"en:Trinidad & Tobago National Petroleum Marketing Company Limited",name:"NP"},removeTags:{amenity:"fuel",brand:"NP","brand:wikidata":"Q7842382","brand:wikipedia":"en:Trinidad & Tobago National Petroleum Marketing Company Limited",name:"NP"},matchScore:2,suggestion:true},"amenity/fuel/Neste":{name:"Neste",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q616376"},addTags:{amenity:"fuel",brand:"Neste","brand:wikidata":"Q616376","brand:wikipedia":"en:Neste",name:"Neste"},removeTags:{amenity:"fuel",brand:"Neste","brand:wikidata":"Q616376","brand:wikipedia":"en:Neste",name:"Neste"},matchScore:2,suggestion:true},"amenity/fuel/OIL!":{name:"OIL!",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q2007561"},addTags:{amenity:"fuel",brand:"OIL!","brand:wikidata":"Q2007561","brand:wikipedia":"de:OIL! Tankstellen",name:"OIL!"},removeTags:{amenity:"fuel",brand:"OIL!","brand:wikidata":"Q2007561","brand:wikipedia":"de:OIL! Tankstellen",name:"OIL!"},matchScore:2,suggestion:true},"amenity/fuel/OK":{name:"OK",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q12329785"},addTags:{amenity:"fuel",brand:"OK","brand:wikidata":"Q12329785","brand:wikipedia":"da:OK a.m.b.a.",name:"OK"},removeTags:{amenity:"fuel",brand:"OK","brand:wikidata":"Q12329785","brand:wikipedia":"da:OK a.m.b.a.",name:"OK"},matchScore:2,suggestion:true},"amenity/fuel/OKQ8":{name:"OKQ8",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q1634762"},addTags:{amenity:"fuel",brand:"OKQ8","brand:wikidata":"Q1634762","brand:wikipedia":"en:Kuwait Petroleum Corporation",name:"OKQ8"},removeTags:{amenity:"fuel",brand:"OKQ8","brand:wikidata":"Q1634762","brand:wikipedia":"en:Kuwait Petroleum Corporation",name:"OKQ8"},matchScore:2,suggestion:true},"amenity/fuel/OMV":{name:"OMV",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q168238"},addTags:{amenity:"fuel",brand:"OMV","brand:wikidata":"Q168238","brand:wikipedia":"en:OMV",name:"OMV"},removeTags:{amenity:"fuel",brand:"OMV","brand:wikidata":"Q168238","brand:wikipedia":"en:OMV",name:"OMV"},matchScore:2,suggestion:true},"amenity/fuel/Oilibya":{name:"Oilibya",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q7081491"},addTags:{amenity:"fuel",brand:"Oilibya","brand:wikidata":"Q7081491","brand:wikipedia":"en:Oilibya",name:"Oilibya","name:ar":"أويليبيا"},removeTags:{amenity:"fuel",brand:"Oilibya","brand:wikidata":"Q7081491","brand:wikipedia":"en:Oilibya",name:"Oilibya","name:ar":"أويليبيا"},matchScore:2,suggestion:true},"amenity/fuel/Opet":{name:"Opet",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q7072824"},addTags:{amenity:"fuel",brand:"Opet","brand:wikidata":"Q7072824","brand:wikipedia":"en:Opet",name:"Opet"},removeTags:{amenity:"fuel",brand:"Opet","brand:wikidata":"Q7072824","brand:wikipedia":"en:Opet",name:"Opet"},matchScore:2,suggestion:true},"amenity/fuel/Orlen":{name:"Orlen",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q971649"},addTags:{amenity:"fuel",brand:"Orlen","brand:wikidata":"Q971649","brand:wikipedia":"en:PKN Orlen",name:"Orlen"},removeTags:{amenity:"fuel",brand:"Orlen","brand:wikidata":"Q971649","brand:wikipedia":"en:PKN Orlen",name:"Orlen"},matchScore:2,suggestion:true},"amenity/fuel/Oxxo":{name:"Oxxo",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q1342538"},addTags:{brand:"Oxxo","brand:wikidata":"Q1342538","brand:wikipedia":"es:Oxxo",name:"Oxxo",amenity:"fuel"},removeTags:{brand:"Oxxo","brand:wikidata":"Q1342538","brand:wikipedia":"es:Oxxo",name:"Oxxo",amenity:"fuel"},matchScore:2,suggestion:true},"amenity/fuel/PSO":{name:"PSO",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q2741455"},addTags:{amenity:"fuel",brand:"PSO","brand:wikidata":"Q2741455","brand:wikipedia":"en:Pakistan State Oil",name:"PSO"},removeTags:{amenity:"fuel",brand:"PSO","brand:wikidata":"Q2741455","brand:wikipedia":"en:Pakistan State Oil",name:"PSO"},matchScore:2,suggestion:true},"amenity/fuel/PTT":{name:"PTT",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q1810389"},addTags:{amenity:"fuel",brand:"PTT","brand:wikidata":"Q1810389","brand:wikipedia":"en:PTT Public Company Limited",name:"PTT"},removeTags:{amenity:"fuel",brand:"PTT","brand:wikidata":"Q1810389","brand:wikipedia":"en:PTT Public Company Limited",name:"PTT"},matchScore:2,suggestion:true},"amenity/fuel/PV Oil":{name:"PV Oil",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q2089536"},addTags:{amenity:"fuel",brand:"PV Oil","brand:wikidata":"Q2089536","brand:wikipedia":"en:Petrovietnam",name:"PV Oil"},removeTags:{amenity:"fuel",brand:"PV Oil","brand:wikidata":"Q2089536","brand:wikipedia":"en:Petrovietnam",name:"PV Oil"},matchScore:2,suggestion:true},"amenity/fuel/Pacific Pride":{name:"Pacific Pride",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q7122637"},addTags:{amenity:"fuel",brand:"Pacific Pride","brand:wikidata":"Q7122637","brand:wikipedia":"en:Pacific Pride",name:"Pacific Pride"},removeTags:{amenity:"fuel",brand:"Pacific Pride","brand:wikidata":"Q7122637","brand:wikipedia":"en:Pacific Pride",name:"Pacific Pride"},matchScore:2,suggestion:true},"amenity/fuel/Pemex":{name:"Pemex",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q871308"},addTags:{amenity:"fuel",brand:"Pemex","brand:wikidata":"Q871308","brand:wikipedia":"en:Pemex",name:"Pemex"},removeTags:{amenity:"fuel",brand:"Pemex","brand:wikidata":"Q871308","brand:wikipedia":"en:Pemex",name:"Pemex"},matchScore:2,suggestion:true},"amenity/fuel/Pertamina":{name:"Pertamina",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q1641044"},addTags:{amenity:"fuel",brand:"Pertamina","brand:wikidata":"Q1641044","brand:wikipedia":"en:Pertamina",name:"Pertamina"},removeTags:{amenity:"fuel",brand:"Pertamina","brand:wikidata":"Q1641044","brand:wikipedia":"en:Pertamina",name:"Pertamina"},matchScore:2,suggestion:true},"amenity/fuel/Petro-Canada":{name:"Petro-Canada",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q1208279"},addTags:{amenity:"fuel",brand:"Petro-Canada","brand:wikidata":"Q1208279","brand:wikipedia":"en:Petro-Canada",name:"Petro-Canada"},removeTags:{amenity:"fuel",brand:"Petro-Canada","brand:wikidata":"Q1208279","brand:wikipedia":"en:Petro-Canada",name:"Petro-Canada"},matchScore:2,suggestion:true},"amenity/fuel/Petro-T":{name:"Petro-T",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q61743540"},addTags:{amenity:"fuel",brand:"Petro-T","brand:wikidata":"Q61743540",name:"Petro-T"},removeTags:{amenity:"fuel",brand:"Petro-T","brand:wikidata":"Q61743540",name:"Petro-T"},matchScore:2,suggestion:true},"amenity/fuel/PetroPerú":{name:"PetroPerú",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q2506390"},addTags:{amenity:"fuel",brand:"PetroPerú","brand:wikidata":"Q2506390","brand:wikipedia":"es:Petroperú",name:"PetroPerú"},removeTags:{amenity:"fuel",brand:"PetroPerú","brand:wikidata":"Q2506390","brand:wikipedia":"es:Petroperú",name:"PetroPerú"},matchScore:2,suggestion:true},"amenity/fuel/Petrochina":{name:"Petrochina",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q503182"},addTags:{amenity:"fuel",brand:"Petrochina","brand:wikidata":"Q503182","brand:wikipedia":"en:PetroChina",name:"Petrochina"},removeTags:{amenity:"fuel",brand:"Petrochina","brand:wikidata":"Q503182","brand:wikipedia":"en:PetroChina",name:"Petrochina"},matchScore:2,suggestion:true},"amenity/fuel/Petroecuador":{name:"Petroecuador",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q1812822"},addTags:{amenity:"fuel",brand:"Petroecuador","brand:wikidata":"Q1812822","brand:wikipedia":"en:Petroecuador",name:"Petroecuador"},removeTags:{amenity:"fuel",brand:"Petroecuador","brand:wikidata":"Q1812822","brand:wikipedia":"en:Petroecuador",name:"Petroecuador"},matchScore:2,suggestion:true},"amenity/fuel/Petrol Ofisi":{name:"Petrol Ofisi",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q1278087"},addTags:{amenity:"fuel",brand:"Petrol Ofisi","brand:wikidata":"Q1278087","brand:wikipedia":"en:Petrol Ofisi",name:"Petrol Ofisi"},removeTags:{amenity:"fuel",brand:"Petrol Ofisi","brand:wikidata":"Q1278087","brand:wikipedia":"en:Petrol Ofisi",name:"Petrol Ofisi"},matchScore:2,suggestion:true},"amenity/fuel/Petrolimex":{name:"Petrolimex",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q10831598"},addTags:{amenity:"fuel",brand:"Petrolimex","brand:wikidata":"Q10831598","brand:wikipedia":"en:Petrolimex",name:"Petrolimex"},removeTags:{amenity:"fuel",brand:"Petrolimex","brand:wikidata":"Q10831598","brand:wikipedia":"en:Petrolimex",name:"Petrolimex"},matchScore:2,suggestion:true},"amenity/fuel/Petrolina":{name:"Petrolina",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q17013948"},addTags:{amenity:"fuel",brand:"Petrolina","brand:wikidata":"Q17013948","brand:wikipedia":"en:Petrolina (company)",name:"Petrolina"},removeTags:{amenity:"fuel",brand:"Petrolina","brand:wikidata":"Q17013948","brand:wikipedia":"en:Petrolina (company)",name:"Petrolina"},matchScore:2,suggestion:true},"amenity/fuel/Petrom":{name:"Petrom",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q1755034"},addTags:{amenity:"fuel",brand:"Petrom","brand:wikidata":"Q1755034","brand:wikipedia":"en:Petrom",name:"Petrom"},removeTags:{amenity:"fuel",brand:"Petrom","brand:wikidata":"Q1755034","brand:wikipedia":"en:Petrom",name:"Petrom"},matchScore:2,suggestion:true},"amenity/fuel/Petron":{name:"Petron",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q7179011"},addTags:{amenity:"fuel",brand:"Petron","brand:wikidata":"Q7179011","brand:wikipedia":"en:Petron Corporation",name:"Petron"},removeTags:{amenity:"fuel",brand:"Petron","brand:wikidata":"Q7179011","brand:wikipedia":"en:Petron Corporation",name:"Petron"},matchScore:2,suggestion:true},"amenity/fuel/Petronas":{name:"Petronas",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q221692"},addTags:{amenity:"fuel",brand:"Petronas","brand:wikidata":"Q221692","brand:wikipedia":"en:Petronas",name:"Petronas"},removeTags:{amenity:"fuel",brand:"Petronas","brand:wikidata":"Q221692","brand:wikipedia":"en:Petronas",name:"Petronas"},matchScore:2,suggestion:true},"amenity/fuel/Petronor":{name:"Petronor",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q1726547"},addTags:{amenity:"fuel",brand:"Petronor","brand:wikidata":"Q1726547","brand:wikipedia":"es:Petronor",name:"Petronor"},removeTags:{amenity:"fuel",brand:"Petronor","brand:wikidata":"Q1726547","brand:wikipedia":"es:Petronor",name:"Petronor"},matchScore:2,suggestion:true},"amenity/fuel/Phillips 66":{name:"Phillips 66",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q1656230"},addTags:{amenity:"fuel",brand:"Phillips 66","brand:wikidata":"Q1656230","brand:wikipedia":"en:Phillips 66",name:"Phillips 66"},removeTags:{amenity:"fuel",brand:"Phillips 66","brand:wikidata":"Q1656230","brand:wikipedia":"en:Phillips 66",name:"Phillips 66"},matchScore:2,suggestion:true},"amenity/fuel/Phoenix":{name:"Phoenix",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q7186949"},addTags:{amenity:"fuel",brand:"Phoenix","brand:wikidata":"Q7186949","brand:wikipedia":"en:Phoenix Petroleum",name:"Phoenix"},removeTags:{amenity:"fuel",brand:"Phoenix","brand:wikidata":"Q7186949","brand:wikipedia":"en:Phoenix Petroleum",name:"Phoenix"},matchScore:2,suggestion:true},"amenity/fuel/Pioneer":{name:"Pioneer",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q7196684"},addTags:{amenity:"fuel",brand:"Pioneer","brand:wikidata":"Q7196684","brand:wikipedia":"en:Pioneer Energy",name:"Pioneer"},removeTags:{amenity:"fuel",brand:"Pioneer","brand:wikidata":"Q7196684","brand:wikipedia":"en:Pioneer Energy",name:"Pioneer"},matchScore:2,suggestion:true},"amenity/fuel/Preem":{name:"Preem",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q598835"},addTags:{amenity:"fuel",brand:"Preem","brand:wikidata":"Q598835","brand:wikipedia":"en:Preem",name:"Preem"},removeTags:{amenity:"fuel",brand:"Preem","brand:wikidata":"Q598835","brand:wikipedia":"en:Preem",name:"Preem"},matchScore:2,suggestion:true},"amenity/fuel/Puma":{name:"Puma",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q7259769"},addTags:{amenity:"fuel",brand:"Puma","brand:wikidata":"Q7259769","brand:wikipedia":"en:Puma Energy",name:"Puma"},removeTags:{amenity:"fuel",brand:"Puma","brand:wikidata":"Q7259769","brand:wikipedia":"en:Puma Energy",name:"Puma"},matchScore:2,suggestion:true},"amenity/fuel/Q8":{name:"Q8",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q1634762"},addTags:{amenity:"fuel",brand:"Q8","brand:wikidata":"Q1634762","brand:wikipedia":"en:Kuwait Petroleum Corporation",name:"Q8"},removeTags:{amenity:"fuel",brand:"Q8","brand:wikidata":"Q1634762","brand:wikipedia":"en:Kuwait Petroleum Corporation",name:"Q8"},matchScore:2,suggestion:true},"amenity/fuel/Q8 Easy":{name:"Q8 Easy",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q1806948"},addTags:{amenity:"fuel",brand:"Q8 Easy","brand:wikidata":"Q1806948","brand:wikipedia":"nl:Q8 Easy",name:"Q8 Easy"},removeTags:{amenity:"fuel",brand:"Q8 Easy","brand:wikidata":"Q1806948","brand:wikipedia":"nl:Q8 Easy",name:"Q8 Easy"},matchScore:2,suggestion:true},"amenity/fuel/QT":{name:"QT",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q7271953"},addTags:{amenity:"fuel",brand:"QT","brand:wikidata":"Q7271953","brand:wikipedia":"en:QuikTrip",name:"QT"},removeTags:{amenity:"fuel",brand:"QT","brand:wikidata":"Q7271953","brand:wikipedia":"en:QuikTrip",name:"QT"},matchScore:2,suggestion:true},"amenity/fuel/Qstar":{name:"Qstar",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q10647961"},addTags:{amenity:"fuel",brand:"Qstar","brand:wikidata":"Q10647961","brand:wikipedia":"sv:Qstar",name:"Qstar"},removeTags:{amenity:"fuel",brand:"Qstar","brand:wikidata":"Q10647961","brand:wikipedia":"sv:Qstar",name:"Qstar"},matchScore:2,suggestion:true},"amenity/fuel/QuikTrip":{name:"QuikTrip",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q7271953"},addTags:{amenity:"fuel",brand:"QuikTrip","brand:wikidata":"Q7271953","brand:wikipedia":"en:QuikTrip",name:"QuikTrip"},removeTags:{amenity:"fuel",brand:"QuikTrip","brand:wikidata":"Q7271953","brand:wikipedia":"en:QuikTrip",name:"QuikTrip"},matchScore:2,suggestion:true},"amenity/fuel/Race Trac":{name:"Race Trac",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q735942"},addTags:{amenity:"fuel",brand:"Race Trac","brand:wikidata":"Q735942","brand:wikipedia":"en:RaceTrac",name:"Race Trac"},removeTags:{amenity:"fuel",brand:"Race Trac","brand:wikidata":"Q735942","brand:wikipedia":"en:RaceTrac",name:"Race Trac"},matchScore:2,suggestion:true},"amenity/fuel/Repsol":{name:"Repsol",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q174747"},addTags:{amenity:"fuel",brand:"Repsol","brand:wikidata":"Q174747","brand:wikipedia":"es:Repsol",name:"Repsol"},removeTags:{amenity:"fuel",brand:"Repsol","brand:wikidata":"Q174747","brand:wikipedia":"es:Repsol",name:"Repsol"},matchScore:2,suggestion:true},"amenity/fuel/Rompetrol":{name:"Rompetrol",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q1788862"},addTags:{amenity:"fuel",brand:"Rompetrol","brand:wikidata":"Q1788862","brand:wikipedia":"en:Rompetrol",name:"Rompetrol"},removeTags:{amenity:"fuel",brand:"Rompetrol","brand:wikidata":"Q1788862","brand:wikipedia":"en:Rompetrol",name:"Rompetrol"},matchScore:2,suggestion:true},"amenity/fuel/Royal Farms":{name:"Royal Farms",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q7374169"},addTags:{amenity:"fuel",brand:"Royal Farms","brand:wikidata":"Q7374169","brand:wikipedia":"en:Royal Farms",name:"Royal Farms"},removeTags:{amenity:"fuel",brand:"Royal Farms","brand:wikidata":"Q7374169","brand:wikipedia":"en:Royal Farms",name:"Royal Farms"},matchScore:2,suggestion:true},"amenity/fuel/Rubis":{name:"Rubis",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q3446514"},addTags:{amenity:"fuel",brand:"Rubis","brand:wikidata":"Q3446514","brand:wikipedia":"en:Rubis (company)",name:"Rubis"},removeTags:{amenity:"fuel",brand:"Rubis","brand:wikidata":"Q3446514","brand:wikipedia":"en:Rubis (company)",name:"Rubis"},matchScore:2,suggestion:true},"amenity/fuel/Safeway":{name:"Safeway",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q1508234"},addTags:{amenity:"fuel",brand:"Safeway","brand:wikidata":"Q1508234","brand:wikipedia":"en:Safeway Inc.",name:"Safeway"},removeTags:{amenity:"fuel",brand:"Safeway","brand:wikidata":"Q1508234","brand:wikipedia":"en:Safeway Inc.",name:"Safeway"},matchScore:2,suggestion:true},"amenity/fuel/Sainsbury's":{name:"Sainsbury's",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q152096"},addTags:{amenity:"fuel",brand:"Sainsbury's","brand:wikidata":"Q152096","brand:wikipedia":"en:Sainsbury's",name:"Sainsbury's"},removeTags:{amenity:"fuel",brand:"Sainsbury's","brand:wikidata":"Q152096","brand:wikipedia":"en:Sainsbury's",name:"Sainsbury's"},matchScore:2,suggestion:true},"amenity/fuel/Sam's Club":{name:"Sam's Club",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q1972120"},addTags:{amenity:"fuel",brand:"Sam's Club","brand:wikidata":"Q1972120","brand:wikipedia":"en:Sam's Club",name:"Sam's Club",operator:"Walmart","operator:wikidata":"Q483551","operator:wikipedia":"en:Walmart"},removeTags:{amenity:"fuel",brand:"Sam's Club","brand:wikidata":"Q1972120","brand:wikipedia":"en:Sam's Club",name:"Sam's Club",operator:"Walmart","operator:wikidata":"Q483551","operator:wikipedia":"en:Walmart"},matchScore:2,suggestion:true},"amenity/fuel/Sasol":{name:"Sasol",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q905998"},addTags:{amenity:"fuel",brand:"Sasol","brand:wikidata":"Q905998","brand:wikipedia":"en:Sasol",name:"Sasol"},removeTags:{amenity:"fuel",brand:"Sasol","brand:wikidata":"Q905998","brand:wikipedia":"en:Sasol",name:"Sasol"},matchScore:2,suggestion:true},"amenity/fuel/Sea Oil":{name:"Sea Oil",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q7389549"},addTags:{amenity:"fuel",brand:"Sea Oil","brand:wikidata":"Q7389549","brand:wikipedia":"en:Seaoil Philippines",name:"Sea Oil"},removeTags:{amenity:"fuel",brand:"Sea Oil","brand:wikidata":"Q7389549","brand:wikipedia":"en:Seaoil Philippines",name:"Sea Oil"},matchScore:2,suggestion:true},"amenity/fuel/Sheetz":{name:"Sheetz",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q7492551"},addTags:{amenity:"fuel",brand:"Sheetz","brand:wikidata":"Q7492551","brand:wikipedia":"en:Sheetz",name:"Sheetz"},removeTags:{amenity:"fuel",brand:"Sheetz","brand:wikidata":"Q7492551","brand:wikipedia":"en:Sheetz",name:"Sheetz"},matchScore:2,suggestion:true},"amenity/fuel/Shell":{name:"Shell",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q154950"},addTags:{amenity:"fuel",brand:"Shell","brand:wikidata":"Q154950","brand:wikipedia":"en:Royal Dutch Shell",name:"Shell"},removeTags:{amenity:"fuel",brand:"Shell","brand:wikidata":"Q154950","brand:wikipedia":"en:Royal Dutch Shell",name:"Shell"},matchScore:2,suggestion:true},"amenity/fuel/Shell Express":{name:"Shell Express",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q2289188"},addTags:{amenity:"fuel",brand:"Shell Express","brand:wikidata":"Q2289188","brand:wikipedia":"nl:Shell Express",name:"Shell Express"},removeTags:{amenity:"fuel",brand:"Shell Express","brand:wikidata":"Q2289188","brand:wikipedia":"nl:Shell Express",name:"Shell Express"},matchScore:2,suggestion:true},"amenity/fuel/Sinclair":{name:"Sinclair",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q1290900"},addTags:{amenity:"fuel",brand:"Sinclair","brand:wikidata":"Q1290900","brand:wikipedia":"en:Sinclair Oil Corporation",name:"Sinclair"},removeTags:{amenity:"fuel",brand:"Sinclair","brand:wikidata":"Q1290900","brand:wikipedia":"en:Sinclair Oil Corporation",name:"Sinclair"},matchScore:2,suggestion:true},"amenity/fuel/Sinopec":{name:"Sinopec",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q831445"},addTags:{amenity:"fuel",brand:"Sinopec","brand:wikidata":"Q831445","brand:wikipedia":"en:Sinopec",name:"Sinopec"},removeTags:{amenity:"fuel",brand:"Sinopec","brand:wikidata":"Q831445","brand:wikipedia":"en:Sinopec",name:"Sinopec"},matchScore:2,suggestion:true},"amenity/fuel/Slovnaft":{name:"Slovnaft",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q1587563"},addTags:{amenity:"fuel",brand:"Slovnaft","brand:wikidata":"Q1587563","brand:wikipedia":"en:Slovnaft",name:"Slovnaft"},removeTags:{amenity:"fuel",brand:"Slovnaft","brand:wikidata":"Q1587563","brand:wikipedia":"en:Slovnaft",name:"Slovnaft"},matchScore:2,suggestion:true},"amenity/fuel/Socar":{name:"Socar",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q1622293"},addTags:{amenity:"fuel",brand:"Socar","brand:wikidata":"Q1622293","brand:wikipedia":"en:SOCAR",name:"Socar"},removeTags:{amenity:"fuel",brand:"Socar","brand:wikidata":"Q1622293","brand:wikipedia":"en:SOCAR",name:"Socar"},matchScore:2,suggestion:true},"amenity/fuel/Sokimex":{name:"Sokimex",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q1149575"},addTags:{amenity:"fuel",brand:"Sokimex","brand:wikidata":"Q1149575","brand:wikipedia":"en:Sokimex",name:"Sokimex"},removeTags:{amenity:"fuel",brand:"Sokimex","brand:wikidata":"Q1149575","brand:wikipedia":"en:Sokimex",name:"Sokimex"},matchScore:2,suggestion:true},"amenity/fuel/Speedway":{name:"Speedway",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q7575683"},addTags:{amenity:"fuel",brand:"Speedway","brand:wikidata":"Q7575683","brand:wikipedia":"en:Speedway LLC",name:"Speedway"},removeTags:{amenity:"fuel",brand:"Speedway","brand:wikidata":"Q7575683","brand:wikipedia":"en:Speedway LLC",name:"Speedway"},matchScore:2,suggestion:true},"amenity/fuel/Sprint":{name:"Sprint",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q57588452"},addTags:{amenity:"fuel",brand:"Sprint","brand:wikidata":"Q57588452",name:"Sprint"},removeTags:{amenity:"fuel",brand:"Sprint","brand:wikidata":"Q57588452",name:"Sprint"},matchScore:2,suggestion:true},"amenity/fuel/St1":{name:"St1",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q7592214"},addTags:{amenity:"fuel",brand:"St1","brand:wikidata":"Q7592214","brand:wikipedia":"en:St1",name:"St1"},removeTags:{amenity:"fuel",brand:"St1","brand:wikidata":"Q7592214","brand:wikipedia":"en:St1",name:"St1"},matchScore:2,suggestion:true},"amenity/fuel/Star":{name:"Star",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q2031095"},addTags:{amenity:"fuel",brand:"Star","brand:wikidata":"Q2031095","brand:wikipedia":"de:Orlen Deutschland",name:"Star"},removeTags:{amenity:"fuel",brand:"Star","brand:wikidata":"Q2031095","brand:wikipedia":"de:Orlen Deutschland",name:"Star"},matchScore:2,suggestion:true},"amenity/fuel/Statoil":{name:"Statoil",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q1776022"},addTags:{amenity:"fuel",brand:"Statoil","brand:wikidata":"Q1776022","brand:wikipedia":"en:Equinor",name:"Statoil"},removeTags:{amenity:"fuel",brand:"Statoil","brand:wikidata":"Q1776022","brand:wikipedia":"en:Equinor",name:"Statoil"},matchScore:2,suggestion:true},"amenity/fuel/Stewart's":{name:"Stewart's",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q7615690"},addTags:{amenity:"fuel",brand:"Stewart's","brand:wikidata":"Q7615690","brand:wikipedia":"en:Stewart's Shops",name:"Stewart's"},removeTags:{amenity:"fuel",brand:"Stewart's","brand:wikidata":"Q7615690","brand:wikipedia":"en:Stewart's Shops",name:"Stewart's"},matchScore:2,suggestion:true},"amenity/fuel/Sunoco":{name:"Sunoco",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q1423218"},addTags:{amenity:"fuel",brand:"Sunoco","brand:wikidata":"Q1423218","brand:wikipedia":"en:Sunoco",name:"Sunoco"},removeTags:{amenity:"fuel",brand:"Sunoco","brand:wikidata":"Q1423218","brand:wikipedia":"en:Sunoco",name:"Sunoco"},matchScore:2,suggestion:true},"amenity/fuel/Super U":{name:"Super U",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q2529029"},addTags:{amenity:"fuel",brand:"Super U","brand:wikidata":"Q2529029","brand:wikipedia":"en:Système U",name:"Super U"},removeTags:{amenity:"fuel",brand:"Super U","brand:wikidata":"Q2529029","brand:wikipedia":"en:Système U",name:"Super U"},matchScore:2,suggestion:true},"amenity/fuel/Tamoil":{name:"Tamoil",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q706793"},addTags:{amenity:"fuel",brand:"Tamoil","brand:wikidata":"Q706793","brand:wikipedia":"en:Tamoil",name:"Tamoil"},removeTags:{amenity:"fuel",brand:"Tamoil","brand:wikidata":"Q706793","brand:wikipedia":"en:Tamoil",name:"Tamoil"},matchScore:2,suggestion:true},"amenity/fuel/Tango":{name:"Tango",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q2423920"},addTags:{amenity:"fuel",brand:"Tango","brand:wikidata":"Q2423920","brand:wikipedia":"nl:Tango CV",name:"Tango"},removeTags:{amenity:"fuel",brand:"Tango","brand:wikidata":"Q2423920","brand:wikipedia":"nl:Tango CV",name:"Tango"},matchScore:2,suggestion:true},"amenity/fuel/Tanka":{name:"Tanka",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q10690640"},addTags:{amenity:"fuel",brand:"Tanka","brand:wikidata":"Q10690640","brand:wikipedia":"sv:Tanka (bensinstationskedja)",name:"Tanka"},removeTags:{amenity:"fuel",brand:"Tanka","brand:wikidata":"Q10690640","brand:wikipedia":"sv:Tanka (bensinstationskedja)",name:"Tanka"},matchScore:2,suggestion:true},"amenity/fuel/Teboil":{name:"Teboil",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q7692079"},addTags:{amenity:"fuel",brand:"Teboil","brand:wikidata":"Q7692079","brand:wikipedia":"en:Teboil",name:"Teboil"},removeTags:{amenity:"fuel",brand:"Teboil","brand:wikidata":"Q7692079","brand:wikipedia":"en:Teboil",name:"Teboil"},matchScore:2,suggestion:true},"amenity/fuel/Terpel":{name:"Terpel",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q7703003"},addTags:{amenity:"fuel",brand:"Terpel","brand:wikidata":"Q7703003","brand:wikipedia":"en:Terpel",name:"Terpel"},removeTags:{amenity:"fuel",brand:"Terpel","brand:wikidata":"Q7703003","brand:wikipedia":"en:Terpel",name:"Terpel"},matchScore:2,suggestion:true},"amenity/fuel/Tesco":{name:"Tesco",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q17145596"},addTags:{amenity:"fuel",brand:"Tesco","brand:wikidata":"Q17145596","brand:wikipedia":"en:Tesco Corporation",name:"Tesco"},removeTags:{amenity:"fuel",brand:"Tesco","brand:wikidata":"Q17145596","brand:wikipedia":"en:Tesco Corporation",name:"Tesco"},matchScore:2,suggestion:true},"amenity/fuel/Texaco":{name:"Texaco",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q775060"},addTags:{amenity:"fuel",brand:"Texaco","brand:wikidata":"Q775060","brand:wikipedia":"en:Texaco",name:"Texaco"},removeTags:{amenity:"fuel",brand:"Texaco","brand:wikidata":"Q775060","brand:wikipedia":"en:Texaco",name:"Texaco"},matchScore:2,suggestion:true},"amenity/fuel/Tinq":{name:"Tinq",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q2132028"},addTags:{amenity:"fuel",brand:"Tinq","brand:wikidata":"Q2132028","brand:wikipedia":"nl:Tinq",name:"Tinq"},removeTags:{amenity:"fuel",brand:"Tinq","brand:wikidata":"Q2132028","brand:wikipedia":"nl:Tinq",name:"Tinq"},matchScore:2,suggestion:true},"amenity/fuel/Topaz":{name:"Topaz",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q7824764"},addTags:{amenity:"fuel",brand:"Topaz","brand:wikidata":"Q7824764","brand:wikipedia":"en:Topaz Energy",name:"Topaz"},removeTags:{amenity:"fuel",brand:"Topaz","brand:wikidata":"Q7824764","brand:wikipedia":"en:Topaz Energy",name:"Topaz"},matchScore:2,suggestion:true},"amenity/fuel/Total":{name:"Total",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q154037"},addTags:{amenity:"fuel",brand:"Total","brand:wikidata":"Q154037","brand:wikipedia":"fr:Total (entreprise)",name:"Total"},removeTags:{amenity:"fuel",brand:"Total","brand:wikidata":"Q154037","brand:wikipedia":"fr:Total (entreprise)",name:"Total"},matchScore:2,suggestion:true},"amenity/fuel/TotalErg":{name:"TotalErg",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q3995933"},addTags:{amenity:"fuel",brand:"TotalErg","brand:wikidata":"Q3995933","brand:wikipedia":"it:TotalErg",name:"TotalErg"},removeTags:{amenity:"fuel",brand:"TotalErg","brand:wikidata":"Q3995933","brand:wikipedia":"it:TotalErg",name:"TotalErg"},matchScore:2,suggestion:true},"amenity/fuel/Turkey Hill":{name:"Turkey Hill",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q42376970"},addTags:{amenity:"fuel",brand:"Turkey Hill","brand:wikidata":"Q42376970","brand:wikipedia":"en:Turkey Hill Minit Markets",name:"Turkey Hill"},removeTags:{amenity:"fuel",brand:"Turkey Hill","brand:wikidata":"Q42376970","brand:wikipedia":"en:Turkey Hill Minit Markets",name:"Turkey Hill"},matchScore:2,suggestion:true},"amenity/fuel/Turmöl":{name:"Turmöl",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q1473279"},addTags:{amenity:"fuel",brand:"Turmöl","brand:wikidata":"Q1473279","brand:wikipedia":"de:Turmöl",name:"Turmöl"},removeTags:{amenity:"fuel",brand:"Turmöl","brand:wikidata":"Q1473279","brand:wikipedia":"de:Turmöl",name:"Turmöl"},matchScore:2,suggestion:true},"amenity/fuel/UDF Fuel":{name:"UDF Fuel",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q7887677"},addTags:{amenity:"fuel",brand:"United Dairy Farmers","brand:wikidata":"Q7887677","brand:wikipedia":"en:United Dairy Farmers",name:"UDF Fuel",short_name:"UDF"},removeTags:{amenity:"fuel",brand:"United Dairy Farmers","brand:wikidata":"Q7887677","brand:wikipedia":"en:United Dairy Farmers",name:"UDF Fuel",short_name:"UDF"},matchScore:2,suggestion:true},"amenity/fuel/Ultramar":{name:"Ultramar",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q3548078"},addTags:{amenity:"fuel",brand:"Ultramar","brand:wikidata":"Q3548078","brand:wikipedia":"en:Ultramar",name:"Ultramar"},removeTags:{amenity:"fuel",brand:"Ultramar","brand:wikidata":"Q3548078","brand:wikipedia":"en:Ultramar",name:"Ultramar"},matchScore:2,suggestion:true},"amenity/fuel/United":{name:"United",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q28224393"},addTags:{amenity:"fuel",brand:"United","brand:wikidata":"Q28224393","brand:wikipedia":"en:United Petroleum",name:"United"},removeTags:{amenity:"fuel",brand:"United","brand:wikidata":"Q28224393","brand:wikipedia":"en:United Petroleum",name:"United"},matchScore:2,suggestion:true},"amenity/fuel/Uno-X":{name:"Uno-X",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q3362746"},addTags:{amenity:"fuel",brand:"Uno-X","brand:wikidata":"Q3362746","brand:wikipedia":"en:Uno-X",name:"Uno-X"},removeTags:{amenity:"fuel",brand:"Uno-X","brand:wikidata":"Q3362746","brand:wikipedia":"en:Uno-X",name:"Uno-X"},matchScore:2,suggestion:true},"amenity/fuel/Valero":{name:"Valero",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q1283291"},addTags:{amenity:"fuel",brand:"Valero","brand:wikidata":"Q1283291","brand:wikipedia":"en:Valero Energy",name:"Valero"},removeTags:{amenity:"fuel",brand:"Valero","brand:wikidata":"Q1283291","brand:wikipedia":"en:Valero Energy",name:"Valero"},matchScore:2,suggestion:true},"amenity/fuel/Viada":{name:"Viada",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q12663942"},addTags:{amenity:"fuel",brand:"Viada","brand:wikidata":"Q12663942","brand:wikipedia":"en:Lukoil Baltija",name:"Viada"},removeTags:{amenity:"fuel",brand:"Viada","brand:wikidata":"Q12663942","brand:wikipedia":"en:Lukoil Baltija",name:"Viada"},matchScore:2,suggestion:true},"amenity/fuel/WOG":{name:"WOG",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q12072939"},addTags:{amenity:"fuel",brand:"WOG","brand:wikidata":"Q12072939","brand:wikipedia":"en:WOG (gas stations)",name:"WOG"},removeTags:{amenity:"fuel",brand:"WOG","brand:wikidata":"Q12072939","brand:wikipedia":"en:WOG (gas stations)",name:"WOG"},matchScore:2,suggestion:true},"amenity/fuel/Wawa":{name:"Wawa",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q5936320"},addTags:{amenity:"fuel",brand:"Wawa","brand:wikidata":"Q5936320","brand:wikipedia":"en:Wawa (company)",name:"Wawa"},removeTags:{amenity:"fuel",brand:"Wawa","brand:wikidata":"Q5936320","brand:wikipedia":"en:Wawa (company)",name:"Wawa"},matchScore:2,suggestion:true},"amenity/fuel/Westfalen":{name:"Westfalen",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q1411209"},addTags:{amenity:"fuel",brand:"Westfalen","brand:wikidata":"Q1411209","brand:wikipedia":"en:Westfalen AG",name:"Westfalen"},removeTags:{amenity:"fuel",brand:"Westfalen","brand:wikidata":"Q1411209","brand:wikipedia":"en:Westfalen AG",name:"Westfalen"},matchScore:2,suggestion:true},"amenity/fuel/Woolworths Petrol":{name:"Woolworths Petrol",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q5023980"},addTags:{amenity:"fuel",brand:"Caltex","brand:wikidata":"Q5023980","brand:wikipedia":"en:Caltex Woolworths",name:"Woolworths Petrol"},removeTags:{amenity:"fuel",brand:"Caltex","brand:wikidata":"Q5023980","brand:wikipedia":"en:Caltex Woolworths",name:"Woolworths Petrol"},matchScore:2,suggestion:true},"amenity/fuel/YPF":{name:"YPF",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q2006989"},addTags:{amenity:"fuel",brand:"YPF","brand:wikidata":"Q2006989","brand:wikipedia":"en:YPF",name:"YPF"},removeTags:{amenity:"fuel",brand:"YPF","brand:wikidata":"Q2006989","brand:wikipedia":"en:YPF",name:"YPF"},matchScore:2,suggestion:true},"amenity/fuel/Z":{name:"Z",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q8063337"},addTags:{amenity:"fuel",brand:"Z","brand:wikidata":"Q8063337","brand:wikipedia":"en:Z Energy",name:"Z"},removeTags:{amenity:"fuel",brand:"Z","brand:wikidata":"Q8063337","brand:wikipedia":"en:Z Energy",name:"Z"},matchScore:2,suggestion:true},"amenity/fuel/bft":{name:"bft",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q1009104"},addTags:{amenity:"fuel",brand:"bft","brand:wikidata":"Q1009104","brand:wikipedia":"de:Bundesverband freier Tankstellen",name:"bft"},removeTags:{amenity:"fuel",brand:"bft","brand:wikidata":"Q1009104","brand:wikipedia":"de:Bundesverband freier Tankstellen",name:"bft"},matchScore:2,suggestion:true},"amenity/fuel/din-X":{name:"din-X",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q10472858"},addTags:{amenity:"fuel",brand:"din-X","brand:wikidata":"Q10472858","brand:wikipedia":"sv:Din-X",name:"din-X"},removeTags:{amenity:"fuel",brand:"din-X","brand:wikidata":"Q10472858","brand:wikipedia":"sv:Din-X",name:"din-X"},matchScore:2,suggestion:true},"amenity/fuel/АЗС":{name:"АЗС",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q12122687"},addTags:{amenity:"fuel",brand:"АЗС","brand:wikidata":"Q12122687","brand:wikipedia":"uk:Мережа АЗС Приват",name:"АЗС"},removeTags:{amenity:"fuel",brand:"АЗС","brand:wikidata":"Q12122687","brand:wikipedia":"uk:Мережа АЗС Приват",name:"АЗС"},matchScore:2,suggestion:true},"amenity/fuel/Авіас":{name:"Авіас",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q12122687"},addTags:{amenity:"fuel",brand:"Авіас","brand:wikidata":"Q12122687","brand:wikipedia":"uk:Мережа АЗС Приват",name:"Авіас"},removeTags:{amenity:"fuel",brand:"Авіас","brand:wikidata":"Q12122687","brand:wikipedia":"uk:Мережа АЗС Приват",name:"Авіас"},matchScore:2,suggestion:true},"amenity/fuel/БРСМ-Нафта":{name:"БРСМ-Нафта",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q56356523"},addTags:{amenity:"fuel",brand:"БРСМ-Нафта","brand:wikidata":"Q56356523","brand:wikipedia":"uk:БРСМ-Нафта",name:"БРСМ-Нафта"},removeTags:{amenity:"fuel",brand:"БРСМ-Нафта","brand:wikidata":"Q56356523","brand:wikipedia":"uk:БРСМ-Нафта",name:"БРСМ-Нафта"},matchScore:2,suggestion:true},"amenity/fuel/Башнефть":{name:"Башнефть",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q809985"},addTags:{amenity:"fuel",brand:"Башнефть","brand:en":"Bashneft","brand:wikidata":"Q809985","brand:wikipedia":"en:Bashneft",name:"Башнефть","name:en":"Bashneft"},removeTags:{amenity:"fuel",brand:"Башнефть","brand:en":"Bashneft","brand:wikidata":"Q809985","brand:wikipedia":"en:Bashneft",name:"Башнефть","name:en":"Bashneft"},matchScore:2,suggestion:true},"amenity/fuel/Белоруснефть":{name:"Белоруснефть",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q4082693"},addTags:{amenity:"fuel",brand:"Белоруснефть","brand:wikidata":"Q4082693","brand:wikipedia":"ru:Белоруснефть",name:"Белоруснефть"},removeTags:{amenity:"fuel",brand:"Белоруснефть","brand:wikidata":"Q4082693","brand:wikipedia":"ru:Белоруснефть",name:"Белоруснефть"},matchScore:2,suggestion:true},"amenity/fuel/Газпромнефть":{name:"Газпромнефть",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q1461799"},addTags:{amenity:"fuel",brand:"Газпромнефть","brand:wikidata":"Q1461799","brand:wikipedia":"en:Gazprom Neft",name:"Газпромнефть"},removeTags:{amenity:"fuel",brand:"Газпромнефть","brand:wikidata":"Q1461799","brand:wikipedia":"en:Gazprom Neft",name:"Газпромнефть"},matchScore:2,suggestion:true},"amenity/fuel/КазМунайГаз":{name:"КазМунайГаз",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q1417227"},addTags:{amenity:"fuel",brand:"КазМунайГаз","brand:wikidata":"Q1417227","brand:wikipedia":"en:KazMunayGas",name:"КазМунайГаз"},removeTags:{amenity:"fuel",brand:"КазМунайГаз","brand:wikidata":"Q1417227","brand:wikipedia":"en:KazMunayGas",name:"КазМунайГаз"},matchScore:2,suggestion:true},"amenity/fuel/Лукойл":{name:"Лукойл",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q329347"},addTags:{amenity:"fuel",brand:"Лукойл","brand:wikidata":"Q329347","brand:wikipedia":"ru:Лукойл",name:"Лукойл"},removeTags:{amenity:"fuel",brand:"Лукойл","brand:wikidata":"Q329347","brand:wikipedia":"ru:Лукойл",name:"Лукойл"},matchScore:2,suggestion:true},"amenity/fuel/Макпетрол":{name:"Макпетрол",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q1886438"},addTags:{amenity:"fuel",brand:"Макпетрол","brand:wikidata":"Q1886438","brand:wikipedia":"en:Makpetrol",name:"Макпетрол"},removeTags:{amenity:"fuel",brand:"Макпетрол","brand:wikidata":"Q1886438","brand:wikipedia":"en:Makpetrol",name:"Макпетрол"},matchScore:2,suggestion:true},"amenity/fuel/НК Альянс":{name:"НК Альянс",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q4063700"},addTags:{amenity:"fuel",brand:"НК Альянс","brand:wikidata":"Q4063700","brand:wikipedia":"ru:Альянс (компания)",name:"НК Альянс"},removeTags:{amenity:"fuel",brand:"НК Альянс","brand:wikidata":"Q4063700","brand:wikipedia":"ru:Альянс (компания)",name:"НК Альянс"},matchScore:2,suggestion:true},"amenity/fuel/ОККО":{name:"ОККО",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q7072617"},addTags:{amenity:"fuel",brand:"ОККО","brand:en":"OKKO","brand:wikidata":"Q7072617","brand:wikipedia":"en:OKKO",name:"ОККО","name:en":"OKKO"},removeTags:{amenity:"fuel",brand:"ОККО","brand:en":"OKKO","brand:wikidata":"Q7072617","brand:wikipedia":"en:OKKO",name:"ОККО","name:en":"OKKO"},matchScore:2,suggestion:true},"amenity/fuel/ПТК":{name:"ПТК",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q4360193"},addTags:{amenity:"fuel",brand:"ПТК","brand:en":"The Petersburg Fuel Company","brand:wikidata":"Q4360193","brand:wikipedia":"en:Petersburg Fuel Company",name:"ПТК","name:en":"The Petersburg Fuel Company"},removeTags:{amenity:"fuel",brand:"ПТК","brand:en":"The Petersburg Fuel Company","brand:wikidata":"Q4360193","brand:wikipedia":"en:Petersburg Fuel Company",name:"ПТК","name:en":"The Petersburg Fuel Company"},matchScore:2,suggestion:true},"amenity/fuel/Петрол":{name:"Петрол",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q24315"},addTags:{amenity:"fuel",brand:"Петрол","brand:wikidata":"Q24315","brand:wikipedia":"en:Petrol AD",name:"Петрол"},removeTags:{amenity:"fuel",brand:"Петрол","brand:wikidata":"Q24315","brand:wikipedia":"en:Petrol AD",name:"Петрол"},matchScore:2,suggestion:true},"amenity/fuel/Роснефть":{name:"Роснефть",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q1141123"},addTags:{amenity:"fuel",brand:"Роснефть","brand:en":"Rosneft","brand:wikidata":"Q1141123","brand:wikipedia":"en:Rosneft",name:"Роснефть","name:en":"Rosneft"},removeTags:{amenity:"fuel",brand:"Роснефть","brand:en":"Rosneft","brand:wikidata":"Q1141123","brand:wikipedia":"en:Rosneft",name:"Роснефть","name:en":"Rosneft"},matchScore:2,suggestion:true},"amenity/fuel/Сургутнефтегаз":{name:"Сургутнефтегаз",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q680776"},addTags:{amenity:"fuel",brand:"Сургутнефтегаз","brand:en":"Surgutneftegas","brand:wikidata":"Q680776","brand:wikipedia":"en:Surgutneftegas",name:"Сургутнефтегаз","name:en":"Surgutneftegas"},removeTags:{amenity:"fuel",brand:"Сургутнефтегаз","brand:en":"Surgutneftegas","brand:wikidata":"Q680776","brand:wikipedia":"en:Surgutneftegas",name:"Сургутнефтегаз","name:en":"Surgutneftegas"},matchScore:2,suggestion:true},"amenity/fuel/ТНК":{name:"ТНК",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q2298901"},addTags:{amenity:"fuel",brand:"ТНК","brand:wikidata":"Q2298901","brand:wikipedia":"en:TNK-BP",name:"ТНК"},removeTags:{amenity:"fuel",brand:"ТНК","brand:wikidata":"Q2298901","brand:wikipedia":"en:TNK-BP",name:"ТНК"},matchScore:2,suggestion:true},"amenity/fuel/Татнефть":{name:"Татнефть",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q1616858"},addTags:{amenity:"fuel",brand:"Татнефть","brand:en":"Tatneft","brand:wikidata":"Q1616858","brand:wikipedia":"en:Tatneft",name:"Татнефть","name:en":"Tatneft"},removeTags:{amenity:"fuel",brand:"Татнефть","brand:en":"Tatneft","brand:wikidata":"Q1616858","brand:wikipedia":"en:Tatneft",name:"Татнефть","name:en":"Tatneft"},matchScore:2,suggestion:true},"amenity/fuel/Укрнафта":{name:"Укрнафта",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q2447961"},addTags:{amenity:"fuel",brand:"Укрнафта","brand:en":"Ukrnafta","brand:wikidata":"Q2447961","brand:wikipedia":"en:Ukrnafta",name:"Укрнафта","name:en":"Ukrnafta"},removeTags:{amenity:"fuel",brand:"Укрнафта","brand:en":"Ukrnafta","brand:wikidata":"Q2447961","brand:wikipedia":"en:Ukrnafta",name:"Укрнафта","name:en":"Ukrnafta"},matchScore:2,suggestion:true},"amenity/fuel/סונול":{name:"סונול",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q3701622"},addTags:{amenity:"fuel",brand:"סונול","brand:en":"Sonol","brand:wikidata":"Q3701622","brand:wikipedia":"en:Sonol",name:"סונול","name:en":"Sonol"},removeTags:{amenity:"fuel",brand:"סונול","brand:en":"Sonol","brand:wikidata":"Q3701622","brand:wikipedia":"en:Sonol",name:"סונול","name:en":"Sonol"},matchScore:2,suggestion:true},"amenity/fuel/บางจาก":{name:"บางจาก",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q6579719"},addTags:{amenity:"fuel",brand:"บางจาก","brand:wikidata":"Q6579719","brand:wikipedia":"th:บางจาก คอร์ปอเรชัน",name:"บางจาก"},removeTags:{amenity:"fuel",brand:"บางจาก","brand:wikidata":"Q6579719","brand:wikipedia":"th:บางจาก คอร์ปอเรชัน",name:"บางจาก"},matchScore:2,suggestion:true},"amenity/fuel/ป.ต.ท.":{name:"ป.ต.ท.",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q1810389"},addTags:{amenity:"fuel",brand:"ป.ต.ท.","brand:wikidata":"Q1810389","brand:wikipedia":"th:ปตท.",name:"ป.ต.ท."},removeTags:{amenity:"fuel",brand:"ป.ต.ท.","brand:wikidata":"Q1810389","brand:wikipedia":"th:ปตท.",name:"ป.ต.ท."},matchScore:2,suggestion:true},"amenity/fuel/เชลล์":{name:"เชลล์",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q18109"},addTags:{amenity:"fuel",brand:"เชลล์","brand:wikidata":"Q18109","brand:wikipedia":"th:เชลล์",name:"เชลล์"},removeTags:{amenity:"fuel",brand:"เชลล์","brand:wikidata":"Q18109","brand:wikipedia":"th:เชลล์",name:"เชลล์"},matchScore:2,suggestion:true},"amenity/fuel/เอสโซ่":{name:"เอสโซ่",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q867662"},addTags:{amenity:"fuel",brand:"เอสโซ่","brand:en":"Esso","brand:wikidata":"Q867662","brand:wikipedia":"en:Esso",name:"เอสโซ่","name:en":"Esso"},removeTags:{amenity:"fuel",brand:"เอสโซ่","brand:en":"Esso","brand:wikidata":"Q867662","brand:wikipedia":"en:Esso",name:"เอสโซ่","name:en":"Esso"},matchScore:2,suggestion:true},"amenity/fuel/エッソ":{name:"エッソ",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q867662"},addTags:{amenity:"fuel",brand:"エッソ","brand:en":"Esso","brand:wikidata":"Q867662","brand:wikipedia":"en:Esso",name:"エッソ","name:en":"Esso"},removeTags:{amenity:"fuel",brand:"エッソ","brand:en":"Esso","brand:wikidata":"Q867662","brand:wikipedia":"en:Esso",name:"エッソ","name:en":"Esso"},matchScore:2,suggestion:true},"amenity/fuel/エネオス":{name:"エネオス",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q1640290"},addTags:{amenity:"fuel",brand:"エネオス","brand:en":"JXTG Nippon Oil & Energy","brand:wikidata":"Q1640290","brand:wikipedia":"en:JXTG Nippon Oil & Energy",name:"エネオス","name:en":"JXTG Nippon Oil & Energy"},removeTags:{amenity:"fuel",brand:"エネオス","brand:en":"JXTG Nippon Oil & Energy","brand:wikidata":"Q1640290","brand:wikipedia":"en:JXTG Nippon Oil & Energy",name:"エネオス","name:en":"JXTG Nippon Oil & Energy"},matchScore:2,suggestion:true},"amenity/fuel/コスモ石油":{name:"コスモ石油",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q2498318"},addTags:{amenity:"fuel",brand:"コスモ石油","brand:en":"Cosmo Oil Company","brand:wikidata":"Q2498318","brand:wikipedia":"en:Cosmo Oil Company",name:"コスモ石油","name:en":"Cosmo Oil Company"},removeTags:{amenity:"fuel",brand:"コスモ石油","brand:en":"Cosmo Oil Company","brand:wikidata":"Q2498318","brand:wikipedia":"en:Cosmo Oil Company",name:"コスモ石油","name:en":"Cosmo Oil Company"},matchScore:2,suggestion:true},"amenity/fuel/中国石化":{name:"中国石化",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q831445"},addTags:{amenity:"fuel",brand:"中国石化","brand:en":"Sinopec","brand:wikidata":"Q831445","brand:wikipedia":"en:Sinopec",name:"中国石化","name:en":"Sinopec"},removeTags:{amenity:"fuel",brand:"中国石化","brand:en":"Sinopec","brand:wikidata":"Q831445","brand:wikipedia":"en:Sinopec",name:"中国石化","name:en":"Sinopec"},matchScore:2,suggestion:true},"amenity/fuel/中国石化 Sinopec":{name:"中国石化 Sinopec",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q831445"},addTags:{amenity:"fuel",brand:"中国石化 Sinopec","brand:wikidata":"Q831445","brand:wikipedia":"zh:中国石化",name:"中国石化 Sinopec"},removeTags:{amenity:"fuel",brand:"中国石化 Sinopec","brand:wikidata":"Q831445","brand:wikipedia":"zh:中国石化",name:"中国石化 Sinopec"},matchScore:2,suggestion:true},"amenity/fuel/中国石油":{name:"中国石油",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q503182"},addTags:{amenity:"fuel",brand:"中国石油","brand:en":"PetroChina","brand:wikidata":"Q503182","brand:wikipedia":"en:PetroChina",name:"中国石油","name:en":"PetroChina"},removeTags:{amenity:"fuel",brand:"中国石油","brand:en":"PetroChina","brand:wikidata":"Q503182","brand:wikipedia":"en:PetroChina",name:"中国石油","name:en":"PetroChina"},matchScore:2,suggestion:true},"amenity/fuel/出光":{name:"出光",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q2216770"},addTags:{amenity:"fuel",brand:"出光","brand:en":"Idemitsu Kosan","brand:wikidata":"Q2216770","brand:wikipedia":"en:Idemitsu Kosan",name:"出光","name:en":"Idemitsu Kosan"},removeTags:{amenity:"fuel",brand:"出光","brand:en":"Idemitsu Kosan","brand:wikidata":"Q2216770","brand:wikipedia":"en:Idemitsu Kosan",name:"出光","name:en":"Idemitsu Kosan"},matchScore:2,suggestion:true},"amenity/fuel/台灣中油":{name:"台灣中油",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q21527177"},addTags:{amenity:"fuel",brand:"台灣中油","brand:en":"CPC Corporation, Taiwan","brand:wikidata":"Q21527177","brand:wikipedia":"en:CPC Corporation",name:"台灣中油","name:en":"CPC Corporation, Taiwan"},removeTags:{amenity:"fuel",brand:"台灣中油","brand:en":"CPC Corporation, Taiwan","brand:wikidata":"Q21527177","brand:wikipedia":"en:CPC Corporation",name:"台灣中油","name:en":"CPC Corporation, Taiwan"},matchScore:2,suggestion:true},"amenity/fuel/昭和シェル":{name:"昭和シェル",icon:"maki-fuel",geometry:["point","area"],tags:{amenity:"fuel","brand:wikidata":"Q277115"},addTags:{amenity:"fuel",brand:"昭和シェル","brand:en":"Showa Shell Sekiyu","brand:wikidata":"Q277115","brand:wikipedia":"en:Showa Shell Sekiyu",name:"昭和シェル","name:en":"Showa Shell Sekiyu"},removeTags:{amenity:"fuel",brand:"昭和シェル","brand:en":"Showa Shell Sekiyu","brand:wikidata":"Q277115","brand:wikipedia":"en:Showa Shell Sekiyu",name:"昭和シェル","name:en":"Showa Shell Sekiyu"},matchScore:2,suggestion:true},"amenity/ice_cream/Baskin-Robbins":{name:"Baskin-Robbins",icon:"maki-ice-cream",geometry:["point","area"],tags:{amenity:"ice_cream","brand:wikidata":"Q584601"},addTags:{amenity:"ice_cream",brand:"Baskin-Robbins","brand:wikidata":"Q584601","brand:wikipedia":"en:Baskin-Robbins",cuisine:"ice_cream",name:"Baskin-Robbins"},removeTags:{amenity:"ice_cream",brand:"Baskin-Robbins","brand:wikidata":"Q584601","brand:wikipedia":"en:Baskin-Robbins",cuisine:"ice_cream",name:"Baskin-Robbins"},matchScore:2,suggestion:true},"amenity/ice_cream/Ben & Jerry's":{name:"Ben & Jerry's",icon:"maki-ice-cream",geometry:["point","area"],tags:{amenity:"ice_cream","brand:wikidata":"Q816412"},addTags:{amenity:"ice_cream",brand:"Ben & Jerry's","brand:wikidata":"Q816412","brand:wikipedia":"en:Ben & Jerry's",cuisine:"ice_cream",name:"Ben & Jerry's"},removeTags:{amenity:"ice_cream",brand:"Ben & Jerry's","brand:wikidata":"Q816412","brand:wikipedia":"en:Ben & Jerry's",cuisine:"ice_cream",name:"Ben & Jerry's"},matchScore:2,suggestion:true},"amenity/ice_cream/Cold Stone Creamery":{name:"Cold Stone Creamery",icon:"maki-ice-cream",geometry:["point","area"],tags:{amenity:"ice_cream","brand:wikidata":"Q1094923"},addTags:{amenity:"ice_cream",brand:"Cold Stone Creamery","brand:wikidata":"Q1094923","brand:wikipedia":"en:Cold Stone Creamery",cuisine:"ice_cream",name:"Cold Stone Creamery"},removeTags:{amenity:"ice_cream",brand:"Cold Stone Creamery","brand:wikidata":"Q1094923","brand:wikipedia":"en:Cold Stone Creamery",cuisine:"ice_cream",name:"Cold Stone Creamery"},matchScore:2,suggestion:true},"amenity/ice_cream/Freddo":{name:"Freddo",icon:"maki-ice-cream",geometry:["point","area"],tags:{amenity:"ice_cream","brand:wikidata":"Q28823999"},addTags:{amenity:"ice_cream",brand:"Freddo","brand:wikidata":"Q28823999","brand:wikipedia":"es:Freddo",cuisine:"ice_cream",name:"Freddo"},removeTags:{amenity:"ice_cream",brand:"Freddo","brand:wikidata":"Q28823999","brand:wikipedia":"es:Freddo",cuisine:"ice_cream",name:"Freddo"},matchScore:2,suggestion:true},"amenity/ice_cream/Grido":{name:"Grido",icon:"maki-ice-cream",geometry:["point","area"],tags:{amenity:"ice_cream","brand:wikidata":"Q5885724"},addTags:{amenity:"ice_cream",brand:"Grido","brand:wikidata":"Q5885724","brand:wikipedia":"es:Grido Helado",cuisine:"ice_cream",name:"Grido"},removeTags:{amenity:"ice_cream",brand:"Grido","brand:wikidata":"Q5885724","brand:wikipedia":"es:Grido Helado",cuisine:"ice_cream",name:"Grido"},matchScore:2,suggestion:true},"amenity/ice_cream/Rita's Italian Ice":{name:"Rita's Italian Ice",icon:"maki-ice-cream",geometry:["point","area"],tags:{amenity:"ice_cream","brand:wikidata":"Q7336456"},addTags:{amenity:"ice_cream",brand:"Rita's Italian Ice","brand:wikidata":"Q7336456","brand:wikipedia":"en:Rita's Italian Ice",cuisine:"ice_cream",name:"Rita's Italian Ice"},removeTags:{amenity:"ice_cream",brand:"Rita's Italian Ice","brand:wikidata":"Q7336456","brand:wikipedia":"en:Rita's Italian Ice",cuisine:"ice_cream",name:"Rita's Italian Ice"},matchScore:2,suggestion:true},"amenity/ice_cream/sweetFrog":{name:"sweetFrog",icon:"maki-ice-cream",geometry:["point","area"],tags:{amenity:"ice_cream","brand:wikidata":"Q16952110"},addTags:{amenity:"ice_cream",brand:"sweetFrog","brand:wikidata":"Q16952110","brand:wikipedia":"en:Sweet Frog",cuisine:"frozen_yogurt",name:"sweetFrog"},removeTags:{amenity:"ice_cream",brand:"sweetFrog","brand:wikidata":"Q16952110","brand:wikipedia":"en:Sweet Frog",cuisine:"frozen_yogurt",name:"sweetFrog"},matchScore:2,suggestion:true},"amenity/money_transfer/Express Union":{name:"Express Union",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"money_transfer","brand:wikidata":"Q3062276"},addTags:{amenity:"money_transfer",brand:"Express Union","brand:wikidata":"Q3062276","brand:wikipedia":"fr:Express Union",name:"Express Union"},removeTags:{amenity:"money_transfer",brand:"Express Union","brand:wikidata":"Q3062276","brand:wikipedia":"fr:Express Union",name:"Express Union"},matchScore:2,suggestion:true},"amenity/money_transfer/Western Union":{name:"Western Union",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"money_transfer","brand:wikidata":"Q861042"},addTags:{amenity:"money_transfer",brand:"Western Union","brand:wikidata":"Q861042","brand:wikipedia":"en:Western Union",name:"Western Union"},removeTags:{amenity:"money_transfer",brand:"Western Union","brand:wikidata":"Q861042","brand:wikipedia":"en:Western Union",name:"Western Union"},matchScore:2,suggestion:true},"amenity/payment_centre/Abitab":{name:"Abitab",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"payment_centre","brand:wikidata":"Q16488129"},addTags:{amenity:"payment_centre",brand:"Abitab","brand:wikidata":"Q16488129","brand:wikipedia":"es:Abitab",name:"Abitab"},removeTags:{amenity:"payment_centre",brand:"Abitab","brand:wikidata":"Q16488129","brand:wikipedia":"es:Abitab",name:"Abitab"},matchScore:2,suggestion:true},"amenity/payment_centre/Rapipago":{name:"Rapipago",icon:"maki-bank",geometry:["point","area"],tags:{amenity:"payment_centre","brand:wikidata":"Q6100413"},addTags:{amenity:"payment_centre",brand:"Rapipago","brand:wikidata":"Q6100413","brand:wikipedia":"es:Rapipago",name:"Rapipago"},removeTags:{amenity:"payment_centre",brand:"Rapipago","brand:wikidata":"Q6100413","brand:wikipedia":"es:Rapipago",name:"Rapipago"},matchScore:2,suggestion:true},"amenity/payment_terminal/Qiwi":{name:"Qiwi",icon:"maki-bank",geometry:["point"],tags:{amenity:"payment_terminal","brand:wikidata":"Q4047736"},addTags:{amenity:"payment_terminal",brand:"Qiwi","brand:wikidata":"Q4047736","brand:wikipedia":"en:Qiwi",name:"Qiwi"},removeTags:{amenity:"payment_terminal",brand:"Qiwi","brand:wikidata":"Q4047736","brand:wikipedia":"en:Qiwi",name:"Qiwi"},matchScore:2,suggestion:true},"amenity/payment_terminal/ПриватБанк":{name:"ПриватБанк",icon:"maki-bank",geometry:["point"],tags:{amenity:"payment_terminal","brand:wikidata":"Q1515015"},addTags:{amenity:"payment_terminal",brand:"ПриватБанк","brand:wikidata":"Q1515015","brand:wikipedia":"en:PrivatBank",name:"ПриватБанк"},removeTags:{amenity:"payment_terminal",brand:"ПриватБанк","brand:wikidata":"Q1515015","brand:wikipedia":"en:PrivatBank",name:"ПриватБанк"},matchScore:2,suggestion:true},"amenity/payment_terminal/Элекснет":{name:"Элекснет",icon:"maki-bank",geometry:["point"],tags:{amenity:"payment_terminal","brand:wikidata":"Q4530795"},addTags:{amenity:"payment_terminal",brand:"Элекснет","brand:wikidata":"Q4530795","brand:wikipedia":"ru:Элекснет",name:"Элекснет"},removeTags:{amenity:"payment_terminal",brand:"Элекснет","brand:wikidata":"Q4530795","brand:wikipedia":"ru:Элекснет",name:"Элекснет"},matchScore:2,suggestion:true},"amenity/pharmacy/36,6":{name:"36,6",icon:"maki-pharmacy",geometry:["point","area"],tags:{amenity:"pharmacy","brand:wikidata":"Q226889"},addTags:{amenity:"pharmacy",brand:"36,6","brand:wikidata":"Q226889","brand:wikipedia":"ru:36,6 (аптечная сеть)",healthcare:"pharmacy",name:"36,6"},removeTags:{amenity:"pharmacy",brand:"36,6","brand:wikidata":"Q226889","brand:wikipedia":"ru:36,6 (аптечная сеть)",healthcare:"pharmacy",name:"36,6"},reference:{key:"amenity",value:"pharmacy"},matchScore:2,suggestion:true},"amenity/pharmacy/Apotek Hjärtat":{name:"Apotek Hjärtat",icon:"maki-pharmacy",geometry:["point","area"],tags:{amenity:"pharmacy","brand:wikidata":"Q10416114"},addTags:{amenity:"pharmacy",brand:"Apotek Hjärtat","brand:wikidata":"Q10416114","brand:wikipedia":"sv:Apotek Hjärtat",healthcare:"pharmacy",name:"Apotek Hjärtat"},removeTags:{amenity:"pharmacy",brand:"Apotek Hjärtat","brand:wikidata":"Q10416114","brand:wikipedia":"sv:Apotek Hjärtat",healthcare:"pharmacy",name:"Apotek Hjärtat"},reference:{key:"amenity",value:"pharmacy"},matchScore:2,suggestion:true},"amenity/pharmacy/Bartell Drugs":{name:"Bartell Drugs",icon:"maki-pharmacy",geometry:["point","area"],tags:{amenity:"pharmacy","brand:wikidata":"Q4865152"},addTags:{amenity:"pharmacy",brand:"Bartell Drugs","brand:wikidata":"Q4865152","brand:wikipedia":"en:Bartell Drugs",healthcare:"pharmacy",name:"Bartell Drugs"},removeTags:{amenity:"pharmacy",brand:"Bartell Drugs","brand:wikidata":"Q4865152","brand:wikipedia":"en:Bartell Drugs",healthcare:"pharmacy",name:"Bartell Drugs"},reference:{key:"amenity",value:"pharmacy"},matchScore:2,suggestion:true},"amenity/pharmacy/Benavides":{name:"Benavides",icon:"maki-pharmacy",geometry:["point","area"],tags:{amenity:"pharmacy","brand:wikidata":"Q5435613"},addTags:{amenity:"pharmacy",brand:"Benavides","brand:wikidata":"Q5435613","brand:wikipedia":"en:Farmacias Benavides",healthcare:"pharmacy",name:"Benavides"},removeTags:{amenity:"pharmacy",brand:"Benavides","brand:wikidata":"Q5435613","brand:wikipedia":"en:Farmacias Benavides",healthcare:"pharmacy",name:"Benavides"},reference:{key:"amenity",value:"pharmacy"},matchScore:2,suggestion:true},"amenity/pharmacy/Boots":{name:"Boots",icon:"maki-pharmacy",geometry:["point","area"],tags:{amenity:"pharmacy","brand:wikidata":"Q6123139"},addTags:{amenity:"pharmacy",brand:"Boots","brand:wikidata":"Q6123139","brand:wikipedia":"en:Boots UK",healthcare:"pharmacy",name:"Boots"},removeTags:{amenity:"pharmacy",brand:"Boots","brand:wikidata":"Q6123139","brand:wikipedia":"en:Boots UK",healthcare:"pharmacy",name:"Boots"},reference:{key:"amenity",value:"pharmacy"},matchScore:2,suggestion:true},"amenity/pharmacy/Brookshire Brothers Pharmacy":{name:"Brookshire Brothers Pharmacy",icon:"maki-pharmacy",geometry:["point","area"],tags:{amenity:"pharmacy","brand:wikidata":"Q4975084"},addTags:{amenity:"pharmacy",brand:"Brookshire Brothers Pharmacy","brand:wikidata":"Q4975084","brand:wikipedia":"en:Brookshire Brothers",healthcare:"pharmacy",name:"Brookshire Brothers Pharmacy"},removeTags:{amenity:"pharmacy",brand:"Brookshire Brothers Pharmacy","brand:wikidata":"Q4975084","brand:wikipedia":"en:Brookshire Brothers",healthcare:"pharmacy",name:"Brookshire Brothers Pharmacy"},reference:{key:"amenity",value:"pharmacy"},matchScore:2,suggestion:true},"amenity/pharmacy/CVS":{name:"CVS",icon:"maki-pharmacy",geometry:["point","area"],tags:{amenity:"pharmacy","brand:wikidata":"Q2078880"},addTags:{amenity:"pharmacy",brand:"CVS","brand:wikidata":"Q2078880","brand:wikipedia":"en:CVS Pharmacy",healthcare:"pharmacy",name:"CVS"},removeTags:{amenity:"pharmacy",brand:"CVS","brand:wikidata":"Q2078880","brand:wikipedia":"en:CVS Pharmacy",healthcare:"pharmacy",name:"CVS"},reference:{key:"amenity",value:"pharmacy"},matchScore:2,suggestion:true},"amenity/pharmacy/Catena":{name:"Catena",icon:"maki-pharmacy",geometry:["point","area"],tags:{amenity:"pharmacy","brand:wikidata":"Q24035728"},addTags:{amenity:"pharmacy",brand:"Catena","brand:wikidata":"Q24035728","brand:wikipedia":"ro:Farmacia Catena",healthcare:"pharmacy",name:"Catena"},removeTags:{amenity:"pharmacy",brand:"Catena","brand:wikidata":"Q24035728","brand:wikipedia":"ro:Farmacia Catena",healthcare:"pharmacy",name:"Catena"},reference:{key:"amenity",value:"pharmacy"},matchScore:2,suggestion:true},"amenity/pharmacy/Chemist Warehouse":{name:"Chemist Warehouse",icon:"maki-pharmacy",geometry:["point","area"],tags:{amenity:"pharmacy","brand:wikidata":"Q48782120"},addTags:{amenity:"pharmacy",brand:"Chemist Warehouse","brand:wikidata":"Q48782120","brand:wikipedia":"en:Chemist Warehouse",healthcare:"pharmacy",name:"Chemist Warehouse"},removeTags:{amenity:"pharmacy",brand:"Chemist Warehouse","brand:wikidata":"Q48782120","brand:wikipedia":"en:Chemist Warehouse",healthcare:"pharmacy",name:"Chemist Warehouse"},reference:{key:"amenity",value:"pharmacy"},matchScore:2,suggestion:true},"amenity/pharmacy/Costco Pharmacy":{name:"Costco Pharmacy",icon:"maki-pharmacy",geometry:["point","area"],tags:{amenity:"pharmacy","brand:wikidata":"Q715583"},addTags:{amenity:"pharmacy",healthcare:"pharmacy",brand:"Costco Pharmacy","brand:wikidata":"Q715583","brand:wikipedia":"en:Costco",name:"Costco Pharmacy"},removeTags:{amenity:"pharmacy",healthcare:"pharmacy",brand:"Costco Pharmacy","brand:wikidata":"Q715583","brand:wikipedia":"en:Costco",name:"Costco Pharmacy"},reference:{key:"amenity",value:"pharmacy"},matchScore:2,suggestion:true},"amenity/pharmacy/Cruz Verde":{name:"Cruz Verde",icon:"maki-pharmacy",geometry:["point","area"],tags:{amenity:"pharmacy","brand:wikidata":"Q5856071"},addTags:{amenity:"pharmacy",brand:"Cruz Verde","brand:wikidata":"Q5856071","brand:wikipedia":"es:Farmacias Cruz Verde",healthcare:"pharmacy",name:"Cruz Verde"},removeTags:{amenity:"pharmacy",brand:"Cruz Verde","brand:wikidata":"Q5856071","brand:wikipedia":"es:Farmacias Cruz Verde",healthcare:"pharmacy",name:"Cruz Verde"},reference:{key:"amenity",value:"pharmacy"},matchScore:2,suggestion:true},"amenity/pharmacy/Dr. Max":{name:"Dr. Max",icon:"maki-pharmacy",geometry:["point","area"],tags:{amenity:"pharmacy","brand:wikidata":"Q56317371"},addTags:{amenity:"pharmacy",brand:"Dr. Max","brand:wikidata":"Q56317371","brand:wikipedia":"fr:Dr.Max",healthcare:"pharmacy",name:"Dr. Max"},removeTags:{amenity:"pharmacy",brand:"Dr. Max","brand:wikidata":"Q56317371","brand:wikipedia":"fr:Dr.Max",healthcare:"pharmacy",name:"Dr. Max"},reference:{key:"amenity",value:"pharmacy"},matchScore:2,suggestion:true},"amenity/pharmacy/Droga Raia":{name:"Droga Raia",icon:"maki-pharmacy",geometry:["point","area"],tags:{amenity:"pharmacy","brand:wikidata":"Q10357101"},addTags:{amenity:"pharmacy",brand:"Droga Raia","brand:wikidata":"Q10357101","brand:wikipedia":"pt:RaiaDrogasil",healthcare:"pharmacy",name:"Droga Raia"},removeTags:{amenity:"pharmacy",brand:"Droga Raia","brand:wikidata":"Q10357101","brand:wikipedia":"pt:RaiaDrogasil",healthcare:"pharmacy",name:"Droga Raia"},reference:{key:"amenity",value:"pharmacy"},matchScore:2,suggestion:true},"amenity/pharmacy/Drogaria São Paulo":{name:"Drogaria São Paulo",icon:"maki-pharmacy",geometry:["point","area"],tags:{amenity:"pharmacy","brand:wikidata":"Q5308184"},addTags:{amenity:"pharmacy",brand:"Drogaria São Paulo","brand:wikidata":"Q5308184","brand:wikipedia":"en:Grupo DPSP",healthcare:"pharmacy",name:"Drogaria São Paulo"},removeTags:{amenity:"pharmacy",brand:"Drogaria São Paulo","brand:wikidata":"Q5308184","brand:wikipedia":"en:Grupo DPSP",healthcare:"pharmacy",name:"Drogaria São Paulo"},reference:{key:"amenity",value:"pharmacy"},matchScore:2,suggestion:true},"amenity/pharmacy/Drogasil":{name:"Drogasil",icon:"maki-pharmacy",geometry:["point","area"],tags:{amenity:"pharmacy","brand:wikidata":"Q5308185"},addTags:{amenity:"pharmacy",brand:"Drogasil","brand:wikidata":"Q5308185","brand:wikipedia":"pt:Drogasil",healthcare:"pharmacy",name:"Drogasil"},removeTags:{amenity:"pharmacy",brand:"Drogasil","brand:wikidata":"Q5308185","brand:wikipedia":"pt:Drogasil",healthcare:"pharmacy",name:"Drogasil"},reference:{key:"amenity",value:"pharmacy"},matchScore:2,suggestion:true},"amenity/pharmacy/Duane Reade":{name:"Duane Reade",icon:"maki-pharmacy",geometry:["point","area"],tags:{amenity:"pharmacy","brand:wikidata":"Q5310380"},addTags:{amenity:"pharmacy",brand:"Duane Reade","brand:wikidata":"Q5310380","brand:wikipedia":"en:Duane Reade",healthcare:"pharmacy",name:"Duane Reade"},removeTags:{amenity:"pharmacy",brand:"Duane Reade","brand:wikidata":"Q5310380","brand:wikipedia":"en:Duane Reade",healthcare:"pharmacy",name:"Duane Reade"},reference:{key:"amenity",value:"pharmacy"},matchScore:2,suggestion:true},"amenity/pharmacy/Eurovaistinė":{name:"Eurovaistinė",icon:"maki-pharmacy",geometry:["point","area"],tags:{amenity:"pharmacy","brand:wikidata":"Q267205"},addTags:{amenity:"pharmacy",brand:"Eurovaistinė","brand:wikidata":"Q267205","brand:wikipedia":"en:Euroapotheca",healthcare:"pharmacy",name:"Eurovaistinė"},removeTags:{amenity:"pharmacy",brand:"Eurovaistinė","brand:wikidata":"Q267205","brand:wikipedia":"en:Euroapotheca",healthcare:"pharmacy",name:"Eurovaistinė"},reference:{key:"amenity",value:"pharmacy"},matchScore:2,suggestion:true},"amenity/pharmacy/Familiprix":{name:"Familiprix",icon:"maki-pharmacy",geometry:["point","area"],tags:{amenity:"pharmacy","brand:wikidata":"Q3064881"},addTags:{amenity:"pharmacy",brand:"Familiprix","brand:wikidata":"Q3064881","brand:wikipedia":"en:Familiprix",healthcare:"pharmacy",name:"Familiprix"},removeTags:{amenity:"pharmacy",brand:"Familiprix","brand:wikidata":"Q3064881","brand:wikipedia":"en:Familiprix",healthcare:"pharmacy",name:"Familiprix"},reference:{key:"amenity",value:"pharmacy"},matchScore:2,suggestion:true},"amenity/pharmacy/Farmacia Benavides":{name:"Farmacia Benavides",icon:"maki-pharmacy",geometry:["point","area"],tags:{amenity:"pharmacy","brand:wikidata":"Q5435613"},addTags:{amenity:"pharmacy",brand:"Farmacia Benavides","brand:wikidata":"Q5435613","brand:wikipedia":"en:Farmacias Benavides",healthcare:"pharmacy",name:"Farmacia Benavides"},removeTags:{amenity:"pharmacy",brand:"Farmacia Benavides","brand:wikidata":"Q5435613","brand:wikipedia":"en:Farmacias Benavides",healthcare:"pharmacy",name:"Farmacia Benavides"},reference:{key:"amenity",value:"pharmacy"},matchScore:2,suggestion:true},"amenity/pharmacy/Farmacia Guadalajara":{name:"Farmacia Guadalajara",icon:"maki-pharmacy",geometry:["point","area"],tags:{amenity:"pharmacy","brand:wikidata":"Q5435609"},addTags:{amenity:"pharmacy",brand:"Farmacia Guadalajara","brand:wikidata":"Q5435609","brand:wikipedia":"en:Farmacias Guadalajara",healthcare:"pharmacy",name:"Farmacia Guadalajara"},removeTags:{amenity:"pharmacy",brand:"Farmacia Guadalajara","brand:wikidata":"Q5435609","brand:wikipedia":"en:Farmacias Guadalajara",healthcare:"pharmacy",name:"Farmacia Guadalajara"},reference:{key:"amenity",value:"pharmacy"},matchScore:2,suggestion:true},"amenity/pharmacy/Farmacias Ahumada":{name:"Farmacias Ahumada",icon:"maki-pharmacy",geometry:["point","area"],tags:{amenity:"pharmacy","brand:wikidata":"Q5856069"},addTags:{amenity:"pharmacy",brand:"Farmacias Ahumada","brand:wikidata":"Q5856069","brand:wikipedia":"es:Farmacias Ahumada",healthcare:"pharmacy",name:"Farmacias Ahumada"},removeTags:{amenity:"pharmacy",brand:"Farmacias Ahumada","brand:wikidata":"Q5856069","brand:wikipedia":"es:Farmacias Ahumada",healthcare:"pharmacy",name:"Farmacias Ahumada"},reference:{key:"amenity",value:"pharmacy"},matchScore:2,suggestion:true},"amenity/pharmacy/Farmacias Cruz Verde":{name:"Farmacias Cruz Verde",icon:"maki-pharmacy",geometry:["point","area"],tags:{amenity:"pharmacy","brand:wikidata":"Q5856071"},addTags:{amenity:"pharmacy",brand:"Farmacias Cruz Verde","brand:wikidata":"Q5856071","brand:wikipedia":"es:Farmacias Cruz Verde",healthcare:"pharmacy",name:"Farmacias Cruz Verde"},removeTags:{amenity:"pharmacy",brand:"Farmacias Cruz Verde","brand:wikidata":"Q5856071","brand:wikipedia":"es:Farmacias Cruz Verde",healthcare:"pharmacy",name:"Farmacias Cruz Verde"},reference:{key:"amenity",value:"pharmacy"},matchScore:2,suggestion:true},"amenity/pharmacy/Farmacias SalcoBrand":{name:"Farmacias SalcoBrand",icon:"maki-pharmacy",geometry:["point","area"],tags:{amenity:"pharmacy","brand:wikidata":"Q2877054"},addTags:{amenity:"pharmacy",brand:"Farmacias SalcoBrand","brand:wikidata":"Q2877054","brand:wikipedia":"es:Farmacias Salcobrand",healthcare:"pharmacy",name:"Farmacias SalcoBrand"},removeTags:{amenity:"pharmacy",brand:"Farmacias SalcoBrand","brand:wikidata":"Q2877054","brand:wikipedia":"es:Farmacias Salcobrand",healthcare:"pharmacy",name:"Farmacias SalcoBrand"},reference:{key:"amenity",value:"pharmacy"},matchScore:2,suggestion:true},"amenity/pharmacy/Farmacity":{name:"Farmacity",icon:"maki-pharmacy",geometry:["point","area"],tags:{amenity:"pharmacy","brand:wikidata":"Q5856076"},addTags:{amenity:"pharmacy",brand:"Farmacity","brand:wikidata":"Q5856076","brand:wikipedia":"es:Farmacity",healthcare:"pharmacy",name:"Farmacity"},removeTags:{amenity:"pharmacy",brand:"Farmacity","brand:wikidata":"Q5856076","brand:wikipedia":"es:Farmacity",healthcare:"pharmacy",name:"Farmacity"},reference:{key:"amenity",value:"pharmacy"},matchScore:2,suggestion:true},"amenity/pharmacy/Farmahorro":{name:"Farmahorro",icon:"maki-pharmacy",geometry:["point","area"],tags:{amenity:"pharmacy","brand:wikidata":"Q20015002"},addTags:{amenity:"pharmacy",brand:"Farmahorro","brand:wikidata":"Q20015002","brand:wikipedia":"es:Farmahorro",healthcare:"pharmacy",name:"Farmahorro"},removeTags:{amenity:"pharmacy",brand:"Farmahorro","brand:wikidata":"Q20015002","brand:wikipedia":"es:Farmahorro",healthcare:"pharmacy",name:"Farmahorro"},reference:{key:"amenity",value:"pharmacy"},matchScore:2,suggestion:true},"amenity/pharmacy/Farmatodo":{name:"Farmatodo",icon:"maki-pharmacy",geometry:["point","area"],tags:{amenity:"pharmacy","brand:wikidata":"Q5856092"},addTags:{amenity:"pharmacy",brand:"Farmatodo","brand:wikidata":"Q5856092","brand:wikipedia":"es:Farmatodo",healthcare:"pharmacy",name:"Farmatodo"},removeTags:{amenity:"pharmacy",brand:"Farmatodo","brand:wikidata":"Q5856092","brand:wikipedia":"es:Farmatodo",healthcare:"pharmacy",name:"Farmatodo"},reference:{key:"amenity",value:"pharmacy"},matchScore:2,suggestion:true},"amenity/pharmacy/Gintarinė vaistinė":{name:"Gintarinė vaistinė",icon:"maki-pharmacy",geometry:["point","area"],tags:{amenity:"pharmacy","brand:wikidata":"Q15857801"},addTags:{amenity:"pharmacy",brand:"Gintarinė vaistinė","brand:wikidata":"Q15857801","brand:wikipedia":"lt:Gintarinė vaistinė",healthcare:"pharmacy",name:"Gintarinė vaistinė"},removeTags:{amenity:"pharmacy",brand:"Gintarinė vaistinė","brand:wikidata":"Q15857801","brand:wikipedia":"lt:Gintarinė vaistinė",healthcare:"pharmacy",name:"Gintarinė vaistinė"},reference:{key:"amenity",value:"pharmacy"},matchScore:2,suggestion:true},"amenity/pharmacy/Guardian":{name:"Guardian",icon:"maki-pharmacy",geometry:["point","area"],tags:{amenity:"pharmacy","brand:wikidata":"Q13646560"},addTags:{amenity:"pharmacy",brand:"Guardian","brand:wikidata":"Q13646560","brand:wikipedia":"en:Mannings",healthcare:"pharmacy",name:"Guardian"},removeTags:{amenity:"pharmacy",brand:"Guardian","brand:wikidata":"Q13646560","brand:wikipedia":"en:Mannings",healthcare:"pharmacy",name:"Guardian"},reference:{key:"amenity",value:"pharmacy"},matchScore:2,suggestion:true},"amenity/pharmacy/H-E-B Pharmacy":{name:"H-E-B Pharmacy",icon:"maki-pharmacy",geometry:["point","area"],tags:{amenity:"pharmacy","brand:wikidata":"Q830621"},addTags:{amenity:"pharmacy",brand:"H-E-B Pharmacy","brand:wikidata":"Q830621","brand:wikipedia":"en:H-E-B",healthcare:"pharmacy",name:"H-E-B Pharmacy"},removeTags:{amenity:"pharmacy",brand:"H-E-B Pharmacy","brand:wikidata":"Q830621","brand:wikipedia":"en:H-E-B",healthcare:"pharmacy",name:"H-E-B Pharmacy"},reference:{key:"amenity",value:"pharmacy"},matchScore:2,suggestion:true},"amenity/pharmacy/Hy-Vee Pharmacy":{name:"Hy-Vee Pharmacy",icon:"maki-pharmacy",geometry:["point","area"],tags:{amenity:"pharmacy","brand:wikidata":"Q1639719"},addTags:{amenity:"pharmacy",brand:"Hy-Vee Pharmacy","brand:wikidata":"Q1639719","brand:wikipedia":"en:Hy-Vee",healthcare:"pharmacy",name:"Hy-Vee Pharmacy"},removeTags:{amenity:"pharmacy",brand:"Hy-Vee Pharmacy","brand:wikidata":"Q1639719","brand:wikipedia":"en:Hy-Vee",healthcare:"pharmacy",name:"Hy-Vee Pharmacy"},reference:{key:"amenity",value:"pharmacy"},matchScore:2,suggestion:true},"amenity/pharmacy/Inkafarma":{name:"Inkafarma",icon:"maki-pharmacy",geometry:["point","area"],tags:{amenity:"pharmacy","brand:wikidata":"Q10997748"},addTags:{amenity:"pharmacy",brand:"Inkafarma","brand:wikidata":"Q10997748","brand:wikipedia":"es:Inkafarma",healthcare:"pharmacy",name:"Inkafarma"},removeTags:{amenity:"pharmacy",brand:"Inkafarma","brand:wikidata":"Q10997748","brand:wikipedia":"es:Inkafarma",healthcare:"pharmacy",name:"Inkafarma"},reference:{key:"amenity",value:"pharmacy"},matchScore:2,suggestion:true},"amenity/pharmacy/Jean Coutu":{name:"Jean Coutu",icon:"maki-pharmacy",geometry:["point","area"],tags:{amenity:"pharmacy","brand:wikidata":"Q3117457"},addTags:{amenity:"pharmacy",brand:"Jean Coutu","brand:wikidata":"Q3117457","brand:wikipedia":"en:Jean Coutu Group",healthcare:"pharmacy",name:"Jean Coutu"},removeTags:{amenity:"pharmacy",brand:"Jean Coutu","brand:wikidata":"Q3117457","brand:wikipedia":"en:Jean Coutu Group",healthcare:"pharmacy",name:"Jean Coutu"},reference:{key:"amenity",value:"pharmacy"},matchScore:2,suggestion:true},"amenity/pharmacy/Kimia Farma":{name:"Kimia Farma",icon:"maki-pharmacy",geometry:["point","area"],tags:{amenity:"pharmacy","brand:wikidata":"Q11264892"},addTags:{amenity:"pharmacy",brand:"Kimia Farma","brand:wikidata":"Q11264892","brand:wikipedia":"en:Kimia Farma",healthcare:"pharmacy",name:"Kimia Farma"},removeTags:{amenity:"pharmacy",brand:"Kimia Farma","brand:wikidata":"Q11264892","brand:wikipedia":"en:Kimia Farma",healthcare:"pharmacy",name:"Kimia Farma"},reference:{key:"amenity",value:"pharmacy"},matchScore:2,suggestion:true},"amenity/pharmacy/Kinney Drugs":{name:"Kinney Drugs",icon:"maki-pharmacy",geometry:["point","area"],tags:{amenity:"pharmacy","brand:wikidata":"Q6414090"},addTags:{amenity:"pharmacy",brand:"Kinney Drugs","brand:wikidata":"Q6414090","brand:wikipedia":"en:Kinney Drugs",healthcare:"pharmacy",name:"Kinney Drugs"},removeTags:{amenity:"pharmacy",brand:"Kinney Drugs","brand:wikidata":"Q6414090","brand:wikipedia":"en:Kinney Drugs",healthcare:"pharmacy",name:"Kinney Drugs"},reference:{key:"amenity",value:"pharmacy"},matchScore:2,suggestion:true},"amenity/pharmacy/Lloyds Pharmacy":{name:"Lloyds Pharmacy",icon:"maki-pharmacy",geometry:["point","area"],tags:{amenity:"pharmacy","brand:wikidata":"Q6662870"},addTags:{amenity:"pharmacy",brand:"Lloyds Pharmacy","brand:wikidata":"Q6662870","brand:wikipedia":"en:LloydsPharmacy",healthcare:"pharmacy",name:"Lloyds Pharmacy"},removeTags:{amenity:"pharmacy",brand:"Lloyds Pharmacy","brand:wikidata":"Q6662870","brand:wikipedia":"en:LloydsPharmacy",healthcare:"pharmacy",name:"Lloyds Pharmacy"},reference:{key:"amenity",value:"pharmacy"},matchScore:2,suggestion:true},"amenity/pharmacy/London Drugs":{name:"London Drugs",icon:"maki-pharmacy",geometry:["point","area"],tags:{amenity:"pharmacy","brand:wikidata":"Q3258955"},addTags:{amenity:"pharmacy",brand:"London Drugs","brand:wikidata":"Q3258955","brand:wikipedia":"en:London Drugs",healthcare:"pharmacy",name:"London Drugs"},removeTags:{amenity:"pharmacy",brand:"London Drugs","brand:wikidata":"Q3258955","brand:wikipedia":"en:London Drugs",healthcare:"pharmacy",name:"London Drugs"},reference:{key:"amenity",value:"pharmacy"},matchScore:2,suggestion:true},"amenity/pharmacy/Mercury Drug":{name:"Mercury Drug",icon:"maki-pharmacy",geometry:["point","area"],tags:{amenity:"pharmacy","brand:wikidata":"Q6818610"},addTags:{amenity:"pharmacy",brand:"Mercury Drug","brand:wikidata":"Q6818610","brand:wikipedia":"en:Mercury Drug",healthcare:"pharmacy",name:"Mercury Drug"},removeTags:{amenity:"pharmacy",brand:"Mercury Drug","brand:wikidata":"Q6818610","brand:wikipedia":"en:Mercury Drug",healthcare:"pharmacy",name:"Mercury Drug"},reference:{key:"amenity",value:"pharmacy"},matchScore:2,suggestion:true},"amenity/pharmacy/Mēness aptieka":{name:"Mēness aptieka",icon:"maki-pharmacy",geometry:["point","area"],tags:{amenity:"pharmacy","brand:wikidata":"Q57583051"},addTags:{amenity:"pharmacy",brand:"Mēness aptieka","brand:wikidata":"Q57583051",healthcare:"pharmacy",name:"Mēness aptieka"},removeTags:{amenity:"pharmacy",brand:"Mēness aptieka","brand:wikidata":"Q57583051",healthcare:"pharmacy",name:"Mēness aptieka"},reference:{key:"amenity",value:"pharmacy"},matchScore:2,suggestion:true},"amenity/pharmacy/Pague Menos":{name:"Pague Menos",icon:"maki-pharmacy",geometry:["point","area"],tags:{amenity:"pharmacy","brand:wikidata":"Q7124466"},addTags:{amenity:"pharmacy",brand:"Pague Menos","brand:wikidata":"Q7124466","brand:wikipedia":"pt:Pague Menos",healthcare:"pharmacy",name:"Pague Menos"},removeTags:{amenity:"pharmacy",brand:"Pague Menos","brand:wikidata":"Q7124466","brand:wikipedia":"pt:Pague Menos",healthcare:"pharmacy",name:"Pague Menos"},reference:{key:"amenity",value:"pharmacy"},matchScore:2,suggestion:true},"amenity/pharmacy/Pharmacie Principale":{name:"Pharmacie Principale",icon:"maki-pharmacy",geometry:["point","area"],tags:{amenity:"pharmacy","brand:wikidata":"Q1547749"},addTags:{amenity:"pharmacy",brand:"Pharmacie Principale","brand:wikidata":"Q1547749","brand:wikipedia":"fr:PP Holding Group",healthcare:"pharmacy",name:"Pharmacie Principale"},removeTags:{amenity:"pharmacy",brand:"Pharmacie Principale","brand:wikidata":"Q1547749","brand:wikipedia":"fr:PP Holding Group",healthcare:"pharmacy",name:"Pharmacie Principale"},reference:{key:"amenity",value:"pharmacy"},matchScore:2,suggestion:true},"amenity/pharmacy/Pharmaprix":{name:"Pharmaprix",icon:"maki-pharmacy",geometry:["point","area"],tags:{amenity:"pharmacy","brand:wikidata":"Q1820137"},addTags:{amenity:"pharmacy",brand:"Pharmaprix","brand:wikidata":"Q1820137","brand:wikipedia":"en:Shoppers Drug Mart",healthcare:"pharmacy",name:"Pharmaprix"},removeTags:{amenity:"pharmacy",brand:"Pharmaprix","brand:wikidata":"Q1820137","brand:wikipedia":"en:Shoppers Drug Mart",healthcare:"pharmacy",name:"Pharmaprix"},reference:{key:"amenity",value:"pharmacy"},matchScore:2,suggestion:true},"amenity/pharmacy/Pharmasave":{name:"Pharmasave",icon:"maki-pharmacy",geometry:["point","area"],tags:{amenity:"pharmacy","brand:wikidata":"Q17093822"},addTags:{amenity:"pharmacy",brand:"Pharmasave","brand:wikidata":"Q17093822","brand:wikipedia":"en:Pharmasave",healthcare:"pharmacy",name:"Pharmasave"},removeTags:{amenity:"pharmacy",brand:"Pharmasave","brand:wikidata":"Q17093822","brand:wikipedia":"en:Pharmasave",healthcare:"pharmacy",name:"Pharmasave"},reference:{key:"amenity",value:"pharmacy"},matchScore:2,suggestion:true},"amenity/pharmacy/Rexall":{name:"Rexall",icon:"maki-pharmacy",geometry:["point","area"],tags:{amenity:"pharmacy","brand:wikidata":"Q7319360"},addTags:{amenity:"pharmacy",brand:"Rexall","brand:wikidata":"Q7319360","brand:wikipedia":"en:Rexall",healthcare:"pharmacy",name:"Rexall"},removeTags:{amenity:"pharmacy",brand:"Rexall","brand:wikidata":"Q7319360","brand:wikipedia":"en:Rexall",healthcare:"pharmacy",name:"Rexall"},reference:{key:"amenity",value:"pharmacy"},matchScore:2,suggestion:true},"amenity/pharmacy/Rite Aid":{name:"Rite Aid",icon:"maki-pharmacy",geometry:["point","area"],tags:{amenity:"pharmacy","brand:wikidata":"Q3433273"},addTags:{amenity:"pharmacy",brand:"Rite Aid","brand:wikidata":"Q3433273","brand:wikipedia":"en:Rite Aid",healthcare:"pharmacy",name:"Rite Aid"},removeTags:{amenity:"pharmacy",brand:"Rite Aid","brand:wikidata":"Q3433273","brand:wikipedia":"en:Rite Aid",healthcare:"pharmacy",name:"Rite Aid"},reference:{key:"amenity",value:"pharmacy"},matchScore:2,suggestion:true},"amenity/pharmacy/SalcoBrand":{name:"SalcoBrand",icon:"maki-pharmacy",geometry:["point","area"],tags:{amenity:"pharmacy","brand:wikidata":"Q2877054"},addTags:{amenity:"pharmacy",brand:"SalcoBrand","brand:wikidata":"Q2877054","brand:wikipedia":"es:Farmacias Salcobrand",healthcare:"pharmacy",name:"SalcoBrand"},removeTags:{amenity:"pharmacy",brand:"SalcoBrand","brand:wikidata":"Q2877054","brand:wikipedia":"es:Farmacias Salcobrand",healthcare:"pharmacy",name:"SalcoBrand"},reference:{key:"amenity",value:"pharmacy"},matchScore:2,suggestion:true},"amenity/pharmacy/Sensiblu":{name:"Sensiblu",icon:"maki-pharmacy",geometry:["point","area"],tags:{amenity:"pharmacy","brand:wikidata":"Q12740640"},addTags:{amenity:"pharmacy",brand:"Sensiblu","brand:wikidata":"Q12740640","brand:wikipedia":"ro:Sensiblu",healthcare:"pharmacy",name:"Sensiblu"},removeTags:{amenity:"pharmacy",brand:"Sensiblu","brand:wikidata":"Q12740640","brand:wikipedia":"ro:Sensiblu",healthcare:"pharmacy",name:"Sensiblu"},reference:{key:"amenity",value:"pharmacy"},matchScore:2,suggestion:true},"amenity/pharmacy/Shoppers Drug Mart":{name:"Shoppers Drug Mart",icon:"maki-pharmacy",geometry:["point","area"],tags:{amenity:"pharmacy","brand:wikidata":"Q1820137"},addTags:{amenity:"pharmacy",brand:"Shoppers Drug Mart","brand:wikidata":"Q1820137","brand:wikipedia":"en:Shoppers Drug Mart",healthcare:"pharmacy",name:"Shoppers Drug Mart"},removeTags:{amenity:"pharmacy",brand:"Shoppers Drug Mart","brand:wikidata":"Q1820137","brand:wikipedia":"en:Shoppers Drug Mart",healthcare:"pharmacy",name:"Shoppers Drug Mart"},reference:{key:"amenity",value:"pharmacy"},matchScore:2,suggestion:true},"amenity/pharmacy/South Star Drug":{name:"South Star Drug",icon:"maki-pharmacy",geometry:["point","area"],tags:{amenity:"pharmacy","brand:wikidata":"Q7568544"},addTags:{amenity:"pharmacy",brand:"South Star Drug","brand:wikidata":"Q7568544","brand:wikipedia":"en:South Star Drug",healthcare:"pharmacy",name:"South Star Drug"},removeTags:{amenity:"pharmacy",brand:"South Star Drug","brand:wikidata":"Q7568544","brand:wikipedia":"en:South Star Drug",healthcare:"pharmacy",name:"South Star Drug"},reference:{key:"amenity",value:"pharmacy"},matchScore:2,suggestion:true},"amenity/pharmacy/Superdrug":{name:"Superdrug",icon:"maki-pharmacy",geometry:["point","area"],tags:{amenity:"pharmacy","brand:wikidata":"Q7643261"},addTags:{amenity:"pharmacy",brand:"Superdrug","brand:wikidata":"Q7643261","brand:wikipedia":"en:Superdrug",healthcare:"pharmacy",name:"Superdrug"},removeTags:{amenity:"pharmacy",brand:"Superdrug","brand:wikidata":"Q7643261","brand:wikipedia":"en:Superdrug",healthcare:"pharmacy",name:"Superdrug"},reference:{key:"amenity",value:"pharmacy"},matchScore:2,suggestion:true},"amenity/pharmacy/Uniprix":{name:"Uniprix",icon:"maki-pharmacy",geometry:["point","area"],tags:{amenity:"pharmacy","brand:wikidata":"Q683265"},addTags:{amenity:"pharmacy",brand:"Uniprix","brand:wikidata":"Q683265","brand:wikipedia":"en:Uniprix",healthcare:"pharmacy",name:"Uniprix"},removeTags:{amenity:"pharmacy",brand:"Uniprix","brand:wikidata":"Q683265","brand:wikipedia":"en:Uniprix",healthcare:"pharmacy",name:"Uniprix"},reference:{key:"amenity",value:"pharmacy"},matchScore:2,suggestion:true},"amenity/pharmacy/Walgreens":{name:"Walgreens",icon:"maki-pharmacy",geometry:["point","area"],tags:{amenity:"pharmacy","brand:wikidata":"Q1591889"},addTags:{amenity:"pharmacy",brand:"Walgreens","brand:wikidata":"Q1591889","brand:wikipedia":"en:Walgreens",healthcare:"pharmacy",name:"Walgreens"},removeTags:{amenity:"pharmacy",brand:"Walgreens","brand:wikidata":"Q1591889","brand:wikipedia":"en:Walgreens",healthcare:"pharmacy",name:"Walgreens"},reference:{key:"amenity",value:"pharmacy"},matchScore:2,suggestion:true},"amenity/pharmacy/Walmart Pharmacy":{name:"Walmart Pharmacy",icon:"maki-pharmacy",geometry:["point","area"],tags:{amenity:"pharmacy","brand:wikidata":"Q483551"},addTags:{amenity:"pharmacy",brand:"Walmart","brand:wikidata":"Q483551","brand:wikipedia":"en:Walmart",healthcare:"pharmacy",name:"Walmart Pharmacy",operator:"Walmart","operator:wikidata":"Q483551","operator:wikipedia":"en:Walmart"},removeTags:{amenity:"pharmacy",brand:"Walmart","brand:wikidata":"Q483551","brand:wikipedia":"en:Walmart",healthcare:"pharmacy",name:"Walmart Pharmacy",operator:"Walmart","operator:wikidata":"Q483551","operator:wikipedia":"en:Walmart"},reference:{key:"amenity",value:"pharmacy"},matchScore:2,suggestion:true},"amenity/pharmacy/Watsons":{name:"Watsons",icon:"maki-pharmacy",geometry:["point","area"],tags:{amenity:"pharmacy","brand:wikidata":"Q7974785"},addTags:{amenity:"pharmacy",brand:"Watsons","brand:wikidata":"Q7974785","brand:wikipedia":"en:Watsons",healthcare:"pharmacy",name:"Watsons"},removeTags:{amenity:"pharmacy",brand:"Watsons","brand:wikidata":"Q7974785","brand:wikipedia":"en:Watsons",healthcare:"pharmacy",name:"Watsons"},reference:{key:"amenity",value:"pharmacy"},matchScore:2,suggestion:true},"amenity/pharmacy/Well Pharmacy":{name:"Well Pharmacy",icon:"maki-pharmacy",geometry:["point","area"],tags:{amenity:"pharmacy","brand:wikidata":"Q7726524"},addTags:{amenity:"pharmacy",brand:"Well Pharmacy","brand:wikidata":"Q7726524","brand:wikipedia":"en:Well Pharmacy",healthcare:"pharmacy",name:"Well Pharmacy"},removeTags:{amenity:"pharmacy",brand:"Well Pharmacy","brand:wikidata":"Q7726524","brand:wikipedia":"en:Well Pharmacy",healthcare:"pharmacy",name:"Well Pharmacy"},reference:{key:"amenity",value:"pharmacy"},matchScore:2,suggestion:true},"amenity/pharmacy/Ригла":{name:"Ригла",icon:"maki-pharmacy",geometry:["point","area"],tags:{amenity:"pharmacy","brand:wikidata":"Q4394431"},addTags:{amenity:"pharmacy",brand:"Ригла","brand:wikidata":"Q4394431","brand:wikipedia":"ru:Ригла",healthcare:"pharmacy",name:"Ригла"},removeTags:{amenity:"pharmacy",brand:"Ригла","brand:wikidata":"Q4394431","brand:wikipedia":"ru:Ригла",healthcare:"pharmacy",name:"Ригла"},reference:{key:"amenity",value:"pharmacy"},matchScore:2,suggestion:true},"amenity/pharmacy/くすりの福太郎":{name:"くすりの福太郎",icon:"maki-pharmacy",geometry:["point","area"],tags:{amenity:"pharmacy","brand:wikidata":"Q17214460"},addTags:{amenity:"pharmacy",brand:"くすりの福太郎","brand:wikidata":"Q17214460","brand:wikipedia":"ja:くすりの福太郎",healthcare:"pharmacy",name:"くすりの福太郎"},removeTags:{amenity:"pharmacy",brand:"くすりの福太郎","brand:wikidata":"Q17214460","brand:wikipedia":"ja:くすりの福太郎",healthcare:"pharmacy",name:"くすりの福太郎"},reference:{key:"amenity",value:"pharmacy"},matchScore:2,suggestion:true},"amenity/pharmacy/ウエルシア":{name:"ウエルシア",icon:"maki-pharmacy",geometry:["point","area"],tags:{amenity:"pharmacy","brand:wikidata":"Q11288684"},addTags:{amenity:"pharmacy",brand:"ウエルシア","brand:wikidata":"Q11288684","brand:wikipedia":"ja:ウエルシアホールディングス",healthcare:"pharmacy",name:"ウエルシア"},removeTags:{amenity:"pharmacy",brand:"ウエルシア","brand:wikidata":"Q11288684","brand:wikipedia":"ja:ウエルシアホールディングス",healthcare:"pharmacy",name:"ウエルシア"},reference:{key:"amenity",value:"pharmacy"},matchScore:2,suggestion:true},"amenity/pharmacy/ウエルシア薬局":{name:"ウエルシア薬局",icon:"maki-pharmacy",geometry:["point","area"],tags:{amenity:"pharmacy","brand:wikidata":"Q11288687"},addTags:{amenity:"pharmacy",brand:"ウエルシア薬局","brand:wikidata":"Q11288687","brand:wikipedia":"ja:ウエルシア薬局",healthcare:"pharmacy",name:"ウエルシア薬局"},removeTags:{amenity:"pharmacy",brand:"ウエルシア薬局","brand:wikidata":"Q11288687","brand:wikipedia":"ja:ウエルシア薬局",healthcare:"pharmacy",name:"ウエルシア薬局"},reference:{key:"amenity",value:"pharmacy"},matchScore:2,suggestion:true},"amenity/pharmacy/カワチ薬品":{name:"カワチ薬品",icon:"maki-pharmacy",geometry:["point","area"],tags:{amenity:"pharmacy","brand:wikidata":"Q11295397"},addTags:{amenity:"pharmacy",brand:"カワチ薬品","brand:wikidata":"Q11295397","brand:wikipedia":"ja:カワチ薬品",healthcare:"pharmacy",name:"カワチ薬品"},removeTags:{amenity:"pharmacy",brand:"カワチ薬品","brand:wikidata":"Q11295397","brand:wikipedia":"ja:カワチ薬品",healthcare:"pharmacy",name:"カワチ薬品"},reference:{key:"amenity",value:"pharmacy"},matchScore:2,suggestion:true},"amenity/pharmacy/キリン堂":{name:"キリン堂",icon:"maki-pharmacy",geometry:["point","area"],tags:{amenity:"pharmacy","brand:wikidata":"Q11297751"},addTags:{amenity:"pharmacy",brand:"キリン堂","brand:wikidata":"Q11297751","brand:wikipedia":"ja:キリン堂",healthcare:"pharmacy",name:"キリン堂"},removeTags:{amenity:"pharmacy",brand:"キリン堂","brand:wikidata":"Q11297751","brand:wikipedia":"ja:キリン堂",healthcare:"pharmacy",name:"キリン堂"},reference:{key:"amenity",value:"pharmacy"},matchScore:2,suggestion:true},"amenity/pharmacy/クリエイト":{name:"クリエイト",icon:"maki-pharmacy",geometry:["point","area"],tags:{amenity:"pharmacy","brand:wikidata":"Q11299163"},addTags:{amenity:"pharmacy",brand:"クリエイト","brand:wikidata":"Q11299163","brand:wikipedia":"ja:クリエイトSDホールディングス",healthcare:"pharmacy",name:"クリエイト"},removeTags:{amenity:"pharmacy",brand:"クリエイト","brand:wikidata":"Q11299163","brand:wikipedia":"ja:クリエイトSDホールディングス",healthcare:"pharmacy",name:"クリエイト"},reference:{key:"amenity",value:"pharmacy"},matchScore:2,suggestion:true},"amenity/pharmacy/ココカラファイン":{name:"ココカラファイン",icon:"maki-pharmacy",geometry:["point","area"],tags:{amenity:"pharmacy","brand:wikidata":"Q11301948"},addTags:{amenity:"pharmacy",brand:"ココカラファイン","brand:wikidata":"Q11301948","brand:wikipedia":"ja:ココカラファイン",healthcare:"pharmacy",name:"ココカラファイン"},removeTags:{amenity:"pharmacy",brand:"ココカラファイン","brand:wikidata":"Q11301948","brand:wikipedia":"ja:ココカラファイン",healthcare:"pharmacy",name:"ココカラファイン"},reference:{key:"amenity",value:"pharmacy"},matchScore:2,suggestion:true},"amenity/pharmacy/サンドラッグ":{name:"サンドラッグ",icon:"maki-pharmacy",geometry:["point","area"],tags:{amenity:"pharmacy","brand:wikidata":"Q11305867"},addTags:{amenity:"pharmacy",brand:"サンドラッグ","brand:wikidata":"Q11305867","brand:wikipedia":"ja:サンドラッグ",healthcare:"pharmacy",name:"サンドラッグ"},removeTags:{amenity:"pharmacy",brand:"サンドラッグ","brand:wikidata":"Q11305867","brand:wikipedia":"ja:サンドラッグ",healthcare:"pharmacy",name:"サンドラッグ"},reference:{key:"amenity",value:"pharmacy"},matchScore:2,suggestion:true},"amenity/pharmacy/セイジョー":{name:"セイジョー",icon:"maki-pharmacy",geometry:["point","area"],tags:{amenity:"pharmacy","brand:wikidata":"Q11314133"},addTags:{amenity:"pharmacy",brand:"セイジョー","brand:wikidata":"Q11314133","brand:wikipedia":"ja:セイジョー",healthcare:"pharmacy",name:"セイジョー"},removeTags:{amenity:"pharmacy",brand:"セイジョー","brand:wikidata":"Q11314133","brand:wikipedia":"ja:セイジョー",healthcare:"pharmacy",name:"セイジョー"},reference:{key:"amenity",value:"pharmacy"},matchScore:2,suggestion:true},"amenity/pharmacy/ダイコクドラッグ":{name:"ダイコクドラッグ",icon:"maki-pharmacy",geometry:["point","area"],tags:{amenity:"pharmacy","brand:wikidata":"Q11316754"},addTags:{amenity:"pharmacy",brand:"ダイコクドラッグ","brand:wikidata":"Q11316754","brand:wikipedia":"ja:ダイコク",healthcare:"pharmacy",name:"ダイコクドラッグ"},removeTags:{amenity:"pharmacy",brand:"ダイコクドラッグ","brand:wikidata":"Q11316754","brand:wikipedia":"ja:ダイコク",healthcare:"pharmacy",name:"ダイコクドラッグ"},reference:{key:"amenity",value:"pharmacy"},matchScore:2,suggestion:true},"amenity/pharmacy/マツモトキヨシ":{name:"マツモトキヨシ",icon:"maki-pharmacy",geometry:["point","area"],tags:{amenity:"pharmacy","brand:wikidata":"Q8014776"},addTags:{amenity:"pharmacy",brand:"マツモトキヨシ","brand:wikidata":"Q8014776","brand:wikipedia":"ja:マツモトキヨシ",healthcare:"pharmacy",name:"マツモトキヨシ"},removeTags:{amenity:"pharmacy",brand:"マツモトキヨシ","brand:wikidata":"Q8014776","brand:wikipedia":"ja:マツモトキヨシ",healthcare:"pharmacy",name:"マツモトキヨシ"},reference:{key:"amenity",value:"pharmacy"},matchScore:2,suggestion:true},"amenity/post_box/Deutsche Post":{name:"Deutsche Post",icon:"temaki-post_box",geometry:["point","vertex"],tags:{amenity:"post_box","brand:wikidata":"Q157645"},addTags:{amenity:"post_box",brand:"Deutsche Post","brand:wikidata":"Q157645","brand:wikipedia":"en:Deutsche Post",name:"Deutsche Post"},removeTags:{amenity:"post_box",brand:"Deutsche Post","brand:wikidata":"Q157645","brand:wikipedia":"en:Deutsche Post",name:"Deutsche Post"},matchScore:2,suggestion:true},"amenity/post_box/USPS":{name:"USPS",icon:"temaki-post_box",geometry:["point","vertex"],tags:{amenity:"post_box","brand:wikidata":"Q668687"},addTags:{amenity:"post_box",brand:"USPS","brand:wikidata":"Q668687","brand:wikipedia":"en:United States Postal Service",name:"USPS",operator:"USPS"},removeTags:{amenity:"post_box",brand:"USPS","brand:wikidata":"Q668687","brand:wikipedia":"en:United States Postal Service",name:"USPS",operator:"USPS"},matchScore:2,suggestion:true},"amenity/post_office/Australia Post":{name:"Australia Post",icon:"maki-post",geometry:["point","area"],tags:{amenity:"post_office","brand:wikidata":"Q1142936"},addTags:{amenity:"post_office",brand:"Australia Post","brand:wikidata":"Q1142936","brand:wikipedia":"en:Australia Post",name:"Australia Post"},removeTags:{amenity:"post_office",brand:"Australia Post","brand:wikidata":"Q1142936","brand:wikipedia":"en:Australia Post",name:"Australia Post"},matchScore:2,suggestion:true},"amenity/post_office/CTT":{name:"CTT",icon:"maki-post",geometry:["point","area"],tags:{amenity:"post_office","brand:wikidata":"Q909429"},addTags:{amenity:"post_office",brand:"CTT","brand:wikidata":"Q909429","brand:wikipedia":"en:CTT (Macau)",name:"CTT"},removeTags:{amenity:"post_office",brand:"CTT","brand:wikidata":"Q909429","brand:wikipedia":"en:CTT (Macau)",name:"CTT"},matchScore:2,suggestion:true},"amenity/post_office/Canada Post":{name:"Canada Post",icon:"maki-post",geometry:["point","area"],tags:{amenity:"post_office","brand:wikidata":"Q1032001"},addTags:{amenity:"post_office",brand:"Canada Post","brand:wikidata":"Q1032001","brand:wikipedia":"en:Canada Post",name:"Canada Post"},removeTags:{amenity:"post_office",brand:"Canada Post","brand:wikidata":"Q1032001","brand:wikipedia":"en:Canada Post",name:"Canada Post"},matchScore:2,suggestion:true},"amenity/post_office/Correios":{name:"Correios",icon:"maki-post",geometry:["point","area"],tags:{amenity:"post_office","brand:wikidata":"Q3375004"},addTags:{amenity:"post_office",brand:"Correios","brand:wikidata":"Q3375004","brand:wikipedia":"en:Correios",name:"Correios"},removeTags:{amenity:"post_office",brand:"Correios","brand:wikidata":"Q3375004","brand:wikipedia":"en:Correios",name:"Correios"},matchScore:2,suggestion:true},"amenity/post_office/Correo Argentino":{name:"Correo Argentino",icon:"maki-post",geometry:["point","area"],tags:{amenity:"post_office","brand:wikidata":"Q4036566"},addTags:{amenity:"post_office",brand:"Correo Argentino","brand:wikidata":"Q4036566","brand:wikipedia":"en:Correo Argentino",name:"Correo Argentino"},removeTags:{amenity:"post_office",brand:"Correo Argentino","brand:wikidata":"Q4036566","brand:wikipedia":"en:Correo Argentino",name:"Correo Argentino"},matchScore:2,suggestion:true},"amenity/post_office/Correos de Chile":{name:"Correos de Chile",icon:"maki-post",geometry:["point","area"],tags:{amenity:"post_office","brand:wikidata":"Q5172893"},addTags:{amenity:"post_office",brand:"Correos de Chile","brand:wikidata":"Q5172893","brand:wikipedia":"en:Correos de Chile",name:"Correos de Chile"},removeTags:{amenity:"post_office",brand:"Correos de Chile","brand:wikidata":"Q5172893","brand:wikipedia":"en:Correos de Chile",name:"Correos de Chile"},matchScore:2,suggestion:true},"amenity/post_office/Correos de Costa Rica":{name:"Correos de Costa Rica",icon:"maki-post",geometry:["point","area"],tags:{amenity:"post_office","brand:wikidata":"Q5172894"},addTags:{amenity:"post_office",brand:"Correos de Costa Rica","brand:wikidata":"Q5172894","brand:wikipedia":"en:Correos de Costa Rica",name:"Correos de Costa Rica"},removeTags:{amenity:"post_office",brand:"Correos de Costa Rica","brand:wikidata":"Q5172894","brand:wikipedia":"en:Correos de Costa Rica",name:"Correos de Costa Rica"},matchScore:2,suggestion:true},"amenity/post_office/DHL":{name:"DHL",icon:"maki-post",geometry:["point","area"],tags:{amenity:"post_office","brand:wikidata":"Q489815"},addTags:{amenity:"post_office",brand:"DHL","brand:wikidata":"Q489815","brand:wikipedia":"en:DHL Express",name:"DHL",operator:"DHL"},removeTags:{amenity:"post_office",brand:"DHL","brand:wikidata":"Q489815","brand:wikipedia":"en:DHL Express",name:"DHL",operator:"DHL"},matchScore:2,suggestion:true},"amenity/post_office/DPD Paketshop":{name:"DPD Paketshop",icon:"maki-post",geometry:["point","area"],tags:{amenity:"post_office","brand:wikidata":"Q541030"},addTags:{amenity:"post_office",brand:"DPD Paketshop","brand:wikidata":"Q541030","brand:wikipedia":"en:DPDgroup",name:"DPD Paketshop"},removeTags:{amenity:"post_office",brand:"DPD Paketshop","brand:wikidata":"Q541030","brand:wikipedia":"en:DPDgroup",name:"DPD Paketshop"},matchScore:2,suggestion:true},"amenity/post_office/Deutsche Post":{name:"Deutsche Post",icon:"maki-post",geometry:["point","area"],tags:{amenity:"post_office","brand:wikidata":"Q157645"},addTags:{amenity:"post_office",brand:"Deutsche Post","brand:wikidata":"Q157645","brand:wikipedia":"en:Deutsche Post",name:"Deutsche Post"},removeTags:{amenity:"post_office",brand:"Deutsche Post","brand:wikidata":"Q157645","brand:wikipedia":"en:Deutsche Post",name:"Deutsche Post"},matchScore:2,suggestion:true},"amenity/post_office/Fancourier":{name:"Fancourier",icon:"maki-post",geometry:["point","area"],tags:{amenity:"post_office","brand:wikidata":"Q12727984"},addTags:{amenity:"post_office",brand:"Fancourier","brand:wikidata":"Q12727984","brand:wikipedia":"ro:FAN Courier Express",name:"Fancourier"},removeTags:{amenity:"post_office",brand:"Fancourier","brand:wikidata":"Q12727984","brand:wikipedia":"ro:FAN Courier Express",name:"Fancourier"},matchScore:2,suggestion:true},"amenity/post_office/FedEx":{name:"FedEx",icon:"maki-post",geometry:["point","area"],tags:{amenity:"post_office","brand:wikidata":"Q459477"},addTags:{amenity:"post_office",brand:"FedEx","brand:wikidata":"Q459477","brand:wikipedia":"en:FedEx",name:"FedEx"},removeTags:{amenity:"post_office",brand:"FedEx","brand:wikidata":"Q459477","brand:wikipedia":"en:FedEx",name:"FedEx"},matchScore:2,suggestion:true},"amenity/post_office/Hermes Paketshop":{name:"Hermes Paketshop",icon:"maki-post",geometry:["point","area"],tags:{amenity:"post_office","brand:wikidata":"Q1613532"},addTags:{amenity:"post_office",brand:"Hermes Paketshop","brand:wikidata":"Q1613532","brand:wikipedia":"en:Hermes Group",name:"Hermes Paketshop"},removeTags:{amenity:"post_office",brand:"Hermes Paketshop","brand:wikidata":"Q1613532","brand:wikipedia":"en:Hermes Group",name:"Hermes Paketshop"},matchScore:2,suggestion:true},"amenity/post_office/LBC":{name:"LBC",icon:"maki-post",geometry:["point","area"],tags:{amenity:"post_office","brand:wikidata":"Q17075584"},addTags:{amenity:"post_office",brand:"LBC","brand:wikidata":"Q17075584","brand:wikipedia":"en:LBC Express",name:"LBC"},removeTags:{amenity:"post_office",brand:"LBC","brand:wikidata":"Q17075584","brand:wikipedia":"en:LBC Express",name:"LBC"},matchScore:2,suggestion:true},"amenity/post_office/La Poste":{name:"La Poste",icon:"maki-post",geometry:["point","area"],tags:{amenity:"post_office","brand:wikidata":"Q373724"},addTags:{amenity:"post_office",brand:"La Poste","brand:wikidata":"Q373724","brand:wikipedia":"fr:La Poste (entreprise française)",name:"La Poste"},removeTags:{amenity:"post_office",brand:"La Poste","brand:wikidata":"Q373724","brand:wikipedia":"fr:La Poste (entreprise française)",name:"La Poste"},matchScore:2,suggestion:true},"amenity/post_office/MRW":{name:"MRW",icon:"maki-post",geometry:["point","area"],tags:{amenity:"post_office","brand:wikidata":"Q23767821"},addTags:{amenity:"post_office",brand:"MRW","brand:wikidata":"Q23767821","brand:wikipedia":"es:MRW",name:"MRW"},removeTags:{amenity:"post_office",brand:"MRW","brand:wikidata":"Q23767821","brand:wikipedia":"es:MRW",name:"MRW"},matchScore:2,suggestion:true},"amenity/post_office/Oficina de Correos":{name:"Oficina de Correos",icon:"maki-post",geometry:["point","area"],tags:{amenity:"post_office","brand:wikidata":"Q776605"},addTags:{amenity:"post_office",brand:"Oficina de Correos","brand:wikidata":"Q776605","brand:wikipedia":"es:Correos (España)",name:"Oficina de Correos"},removeTags:{amenity:"post_office",brand:"Oficina de Correos","brand:wikidata":"Q776605","brand:wikipedia":"es:Correos (España)",name:"Oficina de Correos"},matchScore:2,suggestion:true},"amenity/post_office/Poczta Polska":{name:"Poczta Polska",icon:"maki-post",geometry:["point","area"],tags:{amenity:"post_office","brand:wikidata":"Q168833"},addTags:{amenity:"post_office",brand:"Poczta Polska","brand:wikidata":"Q168833","brand:wikipedia":"en:Poczta Polska",name:"Poczta Polska"},removeTags:{amenity:"post_office",brand:"Poczta Polska","brand:wikidata":"Q168833","brand:wikipedia":"en:Poczta Polska",name:"Poczta Polska"},matchScore:2,suggestion:true},"amenity/post_office/Poste Italiane":{name:"Poste Italiane",icon:"maki-post",geometry:["point","area"],tags:{amenity:"post_office","brand:wikidata":"Q495026"},addTags:{amenity:"post_office",brand:"Poste Italiane","brand:wikidata":"Q495026","brand:wikipedia":"en:Poste italiane",name:"Poste Italiane"},removeTags:{amenity:"post_office",brand:"Poste Italiane","brand:wikidata":"Q495026","brand:wikipedia":"en:Poste italiane",name:"Poste Italiane"},matchScore:2,suggestion:true},"amenity/post_office/Slovenská pošta":{name:"Slovenská pošta",icon:"maki-post",geometry:["point","area"],tags:{amenity:"post_office","brand:wikidata":"Q1191849"},addTags:{amenity:"post_office",brand:"Slovenská pošta","brand:wikidata":"Q1191849","brand:wikipedia":"en:Slovenská pošta",name:"Slovenská pošta"},removeTags:{amenity:"post_office",brand:"Slovenská pošta","brand:wikidata":"Q1191849","brand:wikipedia":"en:Slovenská pošta",name:"Slovenská pošta"},matchScore:2,suggestion:true},"amenity/post_office/The UPS Store":{name:"The UPS Store",icon:"maki-post",geometry:["point","area"],tags:{amenity:"post_office","brand:wikidata":"Q7771029"},addTags:{amenity:"post_office",brand:"The UPS Store","brand:wikidata":"Q7771029","brand:wikipedia":"en:The UPS Store",name:"The UPS Store"},removeTags:{amenity:"post_office",brand:"The UPS Store","brand:wikidata":"Q7771029","brand:wikipedia":"en:The UPS Store",name:"The UPS Store"},matchScore:2,suggestion:true},"amenity/post_office/US Post Office":{name:"US Post Office",icon:"maki-post",geometry:["point","area"],tags:{amenity:"post_office","brand:wikidata":"Q668687"},addTags:{amenity:"post_office",brand:"US Post Office","brand:wikidata":"Q668687","brand:wikipedia":"en:United States Postal Service",name:"US Post Office",operator:"USPS"},removeTags:{amenity:"post_office",brand:"US Post Office","brand:wikidata":"Q668687","brand:wikipedia":"en:United States Postal Service",name:"US Post Office",operator:"USPS"},matchScore:2,suggestion:true},"amenity/post_office/ΕΛΤΑ":{name:"ΕΛΤΑ",icon:"maki-post",geometry:["point","area"],tags:{amenity:"post_office","brand:wikidata":"Q1275135"},addTags:{amenity:"post_office",brand:"ΕΛΤΑ","brand:wikidata":"Q1275135","brand:wikipedia":"el:Ελληνικά Ταχυδρομεία",name:"ΕΛΤΑ"},removeTags:{amenity:"post_office",brand:"ΕΛΤΑ","brand:wikidata":"Q1275135","brand:wikipedia":"el:Ελληνικά Ταχυδρομεία",name:"ΕΛΤΑ"},matchScore:2,suggestion:true},"amenity/post_office/Белпочта":{name:"Белпочта",icon:"maki-post",geometry:["point","area"],tags:{amenity:"post_office","brand:wikidata":"Q2662336"},addTags:{amenity:"post_office",brand:"Белпочта","brand:wikidata":"Q2662336","brand:wikipedia":"en:Belposhta",name:"Белпочта"},removeTags:{amenity:"post_office",brand:"Белпочта","brand:wikidata":"Q2662336","brand:wikipedia":"en:Belposhta",name:"Белпочта"},matchScore:2,suggestion:true},"amenity/post_office/Казпочта":{name:"Казпочта",icon:"maki-post",geometry:["point","area"],tags:{amenity:"post_office","brand:wikidata":"Q746263"},addTags:{amenity:"post_office",brand:"Казпочта","brand:wikidata":"Q746263","brand:wikipedia":"ru:Казпочта",name:"Казпочта"},removeTags:{amenity:"post_office",brand:"Казпочта","brand:wikidata":"Q746263","brand:wikipedia":"ru:Казпочта",name:"Казпочта"},matchScore:2,suggestion:true},"amenity/post_office/Нова Пошта №1":{name:"Нова Пошта №1",icon:"maki-post",geometry:["point","area"],tags:{amenity:"post_office","brand:wikidata":"Q12133863"},addTags:{amenity:"post_office",brand:"Нова Пошта №1","brand:wikidata":"Q12133863","brand:wikipedia":"uk:Нова пошта",name:"Нова Пошта №1"},removeTags:{amenity:"post_office",brand:"Нова Пошта №1","brand:wikidata":"Q12133863","brand:wikipedia":"uk:Нова пошта",name:"Нова Пошта №1"},matchScore:2,suggestion:true},"amenity/post_office/Почта России":{name:"Почта России",icon:"maki-post",geometry:["point","area"],tags:{amenity:"post_office","brand:wikidata":"Q1502763"},addTags:{amenity:"post_office",brand:"Почта России","brand:wikidata":"Q1502763","brand:wikipedia":"ru:Почта России",name:"Почта России"},removeTags:{amenity:"post_office",brand:"Почта России","brand:wikidata":"Q1502763","brand:wikipedia":"ru:Почта России",name:"Почта России"},matchScore:2,suggestion:true},"amenity/post_office/Укрпошта":{name:"Укрпошта",icon:"maki-post",geometry:["point","area"],tags:{amenity:"post_office","brand:wikidata":"Q2470783"},addTags:{amenity:"post_office",brand:"Укрпошта","brand:wikidata":"Q2470783","brand:wikipedia":"en:Ukrposhta",name:"Укрпошта"},removeTags:{amenity:"post_office",brand:"Укрпошта","brand:wikidata":"Q2470783","brand:wikipedia":"en:Ukrposhta",name:"Укрпошта"},matchScore:2,suggestion:true},"amenity/post_office/中国邮政":{name:"中国邮政",icon:"maki-post",geometry:["point","area"],tags:{amenity:"post_office","brand:wikidata":"Q1066476"},addTags:{amenity:"post_office",brand:"中国邮政","brand:en":"China Post","brand:wikidata":"Q1066476","brand:wikipedia":"en:China Post",name:"中国邮政","name:en":"China Post"},removeTags:{amenity:"post_office",brand:"中国邮政","brand:en":"China Post","brand:wikidata":"Q1066476","brand:wikipedia":"en:China Post",name:"中国邮政","name:en":"China Post"},matchScore:2,suggestion:true},"amenity/public_bookcase/Little Free Library":{name:"Little Free Library",icon:"maki-library",geometry:["point","area"],tags:{amenity:"public_bookcase","brand:wikidata":"Q6650101"},addTags:{amenity:"public_bookcase",brand:"Little Free Library","brand:wikidata":"Q6650101","brand:wikipedia":"en:Little Free Library",name:"Little Free Library"},removeTags:{amenity:"public_bookcase",brand:"Little Free Library","brand:wikidata":"Q6650101","brand:wikipedia":"en:Little Free Library",name:"Little Free Library"},matchScore:2,suggestion:true},"amenity/restaurant/100 Montaditos":{name:"100 Montaditos",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant","brand:wikidata":"Q8355805"},addTags:{amenity:"restaurant",brand:"100 Montaditos","brand:wikidata":"Q8355805","brand:wikipedia":"en:Cervecería 100 Montaditos",name:"100 Montaditos"},removeTags:{amenity:"restaurant",brand:"100 Montaditos","brand:wikidata":"Q8355805","brand:wikipedia":"en:Cervecería 100 Montaditos",name:"100 Montaditos"},matchScore:2,suggestion:true},"amenity/restaurant/italian/ASK Italian":{name:"ASK Italian",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant",cuisine:"italian","brand:wikidata":"Q4807056"},addTags:{amenity:"restaurant",brand:"ASK Italian","brand:wikipedia":"en:ASK Italian","brand:wikidata":"Q4807056",cuisine:"italian",name:"ASK Italian"},removeTags:{amenity:"restaurant",brand:"ASK Italian","brand:wikipedia":"en:ASK Italian","brand:wikidata":"Q4807056",cuisine:"italian",name:"ASK Italian"},reference:{key:"cuisine",value:"italian"},matchScore:2,suggestion:true},"amenity/restaurant/american/Applebee’s Neighborhood Grill & Bar":{name:"Applebee’s Neighborhood Grill & Bar",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant",cuisine:"american","brand:wikidata":"Q621532"},addTags:{amenity:"restaurant",brand:"Applebee’s Neighborhood Grill & Bar","brand:wikidata":"Q621532","brand:wikipedia":"en:Applebee's",cuisine:"american",name:"Applebee’s Neighborhood Grill & Bar"},removeTags:{amenity:"restaurant",brand:"Applebee’s Neighborhood Grill & Bar","brand:wikidata":"Q621532","brand:wikipedia":"en:Applebee's",cuisine:"american",name:"Applebee’s Neighborhood Grill & Bar"},reference:{key:"cuisine",value:"american"},matchScore:2,suggestion:true},"amenity/restaurant/Autogrill":{name:"Autogrill",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant","brand:wikidata":"Q786790"},addTags:{amenity:"restaurant",brand:"Autogrill","brand:wikidata":"Q786790","brand:wikipedia":"en:Autogrill",name:"Autogrill"},removeTags:{amenity:"restaurant",brand:"Autogrill","brand:wikidata":"Q786790","brand:wikipedia":"en:Autogrill",name:"Autogrill"},matchScore:2,suggestion:true},"amenity/restaurant/Bella Italia":{name:"Bella Italia",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant","brand:wikidata":"Q4883362"},addTags:{amenity:"restaurant",brand:"Bella Italia","brand:wikidata":"Q4883362","brand:wikipedia":"en:Bella Italia",name:"Bella Italia"},removeTags:{amenity:"restaurant",brand:"Bella Italia","brand:wikidata":"Q4883362","brand:wikipedia":"en:Bella Italia",name:"Bella Italia"},matchScore:2,suggestion:true},"amenity/restaurant/Big Boy":{name:"Big Boy",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant","brand:wikidata":"Q4386779"},addTags:{amenity:"restaurant",brand:"Big Boy","brand:wikidata":"Q4386779","brand:wikipedia":"en:Big Boy Restaurants",cuisine:"burger",name:"Big Boy"},removeTags:{amenity:"restaurant",brand:"Big Boy","brand:wikidata":"Q4386779","brand:wikipedia":"en:Big Boy Restaurants",cuisine:"burger",name:"Big Boy"},matchScore:2,suggestion:true},"amenity/restaurant/american/Black Bear Diner":{name:"Black Bear Diner",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant",cuisine:"american","brand:wikidata":"Q4920343"},addTags:{amenity:"restaurant",brand:"Black Bear Diner","brand:wikidata":"Q4920343","brand:wikipedia":"en:Black Bear Diner",cuisine:"american",name:"Black Bear Diner"},removeTags:{amenity:"restaurant",brand:"Black Bear Diner","brand:wikidata":"Q4920343","brand:wikipedia":"en:Black Bear Diner",cuisine:"american",name:"Black Bear Diner"},reference:{key:"cuisine",value:"american"},matchScore:2,suggestion:true},"amenity/restaurant/american/Bob Evans":{name:"Bob Evans",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant",cuisine:"american","brand:wikidata":"Q4932386"},addTags:{amenity:"restaurant",brand:"Bob Evans","brand:wikidata":"Q4932386","brand:wikipedia":"en:Bob Evans Restaurants",cuisine:"american",name:"Bob Evans"},removeTags:{amenity:"restaurant",brand:"Bob Evans","brand:wikidata":"Q4932386","brand:wikipedia":"en:Bob Evans Restaurants",cuisine:"american",name:"Bob Evans"},reference:{key:"cuisine",value:"american"},matchScore:2,suggestion:true},"amenity/restaurant/seafood/Bonefish Grill":{name:"Bonefish Grill",icon:"maki-restaurant-seafood",geometry:["point","area"],tags:{amenity:"restaurant",cuisine:"seafood","brand:wikidata":"Q4941599"},addTags:{amenity:"restaurant",brand:"Bonefish Grill","brand:wikidata":"Q4941599","brand:wikipedia":"en:Bonefish Grill",cuisine:"seafood",name:"Bonefish Grill"},removeTags:{amenity:"restaurant",brand:"Bonefish Grill","brand:wikidata":"Q4941599","brand:wikipedia":"en:Bonefish Grill",cuisine:"seafood",name:"Bonefish Grill"},reference:{key:"cuisine",value:"seafood"},matchScore:2,suggestion:true},"amenity/restaurant/pizza/Boston Pizza":{name:"Boston Pizza",icon:"maki-restaurant-pizza",geometry:["point","area"],tags:{amenity:"restaurant",cuisine:"pizza","brand:wikidata":"Q894578"},addTags:{amenity:"restaurant",brand:"Boston Pizza","brand:wikidata":"Q894578","brand:wikipedia":"en:Boston Pizza",cuisine:"pizza",name:"Boston Pizza"},removeTags:{amenity:"restaurant",brand:"Boston Pizza","brand:wikidata":"Q894578","brand:wikipedia":"en:Boston Pizza",cuisine:"pizza",name:"Boston Pizza"},reference:{key:"cuisine",value:"pizza"},matchScore:2,suggestion:true},"amenity/restaurant/Buffalo Grill":{name:"Buffalo Grill",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant","brand:wikidata":"Q944655"},addTags:{amenity:"restaurant",brand:"Buffalo Grill","brand:wikidata":"Q944655","brand:wikipedia":"en:Buffalo Grill",cuisine:"steak_house",name:"Buffalo Grill"},removeTags:{amenity:"restaurant",brand:"Buffalo Grill","brand:wikidata":"Q944655","brand:wikipedia":"en:Buffalo Grill",cuisine:"steak_house",name:"Buffalo Grill"},matchScore:2,suggestion:true},"amenity/restaurant/Buffalo Wild Wings":{name:"Buffalo Wild Wings",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant","brand:wikidata":"Q509255"},addTags:{amenity:"restaurant",brand:"Buffalo Wild Wings","brand:wikidata":"Q509255","brand:wikipedia":"en:Buffalo Wild Wings",cuisine:"wings",name:"Buffalo Wild Wings"},removeTags:{amenity:"restaurant",brand:"Buffalo Wild Wings","brand:wikidata":"Q509255","brand:wikipedia":"en:Buffalo Wild Wings",cuisine:"wings",name:"Buffalo Wild Wings"},matchScore:2,suggestion:true},"amenity/restaurant/mexican/Cafe Rio":{name:"Cafe Rio",icon:"fas-pepper-hot",geometry:["point","area"],tags:{amenity:"restaurant",cuisine:"mexican","brand:wikidata":"Q5017108"},addTags:{amenity:"restaurant",brand:"Cafe Rio","brand:wikidata":"Q5017108","brand:wikipedia":"en:Cafe Rio",cuisine:"mexican",name:"Cafe Rio"},removeTags:{amenity:"restaurant",brand:"Cafe Rio","brand:wikidata":"Q5017108","brand:wikipedia":"en:Cafe Rio",cuisine:"mexican",name:"Cafe Rio"},reference:{key:"cuisine",value:"mexican"},matchScore:2,suggestion:true},"amenity/restaurant/pizza/California Pizza Kitchen":{name:"California Pizza Kitchen",icon:"maki-restaurant-pizza",geometry:["point","area"],tags:{amenity:"restaurant",cuisine:"pizza","brand:wikidata":"Q15109854"},addTags:{amenity:"restaurant",brand:"California Pizza Kitchen","brand:wikidata":"Q15109854","brand:wikipedia":"en:California Pizza Kitchen",cuisine:"pizza",name:"California Pizza Kitchen"},removeTags:{amenity:"restaurant",brand:"California Pizza Kitchen","brand:wikidata":"Q15109854","brand:wikipedia":"en:California Pizza Kitchen",cuisine:"pizza",name:"California Pizza Kitchen"},reference:{key:"cuisine",value:"pizza"},matchScore:2,suggestion:true},"amenity/restaurant/italian/Carluccio's":{name:"Carluccio's",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant",cuisine:"italian","brand:wikidata":"Q25111797"},addTags:{amenity:"restaurant",brand:"Carluccio's","brand:wikidata":"Q25111797","brand:wikipedia":"en:Carluccio's Ltd",cuisine:"italian",name:"Carluccio's"},removeTags:{amenity:"restaurant",brand:"Carluccio's","brand:wikidata":"Q25111797","brand:wikipedia":"en:Carluccio's Ltd",cuisine:"italian",name:"Carluccio's"},reference:{key:"cuisine",value:"italian"},matchScore:2,suggestion:true},"amenity/restaurant/italian/Carrabba's Italian Grill":{name:"Carrabba's Italian Grill",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant",cuisine:"italian","brand:wikidata":"Q5045999"},addTags:{amenity:"restaurant",brand:"Carrabba's Italian Grill","brand:wikidata":"Q5045999","brand:wikipedia":"en:Carrabba's Italian Grill",cuisine:"italian",name:"Carrabba's Italian Grill"},removeTags:{amenity:"restaurant",brand:"Carrabba's Italian Grill","brand:wikidata":"Q5045999","brand:wikipedia":"en:Carrabba's Italian Grill",cuisine:"italian",name:"Carrabba's Italian Grill"},reference:{key:"cuisine",value:"italian"},matchScore:2,suggestion:true},"amenity/restaurant/american/Cheesecake Factory":{name:"Cheesecake Factory",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant",cuisine:"american","brand:wikidata":"Q1045842"},addTags:{amenity:"restaurant",brand:"Cheesecake Factory","brand:wikidata":"Q1045842","brand:wikipedia":"en:The Cheesecake Factory",cuisine:"american",name:"Cheesecake Factory"},removeTags:{amenity:"restaurant",brand:"Cheesecake Factory","brand:wikidata":"Q1045842","brand:wikipedia":"en:The Cheesecake Factory",cuisine:"american",name:"Cheesecake Factory"},reference:{key:"cuisine",value:"american"},matchScore:2,suggestion:true},"amenity/restaurant/Chili's":{name:"Chili's",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant","brand:wikidata":"Q1072948"},addTags:{amenity:"restaurant",brand:"Chili's","brand:wikidata":"Q1072948","brand:wikipedia":"en:Chili's",cuisine:"tex-mex",name:"Chili's"},removeTags:{amenity:"restaurant",brand:"Chili's","brand:wikidata":"Q1072948","brand:wikipedia":"en:Chili's",cuisine:"tex-mex",name:"Chili's"},matchScore:2,suggestion:true},"amenity/restaurant/Chiquito":{name:"Chiquito",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant","brand:wikidata":"Q5101775"},addTags:{amenity:"restaurant",brand:"Chiquito","brand:wikidata":"Q5101775","brand:wikipedia":"en:Chiquito (restaurant)",cuisine:"tex-mex",name:"Chiquito"},removeTags:{amenity:"restaurant",brand:"Chiquito","brand:wikidata":"Q5101775","brand:wikipedia":"en:Chiquito (restaurant)",cuisine:"tex-mex",name:"Chiquito"},matchScore:2,suggestion:true},"amenity/restaurant/pizza/Chuck E. Cheese's":{name:"Chuck E. Cheese's",icon:"maki-restaurant-pizza",geometry:["point","area"],tags:{amenity:"restaurant",cuisine:"pizza","brand:wikidata":"Q2438391"},addTags:{amenity:"restaurant",brand:"Chuck E. Cheese's","brand:wikidata":"Q2438391","brand:wikipedia":"en:Chuck E. Cheese's",cuisine:"pizza",name:"Chuck E. Cheese's"},removeTags:{amenity:"restaurant",brand:"Chuck E. Cheese's","brand:wikidata":"Q2438391","brand:wikipedia":"en:Chuck E. Cheese's",cuisine:"pizza",name:"Chuck E. Cheese's"},reference:{key:"cuisine",value:"pizza"},matchScore:2,suggestion:true},"amenity/restaurant/pizza/Cici's Pizza":{name:"Cici's Pizza",icon:"maki-restaurant-pizza",geometry:["point","area"],tags:{amenity:"restaurant",cuisine:"pizza","brand:wikidata":"Q2972189"},addTags:{amenity:"restaurant",brand:"Cici's Pizza","brand:wikidata":"Q2972189","brand:wikipedia":"en:Cicis",cuisine:"pizza",name:"Cici's Pizza"},removeTags:{amenity:"restaurant",brand:"Cici's Pizza","brand:wikidata":"Q2972189","brand:wikipedia":"en:Cicis",cuisine:"pizza",name:"Cici's Pizza"},reference:{key:"cuisine",value:"pizza"},matchScore:2,suggestion:true},"amenity/restaurant/french/Courtepaille":{name:"Courtepaille",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant",cuisine:"french","brand:wikidata":"Q3116688"},addTags:{amenity:"restaurant",brand:"Courtepaille","brand:wikidata":"Q3116688","brand:wikipedia":"fr:Grill Courtepaille",cuisine:"french",name:"Courtepaille"},removeTags:{amenity:"restaurant",brand:"Courtepaille","brand:wikidata":"Q3116688","brand:wikipedia":"fr:Grill Courtepaille",cuisine:"french",name:"Courtepaille"},reference:{key:"cuisine",value:"french"},matchScore:2,suggestion:true},"amenity/restaurant/american/Cracker Barrel":{name:"Cracker Barrel",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant",cuisine:"american","brand:wikidata":"Q4492609"},addTags:{amenity:"restaurant",brand:"Cracker Barrel","brand:wikidata":"Q4492609","brand:wikipedia":"en:Cracker Barrel",cuisine:"american",name:"Cracker Barrel"},removeTags:{amenity:"restaurant",brand:"Cracker Barrel","brand:wikidata":"Q4492609","brand:wikipedia":"en:Cracker Barrel",cuisine:"american",name:"Cracker Barrel"},reference:{key:"cuisine",value:"american"},matchScore:2,suggestion:true},"amenity/restaurant/american/Denny's":{name:"Denny's",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant",cuisine:"american","brand:wikidata":"Q1189695"},addTags:{amenity:"restaurant",brand:"Denny's","brand:wikidata":"Q1189695","brand:wikipedia":"en:Denny's",cuisine:"american",name:"Denny's"},removeTags:{amenity:"restaurant",brand:"Denny's","brand:wikidata":"Q1189695","brand:wikipedia":"en:Denny's",cuisine:"american",name:"Denny's"},reference:{key:"cuisine",value:"american"},matchScore:2,suggestion:true},"amenity/restaurant/Dickey's Barbecue Pit":{name:"Dickey's Barbecue Pit",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant","brand:wikidata":"Q19880747"},addTags:{amenity:"restaurant",brand:"Dickey's Barbecue Pit","brand:wikidata":"Q19880747","brand:wikipedia":"en:Dickey's Barbecue Pit",cuisine:"barbecue",name:"Dickey's Barbecue Pit"},removeTags:{amenity:"restaurant",brand:"Dickey's Barbecue Pit","brand:wikidata":"Q19880747","brand:wikipedia":"en:Dickey's Barbecue Pit",cuisine:"barbecue",name:"Dickey's Barbecue Pit"},matchScore:2,suggestion:true},"amenity/restaurant/italian/East Side Mario's":{name:"East Side Mario's",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant",cuisine:"italian","brand:wikidata":"Q5329375"},addTags:{amenity:"restaurant",brand:"East Side Mario's","brand:wikidata":"Q5329375","brand:wikipedia":"en:East Side Mario's",cuisine:"italian",name:"East Side Mario's"},removeTags:{amenity:"restaurant",brand:"East Side Mario's","brand:wikidata":"Q5329375","brand:wikipedia":"en:East Side Mario's",cuisine:"italian",name:"East Side Mario's"},reference:{key:"cuisine",value:"italian"},matchScore:2,suggestion:true},"amenity/restaurant/Famous Dave's":{name:"Famous Dave's",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant","brand:wikidata":"Q5433448"},addTags:{amenity:"restaurant",brand:"Famous Dave's","brand:wikidata":"Q5433448","brand:wikipedia":"en:Famous Dave's",cuisine:"barbecue",name:"Famous Dave's"},removeTags:{amenity:"restaurant",brand:"Famous Dave's","brand:wikidata":"Q5433448","brand:wikipedia":"en:Famous Dave's",cuisine:"barbecue",name:"Famous Dave's"},matchScore:2,suggestion:true},"amenity/restaurant/french/Flunch":{name:"Flunch",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant",cuisine:"french","brand:wikidata":"Q629326"},addTags:{amenity:"restaurant",brand:"Flunch","brand:wikidata":"Q629326","brand:wikipedia":"en:Flunch",cuisine:"french",name:"Flunch"},removeTags:{amenity:"restaurant",brand:"Flunch","brand:wikidata":"Q629326","brand:wikipedia":"en:Flunch",cuisine:"french",name:"Flunch"},reference:{key:"cuisine",value:"french"},matchScore:2,suggestion:true},"amenity/restaurant/american/Foster's Hollywood":{name:"Foster's Hollywood",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant",cuisine:"american","brand:wikidata":"Q5864366"},addTags:{amenity:"restaurant",brand:"Foster's Hollywood","brand:wikidata":"Q5864366","brand:wikipedia":"en:Foster's Hollywood",cuisine:"american",name:"Foster's Hollywood"},removeTags:{amenity:"restaurant",brand:"Foster's Hollywood","brand:wikidata":"Q5864366","brand:wikipedia":"en:Foster's Hollywood",cuisine:"american",name:"Foster's Hollywood"},reference:{key:"cuisine",value:"american"},matchScore:2,suggestion:true},"amenity/restaurant/italian/Frankie & Benny's":{name:"Frankie & Benny's",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant",cuisine:"italian","brand:wikidata":"Q5490892"},addTags:{amenity:"restaurant",brand:"Frankie & Benny's","brand:wikidata":"Q5490892","brand:wikipedia":"en:Frankie & Benny's",cuisine:"italian",name:"Frankie & Benny's"},removeTags:{amenity:"restaurant",brand:"Frankie & Benny's","brand:wikidata":"Q5490892","brand:wikipedia":"en:Frankie & Benny's",cuisine:"italian",name:"Frankie & Benny's"},reference:{key:"cuisine",value:"italian"},matchScore:2,suggestion:true},"amenity/restaurant/Freshii":{name:"Freshii",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant","brand:wikidata":"Q5503051"},addTags:{amenity:"restaurant",brand:"Freshii","brand:wikidata":"Q5503051","brand:wikipedia":"en:Freshii",cuisine:"salad",name:"Freshii"},removeTags:{amenity:"restaurant",brand:"Freshii","brand:wikidata":"Q5503051","brand:wikipedia":"en:Freshii",cuisine:"salad",name:"Freshii"},matchScore:2,suggestion:true},"amenity/restaurant/american/Friendly's":{name:"Friendly's",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant",cuisine:"american","brand:wikidata":"Q1464513"},addTags:{amenity:"restaurant",brand:"Friendly's","brand:wikidata":"Q1464513","brand:wikipedia":"en:Friendly's",cuisine:"american",name:"Friendly's"},removeTags:{amenity:"restaurant",brand:"Friendly's","brand:wikidata":"Q1464513","brand:wikipedia":"en:Friendly's",cuisine:"american",name:"Friendly's"},reference:{key:"cuisine",value:"american"},matchScore:2,suggestion:true},"amenity/restaurant/Fuddruckers":{name:"Fuddruckers",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant","brand:wikidata":"Q5507056"},addTags:{amenity:"restaurant",brand:"Fuddruckers","brand:wikidata":"Q5507056","brand:wikipedia":"en:Fuddruckers",cuisine:"burger",name:"Fuddruckers"},removeTags:{amenity:"restaurant",brand:"Fuddruckers","brand:wikidata":"Q5507056","brand:wikipedia":"en:Fuddruckers",cuisine:"burger",name:"Fuddruckers"},matchScore:2,suggestion:true},"amenity/restaurant/american/Golden Corral":{name:"Golden Corral",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant",cuisine:"american","brand:wikidata":"Q4039560"},addTags:{amenity:"restaurant",brand:"Golden Corral","brand:wikidata":"Q4039560","brand:wikipedia":"en:Golden Corral",cuisine:"american",name:"Golden Corral"},removeTags:{amenity:"restaurant",brand:"Golden Corral","brand:wikidata":"Q4039560","brand:wikipedia":"en:Golden Corral",cuisine:"american",name:"Golden Corral"},reference:{key:"cuisine",value:"american"},matchScore:2,suggestion:true},"amenity/restaurant/Gourmet Burger Kitchen":{name:"Gourmet Burger Kitchen",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant","brand:wikidata":"Q5588445"},addTags:{amenity:"restaurant",brand:"Gourmet Burger Kitchen","brand:wikidata":"Q5588445","brand:wikipedia":"en:Gourmet Burger Kitchen",cuisine:"burger",name:"Gourmet Burger Kitchen"},removeTags:{amenity:"restaurant",brand:"Gourmet Burger Kitchen","brand:wikidata":"Q5588445","brand:wikipedia":"en:Gourmet Burger Kitchen",cuisine:"burger",name:"Gourmet Burger Kitchen"},matchScore:2,suggestion:true},"amenity/restaurant/american/Hard Rock Cafe":{name:"Hard Rock Cafe",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant",cuisine:"american","brand:wikidata":"Q918151"},addTags:{amenity:"restaurant",brand:"Hard Rock Cafe","brand:wikidata":"Q918151","brand:wikipedia":"en:Hard Rock Cafe",cuisine:"american",name:"Hard Rock Cafe"},removeTags:{amenity:"restaurant",brand:"Hard Rock Cafe","brand:wikidata":"Q918151","brand:wikipedia":"en:Hard Rock Cafe",cuisine:"american",name:"Hard Rock Cafe"},reference:{key:"cuisine",value:"american"},matchScore:2,suggestion:true},"amenity/restaurant/american/Harvester":{name:"Harvester",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant",cuisine:"american","brand:wikidata":"Q5676915"},addTags:{amenity:"restaurant",brand:"Harvester","brand:wikidata":"Q5676915","brand:wikipedia":"en:Harvester (restaurant)",cuisine:"american",name:"Harvester"},removeTags:{amenity:"restaurant",brand:"Harvester","brand:wikidata":"Q5676915","brand:wikipedia":"en:Harvester (restaurant)",cuisine:"american",name:"Harvester"},reference:{key:"cuisine",value:"american"},matchScore:2,suggestion:true},"amenity/restaurant/Hippopotamus":{name:"Hippopotamus",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant","brand:wikidata":"Q3136174"},addTags:{amenity:"restaurant",brand:"Hippopotamus","brand:wikidata":"Q3136174","brand:wikipedia":"fr:Hippopotamus (restaurant)",cuisine:"steak_house",name:"Hippopotamus"},removeTags:{amenity:"restaurant",brand:"Hippopotamus","brand:wikidata":"Q3136174","brand:wikipedia":"fr:Hippopotamus (restaurant)",cuisine:"steak_house",name:"Hippopotamus"},matchScore:2,suggestion:true},"amenity/restaurant/Hooters":{name:"Hooters",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant","brand:wikidata":"Q1025921"},addTags:{amenity:"restaurant",brand:"Hooters","brand:wikidata":"Q1025921","brand:wikipedia":"en:Hooters",cuisine:"burger",name:"Hooters"},removeTags:{amenity:"restaurant",brand:"Hooters","brand:wikidata":"Q1025921","brand:wikipedia":"en:Hooters",cuisine:"burger",name:"Hooters"},matchScore:2,suggestion:true},"amenity/restaurant/american/Huddle House":{name:"Huddle House",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant",cuisine:"american","brand:wikidata":"Q5928324"},addTags:{amenity:"restaurant",brand:"Huddle House","brand:wikidata":"Q5928324","brand:wikipedia":"en:Huddle House",cuisine:"american",name:"Huddle House"},removeTags:{amenity:"restaurant",brand:"Huddle House","brand:wikidata":"Q5928324","brand:wikipedia":"en:Huddle House",cuisine:"american",name:"Huddle House"},reference:{key:"cuisine",value:"american"},matchScore:2,suggestion:true},"amenity/restaurant/IHOP":{name:"IHOP",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant","brand:wikidata":"Q1185675"},addTags:{amenity:"restaurant",brand:"IHOP","brand:wikidata":"Q1185675","brand:wikipedia":"en:IHOP",cuisine:"pancake",name:"IHOP"},removeTags:{amenity:"restaurant",brand:"IHOP","brand:wikidata":"Q1185675","brand:wikipedia":"en:IHOP",cuisine:"pancake",name:"IHOP"},matchScore:2,suggestion:true},"amenity/restaurant/american/IL Патио":{name:"IL Патио",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant",cuisine:"american","brand:wikidata":"Q4397763"},addTags:{amenity:"restaurant",brand:"IL Патио","brand:wikidata":"Q4397763","brand:wikipedia":"en:Росинтер",cuisine:"american",name:"IL Патио"},removeTags:{amenity:"restaurant",brand:"IL Патио","brand:wikidata":"Q4397763","brand:wikipedia":"en:Росинтер",cuisine:"american",name:"IL Патио"},reference:{key:"cuisine",value:"american"},matchScore:2,suggestion:true},"amenity/restaurant/Jason's Deli":{name:"Jason's Deli",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant","brand:wikidata":"Q16997641"},addTags:{amenity:"restaurant",brand:"Jason's Deli","brand:wikidata":"Q16997641","brand:wikipedia":"en:Jason's Deli",cuisine:"sandwich",name:"Jason's Deli"},removeTags:{amenity:"restaurant",brand:"Jason's Deli","brand:wikidata":"Q16997641","brand:wikipedia":"en:Jason's Deli",cuisine:"sandwich",name:"Jason's Deli"},matchScore:2,suggestion:true},"amenity/restaurant/pizza/Jet's Pizza":{name:"Jet's Pizza",icon:"maki-restaurant-pizza",geometry:["point","area"],tags:{amenity:"restaurant",cuisine:"pizza","brand:wikidata":"Q16997713"},addTags:{amenity:"restaurant",brand:"Jet's Pizza","brand:wikidata":"Q16997713","brand:wikipedia":"en:Jet's Pizza",cuisine:"pizza",name:"Jet's Pizza"},removeTags:{amenity:"restaurant",brand:"Jet's Pizza","brand:wikidata":"Q16997713","brand:wikipedia":"en:Jet's Pizza",cuisine:"pizza",name:"Jet's Pizza"},reference:{key:"cuisine",value:"pizza"},matchScore:2,suggestion:true},"amenity/restaurant/seafood/Joe's Crab Shack":{name:"Joe's Crab Shack",icon:"maki-restaurant-seafood",geometry:["point","area"],tags:{amenity:"restaurant",cuisine:"seafood","brand:wikidata":"Q6208210"},addTags:{amenity:"restaurant",brand:"Joe's Crab Shack","brand:wikidata":"Q6208210","brand:wikipedia":"en:Joe's Crab Shack",cuisine:"seafood",name:"Joe's Crab Shack"},removeTags:{amenity:"restaurant",brand:"Joe's Crab Shack","brand:wikidata":"Q6208210","brand:wikipedia":"en:Joe's Crab Shack",cuisine:"seafood",name:"Joe's Crab Shack"},reference:{key:"cuisine",value:"seafood"},matchScore:2,suggestion:true},"amenity/restaurant/american/Kelsey's":{name:"Kelsey's",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant",cuisine:"american","brand:wikidata":"Q6386459"},addTags:{amenity:"restaurant",brand:"Kelsey's","brand:wikidata":"Q6386459","brand:wikipedia":"en:Kelseys Original Roadhouse",cuisine:"american",name:"Kelsey's"},removeTags:{amenity:"restaurant",brand:"Kelsey's","brand:wikidata":"Q6386459","brand:wikipedia":"en:Kelseys Original Roadhouse",cuisine:"american",name:"Kelsey's"},reference:{key:"cuisine",value:"american"},matchScore:2,suggestion:true},"amenity/restaurant/Kudu":{name:"Kudu",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant","brand:wikidata":"Q6441777"},addTags:{amenity:"restaurant",brand:"Kudu","brand:wikidata":"Q6441777","brand:wikipedia":"en:Kudu (restaurant)",cuisine:"sandwich",name:"Kudu"},removeTags:{amenity:"restaurant",brand:"Kudu","brand:wikidata":"Q6441777","brand:wikipedia":"en:Kudu (restaurant)",cuisine:"sandwich",name:"Kudu"},matchScore:2,suggestion:true},"amenity/restaurant/Logan's Roadhouse":{name:"Logan's Roadhouse",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant","brand:wikidata":"Q6666872"},addTags:{amenity:"restaurant",brand:"Logan's Roadhouse","brand:wikidata":"Q6666872","brand:wikipedia":"en:Logan's Roadhouse",cuisine:"america",name:"Logan's Roadhouse"},removeTags:{amenity:"restaurant",brand:"Logan's Roadhouse","brand:wikidata":"Q6666872","brand:wikipedia":"en:Logan's Roadhouse",cuisine:"america",name:"Logan's Roadhouse"},matchScore:2,suggestion:true},"amenity/restaurant/LongHorn Steakhouse":{name:"LongHorn Steakhouse",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant","brand:wikidata":"Q3259007"},addTags:{amenity:"restaurant",brand:"LongHorn Steakhouse","brand:wikidata":"Q3259007","brand:wikipedia":"en:LongHorn Steakhouse",cuisine:"steak_house",name:"LongHorn Steakhouse"},removeTags:{amenity:"restaurant",brand:"LongHorn Steakhouse","brand:wikidata":"Q3259007","brand:wikipedia":"en:LongHorn Steakhouse",cuisine:"steak_house",name:"LongHorn Steakhouse"},matchScore:2,suggestion:true},"amenity/restaurant/Loving Hut":{name:"Loving Hut",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant","brand:wikidata":"Q3491655"},addTags:{amenity:"restaurant",brand:"Loving Hut","brand:wikidata":"Q3491655","brand:wikipedia":"en:Loving Hut",name:"Loving Hut"},removeTags:{amenity:"restaurant",brand:"Loving Hut","brand:wikidata":"Q3491655","brand:wikipedia":"en:Loving Hut",name:"Loving Hut"},matchScore:2,suggestion:true},"amenity/restaurant/Léon de Bruxelles":{name:"Léon de Bruxelles",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant","brand:wikidata":"Q21041507"},addTags:{amenity:"restaurant",brand:"Léon de Bruxelles","brand:wikidata":"Q21041507","brand:wikipedia":"en:Léon de Bruxelles",cuisine:"friture",name:"Léon de Bruxelles"},removeTags:{amenity:"restaurant",brand:"Léon de Bruxelles","brand:wikidata":"Q21041507","brand:wikipedia":"en:Léon de Bruxelles",cuisine:"friture",name:"Léon de Bruxelles"},matchScore:2,suggestion:true},"amenity/restaurant/pizza/MOD Pizza":{name:"MOD Pizza",icon:"maki-restaurant-pizza",geometry:["point","area"],tags:{amenity:"restaurant",cuisine:"pizza","brand:wikidata":"Q19903469"},addTags:{amenity:"restaurant",brand:"MOD Pizza","brand:wikidata":"Q19903469","brand:wikipedia":"en:MOD Pizza",cuisine:"pizza",name:"MOD Pizza"},removeTags:{amenity:"restaurant",brand:"MOD Pizza","brand:wikidata":"Q19903469","brand:wikipedia":"en:MOD Pizza",cuisine:"pizza",name:"MOD Pizza"},reference:{key:"cuisine",value:"pizza"},matchScore:2,suggestion:true},"amenity/restaurant/pizza/Marco's Pizza":{name:"Marco's Pizza",icon:"maki-restaurant-pizza",geometry:["point","area"],tags:{amenity:"restaurant",cuisine:"pizza","brand:wikidata":"Q6757382"},addTags:{amenity:"restaurant",brand:"Marco's Pizza","brand:wikidata":"Q6757382","brand:wikipedia":"en:Marco's Pizza",cuisine:"pizza",name:"Marco's Pizza"},removeTags:{amenity:"restaurant",brand:"Marco's Pizza","brand:wikidata":"Q6757382","brand:wikipedia":"en:Marco's Pizza",cuisine:"pizza",name:"Marco's Pizza"},reference:{key:"cuisine",value:"pizza"},matchScore:2,suggestion:true},"amenity/restaurant/asian/Max's Restaurant":{name:"Max's Restaurant",icon:"maki-restaurant-noodle",geometry:["point","area"],tags:{amenity:"restaurant",cuisine:"asian","brand:wikidata":"Q6794477"},addTags:{amenity:"restaurant",brand:"Max's Restaurant","brand:wikidata":"Q6794477","brand:wikipedia":"en:Max's of Manila",cuisine:"asian",name:"Max's Restaurant"},removeTags:{amenity:"restaurant",brand:"Max's Restaurant","brand:wikidata":"Q6794477","brand:wikipedia":"en:Max's of Manila",cuisine:"asian",name:"Max's Restaurant"},reference:{key:"cuisine",value:"asian"},matchScore:2,suggestion:true},"amenity/restaurant/McAlister's Deli":{name:"McAlister's Deli",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant","brand:wikidata":"Q17020829"},addTags:{amenity:"restaurant",brand:"McAlister's Deli","brand:wikidata":"Q17020829","brand:wikipedia":"en:McAlister's Deli",cuisine:"sandwich",name:"McAlister's Deli"},removeTags:{amenity:"restaurant",brand:"McAlister's Deli","brand:wikidata":"Q17020829","brand:wikipedia":"en:McAlister's Deli",cuisine:"sandwich",name:"McAlister's Deli"},matchScore:2,suggestion:true},"amenity/restaurant/pizza/Mellow Mushroom":{name:"Mellow Mushroom",icon:"maki-restaurant-pizza",geometry:["point","area"],tags:{amenity:"restaurant",cuisine:"pizza","brand:wikidata":"Q17021360"},addTags:{amenity:"restaurant",brand:"Mellow Mushroom","brand:wikidata":"Q17021360","brand:wikipedia":"en:Mellow Mushroom",cuisine:"pizza",name:"Mellow Mushroom"},removeTags:{amenity:"restaurant",brand:"Mellow Mushroom","brand:wikidata":"Q17021360","brand:wikipedia":"en:Mellow Mushroom",cuisine:"pizza",name:"Mellow Mushroom"},reference:{key:"cuisine",value:"pizza"},matchScore:2,suggestion:true},"amenity/restaurant/french/Mimi's Cafe":{name:"Mimi's Cafe",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant",cuisine:"french","brand:wikidata":"Q17022081"},addTags:{amenity:"restaurant",brand:"Mimi's Cafe",cuisine:"french","brand:wikidata":"Q17022081","brand:wikipedia":"en:Mimi's Cafe",name:"Mimi's Cafe"},removeTags:{amenity:"restaurant",brand:"Mimi's Cafe",cuisine:"french","brand:wikidata":"Q17022081","brand:wikipedia":"en:Mimi's Cafe",name:"Mimi's Cafe"},reference:{key:"cuisine",value:"french"},matchScore:2,suggestion:true},"amenity/restaurant/Nando's":{name:"Nando's",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant","brand:wikidata":"Q3472954"},addTags:{amenity:"restaurant",brand:"Nando's","brand:wikidata":"Q3472954","brand:wikipedia":"en:Nando's",cuisine:"chicken;portuguese",name:"Nando's"},removeTags:{amenity:"restaurant",brand:"Nando's","brand:wikidata":"Q3472954","brand:wikipedia":"en:Nando's",cuisine:"chicken;portuguese",name:"Nando's"},matchScore:2,suggestion:true},"amenity/restaurant/Noodles & Company":{name:"Noodles & Company",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant","brand:wikidata":"Q7049673"},addTags:{amenity:"restaurant",brand:"Noodles & Company","brand:wikidata":"Q7049673","brand:wikipedia":"en:Noodles & Company",cuisine:"pasta",name:"Noodles & Company"},removeTags:{amenity:"restaurant",brand:"Noodles & Company","brand:wikidata":"Q7049673","brand:wikipedia":"en:Noodles & Company",cuisine:"pasta",name:"Noodles & Company"},matchScore:2,suggestion:true},"amenity/restaurant/american/O'Charley's":{name:"O'Charley's",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant",cuisine:"american","brand:wikidata":"Q7071703"},addTags:{amenity:"restaurant",brand:"O'Charley's","brand:wikidata":"Q7071703","brand:wikipedia":"en:O'Charley's",cuisine:"american",name:"O'Charley's"},removeTags:{amenity:"restaurant",brand:"O'Charley's","brand:wikidata":"Q7071703","brand:wikipedia":"en:O'Charley's",cuisine:"american",name:"O'Charley's"},reference:{key:"cuisine",value:"american"},matchScore:2,suggestion:true},"amenity/restaurant/pizza/Old Chicago":{name:"Old Chicago",icon:"maki-restaurant-pizza",geometry:["point","area"],tags:{amenity:"restaurant",cuisine:"pizza","brand:wikidata":"Q5180522"},addTags:{amenity:"restaurant",brand:"Old Chicago","brand:wikidata":"Q5180522","brand:wikipedia":"en:CraftWorks Restaurants & Breweries",cuisine:"pizza",name:"Old Chicago"},removeTags:{amenity:"restaurant",brand:"Old Chicago","brand:wikidata":"Q5180522","brand:wikipedia":"en:CraftWorks Restaurants & Breweries",cuisine:"pizza",name:"Old Chicago"},reference:{key:"cuisine",value:"pizza"},matchScore:2,suggestion:true},"amenity/restaurant/american/Old Wild West":{name:"Old Wild West",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant",cuisine:"american","brand:wikidata":"Q25402475"},addTags:{amenity:"restaurant",brand:"Old Wild West","brand:wikidata":"Q25402475","brand:wikipedia":"it:Old Wild West",cuisine:"american",name:"Old Wild West"},removeTags:{amenity:"restaurant",brand:"Old Wild West","brand:wikidata":"Q25402475","brand:wikipedia":"it:Old Wild West",cuisine:"american",name:"Old Wild West"},reference:{key:"cuisine",value:"american"},matchScore:2,suggestion:true},"amenity/restaurant/italian/Olive Garden":{name:"Olive Garden",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant",cuisine:"italian","brand:wikidata":"Q3045312"},addTags:{amenity:"restaurant",brand:"Olive Garden","brand:wikidata":"Q3045312","brand:wikipedia":"en:Olive Garden",cuisine:"italian",name:"Olive Garden"},removeTags:{amenity:"restaurant",brand:"Olive Garden","brand:wikidata":"Q3045312","brand:wikipedia":"en:Olive Garden",cuisine:"italian",name:"Olive Garden"},reference:{key:"cuisine",value:"italian"},matchScore:2,suggestion:true},"amenity/restaurant/american/Outback Steakhouse":{name:"Outback Steakhouse",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant",cuisine:"american","brand:wikidata":"Q1064893"},addTags:{amenity:"restaurant",brand:"Outback Steakhouse","brand:wikidata":"Q1064893","brand:wikipedia":"en:Outback Steakhouse",cuisine:"american",name:"Outback Steakhouse"},removeTags:{amenity:"restaurant",brand:"Outback Steakhouse","brand:wikidata":"Q1064893","brand:wikipedia":"en:Outback Steakhouse",cuisine:"american",name:"Outback Steakhouse"},reference:{key:"cuisine",value:"american"},matchScore:2,suggestion:true},"amenity/restaurant/asian/P.F. Chang's":{name:"P.F. Chang's",icon:"maki-restaurant-noodle",geometry:["point","area"],tags:{amenity:"restaurant",cuisine:"asian","brand:wikidata":"Q5360181"},addTags:{amenity:"restaurant",brand:"P.F. Chang's","brand:wikidata":"Q5360181","brand:wikipedia":"en:P. F. Chang's China Bistro",cuisine:"asian",name:"P.F. Chang's"},removeTags:{amenity:"restaurant",brand:"P.F. Chang's","brand:wikidata":"Q5360181","brand:wikipedia":"en:P. F. Chang's China Bistro",cuisine:"asian",name:"P.F. Chang's"},reference:{key:"cuisine",value:"asian"},matchScore:2,suggestion:true},"amenity/restaurant/asian/Pei Wei":{name:"Pei Wei",icon:"maki-restaurant-noodle",geometry:["point","area"],tags:{amenity:"restaurant",cuisine:"asian","brand:wikidata":"Q7160898"},addTags:{amenity:"restaurant",brand:"Pei Wei","brand:wikidata":"Q7160898","brand:wikipedia":"en:Pei Wei Asian Diner",cuisine:"asian",name:"Pei Wei"},removeTags:{amenity:"restaurant",brand:"Pei Wei","brand:wikidata":"Q7160898","brand:wikipedia":"en:Pei Wei Asian Diner",cuisine:"asian",name:"Pei Wei"},reference:{key:"cuisine",value:"asian"},matchScore:2,suggestion:true},"amenity/restaurant/american/Perkins":{name:"Perkins",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant",cuisine:"american","brand:wikidata":"Q7169056"},addTags:{amenity:"restaurant",brand:"Perkins","brand:wikidata":"Q7169056","brand:wikipedia":"en:Perkins Restaurant and Bakery",cuisine:"american",name:"Perkins"},removeTags:{amenity:"restaurant",brand:"Perkins","brand:wikidata":"Q7169056","brand:wikipedia":"en:Perkins Restaurant and Bakery",cuisine:"american",name:"Perkins"},reference:{key:"cuisine",value:"american"},matchScore:2,suggestion:true},"amenity/restaurant/pizza/Pizza Factory":{name:"Pizza Factory",icon:"maki-restaurant-pizza",geometry:["point","area"],tags:{amenity:"restaurant",cuisine:"pizza","brand:wikidata":"Q39054369"},addTags:{amenity:"restaurant",brand:"Pizza Factory","brand:wikidata":"Q39054369","brand:wikipedia":"en:Pizza Factory",cuisine:"pizza",name:"Pizza Factory"},removeTags:{amenity:"restaurant",brand:"Pizza Factory","brand:wikidata":"Q39054369","brand:wikipedia":"en:Pizza Factory",cuisine:"pizza",name:"Pizza Factory"},reference:{key:"cuisine",value:"pizza"},matchScore:2,suggestion:true},"amenity/restaurant/pizza/Pizza Hut":{name:"Pizza Hut",icon:"maki-restaurant-pizza",geometry:["point","area"],tags:{amenity:"restaurant",cuisine:"pizza","brand:wikidata":"Q191615"},addTags:{amenity:"restaurant",brand:"Pizza Hut","brand:wikidata":"Q191615","brand:wikipedia":"en:Pizza Hut",cuisine:"pizza",name:"Pizza Hut"},removeTags:{amenity:"restaurant",brand:"Pizza Hut","brand:wikidata":"Q191615","brand:wikipedia":"en:Pizza Hut",cuisine:"pizza",name:"Pizza Hut"},reference:{key:"cuisine",value:"pizza"},matchScore:2,suggestion:true},"amenity/restaurant/pizza/Pizza Ranch":{name:"Pizza Ranch",icon:"maki-restaurant-pizza",geometry:["point","area"],tags:{amenity:"restaurant",cuisine:"pizza","brand:wikidata":"Q7199978"},addTags:{amenity:"restaurant",brand:"Pizza Ranch","brand:wikidata":"Q7199978","brand:wikipedia":"en:Pizza Ranch",cuisine:"pizza",name:"Pizza Ranch"},removeTags:{amenity:"restaurant",brand:"Pizza Ranch","brand:wikidata":"Q7199978","brand:wikipedia":"en:Pizza Ranch",cuisine:"pizza",name:"Pizza Ranch"},reference:{key:"cuisine",value:"pizza"},matchScore:2,suggestion:true},"amenity/restaurant/pizza/PizzaExpress":{name:"PizzaExpress",icon:"maki-restaurant-pizza",geometry:["point","area"],tags:{amenity:"restaurant",cuisine:"pizza","brand:wikidata":"Q662845"},addTags:{amenity:"restaurant",brand:"PizzaExpress","brand:wikipedia":"en:PizzaExpress","brand:wikidata":"Q662845",cuisine:"pizza",name:"PizzaExpress"},removeTags:{amenity:"restaurant",brand:"PizzaExpress","brand:wikipedia":"en:PizzaExpress","brand:wikidata":"Q662845",cuisine:"pizza",name:"PizzaExpress"},reference:{key:"cuisine",value:"pizza"},matchScore:2,suggestion:true},"amenity/restaurant/french/Poivre Rouge":{name:"Poivre Rouge",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant",cuisine:"french","brand:wikidata":"Q7316076"},addTags:{amenity:"restaurant",brand:"Poivre Rouge","brand:wikidata":"Q7316076","brand:wikipedia":"fr:Poivre Rouge (restauration)",cuisine:"french",name:"Poivre Rouge"},removeTags:{amenity:"restaurant",brand:"Poivre Rouge","brand:wikidata":"Q7316076","brand:wikipedia":"fr:Poivre Rouge (restauration)",cuisine:"french",name:"Poivre Rouge"},reference:{key:"cuisine",value:"french"},matchScore:2,suggestion:true},"amenity/restaurant/italian/Prezzo":{name:"Prezzo",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant",cuisine:"italian","brand:wikidata":"Q7242489"},addTags:{amenity:"restaurant",brand:"Prezzo","brand:wikidata":"Q7242489","brand:wikipedia":"en:Prezzo (restaurant)",cuisine:"italian",name:"Prezzo"},removeTags:{amenity:"restaurant",brand:"Prezzo","brand:wikidata":"Q7242489","brand:wikipedia":"en:Prezzo (restaurant)",cuisine:"italian",name:"Prezzo"},reference:{key:"cuisine",value:"italian"},matchScore:2,suggestion:true},"amenity/restaurant/seafood/Red Lobster":{name:"Red Lobster",icon:"maki-restaurant-seafood",geometry:["point","area"],tags:{amenity:"restaurant",cuisine:"seafood","brand:wikidata":"Q846301"},addTags:{amenity:"restaurant",brand:"Red Lobster","brand:wikidata":"Q846301","brand:wikipedia":"en:Red Lobster",cuisine:"seafood",name:"Red Lobster"},removeTags:{amenity:"restaurant",brand:"Red Lobster","brand:wikidata":"Q846301","brand:wikipedia":"en:Red Lobster",cuisine:"seafood",name:"Red Lobster"},reference:{key:"cuisine",value:"seafood"},matchScore:2,suggestion:true},"amenity/restaurant/Red Robin":{name:"Red Robin",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant","brand:wikidata":"Q7304886"},addTags:{amenity:"restaurant",brand:"Red Robin","brand:wikidata":"Q7304886","brand:wikipedia":"en:Red Robin",cuisine:"burger",name:"Red Robin"},removeTags:{amenity:"restaurant",brand:"Red Robin","brand:wikidata":"Q7304886","brand:wikipedia":"en:Red Robin",cuisine:"burger",name:"Red Robin"},matchScore:2,suggestion:true},"amenity/restaurant/pizza/Round Table Pizza":{name:"Round Table Pizza",icon:"maki-restaurant-pizza",geometry:["point","area"],tags:{amenity:"restaurant",cuisine:"pizza","brand:wikidata":"Q7371139"},addTags:{amenity:"restaurant",brand:"Round Table Pizza","brand:wikidata":"Q7371139","brand:wikipedia":"en:Round Table Pizza",cuisine:"pizza",name:"Round Table Pizza"},removeTags:{amenity:"restaurant",brand:"Round Table Pizza","brand:wikidata":"Q7371139","brand:wikipedia":"en:Round Table Pizza",cuisine:"pizza",name:"Round Table Pizza"},reference:{key:"cuisine",value:"pizza"},matchScore:2,suggestion:true},"amenity/restaurant/Ruby Tuesday":{name:"Ruby Tuesday",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant","brand:wikidata":"Q7376400"},addTags:{amenity:"restaurant",brand:"Ruby Tuesday","brand:wikidata":"Q7376400","brand:wikipedia":"en:Ruby Tuesday (restaurant)",cuisine:"america",name:"Ruby Tuesday"},removeTags:{amenity:"restaurant",brand:"Ruby Tuesday","brand:wikidata":"Q7376400","brand:wikipedia":"en:Ruby Tuesday (restaurant)",cuisine:"america",name:"Ruby Tuesday"},matchScore:2,suggestion:true},"amenity/restaurant/pizza/Shakey's":{name:"Shakey's",icon:"maki-restaurant-pizza",geometry:["point","area"],tags:{amenity:"restaurant",cuisine:"pizza","brand:wikidata":"Q6134929"},addTags:{amenity:"restaurant",brand:"Shakey's","brand:wikidata":"Q6134929","brand:wikipedia":"en:Shakey's Pizza",cuisine:"pizza",name:"Shakey's"},removeTags:{amenity:"restaurant",brand:"Shakey's","brand:wikidata":"Q6134929","brand:wikipedia":"en:Shakey's Pizza",cuisine:"pizza",name:"Shakey's"},reference:{key:"cuisine",value:"pizza"},matchScore:2,suggestion:true},"amenity/restaurant/american/Shari's":{name:"Shari's",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant",cuisine:"american","brand:wikidata":"Q7489612"},addTags:{amenity:"restaurant",brand:"Shari's","brand:wikidata":"Q7489612","brand:wikipedia":"en:Shari's Cafe & Pies",cuisine:"american",name:"Shari's"},removeTags:{amenity:"restaurant",brand:"Shari's","brand:wikidata":"Q7489612","brand:wikipedia":"en:Shari's Cafe & Pies",cuisine:"american",name:"Shari's"},reference:{key:"cuisine",value:"american"},matchScore:2,suggestion:true},"amenity/restaurant/american/Shoney's":{name:"Shoney's",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant",cuisine:"american","brand:wikidata":"Q7500392"},addTags:{amenity:"restaurant",brand:"Shoney's","brand:wikidata":"Q7500392","brand:wikipedia":"en:Shoney's",cuisine:"american",name:"Shoney's"},removeTags:{amenity:"restaurant",brand:"Shoney's","brand:wikidata":"Q7500392","brand:wikipedia":"en:Shoney's",cuisine:"american",name:"Shoney's"},reference:{key:"cuisine",value:"american"},matchScore:2,suggestion:true},"amenity/restaurant/Sizzler":{name:"Sizzler",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant","brand:wikidata":"Q1848822"},addTags:{amenity:"restaurant",brand:"Sizzler","brand:wikidata":"Q1848822","brand:wikipedia":"en:Sizzler",name:"Sizzler"},removeTags:{amenity:"restaurant",brand:"Sizzler","brand:wikidata":"Q1848822","brand:wikipedia":"en:Sizzler",name:"Sizzler"},matchScore:2,suggestion:true},"amenity/restaurant/american/Skyline Chili":{name:"Skyline Chili",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant",cuisine:"american","brand:wikidata":"Q151224"},addTags:{amenity:"restaurant",brand:"Skyline Chili","brand:wikidata":"Q151224","brand:wikipedia":"en:Skyline Chili",cuisine:"american",name:"Skyline Chili"},removeTags:{amenity:"restaurant",brand:"Skyline Chili","brand:wikidata":"Q151224","brand:wikipedia":"en:Skyline Chili",cuisine:"american",name:"Skyline Chili"},reference:{key:"cuisine",value:"american"},matchScore:2,suggestion:true},"amenity/restaurant/Smitty's":{name:"Smitty's",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant","brand:wikidata":"Q7545728"},addTags:{amenity:"restaurant",brand:"Smitty's","brand:wikidata":"Q7545728","brand:wikipedia":"en:Smitty's",cuisine:"pancake",name:"Smitty's"},removeTags:{amenity:"restaurant",brand:"Smitty's","brand:wikidata":"Q7545728","brand:wikipedia":"en:Smitty's",cuisine:"pancake",name:"Smitty's"},matchScore:2,suggestion:true},"amenity/restaurant/Spur":{name:"Spur",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant","brand:wikidata":"Q7581546"},addTags:{amenity:"restaurant",brand:"Spur","brand:wikidata":"Q7581546","brand:wikipedia":"en:Spur Steak Ranches",cuisine:"steak_house",name:"Spur"},removeTags:{amenity:"restaurant",brand:"Spur","brand:wikidata":"Q7581546","brand:wikipedia":"en:Spur Steak Ranches",cuisine:"steak_house",name:"Spur"},matchScore:2,suggestion:true},"amenity/restaurant/Steak 'n Shake":{name:"Steak 'n Shake",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant","brand:wikidata":"Q7605233"},addTags:{amenity:"restaurant",brand:"Steak 'n Shake","brand:wikidata":"Q7605233","brand:wikipedia":"en:Steak 'n Shake",cuisine:"burger",name:"Steak 'n Shake"},removeTags:{amenity:"restaurant",brand:"Steak 'n Shake","brand:wikidata":"Q7605233","brand:wikipedia":"en:Steak 'n Shake",cuisine:"burger",name:"Steak 'n Shake"},matchScore:2,suggestion:true},"amenity/restaurant/Sunset Grill":{name:"Sunset Grill",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant","brand:wikidata":"Q7641264"},addTags:{amenity:"restaurant",brand:"Sunset Grill","brand:wikidata":"Q7641264","brand:wikipedia":"en:Sunset Grill (restaurant)",name:"Sunset Grill"},removeTags:{amenity:"restaurant",brand:"Sunset Grill","brand:wikidata":"Q7641264","brand:wikipedia":"en:Sunset Grill (restaurant)",name:"Sunset Grill"},matchScore:2,suggestion:true},"amenity/restaurant/Swiss Chalet":{name:"Swiss Chalet",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant","brand:wikidata":"Q2372909"},addTags:{amenity:"restaurant",brand:"Swiss Chalet","brand:wikidata":"Q2372909","brand:wikipedia":"en:Swiss Chalet",cuisine:"chicken",name:"Swiss Chalet"},removeTags:{amenity:"restaurant",brand:"Swiss Chalet","brand:wikidata":"Q2372909","brand:wikipedia":"en:Swiss Chalet",cuisine:"chicken",name:"Swiss Chalet"},matchScore:2,suggestion:true},"amenity/restaurant/american/TGI Friday's":{name:"TGI Friday's",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant",cuisine:"american","brand:wikidata":"Q1524184"},addTags:{amenity:"restaurant",brand:"TGI Friday's","brand:wikidata":"Q1524184","brand:wikipedia":"en:TGI Fridays",cuisine:"american",name:"TGI Friday's"},removeTags:{amenity:"restaurant",brand:"TGI Friday's","brand:wikidata":"Q1524184","brand:wikipedia":"en:TGI Fridays",cuisine:"american",name:"TGI Friday's"},reference:{key:"cuisine",value:"american"},matchScore:2,suggestion:true},"amenity/restaurant/Texas Roadhouse":{name:"Texas Roadhouse",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant","brand:wikidata":"Q7707945"},addTags:{amenity:"restaurant",brand:"Texas Roadhouse","brand:wikidata":"Q7707945","brand:wikipedia":"en:Texas Roadhouse",cuisine:"steak_house",name:"Texas Roadhouse"},removeTags:{amenity:"restaurant",brand:"Texas Roadhouse","brand:wikidata":"Q7707945","brand:wikipedia":"en:Texas Roadhouse",cuisine:"steak_house",name:"Texas Roadhouse"},matchScore:2,suggestion:true},"amenity/restaurant/The Cheesecake Factory":{name:"The Cheesecake Factory",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant","brand:wikidata":"Q1045842"},addTags:{amenity:"restaurant",brand:"The Cheesecake Factory","brand:wikidata":"Q1045842","brand:wikipedia":"en:The Cheesecake Factory",cuisine:"cake",name:"The Cheesecake Factory"},removeTags:{amenity:"restaurant",brand:"The Cheesecake Factory","brand:wikidata":"Q1045842","brand:wikipedia":"en:The Cheesecake Factory",cuisine:"cake",name:"The Cheesecake Factory"},matchScore:2,suggestion:true},"amenity/restaurant/The Keg":{name:"The Keg",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant","brand:wikidata":"Q7744066"},addTags:{amenity:"restaurant",brand:"The Keg","brand:wikidata":"Q7744066","brand:wikipedia":"en:The Keg",cuisine:"steak_house",name:"The Keg"},removeTags:{amenity:"restaurant",brand:"The Keg","brand:wikidata":"Q7744066","brand:wikipedia":"en:The Keg",cuisine:"steak_house",name:"The Keg"},matchScore:2,suggestion:true},"amenity/restaurant/Toby Carvery":{name:"Toby Carvery",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant","brand:wikidata":"Q7811777"},addTags:{amenity:"restaurant",brand:"Toby Carvery","brand:wikidata":"Q7811777","brand:wikipedia":"en:Toby Carvery",name:"Toby Carvery"},removeTags:{amenity:"restaurant",brand:"Toby Carvery","brand:wikidata":"Q7811777","brand:wikipedia":"en:Toby Carvery",name:"Toby Carvery"},matchScore:2,suggestion:true},"amenity/restaurant/mexican/Toks":{name:"Toks",icon:"fas-pepper-hot",geometry:["point","area"],tags:{amenity:"restaurant",cuisine:"mexican","brand:wikidata":"Q48835586"},addTags:{amenity:"restaurant",brand:"Toks","brand:wikidata":"Q48835586","brand:wikipedia":"en:Toks",cuisine:"mexican",name:"Toks"},removeTags:{amenity:"restaurant",brand:"Toks","brand:wikidata":"Q48835586","brand:wikipedia":"en:Toks",cuisine:"mexican",name:"Toks"},reference:{key:"cuisine",value:"mexican"},matchScore:2,suggestion:true},"amenity/restaurant/Tony Roma's":{name:"Tony Roma's",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant","brand:wikidata":"Q2213883"},addTags:{amenity:"restaurant",brand:"Tony Roma's","brand:wikidata":"Q2213883","brand:wikipedia":"en:Tony Roma's",cuisine:"barbecue",name:"Tony Roma's"},removeTags:{amenity:"restaurant",brand:"Tony Roma's","brand:wikidata":"Q2213883","brand:wikipedia":"en:Tony Roma's",cuisine:"barbecue",name:"Tony Roma's"},matchScore:2,suggestion:true},"amenity/restaurant/italian/Vapiano":{name:"Vapiano",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant",cuisine:"italian","brand:wikidata":"Q506252"},addTags:{amenity:"restaurant",brand:"Vapiano","brand:wikidata":"Q506252","brand:wikipedia":"en:Vapiano",cuisine:"italian",name:"Vapiano"},removeTags:{amenity:"restaurant",brand:"Vapiano","brand:wikidata":"Q506252","brand:wikipedia":"en:Vapiano",cuisine:"italian",name:"Vapiano"},reference:{key:"cuisine",value:"italian"},matchScore:2,suggestion:true},"amenity/restaurant/american/Village Inn":{name:"Village Inn",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant",cuisine:"american","brand:wikidata":"Q7930659"},addTags:{amenity:"restaurant",brand:"Village Inn","brand:wikidata":"Q7930659","brand:wikipedia":"en:Village Inn",cuisine:"american",name:"Village Inn"},removeTags:{amenity:"restaurant",brand:"Village Inn","brand:wikidata":"Q7930659","brand:wikipedia":"en:Village Inn",cuisine:"american",name:"Village Inn"},reference:{key:"cuisine",value:"american"},matchScore:2,suggestion:true},"amenity/restaurant/Vips":{name:"Vips",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant","brand:wikidata":"Q12599540"},addTags:{amenity:"restaurant",brand:"Vips","brand:wikidata":"Q12599540","brand:wikipedia":"en:VIPS (restaurant)",name:"Vips"},removeTags:{amenity:"restaurant",brand:"Vips","brand:wikidata":"Q12599540","brand:wikipedia":"en:VIPS (restaurant)",name:"Vips"},matchScore:2,suggestion:true},"amenity/restaurant/american/Waffle House":{name:"Waffle House",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant",cuisine:"american","brand:wikidata":"Q1701206"},addTags:{amenity:"restaurant",brand:"Waffle House","brand:wikidata":"Q1701206","brand:wikipedia":"en:Waffle House",cuisine:"american",name:"Waffle House"},removeTags:{amenity:"restaurant",brand:"Waffle House","brand:wikidata":"Q1701206","brand:wikipedia":"en:Waffle House",cuisine:"american",name:"Waffle House"},reference:{key:"cuisine",value:"american"},matchScore:2,suggestion:true},"amenity/restaurant/asian/Wagamama":{name:"Wagamama",icon:"maki-restaurant-noodle",geometry:["point","area"],tags:{amenity:"restaurant",cuisine:"asian","brand:wikidata":"Q503715"},addTags:{amenity:"restaurant",brand:"Wagamama","brand:wikidata":"Q503715","brand:wikipedia":"en:Wagamama",cuisine:"asian",name:"Wagamama"},removeTags:{amenity:"restaurant",brand:"Wagamama","brand:wikidata":"Q503715","brand:wikipedia":"en:Wagamama",cuisine:"asian",name:"Wagamama"},reference:{key:"cuisine",value:"asian"},matchScore:2,suggestion:true},"amenity/restaurant/japanese/Wasabi":{name:"Wasabi",icon:"maki-restaurant-noodle",geometry:["point","area"],tags:{amenity:"restaurant",cuisine:"japanese","brand:wikidata":"Q23891278"},addTags:{amenity:"restaurant",brand:"Wasabi","brand:wikidata":"Q23891278","brand:wikipedia":"en:Wasabi (restaurant)",cuisine:"japanese",name:"Wasabi"},removeTags:{amenity:"restaurant",brand:"Wasabi","brand:wikidata":"Q23891278","brand:wikipedia":"en:Wasabi (restaurant)",cuisine:"japanese",name:"Wasabi"},reference:{key:"cuisine",value:"japanese"},matchScore:2,suggestion:true},"amenity/restaurant/White Spot":{name:"White Spot",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant","brand:wikidata":"Q7995414"},addTags:{amenity:"restaurant",brand:"White Spot","brand:wikidata":"Q7995414","brand:wikipedia":"en:White Spot",cuisine:"burger",name:"White Spot"},removeTags:{amenity:"restaurant",brand:"White Spot","brand:wikidata":"Q7995414","brand:wikipedia":"en:White Spot",cuisine:"burger",name:"White Spot"},matchScore:2,suggestion:true},"amenity/restaurant/Wingstop":{name:"Wingstop",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant","brand:wikidata":"Q8025339"},addTags:{amenity:"restaurant",brand:"Wingstop","brand:wikidata":"Q8025339","brand:wikipedia":"en:Wingstop",cuisine:"wings",name:"Wingstop"},removeTags:{amenity:"restaurant",brand:"Wingstop","brand:wikidata":"Q8025339","brand:wikipedia":"en:Wingstop",cuisine:"wings",name:"Wingstop"},matchScore:2,suggestion:true},"amenity/restaurant/sushi/YO! Sushi":{name:"YO! Sushi",icon:"fas-fish",geometry:["point","area"],tags:{amenity:"restaurant",cuisine:"sushi","brand:wikidata":"Q3105441"},addTags:{amenity:"restaurant",brand:"YO! Sushi","brand:wikidata":"Q3105441","brand:wikipedia":"en:YO! Sushi",cuisine:"sushi",name:"YO! Sushi"},removeTags:{amenity:"restaurant",brand:"YO! Sushi","brand:wikidata":"Q3105441","brand:wikipedia":"en:YO! Sushi",cuisine:"sushi",name:"YO! Sushi"},reference:{key:"cuisine",value:"sushi"},matchScore:2,suggestion:true},"amenity/restaurant/italian/Zizzi":{name:"Zizzi",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant",cuisine:"italian","brand:wikidata":"Q8072944"},addTags:{amenity:"restaurant",brand:"Zizzi","brand:wikidata":"Q8072944","brand:wikipedia":"en:Zizzi",cuisine:"italian",name:"Zizzi"},removeTags:{amenity:"restaurant",brand:"Zizzi","brand:wikidata":"Q8072944","brand:wikipedia":"en:Zizzi",cuisine:"italian",name:"Zizzi"},reference:{key:"cuisine",value:"italian"},matchScore:2,suggestion:true},"amenity/restaurant/はなまるうどん":{name:"はなまるうどん",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant","brand:wikidata":"Q11275674"},addTags:{amenity:"restaurant",brand:"はなまるうどん","brand:en":"Hanamarūdon","brand:wikidata":"Q11275674","brand:wikipedia":"ja:はなまるうどん",name:"はなまるうどん","name:en":"Hanamarūdon"},removeTags:{amenity:"restaurant",brand:"はなまるうどん","brand:en":"Hanamarūdon","brand:wikidata":"Q11275674","brand:wikipedia":"ja:はなまるうどん",name:"はなまるうどん","name:en":"Hanamarūdon"},matchScore:2,suggestion:true},"amenity/restaurant/びっくりドンキー":{name:"びっくりドンキー",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant","brand:wikidata":"Q11276815"},addTags:{amenity:"restaurant",brand:"びっくりドンキー","brand:en":"Bikkuri Donkey","brand:wikidata":"Q11276815","brand:wikipedia":"ja:びっくりドンキー",name:"びっくりドンキー","name:en":"Bikkuri Donkey"},removeTags:{amenity:"restaurant",brand:"びっくりドンキー","brand:en":"Bikkuri Donkey","brand:wikidata":"Q11276815","brand:wikipedia":"ja:びっくりドンキー",name:"びっくりドンキー","name:en":"Bikkuri Donkey"},matchScore:2,suggestion:true},"amenity/restaurant/やよい軒":{name:"やよい軒",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant","brand:wikidata":"Q11280577"},addTags:{amenity:"restaurant",brand:"やよい軒","brand:en":"YAYOI","brand:wikidata":"Q11280577","brand:wikipedia":"ja:やよい軒",name:"やよい軒","name:en":"YAYOI"},removeTags:{amenity:"restaurant",brand:"やよい軒","brand:en":"YAYOI","brand:wikidata":"Q11280577","brand:wikipedia":"ja:やよい軒",name:"やよい軒","name:en":"YAYOI"},matchScore:2,suggestion:true},"amenity/restaurant/ガスト":{name:"ガスト",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant","brand:wikidata":"Q11253593"},addTags:{amenity:"restaurant",brand:"ガスト","brand:en":"Gusto","brand:wikidata":"Q11253593","brand:wikipedia":"ja:すかいらーく",name:"ガスト","name:en":"Gusto"},removeTags:{amenity:"restaurant",brand:"ガスト","brand:en":"Gusto","brand:wikidata":"Q11253593","brand:wikipedia":"ja:すかいらーく",name:"ガスト","name:en":"Gusto"},matchScore:2,suggestion:true},"amenity/restaurant/ココス":{name:"ココス",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant","brand:wikidata":"Q11301951"},addTags:{amenity:"restaurant",brand:"ココス","brand:en":"Coco's","brand:wikidata":"Q11301951","brand:wikipedia":"ja:ココスジャパン",name:"ココス","name:en":"Coco's"},removeTags:{amenity:"restaurant",brand:"ココス","brand:en":"Coco's","brand:wikidata":"Q11301951","brand:wikipedia":"ja:ココスジャパン",name:"ココス","name:en":"Coco's"},matchScore:2,suggestion:true},"amenity/restaurant/サイゼリヤ":{name:"サイゼリヤ",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant","brand:wikidata":"Q886564"},addTags:{amenity:"restaurant",brand:"サイゼリヤ","brand:en":"Saizeriya","brand:wikidata":"Q886564","brand:wikipedia":"en:Saizeriya",name:"サイゼリヤ","name:en":"Saizeriya"},removeTags:{amenity:"restaurant",brand:"サイゼリヤ","brand:en":"Saizeriya","brand:wikidata":"Q886564","brand:wikipedia":"en:Saizeriya",name:"サイゼリヤ","name:en":"Saizeriya"},matchScore:2,suggestion:true},"amenity/restaurant/ジョイフル":{name:"ジョイフル",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant","brand:wikidata":"Q11310517"},addTags:{amenity:"restaurant",brand:"ジョイフル","brand:en":"Joyfull","brand:wikidata":"Q11310517","brand:wikipedia":"ja:ジョイフル",name:"ジョイフル","name:en":"Joyfull"},removeTags:{amenity:"restaurant",brand:"ジョイフル","brand:en":"Joyfull","brand:wikidata":"Q11310517","brand:wikipedia":"ja:ジョイフル",name:"ジョイフル","name:en":"Joyfull"},matchScore:2,suggestion:true},"amenity/restaurant/ジョナサン":{name:"ジョナサン",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant","brand:wikidata":"Q11310628"},addTags:{amenity:"restaurant",brand:"ジョナサン","brand:en":"Jonathan's","brand:wikidata":"Q11310628","brand:wikipedia":"ja:ジョナサン (ファミリーレストラン)",name:"ジョナサン","name:en":"Jonathan's"},removeTags:{amenity:"restaurant",brand:"ジョナサン","brand:en":"Jonathan's","brand:wikidata":"Q11310628","brand:wikipedia":"ja:ジョナサン (ファミリーレストラン)",name:"ジョナサン","name:en":"Jonathan's"},matchScore:2,suggestion:true},"amenity/restaurant/ジョリーパスタ":{name:"ジョリーパスタ",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant","brand:wikidata":"Q10852718"},addTags:{amenity:"restaurant",brand:"ジョリーパスタ","brand:en":"Jolly-Pasta","brand:wikidata":"Q10852718","brand:wikipedia":"ja:ジョリーパスタ",name:"ジョリーパスタ","name:en":"Jolly-Pasta"},removeTags:{amenity:"restaurant",brand:"ジョリーパスタ","brand:en":"Jolly-Pasta","brand:wikidata":"Q10852718","brand:wikipedia":"ja:ジョリーパスタ",name:"ジョリーパスタ","name:en":"Jolly-Pasta"},matchScore:2,suggestion:true},"amenity/restaurant/デニーズ":{name:"デニーズ",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant","brand:wikidata":"Q11320661"},addTags:{amenity:"restaurant",brand:"デニーズ","brand:en":"Denny's","brand:wikidata":"Q11320661","brand:wikipedia":"ja:デニーズ (日本)",name:"デニーズ","name:en":"Denny's"},removeTags:{amenity:"restaurant",brand:"デニーズ","brand:en":"Denny's","brand:wikidata":"Q11320661","brand:wikipedia":"ja:デニーズ (日本)",name:"デニーズ","name:en":"Denny's"},matchScore:2,suggestion:true},"amenity/restaurant/バーミヤン":{name:"バーミヤン",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant","brand:wikidata":"Q11328598"},addTags:{amenity:"restaurant",brand:"バーミヤン","brand:en":"Bamiyan","brand:wikidata":"Q11328598","brand:wikipedia":"ja:バーミヤン (レストランチェーン)",name:"バーミヤン","name:en":"Bamiyan"},removeTags:{amenity:"restaurant",brand:"バーミヤン","brand:en":"Bamiyan","brand:wikidata":"Q11328598","brand:wikipedia":"ja:バーミヤン (レストランチェーン)",name:"バーミヤン","name:en":"Bamiyan"},matchScore:2,suggestion:true},"amenity/restaurant/ビッグボーイ":{name:"ビッグボーイ",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant","brand:wikidata":"Q4386779"},addTags:{amenity:"restaurant",brand:"ビッグボーイ","brand:en":"Big Boy Restaurants","brand:wikidata":"Q4386779","brand:wikipedia":"en:Big Boy Restaurants",name:"ビッグボーイ","name:en":"Big Boy Restaurants"},removeTags:{amenity:"restaurant",brand:"ビッグボーイ","brand:en":"Big Boy Restaurants","brand:wikidata":"Q4386779","brand:wikipedia":"en:Big Boy Restaurants",name:"ビッグボーイ","name:en":"Big Boy Restaurants"},matchScore:2,suggestion:true},"amenity/restaurant/リンガーハット":{name:"リンガーハット",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant","brand:wikidata":"Q7334856"},addTags:{amenity:"restaurant",brand:"リンガーハット","brand:en":"Ringer Hut","brand:wikidata":"Q7334856","brand:wikipedia":"en:Ringer Hut",name:"リンガーハット","name:en":"Ringer Hut"},removeTags:{amenity:"restaurant",brand:"リンガーハット","brand:en":"Ringer Hut","brand:wikidata":"Q7334856","brand:wikipedia":"en:Ringer Hut",name:"リンガーハット","name:en":"Ringer Hut"},matchScore:2,suggestion:true},"amenity/restaurant/ロイヤルホスト":{name:"ロイヤルホスト",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant","brand:wikidata":"Q11120884"},addTags:{amenity:"restaurant",brand:"ロイヤルホスト","brand:en":"Royal Host","brand:wikidata":"Q11120884","brand:wikipedia":"ja:ロイヤルホスト",name:"ロイヤルホスト","name:en":"Royal Host"},removeTags:{amenity:"restaurant",brand:"ロイヤルホスト","brand:en":"Royal Host","brand:wikidata":"Q11120884","brand:wikipedia":"ja:ロイヤルホスト",name:"ロイヤルホスト","name:en":"Royal Host"},matchScore:2,suggestion:true},"amenity/restaurant/noodle/丸亀製麺":{name:"丸亀製麺",icon:"maki-restaurant-noodle",geometry:["point","area"],tags:{amenity:"restaurant",cuisine:"noodle","brand:wikidata":"Q10877253"},addTags:{amenity:"restaurant",brand:"丸亀製麺","brand:en":"Marugame Seimen","brand:wikidata":"Q10877253","brand:wikipedia":"ja:丸亀製麺",cuisine:"noodle",name:"丸亀製麺","name:en":"Marugame Seimen","name:ko":"마루가메 제면"},removeTags:{amenity:"restaurant",brand:"丸亀製麺","brand:en":"Marugame Seimen","brand:wikidata":"Q10877253","brand:wikipedia":"ja:丸亀製麺",cuisine:"noodle",name:"丸亀製麺","name:en":"Marugame Seimen","name:ko":"마루가메 제면"},reference:{key:"cuisine",value:"noodle"},matchScore:2,suggestion:true},"amenity/restaurant/八方雲集":{name:"八方雲集",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant","brand:wikidata":"Q28417381"},addTags:{amenity:"restaurant",brand:"八方雲集","brand:wikidata":"Q28417381","brand:wikipedia":"zh:八方雲集",name:"八方雲集"},removeTags:{amenity:"restaurant",brand:"八方雲集","brand:wikidata":"Q28417381","brand:wikipedia":"zh:八方雲集",name:"八方雲集"},matchScore:2,suggestion:true},"amenity/restaurant/和食さと":{name:"和食さと",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant","brand:wikidata":"Q11304897"},addTags:{amenity:"restaurant",brand:"和食さと","brand:en":"Washoku Sato","brand:wikidata":"Q11304897","brand:wikipedia":"ja:SRSホールディングス",name:"和食さと","name:en":"Washoku Sato"},removeTags:{amenity:"restaurant",brand:"和食さと","brand:en":"Washoku Sato","brand:wikidata":"Q11304897","brand:wikipedia":"ja:SRSホールディングス",name:"和食さと","name:en":"Washoku Sato"},matchScore:2,suggestion:true},"amenity/restaurant/夢庵":{name:"夢庵",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant","brand:wikidata":"Q11253593"},addTags:{amenity:"restaurant",brand:"夢庵","brand:en":"Yumean","brand:wikidata":"Q11253593","brand:wikipedia":"ja:すかいらーく",name:"夢庵","name:en":"Yumean"},removeTags:{amenity:"restaurant",brand:"夢庵","brand:en":"Yumean","brand:wikidata":"Q11253593","brand:wikipedia":"ja:すかいらーく",name:"夢庵","name:en":"Yumean"},matchScore:2,suggestion:true},"amenity/restaurant/japanese/大戸屋":{name:"大戸屋",icon:"maki-restaurant-noodle",geometry:["point","area"],tags:{amenity:"restaurant",cuisine:"japanese","brand:wikidata":"Q11435522"},addTags:{amenity:"restaurant",brand:"大戸屋","brand:en":"Ootoya","brand:wikidata":"Q11435522","brand:wikipedia":"ja:大戸屋ホールディングス",cuisine:"japanese",name:"大戸屋","name:en":"Ootoya"},removeTags:{amenity:"restaurant",brand:"大戸屋","brand:en":"Ootoya","brand:wikidata":"Q11435522","brand:wikipedia":"ja:大戸屋ホールディングス",cuisine:"japanese",name:"大戸屋","name:en":"Ootoya"},reference:{key:"cuisine",value:"japanese"},matchScore:2,suggestion:true},"amenity/restaurant/大阪王将":{name:"大阪王将",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant","brand:wikidata":"Q48743717"},addTags:{amenity:"restaurant",brand:"大阪王将","brand:en":"Osaka Ohsho","brand:wikidata":"Q48743717","brand:wikipedia":"ja:大阪王将",name:"大阪王将","name:en":"Osaka Ohsho"},removeTags:{amenity:"restaurant",brand:"大阪王将","brand:en":"Osaka Ohsho","brand:wikidata":"Q48743717","brand:wikipedia":"ja:大阪王将",name:"大阪王将","name:en":"Osaka Ohsho"},matchScore:2,suggestion:true},"amenity/restaurant/天下一品":{name:"天下一品",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant","brand:wikidata":"Q11442172"},addTags:{amenity:"restaurant",brand:"天下一品","brand:en":"Tenkaippin","brand:wikidata":"Q11442172","brand:wikipedia":"en:Tenkaippin",name:"天下一品","name:en":"Tenkaippin"},removeTags:{amenity:"restaurant",brand:"天下一品","brand:en":"Tenkaippin","brand:wikidata":"Q11442172","brand:wikipedia":"en:Tenkaippin",name:"天下一品","name:en":"Tenkaippin"},matchScore:2,suggestion:true},"amenity/restaurant/安楽亭":{name:"安楽亭",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant","brand:wikidata":"Q11450866"},addTags:{amenity:"restaurant",brand:"安楽亭","brand:en":"Anrakutei","brand:wikidata":"Q11450866","brand:wikipedia":"ja:安楽亭",cuisine:"barbecue",name:"安楽亭","name:en":"Anrakutei"},removeTags:{amenity:"restaurant",brand:"安楽亭","brand:en":"Anrakutei","brand:wikidata":"Q11450866","brand:wikipedia":"ja:安楽亭",cuisine:"barbecue",name:"安楽亭","name:en":"Anrakutei"},matchScore:2,suggestion:true},"amenity/restaurant/noodle/日高屋":{name:"日高屋",icon:"maki-restaurant-noodle",geometry:["point","area"],tags:{amenity:"restaurant",cuisine:"noodle","brand:wikidata":"Q11326050"},addTags:{amenity:"restaurant",brand:"日高屋","brand:en":"Hidakaya","brand:wikidata":"Q11326050","brand:wikipedia":"ja:ハイデイ日高",cuisine:"noodle",name:"日高屋","name:en":"Hidakaya"},removeTags:{amenity:"restaurant",brand:"日高屋","brand:en":"Hidakaya","brand:wikidata":"Q11326050","brand:wikipedia":"ja:ハイデイ日高",cuisine:"noodle",name:"日高屋","name:en":"Hidakaya"},reference:{key:"cuisine",value:"noodle"},matchScore:2,suggestion:true},"amenity/restaurant/永和豆漿":{name:"永和豆漿",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant","brand:wikidata":"Q11131335"},addTags:{amenity:"restaurant",brand:"永和豆漿","brand:wikidata":"Q11131335","brand:wikipedia":"zh:永和豆浆",name:"永和豆漿"},removeTags:{amenity:"restaurant",brand:"永和豆漿","brand:wikidata":"Q11131335","brand:wikipedia":"zh:永和豆浆",name:"永和豆漿"},matchScore:2,suggestion:true},"amenity/restaurant/牛角":{name:"牛角",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant","brand:wikidata":"Q11349387"},addTags:{amenity:"restaurant",brand:"牛角","brand:en":"Gyū-Kaku","brand:wikidata":"Q11349387","brand:wikipedia":"en:Gyu-Kaku",cuisine:"barbecue",name:"牛角","name:en":"Gyū-Kaku"},removeTags:{amenity:"restaurant",brand:"牛角","brand:en":"Gyū-Kaku","brand:wikidata":"Q11349387","brand:wikipedia":"en:Gyu-Kaku",cuisine:"barbecue",name:"牛角","name:en":"Gyū-Kaku"},matchScore:2,suggestion:true},"amenity/restaurant/餃子の王将":{name:"餃子の王将",icon:"maki-restaurant",geometry:["point","area"],tags:{amenity:"restaurant","brand:wikidata":"Q11666805"},addTags:{amenity:"restaurant",brand:"餃子の王将","brand:en":"Gyoza no Ohsho","brand:wikidata":"Q11666805","brand:wikipedia":"en:Gyoza no Ohsho",name:"餃子の王将","name:en":"Gyoza no Ohsho"},removeTags:{amenity:"restaurant",brand:"餃子の王将","brand:en":"Gyoza no Ohsho","brand:wikidata":"Q11666805","brand:wikipedia":"en:Gyoza no Ohsho",name:"餃子の王将","name:en":"Gyoza no Ohsho"},matchScore:2,suggestion:true},"amenity/vending_machine/parcel_pickup_dropoff/DHL Packstation":{name:"DHL Packstation",icon:"temaki-vending_machine",geometry:["point"],tags:{amenity:"vending_machine",vending:"parcel_pickup;parcel_mail_in","brand:wikidata":"Q489815"},addTags:{amenity:"vending_machine",brand:"DHL","brand:wikidata":"Q489815","brand:wikipedia":"en:DHL Express",name:"DHL Packstation",operator:"DHL",vending:"parcel_pickup;parcel_mail_in"},removeTags:{amenity:"vending_machine",brand:"DHL","brand:wikidata":"Q489815","brand:wikipedia":"en:DHL Express",name:"DHL Packstation",operator:"DHL",vending:"parcel_pickup;parcel_mail_in"},reference:{key:"vending",value:"parcel_pickup;parcel_mail_in"},matchScore:2,suggestion:true},"amenity/vending_machine/public_transport_tickets/KKM":{name:"KKM",icon:"temaki-vending_machine",geometry:["point"],tags:{amenity:"vending_machine",vending:"public_transport_tickets","brand:wikidata":"Q57515549"},addTags:{amenity:"vending_machine",brand:"KKM","brand:wikidata":"Q57515549",name:"KKM",vending:"public_transport_tickets"},removeTags:{amenity:"vending_machine",brand:"KKM","brand:wikidata":"Q57515549",name:"KKM",vending:"public_transport_tickets"},reference:{key:"vending",value:"public_transport_tickets"},matchScore:2,suggestion:true},"amenity/vending_machine/parcel_pickup_dropoff/Paczkomat InPost":{name:"Paczkomat InPost",icon:"temaki-vending_machine",geometry:["point"],tags:{amenity:"vending_machine",vending:"parcel_pickup;parcel_mail_in","brand:wikidata":"Q3182097"},addTags:{amenity:"vending_machine",brand:"InPost","brand:wikidata":"Q3182097","brand:wikipedia":"pl:InPost",name:"Paczkomat InPost",vending:"parcel_pickup;parcel_mail_in"},removeTags:{amenity:"vending_machine",brand:"InPost","brand:wikidata":"Q3182097","brand:wikipedia":"pl:InPost",name:"Paczkomat InPost",vending:"parcel_pickup;parcel_mail_in"},reference:{key:"vending",value:"parcel_pickup;parcel_mail_in"},matchScore:2,suggestion:true},"amenity/vending_machine/Redbox":{name:"Redbox",icon:"temaki-vending_machine",geometry:["point"],tags:{amenity:"vending_machine","brand:wikidata":"Q7305489"},addTags:{amenity:"vending_machine",brand:"Redbox","brand:wikidata":"Q7305489","brand:wikipedia":"en:Redbox",name:"Redbox"},removeTags:{amenity:"vending_machine",brand:"Redbox","brand:wikidata":"Q7305489","brand:wikipedia":"en:Redbox",name:"Redbox"},matchScore:2,suggestion:true},"amenity/vending_machine/Robidog":{name:"Robidog",icon:"temaki-vending_machine",geometry:["point"],tags:{amenity:"vending_machine","brand:wikidata":"Q2159689"},addTags:{amenity:"vending_machine",brand:"Robidog","brand:wikidata":"Q2159689","brand:wikipedia":"de:Robidog",name:"Robidog"},removeTags:{amenity:"vending_machine",brand:"Robidog","brand:wikidata":"Q2159689","brand:wikipedia":"de:Robidog",name:"Robidog"},matchScore:2,suggestion:true},"amenity/vending_machine/Tobaccoland":{name:"Tobaccoland",icon:"temaki-vending_machine",geometry:["point"],tags:{amenity:"vending_machine","brand:wikidata":"Q1439872"},addTags:{amenity:"vending_machine",brand:"Tobaccoland","brand:wikidata":"Q1439872","brand:wikipedia":"de:Tobaccoland Automatengesellschaft",name:"Tobaccoland"},removeTags:{amenity:"vending_machine",brand:"Tobaccoland","brand:wikidata":"Q1439872","brand:wikipedia":"de:Tobaccoland Automatengesellschaft",name:"Tobaccoland"},matchScore:2,suggestion:true},"amenity/veterinary/Banfield Pet Hospital":{name:"Banfield Pet Hospital",icon:"temaki-veterinary_care",geometry:["point","area"],tags:{amenity:"veterinary","brand:wikidata":"Q2882416"},addTags:{amenity:"veterinary",brand:"Banfield Pet Hospital","brand:wikidata":"Q2882416","brand:wikipedia":"en:Banfield Pet Hospital",name:"Banfield Pet Hospital"},removeTags:{amenity:"veterinary",brand:"Banfield Pet Hospital","brand:wikidata":"Q2882416","brand:wikipedia":"en:Banfield Pet Hospital",name:"Banfield Pet Hospital"},matchScore:2,suggestion:true},"leisure/fitness_centre/24 Hour Fitness":{name:"24 Hour Fitness",icon:"fas-dumbbell",geometry:["point","area"],tags:{leisure:"fitness_centre","brand:wikidata":"Q4631849"},addTags:{brand:"24 Hour Fitness","brand:wikidata":"Q4631849","brand:wikipedia":"en:24 Hour Fitness",leisure:"fitness_centre",name:"24 Hour Fitness"},removeTags:{brand:"24 Hour Fitness","brand:wikidata":"Q4631849","brand:wikipedia":"en:24 Hour Fitness",leisure:"fitness_centre",name:"24 Hour Fitness"},matchScore:2,suggestion:true},"leisure/fitness_centre/Anytime Fitness":{name:"Anytime Fitness",icon:"fas-dumbbell",geometry:["point","area"],tags:{leisure:"fitness_centre","brand:wikidata":"Q4778364"},addTags:{brand:"Anytime Fitness","brand:wikidata":"Q4778364","brand:wikipedia":"en:Anytime Fitness",leisure:"fitness_centre",name:"Anytime Fitness"},removeTags:{brand:"Anytime Fitness","brand:wikidata":"Q4778364","brand:wikipedia":"en:Anytime Fitness",leisure:"fitness_centre",name:"Anytime Fitness"},matchScore:2,suggestion:true},"leisure/fitness_centre/Curves":{name:"Curves",icon:"fas-dumbbell",geometry:["point","area"],tags:{leisure:"fitness_centre","brand:wikidata":"Q5196080"},addTags:{brand:"Curves","brand:wikidata":"Q5196080","brand:wikipedia":"en:Curves International",leisure:"fitness_centre",name:"Curves"},removeTags:{brand:"Curves","brand:wikidata":"Q5196080","brand:wikipedia":"en:Curves International",leisure:"fitness_centre",name:"Curves"},matchScore:2,suggestion:true},"leisure/fitness_centre/Gold's Gym":{name:"Gold's Gym",icon:"fas-dumbbell",geometry:["point","area"],tags:{leisure:"fitness_centre","brand:wikidata":"Q1536234"},addTags:{brand:"Gold's Gym","brand:wikidata":"Q1536234","brand:wikipedia":"en:Gold's Gym",leisure:"fitness_centre",name:"Gold's Gym"},removeTags:{brand:"Gold's Gym","brand:wikidata":"Q1536234","brand:wikipedia":"en:Gold's Gym",leisure:"fitness_centre",name:"Gold's Gym"},matchScore:2,suggestion:true},"leisure/fitness_centre/LA Fitness":{name:"LA Fitness",icon:"fas-dumbbell",geometry:["point","area"],tags:{leisure:"fitness_centre","brand:wikidata":"Q6457180"},addTags:{brand:"LA Fitness","brand:wikidata":"Q6457180","brand:wikipedia":"en:LA Fitness",leisure:"fitness_centre",name:"LA Fitness"},removeTags:{brand:"LA Fitness","brand:wikidata":"Q6457180","brand:wikipedia":"en:LA Fitness",leisure:"fitness_centre",name:"LA Fitness"},matchScore:2,suggestion:true},"leisure/fitness_centre/Planet Fitness":{name:"Planet Fitness",icon:"fas-dumbbell",geometry:["point","area"],tags:{leisure:"fitness_centre","brand:wikidata":"Q7201095"},addTags:{brand:"Planet Fitness","brand:wikidata":"Q7201095","brand:wikipedia":"en:Planet Fitness",leisure:"fitness_centre",name:"Planet Fitness"},removeTags:{brand:"Planet Fitness","brand:wikidata":"Q7201095","brand:wikipedia":"en:Planet Fitness",leisure:"fitness_centre",name:"Planet Fitness"},matchScore:2,suggestion:true},"leisure/fitness_centre/PureGym":{name:"PureGym",icon:"fas-dumbbell",geometry:["point","area"],tags:{leisure:"fitness_centre","brand:wikidata":"Q18345898"},addTags:{brand:"PureGym","brand:wikidata":"Q18345898","brand:wikipedia":"en:PureGym",leisure:"fitness_centre",name:"PureGym"},removeTags:{brand:"PureGym","brand:wikidata":"Q18345898","brand:wikipedia":"en:PureGym",leisure:"fitness_centre",name:"PureGym"},matchScore:2,suggestion:true},"leisure/fitness_centre/Snap Fitness":{name:"Snap Fitness",icon:"fas-dumbbell",geometry:["point","area"],tags:{leisure:"fitness_centre","brand:wikidata":"Q7547254"},addTags:{brand:"Snap Fitness","brand:wikidata":"Q7547254","brand:wikipedia":"en:Snap Fitness",leisure:"fitness_centre",name:"Snap Fitness"},removeTags:{brand:"Snap Fitness","brand:wikidata":"Q7547254","brand:wikipedia":"en:Snap Fitness",leisure:"fitness_centre",name:"Snap Fitness"},matchScore:2,suggestion:true},"leisure/fitness_centre/YMCA":{name:"YMCA",icon:"fas-dumbbell",geometry:["point","area"],tags:{leisure:"fitness_centre","brand:wikidata":"Q157169"},addTags:{brand:"YMCA","brand:wikidata":"Q157169","brand:wikipedia":"en:YMCA",leisure:"fitness_centre",name:"YMCA"},removeTags:{brand:"YMCA","brand:wikidata":"Q157169","brand:wikipedia":"en:YMCA",leisure:"fitness_centre",name:"YMCA"},matchScore:2,suggestion:true},"shop/alcohol/Alko":{name:"Alko",icon:"maki-alcohol-shop",geometry:["point","area"],tags:{shop:"alcohol","brand:wikidata":"Q1849187"},addTags:{brand:"Alko","brand:wikidata":"Q1849187","brand:wikipedia":"en:Alko",name:"Alko",shop:"alcohol"},removeTags:{brand:"Alko","brand:wikidata":"Q1849187","brand:wikipedia":"en:Alko",name:"Alko",shop:"alcohol"},matchScore:2,suggestion:true},"shop/alcohol/BC Liquor Store":{name:"BC Liquor Store",icon:"maki-alcohol-shop",geometry:["point","area"],tags:{shop:"alcohol","brand:wikidata":"Q43079557"},addTags:{brand:"BC Liquor Store","brand:wikidata":"Q43079557","brand:wikipedia":"en:BC Liquor Stores",name:"BC Liquor Store",shop:"alcohol"},removeTags:{brand:"BC Liquor Store","brand:wikidata":"Q43079557","brand:wikipedia":"en:BC Liquor Stores",name:"BC Liquor Store",shop:"alcohol"},matchScore:2,suggestion:true},"shop/alcohol/BWS":{name:"BWS",icon:"maki-alcohol-shop",geometry:["point","area"],tags:{shop:"alcohol","brand:wikidata":"Q4836848"},addTags:{brand:"BWS","brand:wikidata":"Q4836848","brand:wikipedia":"en:BWS (liquor retailer)",name:"BWS",shop:"alcohol"},removeTags:{brand:"BWS","brand:wikidata":"Q4836848","brand:wikipedia":"en:BWS (liquor retailer)",name:"BWS",shop:"alcohol"},matchScore:2,suggestion:true},"shop/alcohol/Bargain Booze":{name:"Bargain Booze",icon:"maki-alcohol-shop",geometry:["point","area"],tags:{shop:"alcohol","brand:wikidata":"Q16971315"},addTags:{brand:"Bargain Booze","brand:wikidata":"Q16971315","brand:wikipedia":"en:Bargain Booze",name:"Bargain Booze",shop:"alcohol"},removeTags:{brand:"Bargain Booze","brand:wikidata":"Q16971315","brand:wikipedia":"en:Bargain Booze",name:"Bargain Booze",shop:"alcohol"},matchScore:2,suggestion:true},"shop/alcohol/BevMo!":{name:"BevMo!",icon:"maki-alcohol-shop",geometry:["point","area"],tags:{shop:"alcohol","brand:wikidata":"Q4899308"},addTags:{brand:"BevMo!","brand:wikidata":"Q4899308","brand:wikipedia":"en:BevMo!",name:"BevMo!",shop:"alcohol"},removeTags:{brand:"BevMo!","brand:wikidata":"Q4899308","brand:wikipedia":"en:BevMo!",name:"BevMo!",shop:"alcohol"},matchScore:2,suggestion:true},"shop/alcohol/Dan Murphy's":{name:"Dan Murphy's",icon:"maki-alcohol-shop",geometry:["point","area"],tags:{shop:"alcohol","brand:wikidata":"Q5214075"},addTags:{brand:"Dan Murphy's","brand:wikidata":"Q5214075","brand:wikipedia":"en:Dan Murphy's",name:"Dan Murphy's",shop:"alcohol"},removeTags:{brand:"Dan Murphy's","brand:wikidata":"Q5214075","brand:wikipedia":"en:Dan Murphy's",name:"Dan Murphy's",shop:"alcohol"},matchScore:2,suggestion:true},"shop/alcohol/Gall & Gall":{name:"Gall & Gall",icon:"maki-alcohol-shop",geometry:["point","area"],tags:{shop:"alcohol","brand:wikidata":"Q13639185"},addTags:{brand:"Gall & Gall","brand:wikidata":"Q13639185","brand:wikipedia":"nl:Gall & Gall",name:"Gall & Gall",shop:"alcohol"},removeTags:{brand:"Gall & Gall","brand:wikidata":"Q13639185","brand:wikipedia":"nl:Gall & Gall",name:"Gall & Gall",shop:"alcohol"},matchScore:2,suggestion:true},"shop/alcohol/LCBO":{name:"LCBO",icon:"maki-alcohol-shop",geometry:["point","area"],tags:{shop:"alcohol","brand:wikidata":"Q845263"},addTags:{brand:"LCBO","brand:wikidata":"Q845263","brand:wikipedia":"en:Liquor Control Board of Ontario",name:"LCBO",shop:"alcohol"},removeTags:{brand:"LCBO","brand:wikidata":"Q845263","brand:wikipedia":"en:Liquor Control Board of Ontario",name:"LCBO",shop:"alcohol"},matchScore:2,suggestion:true},"shop/alcohol/Liquorland":{name:"Liquorland",icon:"maki-alcohol-shop",geometry:["point","area"],tags:{shop:"alcohol","brand:wikidata":"Q2283837"},addTags:{brand:"Liquorland","brand:wikidata":"Q2283837","brand:wikipedia":"en:Liquorland",name:"Liquorland",shop:"alcohol"},removeTags:{brand:"Liquorland","brand:wikidata":"Q2283837","brand:wikipedia":"en:Liquorland",name:"Liquorland",shop:"alcohol"},matchScore:2,suggestion:true},"shop/alcohol/Nicolas":{name:"Nicolas",icon:"maki-alcohol-shop",geometry:["point","area"],tags:{shop:"alcohol","brand:wikidata":"Q3340012"},addTags:{brand:"Nicolas","brand:wikidata":"Q3340012","brand:wikipedia":"en:Nicolas (wine retailer)",name:"Nicolas",shop:"alcohol"},removeTags:{brand:"Nicolas","brand:wikidata":"Q3340012","brand:wikipedia":"en:Nicolas (wine retailer)",name:"Nicolas",shop:"alcohol"},matchScore:2,suggestion:true},"shop/alcohol/SAQ":{name:"SAQ",icon:"maki-alcohol-shop",geometry:["point","area"],tags:{shop:"alcohol","brand:wikidata":"Q3488077"},addTags:{brand:"SAQ","brand:wikidata":"Q3488077","brand:wikipedia":"en:Société des alcools du Québec",name:"SAQ",shop:"alcohol"},removeTags:{brand:"SAQ","brand:wikidata":"Q3488077","brand:wikipedia":"en:Société des alcools du Québec",name:"SAQ",shop:"alcohol"},matchScore:2,suggestion:true},"shop/alcohol/Spec's":{name:"Spec's",icon:"maki-alcohol-shop",geometry:["point","area"],tags:{shop:"alcohol","brand:wikidata":"Q7574415"},addTags:{brand:"Spec's","brand:wikidata":"Q7574415","brand:wikipedia":"en:Spec's Wine, Spirits & Finer Foods",name:"Spec's",shop:"alcohol"},removeTags:{brand:"Spec's","brand:wikidata":"Q7574415","brand:wikipedia":"en:Spec's Wine, Spirits & Finer Foods",name:"Spec's",shop:"alcohol"},matchScore:2,suggestion:true},"shop/alcohol/Systembolaget":{name:"Systembolaget",icon:"maki-alcohol-shop",geometry:["point","area"],tags:{shop:"alcohol","brand:wikidata":"Q1476113"},addTags:{brand:"Systembolaget","brand:wikidata":"Q1476113","brand:wikipedia":"en:Systembolaget",name:"Systembolaget",shop:"alcohol"},removeTags:{brand:"Systembolaget","brand:wikidata":"Q1476113","brand:wikipedia":"en:Systembolaget",name:"Systembolaget",shop:"alcohol"},matchScore:2,suggestion:true},"shop/alcohol/The Beer Store":{name:"The Beer Store",icon:"maki-alcohol-shop",geometry:["point","area"],tags:{shop:"alcohol","brand:wikidata":"Q16243674"},addTags:{brand:"The Beer Store","brand:wikidata":"Q16243674","brand:wikipedia":"en:The Beer Store",name:"The Beer Store",shop:"alcohol"},removeTags:{brand:"The Beer Store","brand:wikidata":"Q16243674","brand:wikipedia":"en:The Beer Store",name:"The Beer Store",shop:"alcohol"},matchScore:2,suggestion:true},"shop/alcohol/Total Wine":{name:"Total Wine",icon:"maki-alcohol-shop",geometry:["point","area"],tags:{shop:"alcohol","brand:wikidata":"Q7828084"},addTags:{brand:"Total Wine","brand:wikidata":"Q7828084","brand:wikipedia":"en:Total Wine & More",name:"Total Wine",shop:"alcohol"},removeTags:{brand:"Total Wine","brand:wikidata":"Q7828084","brand:wikipedia":"en:Total Wine & More",name:"Total Wine",shop:"alcohol"},matchScore:2,suggestion:true},"shop/alcohol/Vinmonopolet":{name:"Vinmonopolet",icon:"maki-alcohol-shop",geometry:["point","area"],tags:{shop:"alcohol","brand:wikidata":"Q1740534"},addTags:{brand:"Vinmonopolet","brand:wikidata":"Q1740534","brand:wikipedia":"en:Vinmonopolet",name:"Vinmonopolet",shop:"alcohol"},removeTags:{brand:"Vinmonopolet","brand:wikidata":"Q1740534","brand:wikipedia":"en:Vinmonopolet",name:"Vinmonopolet",shop:"alcohol"},matchScore:2,suggestion:true},"shop/alcohol/Virginia ABC":{name:"Virginia ABC",icon:"maki-alcohol-shop",geometry:["point","area"],tags:{shop:"alcohol","brand:wikidata":"Q7934236"},addTags:{brand:"Virginia ABC","brand:wikidata":"Q7934236","brand:wikipedia":"en:Virginia Alcoholic Beverage Control Authority",name:"Virginia ABC",shop:"alcohol"},removeTags:{brand:"Virginia ABC","brand:wikidata":"Q7934236","brand:wikipedia":"en:Virginia Alcoholic Beverage Control Authority",name:"Virginia ABC",shop:"alcohol"},matchScore:2,suggestion:true},"shop/alcohol/Красное & Белое":{name:"Красное & Белое",icon:"maki-alcohol-shop",geometry:["point","area"],tags:{shop:"alcohol","brand:wikidata":"Q24933790"},addTags:{brand:"Красное & Белое","brand:en":"Red&White","brand:wikidata":"Q24933790","brand:wikipedia":"en:Red&White",name:"Красное & Белое","name:en":"Red&White",shop:"alcohol"},removeTags:{brand:"Красное & Белое","brand:en":"Red&White","brand:wikidata":"Q24933790","brand:wikipedia":"en:Red&White",name:"Красное & Белое","name:en":"Red&White",shop:"alcohol"},matchScore:2,suggestion:true},"shop/alcohol/Лион":{name:"Лион",icon:"maki-alcohol-shop",geometry:["point","area"],tags:{shop:"alcohol","brand:wikidata":"Q3241775"},addTags:{brand:"Лион","brand:wikidata":"Q3241775","brand:wikipedia":"en:Lion (Australasian company)",name:"Лион",shop:"alcohol"},removeTags:{brand:"Лион","brand:wikidata":"Q3241775","brand:wikipedia":"en:Lion (Australasian company)",name:"Лион",shop:"alcohol"},matchScore:2,suggestion:true},"shop/baby_goods/Babies R Us":{name:"Babies R Us",icon:"maki-shop",geometry:["point","area"],tags:{shop:"baby_goods","brand:wikidata":"Q696334"},addTags:{brand:"Babies R Us","brand:wikidata":"Q696334","brand:wikipedia":"en:Toys \"R\" Us",name:"Babies R Us",shop:"baby_goods"},removeTags:{brand:"Babies R Us","brand:wikidata":"Q696334","brand:wikipedia":"en:Toys \"R\" Us",name:"Babies R Us",shop:"baby_goods"},matchScore:2,suggestion:true},"shop/baby_goods/BabyOne":{name:"BabyOne",icon:"maki-shop",geometry:["point","area"],tags:{shop:"baby_goods","brand:wikidata":"Q57540408"},addTags:{brand:"BabyOne","brand:wikidata":"Q57540408",name:"BabyOne",shop:"baby_goods"},removeTags:{brand:"BabyOne","brand:wikidata":"Q57540408",name:"BabyOne",shop:"baby_goods"},matchScore:2,suggestion:true},"shop/baby_goods/Mothercare":{name:"Mothercare",icon:"maki-shop",geometry:["point","area"],tags:{shop:"baby_goods","brand:wikidata":"Q136738"},addTags:{brand:"Mothercare","brand:wikidata":"Q136738","brand:wikipedia":"en:Mothercare",name:"Mothercare",shop:"baby_goods"},removeTags:{brand:"Mothercare","brand:wikidata":"Q136738","brand:wikipedia":"en:Mothercare",name:"Mothercare",shop:"baby_goods"},matchScore:2,suggestion:true},"shop/bakery/Anker":{name:"Anker",icon:"maki-bakery",geometry:["point","area"],tags:{shop:"bakery","brand:wikidata":"Q557116"},addTags:{brand:"Anker","brand:wikidata":"Q557116","brand:wikipedia":"de:Ankerbrot",name:"Anker",shop:"bakery"},removeTags:{brand:"Anker","brand:wikidata":"Q557116","brand:wikipedia":"de:Ankerbrot",name:"Anker",shop:"bakery"},matchScore:2,suggestion:true},"shop/bakery/Backwerk":{name:"Backwerk",icon:"maki-bakery",geometry:["point","area"],tags:{shop:"bakery","brand:wikidata":"Q798298"},addTags:{brand:"BackWerk","brand:wikidata":"Q798298","brand:wikipedia":"de:BackWerk",name:"Backwerk",shop:"bakery"},removeTags:{brand:"BackWerk","brand:wikidata":"Q798298","brand:wikipedia":"de:BackWerk",name:"Backwerk",shop:"bakery"},matchScore:2,suggestion:true},"shop/bakery/Bakers Delight":{name:"Bakers Delight",icon:"maki-bakery",geometry:["point","area"],tags:{shop:"bakery","brand:wikidata":"Q4849261"},addTags:{brand:"Bakers Delight","brand:wikidata":"Q4849261","brand:wikipedia":"en:Bakers Delight",name:"Bakers Delight",shop:"bakery"},removeTags:{brand:"Bakers Delight","brand:wikidata":"Q4849261","brand:wikipedia":"en:Bakers Delight",name:"Bakers Delight",shop:"bakery"},matchScore:2,suggestion:true},"shop/bakery/Bakker Bart":{name:"Bakker Bart",icon:"maki-bakery",geometry:["point","area"],tags:{shop:"bakery","brand:wikidata":"Q2177445"},addTags:{brand:"Bakker Bart","brand:wikidata":"Q2177445","brand:wikipedia":"nl:Bakker Bart",name:"Bakker Bart",shop:"bakery"},removeTags:{brand:"Bakker Bart","brand:wikidata":"Q2177445","brand:wikipedia":"nl:Bakker Bart",name:"Bakker Bart",shop:"bakery"},matchScore:2,suggestion:true},"shop/bakery/Banette":{name:"Banette",icon:"maki-bakery",geometry:["point","area"],tags:{shop:"bakery","brand:wikidata":"Q2882405"},addTags:{brand:"Banette","brand:wikidata":"Q2882405","brand:wikipedia":"fr:Banette (entreprise)",name:"Banette",shop:"bakery"},removeTags:{brand:"Banette","brand:wikidata":"Q2882405","brand:wikipedia":"fr:Banette (entreprise)",name:"Banette",shop:"bakery"},matchScore:2,suggestion:true},"shop/bakery/Bäckerei Fuchs":{name:"Bäckerei Fuchs",icon:"maki-bakery",geometry:["point","area"],tags:{shop:"bakery","brand:wikidata":"Q42825993"},addTags:{brand:"Bäckerei Fuchs","brand:wikidata":"Q42825993","brand:wikipedia":"de:Harald Fuchs Bäckerei – Konditorei",name:"Bäckerei Fuchs",shop:"bakery"},removeTags:{brand:"Bäckerei Fuchs","brand:wikidata":"Q42825993","brand:wikipedia":"de:Harald Fuchs Bäckerei – Konditorei",name:"Bäckerei Fuchs",shop:"bakery"},matchScore:2,suggestion:true},"shop/bakery/Cooplands":{name:"Cooplands",icon:"maki-bakery",geometry:["point","area"],tags:{shop:"bakery","brand:wikidata":"Q5167971"},addTags:{brand:"Cooplands","brand:wikidata":"Q5167971","brand:wikipedia":"en:Cooplands",name:"Cooplands",shop:"bakery"},removeTags:{brand:"Cooplands","brand:wikidata":"Q5167971","brand:wikipedia":"en:Cooplands",name:"Cooplands",shop:"bakery"},matchScore:2,suggestion:true},"shop/bakery/Der Beck":{name:"Der Beck",icon:"maki-bakery",geometry:["point","area"],tags:{shop:"bakery","brand:wikidata":"Q1192443"},addTags:{brand:"Der Beck","brand:wikidata":"Q1192443","brand:wikipedia":"en:Der Beck",name:"Der Beck",shop:"bakery"},removeTags:{brand:"Der Beck","brand:wikidata":"Q1192443","brand:wikipedia":"en:Der Beck",name:"Der Beck",shop:"bakery"},matchScore:2,suggestion:true},"shop/bakery/Ditsch":{name:"Ditsch",icon:"maki-bakery",geometry:["point","area"],tags:{shop:"bakery","brand:wikidata":"Q911573"},addTags:{brand:"Ditsch","brand:wikidata":"Q911573","brand:wikipedia":"en:Ditsch",name:"Ditsch",shop:"bakery"},removeTags:{brand:"Ditsch","brand:wikidata":"Q911573","brand:wikipedia":"en:Ditsch",name:"Ditsch",shop:"bakery"},matchScore:2,suggestion:true},"shop/bakery/Fornetti":{name:"Fornetti",icon:"maki-bakery",geometry:["point","area"],tags:{shop:"bakery","brand:wikidata":"Q1003020"},addTags:{brand:"Fornetti","brand:wikidata":"Q1003020","brand:wikipedia":"en:Fornetti",name:"Fornetti",shop:"bakery"},removeTags:{brand:"Fornetti","brand:wikidata":"Q1003020","brand:wikipedia":"en:Fornetti",name:"Fornetti",shop:"bakery"},matchScore:2,suggestion:true},"shop/bakery/Goldilocks":{name:"Goldilocks",icon:"maki-bakery",geometry:["point","area"],tags:{shop:"bakery","brand:wikidata":"Q5580198"},addTags:{brand:"Goldilocks","brand:wikidata":"Q5580198","brand:wikipedia":"en:Goldilocks Bakeshop",name:"Goldilocks",shop:"bakery"},removeTags:{brand:"Goldilocks","brand:wikidata":"Q5580198","brand:wikipedia":"en:Goldilocks Bakeshop",name:"Goldilocks",shop:"bakery"},matchScore:2,suggestion:true},"shop/bakery/Greggs":{name:"Greggs",icon:"maki-bakery",geometry:["point","area"],tags:{shop:"bakery","brand:wikidata":"Q3403981"},addTags:{brand:"Greggs","brand:wikidata":"Q3403981","brand:wikipedia":"en:Greggs",name:"Greggs",shop:"bakery"},removeTags:{brand:"Greggs","brand:wikidata":"Q3403981","brand:wikipedia":"en:Greggs",name:"Greggs",shop:"bakery"},matchScore:2,suggestion:true},"shop/bakery/Hofpfisterei":{name:"Hofpfisterei",icon:"maki-bakery",geometry:["point","area"],tags:{shop:"bakery","brand:wikidata":"Q1623217"},addTags:{brand:"Hofpfisterei","brand:wikidata":"Q1623217","brand:wikipedia":"en:Hofpfisterei",name:"Hofpfisterei",shop:"bakery"},removeTags:{brand:"Hofpfisterei","brand:wikidata":"Q1623217","brand:wikipedia":"en:Hofpfisterei",name:"Hofpfisterei",shop:"bakery"},matchScore:2,suggestion:true},"shop/bakery/Ihle":{name:"Ihle",icon:"maki-bakery",geometry:["point","area"],tags:{shop:"bakery","brand:wikidata":"Q881821"},addTags:{brand:"Ihle","brand:wikidata":"Q881821","brand:wikipedia":"en:Ihle",name:"Ihle",shop:"bakery"},removeTags:{brand:"Ihle","brand:wikidata":"Q881821","brand:wikipedia":"en:Ihle",name:"Ihle",shop:"bakery"},matchScore:2,suggestion:true},"shop/bakery/K&U Bäckerei":{name:"K&U Bäckerei",icon:"maki-bakery",geometry:["point","area"],tags:{shop:"bakery","brand:wikidata":"Q1719433"},addTags:{brand:"K&U Bäckerei","brand:wikidata":"Q1719433","brand:wikipedia":"de:K & U Bäckerei",name:"K&U Bäckerei",shop:"bakery"},removeTags:{brand:"K&U Bäckerei","brand:wikidata":"Q1719433","brand:wikipedia":"de:K & U Bäckerei",name:"K&U Bäckerei",shop:"bakery"},matchScore:2,suggestion:true},"shop/bakery/Kamps":{name:"Kamps",icon:"maki-bakery",geometry:["point","area"],tags:{shop:"bakery","brand:wikidata":"Q1723381"},addTags:{brand:"Kamps","brand:wikidata":"Q1723381","brand:wikipedia":"de:Kamps (Unternehmen)",name:"Kamps",shop:"bakery"},removeTags:{brand:"Kamps","brand:wikidata":"Q1723381","brand:wikipedia":"de:Kamps (Unternehmen)",name:"Kamps",shop:"bakery"},matchScore:2,suggestion:true},"shop/bakery/La Mie Câline":{name:"La Mie Câline",icon:"maki-bakery",geometry:["point","area"],tags:{shop:"bakery","brand:wikidata":"Q3210704"},addTags:{brand:"La Mie Câline","brand:wikidata":"Q3210704","brand:wikipedia":"fr:La Mie câline",name:"La Mie Câline",shop:"bakery"},removeTags:{brand:"La Mie Câline","brand:wikidata":"Q3210704","brand:wikipedia":"fr:La Mie câline",name:"La Mie Câline",shop:"bakery"},matchScore:2,suggestion:true},"shop/bakery/Le Crobag":{name:"Le Crobag",icon:"maki-bakery",geometry:["point","area"],tags:{shop:"bakery","brand:wikidata":"Q1558025"},addTags:{brand:"Le Crobag","brand:wikidata":"Q1558025","brand:wikipedia":"de:Le Crobag",name:"Le Crobag",shop:"bakery"},removeTags:{brand:"Le Crobag","brand:wikidata":"Q1558025","brand:wikipedia":"de:Le Crobag",name:"Le Crobag",shop:"bakery"},matchScore:2,suggestion:true},"shop/bakery/Lila Bäcker":{name:"Lila Bäcker",icon:"maki-bakery",geometry:["point","area"],tags:{shop:"bakery","brand:wikidata":"Q57516591"},addTags:{brand:"Lila Bäcker","brand:wikidata":"Q57516591",name:"Lila Bäcker",shop:"bakery"},removeTags:{brand:"Lila Bäcker","brand:wikidata":"Q57516591",name:"Lila Bäcker",shop:"bakery"},matchScore:2,suggestion:true},"shop/bakery/Musmanni":{name:"Musmanni",icon:"maki-bakery",geometry:["point","area"],tags:{shop:"bakery","brand:wikidata":"Q19382082"},addTags:{brand:"Musmanni","brand:wikidata":"Q19382082","brand:wikipedia":"no:Musmanni",name:"Musmanni",shop:"bakery"},removeTags:{brand:"Musmanni","brand:wikidata":"Q19382082","brand:wikipedia":"no:Musmanni",name:"Musmanni",shop:"bakery"},matchScore:2,suggestion:true},"shop/bakery/Paul":{name:"Paul",icon:"maki-bakery",geometry:["point","area"],tags:{shop:"bakery","brand:wikidata":"Q3370417"},addTags:{brand:"Paul","brand:wikidata":"Q3370417","brand:wikipedia":"en:Paul (bakery)",name:"Paul",shop:"bakery"},removeTags:{brand:"Paul","brand:wikidata":"Q3370417","brand:wikipedia":"en:Paul (bakery)",name:"Paul",shop:"bakery"},matchScore:2,suggestion:true},"shop/bakery/Red Ribbon":{name:"Red Ribbon",icon:"maki-bakery",geometry:["point","area"],tags:{shop:"bakery","brand:wikidata":"Q7304789"},addTags:{brand:"Red Ribbon","brand:wikidata":"Q7304789","brand:wikipedia":"en:Red Ribbon Bakeshop",name:"Red Ribbon",shop:"bakery"},removeTags:{brand:"Red Ribbon","brand:wikidata":"Q7304789","brand:wikipedia":"en:Red Ribbon Bakeshop",name:"Red Ribbon",shop:"bakery"},matchScore:2,suggestion:true},"shop/bakery/Ronde des Pains":{name:"Ronde des Pains",icon:"maki-bakery",geometry:["point","area"],tags:{shop:"bakery","brand:wikidata":"Q3441707"},addTags:{brand:"Ronde des Pains","brand:wikidata":"Q3441707","brand:wikipedia":"fr:Ronde des Pains",name:"Ronde des Pains",shop:"bakery"},removeTags:{brand:"Ronde des Pains","brand:wikidata":"Q3441707","brand:wikipedia":"fr:Ronde des Pains",name:"Ronde des Pains",shop:"bakery"},matchScore:2,suggestion:true},"shop/bakery/Sehne":{name:"Sehne",icon:"maki-bakery",geometry:["point","area"],tags:{shop:"bakery","brand:wikidata":"Q1314761"},addTags:{brand:"Sehne","brand:wikidata":"Q1314761","brand:wikipedia":"de:Sehne Backwaren",name:"Sehne",shop:"bakery"},removeTags:{brand:"Sehne","brand:wikidata":"Q1314761","brand:wikipedia":"de:Sehne Backwaren",name:"Sehne",shop:"bakery"},matchScore:2,suggestion:true},"shop/bakery/Steinecke":{name:"Steinecke",icon:"maki-bakery",geometry:["point","area"],tags:{shop:"bakery","brand:wikidata":"Q57516278"},addTags:{brand:"Steinecke","brand:wikidata":"Q57516278",name:"Steinecke",shop:"bakery"},removeTags:{brand:"Steinecke","brand:wikidata":"Q57516278",name:"Steinecke",shop:"bakery"},matchScore:2,suggestion:true},"shop/bakery/Ströck":{name:"Ströck",icon:"maki-bakery",geometry:["point","area"],tags:{shop:"bakery","brand:wikidata":"Q2357607"},addTags:{brand:"Ströck","brand:wikidata":"Q2357607","brand:wikipedia":"de:Ströck-Brot",name:"Ströck",shop:"bakery"},removeTags:{brand:"Ströck","brand:wikidata":"Q2357607","brand:wikipedia":"de:Ströck-Brot",name:"Ströck",shop:"bakery"},matchScore:2,suggestion:true},"shop/bakery/Wiener Feinbäcker":{name:"Wiener Feinbäcker",icon:"maki-bakery",geometry:["point","area"],tags:{shop:"bakery","brand:wikidata":"Q15854357"},addTags:{brand:"Wiener Feinbäcker","brand:wikidata":"Q15854357","brand:wikipedia":"de:Wiener Feinbäckerei Heberer",name:"Wiener Feinbäcker",shop:"bakery"},removeTags:{brand:"Wiener Feinbäcker","brand:wikidata":"Q15854357","brand:wikipedia":"de:Wiener Feinbäckerei Heberer",name:"Wiener Feinbäcker",shop:"bakery"},matchScore:2,suggestion:true},"shop/bakery/von Allwörden":{name:"von Allwörden",icon:"maki-bakery",geometry:["point","area"],tags:{shop:"bakery","brand:wikidata":"Q60411349"},addTags:{brand:"von Allwörden","brand:wikidata":"Q60411349","brand:wikipedia":"nds:Heinrich von Allwörden GmbH",name:"von Allwörden",shop:"bakery"},removeTags:{brand:"von Allwörden","brand:wikidata":"Q60411349","brand:wikipedia":"nds:Heinrich von Allwörden GmbH",name:"von Allwörden",shop:"bakery"},matchScore:2,suggestion:true},"shop/bakery/뚜레쥬르":{name:"뚜레쥬르",icon:"maki-bakery",geometry:["point","area"],tags:{shop:"bakery","brand:wikidata":"Q3535609"},addTags:{brand:"뚜레쥬르","brand:en":"Tous Les Jours","brand:wikidata":"Q3535609","brand:wikipedia":"ko:뚜레쥬르",name:"뚜레쥬르","name:en":"Tous Les Jours",shop:"bakery"},removeTags:{brand:"뚜레쥬르","brand:en":"Tous Les Jours","brand:wikidata":"Q3535609","brand:wikipedia":"ko:뚜레쥬르",name:"뚜레쥬르","name:en":"Tous Les Jours",shop:"bakery"},matchScore:2,suggestion:true},"shop/beauty/Bath & Body Works":{name:"Bath & Body Works",icon:"maki-shop",geometry:["point","area"],tags:{shop:"beauty","brand:wikidata":"Q810773"},addTags:{brand:"Bath & Body Works","brand:wikidata":"Q810773","brand:wikipedia":"en:Bath & Body Works",name:"Bath & Body Works",shop:"beauty"},removeTags:{brand:"Bath & Body Works","brand:wikidata":"Q810773","brand:wikipedia":"en:Bath & Body Works",name:"Bath & Body Works",shop:"beauty"},matchScore:2,suggestion:true},"shop/beauty/European Wax Center":{name:"European Wax Center",icon:"maki-shop",geometry:["point","area"],tags:{shop:"beauty","brand:wikidata":"Q5413426"},addTags:{brand:"European Wax Center","brand:wikidata":"Q5413426","brand:wikipedia":"en:European Wax Center",name:"European Wax Center",shop:"beauty"},removeTags:{brand:"European Wax Center","brand:wikidata":"Q5413426","brand:wikipedia":"en:European Wax Center",name:"European Wax Center",shop:"beauty"},matchScore:2,suggestion:true},"shop/beauty/Ulta Beauty":{name:"Ulta Beauty",icon:"maki-shop",geometry:["point","area"],tags:{shop:"beauty","brand:wikidata":"Q7880076"},addTags:{brand:"Ulta Beauty","brand:wikidata":"Q7880076","brand:wikipedia":"en:Ulta Beauty",name:"Ulta Beauty",shop:"beauty"},removeTags:{brand:"Ulta Beauty","brand:wikidata":"Q7880076","brand:wikipedia":"en:Ulta Beauty",name:"Ulta Beauty",shop:"beauty"},matchScore:2,suggestion:true},"shop/beauty/Yves Rocher":{name:"Yves Rocher",icon:"maki-shop",geometry:["point","area"],tags:{shop:"beauty","brand:wikidata":"Q28496595"},addTags:{brand:"Yves Rocher","brand:wikidata":"Q28496595","brand:wikipedia":"fr:Yves Rocher (entreprise)",name:"Yves Rocher",shop:"beauty"},removeTags:{brand:"Yves Rocher","brand:wikidata":"Q28496595","brand:wikipedia":"fr:Yves Rocher (entreprise)",name:"Yves Rocher",shop:"beauty"},matchScore:2,suggestion:true},"shop/bed/Dreams":{name:"Dreams",icon:"maki-lodging",geometry:["point","area"],tags:{shop:"bed","brand:wikidata":"Q5306688"},addTags:{brand:"Dreams","brand:wikidata":"Q5306688","brand:wikipedia":"en:Dreams (bed retailer)",name:"Dreams",shop:"bed"},removeTags:{brand:"Dreams","brand:wikidata":"Q5306688","brand:wikipedia":"en:Dreams (bed retailer)",name:"Dreams",shop:"bed"},matchScore:2,suggestion:true},"shop/bed/Matratzen Concord":{name:"Matratzen Concord",icon:"maki-lodging",geometry:["point","area"],tags:{shop:"bed","brand:wikidata":"Q18629057"},addTags:{brand:"Matratzen Concord","brand:wikidata":"Q18629057","brand:wikipedia":"de:Matratzen Concord",name:"Matratzen Concord",shop:"bed"},removeTags:{brand:"Matratzen Concord","brand:wikidata":"Q18629057","brand:wikipedia":"de:Matratzen Concord",name:"Matratzen Concord",shop:"bed"},matchScore:2,suggestion:true},"shop/bed/Mattress Firm":{name:"Mattress Firm",icon:"maki-lodging",geometry:["point","area"],tags:{shop:"bed","brand:wikidata":"Q6791878"},addTags:{brand:"Mattress Firm","brand:wikidata":"Q6791878","brand:wikipedia":"en:Mattress Firm",name:"Mattress Firm",shop:"bed"},removeTags:{brand:"Mattress Firm","brand:wikidata":"Q6791878","brand:wikipedia":"en:Mattress Firm",name:"Mattress Firm",shop:"bed"},matchScore:2,suggestion:true},"shop/bed/Sleep Number":{name:"Sleep Number",icon:"maki-lodging",geometry:["point","area"],tags:{shop:"bed","brand:wikidata":"Q7447640"},addTags:{brand:"Sleep Number","brand:wikidata":"Q7447640","brand:wikipedia":"en:Sleep Number",name:"Sleep Number",shop:"bed"},removeTags:{brand:"Sleep Number","brand:wikidata":"Q7447640","brand:wikipedia":"en:Sleep Number",name:"Sleep Number",shop:"bed"},matchScore:2,suggestion:true},"shop/bed/Sleepy's":{name:"Sleepy's",icon:"maki-lodging",geometry:["point","area"],tags:{shop:"bed","brand:wikidata":"Q17088336"},addTags:{brand:"Sleepy's","brand:wikidata":"Q17088336","brand:wikipedia":"en:Sleepy's",name:"Sleepy's",shop:"bed"},removeTags:{brand:"Sleepy's","brand:wikidata":"Q17088336","brand:wikipedia":"en:Sleepy's",name:"Sleepy's",shop:"bed"},matchScore:2,suggestion:true},"shop/beverages/Dursty":{name:"Dursty",icon:"maki-shop",geometry:["point","area"],tags:{shop:"beverages","brand:wikidata":"Q1267518"},addTags:{brand:"Dursty","brand:wikidata":"Q1267518","brand:wikipedia":"de:Dursty Getränkemärkte",name:"Dursty",shop:"beverages"},removeTags:{brand:"Dursty","brand:wikidata":"Q1267518","brand:wikipedia":"de:Dursty Getränkemärkte",name:"Dursty",shop:"beverages"},matchScore:2,suggestion:true},"shop/beverages/Edeka Getränkemarkt":{name:"Edeka Getränkemarkt",icon:"maki-shop",geometry:["point","area"],tags:{shop:"beverages","brand:wikidata":"Q57450576"},addTags:{brand:"Edeka Getränkemarkt","brand:wikidata":"Q57450576",name:"Edeka Getränkemarkt",shop:"beverages"},removeTags:{brand:"Edeka Getränkemarkt","brand:wikidata":"Q57450576",name:"Edeka Getränkemarkt",shop:"beverages"},matchScore:2,suggestion:true},"shop/beverages/Fristo":{name:"Fristo",icon:"maki-shop",geometry:["point","area"],tags:{shop:"beverages","brand:wikidata":"Q1465151"},addTags:{brand:"Fristo","brand:wikidata":"Q1465151","brand:wikipedia":"de:Fristo",name:"Fristo",shop:"beverages"},removeTags:{brand:"Fristo","brand:wikidata":"Q1465151","brand:wikipedia":"de:Fristo",name:"Fristo",shop:"beverages"},matchScore:2,suggestion:true},"shop/beverages/Fristo Getränkemarkt":{name:"Fristo Getränkemarkt",icon:"maki-shop",geometry:["point","area"],tags:{shop:"beverages","brand:wikidata":"Q1465151"},addTags:{brand:"Fristo Getränkemarkt","brand:wikidata":"Q1465151","brand:wikipedia":"de:Fristo",name:"Fristo Getränkemarkt",shop:"beverages"},removeTags:{brand:"Fristo Getränkemarkt","brand:wikidata":"Q1465151","brand:wikipedia":"de:Fristo",name:"Fristo Getränkemarkt",shop:"beverages"},matchScore:2,suggestion:true},"shop/beverages/Getränke Hoffmann":{name:"Getränke Hoffmann",icon:"maki-shop",geometry:["point","area"],tags:{shop:"beverages","brand:wikidata":"Q19284021"},addTags:{brand:"Getränke Hoffmann","brand:wikidata":"Q19284021","brand:wikipedia":"de:Getränke Hoffmann",name:"Getränke Hoffmann",shop:"beverages"},removeTags:{brand:"Getränke Hoffmann","brand:wikidata":"Q19284021","brand:wikipedia":"de:Getränke Hoffmann",name:"Getränke Hoffmann",shop:"beverages"},matchScore:2,suggestion:true},"shop/beverages/Hol'ab":{name:"Hol'ab",icon:"maki-shop",geometry:["point","area"],tags:{shop:"beverages","brand:wikidata":"Q57557270"},addTags:{brand:"Hol'ab","brand:wikidata":"Q57557270",name:"Hol'ab",shop:"beverages"},removeTags:{brand:"Hol'ab","brand:wikidata":"Q57557270",name:"Hol'ab",shop:"beverages"},matchScore:2,suggestion:true},"shop/beverages/Orterer Getränkemarkt":{name:"Orterer Getränkemarkt",icon:"maki-shop",geometry:["point","area"],tags:{shop:"beverages","brand:wikidata":"Q23787118"},addTags:{brand:"Orterer Getränkemarkt","brand:wikidata":"Q23787118","brand:wikipedia":"de:Orterer Gruppe",name:"Orterer Getränkemarkt",shop:"beverages"},removeTags:{brand:"Orterer Getränkemarkt","brand:wikidata":"Q23787118","brand:wikipedia":"de:Orterer Gruppe",name:"Orterer Getränkemarkt",shop:"beverages"},matchScore:2,suggestion:true},"shop/beverages/Rewe Getränkemarkt":{name:"Rewe Getränkemarkt",icon:"maki-shop",geometry:["point","area"],tags:{shop:"beverages","brand:wikidata":"Q57519344"},addTags:{brand:"Rewe Getränkemarkt","brand:wikidata":"Q57519344",name:"Rewe Getränkemarkt",shop:"beverages"},removeTags:{brand:"Rewe Getränkemarkt","brand:wikidata":"Q57519344",name:"Rewe Getränkemarkt",shop:"beverages"},matchScore:2,suggestion:true},"shop/beverages/Trinkgut":{name:"Trinkgut",icon:"maki-shop",geometry:["point","area"],tags:{shop:"beverages","brand:wikidata":"Q2453627"},addTags:{brand:"Trinkgut","brand:wikidata":"Q2453627","brand:wikipedia":"de:Trinkgut",name:"Trinkgut",shop:"beverages"},removeTags:{brand:"Trinkgut","brand:wikidata":"Q2453627","brand:wikipedia":"de:Trinkgut",name:"Trinkgut",shop:"beverages"},matchScore:2,suggestion:true},"shop/beverages/清心福全":{name:"清心福全",icon:"maki-shop",geometry:["point","area"],tags:{shop:"beverages","brand:wikidata":"Q10391229"},addTags:{brand:"清心福全","brand:wikidata":"Q10391229","brand:wikipedia":"zh:清心福全冷飲站",name:"清心福全",shop:"beverages"},removeTags:{brand:"清心福全","brand:wikidata":"Q10391229","brand:wikipedia":"zh:清心福全冷飲站",name:"清心福全",shop:"beverages"},matchScore:2,suggestion:true},"shop/bicycle/Evans Cycles":{name:"Evans Cycles",icon:"maki-bicycle",geometry:["point","area"],tags:{shop:"bicycle","brand:wikidata":"Q5415901"},addTags:{brand:"Evans Cycles","brand:wikidata":"Q5415901","brand:wikipedia":"en:Evans Cycles",name:"Evans Cycles",shop:"bicycle"},removeTags:{brand:"Evans Cycles","brand:wikidata":"Q5415901","brand:wikipedia":"en:Evans Cycles",name:"Evans Cycles",shop:"bicycle"},matchScore:2,suggestion:true},"shop/bicycle/Fri BikeShop":{name:"Fri BikeShop",icon:"maki-bicycle",geometry:["point","area"],tags:{shop:"bicycle","brand:wikidata":"Q26721030"},addTags:{brand:"Fri BikeShop","brand:wikidata":"Q26721030",name:"Fri BikeShop",shop:"bicycle"},removeTags:{brand:"Fri BikeShop","brand:wikidata":"Q26721030",name:"Fri BikeShop",shop:"bicycle"},matchScore:2,suggestion:true},"shop/bicycle/サイクルベースあさひ":{name:"サイクルベースあさひ",icon:"maki-bicycle",geometry:["point","area"],tags:{shop:"bicycle","brand:wikidata":"Q11257202"},addTags:{brand:"サイクルベースあさひ","brand:wikidata":"Q11257202","brand:wikipedia":"ja:あさひ (企業)",name:"サイクルベースあさひ",shop:"bicycle"},removeTags:{brand:"サイクルベースあさひ","brand:wikidata":"Q11257202","brand:wikipedia":"ja:あさひ (企業)",name:"サイクルベースあさひ",shop:"bicycle"},matchScore:2,suggestion:true},"shop/bookmaker/Betfred":{name:"Betfred",icon:"maki-shop",geometry:["point","area"],tags:{shop:"bookmaker","brand:wikidata":"Q4897425"},addTags:{brand:"Betfred","brand:wikidata":"Q4897425","brand:wikipedia":"en:Betfred",name:"Betfred",shop:"bookmaker"},removeTags:{brand:"Betfred","brand:wikidata":"Q4897425","brand:wikipedia":"en:Betfred",name:"Betfred",shop:"bookmaker"},matchScore:2,suggestion:true},"shop/bookmaker/Coral":{name:"Coral",icon:"maki-shop",geometry:["point","area"],tags:{shop:"bookmaker","brand:wikidata":"Q54621344"},addTags:{brand:"Coral","brand:wikidata":"Q54621344","brand:wikipedia":"en:Coral (bookmaker)",name:"Coral",shop:"bookmaker"},removeTags:{brand:"Coral","brand:wikidata":"Q54621344","brand:wikipedia":"en:Coral (bookmaker)",name:"Coral",shop:"bookmaker"},matchScore:2,suggestion:true},"shop/bookmaker/Fortuna":{name:"Fortuna",icon:"maki-shop",geometry:["point","area"],tags:{shop:"bookmaker","brand:wikidata":"Q25857973"},addTags:{brand:"Fortuna","brand:wikidata":"Q25857973","brand:wikipedia":"en:Fortuna Entertainment Group",name:"Fortuna",shop:"bookmaker"},removeTags:{brand:"Fortuna","brand:wikidata":"Q25857973","brand:wikipedia":"en:Fortuna Entertainment Group",name:"Fortuna",shop:"bookmaker"},matchScore:2,suggestion:true},"shop/bookmaker/Ladbrokes":{name:"Ladbrokes",icon:"maki-shop",geometry:["point","area"],tags:{shop:"bookmaker","brand:wikidata":"Q1799875"},addTags:{brand:"Ladbrokes","brand:wikidata":"Q1799875","brand:wikipedia":"en:Ladbrokes Coral",name:"Ladbrokes",shop:"bookmaker"},removeTags:{brand:"Ladbrokes","brand:wikidata":"Q1799875","brand:wikipedia":"en:Ladbrokes Coral",name:"Ladbrokes",shop:"bookmaker"},matchScore:2,suggestion:true},"shop/bookmaker/Paddy Power":{name:"Paddy Power",icon:"maki-shop",geometry:["point","area"],tags:{shop:"bookmaker","brand:wikidata":"Q3888718"},addTags:{brand:"Paddy Power","brand:wikidata":"Q3888718","brand:wikipedia":"en:Paddy Power",name:"Paddy Power",shop:"bookmaker"},removeTags:{brand:"Paddy Power","brand:wikidata":"Q3888718","brand:wikipedia":"en:Paddy Power",name:"Paddy Power",shop:"bookmaker"},matchScore:2,suggestion:true},"shop/bookmaker/Tipico":{name:"Tipico",icon:"maki-shop",geometry:["point","area"],tags:{shop:"bookmaker","brand:wikidata":"Q15851003"},addTags:{brand:"Tipico","brand:wikidata":"Q15851003","brand:wikipedia":"en:Tipico",name:"Tipico",shop:"bookmaker"},removeTags:{brand:"Tipico","brand:wikidata":"Q15851003","brand:wikipedia":"en:Tipico",name:"Tipico",shop:"bookmaker"},matchScore:2,suggestion:true},"shop/bookmaker/William Hill":{name:"William Hill",icon:"maki-shop",geometry:["point","area"],tags:{shop:"bookmaker","brand:wikidata":"Q4053147"},addTags:{brand:"William Hill","brand:wikidata":"Q4053147","brand:wikipedia":"en:William Hill (bookmaker)",name:"William Hill",shop:"bookmaker"},removeTags:{brand:"William Hill","brand:wikidata":"Q4053147","brand:wikipedia":"en:William Hill (bookmaker)",name:"William Hill",shop:"bookmaker"},matchScore:2,suggestion:true},"shop/bookmaker/ΟΠΑΠ":{name:"ΟΠΑΠ",icon:"maki-shop",geometry:["point","area"],tags:{shop:"bookmaker","brand:wikidata":"Q2007823"},addTags:{brand:"ΟΠΑΠ","brand:en":"OPAP","brand:wikidata":"Q2007823","brand:wikipedia":"en:OPAP",name:"ΟΠΑΠ","name:en":"OPAP",shop:"bookmaker"},removeTags:{brand:"ΟΠΑΠ","brand:en":"OPAP","brand:wikidata":"Q2007823","brand:wikipedia":"en:OPAP",name:"ΟΠΑΠ","name:en":"OPAP",shop:"bookmaker"},matchScore:2,suggestion:true},"shop/bookmaker/Фонбет":{name:"Фонбет",icon:"maki-shop",geometry:["point","area"],tags:{shop:"bookmaker","brand:wikidata":"Q49137910"},addTags:{brand:"Фонбет","brand:wikidata":"Q49137910","brand:wikipedia":"ru:Фонбет",name:"Фонбет",shop:"bookmaker"},removeTags:{brand:"Фонбет","brand:wikidata":"Q49137910","brand:wikipedia":"ru:Фонбет",name:"Фонбет",shop:"bookmaker"},matchScore:2,suggestion:true},"shop/books/Akademibokhandeln":{name:"Akademibokhandeln",icon:"maki-shop",geometry:["point","area"],tags:{shop:"books","brand:wikidata":"Q10403918"},addTags:{brand:"Akademibokhandeln","brand:wikidata":"Q10403918","brand:wikipedia":"sv:Akademibokhandeln",name:"Akademibokhandeln",shop:"books"},removeTags:{brand:"Akademibokhandeln","brand:wikidata":"Q10403918","brand:wikipedia":"sv:Akademibokhandeln",name:"Akademibokhandeln",shop:"books"},matchScore:2,suggestion:true},"shop/books/Barnes & Noble":{name:"Barnes & Noble",icon:"maki-shop",geometry:["point","area"],tags:{shop:"books","brand:wikidata":"Q795454"},addTags:{brand:"Barnes & Noble","brand:wikidata":"Q795454","brand:wikipedia":"en:Barnes & Noble",name:"Barnes & Noble",shop:"books"},removeTags:{brand:"Barnes & Noble","brand:wikidata":"Q795454","brand:wikipedia":"en:Barnes & Noble",name:"Barnes & Noble",shop:"books"},matchScore:2,suggestion:true},"shop/books/Bruna":{name:"Bruna",icon:"maki-shop",geometry:["point","area"],tags:{shop:"books","brand:wikidata":"Q3317555"},addTags:{brand:"Bruna","brand:wikidata":"Q3317555","brand:wikipedia":"nl:Bruna (retail chain)",name:"Bruna",shop:"books"},removeTags:{brand:"Bruna","brand:wikidata":"Q3317555","brand:wikipedia":"nl:Bruna (retail chain)",name:"Bruna",shop:"books"},matchScore:2,suggestion:true},"shop/books/Chapters":{name:"Chapters",icon:"maki-shop",geometry:["point","area"],tags:{shop:"books","brand:wikidata":"Q5073540"},addTags:{brand:"Chapters","brand:wikidata":"Q5073540","brand:wikipedia":"en:Chapters",name:"Chapters",shop:"books"},removeTags:{brand:"Chapters","brand:wikidata":"Q5073540","brand:wikipedia":"en:Chapters",name:"Chapters",shop:"books"},matchScore:2,suggestion:true},"shop/books/Empik":{name:"Empik",icon:"maki-shop",geometry:["point","area"],tags:{shop:"books","brand:wikidata":"Q3045978"},addTags:{brand:"Empik","brand:wikidata":"Q3045978","brand:wikipedia":"en:Empik",name:"Empik",shop:"books"},removeTags:{brand:"Empik","brand:wikidata":"Q3045978","brand:wikipedia":"en:Empik",name:"Empik",shop:"books"},matchScore:2,suggestion:true},"shop/books/Fnac":{name:"Fnac",icon:"maki-shop",geometry:["point","area"],tags:{shop:"books","brand:wikidata":"Q676585"},addTags:{brand:"Fnac","brand:wikidata":"Q676585","brand:wikipedia":"en:Fnac",name:"Fnac",shop:"books"},removeTags:{brand:"Fnac","brand:wikidata":"Q676585","brand:wikipedia":"en:Fnac",name:"Fnac",shop:"books"},matchScore:2,suggestion:true},"shop/books/Half Price Books":{name:"Half Price Books",icon:"maki-shop",geometry:["point","area"],tags:{shop:"books","brand:wikidata":"Q5641744"},addTags:{brand:"Half Price Books","brand:wikidata":"Q5641744","brand:wikipedia":"en:Half Price Books",name:"Half Price Books",shop:"books"},removeTags:{brand:"Half Price Books","brand:wikidata":"Q5641744","brand:wikipedia":"en:Half Price Books",name:"Half Price Books",shop:"books"},matchScore:2,suggestion:true},"shop/books/Hugendubel":{name:"Hugendubel",icon:"maki-shop",geometry:["point","area"],tags:{shop:"books","brand:wikidata":"Q1634142"},addTags:{brand:"Hugendubel","brand:wikidata":"Q1634142","brand:wikipedia":"en:Hugendubel",name:"Hugendubel",shop:"books"},removeTags:{brand:"Hugendubel","brand:wikidata":"Q1634142","brand:wikipedia":"en:Hugendubel",name:"Hugendubel",shop:"books"},matchScore:2,suggestion:true},"shop/books/National Book Store":{name:"National Book Store",icon:"maki-shop",geometry:["point","area"],tags:{shop:"books","brand:wikidata":"Q6971094"},addTags:{brand:"National Book Store","brand:wikidata":"Q6971094","brand:wikipedia":"en:National Book Store",name:"National Book Store",shop:"books"},removeTags:{brand:"National Book Store","brand:wikidata":"Q6971094","brand:wikipedia":"en:National Book Store",name:"National Book Store",shop:"books"},matchScore:2,suggestion:true},"shop/books/Standaard Boekhandel":{name:"Standaard Boekhandel",icon:"maki-shop",geometry:["point","area"],tags:{shop:"books","brand:wikidata":"Q3496554"},addTags:{brand:"Standaard Boekhandel","brand:wikidata":"Q3496554","brand:wikipedia":"nl:Standaard Boekhandel",name:"Standaard Boekhandel",shop:"books"},removeTags:{brand:"Standaard Boekhandel","brand:wikidata":"Q3496554","brand:wikipedia":"nl:Standaard Boekhandel",name:"Standaard Boekhandel",shop:"books"},matchScore:2,suggestion:true},"shop/books/TSUTAYA":{name:"TSUTAYA",icon:"maki-shop",geometry:["point","area"],tags:{shop:"books","brand:wikidata":"Q5193457"},addTags:{brand:"TSUTAYA","brand:wikidata":"Q5193457","brand:wikipedia":"ja:カルチュア・コンビニエンス・クラブ",name:"TSUTAYA",shop:"books"},removeTags:{brand:"TSUTAYA","brand:wikidata":"Q5193457","brand:wikipedia":"ja:カルチュア・コンビニエンス・クラブ",name:"TSUTAYA",shop:"books"},matchScore:2,suggestion:true},"shop/books/Thalia":{name:"Thalia",icon:"maki-shop",geometry:["point","area"],tags:{shop:"books","brand:wikidata":"Q2408854"},addTags:{brand:"Thalia","brand:wikidata":"Q2408854","brand:wikipedia":"de:Thalia Bücher",name:"Thalia",shop:"books"},removeTags:{brand:"Thalia","brand:wikidata":"Q2408854","brand:wikipedia":"de:Thalia Bücher",name:"Thalia",shop:"books"},matchScore:2,suggestion:true},"shop/books/The Works":{name:"The Works",icon:"maki-shop",geometry:["point","area"],tags:{shop:"books","brand:wikidata":"Q7775853"},addTags:{brand:"The Works","brand:wikidata":"Q7775853","brand:wikipedia":"en:The Works (retailer)",name:"The Works",shop:"books"},removeTags:{brand:"The Works","brand:wikidata":"Q7775853","brand:wikipedia":"en:The Works (retailer)",name:"The Works",shop:"books"},matchScore:2,suggestion:true},"shop/books/Waterstones":{name:"Waterstones",icon:"maki-shop",geometry:["point","area"],tags:{shop:"books","brand:wikidata":"Q151779"},addTags:{brand:"Waterstones","brand:wikidata":"Q151779","brand:wikipedia":"en:Waterstones",name:"Waterstones",shop:"books"},removeTags:{brand:"Waterstones","brand:wikidata":"Q151779","brand:wikipedia":"en:Waterstones",name:"Waterstones",shop:"books"},matchScore:2,suggestion:true},"shop/books/Weltbild":{name:"Weltbild",icon:"maki-shop",geometry:["point","area"],tags:{shop:"books","brand:wikidata":"Q883522"},addTags:{brand:"Weltbild","brand:wikidata":"Q883522","brand:wikipedia":"en:Weltbild Publishing Group",name:"Weltbild",shop:"books"},removeTags:{brand:"Weltbild","brand:wikidata":"Q883522","brand:wikipedia":"en:Weltbild Publishing Group",name:"Weltbild",shop:"books"},matchScore:2,suggestion:true},"shop/books/Буквоед":{name:"Буквоед",icon:"maki-shop",geometry:["point","area"],tags:{shop:"books","brand:wikidata":"Q4098549"},addTags:{brand:"Буквоед","brand:wikidata":"Q4098549","brand:wikipedia":"ru:Буквоед",name:"Буквоед",shop:"books"},removeTags:{brand:"Буквоед","brand:wikidata":"Q4098549","brand:wikipedia":"ru:Буквоед",name:"Буквоед",shop:"books"},matchScore:2,suggestion:true},"shop/books/Читай-город":{name:"Читай-город",icon:"maki-shop",geometry:["point","area"],tags:{shop:"books","brand:wikidata":"Q4516645"},addTags:{brand:"Читай-город","brand:wikidata":"Q4516645","brand:wikipedia":"ru:Читай-город",name:"Читай-город",shop:"books"},removeTags:{brand:"Читай-город","brand:wikidata":"Q4516645","brand:wikipedia":"ru:Читай-город",name:"Читай-город",shop:"books"},matchScore:2,suggestion:true},"shop/books/ブックオフ":{name:"ブックオフ",icon:"maki-shop",geometry:["point","area"],tags:{shop:"books","brand:wikidata":"Q893011"},addTags:{brand:"ブックオフ","brand:en":"Book Off","brand:wikidata":"Q893011","brand:wikipedia":"en:Book Off",name:"ブックオフ","name:en":"Book Off",shop:"books"},removeTags:{brand:"ブックオフ","brand:en":"Book Off","brand:wikidata":"Q893011","brand:wikipedia":"en:Book Off",name:"ブックオフ","name:en":"Book Off",shop:"books"},matchScore:2,suggestion:true},"shop/books/新华书店":{name:"新华书店",icon:"maki-shop",geometry:["point","area"],tags:{shop:"books","brand:wikidata":"Q6124193"},addTags:{brand:"新华书店","brand:en":"Xinhua Bookstore","brand:wikidata":"Q6124193","brand:wikipedia":"en:Xinhua Bookstore",name:"新华书店","name:en":"Xinhua Bookstore",shop:"books"},removeTags:{brand:"新华书店","brand:en":"Xinhua Bookstore","brand:wikidata":"Q6124193","brand:wikipedia":"en:Xinhua Bookstore",name:"新华书店","name:en":"Xinhua Bookstore",shop:"books"},matchScore:2,suggestion:true},"shop/butcher/Coqivoire":{name:"Coqivoire",icon:"fas-bacon",geometry:["point","area"],tags:{shop:"butcher","brand:wikidata":"Q60183284"},addTags:{brand:"Coqivoire","brand:wikidata":"Q60183284",butcher:"poultry",name:"Coqivoire",shop:"butcher"},removeTags:{brand:"Coqivoire","brand:wikidata":"Q60183284",butcher:"poultry",name:"Coqivoire",shop:"butcher"},matchScore:2,suggestion:true},"shop/butcher/Foani":{name:"Foani",icon:"fas-bacon",geometry:["point","area"],tags:{shop:"butcher","brand:wikidata":"Q60183335"},addTags:{brand:"Foani","brand:wikidata":"Q60183335",butcher:"poultry",name:"Foani",shop:"butcher"},removeTags:{brand:"Foani","brand:wikidata":"Q60183335",butcher:"poultry",name:"Foani",shop:"butcher"},matchScore:2,suggestion:true},"shop/butcher/Vinzenzmurr":{name:"Vinzenzmurr",icon:"fas-bacon",geometry:["point","area"],tags:{shop:"butcher","brand:wikidata":"Q2527361"},addTags:{brand:"Vinzenzmurr","brand:wikidata":"Q2527361","brand:wikipedia":"de:Vinzenzmurr",name:"Vinzenzmurr",shop:"butcher"},removeTags:{brand:"Vinzenzmurr","brand:wikidata":"Q2527361","brand:wikipedia":"de:Vinzenzmurr",name:"Vinzenzmurr",shop:"butcher"},matchScore:2,suggestion:true},"shop/butcher/Великолукский мясокомбинат":{name:"Великолукский мясокомбинат",icon:"fas-bacon",geometry:["point","area"],tags:{shop:"butcher","brand:wikidata":"Q18401767"},addTags:{brand:"Великолукский мясокомбинат","brand:wikidata":"Q18401767","brand:wikipedia":"ru:Великолукский мясокомбинат",name:"Великолукский мясокомбинат",shop:"butcher"},removeTags:{brand:"Великолукский мясокомбинат","brand:wikidata":"Q18401767","brand:wikipedia":"ru:Великолукский мясокомбинат",name:"Великолукский мясокомбинат",shop:"butcher"},matchScore:2,suggestion:true},"shop/butcher/Родинна ковбаска":{name:"Родинна ковбаска",icon:"fas-bacon",geometry:["point","area"],tags:{shop:"butcher","brand:wikidata":"Q30969660"},addTags:{brand:"Родинна ковбаска","brand:en":"Rodynna-kovbaska","brand:wikidata":"Q30969660","brand:wikipedia":"uk:ТзОВ «Барком»",name:"Родинна ковбаска","name:en":"Rodynna-kovbaska",shop:"butcher"},removeTags:{brand:"Родинна ковбаска","brand:en":"Rodynna-kovbaska","brand:wikidata":"Q30969660","brand:wikipedia":"uk:ТзОВ «Барком»",name:"Родинна ковбаска","name:en":"Rodynna-kovbaska",shop:"butcher"},matchScore:2,suggestion:true},"shop/car_parts/Advance Auto Parts":{name:"Advance Auto Parts",icon:"maki-car",geometry:["point","area"],tags:{shop:"car_parts","brand:wikidata":"Q4686051"},addTags:{brand:"Advance Auto Parts","brand:wikidata":"Q4686051","brand:wikipedia":"en:Advance Auto Parts",name:"Advance Auto Parts",shop:"car_parts"},removeTags:{brand:"Advance Auto Parts","brand:wikidata":"Q4686051","brand:wikipedia":"en:Advance Auto Parts",name:"Advance Auto Parts",shop:"car_parts"},matchScore:2,suggestion:true},"shop/car_parts/AutoZone":{name:"AutoZone",icon:"maki-car",geometry:["point","area"],tags:{shop:"car_parts","brand:wikidata":"Q4826087"},addTags:{brand:"AutoZone","brand:wikidata":"Q4826087","brand:wikipedia":"en:AutoZone",name:"AutoZone",shop:"car_parts"},removeTags:{brand:"AutoZone","brand:wikidata":"Q4826087","brand:wikipedia":"en:AutoZone",name:"AutoZone",shop:"car_parts"},matchScore:2,suggestion:true},"shop/car_parts/Halfords":{name:"Halfords",icon:"maki-car",geometry:["point","area"],tags:{shop:"car_parts","brand:wikidata":"Q3398786"},addTags:{brand:"Halfords","brand:wikidata":"Q3398786","brand:wikipedia":"en:Halfords",name:"Halfords","service:bicycle:retail":"yes",shop:"car_parts"},removeTags:{brand:"Halfords","brand:wikidata":"Q3398786","brand:wikipedia":"en:Halfords",name:"Halfords","service:bicycle:retail":"yes",shop:"car_parts"},matchScore:2,suggestion:true},"shop/car_parts/NAPA Auto Parts":{name:"NAPA Auto Parts",icon:"maki-car",geometry:["point","area"],tags:{shop:"car_parts","brand:wikidata":"Q6970842"},addTags:{brand:"NAPA Auto Parts","brand:wikidata":"Q6970842","brand:wikipedia":"en:National Automotive Parts Association",name:"NAPA Auto Parts",shop:"car_parts"},removeTags:{brand:"NAPA Auto Parts","brand:wikidata":"Q6970842","brand:wikipedia":"en:National Automotive Parts Association",name:"NAPA Auto Parts",shop:"car_parts"},matchScore:2,suggestion:true},"shop/car_parts/O'Reilly Auto Parts":{name:"O'Reilly Auto Parts",icon:"maki-car",geometry:["point","area"],tags:{shop:"car_parts","brand:wikidata":"Q7071951"},addTags:{brand:"O'Reilly Auto Parts","brand:wikidata":"Q7071951","brand:wikipedia":"en:O'Reilly Auto Parts",name:"O'Reilly Auto Parts",shop:"car_parts"},removeTags:{brand:"O'Reilly Auto Parts","brand:wikidata":"Q7071951","brand:wikipedia":"en:O'Reilly Auto Parts",name:"O'Reilly Auto Parts",shop:"car_parts"},matchScore:2,suggestion:true},"shop/car_parts/Repco":{name:"Repco",icon:"maki-car",geometry:["point","area"],tags:{shop:"car_parts","brand:wikidata":"Q173425"},addTags:{brand:"Repco","brand:wikidata":"Q173425","brand:wikipedia":"en:Repco",name:"Repco",shop:"car_parts"},removeTags:{brand:"Repco","brand:wikidata":"Q173425","brand:wikipedia":"en:Repco",name:"Repco",shop:"car_parts"},matchScore:2,suggestion:true},"shop/car_parts/Supercheap Auto":{name:"Supercheap Auto",icon:"maki-car",geometry:["point","area"],tags:{shop:"car_parts","brand:wikidata":"Q7643119"},addTags:{brand:"Supercheap Auto","brand:wikidata":"Q7643119","brand:wikipedia":"en:Supercheap Auto",name:"Supercheap Auto",shop:"car_parts"},removeTags:{brand:"Supercheap Auto","brand:wikidata":"Q7643119","brand:wikipedia":"en:Supercheap Auto",name:"Supercheap Auto",shop:"car_parts"},matchScore:2,suggestion:true},"shop/car_parts/Автомир":{name:"Автомир",icon:"maki-car",geometry:["point","area"],tags:{shop:"car_parts","brand:wikidata":"Q4056321"},addTags:{brand:"Автомир","brand:wikidata":"Q4056321","brand:wikipedia":"ru:Автомир (автодилер)",name:"Автомир",shop:"car_parts"},removeTags:{brand:"Автомир","brand:wikidata":"Q4056321","brand:wikipedia":"ru:Автомир (автодилер)",name:"Автомир",shop:"car_parts"},matchScore:2,suggestion:true},"shop/car_parts/イエローハット":{name:"イエローハット",icon:"maki-car",geometry:["point","area"],tags:{shop:"car_parts","brand:wikidata":"Q11285915"},addTags:{brand:"イエローハット","brand:wikidata":"Q11285915","brand:wikipedia":"ja:イエローハット",name:"イエローハット",shop:"car_parts"},removeTags:{brand:"イエローハット","brand:wikidata":"Q11285915","brand:wikipedia":"ja:イエローハット",name:"イエローハット",shop:"car_parts"},matchScore:2,suggestion:true},"shop/car_parts/オートバックス":{name:"オートバックス",icon:"maki-car",geometry:["point","area"],tags:{shop:"car_parts","brand:wikidata":"Q7886426"},addTags:{brand:"オートバックス","brand:wikidata":"Q7886426","brand:wikipedia":"ja:オートバックスセブン",name:"オートバックス",shop:"car_parts"},removeTags:{brand:"オートバックス","brand:wikidata":"Q7886426","brand:wikipedia":"ja:オートバックスセブン",name:"オートバックス",shop:"car_parts"},matchScore:2,suggestion:true},"shop/car_parts/タイヤ館":{name:"タイヤ館",icon:"maki-car",geometry:["point","area"],tags:{shop:"car_parts","brand:wikidata":"Q11315808"},addTags:{brand:"タイヤ館","brand:wikidata":"Q11315808","brand:wikipedia":"ja:タイヤ館",name:"タイヤ館",shop:"car_parts"},removeTags:{brand:"タイヤ館","brand:wikidata":"Q11315808","brand:wikipedia":"ja:タイヤ館",name:"タイヤ館",shop:"car_parts"},matchScore:2,suggestion:true},"shop/car_repair/A.T.U":{name:"A.T.U",icon:"maki-car-repair",geometry:["point","area"],tags:{shop:"car_repair","brand:wikidata":"Q784721"},addTags:{brand:"A.T.U","brand:wikidata":"Q784721","brand:wikipedia":"de:Auto-Teile-Unger",name:"A.T.U",shop:"car_repair"},removeTags:{brand:"A.T.U","brand:wikidata":"Q784721","brand:wikipedia":"de:Auto-Teile-Unger",name:"A.T.U",shop:"car_repair"},matchScore:2,suggestion:true},"shop/car_repair/ATS Euromaster":{name:"ATS Euromaster",icon:"maki-car-repair",geometry:["point","area"],tags:{shop:"car_repair","brand:wikidata":"Q4654920"},addTags:{brand:"ATS Euromaster","brand:wikidata":"Q4654920","brand:wikipedia":"en:ATS Euromaster",name:"ATS Euromaster",shop:"car_repair"},removeTags:{brand:"ATS Euromaster","brand:wikidata":"Q4654920","brand:wikipedia":"en:ATS Euromaster",name:"ATS Euromaster",shop:"car_repair"},matchScore:2,suggestion:true},"shop/car_repair/Bosch Car Service":{name:"Bosch Car Service",icon:"maki-car-repair",geometry:["point","area"],tags:{shop:"car_repair","brand:wikidata":"Q234021"},addTags:{brand:"Bosch Car Service","brand:wikidata":"Q234021","brand:wikipedia":"de:Robert Bosch GmbH",name:"Bosch Car Service",shop:"car_repair"},removeTags:{brand:"Bosch Car Service","brand:wikidata":"Q234021","brand:wikipedia":"de:Robert Bosch GmbH",name:"Bosch Car Service",shop:"car_repair"},matchScore:2,suggestion:true},"shop/car_repair/Carglass":{name:"Carglass",icon:"maki-car-repair",geometry:["point","area"],tags:{shop:"car_repair","brand:wikidata":"Q1035997"},addTags:{brand:"Carglass","brand:wikidata":"Q1035997","brand:wikipedia":"de:Carglass",name:"Carglass",shop:"car_repair"},removeTags:{brand:"Carglass","brand:wikidata":"Q1035997","brand:wikipedia":"de:Carglass",name:"Carglass",shop:"car_repair"},matchScore:2,suggestion:true},"shop/car_repair/Feu Vert":{name:"Feu Vert",icon:"maki-car-repair",geometry:["point","area"],tags:{shop:"car_repair","brand:wikidata":"Q3070922"},addTags:{brand:"Feu Vert","brand:wikidata":"Q3070922","brand:wikipedia":"fr:Feu Vert (entreprise)",name:"Feu Vert",shop:"car_repair"},removeTags:{brand:"Feu Vert","brand:wikidata":"Q3070922","brand:wikipedia":"fr:Feu Vert (entreprise)",name:"Feu Vert",shop:"car_repair"},matchScore:2,suggestion:true},"shop/car_repair/Firestone":{name:"Firestone",icon:"maki-car-repair",geometry:["point","area"],tags:{shop:"car_repair","brand:wikidata":"Q420837"},addTags:{brand:"Firestone","brand:wikidata":"Q420837","brand:wikipedia":"en:Firestone Tire and Rubber Company",name:"Firestone",shop:"car_repair"},removeTags:{brand:"Firestone","brand:wikidata":"Q420837","brand:wikipedia":"en:Firestone Tire and Rubber Company",name:"Firestone",shop:"car_repair"},matchScore:2,suggestion:true},"shop/car_repair/Ford":{name:"Ford",icon:"maki-car-repair",geometry:["point","area"],tags:{shop:"car_repair","brand:wikidata":"Q44294"},addTags:{brand:"Ford","brand:wikidata":"Q44294","brand:wikipedia":"en:Ford Motor Company",name:"Ford",shop:"car_repair"},removeTags:{brand:"Ford","brand:wikidata":"Q44294","brand:wikipedia":"en:Ford Motor Company",name:"Ford",shop:"car_repair"},matchScore:2,suggestion:true},"shop/car_repair/Goodyear":{name:"Goodyear",icon:"maki-car-repair",geometry:["point","area"],tags:{shop:"car_repair","brand:wikidata":"Q620875"},addTags:{brand:"Goodyear","brand:wikidata":"Q620875","brand:wikipedia":"en:Goodyear Tire and Rubber Company",name:"Goodyear",shop:"car_repair"},removeTags:{brand:"Goodyear","brand:wikidata":"Q620875","brand:wikipedia":"en:Goodyear Tire and Rubber Company",name:"Goodyear",shop:"car_repair"},matchScore:2,suggestion:true},"shop/car_repair/Grease Monkey":{name:"Grease Monkey",icon:"maki-car-repair",geometry:["point","area"],tags:{shop:"car_repair","brand:wikidata":"Q5598563"},addTags:{brand:"Grease Monkey","brand:wikidata":"Q5598563","brand:wikipedia":"en:Grease Monkey (business)",name:"Grease Monkey",shop:"car_repair"},removeTags:{brand:"Grease Monkey","brand:wikidata":"Q5598563","brand:wikipedia":"en:Grease Monkey (business)",name:"Grease Monkey",shop:"car_repair"},matchScore:2,suggestion:true},"shop/car_repair/Halfords Autocentre":{name:"Halfords Autocentre",icon:"maki-car-repair",geometry:["point","area"],tags:{shop:"car_repair","brand:wikidata":"Q5641894"},addTags:{brand:"Halfords Auocentre","brand:wikidata":"Q5641894","brand:wikipedia":"en:Halfords Autocentre",name:"Halfords Autocentre",shop:"car_repair"},removeTags:{brand:"Halfords Auocentre","brand:wikidata":"Q5641894","brand:wikipedia":"en:Halfords Autocentre",name:"Halfords Autocentre",shop:"car_repair"},matchScore:2,suggestion:true},"shop/car_repair/Jiffy Lube":{name:"Jiffy Lube",icon:"maki-car-repair",geometry:["point","area"],tags:{shop:"car_repair","brand:wikidata":"Q6192247"},addTags:{brand:"Jiffy Lube","brand:wikidata":"Q6192247","brand:wikipedia":"en:Jiffy Lube",name:"Jiffy Lube",shop:"car_repair"},removeTags:{brand:"Jiffy Lube","brand:wikidata":"Q6192247","brand:wikipedia":"en:Jiffy Lube",name:"Jiffy Lube",shop:"car_repair"},matchScore:2,suggestion:true},"shop/car_repair/Kwik Fit":{name:"Kwik Fit",icon:"maki-car-repair",geometry:["point","area"],tags:{shop:"car_repair","brand:wikidata":"Q958053"},addTags:{brand:"Kwik Fit","brand:wikidata":"Q958053","brand:wikipedia":"en:Kwik Fit",name:"Kwik Fit",shop:"car_repair"},removeTags:{brand:"Kwik Fit","brand:wikidata":"Q958053","brand:wikipedia":"en:Kwik Fit",name:"Kwik Fit",shop:"car_repair"},matchScore:2,suggestion:true},"shop/car_repair/Meineke":{name:"Meineke",icon:"maki-car-repair",geometry:["point","area"],tags:{shop:"car_repair","brand:wikidata":"Q6810159"},addTags:{brand:"Meineke","brand:wikidata":"Q6810159","brand:wikipedia":"en:Meineke Car Care Centers",name:"Meineke",shop:"car_repair"},removeTags:{brand:"Meineke","brand:wikidata":"Q6810159","brand:wikipedia":"en:Meineke Car Care Centers",name:"Meineke",shop:"car_repair"},matchScore:2,suggestion:true},"shop/car_repair/Mekonomen":{name:"Mekonomen",icon:"maki-car-repair",geometry:["point","area"],tags:{shop:"car_repair","brand:wikidata":"Q10580079"},addTags:{brand:"Mekonomen","brand:wikidata":"Q10580079","brand:wikipedia":"sv:Mekonomen",name:"Mekonomen",shop:"car_repair"},removeTags:{brand:"Mekonomen","brand:wikidata":"Q10580079","brand:wikipedia":"sv:Mekonomen",name:"Mekonomen",shop:"car_repair"},matchScore:2,suggestion:true},"shop/car_repair/Midas":{name:"Midas",icon:"maki-car-repair",geometry:["point","area"],tags:{shop:"car_repair","brand:wikidata":"Q3312613"},addTags:{brand:"Midas","brand:wikidata":"Q3312613","brand:wikipedia":"en:Midas (automotive service)",name:"Midas",shop:"car_repair"},removeTags:{brand:"Midas","brand:wikidata":"Q3312613","brand:wikipedia":"en:Midas (automotive service)",name:"Midas",shop:"car_repair"},matchScore:2,suggestion:true},"shop/car_repair/Mr. Lube":{name:"Mr. Lube",icon:"maki-car-repair",geometry:["point","area"],tags:{shop:"car_repair","brand:wikidata":"Q17104067"},addTags:{brand:"Mr. Lube","brand:wikidata":"Q17104067","brand:wikipedia":"en:Mr. Lube",name:"Mr. Lube",shop:"car_repair"},removeTags:{brand:"Mr. Lube","brand:wikidata":"Q17104067","brand:wikipedia":"en:Mr. Lube",name:"Mr. Lube",shop:"car_repair"},matchScore:2,suggestion:true},"shop/car_repair/Norauto":{name:"Norauto",icon:"maki-car-repair",geometry:["point","area"],tags:{shop:"car_repair","brand:wikidata":"Q3317698"},addTags:{brand:"Norauto","brand:wikidata":"Q3317698","brand:wikipedia":"en:Mobivia Groupe",name:"Norauto",shop:"car_repair"},removeTags:{brand:"Norauto","brand:wikidata":"Q3317698","brand:wikipedia":"en:Mobivia Groupe",name:"Norauto",shop:"car_repair"},matchScore:2,suggestion:true},"shop/car_repair/Pep Boys":{name:"Pep Boys",icon:"maki-car-repair",geometry:["point","area"],tags:{shop:"car_repair","brand:wikidata":"Q3375007"},addTags:{brand:"Pep Boys","brand:wikidata":"Q3375007","brand:wikipedia":"en:Pep Boys",name:"Pep Boys",shop:"car_repair"},removeTags:{brand:"Pep Boys","brand:wikidata":"Q3375007","brand:wikipedia":"en:Pep Boys",name:"Pep Boys",shop:"car_repair"},matchScore:2,suggestion:true},"shop/car_repair/Peugeot":{name:"Peugeot",icon:"maki-car-repair",geometry:["point","area"],tags:{shop:"car_repair","brand:wikidata":"Q6742"},addTags:{brand:"Peugeot","brand:wikidata":"Q6742","brand:wikipedia":"en:Peugeot",name:"Peugeot",shop:"car_repair"},removeTags:{brand:"Peugeot","brand:wikidata":"Q6742","brand:wikipedia":"en:Peugeot",name:"Peugeot",shop:"car_repair"},matchScore:2,suggestion:true},"shop/car_repair/Point S":{name:"Point S",icon:"maki-car-repair",geometry:["point","area"],tags:{shop:"car_repair","brand:wikidata":"Q3393358"},addTags:{brand:"Point S","brand:wikidata":"Q3393358","brand:wikipedia":"fr:Point S",name:"Point S",shop:"car_repair"},removeTags:{brand:"Point S","brand:wikidata":"Q3393358","brand:wikipedia":"fr:Point S",name:"Point S",shop:"car_repair"},matchScore:2,suggestion:true},"shop/car_repair/Renault":{name:"Renault",icon:"maki-car-repair",geometry:["point","area"],tags:{shop:"car_repair","brand:wikidata":"Q6686"},addTags:{brand:"Renault","brand:wikidata":"Q6686","brand:wikipedia":"en:Renault",name:"Renault",shop:"car_repair"},removeTags:{brand:"Renault","brand:wikidata":"Q6686","brand:wikipedia":"en:Renault",name:"Renault",shop:"car_repair"},matchScore:2,suggestion:true},"shop/car_repair/Roady":{name:"Roady",icon:"maki-car-repair",geometry:["point","area"],tags:{shop:"car_repair","brand:wikidata":"Q3434112"},addTags:{brand:"Roady","brand:wikidata":"Q3434112","brand:wikipedia":"en:Roady (Mousquetaires)",name:"Roady",shop:"car_repair"},removeTags:{brand:"Roady","brand:wikidata":"Q3434112","brand:wikipedia":"en:Roady (Mousquetaires)",name:"Roady",shop:"car_repair"},matchScore:2,suggestion:true},"shop/car_repair/Safelite AutoGlass":{name:"Safelite AutoGlass",icon:"maki-car-repair",geometry:["point","area"],tags:{shop:"car_repair","brand:wikidata":"Q28797369"},addTags:{brand:"Safelite AutoGlass","brand:wikidata":"Q28797369","brand:wikipedia":"en:Safelite",operator:"Belron","operator:wikidata":"Q785614","operator:wikipedia":"en:Belron",name:"Safelite AutoGlass",shop:"car_repair"},removeTags:{brand:"Safelite AutoGlass","brand:wikidata":"Q28797369","brand:wikipedia":"en:Safelite",operator:"Belron","operator:wikidata":"Q785614","operator:wikipedia":"en:Belron",name:"Safelite AutoGlass",shop:"car_repair"},matchScore:2,suggestion:true},"shop/car_repair/Toyota":{name:"Toyota",icon:"maki-car-repair",geometry:["point","area"],tags:{shop:"car_repair","brand:wikidata":"Q53268"},addTags:{brand:"Toyota","brand:wikidata":"Q53268","brand:wikipedia":"en:Toyota",name:"Toyota",shop:"car_repair"},removeTags:{brand:"Toyota","brand:wikidata":"Q53268","brand:wikipedia":"en:Toyota",name:"Toyota",shop:"car_repair"},matchScore:2,suggestion:true},"shop/car_repair/Valvoline":{name:"Valvoline",icon:"maki-car-repair",geometry:["point","area"],tags:{shop:"car_repair","brand:wikidata":"Q7912852"},addTags:{brand:"Valvoline","brand:wikidata":"Q7912852","brand:wikipedia":"en:Valvoline Instant Oil Change",name:"Valvoline",shop:"car_repair"},removeTags:{brand:"Valvoline","brand:wikidata":"Q7912852","brand:wikipedia":"en:Valvoline Instant Oil Change",name:"Valvoline",shop:"car_repair"},matchScore:2,suggestion:true},"shop/carpet/Carpetright":{name:"Carpetright",icon:"maki-shop",geometry:["point","area"],tags:{shop:"carpet","brand:wikidata":"Q5045782"},addTags:{brand:"Carpetright","brand:wikidata":"Q5045782","brand:wikipedia":"en:Carpetright",name:"Carpetright",shop:"carpet"},removeTags:{brand:"Carpetright","brand:wikidata":"Q5045782","brand:wikipedia":"en:Carpetright",name:"Carpetright",shop:"carpet"},matchScore:2,suggestion:true},"shop/car/Audi":{name:"Audi",icon:"maki-car",geometry:["point","area"],tags:{shop:"car","brand:wikidata":"Q23317"},addTags:{brand:"Audi","brand:wikidata":"Q23317","brand:wikipedia":"en:Audi",name:"Audi",shop:"car"},removeTags:{brand:"Audi","brand:wikidata":"Q23317","brand:wikipedia":"en:Audi",name:"Audi",shop:"car"},matchScore:2,suggestion:true},"shop/car/BMW":{name:"BMW",icon:"maki-car",geometry:["point","area"],tags:{shop:"car","brand:wikidata":"Q26678"},addTags:{brand:"BMW","brand:wikidata":"Q26678","brand:wikipedia":"en:BMW",name:"BMW",shop:"car"},removeTags:{brand:"BMW","brand:wikidata":"Q26678","brand:wikipedia":"en:BMW",name:"BMW",shop:"car"},matchScore:2,suggestion:true},"shop/car/Chevrolet":{name:"Chevrolet",icon:"maki-car",geometry:["point","area"],tags:{shop:"car","brand:wikidata":"Q29570"},addTags:{brand:"Chevrolet","brand:wikidata":"Q29570","brand:wikipedia":"en:Chevrolet",name:"Chevrolet",shop:"car"},removeTags:{brand:"Chevrolet","brand:wikidata":"Q29570","brand:wikipedia":"en:Chevrolet",name:"Chevrolet",shop:"car"},matchScore:2,suggestion:true},"shop/car/Dacia":{name:"Dacia",icon:"maki-car",geometry:["point","area"],tags:{shop:"car","brand:wikidata":"Q27460"},addTags:{brand:"Dacia","brand:wikidata":"Q27460","brand:wikipedia":"en:Automobile Dacia",name:"Dacia",shop:"car"},removeTags:{brand:"Dacia","brand:wikidata":"Q27460","brand:wikipedia":"en:Automobile Dacia",name:"Dacia",shop:"car"},matchScore:2,suggestion:true},"shop/car/Fiat":{name:"Fiat",icon:"maki-car",geometry:["point","area"],tags:{shop:"car","brand:wikidata":"Q27597"},addTags:{brand:"Fiat","brand:wikidata":"Q27597","brand:wikipedia":"en:Fiat Automobiles",name:"Fiat",shop:"car"},removeTags:{brand:"Fiat","brand:wikidata":"Q27597","brand:wikipedia":"en:Fiat Automobiles",name:"Fiat",shop:"car"},matchScore:2,suggestion:true},"shop/car/Ford":{name:"Ford",icon:"maki-car",geometry:["point","area"],tags:{shop:"car","brand:wikidata":"Q44294"},addTags:{brand:"Ford","brand:wikidata":"Q44294","brand:wikipedia":"en:Ford Motor Company",name:"Ford",shop:"car"},removeTags:{brand:"Ford","brand:wikidata":"Q44294","brand:wikipedia":"en:Ford Motor Company",name:"Ford",shop:"car"},matchScore:2,suggestion:true},"shop/car/Honda":{name:"Honda",icon:"maki-car",geometry:["point","area"],tags:{shop:"car","brand:wikidata":"Q9584"},addTags:{brand:"Honda","brand:wikidata":"Q9584","brand:wikipedia":"en:Honda",name:"Honda",shop:"car"},removeTags:{brand:"Honda","brand:wikidata":"Q9584","brand:wikipedia":"en:Honda",name:"Honda",shop:"car"},matchScore:2,suggestion:true},"shop/car/Hyundai":{name:"Hyundai",icon:"maki-car",geometry:["point","area"],tags:{shop:"car","brand:wikidata":"Q55931"},addTags:{brand:"Hyundai","brand:wikidata":"Q55931","brand:wikipedia":"en:Hyundai Motor Company",name:"Hyundai",shop:"car"},removeTags:{brand:"Hyundai","brand:wikidata":"Q55931","brand:wikipedia":"en:Hyundai Motor Company",name:"Hyundai",shop:"car"},matchScore:2,suggestion:true},"shop/car/Isuzu":{name:"Isuzu",icon:"maki-car",geometry:["point","area"],tags:{shop:"car","brand:wikidata":"Q29803"},addTags:{brand:"Isuzu","brand:wikidata":"Q29803","brand:wikipedia":"en:Isuzu Motors",name:"Isuzu",shop:"car"},removeTags:{brand:"Isuzu","brand:wikidata":"Q29803","brand:wikipedia":"en:Isuzu Motors",name:"Isuzu",shop:"car"},matchScore:2,suggestion:true},"shop/car/Kia":{name:"Kia",icon:"maki-car",geometry:["point","area"],tags:{shop:"car","brand:wikidata":"Q35349"},addTags:{brand:"Kia","brand:wikidata":"Q35349","brand:wikipedia":"en:Kia Motors",name:"Kia",shop:"car"},removeTags:{brand:"Kia","brand:wikidata":"Q35349","brand:wikipedia":"en:Kia Motors",name:"Kia",shop:"car"},matchScore:2,suggestion:true},"shop/car/Land Rover":{name:"Land Rover",icon:"maki-car",geometry:["point","area"],tags:{shop:"car","brand:wikidata":"Q35907"},addTags:{brand:"Land Rover","brand:wikidata":"Q35907","brand:wikipedia":"en:Land Rover",name:"Land Rover",shop:"car"},removeTags:{brand:"Land Rover","brand:wikidata":"Q35907","brand:wikipedia":"en:Land Rover",name:"Land Rover",shop:"car"},matchScore:2,suggestion:true},"shop/car/Lexus":{name:"Lexus",icon:"maki-car",geometry:["point","area"],tags:{shop:"car","brand:wikidata":"Q35919"},addTags:{brand:"Lexus","brand:wikidata":"Q35919","brand:wikipedia":"en:Lexus",name:"Lexus",shop:"car"},removeTags:{brand:"Lexus","brand:wikidata":"Q35919","brand:wikipedia":"en:Lexus",name:"Lexus",shop:"car"},matchScore:2,suggestion:true},"shop/car/Mazda":{name:"Mazda",icon:"maki-car",geometry:["point","area"],tags:{shop:"car","brand:wikidata":"Q35996"},addTags:{brand:"Mazda","brand:wikidata":"Q35996","brand:wikipedia":"en:Mazda",name:"Mazda",shop:"car"},removeTags:{brand:"Mazda","brand:wikidata":"Q35996","brand:wikipedia":"en:Mazda",name:"Mazda",shop:"car"},matchScore:2,suggestion:true},"shop/car/Mercedes-Benz":{name:"Mercedes-Benz",icon:"maki-car",geometry:["point","area"],tags:{shop:"car","brand:wikidata":"Q36008"},addTags:{brand:"Mercedes-Benz","brand:wikidata":"Q36008","brand:wikipedia":"en:Mercedes-Benz",name:"Mercedes-Benz",shop:"car"},removeTags:{brand:"Mercedes-Benz","brand:wikidata":"Q36008","brand:wikipedia":"en:Mercedes-Benz",name:"Mercedes-Benz",shop:"car"},matchScore:2,suggestion:true},"shop/car/Mitsubishi":{name:"Mitsubishi",icon:"maki-car",geometry:["point","area"],tags:{shop:"car","brand:wikidata":"Q36033"},addTags:{brand:"Mitsubishi","brand:wikidata":"Q36033","brand:wikipedia":"en:Mitsubishi Motors",name:"Mitsubishi",shop:"car"},removeTags:{brand:"Mitsubishi","brand:wikidata":"Q36033","brand:wikipedia":"en:Mitsubishi Motors",name:"Mitsubishi",shop:"car"},matchScore:2,suggestion:true},"shop/car/Netz":{name:"Netz",icon:"maki-car",geometry:["point","area"],tags:{shop:"car","brand:wikidata":"Q11325416"},addTags:{brand:"Netz","brand:wikidata":"Q11325416","brand:wikipedia":"ja:ネッツ店",name:"Netz",shop:"car"},removeTags:{brand:"Netz","brand:wikidata":"Q11325416","brand:wikipedia":"ja:ネッツ店",name:"Netz",shop:"car"},matchScore:2,suggestion:true},"shop/car/Nissan":{name:"Nissan",icon:"maki-car",geometry:["point","area"],tags:{shop:"car","brand:wikidata":"Q20165"},addTags:{brand:"Nissan","brand:wikidata":"Q20165","brand:wikipedia":"ja:日産自動車",name:"Nissan",shop:"car"},removeTags:{brand:"Nissan","brand:wikidata":"Q20165","brand:wikipedia":"ja:日産自動車",name:"Nissan",shop:"car"},matchScore:2,suggestion:true},"shop/car/Opel":{name:"Opel",icon:"maki-car",geometry:["point","area"],tags:{shop:"car","brand:wikidata":"Q40966"},addTags:{brand:"Opel","brand:wikidata":"Q40966","brand:wikipedia":"en:Opel",name:"Opel",shop:"car"},removeTags:{brand:"Opel","brand:wikidata":"Q40966","brand:wikipedia":"en:Opel",name:"Opel",shop:"car"},matchScore:2,suggestion:true},"shop/car/Peugeot":{name:"Peugeot",icon:"maki-car",geometry:["point","area"],tags:{shop:"car","brand:wikidata":"Q6742"},addTags:{brand:"Peugeot","brand:wikidata":"Q6742","brand:wikipedia":"en:Peugeot",name:"Peugeot",shop:"car"},removeTags:{brand:"Peugeot","brand:wikidata":"Q6742","brand:wikipedia":"en:Peugeot",name:"Peugeot",shop:"car"},matchScore:2,suggestion:true},"shop/car/Porsche":{name:"Porsche",icon:"maki-car",geometry:["point","area"],tags:{shop:"car","brand:wikidata":"Q40993"},addTags:{brand:"Porsche","brand:wikidata":"Q40993","brand:wikipedia":"en:Porsche",name:"Porsche",shop:"car"},removeTags:{brand:"Porsche","brand:wikidata":"Q40993","brand:wikipedia":"en:Porsche",name:"Porsche",shop:"car"},matchScore:2,suggestion:true},"shop/car/Renault":{name:"Renault",icon:"maki-car",geometry:["point","area"],tags:{shop:"car","brand:wikidata":"Q6686"},addTags:{brand:"Renault","brand:wikidata":"Q6686","brand:wikipedia":"en:Renault",name:"Renault",shop:"car"},removeTags:{brand:"Renault","brand:wikidata":"Q6686","brand:wikipedia":"en:Renault",name:"Renault",shop:"car"},matchScore:2,suggestion:true},"shop/car/Seat":{name:"Seat",icon:"maki-car",geometry:["point","area"],tags:{shop:"car","brand:wikidata":"Q188217"},addTags:{brand:"Seat","brand:wikidata":"Q188217","brand:wikipedia":"en:SEAT",name:"Seat",shop:"car"},removeTags:{brand:"Seat","brand:wikidata":"Q188217","brand:wikipedia":"en:SEAT",name:"Seat",shop:"car"},matchScore:2,suggestion:true},"shop/car/Skoda":{name:"Skoda",icon:"maki-car",geometry:["point","area"],tags:{shop:"car","brand:wikidata":"Q29637"},addTags:{brand:"Skoda","brand:wikidata":"Q29637","brand:wikipedia":"en:Škoda Auto",name:"Skoda",shop:"car"},removeTags:{brand:"Skoda","brand:wikidata":"Q29637","brand:wikipedia":"en:Škoda Auto",name:"Skoda",shop:"car"},matchScore:2,suggestion:true},"shop/car/Subaru":{name:"Subaru",icon:"maki-car",geometry:["point","area"],tags:{shop:"car","brand:wikidata":"Q172741"},addTags:{brand:"Subaru","brand:wikidata":"Q172741","brand:wikipedia":"en:Subaru",name:"Subaru",shop:"car"},removeTags:{brand:"Subaru","brand:wikidata":"Q172741","brand:wikipedia":"en:Subaru",name:"Subaru",shop:"car"},matchScore:2,suggestion:true},"shop/car/Suzuki":{name:"Suzuki",icon:"maki-car",geometry:["point","area"],tags:{shop:"car","brand:wikidata":"Q181642"},addTags:{brand:"Suzuki","brand:wikidata":"Q181642","brand:wikipedia":"en:Suzuki",name:"Suzuki",shop:"car"},removeTags:{brand:"Suzuki","brand:wikidata":"Q181642","brand:wikipedia":"en:Suzuki",name:"Suzuki",shop:"car"},matchScore:2,suggestion:true},"shop/car/Tesla":{name:"Tesla",icon:"maki-car",geometry:["point","area"],tags:{shop:"car","brand:wikidata":"Q478214"},addTags:{brand:"Tesla","brand:wikidata":"Q478214","brand:wikipedia":"en:Tesla, Inc.",name:"Tesla",shop:"car"},removeTags:{brand:"Tesla","brand:wikidata":"Q478214","brand:wikipedia":"en:Tesla, Inc.",name:"Tesla",shop:"car"},matchScore:2,suggestion:true},"shop/car/Toyota":{name:"Toyota",icon:"maki-car",geometry:["point","area"],tags:{shop:"car","brand:wikidata":"Q53268"},addTags:{brand:"Toyota","brand:wikidata":"Q53268","brand:wikipedia":"en:Toyota",name:"Toyota",shop:"car"},removeTags:{brand:"Toyota","brand:wikidata":"Q53268","brand:wikipedia":"en:Toyota",name:"Toyota",shop:"car"},matchScore:2,suggestion:true},"shop/car/Volkswagen":{name:"Volkswagen",icon:"maki-car",geometry:["point","area"],tags:{shop:"car","brand:wikidata":"Q246"},addTags:{brand:"Volkswagen","brand:wikidata":"Q246","brand:wikipedia":"en:Volkswagen",name:"Volkswagen",shop:"car"},removeTags:{brand:"Volkswagen","brand:wikidata":"Q246","brand:wikipedia":"en:Volkswagen",name:"Volkswagen",shop:"car"},matchScore:2,suggestion:true},"shop/car/Volvo":{name:"Volvo",icon:"maki-car",geometry:["point","area"],tags:{shop:"car","brand:wikidata":"Q215293"},addTags:{brand:"Volvo","brand:wikidata":"Q215293","brand:wikipedia":"en:Volvo Cars",name:"Volvo",shop:"car"},removeTags:{brand:"Volvo","brand:wikidata":"Q215293","brand:wikipedia":"en:Volvo Cars",name:"Volvo",shop:"car"},matchScore:2,suggestion:true},"shop/car/ホンダ":{name:"ホンダ",icon:"maki-car",geometry:["point","area"],tags:{shop:"car","brand:wikidata":"Q9584"},addTags:{brand:"ホンダ","brand:en":"Honda","brand:wikidata":"Q9584","brand:wikipedia":"ja:本田技研工業",name:"ホンダ","name:en":"Honda",shop:"car"},removeTags:{brand:"ホンダ","brand:en":"Honda","brand:wikidata":"Q9584","brand:wikipedia":"ja:本田技研工業",name:"ホンダ","name:en":"Honda",shop:"car"},matchScore:2,suggestion:true},"shop/catalogue/Argos":{name:"Argos",icon:"maki-shop",geometry:["point","area"],tags:{shop:"catalogue","brand:wikidata":"Q4789707"},addTags:{brand:"Argos","brand:wikidata":"Q4789707","brand:wikipedia":"en:Argos (retailer)",name:"Argos",shop:"catalogue"},removeTags:{brand:"Argos","brand:wikidata":"Q4789707","brand:wikipedia":"en:Argos (retailer)",name:"Argos",shop:"catalogue"},matchScore:2,suggestion:true},"shop/charity/Age UK":{name:"Age UK",icon:"maki-shop",geometry:["point","area"],tags:{shop:"charity","brand:wikidata":"Q4691850"},addTags:{brand:"Age UK","brand:wikidata":"Q4691850","brand:wikipedia":"en:Age UK",name:"Age UK",shop:"charity"},removeTags:{brand:"Age UK","brand:wikidata":"Q4691850","brand:wikipedia":"en:Age UK",name:"Age UK",shop:"charity"},matchScore:2,suggestion:true},"shop/charity/Barnardo's":{name:"Barnardo's",icon:"maki-shop",geometry:["point","area"],tags:{shop:"charity","brand:wikidata":"Q2884670"},addTags:{brand:"Barnardo's","brand:wikidata":"Q2884670","brand:wikipedia":"en:Barnardo's",name:"Barnardo's",shop:"charity"},removeTags:{brand:"Barnardo's","brand:wikidata":"Q2884670","brand:wikipedia":"en:Barnardo's",name:"Barnardo's",shop:"charity"},matchScore:2,suggestion:true},"shop/charity/British Heart Foundation":{name:"British Heart Foundation",icon:"maki-shop",geometry:["point","area"],tags:{shop:"charity","brand:wikidata":"Q4970039"},addTags:{brand:"British Heart Foundation","brand:wikidata":"Q4970039","brand:wikipedia":"en:British Heart Foundation",name:"British Heart Foundation",shop:"charity"},removeTags:{brand:"British Heart Foundation","brand:wikidata":"Q4970039","brand:wikipedia":"en:British Heart Foundation",name:"British Heart Foundation",shop:"charity"},matchScore:2,suggestion:true},"shop/charity/British Red Cross":{name:"British Red Cross",icon:"maki-shop",geometry:["point","area"],tags:{shop:"charity","brand:wikidata":"Q4970966"},addTags:{brand:"British Red Cross","brand:wikidata":"Q4970966","brand:wikipedia":"en:British Red Cross",name:"British Red Cross",shop:"charity"},removeTags:{brand:"British Red Cross","brand:wikidata":"Q4970966","brand:wikipedia":"en:British Red Cross",name:"British Red Cross",shop:"charity"},matchScore:2,suggestion:true},"shop/charity/Cancer Research UK":{name:"Cancer Research UK",icon:"maki-shop",geometry:["point","area"],tags:{shop:"charity","brand:wikidata":"Q326079"},addTags:{brand:"Cancer Research UK","brand:wikidata":"Q326079","brand:wikipedia":"en:Cancer Research UK",name:"Cancer Research UK",shop:"charity"},removeTags:{brand:"Cancer Research UK","brand:wikidata":"Q326079","brand:wikipedia":"en:Cancer Research UK",name:"Cancer Research UK",shop:"charity"},matchScore:2,suggestion:true},"shop/charity/Goodwill":{name:"Goodwill",icon:"maki-shop",geometry:["point","area"],tags:{shop:"charity","brand:wikidata":"Q5583655"},addTags:{brand:"Goodwill","brand:wikidata":"Q5583655","brand:wikipedia":"en:Goodwill Industries",name:"Goodwill",shop:"charity"},removeTags:{brand:"Goodwill","brand:wikidata":"Q5583655","brand:wikipedia":"en:Goodwill Industries",name:"Goodwill",shop:"charity"},matchScore:2,suggestion:true},"shop/charity/Mind":{name:"Mind",icon:"maki-shop",geometry:["point","area"],tags:{shop:"charity","brand:wikidata":"Q3314763"},addTags:{brand:"Mind","brand:wikidata":"Q3314763","brand:wikipedia":"en:Mind (charity)",name:"Mind",shop:"charity"},removeTags:{brand:"Mind","brand:wikidata":"Q3314763","brand:wikipedia":"en:Mind (charity)",name:"Mind",shop:"charity"},matchScore:2,suggestion:true},"shop/charity/Myrorna":{name:"Myrorna",icon:"maki-shop",geometry:["point","area"],tags:{shop:"charity","brand:wikidata":"Q10592609"},addTags:{brand:"Myrorna","brand:wikidata":"Q10592609","brand:wikipedia":"sv:Myrorna",name:"Myrorna",shop:"charity"},removeTags:{brand:"Myrorna","brand:wikidata":"Q10592609","brand:wikipedia":"sv:Myrorna",name:"Myrorna",shop:"charity"},matchScore:2,suggestion:true},"shop/charity/Oxfam":{name:"Oxfam",icon:"maki-shop",geometry:["point","area"],tags:{shop:"charity","brand:wikidata":"Q267941"},addTags:{brand:"Oxfam","brand:wikidata":"Q267941","brand:wikipedia":"en:Oxfam",name:"Oxfam",shop:"charity"},removeTags:{brand:"Oxfam","brand:wikidata":"Q267941","brand:wikipedia":"en:Oxfam",name:"Oxfam",shop:"charity"},matchScore:2,suggestion:true},"shop/charity/RSPCA":{name:"RSPCA",icon:"maki-shop",geometry:["point","area"],tags:{shop:"charity","brand:wikidata":"Q584819"},addTags:{brand:"RSPCA","brand:wikidata":"Q584819","brand:wikipedia":"en:Royal Society for the Prevention of Cruelty to Animals",name:"RSPCA",shop:"charity"},removeTags:{brand:"RSPCA","brand:wikidata":"Q584819","brand:wikipedia":"en:Royal Society for the Prevention of Cruelty to Animals",name:"RSPCA",shop:"charity"},matchScore:2,suggestion:true},"shop/charity/Salvation Army":{name:"Salvation Army",icon:"maki-shop",geometry:["point","area"],tags:{shop:"charity","brand:wikidata":"Q188307"},addTags:{brand:"Salvation Army","brand:wikidata":"Q188307","brand:wikipedia":"en:The Salvation Army",name:"Salvation Army",shop:"charity"},removeTags:{brand:"Salvation Army","brand:wikidata":"Q188307","brand:wikipedia":"en:The Salvation Army",name:"Salvation Army",shop:"charity"},matchScore:2,suggestion:true},"shop/charity/Scope":{name:"Scope",icon:"maki-shop",geometry:["point","area"],tags:{shop:"charity","brand:wikidata":"Q7434435"},addTags:{brand:"Scope","brand:wikidata":"Q7434435","brand:wikipedia":"en:Scope (charity)",name:"Scope",shop:"charity"},removeTags:{brand:"Scope","brand:wikidata":"Q7434435","brand:wikipedia":"en:Scope (charity)",name:"Scope",shop:"charity"},matchScore:2,suggestion:true},"shop/charity/Sue Ryder":{name:"Sue Ryder",icon:"maki-shop",geometry:["point","area"],tags:{shop:"charity","brand:wikidata":"Q7634271"},addTags:{brand:"Sue Ryder","brand:wikidata":"Q7634271","brand:wikipedia":"en:Sue Ryder (charity)",name:"Sue Ryder",shop:"charity"},removeTags:{brand:"Sue Ryder","brand:wikidata":"Q7634271","brand:wikipedia":"en:Sue Ryder (charity)",name:"Sue Ryder",shop:"charity"},matchScore:2,suggestion:true},"shop/charity/The Salvation Army":{name:"The Salvation Army",icon:"maki-shop",geometry:["point","area"],tags:{shop:"charity","brand:wikidata":"Q188307"},addTags:{brand:"The Salvation Army","brand:wikidata":"Q188307","brand:wikipedia":"en:The Salvation Army",name:"The Salvation Army",shop:"charity"},removeTags:{brand:"The Salvation Army","brand:wikidata":"Q188307","brand:wikipedia":"en:The Salvation Army",name:"The Salvation Army",shop:"charity"},matchScore:2,suggestion:true},"shop/chemist/Bipa":{name:"Bipa",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"chemist","brand:wikidata":"Q864933"},addTags:{brand:"Bipa","brand:wikidata":"Q864933","brand:wikipedia":"de:Bipa",name:"Bipa",shop:"chemist"},removeTags:{brand:"Bipa","brand:wikidata":"Q864933","brand:wikipedia":"de:Bipa",name:"Bipa",shop:"chemist"},matchScore:2,suggestion:true},"shop/chemist/Budnikowsky":{name:"Budnikowsky",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"chemist","brand:wikidata":"Q1001516"},addTags:{brand:"Budnikowsky","brand:wikidata":"Q1001516","brand:wikipedia":"de:Budnikowsky",name:"Budnikowsky",shop:"chemist"},removeTags:{brand:"Budnikowsky","brand:wikidata":"Q1001516","brand:wikipedia":"de:Budnikowsky",name:"Budnikowsky",shop:"chemist"},matchScore:2,suggestion:true},"shop/chemist/Drogeria Natura":{name:"Drogeria Natura",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"chemist","brand:wikidata":"Q9212032"},addTags:{brand:"Drogeria Natura","brand:wikidata":"Q9212032","brand:wikipedia":"pl:Drogerie Natura",name:"Drogeria Natura",shop:"chemist"},removeTags:{brand:"Drogeria Natura","brand:wikidata":"Q9212032","brand:wikipedia":"pl:Drogerie Natura",name:"Drogeria Natura",shop:"chemist"},matchScore:2,suggestion:true},"shop/chemist/Etos":{name:"Etos",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"chemist","brand:wikidata":"Q2609459"},addTags:{brand:"Etos","brand:wikidata":"Q2609459","brand:wikipedia":"en:Etos",name:"Etos",shop:"chemist"},removeTags:{brand:"Etos","brand:wikidata":"Q2609459","brand:wikipedia":"en:Etos",name:"Etos",shop:"chemist"},matchScore:2,suggestion:true},"shop/chemist/Kruidvat":{name:"Kruidvat",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"chemist","brand:wikidata":"Q2226366"},addTags:{brand:"Kruidvat","brand:wikidata":"Q2226366","brand:wikipedia":"en:Kruidvat",name:"Kruidvat",shop:"chemist"},removeTags:{brand:"Kruidvat","brand:wikidata":"Q2226366","brand:wikipedia":"en:Kruidvat",name:"Kruidvat",shop:"chemist"},matchScore:2,suggestion:true},"shop/chemist/Matas":{name:"Matas",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"chemist","brand:wikidata":"Q6786143"},addTags:{brand:"Matas","brand:wikidata":"Q6786143","brand:wikipedia":"en:Matas (drug store)",name:"Matas",shop:"chemist"},removeTags:{brand:"Matas","brand:wikidata":"Q6786143","brand:wikipedia":"en:Matas (drug store)",name:"Matas",shop:"chemist"},matchScore:2,suggestion:true},"shop/chemist/Rossmann":{name:"Rossmann",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"chemist","brand:wikidata":"Q316004"},addTags:{brand:"Rossmann","brand:wikidata":"Q316004","brand:wikipedia":"de:Dirk Rossmann GmbH",name:"Rossmann",shop:"chemist"},removeTags:{brand:"Rossmann","brand:wikidata":"Q316004","brand:wikipedia":"de:Dirk Rossmann GmbH",name:"Rossmann",shop:"chemist"},matchScore:2,suggestion:true},"shop/chemist/Teta":{name:"Teta",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"chemist","brand:wikidata":"Q20860823"},addTags:{brand:"Teta","brand:wikidata":"Q20860823","brand:wikipedia":"cs:Teta drogerie",name:"Teta",shop:"chemist"},removeTags:{brand:"Teta","brand:wikidata":"Q20860823","brand:wikipedia":"cs:Teta drogerie",name:"Teta",shop:"chemist"},matchScore:2,suggestion:true},"shop/chemist/Trekpleister":{name:"Trekpleister",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"chemist","brand:wikidata":"Q2551576"},addTags:{brand:"Trekpleister","brand:wikidata":"Q2551576","brand:wikipedia":"nl:Trekpleister (drogisterij)",name:"Trekpleister",shop:"chemist"},removeTags:{brand:"Trekpleister","brand:wikidata":"Q2551576","brand:wikipedia":"nl:Trekpleister (drogisterij)",name:"Trekpleister",shop:"chemist"},matchScore:2,suggestion:true},"shop/chemist/dm":{name:"dm",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"chemist","brand:wikidata":"Q266572"},addTags:{brand:"dm","brand:wikidata":"Q266572","brand:wikipedia":"en:Dm-drogerie markt",name:"dm",shop:"chemist"},removeTags:{brand:"dm","brand:wikidata":"Q266572","brand:wikipedia":"en:Dm-drogerie markt",name:"dm",shop:"chemist"},matchScore:2,suggestion:true},"shop/chemist/康是美":{name:"康是美",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"chemist","brand:wikidata":"Q11063876"},addTags:{brand:"康是美","brand:wikidata":"Q11063876","brand:wikipedia":"zh:康是美藥妝店",name:"康是美",shop:"chemist"},removeTags:{brand:"康是美","brand:wikidata":"Q11063876","brand:wikipedia":"zh:康是美藥妝店",name:"康是美",shop:"chemist"},matchScore:2,suggestion:true},"shop/chocolate/Cacau Show":{name:"Cacau Show",icon:"maki-shop",geometry:["point","area"],tags:{shop:"chocolate","brand:wikidata":"Q9671713"},addTags:{brand:"Cacau Show","brand:wikidata":"Q9671713","brand:wikipedia":"en:Cacau show",name:"Cacau Show",shop:"chocolate"},removeTags:{brand:"Cacau Show","brand:wikidata":"Q9671713","brand:wikipedia":"en:Cacau show",name:"Cacau Show",shop:"chocolate"},matchScore:2,suggestion:true},"shop/chocolate/Leonidas":{name:"Leonidas",icon:"maki-shop",geometry:["point","area"],tags:{shop:"chocolate","brand:wikidata":"Q80335"},addTags:{brand:"Leonidas","brand:wikidata":"Q80335","brand:wikipedia":"en:Leonidas (chocolate maker)",name:"Leonidas",shop:"chocolate"},removeTags:{brand:"Leonidas","brand:wikidata":"Q80335","brand:wikipedia":"en:Leonidas (chocolate maker)",name:"Leonidas",shop:"chocolate"},matchScore:2,suggestion:true},"shop/clothes/Abercrombie & Fitch":{name:"Abercrombie & Fitch",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q319344"},addTags:{brand:"Abercrombie & Fitch","brand:wikidata":"Q319344","brand:wikipedia":"en:Abercrombie & Fitch",name:"Abercrombie & Fitch",shop:"clothes"},removeTags:{brand:"Abercrombie & Fitch","brand:wikidata":"Q319344","brand:wikipedia":"en:Abercrombie & Fitch",name:"Abercrombie & Fitch",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Accessorize":{name:"Accessorize",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q3069980"},addTags:{brand:"Accessorize","brand:wikidata":"Q3069980","brand:wikipedia":"en:Monsoon Accessorize",name:"Accessorize",shop:"clothes"},removeTags:{brand:"Accessorize","brand:wikidata":"Q3069980","brand:wikipedia":"en:Monsoon Accessorize",name:"Accessorize",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Ackermans":{name:"Ackermans",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q4674255"},addTags:{brand:"Ackermans","brand:wikidata":"Q4674255","brand:wikipedia":"en:Ackermans",name:"Ackermans",shop:"clothes"},removeTags:{brand:"Ackermans","brand:wikidata":"Q4674255","brand:wikipedia":"en:Ackermans",name:"Ackermans",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Aeropostale":{name:"Aeropostale",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q794565"},addTags:{brand:"Aeropostale","brand:wikidata":"Q794565","brand:wikipedia":"en:Aéropostale (clothing)",name:"Aeropostale",shop:"clothes"},removeTags:{brand:"Aeropostale","brand:wikidata":"Q794565","brand:wikipedia":"en:Aéropostale (clothing)",name:"Aeropostale",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/American Apparel":{name:"American Apparel",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q463378"},addTags:{brand:"American Apparel","brand:wikidata":"Q463378","brand:wikipedia":"en:American Apparel",name:"American Apparel",shop:"clothes"},removeTags:{brand:"American Apparel","brand:wikidata":"Q463378","brand:wikipedia":"en:American Apparel",name:"American Apparel",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/American Eagle Outfitters":{name:"American Eagle Outfitters",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q2842931"},addTags:{brand:"American Eagle Outfitters","brand:wikidata":"Q2842931","brand:wikipedia":"en:American Eagle Outfitters",name:"American Eagle Outfitters",shop:"clothes"},removeTags:{brand:"American Eagle Outfitters","brand:wikidata":"Q2842931","brand:wikipedia":"en:American Eagle Outfitters",name:"American Eagle Outfitters",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Ann Taylor":{name:"Ann Taylor",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q4766699"},addTags:{brand:"Ann Taylor","brand:wikidata":"Q4766699","brand:wikipedia":"en:Ann Inc.",name:"Ann Taylor",shop:"clothes"},removeTags:{brand:"Ann Taylor","brand:wikidata":"Q4766699","brand:wikipedia":"en:Ann Inc.",name:"Ann Taylor",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Anthropologie":{name:"Anthropologie",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q4773903"},addTags:{brand:"Anthropologie","brand:wikidata":"Q4773903","brand:wikipedia":"en:Anthropologie",name:"Anthropologie",shop:"clothes"},removeTags:{brand:"Anthropologie","brand:wikidata":"Q4773903","brand:wikipedia":"en:Anthropologie",name:"Anthropologie",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Ardene":{name:"Ardene",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q2860764"},addTags:{brand:"Ardene","brand:wikidata":"Q2860764","brand:wikipedia":"en:Ardene",name:"Ardene",shop:"clothes"},removeTags:{brand:"Ardene","brand:wikidata":"Q2860764","brand:wikipedia":"en:Ardene",name:"Ardene",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Armand Thiery":{name:"Armand Thiery",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q2861975"},addTags:{brand:"Armand Thiery","brand:wikidata":"Q2861975","brand:wikipedia":"fr:Armand Thiery",name:"Armand Thiery",shop:"clothes"},removeTags:{brand:"Armand Thiery","brand:wikidata":"Q2861975","brand:wikipedia":"fr:Armand Thiery",name:"Armand Thiery",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Banana Republic":{name:"Banana Republic",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q806085"},addTags:{brand:"Banana Republic","brand:wikidata":"Q806085","brand:wikipedia":"en:Banana Republic",name:"Banana Republic",shop:"clothes"},removeTags:{brand:"Banana Republic","brand:wikidata":"Q806085","brand:wikipedia":"en:Banana Republic",name:"Banana Republic",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Bershka":{name:"Bershka",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q827258"},addTags:{brand:"Bershka","brand:wikidata":"Q827258","brand:wikipedia":"en:Bershka",name:"Bershka",shop:"clothes"},removeTags:{brand:"Bershka","brand:wikidata":"Q827258","brand:wikipedia":"en:Bershka",name:"Bershka",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Betty Barclay":{name:"Betty Barclay",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q850250"},addTags:{brand:"Betty Barclay","brand:wikidata":"Q850250","brand:wikipedia":"de:Betty Barclay",name:"Betty Barclay",shop:"clothes"},removeTags:{brand:"Betty Barclay","brand:wikidata":"Q850250","brand:wikipedia":"de:Betty Barclay",name:"Betty Barclay",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Big Star":{name:"Big Star",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q9171569"},addTags:{brand:"Big Star","brand:wikidata":"Q9171569","brand:wikipedia":"pl:Big Star Limited",name:"Big Star",shop:"clothes"},removeTags:{brand:"Big Star","brand:wikidata":"Q9171569","brand:wikipedia":"pl:Big Star Limited",name:"Big Star",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Bonita":{name:"Bonita",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q945463"},addTags:{brand:"Bonita","brand:wikidata":"Q945463","brand:wikipedia":"en:Bonia (fashion)",name:"Bonita",shop:"clothes"},removeTags:{brand:"Bonita","brand:wikidata":"Q945463","brand:wikipedia":"en:Bonia (fashion)",name:"Bonita",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Bonobo":{name:"Bonobo",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q4942546"},addTags:{brand:"Bonobo","brand:wikidata":"Q4942546","brand:wikipedia":"en:Bonobos (apparel)",name:"Bonobo",shop:"clothes"},removeTags:{brand:"Bonobo","brand:wikidata":"Q4942546","brand:wikipedia":"en:Bonobos (apparel)",name:"Bonobo",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Brice":{name:"Brice",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q2925067"},addTags:{brand:"Brice","brand:wikidata":"Q2925067","brand:wikipedia":"fr:Brice (enseigne)",name:"Brice",shop:"clothes"},removeTags:{brand:"Brice","brand:wikidata":"Q2925067","brand:wikipedia":"fr:Brice (enseigne)",name:"Brice",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Brooks Brothers":{name:"Brooks Brothers",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q929722"},addTags:{brand:"Brooks Brothers","brand:wikidata":"Q929722","brand:wikipedia":"en:Brooks Brothers",name:"Brooks Brothers",shop:"clothes"},removeTags:{brand:"Brooks Brothers","brand:wikidata":"Q929722","brand:wikipedia":"en:Brooks Brothers",name:"Brooks Brothers",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Burberry":{name:"Burberry",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q390107"},addTags:{brand:"Burberry","brand:wikidata":"Q390107","brand:wikipedia":"en:Burberry",name:"Burberry",shop:"clothes"},removeTags:{brand:"Burberry","brand:wikidata":"Q390107","brand:wikipedia":"en:Burberry",name:"Burberry",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Burlington Coat Factory":{name:"Burlington Coat Factory",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q4999220"},addTags:{brand:"Burlington Coat Factory","brand:wikidata":"Q4999220","brand:wikipedia":"en:Burlington (department store)",name:"Burlington Coat Factory",shop:"clothes"},removeTags:{brand:"Burlington Coat Factory","brand:wikidata":"Q4999220","brand:wikipedia":"en:Burlington (department store)",name:"Burlington Coat Factory",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Burton":{name:"Burton",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q5000795"},addTags:{brand:"Burton","brand:wikidata":"Q5000795","brand:wikipedia":"en:Burton (retailer)",name:"Burton",shop:"clothes"},removeTags:{brand:"Burton","brand:wikidata":"Q5000795","brand:wikipedia":"en:Burton (retailer)",name:"Burton",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/C&A":{name:"C&A",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q701338"},addTags:{brand:"C&A","brand:wikidata":"Q701338","brand:wikipedia":"en:C&A",name:"C&A",shop:"clothes"},removeTags:{brand:"C&A","brand:wikidata":"Q701338","brand:wikipedia":"en:C&A",name:"C&A",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/COS":{name:"COS",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q60772401"},addTags:{brand:"COS","brand:wikidata":"Q60772401","brand:wikipedia":"en:COS (Collection Of Style)",name:"COS",shop:"clothes"},removeTags:{brand:"COS","brand:wikidata":"Q60772401","brand:wikipedia":"en:COS (Collection Of Style)",name:"COS",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Calvin Klein":{name:"Calvin Klein",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q1068628"},addTags:{brand:"Calvin Klein","brand:wikidata":"Q1068628","brand:wikipedia":"en:Calvin Klein",name:"Calvin Klein",shop:"clothes"},removeTags:{brand:"Calvin Klein","brand:wikidata":"Q1068628","brand:wikipedia":"en:Calvin Klein",name:"Calvin Klein",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Calzedonia":{name:"Calzedonia",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q1027874"},addTags:{brand:"Calzedonia","brand:wikidata":"Q1027874","brand:wikipedia":"en:Calzedonia",name:"Calzedonia",shop:"clothes"},removeTags:{brand:"Calzedonia","brand:wikidata":"Q1027874","brand:wikipedia":"en:Calzedonia",name:"Calzedonia",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Camaïeu":{name:"Camaïeu",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q2934647"},addTags:{brand:"Camaïeu","brand:wikidata":"Q2934647","brand:wikipedia":"en:Camaïeu (company)",name:"Camaïeu",shop:"clothes"},removeTags:{brand:"Camaïeu","brand:wikidata":"Q2934647","brand:wikipedia":"en:Camaïeu (company)",name:"Camaïeu",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Camp David":{name:"Camp David",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q50540636"},addTags:{brand:"Camp David","brand:wikidata":"Q50540636","brand:wikipedia":"en:Camp David (fashion)",name:"Camp David",shop:"clothes"},removeTags:{brand:"Camp David","brand:wikidata":"Q50540636","brand:wikipedia":"en:Camp David (fashion)",name:"Camp David",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Carter's":{name:"Carter's",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q5047083"},addTags:{brand:"Carter's","brand:wikidata":"Q5047083","brand:wikipedia":"en:Carter's",name:"Carter's",shop:"clothes"},removeTags:{brand:"Carter's","brand:wikidata":"Q5047083","brand:wikipedia":"en:Carter's",name:"Carter's",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Cato":{name:"Cato",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q16956136"},addTags:{brand:"Cato","brand:wikidata":"Q16956136","brand:wikipedia":"en:Cato Corporation",name:"Cato",shop:"clothes"},removeTags:{brand:"Cato","brand:wikidata":"Q16956136","brand:wikipedia":"en:Cato Corporation",name:"Cato",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Celio":{name:"Celio",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q2672003"},addTags:{brand:"Celio","brand:wikidata":"Q2672003","brand:wikipedia":"en:Celio (retailer)",name:"Celio",shop:"clothes"},removeTags:{brand:"Celio","brand:wikidata":"Q2672003","brand:wikipedia":"en:Celio (retailer)",name:"Celio",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Charles Vögele":{name:"Charles Vögele",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q1066326"},addTags:{brand:"Charles Vögele","brand:wikidata":"Q1066326","brand:wikipedia":"de:Charles Vögele Holding",name:"Charles Vögele",shop:"clothes"},removeTags:{brand:"Charles Vögele","brand:wikidata":"Q1066326","brand:wikipedia":"de:Charles Vögele Holding",name:"Charles Vögele",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Charlotte Russe":{name:"Charlotte Russe",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q5086126"},addTags:{brand:"Charlotte Russe","brand:wikidata":"Q5086126","brand:wikipedia":"en:Charlotte Russe (clothing retailer)",name:"Charlotte Russe",shop:"clothes"},removeTags:{brand:"Charlotte Russe","brand:wikidata":"Q5086126","brand:wikipedia":"en:Charlotte Russe (clothing retailer)",name:"Charlotte Russe",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Chico's":{name:"Chico's",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q5096393"},addTags:{brand:"Chico's","brand:wikidata":"Q5096393","brand:wikipedia":"en:Chico's (clothing retailer)",name:"Chico's",shop:"clothes"},removeTags:{brand:"Chico's","brand:wikidata":"Q5096393","brand:wikipedia":"en:Chico's (clothing retailer)",name:"Chico's",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Christopher & Banks":{name:"Christopher & Banks",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q5111816"},addTags:{brand:"Christopher & Banks","brand:wikidata":"Q5111816","brand:wikipedia":"en:Christopher & Banks",name:"Christopher & Banks",shop:"clothes"},removeTags:{brand:"Christopher & Banks","brand:wikidata":"Q5111816","brand:wikipedia":"en:Christopher & Banks",name:"Christopher & Banks",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Colin's":{name:"Colin's",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q28729658"},addTags:{brand:"Colin's","brand:wikidata":"Q28729658",name:"Colin's",shop:"clothes"},removeTags:{brand:"Colin's","brand:wikidata":"Q28729658",name:"Colin's",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Columbia":{name:"Columbia",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q1112588"},addTags:{brand:"Columbia","brand:wikidata":"Q1112588","brand:wikipedia":"en:Columbia Sportswear",name:"Columbia",shop:"clothes"},removeTags:{brand:"Columbia","brand:wikidata":"Q1112588","brand:wikipedia":"en:Columbia Sportswear",name:"Columbia",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Cubus":{name:"Cubus",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q3439593"},addTags:{brand:"Cubus","brand:wikidata":"Q3439593","brand:wikipedia":"no:Cubus",name:"Cubus",shop:"clothes"},removeTags:{brand:"Cubus","brand:wikidata":"Q3439593","brand:wikipedia":"no:Cubus",name:"Cubus",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/David's Bridal":{name:"David's Bridal",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q5230388"},addTags:{brand:"David's Bridal","brand:wikidata":"Q5230388","brand:wikipedia":"en:David's Bridal",name:"David's Bridal",shop:"clothes"},removeTags:{brand:"David's Bridal","brand:wikidata":"Q5230388","brand:wikipedia":"en:David's Bridal",name:"David's Bridal",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Desigual":{name:"Desigual",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q83750"},addTags:{brand:"Desigual","brand:wikidata":"Q83750","brand:wikipedia":"en:Desigual",name:"Desigual",shop:"clothes"},removeTags:{brand:"Desigual","brand:wikidata":"Q83750","brand:wikipedia":"en:Desigual",name:"Desigual",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Devred":{name:"Devred",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q3025542"},addTags:{brand:"Devred","brand:wikidata":"Q3025542","brand:wikipedia":"fr:Devred 1902",name:"Devred",shop:"clothes"},removeTags:{brand:"Devred","brand:wikidata":"Q3025542","brand:wikipedia":"fr:Devred 1902",name:"Devred",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Diesel":{name:"Diesel",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q158285"},addTags:{brand:"Diesel","brand:wikidata":"Q158285","brand:wikipedia":"en:Diesel (brand)",name:"Diesel",shop:"clothes"},removeTags:{brand:"Diesel","brand:wikidata":"Q158285","brand:wikipedia":"en:Diesel (brand)",name:"Diesel",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Diverse":{name:"Diverse",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q11694298"},addTags:{brand:"Diverse","brand:wikidata":"Q11694298","brand:wikipedia":"pl:Diverse",name:"Diverse",shop:"clothes"},removeTags:{brand:"Diverse","brand:wikidata":"Q11694298","brand:wikipedia":"pl:Diverse",name:"Diverse",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Dorothy Perkins":{name:"Dorothy Perkins",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q5298588"},addTags:{brand:"Dorothy Perkins","brand:wikidata":"Q5298588","brand:wikipedia":"en:Dorothy Perkins",name:"Dorothy Perkins",shop:"clothes"},removeTags:{brand:"Dorothy Perkins","brand:wikidata":"Q5298588","brand:wikipedia":"en:Dorothy Perkins",name:"Dorothy Perkins",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Dress Barn":{name:"Dress Barn",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q5307031"},addTags:{brand:"Dress Barn","brand:wikidata":"Q5307031","brand:wikipedia":"en:Ascena Retail Group",name:"Dress Barn",shop:"clothes"},removeTags:{brand:"Dress Barn","brand:wikidata":"Q5307031","brand:wikipedia":"en:Ascena Retail Group",name:"Dress Barn",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Dressmann":{name:"Dressmann",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q3357081"},addTags:{brand:"Dressmann","brand:wikidata":"Q3357081","brand:wikipedia":"en:Dressmann",name:"Dressmann",shop:"clothes"},removeTags:{brand:"Dressmann","brand:wikidata":"Q3357081","brand:wikipedia":"en:Dressmann",name:"Dressmann",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Eddie Bauer":{name:"Eddie Bauer",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q842174"},addTags:{brand:"Eddie Bauer","brand:wikidata":"Q842174","brand:wikipedia":"en:Eddie Bauer",name:"Eddie Bauer",shop:"clothes"},removeTags:{brand:"Eddie Bauer","brand:wikidata":"Q842174","brand:wikipedia":"en:Eddie Bauer",name:"Eddie Bauer",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Engbers":{name:"Engbers",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q1290088"},addTags:{brand:"Engbers","brand:wikidata":"Q1290088","brand:wikipedia":"de:Engbers",name:"Engbers",shop:"clothes"},removeTags:{brand:"Engbers","brand:wikidata":"Q1290088","brand:wikipedia":"de:Engbers",name:"Engbers",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Ernsting's family":{name:"Ernsting's family",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q1361016"},addTags:{brand:"Ernsting's family","brand:wikidata":"Q1361016","brand:wikipedia":"de:Ernsting’s family",name:"Ernsting's family",shop:"clothes"},removeTags:{brand:"Ernsting's family","brand:wikidata":"Q1361016","brand:wikipedia":"de:Ernsting’s family",name:"Ernsting's family",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Esprit":{name:"Esprit",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q532746"},addTags:{brand:"Esprit","brand:wikidata":"Q532746","brand:wikipedia":"en:Esprit Holdings",name:"Esprit",shop:"clothes"},removeTags:{brand:"Esprit","brand:wikidata":"Q532746","brand:wikipedia":"en:Esprit Holdings",name:"Esprit",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Etam":{name:"Etam",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q3059202"},addTags:{brand:"Etam","brand:wikidata":"Q3059202","brand:wikipedia":"en:Etam Développement",name:"Etam",shop:"clothes"},removeTags:{brand:"Etam","brand:wikidata":"Q3059202","brand:wikipedia":"en:Etam Développement",name:"Etam",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Express":{name:"Express",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q1384784"},addTags:{brand:"Express","brand:wikidata":"Q1384784","brand:wikipedia":"en:Express, Inc.",name:"Express",shop:"clothes"},removeTags:{brand:"Express","brand:wikidata":"Q1384784","brand:wikipedia":"en:Express, Inc.",name:"Express",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Fat Face":{name:"Fat Face",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q5437186"},addTags:{brand:"Fat Face","brand:wikidata":"Q5437186","brand:wikipedia":"en:Fat Face",name:"Fat Face",shop:"clothes"},removeTags:{brand:"Fat Face","brand:wikidata":"Q5437186","brand:wikipedia":"en:Fat Face",name:"Fat Face",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Forever 21":{name:"Forever 21",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q1060537"},addTags:{brand:"Forever 21","brand:wikidata":"Q1060537","brand:wikipedia":"en:Forever 21",name:"Forever 21",shop:"clothes"},removeTags:{brand:"Forever 21","brand:wikidata":"Q1060537","brand:wikipedia":"en:Forever 21",name:"Forever 21",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Gant":{name:"Gant",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q1493667"},addTags:{brand:"Gant","brand:wikidata":"Q1493667","brand:wikipedia":"en:Gant (retailer)",name:"Gant",shop:"clothes"},removeTags:{brand:"Gant","brand:wikidata":"Q1493667","brand:wikipedia":"en:Gant (retailer)",name:"Gant",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Gap":{name:"Gap",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q420822"},addTags:{brand:"Gap","brand:wikidata":"Q420822","brand:wikipedia":"en:Gap Inc.",name:"Gap",shop:"clothes"},removeTags:{brand:"Gap","brand:wikidata":"Q420822","brand:wikipedia":"en:Gap Inc.",name:"Gap",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Gerry Weber":{name:"Gerry Weber",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q873447"},addTags:{brand:"Gerry Weber","brand:wikidata":"Q873447","brand:wikipedia":"en:Gerry Weber",name:"Gerry Weber",shop:"clothes"},removeTags:{brand:"Gerry Weber","brand:wikidata":"Q873447","brand:wikipedia":"en:Gerry Weber",name:"Gerry Weber",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Gina Laura":{name:"Gina Laura",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q2700576"},addTags:{brand:"Gina Laura","brand:wikidata":"Q2700576","brand:wikipedia":"de:Gina Laura",name:"Gina Laura",shop:"clothes"},removeTags:{brand:"Gina Laura","brand:wikidata":"Q2700576","brand:wikipedia":"de:Gina Laura",name:"Gina Laura",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Gucci":{name:"Gucci",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q178516"},addTags:{brand:"Gucci","brand:wikidata":"Q178516","brand:wikipedia":"en:Gucci",name:"Gucci",shop:"clothes"},removeTags:{brand:"Gucci","brand:wikidata":"Q178516","brand:wikipedia":"en:Gucci",name:"Gucci",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Guess":{name:"Guess",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q2470307"},addTags:{brand:"Guess","brand:wikidata":"Q2470307","brand:wikipedia":"en:Guess (clothing)",name:"Guess",shop:"clothes"},removeTags:{brand:"Guess","brand:wikidata":"Q2470307","brand:wikipedia":"en:Guess (clothing)",name:"Guess",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Gymboree":{name:"Gymboree",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q4039771"},addTags:{brand:"Gymboree","brand:wikidata":"Q4039771","brand:wikipedia":"en:Gymboree",name:"Gymboree",shop:"clothes"},removeTags:{brand:"Gymboree","brand:wikidata":"Q4039771","brand:wikipedia":"en:Gymboree",name:"Gymboree",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Gémo":{name:"Gémo",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q3122954"},addTags:{brand:"Gémo","brand:wikidata":"Q3122954","brand:wikipedia":"fr:Gémo",name:"Gémo",shop:"clothes"},removeTags:{brand:"Gémo","brand:wikidata":"Q3122954","brand:wikipedia":"fr:Gémo",name:"Gémo",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/H&M":{name:"H&M",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q188326"},addTags:{brand:"H&M","brand:wikidata":"Q188326","brand:wikipedia":"en:H&M",name:"H&M",shop:"clothes"},removeTags:{brand:"H&M","brand:wikidata":"Q188326","brand:wikipedia":"en:H&M",name:"H&M",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Hallhuber":{name:"Hallhuber",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q1571714"},addTags:{brand:"Hallhuber","brand:wikidata":"Q1571714","brand:wikipedia":"de:Hallhuber (Bekleidungshaus)",name:"Hallhuber",shop:"clothes"},removeTags:{brand:"Hallhuber","brand:wikidata":"Q1571714","brand:wikipedia":"de:Hallhuber (Bekleidungshaus)",name:"Hallhuber",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Hollister":{name:"Hollister",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q1257477"},addTags:{brand:"Hollister","brand:wikidata":"Q1257477","brand:wikipedia":"en:Hollister Co.",name:"Hollister",shop:"clothes"},removeTags:{brand:"Hollister","brand:wikidata":"Q1257477","brand:wikipedia":"en:Hollister Co.",name:"Hollister",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Hot Topic":{name:"Hot Topic",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q9294032"},addTags:{brand:"Hot Topic","brand:wikidata":"Q9294032","brand:wikipedia":"en:Hot Topic",name:"Hot Topic",shop:"clothes"},removeTags:{brand:"Hot Topic","brand:wikidata":"Q9294032","brand:wikipedia":"en:Hot Topic",name:"Hot Topic",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Hugo Boss":{name:"Hugo Boss",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q491627"},addTags:{brand:"Hugo Boss","brand:wikidata":"Q491627","brand:wikipedia":"en:Hugo Boss",name:"Hugo Boss",shop:"clothes"},removeTags:{brand:"Hugo Boss","brand:wikidata":"Q491627","brand:wikipedia":"en:Hugo Boss",name:"Hugo Boss",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Hunkemöller":{name:"Hunkemöller",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q2604175"},addTags:{brand:"Hunkemöller","brand:wikidata":"Q2604175","brand:wikipedia":"en:Hunkemöller",name:"Hunkemöller",shop:"clothes"},removeTags:{brand:"Hunkemöller","brand:wikidata":"Q2604175","brand:wikipedia":"en:Hunkemöller",name:"Hunkemöller",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Intimissimi":{name:"Intimissimi",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q305404"},addTags:{brand:"Intimissimi","brand:wikidata":"Q305404","brand:wikipedia":"en:Intimissimi",clothes:"underwear",name:"Intimissimi",shop:"clothes"},removeTags:{brand:"Intimissimi","brand:wikidata":"Q305404","brand:wikipedia":"en:Intimissimi",clothes:"underwear",name:"Intimissimi",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/JBC":{name:"JBC",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q2671470"},addTags:{brand:"JBC","brand:wikidata":"Q2671470","brand:wikipedia":"nl:JBC",name:"JBC",shop:"clothes"},removeTags:{brand:"JBC","brand:wikidata":"Q2671470","brand:wikipedia":"nl:JBC",name:"JBC",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Jack & Jones":{name:"Jack & Jones",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q6077665"},addTags:{brand:"Jack & Jones","brand:wikidata":"Q6077665","brand:wikipedia":"en:Jack & Jones",name:"Jack & Jones",shop:"clothes"},removeTags:{brand:"Jack & Jones","brand:wikidata":"Q6077665","brand:wikipedia":"en:Jack & Jones",name:"Jack & Jones",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Jack Wills":{name:"Jack Wills",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q6115814"},addTags:{brand:"Jack Wills","brand:wikidata":"Q6115814","brand:wikipedia":"en:Jack Wills",name:"Jack Wills",shop:"clothes"},removeTags:{brand:"Jack Wills","brand:wikidata":"Q6115814","brand:wikipedia":"en:Jack Wills",name:"Jack Wills",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Jeans Fritz":{name:"Jeans Fritz",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q1686071"},addTags:{brand:"Jeans Fritz","brand:wikidata":"Q1686071","brand:wikipedia":"de:Jeans Fritz",name:"Jeans Fritz",shop:"clothes"},removeTags:{brand:"Jeans Fritz","brand:wikidata":"Q1686071","brand:wikipedia":"de:Jeans Fritz",name:"Jeans Fritz",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Jennyfer":{name:"Jennyfer",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q3177174"},addTags:{brand:"Jennyfer","brand:wikidata":"Q3177174","brand:wikipedia":"fr:Jennyfer",name:"Jennyfer",shop:"clothes"},removeTags:{brand:"Jennyfer","brand:wikidata":"Q3177174","brand:wikipedia":"fr:Jennyfer",name:"Jennyfer",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Jigsaw":{name:"Jigsaw",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q6192383"},addTags:{brand:"Jigsaw","brand:wikidata":"Q6192383","brand:wikipedia":"en:Jigsaw (clothing retailer)",name:"Jigsaw",shop:"clothes"},removeTags:{brand:"Jigsaw","brand:wikidata":"Q6192383","brand:wikipedia":"en:Jigsaw (clothing retailer)",name:"Jigsaw",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Joules":{name:"Joules",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q25351738"},addTags:{brand:"Joules","brand:wikidata":"Q25351738","brand:wikipedia":"en:Joules (clothing)",name:"Joules",shop:"clothes"},removeTags:{brand:"Joules","brand:wikidata":"Q25351738","brand:wikipedia":"en:Joules (clothing)",name:"Joules",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Justice":{name:"Justice",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q7857512"},addTags:{brand:"Justice","brand:wikidata":"Q7857512","brand:wikipedia":"en:Tween Brands",name:"Justice",shop:"clothes"},removeTags:{brand:"Justice","brand:wikidata":"Q7857512","brand:wikipedia":"en:Tween Brands",name:"Justice",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/KappAhl":{name:"KappAhl",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q4349016"},addTags:{brand:"KappAhl","brand:wikidata":"Q4349016","brand:wikipedia":"sv:Kappahl",name:"KappAhl",shop:"clothes"},removeTags:{brand:"KappAhl","brand:wikidata":"Q4349016","brand:wikipedia":"sv:Kappahl",name:"KappAhl",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/KiK":{name:"KiK",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q883965"},addTags:{brand:"KiK","brand:wikidata":"Q883965","brand:wikipedia":"en:KiK",name:"KiK",shop:"clothes"},removeTags:{brand:"KiK","brand:wikidata":"Q883965","brand:wikipedia":"en:KiK",name:"KiK",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Kiabi":{name:"Kiabi",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q3196299"},addTags:{brand:"Kiabi","brand:wikidata":"Q3196299","brand:wikipedia":"fr:Kiabi",name:"Kiabi",shop:"clothes"},removeTags:{brand:"Kiabi","brand:wikidata":"Q3196299","brand:wikipedia":"fr:Kiabi",name:"Kiabi",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/LC Waikiki":{name:"LC Waikiki",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q3205965"},addTags:{brand:"LC Waikiki","brand:wikidata":"Q3205965","brand:wikipedia":"fr:LC Waikiki",name:"LC Waikiki",shop:"clothes"},removeTags:{brand:"LC Waikiki","brand:wikidata":"Q3205965","brand:wikipedia":"fr:LC Waikiki",name:"LC Waikiki",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/La Senza":{name:"La Senza",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q3212802"},addTags:{brand:"La Senza","brand:wikidata":"Q3212802","brand:wikipedia":"en:La Senza",name:"La Senza",shop:"clothes"},removeTags:{brand:"La Senza","brand:wikidata":"Q3212802","brand:wikipedia":"en:La Senza",name:"La Senza",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Lacoste":{name:"Lacoste",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q309031"},addTags:{brand:"Lacoste","brand:wikidata":"Q309031","brand:wikipedia":"en:Lacoste",name:"Lacoste",shop:"clothes"},removeTags:{brand:"Lacoste","brand:wikidata":"Q309031","brand:wikipedia":"en:Lacoste",name:"Lacoste",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Lane Bryant":{name:"Lane Bryant",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q6485350"},addTags:{brand:"Lane Bryant","brand:wikidata":"Q6485350","brand:wikipedia":"en:Lane Bryant",name:"Lane Bryant",shop:"clothes"},removeTags:{brand:"Lane Bryant","brand:wikidata":"Q6485350","brand:wikipedia":"en:Lane Bryant",name:"Lane Bryant",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Levi's":{name:"Levi's",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q127962"},addTags:{brand:"Levi's","brand:wikidata":"Q127962","brand:wikipedia":"en:Levi Strauss & Co.",name:"Levi's",shop:"clothes"},removeTags:{brand:"Levi's","brand:wikidata":"Q127962","brand:wikipedia":"en:Levi Strauss & Co.",name:"Levi's",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Lindex":{name:"Lindex",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q1786717"},addTags:{brand:"Lindex","brand:wikidata":"Q1786717","brand:wikipedia":"en:Lindex",name:"Lindex",shop:"clothes"},removeTags:{brand:"Lindex","brand:wikidata":"Q1786717","brand:wikipedia":"en:Lindex",name:"Lindex",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Loft":{name:"Loft",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q4766699"},addTags:{brand:"Loft","brand:wikidata":"Q4766699","brand:wikipedia":"en:Ann Inc.",name:"Loft",shop:"clothes"},removeTags:{brand:"Loft","brand:wikidata":"Q4766699","brand:wikipedia":"en:Ann Inc.",name:"Loft",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Louis Vuitton":{name:"Louis Vuitton",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q191485"},addTags:{brand:"Louis Vuitton","brand:wikidata":"Q191485","brand:wikipedia":"en:Louis Vuitton",name:"Louis Vuitton",shop:"clothes"},removeTags:{brand:"Louis Vuitton","brand:wikidata":"Q191485","brand:wikipedia":"en:Louis Vuitton",name:"Louis Vuitton",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/M&Co":{name:"M&Co",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q6711808"},addTags:{brand:"M&Co","brand:wikidata":"Q6711808","brand:wikipedia":"en:M&Co.",name:"M&Co",shop:"clothes"},removeTags:{brand:"M&Co","brand:wikidata":"Q6711808","brand:wikipedia":"en:M&Co.",name:"M&Co",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Mango":{name:"Mango",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q136503"},addTags:{brand:"Mango","brand:wikidata":"Q136503","brand:wikipedia":"en:Mango (retailer)",name:"Mango",shop:"clothes"},removeTags:{brand:"Mango","brand:wikidata":"Q136503","brand:wikipedia":"en:Mango (retailer)",name:"Mango",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Marc O'Polo":{name:"Marc O'Polo",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q1892752"},addTags:{brand:"Marc O'Polo","brand:wikidata":"Q1892752","brand:wikipedia":"en:Marc O'Polo",name:"Marc O'Polo",shop:"clothes"},removeTags:{brand:"Marc O'Polo","brand:wikidata":"Q1892752","brand:wikipedia":"en:Marc O'Polo",name:"Marc O'Polo",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Mark's":{name:"Mark's",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q6766373"},addTags:{brand:"Mark's","brand:wikidata":"Q6766373","brand:wikipedia":"en:Mark's",name:"Mark's",shop:"clothes"},removeTags:{brand:"Mark's","brand:wikidata":"Q6766373","brand:wikipedia":"en:Mark's",name:"Mark's",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Marks & Spencer":{name:"Marks & Spencer",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q714491"},addTags:{brand:"Marks & Spencer","brand:wikidata":"Q714491","brand:wikipedia":"en:Marks & Spencer",name:"Marks & Spencer",shop:"clothes"},removeTags:{brand:"Marks & Spencer","brand:wikidata":"Q714491","brand:wikipedia":"en:Marks & Spencer",name:"Marks & Spencer",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Massimo Dutti":{name:"Massimo Dutti",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q788231"},addTags:{brand:"Massimo Dutti","brand:wikidata":"Q788231","brand:wikipedia":"en:Massimo Dutti",name:"Massimo Dutti",shop:"clothes"},removeTags:{brand:"Massimo Dutti","brand:wikidata":"Q788231","brand:wikipedia":"en:Massimo Dutti",name:"Massimo Dutti",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Matalan":{name:"Matalan",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q12061509"},addTags:{brand:"Matalan","brand:wikidata":"Q12061509","brand:wikipedia":"en:Matalan",name:"Matalan",shop:"clothes"},removeTags:{brand:"Matalan","brand:wikidata":"Q12061509","brand:wikipedia":"en:Matalan",name:"Matalan",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Maurices":{name:"Maurices",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q6793571"},addTags:{brand:"Maurices","brand:wikidata":"Q6793571","brand:wikipedia":"en:Maurices",name:"Maurices",shop:"clothes"},removeTags:{brand:"Maurices","brand:wikidata":"Q6793571","brand:wikipedia":"en:Maurices",name:"Maurices",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Max Mara":{name:"Max Mara",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q1151774"},addTags:{brand:"Max Mara","brand:wikidata":"Q1151774","brand:wikipedia":"en:Max Mara",name:"Max Mara",shop:"clothes"},removeTags:{brand:"Max Mara","brand:wikidata":"Q1151774","brand:wikipedia":"en:Max Mara",name:"Max Mara",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Men's Wearhouse":{name:"Men's Wearhouse",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q57405513"},addTags:{brand:"Men's Wearhouse","brand:wikidata":"Q57405513",name:"Men's Wearhouse",shop:"clothes"},removeTags:{brand:"Men's Wearhouse","brand:wikidata":"Q57405513",name:"Men's Wearhouse",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Mexx":{name:"Mexx",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q1837290"},addTags:{brand:"Mexx","brand:wikidata":"Q1837290","brand:wikipedia":"en:Mexx",name:"Mexx",shop:"clothes"},removeTags:{brand:"Mexx","brand:wikidata":"Q1837290","brand:wikipedia":"en:Mexx",name:"Mexx",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Michael Kors":{name:"Michael Kors",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q19572998"},addTags:{brand:"Michael Kors","brand:wikidata":"Q19572998","brand:wikipedia":"en:Michael Kors (brand)",name:"Michael Kors",shop:"clothes"},removeTags:{brand:"Michael Kors","brand:wikidata":"Q19572998","brand:wikipedia":"en:Michael Kors (brand)",name:"Michael Kors",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Monsoon":{name:"Monsoon",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q3069980"},addTags:{brand:"Monsoon","brand:wikidata":"Q3069980","brand:wikipedia":"en:Monsoon Accessorize",name:"Monsoon",shop:"clothes"},removeTags:{brand:"Monsoon","brand:wikidata":"Q3069980","brand:wikipedia":"en:Monsoon Accessorize",name:"Monsoon",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Mr Price":{name:"Mr Price",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q6929120"},addTags:{brand:"Mr Price","brand:wikidata":"Q6929120","brand:wikipedia":"en:Mr. Price",name:"Mr Price",shop:"clothes"},removeTags:{brand:"Mr Price","brand:wikidata":"Q6929120","brand:wikipedia":"en:Mr. Price",name:"Mr Price",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/NKD":{name:"NKD",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q927272"},addTags:{brand:"NKD","brand:wikidata":"Q927272","brand:wikipedia":"de:NKD",name:"NKD",shop:"clothes"},removeTags:{brand:"NKD","brand:wikidata":"Q927272","brand:wikipedia":"de:NKD",name:"NKD",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Naf Naf":{name:"Naf Naf",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q3334188"},addTags:{brand:"Naf Naf","brand:wikidata":"Q3334188","brand:wikipedia":"fr:Naf Naf",name:"Naf Naf",shop:"clothes"},removeTags:{brand:"Naf Naf","brand:wikidata":"Q3334188","brand:wikipedia":"fr:Naf Naf",name:"Naf Naf",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/New Look":{name:"New Look",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q12063852"},addTags:{brand:"New Look","brand:wikidata":"Q12063852","brand:wikipedia":"en:New Look (company)",name:"New Look",shop:"clothes"},removeTags:{brand:"New Look","brand:wikidata":"Q12063852","brand:wikipedia":"en:New Look (company)",name:"New Look",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/New Yorker":{name:"New Yorker",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q706421"},addTags:{brand:"New Yorker","brand:wikidata":"Q706421","brand:wikipedia":"en:NewYorker",name:"New Yorker",shop:"clothes"},removeTags:{brand:"New Yorker","brand:wikidata":"Q706421","brand:wikipedia":"en:NewYorker",name:"New Yorker",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Next":{name:"Next",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q246655"},addTags:{brand:"Next","brand:wikidata":"Q246655","brand:wikipedia":"en:Next plc",name:"Next",shop:"clothes"},removeTags:{brand:"Next","brand:wikidata":"Q246655","brand:wikipedia":"en:Next plc",name:"Next",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Nike":{name:"Nike",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q483915"},addTags:{brand:"Nike","brand:wikidata":"Q483915","brand:wikipedia":"en:Nike, Inc.",name:"Nike",shop:"clothes"},removeTags:{brand:"Nike","brand:wikidata":"Q483915","brand:wikipedia":"en:Nike, Inc.",name:"Nike",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Nordstrom Rack":{name:"Nordstrom Rack",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q21463374"},addTags:{brand:"Nordstrom Rack","brand:wikidata":"Q21463374","brand:wikipedia":"en:Nordstrom Rack",name:"Nordstrom Rack",shop:"clothes"},removeTags:{brand:"Nordstrom Rack","brand:wikidata":"Q21463374","brand:wikipedia":"en:Nordstrom Rack",name:"Nordstrom Rack",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/OVS":{name:"OVS",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q2042514"},addTags:{brand:"OVS","brand:wikidata":"Q2042514","brand:wikipedia":"en:OVS (company)",name:"OVS",shop:"clothes"},removeTags:{brand:"OVS","brand:wikidata":"Q2042514","brand:wikipedia":"en:OVS (company)",name:"OVS",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Okaïdi":{name:"Okaïdi",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q3350027"},addTags:{brand:"Okaïdi","brand:wikidata":"Q3350027","brand:wikipedia":"fr:Okaïdi",name:"Okaïdi",shop:"clothes"},removeTags:{brand:"Okaïdi","brand:wikidata":"Q3350027","brand:wikipedia":"fr:Okaïdi",name:"Okaïdi",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Old Navy":{name:"Old Navy",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q2735242"},addTags:{brand:"Old Navy","brand:wikidata":"Q2735242","brand:wikipedia":"en:Old Navy",name:"Old Navy",shop:"clothes"},removeTags:{brand:"Old Navy","brand:wikidata":"Q2735242","brand:wikipedia":"en:Old Navy",name:"Old Navy",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Orchestra":{name:"Orchestra",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q28042940"},addTags:{brand:"Orchestra","brand:wikidata":"Q28042940","brand:wikipedia":"fr:Orchestra Prémaman",name:"Orchestra",shop:"clothes"},removeTags:{brand:"Orchestra","brand:wikidata":"Q28042940","brand:wikipedia":"fr:Orchestra Prémaman",name:"Orchestra",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Orsay":{name:"Orsay",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q883245"},addTags:{brand:"Orsay","brand:wikidata":"Q883245","brand:wikipedia":"de:Orsay (Modeunternehmen)",name:"Orsay",shop:"clothes"},removeTags:{brand:"Orsay","brand:wikidata":"Q883245","brand:wikipedia":"de:Orsay (Modeunternehmen)",name:"Orsay",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Outfit":{name:"Outfit",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q7112061"},addTags:{brand:"Outfit","brand:wikidata":"Q7112061","brand:wikipedia":"en:Outfit (retailer)",name:"Outfit",shop:"clothes"},removeTags:{brand:"Outfit","brand:wikidata":"Q7112061","brand:wikipedia":"en:Outfit (retailer)",name:"Outfit",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Oysho":{name:"Oysho",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q3327046"},addTags:{brand:"Oysho","brand:wikidata":"Q3327046","brand:wikipedia":"en:Oysho",name:"Oysho",shop:"clothes"},removeTags:{brand:"Oysho","brand:wikidata":"Q3327046","brand:wikipedia":"en:Oysho",name:"Oysho",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/PacSun":{name:"PacSun",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q7121857"},addTags:{brand:"PacSun","brand:wikidata":"Q7121857","brand:wikipedia":"en:PacSun",name:"PacSun",shop:"clothes"},removeTags:{brand:"PacSun","brand:wikidata":"Q7121857","brand:wikipedia":"en:PacSun",name:"PacSun",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Palmers":{name:"Palmers",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q1509985"},addTags:{brand:"Palmers","brand:wikidata":"Q1509985","brand:wikipedia":"de:Palmers",name:"Palmers",shop:"clothes"},removeTags:{brand:"Palmers","brand:wikidata":"Q1509985","brand:wikipedia":"de:Palmers",name:"Palmers",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Peacocks":{name:"Peacocks",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q7157762"},addTags:{brand:"Peacocks","brand:wikidata":"Q7157762","brand:wikipedia":"en:Peacocks (clothing)",name:"Peacocks",shop:"clothes"},removeTags:{brand:"Peacocks","brand:wikidata":"Q7157762","brand:wikipedia":"en:Peacocks (clothing)",name:"Peacocks",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Peek & Cloppenburg":{name:"Peek & Cloppenburg",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q2066959"},addTags:{brand:"Peek & Cloppenburg","brand:wikidata":"Q2066959","brand:wikipedia":"en:Peek & Cloppenburg",name:"Peek & Cloppenburg",shop:"clothes"},removeTags:{brand:"Peek & Cloppenburg","brand:wikidata":"Q2066959","brand:wikipedia":"en:Peek & Cloppenburg",name:"Peek & Cloppenburg",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Pep":{name:"Pep",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q7166182"},addTags:{brand:"Pep","brand:wikidata":"Q7166182","brand:wikipedia":"en:Pep (store)",name:"Pep",shop:"clothes"},removeTags:{brand:"Pep","brand:wikidata":"Q7166182","brand:wikipedia":"en:Pep (store)",name:"Pep",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Pepco":{name:"Pepco",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q11815580"},addTags:{brand:"Pepco","brand:wikidata":"Q11815580","brand:wikipedia":"pl:Pepco",name:"Pepco",shop:"clothes"},removeTags:{brand:"Pepco","brand:wikidata":"Q11815580","brand:wikipedia":"pl:Pepco",name:"Pepco",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Petit Bateau":{name:"Petit Bateau",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q3377090"},addTags:{brand:"Petit Bateau","brand:wikidata":"Q3377090","brand:wikipedia":"en:Petit Bateau",name:"Petit Bateau",shop:"clothes"},removeTags:{brand:"Petit Bateau","brand:wikidata":"Q3377090","brand:wikipedia":"en:Petit Bateau",name:"Petit Bateau",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Phase Eight":{name:"Phase Eight",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q17020730"},addTags:{brand:"Phase Eight","brand:wikidata":"Q17020730","brand:wikipedia":"en:Phase Eight",name:"Phase Eight",shop:"clothes"},removeTags:{brand:"Phase Eight","brand:wikidata":"Q17020730","brand:wikipedia":"en:Phase Eight",name:"Phase Eight",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Pimkie":{name:"Pimkie",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q1758066"},addTags:{brand:"Pimkie","brand:wikidata":"Q1758066","brand:wikipedia":"en:Pimkie",name:"Pimkie",shop:"clothes"},removeTags:{brand:"Pimkie","brand:wikidata":"Q1758066","brand:wikipedia":"en:Pimkie",name:"Pimkie",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Primark":{name:"Primark",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q137023"},addTags:{brand:"Primark","brand:wikidata":"Q137023","brand:wikipedia":"en:Primark",name:"Primark",shop:"clothes"},removeTags:{brand:"Primark","brand:wikidata":"Q137023","brand:wikipedia":"en:Primark",name:"Primark",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Promod":{name:"Promod",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q3407429"},addTags:{brand:"Promod","brand:wikidata":"Q3407429","brand:wikipedia":"en:Promod",name:"Promod",shop:"clothes"},removeTags:{brand:"Promod","brand:wikidata":"Q3407429","brand:wikipedia":"en:Promod",name:"Promod",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Pull & Bear":{name:"Pull & Bear",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q691029"},addTags:{brand:"Pull & Bear","brand:wikidata":"Q691029","brand:wikipedia":"en:Pull&Bear",name:"Pull & Bear",shop:"clothes"},removeTags:{brand:"Pull & Bear","brand:wikidata":"Q691029","brand:wikipedia":"en:Pull&Bear",name:"Pull & Bear",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Rainbow":{name:"Rainbow",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q7284708"},addTags:{brand:"Rainbow","brand:wikidata":"Q7284708","brand:wikipedia":"en:Rainbow Shops",name:"Rainbow",shop:"clothes"},removeTags:{brand:"Rainbow","brand:wikidata":"Q7284708","brand:wikipedia":"en:Rainbow Shops",name:"Rainbow",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Reitmans":{name:"Reitmans",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q7310506"},addTags:{brand:"Reitmans","brand:wikidata":"Q7310506","brand:wikipedia":"en:Reitmans",name:"Reitmans",shop:"clothes"},removeTags:{brand:"Reitmans","brand:wikidata":"Q7310506","brand:wikipedia":"en:Reitmans",name:"Reitmans",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Reserved":{name:"Reserved",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q21809354"},addTags:{brand:"Reserved","brand:wikidata":"Q21809354","brand:wikipedia":"en:Reserved (retail)",name:"Reserved",shop:"clothes"},removeTags:{brand:"Reserved","brand:wikidata":"Q21809354","brand:wikipedia":"en:Reserved (retail)",name:"Reserved",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/River Island":{name:"River Island",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q2670328"},addTags:{brand:"River Island","brand:wikidata":"Q2670328","brand:wikipedia":"en:River Island",name:"River Island",shop:"clothes"},removeTags:{brand:"River Island","brand:wikidata":"Q2670328","brand:wikipedia":"en:River Island",name:"River Island",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Ross":{name:"Ross",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q3442791"},addTags:{brand:"Ross","brand:wikidata":"Q3442791","brand:wikipedia":"en:Ross Stores",name:"Ross",shop:"clothes"},removeTags:{brand:"Ross","brand:wikidata":"Q3442791","brand:wikipedia":"en:Ross Stores",name:"Ross",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Sisley":{name:"Sisley",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q12054325"},addTags:{brand:"Sisley","brand:wikidata":"Q12054325","brand:wikipedia":"cs:Sisley",name:"Sisley",operator:"Benetton Group","operator:wikidata":"Q817139","operator:wikipedia":"en:Benetton Group",shop:"clothes"},removeTags:{brand:"Sisley","brand:wikidata":"Q12054325","brand:wikipedia":"cs:Sisley",name:"Sisley",operator:"Benetton Group","operator:wikidata":"Q817139","operator:wikipedia":"en:Benetton Group",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Springfield":{name:"Springfield",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q958209"},addTags:{brand:"Springfield","brand:wikidata":"Q958209","brand:wikipedia":"es:Springfield (cadena de tiendas)",name:"Springfield",shop:"clothes"},removeTags:{brand:"Springfield","brand:wikidata":"Q958209","brand:wikipedia":"es:Springfield (cadena de tiendas)",name:"Springfield",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Stefanel":{name:"Stefanel",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q2338087"},addTags:{brand:"Stefanel","brand:wikidata":"Q2338087","brand:wikipedia":"ro:Stefanel (companie)",name:"Stefanel",shop:"clothes"},removeTags:{brand:"Stefanel","brand:wikidata":"Q2338087","brand:wikipedia":"ro:Stefanel (companie)",name:"Stefanel",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Stradivarius":{name:"Stradivarius",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q3322945"},addTags:{brand:"Stradivarius","brand:wikidata":"Q3322945","brand:wikipedia":"en:Stradivarius (clothing brand)",name:"Stradivarius",shop:"clothes"},removeTags:{brand:"Stradivarius","brand:wikidata":"Q3322945","brand:wikipedia":"en:Stradivarius (clothing brand)",name:"Stradivarius",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Suburbia":{name:"Suburbia",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q6134992"},addTags:{brand:"Suburbia","brand:wikidata":"Q6134992","brand:wikipedia":"en:Suburbia (department store)",name:"Suburbia",shop:"clothes"},removeTags:{brand:"Suburbia","brand:wikidata":"Q6134992","brand:wikipedia":"en:Suburbia (department store)",name:"Suburbia",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Superdry":{name:"Superdry",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q1684445"},addTags:{brand:"Superdry","brand:wikidata":"Q1684445","brand:wikipedia":"en:Superdry",name:"Superdry",shop:"clothes"},removeTags:{brand:"Superdry","brand:wikidata":"Q1684445","brand:wikipedia":"en:Superdry",name:"Superdry",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/TJ Maxx":{name:"TJ Maxx",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q10860683"},addTags:{brand:"TJ Maxx","brand:wikidata":"Q10860683","brand:wikipedia":"en:TJ Maxx",name:"TJ Maxx",shop:"clothes"},removeTags:{brand:"TJ Maxx","brand:wikidata":"Q10860683","brand:wikipedia":"en:TJ Maxx",name:"TJ Maxx",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/TK Maxx":{name:"TK Maxx",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q23823668"},addTags:{brand:"TK Maxx","brand:wikidata":"Q23823668","brand:wikipedia":"en:TK Maxx",name:"TK Maxx",shop:"clothes"},removeTags:{brand:"TK Maxx","brand:wikidata":"Q23823668","brand:wikipedia":"en:TK Maxx",name:"TK Maxx",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Takko":{name:"Takko",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q1371302"},addTags:{brand:"Takko","brand:wikidata":"Q1371302","brand:wikipedia":"de:Takko",name:"Takko",shop:"clothes"},removeTags:{brand:"Takko","brand:wikidata":"Q1371302","brand:wikipedia":"de:Takko",name:"Takko",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Talbots":{name:"Talbots",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q7679064"},addTags:{brand:"Talbots","brand:wikidata":"Q7679064","brand:wikipedia":"en:Talbots",name:"Talbots",shop:"clothes"},removeTags:{brand:"Talbots","brand:wikidata":"Q7679064","brand:wikipedia":"en:Talbots",name:"Talbots",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Tally Weijl":{name:"Tally Weijl",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q689695"},addTags:{brand:"Tally Weijl","brand:wikidata":"Q689695","brand:wikipedia":"en:Tally Weijl",name:"Tally Weijl",shop:"clothes"},removeTags:{brand:"Tally Weijl","brand:wikidata":"Q689695","brand:wikipedia":"en:Tally Weijl",name:"Tally Weijl",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Tati":{name:"Tati",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q3516026"},addTags:{brand:"Tati","brand:wikidata":"Q3516026","brand:wikipedia":"fr:Tati (entreprise)",name:"Tati",shop:"clothes"},removeTags:{brand:"Tati","brand:wikidata":"Q3516026","brand:wikipedia":"fr:Tati (entreprise)",name:"Tati",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Tezenis":{name:"Tezenis",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q28056374"},addTags:{brand:"Tezenis","brand:wikidata":"Q28056374",name:"Tezenis",shop:"clothes"},removeTags:{brand:"Tezenis","brand:wikidata":"Q28056374",name:"Tezenis",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/The Children's Place":{name:"The Children's Place",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q3520257"},addTags:{brand:"The Children's Place","brand:wikidata":"Q3520257","brand:wikipedia":"en:The Children's Place",name:"The Children's Place",shop:"clothes"},removeTags:{brand:"The Children's Place","brand:wikidata":"Q3520257","brand:wikipedia":"en:The Children's Place",name:"The Children's Place",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/The North Face":{name:"The North Face",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q152784"},addTags:{brand:"The North Face","brand:wikidata":"Q152784","brand:wikipedia":"en:The North Face",name:"The North Face",shop:"clothes"},removeTags:{brand:"The North Face","brand:wikidata":"Q152784","brand:wikipedia":"en:The North Face",name:"The North Face",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/The Sting":{name:"The Sting",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q2518794"},addTags:{brand:"The Sting","brand:wikidata":"Q2518794","brand:wikipedia":"nl:The Sting Companies",name:"The Sting",shop:"clothes"},removeTags:{brand:"The Sting","brand:wikidata":"Q2518794","brand:wikipedia":"nl:The Sting Companies",name:"The Sting",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Timberland":{name:"Timberland",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q1539185"},addTags:{brand:"Timberland","brand:wikidata":"Q1539185","brand:wikipedia":"en:The Timberland Company",name:"Timberland",shop:"clothes"},removeTags:{brand:"Timberland","brand:wikidata":"Q1539185","brand:wikipedia":"en:The Timberland Company",name:"Timberland",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Tom Tailor":{name:"Tom Tailor",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q571206"},addTags:{brand:"Tom Tailor","brand:wikidata":"Q571206","brand:wikipedia":"en:Tom Tailor",name:"Tom Tailor",shop:"clothes"},removeTags:{brand:"Tom Tailor","brand:wikidata":"Q571206","brand:wikipedia":"en:Tom Tailor",name:"Tom Tailor",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Tommy Hilfiger":{name:"Tommy Hilfiger",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q634881"},addTags:{brand:"Tommy Hilfiger","brand:wikidata":"Q634881","brand:wikipedia":"en:Tommy Hilfiger (company)",name:"Tommy Hilfiger",shop:"clothes"},removeTags:{brand:"Tommy Hilfiger","brand:wikidata":"Q634881","brand:wikipedia":"en:Tommy Hilfiger (company)",name:"Tommy Hilfiger",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Topshop":{name:"Topshop",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q1893576"},addTags:{brand:"Topshop","brand:wikidata":"Q1893576","brand:wikipedia":"en:Topshop",name:"Topshop",shop:"clothes"},removeTags:{brand:"Topshop","brand:wikidata":"Q1893576","brand:wikipedia":"en:Topshop",name:"Topshop",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Torrid":{name:"Torrid",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q7827120"},addTags:{brand:"Torrid","brand:wikidata":"Q7827120","brand:wikipedia":"en:Torrid (clothing retailer)",name:"Torrid",shop:"clothes"},removeTags:{brand:"Torrid","brand:wikidata":"Q7827120","brand:wikipedia":"en:Torrid (clothing retailer)",name:"Torrid",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Triumph":{name:"Triumph",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q671216"},addTags:{brand:"Triumph","brand:wikidata":"Q671216","brand:wikipedia":"en:Triumph International",name:"Triumph",shop:"clothes"},removeTags:{brand:"Triumph","brand:wikidata":"Q671216","brand:wikipedia":"en:Triumph International",name:"Triumph",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Truworths":{name:"Truworths",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q24233998"},addTags:{brand:"Truworths","brand:wikidata":"Q24233998","brand:wikipedia":"en:Truworths",name:"Truworths",shop:"clothes"},removeTags:{brand:"Truworths","brand:wikidata":"Q24233998","brand:wikipedia":"en:Truworths",name:"Truworths",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Ulla Popken":{name:"Ulla Popken",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q2475146"},addTags:{brand:"Ulla Popken","brand:wikidata":"Q2475146","brand:wikipedia":"en:Ulla Popken",name:"Ulla Popken",shop:"clothes"},removeTags:{brand:"Ulla Popken","brand:wikidata":"Q2475146","brand:wikipedia":"en:Ulla Popken",name:"Ulla Popken",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Uniqlo":{name:"Uniqlo",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q26070"},addTags:{brand:"Uniqlo","brand:wikidata":"Q26070","brand:wikipedia":"en:Uniqlo",name:"Uniqlo",shop:"clothes"},removeTags:{brand:"Uniqlo","brand:wikidata":"Q26070","brand:wikipedia":"en:Uniqlo",name:"Uniqlo",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/United Colors of Benetton":{name:"United Colors of Benetton",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q817139"},addTags:{brand:"United Colors of Benetton","brand:wikidata":"Q817139","brand:wikipedia":"en:Benetton Group",name:"United Colors of Benetton",shop:"clothes"},removeTags:{brand:"United Colors of Benetton","brand:wikidata":"Q817139","brand:wikipedia":"en:Benetton Group",name:"United Colors of Benetton",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Urban Outfitters":{name:"Urban Outfitters",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q3552193"},addTags:{brand:"Urban Outfitters","brand:wikidata":"Q3552193","brand:wikipedia":"en:Urban Outfitters",name:"Urban Outfitters",shop:"clothes"},removeTags:{brand:"Urban Outfitters","brand:wikidata":"Q3552193","brand:wikipedia":"en:Urban Outfitters",name:"Urban Outfitters",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Vero Moda":{name:"Vero Moda",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q594721"},addTags:{brand:"Vero Moda","brand:wikidata":"Q594721","brand:wikipedia":"en:Bestseller (company)",name:"Vero Moda",shop:"clothes"},removeTags:{brand:"Vero Moda","brand:wikidata":"Q594721","brand:wikipedia":"en:Bestseller (company)",name:"Vero Moda",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Victoria's Secret":{name:"Victoria's Secret",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q332477"},addTags:{brand:"Victoria's Secret","brand:wikidata":"Q332477","brand:wikipedia":"en:Victoria's Secret",name:"Victoria's Secret",shop:"clothes"},removeTags:{brand:"Victoria's Secret","brand:wikidata":"Q332477","brand:wikipedia":"en:Victoria's Secret",name:"Victoria's Secret",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/WE":{name:"WE",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q1987861"},addTags:{brand:"WE","brand:wikidata":"Q1987861","brand:wikipedia":"en:WE (clothing)",name:"WE",shop:"clothes"},removeTags:{brand:"WE","brand:wikidata":"Q1987861","brand:wikipedia":"en:WE (clothing)",name:"WE",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/White House Black Market":{name:"White House Black Market",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q7994858"},addTags:{brand:"White House Black Market","brand:wikidata":"Q7994858","brand:wikipedia":"en:White House Black Market",name:"White House Black Market",shop:"clothes"},removeTags:{brand:"White House Black Market","brand:wikidata":"Q7994858","brand:wikipedia":"en:White House Black Market",name:"White House Black Market",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/White Stuff":{name:"White Stuff",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q7995442"},addTags:{brand:"White Stuff","brand:wikidata":"Q7995442","brand:wikipedia":"en:White Stuff Clothing",name:"White Stuff",shop:"clothes"},removeTags:{brand:"White Stuff","brand:wikidata":"Q7995442","brand:wikipedia":"en:White Stuff Clothing",name:"White Stuff",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Wibra":{name:"Wibra",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q943405"},addTags:{brand:"Wibra","brand:wikidata":"Q943405","brand:wikipedia":"en:Wibra",name:"Wibra",shop:"clothes"},removeTags:{brand:"Wibra","brand:wikidata":"Q943405","brand:wikipedia":"en:Wibra",name:"Wibra",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Winners":{name:"Winners",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q845257"},addTags:{brand:"Winners","brand:wikidata":"Q845257","brand:wikipedia":"en:Winners",name:"Winners",shop:"clothes"},removeTags:{brand:"Winners","brand:wikidata":"Q845257","brand:wikipedia":"en:Winners",name:"Winners",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Woolworths":{name:"Woolworths",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q8033997"},addTags:{brand:"Woolworths","brand:wikidata":"Q8033997","brand:wikipedia":"en:Woolworths (South Africa)",name:"Woolworths",shop:"clothes"},removeTags:{brand:"Woolworths","brand:wikidata":"Q8033997","brand:wikipedia":"en:Woolworths (South Africa)",name:"Woolworths",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Yamamay":{name:"Yamamay",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q2599214"},addTags:{brand:"Yamamay","brand:wikidata":"Q2599214","brand:wikipedia":"it:Yamamay",name:"Yamamay",shop:"clothes"},removeTags:{brand:"Yamamay","brand:wikidata":"Q2599214","brand:wikipedia":"it:Yamamay",name:"Yamamay",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Zara":{name:"Zara",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q147662"},addTags:{brand:"Zara","brand:wikidata":"Q147662","brand:wikipedia":"en:Zara (retailer)",name:"Zara",shop:"clothes"},removeTags:{brand:"Zara","brand:wikidata":"Q147662","brand:wikipedia":"en:Zara (retailer)",name:"Zara",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Zeeman":{name:"Zeeman",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q184399"},addTags:{brand:"Zeeman","brand:wikidata":"Q184399","brand:wikipedia":"en:Zeeman (store)",name:"Zeeman",shop:"clothes"},removeTags:{brand:"Zeeman","brand:wikidata":"Q184399","brand:wikipedia":"en:Zeeman (store)",name:"Zeeman",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/Zumiez":{name:"Zumiez",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q8075252"},addTags:{brand:"Zumiez","brand:wikidata":"Q8075252","brand:wikipedia":"en:Zumiez",name:"Zumiez",shop:"clothes"},removeTags:{brand:"Zumiez","brand:wikidata":"Q8075252","brand:wikipedia":"en:Zumiez",name:"Zumiez",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/mister*lady":{name:"mister*lady",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q18640136"},addTags:{brand:"mister*lady","brand:wikidata":"Q18640136","brand:wikipedia":"de:mister*lady",name:"mister*lady",shop:"clothes"},removeTags:{brand:"mister*lady","brand:wikidata":"Q18640136","brand:wikipedia":"de:mister*lady",name:"mister*lady",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/rue21":{name:"rue21",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q7377762"},addTags:{brand:"rue21","brand:wikidata":"Q7377762","brand:wikipedia":"en:rue21",name:"rue21",shop:"clothes"},removeTags:{brand:"rue21","brand:wikidata":"Q7377762","brand:wikipedia":"en:rue21",name:"rue21",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/s.Oliver":{name:"s.Oliver",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q265056"},addTags:{brand:"s.Oliver","brand:wikidata":"Q265056","brand:wikipedia":"en:S.Oliver",name:"s.Oliver",shop:"clothes"},removeTags:{brand:"s.Oliver","brand:wikidata":"Q265056","brand:wikipedia":"en:S.Oliver",name:"s.Oliver",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/しまむら":{name:"しまむら",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q7758173"},addTags:{brand:"しまむら","brand:wikidata":"Q7758173","brand:wikipedia":"ja:しまむら",name:"しまむら",shop:"clothes"},removeTags:{brand:"しまむら","brand:wikidata":"Q7758173","brand:wikipedia":"ja:しまむら",name:"しまむら",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/はるやま":{name:"はるやま",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q11275918"},addTags:{brand:"はるやま","brand:wikidata":"Q11275918","brand:wikipedia":"ja:はるやま商事",name:"はるやま",shop:"clothes"},removeTags:{brand:"はるやま","brand:wikidata":"Q11275918","brand:wikipedia":"ja:はるやま商事",name:"はるやま",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/ユニクロ":{name:"ユニクロ",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q26070"},addTags:{brand:"ユニクロ","brand:en":"UNIQLO","brand:wikidata":"Q26070","brand:wikipedia":"en:Uniqlo",name:"ユニクロ","name:en":"UNIQLO",shop:"clothes"},removeTags:{brand:"ユニクロ","brand:en":"UNIQLO","brand:wikidata":"Q26070","brand:wikipedia":"en:Uniqlo",name:"ユニクロ","name:en":"UNIQLO",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/ワークマン":{name:"ワークマン",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q11351660"},addTags:{brand:"ワークマン","brand:wikidata":"Q11351660","brand:wikipedia":"ja:ワークマン",name:"ワークマン",shop:"clothes"},removeTags:{brand:"ワークマン","brand:wikidata":"Q11351660","brand:wikipedia":"ja:ワークマン",name:"ワークマン",shop:"clothes"},matchScore:2,suggestion:true},"shop/clothes/洋服の青山":{name:"洋服の青山",icon:"maki-clothing-store",geometry:["point","area"],tags:{shop:"clothes","brand:wikidata":"Q11661241"},addTags:{brand:"洋服の青山","brand:wikidata":"Q11661241","brand:wikipedia":"ja:青山商事",name:"洋服の青山",shop:"clothes"},removeTags:{brand:"洋服の青山","brand:wikidata":"Q11661241","brand:wikipedia":"ja:青山商事",name:"洋服の青山",shop:"clothes"},matchScore:2,suggestion:true},"shop/coffee/Nespresso":{name:"Nespresso",icon:"maki-shop",geometry:["point","area"],tags:{shop:"coffee","brand:wikidata":"Q301301"},addTags:{brand:"Nespresso","brand:wikidata":"Q301301","brand:wikipedia":"en:Nespresso",name:"Nespresso",shop:"coffee"},removeTags:{brand:"Nespresso","brand:wikidata":"Q301301","brand:wikipedia":"en:Nespresso",name:"Nespresso",shop:"coffee"},matchScore:2,suggestion:true},"shop/coffee/Tchibo":{name:"Tchibo",icon:"maki-shop",geometry:["point","area"],tags:{shop:"coffee","brand:wikidata":"Q564213"},addTags:{brand:"Tchibo","brand:wikidata":"Q564213","brand:wikipedia":"de:Tchibo",name:"Tchibo",shop:"coffee"},removeTags:{brand:"Tchibo","brand:wikidata":"Q564213","brand:wikipedia":"de:Tchibo",name:"Tchibo",shop:"coffee"},matchScore:2,suggestion:true},"shop/computer/PC World":{name:"PC World",icon:"maki-shop",geometry:["point","area"],tags:{shop:"computer","brand:wikidata":"Q7118727"},addTags:{brand:"PC World","brand:wikidata":"Q7118727","brand:wikipedia":"en:PC World (retailer)",name:"PC World",shop:"computer"},removeTags:{brand:"PC World","brand:wikidata":"Q7118727","brand:wikipedia":"en:PC World (retailer)",name:"PC World",shop:"computer"},matchScore:2,suggestion:true},"shop/confectionery/Adyar Ananda Bhavan":{name:"Adyar Ananda Bhavan",icon:"maki-confectionery",geometry:["point","area"],tags:{shop:"confectionery","brand:wikidata":"Q15178238"},addTags:{shop:"confectionery",brand:"Adyar Ananda Bhavan","brand:wikidata":"Q15178238","brand:wikipedia":"en:Adyar Ananda Bhavan",name:"Adyar Ananda Bhavan"},removeTags:{shop:"confectionery",brand:"Adyar Ananda Bhavan","brand:wikidata":"Q15178238","brand:wikipedia":"en:Adyar Ananda Bhavan",name:"Adyar Ananda Bhavan"},matchScore:2,suggestion:true},"shop/confectionery/Hemmakvall":{name:"Hemmakvall",icon:"maki-confectionery",geometry:["point","area"],tags:{shop:"confectionery","brand:wikidata":"Q10521791"},addTags:{amenity:"confectionery","brand:wikipedia":"sv:Hemmakväll","brand:wikidata":"Q10521791",name:"Hemmakväll"},removeTags:{amenity:"confectionery","brand:wikipedia":"sv:Hemmakväll","brand:wikidata":"Q10521791",name:"Hemmakväll"},matchScore:2,suggestion:true},"shop/confectionery/Hussel":{name:"Hussel",icon:"maki-confectionery",geometry:["point","area"],tags:{shop:"confectionery","brand:wikidata":"Q17123688"},addTags:{brand:"Hussel","brand:wikidata":"Q17123688","brand:wikipedia":"de:Hussel",name:"Hussel",shop:"confectionery"},removeTags:{brand:"Hussel","brand:wikidata":"Q17123688","brand:wikipedia":"de:Hussel",name:"Hussel",shop:"confectionery"},matchScore:2,suggestion:true},"shop/confectionery/Jamin":{name:"Jamin",icon:"maki-confectionery",geometry:["point","area"],tags:{shop:"confectionery","brand:wikidata":"Q2291848"},addTags:{brand:"Jamin","brand:wikidata":"Q2291848","brand:wikipedia":"nl:Jamin",name:"Jamin",shop:"confectionery"},removeTags:{brand:"Jamin","brand:wikidata":"Q2291848","brand:wikipedia":"nl:Jamin",name:"Jamin",shop:"confectionery"},matchScore:2,suggestion:true},"shop/confectionery/Thorntons":{name:"Thorntons",icon:"maki-confectionery",geometry:["point","area"],tags:{shop:"confectionery","brand:wikidata":"Q683102"},addTags:{brand:"Thorntons","brand:wikidata":"Q683102","brand:wikipedia":"en:Thorntons",name:"Thorntons",shop:"confectionery"},removeTags:{brand:"Thorntons","brand:wikidata":"Q683102","brand:wikipedia":"en:Thorntons",name:"Thorntons",shop:"confectionery"},matchScore:2,suggestion:true},"shop/confectionery/Вацак":{name:"Вацак",icon:"maki-confectionery",geometry:["point","area"],tags:{shop:"confectionery","brand:wikidata":"Q30966576"},addTags:{brand:"Вацак","brand:wikidata":"Q30966576","brand:wikipedia":"uk:Кондитерський Дім «Вацак»",name:"Вацак",shop:"confectionery"},removeTags:{brand:"Вацак","brand:wikidata":"Q30966576","brand:wikipedia":"uk:Кондитерський Дім «Вацак»",name:"Вацак",shop:"confectionery"},matchScore:2,suggestion:true},"shop/confectionery/シャトレーゼ":{name:"シャトレーゼ",icon:"maki-confectionery",geometry:["point","area"],tags:{shop:"confectionery","brand:wikidata":"Q11307696"},addTags:{brand:"シャトレーゼ","brand:wikidata":"Q11307696","brand:wikipedia":"ja:シャトレーゼ",name:"シャトレーゼ",shop:"confectionery"},removeTags:{brand:"シャトレーゼ","brand:wikidata":"Q11307696","brand:wikipedia":"ja:シャトレーゼ",name:"シャトレーゼ",shop:"confectionery"},matchScore:2,suggestion:true},"shop/convenience/7-Eleven":{name:"7-Eleven",icon:"maki-shop",geometry:["point","area"],tags:{shop:"convenience","brand:wikidata":"Q259340"},addTags:{brand:"7-Eleven","brand:wikidata":"Q259340","brand:wikipedia":"en:7-Eleven",name:"7-Eleven",shop:"convenience"},removeTags:{brand:"7-Eleven","brand:wikidata":"Q259340","brand:wikipedia":"en:7-Eleven",name:"7-Eleven",shop:"convenience"},matchScore:2,suggestion:true},"shop/convenience/8 à Huit":{name:"8 à Huit",icon:"maki-shop",geometry:["point","area"],tags:{shop:"convenience","brand:wikidata":"Q2818601"},addTags:{brand:"8 à Huit","brand:wikidata":"Q2818601","brand:wikipedia":"en:8 à Huit",name:"8 à Huit",shop:"convenience"},removeTags:{brand:"8 à Huit","brand:wikidata":"Q2818601","brand:wikipedia":"en:8 à Huit",name:"8 à Huit",shop:"convenience"},matchScore:2,suggestion:true},"shop/convenience/ABC":{name:"ABC",icon:"maki-shop",geometry:["point","area"],tags:{shop:"convenience","brand:wikidata":"Q4650251"},addTags:{brand:"ABC","brand:wikidata":"Q4650251","brand:wikipedia":"en:ABC Stores (Hawaii)",name:"ABC",shop:"convenience"},removeTags:{brand:"ABC","brand:wikidata":"Q4650251","brand:wikipedia":"en:ABC Stores (Hawaii)",name:"ABC",shop:"convenience"},matchScore:2,suggestion:true},"shop/convenience/Aibė":{name:"Aibė",icon:"maki-shop",geometry:["point","area"],tags:{shop:"convenience","brand:wikidata":"Q1022952"},addTags:{brand:"Aibė","brand:wikidata":"Q1022952","brand:wikipedia":"de:Aibė",name:"Aibė",shop:"convenience"},removeTags:{brand:"Aibė","brand:wikidata":"Q1022952","brand:wikipedia":"de:Aibė",name:"Aibė",shop:"convenience"},matchScore:2,suggestion:true},"shop/convenience/Albert Heijn to go":{name:"Albert Heijn to go",icon:"maki-shop",geometry:["point","area"],tags:{shop:"convenience","brand:wikidata":"Q1653985"},addTags:{brand:"Albert Heijn to go","brand:wikidata":"Q1653985","brand:wikipedia":"en:Albert Heijn",name:"Albert Heijn to go",shop:"convenience"},removeTags:{brand:"Albert Heijn to go","brand:wikidata":"Q1653985","brand:wikipedia":"en:Albert Heijn",name:"Albert Heijn to go",shop:"convenience"},matchScore:2,suggestion:true},"shop/convenience/Alfamidi":{name:"Alfamidi",icon:"maki-shop",geometry:["point","area"],tags:{shop:"convenience","brand:wikidata":"Q12471462"},addTags:{brand:"Alfamidi","brand:wikidata":"Q12471462","brand:wikipedia":"id:Alfamidi",name:"Alfamidi",shop:"convenience"},removeTags:{brand:"Alfamidi","brand:wikidata":"Q12471462","brand:wikipedia":"id:Alfamidi",name:"Alfamidi",shop:"convenience"},matchScore:2,suggestion:true},"shop/convenience/BP Shop":{name:"BP Shop",icon:"maki-shop",geometry:["point","area"],tags:{shop:"convenience","brand:wikidata":"Q152057"},addTags:{brand:"BP Shop","brand:wikidata":"Q152057","brand:wikipedia":"en:BP",name:"BP Shop",shop:"convenience"},removeTags:{brand:"BP Shop","brand:wikidata":"Q152057","brand:wikipedia":"en:BP",name:"BP Shop",shop:"convenience"},matchScore:2,suggestion:true},"shop/convenience/Buc-ee's":{name:"Buc-ee's",icon:"maki-shop",geometry:["point","area"],tags:{shop:"convenience","brand:wikidata":"Q4982335"},addTags:{brand:"Buc-ee's","brand:wikidata":"Q4982335","brand:wikipedia":"en:Buc-ee's",name:"Buc-ee's",shop:"convenience"},removeTags:{brand:"Buc-ee's","brand:wikidata":"Q4982335","brand:wikipedia":"en:Buc-ee's",name:"Buc-ee's",shop:"convenience"},matchScore:2,suggestion:true},"shop/convenience/COOP Jednota":{name:"COOP Jednota",icon:"maki-shop",geometry:["point","area"],tags:{shop:"convenience","brand:wikidata":"Q41629254"},addTags:{brand:"COOP Jednota","brand:wikidata":"Q41629254","brand:wikipedia":"sk:COOP Jednota Slovensko",name:"COOP Jednota",shop:"convenience"},removeTags:{brand:"COOP Jednota","brand:wikidata":"Q41629254","brand:wikipedia":"sk:COOP Jednota Slovensko",name:"COOP Jednota",shop:"convenience"},matchScore:2,suggestion:true},"shop/convenience/Circle K":{name:"Circle K",icon:"maki-shop",geometry:["point","area"],tags:{shop:"convenience","brand:wikidata":"Q3268010"},addTags:{brand:"Circle K","brand:wikidata":"Q3268010","brand:wikipedia":"en:Circle K",name:"Circle K",shop:"convenience"},removeTags:{brand:"Circle K","brand:wikidata":"Q3268010","brand:wikipedia":"en:Circle K",name:"Circle K",shop:"convenience"},matchScore:2,suggestion:true},"shop/convenience/Co-op":{name:"Co-op",icon:"maki-shop",geometry:["point","area"],tags:{shop:"convenience","brand:wikidata":"Q5440676"},addTags:{brand:"Federated Co-operatives","brand:wikidata":"Q5440676","brand:wikipedia":"en:Federated Co-operatives",name:"Co-op",shop:"convenience"},removeTags:{brand:"Federated Co-operatives","brand:wikidata":"Q5440676","brand:wikipedia":"en:Federated Co-operatives",name:"Co-op",shop:"convenience"},matchScore:2,suggestion:true},"shop/convenience/Coop Pronto":{name:"Coop Pronto",icon:"maki-shop",geometry:["point","area"],tags:{shop:"convenience","brand:wikidata":"Q1129777"},addTags:{brand:"Coop Pronto","brand:wikidata":"Q1129777","brand:wikipedia":"de:Coop Mineraloel",name:"Coop Pronto",shop:"convenience"},removeTags:{brand:"Coop Pronto","brand:wikidata":"Q1129777","brand:wikipedia":"de:Coop Mineraloel",name:"Coop Pronto",shop:"convenience"},matchScore:2,suggestion:true},"shop/convenience/FamilyMart":{name:"FamilyMart",icon:"maki-shop",geometry:["point","area"],tags:{shop:"convenience","brand:wikidata":"Q1191685"},addTags:{brand:"FamilyMart","brand:wikidata":"Q1191685","brand:wikipedia":"en:FamilyMart",name:"FamilyMart",shop:"convenience"},removeTags:{brand:"FamilyMart","brand:wikidata":"Q1191685","brand:wikipedia":"en:FamilyMart",name:"FamilyMart",shop:"convenience"},matchScore:2,suggestion:true},"shop/convenience/Four Square":{name:"Four Square",icon:"maki-shop",geometry:["point","area"],tags:{shop:"convenience","brand:wikidata":"Q5475558"},addTags:{brand:"Four Square","brand:wikidata":"Q5475558","brand:wikipedia":"en:Four Square (supermarket)",name:"Four Square",shop:"convenience"},removeTags:{brand:"Four Square","brand:wikidata":"Q5475558","brand:wikipedia":"en:Four Square (supermarket)",name:"Four Square",shop:"convenience"},matchScore:2,suggestion:true},"shop/convenience/Hasty Market":{name:"Hasty Market",icon:"maki-shop",geometry:["point","area"],tags:{shop:"convenience","brand:wikidata":"Q58022603"},addTags:{brand:"Hasty Market","brand:wikidata":"Q58022603",name:"Hasty Market",shop:"convenience"},removeTags:{brand:"Hasty Market","brand:wikidata":"Q58022603",name:"Hasty Market",shop:"convenience"},matchScore:2,suggestion:true},"shop/convenience/Intermarché Contact":{name:"Intermarché Contact",icon:"maki-shop",geometry:["point","area"],tags:{shop:"convenience","brand:wikidata":"Q3153200"},addTags:{brand:"Intermarché Contact",name:"Intermarché Contact","brand:wikidata":"Q3153200","brand:wikipedia":"fr:Intermarché",shop:"convenience"},removeTags:{brand:"Intermarché Contact",name:"Intermarché Contact","brand:wikidata":"Q3153200","brand:wikipedia":"fr:Intermarché",shop:"convenience"},matchScore:2,suggestion:true},"shop/convenience/Jacksons":{name:"Jacksons",icon:"maki-shop",geometry:["point","area"],tags:{shop:"convenience","brand:wikidata":"Q6117880"},addTags:{brand:"Jacksons","brand:wikidata":"Q6117880","brand:wikipedia":"en:Jacksons Stores",name:"Jacksons",shop:"convenience"},removeTags:{brand:"Jacksons","brand:wikidata":"Q6117880","brand:wikipedia":"en:Jacksons Stores",name:"Jacksons",shop:"convenience"},matchScore:2,suggestion:true},"shop/convenience/K-Market":{name:"K-Market",icon:"maki-shop",geometry:["point","area"],tags:{shop:"convenience","brand:wikidata":"Q11868562"},addTags:{brand:"K-Market","brand:wikidata":"Q11868562","brand:wikipedia":"fi:K-Market",name:"K-Market",shop:"convenience"},removeTags:{brand:"K-Market","brand:wikidata":"Q11868562","brand:wikipedia":"fi:K-Market",name:"K-Market",shop:"convenience"},matchScore:2,suggestion:true},"shop/convenience/Kwik Trip":{name:"Kwik Trip",icon:"maki-shop",geometry:["point","area"],tags:{shop:"convenience","brand:wikidata":"Q6450420"},addTags:{brand:"Kwik Trip","brand:wikidata":"Q6450420","brand:wikipedia":"en:Kwik Trip",name:"Kwik Trip",shop:"convenience"},removeTags:{brand:"Kwik Trip","brand:wikidata":"Q6450420","brand:wikipedia":"en:Kwik Trip",name:"Kwik Trip",shop:"convenience"},matchScore:2,suggestion:true},"shop/convenience/Lawson":{name:"Lawson",icon:"maki-shop",geometry:["point","area"],tags:{shop:"convenience","brand:wikidata":"Q1557223"},addTags:{brand:"Lawson","brand:wikidata":"Q1557223","brand:wikipedia":"en:Lawson (store)",name:"Lawson",shop:"convenience"},removeTags:{brand:"Lawson","brand:wikidata":"Q1557223","brand:wikipedia":"en:Lawson (store)",name:"Lawson",shop:"convenience"},matchScore:2,suggestion:true},"shop/convenience/Mace":{name:"Mace",icon:"maki-shop",geometry:["point","area"],tags:{shop:"convenience","brand:wikidata":"Q17089386"},addTags:{brand:"Mace","brand:wikidata":"Q17089386","brand:wikipedia":"en:Mace (shop)",name:"Mace",shop:"convenience"},removeTags:{brand:"Mace","brand:wikidata":"Q17089386","brand:wikipedia":"en:Mace (shop)",name:"Mace",shop:"convenience"},matchScore:2,suggestion:true},"shop/convenience/Marathon":{name:"Marathon",icon:"maki-shop",geometry:["point","area"],tags:{shop:"convenience","brand:wikidata":"Q458363"},addTags:{brand:"Marathon","brand:wikidata":"Q458363","brand:wikipedia":"en:Marathon Petroleum",name:"Marathon",shop:"convenience"},removeTags:{brand:"Marathon","brand:wikidata":"Q458363","brand:wikipedia":"en:Marathon Petroleum",name:"Marathon",shop:"convenience"},matchScore:2,suggestion:true},"shop/convenience/Małpka Express":{name:"Małpka Express",icon:"maki-shop",geometry:["point","area"],tags:{shop:"convenience","brand:wikidata":"Q18431946"},addTags:{brand:"Małpka Express","brand:wikidata":"Q18431946","brand:wikipedia":"en:Małpka Express",name:"Małpka Express",shop:"convenience"},removeTags:{brand:"Małpka Express","brand:wikidata":"Q18431946","brand:wikipedia":"en:Małpka Express",name:"Małpka Express",shop:"convenience"},matchScore:2,suggestion:true},"shop/convenience/McColl's":{name:"McColl's",icon:"maki-shop",geometry:["point","area"],tags:{shop:"convenience","brand:wikidata":"Q16997477"},addTags:{brand:"McColl's","brand:wikidata":"Q16997477","brand:wikipedia":"en:McColl's",name:"McColl's",shop:"convenience"},removeTags:{brand:"McColl's","brand:wikidata":"Q16997477","brand:wikipedia":"en:McColl's",name:"McColl's",shop:"convenience"},matchScore:2,suggestion:true},"shop/convenience/Migrolino":{name:"Migrolino",icon:"maki-shop",geometry:["point","area"],tags:{shop:"convenience","brand:wikidata":"Q56745088"},addTags:{brand:"Migrolino","brand:wikidata":"Q56745088","brand:wikipedia":"de:Migrolino",name:"Migrolino",shop:"convenience"},removeTags:{brand:"Migrolino","brand:wikidata":"Q56745088","brand:wikipedia":"de:Migrolino",name:"Migrolino",shop:"convenience"},matchScore:2,suggestion:true},"shop/convenience/Ministop":{name:"Ministop",icon:"maki-shop",geometry:["point","area"],tags:{shop:"convenience","brand:wikidata":"Q1038929"},addTags:{brand:"Ministop","brand:wikidata":"Q1038929","brand:wikipedia":"en:Ministop",name:"Ministop",shop:"convenience"},removeTags:{brand:"Ministop","brand:wikidata":"Q1038929","brand:wikipedia":"en:Ministop",name:"Ministop",shop:"convenience"},matchScore:2,suggestion:true},"shop/convenience/Mobil Mart":{name:"Mobil Mart",icon:"maki-shop",geometry:["point","area"],tags:{shop:"convenience","brand:wikidata":"Q3088656"},addTags:{brand:"Mobil Mart","brand:wikidata":"Q3088656","brand:wikipedia":"en:Mobil",name:"Mobil Mart",shop:"convenience"},removeTags:{brand:"Mobil Mart","brand:wikidata":"Q3088656","brand:wikipedia":"en:Mobil",name:"Mobil Mart",shop:"convenience"},matchScore:2,suggestion:true},"shop/convenience/Nisa":{name:"Nisa",icon:"maki-shop",geometry:["point","area"],tags:{shop:"convenience","brand:wikidata":"Q16999069"},addTags:{brand:"Nisa","brand:wikidata":"Q16999069","brand:wikipedia":"en:Nisa (retailer)",name:"Nisa",shop:"convenience"},removeTags:{brand:"Nisa","brand:wikidata":"Q16999069","brand:wikipedia":"en:Nisa (retailer)",name:"Nisa",shop:"convenience"},matchScore:2,suggestion:true},"shop/convenience/Nisa Local":{name:"Nisa Local",icon:"maki-shop",geometry:["point","area"],tags:{shop:"convenience","brand:wikidata":"Q16999069"},addTags:{brand:"Nisa Local","brand:wikidata":"Q16999069","brand:wikipedia":"en:Nisa (retailer)",name:"Nisa Local",shop:"convenience"},removeTags:{brand:"Nisa Local","brand:wikidata":"Q16999069","brand:wikipedia":"en:Nisa (retailer)",name:"Nisa Local",shop:"convenience"},matchScore:2,suggestion:true},"shop/convenience/OK便利商店":{name:"OK便利商店",icon:"maki-shop",geometry:["point","area"],tags:{shop:"convenience","brand:wikidata":"Q3268010"},addTags:{brand:"OK便利商店","brand:en":"Circle K","brand:wikidata":"Q3268010","brand:wikipedia":"zh:OK便利店",name:"OK便利商店","name:en":"Circle K",shop:"convenience"},removeTags:{brand:"OK便利商店","brand:en":"Circle K","brand:wikidata":"Q3268010","brand:wikipedia":"zh:OK便利店",name:"OK便利商店","name:en":"Circle K",shop:"convenience"},matchScore:2,suggestion:true},"shop/convenience/On the Run":{name:"On the Run",icon:"maki-shop",geometry:["point","area"],tags:{shop:"convenience","brand:wikidata":"Q16931259"},addTags:{brand:"On the Run","brand:wikidata":"Q16931259","brand:wikipedia":"en:On the Run (convenience store)",name:"On the Run",shop:"convenience"},removeTags:{brand:"On the Run","brand:wikidata":"Q16931259","brand:wikipedia":"en:On the Run (convenience store)",name:"On the Run",shop:"convenience"},matchScore:2,suggestion:true},"shop/convenience/Oxxo":{name:"Oxxo",icon:"maki-shop",geometry:["point","area"],tags:{shop:"convenience","brand:wikidata":"Q1342538"},addTags:{brand:"Oxxo","brand:wikidata":"Q1342538","brand:wikipedia":"es:Oxxo",name:"Oxxo",shop:"convenience"},removeTags:{brand:"Oxxo","brand:wikidata":"Q1342538","brand:wikipedia":"es:Oxxo",name:"Oxxo",shop:"convenience"},matchScore:2,suggestion:true},"shop/convenience/Petro-Canada":{name:"Petro-Canada",icon:"maki-shop",geometry:["point","area"],tags:{shop:"convenience","brand:wikidata":"Q1208279"},addTags:{brand:"Petro-Canada","brand:wikidata":"Q1208279","brand:wikipedia":"en:Petro-Canada",name:"Petro-Canada",shop:"convenience"},removeTags:{brand:"Petro-Canada","brand:wikidata":"Q1208279","brand:wikipedia":"en:Petro-Canada",name:"Petro-Canada",shop:"convenience"},matchScore:2,suggestion:true},"shop/convenience/Plaid Pantry":{name:"Plaid Pantry",icon:"maki-shop",geometry:["point","area"],tags:{shop:"convenience","brand:wikidata":"Q7200591"},addTags:{brand:"Plaid Pantry","brand:wikidata":"Q7200591","brand:wikipedia":"en:Plaid Pantry",name:"Plaid Pantry",shop:"convenience"},removeTags:{brand:"Plaid Pantry","brand:wikidata":"Q7200591","brand:wikipedia":"en:Plaid Pantry",name:"Plaid Pantry",shop:"convenience"},matchScore:2,suggestion:true},"shop/convenience/Premier":{name:"Premier",icon:"maki-shop",geometry:["point","area"],tags:{shop:"convenience","brand:wikidata":"Q7240340"},addTags:{brand:"Premier","brand:wikidata":"Q7240340","brand:wikipedia":"en:Premier Stores",name:"Premier",shop:"convenience"},removeTags:{brand:"Premier","brand:wikidata":"Q7240340","brand:wikipedia":"en:Premier Stores",name:"Premier",shop:"convenience"},matchScore:2,suggestion:true},"shop/convenience/Sainsbury's Local":{name:"Sainsbury's Local",icon:"maki-shop",geometry:["point","area"],tags:{shop:"convenience","brand:wikidata":"Q13218434"},addTags:{brand:"Sainsbury's Local","brand:wikidata":"Q13218434","brand:wikipedia":"en:Sainsbury's Local",name:"Sainsbury's Local",shop:"convenience"},removeTags:{brand:"Sainsbury's Local","brand:wikidata":"Q13218434","brand:wikipedia":"en:Sainsbury's Local",name:"Sainsbury's Local",shop:"convenience"},matchScore:2,suggestion:true},"shop/convenience/Sheetz":{name:"Sheetz",icon:"maki-shop",geometry:["point","area"],tags:{shop:"convenience","brand:wikidata":"Q7492551"},addTags:{brand:"Sheetz","brand:wikidata":"Q7492551","brand:wikipedia":"en:Sheetz",name:"Sheetz",shop:"convenience"},removeTags:{brand:"Sheetz","brand:wikidata":"Q7492551","brand:wikipedia":"en:Sheetz",name:"Sheetz",shop:"convenience"},matchScore:2,suggestion:true},"shop/convenience/Shell Select":{name:"Shell Select",icon:"maki-shop",geometry:["point","area"],tags:{shop:"convenience","brand:wikidata":"Q154950"},addTags:{brand:"Shell Select","brand:wikidata":"Q154950","brand:wikipedia":"en:Royal Dutch Shell",name:"Shell Select",shop:"convenience"},removeTags:{brand:"Shell Select","brand:wikidata":"Q154950","brand:wikipedia":"en:Royal Dutch Shell",name:"Shell Select",shop:"convenience"},matchScore:2,suggestion:true},"shop/convenience/Siwa":{name:"Siwa",icon:"maki-shop",geometry:["point","area"],tags:{shop:"convenience","brand:wikidata":"Q11893827"},addTags:{brand:"Siwa","brand:wikidata":"Q11893827",name:"Siwa",shop:"convenience"},removeTags:{brand:"Siwa","brand:wikidata":"Q11893827",name:"Siwa",shop:"convenience"},matchScore:2,suggestion:true},"shop/convenience/Spar":{name:"Spar",icon:"maki-shop",geometry:["point","area"],tags:{shop:"convenience","brand:wikidata":"Q610492"},addTags:{brand:"Spar","brand:wikidata":"Q610492","brand:wikipedia":"en:Spar (retailer)",name:"Spar",shop:"convenience"},removeTags:{brand:"Spar","brand:wikidata":"Q610492","brand:wikipedia":"en:Spar (retailer)",name:"Spar",shop:"convenience"},matchScore:2,suggestion:true},"shop/convenience/Spar Express":{name:"Spar Express",icon:"maki-shop",geometry:["point","area"],tags:{shop:"convenience","brand:wikidata":"Q610492"},addTags:{brand:"Spar","brand:wikidata":"Q610492","brand:wikipedia":"en:Spar (retailer)",name:"Spar Express",shop:"convenience"},removeTags:{brand:"Spar","brand:wikidata":"Q610492","brand:wikipedia":"en:Spar (retailer)",name:"Spar Express",shop:"convenience"},matchScore:2,suggestion:true},"shop/convenience/Speedway":{name:"Speedway",icon:"maki-shop",geometry:["point","area"],tags:{shop:"convenience","brand:wikidata":"Q7575683"},addTags:{brand:"Speedway","brand:wikidata":"Q7575683","brand:wikipedia":"en:Speedway LLC",name:"Speedway",shop:"convenience"},removeTags:{brand:"Speedway","brand:wikidata":"Q7575683","brand:wikipedia":"en:Speedway LLC",name:"Speedway",shop:"convenience"},matchScore:2,suggestion:true},"shop/convenience/Społem":{name:"Społem",icon:"maki-shop",geometry:["point","area"],tags:{shop:"convenience","brand:wikidata":"Q11826043"},addTags:{brand:"Społem","brand:wikidata":"Q11826043","brand:wikipedia":"pl:Powszechna Spółdzielnia Spożywców „Społem”",name:"Społem",shop:"convenience"},removeTags:{brand:"Społem","brand:wikidata":"Q11826043","brand:wikipedia":"pl:Powszechna Spółdzielnia Spożywców „Społem”",name:"Społem",shop:"convenience"},matchScore:2,suggestion:true},"shop/convenience/Stripes":{name:"Stripes",icon:"maki-shop",geometry:["point","area"],tags:{shop:"convenience","brand:wikidata":"Q7624135"},addTags:{brand:"Stripes","brand:wikidata":"Q7624135","brand:wikipedia":"en:Stripes Convenience Stores",name:"Stripes",shop:"convenience"},removeTags:{brand:"Stripes","brand:wikidata":"Q7624135","brand:wikipedia":"en:Stripes Convenience Stores",name:"Stripes",shop:"convenience"},matchScore:2,suggestion:true},"shop/convenience/The Co-operative Food":{name:"The Co-operative Food",icon:"maki-shop",geometry:["point","area"],tags:{shop:"convenience","brand:wikidata":"Q3277439"},addTags:{brand:"The Co-operative Food","brand:wikidata":"Q3277439","brand:wikipedia":"en:Co-op Food",name:"The Co-operative Food",shop:"convenience"},removeTags:{brand:"The Co-operative Food","brand:wikidata":"Q3277439","brand:wikipedia":"en:Co-op Food",name:"The Co-operative Food",shop:"convenience"},matchScore:2,suggestion:true},"shop/convenience/Tiger Mart":{name:"Tiger Mart",icon:"maki-shop",geometry:["point","area"],tags:{shop:"convenience","brand:wikidata":"Q57643977"},addTags:{brand:"Tiger Mart","brand:wikidata":"Q57643977",name:"Tiger Mart",shop:"convenience"},removeTags:{brand:"Tiger Mart","brand:wikidata":"Q57643977",name:"Tiger Mart",shop:"convenience"},matchScore:2,suggestion:true},"shop/convenience/United Dairy Farmers":{name:"United Dairy Farmers",icon:"maki-shop",geometry:["point","area"],tags:{shop:"convenience","brand:wikidata":"Q7887677"},addTags:{amenity:"ice_cream",brand:"United Dairy Farmers","brand:wikidata":"Q7887677","brand:wikipedia":"en:United Dairy Farmers",name:"United Dairy Farmers",shop:"convenience",short_name:"UDF"},removeTags:{amenity:"ice_cream",brand:"United Dairy Farmers","brand:wikidata":"Q7887677","brand:wikipedia":"en:United Dairy Farmers",name:"United Dairy Farmers",shop:"convenience",short_name:"UDF"},matchScore:2,suggestion:true},"shop/convenience/Utile":{name:"Utile",icon:"maki-shop",geometry:["point","area"],tags:{shop:"convenience","brand:wikidata":"Q2529029"},addTags:{brand:"Utile","brand:wikidata":"Q2529029","brand:wikipedia":"en:Système U",name:"Utile",shop:"convenience"},removeTags:{brand:"Utile","brand:wikidata":"Q2529029","brand:wikipedia":"en:Système U",name:"Utile",shop:"convenience"},matchScore:2,suggestion:true},"shop/convenience/VinMart+":{name:"VinMart+",icon:"maki-shop",geometry:["point","area"],tags:{shop:"convenience","brand:wikidata":"Q60245505"},addTags:{brand:"VinMart","brand:wikidata":"Q60245505","brand:wikipedia":"vi:VinMart",name:"VinMart+",shop:"convenience"},removeTags:{brand:"VinMart","brand:wikidata":"Q60245505","brand:wikipedia":"vi:VinMart",name:"VinMart+",shop:"convenience"},matchScore:2,suggestion:true},"shop/convenience/Wawa":{name:"Wawa",icon:"maki-shop",geometry:["point","area"],tags:{shop:"convenience","brand:wikidata":"Q5936320"},addTags:{brand:"Wawa","brand:wikidata":"Q5936320","brand:wikipedia":"en:Wawa (company)",name:"Wawa",shop:"convenience"},removeTags:{brand:"Wawa","brand:wikidata":"Q5936320","brand:wikipedia":"en:Wawa (company)",name:"Wawa",shop:"convenience"},matchScore:2,suggestion:true},"shop/convenience/Weltladen":{name:"Weltladen",icon:"maki-shop",geometry:["point","area"],tags:{shop:"convenience","brand:wikidata":"Q1640782"},addTags:{brand:"Weltladen","brand:wikidata":"Q1640782","brand:wikipedia":"de:Weltladen",name:"Weltladen",shop:"convenience"},removeTags:{brand:"Weltladen","brand:wikidata":"Q1640782","brand:wikipedia":"de:Weltladen",name:"Weltladen",shop:"convenience"},matchScore:2,suggestion:true},"shop/convenience/Woolworths Petrol":{name:"Woolworths Petrol",icon:"maki-shop",geometry:["point","area"],tags:{shop:"convenience","brand:wikidata":"Q5023980"},addTags:{brand:"Caltex","brand:wikidata":"Q5023980","brand:wikipedia":"en:Caltex Woolworths",name:"Woolworths Petrol",shop:"convenience"},removeTags:{brand:"Caltex","brand:wikidata":"Q5023980","brand:wikipedia":"en:Caltex Woolworths",name:"Woolworths Petrol",shop:"convenience"},matchScore:2,suggestion:true},"shop/convenience/abc":{name:"abc",icon:"maki-shop",geometry:["point","area"],tags:{shop:"convenience","brand:wikidata":"Q11683985"},addTags:{brand:"abc","brand:wikidata":"Q11683985","brand:wikipedia":"pl:abc (sieć handlowa)",name:"abc",shop:"convenience"},removeTags:{brand:"abc","brand:wikidata":"Q11683985","brand:wikipedia":"pl:abc (sieć handlowa)",name:"abc",shop:"convenience"},matchScore:2,suggestion:true},"shop/convenience/ampm":{name:"ampm",icon:"maki-shop",geometry:["point","area"],tags:{shop:"convenience","brand:wikidata":"Q306960"},addTags:{brand:"ampm","brand:wikidata":"Q306960","brand:wikipedia":"en:Ampm",name:"ampm",shop:"convenience"},removeTags:{brand:"ampm","brand:wikidata":"Q306960","brand:wikipedia":"en:Ampm",name:"ampm",shop:"convenience"},matchScore:2,suggestion:true},"shop/convenience/Żabka":{name:"Żabka",icon:"maki-shop",geometry:["point","area"],tags:{shop:"convenience","brand:wikidata":"Q2589061"},addTags:{brand:"Żabka","brand:wikidata":"Q2589061","brand:wikipedia":"en:Żabka (convenience store)",name:"Żabka",shop:"convenience"},removeTags:{brand:"Żabka","brand:wikidata":"Q2589061","brand:wikipedia":"en:Żabka (convenience store)",name:"Żabka",shop:"convenience"},matchScore:2,suggestion:true},"shop/convenience/ВкусВилл":{name:"ВкусВилл",icon:"maki-shop",geometry:["point","area"],tags:{shop:"convenience","brand:wikidata":"Q57271676"},addTags:{brand:"ВкусВилл","brand:wikidata":"Q57271676","brand:wikipedia":"ru:ВкусВилл",name:"ВкусВилл",shop:"convenience"},removeTags:{brand:"ВкусВилл","brand:wikidata":"Q57271676","brand:wikipedia":"ru:ВкусВилл",name:"ВкусВилл",shop:"convenience"},matchScore:2,suggestion:true},"shop/convenience/Доброном":{name:"Доброном",icon:"maki-shop",geometry:["point","area"],tags:{shop:"convenience","brand:wikidata":"Q2565040"},addTags:{brand:"Доброном","brand:wikidata":"Q2565040","brand:wikipedia":"be:Eurotorg",name:"Доброном",shop:"convenience"},removeTags:{brand:"Доброном","brand:wikidata":"Q2565040","brand:wikipedia":"be:Eurotorg",name:"Доброном",shop:"convenience"},matchScore:2,suggestion:true},"shop/convenience/Копейка":{name:"Копейка",icon:"maki-shop",geometry:["point","area"],tags:{shop:"convenience","brand:wikidata":"Q1783878"},addTags:{brand:"Копейка","brand:en":"Kopeyka","brand:wikidata":"Q1783878","brand:wikipedia":"en:Kopeyka (supermarket)",name:"Копейка","name:en":"Kopeyka",shop:"convenience"},removeTags:{brand:"Копейка","brand:en":"Kopeyka","brand:wikidata":"Q1783878","brand:wikipedia":"en:Kopeyka (supermarket)",name:"Копейка","name:en":"Kopeyka",shop:"convenience"},matchScore:2,suggestion:true},"shop/convenience/Магнит":{name:"Магнит",icon:"maki-shop",geometry:["point","area"],tags:{shop:"convenience","brand:wikidata":"Q940518"},addTags:{brand:"Магнит","brand:en":"Magnit","brand:wikidata":"Q940518","brand:wikipedia":"ru:Магнит (сеть магазинов)",name:"Магнит","name:en":"Magnit",shop:"convenience"},removeTags:{brand:"Магнит","brand:en":"Magnit","brand:wikidata":"Q940518","brand:wikipedia":"ru:Магнит (сеть магазинов)",name:"Магнит","name:en":"Magnit",shop:"convenience"},matchScore:2,suggestion:true},"shop/convenience/Сельпо":{name:"Сельпо",icon:"maki-shop",geometry:["point","area"],tags:{shop:"convenience","brand:wikidata":"Q4419434"},addTags:{brand:"Сельпо","brand:wikidata":"Q4419434","brand:wikipedia":"ru:Сильпо",name:"Сельпо",shop:"convenience"},removeTags:{brand:"Сельпо","brand:wikidata":"Q4419434","brand:wikipedia":"ru:Сильпо",name:"Сельпо",shop:"convenience"},matchScore:2,suggestion:true},"shop/convenience/サンクス":{name:"サンクス",icon:"maki-shop",geometry:["point","area"],tags:{shop:"convenience","brand:wikidata":"Q16141064"},addTags:{brand:"サンクス","brand:en":"Sunkus","brand:wikidata":"Q16141064","brand:wikipedia":"ja:サークルKサンクス",name:"サンクス","name:en":"Sunkus",shop:"convenience"},removeTags:{brand:"サンクス","brand:en":"Sunkus","brand:wikidata":"Q16141064","brand:wikipedia":"ja:サークルKサンクス",name:"サンクス","name:en":"Sunkus",shop:"convenience"},matchScore:2,suggestion:true},"shop/convenience/サークルK":{name:"サークルK",icon:"maki-shop",geometry:["point","area"],tags:{shop:"convenience","brand:wikidata":"Q3268010"},addTags:{brand:"サークルK","brand:en":"Circle K","brand:wikidata":"Q3268010","brand:wikipedia":"en:Circle K",name:"サークルK","name:en":"Circle K",shop:"convenience"},removeTags:{brand:"サークルK","brand:en":"Circle K","brand:wikidata":"Q3268010","brand:wikipedia":"en:Circle K",name:"サークルK","name:en":"Circle K",shop:"convenience"},matchScore:2,suggestion:true},"shop/convenience/スリーエフ":{name:"スリーエフ",icon:"maki-shop",geometry:["point","area"],tags:{shop:"convenience","brand:wikidata":"Q11313419"},addTags:{brand:"スリーエフ","brand:en":"Three F","brand:wikidata":"Q11313419","brand:wikipedia":"ja:スリーエフ",name:"スリーエフ","name:en":"Three F",shop:"convenience"},removeTags:{brand:"スリーエフ","brand:en":"Three F","brand:wikidata":"Q11313419","brand:wikipedia":"ja:スリーエフ",name:"スリーエフ","name:en":"Three F",shop:"convenience"},matchScore:2,suggestion:true},"shop/convenience/セイコーマート":{name:"セイコーマート",icon:"maki-shop",geometry:["point","area"],tags:{shop:"convenience","brand:wikidata":"Q11314123"},addTags:{brand:"セイコーマート","brand:en":"Seicomart","brand:wikidata":"Q11314123","brand:wikipedia":"ja:セイコーマート",name:"セイコーマート","name:en":"Seicomart",shop:"convenience"},removeTags:{brand:"セイコーマート","brand:en":"Seicomart","brand:wikidata":"Q11314123","brand:wikipedia":"ja:セイコーマート",name:"セイコーマート","name:en":"Seicomart",shop:"convenience"},matchScore:2,suggestion:true},"shop/convenience/セブン-イレブン":{name:"セブン-イレブン",icon:"maki-shop",geometry:["point","area"],tags:{shop:"convenience","brand:wikidata":"Q259340"},addTags:{brand:"セブン-イレブン","brand:en":"7-Eleven","brand:wikidata":"Q259340","brand:wikipedia":"en:7-Eleven",name:"セブン-イレブン","name:en":"7-Eleven",shop:"convenience"},removeTags:{brand:"セブン-イレブン","brand:en":"7-Eleven","brand:wikidata":"Q259340","brand:wikipedia":"en:7-Eleven",name:"セブン-イレブン","name:en":"7-Eleven",shop:"convenience"},matchScore:2,suggestion:true},"shop/convenience/セーブオン":{name:"セーブオン",icon:"maki-shop",geometry:["point","area"],tags:{shop:"convenience","brand:wikidata":"Q11314868"},addTags:{brand:"セーブオン","brand:en":"Save On","brand:wikidata":"Q11314868","brand:wikipedia":"ja:セーブオン",name:"セーブオン","name:en":"Save On",shop:"convenience"},removeTags:{brand:"セーブオン","brand:en":"Save On","brand:wikidata":"Q11314868","brand:wikipedia":"ja:セーブオン",name:"セーブオン","name:en":"Save On",shop:"convenience"},matchScore:2,suggestion:true},"shop/convenience/デイリーヤマザキ":{name:"デイリーヤマザキ",icon:"maki-shop",geometry:["point","area"],tags:{shop:"convenience","brand:wikidata":"Q5209392"},addTags:{brand:"デイリーヤマザキ","brand:en":"Daily Yamazaki","brand:wikidata":"Q5209392","brand:wikipedia":"en:Daily Yamazaki",name:"デイリーヤマザキ","name:en":"Daily Yamazaki",shop:"convenience"},removeTags:{brand:"デイリーヤマザキ","brand:en":"Daily Yamazaki","brand:wikidata":"Q5209392","brand:wikipedia":"en:Daily Yamazaki",name:"デイリーヤマザキ","name:en":"Daily Yamazaki",shop:"convenience"},matchScore:2,suggestion:true},"shop/convenience/ファミリーマート":{name:"ファミリーマート",icon:"maki-shop",geometry:["point","area"],tags:{shop:"convenience","brand:wikidata":"Q1191685"},addTags:{brand:"ファミリーマート","brand:en":"FamilyMart","brand:wikidata":"Q1191685","brand:wikipedia":"en:FamilyMart",name:"ファミリーマート","name:en":"FamilyMart",shop:"convenience"},removeTags:{brand:"ファミリーマート","brand:en":"FamilyMart","brand:wikidata":"Q1191685","brand:wikipedia":"en:FamilyMart",name:"ファミリーマート","name:en":"FamilyMart",shop:"convenience"},matchScore:2,suggestion:true},"shop/convenience/ポプラ":{name:"ポプラ",icon:"maki-shop",geometry:["point","area"],tags:{shop:"convenience","brand:wikidata":"Q7229380"},addTags:{brand:"ポプラ","brand:wikidata":"Q7229380","brand:wikipedia":"ja:ポプラ (コンビニエンスストア)",name:"ポプラ","name:en":"Poplar",shop:"convenience"},removeTags:{brand:"ポプラ","brand:wikidata":"Q7229380","brand:wikipedia":"ja:ポプラ (コンビニエンスストア)",name:"ポプラ","name:en":"Poplar",shop:"convenience"},matchScore:2,suggestion:true},"shop/convenience/ミニストップ":{name:"ミニストップ",icon:"maki-shop",geometry:["point","area"],tags:{shop:"convenience","brand:wikidata":"Q1038929"},addTags:{brand:"ミニストップ","brand:en":"Ministop","brand:wikidata":"Q1038929","brand:wikipedia":"ja:ミニストップ",name:"ミニストップ","name:en":"Ministop",shop:"convenience"},removeTags:{brand:"ミニストップ","brand:en":"Ministop","brand:wikidata":"Q1038929","brand:wikipedia":"ja:ミニストップ",name:"ミニストップ","name:en":"Ministop",shop:"convenience"},matchScore:2,suggestion:true},"shop/convenience/ヤマザキショップ":{name:"ヤマザキショップ",icon:"maki-shop",geometry:["point","area"],tags:{shop:"convenience","brand:wikidata":"Q11345131"},addTags:{brand:"ヤマザキショップ","brand:wikidata":"Q11345131","brand:wikipedia":"ja:ヤマザキショップ",name:"ヤマザキショップ","name:en":"Yamazaki Shop",shop:"convenience"},removeTags:{brand:"ヤマザキショップ","brand:wikidata":"Q11345131","brand:wikipedia":"ja:ヤマザキショップ",name:"ヤマザキショップ","name:en":"Yamazaki Shop",shop:"convenience"},matchScore:2,suggestion:true},"shop/convenience/ローソン":{name:"ローソン",icon:"maki-shop",geometry:["point","area"],tags:{shop:"convenience","brand:wikidata":"Q1557223"},addTags:{brand:"ローソン","brand:en":"LAWSON","brand:wikidata":"Q1557223","brand:wikipedia":"ja:ローソン",name:"ローソン","name:en":"Lawson",shop:"convenience"},removeTags:{brand:"ローソン","brand:en":"LAWSON","brand:wikidata":"Q1557223","brand:wikipedia":"ja:ローソン",name:"ローソン","name:en":"Lawson",shop:"convenience"},matchScore:2,suggestion:true},"shop/convenience/ローソンストア100":{name:"ローソンストア100",icon:"maki-shop",geometry:["point","area"],tags:{shop:"convenience","brand:wikidata":"Q11350960"},addTags:{brand:"ローソンストア100","brand:wikidata":"Q11350960","brand:wikipedia":"ja:ローソンストア100",name:"ローソンストア100",shop:"convenience"},removeTags:{brand:"ローソンストア100","brand:wikidata":"Q11350960","brand:wikipedia":"ja:ローソンストア100",name:"ローソンストア100",shop:"convenience"},matchScore:2,suggestion:true},"shop/convenience/全家":{name:"全家",icon:"maki-shop",geometry:["point","area"],tags:{shop:"convenience","brand:wikidata":"Q1191685"},addTags:{brand:"全家","brand:en":"FamilyMart","brand:wikidata":"Q1191685","brand:wikipedia":"en:FamilyMart",name:"全家","name:en":"FamilyMart",shop:"convenience"},removeTags:{brand:"全家","brand:en":"FamilyMart","brand:wikidata":"Q1191685","brand:wikipedia":"en:FamilyMart",name:"全家","name:en":"FamilyMart",shop:"convenience"},matchScore:2,suggestion:true},"shop/convenience/全家便利商店":{name:"全家便利商店",icon:"maki-shop",geometry:["point","area"],tags:{shop:"convenience","brand:wikidata":"Q10891564"},addTags:{brand:"全家便利商店","brand:wikidata":"Q10891564","brand:wikipedia":"zh:全家便利商店",name:"全家便利商店",shop:"convenience"},removeTags:{brand:"全家便利商店","brand:wikidata":"Q10891564","brand:wikipedia":"zh:全家便利商店",name:"全家便利商店",shop:"convenience"},matchScore:2,suggestion:true},"shop/convenience/萊爾富":{name:"萊爾富",icon:"maki-shop",geometry:["point","area"],tags:{shop:"convenience","brand:wikidata":"Q11326216"},addTags:{brand:"萊爾富","brand:wikidata":"Q11326216","brand:wikipedia":"zh:萊爾富",name:"萊爾富",shop:"convenience"},removeTags:{brand:"萊爾富","brand:wikidata":"Q11326216","brand:wikipedia":"zh:萊爾富",name:"萊爾富",shop:"convenience"},matchScore:2,suggestion:true},"shop/convenience/세븐일레븐":{name:"세븐일레븐",icon:"maki-shop",geometry:["point","area"],tags:{shop:"convenience","brand:wikidata":"Q259340"},addTags:{brand:"세븐일레븐","brand:en":"7-Eleven","brand:wikidata":"Q259340","brand:wikipedia":"en:7-Eleven",name:"세븐일레븐","name:en":"7-Eleven",shop:"convenience"},removeTags:{brand:"세븐일레븐","brand:en":"7-Eleven","brand:wikidata":"Q259340","brand:wikipedia":"en:7-Eleven",name:"세븐일레븐","name:en":"7-Eleven",shop:"convenience"},matchScore:2,suggestion:true},"shop/copyshop/FedEx Office":{name:"FedEx Office",icon:"fas-print",geometry:["point","area"],tags:{shop:"copyshop","brand:wikidata":"Q474379"},addTags:{brand:"FedEx Office","brand:wikidata":"Q474379","brand:wikipedia":"en:FedEx Office",name:"FedEx Office",shop:"copyshop"},removeTags:{brand:"FedEx Office","brand:wikidata":"Q474379","brand:wikipedia":"en:FedEx Office",name:"FedEx Office",shop:"copyshop"},matchScore:2,suggestion:true},"shop/cosmetics/KIKO Milano":{name:"KIKO Milano",icon:"maki-shop",geometry:["point","area"],tags:{shop:"cosmetics","brand:wikidata":"Q3812045"},addTags:{brand:"KIKO Milano","brand:wikidata":"Q3812045","brand:wikipedia":"it:KIKO",name:"KIKO Milano",shop:"cosmetics"},removeTags:{brand:"KIKO Milano","brand:wikidata":"Q3812045","brand:wikipedia":"it:KIKO",name:"KIKO Milano",shop:"cosmetics"},matchScore:2,suggestion:true},"shop/cosmetics/Lush":{name:"Lush",icon:"maki-shop",geometry:["point","area"],tags:{shop:"cosmetics","brand:wikidata":"Q1585448"},addTags:{brand:"Lush","brand:wikidata":"Q1585448","brand:wikipedia":"en:Lush (company)",name:"Lush",shop:"cosmetics"},removeTags:{brand:"Lush","brand:wikidata":"Q1585448","brand:wikipedia":"en:Lush (company)",name:"Lush",shop:"cosmetics"},matchScore:2,suggestion:true},"shop/cosmetics/Nocibé":{name:"Nocibé",icon:"maki-shop",geometry:["point","area"],tags:{shop:"cosmetics","brand:wikidata":"Q3342592"},addTags:{brand:"Nocibé","brand:wikidata":"Q3342592","brand:wikipedia":"fr:Nocibé",name:"Nocibé",shop:"cosmetics"},removeTags:{brand:"Nocibé","brand:wikidata":"Q3342592","brand:wikipedia":"fr:Nocibé",name:"Nocibé",shop:"cosmetics"},matchScore:2,suggestion:true},"shop/cosmetics/Origins":{name:"Origins",icon:"maki-shop",geometry:["point","area"],tags:{shop:"cosmetics","brand:wikidata":"Q6643229"},addTags:{brand:"Origins","brand:wikidata":"Q6643229","brand:wikipedia":"en:Origins (cosmetics)",name:"Origins",shop:"cosmetics"},removeTags:{brand:"Origins","brand:wikidata":"Q6643229","brand:wikipedia":"en:Origins (cosmetics)",name:"Origins",shop:"cosmetics"},matchScore:2,suggestion:true},"shop/cosmetics/Sephora":{name:"Sephora",icon:"maki-shop",geometry:["point","area"],tags:{shop:"cosmetics","brand:wikidata":"Q2408041"},addTags:{brand:"Sephora","brand:wikidata":"Q2408041","brand:wikipedia":"en:Sephora",name:"Sephora",shop:"cosmetics"},removeTags:{brand:"Sephora","brand:wikidata":"Q2408041","brand:wikipedia":"en:Sephora",name:"Sephora",shop:"cosmetics"},matchScore:2,suggestion:true},"shop/cosmetics/The Body Shop":{name:"The Body Shop",icon:"maki-shop",geometry:["point","area"],tags:{shop:"cosmetics","brand:wikidata":"Q837851"},addTags:{brand:"The Body Shop","brand:wikidata":"Q837851","brand:wikipedia":"en:The Body Shop",name:"The Body Shop",shop:"cosmetics"},removeTags:{brand:"The Body Shop","brand:wikidata":"Q837851","brand:wikipedia":"en:The Body Shop",name:"The Body Shop",shop:"cosmetics"},matchScore:2,suggestion:true},"shop/cosmetics/Л'Этуаль":{name:"Л'Этуаль",icon:"maki-shop",geometry:["point","area"],tags:{shop:"cosmetics","brand:wikidata":"Q18400706"},addTags:{brand:"Л'Этуаль","brand:wikidata":"Q18400706","brand:wikipedia":"ru:Л’Этуаль",name:"Л'Этуаль",shop:"cosmetics"},removeTags:{brand:"Л'Этуаль","brand:wikidata":"Q18400706","brand:wikipedia":"ru:Л’Этуаль",name:"Л'Этуаль",shop:"cosmetics"},matchScore:2,suggestion:true},"shop/cosmetics/Магнит Косметик":{name:"Магнит Косметик",icon:"maki-shop",geometry:["point","area"],tags:{shop:"cosmetics","brand:wikidata":"Q940518"},addTags:{brand:"Магнит Косметик","brand:en":"Magnit Cosmetics","brand:wikidata":"Q940518","brand:wikipedia":"ru:Магнит (сеть магазинов)",name:"Магнит Косметик","name:en":"Magnit Cosmetics",shop:"cosmetics"},removeTags:{brand:"Магнит Косметик","brand:en":"Magnit Cosmetics","brand:wikidata":"Q940518","brand:wikipedia":"ru:Магнит (сеть магазинов)",name:"Магнит Косметик","name:en":"Magnit Cosmetics",shop:"cosmetics"},matchScore:2,suggestion:true},"shop/country_store/Rural King":{name:"Rural King",icon:"maki-shop",geometry:["point","area"],tags:{shop:"country_store","brand:wikidata":"Q7380525"},addTags:{brand:"Rural King","brand:wikidata":"Q7380525","brand:wikipedia":"en:Rural King",name:"Rural King",shop:"country_store"},removeTags:{brand:"Rural King","brand:wikidata":"Q7380525","brand:wikipedia":"en:Rural King",name:"Rural King",shop:"country_store"},matchScore:2,suggestion:true},"shop/country_store/Tractor Supply Company":{name:"Tractor Supply Company",icon:"maki-shop",geometry:["point","area"],tags:{shop:"country_store","brand:wikidata":"Q15109925"},addTags:{brand:"Tractor Supply Company","brand:wikidata":"Q15109925","brand:wikipedia":"en:Tractor Supply Company",name:"Tractor Supply Company",shop:"country_store"},removeTags:{brand:"Tractor Supply Company","brand:wikidata":"Q15109925","brand:wikipedia":"en:Tractor Supply Company",name:"Tractor Supply Company",shop:"country_store"},matchScore:2,suggestion:true},"shop/craft/Hobby Lobby":{name:"Hobby Lobby",icon:"maki-shop",geometry:["point","area"],tags:{shop:"craft","brand:wikidata":"Q5874938"},addTags:{brand:"Hobby Lobby","brand:wikidata":"Q5874938","brand:wikipedia":"en:Hobby Lobby",name:"Hobby Lobby",shop:"craft"},removeTags:{brand:"Hobby Lobby","brand:wikidata":"Q5874938","brand:wikipedia":"en:Hobby Lobby",name:"Hobby Lobby",shop:"craft"},matchScore:2,suggestion:true},"shop/craft/Hobbycraft":{name:"Hobbycraft",icon:"maki-shop",geometry:["point","area"],tags:{shop:"craft","brand:wikidata":"Q16984508"},addTags:{brand:"Hobbycraft","brand:wikidata":"Q16984508","brand:wikipedia":"en:Hobbycraft",name:"Hobbycraft",shop:"craft"},removeTags:{brand:"Hobbycraft","brand:wikidata":"Q16984508","brand:wikipedia":"en:Hobbycraft",name:"Hobbycraft",shop:"craft"},matchScore:2,suggestion:true},"shop/craft/Jo-Ann":{name:"Jo-Ann",icon:"maki-shop",geometry:["point","area"],tags:{shop:"craft","brand:wikidata":"Q6203968"},addTags:{brand:"Jo-Ann","brand:wikidata":"Q6203968","brand:wikipedia":"en:Jo-Ann Stores",name:"Jo-Ann",shop:"craft"},removeTags:{brand:"Jo-Ann","brand:wikidata":"Q6203968","brand:wikipedia":"en:Jo-Ann Stores",name:"Jo-Ann",shop:"craft"},matchScore:2,suggestion:true},"shop/craft/Michaels":{name:"Michaels",icon:"maki-shop",geometry:["point","area"],tags:{shop:"craft","brand:wikidata":"Q6835667"},addTags:{brand:"Michaels","brand:wikidata":"Q6835667","brand:wikipedia":"en:Michaels",name:"Michaels",shop:"craft"},removeTags:{brand:"Michaels","brand:wikidata":"Q6835667","brand:wikipedia":"en:Michaels",name:"Michaels",shop:"craft"},matchScore:2,suggestion:true},"shop/department_store/Belk":{name:"Belk",icon:"maki-shop",geometry:["point","area"],tags:{shop:"department_store","brand:wikidata":"Q127428"},addTags:{brand:"Belk","brand:wikidata":"Q127428","brand:wikipedia":"en:Belk",name:"Belk",shop:"department_store"},removeTags:{brand:"Belk","brand:wikidata":"Q127428","brand:wikipedia":"en:Belk",name:"Belk",shop:"department_store"},matchScore:2,suggestion:true},"shop/department_store/Big Lots":{name:"Big Lots",icon:"maki-shop",geometry:["point","area"],tags:{shop:"department_store","brand:wikidata":"Q4905973"},addTags:{brand:"Big Lots","brand:wikidata":"Q4905973","brand:wikipedia":"en:Big Lots",name:"Big Lots",shop:"department_store"},removeTags:{brand:"Big Lots","brand:wikidata":"Q4905973","brand:wikipedia":"en:Big Lots",name:"Big Lots",shop:"department_store"},matchScore:2,suggestion:true},"shop/department_store/Big W":{name:"Big W",icon:"maki-shop",geometry:["point","area"],tags:{shop:"department_store","brand:wikidata":"Q4906646"},addTags:{brand:"Big W","brand:wikidata":"Q4906646","brand:wikipedia":"en:Big W",name:"Big W",shop:"department_store"},removeTags:{brand:"Big W","brand:wikidata":"Q4906646","brand:wikipedia":"en:Big W",name:"Big W",shop:"department_store"},matchScore:2,suggestion:true},"shop/department_store/Canadian Tire":{name:"Canadian Tire",icon:"maki-shop",geometry:["point","area"],tags:{shop:"department_store","brand:wikidata":"Q1032400"},addTags:{brand:"Canadian Tire","brand:wikidata":"Q1032400","brand:wikipedia":"en:Canadian Tire",name:"Canadian Tire",shop:"department_store"},removeTags:{brand:"Canadian Tire","brand:wikidata":"Q1032400","brand:wikipedia":"en:Canadian Tire",name:"Canadian Tire",shop:"department_store"},matchScore:2,suggestion:true},"shop/department_store/Coppel":{name:"Coppel",icon:"maki-shop",geometry:["point","area"],tags:{shop:"department_store","brand:wikidata":"Q2497795"},addTags:{brand:"Coppel","brand:wikidata":"Q2497795","brand:wikipedia":"en:Coppel",name:"Coppel",shop:"department_store"},removeTags:{brand:"Coppel","brand:wikidata":"Q2497795","brand:wikipedia":"en:Coppel",name:"Coppel",shop:"department_store"},matchScore:2,suggestion:true},"shop/department_store/Debenhams":{name:"Debenhams",icon:"maki-shop",geometry:["point","area"],tags:{shop:"department_store","brand:wikidata":"Q1181484"},addTags:{brand:"Debenhams","brand:wikidata":"Q1181484","brand:wikipedia":"en:Debenhams",name:"Debenhams",shop:"department_store"},removeTags:{brand:"Debenhams","brand:wikidata":"Q1181484","brand:wikipedia":"en:Debenhams",name:"Debenhams",shop:"department_store"},matchScore:2,suggestion:true},"shop/department_store/Dillard's":{name:"Dillard's",icon:"maki-shop",geometry:["point","area"],tags:{shop:"department_store","brand:wikidata":"Q844805"},addTags:{brand:"Dillard's","brand:wikidata":"Q844805","brand:wikipedia":"en:Dillard's",name:"Dillard's",shop:"department_store"},removeTags:{brand:"Dillard's","brand:wikidata":"Q844805","brand:wikipedia":"en:Dillard's",name:"Dillard's",shop:"department_store"},matchScore:2,suggestion:true},"shop/department_store/El Corte Inglés":{name:"El Corte Inglés",icon:"maki-shop",geometry:["point","area"],tags:{shop:"department_store","brand:wikidata":"Q623133"},addTags:{brand:"El Corte Inglés","brand:wikidata":"Q623133","brand:wikipedia":"en:El Corte Inglés",name:"El Corte Inglés",shop:"department_store"},removeTags:{brand:"El Corte Inglés","brand:wikidata":"Q623133","brand:wikipedia":"en:El Corte Inglés",name:"El Corte Inglés",shop:"department_store"},matchScore:2,suggestion:true},"shop/department_store/Falabella":{name:"Falabella",icon:"maki-shop",geometry:["point","area"],tags:{shop:"department_store","brand:wikidata":"Q5135229"},addTags:{brand:"Falabella","brand:wikidata":"Q5135229","brand:wikipedia":"en:Falabella (retail store)",name:"Falabella",shop:"department_store"},removeTags:{brand:"Falabella","brand:wikidata":"Q5135229","brand:wikipedia":"en:Falabella (retail store)",name:"Falabella",shop:"department_store"},matchScore:2,suggestion:true},"shop/department_store/Galeria Kaufhof":{name:"Galeria Kaufhof",icon:"maki-shop",geometry:["point","area"],tags:{shop:"department_store","brand:wikidata":"Q322598"},addTags:{brand:"Galeria Kaufhof","brand:wikidata":"Q322598","brand:wikipedia":"en:Galeria Kaufhof",name:"Galeria Kaufhof",shop:"department_store"},removeTags:{brand:"Galeria Kaufhof","brand:wikidata":"Q322598","brand:wikipedia":"en:Galeria Kaufhof",name:"Galeria Kaufhof",shop:"department_store"},matchScore:2,suggestion:true},"shop/department_store/Giant Tiger":{name:"Giant Tiger",icon:"maki-shop",geometry:["point","area"],tags:{shop:"department_store","brand:wikidata":"Q5558429"},addTags:{brand:"Giant Tiger","brand:wikidata":"Q5558429","brand:wikipedia":"en:Giant Tiger",name:"Giant Tiger",shop:"department_store"},removeTags:{brand:"Giant Tiger","brand:wikidata":"Q5558429","brand:wikipedia":"en:Giant Tiger",name:"Giant Tiger",shop:"department_store"},matchScore:2,suggestion:true},"shop/department_store/HEMA":{name:"HEMA",icon:"maki-shop",geometry:["point","area"],tags:{shop:"department_store","brand:wikidata":"Q903805"},addTags:{brand:"HEMA","brand:wikidata":"Q903805","brand:wikipedia":"en:HEMA (store)",name:"HEMA",shop:"department_store"},removeTags:{brand:"HEMA","brand:wikidata":"Q903805","brand:wikipedia":"en:HEMA (store)",name:"HEMA",shop:"department_store"},matchScore:2,suggestion:true},"shop/department_store/Harvey Norman":{name:"Harvey Norman",icon:"maki-shop",geometry:["point","area"],tags:{shop:"department_store","brand:wikidata":"Q4040441"},addTags:{brand:"Harvey Norman","brand:wikidata":"Q4040441","brand:wikipedia":"en:Harvey Norman",name:"Harvey Norman",shop:"department_store"},removeTags:{brand:"Harvey Norman","brand:wikidata":"Q4040441","brand:wikipedia":"en:Harvey Norman",name:"Harvey Norman",shop:"department_store"},matchScore:2,suggestion:true},"shop/department_store/JCPenney":{name:"JCPenney",icon:"maki-shop",geometry:["point","area"],tags:{shop:"department_store","brand:wikidata":"Q920037"},addTags:{brand:"JCPenney","brand:wikidata":"Q920037","brand:wikipedia":"en:J. C. Penney",name:"JCPenney",shop:"department_store"},removeTags:{brand:"JCPenney","brand:wikidata":"Q920037","brand:wikipedia":"en:J. C. Penney",name:"JCPenney",shop:"department_store"},matchScore:2,suggestion:true},"shop/department_store/Karstadt":{name:"Karstadt",icon:"maki-shop",geometry:["point","area"],tags:{shop:"department_store","brand:wikidata":"Q182910"},addTags:{brand:"Karstadt","brand:wikidata":"Q182910","brand:wikipedia":"en:Karstadt",name:"Karstadt",shop:"department_store"},removeTags:{brand:"Karstadt","brand:wikidata":"Q182910","brand:wikipedia":"en:Karstadt",name:"Karstadt",shop:"department_store"},matchScore:2,suggestion:true},"shop/department_store/Kmart (Australia)":{name:"Kmart (Australia)",icon:"maki-shop",geometry:["point","area"],tags:{shop:"department_store","brand:wikidata":"Q6421682"},addTags:{brand:"Kmart","brand:wikidata":"Q6421682","brand:wikipedia":"en:Kmart Australia",name:"Kmart",shop:"department_store"},removeTags:{brand:"Kmart","brand:wikidata":"Q6421682","brand:wikipedia":"en:Kmart Australia",name:"Kmart",shop:"department_store"},matchScore:2,suggestion:true},"shop/department_store/Kmart (USA)":{name:"Kmart (USA)",icon:"maki-shop",geometry:["point","area"],tags:{shop:"department_store","brand:wikidata":"Q1753080"},addTags:{brand:"Kmart","brand:wikidata":"Q1753080","brand:wikipedia":"en:Kmart",name:"Kmart",shop:"department_store"},removeTags:{brand:"Kmart","brand:wikidata":"Q1753080","brand:wikipedia":"en:Kmart",name:"Kmart",shop:"department_store"},matchScore:2,suggestion:true},"shop/department_store/Kohl's":{name:"Kohl's",icon:"maki-shop",geometry:["point","area"],tags:{shop:"department_store","brand:wikidata":"Q967265"},addTags:{brand:"Kohl's","brand:wikidata":"Q967265","brand:wikipedia":"en:Kohl's",name:"Kohl's",shop:"department_store"},removeTags:{brand:"Kohl's","brand:wikidata":"Q967265","brand:wikipedia":"en:Kohl's",name:"Kohl's",shop:"department_store"},matchScore:2,suggestion:true},"shop/department_store/Lojas Americanas":{name:"Lojas Americanas",icon:"maki-shop",geometry:["point","area"],tags:{shop:"department_store","brand:wikidata":"Q3064093"},addTags:{brand:"Lojas Americanas","brand:wikidata":"Q3064093","brand:wikipedia":"en:Lojas Americanas",name:"Lojas Americanas",shop:"department_store"},removeTags:{brand:"Lojas Americanas","brand:wikidata":"Q3064093","brand:wikipedia":"en:Lojas Americanas",name:"Lojas Americanas",shop:"department_store"},matchScore:2,suggestion:true},"shop/department_store/Macy's":{name:"Macy's",icon:"maki-shop",geometry:["point","area"],tags:{shop:"department_store","brand:wikidata":"Q629269"},addTags:{brand:"Macy's","brand:wikidata":"Q629269","brand:wikipedia":"en:Macy's",name:"Macy's",shop:"department_store"},removeTags:{brand:"Macy's","brand:wikidata":"Q629269","brand:wikipedia":"en:Macy's",name:"Macy's",shop:"department_store"},matchScore:2,suggestion:true},"shop/department_store/Marks & Spencer":{name:"Marks & Spencer",icon:"maki-shop",geometry:["point","area"],tags:{shop:"department_store","brand:wikidata":"Q714491"},addTags:{brand:"Marks & Spencer","brand:wikidata":"Q714491","brand:wikipedia":"en:Marks & Spencer",name:"Marks & Spencer",shop:"department_store"},removeTags:{brand:"Marks & Spencer","brand:wikidata":"Q714491","brand:wikipedia":"en:Marks & Spencer",name:"Marks & Spencer",shop:"department_store"},matchScore:2,suggestion:true},"shop/department_store/Marshalls":{name:"Marshalls",icon:"maki-shop",geometry:["point","area"],tags:{shop:"department_store","brand:wikidata":"Q15903261"},addTags:{brand:"Marshalls","brand:wikidata":"Q15903261","brand:wikipedia":"en:Marshalls",name:"Marshalls",shop:"department_store"},removeTags:{brand:"Marshalls","brand:wikidata":"Q15903261","brand:wikipedia":"en:Marshalls",name:"Marshalls",shop:"department_store"},matchScore:2,suggestion:true},"shop/department_store/Myer":{name:"Myer",icon:"maki-shop",geometry:["point","area"],tags:{shop:"department_store","brand:wikidata":"Q1110323"},addTags:{brand:"Myer","brand:wikidata":"Q1110323","brand:wikipedia":"en:Myer",name:"Myer",shop:"department_store"},removeTags:{brand:"Myer","brand:wikidata":"Q1110323","brand:wikipedia":"en:Myer",name:"Myer",shop:"department_store"},matchScore:2,suggestion:true},"shop/department_store/Neiman Marcus":{name:"Neiman Marcus",icon:"maki-shop",geometry:["point","area"],tags:{shop:"department_store","brand:wikidata":"Q743497"},addTags:{brand:"Neiman Marcus","brand:wikidata":"Q743497","brand:wikipedia":"en:Neiman Marcus",name:"Neiman Marcus",shop:"department_store"},removeTags:{brand:"Neiman Marcus","brand:wikidata":"Q743497","brand:wikipedia":"en:Neiman Marcus",name:"Neiman Marcus",shop:"department_store"},matchScore:2,suggestion:true},"shop/department_store/Nordstrom":{name:"Nordstrom",icon:"maki-shop",geometry:["point","area"],tags:{shop:"department_store","brand:wikidata":"Q174310"},addTags:{brand:"Nordstrom","brand:wikidata":"Q174310","brand:wikipedia":"en:Nordstrom",name:"Nordstrom",shop:"department_store"},removeTags:{brand:"Nordstrom","brand:wikidata":"Q174310","brand:wikipedia":"en:Nordstrom",name:"Nordstrom",shop:"department_store"},matchScore:2,suggestion:true},"shop/department_store/Ripley":{name:"Ripley",icon:"maki-shop",geometry:["point","area"],tags:{shop:"department_store","brand:wikidata":"Q3433040"},addTags:{brand:"Ripley","brand:wikidata":"Q3433040","brand:wikipedia":"en:Ripley S.A.",name:"Ripley",shop:"department_store"},removeTags:{brand:"Ripley","brand:wikidata":"Q3433040","brand:wikipedia":"en:Ripley S.A.",name:"Ripley",shop:"department_store"},matchScore:2,suggestion:true},"shop/department_store/Saks Fifth Avenue":{name:"Saks Fifth Avenue",icon:"maki-shop",geometry:["point","area"],tags:{shop:"department_store","brand:wikidata":"Q2723882"},addTags:{brand:"Saks Fifth Avenue","brand:wikidata":"Q2723882","brand:wikipedia":"en:Saks Fifth Avenue",name:"Saks Fifth Avenue",shop:"department_store"},removeTags:{brand:"Saks Fifth Avenue","brand:wikidata":"Q2723882","brand:wikipedia":"en:Saks Fifth Avenue",name:"Saks Fifth Avenue",shop:"department_store"},matchScore:2,suggestion:true},"shop/department_store/Saks Off 5th":{name:"Saks Off 5th",icon:"maki-shop",geometry:["point","area"],tags:{shop:"department_store","brand:wikidata":"Q2723882"},addTags:{brand:"Saks Off 5th","brand:wikidata":"Q2723882","brand:wikipedia":"en:Saks Fifth Avenue",name:"Saks Off 5th",shop:"department_store"},removeTags:{brand:"Saks Off 5th","brand:wikidata":"Q2723882","brand:wikipedia":"en:Saks Fifth Avenue",name:"Saks Off 5th",shop:"department_store"},matchScore:2,suggestion:true},"shop/department_store/Sears":{name:"Sears",icon:"maki-shop",geometry:["point","area"],tags:{shop:"department_store","brand:wikidata":"Q6499202"},addTags:{brand:"Sears","brand:wikidata":"Q6499202","brand:wikipedia":"en:Sears",name:"Sears",shop:"department_store"},removeTags:{brand:"Sears","brand:wikidata":"Q6499202","brand:wikipedia":"en:Sears",name:"Sears",shop:"department_store"},matchScore:2,suggestion:true},"shop/department_store/Shopko":{name:"Shopko",icon:"maki-shop",geometry:["point","area"],tags:{shop:"department_store","brand:wikidata":"Q7501155"},addTags:{brand:"Shopko","brand:wikidata":"Q7501155","brand:wikipedia":"en:Shopko",name:"Shopko",shop:"department_store"},removeTags:{brand:"Shopko","brand:wikidata":"Q7501155","brand:wikipedia":"en:Shopko",name:"Shopko",shop:"department_store"},matchScore:2,suggestion:true},"shop/department_store/Target (Australia)":{name:"Target (Australia)",icon:"maki-shop",geometry:["point","area"],tags:{shop:"department_store","brand:wikidata":"Q7685854"},addTags:{brand:"Target","brand:wikidata":"Q7685854","brand:wikipedia":"en:Target Australia",name:"Target",shop:"department_store"},removeTags:{brand:"Target","brand:wikidata":"Q7685854","brand:wikipedia":"en:Target Australia",name:"Target",shop:"department_store"},matchScore:2,suggestion:true},"shop/department_store/Target (USA)":{name:"Target (USA)",icon:"maki-shop",geometry:["point","area"],tags:{shop:"department_store","brand:wikidata":"Q1046951"},addTags:{brand:"Target","brand:wikidata":"Q1046951","brand:wikipedia":"en:Target Corporation",name:"Target",shop:"department_store"},removeTags:{brand:"Target","brand:wikidata":"Q1046951","brand:wikipedia":"en:Target Corporation",name:"Target",shop:"department_store"},matchScore:2,suggestion:true},"shop/department_store/The Warehouse":{name:"The Warehouse",icon:"maki-shop",geometry:["point","area"],tags:{shop:"department_store","brand:wikidata":"Q3566291"},addTags:{brand:"The Warehouse","brand:wikidata":"Q3566291","brand:wikipedia":"en:The Warehouse Group",name:"The Warehouse",shop:"department_store"},removeTags:{brand:"The Warehouse","brand:wikidata":"Q3566291","brand:wikipedia":"en:The Warehouse Group",name:"The Warehouse",shop:"department_store"},matchScore:2,suggestion:true},"shop/department_store/Walmart":{name:"Walmart",icon:"maki-shop",geometry:["point","area"],tags:{shop:"department_store","brand:wikidata":"Q483551"},addTags:{brand:"Walmart","brand:wikidata":"Q483551","brand:wikipedia":"en:Walmart",name:"Walmart",operator:"Walmart","operator:wikidata":"Q483551","operator:wikipedia":"en:Walmart",shop:"department_store"},removeTags:{brand:"Walmart","brand:wikidata":"Q483551","brand:wikipedia":"en:Walmart",name:"Walmart",operator:"Walmart","operator:wikidata":"Q483551","operator:wikipedia":"en:Walmart",shop:"department_store"},matchScore:2,suggestion:true},"shop/department_store/Woolworth":{name:"Woolworth",icon:"maki-shop",geometry:["point","area"],tags:{shop:"department_store","brand:wikidata":"Q183538"},addTags:{brand:"Woolworth","brand:wikidata":"Q183538","brand:wikipedia":"de:Woolworth Deutschland",name:"Woolworth",shop:"department_store"},removeTags:{brand:"Woolworth","brand:wikidata":"Q183538","brand:wikipedia":"de:Woolworth Deutschland",name:"Woolworth",shop:"department_store"},matchScore:2,suggestion:true},"shop/department_store/Åhléns":{name:"Åhléns",icon:"maki-shop",geometry:["point","area"],tags:{shop:"department_store","brand:wikidata":"Q270851"},addTags:{brand:"Åhléns","brand:wikidata":"Q270851","brand:wikipedia":"sv:Åhléns",name:"Åhléns",shop:"department_store"},removeTags:{brand:"Åhléns","brand:wikidata":"Q270851","brand:wikipedia":"sv:Åhléns",name:"Åhléns",shop:"department_store"},matchScore:2,suggestion:true},"shop/doityourself/Ace Hardware":{name:"Ace Hardware",icon:"temaki-tools",geometry:["point","area"],tags:{shop:"doityourself","brand:wikidata":"Q4672981"},addTags:{brand:"Ace Hardware","brand:wikidata":"Q4672981","brand:wikipedia":"en:Ace Hardware",name:"Ace Hardware",shop:"doityourself"},removeTags:{brand:"Ace Hardware","brand:wikidata":"Q4672981","brand:wikipedia":"en:Ace Hardware",name:"Ace Hardware",shop:"doityourself"},matchScore:2,suggestion:true},"shop/doityourself/B&Q":{name:"B&Q",icon:"temaki-tools",geometry:["point","area"],tags:{shop:"doityourself","brand:wikidata":"Q707602"},addTags:{brand:"B&Q","brand:wikidata":"Q707602","brand:wikipedia":"en:B&Q",name:"B&Q",shop:"doityourself"},removeTags:{brand:"B&Q","brand:wikidata":"Q707602","brand:wikipedia":"en:B&Q",name:"B&Q",shop:"doityourself"},matchScore:2,suggestion:true},"shop/doityourself/Bauhaus":{name:"Bauhaus",icon:"temaki-tools",geometry:["point","area"],tags:{shop:"doityourself","brand:wikidata":"Q672043"},addTags:{brand:"Bauhaus","brand:wikidata":"Q672043","brand:wikipedia":"en:Bauhaus (company)",name:"Bauhaus",shop:"doityourself"},removeTags:{brand:"Bauhaus","brand:wikidata":"Q672043","brand:wikipedia":"en:Bauhaus (company)",name:"Bauhaus",shop:"doityourself"},matchScore:2,suggestion:true},"shop/doityourself/Biltema":{name:"Biltema",icon:"temaki-tools",geometry:["point","area"],tags:{shop:"doityourself","brand:wikidata":"Q3355552"},addTags:{brand:"Biltema","brand:wikidata":"Q3355552","brand:wikipedia":"en:Biltema",name:"Biltema",shop:"doityourself"},removeTags:{brand:"Biltema","brand:wikidata":"Q3355552","brand:wikipedia":"en:Biltema",name:"Biltema",shop:"doityourself"},matchScore:2,suggestion:true},"shop/doityourself/Brico":{name:"Brico",icon:"temaki-tools",geometry:["point","area"],tags:{shop:"doityourself","brand:wikidata":"Q2510786"},addTags:{brand:"Brico","brand:wikidata":"Q2510786","brand:wikipedia":"en:Brico",name:"Brico",shop:"doityourself"},removeTags:{brand:"Brico","brand:wikidata":"Q2510786","brand:wikipedia":"en:Brico",name:"Brico",shop:"doityourself"},matchScore:2,suggestion:true},"shop/doityourself/Brico Dépôt":{name:"Brico Dépôt",icon:"temaki-tools",geometry:["point","area"],tags:{shop:"doityourself","brand:wikidata":"Q2889702"},addTags:{brand:"Brico Dépôt","brand:wikidata":"Q2889702","brand:wikipedia":"en:Brico Dépôt",name:"Brico Dépôt",shop:"doityourself"},removeTags:{brand:"Brico Dépôt","brand:wikidata":"Q2889702","brand:wikipedia":"en:Brico Dépôt",name:"Brico Dépôt",shop:"doityourself"},matchScore:2,suggestion:true},"shop/doityourself/Bricoman":{name:"Bricoman",icon:"temaki-tools",geometry:["point","area"],tags:{shop:"doityourself","brand:wikidata":"Q2925142"},addTags:{brand:"Bricoman","brand:wikidata":"Q2925142","brand:wikipedia":"it:Bricoman",name:"Bricoman",shop:"doityourself"},removeTags:{brand:"Bricoman","brand:wikidata":"Q2925142","brand:wikipedia":"it:Bricoman",name:"Bricoman",shop:"doityourself"},matchScore:2,suggestion:true},"shop/doityourself/Bricomarché":{name:"Bricomarché",icon:"temaki-tools",geometry:["point","area"],tags:{shop:"doityourself","brand:wikidata":"Q2925147"},addTags:{brand:"Bricomarché","brand:wikidata":"Q2925147","brand:wikipedia":"en:Bricomarché",name:"Bricomarché",shop:"doityourself"},removeTags:{brand:"Bricomarché","brand:wikidata":"Q2925147","brand:wikipedia":"en:Bricomarché",name:"Bricomarché",shop:"doityourself"},matchScore:2,suggestion:true},"shop/doityourself/Bricorama":{name:"Bricorama",icon:"temaki-tools",geometry:["point","area"],tags:{shop:"doityourself","brand:wikidata":"Q2925146"},addTags:{brand:"Bricorama","brand:wikidata":"Q2925146","brand:wikipedia":"en:Bricorama",name:"Bricorama",shop:"doityourself"},removeTags:{brand:"Bricorama","brand:wikidata":"Q2925146","brand:wikipedia":"en:Bricorama",name:"Bricorama",shop:"doityourself"},matchScore:2,suggestion:true},"shop/doityourself/Bunnings Warehouse":{name:"Bunnings Warehouse",icon:"temaki-tools",geometry:["point","area"],tags:{shop:"doityourself","brand:wikidata":"Q4997829"},addTags:{brand:"Bunnings Warehouse","brand:wikidata":"Q4997829","brand:wikipedia":"en:Bunnings Warehouse",name:"Bunnings Warehouse",shop:"doityourself"},removeTags:{brand:"Bunnings Warehouse","brand:wikidata":"Q4997829","brand:wikipedia":"en:Bunnings Warehouse",name:"Bunnings Warehouse",shop:"doityourself"},matchScore:2,suggestion:true},"shop/doityourself/Castorama":{name:"Castorama",icon:"temaki-tools",geometry:["point","area"],tags:{shop:"doityourself","brand:wikidata":"Q966971"},addTags:{brand:"Castorama","brand:wikidata":"Q966971","brand:wikipedia":"en:Castorama",name:"Castorama",shop:"doityourself"},removeTags:{brand:"Castorama","brand:wikidata":"Q966971","brand:wikipedia":"en:Castorama",name:"Castorama",shop:"doityourself"},matchScore:2,suggestion:true},"shop/doityourself/Clas Ohlson":{name:"Clas Ohlson",icon:"temaki-tools",geometry:["point","area"],tags:{shop:"doityourself","brand:wikidata":"Q3356220"},addTags:{brand:"Clas Ohlson","brand:wikidata":"Q3356220","brand:wikipedia":"en:Clas Ohlson",name:"Clas Ohlson",shop:"doityourself"},removeTags:{brand:"Clas Ohlson","brand:wikidata":"Q3356220","brand:wikipedia":"en:Clas Ohlson",name:"Clas Ohlson",shop:"doityourself"},matchScore:2,suggestion:true},"shop/doityourself/Easy":{name:"Easy",icon:"temaki-tools",geometry:["point","area"],tags:{shop:"doityourself","brand:wikidata":"Q5331091"},addTags:{brand:"Easy","brand:wikidata":"Q5331091","brand:wikipedia":"en:Easy (store)",name:"Easy",shop:"doityourself"},removeTags:{brand:"Easy","brand:wikidata":"Q5331091","brand:wikipedia":"en:Easy (store)",name:"Easy",shop:"doityourself"},matchScore:2,suggestion:true},"shop/doityourself/Gamma":{name:"Gamma",icon:"temaki-tools",geometry:["point","area"],tags:{shop:"doityourself","brand:wikidata":"Q2294120"},addTags:{brand:"Gamma","brand:wikidata":"Q2294120","brand:wikipedia":"en:Gamma (store)",name:"Gamma",shop:"doityourself"},removeTags:{brand:"Gamma","brand:wikidata":"Q2294120","brand:wikipedia":"en:Gamma (store)",name:"Gamma",shop:"doityourself"},matchScore:2,suggestion:true},"shop/doityourself/Globus Baumarkt":{name:"Globus Baumarkt",icon:"temaki-tools",geometry:["point","area"],tags:{shop:"doityourself","brand:wikidata":"Q457503"},addTags:{brand:"Globus Baumarkt","brand:wikidata":"Q457503","brand:wikipedia":"de:Globus Holding",name:"Globus Baumarkt",shop:"doityourself"},removeTags:{brand:"Globus Baumarkt","brand:wikidata":"Q457503","brand:wikipedia":"de:Globus Holding",name:"Globus Baumarkt",shop:"doityourself"},matchScore:2,suggestion:true},"shop/doityourself/Hagebaumarkt":{name:"Hagebaumarkt",icon:"temaki-tools",geometry:["point","area"],tags:{shop:"doityourself","brand:wikidata":"Q1568279"},addTags:{brand:"Hagebaumarkt","brand:wikidata":"Q1568279","brand:wikipedia":"de:Hagebau",name:"Hagebaumarkt",shop:"doityourself"},removeTags:{brand:"Hagebaumarkt","brand:wikidata":"Q1568279","brand:wikipedia":"de:Hagebau",name:"Hagebaumarkt",shop:"doityourself"},matchScore:2,suggestion:true},"shop/doityourself/Hammer":{name:"Hammer",icon:"temaki-tools",geometry:["point","area"],tags:{shop:"doityourself","brand:wikidata":"Q52159668"},addTags:{brand:"Hammer","brand:wikidata":"Q52159668","brand:wikipedia":"de:Hammer (Fachmarktkette)",name:"Hammer",shop:"doityourself"},removeTags:{brand:"Hammer","brand:wikidata":"Q52159668","brand:wikipedia":"de:Hammer (Fachmarktkette)",name:"Hammer",shop:"doityourself"},matchScore:2,suggestion:true},"shop/doityourself/Hellweg":{name:"Hellweg",icon:"temaki-tools",geometry:["point","area"],tags:{shop:"doityourself","brand:wikidata":"Q1603084"},addTags:{brand:"Hellweg","brand:wikidata":"Q1603084","brand:wikipedia":"de:Hellweg (Baumarkt)",name:"Hellweg",shop:"doityourself"},removeTags:{brand:"Hellweg","brand:wikidata":"Q1603084","brand:wikipedia":"de:Hellweg (Baumarkt)",name:"Hellweg",shop:"doityourself"},matchScore:2,suggestion:true},"shop/doityourself/Home Building Centre":{name:"Home Building Centre",icon:"temaki-tools",geometry:["point","area"],tags:{shop:"doityourself","brand:wikidata":"Q3139611"},addTags:{brand:"Home Hardware","brand:wikidata":"Q3139611","brand:wikipedia":"en:Home Hardware",name:"Home Building Centre",shop:"doityourself"},removeTags:{brand:"Home Hardware","brand:wikidata":"Q3139611","brand:wikipedia":"en:Home Hardware",name:"Home Building Centre",shop:"doityourself"},matchScore:2,suggestion:true},"shop/doityourself/Home Depot":{name:"Home Depot",icon:"temaki-tools",geometry:["point","area"],tags:{shop:"doityourself","brand:wikidata":"Q864407"},addTags:{brand:"Home Depot","brand:wikidata":"Q864407","brand:wikipedia":"en:The Home Depot",name:"Home Depot",shop:"doityourself"},removeTags:{brand:"Home Depot","brand:wikidata":"Q864407","brand:wikipedia":"en:The Home Depot",name:"Home Depot",shop:"doityourself"},matchScore:2,suggestion:true},"shop/doityourself/Home Hardware Building Centre":{name:"Home Hardware Building Centre",icon:"temaki-tools",geometry:["point","area"],tags:{shop:"doityourself","brand:wikidata":"Q3139611"},addTags:{brand:"Home Hardware","brand:wikidata":"Q3139611","brand:wikipedia":"en:Home Hardware",name:"Home Hardware Building Centre",shop:"doityourself"},removeTags:{brand:"Home Hardware","brand:wikidata":"Q3139611","brand:wikipedia":"en:Home Hardware",name:"Home Hardware Building Centre",shop:"doityourself"},matchScore:2,suggestion:true},"shop/doityourself/Homebase":{name:"Homebase",icon:"temaki-tools",geometry:["point","area"],tags:{shop:"doityourself","brand:wikidata":"Q9293447"},addTags:{brand:"Homebase","brand:wikidata":"Q9293447","brand:wikipedia":"en:Homebase",name:"Homebase",shop:"doityourself"},removeTags:{brand:"Homebase","brand:wikidata":"Q9293447","brand:wikipedia":"en:Homebase",name:"Homebase",shop:"doityourself"},matchScore:2,suggestion:true},"shop/doityourself/Hornbach":{name:"Hornbach",icon:"temaki-tools",geometry:["point","area"],tags:{shop:"doityourself","brand:wikidata":"Q685926"},addTags:{brand:"Hornbach","brand:wikidata":"Q685926","brand:wikipedia":"en:Hornbach (retailer)",name:"Hornbach",shop:"doityourself"},removeTags:{brand:"Hornbach","brand:wikidata":"Q685926","brand:wikipedia":"en:Hornbach (retailer)",name:"Hornbach",shop:"doityourself"},matchScore:2,suggestion:true},"shop/doityourself/Hubo":{name:"Hubo",icon:"temaki-tools",geometry:["point","area"],tags:{shop:"doityourself","brand:wikidata":"Q3142153"},addTags:{brand:"Hubo","brand:wikidata":"Q3142153","brand:wikipedia":"en:Hubo Belgium",name:"Hubo",shop:"doityourself"},removeTags:{brand:"Hubo","brand:wikidata":"Q3142153","brand:wikipedia":"en:Hubo Belgium",name:"Hubo",shop:"doityourself"},matchScore:2,suggestion:true},"shop/doityourself/Jewson":{name:"Jewson",icon:"temaki-tools",geometry:["point","area"],tags:{shop:"doityourself","brand:wikidata":"Q6190226"},addTags:{brand:"Jewson","brand:wikidata":"Q6190226","brand:wikipedia":"en:Jewson",name:"Jewson",shop:"doityourself"},removeTags:{brand:"Jewson","brand:wikidata":"Q6190226","brand:wikipedia":"en:Jewson",name:"Jewson",shop:"doityourself"},matchScore:2,suggestion:true},"shop/doityourself/Karwei":{name:"Karwei",icon:"temaki-tools",geometry:["point","area"],tags:{shop:"doityourself","brand:wikidata":"Q2097480"},addTags:{brand:"Karwei","brand:wikidata":"Q2097480","brand:wikipedia":"en:Karwei",name:"Karwei",shop:"doityourself"},removeTags:{brand:"Karwei","brand:wikidata":"Q2097480","brand:wikipedia":"en:Karwei",name:"Karwei",shop:"doityourself"},matchScore:2,suggestion:true},"shop/doityourself/Lagerhaus":{name:"Lagerhaus",icon:"temaki-tools",geometry:["point","area"],tags:{shop:"doityourself","brand:wikidata":"Q10553211"},addTags:{brand:"Lagerhaus","brand:wikidata":"Q10553211","brand:wikipedia":"sv:Lagerhaus",name:"Lagerhaus",shop:"doityourself"},removeTags:{brand:"Lagerhaus","brand:wikidata":"Q10553211","brand:wikipedia":"sv:Lagerhaus",name:"Lagerhaus",shop:"doityourself"},matchScore:2,suggestion:true},"shop/doityourself/Leroy Merlin":{name:"Leroy Merlin",icon:"temaki-tools",geometry:["point","area"],tags:{shop:"doityourself","brand:wikidata":"Q889624"},addTags:{brand:"Leroy Merlin","brand:wikidata":"Q889624","brand:wikipedia":"en:Leroy Merlin",name:"Leroy Merlin",shop:"doityourself"},removeTags:{brand:"Leroy Merlin","brand:wikidata":"Q889624","brand:wikipedia":"en:Leroy Merlin",name:"Leroy Merlin",shop:"doityourself"},matchScore:2,suggestion:true},"shop/doityourself/Lowe's":{name:"Lowe's",icon:"temaki-tools",geometry:["point","area"],tags:{shop:"doityourself","brand:wikidata":"Q1373493"},addTags:{brand:"Lowe's","brand:wikidata":"Q1373493","brand:wikipedia":"en:Lowe's",name:"Lowe's",shop:"doityourself"},removeTags:{brand:"Lowe's","brand:wikidata":"Q1373493","brand:wikipedia":"en:Lowe's",name:"Lowe's",shop:"doityourself"},matchScore:2,suggestion:true},"shop/doityourself/Menards":{name:"Menards",icon:"temaki-tools",geometry:["point","area"],tags:{shop:"doityourself","brand:wikidata":"Q1639897"},addTags:{brand:"Menards","brand:wikidata":"Q1639897","brand:wikipedia":"en:Menards",name:"Menards",shop:"doityourself"},removeTags:{brand:"Menards","brand:wikidata":"Q1639897","brand:wikipedia":"en:Menards",name:"Menards",shop:"doityourself"},matchScore:2,suggestion:true},"shop/doityourself/Mr.Bricolage":{name:"Mr.Bricolage",icon:"temaki-tools",geometry:["point","area"],tags:{shop:"doityourself","brand:wikidata":"Q3141657"},addTags:{brand:"Mr.Bricolage","brand:wikidata":"Q3141657","brand:wikipedia":"fr:Mr Bricolage",name:"Mr.Bricolage",shop:"doityourself"},removeTags:{brand:"Mr.Bricolage","brand:wikidata":"Q3141657","brand:wikipedia":"fr:Mr Bricolage",name:"Mr.Bricolage",shop:"doityourself"},matchScore:2,suggestion:true},"shop/doityourself/OBI":{name:"OBI",icon:"temaki-tools",geometry:["point","area"],tags:{shop:"doityourself","brand:wikidata":"Q300518"},addTags:{brand:"OBI","brand:wikidata":"Q300518","brand:wikipedia":"en:Obi (store)",name:"OBI",shop:"doityourself"},removeTags:{brand:"OBI","brand:wikidata":"Q300518","brand:wikipedia":"en:Obi (store)",name:"OBI",shop:"doityourself"},matchScore:2,suggestion:true},"shop/doityourself/Point P":{name:"Point P",icon:"temaki-tools",geometry:["point","area"],tags:{shop:"doityourself","brand:wikidata":"Q3393350"},addTags:{brand:"Point P","brand:wikidata":"Q3393350","brand:wikipedia":"fr:Saint-Gobain Distribution Bâtiment France",name:"Point P",shop:"doityourself"},removeTags:{brand:"Point P","brand:wikidata":"Q3393350","brand:wikipedia":"fr:Saint-Gobain Distribution Bâtiment France",name:"Point P",shop:"doityourself"},matchScore:2,suggestion:true},"shop/doityourself/Praktiker":{name:"Praktiker",icon:"temaki-tools",geometry:["point","area"],tags:{shop:"doityourself","brand:wikidata":"Q680214"},addTags:{brand:"Praktiker","brand:wikidata":"Q680214","brand:wikipedia":"en:Praktiker",name:"Praktiker",shop:"doityourself"},removeTags:{brand:"Praktiker","brand:wikidata":"Q680214","brand:wikipedia":"en:Praktiker",name:"Praktiker",shop:"doityourself"},matchScore:2,suggestion:true},"shop/doityourself/Praxis":{name:"Praxis",icon:"temaki-tools",geometry:["point","area"],tags:{shop:"doityourself","brand:wikidata":"Q2741995"},addTags:{brand:"Praxis","brand:wikidata":"Q2741995","brand:wikipedia":"nl:Praxis (winkel)",name:"Praxis",shop:"doityourself"},removeTags:{brand:"Praxis","brand:wikidata":"Q2741995","brand:wikipedia":"nl:Praxis (winkel)",name:"Praxis",shop:"doityourself"},matchScore:2,suggestion:true},"shop/doityourself/Rona":{name:"Rona",icon:"temaki-tools",geometry:["point","area"],tags:{shop:"doityourself","brand:wikidata":"Q3415283"},addTags:{brand:"Rona","brand:wikidata":"Q3415283","brand:wikipedia":"en:Rona, Inc.",name:"Rona",shop:"doityourself"},removeTags:{brand:"Rona","brand:wikidata":"Q3415283","brand:wikipedia":"en:Rona, Inc.",name:"Rona",shop:"doityourself"},matchScore:2,suggestion:true},"shop/doityourself/Screwfix":{name:"Screwfix",icon:"temaki-tools",geometry:["point","area"],tags:{shop:"doityourself","brand:wikidata":"Q7439115"},addTags:{brand:"Screwfix","brand:wikidata":"Q7439115","brand:wikipedia":"en:Screwfix",name:"Screwfix",shop:"doityourself"},removeTags:{brand:"Screwfix","brand:wikidata":"Q7439115","brand:wikipedia":"en:Screwfix",name:"Screwfix",shop:"doityourself"},matchScore:2,suggestion:true},"shop/doityourself/Sonderpreis Baumarkt":{name:"Sonderpreis Baumarkt",icon:"temaki-tools",geometry:["point","area"],tags:{shop:"doityourself","brand:wikidata":"Q811530"},addTags:{brand:"Sonderpreis Baumarkt","brand:wikidata":"Q811530","brand:wikipedia":"de:Baumarkt",name:"Sonderpreis Baumarkt",shop:"doityourself"},removeTags:{brand:"Sonderpreis Baumarkt","brand:wikidata":"Q811530","brand:wikipedia":"de:Baumarkt",name:"Sonderpreis Baumarkt",shop:"doityourself"},matchScore:2,suggestion:true},"shop/doityourself/Tekzen":{name:"Tekzen",icon:"temaki-tools",geometry:["point","area"],tags:{shop:"doityourself","brand:wikidata":"Q25475379"},addTags:{brand:"Tekzen","brand:wikidata":"Q25475379","brand:wikipedia":"tr:Tekzen",name:"Tekzen",shop:"doityourself"},removeTags:{brand:"Tekzen","brand:wikidata":"Q25475379","brand:wikipedia":"tr:Tekzen",name:"Tekzen",shop:"doityourself"},matchScore:2,suggestion:true},"shop/doityourself/Toom Baumarkt":{name:"Toom Baumarkt",icon:"temaki-tools",geometry:["point","area"],tags:{shop:"doityourself","brand:wikidata":"Q2442970"},addTags:{brand:"Toom Baumarkt","brand:wikidata":"Q2442970","brand:wikipedia":"de:Toom Baumarkt",name:"Toom Baumarkt",shop:"doityourself"},removeTags:{brand:"Toom Baumarkt","brand:wikidata":"Q2442970","brand:wikipedia":"de:Toom Baumarkt",name:"Toom Baumarkt",shop:"doityourself"},matchScore:2,suggestion:true},"shop/doityourself/Travis Perkins":{name:"Travis Perkins",icon:"temaki-tools",geometry:["point","area"],tags:{shop:"doityourself","brand:wikidata":"Q2450664"},addTags:{brand:"Travis Perkins","brand:wikidata":"Q2450664","brand:wikipedia":"en:Travis Perkins",name:"Travis Perkins",shop:"doityourself"},removeTags:{brand:"Travis Perkins","brand:wikidata":"Q2450664","brand:wikipedia":"en:Travis Perkins",name:"Travis Perkins",shop:"doityourself"},matchScore:2,suggestion:true},"shop/doityourself/Weldom":{name:"Weldom",icon:"temaki-tools",geometry:["point","area"],tags:{shop:"doityourself","brand:wikidata":"Q16683226"},addTags:{brand:"Weldom","brand:wikidata":"Q16683226","brand:wikipedia":"fr:Weldom",name:"Weldom",shop:"doityourself"},removeTags:{brand:"Weldom","brand:wikidata":"Q16683226","brand:wikipedia":"fr:Weldom",name:"Weldom",shop:"doityourself"},matchScore:2,suggestion:true},"shop/doityourself/Wickes":{name:"Wickes",icon:"temaki-tools",geometry:["point","area"],tags:{shop:"doityourself","brand:wikidata":"Q7998350"},addTags:{brand:"Wickes","brand:wikidata":"Q7998350","brand:wikipedia":"en:Wickes",name:"Wickes",shop:"doityourself"},removeTags:{brand:"Wickes","brand:wikidata":"Q7998350","brand:wikipedia":"en:Wickes",name:"Wickes",shop:"doityourself"},matchScore:2,suggestion:true},"shop/doityourself/jem & fix":{name:"jem & fix",icon:"temaki-tools",geometry:["point","area"],tags:{shop:"doityourself","brand:wikidata":"Q12319200"},addTags:{brand:"jem & fix","brand:wikidata":"Q12319200","brand:wikipedia":"da:jem & fix",name:"jem & fix",shop:"doityourself"},removeTags:{brand:"jem & fix","brand:wikidata":"Q12319200","brand:wikipedia":"da:jem & fix",name:"jem & fix",shop:"doityourself"},matchScore:2,suggestion:true},"shop/doityourself/Леруа Мерлен":{name:"Леруа Мерлен",icon:"temaki-tools",geometry:["point","area"],tags:{shop:"doityourself","brand:wikidata":"Q889624"},addTags:{brand:"Леруа Мерлен","brand:en":"Leroy Merlin","brand:wikidata":"Q889624","brand:wikipedia":"en:Leroy Merlin",name:"Леруа Мерлен","name:en":"Leroy Merlin",shop:"doityourself"},removeTags:{brand:"Леруа Мерлен","brand:en":"Leroy Merlin","brand:wikidata":"Q889624","brand:wikipedia":"en:Leroy Merlin",name:"Леруа Мерлен","name:en":"Leroy Merlin",shop:"doityourself"},matchScore:2,suggestion:true},"shop/doityourself/カインズホーム":{name:"カインズホーム",icon:"temaki-tools",geometry:["point","area"],tags:{shop:"doityourself","brand:wikidata":"Q11293852"},addTags:{brand:"カインズホーム","brand:en":"Cainz Home","brand:wikidata":"Q11293852","brand:wikipedia":"ja:カインズ",name:"カインズホーム","name:en":"Cainz Home",shop:"doityourself"},removeTags:{brand:"カインズホーム","brand:en":"Cainz Home","brand:wikidata":"Q11293852","brand:wikipedia":"ja:カインズ",name:"カインズホーム","name:en":"Cainz Home",shop:"doityourself"},matchScore:2,suggestion:true},"shop/doityourself/コメリ":{name:"コメリ",icon:"temaki-tools",geometry:["point","area"],tags:{shop:"doityourself","brand:wikidata":"Q11302690"},addTags:{brand:"コメリ","brand:wikidata":"Q11302690","brand:wikipedia":"ja:コメリ",name:"コメリ","name:en":"Komeri",shop:"doityourself"},removeTags:{brand:"コメリ","brand:wikidata":"Q11302690","brand:wikipedia":"ja:コメリ",name:"コメリ","name:en":"Komeri",shop:"doityourself"},matchScore:2,suggestion:true},"shop/doityourself/コーナン":{name:"コーナン",icon:"temaki-tools",geometry:["point","area"],tags:{shop:"doityourself","brand:wikidata":"Q11303403"},addTags:{brand:"コーナン","brand:wikidata":"Q11303403","brand:wikipedia":"ja:コーナン",name:"コーナン","name:en":"Kohnan",shop:"doityourself"},removeTags:{brand:"コーナン","brand:wikidata":"Q11303403","brand:wikipedia":"ja:コーナン",name:"コーナン","name:en":"Kohnan",shop:"doityourself"},matchScore:2,suggestion:true},"shop/dry_cleaning/ホワイト急便":{name:"ホワイト急便",icon:"maki-shop",geometry:["point","area"],tags:{shop:"dry_cleaning","brand:wikidata":"Q11505557"},addTags:{brand:"ホワイト急便","brand:en":"White Kyuubin","brand:wikidata":"Q11505557","brand:wikipedia":"ja:日本さわやかグループ",name:"ホワイト急便","name:en":"White Kyuubin",shop:"dry_cleaning"},removeTags:{brand:"ホワイト急便","brand:en":"White Kyuubin","brand:wikidata":"Q11505557","brand:wikipedia":"ja:日本さわやかグループ",name:"ホワイト急便","name:en":"White Kyuubin",shop:"dry_cleaning"},matchScore:2,suggestion:true},"shop/dry_cleaning/白洋舎":{name:"白洋舎",icon:"maki-shop",geometry:["point","area"],tags:{shop:"dry_cleaning","brand:wikidata":"Q11579995"},addTags:{brand:"白洋舎","brand:en":"Hakuyosha","brand:wikidata":"Q11579995","brand:wikipedia":"ja:白洋舎",name:"白洋舎","name:en":"Hakuyosha",shop:"dry_cleaning"},removeTags:{brand:"白洋舎","brand:en":"Hakuyosha","brand:wikidata":"Q11579995","brand:wikipedia":"ja:白洋舎",name:"白洋舎","name:en":"Hakuyosha",shop:"dry_cleaning"},matchScore:2,suggestion:true},"shop/electronics/Apple Store":{name:"Apple Store",icon:"maki-shop",geometry:["point","area"],tags:{shop:"electronics","brand:wikidata":"Q421253"},addTags:{brand:"Apple Store","brand:wikidata":"Q421253","brand:wikipedia":"en:Apple Store",name:"Apple Store",shop:"electronics"},removeTags:{brand:"Apple Store","brand:wikidata":"Q421253","brand:wikipedia":"en:Apple Store",name:"Apple Store",shop:"electronics"},matchScore:2,suggestion:true},"shop/electronics/Batteries Plus Bulbs":{name:"Batteries Plus Bulbs",icon:"maki-shop",geometry:["point","area"],tags:{shop:"electronics","brand:wikidata":"Q17005157"},addTags:{brand:"Batteries Plus Bulbs","brand:wikidata":"Q17005157",name:"Batteries Plus Bulbs",shop:"electronics"},removeTags:{brand:"Batteries Plus Bulbs","brand:wikidata":"Q17005157",name:"Batteries Plus Bulbs",shop:"electronics"},matchScore:2,suggestion:true},"shop/electronics/Best Buy":{name:"Best Buy",icon:"maki-shop",geometry:["point","area"],tags:{shop:"electronics","brand:wikidata":"Q533415"},addTags:{brand:"Best Buy","brand:wikidata":"Q533415","brand:wikipedia":"en:Best Buy",name:"Best Buy",shop:"electronics"},removeTags:{brand:"Best Buy","brand:wikidata":"Q533415","brand:wikipedia":"en:Best Buy",name:"Best Buy",shop:"electronics"},matchScore:2,suggestion:true},"shop/electronics/Boulanger":{name:"Boulanger",icon:"maki-shop",geometry:["point","area"],tags:{shop:"electronics","brand:wikidata":"Q2921695"},addTags:{brand:"Boulanger","brand:wikidata":"Q2921695","brand:wikipedia":"fr:Boulanger (entreprise)",name:"Boulanger",shop:"electronics"},removeTags:{brand:"Boulanger","brand:wikidata":"Q2921695","brand:wikipedia":"fr:Boulanger (entreprise)",name:"Boulanger",shop:"electronics"},matchScore:2,suggestion:true},"shop/electronics/CeX":{name:"CeX",icon:"maki-shop",geometry:["point","area"],tags:{shop:"electronics","brand:wikidata":"Q5055676"},addTags:{brand:"CeX","brand:wikidata":"Q5055676","brand:wikipedia":"en:CeX (company)",name:"CeX",shop:"electronics"},removeTags:{brand:"CeX","brand:wikidata":"Q5055676","brand:wikipedia":"en:CeX (company)",name:"CeX",shop:"electronics"},matchScore:2,suggestion:true},"shop/electronics/Currys":{name:"Currys",icon:"maki-shop",geometry:["point","area"],tags:{shop:"electronics","brand:wikidata":"Q3246464"},addTags:{brand:"Currys","brand:wikidata":"Q3246464","brand:wikipedia":"en:Currys",name:"Currys",shop:"electronics"},removeTags:{brand:"Currys","brand:wikidata":"Q3246464","brand:wikipedia":"en:Currys",name:"Currys",shop:"electronics"},matchScore:2,suggestion:true},"shop/electronics/Currys PC World":{name:"Currys PC World",icon:"maki-shop",geometry:["point","area"],tags:{shop:"electronics","brand:wikidata":"Q7118727"},addTags:{brand:"Currys PC World","brand:wikidata":"Q7118727","brand:wikipedia":"en:PC World (retailer)",name:"Currys PC World",shop:"electronics"},removeTags:{brand:"Currys PC World","brand:wikidata":"Q7118727","brand:wikipedia":"en:PC World (retailer)",name:"Currys PC World",shop:"electronics"},matchScore:2,suggestion:true},"shop/electronics/Darty":{name:"Darty",icon:"maki-shop",geometry:["point","area"],tags:{shop:"electronics","brand:wikidata":"Q3117381"},addTags:{brand:"Darty","brand:wikidata":"Q3117381","brand:wikipedia":"en:Groupe Fnac Darty",name:"Darty",shop:"electronics"},removeTags:{brand:"Darty","brand:wikidata":"Q3117381","brand:wikipedia":"en:Groupe Fnac Darty",name:"Darty",shop:"electronics"},matchScore:2,suggestion:true},"shop/electronics/Elgiganten":{name:"Elgiganten",icon:"maki-shop",geometry:["point","area"],tags:{shop:"electronics","brand:wikidata":"Q17050121"},addTags:{brand:"Elgiganten","brand:wikidata":"Q17050121","brand:wikipedia":"en:Elgiganten",name:"Elgiganten",shop:"electronics"},removeTags:{brand:"Elgiganten","brand:wikidata":"Q17050121","brand:wikipedia":"en:Elgiganten",name:"Elgiganten",shop:"electronics"},matchScore:2,suggestion:true},"shop/electronics/Euronics":{name:"Euronics",icon:"maki-shop",geometry:["point","area"],tags:{shop:"electronics","brand:wikidata":"Q184860"},addTags:{brand:"Euronics","brand:wikidata":"Q184860","brand:wikipedia":"en:Euronics",name:"Euronics",shop:"electronics"},removeTags:{brand:"Euronics","brand:wikidata":"Q184860","brand:wikipedia":"en:Euronics",name:"Euronics",shop:"electronics"},matchScore:2,suggestion:true},"shop/electronics/Expert":{name:"Expert",icon:"maki-shop",geometry:["point","area"],tags:{shop:"electronics","brand:wikidata":"Q680990"},addTags:{brand:"Expert","brand:wikidata":"Q680990","brand:wikipedia":"en:Expert (company)",name:"Expert",shop:"electronics"},removeTags:{brand:"Expert","brand:wikidata":"Q680990","brand:wikipedia":"en:Expert (company)",name:"Expert",shop:"electronics"},matchScore:2,suggestion:true},"shop/electronics/Hartlauer":{name:"Hartlauer",icon:"maki-shop",geometry:["point","area"],tags:{shop:"electronics","brand:wikidata":"Q1587223"},addTags:{brand:"Hartlauer","brand:wikidata":"Q1587223","brand:wikipedia":"de:Hartlauer",name:"Hartlauer",shop:"electronics"},removeTags:{brand:"Hartlauer","brand:wikidata":"Q1587223","brand:wikipedia":"de:Hartlauer",name:"Hartlauer",shop:"electronics"},matchScore:2,suggestion:true},"shop/electronics/Interdiscount":{name:"Interdiscount",icon:"maki-shop",geometry:["point","area"],tags:{shop:"electronics","brand:wikidata":"Q1665980"},addTags:{brand:"Interdiscount","brand:wikidata":"Q1665980","brand:wikipedia":"de:Interdiscount",name:"Interdiscount",shop:"electronics"},removeTags:{brand:"Interdiscount","brand:wikidata":"Q1665980","brand:wikipedia":"de:Interdiscount",name:"Interdiscount",shop:"electronics"},matchScore:2,suggestion:true},"shop/electronics/JB Hi-Fi":{name:"JB Hi-Fi",icon:"maki-shop",geometry:["point","area"],tags:{shop:"electronics","brand:wikidata":"Q3310113"},addTags:{brand:"JB Hi-Fi","brand:wikidata":"Q3310113","brand:wikipedia":"en:JB Hi-Fi",name:"JB Hi-Fi",shop:"electronics"},removeTags:{brand:"JB Hi-Fi","brand:wikidata":"Q3310113","brand:wikipedia":"en:JB Hi-Fi",name:"JB Hi-Fi",shop:"electronics"},matchScore:2,suggestion:true},"shop/electronics/Kjell & Company":{name:"Kjell & Company",icon:"maki-shop",geometry:["point","area"],tags:{shop:"electronics","brand:wikidata":"Q6419332"},addTags:{brand:"Kjell & Company","brand:wikidata":"Q6419332","brand:wikipedia":"en:Kjell & Company",name:"Kjell & Company",shop:"electronics"},removeTags:{brand:"Kjell & Company","brand:wikidata":"Q6419332","brand:wikipedia":"en:Kjell & Company",name:"Kjell & Company",shop:"electronics"},matchScore:2,suggestion:true},"shop/electronics/Komputronik":{name:"Komputronik",icon:"maki-shop",geometry:["point","area"],tags:{shop:"electronics","brand:wikidata":"Q11742085"},addTags:{brand:"Komputronik","brand:wikidata":"Q11742085","brand:wikipedia":"pl:Komputronik",name:"Komputronik",shop:"electronics"},removeTags:{brand:"Komputronik","brand:wikidata":"Q11742085","brand:wikipedia":"pl:Komputronik",name:"Komputronik",shop:"electronics"},matchScore:2,suggestion:true},"shop/electronics/La Curacao":{name:"La Curacao",icon:"maki-shop",geometry:["point","area"],tags:{shop:"electronics","brand:wikidata":"Q5194599"},addTags:{brand:"La Curacao","brand:wikidata":"Q5194599","brand:wikipedia":"en:Curacao (retail store)",name:"La Curacao",shop:"electronics"},removeTags:{brand:"La Curacao","brand:wikidata":"Q5194599","brand:wikipedia":"en:Curacao (retail store)",name:"La Curacao",shop:"electronics"},matchScore:2,suggestion:true},"shop/electronics/Maplin":{name:"Maplin",icon:"maki-shop",geometry:["point","area"],tags:{shop:"electronics","brand:wikidata":"Q6754124"},addTags:{brand:"Maplin","brand:wikidata":"Q6754124","brand:wikipedia":"en:Maplin (retailer)",name:"Maplin",shop:"electronics"},removeTags:{brand:"Maplin","brand:wikidata":"Q6754124","brand:wikipedia":"en:Maplin (retailer)",name:"Maplin",shop:"electronics"},matchScore:2,suggestion:true},"shop/electronics/Media Expert":{name:"Media Expert",icon:"maki-shop",geometry:["point","area"],tags:{shop:"electronics","brand:wikidata":"Q11776794"},addTags:{brand:"Media Expert","brand:wikidata":"Q11776794","brand:wikipedia":"pl:Media Expert",name:"Media Expert",shop:"electronics"},removeTags:{brand:"Media Expert","brand:wikidata":"Q11776794","brand:wikipedia":"pl:Media Expert",name:"Media Expert",shop:"electronics"},matchScore:2,suggestion:true},"shop/electronics/Media Markt":{name:"Media Markt",icon:"maki-shop",geometry:["point","area"],tags:{shop:"electronics","brand:wikidata":"Q2381223"},addTags:{brand:"Media Markt","brand:wikidata":"Q2381223","brand:wikipedia":"en:Media Markt",name:"Media Markt",shop:"electronics"},removeTags:{brand:"Media Markt","brand:wikidata":"Q2381223","brand:wikipedia":"en:Media Markt",name:"Media Markt",shop:"electronics"},matchScore:2,suggestion:true},"shop/electronics/Musimundo":{name:"Musimundo",icon:"maki-shop",geometry:["point","area"],tags:{shop:"electronics","brand:wikidata":"Q6034719"},addTags:{brand:"Musimundo","brand:wikidata":"Q6034719","brand:wikipedia":"es:Musimundo",name:"Musimundo",shop:"electronics"},removeTags:{brand:"Musimundo","brand:wikidata":"Q6034719","brand:wikipedia":"es:Musimundo",name:"Musimundo",shop:"electronics"},matchScore:2,suggestion:true},"shop/electronics/Neonet":{name:"Neonet",icon:"maki-shop",geometry:["point","area"],tags:{shop:"electronics","brand:wikidata":"Q11790622"},addTags:{brand:"Neonet","brand:wikidata":"Q11790622","brand:wikipedia":"pl:Neonet",name:"Neonet",shop:"electronics"},removeTags:{brand:"Neonet","brand:wikidata":"Q11790622","brand:wikipedia":"pl:Neonet",name:"Neonet",shop:"electronics"},matchScore:2,suggestion:true},"shop/electronics/RTV Euro AGD":{name:"RTV Euro AGD",icon:"maki-shop",geometry:["point","area"],tags:{shop:"electronics","brand:wikidata":"Q7277895"},addTags:{brand:"RTV Euro AGD","brand:wikidata":"Q7277895","brand:wikipedia":"en:RTV Euro AGD",name:"RTV Euro AGD",shop:"electronics"},removeTags:{brand:"RTV Euro AGD","brand:wikidata":"Q7277895","brand:wikipedia":"en:RTV Euro AGD",name:"RTV Euro AGD",shop:"electronics"},matchScore:2,suggestion:true},"shop/electronics/RadioShack":{name:"RadioShack",icon:"maki-shop",geometry:["point","area"],tags:{shop:"electronics","brand:wikidata":"Q1195490"},addTags:{brand:"RadioShack","brand:wikidata":"Q1195490","brand:wikipedia":"en:RadioShack",name:"RadioShack",shop:"electronics"},removeTags:{brand:"RadioShack","brand:wikidata":"Q1195490","brand:wikipedia":"en:RadioShack",name:"RadioShack",shop:"electronics"},matchScore:2,suggestion:true},"shop/electronics/Samsung":{name:"Samsung",icon:"maki-shop",geometry:["point","area"],tags:{shop:"electronics","brand:wikidata":"Q20718"},addTags:{brand:"Samsung","brand:wikidata":"Q20718","brand:wikipedia":"en:Samsung Electronics",name:"Samsung",shop:"electronics"},removeTags:{brand:"Samsung","brand:wikidata":"Q20718","brand:wikipedia":"en:Samsung Electronics",name:"Samsung",shop:"electronics"},matchScore:2,suggestion:true},"shop/electronics/Saturn":{name:"Saturn",icon:"maki-shop",geometry:["point","area"],tags:{shop:"electronics","brand:wikidata":"Q2543504"},addTags:{brand:"Saturn","brand:wikidata":"Q2543504","brand:wikipedia":"en:Saturn (retailer)",name:"Saturn",shop:"electronics"},removeTags:{brand:"Saturn","brand:wikidata":"Q2543504","brand:wikipedia":"en:Saturn (retailer)",name:"Saturn",shop:"electronics"},matchScore:2,suggestion:true},"shop/electronics/Sony":{name:"Sony",icon:"maki-shop",geometry:["point","area"],tags:{shop:"electronics","brand:wikidata":"Q41187"},addTags:{brand:"Sony","brand:wikidata":"Q41187","brand:wikipedia":"en:Sony",name:"Sony",shop:"electronics"},removeTags:{brand:"Sony","brand:wikidata":"Q41187","brand:wikipedia":"en:Sony",name:"Sony",shop:"electronics"},matchScore:2,suggestion:true},"shop/electronics/Teknikmagasinet":{name:"Teknikmagasinet",icon:"maki-shop",geometry:["point","area"],tags:{shop:"electronics","brand:wikidata":"Q3357520"},addTags:{brand:"Teknikmagasinet","brand:wikidata":"Q3357520","brand:wikipedia":"en:Teknikmagasinet",name:"Teknikmagasinet",shop:"electronics"},removeTags:{brand:"Teknikmagasinet","brand:wikidata":"Q3357520","brand:wikipedia":"en:Teknikmagasinet",name:"Teknikmagasinet",shop:"electronics"},matchScore:2,suggestion:true},"shop/electronics/The Source":{name:"The Source",icon:"maki-shop",geometry:["point","area"],tags:{shop:"electronics","brand:wikidata":"Q3212934"},addTags:{brand:"The Source","brand:wikidata":"Q3212934","brand:wikipedia":"en:The Source (retailer)",name:"The Source",shop:"electronics"},removeTags:{brand:"The Source","brand:wikidata":"Q3212934","brand:wikipedia":"en:The Source (retailer)",name:"The Source",shop:"electronics"},matchScore:2,suggestion:true},"shop/electronics/Unieuro":{name:"Unieuro",icon:"maki-shop",geometry:["point","area"],tags:{shop:"electronics","brand:wikidata":"Q4004687"},addTags:{brand:"Unieuro","brand:wikidata":"Q4004687","brand:wikipedia":"en:Unieuro",name:"Unieuro",shop:"electronics"},removeTags:{brand:"Unieuro","brand:wikidata":"Q4004687","brand:wikipedia":"en:Unieuro",name:"Unieuro",shop:"electronics"},matchScore:2,suggestion:true},"shop/electronics/Worten":{name:"Worten",icon:"maki-shop",geometry:["point","area"],tags:{shop:"electronics","brand:wikidata":"Q10394039"},addTags:{brand:"Worten","brand:wikidata":"Q10394039","brand:wikipedia":"pt:Worten",name:"Worten",shop:"electronics"},removeTags:{brand:"Worten","brand:wikidata":"Q10394039","brand:wikipedia":"pt:Worten",name:"Worten",shop:"electronics"},matchScore:2,suggestion:true},"shop/electronics/М.Видео":{name:"М.Видео",icon:"maki-shop",geometry:["point","area"],tags:{shop:"electronics","brand:wikidata":"Q6558800"},addTags:{brand:"М.Видео","brand:en":"M.video","brand:wikidata":"Q6558800","brand:wikipedia":"en:M.video",name:"М.Видео","name:en":"M.video",shop:"electronics"},removeTags:{brand:"М.Видео","brand:en":"M.video","brand:wikidata":"Q6558800","brand:wikipedia":"en:M.video",name:"М.Видео","name:en":"M.video",shop:"electronics"},matchScore:2,suggestion:true},"shop/electronics/Фокстрот":{name:"Фокстрот",icon:"maki-shop",geometry:["point","area"],tags:{shop:"electronics","brand:wikidata":"Q16721578"},addTags:{brand:"Фокстрот","brand:wikidata":"Q16721578","brand:wikipedia":"uk:Фокстрот (торгова мережа)",name:"Фокстрот",shop:"electronics"},removeTags:{brand:"Фокстрот","brand:wikidata":"Q16721578","brand:wikipedia":"uk:Фокстрот (торгова мережа)",name:"Фокстрот",shop:"electronics"},matchScore:2,suggestion:true},"shop/electronics/Эльдорадо":{name:"Эльдорадо",icon:"maki-shop",geometry:["point","area"],tags:{shop:"electronics","brand:wikidata":"Q4531492"},addTags:{brand:"Эльдорадо","brand:wikidata":"Q4531492","brand:wikipedia":"ru:Эльдорадо (сеть магазинов)",name:"Эльдорадо",shop:"electronics"},removeTags:{brand:"Эльдорадо","brand:wikidata":"Q4531492","brand:wikipedia":"ru:Эльдорадо (сеть магазинов)",name:"Эльдорадо",shop:"electronics"},matchScore:2,suggestion:true},"shop/electronics/エディオン":{name:"エディオン",icon:"maki-shop",geometry:["point","area"],tags:{shop:"electronics","brand:wikidata":"Q11290252"},addTags:{brand:"エディオン","brand:en":"EDION","brand:wikidata":"Q11290252","brand:wikipedia":"ja:エディオン",name:"エディオン","name:en":"EDION",shop:"electronics"},removeTags:{brand:"エディオン","brand:en":"EDION","brand:wikidata":"Q11290252","brand:wikipedia":"ja:エディオン",name:"エディオン","name:en":"EDION",shop:"electronics"},matchScore:2,suggestion:true},"shop/electronics/ケーズデンキ":{name:"ケーズデンキ",icon:"maki-shop",geometry:["point","area"],tags:{shop:"electronics","brand:wikidata":"Q6322472"},addTags:{brand:"ケーズデンキ","brand:en":"K's Denki","brand:wikidata":"Q6322472","brand:wikipedia":"ja:ケーズホールディングス",name:"ケーズデンキ","name:en":"K's Denki",shop:"electronics"},removeTags:{brand:"ケーズデンキ","brand:en":"K's Denki","brand:wikidata":"Q6322472","brand:wikipedia":"ja:ケーズホールディングス",name:"ケーズデンキ","name:en":"K's Denki",shop:"electronics"},matchScore:2,suggestion:true},"shop/electronics/コジマ":{name:"コジマ",icon:"maki-shop",geometry:["point","area"],tags:{shop:"electronics","brand:wikidata":"Q11302052"},addTags:{brand:"コジマ","brand:en":"Kojima","brand:wikidata":"Q11302052","brand:wikipedia":"ja:コジマ",name:"コジマ","name:en":"Kojima",shop:"electronics"},removeTags:{brand:"コジマ","brand:en":"Kojima","brand:wikidata":"Q11302052","brand:wikipedia":"ja:コジマ",name:"コジマ","name:en":"Kojima",shop:"electronics"},matchScore:2,suggestion:true},"shop/electronics/ヤマダ電機":{name:"ヤマダ電機",icon:"maki-shop",geometry:["point","area"],tags:{shop:"electronics","brand:wikidata":"Q1096390"},addTags:{brand:"ヤマダ電機","brand:en":"Yamada Denki","brand:wikidata":"Q1096390","brand:wikipedia":"en:Yamada Denki",name:"ヤマダ電機","name:en":"Yamada Denki",shop:"electronics"},removeTags:{brand:"ヤマダ電機","brand:en":"Yamada Denki","brand:wikidata":"Q1096390","brand:wikipedia":"en:Yamada Denki",name:"ヤマダ電機","name:en":"Yamada Denki",shop:"electronics"},matchScore:2,suggestion:true},"shop/electronics/全國電子":{name:"全國電子",icon:"maki-shop",geometry:["point","area"],tags:{shop:"electronics","brand:wikidata":"Q10891540"},addTags:{brand:"全國電子","brand:en":"E-life Mall","brand:wikidata":"Q10891540","brand:wikipedia":"zh:全國電子",name:"全國電子","name:en":"E-life Mall",shop:"electronics"},removeTags:{brand:"全國電子","brand:en":"E-life Mall","brand:wikidata":"Q10891540","brand:wikipedia":"zh:全國電子",name:"全國電子","name:en":"E-life Mall",shop:"electronics"},matchScore:2,suggestion:true},"shop/electronics/燦坤3C":{name:"燦坤3C",icon:"maki-shop",geometry:["point","area"],tags:{shop:"electronics","brand:wikidata":"Q11569285"},addTags:{brand:"燦坤3C","brand:en":"Tsannkuen 3C","brand:wikidata":"Q11569285","brand:wikipedia":"zh:燦坤",name:"燦坤3C","name:en":"Tsannkuen 3C",shop:"electronics"},removeTags:{brand:"燦坤3C","brand:en":"Tsannkuen 3C","brand:wikidata":"Q11569285","brand:wikipedia":"zh:燦坤",name:"燦坤3C","name:en":"Tsannkuen 3C",shop:"electronics"},matchScore:2,suggestion:true},"shop/erotic/Orion":{name:"Orion",icon:"maki-shop",geometry:["point","area"],tags:{shop:"erotic","brand:wikidata":"Q1609577"},addTags:{brand:"Orion","brand:wikidata":"Q1609577","brand:wikipedia":"de:Orion (Erotik)",name:"Orion",shop:"erotic"},removeTags:{brand:"Orion","brand:wikidata":"Q1609577","brand:wikipedia":"de:Orion (Erotik)",name:"Orion",shop:"erotic"},matchScore:2,suggestion:true},"shop/fabric/Mondial Tissus":{name:"Mondial Tissus",icon:"maki-shop",geometry:["point","area"],tags:{shop:"fabric","brand:wikidata":"Q17635288"},addTags:{brand:"Mondial Tissus","brand:wikidata":"Q17635288","brand:wikipedia":"fr:Mondial Tissus",name:"Mondial Tissus",shop:"fabric"},removeTags:{brand:"Mondial Tissus","brand:wikidata":"Q17635288","brand:wikipedia":"fr:Mondial Tissus",name:"Mondial Tissus",shop:"fabric"},matchScore:2,suggestion:true},"shop/florist/Blume 2000":{name:"Blume 2000",icon:"maki-florist",geometry:["point","area"],tags:{shop:"florist","brand:wikidata":"Q886166"},addTags:{brand:"Blume 2000","brand:wikidata":"Q886166","brand:wikipedia":"de:Blume 2000",name:"Blume 2000",shop:"florist"},removeTags:{brand:"Blume 2000","brand:wikidata":"Q886166","brand:wikipedia":"de:Blume 2000",name:"Blume 2000",shop:"florist"},matchScore:2,suggestion:true},"shop/florist/Blumen Risse":{name:"Blumen Risse",icon:"maki-florist",geometry:["point","area"],tags:{shop:"florist","brand:wikidata":"Q886177"},addTags:{brand:"Blumen Risse","brand:wikidata":"Q886177","brand:wikipedia":"de:Blumen Risse",name:"Blumen Risse",shop:"florist"},removeTags:{brand:"Blumen Risse","brand:wikidata":"Q886177","brand:wikipedia":"de:Blumen Risse",name:"Blumen Risse",shop:"florist"},matchScore:2,suggestion:true},"shop/florist/Interflora":{name:"Interflora",icon:"maki-florist",geometry:["point","area"],tags:{shop:"florist","brand:wikidata":"Q692179"},addTags:{brand:"Interflora","brand:wikidata":"Q692179","brand:wikipedia":"en:Interflora",name:"Interflora",shop:"florist"},removeTags:{brand:"Interflora","brand:wikidata":"Q692179","brand:wikipedia":"en:Interflora",name:"Interflora",shop:"florist"},matchScore:2,suggestion:true},"shop/florist/Monceau Fleurs":{name:"Monceau Fleurs",icon:"maki-florist",geometry:["point","area"],tags:{shop:"florist","brand:wikidata":"Q17629431"},addTags:{brand:"Monceau Fleurs","brand:wikidata":"Q17629431","brand:wikipedia":"fr:Emova Group",name:"Monceau Fleurs",shop:"florist"},removeTags:{brand:"Monceau Fleurs","brand:wikidata":"Q17629431","brand:wikipedia":"fr:Emova Group",name:"Monceau Fleurs",shop:"florist"},matchScore:2,suggestion:true},"shop/frozen_food/Picard":{name:"Picard",icon:"maki-shop",geometry:["point","area"],tags:{shop:"frozen_food","brand:wikidata":"Q3382454"},addTags:{brand:"Picard","brand:wikidata":"Q3382454","brand:wikipedia":"en:Picard Surgelés",name:"Picard",shop:"frozen_food"},removeTags:{brand:"Picard","brand:wikidata":"Q3382454","brand:wikipedia":"en:Picard Surgelés",name:"Picard",shop:"frozen_food"},matchScore:2,suggestion:true},"shop/funeral_directors/The Co-operative Funeralcare":{name:"The Co-operative Funeralcare",icon:"maki-cemetery",geometry:["point","area"],tags:{shop:"funeral_directors","brand:wikidata":"Q7726521"},addTags:{brand:"The Co-operative Funeralcare","brand:wikidata":"Q7726521","brand:wikipedia":"en:Co-op Funeralcare",name:"The Co-operative Funeralcare",shop:"funeral_directors"},removeTags:{brand:"The Co-operative Funeralcare","brand:wikidata":"Q7726521","brand:wikipedia":"en:Co-op Funeralcare",name:"The Co-operative Funeralcare",shop:"funeral_directors"},matchScore:2,suggestion:true},"shop/furniture/Aaron's":{name:"Aaron's",icon:"fas-couch",geometry:["point","area"],tags:{shop:"furniture","brand:wikidata":"Q10397787"},addTags:{brand:"Aaron's","brand:wikidata":"Q10397787","brand:wikipedia":"en:Aaron's, Inc.",name:"Aaron's",shop:"furniture"},removeTags:{brand:"Aaron's","brand:wikidata":"Q10397787","brand:wikipedia":"en:Aaron's, Inc.",name:"Aaron's",shop:"furniture"},matchScore:2,suggestion:true},"shop/furniture/Ashley HomeStore":{name:"Ashley HomeStore",icon:"fas-couch",geometry:["point","area"],tags:{shop:"furniture","brand:wikidata":"Q4805437"},addTags:{brand:"Ashley HomeStore","brand:wikidata":"Q4805437","brand:wikipedia":"en:Ashley HomeStore",name:"Ashley Furniture",shop:"furniture"},removeTags:{brand:"Ashley HomeStore","brand:wikidata":"Q4805437","brand:wikipedia":"en:Ashley HomeStore",name:"Ashley Furniture",shop:"furniture"},matchScore:2,suggestion:true},"shop/furniture/Black Red White":{name:"Black Red White",icon:"fas-couch",geometry:["point","area"],tags:{shop:"furniture","brand:wikidata":"Q4921546"},addTags:{brand:"Black Red White","brand:wikidata":"Q4921546","brand:wikipedia":"en:Black Red White",name:"Black Red White",shop:"furniture"},removeTags:{brand:"Black Red White","brand:wikidata":"Q4921546","brand:wikipedia":"en:Black Red White",name:"Black Red White",shop:"furniture"},matchScore:2,suggestion:true},"shop/furniture/Bodzio":{name:"Bodzio",icon:"fas-couch",geometry:["point","area"],tags:{shop:"furniture","brand:wikidata":"Q20034845"},addTags:{brand:"Bodzio","brand:wikidata":"Q20034845","brand:wikipedia":"pl:Fabryka Mebli Bodzio",name:"Bodzio",shop:"furniture"},removeTags:{brand:"Bodzio","brand:wikidata":"Q20034845","brand:wikipedia":"pl:Fabryka Mebli Bodzio",name:"Bodzio",shop:"furniture"},matchScore:2,suggestion:true},"shop/furniture/But":{name:"But",icon:"fas-couch",geometry:["point","area"],tags:{shop:"furniture","brand:wikidata":"Q18720442"},addTags:{brand:"But","brand:wikidata":"Q18720442","brand:wikipedia":"en:BUT (retailer)",name:"But",shop:"furniture"},removeTags:{brand:"But","brand:wikidata":"Q18720442","brand:wikipedia":"en:BUT (retailer)",name:"But",shop:"furniture"},matchScore:2,suggestion:true},"shop/furniture/Conforama":{name:"Conforama",icon:"fas-couch",geometry:["point","area"],tags:{shop:"furniture","brand:wikidata":"Q541134"},addTags:{brand:"Conforama","brand:wikidata":"Q541134","brand:wikipedia":"en:Conforama",name:"Conforama",shop:"furniture"},removeTags:{brand:"Conforama","brand:wikidata":"Q541134","brand:wikipedia":"en:Conforama",name:"Conforama",shop:"furniture"},matchScore:2,suggestion:true},"shop/furniture/Crate & Barrel":{name:"Crate & Barrel",icon:"fas-couch",geometry:["point","area"],tags:{shop:"furniture","brand:wikidata":"Q5182604"},addTags:{brand:"Crate & Barrel","brand:wikidata":"Q5182604","brand:wikipedia":"en:Crate & Barrel",name:"Crate & Barrel",shop:"furniture"},removeTags:{brand:"Crate & Barrel","brand:wikidata":"Q5182604","brand:wikipedia":"en:Crate & Barrel",name:"Crate & Barrel",shop:"furniture"},matchScore:2,suggestion:true},"shop/furniture/DFS":{name:"DFS",icon:"fas-couch",geometry:["point","area"],tags:{shop:"furniture","brand:wikidata":"Q5204927"},addTags:{brand:"DFS","brand:wikidata":"Q5204927","brand:wikipedia":"en:DFS Furniture",name:"DFS",shop:"furniture"},removeTags:{brand:"DFS","brand:wikidata":"Q5204927","brand:wikipedia":"en:DFS Furniture",name:"DFS",shop:"furniture"},matchScore:2,suggestion:true},"shop/furniture/Dänisches Bettenlager":{name:"Dänisches Bettenlager",icon:"fas-couch",geometry:["point","area"],tags:{shop:"furniture","brand:wikidata":"Q138913"},addTags:{brand:"Dänisches Bettenlager","brand:wikidata":"Q138913","brand:wikipedia":"en:Jysk (store)",name:"Dänisches Bettenlager",shop:"furniture"},removeTags:{brand:"Dänisches Bettenlager","brand:wikidata":"Q138913","brand:wikipedia":"en:Jysk (store)",name:"Dänisches Bettenlager",shop:"furniture"},matchScore:2,suggestion:true},"shop/furniture/Ethan Allen":{name:"Ethan Allen",icon:"fas-couch",geometry:["point","area"],tags:{shop:"furniture","brand:wikidata":"Q5402870"},addTags:{brand:"Ethan Allen","brand:wikidata":"Q5402870","brand:wikipedia":"en:Ethan Allen (furniture company)",name:"Ethan Allen",shop:"furniture"},removeTags:{brand:"Ethan Allen","brand:wikidata":"Q5402870","brand:wikipedia":"en:Ethan Allen (furniture company)",name:"Ethan Allen",shop:"furniture"},matchScore:2,suggestion:true},"shop/furniture/Fly":{name:"Fly",icon:"fas-couch",geometry:["point","area"],tags:{shop:"furniture","brand:wikidata":"Q1389184"},addTags:{brand:"Fly","brand:wikidata":"Q1389184","brand:wikipedia":"fr:Fly (entreprise)",name:"Fly",shop:"furniture"},removeTags:{brand:"Fly","brand:wikidata":"Q1389184","brand:wikipedia":"fr:Fly (entreprise)",name:"Fly",shop:"furniture"},matchScore:2,suggestion:true},"shop/furniture/Harveys":{name:"Harveys",icon:"fas-couch",geometry:["point","area"],tags:{shop:"furniture","brand:wikidata":"Q5677754"},addTags:{brand:"Harveys","brand:wikidata":"Q5677754","brand:wikipedia":"en:Harveys Furniture",name:"Harveys",shop:"furniture"},removeTags:{brand:"Harveys","brand:wikidata":"Q5677754","brand:wikipedia":"en:Harveys Furniture",name:"Harveys",shop:"furniture"},matchScore:2,suggestion:true},"shop/furniture/Havertys":{name:"Havertys",icon:"fas-couch",geometry:["point","area"],tags:{shop:"furniture","brand:wikidata":"Q5683881"},addTags:{brand:"Havertys","brand:wikidata":"Q5683881","brand:wikipedia":"en:Havertys",name:"Havertys",shop:"furniture"},removeTags:{brand:"Havertys","brand:wikidata":"Q5683881","brand:wikipedia":"en:Havertys",name:"Havertys",shop:"furniture"},matchScore:2,suggestion:true},"shop/furniture/IKEA":{name:"IKEA",icon:"fas-couch",geometry:["point","area"],tags:{shop:"furniture","brand:wikidata":"Q54078"},addTags:{brand:"IKEA","brand:wikidata":"Q54078","brand:wikipedia":"en:IKEA",name:"IKEA",shop:"furniture"},removeTags:{brand:"IKEA","brand:wikidata":"Q54078","brand:wikipedia":"en:IKEA",name:"IKEA",shop:"furniture"},matchScore:2,suggestion:true},"shop/furniture/JYSK":{name:"JYSK",icon:"fas-couch",geometry:["point","area"],tags:{shop:"furniture","brand:wikidata":"Q138913"},addTags:{brand:"JYSK","brand:wikidata":"Q138913","brand:wikipedia":"en:Jysk (store)",name:"JYSK",shop:"furniture"},removeTags:{brand:"JYSK","brand:wikidata":"Q138913","brand:wikipedia":"en:Jysk (store)",name:"JYSK",shop:"furniture"},matchScore:2,suggestion:true},"shop/furniture/La-Z-Boy":{name:"La-Z-Boy",icon:"fas-couch",geometry:["point","area"],tags:{shop:"furniture","brand:wikidata":"Q6391583"},addTags:{brand:"La-Z-Boy","brand:wikidata":"Q6391583","brand:wikipedia":"en:La-Z-Boy",name:"La-Z-Boy",shop:"furniture"},removeTags:{brand:"La-Z-Boy","brand:wikidata":"Q6391583","brand:wikipedia":"en:La-Z-Boy",name:"La-Z-Boy",shop:"furniture"},matchScore:2,suggestion:true},"shop/furniture/Rent-A-Center":{name:"Rent-A-Center",icon:"fas-couch",geometry:["point","area"],tags:{shop:"furniture","brand:wikidata":"Q7313497"},addTags:{brand:"Rent-A-Center","brand:wikidata":"Q7313497","brand:wikipedia":"en:Rent-A-Center",name:"Rent-A-Center",shop:"furniture"},removeTags:{brand:"Rent-A-Center","brand:wikidata":"Q7313497","brand:wikipedia":"en:Rent-A-Center",name:"Rent-A-Center",shop:"furniture"},matchScore:2,suggestion:true},"shop/furniture/Restoration Hardware":{name:"Restoration Hardware",icon:"fas-couch",geometry:["point","area"],tags:{shop:"furniture","brand:wikidata":"Q7316207"},addTags:{brand:"Restoration Hardware","brand:wikidata":"Q7316207","brand:wikipedia":"en:Restoration Hardware",name:"Restoration Hardware",shop:"furniture"},removeTags:{brand:"Restoration Hardware","brand:wikidata":"Q7316207","brand:wikipedia":"en:Restoration Hardware",name:"Restoration Hardware",shop:"furniture"},matchScore:2,suggestion:true},"shop/furniture/Roller":{name:"Roller",icon:"fas-couch",geometry:["point","area"],tags:{shop:"furniture","brand:wikidata":"Q1621286"},addTags:{brand:"Roller","brand:wikidata":"Q1621286","brand:wikipedia":"de:Roller (Möbelhaus)",name:"Roller",shop:"furniture"},removeTags:{brand:"Roller","brand:wikidata":"Q1621286","brand:wikipedia":"de:Roller (Möbelhaus)",name:"Roller",shop:"furniture"},matchScore:2,suggestion:true},"shop/furniture/Rooms To Go":{name:"Rooms To Go",icon:"fas-couch",geometry:["point","area"],tags:{shop:"furniture","brand:wikidata":"Q7366329"},addTags:{brand:"Rooms To Go","brand:wikidata":"Q7366329","brand:wikipedia":"en:Rooms To Go",name:"Rooms To Go",shop:"furniture"},removeTags:{brand:"Rooms To Go","brand:wikidata":"Q7366329","brand:wikipedia":"en:Rooms To Go",name:"Rooms To Go",shop:"furniture"},matchScore:2,suggestion:true},"shop/furniture/ScS":{name:"ScS",icon:"fas-couch",geometry:["point","area"],tags:{shop:"furniture","brand:wikidata":"Q19654399"},addTags:{brand:"ScS","brand:wikidata":"Q19654399","brand:wikipedia":"en:ScS",name:"ScS",shop:"furniture"},removeTags:{brand:"ScS","brand:wikidata":"Q19654399","brand:wikipedia":"en:ScS",name:"ScS",shop:"furniture"},matchScore:2,suggestion:true},"shop/furniture/The Brick":{name:"The Brick",icon:"fas-couch",geometry:["point","area"],tags:{shop:"furniture","brand:wikidata":"Q7720000"},addTags:{brand:"The Brick","brand:wikidata":"Q7720000","brand:wikipedia":"en:The Brick",name:"The Brick",shop:"furniture"},removeTags:{brand:"The Brick","brand:wikidata":"Q7720000","brand:wikipedia":"en:The Brick",name:"The Brick",shop:"furniture"},matchScore:2,suggestion:true},"shop/furniture/ニトリ":{name:"ニトリ",icon:"fas-couch",geometry:["point","area"],tags:{shop:"furniture","brand:wikidata":"Q10801453"},addTags:{brand:"ニトリ","brand:en":"Nitori","brand:wikidata":"Q10801453","brand:wikipedia":"en:Nitori",name:"ニトリ","name:en":"Nitori",shop:"furniture"},removeTags:{brand:"ニトリ","brand:en":"Nitori","brand:wikidata":"Q10801453","brand:wikipedia":"en:Nitori",name:"ニトリ","name:en":"Nitori",shop:"furniture"},matchScore:2,suggestion:true},"shop/garden_centre/Dehner":{name:"Dehner",icon:"maki-garden-centre",geometry:["point","area"],tags:{shop:"garden_centre","brand:wikidata":"Q1183029"},addTags:{brand:"Dehner","brand:wikidata":"Q1183029","brand:wikipedia":"de:Dehner",name:"Dehner",shop:"garden_centre"},removeTags:{brand:"Dehner","brand:wikidata":"Q1183029","brand:wikipedia":"de:Dehner",name:"Dehner",shop:"garden_centre"},matchScore:2,suggestion:true},"shop/garden_centre/Gamm Vert":{name:"Gamm Vert",icon:"maki-garden-centre",geometry:["point","area"],tags:{shop:"garden_centre","brand:wikidata":"Q3095006"},addTags:{brand:"Gamm Vert","brand:wikidata":"Q3095006","brand:wikipedia":"fr:Gamm Vert",name:"Gamm Vert",shop:"garden_centre"},removeTags:{brand:"Gamm Vert","brand:wikidata":"Q3095006","brand:wikipedia":"fr:Gamm Vert",name:"Gamm Vert",shop:"garden_centre"},matchScore:2,suggestion:true},"shop/garden_centre/Jardiland":{name:"Jardiland",icon:"maki-garden-centre",geometry:["point","area"],tags:{shop:"garden_centre","brand:wikidata":"Q3162276"},addTags:{brand:"Jardiland","brand:wikidata":"Q3162276","brand:wikipedia":"fr:Jardiland",name:"Jardiland",shop:"garden_centre"},removeTags:{brand:"Jardiland","brand:wikidata":"Q3162276","brand:wikipedia":"fr:Jardiland",name:"Jardiland",shop:"garden_centre"},matchScore:2,suggestion:true},"shop/garden_centre/Point Vert":{name:"Point Vert",icon:"maki-garden-centre",geometry:["point","area"],tags:{shop:"garden_centre","brand:wikidata":"Q16661975"},addTags:{brand:"Point Vert","brand:wikidata":"Q16661975","brand:wikipedia":"fr:Magasin vert",name:"Point Vert",shop:"garden_centre"},removeTags:{brand:"Point Vert","brand:wikidata":"Q16661975","brand:wikipedia":"fr:Magasin vert",name:"Point Vert",shop:"garden_centre"},matchScore:2,suggestion:true},"shop/gift/Card Factory":{name:"Card Factory",icon:"maki-gift",geometry:["point","area"],tags:{shop:"gift","brand:wikidata":"Q5038192"},addTags:{brand:"Card Factory","brand:wikidata":"Q5038192","brand:wikipedia":"en:Card Factory",name:"Card Factory",shop:"gift"},removeTags:{brand:"Card Factory","brand:wikidata":"Q5038192","brand:wikipedia":"en:Card Factory",name:"Card Factory",shop:"gift"},matchScore:2,suggestion:true},"shop/gift/Hallmark":{name:"Hallmark",icon:"maki-gift",geometry:["point","area"],tags:{shop:"gift","brand:wikidata":"Q1521910"},addTags:{brand:"Hallmark","brand:wikidata":"Q1521910","brand:wikipedia":"en:Hallmark Cards",name:"Hallmark",shop:"gift"},removeTags:{brand:"Hallmark","brand:wikidata":"Q1521910","brand:wikipedia":"en:Hallmark Cards",name:"Hallmark",shop:"gift"},matchScore:2,suggestion:true},"shop/gift/Nanu-Nana":{name:"Nanu-Nana",icon:"maki-gift",geometry:["point","area"],tags:{shop:"gift","brand:wikidata":"Q1720245"},addTags:{brand:"Nanu-Nana","brand:wikidata":"Q1720245","brand:wikipedia":"de:Nanu-Nana",name:"Nanu-Nana",shop:"gift"},removeTags:{brand:"Nanu-Nana","brand:wikidata":"Q1720245","brand:wikipedia":"de:Nanu-Nana",name:"Nanu-Nana",shop:"gift"},matchScore:2,suggestion:true},"shop/greengrocer/Produce Junction":{name:"Produce Junction",icon:"maki-shop",geometry:["point","area"],tags:{shop:"greengrocer","brand:wikidata":"Q60583541"},addTags:{brand:"Produce Junction","brand:wikidata":"Q60583541",name:"Produce Junction",shop:"greengrocer"},removeTags:{brand:"Produce Junction","brand:wikidata":"Q60583541",name:"Produce Junction",shop:"greengrocer"},matchScore:2,suggestion:true},"shop/hairdresser_supply/Sally Beauty Supply":{name:"Sally Beauty Supply",icon:"maki-shop",geometry:["point","area"],tags:{shop:"hairdresser_supply","brand:wikidata":"Q7405065"},addTags:{brand:"Sally Beauty Supply","brand:wikidata":"Q7405065","brand:wikipedia":"en:Sally Beauty Holdings",name:"Sally Beauty Supply",shop:"hairdresser_supply"},removeTags:{brand:"Sally Beauty Supply","brand:wikidata":"Q7405065","brand:wikipedia":"en:Sally Beauty Holdings",name:"Sally Beauty Supply",shop:"hairdresser_supply"},matchScore:2,suggestion:true},"shop/hairdresser/Fantastic Sams":{name:"Fantastic Sams",icon:"temaki-beauty_salon",geometry:["point","area"],tags:{shop:"hairdresser","brand:wikidata":"Q5434222"},addTags:{brand:"Fantastic Sams","brand:wikidata":"Q5434222","brand:wikipedia":"en:Fantastic Sams",name:"Fantastic Sams",shop:"hairdresser"},removeTags:{brand:"Fantastic Sams","brand:wikidata":"Q5434222","brand:wikipedia":"en:Fantastic Sams",name:"Fantastic Sams",shop:"hairdresser"},matchScore:2,suggestion:true},"shop/hairdresser/First Choice Haircutters":{name:"First Choice Haircutters",icon:"temaki-beauty_salon",geometry:["point","area"],tags:{shop:"hairdresser","brand:wikidata":"Q5452622"},addTags:{brand:"First Choice Haircutters","brand:wikidata":"Q5452622","brand:wikipedia":"en:First Choice Haircutters",name:"First Choice Haircutters",shop:"hairdresser"},removeTags:{brand:"First Choice Haircutters","brand:wikidata":"Q5452622","brand:wikipedia":"en:First Choice Haircutters",name:"First Choice Haircutters",shop:"hairdresser"},matchScore:2,suggestion:true},"shop/hairdresser/Great Clips":{name:"Great Clips",icon:"temaki-beauty_salon",geometry:["point","area"],tags:{shop:"hairdresser","brand:wikidata":"Q5598967"},addTags:{brand:"Great Clips","brand:wikidata":"Q5598967","brand:wikipedia":"en:Great Clips",name:"Great Clips",shop:"hairdresser"},removeTags:{brand:"Great Clips","brand:wikidata":"Q5598967","brand:wikipedia":"en:Great Clips",name:"Great Clips",shop:"hairdresser"},matchScore:2,suggestion:true},"shop/hairdresser/Hair Cuttery":{name:"Hair Cuttery",icon:"temaki-beauty_salon",geometry:["point","area"],tags:{shop:"hairdresser","brand:wikidata":"Q5639484"},addTags:{brand:"Hair Cuttery","brand:wikidata":"Q5639484","brand:wikipedia":"en:Hair Cuttery",name:"Hair Cuttery",shop:"hairdresser"},removeTags:{brand:"Hair Cuttery","brand:wikidata":"Q5639484","brand:wikipedia":"en:Hair Cuttery",name:"Hair Cuttery",shop:"hairdresser"},matchScore:2,suggestion:true},"shop/hairdresser/Hair Express":{name:"Hair Express",icon:"temaki-beauty_salon",geometry:["point","area"],tags:{shop:"hairdresser","brand:wikidata":"Q57550814"},addTags:{brand:"Hair Express","brand:wikidata":"Q57550814",name:"Hair Express",shop:"hairdresser"},removeTags:{brand:"Hair Express","brand:wikidata":"Q57550814",name:"Hair Express",shop:"hairdresser"},matchScore:2,suggestion:true},"shop/hairdresser/Hairkiller":{name:"Hairkiller",icon:"temaki-beauty_salon",geometry:["point","area"],tags:{shop:"hairdresser","brand:wikidata":"Q58305998"},addTags:{brand:"Hairkiller","brand:wikidata":"Q58305998",name:"Hairkiller",shop:"hairdresser"},removeTags:{brand:"Hairkiller","brand:wikidata":"Q58305998",name:"Hairkiller",shop:"hairdresser"},matchScore:2,suggestion:true},"shop/hairdresser/Klier":{name:"Klier",icon:"temaki-beauty_salon",geometry:["point","area"],tags:{shop:"hairdresser","brand:wikidata":"Q1465159"},addTags:{brand:"Klier","brand:wikidata":"Q1465159","brand:wikipedia":"de:Frisör Klier",name:"Klier",shop:"hairdresser"},removeTags:{brand:"Klier","brand:wikidata":"Q1465159","brand:wikipedia":"de:Frisör Klier",name:"Klier",shop:"hairdresser"},matchScore:2,suggestion:true},"shop/hairdresser/Klipp":{name:"Klipp",icon:"temaki-beauty_salon",geometry:["point","area"],tags:{shop:"hairdresser","brand:wikidata":"Q1737304"},addTags:{brand:"Klipp","brand:wikidata":"Q1737304","brand:wikipedia":"de:Klipp Frisör",name:"Klipp",shop:"hairdresser"},removeTags:{brand:"Klipp","brand:wikidata":"Q1737304","brand:wikipedia":"de:Klipp Frisör",name:"Klipp",shop:"hairdresser"},matchScore:2,suggestion:true},"shop/hairdresser/Sport Clips":{name:"Sport Clips",icon:"temaki-beauty_salon",geometry:["point","area"],tags:{shop:"hairdresser","brand:wikidata":"Q7579310"},addTags:{brand:"Sport Clips","brand:wikidata":"Q7579310",name:"Sport Clips",shop:"hairdresser"},removeTags:{brand:"Sport Clips","brand:wikidata":"Q7579310",name:"Sport Clips",shop:"hairdresser"},matchScore:2,suggestion:true},"shop/hairdresser/Supercuts":{name:"Supercuts",icon:"temaki-beauty_salon",geometry:["point","area"],tags:{shop:"hairdresser","brand:wikidata":"Q7643239"},addTags:{brand:"Supercuts","brand:wikidata":"Q7643239","brand:wikipedia":"en:Supercuts",name:"Supercuts",shop:"hairdresser"},removeTags:{brand:"Supercuts","brand:wikidata":"Q7643239","brand:wikipedia":"en:Supercuts",name:"Supercuts",shop:"hairdresser"},matchScore:2,suggestion:true},"shop/hairdresser/Toni & Guy":{name:"Toni & Guy",icon:"temaki-beauty_salon",geometry:["point","area"],tags:{shop:"hairdresser","brand:wikidata":"Q324784"},addTags:{brand:"Toni & Guy","brand:wikidata":"Q324784","brand:wikipedia":"en:Toni & Guy",name:"Toni & Guy",shop:"hairdresser"},removeTags:{brand:"Toni & Guy","brand:wikidata":"Q324784","brand:wikipedia":"en:Toni & Guy",name:"Toni & Guy",shop:"hairdresser"},matchScore:2,suggestion:true},"shop/hardware/Harbor Freight Tools":{name:"Harbor Freight Tools",icon:"temaki-tools",geometry:["point","area"],tags:{shop:"hardware","brand:wikidata":"Q5654601"},addTags:{brand:"Harbor Freight Tools","brand:wikidata":"Q5654601","brand:wikipedia":"en:Harbor Freight Tools",name:"Harbor Freight Tools",shop:"hardware"},removeTags:{brand:"Harbor Freight Tools","brand:wikidata":"Q5654601","brand:wikipedia":"en:Harbor Freight Tools",name:"Harbor Freight Tools",shop:"hardware"},matchScore:2,suggestion:true},"shop/hardware/Home Hardware":{name:"Home Hardware",icon:"temaki-tools",geometry:["point","area"],tags:{shop:"hardware","brand:wikidata":"Q3139611"},addTags:{brand:"Home Hardware","brand:wikidata":"Q3139611","brand:wikipedia":"en:Home Hardware",name:"Home Hardware",shop:"hardware"},removeTags:{brand:"Home Hardware","brand:wikidata":"Q3139611","brand:wikipedia":"en:Home Hardware",name:"Home Hardware",shop:"hardware"},matchScore:2,suggestion:true},"shop/hardware/True Value":{name:"True Value",icon:"temaki-tools",geometry:["point","area"],tags:{shop:"hardware","brand:wikidata":"Q7847545"},addTags:{brand:"True Value","brand:wikidata":"Q7847545","brand:wikipedia":"en:True Value",name:"True Value",shop:"hardware"},removeTags:{brand:"True Value","brand:wikidata":"Q7847545","brand:wikipedia":"en:True Value",name:"True Value",shop:"hardware"},matchScore:2,suggestion:true},"shop/health_food/Holland & Barrett":{name:"Holland & Barrett",icon:"maki-shop",geometry:["point","area"],tags:{shop:"health_food","brand:wikidata":"Q5880870"},addTags:{brand:"Holland & Barrett","brand:wikidata":"Q5880870","brand:wikipedia":"en:Holland & Barrett",name:"Holland & Barrett",shop:"health_food"},removeTags:{brand:"Holland & Barrett","brand:wikidata":"Q5880870","brand:wikipedia":"en:Holland & Barrett",name:"Holland & Barrett",shop:"health_food"},matchScore:2,suggestion:true},"shop/hearing_aids/Amplifon":{name:"Amplifon",icon:"maki-shop",geometry:["point","area"],tags:{shop:"hearing_aids","brand:wikidata":"Q477222"},addTags:{brand:"Amplifon","brand:wikidata":"Q477222","brand:wikipedia":"en:Amplifon",name:"Amplifon",shop:"hearing_aids"},removeTags:{brand:"Amplifon","brand:wikidata":"Q477222","brand:wikipedia":"en:Amplifon",name:"Amplifon",shop:"hearing_aids"},matchScore:2,suggestion:true},"shop/hearing_aids/Audika":{name:"Audika",icon:"maki-shop",geometry:["point","area"],tags:{shop:"hearing_aids","brand:wikidata":"Q2870745"},addTags:{brand:"Audika","brand:wikidata":"Q2870745","brand:wikipedia":"fr:Audika",name:"Audika",shop:"hearing_aids"},removeTags:{brand:"Audika","brand:wikidata":"Q2870745","brand:wikipedia":"fr:Audika",name:"Audika",shop:"hearing_aids"},matchScore:2,suggestion:true},"shop/hearing_aids/Geers":{name:"Geers",icon:"maki-shop",geometry:["point","area"],tags:{shop:"hearing_aids","brand:wikidata":"Q1497707"},addTags:{brand:"Geers","brand:wikidata":"Q1497707","brand:wikipedia":"de:Geers Hörakustik",name:"Geers",shop:"hearing_aids"},removeTags:{brand:"Geers","brand:wikidata":"Q1497707","brand:wikipedia":"de:Geers Hörakustik",name:"Geers",shop:"hearing_aids"},matchScore:2,suggestion:true},"shop/hearing_aids/Kind Hörgeräte":{name:"Kind Hörgeräte",icon:"maki-shop",geometry:["point","area"],tags:{shop:"hearing_aids","brand:wikidata":"Q43598590"},addTags:{brand:"Kind Hörgeräte","brand:wikidata":"Q43598590","brand:wikipedia":"de:Kind Hörgeräte",name:"Kind Hörgeräte",shop:"hearing_aids"},removeTags:{brand:"Kind Hörgeräte","brand:wikidata":"Q43598590","brand:wikipedia":"de:Kind Hörgeräte",name:"Kind Hörgeräte",shop:"hearing_aids"},matchScore:2,suggestion:true},"shop/hearing_aids/Neuroth":{name:"Neuroth",icon:"maki-shop",geometry:["point","area"],tags:{shop:"hearing_aids","brand:wikidata":"Q15836645"},addTags:{brand:"Neuroth","brand:wikidata":"Q15836645",name:"Neuroth",shop:"hearing_aids"},removeTags:{brand:"Neuroth","brand:wikidata":"Q15836645",name:"Neuroth",shop:"hearing_aids"},matchScore:2,suggestion:true},"shop/hifi/Bang & Olufsen":{name:"Bang & Olufsen",icon:"maki-shop",geometry:["point","area"],tags:{shop:"hifi","brand:wikidata":"Q790020"},addTags:{brand:"Bang & Olufsen","brand:wikidata":"Q790020","brand:wikipedia":"en:Bang & Olufsen",name:"Bang & Olufsen",shop:"hifi"},removeTags:{brand:"Bang & Olufsen","brand:wikidata":"Q790020","brand:wikipedia":"en:Bang & Olufsen",name:"Bang & Olufsen",shop:"hifi"},matchScore:2,suggestion:true},"shop/houseware/Bed Bath & Beyond":{name:"Bed Bath & Beyond",icon:"fas-blender",geometry:["point","area"],tags:{shop:"houseware","brand:wikidata":"Q813782"},addTags:{brand:"Bed Bath & Beyond","brand:wikidata":"Q813782","brand:wikipedia":"en:Bed Bath & Beyond",name:"Bed Bath & Beyond",shop:"houseware"},removeTags:{brand:"Bed Bath & Beyond","brand:wikidata":"Q813782","brand:wikipedia":"en:Bed Bath & Beyond",name:"Bed Bath & Beyond",shop:"houseware"},matchScore:2,suggestion:true},"shop/houseware/Blokker":{name:"Blokker",icon:"fas-blender",geometry:["point","area"],tags:{shop:"houseware","brand:wikidata":"Q884934"},addTags:{brand:"Blokker","brand:wikidata":"Q884934","brand:wikipedia":"en:Blokker Holding",name:"Blokker",shop:"houseware"},removeTags:{brand:"Blokker","brand:wikidata":"Q884934","brand:wikipedia":"en:Blokker Holding",name:"Blokker",shop:"houseware"},matchScore:2,suggestion:true},"shop/houseware/Cervera":{name:"Cervera",icon:"fas-blender",geometry:["point","area"],tags:{shop:"houseware","brand:wikidata":"Q10447179"},addTags:{brand:"Cervera","brand:wikidata":"Q10447179","brand:wikipedia":"sv:Cervera (företag)",name:"Cervera",shop:"houseware"},removeTags:{brand:"Cervera","brand:wikidata":"Q10447179","brand:wikipedia":"sv:Cervera (företag)",name:"Cervera",shop:"houseware"},matchScore:2,suggestion:true},"shop/houseware/HomeGoods":{name:"HomeGoods",icon:"fas-blender",geometry:["point","area"],tags:{shop:"houseware","brand:wikidata":"Q5887941"},addTags:{brand:"HomeGoods","brand:wikidata":"Q5887941","brand:wikipedia":"en:HomeGoods",name:"HomeGoods",shop:"houseware"},removeTags:{brand:"HomeGoods","brand:wikidata":"Q5887941","brand:wikipedia":"en:HomeGoods",name:"HomeGoods",shop:"houseware"},matchScore:2,suggestion:true},"shop/houseware/Marskramer":{name:"Marskramer",icon:"fas-blender",geometry:["point","area"],tags:{shop:"houseware","brand:wikidata":"Q2305917"},addTags:{brand:"Marskramer","brand:wikidata":"Q2305917","brand:wikipedia":"nl:Marskramer (warenhuis)",name:"Marskramer",shop:"houseware"},removeTags:{brand:"Marskramer","brand:wikidata":"Q2305917","brand:wikipedia":"nl:Marskramer (warenhuis)",name:"Marskramer",shop:"houseware"},matchScore:2,suggestion:true},"shop/houseware/Old Time Pottery":{name:"Old Time Pottery",icon:"fas-blender",geometry:["point","area"],tags:{shop:"houseware","brand:wikidata":"Q7085222"},addTags:{brand:"Old Time Pottery","brand:website":"http://www.oldtimepottery.com","brand:wikidata":"Q7085222","brand:wikipedia":"en:Old Time Pottery",name:"Old Time Pottery",shop:"houseware"},removeTags:{brand:"Old Time Pottery","brand:website":"http://www.oldtimepottery.com","brand:wikidata":"Q7085222","brand:wikipedia":"en:Old Time Pottery",name:"Old Time Pottery",shop:"houseware"},matchScore:2,suggestion:true},"shop/houseware/Sur La Table":{name:"Sur La Table",icon:"fas-blender",geometry:["point","area"],tags:{shop:"houseware","brand:wikidata":"Q7645220"},addTags:{brand:"Sur La Table","brand:wikidata":"Q7645220","brand:wikipedia":"en:Sur La Table",name:"Sur La Table",shop:"houseware"},removeTags:{brand:"Sur La Table","brand:wikidata":"Q7645220","brand:wikipedia":"en:Sur La Table",name:"Sur La Table",shop:"houseware"},matchScore:2,suggestion:true},"shop/houseware/Tuesday Morning":{name:"Tuesday Morning",icon:"fas-blender",geometry:["point","area"],tags:{shop:"houseware","brand:wikidata":"Q7851426"},addTags:{brand:"Tuesday Morning","brand:wikidata":"Q7851426","brand:wikipedia":"en:Tuesday Morning",name:"Tuesday Morning",shop:"houseware"},removeTags:{brand:"Tuesday Morning","brand:wikidata":"Q7851426","brand:wikipedia":"en:Tuesday Morning",name:"Tuesday Morning",shop:"houseware"},matchScore:2,suggestion:true},"shop/houseware/WMF":{name:"WMF",icon:"fas-blender",geometry:["point","area"],tags:{shop:"houseware","brand:wikidata":"Q451423"},addTags:{brand:"WMF","brand:wikidata":"Q451423","brand:wikipedia":"en:WMF Group",name:"WMF",shop:"houseware"},removeTags:{brand:"WMF","brand:wikidata":"Q451423","brand:wikipedia":"en:WMF Group",name:"WMF",shop:"houseware"},matchScore:2,suggestion:true},"shop/houseware/Xenos":{name:"Xenos",icon:"fas-blender",geometry:["point","area"],tags:{shop:"houseware","brand:wikidata":"Q16547960"},addTags:{brand:"Xenos","brand:wikidata":"Q16547960","brand:wikipedia":"nl:Xenos",name:"Xenos",shop:"houseware"},removeTags:{brand:"Xenos","brand:wikidata":"Q16547960","brand:wikipedia":"nl:Xenos",name:"Xenos",shop:"houseware"},matchScore:2,suggestion:true},"shop/interior_decoration/Depot":{name:"Depot",icon:"maki-shop",geometry:["point","area"],tags:{shop:"interior_decoration","brand:wikidata":"Q1191740"},addTags:{brand:"Depot","brand:wikidata":"Q1191740","brand:wikipedia":"de:Gries Deco Holding",name:"Depot",shop:"interior_decoration"},removeTags:{brand:"Depot","brand:wikidata":"Q1191740","brand:wikipedia":"de:Gries Deco Holding",name:"Depot",shop:"interior_decoration"},matchScore:2,suggestion:true},"shop/interior_decoration/Hemtex":{name:"Hemtex",icon:"maki-shop",geometry:["point","area"],tags:{shop:"interior_decoration","brand:wikidata":"Q10521868"},addTags:{brand:"Hemtex",name:"Hemtex","brand:wikidata":"Q10521868","brand:wikipedia":"sv:Hemtex",shop:"interior_decoration"},removeTags:{brand:"Hemtex",name:"Hemtex","brand:wikidata":"Q10521868","brand:wikipedia":"sv:Hemtex",shop:"interior_decoration"},matchScore:2,suggestion:true},"shop/interior_decoration/Pier 1 Imports":{name:"Pier 1 Imports",icon:"maki-shop",geometry:["point","area"],tags:{shop:"interior_decoration","brand:wikidata":"Q7191691"},addTags:{brand:"Pier 1 Imports","brand:wikidata":"Q7191691","brand:wikipedia":"en:Pier 1 Imports",name:"Pier 1 Imports",shop:"interior_decoration"},removeTags:{brand:"Pier 1 Imports","brand:wikidata":"Q7191691","brand:wikipedia":"en:Pier 1 Imports",name:"Pier 1 Imports",shop:"interior_decoration"},matchScore:2,suggestion:true},"shop/jewelry/Apart":{name:"Apart",icon:"maki-jewelry-store",geometry:["point","area"],tags:{shop:"jewelry","brand:wikidata":"Q11686561"},addTags:{brand:"Apart","brand:wikidata":"Q11686561","brand:wikipedia":"pl:Apart",name:"Apart",shop:"jewelry"},removeTags:{brand:"Apart","brand:wikidata":"Q11686561","brand:wikipedia":"pl:Apart",name:"Apart",shop:"jewelry"},matchScore:2,suggestion:true},"shop/jewelry/Bijou Brigitte":{name:"Bijou Brigitte",icon:"maki-jewelry-store",geometry:["point","area"],tags:{shop:"jewelry","brand:wikidata":"Q599545"},addTags:{brand:"Bijou Brigitte","brand:wikidata":"Q599545","brand:wikipedia":"de:Bijou Brigitte",name:"Bijou Brigitte",shop:"jewelry"},removeTags:{brand:"Bijou Brigitte","brand:wikidata":"Q599545","brand:wikipedia":"de:Bijou Brigitte",name:"Bijou Brigitte",shop:"jewelry"},matchScore:2,suggestion:true},"shop/jewelry/Cartier":{name:"Cartier",icon:"maki-jewelry-store",geometry:["point","area"],tags:{shop:"jewelry","brand:wikidata":"Q538587"},addTags:{brand:"Cartier","brand:wikidata":"Q538587","brand:wikipedia":"en:Cartier (jeweler)",name:"Cartier",shop:"jewelry"},removeTags:{brand:"Cartier","brand:wikidata":"Q538587","brand:wikipedia":"en:Cartier (jeweler)",name:"Cartier",shop:"jewelry"},matchScore:2,suggestion:true},"shop/jewelry/Ernest Jones":{name:"Ernest Jones",icon:"maki-jewelry-store",geometry:["point","area"],tags:{shop:"jewelry","brand:wikidata":"Q5393358"},addTags:{brand:"Ernest Jones","brand:wikidata":"Q5393358","brand:wikipedia":"en:Ernest Jones (retailer)",name:"Ernest Jones",shop:"jewelry"},removeTags:{brand:"Ernest Jones","brand:wikidata":"Q5393358","brand:wikipedia":"en:Ernest Jones (retailer)",name:"Ernest Jones",shop:"jewelry"},matchScore:2,suggestion:true},"shop/jewelry/Guldfynd":{name:"Guldfynd",icon:"maki-jewelry-store",geometry:["point","area"],tags:{shop:"jewelry","brand:wikidata":"Q49099223"},addTags:{brand:"Guldfynd","brand:wikidata":"Q49099223","brand:wikipedia":"sv:Guldfynd",name:"Guldfynd",shop:"jewelry"},removeTags:{brand:"Guldfynd","brand:wikidata":"Q49099223","brand:wikipedia":"sv:Guldfynd",name:"Guldfynd",shop:"jewelry"},matchScore:2,suggestion:true},"shop/jewelry/H Samuel":{name:"H Samuel",icon:"maki-jewelry-store",geometry:["point","area"],tags:{shop:"jewelry","brand:wikidata":"Q5628558"},addTags:{brand:"H Samuel","brand:wikidata":"Q5628558","brand:wikipedia":"en:H. Samuel",name:"H Samuel",shop:"jewelry"},removeTags:{brand:"H Samuel","brand:wikidata":"Q5628558","brand:wikipedia":"en:H. Samuel",name:"H Samuel",shop:"jewelry"},matchScore:2,suggestion:true},"shop/jewelry/James Avery Jewelry":{name:"James Avery Jewelry",icon:"maki-jewelry-store",geometry:["point","area"],tags:{shop:"jewelry","brand:wikidata":"Q6129024"},addTags:{brand:"James Avery Jewelry","brand:wikidata":"Q6129024","brand:wikipedia":"en:James Avery Artisan Jewelry",name:"James Avery Jewelry",shop:"jewelry"},removeTags:{brand:"James Avery Jewelry","brand:wikidata":"Q6129024","brand:wikipedia":"en:James Avery Artisan Jewelry",name:"James Avery Jewelry",shop:"jewelry"},matchScore:2,suggestion:true},"shop/jewelry/Kay Jewelers":{name:"Kay Jewelers",icon:"maki-jewelry-store",geometry:["point","area"],tags:{shop:"jewelry","brand:wikidata":"Q7611434"},addTags:{brand:"Kay Jewelers","brand:wikidata":"Q7611434","brand:wikipedia":"en:Sterling Jewelers",name:"Kay Jewelers",shop:"jewelry"},removeTags:{brand:"Kay Jewelers","brand:wikidata":"Q7611434","brand:wikipedia":"en:Sterling Jewelers",name:"Kay Jewelers",shop:"jewelry"},matchScore:2,suggestion:true},"shop/jewelry/Pandora":{name:"Pandora",icon:"maki-jewelry-store",geometry:["point","area"],tags:{shop:"jewelry","brand:wikidata":"Q2241604"},addTags:{brand:"Pandora","brand:wikidata":"Q2241604","brand:wikipedia":"en:Pandora (jewelry)",name:"Pandora",shop:"jewelry"},removeTags:{brand:"Pandora","brand:wikidata":"Q2241604","brand:wikipedia":"en:Pandora (jewelry)",name:"Pandora",shop:"jewelry"},matchScore:2,suggestion:true},"shop/jewelry/Swarovski":{name:"Swarovski",icon:"maki-jewelry-store",geometry:["point","area"],tags:{shop:"jewelry","brand:wikidata":"Q611115"},addTags:{brand:"Swarovski","brand:wikidata":"Q611115","brand:wikipedia":"en:Swarovski",name:"Swarovski",shop:"jewelry"},removeTags:{brand:"Swarovski","brand:wikidata":"Q611115","brand:wikipedia":"en:Swarovski",name:"Swarovski",shop:"jewelry"},matchScore:2,suggestion:true},"shop/kiosk/Lietuvos spauda":{name:"Lietuvos spauda",icon:"maki-shop",geometry:["point","area"],tags:{shop:"kiosk","brand:wikidata":"Q6514414"},addTags:{brand:"Lietuvos spauda","brand:wikidata":"Q6514414","brand:wikipedia":"lt:Lietuvos spauda",name:"Lietuvos spauda",shop:"kiosk"},removeTags:{brand:"Lietuvos spauda","brand:wikidata":"Q6514414","brand:wikipedia":"lt:Lietuvos spauda",name:"Lietuvos spauda",shop:"kiosk"},matchScore:2,suggestion:true},"shop/kiosk/Narvesen":{name:"Narvesen",icon:"maki-shop",geometry:["point","area"],tags:{shop:"kiosk","brand:wikidata":"Q6514414"},addTags:{brand:"Narvesen","brand:wikidata":"Q6514414","brand:wikipedia":"en:Narvesen",name:"Narvesen",shop:"kiosk"},removeTags:{brand:"Narvesen","brand:wikidata":"Q6514414","brand:wikipedia":"en:Narvesen",name:"Narvesen",shop:"kiosk"},matchScore:2,suggestion:true},"shop/kiosk/Pressbyrån":{name:"Pressbyrån",icon:"maki-shop",geometry:["point","area"],tags:{shop:"kiosk","brand:wikidata":"Q2489072"},addTags:{brand:"Pressbyrån","brand:wikidata":"Q2489072","brand:wikipedia":"en:Pressbyrån",name:"Pressbyrån",shop:"kiosk"},removeTags:{brand:"Pressbyrån","brand:wikidata":"Q2489072","brand:wikipedia":"en:Pressbyrån",name:"Pressbyrån",shop:"kiosk"},matchScore:2,suggestion:true},"shop/kiosk/R-Kioski":{name:"R-Kioski",icon:"maki-shop",geometry:["point","area"],tags:{shop:"kiosk","brand:wikidata":"Q1571400"},addTags:{brand:"R-Kioski","brand:wikidata":"Q1571400","brand:wikipedia":"en:R-kioski",name:"R-Kioski",shop:"kiosk"},removeTags:{brand:"R-Kioski","brand:wikidata":"Q1571400","brand:wikipedia":"en:R-kioski",name:"R-Kioski",shop:"kiosk"},matchScore:2,suggestion:true},"shop/kiosk/Ruch":{name:"Ruch",icon:"maki-shop",geometry:["point","area"],tags:{shop:"kiosk","brand:wikidata":"Q1260314"},addTags:{brand:"Ruch","brand:wikidata":"Q1260314","brand:wikipedia":"pl:Ruch (przedsiębiorstwo)",name:"Ruch",shop:"kiosk"},removeTags:{brand:"Ruch","brand:wikidata":"Q1260314","brand:wikipedia":"pl:Ruch (przedsiębiorstwo)",name:"Ruch",shop:"kiosk"},matchScore:2,suggestion:true},"shop/kiosk/k kiosk":{name:"k kiosk",icon:"maki-shop",geometry:["point","area"],tags:{shop:"kiosk","brand:wikidata":"Q60381703"},addTags:{brand:"k kiosk","brand:wikidata":"Q60381703","brand:wikipedia":"it:K Kiosk",name:"k kiosk",shop:"kiosk"},removeTags:{brand:"k kiosk","brand:wikidata":"Q60381703","brand:wikipedia":"it:K Kiosk",name:"k kiosk",shop:"kiosk"},matchScore:2,suggestion:true},"shop/kitchen/Cuisinella":{name:"Cuisinella",icon:"maki-shop",geometry:["point","area"],tags:{shop:"kitchen","brand:wikidata":"Q3007012"},addTags:{brand:"Cuisinella","brand:wikidata":"Q3007012","brand:wikipedia":"fr:Cuisinella",name:"Cuisinella",shop:"kitchen"},removeTags:{brand:"Cuisinella","brand:wikidata":"Q3007012","brand:wikipedia":"fr:Cuisinella",name:"Cuisinella",shop:"kitchen"},matchScore:2,suggestion:true},"shop/kitchen/Schmidt":{name:"Schmidt",icon:"maki-shop",geometry:["point","area"],tags:{shop:"kitchen","brand:wikidata":"Q3487620"},addTags:{brand:"Schmidt","brand:wikidata":"Q3487620","brand:wikipedia":"de:Schmidt Groupe",name:"Schmidt",shop:"kitchen"},removeTags:{brand:"Schmidt","brand:wikidata":"Q3487620","brand:wikipedia":"de:Schmidt Groupe",name:"Schmidt",shop:"kitchen"},matchScore:2,suggestion:true},"shop/massage/Massage Envy":{name:"Massage Envy",icon:"temaki-spa",geometry:["point","area"],tags:{shop:"massage","brand:wikidata":"Q22922899"},addTags:{brand:"Massage Envy","brand:wikidata":"Q22922899","brand:wikipedia":"en:Massage Envy",name:"Massage Envy",shop:"massage"},removeTags:{brand:"Massage Envy","brand:wikidata":"Q22922899","brand:wikipedia":"en:Massage Envy",name:"Massage Envy",shop:"massage"},matchScore:2,suggestion:true},"shop/mobile_phone/3 Store":{name:"3 Store",icon:"maki-mobile-phone",geometry:["point","area"],tags:{shop:"mobile_phone","brand:wikidata":"Q407009"},addTags:{brand:"3 Store","brand:wikidata":"Q407009","brand:wikipedia":"en:3 (telecommunications)",name:"3 Store",shop:"mobile_phone"},removeTags:{brand:"3 Store","brand:wikidata":"Q407009","brand:wikipedia":"en:3 (telecommunications)",name:"3 Store",shop:"mobile_phone"},matchScore:2,suggestion:true},"shop/mobile_phone/AT&T":{name:"AT&T",icon:"maki-mobile-phone",geometry:["point","area"],tags:{shop:"mobile_phone","brand:wikidata":"Q298594"},addTags:{brand:"AT&T","brand:wikidata":"Q298594","brand:wikipedia":"en:AT&T Mobility",name:"AT&T",shop:"mobile_phone"},removeTags:{brand:"AT&T","brand:wikidata":"Q298594","brand:wikipedia":"en:AT&T Mobility",name:"AT&T",shop:"mobile_phone"},matchScore:2,suggestion:true},"shop/mobile_phone/Bell":{name:"Bell",icon:"maki-mobile-phone",geometry:["point","area"],tags:{shop:"mobile_phone","brand:wikidata":"Q2894594"},addTags:{brand:"Bell","brand:wikidata":"Q2894594","brand:wikipedia":"en:Bell Mobility",name:"Bell",shop:"mobile_phone"},removeTags:{brand:"Bell","brand:wikidata":"Q2894594","brand:wikipedia":"en:Bell Mobility",name:"Bell",shop:"mobile_phone"},matchScore:2,suggestion:true},"shop/mobile_phone/Boost Mobile":{name:"Boost Mobile",icon:"maki-mobile-phone",geometry:["point","area"],tags:{shop:"mobile_phone","brand:wikidata":"Q4943790"},addTags:{brand:"Boost Mobile","brand:wikidata":"Q4943790","brand:wikipedia":"en:Boost Mobile",name:"Boost Mobile",shop:"mobile_phone"},removeTags:{brand:"Boost Mobile","brand:wikidata":"Q4943790","brand:wikipedia":"en:Boost Mobile",name:"Boost Mobile",shop:"mobile_phone"},matchScore:2,suggestion:true},"shop/mobile_phone/Carphone Warehouse":{name:"Carphone Warehouse",icon:"maki-mobile-phone",geometry:["point","area"],tags:{shop:"mobile_phone","brand:wikidata":"Q118046"},addTags:{brand:"Carphone Warehouse","brand:wikidata":"Q118046","brand:wikipedia":"en:Carphone Warehouse",name:"Carphone Warehouse",shop:"mobile_phone"},removeTags:{brand:"Carphone Warehouse","brand:wikidata":"Q118046","brand:wikipedia":"en:Carphone Warehouse",name:"Carphone Warehouse",shop:"mobile_phone"},matchScore:2,suggestion:true},"shop/mobile_phone/Claro":{name:"Claro",icon:"maki-mobile-phone",geometry:["point","area"],tags:{shop:"mobile_phone","brand:wikidata":"Q1770208"},addTags:{brand:"Claro","brand:wikidata":"Q1770208","brand:wikipedia":"en:Claro (company)",name:"Claro",shop:"mobile_phone"},removeTags:{brand:"Claro","brand:wikidata":"Q1770208","brand:wikipedia":"en:Claro (company)",name:"Claro",shop:"mobile_phone"},matchScore:2,suggestion:true},"shop/mobile_phone/Cricket Wireless":{name:"Cricket Wireless",icon:"maki-mobile-phone",geometry:["point","area"],tags:{shop:"mobile_phone","brand:wikidata":"Q5184987"},addTags:{brand:"Cricket Wireless","brand:wikidata":"Q5184987","brand:wikipedia":"en:Cricket Wireless",name:"Cricket Wireless",shop:"mobile_phone"},removeTags:{brand:"Cricket Wireless","brand:wikidata":"Q5184987","brand:wikipedia":"en:Cricket Wireless",name:"Cricket Wireless",shop:"mobile_phone"},matchScore:2,suggestion:true},"shop/mobile_phone/Digicel":{name:"Digicel",icon:"maki-mobile-phone",geometry:["point","area"],tags:{shop:"mobile_phone","brand:wikidata":"Q2117506"},addTags:{brand:"Digicel","brand:wikidata":"Q2117506","brand:wikipedia":"en:Digicel",name:"Digicel",shop:"mobile_phone"},removeTags:{brand:"Digicel","brand:wikidata":"Q2117506","brand:wikipedia":"en:Digicel",name:"Digicel",shop:"mobile_phone"},matchScore:2,suggestion:true},"shop/mobile_phone/EE":{name:"EE",icon:"maki-mobile-phone",geometry:["point","area"],tags:{shop:"mobile_phone","brand:wikidata":"Q5322942"},addTags:{brand:"EE","brand:wikidata":"Q5322942","brand:wikipedia":"en:EE Limited",name:"EE",shop:"mobile_phone"},removeTags:{brand:"EE","brand:wikidata":"Q5322942","brand:wikipedia":"en:EE Limited",name:"EE",shop:"mobile_phone"},matchScore:2,suggestion:true},"shop/mobile_phone/Entel":{name:"Entel",icon:"maki-mobile-phone",geometry:["point","area"],tags:{shop:"mobile_phone","brand:wikidata":"Q5323742"},addTags:{brand:"Entel","brand:wikidata":"Q5323742","brand:wikipedia":"en:ENTel",name:"Entel",shop:"mobile_phone"},removeTags:{brand:"Entel","brand:wikidata":"Q5323742","brand:wikipedia":"en:ENTel",name:"Entel",shop:"mobile_phone"},matchScore:2,suggestion:true},"shop/mobile_phone/MTN":{name:"MTN",icon:"maki-mobile-phone",geometry:["point","area"],tags:{shop:"mobile_phone","brand:wikidata":"Q1813361"},addTags:{brand:"MTN","brand:wikidata":"Q1813361","brand:wikipedia":"en:MTN Group",name:"MTN",shop:"mobile_phone"},removeTags:{brand:"MTN","brand:wikidata":"Q1813361","brand:wikipedia":"en:MTN Group",name:"MTN",shop:"mobile_phone"},matchScore:2,suggestion:true},"shop/mobile_phone/MetroPCS":{name:"MetroPCS",icon:"maki-mobile-phone",geometry:["point","area"],tags:{shop:"mobile_phone","brand:wikidata":"Q1925685"},addTags:{brand:"MetroPCS","brand:wikidata":"Q1925685","brand:wikipedia":"en:Metro by T-Mobile",name:"MetroPCS",shop:"mobile_phone"},removeTags:{brand:"MetroPCS","brand:wikidata":"Q1925685","brand:wikipedia":"en:Metro by T-Mobile",name:"MetroPCS",shop:"mobile_phone"},matchScore:2,suggestion:true},"shop/mobile_phone/Mobilcom Debitel":{name:"Mobilcom Debitel",icon:"maki-mobile-phone",geometry:["point","area"],tags:{shop:"mobile_phone","brand:wikidata":"Q344744"},addTags:{brand:"Mobilcom Debitel","brand:wikidata":"Q344744","brand:wikipedia":"en:Debitel",name:"Mobilcom Debitel",shop:"mobile_phone"},removeTags:{brand:"Mobilcom Debitel","brand:wikidata":"Q344744","brand:wikipedia":"en:Debitel",name:"Mobilcom Debitel",shop:"mobile_phone"},matchScore:2,suggestion:true},"shop/mobile_phone/Moov":{name:"Moov",icon:"maki-mobile-phone",geometry:["point","area"],tags:{shop:"mobile_phone","brand:wikidata":"Q3323637"},addTags:{brand:"Moov","brand:wikidata":"Q3323637","brand:wikipedia":"fr:Moov Côte d'Ivoire",name:"Moov",shop:"mobile_phone"},removeTags:{brand:"Moov","brand:wikidata":"Q3323637","brand:wikipedia":"fr:Moov Côte d'Ivoire",name:"Moov",shop:"mobile_phone"},matchScore:2,suggestion:true},"shop/mobile_phone/Movistar":{name:"Movistar",icon:"maki-mobile-phone",geometry:["point","area"],tags:{shop:"mobile_phone","brand:wikidata":"Q967735"},addTags:{brand:"Movistar","brand:wikidata":"Q967735","brand:wikipedia":"en:Movistar",name:"Movistar",shop:"mobile_phone"},removeTags:{brand:"Movistar","brand:wikidata":"Q967735","brand:wikipedia":"en:Movistar",name:"Movistar",shop:"mobile_phone"},matchScore:2,suggestion:true},"shop/mobile_phone/O2":{name:"O2",icon:"maki-mobile-phone",geometry:["point","area"],tags:{shop:"mobile_phone","brand:wikidata":"Q7072246"},addTags:{brand:"O2","brand:wikidata":"Q7072246","brand:wikipedia":"en:O2 (Ireland)",name:"O2",shop:"mobile_phone"},removeTags:{brand:"O2","brand:wikidata":"Q7072246","brand:wikipedia":"en:O2 (Ireland)",name:"O2",shop:"mobile_phone"},matchScore:2,suggestion:true},"shop/mobile_phone/Orange":{name:"Orange",icon:"maki-mobile-phone",geometry:["point","area"],tags:{shop:"mobile_phone","brand:wikidata":"Q1431486"},addTags:{brand:"Orange","brand:wikidata":"Q1431486","brand:wikipedia":"fr:Orange S.A.",name:"Orange",shop:"mobile_phone"},removeTags:{brand:"Orange","brand:wikidata":"Q1431486","brand:wikipedia":"fr:Orange S.A.",name:"Orange",shop:"mobile_phone"},matchScore:2,suggestion:true},"shop/mobile_phone/Phone House":{name:"Phone House",icon:"maki-mobile-phone",geometry:["point","area"],tags:{shop:"mobile_phone","brand:wikidata":"Q118046"},addTags:{brand:"Phone House","brand:wikidata":"Q118046","brand:wikipedia":"en:Carphone Warehouse",name:"Phone House",shop:"mobile_phone"},removeTags:{brand:"Phone House","brand:wikidata":"Q118046","brand:wikipedia":"en:Carphone Warehouse",name:"Phone House",shop:"mobile_phone"},matchScore:2,suggestion:true},"shop/mobile_phone/Play":{name:"Play",icon:"maki-mobile-phone",geometry:["point","area"],tags:{shop:"mobile_phone","brand:wikidata":"Q7202998"},addTags:{brand:"Play","brand:wikidata":"Q7202998","brand:wikipedia":"en:Play (telecommunications)",name:"Play",shop:"mobile_phone"},removeTags:{brand:"Play","brand:wikidata":"Q7202998","brand:wikipedia":"en:Play (telecommunications)",name:"Play",shop:"mobile_phone"},matchScore:2,suggestion:true},"shop/mobile_phone/Plus":{name:"Plus",icon:"maki-mobile-phone",geometry:["point","area"],tags:{shop:"mobile_phone","brand:wikidata":"Q7205598"},addTags:{brand:"Plus","brand:wikidata":"Q7205598","brand:wikipedia":"pl:Plus (sieć telefonii komórkowej)",name:"Plus",shop:"mobile_phone"},removeTags:{brand:"Plus","brand:wikidata":"Q7205598","brand:wikipedia":"pl:Plus (sieć telefonii komórkowej)",name:"Plus",shop:"mobile_phone"},matchScore:2,suggestion:true},"shop/mobile_phone/Rogers":{name:"Rogers",icon:"maki-mobile-phone",geometry:["point","area"],tags:{shop:"mobile_phone","brand:wikidata":"Q3439663"},addTags:{brand:"Rogers","brand:wikidata":"Q3439663","brand:wikipedia":"en:Rogers Wireless",name:"Rogers",shop:"mobile_phone"},removeTags:{brand:"Rogers","brand:wikidata":"Q3439663","brand:wikipedia":"en:Rogers Wireless",name:"Rogers",shop:"mobile_phone"},matchScore:2,suggestion:true},"shop/mobile_phone/SFR":{name:"SFR",icon:"maki-mobile-phone",geometry:["point","area"],tags:{shop:"mobile_phone","brand:wikidata":"Q218765"},addTags:{brand:"SFR","brand:wikidata":"Q218765","brand:wikipedia":"en:SFR",name:"SFR",shop:"mobile_phone"},removeTags:{brand:"SFR","brand:wikidata":"Q218765","brand:wikipedia":"en:SFR",name:"SFR",shop:"mobile_phone"},matchScore:2,suggestion:true},"shop/mobile_phone/Sprint":{name:"Sprint",icon:"maki-mobile-phone",geometry:["point","area"],tags:{shop:"mobile_phone","brand:wikidata":"Q301965"},addTags:{brand:"Sprint","brand:wikidata":"Q301965","brand:wikipedia":"en:Sprint Corporation",name:"Sprint",shop:"mobile_phone"},removeTags:{brand:"Sprint","brand:wikidata":"Q301965","brand:wikipedia":"en:Sprint Corporation",name:"Sprint",shop:"mobile_phone"},matchScore:2,suggestion:true},"shop/mobile_phone/T-Mobile":{name:"T-Mobile",icon:"maki-mobile-phone",geometry:["point","area"],tags:{shop:"mobile_phone","brand:wikidata":"Q327634"},addTags:{brand:"T-Mobile","brand:wikidata":"Q327634","brand:wikipedia":"en:T-Mobile",name:"T-Mobile",shop:"mobile_phone"},removeTags:{brand:"T-Mobile","brand:wikidata":"Q327634","brand:wikipedia":"en:T-Mobile",name:"T-Mobile",shop:"mobile_phone"},matchScore:2,suggestion:true},"shop/mobile_phone/TIM":{name:"TIM",icon:"maki-mobile-phone",geometry:["point","area"],tags:{shop:"mobile_phone","brand:wikidata":"Q144617"},addTags:{brand:"TIM","brand:wikidata":"Q144617","brand:wikipedia":"en:Telecom Italia",name:"TIM",shop:"mobile_phone"},removeTags:{brand:"TIM","brand:wikidata":"Q144617","brand:wikipedia":"en:Telecom Italia",name:"TIM",shop:"mobile_phone"},matchScore:2,suggestion:true},"shop/mobile_phone/Telcel":{name:"Telcel",icon:"maki-mobile-phone",geometry:["point","area"],tags:{shop:"mobile_phone","brand:wikidata":"Q3517255"},addTags:{brand:"Telcel","brand:wikidata":"Q3517255","brand:wikipedia":"en:Telcel",name:"Telcel",shop:"mobile_phone"},removeTags:{brand:"Telcel","brand:wikidata":"Q3517255","brand:wikipedia":"en:Telcel",name:"Telcel",shop:"mobile_phone"},matchScore:2,suggestion:true},"shop/mobile_phone/Tele2":{name:"Tele2",icon:"maki-mobile-phone",geometry:["point","area"],tags:{shop:"mobile_phone","brand:wikidata":"Q309865"},addTags:{brand:"Tele2","brand:wikidata":"Q309865","brand:wikipedia":"en:Tele2",name:"Tele2",shop:"mobile_phone"},removeTags:{brand:"Tele2","brand:wikidata":"Q309865","brand:wikipedia":"en:Tele2",name:"Tele2",shop:"mobile_phone"},matchScore:2,suggestion:true},"shop/mobile_phone/Telekom":{name:"Telekom",icon:"maki-mobile-phone",geometry:["point","area"],tags:{shop:"mobile_phone","brand:wikidata":"Q9396"},addTags:{brand:"Telekom","brand:wikidata":"Q9396","brand:wikipedia":"en:Deutsche Telekom",name:"Telekom",shop:"mobile_phone"},removeTags:{brand:"Telekom","brand:wikidata":"Q9396","brand:wikipedia":"en:Deutsche Telekom",name:"Telekom",shop:"mobile_phone"},matchScore:2,suggestion:true},"shop/mobile_phone/Telenor":{name:"Telenor",icon:"maki-mobile-phone",geometry:["point","area"],tags:{shop:"mobile_phone","brand:wikidata":"Q845632"},addTags:{brand:"Telenor","brand:wikidata":"Q845632","brand:wikipedia":"en:Telenor",name:"Telenor",shop:"mobile_phone"},removeTags:{brand:"Telenor","brand:wikidata":"Q845632","brand:wikipedia":"en:Telenor",name:"Telenor",shop:"mobile_phone"},matchScore:2,suggestion:true},"shop/mobile_phone/Telstra":{name:"Telstra",icon:"maki-mobile-phone",geometry:["point","area"],tags:{shop:"mobile_phone","brand:wikidata":"Q721162"},addTags:{brand:"Telstra","brand:wikidata":"Q721162","brand:wikipedia":"en:Telstra",name:"Telstra",shop:"mobile_phone"},removeTags:{brand:"Telstra","brand:wikidata":"Q721162","brand:wikipedia":"en:Telstra",name:"Telstra",shop:"mobile_phone"},matchScore:2,suggestion:true},"shop/mobile_phone/Telus":{name:"Telus",icon:"maki-mobile-phone",geometry:["point","area"],tags:{shop:"mobile_phone","brand:wikidata":"Q165858"},addTags:{brand:"Telus","brand:wikidata":"Q165858","brand:wikipedia":"en:Telus",name:"Telus",shop:"mobile_phone"},removeTags:{brand:"Telus","brand:wikidata":"Q165858","brand:wikipedia":"en:Telus",name:"Telus",shop:"mobile_phone"},matchScore:2,suggestion:true},"shop/mobile_phone/Turkcell":{name:"Turkcell",icon:"maki-mobile-phone",geometry:["point","area"],tags:{shop:"mobile_phone","brand:wikidata":"Q283852"},addTags:{brand:"Turkcell","brand:wikidata":"Q283852","brand:wikipedia":"en:Turkcell",name:"Turkcell",shop:"mobile_phone"},removeTags:{brand:"Turkcell","brand:wikidata":"Q283852","brand:wikipedia":"en:Turkcell",name:"Turkcell",shop:"mobile_phone"},matchScore:2,suggestion:true},"shop/mobile_phone/Télécentre":{name:"Télécentre",icon:"maki-mobile-phone",geometry:["point","area"],tags:{shop:"mobile_phone","brand:wikidata":"Q180034"},addTags:{brand:"Télécentre","brand:wikidata":"Q180034","brand:wikipedia":"en:Telecentre",name:"Télécentre",shop:"mobile_phone"},removeTags:{brand:"Télécentre","brand:wikidata":"Q180034","brand:wikipedia":"en:Telecentre",name:"Télécentre",shop:"mobile_phone"},matchScore:2,suggestion:true},"shop/mobile_phone/U.S. Cellular":{name:"U.S. Cellular",icon:"maki-mobile-phone",geometry:["point","area"],tags:{shop:"mobile_phone","brand:wikidata":"Q2466256"},addTags:{brand:"U.S. Cellular","brand:wikidata":"Q2466256","brand:wikipedia":"en:U.S. Cellular",name:"U.S. Cellular",shop:"mobile_phone"},removeTags:{brand:"U.S. Cellular","brand:wikidata":"Q2466256","brand:wikipedia":"en:U.S. Cellular",name:"U.S. Cellular",shop:"mobile_phone"},matchScore:2,suggestion:true},"shop/mobile_phone/Verizon Wireless":{name:"Verizon Wireless",icon:"maki-mobile-phone",geometry:["point","area"],tags:{shop:"mobile_phone","brand:wikidata":"Q919641"},addTags:{brand:"Verizon Wireless","brand:wikidata":"Q919641","brand:wikipedia":"en:Verizon Wireless",name:"Verizon Wireless",shop:"mobile_phone"},removeTags:{brand:"Verizon Wireless","brand:wikidata":"Q919641","brand:wikipedia":"en:Verizon Wireless",name:"Verizon Wireless",shop:"mobile_phone"},matchScore:2,suggestion:true},"shop/mobile_phone/Vodafone":{name:"Vodafone",icon:"maki-mobile-phone",geometry:["point","area"],tags:{shop:"mobile_phone","brand:wikidata":"Q122141"},addTags:{brand:"Vodafone","brand:wikidata":"Q122141","brand:wikipedia":"en:Vodafone",name:"Vodafone",shop:"mobile_phone"},removeTags:{brand:"Vodafone","brand:wikidata":"Q122141","brand:wikipedia":"en:Vodafone",name:"Vodafone",shop:"mobile_phone"},matchScore:2,suggestion:true},"shop/mobile_phone/WIFI_ETECSA":{name:"WIFI_ETECSA",icon:"maki-mobile-phone",geometry:["point","area"],tags:{shop:"mobile_phone","brand:wikidata":"Q490323"},addTags:{brand:"WIFI_ETECSA","brand:wikidata":"Q490323","brand:wikipedia":"es:Empresa de Telecomunicaciones de Cuba",name:"WIFI_ETECSA",shop:"mobile_phone"},removeTags:{brand:"WIFI_ETECSA","brand:wikidata":"Q490323","brand:wikipedia":"es:Empresa de Telecomunicaciones de Cuba",name:"WIFI_ETECSA",shop:"mobile_phone"},matchScore:2,suggestion:true},"shop/mobile_phone/Wind":{name:"Wind",icon:"maki-mobile-phone",geometry:["point","area"],tags:{shop:"mobile_phone","brand:wikidata":"Q650467"},addTags:{brand:"Wind","brand:wikidata":"Q650467","brand:wikipedia":"en:WIND (Italy)",name:"Wind",shop:"mobile_phone"},removeTags:{brand:"Wind","brand:wikidata":"Q650467","brand:wikipedia":"en:WIND (Italy)",name:"Wind",shop:"mobile_phone"},matchScore:2,suggestion:true},"shop/mobile_phone/Yoigo":{name:"Yoigo",icon:"maki-mobile-phone",geometry:["point","area"],tags:{shop:"mobile_phone","brand:wikidata":"Q2630989"},addTags:{brand:"Yoigo","brand:wikidata":"Q2630989","brand:wikipedia":"en:Yoigo",name:"Yoigo",shop:"mobile_phone"},removeTags:{brand:"Yoigo","brand:wikidata":"Q2630989","brand:wikipedia":"en:Yoigo",name:"Yoigo",shop:"mobile_phone"},matchScore:2,suggestion:true},"shop/mobile_phone/auショップ":{name:"auショップ",icon:"maki-mobile-phone",geometry:["point","area"],tags:{shop:"mobile_phone","brand:wikidata":"Q11190521"},addTags:{brand:"au","brand:wikidata":"Q11190521","brand:wikipedia":"ja:au (通信)",name:"auショップ",shop:"mobile_phone"},removeTags:{brand:"au","brand:wikidata":"Q11190521","brand:wikipedia":"ja:au (通信)",name:"auショップ",shop:"mobile_phone"},matchScore:2,suggestion:true},"shop/mobile_phone/Алло":{name:"Алло",icon:"maki-mobile-phone",geometry:["point","area"],tags:{shop:"mobile_phone","brand:wikidata":"Q18683057"},addTags:{brand:"Алло","brand:wikidata":"Q18683057","brand:wikipedia":"uk:Алло (торгова мережа)",name:"Алло",shop:"mobile_phone"},removeTags:{brand:"Алло","brand:wikidata":"Q18683057","brand:wikipedia":"uk:Алло (торгова мережа)",name:"Алло",shop:"mobile_phone"},matchScore:2,suggestion:true},"shop/mobile_phone/Билайн":{name:"Билайн",icon:"maki-mobile-phone",geometry:["point","area"],tags:{shop:"mobile_phone","brand:wikidata":"Q402880"},addTags:{brand:"Билайн","brand:en":"Beeline","brand:wikidata":"Q402880","brand:wikipedia":"en:Beeline (brand)",name:"Билайн","name:en":"Beeline",shop:"mobile_phone"},removeTags:{brand:"Билайн","brand:en":"Beeline","brand:wikidata":"Q402880","brand:wikipedia":"en:Beeline (brand)",name:"Билайн","name:en":"Beeline",shop:"mobile_phone"},matchScore:2,suggestion:true},"shop/mobile_phone/Евросеть":{name:"Евросеть",icon:"maki-mobile-phone",geometry:["point","area"],tags:{shop:"mobile_phone","brand:wikidata":"Q65310"},addTags:{brand:"Евросеть","brand:en":"Euroset","brand:wikidata":"Q65310","brand:wikipedia":"en:Euroset",name:"Евросеть","name:en":"Euroset",shop:"mobile_phone"},removeTags:{brand:"Евросеть","brand:en":"Euroset","brand:wikidata":"Q65310","brand:wikipedia":"en:Euroset",name:"Евросеть","name:en":"Euroset",shop:"mobile_phone"},matchScore:2,suggestion:true},"shop/mobile_phone/Київстар":{name:"Київстар",icon:"maki-mobile-phone",geometry:["point","area"],tags:{shop:"mobile_phone","brand:wikidata":"Q2288463"},addTags:{brand:"Київстар","brand:en":"Kyivstar","brand:wikidata":"Q2288463","brand:wikipedia":"en:Kyivstar",name:"Київстар","name:en":"Kyivstar",shop:"mobile_phone"},removeTags:{brand:"Київстар","brand:en":"Kyivstar","brand:wikidata":"Q2288463","brand:wikipedia":"en:Kyivstar",name:"Київстар","name:en":"Kyivstar",shop:"mobile_phone"},matchScore:2,suggestion:true},"shop/mobile_phone/МТС":{name:"МТС",icon:"maki-mobile-phone",geometry:["point","area"],tags:{shop:"mobile_phone","brand:wikidata":"Q1368919"},addTags:{brand:"МТС","brand:en":"MTS","brand:wikidata":"Q1368919","brand:wikipedia":"en:MTS (network provider)",name:"МТС","name:en":"MTS",shop:"mobile_phone"},removeTags:{brand:"МТС","brand:en":"MTS","brand:wikidata":"Q1368919","brand:wikipedia":"en:MTS (network provider)",name:"МТС","name:en":"MTS",shop:"mobile_phone"},matchScore:2,suggestion:true},"shop/mobile_phone/Мегафон":{name:"Мегафон",icon:"maki-mobile-phone",geometry:["point","area"],tags:{shop:"mobile_phone","brand:wikidata":"Q1720713"},addTags:{brand:"Мегафон","brand:en":"MegaFon","brand:wikidata":"Q1720713","brand:wikipedia":"en:MegaFon",name:"Мегафон","name:en":"MegaFon",shop:"mobile_phone"},removeTags:{brand:"Мегафон","brand:en":"MegaFon","brand:wikidata":"Q1720713","brand:wikipedia":"en:MegaFon",name:"Мегафон","name:en":"MegaFon",shop:"mobile_phone"},matchScore:2,suggestion:true},"shop/mobile_phone/Связной":{name:"Связной",icon:"maki-mobile-phone",geometry:["point","area"],tags:{shop:"mobile_phone","brand:wikidata":"Q65371"},addTags:{brand:"Связной","brand:en":"Svyaznoy","brand:wikidata":"Q65371","brand:wikipedia":"en:Svyaznoy",name:"Связной","name:en":"Svyaznoy",shop:"mobile_phone"},removeTags:{brand:"Связной","brand:en":"Svyaznoy","brand:wikidata":"Q65371","brand:wikipedia":"en:Svyaznoy",name:"Связной","name:en":"Svyaznoy",shop:"mobile_phone"},matchScore:2,suggestion:true},"shop/mobile_phone/Теле2":{name:"Теле2",icon:"maki-mobile-phone",geometry:["point","area"],tags:{shop:"mobile_phone","brand:wikidata":"Q309865"},addTags:{brand:"Теле2","brand:en":"Tele2","brand:wikidata":"Q309865","brand:wikipedia":"en:Tele2",name:"Теле2","name:en":"Tele2",shop:"mobile_phone"},removeTags:{brand:"Теле2","brand:en":"Tele2","brand:wikidata":"Q309865","brand:wikipedia":"en:Tele2",name:"Теле2","name:en":"Tele2",shop:"mobile_phone"},matchScore:2,suggestion:true},"shop/mobile_phone/ソフトバンク":{name:"ソフトバンク",icon:"maki-mobile-phone",geometry:["point","area"],tags:{shop:"mobile_phone","brand:wikidata":"Q7553832"},addTags:{brand:"ソフトバンク","brand:en":"SoftBank Telecom","brand:wikidata":"Q7553832","brand:wikipedia":"en:SoftBank Telecom",name:"ソフトバンク","name:en":"SoftBank Telecom",shop:"mobile_phone"},removeTags:{brand:"ソフトバンク","brand:en":"SoftBank Telecom","brand:wikidata":"Q7553832","brand:wikipedia":"en:SoftBank Telecom",name:"ソフトバンク","name:en":"SoftBank Telecom",shop:"mobile_phone"},matchScore:2,suggestion:true},"shop/mobile_phone/ソフトバンクショップ":{name:"ソフトバンクショップ",icon:"maki-mobile-phone",geometry:["point","area"],tags:{shop:"mobile_phone","brand:wikidata":"Q11315281"},addTags:{brand:"ソフトバンクショップ","brand:en":"SoftBankShop","brand:wikidata":"Q11315281","brand:wikipedia":"ja:ソフトバンクショップ",name:"ソフトバンクショップ","name:en":"SoftBankShop",shop:"mobile_phone"},removeTags:{brand:"ソフトバンクショップ","brand:en":"SoftBankShop","brand:wikidata":"Q11315281","brand:wikipedia":"ja:ソフトバンクショップ",name:"ソフトバンクショップ","name:en":"SoftBankShop",shop:"mobile_phone"},matchScore:2,suggestion:true},"shop/mobile_phone/ドコモショップ":{name:"ドコモショップ",icon:"maki-mobile-phone",geometry:["point","area"],tags:{shop:"mobile_phone","brand:wikidata":"Q853958"},addTags:{brand:"ドコモショップ","brand:en":"DoCoMo Shop","brand:wikidata":"Q853958","brand:wikipedia":"ja:NTTドコモ",name:"ドコモショップ","name:en":"DoCoMo Shop",shop:"mobile_phone"},removeTags:{brand:"ドコモショップ","brand:en":"DoCoMo Shop","brand:wikidata":"Q853958","brand:wikipedia":"ja:NTTドコモ",name:"ドコモショップ","name:en":"DoCoMo Shop",shop:"mobile_phone"},matchScore:2,suggestion:true},"shop/money_lender/Money Mart":{name:"Money Mart",icon:"maki-bank",geometry:["point","area"],tags:{shop:"money_lender","brand:wikidata":"Q6899166"},addTags:{brand:"Money Mart","brand:wikidata":"Q6899166","brand:wikipedia":"en:Money Mart",name:"Money Mart",shop:"money_lender"},removeTags:{brand:"Money Mart","brand:wikidata":"Q6899166","brand:wikipedia":"en:Money Mart",name:"Money Mart",shop:"money_lender"},matchScore:2,suggestion:true},"shop/motorcycle/Harley-Davidson":{name:"Harley-Davidson",icon:"fas-motorcycle",geometry:["point","area"],tags:{shop:"motorcycle","brand:wikidata":"Q192814"},addTags:{brand:"Harley-Davidson","brand:wikidata":"Q192814","brand:wikipedia":"en:Harley-Davidson",name:"Harley-Davidson",shop:"motorcycle"},removeTags:{brand:"Harley-Davidson","brand:wikidata":"Q192814","brand:wikipedia":"en:Harley-Davidson",name:"Harley-Davidson",shop:"motorcycle"},matchScore:2,suggestion:true},"shop/motorcycle/Honda":{name:"Honda",icon:"fas-motorcycle",geometry:["point","area"],tags:{shop:"motorcycle","brand:wikidata":"Q9584"},addTags:{brand:"Honda","brand:wikidata":"Q9584","brand:wikipedia":"en:Honda",name:"Honda",shop:"motorcycle"},removeTags:{brand:"Honda","brand:wikidata":"Q9584","brand:wikipedia":"en:Honda",name:"Honda",shop:"motorcycle"},matchScore:2,suggestion:true},"shop/motorcycle/Kawasaki":{name:"Kawasaki",icon:"fas-motorcycle",geometry:["point","area"],tags:{shop:"motorcycle","brand:wikidata":"Q6379855"},addTags:{brand:"Kawasaki","brand:wikidata":"Q6379855","brand:wikipedia":"en:Kawasaki motorcycles",name:"Kawasaki",shop:"motorcycle"},removeTags:{brand:"Kawasaki","brand:wikidata":"Q6379855","brand:wikipedia":"en:Kawasaki motorcycles",name:"Kawasaki",shop:"motorcycle"},matchScore:2,suggestion:true},"shop/motorcycle/Motortrade":{name:"Motortrade",icon:"fas-motorcycle",geometry:["point","area"],tags:{shop:"motorcycle","brand:wikidata":"Q48803162"},addTags:{brand:"Motortrade","brand:wikidata":"Q48803162","brand:wikipedia":"en:Motortrade",name:"Motortrade",shop:"motorcycle"},removeTags:{brand:"Motortrade","brand:wikidata":"Q48803162","brand:wikipedia":"en:Motortrade",name:"Motortrade",shop:"motorcycle"},matchScore:2,suggestion:true},"shop/motorcycle/Suzuki":{name:"Suzuki",icon:"fas-motorcycle",geometry:["point","area"],tags:{shop:"motorcycle","brand:wikidata":"Q181642"},addTags:{brand:"Suzuki","brand:wikidata":"Q181642","brand:wikipedia":"en:Suzuki",name:"Suzuki",shop:"motorcycle"},removeTags:{brand:"Suzuki","brand:wikidata":"Q181642","brand:wikipedia":"en:Suzuki",name:"Suzuki",shop:"motorcycle"},matchScore:2,suggestion:true},"shop/motorcycle/Yamaha":{name:"Yamaha",icon:"fas-motorcycle",geometry:["point","area"],tags:{shop:"motorcycle","brand:wikidata":"Q158888"},addTags:{brand:"Yamaha","brand:wikidata":"Q158888","brand:wikipedia":"en:Yamaha Motor Company",name:"Yamaha",shop:"motorcycle"},removeTags:{brand:"Yamaha","brand:wikidata":"Q158888","brand:wikipedia":"en:Yamaha Motor Company",name:"Yamaha",shop:"motorcycle"},matchScore:2,suggestion:true},"shop/musical_instrument/Guitar Center":{name:"Guitar Center",icon:"maki-music",geometry:["point","area"],tags:{shop:"musical_instrument","brand:wikidata":"Q3622794"},addTags:{brand:"Guitar Center","brand:wikidata":"Q3622794","brand:wikipedia":"en:Guitar Center",name:"Guitar Center",shop:"musical_instrument"},removeTags:{brand:"Guitar Center","brand:wikidata":"Q3622794","brand:wikipedia":"en:Guitar Center",name:"Guitar Center",shop:"musical_instrument"},matchScore:2,suggestion:true},"shop/music/HMV":{name:"HMV",icon:"maki-music",geometry:["point","area"],tags:{shop:"music","brand:wikidata":"Q10854572"},addTags:{brand:"HMV","brand:wikidata":"Q10854572","brand:wikipedia":"en:HMV",name:"HMV",shop:"music"},removeTags:{brand:"HMV","brand:wikidata":"Q10854572","brand:wikipedia":"en:HMV",name:"HMV",shop:"music"},matchScore:2,suggestion:true},"shop/music/TSUTAYA":{name:"TSUTAYA",icon:"maki-music",geometry:["point","area"],tags:{shop:"music","brand:wikidata":"Q5193457"},addTags:{brand:"TSUTAYA","brand:wikidata":"Q5193457","brand:wikipedia":"ja:カルチュア・コンビニエンス・クラブ",name:"TSUTAYA",shop:"music"},removeTags:{brand:"TSUTAYA","brand:wikidata":"Q5193457","brand:wikipedia":"ja:カルチュア・コンビニエンス・クラブ",name:"TSUTAYA",shop:"music"},matchScore:2,suggestion:true},"shop/newsagent/Kolporter":{name:"Kolporter",icon:"maki-shop",geometry:["point","area"],tags:{shop:"newsagent","brand:wikidata":"Q6427874"},addTags:{brand:"Kolporter","brand:wikidata":"Q6427874","brand:wikipedia":"pl:Kolporter (przedsiębiorstwo)",name:"Kolporter",shop:"kiosk"},removeTags:{brand:"Kolporter","brand:wikidata":"Q6427874","brand:wikipedia":"pl:Kolporter (przedsiębiorstwo)",name:"Kolporter",shop:"kiosk"},matchScore:2,suggestion:true},"shop/newsagent/読売新聞":{name:"読売新聞",icon:"maki-shop",geometry:["point","area"],tags:{shop:"newsagent","brand:wikidata":"Q645218"},addTags:{brand:"読売新聞","brand:en":"Yomiuri Shimbun","brand:wikidata":"Q645218","brand:wikipedia":"en:Yomiuri Shimbun",name:"読売新聞","name:en":"Yomiuri Shimbun",shop:"newsagent"},removeTags:{brand:"読売新聞","brand:en":"Yomiuri Shimbun","brand:wikidata":"Q645218","brand:wikipedia":"en:Yomiuri Shimbun",name:"読売新聞","name:en":"Yomiuri Shimbun",shop:"newsagent"},matchScore:2,suggestion:true},"shop/nutrition_supplements/GNC":{name:"GNC",icon:"maki-shop",geometry:["point","area"],tags:{shop:"nutrition_supplements","brand:wikidata":"Q4808595"},addTags:{brand:"GNC","brand:wikidata":"Q4808595","brand:wikipedia":"en:GNC (store)",name:"GNC",shop:"nutrition_supplements"},removeTags:{brand:"GNC","brand:wikidata":"Q4808595","brand:wikipedia":"en:GNC (store)",name:"GNC",shop:"nutrition_supplements"},matchScore:2,suggestion:true},"shop/nutrition_supplements/The Vitamin Shoppe":{name:"The Vitamin Shoppe",icon:"maki-shop",geometry:["point","area"],tags:{shop:"nutrition_supplements","brand:wikidata":"Q7772938"},addTags:{brand:"The Vitamin Shoppe","brand:wikidata":"Q7772938","brand:wikipedia":"en:The Vitamin Shoppe",name:"The Vitamin Shoppe",shop:"nutrition_supplements"},removeTags:{brand:"The Vitamin Shoppe","brand:wikidata":"Q7772938","brand:wikipedia":"en:The Vitamin Shoppe",name:"The Vitamin Shoppe",shop:"nutrition_supplements"},matchScore:2,suggestion:true},"shop/optician/Alain Afflelou":{name:"Alain Afflelou",icon:"maki-optician",geometry:["point","area"],tags:{shop:"optician","brand:wikidata":"Q2829511"},addTags:{brand:"Alain Afflelou","brand:wikidata":"Q2829511","brand:wikipedia":"fr:Alain Afflelou (entreprise)",name:"Alain Afflelou",shop:"optician"},removeTags:{brand:"Alain Afflelou","brand:wikidata":"Q2829511","brand:wikipedia":"fr:Alain Afflelou (entreprise)",name:"Alain Afflelou",shop:"optician"},matchScore:2,suggestion:true},"shop/optician/Apollo":{name:"Apollo",icon:"maki-optician",geometry:["point","area"],tags:{shop:"optician","brand:wikidata":"Q618940"},addTags:{brand:"Apollo","brand:wikidata":"Q618940","brand:wikipedia":"de:Apollo-Optik",name:"Apollo",shop:"optician"},removeTags:{brand:"Apollo","brand:wikidata":"Q618940","brand:wikipedia":"de:Apollo-Optik",name:"Apollo",shop:"optician"},matchScore:2,suggestion:true},"shop/optician/Atol":{name:"Atol",icon:"maki-optician",geometry:["point","area"],tags:{shop:"optician","brand:wikidata":"Q2869542"},addTags:{brand:"Atol","brand:wikidata":"Q2869542","brand:wikipedia":"fr:Atol (opticien)",name:"Atol",shop:"optician"},removeTags:{brand:"Atol","brand:wikidata":"Q2869542","brand:wikipedia":"fr:Atol (opticien)",name:"Atol",shop:"optician"},matchScore:2,suggestion:true},"shop/optician/Boots Opticians":{name:"Boots Opticians",icon:"maki-optician",geometry:["point","area"],tags:{shop:"optician","brand:wikidata":"Q4944037"},addTags:{brand:"Boots Opticians","brand:wikidata":"Q4944037","brand:wikipedia":"en:Boots Opticians",name:"Boots Opticians",shop:"optician"},removeTags:{brand:"Boots Opticians","brand:wikidata":"Q4944037","brand:wikipedia":"en:Boots Opticians",name:"Boots Opticians",shop:"optician"},matchScore:2,suggestion:true},"shop/optician/Fielmann":{name:"Fielmann",icon:"maki-optician",geometry:["point","area"],tags:{shop:"optician","brand:wikidata":"Q457822"},addTags:{brand:"Fielmann","brand:wikidata":"Q457822","brand:wikipedia":"en:Fielmann",name:"Fielmann",shop:"optician"},removeTags:{brand:"Fielmann","brand:wikidata":"Q457822","brand:wikipedia":"en:Fielmann",name:"Fielmann",shop:"optician"},matchScore:2,suggestion:true},"shop/optician/Grand Optical":{name:"Grand Optical",icon:"maki-optician",geometry:["point","area"],tags:{shop:"optician","brand:wikidata":"Q3113677"},addTags:{brand:"Grand Optical","brand:wikidata":"Q3113677","brand:wikipedia":"fr:Grand Optical",name:"Grand Optical",shop:"optician"},removeTags:{brand:"Grand Optical","brand:wikidata":"Q3113677","brand:wikipedia":"fr:Grand Optical",name:"Grand Optical",shop:"optician"},matchScore:2,suggestion:true},"shop/optician/Hakim Optical":{name:"Hakim Optical",icon:"maki-optician",geometry:["point","area"],tags:{shop:"optician","brand:wikidata":"Q28232761"},addTags:{brand:"Hakim Optical","brand:wikidata":"Q28232761","brand:wikipedia":"en:Hakim Optical",name:"Hakim Optical",shop:"optician"},removeTags:{brand:"Hakim Optical","brand:wikidata":"Q28232761","brand:wikipedia":"en:Hakim Optical",name:"Hakim Optical",shop:"optician"},matchScore:2,suggestion:true},"shop/optician/Hans Anders":{name:"Hans Anders",icon:"maki-optician",geometry:["point","area"],tags:{shop:"optician","brand:wikidata":"Q1884976"},addTags:{brand:"Hans Anders","brand:wikidata":"Q1884976","brand:wikipedia":"nl:Hans Anders",name:"Hans Anders",shop:"optician"},removeTags:{brand:"Hans Anders","brand:wikidata":"Q1884976","brand:wikipedia":"nl:Hans Anders",name:"Hans Anders",shop:"optician"},matchScore:2,suggestion:true},"shop/optician/Krys":{name:"Krys",icon:"maki-optician",geometry:["point","area"],tags:{shop:"optician","brand:wikidata":"Q3119538"},addTags:{brand:"Krys","brand:wikidata":"Q3119538","brand:wikipedia":"fr:Krys Group",name:"Krys",shop:"optician"},removeTags:{brand:"Krys","brand:wikidata":"Q3119538","brand:wikipedia":"fr:Krys Group",name:"Krys",shop:"optician"},matchScore:2,suggestion:true},"shop/optician/LensCrafters":{name:"LensCrafters",icon:"maki-optician",geometry:["point","area"],tags:{shop:"optician","brand:wikidata":"Q6523209"},addTags:{brand:"LensCrafters","brand:wikidata":"Q6523209","brand:wikipedia":"en:LensCrafters",name:"LensCrafters",shop:"optician"},removeTags:{brand:"LensCrafters","brand:wikidata":"Q6523209","brand:wikipedia":"en:LensCrafters",name:"LensCrafters",shop:"optician"},matchScore:2,suggestion:true},"shop/optician/Les Opticiens Mutualistes":{name:"Les Opticiens Mutualistes",icon:"maki-optician",geometry:["point","area"],tags:{shop:"optician","brand:wikidata":"Q18414551"},addTags:{brand:"Les Opticiens Mutualistes","brand:wikidata":"Q18414551","brand:wikipedia":"fr:Les Opticiens Mutualistes",name:"Les Opticiens Mutualistes",shop:"optician"},removeTags:{brand:"Les Opticiens Mutualistes","brand:wikidata":"Q18414551","brand:wikipedia":"fr:Les Opticiens Mutualistes",name:"Les Opticiens Mutualistes",shop:"optician"},matchScore:2,suggestion:true},"shop/optician/Optic 2000":{name:"Optic 2000",icon:"maki-optician",geometry:["point","area"],tags:{shop:"optician","brand:wikidata":"Q3354445"},addTags:{brand:"Optic 2000","brand:wikidata":"Q3354445","brand:wikipedia":"fr:Optic 2000",name:"Optic 2000",shop:"optician"},removeTags:{brand:"Optic 2000","brand:wikidata":"Q3354445","brand:wikipedia":"fr:Optic 2000",name:"Optic 2000",shop:"optician"},matchScore:2,suggestion:true},"shop/optician/Pearle":{name:"Pearle",icon:"maki-optician",geometry:["point","area"],tags:{shop:"optician","brand:wikidata":"Q2231148"},addTags:{brand:"Pearle","brand:wikidata":"Q2231148","brand:wikipedia":"en:Pearle Vision",name:"Pearle",shop:"optician"},removeTags:{brand:"Pearle","brand:wikidata":"Q2231148","brand:wikipedia":"en:Pearle Vision",name:"Pearle",shop:"optician"},matchScore:2,suggestion:true},"shop/optician/Pearle Vision":{name:"Pearle Vision",icon:"maki-optician",geometry:["point","area"],tags:{shop:"optician","brand:wikidata":"Q2231148"},addTags:{brand:"Pearle Vision","brand:wikidata":"Q2231148","brand:wikipedia":"en:Pearle Vision",name:"Pearle Vision",shop:"optician"},removeTags:{brand:"Pearle Vision","brand:wikidata":"Q2231148","brand:wikipedia":"en:Pearle Vision",name:"Pearle Vision",shop:"optician"},matchScore:2,suggestion:true},"shop/optician/Specsavers":{name:"Specsavers",icon:"maki-optician",geometry:["point","area"],tags:{shop:"optician","brand:wikidata":"Q2000610"},addTags:{brand:"Specsavers","brand:wikidata":"Q2000610","brand:wikipedia":"en:Specsavers",name:"Specsavers",shop:"optician"},removeTags:{brand:"Specsavers","brand:wikidata":"Q2000610","brand:wikipedia":"en:Specsavers",name:"Specsavers",shop:"optician"},matchScore:2,suggestion:true},"shop/optician/Sunglass Hut":{name:"Sunglass Hut",icon:"maki-optician",geometry:["point","area"],tags:{shop:"optician","brand:wikidata":"Q136311"},addTags:{brand:"Sunglass Hut","brand:wikidata":"Q136311","brand:wikipedia":"en:Sunglass Hut",name:"Sunglass Hut",shop:"optician"},removeTags:{brand:"Sunglass Hut","brand:wikidata":"Q136311","brand:wikipedia":"en:Sunglass Hut",name:"Sunglass Hut",shop:"optician"},matchScore:2,suggestion:true},"shop/optician/Synoptik":{name:"Synoptik",icon:"maki-optician",geometry:["point","area"],tags:{shop:"optician","brand:wikidata":"Q10687541"},addTags:{brand:"Synoptik","brand:wikidata":"Q10687541","brand:wikipedia":"sv:Synoptik",name:"Synoptik",shop:"optician"},removeTags:{brand:"Synoptik","brand:wikidata":"Q10687541","brand:wikipedia":"sv:Synoptik",name:"Synoptik",shop:"optician"},matchScore:2,suggestion:true},"shop/optician/Synsam":{name:"Synsam",icon:"maki-optician",geometry:["point","area"],tags:{shop:"optician","brand:wikidata":"Q12004589"},addTags:{brand:"Synsam","brand:wikidata":"Q12004589","brand:wikipedia":"sv:Synsam",name:"Synsam",shop:"optician"},removeTags:{brand:"Synsam","brand:wikidata":"Q12004589","brand:wikipedia":"sv:Synsam",name:"Synsam",shop:"optician"},matchScore:2,suggestion:true},"shop/optician/Vision Express":{name:"Vision Express",icon:"maki-optician",geometry:["point","area"],tags:{shop:"optician","brand:wikidata":"Q7936150"},addTags:{brand:"Vision Express","brand:wikidata":"Q7936150","brand:wikipedia":"en:Vision Express",name:"Vision Express",shop:"optician"},removeTags:{brand:"Vision Express","brand:wikidata":"Q7936150","brand:wikipedia":"en:Vision Express",name:"Vision Express",shop:"optician"},matchScore:2,suggestion:true},"shop/optician/Visionworks":{name:"Visionworks",icon:"maki-optician",geometry:["point","area"],tags:{shop:"optician","brand:wikidata":"Q5422607"},addTags:{brand:"Visionworks","brand:wikidata":"Q5422607","brand:wikipedia":"en:Visionworks",name:"Visionworks",shop:"optician"},removeTags:{brand:"Visionworks","brand:wikidata":"Q5422607","brand:wikipedia":"en:Visionworks",name:"Visionworks",shop:"optician"},matchScore:2,suggestion:true},"shop/optician/メガネスーパー":{name:"メガネスーパー",icon:"maki-optician",geometry:["point","area"],tags:{shop:"optician","brand:wikidata":"Q11343504"},addTags:{brand:"メガネスーパー","brand:wikidata":"Q11343504","brand:wikipedia":"ja:メガネスーパー",name:"メガネスーパー",shop:"optician"},removeTags:{brand:"メガネスーパー","brand:wikidata":"Q11343504","brand:wikipedia":"ja:メガネスーパー",name:"メガネスーパー",shop:"optician"},matchScore:2,suggestion:true},"shop/outdoor/Jack Wolfskin":{name:"Jack Wolfskin",icon:"temaki-compass",geometry:["point","area"],tags:{shop:"outdoor","brand:wikidata":"Q536133"},addTags:{brand:"Jack Wolfskin","brand:wikidata":"Q536133","brand:wikipedia":"en:Jack Wolfskin",name:"Jack Wolfskin",shop:"outdoor"},removeTags:{brand:"Jack Wolfskin","brand:wikidata":"Q536133","brand:wikipedia":"en:Jack Wolfskin",name:"Jack Wolfskin",shop:"outdoor"},matchScore:2,suggestion:true},"shop/outdoor/Kathmandu":{name:"Kathmandu",icon:"temaki-compass",geometry:["point","area"],tags:{shop:"outdoor","brand:wikidata":"Q1736294"},addTags:{brand:"Kathmandu","brand:wikidata":"Q1736294","brand:wikipedia":"en:Kathmandu (company)",name:"Kathmandu",shop:"outdoor"},removeTags:{brand:"Kathmandu","brand:wikidata":"Q1736294","brand:wikipedia":"en:Kathmandu (company)",name:"Kathmandu",shop:"outdoor"},matchScore:2,suggestion:true},"shop/outdoor/Mountain Warehouse":{name:"Mountain Warehouse",icon:"temaki-compass",geometry:["point","area"],tags:{shop:"outdoor","brand:wikidata":"Q6925414"},addTags:{brand:"Mountain Warehouse","brand:wikidata":"Q6925414","brand:wikipedia":"en:Mountain Warehouse",name:"Mountain Warehouse",shop:"outdoor"},removeTags:{brand:"Mountain Warehouse","brand:wikidata":"Q6925414","brand:wikipedia":"en:Mountain Warehouse",name:"Mountain Warehouse",shop:"outdoor"},matchScore:2,suggestion:true},"shop/outdoor/REI":{name:"REI",icon:"temaki-compass",geometry:["point","area"],tags:{shop:"outdoor","brand:wikidata":"Q3414933"},addTags:{brand:"REI","brand:wikidata":"Q3414933","brand:wikipedia":"en:Recreational Equipment, Inc.",name:"REI",shop:"outdoor"},removeTags:{brand:"REI","brand:wikidata":"Q3414933","brand:wikipedia":"en:Recreational Equipment, Inc.",name:"REI",shop:"outdoor"},matchScore:2,suggestion:true},"shop/outdoor/Trespass":{name:"Trespass",icon:"temaki-compass",geometry:["point","area"],tags:{shop:"outdoor","brand:wikidata":"Q17035733"},addTags:{brand:"Trespass","brand:wikidata":"Q17035733","brand:wikipedia":"en:Trespass (clothing)",name:"Trespass",shop:"outdoor"},removeTags:{brand:"Trespass","brand:wikidata":"Q17035733","brand:wikipedia":"en:Trespass (clothing)",name:"Trespass",shop:"outdoor"},matchScore:2,suggestion:true},"shop/paint/Benjamin Moore":{name:"Benjamin Moore",icon:"fas-paint-roller",geometry:["point","area"],tags:{shop:"paint","brand:wikidata":"Q4889038"},addTags:{brand:"Benjamin Moore","brand:wikidata":"Q4889038","brand:wikipedia":"en:Benjamin Moore & Co.",name:"Benjamin Moore",shop:"paint"},removeTags:{brand:"Benjamin Moore","brand:wikidata":"Q4889038","brand:wikipedia":"en:Benjamin Moore & Co.",name:"Benjamin Moore",shop:"paint"},matchScore:2,suggestion:true},"shop/paint/Comex":{name:"Comex",icon:"fas-paint-roller",geometry:["point","area"],tags:{shop:"paint","brand:wikidata":"Q5151654"},addTags:{brand:"Comex","brand:wikidata":"Q5151654","brand:wikipedia":"en:Comex Group",name:"Comex",shop:"paint"},removeTags:{brand:"Comex","brand:wikidata":"Q5151654","brand:wikipedia":"en:Comex Group",name:"Comex",shop:"paint"},matchScore:2,suggestion:true},"shop/paint/Jotun":{name:"Jotun",icon:"fas-paint-roller",geometry:["point","area"],tags:{shop:"paint","brand:wikidata":"Q1778870"},addTags:{brand:"Jotun","brand:wikidata":"Q1778870","brand:wikipedia":"en:Jotun (company)",name:"Jotun",shop:"paint"},removeTags:{brand:"Jotun","brand:wikidata":"Q1778870","brand:wikipedia":"en:Jotun (company)",name:"Jotun",shop:"paint"},matchScore:2,suggestion:true},"shop/paint/Sherwin Williams":{name:"Sherwin Williams",icon:"fas-paint-roller",geometry:["point","area"],tags:{shop:"paint","brand:wikidata":"Q48881"},addTags:{brand:"Sherwin Williams","brand:wikidata":"Q48881","brand:wikipedia":"en:Sherwin-Williams",name:"Sherwin Williams",shop:"paint"},removeTags:{brand:"Sherwin Williams","brand:wikidata":"Q48881","brand:wikipedia":"en:Sherwin-Williams",name:"Sherwin Williams",shop:"paint"},matchScore:2,suggestion:true},"shop/party/Party City":{name:"Party City",icon:"maki-shop",geometry:["point","area"],tags:{shop:"party","brand:wikidata":"Q7140896"},addTags:{brand:"Party City","brand:wikidata":"Q7140896","brand:wikipedia":"en:Party City",name:"Party City",shop:"party"},removeTags:{brand:"Party City","brand:wikidata":"Q7140896","brand:wikipedia":"en:Party City",name:"Party City",shop:"party"},matchScore:2,suggestion:true},"shop/pawnbroker/Cash Converters":{name:"Cash Converters",icon:"maki-shop",geometry:["point","area"],tags:{shop:"pawnbroker","brand:wikidata":"Q5048645"},addTags:{brand:"Cash Converters","brand:wikidata":"Q5048645","brand:wikipedia":"en:Cash Converters",name:"Cash Converters",shop:"pawnbroker"},removeTags:{brand:"Cash Converters","brand:wikidata":"Q5048645","brand:wikipedia":"en:Cash Converters",name:"Cash Converters",shop:"pawnbroker"},matchScore:2,suggestion:true},"shop/pawnbroker/Cebuana Lhuillier":{name:"Cebuana Lhuillier",icon:"maki-shop",geometry:["point","area"],tags:{shop:"pawnbroker","brand:wikidata":"Q17064661"},addTags:{brand:"Cebuana Lhuillier","brand:wikidata":"Q17064661","brand:wikipedia":"en:Cebuana Lhuillier",name:"Cebuana Lhuillier",shop:"pawnbroker"},removeTags:{brand:"Cebuana Lhuillier","brand:wikidata":"Q17064661","brand:wikipedia":"en:Cebuana Lhuillier",name:"Cebuana Lhuillier",shop:"pawnbroker"},matchScore:2,suggestion:true},"shop/perfumery/Douglas":{name:"Douglas",icon:"maki-shop",geometry:["point","area"],tags:{shop:"perfumery","brand:wikidata":"Q2052213"},addTags:{brand:"Douglas","brand:wikidata":"Q2052213","brand:wikipedia":"de:Parfümerie Douglas",name:"Douglas",shop:"perfumery"},removeTags:{brand:"Douglas","brand:wikidata":"Q2052213","brand:wikipedia":"de:Parfümerie Douglas",name:"Douglas",shop:"perfumery"},matchScore:2,suggestion:true},"shop/perfumery/ICI PARIS XL":{name:"ICI PARIS XL",icon:"maki-shop",geometry:["point","area"],tags:{shop:"perfumery","brand:wikidata":"Q769749"},addTags:{brand:"ICI PARIS XL","brand:wikidata":"Q769749","brand:wikipedia":"en:ICI Paris XL",name:"ICI PARIS XL",shop:"perfumery"},removeTags:{brand:"ICI PARIS XL","brand:wikidata":"Q769749","brand:wikipedia":"en:ICI Paris XL",name:"ICI PARIS XL",shop:"perfumery"},matchScore:2,suggestion:true},"shop/perfumery/Marionnaud":{name:"Marionnaud",icon:"maki-shop",geometry:["point","area"],tags:{shop:"perfumery","brand:wikidata":"Q1129073"},addTags:{brand:"Marionnaud","brand:wikidata":"Q1129073","brand:wikipedia":"fr:Marionnaud Parfumeries",name:"Marionnaud",shop:"perfumery"},removeTags:{brand:"Marionnaud","brand:wikidata":"Q1129073","brand:wikipedia":"fr:Marionnaud Parfumeries",name:"Marionnaud",shop:"perfumery"},matchScore:2,suggestion:true},"shop/perfumery/O Boticário":{name:"O Boticário",icon:"maki-shop",geometry:["point","area"],tags:{shop:"perfumery","brand:wikidata":"Q7073219"},addTags:{brand:"O Boticário","brand:wikidata":"Q7073219","brand:wikipedia":"en:O Boticário",name:"O Boticário",shop:"perfumery"},removeTags:{brand:"O Boticário","brand:wikidata":"Q7073219","brand:wikipedia":"en:O Boticário",name:"O Boticário",shop:"perfumery"},matchScore:2,suggestion:true},"shop/pet/Das Futterhaus":{name:"Das Futterhaus",icon:"maki-dog-park",geometry:["point","area"],tags:{shop:"pet","brand:wikidata":"Q1167914"},addTags:{brand:"Das Futterhaus","brand:wikidata":"Q1167914","brand:wikipedia":"de:Das Futterhaus",name:"Das Futterhaus",shop:"pet"},removeTags:{brand:"Das Futterhaus","brand:wikidata":"Q1167914","brand:wikipedia":"de:Das Futterhaus",name:"Das Futterhaus",shop:"pet"},matchScore:2,suggestion:true},"shop/pet/Fressnapf":{name:"Fressnapf",icon:"maki-dog-park",geometry:["point","area"],tags:{shop:"pet","brand:wikidata":"Q875796"},addTags:{brand:"Fressnapf","brand:wikidata":"Q875796","brand:wikipedia":"en:Fressnapf",name:"Fressnapf",shop:"pet"},removeTags:{brand:"Fressnapf","brand:wikidata":"Q875796","brand:wikipedia":"en:Fressnapf",name:"Fressnapf",shop:"pet"},matchScore:2,suggestion:true},"shop/pet/Global Pet Foods":{name:"Global Pet Foods",icon:"maki-dog-park",geometry:["point","area"],tags:{shop:"pet","brand:wikidata":"Q57985699"},addTags:{brand:"Global Pet Foods","brand:wikidata":"Q57985699",name:"Global Pet Foods",shop:"pet"},removeTags:{brand:"Global Pet Foods","brand:wikidata":"Q57985699",name:"Global Pet Foods",shop:"pet"},matchScore:2,suggestion:true},"shop/pet/Maxi Zoo":{name:"Maxi Zoo",icon:"maki-dog-park",geometry:["point","area"],tags:{shop:"pet","brand:wikidata":"Q875796"},addTags:{brand:"Maxi Zoo","brand:wikidata":"Q875796","brand:wikipedia":"en:Fressnapf",name:"Maxi Zoo",shop:"pet"},removeTags:{brand:"Maxi Zoo","brand:wikidata":"Q875796","brand:wikipedia":"en:Fressnapf",name:"Maxi Zoo",shop:"pet"},matchScore:2,suggestion:true},"shop/pet/Mud Bay":{name:"Mud Bay",icon:"maki-dog-park",geometry:["point","area"],tags:{shop:"pet","brand:wikidata":"Q30324179"},addTags:{brand:"Mud Bay","brand:wikidata":"Q30324179","brand:wikipedia":"en:Mud Bay pet store",name:"Mud Bay",shop:"pet"},removeTags:{brand:"Mud Bay","brand:wikidata":"Q30324179","brand:wikipedia":"en:Mud Bay pet store",name:"Mud Bay",shop:"pet"},matchScore:2,suggestion:true},"shop/pet/Pet Supplies Plus":{name:"Pet Supplies Plus",icon:"maki-dog-park",geometry:["point","area"],tags:{shop:"pet","brand:wikidata":"Q7171563"},addTags:{brand:"Pet Supplies Plus","brand:wikidata":"Q7171563","brand:wikipedia":"en:Pet Supplies Plus",name:"Pet Supplies Plus",shop:"pet"},removeTags:{brand:"Pet Supplies Plus","brand:wikidata":"Q7171563","brand:wikipedia":"en:Pet Supplies Plus",name:"Pet Supplies Plus",shop:"pet"},matchScore:2,suggestion:true},"shop/pet/Pet Valu":{name:"Pet Valu",icon:"maki-dog-park",geometry:["point","area"],tags:{shop:"pet","brand:wikidata":"Q58009635"},addTags:{brand:"Pet Valu","brand:wikidata":"Q58009635",name:"Pet Valu",shop:"pet"},removeTags:{brand:"Pet Valu","brand:wikidata":"Q58009635",name:"Pet Valu",shop:"pet"},matchScore:2,suggestion:true},"shop/pet/PetSmart":{name:"PetSmart",icon:"maki-dog-park",geometry:["point","area"],tags:{shop:"pet","brand:wikidata":"Q3307147"},addTags:{brand:"PetSmart","brand:wikidata":"Q3307147","brand:wikipedia":"en:PetSmart",name:"PetSmart",shop:"pet"},removeTags:{brand:"PetSmart","brand:wikidata":"Q3307147","brand:wikipedia":"en:PetSmart",name:"PetSmart",shop:"pet"},matchScore:2,suggestion:true},"shop/pet/Petco":{name:"Petco",icon:"maki-dog-park",geometry:["point","area"],tags:{shop:"pet","brand:wikidata":"Q7171798"},addTags:{brand:"Petco","brand:wikidata":"Q7171798","brand:wikipedia":"en:Petco",name:"Petco",shop:"pet"},removeTags:{brand:"Petco","brand:wikidata":"Q7171798","brand:wikipedia":"en:Petco",name:"Petco",shop:"pet"},matchScore:2,suggestion:true},"shop/pet/Pets at Home":{name:"Pets at Home",icon:"maki-dog-park",geometry:["point","area"],tags:{shop:"pet","brand:wikidata":"Q7179258"},addTags:{brand:"Pets at Home","brand:wikidata":"Q7179258","brand:wikipedia":"en:Pets at Home",name:"Pets at Home",shop:"pet"},removeTags:{brand:"Pets at Home","brand:wikidata":"Q7179258","brand:wikipedia":"en:Pets at Home",name:"Pets at Home",shop:"pet"},matchScore:2,suggestion:true},"shop/photo/Kodak Express":{name:"Kodak Express",icon:"maki-attraction",geometry:["point","area"],tags:{shop:"photo","brand:wikidata":"Q6425126"},addTags:{brand:"Kodak Express","brand:wikidata":"Q6425126","brand:wikipedia":"en:Kodak Express",name:"Kodak Express",shop:"photo"},removeTags:{brand:"Kodak Express","brand:wikidata":"Q6425126","brand:wikipedia":"en:Kodak Express",name:"Kodak Express",shop:"photo"},matchScore:2,suggestion:true},"shop/second_hand/Value Village":{name:"Value Village",icon:"maki-shop",geometry:["point","area"],tags:{shop:"second_hand","brand:wikidata":"Q7428188"},addTags:{brand:"Value Village","brand:wikidata":"Q7428188","brand:wikipedia":"en:Savers",name:"Value Village",shop:"second_hand"},removeTags:{brand:"Value Village","brand:wikidata":"Q7428188","brand:wikipedia":"en:Savers",name:"Value Village",shop:"second_hand"},matchScore:2,suggestion:true},"shop/shoes/Aldo":{name:"Aldo",icon:"maki-shoe",geometry:["point","area"],tags:{shop:"shoes","brand:wikidata":"Q2832297"},addTags:{brand:"Aldo","brand:wikidata":"Q2832297","brand:wikipedia":"en:Aldo Group",name:"Aldo",shop:"shoes"},removeTags:{brand:"Aldo","brand:wikidata":"Q2832297","brand:wikipedia":"en:Aldo Group",name:"Aldo",shop:"shoes"},matchScore:2,suggestion:true},"shop/shoes/André":{name:"André",icon:"maki-shoe",geometry:["point","area"],tags:{shop:"shoes","brand:wikidata":"Q2847114"},addTags:{brand:"André","brand:wikidata":"Q2847114","brand:wikipedia":"fr:André (chaussure)",name:"André",shop:"shoes"},removeTags:{brand:"André","brand:wikidata":"Q2847114","brand:wikipedia":"fr:André (chaussure)",name:"André",shop:"shoes"},matchScore:2,suggestion:true},"shop/shoes/Bata":{name:"Bata",icon:"maki-shoe",geometry:["point","area"],tags:{shop:"shoes","brand:wikidata":"Q688082"},addTags:{brand:"Bata","brand:wikidata":"Q688082","brand:wikipedia":"en:Bata (company)",name:"Bata",shop:"shoes"},removeTags:{brand:"Bata","brand:wikidata":"Q688082","brand:wikipedia":"en:Bata (company)",name:"Bata",shop:"shoes"},matchScore:2,suggestion:true},"shop/shoes/Besson Chaussures":{name:"Besson Chaussures",icon:"maki-shoe",geometry:["point","area"],tags:{shop:"shoes","brand:wikidata":"Q2899930"},addTags:{brand:"Besson Chaussures","brand:wikidata":"Q2899930","brand:wikipedia":"fr:Besson Chaussures",name:"Besson Chaussures",shop:"shoes"},removeTags:{brand:"Besson Chaussures","brand:wikidata":"Q2899930","brand:wikipedia":"fr:Besson Chaussures",name:"Besson Chaussures",shop:"shoes"},matchScore:2,suggestion:true},"shop/shoes/Birkenstock":{name:"Birkenstock",icon:"maki-shoe",geometry:["point","area"],tags:{shop:"shoes","brand:wikidata":"Q648458"},addTags:{brand:"Birkenstock","brand:wikidata":"Q648458","brand:wikipedia":"en:Birkenstock",name:"Birkenstock",shop:"shoes"},removeTags:{brand:"Birkenstock","brand:wikidata":"Q648458","brand:wikipedia":"en:Birkenstock",name:"Birkenstock",shop:"shoes"},matchScore:2,suggestion:true},"shop/shoes/Brantano":{name:"Brantano",icon:"maki-shoe",geometry:["point","area"],tags:{shop:"shoes","brand:wikidata":"Q4957616"},addTags:{brand:"Brantano","brand:wikidata":"Q4957616","brand:wikipedia":"en:Brantano Footwear",name:"Brantano",shop:"shoes"},removeTags:{brand:"Brantano","brand:wikidata":"Q4957616","brand:wikipedia":"en:Brantano Footwear",name:"Brantano",shop:"shoes"},matchScore:2,suggestion:true},"shop/shoes/CCC":{name:"CCC",icon:"maki-shoe",geometry:["point","area"],tags:{shop:"shoes","brand:wikidata":"Q11788344"},addTags:{brand:"CCC","brand:wikidata":"Q11788344","brand:wikipedia":"de:CCC (Unternehmen)",name:"CCC",shop:"shoes"},removeTags:{brand:"CCC","brand:wikidata":"Q11788344","brand:wikipedia":"de:CCC (Unternehmen)",name:"CCC",shop:"shoes"},matchScore:2,suggestion:true},"shop/shoes/Camper":{name:"Camper",icon:"maki-shoe",geometry:["point","area"],tags:{shop:"shoes","brand:wikidata":"Q1030922"},addTags:{brand:"Camper","brand:wikidata":"Q1030922","brand:wikipedia":"en:Camper (company)",name:"Camper",shop:"shoes"},removeTags:{brand:"Camper","brand:wikidata":"Q1030922","brand:wikipedia":"en:Camper (company)",name:"Camper",shop:"shoes"},matchScore:2,suggestion:true},"shop/shoes/Clarks":{name:"Clarks",icon:"maki-shoe",geometry:["point","area"],tags:{shop:"shoes","brand:wikidata":"Q1095857"},addTags:{brand:"Clarks","brand:wikidata":"Q1095857","brand:wikipedia":"en:C. & J. Clark",name:"Clarks",shop:"shoes"},removeTags:{brand:"Clarks","brand:wikidata":"Q1095857","brand:wikipedia":"en:C. & J. Clark",name:"Clarks",shop:"shoes"},matchScore:2,suggestion:true},"shop/shoes/Converse":{name:"Converse",icon:"maki-shoe",geometry:["point","area"],tags:{shop:"shoes","brand:wikidata":"Q319515"},addTags:{brand:"Converse","brand:wikidata":"Q319515","brand:wikipedia":"en:Converse (shoe company)",name:"Converse",shop:"shoes"},removeTags:{brand:"Converse","brand:wikidata":"Q319515","brand:wikipedia":"en:Converse (shoe company)",name:"Converse",shop:"shoes"},matchScore:2,suggestion:true},"shop/shoes/Crocs":{name:"Crocs",icon:"maki-shoe",geometry:["point","area"],tags:{shop:"shoes","brand:wikidata":"Q926699"},addTags:{brand:"Crocs","brand:wikidata":"Q926699","brand:wikipedia":"en:Crocs",name:"Crocs",shop:"shoes"},removeTags:{brand:"Crocs","brand:wikidata":"Q926699","brand:wikipedia":"en:Crocs",name:"Crocs",shop:"shoes"},matchScore:2,suggestion:true},"shop/shoes/DSW":{name:"DSW",icon:"maki-shoe",geometry:["point","area"],tags:{shop:"shoes","brand:wikidata":"Q5206207"},addTags:{brand:"DSW","brand:wikidata":"Q5206207","brand:wikipedia":"en:DSW, Inc.",name:"DSW",shop:"shoes"},removeTags:{brand:"DSW","brand:wikidata":"Q5206207","brand:wikipedia":"en:DSW, Inc.",name:"DSW",shop:"shoes"},matchScore:2,suggestion:true},"shop/shoes/Deichmann":{name:"Deichmann",icon:"maki-shoe",geometry:["point","area"],tags:{shop:"shoes","brand:wikidata":"Q664543"},addTags:{brand:"Deichmann","brand:wikidata":"Q664543","brand:wikipedia":"en:Deichmann SE",name:"Deichmann",shop:"shoes"},removeTags:{brand:"Deichmann","brand:wikidata":"Q664543","brand:wikipedia":"en:Deichmann SE",name:"Deichmann",shop:"shoes"},matchScore:2,suggestion:true},"shop/shoes/Din sko":{name:"Din sko",icon:"maki-shoe",geometry:["point","area"],tags:{shop:"shoes","brand:wikidata":"Q10472869"},addTags:{brand:"Din sko","brand:wikidata":"Q10472869","brand:wikipedia":"sv:Din sko",name:"Din sko",shop:"shoes"},removeTags:{brand:"Din sko","brand:wikidata":"Q10472869","brand:wikipedia":"sv:Din sko",name:"Din sko",shop:"shoes"},matchScore:2,suggestion:true},"shop/shoes/Dosenbach":{name:"Dosenbach",icon:"maki-shoe",geometry:["point","area"],tags:{shop:"shoes","brand:wikidata":"Q2677329"},addTags:{brand:"Dosenbach","brand:wikidata":"Q2677329","brand:wikipedia":"de:Dosenbach-Ochsner",name:"Dosenbach",shop:"shoes"},removeTags:{brand:"Dosenbach","brand:wikidata":"Q2677329","brand:wikipedia":"de:Dosenbach-Ochsner",name:"Dosenbach",shop:"shoes"},matchScore:2,suggestion:true},"shop/shoes/Ecco":{name:"Ecco",icon:"maki-shoe",geometry:["point","area"],tags:{shop:"shoes","brand:wikidata":"Q1280255"},addTags:{brand:"Ecco","brand:wikidata":"Q1280255","brand:wikipedia":"en:ECCO",name:"Ecco",shop:"shoes"},removeTags:{brand:"Ecco","brand:wikidata":"Q1280255","brand:wikipedia":"en:ECCO",name:"Ecco",shop:"shoes"},matchScore:2,suggestion:true},"shop/shoes/Famous Footwear":{name:"Famous Footwear",icon:"maki-shoe",geometry:["point","area"],tags:{shop:"shoes","brand:wikidata":"Q5433457"},addTags:{brand:"Famous Footwear","brand:wikidata":"Q5433457","brand:wikipedia":"en:Famous Footwear",name:"Famous Footwear",shop:"shoes"},removeTags:{brand:"Famous Footwear","brand:wikidata":"Q5433457","brand:wikipedia":"en:Famous Footwear",name:"Famous Footwear",shop:"shoes"},matchScore:2,suggestion:true},"shop/shoes/Foot Locker":{name:"Foot Locker",icon:"maki-shoe",geometry:["point","area"],tags:{shop:"shoes","brand:wikidata":"Q63335"},addTags:{brand:"Foot Locker","brand:wikidata":"Q63335","brand:wikipedia":"en:Foot Locker",name:"Foot Locker",shop:"shoes"},removeTags:{brand:"Foot Locker","brand:wikidata":"Q63335","brand:wikipedia":"en:Foot Locker",name:"Foot Locker",shop:"shoes"},matchScore:2,suggestion:true},"shop/shoes/Geox":{name:"Geox",icon:"maki-shoe",geometry:["point","area"],tags:{shop:"shoes","brand:wikidata":"Q588001"},addTags:{brand:"Geox","brand:wikidata":"Q588001","brand:wikipedia":"en:Geox",name:"Geox",shop:"shoes"},removeTags:{brand:"Geox","brand:wikidata":"Q588001","brand:wikipedia":"en:Geox",name:"Geox",shop:"shoes"},matchScore:2,suggestion:true},"shop/shoes/Humanic":{name:"Humanic",icon:"maki-shoe",geometry:["point","area"],tags:{shop:"shoes","brand:wikidata":"Q1636668"},addTags:{brand:"Humanic","brand:wikidata":"Q1636668","brand:wikipedia":"en:Humanic",name:"Humanic",shop:"shoes"},removeTags:{brand:"Humanic","brand:wikidata":"Q1636668","brand:wikipedia":"en:Humanic",name:"Humanic",shop:"shoes"},matchScore:2,suggestion:true},"shop/shoes/Mephisto":{name:"Mephisto",icon:"maki-shoe",geometry:["point","area"],tags:{shop:"shoes","brand:wikidata":"Q822975"},addTags:{brand:"Mephisto","brand:wikidata":"Q822975","brand:wikipedia":"fr:Mephisto (chaussure)",name:"Mephisto",shop:"shoes"},removeTags:{brand:"Mephisto","brand:wikidata":"Q822975","brand:wikipedia":"fr:Mephisto (chaussure)",name:"Mephisto",shop:"shoes"},matchScore:2,suggestion:true},"shop/shoes/New Balance":{name:"New Balance",icon:"maki-shoe",geometry:["point","area"],tags:{shop:"shoes","brand:wikidata":"Q742988"},addTags:{brand:"New Balance","brand:wikidata":"Q742988","brand:wikipedia":"en:New Balance",name:"New Balance",shop:"shoes"},removeTags:{brand:"New Balance","brand:wikidata":"Q742988","brand:wikipedia":"en:New Balance",name:"New Balance",shop:"shoes"},matchScore:2,suggestion:true},"shop/shoes/Payless ShoeSource":{name:"Payless ShoeSource",icon:"maki-shoe",geometry:["point","area"],tags:{shop:"shoes","brand:wikidata":"Q7156755"},addTags:{brand:"Payless ShoeSource","brand:wikidata":"Q7156755","brand:wikipedia":"en:Payless ShoeSource",name:"Payless ShoeSource",shop:"shoes"},removeTags:{brand:"Payless ShoeSource","brand:wikidata":"Q7156755","brand:wikipedia":"en:Payless ShoeSource",name:"Payless ShoeSource",shop:"shoes"},matchScore:2,suggestion:true},"shop/shoes/Quick Schuh":{name:"Quick Schuh",icon:"maki-shoe",geometry:["point","area"],tags:{shop:"shoes","brand:wikidata":"Q2123069"},addTags:{brand:"Quick Schuh","brand:wikidata":"Q2123069","brand:wikipedia":"de:Quick Schuh",name:"Quick Schuh",shop:"shoes"},removeTags:{brand:"Quick Schuh","brand:wikidata":"Q2123069","brand:wikipedia":"de:Quick Schuh",name:"Quick Schuh",shop:"shoes"},matchScore:2,suggestion:true},"shop/shoes/Rack Room Shoes":{name:"Rack Room Shoes",icon:"maki-shoe",geometry:["point","area"],tags:{shop:"shoes","brand:wikidata":"Q17109937"},addTags:{brand:"Rack Room Shoes","brand:wikidata":"Q17109937","brand:wikipedia":"en:Rack Room Shoes",name:"Rack Room Shoes",shop:"shoes"},removeTags:{brand:"Rack Room Shoes","brand:wikidata":"Q17109937","brand:wikipedia":"en:Rack Room Shoes",name:"Rack Room Shoes",shop:"shoes"},matchScore:2,suggestion:true},"shop/shoes/Reno":{name:"Reno",icon:"maki-shoe",geometry:["point","area"],tags:{shop:"shoes","brand:wikidata":"Q2144204"},addTags:{brand:"Reno","brand:wikidata":"Q2144204","brand:wikipedia":"de:Reno (Schuhhandel)",name:"Reno",shop:"shoes"},removeTags:{brand:"Reno","brand:wikidata":"Q2144204","brand:wikipedia":"de:Reno (Schuhhandel)",name:"Reno",shop:"shoes"},matchScore:2,suggestion:true},"shop/shoes/Rieker":{name:"Rieker",icon:"maki-shoe",geometry:["point","area"],tags:{shop:"shoes","brand:wikidata":"Q2152193"},addTags:{brand:"Rieker","brand:wikidata":"Q2152193","brand:wikipedia":"en:Rieker Shoes",name:"Rieker",shop:"shoes"},removeTags:{brand:"Rieker","brand:wikidata":"Q2152193","brand:wikipedia":"en:Rieker Shoes",name:"Rieker",shop:"shoes"},matchScore:2,suggestion:true},"shop/shoes/Salamander":{name:"Salamander",icon:"maki-shoe",geometry:["point","area"],tags:{shop:"shoes","brand:wikidata":"Q878354"},addTags:{brand:"Salamander","brand:wikidata":"Q878354","brand:wikipedia":"de:Salamander (Schuhe)",name:"Salamander",shop:"shoes"},removeTags:{brand:"Salamander","brand:wikidata":"Q878354","brand:wikipedia":"de:Salamander (Schuhe)",name:"Salamander",shop:"shoes"},matchScore:2,suggestion:true},"shop/shoes/San Marina":{name:"San Marina",icon:"maki-shoe",geometry:["point","area"],tags:{shop:"shoes","brand:wikidata":"Q3471558"},addTags:{brand:"San Marina","brand:wikidata":"Q3471558","brand:wikipedia":"fr:San Marina",name:"San Marina",shop:"shoes"},removeTags:{brand:"San Marina","brand:wikidata":"Q3471558","brand:wikipedia":"fr:San Marina",name:"San Marina",shop:"shoes"},matchScore:2,suggestion:true},"shop/shoes/Scapino":{name:"Scapino",icon:"maki-shoe",geometry:["point","area"],tags:{shop:"shoes","brand:wikidata":"Q2298792"},addTags:{brand:"Scapino","brand:wikidata":"Q2298792","brand:wikipedia":"nl:Scapino (winkelketen)",name:"Scapino",shop:"shoes"},removeTags:{brand:"Scapino","brand:wikidata":"Q2298792","brand:wikipedia":"nl:Scapino (winkelketen)",name:"Scapino",shop:"shoes"},matchScore:2,suggestion:true},"shop/shoes/Schuh":{name:"Schuh",icon:"maki-shoe",geometry:["point","area"],tags:{shop:"shoes","brand:wikidata":"Q7432952"},addTags:{brand:"Schuh","brand:wikidata":"Q7432952","brand:wikipedia":"en:Schuh",name:"Schuh",shop:"shoes"},removeTags:{brand:"Schuh","brand:wikidata":"Q7432952","brand:wikipedia":"en:Schuh",name:"Schuh",shop:"shoes"},matchScore:2,suggestion:true},"shop/shoes/Shoe Carnival":{name:"Shoe Carnival",icon:"maki-shoe",geometry:["point","area"],tags:{shop:"shoes","brand:wikidata":"Q7500007"},addTags:{brand:"Shoe Carnival","brand:wikidata":"Q7500007","brand:wikipedia":"en:Shoe Carnival",name:"Shoe Carnival",shop:"shoes"},removeTags:{brand:"Shoe Carnival","brand:wikidata":"Q7500007","brand:wikipedia":"en:Shoe Carnival",name:"Shoe Carnival",shop:"shoes"},matchScore:2,suggestion:true},"shop/shoes/Shoe Zone":{name:"Shoe Zone",icon:"maki-shoe",geometry:["point","area"],tags:{shop:"shoes","brand:wikidata":"Q7500016"},addTags:{brand:"Shoe Zone","brand:wikidata":"Q7500016","brand:wikipedia":"en:Shoe Zone",name:"Shoe Zone",shop:"shoes"},removeTags:{brand:"Shoe Zone","brand:wikidata":"Q7500016","brand:wikipedia":"en:Shoe Zone",name:"Shoe Zone",shop:"shoes"},matchScore:2,suggestion:true},"shop/shoes/Siemes Schuhcenter":{name:"Siemes Schuhcenter",icon:"maki-shoe",geometry:["point","area"],tags:{shop:"shoes","brand:wikidata":"Q2800720"},addTags:{brand:"Siemes Schuhcenter","brand:wikidata":"Q2800720","brand:wikipedia":"de:Siemes (Unternehmen)",name:"Siemes Schuhcenter",shop:"shoes"},removeTags:{brand:"Siemes Schuhcenter","brand:wikidata":"Q2800720","brand:wikipedia":"de:Siemes (Unternehmen)",name:"Siemes Schuhcenter",shop:"shoes"},matchScore:2,suggestion:true},"shop/shoes/Skechers":{name:"Skechers",icon:"maki-shoe",geometry:["point","area"],tags:{shop:"shoes","brand:wikidata":"Q2945643"},addTags:{brand:"Skechers","brand:wikidata":"Q2945643","brand:wikipedia":"en:Skechers",name:"Skechers",shop:"shoes"},removeTags:{brand:"Skechers","brand:wikidata":"Q2945643","brand:wikipedia":"en:Skechers",name:"Skechers",shop:"shoes"},matchScore:2,suggestion:true},"shop/shoes/Vans":{name:"Vans",icon:"maki-shoe",geometry:["point","area"],tags:{shop:"shoes","brand:wikidata":"Q1135366"},addTags:{brand:"Vans","brand:wikidata":"Q1135366","brand:wikipedia":"en:Vans",name:"Vans",shop:"shoes"},removeTags:{brand:"Vans","brand:wikidata":"Q1135366","brand:wikipedia":"en:Vans",name:"Vans",shop:"shoes"},matchScore:2,suggestion:true},"shop/shoes/Éram":{name:"Éram",icon:"maki-shoe",geometry:["point","area"],tags:{shop:"shoes","brand:wikidata":"Q16684192"},addTags:{brand:"Éram","brand:wikidata":"Q16684192","brand:wikipedia":"fr:Éram",name:"Éram",shop:"shoes"},removeTags:{brand:"Éram","brand:wikidata":"Q16684192","brand:wikipedia":"fr:Éram",name:"Éram",shop:"shoes"},matchScore:2,suggestion:true},"shop/shoes/ЦентрОбувь":{name:"ЦентрОбувь",icon:"maki-shoe",geometry:["point","area"],tags:{shop:"shoes","brand:wikidata":"Q4504072"},addTags:{brand:"ЦентрОбувь","brand:wikidata":"Q4504072","brand:wikipedia":"ru:ЦентрОбувь",name:"ЦентрОбувь",shop:"shoes"},removeTags:{brand:"ЦентрОбувь","brand:wikidata":"Q4504072","brand:wikipedia":"ru:ЦентрОбувь",name:"ЦентрОбувь",shop:"shoes"},matchScore:2,suggestion:true},"shop/shoes/東京靴流通センター":{name:"東京靴流通センター",icon:"maki-shoe",geometry:["point","area"],tags:{shop:"shoes","brand:wikidata":"Q11318515"},addTags:{brand:"東京靴流通センター","brand:en":"Tokyo Shoes Retailing Center","brand:wikidata":"Q11318515","brand:wikipedia":"ja:チヨダ",name:"東京靴流通センター","name:en":"Tokyo Shoes Retailing Center",shop:"shoes"},removeTags:{brand:"東京靴流通センター","brand:en":"Tokyo Shoes Retailing Center","brand:wikidata":"Q11318515","brand:wikipedia":"ja:チヨダ",name:"東京靴流通センター","name:en":"Tokyo Shoes Retailing Center",shop:"shoes"},matchScore:2,suggestion:true},"shop/sports/Adidas":{name:"Adidas",icon:"maki-shop",geometry:["point","area"],tags:{shop:"sports","brand:wikidata":"Q3895"},addTags:{brand:"Adidas","brand:wikidata":"Q3895","brand:wikipedia":"en:Adidas",name:"Adidas",shop:"sports"},removeTags:{brand:"Adidas","brand:wikidata":"Q3895","brand:wikipedia":"en:Adidas",name:"Adidas",shop:"sports"},matchScore:2,suggestion:true},"shop/sports/Aktiesport":{name:"Aktiesport",icon:"maki-shop",geometry:["point","area"],tags:{shop:"sports","brand:wikidata":"Q57546889"},addTags:{brand:"Aktiesport","brand:wikidata":"Q57546889",name:"Aktiesport",shop:"sports"},removeTags:{brand:"Aktiesport","brand:wikidata":"Q57546889",name:"Aktiesport",shop:"sports"},matchScore:2,suggestion:true},"shop/sports/Bass Pro Shops":{name:"Bass Pro Shops",icon:"maki-shop",geometry:["point","area"],tags:{shop:"sports","brand:wikidata":"Q4867953"},addTags:{brand:"Bass Pro Shops","brand:wikidata":"Q4867953","brand:wikipedia":"en:Bass Pro Shops",name:"Bass Pro Shops",shop:"sports"},removeTags:{brand:"Bass Pro Shops","brand:wikidata":"Q4867953","brand:wikipedia":"en:Bass Pro Shops",name:"Bass Pro Shops",shop:"sports"},matchScore:2,suggestion:true},"shop/sports/Big 5 Sporting Goods":{name:"Big 5 Sporting Goods",icon:"maki-shop",geometry:["point","area"],tags:{shop:"sports","brand:wikidata":"Q4904902"},addTags:{brand:"Big 5 Sporting Goods","brand:wikidata":"Q4904902","brand:wikipedia":"en:Big 5 Sporting Goods",name:"Big 5 Sporting Goods",shop:"sports"},removeTags:{brand:"Big 5 Sporting Goods","brand:wikidata":"Q4904902","brand:wikipedia":"en:Big 5 Sporting Goods",name:"Big 5 Sporting Goods",shop:"sports"},matchScore:2,suggestion:true},"shop/sports/Cabela's":{name:"Cabela's",icon:"maki-shop",geometry:["point","area"],tags:{shop:"sports","brand:wikidata":"Q2793714"},addTags:{brand:"Cabela's","brand:wikidata":"Q2793714","brand:wikipedia":"en:Cabela's",name:"Cabela's",shop:"sports"},removeTags:{brand:"Cabela's","brand:wikidata":"Q2793714","brand:wikipedia":"en:Cabela's",name:"Cabela's",shop:"sports"},matchScore:2,suggestion:true},"shop/sports/Decathlon":{name:"Decathlon",icon:"maki-shop",geometry:["point","area"],tags:{shop:"sports","brand:wikidata":"Q509349"},addTags:{brand:"Decathlon","brand:wikidata":"Q509349","brand:wikipedia":"en:Decathlon Group",name:"Decathlon",shop:"sports"},removeTags:{brand:"Decathlon","brand:wikidata":"Q509349","brand:wikipedia":"en:Decathlon Group",name:"Decathlon",shop:"sports"},matchScore:2,suggestion:true},"shop/sports/Dick's Sporting Goods":{name:"Dick's Sporting Goods",icon:"maki-shop",geometry:["point","area"],tags:{shop:"sports","brand:wikidata":"Q5272601"},addTags:{brand:"Dick's Sporting Goods","brand:wikidata":"Q5272601","brand:wikipedia":"en:Dick's Sporting Goods",name:"Dick's Sporting Goods",shop:"sports"},removeTags:{brand:"Dick's Sporting Goods","brand:wikidata":"Q5272601","brand:wikipedia":"en:Dick's Sporting Goods",name:"Dick's Sporting Goods",shop:"sports"},matchScore:2,suggestion:true},"shop/sports/Hervis":{name:"Hervis",icon:"maki-shop",geometry:["point","area"],tags:{shop:"sports","brand:wikidata":"Q1614816"},addTags:{brand:"Hervis","brand:wikidata":"Q1614816","brand:wikipedia":"de:Hervis",name:"Hervis",shop:"sports"},removeTags:{brand:"Hervis","brand:wikidata":"Q1614816","brand:wikipedia":"de:Hervis",name:"Hervis",shop:"sports"},matchScore:2,suggestion:true},"shop/sports/Hibbett Sports":{name:"Hibbett Sports",icon:"maki-shop",geometry:["point","area"],tags:{shop:"sports","brand:wikidata":"Q5750671"},addTags:{brand:"Hibbett Sports","brand:wikidata":"Q5750671","brand:wikipedia":"en:Hibbett Sports",name:"Hibbett Sports",shop:"sports"},removeTags:{brand:"Hibbett Sports","brand:wikidata":"Q5750671","brand:wikipedia":"en:Hibbett Sports",name:"Hibbett Sports",shop:"sports"},matchScore:2,suggestion:true},"shop/sports/Intersport":{name:"Intersport",icon:"maki-shop",geometry:["point","area"],tags:{shop:"sports","brand:wikidata":"Q666888"},addTags:{brand:"Intersport","brand:wikidata":"Q666888","brand:wikipedia":"en:Intersport",name:"Intersport",shop:"sports"},removeTags:{brand:"Intersport","brand:wikidata":"Q666888","brand:wikipedia":"en:Intersport",name:"Intersport",shop:"sports"},matchScore:2,suggestion:true},"shop/sports/JD Sports":{name:"JD Sports",icon:"maki-shop",geometry:["point","area"],tags:{shop:"sports","brand:wikidata":"Q6108019"},addTags:{brand:"JD Sports","brand:wikidata":"Q6108019","brand:wikipedia":"en:JD Sports",name:"JD Sports",shop:"sports"},removeTags:{brand:"JD Sports","brand:wikidata":"Q6108019","brand:wikipedia":"en:JD Sports",name:"JD Sports",shop:"sports"},matchScore:2,suggestion:true},"shop/sports/Play It Again Sports":{name:"Play It Again Sports",icon:"maki-shop",geometry:["point","area"],tags:{shop:"sports","brand:wikidata":"Q7203029"},addTags:{brand:"Play It Again Sports","brand:wikidata":"Q7203029","brand:wikipedia":"en:Play It Again Sports",name:"Play It Again Sports",shop:"sports"},removeTags:{brand:"Play It Again Sports","brand:wikidata":"Q7203029","brand:wikipedia":"en:Play It Again Sports",name:"Play It Again Sports",shop:"sports"},matchScore:2,suggestion:true},"shop/sports/Sport 2000":{name:"Sport 2000",icon:"maki-shop",geometry:["point","area"],tags:{shop:"sports","brand:wikidata":"Q262394"},addTags:{brand:"Sport 2000","brand:wikidata":"Q262394","brand:wikipedia":"de:Sport 2000",name:"Sport 2000",shop:"sports"},removeTags:{brand:"Sport 2000","brand:wikidata":"Q262394","brand:wikipedia":"de:Sport 2000",name:"Sport 2000",shop:"sports"},matchScore:2,suggestion:true},"shop/sports/Sportisimo":{name:"Sportisimo",icon:"maki-shop",geometry:["point","area"],tags:{shop:"sports","brand:wikidata":"Q54974273"},addTags:{brand:"Sportisimo","brand:wikidata":"Q54974273",name:"Sportisimo",shop:"sports"},removeTags:{brand:"Sportisimo","brand:wikidata":"Q54974273",name:"Sportisimo",shop:"sports"},matchScore:2,suggestion:true},"shop/sports/Sports Authority":{name:"Sports Authority",icon:"maki-shop",geometry:["point","area"],tags:{shop:"sports","brand:wikidata":"Q7579688"},addTags:{brand:"Sports Authority","brand:wikidata":"Q7579688","brand:wikipedia":"en:Sports Authority",name:"Sports Authority",shop:"sports"},removeTags:{brand:"Sports Authority","brand:wikidata":"Q7579688","brand:wikipedia":"en:Sports Authority",name:"Sports Authority",shop:"sports"},matchScore:2,suggestion:true},"shop/sports/Sports Direct":{name:"Sports Direct",icon:"maki-shop",geometry:["point","area"],tags:{shop:"sports","brand:wikidata":"Q2913554"},addTags:{brand:"Sports Direct","brand:wikidata":"Q2913554","brand:wikipedia":"en:Sports Direct",name:"Sports Direct",shop:"sports"},removeTags:{brand:"Sports Direct","brand:wikidata":"Q2913554","brand:wikipedia":"en:Sports Direct",name:"Sports Direct",shop:"sports"},matchScore:2,suggestion:true},"shop/sports/Спортмастер":{name:"Спортмастер",icon:"maki-shop",geometry:["point","area"],tags:{shop:"sports","brand:wikidata":"Q4438176"},addTags:{brand:"Спортмастер","brand:wikidata":"Q4438176","brand:wikipedia":"ru:Спортмастер",name:"Спортмастер",shop:"sports"},removeTags:{brand:"Спортмастер","brand:wikidata":"Q4438176","brand:wikipedia":"ru:Спортмастер",name:"Спортмастер",shop:"sports"},matchScore:2,suggestion:true},"shop/stationery/Bureau Vallée":{name:"Bureau Vallée",icon:"maki-shop",geometry:["point","area"],tags:{shop:"stationery","brand:wikidata":"Q18385014"},addTags:{brand:"Bureau Vallée","brand:wikidata":"Q18385014","brand:wikipedia":"fr:Bureau Vallée",name:"Bureau Vallée",shop:"stationery"},removeTags:{brand:"Bureau Vallée","brand:wikidata":"Q18385014","brand:wikipedia":"fr:Bureau Vallée",name:"Bureau Vallée",shop:"stationery"},matchScore:2,suggestion:true},"shop/stationery/McPaper":{name:"McPaper",icon:"maki-shop",geometry:["point","area"],tags:{shop:"stationery","brand:wikidata":"Q1915329"},addTags:{brand:"McPaper","brand:wikidata":"Q1915329","brand:wikipedia":"de:McPaper",name:"McPaper",shop:"stationery"},removeTags:{brand:"McPaper","brand:wikidata":"Q1915329","brand:wikipedia":"de:McPaper",name:"McPaper",shop:"stationery"},matchScore:2,suggestion:true},"shop/stationery/Office Depot":{name:"Office Depot",icon:"maki-shop",geometry:["point","area"],tags:{shop:"stationery","brand:wikidata":"Q1337797"},addTags:{brand:"Office Depot","brand:wikidata":"Q1337797","brand:wikipedia":"en:Office Depot",name:"Office Depot",shop:"stationery"},removeTags:{brand:"Office Depot","brand:wikidata":"Q1337797","brand:wikipedia":"en:Office Depot",name:"Office Depot",shop:"stationery"},matchScore:2,suggestion:true},"shop/stationery/OfficeMax":{name:"OfficeMax",icon:"maki-shop",geometry:["point","area"],tags:{shop:"stationery","brand:wikidata":"Q7079111"},addTags:{brand:"OfficeMax","brand:wikidata":"Q7079111","brand:wikipedia":"en:OfficeMax",name:"OfficeMax",shop:"stationery"},removeTags:{brand:"OfficeMax","brand:wikidata":"Q7079111","brand:wikipedia":"en:OfficeMax",name:"OfficeMax",shop:"stationery"},matchScore:2,suggestion:true},"shop/stationery/Officeworks":{name:"Officeworks",icon:"maki-shop",geometry:["point","area"],tags:{shop:"stationery","brand:wikidata":"Q7079486"},addTags:{brand:"Officeworks","brand:wikidata":"Q7079486","brand:wikipedia":"en:Officeworks",name:"Officeworks",shop:"stationery"},removeTags:{brand:"Officeworks","brand:wikidata":"Q7079486","brand:wikipedia":"en:Officeworks",name:"Officeworks",shop:"stationery"},matchScore:2,suggestion:true},"shop/stationery/Pagro":{name:"Pagro",icon:"maki-shop",geometry:["point","area"],tags:{shop:"stationery","brand:wikidata":"Q57550022"},addTags:{brand:"Pagro","brand:wikidata":"Q57550022",name:"Pagro",shop:"stationery"},removeTags:{brand:"Pagro","brand:wikidata":"Q57550022",name:"Pagro",shop:"stationery"},matchScore:2,suggestion:true},"shop/stationery/Paper Source":{name:"Paper Source",icon:"maki-shop",geometry:["point","area"],tags:{shop:"stationery","brand:wikidata":"Q25000269"},addTags:{brand:"Paper Source","brand:wikidata":"Q25000269","brand:wikipedia":"en:Paper Source",name:"Paper Source",shop:"stationery"},removeTags:{brand:"Paper Source","brand:wikidata":"Q25000269","brand:wikipedia":"en:Paper Source",name:"Paper Source",shop:"stationery"},matchScore:2,suggestion:true},"shop/stationery/Paperchase":{name:"Paperchase",icon:"maki-shop",geometry:["point","area"],tags:{shop:"stationery","brand:wikidata":"Q7132739"},addTags:{brand:"Paperchase","brand:wikidata":"Q7132739","brand:wikipedia":"en:Paperchase",name:"Paperchase",shop:"stationery"},removeTags:{brand:"Paperchase","brand:wikidata":"Q7132739","brand:wikipedia":"en:Paperchase",name:"Paperchase",shop:"stationery"},matchScore:2,suggestion:true},"shop/stationery/Ryman":{name:"Ryman",icon:"maki-shop",geometry:["point","area"],tags:{shop:"stationery","brand:wikidata":"Q7385188"},addTags:{brand:"Ryman","brand:wikidata":"Q7385188","brand:wikipedia":"en:Ryman",name:"Ryman",shop:"stationery"},removeTags:{brand:"Ryman","brand:wikidata":"Q7385188","brand:wikipedia":"en:Ryman",name:"Ryman",shop:"stationery"},matchScore:2,suggestion:true},"shop/stationery/Staples":{name:"Staples",icon:"maki-shop",geometry:["point","area"],tags:{shop:"stationery","brand:wikidata":"Q785943"},addTags:{brand:"Staples","brand:wikidata":"Q785943","brand:wikipedia":"en:Staples Inc.",name:"Staples",shop:"stationery"},removeTags:{brand:"Staples","brand:wikidata":"Q785943","brand:wikipedia":"en:Staples Inc.",name:"Staples",shop:"stationery"},matchScore:2,suggestion:true},"shop/stationery/Комус":{name:"Комус",icon:"maki-shop",geometry:["point","area"],tags:{shop:"stationery","brand:wikidata":"Q4230314"},addTags:{brand:"Комус","brand:en":"Komus","brand:wikidata":"Q4230314","brand:wikipedia":"en:Komus (company)",name:"Комус","name:en":"Komus",shop:"stationery"},removeTags:{brand:"Комус","brand:en":"Komus","brand:wikidata":"Q4230314","brand:wikipedia":"en:Komus (company)",name:"Комус","name:en":"Komus",shop:"stationery"},matchScore:2,suggestion:true},"shop/storage_rental/Extra Space Storage":{name:"Extra Space Storage",icon:"fas-warehouse",geometry:["point","area"],tags:{shop:"storage_rental","brand:wikidata":"Q5422162"},addTags:{brand:"Extra Space Storage","brand:wikidata":"Q5422162","brand:wikipedia":"en:Extra Space Storage",name:"Extra Space Storage",shop:"storage_rental"},removeTags:{brand:"Extra Space Storage","brand:wikidata":"Q5422162","brand:wikipedia":"en:Extra Space Storage",name:"Extra Space Storage",shop:"storage_rental"},matchScore:2,suggestion:true},"shop/storage_rental/Public Storage":{name:"Public Storage",icon:"fas-warehouse",geometry:["point","area"],tags:{shop:"storage_rental","brand:wikidata":"Q1156045"},addTags:{brand:"Public Storage","brand:wikidata":"Q1156045","brand:wikipedia":"en:Public Storage",name:"Public Storage",shop:"storage_rental"},removeTags:{brand:"Public Storage","brand:wikidata":"Q1156045","brand:wikipedia":"en:Public Storage",name:"Public Storage",shop:"storage_rental"},matchScore:2,suggestion:true},"shop/supermarket/A&O":{name:"A&O",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q3600279"},addTags:{brand:"A&O","brand:wikidata":"Q3600279","brand:wikipedia":"it:A&O",name:"A&O",shop:"supermarket"},removeTags:{brand:"A&O","brand:wikidata":"Q3600279","brand:wikipedia":"it:A&O",name:"A&O",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/A101":{name:"A101",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q6034496"},addTags:{brand:"A101","brand:wikidata":"Q6034496","brand:wikipedia":"tr:A101",name:"A101",shop:"supermarket"},removeTags:{brand:"A101","brand:wikidata":"Q6034496","brand:wikipedia":"tr:A101",name:"A101",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/ADEG":{name:"ADEG",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q290211"},addTags:{brand:"ADEG","brand:wikidata":"Q290211","brand:wikipedia":"de:ADEG Österreich",name:"ADEG",shop:"supermarket"},removeTags:{brand:"ADEG","brand:wikidata":"Q290211","brand:wikipedia":"de:ADEG Österreich",name:"ADEG",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Ahorramás":{name:"Ahorramás",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q58221883"},addTags:{brand:"Ahorramás","brand:wikidata":"Q58221883",name:"Ahorramás",shop:"supermarket"},removeTags:{brand:"Ahorramás","brand:wikidata":"Q58221883",name:"Ahorramás",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Albert":{name:"Albert",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q9144241"},addTags:{brand:"Albert","brand:wikidata":"Q9144241","brand:wikipedia":"cs:Albert (obchodní řetězec)",name:"Albert",shop:"supermarket"},removeTags:{brand:"Albert","brand:wikidata":"Q9144241","brand:wikipedia":"cs:Albert (obchodní řetězec)",name:"Albert",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Albert Heijn":{name:"Albert Heijn",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q1653985"},addTags:{brand:"Albert Heijn","brand:wikidata":"Q1653985","brand:wikipedia":"nl:Albert Heijn (supermarkt)",name:"Albert Heijn",shop:"supermarket"},removeTags:{brand:"Albert Heijn","brand:wikidata":"Q1653985","brand:wikipedia":"nl:Albert Heijn (supermarkt)",name:"Albert Heijn",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Albertsons":{name:"Albertsons",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q4712282"},addTags:{brand:"Albertsons","brand:wikidata":"Q4712282","brand:wikipedia":"en:Albertsons",name:"Albertsons",shop:"supermarket"},removeTags:{brand:"Albertsons","brand:wikidata":"Q4712282","brand:wikipedia":"en:Albertsons",name:"Albertsons",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Aldi":{name:"Aldi",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q125054"},addTags:{brand:"Aldi","brand:wikidata":"Q125054","brand:wikipedia":"en:Aldi",name:"Aldi",shop:"supermarket"},removeTags:{brand:"Aldi","brand:wikidata":"Q125054","brand:wikipedia":"en:Aldi",name:"Aldi",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Aldi Nord":{name:"Aldi Nord",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q41171373"},addTags:{brand:"Aldi Nord","brand:wikidata":"Q41171373","brand:wikipedia":"en:Aldi",name:"Aldi Nord",shop:"supermarket"},removeTags:{brand:"Aldi Nord","brand:wikidata":"Q41171373","brand:wikipedia":"en:Aldi",name:"Aldi Nord",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Aldi Süd":{name:"Aldi Süd",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q41171672"},addTags:{brand:"Aldi Süd","brand:wikidata":"Q41171672","brand:wikipedia":"en:Aldi",name:"Aldi Süd",shop:"supermarket"},removeTags:{brand:"Aldi Süd","brand:wikidata":"Q41171672","brand:wikipedia":"en:Aldi",name:"Aldi Süd",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Alimerka":{name:"Alimerka",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q16482738"},addTags:{brand:"Alimerka","brand:wikidata":"Q16482738","brand:wikipedia":"es:Alimerka",name:"Alimerka",shop:"supermarket"},removeTags:{brand:"Alimerka","brand:wikidata":"Q16482738","brand:wikipedia":"es:Alimerka",name:"Alimerka",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Alnatura":{name:"Alnatura",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q876811"},addTags:{brand:"Alnatura","brand:wikidata":"Q876811","brand:wikipedia":"en:Alnatura",name:"Alnatura",shop:"supermarket"},removeTags:{brand:"Alnatura","brand:wikidata":"Q876811","brand:wikipedia":"en:Alnatura",name:"Alnatura",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Atacadão":{name:"Atacadão",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q2868739"},addTags:{brand:"Atacadão","brand:wikidata":"Q2868739","brand:wikipedia":"en:Atacadão",name:"Atacadão",shop:"supermarket"},removeTags:{brand:"Atacadão","brand:wikidata":"Q2868739","brand:wikipedia":"en:Atacadão",name:"Atacadão",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Auchan":{name:"Auchan",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q758603"},addTags:{brand:"Auchan","brand:wikidata":"Q758603","brand:wikipedia":"en:Auchan",name:"Auchan",shop:"supermarket"},removeTags:{brand:"Auchan","brand:wikidata":"Q758603","brand:wikipedia":"en:Auchan",name:"Auchan",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Bi-Lo":{name:"Bi-Lo",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q4835622"},addTags:{brand:"Bi-Lo","brand:wikidata":"Q4835622","brand:wikipedia":"en:BI-LO (Australia)",name:"Bi-Lo",shop:"supermarket"},removeTags:{brand:"Bi-Lo","brand:wikidata":"Q4835622","brand:wikipedia":"en:BI-LO (Australia)",name:"Bi-Lo",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Biedronka":{name:"Biedronka",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q857182"},addTags:{brand:"Biedronka","brand:wikidata":"Q857182","brand:wikipedia":"en:Biedronka",name:"Biedronka",shop:"supermarket"},removeTags:{brand:"Biedronka","brand:wikidata":"Q857182","brand:wikipedia":"en:Biedronka",name:"Biedronka",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Big C":{name:"Big C",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q858665"},addTags:{brand:"Big C","brand:wikidata":"Q858665","brand:wikipedia":"en:Big C",name:"Big C",shop:"supermarket"},removeTags:{brand:"Big C","brand:wikidata":"Q858665","brand:wikipedia":"en:Big C",name:"Big C",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Billa":{name:"Billa",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q537781"},addTags:{brand:"Billa","brand:wikidata":"Q537781","brand:wikipedia":"en:Billa (supermarket)",name:"Billa",shop:"supermarket"},removeTags:{brand:"Billa","brand:wikidata":"Q537781","brand:wikipedia":"en:Billa (supermarket)",name:"Billa",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Bingo":{name:"Bingo",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q16842066"},addTags:{brand:"Bingo","brand:wikidata":"Q16842066","brand:wikipedia":"bs:Bingo (kompanija)",name:"Bingo",shop:"supermarket"},removeTags:{brand:"Bingo","brand:wikidata":"Q16842066","brand:wikipedia":"bs:Bingo (kompanija)",name:"Bingo",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Biocoop":{name:"Biocoop",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q2904039"},addTags:{brand:"Biocoop","brand:wikidata":"Q2904039","brand:wikipedia":"fr:Biocoop",name:"Biocoop",shop:"supermarket"},removeTags:{brand:"Biocoop","brand:wikidata":"Q2904039","brand:wikipedia":"fr:Biocoop",name:"Biocoop",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Brookshire Brothers":{name:"Brookshire Brothers",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q4975084"},addTags:{brand:"Brookshire Brothers","brand:wikidata":"Q4975084","brand:wikipedia":"en:Brookshire Brothers",name:"Brookshire Brothers",shop:"supermarket"},removeTags:{brand:"Brookshire Brothers","brand:wikidata":"Q4975084","brand:wikipedia":"en:Brookshire Brothers",name:"Brookshire Brothers",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Brookshire's":{name:"Brookshire's",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q4975085"},addTags:{brand:"Brookshire's","brand:wikidata":"Q4975085","brand:wikipedia":"en:Brookshire Grocery Company",name:"Brookshire's",shop:"supermarket"},removeTags:{brand:"Brookshire's","brand:wikidata":"Q4975085","brand:wikipedia":"en:Brookshire Grocery Company",name:"Brookshire's",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Budgens":{name:"Budgens",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q4985016"},addTags:{brand:"Budgens","brand:wikidata":"Q4985016","brand:wikipedia":"en:Budgens",name:"Budgens",shop:"supermarket"},removeTags:{brand:"Budgens","brand:wikidata":"Q4985016","brand:wikipedia":"en:Budgens",name:"Budgens",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Bulk Barn":{name:"Bulk Barn",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q4996466"},addTags:{brand:"Bulk Barn","brand:wikidata":"Q4996466",name:"Bulk Barn",shop:"supermarket"},removeTags:{brand:"Bulk Barn","brand:wikidata":"Q4996466",name:"Bulk Barn",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Bunnpris":{name:"Bunnpris",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q1774634"},addTags:{brand:"Bunnpris","brand:wikidata":"Q1774634","brand:wikipedia":"en:Bunnpris",name:"Bunnpris",shop:"supermarket"},removeTags:{brand:"Bunnpris","brand:wikidata":"Q1774634","brand:wikipedia":"en:Bunnpris",name:"Bunnpris",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/COOP Jednota":{name:"COOP Jednota",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q41629254"},addTags:{brand:"COOP Jednota","brand:wikidata":"Q41629254","brand:wikipedia":"sk:COOP Jednota Slovensko",name:"COOP Jednota",shop:"supermarket"},removeTags:{brand:"COOP Jednota","brand:wikidata":"Q41629254","brand:wikipedia":"sk:COOP Jednota Slovensko",name:"COOP Jednota",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Caprabo":{name:"Caprabo",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q1980781"},addTags:{brand:"Caprabo","brand:wikidata":"Q1980781","brand:wikipedia":"en:Caprabo",name:"Caprabo",shop:"supermarket"},removeTags:{brand:"Caprabo","brand:wikidata":"Q1980781","brand:wikipedia":"en:Caprabo",name:"Caprabo",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Cargills Food City":{name:"Cargills Food City",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q58353955"},addTags:{brand:"Cargills Food City","brand:wikidata":"Q58353955",name:"Cargills Food City","operator:wikidata":"Q5039260","operator:wikipedia":"en:Cargills (Ceylon)",shop:"supermarket"},removeTags:{brand:"Cargills Food City","brand:wikidata":"Q58353955",name:"Cargills Food City","operator:wikidata":"Q5039260","operator:wikipedia":"en:Cargills (Ceylon)",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Carrefour":{name:"Carrefour",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q217599"},addTags:{brand:"Carrefour","brand:wikidata":"Q217599","brand:wikipedia":"fr:Carrefour (enseigne)",name:"Carrefour",operator:"Groupe Carrefour","operator:wikidata":"Q3117359","operator:wikipedia":"fr:Groupe Carrefour",shop:"supermarket"},removeTags:{brand:"Carrefour","brand:wikidata":"Q217599","brand:wikipedia":"fr:Carrefour (enseigne)",name:"Carrefour",operator:"Groupe Carrefour","operator:wikidata":"Q3117359","operator:wikipedia":"fr:Groupe Carrefour",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Carrefour City":{name:"Carrefour City",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q2940187"},addTags:{brand:"Carrefour City","brand:wikidata":"Q2940187","brand:wikipedia":"fr:Carrefour City",name:"Carrefour City",operator:"Groupe Carrefour","operator:wikidata":"Q3117359","operator:wikipedia":"fr:Groupe Carrefour",shop:"supermarket"},removeTags:{brand:"Carrefour City","brand:wikidata":"Q2940187","brand:wikipedia":"fr:Carrefour City",name:"Carrefour City",operator:"Groupe Carrefour","operator:wikidata":"Q3117359","operator:wikipedia":"fr:Groupe Carrefour",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Carrefour Contact":{name:"Carrefour Contact",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q2940188"},addTags:{brand:"Carrefour Contact","brand:wikidata":"Q2940188","brand:wikipedia":"fr:Carrefour Contact",name:"Carrefour Contact",operator:"Groupe Carrefour","operator:wikidata":"Q3117359","operator:wikipedia":"fr:Groupe Carrefour",shop:"supermarket"},removeTags:{brand:"Carrefour Contact","brand:wikidata":"Q2940188","brand:wikipedia":"fr:Carrefour Contact",name:"Carrefour Contact",operator:"Groupe Carrefour","operator:wikidata":"Q3117359","operator:wikipedia":"fr:Groupe Carrefour",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Carrefour Express":{name:"Carrefour Express",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q2940190"},addTags:{brand:"Carrefour Express","brand:wikidata":"Q2940190","brand:wikipedia":"fr:Carrefour Express",name:"Carrefour Express",operator:"Groupe Carrefour","operator:wikidata":"Q3117359","operator:wikipedia":"fr:Groupe Carrefour",shop:"supermarket"},removeTags:{brand:"Carrefour Express","brand:wikidata":"Q2940190","brand:wikipedia":"fr:Carrefour Express",name:"Carrefour Express",operator:"Groupe Carrefour","operator:wikidata":"Q3117359","operator:wikipedia":"fr:Groupe Carrefour",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Carrefour Market":{name:"Carrefour Market",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q2689639"},addTags:{brand:"Carrefour Market","brand:wikidata":"Q2689639","brand:wikipedia":"fr:Carrefour Market",name:"Carrefour Market",operator:"Groupe Carrefour","operator:wikidata":"Q3117359","operator:wikipedia":"fr:Groupe Carrefour",shop:"supermarket"},removeTags:{brand:"Carrefour Market","brand:wikidata":"Q2689639","brand:wikipedia":"fr:Carrefour Market",name:"Carrefour Market",operator:"Groupe Carrefour","operator:wikidata":"Q3117359","operator:wikipedia":"fr:Groupe Carrefour",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Carulla":{name:"Carulla",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q5047480"},addTags:{brand:"Carulla","brand:wikidata":"Q5047480","brand:wikipedia":"en:Carulla",name:"Carulla",shop:"supermarket"},removeTags:{brand:"Carulla","brand:wikidata":"Q5047480","brand:wikipedia":"en:Carulla",name:"Carulla",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Checkers":{name:"Checkers",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q5089126"},addTags:{brand:"Checkers","brand:wikidata":"Q5089126","brand:wikipedia":"en:Checkers (supermarket chain)",name:"Checkers",shop:"supermarket"},removeTags:{brand:"Checkers","brand:wikidata":"Q5089126","brand:wikipedia":"en:Checkers (supermarket chain)",name:"Checkers",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Chedraui":{name:"Chedraui",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q2961952"},addTags:{brand:"Chedraui","brand:wikidata":"Q2961952","brand:wikipedia":"en:Chedraui",name:"Chedraui",shop:"supermarket"},removeTags:{brand:"Chedraui","brand:wikidata":"Q2961952","brand:wikipedia":"en:Chedraui",name:"Chedraui",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/City Market":{name:"City Market",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q5123299"},addTags:{brand:"City Market","brand:wikidata":"Q5123299","brand:wikipedia":"en:City Market (US grocery store chain)",name:"City Market",shop:"supermarket"},removeTags:{brand:"City Market","brand:wikidata":"Q5123299","brand:wikipedia":"en:City Market (US grocery store chain)",name:"City Market",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Co-op":{name:"Co-op",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q5440676"},addTags:{brand:"Federated Co-operatives","brand:wikidata":"Q5440676","brand:wikipedia":"en:Federated Co-operatives",name:"Co-op",shop:"supermarket"},removeTags:{brand:"Federated Co-operatives","brand:wikidata":"Q5440676","brand:wikipedia":"en:Federated Co-operatives",name:"Co-op",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Coles":{name:"Coles",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q1108172"},addTags:{brand:"Coles","brand:wikidata":"Q1108172","brand:wikipedia":"en:Coles Supermarkets",name:"Coles",shop:"supermarket"},removeTags:{brand:"Coles","brand:wikidata":"Q1108172","brand:wikipedia":"en:Coles Supermarkets",name:"Coles",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Colruyt":{name:"Colruyt",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q2363991"},addTags:{brand:"Colruyt","brand:wikidata":"Q2363991","brand:wikipedia":"en:Colruyt (supermarket)",name:"Colruyt",shop:"supermarket"},removeTags:{brand:"Colruyt","brand:wikidata":"Q2363991","brand:wikipedia":"en:Colruyt (supermarket)",name:"Colruyt",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Combi":{name:"Combi",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q1113618"},addTags:{brand:"Combi","brand:wikidata":"Q1113618","brand:wikipedia":"de:Combi (Einkaufsmarkt)",name:"Combi",shop:"supermarket"},removeTags:{brand:"Combi","brand:wikidata":"Q1113618","brand:wikipedia":"de:Combi (Einkaufsmarkt)",name:"Combi",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Comercial Mexicana":{name:"Comercial Mexicana",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q2985173"},addTags:{brand:"Comercial Mexicana","brand:wikidata":"Q2985173","brand:wikipedia":"en:Comercial Mexicana",name:"Comercial Mexicana",shop:"supermarket"},removeTags:{brand:"Comercial Mexicana","brand:wikidata":"Q2985173","brand:wikipedia":"en:Comercial Mexicana",name:"Comercial Mexicana",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Conad":{name:"Conad",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q639075"},addTags:{brand:"Conad","brand:wikidata":"Q639075","brand:wikipedia":"it:Conad",name:"Conad",shop:"supermarket"},removeTags:{brand:"Conad","brand:wikidata":"Q639075","brand:wikipedia":"it:Conad",name:"Conad",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Conad City":{name:"Conad City",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q57543102"},addTags:{brand:"Conad City","brand:wikidata":"Q57543102",name:"Conad City",shop:"supermarket"},removeTags:{brand:"Conad City","brand:wikidata":"Q57543102",name:"Conad City",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Condis":{name:"Condis",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q57417581"},addTags:{brand:"Condis","brand:wikidata":"Q57417581",name:"Condis",shop:"supermarket"},removeTags:{brand:"Condis","brand:wikidata":"Q57417581",name:"Condis",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Consum":{name:"Consum",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q8350308"},addTags:{brand:"Consum","brand:wikidata":"Q8350308","brand:wikipedia":"es:Consum",name:"Consum",shop:"supermarket"},removeTags:{brand:"Consum","brand:wikidata":"Q8350308","brand:wikipedia":"es:Consum",name:"Consum",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Continente":{name:"Continente",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q2995683"},addTags:{brand:"Continente","brand:wikidata":"Q2995683","brand:wikipedia":"en:Continente (Supermarket)",name:"Continente",shop:"supermarket"},removeTags:{brand:"Continente","brand:wikidata":"Q2995683","brand:wikipedia":"en:Continente (Supermarket)",name:"Continente",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Coop Prix":{name:"Coop Prix",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q5167705"},addTags:{brand:"Coop Prix","brand:wikidata":"Q5167705","brand:wikipedia":"no:Coop Prix",name:"Coop Prix",shop:"supermarket"},removeTags:{brand:"Coop Prix","brand:wikidata":"Q5167705","brand:wikipedia":"no:Coop Prix",name:"Coop Prix",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Cora":{name:"Cora",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q686643"},addTags:{brand:"Cora","brand:wikidata":"Q686643","brand:wikipedia":"en:Cora (hypermarket)",name:"Cora",shop:"supermarket"},removeTags:{brand:"Cora","brand:wikidata":"Q686643","brand:wikipedia":"en:Cora (hypermarket)",name:"Cora",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Costcutter":{name:"Costcutter",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q5175072"},addTags:{brand:"Costcutter","brand:wikidata":"Q5175072","brand:wikipedia":"en:Costcutter",name:"Costcutter",shop:"supermarket"},removeTags:{brand:"Costcutter","brand:wikidata":"Q5175072","brand:wikipedia":"en:Costcutter",name:"Costcutter",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Coto":{name:"Coto",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q5175411"},addTags:{brand:"Coto","brand:wikidata":"Q5175411","brand:wikipedia":"es:Coto (supermercado)",name:"Coto",shop:"supermarket"},removeTags:{brand:"Coto","brand:wikidata":"Q5175411","brand:wikipedia":"es:Coto (supermercado)",name:"Coto",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Countdown":{name:"Countdown",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q5176845"},addTags:{brand:"Countdown","brand:wikidata":"Q5176845","brand:wikipedia":"en:Countdown (supermarket)",name:"Countdown",shop:"supermarket"},removeTags:{brand:"Countdown","brand:wikidata":"Q5176845","brand:wikipedia":"en:Countdown (supermarket)",name:"Countdown",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Cub Foods":{name:"Cub Foods",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q5191916"},addTags:{brand:"Cub Foods","brand:wikidata":"Q5191916","brand:wikipedia":"en:Cub Foods",name:"Cub Foods",shop:"supermarket"},removeTags:{brand:"Cub Foods","brand:wikidata":"Q5191916","brand:wikipedia":"en:Cub Foods",name:"Cub Foods",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/D1":{name:"D1",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q43403418"},addTags:{brand:"D1","brand:wikidata":"Q43403418","brand:wikipedia":"es:Tiendas D1",name:"D1",shop:"supermarket"},removeTags:{brand:"D1","brand:wikidata":"Q43403418","brand:wikipedia":"es:Tiendas D1",name:"D1",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Dagli'Brugsen":{name:"Dagli'Brugsen",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q12307017"},addTags:{brand:"Dagli'Brugsen","brand:wikidata":"Q12307017","brand:wikipedia":"en:Dagli'Brugsen",name:"Dagli'Brugsen",shop:"supermarket"},removeTags:{brand:"Dagli'Brugsen","brand:wikidata":"Q12307017","brand:wikipedia":"en:Dagli'Brugsen",name:"Dagli'Brugsen",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Deen":{name:"Deen",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q13571727"},addTags:{brand:"Deen","brand:wikidata":"Q13571727","brand:wikipedia":"nl:Deen (supermarkt)",name:"Deen",shop:"supermarket"},removeTags:{brand:"Deen","brand:wikidata":"Q13571727","brand:wikipedia":"nl:Deen (supermarkt)",name:"Deen",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Delhaize":{name:"Delhaize",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q1184173"},addTags:{brand:"Delhaize","brand:wikidata":"Q1184173","brand:wikipedia":"fr:Delhaize",name:"Delhaize",shop:"supermarket"},removeTags:{brand:"Delhaize","brand:wikidata":"Q1184173","brand:wikipedia":"fr:Delhaize",name:"Delhaize",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Delikatesy Centrum":{name:"Delikatesy Centrum",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q11693824"},addTags:{brand:"Delikatesy Centrum","brand:wikidata":"Q11693824","brand:wikipedia":"pl:Delikatesy Centrum",name:"Delikatesy Centrum",shop:"supermarket"},removeTags:{brand:"Delikatesy Centrum","brand:wikidata":"Q11693824","brand:wikipedia":"pl:Delikatesy Centrum",name:"Delikatesy Centrum",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Denner":{name:"Denner",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q379911"},addTags:{brand:"Denner","brand:wikidata":"Q379911","brand:wikipedia":"en:Denner (supermarkets)",name:"Denner",shop:"supermarket"},removeTags:{brand:"Denner","brand:wikidata":"Q379911","brand:wikipedia":"en:Denner (supermarkets)",name:"Denner",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Despar":{name:"Despar",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q610492"},addTags:{brand:"Spar","brand:wikidata":"Q610492","brand:wikipedia":"en:Spar (retailer)",name:"Despar",shop:"supermarket"},removeTags:{brand:"Spar","brand:wikidata":"Q610492","brand:wikipedia":"en:Spar (retailer)",name:"Despar",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Dia":{name:"Dia",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q925132"},addTags:{brand:"Dia","brand:wikidata":"Q925132","brand:wikipedia":"es:Supermercados Dia",name:"Dia",shop:"supermarket"},removeTags:{brand:"Dia","brand:wikidata":"Q925132","brand:wikipedia":"es:Supermercados Dia",name:"Dia",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Dia Market":{name:"Dia Market",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q925132"},addTags:{brand:"Dia Market","brand:wikidata":"Q925132","brand:wikipedia":"es:Supermercados Dia",name:"Dia Market",shop:"supermarket"},removeTags:{brand:"Dia Market","brand:wikidata":"Q925132","brand:wikipedia":"es:Supermercados Dia",name:"Dia Market",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Dino":{name:"Dino",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q11694239"},addTags:{brand:"Dino","brand:wikidata":"Q11694239","brand:wikipedia":"pl:Dino Polska",name:"Dino",shop:"supermarket"},removeTags:{brand:"Dino","brand:wikidata":"Q11694239","brand:wikipedia":"pl:Dino Polska",name:"Dino",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Dirk van den Broek":{name:"Dirk van den Broek",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q17502722"},addTags:{brand:"Dirk van den Broek","brand:wikidata":"Q17502722","brand:wikipedia":"en:Dirk (supermarket)",name:"Dirk van den Broek",shop:"supermarket"},removeTags:{brand:"Dirk van den Broek","brand:wikidata":"Q17502722","brand:wikipedia":"en:Dirk (supermarket)",name:"Dirk van den Broek",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Dunnes Stores":{name:"Dunnes Stores",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q1266203"},addTags:{brand:"Dunnes Stores","brand:wikidata":"Q1266203","brand:wikipedia":"en:Dunnes Stores",name:"Dunnes Stores",shop:"supermarket"},removeTags:{brand:"Dunnes Stores","brand:wikidata":"Q1266203","brand:wikipedia":"en:Dunnes Stores",name:"Dunnes Stores",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/E. Leclerc":{name:"E. Leclerc",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q1273376"},addTags:{brand:"E. Leclerc","brand:wikidata":"Q1273376","brand:wikipedia":"en:E.Leclerc",name:"E. Leclerc",shop:"supermarket"},removeTags:{brand:"E. Leclerc","brand:wikidata":"Q1273376","brand:wikipedia":"en:E.Leclerc",name:"E. Leclerc",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/E. Leclerc Drive":{name:"E. Leclerc Drive",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q1273376"},addTags:{brand:"E. Leclerc Drive","brand:wikidata":"Q1273376","brand:wikipedia":"fr:E.Leclerc",name:"E. Leclerc Drive",operator:"E.Leclerc","operator:wikidata":"Q1273376","operator:wikipedia":"en:E.Leclerc",shop:"supermarket"},removeTags:{brand:"E. Leclerc Drive","brand:wikidata":"Q1273376","brand:wikipedia":"fr:E.Leclerc",name:"E. Leclerc Drive",operator:"E.Leclerc","operator:wikidata":"Q1273376","operator:wikipedia":"en:E.Leclerc",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/EMTÉ":{name:"EMTÉ",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q3119122"},addTags:{brand:"EMTÉ","brand:wikidata":"Q3119122","brand:wikipedia":"en:EMTÉ",name:"EMTÉ",shop:"supermarket"},removeTags:{brand:"EMTÉ","brand:wikidata":"Q3119122","brand:wikipedia":"en:EMTÉ",name:"EMTÉ",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Edeka":{name:"Edeka",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q701755"},addTags:{brand:"Edeka","brand:wikidata":"Q701755","brand:wikipedia":"en:Edeka",name:"Edeka",shop:"supermarket"},removeTags:{brand:"Edeka","brand:wikidata":"Q701755","brand:wikipedia":"en:Edeka",name:"Edeka",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Eko":{name:"Eko",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q9251859"},addTags:{brand:"Eko","brand:wikidata":"Q9251859","brand:wikipedia":"pl:Eko Holding",name:"Eko",shop:"supermarket"},removeTags:{brand:"Eko","brand:wikidata":"Q9251859","brand:wikipedia":"pl:Eko Holding",name:"Eko",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Ekono":{name:"Ekono",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q2842729"},addTags:{brand:"Ekono","brand:wikidata":"Q2842729","brand:wikipedia":"es:Ekono",name:"Ekono",shop:"supermarket"},removeTags:{brand:"Ekono","brand:wikidata":"Q2842729","brand:wikipedia":"es:Ekono",name:"Ekono",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Eroski":{name:"Eroski",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q1361349"},addTags:{brand:"Eroski","brand:wikidata":"Q1361349","brand:wikipedia":"en:Eroski",name:"Eroski",shop:"supermarket"},removeTags:{brand:"Eroski","brand:wikidata":"Q1361349","brand:wikipedia":"en:Eroski",name:"Eroski",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Esselunga":{name:"Esselunga",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q1059636"},addTags:{brand:"Esselunga","brand:wikidata":"Q1059636","brand:wikipedia":"en:Esselunga",name:"Esselunga",shop:"supermarket"},removeTags:{brand:"Esselunga","brand:wikidata":"Q1059636","brand:wikipedia":"en:Esselunga",name:"Esselunga",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/EuroSpin":{name:"EuroSpin",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q1374674"},addTags:{brand:"EuroSpin","brand:wikidata":"Q1374674","brand:wikipedia":"it:EuroSpin",name:"EuroSpin",shop:"supermarket"},removeTags:{brand:"EuroSpin","brand:wikidata":"Q1374674","brand:wikipedia":"it:EuroSpin",name:"EuroSpin",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Eurospar":{name:"Eurospar",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q12309283"},addTags:{brand:"Eurospar","brand:wikidata":"Q12309283","brand:wikipedia":"da:Eurospar",name:"Eurospar",shop:"supermarket"},removeTags:{brand:"Eurospar","brand:wikidata":"Q12309283","brand:wikipedia":"da:Eurospar",name:"Eurospar",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Extra":{name:"Extra",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q11964085"},addTags:{brand:"Extra","brand:wikidata":"Q11964085","brand:wikipedia":"no:Extra (Coop)",name:"Extra",shop:"supermarket"},removeTags:{brand:"Extra","brand:wikidata":"Q11964085","brand:wikipedia":"no:Extra (Coop)",name:"Extra",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Famila":{name:"Famila",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q1395108"},addTags:{brand:"Famila","brand:wikidata":"Q1395108","brand:wikipedia":"de:Famila",name:"Famila",shop:"supermarket"},removeTags:{brand:"Famila","brand:wikidata":"Q1395108","brand:wikipedia":"de:Famila",name:"Famila",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Fareway":{name:"Fareway",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q5434998"},addTags:{brand:"Fareway","brand:wikidata":"Q5434998","brand:wikipedia":"en:Fareway",name:"Fareway",shop:"supermarket"},removeTags:{brand:"Fareway","brand:wikidata":"Q5434998","brand:wikipedia":"en:Fareway",name:"Fareway",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Farm Boy":{name:"Farm Boy",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q5435469"},addTags:{brand:"Farm Boy","brand:wikidata":"Q5435469","brand:wikipedia":"en:Farm Boy",name:"Farm Boy",shop:"supermarket"},removeTags:{brand:"Farm Boy","brand:wikidata":"Q5435469","brand:wikipedia":"en:Farm Boy",name:"Farm Boy",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Farmfoods":{name:"Farmfoods",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q5435841"},addTags:{brand:"Farmfoods","brand:wikidata":"Q5435841","brand:wikipedia":"en:Farmfoods",name:"Farmfoods",shop:"supermarket"},removeTags:{brand:"Farmfoods","brand:wikidata":"Q5435841","brand:wikipedia":"en:Farmfoods",name:"Farmfoods",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Feneberg":{name:"Feneberg",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q5345378"},addTags:{brand:"Feneberg","brand:wikidata":"Q5345378","brand:wikipedia":"de:Feneberg Lebensmittel",name:"Feneberg",shop:"supermarket"},removeTags:{brand:"Feneberg","brand:wikidata":"Q5345378","brand:wikipedia":"de:Feneberg Lebensmittel",name:"Feneberg",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Food 4 Less":{name:"Food 4 Less",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q5465282"},addTags:{brand:"Food 4 Less","brand:wikidata":"Q5465282","brand:wikipedia":"en:Food 4 Less",name:"Food 4 Less",shop:"supermarket"},removeTags:{brand:"Food 4 Less","brand:wikidata":"Q5465282","brand:wikipedia":"en:Food 4 Less",name:"Food 4 Less",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Food Basics":{name:"Food Basics",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q5465300"},addTags:{brand:"Food Basics","brand:wikidata":"Q5465300","brand:wikipedia":"en:Food Basics",name:"Food Basics",shop:"supermarket"},removeTags:{brand:"Food Basics","brand:wikidata":"Q5465300","brand:wikipedia":"en:Food Basics",name:"Food Basics",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Food City":{name:"Food City",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q5465306"},addTags:{brand:"Food City","brand:wikidata":"Q5465306","brand:wikipedia":"en:Food City (Canada)",name:"Food City",shop:"supermarket"},removeTags:{brand:"Food City","brand:wikidata":"Q5465306","brand:wikipedia":"en:Food City (Canada)",name:"Food City",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Food Lion":{name:"Food Lion",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q1435950"},addTags:{brand:"Food Lion","brand:wikidata":"Q1435950","brand:wikipedia":"en:Food Lion",name:"Food Lion",shop:"supermarket"},removeTags:{brand:"Food Lion","brand:wikidata":"Q1435950","brand:wikipedia":"en:Food Lion",name:"Food Lion",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Foodworks":{name:"Foodworks",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q5465579"},addTags:{brand:"Foodworks","brand:wikidata":"Q5465579","brand:wikipedia":"en:Foodworks",name:"Foodworks",shop:"supermarket"},removeTags:{brand:"Foodworks","brand:wikidata":"Q5465579","brand:wikipedia":"en:Foodworks",name:"Foodworks",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Fred Meyer":{name:"Fred Meyer",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q5495932"},addTags:{brand:"Fred Meyer","brand:wikidata":"Q5495932","brand:wikipedia":"en:Fred Meyer",name:"Fred Meyer",shop:"supermarket"},removeTags:{brand:"Fred Meyer","brand:wikidata":"Q5495932","brand:wikipedia":"en:Fred Meyer",name:"Fred Meyer",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/FreshCo":{name:"FreshCo",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q5502915"},addTags:{brand:"FreshCo","brand:wikidata":"Q5502915","brand:wikipedia":"en:FreshCo",name:"FreshCo",shop:"supermarket"},removeTags:{brand:"FreshCo","brand:wikidata":"Q5502915","brand:wikipedia":"en:FreshCo",name:"FreshCo",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Froiz":{name:"Froiz",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q17070775"},addTags:{brand:"Froiz","brand:wikidata":"Q17070775","brand:wikipedia":"en:Froiz",name:"Froiz",shop:"supermarket"},removeTags:{brand:"Froiz","brand:wikidata":"Q17070775","brand:wikipedia":"en:Froiz",name:"Froiz",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Føtex":{name:"Føtex",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q1480395"},addTags:{brand:"Føtex","brand:wikidata":"Q1480395","brand:wikipedia":"en:Føtex",name:"Føtex",shop:"supermarket"},removeTags:{brand:"Føtex","brand:wikidata":"Q1480395","brand:wikipedia":"en:Føtex",name:"Føtex",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/G20":{name:"G20",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q3504731"},addTags:{brand:"G20","brand:wikidata":"Q3504731","brand:wikipedia":"fr:Supermarchés G20",name:"G20",shop:"supermarket"},removeTags:{brand:"G20","brand:wikidata":"Q3504731","brand:wikipedia":"fr:Supermarchés G20",name:"G20",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Gadis":{name:"Gadis",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q12389151"},addTags:{brand:"Gadis","brand:wikidata":"Q12389151","brand:wikipedia":"gl:Gadisa",name:"Gadis",shop:"supermarket"},removeTags:{brand:"Gadis","brand:wikidata":"Q12389151","brand:wikipedia":"gl:Gadisa",name:"Gadis",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Giant Eagle":{name:"Giant Eagle",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q1522721"},addTags:{brand:"Giant Eagle","brand:wikidata":"Q1522721","brand:wikipedia":"en:Giant Eagle",name:"Giant Eagle",shop:"supermarket"},removeTags:{brand:"Giant Eagle","brand:wikidata":"Q1522721","brand:wikipedia":"en:Giant Eagle",name:"Giant Eagle",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Globus":{name:"Globus",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q457503"},addTags:{brand:"Globus","brand:wikidata":"Q457503","brand:wikipedia":"en:Globus (hypermarket)",name:"Globus",shop:"supermarket"},removeTags:{brand:"Globus","brand:wikidata":"Q457503","brand:wikipedia":"en:Globus (hypermarket)",name:"Globus",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Grand Frais":{name:"Grand Frais",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q3114675"},addTags:{brand:"Grand Frais","brand:wikidata":"Q3114675","brand:wikipedia":"fr:Grand Frais",name:"Grand Frais",shop:"supermarket"},removeTags:{brand:"Grand Frais","brand:wikidata":"Q3114675","brand:wikipedia":"fr:Grand Frais",name:"Grand Frais",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Grocery Outlet":{name:"Grocery Outlet",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q5609934"},addTags:{brand:"Grocery Outlet","brand:wikidata":"Q5609934","brand:wikipedia":"en:Grocery Outlet",name:"Grocery Outlet",shop:"supermarket"},removeTags:{brand:"Grocery Outlet","brand:wikidata":"Q5609934","brand:wikipedia":"en:Grocery Outlet",name:"Grocery Outlet",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Géant Casino":{name:"Géant Casino",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q1380537"},addTags:{brand:"Géant Casino","brand:wikidata":"Q1380537","brand:wikipedia":"en:Géant Casino",name:"Géant Casino",shop:"supermarket"},removeTags:{brand:"Géant Casino","brand:wikidata":"Q1380537","brand:wikipedia":"en:Géant Casino",name:"Géant Casino",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/H-E-B":{name:"H-E-B",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q830621"},addTags:{brand:"H-E-B","brand:wikidata":"Q830621","brand:wikipedia":"en:H-E-B",name:"H-E-B",shop:"supermarket"},removeTags:{brand:"H-E-B","brand:wikidata":"Q830621","brand:wikipedia":"en:H-E-B",name:"H-E-B",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/HIT":{name:"HIT",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q1548713"},addTags:{brand:"HIT","brand:wikidata":"Q1548713","brand:wikipedia":"de:HIT Handelsgruppe",name:"HIT",shop:"supermarket"},removeTags:{brand:"HIT","brand:wikidata":"Q1548713","brand:wikipedia":"de:HIT Handelsgruppe",name:"HIT",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Hannaford":{name:"Hannaford",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q5648760"},addTags:{brand:"Hannaford","brand:wikidata":"Q5648760","brand:wikipedia":"en:Hannaford Brothers Company",name:"Hannaford",shop:"supermarket"},removeTags:{brand:"Hannaford","brand:wikidata":"Q5648760","brand:wikipedia":"en:Hannaford Brothers Company",name:"Hannaford",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Harris Teeter":{name:"Harris Teeter",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q5665067"},addTags:{brand:"Harris Teeter","brand:wikidata":"Q5665067","brand:wikipedia":"en:Harris Teeter",name:"Harris Teeter",shop:"supermarket"},removeTags:{brand:"Harris Teeter","brand:wikidata":"Q5665067","brand:wikipedia":"en:Harris Teeter",name:"Harris Teeter",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Hemköp":{name:"Hemköp",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q10521746"},addTags:{brand:"Hemköp","brand:wikidata":"Q10521746","brand:wikipedia":"sv:Hemköp",name:"Hemköp",shop:"supermarket"},removeTags:{brand:"Hemköp","brand:wikidata":"Q10521746","brand:wikipedia":"sv:Hemköp",name:"Hemköp",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Heron Foods":{name:"Heron Foods",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q5743472"},addTags:{brand:"Heron Foods","brand:wikidata":"Q5743472","brand:wikipedia":"en:Heron Foods",name:"Heron Foods",shop:"supermarket"},removeTags:{brand:"Heron Foods","brand:wikidata":"Q5743472","brand:wikipedia":"en:Heron Foods",name:"Heron Foods",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Hofer":{name:"Hofer",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q15815751"},addTags:{brand:"Hofer","brand:wikidata":"Q15815751","brand:wikipedia":"de:Hofer KG",name:"Hofer",shop:"supermarket"},removeTags:{brand:"Hofer","brand:wikidata":"Q15815751","brand:wikipedia":"de:Hofer KG",name:"Hofer",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Hoogvliet":{name:"Hoogvliet",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q1642179"},addTags:{brand:"Hoogvliet","brand:wikidata":"Q1642179","brand:wikipedia":"nl:Hoogvliet (supermarkt)",name:"Hoogvliet",shop:"supermarket"},removeTags:{brand:"Hoogvliet","brand:wikidata":"Q1642179","brand:wikipedia":"nl:Hoogvliet (supermarkt)",name:"Hoogvliet",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Hy-Vee":{name:"Hy-Vee",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q1639719"},addTags:{brand:"Hy-Vee","brand:wikidata":"Q1639719","brand:wikipedia":"en:Hy-Vee",name:"Hy-Vee",shop:"supermarket"},removeTags:{brand:"Hy-Vee","brand:wikidata":"Q1639719","brand:wikipedia":"en:Hy-Vee",name:"Hy-Vee",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Hyper U":{name:"Hyper U",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q2529029"},addTags:{brand:"Hyper U","brand:wikidata":"Q2529029","brand:wikipedia":"en:Système U",name:"Hyper U",shop:"supermarket"},removeTags:{brand:"Hyper U","brand:wikidata":"Q2529029","brand:wikipedia":"en:Système U",name:"Hyper U",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/ICA":{name:"ICA",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q1663776"},addTags:{brand:"ICA","brand:wikidata":"Q1663776","brand:wikipedia":"sv:Ica",name:"ICA",shop:"supermarket"},removeTags:{brand:"ICA","brand:wikidata":"Q1663776","brand:wikipedia":"sv:Ica",name:"ICA",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/ICA Kvantum":{name:"ICA Kvantum",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q1663776"},addTags:{brand:"ICA Kvantum","brand:wikidata":"Q1663776","brand:wikipedia":"sv:Ica",name:"ICA Kvantum",shop:"supermarket"},removeTags:{brand:"ICA Kvantum","brand:wikidata":"Q1663776","brand:wikipedia":"sv:Ica",name:"ICA Kvantum",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/ICA Maxi":{name:"ICA Maxi",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q1663776"},addTags:{brand:"ICA Maxi","brand:wikidata":"Q1663776","brand:wikipedia":"sv:Ica",name:"ICA Maxi",shop:"supermarket"},removeTags:{brand:"ICA Maxi","brand:wikidata":"Q1663776","brand:wikipedia":"sv:Ica",name:"ICA Maxi",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/IDEA":{name:"IDEA",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q23461622"},addTags:{brand:"IDEA","brand:wikidata":"Q23461622","brand:wikipedia":"en:Idea (supermarkets)",name:"IDEA",shop:"supermarket"},removeTags:{brand:"IDEA","brand:wikidata":"Q23461622","brand:wikipedia":"en:Idea (supermarkets)",name:"IDEA",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/IGA":{name:"IGA",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q3146662"},addTags:{brand:"IGA","brand:wikidata":"Q3146662","brand:wikipedia":"en:IGA (supermarkets)",name:"IGA",shop:"supermarket"},removeTags:{brand:"IGA","brand:wikidata":"Q3146662","brand:wikipedia":"en:IGA (supermarkets)",name:"IGA",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Iceland":{name:"Iceland",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q721810"},addTags:{brand:"Iceland","brand:wikidata":"Q721810","brand:wikipedia":"en:Iceland (supermarket)",name:"Iceland",shop:"supermarket"},removeTags:{brand:"Iceland","brand:wikidata":"Q721810","brand:wikipedia":"en:Iceland (supermarket)",name:"Iceland",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Ingles":{name:"Ingles",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q6032595"},addTags:{brand:"Ingles","brand:wikidata":"Q6032595","brand:wikipedia":"en:Ingles",name:"Ingles",shop:"supermarket"},removeTags:{brand:"Ingles","brand:wikidata":"Q6032595","brand:wikipedia":"en:Ingles",name:"Ingles",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Intermarché":{name:"Intermarché",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q3153200"},addTags:{brand:"Intermarché","brand:wikidata":"Q3153200","brand:wikipedia":"fr:Intermarché",name:"Intermarché",shop:"supermarket"},removeTags:{brand:"Intermarché","brand:wikidata":"Q3153200","brand:wikipedia":"fr:Intermarché",name:"Intermarché",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Intermarché Super":{name:"Intermarché Super",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q3153200"},addTags:{brand:"Intermarché Super","brand:wikidata":"Q3153200","brand:wikipedia":"fr:Intermarché",name:"Intermarché Super",shop:"supermarket"},removeTags:{brand:"Intermarché Super","brand:wikidata":"Q3153200","brand:wikipedia":"fr:Intermarché",name:"Intermarché Super",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Interspar":{name:"Interspar",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q15820339"},addTags:{brand:"Interspar","brand:wikidata":"Q15820339","brand:wikipedia":"de:Interspar (Österreich)",name:"Interspar",shop:"supermarket"},removeTags:{brand:"Interspar","brand:wikidata":"Q15820339","brand:wikipedia":"de:Interspar (Österreich)",name:"Interspar",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Irma":{name:"Irma",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q797150"},addTags:{brand:"Irma","brand:wikidata":"Q797150","brand:wikipedia":"en:Irma (supermarket)",name:"Irma",shop:"supermarket"},removeTags:{brand:"Irma","brand:wikidata":"Q797150","brand:wikipedia":"en:Irma (supermarket)",name:"Irma",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Jewel-Osco":{name:"Jewel-Osco",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q3178470"},addTags:{brand:"Jewel-Osco","brand:wikidata":"Q3178470","brand:wikipedia":"en:Jewel (supermarket)",name:"Jewel-Osco",shop:"supermarket"},removeTags:{brand:"Jewel-Osco","brand:wikidata":"Q3178470","brand:wikipedia":"en:Jewel (supermarket)",name:"Jewel-Osco",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Joker":{name:"Joker",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q716328"},addTags:{brand:"Joker","brand:wikidata":"Q716328","brand:wikipedia":"en:Joker (store)",name:"Joker",shop:"supermarket"},removeTags:{brand:"Joker","brand:wikidata":"Q716328","brand:wikipedia":"en:Joker (store)",name:"Joker",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Jumbo":{name:"Jumbo",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q2262314"},addTags:{brand:"Jumbo","brand:wikidata":"Q2262314","brand:wikipedia":"en:Jumbo (supermarket)",name:"Jumbo",shop:"supermarket"},removeTags:{brand:"Jumbo","brand:wikidata":"Q2262314","brand:wikipedia":"en:Jumbo (supermarket)",name:"Jumbo",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Kaufland":{name:"Kaufland",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q685967"},addTags:{brand:"Kaufland","brand:wikidata":"Q685967","brand:wikipedia":"en:Kaufland",name:"Kaufland",shop:"supermarket"},removeTags:{brand:"Kaufland","brand:wikidata":"Q685967","brand:wikipedia":"en:Kaufland",name:"Kaufland",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/King Soopers":{name:"King Soopers",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q6412065"},addTags:{brand:"King Soopers","brand:wikidata":"Q6412065","brand:wikipedia":"en:King Soopers",name:"King Soopers",shop:"supermarket"},removeTags:{brand:"King Soopers","brand:wikidata":"Q6412065","brand:wikipedia":"en:King Soopers",name:"King Soopers",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Kiwi":{name:"Kiwi",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q1613639"},addTags:{brand:"Kiwi","brand:wikidata":"Q1613639","brand:wikipedia":"en:Kiwi (store)",name:"Kiwi",shop:"supermarket"},removeTags:{brand:"Kiwi","brand:wikidata":"Q1613639","brand:wikipedia":"en:Kiwi (store)",name:"Kiwi",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Kroger":{name:"Kroger",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q153417"},addTags:{brand:"Kroger","brand:wikidata":"Q153417","brand:wikipedia":"en:Kroger",name:"Kroger",shop:"supermarket"},removeTags:{brand:"Kroger","brand:wikidata":"Q153417","brand:wikipedia":"en:Kroger",name:"Kroger",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Kvickly":{name:"Kvickly",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q7061148"},addTags:{brand:"Kvickly","brand:wikidata":"Q7061148","brand:wikipedia":"en:Kvickly",name:"Kvickly",shop:"supermarket"},removeTags:{brand:"Kvickly","brand:wikidata":"Q7061148","brand:wikipedia":"en:Kvickly",name:"Kvickly",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/La Anónima":{name:"La Anónima",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q6135985"},addTags:{brand:"La Anónima","brand:wikidata":"Q6135985","brand:wikipedia":"es:La Anónima",name:"La Anónima",shop:"supermarket"},removeTags:{brand:"La Anónima","brand:wikidata":"Q6135985","brand:wikipedia":"es:La Anónima",name:"La Anónima",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/La Plaza de DIA":{name:"La Plaza de DIA",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q58904673"},addTags:{brand:"La Plaza de DIA","brand:wikidata":"Q58904673",name:"La Plaza de DIA","operator:wikidata":"Q925132","operator:wikipedia":"es:Supermercados Dia",shop:"supermarket"},removeTags:{brand:"La Plaza de DIA","brand:wikidata":"Q58904673",name:"La Plaza de DIA","operator:wikidata":"Q925132","operator:wikipedia":"es:Supermercados Dia",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/La Vie Claire":{name:"La Vie Claire",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q3213589"},addTags:{brand:"La Vie Claire","brand:wikidata":"Q3213589","brand:wikipedia":"en:La Vie Claire (company)",name:"La Vie Claire",shop:"supermarket"},removeTags:{brand:"La Vie Claire","brand:wikidata":"Q3213589","brand:wikipedia":"en:La Vie Claire (company)",name:"La Vie Claire",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Landi":{name:"Landi",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q1803010"},addTags:{brand:"Landi","brand:wikidata":"Q1803010","brand:wikipedia":"en:Landi (Unternehmen)",name:"Landi",shop:"supermarket"},removeTags:{brand:"Landi","brand:wikidata":"Q1803010","brand:wikipedia":"en:Landi (Unternehmen)",name:"Landi",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Leader Price":{name:"Leader Price",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q2181426"},addTags:{brand:"Leader Price","brand:wikidata":"Q2181426","brand:wikipedia":"en:Leader Price",name:"Leader Price",shop:"supermarket"},removeTags:{brand:"Leader Price","brand:wikidata":"Q2181426","brand:wikipedia":"en:Leader Price",name:"Leader Price",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Lider":{name:"Lider",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q6711261"},addTags:{brand:"Lider","brand:wikidata":"Q6711261","brand:wikipedia":"es:Líder (supermercado)",name:"Lider",shop:"supermarket"},removeTags:{brand:"Lider","brand:wikidata":"Q6711261","brand:wikipedia":"es:Líder (supermercado)",name:"Lider",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Lider Express":{name:"Lider Express",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q6711261"},addTags:{brand:"Lider","brand:wikidata":"Q6711261","brand:wikipedia":"es:Líder (supermercado)",name:"Lider Express",shop:"supermarket"},removeTags:{brand:"Lider","brand:wikidata":"Q6711261","brand:wikipedia":"es:Líder (supermercado)",name:"Lider Express",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Lidl":{name:"Lidl",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q151954"},addTags:{brand:"Lidl","brand:wikidata":"Q151954","brand:wikipedia":"en:Lidl",name:"Lidl",shop:"supermarket"},removeTags:{brand:"Lidl","brand:wikidata":"Q151954","brand:wikipedia":"en:Lidl",name:"Lidl",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Loblaws":{name:"Loblaws",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q3257626"},addTags:{brand:"Loblaws","brand:wikidata":"Q3257626","brand:wikipedia":"en:Loblaws",name:"Lonblaws",shop:"supermarket"},removeTags:{brand:"Loblaws","brand:wikidata":"Q3257626","brand:wikipedia":"en:Loblaws",name:"Lonblaws",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Lowe's Market":{name:"Lowe's Market",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q6693107"},addTags:{brand:"Lowe's Market","brand:wikidata":"Q6693107","brand:wikipedia":"en:Lowe's Market",name:"Lowe's Market",shop:"supermarket"},removeTags:{brand:"Lowe's Market","brand:wikidata":"Q6693107","brand:wikipedia":"en:Lowe's Market",name:"Lowe's Market",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Lowes Foods":{name:"Lowes Foods",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q6693991"},addTags:{brand:"Lowes Foods","brand:wikidata":"Q6693991","brand:wikipedia":"en:Lowes Foods",name:"Lowes Foods",shop:"supermarket"},removeTags:{brand:"Lowes Foods","brand:wikidata":"Q6693991","brand:wikipedia":"en:Lowes Foods",name:"Lowes Foods",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Lucky":{name:"Lucky",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q6698032"},addTags:{brand:"Lucky","brand:wikidata":"Q6698032","brand:wikipedia":"en:Lucky Stores",name:"Lucky",shop:"supermarket"},removeTags:{brand:"Lucky","brand:wikidata":"Q6698032","brand:wikipedia":"en:Lucky Stores",name:"Lucky",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Lupa":{name:"Lupa",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q58044048"},addTags:{brand:"Lupa","brand:wikidata":"Q58044048",name:"Lupa",shop:"supermarket"},removeTags:{brand:"Lupa","brand:wikidata":"Q58044048",name:"Lupa",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/MD":{name:"MD",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q3841263"},addTags:{brand:"MD","brand:wikidata":"Q3841263","brand:wikipedia":"en:MD Discount",name:"MD",shop:"supermarket"},removeTags:{brand:"MD","brand:wikidata":"Q3841263","brand:wikipedia":"en:MD Discount",name:"MD",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/MPREIS":{name:"MPREIS",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q873491"},addTags:{brand:"MPREIS","brand:wikidata":"Q873491","brand:wikipedia":"de:MPreis",name:"MPREIS",shop:"supermarket"},removeTags:{brand:"MPREIS","brand:wikidata":"Q873491","brand:wikipedia":"de:MPreis",name:"MPREIS",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Markant":{name:"Markant",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q57523365"},addTags:{brand:"Markant","brand:wikidata":"Q57523365",name:"Markant",shop:"supermarket"},removeTags:{brand:"Markant","brand:wikidata":"Q57523365",name:"Markant",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Market Basket":{name:"Market Basket",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q2079198"},addTags:{brand:"Market Basket","brand:wikidata":"Q2079198","brand:wikipedia":"en:Market Basket (New England)",name:"Market Basket",shop:"supermarket"},removeTags:{brand:"Market Basket","brand:wikidata":"Q2079198","brand:wikipedia":"en:Market Basket (New England)",name:"Market Basket",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Marktkauf":{name:"Marktkauf",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q1533254"},addTags:{brand:"Marktkauf","brand:wikidata":"Q1533254","brand:wikipedia":"de:Marktkauf Holding",name:"Marktkauf",shop:"supermarket"},removeTags:{brand:"Marktkauf","brand:wikidata":"Q1533254","brand:wikipedia":"de:Marktkauf Holding",name:"Marktkauf",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Martin's Super Markets":{name:"Martin's Super Markets",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q6774803"},addTags:{brand:"Martin's Super Markets","brand:wikidata":"Q6774803","brand:wikipedia":"en:Martin's Super Markets",name:"Martin's Super Markets",shop:"supermarket"},removeTags:{brand:"Martin's Super Markets","brand:wikidata":"Q6774803","brand:wikipedia":"en:Martin's Super Markets",name:"Martin's Super Markets",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Match":{name:"Match",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q513977"},addTags:{brand:"Match","brand:wikidata":"Q513977","brand:wikipedia":"en:Match (supermarket)",name:"Match",shop:"supermarket"},removeTags:{brand:"Match","brand:wikidata":"Q513977","brand:wikipedia":"en:Match (supermarket)",name:"Match",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Maxi Dia":{name:"Maxi Dia",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q925132"},addTags:{brand:"Maxi Dia","brand:wikidata":"Q925132","brand:wikipedia":"es:Supermercados Dia",name:"Maxi Dia",shop:"supermarket"},removeTags:{brand:"Maxi Dia","brand:wikidata":"Q925132","brand:wikipedia":"es:Supermercados Dia",name:"Maxi Dia",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Maxima X":{name:"Maxima X",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q1881222"},addTags:{brand:"Maxima X","brand:wikidata":"Q1881222","brand:wikipedia":"en:Maxima Group",name:"Maxima X",shop:"supermarket"},removeTags:{brand:"Maxima X","brand:wikidata":"Q1881222","brand:wikipedia":"en:Maxima Group",name:"Maxima X",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Maxima XX":{name:"Maxima XX",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q1881222"},addTags:{brand:"Maxima XX","brand:wikidata":"Q1881222","brand:wikipedia":"en:Maxima Group",name:"Maxima XX",shop:"supermarket"},removeTags:{brand:"Maxima XX","brand:wikidata":"Q1881222","brand:wikipedia":"en:Maxima Group",name:"Maxima XX",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Maxima XXX":{name:"Maxima XXX",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q1881222"},addTags:{brand:"Maxima XXX",name:"Maxima XXX","brand:wikidata":"Q1881222","brand:wikipedia":"en:Maxima Group",shop:"supermarket"},removeTags:{brand:"Maxima XXX",name:"Maxima XXX","brand:wikidata":"Q1881222","brand:wikipedia":"en:Maxima Group",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Maxi (Canada)":{name:"Maxi (Canada)",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q3302441"},addTags:{brand:"Maxi","brand:wikidata":"Q3302441","brand:wikipedia":"en:Maxi (Canadian supermarket)",name:"Maxi",shop:"supermarket"},removeTags:{brand:"Maxi","brand:wikidata":"Q3302441","brand:wikipedia":"en:Maxi (Canadian supermarket)",name:"Maxi",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Maxi (Serbia)":{name:"Maxi (Serbia)",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q6795490"},addTags:{brand:"Maxi","brand:wikidata":"Q6795490","brand:wikipedia":"en:Maxi (supermarkets)",name:"Maxi",shop:"supermarket"},removeTags:{brand:"Maxi","brand:wikidata":"Q6795490","brand:wikipedia":"en:Maxi (supermarkets)",name:"Maxi",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Mega Image":{name:"Mega Image",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q6808085"},addTags:{brand:"Mega Image","brand:wikidata":"Q6808085","brand:wikipedia":"en:Mega Image",name:"Mega Image",shop:"supermarket"},removeTags:{brand:"Mega Image","brand:wikidata":"Q6808085","brand:wikipedia":"en:Mega Image",name:"Mega Image",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Mego":{name:"Mego",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q16363314"},addTags:{brand:"Mego","brand:wikidata":"Q16363314","brand:wikipedia":"lv:Mego",name:"Mego",shop:"supermarket"},removeTags:{brand:"Mego","brand:wikidata":"Q16363314","brand:wikipedia":"lv:Mego",name:"Mego",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Meijer":{name:"Meijer",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q1917753"},addTags:{brand:"Meijer","brand:wikidata":"Q1917753","brand:wikipedia":"en:Meijer",name:"Meijer",shop:"supermarket"},removeTags:{brand:"Meijer","brand:wikidata":"Q1917753","brand:wikipedia":"en:Meijer",name:"Meijer",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Meny":{name:"Meny",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q10581720"},addTags:{brand:"Meny","brand:wikidata":"Q10581720","brand:wikipedia":"en:Meny",name:"Meny",shop:"supermarket"},removeTags:{brand:"Meny","brand:wikidata":"Q10581720","brand:wikipedia":"en:Meny",name:"Meny",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Mercadona":{name:"Mercadona",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q377705"},addTags:{brand:"Mercadona","brand:wikidata":"Q377705","brand:wikipedia":"en:Mercadona",name:"Mercadona",shop:"supermarket"},removeTags:{brand:"Mercadona","brand:wikidata":"Q377705","brand:wikipedia":"en:Mercadona",name:"Mercadona",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Merkur":{name:"Merkur",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q1921857"},addTags:{brand:"Merkur","brand:wikidata":"Q1921857","brand:wikipedia":"de:Merkur (Österreich)",name:"Merkur",shop:"supermarket"},removeTags:{brand:"Merkur","brand:wikidata":"Q1921857","brand:wikipedia":"de:Merkur (Österreich)",name:"Merkur",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Metro (Canada)":{name:"Metro (Canada)",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q1145669"},addTags:{brand:"Metro","brand:wikidata":"Q1145669","brand:wikipedia":"en:Metro Inc.",name:"Metro",shop:"supermarket"},removeTags:{brand:"Metro","brand:wikidata":"Q1145669","brand:wikipedia":"en:Metro Inc.",name:"Metro",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Migros":{name:"Migros",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q680727"},addTags:{brand:"Migros","brand:wikidata":"Q680727","brand:wikipedia":"en:Migros",name:"Migros",shop:"supermarket"},removeTags:{brand:"Migros","brand:wikidata":"Q680727","brand:wikipedia":"en:Migros",name:"Migros",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Mila":{name:"Mila",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q48844636"},addTags:{brand:"Mila","brand:wikidata":"Q48844636","brand:wikipedia":"pl:Mila (sieć sklepów)",name:"Mila",shop:"supermarket"},removeTags:{brand:"Mila","brand:wikidata":"Q48844636","brand:wikipedia":"pl:Mila (sieć sklepów)",name:"Mila",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Minipreço":{name:"Minipreço",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q3042224"},addTags:{brand:"Minipreço","brand:wikidata":"Q3042224","brand:wikipedia":"en:Minipreço",name:"Minipreço",shop:"supermarket"},removeTags:{brand:"Minipreço","brand:wikidata":"Q3042224","brand:wikipedia":"en:Minipreço",name:"Minipreço",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Mix Markt":{name:"Mix Markt",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q327854"},addTags:{brand:"Mix Markt","brand:wikidata":"Q327854","brand:wikipedia":"de:Mix Markt",name:"Mix Markt",shop:"supermarket"},removeTags:{brand:"Mix Markt","brand:wikidata":"Q327854","brand:wikipedia":"de:Mix Markt",name:"Mix Markt",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Monoprix":{name:"Monoprix",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q3321241"},addTags:{brand:"Monoprix","brand:wikidata":"Q3321241","brand:wikipedia":"en:Monoprix",name:"Monoprix",shop:"supermarket"},removeTags:{brand:"Monoprix","brand:wikidata":"Q3321241","brand:wikipedia":"en:Monoprix",name:"Monoprix",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/More":{name:"More",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q6910891"},addTags:{brand:"More","brand:wikidata":"Q6910891","brand:wikipedia":"en:More (store)",name:"More",shop:"supermarket"},removeTags:{brand:"More","brand:wikidata":"Q6910891","brand:wikipedia":"en:More (store)",name:"More",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Morrisons":{name:"Morrisons",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q922344"},addTags:{brand:"Morrisons","brand:wikidata":"Q922344","brand:wikipedia":"en:Morrisons",name:"Morrisons",shop:"supermarket"},removeTags:{brand:"Morrisons","brand:wikidata":"Q922344","brand:wikipedia":"en:Morrisons",name:"Morrisons",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Nah & Frisch":{name:"Nah & Frisch",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q1963643"},addTags:{brand:"Nah & Frisch","brand:wikidata":"Q1963643","brand:wikipedia":"de:Nah & Frisch",name:"Nah & Frisch",shop:"supermarket"},removeTags:{brand:"Nah & Frisch","brand:wikidata":"Q1963643","brand:wikipedia":"de:Nah & Frisch",name:"Nah & Frisch",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Nahkauf":{name:"Nahkauf",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q57515238"},addTags:{brand:"Nahkauf","brand:wikidata":"Q57515238",name:"Nahkauf",shop:"supermarket"},removeTags:{brand:"Nahkauf","brand:wikidata":"Q57515238",name:"Nahkauf",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Naturalia":{name:"Naturalia",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q3337081"},addTags:{brand:"Naturalia","brand:wikidata":"Q3337081","brand:wikipedia":"fr:Naturalia",name:"Naturalia",shop:"supermarket"},removeTags:{brand:"Naturalia","brand:wikidata":"Q3337081","brand:wikipedia":"fr:Naturalia",name:"Naturalia",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Netto":{name:"Netto",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q552652"},addTags:{brand:"Netto","brand:wikidata":"Q552652","brand:wikipedia":"en:Netto (store)",name:"Netto",shop:"supermarket"},removeTags:{brand:"Netto","brand:wikidata":"Q552652","brand:wikipedia":"en:Netto (store)",name:"Netto",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Netto Marken-Discount":{name:"Netto Marken-Discount",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q879858"},addTags:{brand:"Netto Marken-Discount","brand:wikidata":"Q879858","brand:wikipedia":"en:Netto Marken-Discount",name:"Netto Marken-Discount",shop:"supermarket"},removeTags:{brand:"Netto Marken-Discount","brand:wikidata":"Q879858","brand:wikipedia":"en:Netto Marken-Discount",name:"Netto Marken-Discount",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/New World":{name:"New World",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q7012488"},addTags:{brand:"New World","brand:wikidata":"Q7012488","brand:wikipedia":"en:New World (supermarket)",name:"New World",shop:"supermarket"},removeTags:{brand:"New World","brand:wikidata":"Q7012488","brand:wikipedia":"en:New World (supermarket)",name:"New World",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/No Frills":{name:"No Frills",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q3342407"},addTags:{brand:"No Frills","brand:wikidata":"Q3342407","brand:wikipedia":"en:No Frills (grocery store)",name:"No Frills",shop:"supermarket"},removeTags:{brand:"No Frills","brand:wikidata":"Q3342407","brand:wikipedia":"en:No Frills (grocery store)",name:"No Frills",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Norfa XL":{name:"Norfa XL",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q1998983"},addTags:{brand:"Norfa XL","brand:wikidata":"Q1998983","brand:wikipedia":"lt:Norfa",name:"Norfa XL",shop:"supermarket"},removeTags:{brand:"Norfa XL","brand:wikidata":"Q1998983","brand:wikipedia":"lt:Norfa",name:"Norfa XL",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Norma":{name:"Norma",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q450180"},addTags:{brand:"Norma","brand:wikidata":"Q450180","brand:wikipedia":"de:Norma (Handelskette)",name:"Norma",shop:"supermarket"},removeTags:{brand:"Norma","brand:wikidata":"Q450180","brand:wikipedia":"de:Norma (Handelskette)",name:"Norma",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Okay":{name:"Okay",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q2159701"},addTags:{brand:"Okay","brand:wikidata":"Q2159701","brand:wikipedia":"fr:OKay",name:"Okay",shop:"supermarket"},removeTags:{brand:"Okay","brand:wikidata":"Q2159701","brand:wikipedia":"fr:OKay",name:"Okay",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Olímpica":{name:"Olímpica",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q24749847"},addTags:{brand:"Olímpica","brand:wikidata":"Q24749847","brand:wikipedia":"es:Olímpica (supermercado)",name:"Olímpica",shop:"supermarket"},removeTags:{brand:"Olímpica","brand:wikidata":"Q24749847","brand:wikipedia":"es:Olímpica (supermercado)",name:"Olímpica",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/PLUS":{name:"PLUS",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q1978981"},addTags:{brand:"PLUS","brand:wikidata":"Q1978981","brand:wikipedia":"nl:PLUS (Nederlandse supermarkt)",name:"PLUS",shop:"supermarket"},removeTags:{brand:"PLUS","brand:wikidata":"Q1978981","brand:wikipedia":"nl:PLUS (Nederlandse supermarkt)",name:"PLUS",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/POLOmarket":{name:"POLOmarket",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q11821937"},addTags:{brand:"POLOmarket","brand:wikidata":"Q11821937","brand:wikipedia":"en:Polomarket",name:"POLOmarket",shop:"supermarket"},removeTags:{brand:"POLOmarket","brand:wikidata":"Q11821937","brand:wikipedia":"en:Polomarket",name:"POLOmarket",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Palí":{name:"Palí",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q1064887"},addTags:{brand:"Palí","brand:wikidata":"Q1064887","brand:wikipedia":"es:Walmart de México y Centroamérica",name:"Palí",shop:"supermarket"},removeTags:{brand:"Palí","brand:wikidata":"Q1064887","brand:wikipedia":"es:Walmart de México y Centroamérica",name:"Palí",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Pam":{name:"Pam",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q3777398"},addTags:{brand:"Pam","brand:wikidata":"Q3777398","brand:wikipedia":"it:Gruppo PAM",name:"Pam",shop:"supermarket"},removeTags:{brand:"Pam","brand:wikidata":"Q3777398","brand:wikipedia":"it:Gruppo PAM",name:"Pam",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Pavilions":{name:"Pavilions",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q7155886"},addTags:{brand:"Pavilions","brand:wikidata":"Q7155886","brand:wikipedia":"en:Pavilions (supermarket)",name:"Pavilions",shop:"supermarket"},removeTags:{brand:"Pavilions","brand:wikidata":"Q7155886","brand:wikipedia":"en:Pavilions (supermarket)",name:"Pavilions",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Penny":{name:"Penny",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q284688"},addTags:{brand:"Penny","brand:wikidata":"Q284688","brand:wikipedia":"en:Penny (supermarket)",name:"Penny",shop:"supermarket"},removeTags:{brand:"Penny","brand:wikidata":"Q284688","brand:wikipedia":"en:Penny (supermarket)",name:"Penny",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Pick 'n Save":{name:"Pick 'n Save",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q7371288"},addTags:{brand:"Pick 'n Save","brand:wikidata":"Q7371288","brand:wikipedia":"en:Roundy's",name:"Pick 'n Save",shop:"supermarket"},removeTags:{brand:"Pick 'n Save","brand:wikidata":"Q7371288","brand:wikipedia":"en:Roundy's",name:"Pick 'n Save",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Pick n Pay":{name:"Pick n Pay",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q7190735"},addTags:{brand:"Pick n Pay","brand:wikidata":"Q7190735","brand:wikipedia":"en:Pick n Pay Stores",name:"Pick n Pay",shop:"supermarket"},removeTags:{brand:"Pick n Pay","brand:wikidata":"Q7190735","brand:wikipedia":"en:Pick n Pay Stores",name:"Pick n Pay",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Piggly Wiggly":{name:"Piggly Wiggly",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q3388303"},addTags:{brand:"Piggly Wiggly","brand:wikidata":"Q3388303","brand:wikipedia":"en:Piggly Wiggly",name:"Piggly Wiggly",shop:"supermarket"},removeTags:{brand:"Piggly Wiggly","brand:wikidata":"Q3388303","brand:wikipedia":"en:Piggly Wiggly",name:"Piggly Wiggly",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Pingo Doce":{name:"Pingo Doce",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q1575057"},addTags:{brand:"Pingo Doce","brand:wikidata":"Q1575057","brand:wikipedia":"en:Pingo Doce",name:"Pingo Doce",shop:"supermarket"},removeTags:{brand:"Pingo Doce","brand:wikidata":"Q1575057","brand:wikipedia":"en:Pingo Doce",name:"Pingo Doce",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Piotr i Paweł":{name:"Piotr i Paweł",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q2096356"},addTags:{brand:"Piotr i Paweł","brand:wikidata":"Q2096356","brand:wikipedia":"en:Piotr i Paweł",name:"Piotr i Paweł",shop:"supermarket"},removeTags:{brand:"Piotr i Paweł","brand:wikidata":"Q2096356","brand:wikipedia":"en:Piotr i Paweł",name:"Piotr i Paweł",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Plaza Vea":{name:"Plaza Vea",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q7203672"},addTags:{brand:"Plaza Vea","brand:wikidata":"Q7203672","brand:wikipedia":"en:Plaza Vea",name:"Plaza Vea",shop:"supermarket"},removeTags:{brand:"Plaza Vea","brand:wikidata":"Q7203672","brand:wikipedia":"en:Plaza Vea",name:"Plaza Vea",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Plodine":{name:"Plodine",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q58040098"},addTags:{brand:"Plodine","brand:wikidata":"Q58040098",name:"Plodine",shop:"supermarket"},removeTags:{brand:"Plodine","brand:wikidata":"Q58040098",name:"Plodine",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Poiesz":{name:"Poiesz",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q2521700"},addTags:{brand:"Poiesz","brand:wikidata":"Q2521700","brand:wikipedia":"nl:Poiesz Supermarkten",name:"Poiesz",shop:"supermarket"},removeTags:{brand:"Poiesz","brand:wikidata":"Q2521700","brand:wikipedia":"nl:Poiesz Supermarkten",name:"Poiesz",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Price Chopper (Kansas City)":{name:"Price Chopper (Kansas City)",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q7242572"},addTags:{brand:"Price Chopper","brand:wikidata":"Q7242572","brand:wikipedia":"en:Price Chopper (supermarket)",name:"Price Chopper",shop:"supermarket"},removeTags:{brand:"Price Chopper","brand:wikidata":"Q7242572","brand:wikipedia":"en:Price Chopper (supermarket)",name:"Price Chopper",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Price Chopper (New York)":{name:"Price Chopper (New York)",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q7242574"},addTags:{brand:"Price Chopper","brand:wikidata":"Q7242574","brand:wikipedia":"en:Price Chopper Supermarkets",name:"Price Chopper",shop:"supermarket"},removeTags:{brand:"Price Chopper","brand:wikidata":"Q7242574","brand:wikipedia":"en:Price Chopper Supermarkets",name:"Price Chopper",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Profi":{name:"Profi",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q956664"},addTags:{brand:"Profi","brand:wikidata":"Q956664","brand:wikipedia":"en:Profi",name:"Profi",shop:"supermarket"},removeTags:{brand:"Profi","brand:wikidata":"Q956664","brand:wikipedia":"en:Profi",name:"Profi",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Provigo":{name:"Provigo",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q3408306"},addTags:{brand:"Provigo","brand:wikidata":"Q3408306","brand:wikipedia":"en:Provigo",name:"Provigo",shop:"supermarket"},removeTags:{brand:"Provigo","brand:wikidata":"Q3408306","brand:wikipedia":"en:Provigo",name:"Provigo",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Proxi":{name:"Proxi",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q3408522"},addTags:{brand:"Proxi","brand:wikidata":"Q3408522","brand:wikipedia":"fr:Proxi",name:"Proxi",shop:"supermarket"},removeTags:{brand:"Proxi","brand:wikidata":"Q3408522","brand:wikipedia":"fr:Proxi",name:"Proxi",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Proxy Delhaize":{name:"Proxy Delhaize",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q14903417"},addTags:{brand:"Proxy Delhaize","brand:wikidata":"Q14903417","brand:wikipedia":"en:Delhaize Group",name:"Proxy Delhaize",shop:"supermarket"},removeTags:{brand:"Proxy Delhaize","brand:wikidata":"Q14903417","brand:wikipedia":"en:Delhaize Group",name:"Proxy Delhaize",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Publix":{name:"Publix",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q672170"},addTags:{brand:"Publix","brand:wikidata":"Q672170","brand:wikipedia":"en:Publix",name:"Publix",shop:"supermarket"},removeTags:{brand:"Publix","brand:wikidata":"Q672170","brand:wikipedia":"en:Publix",name:"Publix",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Punto Simply":{name:"Punto Simply",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q3484790"},addTags:{brand:"Punto Simply","brand:wikidata":"Q3484790","brand:wikipedia":"it:Simply Market",name:"Punto Simply",shop:"supermarket"},removeTags:{brand:"Punto Simply","brand:wikidata":"Q3484790","brand:wikipedia":"it:Simply Market",name:"Punto Simply",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Puregold":{name:"Puregold",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q7261170"},addTags:{brand:"Puregold","brand:wikidata":"Q7261170","brand:wikipedia":"en:Puregold",name:"Puregold",shop:"supermarket"},removeTags:{brand:"Puregold","brand:wikidata":"Q7261170","brand:wikipedia":"en:Puregold",name:"Puregold",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Pão de Açúcar":{name:"Pão de Açúcar",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q3411543"},addTags:{brand:"Pão de Açúcar","brand:wikidata":"Q3411543","brand:wikipedia":"pt:Pão de Açúcar (supermercado brasileiro)",name:"Pão de Açúcar",shop:"supermarket"},removeTags:{brand:"Pão de Açúcar","brand:wikidata":"Q3411543","brand:wikipedia":"pt:Pão de Açúcar (supermercado brasileiro)",name:"Pão de Açúcar",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/QFC":{name:"QFC",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q7265425"},addTags:{brand:"QFC","brand:wikidata":"Q7265425","brand:wikipedia":"en:QFC",name:"QFC",shop:"supermarket"},removeTags:{brand:"QFC","brand:wikidata":"Q7265425","brand:wikipedia":"en:QFC",name:"QFC",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Ralphs":{name:"Ralphs",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q3929820"},addTags:{brand:"Ralphs","brand:wikidata":"Q3929820","brand:wikipedia":"en:Ralphs",name:"Ralphs",shop:"supermarket"},removeTags:{brand:"Ralphs","brand:wikidata":"Q3929820","brand:wikipedia":"en:Ralphs",name:"Ralphs",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Real":{name:"Real",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q698473"},addTags:{brand:"Real","brand:wikidata":"Q698473","brand:wikipedia":"en:Real (hypermarket)",name:"Real",shop:"supermarket"},removeTags:{brand:"Real","brand:wikidata":"Q698473","brand:wikipedia":"en:Real (hypermarket)",name:"Real",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Real Canadian Superstore":{name:"Real Canadian Superstore",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q7300856"},addTags:{brand:"Real Canadian Superstore","brand:wikidata":"Q7300856","brand:wikipedia":"en:Real Canadian Superstore",name:"Real Canadian Superstore",shop:"supermarket"},removeTags:{brand:"Real Canadian Superstore","brand:wikidata":"Q7300856","brand:wikipedia":"en:Real Canadian Superstore",name:"Real Canadian Superstore",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Redner's Markets":{name:"Redner's Markets",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q7306166"},addTags:{brand:"Redner's Markets","brand:wikidata":"Q7306166","brand:wikipedia":"en:Redner's Markets",name:"Redner's Markets",shop:"supermarket"},removeTags:{brand:"Redner's Markets","brand:wikidata":"Q7306166","brand:wikipedia":"en:Redner's Markets",name:"Redner's Markets",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Reliance Fresh":{name:"Reliance Fresh",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q7311014"},addTags:{brand:"Reliance Fresh","brand:wikidata":"Q7311014","brand:wikipedia":"en:Reliance Fresh",name:"Reliance Fresh",shop:"supermarket"},removeTags:{brand:"Reliance Fresh","brand:wikidata":"Q7311014","brand:wikipedia":"en:Reliance Fresh",name:"Reliance Fresh",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Rema 1000":{name:"Rema 1000",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q28459"},addTags:{brand:"Rema 1000","brand:wikidata":"Q28459","brand:wikipedia":"en:REMA 1000",name:"Rema 1000",shop:"supermarket"},removeTags:{brand:"Rema 1000","brand:wikidata":"Q28459","brand:wikipedia":"en:REMA 1000",name:"Rema 1000",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Rewe":{name:"Rewe",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q16968817"},addTags:{brand:"Rewe","brand:wikidata":"Q16968817","brand:wikipedia":"en:REWE",name:"Rewe",shop:"supermarket"},removeTags:{brand:"Rewe","brand:wikidata":"Q16968817","brand:wikipedia":"en:REWE",name:"Rewe",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Rewe City":{name:"Rewe City",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q16968817"},addTags:{brand:"Rewe City","brand:wikidata":"Q16968817","brand:wikipedia":"en:REWE",name:"Rewe City",shop:"supermarket"},removeTags:{brand:"Rewe City","brand:wikidata":"Q16968817","brand:wikipedia":"en:REWE",name:"Rewe City",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Rimi":{name:"Rimi",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q7334456"},addTags:{brand:"Rimi","brand:wikidata":"Q7334456","brand:wikipedia":"en:Rimi (Norway)",name:"Rimi",shop:"supermarket"},removeTags:{brand:"Rimi","brand:wikidata":"Q7334456","brand:wikipedia":"en:Rimi (Norway)",name:"Rimi",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/S-Market":{name:"S-Market",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q11891613"},addTags:{brand:"S-Market","brand:wikidata":"Q11891613","brand:wikipedia":"fi:S-market",name:"S-Market",shop:"supermarket"},removeTags:{brand:"S-Market","brand:wikidata":"Q11891613","brand:wikipedia":"fi:S-market",name:"S-Market",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Safeway":{name:"Safeway",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q1508234"},addTags:{brand:"Safeway","brand:wikidata":"Q1508234","brand:wikipedia":"en:Safeway Inc.",name:"Safeway",shop:"supermarket"},removeTags:{brand:"Safeway","brand:wikidata":"Q1508234","brand:wikipedia":"en:Safeway Inc.",name:"Safeway",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Sainsbury's":{name:"Sainsbury's",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q152096"},addTags:{brand:"Sainsbury's","brand:wikidata":"Q152096","brand:wikipedia":"en:Sainsbury's",name:"Sainsbury's",shop:"supermarket"},removeTags:{brand:"Sainsbury's","brand:wikidata":"Q152096","brand:wikipedia":"en:Sainsbury's",name:"Sainsbury's",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Santa Isabel":{name:"Santa Isabel",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q7419620"},addTags:{brand:"Santa Isabel","brand:wikidata":"Q7419620","brand:wikipedia":"es:Santa Isabel (supermercado)",name:"Santa Isabel",shop:"supermarket"},removeTags:{brand:"Santa Isabel","brand:wikidata":"Q7419620","brand:wikipedia":"es:Santa Isabel (supermercado)",name:"Santa Isabel",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Save-A-Lot":{name:"Save-A-Lot",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q7427972"},addTags:{brand:"Save-A-Lot","brand:wikidata":"Q7427972","brand:wikipedia":"en:Save-A-Lot",name:"Save-A-Lot",shop:"supermarket"},removeTags:{brand:"Save-A-Lot","brand:wikidata":"Q7427972","brand:wikipedia":"en:Save-A-Lot",name:"Save-A-Lot",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Schnucks":{name:"Schnucks",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q7431920"},addTags:{brand:"Schnucks","brand:wikidata":"Q7431920","brand:wikipedia":"en:Schnucks",name:"Schnucks",shop:"supermarket"},removeTags:{brand:"Schnucks","brand:wikidata":"Q7431920","brand:wikipedia":"en:Schnucks",name:"Schnucks",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Shaw's":{name:"Shaw's",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q578387"},addTags:{brand:"Shaw's","brand:wikidata":"Q578387","brand:wikipedia":"en:Shaw's and Star Market",name:"Shaw's",shop:"supermarket"},removeTags:{brand:"Shaw's","brand:wikidata":"Q578387","brand:wikipedia":"en:Shaw's and Star Market",name:"Shaw's",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/ShopRite":{name:"ShopRite",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q7501097"},addTags:{brand:"ShopRite","brand:wikidata":"Q7501097","brand:wikipedia":"en:ShopRite (United States)",name:"ShopRite",shop:"supermarket"},removeTags:{brand:"ShopRite","brand:wikidata":"Q7501097","brand:wikipedia":"en:ShopRite (United States)",name:"ShopRite",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Shoprite":{name:"Shoprite",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q1857639"},addTags:{brand:"Shoprite","brand:wikidata":"Q1857639","brand:wikipedia":"en:ShopRite (South Africa)",name:"Shoprite",shop:"supermarket"},removeTags:{brand:"Shoprite","brand:wikidata":"Q1857639","brand:wikipedia":"en:ShopRite (South Africa)",name:"Shoprite",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Sigma":{name:"Sigma",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q3977979"},addTags:{brand:"Sigma","brand:wikidata":"Q3977979","brand:wikipedia":"it:Supermercati Sigma",name:"Sigma",shop:"supermarket"},removeTags:{brand:"Sigma","brand:wikidata":"Q3977979","brand:wikipedia":"it:Supermercati Sigma",name:"Sigma",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Simply Market":{name:"Simply Market",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q3484790"},addTags:{brand:"Simply Market","brand:wikidata":"Q3484790","brand:wikipedia":"en:Simply Market",name:"Simply Market",shop:"supermarket"},removeTags:{brand:"Simply Market","brand:wikidata":"Q3484790","brand:wikipedia":"en:Simply Market",name:"Simply Market",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Sky":{name:"Sky",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q1129779"},addTags:{name:"Sky",brand:"Sky","brand:wikipedia":"de:Coop eG","brand:wikidata":"Q1129779",shop:"supermarket"},removeTags:{name:"Sky",brand:"Sky","brand:wikipedia":"de:Coop eG","brand:wikidata":"Q1129779",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Smith's":{name:"Smith's",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q7544856"},addTags:{brand:"Smith's","brand:wikidata":"Q7544856","brand:wikipedia":"en:Smith's Food and Drug",name:"Smith's",shop:"supermarket"},removeTags:{brand:"Smith's","brand:wikidata":"Q7544856","brand:wikipedia":"en:Smith's Food and Drug",name:"Smith's",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Sobeys":{name:"Sobeys",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q1143340"},addTags:{brand:"Sobeys","brand:wikidata":"Q1143340","brand:wikipedia":"en:Sobeys",name:"Sobeys",shop:"supermarket"},removeTags:{brand:"Sobeys","brand:wikidata":"Q1143340","brand:wikipedia":"en:Sobeys",name:"Sobeys",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Soriana":{name:"Soriana",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q735562"},addTags:{brand:"Soriana","brand:wikidata":"Q735562","brand:wikipedia":"en:Soriana",name:"Soriana",shop:"supermarket"},removeTags:{brand:"Soriana","brand:wikidata":"Q735562","brand:wikipedia":"en:Soriana",name:"Soriana",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Spar":{name:"Spar",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q610492"},addTags:{brand:"Spar","brand:wikidata":"Q610492","brand:wikipedia":"en:Spar (retailer)",name:"Spar",shop:"supermarket"},removeTags:{brand:"Spar","brand:wikidata":"Q610492","brand:wikipedia":"en:Spar (retailer)",name:"Spar",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Społem":{name:"Społem",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q11826043"},addTags:{brand:"Społem","brand:wikidata":"Q11826043","brand:wikipedia":"pl:Powszechna Spółdzielnia Spożywców „Społem”",name:"Społem",shop:"supermarket"},removeTags:{brand:"Społem","brand:wikidata":"Q11826043","brand:wikipedia":"pl:Powszechna Spółdzielnia Spożywców „Społem”",name:"Społem",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Sprouts Farmers Market":{name:"Sprouts Farmers Market",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q7581369"},addTags:{brand:"Sprouts Farmers Market","brand:wikidata":"Q7581369","brand:wikipedia":"en:Sprouts Farmers Market",name:"Sprouts Farmers Market",shop:"supermarket"},removeTags:{brand:"Sprouts Farmers Market","brand:wikidata":"Q7581369","brand:wikipedia":"en:Sprouts Farmers Market",name:"Sprouts Farmers Market",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Stater Bros.":{name:"Stater Bros.",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q7604016"},addTags:{brand:"Stater Bros.","brand:wikidata":"Q7604016","brand:wikipedia":"en:Stater Bros.",name:"Stater Bros.",shop:"supermarket"},removeTags:{brand:"Stater Bros.","brand:wikidata":"Q7604016","brand:wikipedia":"en:Stater Bros.",name:"Stater Bros.",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Stokrotka":{name:"Stokrotka",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q9345945"},addTags:{brand:"Stokrotka","brand:wikidata":"Q9345945","brand:wikipedia":"en:Stokrotka",name:"Stokrotka",shop:"supermarket"},removeTags:{brand:"Stokrotka","brand:wikidata":"Q9345945","brand:wikipedia":"en:Stokrotka",name:"Stokrotka",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Stop & Shop":{name:"Stop & Shop",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q3658429"},addTags:{brand:"Stop & Shop","brand:wikidata":"Q3658429","brand:wikipedia":"en:Stop & Shop",name:"Stop & Shop",shop:"supermarket"},removeTags:{brand:"Stop & Shop","brand:wikidata":"Q3658429","brand:wikipedia":"en:Stop & Shop",name:"Stop & Shop",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Suma":{name:"Suma",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q58012362"},addTags:{brand:"Suma","brand:wikidata":"Q58012362",name:"Suma",shop:"supermarket"},removeTags:{brand:"Suma","brand:wikidata":"Q58012362",name:"Suma",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Super C":{name:"Super C",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q3504127"},addTags:{brand:"Super C","brand:wikidata":"Q3504127","brand:wikipedia":"en:Super C (supermarket)",name:"Super C",shop:"supermarket"},removeTags:{brand:"Super C","brand:wikidata":"Q3504127","brand:wikipedia":"en:Super C (supermarket)",name:"Super C",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Super U":{name:"Super U",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q2529029"},addTags:{brand:"Super U","brand:wikidata":"Q2529029","brand:wikipedia":"en:Système U",name:"Super U",shop:"supermarket"},removeTags:{brand:"Super U","brand:wikidata":"Q2529029","brand:wikipedia":"en:Système U",name:"Super U",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/SuperBrugsen":{name:"SuperBrugsen",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q12337746"},addTags:{brand:"SuperBrugsen","brand:wikidata":"Q12337746","brand:wikipedia":"en:SuperBrugsen",name:"SuperBrugsen",shop:"supermarket"},removeTags:{brand:"SuperBrugsen","brand:wikidata":"Q12337746","brand:wikipedia":"en:SuperBrugsen",name:"SuperBrugsen",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/SuperValu":{name:"SuperValu",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q7642081"},addTags:{brand:"SuperValu","brand:wikidata":"Q7642081","brand:wikipedia":"en:SuperValu (Ireland)`",name:"SuperValu",shop:"supermarket"},removeTags:{brand:"SuperValu","brand:wikidata":"Q7642081","brand:wikipedia":"en:SuperValu (Ireland)`",name:"SuperValu",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Superama":{name:"Superama",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q6135762"},addTags:{brand:"Superama","brand:wikidata":"Q6135762","brand:wikipedia":"es:Superama",name:"Superama",shop:"supermarket"},removeTags:{brand:"Superama","brand:wikidata":"Q6135762","brand:wikipedia":"es:Superama",name:"Superama",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Superspar":{name:"Superspar",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q610492"},addTags:{brand:"Superspar","brand:wikidata":"Q610492","brand:wikipedia":"en:Spar (retailer)",name:"Superspar",shop:"supermarket"},removeTags:{brand:"Superspar","brand:wikidata":"Q610492","brand:wikipedia":"en:Spar (retailer)",name:"Superspar",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Tegut":{name:"Tegut",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q1547993"},addTags:{brand:"Tegut","brand:wikidata":"Q1547993","brand:wikipedia":"en:Tegut",name:"Tegut",shop:"supermarket"},removeTags:{brand:"Tegut","brand:wikidata":"Q1547993","brand:wikipedia":"en:Tegut",name:"Tegut",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Tesco":{name:"Tesco",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q487494"},addTags:{brand:"Tesco","brand:wikidata":"Q487494","brand:wikipedia":"en:Tesco",name:"Tesco",shop:"supermarket"},removeTags:{brand:"Tesco","brand:wikidata":"Q487494","brand:wikipedia":"en:Tesco",name:"Tesco",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Tesco Express":{name:"Tesco Express",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q487494"},addTags:{brand:"Tesco Express","brand:wikidata":"Q487494","brand:wikipedia":"en:Tesco",name:"Tesco Express",shop:"supermarket"},removeTags:{brand:"Tesco Express","brand:wikidata":"Q487494","brand:wikipedia":"en:Tesco",name:"Tesco Express",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Tesco Extra":{name:"Tesco Extra",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q25172225"},addTags:{brand:"Tesco Extra","brand:wikidata":"Q25172225","brand:wikipedia":"en:Tesco Extra",name:"Tesco Extra",shop:"supermarket"},removeTags:{brand:"Tesco Extra","brand:wikidata":"Q25172225","brand:wikipedia":"en:Tesco Extra",name:"Tesco Extra",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Tesco Metro":{name:"Tesco Metro",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q57551648"},addTags:{brand:"Tesco Metro","brand:wikidata":"Q57551648",name:"Tesco Metro",shop:"supermarket"},removeTags:{brand:"Tesco Metro","brand:wikidata":"Q57551648",name:"Tesco Metro",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/The Co-operative Food":{name:"The Co-operative Food",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q3277439"},addTags:{brand:"The Co-operative Food","brand:wikidata":"Q3277439","brand:wikipedia":"en:Co-op Food",name:"The Co-operative Food",shop:"supermarket"},removeTags:{brand:"The Co-operative Food","brand:wikidata":"Q3277439","brand:wikipedia":"en:Co-op Food",name:"The Co-operative Food",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/The Fresh Market":{name:"The Fresh Market",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q7735265"},addTags:{brand:"The Fresh Market","brand:wikidata":"Q7735265","brand:wikipedia":"en:The Fresh Market",name:"The Fresh Market",shop:"supermarket"},removeTags:{brand:"The Fresh Market","brand:wikidata":"Q7735265","brand:wikipedia":"en:The Fresh Market",name:"The Fresh Market",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Todis":{name:"Todis",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q3992174"},addTags:{brand:"Todis","brand:wikidata":"Q3992174","brand:wikipedia":"it:Todis",name:"Todis",shop:"supermarket"},removeTags:{brand:"Todis","brand:wikidata":"Q3992174","brand:wikipedia":"it:Todis",name:"Todis",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Tommy":{name:"Tommy",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q12643718"},addTags:{brand:"Tommy","brand:wikidata":"Q12643718","brand:wikipedia":"hr:Tommy",name:"Tommy",shop:"supermarket"},removeTags:{brand:"Tommy","brand:wikidata":"Q12643718","brand:wikipedia":"hr:Tommy",name:"Tommy",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Tops":{name:"Tops",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q7825137"},addTags:{brand:"Tops","brand:wikidata":"Q7825137","brand:wikipedia":"en:Tops Friendly Markets",name:"Tops",shop:"supermarket"},removeTags:{brand:"Tops","brand:wikidata":"Q7825137","brand:wikipedia":"en:Tops Friendly Markets",name:"Tops",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Tottus":{name:"Tottus",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q7828510"},addTags:{brand:"Tottus","brand:wikidata":"Q7828510","brand:wikipedia":"en:Tottus",name:"Tottus",shop:"supermarket"},removeTags:{brand:"Tottus","brand:wikidata":"Q7828510","brand:wikipedia":"en:Tottus",name:"Tottus",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Trader Joe's":{name:"Trader Joe's",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q688825"},addTags:{brand:"Trader Joe's","brand:wikidata":"Q688825","brand:wikipedia":"en:Trader Joe's",name:"Trader Joe's",shop:"supermarket"},removeTags:{brand:"Trader Joe's","brand:wikidata":"Q688825","brand:wikipedia":"en:Trader Joe's",name:"Trader Joe's",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Treff 3000":{name:"Treff 3000",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q701755"},addTags:{brand:"Treff 3000","brand:wikidata":"Q701755","brand:wikipedia":"de:Edeka",name:"Treff 3000",shop:"supermarket"},removeTags:{brand:"Treff 3000","brand:wikidata":"Q701755","brand:wikipedia":"de:Edeka",name:"Treff 3000",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Tuodì":{name:"Tuodì",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q3706995"},addTags:{brand:"Tuodì","brand:wikidata":"Q3706995","brand:wikipedia":"it:Tuodì",name:"Tuodì",shop:"supermarket"},removeTags:{brand:"Tuodì","brand:wikidata":"Q3706995","brand:wikipedia":"it:Tuodì",name:"Tuodì",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/U Express":{name:"U Express",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q2529029"},addTags:{brand:"U Express","brand:wikidata":"Q2529029","brand:wikipedia":"en:Système U",name:"U Express",shop:"supermarket"},removeTags:{brand:"U Express","brand:wikidata":"Q2529029","brand:wikipedia":"en:Système U",name:"U Express",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Unimarc":{name:"Unimarc",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q6156244"},addTags:{brand:"Unimarc","brand:wikidata":"Q6156244","brand:wikipedia":"es:Unimarc",name:"Unimarc",shop:"supermarket"},removeTags:{brand:"Unimarc","brand:wikidata":"Q6156244","brand:wikipedia":"es:Unimarc",name:"Unimarc",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Unimarkt":{name:"Unimarkt",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q1169599"},addTags:{brand:"Unimarkt","brand:wikidata":"Q1169599","brand:wikipedia":"de:Unimarkt",name:"Unimarkt",shop:"supermarket"},removeTags:{brand:"Unimarkt","brand:wikidata":"Q1169599","brand:wikipedia":"de:Unimarkt",name:"Unimarkt",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Vea":{name:"Vea",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q5858167"},addTags:{brand:"Vea","brand:wikidata":"Q5858167","brand:wikipedia":"es:Vea (supermercado)",name:"Vea",shop:"supermarket"},removeTags:{brand:"Vea","brand:wikidata":"Q5858167","brand:wikipedia":"es:Vea (supermercado)",name:"Vea",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/VinMart":{name:"VinMart",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q60245505"},addTags:{brand:"VinMart","brand:wikidata":"Q60245505","brand:wikipedia":"vi:VinMart",name:"VinMart",shop:"supermarket"},removeTags:{brand:"VinMart","brand:wikidata":"Q60245505","brand:wikipedia":"vi:VinMart",name:"VinMart",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Vomar":{name:"Vomar",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q3202837"},addTags:{brand:"Vomar","brand:wikidata":"Q3202837","brand:wikipedia":"nl:Vomar",name:"Vomar",shop:"supermarket"},removeTags:{brand:"Vomar","brand:wikidata":"Q3202837","brand:wikipedia":"nl:Vomar",name:"Vomar",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Vons":{name:"Vons",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q7941609"},addTags:{brand:"Vons","brand:wikidata":"Q7941609","brand:wikipedia":"en:Vons",name:"Vons",shop:"supermarket"},removeTags:{brand:"Vons","brand:wikidata":"Q7941609","brand:wikipedia":"en:Vons",name:"Vons",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Waitrose":{name:"Waitrose",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q771734"},addTags:{brand:"Waitrose","brand:wikidata":"Q771734","brand:wikipedia":"en:Waitrose",name:"Waitrose",shop:"supermarket"},removeTags:{brand:"Waitrose","brand:wikidata":"Q771734","brand:wikipedia":"en:Waitrose",name:"Waitrose",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Walmart Neighborhood Market":{name:"Walmart Neighborhood Market",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q483551"},addTags:{brand:"Walmart","brand:wikidata":"Q483551","brand:wikipedia":"en:Walmart",name:"Walmart Neighborhood Market",operator:"Walmart","operator:wikidata":"Q483551","operator:wikipedia":"en:Walmart",shop:"supermarket"},removeTags:{brand:"Walmart","brand:wikidata":"Q483551","brand:wikipedia":"en:Walmart",name:"Walmart Neighborhood Market",operator:"Walmart","operator:wikidata":"Q483551","operator:wikipedia":"en:Walmart",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Walmart Supercenter":{name:"Walmart Supercenter",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q483551"},addTags:{brand:"Walmart","brand:wikidata":"Q483551","brand:wikipedia":"en:Walmart",name:"Walmart Supercenter",operator:"Walmart","operator:wikidata":"Q483551","operator:wikipedia":"en:Walmart",shop:"supermarket"},removeTags:{brand:"Walmart","brand:wikidata":"Q483551","brand:wikipedia":"en:Walmart",name:"Walmart Supercenter",operator:"Walmart","operator:wikidata":"Q483551","operator:wikipedia":"en:Walmart",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Wasgau":{name:"Wasgau",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q2536857"},addTags:{brand:"Wasgau","brand:wikidata":"Q2536857","brand:wikipedia":"de:Wasgau (Unternehmen)",name:"Wasgau",shop:"supermarket"},removeTags:{brand:"Wasgau","brand:wikidata":"Q2536857","brand:wikipedia":"de:Wasgau (Unternehmen)",name:"Wasgau",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Wegmans":{name:"Wegmans",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q11288478"},addTags:{brand:"Wegmans","brand:wikidata":"Q11288478","brand:wikipedia":"en:Wegmans",name:"Wegmans",shop:"supermarket"},removeTags:{brand:"Wegmans","brand:wikidata":"Q11288478","brand:wikipedia":"en:Wegmans",name:"Wegmans",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Weis":{name:"Weis",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q7980370"},addTags:{brand:"Weis","brand:wikidata":"Q7980370","brand:wikipedia":"en:Weis Markets",name:"Weis",shop:"supermarket"},removeTags:{brand:"Weis","brand:wikidata":"Q7980370","brand:wikipedia":"en:Weis Markets",name:"Weis",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Whole Foods Market":{name:"Whole Foods Market",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q1809448"},addTags:{brand:"Whole Foods Market","brand:wikidata":"Q1809448","brand:wikipedia":"en:Whole Foods Market",name:"Whole Foods Market",shop:"supermarket"},removeTags:{brand:"Whole Foods Market","brand:wikidata":"Q1809448","brand:wikipedia":"en:Whole Foods Market",name:"Whole Foods Market",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Willys":{name:"Willys",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q10720214"},addTags:{brand:"Willys","brand:wikidata":"Q10720214","brand:wikipedia":"sv:Willys",name:"Willys",shop:"supermarket"},removeTags:{brand:"Willys","brand:wikidata":"Q10720214","brand:wikipedia":"sv:Willys",name:"Willys",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/WinCo Foods":{name:"WinCo Foods",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q8023592"},addTags:{brand:"WinCo Foods","brand:wikidata":"Q8023592","brand:wikipedia":"en:WinCo Foods",name:"WinCo Foods",shop:"supermarket"},removeTags:{brand:"WinCo Foods","brand:wikidata":"Q8023592","brand:wikipedia":"en:WinCo Foods",name:"WinCo Foods",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Winn Dixie":{name:"Winn Dixie",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q1264366"},addTags:{brand:"Winn Dixie","brand:wikidata":"Q1264366","brand:wikipedia":"en:Winn-Dixie",name:"Winn Dixie",shop:"supermarket"},removeTags:{brand:"Winn Dixie","brand:wikidata":"Q1264366","brand:wikipedia":"en:Winn-Dixie",name:"Winn Dixie",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Woolworths":{name:"Woolworths",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q3249145"},addTags:{brand:"Woolworths","brand:wikidata":"Q3249145","brand:wikipedia":"en:Woolworths Supermarkets",name:"Woolworths",shop:"supermarket"},removeTags:{brand:"Woolworths","brand:wikidata":"Q3249145","brand:wikipedia":"en:Woolworths Supermarkets",name:"Woolworths",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Your Independent Grocer":{name:"Your Independent Grocer",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q8058833"},addTags:{brand:"Your Independent Grocer","brand:wikidata":"Q8058833","brand:wikipedia":"en:Your Independent Grocer",name:"Your Independent Grocer",shop:"supermarket"},removeTags:{brand:"Your Independent Grocer","brand:wikidata":"Q8058833","brand:wikipedia":"en:Your Independent Grocer",name:"Your Independent Grocer",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/denn's Biomarkt":{name:"denn's Biomarkt",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q48883773"},addTags:{brand:"denn's Biomarkt","brand:wikidata":"Q48883773","brand:wikipedia":"de:Dennree",name:"denn's Biomarkt",shop:"supermarket"},removeTags:{brand:"denn's Biomarkt","brand:wikidata":"Q48883773","brand:wikipedia":"de:Dennree",name:"denn's Biomarkt",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/fakta":{name:"fakta",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q3172238"},addTags:{brand:"fakta","brand:wikidata":"Q3172238","brand:wikipedia":"en:Fakta",name:"fakta",shop:"supermarket"},removeTags:{brand:"fakta","brand:wikidata":"Q3172238","brand:wikipedia":"en:Fakta",name:"fakta",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Şok":{name:"Şok",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q19613992"},addTags:{brand:"Şok","brand:wikidata":"Q19613992","brand:wikipedia":"tr:Şok (market)",name:"Şok",shop:"supermarket"},removeTags:{brand:"Şok","brand:wikidata":"Q19613992","brand:wikipedia":"tr:Şok (market)",name:"Şok",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/ΑΒ Βασιλόπουλος":{name:"ΑΒ Βασιλόπουλος",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q4721807"},addTags:{brand:"ΑΒ Βασιλόπουλος","brand:en":"AB Vassilopoulos","brand:wikidata":"Q4721807","brand:wikipedia":"el:Άλφα Βήτα Βασιλόπουλος",name:"ΑΒ Βασιλόπουλος","name:en":"AB Vassilopoulos",shop:"supermarket"},removeTags:{brand:"ΑΒ Βασιλόπουλος","brand:en":"AB Vassilopoulos","brand:wikidata":"Q4721807","brand:wikipedia":"el:Άλφα Βήτα Βασιλόπουλος",name:"ΑΒ Βασιλόπουλος","name:en":"AB Vassilopoulos",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Γαλαξίας":{name:"Γαλαξίας",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q5518063"},addTags:{brand:"Γαλαξίας","brand:en":"Galaxias","brand:wikidata":"Q5518063","brand:wikipedia":"el:Γαλαξίας (σούπερ μάρκετ)",name:"Γαλαξίας","name:en":"Galaxias",shop:"supermarket"},removeTags:{brand:"Γαλαξίας","brand:en":"Galaxias","brand:wikidata":"Q5518063","brand:wikipedia":"el:Γαλαξίας (σούπερ μάρκετ)",name:"Γαλαξίας","name:en":"Galaxias",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Μασούτης":{name:"Μασούτης",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q6783887"},addTags:{brand:"Μασούτης","brand:en":"Masoutis","brand:wikidata":"Q6783887","brand:wikipedia":"en:Masoutis",name:"Μασούτης","name:en":"Masoutis",shop:"supermarket"},removeTags:{brand:"Μασούτης","brand:en":"Masoutis","brand:wikidata":"Q6783887","brand:wikipedia":"en:Masoutis",name:"Μασούτης","name:en":"Masoutis",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Σκλαβενίτης":{name:"Σκλαβενίτης",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q7536037"},addTags:{brand:"Σκλαβενίτης","brand:en":"Sklavenitis","brand:wikidata":"Q7536037","brand:wikipedia":"el:Σκλαβενίτης",name:"Σκλαβενίτης","name:en":"Sklavenitis",shop:"supermarket"},removeTags:{brand:"Σκλαβενίτης","brand:en":"Sklavenitis","brand:wikidata":"Q7536037","brand:wikipedia":"el:Σκλαβενίτης",name:"Σκλαβενίτης","name:en":"Sklavenitis",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Азбука Вкуса":{name:"Азбука Вкуса",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q4058209"},addTags:{brand:"Азбука Вкуса","brand:en":"Azbuka Vkusa","brand:wikidata":"Q4058209","brand:wikipedia":"en:Azbuka Vkusa",name:"Азбука Вкуса","name:en":"Azbuka Vkusa",shop:"supermarket"},removeTags:{brand:"Азбука Вкуса","brand:en":"Azbuka Vkusa","brand:wikidata":"Q4058209","brand:wikipedia":"en:Azbuka Vkusa",name:"Азбука Вкуса","name:en":"Azbuka Vkusa",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Атак":{name:"Атак",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q2868738"},addTags:{brand:"Атак","brand:en":"Atac","brand:wikidata":"Q2868738","brand:wikipedia":"ru:Atac",name:"Атак","name:en":"Atac",shop:"supermarket"},removeTags:{brand:"Атак","brand:en":"Atac","brand:wikidata":"Q2868738","brand:wikipedia":"ru:Atac",name:"Атак","name:en":"Atac",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Ашан":{name:"Ашан",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q758603"},addTags:{brand:"Ашан","brand:en":"Auchan","brand:wikidata":"Q758603","brand:wikipedia":"ru:Auchan",name:"Ашан","name:en":"Auchan",shop:"supermarket"},removeTags:{brand:"Ашан","brand:en":"Auchan","brand:wikidata":"Q758603","brand:wikipedia":"ru:Auchan",name:"Ашан","name:en":"Auchan",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Брусничка":{name:"Брусничка",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q21656645"},addTags:{brand:"Брусничка","brand:en":"Brusnichka","brand:wikidata":"Q21656645","brand:wikipedia":"uk:Брусничка (торгова мережа)",name:"Брусничка","name:en":"Brusnichka",shop:"supermarket"},removeTags:{brand:"Брусничка","brand:en":"Brusnichka","brand:wikidata":"Q21656645","brand:wikipedia":"uk:Брусничка (торгова мережа)",name:"Брусничка","name:en":"Brusnichka",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Виктория":{name:"Виктория",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q4111046"},addTags:{brand:"Виктория","brand:wikidata":"Q4111046","brand:wikipedia":"ru:Виктория (сеть магазинов)",name:"Виктория",shop:"supermarket"},removeTags:{brand:"Виктория","brand:wikidata":"Q4111046","brand:wikipedia":"ru:Виктория (сеть магазинов)",name:"Виктория",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Вопак":{name:"Вопак",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q30966107"},addTags:{brand:"Вопак","brand:en":"Vopak","brand:wikidata":"Q30966107","brand:wikipedia":"uk:Вопак",name:"Вопак","name:en":"Vopak",shop:"supermarket"},removeTags:{brand:"Вопак","brand:en":"Vopak","brand:wikidata":"Q30966107","brand:wikipedia":"uk:Вопак",name:"Вопак","name:en":"Vopak",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Гулливер":{name:"Гулливер",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q58003470"},addTags:{brand:"Гулливер","brand:wikidata":"Q58003470",name:"Гулливер",shop:"supermarket"},removeTags:{brand:"Гулливер","brand:wikidata":"Q58003470",name:"Гулливер",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Дикси":{name:"Дикси",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q4161561"},addTags:{brand:"Дикси","brand:en":"Dixy","brand:wikidata":"Q4161561","brand:wikipedia":"ru:Дикси (сеть магазинов)",name:"Дикси",shop:"supermarket"},removeTags:{brand:"Дикси","brand:en":"Dixy","brand:wikidata":"Q4161561","brand:wikipedia":"ru:Дикси (сеть магазинов)",name:"Дикси",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Карусель":{name:"Карусель",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q4216307"},addTags:{brand:"Карусель","brand:en":"Karusel","brand:wikidata":"Q4216307","brand:wikipedia":"ru:Карусель (сеть магазинов)",name:"Карусель","name:en":"Karusel",shop:"supermarket"},removeTags:{brand:"Карусель","brand:en":"Karusel","brand:wikidata":"Q4216307","brand:wikipedia":"ru:Карусель (сеть магазинов)",name:"Карусель","name:en":"Karusel",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Лента":{name:"Лента",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q4258608"},addTags:{brand:"Лента","brand:en":"Lenta","brand:wikidata":"Q4258608","brand:wikipedia":"ru:Лента (сеть магазинов)",name:"Лента","name:en":"Lenta",shop:"supermarket"},removeTags:{brand:"Лента","brand:en":"Lenta","brand:wikidata":"Q4258608","brand:wikipedia":"ru:Лента (сеть магазинов)",name:"Лента","name:en":"Lenta",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Магнит":{name:"Магнит",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q940518"},addTags:{brand:"Магнит","brand:en":"Magnit","brand:wikidata":"Q940518","brand:wikipedia":"ru:Магнит (сеть магазинов)",name:"Магнит","name:en":"Magnit",shop:"supermarket"},removeTags:{brand:"Магнит","brand:en":"Magnit","brand:wikidata":"Q940518","brand:wikipedia":"ru:Магнит (сеть магазинов)",name:"Магнит","name:en":"Magnit",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Мария-Ра":{name:"Мария-Ра",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q4281631"},addTags:{brand:"Мария-Ра","brand:en":"Maria-ra","brand:wikidata":"Q4281631","brand:wikipedia":"ru:Мария-Ра",name:"Мария-Ра","name:en":"Maria-ra",shop:"supermarket"},removeTags:{brand:"Мария-Ра","brand:en":"Maria-ra","brand:wikidata":"Q4281631","brand:wikipedia":"ru:Мария-Ра",name:"Мария-Ра","name:en":"Maria-ra",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Монетка":{name:"Монетка",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q4301704"},addTags:{brand:"Монетка","brand:en":"Monetka","brand:wikidata":"Q4301704","brand:wikipedia":"ru:Монетка (сеть магазинов)",name:"Монетка","name:en":"Monetka",shop:"supermarket"},removeTags:{brand:"Монетка","brand:en":"Monetka","brand:wikidata":"Q4301704","brand:wikipedia":"ru:Монетка (сеть магазинов)",name:"Монетка","name:en":"Monetka",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Народная 7Я семьЯ":{name:"Народная 7Я семьЯ",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q4032436"},addTags:{brand:"Народная 7Я семьЯ","brand:en":"People's 7th Family","brand:wikidata":"Q4032436","brand:wikipedia":"ru:Народная 7Я семья",name:"Народная 7Я семьЯ","name:en":"People's 7th Family",shop:"supermarket"},removeTags:{brand:"Народная 7Я семьЯ","brand:en":"People's 7th Family","brand:wikidata":"Q4032436","brand:wikipedia":"ru:Народная 7Я семья",name:"Народная 7Я семьЯ","name:en":"People's 7th Family",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Перекрёсток":{name:"Перекрёсток",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q1684639"},addTags:{brand:"Перекрёсток","brand:en":"Perekryostok","brand:wikidata":"Q1684639","brand:wikipedia":"en:Perekrestok (supermarket chain)",name:"Перекрёсток",shop:"supermarket"},removeTags:{brand:"Перекрёсток","brand:en":"Perekryostok","brand:wikidata":"Q1684639","brand:wikipedia":"en:Perekrestok (supermarket chain)",name:"Перекрёсток",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Покупочка":{name:"Покупочка",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q58003270"},addTags:{brand:"Покупочка","brand:wikidata":"Q58003270",name:"Покупочка",shop:"supermarket"},removeTags:{brand:"Покупочка","brand:wikidata":"Q58003270",name:"Покупочка",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Полушка":{name:"Полушка",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q4371080"},addTags:{brand:"Полушка","brand:en":"Polushka","brand:wikidata":"Q4371080","brand:wikipedia":"ru:Полушка (сеть магазинов)",name:"Полушка","name:en":"Polushka",shop:"supermarket"},removeTags:{brand:"Полушка","brand:en":"Polushka","brand:wikidata":"Q4371080","brand:wikipedia":"ru:Полушка (сеть магазинов)",name:"Полушка","name:en":"Polushka",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Пятёрочка":{name:"Пятёрочка",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q1768969"},addTags:{brand:"Пятёрочка","brand:en":"Pyaterochka","brand:wikidata":"Q1768969","brand:wikipedia":"ru:Пятёрочка",name:"Пятёрочка","name:en":"Pyaterochka",shop:"supermarket"},removeTags:{brand:"Пятёрочка","brand:en":"Pyaterochka","brand:wikidata":"Q1768969","brand:wikipedia":"ru:Пятёрочка",name:"Пятёрочка","name:en":"Pyaterochka",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Радеж":{name:"Радеж",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q4387165"},addTags:{brand:"Радеж","brand:en":"Radezh","brand:wikidata":"Q4387165","brand:wikipedia":"ru:Радеж (торговая сеть)",name:"Радеж","name:en":"Radezh",shop:"supermarket"},removeTags:{brand:"Радеж","brand:en":"Radezh","brand:wikidata":"Q4387165","brand:wikipedia":"ru:Радеж (торговая сеть)",name:"Радеж","name:en":"Radezh",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Рукавичка":{name:"Рукавичка",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q20092568"},addTags:{brand:"Рукавичка","brand:en":"Rukavychka","brand:wikidata":"Q20092568","brand:wikipedia":"uk:Рукавичка (торгова мережа)",name:"Рукавичка","name:en":"Rukavychka",shop:"supermarket"},removeTags:{brand:"Рукавичка","brand:en":"Rukavychka","brand:wikidata":"Q20092568","brand:wikipedia":"uk:Рукавичка (торгова мережа)",name:"Рукавичка","name:en":"Rukavychka",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Семишагофф":{name:"Семишагофф",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q58003374"},addTags:{brand:"Семишагофф","brand:wikidata":"Q58003374",name:"Семишагофф",shop:"supermarket"},removeTags:{brand:"Семишагофф","brand:wikidata":"Q58003374",name:"Семишагофф",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Сільпо":{name:"Сільпо",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q4419434"},addTags:{brand:"Сільпо","brand:en":"Silpo","brand:wikidata":"Q4419434","brand:wikipedia":"en:Silpo",name:"Сільпо","name:en":"Silpo",shop:"supermarket"},removeTags:{brand:"Сільпо","brand:en":"Silpo","brand:wikidata":"Q4419434","brand:wikipedia":"en:Silpo",name:"Сільпо","name:en":"Silpo",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Фора":{name:"Фора",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q12165977"},addTags:{brand:"Фора","brand:en":"Fora","brand:wikidata":"Q12165977","brand:wikipedia":"uk:Фора (мережа магазинів)",name:"Фора","name:en":"Fora",shop:"supermarket"},removeTags:{brand:"Фора","brand:en":"Fora","brand:wikidata":"Q12165977","brand:wikipedia":"uk:Фора (мережа магазинів)",name:"Фора","name:en":"Fora",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Фуршет":{name:"Фуршет",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q4493564"},addTags:{brand:"Фуршет","brand:en":"Furshet","brand:wikidata":"Q4493564","brand:wikipedia":"uk:Фуршет (мережа супермаркетів)",name:"Фуршет","name:en":"Furshet",shop:"supermarket"},removeTags:{brand:"Фуршет","brand:en":"Furshet","brand:wikidata":"Q4493564","brand:wikipedia":"uk:Фуршет (мережа супермаркетів)",name:"Фуршет","name:en":"Furshet",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/Эдельвейс":{name:"Эдельвейс",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q57979368"},addTags:{brand:"Эдельвейс","brand:en":"Edelveis","brand:wikidata":"Q57979368",name:"Эдельвейс","name:en":"Edelveis",shop:"supermarket"},removeTags:{brand:"Эдельвейс","brand:en":"Edelveis","brand:wikidata":"Q57979368",name:"Эдельвейс","name:en":"Edelveis",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/いなげや":{name:"いなげや",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q17193392"},addTags:{brand:"いなげや","brand:en":"Inageya","brand:wikidata":"Q17193392","brand:wikipedia":"ja:いなげや",name:"いなげや","name:en":"Inageya",shop:"supermarket"},removeTags:{brand:"いなげや","brand:en":"Inageya","brand:wikidata":"Q17193392","brand:wikipedia":"ja:いなげや",name:"いなげや","name:en":"Inageya",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/まいばすけっと":{name:"まいばすけっと",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q11278154"},addTags:{brand:"まいばすけっと","brand:en":"My Basket","brand:wikidata":"Q11278154","brand:wikipedia":"ja:まいばすけっと",name:"まいばすけっと","name:en":"My Basket",shop:"supermarket"},removeTags:{brand:"まいばすけっと","brand:en":"My Basket","brand:wikidata":"Q11278154","brand:wikipedia":"ja:まいばすけっと",name:"まいばすけっと","name:en":"My Basket",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/イオン":{name:"イオン",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q11285951"},addTags:{brand:"イオン","brand:en":"AEON","brand:wikidata":"Q11285951","brand:wikipedia":"ja:イオン (店舗ブランド)",name:"イオン","name:en":"AEON",shop:"supermarket"},removeTags:{brand:"イオン","brand:en":"AEON","brand:wikidata":"Q11285951","brand:wikipedia":"ja:イオン (店舗ブランド)",name:"イオン","name:en":"AEON",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/イトーヨーカドー":{name:"イトーヨーカドー",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q3088746"},addTags:{brand:"イトーヨーカドー","brand:en":"Ito-Yokado","brand:wikidata":"Q3088746","brand:wikipedia":"en:Ito-Yokado",name:"イトーヨーカドー","name:en":"Ito-Yokado",shop:"supermarket"},removeTags:{brand:"イトーヨーカドー","brand:en":"Ito-Yokado","brand:wikidata":"Q3088746","brand:wikipedia":"en:Ito-Yokado",name:"イトーヨーカドー","name:en":"Ito-Yokado",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/カスミ":{name:"カスミ",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q11294160"},addTags:{brand:"カスミ","brand:en":"Kasumi","brand:wikidata":"Q11294160","brand:wikipedia":"ja:カスミ",name:"カスミ","name:en":"Kasumi",shop:"supermarket"},removeTags:{brand:"カスミ","brand:en":"Kasumi","brand:wikidata":"Q11294160","brand:wikipedia":"ja:カスミ",name:"カスミ","name:en":"Kasumi",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/バロー":{name:"バロー",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q11328346"},addTags:{brand:"バロー","brand:en":"Valor","brand:wikidata":"Q11328346","brand:wikipedia":"ja:バロー (チェーンストア)",name:"バロー","name:en":"Valor",shop:"supermarket"},removeTags:{brand:"バロー","brand:en":"Valor","brand:wikidata":"Q11328346","brand:wikipedia":"ja:バロー (チェーンストア)",name:"バロー","name:en":"Valor",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/マックスバリュ":{name:"マックスバリュ",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q1960109"},addTags:{brand:"マックスバリュ","brand:en":"Maxvalu Tokai","brand:wikidata":"Q1960109","brand:wikipedia":"en:MaxValu",name:"マックスバリュ","name:en":"Maxvalu Tokai",shop:"supermarket"},removeTags:{brand:"マックスバリュ","brand:en":"Maxvalu Tokai","brand:wikidata":"Q1960109","brand:wikipedia":"en:MaxValu",name:"マックスバリュ","name:en":"Maxvalu Tokai",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/マルエツ":{name:"マルエツ",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q11341197"},addTags:{brand:"マルエツ","brand:en":"Maruetsu","brand:wikidata":"Q11341197","brand:wikipedia":"ja:マルエツ",name:"マルエツ","name:en":"Maruetsu",shop:"supermarket"},removeTags:{brand:"マルエツ","brand:en":"Maruetsu","brand:wikidata":"Q11341197","brand:wikipedia":"ja:マルエツ",name:"マルエツ","name:en":"Maruetsu",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/ヤオコー":{name:"ヤオコー",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q11344967"},addTags:{brand:"ヤオコー","brand:en":"Yaoko","brand:wikidata":"Q11344967","brand:wikipedia":"ja:ヤオコー",name:"ヤオコー","name:en":"Yaoko",shop:"supermarket"},removeTags:{brand:"ヤオコー","brand:en":"Yaoko","brand:wikidata":"Q11344967","brand:wikipedia":"ja:ヤオコー",name:"ヤオコー","name:en":"Yaoko",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/ヨークベニマル":{name:"ヨークベニマル",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q11346199"},addTags:{brand:"ヨークベニマル","brand:en":"York Benimaru","brand:wikidata":"Q11346199","brand:wikipedia":"ja:ヨークベニマル",name:"ヨークベニマル","name:en":"York Benimaru",shop:"supermarket"},removeTags:{brand:"ヨークベニマル","brand:en":"York Benimaru","brand:wikidata":"Q11346199","brand:wikipedia":"ja:ヨークベニマル",name:"ヨークベニマル","name:en":"York Benimaru",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/ライフ":{name:"ライフ",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q11346476"},addTags:{brand:"ライフ","brand:en":"Life","brand:wikidata":"Q11346476","brand:wikipedia":"ja:ライフコーポレーション",name:"ライフ","name:en":"Life",shop:"supermarket"},removeTags:{brand:"ライフ","brand:en":"Life","brand:wikidata":"Q11346476","brand:wikipedia":"ja:ライフコーポレーション",name:"ライフ","name:en":"Life",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/全聯":{name:"全聯",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q7262792"},addTags:{brand:"全聯","brand:en":"Pxmart","brand:wikidata":"Q7262792","brand:wikipedia":"en:PX Mart",name:"全聯","name:en":"Pxmart",shop:"supermarket"},removeTags:{brand:"全聯","brand:en":"Pxmart","brand:wikidata":"Q7262792","brand:wikipedia":"en:PX Mart",name:"全聯","name:en":"Pxmart",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/全聯福利中心":{name:"全聯福利中心",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q7262792"},addTags:{brand:"全聯福利中心","brand:en":"Pxmart","brand:wikidata":"Q7262792","brand:wikipedia":"en:PX Mart",name:"全聯福利中心","name:en":"Pxmart",shop:"supermarket"},removeTags:{brand:"全聯福利中心","brand:en":"Pxmart","brand:wikidata":"Q7262792","brand:wikipedia":"en:PX Mart",name:"全聯福利中心","name:en":"Pxmart",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/惠康 Wellcome":{name:"惠康 Wellcome",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q706247"},addTags:{brand:"惠康 Wellcome","brand:en":"Wellcome","brand:wikidata":"Q706247","brand:wikipedia":"zh:惠康",name:"惠康 Wellcome","name:en":"Wellcome",shop:"supermarket"},removeTags:{brand:"惠康 Wellcome","brand:en":"Wellcome","brand:wikidata":"Q706247","brand:wikipedia":"zh:惠康",name:"惠康 Wellcome","name:en":"Wellcome",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/業務スーパー":{name:"業務スーパー",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q11590183"},addTags:{brand:"業務スーパー","brand:en":"Gyōmu sūpā","brand:wikidata":"Q11590183","brand:wikipedia":"ja:業務スーパー",name:"業務スーパー","name:en":"Gyōmu sūpā",shop:"supermarket"},removeTags:{brand:"業務スーパー","brand:en":"Gyōmu sūpā","brand:wikidata":"Q11590183","brand:wikipedia":"ja:業務スーパー",name:"業務スーパー","name:en":"Gyōmu sūpā",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/美廉社":{name:"美廉社",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q15914017"},addTags:{brand:"美廉社","brand:en":"Simple Mart","brand:wikidata":"Q15914017","brand:wikipedia":"zh:美廉社",name:"美廉社","name:en":"Simple Mart",shop:"supermarket"},removeTags:{brand:"美廉社","brand:en":"Simple Mart","brand:wikidata":"Q15914017","brand:wikipedia":"zh:美廉社",name:"美廉社","name:en":"Simple Mart",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/西友":{name:"西友",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q3108542"},addTags:{brand:"西友","brand:en":"Seiyu Group","brand:wikidata":"Q3108542","brand:wikipedia":"en:Seiyu Group",name:"西友","name:en":"Seiyu Group",shop:"supermarket"},removeTags:{brand:"西友","brand:en":"Seiyu Group","brand:wikidata":"Q3108542","brand:wikipedia":"en:Seiyu Group",name:"西友","name:en":"Seiyu Group",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/頂好":{name:"頂好",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q706247"},addTags:{brand:"頂好","brand:en":"Wellcome","brand:wikidata":"Q706247","brand:wikipedia":"en:Wellcome",name:"頂好","name:en":"Wellcome",shop:"supermarket"},removeTags:{brand:"頂好","brand:en":"Wellcome","brand:wikidata":"Q706247","brand:wikipedia":"en:Wellcome",name:"頂好","name:en":"Wellcome",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/頂好超市":{name:"頂好超市",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q706247"},addTags:{brand:"頂好超市","brand:en":"Wellcome","brand:wikidata":"Q706247","brand:wikipedia":"en:Wellcome",name:"頂好超市","name:en":"Wellcome",shop:"supermarket"},removeTags:{brand:"頂好超市","brand:en":"Wellcome","brand:wikidata":"Q706247","brand:wikipedia":"en:Wellcome",name:"頂好超市","name:en":"Wellcome",shop:"supermarket"},matchScore:2,suggestion:true},"shop/supermarket/하나로마트":{name:"하나로마트",icon:"maki-grocery",geometry:["point","area"],tags:{shop:"supermarket","brand:wikidata":"Q12590611"},addTags:{brand:"하나로마트","brand:en":"Hanaro Mart","brand:wikidata":"Q12590611","brand:wikipedia":"ko:농협유통",name:"하나로마트",shop:"supermarket"},removeTags:{brand:"하나로마트","brand:en":"Hanaro Mart","brand:wikidata":"Q12590611","brand:wikipedia":"ko:농협유통",name:"하나로마트",shop:"supermarket"},matchScore:2,suggestion:true},"shop/tea/T2":{name:"T2",icon:"maki-teahouse",geometry:["point","area"],tags:{shop:"tea","brand:wikidata":"Q48802134"},addTags:{brand:"T2","brand:wikidata":"Q48802134","brand:wikipedia":"en:T2 (Australian company)",name:"T2",shop:"tea"},removeTags:{brand:"T2","brand:wikidata":"Q48802134","brand:wikipedia":"en:T2 (Australian company)",name:"T2",shop:"tea"},matchScore:2,suggestion:true},"shop/ticket/Boutique Grandes Lignes":{name:"Boutique Grandes Lignes",icon:"maki-shop",geometry:["point","area"],tags:{shop:"ticket","brand:wikidata":"Q13646"},addTags:{brand:"Boutique Grandes Lignes","brand:wikidata":"Q13646","brand:wikipedia":"fr:Société nationale des chemins de fer français",name:"Boutique Grandes Lignes",shop:"ticket"},removeTags:{brand:"Boutique Grandes Lignes","brand:wikidata":"Q13646","brand:wikipedia":"fr:Société nationale des chemins de fer français",name:"Boutique Grandes Lignes",shop:"ticket"},matchScore:2,suggestion:true},"shop/ticket/Guichet Transilien":{name:"Guichet Transilien",icon:"maki-shop",geometry:["point","area"],tags:{shop:"ticket","brand:wikidata":"Q389554"},addTags:{brand:"Guichet Transilien","brand:wikidata":"Q389554","brand:wikipedia":"fr:Transilien",name:"Guichet Transilien",shop:"ticket"},removeTags:{brand:"Guichet Transilien","brand:wikidata":"Q389554","brand:wikipedia":"fr:Transilien",name:"Guichet Transilien",shop:"ticket"},matchScore:2,suggestion:true},"shop/toys/Dráčik":{name:"Dráčik",icon:"maki-shop",geometry:["point","area"],tags:{shop:"toys","brand:wikidata":"Q57653669"},addTags:{brand:"Dráčik","brand:wikidata":"Q57653669",name:"Dráčik",shop:"toys"},removeTags:{brand:"Dráčik","brand:wikidata":"Q57653669",name:"Dráčik",shop:"toys"},matchScore:2,suggestion:true},"shop/toys/Intertoys":{name:"Intertoys",icon:"maki-shop",geometry:["point","area"],tags:{shop:"toys","brand:wikidata":"Q1891407"},addTags:{brand:"Intertoys","brand:wikidata":"Q1891407","brand:wikipedia":"nl:Intertoys",name:"Intertoys",shop:"toys"},removeTags:{brand:"Intertoys","brand:wikidata":"Q1891407","brand:wikipedia":"nl:Intertoys",name:"Intertoys",shop:"toys"},matchScore:2,suggestion:true},"shop/toys/JouéClub":{name:"JouéClub",icon:"maki-shop",geometry:["point","area"],tags:{shop:"toys","brand:wikidata":"Q3187152"},addTags:{brand:"JouéClub","brand:wikidata":"Q3187152","brand:wikipedia":"fr:JouéClub",name:"JouéClub",shop:"toys"},removeTags:{brand:"JouéClub","brand:wikidata":"Q3187152","brand:wikipedia":"fr:JouéClub",name:"JouéClub",shop:"toys"},matchScore:2,suggestion:true},"shop/toys/King Jouet":{name:"King Jouet",icon:"maki-shop",geometry:["point","area"],tags:{shop:"toys","brand:wikidata":"Q3197009"},addTags:{brand:"King Jouet","brand:en":"King Toy","brand:wikidata":"Q3197009","brand:wikipedia":"fr:King Jouet",name:"King Jouet","name:en":"King Toy",shop:"toys"},removeTags:{brand:"King Jouet","brand:en":"King Toy","brand:wikidata":"Q3197009","brand:wikipedia":"fr:King Jouet",name:"King Jouet","name:en":"King Toy",shop:"toys"},matchScore:2,suggestion:true},"shop/toys/La Grande Récré":{name:"La Grande Récré",icon:"maki-shop",geometry:["point","area"],tags:{shop:"toys","brand:wikidata":"Q3209556"},addTags:{brand:"La Grande Récré","brand:wikidata":"Q3209556","brand:wikipedia":"fr:La Grande Récré (magasin)",name:"La Grande Récré",shop:"toys"},removeTags:{brand:"La Grande Récré","brand:wikidata":"Q3209556","brand:wikipedia":"fr:La Grande Récré (magasin)",name:"La Grande Récré",shop:"toys"},matchScore:2,suggestion:true},"shop/toys/Lego":{name:"Lego",icon:"maki-shop",geometry:["point","area"],tags:{shop:"toys","brand:wikidata":"Q1063455"},addTags:{brand:"Lego","brand:wikidata":"Q1063455","brand:wikipedia":"en:The Lego Group",name:"Lego",shop:"toys"},removeTags:{brand:"Lego","brand:wikidata":"Q1063455","brand:wikipedia":"en:The Lego Group",name:"Lego",shop:"toys"},matchScore:2,suggestion:true},"shop/toys/Lekia":{name:"Lekia",icon:"maki-shop",geometry:["point","area"],tags:{shop:"toys","brand:wikidata":"Q56303274"},addTags:{brand:"Lekia","brand:wikidata":"Q56303274","brand:wikipedia":"sv:Lekia",name:"Lekia",shop:"toys"},removeTags:{brand:"Lekia","brand:wikidata":"Q56303274","brand:wikipedia":"sv:Lekia",name:"Lekia",shop:"toys"},matchScore:2,suggestion:true},"shop/toys/Maxi Toys":{name:"Maxi Toys",icon:"maki-shop",geometry:["point","area"],tags:{shop:"toys","brand:wikidata":"Q16663879"},addTags:{brand:"Maxi Toys","brand:wikidata":"Q16663879","brand:wikipedia":"fr:Maxi Toys",name:"Maxi Toys",shop:"toys"},removeTags:{brand:"Maxi Toys","brand:wikidata":"Q16663879","brand:wikipedia":"fr:Maxi Toys",name:"Maxi Toys",shop:"toys"},matchScore:2,suggestion:true},"shop/toys/The Entertainer":{name:"The Entertainer",icon:"maki-shop",geometry:["point","area"],tags:{shop:"toys","brand:wikidata":"Q7732289"},addTags:{brand:"The Entertainer","brand:wikidata":"Q7732289","brand:wikipedia":"en:The Entertainer (retailer)",name:"The Entertainer",shop:"toys"},removeTags:{brand:"The Entertainer","brand:wikidata":"Q7732289","brand:wikipedia":"en:The Entertainer (retailer)",name:"The Entertainer",shop:"toys"},matchScore:2,suggestion:true},"shop/toys/Toys R Us":{name:"Toys R Us",icon:"maki-shop",geometry:["point","area"],tags:{shop:"toys","brand:wikidata":"Q696334"},addTags:{brand:"Toys R Us","brand:wikidata":"Q696334","brand:wikipedia":"en:Toys \"R\" Us",name:"Toys R Us",shop:"toys"},removeTags:{brand:"Toys R Us","brand:wikidata":"Q696334","brand:wikipedia":"en:Toys \"R\" Us",name:"Toys R Us",shop:"toys"},matchScore:2,suggestion:true},"shop/toys/Детский мир":{name:"Детский мир",icon:"maki-shop",geometry:["point","area"],tags:{shop:"toys","brand:wikidata":"Q16643324"},addTags:{brand:"Детский мир","brand:en":"Detskiy Mir","brand:wikidata":"Q16643324","brand:wikipedia":"en:Detsky Mir",name:"Детский мир","name:en":"Detskiy Mir",shop:"toys"},removeTags:{brand:"Детский мир","brand:en":"Detskiy Mir","brand:wikidata":"Q16643324","brand:wikipedia":"en:Detsky Mir",name:"Детский мир","name:en":"Detskiy Mir",shop:"toys"},matchScore:2,suggestion:true},"shop/toys/Кораблик":{name:"Кораблик",icon:"maki-shop",geometry:["point","area"],tags:{shop:"toys","brand:wikidata":"Q57653416"},addTags:{brand:"Кораблик","brand:wikidata":"Q57653416",name:"Кораблик",shop:"toys"},removeTags:{brand:"Кораблик","brand:wikidata":"Q57653416",name:"Кораблик",shop:"toys"},matchScore:2,suggestion:true},"shop/travel_agency/Coral Travel":{name:"Coral Travel",icon:"maki-suitcase",geometry:["point","area"],tags:{shop:"travel_agency","brand:wikidata":"Q58011479"},addTags:{brand:"Coral Travel","brand:wikidata":"Q58011479",name:"Coral Travel",shop:"travel_agency"},removeTags:{brand:"Coral Travel","brand:wikidata":"Q58011479",name:"Coral Travel",shop:"travel_agency"},matchScore:2,suggestion:true},"shop/travel_agency/D-reizen":{name:"D-reizen",icon:"maki-suitcase",geometry:["point","area"],tags:{shop:"travel_agency","brand:wikidata":"Q2445498"},addTags:{brand:"D-reizen","brand:wikidata":"Q2445498","brand:wikipedia":"nl:D-reizen",name:"D-reizen",shop:"travel_agency"},removeTags:{brand:"D-reizen","brand:wikidata":"Q2445498","brand:wikipedia":"nl:D-reizen",name:"D-reizen",shop:"travel_agency"},matchScore:2,suggestion:true},"shop/travel_agency/DER Reisebüro":{name:"DER Reisebüro",icon:"maki-suitcase",geometry:["point","area"],tags:{shop:"travel_agency","brand:wikidata":"Q56729186"},addTags:{brand:"DER Reisebüro","brand:wikidata":"Q56729186","brand:wikipedia":"de:Deutsches Reisebüro",name:"DER Reisebüro",shop:"travel_agency"},removeTags:{brand:"DER Reisebüro","brand:wikidata":"Q56729186","brand:wikipedia":"de:Deutsches Reisebüro",name:"DER Reisebüro",shop:"travel_agency"},matchScore:2,suggestion:true},"shop/travel_agency/First Reisebüro":{name:"First Reisebüro",icon:"maki-suitcase",geometry:["point","area"],tags:{shop:"travel_agency","brand:wikidata":"Q573103"},addTags:{brand:"First Reisebüro","brand:wikidata":"Q573103","brand:wikipedia":"en:TUI Group",name:"First Reisebüro",shop:"travel_agency"},removeTags:{brand:"First Reisebüro","brand:wikidata":"Q573103","brand:wikipedia":"en:TUI Group",name:"First Reisebüro",shop:"travel_agency"},matchScore:2,suggestion:true},"shop/travel_agency/Flight Centre":{name:"Flight Centre",icon:"maki-suitcase",geometry:["point","area"],tags:{shop:"travel_agency","brand:wikidata":"Q5459202"},addTags:{brand:"Flight Centre","brand:wikidata":"Q5459202","brand:wikipedia":"en:Flight Centre",name:"Flight Centre",shop:"travel_agency"},removeTags:{brand:"Flight Centre","brand:wikidata":"Q5459202","brand:wikipedia":"en:Flight Centre",name:"Flight Centre",shop:"travel_agency"},matchScore:2,suggestion:true},"shop/travel_agency/Halcón Viajes":{name:"Halcón Viajes",icon:"maki-suitcase",geometry:["point","area"],tags:{shop:"travel_agency","brand:wikidata":"Q57591939"},addTags:{brand:"Halcón Viajes","brand:wikidata":"Q57591939",name:"Halcón Viajes",shop:"travel_agency"},removeTags:{brand:"Halcón Viajes","brand:wikidata":"Q57591939",name:"Halcón Viajes",shop:"travel_agency"},matchScore:2,suggestion:true},"shop/travel_agency/Havas Voyages":{name:"Havas Voyages",icon:"maki-suitcase",geometry:["point","area"],tags:{shop:"travel_agency","brand:wikidata":"Q57628091"},addTags:{brand:"Havas Voyages","brand:wikidata":"Q57628091",name:"Havas Voyages",shop:"travel_agency"},removeTags:{brand:"Havas Voyages","brand:wikidata":"Q57628091",name:"Havas Voyages",shop:"travel_agency"},matchScore:2,suggestion:true},"shop/travel_agency/Reiseland":{name:"Reiseland",icon:"maki-suitcase",geometry:["point","area"],tags:{shop:"travel_agency","brand:wikidata":"Q40387610"},addTags:{brand:"Reiseland","brand:wikidata":"Q40387610","brand:wikipedia":"de:OTTO Reisen",name:"Reiseland",shop:"travel_agency"},removeTags:{brand:"Reiseland","brand:wikidata":"Q40387610","brand:wikipedia":"de:OTTO Reisen",name:"Reiseland",shop:"travel_agency"},matchScore:2,suggestion:true},"shop/travel_agency/TUI":{name:"TUI",icon:"maki-suitcase",geometry:["point","area"],tags:{shop:"travel_agency","brand:wikidata":"Q573103"},addTags:{brand:"TUI","brand:wikidata":"Q573103","brand:wikipedia":"en:TUI Group",name:"TUI",shop:"travel_agency"},removeTags:{brand:"TUI","brand:wikidata":"Q573103","brand:wikipedia":"en:TUI Group",name:"TUI",shop:"travel_agency"},matchScore:2,suggestion:true},"shop/travel_agency/The Co-operative Travel":{name:"The Co-operative Travel",icon:"maki-suitcase",geometry:["point","area"],tags:{shop:"travel_agency","brand:wikidata":"Q7726526"},addTags:{brand:"The Co-operative Travel","brand:wikidata":"Q7726526","brand:wikipedia":"en:The Co-operative Travel",name:"The Co-operative Travel",shop:"travel_agency"},removeTags:{brand:"The Co-operative Travel","brand:wikidata":"Q7726526","brand:wikipedia":"en:The Co-operative Travel",name:"The Co-operative Travel",shop:"travel_agency"},matchScore:2,suggestion:true},"shop/travel_agency/Thomas Cook":{name:"Thomas Cook",icon:"maki-suitcase",geometry:["point","area"],tags:{shop:"travel_agency","brand:wikidata":"Q2141800"},addTags:{brand:"Thomas Cook","brand:wikidata":"Q2141800","brand:wikipedia":"en:Thomas Cook Group",name:"Thomas Cook",shop:"travel_agency"},removeTags:{brand:"Thomas Cook","brand:wikidata":"Q2141800","brand:wikipedia":"en:Thomas Cook Group",name:"Thomas Cook",shop:"travel_agency"},matchScore:2,suggestion:true},"shop/travel_agency/Thomson":{name:"Thomson",icon:"maki-suitcase",geometry:["point","area"],tags:{shop:"travel_agency","brand:wikidata":"Q7795876"},addTags:{brand:"Thomson","brand:wikidata":"Q7795876","brand:wikipedia":"en:TUI UK",name:"Thomson",shop:"travel_agency"},removeTags:{brand:"Thomson","brand:wikidata":"Q7795876","brand:wikipedia":"en:TUI UK",name:"Thomson",shop:"travel_agency"},matchScore:2,suggestion:true},"shop/travel_agency/Поехали с нами":{name:"Поехали с нами",icon:"maki-suitcase",geometry:["point","area"],tags:{shop:"travel_agency","brand:wikidata":"Q25439141"},addTags:{brand:"Поехали с нами","brand:wikidata":"Q25439141","brand:wikipedia":"uk:Поїхали з нами",name:"Поехали с нами",shop:"travel_agency"},removeTags:{brand:"Поехали с нами","brand:wikidata":"Q25439141","brand:wikipedia":"uk:Поїхали з нами",name:"Поехали с нами",shop:"travel_agency"},matchScore:2,suggestion:true},"shop/tyres/Big O Tires":{name:"Big O Tires",icon:"maki-shop",geometry:["point","area"],tags:{shop:"tyres","brand:wikidata":"Q4906085"},addTags:{brand:"Big O Tires","brand:wikidata":"Q4906085","brand:wikipedia":"en:Big O Tires",name:"Big O Tires",shop:"tyres"},removeTags:{brand:"Big O Tires","brand:wikidata":"Q4906085","brand:wikipedia":"en:Big O Tires",name:"Big O Tires",shop:"tyres"},matchScore:2,suggestion:true},"shop/tyres/Bridgestone":{name:"Bridgestone",icon:"maki-shop",geometry:["point","area"],tags:{shop:"tyres","brand:wikidata":"Q179433"},addTags:{brand:"Bridgestone","brand:wikidata":"Q179433","brand:wikipedia":"en:Bridgestone",name:"Bridgestone",shop:"tyres"},removeTags:{brand:"Bridgestone","brand:wikidata":"Q179433","brand:wikipedia":"en:Bridgestone",name:"Bridgestone",shop:"tyres"},matchScore:2,suggestion:true},"shop/tyres/Discount Tire":{name:"Discount Tire",icon:"maki-shop",geometry:["point","area"],tags:{shop:"tyres","brand:wikidata":"Q5281735"},addTags:{brand:"Discount Tire","brand:wikidata":"Q5281735","brand:wikipedia":"en:Discount Tire",name:"Discount Tire",shop:"tyres"},removeTags:{brand:"Discount Tire","brand:wikidata":"Q5281735","brand:wikipedia":"en:Discount Tire",name:"Discount Tire",shop:"tyres"},matchScore:2,suggestion:true},"shop/tyres/Express Oil Change & Tire Engineers":{name:"Express Oil Change & Tire Engineers",icon:"maki-shop",geometry:["point","area"],tags:{shop:"tyres","brand:wikidata":"Q39057654"},addTags:{brand:"Express Oil Change & Tire Engineers","brand:wikidata":"Q39057654","brand:wikipedia":"en:Express Oil Change & Tire Engineers",name:"Express Oil Change & Tire Engineers",shop:"tyres"},removeTags:{brand:"Express Oil Change & Tire Engineers","brand:wikidata":"Q39057654","brand:wikipedia":"en:Express Oil Change & Tire Engineers",name:"Express Oil Change & Tire Engineers",shop:"tyres"},matchScore:2,suggestion:true},"shop/tyres/Les Schwab Tire Center":{name:"Les Schwab Tire Center",icon:"maki-shop",geometry:["point","area"],tags:{shop:"tyres","brand:wikidata":"Q6529977"},addTags:{brand:"Les Schwab Tire Center","brand:wikidata":"Q6529977","brand:wikipedia":"en:Les Schwab Tire Centers",name:"Les Schwab Tire Center",shop:"tyres"},removeTags:{brand:"Les Schwab Tire Center","brand:wikidata":"Q6529977","brand:wikipedia":"en:Les Schwab Tire Centers",name:"Les Schwab Tire Center",shop:"tyres"},matchScore:2,suggestion:true},"shop/tyres/Michelin":{name:"Michelin",icon:"maki-shop",geometry:["point","area"],tags:{shop:"tyres","brand:wikidata":"Q151107"},addTags:{brand:"Michelin","brand:wikidata":"Q151107","brand:wikipedia":"en:Michelin",name:"Michelin",shop:"tyres"},removeTags:{brand:"Michelin","brand:wikidata":"Q151107","brand:wikipedia":"en:Michelin",name:"Michelin",shop:"tyres"},matchScore:2,suggestion:true},"shop/tyres/Vianor":{name:"Vianor",icon:"maki-shop",geometry:["point","area"],tags:{shop:"tyres","brand:wikidata":"Q10714920"},addTags:{brand:"Vianor","brand:wikidata":"Q10714920","brand:wikipedia":"sv:Vianor",name:"Vianor",shop:"tyres"},removeTags:{brand:"Vianor","brand:wikidata":"Q10714920","brand:wikipedia":"sv:Vianor",name:"Vianor",shop:"tyres"},matchScore:2,suggestion:true},"shop/variety_store/Action":{name:"Action",icon:"maki-shop",geometry:["point","area"],tags:{shop:"variety_store","brand:wikidata":"Q2634111"},addTags:{brand:"Action","brand:wikidata":"Q2634111","brand:wikipedia":"nl:Action (winkel)",name:"Action",shop:"variety_store"},removeTags:{brand:"Action","brand:wikidata":"Q2634111","brand:wikipedia":"nl:Action (winkel)",name:"Action",shop:"variety_store"},matchScore:2,suggestion:true},"shop/variety_store/Big Bazaar":{name:"Big Bazaar",icon:"maki-shop",geometry:["point","area"],tags:{shop:"variety_store","brand:wikidata":"Q3631008"},addTags:{brand:"Big Bazaar","brand:wikidata":"Q3631008","brand:wikipedia":"en:Big Bazaar",name:"Big Bazaar",shop:"variety_store"},removeTags:{brand:"Big Bazaar","brand:wikidata":"Q3631008","brand:wikipedia":"en:Big Bazaar",name:"Big Bazaar",shop:"variety_store"},matchScore:2,suggestion:true},"shop/variety_store/Big Bazar":{name:"Big Bazar",icon:"maki-shop",geometry:["point","area"],tags:{shop:"variety_store","brand:wikidata":"Q15873104"},addTags:{brand:"Big Bazar","brand:wikidata":"Q15873104","brand:wikipedia":"nl:Big Bazar",name:"Big Bazar",shop:"variety_store"},removeTags:{brand:"Big Bazar","brand:wikidata":"Q15873104","brand:wikipedia":"nl:Big Bazar",name:"Big Bazar",shop:"variety_store"},matchScore:2,suggestion:true},"shop/variety_store/Dollar General":{name:"Dollar General",icon:"maki-shop",geometry:["point","area"],tags:{shop:"variety_store","brand:wikidata":"Q145168"},addTags:{brand:"Dollar General","brand:wikidata":"Q145168","brand:wikipedia":"en:Dollar General",name:"Dollar General",shop:"variety_store"},removeTags:{brand:"Dollar General","brand:wikidata":"Q145168","brand:wikipedia":"en:Dollar General",name:"Dollar General",shop:"variety_store"},matchScore:2,suggestion:true},"shop/variety_store/Dollar Tree":{name:"Dollar Tree",icon:"maki-shop",geometry:["point","area"],tags:{shop:"variety_store","brand:wikidata":"Q5289230"},addTags:{brand:"Dollar Tree","brand:wikidata":"Q5289230","brand:wikipedia":"en:Dollar Tree",name:"Dollar Tree",shop:"variety_store"},removeTags:{brand:"Dollar Tree","brand:wikidata":"Q5289230","brand:wikipedia":"en:Dollar Tree",name:"Dollar Tree",shop:"variety_store"},matchScore:2,suggestion:true},"shop/variety_store/Dollarama":{name:"Dollarama",icon:"maki-shop",geometry:["point","area"],tags:{shop:"variety_store","brand:wikidata":"Q3033947"},addTags:{brand:"Dollarama","brand:wikidata":"Q3033947","brand:wikipedia":"en:Dollarama",name:"Dollarama",shop:"variety_store"},removeTags:{brand:"Dollarama","brand:wikidata":"Q3033947","brand:wikipedia":"en:Dollarama",name:"Dollarama",shop:"variety_store"},matchScore:2,suggestion:true},"shop/variety_store/Family Dollar":{name:"Family Dollar",icon:"maki-shop",geometry:["point","area"],tags:{shop:"variety_store","brand:wikidata":"Q5433101"},addTags:{brand:"Family Dollar","brand:wikidata":"Q5433101","brand:wikipedia":"en:Family Dollar",name:"Family Dollar",shop:"variety_store"},removeTags:{brand:"Family Dollar","brand:wikidata":"Q5433101","brand:wikipedia":"en:Family Dollar",name:"Family Dollar",shop:"variety_store"},matchScore:2,suggestion:true},"shop/variety_store/Five Below":{name:"Five Below",icon:"maki-shop",geometry:["point","area"],tags:{shop:"variety_store","brand:wikidata":"Q5455836"},addTags:{brand:"Five Below","brand:wikidata":"Q5455836","brand:wikipedia":"en:Five Below",name:"Five Below",shop:"variety_store"},removeTags:{brand:"Five Below","brand:wikidata":"Q5455836","brand:wikipedia":"en:Five Below",name:"Five Below",shop:"variety_store"},matchScore:2,suggestion:true},"shop/variety_store/Fix Price":{name:"Fix Price",icon:"maki-shop",geometry:["point","area"],tags:{shop:"variety_store","brand:wikidata":"Q4038791"},addTags:{brand:"Fix Price","brand:wikidata":"Q4038791","brand:wikipedia":"ru:Fix Price (сеть магазинов)",name:"Fix Price",shop:"variety_store"},removeTags:{brand:"Fix Price","brand:wikidata":"Q4038791","brand:wikipedia":"ru:Fix Price (сеть магазинов)",name:"Fix Price",shop:"variety_store"},matchScore:2,suggestion:true},"shop/variety_store/GiFi":{name:"GiFi",icon:"maki-shop",geometry:["point","area"],tags:{shop:"variety_store","brand:wikidata":"Q3105439"},addTags:{brand:"GiFi","brand:wikidata":"Q3105439","brand:wikipedia":"fr:Gifi",name:"GiFi",shop:"variety_store"},removeTags:{brand:"GiFi","brand:wikidata":"Q3105439","brand:wikipedia":"fr:Gifi",name:"GiFi",shop:"variety_store"},matchScore:2,suggestion:true},"shop/variety_store/Home Bargains":{name:"Home Bargains",icon:"maki-shop",geometry:["point","area"],tags:{shop:"variety_store","brand:wikidata":"Q5888229"},addTags:{brand:"Home Bargains","brand:wikidata":"Q5888229","brand:wikipedia":"en:Home Bargains",name:"Home Bargains",shop:"variety_store"},removeTags:{brand:"Home Bargains","brand:wikidata":"Q5888229","brand:wikipedia":"en:Home Bargains",name:"Home Bargains",shop:"variety_store"},matchScore:2,suggestion:true},"shop/variety_store/Mäc-Geiz":{name:"Mäc-Geiz",icon:"maki-shop",geometry:["point","area"],tags:{shop:"variety_store","brand:wikidata":"Q1957126"},addTags:{brand:"Mäc-Geiz","brand:wikidata":"Q1957126","brand:wikipedia":"de:Mäc-Geiz",name:"Mäc-Geiz",shop:"variety_store"},removeTags:{brand:"Mäc-Geiz","brand:wikidata":"Q1957126","brand:wikipedia":"de:Mäc-Geiz",name:"Mäc-Geiz",shop:"variety_store"},matchScore:2,suggestion:true},"shop/variety_store/NOZ":{name:"NOZ",icon:"maki-shop",geometry:["point","area"],tags:{shop:"variety_store","brand:wikidata":"Q3345688"},addTags:{brand:"NOZ","brand:wikidata":"Q3345688","brand:wikipedia":"fr:Noz",name:"NOZ",shop:"variety_store"},removeTags:{brand:"NOZ","brand:wikidata":"Q3345688","brand:wikipedia":"fr:Noz",name:"NOZ",shop:"variety_store"},matchScore:2,suggestion:true},"shop/variety_store/Poundland":{name:"Poundland",icon:"maki-shop",geometry:["point","area"],tags:{shop:"variety_store","brand:wikidata":"Q1434528"},addTags:{brand:"Poundland","brand:wikidata":"Q1434528","brand:wikipedia":"en:Poundland",name:"Poundland",shop:"variety_store"},removeTags:{brand:"Poundland","brand:wikidata":"Q1434528","brand:wikipedia":"en:Poundland",name:"Poundland",shop:"variety_store"},matchScore:2,suggestion:true},"shop/variety_store/Poundstretcher":{name:"Poundstretcher",icon:"maki-shop",geometry:["point","area"],tags:{shop:"variety_store","brand:wikidata":"Q7235675"},addTags:{brand:"Poundstretcher","brand:wikidata":"Q7235675","brand:wikipedia":"en:Poundstretcher",name:"Poundstretcher",shop:"variety_store"},removeTags:{brand:"Poundstretcher","brand:wikidata":"Q7235675","brand:wikipedia":"en:Poundstretcher",name:"Poundstretcher",shop:"variety_store"},matchScore:2,suggestion:true},"shop/variety_store/Poundworld":{name:"Poundworld",icon:"maki-shop",geometry:["point","area"],tags:{shop:"variety_store","brand:wikidata":"Q16967516"},addTags:{brand:"Poundworld","brand:wikidata":"Q16967516","brand:wikipedia":"en:Poundworld",name:"Poundworld",shop:"variety_store"},removeTags:{brand:"Poundworld","brand:wikidata":"Q16967516","brand:wikipedia":"en:Poundworld",name:"Poundworld",shop:"variety_store"},matchScore:2,suggestion:true},"shop/variety_store/TEDi":{name:"TEDi",icon:"maki-shop",geometry:["point","area"],tags:{shop:"variety_store","brand:wikidata":"Q1364603"},addTags:{brand:"TEDi","brand:wikidata":"Q1364603","brand:wikipedia":"de:TEDi",name:"TEDi",shop:"variety_store"},removeTags:{brand:"TEDi","brand:wikidata":"Q1364603","brand:wikipedia":"de:TEDi",name:"TEDi",shop:"variety_store"},matchScore:2,suggestion:true},"shop/variety_store/Tokmanni":{name:"Tokmanni",icon:"maki-shop",geometry:["point","area"],tags:{shop:"variety_store","brand:wikidata":"Q13423470"},addTags:{name:"Tokmanni",brand:"Tokmanni","brand:wikidata":"Q13423470","brand:wikipedia":"fi:Tokmanni",shop:"variety_store"},removeTags:{name:"Tokmanni",brand:"Tokmanni","brand:wikidata":"Q13423470","brand:wikipedia":"fi:Tokmanni",shop:"variety_store"},matchScore:2,suggestion:true},"shop/variety_store/Wilko":{name:"Wilko",icon:"maki-shop",geometry:["point","area"],tags:{shop:"variety_store","brand:wikidata":"Q8002536"},addTags:{brand:"Wilko","brand:wikidata":"Q8002536","brand:wikipedia":"en:Wilko (retailer)",name:"Wilko",shop:"variety_store"},removeTags:{brand:"Wilko","brand:wikidata":"Q8002536","brand:wikipedia":"en:Wilko (retailer)",name:"Wilko",shop:"variety_store"},matchScore:2,suggestion:true},"shop/variety_store/キャンドゥ":{name:"キャンドゥ",icon:"maki-shop",geometry:["point","area"],tags:{shop:"variety_store","brand:wikidata":"Q11297367"},addTags:{brand:"キャンドゥ","brand:en":"CAN DO","brand:wikidata":"Q11297367","brand:wikipedia":"ja:キャンドゥ",name:"キャンドゥ","name:en":"CAN DO",shop:"variety_store"},removeTags:{brand:"キャンドゥ","brand:en":"CAN DO","brand:wikidata":"Q11297367","brand:wikipedia":"ja:キャンドゥ",name:"キャンドゥ","name:en":"CAN DO",shop:"variety_store"},matchScore:2,suggestion:true},"shop/variety_store/セリア":{name:"セリア",icon:"maki-shop",geometry:["point","area"],tags:{shop:"variety_store","brand:wikidata":"Q11314509"},addTags:{brand:"セリア","brand:en":"Seria","brand:wikidata":"Q11314509","brand:wikipedia":"ja:セリア (100円ショップ)",name:"セリア","name:en":"Seria",shop:"variety_store"},removeTags:{brand:"セリア","brand:en":"Seria","brand:wikidata":"Q11314509","brand:wikipedia":"ja:セリア (100円ショップ)",name:"セリア","name:en":"Seria",shop:"variety_store"},matchScore:2,suggestion:true},"shop/variety_store/ダイソー":{name:"ダイソー",icon:"maki-shop",geometry:["point","area"],tags:{shop:"variety_store","brand:wikidata":"Q866991"},addTags:{brand:"ダイソー","brand:en":"Daiso","brand:wikidata":"Q866991","brand:wikipedia":"ja:大創産業",name:"ダイソー","name:en":"Daiso",shop:"variety_store"},removeTags:{brand:"ダイソー","brand:en":"Daiso","brand:wikidata":"Q866991","brand:wikipedia":"ja:大創産業",name:"ダイソー","name:en":"Daiso",shop:"variety_store"},matchScore:2,suggestion:true},"shop/video_games/EB Games":{name:"EB Games",icon:"maki-gaming",geometry:["point","area"],tags:{shop:"video_games","brand:wikidata":"Q4993686"},addTags:{brand:"EB Games","brand:wikidata":"Q4993686","brand:wikipedia":"en:EB Games",name:"EB Games",shop:"video_games"},removeTags:{brand:"EB Games","brand:wikidata":"Q4993686","brand:wikipedia":"en:EB Games",name:"EB Games",shop:"video_games"},matchScore:2,suggestion:true},"shop/video_games/GameStop":{name:"GameStop",icon:"maki-gaming",geometry:["point","area"],tags:{shop:"video_games","brand:wikidata":"Q202210"},addTags:{brand:"GameStop","brand:wikidata":"Q202210","brand:wikipedia":"en:GameStop",name:"GameStop",shop:"video_games"},removeTags:{brand:"GameStop","brand:wikidata":"Q202210","brand:wikipedia":"en:GameStop",name:"GameStop",shop:"video_games"},matchScore:2,suggestion:true},"shop/video_games/Micromania":{name:"Micromania",icon:"maki-gaming",geometry:["point","area"],tags:{shop:"video_games","brand:wikidata":"Q3312221"},addTags:{brand:"Micromania","brand:wikidata":"Q3312221","brand:wikipedia":"en:Micromania (video game retailer)",name:"Micromania",shop:"video_games"},removeTags:{brand:"Micromania","brand:wikidata":"Q3312221","brand:wikipedia":"en:Micromania (video game retailer)",name:"Micromania",shop:"video_games"},matchScore:2,suggestion:true},"shop/video/Blockbuster":{name:"Blockbuster",icon:"temaki-movie_rental",geometry:["point","area"],tags:{shop:"video","brand:wikidata":"Q884711"},addTags:{brand:"Blockbuster","brand:wikidata":"Q884711","brand:wikipedia":"en:Blockbuster LLC",name:"Blockbuster",shop:"video"},removeTags:{brand:"Blockbuster","brand:wikidata":"Q884711","brand:wikipedia":"en:Blockbuster LLC",name:"Blockbuster",shop:"video"},matchScore:2,suggestion:true},"shop/video/Family Video":{name:"Family Video",icon:"temaki-movie_rental",geometry:["point","area"],tags:{shop:"video","brand:wikidata":"Q5433297"},addTags:{brand:"Family Video","brand:wikidata":"Q5433297","brand:wikipedia":"en:Family Video",name:"Family Video",shop:"video"},removeTags:{brand:"Family Video","brand:wikidata":"Q5433297","brand:wikipedia":"en:Family Video",name:"Family Video",shop:"video"},matchScore:2,suggestion:true},"shop/video/TSUTAYA":{name:"TSUTAYA",icon:"temaki-movie_rental",geometry:["point","area"],tags:{shop:"video","brand:wikidata":"Q5193457"},addTags:{brand:"TSUTAYA","brand:wikidata":"Q5193457","brand:wikipedia":"ja:カルチュア・コンビニエンス・クラブ",name:"TSUTAYA",shop:"video"},removeTags:{brand:"TSUTAYA","brand:wikidata":"Q5193457","brand:wikipedia":"ja:カルチュア・コンビニエンス・クラブ",name:"TSUTAYA",shop:"video"},matchScore:2,suggestion:true},"shop/video/ゲオ":{name:"ゲオ",icon:"temaki-movie_rental",geometry:["point","area"],tags:{shop:"video","brand:wikidata":"Q5533938"},addTags:{brand:"GEO","brand:wikidata":"Q5533938","brand:wikipedia":"ja:ゲオ",name:"ゲオ",shop:"video"},removeTags:{brand:"GEO","brand:wikidata":"Q5533938","brand:wikipedia":"ja:ゲオ",name:"ゲオ",shop:"video"},matchScore:2,suggestion:true},"shop/watches/Swatch":{name:"Swatch",icon:"maki-watch",geometry:["point","area"],tags:{shop:"watches","brand:wikidata":"Q573422"},addTags:{brand:"Swatch","brand:wikidata":"Q573422","brand:wikipedia":"en:Swatch",name:"Swatch",shop:"watches"},removeTags:{brand:"Swatch","brand:wikidata":"Q573422","brand:wikipedia":"en:Swatch",name:"Swatch",shop:"watches"},matchScore:2,suggestion:true},"shop/wholesale/BJ's Wholesale Club":{name:"BJ's Wholesale Club",icon:"maki-warehouse",geometry:["point","area"],tags:{shop:"wholesale","brand:wikidata":"Q4835754"},addTags:{brand:"BJ's Wholesale Club","brand:wikidata":"Q4835754","brand:wikipedia":"en:BJ's Wholesale Club",name:"BJ's Wholesale Club",shop:"wholesale",operator:"BJ's Wholesale Club"},removeTags:{brand:"BJ's Wholesale Club","brand:wikidata":"Q4835754","brand:wikipedia":"en:BJ's Wholesale Club",name:"BJ's Wholesale Club",shop:"wholesale",operator:"BJ's Wholesale Club"},matchScore:2,suggestion:true},"shop/wholesale/Costco":{name:"Costco",icon:"maki-warehouse",geometry:["point","area"],tags:{shop:"wholesale","brand:wikidata":"Q715583"},addTags:{brand:"Costco","brand:wikidata":"Q715583","brand:wikipedia":"en:Costco",name:"Costco",shop:"wholesale",operator:"Costco"},removeTags:{brand:"Costco","brand:wikidata":"Q715583","brand:wikipedia":"en:Costco",name:"Costco",shop:"wholesale",operator:"Costco"},matchScore:2,suggestion:true},"shop/wholesale/Makro":{name:"Makro",icon:"maki-warehouse",geometry:["point","area"],tags:{shop:"wholesale","brand:wikidata":"Q704606"},addTags:{brand:"Makro","brand:wikidata":"Q704606","brand:wikipedia":"en:Makro",name:"Makro",shop:"wholesale"},removeTags:{brand:"Makro","brand:wikidata":"Q704606","brand:wikipedia":"en:Makro",name:"Makro",shop:"wholesale"},matchScore:2,suggestion:true},"shop/wholesale/Metro":{name:"Metro",icon:"maki-warehouse",geometry:["point","area"],tags:{shop:"wholesale","brand:wikidata":"Q13610282"},addTags:{brand:"Metro","brand:wikidata":"Q13610282","brand:wikipedia":"en:Metro Cash and Carry",name:"Metro",shop:"wholesale"},removeTags:{brand:"Metro","brand:wikidata":"Q13610282","brand:wikipedia":"en:Metro Cash and Carry",name:"Metro",shop:"wholesale"},matchScore:2,suggestion:true},"shop/wholesale/Sam's Club":{name:"Sam's Club",icon:"maki-warehouse",geometry:["point","area"],tags:{shop:"wholesale","brand:wikidata":"Q1972120"},addTags:{brand:"Sam's Club","brand:wikipedia":"en:Sam's Club","brand:wikidata":"Q1972120",name:"Sam's Club",operator:"Walmart","operator:wikidata":"Q483551","operator:wikipedia":"en:Walmart",shop:"wholesale"},removeTags:{brand:"Sam's Club","brand:wikipedia":"en:Sam's Club","brand:wikidata":"Q1972120",name:"Sam's Club",operator:"Walmart","operator:wikidata":"Q483551","operator:wikipedia":"en:Walmart",shop:"wholesale"},matchScore:2,suggestion:true},"tourism/hotel/B&B Hôtel":{name:"B&B Hôtel",icon:"maki-lodging",geometry:["point","area"],tags:{tourism:"hotel","brand:wikidata":"Q794939"},addTags:{brand:"B&B Hôtel","brand:wikidata":"Q794939","brand:wikipedia":"en:B&B Hotels",name:"B&B Hôtel",tourism:"hotel"},removeTags:{brand:"B&B Hôtel","brand:wikidata":"Q794939","brand:wikipedia":"en:B&B Hotels",name:"B&B Hôtel",tourism:"hotel"},matchScore:2,suggestion:true},"tourism/hotel/Best Western":{name:"Best Western",icon:"maki-lodging",geometry:["point","area"],tags:{tourism:"hotel","brand:wikidata":"Q830334"},addTags:{brand:"Best Western","brand:wikidata":"Q830334","brand:wikipedia":"en:Best Western",name:"Best Western",tourism:"hotel"},removeTags:{brand:"Best Western","brand:wikidata":"Q830334","brand:wikipedia":"en:Best Western",name:"Best Western",tourism:"hotel"},matchScore:2,suggestion:true},"tourism/hotel/Best Western Plus":{name:"Best Western Plus",icon:"maki-lodging",geometry:["point","area"],tags:{tourism:"hotel","brand:wikidata":"Q830334"},addTags:{brand:"Best Western","brand:wikidata":"Q830334","brand:wikipedia":"en:Best Western",name:"Best Western Plus",tourism:"hotel"},removeTags:{brand:"Best Western","brand:wikidata":"Q830334","brand:wikipedia":"en:Best Western",name:"Best Western Plus",tourism:"hotel"},matchScore:2,suggestion:true},"tourism/hotel/Campanile":{name:"Campanile",icon:"maki-lodging",geometry:["point","area"],tags:{tourism:"hotel","brand:wikidata":"Q2412064"},addTags:{brand:"Campanile","brand:wikidata":"Q2412064","brand:wikipedia":"fr:Campanile (chaîne d'hôtels)",name:"Campanile",tourism:"hotel"},removeTags:{brand:"Campanile","brand:wikidata":"Q2412064","brand:wikipedia":"fr:Campanile (chaîne d'hôtels)",name:"Campanile",tourism:"hotel"},matchScore:2,suggestion:true},"tourism/hotel/Candlewood Suites":{name:"Candlewood Suites",icon:"maki-lodging",geometry:["point","area"],tags:{tourism:"hotel","brand:wikidata":"Q5032010"},addTags:{brand:"Candlewood Suites","brand:wikidata":"Q5032010","brand:wikipedia":"en:Candlewood Suites",name:"Candlewood Suites",tourism:"hotel"},removeTags:{brand:"Candlewood Suites","brand:wikidata":"Q5032010","brand:wikipedia":"en:Candlewood Suites",name:"Candlewood Suites",tourism:"hotel"},matchScore:2,suggestion:true},"tourism/hotel/Comfort Inn":{name:"Comfort Inn",icon:"maki-lodging",geometry:["point","area"],tags:{tourism:"hotel","brand:wikidata":"Q1075788"},addTags:{brand:"Comfort Inn","brand:wikidata":"Q1075788","brand:wikipedia":"en:Choice Hotels",name:"Comfort Inn",tourism:"hotel"},removeTags:{brand:"Comfort Inn","brand:wikidata":"Q1075788","brand:wikipedia":"en:Choice Hotels",name:"Comfort Inn",tourism:"hotel"},matchScore:2,suggestion:true},"tourism/hotel/Comfort Inn & Suites":{name:"Comfort Inn & Suites",icon:"maki-lodging",geometry:["point","area"],tags:{tourism:"hotel","brand:wikidata":"Q1075788"},addTags:{brand:"Comfort Inn & Suites","brand:wikidata":"Q1075788","brand:wikipedia":"en:Choice Hotels",name:"Comfort Inn & Suites",tourism:"hotel"},removeTags:{brand:"Comfort Inn & Suites","brand:wikidata":"Q1075788","brand:wikipedia":"en:Choice Hotels",name:"Comfort Inn & Suites",tourism:"hotel"},matchScore:2,suggestion:true},"tourism/hotel/Comfort Suites":{name:"Comfort Suites",icon:"maki-lodging",geometry:["point","area"],tags:{tourism:"hotel","brand:wikidata":"Q1075788"},addTags:{brand:"Comfort Suites","brand:wikidata":"Q1075788","brand:wikipedia":"en:Choice Hotels",name:"Comfort Suites",tourism:"hotel"},removeTags:{brand:"Comfort Suites","brand:wikidata":"Q1075788","brand:wikipedia":"en:Choice Hotels",name:"Comfort Suites",tourism:"hotel"},matchScore:2,suggestion:true},"tourism/hotel/Country Inn & Suites":{name:"Country Inn & Suites",icon:"maki-lodging",geometry:["point","area"],tags:{tourism:"hotel","brand:wikidata":"Q5177332"},addTags:{brand:"Country Inn & Suites","brand:wikidata":"Q5177332","brand:wikipedia":"en:Country Inns & Suites",name:"Country Inn & Suites",tourism:"hotel"},removeTags:{brand:"Country Inn & Suites","brand:wikidata":"Q5177332","brand:wikipedia":"en:Country Inns & Suites",name:"Country Inn & Suites",tourism:"hotel"},matchScore:2,suggestion:true},"tourism/hotel/Courtyard by Marriott":{name:"Courtyard by Marriott",icon:"maki-lodging",geometry:["point","area"],tags:{tourism:"hotel","brand:wikidata":"Q1053170"},addTags:{brand:"Courtyard by Marriott","brand:wikidata":"Q1053170","brand:wikipedia":"en:Courtyard by Marriott",name:"Courtyard by Marriott",tourism:"hotel"},removeTags:{brand:"Courtyard by Marriott","brand:wikidata":"Q1053170","brand:wikipedia":"en:Courtyard by Marriott",name:"Courtyard by Marriott",tourism:"hotel"},matchScore:2,suggestion:true},"tourism/hotel/Crowne Plaza":{name:"Crowne Plaza",icon:"maki-lodging",geometry:["point","area"],tags:{tourism:"hotel","brand:wikidata":"Q2746220"},addTags:{brand:"Crowne Plaza","brand:wikidata":"Q2746220","brand:wikipedia":"en:Crowne Plaza",name:"Crowne Plaza",tourism:"hotel"},removeTags:{brand:"Crowne Plaza","brand:wikidata":"Q2746220","brand:wikipedia":"en:Crowne Plaza",name:"Crowne Plaza",tourism:"hotel"},matchScore:2,suggestion:true},"tourism/hotel/Days Inn":{name:"Days Inn",icon:"maki-lodging",geometry:["point","area"],tags:{tourism:"hotel","brand:wikidata":"Q1047239"},addTags:{brand:"Days Inn","brand:wikidata":"Q1047239","brand:wikipedia":"en:Days Inn",name:"Days Inn",operator:"Wyndham Hotels and Resorts","operator:wikidata":"Q8040120","operator:wikipedia":"en:Wyndham Hotels and Resorts",tourism:"hotel"},removeTags:{brand:"Days Inn","brand:wikidata":"Q1047239","brand:wikipedia":"en:Days Inn",name:"Days Inn",operator:"Wyndham Hotels and Resorts","operator:wikidata":"Q8040120","operator:wikipedia":"en:Wyndham Hotels and Resorts",tourism:"hotel"},matchScore:2,suggestion:true},"tourism/hotel/Embassy Suites":{name:"Embassy Suites",icon:"maki-lodging",geometry:["point","area"],tags:{tourism:"hotel","brand:wikidata":"Q5369524"},addTags:{brand:"Embassy Suites","brand:wikidata":"Q5369524","brand:wikipedia":"en:Embassy Suites by Hilton",name:"Embassy Suites",tourism:"hotel"},removeTags:{brand:"Embassy Suites","brand:wikidata":"Q5369524","brand:wikipedia":"en:Embassy Suites by Hilton",name:"Embassy Suites",tourism:"hotel"},matchScore:2,suggestion:true},"tourism/hotel/Extended Stay America":{name:"Extended Stay America",icon:"maki-lodging",geometry:["point","area"],tags:{tourism:"hotel","brand:wikidata":"Q5421850"},addTags:{brand:"Extended Stay America","brand:wikidata":"Q5421850","brand:wikipedia":"en:Extended Stay America",name:"Extended Stay America",tourism:"hotel"},removeTags:{brand:"Extended Stay America","brand:wikidata":"Q5421850","brand:wikipedia":"en:Extended Stay America",name:"Extended Stay America",tourism:"hotel"},matchScore:2,suggestion:true},"tourism/hotel/Fairfield Inn":{name:"Fairfield Inn",icon:"maki-lodging",geometry:["point","area"],tags:{tourism:"hotel","brand:wikidata":"Q5430314"},addTags:{brand:"Fairfield Inn","brand:wikidata":"Q5430314","brand:wikipedia":"en:Fairfield Inn by Marriott",name:"Fairfield Inn",tourism:"hotel"},removeTags:{brand:"Fairfield Inn","brand:wikidata":"Q5430314","brand:wikipedia":"en:Fairfield Inn by Marriott",name:"Fairfield Inn",tourism:"hotel"},matchScore:2,suggestion:true},"tourism/hotel/Formule 1":{name:"Formule 1",icon:"maki-lodging",geometry:["point","area"],tags:{tourism:"hotel","brand:wikidata":"Q1630895"},addTags:{brand:"Formule 1","brand:wikidata":"Q1630895","brand:wikipedia":"en:Hotel Formule 1",name:"Formule 1",tourism:"hotel"},removeTags:{brand:"Formule 1","brand:wikidata":"Q1630895","brand:wikipedia":"en:Hotel Formule 1",name:"Formule 1",tourism:"hotel"},matchScore:2,suggestion:true},"tourism/hotel/Grand Hyatt":{name:"Grand Hyatt",icon:"maki-lodging",geometry:["point","area"],tags:{tourism:"hotel","brand:wikidata":"Q1425063"},addTags:{brand:"Grand Hyatt","brand:wikidata":"Q1425063","brand:wikipedia":"en:Hyatt",name:"Grand Hyatt",operator:"Hyatt",tourism:"hotel"},removeTags:{brand:"Grand Hyatt","brand:wikidata":"Q1425063","brand:wikipedia":"en:Hyatt",name:"Grand Hyatt",operator:"Hyatt",tourism:"hotel"},matchScore:2,suggestion:true},"tourism/hotel/Hampton Inn":{name:"Hampton Inn",icon:"maki-lodging",geometry:["point","area"],tags:{tourism:"hotel","brand:wikidata":"Q5646230"},addTags:{brand:"Hampton Inn","brand:wikidata":"Q5646230","brand:wikipedia":"en:Hampton by Hilton",name:"Hampton Inn",tourism:"hotel"},removeTags:{brand:"Hampton Inn","brand:wikidata":"Q5646230","brand:wikipedia":"en:Hampton by Hilton",name:"Hampton Inn",tourism:"hotel"},matchScore:2,suggestion:true},"tourism/hotel/Hilton":{name:"Hilton",icon:"maki-lodging",geometry:["point","area"],tags:{tourism:"hotel","brand:wikidata":"Q598884"},addTags:{brand:"Hilton","brand:wikidata":"Q598884","brand:wikipedia":"en:Hilton Hotels & Resorts",name:"Hilton",tourism:"hotel"},removeTags:{brand:"Hilton","brand:wikidata":"Q598884","brand:wikipedia":"en:Hilton Hotels & Resorts",name:"Hilton",tourism:"hotel"},matchScore:2,suggestion:true},"tourism/hotel/Hilton Garden Inn":{name:"Hilton Garden Inn",icon:"maki-lodging",geometry:["point","area"],tags:{tourism:"hotel","brand:wikidata":"Q1162859"},addTags:{brand:"Hilton Garden Inn","brand:wikidata":"Q1162859","brand:wikipedia":"en:Hilton Garden Inn",name:"Hilton Garden Inn",tourism:"hotel"},removeTags:{brand:"Hilton Garden Inn","brand:wikidata":"Q1162859","brand:wikipedia":"en:Hilton Garden Inn",name:"Hilton Garden Inn",tourism:"hotel"},matchScore:2,suggestion:true},"tourism/hotel/Holiday Inn":{name:"Holiday Inn",icon:"maki-lodging",geometry:["point","area"],tags:{tourism:"hotel","brand:wikidata":"Q2717882"},addTags:{brand:"Holiday Inn","brand:wikidata":"Q2717882","brand:wikipedia":"en:Holiday Inn",name:"Holiday Inn",tourism:"hotel"},removeTags:{brand:"Holiday Inn","brand:wikidata":"Q2717882","brand:wikipedia":"en:Holiday Inn",name:"Holiday Inn",tourism:"hotel"},matchScore:2,suggestion:true},"tourism/hotel/Holiday Inn Express":{name:"Holiday Inn Express",icon:"maki-lodging",geometry:["point","area"],tags:{tourism:"hotel","brand:wikidata":"Q5880423"},addTags:{brand:"Holiday Inn Express","brand:wikidata":"Q5880423","brand:wikipedia":"en:Holiday Inn Express",name:"Holiday Inn Express",tourism:"hotel"},removeTags:{brand:"Holiday Inn Express","brand:wikidata":"Q5880423","brand:wikipedia":"en:Holiday Inn Express",name:"Holiday Inn Express",tourism:"hotel"},matchScore:2,suggestion:true},"tourism/hotel/Holiday Inn Express & Suites":{name:"Holiday Inn Express & Suites",icon:"maki-lodging",geometry:["point","area"],tags:{tourism:"hotel","brand:wikidata":"Q5880423"},addTags:{brand:"Holiday Inn Express & Suites","brand:wikidata":"Q5880423","brand:wikipedia":"en:Holiday Inn Express",name:"Holiday Inn Express & Suites",tourism:"hotel"},removeTags:{brand:"Holiday Inn Express & Suites","brand:wikidata":"Q5880423","brand:wikipedia":"en:Holiday Inn Express",name:"Holiday Inn Express & Suites",tourism:"hotel"},matchScore:2,suggestion:true},"tourism/hotel/Homewood Suites":{name:"Homewood Suites",icon:"maki-lodging",geometry:["point","area"],tags:{tourism:"hotel","brand:wikidata":"Q5890701"},addTags:{brand:"Homewood Suites","brand:wikidata":"Q5890701","brand:wikipedia":"en:Homewood Suites by Hilton",name:"Homewood Suites",tourism:"hotel"},removeTags:{brand:"Homewood Suites","brand:wikidata":"Q5890701","brand:wikipedia":"en:Homewood Suites by Hilton",name:"Homewood Suites",tourism:"hotel"},matchScore:2,suggestion:true},"tourism/hotel/Hyatt":{name:"Hyatt",icon:"maki-lodging",geometry:["point","area"],tags:{tourism:"hotel","brand:wikidata":"Q1425063"},addTags:{brand:"Hyatt","brand:wikidata":"Q1425063","brand:wikipedia":"en:Hyatt",name:"Hyatt",operator:"Hyatt",tourism:"hotel"},removeTags:{brand:"Hyatt","brand:wikidata":"Q1425063","brand:wikipedia":"en:Hyatt",name:"Hyatt",operator:"Hyatt",tourism:"hotel"},matchScore:2,suggestion:true},"tourism/hotel/Hyatt Centric":{name:"Hyatt Centric",icon:"maki-lodging",geometry:["point","area"],tags:{tourism:"hotel","brand:wikidata":"Q1425063"},addTags:{brand:"Hyatt Centric","brand:wikidata":"Q1425063","brand:wikipedia":"en:Hyatt",name:"Hyatt Centric",operator:"Hyatt",tourism:"hotel"},removeTags:{brand:"Hyatt Centric","brand:wikidata":"Q1425063","brand:wikipedia":"en:Hyatt",name:"Hyatt Centric",operator:"Hyatt",tourism:"hotel"},matchScore:2,suggestion:true},"tourism/hotel/Hyatt House":{name:"Hyatt House",icon:"maki-lodging",geometry:["point","area"],tags:{tourism:"hotel","brand:wikidata":"Q1425063"},addTags:{brand:"Hyatt House","brand:wikidata":"Q1425063","brand:wikipedia":"en:Hyatt",name:"Hyatt House",operator:"Hyatt",tourism:"hotel"},removeTags:{brand:"Hyatt House","brand:wikidata":"Q1425063","brand:wikipedia":"en:Hyatt",name:"Hyatt House",operator:"Hyatt",tourism:"hotel"},matchScore:2,suggestion:true},"tourism/hotel/Hyatt Place":{name:"Hyatt Place",icon:"maki-lodging",geometry:["point","area"],tags:{tourism:"hotel","brand:wikidata":"Q1425063"},addTags:{brand:"Hyatt Place","brand:wikidata":"Q1425063","brand:wikipedia":"en:Hyatt",name:"Hyatt Place",operator:"Hyatt",tourism:"hotel"},removeTags:{brand:"Hyatt Place","brand:wikidata":"Q1425063","brand:wikipedia":"en:Hyatt",name:"Hyatt Place",operator:"Hyatt",tourism:"hotel"},matchScore:2,suggestion:true},"tourism/hotel/Hyatt Regency":{name:"Hyatt Regency",icon:"maki-lodging",geometry:["point","area"],tags:{tourism:"hotel","brand:wikidata":"Q1425063"},addTags:{brand:"Hyatt Regency","brand:wikidata":"Q1425063","brand:wikipedia":"en:Hyatt",name:"Hyatt Regency",operator:"Hyatt",tourism:"hotel"},removeTags:{brand:"Hyatt Regency","brand:wikidata":"Q1425063","brand:wikipedia":"en:Hyatt",name:"Hyatt Regency",operator:"Hyatt",tourism:"hotel"},matchScore:2,suggestion:true},"tourism/hotel/Ibis":{name:"Ibis",icon:"maki-lodging",geometry:["point","area"],tags:{tourism:"hotel","brand:wikidata":"Q920166"},addTags:{brand:"Ibis","brand:wikidata":"Q920166","brand:wikipedia":"en:Ibis (hotel)",name:"Ibis",tourism:"hotel"},removeTags:{brand:"Ibis","brand:wikidata":"Q920166","brand:wikipedia":"en:Ibis (hotel)",name:"Ibis",tourism:"hotel"},matchScore:2,suggestion:true},"tourism/hotel/Ibis Budget":{name:"Ibis Budget",icon:"maki-lodging",geometry:["point","area"],tags:{tourism:"hotel","brand:wikidata":"Q1458135"},addTags:{brand:"Ibis Budget","brand:wikidata":"Q1458135","brand:wikipedia":"en:Ibis Budget",name:"Ibis Budget",tourism:"hotel"},removeTags:{brand:"Ibis Budget","brand:wikidata":"Q1458135","brand:wikipedia":"en:Ibis Budget",name:"Ibis Budget",tourism:"hotel"},matchScore:2,suggestion:true},"tourism/hotel/Ibis Hotel":{name:"Ibis Hotel",icon:"maki-lodging",geometry:["point","area"],tags:{tourism:"hotel","brand:wikidata":"Q920166"},addTags:{brand:"Ibis Hotel","brand:wikidata":"Q920166","brand:wikipedia":"en:Ibis (hotel)",name:"Ibis Hotel",tourism:"hotel"},removeTags:{brand:"Ibis Hotel","brand:wikidata":"Q920166","brand:wikipedia":"en:Ibis (hotel)",name:"Ibis Hotel",tourism:"hotel"},matchScore:2,suggestion:true},"tourism/hotel/Ibis Styles":{name:"Ibis Styles",icon:"maki-lodging",geometry:["point","area"],tags:{tourism:"hotel","brand:wikidata":"Q3147425"},addTags:{brand:"Ibis Styles","brand:wikidata":"Q3147425","brand:wikipedia":"en:Ibis Styles",name:"Ibis Styles",tourism:"hotel"},removeTags:{brand:"Ibis Styles","brand:wikidata":"Q3147425","brand:wikipedia":"en:Ibis Styles",name:"Ibis Styles",tourism:"hotel"},matchScore:2,suggestion:true},"tourism/hotel/Kyriad":{name:"Kyriad",icon:"maki-lodging",geometry:["point","area"],tags:{tourism:"hotel","brand:wikidata":"Q11751808"},addTags:{brand:"Kyriad","brand:wikidata":"Q11751808","brand:wikipedia":"pl:Kyriad",name:"Kyriad",tourism:"hotel"},removeTags:{brand:"Kyriad","brand:wikidata":"Q11751808","brand:wikipedia":"pl:Kyriad",name:"Kyriad",tourism:"hotel"},matchScore:2,suggestion:true},"tourism/hotel/La Quinta":{name:"La Quinta",icon:"maki-lodging",geometry:["point","area"],tags:{tourism:"hotel","brand:wikidata":"Q6464734"},addTags:{brand:"La Quinta","brand:wikidata":"Q6464734","brand:wikipedia":"en:La Quinta Inns & Suites",name:"La Quinta",operator:"Wyndham Hotels and Resorts","operator:wikidata":"Q8040120","operator:wikipedia":"en:Wyndham Hotels and Resorts",tourism:"hotel"},removeTags:{brand:"La Quinta","brand:wikidata":"Q6464734","brand:wikipedia":"en:La Quinta Inns & Suites",name:"La Quinta",operator:"Wyndham Hotels and Resorts","operator:wikidata":"Q8040120","operator:wikipedia":"en:Wyndham Hotels and Resorts",tourism:"hotel"},matchScore:2,suggestion:true},"tourism/hotel/Marriott":{name:"Marriott",icon:"maki-lodging",geometry:["point","area"],tags:{tourism:"hotel","brand:wikidata":"Q1141173"},addTags:{brand:"Marriott","brand:wikidata":"Q1141173","brand:wikipedia":"en:Marriott International",name:"Marriott",tourism:"hotel"},removeTags:{brand:"Marriott","brand:wikidata":"Q1141173","brand:wikipedia":"en:Marriott International",name:"Marriott",tourism:"hotel"},matchScore:2,suggestion:true},"tourism/hotel/Mercure":{name:"Mercure",icon:"maki-lodging",geometry:["point","area"],tags:{tourism:"hotel","brand:wikidata":"Q1709809"},addTags:{brand:"Mercure","brand:wikidata":"Q1709809","brand:wikipedia":"en:Mercure (hotel)",name:"Mercure",tourism:"hotel"},removeTags:{brand:"Mercure","brand:wikidata":"Q1709809","brand:wikipedia":"en:Mercure (hotel)",name:"Mercure",tourism:"hotel"},matchScore:2,suggestion:true},"tourism/hotel/Novotel":{name:"Novotel",icon:"maki-lodging",geometry:["point","area"],tags:{tourism:"hotel","brand:wikidata":"Q420545"},addTags:{brand:"Novotel","brand:wikidata":"Q420545","brand:wikipedia":"en:Novotel",name:"Novotel",tourism:"hotel"},removeTags:{brand:"Novotel","brand:wikidata":"Q420545","brand:wikipedia":"en:Novotel",name:"Novotel",tourism:"hotel"},matchScore:2,suggestion:true},"tourism/hotel/Park Hyatt":{name:"Park Hyatt",icon:"maki-lodging",geometry:["point","area"],tags:{tourism:"hotel","brand:wikidata":"Q1425063"},addTags:{brand:"Park Hyatt","brand:wikidata":"Q1425063","brand:wikipedia":"en:Hyatt",name:"Park Hyatt",operator:"Hyatt",tourism:"hotel"},removeTags:{brand:"Park Hyatt","brand:wikidata":"Q1425063","brand:wikipedia":"en:Hyatt",name:"Park Hyatt",operator:"Hyatt",tourism:"hotel"},matchScore:2,suggestion:true},"tourism/hotel/Premier Inn":{name:"Premier Inn",icon:"maki-lodging",geometry:["point","area"],tags:{tourism:"hotel","brand:wikidata":"Q2108626"},addTags:{brand:"Premier Inn","brand:wikidata":"Q2108626","brand:wikipedia":"en:Premier Inn",name:"Premier Inn",tourism:"hotel"},removeTags:{brand:"Premier Inn","brand:wikidata":"Q2108626","brand:wikipedia":"en:Premier Inn",name:"Premier Inn",tourism:"hotel"},matchScore:2,suggestion:true},"tourism/hotel/Première Classe":{name:"Première Classe",icon:"maki-lodging",geometry:["point","area"],tags:{tourism:"hotel","brand:wikidata":"Q5964551"},addTags:{brand:"Première Classe","brand:wikidata":"Q5964551","brand:wikipedia":"en:Hôtel Première Classe",name:"Première Classe",tourism:"hotel"},removeTags:{brand:"Première Classe","brand:wikidata":"Q5964551","brand:wikipedia":"en:Hôtel Première Classe",name:"Première Classe",tourism:"hotel"},matchScore:2,suggestion:true},"tourism/hotel/Quality Inn":{name:"Quality Inn",icon:"maki-lodging",geometry:["point","area"],tags:{tourism:"hotel","brand:wikidata":"Q1075788"},addTags:{brand:"Quality Inn","brand:wikidata":"Q1075788","brand:wikipedia":"en:Choice Hotels",name:"Quality Inn",tourism:"hotel"},removeTags:{brand:"Quality Inn","brand:wikidata":"Q1075788","brand:wikipedia":"en:Choice Hotels",name:"Quality Inn",tourism:"hotel"},matchScore:2,suggestion:true},"tourism/hotel/Quality Inn & Suites":{name:"Quality Inn & Suites",icon:"maki-lodging",geometry:["point","area"],tags:{tourism:"hotel","brand:wikidata":"Q1075788"},addTags:{brand:"Quality Inn & Suites","brand:wikidata":"Q1075788","brand:wikipedia":"en:Choice Hotels",name:"Quality Inn & Suites",tourism:"hotel"},removeTags:{brand:"Quality Inn & Suites","brand:wikidata":"Q1075788","brand:wikipedia":"en:Choice Hotels",name:"Quality Inn & Suites",tourism:"hotel"},matchScore:2,suggestion:true},"tourism/hotel/Ramada":{name:"Ramada",icon:"maki-lodging",geometry:["point","area"],tags:{tourism:"hotel","brand:wikidata":"Q1502859"},addTags:{brand:"Ramada","brand:wikidata":"Q1502859","brand:wikipedia":"en:Ramada",name:"Ramada",operator:"Wyndham Hotels and Resorts","operator:wikidata":"Q8040120","operator:wikipedia":"en:Wyndham Hotels and Resorts",tourism:"hotel"},removeTags:{brand:"Ramada","brand:wikidata":"Q1502859","brand:wikipedia":"en:Ramada",name:"Ramada",operator:"Wyndham Hotels and Resorts","operator:wikidata":"Q8040120","operator:wikipedia":"en:Wyndham Hotels and Resorts",tourism:"hotel"},matchScore:2,suggestion:true},"tourism/hotel/Red Roof Inn":{name:"Red Roof Inn",icon:"maki-lodging",geometry:["point","area"],tags:{tourism:"hotel","brand:wikidata":"Q7304949"},addTags:{brand:"Red Roof Inn","brand:wikidata":"Q7304949","brand:wikipedia":"en:Red Roof Inn",name:"Red Roof Inn",tourism:"hotel"},removeTags:{brand:"Red Roof Inn","brand:wikidata":"Q7304949","brand:wikipedia":"en:Red Roof Inn",name:"Red Roof Inn",tourism:"hotel"},matchScore:2,suggestion:true},"tourism/hotel/Residence Inn":{name:"Residence Inn",icon:"maki-lodging",geometry:["point","area"],tags:{tourism:"hotel","brand:wikidata":"Q7315394"},addTags:{brand:"Residence Inn","brand:wikidata":"Q7315394","brand:wikipedia":"en:Residence Inn by Marriott",name:"Residence Inn",tourism:"hotel"},removeTags:{brand:"Residence Inn","brand:wikidata":"Q7315394","brand:wikipedia":"en:Residence Inn by Marriott",name:"Residence Inn",tourism:"hotel"},matchScore:2,suggestion:true},"tourism/hotel/Sheraton":{name:"Sheraton",icon:"maki-lodging",geometry:["point","area"],tags:{tourism:"hotel","brand:wikidata":"Q634831"},addTags:{brand:"Sheraton","brand:wikidata":"Q634831","brand:wikipedia":"en:Sheraton Hotels and Resorts",name:"Sheraton",tourism:"hotel"},removeTags:{brand:"Sheraton","brand:wikidata":"Q634831","brand:wikipedia":"en:Sheraton Hotels and Resorts",name:"Sheraton",tourism:"hotel"},matchScore:2,suggestion:true},"tourism/hotel/Sleep Inn":{name:"Sleep Inn",icon:"maki-lodging",geometry:["point","area"],tags:{tourism:"hotel","brand:wikidata":"Q1075788"},addTags:{brand:"Sleep Inn","brand:wikidata":"Q1075788","brand:wikipedia":"en:Choice Hotels",name:"Sleep Inn",tourism:"hotel"},removeTags:{brand:"Sleep Inn","brand:wikidata":"Q1075788","brand:wikipedia":"en:Choice Hotels",name:"Sleep Inn",tourism:"hotel"},matchScore:2,suggestion:true},"tourism/hotel/Staybridge Suites":{name:"Staybridge Suites",icon:"maki-lodging",geometry:["point","area"],tags:{tourism:"hotel","brand:wikidata":"Q7605116"},addTags:{brand:"Staybridge Suites","brand:wikidata":"Q7605116","brand:wikipedia":"en:Staybridge Suites",name:"Staybridge Suites",tourism:"hotel"},removeTags:{brand:"Staybridge Suites","brand:wikidata":"Q7605116","brand:wikipedia":"en:Staybridge Suites",name:"Staybridge Suites",tourism:"hotel"},matchScore:2,suggestion:true},"tourism/hotel/Travelodge":{name:"Travelodge",icon:"maki-lodging",geometry:["point","area"],tags:{tourism:"hotel","brand:wikidata":"Q7836087"},addTags:{brand:"Travelodge","brand:wikidata":"Q7836087","brand:wikipedia":"en:Travelodge",name:"Travelodge",operator:"Wyndham Hotels and Resorts","operator:wikidata":"Q8040120","operator:wikipedia":"en:Wyndham Hotels and Resorts",tourism:"hotel"},removeTags:{brand:"Travelodge","brand:wikidata":"Q7836087","brand:wikipedia":"en:Travelodge",name:"Travelodge",operator:"Wyndham Hotels and Resorts","operator:wikidata":"Q8040120","operator:wikipedia":"en:Wyndham Hotels and Resorts",tourism:"hotel"},matchScore:2,suggestion:true},"tourism/hotel/東横イン":{name:"東横イン",icon:"maki-lodging",geometry:["point","area"],tags:{tourism:"hotel","brand:wikidata":"Q1320541"},addTags:{brand:"東横イン","brand:en":"Toyoko Inn","brand:wikidata":"Q1320541","brand:wikipedia":"en:Toyoko Inn",name:"東横イン","name:en":"Toyoko Inn",tourism:"hotel"},removeTags:{brand:"東横イン","brand:en":"Toyoko Inn","brand:wikidata":"Q1320541","brand:wikipedia":"en:Toyoko Inn",name:"東横イン","name:en":"Toyoko Inn",tourism:"hotel"},matchScore:2,suggestion:true},"tourism/motel/Econo Lodge":{name:"Econo Lodge",icon:"maki-lodging",geometry:["point","area"],tags:{tourism:"motel","brand:wikidata":"Q5333330"},addTags:{brand:"Econo Lodge","brand:wikidata":"Q5333330","brand:wikipedia":"en:Econo Lodge",name:"Econo Lodge",tourism:"motel"},removeTags:{brand:"Econo Lodge","brand:wikidata":"Q5333330","brand:wikipedia":"en:Econo Lodge",name:"Econo Lodge",tourism:"motel"},matchScore:2,suggestion:true},"tourism/motel/Motel 6":{name:"Motel 6",icon:"maki-lodging",geometry:["point","area"],tags:{tourism:"motel","brand:wikidata":"Q2188884"},addTags:{brand:"Motel 6","brand:wikidata":"Q2188884","brand:wikipedia":"en:Motel 6",name:"Motel 6",tourism:"motel"},removeTags:{brand:"Motel 6","brand:wikidata":"Q2188884","brand:wikipedia":"en:Motel 6",name:"Motel 6",tourism:"motel"},matchScore:2,suggestion:true},"tourism/motel/Rodeway Inn":{name:"Rodeway Inn",icon:"maki-lodging",geometry:["point","area"],tags:{tourism:"motel","brand:wikidata":"Q7356709"},addTags:{brand:"Rodeway Inn","brand:wikidata":"Q7356709","brand:wikipedia":"en:Rodeway Inn",name:"Rodeway Inn",tourism:"motel"},removeTags:{brand:"Rodeway Inn","brand:wikidata":"Q7356709","brand:wikipedia":"en:Rodeway Inn",name:"Rodeway Inn",tourism:"motel"},matchScore:2,suggestion:true},"tourism/motel/Super 8":{name:"Super 8",icon:"maki-lodging",geometry:["point","area"],tags:{tourism:"motel","brand:wikidata":"Q5364003"},addTags:{brand:"Super 8","brand:wikidata":"Q5364003","brand:wikipedia":"en:Super 8 Motels",name:"Super 8",operator:"Wyndham Hotels and Resorts","operator:wikidata":"Q8040120","operator:wikipedia":"en:Wyndham Hotels and Resorts",tourism:"motel"},removeTags:{brand:"Super 8","brand:wikidata":"Q5364003","brand:wikipedia":"en:Super 8 Motels",name:"Super 8",operator:"Wyndham Hotels and Resorts","operator:wikidata":"Q8040120","operator:wikipedia":"en:Wyndham Hotels and Resorts",tourism:"motel"},matchScore:2,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","category-utility","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/crossing/marked","highway/crossing/unmarked","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","public_transport/stop_area","type/boundary","type/waterway","type/multipolygon","type/enforcement","type/site","relation"]};
 
-  var categories = {"category-barrier":{icon:"maki-roadblock",geometry:"line",name:"Barrier Features",members:["barrier/fence","barrier/wall","barrier/ditch","barrier/gate","barrier/hedge","barrier/kerb","barrier"]},"category-building":{icon:"maki-building",geometry:"area",name:"Building Features",members:["building","building/house","building/apartments","building/garage","building/retail","building/commercial","building/industrial","building/residential"]},"category-golf":{icon:"maki-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:"maki-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","landuse/religious"]},"category-natural-area":{icon:"maki-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:"maki-natural",geometry:"line",name:"Natural Features",members:["natural/coastline","natural/tree_row"]},"category-natural-point":{icon:"maki-natural",geometry:"point",name:"Natural Features",members:["natural/peak","natural/cliff","natural/beach","natural/cave_entrance"]},"category-path":{icon:"iD-category-path",geometry:"line",name:"Path Features",members:["highway/footway/marked","highway/footway/sidewalk","highway/steps","highway/path","highway/footway","highway/cycleway","highway/bridleway","highway/pedestrian_line"]},"category-rail":{icon:"iD-category-rail",geometry:"line",name:"Rail Features",members:["railway/rail","railway/subway","railway/tram","railway/monorail","railway/disused","railway/abandoned"]},"category-restriction":{icon:"iD-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/only_u_turn","type/restriction"]},"category-road":{icon:"iD-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:"iD-route",geometry:"relation",name:"Route Features",members:["type/route/road","type/route/bicycle","type/route/foot","type/route/hiking","type/route/horse","type/route/piste","type/route/bus","type/route/train","type/route/light_rail","type/route/tram","type/route/subway","type/route/ferry","type/route/power","type/route/pipeline","type/route/detour","type/route_master","type/route"]},"category-utility":{icon:"iD-category-utility",geometry:"line",name:"Utility Features",members:["power/line","power/minor_line","man_made/pipeline","power/cable/underground"]},"category-water-area":{icon:"maki-water",geometry:"area",name:"Water Features",members:["natural/water/lake","natural/water/pond","natural/water/reservoir","natural/water"]},"category-water-line":{icon:"iD-category-water",geometry:"line",name:"Water Features",members:["waterway/river","waterway/stream","waterway/canal","waterway/ditch","waterway/drain"]}};
+  var categories = {"category-barrier":{icon:"maki-roadblock",geometry:"line",name:"Barrier Features",members:["barrier/fence","barrier/wall","barrier/ditch","barrier/gate","barrier/hedge","barrier/kerb","barrier"]},"category-building":{icon:"maki-building",geometry:"area",name:"Building Features",members:["building","building/house","building/apartments","building/garage","building/retail","building/commercial","building/industrial","building/residential"]},"category-golf-area":{icon:"maki-golf",geometry:"area",name:"Golf Features",members:["golf/fairway","golf/green","golf/lateral_water_hazard","golf/rough","golf/bunker","golf/tee","golf/water_hazard","golf/driving_range"]},"category-golf-line":{icon:"maki-golf",geometry:"line",name:"Golf Features",members:["golf/hole","golf/cartpath","golf/cartpath_service","golf/path"]},"category-landuse":{icon:"maki-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","landuse/religious"]},"category-natural-area":{icon:"maki-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:"maki-natural",geometry:"line",name:"Natural Features",members:["natural/coastline","natural/tree_row"]},"category-natural-point":{icon:"maki-natural",geometry:"point",name:"Natural Features",members:["natural/peak","natural/cliff","natural/beach","natural/cave_entrance"]},"category-path":{icon:"iD-category-path",geometry:"line",name:"Path Features",members:["highway/footway/marked","highway/footway/sidewalk","highway/steps","highway/path","highway/footway","highway/cycleway","highway/bridleway","highway/pedestrian_line"]},"category-rail":{icon:"iD-category-rail",geometry:"line",name:"Rail Features",members:["railway/rail","railway/subway","railway/tram","railway/monorail","railway/disused","railway/abandoned"]},"category-restriction":{icon:"iD-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/only_u_turn","type/restriction"]},"category-road":{icon:"iD-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:"iD-route",geometry:"relation",name:"Route Features",members:["type/route/road","type/route/bicycle","type/route/foot","type/route/hiking","type/route/horse","type/route/piste","type/route/bus","type/route/train","type/route/light_rail","type/route/tram","type/route/subway","type/route/ferry","type/route/power","type/route/pipeline","type/route/detour","type/route_master","type/route"]},"category-utility":{icon:"iD-category-utility",geometry:"line",name:"Utility Features",members:["power/line","power/minor_line","man_made/pipeline","power/cable/underground"]},"category-water-area":{icon:"maki-water",geometry:"area",name:"Water Features",members:["natural/water/lake","natural/water/pond","natural/water/reservoir","natural/water"]},"category-water-line":{icon:"iD-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:["yes","permissive","private","customers","permit","no"]},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 allowed by law; a right of way"},no:{title:"Prohibited",description:"Access not allowed to the general public"},permissive:{title:"Permissive",description:"Access allowed until such time as the owner revokes the permission"},"private":{title:"Private",description:"Access allowed only with permission of the owner on an individual basis"},designated:{title:"Designated",description:"Access allowed according to signs or specific local laws"},destination:{title:"Destination",description:"Access allowed only to reach a destination"},dismount:{title:"Dismount",description:"Access allowed but rider must dismount"},permit:{title:"Permit",description:"Access allowed only with a valid permit or license"}}}},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","addr:unit"],reference:{key:"addr"},icon:"address",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",unit:"Unit"}}},admin_level:{key:"admin_level",type:"number",minValue:1,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",minValue:0,label:"Capacity (per hour)",placeholder:"500, 2500, 5000..."},"aerialway/duration":{key:"aerialway:duration",type:"number",minValue:0,label:"Duration (minutes)",placeholder:"1, 2, 3..."},"aerialway/heating":{key:"aerialway:heating",type:"check",label:"Heated"},"aerialway/occupancy":{key:"aerialway:occupancy",type:"number",minValue:0,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"},agrarian:{key:"agrarian",type:"semiCombo",label:"Products"},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"},architect:{key:"architect",type:"text",label:"Architect"},"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"},attraction:{key:"attraction",type:"typeCombo",label:"Type"},backrest:{key:"backrest",type:"check",label:"Backrest"},barrier:{key:"barrier",type:"typeCombo",label:"Type"},basin:{key:"basin",type:"combo",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:"Beauty Specialty"},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"},booth:{key:"booth",type:"combo",label:"Booth",caseSensitive:true},boules:{key:"boules",type:"typeCombo",label:"Type"},boundary:{key:"boundary",type:"combo",label:"Type"},brand:{key:"brand",type:"text",label:"Brand"},brewery:{key:"brewery",type:"semiCombo",label:"Draft Beers"},bridge:{key:"bridge",type:"typeCombo",label:"Type",placeholder:"Default"},"bridge/support":{key:"bridge:support",type:"combo",label:"Type"},building_area:{key:"building",type:"combo","default":"yes",geometry:"area",label:"Building"},building:{key:"building",type:"combo",label:"Building"},"building/material":{key:"building:material",type:"combo",label:"Material"},bunker_type:{key:"bunker_type",type:"combo",label:"Type"},cables:{key:"cables",type:"number",minValue:1,label:"Cables",placeholder:"1, 2, 3..."},"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",minValue:0,label:"Capacity",placeholder:"50, 100, 200..."},cash_in:{key:"cash_in",type:"check",label:"Cash In"},castle_type:{key:"castle_type",type:"combo",label:"Type"},check_date:{key:"check_date",type:"text",label:"Last Checked Date"},clothes:{key:"clothes",type:"semiCombo",label:"Clothes"},club:{key:"club",type:"typeCombo",label:"Type"},collection_times:{key:"collection_times",type:"text",label:"Collection Times"},colour:{key:"colour",type:"text",label:"Color"},comment:{key:"comment",type:"textarea",label:"Changeset Comment",placeholder:"Brief description of your contributions (required)"},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:"Content",options:["silage","water","oil","fuel","slurry","gas","manure","sewage"]},conveying:{key:"conveying",type:"typeCombo",label:"Movement Direction",strings:{options:{forward:"Forward",backward:"Backward",reversible:"Reversible"}}},country:{key:"country",type:"combo",label:"Country"},couplings:{key:"couplings",type:"number",minValue:1,label:"Couplings",placeholder:"1, 2, 3..."},covered:{key:"covered",type:"check",label:"Covered"},craft:{key:"craft",type:"typeCombo",label:"Type"},"crane/type":{key:"crane:type",type:"combo",label:"Crane Type",strings:{options:{portal_crane:"Portal Crane","floor-mounted_crane":"Floor-mounted Crane",travel_lift:"Travel Lift"}}},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"},cutting:{key:"cutting",type:"typeCombo",label:"Type",placeholder:"Default"},cycle_network:{key:"cycle_network",type:"networkCombo",label:"Network"},cycleway:{keys:["cycleway","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"}}}},"dance/style":{key:"dance:style",type:"semiCombo",label:"Dance Styles"},date:{key:"date",type:"check",label:"Date"},delivery:{key:"delivery",type:"check",label:"Delivery"},denomination:{key:"denomination",type:"combo",label:"Denomination",prerequisiteTag:{key:"religion"}},denotation:{key:"denotation",type:"combo",label:"Denotation"},description:{key:"description",type:"textarea",label:"Description",universal:true},design:{key:"design",type:"combo",label:"Design"},destination_oneway:{key:"destination",type:"semiCombo",label:"Destinations",prerequisiteTag:{key:"oneway",value:"yes"}},"destination/ref_oneway":{key:"destination:ref",type:"semiCombo",label:"Destination Road Numbers",prerequisiteTag:{key:"oneway",value:"yes"}},"destination/symbol_oneway":{key:"destination:symbol",type:"semiCombo",label:"Destination Symbols",prerequisiteTag:{key:"oneway",value:"yes"}},devices:{key:"devices",type:"number",minValue:0,label:"Devices",placeholder:"1, 2, 3..."},diaper:{key:"diaper",type:"combo",label:"Diaper Changing Available",options:["yes","no","room","1","2","3","4","5"]},diet_multi:{key:"diet:",type:"multiCombo",label:"Diet Types"},direction_cardinal:{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"}}},direction_clock:{key:"direction",type:"combo",label:"Direction",strings:{options:{clockwise:"Clockwise",anticlockwise:"Counterclockwise"}}},direction_vertex:{key:"direction",type:"combo",label:"Direction",strings:{options:{forward:"Forward",backward:"Backward",both:"Both / All"}}},direction:{key:"direction",type:"number",label:"Direction (Degrees Clockwise)",placeholder:"45, 90, 180, 270"},dispensing:{key:"dispensing",type:"check",label:"Dispenses Prescriptions","default":"yes"},display:{key:"display",type:"combo",label:"Display",options:["analog","digital","sundial","unorthodox"]},distance:{key:"distance",type:"text",label:"Distance"},dock:{key:"dock",type:"combo",label:"Type"},dog:{key:"dog",type:"combo",label:"Dogs",strings:{options:{yes:"Allowed",leashed:"Leashed Only",no:"Not Allowed"}}},drive_through:{key:"drive_through",type:"check",label:"Drive-Through"},duration:{key:"duration",type:"text",label:"Duration",placeholder:"00:00"},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",label:"Email"},embankment:{key:"embankment",type:"typeCombo",label:"Type",placeholder:"Default"},emergency:{key:"emergency",type:"check",label:"Emergency"},enforcement:{key:"enforcement",type:"combo",label:"Type"},entrance:{key:"entrance",type:"typeCombo",label:"Type"},except:{key:"except",type:"combo",label:"Exceptions"},faces:{key:"faces",type:"number",minValue:0,label:"Faces"},fax:{key:"fax",type:"tel",label:"Fax",placeholder:"+31 42 123 4567"},fee:{key:"fee",type:"check",label:"Fee"},fence_type:{key:"fence_type",type:"combo",label:"Type"},"fire_hydrant/diameter":{key:"fire_hydrant:diameter",type:"combo",label:"Diameter (mm, in, or letters)",snake_case:false},"fire_hydrant/pressure":{key:"fire_hydrant:pressure",type:"combo",label:"Pressure (bar)",snake_case:false},"fire_hydrant/type":{key:"fire_hydrant:type",type:"combo",label:"Shape",strings:{options:{pillar:"Pillar/Aboveground",underground:"Underground",wall:"Wall",pipe:"Capped Pipe"}}},fireplace:{key:"fireplace",type:"check",label:"Fireplace"},fitness_station:{key:"fitness_station",type:"typeCombo",label:"Equipment Type"},fixme:{key:"fixme",type:"textarea",label:"Fix Me",universal:true},"flag/type":{key:"flag:type",type:"combo",label:"Flag Type"},ford:{key:"ford",type:"typeCombo",label:"Type",placeholder:"Default"},frequency_electrified:{key:"frequency",type:"combo",label:"Operating Frequency",prerequisiteTag:{key:"electrified",valueNot:"no"}},frequency:{key:"frequency",type:"combo",label:"Operating Frequency"},from:{key:"from",type:"text",label:"From"},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/output/electricity":{key:"generator:output:electricity",type:"typeCombo",label:"Power Output",placeholder:"50 MW, 100 MW, 200 MW...",snake_case:false},"generator/source":{key:"generator:source",type:"combo",label:"Source"},"generator/type":{key:"generator:type",type:"combo",label:"Type"},government:{key:"government",type:"typeCombo",label:"Type"},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"},hashtags:{key:"hashtags",type:"semiCombo",label:"Suggested Hashtags",placeholder:"#example"},healthcare:{key:"healthcare",type:"typeCombo",label:"Type"},"healthcare/speciality":{key:"healthcare:speciality",type:"semiCombo",reference:{key:"healthcare"},label:"Specialties"},height:{key:"height",minValue:0,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"},"historic/wreck/date_sunk":{key:"wreck:date_sunk",type:"text",label:"Date Sunk"},"historic/wreck/visible_at_high_tide":{key:"wreck:visible_at_high_tide",type:"check",label:"Visible At High Tide"},"historic/wreck/visible_at_low_tide":{key:"wreck:visible_at_low_tide",type:"check",label:"Visible At Low Tide"},hoops:{key:"hoops",type:"number",minValue:0,label:"Hoops",placeholder:"1, 2, 4..."},horse_dressage:{key:"sport",type:"check",label:"Dressage Riding",strings:{options:{"undefined":"No",equestrian:"Yes"}},reference:{key:"sport",value:"equestrian"}},horse_riding:{key:"leisure",type:"check",label:"Horseback Riding",strings:{options:{"undefined":"No",horse_riding:"Yes"}},reference:{key:"leisure",value:"horse_riding"}},horse_scale:{key:"horse_scale",type:"combo",label:"Horseback Riding Difficulty",placeholder:"Difficult, Dangerous...",strings:{options:{common:"Easy: No problems or difficulties. (default)",demanding:"Use with caution: Uneven way, occasional difficult passages.",difficult:"Difficult: Way narrow and exposed. May contain obstacles to step over and narrow passages.",critical:"Borderline: Passable only for experienced riders and horses. Major obstacles. Bridges should be examined carefully.",dangerous:"Dangerous: Passable only for very experienced riders and horses and only in good weather. Dismount.",impossible:"Impassable: Way or bridge not passable for horses. Too narrow, insuffient support, obstacles like ladders. Danger of life."}}},horse_stables:{key:"amenity",type:"check",label:"Riding Stable",strings:{options:{"undefined":"No",stables:"Yes"}},reference:{key:"amenity",value:"stables"}},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"},industrial:{key:"industrial",type:"combo",label:"Type"},information:{key:"information",type:"typeCombo",label:"Type"},inscription:{key:"inscription",type:"textarea",label:"Inscription"},intermittent_yes:{key:"intermittent",type:"check",label:"Intermittent","default":"yes"},intermittent:{key:"intermittent",type:"check",label:"Intermittent"},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",prerequisiteTag:{key:"internet_access",valueNot:"no"}},"internet_access/ssid":{key:"internet_access:ssid",type:"text",label:"SSID (Network Name)",prerequisiteTag:{key:"internet_access",valueNot:"no"}},"junction/ref_oneway":{key:"junction:ref",type:"text",label:"Junction Number",prerequisiteTag:{key:"oneway",value:"yes"}},kerb:{key:"kerb",type:"combo",label:"Curb"},label:{key:"label",type:"textarea",label:"Label"},lamp_type:{key:"lamp_type",type:"combo",label:"Type"},landuse:{key:"landuse",type:"typeCombo",label:"Type"},lanes:{key:"lanes",type:"number",minValue:0,label:"Lanes",placeholder:"1, 2, 3..."},language_multi:{key:"language:",type:"multiCombo",label:"Languages"},layer:{key:"layer",type:"number",label:"Layer",placeholder:"0"},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",minValue:0,label:"Length (Meters)"},level:{key:"level",type:"combo",label:"Level",universal:true},levels:{key:"building:levels",type:"number",minValue:0,label:"Levels",placeholder:"2, 4, 6..."},lit:{key:"lit",type:"check",label:"Lit"},location_pool:{key:"location",type:"typeCombo",label:"Location",strings:{options:{outdoor:"Outdoor",indoor:"Indoor",roof:"Rooftop"}}},location:{key:"location",type:"combo",label:"Location"},man_made:{key:"man_made",type:"typeCombo",label:"Type"},manhole:{key:"manhole",type:"typeCombo",label:"Type"},map_size:{key:"map_size",type:"typeCombo",label:"Coverage"},map_type:{key:"map_type",type:"typeCombo",label:"Type"},material:{key:"material",type:"combo",label:"Material"},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..."},"maxspeed/advisory":{key:"maxspeed:advisory",type:"maxspeed",label:"Advisory 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},memorial:{key:"memorial",type:"typeCombo",label:"Type"},minspeed:{key:"minspeed",type:"maxspeed",label:"Minimum Speed Limit",placeholder:"20, 30, 40..."},monitoring_multi:{key:"monitoring:",type:"multiCombo",label:"Monitoring"},"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",universal:true,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",reversible:"Reversible",alternating:"Alternating"}}},oneway:{key:"oneway",type:"onewayCheck",label:"One Way",strings:{options:{"undefined":"Assumed to be No",yes:"Yes",no:"No",reversible:"Reversible",alternating:"Alternating"}}},"oneway/bicycle":{key:"oneway:bicycle",type:"check",label:"One Way (Bicycles)",prerequisiteTag:{key:"oneway"}},opening_date:{key:"opening_date",type:"text",label:"Expected Opening Date"},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",minValue:1,label:"Par",placeholder:"3, 4, 5..."},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"}}},passenger_information_display:{key:"passenger_information_display",type:"check",label:"Passenger information display"},payment_multi:{key:"payment:",type:"multiCombo",label:"Payment Types"},phases:{key:"phases",type:"number",minValue:1,label:"Phases",placeholder:"1, 2, 3..."},phone:{key:"phone",type:"tel",icon:"maki-telephone",label:"Telephone",placeholder:"+31 42 123 4567"},"piste/difficulty_downhill":{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/difficulty_nordic":{key:"piste:difficulty",type:"combo",label:"Difficulty",placeholder:"Easy, Intermediate, Advanced...",strings:{options:{novice:"Novice - Flat, no effort needed",easy:"Easy - Soft hills, short steep section",intermediate:"Intermediate - Steep section",advanced:"Advanced - Narrow, steep or icy section, sharp turn",expert:"Expert - Dangerous terrain around"}}},"piste/difficulty_skitour":{key:"piste:difficulty",type:"combo",label:"Difficulty",placeholder:"Easy, Intermediate, Advanced...",strings:{options:{novice:"Novice - L: <30° incline",easy:"Easy - WS: 30-35° incline",intermediate:"Intermediate - ZS: 35-40° incline",advanced:"Advanced - S: 40-45° incline",expert:"Expert - SS: 45–50° incline",freeride:"Freeride - AS: 50–55° incline",extreme:"Extreme - EX: >55° incline"}}},"piste/difficulty":{key:"piste:difficulty",type:"combo",label:"Difficulty",placeholder:"Easy, Intermediate, Advanced...",strings:{options:{novice:"Novice",easy:"Easy",intermediate:"Intermediate",advanced:"Advanced",expert:"Expert",freeride:"Freeride",extreme:"Extreme"}}},"piste/grooming_downhill":{key:"piste:grooming",type:"combo",label:"Grooming",strings:{options:{classic:"Classic",mogul:"Mogul",backcountry:"Backcountry - no grooming"}}},"piste/grooming_hike":{key:"piste:grooming",type:"combo",label:"Grooming",strings:{options:{classic:"Classic - Winter Hiking",backcountry:"Backcountry - Snowshoeing"}}},"piste/grooming_nordic":{key:"piste:grooming",type:"combo",label:"Grooming",strings:{options:{classic:"Classic",backcountry:"Backcountry, no grooming","classic+skating":"Classic and Skating",scooter:"Scooter/Snowmobile",skating:"Skating"}}},"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",connection:"Connection"}}},place:{key:"place",type:"typeCombo",label:"Type"},plant:{key:"plant",type:"combo",label:"Plant"},"plant/output/electricity":{key:"plant:output:electricity",type:"text",label:"Power Output",placeholder:"500 MW, 1000 MW, 2000 MW..."},"playground/baby":{key:"baby",type:"check",label:"Baby Seat"},"playground/max_age":{key:"max_age",type:"number",minValue:0,label:"Maximum Age"},"playground/min_age":{key:"min_age",type:"number",minValue:0,label:"Minimum Age"},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"},"railway/position":{key:"railway:position",type:"text",placeholder:"Distance to one decimal (123.4)",label:"Milestone Position"},"railway/signal/direction":{key:"railway:signal:direction",type:"combo",label:"Direction",strings:{options:{forward:"Forward",backward:"Backward",both:"Both / All"}}},rating:{key:"rating",type:"combo",label:"Power Rating",snake_case:false},recycling_accepts:{key:"recycling:",type:"multiCombo",label:"Accepts"},recycling_type:{key:"recycling_type",type:"combo",label:"Type",placeholder:"Container, Center",strings:{options:{container:"Container",centre:"Center"}}},ref_aeroway_gate:{key:"ref",type:"text",label:"Gate Number"},ref_golf_hole:{key:"ref",type:"text",label:"Hole Number",placeholder:"1-18"},ref_highway_junction:{key:"ref",type:"text",label:"Junction Number"},ref_platform:{key:"ref",type:"text",label:"Platform Number"},ref_road_number:{key:"ref",type:"text",label:"Road Number"},ref_route:{key:"ref",type:"text",label:"Route Number"},ref_runway:{key:"ref",type:"text",label:"Runway Number",placeholder:"e.g. 01L/19R"},ref_stop_position:{key:"ref",type:"text",label:"Stop Number"},ref_taxiway:{key:"ref",type:"text",label:"Taxiway Name",placeholder:"e.g. A5"},ref:{key:"ref",type:"text",label:"Reference Code"},"ref/isil":{key:"ref:isil",type:"text",label:"ISIL Code"},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:"iD-restrictions",reference:{rtype:"restriction"},label:"Turn Restrictions"},"roof/colour":{key:"roof:colour",type:"combo",label:"Roof Color"},rooms:{key:"rooms",type:"number",minValue:0,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"},scuba_diving:{key:"scuba_diving:",type:"multiCombo",label:"Services",options:["repair","courses","rental","filling","air_filling","nitrox_filling","trimix_filling","oxygen_filling"]},"seamark/beacon_isolated_danger/shape":{key:"seamark:beacon_isolated_danger:shape",type:"combo",label:"Shape"},"seamark/beacon_lateral/category":{key:"seamark:beacon_lateral:category",type:"combo",label:"Category",strings:{options:{port:"Port",starboard:"Starboard",waterway_left:"Waterway Left",waterway_right:"Waterway Right",danger_left:"Danger Left",danger_right:"Danger Right"}}},"seamark/beacon_lateral/colour":{key:"seamark:beacon_lateral:colour",type:"combo",label:"Color",strings:{options:{red:"Red",green:"Green",grey:"Grey"}}},"seamark/beacon_lateral/shape":{key:"seamark:beacon_lateral:shape",type:"combo",label:"Shape"},"seamark/beacon_lateral/system":{key:"seamark:beacon_lateral:system",type:"combo",label:"System",strings:{options:{"iala-a":"IALA A","iala-b":"IALA B",cevni:"CEVNI",other:"Other"}}},"seamark/buoy_lateral/category":{key:"seamark:buoy_lateral:category",type:"combo",label:"Category",strings:{options:{port:"Port",starboard:"Starboard",channel_left:"Channel Left",channel_right:"Channel Right",waterway_left:"Waterway Left",waterway_right:"Waterway Right",danger_left:"Danger Left",danger_right:"Danger Right",preferred_channel_port:"Preferred Channel Port",preferred_channel_starboard:"Preferred Channel Starboard"}}},"seamark/buoy_lateral/colour":{key:"seamark:buoy_lateral:colour",type:"combo",label:"Color",strings:{options:{red:"Red",green:"Green","red;white;red;white":"Red-White-Red-White","green;white;green;white":"Green-White-Green-White","red;green;red":"Red-Green-Red","green;red;green":"Green-Red-Green",white:"White",yellow:"Yellow"}}},"seamark/buoy_lateral/shape":{key:"seamark:buoy_lateral:shape",type:"combo",label:"Shape"},"seamark/buoy_lateral/system":{key:"seamark:buoy_lateral:system",type:"combo",label:"System",strings:{options:{"iala-a":"IALA A","iala-b":"IALA B",cevni:"CEVNI",other:"Other"}}},"seamark/mooring/category":{key:"seamark:mooring:category",type:"combo",label:"Category"},"seamark/type":{key:"seamark:type",type:"combo",label:"Seamark"},"seamark/wreck/category":{key:"seamark:wreck:category",type:"combo",label:"Category"},seasonal:{key:"seasonal",type:"check",label:"Seasonal"},seats:{key:"seats",type:"number",minValue:0,label:"Seats",placeholder:"2, 4, 6..."},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"},"siren/purpose":{key:"siren:purpose",type:"combo",label:"Purpose"},"siren/type":{key:"siren:type",type:"combo",label:"Type",strings:{options:{pneumatic:"Pneumatic",electronic:"Electronic",other:"Other"}}},site_type:{key:"site_type",type:"combo",label:"Site 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:"semiCombo",icon:"source",universal:true,label:"Sources",snake_case:false,caseSensitive:true,options:["survey","local knowledge","gps","aerial imagery","streetlevel imagery"]},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:"combo",label:"Stars"},start_date:{key:"start_date",type:"text",universal:true,label:"Start Date"},step_count:{key:"step_count",type:"number",minValue:0,label:"Number of Steps"},stop:{key:"stop",type:"combo",label:"Stop Type",strings:{options:{all:"All Ways",minor:"Minor Road"}}},structure_waterway:{type:"structureRadio",keys:["tunnel"],label:"Structure",placeholder:"Unknown",strings:{options:{tunnel:"Tunnel"}}},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"},substance:{key:"substance",type:"combo",label:"Substance"},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"},"survey/date":{key:"survey:date",type:"text",label:"Last Survey Date"},swimming_pool:{key:"swimming_pool",type:"combo",label:"Type"},"switch":{key:"switch",type:"combo",label:"Type",strings:{options:{mechanical:"Mechanical",circuit_breaker:"Circuit Breaker",disconnector:"Disconnector",earthing:"Earthing"}}},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"}}},to:{key:"to",type:"text",label:"To"},"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"}}},trade:{key:"trade",type:"typeCombo",label:"Type"},traffic_calming:{key:"traffic_calming",type:"typeCombo",label:"Type"},traffic_sign:{key:"traffic_sign",type:"typeCombo",label:"Traffic Sign"},"traffic_sign/direction":{key:"traffic_sign:direction",type:"combo",label:"Direction",strings:{options:{forward:"Forward",backward:"Backward",both:"Both / All"}}},traffic_signals:{key:"traffic_signals",type:"combo",label:"Type","default":"signal"},"traffic_signals/direction":{key:"traffic_signals:direction",type:"combo",label:"Direction",strings:{options:{forward:"Forward",backward:"Backward",both:"Both / All"}}},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"}}},transformer:{key:"transformer",type:"combo",label:"Type",strings:{options:{distribution:"Distribution",generator:"Generator",converter:"Converter",traction:"Traction",auto:"Autotransformer",phase_angle_regulator:"Phase Angle Regulator",auxiliary:"Auxiliary",yes:"Unknown"}}},trees:{key:"trees",type:"semiCombo",label:"Trees"},tunnel:{key:"tunnel",type:"typeCombo",label:"Type",placeholder:"Default"},usage_rail:{key:"usage",type:"combo",label:"Usage Type",strings:{options:{main:"Main",branch:"Branch",industrial:"Industrial",military:"Military",test:"Test",tourism:"Tourism"}}},vending:{key:"vending",type:"semiCombo",label:"Types 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)"}}},"volcano/status":{key:"volcano:status",type:"combo",label:"Volcano Status",strings:{options:{active:"Active",dormant:"Dormant",extinct:"Extinct"}}},"volcano/type":{key:"volcano:type",type:"combo",label:"Volcano Type",strings:{options:{stratovolcano:"Stratovolcano",shield:"Shield",scoria:"Scoria"}}},voltage_electrified:{key:"voltage",type:"combo",label:"Voltage",prerequisiteTag:{key:"electrified",valueNot:"no"}},voltage:{key:"voltage",type:"combo",label:"Voltage"},"voltage/primary":{key:"voltage:primary",type:"combo",label:"Primary Voltage"},"voltage/secondary":{key:"voltage:secondary",type:"combo",label:"Secondary Voltage"},"voltage/tertiary":{key:"voltage:tertiary",type:"combo",label:"Tertiary Voltage"},wall:{key:"wall",type:"combo",label:"Type"},water_point:{key:"water_point",type:"check",label:"Water Point"},water_source:{key:"water_source","default":"main",type:"combo",label:"Water Source"},water_volume:{key:"water_volume",type:"number",label:"Water Reserve Volume (m³)",snake_case:false},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/",label:"Website"},wetland:{key:"wetland",type:"combo",label:"Type"},wheelchair:{key:"wheelchair",type:"radio",options:["yes","limited","no"],icon:"maki-wheelchair",label:"Wheelchair Access"},wholesale:{key:"wholesale",type:"typeCombo",label:"Wholesale"},width:{key:"width",type:"number",minValue:0,label:"Width (Meters)"},wikidata:{key:"wikidata",type:"wikidata",icon:"wikipedia",universal:true,label:"Wikidata"},wikipedia:{key:"wikipedia",keys:["wikipedia","wikidata"],type:"wikipedia",icon:"wikipedia",universal:true,label:"Wikipedia"},windings:{key:"windings",type:"number",minValue:1,label:"Windings",placeholder:"1, 2, 3..."},"windings/configuration":{key:"windings:configuration",type:"combo",label:"Windings Configuration",strings:{options:{star:"Star / Wye",delta:"Delta","open-delta":"Open Delta",zigzag:"Zig Zag",open:"Open",scott:"Scott",leblanc:"Leblanc"}}}};
+  var fields = {access_simple:{key:"access",type:"combo",label:"Allowed Access",options:["yes","permissive","private","customers","permit","no"]},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 allowed by law; a right of way"},no:{title:"Prohibited",description:"Access not allowed to the general public"},permissive:{title:"Permissive",description:"Access allowed until such time as the owner revokes the permission"},"private":{title:"Private",description:"Access allowed only with permission of the owner on an individual basis"},designated:{title:"Designated",description:"Access allowed according to signs or specific local laws"},destination:{title:"Destination",description:"Access allowed only to reach a destination"},dismount:{title:"Dismount",description:"Access allowed but rider must dismount"},permit:{title:"Permit",description:"Access allowed only with a valid permit or license"}}}},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","addr:unit"],reference:{key:"addr"},icon:"address",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",unit:"Unit"}}},admin_level:{key:"admin_level",type:"number",minValue:1,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",minValue:0,label:"Capacity (per hour)",placeholder:"500, 2500, 5000..."},"aerialway/duration":{key:"aerialway:duration",type:"number",minValue:0,label:"Duration (minutes)",placeholder:"1, 2, 3..."},"aerialway/heating":{key:"aerialway:heating",type:"check",label:"Heated"},"aerialway/occupancy":{key:"aerialway:occupancy",type:"number",minValue:0,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"},agrarian:{key:"agrarian",type:"semiCombo",label:"Products"},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"},architect:{key:"architect",type:"text",label:"Architect"},"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"},attraction:{key:"attraction",type:"typeCombo",label:"Type"},backrest:{key:"backrest",type:"check",label:"Backrest"},barrier:{key:"barrier",type:"typeCombo",label:"Type"},basin:{key:"basin",type:"combo",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:"Beauty Specialty"},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"},booth:{key:"booth",type:"combo",label:"Booth",caseSensitive:true},boules:{key:"boules",type:"typeCombo",label:"Type"},boundary:{key:"boundary",type:"combo",label:"Type"},brand:{key:"brand",type:"text",label:"Brand"},brewery:{key:"brewery",type:"semiCombo",label:"Draft Beers"},bridge:{key:"bridge",type:"typeCombo",label:"Type",placeholder:"Default"},"bridge/support":{key:"bridge:support",type:"combo",label:"Type"},building_area:{key:"building",type:"combo","default":"yes",geometry:"area",label:"Building"},building:{key:"building",type:"combo",label:"Building"},"building/material":{key:"building:material",type:"combo",label:"Material"},bunker_type:{key:"bunker_type",type:"combo",label:"Type"},cables:{key:"cables",type:"number",minValue:1,label:"Cables",placeholder:"1, 2, 3..."},"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",minValue:0,label:"Capacity",placeholder:"50, 100, 200..."},cash_in:{key:"cash_in",type:"check",label:"Cash In"},castle_type:{key:"castle_type",type:"combo",label:"Type"},check_date:{key:"check_date",type:"text",label:"Last Checked Date"},clothes:{key:"clothes",type:"semiCombo",label:"Clothes"},club:{key:"club",type:"typeCombo",label:"Type"},collection_times:{key:"collection_times",type:"text",label:"Collection Times"},colour:{key:"colour",type:"text",label:"Color"},comment:{key:"comment",type:"textarea",label:"Changeset Comment",placeholder:"Brief description of your contributions (required)"},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:"Content",options:["silage","water","oil","fuel","slurry","gas","manure","sewage"]},conveying:{key:"conveying",type:"typeCombo",label:"Movement Direction",strings:{options:{forward:"Forward",backward:"Backward",reversible:"Reversible"}}},country:{key:"country",type:"combo",label:"Country"},couplings:{key:"couplings",type:"number",minValue:1,label:"Couplings",placeholder:"1, 2, 3..."},covered:{key:"covered",type:"check",label:"Covered"},craft:{key:"craft",type:"typeCombo",label:"Type"},"crane/type":{key:"crane:type",type:"combo",label:"Crane Type",strings:{options:{portal_crane:"Portal Crane","floor-mounted_crane":"Floor-mounted Crane",travel_lift:"Travel Lift"}}},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"},cutting:{key:"cutting",type:"typeCombo",label:"Type",placeholder:"Default"},cycle_network:{key:"cycle_network",type:"networkCombo",label:"Network"},cycleway:{keys:["cycleway","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"}}}},"dance/style":{key:"dance:style",type:"semiCombo",label:"Dance Styles"},date:{key:"date",type:"check",label:"Date"},delivery:{key:"delivery",type:"check",label:"Delivery"},denomination:{key:"denomination",type:"combo",label:"Denomination",prerequisiteTag:{key:"religion"}},denotation:{key:"denotation",type:"combo",label:"Denotation"},departures_board:{key:"departures_board",type:"combo",label:"Departures Board",strings:{options:{yes:"Yes",timetable:"Timetable",realtime:"Realtime",no:"None"}}},description:{key:"description",type:"textarea",label:"Description",universal:true},design:{key:"design",type:"combo",label:"Design"},destination_oneway:{key:"destination",type:"semiCombo",label:"Destinations",prerequisiteTag:{key:"oneway",value:"yes"},snake_case:false},"destination/ref_oneway":{key:"destination:ref",type:"semiCombo",label:"Destination Road Numbers",prerequisiteTag:{key:"oneway",value:"yes"},snake_case:false},"destination/symbol_oneway":{key:"destination:symbol",type:"semiCombo",label:"Destination Symbols",prerequisiteTag:{key:"oneway",value:"yes"}},devices:{key:"devices",type:"number",minValue:0,label:"Devices",placeholder:"1, 2, 3..."},diaper:{key:"diaper",type:"combo",label:"Diaper Changing Available",options:["yes","no","room","1","2","3","4","5"]},diet_multi:{key:"diet:",type:"multiCombo",label:"Diet Types"},direction_cardinal:{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"}}},direction_clock:{key:"direction",type:"combo",label:"Direction",strings:{options:{clockwise:"Clockwise",anticlockwise:"Counterclockwise"}}},direction_vertex:{key:"direction",type:"combo",label:"Direction",strings:{options:{forward:"Forward",backward:"Backward",both:"Both / All"}}},direction:{key:"direction",type:"number",label:"Direction (Degrees Clockwise)",placeholder:"45, 90, 180, 270"},dispensing:{key:"dispensing",type:"check",label:"Dispenses Prescriptions","default":"yes"},display:{key:"display",type:"combo",label:"Display",options:["analog","digital","sundial","unorthodox"]},distance:{key:"distance",type:"text",label:"Distance"},dock:{key:"dock",type:"combo",label:"Type"},dog:{key:"dog",type:"combo",label:"Dogs",strings:{options:{yes:"Allowed",leashed:"Leashed Only",no:"Not Allowed"}}},drive_through:{key:"drive_through",type:"check",label:"Drive-Through"},duration:{key:"duration",type:"text",label:"Duration",placeholder:"00:00"},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",label:"Email"},embankment:{key:"embankment",type:"typeCombo",label:"Type",placeholder:"Default"},emergency:{key:"emergency",type:"check",label:"Emergency"},enforcement:{key:"enforcement",type:"combo",label:"Type"},entrance:{key:"entrance",type:"typeCombo",label:"Type"},except:{key:"except",type:"combo",label:"Exceptions"},faces:{key:"faces",type:"number",minValue:0,label:"Faces"},fax:{key:"fax",type:"tel",label:"Fax",placeholder:"+31 42 123 4567"},fee:{key:"fee",type:"check",label:"Fee"},fence_type:{key:"fence_type",type:"combo",label:"Type"},"fire_hydrant/diameter":{key:"fire_hydrant:diameter",type:"combo",label:"Diameter (mm, in, or letters)",snake_case:false},"fire_hydrant/pressure":{key:"fire_hydrant:pressure",type:"combo",label:"Pressure (bar)",snake_case:false},"fire_hydrant/type":{key:"fire_hydrant:type",type:"combo",label:"Shape",strings:{options:{pillar:"Pillar/Aboveground",underground:"Underground",wall:"Wall",pipe:"Capped Pipe"}}},fireplace:{key:"fireplace",type:"check",label:"Fireplace"},fitness_station:{key:"fitness_station",type:"typeCombo",label:"Equipment Type"},fixme:{key:"fixme",type:"textarea",label:"Fix Me",universal:true},"flag/type":{key:"flag:type",type:"combo",label:"Flag Type"},ford:{key:"ford",type:"typeCombo",label:"Type",placeholder:"Default"},frequency_electrified:{key:"frequency",type:"combo",label:"Operating Frequency",prerequisiteTag:{key:"electrified",valueNot:"no"}},frequency:{key:"frequency",type:"combo",label:"Operating Frequency"},from:{key:"from",type:"text",label:"From"},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/output/electricity":{key:"generator:output:electricity",type:"typeCombo",label:"Power Output",placeholder:"50 MW, 100 MW, 200 MW...",snake_case:false},"generator/source":{key:"generator:source",type:"combo",label:"Source"},"generator/type":{key:"generator:type",type:"combo",label:"Type"},government:{key:"government",type:"typeCombo",label:"Type"},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"},hashtags:{key:"hashtags",type:"semiCombo",label:"Suggested Hashtags",placeholder:"#example"},healthcare:{key:"healthcare",type:"typeCombo",label:"Type"},"healthcare/speciality":{key:"healthcare:speciality",type:"semiCombo",reference:{key:"healthcare"},label:"Specialties"},height:{key:"height",minValue:0,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"},"historic/wreck/date_sunk":{key:"wreck:date_sunk",type:"text",label:"Date Sunk"},"historic/wreck/visible_at_high_tide":{key:"wreck:visible_at_high_tide",type:"check",label:"Visible At High Tide"},"historic/wreck/visible_at_low_tide":{key:"wreck:visible_at_low_tide",type:"check",label:"Visible At Low Tide"},hoops:{key:"hoops",type:"number",minValue:0,label:"Hoops",placeholder:"1, 2, 4..."},horse_dressage:{key:"sport",type:"check",label:"Dressage Riding",strings:{options:{"undefined":"No",equestrian:"Yes"}},reference:{key:"sport",value:"equestrian"}},horse_riding:{key:"leisure",type:"check",label:"Horseback Riding",strings:{options:{"undefined":"No",horse_riding:"Yes"}},reference:{key:"leisure",value:"horse_riding"}},horse_scale:{key:"horse_scale",type:"combo",label:"Horseback Riding Difficulty",placeholder:"Difficult, Dangerous...",strings:{options:{common:"Easy: No problems or difficulties. (default)",demanding:"Use with caution: Uneven way, occasional difficult passages.",difficult:"Difficult: Way narrow and exposed. May contain obstacles to step over and narrow passages.",critical:"Borderline: Passable only for experienced riders and horses. Major obstacles. Bridges should be examined carefully.",dangerous:"Dangerous: Passable only for very experienced riders and horses and only in good weather. Dismount.",impossible:"Impassable: Way or bridge not passable for horses. Too narrow, insuffient support, obstacles like ladders. Danger of life."}}},horse_stables:{key:"amenity",type:"check",label:"Riding Stable",strings:{options:{"undefined":"No",stables:"Yes"}},reference:{key:"amenity",value:"stables"}},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"},industrial:{key:"industrial",type:"combo",label:"Type"},information:{key:"information",type:"typeCombo",label:"Type"},inscription:{key:"inscription",type:"textarea",label:"Inscription"},intermittent_yes:{key:"intermittent",type:"check",label:"Intermittent","default":"yes"},intermittent:{key:"intermittent",type:"check",label:"Intermittent"},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",prerequisiteTag:{key:"internet_access",valueNot:"no"}},"internet_access/ssid":{key:"internet_access:ssid",type:"text",label:"SSID (Network Name)",prerequisiteTag:{key:"internet_access",valueNot:"no"}},junction_line:{key:"junction",type:"combo",label:"Junction",strings:{options:{roundabout:"Roundabout",circular:"Traffic Circle",jughandle:"Jughandle"}}},"junction/ref_oneway":{key:"junction:ref",type:"text",label:"Junction Number",prerequisiteTag:{key:"oneway",value:"yes"}},kerb:{key:"kerb",type:"combo",label:"Curb"},label:{key:"label",type:"textarea",label:"Label"},lamp_type:{key:"lamp_type",type:"combo",label:"Type"},landuse:{key:"landuse",type:"typeCombo",label:"Type"},lanes:{key:"lanes",type:"number",minValue:0,label:"Lanes",placeholder:"1, 2, 3..."},language_multi:{key:"language:",type:"multiCombo",label:"Languages"},layer:{key:"layer",type:"number",label:"Layer",placeholder:"0"},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",minValue:0,label:"Length (Meters)"},level:{key:"level",type:"combo",label:"Level",universal:true},levels:{key:"building:levels",type:"number",minValue:0,label:"Levels",placeholder:"2, 4, 6..."},lit:{key:"lit",type:"check",label:"Lit"},location_pool:{key:"location",type:"typeCombo",label:"Location",strings:{options:{outdoor:"Outdoor",indoor:"Indoor",roof:"Rooftop"}}},location:{key:"location",type:"combo",label:"Location"},man_made:{key:"man_made",type:"typeCombo",label:"Type"},manhole:{key:"manhole",type:"typeCombo",label:"Type"},map_size:{key:"map_size",type:"typeCombo",label:"Coverage"},map_type:{key:"map_type",type:"typeCombo",label:"Type"},material:{key:"material",type:"combo",label:"Material"},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..."},"maxspeed/advisory":{key:"maxspeed:advisory",type:"maxspeed",label:"Advisory 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},memorial:{key:"memorial",type:"typeCombo",label:"Type"},minspeed:{key:"minspeed",type:"maxspeed",label:"Minimum Speed Limit",placeholder:"20, 30, 40..."},monitoring_multi:{key:"monitoring:",type:"multiCombo",label:"Monitoring"},"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",universal:true,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",reversible:"Reversible",alternating:"Alternating"}}},oneway:{key:"oneway",type:"onewayCheck",label:"One Way",strings:{options:{"undefined":"Assumed to be No",yes:"Yes",no:"No",reversible:"Reversible",alternating:"Alternating"}}},"oneway/bicycle":{key:"oneway:bicycle",type:"check",label:"One Way (Bicycles)",prerequisiteTag:{key:"oneway"}},opening_date:{key:"opening_date",type:"text",label:"Expected Opening Date"},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",minValue:1,label:"Par",placeholder:"3, 4, 5..."},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"},phases:{key:"phases",type:"number",minValue:1,label:"Phases",placeholder:"1, 2, 3..."},phone:{key:"phone",type:"tel",icon:"maki-telephone",label:"Telephone",placeholder:"+31 42 123 4567"},"piste/difficulty_downhill":{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/difficulty_nordic":{key:"piste:difficulty",type:"combo",label:"Difficulty",placeholder:"Easy, Intermediate, Advanced...",strings:{options:{novice:"Novice - Flat, no effort needed",easy:"Easy - Soft hills, short steep section",intermediate:"Intermediate - Steep section",advanced:"Advanced - Narrow, steep or icy section, sharp turn",expert:"Expert - Dangerous terrain around"}}},"piste/difficulty_skitour":{key:"piste:difficulty",type:"combo",label:"Difficulty",placeholder:"Easy, Intermediate, Advanced...",strings:{options:{novice:"Novice - L: <30° incline",easy:"Easy - WS: 30-35° incline",intermediate:"Intermediate - ZS: 35-40° incline",advanced:"Advanced - S: 40-45° incline",expert:"Expert - SS: 45–50° incline",freeride:"Freeride - AS: 50–55° incline",extreme:"Extreme - EX: >55° incline"}}},"piste/difficulty":{key:"piste:difficulty",type:"combo",label:"Difficulty",placeholder:"Easy, Intermediate, Advanced...",strings:{options:{novice:"Novice",easy:"Easy",intermediate:"Intermediate",advanced:"Advanced",expert:"Expert",freeride:"Freeride",extreme:"Extreme"}}},"piste/grooming_downhill":{key:"piste:grooming",type:"combo",label:"Grooming",strings:{options:{classic:"Classic",mogul:"Mogul",backcountry:"Backcountry - no grooming"}}},"piste/grooming_hike":{key:"piste:grooming",type:"combo",label:"Grooming",strings:{options:{classic:"Classic - Winter Hiking",backcountry:"Backcountry - Snowshoeing"}}},"piste/grooming_nordic":{key:"piste:grooming",type:"combo",label:"Grooming",strings:{options:{classic:"Classic",backcountry:"Backcountry, no grooming","classic+skating":"Classic and Skating",scooter:"Scooter/Snowmobile",skating:"Skating"}}},"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",connection:"Connection"}}},place:{key:"place",type:"typeCombo",label:"Type"},plant:{key:"plant",type:"combo",label:"Plant"},"plant/output/electricity":{key:"plant:output:electricity",type:"text",label:"Power Output",placeholder:"500 MW, 1000 MW, 2000 MW..."},"playground/baby":{key:"baby",type:"check",label:"Baby Seat"},"playground/max_age":{key:"max_age",type:"number",minValue:0,label:"Maximum Age"},"playground/min_age":{key:"min_age",type:"number",minValue:0,label:"Minimum Age"},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"},"railway/position":{key:"railway:position",type:"text",placeholder:"Distance to one decimal (123.4)",label:"Milestone Position"},"railway/signal/direction":{key:"railway:signal:direction",type:"combo",label:"Direction",strings:{options:{forward:"Forward",backward:"Backward",both:"Both / All"}}},rating:{key:"rating",type:"combo",label:"Power Rating",snake_case:false},recycling_accepts:{key:"recycling:",type:"multiCombo",label:"Accepts"},recycling_type:{key:"recycling_type",type:"combo",label:"Type",placeholder:"Container, Center",strings:{options:{container:"Container",centre:"Center"}}},ref_aeroway_gate:{key:"ref",type:"text",label:"Gate Number"},ref_golf_hole:{key:"ref",type:"text",label:"Hole Number",placeholder:"1-18"},ref_highway_junction:{key:"ref",type:"text",label:"Junction Number"},ref_platform:{key:"ref",type:"text",label:"Platform Number"},ref_road_number:{key:"ref",type:"text",label:"Road Number"},ref_route:{key:"ref",type:"text",label:"Route Number"},ref_runway:{key:"ref",type:"text",label:"Runway Number",placeholder:"e.g. 01L/19R"},ref_stop_position:{key:"ref",type:"text",label:"Stop Number"},ref_taxiway:{key:"ref",type:"text",label:"Taxiway Name",placeholder:"e.g. A5"},ref:{key:"ref",type:"text",label:"Reference Code"},"ref/isil":{key:"ref:isil",type:"text",label:"ISIL Code"},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:"iD-restrictions",reference:{rtype:"restriction"},label:"Turn Restrictions"},"roof/colour":{key:"roof:colour",type:"combo",label:"Roof Color"},rooms:{key:"rooms",type:"number",minValue:0,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"}}},salt:{key:"salt",type:"check",label:"Salt"},sanitary_dump_station:{key:"sanitary_dump_station",type:"check",label:"Toilet Disposal"},scuba_diving:{key:"scuba_diving:",type:"multiCombo",label:"Services",options:["repair","courses","rental","filling","air_filling","nitrox_filling","trimix_filling","oxygen_filling"]},"seamark/beacon_isolated_danger/shape":{key:"seamark:beacon_isolated_danger:shape",type:"combo",label:"Shape"},"seamark/beacon_lateral/category":{key:"seamark:beacon_lateral:category",type:"combo",label:"Category",strings:{options:{port:"Port",starboard:"Starboard",waterway_left:"Waterway Left",waterway_right:"Waterway Right",danger_left:"Danger Left",danger_right:"Danger Right"}}},"seamark/beacon_lateral/colour":{key:"seamark:beacon_lateral:colour",type:"combo",label:"Color",strings:{options:{red:"Red",green:"Green",grey:"Grey"}}},"seamark/beacon_lateral/shape":{key:"seamark:beacon_lateral:shape",type:"combo",label:"Shape"},"seamark/beacon_lateral/system":{key:"seamark:beacon_lateral:system",type:"combo",label:"System",strings:{options:{"iala-a":"IALA A","iala-b":"IALA B",cevni:"CEVNI",other:"Other"}}},"seamark/buoy_lateral/category":{key:"seamark:buoy_lateral:category",type:"combo",label:"Category",strings:{options:{port:"Port",starboard:"Starboard",channel_left:"Channel Left",channel_right:"Channel Right",waterway_left:"Waterway Left",waterway_right:"Waterway Right",danger_left:"Danger Left",danger_right:"Danger Right",preferred_channel_port:"Preferred Channel Port",preferred_channel_starboard:"Preferred Channel Starboard"}}},"seamark/buoy_lateral/colour":{key:"seamark:buoy_lateral:colour",type:"combo",label:"Color",strings:{options:{red:"Red",green:"Green","red;white;red;white":"Red-White-Red-White","green;white;green;white":"Green-White-Green-White","red;green;red":"Red-Green-Red","green;red;green":"Green-Red-Green",white:"White",yellow:"Yellow"}}},"seamark/buoy_lateral/shape":{key:"seamark:buoy_lateral:shape",type:"combo",label:"Shape"},"seamark/buoy_lateral/system":{key:"seamark:buoy_lateral:system",type:"combo",label:"System",strings:{options:{"iala-a":"IALA A","iala-b":"IALA B",cevni:"CEVNI",other:"Other"}}},"seamark/mooring/category":{key:"seamark:mooring:category",type:"combo",label:"Category"},"seamark/type":{key:"seamark:type",type:"combo",label:"Seamark"},"seamark/wreck/category":{key:"seamark:wreck:category",type:"combo",label:"Category"},seasonal:{key:"seasonal",type:"check",label:"Seasonal"},seats:{key:"seats",type:"number",minValue:0,label:"Seats",placeholder:"2, 4, 6..."},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"},"siren/purpose":{key:"siren:purpose",type:"combo",label:"Purpose"},"siren/type":{key:"siren:type",type:"combo",label:"Type",strings:{options:{pneumatic:"Pneumatic",electronic:"Electronic",other:"Other"}}},site_type:{key:"site_type",type:"combo",label:"Site 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:"semiCombo",icon:"source",universal:true,label:"Sources",snake_case:false,caseSensitive:true,options:["survey","local knowledge","gps","aerial imagery","streetlevel imagery"]},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:"combo",label:"Stars"},start_date:{key:"start_date",type:"text",universal:true,label:"Start Date"},step_count:{key:"step_count",type:"number",minValue:0,label:"Number of Steps"},stop:{key:"stop",type:"combo",label:"Stop Type",strings:{options:{all:"All Ways",minor:"Minor Road"}}},structure_waterway:{type:"structureRadio",keys:["tunnel"],label:"Structure",placeholder:"Unknown",strings:{options:{tunnel:"Tunnel"}}},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"},substance:{key:"substance",type:"combo",label:"Substance"},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"},"survey/date":{key:"survey:date",type:"text",label:"Last Survey Date"},swimming_pool:{key:"swimming_pool",type:"combo",label:"Type"},"switch":{key:"switch",type:"combo",label:"Type",strings:{options:{mechanical:"Mechanical",circuit_breaker:"Circuit Breaker",disconnector:"Disconnector",earthing:"Earthing"}}},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"}}},tidal:{key:"tidal",type:"check",label:"Tidal"},to:{key:"to",type:"text",label:"To"},"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"}}},trade:{key:"trade",type:"typeCombo",label:"Type"},traffic_calming:{key:"traffic_calming",type:"typeCombo",label:"Type"},traffic_sign:{key:"traffic_sign",type:"typeCombo",label:"Traffic Sign"},"traffic_sign/direction":{key:"traffic_sign:direction",type:"combo",label:"Direction",strings:{options:{forward:"Forward",backward:"Backward",both:"Both / All"}}},traffic_signals:{key:"traffic_signals",type:"combo",label:"Type","default":"signal"},"traffic_signals/direction":{key:"traffic_signals:direction",type:"combo",label:"Direction",strings:{options:{forward:"Forward",backward:"Backward",both:"Both / All"}}},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"}}},transformer:{key:"transformer",type:"combo",label:"Type",strings:{options:{distribution:"Distribution",generator:"Generator",converter:"Converter",traction:"Traction",auto:"Autotransformer",phase_angle_regulator:"Phase Angle Regulator",auxiliary:"Auxiliary",yes:"Unknown"}}},trees:{key:"trees",type:"semiCombo",label:"Trees"},tunnel:{key:"tunnel",type:"typeCombo",label:"Type",placeholder:"Default"},usage_rail:{key:"usage",type:"combo",label:"Usage Type",strings:{options:{main:"Main",branch:"Branch",industrial:"Industrial",military:"Military",test:"Test",tourism:"Tourism"}}},vending:{key:"vending",type:"semiCombo",label:"Types 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)"}}},"volcano/status":{key:"volcano:status",type:"combo",label:"Volcano Status",strings:{options:{active:"Active",dormant:"Dormant",extinct:"Extinct"}}},"volcano/type":{key:"volcano:type",type:"combo",label:"Volcano Type",strings:{options:{stratovolcano:"Stratovolcano",shield:"Shield",scoria:"Scoria"}}},voltage_electrified:{key:"voltage",type:"combo",label:"Voltage",prerequisiteTag:{key:"electrified",valueNot:"no"}},voltage:{key:"voltage",type:"combo",label:"Voltage"},"voltage/primary":{key:"voltage:primary",type:"combo",label:"Primary Voltage"},"voltage/secondary":{key:"voltage:secondary",type:"combo",label:"Secondary Voltage"},"voltage/tertiary":{key:"voltage:tertiary",type:"combo",label:"Tertiary Voltage"},wall:{key:"wall",type:"combo",label:"Type"},water_point:{key:"water_point",type:"check",label:"Water Point"},water_source:{key:"water_source","default":"main",type:"combo",label:"Water Source"},water_volume:{key:"water_volume",type:"number",label:"Water Reserve Volume (m³)",snake_case:false},water:{key:"water",type:"combo",label:"Type"},waterway:{key:"waterway",type:"typeCombo",label:"Type"},website:{key:"website",type:"url",icon:"website",placeholder:"https://example.com",label:"Website"},wetland:{key:"wetland",type:"combo",label:"Type"},wheelchair:{key:"wheelchair",type:"radio",options:["yes","limited","no"],icon:"maki-wheelchair",label:"Wheelchair Access"},wholesale:{key:"wholesale",type:"typeCombo",label:"Wholesale"},width:{key:"width",type:"number",minValue:0,label:"Width (Meters)"},wikidata:{key:"wikidata",type:"wikidata",icon:"wikipedia",universal:true,label:"Wikidata"},wikipedia:{key:"wikipedia",keys:["wikipedia","wikidata"],type:"wikipedia",icon:"wikipedia",universal:true,label:"Wikipedia"},windings:{key:"windings",type:"number",minValue:1,label:"Windings",placeholder:"1, 2, 3..."},"windings/configuration":{key:"windings:configuration",type:"combo",label:"Windings Configuration",strings:{options:{star:"Star / Wye",delta:"Delta","open-delta":"Open Delta",zigzag:"Zig Zag",open:"Open",scott:"Scott",leblanc:"Leblanc"}}}};
 
   var quickselect = createCommonjsModule(function (module, exports) {
   (function (global, factory) {
       }
   };
 
-  function osmEntity$$1(attrs) {
+  function osmEntity(attrs) {
       // For prototypal inheritance.
-      if (this instanceof osmEntity$$1) return;
+      if (this instanceof osmEntity) return;
 
       // Create the appropriate subtype.
       if (attrs && attrs.type) {
-          return osmEntity$$1[attrs.type].apply(this, arguments);
+          return osmEntity[attrs.type].apply(this, arguments);
       } else if (attrs && attrs.id) {
-          return osmEntity$$1[osmEntity$$1.id.type(attrs.id)].apply(this, arguments);
+          return osmEntity[osmEntity.id.type(attrs.id)].apply(this, arguments);
       }
 
       // Initialize a generic Entity (used only in tests).
-      return (new osmEntity$$1()).initialize(arguments);
+      return (new osmEntity()).initialize(arguments);
   }
 
 
-  osmEntity$$1.id = function(type) {
-      return osmEntity$$1.id.fromOSM(type, osmEntity$$1.id.next[type]--);
+  osmEntity.id = function(type) {
+      return osmEntity.id.fromOSM(type, osmEntity.id.next[type]--);
   };
 
 
-  osmEntity$$1.id.next = {
+  osmEntity.id.next = {
       changeset: -1, node: -1, way: -1, relation: -1
   };
 
 
-  osmEntity$$1.id.fromOSM = function(type, id) {
+  osmEntity.id.fromOSM = function(type, id) {
       return type[0] + id;
   };
 
 
-  osmEntity$$1.id.toOSM = function(id) {
+  osmEntity.id.toOSM = function(id) {
       return id.slice(1);
   };
 
 
-  osmEntity$$1.id.type = function(id) {
+  osmEntity.id.type = function(id) {
       return { 'c': 'changeset', 'n': 'node', 'w': 'way', 'r': 'relation' }[id[0]];
   };
 
 
   // A function suitable for use as the second argument to d3.selection#data().
-  osmEntity$$1.key = function(entity) {
+  osmEntity.key = function(entity) {
       return entity.id + 'v' + (entity.v || 0);
   };
 
 
-  osmEntity$$1.prototype = {
+  osmEntity.prototype = {
 
       tags: {},
 
           }
 
           if (!this.id && this.type) {
-              this.id = osmEntity$$1.id(this.type);
+              this.id = osmEntity.id(this.type);
           }
           if (!this.hasOwnProperty('visible')) {
               this.visible = true;
           if (copies[this.id])
               return copies[this.id];
 
-          var copy = osmEntity$$1(this, {id: undefined, user: undefined, version: undefined});
+          var copy = osmEntity(this, {id: undefined, user: undefined, version: undefined});
           copies[this.id] = copy;
 
           return copy;
 
 
       osmId: function() {
-          return osmEntity$$1.id.toOSM(this.id);
+          return osmEntity.id.toOSM(this.id);
       },
 
 
 
 
       update: function(attrs) {
-          return osmEntity$$1(this, attrs, {v: 1 + (this.v || 0)});
+          return osmEntity(this, attrs, {v: 1 + (this.v || 0)});
       },
 
 
       },
 
       deprecatedTags: function() {
-          var tags = toPairs(this.tags);
-          var deprecated = {};
+          var tags = this.tags;
 
+          // if there are no tags, none can be deprecated
+          if (Object.keys(tags).length === 0) return [];
+
+          var deprecated = [];
           dataDeprecated.forEach(function(d) {
-              var match = toPairs(d.old)[0];
-              tags.forEach(function(t) {
-                  if (t[0] === match[0] &&
-                      (t[1] === match[1] || match[1] === '*')) {
-                      deprecated[t[0]] = t[1];
-                  }
+              var matchesDeprecatedTags = every(Object.keys(d.old), function(key) {
+                  return tags[key] && (d.old[key] === tags[key] || d.old[key] === '*');
               });
+              if (matchesDeprecatedTags) {
+                  deprecated.push(d);
+              }
           });
 
           return deprecated;
       }
   };
 
-  function geoExtent$$1(min, max) {
-      if (!(this instanceof geoExtent$$1)) {
-          return new geoExtent$$1(min, max);
-      } else if (min instanceof geoExtent$$1) {
+  function geoExtent(min, max) {
+      if (!(this instanceof geoExtent)) {
+          return new geoExtent(min, max);
+      } else if (min instanceof geoExtent) {
           return min;
       } else if (min && min.length === 2 && min[0].length === 2 && min[1].length === 2) {
           this[0] = min[0];
       }
   }
 
-  geoExtent$$1.prototype = new Array(2);
+  geoExtent.prototype = new Array(2);
 
-  assignIn(geoExtent$$1.prototype, {
+  assignIn(geoExtent.prototype, {
 
       equals: function (obj) {
           return this[0][0] === obj[0][0] &&
 
 
       extend: function(obj) {
-          if (!(obj instanceof geoExtent$$1)) obj = new geoExtent$$1(obj);
-          return geoExtent$$1(
+          if (!(obj instanceof geoExtent)) obj = new geoExtent(obj);
+          return geoExtent(
               [Math.min(obj[0][0], this[0][0]), Math.min(obj[0][1], this[0][1])],
               [Math.max(obj[1][0], this[1][0]), Math.max(obj[1][1], this[1][1])]
           );
 
 
       contains: function(obj) {
-          if (!(obj instanceof geoExtent$$1)) obj = new geoExtent$$1(obj);
+          if (!(obj instanceof geoExtent)) obj = new geoExtent(obj);
           return obj[0][0] >= this[0][0] &&
                  obj[0][1] >= this[0][1] &&
                  obj[1][0] <= this[1][0] &&
 
 
       intersects: function(obj) {
-          if (!(obj instanceof geoExtent$$1)) obj = new geoExtent$$1(obj);
+          if (!(obj instanceof geoExtent)) obj = new geoExtent(obj);
           return obj[0][0] <= this[1][0] &&
                  obj[0][1] <= this[1][1] &&
                  obj[1][0] >= this[0][0] &&
 
 
       intersection: function(obj) {
-          if (!this.intersects(obj)) return new geoExtent$$1();
-          return new geoExtent$$1(
+          if (!this.intersects(obj)) return new geoExtent();
+          return new geoExtent(
               [Math.max(obj[0][0], this[0][0]), Math.max(obj[0][1], this[0][1])],
               [Math.min(obj[1][0], this[1][0]), Math.min(obj[1][1], this[1][1])]
           );
 
 
       percentContainedIn: function(obj) {
-          if (!(obj instanceof geoExtent$$1)) obj = new geoExtent$$1(obj);
+          if (!(obj instanceof geoExtent)) obj = new geoExtent(obj);
           var a1 = this.intersection(obj).area();
           var a2 = this.area();
 
       padByMeters: function(meters) {
           var dLat = geoMetersToLat(meters);
           var dLon = geoMetersToLon(meters, this.center()[1]);
-          return geoExtent$$1(
+          return geoExtent(
               [this[0][0] - dLon, this[0][1] - dLat],
               [this[1][0] + dLon, this[1][1] + dLat]
           );
       return tileSize * Math.pow(2, z) / TAU;
   }
 
-  /**
-   * A specialized version of `_.every` for arrays without support for
-   * iteratee shorthands.
-   *
-   * @private
-   * @param {Array} [array] The array to iterate over.
-   * @param {Function} predicate The function invoked per iteration.
-   * @returns {boolean} Returns `true` if all elements pass the predicate check,
-   *  else `false`.
-   */
-  function arrayEvery(array, predicate) {
-    var index = -1,
-        length = array == null ? 0 : array.length;
 
-    while (++index < length) {
-      if (!predicate(array[index], index, array)) {
-        return false;
-      }
-    }
-    return true;
-  }
+  // returns info about the node from `nodes` closest to the given `point`
+  function geoSphericalClosestNode(nodes, point) {
+      var minDistance = Infinity, distance;
+      var indexOfMin;
 
-  /**
-   * The base implementation of `_.every` without support for iteratee shorthands.
-   *
-   * @private
-   * @param {Array|Object} collection The collection to iterate over.
-   * @param {Function} predicate The function invoked per iteration.
-   * @returns {boolean} Returns `true` if all elements pass the predicate check,
-   *  else `false`
-   */
-  function baseEvery(collection, predicate) {
-    var result = true;
-    baseEach(collection, function(value, index, collection) {
-      result = !!predicate(value, index, collection);
-      return result;
-    });
-    return result;
-  }
+      for (var i in nodes) {
+          distance = geoSphericalDistance(nodes[i].loc, point);
+          if (distance < minDistance) {
+              minDistance = distance;
+              indexOfMin = i;
+          }
+      }
 
-  /**
-   * Checks if `predicate` returns truthy for **all** elements of `collection`.
-   * Iteration is stopped once `predicate` returns falsey. The predicate is
-   * invoked with three arguments: (value, index|key, collection).
-   *
-   * **Note:** This method returns `true` for
-   * [empty collections](https://en.wikipedia.org/wiki/Empty_set) because
-   * [everything is true](https://en.wikipedia.org/wiki/Vacuous_truth) of
-   * elements of empty collections.
-   *
-   * @static
-   * @memberOf _
-   * @since 0.1.0
-   * @category Collection
-   * @param {Array|Object} collection The collection to iterate over.
-   * @param {Function} [predicate=_.identity] The function invoked per iteration.
-   * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
-   * @returns {boolean} Returns `true` if all elements pass the predicate check,
-   *  else `false`.
-   * @example
-   *
-   * _.every([true, 1, null, 'yes'], Boolean);
-   * // => false
-   *
-   * var users = [
-   *   { 'user': 'barney', 'age': 36, 'active': false },
-   *   { 'user': 'fred',   'age': 40, 'active': false }
-   * ];
-   *
-   * // The `_.matches` iteratee shorthand.
-   * _.every(users, { 'user': 'barney', 'active': false });
-   * // => false
-   *
-   * // The `_.matchesProperty` iteratee shorthand.
-   * _.every(users, ['active', false]);
-   * // => true
-   *
-   * // The `_.property` iteratee shorthand.
-   * _.every(users, 'active');
-   * // => false
-   */
-  function every(collection, predicate, guard) {
-    var func = isArray(collection) ? arrayEvery : baseEvery;
-    if (guard && isIterateeCall(collection, predicate, guard)) {
-      predicate = undefined;
-    }
-    return func(collection, baseIteratee(predicate, 3));
+      if (indexOfMin !== undefined) {
+          return { index: indexOfMin, distance: minDistance, node: nodes[indexOfMin] };
+      } else {
+          return null;
+      }
   }
 
   /**
       var clipExtent = [[0, 0], [0, 0]];
 
 
-      function projection$$1(point) {
+      function projection(point) {
           point = project(point[0] * Math.PI / 180, point[1] * Math.PI / 180);
           return [point[0] * k + x, y - point[1] * k];
       }
 
 
-      projection$$1.invert = function(point) {
+      projection.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];
       };
 
 
-      projection$$1.scale = function(_) {
+      projection.scale = function(_) {
           if (!arguments.length) return k;
           k = +_;
-          return projection$$1;
+          return projection;
       };
 
 
-      projection$$1.translate = function(_) {
+      projection.translate = function(_) {
           if (!arguments.length) return [x, y];
           x = +_[0];
           y = +_[1];
-          return projection$$1;
+          return projection;
       };
 
 
-      projection$$1.clipExtent = function(_) {
+      projection.clipExtent = function(_) {
           if (!arguments.length) return clipExtent;
           clipExtent = _;
-          return projection$$1;
+          return projection;
       };
 
 
-      projection$$1.transform = function(obj) {
+      projection.transform = function(obj) {
           if (!arguments.length) return identity$7.translate(x, y).scale(k);
           x = +obj.x;
           y = +obj.y;
           k = +obj.k;
-          return projection$$1;
+          return projection;
       };
 
 
-      projection$$1.stream = d3_geoTransform({
+      projection.stream = d3_geoTransform({
           point: function(x, y) {
-              var vec = projection$$1([x, y]);
+              var vec = projection([x, y]);
               this.stream.point(vec[0], vec[1]);
           }
       }).stream;
 
 
-      return projection$$1;
+      return projection;
   }
 
   function osmChangeset() {
   }
 
 
-  osmEntity$$1.changeset = osmChangeset;
+  osmEntity.changeset = osmChangeset;
 
-  osmChangeset.prototype = Object.create(osmEntity$$1.prototype);
+  osmChangeset.prototype = Object.create(osmEntity.prototype);
 
   assignIn(osmChangeset.prototype, {
 
 
 
       extent: function() {
-          return new geoExtent$$1();
+          return new geoExtent();
       },
 
 
 
   });
 
-  function krError() {
-      if (!(this instanceof krError)) {
-          return (new krError()).initialize(arguments);
-      } else if (arguments.length) {
-          this.initialize(arguments);
-      }
-  }
-
-
-  krError.id = function() {
-      return krError.id.next--;
-  };
-
-
-  krError.id.next = -1;
-
-
-  assignIn(krError.prototype, {
-
-      type: 'krError',
-
-      initialize: function(sources) {
-          for (var i = 0; i < sources.length; ++i) {
-              var source = sources[i];
-              for (var prop in source) {
-                  if (Object.prototype.hasOwnProperty.call(source, prop)) {
-                      if (source[prop] === undefined) {
-                          delete this[prop];
-                      } else {
-                          this[prop] = source[prop];
-                      }
-                  }
-              }
-          }
-
-          if (!this.id) {
-              this.id = krError.id() + '';  // as string
-          }
-
-          return this;
-      },
-
-      update: function(attrs) {
-          return krError(this, attrs); // {v: 1 + (this.v || 0)}
-      }
-  });
-
   /**
    * Creates a duplicate-free version of an array, using
    * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
       }
   }
 
-  osmEntity$$1.node = osmNode;
+  osmEntity.node = osmNode;
 
-  osmNode.prototype = Object.create(osmEntity$$1.prototype);
+  osmNode.prototype = Object.create(osmEntity.prototype);
 
   assignIn(osmNode.prototype, {
 
 
 
       extent: function() {
-          return new geoExtent$$1(this.loc);
+          return new geoExtent(this.loc);
       },
 
 
       },
 
       extent: function() {
-          return new geoExtent$$1(this.loc);
+          return new geoExtent(this.loc);
       },
 
       update: function(attrs) {
   function actionReverse(wayID, options) {
       var ignoreKey = /^.*(_|:)?(description|name|note|website|ref|source|comment|watch|attribution)(_|:)?/;
       var numeric = /^([+\-]?)(?=[\d.])/;
+      var turn_lanes = /^turn:lanes:?/;
       var keyReplacements = [
           [/:right$/, ':left'],
           [/:left$/, ':right'],
       function reverseValue(key, value) {
           if (ignoreKey.test(key)) return value;
 
-          if (key === 'incline' && numeric.test(value)) {
+          // Turn lanes are left/right to key (not way) direction - #5674
+          if (turn_lanes.test(key)) {
+              return value;
+          } else if (key === 'incline' && numeric.test(value)) {
               return value.replace(numeric, function(_, sign) { return sign === '-' ? '' : '-'; });
           } else if (options && options.reverseOneway && key === 'oneway') {
               return onewayReplacements[value] || value;
   });
 
   /** `Object#toString` result references. */
-  var mapTag$7 = '[object Map]',
-      setTag$7 = '[object Set]';
+  var mapTag$6 = '[object Map]',
+      setTag$6 = '[object Set]';
 
   /** Used for built-in method references. */
   var objectProto$h = Object.prototype;
       return !value.length;
     }
     var tag = getTag$1(value);
-    if (tag == mapTag$7 || tag == setTag$7) {
+    if (tag == mapTag$6 || tag == setTag$6) {
       return !value.size;
     }
     if (isPrototype(value)) {
     return true;
   }
 
-  var detected;
+  /**
+   * Performs a deep comparison between two values to determine if they are
+   * equivalent.
+   *
+   * **Note:** This method supports comparing arrays, array buffers, booleans,
+   * date objects, error objects, maps, numbers, `Object` objects, regexes,
+   * sets, strings, symbols, and typed arrays. `Object` objects are compared
+   * by their own, not inherited, enumerable properties. Functions and DOM
+   * nodes are compared by strict equality, i.e. `===`.
+   *
+   * @static
+   * @memberOf _
+   * @since 0.1.0
+   * @category Lang
+   * @param {*} value The value to compare.
+   * @param {*} other The other value to compare.
+   * @returns {boolean} Returns `true` if the values are equivalent, else `false`.
+   * @example
+   *
+   * var object = { 'a': 1 };
+   * var other = { 'a': 1 };
+   *
+   * _.isEqual(object, other);
+   * // => true
+   *
+   * object === other;
+   * // => false
+   */
+  function isEqual(value, other) {
+    return baseIsEqual(value, other);
+  }
 
-  function utilDetect(force) {
-      if (detected && !force) return detected;
-      detected = {};
+  /*
+      iD.Difference represents the difference between two graphs.
+      It knows how to calculate the set of entities that were
+      created, modified, or deleted, and also contains the logic
+      for recursively extending a difference to the complete set
+      of entities that will require a redraw, taking into account
+      child and parent relationships.
+   */
+  function coreDifference(base, head) {
+      var _changes = {};
+      var _diff = {};
+      var _length = 0;
+      var i, k, h, b, keys;
 
-      var ua = navigator.userAgent,
-          m = null,
-          q = utilStringQs(window.location.hash.substring(1));
+      function changed(h, b) {
+          if (h === b) return false;
+          if (!h || !b) return true;
 
-      m = ua.match(/(edge)\/?\s*(\.?\d+(\.\d+)*)/i);   // Edge
-      if (m !== null) {
-          detected.browser = m[1];
-          detected.version = m[2];
-      }
-      if (!detected.browser) {
-          m = ua.match(/Trident\/.*rv:([0-9]{1,}[\.0-9]{0,})/i);   // IE11
-          if (m !== null) {
-              detected.browser = 'msie';
-              detected.version = m[1];
+          if (h.loc || b.loc) {
+              if (!h.loc && b.loc || h.loc && !b.loc ||
+                  h.loc[0] !== b.loc[0] || h.loc[1] !== b.loc[1]) return true;
           }
-      }
-      if (!detected.browser) {
-          m = ua.match(/(opr)\/?\s*(\.?\d+(\.\d+)*)/i);   // Opera 15+
-          if (m !== null) {
-              detected.browser = 'Opera';
-              detected.version = m[2];
+          if (h.nodes || b.nodes) {
+              if (!isEqual(h.nodes, b.nodes)) return true;
           }
+          if (h.members || b.members) {
+              if (!isEqual(h.members, b.members)) return true;
+          }
+          return !isEqual(h.tags, b.tags);
       }
-      if (!detected.browser) {
-          m = ua.match(/(opera|chrome|safari|firefox|msie)\/?\s*(\.?\d+(\.\d+)*)/i);
-          if (m !== null) {
-              detected.browser = m[1];
-              detected.version = m[2];
-              m = ua.match(/version\/([\.\d]+)/i);
-              if (m !== null) detected.version = m[1];
+
+
+      keys = Object.keys(head.entities);
+      for (i = 0; i < keys.length; i++) {
+          k = keys[i];
+          h = head.entities[k];
+          b = base.entities[k];
+          if (changed(h, b)) {
+              _changes[k] = {base: b, head: h};
+              _length++;
           }
       }
-      if (!detected.browser) {
-          detected.browser = navigator.appName;
-          detected.version = navigator.appVersion;
+
+      keys = Object.keys(base.entities);
+      for (i = 0; i < keys.length; i++) {
+          k = keys[i];
+          h = head.entities[k];
+          b = base.entities[k];
+          if (!_changes[k] && changed(h, b)) {
+              _changes[k] = {base: b, head: h};
+              _length++;
+          }
       }
 
-      // keep major.minor version only..
-      detected.version = detected.version.split(/\W/).slice(0,2).join('.');
 
-      if (detected.browser.toLowerCase() === 'msie') {
-          detected.ie = true;
-          detected.browser = 'Internet Explorer';
-          detected.support = parseFloat(detected.version) >= 11;
-      } else {
-          detected.ie = false;
-          detected.support = true;
+      function addParents(parents, result) {
+          for (var i = 0; i < parents.length; i++) {
+              var parent = parents[i];
+
+              if (parent.id in result)
+                  continue;
+
+              result[parent.id] = parent;
+              addParents(head.parentRelations(parent), result);
+          }
       }
 
-      // Added due to incomplete svg style support. See #715
-      detected.opera = (detected.browser.toLowerCase() === 'opera' && parseFloat(detected.version) < 15 );
 
-      // Set locale based on url param (format 'en-US') or browser lang (default)
-      if (q.hasOwnProperty('locale')) {
-          detected.locale = q.locale;
-          detected.language = q.locale.split('-')[0];
-      } else {
-          detected.locale = (navigator.language || navigator.userLanguage || 'en-US');
-          detected.language = detected.locale.split('-')[0];
+      _diff.length = function length() {
+          return _length;
+      };
 
-          // Search `navigator.languages` for a better locale. Prefer the first language,
-          // unless the second language is a culture-specific version of the first one, see #3842
-          if (navigator.languages && navigator.languages.length > 0) {
-              var code0 = navigator.languages[0],
-                  parts0 = code0.split('-');
 
-              detected.locale = code0;
-              detected.language = parts0[0];
+      _diff.changes = function changes() {
+          return _changes;
+      };
 
-              if (navigator.languages.length > 1 && parts0.length === 1) {
-                  var code1 = navigator.languages[1],
-                      parts1 = code1.split('-');
 
-                  if (parts1[0] === parts0[0]) {
-                      detected.locale = code1;
-                  }
-              }
-          }
-      }
+      _diff.extantIDs = function extantIDs() {
+          var result = [];
+          forEach(_changes, function(change, id) {
+              if (change.head) result.push(id);
+          });
+          return result;
+      };
 
-      // Loaded locale is stored in currentLocale
-      // return that instead (except in the situation where 'en' might override 'en-US')
-      var loadedLocale = currentLocale || 'en';
-      if (loadedLocale !== 'en') {
-          detected.locale = loadedLocale;
-          detected.language = detected.locale.split('-')[0];
-      }
 
-      // detect text direction
-      var lang = dataLocales[detected.locale];
-      if ((lang && lang.rtl) || (q.rtl === 'true')) {
-          detected.textDirection = 'rtl';
-      } else {
-          detected.textDirection = 'ltr';
-      }
-      setTextDirection(detected.textDirection);
+      _diff.modified = function modified() {
+          var result = [];
+          forEach(_changes, function(change) {
+              if (change.base && change.head) result.push(change.head);
+          });
+          return result;
+      };
 
-      // detect host
-      var loc = window.top.location;
-      var origin = loc.origin;
-      if (!origin) {  // for unpatched IE11
-          origin = loc.protocol + '//' + loc.hostname + (loc.port ? ':' + loc.port: '');
-      }
 
-      detected.host = origin + loc.pathname;
+      _diff.created = function created() {
+          var result = [];
+          forEach(_changes, function(change) {
+              if (!change.base && change.head) result.push(change.head);
+          });
+          return result;
+      };
 
-      detected.filedrop = (window.FileReader && 'ondrop' in window);
 
-      detected.download = !(detected.ie || detected.browser.toLowerCase() === 'edge');
+      _diff.deleted = function deleted() {
+          var result = [];
+          forEach(_changes, function(change) {
+              if (change.base && !change.head) result.push(change.base);
+          });
+          return result;
+      };
 
-      detected.cssfilters = !(detected.ie || detected.browser.toLowerCase() === 'edge');
 
-      function nav(x) {
-          return navigator.userAgent.indexOf(x) !== -1;
-      }
+      _diff.summary = function summary() {
+          var relevant = {};
 
-      if (nav('Win')) {
-          detected.os = 'win';
-          detected.platform = 'Windows';
-      }
-      else if (nav('Mac')) {
-          detected.os = 'mac';
-          detected.platform = 'Macintosh';
-      }
-      else if (nav('X11') || nav('Linux')) {
-          detected.os = 'linux';
-          detected.platform = 'Linux';
-      }
-      else {
-          detected.os = 'win';
-          detected.platform = 'Unknown';
-      }
+          function addEntity(entity, graph, changeType) {
+              relevant[entity.id] = {
+                  entity: entity,
+                  graph: graph,
+                  changeType: changeType
+              };
+          }
 
-      return detected;
-  }
+          function addParents(entity) {
+              var parents = head.parentWays(entity);
+              for (var j = parents.length - 1; j >= 0; j--) {
+                  var parent = parents[j];
+                  if (!(parent.id in relevant)) addEntity(parent, head, 'modified');
+              }
+          }
 
-  var remove$1 = removeDiacritics;
+          var keys = Object.keys(_changes);
+          for (var i = 0; i < keys.length; i++) {
+              var change = _changes[keys[i]];
 
-  var replacementList = [
-    {
-      base: ' ',
-      chars: "\u00A0",
-    }, {
-      base: '0',
+              if (change.head && change.head.geometry(head) !== 'vertex') {
+                  addEntity(change.head, head, change.base ? 'modified' : 'created');
+
+              } else if (change.base && change.base.geometry(base) !== 'vertex') {
+                  addEntity(change.base, base, 'deleted');
+
+              } else if (change.base && change.head) { // modified vertex
+                  var moved    = !isEqual(change.base.loc,  change.head.loc);
+                  var retagged = !isEqual(change.base.tags, change.head.tags);
+
+                  if (moved) {
+                      addParents(change.head);
+                  }
+
+                  if (retagged || (moved && change.head.hasInterestingTags())) {
+                      addEntity(change.head, head, 'modified');
+                  }
+
+              } else if (change.head && change.head.hasInterestingTags()) { // created vertex
+                  addEntity(change.head, head, 'created');
+
+              } else if (change.base && change.base.hasInterestingTags()) { // deleted vertex
+                  addEntity(change.base, base, 'deleted');
+              }
+          }
+
+          return values$1(relevant);
+      };
+
+
+      _diff.complete = function complete(extent) {
+          var result = {};
+          var id, change;
+
+          for (id in _changes) {
+              change = _changes[id];
+
+              var h = change.head;
+              var b = change.base;
+              var entity = h || b;
+
+              if (extent &&
+                  (!h || !h.intersects(extent, head)) &&
+                  (!b || !b.intersects(extent, base)))
+                  continue;
+
+              result[id] = h;
+
+              if (entity.type === 'way') {
+                  var nh = h ? h.nodes : [];
+                  var nb = b ? b.nodes : [];
+                  var diff, i;
+
+                  diff = difference(nh, nb);
+                  for (i = 0; i < diff.length; i++) {
+                      result[diff[i]] = head.hasEntity(diff[i]);
+                  }
+
+                  diff = difference(nb, nh);
+                  for (i = 0; i < diff.length; i++) {
+                      result[diff[i]] = head.hasEntity(diff[i]);
+                  }
+              }
+
+              addParents(head.parentWays(entity), result);
+              addParents(head.parentRelations(entity), result);
+          }
+
+          return result;
+      };
+
+
+      return _diff;
+  }
+
+  /** Used for built-in method references. */
+  var objectProto$i = Object.prototype;
+
+  /** Used to check objects for own properties. */
+  var hasOwnProperty$f = objectProto$i.hasOwnProperty;
+
+  /**
+   * Assigns own enumerable string keyed properties of source objects to the
+   * destination object. Source objects are applied from left to right.
+   * Subsequent sources overwrite property assignments of previous sources.
+   *
+   * **Note:** This method mutates `object` and is loosely based on
+   * [`Object.assign`](https://mdn.io/Object/assign).
+   *
+   * @static
+   * @memberOf _
+   * @since 0.10.0
+   * @category Object
+   * @param {Object} object The destination object.
+   * @param {...Object} [sources] The source objects.
+   * @returns {Object} Returns `object`.
+   * @see _.assignIn
+   * @example
+   *
+   * function Foo() {
+   *   this.a = 1;
+   * }
+   *
+   * function Bar() {
+   *   this.c = 3;
+   * }
+   *
+   * Foo.prototype.b = 2;
+   * Bar.prototype.d = 4;
+   *
+   * _.assign({ 'a': 0 }, new Foo, new Bar);
+   * // => { 'a': 1, 'c': 3 }
+   */
+  var assign = createAssigner(function(object, source) {
+    if (isPrototype(source) || isArrayLike(source)) {
+      copyObject(source, keys$1(source), object);
+      return;
+    }
+    for (var key in source) {
+      if (hasOwnProperty$f.call(source, key)) {
+        assignValue(object, key, source[key]);
+      }
+    }
+  });
+
+  /* Built-in method references for those with the same name as other `lodash` methods. */
+  var nativeMax$3 = Math.max;
+
+  /**
+   * Checks if `value` is in `collection`. If `collection` is a string, it's
+   * checked for a substring of `value`, otherwise
+   * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
+   * is used for equality comparisons. If `fromIndex` is negative, it's used as
+   * the offset from the end of `collection`.
+   *
+   * @static
+   * @memberOf _
+   * @since 0.1.0
+   * @category Collection
+   * @param {Array|Object|string} collection The collection to inspect.
+   * @param {*} value The value to search for.
+   * @param {number} [fromIndex=0] The index to search from.
+   * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`.
+   * @returns {boolean} Returns `true` if `value` is found, else `false`.
+   * @example
+   *
+   * _.includes([1, 2, 3], 1);
+   * // => true
+   *
+   * _.includes([1, 2, 3], 1, 2);
+   * // => false
+   *
+   * _.includes({ 'a': 1, 'b': 2 }, 1);
+   * // => true
+   *
+   * _.includes('abcd', 'bc');
+   * // => true
+   */
+  function includes(collection, value, fromIndex, guard) {
+    collection = isArrayLike(collection) ? collection : values$1(collection);
+    fromIndex = (fromIndex && !guard) ? toInteger(fromIndex) : 0;
+
+    var length = collection.length;
+    if (fromIndex < 0) {
+      fromIndex = nativeMax$3(length + fromIndex, 0);
+    }
+    return isString(collection)
+      ? (fromIndex <= length && collection.indexOf(value, fromIndex) > -1)
+      : (!!length && baseIndexOf(collection, value, fromIndex) > -1);
+  }
+
+  var detected;
+
+  function utilDetect(force) {
+      if (detected && !force) return detected;
+      detected = {};
+
+      var ua = navigator.userAgent,
+          m = null,
+          q = utilStringQs(window.location.hash.substring(1));
+
+      m = ua.match(/(edge)\/?\s*(\.?\d+(\.\d+)*)/i);   // Edge
+      if (m !== null) {
+          detected.browser = m[1];
+          detected.version = m[2];
+      }
+      if (!detected.browser) {
+          m = ua.match(/Trident\/.*rv:([0-9]{1,}[\.0-9]{0,})/i);   // IE11
+          if (m !== null) {
+              detected.browser = 'msie';
+              detected.version = m[1];
+          }
+      }
+      if (!detected.browser) {
+          m = ua.match(/(opr)\/?\s*(\.?\d+(\.\d+)*)/i);   // Opera 15+
+          if (m !== null) {
+              detected.browser = 'Opera';
+              detected.version = m[2];
+          }
+      }
+      if (!detected.browser) {
+          m = ua.match(/(opera|chrome|safari|firefox|msie)\/?\s*(\.?\d+(\.\d+)*)/i);
+          if (m !== null) {
+              detected.browser = m[1];
+              detected.version = m[2];
+              m = ua.match(/version\/([\.\d]+)/i);
+              if (m !== null) detected.version = m[1];
+          }
+      }
+      if (!detected.browser) {
+          detected.browser = navigator.appName;
+          detected.version = navigator.appVersion;
+      }
+
+      // keep major.minor version only..
+      detected.version = detected.version.split(/\W/).slice(0,2).join('.');
+
+      if (detected.browser.toLowerCase() === 'msie') {
+          detected.ie = true;
+          detected.browser = 'Internet Explorer';
+          detected.support = parseFloat(detected.version) >= 11;
+      } else {
+          detected.ie = false;
+          detected.support = true;
+      }
+
+      // Added due to incomplete svg style support. See #715
+      detected.opera = (detected.browser.toLowerCase() === 'opera' && parseFloat(detected.version) < 15 );
+
+      // Set locale based on url param (format 'en-US') or browser lang (default)
+      if (q.hasOwnProperty('locale')) {
+          detected.locale = q.locale;
+          detected.language = q.locale.split('-')[0];
+      } else {
+          detected.locale = (navigator.language || navigator.userLanguage || 'en-US');
+          detected.language = detected.locale.split('-')[0];
+
+          // Search `navigator.languages` for a better locale. Prefer the first language,
+          // unless the second language is a culture-specific version of the first one, see #3842
+          if (navigator.languages && navigator.languages.length > 0) {
+              var code0 = navigator.languages[0],
+                  parts0 = code0.split('-');
+
+              detected.locale = code0;
+              detected.language = parts0[0];
+
+              if (navigator.languages.length > 1 && parts0.length === 1) {
+                  var code1 = navigator.languages[1],
+                      parts1 = code1.split('-');
+
+                  if (parts1[0] === parts0[0]) {
+                      detected.locale = code1;
+                  }
+              }
+          }
+      }
+
+      // Loaded locale is stored in currentLocale
+      // return that instead (except in the situation where 'en' might override 'en-US')
+      var loadedLocale = currentLocale || 'en';
+      if (loadedLocale !== 'en') {
+          detected.locale = loadedLocale;
+          detected.language = detected.locale.split('-')[0];
+      }
+
+      // detect text direction
+      var lang = dataLocales[detected.locale];
+      if ((lang && lang.rtl) || (q.rtl === 'true')) {
+          detected.textDirection = 'rtl';
+      } else {
+          detected.textDirection = 'ltr';
+      }
+      setTextDirection(detected.textDirection);
+
+      // detect host
+      var loc = window.top.location;
+      var origin = loc.origin;
+      if (!origin) {  // for unpatched IE11
+          origin = loc.protocol + '//' + loc.hostname + (loc.port ? ':' + loc.port: '');
+      }
+
+      detected.host = origin + loc.pathname;
+
+      detected.filedrop = (window.FileReader && 'ondrop' in window);
+
+      detected.download = !(detected.ie || detected.browser.toLowerCase() === 'edge');
+
+      detected.cssfilters = !(detected.ie || detected.browser.toLowerCase() === 'edge');
+
+      function nav(x) {
+          return navigator.userAgent.indexOf(x) !== -1;
+      }
+
+      if (nav('Win')) {
+          detected.os = 'win';
+          detected.platform = 'Windows';
+      }
+      else if (nav('Mac')) {
+          detected.os = 'mac';
+          detected.platform = 'Macintosh';
+      }
+      else if (nav('X11') || nav('Linux')) {
+          detected.os = 'linux';
+          detected.platform = 'Linux';
+      }
+      else {
+          detected.os = 'win';
+          detected.platform = 'Unknown';
+      }
+
+      return detected;
+  }
+
+  var remove$1 = removeDiacritics;
+
+  var replacementList = [
+    {
+      base: ' ',
+      chars: "\u00A0",
+    }, {
+      base: '0',
       chars: "\u07C0",
     }, {
       base: 'A',
   }
 
 
+  // Adds or removes highlight styling for the specified entities
+  function utilHighlightEntities(ids, highlighted, context) {
+      context.surface()
+          .selectAll(utilEntityOrDeepMemberSelector(ids, context.graph()))
+          .classed('highlighted', highlighted);
+  }
+
+
   function utilGetAllNodes(ids, graph) {
       var seen = {};
       var nodes = [];
   }
 
 
+  function utilDisplayLabel(entity, context) {
+      var displayName = utilDisplayName(entity);
+      if (displayName) {
+          // use the display name if there is one
+          return displayName;
+      }
+      var preset = utilPreset(entity, context);
+      if (preset && preset.name()) {
+          // use the preset name if there is a match
+          return preset.name();
+      }
+      // fallback to the display type (node/way/relation)
+      return utilDisplayType(entity.id);
+  }
+
+
+  function utilPreset(entity, context) {
+      return context.presets().match(entity, context.graph());
+  }
+
+
   function utilEntityRoot(entityType) {
       return {
           node: 'n',
           if (parts.length === 2) {
               obj[parts[0]] = (null === parts[1]) ? '' : decodeURIComponent(parts[1]);
           }
-          if (parts[0] === 'mvt') {
-              obj[parts[0]] = (parts[2] !== undefined) ? (decodeURIComponent(parts[1]) + '=' + decodeURIComponent(parts[2])) : (decodeURIComponent(parts[1]));
-          }
           return obj;
       }, {});
   }
       return hash;
   }
 
-  // Adds or removes highlight styling for the specified entity's SVG elements in the map.
-  function utilHighlightEntity(id, highlighted, context) {
-      context.surface()
-          .selectAll(utilEntityOrDeepMemberSelector([id], context.graph()))
-          .classed('highlighted', highlighted);
-  }
-
   // note the function should be of low priority
   // and should not be returning a value.
   function utilCallWhenIdle(func, timeout) {
           clearTimeout(id);
       };
 
-  function utilKeybinding(namespace$$1) {
+  function utilKeybinding(namespace) {
       var _keybindings = {};
 
 
 
 
           function matches(binding, testShift) {
-              var event$$1 = event;
+              var event$1 = event;
               var isMatch = false;
               var tryKeyCode = true;
 
               // Prefer a match on `KeyboardEvent.key`
-              if (event$$1.key !== undefined) {
-                  tryKeyCode = (event$$1.key.charCodeAt(0) > 255);  // outside ISO-Latin-1
+              if (event$1.key !== undefined) {
+                  tryKeyCode = (event$1.key.charCodeAt(0) > 255);  // outside ISO-Latin-1
                   isMatch = true;
 
                   if (binding.event.key === undefined) {
                       isMatch = false;
                   } else if (Array.isArray(binding.event.key)) {
-                      if (binding.event.key.map(function(s) { return s.toLowerCase(); }).indexOf(event$$1.key.toLowerCase()) === -1)
+                      if (binding.event.key.map(function(s) { return s.toLowerCase(); }).indexOf(event$1.key.toLowerCase()) === -1)
                           isMatch = false;
                   } else {
-                      if (event$$1.key.toLowerCase() !== binding.event.key.toLowerCase())
+                      if (event$1.key.toLowerCase() !== binding.event.key.toLowerCase())
                           isMatch = false;
                   }
               }
               // - browser doesn't support `KeyboardEvent.key`
               // - `KeyboardEvent.key` is outside ISO-Latin-1 range (cyrillic?)
               if (!isMatch && tryKeyCode) {
-                  isMatch = (event$$1.keyCode === binding.event.keyCode);
+                  isMatch = (event$1.keyCode === binding.event.keyCode);
               }
 
               if (!isMatch) 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.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;
+              if (event$1.metaKey !== binding.event.modifiers.metaKey) return false;
+              if (testShift && event$1.shiftKey !== binding.event.modifiers.shiftKey) return false;
 
               return true;
           }
       }
 
 
-      function keybinding(selection$$1) {
-          selection$$1 = selection$$1 || select(document);
-          selection$$1.on('keydown.capture.' + namespace$$1, capture, true);
-          selection$$1.on('keydown.bubble.' + namespace$$1, bubble, false);
+      function keybinding(selection) {
+          selection = selection || select(document);
+          selection.on('keydown.capture.' + namespace, capture, true);
+          selection.on('keydown.bubble.' + namespace, bubble, false);
           return keybinding;
       }
 
       // was: keybinding.off()
-      keybinding.unbind = function(selection$$1) {
+      keybinding.unbind = function(selection) {
           _keybindings = [];
-          selection$$1 = selection$$1 || select(document);
-          selection$$1.on('keydown.capture.' + namespace$$1, null);
-          selection$$1.on('keydown.bubble.' + namespace$$1, null);
+          selection = selection || select(document);
+          selection.on('keydown.capture.' + namespace, null);
+          selection.on('keydown.bubble.' + namespace, null);
           return keybinding;
       };
 
       var _skipNullIsland = false;
 
 
-      function clamp(num, min$$1, max$$1) {
-          return Math.max(min$$1, Math.min(num, max$$1));
+      function clamp(num, min, max) {
+          return Math.max(min, Math.min(num, max));
       }
 
 
           if (z >= 7) {
               var center = Math.pow(2, z - 1);
               var width = Math.pow(2, z - 6);
-              var min$$1 = center - (width / 2);
-              var max$$1 = center + (width / 2) - 1;
-              return x >= min$$1 && x <= max$$1 && y >= min$$1 && y <= max$$1;
+              var min = center - (width / 2);
+              var max = center + (width / 2) - 1;
+              return x >= min && x <= max && y >= min && y <= max;
           }
           return false;
       }
                   return {
                       id: tile.toString(),
                       xyz: tile,
-                      extent: geoExtent$$1(
+                      extent: geoExtent(
                           projection.invert([x, y + ts]),
                           projection.invert([x + ts, y])
                       )
       });
   }
 
-  function validationDeprecatedTag() {
-
-      var validation = function(changes) {
-          var warnings = [];
-          for (var i = 0; i < changes.created.length; i++) {
-              var change = changes.created[i];
-              var deprecatedTags = change.deprecatedTags();
-
-              if (!isEmpty(deprecatedTags)) {
-                  var tags = utilTagText({ tags: deprecatedTags });
-                  warnings.push({
-                      id: 'deprecated_tags',
-                      message: t('validations.deprecated_tags', { tags: tags }),
-                      entity: change
-                  });
-              }
-          }
+  function coreGraph(other, mutable) {
+      if (!(this instanceof coreGraph)) return new coreGraph(other, mutable);
 
-          return warnings;
-      };
+      if (other instanceof coreGraph) {
+          var base = other.base();
+          this.entities = assign(Object.create(base.entities), other.entities);
+          this._parentWays = assign(Object.create(base.parentWays), other._parentWays);
+          this._parentRels = assign(Object.create(base.parentRels), other._parentRels);
 
+      } else {
+          this.entities = Object.create({});
+          this._parentWays = Object.create({});
+          this._parentRels = Object.create({});
+          this.rebase(other || [], [this]);
+      }
 
-      return validation;
+      this.transients = {};
+      this._childNodes = {};
+      this.frozen = !mutable;
   }
 
-  function validationDisconnectedHighway() {
 
-      function isDisconnectedHighway(entity, graph) {
-          if (!entity.tags.highway) return false;
-          if (entity.geometry(graph) !== 'line') return false;
+  coreGraph.prototype = {
 
-          return graph.childNodes(entity)
-              .every(function(vertex) {
-                  var parents = graph.parentWays(vertex);
-                  if (parents.length === 1) {  // standalone vertex
-                      return true;
-                  } else {                     // shared vertex
-                      return !vertex.tags.entrance &&
-                          parents.filter(function(parent) {
-                              return parent.tags.highway && parent !== entity;
-                          }).length === 0;
-                  }
-              });
-      }
+      hasEntity: function(id) {
+          return this.entities[id];
+      },
 
 
-      var validation = function(changes, graph) {
-          var warnings = [];
-          for (var i = 0; i < changes.created.length; i++) {
-              var entity = changes.created[i];
+      entity: function(id) {
+          var entity = this.entities[id];
 
-              if (isDisconnectedHighway(entity, graph)) {
-                  warnings.push({
-                      id: 'disconnected_highway',
-                      message: t('validations.disconnected_highway'),
-                      tooltip: t('validations.disconnected_highway_tooltip'),
-                      entity: entity
-                  });
-              }
+          //https://github.com/openstreetmap/iD/issues/3973#issuecomment-307052376
+          if (!entity) {
+              entity = this.entities.__proto__[id];  // eslint-disable-line no-proto
           }
 
-          return warnings;
-      };
+          if (!entity) {
+              throw new Error('entity ' + id + ' not found');
+          }
+          return entity;
+      },
 
 
-      return validation;
-  }
+      transient: function(entity, key, fn) {
+          var id = entity.id;
+          var transients = this.transients[id] || (this.transients[id] = {});
+
+          if (transients[key] !== undefined) {
+              return transients[key];
+          }
 
-  var discardNames = ["\\(historical\\)","^[0-9]+$","^agencja pocztowa$","^änderungsschneiderei$","^apotek(a|et)$","^(adler|bahnhof|brunnen|burg|bären|engel|hirsch|hubertus|kur|linden|löwen)(-| )?apotheke$","^(marien|markt|neue|park|rathaus|rats|rosen|schloss|sonnen|stadt|stern)(-| )?apotheke$","^alte (apotheke|post)$","^apotheke(\\sam\\smarkt)?$","^apteka$","^аптека","^atelier de couture$","^atm$","^auto serwis$","^bank(| spółdzielczy)$","^bar$","^bazar$","^bäckerei$","^bakery$","^(the )?barber(ia|shop|\\sshop)?$","^berber$","^biletomat$","^bistro$","^blumen(laden)?$","^bodega$","^borracharia$","^bo(u)?tique$","^boucherie(\\scharcuterie)?$","^boulangerie(\\sp(a|â)tisserie)?$","^bread$","^briefkasten$","^budget inn$","^(bureau de |)change$","^bureau de poste$","^büfé$","^caf(e|é)(t(e|é)r(i|í)a)?( )?(central)?$","^carnicer(i|í)a$","^central$","^centro naturista$","^cine(ma)?$","^cleaners$","^coiff(eur|ure)$","^coffee$","^colmado$","^commercial hotel$","^correos$","^currency exchange$","^d(ö|o)ner(\\skebab)?$","^drinks$","^droguer(i|í)a$","^eczane$","^el árbol$","^estanco$","^eisdiele","^eiscaf(e|é)(\\s(dolomiti|venezia))?$","^exchange$","^euroshop$","^élelmiszer$","^élelmiszerbolt$","^farm(a|à|á)ci(a|à|á|e)$","^fagyizó$","^fast food$","^fish (and|&) chips$","^fleuriste$","^florărie$","^food court$","^fris(eu|ö)r$","^fri(t|z)erie$","^frituur$","^fryzjer$","^frutería$","^funeraria$","^ferreter(i|í)a$","^game$","^garage$","^gasoline(ra)?$","^gast(haus|hof)\\s(krone|(zur)\\s(linde|post))?$","^getränkemarkt$","^gimnasio$","^gomer(i|í)a$","^gym(nase|nasium)?$","^gyógyszertár$","^haar(genau|monie|scharf)$","^hair\\s(design|lounge|salon)$","^hardware$","^(hof|dorf)laden$","^hospedaje$","^(h|m)otel$","^h(o|ô)tel\\s(astoria|central|europa|krone|panorama|plaza|royal|victoria|(zur\\s)?post|de france)$","^(central|city|europa|grand|palace|park|royal)(\\s)?hotel$","^húsbolt$","^indipend\\.$","^((drummed|independent)\\s)?(cng|filling|fuel|gas|lpg|petrol)(\\s(station|pump))?$","^istanbul(\\skebab)?$","^imbiss$","^internet cafe$","^kaf(e|é)$","^kios(co|k|ko|que)?$","^kantine$","^kantor$","^kebab(ai|\\shouse)?$","^kitchen$","^kisbolt$","^kwiaciarnia$","^ladestation$","^lékárna$","^librer(i|í)a$","^librairie$","^libro$","^ljekarna$","^lombard$","^lot 1$","^macelleria$","^mailbox$","^magazin","^market$","^mécanique$","^mercado$","^mini(\\s)?(abc|market|mart|mercado|pump)","municipal","^nails$","^obuwie$","^(okręgowa\\s)?stacja kontroli pojazdów$","^oplaadpunt$","^opti(c|k)a$","^optical center$","^padaria$","^panader(i|í)a$","^panificio$","^panorama$","^papeler(i|í)a$","^pa(r|cz)komat$","^parafarmacia$","^parkscheinautomat$","^parquímetro$","^peluquer(i|í)a$","^pharmac(ie|y)$","^piekarnia$","^pizz(eri)?a$","^piscine$","^poczta$","^po(s|š)t(a|e|o)$","^post(\\s)?(agentur|filiale|partner|office|stelle)?$","^punkt apteczny$","^pressing$","^rent a car$","^restaurant(e)?(\\suniversitário)?$","^rzeźnik$","^salle (omnisport|polyvalente)$","^(the\\s)?salo(o)?n( de coiffure| fryzjerski)?$","^second\\shand$","^shop$","^(coffee|pet|vulcanizing|gift)(\\sshop)?$","^sklep$","^(sklep\\s)?(spożywcz(y|o))(-przemysłowy)?$","^snack$","^souvenirs$","^stacja (benzynowa|paliw)$","^stadium$","^station service$","^steak house$","^stores?$","^(beer|convenience|corner|general|liquor|variety)(\\sstore)?$","^stromtankstelle$","^super ?america","^superm(arket|ercado)$","^sushi(\\s(bar|shop))?$","^tabaccher(i|í)a$","^taba(c|k)(os|chi)?(\\strafi(k|c))?$","^tacos$","^tankstelle$","^tattoo$","^taverna$","^tea stall$","^tienda(\\sde\\s(barrio|abarrotes))?$","^tokyo$","^trattoria$","^trafik(a)?$","^trinkhalle$","^ufficio postale$","^urząd pocztowy$","^vegyesbolt$","^venezia$","^večerka$","^virágbolt$","^vision\\splus$","^(clinica\\s)?veterinari(a|o)$","^(clinique\\s)?vétérinaire$","^warung$","^warzywniak$","^windmill$","^wok$","^wulkanizacja$","^zigarettenautomat$","^zöldséges$","^авто(рынок|ремонт|сервис|электрик|запчасти(ни)?)?$","^автома(г|газин|стерская)?$","^ателье$","^бистро$","^буфет$","^бассейн$","^ветеринарная клиника$","^ветлечебница$","^вулканизация$","^газ$","^газовая заправка$","^гостиница$","^главпочтамт$","^детский дом$","^ломбард$","^закусочная$","замена масла","^золото(й)?$","^зоо(магазин|товары)$","^канцтовары$","^касса$","^(летнее\\s)?кафе(терий)?$","^кофе(йня|\\sхауз)$","^книги$","^киоск$","^мебель$","^меблі$","^мороженое$","^оптика$","^овощи(\\sи\\s|-)фрукты$","^(спец|детская|женская)?(\\s)?одежда$","^(парикмахерская|персона|перукарня)$","^почта$","^почтовое отделение$","^подарки$","^пресса$","^(Проездные\\s)?билет(ы)?$","^продукт(ы|и)?$","^промтовары$","^ресторан$","^ремонт\\sобуви$","^рыб(a|олов)$","^ритуал(ьные услуги)?$","^салон красоты$","^сувениры$","^супермаркет$","^столовая$","^стройматериалы$","^социальный участковый$","^спорт(зал|комплекс)$","^табак(ерка)?$","^товары для дома$","^Уют$","^универ(маг|сам)$","^φαρμακείο$","^фармация$","^химчистка$","^хоз(товары|яюшка)$","шиномонтаж","^ша(ве|у)рма$","^نانوایی$","^نانوایی بربری$","^حلاق$","^مخبز(ة)?$","^مقهى$","^محط(ه|ة) وقود$","^میوه فروشی$","^داروخانه$","^بانک$","^بقال(ة)?$","^پمپ (بنزین|گاز)$","^سوپر\\s?مارکت$","^صيدلية$","^اداره پست$","^رستوران$","^مطعم$","^მარკეტი\\s\\(Market\\)","^דלק$","^カフェ$","^ポスト$","^珈琲館$","^加油站$","^郵局$","^食堂$","^(自動販売機|自販機)$","^体育館$"];
+          transients[key] = fn.call(entity);
 
-  function validationGenericName() {
+          return transients[key];
+      },
 
-      function isGenericName(entity) {
-          var name = entity.tags.name;
-          if (!name) return false;
 
-          var i, re;
+      parentWays: function(entity) {
+          var parents = this._parentWays[entity.id];
+          var result = [];
 
-          // test if the name is just the tag value (e.g. "park")
-          var keys = ['amenity', 'leisure', 'shop', 'man_made', 'tourism'];
-          for (i = 0; i < keys.length; i++) {
-              var val = entity.tags[keys[i]];
-              if (val && val.replace(/\_/g, ' ').toLowerCase() === name.toLowerCase()) {
-                  return name;
+          if (parents) {
+              for (var i = 0; i < parents.length; i++) {
+                  result.push(this.entity(parents[i]));
               }
           }
+          return result;
+      },
 
-          // test if the name is a generic name (e.g. "pizzaria")
-          for (i = 0; i < discardNames.length; i++) {
-              re = new RegExp(discardNames[i], 'i');
-              if (re.test(name)) {
-                  return name;
-              }
-          }
 
-          return false;
-      }
+      isPoi: function(entity) {
+          var parentWays = this._parentWays[entity.id];
+          return !parentWays || parentWays.length === 0;
+      },
+
 
+      isShared: function(entity) {
+          var parentWays = this._parentWays[entity.id];
+          return parentWays && parentWays.length > 1;
+      },
 
-      return function validation(changes) {
-          var warnings = [];
 
-          for (var i = 0; i < changes.created.length; i++) {
-              var change = changes.created[i];
-              var generic = isGenericName(change);
-              if (generic) {
-                  warnings.push({
-                      id: 'generic_name',
-                      message: t('validations.generic_name'),
-                      tooltip: t('validations.generic_name_tooltip', { name: generic }),
-                      entity: change
-                  });
+      parentRelations: function(entity) {
+          var parents = this._parentRels[entity.id];
+          var result = [];
+
+          if (parents) {
+              for (var i = 0; i < parents.length; i++) {
+                  result.push(this.entity(parents[i]));
               }
           }
+          return result;
+      },
 
-          return warnings;
-      };
-  }
-
-  function validationManyDeletions() {
-      var threshold = 100;
 
-      var validation = function(changes, graph) {
-          var warnings = [];
-          var nodes = 0, ways = 0, areas = 0, relations = 0;
+      childNodes: function(entity) {
+          if (this._childNodes[entity.id]) return this._childNodes[entity.id];
+          if (!entity.nodes) return [];
 
-          changes.deleted.forEach(function(c) {
-              if (c.type === 'node') { nodes++; }
-              else if (c.type === 'way' && c.geometry(graph) === 'line') { ways++; }
-              else if (c.type === 'way' && c.geometry(graph) === 'area') { areas++; }
-              else if (c.type === 'relation') { relations++; }
-          });
-          if (changes.deleted.length > threshold) {
-              warnings.push({
-                  id: 'many_deletions',
-                  message: t('validations.many_deletions',
-                      { n: changes.deleted.length, p: nodes, l: ways, a:areas, r: relations }
-                  )
-              });
+          var nodes = [];
+          for (var i = 0; i < entity.nodes.length; i++) {
+              nodes[i] = this.entity(entity.nodes[i]);
           }
 
-          return warnings;
-      };
-
+          this._childNodes[entity.id] = nodes;
+          return this._childNodes[entity.id];
+      },
 
-      return validation;
-  }
 
-  var localizeStrings = {"this node":"this_node","this way":"this_way","this relation":"this_relation","this one-way":"this_oneway","this highway":"this_highway","this railway":"this_railway","this waterway":"this_waterway","this cycleway":"this_cycleway","this footpath":"this_footpath","this cycleway/footpath":"this_cycleway_footpath","this riverbank":"this_riverbank","this crossing":"this_crossing","this railway crossing":"this_railway_crossing","this bridge":"this_bridge","this tunnel":"this_tunnel","this boundary":"this_boundary","this turn-restriction":"this_turn_restriction","this roundabout":"this_roundabout","this mini-roundabout":"this_mini_roundabout","this track":"this_track","this feature":"this_feature",highway:"highway",railway:"railway",waterway:"waterway",cycleway:"cycleway",cycleway_footpath:"cycleway/footpath",riverbank:"riverbank",place_of_worship:"place_of_worship",pub:"pub",restaurant:"restaurant",school:"school",university:"university",hospital:"hospital",library:"library",theatre:"theatre",courthouse:"courthouse",bank:"bank",cinema:"cinema",pharmacy:"pharmacy",cafe:"cafe",fast_food:"fast_food",fuel:"fuel",from:"from",to:"to","left-hand":"left_hand","right-hand":"right_hand"};
-  var errorTypes = {"20":{title:"multiple nodes on the same spot",severity:"warning",description:"There is more than one node in this spot. Offending node IDs: $1",IDs:["20"],regex:"IDs: ((?:#\\d+,?)+)"},"30":{title:"non-closed_areas",severity:"error",description:"This way is tagged with '$1' and should be closed-loop.",IDs:["this",""],regex:"(this way) is tagged with '(.+)'"},"40":{title:"dead-ended one-ways",severity:"error",description:"The first node (id $1) of this one-way is not connected to any other way",IDs:["n","this"],regex:"\\(id (\\d+)\\) of (this one-way)"},"41":{title:"",severity:"error",description:"The last node (id $1) of this one-way is not connected to any other way",IDs:["n","this"],regex:"\\(id (\\d+)\\) of (this one-way)"},"42":{title:"",severity:"error",description:"This node cannot be reached because one-ways only lead away from here",IDs:["this"],regex:"(this node)"},"43":{title:"",severity:"error",description:"You cannot escape from this node because one-ways only lead to here",IDs:["this"],regex:"(this node)"},"50":{title:"almost-junctions",severity:"error",description:"This node is very close but not connected to way #$1",IDs:["this","w"],regex:"(this node) is very close but not connected to way #(\\d+)"},"60":{title:"deprecated tags",severity:"warning",description:"This $1 uses deprecated tag $2. Please use $3 instead!",IDs:["this","",""],regex:"(this (?:node|way|relation)) uses deprecated tag '(.+)'\\. Please use &quot;(.+)&quot;"},"70":{title:"missing tags",severity:"error",description:"This $1 has an empty tag: $2",IDs:["this",""],regex:"(this (?:node|way|relation)) has an empty tag: &quot;(.+)=&quot;"},"71":{title:"",severity:"error",description:"This way has no tags",IDs:["this"],regex:"(this way)"},"72":{title:"",severity:"error",description:"This node is not member of any way and does not have any tags",IDs:["this"],regex:"(this node)"},"73":{title:"",severity:"error",description:"This way has a $1 tag but no highway tag",IDs:["this",""],regex:"(this way) has a (.+) tag"},"74":{title:"missing tags",severity:"error",description:"This $1 has an empty tag: $2",IDs:["this",""],regex:"(this (?:node|way|relation)) has an empty tag: &quot;(.+)=&quot;"},"75":{description:"This (node|way|relation) has a name \\((.+)\\) but no other tag",IDs:["this",""],regex:"(this (?:node|way|relation)) has a name \\((.+)\\)"},"90":{title:"motorways without ref",severity:"error",description:"This way is tagged as motorway and therefore needs a ref nat_ref or int_ref tag",IDs:["this"],regex:"(this way)"},"100":{title:"places of worship without religion",severity:"error",description:"This $1 is tagged as place of worship and therefore needs a religion tag",IDs:["this"],regex:"(this (?:node|way|relation))"},"110":{title:"point of interest without name",severity:"error",description:"This node is tagged as $1 and therefore needs a name tag",IDs:["this",""],regex:"(this (?:node|way|relation)) is tagged as (.+) and"},"120":{title:"ways without nodes",severity:"error",description:"This way has just one single node",IDs:["this"],regex:"(this way)"},"130":{title:"floating islands",severity:"error",description:"This way is not connected to the rest of the map",IDs:["this"],regex:"(this way)"},"150":{title:"railway crossing without tag",severity:"error",description:"This crossing of a highway and a railway needs to be tagged as railway=crossing or railway=level_crossing",IDs:["this"],regex:"(this crossing)"},"160":{title:"wrongly used railway tag",severity:"error",description:"There are ways in different layers coming together in this railway crossing. There are ways tagged as tunnel or bridge coming together in this railway crossing",IDs:["this"],regex:"(this railway crossing)"},"170":{title:"FIXME tagged items",severity:"error",description:"This feature has a FIXME tag: (.*)",IDs:["this"],regex:"(this feature) has a FIXME tag: (.*)"},"180":{title:"relations without type",severity:"error",description:"This relation has no type tag which is mandatory for relations",IDs:["this"],regex:"(this relation)"},"190":{title:"intersections without junctions",severity:"error",description:"This $1 intersects the $2 #$3 but there is no junction node",IDs:["this","","w"],regex:"(this .+) intersects the (.+) #(\\d+)"},"200":{title:"overlapping ways",severity:"error",description:"This $1 overlaps the $2 #$3",IDs:["this","","w"],regex:"(this .+) overlaps the (.+) #(\\d+)"},"210":{title:"loopings",severity:"error",description:"These errors contain self intersecting ways"},"211":{title:"",severity:"error",description:"This way contains more than one node at least twice. Nodes are $1.",IDs:["this","211"],regex:"(this way) contains more than one node at least twice. Nodes are ((?:#\\d+(?:, )?)+)\\."},"212":{title:"",severity:"error",description:"This way has only two different nodes and contains one of them more than once",IDs:["this"],regex:"(this way)"},"220":{title:"misspelled tags",severity:"error",description:"This $1 is tagged '$2' where $3 looks like $4",regex:"(this (?:node|way|relation)) is tagged '(.+)' where &quot;(.+)&quot; looks like &quot;(.+)&quot;"},"221":{title:"",severity:"error",description:"The key of this $1's tag is 'key': $2",regex:"(this (?:node|way|relation))\\'s tag is \\'key\\': (.+)"},"230":{title:"layer conflicts",severity:"error",description:"This node is a junction of ways on different layers.",IDs:["this"],regex:"(this node)"},"231":{title:"mixed layers intersection",severity:"error",description:"This node is a junction of ways on different layers: $1",IDs:["this","231"],regex:"(this node) is a junction of ways on different layers: (.+)"},"232":{title:"strange layers",severity:"error",description:"This $1 is tagged with layer $2. This need not be an error, but it looks strange",IDs:["this",""],regex:"(this (?:bridge|tunnel)) is tagged with layer (-?\\d+)\\."},"270":{title:"motorways connected directly",severity:"error",description:"This node is a junction of a motorway and a highway other than motorway, motorway_link, trunk, rest_area or construction. Service or unclassified is only valid if it has access=no/private or it leads to a motorway service area or if it is a service=parking_aisle.",IDs:["this"],regex:"(this node)"},"280":{title:"boundaries",severity:"error",description:"Administrative Boundaries can be expressed either by tagging ways or by adding them to a relation. They should be closed-loop sequences of ways, they must not self-intersect or split and they must have a name and an admin_level."},"281":{title:"missing name",severity:"error",description:"This boundary has no name",IDs:["this"],regex:"(this boundary)"},"282":{title:"missing admin level",severity:"error",description:"The boundary of $1 has no (?:valid numeric)?admin_level",regex:"of (.+) has"},"283":{title:"no closed loop",severity:"error",description:"The boundary of $1 is not closed-loop",regex:"boundary of (.+) is"},"284":{title:"splitting boundary",severity:"error",description:"The boundary of $1 splits here",regex:"boundary of (.+) splits"},"285":{title:"admin_level too high",severity:"error",description:"This boundary-way has admin_level $1 but belongs to a relation with lower admin_level (higher priority); it should have the lowest admin_level of all relations",IDs:["this",""],regex:"(this boundary)-way has admin_level (-?\\d+) but"},"290":{title:"restrictions",severity:"error",description:"Analyses all relations tagged type=restriction or following variations type=restriction:hgv type=restriction:caravan type=restriction:motorcar type=restriction:bus type=restriction:agricultural type=restriction:motorcycle type=restriction:bicycle and type=restriction:hazmat"},"291":{title:"missing type",severity:"error",description:"This turn-restriction has no (?:known )?restriction type",IDs:["this"],regex:"(this turn-restriction) has"},"292":{title:"missing from way",severity:"error",description:"This turn-restriction needs exactly one from member. This one has $1",IDs:["this",""],regex:"(this turn-restriction) needs.+has (\\d+)"},"293":{title:"missing to way",severity:"error",description:"This turn-restriction needs exactly one to member. This one has $1",IDs:["this",""],regex:"(this turn-restriction) needs.+has (\\d+)"},"294":{title:"from or to not a way",severity:"error",description:"From- and To-members of this turn-restriction need to be ways. $1",IDs:["this","294"],regex:"(this turn-restriction)~.+ways\\. ((?:(?:from|to) (?:node|relation) #\\d+,?)+)"},"295":{title:"via is not on the way ends",severity:"error",description:"via (node #$1) is not the first or the last member of (from|to) (way #$3)",IDs:["this","n","","w"],regex:"(this turn-restriction)~via \\(node #(\\d+)\\).+ of (from|to) \\(way #(\\d+)\\)"},"296":{title:"wrong restriction angle",severity:"error",description:"This turn-restriction type is $1, but angle is $2 degrees. Maybe the restriction type is not appropriate?",IDs:["this","",""],regex:"(this turn-restriction)~.+is (\\w+), but angle is (-?\\d+)"},"297":{title:"wrong direction of to member",severity:"error",description:"wrong direction of to way $1",IDs:["this","w"],regex:"(this turn-restriction)~.+to way (\\d+)"},"298":{title:"already restricted by oneway",severity:"error",description:"entry already prohibited by oneway tag on $1",IDs:["this","w"],regex:"(this turn-restriction)~.+tag on (\\d+)"},"300":{title:"missing maxspeed",severity:"warning",description:"This highway is missing a maxspeed tag",IDs:["this"],regex:"(this highway)"},"310":{title:"roundabouts",severity:"error",description:"Analyses ways with tag junction=roundabout. More then one way can form a roundabout. It supports tag oneway=-1"},"311":{title:"not closed loop",severity:"error",description:"This way is part of a roundabout but is not closed-loop. (split carriageways approaching a roundabout should not be tagged as roundabout)",IDs:["this"],regex:"(this way)"},"312":{title:"wrong direction",severity:"error",description:"If this ((?:mini_)?roundabout) is in a country with (left|right)-hand traffic then its orientation goes the wrong way around",IDs:["this",""],regex:"(this (?:mini_)?roundabout) is in a country with ((?:left|right)-hand)"},"313":{title:"faintly connected",severity:"error",description:"This roundabout has only $1 other roads connected. Roundabouts typically have three",IDs:["this",""],regex:"(this roundabout) has only (\\d) other"},"320":{title:"*_link connections",severity:"error",description:"This way is tagged as highway=$1_link but doesn't have a connection to any other $1 or $1_link",IDs:["this","","","",""],regex:"(this way) is tagged as (highway=.+) but doesn't have a connection to any other (.+) or (.+)"},"350":{title:"bridge-tags",severity:"error",description:"This bridge does not have a tag in common with its surrounding ways that shows the purpose of this bridge. There should be one of these tags: (.+)",NOTE:"Group can be arbitrary list of form: key=value,key=value,key=value...",IDs:["this",""],regex:"(this bridge).*tags: (.+)"},"360":{title:"language unknown",severity:"warning",description:"It would be nice if this (node|way|relation) had an additional tag 'name:XX=(.+)' where XX shows the language of its name '\\2'",IDs:["this",""],regex:"(this (?:node|way|relation)) had an additional tag 'name:XX=(.+)' where"},"370":{title:"doubled places",severity:"error",description:"This node has tags in common with the surrounding way #$1 ((?:\\(including the name '.+'\\) )?)and seems to be redundand",IDs:["this","w","370"],regex:"(this node) has tags in common with the surrounding way #(\\d+) ((?:\\(including the name '.+'\\) )?)and"},"380":{title:"non-physical use of sport-tag",severity:"error",description:"This way is tagged sport=$1 but has no physical tag like e.g. leisure, building, amenity or highway",IDs:["this",""],regex:"(this way) is tagged (sport=.+) but"},"390":{title:"missing tracktype",severity:"warning",description:"This track doesn''t have a tracktype",IDs:["this"],regex:"(this track)"},"400":{title:"geometry glitches",severity:"error",description:""},"401":{title:"missing turn restriction",severity:"error",description:"ways $1 and $2 join in a very sharp angle here and there is no oneway tag or turn restriction that prevents turning( from way (\\1|\\2) to (\\1|\\2))?",IDs:["w","w"],regex:"ways (\\d+) and (\\d+) join"},"402":{title:"impossible angles",severity:"error",description:"this way bends in a very sharp angle here",IDs:["this"],regex:"(this way)"},"410":{title:"website",severity:"error",description:"Web pages are analyzed. Web page is defined by any of the following tags website=* url=* website:mobile=* contact:website=* contact:url=* image=* source:website=* or source:url=*"},"411":{title:"http error",severity:"error",description:"The URL (<a target=_blank href=$1>$1</a>) cannot be opened (HTTP status code $2)",IDs:["this","url",""],regex:"(this feature)~.+ href=([^>]+)>.+ code (\\d+)\\)"},"412":{title:"domain hijacking",severity:"error",description:"Possible domain squatting: <a target=_blank href=$1>$1</a>. Suspicious text is: \"$2\"",IDs:["this","url",""],regex:"(this feature)~.+ href=([^>]+)>.+ is: &quot;(.+)&quot;"},"413":{title:"non-match",severity:"error",description:"Content of the URL (<a target=_blank href=$1>$1</a>) did not contain these keywords: ($2)",IDs:["this","url",""],regex:"(this feature)~.+ href=([^>]+)>.+ keywords: \\((.+)\\)"}};
+      base: function() {
+          return {
+              'entities': utilGetPrototypeOf(this.entities),
+              'parentWays': utilGetPrototypeOf(this._parentWays),
+              'parentRels': utilGetPrototypeOf(this._parentRels)
+          };
+      },
 
-  var tiler = utilTiler();
-  var dispatch$1 = dispatch('loaded');
 
-  var _krCache;
-  var _krZoom = 14;
-  var _krUrlRoot = 'https://www.keepright.at/';
+      // Unlike other graph methods, rebase mutates in place. This is because it
+      // is used only during the history operation that merges newly downloaded
+      // data into each state. To external consumers, it should appear as if the
+      // graph always contained the newly downloaded data.
+      rebase: function(entities, stack, force) {
+          var base = this.base();
+          var i, j, k, id;
 
-  var _krRuleset = [
-      // no 20 - multiple node on same spot - these are mostly boundaries overlapping roads
-      30, 40, 50, 60, 70, 90, 100, 110, 120, 130, 150, 160, 170, 180,
-      190, 191, 192, 193, 194, 195, 196, 197, 198,
-      200, 201, 202, 203, 204, 205, 206, 207, 208, 210, 220,
-      230, 231, 232, 270, 280, 281, 282, 283, 284, 285,
-      290, 291, 292, 293, 294, 295, 296, 297, 298, 300, 310, 311, 312, 313,
-      320, 350, 360, 370, 380, 390, 400, 401, 402, 410, 411, 412, 413
-  ];
+          for (i = 0; i < entities.length; i++) {
+              var entity = entities[i];
 
+              if (!entity.visible || (!force && base.entities[entity.id]))
+                  continue;
 
-  function abortRequest(i) {
-      if (i) {
-          i.abort();
-      }
-  }
+              // Merging data into the base graph
+              base.entities[entity.id] = entity;
+              this._updateCalculated(undefined, entity, base.parentWays, base.parentRels);
 
-  function abortUnwantedRequests(cache, tiles) {
-      forEach(cache.inflightTile, function(v, k) {
-          var wanted = find$1(tiles, function(tile) {
-              return k === tile.id;
-          });
-          if (!wanted) {
-              abortRequest(v);
-              delete cache.inflightTile[k];
+              // Restore provisionally-deleted nodes that are discovered to have an extant parent
+              if (entity.type === 'way') {
+                  for (j = 0; j < entity.nodes.length; j++) {
+                      id = entity.nodes[j];
+                      for (k = 1; k < stack.length; k++) {
+                          var ents = stack[k].entities;
+                          if (ents.hasOwnProperty(id) && ents[id] === undefined) {
+                              delete ents[id];
+                          }
+                      }
+                  }
+              }
           }
-      });
-  }
 
-
-  function encodeErrorRtree(d) {
-      return { minX: d.loc[0], minY: d.loc[1], maxX: d.loc[0], maxY: d.loc[1], data: d };
-  }
+          for (i = 0; i < stack.length; i++) {
+              stack[i]._updateRebased();
+          }
+      },
 
 
-  // replace or remove error from rtree
-  function updateRtree(item, replace) {
-      _krCache.rtree.remove(item, function isEql(a, b) {
-          return a.data.id === b.data.id;
-      });
+      _updateRebased: function() {
+          var base = this.base();
+          var i, k, child, id, keys;
 
-      if (replace) {
-          _krCache.rtree.insert(item);
-      }
-  }
+          keys = Object.keys(this._parentWays);
+          for (i = 0; i < keys.length; i++) {
+              child = keys[i];
+              if (base.parentWays[child]) {
+                  for (k = 0; k < base.parentWays[child].length; k++) {
+                      id = base.parentWays[child][k];
+                      if (!this.entities.hasOwnProperty(id) && !includes(this._parentWays[child], id)) {
+                          this._parentWays[child].push(id);
+                      }
+                  }
+              }
+          }
 
+          keys = Object.keys(this._parentRels);
+          for (i = 0; i < keys.length; i++) {
+              child = keys[i];
+              if (base.parentRels[child]) {
+                  for (k = 0; k < base.parentRels[child].length; k++) {
+                      id = base.parentRels[child][k];
+                      if (!this.entities.hasOwnProperty(id) && !includes(this._parentRels[child], id)) {
+                          this._parentRels[child].push(id);
+                      }
+                  }
+              }
+          }
 
-  function tokenReplacements(d) {
-      if (!(d instanceof krError)) return;
+          this.transients = {};
 
-      var htmlRegex = new RegExp(/<\/[a-z][\s\S]*>/);
-      var replacements = {};
+          // this._childNodes is not updated, under the assumption that
+          // ways are always downloaded with their child nodes.
+      },
 
-      var errorTemplate = errorTypes[d.which_type];
-      if (!errorTemplate) {
-          /* eslint-disable no-console */
-          console.log('No Template: ', d.which_type);
-          console.log('  ', d.description);
-          /* eslint-enable no-console */
-          return;
-      }
 
-      // some descriptions are just fixed text
-      if (!errorTemplate.regex) return;
+      // Updates calculated properties (parentWays, parentRels) for the specified change
+      _updateCalculated: function(oldentity, entity, parentWays, parentRels) {
+          parentWays = parentWays || this._parentWays;
+          parentRels = parentRels || this._parentRels;
 
-      // regex pattern should match description with variable details captured
-      var errorRegex = new RegExp(errorTemplate.regex, 'i');
-      var errorMatch = errorRegex.exec(d.description);
-      if (!errorMatch) {
-          /* eslint-disable no-console */
-          console.log('Unmatched: ', d.which_type);
-          console.log('  ', d.description);
-          console.log('  ', errorRegex);
-          /* eslint-enable no-console */
-          return;
-      }
+          var type = entity && entity.type || oldentity && oldentity.type;
+          var removed, added, ways, rels, i;
 
-      for (var i = 1; i < errorMatch.length; i++) {   // skip first
-          var capture = errorMatch[i];
-          var idType;
+          if (type === 'way') {   // Update parentWays
+              if (oldentity && entity) {
+                  removed = difference(oldentity.nodes, entity.nodes);
+                  added = difference(entity.nodes, oldentity.nodes);
+              } else if (oldentity) {
+                  removed = oldentity.nodes;
+                  added = [];
+              } else if (entity) {
+                  removed = [];
+                  added = entity.nodes;
+              }
+              for (i = 0; i < removed.length; i++) {
+                  parentWays[removed[i]] = without(parentWays[removed[i]], oldentity.id);
+              }
+              for (i = 0; i < added.length; i++) {
+                  ways = without(parentWays[added[i]], entity.id);
+                  ways.push(entity.id);
+                  parentWays[added[i]] = ways;
+              }
 
-          idType = 'IDs' in errorTemplate ? errorTemplate.IDs[i-1] : '';
-          if (idType && capture) {   // link IDs if present in the capture
-              capture = parseError(capture, idType);
-          } else if (htmlRegex.test(capture)) {   // escape any html in non-IDs
-              capture = '\\' +  capture + '\\';
-          } else {
-              var compare = capture.toLowerCase();
-              if (localizeStrings[compare]) {   // some replacement strings can be localized
-                  capture = t('QA.keepRight.error_parts.' + localizeStrings[compare]);
+          } else if (type === 'relation') {   // Update parentRels
+              if (oldentity && entity) {
+                  removed = difference(oldentity.members, entity.members);
+                  added = difference(entity.members, oldentity);
+              } else if (oldentity) {
+                  removed = oldentity.members;
+                  added = [];
+              } else if (entity) {
+                  removed = [];
+                  added = entity.members;
+              }
+              for (i = 0; i < removed.length; i++) {
+                  parentRels[removed[i].id] = without(parentRels[removed[i].id], oldentity.id);
+              }
+              for (i = 0; i < added.length; i++) {
+                  rels = without(parentRels[added[i].id], entity.id);
+                  rels.push(entity.id);
+                  parentRels[added[i].id] = rels;
               }
           }
+      },
 
-          replacements['var' + i] = capture;
-      }
 
-      return replacements;
-  }
+      replace: function(entity) {
+          if (this.entities[entity.id] === entity) return this;
 
+          return this.update(function() {
+              this._updateCalculated(this.entities[entity.id], entity);
+              this.entities[entity.id] = entity;
+          });
+      },
 
-  function parseError(capture, idType) {
-      var compare = capture.toLowerCase();
-      if (localizeStrings[compare]) {   // some replacement strings can be localized
-          capture = t('QA.keepRight.error_parts.' + localizeStrings[compare]);
-      }
 
-      switch (idType) {
-          // link a string like "this node"
-          case 'this':
-              capture = linkErrorObject(capture);
-              break;
+      remove: function(entity) {
+          return this.update(function() {
+              this._updateCalculated(entity, undefined);
+              this.entities[entity.id] = undefined;
+          });
+      },
 
-          case 'url':
-              capture = linkURL(capture);
-              break;
 
-          // link an entity ID
-          case 'n':
-          case 'w':
-          case 'r':
-              capture = linkEntity(idType + capture);
-              break;
+      revert: function(id) {
+          var baseEntity = this.base().entities[id];
+          var headEntity = this.entities[id];
+          if (headEntity === baseEntity) return this;
 
-          // some errors have more complex ID lists/variance
-          case '20':
-              capture = parse20(capture);
-              break;
-          case '211':
-              capture = parse211(capture);
-              break;
-          case '231':
-              capture = parse231(capture);
-              break;
-          case '294':
-              capture = parse294(capture);
-              break;
-          case '370':
-              capture = parse370(capture);
-              break;
-      }
+          return this.update(function() {
+              this._updateCalculated(headEntity, baseEntity);
+              delete this.entities[id];
+          });
+      },
 
-      return capture;
 
+      update: function() {
+          var graph = this.frozen ? coreGraph(this, true) : this;
+          for (var i = 0; i < arguments.length; i++) {
+              arguments[i].call(graph, graph);
+          }
 
-      function linkErrorObject(d) {
-          return '<a class="kr_error_object_link">' + d + '</a>';
-      }
+          if (this.frozen) graph.frozen = true;
 
-      function linkEntity(d) {
-          return '<a class="kr_error_entity_link">' + d + '</a>';
-      }
+          return graph;
+      },
 
-      function linkURL(d) {
-          return '<a class="kr_external_link" target="_blank" href="' + d + '">' + d + '</a>';
+
+      // Obliterates any existing entities
+      load: function(entities) {
+          var base = this.base();
+          this.entities = Object.create(base.entities);
+
+          for (var i in entities) {
+              this.entities[i] = entities[i];
+              this._updateCalculated(base.entities[i], this.entities[i]);
+          }
+
+          return this;
       }
+  };
 
-      // arbitrary node list of form: #ID, #ID, #ID...
-      function parse211(capture) {
-          var newList = [];
-          var items = capture.split(', ');
+  function coreTree(head) {
+      var rtree = rbush_1(),
+          bboxes = {},
+          tree = {};
 
-          items.forEach(function(item) {
-              // ID has # at the front
-              var id = linkEntity('n' + item.slice(1));
-              newList.push(id);
-          });
 
-          return newList.join(', ');
+      function entityBBox(entity) {
+          var bbox = entity.extent(head).bbox();
+          bbox.id = entity.id;
+          bboxes[entity.id] = bbox;
+          return bbox;
       }
 
-      // arbitrary way list of form: #ID(layer),#ID(layer),#ID(layer)...
-      function parse231(capture) {
-          var newList = [];
-          // unfortunately 'layer' can itself contain commas, so we split on '),'
-          var items = capture.split('),');
 
-          items.forEach(function(item) {
-              var match = item.match(/\#(\d+)\((.+)\)?/);
-              if (match !== null && match.length > 2) {
-                  newList.push(linkEntity('w' + match[1]) + ' ' +
-                      t('QA.keepRight.errorTypes.231.layer', { layer: match[2] })
-                  );
+      function updateParents(entity, insertions, memo) {
+          head.parentWays(entity).forEach(function(way) {
+              if (bboxes[way.id]) {
+                  rtree.remove(bboxes[way.id]);
+                  insertions[way.id] = way;
               }
+              updateParents(way, insertions, memo);
           });
 
-          return newList.join(', ');
+          head.parentRelations(entity).forEach(function(relation) {
+              if (memo[entity.id]) return;
+              memo[entity.id] = true;
+              if (bboxes[relation.id]) {
+                  rtree.remove(bboxes[relation.id]);
+                  insertions[relation.id] = relation;
+              }
+              updateParents(relation, insertions, memo);
+          });
       }
 
-      // arbitrary node/relation list of form: from node #ID,to relation #ID,to node #ID...
-      function parse294(capture) {
-          var newList = [];
-          var items = capture.split(',');
 
-          items.forEach(function(item) {
-              var role;
-              var idType;
-              var id;
+      tree.rebase = function(entities, force) {
+          var insertions = {};
 
-              // item of form "from/to node/relation #ID"
-              item = item.split(' ');
+          for (var i = 0; i < entities.length; i++) {
+              var entity = entities[i];
 
-              // to/from role is more clear in quotes
-              role = '"' + item[0] + '"';
+              if (!entity.visible)
+                  continue;
 
-              // first letter of node/relation provides the type
-              idType = item[1].slice(0,1);
+              if (head.entities.hasOwnProperty(entity.id) || bboxes[entity.id]) {
+                  if (!force) {
+                      continue;
+                  } else if (bboxes[entity.id]) {
+                      rtree.remove(bboxes[entity.id]);
+                  }
+              }
 
-              // ID has # at the front
-              id = item[2].slice(1);
-              id = linkEntity(idType + id);
+              insertions[entity.id] = entity;
+              updateParents(entity, insertions, {});
+          }
 
-              item = [role, item[1], id].join(' ');
-              newList.push(item);
-          });
+          rtree.load(map$3(insertions, entityBBox));
 
-          return newList.join(', ');
-      }
+          return tree;
+      };
 
-      // may or may not include the string "(including the name 'name')"
-      function parse370(capture) {
-          if (!capture) return '';
 
-          var match = capture.match(/\(including the name (\'.+\')\)/);
-          if (match !== null && match.length) {
-              return t('QA.keepRight.errorTypes.370.including_the_name', { name: match[1] });
-          }
-          return '';
-      }
+      tree.intersects = function(extent, graph) {
+          if (graph !== head) {
+              var diff = coreDifference(head, graph),
+                  insertions = {};
 
-      // arbitrary node list of form: #ID,#ID,#ID...
-      function parse20(capture) {
-          var newList = [];
-          var items = capture.split(',');
+              head = graph;
 
-          items.forEach(function(item) {
-              // ID has # at the front
-              var id = linkEntity('n' + item.slice(1));
-              newList.push(id);
+              diff.deleted().forEach(function(entity) {
+                  rtree.remove(bboxes[entity.id]);
+                  delete bboxes[entity.id];
+              });
+
+              diff.modified().forEach(function(entity) {
+                  rtree.remove(bboxes[entity.id]);
+                  insertions[entity.id] = entity;
+                  updateParents(entity, insertions, {});
+              });
+
+              diff.created().forEach(function(entity) {
+                  insertions[entity.id] = entity;
+              });
+
+              rtree.load(map$3(insertions, entityBBox));
+          }
+
+          return rtree.search(extent.bbox()).map(function(bbox) {
+              return head.entity(bbox.id);
           });
+      };
 
-          return newList.join(', ');
-      }
+
+      return tree;
   }
 
+  var _tooltipID = 0;
 
-  var serviceKeepRight = {
-      init: function() {
-          if (!_krCache) {
-              this.reset();
+  function tooltip() {
+      var _id = _tooltipID++;
+      var tooltip = function(selection) {
+          selection.each(setup);
+      };
+      var _animation = utilFunctor(false);
+      var _title = function() {
+          var title = this.getAttribute('data-original-title');
+          if (title) {
+              return title;
+          } else {
+              title = this.getAttribute('title');
+              this.removeAttribute('title');
+              this.setAttribute('data-original-title', title);
           }
+          return title;
+      };
+      var _html = utilFunctor(false);
+      var _placement = utilFunctor('top');
 
-          this.event = utilRebind(this, dispatch$1, 'on');
-      },
 
-      reset: function() {
-          if (_krCache) {
-              forEach(_krCache.inflightTile, abortRequest);
+      tooltip.title = function(val) {
+          if (arguments.length) {
+              _title = utilFunctor(val);
+              return tooltip;
+          } else {
+              return _title;
           }
-          _krCache = {
-              data: {},
-              loadedTile: {},
-              inflightTile: {},
-              inflightPost: {},
-              closed: {},
-              rtree: rbush_1()
-          };
-      },
+      };
 
 
-      // KeepRight API:  http://osm.mueschelsoft.de/keepright/interfacing.php
-      loadErrors: function(projection) {
-          var options = { format: 'geojson' };
-          var rules = _krRuleset.join();
+      tooltip.html = function(val) {
+          if (arguments.length) {
+              _html = utilFunctor(val);
+              return tooltip;
+          } else {
+              return _html;
+          }
+      };
 
-          // determine the needed tiles to cover the view
-          var tiles = tiler
-              .zoomExtent([_krZoom, _krZoom])
-              .getTiles(projection);
 
-          // abort inflight requests that are no longer needed
-          abortUnwantedRequests(_krCache, tiles);
+      tooltip.placement = function(val) {
+          if (arguments.length) {
+              _placement = utilFunctor(val);
+              return tooltip;
+          } else {
+              return _placement;
+          }
+      };
 
-          // issue new requests..
-          tiles.forEach(function(tile) {
-              if (_krCache.loadedTile[tile.id] || _krCache.inflightTile[tile.id]) return;
 
-              var rect = tile.extent.rectangle();
-              var params = assignIn({}, options, { left: rect[0], bottom: rect[3], right: rect[2], top: rect[1] });
-              var url = _krUrlRoot + 'export.php?' + utilQsString(params) + '&ch=' + rules;
+      tooltip.show = function(selection) {
+          selection.each(show);
+      };
 
-              _krCache.inflightTile[tile.id] = d3_json(url,
-                  function(err, data) {
-                      delete _krCache.inflightTile[tile.id];
 
-                      if (err) return;
-                      _krCache.loadedTile[tile.id] = true;
+      tooltip.hide = function(selection) {
+          selection.each(hide);
+      };
 
-                      if (!data.features || !data.features.length) return;
 
-                      data.features.forEach(function(feature) {
-                          var loc = feature.geometry.coordinates;
-                          var props = feature.properties;
+      tooltip.toggle = function(selection) {
+          selection.each(toggle);
+      };
 
-                          // if there is a parent, save its error type e.g.:
-                          //  Error 191 = "highway-highway"
-                          //  Error 190 = "intersections without junctions"  (parent)
-                          var errorType = props.error_type;
-                          var errorTemplate = errorTypes[errorType];
-                          var parentErrorType = (Math.floor(errorType / 10) * 10).toString();
 
-                          // try to handle error type directly, fallback to parent error type.
-                          var whichType = errorTemplate ? errorType : parentErrorType;
-                          var whichTemplate = errorTypes[whichType];
+      tooltip.destroy = function(selection, selector) {
+          // by default, just destroy the current tooltip
+          selector = selector || '.tooltip-' + _id;
 
-                          // Rewrite a few of the errors at this point..
-                          // This is done to make them easier to linkify and translate.
-                          switch (whichType) {
-                              case '170':
-                                  props.description = 'This feature has a FIXME tag: ' + props.description;
-                                  break;
-                              case '292':
-                              case '293':
-                                  props.description = props.description.replace('A turn-', 'This turn-');
-                                  break;
-                              case '294':
-                              case '295':
-                              case '296':
-                              case '297':
-                              case '298':
-                                  props.description = 'This turn-restriction~' + props.description;
-                                  break;
-                              case '300':
-                                  props.description = 'This highway is missing a maxspeed tag';
-                                  break;
-                              case '411':
-                              case '412':
-                              case '413':
-                                  props.description = 'This feature~' + props.description;
-                                  break;
-                          }
+          selection
+              .on('mouseenter.tooltip', null)
+              .on('mouseleave.tooltip', null)
+              .attr('title', function() {
+                  return this.getAttribute('data-original-title') || this.getAttribute('title');
+              })
+              .attr('data-original-title', null)
+              .selectAll(selector)
+              .remove();
+      };
 
-                          // - move markers slightly so it doesn't obscure the geometry,
-                          // - then move markers away from other coincident markers
-                          var coincident = false;
-                          do {
-                              // first time, move marker up. after that, move marker right.
-                              var delta = coincident ? [0.00001, 0] : [0, 0.00001];
-                              loc = geoVecAdd(loc, delta);
-                              var bbox = geoExtent$$1(loc).bbox();
-                              coincident = _krCache.rtree.search(bbox).length;
-                          } while (coincident);
 
-                          var d = new krError({
-                              loc: loc,
-                              id: props.error_id,
-                              comment: props.comment || null,
-                              description: props.description || '',
-                              error_id: props.error_id,
-                              which_type: whichType,
-                              error_type: errorType,
-                              parent_error_type: parentErrorType,
-                              severity: whichTemplate.severity || 'error',
-                              object_id: props.object_id,
-                              object_type: props.object_type,
-                              schema: props.schema,
-                              title: props.title
-                          });
+      tooltip.destroyAny = function(selection) {
+          selection.call(tooltip.destroy, '.tooltip');
+      };
 
-                          d.replacements = tokenReplacements(d);
 
-                          _krCache.data[d.id] = d;
-                          _krCache.rtree.insert(encodeErrorRtree(d));
-                      });
+      function setup() {
+          var root = select(this);
+          var animate = _animation.apply(this, arguments);
+          var tip = root.selectAll('.tooltip-' + _id)
+              .data([0]);
 
-                      dispatch$1.call('loaded');
-                  }
-              );
-          });
-      },
+          var enter = tip.enter()
+              .append('div')
+              .attr('class', 'tooltip tooltip-' + _id);
 
+          enter
+              .append('div')
+              .attr('class', 'tooltip-arrow');
 
-      postKeepRightUpdate: function(d, callback) {
-          if (_krCache.inflightPost[d.id]) {
-              return callback({ message: 'Error update already inflight', status: -2 }, d);
-          }
+          enter
+              .append('div')
+              .attr('class', 'tooltip-inner');
 
-          var that = this;
-          var params = { schema: d.schema, id: d.error_id };
+          tip = enter
+              .merge(tip);
 
-          if (d.state) {
-              params.st = d.state;
-          }
-          if (d.newComment !== undefined) {
-              params.co = d.newComment;
+          if (animate) {
+              tip.classed('fade', true);
           }
 
-          // NOTE: This throws a CORS err, but it seems successful.
-          // We don't care too much about the response, so this is fine.
-          var url = _krUrlRoot + 'comment.php?' + utilQsString(params);
-          _krCache.inflightPost[d.id] = request(url)
-              .post(function(err) {
-                  delete _krCache.inflightPost[d.id];
-
-                  if (d.state === 'ignore') {   // ignore permanently (false positive)
-                      that.removeError(d);
+          var place = _placement.apply(this, arguments);
+          tip.classed(place, true);
 
-                  } else if (d.state === 'ignore_t') {  // ignore temporarily (error fixed)
-                      that.removeError(d);
-                      _krCache.closed[d.schema + ':' + d.error_id] = true;
+          root.on('mouseenter.tooltip', show);
+          root.on('mouseleave.tooltip', hide);
+      }
 
-                  } else {
-                      d = that.replaceError(d.update({
-                          comment: d.newComment,
-                          newComment: undefined,
-                          state: undefined
-                      }));
-                  }
 
-                  return callback(err, d);
-              });
+      function show() {
+          var root = select(this);
+          var content = _title.apply(this, arguments);
+          var tip = root.selectAll('.tooltip-' + _id);
 
-      },
+          if (tip.empty()) {   // tooltip was removed somehow, put it back
+              root.call(tooltip.destroy);
+              root.each(setup);
+              tip = root.selectAll('.tooltip-' + _id);
+          }
 
+          tip.classed('in', true);
+          var markup = _html.apply(this, arguments);
 
-      // get all cached errors covering the viewport
-      getErrors: function(projection) {
-          var viewport = projection.clipExtent();
-          var min = [viewport[0][0], viewport[1][1]];
-          var max = [viewport[1][0], viewport[0][1]];
-          var bbox = geoExtent$$1(projection.invert(min), projection.invert(max)).bbox();
+          tip.selectAll('.tooltip-inner')[markup ? 'html' : 'text'](content);
+          var place = _placement.apply(this, arguments);
+          var outer = getPosition(root.node());
+          var inner = getPosition(tip.node());
+          var pos;
 
-          return _krCache.rtree.search(bbox).map(function(d) {
-              return d.data;
-          });
-      },
+          switch (place) {
+              case 'top':
+              pos = { x: outer.x + (outer.w - inner.w) / 2, y: outer.y - inner.h };
+              break;
+              case 'right':
+              pos = { x: outer.x + outer.w, y: outer.y + (outer.h - inner.h) / 2 };
+              break;
+              case 'left':
+              pos = { x: outer.x - inner.w, y: outer.y + (outer.h - inner.h) / 2 };
+              break;
+              case 'bottom':
+              pos = { x: Math.max(0, outer.x + (outer.w - inner.w) / 2), y: outer.y + outer.h };
+              break;
+          }
 
+          if (pos) {
+              tip.style('left', ~~pos.x + 'px').style('top', ~~pos.y + 'px');
+          } else {
+              tip.style('left', null).style('top', null);
+          }
 
-      // get a single error from the cache
-      getError: function(id) {
-          return _krCache.data[id];
-      },
+          this.tooltipVisible = true;
 
 
-      // replace a single error in the cache
-      replaceError: function(error) {
-          if (!(error instanceof krError) || !error.id) return;
+          function getPosition(node) {
+              var mode = select(node).style('position');
+              if (mode === 'absolute' || mode === 'static') {
+                  return {
+                      x: node.offsetLeft,
+                      y: node.offsetTop,
+                      w: node.offsetWidth,
+                      h: node.offsetHeight
+                  };
+              } else {
+                  return {
+                      x: 0,
+                      y: 0,
+                      w: node.offsetWidth,
+                      h: node.offsetHeight
+                  };
+              }
+          }
+      }
 
-          _krCache.data[error.id] = error;
-          updateRtree(encodeErrorRtree(error), true); // true = replace
-          return error;
-      },
 
+      function hide() {
+          select(this).selectAll('.tooltip-' + _id).classed('in', false);
+          this.tooltipVisible = false;
+      }
 
-      // remove a single error from the cache
-      removeError: function(error) {
-          if (!(error instanceof krError) || !error.id) return;
 
-          delete _krCache.data[error.id];
-          updateRtree(encodeErrorRtree(error), false); // false = remove
-      },
+      function toggle() {
+          if (this.tooltipVisible) {
+              hide.apply(this, arguments);
+          } else {
+              show.apply(this, arguments);
+          }
+      }
 
 
-      errorURL: function(error) {
-          return _krUrlRoot + 'report_map.php?schema=' + error.schema + '&error=' + error.id;
-      },
+      return tooltip;
+  }
 
+  function behaviorEdit(context) {
 
-      // Get an array of errors closed during this session.
-      // Used to populate `closed:keepright` changeset tag
-      getClosedIDs: function() {
-          return Object.keys(_krCache.closed).sort();
+      function behavior() {
+          context.map()
+              .minzoom(context.minEditableZoom());
       }
 
-  };
 
-  function svgAreas$$1(projection, 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 = {
-          // tag - pattern name
-          // -or-
-          // tag - value - pattern name
-          // -or-
-          // tag - value - rules (optional tag-values, pattern name)
-          // (matches earlier rules first, so fallback should be last entry)
-          amenity: {
-              grave_yard: 'cemetery',
-              fountain: 'water_standing'
-          },
-          landuse: {
-              cemetery: [
-                  { religion: 'christian', pattern: 'cemetery_christian' },
-                  { religion: 'buddhist', pattern: 'cemetery_buddhist' },
-                  { religion: 'muslim', pattern: 'cemetery_muslim' },
-                  { religion: 'jewish', pattern: 'cemetery_jewish' },
-                  { pattern: 'cemetery' }
-              ],
-              construction: 'construction',
-              farmland: 'farmland',
-              farmyard: 'farmyard',
-              forest: [
-                  { leaf_type: 'broadleaved', pattern: 'forest_broadleaved' },
-                  { leaf_type: 'needleleaved', pattern: 'forest_needleleaved' },
-                  { leaf_type: 'leafless', pattern: 'forest_leafless' },
-                  { pattern: 'forest' } // same as 'leaf_type:mixed'
-              ],
-              grave_yard: 'cemetery',
-              grass: 'grass',
-              landfill: 'landfill',
-              meadow: 'meadow',
-              military: 'construction',
-              orchard: 'orchard',
-              reservoir: 'water_standing',
-              quarry: 'quarry',
-              vineyard: 'vineyard'
-          },
-          natural: {
-              beach: 'beach',
-              grassland: 'grass',
-              sand: 'beach',
-              scrub: 'scrub',
-              water: [
-                  { water: 'pond', pattern: 'pond' },
-                  { water: 'reservoir', pattern: 'water_standing' },
-                  { pattern: 'waves' }
-              ],
-              wetland: [
-                  { wetland: 'marsh', pattern: 'wetland_marsh' },
-                  { wetland: 'swamp', pattern: 'wetland_swamp' },
-                  { wetland: 'bog', pattern: 'wetland_bog' },
-                  { wetland: 'reedbed', pattern: 'wetland_reedbed' },
-                  { pattern: 'wetland' }
-              ],
-              wood: [
-                  { leaf_type: 'broadleaved', pattern: 'forest_broadleaved' },
-                  { leaf_type: 'needleleaved', pattern: 'forest_needleleaved' },
-                  { leaf_type: 'leafless', pattern: 'forest_leafless' },
-                  { pattern: 'forest' } // same as 'leaf_type:mixed'
-              ]
-          },
-          traffic_calming: {
-              island: [
-                  { surface: 'grass', pattern: 'grass' },
-              ],
-              chicane: [
-                  { surface: 'grass', pattern: 'grass' },
-              ],
-              choker: [
-                  { surface: 'grass', pattern: 'grass' },
-              ]
-          }
+      behavior.off = function() {
+          context.map()
+              .minzoom(0);
       };
 
-      function setPattern(entity) {
-          // Skip pattern filling if this is a building (buildings don't get patterns applied)
-          if (entity.tags.building && entity.tags.building !== 'no') {
-              this.style.fill = this.style.stroke = '';
-              return;
-          }
+      return behavior;
+  }
 
-          for (var tag in patterns) {
-              var entityValue = entity.tags[tag];
-              if (!entityValue) continue;
+  /*
+     The hover behavior adds the `.hover` class on mouseover to all elements to which
+     the identical datum is bound, and removes it on mouseout.
 
-              if (typeof patterns[tag] === 'string') { // extra short syntax (just tag) - pattern name
-                  this.style.fill = this.style.stroke = 'url("#pattern-' + patterns[tag] + '")';
-                  return;
-              } else {
-                  var values = patterns[tag];
-                  for (var value in values) {
-                      if (entityValue !== value) continue;
+     The :hover pseudo-class is insufficient for iD's purposes because a datum's visual
+     representation may consist of several elements scattered throughout the DOM hierarchy.
+     Only one of these elements can have the :hover pseudo-class, but all of them will
+     have the .hover class.
+   */
+  function behaviorHover(context) {
+      var dispatch$1 = dispatch('hover');
+      var _selection = select(null);
+      var _newNodeId = null;
+      var _initialNodeId = null;
+      var _buttonDown;
+      var _altDisables;
+      var _ignoreVertex;
+      var _target;
 
-                      var rules = values[value];
-                      if (typeof rules === 'string') { // short syntax - pattern name
-                          this.style.fill = this.style.stroke = 'url("#pattern-' + rules + '")';
-                          return;
-                      } else { // long syntax - rule array
-                          for (var ruleKey in rules) {
-                              var rule = rules[ruleKey];
 
-                              var pass = true;
-                              for (var criterion in rule) {
-                                  if (criterion !== 'pattern') { // reserved for pattern name
-                                      // The only rule is a required tag-value pair
-                                      var v = entity.tags[criterion];
-                                      if (!v || v !== rule[criterion]) {
-                                          pass = false;
-                                          break;
-                                      }
-                                  }
-                              }
+      function keydown() {
+          if (_altDisables && event.keyCode === utilKeybinding.modifierCodes.alt) {
+              _selection.selectAll('.hover')
+                  .classed('hover-suppressed', true)
+                  .classed('hover', false);
 
-                              if (pass) {
-                                  this.style.fill = this.style.stroke = 'url("#pattern-' + rule.pattern + '")';
-                                  return;
-                              }
-                          }
-                      }
-                  }
-              }
-          }
+              _selection
+                  .classed('hover-disabled', true);
 
-          this.style.fill = this.style.stroke = '';
+              dispatch$1.call('hover', this, null);
+          }
       }
 
 
-      function drawTargets(selection, graph, entities, filter) {
-          var targetClass = context.getDebug('target') ? 'pink ' : 'nocolor ';
-          var nopeClass = context.getDebug('target') ? 'red ' : 'nocolor ';
-          var getPath = svgPath(projection).geojson;
-          var activeID = context.activeID();
+      function keyup() {
+          if (_altDisables && event.keyCode === utilKeybinding.modifierCodes.alt) {
+              _selection.selectAll('.hover-suppressed')
+                  .classed('hover-suppressed', false)
+                  .classed('hover', true);
 
-          // The targets and nopes will be MultiLineString sub-segments of the ways
-          var data = { targets: [], nopes: [] };
+              _selection
+                  .classed('hover-disabled', false);
 
-          entities.forEach(function(way) {
-              var features = svgSegmentWay(way, graph, activeID);
-              data.targets.push.apply(data.targets, features.passive);
-              data.nopes.push.apply(data.nopes, features.active);
-          });
+              dispatch$1.call('hover', this, _target ? _target.id : null);
+          }
+      }
 
 
-          // Targets allow hover and vertex snapping
-          var targetData = data.targets.filter(getPath);
-          var targets = selection.selectAll('.area.target-allowed')
-              .filter(function(d) { return filter(d.properties.entity); })
-              .data(targetData, function key(d) { return d.id; });
+      function behavior(selection) {
+          _selection = selection;
 
-          // exit
-          targets.exit()
-              .remove();
+          if (_initialNodeId) {
+              _newNodeId = _initialNodeId;
+              _initialNodeId = null;
+          } else {
+              _newNodeId = null;
+          }
 
-          // enter/update
-          targets.enter()
-              .append('path')
-              .merge(targets)
-              .attr('d', getPath)
-              .attr('class', function(d) { return 'way area target target-allowed ' + targetClass + d.id; });
+          _selection
+              .on('mouseover.hover', mouseover)
+              .on('mouseout.hover', mouseout)
+              .on('mousedown.hover', mousedown);
 
+          select(window)
+              .on('keydown.hover', keydown)
+              .on('keyup.hover', keyup);
 
-          // NOPE
-          var nopeData = data.nopes.filter(getPath);
-          var nopes = selection.selectAll('.area.target-nope')
-              .filter(function(d) { return filter(d.properties.entity); })
-              .data(nopeData, function key(d) { return d.id; });
 
-          // exit
-          nopes.exit()
-              .remove();
+          function mouseover() {
+              if (_buttonDown) return;
+              var target = event.target;
+              enter(target ? target.__data__ : null);
+          }
 
-          // enter/update
-          nopes.enter()
-              .append('path')
-              .merge(nopes)
-              .attr('d', getPath)
-              .attr('class', function(d) { return 'way area target target-nope ' + nopeClass + d.id; });
-      }
 
+          function mouseout() {
+              if (_buttonDown) return;
+              var target = event.relatedTarget;
+              enter(target ? target.__data__ : null);
+          }
 
-      function drawAreas(selection, graph, entities, filter) {
-          var path = svgPath(projection, graph, true);
-          var areas = {};
-          var multipolygon;
 
-          for (var i = 0; i < entities.length; i++) {
-              var entity = entities[i];
-              if (entity.geometry(graph) !== 'area') continue;
+          function mousedown() {
+              _buttonDown = true;
+              select(window)
+                  .on('mouseup.hover', mouseup, true);
+          }
 
-              multipolygon = osmIsSimpleMultipolygonOuterMember(entity, graph);
-              if (multipolygon) {
-                  areas[multipolygon.id] = {
-                      entity: multipolygon.mergeTags(entity.tags),
-                      area: Math.abs(entity.area(graph))
-                  };
-              } else if (!areas[entity.id]) {
-                  areas[entity.id] = {
-                      entity: entity,
-                      area: Math.abs(entity.area(graph))
-                  };
-              }
+
+          function mouseup() {
+              _buttonDown = false;
+              select(window)
+                  .on('mouseup.hover', null, true);
           }
 
-          areas = values$1(areas).filter(function hasPath(a) { return path(a.entity); });
-          areas.sort(function areaSort(a, b) { return b.area - a.area; });
-          areas = map$3(areas, 'entity');
+          function enter(datum) {
+              if (datum === _target) return;
+              _target = datum;
 
-          var strokes = areas.filter(function(area) {
-              return area.type === 'way';
-          });
+              _selection.selectAll('.hover')
+                  .classed('hover', false);
+              _selection.selectAll('.hover-suppressed')
+                  .classed('hover-suppressed', false);
 
-          var data = {
-              clip: areas,
-              shadow: strokes,
-              stroke: strokes,
-              fill: areas
-          };
+              // What are we hovering over?
+              var entity, selector;
+              if (datum && datum.__featurehash__) {
+                  entity = datum;
+                  selector = '.data' + datum.__featurehash__;
 
-          var clipPaths = context.surface().selectAll('defs').selectAll('.clipPath-osm')
-             .filter(filter)
-             .data(data.clip, osmEntity$$1.key);
+              } else if (datum instanceof qaError) {
+                  entity = datum;
+                  selector = '.' + datum.service + '.error_id-' + datum.id;
 
-          clipPaths.exit()
-             .remove();
+              } else if (datum instanceof osmNote) {
+                  entity = datum;
+                  selector = '.note-' + datum.id;
 
-          var clipPathsEnter = clipPaths.enter()
-             .append('clipPath')
-             .attr('class', 'clipPath-osm')
-             .attr('id', function(entity) { return entity.id + '-clippath'; });
+              } else if (datum instanceof osmEntity) {
+                  entity = datum;
+                  selector = '.' + entity.id;
+                  if (entity.type === 'relation') {
+                      entity.members.forEach(function(member) { selector += ', .' + member.id; });
+                  }
+              } else if (datum && datum.properties && (datum.properties.entity instanceof osmEntity)) {
+                  entity = datum.properties.entity;
+                  selector = '.' + entity.id;
+                  if (entity.type === 'relation') {
+                      entity.members.forEach(function(member) { selector += ', .' + member.id; });
+                  }
+              }
 
-          clipPathsEnter
-             .append('path');
+              // Update hover state and dispatch event
+              if (entity && entity.id !== _newNodeId) {
+                  // If drawing a way, don't hover on a node that was just placed. #3974
+                  var mode = context.mode() && context.mode().id;
+                  if ((mode === 'draw-line' || mode === 'draw-area') && !_newNodeId && entity.type === 'node') {
+                      _newNodeId = entity.id;
+                      return;
+                  }
 
-          clipPaths.merge(clipPathsEnter)
-             .selectAll('path')
-             .attr('d', path);
+                  var suppressed = (_altDisables && event && event.altKey) ||
+                      (entity.type === 'node' && _ignoreVertex && !context.presets().allowsVertex(entity, context.graph()));
+                  _selection.selectAll(selector)
+                      .classed(suppressed ? 'hover-suppressed' : 'hover', true);
 
+                  dispatch$1.call('hover', this, !suppressed && entity);
 
-          var drawLayer = selection.selectAll('.layer-osm.areas');
-          var touchLayer = selection.selectAll('.layer-touch.areas');
+              } else {
+                  dispatch$1.call('hover', this, null);
+              }
+          }
+      }
 
-          // Draw areas..
-          var areagroup = drawLayer
-              .selectAll('g.areagroup')
-              .data(['fill', 'shadow', 'stroke']);
 
-          areagroup = areagroup.enter()
-              .append('g')
-              .attr('class', function(d) { return 'areagroup area-' + d; })
-              .merge(areagroup);
+      behavior.off = function(selection) {
+          selection.selectAll('.hover')
+              .classed('hover', false);
+          selection.selectAll('.hover-suppressed')
+              .classed('hover-suppressed', false);
+          selection
+              .classed('hover-disabled', false);
 
-          var paths = areagroup
-              .selectAll('path')
-              .filter(filter)
-              .data(function(layer) { return data[layer]; }, osmEntity$$1.key);
+          selection
+              .on('mouseover.hover', null)
+              .on('mouseout.hover', null)
+              .on('mousedown.hover', null);
 
-          paths.exit()
-              .remove();
+          select(window)
+              .on('keydown.hover', null)
+              .on('keyup.hover', null);
+      };
 
-          var fills = selection.selectAll('.area-fill path.area').nodes();
 
-          var bisect = bisector(function(node) {
-              return -node.__data__.area(graph);
-          }).left;
+      behavior.altDisables = function(val) {
+          if (!arguments.length) return _altDisables;
+          _altDisables = val;
+          return behavior;
+      };
 
-          function sortedByArea(entity) {
-              if (this._parent.__data__ === 'fill') {
-                  return fills[bisect(fills, -entity.area(graph))];
-              }
-          }
+      behavior.ignoreVertex = function(val) {
+          if (!arguments.length) return _ignoreVertex;
+          _ignoreVertex = val;
+          return behavior;
+      };
 
-          paths = paths.enter()
-              .insert('path', sortedByArea)
-              .merge(paths)
-              .each(function(entity) {
-                  var layer = this.parentNode.__data__;
-                  this.setAttribute('class', entity.type + ' area ' + layer + ' ' + entity.id);
+      behavior.initialNodeId = function(nodeId) {
+          _initialNodeId = nodeId;
+          return behavior;
+      };
 
-                  if (layer === 'fill') {
-                      this.setAttribute('clip-path', 'url(#' + entity.id + '-clippath)');
-                      setPattern.call(this, entity);
-                  }
-              })
-              .call(svgTagClasses())
-              .attr('d', path);
+      return utilRebind(behavior, dispatch$1, 'on');
+  }
 
+  function refresh(selection, node) {
+      var cr = node.getBoundingClientRect();
+      var prop = [cr.width, cr.height];
+      selection.property('__dimensions__', prop);
+      return prop;
+  }
 
-          // Draw touch targets..
-          touchLayer
-              .call(drawTargets, graph, data.stroke, filter);
+  function utilGetDimensions(selection, force) {
+      if (!selection || selection.empty()) {
+          return [0, 0];
       }
-
-      return drawAreas;
+      var node = selection.node(),
+          cached = selection.property('__dimensions__');
+      return (!cached || force) ? refresh(selection, node) : cached;
   }
 
-  /**
-   * A specialized version of `_.reduce` for arrays without support for
-   * iteratee shorthands.
-   *
-   * @private
-   * @param {Array} [array] The array to iterate over.
-   * @param {Function} iteratee The function invoked per iteration.
-   * @param {*} [accumulator] The initial value.
-   * @param {boolean} [initAccum] Specify using the first element of `array` as
-   *  the initial value.
-   * @returns {*} Returns the accumulated value.
-   */
-  function arrayReduce(array, iteratee, accumulator, initAccum) {
-    var index = -1,
-        length = array == null ? 0 : array.length;
 
-    if (initAccum && length) {
-      accumulator = array[++index];
-    }
-    while (++index < length) {
-      accumulator = iteratee(accumulator, array[index], index, array);
-    }
-    return accumulator;
+  function utilSetDimensions(selection, dimensions) {
+      if (!selection || selection.empty()) {
+          return selection;
+      }
+      var node = selection.node();
+      if (dimensions === null) {
+          refresh(selection, node);
+          return selection;
+      }
+      return selection
+          .property('__dimensions__', [dimensions[0], dimensions[1]])
+          .attr('width', dimensions[0])
+          .attr('height', dimensions[1]);
   }
 
-  /**
-   * The base implementation of `_.reduce` and `_.reduceRight`, without support
-   * for iteratee shorthands, which iterates over `collection` using `eachFunc`.
-   *
-   * @private
-   * @param {Array|Object} collection The collection to iterate over.
-   * @param {Function} iteratee The function invoked per iteration.
-   * @param {*} accumulator The initial value.
-   * @param {boolean} initAccum Specify using the first or last element of
-   *  `collection` as the initial value.
-   * @param {Function} eachFunc The function to iterate over `collection`.
-   * @returns {*} Returns the accumulated value.
-   */
-  function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) {
-    eachFunc(collection, function(value, index, collection) {
-      accumulator = initAccum
-        ? (initAccum = false, value)
-        : iteratee(accumulator, value, index, collection);
-    });
-    return accumulator;
-  }
+  function behaviorTail() {
+      var container;
+      var xmargin = 25;
+      var tooltipSize = [0, 0];
+      var selectionSize = [0, 0];
+      var _text;
 
-  /**
-   * Reduces `collection` to a value which is the accumulated result of running
-   * each element in `collection` thru `iteratee`, where each successive
-   * invocation is supplied the return value of the previous. If `accumulator`
-   * is not given, the first element of `collection` is used as the initial
-   * value. The iteratee is invoked with four arguments:
-   * (accumulator, value, index|key, collection).
-   *
-   * Many lodash methods are guarded to work as iteratees for methods like
-   * `_.reduce`, `_.reduceRight`, and `_.transform`.
-   *
-   * The guarded methods are:
-   * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`,
-   * and `sortBy`
-   *
-   * @static
-   * @memberOf _
-   * @since 0.1.0
-   * @category Collection
-   * @param {Array|Object} collection The collection to iterate over.
-   * @param {Function} [iteratee=_.identity] The function invoked per iteration.
-   * @param {*} [accumulator] The initial value.
-   * @returns {*} Returns the accumulated value.
-   * @see _.reduceRight
-   * @example
-   *
-   * _.reduce([1, 2], function(sum, n) {
-   *   return sum + n;
-   * }, 0);
-   * // => 3
-   *
-   * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {
-   *   (result[value] || (result[value] = [])).push(key);
-   *   return result;
-   * }, {});
-   * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed)
-   */
-  function reduce(collection, iteratee, accumulator) {
-    var func = isArray(collection) ? arrayReduce : baseReduce,
-        initAccum = arguments.length < 3;
 
-    return func(collection, baseIteratee(iteratee, 4), accumulator, initAccum, baseEach);
-  }
+      function behavior(selection) {
+          if (!_text) return;
 
-  /** Error message constants. */
-  var FUNC_ERROR_TEXT$3 = 'Expected a function';
+          select(window)
+              .on('resize.tail', function() { selectionSize = utilGetDimensions(selection); });
 
-  /**
-   * Creates a throttled function that only invokes `func` at most once per
-   * every `wait` milliseconds. The throttled function comes with a `cancel`
-   * method to cancel delayed `func` invocations and a `flush` method to
-   * immediately invoke them. Provide `options` to indicate whether `func`
-   * should be invoked on the leading and/or trailing edge of the `wait`
-   * timeout. The `func` is invoked with the last arguments provided to the
-   * throttled function. Subsequent calls to the throttled function return the
-   * result of the last `func` invocation.
-   *
-   * **Note:** If `leading` and `trailing` options are `true`, `func` is
-   * invoked on the trailing edge of the timeout only if the throttled function
-   * is invoked more than once during the `wait` timeout.
-   *
-   * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred
-   * until to the next tick, similar to `setTimeout` with a timeout of `0`.
-   *
-   * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)
-   * for details over the differences between `_.throttle` and `_.debounce`.
-   *
-   * @static
-   * @memberOf _
-   * @since 0.1.0
-   * @category Function
-   * @param {Function} func The function to throttle.
-   * @param {number} [wait=0] The number of milliseconds to throttle invocations to.
-   * @param {Object} [options={}] The options object.
-   * @param {boolean} [options.leading=true]
-   *  Specify invoking on the leading edge of the timeout.
-   * @param {boolean} [options.trailing=true]
-   *  Specify invoking on the trailing edge of the timeout.
-   * @returns {Function} Returns the new throttled function.
-   * @example
-   *
-   * // Avoid excessively updating the position while scrolling.
-   * jQuery(window).on('scroll', _.throttle(updatePosition, 100));
-   *
-   * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes.
-   * var throttled = _.throttle(renewToken, 300000, { 'trailing': false });
-   * jQuery(element).on('click', throttled);
-   *
-   * // Cancel the trailing throttled invocation.
-   * jQuery(window).on('popstate', throttled.cancel);
-   */
-  function throttle(func, wait, options) {
-    var leading = true,
-        trailing = true;
+          container = select(document.body)
+              .append('div')
+              .style('display', 'none')
+              .attr('class', 'tail tooltip-inner');
 
-    if (typeof func != 'function') {
-      throw new TypeError(FUNC_ERROR_TEXT$3);
-    }
-    if (isObject(options)) {
-      leading = 'leading' in options ? !!options.leading : leading;
-      trailing = 'trailing' in options ? !!options.trailing : trailing;
-    }
-    return debounce(func, wait, {
-      'leading': leading,
-      'maxWait': wait,
-      'trailing': trailing
-    });
-  }
+          container.append('div')
+              .text(_text);
 
-  var fastJsonStableStringify = function (data, opts) {
-      if (!opts) opts = {};
-      if (typeof opts === 'function') opts = { cmp: opts };
-      var cycles = (typeof opts.cycles === 'boolean') ? opts.cycles : false;
+          selection
+              .on('mousemove.tail', mousemove)
+              .on('mouseenter.tail', mouseenter)
+              .on('mouseleave.tail', mouseleave);
 
-      var cmp = opts.cmp && (function (f) {
-          return function (node) {
-              return function (a, b) {
-                  var aobj = { key: a, value: node[a] };
-                  var bobj = { key: b, value: node[b] };
-                  return f(aobj, bobj);
-              };
-          };
-      })(opts.cmp);
+          container
+              .on('mousemove.tail', mousemove);
 
-      var seen = [];
-      return (function stringify (node) {
-          if (node && node.toJSON && typeof node.toJSON === 'function') {
-              node = node.toJSON();
+          tooltipSize = utilGetDimensions(container);
+          selectionSize = utilGetDimensions(selection);
+
+
+          function show() {
+              container.style('display', 'block');
+              tooltipSize = utilGetDimensions(container);
           }
 
-          if (node === undefined) return;
-          if (typeof node == 'number') return isFinite(node) ? '' + node : 'null';
-          if (typeof node !== 'object') return JSON.stringify(node);
 
-          var i, out;
-          if (Array.isArray(node)) {
-              out = '[';
-              for (i = 0; i < node.length; i++) {
-                  if (i) out += ',';
-                  out += stringify(node[i]) || 'null';
-              }
-              return out + ']';
+          function mousemove() {
+              if (container.style('display') === 'none') show();
+              var xoffset = ((event.clientX + tooltipSize[0] + xmargin) > selectionSize[0]) ?
+                  -tooltipSize[0] - xmargin : xmargin;
+              container.classed('left', xoffset > 0);
+              utilSetTransform(container, event.clientX + xoffset, event.clientY);
           }
 
-          if (node === null) return 'null';
 
-          if (seen.indexOf(node) !== -1) {
-              if (cycles) return JSON.stringify('__cycle__');
-              throw new TypeError('Converting circular structure to JSON');
+          function mouseleave() {
+              if (event.relatedTarget !== container.node()) {
+                  container.style('display', 'none');
+              }
           }
 
-          var seenIndex = seen.push(node) - 1;
-          var keys = Object.keys(node).sort(cmp && cmp(node));
-          out = '';
-          for (i = 0; i < keys.length; i++) {
-              var key = keys[i];
-              var value = stringify(node[key]);
 
-              if (!value) continue;
-              if (out) out += ',';
-              out += JSON.stringify(key) + ':' + value;
+          function mouseenter() {
+              if (event.relatedTarget !== container.node()) {
+                  show();
+              }
           }
-          seen.splice(seenIndex, 1);
-          return '{' + out + '}';
-      })(data);
-  };
+      }
 
-  //[4]        NameStartChar      ::=          ":" | [A-Z] | "_" | [a-z] | [#xC0-#xD6] | [#xD8-#xF6] | [#xF8-#x2FF] | [#x370-#x37D] | [#x37F-#x1FFF] | [#x200C-#x200D] | [#x2070-#x218F] | [#x2C00-#x2FEF] | [#x3001-#xD7FF] | [#xF900-#xFDCF] | [#xFDF0-#xFFFD] | [#x10000-#xEFFFF]
-  //[4a]       NameChar           ::=          NameStartChar | "-" | "." | [0-9] | #xB7 | [#x0300-#x036F] | [#x203F-#x2040]
-  //[5]        Name       ::=          NameStartChar (NameChar)*
-  var nameStartChar = /[A-Z_a-z\xC0-\xD6\xD8-\xF6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD]/;//\u10000-\uEFFFF
-  var nameChar = new RegExp("[\\-\\.0-9"+nameStartChar.source.slice(1,-1)+"\\u00B7\\u0300-\\u036F\\u203F-\\u2040]");
-  var tagNamePattern = new RegExp('^'+nameStartChar.source+nameChar.source+'*(?:\:'+nameStartChar.source+nameChar.source+'*)?$');
-  //var tagNamePattern = /^[a-zA-Z_][\w\-\.]*(?:\:[a-zA-Z_][\w\-\.]*)?$/
-  //var handlers = 'resolveEntity,getExternalSubset,characters,endDocument,endElement,endPrefixMapping,ignorableWhitespace,processingInstruction,setDocumentLocator,skippedEntity,startDocument,startElement,startPrefixMapping,notationDecl,unparsedEntityDecl,error,fatalError,warning,attributeDecl,elementDecl,externalEntityDecl,internalEntityDecl,comment,endCDATA,endDTD,endEntity,startCDATA,startDTD,startEntity'.split(',')
 
-  //S_TAG,     S_ATTR, S_EQ,   S_ATTR_NOQUOT_VALUE
-  //S_ATTR_SPACE,      S_ATTR_END,     S_TAG_SPACE, S_TAG_CLOSE
-  var S_TAG = 0;//tag name offerring
-  var S_ATTR = 1;//attr name offerring 
-  var S_ATTR_SPACE=2;//attr name end and space offer
-  var S_EQ = 3;//=space?
-  var S_ATTR_NOQUOT_VALUE = 4;//attr value(no quot value only)
-  var S_ATTR_END = 5;//attr value end and no space(quot end)
-  var S_TAG_SPACE = 6;//(attr value end || tag end ) && (space offer)
-  var S_TAG_CLOSE = 7;//closed el<el />
+      behavior.off = function(selection) {
+          if (!_text) return;
 
-  function XMLReader(){
-       
-  }
+          container
+              .on('mousemove.tail', null)
+              .remove();
 
-  XMLReader.prototype = {
-       parse:function(source,defaultNSMap,entityMap){
-               var domBuilder = this.domBuilder;
-               domBuilder.startDocument();
-               _copy(defaultNSMap ,defaultNSMap = {});
-               parse(source,defaultNSMap,entityMap,
-                               domBuilder,this.errorHandler);
-               domBuilder.endDocument();
-       }
-  };
-  function parse(source,defaultNSMapCopy,entityMap,domBuilder,errorHandler){
-       function fixedFromCharCode(code) {
-               // String.prototype.fromCharCode does not supports
-               // > 2 bytes unicode chars directly
-               if (code > 0xffff) {
-                       code -= 0x10000;
-                       var surrogate1 = 0xd800 + (code >> 10)
-                               , surrogate2 = 0xdc00 + (code & 0x3ff);
+          selection
+              .on('mousemove.tail', null)
+              .on('mouseenter.tail', null)
+              .on('mouseleave.tail', null);
 
-                       return String.fromCharCode(surrogate1, surrogate2);
-               } else {
-                       return String.fromCharCode(code);
-               }
-       }
-       function entityReplacer(a){
-               var k = a.slice(1,-1);
+          select(window)
+              .on('resize.tail', null);
+      };
+
+
+      behavior.text = function(val) {
+          if (!arguments.length) return _text;
+          _text = val;
+          return behavior;
+      };
+
+
+      return behavior;
+  }
+
+  var _usedTails = {};
+  var _disableSpace = false;
+  var _lastSpace = null;
+
+
+  function behaviorDraw(context) {
+      var dispatch$1 = dispatch(
+          'move', 'click', 'clickWay', 'clickNode', 'undo', 'cancel', 'finish'
+      );
+
+      var keybinding = utilKeybinding('draw');
+
+      var _hover = behaviorHover(context).altDisables(true).ignoreVertex(true)
+          .on('hover', context.ui().sidebar.hover);
+      var tail = behaviorTail();
+      var edit = behaviorEdit(context);
+
+      var closeTolerance = 4;
+      var tolerance = 12;
+      var _mouseLeave = false;
+      var _lastMouse = null;
+
+
+      // related code
+      // - `mode/drag_node.js` `datum()`
+      function datum() {
+          var mode = context.mode();
+          var isNote = mode && (mode.id.indexOf('note') !== -1);
+          if (event.altKey || isNote) return {};
+
+          var element;
+          if (event.type === 'keydown') {
+              element = _lastMouse && _lastMouse.target;
+          } else {
+              element = event.target;
+          }
+
+          // When drawing, snap only to touch targets..
+          // (this excludes area fills and active drawing elements)
+          var d = element.__data__;
+          return (d && d.properties && d.properties.target) ? d : {};
+      }
+
+
+      function mousedown() {
+
+          function point() {
+              var p = context.container().node();
+              return touchId !== null ? d3_touches(p).filter(function(p) {
+                  return p.identifier === touchId;
+              })[0] : mouse(p);
+          }
+
+          var element = select(this);
+          var touchId = event.touches ? event.changedTouches[0].identifier : null;
+          var t1 = +new Date();
+          var p1 = point();
+
+          element.on('mousemove.draw', null);
+
+          select(window).on('mouseup.draw', function() {
+              var t2 = +new Date();
+              var p2 = point();
+              var dist = geoVecLength(p1, p2);
+
+              element.on('mousemove.draw', mousemove);
+              select(window).on('mouseup.draw', null);
+
+              if (dist < closeTolerance || (dist < tolerance && (t2 - t1) < 500)) {
+                  // Prevent a quick second click
+                  select(window).on('click.draw-block', function() {
+                      event.stopPropagation();
+                  }, true);
+
+                  context.map().dblclickEnable(false);
+
+                  window.setTimeout(function() {
+                      context.map().dblclickEnable(true);
+                      select(window).on('click.draw-block', null);
+                  }, 500);
+
+                  click();
+              }
+          }, true);
+      }
+
+
+      function mousemove() {
+          _lastMouse = event;
+          dispatch$1.call('move', this, datum());
+      }
+
+
+      function mouseenter() {
+          _mouseLeave = false;
+      }
+
+
+      function mouseleave() {
+          _mouseLeave = true;
+      }
+
+      function allowsVertex(d) {
+          return isEmpty(d.tags) || context.presets().allowsVertex(d, context.graph());
+      }
+
+      // related code
+      // - `mode/drag_node.js`     `doMode()`
+      // - `behavior/draw.js`      `click()`
+      // - `behavior/draw_way.js`  `move()`
+      function click() {
+          var d = datum();
+          var target = d && d.properties && d.properties.entity;
+
+          if (target && target.type === 'node' && allowsVertex(target)) {   // Snap to a node
+              dispatch$1.call('clickNode', this, target, d);
+              return;
+
+          } else if (target && target.type === 'way') {   // Snap to a way
+              var choice = geoChooseEdge(
+                  context.childNodes(target), context.mouse(), context.projection, context.activeID()
+              );
+              if (choice) {
+                  var edge = [target.nodes[choice.index - 1], target.nodes[choice.index]];
+                  dispatch$1.call('clickWay', this, choice.loc, edge, d);
+                  return;
+              }
+          }
+          dispatch$1.call('click', this, context.map().mouseCoordinates(), d);
+      }
+
+
+      function space() {
+          event.preventDefault();
+          event.stopPropagation();
+
+          var currSpace = context.mouse();
+          if (_disableSpace && _lastSpace) {
+              var dist = geoVecLength(_lastSpace, currSpace);
+              if (dist > tolerance) {
+                  _disableSpace = false;
+              }
+          }
+
+          if (_disableSpace || _mouseLeave || !_lastMouse) return;
+
+          // user must move mouse or release space bar to allow another click
+          _lastSpace = currSpace;
+          _disableSpace = true;
+
+          select(window).on('keyup.space-block', function() {
+              event.preventDefault();
+              event.stopPropagation();
+              _disableSpace = false;
+              select(window).on('keyup.space-block', null);
+          });
+
+          click();
+      }
+
+
+      function backspace() {
+          event.preventDefault();
+          dispatch$1.call('undo');
+      }
+
+
+      function del() {
+          event.preventDefault();
+          dispatch$1.call('cancel');
+      }
+
+
+      function ret() {
+          event.preventDefault();
+          dispatch$1.call('finish');
+      }
+
+
+      function behavior(selection) {
+          context.install(_hover);
+          context.install(edit);
+
+          if (!context.inIntro() && !_usedTails[tail.text()]) {
+              context.install(tail);
+          }
+
+          keybinding
+              .on('⌫', backspace)
+              .on('⌦', del)
+              .on('⎋', ret)
+              .on('↩', ret)
+              .on('space', space)
+              .on('⌥space', space);
+
+          selection
+              .on('mouseenter.draw', mouseenter)
+              .on('mouseleave.draw', mouseleave)
+              .on('mousedown.draw', mousedown)
+              .on('mousemove.draw', mousemove);
+
+          select(document)
+              .call(keybinding);
+
+          return behavior;
+      }
+
+
+      behavior.off = function(selection) {
+          context.ui().sidebar.hover.cancel();
+          context.uninstall(_hover);
+          context.uninstall(edit);
+
+          if (!context.inIntro() && !_usedTails[tail.text()]) {
+              context.uninstall(tail);
+              _usedTails[tail.text()] = true;
+          }
+
+          selection
+              .on('mouseenter.draw', null)
+              .on('mouseleave.draw', null)
+              .on('mousedown.draw', null)
+              .on('mousemove.draw', null);
+
+          select(window)
+              .on('mouseup.draw', null);
+              // note: keyup.space-block, click.draw-block should remain
+
+          select(document)
+              .call(keybinding.unbind);
+      };
+
+
+      behavior.tail = function(_) {
+          tail.text(_);
+          return behavior;
+      };
+
+      behavior.hover = function() {
+          return _hover;
+      };
+
+
+      return utilRebind(behavior, dispatch$1, 'on');
+  }
+
+  function modeAddArea(context) {
+      var mode = {
+          id: 'add-area',
+          button: 'area',
+          title: t('modes.add_area.title'),
+          description: t('modes.add_area.description'),
+          key: '3'
+      };
+
+      var behavior = behaviorAddWay(context)
+          .tail(t('modes.add_area.tail'))
+          .on('start', start)
+          .on('startFromWay', startFromWay)
+          .on('startFromNode', startFromNode);
+
+      var defaultTags = { area: 'yes' };
+
+
+      function actionClose(wayId) {
+          return function (graph) {
+              return graph.replace(graph.entity(wayId).close());
+          };
+      }
+
+
+      function start(loc) {
+          var startGraph = context.graph();
+          var node = osmNode({ loc: loc });
+          var way = osmWay({ tags: defaultTags });
+
+          context.perform(
+              actionAddEntity(node),
+              actionAddEntity(way),
+              actionAddVertex(way.id, node.id),
+              actionClose(way.id)
+          );
+
+          context.enter(modeDrawArea(context, way.id, startGraph, context.graph()));
+      }
+
+
+      function startFromWay(loc, edge) {
+          var startGraph = context.graph();
+          var node = osmNode({ loc: loc });
+          var way = osmWay({ tags: defaultTags });
+
+          context.perform(
+              actionAddEntity(node),
+              actionAddEntity(way),
+              actionAddVertex(way.id, node.id),
+              actionClose(way.id),
+              actionAddMidpoint({ loc: loc, edge: edge }, node)
+          );
+
+          context.enter(modeDrawArea(context, way.id, startGraph, context.graph()));
+      }
+
+
+      function startFromNode(node) {
+          var startGraph = context.graph();
+          var way = osmWay({ tags: defaultTags });
+
+          context.perform(
+              actionAddEntity(way),
+              actionAddVertex(way.id, node.id),
+              actionClose(way.id)
+          );
+
+          context.enter(modeDrawArea(context, way.id, startGraph, context.graph()));
+      }
+
+
+      mode.enter = function() {
+          context.install(behavior);
+      };
+
+
+      mode.exit = function() {
+          context.uninstall(behavior);
+      };
+
+
+      return mode;
+  }
+
+  function modeAddLine(context) {
+      var mode = {
+          id: 'add-line',
+          button: 'line',
+          title: t('modes.add_line.title'),
+          description: t('modes.add_line.description'),
+          key: '2'
+      };
+
+      var behavior = behaviorAddWay(context)
+          .tail(t('modes.add_line.tail'))
+          .on('start', start)
+          .on('startFromWay', startFromWay)
+          .on('startFromNode', startFromNode);
+
+
+      function start(loc) {
+          var startGraph = context.graph();
+          var node = osmNode({ loc: loc });
+          var way = osmWay();
+
+          context.perform(
+              actionAddEntity(node),
+              actionAddEntity(way),
+              actionAddVertex(way.id, node.id)
+          );
+
+          context.enter(modeDrawLine(context, way.id, startGraph, context.graph()));
+      }
+
+
+      function startFromWay(loc, edge) {
+          var startGraph = context.graph();
+          var node = osmNode({ loc: loc });
+          var way = osmWay();
+
+          context.perform(
+              actionAddEntity(node),
+              actionAddEntity(way),
+              actionAddVertex(way.id, node.id),
+              actionAddMidpoint({ loc: loc, edge: edge }, node)
+          );
+
+          context.enter(modeDrawLine(context, way.id, startGraph, context.graph()));
+      }
+
+
+      function startFromNode(node) {
+          var startGraph = context.graph();
+          var way = osmWay();
+
+          context.perform(
+              actionAddEntity(way),
+              actionAddVertex(way.id, node.id)
+          );
+
+          context.enter(modeDrawLine(context, way.id, startGraph, context.graph()));
+      }
+
+
+      mode.enter = function() {
+          context.install(behavior);
+      };
+
+
+      mode.exit = function() {
+          context.uninstall(behavior);
+      };
+
+      return mode;
+  }
+
+  function modeAddPoint(context) {
+      var mode = {
+          id: 'add-point',
+          button: 'point',
+          title: t('modes.add_point.title'),
+          description: t('modes.add_point.description'),
+          key: '1'
+      };
+
+      var behavior = behaviorDraw(context)
+          .tail(t('modes.add_point.tail'))
+          .on('click', add)
+          .on('clickWay', addWay)
+          .on('clickNode', addNode)
+          .on('cancel', cancel)
+          .on('finish', cancel);
+
+
+      function add(loc) {
+          var node = osmNode({ loc: loc });
+
+          context.perform(
+              actionAddEntity(node),
+              t('operations.add.annotation.point')
+          );
+
+          context.enter(
+              modeSelect(context, [node.id]).newFeature(true)
+          );
+      }
+
+
+      function addWay(loc, edge) {
+          var node =  osmNode();
+
+          context.perform(
+              actionAddMidpoint({loc: loc, edge: edge}, node),
+              t('operations.add.annotation.vertex')
+          );
+
+          context.enter(
+              modeSelect(context, [node.id]).newFeature(true)
+          );
+      }
+
+
+      function addNode(node) {
+          add(node.loc);
+      }
+
+
+      function cancel() {
+          context.enter(modeBrowse(context));
+      }
+
+
+      mode.enter = function() {
+          context.install(behavior);
+      };
+
+
+      mode.exit = function() {
+          context.uninstall(behavior);
+      };
+
+
+      return mode;
+  }
+
+  var localizeStrings = {"this node":"this_node","this way":"this_way","this relation":"this_relation","this one-way":"this_oneway","this highway":"this_highway","this railway":"this_railway","this waterway":"this_waterway","this cycleway":"this_cycleway","this footpath":"this_footpath","this cycleway/footpath":"this_cycleway_footpath","this riverbank":"this_riverbank","this crossing":"this_crossing","this railway crossing":"this_railway_crossing","this bridge":"this_bridge","this tunnel":"this_tunnel","this boundary":"this_boundary","this turn-restriction":"this_turn_restriction","this roundabout":"this_roundabout","this mini-roundabout":"this_mini_roundabout","this track":"this_track","this feature":"this_feature",highway:"highway",railway:"railway",waterway:"waterway",cycleway:"cycleway",cycleway_footpath:"cycleway/footpath",riverbank:"riverbank",place_of_worship:"place_of_worship",pub:"pub",restaurant:"restaurant",school:"school",university:"university",hospital:"hospital",library:"library",theatre:"theatre",courthouse:"courthouse",bank:"bank",cinema:"cinema",pharmacy:"pharmacy",cafe:"cafe",fast_food:"fast_food",fuel:"fuel",from:"from",to:"to","left-hand":"left_hand","right-hand":"right_hand"};
+  var errorTypes = {"20":{title:"multiple nodes on the same spot",severity:"warning",description:"There is more than one node in this spot. Offending node IDs: $1",IDs:["20"],regex:"IDs: ((?:#\\d+,?)+)"},"30":{title:"non-closed_areas",severity:"error",description:"This way is tagged with '$1' and should be closed-loop.",IDs:["this",""],regex:"(this way) is tagged with '(.+)'"},"40":{title:"dead-ended one-ways",severity:"error",description:"The first node (id $1) of this one-way is not connected to any other way",IDs:["n","this"],regex:"\\(id (\\d+)\\) of (this one-way)"},"41":{title:"",severity:"error",description:"The last node (id $1) of this one-way is not connected to any other way",IDs:["n","this"],regex:"\\(id (\\d+)\\) of (this one-way)"},"42":{title:"",severity:"error",description:"This node cannot be reached because one-ways only lead away from here",IDs:["this"],regex:"(this node)"},"43":{title:"",severity:"error",description:"You cannot escape from this node because one-ways only lead to here",IDs:["this"],regex:"(this node)"},"50":{title:"almost-junctions",severity:"error",description:"This node is very close but not connected to way #$1",IDs:["this","w"],regex:"(this node) is very close but not connected to way #(\\d+)"},"60":{title:"deprecated tags",severity:"warning",description:"This $1 uses deprecated tag $2. Please use $3 instead!",IDs:["this","",""],regex:"(this (?:node|way|relation)) uses deprecated tag '(.+)'\\. Please use &quot;(.+)&quot;"},"70":{title:"missing tags",severity:"error",description:"This $1 has an empty tag: $2",IDs:["this",""],regex:"(this (?:node|way|relation)) has an empty tag: &quot;(.+)=&quot;"},"71":{title:"",severity:"error",description:"This way has no tags",IDs:["this"],regex:"(this way)"},"72":{title:"",severity:"error",description:"This node is not member of any way and does not have any tags",IDs:["this"],regex:"(this node)"},"73":{title:"",severity:"error",description:"This way has a $1 tag but no highway tag",IDs:["this",""],regex:"(this way) has a (.+) tag"},"74":{title:"missing tags",severity:"error",description:"This $1 has an empty tag: $2",IDs:["this",""],regex:"(this (?:node|way|relation)) has an empty tag: &quot;(.+)=&quot;"},"75":{description:"This (node|way|relation) has a name \\((.+)\\) but no other tag",IDs:["this",""],regex:"(this (?:node|way|relation)) has a name \\((.+)\\)"},"90":{title:"motorways without ref",severity:"error",description:"This way is tagged as motorway and therefore needs a ref nat_ref or int_ref tag",IDs:["this"],regex:"(this way)"},"100":{title:"places of worship without religion",severity:"error",description:"This $1 is tagged as place of worship and therefore needs a religion tag",IDs:["this"],regex:"(this (?:node|way|relation))"},"110":{title:"point of interest without name",severity:"error",description:"This node is tagged as $1 and therefore needs a name tag",IDs:["this",""],regex:"(this (?:node|way|relation)) is tagged as (.+) and"},"120":{title:"ways without nodes",severity:"error",description:"This way has just one single node",IDs:["this"],regex:"(this way)"},"130":{title:"floating islands",severity:"error",description:"This way is not connected to the rest of the map",IDs:["this"],regex:"(this way)"},"150":{title:"railway crossing without tag",severity:"error",description:"This crossing of a highway and a railway needs to be tagged as railway=crossing or railway=level_crossing",IDs:["this"],regex:"(this crossing)"},"160":{title:"wrongly used railway tag",severity:"error",description:"There are ways in different layers coming together in this railway crossing. There are ways tagged as tunnel or bridge coming together in this railway crossing",IDs:["this"],regex:"(this railway crossing)"},"170":{title:"FIXME tagged items",severity:"error",description:"This feature has a FIXME tag: (.*)",IDs:["this"],regex:"(this feature) has a FIXME tag: (.*)"},"180":{title:"relations without type",severity:"error",description:"This relation has no type tag which is mandatory for relations",IDs:["this"],regex:"(this relation)"},"190":{title:"intersections without junctions",severity:"error",description:"This $1 intersects the $2 #$3 but there is no junction node",IDs:["this","","w"],regex:"(this .+) intersects the (.+) #(\\d+)"},"200":{title:"overlapping ways",severity:"error",description:"This $1 overlaps the $2 #$3",IDs:["this","","w"],regex:"(this .+) overlaps the (.+) #(\\d+)"},"210":{title:"loopings",severity:"error",description:"These errors contain self intersecting ways"},"211":{title:"",severity:"error",description:"This way contains more than one node at least twice. Nodes are $1.",IDs:["this","211"],regex:"(this way) contains more than one node at least twice. Nodes are ((?:#\\d+(?:, )?)+)\\."},"212":{title:"",severity:"error",description:"This way has only two different nodes and contains one of them more than once",IDs:["this"],regex:"(this way)"},"220":{title:"misspelled tags",severity:"error",description:"This $1 is tagged '$2' where $3 looks like $4",regex:"(this (?:node|way|relation)) is tagged '(.+)' where &quot;(.+)&quot; looks like &quot;(.+)&quot;"},"221":{title:"",severity:"error",description:"The key of this $1's tag is 'key': $2",regex:"(this (?:node|way|relation))\\'s tag is \\'key\\': (.+)"},"230":{title:"layer conflicts",severity:"error",description:"This node is a junction of ways on different layers.",IDs:["this"],regex:"(this node)"},"231":{title:"mixed layers intersection",severity:"error",description:"This node is a junction of ways on different layers: $1",IDs:["this","231"],regex:"(this node) is a junction of ways on different layers: (.+)"},"232":{title:"strange layers",severity:"error",description:"This $1 is tagged with layer $2. This need not be an error, but it looks strange",IDs:["this",""],regex:"(this (?:bridge|tunnel)) is tagged with layer (-?\\d+)\\."},"270":{title:"motorways connected directly",severity:"error",description:"This node is a junction of a motorway and a highway other than motorway, motorway_link, trunk, rest_area or construction. Service or unclassified is only valid if it has access=no/private or it leads to a motorway service area or if it is a service=parking_aisle.",IDs:["this"],regex:"(this node)"},"280":{title:"boundaries",severity:"error",description:"Administrative Boundaries can be expressed either by tagging ways or by adding them to a relation. They should be closed-loop sequences of ways, they must not self-intersect or split and they must have a name and an admin_level."},"281":{title:"missing name",severity:"error",description:"This boundary has no name",IDs:["this"],regex:"(this boundary)"},"282":{title:"missing admin level",severity:"error",description:"The boundary of $1 has no (?:valid numeric)?admin_level",regex:"of (.+) has"},"283":{title:"no closed loop",severity:"error",description:"The boundary of $1 is not closed-loop",regex:"boundary of (.+) is"},"284":{title:"splitting boundary",severity:"error",description:"The boundary of $1 splits here",regex:"boundary of (.+) splits"},"285":{title:"admin_level too high",severity:"error",description:"This boundary-way has admin_level $1 but belongs to a relation with lower admin_level (higher priority); it should have the lowest admin_level of all relations",IDs:["this",""],regex:"(this boundary)-way has admin_level (-?\\d+) but"},"290":{title:"restrictions",severity:"error",description:"Analyses all relations tagged type=restriction or following variations type=restriction:hgv type=restriction:caravan type=restriction:motorcar type=restriction:bus type=restriction:agricultural type=restriction:motorcycle type=restriction:bicycle and type=restriction:hazmat"},"291":{title:"missing type",severity:"error",description:"This turn-restriction has no (?:known )?restriction type",IDs:["this"],regex:"(this turn-restriction) has"},"292":{title:"missing from way",severity:"error",description:"This turn-restriction needs exactly one from member. This one has $1",IDs:["this",""],regex:"(this turn-restriction) needs.+has (\\d+)"},"293":{title:"missing to way",severity:"error",description:"This turn-restriction needs exactly one to member. This one has $1",IDs:["this",""],regex:"(this turn-restriction) needs.+has (\\d+)"},"294":{title:"from or to not a way",severity:"error",description:"From- and To-members of this turn-restriction need to be ways. $1",IDs:["this","294"],regex:"(this turn-restriction)~.+ways\\. ((?:(?:from|to) (?:node|relation) #\\d+,?)+)"},"295":{title:"via is not on the way ends",severity:"error",description:"via (node #$1) is not the first or the last member of (from|to) (way #$3)",IDs:["this","n","","w"],regex:"(this turn-restriction)~via \\(node #(\\d+)\\).+ of (from|to) \\(way #(\\d+)\\)"},"296":{title:"wrong restriction angle",severity:"error",description:"This turn-restriction type is $1, but angle is $2 degrees. Maybe the restriction type is not appropriate?",IDs:["this","",""],regex:"(this turn-restriction)~.+is (\\w+), but angle is (-?\\d+)"},"297":{title:"wrong direction of to member",severity:"error",description:"wrong direction of to way $1",IDs:["this","w"],regex:"(this turn-restriction)~.+to way (\\d+)"},"298":{title:"already restricted by oneway",severity:"error",description:"entry already prohibited by oneway tag on $1",IDs:["this","w"],regex:"(this turn-restriction)~.+tag on (\\d+)"},"300":{title:"missing maxspeed",severity:"warning",description:"This highway is missing a maxspeed tag",IDs:["this"],regex:"(this highway)"},"310":{title:"roundabouts",severity:"error",description:"Analyses ways with tag junction=roundabout. More then one way can form a roundabout. It supports tag oneway=-1"},"311":{title:"not closed loop",severity:"error",description:"This way is part of a roundabout but is not closed-loop. (split carriageways approaching a roundabout should not be tagged as roundabout)",IDs:["this"],regex:"(this way)"},"312":{title:"wrong direction",severity:"error",description:"If this ((?:mini_)?roundabout) is in a country with (left|right)-hand traffic then its orientation goes the wrong way around",IDs:["this",""],regex:"(this (?:mini_)?roundabout) is in a country with ((?:left|right)-hand)"},"313":{title:"faintly connected",severity:"error",description:"This roundabout has only $1 other roads connected. Roundabouts typically have three",IDs:["this",""],regex:"(this roundabout) has only (\\d) other"},"320":{title:"*_link connections",severity:"error",description:"This way is tagged as highway=$1_link but doesn't have a connection to any other $1 or $1_link",IDs:["this","","","",""],regex:"(this way) is tagged as (highway=.+) but doesn't have a connection to any other (.+) or (.+)"},"350":{title:"bridge-tags",severity:"error",description:"This bridge does not have a tag in common with its surrounding ways that shows the purpose of this bridge. There should be one of these tags: (.+)",NOTE:"Group can be arbitrary list of form: key=value,key=value,key=value...",IDs:["this",""],regex:"(this bridge).*tags: (.+)"},"360":{title:"language unknown",severity:"warning",description:"It would be nice if this (node|way|relation) had an additional tag 'name:XX=(.+)' where XX shows the language of its name '\\2'",IDs:["this",""],regex:"(this (?:node|way|relation)) had an additional tag 'name:XX=(.+)' where"},"370":{title:"doubled places",severity:"error",description:"This node has tags in common with the surrounding way #$1 ((?:\\(including the name '.+'\\) )?)and seems to be redundand",IDs:["this","w","370"],regex:"(this node) has tags in common with the surrounding way #(\\d+) ((?:\\(including the name '.+'\\) )?)and"},"380":{title:"non-physical use of sport-tag",severity:"error",description:"This way is tagged sport=$1 but has no physical tag like e.g. leisure, building, amenity or highway",IDs:["this",""],regex:"(this way) is tagged (sport=.+) but"},"390":{title:"missing tracktype",severity:"warning",description:"This track doesn''t have a tracktype",IDs:["this"],regex:"(this track)"},"400":{title:"geometry glitches",severity:"error",description:""},"401":{title:"missing turn restriction",severity:"error",description:"ways $1 and $2 join in a very sharp angle here and there is no oneway tag or turn restriction that prevents turning( from way (\\1|\\2) to (\\1|\\2))?",IDs:["w","w"],regex:"ways (\\d+) and (\\d+) join"},"402":{title:"impossible angles",severity:"error",description:"this way bends in a very sharp angle here",IDs:["this"],regex:"(this way)"},"410":{title:"website",severity:"error",description:"Web pages are analyzed. Web page is defined by any of the following tags website=* url=* website:mobile=* contact:website=* contact:url=* image=* source:website=* or source:url=*"},"411":{title:"http error",severity:"error",description:"The URL (<a target=_blank href=$1>$1</a>) cannot be opened (HTTP status code $2)",IDs:["this","url",""],regex:"(this feature)~.+ href=([^>]+)>.+ code (\\d+)\\)"},"412":{title:"domain hijacking",severity:"error",description:"Possible domain squatting: <a target=_blank href=$1>$1</a>. Suspicious text is: \"$2\"",IDs:["this","url",""],regex:"(this feature)~.+ href=([^>]+)>.+ is: &quot;(.+)&quot;"},"413":{title:"non-match",severity:"error",description:"Content of the URL (<a target=_blank href=$1>$1</a>) did not contain these keywords: ($2)",IDs:["this","url",""],regex:"(this feature)~.+ href=([^>]+)>.+ keywords: \\((.+)\\)"}};
+
+  var tiler = utilTiler();
+  var dispatch$1 = dispatch('loaded');
+
+  var _krCache;
+  var _krZoom = 14;
+  var _krUrlRoot = 'https://www.keepright.at/';
+
+  var _krRuleset = [
+      // no 20 - multiple node on same spot - these are mostly boundaries overlapping roads
+      30, 40, 50, 60, 70, 90, 100, 110, 120, 130, 150, 160, 170, 180,
+      190, 191, 192, 193, 194, 195, 196, 197, 198,
+      200, 201, 202, 203, 204, 205, 206, 207, 208, 210, 220,
+      230, 231, 232, 270, 280, 281, 282, 283, 284, 285,
+      290, 291, 292, 293, 294, 295, 296, 297, 298, 300, 310, 311, 312, 313,
+      320, 350, 360, 370, 380, 390, 400, 401, 402, 410, 411, 412, 413
+  ];
+
+
+  function abortRequest(i) {
+      if (i) {
+          i.abort();
+      }
+  }
+
+  function abortUnwantedRequests(cache, tiles) {
+      forEach(cache.inflightTile, function(v, k) {
+          var wanted = find$1(tiles, function(tile) {
+              return k === tile.id;
+          });
+          if (!wanted) {
+              abortRequest(v);
+              delete cache.inflightTile[k];
+          }
+      });
+  }
+
+
+  function encodeErrorRtree(d) {
+      return { minX: d.loc[0], minY: d.loc[1], maxX: d.loc[0], maxY: d.loc[1], data: d };
+  }
+
+
+  // replace or remove error from rtree
+  function updateRtree(item, replace) {
+      _krCache.rtree.remove(item, function isEql(a, b) {
+          return a.data.id === b.data.id;
+      });
+
+      if (replace) {
+          _krCache.rtree.insert(item);
+      }
+  }
+
+
+  function tokenReplacements(d) {
+      if (!(d instanceof qaError)) return;
+
+      var htmlRegex = new RegExp(/<\/[a-z][\s\S]*>/);
+      var replacements = {};
+
+      var errorTemplate = errorTypes[d.which_type];
+      if (!errorTemplate) {
+          /* eslint-disable no-console */
+          console.log('No Template: ', d.which_type);
+          console.log('  ', d.description);
+          /* eslint-enable no-console */
+          return;
+      }
+
+      // some descriptions are just fixed text
+      if (!errorTemplate.regex) return;
+
+      // regex pattern should match description with variable details captured
+      var errorRegex = new RegExp(errorTemplate.regex, 'i');
+      var errorMatch = errorRegex.exec(d.description);
+      if (!errorMatch) {
+          /* eslint-disable no-console */
+          console.log('Unmatched: ', d.which_type);
+          console.log('  ', d.description);
+          console.log('  ', errorRegex);
+          /* eslint-enable no-console */
+          return;
+      }
+
+      for (var i = 1; i < errorMatch.length; i++) {   // skip first
+          var capture = errorMatch[i];
+          var idType;
+
+          idType = 'IDs' in errorTemplate ? errorTemplate.IDs[i-1] : '';
+          if (idType && capture) {   // link IDs if present in the capture
+              capture = parseError(capture, idType);
+          } else if (htmlRegex.test(capture)) {   // escape any html in non-IDs
+              capture = '\\' +  capture + '\\';
+          } else {
+              var compare = capture.toLowerCase();
+              if (localizeStrings[compare]) {   // some replacement strings can be localized
+                  capture = t('QA.keepRight.error_parts.' + localizeStrings[compare]);
+              }
+          }
+
+          replacements['var' + i] = capture;
+      }
+
+      return replacements;
+  }
+
+
+  function parseError(capture, idType) {
+      var compare = capture.toLowerCase();
+      if (localizeStrings[compare]) {   // some replacement strings can be localized
+          capture = t('QA.keepRight.error_parts.' + localizeStrings[compare]);
+      }
+
+      switch (idType) {
+          // link a string like "this node"
+          case 'this':
+              capture = linkErrorObject(capture);
+              break;
+
+          case 'url':
+              capture = linkURL(capture);
+              break;
+
+          // link an entity ID
+          case 'n':
+          case 'w':
+          case 'r':
+              capture = linkEntity(idType + capture);
+              break;
+
+          // some errors have more complex ID lists/variance
+          case '20':
+              capture = parse20(capture);
+              break;
+          case '211':
+              capture = parse211(capture);
+              break;
+          case '231':
+              capture = parse231(capture);
+              break;
+          case '294':
+              capture = parse294(capture);
+              break;
+          case '370':
+              capture = parse370(capture);
+              break;
+      }
+
+      return capture;
+
+
+      function linkErrorObject(d) {
+          return '<a class="error_object_link">' + d + '</a>';
+      }
+
+      function linkEntity(d) {
+          return '<a class="error_entity_link">' + d + '</a>';
+      }
+
+      function linkURL(d) {
+          return '<a class="kr_external_link" target="_blank" href="' + d + '">' + d + '</a>';
+      }
+
+      // arbitrary node list of form: #ID, #ID, #ID...
+      function parse211(capture) {
+          var newList = [];
+          var items = capture.split(', ');
+
+          items.forEach(function(item) {
+              // ID has # at the front
+              var id = linkEntity('n' + item.slice(1));
+              newList.push(id);
+          });
+
+          return newList.join(', ');
+      }
+
+      // arbitrary way list of form: #ID(layer),#ID(layer),#ID(layer)...
+      function parse231(capture) {
+          var newList = [];
+          // unfortunately 'layer' can itself contain commas, so we split on '),'
+          var items = capture.split('),');
+
+          items.forEach(function(item) {
+              var match = item.match(/\#(\d+)\((.+)\)?/);
+              if (match !== null && match.length > 2) {
+                  newList.push(linkEntity('w' + match[1]) + ' ' +
+                      t('QA.keepRight.errorTypes.231.layer', { layer: match[2] })
+                  );
+              }
+          });
+
+          return newList.join(', ');
+      }
+
+      // arbitrary node/relation list of form: from node #ID,to relation #ID,to node #ID...
+      function parse294(capture) {
+          var newList = [];
+          var items = capture.split(',');
+
+          items.forEach(function(item) {
+              var role;
+              var idType;
+              var id;
+
+              // item of form "from/to node/relation #ID"
+              item = item.split(' ');
+
+              // to/from role is more clear in quotes
+              role = '"' + item[0] + '"';
+
+              // first letter of node/relation provides the type
+              idType = item[1].slice(0,1);
+
+              // ID has # at the front
+              id = item[2].slice(1);
+              id = linkEntity(idType + id);
+
+              item = [role, item[1], id].join(' ');
+              newList.push(item);
+          });
+
+          return newList.join(', ');
+      }
+
+      // may or may not include the string "(including the name 'name')"
+      function parse370(capture) {
+          if (!capture) return '';
+
+          var match = capture.match(/\(including the name (\'.+\')\)/);
+          if (match !== null && match.length) {
+              return t('QA.keepRight.errorTypes.370.including_the_name', { name: match[1] });
+          }
+          return '';
+      }
+
+      // arbitrary node list of form: #ID,#ID,#ID...
+      function parse20(capture) {
+          var newList = [];
+          var items = capture.split(',');
+
+          items.forEach(function(item) {
+              // ID has # at the front
+              var id = linkEntity('n' + item.slice(1));
+              newList.push(id);
+          });
+
+          return newList.join(', ');
+      }
+  }
+
+
+  var serviceKeepRight = {
+      init: function() {
+          if (!_krCache) {
+              this.reset();
+          }
+
+          this.event = utilRebind(this, dispatch$1, 'on');
+      },
+
+      reset: function() {
+          if (_krCache) {
+              forEach(_krCache.inflightTile, abortRequest);
+          }
+          _krCache = {
+              data: {},
+              loadedTile: {},
+              inflightTile: {},
+              inflightPost: {},
+              closed: {},
+              rtree: rbush_1()
+          };
+      },
+
+
+      // KeepRight API:  http://osm.mueschelsoft.de/keepright/interfacing.php
+      loadErrors: function(projection) {
+          var options = { format: 'geojson' };
+          var rules = _krRuleset.join();
+
+          // determine the needed tiles to cover the view
+          var tiles = tiler
+              .zoomExtent([_krZoom, _krZoom])
+              .getTiles(projection);
+
+          // abort inflight requests that are no longer needed
+          abortUnwantedRequests(_krCache, tiles);
+
+          // issue new requests..
+          tiles.forEach(function(tile) {
+              if (_krCache.loadedTile[tile.id] || _krCache.inflightTile[tile.id]) return;
+
+              var rect = tile.extent.rectangle();
+              var params = assignIn({}, options, { left: rect[0], bottom: rect[3], right: rect[2], top: rect[1] });
+              var url = _krUrlRoot + 'export.php?' + utilQsString(params) + '&ch=' + rules;
+
+              _krCache.inflightTile[tile.id] = d3_json(url,
+                  function(err, data) {
+                      delete _krCache.inflightTile[tile.id];
+
+                      if (err) return;
+                      _krCache.loadedTile[tile.id] = true;
+
+                      if (!data.features || !data.features.length) return;
+
+                      data.features.forEach(function(feature) {
+                          var loc = feature.geometry.coordinates;
+                          var props = feature.properties;
+
+                          // if there is a parent, save its error type e.g.:
+                          //  Error 191 = "highway-highway"
+                          //  Error 190 = "intersections without junctions"  (parent)
+                          var errorType = props.error_type;
+                          var errorTemplate = errorTypes[errorType];
+                          var parentErrorType = (Math.floor(errorType / 10) * 10).toString();
+
+                          // try to handle error type directly, fallback to parent error type.
+                          var whichType = errorTemplate ? errorType : parentErrorType;
+                          var whichTemplate = errorTypes[whichType];
+
+                          // Rewrite a few of the errors at this point..
+                          // This is done to make them easier to linkify and translate.
+                          switch (whichType) {
+                              case '170':
+                                  props.description = 'This feature has a FIXME tag: ' + props.description;
+                                  break;
+                              case '292':
+                              case '293':
+                                  props.description = props.description.replace('A turn-', 'This turn-');
+                                  break;
+                              case '294':
+                              case '295':
+                              case '296':
+                              case '297':
+                              case '298':
+                                  props.description = 'This turn-restriction~' + props.description;
+                                  break;
+                              case '300':
+                                  props.description = 'This highway is missing a maxspeed tag';
+                                  break;
+                              case '411':
+                              case '412':
+                              case '413':
+                                  props.description = 'This feature~' + props.description;
+                                  break;
+                          }
+
+                          // - move markers slightly so it doesn't obscure the geometry,
+                          // - then move markers away from other coincident markers
+                          var coincident = false;
+                          do {
+                              // first time, move marker up. after that, move marker right.
+                              var delta = coincident ? [0.00001, 0] : [0, 0.00001];
+                              loc = geoVecAdd(loc, delta);
+                              var bbox = geoExtent(loc).bbox();
+                              coincident = _krCache.rtree.search(bbox).length;
+                          } while (coincident);
+
+                          var d = new qaError({
+                              // Required values
+                              loc: loc,
+                              service: 'keepRight',
+                              error_type: errorType,
+                              // Extra values for this service
+                              id: props.error_id,
+                              comment: props.comment || null,
+                              description: props.description || '',
+                              error_id: props.error_id,
+                              which_type: whichType,
+                              parent_error_type: parentErrorType,
+                              severity: whichTemplate.severity || 'error',
+                              object_id: props.object_id,
+                              object_type: props.object_type,
+                              schema: props.schema,
+                              title: props.title
+                          });
+
+                          d.replacements = tokenReplacements(d);
+
+                          _krCache.data[d.id] = d;
+                          _krCache.rtree.insert(encodeErrorRtree(d));
+                      });
+
+                      dispatch$1.call('loaded');
+                  }
+              );
+          });
+      },
+
+
+      postKeepRightUpdate: function(d, callback) {
+          if (_krCache.inflightPost[d.id]) {
+              return callback({ message: 'Error update already inflight', status: -2 }, d);
+          }
+
+          var that = this;
+          var params = { schema: d.schema, id: d.error_id };
+
+          if (d.state) {
+              params.st = d.state;
+          }
+          if (d.newComment !== undefined) {
+              params.co = d.newComment;
+          }
+
+          // NOTE: This throws a CORS err, but it seems successful.
+          // We don't care too much about the response, so this is fine.
+          var url = _krUrlRoot + 'comment.php?' + utilQsString(params);
+          _krCache.inflightPost[d.id] = request(url)
+              .post(function(err) {
+                  delete _krCache.inflightPost[d.id];
+
+                  if (d.state === 'ignore') {   // ignore permanently (false positive)
+                      that.removeError(d);
+
+                  } else if (d.state === 'ignore_t') {  // ignore temporarily (error fixed)
+                      that.removeError(d);
+                      _krCache.closed[d.schema + ':' + d.error_id] = true;
+
+                  } else {
+                      d = that.replaceError(d.update({
+                          comment: d.newComment,
+                          newComment: undefined,
+                          state: undefined
+                      }));
+                  }
+
+                  return callback(err, d);
+              });
+
+      },
+
+
+      // get all cached errors covering the viewport
+      getErrors: function(projection) {
+          var viewport = projection.clipExtent();
+          var min = [viewport[0][0], viewport[1][1]];
+          var max = [viewport[1][0], viewport[0][1]];
+          var bbox = geoExtent(projection.invert(min), projection.invert(max)).bbox();
+
+          return _krCache.rtree.search(bbox).map(function(d) {
+              return d.data;
+          });
+      },
+
+
+      // get a single error from the cache
+      getError: function(id) {
+          return _krCache.data[id];
+      },
+
+
+      // replace a single error in the cache
+      replaceError: function(error) {
+          if (!(error instanceof qaError) || !error.id) return;
+
+          _krCache.data[error.id] = error;
+          updateRtree(encodeErrorRtree(error), true); // true = replace
+          return error;
+      },
+
+
+      // remove a single error from the cache
+      removeError: function(error) {
+          if (!(error instanceof qaError) || !error.id) return;
+
+          delete _krCache.data[error.id];
+          updateRtree(encodeErrorRtree(error), false); // false = remove
+      },
+
+
+      errorURL: function(error) {
+          return _krUrlRoot + 'report_map.php?schema=' + error.schema + '&error=' + error.id;
+      },
+
+
+      // Get an array of errors closed during this session.
+      // Used to populate `closed:keepright` changeset tag
+      getClosedIDs: function() {
+          return Object.keys(_krCache.closed).sort();
+      }
+
+  };
+
+  var tiler$1 = utilTiler();
+  var dispatch$2 = dispatch('loaded');
+
+  var _erCache;
+  var _erZoom = 14;
+
+  var _impOsmUrls = {
+      ow: 'http://directionofflow.skobbler.net/directionOfFlowService',
+      mr: 'http://missingroads.skobbler.net/missingGeoService',
+      tr: 'http://turnrestrictionservice.skobbler.net/turnRestrictionService'
+  };
+
+  function abortRequest$1(i) {
+      forEach(i, function(v) {
+          if (v) {
+              v.abort();
+          }
+      });
+  }
+
+  function abortUnwantedRequests$1(cache, tiles) {
+      forEach(cache.inflightTile, function(v, k) {
+          var wanted = find$1(tiles, function(tile) {
+              return k === tile.id;
+          });
+          if (!wanted) {
+              abortRequest$1(v);
+              delete cache.inflightTile[k];
+          }
+      });
+  }
+
+
+  function encodeErrorRtree$1(d) {
+      return { minX: d.loc[0], minY: d.loc[1], maxX: d.loc[0], maxY: d.loc[1], data: d };
+  }
+
+
+  // replace or remove error from rtree
+  function updateRtree$1(item, replace) {
+      _erCache.rtree.remove(item, function isEql(a, b) {
+          return a.data.id === b.data.id;
+      });
+
+      if (replace) {
+          _erCache.rtree.insert(item);
+      }
+  }
+
+  function linkErrorObject(d) {
+      return '<a class="error_object_link">' + d + '</a>';
+  }
+
+  function linkEntity(d) {
+      return '<a class="error_entity_link">' + d + '</a>';
+  }
+
+  function pointAverage(points) {
+      var x = 0;
+      var y = 0;
+
+      forEach(points, function(v) {
+          x += v.lon;
+          y += v.lat;
+      });
+
+      x /= points.length;
+      y /= points.length;
+
+      return [x, y];
+  }
+
+  function relativeBearing(p1, p2) {
+      var angle = Math.atan2(p2.lon - p1.lon, p2.lat - p1.lat);
+      if (angle < 0) {
+          angle += 2 * Math.PI;
+      }
+
+      // Return degrees
+      return angle * 180 / Math.PI;
+  }
+
+  // Assuming range [0,360)
+  function cardinalDirection(bearing) {
+      var dir = 45 * Math.round(bearing / 45);
+      var compass = {
+          0: 'north',
+          45: 'northeast',
+          90: 'east',
+          135: 'southeast',
+          180: 'south',
+          225: 'southwest',
+          270: 'west',
+          315: 'northwest',
+          360: 'north'
+      };
+
+      return t('QA.improveOSM.directions.' + compass[dir]);
+  }
+
+  // Errors shouldn't obscure eachother
+  function preventCoincident(loc, bumpUp) {
+      var coincident = false;
+      do {
+          // first time, move marker up. after that, move marker right.
+          var delta = coincident ? [0.00001, 0] : (bumpUp ? [0, 0.00001] : [0, 0]);
+          loc = geoVecAdd(loc, delta);
+          var bbox = geoExtent(loc).bbox();
+          coincident = _erCache.rtree.search(bbox).length;
+      } while (coincident);
+
+      return loc;
+  }
+
+  var serviceImproveOSM = {
+      init: function() {
+          if (!_erCache) {
+              this.reset();
+          }
+
+          this.event = utilRebind(this, dispatch$2, 'on');
+      },
+
+      reset: function() {
+          if (_erCache) {
+              forEach(_erCache.inflightTile, abortRequest$1);
+          }
+          _erCache = {
+              data: {},
+              loadedTile: {},
+              inflightTile: {},
+              inflightPost: {},
+              closed: {},
+              rtree: rbush_1()
+          };
+      },
+
+      loadErrors: function(projection) {
+          var options = {
+              client: 'iD',
+              status: 'OPEN',
+              zoom: '19' // Use a high zoom so that clusters aren't returned
+          };
+
+          // determine the needed tiles to cover the view
+          var tiles = tiler$1
+              .zoomExtent([_erZoom, _erZoom])
+              .getTiles(projection);
+
+          // abort inflight requests that are no longer needed
+          abortUnwantedRequests$1(_erCache, tiles);
+
+          // issue new requests..
+          tiles.forEach(function(tile) {
+              if (_erCache.loadedTile[tile.id] || _erCache.inflightTile[tile.id]) return;
+
+              var rect = tile.extent.rectangle();
+              var params = assignIn({}, options, { east: rect[0], south: rect[3], west: rect[2], north: rect[1] });
+
+              // 3 separate requests to store for each tile
+              var requests = {};
+
+              forEach(_impOsmUrls, function(v, k) {
+                  // We exclude WATER from missing geometry as it doesn't seem useful
+                  // We use most confident one-way and turn restrictions only, still have false positives
+                  var kParams = assignIn({}, params, (k === 'mr') ? { type: 'PARKING,ROAD,BOTH,PATH' } : { confidenceLevel: 'C1' });
+                  var url = v + '/search?' + utilQsString(kParams);
+
+                  requests[k] = d3_json(url,
+                      function(err, data) {
+                          delete _erCache.inflightTile[tile.id];
+
+                          if (err) return;
+                          _erCache.loadedTile[tile.id] = true;
+
+                          // Road segments at high zoom == oneways
+                          if (data.roadSegments) {
+                              data.roadSegments.forEach(function(feature) {
+                                  // Position error at the approximate middle of the segment
+                                  var points = feature.points;
+                                  var mid = points.length / 2;
+                                  var loc;
+
+                                  // Even number of points, find midpoint of the middle two
+                                  // Odd number of points, use position of very middle point
+                                  if (mid % 1 === 0) {
+                                      loc = pointAverage([points[mid - 1], points[mid]]);
+                                  } else {
+                                      mid = points[Math.floor(mid)];
+                                      loc = [mid.lon, mid.lat];
+                                  }
+
+                                  // One-ways can land on same segment in opposite direction
+                                  loc = preventCoincident(loc, false);
+
+                                  var d = new qaError({
+                                      // Info required for every error
+                                      loc: loc,
+                                      service: 'improveOSM',
+                                      error_type: k,
+                                      // Extra details needed for this service
+                                      error_key: k,
+                                      identifier: { // this is used to post changes to the error
+                                          wayId: feature.wayId,
+                                          fromNodeId: feature.fromNodeId,
+                                          toNodeId: feature.toNodeId
+                                      },
+                                      object_id: feature.wayId,
+                                      object_type: 'way',
+                                      status: feature.status
+                                  });
+
+                                  // Variables used in the description
+                                  d.replacements = {
+                                      percentage: feature.percentOfTrips,
+                                      num_trips: feature.numberOfTrips,
+                                      highway: linkErrorObject(t('QA.keepRight.error_parts.highway')),
+                                      from_node: linkEntity('n' + feature.fromNodeId),
+                                      to_node: linkEntity('n' + feature.toNodeId)
+                                  };
+
+                                  _erCache.data[d.id] = d;
+                                  _erCache.rtree.insert(encodeErrorRtree$1(d));
+                              });
+                          }
+
+                          // Tiles at high zoom == missing roads
+                          if (data.tiles) {
+                              data.tiles.forEach(function(feature) {
+                                  var geoType = feature.type.toLowerCase();
+
+                                  // Average of recorded points should land on the missing geometry
+                                  // Missing geometry could happen to land on another error
+                                  var loc = pointAverage(feature.points);
+                                  loc = preventCoincident(loc, false);
+
+                                  var d = new qaError({
+                                      // Info required for every error
+                                      loc: loc,
+                                      service: 'improveOSM',
+                                      error_type: k + '-' + geoType,
+                                      // Extra details needed for this service
+                                      error_key: k,
+                                      identifier: { x: feature.x, y: feature.y },
+                                      status: feature.status
+                                  });
+
+                                  d.replacements = {
+                                      num_trips: feature.numberOfTrips,
+                                      geometry_type: t('QA.improveOSM.geometry_types.' + geoType)
+                                  };
+
+                                  // -1 trips indicates data came from a 3rd party
+                                  if (feature.numberOfTrips === -1) {
+                                      d.desc = t('QA.improveOSM.error_types.mr.description_alt', d.replacements);
+                                  }
+
+                                  _erCache.data[d.id] = d;
+                                  _erCache.rtree.insert(encodeErrorRtree$1(d));
+                              });
+                          }
+
+                          // Entities at high zoom == turn restrictions
+                          if (data.entities) {
+                              data.entities.forEach(function(feature) {
+                                  // Turn restrictions could be missing at same junction
+                                  // We also want to bump the error up so node is accessible
+                                  var loc = feature.point;
+                                  loc = preventCoincident([loc.lon, loc.lat], true);
+
+                                  // Elements are presented in a strange way
+                                  var ids = feature.id.split(',');
+                                  var from_way = ids[0];
+                                  var via_node = ids[3];
+                                  var to_way = ids[2].split(':')[1];
+
+                                  var d = new qaError({
+                                      // Info required for every error
+                                      loc: loc,
+                                      service: 'improveOSM',
+                                      error_type: k,
+                                      // Extra details needed for this service
+                                      error_key: k,
+                                      identifier: feature.id,
+                                      object_id: via_node,
+                                      object_type: 'node',
+                                      status: feature.status
+                                  });
+
+                                  // Travel direction along from_way clarifies the turn restriction
+                                  var p1 = feature.segments[0].points[0];
+                                  var p2 = feature.segments[0].points[1];
+
+                                  var dir_of_travel = cardinalDirection(relativeBearing(p1, p2));
+
+                                  // Variables used in the description
+                                  d.replacements = {
+                                      num_passed: feature.numberOfPasses,
+                                      num_trips: feature.segments[0].numberOfTrips,
+                                      turn_restriction: feature.turnType.toLowerCase(),
+                                      from_way: linkEntity('w' + from_way),
+                                      to_way: linkEntity('w' + to_way),
+                                      travel_direction: dir_of_travel,
+                                      junction: linkErrorObject(t('QA.keepRight.error_parts.this_node'))
+                                  };
+
+                                  _erCache.data[d.id] = d;
+                                  _erCache.rtree.insert(encodeErrorRtree$1(d));
+                              });
+                          }
+                      }
+                  );
+              });
+
+              _erCache.inflightTile[tile.id] = requests;
+              dispatch$2.call('loaded');
+          });
+      },
+
+      getComments: function(d, callback) {
+          // If comments already retrieved no need to do so again
+          if (d.comments !== undefined) { return callback({}, d); }
+
+          var key = d.error_key;
+          var qParams = {};
+
+          if (key === 'ow') {
+              qParams = d.identifier;
+          } else if (key === 'mr') {
+              qParams.tileX = d.identifier.x;
+              qParams.tileY = d.identifier.y;
+          } else if (key === 'tr') {
+              qParams.targetId = d.identifier;
+          }
+
+          var url = _impOsmUrls[key] + '/retrieveComments?' + utilQsString(qParams);
+
+          var that = this;
+          d3_json(url, function(err, data) {
+              // comments are served newest to oldest
+              var comments = data.comments ? data.comments.reverse() : [];
+
+              that.replaceError(d.update({
+                  comments: comments
+              }));
+              return callback(err, d);
+          });
+      },
+
+      postUpdate: function(d, callback) {
+          if (!services.osm.authenticated()) { // Username required in payload
+              return callback({ message: 'Not Authenticated', status: -3}, d);
+          }
+          if (_erCache.inflightPost[d.id]) {
+              return callback({ message: 'Error update already inflight', status: -2 }, d);
+          }
+
+          var that = this;
+
+          // Payload can only be sent once username is established
+          services.osm.userDetails(sendPayload);
+
+          function sendPayload(err, user) {
+              if (err) { return callback(err, d); }
+
+              var key = d.error_key;
+              var url = _impOsmUrls[key] + '/comment';
+              var payload = {
+                  username: user.display_name
+              };
+
+              // Each error type has different data for identification
+              if (key === 'ow') {
+                  payload.roadSegments = [ d.identifier ];
+              } else if (key === 'mr') {
+                  payload.tiles = [ d.identifier ];
+              } else if (key === 'tr') {
+                  payload.targetIds = [ d.identifier ];
+              }
+
+              if (d.newStatus !== undefined) {
+                  payload.status = d.newStatus;
+                  payload.text = 'status changed';
+              }
+
+              // Comment take place of default text
+              if (d.newComment !== undefined) {
+                  payload.text = d.newComment;
+              }
+
+              _erCache.inflightPost[d.id] = request(url)
+                  .header('Content-Type', 'application/json')
+                  .post(JSON.stringify(payload), function(err) {
+                      delete _erCache.inflightPost[d.id];
+
+                      // Unsuccessful response status, keep issue open
+                      if (err.status !== 200) { return callback(err, d); }
+
+                      // Just a comment, update error in cache
+                      if (d.newStatus === undefined) {
+                          var now = new Date();
+                          var comments = d.comments ? d.comments : [];
+
+                          comments.push({
+                              username: payload.username,
+                              text: payload.text,
+                              timestamp: now.getTime() / 1000
+                          });
+
+                          that.replaceError(d.update({
+                              comments: comments,
+                              newComment: undefined
+                          }));
+                      } else {
+                          that.removeError(d);
+
+                          if (d.newStatus === 'SOLVED') {
+                              // No pretty identifier, so we just use coordinates
+                              var closedID = d.loc[1].toFixed(5) + '/' + d.loc[0].toFixed(5);
+                              _erCache.closed[key + ':' + closedID] = true;
+                          }
+                      }
+
+                      return callback(err, d);
+                  });
+          }
+      },
+
+      // get all cached errors covering the viewport
+      getErrors: function(projection) {
+          var viewport = projection.clipExtent();
+          var min = [viewport[0][0], viewport[1][1]];
+          var max = [viewport[1][0], viewport[0][1]];
+          var bbox = geoExtent(projection.invert(min), projection.invert(max)).bbox();
+
+          return _erCache.rtree.search(bbox).map(function(d) {
+              return d.data;
+          });
+      },
+
+      // get a single error from the cache
+      getError: function(id) {
+          return _erCache.data[id];
+      },
+
+      // replace a single error in the cache
+      replaceError: function(error) {
+          if (!(error instanceof qaError) || !error.id) return;
+
+          _erCache.data[error.id] = error;
+          updateRtree$1(encodeErrorRtree$1(error), true); // true = replace
+          return error;
+      },
+
+      // remove a single error from the cache
+      removeError: function(error) {
+          if (!(error instanceof qaError) || !error.id) return;
+
+          delete _erCache.data[error.id];
+          updateRtree$1(encodeErrorRtree$1(error), false); // false = remove
+      },
+
+      // Used to populate `closed:improveosm` changeset tag
+      getClosedIDs: function() {
+          return Object.keys(_erCache.closed).sort();
+      }
+  };
+
+  function svgAreas(projection, 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 = {
+          // tag - pattern name
+          // -or-
+          // tag - value - pattern name
+          // -or-
+          // tag - value - rules (optional tag-values, pattern name)
+          // (matches earlier rules first, so fallback should be last entry)
+          amenity: {
+              grave_yard: 'cemetery',
+              fountain: 'water_standing'
+          },
+          landuse: {
+              cemetery: [
+                  { religion: 'christian', pattern: 'cemetery_christian' },
+                  { religion: 'buddhist', pattern: 'cemetery_buddhist' },
+                  { religion: 'muslim', pattern: 'cemetery_muslim' },
+                  { religion: 'jewish', pattern: 'cemetery_jewish' },
+                  { pattern: 'cemetery' }
+              ],
+              construction: 'construction',
+              farmland: 'farmland',
+              farmyard: 'farmyard',
+              forest: [
+                  { leaf_type: 'broadleaved', pattern: 'forest_broadleaved' },
+                  { leaf_type: 'needleleaved', pattern: 'forest_needleleaved' },
+                  { leaf_type: 'leafless', pattern: 'forest_leafless' },
+                  { pattern: 'forest' } // same as 'leaf_type:mixed'
+              ],
+              grave_yard: 'cemetery',
+              grass: 'grass',
+              landfill: 'landfill',
+              meadow: 'meadow',
+              military: 'construction',
+              orchard: 'orchard',
+              reservoir: 'water_standing',
+              quarry: 'quarry',
+              vineyard: 'vineyard'
+          },
+          natural: {
+              beach: 'beach',
+              grassland: 'grass',
+              sand: 'beach',
+              scrub: 'scrub',
+              water: [
+                  { water: 'pond', pattern: 'pond' },
+                  { water: 'reservoir', pattern: 'water_standing' },
+                  { pattern: 'waves' }
+              ],
+              wetland: [
+                  { wetland: 'marsh', pattern: 'wetland_marsh' },
+                  { wetland: 'swamp', pattern: 'wetland_swamp' },
+                  { wetland: 'bog', pattern: 'wetland_bog' },
+                  { wetland: 'reedbed', pattern: 'wetland_reedbed' },
+                  { pattern: 'wetland' }
+              ],
+              wood: [
+                  { leaf_type: 'broadleaved', pattern: 'forest_broadleaved' },
+                  { leaf_type: 'needleleaved', pattern: 'forest_needleleaved' },
+                  { leaf_type: 'leafless', pattern: 'forest_leafless' },
+                  { pattern: 'forest' } // same as 'leaf_type:mixed'
+              ]
+          },
+          traffic_calming: {
+              island: [
+                  { surface: 'grass', pattern: 'grass' },
+              ],
+              chicane: [
+                  { surface: 'grass', pattern: 'grass' },
+              ],
+              choker: [
+                  { surface: 'grass', pattern: 'grass' },
+              ]
+          }
+      };
+
+      function setPattern(entity) {
+          // Skip pattern filling if this is a building (buildings don't get patterns applied)
+          if (entity.tags.building && entity.tags.building !== 'no') {
+              this.style.fill = this.style.stroke = '';
+              return;
+          }
+
+          for (var tag in patterns) {
+              var entityValue = entity.tags[tag];
+              if (!entityValue) continue;
+
+              if (typeof patterns[tag] === 'string') { // extra short syntax (just tag) - pattern name
+                  this.style.fill = this.style.stroke = 'url("#pattern-' + patterns[tag] + '")';
+                  return;
+              } else {
+                  var values = patterns[tag];
+                  for (var value in values) {
+                      if (entityValue !== value) continue;
+
+                      var rules = values[value];
+                      if (typeof rules === 'string') { // short syntax - pattern name
+                          this.style.fill = this.style.stroke = 'url("#pattern-' + rules + '")';
+                          return;
+                      } else { // long syntax - rule array
+                          for (var ruleKey in rules) {
+                              var rule = rules[ruleKey];
+
+                              var pass = true;
+                              for (var criterion in rule) {
+                                  if (criterion !== 'pattern') { // reserved for pattern name
+                                      // The only rule is a required tag-value pair
+                                      var v = entity.tags[criterion];
+                                      if (!v || v !== rule[criterion]) {
+                                          pass = false;
+                                          break;
+                                      }
+                                  }
+                              }
+
+                              if (pass) {
+                                  this.style.fill = this.style.stroke = 'url("#pattern-' + rule.pattern + '")';
+                                  return;
+                              }
+                          }
+                      }
+                  }
+              }
+          }
+
+          this.style.fill = this.style.stroke = '';
+      }
+
+
+      function drawTargets(selection, graph, entities, filter) {
+          var targetClass = context.getDebug('target') ? 'pink ' : 'nocolor ';
+          var nopeClass = context.getDebug('target') ? 'red ' : 'nocolor ';
+          var getPath = svgPath(projection).geojson;
+          var activeID = context.activeID();
+
+          // The targets and nopes will be MultiLineString sub-segments of the ways
+          var data = { targets: [], nopes: [] };
+
+          entities.forEach(function(way) {
+              var features = svgSegmentWay(way, graph, activeID);
+              data.targets.push.apply(data.targets, features.passive);
+              data.nopes.push.apply(data.nopes, features.active);
+          });
+
+
+          // Targets allow hover and vertex snapping
+          var targetData = data.targets.filter(getPath);
+          var targets = selection.selectAll('.area.target-allowed')
+              .filter(function(d) { return filter(d.properties.entity); })
+              .data(targetData, function key(d) { return d.id; });
+
+          // exit
+          targets.exit()
+              .remove();
+
+          // enter/update
+          targets.enter()
+              .append('path')
+              .merge(targets)
+              .attr('d', getPath)
+              .attr('class', function(d) { return 'way area target target-allowed ' + targetClass + d.id; });
+
+
+          // NOPE
+          var nopeData = data.nopes.filter(getPath);
+          var nopes = selection.selectAll('.area.target-nope')
+              .filter(function(d) { return filter(d.properties.entity); })
+              .data(nopeData, function key(d) { return d.id; });
+
+          // exit
+          nopes.exit()
+              .remove();
+
+          // enter/update
+          nopes.enter()
+              .append('path')
+              .merge(nopes)
+              .attr('d', getPath)
+              .attr('class', function(d) { return 'way area target target-nope ' + nopeClass + d.id; });
+      }
+
+
+      function drawAreas(selection, graph, entities, filter) {
+          var path = svgPath(projection, graph, true);
+          var areas = {};
+          var multipolygon;
+
+          for (var i = 0; i < entities.length; i++) {
+              var entity = entities[i];
+              if (entity.geometry(graph) !== 'area') continue;
+
+              multipolygon = osmIsOldMultipolygonOuterMember(entity, graph);
+              if (multipolygon) {
+                  areas[multipolygon.id] = {
+                      entity: multipolygon.mergeTags(entity.tags),
+                      area: Math.abs(entity.area(graph))
+                  };
+              } else if (!areas[entity.id]) {
+                  areas[entity.id] = {
+                      entity: entity,
+                      area: Math.abs(entity.area(graph))
+                  };
+              }
+          }
+
+          areas = values$1(areas).filter(function hasPath(a) { return path(a.entity); });
+          areas.sort(function areaSort(a, b) { return b.area - a.area; });
+          areas = map$3(areas, 'entity');
+
+          var strokes = areas.filter(function(area) {
+              return area.type === 'way';
+          });
+
+          var data = {
+              clip: areas,
+              shadow: strokes,
+              stroke: strokes,
+              fill: areas
+          };
+
+          var clipPaths = context.surface().selectAll('defs').selectAll('.clipPath-osm')
+             .filter(filter)
+             .data(data.clip, osmEntity.key);
+
+          clipPaths.exit()
+             .remove();
+
+          var clipPathsEnter = clipPaths.enter()
+             .append('clipPath')
+             .attr('class', 'clipPath-osm')
+             .attr('id', function(entity) { return entity.id + '-clippath'; });
+
+          clipPathsEnter
+             .append('path');
+
+          clipPaths.merge(clipPathsEnter)
+             .selectAll('path')
+             .attr('d', path);
+
+
+          var drawLayer = selection.selectAll('.layer-osm.areas');
+          var touchLayer = selection.selectAll('.layer-touch.areas');
+
+          // Draw areas..
+          var areagroup = drawLayer
+              .selectAll('g.areagroup')
+              .data(['fill', 'shadow', 'stroke']);
+
+          areagroup = areagroup.enter()
+              .append('g')
+              .attr('class', function(d) { return 'areagroup area-' + d; })
+              .merge(areagroup);
+
+          var paths = areagroup
+              .selectAll('path')
+              .filter(filter)
+              .data(function(layer) { return data[layer]; }, osmEntity.key);
+
+          paths.exit()
+              .remove();
+
+          var fills = selection.selectAll('.area-fill path.area').nodes();
+
+          var bisect = bisector(function(node) {
+              return -node.__data__.area(graph);
+          }).left;
+
+          function sortedByArea(entity) {
+              if (this._parent.__data__ === 'fill') {
+                  return fills[bisect(fills, -entity.area(graph))];
+              }
+          }
+
+          paths = paths.enter()
+              .insert('path', sortedByArea)
+              .merge(paths)
+              .each(function(entity) {
+                  var layer = this.parentNode.__data__;
+                  this.setAttribute('class', entity.type + ' area ' + layer + ' ' + entity.id);
+
+                  if (layer === 'fill') {
+                      this.setAttribute('clip-path', 'url(#' + entity.id + '-clippath)');
+                      setPattern.call(this, entity);
+                  }
+              })
+              .call(svgTagClasses())
+              .attr('d', path);
+
+
+          // Draw touch targets..
+          touchLayer
+              .call(drawTargets, graph, data.stroke, filter);
+      }
+
+      return drawAreas;
+  }
+
+  /**
+   * A specialized version of `_.reduce` for arrays without support for
+   * iteratee shorthands.
+   *
+   * @private
+   * @param {Array} [array] The array to iterate over.
+   * @param {Function} iteratee The function invoked per iteration.
+   * @param {*} [accumulator] The initial value.
+   * @param {boolean} [initAccum] Specify using the first element of `array` as
+   *  the initial value.
+   * @returns {*} Returns the accumulated value.
+   */
+  function arrayReduce(array, iteratee, accumulator, initAccum) {
+    var index = -1,
+        length = array == null ? 0 : array.length;
+
+    if (initAccum && length) {
+      accumulator = array[++index];
+    }
+    while (++index < length) {
+      accumulator = iteratee(accumulator, array[index], index, array);
+    }
+    return accumulator;
+  }
+
+  /**
+   * The base implementation of `_.reduce` and `_.reduceRight`, without support
+   * for iteratee shorthands, which iterates over `collection` using `eachFunc`.
+   *
+   * @private
+   * @param {Array|Object} collection The collection to iterate over.
+   * @param {Function} iteratee The function invoked per iteration.
+   * @param {*} accumulator The initial value.
+   * @param {boolean} initAccum Specify using the first or last element of
+   *  `collection` as the initial value.
+   * @param {Function} eachFunc The function to iterate over `collection`.
+   * @returns {*} Returns the accumulated value.
+   */
+  function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) {
+    eachFunc(collection, function(value, index, collection) {
+      accumulator = initAccum
+        ? (initAccum = false, value)
+        : iteratee(accumulator, value, index, collection);
+    });
+    return accumulator;
+  }
+
+  /**
+   * Reduces `collection` to a value which is the accumulated result of running
+   * each element in `collection` thru `iteratee`, where each successive
+   * invocation is supplied the return value of the previous. If `accumulator`
+   * is not given, the first element of `collection` is used as the initial
+   * value. The iteratee is invoked with four arguments:
+   * (accumulator, value, index|key, collection).
+   *
+   * Many lodash methods are guarded to work as iteratees for methods like
+   * `_.reduce`, `_.reduceRight`, and `_.transform`.
+   *
+   * The guarded methods are:
+   * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`,
+   * and `sortBy`
+   *
+   * @static
+   * @memberOf _
+   * @since 0.1.0
+   * @category Collection
+   * @param {Array|Object} collection The collection to iterate over.
+   * @param {Function} [iteratee=_.identity] The function invoked per iteration.
+   * @param {*} [accumulator] The initial value.
+   * @returns {*} Returns the accumulated value.
+   * @see _.reduceRight
+   * @example
+   *
+   * _.reduce([1, 2], function(sum, n) {
+   *   return sum + n;
+   * }, 0);
+   * // => 3
+   *
+   * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {
+   *   (result[value] || (result[value] = [])).push(key);
+   *   return result;
+   * }, {});
+   * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed)
+   */
+  function reduce(collection, iteratee, accumulator) {
+    var func = isArray(collection) ? arrayReduce : baseReduce,
+        initAccum = arguments.length < 3;
+
+    return func(collection, baseIteratee(iteratee, 4), accumulator, initAccum, baseEach);
+  }
+
+  /** Error message constants. */
+  var FUNC_ERROR_TEXT$3 = 'Expected a function';
+
+  /**
+   * Creates a throttled function that only invokes `func` at most once per
+   * every `wait` milliseconds. The throttled function comes with a `cancel`
+   * method to cancel delayed `func` invocations and a `flush` method to
+   * immediately invoke them. Provide `options` to indicate whether `func`
+   * should be invoked on the leading and/or trailing edge of the `wait`
+   * timeout. The `func` is invoked with the last arguments provided to the
+   * throttled function. Subsequent calls to the throttled function return the
+   * result of the last `func` invocation.
+   *
+   * **Note:** If `leading` and `trailing` options are `true`, `func` is
+   * invoked on the trailing edge of the timeout only if the throttled function
+   * is invoked more than once during the `wait` timeout.
+   *
+   * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred
+   * until to the next tick, similar to `setTimeout` with a timeout of `0`.
+   *
+   * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)
+   * for details over the differences between `_.throttle` and `_.debounce`.
+   *
+   * @static
+   * @memberOf _
+   * @since 0.1.0
+   * @category Function
+   * @param {Function} func The function to throttle.
+   * @param {number} [wait=0] The number of milliseconds to throttle invocations to.
+   * @param {Object} [options={}] The options object.
+   * @param {boolean} [options.leading=true]
+   *  Specify invoking on the leading edge of the timeout.
+   * @param {boolean} [options.trailing=true]
+   *  Specify invoking on the trailing edge of the timeout.
+   * @returns {Function} Returns the new throttled function.
+   * @example
+   *
+   * // Avoid excessively updating the position while scrolling.
+   * jQuery(window).on('scroll', _.throttle(updatePosition, 100));
+   *
+   * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes.
+   * var throttled = _.throttle(renewToken, 300000, { 'trailing': false });
+   * jQuery(element).on('click', throttled);
+   *
+   * // Cancel the trailing throttled invocation.
+   * jQuery(window).on('popstate', throttled.cancel);
+   */
+  function throttle(func, wait, options) {
+    var leading = true,
+        trailing = true;
+
+    if (typeof func != 'function') {
+      throw new TypeError(FUNC_ERROR_TEXT$3);
+    }
+    if (isObject(options)) {
+      leading = 'leading' in options ? !!options.leading : leading;
+      trailing = 'trailing' in options ? !!options.trailing : trailing;
+    }
+    return debounce(func, wait, {
+      'leading': leading,
+      'maxWait': wait,
+      'trailing': trailing
+    });
+  }
+
+  var fastJsonStableStringify = function (data, opts) {
+      if (!opts) opts = {};
+      if (typeof opts === 'function') opts = { cmp: opts };
+      var cycles = (typeof opts.cycles === 'boolean') ? opts.cycles : false;
+
+      var cmp = opts.cmp && (function (f) {
+          return function (node) {
+              return function (a, b) {
+                  var aobj = { key: a, value: node[a] };
+                  var bobj = { key: b, value: node[b] };
+                  return f(aobj, bobj);
+              };
+          };
+      })(opts.cmp);
+
+      var seen = [];
+      return (function stringify (node) {
+          if (node && node.toJSON && typeof node.toJSON === 'function') {
+              node = node.toJSON();
+          }
+
+          if (node === undefined) return;
+          if (typeof node == 'number') return isFinite(node) ? '' + node : 'null';
+          if (typeof node !== 'object') return JSON.stringify(node);
+
+          var i, out;
+          if (Array.isArray(node)) {
+              out = '[';
+              for (i = 0; i < node.length; i++) {
+                  if (i) out += ',';
+                  out += stringify(node[i]) || 'null';
+              }
+              return out + ']';
+          }
+
+          if (node === null) return 'null';
+
+          if (seen.indexOf(node) !== -1) {
+              if (cycles) return JSON.stringify('__cycle__');
+              throw new TypeError('Converting circular structure to JSON');
+          }
+
+          var seenIndex = seen.push(node) - 1;
+          var keys = Object.keys(node).sort(cmp && cmp(node));
+          out = '';
+          for (i = 0; i < keys.length; i++) {
+              var key = keys[i];
+              var value = stringify(node[key]);
+
+              if (!value) continue;
+              if (out) out += ',';
+              out += JSON.stringify(key) + ':' + value;
+          }
+          seen.splice(seenIndex, 1);
+          return '{' + out + '}';
+      })(data);
+  };
+
+  //[4]        NameStartChar      ::=          ":" | [A-Z] | "_" | [a-z] | [#xC0-#xD6] | [#xD8-#xF6] | [#xF8-#x2FF] | [#x370-#x37D] | [#x37F-#x1FFF] | [#x200C-#x200D] | [#x2070-#x218F] | [#x2C00-#x2FEF] | [#x3001-#xD7FF] | [#xF900-#xFDCF] | [#xFDF0-#xFFFD] | [#x10000-#xEFFFF]
+  //[4a]       NameChar           ::=          NameStartChar | "-" | "." | [0-9] | #xB7 | [#x0300-#x036F] | [#x203F-#x2040]
+  //[5]        Name       ::=          NameStartChar (NameChar)*
+  var nameStartChar = /[A-Z_a-z\xC0-\xD6\xD8-\xF6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD]/;//\u10000-\uEFFFF
+  var nameChar = new RegExp("[\\-\\.0-9"+nameStartChar.source.slice(1,-1)+"\\u00B7\\u0300-\\u036F\\u203F-\\u2040]");
+  var tagNamePattern = new RegExp('^'+nameStartChar.source+nameChar.source+'*(?:\:'+nameStartChar.source+nameChar.source+'*)?$');
+  //var tagNamePattern = /^[a-zA-Z_][\w\-\.]*(?:\:[a-zA-Z_][\w\-\.]*)?$/
+  //var handlers = 'resolveEntity,getExternalSubset,characters,endDocument,endElement,endPrefixMapping,ignorableWhitespace,processingInstruction,setDocumentLocator,skippedEntity,startDocument,startElement,startPrefixMapping,notationDecl,unparsedEntityDecl,error,fatalError,warning,attributeDecl,elementDecl,externalEntityDecl,internalEntityDecl,comment,endCDATA,endDTD,endEntity,startCDATA,startDTD,startEntity'.split(',')
+
+  //S_TAG,     S_ATTR, S_EQ,   S_ATTR_NOQUOT_VALUE
+  //S_ATTR_SPACE,      S_ATTR_END,     S_TAG_SPACE, S_TAG_CLOSE
+  var S_TAG = 0;//tag name offerring
+  var S_ATTR = 1;//attr name offerring 
+  var S_ATTR_SPACE=2;//attr name end and space offer
+  var S_EQ = 3;//=space?
+  var S_ATTR_NOQUOT_VALUE = 4;//attr value(no quot value only)
+  var S_ATTR_END = 5;//attr value end and no space(quot end)
+  var S_TAG_SPACE = 6;//(attr value end || tag end ) && (space offer)
+  var S_TAG_CLOSE = 7;//closed el<el />
+
+  function XMLReader(){
+       
+  }
+
+  XMLReader.prototype = {
+       parse:function(source,defaultNSMap,entityMap){
+               var domBuilder = this.domBuilder;
+               domBuilder.startDocument();
+               _copy(defaultNSMap ,defaultNSMap = {});
+               parse(source,defaultNSMap,entityMap,
+                               domBuilder,this.errorHandler);
+               domBuilder.endDocument();
+       }
+  };
+  function parse(source,defaultNSMapCopy,entityMap,domBuilder,errorHandler){
+       function fixedFromCharCode(code) {
+               // String.prototype.fromCharCode does not supports
+               // > 2 bytes unicode chars directly
+               if (code > 0xffff) {
+                       code -= 0x10000;
+                       var surrogate1 = 0xd800 + (code >> 10)
+                               , surrogate2 = 0xdc00 + (code & 0x3ff);
+
+                       return String.fromCharCode(surrogate1, surrogate2);
+               } else {
+                       return String.fromCharCode(code);
+               }
+       }
+       function entityReplacer(a){
+               var k = a.slice(1,-1);
                if(k in entityMap){
                        return entityMap[k]; 
                }else if(k.charAt(0) === '#'){
   }
   DOMParser.prototype.parseFromString = function(source,mimeType){
        var options = this.options;
-       var sax$$1 =  new XMLReader();
+       var sax =  new XMLReader();
        var domBuilder = options.domBuilder || new DOMHandler();//contentHandler and LexicalHandler
        var errorHandler = options.errorHandler;
        var locator = options.locator;
                domBuilder.setDocumentLocator(locator);
        }
        
-       sax$$1.errorHandler = buildErrorHandler(errorHandler,domBuilder,locator);
-       sax$$1.domBuilder = options.domBuilder || domBuilder;
+       sax.errorHandler = buildErrorHandler(errorHandler,domBuilder,locator);
+       sax.domBuilder = options.domBuilder || domBuilder;
        if(/\/x?html?$/.test(mimeType)){
                entityMap.nbsp = '\xa0';
                entityMap.copy = '\xa9';
        }
        defaultNSMap.xml = defaultNSMap.xml || 'http://www.w3.org/XML/1998/namespace';
        if(source){
-               sax$$1.parse(source,defaultNSMap,entityMap);
+               sax.parse(source,defaultNSMap,entityMap);
        }else{
-               sax$$1.errorHandler.error("invalid doc source");
+               sax.errorHandler.error("invalid doc source");
        }
        return domBuilder.doc;
   };
   var _geojson;
 
 
-  function svgData$$1(projection$$1, context, dispatch) {
+  function svgData(projection, context, dispatch) {
       var throttledRedraw = throttle(function () { dispatch.call('change'); }, 1000);
       var _showLabels = true;
       var detected = utilDetect();
       }
 
 
-      function drawData(selection$$1) {
+      function drawData(selection) {
           var vtService = getService();
-          var getPath = svgPath(projection$$1).geojson;
-          var getAreaPath = svgPath(projection$$1, null, true).geojson;
+          var getPath = svgPath(projection).geojson;
+          var getAreaPath = svgPath(projection, null, true).geojson;
           var hasData = drawData.hasData();
 
-          layer = selection$$1.selectAll('.layer-mapdata')
+          layer = selection.selectAll('.layer-mapdata')
               .data(_enabled && hasData ? [0] : []);
 
           layer.exit()
           var geoData, polygonData;
           if (_template && vtService) {   // fetch data from vector tile service
               var sourceID = _template;
-              vtService.loadTiles(sourceID, _template, projection$$1);
-              geoData = vtService.data(sourceID, projection$$1);
+              vtService.loadTiles(sourceID, _template, projection);
+              geoData = vtService.data(sourceID, projection);
           } else {
               geoData = getFeatures(_geojson);
           }
               .call(drawLabels, 'label', geoData);
 
 
-          function drawLabels(selection$$1, textClass, data) {
-              var labelPath = d3_geoPath(projection$$1);
+          function drawLabels(selection, textClass, data) {
+              var labelPath = d3_geoPath(projection);
               var labelData = data.filter(function(d) {
                   return _showLabels && d.properties && (d.properties.desc || d.properties.name);
               });
 
-              var labels = selection$$1.selectAll('text.' + textClass)
+              var labels = selection.selectAll('text.' + textClass)
                   .data(labelData, featureKey);
 
               // exit
           }, []);
 
           if (!geoPolygonIntersectsPolygon(viewport, coords, true)) {
-              var extent = geoExtent$$1(d3_geoBounds({ type: 'LineString', coordinates: coords }));
+              var extent = geoExtent(d3_geoBounds({ type: 'LineString', coordinates: coords }));
               map.centerZoom(extent.center(), map.trimmedExtentZoom(extent));
           }
 
       return drawData;
   }
 
-  function svgDebug$$1(projection, context) {
+  function svgDebug(projection, context) {
 
-      function drawDebug(selection$$1) {
+      function drawDebug(selection) {
           var showsTile = context.getDebug('tile');
           var showsCollision = context.getDebug('collision');
           var showsImagery = context.getDebug('imagery');
               .text(function(d) { return d.label; });
 
 
-          var layer = selection$$1.selectAll('.layer-debug')
+          var layer = selection.selectAll('.layer-debug')
               .data(showsImagery || showsCommunity || showsImperial || showsDriveLeft ? [0] : []);
 
           layer.exit()
   */
   function svgDefs(context) {
 
-      function drawDefs(selection$$1) {
-          var defs = selection$$1.append('defs');
+      function drawDefs(selection) {
+          var defs = selection.append('defs');
 
           // add markers
           defs
           defs
               .call(drawDefs.addSprites, [
                   'iD-sprite', 'maki-sprite', 'temaki-sprite', 'fa-sprite', 'community-sprite'
-              ]);
+              ], true);
       }
 
 
-      drawDefs.addSprites = function(selection$$1, ids) {
-          var spritesheets = selection$$1.selectAll('.spritesheet');
+      drawDefs.addSprites = function(selection, ids, overrideColors) {
+          var spritesheets = selection.selectAll('.spritesheet');
           var currData = spritesheets.data();
           var data = uniq(currData.concat(ids));
 
                           node.appendChild(
                               select(svg.documentElement).attr('id', d).node()
                           );
+                          if (overrideColors && d !== 'iD-sprite') {   // allow icon colors to be overridden..
+                              select(node).selectAll('path')
+                                  .attr('fill', 'currentColor');
+                          }
                       });
               });
       };
       return drawDefs;
   }
 
-  function behaviorEdit(context) {
-
-      function behavior() {
-          context.map()
-              .minzoom(context.minEditableZoom());
-      }
-
-
-      behavior.off = function() {
-          context.map()
-              .minzoom(0);
-      };
-
-      return behavior;
-  }
-
-  /*
-     The hover behavior adds the `.hover` class on mouseover to all elements to which
-     the identical datum is bound, and removes it on mouseout.
-
-     The :hover pseudo-class is insufficient for iD's purposes because a datum's visual
-     representation may consist of several elements scattered throughout the DOM hierarchy.
-     Only one of these elements can have the :hover pseudo-class, but all of them will
-     have the .hover class.
-   */
-  function behaviorHover(context) {
-      var dispatch$$1 = dispatch('hover');
-      var _selection = select(null);
-      var _newId = null;
-      var _buttonDown;
-      var _altDisables;
-      var _target;
-
-
-      function keydown() {
-          if (_altDisables && event.keyCode === utilKeybinding.modifierCodes.alt) {
-              _selection.selectAll('.hover')
-                  .classed('hover-suppressed', true)
-                  .classed('hover', false);
-
-              _selection
-                  .classed('hover-disabled', true);
-
-              dispatch$$1.call('hover', this, null);
-          }
-      }
+  var _keepRightEnabled = false;
+  var _keepRightService;
 
 
-      function keyup() {
-          if (_altDisables && event.keyCode === utilKeybinding.modifierCodes.alt) {
-              _selection.selectAll('.hover-suppressed')
-                  .classed('hover-suppressed', false)
-                  .classed('hover', true);
+  function svgKeepRight(projection, context, dispatch) {
+      var throttledRedraw = throttle(function () { dispatch.call('change'); }, 1000);
+      var minZoom = 12;
+      var touchLayer = select(null);
+      var drawLayer = select(null);
+      var _keepRightVisible = false;
 
-              _selection
-                  .classed('hover-disabled', false);
 
-              dispatch$$1.call('hover', this, _target ? _target.id : null);
-          }
+      function markerPath(selection, klass) {
+          selection
+              .attr('class', klass)
+              .attr('transform', 'translate(-4, -24)')
+              .attr('d', 'M11.6,6.2H7.1l1.4-5.1C8.6,0.6,8.1,0,7.5,0H2.2C1.7,0,1.3,0.3,1.3,0.8L0,10.2c-0.1,0.6,0.4,1.1,0.9,1.1h4.6l-1.8,7.6C3.6,19.4,4.1,20,4.7,20c0.3,0,0.6-0.2,0.8-0.5l6.9-11.9C12.7,7,12.3,6.2,11.6,6.2z');
       }
 
 
-      function behavior(selection$$1) {
-          _selection = selection$$1;
-          _newId = null;
-
-          _selection
-              .on('mouseover.hover', mouseover)
-              .on('mouseout.hover', mouseout)
-              .on('mousedown.hover', mousedown);
-
-          select(window)
-              .on('keydown.hover', keydown)
-              .on('keyup.hover', keyup);
-
-
-          function mouseover() {
-              if (_buttonDown) return;
-              var target = event.target;
-              enter(target ? target.__data__ : null);
-          }
-
-
-          function mouseout() {
-              if (_buttonDown) return;
-              var target = event.relatedTarget;
-              enter(target ? target.__data__ : null);
-          }
-
-
-          function mousedown() {
-              _buttonDown = true;
-              select(window)
-                  .on('mouseup.hover', mouseup, true);
-          }
-
-
-          function mouseup() {
-              _buttonDown = false;
-              select(window)
-                  .on('mouseup.hover', null, true);
-          }
-
-
-          function enter(datum) {
-              if (datum === _target) return;
-              _target = datum;
-
-              _selection.selectAll('.hover')
-                  .classed('hover', false);
-              _selection.selectAll('.hover-suppressed')
-                  .classed('hover-suppressed', false);
-
-              // What are we hovering over?
-              var entity, selector$$1;
-              if (datum && datum.__featurehash__) {
-                  entity = datum;
-                  selector$$1 = '.data' + datum.__featurehash__;
-
-              } else if (datum instanceof krError) {
-                  entity = datum;
-                  selector$$1 = '.kr_error-' + datum.id;
-
-              } else if (datum instanceof osmNote) {
-                  entity = datum;
-                  selector$$1 = '.note-' + datum.id;
-
-              } else if (datum instanceof osmEntity$$1) {
-                  entity = datum;
-                  selector$$1 = '.' + entity.id;
-                  if (entity.type === 'relation') {
-                      entity.members.forEach(function(member) { selector$$1 += ', .' + member.id; });
-                  }
-
-              } else if (datum && datum.properties && (datum.properties.entity instanceof osmEntity$$1)) {
-                  entity = datum.properties.entity;
-                  selector$$1 = '.' + entity.id;
-                  if (entity.type === 'relation') {
-                      entity.members.forEach(function(member) { selector$$1 += ', .' + member.id; });
-                  }
-              }
-
-              // Update hover state and dispatch event
-              if (entity && entity.id !== _newId) {
-                  // If drawing a way, don't hover on a node that was just placed. #3974
-                  var mode = context.mode() && context.mode().id;
-                  if ((mode === 'draw-line' || mode === 'draw-area') && !_newId && entity.type === 'node') {
-                      _newId = entity.id;
-                      return;
-                  }
-
-                  var suppressed = _altDisables && event && event.altKey;
-                  _selection.selectAll(selector$$1)
-                      .classed(suppressed ? 'hover-suppressed' : 'hover', true);
-
-                  dispatch$$1.call('hover', this, !suppressed && entity);
-
-              } else {
-                  dispatch$$1.call('hover', this, null);
-              }
+      // Loosely-coupled keepRight service for fetching errors.
+      function getService() {
+          if (services.keepRight && !_keepRightService) {
+              _keepRightService = services.keepRight;
+              _keepRightService.on('loaded', throttledRedraw);
+          } else if (!services.keepRight && _keepRightService) {
+              _keepRightService = null;
           }
-      }
-
-
-      behavior.off = function(selection$$1) {
-          selection$$1.selectAll('.hover')
-              .classed('hover', false);
-          selection$$1.selectAll('.hover-suppressed')
-              .classed('hover-suppressed', false);
-          selection$$1
-              .classed('hover-disabled', false);
-
-          selection$$1
-              .on('mouseover.hover', null)
-              .on('mouseout.hover', null)
-              .on('mousedown.hover', null);
-
-          select(window)
-              .on('keydown.hover', null)
-              .on('keyup.hover', null);
-      };
-
-
-      behavior.altDisables = function(val) {
-          if (!arguments.length) return _altDisables;
-          _altDisables = val;
-          return behavior;
-      };
-
 
-      return utilRebind(behavior, dispatch$$1, 'on');
-  }
-
-  function refresh(selection, node) {
-      var cr = node.getBoundingClientRect();
-      var prop = [cr.width, cr.height];
-      selection.property('__dimensions__', prop);
-      return prop;
-  }
-
-  function utilGetDimensions(selection, force) {
-      if (!selection || selection.empty()) {
-          return [0, 0];
+          return _keepRightService;
       }
-      var node = selection.node(),
-          cached = selection.property('__dimensions__');
-      return (!cached || force) ? refresh(selection, node) : cached;
-  }
 
 
-  function utilSetDimensions(selection, dimensions) {
-      if (!selection || selection.empty()) {
-          return selection;
-      }
-      var node = selection.node();
-      if (dimensions === null) {
-          refresh(selection, node);
-          return selection;
-      }
-      return selection
-          .property('__dimensions__', [dimensions[0], dimensions[1]])
-          .attr('width', dimensions[0])
-          .attr('height', dimensions[1]);
-  }
-
-  function behaviorTail() {
-      var container;
-      var xmargin = 25;
-      var tooltipSize = [0, 0];
-      var selectionSize = [0, 0];
-      var _text;
-
-
-      function behavior(selection$$1) {
-          if (!_text) return;
-
-          select(window)
-              .on('resize.tail', function() { selectionSize = utilGetDimensions(selection$$1); });
-
-          container = select(document.body)
-              .append('div')
-              .style('display', 'none')
-              .attr('class', 'tail tooltip-inner');
-
-          container.append('div')
-              .text(_text);
-
-          selection$$1
-              .on('mousemove.tail', mousemove)
-              .on('mouseenter.tail', mouseenter)
-              .on('mouseleave.tail', mouseleave);
-
-          container
-              .on('mousemove.tail', mousemove);
-
-          tooltipSize = utilGetDimensions(container);
-          selectionSize = utilGetDimensions(selection$$1);
-
-
-          function show() {
-              container.style('display', 'block');
-              tooltipSize = utilGetDimensions(container);
-          }
-
-
-          function mousemove() {
-              if (container.style('display') === 'none') show();
-              var xoffset = ((event.clientX + tooltipSize[0] + xmargin) > selectionSize[0]) ?
-                  -tooltipSize[0] - xmargin : xmargin;
-              container.classed('left', xoffset > 0);
-              utilSetTransform(container, event.clientX + xoffset, event.clientY);
-          }
-
-
-          function mouseleave() {
-              if (event.relatedTarget !== container.node()) {
-                  container.style('display', 'none');
-              }
+      // Show the errors
+      function editOn() {
+          if (!_keepRightVisible) {
+              _keepRightVisible = true;
+              drawLayer
+                  .style('display', 'block');
           }
+      }
 
 
-          function mouseenter() {
-              if (event.relatedTarget !== container.node()) {
-                  show();
-              }
+      // Immediately remove the errors and their touch targets
+      function editOff() {
+          if (_keepRightVisible) {
+              _keepRightVisible = false;
+              drawLayer
+                  .style('display', 'none');
+              drawLayer.selectAll('.qa_error.keepRight')
+                  .remove();
+              touchLayer.selectAll('.qa_error.keepRight')
+                  .remove();
           }
       }
 
 
-      behavior.off = function(selection$$1) {
-          if (!_text) return;
-
-          container
-              .on('mousemove.tail', null)
-              .remove();
-
-          selection$$1
-              .on('mousemove.tail', null)
-              .on('mouseenter.tail', null)
-              .on('mouseleave.tail', null);
-
-          select(window)
-              .on('resize.tail', null);
-      };
-
-
-      behavior.text = function(val) {
-          if (!arguments.length) return _text;
-          _text = val;
-          return behavior;
-      };
-
-
-      return behavior;
-  }
-
-  var _usedTails = {};
-  var _disableSpace = false;
-  var _lastSpace = null;
-
-
-  function behaviorDraw(context) {
-      var dispatch$$1 = dispatch(
-          'move', 'click', 'clickWay', 'clickNode', 'undo', 'cancel', 'finish'
-      );
-
-      var keybinding = utilKeybinding('draw');
+      // Enable the layer.  This shows the errors and transitions them to visible.
+      function layerOn() {
+          editOn();
 
-      var hover = behaviorHover(context).altDisables(true)
-          .on('hover', context.ui().sidebar.hover);
-      var tail = behaviorTail();
-      var edit = behaviorEdit(context);
+          drawLayer
+              .style('opacity', 0)
+              .transition()
+              .duration(250)
+              .style('opacity', 1)
+              .on('end interrupt', function () {
+                  dispatch.call('change');
+              });
+      }
 
-      var closeTolerance = 4;
-      var tolerance = 12;
-      var _mouseLeave = false;
-      var _lastMouse = null;
 
+      // Disable the layer.  This transitions the layer invisible and then hides the errors.
+      function layerOff() {
+          throttledRedraw.cancel();
+          drawLayer.interrupt();
+          touchLayer.selectAll('.qa_error.keepRight')
+              .remove();
 
-      // related code
-      // - `mode/drag_node.js` `datum()`
-      function datum() {
-          var mode = context.mode();
-          var isNote = mode && (mode.id.indexOf('note') !== -1);
-          if (event.altKey || isNote) return {};
+          drawLayer
+              .transition()
+              .duration(250)
+              .style('opacity', 0)
+              .on('end interrupt', function () {
+                  editOff();
+                  dispatch.call('change');
+              });
+      }
 
-          var element;
-          if (event.type === 'keydown') {
-              element = _lastMouse && _lastMouse.target;
-          } else {
-              element = event.target;
-          }
 
-          // When drawing, snap only to touch targets..
-          // (this excludes area fills and active drawing elements)
-          var d = element.__data__;
-          return (d && d.properties && d.properties.target) ? d : {};
-      }
+      // Update the error markers
+      function updateMarkers() {
+          if (!_keepRightVisible || !_keepRightEnabled) return;
 
+          var service = getService();
+          var selectedID = context.selectedErrorID();
+          var data = (service ? service.getErrors(projection) : []);
+          var getTransform = svgPointTransform(projection);
 
-      function mousedown() {
+          // Draw markers..
+          var markers = drawLayer.selectAll('.qa_error.keepRight')
+              .data(data, function(d) { return d.id; });
 
-          function point$$1() {
-              var p = context.container().node();
-              return touchId !== null ? d3_touches(p).filter(function(p) {
-                  return p.identifier === touchId;
-              })[0] : mouse(p);
-          }
+          // exit
+          markers.exit()
+              .remove();
 
-          var element = select(this);
-          var touchId = event.touches ? event.changedTouches[0].identifier : null;
-          var t1 = +new Date();
-          var p1 = point$$1();
+          // enter
+          var markersEnter = markers.enter()
+              .append('g')
+              .attr('class', function(d) {
+                  return [
+                      'qa_error',
+                      d.service,
+                      'error_id-' + d.id,
+                      'error_type-' + d.parent_error_type
+                  ].join(' ');
+              });
 
-          element.on('mousemove.draw', null);
+          markersEnter
+              .append('ellipse')
+              .attr('cx', 0.5)
+              .attr('cy', 1)
+              .attr('rx', 6.5)
+              .attr('ry', 3)
+              .attr('class', 'stroke');
 
-          select(window).on('mouseup.draw', function() {
-              var t2 = +new Date();
-              var p2 = point$$1();
-              var dist = geoVecLength(p1, p2);
+          markersEnter
+              .append('path')
+              .call(markerPath, 'shadow');
 
-              element.on('mousemove.draw', mousemove);
-              select(window).on('mouseup.draw', null);
+          markersEnter
+              .append('use')
+              .attr('class', 'qa_error-fill')
+              .attr('width', '20px')
+              .attr('height', '20px')
+              .attr('x', '-8px')
+              .attr('y', '-22px')
+              .attr('xlink:href', '#iD-icon-bolt');
 
-              if (dist < closeTolerance || (dist < tolerance && (t2 - t1) < 500)) {
-                  // Prevent a quick second click
-                  select(window).on('click.draw-block', function() {
-                      event.stopPropagation();
-                  }, true);
+          // update
+          markers
+              .merge(markersEnter)
+              .sort(sortY)
+              .classed('selected', function(d) { return d.id === selectedID; })
+              .attr('transform', getTransform);
 
-                  context.map().dblclickEnable(false);
 
-                  window.setTimeout(function() {
-                      context.map().dblclickEnable(true);
-                      select(window).on('click.draw-block', null);
-                  }, 500);
+          // Draw targets..
+          if (touchLayer.empty()) return;
+          var fillClass = context.getDebug('target') ? 'pink ' : 'nocolor ';
 
-                  click();
-              }
-          }, true);
-      }
+          var targets = touchLayer.selectAll('.qa_error.keepRight')
+              .data(data, function(d) { return d.id; });
 
+          // exit
+          targets.exit()
+              .remove();
 
-      function mousemove() {
-          _lastMouse = event;
-          dispatch$$1.call('move', this, datum());
-      }
+          // enter/update
+          targets.enter()
+              .append('rect')
+              .attr('width', '20px')
+              .attr('height', '20px')
+              .attr('x', '-8px')
+              .attr('y', '-22px')
+              .merge(targets)
+              .sort(sortY)
+              .attr('class', function(d) {
+                  return 'qa_error ' + d.service + ' target error_id-' + d.id + ' ' + fillClass;
+              })
+              .attr('transform', getTransform);
 
 
-      function mouseenter() {
-          _mouseLeave = false;
+          function sortY(a, b) {
+              return (a.id === selectedID) ? 1
+                  : (b.id === selectedID) ? -1
+                  : (a.severity === 'error' && b.severity !== 'error') ? 1
+                  : (b.severity === 'error' && a.severity !== 'error') ? -1
+                  : b.loc[1] - a.loc[1];
+          }
       }
 
 
-      function mouseleave() {
-          _mouseLeave = true;
-      }
+      // Draw the keepRight layer and schedule loading errors and updating markers.
+      function drawKeepRight(selection) {
+          var service = getService();
 
+          var surface = context.surface();
+          if (surface && !surface.empty()) {
+              touchLayer = surface.selectAll('.data-layer.touch .layer-touch.markers');
+          }
 
-      // related code
-      // - `mode/drag_node.js`     `doMode()`
-      // - `behavior/draw.js`      `click()`
-      // - `behavior/draw_way.js`  `move()`
-      function click() {
-          var d = datum();
-          var target = d && d.properties && d.properties.entity;
+          drawLayer = selection.selectAll('.layer-keepRight')
+              .data(service ? [0] : []);
 
-          if (target && target.type === 'node') {   // Snap to a node
-              dispatch$$1.call('clickNode', this, target, d);
-              return;
+          drawLayer.exit()
+              .remove();
 
-          } else if (target && target.type === 'way') {   // Snap to a way
-              var choice = geoChooseEdge(
-                  context.childNodes(target), context.mouse(), context.projection, context.activeID()
-              );
-              if (choice) {
-                  var edge = [target.nodes[choice.index - 1], target.nodes[choice.index]];
-                  dispatch$$1.call('clickWay', this, choice.loc, edge, d);
-                  return;
+          drawLayer = drawLayer.enter()
+              .append('g')
+              .attr('class', 'layer-keepRight')
+              .style('display', _keepRightEnabled ? 'block' : 'none')
+              .merge(drawLayer);
+
+          if (_keepRightEnabled) {
+              if (service && ~~context.map().zoom() >= minZoom) {
+                  editOn();
+                  service.loadErrors(projection);
+                  updateMarkers();
+              } else {
+                  editOff();
               }
           }
-          dispatch$$1.call('click', this, context.map().mouseCoordinates(), d);
       }
 
 
-      function space() {
-          event.preventDefault();
-          event.stopPropagation();
+      // Toggles the layer on and off
+      drawKeepRight.enabled = function(val) {
+          if (!arguments.length) return _keepRightEnabled;
 
-          var currSpace = context.mouse();
-          if (_disableSpace && _lastSpace) {
-              var dist = geoVecLength(_lastSpace, currSpace);
-              if (dist > tolerance) {
-                  _disableSpace = false;
+          _keepRightEnabled = val;
+          if (_keepRightEnabled) {
+              layerOn();
+          } else {
+              layerOff();
+              if (context.selectedErrorID()) {
+                  context.enter(modeBrowse(context));
               }
           }
 
-          if (_disableSpace || _mouseLeave || !_lastMouse) return;
+          dispatch.call('change');
+          return this;
+      };
 
-          // user must move mouse or release space bar to allow another click
-          _lastSpace = currSpace;
-          _disableSpace = true;
 
-          select(window).on('keyup.space-block', function() {
-              event.preventDefault();
-              event.stopPropagation();
-              _disableSpace = false;
-              select(window).on('keyup.space-block', null);
-          });
+      drawKeepRight.supported = function() {
+          return !!getService();
+      };
 
-          click();
-      }
 
+      return drawKeepRight;
+  }
 
-      function backspace() {
-          event.preventDefault();
-          dispatch$$1.call('undo');
-      }
+  function svgIcon(name, svgklass, useklass) {
+      return function drawIcon(selection) {
+          selection.selectAll('svg.icon')
+              .data([0])
+              .enter()
+              .append('svg')
+              .attr('class', 'icon ' + (svgklass || ''))
+              .append('use')
+              .attr('xlink:href', name)
+              .attr('class', useklass);
+      };
+  }
+
+  // Touch targets control which other vertices we can drag a vertex onto.
+  //
+  // - the activeID - nope
+  // - 1 away (adjacent) to the activeID - yes (vertices will be merged)
+  // - 2 away from the activeID - nope (would create a self intersecting segment)
+  // - all others on a linear way - yes
+  // - all others on a closed way - nope (would create a self intersecting polygon)
+  //
+  // returns
+  // 0 = active vertex - no touch/connect
+  // 1 = passive vertex - yes touch/connect
+  // 2 = adjacent vertex - yes but pay attention segmenting a line here
+  //
+  function svgPassiveVertex(node, graph, activeID) {
+      if (!activeID) return 1;
+      if (activeID === node.id) return 0;
 
+      var parents = graph.parentWays(node);
 
-      function del() {
-          event.preventDefault();
-          dispatch$$1.call('cancel');
-      }
+      for (var i = 0; i < parents.length; i++) {
+          var nodes = parents[i].nodes;
+          var isClosed = parents[i].isClosed();
+          for (var j = 0; j < nodes.length; j++) {   // find this vertex, look nearby
+              if (nodes[j] === node.id) {
+                  var ix1 = j - 2;
+                  var ix2 = j - 1;
+                  var ix3 = j + 1;
+                  var ix4 = j + 2;
 
+                  if (isClosed) {  // wraparound if needed
+                      var max = nodes.length - 1;
+                      if (ix1 < 0)   ix1 = max + ix1;
+                      if (ix2 < 0)   ix2 = max + ix2;
+                      if (ix3 > max) ix3 = ix3 - max;
+                      if (ix4 > max) ix4 = ix4 - max;
+                  }
 
-      function ret() {
-          event.preventDefault();
-          dispatch$$1.call('finish');
+                  if (nodes[ix1] === activeID) return 0;        // no - prevent self intersect
+                  else if (nodes[ix2] === activeID) return 2;   // ok - adjacent
+                  else if (nodes[ix3] === activeID) return 2;   // ok - adjacent
+                  else if (nodes[ix4] === activeID) return 0;   // no - prevent self intersect
+                  else if (isClosed && nodes.indexOf(activeID) !== -1) return 0;  // no - prevent self intersect
+              }
+          }
       }
 
+      return 1;   // ok
+  }
 
-      function behavior(selection$$1) {
-          context.install(hover);
-          context.install(edit);
 
-          if (!context.inIntro() && !_usedTails[tail.text()]) {
-              context.install(tail);
+  function svgMarkerSegments(projection, graph, dt,
+                                    shouldReverse,
+                                    bothDirections) {
+      return function(entity) {
+          var i = 0;
+          var offset = dt;
+          var segments = [];
+          var clip = d3_geoIdentity().clipExtent(projection.clipExtent()).stream;
+          var coordinates = graph.childNodes(entity).map(function(n) { return n.loc; });
+          var a, b;
+
+          if (shouldReverse(entity)) {
+              coordinates.reverse();
           }
 
-          keybinding
-              .on('⌫', backspace)
-              .on('⌦', del)
-              .on('⎋', ret)
-              .on('↩', ret)
-              .on('space', space)
-              .on('⌥space', space);
+          geoStream({
+              type: 'LineString',
+              coordinates: coordinates
+          }, projection.stream(clip({
+              lineStart: function() {},
+              lineEnd: function() { a = null; },
+              point: function(x, y) {
+                  b = [x, y];
 
-          selection$$1
-              .on('mouseenter.draw', mouseenter)
-              .on('mouseleave.draw', mouseleave)
-              .on('mousedown.draw', mousedown)
-              .on('mousemove.draw', mousemove);
+                  if (a) {
+                      var span = geoVecLength(a, b) - offset;
 
-          select(document)
-              .call(keybinding);
+                      if (span >= 0) {
+                          var heading = geoVecAngle(a, b);
+                          var dx = dt * Math.cos(heading);
+                          var dy = dt * Math.sin(heading);
+                          var p = [
+                              a[0] + offset * Math.cos(heading),
+                              a[1] + offset * Math.sin(heading)
+                          ];
 
-          return behavior;
-      }
+                          // gather coordinates
+                          var coord = [a, p];
+                          for (span -= dt; span >= 0; span -= dt) {
+                              p = geoVecAdd(p, [dx, dy]);
+                              coord.push(p);
+                          }
+                          coord.push(b);
 
+                          // generate svg paths
+                          var segment = '';
+                          var j;
 
-      behavior.off = function(selection$$1) {
-          context.ui().sidebar.hover.cancel();
-          context.uninstall(hover);
-          context.uninstall(edit);
+                          for (j = 0; j < coord.length; j++) {
+                              segment += (j === 0 ? 'M' : 'L') + coord[j][0] + ',' + coord[j][1];
+                          }
+                          segments.push({ id: entity.id, index: i++, d: segment });
 
-          if (!context.inIntro() && !_usedTails[tail.text()]) {
-              context.uninstall(tail);
-              _usedTails[tail.text()] = true;
-          }
+                          if (bothDirections(entity)) {
+                              segment = '';
+                              for (j = coord.length - 1; j >= 0; j--) {
+                                  segment += (j === coord.length - 1 ? 'M' : 'L') + coord[j][0] + ',' + coord[j][1];
+                              }
+                              segments.push({ id: entity.id, index: i++, d: segment });
+                          }
+                      }
 
-          selection$$1
-              .on('mouseenter.draw', null)
-              .on('mouseleave.draw', null)
-              .on('mousedown.draw', null)
-              .on('mousemove.draw', null);
+                      offset = -span;
+                  }
 
-          select(window)
-              .on('mouseup.draw', null);
-              // note: keyup.space-block, click.draw-block should remain
+                  a = b;
+              }
+          })));
 
-          select(document)
-              .call(keybinding.unbind);
+          return segments;
       };
+  }
 
 
-      behavior.tail = function(_) {
-          tail.text(_);
-          return behavior;
+  function svgPath(projection, graph, isArea) {
+
+      // Explanation of magic numbers:
+      // "padding" here allows space for strokes to extend beyond the viewport,
+      // so that the stroke isn't drawn along the edge of the viewport when
+      // the shape is clipped.
+      //
+      // When drawing lines, pad viewport by 5px.
+      // When drawing areas, pad viewport by 65px in each direction to allow
+      // for 60px area fill stroke (see ".fill-partial path.fill" css rule)
+
+      var cache = {};
+      var padding = isArea ? 65 : 5;
+      var viewport = projection.clipExtent();
+      var paddedExtent = [
+          [viewport[0][0] - padding, viewport[0][1] - padding],
+          [viewport[1][0] + padding, viewport[1][1] + padding]
+      ];
+      var clip = d3_geoIdentity().clipExtent(paddedExtent).stream;
+      var project = projection.stream;
+      var path = d3_geoPath()
+          .projection({stream: function(output) { return project(clip(output)); }});
+
+      var svgpath = function(entity) {
+          if (entity.id in cache) {
+              return cache[entity.id];
+          } else {
+              return cache[entity.id] = path(entity.asGeoJSON(graph));
+          }
       };
 
+      svgpath.geojson = function(d) {
+          if (d.__featurehash__ !== undefined) {
+              if (d.__featurehash__ in cache) {
+                  return cache[d.__featurehash__];
+              } else {
+                  return cache[d.__featurehash__] = path(d);
+              }
+          } else {
+              return path(d);
+          }
+      };
 
-      return utilRebind(behavior, dispatch$$1, 'on');
+      return svgpath;
   }
 
-  function behaviorAddWay(context) {
-      var dispatch$$1 = dispatch('start', 'startFromWay', 'startFromNode');
-      var draw = behaviorDraw(context);
 
-      function behavior(surface) {
-          draw.on('click', function() { dispatch$$1.apply('start', this, arguments); })
-              .on('clickWay', function() { dispatch$$1.apply('startFromWay', this, arguments); })
-              .on('clickNode', function() { dispatch$$1.apply('startFromNode', this, arguments); })
-              .on('cancel', behavior.cancel)
-              .on('finish', behavior.cancel);
+  function svgPointTransform(projection) {
+      var svgpoint = function(entity) {
+          // http://jsperf.com/short-array-join
+          var pt = projection(entity.loc);
+          return 'translate(' + pt[0] + ',' + pt[1] + ')';
+      };
 
-          context.map()
-              .dblclickEnable(false);
+      svgpoint.geojson = function(d) {
+          return svgpoint(d.properties.entity);
+      };
 
-          surface.call(draw);
-      }
+      return svgpoint;
+  }
 
 
-      behavior.off = function(surface) {
-          surface.call(draw.off);
+  function svgRelationMemberTags(graph) {
+      return function(entity) {
+          var tags = entity.tags;
+          graph.parentRelations(entity).forEach(function(relation) {
+              var type = relation.tags.type;
+              if (type === 'multipolygon' || type === 'boundary') {
+                  tags = assignIn({}, relation.tags, tags);
+              }
+          });
+          return tags;
       };
+  }
 
 
-      behavior.cancel = function() {
-          window.setTimeout(function() {
-              context.map().dblclickEnable(true);
-          }, 1000);
+  function svgSegmentWay(way, graph, activeID) {
+      // When there is no activeID, we can memoize this expensive computation
+      if (activeID === undefined) {
+          return graph.transient(way, 'waySegments', getWaySegments);
+      } else {
+          return getWaySegments();
+      }
 
-          context.enter(modeBrowse(context));
-      };
+      function getWaySegments() {
+          var isActiveWay = (way.nodes.indexOf(activeID) !== -1);
+          var features = { passive: [], active: [] };
+          var start = {};
+          var end = {};
+          var node, type;
 
+          for (var i = 0; i < way.nodes.length; i++) {
+              node = graph.entity(way.nodes[i]);
+              type = svgPassiveVertex(node, graph, activeID);
+              end = { node: node, type: type };
 
-      behavior.tail = function(text) {
-          draw.tail(text);
-          return behavior;
-      };
+              if (start.type !== undefined) {
+                  if (start.node.id === activeID || end.node.id === activeID) ; else if (isActiveWay && (start.type === 2 || end.type === 2)) {   // one adjacent vertex
+                      pushActive(start, end, i);
+                  } else if (start.type === 0 && end.type === 0) {   // both active vertices
+                      pushActive(start, end, i);
+                  } else {
+                      pushPassive(start, end, i);
+                  }
+              }
 
+              start = end;
+          }
 
-      return utilRebind(behavior, dispatch$$1, 'on');
-  }
+          return features;
 
-  /**
-   * Performs a deep comparison between two values to determine if they are
-   * equivalent.
-   *
-   * **Note:** This method supports comparing arrays, array buffers, booleans,
-   * date objects, error objects, maps, numbers, `Object` objects, regexes,
-   * sets, strings, symbols, and typed arrays. `Object` objects are compared
-   * by their own, not inherited, enumerable properties. Functions and DOM
-   * nodes are compared by strict equality, i.e. `===`.
-   *
-   * @static
-   * @memberOf _
-   * @since 0.1.0
-   * @category Lang
-   * @param {*} value The value to compare.
-   * @param {*} other The other value to compare.
-   * @returns {boolean} Returns `true` if the values are equivalent, else `false`.
-   * @example
-   *
-   * var object = { 'a': 1 };
-   * var other = { 'a': 1 };
-   *
-   * _.isEqual(object, other);
-   * // => true
-   *
-   * object === other;
-   * // => false
-   */
-  function isEqual(value, other) {
-    return baseIsEqual(value, other);
+          function pushActive(start, end, index) {
+              features.active.push({
+                  type: 'Feature',
+                  id: way.id + '-' + index + '-nope',
+                  properties: {
+                      nope: true,
+                      target: true,
+                      entity: way,
+                      nodes: [start.node, end.node],
+                      index: index
+                  },
+                  geometry: {
+                      type: 'LineString',
+                      coordinates: [start.node.loc, end.node.loc]
+                  }
+              });
+          }
+
+          function pushPassive(start, end, index) {
+              features.passive.push({
+                  type: 'Feature',
+                  id: way.id + '-' + index,
+                  properties: {
+                      target: true,
+                      entity: way,
+                      nodes: [start.node, end.node],
+                      index: index
+                  },
+                  geometry: {
+                      type: 'LineString',
+                      coordinates: [start.node.loc, end.node.loc]
+                  }
+              });
+          }
+      }
   }
 
-  function behaviorBreathe() {
-      var duration = 800;
-      var steps = 4;
-      var selector$$1 = '.selected.shadow, .selected .shadow';
-      var _selected = select(null);
-      var _classed = '';
-      var _params = {};
-      var _done = false;
-      var _timer;
+  function svgGeolocate(projection) {
+      var layer = select(null);
+      var _position;
 
 
-      function ratchetyInterpolator(a, b, steps, units) {
-          a = parseFloat(a);
-          b = parseFloat(b);
-          var sample = quantize()
-              .domain([0, 1])
-              .range(d3_quantize(interpolateNumber(a, b), steps));
+      function init() {
+          if (svgGeolocate.initialized) return;  // run once
+          svgGeolocate.enabled = false;
+          svgGeolocate.initialized = true;
+      }
 
-          return function(t) {
-              return String(sample(t)) + (units || '');
-          };
+      function showLayer() {
+          layer.style('display', 'block');
       }
 
 
-      function reset(selection$$1) {
-          selection$$1
-              .style('stroke-opacity', null)
-              .style('stroke-width', null)
-              .style('fill-opacity', null)
-              .style('r', null);
+      function hideLayer() {
+          layer
+              .transition()
+              .duration(250)
+              .style('opacity', 0);
       }
 
+      function layerOn() {
+          layer
+              .style('opacity', 0)
+              .transition()
+              .duration(250)
+              .style('opacity', 1);
 
-      function setAnimationParams(transition, fromTo) {
-          var toFrom = (fromTo === 'from' ? 'to' : 'from');
-
-          transition
-              .styleTween('stroke-opacity', function(d) {
-                  return ratchetyInterpolator(
-                      _params[d.id][toFrom].opacity,
-                      _params[d.id][fromTo].opacity,
-                      steps
-                  );
-              })
-              .styleTween('stroke-width', function(d) {
-                  return ratchetyInterpolator(
-                      _params[d.id][toFrom].width,
-                      _params[d.id][fromTo].width,
-                      steps,
-                      'px'
-                  );
-              })
-              .styleTween('fill-opacity', function(d) {
-                  return ratchetyInterpolator(
-                      _params[d.id][toFrom].opacity,
-                      _params[d.id][fromTo].opacity,
-                      steps
-                  );
-              })
-              .styleTween('r', function(d) {
-                  return ratchetyInterpolator(
-                      _params[d.id][toFrom].width,
-                      _params[d.id][fromTo].width,
-                      steps,
-                      'px'
-                  );
-              });
       }
 
+      function layerOff() {
+          layer.style('display', 'none');
+      }
 
-      function calcAnimationParams(selection$$1) {
-          selection$$1
-              .call(reset)
-              .each(function(d) {
-                  var s = select(this);
-                  var tag = s.node().tagName;
-                  var p = {'from': {}, 'to': {}};
-                  var opacity;
-                  var width;
+      function transform(d) {
+          return svgPointTransform(projection)(d);
+      }
 
-                  // determine base opacity and width
-                  if (tag === 'circle') {
-                      opacity = parseFloat(s.style('fill-opacity') || 0.5);
-                      width = parseFloat(s.style('r') || 15.5);
-                  } else {
-                      opacity = parseFloat(s.style('stroke-opacity') || 0.7);
-                      width = parseFloat(s.style('stroke-width') || 10);
-                  }
+      function accuracy(accuracy, loc) { // converts accuracy to pixels...
+          var degreesRadius = geoMetersToLat(accuracy),
+              tangentLoc = [loc[0], loc[1] + degreesRadius],
+              projectedTangent = projection(tangentLoc),
+              projectedLoc = projection([loc[0], loc[1]]);
 
-                  // calculate from/to interpolation params..
-                  p.tag = tag;
-                  p.from.opacity = opacity * 0.6;
-                  p.to.opacity = opacity * 1.25;
-                  p.from.width = width * 0.7;
-                  p.to.width = width * (tag === 'circle' ? 1.5 : 1);
-                  _params[d.id] = p;
-              });
+          // southern most point will have higher pixel value...
+         return Math.round(projectedLoc[1] - projectedTangent[1]).toString();
       }
 
+      function update() {
+          var geolocation = { loc: [_position.coords.longitude, _position.coords.latitude] };
 
-      function run(surface, fromTo) {
-          var toFrom = (fromTo === 'from' ? 'to' : 'from');
-          var currSelected = surface.selectAll(selector$$1);
-          var currClassed = surface.attr('class');
+          var groups = layer.selectAll('.geolocations').selectAll('.geolocation')
+              .data([geolocation]);
 
-          if (_done || currSelected.empty()) {
-              _selected.call(reset);
-              return;
-          }
+          groups.exit()
+              .remove();
 
-          if (!isEqual(currSelected.data(), _selected.data()) || currClassed !== _classed) {
-              _selected.call(reset);
-              _classed = currClassed;
-              _selected = currSelected.call(calcAnimationParams);
-          }
+          var pointsEnter = groups.enter()
+              .append('g')
+              .attr('class', 'geolocation');
 
-          _selected
-              .transition()
-              .duration(duration)
-              .call(setAnimationParams, fromTo)
-              .on('end', function() {
-                  surface.call(run, toFrom);
-              });
-      }
+          pointsEnter
+              .append('circle')
+              .attr('id', 'geolocate-radius')
+              .attr('dx', '0')
+              .attr('dy', '0')
+              .attr('fill', 'rgb(15,128,225)')
+              .attr('fill-opacity', '0.3')
+              .attr('r', '0');
 
+          pointsEnter
+              .append('circle')
+              .attr('dx', '0')
+              .attr('dy', '0')
+              .attr('fill', 'rgb(15,128,225)')
+              .attr('stroke', 'white')
+              .attr('stroke-width', '1.5')
+              .attr('r', '6');
 
-      function behavior(surface) {
-          _done = false;
-          _timer = timer(function() {
-              // wait for elements to actually become selected
-              if (surface.selectAll(selector$$1).empty()) {
-                  return false;
-              }
+          groups.merge(pointsEnter)
+              .attr('transform', transform);
 
-              surface.call(run, 'from');
-              _timer.stop();
-              return true;
-          }, 20);
+          select('#geolocate-radius').attr('r', accuracy(_position.coords.accuracy, geolocation.loc));
       }
 
+      function drawLocation(selection) {
+          var enabled = svgGeolocate.enabled;
 
-      behavior.off = function() {
-          _done = true;
-          if (_timer) {
-              _timer.stop();
-          }
-          _selected
-              .interrupt()
-              .call(reset);
-      };
+          layer = selection.selectAll('.layer-geolocate')
+              .data([0]);
 
+          layer.exit()
+              .remove();
 
-      return behavior;
-  }
+          var layerEnter = layer.enter()
+              .append('g')
+              .attr('class', 'layer-geolocate')
+              .style('display', enabled ? 'block' : 'none');
 
-  var _tooltipID = 0;
+          layerEnter
+              .append('g')
+              .attr('class', 'geolocations');
 
-  function tooltip() {
-      var _id = _tooltipID++;
-      var tooltip = function(selection$$1) {
-          selection$$1.each(setup);
-      };
-      var _animation = utilFunctor(false);
-      var _title = function() {
-          var title = this.getAttribute('data-original-title');
-          if (title) {
-              return title;
+          layer = layerEnter
+              .merge(layer);
+
+          if (enabled) {
+              update();
           } else {
-              title = this.getAttribute('title');
-              this.removeAttribute('title');
-              this.setAttribute('data-original-title', title);
+              layerOff();
           }
-          return title;
-      };
-      var _html = utilFunctor(false);
-      var _placement = utilFunctor('top');
-
+      }
 
-      tooltip.title = function(val) {
-          if (arguments.length) {
-              _title = utilFunctor(val);
-              return tooltip;
+      drawLocation.enabled = function (position, enabled) {
+          if (!arguments.length) return svgGeolocate.enabled;
+          _position = position;
+          svgGeolocate.enabled = enabled;
+          if (svgGeolocate.enabled) {
+              showLayer();
+              layerOn();
           } else {
-              return _title;
+              hideLayer();
           }
+          return this;
       };
 
+      init();
+      return drawLocation;
+  }
 
-      tooltip.html = function(val) {
-          if (arguments.length) {
-              _html = utilFunctor(val);
-              return tooltip;
-          } else {
-              return _html;
-          }
-      };
+  function svgLabels(projection, context) {
+      var path = d3_geoPath(projection);
+      var detected = utilDetect();
+      var baselineHack = (detected.ie || detected.browser.toLowerCase() === 'edge');
+      var _rdrawn = rbush_1();
+      var _rskipped = rbush_1();
+      var _textWidthCache = {};
+      var _entitybboxes = {};
 
+      // Listed from highest to lowest priority
+      var labelStack = [
+          ['line', 'aeroway', '*', 12],
+          ['line', 'highway', 'motorway', 12],
+          ['line', 'highway', 'trunk', 12],
+          ['line', 'highway', 'primary', 12],
+          ['line', 'highway', 'secondary', 12],
+          ['line', 'highway', 'tertiary', 12],
+          ['line', 'highway', '*', 12],
+          ['line', 'railway', '*', 12],
+          ['line', 'waterway', '*', 12],
+          ['area', 'aeroway', '*', 12],
+          ['area', 'amenity', '*', 12],
+          ['area', 'building', '*', 12],
+          ['area', 'historic', '*', 12],
+          ['area', 'leisure', '*', 12],
+          ['area', 'man_made', '*', 12],
+          ['area', 'natural', '*', 12],
+          ['area', 'shop', '*', 12],
+          ['area', 'tourism', '*', 12],
+          ['area', 'camp_site', '*', 12],
+          ['point', 'aeroway', '*', 10],
+          ['point', 'amenity', '*', 10],
+          ['point', 'building', '*', 10],
+          ['point', 'historic', '*', 10],
+          ['point', 'leisure', '*', 10],
+          ['point', 'man_made', '*', 10],
+          ['point', 'natural', '*', 10],
+          ['point', 'shop', '*', 10],
+          ['point', 'tourism', '*', 10],
+          ['point', 'camp_site', '*', 10],
+          ['line', 'name', '*', 12],
+          ['area', 'name', '*', 12],
+          ['point', 'name', '*', 10]
+      ];
 
-      tooltip.placement = function(val) {
-          if (arguments.length) {
-              _placement = utilFunctor(val);
-              return tooltip;
-          } else {
-              return _placement;
-          }
-      };
 
+      function blacklisted(preset) {
+          var noIcons = ['building', 'landuse', 'natural'];
+          return some(noIcons, function(s) {
+              return preset.id.indexOf(s) >= 0;
+          });
+      }
 
-      tooltip.show = function(selection$$1) {
-          selection$$1.each(show);
-      };
 
+      function get(array, prop) {
+          return function(d, i) { return array[i][prop]; };
+      }
 
-      tooltip.hide = function(selection$$1) {
-          selection$$1.each(hide);
-      };
 
+      function textWidth(text, size, elem) {
+          var c = _textWidthCache[size];
+          if (!c) c = _textWidthCache[size] = {};
 
-      tooltip.toggle = function(selection$$1) {
-          selection$$1.each(toggle);
-      };
+          if (c[text]) {
+              return c[text];
 
+          } else if (elem) {
+              c[text] = elem.getComputedTextLength();
+              return c[text];
 
-      tooltip.destroy = function(selection$$1, selector$$1) {
-          // by default, just destroy the current tooltip
-          selector$$1 = selector$$1 || '.tooltip-' + _id;
+          } else {
+              var str = encodeURIComponent(text).match(/%[CDEFcdef]/g);
+              if (str === null) {
+                  return size / 3 * 2 * text.length;
+              } else {
+                  return size / 3 * (2 * text.length + str.length);
+              }
+          }
+      }
 
-          selection$$1
-              .on('mouseenter.tooltip', null)
-              .on('mouseleave.tooltip', null)
-              .attr('title', function() {
-                  return this.getAttribute('data-original-title') || this.getAttribute('title');
-              })
-              .attr('data-original-title', null)
-              .selectAll(selector$$1)
-              .remove();
-      };
 
+      function drawLinePaths(selection, entities, filter, classes, labels) {
+          var paths = selection.selectAll('path')
+              .filter(filter)
+              .data(entities, osmEntity.key);
 
-      tooltip.destroyAny = function(selection$$1) {
-          selection$$1.call(tooltip.destroy, '.tooltip');
-      };
+          // exit
+          paths.exit()
+              .remove();
 
+          // enter/update
+          paths.enter()
+              .append('path')
+              .style('stroke-width', get(labels, 'font-size'))
+              .attr('id', function(d) { return 'labelpath-' + d.id; })
+              .attr('class', classes)
+              .merge(paths)
+              .attr('d', get(labels, 'lineString'));
+      }
 
-      function setup() {
-          var root = select(this);
-          var animate = _animation.apply(this, arguments);
-          var tip = root.selectAll('.tooltip-' + _id)
-              .data([0]);
 
-          var enter = tip.enter()
-              .append('div')
-              .attr('class', 'tooltip tooltip-' + _id);
+      function drawLineLabels(selection, entities, filter, classes, labels) {
+          var texts = selection.selectAll('text.' + classes)
+              .filter(filter)
+              .data(entities, osmEntity.key);
 
-          enter
-              .append('div')
-              .attr('class', 'tooltip-arrow');
+          // exit
+          texts.exit()
+              .remove();
 
-          enter
-              .append('div')
-              .attr('class', 'tooltip-inner');
+          // enter
+          texts.enter()
+              .append('text')
+              .attr('class', function(d, i) { return classes + ' ' + labels[i].classes + ' ' + d.id; })
+              .attr('dy', baselineHack ? '0.35em' : null)
+              .append('textPath')
+              .attr('class', 'textpath');
 
-          tip = enter
-              .merge(tip);
+          // update
+          selection.selectAll('text.' + classes).selectAll('.textpath')
+              .filter(filter)
+              .data(entities, osmEntity.key)
+              .attr('startOffset', '50%')
+              .attr('xlink:href', function(d) { return '#labelpath-' + d.id; })
+              .text(utilDisplayNameForPath);
+      }
 
-          if (animate) {
-              tip.classed('fade', true);
-          }
 
-          var place = _placement.apply(this, arguments);
-          tip.classed(place, true);
+      function drawPointLabels(selection, entities, filter, classes, labels) {
+          var texts = selection.selectAll('text.' + classes)
+              .filter(filter)
+              .data(entities, osmEntity.key);
 
-          root.on('mouseenter.tooltip', show);
-          root.on('mouseleave.tooltip', hide);
+          // exit
+          texts.exit()
+              .remove();
+
+          // enter/update
+          texts.enter()
+              .append('text')
+              .attr('class', function(d, i) {
+                  return classes + ' ' + labels[i].classes + ' ' + d.id;
+              })
+              .merge(texts)
+              .attr('x', get(labels, 'x'))
+              .attr('y', get(labels, 'y'))
+              .style('text-anchor', get(labels, 'textAnchor'))
+              .text(utilDisplayName)
+              .each(function(d, i) {
+                  textWidth(utilDisplayName(d), labels[i].height, this);
+              });
       }
 
 
-      function show() {
-          var root = select(this);
-          var content = _title.apply(this, arguments);
-          var tip = root.selectAll('.tooltip-' + _id);
+      function drawAreaLabels(selection, entities, filter, classes, labels) {
+          entities = entities.filter(hasText);
+          labels = labels.filter(hasText);
+          drawPointLabels(selection, entities, filter, classes, labels);
 
-          if (tip.empty()) {   // tooltip was removed somehow, put it back
-              root.call(tooltip.destroy);
-              root.each(setup);
-              tip = root.selectAll('.tooltip-' + _id);
+          function hasText(d, i) {
+              return labels[i].hasOwnProperty('x') && labels[i].hasOwnProperty('y');
           }
+      }
 
-          tip.classed('in', true);
-          var markup = _html.apply(this, arguments);
 
-          tip.selectAll('.tooltip-inner')[markup ? 'html' : 'text'](content);
-          var place = _placement.apply(this, arguments);
-          var outer = getPosition(root.node());
-          var inner = getPosition(tip.node());
-          var pos;
+      function drawAreaIcons(selection, entities, filter, classes, labels) {
+          var icons = selection.selectAll('use.' + classes)
+              .filter(filter)
+              .data(entities, osmEntity.key);
 
-          switch (place) {
-              case 'top':
-              pos = { x: outer.x + (outer.w - inner.w) / 2, y: outer.y - inner.h };
-              break;
-              case 'right':
-              pos = { x: outer.x + outer.w, y: outer.y + (outer.h - inner.h) / 2 };
-              break;
-              case 'left':
-              pos = { x: outer.x - inner.w, y: outer.y + (outer.h - inner.h) / 2 };
-              break;
-              case 'bottom':
-              pos = { x: Math.max(0, outer.x + (outer.w - inner.w) / 2), y: outer.y + outer.h };
-              break;
-          }
+          // exit
+          icons.exit()
+              .remove();
 
-          if (pos) {
-              tip.style('left', ~~pos.x + 'px').style('top', ~~pos.y + 'px');
-          } else {
-              tip.style('left', null).style('top', null);
+          // enter/update
+          icons.enter()
+              .append('use')
+              .attr('class', 'icon ' + classes)
+              .attr('width', '17px')
+              .attr('height', '17px')
+              .merge(icons)
+              .attr('transform', get(labels, 'transform'))
+              .attr('xlink:href', function(d) {
+                  var preset = context.presets().match(d, context.graph());
+                  var picon = preset && preset.icon;
+
+                  if (!picon) {
+                      return '';
+                  } else {
+                      var isMaki = /^maki-/.test(picon);
+                      return '#' + picon + (isMaki ? '-15' : '');
+                  }
+              });
+      }
+
+
+      function drawCollisionBoxes(selection, rtree, which) {
+          var classes = 'debug ' + which + ' ' + (which === 'debug-skipped' ? 'orange' : 'yellow');
+
+          var gj = [];
+          if (context.getDebug('collision')) {
+              gj = rtree.all().map(function(d) {
+                  return { type: 'Polygon', coordinates: [[
+                      [d.minX, d.minY],
+                      [d.maxX, d.minY],
+                      [d.maxX, d.maxY],
+                      [d.minX, d.maxY],
+                      [d.minX, d.minY]
+                  ]]};
+              });
           }
 
-          this.tooltipVisible = true;
+          var boxes = selection.selectAll('.' + which)
+              .data(gj);
 
+          // exit
+          boxes.exit()
+              .remove();
 
-          function getPosition(node) {
-              var mode = select(node).style('position');
-              if (mode === 'absolute' || mode === 'static') {
-                  return {
-                      x: node.offsetLeft,
-                      y: node.offsetTop,
-                      w: node.offsetWidth,
-                      h: node.offsetHeight
-                  };
-              } else {
-                  return {
-                      x: 0,
-                      y: 0,
-                      w: node.offsetWidth,
-                      h: node.offsetHeight
-                  };
-              }
-          }
+          // enter/update
+          boxes.enter()
+              .append('path')
+              .attr('class', classes)
+              .merge(boxes)
+              .attr('d', d3_geoPath());
       }
 
 
-      function hide() {
-          select(this).selectAll('.tooltip-' + _id).classed('in', false);
-          this.tooltipVisible = false;
-      }
+      function drawLabels(selection, graph, entities, filter, dimensions, fullRedraw) {
+          var wireframe = context.surface().classed('fill-wireframe');
+          var zoom = geoScaleToZoom(projection.scale());
 
+          var labelable = [];
+          var renderNodeAs = {};
+          var i, j, k, entity, geometry;
 
-      function toggle() {
-          if (this.tooltipVisible) {
-              hide.apply(this, arguments);
-          } else {
-              show.apply(this, arguments);
+          for (i = 0; i < labelStack.length; i++) {
+              labelable.push([]);
           }
-      }
-
-
-      return tooltip;
-  }
-
-  function uiAccount(context) {
-      var osm = context.connection();
 
+          if (fullRedraw) {
+              _rdrawn.clear();
+              _rskipped.clear();
+              _entitybboxes = {};
 
-      function update(selection$$1) {
-          if (!osm) return;
+          } else {
+              for (i = 0; i < entities.length; i++) {
+                  entity = entities[i];
+                  var toRemove = []
+                      .concat(_entitybboxes[entity.id] || [])
+                      .concat(_entitybboxes[entity.id + 'I'] || []);
 
-          if (!osm.authenticated()) {
-              selection$$1.selectAll('#userLink, #logoutLink')
-                  .classed('hide', true);
-              return;
+                  for (j = 0; j < toRemove.length; j++) {
+                      _rdrawn.remove(toRemove[j]);
+                      _rskipped.remove(toRemove[j]);
+                  }
+              }
           }
 
-          osm.userDetails(function(err, details) {
-              var userLink = selection$$1.select('#userLink'),
-                  logoutLink = selection$$1.select('#logoutLink');
-
-              userLink.html('');
-              logoutLink.html('');
+          // Loop through all the entities to do some preprocessing
+          for (i = 0; i < entities.length; i++) {
+              entity = entities[i];
+              geometry = entity.geometry(graph);
 
-              if (err) return;
+              // Insert collision boxes around interesting points/vertices
+              if (geometry === 'point' || (geometry === 'vertex' && isInterestingVertex(entity))) {
+                  var hasDirections = entity.directions(graph, projection).length;
+                  var markerPadding;
 
-              selection$$1.selectAll('#userLink, #logoutLink')
-                  .classed('hide', false);
+                  if (!wireframe && geometry === 'point' && !(zoom >= 18 && hasDirections)) {
+                      renderNodeAs[entity.id] = 'point';
+                      markerPadding = 20;   // extra y for marker height
+                  } else {
+                      renderNodeAs[entity.id] = 'vertex';
+                      markerPadding = 0;
+                  }
 
-              // Link
-              userLink.append('a')
-                  .attr('href', osm.userURL(details.display_name))
-                  .attr('target', '_blank');
+                  var coord = projection(entity.loc);
+                  var nodePadding = 10;
+                  var bbox = {
+                      minX: coord[0] - nodePadding,
+                      minY: coord[1] - nodePadding - markerPadding,
+                      maxX: coord[0] + nodePadding,
+                      maxY: coord[1] + nodePadding
+                  };
 
-              // Add thumbnail or dont
-              if (details.image_url) {
-                  userLink.append('img')
-                      .attr('class', 'icon pre-text user-icon')
-                      .attr('src', details.image_url);
-              } else {
-                  userLink
-                      .call(svgIcon('#iD-icon-avatar', 'pre-text light'));
+                  doInsert(bbox, entity.id + 'P');
               }
 
-              // Add user name
-              userLink.append('span')
-                  .attr('class', 'label')
-                  .text(details.display_name);
-
-              logoutLink.append('a')
-                  .attr('class', 'logout')
-                  .attr('href', '#')
-                  .text(t('logout'))
-                  .on('click.logout', function() {
-                      event.preventDefault();
-                      osm.logout();
-                  });
-          });
-      }
+              // From here on, treat vertices like points
+              if (geometry === 'vertex') {
+                  geometry = 'point';
+              }
 
+              // Determine which entities are label-able
+              var preset = geometry === 'area' && context.presets().match(entity, graph);
+              var icon = preset && !blacklisted(preset) && preset.icon;
 
-      return function(selection$$1) {
-          selection$$1.append('li')
-              .attr('id', 'logoutLink')
-              .classed('hide', true);
+              if (!icon && !utilDisplayName(entity))
+                  continue;
 
-          selection$$1.append('li')
-              .attr('id', 'userLink')
-              .classed('hide', true);
+              for (k = 0; k < labelStack.length; k++) {
+                  var matchGeom = labelStack[k][0];
+                  var matchKey = labelStack[k][1];
+                  var matchVal = labelStack[k][2];
+                  var hasVal = entity.tags[matchKey];
 
-          if (osm) {
-              osm.on('change.account', function() { update(selection$$1); });
-              update(selection$$1);
+                  if (geometry === matchGeom && hasVal && (matchVal === '*' || matchVal === hasVal)) {
+                      labelable[k].push(entity);
+                      break;
+                  }
+              }
           }
-      };
-  }
 
-  function uiAttribution(context) {
-      var selection$$1;
+          var positions = {
+              point: [],
+              line: [],
+              area: []
+          };
+
+          var labelled = {
+              point: [],
+              line: [],
+              area: []
+          };
 
+          // Try and find a valid label for labellable entities
+          for (k = 0; k < labelable.length; k++) {
+              var fontSize = labelStack[k][3];
 
-      function attribution(data, klass) {
-          var div = selection$$1.selectAll('.' + klass)
-              .data([0]);
+              for (i = 0; i < labelable[k].length; i++) {
+                  entity = labelable[k][i];
+                  geometry = entity.geometry(graph);
 
-          div = div.enter()
-              .append('div')
-              .attr('class', klass)
-              .merge(div);
+                  var getName = (geometry === 'line') ? utilDisplayNameForPath : utilDisplayName;
+                  var name = getName(entity);
+                  var width = name && textWidth(name, fontSize);
+                  var p = null;
 
+                  if (geometry === 'point' || geometry === 'vertex') {
+                      // no point or vertex labels in wireframe mode
+                      // no vertex labels at low zooms (vertices have no icons)
+                      if (wireframe) continue;
+                      var renderAs = renderNodeAs[entity.id];
+                      if (renderAs === 'vertex' && zoom < 17) continue;
 
-          var background = div.selectAll('.attribution')
-              .data(data, function(d) { return d.name(); });
+                      p = getPointLabel(entity, width, fontSize, renderAs);
 
-          background.exit()
-              .remove();
+                  } else if (geometry === 'line') {
+                      p = getLineLabel(entity, width, fontSize);
 
-          background = background.enter()
-              .append('span')
-              .attr('class', 'attribution')
-              .each(function(d) {
-                  if (d.terms_html) {
-                      select(this)
-                          .html(d.terms_html);
-                      return;
+                  } else if (geometry === 'area') {
+                      p = getAreaLabel(entity, width, fontSize);
                   }
 
-                  var selection$$1;
-                  if (d.terms_url) {
-                      selection$$1 = select(this)
-                          .append('a')
-                          .attr('href', d.terms_url)
-                          .attr('target', '_blank');
-                  } else {
-                      selection$$1 = select(this);
+                  if (p) {
+                      if (geometry === 'vertex') { geometry = 'point'; }  // treat vertex like point
+                      p.classes = geometry + ' tag-' + labelStack[k][1];
+                      positions[geometry].push(p);
+                      labelled[geometry].push(entity);
                   }
+              }
+          }
 
 
-                  var id_safe = d.id.replace(/\./g, '<TX_DOT>');
-                  var terms_text = t('imagery.' + id_safe + '.attribution.text',
-                      { default: d.terms_text || d.id || d.name() }
-                  );
+          function isInterestingVertex(entity) {
+              var selectedIDs = context.selectedIDs();
 
-                  if (d.icon && !d.overlay) {
-                      selection$$1
-                          .append('img')
-                          .attr('class', 'source-image')
-                          .attr('src', d.icon);
-                  }
+              return entity.hasInterestingTags() ||
+                  entity.isEndpoint(graph) ||
+                  entity.isConnected(graph) ||
+                  selectedIDs.indexOf(entity.id) !== -1 ||
+                  some(graph.parentWays(entity), function(parent) {
+                      return selectedIDs.indexOf(parent.id) !== -1;
+                  });
+          }
 
-                  selection$$1
-                      .append('span')
-                      .attr('class', 'attribution-text')
-                      .text(terms_text);
-              })
-              .merge(background);
 
+          function getPointLabel(entity, width, height, geometry) {
+              var y = (geometry === 'point' ? -12 : 0);
+              var pointOffsets = {
+                  ltr: [15, y, 'start'],
+                  rtl: [-15, y, 'end']
+              };
+
+              var coord = projection(entity.loc);
+              var textPadding = 2;
+              var offset = pointOffsets[textDirection];
+              var p = {
+                  height: height,
+                  width: width,
+                  x: coord[0] + offset[0],
+                  y: coord[1] + offset[1],
+                  textAnchor: offset[2]
+              };
 
-          var copyright = background.selectAll('.copyright-notice')
-              .data(function(d) {
-                  var notice = d.copyrightNotices(context.map().zoom(), context.map().extent());
-                  return notice ? [notice] : [];
-              });
+              // insert a collision box for the text label..
+              var bbox;
+              if (textDirection === 'rtl') {
+                  bbox = {
+                      minX: p.x - width - textPadding,
+                      minY: p.y - (height / 2) - textPadding,
+                      maxX: p.x + textPadding,
+                      maxY: p.y + (height / 2) + textPadding
+                  };
+              } else {
+                  bbox = {
+                      minX: p.x - textPadding,
+                      minY: p.y - (height / 2) - textPadding,
+                      maxX: p.x + width + textPadding,
+                      maxY: p.y + (height / 2) + textPadding
+                  };
+              }
 
-          copyright.exit()
-              .remove();
+              if (tryInsert([bbox], entity.id, true)) {
+                  return p;
+              }
+          }
 
-          copyright = copyright.enter()
-              .append('span')
-              .attr('class', 'copyright-notice')
-              .merge(copyright);
 
-          copyright
-              .text(String);
-      }
+          function getLineLabel(entity, width, height) {
+              var viewport = geoExtent(context.projection.clipExtent()).polygon();
+              var points = map$3(graph.childNodes(entity), 'loc').map(projection);
+              var length = geoPathLength(points);
 
+              if (length < width + 20) return;
 
-      function update() {
-          attribution([context.background().baseLayerSource()], 'base-layer-attribution');
-          attribution(context.background().overlayLayerSources().filter(function (s) {
-              return s.validZoom(context.map().zoom());
-          }), 'overlay-layer-attribution');
-      }
+              // todo: properly clip points to viewport
 
+              // % along the line to attempt to place the label
+              var lineOffsets = [50, 45, 55, 40, 60, 35, 65, 30, 70,
+                                 25, 75, 20, 80, 15, 95, 10, 90, 5, 95];
+              var padding = 3;
 
-      return function(select$$1) {
-          selection$$1 = select$$1;
+              for (var i = 0; i < lineOffsets.length; i++) {
+                  var offset = lineOffsets[i];
+                  var middle = offset / 100 * length;
+                  var start = middle - width / 2;
 
-          context.background()
-              .on('change.attribution', update);
+                  if (start < 0 || start + width > length) continue;
 
-          context.map()
-              .on('move.attribution', throttle(update, 400, {leading: false}));
+                  // generate subpath and ignore paths that are invalid or don't cross viewport.
+                  var sub = subpath(points, start, start + width);
+                  if (!sub || !geoPolygonIntersectsPolygon(viewport, sub, true)) {
+                      continue;
+                  }
 
-          update();
-      };
-  }
+                  var isReverse = reverse(sub);
+                  if (isReverse) {
+                      sub = sub.reverse();
+                  }
 
-  // toggles the visibility of ui elements, using a combination of the
-  // hide class, which sets display=none, and a d3 transition for opacity.
-  // this will cause blinking when called repeatedly, so check that the
-  // value actually changes between calls.
-  function uiToggle(show, callback) {
-      return function(selection$$1) {
-          selection$$1
-              .style('opacity', show ? 0 : 1)
-              .classed('hide', false)
-              .transition()
-              .style('opacity', show ? 1 : 0)
-              .on('end', function() {
-                  select(this)
-                      .classed('hide', !show)
-                      .style('opacity', null);
-                  if (callback) callback.apply(this);
-              });
-      };
-  }
+                  var bboxes = [];
+                  var boxsize = (height + 2) / 2;
 
-  function uiDisclosure(context, key, expandedDefault) {
-      var dispatch$$1 = dispatch('toggled');
-      var _preference = (context.storage('disclosure.' + key + '.expanded'));
-      var _expanded = (_preference === null ? !!expandedDefault : (_preference === 'true'));
-      var _title;
-      var _updatePreference = true;
-      var _content = function () {};
+                  for (var j = 0; j < sub.length - 1; j++) {
+                      var a = sub[j];
+                      var b = sub[j + 1];
 
+                      // split up the text into small collision boxes
+                      var num = Math.max(1, Math.floor(geoVecLength(a, b) / boxsize / 2));
 
-      var disclosure = function(selection$$1) {
-          var hideToggle = selection$$1.selectAll('.hide-toggle-' + key)
-              .data([0]);
+                      for (var box = 0; box < num; box++) {
+                          var p = geoVecInterp(a, b, box / num);
+                          var x0 = p[0] - boxsize - padding;
+                          var y0 = p[1] - boxsize - padding;
+                          var x1 = p[0] + boxsize + padding;
+                          var y1 = p[1] + boxsize + padding;
 
-          // enter
-          var hideToggleEnter = hideToggle.enter()
-              .append('a')
-              .attr('href', '#')
-              .attr('class', 'hide-toggle hide-toggle-' + key)
-              .call(svgIcon('', 'pre-text', 'hide-toggle-icon'));
+                          bboxes.push({
+                              minX: Math.min(x0, x1),
+                              minY: Math.min(y0, y1),
+                              maxX: Math.max(x0, x1),
+                              maxY: Math.max(y0, y1)
+                          });
+                      }
+                  }
 
-          hideToggleEnter
-              .append('span')
-              .attr('class', 'hide-toggle-text');
+                  if (tryInsert(bboxes, entity.id, false)) {   // accept this one
+                      return {
+                          'font-size': height + 2,
+                          lineString: lineString(sub),
+                          startOffset: offset + '%'
+                      };
+                  }
+              }
 
-          // update
-          hideToggle = hideToggleEnter
-              .merge(hideToggle);
+              function reverse(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);
+              }
 
-          hideToggle
-              .on('click', toggle)
-              .classed('expanded', _expanded);
+              function lineString(points) {
+                  return 'M' + points.join('L');
+              }
 
-          hideToggle.selectAll('.hide-toggle-text')
-              .text(_title);
+              function subpath(points, from, to) {
+                  var sofar = 0;
+                  var start, end, i0, i1;
 
-          hideToggle.selectAll('.hide-toggle-icon')
-              .attr('xlink:href', _expanded ? '#iD-icon-down'
-                  : (textDirection === 'rtl') ? '#iD-icon-backward' : '#iD-icon-forward'
-              );
+                  for (var i = 0; i < points.length - 1; i++) {
+                      var a = points[i];
+                      var b = points[i + 1];
+                      var current = geoVecLength(a, b);
+                      var portion;
+                      if (!start && sofar + current >= from) {
+                          portion = (from - sofar) / current;
+                          start = [
+                              a[0] + portion * (b[0] - a[0]),
+                              a[1] + portion * (b[1] - a[1])
+                          ];
+                          i0 = i + 1;
+                      }
+                      if (!end && sofar + current >= to) {
+                          portion = (to - sofar) / current;
+                          end = [
+                              a[0] + portion * (b[0] - a[0]),
+                              a[1] + portion * (b[1] - a[1])
+                          ];
+                          i1 = i + 1;
+                      }
+                      sofar += current;
+                  }
+
+                  var result = points.slice(i0, i1);
+                  result.unshift(start);
+                  result.push(end);
+                  return result;
+              }
+          }
 
 
-          var wrap = selection$$1.selectAll('.disclosure-wrap')
-              .data([0]);
+          function getAreaLabel(entity, width, height) {
+              var centroid = path.centroid(entity.asGeoJSON(graph, true));
+              var extent = entity.extent(graph);
+              var areaWidth = projection(extent[1])[0] - projection(extent[0])[0];
 
-          // enter/update
-          wrap = wrap.enter()
-              .append('div')
-              .attr('class', 'disclosure-wrap disclosure-wrap-' + key)
-              .merge(wrap)
-              .classed('hide', !_expanded);
+              if (isNaN(centroid[0]) || areaWidth < 20) return;
 
-          if (_expanded) {
-              wrap
-                  .call(_content);
-          }
+              var preset = context.presets().match(entity, context.graph());
+              var picon = preset && preset.icon;
+              var iconSize = 17;
+              var padding = 2;
+              var p = {};
+
+              if (picon) {  // icon and label..
+                  if (addIcon()) {
+                      addLabel(iconSize + padding);
+                      return p;
+                  }
+              } else {   // label only..
+                  if (addLabel(0)) {
+                      return p;
+                  }
+              }
 
 
-          function toggle() {
-              event.preventDefault();
+              function addIcon() {
+                  var iconX = centroid[0] - (iconSize / 2);
+                  var iconY = centroid[1] - (iconSize / 2);
+                  var bbox = {
+                      minX: iconX,
+                      minY: iconY,
+                      maxX: iconX + iconSize,
+                      maxY: iconY + iconSize
+                  };
 
-              _expanded = !_expanded;
+                  if (tryInsert([bbox], entity.id + 'I', true)) {
+                      p.transform = 'translate(' + iconX + ',' + iconY + ')';
+                      return true;
+                  }
+                  return false;
+              }
+
+              function addLabel(yOffset) {
+                  if (width && areaWidth >= width + 20) {
+                      var labelX = centroid[0];
+                      var labelY = centroid[1] + yOffset;
+                      var bbox = {
+                          minX: labelX - (width / 2) - padding,
+                          minY: labelY - (height / 2) - padding,
+                          maxX: labelX + (width / 2) + padding,
+                          maxY: labelY + (height / 2) + padding
+                      };
 
-              if (_updatePreference) {
-                  context.storage('disclosure.' + key + '.expanded', _expanded);
+                      if (tryInsert([bbox], entity.id, true)) {
+                          p.x = labelX;
+                          p.y = labelY;
+                          p.textAnchor = 'middle';
+                          p.height = height;
+                          return true;
+                      }
+                  }
+                  return false;
               }
+          }
 
-              hideToggle
-                  .classed('expanded', _expanded);
 
-              hideToggle.selectAll('.hide-toggle-icon')
-                  .attr('xlink:href', _expanded ? '#iD-icon-down'
-                      : (textDirection === 'rtl') ? '#iD-icon-backward' : '#iD-icon-forward'
-                  );
+          // force insert a singular bounding box
+          // singular box only, no array, id better be unique
+          function doInsert(bbox, id) {
+              bbox.id = id;
 
-              if (_expanded) {
-                  wrap
-                      .call(_content);
+              var oldbox = _entitybboxes[id];
+              if (oldbox) {
+                  _rdrawn.remove(oldbox);
               }
-
-              wrap
-                  .call(uiToggle(_expanded));
-
-              dispatch$$1.call('toggled', this, _expanded);
+              _entitybboxes[id] = bbox;
+              _rdrawn.insert(bbox);
           }
-      };
 
 
-      disclosure.title = function(val) {
-          if (!arguments.length) return _title;
-          _title = val;
-          return disclosure;
-      };
-
+          function tryInsert(bboxes, id, saveSkipped) {
+              var skipped = false;
 
-      disclosure.expanded = function(val) {
-          if (!arguments.length) return _expanded;
-          _expanded = val;
-          return disclosure;
-      };
+              for (var i = 0; i < bboxes.length; i++) {
+                  var bbox = bboxes[i];
+                  bbox.id = id;
 
+                  // Check that label is visible
+                  if (bbox.minX < 0 || bbox.minY < 0 || bbox.maxX > dimensions[0] || bbox.maxY > dimensions[1]) {
+                      skipped = true;
+                      break;
+                  }
+                  if (_rdrawn.collides(bbox)) {
+                      skipped = true;
+                      break;
+                  }
+              }
 
-      disclosure.updatePreference = function(val) {
-          if (!arguments.length) return _updatePreference;
-          _updatePreference = val;
-          return disclosure;
-      };
+              _entitybboxes[id] = bboxes;
 
+              if (skipped) {
+                  if (saveSkipped) {
+                      _rskipped.load(bboxes);
+                  }
+              } else {
+                  _rdrawn.load(bboxes);
+              }
 
-      disclosure.content = function(val) {
-          if (!arguments.length) return _content;
-          _content = val;
-          return disclosure;
-      };
+              return !skipped;
+          }
 
 
-      return utilRebind(disclosure, dispatch$$1, 'on');
-  }
+          var layer = selection.selectAll('.layer-osm.labels');
+          layer.selectAll('.labels-group')
+              .data(['halo', 'label', 'debug'])
+              .enter()
+              .append('g')
+              .attr('class', function(d) { return 'labels-group ' + d; });
 
-  function uiBackgroundDisplayOptions(context) {
-      var detected = utilDetect();
-      var storedOpacity = context.storage('background-opacity');
-      var minVal = 0.25;
-      var maxVal = detected.cssfilters ? 2 : 1;
+          var halo = layer.selectAll('.labels-group.halo');
+          var label = layer.selectAll('.labels-group.label');
+          var debug = layer.selectAll('.labels-group.debug');
 
-      var sliders = detected.cssfilters
-          ? ['brightness', 'contrast', 'saturation', 'sharpness']
-          : ['brightness'];
+          // points
+          drawPointLabels(label, labelled.point, filter, 'pointlabel', positions.point);
+          drawPointLabels(halo, labelled.point, filter, 'pointlabel-halo', positions.point);
 
-      var _options = {
-          brightness: (storedOpacity !== null ? (+storedOpacity) : 1),
-          contrast: 1,
-          saturation: 1,
-          sharpness: 1
-      };
+          // lines
+          drawLinePaths(layer, labelled.line, filter, '', positions.line);
+          drawLineLabels(label, labelled.line, filter, 'linelabel', positions.line);
+          drawLineLabels(halo, labelled.line, filter, 'linelabel-halo', positions.line);
 
-      var _selection = select(null);
+          // areas
+          drawAreaLabels(label, labelled.area, filter, 'arealabel', positions.area);
+          drawAreaLabels(halo, labelled.area, filter, 'arealabel-halo', positions.area);
+          drawAreaIcons(label, labelled.area, filter, 'areaicon', positions.area);
+          drawAreaIcons(halo, labelled.area, filter, 'areaicon-halo', positions.area);
 
+          // debug
+          drawCollisionBoxes(debug, _rskipped, 'debug-skipped');
+          drawCollisionBoxes(debug, _rdrawn, 'debug-drawn');
 
-      function clamp(x, min, max) {
-          return Math.max(min, Math.min(x, max));
+          layer.call(filterLabels);
       }
 
 
-      function updateValue(d, val) {
-          if (!val && event && event.target) {
-              val = event.target.value;
-          }
+      function filterLabels(selection) {
+          var drawLayer = selection.selectAll('.layer-osm.labels');
+          var layers = drawLayer.selectAll('.labels-group.halo, .labels-group.label');
 
-          val = clamp(val, minVal, maxVal);
+          layers.selectAll('.nolabel')
+              .classed('nolabel', false);
 
-          _options[d] = val;
-          context.background()[d](val);
+          var mouse = context.mouse();
+          var graph = context.graph();
+          var selectedIDs = context.selectedIDs();
+          var ids = [];
+          var pad, bbox;
 
-          if (d === 'brightness') {
-              context.storage('background-opacity', val);
+          // hide labels near the mouse
+          if (mouse) {
+              pad = 20;
+              bbox = { minX: mouse[0] - pad, minY: mouse[1] - pad, maxX: mouse[0] + pad, maxY: mouse[1] + pad };
+              ids.push.apply(ids, map$3(_rdrawn.search(bbox), 'id'));
           }
 
-          _selection
-              .call(render);
-      }
-
-
-      function render(selection$$1) {
-          var container = selection$$1.selectAll('.display-options-container')
-              .data([0]);
-
-          var containerEnter = container.enter()
-              .append('div')
-              .attr('class', 'display-options-container controls-list');
-
-          // add slider controls
-          var slidersEnter = containerEnter.selectAll('.display-control')
-              .data(sliders)
-              .enter()
-              .append('div')
-              .attr('class', function(d) { return 'display-control display-control-' + d; });
+          // hide labels on selected nodes (they look weird when dragging / haloed)
+          for (var i = 0; i < selectedIDs.length; i++) {
+              var entity = graph.hasEntity(selectedIDs[i]);
+              if (entity && entity.type === 'node') {
+                  ids.push(selectedIDs[i]);
+              }
+          }
 
-          slidersEnter
-              .append('h5')
-              .text(function(d) { return t('background.' + d); })
-              .append('span')
-              .attr('class', function(d) { return 'display-option-value display-option-value-' + d; });
+          layers.selectAll(utilEntitySelector(ids))
+              .classed('nolabel', true);
 
-          slidersEnter
-              .append('input')
-              .attr('class', function(d) { return 'display-option-input display-option-input-' + d; })
-              .attr('type', 'range')
-              .attr('min', minVal)
-              .attr('max', maxVal)
-              .attr('step', '0.05')
-              .on('input', function(d) {
-                  var val = select(this).property('value');
-                  updateValue(d, val);
-              });
 
-          slidersEnter
-              .append('button')
-              .attr('title', t('background.reset'))
-              .attr('class', function(d) { return 'display-option-reset display-option-reset-' + d; })
-              .on('click', function(d) {
-                  if (event.button !== 0) return;
-                  updateValue(d, 1);
-              })
-              .call(svgIcon('#iD-icon-' + (textDirection === 'rtl' ? 'redo' : 'undo')));
+          // draw the mouse bbox if debugging is on..
+          var debug = selection.selectAll('.labels-group.debug');
+          var gj = [];
+          if (context.getDebug('collision')) {
+              gj = bbox ? [{
+                  type: 'Polygon',
+                  coordinates: [[
+                      [bbox.minX, bbox.minY],
+                      [bbox.maxX, bbox.minY],
+                      [bbox.maxX, bbox.maxY],
+                      [bbox.minX, bbox.maxY],
+                      [bbox.minX, bbox.minY]
+                  ]]
+              }] : [];
+          }
 
+          var box = debug.selectAll('.debug-mouse')
+              .data(gj);
 
-          // update
-          container = containerEnter
-              .merge(container);
+          // exit
+          box.exit()
+              .remove();
 
-          container.selectAll('.display-option-input')
-              .property('value', function(d) { return _options[d]; });
+          // enter/update
+          box.enter()
+              .append('path')
+              .attr('class', 'debug debug-mouse yellow')
+              .merge(box)
+              .attr('d', d3_geoPath());
+      }
 
-          container.selectAll('.display-option-value')
-              .text(function(d) { return Math.floor(_options[d] * 100) + '%'; });
 
-          container.selectAll('.display-option-reset')
-              .classed('disabled', function(d) { return _options[d] === 1; });
+      var throttleFilterLabels = throttle(utilCallWhenIdle(filterLabels), 100);
 
-          // first time only, set brightness if needed
-          if (containerEnter.size() && _options.brightness !== 1) {
-              context.background().brightness(_options.brightness);
-          }
-      }
 
+      drawLabels.observe = function(selection) {
+          var listener = function() { throttleFilterLabels(selection); };
+          selection.on('mousemove.hidelabels', listener);
+          context.on('enter.hidelabels', listener);
+      };
 
-      function backgroundDisplayOptions(selection$$1) {
-          _selection = selection$$1;
 
-          selection$$1
-              .call(uiDisclosure(context, 'background_display_options', true)
-                  .title(t('background.display_options'))
-                  .content(render)
-              );
-      }
+      drawLabels.off = function(selection) {
+          throttleFilterLabels.cancel();
+          selection.on('mousemove.hidelabels', null);
+          context.on('enter.hidelabels', null);
+      };
 
 
-      return backgroundDisplayOptions;
+      return drawLabels;
   }
 
-  function uiBackgroundOffset(context) {
-      var directions = [
-          ['right', [0.5, 0]],
-          ['top', [0, -0.5]],
-          ['left', [-0.5, 0]],
-          ['bottom', [0, 0.5]]
-      ];
+  var _improveOsmEnabled = false;
+  var _errorService;
 
 
-      function d3_eventCancel() {
-          event.stopPropagation();
-          event.preventDefault();
-      }
+  function svgImproveOSM(projection, context, dispatch) {
+      var throttledRedraw = throttle(function () { dispatch.call('change'); }, 1000);
+      var minZoom = 12;
+      var touchLayer = select(null);
+      var drawLayer = select(null);
+      var _improveOsmVisible = false;
 
+      function markerPath(selection, klass) {
+          selection
+              .attr('class', klass)
+              .attr('transform', 'translate(-10, -28)')
+              .attr('points', '16,3 4,3 1,6 1,17 4,20 7,20 10,27 13,20 16,20 19,17.033 19,6');
+      }
 
-      function updateValue() {
-          var meters = geoOffsetToMeters(context.background().offset());
-          var x = +meters[0].toFixed(2);
-          var y = +meters[1].toFixed(2);
 
-          d3_selectAll('.nudge-inner-rect')
-              .select('input')
-              .classed('error', false)
-              .property('value', x + ', ' + y);
+      // Loosely-coupled improveOSM service for fetching errors.
+      function getService() {
+          if (services.improveOSM && !_errorService) {
+              _errorService = services.improveOSM;
+              _errorService.on('loaded', throttledRedraw);
+          } else if (!services.improveOSM && _errorService) {
+              _errorService = null;
+          }
 
-          d3_selectAll('.nudge-reset')
-              .classed('disabled', function() {
-                  return (x === 0 && y === 0);
-              });
+          return _errorService;
       }
 
 
-      function resetOffset() {
-          context.background().offset([0, 0]);
-          updateValue();
+      // Show the errors
+      function editOn() {
+          if (!_improveOsmVisible) {
+              _improveOsmVisible = true;
+              drawLayer
+                  .style('display', 'block');
+          }
       }
 
 
-      function nudge(d) {
-          context.background().nudge(d, context.map().zoom());
-          updateValue();
+      // Immediately remove the errors and their touch targets
+      function editOff() {
+          if (_improveOsmVisible) {
+              _improveOsmVisible = false;
+              drawLayer
+                  .style('display', 'none');
+              drawLayer.selectAll('.qa_error.improveOSM')
+                  .remove();
+              touchLayer.selectAll('.qa_error.improveOSM')
+                  .remove();
+          }
       }
 
 
-      function clickNudgeButton(d) {
-          var interval;
-          var timeout = window.setTimeout(function() {
-                  interval = window.setInterval(nudge.bind(null, d), 100);
-              }, 500);
-
-          function doneNudge() {
-              window.clearTimeout(timeout);
-              window.clearInterval(interval);
-              select(window)
-                  .on('mouseup.buttonoffset', null, true)
-                  .on('mousedown.buttonoffset', null, true);
-          }
-
-          select(window)
-              .on('mouseup.buttonoffset', doneNudge, true)
-              .on('mousedown.buttonoffset', doneNudge, true);
+      // Enable the layer.  This shows the errors and transitions them to visible.
+      function layerOn() {
+          editOn();
 
-          nudge(d);
+          drawLayer
+              .style('opacity', 0)
+              .transition()
+              .duration(250)
+              .style('opacity', 1)
+              .on('end interrupt', function () {
+                  dispatch.call('change');
+              });
       }
 
 
-      function inputOffset() {
-          var input = select(this);
-          var d = input.node().value;
-
-          if (d === '') return resetOffset();
+      // Disable the layer.  This transitions the layer invisible and then hides the errors.
+      function layerOff() {
+          throttledRedraw.cancel();
+          drawLayer.interrupt();
+          touchLayer.selectAll('.qa_error.improveOSM')
+              .remove();
 
-          d = d.replace(/;/g, ',').split(',').map(function(n) {
-              // if n is NaN, it will always get mapped to false.
-              return !isNaN(n) && n;
-          });
+          drawLayer
+              .transition()
+              .duration(250)
+              .style('opacity', 0)
+              .on('end interrupt', function () {
+                  editOff();
+                  dispatch.call('change');
+              });
+      }
 
-          if (d.length !== 2 || !d[0] || !d[1]) {
-              input.classed('error', true);
-              return;
-          }
 
-          context.background().offset(geoMetersToOffset(d));
-          updateValue();
-      }
+      // Update the error markers
+      function updateMarkers() {
+          if (!_improveOsmVisible || !_improveOsmEnabled) return;
 
+          var service = getService();
+          var selectedID = context.selectedErrorID();
+          var data = (service ? service.getErrors(projection) : []);
+          var getTransform = svgPointTransform(projection);
 
-      function dragOffset() {
-          event.preventDefault();
-          if (event.button !== 0) return;
+          // Draw markers..
+          var markers = drawLayer.selectAll('.qa_error.improveOSM')
+              .data(data, function(d) { return d.id; });
 
-          var origin = [event.clientX, event.clientY];
+          // exit
+          markers.exit()
+              .remove();
 
-          context.container()
-              .append('div')
-              .attr('class', 'nudge-surface');
+          // enter
+          var markersEnter = markers.enter()
+              .append('g')
+              .attr('class', function(d) {
+                  return [
+                      'qa_error',
+                      d.service,
+                      'error_id-' + d.id,
+                      'error_type-' + d.error_type,
+                      'category-' + d.category
+                  ].join(' ');
+              });
 
-          select(window)
-              .on('mousemove.offset', function() {
-                  var latest = [event.clientX, event.clientY];
-                  var d = [
-                      -(origin[0] - latest[0]) / 4,
-                      -(origin[1] - latest[1]) / 4
-                  ];
+          markersEnter
+              .append('polygon')
+              .call(markerPath, 'shadow');
 
-                  origin = latest;
-                  nudge(d);
-              })
-              .on('mouseup.offset', function() {
-                  if (event.button !== 0) return;
-                  d3_selectAll('.nudge-surface')
-                      .remove();
+          markersEnter
+              .append('ellipse')
+              .attr('cx', 0)
+              .attr('cy', 0)
+              .attr('rx', 4.5)
+              .attr('ry', 2)
+              .attr('class', 'stroke');
 
-                  select(window)
-                      .on('mousemove.offset', null)
-                      .on('mouseup.offset', null);
-              });
-      }
+          markersEnter
+              .append('polygon')
+              .attr('fill', 'currentColor')
+              .call(markerPath, 'qa_error-fill');
 
+          markersEnter
+              .append('use')
+              .attr('transform', 'translate(-5.5, -21)')
+              .attr('class', 'icon-annotation')
+              .attr('width', '11px')
+              .attr('height', '11px')
+              .attr('xlink:href', function(d) {
+                  var picon = d.icon;
 
-      function render(selection$$1) {
-          var container = selection$$1.selectAll('.nudge-container')
-              .data([0]);
+                  if (!picon) {
+                      return '';
+                  } else {
+                      var isMaki = /^maki-/.test(picon);
+                      return '#' + picon + (isMaki ? '-11' : '');
+                  }
+              });
 
-          var containerEnter = container.enter()
-              .append('div')
-              .attr('class', 'nudge-container cf');
+          // update
+          markers
+              .merge(markersEnter)
+              .sort(sortY)
+              .classed('selected', function(d) { return d.id === selectedID; })
+              .attr('transform', getTransform);
 
-          containerEnter
-              .append('div')
-              .attr('class', 'nudge-instructions')
-              .text(t('background.offset'));
 
-          var nudgeEnter = containerEnter
-              .append('div')
-              .attr('class', 'nudge-outer-rect')
-              .on('mousedown', dragOffset);
+          // Draw targets..
+          if (touchLayer.empty()) return;
+          var fillClass = context.getDebug('target') ? 'pink ' : 'nocolor ';
 
-          nudgeEnter
-              .append('div')
-              .attr('class', 'nudge-inner-rect')
-              .append('input')
-              .on('change', inputOffset);
+          var targets = touchLayer.selectAll('.qa_error.improveOSM')
+              .data(data, function(d) { return d.id; });
 
-          containerEnter
-              .append('div')
-              .selectAll('button')
-              .data(directions).enter()
-              .append('button')
-              .attr('class', function(d) { return d[0] + ' nudge'; })
-              .on('contextmenu', d3_eventCancel)
-              .on('mousedown', function(d) {
-                  if (event.button !== 0) return;
-                  clickNudgeButton(d[1]);
-              });
+          // exit
+          targets.exit()
+              .remove();
 
-          containerEnter
-              .append('button')
-              .attr('title', t('background.reset'))
-              .attr('class', 'nudge-reset disabled')
-              .on('contextmenu', d3_eventCancel)
-              .on('click', function() {
-                  if (event.button !== 0) return;
-                  resetOffset();
+          // enter/update
+          targets.enter()
+              .append('rect')
+              .attr('width', '20px')
+              .attr('height', '30px')
+              .attr('x', '-10px')
+              .attr('y', '-28px')
+              .merge(targets)
+              .sort(sortY)
+              .attr('class', function(d) {
+                  return 'qa_error ' + d.service + ' target error_id-' + d.id + ' ' + fillClass;
               })
-              .call(svgIcon('#iD-icon-' + (textDirection === 'rtl' ? 'redo' : 'undo')));
-
-          updateValue();
-      }
+              .attr('transform', getTransform);
 
 
-      function backgroundOffset(selection$$1) {
-          selection$$1
-              .call(uiDisclosure(context, 'background_offset', false)
-                  .title(t('background.fix_misalignment'))
-                  .content(render)
-              );
+          function sortY(a, b) {
+              return (a.id === selectedID) ? 1
+                  : (b.id === selectedID) ? -1
+                  : b.loc[1] - a.loc[1];
+          }
       }
 
 
-      context.background()
-          .on('change.backgroundOffset-update', updateValue);
-
-      return backgroundOffset;
-  }
+      // Draw the ImproveOSM layer and schedule loading errors and updating markers.
+      function drawImproveOSM(selection) {
+          var service = getService();
 
-  // Translate a MacOS key command into the appropriate Windows/Linux equivalent.
-  // For example, ⌘Z -> Ctrl+Z
-  var uiCmd = function (code) {
-      var detected = utilDetect();
+          var surface = context.surface();
+          if (surface && !surface.empty()) {
+              touchLayer = surface.selectAll('.data-layer.touch .layer-touch.markers');
+          }
 
-      if (detected.os === 'mac') {
-          return code;
-      }
+          drawLayer = selection.selectAll('.layer-improveOSM')
+              .data(service ? [0] : []);
 
-      if (detected.os === 'win') {
-          if (code === '⌘⇧Z') return 'Ctrl+Y';
-      }
+          drawLayer.exit()
+              .remove();
 
-      var result = '',
-          replacements = {
-              '⌘': 'Ctrl',
-              '⇧': 'Shift',
-              '⌥': 'Alt',
-              '⌫': 'Backspace',
-              '⌦': 'Delete'
-          };
+          drawLayer = drawLayer.enter()
+              .append('g')
+              .attr('class', 'layer-improveOSM')
+              .style('display', _improveOsmEnabled ? 'block' : 'none')
+              .merge(drawLayer);
 
-      for (var i = 0; i < code.length; i++) {
-          if (code[i] in replacements) {
-              result += replacements[code[i]] + (i < code.length - 1 ? '+' : '');
-          } else {
-              result += code[i];
+          if (_improveOsmEnabled) {
+              if (service && ~~context.map().zoom() >= minZoom) {
+                  editOn();
+                  service.loadErrors(projection);
+                  updateMarkers();
+              } else {
+                  editOff();
+              }
           }
       }
 
-      return result;
-  };
 
+      // Toggles the layer on and off
+      drawImproveOSM.enabled = function(val) {
+          if (!arguments.length) return _improveOsmEnabled;
 
-  // return a display-focused string for a given keyboard code
-  uiCmd.display = function(code) {
-      if (code.length !== 1) return code;
+          _improveOsmEnabled = val;
+          if (_improveOsmEnabled) {
+              layerOn();
+          } else {
+              layerOff();
+              if (context.selectedErrorID()) {
+                  context.enter(modeBrowse(context));
+              }
+          }
 
-      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'),
+          dispatch.call('change');
+          return this;
       };
 
-      return replacements[code] || code;
-  };
 
-  var marked = createCommonjsModule(function (module, exports) {
-  (function(root) {
+      drawImproveOSM.supported = function() {
+          return !!getService();
+      };
 
-  /**
-   * Block-Level Grammar
-   */
 
-  var block = {
-    newline: /^\n+/,
-    code: /^( {4}[^\n]+\n*)+/,
-    fences: noop,
-    hr: /^ {0,3}((?:- *){3,}|(?:_ *){3,}|(?:\* *){3,})(?:\n+|$)/,
-    heading: /^ *(#{1,6}) *([^\n]+?) *(?:#+ *)?(?:\n+|$)/,
-    nptable: noop,
-    blockquote: /^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/,
-    list: /^( {0,3})(bull) [\s\S]+?(?:hr|def|\n{2,}(?! )(?!\1bull )\n*|\s*$)/,
-    html: '^ {0,3}(?:' // optional indentation
-      + '<(script|pre|style)[\\s>][\\s\\S]*?(?:</\\1>[^\\n]*\\n+|$)' // (1)
-      + '|comment[^\\n]*(\\n+|$)' // (2)
-      + '|<\\?[\\s\\S]*?\\?>\\n*' // (3)
-      + '|<![A-Z][\\s\\S]*?>\\n*' // (4)
-      + '|<!\\[CDATA\\[[\\s\\S]*?\\]\\]>\\n*' // (5)
-      + '|</?(tag)(?: +|\\n|/?>)[\\s\\S]*?(?:\\n{2,}|$)' // (6)
-      + '|<(?!script|pre|style)([a-z][\\w-]*)(?:attribute)*? */?>(?=\\h*\\n)[\\s\\S]*?(?:\\n{2,}|$)' // (7) open tag
-      + '|</(?!script|pre|style)[a-z][\\w-]*\\s*>(?=\\h*\\n)[\\s\\S]*?(?:\\n{2,}|$)' // (7) closing tag
-      + ')',
-    def: /^ {0,3}\[(label)\]: *\n? *<?([^\s>]+)>?(?:(?: +\n? *| *\n *)(title))? *(?:\n+|$)/,
-    table: noop,
-    lheading: /^([^\n]+)\n *(=|-){2,} *(?:\n+|$)/,
-    paragraph: /^([^\n]+(?:\n(?!hr|heading|lheading| {0,3}>|<\/?(?:tag)(?: +|\n|\/?>)|<(?:script|pre|style|!--))[^\n]+)*)/,
-    text: /^[^\n]+/
-  };
+      return drawImproveOSM;
+  }
 
-  block._label = /(?!\s*\])(?:\\[\[\]]|[^\[\]])+/;
-  block._title = /(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/;
-  block.def = edit(block.def)
-    .replace('label', block._label)
-    .replace('title', block._title)
-    .getRegex();
+  function svgStreetside(projection, context, dispatch) {
+      var throttledRedraw = throttle(function () { dispatch.call('change'); }, 1000);
+      var minZoom = 14;
+      var minMarkerZoom = 16;
+      var minViewfieldZoom = 18;
+      var layer = select(null);
+      var _viewerYaw = 0;
+      var _selectedSequence = null;
+      var _streetside;
 
-  block.bullet = /(?:[*+-]|\d{1,9}\.)/;
-  block.item = /^( *)(bull) ?[^\n]*(?:\n(?!\1bull ?)[^\n]*)*/;
-  block.item = edit(block.item, 'gm')
-    .replace(/bull/g, block.bullet)
-    .getRegex();
+      /**
+       * init().
+       */
+      function init() {
+          if (svgStreetside.initialized) return;  // run once
+          svgStreetside.enabled = false;
+          svgStreetside.initialized = true;
+      }
 
-  block.list = edit(block.list)
-    .replace(/bull/g, block.bullet)
-    .replace('hr', '\\n+(?=\\1?(?:(?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$))')
-    .replace('def', '\\n+(?=' + block.def.source + ')')
-    .getRegex();
+      /**
+       * getService().
+       */
+      function getService() {
+          if (services.streetside && !_streetside) {
+              _streetside = services.streetside;
+              _streetside.event
+                  .on('viewerChanged', viewerChanged)
+                  .on('loadedBubbles', throttledRedraw);
+          } else if (!services.streetside && _streetside) {
+              _streetside = null;
+          }
 
-  block._tag = 'address|article|aside|base|basefont|blockquote|body|caption'
-    + '|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption'
-    + '|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe'
-    + '|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option'
-    + '|p|param|section|source|summary|table|tbody|td|tfoot|th|thead|title|tr'
-    + '|track|ul';
-  block._comment = /<!--(?!-?>)[\s\S]*?-->/;
-  block.html = edit(block.html, 'i')
-    .replace('comment', block._comment)
-    .replace('tag', block._tag)
-    .replace('attribute', / +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/)
-    .getRegex();
+          return _streetside;
+      }
 
-  block.paragraph = edit(block.paragraph)
-    .replace('hr', block.hr)
-    .replace('heading', block.heading)
-    .replace('lheading', block.lheading)
-    .replace('tag', block._tag) // pars can be interrupted by type (6) html blocks
-    .getRegex();
+      /**
+       * showLayer().
+       */
+      function showLayer() {
+          var service = getService();
+          if (!service) return;
 
-  block.blockquote = edit(block.blockquote)
-    .replace('paragraph', block.paragraph)
-    .getRegex();
+          service.loadViewer(context);
+          editOn();
 
-  /**
-   * Normal Block Grammar
-   */
+          layer
+              .style('opacity', 0)
+              .transition()
+              .duration(250)
+              .style('opacity', 1)
+              .on('end', function () { dispatch.call('change'); });
+      }
 
-  block.normal = merge({}, block);
+      /**
+       * hideLayer().
+       */
+      function hideLayer() {
+          throttledRedraw.cancel();
 
-  /**
-   * GFM Block Grammar
-   */
+          layer
+              .transition()
+              .duration(250)
+              .style('opacity', 0)
+              .on('end', editOff);
+      }
 
-  block.gfm = merge({}, block.normal, {
-    fences: /^ {0,3}(`{3,}|~{3,})([^`\n]*)\n(?:|([\s\S]*?)\n)(?: {0,3}\1[~`]* *(?:\n+|$)|$)/,
-    paragraph: /^/,
-    heading: /^ *(#{1,6}) +([^\n]+?) *#* *(?:\n+|$)/
-  });
+      /**
+       * editOn().
+       */
+      function editOn() {
+          layer.style('display', 'block');
+      }
 
-  block.gfm.paragraph = edit(block.paragraph)
-    .replace('(?!', '(?!'
-      + block.gfm.fences.source.replace('\\1', '\\2') + '|'
-      + block.list.source.replace('\\1', '\\3') + '|')
-    .getRegex();
+      /**
+       * editOff().
+       */
+      function editOff() {
+          layer.selectAll('.viewfield-group').remove();
+          layer.style('display', 'none');
+      }
 
-  /**
-   * GFM + Tables Block Grammar
-   */
+      /**
+       * click() Handles 'bubble' point click event.
+       */
+      function click(d) {
+          var service = getService();
+          if (!service) return;
 
-  block.tables = merge({}, block.gfm, {
-    nptable: /^ *([^|\n ].*\|.*)\n *([-:]+ *\|[-| :]*)(?:\n((?:.*[^>\n ].*(?:\n|$))*)\n*|$)/,
-    table: /^ *\|(.+)\n *\|?( *[-:]+[-| :]*)(?:\n((?: *[^>\n ].*(?:\n|$))*)\n*|$)/
-  });
+          // try to preserve the viewer rotation when staying on the same sequence
+          if (d.sequenceKey !== _selectedSequence) {
+              _viewerYaw = 0;  // reset
+          }
+          _selectedSequence = d.sequenceKey;
 
-  /**
-   * Pedantic grammar
-   */
+          service
+              .selectImage(d)
+              .then(function(r) {
+                  if (r.status === 'ok'){
+                      service.showViewer(_viewerYaw);
+                  }
+              });
 
-  block.pedantic = merge({}, block.normal, {
-    html: edit(
-      '^ *(?:comment *(?:\\n|\\s*$)'
-      + '|<(tag)[\\s\\S]+?</\\1> *(?:\\n{2,}|\\s*$)' // closed tag
-      + '|<tag(?:"[^"]*"|\'[^\']*\'|\\s[^\'"/>\\s]*)*?/?> *(?:\\n{2,}|\\s*$))')
-      .replace('comment', block._comment)
-      .replace(/tag/g, '(?!(?:'
-        + 'a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub'
-        + '|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)'
-        + '\\b)\\w+(?!:|[^\\w\\s@]*@)\\b')
-      .getRegex(),
-    def: /^ *\[([^\]]+)\]: *<?([^\s>]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/
-  });
 
-  /**
-   * Block Lexer
-   */
+          context.map().centerEase(d.loc);
+      }
 
-  function Lexer(options) {
-    this.tokens = [];
-    this.tokens.links = Object.create(null);
-    this.options = options || marked.defaults;
-    this.rules = block.normal;
+      /**
+       * mouseover().
+       */
+      function mouseover(d) {
+          var service = getService();
+          if (service) service.setStyles(d);
+      }
 
-    if (this.options.pedantic) {
-      this.rules = block.pedantic;
-    } else if (this.options.gfm) {
-      if (this.options.tables) {
-        this.rules = block.tables;
-      } else {
-        this.rules = block.gfm;
+      /**
+       * mouseout().
+       */
+      function mouseout() {
+          var service = getService();
+          if (service) service.setStyles(null);
       }
-    }
-  }
 
-  /**
-   * Expose Block Rules
-   */
+      /**
+       * transform().
+       */
+      function transform(d) {
+          var t = svgPointTransform(projection)(d);
+          var rot = d.ca + _viewerYaw;
+          if (rot) {
+              t += ' rotate(' + Math.floor(rot) + ',0,0)';
+          }
+          return t;
+      }
 
-  Lexer.rules = block;
 
-  /**
-   * Static Lex Method
-   */
+      function viewerChanged() {
+          var service = getService();
+          if (!service) return;
 
-  Lexer.lex = function(src, options) {
-    var lexer = new Lexer(options);
-    return lexer.lex(src);
-  };
+          var viewer = service.viewer();
+          if (!viewer) return;
 
-  /**
-   * Preprocessing
-   */
+          // update viewfield rotation
+          _viewerYaw = viewer.getYaw();
 
-  Lexer.prototype.lex = function(src) {
-    src = src
-      .replace(/\r\n|\r/g, '\n')
-      .replace(/\t/g, '    ')
-      .replace(/\u00a0/g, ' ')
-      .replace(/\u2424/g, '\n');
+          // avoid updating if the map is currently transformed
+          // e.g. during drags or easing.
+          if (context.map().isTransformed()) return;
 
-    return this.token(src, true);
-  };
+          layer.selectAll('.viewfield-group.currentView')
+              .attr('transform', transform);
+      }
 
-  /**
-   * Lexing
-   */
 
-  Lexer.prototype.token = function(src, top) {
-    src = src.replace(/^ +$/gm, '');
-    var next,
-        loose,
-        cap,
-        bull,
-        b,
-        item,
-        listStart,
-        listItems,
-        t,
-        space,
-        i,
-        tag,
-        l,
-        isordered,
-        istask,
-        ischecked;
+      /**
+       * update().
+       */
+      function update() {
+          var viewer = select('#photoviewer');
+          var selected = viewer.empty() ? undefined : viewer.datum();
+          var z = ~~context.map().zoom();
+          var showMarkers = (z >= minMarkerZoom);
+          var showViewfields = (z >= minViewfieldZoom);
+          var service = getService();
 
-    while (src) {
-      // newline
-      if (cap = this.rules.newline.exec(src)) {
-        src = src.substring(cap[0].length);
-        if (cap[0].length > 1) {
-          this.tokens.push({
-            type: 'space'
-          });
-        }
-      }
+          var sequences = (service ? service.sequences(projection) : []);
+          var bubbles = (service && showMarkers ? service.bubbles(projection) : []);
 
-      // code
-      if (cap = this.rules.code.exec(src)) {
-        src = src.substring(cap[0].length);
-        cap = cap[0].replace(/^ {4}/gm, '');
-        this.tokens.push({
-          type: 'code',
-          text: !this.options.pedantic
-            ? rtrim(cap, '\n')
-            : cap
-        });
-        continue;
-      }
+          var traces = layer.selectAll('.sequences').selectAll('.sequence')
+              .data(sequences, function(d) { return d.properties.key; });
 
-      // fences (gfm)
-      if (cap = this.rules.fences.exec(src)) {
-        src = src.substring(cap[0].length);
-        this.tokens.push({
-          type: 'code',
-          lang: cap[2] ? cap[2].trim() : cap[2],
-          text: cap[3] || ''
-        });
-        continue;
-      }
+          // exit
+          traces.exit()
+              .remove();
 
-      // heading
-      if (cap = this.rules.heading.exec(src)) {
-        src = src.substring(cap[0].length);
-        this.tokens.push({
-          type: 'heading',
-          depth: cap[1].length,
-          text: cap[2]
-        });
-        continue;
-      }
+          // enter/update
+          traces = traces.enter()
+              .append('path')
+              .attr('class', 'sequence')
+              .merge(traces)
+              .attr('d', svgPath(projection).geojson);
 
-      // table no leading pipe (gfm)
-      if (top && (cap = this.rules.nptable.exec(src))) {
-        item = {
-          type: 'table',
-          header: splitCells(cap[1].replace(/^ *| *\| *$/g, '')),
-          align: cap[2].replace(/^ *|\| *$/g, '').split(/ *\| */),
-          cells: cap[3] ? cap[3].replace(/\n$/, '').split('\n') : []
-        };
 
-        if (item.header.length === item.align.length) {
-          src = src.substring(cap[0].length);
+          var groups = layer.selectAll('.markers').selectAll('.viewfield-group')
+              .data(bubbles, function(d) {
+                  // force reenter once bubbles are attached to a sequence
+                  return d.key + (d.sequenceKey ? 'v1' : 'v0');
+              });
 
-          for (i = 0; i < item.align.length; i++) {
-            if (/^ *-+: *$/.test(item.align[i])) {
-              item.align[i] = 'right';
-            } else if (/^ *:-+: *$/.test(item.align[i])) {
-              item.align[i] = 'center';
-            } else if (/^ *:-+ *$/.test(item.align[i])) {
-              item.align[i] = 'left';
-            } else {
-              item.align[i] = null;
-            }
-          }
+          // exit
+          groups.exit()
+              .remove();
 
-          for (i = 0; i < item.cells.length; i++) {
-            item.cells[i] = splitCells(item.cells[i], item.header.length);
-          }
+          // enter
+          var groupsEnter = groups.enter()
+              .append('g')
+              .attr('class', 'viewfield-group')
+              .on('mouseenter', mouseover)
+              .on('mouseleave', mouseout)
+              .on('click', click);
 
-          this.tokens.push(item);
+          groupsEnter
+              .append('g')
+              .attr('class', 'viewfield-scale');
 
-          continue;
-        }
-      }
+          // update
+          var markers = groups
+              .merge(groupsEnter)
+              .sort(function(a, b) {
+                  return (a === selected) ? 1
+                      : (b === selected) ? -1
+                      : b.loc[1] - a.loc[1];
+              })
+              .attr('transform', transform)
+              .select('.viewfield-scale');
+
+
+          markers.selectAll('circle')
+              .data([0])
+              .enter()
+              .append('circle')
+              .attr('dx', '0')
+              .attr('dy', '0')
+              .attr('r', '6');
+
+          var viewfields = markers.selectAll('.viewfield')
+              .data(showViewfields ? [0] : []);
+
+          viewfields.exit()
+              .remove();
+
+          // viewfields may or may not be drawn...
+          // but if they are, draw below the circles
+          viewfields.enter()
+              .insert('path', 'circle')
+              .attr('class', 'viewfield')
+              .attr('transform', 'scale(1.5,1.5),translate(-8, -13)')
+              .attr('d', viewfieldPath);
+
+          function viewfieldPath() {
+              var d = this.parentNode.__data__;
+              if (d.pano) {
+                  return 'M 8,13 m -10,0 a 10,10 0 1,0 20,0 a 10,10 0 1,0 -20,0';
+              } else {
+                  return 'M 6,9 C 8,8.4 8,8.4 10,9 L 16,-2 C 12,-5 4,-5 0,-2 z';
+              }
+          }
 
-      // hr
-      if (cap = this.rules.hr.exec(src)) {
-        src = src.substring(cap[0].length);
-        this.tokens.push({
-          type: 'hr'
-        });
-        continue;
       }
 
-      // blockquote
-      if (cap = this.rules.blockquote.exec(src)) {
-        src = src.substring(cap[0].length);
+      /**
+       * drawImages()
+       * drawImages is the method that is returned (and that runs) everytime 'svgStreetside()' is called.
+       * 'svgStreetside()' is called from index.js
+       */
+      function drawImages(selection) {
+          var enabled = svgStreetside.enabled;
+          var service = getService();
 
-        this.tokens.push({
-          type: 'blockquote_start'
-        });
+          layer = selection.selectAll('.layer-streetside-images')
+              .data(service ? [0] : []);
 
-        cap = cap[0].replace(/^ *> ?/gm, '');
+          layer.exit()
+              .remove();
 
-        // Pass `top` to keep the current
-        // "toplevel" state. This is exactly
-        // how markdown.pl works.
-        this.token(cap, top);
+          var layerEnter = layer.enter()
+              .append('g')
+              .attr('class', 'layer-streetside-images')
+              .style('display', enabled ? 'block' : 'none');
 
-        this.tokens.push({
-          type: 'blockquote_end'
-        });
+          layerEnter
+              .append('g')
+              .attr('class', 'sequences');
 
-        continue;
+          layerEnter
+              .append('g')
+              .attr('class', 'markers');
+
+          layer = layerEnter
+              .merge(layer);
+
+          if (enabled) {
+              if (service && ~~context.map().zoom() >= minZoom) {
+                  editOn();
+                  update();
+                  service.loadBubbles(projection);
+              } else {
+                  editOff();
+              }
+          }
       }
 
-      // list
-      if (cap = this.rules.list.exec(src)) {
-        src = src.substring(cap[0].length);
-        bull = cap[2];
-        isordered = bull.length > 1;
 
-        listStart = {
-          type: 'list_start',
-          ordered: isordered,
-          start: isordered ? +bull : '',
-          loose: false
-        };
+      /**
+       * drawImages.enabled().
+       */
+      drawImages.enabled = function(_) {
+          if (!arguments.length) return svgStreetside.enabled;
+          svgStreetside.enabled = _;
+          if (svgStreetside.enabled) {
+              showLayer();
+          } else {
+              hideLayer();
+          }
+          dispatch.call('change');
+          return this;
+      };
 
-        this.tokens.push(listStart);
+      /**
+       * drawImages.supported().
+       */
+      drawImages.supported = function() {
+          return !!getService();
+      };
 
-        // Get each top-level item.
-        cap = cap[0].match(this.rules.item);
+      init();
 
-        listItems = [];
-        next = false;
-        l = cap.length;
-        i = 0;
+      return drawImages;
+  }
 
-        for (; i < l; i++) {
-          item = cap[i];
+  function svgMapillaryImages(projection, context, dispatch) {
+      var throttledRedraw = throttle(function () { dispatch.call('change'); }, 1000);
+      var minZoom = 12;
+      var minMarkerZoom = 16;
+      var minViewfieldZoom = 18;
+      var layer = select(null);
+      var _mapillary;
+      var viewerCompassAngle;
 
-          // Remove the list item's bullet
-          // so it is seen as the next token.
-          space = item.length;
-          item = item.replace(/^ *([*+-]|\d+\.) */, '');
 
-          // Outdent whatever the
-          // list item contains. Hacky.
-          if (~item.indexOf('\n ')) {
-            space -= item.length;
-            item = !this.options.pedantic
-              ? item.replace(new RegExp('^ {1,' + space + '}', 'gm'), '')
-              : item.replace(/^ {1,4}/gm, '');
-          }
+      function init() {
+          if (svgMapillaryImages.initialized) return;  // run once
+          svgMapillaryImages.enabled = false;
+          svgMapillaryImages.initialized = true;
+      }
 
-          // Determine whether the next list item belongs here.
-          // Backpedal if it does not belong in this list.
-          if (i !== l - 1) {
-            b = block.bullet.exec(cap[i + 1])[0];
-            if (bull.length > 1 ? b.length === 1
-              : (b.length > 1 || (this.options.smartLists && b !== bull))) {
-              src = cap.slice(i + 1).join('\n') + src;
-              i = l - 1;
-            }
-          }
 
-          // Determine whether item is loose or not.
-          // Use: /(^|\n)(?! )[^\n]+\n\n(?!\s*$)/
-          // for discount behavior.
-          loose = next || /\n\n(?!\s*$)/.test(item);
-          if (i !== l - 1) {
-            next = item.charAt(item.length - 1) === '\n';
-            if (!loose) loose = next;
-          }
+      function getService() {
+          if (services.mapillary && !_mapillary) {
+              _mapillary = services.mapillary;
+              _mapillary.event.on('loadedImages', throttledRedraw);
+              _mapillary.event.on('bearingChanged', function(e) {
+                  viewerCompassAngle = e;
 
-          if (loose) {
-            listStart.loose = true;
-          }
+                  // avoid updating if the map is currently transformed
+                  // e.g. during drags or easing.
+                  if (context.map().isTransformed()) return;
 
-          // Check for task list items
-          istask = /^\[[ xX]\] /.test(item);
-          ischecked = undefined;
-          if (istask) {
-            ischecked = item[1] !== ' ';
-            item = item.replace(/^\[[ xX]\] +/, '');
+                  layer.selectAll('.viewfield-group.currentView')
+                      .filter(function(d) {
+                          return d.pano;
+                      })
+                      .attr('transform', transform);
+              });
+          } else if (!services.mapillary && _mapillary) {
+              _mapillary = null;
           }
 
-          t = {
-            type: 'list_item_start',
-            task: istask,
-            checked: ischecked,
-            loose: loose
-          };
+          return _mapillary;
+      }
 
-          listItems.push(t);
-          this.tokens.push(t);
 
-          // Recurse.
-          this.token(item, false);
+      function showLayer() {
+          var service = getService();
+          if (!service) return;
 
-          this.tokens.push({
-            type: 'list_item_end'
-          });
-        }
+          service.loadViewer(context);
+          editOn();
 
-        if (listStart.loose) {
-          l = listItems.length;
-          i = 0;
-          for (; i < l; i++) {
-            listItems[i].loose = true;
-          }
-        }
+          layer
+              .style('opacity', 0)
+              .transition()
+              .duration(250)
+              .style('opacity', 1)
+              .on('end', function () { dispatch.call('change'); });
+      }
 
-        this.tokens.push({
-          type: 'list_end'
-        });
 
-        continue;
-      }
+      function hideLayer() {
+          throttledRedraw.cancel();
 
-      // html
-      if (cap = this.rules.html.exec(src)) {
-        src = src.substring(cap[0].length);
-        this.tokens.push({
-          type: this.options.sanitize
-            ? 'paragraph'
-            : 'html',
-          pre: !this.options.sanitizer
-            && (cap[1] === 'pre' || cap[1] === 'script' || cap[1] === 'style'),
-          text: cap[0]
-        });
-        continue;
+          layer
+              .transition()
+              .duration(250)
+              .style('opacity', 0)
+              .on('end', editOff);
       }
 
-      // def
-      if (top && (cap = this.rules.def.exec(src))) {
-        src = src.substring(cap[0].length);
-        if (cap[3]) cap[3] = cap[3].substring(1, cap[3].length - 1);
-        tag = cap[1].toLowerCase().replace(/\s+/g, ' ');
-        if (!this.tokens.links[tag]) {
-          this.tokens.links[tag] = {
-            href: cap[2],
-            title: cap[3]
-          };
-        }
-        continue;
+
+      function editOn() {
+          layer.style('display', 'block');
       }
 
-      // table (gfm)
-      if (top && (cap = this.rules.table.exec(src))) {
-        item = {
-          type: 'table',
-          header: splitCells(cap[1].replace(/^ *| *\| *$/g, '')),
-          align: cap[2].replace(/^ *|\| *$/g, '').split(/ *\| */),
-          cells: cap[3] ? cap[3].replace(/(?: *\| *)?\n$/, '').split('\n') : []
-        };
 
-        if (item.header.length === item.align.length) {
-          src = src.substring(cap[0].length);
+      function editOff() {
+          layer.selectAll('.viewfield-group').remove();
+          layer.style('display', 'none');
+      }
 
-          for (i = 0; i < item.align.length; i++) {
-            if (/^ *-+: *$/.test(item.align[i])) {
-              item.align[i] = 'right';
-            } else if (/^ *:-+: *$/.test(item.align[i])) {
-              item.align[i] = 'center';
-            } else if (/^ *:-+ *$/.test(item.align[i])) {
-              item.align[i] = 'left';
-            } else {
-              item.align[i] = null;
-            }
-          }
 
-          for (i = 0; i < item.cells.length; i++) {
-            item.cells[i] = splitCells(
-              item.cells[i].replace(/^ *\| *| *\| *$/g, ''),
-              item.header.length);
-          }
+      function click(d) {
+          var service = getService();
+          if (!service) return;
 
-          this.tokens.push(item);
+          service
+              .selectImage(d)
+              .updateViewer(d.key, context)
+              .showViewer();
 
-          continue;
-        }
+          context.map().centerEase(d.loc);
       }
 
-      // lheading
-      if (cap = this.rules.lheading.exec(src)) {
-        src = src.substring(cap[0].length);
-        this.tokens.push({
-          type: 'heading',
-          depth: cap[2] === '=' ? 1 : 2,
-          text: cap[1]
-        });
-        continue;
-      }
 
-      // top-level paragraph
-      if (top && (cap = this.rules.paragraph.exec(src))) {
-        src = src.substring(cap[0].length);
-        this.tokens.push({
-          type: 'paragraph',
-          text: cap[1].charAt(cap[1].length - 1) === '\n'
-            ? cap[1].slice(0, -1)
-            : cap[1]
-        });
-        continue;
+      function mouseover(d) {
+          var service = getService();
+          if (service) service.setStyles(d);
       }
 
-      // text
-      if (cap = this.rules.text.exec(src)) {
-        // Top-level should never reach here.
-        src = src.substring(cap[0].length);
-        this.tokens.push({
-          type: 'text',
-          text: cap[0]
-        });
-        continue;
+
+      function mouseout() {
+          var service = getService();
+          if (service) service.setStyles(null);
       }
 
-      if (src) {
-        throw new Error('Infinite loop on byte: ' + src.charCodeAt(0));
+
+      function transform(d) {
+          var t = svgPointTransform(projection)(d);
+          if (d.pano && isNumber(viewerCompassAngle)) {
+              t += ' rotate(' + Math.floor(viewerCompassAngle) + ',0,0)';
+          } else if (d.ca) {
+              t += ' rotate(' + Math.floor(d.ca) + ',0,0)';
+          }
+          return t;
       }
-    }
 
-    return this.tokens;
-  };
 
-  /**
-   * Inline-Level Grammar
-   */
+      function update() {
+          var viewer = select('#photoviewer');
+          var selected = viewer.empty() ? undefined : viewer.datum();
 
-  var inline = {
-    escape: /^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/,
-    autolink: /^<(scheme:[^\s\x00-\x1f<>]*|email)>/,
-    url: noop,
-    tag: '^comment'
-      + '|^</[a-zA-Z][\\w:-]*\\s*>' // self-closing tag
-      + '|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>' // open tag
-      + '|^<\\?[\\s\\S]*?\\?>' // processing instruction, e.g. <?php ?>
-      + '|^<![a-zA-Z]+\\s[\\s\\S]*?>' // declaration, e.g. <!DOCTYPE html>
-      + '|^<!\\[CDATA\\[[\\s\\S]*?\\]\\]>', // CDATA section
-    link: /^!?\[(label)\]\(href(?:\s+(title))?\s*\)/,
-    reflink: /^!?\[(label)\]\[(?!\s*\])((?:\\[\[\]]?|[^\[\]\\])+)\]/,
-    nolink: /^!?\[(?!\s*\])((?:\[[^\[\]]*\]|\\[\[\]]|[^\[\]])*)\](?:\[\])?/,
-    strong: /^__([^\s_])__(?!_)|^\*\*([^\s*])\*\*(?!\*)|^__([^\s][\s\S]*?[^\s])__(?!_)|^\*\*([^\s][\s\S]*?[^\s])\*\*(?!\*)/,
-    em: /^_([^\s_])_(?!_)|^\*([^\s*"<\[])\*(?!\*)|^_([^\s][\s\S]*?[^\s_])_(?!_|[^\spunctuation])|^_([^\s_][\s\S]*?[^\s])_(?!_|[^\spunctuation])|^\*([^\s"<\[][\s\S]*?[^\s*])\*(?!\*)|^\*([^\s*"<\[][\s\S]*?[^\s])\*(?!\*)/,
-    code: /^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/,
-    br: /^( {2,}|\\)\n(?!\s*$)/,
-    del: noop,
-    text: /^(`+|[^`])[\s\S]*?(?=[\\<!\[`*]|\b_| {2,}\n|$)/
-  };
+          var z = ~~context.map().zoom();
+          var showMarkers = (z >= minMarkerZoom);
+          var showViewfields = (z >= minViewfieldZoom);
 
-  // list of punctuation marks from common mark spec
-  // without ` and ] to workaround Rule 17 (inline code blocks/links)
-  inline._punctuation = '!"#$%&\'()*+,\\-./:;<=>?@\\[^_{|}~';
-  inline.em = edit(inline.em).replace(/punctuation/g, inline._punctuation).getRegex();
+          var service = getService();
+          var sequences = (service ? service.sequences(projection) : []);
+          var images = (service && showMarkers ? service.images(projection) : []);
 
-  inline._escapes = /\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/g;
+          var traces = layer.selectAll('.sequences').selectAll('.sequence')
+              .data(sequences, function(d) { return d.properties.key; });
 
-  inline._scheme = /[a-zA-Z][a-zA-Z0-9+.-]{1,31}/;
-  inline._email = /[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/;
-  inline.autolink = edit(inline.autolink)
-    .replace('scheme', inline._scheme)
-    .replace('email', inline._email)
-    .getRegex();
+          // exit
+          traces.exit()
+              .remove();
 
-  inline._attribute = /\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/;
+          // enter/update
+          traces = traces.enter()
+              .append('path')
+              .attr('class', 'sequence')
+              .merge(traces)
+              .attr('d', svgPath(projection).geojson);
 
-  inline.tag = edit(inline.tag)
-    .replace('comment', block._comment)
-    .replace('attribute', inline._attribute)
-    .getRegex();
 
-  inline._label = /(?:\[[^\[\]]*\]|\\[\[\]]?|`[^`]*`|[^\[\]\\])*?/;
-  inline._href = /\s*(<(?:\\[<>]?|[^\s<>\\])*>|(?:\\[()]?|\([^\s\x00-\x1f\\]*\)|[^\s\x00-\x1f()\\])*?)/;
-  inline._title = /"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/;
+          var groups = layer.selectAll('.markers').selectAll('.viewfield-group')
+              .data(images, function(d) { return d.key; });
 
-  inline.link = edit(inline.link)
-    .replace('label', inline._label)
-    .replace('href', inline._href)
-    .replace('title', inline._title)
-    .getRegex();
+          // exit
+          groups.exit()
+              .remove();
 
-  inline.reflink = edit(inline.reflink)
-    .replace('label', inline._label)
-    .getRegex();
+          // enter
+          var groupsEnter = groups.enter()
+              .append('g')
+              .attr('class', 'viewfield-group')
+              .on('mouseenter', mouseover)
+              .on('mouseleave', mouseout)
+              .on('click', click);
 
-  /**
-   * Normal Inline Grammar
-   */
+          groupsEnter
+              .append('g')
+              .attr('class', 'viewfield-scale');
 
-  inline.normal = merge({}, inline);
+          // update
+          var markers = groups
+              .merge(groupsEnter)
+              .sort(function(a, b) {
+                  return (a === selected) ? 1
+                      : (b === selected) ? -1
+                      : b.loc[1] - a.loc[1];  // sort Y
+              })
+              .attr('transform', transform)
+              .select('.viewfield-scale');
 
-  /**
-   * Pedantic Inline Grammar
-   */
 
-  inline.pedantic = merge({}, inline.normal, {
-    strong: /^__(?=\S)([\s\S]*?\S)__(?!_)|^\*\*(?=\S)([\s\S]*?\S)\*\*(?!\*)/,
-    em: /^_(?=\S)([\s\S]*?\S)_(?!_)|^\*(?=\S)([\s\S]*?\S)\*(?!\*)/,
-    link: edit(/^!?\[(label)\]\((.*?)\)/)
-      .replace('label', inline._label)
-      .getRegex(),
-    reflink: edit(/^!?\[(label)\]\s*\[([^\]]*)\]/)
-      .replace('label', inline._label)
-      .getRegex()
-  });
+          markers.selectAll('circle')
+              .data([0])
+              .enter()
+              .append('circle')
+              .attr('dx', '0')
+              .attr('dy', '0')
+              .attr('r', '6');
 
-  /**
-   * GFM Inline Grammar
-   */
+          var viewfields = markers.selectAll('.viewfield')
+              .data(showViewfields ? [0] : []);
 
-  inline.gfm = merge({}, inline.normal, {
-    escape: edit(inline.escape).replace('])', '~|])').getRegex(),
-    _extended_email: /[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/,
-    url: /^((?:ftp|https?):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/,
-    _backpedal: /(?:[^?!.,:;*_~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_~)]+(?!$))+/,
-    del: /^~+(?=\S)([\s\S]*?\S)~+/,
-    text: edit(inline.text)
-      .replace(']|', '~]|')
-      .replace('|$', '|https?://|ftp://|www\\.|[a-zA-Z0-9.!#$%&\'*+/=?^_`{\\|}~-]+@|$')
-      .getRegex()
-  });
+          viewfields.exit()
+              .remove();
 
-  inline.gfm.url = edit(inline.gfm.url, 'i')
-    .replace('email', inline.gfm._extended_email)
-    .getRegex();
-  /**
-   * GFM + Line Breaks Inline Grammar
-   */
+          viewfields.enter()               // viewfields may or may not be drawn...
+              .insert('path', 'circle')    // but if they are, draw below the circles
+              .attr('class', 'viewfield')
+              .classed('pano', function() { return this.parentNode.__data__.pano; })
+              .attr('transform', 'scale(1.5,1.5),translate(-8, -13)')
+              .attr('d', viewfieldPath);
 
-  inline.breaks = merge({}, inline.gfm, {
-    br: edit(inline.br).replace('{2,}', '*').getRegex(),
-    text: edit(inline.gfm.text).replace('{2,}', '*').getRegex()
-  });
+          function viewfieldPath() {
+              var d = this.parentNode.__data__;
+              if (d.pano) {
+                  return 'M 8,13 m -10,0 a 10,10 0 1,0 20,0 a 10,10 0 1,0 -20,0';
+              } else {
+                  return 'M 6,9 C 8,8.4 8,8.4 10,9 L 16,-2 C 12,-5 4,-5 0,-2 z';
+              }
+          }
+      }
 
-  /**
-   * Inline Lexer & Compiler
-   */
 
-  function InlineLexer(links, options) {
-    this.options = options || marked.defaults;
-    this.links = links;
-    this.rules = inline.normal;
-    this.renderer = this.options.renderer || new Renderer();
-    this.renderer.options = this.options;
+      function drawImages(selection) {
+          var enabled = svgMapillaryImages.enabled;
+          var service = getService();
 
-    if (!this.links) {
-      throw new Error('Tokens array requires a `links` property.');
-    }
+          layer = selection.selectAll('.layer-mapillary-images')
+              .data(service ? [0] : []);
+
+          layer.exit()
+              .remove();
+
+          var layerEnter = layer.enter()
+              .append('g')
+              .attr('class', 'layer-mapillary-images')
+              .style('display', enabled ? 'block' : 'none');
+
+          layerEnter
+              .append('g')
+              .attr('class', 'sequences');
+
+          layerEnter
+              .append('g')
+              .attr('class', 'markers');
+
+          layer = layerEnter
+              .merge(layer);
 
-    if (this.options.pedantic) {
-      this.rules = inline.pedantic;
-    } else if (this.options.gfm) {
-      if (this.options.breaks) {
-        this.rules = inline.breaks;
-      } else {
-        this.rules = inline.gfm;
+          if (enabled) {
+              if (service && ~~context.map().zoom() >= minZoom) {
+                  editOn();
+                  update();
+                  service.loadImages(projection);
+              } else {
+                  editOff();
+              }
+          }
       }
-    }
-  }
 
-  /**
-   * Expose Inline Rules
-   */
 
-  InlineLexer.rules = inline;
+      drawImages.enabled = function(_) {
+          if (!arguments.length) return svgMapillaryImages.enabled;
+          svgMapillaryImages.enabled = _;
+          if (svgMapillaryImages.enabled) {
+              showLayer();
+          } else {
+              hideLayer();
+          }
+          dispatch.call('change');
+          return this;
+      };
 
-  /**
-   * Static Lexing/Compiling Method
-   */
 
-  InlineLexer.output = function(src, links, options) {
-    var inline = new InlineLexer(links, options);
-    return inline.output(src);
-  };
+      drawImages.supported = function() {
+          return !!getService();
+      };
 
-  /**
-   * Lexing/Compiling
-   */
 
-  InlineLexer.prototype.output = function(src) {
-    var out = '',
-        link,
-        text,
-        href,
-        title,
-        cap,
-        prevCapZero;
+      init();
+      return drawImages;
+  }
 
-    while (src) {
-      // escape
-      if (cap = this.rules.escape.exec(src)) {
-        src = src.substring(cap[0].length);
-        out += escape(cap[1]);
-        continue;
-      }
+  function svgMapillarySigns(projection, context, dispatch) {
+      var throttledRedraw = throttle(function () { dispatch.call('change'); }, 1000);
+      var minZoom = 12;
+      var layer = select(null);
+      var _mapillary;
 
-      // tag
-      if (cap = this.rules.tag.exec(src)) {
-        if (!this.inLink && /^<a /i.test(cap[0])) {
-          this.inLink = true;
-        } else if (this.inLink && /^<\/a>/i.test(cap[0])) {
-          this.inLink = false;
-        }
-        if (!this.inRawBlock && /^<(pre|code|kbd|script)(\s|>)/i.test(cap[0])) {
-          this.inRawBlock = true;
-        } else if (this.inRawBlock && /^<\/(pre|code|kbd|script)(\s|>)/i.test(cap[0])) {
-          this.inRawBlock = false;
-        }
 
-        src = src.substring(cap[0].length);
-        out += this.options.sanitize
-          ? this.options.sanitizer
-            ? this.options.sanitizer(cap[0])
-            : escape(cap[0])
-          : cap[0];
-        continue;
+      function init() {
+          if (svgMapillarySigns.initialized) return;  // run once
+          svgMapillarySigns.enabled = false;
+          svgMapillarySigns.initialized = true;
       }
 
-      // link
-      if (cap = this.rules.link.exec(src)) {
-        src = src.substring(cap[0].length);
-        this.inLink = true;
-        href = cap[2];
-        if (this.options.pedantic) {
-          link = /^([^'"]*[^\s])\s+(['"])(.*)\2/.exec(href);
 
-          if (link) {
-            href = link[1];
-            title = link[3];
-          } else {
-            title = '';
+      function getService() {
+          if (services.mapillary && !_mapillary) {
+              _mapillary = services.mapillary;
+              _mapillary.event.on('loadedSigns', throttledRedraw);
+          } else if (!services.mapillary && _mapillary) {
+              _mapillary = null;
           }
-        } else {
-          title = cap[3] ? cap[3].slice(1, -1) : '';
-        }
-        href = href.trim().replace(/^<([\s\S]*)>$/, '$1');
-        out += this.outputLink(cap, {
-          href: InlineLexer.escapes(href),
-          title: InlineLexer.escapes(title)
-        });
-        this.inLink = false;
-        continue;
+          return _mapillary;
       }
 
-      // reflink, nolink
-      if ((cap = this.rules.reflink.exec(src))
-          || (cap = this.rules.nolink.exec(src))) {
-        src = src.substring(cap[0].length);
-        link = (cap[2] || cap[1]).replace(/\s+/g, ' ');
-        link = this.links[link.toLowerCase()];
-        if (!link || !link.href) {
-          out += cap[0].charAt(0);
-          src = cap[0].substring(1) + src;
-          continue;
-        }
-        this.inLink = true;
-        out += this.outputLink(cap, link);
-        this.inLink = false;
-        continue;
-      }
 
-      // strong
-      if (cap = this.rules.strong.exec(src)) {
-        src = src.substring(cap[0].length);
-        out += this.renderer.strong(this.output(cap[4] || cap[3] || cap[2] || cap[1]));
-        continue;
-      }
+      function showLayer() {
+          var service = getService();
+          if (!service) return;
 
-      // em
-      if (cap = this.rules.em.exec(src)) {
-        src = src.substring(cap[0].length);
-        out += this.renderer.em(this.output(cap[6] || cap[5] || cap[4] || cap[3] || cap[2] || cap[1]));
-        continue;
+          service.loadViewer(context);
+          editOn();
       }
 
-      // code
-      if (cap = this.rules.code.exec(src)) {
-        src = src.substring(cap[0].length);
-        out += this.renderer.codespan(escape(cap[2].trim(), true));
-        continue;
-      }
 
-      // br
-      if (cap = this.rules.br.exec(src)) {
-        src = src.substring(cap[0].length);
-        out += this.renderer.br();
-        continue;
+      function hideLayer() {
+          throttledRedraw.cancel();
+          editOff();
       }
 
-      // del (gfm)
-      if (cap = this.rules.del.exec(src)) {
-        src = src.substring(cap[0].length);
-        out += this.renderer.del(this.output(cap[1]));
-        continue;
-      }
 
-      // autolink
-      if (cap = this.rules.autolink.exec(src)) {
-        src = src.substring(cap[0].length);
-        if (cap[2] === '@') {
-          text = escape(this.mangle(cap[1]));
-          href = 'mailto:' + text;
-        } else {
-          text = escape(cap[1]);
-          href = text;
-        }
-        out += this.renderer.link(href, null, text);
-        continue;
+      function editOn() {
+          layer.style('display', 'block');
       }
 
-      // url (gfm)
-      if (!this.inLink && (cap = this.rules.url.exec(src))) {
-        if (cap[2] === '@') {
-          text = escape(cap[0]);
-          href = 'mailto:' + text;
-        } else {
-          // do extended autolink path validation
-          do {
-            prevCapZero = cap[0];
-            cap[0] = this.rules._backpedal.exec(cap[0])[0];
-          } while (prevCapZero !== cap[0]);
-          text = escape(cap[0]);
-          if (cap[1] === 'www.') {
-            href = 'http://' + text;
-          } else {
-            href = text;
-          }
-        }
-        src = src.substring(cap[0].length);
-        out += this.renderer.link(href, null, text);
-        continue;
-      }
 
-      // text
-      if (cap = this.rules.text.exec(src)) {
-        src = src.substring(cap[0].length);
-        if (this.inRawBlock) {
-          out += this.renderer.text(cap[0]);
-        } else {
-          out += this.renderer.text(escape(this.smartypants(cap[0])));
-        }
-        continue;
+      function editOff() {
+          layer.selectAll('.icon-sign').remove();
+          layer.style('display', 'none');
       }
 
-      if (src) {
-        throw new Error('Infinite loop on byte: ' + src.charCodeAt(0));
+
+      function click(d) {
+          var service = getService();
+          if (!service) return;
+
+          context.map().centerEase(d.loc);
+
+          var selected = service.getSelectedImage();
+          var selectedImageKey = selected && selected.key;
+          var imageKey;
+
+          // Pick one of the images the sign was detected in,
+          // preference given to an image already selected.
+          d.detections.forEach(function(detection) {
+              if (!imageKey || selectedImageKey === detection.image_key) {
+                  imageKey = detection.image_key;
+              }
+          });
+
+          service
+              .selectImage(null, imageKey)
+              .updateViewer(imageKey, context)
+              .showViewer();
       }
-    }
 
-    return out;
-  };
 
-  InlineLexer.escapes = function(text) {
-    return text ? text.replace(InlineLexer.rules._escapes, '$1') : text;
-  };
+      function update() {
+          var service = getService();
+          var data = (service ? service.signs(projection) : []);
+          var viewer = select('#photoviewer');
+          var selected = viewer.empty() ? undefined : viewer.datum();
+          var selectedImageKey = selected && selected.key;
+          var transform = svgPointTransform(projection);
 
-  /**
-   * Compile Link
-   */
+          var signs = layer.selectAll('.icon-sign')
+              .data(data, function(d) { return d.key; });
 
-  InlineLexer.prototype.outputLink = function(cap, link) {
-    var href = link.href,
-        title = link.title ? escape(link.title) : null;
+          // exit
+          signs.exit()
+              .remove();
 
-    return cap[0].charAt(0) !== '!'
-      ? this.renderer.link(href, title, this.output(cap[1]))
-      : this.renderer.image(href, title, escape(cap[1]));
-  };
+          // enter
+          var enter = signs.enter()
+              .append('use')
+              .attr('class', 'icon-sign')
+              .attr('width', '24px')
+              .attr('height', '24px')
+              .attr('x', '-12px')
+              .attr('y', '-12px')
+              .attr('xlink:href', function(d) { return '#' + d.value; })
+              .classed('currentView', function(d) {
+                  return some(d.detections, function(detection) {
+                      return detection.image_key === selectedImageKey;
+                  });
+              })
+              .on('click', click);
 
-  /**
-   * Smartypants Transformations
-   */
+          // update
+          signs
+              .merge(enter)
+              .sort(function(a, b) {
+                  return (a === selected) ? 1
+                      : (b === selected) ? -1
+                      : b.loc[1] - a.loc[1];  // sort Y
+              })
+              .attr('transform', transform);
+      }
 
-  InlineLexer.prototype.smartypants = function(text) {
-    if (!this.options.smartypants) return text;
-    return text
-      // em-dashes
-      .replace(/---/g, '\u2014')
-      // en-dashes
-      .replace(/--/g, '\u2013')
-      // opening singles
-      .replace(/(^|[-\u2014/(\[{"\s])'/g, '$1\u2018')
-      // closing singles & apostrophes
-      .replace(/'/g, '\u2019')
-      // opening doubles
-      .replace(/(^|[-\u2014/(\[{\u2018\s])"/g, '$1\u201c')
-      // closing doubles
-      .replace(/"/g, '\u201d')
-      // ellipses
-      .replace(/\.{3}/g, '\u2026');
-  };
 
-  /**
-   * Mangle Links
-   */
+      function drawSigns(selection) {
+          var enabled = svgMapillarySigns.enabled;
+          var service = getService();
 
-  InlineLexer.prototype.mangle = function(text) {
-    if (!this.options.mangle) return text;
-    var out = '',
-        l = text.length,
-        i = 0,
-        ch;
+          layer = selection.selectAll('.layer-mapillary-signs')
+              .data(service ? [0] : []);
 
-    for (; i < l; i++) {
-      ch = text.charCodeAt(i);
-      if (Math.random() > 0.5) {
-        ch = 'x' + ch.toString(16);
+          layer.exit()
+              .remove();
+
+          layer = layer.enter()
+              .append('g')
+              .attr('class', 'layer-mapillary-signs')
+              .style('display', enabled ? 'block' : 'none')
+              .merge(layer);
+
+          if (enabled) {
+              if (service && ~~context.map().zoom() >= minZoom) {
+                  editOn();
+                  update();
+                  service.loadSigns(context, projection);
+              } else {
+                  editOff();
+              }
+          }
       }
-      out += '&#' + ch + ';';
-    }
 
-    return out;
-  };
 
-  /**
-   * Renderer
-   */
+      drawSigns.enabled = function(_) {
+          if (!arguments.length) return svgMapillarySigns.enabled;
+          svgMapillarySigns.enabled = _;
+          if (svgMapillarySigns.enabled) {
+              showLayer();
+          } else {
+              hideLayer();
+          }
+          dispatch.call('change');
+          return this;
+      };
 
-  function Renderer(options) {
-    this.options = options || marked.defaults;
+
+      drawSigns.supported = function() {
+          return !!getService();
+      };
+
+
+      init();
+      return drawSigns;
   }
 
-  Renderer.prototype.code = function(code, infostring, escaped) {
-    var lang = (infostring || '').match(/\S*/)[0];
-    if (this.options.highlight) {
-      var out = this.options.highlight(code, lang);
-      if (out != null && out !== code) {
-        escaped = true;
-        code = out;
+  function svgOpenstreetcamImages(projection, context, dispatch) {
+      var throttledRedraw = throttle(function () { dispatch.call('change'); }, 1000);
+      var minZoom = 12;
+      var minMarkerZoom = 16;
+      var minViewfieldZoom = 18;
+      var layer = select(null);
+      var _openstreetcam;
+
+
+      function init() {
+          if (svgOpenstreetcamImages.initialized) return;  // run once
+          svgOpenstreetcamImages.enabled = false;
+          svgOpenstreetcamImages.initialized = true;
       }
-    }
 
-    if (!lang) {
-      return '<pre><code>'
-        + (escaped ? code : escape(code, true))
-        + '</code></pre>';
-    }
 
-    return '<pre><code class="'
-      + this.options.langPrefix
-      + escape(lang, true)
-      + '">'
-      + (escaped ? code : escape(code, true))
-      + '</code></pre>\n';
-  };
+      function getService() {
+          if (services.openstreetcam && !_openstreetcam) {
+              _openstreetcam = services.openstreetcam;
+              _openstreetcam.event.on('loadedImages', throttledRedraw);
+          } else if (!services.openstreetcam && _openstreetcam) {
+              _openstreetcam = null;
+          }
 
-  Renderer.prototype.blockquote = function(quote) {
-    return '<blockquote>\n' + quote + '</blockquote>\n';
-  };
+          return _openstreetcam;
+      }
 
-  Renderer.prototype.html = function(html) {
-    return html;
-  };
 
-  Renderer.prototype.heading = function(text, level, raw, slugger) {
-    if (this.options.headerIds) {
-      return '<h'
-        + level
-        + ' id="'
-        + this.options.headerPrefix
-        + slugger.slug(raw)
-        + '">'
-        + text
-        + '</h'
-        + level
-        + '>\n';
-    }
-    // ignore IDs
-    return '<h' + level + '>' + text + '</h' + level + '>\n';
-  };
+      function showLayer() {
+          var service = getService();
+          if (!service) return;
 
-  Renderer.prototype.hr = function() {
-    return this.options.xhtml ? '<hr/>\n' : '<hr>\n';
-  };
+          service.loadViewer(context);
+          editOn();
 
-  Renderer.prototype.list = function(body, ordered, start) {
-    var type = ordered ? 'ol' : 'ul',
-        startatt = (ordered && start !== 1) ? (' start="' + start + '"') : '';
-    return '<' + type + startatt + '>\n' + body + '</' + type + '>\n';
-  };
+          layer
+              .style('opacity', 0)
+              .transition()
+              .duration(250)
+              .style('opacity', 1)
+              .on('end', function () { dispatch.call('change'); });
+      }
 
-  Renderer.prototype.listitem = function(text) {
-    return '<li>' + text + '</li>\n';
-  };
 
-  Renderer.prototype.checkbox = function(checked) {
-    return '<input '
-      + (checked ? 'checked="" ' : '')
-      + 'disabled="" type="checkbox"'
-      + (this.options.xhtml ? ' /' : '')
-      + '> ';
-  };
+      function hideLayer() {
+          throttledRedraw.cancel();
 
-  Renderer.prototype.paragraph = function(text) {
-    return '<p>' + text + '</p>\n';
-  };
+          layer
+              .transition()
+              .duration(250)
+              .style('opacity', 0)
+              .on('end', editOff);
+      }
 
-  Renderer.prototype.table = function(header, body) {
-    if (body) body = '<tbody>' + body + '</tbody>';
 
-    return '<table>\n'
-      + '<thead>\n'
-      + header
-      + '</thead>\n'
-      + body
-      + '</table>\n';
-  };
+      function editOn() {
+          layer.style('display', 'block');
+      }
 
-  Renderer.prototype.tablerow = function(content) {
-    return '<tr>\n' + content + '</tr>\n';
-  };
 
-  Renderer.prototype.tablecell = function(content, flags) {
-    var type = flags.header ? 'th' : 'td';
-    var tag = flags.align
-      ? '<' + type + ' align="' + flags.align + '">'
-      : '<' + type + '>';
-    return tag + content + '</' + type + '>\n';
-  };
+      function editOff() {
+          layer.selectAll('.viewfield-group').remove();
+          layer.style('display', 'none');
+      }
+
+
+      function click(d) {
+          var service = getService();
+          if (!service) return;
+
+          service
+              .selectImage(d)
+              .updateViewer(d)
+              .showViewer();
+
+          context.map().centerEase(d.loc);
+      }
 
-  // span level renderer
-  Renderer.prototype.strong = function(text) {
-    return '<strong>' + text + '</strong>';
-  };
 
-  Renderer.prototype.em = function(text) {
-    return '<em>' + text + '</em>';
-  };
+      function mouseover(d) {
+          var service = getService();
+          if (service) service.setStyles(d);
+      }
 
-  Renderer.prototype.codespan = function(text) {
-    return '<code>' + text + '</code>';
-  };
 
-  Renderer.prototype.br = function() {
-    return this.options.xhtml ? '<br/>' : '<br>';
-  };
+      function mouseout() {
+          var service = getService();
+          if (service) service.setStyles(null);
+      }
 
-  Renderer.prototype.del = function(text) {
-    return '<del>' + text + '</del>';
-  };
 
-  Renderer.prototype.link = function(href, title, text) {
-    href = cleanUrl(this.options.sanitize, this.options.baseUrl, href);
-    if (href === null) {
-      return text;
-    }
-    var out = '<a href="' + escape(href) + '"';
-    if (title) {
-      out += ' title="' + title + '"';
-    }
-    out += '>' + text + '</a>';
-    return out;
-  };
+      function transform(d) {
+          var t = svgPointTransform(projection)(d);
+          if (d.ca) {
+              t += ' rotate(' + Math.floor(d.ca) + ',0,0)';
+          }
+          return t;
+      }
 
-  Renderer.prototype.image = function(href, title, text) {
-    href = cleanUrl(this.options.sanitize, this.options.baseUrl, href);
-    if (href === null) {
-      return text;
-    }
 
-    var out = '<img src="' + href + '" alt="' + text + '"';
-    if (title) {
-      out += ' title="' + title + '"';
-    }
-    out += this.options.xhtml ? '/>' : '>';
-    return out;
-  };
+      function update() {
+          var viewer = select('#photoviewer');
+          var selected = viewer.empty() ? undefined : viewer.datum();
 
-  Renderer.prototype.text = function(text) {
-    return text;
-  };
+          var z = ~~context.map().zoom();
+          var showMarkers = (z >= minMarkerZoom);
+          var showViewfields = (z >= minViewfieldZoom);
 
-  /**
-   * TextRenderer
-   * returns only the textual part of the token
-   */
+          var service = getService();
+          var sequences = (service ? service.sequences(projection) : []);
+          var images = (service && showMarkers ? service.images(projection) : []);
 
-  function TextRenderer() {}
+          var traces = layer.selectAll('.sequences').selectAll('.sequence')
+              .data(sequences, function(d) { return d.properties.key; });
 
-  // no need for block level renderers
+          // exit
+          traces.exit()
+              .remove();
 
-  TextRenderer.prototype.strong =
-  TextRenderer.prototype.em =
-  TextRenderer.prototype.codespan =
-  TextRenderer.prototype.del =
-  TextRenderer.prototype.text = function (text) {
-    return text;
-  };
+          // enter/update
+          traces = traces.enter()
+              .append('path')
+              .attr('class', 'sequence')
+              .merge(traces)
+              .attr('d', svgPath(projection).geojson);
 
-  TextRenderer.prototype.link =
-  TextRenderer.prototype.image = function(href, title, text) {
-    return '' + text;
-  };
 
-  TextRenderer.prototype.br = function() {
-    return '';
-  };
+          var groups = layer.selectAll('.markers').selectAll('.viewfield-group')
+              .data(images, function(d) { return d.key; });
 
-  /**
-   * Parsing & Compiling
-   */
+          // exit
+          groups.exit()
+              .remove();
 
-  function Parser(options) {
-    this.tokens = [];
-    this.token = null;
-    this.options = options || marked.defaults;
-    this.options.renderer = this.options.renderer || new Renderer();
-    this.renderer = this.options.renderer;
-    this.renderer.options = this.options;
-    this.slugger = new Slugger();
-  }
+          // enter
+          var groupsEnter = groups.enter()
+              .append('g')
+              .attr('class', 'viewfield-group')
+              .on('mouseenter', mouseover)
+              .on('mouseleave', mouseout)
+              .on('click', click);
 
-  /**
-   * Static Parse Method
-   */
+          groupsEnter
+              .append('g')
+              .attr('class', 'viewfield-scale');
 
-  Parser.parse = function(src, options) {
-    var parser = new Parser(options);
-    return parser.parse(src);
-  };
+          // update
+          var markers = groups
+              .merge(groupsEnter)
+              .sort(function(a, b) {
+                  return (a === selected) ? 1
+                      : (b === selected) ? -1
+                      : b.loc[1] - a.loc[1];  // sort Y
+              })
+              .attr('transform', transform)
+              .select('.viewfield-scale');
 
-  /**
-   * Parse Loop
-   */
 
-  Parser.prototype.parse = function(src) {
-    this.inline = new InlineLexer(src.links, this.options);
-    // use an InlineLexer with a TextRenderer to extract pure text
-    this.inlineText = new InlineLexer(
-      src.links,
-      merge({}, this.options, {renderer: new TextRenderer()})
-    );
-    this.tokens = src.reverse();
+          markers.selectAll('circle')
+              .data([0])
+              .enter()
+              .append('circle')
+              .attr('dx', '0')
+              .attr('dy', '0')
+              .attr('r', '6');
 
-    var out = '';
-    while (this.next()) {
-      out += this.tok();
-    }
+          var viewfields = markers.selectAll('.viewfield')
+              .data(showViewfields ? [0] : []);
 
-    return out;
-  };
+          viewfields.exit()
+              .remove();
 
-  /**
-   * Next Token
-   */
+          viewfields.enter()               // viewfields may or may not be drawn...
+              .insert('path', 'circle')    // but if they are, draw below the circles
+              .attr('class', 'viewfield')
+              .attr('transform', 'scale(1.5,1.5),translate(-8, -13)')
+              .attr('d', 'M 6,9 C 8,8.4 8,8.4 10,9 L 16,-2 C 12,-5 4,-5 0,-2 z');
+      }
 
-  Parser.prototype.next = function() {
-    return this.token = this.tokens.pop();
-  };
 
-  /**
-   * Preview Next Token
-   */
+      function drawImages(selection) {
+          var enabled = svgOpenstreetcamImages.enabled,
+              service = getService();
 
-  Parser.prototype.peek = function() {
-    return this.tokens[this.tokens.length - 1] || 0;
-  };
+          layer = selection.selectAll('.layer-openstreetcam-images')
+              .data(service ? [0] : []);
 
-  /**
-   * Parse Text Tokens
-   */
+          layer.exit()
+              .remove();
 
-  Parser.prototype.parseText = function() {
-    var body = this.token.text;
+          var layerEnter = layer.enter()
+              .append('g')
+              .attr('class', 'layer-openstreetcam-images')
+              .style('display', enabled ? 'block' : 'none');
 
-    while (this.peek().type === 'text') {
-      body += '\n' + this.next().text;
-    }
+          layerEnter
+              .append('g')
+              .attr('class', 'sequences');
 
-    return this.inline.output(body);
-  };
+          layerEnter
+              .append('g')
+              .attr('class', 'markers');
 
-  /**
-   * Parse Current Token
-   */
+          layer = layerEnter
+              .merge(layer);
 
-  Parser.prototype.tok = function() {
-    switch (this.token.type) {
-      case 'space': {
-        return '';
-      }
-      case 'hr': {
-        return this.renderer.hr();
-      }
-      case 'heading': {
-        return this.renderer.heading(
-          this.inline.output(this.token.text),
-          this.token.depth,
-          unescape(this.inlineText.output(this.token.text)),
-          this.slugger);
-      }
-      case 'code': {
-        return this.renderer.code(this.token.text,
-          this.token.lang,
-          this.token.escaped);
+          if (enabled) {
+              if (service && ~~context.map().zoom() >= minZoom) {
+                  editOn();
+                  update();
+                  service.loadImages(projection);
+              } else {
+                  editOff();
+              }
+          }
       }
-      case 'table': {
-        var header = '',
-            body = '',
-            i,
-            row,
-            cell,
-            j;
-
-        // header
-        cell = '';
-        for (i = 0; i < this.token.header.length; i++) {
-          cell += this.renderer.tablecell(
-            this.inline.output(this.token.header[i]),
-            { header: true, align: this.token.align[i] }
-          );
-        }
-        header += this.renderer.tablerow(cell);
 
-        for (i = 0; i < this.token.cells.length; i++) {
-          row = this.token.cells[i];
 
-          cell = '';
-          for (j = 0; j < row.length; j++) {
-            cell += this.renderer.tablecell(
-              this.inline.output(row[j]),
-              { header: false, align: this.token.align[j] }
-            );
+      drawImages.enabled = function(_) {
+          if (!arguments.length) return svgOpenstreetcamImages.enabled;
+          svgOpenstreetcamImages.enabled = _;
+          if (svgOpenstreetcamImages.enabled) {
+              showLayer();
+          } else {
+              hideLayer();
           }
+          dispatch.call('change');
+          return this;
+      };
 
-          body += this.renderer.tablerow(cell);
-        }
-        return this.renderer.table(header, body);
-      }
-      case 'blockquote_start': {
-        body = '';
 
-        while (this.next().type !== 'blockquote_end') {
-          body += this.tok();
-        }
+      drawImages.supported = function() {
+          return !!getService();
+      };
 
-        return this.renderer.blockquote(body);
-      }
-      case 'list_start': {
-        body = '';
-        var ordered = this.token.ordered,
-            start = this.token.start;
 
-        while (this.next().type !== 'list_end') {
-          body += this.tok();
-        }
+      init();
+      return drawImages;
+  }
 
-        return this.renderer.list(body, ordered, start);
-      }
-      case 'list_item_start': {
-        body = '';
-        var loose = this.token.loose;
+  function svgOsm(projection, context, dispatch) {
+      var enabled = true;
 
-        if (this.token.task) {
-          body += this.renderer.checkbox(this.token.checked);
-        }
 
-        while (this.next().type !== 'list_item_end') {
-          body += !loose && this.token.type === 'text'
-            ? this.parseText()
-            : this.tok();
-        }
+      function drawOsm(selection) {
+          selection.selectAll('.layer-osm')
+              .data(['covered', 'areas', 'lines', 'points', 'labels'])
+              .enter()
+              .append('g')
+              .attr('class', function(d) { return 'layer-osm ' + d; });
 
-        return this.renderer.listitem(body);
-      }
-      case 'html': {
-        // TODO parse inline content if parameter markdown=1
-        return this.renderer.html(this.token.text);
-      }
-      case 'paragraph': {
-        return this.renderer.paragraph(this.inline.output(this.token.text));
-      }
-      case 'text': {
-        return this.renderer.paragraph(this.parseText());
-      }
-      default: {
-        var errMsg = 'Token with "' + this.token.type + '" type was not found.';
-        if (this.options.silent) {
-          console.log(errMsg);
-        } else {
-          throw new Error(errMsg);
-        }
+          selection.selectAll('.layer-osm.points').selectAll('.points-group')
+              .data(['points', 'midpoints', 'vertices', 'turns'])
+              .enter()
+              .append('g')
+              .attr('class', function(d) { return 'points-group ' + d; });
       }
-    }
-  };
-
-  /**
-   * Slugger generates header id
-   */
-
-  function Slugger () {
-    this.seen = {};
-  }
 
-  /**
-   * Convert string to unique id
-   */
 
-  Slugger.prototype.slug = function (value) {
-    var slug = value
-      .toLowerCase()
-      .trim()
-      .replace(/[\u2000-\u206F\u2E00-\u2E7F\\'!"#$%&()*+,./:;<=>?@[\]^`{|}~]/g, '')
-      .replace(/\s/g, '-');
+      function showLayer() {
+          var layer = context.surface().selectAll('.data-layer.osm');
+          layer.interrupt();
 
-    if (this.seen.hasOwnProperty(slug)) {
-      var originalSlug = slug;
-      do {
-        this.seen[originalSlug]++;
-        slug = originalSlug + '-' + this.seen[originalSlug];
-      } while (this.seen.hasOwnProperty(slug));
-    }
-    this.seen[slug] = 0;
+          layer
+              .classed('disabled', false)
+              .style('opacity', 0)
+              .transition()
+              .duration(250)
+              .style('opacity', 1)
+              .on('end interrupt', function () {
+                  dispatch.call('change');
+              });
+      }
 
-    return slug;
-  };
 
-  /**
-   * Helpers
-   */
+      function hideLayer() {
+          var layer = context.surface().selectAll('.data-layer.osm');
+          layer.interrupt();
 
-  function escape(html, encode) {
-    if (encode) {
-      if (escape.escapeTest.test(html)) {
-        return html.replace(escape.escapeReplace, function (ch) { return escape.replacements[ch]; });
-      }
-    } else {
-      if (escape.escapeTestNoEncode.test(html)) {
-        return html.replace(escape.escapeReplaceNoEncode, function (ch) { return escape.replacements[ch]; });
+          layer
+              .transition()
+              .duration(250)
+              .style('opacity', 0)
+              .on('end interrupt', function () {
+                  layer.classed('disabled', true);
+                  dispatch.call('change');
+              });
       }
-    }
 
-    return html;
-  }
 
-  escape.escapeTest = /[&<>"']/;
-  escape.escapeReplace = /[&<>"']/g;
-  escape.replacements = {
-    '&': '&amp;',
-    '<': '&lt;',
-    '>': '&gt;',
-    '"': '&quot;',
-    "'": '&#39;'
-  };
+      drawOsm.enabled = function(_) {
+          if (!arguments.length) return enabled;
+          enabled = _;
 
-  escape.escapeTestNoEncode = /[<>"']|&(?!#?\w+;)/;
-  escape.escapeReplaceNoEncode = /[<>"']|&(?!#?\w+;)/g;
+          if (enabled) {
+              showLayer();
+          } else {
+              hideLayer();
+          }
 
-  function unescape(html) {
-    // explicitly match decimal, hex, and named HTML entities
-    return html.replace(/&(#(?:\d+)|(?:#x[0-9A-Fa-f]+)|(?:\w+));?/ig, function(_, n) {
-      n = n.toLowerCase();
-      if (n === 'colon') return ':';
-      if (n.charAt(0) === '#') {
-        return n.charAt(1) === 'x'
-          ? String.fromCharCode(parseInt(n.substring(2), 16))
-          : String.fromCharCode(+n.substring(1));
-      }
-      return '';
-    });
-  }
+          dispatch.call('change');
+          return this;
+      };
 
-  function edit(regex, opt) {
-    regex = regex.source || regex;
-    opt = opt || '';
-    return {
-      replace: function(name, val) {
-        val = val.source || val;
-        val = val.replace(/(^|[^\[])\^/g, '$1');
-        regex = regex.replace(name, val);
-        return this;
-      },
-      getRegex: function() {
-        return new RegExp(regex, opt);
-      }
-    };
-  }
 
-  function cleanUrl(sanitize, base, href) {
-    if (sanitize) {
-      try {
-        var prot = decodeURIComponent(unescape(href))
-          .replace(/[^\w:]/g, '')
-          .toLowerCase();
-      } catch (e) {
-        return null;
-      }
-      if (prot.indexOf('javascript:') === 0 || prot.indexOf('vbscript:') === 0 || prot.indexOf('data:') === 0) {
-        return null;
-      }
-    }
-    if (base && !originIndependentUrl.test(href)) {
-      href = resolveUrl(base, href);
-    }
-    try {
-      href = encodeURI(href).replace(/%25/g, '%');
-    } catch (e) {
-      return null;
-    }
-    return href;
+      return drawOsm;
   }
 
-  function resolveUrl(base, href) {
-    if (!baseUrls[' ' + base]) {
-      // we can ignore everything in base after the last slash of its path component,
-      // but we might need to add _that_
-      // https://tools.ietf.org/html/rfc3986#section-3
-      if (/^[^:]+:\/*[^/]*$/.test(base)) {
-        baseUrls[' ' + base] = base + '/';
-      } else {
-        baseUrls[' ' + base] = rtrim(base, '/', true);
-      }
-    }
-    base = baseUrls[' ' + base];
+  var _notesEnabled = false;
+  var _osmService;
 
-    if (href.slice(0, 2) === '//') {
-      return base.replace(/:[\s\S]*/, ':') + href;
-    } else if (href.charAt(0) === '/') {
-      return base.replace(/(:\/*[^/]*)[\s\S]*/, '$1') + href;
-    } else {
-      return base + href;
-    }
-  }
-  var baseUrls = {};
-  var originIndependentUrl = /^$|^[a-z][a-z0-9+.-]*:|^[?#]/i;
 
-  function noop() {}
-  noop.exec = noop;
+  function svgNotes(projection, context, dispatch$1) {
+      if (!dispatch$1) { dispatch$1 = dispatch('change'); }
+      var throttledRedraw = throttle(function () { dispatch$1.call('change'); }, 1000);
+      var minZoom = 12;
+      var touchLayer = select(null);
+      var drawLayer = select(null);
+      var _notesVisible = false;
 
-  function merge(obj) {
-    var i = 1,
-        target,
-        key;
 
-    for (; i < arguments.length; i++) {
-      target = arguments[i];
-      for (key in target) {
-        if (Object.prototype.hasOwnProperty.call(target, key)) {
-          obj[key] = target[key];
-        }
+      function markerPath(selection, klass) {
+          selection
+              .attr('class', klass)
+              .attr('transform', 'translate(-8, -22)')
+              .attr('d', 'm17.5,0l-15,0c-1.37,0 -2.5,1.12 -2.5,2.5l0,11.25c0,1.37 1.12,2.5 2.5,2.5l3.75,0l0,3.28c0,0.38 0.43,0.6 0.75,0.37l4.87,-3.65l5.62,0c1.37,0 2.5,-1.12 2.5,-2.5l0,-11.25c0,-1.37 -1.12,-2.5 -2.5,-2.5z');
       }
-    }
 
-    return obj;
-  }
 
-  function splitCells(tableRow, count) {
-    // ensure that every cell-delimiting pipe has a space
-    // before it to distinguish it from an escaped pipe
-    var row = tableRow.replace(/\|/g, function (match, offset, str) {
-          var escaped = false,
-              curr = offset;
-          while (--curr >= 0 && str[curr] === '\\') escaped = !escaped;
-          if (escaped) {
-            // odd number of slashes means | is escaped
-            // so we leave it alone
-            return '|';
-          } else {
-            // add space before unescaped |
-            return ' |';
+      // Loosely-coupled osm service for fetching notes.
+      function getService() {
+          if (services.osm && !_osmService) {
+              _osmService = services.osm;
+              _osmService.on('loadedNotes', throttledRedraw);
+          } else if (!services.osm && _osmService) {
+              _osmService = null;
           }
-        }),
-        cells = row.split(/ \|/),
-        i = 0;
 
-    if (cells.length > count) {
-      cells.splice(count);
-    } else {
-      while (cells.length < count) cells.push('');
-    }
+          return _osmService;
+      }
 
-    for (; i < cells.length; i++) {
-      // leading or trailing whitespace is ignored per the gfm spec
-      cells[i] = cells[i].trim().replace(/\\\|/g, '|');
-    }
-    return cells;
-  }
 
-  // Remove trailing 'c's. Equivalent to str.replace(/c*$/, '').
-  // /c*$/ is vulnerable to REDOS.
-  // invert: Remove suffix of non-c chars instead. Default falsey.
-  function rtrim(str, c, invert) {
-    if (str.length === 0) {
-      return '';
-    }
+      // Show the notes
+      function editOn() {
+          if (!_notesVisible) {
+              _notesVisible = true;
+              drawLayer
+                  .style('display', 'block');
+          }
+      }
 
-    // Length of suffix matching the invert condition.
-    var suffLen = 0;
 
-    // Step left until we fail to match the invert condition.
-    while (suffLen < str.length) {
-      var currChar = str.charAt(str.length - suffLen - 1);
-      if (currChar === c && !invert) {
-        suffLen++;
-      } else if (currChar !== c && invert) {
-        suffLen++;
-      } else {
-        break;
+      // Immediately remove the notes and their touch targets
+      function editOff() {
+          if (_notesVisible) {
+              _notesVisible = false;
+              drawLayer
+                  .style('display', 'none');
+              drawLayer.selectAll('.note')
+                  .remove();
+              touchLayer.selectAll('.note')
+                  .remove();
+          }
       }
-    }
-
-    return str.substr(0, str.length - suffLen);
-  }
 
-  /**
-   * Marked
-   */
 
-  function marked(src, opt, callback) {
-    // throw error in case of non string input
-    if (typeof src === 'undefined' || src === null) {
-      throw new Error('marked(): input parameter is undefined or null');
-    }
-    if (typeof src !== 'string') {
-      throw new Error('marked(): input parameter is of type '
-        + Object.prototype.toString.call(src) + ', string expected');
-    }
+      // Enable the layer.  This shows the notes and transitions them to visible.
+      function layerOn() {
+          editOn();
 
-    if (callback || typeof opt === 'function') {
-      if (!callback) {
-        callback = opt;
-        opt = null;
+          drawLayer
+              .style('opacity', 0)
+              .transition()
+              .duration(250)
+              .style('opacity', 1)
+              .on('end interrupt', function () {
+                  dispatch$1.call('change');
+              });
       }
 
-      opt = merge({}, marked.defaults, opt || {});
 
-      var highlight = opt.highlight,
-          tokens,
-          pending,
-          i = 0;
+      // Disable the layer.  This transitions the layer invisible and then hides the notes.
+      function layerOff() {
+          throttledRedraw.cancel();
+          drawLayer.interrupt();
+          touchLayer.selectAll('.note')
+              .remove();
 
-      try {
-        tokens = Lexer.lex(src, opt);
-      } catch (e) {
-        return callback(e);
+          drawLayer
+              .transition()
+              .duration(250)
+              .style('opacity', 0)
+              .on('end interrupt', function () {
+                  editOff();
+                  dispatch$1.call('change');
+              });
       }
 
-      pending = tokens.length;
-
-      var done = function(err) {
-        if (err) {
-          opt.highlight = highlight;
-          return callback(err);
-        }
 
-        var out;
+      // Update the note markers
+      function updateMarkers() {
+          if (!_notesVisible || !_notesEnabled) return;
 
-        try {
-          out = Parser.parse(tokens, opt);
-        } catch (e) {
-          err = e;
-        }
+          var service = getService();
+          var selectedID = context.selectedNoteID();
+          var data = (service ? service.notes(projection) : []);
+          var getTransform = svgPointTransform(projection);
 
-        opt.highlight = highlight;
+          // Draw markers..
+          var notes = drawLayer.selectAll('.note')
+              .data(data, function(d) { return d.status + d.id; });
 
-        return err
-          ? callback(err)
-          : callback(null, out);
-      };
+          // exit
+          notes.exit()
+              .remove();
 
-      if (!highlight || highlight.length < 3) {
-        return done();
-      }
+          // enter
+          var notesEnter = notes.enter()
+              .append('g')
+              .attr('class', function(d) { return 'note note-' + d.id + ' ' + d.status; })
+              .classed('new', function(d) { return d.id < 0; });
 
-      delete opt.highlight;
+          notesEnter
+              .append('ellipse')
+              .attr('cx', 0.5)
+              .attr('cy', 1)
+              .attr('rx', 6.5)
+              .attr('ry', 3)
+              .attr('class', 'stroke');
 
-      if (!pending) return done();
+          notesEnter
+              .append('path')
+              .call(markerPath, 'shadow');
 
-      for (; i < tokens.length; i++) {
-        (function(token) {
-          if (token.type !== 'code') {
-            return --pending || done();
-          }
-          return highlight(token.text, token.lang, function(err, code) {
-            if (err) return done(err);
-            if (code == null || code === token.text) {
-              return --pending || done();
-            }
-            token.text = code;
-            token.escaped = true;
-            --pending || done();
-          });
-        })(tokens[i]);
-      }
+          notesEnter
+              .append('use')
+              .attr('class', 'note-fill')
+              .attr('width', '20px')
+              .attr('height', '20px')
+              .attr('x', '-8px')
+              .attr('y', '-22px')
+              .attr('xlink:href', '#iD-icon-note');
 
-      return;
-    }
-    try {
-      if (opt) opt = merge({}, marked.defaults, opt);
-      return Parser.parse(Lexer.lex(src, opt), opt);
-    } catch (e) {
-      e.message += '\nPlease report this to https://github.com/markedjs/marked.';
-      if ((opt || marked.defaults).silent) {
-        return '<p>An error occurred:</p><pre>'
-          + escape(e.message + '', true)
-          + '</pre>';
-      }
-      throw e;
-    }
-  }
+          notesEnter.selectAll('.icon-annotation')
+              .data(function(d) { return [d]; })
+              .enter()
+              .append('use')
+              .attr('class', 'icon-annotation')
+              .attr('width', '10px')
+              .attr('height', '10px')
+              .attr('x', '-3px')
+              .attr('y', '-19px')
+              .attr('xlink:href', function(d) {
+                  return '#iD-icon-' + (d.id < 0 ? 'plus' : (d.status === 'open' ? 'close' : 'apply'));
+              });
 
-  /**
-   * Options
-   */
+          // update
+          notes
+              .merge(notesEnter)
+              .sort(sortY)
+              .classed('selected', function(d) {
+                  var mode = context.mode();
+                  var isMoving = mode && mode.id === 'drag-note';  // no shadows when dragging
+                  return !isMoving && d.id === selectedID;
+              })
+              .attr('transform', getTransform);
 
-  marked.options =
-  marked.setOptions = function(opt) {
-    merge(marked.defaults, opt);
-    return marked;
-  };
 
-  marked.getDefaults = function () {
-    return {
-      baseUrl: null,
-      breaks: false,
-      gfm: true,
-      headerIds: true,
-      headerPrefix: '',
-      highlight: null,
-      langPrefix: 'language-',
-      mangle: true,
-      pedantic: false,
-      renderer: new Renderer(),
-      sanitize: false,
-      sanitizer: null,
-      silent: false,
-      smartLists: false,
-      smartypants: false,
-      tables: true,
-      xhtml: false
-    };
-  };
+          // Draw targets..
+          if (touchLayer.empty()) return;
+          var fillClass = context.getDebug('target') ? 'pink ' : 'nocolor ';
 
-  marked.defaults = marked.getDefaults();
+          var targets = touchLayer.selectAll('.note')
+              .data(data, function(d) { return d.id; });
 
-  /**
-   * Expose
-   */
+          // exit
+          targets.exit()
+              .remove();
 
-  marked.Parser = Parser;
-  marked.parser = Parser.parse;
+          // enter/update
+          targets.enter()
+              .append('rect')
+              .attr('width', '20px')
+              .attr('height', '20px')
+              .attr('x', '-8px')
+              .attr('y', '-22px')
+              .merge(targets)
+              .sort(sortY)
+              .attr('class', function(d) {
+                  var newClass = (d.id < 0 ? 'new' : '');
+                  return 'note target note-' + d.id + ' ' + fillClass + newClass;
+              })
+              .attr('transform', getTransform);
 
-  marked.Renderer = Renderer;
-  marked.TextRenderer = TextRenderer;
 
-  marked.Lexer = Lexer;
-  marked.lexer = Lexer.lex;
+          function sortY(a, b) {
+              return (a.id === selectedID) ? 1 : (b.id === selectedID) ? -1 : b.loc[1] - a.loc[1];
+          }
+      }
 
-  marked.InlineLexer = InlineLexer;
-  marked.inlineLexer = InlineLexer.output;
 
-  marked.Slugger = Slugger;
+      // Draw the notes layer and schedule loading notes and updating markers.
+      function drawNotes(selection) {
+          var service = getService();
 
-  marked.parse = marked;
+          var surface = context.surface();
+          if (surface && !surface.empty()) {
+              touchLayer = surface.selectAll('.data-layer.touch .layer-touch.markers');
+          }
 
-  {
-    module.exports = marked;
-  }
-  })(commonjsGlobal || (typeof window !== 'undefined' ? window : commonjsGlobal));
-  });
+          drawLayer = selection.selectAll('.layer-notes')
+              .data(service ? [0] : []);
 
-  function pointBox(loc, context) {
-      var rect = context.surfaceRect();
-      var point$$1 = context.curtainProjection(loc);
-      return {
-          left: point$$1[0] + rect.left - 40,
-          top: point$$1[1] + rect.top - 60,
-          width: 80,
-          height: 90
-      };
-  }
+          drawLayer.exit()
+              .remove();
 
+          drawLayer = drawLayer.enter()
+              .append('g')
+              .attr('class', 'layer-notes')
+              .style('display', _notesEnabled ? 'block' : 'none')
+              .merge(drawLayer);
 
-  function pad$1(locOrBox, padding, context) {
-      var box;
-      if (locOrBox instanceof Array) {
-          var rect = context.surfaceRect();
-          var point$$1 = context.curtainProjection(locOrBox);
-          box = {
-              left: point$$1[0] + rect.left,
-              top: point$$1[1] + rect.top
-          };
-      } else {
-          box = locOrBox;
+          if (_notesEnabled) {
+              if (service && ~~context.map().zoom() >= minZoom) {
+                  editOn();
+                  service.loadNotes(projection);
+                  updateMarkers();
+              } else {
+                  editOff();
+              }
+          }
       }
 
-      return {
-          left: box.left - padding,
-          top: box.top - padding,
-          width: (box.width || 0) + 2 * padding,
-          height: (box.width || 0) + 2 * padding
-      };
-  }
 
+      // Toggles the layer on and off
+      drawNotes.enabled = function(val) {
+          if (!arguments.length) return _notesEnabled;
 
-  function icon(name, svgklass, useklass) {
-      return '<svg class="icon ' + (svgklass || '') + '">' +
-           '<use xlink:href="' + name + '"' +
-           (useklass ? ' class="' + useklass + '"' : '') + '></use></svg>';
-  }
+          _notesEnabled = val;
+          if (_notesEnabled) {
+              layerOn();
+          } else {
+              layerOff();
+              if (context.selectedNoteID()) {
+                  context.enter(modeBrowse(context));
+              }
+          }
 
+          dispatch$1.call('change');
+          return this;
+      };
 
-  function slugify(text) {
-      return text.toString().toLowerCase()
-          .replace(/\s+/g, '-')           // Replace spaces with -
-          .replace(/[^\w\-]+/g, '')       // Remove all non-word chars
-          .replace(/\-\-+/g, '-')         // Replace multiple - with single -
-          .replace(/^-+/, '')             // Trim - from start of text
-          .replace(/-+$/, '');            // Trim - from end of text
+
+      return drawNotes;
   }
 
+  function svgTouch() {
 
-  // console warning for missing walkthrough names
-  var missingStrings = {};
-  function checkKey(key, text) {
-      if (t(key, { default: undefined}) === undefined) {
-          if (missingStrings.hasOwnProperty(key)) return;  // warn once
-          missingStrings[key] = text;
-          var missing = key + ': ' + text;
-          if (typeof console !== 'undefined') console.log(missing); // eslint-disable-line
+      function drawTouch(selection) {
+          selection.selectAll('.layer-touch')
+              .data(['areas', 'lines', 'points', 'turns', 'markers'])
+              .enter()
+              .append('g')
+              .attr('class', function(d) { return 'layer-touch ' + d; });
       }
-  }
 
+      return drawTouch;
+  }
 
-  function localize(obj) {
-      var key;
+  function svgLayers(projection, context) {
+      var dispatch$1 = dispatch('change');
+      var svg = select(null);
+      var layers = [
+          { id: 'osm', layer: svgOsm(projection, context, dispatch$1) },
+          { id: 'notes', layer: svgNotes(projection, context, dispatch$1) },
+          { id: 'data', layer: svgData(projection, context, dispatch$1) },
+          { id: 'keepRight', layer: svgKeepRight(projection, context, dispatch$1) },
+          { id: 'improveOSM', layer: svgImproveOSM(projection, context, dispatch$1) },
+          { id: 'streetside', layer: svgStreetside(projection, context, dispatch$1)},
+          { id: 'mapillary-images', layer: svgMapillaryImages(projection, context, dispatch$1) },
+          { id: 'mapillary-signs',  layer: svgMapillarySigns(projection, context, dispatch$1) },
+          { id: 'openstreetcam-images', layer: svgOpenstreetcamImages(projection, context, dispatch$1) },
+          { id: 'debug', layer: svgDebug(projection, context, dispatch$1) },
+          { id: 'geolocate', layer: svgGeolocate(projection, context, dispatch$1) },
+          { id: 'touch', layer: svgTouch(projection, context, dispatch$1) }
+      ];
 
-      // Assign name if entity has one..
-      var name = obj.tags && obj.tags.name;
-      if (name) {
-          key = 'intro.graph.name.' + slugify(name);
-          obj.tags.name = t(key, { default: name });
-          checkKey(key, name);
-      }
 
-      // Assign street name if entity has one..
-      var street = obj.tags && obj.tags['addr:street'];
-      if (street) {
-          key = 'intro.graph.name.' + slugify(street);
-          obj.tags['addr:street'] = t(key, { default: street });
-          checkKey(key, street);
+      function drawLayers(selection) {
+          svg = selection.selectAll('.surface')
+              .data([0]);
 
-          // Add address details common across walkthrough..
-          var addrTags = [
-              'block_number', 'city', 'county', 'district', 'hamlet', 'neighbourhood',
-              'postcode', 'province', 'quarter', 'state', 'subdistrict', 'suburb'
-          ];
-          addrTags.forEach(function(k) {
-              var key = 'intro.graph.' + k;
-              var tag = 'addr:' + k;
-              var val = obj.tags && obj.tags[tag];
-              var str = t(key, { default: val });
+          svg = svg.enter()
+              .append('svg')
+              .attr('class', 'surface')
+              .merge(svg);
 
-              if (str) {
-                  if (str.match(/^<.*>$/) !== null) {
-                      delete obj.tags[tag];
-                  } else {
-                      obj.tags[tag] = str;
-                  }
-              }
-          });
-      }
+          var defs = svg.selectAll('.surface-defs')
+              .data([0]);
 
-      return obj;
-  }
+          defs.enter()
+              .append('defs')
+              .attr('class', 'surface-defs');
 
+          var groups = svg.selectAll('.data-layer')
+              .data(layers);
 
-  // Used to detect squareness.. some duplicataion of code from actionOrthogonalize.
-  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
-      var lowerBound = Math.cos((90 - threshold) * Math.PI / 180);  // near right
-      var upperBound = Math.cos(threshold * Math.PI / 180);         // near straight
-      var mag;
+          groups.exit()
+              .remove();
 
-      for (var i = 0; i < points.length; i++) {
-          mag = Math.abs(normalizedDotProduct(i, points));
-          if (mag > lowerBound && mag < upperBound) {
-              return false;
-          }
+          groups.enter()
+              .append('g')
+              .attr('class', function(d) { return 'data-layer ' + d.id; })
+              .merge(groups)
+              .each(function(d) { select(this).call(d.layer); });
       }
 
-      return true;
+
+      drawLayers.all = function() {
+          return layers;
+      };
 
 
-      function normalizedDotProduct(i, points) {
-          var a = points[(i - 1 + points.length) % points.length];
-          var b = points[i];
-          var c = points[(i + 1) % points.length];
-          var p = subtractPoints(a, b);
-          var q = subtractPoints(c, b);
+      drawLayers.layer = function(id) {
+          var obj = find$1(layers, function(o) {return o.id === id;});
+          return obj && obj.layer;
+      };
 
-          p = normalizePoint(p);
-          q = normalizePoint(q);
 
-          return p[0] * q[0] + p[1] * q[1];
+      drawLayers.only = function(what) {
+          var arr = [].concat(what);
+          drawLayers.remove(difference(map$3(layers, 'id'), arr));
+          return this;
+      };
+
 
+      drawLayers.remove = function(what) {
+          var arr = [].concat(what);
+          arr.forEach(function(id) {
+              layers = reject(layers, function(o) {return o.id === id;});
+          });
+          dispatch$1.call('change');
+          return this;
+      };
 
-          function subtractPoints(a, b) {
-              return [a[0] - b[0], a[1] - b[1]];
-          }
 
-          function normalizePoint(point$$1) {
-              var vector = [0, 0];
-              var length = Math.sqrt(point$$1[0] * point$$1[0] + point$$1[1] * point$$1[1]);
-              if (length !== 0) {
-                  vector[0] = point$$1[0] / length;
-                  vector[1] = point$$1[1] / length;
+      drawLayers.add = function(what) {
+          var arr = [].concat(what);
+          arr.forEach(function(obj) {
+              if ('id' in obj && 'layer' in obj) {
+                  layers.push(obj);
               }
-              return vector;
-          }
-      }
-  }
+          });
+          dispatch$1.call('change');
+          return this;
+      };
 
 
-  function selectMenuItem(operation) {
-      var selector$$1 = '.edit-menu .edit-menu-item-' + operation +
-          ', .radial-menu .radial-menu-item-' + operation;
-      return select(selector$$1);
-  }
+      drawLayers.dimensions = function(_) {
+          if (!arguments.length) return utilGetDimensions(svg);
+          utilSetDimensions(svg, _);
+          return this;
+      };
 
 
-  function transitionTime(point1, point2) {
-      var distance = geoSphericalDistance(point1, point2);
-      if (distance === 0)
-          return 0;
-      else if (distance < 80)
-          return 500;
-      else
-          return 1000;
+      return utilRebind(drawLayers, dispatch$1, 'on');
   }
 
-  /** Used for built-in method references. */
-  var objectProto$i = Object.prototype;
+  function svgLines(projection, context) {
+      var detected = utilDetect();
 
-  /** Used to check objects for own properties. */
-  var hasOwnProperty$f = objectProto$i.hasOwnProperty;
+      var highway_stack = {
+          motorway: 0,
+          motorway_link: 1,
+          trunk: 2,
+          trunk_link: 3,
+          primary: 4,
+          primary_link: 5,
+          secondary: 6,
+          tertiary: 7,
+          unclassified: 8,
+          residential: 9,
+          service: 10,
+          footway: 11
+      };
 
-  /**
-   * Assigns own enumerable string keyed properties of source objects to the
-   * destination object. Source objects are applied from left to right.
-   * Subsequent sources overwrite property assignments of previous sources.
-   *
-   * **Note:** This method mutates `object` and is loosely based on
-   * [`Object.assign`](https://mdn.io/Object/assign).
-   *
-   * @static
-   * @memberOf _
-   * @since 0.10.0
-   * @category Object
-   * @param {Object} object The destination object.
-   * @param {...Object} [sources] The source objects.
-   * @returns {Object} Returns `object`.
-   * @see _.assignIn
-   * @example
-   *
-   * function Foo() {
-   *   this.a = 1;
-   * }
-   *
-   * function Bar() {
-   *   this.c = 3;
-   * }
-   *
-   * Foo.prototype.b = 2;
-   * Bar.prototype.d = 4;
-   *
-   * _.assign({ 'a': 0 }, new Foo, new Bar);
-   * // => { 'a': 1, 'c': 3 }
-   */
-  var assign = createAssigner(function(object, source) {
-    if (isPrototype(source) || isArrayLike(source)) {
-      copyObject(source, keys$1(source), object);
-      return;
-    }
-    for (var key in source) {
-      if (hasOwnProperty$f.call(source, key)) {
-        assignValue(object, key, source[key]);
-      }
-    }
-  });
 
-  /* Built-in method references for those with the same name as other `lodash` methods. */
-  var nativeMax$3 = Math.max;
+      function drawTargets(selection, graph, entities, filter) {
+          var targetClass = context.getDebug('target') ? 'pink ' : 'nocolor ';
+          var nopeClass = context.getDebug('target') ? 'red ' : 'nocolor ';
+          var getPath = svgPath(projection).geojson;
+          var activeID = context.activeID();
 
-  /**
-   * Checks if `value` is in `collection`. If `collection` is a string, it's
-   * checked for a substring of `value`, otherwise
-   * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
-   * is used for equality comparisons. If `fromIndex` is negative, it's used as
-   * the offset from the end of `collection`.
-   *
-   * @static
-   * @memberOf _
-   * @since 0.1.0
-   * @category Collection
-   * @param {Array|Object|string} collection The collection to inspect.
-   * @param {*} value The value to search for.
-   * @param {number} [fromIndex=0] The index to search from.
-   * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`.
-   * @returns {boolean} Returns `true` if `value` is found, else `false`.
-   * @example
-   *
-   * _.includes([1, 2, 3], 1);
-   * // => true
-   *
-   * _.includes([1, 2, 3], 1, 2);
-   * // => false
-   *
-   * _.includes({ 'a': 1, 'b': 2 }, 1);
-   * // => true
-   *
-   * _.includes('abcd', 'bc');
-   * // => true
-   */
-  function includes(collection, value, fromIndex, guard) {
-    collection = isArrayLike(collection) ? collection : values$1(collection);
-    fromIndex = (fromIndex && !guard) ? toInteger(fromIndex) : 0;
+          // The targets and nopes will be MultiLineString sub-segments of the ways
+          var data = { targets: [], nopes: [] };
 
-    var length = collection.length;
-    if (fromIndex < 0) {
-      fromIndex = nativeMax$3(length + fromIndex, 0);
-    }
-    return isString(collection)
-      ? (fromIndex <= length && collection.indexOf(value, fromIndex) > -1)
-      : (!!length && baseIndexOf(collection, value, fromIndex) > -1);
-  }
+          entities.forEach(function(way) {
+              var features = svgSegmentWay(way, graph, activeID);
+              data.targets.push.apply(data.targets, features.passive);
+              data.nopes.push.apply(data.nopes, features.active);
+          });
 
-  function coreGraph$$1(other, mutable) {
-      if (!(this instanceof coreGraph$$1)) return new coreGraph$$1(other, mutable);
 
-      if (other instanceof coreGraph$$1) {
-          var base = other.base();
-          this.entities = assign(Object.create(base.entities), other.entities);
-          this._parentWays = assign(Object.create(base.parentWays), other._parentWays);
-          this._parentRels = assign(Object.create(base.parentRels), other._parentRels);
+          // Targets allow hover and vertex snapping
+          var targetData = data.targets.filter(getPath);
+          var targets = selection.selectAll('.line.target-allowed')
+              .filter(function(d) { return filter(d.properties.entity); })
+              .data(targetData, function key(d) { return d.id; });
 
-      } else {
-          this.entities = Object.create({});
-          this._parentWays = Object.create({});
-          this._parentRels = Object.create({});
-          this.rebase(other || [], [this]);
-      }
+          // exit
+          targets.exit()
+              .remove();
 
-      this.transients = {};
-      this._childNodes = {};
-      this.frozen = !mutable;
-  }
+          // enter/update
+          targets.enter()
+              .append('path')
+              .merge(targets)
+              .attr('d', getPath)
+              .attr('class', function(d) { return 'way line target target-allowed ' + targetClass + d.id; });
 
 
-  coreGraph$$1.prototype = {
+          // NOPE
+          var nopeData = data.nopes.filter(getPath);
+          var nopes = selection.selectAll('.line.target-nope')
+              .filter(function(d) { return filter(d.properties.entity); })
+              .data(nopeData, function key(d) { return d.id; });
+
+          // exit
+          nopes.exit()
+              .remove();
 
-      hasEntity: function(id) {
-          return this.entities[id];
-      },
+          // enter/update
+          nopes.enter()
+              .append('path')
+              .merge(nopes)
+              .attr('d', getPath)
+              .attr('class', function(d) { return 'way line target target-nope ' + nopeClass + d.id; });
+      }
 
 
-      entity: function(id) {
-          var entity = this.entities[id];
+      function drawLines(selection, graph, entities, filter$1) {
 
-          //https://github.com/openstreetmap/iD/issues/3973#issuecomment-307052376
-          if (!entity) {
-              entity = this.entities.__proto__[id];  // eslint-disable-line no-proto
-          }
+          function waystack(a, b) {
+              var selected = context.selectedIDs();
+              var scoreA = selected.indexOf(a.id) !== -1 ? 20 : 0;
+              var scoreB = selected.indexOf(b.id) !== -1 ? 20 : 0;
 
-          if (!entity) {
-              throw new Error('entity ' + id + ' not found');
+              if (a.tags.highway) { scoreA -= highway_stack[a.tags.highway]; }
+              if (b.tags.highway) { scoreB -= highway_stack[b.tags.highway]; }
+              return scoreA - scoreB;
           }
-          return entity;
-      },
 
 
-      transient: function(entity, key, fn) {
-          var id = entity.id;
-          var transients = this.transients[id] || (this.transients[id] = {});
+          function drawLineGroup(selection, klass, isSelected) {
+              // Note: Don't add `.selected` class in draw modes
+              var mode = context.mode();
+              var isDrawing = mode && /^draw/.test(mode.id);
+              var selectedClass = (!isDrawing && isSelected) ? 'selected ' : '';
 
-          if (transients[key] !== undefined) {
-              return transients[key];
-          }
+              var lines = selection
+                  .selectAll('path')
+                  .filter(filter$1)
+                  .data(getPathData(isSelected), osmEntity.key);
 
-          transients[key] = fn.call(entity);
+              lines.exit()
+                  .remove();
 
-          return transients[key];
-      },
+              // Optimization: Call expensive TagClasses only on enter selection. This
+              // works because osmEntity.key is defined to include the entity v attribute.
+              lines.enter()
+                  .append('path')
+                  .attr('class', function(d) {
+                      var oldMPClass = oldMultiPolygonOuters[d.id] ? 'old-multipolygon ' : '';
+                      return 'way line ' + klass + ' ' + selectedClass + oldMPClass + d.id;
+                  })
+                  .call(svgTagClasses())
+                  .merge(lines)
+                  .sort(waystack)
+                  .attr('d', getPath)
+                  .call(svgTagClasses().tags(svgRelationMemberTags(graph)));
 
+              return selection;
+          }
 
-      parentWays: function(entity) {
-          var parents = this._parentWays[entity.id];
-          var result = [];
 
-          if (parents) {
-              for (var i = 0; i < parents.length; i++) {
-                  result.push(this.entity(parents[i]));
-              }
+          function getPathData(isSelected) {
+              return function() {
+                  var layer = this.parentNode.__data__;
+                  var data = pathdata[layer] || [];
+                  return data.filter(function(d) {
+                      if (isSelected)
+                          return context.selectedIDs().indexOf(d.id) !== -1;
+                      else
+                          return context.selectedIDs().indexOf(d.id) === -1;
+                  });
+              };
           }
-          return result;
-      },
-
 
-      isPoi: function(entity) {
-          var parentWays = this._parentWays[entity.id];
-          return !parentWays || parentWays.length === 0;
-      },
+          function addMarkers(layergroup, pathclass, groupclass, groupdata, marker) {
+              var markergroup = layergroup
+                  .selectAll('g.' + groupclass)
+                  .data([pathclass]);
 
+              markergroup = markergroup.enter()
+                  .append('g')
+                  .attr('class', groupclass)
+                  .merge(markergroup);
 
-      isShared: function(entity) {
-          var parentWays = this._parentWays[entity.id];
-          return parentWays && parentWays.length > 1;
-      },
+              var markers = markergroup
+                  .selectAll('path')
+                  .filter(filter$1)
+                  .data(
+                      function data() { return groupdata[this.parentNode.__data__] || []; },
+                      function key(d) { return [d.id, d.index]; }
+                  );
 
+              markers.exit()
+                  .remove();
 
-      parentRelations: function(entity) {
-          var parents = this._parentRels[entity.id];
-          var result = [];
+              markers = markers.enter()
+                  .append('path')
+                  .attr('class', pathclass)
+                  .attr('marker-mid', marker)
+                  .merge(markers)
+                  .attr('d', function(d) { return d.d; });
 
-          if (parents) {
-              for (var i = 0; i < parents.length; i++) {
-                  result.push(this.entity(parents[i]));
+              if (detected.ie) {
+                  markers.each(function() { this.parentNode.insertBefore(this, this); });
               }
           }
-          return result;
-      },
 
 
-      childNodes: function(entity) {
-          if (this._childNodes[entity.id]) return this._childNodes[entity.id];
-          if (!entity.nodes) return [];
+          var getPath = svgPath(projection, graph);
+          var ways = [];
+          var pathdata = {};
+          var onewaydata = {};
+          var sideddata = {};
+          var oldMultiPolygonOuters = {};
 
-          var nodes = [];
-          for (var i = 0; i < entity.nodes.length; i++) {
-              nodes[i] = this.entity(entity.nodes[i]);
+          for (var i = 0; i < entities.length; i++) {
+              var entity = entities[i];
+              var outer = osmOldMultipolygonOuterMember(entity, graph);
+              if (outer) {
+                  ways.push(entity.mergeTags(outer.tags));
+                  oldMultiPolygonOuters[outer.id] = true;
+              } else if (entity.geometry(graph) === 'line') {
+                  ways.push(entity);
+              }
           }
 
-          this._childNodes[entity.id] = nodes;
-          return this._childNodes[entity.id];
-      },
+          ways = ways.filter(getPath);
+          pathdata = groupBy(ways, function(way) { return way.layer(); });
 
+          forOwn(pathdata, function(v, k) {
+              var onewayArr = filter(v, function(d) { return d.isOneWay(); });
+              var onewaySegments = svgMarkerSegments(
+                  projection, graph, 35,
+                  function shouldReverse(entity) { return entity.tags.oneway === '-1'; },
+                  function bothDirections(entity) {
+                      return entity.tags.oneway === 'reversible' || entity.tags.oneway === 'alternating';
+                  }
+              );
+              onewaydata[k] = flatten(map$3(onewayArr, onewaySegments));
 
-      base: function() {
-          return {
-              'entities': utilGetPrototypeOf(this.entities),
-              'parentWays': utilGetPrototypeOf(this._parentWays),
-              'parentRels': utilGetPrototypeOf(this._parentRels)
-          };
-      },
+              var sidedArr = filter(v, function(d) { return d.isSided(); });
+              var sidedSegments = svgMarkerSegments(
+                  projection, graph, 30,
+                  function shouldReverse() { return false; },
+                  function bothDirections() { return false; }
+              );
+              sideddata[k] = flatten(map$3(sidedArr, sidedSegments));
+          });
 
 
-      // Unlike other graph methods, rebase mutates in place. This is because it
-      // is used only during the history operation that merges newly downloaded
-      // data into each state. To external consumers, it should appear as if the
-      // graph always contained the newly downloaded data.
-      rebase: function(entities, stack, force) {
-          var base = this.base();
-          var i, j, k, id;
+          var covered = selection.selectAll('.layer-osm.covered');     // under areas
+          var uncovered = selection.selectAll('.layer-osm.lines');     // over areas
+          var touchLayer = selection.selectAll('.layer-touch.lines');
 
-          for (i = 0; i < entities.length; i++) {
-              var entity = entities[i];
+          // Draw lines..
+          [covered, uncovered].forEach(function(selection) {
+              var range$1 = (selection === covered ? range(-10,0) : range(0,11));
+              var layergroup = selection
+                  .selectAll('g.layergroup')
+                  .data(range$1);
 
-              if (!entity.visible || (!force && base.entities[entity.id]))
-                  continue;
+              layergroup = layergroup.enter()
+                  .append('g')
+                  .attr('class', function(d) { return 'layergroup layer' + String(d); })
+                  .merge(layergroup);
 
-              // Merging data into the base graph
-              base.entities[entity.id] = entity;
-              this._updateCalculated(undefined, entity, base.parentWays, base.parentRels);
+              layergroup
+                  .selectAll('g.linegroup')
+                  .data(['shadow', 'casing', 'stroke', 'shadow-highlighted', 'casing-highlighted', 'stroke-highlighted'])
+                  .enter()
+                  .append('g')
+                  .attr('class', function(d) { return 'linegroup line-' + d; });
 
-              // Restore provisionally-deleted nodes that are discovered to have an extant parent
-              if (entity.type === 'way') {
-                  for (j = 0; j < entity.nodes.length; j++) {
-                      id = entity.nodes[j];
-                      for (k = 1; k < stack.length; k++) {
-                          var ents = stack[k].entities;
-                          if (ents.hasOwnProperty(id) && ents[id] === undefined) {
-                              delete ents[id];
-                          }
-                      }
+              layergroup.selectAll('g.line-shadow')
+                  .call(drawLineGroup, 'shadow', false);
+              layergroup.selectAll('g.line-casing')
+                  .call(drawLineGroup, 'casing', false);
+              layergroup.selectAll('g.line-stroke')
+                  .call(drawLineGroup, 'stroke', false);
+
+              layergroup.selectAll('g.line-shadow-highlighted')
+                  .call(drawLineGroup, 'shadow', true);
+              layergroup.selectAll('g.line-casing-highlighted')
+                  .call(drawLineGroup, 'casing', true);
+              layergroup.selectAll('g.line-stroke-highlighted')
+                  .call(drawLineGroup, 'stroke', true);
+
+              addMarkers(layergroup, 'oneway', 'onewaygroup', onewaydata, 'url(#oneway-marker)');
+              addMarkers(layergroup, 'sided', 'sidedgroup', sideddata,
+                  function marker(d) {
+                      var category = graph.entity(d.id).sidednessIdentifier();
+                      return 'url(#sided-marker-' + category + ')';
                   }
-              }
-          }
+              );
+          });
 
-          for (i = 0; i < stack.length; i++) {
-              stack[i]._updateRebased();
-          }
-      },
+          // Draw touch targets..
+          touchLayer
+              .call(drawTargets, graph, ways, filter$1);
+      }
 
 
-      _updateRebased: function() {
-          var base = this.base();
-          var i, k, child, id, keys;
+      return drawLines;
+  }
 
-          keys = Object.keys(this._parentWays);
-          for (i = 0; i < keys.length; i++) {
-              child = keys[i];
-              if (base.parentWays[child]) {
-                  for (k = 0; k < base.parentWays[child].length; k++) {
-                      id = base.parentWays[child][k];
-                      if (!this.entities.hasOwnProperty(id) && !includes(this._parentWays[child], id)) {
-                          this._parentWays[child].push(id);
-                      }
-                  }
-              }
-          }
+  function svgMidpoints(projection, context) {
+      var targetRadius = 8;
 
-          keys = Object.keys(this._parentRels);
-          for (i = 0; i < keys.length; i++) {
-              child = keys[i];
-              if (base.parentRels[child]) {
-                  for (k = 0; k < base.parentRels[child].length; k++) {
-                      id = base.parentRels[child][k];
-                      if (!this.entities.hasOwnProperty(id) && !includes(this._parentRels[child], id)) {
-                          this._parentRels[child].push(id);
-                      }
+      function drawTargets(selection, graph, entities, filter) {
+          var fillClass = context.getDebug('target') ? 'pink ' : 'nocolor ';
+          var getTransform = svgPointTransform(projection).geojson;
+
+          var data = entities.map(function(midpoint) {
+              return {
+                  type: 'Feature',
+                  id: midpoint.id,
+                  properties: {
+                      target: true,
+                      entity: midpoint
+                  },
+                  geometry: {
+                      type: 'Point',
+                      coordinates: midpoint.loc
                   }
-              }
+              };
+          });
+
+          var targets = selection.selectAll('.midpoint.target')
+              .filter(function(d) { return filter(d.properties.entity); })
+              .data(data, function key(d) { return d.id; });
+
+          // exit
+          targets.exit()
+              .remove();
+
+          // enter/update
+          targets.enter()
+              .append('circle')
+              .attr('r', targetRadius)
+              .merge(targets)
+              .attr('class', function(d) { return 'node midpoint target ' + fillClass + d.id; })
+              .attr('transform', getTransform);
+      }
+
+
+      function drawMidpoints(selection, graph, entities, filter, extent) {
+          var drawLayer = selection.selectAll('.layer-osm.points .points-group.midpoints');
+          var touchLayer = selection.selectAll('.layer-touch.points');
+
+          var mode = context.mode();
+          if (mode && mode.id !== 'select') {
+              drawLayer.selectAll('.midpoint').remove();
+              touchLayer.selectAll('.midpoint.target').remove();
+              return;
           }
 
-          this.transients = {};
+          var poly = extent.polygon();
+          var midpoints = {};
 
-          // this._childNodes is not updated, under the assumption that
-          // ways are always downloaded with their child nodes.
-      },
+          for (var i = 0; i < entities.length; i++) {
+              var entity = entities[i];
 
+              if (entity.type !== 'way') continue;
+              if (!filter(entity)) continue;
+              if (context.selectedIDs().indexOf(entity.id) < 0) continue;
 
-      // Updates calculated properties (parentWays, parentRels) for the specified change
-      _updateCalculated: function(oldentity, entity, parentWays, parentRels) {
-          parentWays = parentWays || this._parentWays;
-          parentRels = parentRels || this._parentRels;
+              var nodes = graph.childNodes(entity);
+              for (var j = 0; j < nodes.length - 1; j++) {
+                  var a = nodes[j];
+                  var b = nodes[j + 1];
+                  var id = [a.id, b.id].sort().join('-');
 
-          var type = entity && entity.type || oldentity && oldentity.type;
-          var removed, added, ways, rels, i;
+                  if (midpoints[id]) {
+                      midpoints[id].parents.push(entity);
+                  } else if (geoVecLength(projection(a.loc), projection(b.loc)) > 40) {
+                      var point = geoVecInterp(a.loc, b.loc, 0.5);
+                      var loc = null;
 
-          if (type === 'way') {   // Update parentWays
-              if (oldentity && entity) {
-                  removed = difference(oldentity.nodes, entity.nodes);
-                  added = difference(entity.nodes, oldentity.nodes);
-              } else if (oldentity) {
-                  removed = oldentity.nodes;
-                  added = [];
-              } else if (entity) {
-                  removed = [];
-                  added = entity.nodes;
-              }
-              for (i = 0; i < removed.length; i++) {
-                  parentWays[removed[i]] = without(parentWays[removed[i]], oldentity.id);
-              }
-              for (i = 0; i < added.length; i++) {
-                  ways = without(parentWays[added[i]], entity.id);
-                  ways.push(entity.id);
-                  parentWays[added[i]] = ways;
-              }
+                      if (extent.intersects(point)) {
+                          loc = point;
+                      } else {
+                          for (var k = 0; k < 4; k++) {
+                              point = geoLineIntersection([a.loc, b.loc], [poly[k], poly[k + 1]]);
+                              if (point &&
+                                  geoVecLength(projection(a.loc), projection(point)) > 20 &&
+                                  geoVecLength(projection(b.loc), projection(point)) > 20)
+                              {
+                                  loc = point;
+                                  break;
+                              }
+                          }
+                      }
 
-          } else if (type === 'relation') {   // Update parentRels
-              if (oldentity && entity) {
-                  removed = difference(oldentity.members, entity.members);
-                  added = difference(entity.members, oldentity);
-              } else if (oldentity) {
-                  removed = oldentity.members;
-                  added = [];
-              } else if (entity) {
-                  removed = [];
-                  added = entity.members;
-              }
-              for (i = 0; i < removed.length; i++) {
-                  parentRels[removed[i].id] = without(parentRels[removed[i].id], oldentity.id);
-              }
-              for (i = 0; i < added.length; i++) {
-                  rels = without(parentRels[added[i].id], entity.id);
-                  rels.push(entity.id);
-                  parentRels[added[i].id] = rels;
+                      if (loc) {
+                          midpoints[id] = {
+                              type: 'midpoint',
+                              id: id,
+                              loc: loc,
+                              edge: [a.id, b.id],
+                              parents: [entity]
+                          };
+                      }
+                  }
               }
           }
-      },
-
 
-      replace: function(entity) {
-          if (this.entities[entity.id] === entity) return this;
-
-          return this.update(function() {
-              this._updateCalculated(this.entities[entity.id], entity);
-              this.entities[entity.id] = entity;
-          });
-      },
 
+          function midpointFilter(d) {
+              if (midpoints[d.id])
+                  return true;
 
-      remove: function(entity) {
-          return this.update(function() {
-              this._updateCalculated(entity, undefined);
-              this.entities[entity.id] = undefined;
-          });
-      },
+              for (var i = 0; i < d.parents.length; i++) {
+                  if (filter(d.parents[i])) {
+                      return true;
+                  }
+              }
 
+              return false;
+          }
 
-      revert: function(id) {
-          var baseEntity = this.base().entities[id];
-          var headEntity = this.entities[id];
-          if (headEntity === baseEntity) return this;
 
-          return this.update(function() {
-              this._updateCalculated(headEntity, baseEntity);
-              delete this.entities[id];
-          });
-      },
+          var groups = drawLayer.selectAll('.midpoint')
+              .filter(midpointFilter)
+              .data(values$1(midpoints), function(d) { return d.id; });
 
+          groups.exit()
+              .remove();
 
-      update: function() {
-          var graph = this.frozen ? coreGraph$$1(this, true) : this;
-          for (var i = 0; i < arguments.length; i++) {
-              arguments[i].call(graph, graph);
-          }
+          var enter = groups.enter()
+              .insert('g', ':first-child')
+              .attr('class', 'midpoint');
 
-          if (this.frozen) graph.frozen = true;
+          enter
+              .append('polygon')
+              .attr('points', '-6,8 10,0 -6,-8')
+              .attr('class', 'shadow');
 
-          return graph;
-      },
+          enter
+              .append('polygon')
+              .attr('points', '-3,4 5,0 -3,-4')
+              .attr('class', 'fill');
 
+          groups = groups
+              .merge(enter)
+              .attr('transform', function(d) {
+                  var translate = svgPointTransform(projection);
+                  var a = graph.entity(d.edge[0]);
+                  var b = graph.entity(d.edge[1]);
+                  var angle = geoAngle(a, b, projection) * (180 / Math.PI);
+                  return translate(d) + ' rotate(' + angle + ')';
+              })
+              .call(svgTagClasses().tags(
+                  function(d) { return d.parents[0].tags; }
+              ));
 
-      // Obliterates any existing entities
-      load: function(entities) {
-          var base = this.base();
-          this.entities = Object.create(base.entities);
+          // Propagate data bindings.
+          groups.select('polygon.shadow');
+          groups.select('polygon.fill');
 
-          for (var i in entities) {
-              this.entities[i] = entities[i];
-              this._updateCalculated(base.entities[i], this.entities[i]);
-          }
 
-          return this;
+          // Draw touch targets..
+          touchLayer
+              .call(drawTargets, graph, values$1(midpoints), midpointFilter);
       }
-  };
 
-  var dataIntroGraph = {n1:{id:"n1",loc:[-85.631039,41.948829]},n10:{id:"n10",loc:[-85.634733,41.941588]},n100:{id:"n100",loc:[-85.637395,41.942252]},n1000:{id:"n1000",loc:[-85.632699,41.944763]},n1001:{id:"n1001",loc:[-85.632685,41.944763]},n1002:{id:"n1002",loc:[-85.632673,41.944755]},n1003:{id:"n1003",loc:[-85.632595,41.944682]},n1004:{id:"n1004",loc:[-85.632576,41.944673]},n1005:{id:"n1005",loc:[-85.632551,41.944667]},n1006:{id:"n1006",loc:[-85.63253,41.944667]},n1007:{id:"n1007",loc:[-85.632502,41.944669]},n1008:{id:"n1008",loc:[-85.632483,41.944677]},n1009:{id:"n1009",loc:[-85.632383,41.944731]},n101:{id:"n101",loc:[-85.637357,41.942252]},n1010:{id:"n1010",loc:[-85.63349,41.944976],tags:{"addr:city":"Three Rivers","addr:housenumber":"31","addr:postcode":"49093","addr:state":"MI","addr:street":"Main Street",name:"Sherwin-Williams",shop:"paint"}},n1011:{id:"n1011",loc:[-85.633548,41.945034],tags:{"addr:city":"Three Rivers","addr:housenumber":"33","addr:postcode":"49093","addr:state":"MI","addr:street":"Main Street",name:"Unique Jewelry",shop:"jewelry"}},n1012:{id:"n1012",loc:[-85.633683,41.945129],tags:{"addr:city":"Three Rivers","addr:housenumber":"37","addr:postcode":"49093","addr:state":"MI","addr:street":"Main Street",name:"World Fare",shop:"gift"}},n1013:{id:"n1013",loc:[-85.634563,41.945469],tags:{"addr:city":"Three Rivers","addr:housenumber":"62","addr:postcode":"49093","addr:state":"MI","addr:street":"Main Street",name:"Golden Finch Framing",shop:"frame"}},n1014:{id:"n1014",loc:[-85.634469,41.945379],tags:{"addr:city":"Three Rivers","addr:housenumber":"58","addr:postcode":"49093","addr:state":"MI","addr:street":"Main Street",name:"Dollar Tree",shop:"second_hand"}},n1015:{id:"n1015",loc:[-85.634227,41.945159],tags:{"addr:city":"Three Rivers","addr:housenumber":"48","addr:postcode":"49093","addr:state":"MI","addr:street":"Main Street",amenity:"theatre",name:"Riviera Theatre"}},n1016:{id:"n1016",loc:[-85.634057,41.945012],tags:{"addr:city":"Three Rivers","addr:housenumber":"42","addr:postcode":"49093","addr:state":"MI","addr:street":"Main Street",name:"River City Appliance",shop:"appliance"}},n1017:{id:"n1017",loc:[-85.633879,41.945325],tags:{"addr:city":"Three Rivers","addr:housenumber":"45","addr:postcode":"49093","addr:state":"MI","addr:street":"Main Street",name:"Paparazzi Tattoo",shop:"tattoo"}},n1018:{id:"n1018",loc:[-85.634914,41.945839],tags:{"addr:city":"Three Rivers","addr:housenumber":"88","addr:postcode":"49093","addr:state":"MI","addr:street":"Main Street",amenity:"bank",name:"Southern Michigan Bank"}},n1019:{id:"n1019",loc:[-85.634514,41.946176]},n102:{id:"n102",loc:[-85.637357,41.942216]},n1020:{id:"n1020",loc:[-85.634087,41.946178]},n1021:{id:"n1021",loc:[-85.634357,41.945805]},n1022:{id:"n1022",loc:[-85.634389,41.945788]},n1023:{id:"n1023",loc:[-85.634491,41.94581]},n1024:{id:"n1024",loc:[-85.634513,41.945853]},n1025:{id:"n1025",loc:[-85.634506,41.94583]},n1026:{id:"n1026",loc:[-85.634762,41.946056],tags:{crossing:"marked",highway:"crossing"}},n1027:{id:"n1027",loc:[-85.634767,41.946172]},n1028:{id:"n1028",loc:[-85.634622,41.946175],tags:{crossing:"marked",highway:"crossing"}},n1029:{id:"n1029",loc:[-85.640655,41.942057]},n103:{id:"n103",loc:[-85.637386,41.942054]},n1030:{id:"n1030",loc:[-85.640947,41.942057]},n1031:{id:"n1031",loc:[-85.640957,41.942593]},n1032:{id:"n1032",loc:[-85.630953,41.960873]},n1033:{id:"n1033",loc:[-85.632174,41.960679]},n1034:{id:"n1034",loc:[-85.638785,41.943066]},n1035:{id:"n1035",loc:[-85.638853,41.943065]},n1036:{id:"n1036",loc:[-85.638855,41.943183]},n1037:{id:"n1037",loc:[-85.638552,41.943189]},n1038:{id:"n1038",loc:[-85.63855,41.943149]},n1039:{id:"n1039",loc:[-85.638638,41.943068]},n104:{id:"n104",loc:[-85.637387,41.942125]},n1040:{id:"n1040",loc:[-85.638638,41.943078]},n1041:{id:"n1041",loc:[-85.638813,41.943163]},n1042:{id:"n1042",loc:[-85.638684,41.943165]},n1043:{id:"n1043",loc:[-85.638682,41.943105]},n1044:{id:"n1044",loc:[-85.638706,41.943105]},n1045:{id:"n1045",loc:[-85.638707,41.943117]},n1046:{id:"n1046",loc:[-85.638812,41.943115]},n1047:{id:"n1047",loc:[-85.638769,41.943407]},n1048:{id:"n1048",loc:[-85.638549,41.943407]},n1049:{id:"n1049",loc:[-85.638567,41.943555]},n105:{id:"n105",loc:[-85.637319,41.942125]},n1050:{id:"n1050",loc:[-85.638426,41.943554]},n1051:{id:"n1051",loc:[-85.638427,41.94346]},n1052:{id:"n1052",loc:[-85.638568,41.943461]},n1053:{id:"n1053",loc:[-85.639264,41.943415]},n1054:{id:"n1054",loc:[-85.639082,41.943417]},n1055:{id:"n1055",loc:[-85.63908,41.943331]},n1056:{id:"n1056",loc:[-85.639136,41.94333]},n1057:{id:"n1057",loc:[-85.639158,41.943312]},n1058:{id:"n1058",loc:[-85.639188,41.943313]},n1059:{id:"n1059",loc:[-85.639211,41.943331]},n106:{id:"n106",loc:[-85.637319,41.942137]},n1060:{id:"n1060",loc:[-85.639262,41.943331]},n1061:{id:"n1061",loc:[-85.638986,41.943515]},n1062:{id:"n1062",loc:[-85.63888,41.943521]},n1063:{id:"n1063",loc:[-85.638871,41.943436]},n1064:{id:"n1064",loc:[-85.638958,41.943431]},n1065:{id:"n1065",loc:[-85.638979,41.943443]},n1066:{id:"n1066",loc:[-85.63926,41.943703]},n1067:{id:"n1067",loc:[-85.639152,41.943704]},n1068:{id:"n1068",loc:[-85.639152,41.943691]},n1069:{id:"n1069",loc:[-85.639063,41.943691]},n107:{id:"n107",loc:[-85.637259,41.942137]},n1070:{id:"n1070",loc:[-85.639062,41.943613]},n1071:{id:"n1071",loc:[-85.639259,41.943611]},n1072:{id:"n1072",loc:[-85.639117,41.943726]},n1073:{id:"n1073",loc:[-85.639118,41.943767]},n1074:{id:"n1074",loc:[-85.639051,41.943768]},n1075:{id:"n1075",loc:[-85.63905,41.943727]},n1076:{id:"n1076",loc:[-85.638627,41.943716]},n1077:{id:"n1077",loc:[-85.63863,41.943634]},n1078:{id:"n1078",loc:[-85.63844,41.943631]},n1079:{id:"n1079",loc:[-85.638437,41.943729]},n108:{id:"n108",loc:[-85.637259,41.942126]},n1080:{id:"n1080",loc:[-85.638533,41.94373]},n1081:{id:"n1081",loc:[-85.638534,41.943715]},n1082:{id:"n1082",loc:[-85.638678,41.943941]},n1083:{id:"n1083",loc:[-85.638522,41.943944]},n1084:{id:"n1084",loc:[-85.63852,41.943864]},n1085:{id:"n1085",loc:[-85.638676,41.943861]},n1086:{id:"n1086",loc:[-85.638663,41.944059]},n1087:{id:"n1087",loc:[-85.638513,41.944061]},n1088:{id:"n1088",loc:[-85.638511,41.943991]},n1089:{id:"n1089",loc:[-85.638661,41.943989]},n109:{id:"n109",loc:[-85.637193,41.942126]},n1090:{id:"n1090",loc:[-85.63865,41.944134]},n1091:{id:"n1091",loc:[-85.638429,41.944144]},n1092:{id:"n1092",loc:[-85.638426,41.944106]},n1093:{id:"n1093",loc:[-85.638476,41.944104]},n1094:{id:"n1094",loc:[-85.638475,41.94409]},n1095:{id:"n1095",loc:[-85.638594,41.944084]},n1096:{id:"n1096",loc:[-85.638595,41.944101]},n1097:{id:"n1097",loc:[-85.638647,41.944099]},n1098:{id:"n1098",loc:[-85.63829,41.944154]},n1099:{id:"n1099",loc:[-85.638558,41.944155]},n11:{id:"n11",loc:[-85.634602,41.941523]},n110:{id:"n110",loc:[-85.637192,41.942053]},n1100:{id:"n1100",loc:[-85.638558,41.944338]},n1101:{id:"n1101",loc:[-85.638851,41.944408]},n1102:{id:"n1102",loc:[-85.637771,41.943989]},n1103:{id:"n1103",loc:[-85.639345,41.943964]},n1104:{id:"n1104",loc:[-85.638515,41.94397]},n1105:{id:"n1105",loc:[-85.639256,41.943928]},n1106:{id:"n1106",loc:[-85.639157,41.943929]},n1107:{id:"n1107",loc:[-85.639156,41.9439]},n1108:{id:"n1108",loc:[-85.639118,41.9439]},n1109:{id:"n1109",loc:[-85.639116,41.94382]},n111:{id:"n111",loc:[-85.637248,41.942053]},n1110:{id:"n1110",loc:[-85.639202,41.943819]},n1111:{id:"n1111",loc:[-85.639202,41.943837]},n1112:{id:"n1112",loc:[-85.639293,41.943836]},n1113:{id:"n1113",loc:[-85.639295,41.943898]},n1114:{id:"n1114",loc:[-85.639255,41.943898]},n1115:{id:"n1115",loc:[-85.639296,41.944083]},n1116:{id:"n1116",loc:[-85.639144,41.944084]},n1117:{id:"n1117",loc:[-85.639143,41.944026]},n1118:{id:"n1118",loc:[-85.639162,41.944026]},n1119:{id:"n1119",loc:[-85.639162,41.944]},n112:{id:"n112",loc:[-85.637248,41.942042]},n1120:{id:"n1120",loc:[-85.639295,41.943999]},n1121:{id:"n1121",loc:[-85.639131,41.944139]},n1122:{id:"n1122",loc:[-85.63901,41.94414]},n1123:{id:"n1123",loc:[-85.63901,41.944076]},n1124:{id:"n1124",loc:[-85.63913,41.944075]},n1125:{id:"n1125",loc:[-85.639092,41.944155]},n1126:{id:"n1126",loc:[-85.639093,41.944308]},n1127:{id:"n1127",loc:[-85.639225,41.944308]},n1128:{id:"n1128",loc:[-85.639225,41.94429]},n1129:{id:"n1129",loc:[-85.639253,41.944289]},n113:{id:"n113",loc:[-85.637338,41.942041]},n1130:{id:"n1130",loc:[-85.639253,41.944269]},n1131:{id:"n1131",loc:[-85.639243,41.944269]},n1132:{id:"n1132",loc:[-85.639243,41.944229]},n1133:{id:"n1133",loc:[-85.639224,41.944229]},n1134:{id:"n1134",loc:[-85.639224,41.944196]},n1135:{id:"n1135",loc:[-85.639195,41.944196]},n1136:{id:"n1136",loc:[-85.639195,41.944155]},n1137:{id:"n1137",loc:[-85.639072,41.944154]},n1138:{id:"n1138",loc:[-85.638865,41.944154]},n1139:{id:"n1139",loc:[-85.638863,41.943967]},n114:{id:"n114",loc:[-85.637338,41.942055]},n1140:{id:"n1140",loc:[-85.6386,41.942698]},n1141:{id:"n1141",loc:[-85.639348,41.942698]},n1142:{id:"n1142",loc:[-85.639377,41.944984]},n1143:{id:"n1143",loc:[-85.63937,41.945013]},n1144:{id:"n1144",loc:[-85.639357,41.945033]},n1145:{id:"n1145",loc:[-85.639353,41.945053]},n1146:{id:"n1146",loc:[-85.639352,41.945084]},n1147:{id:"n1147",loc:[-85.638278,41.945516]},n1148:{id:"n1148",loc:[-85.637505,41.945801]},n1149:{id:"n1149",loc:[-85.637327,41.945857]},n115:{id:"n115",loc:[-85.637583,41.941943]},n1150:{id:"n1150",loc:[-85.637168,41.945899]},n1151:{id:"n1151",loc:[-85.637017,41.94593]},n1152:{id:"n1152",loc:[-85.637185,41.945938]},n1153:{id:"n1153",loc:[-85.63682,41.945963]},n1154:{id:"n1154",loc:[-85.636639,41.945984]},n1155:{id:"n1155",loc:[-85.636439,41.945999]},n1156:{id:"n1156",loc:[-85.635801,41.945999]},n1157:{id:"n1157",loc:[-85.635769,41.945908]},n1158:{id:"n1158",loc:[-85.635953,41.946154]},n1159:{id:"n1159",loc:[-85.635472,41.94598]},n116:{id:"n116",loc:[-85.637584,41.941983]},n1160:{id:"n1160",loc:[-85.635409,41.945981]},n1161:{id:"n1161",loc:[-85.635583,41.945987]},n1162:{id:"n1162",loc:[-85.636452,41.945805]},n1163:{id:"n1163",loc:[-85.636425,41.94582]},n1164:{id:"n1164",loc:[-85.636396,41.945817]},n1165:{id:"n1165",loc:[-85.636368,41.945797]},n1166:{id:"n1166",loc:[-85.636346,41.945767]},n1167:{id:"n1167",loc:[-85.636307,41.945745]},n1168:{id:"n1168",loc:[-85.636194,41.94565]},n1169:{id:"n1169",loc:[-85.636121,41.945579]},n117:{id:"n117",loc:[-85.63751,41.941983]},n1170:{id:"n1170",loc:[-85.635995,41.945432]},n1171:{id:"n1171",loc:[-85.637564,41.943538]},n1172:{id:"n1172",loc:[-85.63756,41.943505]},n1173:{id:"n1173",loc:[-85.637435,41.943489]},n1174:{id:"n1174",loc:[-85.637093,41.943556]},n1175:{id:"n1175",loc:[-85.634836,41.941574]},n1176:{id:"n1176",loc:[-85.634692,41.9415]},n1177:{id:"n1177",loc:[-85.634261,41.941337]},n1178:{id:"n1178",loc:[-85.634208,41.940962]},n1179:{id:"n1179",loc:[-85.635247,41.940968]},n118:{id:"n118",loc:[-85.637509,41.941944]},n1180:{id:"n1180",loc:[-85.63514,41.941205]},n1181:{id:"n1181",loc:[-85.634858,41.941511]},n1182:{id:"n1182",loc:[-85.630725,41.943465]},n1183:{id:"n1183",loc:[-85.632591,41.942826]},n1184:{id:"n1184",loc:[-85.634487,41.941928]},n1185:{id:"n1185",loc:[-85.634499,41.942056]},n1186:{id:"n1186",loc:[-85.63433,41.943102]},n1187:{id:"n1187",loc:[-85.634158,41.943151]},n1188:{id:"n1188",loc:[-85.634107,41.94305]},n1189:{id:"n1189",loc:[-85.634279,41.943002]},n119:{id:"n119",loc:[-85.637724,41.941973]},n1190:{id:"n1190",loc:[-85.634362,41.943762]},n1191:{id:"n1191",loc:[-85.634331,41.943731]},n1192:{id:"n1192",loc:[-85.634396,41.943695]},n1193:{id:"n1193",loc:[-85.634426,41.943726]},n1194:{id:"n1194",loc:[-85.621569,41.956021]},n1195:{id:"n1195",loc:[-85.621574,41.956164]},n1196:{id:"n1196",loc:[-85.621489,41.956165]},n1197:{id:"n1197",loc:[-85.621488,41.956136]},n1198:{id:"n1198",loc:[-85.621372,41.956139]},n1199:{id:"n1199",loc:[-85.621369,41.956049]},n12:{id:"n12",loc:[-85.63359,41.941093]},n120:{id:"n120",loc:[-85.637633,41.941973]},n1200:{id:"n1200",loc:[-85.621493,41.956047]},n1201:{id:"n1201",loc:[-85.621492,41.956022]},n1202:{id:"n1202",loc:[-85.619744,41.953192]},n1203:{id:"n1203",loc:[-85.619059,41.953902]},n1204:{id:"n1204",loc:[-85.623984,41.95469]},n1205:{id:"n1205",loc:[-85.630159,41.958208]},n1206:{id:"n1206",loc:[-85.63002,41.958208]},n1207:{id:"n1207",loc:[-85.630021,41.95814]},n1208:{id:"n1208",loc:[-85.63,41.95814]},n1209:{id:"n1209",loc:[-85.63,41.958043]},n121:{id:"n121",loc:[-85.637633,41.941853]},n1210:{id:"n1210",loc:[-85.630159,41.958043]},n1211:{id:"n1211",loc:[-85.630304,41.957566]},n1212:{id:"n1212",loc:[-85.630303,41.957684]},n1213:{id:"n1213",loc:[-85.630073,41.957683]},n1214:{id:"n1214",loc:[-85.630072,41.957721]},n1215:{id:"n1215",loc:[-85.629993,41.95772]},n1216:{id:"n1216",loc:[-85.629993,41.95768]},n1217:{id:"n1217",loc:[-85.629968,41.95768]},n1218:{id:"n1218",loc:[-85.629969,41.957588]},n1219:{id:"n1219",loc:[-85.630219,41.95759]},n122:{id:"n122",loc:[-85.637724,41.941853]},n1220:{id:"n1220",loc:[-85.630219,41.957566]},n1221:{id:"n1221",loc:[-85.630717,41.957744]},n1222:{id:"n1222",loc:[-85.630596,41.957745]},n1223:{id:"n1223",loc:[-85.630598,41.957553]},n1224:{id:"n1224",loc:[-85.630717,41.957555]},n1225:{id:"n1225",loc:[-85.630609,41.957745]},n1226:{id:"n1226",loc:[-85.63061,41.957789]},n1227:{id:"n1227",loc:[-85.630327,41.957791]},n1228:{id:"n1228",loc:[-85.630324,41.95752]},n1229:{id:"n1229",loc:[-85.630325,41.95756]},n123:{id:"n123",loc:[-85.637773,41.941988]},n1230:{id:"n1230",loc:[-85.63057,41.95756]},n1231:{id:"n1231",loc:[-85.63069,41.958016]},n1232:{id:"n1232",loc:[-85.630586,41.958017]},n1233:{id:"n1233",loc:[-85.630584,41.957956]},n1234:{id:"n1234",loc:[-85.630614,41.957956]},n1235:{id:"n1235",loc:[-85.630611,41.957835]},n1236:{id:"n1236",loc:[-85.630737,41.957833]},n1237:{id:"n1237",loc:[-85.630739,41.957921]},n1238:{id:"n1238",loc:[-85.630688,41.957922]},n1239:{id:"n1239",loc:[-85.630719,41.958291]},n124:{id:"n124",loc:[-85.637773,41.942046]},n1240:{id:"n1240",loc:[-85.630592,41.958291]},n1241:{id:"n1241",loc:[-85.630593,41.958108]},n1242:{id:"n1242",loc:[-85.630701,41.958109]},n1243:{id:"n1243",loc:[-85.6307,41.958173]},n1244:{id:"n1244",loc:[-85.630711,41.958173]},n1245:{id:"n1245",loc:[-85.630711,41.958233]},n1246:{id:"n1246",loc:[-85.630719,41.958233]},n1247:{id:"n1247",loc:[-85.630523,41.958329]},n1248:{id:"n1248",loc:[-85.630388,41.958329]},n1249:{id:"n1249",loc:[-85.630387,41.958262]},n125:{id:"n125",loc:[-85.637693,41.942047]},n1250:{id:"n1250",loc:[-85.630523,41.958261]},n1251:{id:"n1251",loc:[-85.63072,41.958636]},n1252:{id:"n1252",loc:[-85.630721,41.958709]},n1253:{id:"n1253",loc:[-85.630503,41.958712]},n1254:{id:"n1254",loc:[-85.630498,41.958511]},n1255:{id:"n1255",loc:[-85.630635,41.95851]},n1256:{id:"n1256",loc:[-85.630638,41.958636]},n1257:{id:"n1257",loc:[-85.630437,41.958822]},n1258:{id:"n1258",loc:[-85.630437,41.958849]},n1259:{id:"n1259",loc:[-85.630393,41.958849]},n126:{id:"n126",loc:[-85.637692,41.941988]},n1260:{id:"n1260",loc:[-85.630393,41.958822]},n1261:{id:"n1261",loc:[-85.630605,41.959102]},n1262:{id:"n1262",loc:[-85.63049,41.959104]},n1263:{id:"n1263",loc:[-85.630487,41.958996]},n1264:{id:"n1264",loc:[-85.630462,41.958996]},n1265:{id:"n1265",loc:[-85.63046,41.958922]},n1266:{id:"n1266",loc:[-85.630562,41.958921]},n1267:{id:"n1267",loc:[-85.630564,41.958992]},n1268:{id:"n1268",loc:[-85.630602,41.958992]},n1269:{id:"n1269",loc:[-85.630126,41.957096]},n127:{id:"n127",loc:[-85.637604,41.941994]},n1270:{id:"n1270",loc:[-85.630129,41.957283]},n1271:{id:"n1271",loc:[-85.629993,41.957284]},n1272:{id:"n1272",loc:[-85.629992,41.957216]},n1273:{id:"n1273",loc:[-85.630015,41.957215]},n1274:{id:"n1274",loc:[-85.630013,41.957097]},n1275:{id:"n1275",loc:[-85.630211,41.956592]},n1276:{id:"n1276",loc:[-85.630211,41.956676]},n1277:{id:"n1277",loc:[-85.630162,41.956676]},n1278:{id:"n1278",loc:[-85.630162,41.95676]},n1279:{id:"n1279",loc:[-85.630037,41.956761]},n128:{id:"n128",loc:[-85.637604,41.942057]},n1280:{id:"n1280",loc:[-85.630037,41.956592]},n1281:{id:"n1281",loc:[-85.630309,41.95653]},n1282:{id:"n1282",loc:[-85.630326,41.957065]},n1283:{id:"n1283",loc:[-85.630118,41.957065]},n1284:{id:"n1284",loc:[-85.630119,41.957096]},n1285:{id:"n1285",loc:[-85.63067,41.957307]},n1286:{id:"n1286",loc:[-85.630536,41.957308]},n1287:{id:"n1287",loc:[-85.630533,41.957111]},n1288:{id:"n1288",loc:[-85.630667,41.95711]},n1289:{id:"n1289",loc:[-85.630676,41.956808]},n129:{id:"n129",loc:[-85.63748,41.942057]},n1290:{id:"n1290",loc:[-85.630551,41.956808]},n1291:{id:"n1291",loc:[-85.630552,41.956982]},n1292:{id:"n1292",loc:[-85.63059,41.956982]},n1293:{id:"n1293",loc:[-85.63059,41.957001]},n1294:{id:"n1294",loc:[-85.630692,41.957001]},n1295:{id:"n1295",loc:[-85.630692,41.956936]},n1296:{id:"n1296",loc:[-85.630676,41.956936]},n1297:{id:"n1297",loc:[-85.630496,41.956889]},n1298:{id:"n1298",loc:[-85.630501,41.956947]},n1299:{id:"n1299",loc:[-85.630377,41.956953]},n13:{id:"n13",loc:[-85.633643,41.941143]},n130:{id:"n130",loc:[-85.63748,41.941994]},n1300:{id:"n1300",loc:[-85.630359,41.956938]},n1301:{id:"n1301",loc:[-85.630359,41.956912]},n1302:{id:"n1302",loc:[-85.63038,41.956894]},n1303:{id:"n1303",loc:[-85.630679,41.956747]},n1304:{id:"n1304",loc:[-85.630572,41.956748]},n1305:{id:"n1305",loc:[-85.63057,41.956668]},n1306:{id:"n1306",loc:[-85.630501,41.956669]},n1307:{id:"n1307",loc:[-85.630499,41.95659]},n1308:{id:"n1308",loc:[-85.630565,41.956589]},n1309:{id:"n1309",loc:[-85.630564,41.956541]},n131:{id:"n131",loc:[-85.637431,41.941832]},n1310:{id:"n1310",loc:[-85.630686,41.956539]},n1311:{id:"n1311",loc:[-85.630688,41.956631]},n1312:{id:"n1312",loc:[-85.630676,41.956631]},n1313:{id:"n1313",loc:[-85.630686,41.956487]},n1314:{id:"n1314",loc:[-85.63059,41.956487]},n1315:{id:"n1315",loc:[-85.63059,41.956396]},n1316:{id:"n1316",loc:[-85.630686,41.956396]},n1317:{id:"n1317",loc:[-85.630643,41.9563]},n1318:{id:"n1318",loc:[-85.630548,41.956301]},n1319:{id:"n1319",loc:[-85.630545,41.956217]},n132:{id:"n132",loc:[-85.637432,41.94189]},n1320:{id:"n1320",loc:[-85.630529,41.956214]},n1321:{id:"n1321",loc:[-85.630521,41.956202]},n1322:{id:"n1322",loc:[-85.63052,41.95618]},n1323:{id:"n1323",loc:[-85.630527,41.956169]},n1324:{id:"n1324",loc:[-85.630544,41.956163]},n1325:{id:"n1325",loc:[-85.630543,41.956094]},n1326:{id:"n1326",loc:[-85.630641,41.956093]},n1327:{id:"n1327",loc:[-85.630642,41.956134]},n1328:{id:"n1328",loc:[-85.630656,41.956134]},n1329:{id:"n1329",loc:[-85.630657,41.956252]},n133:{id:"n133",loc:[-85.637412,41.94189]},n1330:{id:"n1330",loc:[-85.630643,41.956252]},n1331:{id:"n1331",loc:[-85.630409,41.956044]},n1332:{id:"n1332",loc:[-85.630409,41.956075]},n1333:{id:"n1333",loc:[-85.630195,41.956078]},n1334:{id:"n1334",loc:[-85.630195,41.9561]},n1335:{id:"n1335",loc:[-85.630088,41.956101]},n1336:{id:"n1336",loc:[-85.630087,41.956048]},n1337:{id:"n1337",loc:[-85.630345,41.956114]},n1338:{id:"n1338",loc:[-85.630328,41.956113]},n1339:{id:"n1339",loc:[-85.63034,41.956189]},n134:{id:"n134",loc:[-85.637413,41.941938]},n1340:{id:"n1340",loc:[-85.630355,41.956185]},n1341:{id:"n1341",loc:[-85.630311,41.956117]},n1342:{id:"n1342",loc:[-85.630297,41.956125]},n1343:{id:"n1343",loc:[-85.630287,41.956136]},n1344:{id:"n1344",loc:[-85.630283,41.956149]},n1345:{id:"n1345",loc:[-85.630285,41.956162]},n1346:{id:"n1346",loc:[-85.630293,41.956174]},n1347:{id:"n1347",loc:[-85.630306,41.956183]},n1348:{id:"n1348",loc:[-85.630322,41.956188]},n1349:{id:"n1349",loc:[-85.630368,41.956179]},n135:{id:"n135",loc:[-85.637342,41.941939]},n1350:{id:"n1350",loc:[-85.630378,41.95617]},n1351:{id:"n1351",loc:[-85.630384,41.956159]},n1352:{id:"n1352",loc:[-85.630385,41.956147]},n1353:{id:"n1353",loc:[-85.630381,41.956136]},n1354:{id:"n1354",loc:[-85.630372,41.956126]},n1355:{id:"n1355",loc:[-85.63036,41.956118]},n1356:{id:"n1356",loc:[-85.630776,41.956041]},n1357:{id:"n1357",loc:[-85.630195,41.956036]},n1358:{id:"n1358",loc:[-85.630137,41.956037]},n1359:{id:"n1359",loc:[-85.630136,41.956006]},n136:{id:"n136",loc:[-85.637342,41.941914]},n1360:{id:"n1360",loc:[-85.630194,41.956005]},n1361:{id:"n1361",loc:[-85.629864,41.956039]},n1362:{id:"n1362",loc:[-85.629864,41.955862]},n1363:{id:"n1363",loc:[-85.629541,41.958291]},n1364:{id:"n1364",loc:[-85.629419,41.958292]},n1365:{id:"n1365",loc:[-85.629417,41.958168]},n1366:{id:"n1366",loc:[-85.629445,41.958168]},n1367:{id:"n1367",loc:[-85.629444,41.958109]},n1368:{id:"n1368",loc:[-85.629537,41.958108]},n1369:{id:"n1369",loc:[-85.629351,41.958136]},n137:{id:"n137",loc:[-85.637212,41.941916]},n1370:{id:"n1370",loc:[-85.629352,41.958202]},n1371:{id:"n1371",loc:[-85.629365,41.958202]},n1372:{id:"n1372",loc:[-85.629365,41.958223]},n1373:{id:"n1373",loc:[-85.629291,41.958224]},n1374:{id:"n1374",loc:[-85.62929,41.958137]},n1375:{id:"n1375",loc:[-85.629443,41.958073]},n1376:{id:"n1376",loc:[-85.629252,41.958075]},n1377:{id:"n1377",loc:[-85.629253,41.95827]},n1378:{id:"n1378",loc:[-85.629566,41.957585]},n1379:{id:"n1379",loc:[-85.629566,41.957692]},n138:{id:"n138",loc:[-85.637211,41.941835]},n1380:{id:"n1380",loc:[-85.629281,41.957693]},n1381:{id:"n1381",loc:[-85.62928,41.957585]},n1382:{id:"n1382",loc:[-85.629004,41.957599]},n1383:{id:"n1383",loc:[-85.629004,41.957682]},n1384:{id:"n1384",loc:[-85.628902,41.957682]},n1385:{id:"n1385",loc:[-85.628902,41.957723]},n1386:{id:"n1386",loc:[-85.628731,41.957724]},n1387:{id:"n1387",loc:[-85.628731,41.9576]},n1388:{id:"n1388",loc:[-85.62836,41.957679]},n1389:{id:"n1389",loc:[-85.628359,41.957759]},n139:{id:"n139",loc:[-85.637293,41.941834]},n1390:{id:"n1390",loc:[-85.628062,41.957757]},n1391:{id:"n1391",loc:[-85.628063,41.957657]},n1392:{id:"n1392",loc:[-85.628198,41.957657]},n1393:{id:"n1393",loc:[-85.628198,41.957678]},n1394:{id:"n1394",loc:[-85.627775,41.958095]},n1395:{id:"n1395",loc:[-85.627608,41.958095]},n1396:{id:"n1396",loc:[-85.627606,41.957829]},n1397:{id:"n1397",loc:[-85.627774,41.957829]},n1398:{id:"n1398",loc:[-85.626816,41.957636]},n1399:{id:"n1399",loc:[-85.626787,41.957681]},n14:{id:"n14",loc:[-85.633643,41.940122]},n140:{id:"n140",loc:[-85.637293,41.941823]},n1400:{id:"n1400",loc:[-85.626673,41.95764]},n1401:{id:"n1401",loc:[-85.626703,41.957594]},n1402:{id:"n1402",loc:[-85.62694,41.95752]},n1403:{id:"n1403",loc:[-85.62688,41.957611]},n1404:{id:"n1404",loc:[-85.626798,41.957582]},n1405:{id:"n1405",loc:[-85.626793,41.95759]},n1406:{id:"n1406",loc:[-85.626657,41.95754]},n1407:{id:"n1407",loc:[-85.626666,41.957526]},n1408:{id:"n1408",loc:[-85.626584,41.957497]},n1409:{id:"n1409",loc:[-85.626638,41.957415]},n141:{id:"n141",loc:[-85.637363,41.941822]},n1410:{id:"n1410",loc:[-85.626731,41.957449]},n1411:{id:"n1411",loc:[-85.626725,41.957457]},n1412:{id:"n1412",loc:[-85.626843,41.9575]},n1413:{id:"n1413",loc:[-85.626851,41.957487]},n1414:{id:"n1414",loc:[-85.626579,41.957521]},n1415:{id:"n1415",loc:[-85.626537,41.957587]},n1416:{id:"n1416",loc:[-85.626427,41.957551]},n1417:{id:"n1417",loc:[-85.626468,41.957483]},n1418:{id:"n1418",loc:[-85.626592,41.957639]},n1419:{id:"n1419",loc:[-85.626807,41.957713]},n142:{id:"n142",loc:[-85.637364,41.941833]},n1420:{id:"n1420",loc:[-85.627129,41.957401]},n1421:{id:"n1421",loc:[-85.627209,41.95742]},n1422:{id:"n1422",loc:[-85.627302,41.957435]},n1423:{id:"n1423",loc:[-85.629566,41.957048]},n1424:{id:"n1424",loc:[-85.629568,41.957215]},n1425:{id:"n1425",loc:[-85.629383,41.957216]},n1426:{id:"n1426",loc:[-85.629384,41.95727]},n1427:{id:"n1427",loc:[-85.629231,41.957271]},n1428:{id:"n1428",loc:[-85.62923,41.957198]},n1429:{id:"n1429",loc:[-85.629322,41.957198]},n143:{id:"n143",loc:[-85.637559,41.942448]},n1430:{id:"n1430",loc:[-85.629321,41.957108]},n1431:{id:"n1431",loc:[-85.629441,41.957108]},n1432:{id:"n1432",loc:[-85.62944,41.957049]},n1433:{id:"n1433",loc:[-85.629337,41.957018]},n1434:{id:"n1434",loc:[-85.629366,41.957028]},n1435:{id:"n1435",loc:[-85.629375,41.957044]},n1436:{id:"n1436",loc:[-85.629354,41.957071]},n1437:{id:"n1437",loc:[-85.629317,41.957071]},n1438:{id:"n1438",loc:[-85.62929,41.957074]},n1439:{id:"n1439",loc:[-85.62927,41.957084]},n144:{id:"n144",loc:[-85.637036,41.942454]},n1440:{id:"n1440",loc:[-85.629232,41.957081]},n1441:{id:"n1441",loc:[-85.629222,41.957057]},n1442:{id:"n1442",loc:[-85.629259,41.957025]},n1443:{id:"n1443",loc:[-85.629293,41.957017]},n1444:{id:"n1444",loc:[-85.629251,41.957085]},n1445:{id:"n1445",loc:[-85.629235,41.957041]},n1446:{id:"n1446",loc:[-85.62937,41.95706]},n1447:{id:"n1447",loc:[-85.629531,41.956909]},n1448:{id:"n1448",loc:[-85.629408,41.956909]},n1449:{id:"n1449",loc:[-85.629402,41.956681]},n145:{id:"n145",loc:[-85.636692,41.942828]},n1450:{id:"n1450",loc:[-85.62953,41.956681]},n1451:{id:"n1451",loc:[-85.629402,41.956728]},n1452:{id:"n1452",loc:[-85.629408,41.956845]},n1453:{id:"n1453",loc:[-85.629385,41.956845]},n1454:{id:"n1454",loc:[-85.629384,41.956728]},n1455:{id:"n1455",loc:[-85.629063,41.956973]},n1456:{id:"n1456",loc:[-85.629064,41.957009]},n1457:{id:"n1457",loc:[-85.62902,41.957009]},n1458:{id:"n1458",loc:[-85.629019,41.956973]},n1459:{id:"n1459",loc:[-85.629136,41.956633]},n146:{id:"n146",loc:[-85.635929,41.942826]},n1460:{id:"n1460",loc:[-85.629084,41.956632]},n1461:{id:"n1461",loc:[-85.629084,41.956605]},n1462:{id:"n1462",loc:[-85.629136,41.956605]},n1463:{id:"n1463",loc:[-85.629153,41.956657]},n1464:{id:"n1464",loc:[-85.627914,41.956661]},n1465:{id:"n1465",loc:[-85.630096,41.956101]},n1466:{id:"n1466",loc:[-85.630097,41.95612]},n1467:{id:"n1467",loc:[-85.630011,41.956121]},n1468:{id:"n1468",loc:[-85.630015,41.956374]},n1469:{id:"n1469",loc:[-85.629148,41.95626]},n147:{id:"n147",loc:[-85.636433,41.942828]},n1470:{id:"n1470",loc:[-85.629527,41.956591]},n1471:{id:"n1471",loc:[-85.629405,41.956591]},n1472:{id:"n1472",loc:[-85.629405,41.956459]},n1473:{id:"n1473",loc:[-85.629369,41.956459]},n1474:{id:"n1474",loc:[-85.629369,41.956424]},n1475:{id:"n1475",loc:[-85.629413,41.956424]},n1476:{id:"n1476",loc:[-85.629414,41.956326]},n1477:{id:"n1477",loc:[-85.629522,41.956326]},n1478:{id:"n1478",loc:[-85.629522,41.956487]},n1479:{id:"n1479",loc:[-85.629527,41.956487]},n148:{id:"n148",loc:[-85.636435,41.942864],tags:{entrance:"yes"}},n1480:{id:"n1480",loc:[-85.629414,41.95634]},n1481:{id:"n1481",loc:[-85.629149,41.956338]},n1482:{id:"n1482",loc:[-85.62931,41.956531]},n1483:{id:"n1483",loc:[-85.629291,41.95655]},n1484:{id:"n1484",loc:[-85.629255,41.95655]},n1485:{id:"n1485",loc:[-85.629236,41.956533]},n1486:{id:"n1486",loc:[-85.629237,41.956461]},n1487:{id:"n1487",loc:[-85.629257,41.956445]},n1488:{id:"n1488",loc:[-85.629257,41.956428]},n1489:{id:"n1489",loc:[-85.629287,41.956428]},n149:{id:"n149",loc:[-85.637235,41.942622]},n1490:{id:"n1490",loc:[-85.629287,41.956445]},n1491:{id:"n1491",loc:[-85.62931,41.95646]},n1492:{id:"n1492",loc:[-85.629049,41.956425]},n1493:{id:"n1493",loc:[-85.628907,41.956427]},n1494:{id:"n1494",loc:[-85.628907,41.956455]},n1495:{id:"n1495",loc:[-85.628841,41.956455]},n1496:{id:"n1496",loc:[-85.62884,41.956424]},n1497:{id:"n1497",loc:[-85.628764,41.956425]},n1498:{id:"n1498",loc:[-85.628762,41.956323]},n1499:{id:"n1499",loc:[-85.628808,41.956323]},n15:{id:"n15",loc:[-85.633477,41.940187]},n150:{id:"n150",loc:[-85.637247,41.943116]},n1500:{id:"n1500",loc:[-85.628808,41.956314]},n1501:{id:"n1501",loc:[-85.628911,41.956313]},n1502:{id:"n1502",loc:[-85.628911,41.956322]},n1503:{id:"n1503",loc:[-85.62896,41.956322]},n1504:{id:"n1504",loc:[-85.62896,41.956348]},n1505:{id:"n1505",loc:[-85.629047,41.956347]},n1506:{id:"n1506",loc:[-85.628893,41.957263]},n1507:{id:"n1507",loc:[-85.628788,41.957264]},n1508:{id:"n1508",loc:[-85.628786,41.95711]},n1509:{id:"n1509",loc:[-85.628894,41.957109]},n151:{id:"n151",loc:[-85.637564,41.943116]},n1510:{id:"n1510",loc:[-85.628893,41.957075]},n1511:{id:"n1511",loc:[-85.628965,41.957075]},n1512:{id:"n1512",loc:[-85.628965,41.957111]},n1513:{id:"n1513",loc:[-85.629035,41.95711]},n1514:{id:"n1514",loc:[-85.629036,41.957209]},n1515:{id:"n1515",loc:[-85.628893,41.95721]},n1516:{id:"n1516",loc:[-85.631348,41.95773]},n1517:{id:"n1517",loc:[-85.631101,41.957732]},n1518:{id:"n1518",loc:[-85.631099,41.957558]},n1519:{id:"n1519",loc:[-85.63123,41.957557]},n152:{id:"n152",loc:[-85.637552,41.942619]},n1520:{id:"n1520",loc:[-85.631231,41.957618]},n1521:{id:"n1521",loc:[-85.63129,41.957618]},n1522:{id:"n1522",loc:[-85.63129,41.957651]},n1523:{id:"n1523",loc:[-85.631346,41.957651]},n1524:{id:"n1524",loc:[-85.631366,41.95802]},n1525:{id:"n1525",loc:[-85.631141,41.958021]},n1526:{id:"n1526",loc:[-85.63114,41.957943]},n1527:{id:"n1527",loc:[-85.631167,41.957943]},n1528:{id:"n1528",loc:[-85.631166,41.957808]},n1529:{id:"n1529",loc:[-85.631301,41.957807]},n153:{id:"n153",loc:[-85.63763,41.942528]},n1530:{id:"n1530",loc:[-85.631302,41.95789]},n1531:{id:"n1531",loc:[-85.631364,41.95789]},n1532:{id:"n1532",loc:[-85.631539,41.957754]},n1533:{id:"n1533",loc:[-85.631069,41.957756]},n1534:{id:"n1534",loc:[-85.631536,41.957518]},n1535:{id:"n1535",loc:[-85.631543,41.957995]},n1536:{id:"n1536",loc:[-85.631531,41.957748]},n1537:{id:"n1537",loc:[-85.631485,41.957748]},n1538:{id:"n1538",loc:[-85.631484,41.957698]},n1539:{id:"n1539",loc:[-85.631531,41.957698]},n154:{id:"n154",loc:[-85.637151,41.94253]},n1540:{id:"n1540",loc:[-85.631586,41.957742]},n1541:{id:"n1541",loc:[-85.63155,41.957742]},n1542:{id:"n1542",loc:[-85.631551,41.957702]},n1543:{id:"n1543",loc:[-85.631587,41.957702]},n1544:{id:"n1544",loc:[-85.631534,41.95807]},n1545:{id:"n1545",loc:[-85.631534,41.958097]},n1546:{id:"n1546",loc:[-85.631491,41.958097]},n1547:{id:"n1547",loc:[-85.631491,41.95807]},n1548:{id:"n1548",loc:[-85.631304,41.958861]},n1549:{id:"n1549",loc:[-85.631186,41.958862]},n155:{id:"n155",loc:[-85.63715,41.942424]},n1550:{id:"n1550",loc:[-85.631182,41.958653]},n1551:{id:"n1551",loc:[-85.6313,41.958651]},n1552:{id:"n1552",loc:[-85.631293,41.95854]},n1553:{id:"n1553",loc:[-85.631176,41.958539]},n1554:{id:"n1554",loc:[-85.631176,41.958377]},n1555:{id:"n1555",loc:[-85.631297,41.958377]},n1556:{id:"n1556",loc:[-85.631297,41.958422]},n1557:{id:"n1557",loc:[-85.631333,41.958422]},n1558:{id:"n1558",loc:[-85.631333,41.958479]},n1559:{id:"n1559",loc:[-85.631293,41.958479]},n156:{id:"n156",loc:[-85.637629,41.942422]},n1560:{id:"n1560",loc:[-85.631951,41.958908]},n1561:{id:"n1561",loc:[-85.631838,41.958909]},n1562:{id:"n1562",loc:[-85.631837,41.958847]},n1563:{id:"n1563",loc:[-85.631859,41.958847]},n1564:{id:"n1564",loc:[-85.631858,41.958746]},n1565:{id:"n1565",loc:[-85.631961,41.958745]},n1566:{id:"n1566",loc:[-85.631962,41.958812]},n1567:{id:"n1567",loc:[-85.631949,41.958813]},n1568:{id:"n1568",loc:[-85.631579,41.958913]},n1569:{id:"n1569",loc:[-85.631567,41.95864]},n157:{id:"n157",loc:[-85.638232,41.942477]},n1570:{id:"n1570",loc:[-85.631942,41.958639]},n1571:{id:"n1571",loc:[-85.631543,41.958594]},n1572:{id:"n1572",loc:[-85.631543,41.958065]},n1573:{id:"n1573",loc:[-85.631888,41.958546]},n1574:{id:"n1574",loc:[-85.631804,41.958546]},n1575:{id:"n1575",loc:[-85.631803,41.95841]},n1576:{id:"n1576",loc:[-85.631886,41.958409]},n1577:{id:"n1577",loc:[-85.631897,41.958125]},n1578:{id:"n1578",loc:[-85.631755,41.958126]},n1579:{id:"n1579",loc:[-85.631756,41.958174]},n158:{id:"n158",loc:[-85.637775,41.942483]},n1580:{id:"n1580",loc:[-85.63178,41.958174]},n1581:{id:"n1581",loc:[-85.631782,41.958272]},n1582:{id:"n1582",loc:[-85.631922,41.958271]},n1583:{id:"n1583",loc:[-85.631922,41.958244]},n1584:{id:"n1584",loc:[-85.631883,41.958245]},n1585:{id:"n1585",loc:[-85.631882,41.958175]},n1586:{id:"n1586",loc:[-85.631898,41.958175]},n1587:{id:"n1587",loc:[-85.631924,41.958032]},n1588:{id:"n1588",loc:[-85.631762,41.958032]},n1589:{id:"n1589",loc:[-85.63176,41.957827]},n159:{id:"n159",loc:[-85.638107,41.942512]},n1590:{id:"n1590",loc:[-85.631888,41.957826]},n1591:{id:"n1591",loc:[-85.631888,41.957892]},n1592:{id:"n1592",loc:[-85.631871,41.957892]},n1593:{id:"n1593",loc:[-85.631872,41.957949]},n1594:{id:"n1594",loc:[-85.631923,41.957949]},n1595:{id:"n1595",loc:[-85.631695,41.95795]},n1596:{id:"n1596",loc:[-85.631666,41.957975]},n1597:{id:"n1597",loc:[-85.63163,41.957975]},n1598:{id:"n1598",loc:[-85.6316,41.957951]},n1599:{id:"n1599",loc:[-85.6316,41.95785]},n16:{id:"n16",loc:[-85.63341,41.94032]},n160:{id:"n160",loc:[-85.637763,41.942514]},n1600:{id:"n1600",loc:[-85.63166,41.95785]},n1601:{id:"n1601",loc:[-85.631696,41.957873]},n1602:{id:"n1602",loc:[-85.631924,41.957762]},n1603:{id:"n1603",loc:[-85.631762,41.957762]},n1604:{id:"n1604",loc:[-85.631762,41.957708]},n1605:{id:"n1605",loc:[-85.631785,41.957708]},n1606:{id:"n1606",loc:[-85.631785,41.957606]},n1607:{id:"n1607",loc:[-85.631734,41.957606]},n1608:{id:"n1608",loc:[-85.631734,41.957538]},n1609:{id:"n1609",loc:[-85.631821,41.957538]},n161:{id:"n161",loc:[-85.637763,41.942445]},n1610:{id:"n1610",loc:[-85.631935,41.957545]},n1611:{id:"n1611",loc:[-85.631821,41.957544]},n1612:{id:"n1612",loc:[-85.631935,41.957645]},n1613:{id:"n1613",loc:[-85.631924,41.957645]},n1614:{id:"n1614",loc:[-85.627135,41.953828]},n1615:{id:"n1615",loc:[-85.633517,41.941353],tags:{man_made:"lighthouse"}},n1616:{id:"n1616",loc:[-85.633659,41.942041],tags:{amenity:"bbq"}},n1617:{id:"n1617",loc:[-85.63662,41.942911],tags:{amenity:"toilets"}},n1618:{id:"n1618",loc:[-85.637487,41.943876],tags:{amenity:"toilets"}},n1619:{id:"n1619",loc:[-85.634938,41.941917],tags:{amenity:"toilets"}},n162:{id:"n162",loc:[-85.638107,41.942443]},n1620:{id:"n1620",loc:[-85.632427,41.941678],tags:{amenity:"bbq"}},n1621:{id:"n1621",loc:[-85.638033,41.944568],tags:{amenity:"bbq"}},n1622:{id:"n1622",loc:[-85.638052,41.944522],tags:{amenity:"bbq"}},n1623:{id:"n1623",loc:[-85.635001,41.941965]},n1624:{id:"n1624",loc:[-85.634635,41.941884]},n1625:{id:"n1625",loc:[-85.634667,41.941894]},n1626:{id:"n1626",loc:[-85.634791,41.942011]},n1627:{id:"n1627",loc:[-85.634749,41.941938]},n1628:{id:"n1628",loc:[-85.627295,41.953946],tags:{barrier:"gate"}},n1629:{id:"n1629",loc:[-85.629076,41.954689]},n163:{id:"n163",loc:[-85.638813,41.942475]},n1630:{id:"n1630",loc:[-85.640667,41.942595]},n1631:{id:"n1631",loc:[-85.639455,41.94261]},n1632:{id:"n1632",loc:[-85.643407,41.942336]},n1633:{id:"n1633",loc:[-85.641845,41.941316]},n1634:{id:"n1634",loc:[-85.643322,41.942224]},n1635:{id:"n1635",loc:[-85.643301,41.942124]},n1636:{id:"n1636",loc:[-85.640639,41.941326]},n1637:{id:"n1637",loc:[-85.640614,41.940058]},n1638:{id:"n1638",loc:[-85.639428,41.941335]},n1639:{id:"n1639",loc:[-85.643078,41.941293]},n164:{id:"n164",loc:[-85.63883,41.942422]},n1640:{id:"n1640",loc:[-85.64371,41.942302]},n1641:{id:"n1641",loc:[-85.643056,41.94001]},n1642:{id:"n1642",loc:[-85.643097,41.942575],tags:{highway:"traffic_signals",traffic_signals:"signal","traffic_signals:direction":"both"}},n1643:{id:"n1643",loc:[-85.641855,41.942586]},n1644:{id:"n1644",loc:[-85.643549,41.942209]},n1645:{id:"n1645",loc:[-85.639359,41.94007]},n1646:{id:"n1646",loc:[-85.642797,41.940522]},n1647:{id:"n1647",loc:[-85.642589,41.940523]},n1648:{id:"n1648",loc:[-85.642587,41.940287]},n1649:{id:"n1649",loc:[-85.642797,41.940286]},n165:{id:"n165",loc:[-85.63883,41.942508]},n1650:{id:"n1650",loc:[-85.642571,41.940523]},n1651:{id:"n1651",loc:[-85.642568,41.940286]},n1652:{id:"n1652",loc:[-85.642316,41.940289]},n1653:{id:"n1653",loc:[-85.642321,41.940436]},n1654:{id:"n1654",loc:[-85.642292,41.940458]},n1655:{id:"n1655",loc:[-85.642287,41.940483]},n1656:{id:"n1656",loc:[-85.642323,41.940509]},n1657:{id:"n1657",loc:[-85.642385,41.940511]},n1658:{id:"n1658",loc:[-85.642408,41.940526]},n1659:{id:"n1659",loc:[-85.641962,41.94109]},n166:{id:"n166",loc:[-85.638364,41.942508]},n1660:{id:"n1660",loc:[-85.642753,41.941084]},n1661:{id:"n1661",loc:[-85.642752,41.941004]},n1662:{id:"n1662",loc:[-85.642806,41.941003]},n1663:{id:"n1663",loc:[-85.642803,41.940731]},n1664:{id:"n1664",loc:[-85.642741,41.940732]},n1665:{id:"n1665",loc:[-85.64274,41.940645]},n1666:{id:"n1666",loc:[-85.641957,41.940651]},n1667:{id:"n1667",loc:[-85.642937,41.941241]},n1668:{id:"n1668",loc:[-85.641776,41.941253]},n1669:{id:"n1669",loc:[-85.641766,41.940598]},n167:{id:"n167",loc:[-85.638836,41.942167]},n1670:{id:"n1670",loc:[-85.64198,41.940598]},n1671:{id:"n1671",loc:[-85.641961,41.940137]},n1672:{id:"n1672",loc:[-85.642934,41.94012]},n1673:{id:"n1673",loc:[-85.643074,41.941173]},n1674:{id:"n1674",loc:[-85.642841,41.940997]},n1675:{id:"n1675",loc:[-85.642839,41.940721]},n1676:{id:"n1676",loc:[-85.643065,41.940552]},n1677:{id:"n1677",loc:[-85.642732,41.94124]},n1678:{id:"n1678",loc:[-85.641815,41.941246]},n1679:{id:"n1679",loc:[-85.641813,41.941132]},n168:{id:"n168",loc:[-85.638836,41.94229]},n1680:{id:"n1680",loc:[-85.641839,41.941111]},n1681:{id:"n1681",loc:[-85.641884,41.941098]},n1682:{id:"n1682",loc:[-85.642732,41.941092]},n1683:{id:"n1683",loc:[-85.642776,41.941302]},n1684:{id:"n1684",loc:[-85.632788,41.946236]},n1685:{id:"n1685",loc:[-85.622342,41.953127]},n1686:{id:"n1686",loc:[-85.641848,41.941167]},n1687:{id:"n1687",loc:[-85.643753,41.941503]},n1688:{id:"n1688",loc:[-85.643762,41.942119]},n1689:{id:"n1689",loc:[-85.64238,41.942262]},n169:{id:"n169",loc:[-85.638594,41.94229]},n1690:{id:"n1690",loc:[-85.642374,41.941944]},n1691:{id:"n1691",loc:[-85.642518,41.941943]},n1692:{id:"n1692",loc:[-85.642519,41.94198]},n1693:{id:"n1693",loc:[-85.642831,41.941977]},n1694:{id:"n1694",loc:[-85.642837,41.942312]},n1695:{id:"n1695",loc:[-85.642495,41.942315]},n1696:{id:"n1696",loc:[-85.642494,41.942261]},n1697:{id:"n1697",loc:[-85.641087,41.942433]},n1698:{id:"n1698",loc:[-85.641081,41.942006]},n1699:{id:"n1699",loc:[-85.641244,41.942005]},n17:{id:"n17",loc:[-85.633478,41.94081]},n170:{id:"n170",loc:[-85.638594,41.942422]},n1700:{id:"n1700",loc:[-85.64125,41.942431]},n1701:{id:"n1701",loc:[-85.641331,41.942968]},n1702:{id:"n1702",loc:[-85.641328,41.942713]},n1703:{id:"n1703",loc:[-85.641521,41.942712]},n1704:{id:"n1704",loc:[-85.641523,41.942924]},n1705:{id:"n1705",loc:[-85.641504,41.942924]},n1706:{id:"n1706",loc:[-85.641505,41.942967]},n1707:{id:"n1707",loc:[-85.638612,41.942408]},n1708:{id:"n1708",loc:[-85.638612,41.942327]},n1709:{id:"n1709",loc:[-85.638775,41.942327]},n171:{id:"n171",loc:[-85.638364,41.942356]},n1710:{id:"n1710",loc:[-85.638775,41.942299]},n1711:{id:"n1711",loc:[-85.638835,41.942298]},n1712:{id:"n1712",loc:[-85.638835,41.942407]},n1713:{id:"n1713",loc:[-85.639116,41.942444]},n1714:{id:"n1714",loc:[-85.639114,41.942362]},n1715:{id:"n1715",loc:[-85.639294,41.94236]},n1716:{id:"n1716",loc:[-85.639296,41.942442]},n1717:{id:"n1717",loc:[-85.639808,41.942385]},n1718:{id:"n1718",loc:[-85.639805,41.942285]},n1719:{id:"n1719",loc:[-85.639988,41.942283]},n172:{id:"n172",loc:[-85.638364,41.942167]},n1720:{id:"n1720",loc:[-85.63999,41.942383]},n1721:{id:"n1721",loc:[-85.639633,41.943023]},n1722:{id:"n1722",loc:[-85.639867,41.943019]},n1723:{id:"n1723",loc:[-85.639866,41.942964]},n1724:{id:"n1724",loc:[-85.639888,41.942963]},n1725:{id:"n1725",loc:[-85.639883,41.942779]},n1726:{id:"n1726",loc:[-85.639851,41.94278]},n1727:{id:"n1727",loc:[-85.63985,41.94274]},n1728:{id:"n1728",loc:[-85.639789,41.942741]},n1729:{id:"n1729",loc:[-85.639789,41.942753]},n173:{id:"n173",loc:[-85.639038,41.942463]},n1730:{id:"n1730",loc:[-85.639698,41.942754]},n1731:{id:"n1731",loc:[-85.639699,41.942788]},n1732:{id:"n1732",loc:[-85.639675,41.942789]},n1733:{id:"n1733",loc:[-85.639676,41.94283]},n1734:{id:"n1734",loc:[-85.639701,41.942829]},n1735:{id:"n1735",loc:[-85.639702,41.942869]},n1736:{id:"n1736",loc:[-85.639629,41.94287]},n1737:{id:"n1737",loc:[-85.643568,41.942946]},n1738:{id:"n1738",loc:[-85.643568,41.942777]},n1739:{id:"n1739",loc:[-85.643401,41.942777]},n174:{id:"n174",loc:[-85.638897,41.942464]},n1740:{id:"n1740",loc:[-85.643401,41.942863]},n1741:{id:"n1741",loc:[-85.643448,41.942863]},n1742:{id:"n1742",loc:[-85.643448,41.942946]},n1743:{id:"n1743",loc:[-85.642836,41.942981]},n1744:{id:"n1744",loc:[-85.642917,41.942979]},n1745:{id:"n1745",loc:[-85.642914,41.942904]},n1746:{id:"n1746",loc:[-85.642938,41.942903]},n1747:{id:"n1747",loc:[-85.642935,41.942813]},n1748:{id:"n1748",loc:[-85.642775,41.942816]},n1749:{id:"n1749",loc:[-85.642778,41.942906]},n175:{id:"n175",loc:[-85.638897,41.942423]},n1750:{id:"n1750",loc:[-85.642833,41.942905]},n1751:{id:"n1751",loc:[-85.642302,41.942886]},n1752:{id:"n1752",loc:[-85.642299,41.942721]},n1753:{id:"n1753",loc:[-85.642422,41.94272]},n1754:{id:"n1754",loc:[-85.642425,41.942868]},n1755:{id:"n1755",loc:[-85.642385,41.942869]},n1756:{id:"n1756",loc:[-85.642385,41.942885]},n1757:{id:"n1757",loc:[-85.641533,41.942939]},n1758:{id:"n1758",loc:[-85.64161,41.942877]},n1759:{id:"n1759",loc:[-85.641676,41.942922]},n176:{id:"n176",loc:[-85.638853,41.942423]},n1760:{id:"n1760",loc:[-85.6416,41.942985]},n1761:{id:"n1761",loc:[-85.64206,41.942802]},n1762:{id:"n1762",loc:[-85.642059,41.942741]},n1763:{id:"n1763",loc:[-85.642196,41.942741]},n1764:{id:"n1764",loc:[-85.642196,41.942818]},n1765:{id:"n1765",loc:[-85.642128,41.942819]},n1766:{id:"n1766",loc:[-85.642128,41.942801]},n1767:{id:"n1767",loc:[-85.640943,41.942934]},n1768:{id:"n1768",loc:[-85.641035,41.942933]},n1769:{id:"n1769",loc:[-85.641032,41.942797]},n177:{id:"n177",loc:[-85.638852,41.94237]},n1770:{id:"n1770",loc:[-85.640997,41.942798]},n1771:{id:"n1771",loc:[-85.640996,41.942764]},n1772:{id:"n1772",loc:[-85.640861,41.942766]},n1773:{id:"n1773",loc:[-85.640862,41.942848]},n1774:{id:"n1774",loc:[-85.640941,41.942847]},n1775:{id:"n1775",loc:[-85.643766,41.942226]},n1776:{id:"n1776",loc:[-85.643768,41.942407]},n1777:{id:"n1777",loc:[-85.643218,41.94177]},n1778:{id:"n1778",loc:[-85.64321,41.941327]},n1779:{id:"n1779",loc:[-85.643649,41.941323]},n178:{id:"n178",loc:[-85.638892,41.94237]},n1780:{id:"n1780",loc:[-85.643656,41.941716]},n1781:{id:"n1781",loc:[-85.64358,41.941717]},n1782:{id:"n1782",loc:[-85.64358,41.941767]},n1783:{id:"n1783",loc:[-85.64382,41.941495]},n1784:{id:"n1784",loc:[-85.643817,41.941317]},n1785:{id:"n1785",loc:[-85.643235,41.941833]},n1786:{id:"n1786",loc:[-85.64335,41.941842]},n1787:{id:"n1787",loc:[-85.643504,41.941903]},n1788:{id:"n1788",loc:[-85.643554,41.941946]},n1789:{id:"n1789",loc:[-85.643618,41.942015]},n179:{id:"n179",loc:[-85.638891,41.942334]},n1790:{id:"n1790",loc:[-85.64346,41.941971]},n1791:{id:"n1791",loc:[-85.643528,41.942468]},n1792:{id:"n1792",loc:[-85.643621,41.942363]},n1793:{id:"n1793",loc:[-85.643496,41.942297]},n1794:{id:"n1794",loc:[-85.643446,41.942246]},n1795:{id:"n1795",loc:[-85.643398,41.942177]},n1796:{id:"n1796",loc:[-85.643398,41.942031]},n1797:{id:"n1797",loc:[-85.621531,41.952693]},n1798:{id:"n1798",loc:[-85.643221,41.942028]},n1799:{id:"n1799",loc:[-85.643225,41.942276]},n18:{id:"n18",loc:[-85.63345,41.94071]},n180:{id:"n180",loc:[-85.639037,41.942334]},n1800:{id:"n1800",loc:[-85.643265,41.942347]},n1801:{id:"n1801",loc:[-85.643323,41.942413]},n1802:{id:"n1802",loc:[-85.643411,41.94247]},n1803:{id:"n1803",loc:[-85.643459,41.942435]},n1804:{id:"n1804",loc:[-85.643767,41.942307]},n1805:{id:"n1805",loc:[-85.643661,41.942293]},n1806:{id:"n1806",loc:[-85.643578,41.942247]},n1807:{id:"n1807",loc:[-85.643522,41.942125]},n1808:{id:"n1808",loc:[-85.643515,41.942061]},n1809:{id:"n1809",loc:[-85.643346,41.941924]},n181:{id:"n181",loc:[-85.638074,41.941839]},n1810:{id:"n1810",loc:[-85.643086,41.94192]},n1811:{id:"n1811",loc:[-85.643529,41.94217]},n1812:{id:"n1812",loc:[-85.643489,41.942003]},n1813:{id:"n1813",loc:[-85.643295,41.941919]},n1814:{id:"n1814",loc:[-85.643305,41.942163]},n1815:{id:"n1815",loc:[-85.643354,41.942285]},n1816:{id:"n1816",loc:[-85.643472,41.942389]},n1817:{id:"n1817",loc:[-85.643608,41.942271]},n1818:{id:"n1818",loc:[-85.643876,41.941402]},n1819:{id:"n1819",loc:[-85.643818,41.941369]},n182:{id:"n182",loc:[-85.638076,41.941942]},n1820:{id:"n1820",loc:[-85.643682,41.941304]},n1821:{id:"n1821",loc:[-85.64359,41.941286]},n1822:{id:"n1822",loc:[-85.643317,41.941727]},n1823:{id:"n1823",loc:[-85.643301,41.941286]},n1824:{id:"n1824",loc:[-85.643553,41.941698]},n1825:{id:"n1825",loc:[-85.643543,41.941286]},n1826:{id:"n1826",loc:[-85.636967,41.940118]},n1827:{id:"n1827",loc:[-85.63378,41.940114]},n1828:{id:"n1828",loc:[-85.637254,41.940075]},n1829:{id:"n1829",loc:[-85.637002,41.941355]},n183:{id:"n183",loc:[-85.637955,41.941944]},n1830:{id:"n1830",loc:[-85.643532,41.94204]},n1831:{id:"n1831",loc:[-85.638235,41.942615]},n1832:{id:"n1832",loc:[-85.637039,41.942624]},n1833:{id:"n1833",loc:[-85.636369,41.94266]},n1834:{id:"n1834",loc:[-85.63582,41.942771],tags:{highway:"traffic_signals",traffic_signals:"emergency","traffic_signals:direction":"both"}},n1835:{id:"n1835",loc:[-85.634873,41.943044]},n1836:{id:"n1836",loc:[-85.643482,41.941976]},n1837:{id:"n1837",loc:[-85.64345,41.941945]},n1838:{id:"n1838",loc:[-85.641885,41.943851]},n1839:{id:"n1839",loc:[-85.641915,41.945121]},n184:{id:"n184",loc:[-85.637953,41.94184]},n1840:{id:"n1840",loc:[-85.639454,41.943871]},n1841:{id:"n1841",loc:[-85.639491,41.945191]},n1842:{id:"n1842",loc:[-85.635768,41.940113]},n1843:{id:"n1843",loc:[-85.638206,41.941345]},n1844:{id:"n1844",loc:[-85.640721,41.94513]},n1845:{id:"n1845",loc:[-85.643137,41.945103]},n1846:{id:"n1846",loc:[-85.638199,41.940079]},n1847:{id:"n1847",loc:[-85.640688,41.943861]},n1848:{id:"n1848",loc:[-85.643397,41.941924]},n1849:{id:"n1849",loc:[-85.643117,41.943841]},n185:{id:"n185",loc:[-85.637953,41.941866]},n1850:{id:"n1850",loc:[-85.636731,41.94263]},n1851:{id:"n1851",loc:[-85.63518,41.942955],tags:{highway:"crossing"}},n1852:{id:"n1852",loc:[-85.636152,41.942695]},n1853:{id:"n1853",loc:[-85.644202,41.941499]},n1854:{id:"n1854",loc:[-85.644211,41.942116]},n1855:{id:"n1855",loc:[-85.644233,41.942404]},n1856:{id:"n1856",loc:[-85.644231,41.942223]},n1857:{id:"n1857",loc:[-85.644133,41.941315]},n1858:{id:"n1858",loc:[-85.644136,41.941493]},n1859:{id:"n1859",loc:[-85.644345,41.942307]},n186:{id:"n186",loc:[-85.637873,41.941867]},n1860:{id:"n1860",loc:[-85.644232,41.942304]},n1861:{id:"n1861",loc:[-85.644134,41.941403]},n1862:{id:"n1862",loc:[-85.63607,41.943005],tags:{"addr:city":"Three Rivers","addr:housenumber":"333","addr:postcode":"49093","addr:state":"MI","addr:street":"Michigan Avenue",amenity:"fire_station",name:"Three Rivers Fire Department"}},n1863:{id:"n1863",loc:[-85.637,41.941236]},n1864:{id:"n1864",loc:[-85.634476,41.941475]},n1865:{id:"n1865",loc:[-85.635036,41.941858]},n1866:{id:"n1866",loc:[-85.635362,41.941962]},n1867:{id:"n1867",loc:[-85.635796,41.941962]},n1868:{id:"n1868",loc:[-85.63295,41.943006]},n1869:{id:"n1869",loc:[-85.634692,41.943098]},n187:{id:"n187",loc:[-85.637877,41.941975]},n1870:{id:"n1870",loc:[-85.633128,41.940484]},n1871:{id:"n1871",loc:[-85.633117,41.942798]},n1872:{id:"n1872",loc:[-85.633303,41.942412]},n1873:{id:"n1873",loc:[-85.633482,41.941912]},n1874:{id:"n1874",loc:[-85.633455,41.941359]},n1875:{id:"n1875",loc:[-85.633162,41.942679]},n1876:{id:"n1876",loc:[-85.634274,41.943479]},n1877:{id:"n1877",loc:[-85.634678,41.942909]},n1878:{id:"n1878",loc:[-85.6339,41.941453]},n1879:{id:"n1879",loc:[-85.634571,41.942774]},n188:{id:"n188",loc:[-85.636855,41.942488]},n1880:{id:"n1880",loc:[-85.63419,41.941732]},n1881:{id:"n1881",loc:[-85.634067,41.941565]},n1882:{id:"n1882",loc:[-85.63436,41.942358]},n1883:{id:"n1883",loc:[-85.634327,41.942247]},n1884:{id:"n1884",loc:[-85.633391,41.941231]},n1885:{id:"n1885",loc:[-85.634303,41.941972]},n1886:{id:"n1886",loc:[-85.633541,41.940147]},n1887:{id:"n1887",loc:[-85.633433,41.940252]},n1888:{id:"n1888",loc:[-85.633402,41.940411]},n1889:{id:"n1889",loc:[-85.633551,41.941023]},n189:{id:"n189",loc:[-85.636702,41.942488]},n1890:{id:"n1890",loc:[-85.633719,41.941186]},n1891:{id:"n1891",loc:[-85.633067,41.941845]},n1892:{id:"n1892",loc:[-85.634902,41.942766]},n1893:{id:"n1893",loc:[-85.634603,41.942202]},n1894:{id:"n1894",loc:[-85.634858,41.942152]},n1895:{id:"n1895",loc:[-85.634842,41.942269]},n1896:{id:"n1896",loc:[-85.634907,41.942313]},n1897:{id:"n1897",loc:[-85.635049,41.942331]},n1898:{id:"n1898",loc:[-85.635101,41.942281]},n1899:{id:"n1899",loc:[-85.635129,41.942144]},n19:{id:"n19",loc:[-85.633009,41.942229]},n190:{id:"n190",loc:[-85.636702,41.942434]},n1900:{id:"n1900",loc:[-85.635531,41.942143]},n1901:{id:"n1901",loc:[-85.635534,41.942577]},n1902:{id:"n1902",loc:[-85.635158,41.942656]},n1903:{id:"n1903",loc:[-85.635121,41.942703]},n1904:{id:"n1904",loc:[-85.635087,41.941508]},n1905:{id:"n1905",loc:[-85.63536,41.941106]},n1906:{id:"n1906",loc:[-85.635442,41.941094]},n1907:{id:"n1907",loc:[-85.635508,41.941104]},n1908:{id:"n1908",loc:[-85.635569,41.941125]},n1909:{id:"n1909",loc:[-85.635583,41.941106]},n191:{id:"n191",loc:[-85.636761,41.942434]},n1910:{id:"n1910",loc:[-85.635555,41.940976]},n1911:{id:"n1911",loc:[-85.635501,41.940915]},n1912:{id:"n1912",loc:[-85.635392,41.940922]},n1913:{id:"n1913",loc:[-85.635276,41.940974]},n1914:{id:"n1914",loc:[-85.63517,41.941204]},n1915:{id:"n1915",loc:[-85.634888,41.941517]},n1916:{id:"n1916",loc:[-85.634897,41.941576]},n1917:{id:"n1917",loc:[-85.634961,41.94164]},n1918:{id:"n1918",loc:[-85.635028,41.941659]},n1919:{id:"n1919",loc:[-85.635118,41.941621]},n192:{id:"n192",loc:[-85.636761,41.942369]},n1920:{id:"n1920",loc:[-85.635085,41.941558]},n1921:{id:"n1921",loc:[-85.63504,41.94136]},n1922:{id:"n1922",loc:[-85.635221,41.941077]},n1923:{id:"n1923",loc:[-85.634387,41.941559]},n1924:{id:"n1924",loc:[-85.634351,41.941587]},n1925:{id:"n1925",loc:[-85.634416,41.941756]},n1926:{id:"n1926",loc:[-85.634461,41.941797]},n1927:{id:"n1927",loc:[-85.634501,41.941819]},n1928:{id:"n1928",loc:[-85.634597,41.941816]},n1929:{id:"n1929",loc:[-85.634732,41.941724]},n193:{id:"n193",loc:[-85.636855,41.942369]},n1930:{id:"n1930",loc:[-85.634672,41.941775]},n1931:{id:"n1931",loc:[-85.633403,41.939101]},n1932:{id:"n1932",loc:[-85.633297,41.939397]},n1933:{id:"n1933",loc:[-85.633205,41.939674]},n1934:{id:"n1934",loc:[-85.63322,41.939777]},n1935:{id:"n1935",loc:[-85.633345,41.939936]},n1936:{id:"n1936",loc:[-85.633376,41.940002]},n1937:{id:"n1937",loc:[-85.633266,41.940228]},n1938:{id:"n1938",loc:[-85.633236,41.940352]},n1939:{id:"n1939",loc:[-85.633282,41.94063]},n194:{id:"n194",loc:[-85.636645,41.94249]},n1940:{id:"n1940",loc:[-85.633364,41.940874]},n1941:{id:"n1941",loc:[-85.633439,41.941052]},n1942:{id:"n1942",loc:[-85.633582,41.941172]},n1943:{id:"n1943",loc:[-85.633748,41.941273]},n1944:{id:"n1944",loc:[-85.634317,41.941527]},n1945:{id:"n1945",loc:[-85.634389,41.94174]},n1946:{id:"n1946",loc:[-85.634441,41.941801]},n1947:{id:"n1947",loc:[-85.634514,41.941837]},n1948:{id:"n1948",loc:[-85.634485,41.942005]},n1949:{id:"n1949",loc:[-85.63457,41.942202]},n195:{id:"n195",loc:[-85.636565,41.94249]},n1950:{id:"n1950",loc:[-85.634869,41.942769]},n1951:{id:"n1951",loc:[-85.634943,41.942792]},n1952:{id:"n1952",loc:[-85.635139,41.942882]},n1953:{id:"n1953",loc:[-85.634962,41.943161]},n1954:{id:"n1954",loc:[-85.635002,41.943131]},n1955:{id:"n1955",loc:[-85.635005,41.943091]},n1956:{id:"n1956",loc:[-85.635216,41.943033]},n1957:{id:"n1957",loc:[-85.634817,41.94267]},n1958:{id:"n1958",loc:[-85.634614,41.942599]},n1959:{id:"n1959",loc:[-85.634494,41.942381]},n196:{id:"n196",loc:[-85.636565,41.942474]},n1960:{id:"n1960",loc:[-85.634486,41.9423]},n1961:{id:"n1961",loc:[-85.634671,41.941795]},n1962:{id:"n1962",loc:[-85.634595,41.941831]},n1963:{id:"n1963",loc:[-85.634332,41.941866]},n1964:{id:"n1964",loc:[-85.634207,41.941885]},n1965:{id:"n1965",loc:[-85.634133,41.941892]},n1966:{id:"n1966",loc:[-85.634131,41.942203]},n1967:{id:"n1967",loc:[-85.634047,41.942327]},n1968:{id:"n1968",loc:[-85.634219,41.942793]},n1969:{id:"n1969",loc:[-85.634061,41.942392]},n197:{id:"n197",loc:[-85.636514,41.942474]},n1970:{id:"n1970",loc:[-85.633989,41.942407]},n1971:{id:"n1971",loc:[-85.633971,41.942356]},n1972:{id:"n1972",loc:[-85.63361,41.942423]},n1973:{id:"n1973",loc:[-85.633714,41.942682]},n1974:{id:"n1974",loc:[-85.633698,41.942863]},n1975:{id:"n1975",loc:[-85.633882,41.942865]},n1976:{id:"n1976",loc:[-85.633941,41.943007]},n1977:{id:"n1977",loc:[-85.633887,41.943035]},n1978:{id:"n1978",loc:[-85.633768,41.942815]},n1979:{id:"n1979",loc:[-85.633682,41.942351]},n198:{id:"n198",loc:[-85.636514,41.942326]},n1980:{id:"n1980",loc:[-85.634037,41.942273]},n1981:{id:"n1981",loc:[-85.634029,41.942252]},n1982:{id:"n1982",loc:[-85.633673,41.942331]},n1983:{id:"n1983",loc:[-85.634219,41.942571]},n1984:{id:"n1984",loc:[-85.634252,41.942565]},n1985:{id:"n1985",loc:[-85.634144,41.942299]},n1986:{id:"n1986",loc:[-85.634115,41.942306]},n1987:{id:"n1987",loc:[-85.634059,41.943094]},n1988:{id:"n1988",loc:[-85.633944,41.942903]},n1989:{id:"n1989",loc:[-85.634311,41.942821]},n199:{id:"n199",loc:[-85.636561,41.942326]},n1990:{id:"n1990",loc:[-85.634351,41.94277]},n1991:{id:"n1991",loc:[-85.634153,41.942254]},n1992:{id:"n1992",loc:[-85.634092,41.94222]},n1993:{id:"n1993",loc:[-85.633571,41.942336]},n1994:{id:"n1994",loc:[-85.633513,41.942387]},n1995:{id:"n1995",loc:[-85.633509,41.942455]},n1996:{id:"n1996",loc:[-85.63363,41.942665]},n1997:{id:"n1997",loc:[-85.63414,41.94286]},n1998:{id:"n1998",loc:[-85.63397,41.942449]},n1999:{id:"n1999",loc:[-85.633551,41.942529]},n2:{id:"n2",loc:[-85.627421,41.953877]},n20:{id:"n20",loc:[-85.633013,41.941438]},n200:{id:"n200",loc:[-85.636561,41.942311]},n2000:{id:"n2000",loc:[-85.633741,41.942493]},n2001:{id:"n2001",loc:[-85.633894,41.942869]},n2002:{id:"n2002",loc:[-85.634132,41.941954]},n2003:{id:"n2003",loc:[-85.634032,41.942038]},n2004:{id:"n2004",loc:[-85.633765,41.942238]},n2005:{id:"n2005",loc:[-85.63376,41.942268]},n2006:{id:"n2006",loc:[-85.633768,41.942293]},n2007:{id:"n2007",loc:[-85.633808,41.942386]},n2008:{id:"n2008",loc:[-85.634946,41.941663]},n2009:{id:"n2009",loc:[-85.63511,41.941697]},n201:{id:"n201",loc:[-85.636621,41.942311]},n2010:{id:"n2010",loc:[-85.635337,41.94168]},n2011:{id:"n2011",loc:[-85.634997,41.942251]},n2012:{id:"n2012",loc:[-85.635013,41.942173]},n2013:{id:"n2013",loc:[-85.634876,41.942157]},n2014:{id:"n2014",loc:[-85.634859,41.942235]},n2015:{id:"n2015",loc:[-85.634992,41.941951]},n2016:{id:"n2016",loc:[-85.634952,41.941877]},n2017:{id:"n2017",loc:[-85.634844,41.94191]},n2018:{id:"n2018",loc:[-85.634884,41.941983]},n2019:{id:"n2019",loc:[-85.635189,41.941691]},n202:{id:"n202",loc:[-85.636621,41.942351]},n2020:{id:"n2020",loc:[-85.635089,41.941896]},n2021:{id:"n2021",loc:[-85.635077,41.941964]},n2022:{id:"n2022",loc:[-85.635058,41.942147]},n2023:{id:"n2023",loc:[-85.635099,41.942161]},n2024:{id:"n2024",loc:[-85.635099,41.942213]},n2025:{id:"n2025",loc:[-85.635079,41.942285]},n2026:{id:"n2026",loc:[-85.635047,41.942316]},n2027:{id:"n2027",loc:[-85.634925,41.9423]},n2028:{id:"n2028",loc:[-85.634911,41.942276]},n2029:{id:"n2029",loc:[-85.634917,41.942242]},n203:{id:"n203",loc:[-85.63666,41.942351]},n2030:{id:"n2030",loc:[-85.634698,41.941898]},n2031:{id:"n2031",loc:[-85.634964,41.941878]},n2032:{id:"n2032",loc:[-85.635025,41.941929]},n2033:{id:"n2033",loc:[-85.634862,41.941887]},n2034:{id:"n2034",loc:[-85.634811,41.94181]},n2035:{id:"n2035",loc:[-85.634731,41.941745]},n2036:{id:"n2036",loc:[-85.634933,41.94176]},n2037:{id:"n2037",loc:[-85.634942,41.942145]},n2038:{id:"n2038",loc:[-85.634944,41.942065]},n2039:{id:"n2039",loc:[-85.634914,41.941996]},n204:{id:"n204",loc:[-85.63666,41.942453]},n2040:{id:"n2040",loc:[-85.634981,41.941979]},n2041:{id:"n2041",loc:[-85.633419,41.942172]},n2042:{id:"n2042",loc:[-85.633509,41.941631]},n2043:{id:"n2043",loc:[-85.633686,41.942937]},n2044:{id:"n2044",loc:[-85.633371,41.942722]},n2045:{id:"n2045",loc:[-85.633291,41.942538]},n2046:{id:"n2046",loc:[-85.633902,41.940941]},n2047:{id:"n2047",loc:[-85.635254,41.940939]},n2048:{id:"n2048",loc:[-85.635686,41.940829]},n2049:{id:"n2049",loc:[-85.635712,41.942681]},n205:{id:"n205",loc:[-85.636645,41.942453]},n2050:{id:"n2050",loc:[-85.633721,41.942118]},n2051:{id:"n2051",loc:[-85.633698,41.942057]},n2052:{id:"n2052",loc:[-85.633591,41.942079]},n2053:{id:"n2053",loc:[-85.633614,41.94214]},n2054:{id:"n2054",loc:[-85.633968,41.941099]},n2055:{id:"n2055",loc:[-85.633907,41.941138]},n2056:{id:"n2056",loc:[-85.633968,41.941197]},n2057:{id:"n2057",loc:[-85.63404,41.941162]},n2058:{id:"n2058",loc:[-85.634839,41.941665]},n2059:{id:"n2059",loc:[-85.635314,41.943035]},n206:{id:"n206",loc:[-85.636394,41.942471]},n2060:{id:"n2060",loc:[-85.634919,41.943142]},n2061:{id:"n2061",loc:[-85.636433,41.942959],tags:{"addr:city":"Three Rivers","addr:housenumber":"333","addr:postcode":"49093","addr:state":"MI","addr:street":"Michigan Avenue",amenity:"townhall",name:"Three Rivers City Hall"}},n2062:{id:"n2062",loc:[-85.637039,41.942789]},n2063:{id:"n2063",loc:[-85.636333,41.94279]},n2064:{id:"n2064",loc:[-85.634484,41.940726]},n2065:{id:"n2065",loc:[-85.634483,41.940603]},n2066:{id:"n2066",loc:[-85.634908,41.940601]},n2067:{id:"n2067",loc:[-85.634908,41.94053]},n2068:{id:"n2068",loc:[-85.634934,41.94053]},n2069:{id:"n2069",loc:[-85.634934,41.940496]},n207:{id:"n207",loc:[-85.636262,41.942472]},n2070:{id:"n2070",loc:[-85.63504,41.940495]},n2071:{id:"n2071",loc:[-85.63504,41.940531]},n2072:{id:"n2072",loc:[-85.635068,41.940531]},n2073:{id:"n2073",loc:[-85.635071,41.940794]},n2074:{id:"n2074",loc:[-85.635183,41.940793]},n2075:{id:"n2075",loc:[-85.635185,41.940916]},n2076:{id:"n2076",loc:[-85.634799,41.940919]},n2077:{id:"n2077",loc:[-85.634798,41.940798]},n2078:{id:"n2078",loc:[-85.634925,41.940797]},n2079:{id:"n2079",loc:[-85.634924,41.940724]},n208:{id:"n208",loc:[-85.636261,41.94233]},n2080:{id:"n2080",loc:[-85.637448,41.938233]},n2081:{id:"n2081",loc:[-85.634168,41.943279]},n2082:{id:"n2082",loc:[-85.635744,41.938248]},n2083:{id:"n2083",loc:[-85.638744,41.951211]},n2084:{id:"n2084",loc:[-85.636421,41.946392]},n2085:{id:"n2085",loc:[-85.635965,41.945809]},n2086:{id:"n2086",loc:[-85.635683,41.945449]},n2087:{id:"n2087",loc:[-85.635281,41.945025]},n2088:{id:"n2088",loc:[-85.632443,41.942574]},n2089:{id:"n2089",loc:[-85.638243,41.943674]},n209:{id:"n209",loc:[-85.636353,41.942329]},n2090:{id:"n2090",loc:[-85.638228,41.943747]},n2091:{id:"n2091",loc:[-85.638163,41.943797]},n2092:{id:"n2092",loc:[-85.638089,41.943832]},n2093:{id:"n2093",loc:[-85.637969,41.943841]},n2094:{id:"n2094",loc:[-85.637841,41.943833]},n2095:{id:"n2095",loc:[-85.637342,41.943734]},n2096:{id:"n2096",loc:[-85.637232,41.943707]},n2097:{id:"n2097",loc:[-85.637163,41.943668]},n2098:{id:"n2098",loc:[-85.637118,41.943615]},n2099:{id:"n2099",loc:[-85.637078,41.943494]},n21:{id:"n21",loc:[-85.634126,41.942228]},n210:{id:"n210",loc:[-85.636354,41.94239]},n2100:{id:"n2100",loc:[-85.632903,41.998429],tags:{railway:"level_crossing"}},n2101:{id:"n2101",loc:[-85.633616,41.943581],tags:{railway:"level_crossing"}},n2102:{id:"n2102",loc:[-85.636943,41.947311]},n2103:{id:"n2103",loc:[-85.6376,41.94854]},n2104:{id:"n2104",loc:[-85.634565,41.93631]},n2105:{id:"n2105",loc:[-85.629597,41.942562]},n2106:{id:"n2106",loc:[-85.630821,41.943077]},n2107:{id:"n2107",loc:[-85.627473,41.940659]},n2108:{id:"n2108",loc:[-85.629708,41.942872]},n2109:{id:"n2109",loc:[-85.634093,41.935448]},n211:{id:"n211",loc:[-85.636393,41.94239]},n2110:{id:"n2110",loc:[-85.630413,41.94366]},n2111:{id:"n2111",loc:[-85.630488,41.942662]},n2112:{id:"n2112",loc:[-85.63361,41.936749]},n2113:{id:"n2113",loc:[-85.630038,41.941808]},n2114:{id:"n2114",loc:[-85.632016,41.942922]},n2115:{id:"n2115",loc:[-85.631525,41.944303]},n2116:{id:"n2116",loc:[-85.626862,41.94022]},n2117:{id:"n2117",loc:[-85.629673,41.94121]},n2118:{id:"n2118",loc:[-85.632752,41.943101]},n2119:{id:"n2119",loc:[-85.631147,41.943201]},n212:{id:"n212",loc:[-85.63444,41.943176]},n2120:{id:"n2120",loc:[-85.624974,41.940579]},n2121:{id:"n2121",loc:[-85.629518,41.941783]},n2122:{id:"n2122",loc:[-85.632349,41.942699]},n2123:{id:"n2123",loc:[-85.628418,41.940356]},n2124:{id:"n2124",loc:[-85.629147,41.94129]},n2125:{id:"n2125",loc:[-85.631111,41.943979]},n2126:{id:"n2126",loc:[-85.632087,41.940013]},n2127:{id:"n2127",loc:[-85.634469,41.935057]},n2128:{id:"n2128",loc:[-85.630097,41.943449]},n2129:{id:"n2129",loc:[-85.6331,41.937878]},n213:{id:"n213",loc:[-85.63375,41.942814]},n2130:{id:"n2130",loc:[-85.625274,41.941114]},n2131:{id:"n2131",loc:[-85.632632,41.941217]},n2132:{id:"n2132",loc:[-85.632739,41.941926]},n2133:{id:"n2133",loc:[-85.631647,41.94366]},n2134:{id:"n2134",loc:[-85.635059,41.935456]},n2135:{id:"n2135",loc:[-85.631259,41.944349]},n2136:{id:"n2136",loc:[-85.626336,41.940811]},n2137:{id:"n2137",loc:[-85.631507,41.943875]},n2138:{id:"n2138",loc:[-85.625081,41.940859]},n2139:{id:"n2139",loc:[-85.625778,41.940093]},n214:{id:"n214",loc:[-85.633674,41.942869]},n2140:{id:"n2140",loc:[-85.632641,41.942436]},n2141:{id:"n2141",loc:[-85.628825,41.941034]},n2142:{id:"n2142",loc:[-85.627913,41.940292]},n2143:{id:"n2143",loc:[-85.628943,41.940516]},n2144:{id:"n2144",loc:[-85.63139,41.943941]},n2145:{id:"n2145",loc:[-85.630081,41.94204]},n2146:{id:"n2146",loc:[-85.632194,41.93963]},n2147:{id:"n2147",loc:[-85.632913,41.93939]},n2148:{id:"n2148",loc:[-85.632001,41.943492]},n2149:{id:"n2149",loc:[-85.63149,41.943154]},n215:{id:"n215",loc:[-85.633542,41.942768]},n2150:{id:"n2150",loc:[-85.625167,41.940117]},n2151:{id:"n2151",loc:[-85.63287,41.939941]},n2152:{id:"n2152",loc:[-85.630789,41.943732]},n2153:{id:"n2153",loc:[-85.632173,41.940348]},n2154:{id:"n2154",loc:[-85.626587,41.940113]},n2155:{id:"n2155",loc:[-85.62684,41.940667]},n2156:{id:"n2156",loc:[-85.632527,41.938904]},n2157:{id:"n2157",loc:[-85.624866,41.94018]},n2158:{id:"n2158",loc:[-85.633267,41.93872]},n2159:{id:"n2159",loc:[-85.62934,41.940843]},n216:{id:"n216",loc:[-85.633618,41.942714]},n2160:{id:"n2160",loc:[-85.62272,41.953817]},n2161:{id:"n2161",loc:[-85.622555,41.954453]},n2162:{id:"n2162",loc:[-85.637225,41.944128]},n2163:{id:"n2163",loc:[-85.622628,41.953683]},n2164:{id:"n2164",loc:[-85.635441,41.943989]},n2165:{id:"n2165",loc:[-85.622629,41.953807]},n2166:{id:"n2166",loc:[-85.62262,41.953807]},n2167:{id:"n2167",loc:[-85.62262,41.953837]},n2168:{id:"n2168",loc:[-85.622532,41.953838]},n2169:{id:"n2169",loc:[-85.637469,41.944579]},n217:{id:"n217",loc:[-85.634001,41.942336]},n2170:{id:"n2170",loc:[-85.63688,41.943935]},n2171:{id:"n2171",loc:[-85.638263,41.946367]},n2172:{id:"n2172",loc:[-85.622532,41.953807]},n2173:{id:"n2173",loc:[-85.622353,41.953808]},n2174:{id:"n2174",loc:[-85.622352,41.953685]},n2175:{id:"n2175",loc:[-85.622464,41.953684]},n2176:{id:"n2176",loc:[-85.622464,41.953648]},n2177:{id:"n2177",loc:[-85.637136,41.94576]},n2178:{id:"n2178",loc:[-85.622521,41.953648]},n2179:{id:"n2179",loc:[-85.637129,41.945415]},n218:{id:"n218",loc:[-85.633825,41.942376]},n2180:{id:"n2180",loc:[-85.637473,41.94607]},n2181:{id:"n2181",loc:[-85.622521,41.953683]},n2182:{id:"n2182",loc:[-85.622717,41.954104]},n2183:{id:"n2183",loc:[-85.637769,41.946095]},n2184:{id:"n2184",loc:[-85.623872,41.953515]},n2185:{id:"n2185",loc:[-85.623851,41.953588]},n2186:{id:"n2186",loc:[-85.631385,41.94433]},n2187:{id:"n2187",loc:[-85.623608,41.953543]},n2188:{id:"n2188",loc:[-85.637308,41.944882]},n2189:{id:"n2189",loc:[-85.634898,41.944041]},n219:{id:"n219",loc:[-85.633807,41.942334]},n2190:{id:"n2190",loc:[-85.623604,41.953442]},n2191:{id:"n2191",loc:[-85.623705,41.953442]},n2192:{id:"n2192",loc:[-85.623708,41.953493]},n2193:{id:"n2193",loc:[-85.624064,41.952655]},n2194:{id:"n2194",loc:[-85.62395,41.952654]},n2195:{id:"n2195",loc:[-85.623951,41.952579]},n2196:{id:"n2196",loc:[-85.637435,41.944342]},n2197:{id:"n2197",loc:[-85.624064,41.952579]},n2198:{id:"n2198",loc:[-85.623812,41.952648]},n2199:{id:"n2199",loc:[-85.623813,41.952705]},n22:{id:"n22",loc:[-85.633531,41.942357]},n220:{id:"n220",loc:[-85.633983,41.942294]},n2200:{id:"n2200",loc:[-85.637169,41.945098]},n2201:{id:"n2201",loc:[-85.623552,41.952707]},n2202:{id:"n2202",loc:[-85.623551,41.95263]},n2203:{id:"n2203",loc:[-85.623701,41.952629]},n2204:{id:"n2204",loc:[-85.635894,41.943719]},n2205:{id:"n2205",loc:[-85.637297,41.945992]},n2206:{id:"n2206",loc:[-85.623724,41.952648]},n2207:{id:"n2207",loc:[-85.623812,41.952438]},n2208:{id:"n2208",loc:[-85.625239,41.952197]},n2209:{id:"n2209",loc:[-85.625232,41.952257]},n221:{id:"n221",loc:[-85.634182,41.942495]},n2210:{id:"n2210",loc:[-85.635175,41.94408]},n2211:{id:"n2211",loc:[-85.636381,41.943761]},n2212:{id:"n2212",loc:[-85.625115,41.952249]},n2213:{id:"n2213",loc:[-85.638578,41.946644]},n2214:{id:"n2214",loc:[-85.625122,41.952189]},n2215:{id:"n2215",loc:[-85.625085,41.952031]},n2216:{id:"n2216",loc:[-85.636126,41.943713]},n2217:{id:"n2217",loc:[-85.635005,41.944041]},n2218:{id:"n2218",loc:[-85.63714,41.945328]},n2219:{id:"n2219",loc:[-85.634871,41.943292]},n222:{id:"n222",loc:[-85.634149,41.942503]},n2220:{id:"n2220",loc:[-85.635705,41.943799]},n2221:{id:"n2221",loc:[-85.634995,41.943576]},n2222:{id:"n2222",loc:[-85.635026,41.943829]},n2223:{id:"n2223",loc:[-85.632874,41.941031]},n2224:{id:"n2224",loc:[-85.632531,41.940233]},n2225:{id:"n2225",loc:[-85.634247,41.936003]},n2226:{id:"n2226",loc:[-85.62929,41.941127]},n2227:{id:"n2227",loc:[-85.630428,41.943266]},n2228:{id:"n2228",loc:[-85.631608,41.943425]},n2229:{id:"n2229",loc:[-85.632316,41.943042]},n223:{id:"n223",loc:[-85.634098,41.942373]},n2230:{id:"n2230",loc:[-85.628711,41.940744]},n2231:{id:"n2231",loc:[-85.627831,41.940536]},n2232:{id:"n2232",loc:[-85.625514,41.94052]},n2233:{id:"n2233",loc:[-85.631127,41.943545]},n2234:{id:"n2234",loc:[-85.632909,41.942531]},n2235:{id:"n2235",loc:[-85.632917,41.938796]},n2236:{id:"n2236",loc:[-85.626716,41.94044]},n2237:{id:"n2237",loc:[-85.630122,41.942852]},n2238:{id:"n2238",loc:[-85.632509,41.939674]},n2239:{id:"n2239",loc:[-85.634762,41.935237]},n224:{id:"n224",loc:[-85.634131,41.942366]},n2240:{id:"n2240",loc:[-85.63384,41.937025]},n2241:{id:"n2241",loc:[-85.629741,41.941909]},n2242:{id:"n2242",loc:[-85.635254,41.945001],tags:{railway:"level_crossing"}},n2243:{id:"n2243",loc:[-85.634005,41.938168]},n2244:{id:"n2244",loc:[-85.63393,41.938335]},n2245:{id:"n2245",loc:[-85.633859,41.93846]},n2246:{id:"n2246",loc:[-85.633663,41.938776]},n2247:{id:"n2247",loc:[-85.633513,41.938936]},n2248:{id:"n2248",loc:[-85.635295,41.943225]},n2249:{id:"n2249",loc:[-85.635393,41.943293]},n225:{id:"n225",loc:[-85.635986,41.94177]},n2250:{id:"n2250",loc:[-85.635645,41.94332]},n2251:{id:"n2251",loc:[-85.63629,41.943328]},n2252:{id:"n2252",loc:[-85.636554,41.943372]},n2253:{id:"n2253",loc:[-85.636869,41.943526]},n2254:{id:"n2254",loc:[-85.637099,41.943704]},n2255:{id:"n2255",loc:[-85.637268,41.943773]},n2256:{id:"n2256",loc:[-85.637483,41.943821]},n2257:{id:"n2257",loc:[-85.637616,41.943929]},n2258:{id:"n2258",loc:[-85.637752,41.944114]},n2259:{id:"n2259",loc:[-85.638399,41.944308]},n226:{id:"n226",loc:[-85.635982,41.941523]},n2260:{id:"n2260",loc:[-85.638573,41.944451]},n2261:{id:"n2261",loc:[-85.638702,41.944574]},n2262:{id:"n2262",loc:[-85.638718,41.944652]},n2263:{id:"n2263",loc:[-85.638715,41.944809]},n2264:{id:"n2264",loc:[-85.638766,41.944988]},n2265:{id:"n2265",loc:[-85.638773,41.945136]},n2266:{id:"n2266",loc:[-85.638705,41.945251]},n2267:{id:"n2267",loc:[-85.638335,41.944291]},n2268:{id:"n2268",loc:[-85.638474,41.944352]},n2269:{id:"n2269",loc:[-85.635408,41.943429]},n227:{id:"n227",loc:[-85.636108,41.941521]},n2270:{id:"n2270",loc:[-85.635271,41.943654]},n2271:{id:"n2271",loc:[-85.635266,41.943744]},n2272:{id:"n2272",loc:[-85.635271,41.943819]},n2273:{id:"n2273",loc:[-85.635192,41.943876]},n2274:{id:"n2274",loc:[-85.635129,41.943857]},n2275:{id:"n2275",loc:[-85.635122,41.943764]},n2276:{id:"n2276",loc:[-85.635124,41.943664]},n2277:{id:"n2277",loc:[-85.63515,41.943611]},n2278:{id:"n2278",loc:[-85.635106,41.943534]},n2279:{id:"n2279",loc:[-85.634972,41.943197]},n228:{id:"n228",loc:[-85.636109,41.941559]},n2280:{id:"n2280",loc:[-85.633978,41.938227]},n2281:{id:"n2281",loc:[-85.634216,41.943255]},n2282:{id:"n2282",loc:[-85.634434,41.943622]},n2283:{id:"n2283",loc:[-85.632406,41.940854]},n2284:{id:"n2284",loc:[-85.632488,41.941063],tags:{leisure:"slipway"}},n2285:{id:"n2285",loc:[-85.632726,41.941537]},n2286:{id:"n2286",loc:[-85.632639,41.94136]},n2287:{id:"n2287",loc:[-85.632704,41.941439]},n2288:{id:"n2288",loc:[-85.632289,41.940601]},n2289:{id:"n2289",loc:[-85.632541,41.942526]},n229:{id:"n229",loc:[-85.636145,41.941559]},n2290:{id:"n2290",loc:[-85.634058,41.943173]},n2291:{id:"n2291",loc:[-85.636175,41.945974]},n2292:{id:"n2292",loc:[-85.636528,41.945975]},n2293:{id:"n2293",loc:[-85.637092,41.945893]},n2294:{id:"n2294",loc:[-85.637881,41.945647]},n2295:{id:"n2295",loc:[-85.639329,41.945162]},n2296:{id:"n2296",loc:[-85.639323,41.945026]},n2297:{id:"n2297",loc:[-85.638826,41.945032]},n2298:{id:"n2298",loc:[-85.638817,41.944174]},n2299:{id:"n2299",loc:[-85.638291,41.94418]},n23:{id:"n23",loc:[-85.633504,41.942418]},n230:{id:"n230",loc:[-85.636145,41.941551]},n2300:{id:"n2300",loc:[-85.63828,41.943811]},n2301:{id:"n2301",loc:[-85.638195,41.943601]},n2302:{id:"n2302",loc:[-85.63719,41.943592]},n2303:{id:"n2303",loc:[-85.636697,41.943273]},n2304:{id:"n2304",loc:[-85.635375,41.943274]},n2305:{id:"n2305",loc:[-85.635091,41.943547]},n2306:{id:"n2306",loc:[-85.63442,41.944117]},n2307:{id:"n2307",loc:[-85.635117,41.943717]},n2308:{id:"n2308",loc:[-85.635601,41.945177]},n2309:{id:"n2309",loc:[-85.635819,41.945494]},n231:{id:"n231",loc:[-85.636312,41.941549]},n2310:{id:"n2310",loc:[-85.635303,41.944891]},n2311:{id:"n2311",loc:[-85.637674,41.943802]},n2312:{id:"n2312",loc:[-85.638263,41.944272]},n2313:{id:"n2313",loc:[-85.634267,41.935266]},n2314:{id:"n2314",loc:[-85.639788,41.945152]},n2315:{id:"n2315",loc:[-85.639645,41.945167]},n2316:{id:"n2316",loc:[-85.639362,41.945233]},n2317:{id:"n2317",loc:[-85.638616,41.945163]},n2318:{id:"n2318",loc:[-85.638514,41.944936]},n2319:{id:"n2319",loc:[-85.638578,41.94503]},n232:{id:"n232",loc:[-85.636314,41.941649]},n2320:{id:"n2320",loc:[-85.638578,41.945215]},n2321:{id:"n2321",loc:[-85.640495,41.947015]},n2322:{id:"n2322",loc:[-85.639577,41.946495]},n2323:{id:"n2323",loc:[-85.638935,41.946087]},n2324:{id:"n2324",loc:[-85.637535,41.94584]},n2325:{id:"n2325",loc:[-85.638357,41.945404]},n2326:{id:"n2326",loc:[-85.638051,41.94553]},n2327:{id:"n2327",loc:[-85.637732,41.945555]},n2328:{id:"n2328",loc:[-85.637657,41.945524]},n2329:{id:"n2329",loc:[-85.637598,41.945467]},n233:{id:"n233",loc:[-85.636152,41.94165]},n2330:{id:"n2330",loc:[-85.637669,41.945318]},n2331:{id:"n2331",loc:[-85.637894,41.945171]},n2332:{id:"n2332",loc:[-85.637923,41.945082]},n2333:{id:"n2333",loc:[-85.63793,41.944756]},n2334:{id:"n2334",loc:[-85.637976,41.944696]},n2335:{id:"n2335",loc:[-85.638044,41.944671]},n2336:{id:"n2336",loc:[-85.638129,41.944597]},n2337:{id:"n2337",loc:[-85.638252,41.944413]},n2338:{id:"n2338",loc:[-85.638092,41.945442]},n2339:{id:"n2339",loc:[-85.638409,41.945315]},n234:{id:"n234",loc:[-85.636152,41.941628]},n2340:{id:"n2340",loc:[-85.638325,41.944771]},n2341:{id:"n2341",loc:[-85.638103,41.944744]},n2342:{id:"n2342",loc:[-85.637976,41.944781]},n2343:{id:"n2343",loc:[-85.637983,41.944865]},n2344:{id:"n2344",loc:[-85.638063,41.945074]},n2345:{id:"n2345",loc:[-85.638041,41.945206]},n2346:{id:"n2346",loc:[-85.637907,41.945309]},n2347:{id:"n2347",loc:[-85.637925,41.94539]},n2348:{id:"n2348",loc:[-85.637998,41.94545]},n2349:{id:"n2349",loc:[-85.637135,41.946254]},n235:{id:"n235",loc:[-85.63611,41.941628]},n2350:{id:"n2350",loc:[-85.636837,41.946615]},n2351:{id:"n2351",loc:[-85.637954,41.948909]},n2352:{id:"n2352",loc:[-85.638382,41.949786]},n2353:{id:"n2353",loc:[-85.639367,41.951242]},n2354:{id:"n2354",loc:[-85.640554,41.951777]},n2355:{id:"n2355",loc:[-85.6411,41.952234]},n2356:{id:"n2356",loc:[-85.641742,41.952657]},n2357:{id:"n2357",loc:[-85.642321,41.952941]},n2358:{id:"n2358",loc:[-85.64277,41.953228]},n2359:{id:"n2359",loc:[-85.643333,41.953825]},n236:{id:"n236",loc:[-85.636113,41.941768]},n2360:{id:"n2360",loc:[-85.643579,41.954365]},n2361:{id:"n2361",loc:[-85.644439,41.954105]},n2362:{id:"n2362",loc:[-85.64506,41.954]},n2363:{id:"n2363",loc:[-85.645483,41.953911]},n2364:{id:"n2364",loc:[-85.646046,41.953853]},n2365:{id:"n2365",loc:[-85.646318,41.953717]},n2366:{id:"n2366",loc:[-85.646276,41.953414]},n2367:{id:"n2367",loc:[-85.631063,41.957478],tags:{emergency:"fire_hydrant"}},n2368:{id:"n2368",loc:[-85.630996,41.955857],tags:{emergency:"fire_hydrant"}},n2369:{id:"n2369",loc:[-85.630976,41.954608],tags:{emergency:"fire_hydrant"}},n237:{id:"n237",loc:[-85.635983,41.941589],tags:{entrance:"yes"}},n2370:{id:"n2370",loc:[-85.646,41.953154]},n2371:{id:"n2371",loc:[-85.645222,41.953193]},n2372:{id:"n2372",loc:[-85.644732,41.953181]},n2373:{id:"n2373",loc:[-85.644064,41.953298]},n2374:{id:"n2374",loc:[-85.643818,41.953177]},n2375:{id:"n2375",loc:[-85.644001,41.95284]},n2376:{id:"n2376",loc:[-85.628174,41.95456],tags:{emergency:"fire_hydrant"}},n2377:{id:"n2377",loc:[-85.644267,41.952591]},n2378:{id:"n2378",loc:[-85.644288,41.952328]},n2379:{id:"n2379",loc:[-85.627276,41.953987],tags:{emergency:"fire_hydrant"}},n238:{id:"n238",loc:[-85.635906,41.94159]},n2380:{id:"n2380",loc:[-85.644262,41.952153]},n2381:{id:"n2381",loc:[-85.644168,41.95204]},n2382:{id:"n2382",loc:[-85.64421,41.951749]},n2383:{id:"n2383",loc:[-85.64385,41.951586]},n2384:{id:"n2384",loc:[-85.62736,41.955964],tags:{emergency:"fire_hydrant"}},n2385:{id:"n2385",loc:[-85.626307,41.957198],tags:{emergency:"fire_hydrant"}},n2386:{id:"n2386",loc:[-85.643589,41.951323]},n2387:{id:"n2387",loc:[-85.62747,41.957509],tags:{emergency:"fire_hydrant"}},n2388:{id:"n2388",loc:[-85.628665,41.957492],tags:{emergency:"fire_hydrant"}},n2389:{id:"n2389",loc:[-85.642535,41.951031]},n239:{id:"n239",loc:[-85.635883,41.940182]},n2390:{id:"n2390",loc:[-85.642269,41.95088]},n2391:{id:"n2391",loc:[-85.641878,41.950814]},n2392:{id:"n2392",loc:[-85.641549,41.950806]},n2393:{id:"n2393",loc:[-85.641103,41.950549]},n2394:{id:"n2394",loc:[-85.630864,41.959046],tags:{emergency:"fire_hydrant"}},n2395:{id:"n2395",loc:[-85.632249,41.958969],tags:{emergency:"fire_hydrant"}},n2396:{id:"n2396",loc:[-85.641037,41.949821]},n2397:{id:"n2397",loc:[-85.641006,41.949433]},n2398:{id:"n2398",loc:[-85.632232,41.95859],tags:{emergency:"fire_hydrant"}},n2399:{id:"n2399",loc:[-85.632071,41.958345],tags:{emergency:"fire_hydrant"}},n24:{id:"n24",loc:[-85.634346,41.942792]},n240:{id:"n240",loc:[-85.635916,41.94264]},n2400:{id:"n2400",loc:[-85.632228,41.9573],tags:{emergency:"fire_hydrant"}},n2401:{id:"n2401",loc:[-85.641152,41.948257]},n2402:{id:"n2402",loc:[-85.641055,41.947304]},n2403:{id:"n2403",loc:[-85.638022,41.945897]},n2404:{id:"n2404",loc:[-85.638672,41.950778]},n2405:{id:"n2405",loc:[-85.63666,41.944492],tags:{name:"Memory Isle",place:"island"}},n2406:{id:"n2406",loc:[-85.635,41.946389],tags:{amenity:"post_office",name:"Three Rivers Post Office"}},n2407:{id:"n2407",loc:[-85.633676,41.946036]},n2408:{id:"n2408",loc:[-85.633736,41.946078]},n2409:{id:"n2409",loc:[-85.633997,41.946185]},n241:{id:"n241",loc:[-85.635795,41.941906]},n2410:{id:"n2410",loc:[-85.634448,41.945626],tags:{highway:"traffic_signals",traffic_signals:"signal"}},n2411:{id:"n2411",loc:[-85.63456,41.945731],tags:{crossing:"marked",highway:"crossing"}},n2412:{id:"n2412",loc:[-85.634592,41.94578]},n2413:{id:"n2413",loc:[-85.634607,41.945815]},n2414:{id:"n2414",loc:[-85.634614,41.945864]},n2415:{id:"n2415",loc:[-85.636066,41.946185]},n2416:{id:"n2416",loc:[-85.636128,41.946352]},n2417:{id:"n2417",loc:[-85.636142,41.946452]},n2418:{id:"n2418",loc:[-85.635327,41.945292]},n2419:{id:"n2419",loc:[-85.635648,41.94558]},n242:{id:"n242",loc:[-85.635909,41.941906]},n2420:{id:"n2420",loc:[-85.635769,41.945729]},n2421:{id:"n2421",loc:[-85.637349,41.945897]},n2422:{id:"n2422",loc:[-85.632211,41.95596],tags:{emergency:"fire_hydrant"}},n2423:{id:"n2423",loc:[-85.635942,41.94598]},n2424:{id:"n2424",loc:[-85.636443,41.946042]},n2425:{id:"n2425",loc:[-85.635819,41.946052]},n2426:{id:"n2426",loc:[-85.636669,41.946025]},n2427:{id:"n2427",loc:[-85.636832,41.946005]},n2428:{id:"n2428",loc:[-85.637039,41.945968]},n2429:{id:"n2429",loc:[-85.636291,41.946046]},n243:{id:"n243",loc:[-85.636359,41.941904]},n2430:{id:"n2430",loc:[-85.634005,41.943367]},n2431:{id:"n2431",loc:[-85.633366,41.943724]},n2432:{id:"n2432",loc:[-85.634617,41.946057]},n2433:{id:"n2433",loc:[-85.636534,41.944793]},n2434:{id:"n2434",loc:[-85.637055,41.945188]},n2435:{id:"n2435",loc:[-85.636153,41.944618]},n2436:{id:"n2436",loc:[-85.636803,41.944944]},n2437:{id:"n2437",loc:[-85.633389,41.945735]},n2438:{id:"n2438",loc:[-85.633536,41.94585]},n2439:{id:"n2439",loc:[-85.63363,41.945993]},n244:{id:"n244",loc:[-85.636351,41.941438]},n2440:{id:"n2440",loc:[-85.633268,41.94568]},n2441:{id:"n2441",loc:[-85.635947,41.94546]},n2442:{id:"n2442",loc:[-85.636277,41.945268]},n2443:{id:"n2443",loc:[-85.635203,41.944287]},n2444:{id:"n2444",loc:[-85.634876,41.944477]},n2445:{id:"n2445",loc:[-85.634975,41.944419]},n2446:{id:"n2446",loc:[-85.633877,41.943438]},n2447:{id:"n2447",loc:[-85.63508,41.945113]},n2448:{id:"n2448",loc:[-85.635372,41.944932]},n2449:{id:"n2449",loc:[-85.636594,41.945935]},n245:{id:"n245",loc:[-85.635903,41.941436]},n2450:{id:"n2450",loc:[-85.636901,41.945747]},n2451:{id:"n2451",loc:[-85.636329,41.945228]},n2452:{id:"n2452",loc:[-85.636025,41.945417]},n2453:{id:"n2453",loc:[-85.634002,41.944644]},n2454:{id:"n2454",loc:[-85.63407,41.944692]},n2455:{id:"n2455",loc:[-85.634114,41.944756]},n2456:{id:"n2456",loc:[-85.633762,41.944809]},n2457:{id:"n2457",loc:[-85.634184,41.944807]},n2458:{id:"n2458",loc:[-85.634291,41.944819]},n2459:{id:"n2459",loc:[-85.634639,41.944845]},n246:{id:"n246",loc:[-85.635788,41.941436]},n2460:{id:"n2460",loc:[-85.633822,41.944861]},n2461:{id:"n2461",loc:[-85.63411,41.944855]},n2462:{id:"n2462",loc:[-85.63435,41.944872]},n2463:{id:"n2463",loc:[-85.63441,41.944903]},n2464:{id:"n2464",loc:[-85.633883,41.944913]},n2465:{id:"n2465",loc:[-85.634164,41.944896]},n2466:{id:"n2466",loc:[-85.633487,41.944926]},n2467:{id:"n2467",loc:[-85.634736,41.944929]},n2468:{id:"n2468",loc:[-85.633944,41.944965]},n2469:{id:"n2469",loc:[-85.633555,41.944983]},n247:{id:"n247",loc:[-85.635929,41.941511]},n2470:{id:"n2470",loc:[-85.633995,41.945013]},n2471:{id:"n2471",loc:[-85.633614,41.945037]},n2472:{id:"n2472",loc:[-85.634848,41.945031]},n2473:{id:"n2473",loc:[-85.634049,41.945061]},n2474:{id:"n2474",loc:[-85.633678,41.945094]},n2475:{id:"n2475",loc:[-85.63317,41.945111]},n2476:{id:"n2476",loc:[-85.633357,41.945103]},n2477:{id:"n2477",loc:[-85.633728,41.945136]},n2478:{id:"n2478",loc:[-85.634146,41.945148]},n2479:{id:"n2479",loc:[-85.633416,41.945157]},n248:{id:"n248",loc:[-85.635929,41.941317]},n2480:{id:"n2480",loc:[-85.634625,41.945172]},n2481:{id:"n2481",loc:[-85.633239,41.945174]},n2482:{id:"n2482",loc:[-85.63469,41.945185]},n2483:{id:"n2483",loc:[-85.634661,41.945203]},n2484:{id:"n2484",loc:[-85.63348,41.945214]},n2485:{id:"n2485",loc:[-85.633578,41.945221]},n2486:{id:"n2486",loc:[-85.634742,41.945231]},n2487:{id:"n2487",loc:[-85.634251,41.94525]},n2488:{id:"n2488",loc:[-85.633524,41.945254]},n2489:{id:"n2489",loc:[-85.63468,41.945271]},n249:{id:"n249",loc:[-85.636414,41.941316]},n2490:{id:"n2490",loc:[-85.633885,41.945272]},n2491:{id:"n2491",loc:[-85.634795,41.945288]},n2492:{id:"n2492",loc:[-85.634742,41.94532]},n2493:{id:"n2493",loc:[-85.633946,41.945327]},n2494:{id:"n2494",loc:[-85.634844,41.945331]},n2495:{id:"n2495",loc:[-85.63435,41.945349]},n2496:{id:"n2496",loc:[-85.633733,41.945357]},n2497:{id:"n2497",loc:[-85.633987,41.945375]},n2498:{id:"n2498",loc:[-85.634911,41.945419]},n2499:{id:"n2499",loc:[-85.634049,41.945431]},n25:{id:"n25",loc:[-85.634333,41.942809]},n250:{id:"n250",loc:[-85.636414,41.941511]},n2500:{id:"n2500",loc:[-85.633705,41.945461]},n2501:{id:"n2501",loc:[-85.633642,41.945408]},n2502:{id:"n2502",loc:[-85.634493,41.945475]},n2503:{id:"n2503",loc:[-85.634106,41.945484]},n2504:{id:"n2504",loc:[-85.635008,41.945505]},n2505:{id:"n2505",loc:[-85.633757,41.945506]},n2506:{id:"n2506",loc:[-85.634542,41.945519]},n2507:{id:"n2507",loc:[-85.634162,41.945536]},n2508:{id:"n2508",loc:[-85.633843,41.945547]},n2509:{id:"n2509",loc:[-85.634919,41.94556]},n251:{id:"n251",loc:[-85.636819,41.941617]},n2510:{id:"n2510",loc:[-85.633818,41.945561]},n2511:{id:"n2511",loc:[-85.634638,41.94559]},n2512:{id:"n2512",loc:[-85.633901,41.945598]},n2513:{id:"n2513",loc:[-85.634257,41.945626]},n2514:{id:"n2514",loc:[-85.633967,41.945652]},n2515:{id:"n2515",loc:[-85.634735,41.945676]},n2516:{id:"n2516",loc:[-85.635057,41.945683]},n2517:{id:"n2517",loc:[-85.635296,41.945703]},n2518:{id:"n2518",loc:[-85.635112,41.945703]},n2519:{id:"n2519",loc:[-85.634782,41.945729]},n252:{id:"n252",loc:[-85.636718,41.941619]},n2520:{id:"n2520",loc:[-85.634052,41.945747]},n2521:{id:"n2521",loc:[-85.635296,41.945757]},n2522:{id:"n2522",loc:[-85.635314,41.945757]},n2523:{id:"n2523",loc:[-85.635112,41.945761]},n2524:{id:"n2524",loc:[-85.63484,41.945778]},n2525:{id:"n2525",loc:[-85.635314,41.945938]},n2526:{id:"n2526",loc:[-85.63484,41.945922]},n2527:{id:"n2527",loc:[-85.635461,41.944879]},n2528:{id:"n2528",loc:[-85.636024,41.945384]},n2529:{id:"n2529",loc:[-85.636145,41.945312]},n253:{id:"n253",loc:[-85.636716,41.941509]},n2530:{id:"n2530",loc:[-85.6356,41.944797]},n2531:{id:"n2531",loc:[-85.635135,41.944354]},n2532:{id:"n2532",loc:[-85.632988,41.945369]},n2533:{id:"n2533",loc:[-85.633376,41.94563]},n2534:{id:"n2534",loc:[-85.633539,41.945534]},n2535:{id:"n2535",loc:[-85.633238,41.945248]},n2536:{id:"n2536",loc:[-85.633166,41.945216]},n2537:{id:"n2537",loc:[-85.633114,41.945188]},n2538:{id:"n2538",loc:[-85.633078,41.945127]},n2539:{id:"n2539",loc:[-85.633066,41.94508]},n254:{id:"n254",loc:[-85.636732,41.941509]},n2540:{id:"n2540",loc:[-85.633222,41.945358]},n2541:{id:"n2541",loc:[-85.633425,41.945541]},n2542:{id:"n2542",loc:[-85.63299,41.9455]},n2543:{id:"n2543",loc:[-85.634374,41.944327]},n2544:{id:"n2544",loc:[-85.633648,41.943697]},n2545:{id:"n2545",loc:[-85.633533,41.943764]},n2546:{id:"n2546",loc:[-85.634239,41.944417]},n2547:{id:"n2547",loc:[-85.634122,41.944395]},n2548:{id:"n2548",loc:[-85.634235,41.944326]},n2549:{id:"n2549",loc:[-85.633613,41.943787]},n255:{id:"n255",loc:[-85.636731,41.941461]},n2550:{id:"n2550",loc:[-85.633915,41.943613]},n2551:{id:"n2551",loc:[-85.634015,41.943555]},n2552:{id:"n2552",loc:[-85.63433,41.943839]},n2553:{id:"n2553",loc:[-85.634236,41.943894]},n2554:{id:"n2554",loc:[-85.635413,41.946052]},n2555:{id:"n2555",loc:[-85.635405,41.94569]},n2556:{id:"n2556",loc:[-85.635684,41.945925]},n2557:{id:"n2557",loc:[-85.635614,41.945742]},n2558:{id:"n2558",loc:[-85.635401,41.945745]},n2559:{id:"n2559",loc:[-85.635406,41.945928]},n256:{id:"n256",loc:[-85.636799,41.941461]},n2560:{id:"n2560",loc:[-85.633478,41.943663]},n2561:{id:"n2561",loc:[-85.633291,41.943526]},n2562:{id:"n2562",loc:[-85.633094,41.943541]},n2563:{id:"n2563",loc:[-85.633302,41.943492]},n2564:{id:"n2564",loc:[-85.633047,41.943623]},n2565:{id:"n2565",loc:[-85.633275,41.943562]},n2566:{id:"n2566",loc:[-85.633351,41.943518]},n2567:{id:"n2567",loc:[-85.633224,41.9434]},n2568:{id:"n2568",loc:[-85.633235,41.943369]},n2569:{id:"n2569",loc:[-85.635179,41.943911]},n257:{id:"n257",loc:[-85.6368,41.9415]},n2570:{id:"n2570",loc:[-85.635146,41.943918]},n2571:{id:"n2571",loc:[-85.634888,41.943905]},n2572:{id:"n2572",loc:[-85.634832,41.943911]},n2573:{id:"n2573",loc:[-85.634638,41.944007]},n2574:{id:"n2574",loc:[-85.634568,41.94405]},n2575:{id:"n2575",loc:[-85.635994,41.94501]},n2576:{id:"n2576",loc:[-85.636388,41.944608]},n2577:{id:"n2577",loc:[-85.636215,41.944787]},n2578:{id:"n2578",loc:[-85.637948,41.944587]},n2579:{id:"n2579",loc:[-85.637849,41.944567]},n258:{id:"n258",loc:[-85.636814,41.9415]},n2580:{id:"n2580",loc:[-85.637895,41.944455]},n2581:{id:"n2581",loc:[-85.637996,41.944477]},n2582:{id:"n2582",loc:[-85.635525,41.94337]},n2583:{id:"n2583",loc:[-85.637847,41.943923]},n2584:{id:"n2584",loc:[-85.637891,41.944124]},n2585:{id:"n2585",loc:[-85.638167,41.944229]},n2586:{id:"n2586",loc:[-85.638236,41.944097]},n2587:{id:"n2587",loc:[-85.638207,41.944025]},n2588:{id:"n2588",loc:[-85.638141,41.943997]},n2589:{id:"n2589",loc:[-85.638057,41.944015]},n259:{id:"n259",loc:[-85.636815,41.941538]},n2590:{id:"n2590",loc:[-85.637902,41.944231]},n2591:{id:"n2591",loc:[-85.638134,41.944307]},n2592:{id:"n2592",loc:[-85.638242,41.944294]},n2593:{id:"n2593",loc:[-85.638274,41.944222]},n2594:{id:"n2594",loc:[-85.638236,41.944174]},n2595:{id:"n2595",loc:[-85.638207,41.944157]},n2596:{id:"n2596",loc:[-85.637818,41.943984]},n2597:{id:"n2597",loc:[-85.634996,41.944439]},n2598:{id:"n2598",loc:[-85.633946,41.945804]},n2599:{id:"n2599",loc:[-85.634102,41.945864]},n26:{id:"n26",loc:[-85.634346,41.942744]},n260:{id:"n260",loc:[-85.636827,41.941538]},n2600:{id:"n2600",loc:[-85.633819,41.945756]},n2601:{id:"n2601",loc:[-85.634025,41.945975]},n2602:{id:"n2602",loc:[-85.633742,41.945867]},n2603:{id:"n2603",loc:[-85.63373,41.946004]},n2604:{id:"n2604",loc:[-85.633947,41.946081]},n2605:{id:"n2605",loc:[-85.633872,41.945917]},n2606:{id:"n2606",loc:[-85.633825,41.945985]},n2607:{id:"n2607",loc:[-85.633762,41.94596]},n2608:{id:"n2608",loc:[-85.634224,41.946037]},n2609:{id:"n2609",loc:[-85.634357,41.945851]},n261:{id:"n261",loc:[-85.636828,41.941584]},n2610:{id:"n2610",loc:[-85.634398,41.945813]},n2611:{id:"n2611",loc:[-85.634461,41.945812]},n2612:{id:"n2612",loc:[-85.634501,41.945852]},n2613:{id:"n2613",loc:[-85.634503,41.94597]},n2614:{id:"n2614",loc:[-85.634462,41.945971]},n2615:{id:"n2615",loc:[-85.634465,41.946036]},n2616:{id:"n2616",loc:[-85.634235,41.946072]},n2617:{id:"n2617",loc:[-85.634447,41.946036]},n2618:{id:"n2618",loc:[-85.634448,41.946052]},n2619:{id:"n2619",loc:[-85.634494,41.946051]},n262:{id:"n262",loc:[-85.636819,41.941585]},n2620:{id:"n2620",loc:[-85.634497,41.946144]},n2621:{id:"n2621",loc:[-85.634453,41.946144]},n2622:{id:"n2622",loc:[-85.634454,41.94616]},n2623:{id:"n2623",loc:[-85.634393,41.946161]},n2624:{id:"n2624",loc:[-85.634394,41.94618]},n2625:{id:"n2625",loc:[-85.634345,41.94618]},n2626:{id:"n2626",loc:[-85.634344,41.946162]},n2627:{id:"n2627",loc:[-85.63427,41.946163]},n2628:{id:"n2628",loc:[-85.634266,41.946071]},n2629:{id:"n2629",loc:[-85.634148,41.946163]},n263:{id:"n263",loc:[-85.636854,41.941714]},n2630:{id:"n2630",loc:[-85.634213,41.946072]},n2631:{id:"n2631",loc:[-85.633293,41.946309]},n2632:{id:"n2632",loc:[-85.633122,41.946239]},n2633:{id:"n2633",loc:[-85.633295,41.946005]},n2634:{id:"n2634",loc:[-85.633395,41.946047]},n2635:{id:"n2635",loc:[-85.633404,41.946035]},n2636:{id:"n2636",loc:[-85.633459,41.946057]},n2637:{id:"n2637",loc:[-85.633387,41.946154]},n2638:{id:"n2638",loc:[-85.633403,41.946161]},n2639:{id:"n2639",loc:[-85.634176,41.946415]},n264:{id:"n264",loc:[-85.636855,41.941774]},n2640:{id:"n2640",loc:[-85.634179,41.946339]},n2641:{id:"n2641",loc:[-85.634455,41.946345]},n2642:{id:"n2642",loc:[-85.634452,41.946422]},n2643:{id:"n2643",loc:[-85.63437,41.946421]},n2644:{id:"n2644",loc:[-85.634367,41.946497]},n2645:{id:"n2645",loc:[-85.634289,41.946495]},n2646:{id:"n2646",loc:[-85.634291,41.946448]},n2647:{id:"n2647",loc:[-85.634269,41.946448]},n2648:{id:"n2648",loc:[-85.63427,41.946417]},n2649:{id:"n2649",loc:[-85.63484,41.946328]},n265:{id:"n265",loc:[-85.636822,41.941774]},n2650:{id:"n2650",loc:[-85.634839,41.946187]},n2651:{id:"n2651",loc:[-85.635148,41.946186]},n2652:{id:"n2652",loc:[-85.635148,41.946216]},n2653:{id:"n2653",loc:[-85.63521,41.946216]},n2654:{id:"n2654",loc:[-85.63521,41.946348]},n2655:{id:"n2655",loc:[-85.635154,41.946348]},n2656:{id:"n2656",loc:[-85.635153,41.946327]},n2657:{id:"n2657",loc:[-85.634037,41.946957]},n2658:{id:"n2658",loc:[-85.634253,41.946953]},n2659:{id:"n2659",loc:[-85.63481,41.946543]},n266:{id:"n266",loc:[-85.636822,41.941778]},n2660:{id:"n2660",loc:[-85.634809,41.946459]},n2661:{id:"n2661",loc:[-85.635154,41.946458]},n2662:{id:"n2662",loc:[-85.635155,41.946554]},n2663:{id:"n2663",loc:[-85.635022,41.946547]},n2664:{id:"n2664",loc:[-85.635022,41.946573]},n2665:{id:"n2665",loc:[-85.634909,41.946574]},n2666:{id:"n2666",loc:[-85.634909,41.946561]},n2667:{id:"n2667",loc:[-85.634896,41.947159]},n2668:{id:"n2668",loc:[-85.634894,41.947032]},n2669:{id:"n2669",loc:[-85.635024,41.947031]},n267:{id:"n267",loc:[-85.636756,41.941779]},n2670:{id:"n2670",loc:[-85.635026,41.947158]},n2671:{id:"n2671",loc:[-85.635233,41.947105]},n2672:{id:"n2672",loc:[-85.635236,41.946991]},n2673:{id:"n2673",loc:[-85.635369,41.946993]},n2674:{id:"n2674",loc:[-85.635366,41.947107]},n2675:{id:"n2675",loc:[-85.634824,41.946929]},n2676:{id:"n2676",loc:[-85.634825,41.946818]},n2677:{id:"n2677",loc:[-85.63512,41.946819]},n2678:{id:"n2678",loc:[-85.635119,41.94693]},n2679:{id:"n2679",loc:[-85.634796,41.946806]},n268:{id:"n268",loc:[-85.636756,41.941774]},n2680:{id:"n2680",loc:[-85.634792,41.946604]},n2681:{id:"n2681",loc:[-85.634948,41.946602]},n2682:{id:"n2682",loc:[-85.634949,41.946645]},n2683:{id:"n2683",loc:[-85.634975,41.946644]},n2684:{id:"n2684",loc:[-85.634974,41.946599]},n2685:{id:"n2685",loc:[-85.635117,41.946598]},n2686:{id:"n2686",loc:[-85.635122,41.946801]},n2687:{id:"n2687",loc:[-85.634981,41.946803]},n2688:{id:"n2688",loc:[-85.634979,41.946752]},n2689:{id:"n2689",loc:[-85.634952,41.946752]},n269:{id:"n269",loc:[-85.636721,41.941774]},n2690:{id:"n2690",loc:[-85.634953,41.946804]},n2691:{id:"n2691",loc:[-85.634649,41.946841]},n2692:{id:"n2692",loc:[-85.634331,41.94684]},n2693:{id:"n2693",loc:[-85.634183,41.946809]},n2694:{id:"n2694",loc:[-85.633699,41.946607]},n2695:{id:"n2695",loc:[-85.634487,41.946664]},n2696:{id:"n2696",loc:[-85.634486,41.946598]},n2697:{id:"n2697",loc:[-85.63423,41.946599]},n2698:{id:"n2698",loc:[-85.634231,41.946662]},n2699:{id:"n2699",loc:[-85.634284,41.946662]},n27:{id:"n27",loc:[-85.634136,41.943183]},n270:{id:"n270",loc:[-85.63672,41.941714]},n2700:{id:"n2700",loc:[-85.634284,41.946679]},n2701:{id:"n2701",loc:[-85.634365,41.946679]},n2702:{id:"n2702",loc:[-85.634365,41.946664]},n2703:{id:"n2703",loc:[-85.635443,41.947015]},n2704:{id:"n2704",loc:[-85.635442,41.946801]},n2705:{id:"n2705",loc:[-85.63603,41.9468]},n2706:{id:"n2706",loc:[-85.636028,41.947016]},n2707:{id:"n2707",loc:[-85.635457,41.946582]},n2708:{id:"n2708",loc:[-85.635455,41.946211]},n2709:{id:"n2709",loc:[-85.635636,41.946579]},n271:{id:"n271",loc:[-85.636767,41.941713]},n2710:{id:"n2710",loc:[-85.635716,41.9468]},n2711:{id:"n2711",loc:[-85.635969,41.9468]},n2712:{id:"n2712",loc:[-85.635973,41.946295]},n2713:{id:"n2713",loc:[-85.636019,41.946484]},n2714:{id:"n2714",loc:[-85.636022,41.946388]},n2715:{id:"n2715",loc:[-85.635961,41.946493]},n2716:{id:"n2716",loc:[-85.635713,41.94621]},n2717:{id:"n2717",loc:[-85.635416,41.946142]},n2718:{id:"n2718",loc:[-85.635759,41.946203]},n2719:{id:"n2719",loc:[-85.636153,41.946747]},n272:{id:"n272",loc:[-85.636767,41.941706]},n2720:{id:"n2720",loc:[-85.635417,41.946915]},n2721:{id:"n2721",loc:[-85.636154,41.946915]},n2722:{id:"n2722",loc:[-85.635866,41.946473]},n2723:{id:"n2723",loc:[-85.635717,41.946633]},n2724:{id:"n2724",loc:[-85.635556,41.946166]},n2725:{id:"n2725",loc:[-85.63556,41.946556]},n2726:{id:"n2726",loc:[-85.635731,41.946594]},n2727:{id:"n2727",loc:[-85.635866,41.946595]},n2728:{id:"n2728",loc:[-85.635456,41.947028]},n2729:{id:"n2729",loc:[-85.635796,41.947023]},n273:{id:"n273",loc:[-85.636779,41.941698]},n2730:{id:"n2730",loc:[-85.635798,41.947091]},n2731:{id:"n2731",loc:[-85.63573,41.947092]},n2732:{id:"n2732",loc:[-85.635733,41.947233]},n2733:{id:"n2733",loc:[-85.636283,41.946863]},n2734:{id:"n2734",loc:[-85.63628,41.946706]},n2735:{id:"n2735",loc:[-85.636341,41.946705]},n2736:{id:"n2736",loc:[-85.636273,41.946584]},n2737:{id:"n2737",loc:[-85.636396,41.946545]},n2738:{id:"n2738",loc:[-85.636474,41.946684]},n2739:{id:"n2739",loc:[-85.636511,41.946861]},n274:{id:"n274",loc:[-85.636798,41.941697]},n2740:{id:"n2740",loc:[-85.633713,41.947184]},n2741:{id:"n2741",loc:[-85.633651,41.94716]},n2742:{id:"n2742",loc:[-85.633704,41.947085]},n2743:{id:"n2743",loc:[-85.6336,41.947044]},n2744:{id:"n2744",loc:[-85.633506,41.947177]},n2745:{id:"n2745",loc:[-85.629586,41.952469]},n2746:{id:"n2746",loc:[-85.634723,41.953681]},n2747:{id:"n2747",loc:[-85.63478,41.959007]},n2748:{id:"n2748",loc:[-85.632793,41.94405],tags:{highway:"traffic_signals",traffic_signals:"signal","traffic_signals:direction":"both"}},n2749:{id:"n2749",loc:[-85.634648,41.947325]},n275:{id:"n275",loc:[-85.63681,41.941705]},n2750:{id:"n2750",loc:[-85.625078,41.952097]},n2751:{id:"n2751",loc:[-85.633195,41.94734]},n2752:{id:"n2752",loc:[-85.626447,41.957168]},n2753:{id:"n2753",loc:[-85.632023,41.949012]},n2754:{id:"n2754",loc:[-85.630835,41.950656]},n2755:{id:"n2755",loc:[-85.634655,41.948612]},n2756:{id:"n2756",loc:[-85.636182,41.948605]},n2757:{id:"n2757",loc:[-85.634729,41.954667]},n2758:{id:"n2758",loc:[-85.634686,41.951159]},n2759:{id:"n2759",loc:[-85.636206,41.951146]},n276:{id:"n276",loc:[-85.63681,41.941714]},n2760:{id:"n2760",loc:[-85.634668,41.949891]},n2761:{id:"n2761",loc:[-85.634701,41.952422]},n2762:{id:"n2762",loc:[-85.634747,41.955907]},n2763:{id:"n2763",loc:[-85.627975,41.954695]},n2764:{id:"n2764",loc:[-85.626832,41.954698]},n2765:{id:"n2765",loc:[-85.632278,41.948624]},n2766:{id:"n2766",loc:[-85.628639,41.953725]},n2767:{id:"n2767",loc:[-85.636233,41.95241]},n2768:{id:"n2768",loc:[-85.631385,41.949913]},n2769:{id:"n2769",loc:[-85.630486,41.951194]},n277:{id:"n277",loc:[-85.636861,41.942041]},n2770:{id:"n2770",loc:[-85.624937,41.952088]},n2771:{id:"n2771",loc:[-85.624945,41.952022]},n2772:{id:"n2772",loc:[-85.636162,41.94731]},n2773:{id:"n2773",loc:[-85.636188,41.949881]},n2774:{id:"n2774",loc:[-85.631422,41.948294]},n2775:{id:"n2775",loc:[-85.632844,41.945547]},n2776:{id:"n2776",loc:[-85.632484,41.945344]},n2777:{id:"n2777",loc:[-85.631775,41.944636]},n2778:{id:"n2778",loc:[-85.632656,41.945471]},n2779:{id:"n2779",loc:[-85.631959,41.944827]},n278:{id:"n278",loc:[-85.636862,41.942099]},n2780:{id:"n2780",loc:[-85.631679,41.94438]},n2781:{id:"n2781",loc:[-85.625129,41.959272]},n2782:{id:"n2782",loc:[-85.632446,41.944861]},n2783:{id:"n2783",loc:[-85.632804,41.945477]},n2784:{id:"n2784",loc:[-85.632255,41.944962]},n2785:{id:"n2785",loc:[-85.632736,41.944757]},n2786:{id:"n2786",loc:[-85.632543,41.94486]},n2787:{id:"n2787",loc:[-85.632889,41.945561]},n2788:{id:"n2788",loc:[-85.632091,41.944949]},n2789:{id:"n2789",loc:[-85.632537,41.944713]},n279:{id:"n279",loc:[-85.636807,41.942099]},n2790:{id:"n2790",loc:[-85.632279,41.94485]},n2791:{id:"n2791",loc:[-85.632749,41.943247]},n2792:{id:"n2792",loc:[-85.632824,41.943152]},n2793:{id:"n2793",loc:[-85.632929,41.94317]},n2794:{id:"n2794",loc:[-85.632897,41.943078]},n2795:{id:"n2795",loc:[-85.632626,41.943231]},n2796:{id:"n2796",loc:[-85.634048,41.947257]},n2797:{id:"n2797",loc:[-85.634264,41.947252]},n2798:{id:"n2798",loc:[-85.635418,41.947317]},n2799:{id:"n2799",loc:[-85.635461,41.947237]},n28:{id:"n28",loc:[-85.63821,41.944308]},n280:{id:"n280",loc:[-85.636807,41.942126]},n2800:{id:"n2800",loc:[-85.632868,41.946229]},n2801:{id:"n2801",loc:[-85.633673,41.947242]},n2802:{id:"n2802",loc:[-85.623604,41.945881],tags:{amenity:"school",name:"Barrows School"}},n2803:{id:"n2803",loc:[-85.627401,41.943496]},n2804:{id:"n2804",loc:[-85.627403,41.943625]},n2805:{id:"n2805",loc:[-85.626409,41.943215]},n2806:{id:"n2806",loc:[-85.624884,41.943508]},n2807:{id:"n2807",loc:[-85.625191,41.943509]},n2808:{id:"n2808",loc:[-85.624882,41.94382]},n2809:{id:"n2809",loc:[-85.624893,41.945618]},n281:{id:"n281",loc:[-85.636726,41.942126]},n2810:{id:"n2810",loc:[-85.624912,41.946524]},n2811:{id:"n2811",loc:[-85.622721,41.946535]},n2812:{id:"n2812",loc:[-85.627399,41.94469]},n2813:{id:"n2813",loc:[-85.622716,41.945622]},n2814:{id:"n2814",loc:[-85.624886,41.944724]},n2815:{id:"n2815",loc:[-85.622674,41.944737]},n2816:{id:"n2816",loc:[-85.625092,41.945063]},n2817:{id:"n2817",loc:[-85.625233,41.945064]},n2818:{id:"n2818",loc:[-85.625229,41.944871]},n2819:{id:"n2819",loc:[-85.625066,41.944871]},n282:{id:"n282",loc:[-85.636726,41.942098]},n2820:{id:"n2820",loc:[-85.625024,41.944901]},n2821:{id:"n2821",loc:[-85.625025,41.944924]},n2822:{id:"n2822",loc:[-85.625087,41.944926]},n2823:{id:"n2823",loc:[-85.625349,41.944506]},n2824:{id:"n2824",loc:[-85.625347,41.944388]},n2825:{id:"n2825",loc:[-85.625152,41.94439]},n2826:{id:"n2826",loc:[-85.625152,41.944431]},n2827:{id:"n2827",loc:[-85.625134,41.944431]},n2828:{id:"n2828",loc:[-85.625136,41.944508]},n2829:{id:"n2829",loc:[-85.623236,41.946341]},n283:{id:"n283",loc:[-85.636708,41.942098]},n2830:{id:"n2830",loc:[-85.623241,41.946067]},n2831:{id:"n2831",loc:[-85.623207,41.946067]},n2832:{id:"n2832",loc:[-85.623212,41.945827]},n2833:{id:"n2833",loc:[-85.622981,41.945825]},n2834:{id:"n2834",loc:[-85.622976,41.946063]},n2835:{id:"n2835",loc:[-85.623006,41.946063]},n2836:{id:"n2836",loc:[-85.623002,41.946256]},n2837:{id:"n2837",loc:[-85.623075,41.946256]},n2838:{id:"n2838",loc:[-85.623074,41.946339]},n2839:{id:"n2839",loc:[-85.624574,41.951755]},n284:{id:"n284",loc:[-85.636708,41.942041]},n2840:{id:"n2840",loc:[-85.62498,41.951844]},n2841:{id:"n2841",loc:[-85.625086,41.95188]},n2842:{id:"n2842",loc:[-85.625135,41.951922]},n2843:{id:"n2843",loc:[-85.615273,41.945637]},n2844:{id:"n2844",loc:[-85.620172,41.945627]},n2845:{id:"n2845",loc:[-85.625167,41.951985]},n2846:{id:"n2846",loc:[-85.622741,41.947437]},n2847:{id:"n2847",loc:[-85.624907,41.947428]},n2848:{id:"n2848",loc:[-85.627046,41.940995]},n2849:{id:"n2849",loc:[-85.627295,41.941304]},n285:{id:"n285",loc:[-85.635618,41.941852]},n2850:{id:"n2850",loc:[-85.627352,41.94148]},n2851:{id:"n2851",loc:[-85.62737,41.942261]},n2852:{id:"n2852",loc:[-85.6264,41.942263]},n2853:{id:"n2853",loc:[-85.622769,41.949228]},n2854:{id:"n2854",loc:[-85.624937,41.949218]},n2855:{id:"n2855",loc:[-85.630001,41.944664]},n2856:{id:"n2856",loc:[-85.624873,41.942022]},n2857:{id:"n2857",loc:[-85.622761,41.948333]},n2858:{id:"n2858",loc:[-85.624924,41.948334]},n2859:{id:"n2859",loc:[-85.620051,41.94383]},n286:{id:"n286",loc:[-85.635621,41.94202]},n2860:{id:"n2860",loc:[-85.627629,41.946498]},n2861:{id:"n2861",loc:[-85.622757,41.950111]},n2862:{id:"n2862",loc:[-85.623685,41.954624]},n2863:{id:"n2863",loc:[-85.621459,41.944756]},n2864:{id:"n2864",loc:[-85.628637,41.944676]},n2865:{id:"n2865",loc:[-85.630125,41.944654]},n2866:{id:"n2866",loc:[-85.625196,41.952097]},n2867:{id:"n2867",loc:[-85.630257,41.944637]},n2868:{id:"n2868",loc:[-85.631247,41.944459]},n2869:{id:"n2869",loc:[-85.624867,41.94159]},n287:{id:"n287",loc:[-85.63524,41.942023]},n2870:{id:"n2870",loc:[-85.624958,41.950343]},n2871:{id:"n2871",loc:[-85.624948,41.950484]},n2872:{id:"n2872",loc:[-85.624813,41.950983]},n2873:{id:"n2873",loc:[-85.624723,41.951789]},n2874:{id:"n2874",loc:[-85.624262,41.9512]},n2875:{id:"n2875",loc:[-85.62414,41.951201]},n2876:{id:"n2876",loc:[-85.624139,41.95112]},n2877:{id:"n2877",loc:[-85.628481,41.945611]},n2878:{id:"n2878",loc:[-85.620072,41.946538]},n2879:{id:"n2879",loc:[-85.622763,41.95099]},n288:{id:"n288",loc:[-85.635237,41.941855]},n2880:{id:"n2880",loc:[-85.62814,41.946963]},n2881:{id:"n2881",loc:[-85.628245,41.947031]},n2882:{id:"n2882",loc:[-85.628331,41.947066]},n2883:{id:"n2883",loc:[-85.629722,41.944444],tags:{leisure:"park",name:"Scouter Park"}},n2884:{id:"n2884",loc:[-85.629977,41.943907]},n2885:{id:"n2885",loc:[-85.629947,41.943775]},n2886:{id:"n2886",loc:[-85.629899,41.943625]},n2887:{id:"n2887",loc:[-85.632286,41.944257]},n2888:{id:"n2888",loc:[-85.632523,41.944179]},n2889:{id:"n2889",loc:[-85.632141,41.944293]},n289:{id:"n289",loc:[-85.635568,41.940475]},n2890:{id:"n2890",loc:[-85.631571,41.9444]},n2891:{id:"n2891",loc:[-85.643236,41.941895]},n2892:{id:"n2892",loc:[-85.62865,41.945353]},n2893:{id:"n2893",loc:[-85.628594,41.945481]},n2894:{id:"n2894",loc:[-85.628581,41.947169]},n2895:{id:"n2895",loc:[-85.631843,41.943793]},n2896:{id:"n2896",loc:[-85.632299,41.943472]},n2897:{id:"n2897",loc:[-85.631519,41.944881]},n2898:{id:"n2898",loc:[-85.628429,41.947219]},n2899:{id:"n2899",loc:[-85.63145,41.945162]},n29:{id:"n29",loc:[-85.637963,41.944263]},n290:{id:"n290",loc:[-85.634584,41.940477]},n2900:{id:"n2900",loc:[-85.630939,41.945519]},n2901:{id:"n2901",loc:[-85.62903,41.945719]},n2902:{id:"n2902",loc:[-85.630521,41.945559]},n2903:{id:"n2903",loc:[-85.629294,41.945585]},n2904:{id:"n2904",loc:[-85.629845,41.945543]},n2905:{id:"n2905",loc:[-85.631497,41.944625]},n2906:{id:"n2906",loc:[-85.630281,41.945553]},n2907:{id:"n2907",loc:[-85.628553,41.946973]},n2908:{id:"n2908",loc:[-85.631383,41.945338]},n2909:{id:"n2909",loc:[-85.628843,41.946103]},n291:{id:"n291",loc:[-85.634583,41.940203]},n2910:{id:"n2910",loc:[-85.631193,41.945473]},n2911:{id:"n2911",loc:[-85.628897,41.945944]},n2912:{id:"n2912",loc:[-85.628789,41.946454]},n2913:{id:"n2913",loc:[-85.632548,41.944563]},n2914:{id:"n2914",loc:[-85.627527,41.944555]},n2915:{id:"n2915",loc:[-85.62752,41.943726]},n2916:{id:"n2916",loc:[-85.627894,41.943723]},n2917:{id:"n2917",loc:[-85.627897,41.943919]},n2918:{id:"n2918",loc:[-85.627991,41.943934]},n2919:{id:"n2919",loc:[-85.628082,41.943966]},n292:{id:"n292",loc:[-85.635567,41.940201]},n2920:{id:"n2920",loc:[-85.628177,41.944015]},n2921:{id:"n2921",loc:[-85.628193,41.944048]},n2922:{id:"n2922",loc:[-85.628167,41.944054]},n2923:{id:"n2923",loc:[-85.628193,41.944094]},n2924:{id:"n2924",loc:[-85.628213,41.944144]},n2925:{id:"n2925",loc:[-85.628214,41.944199]},n2926:{id:"n2926",loc:[-85.62833,41.944196]},n2927:{id:"n2927",loc:[-85.628328,41.944262]},n2928:{id:"n2928",loc:[-85.628173,41.944262]},n2929:{id:"n2929",loc:[-85.628171,41.944293]},n293:{id:"n293",loc:[-85.635816,41.942673],tags:{crossing:"marked",highway:"crossing"}},n2930:{id:"n2930",loc:[-85.628039,41.944296]},n2931:{id:"n2931",loc:[-85.62804,41.944329]},n2932:{id:"n2932",loc:[-85.627829,41.944335]},n2933:{id:"n2933",loc:[-85.627835,41.94455]},n2936:{id:"n2936",loc:[-85.632823,41.945994]},n294:{id:"n294",loc:[-85.635696,41.942712]},n2940:{id:"n2940",loc:[-85.632192,41.945973]},n2941:{id:"n2941",loc:[-85.63226,41.94587]},n2942:{id:"n2942",loc:[-85.632721,41.946036]},n2943:{id:"n2943",loc:[-85.632641,41.946142]},n2944:{id:"n2944",loc:[-85.62937,41.947467]},n2945:{id:"n2945",loc:[-85.62959,41.942936]},n2946:{id:"n2946",loc:[-85.629551,41.94284]},n2947:{id:"n2947",loc:[-85.629501,41.942704]},n2948:{id:"n2948",loc:[-85.629472,41.942578]},n2949:{id:"n2949",loc:[-85.629361,41.941801]},n295:{id:"n295",loc:[-85.635679,41.941962]},n2950:{id:"n2950",loc:[-85.629339,41.941716]},n2951:{id:"n2951",loc:[-85.629315,41.94166]},n2952:{id:"n2952",loc:[-85.629279,41.941602]},n2953:{id:"n2953",loc:[-85.629227,41.941556]},n2954:{id:"n2954",loc:[-85.624261,41.95112]},n2955:{id:"n2955",loc:[-85.629153,41.941524]},n2956:{id:"n2956",loc:[-85.626904,41.941098]},n2957:{id:"n2957",loc:[-85.624588,41.951294]},n2958:{id:"n2958",loc:[-85.631844,41.942945]},n2959:{id:"n2959",loc:[-85.625854,41.949222]},n296:{id:"n296",loc:[-85.635672,41.941337]},n2960:{id:"n2960",loc:[-85.625146,41.955238]},n2961:{id:"n2961",loc:[-85.626745,41.948296]},n2962:{id:"n2962",loc:[-85.625721,41.95524]},n2963:{id:"n2963",loc:[-85.624706,41.952317]},n2964:{id:"n2964",loc:[-85.62609,41.956147]},n2965:{id:"n2965",loc:[-85.624401,41.954928]},n2966:{id:"n2966",loc:[-85.626558,41.955367]},n2967:{id:"n2967",loc:[-85.62468,41.955096]},n2968:{id:"n2968",loc:[-85.624159,41.953929]},n2969:{id:"n2969",loc:[-85.62506,41.951113]},n297:{id:"n297",loc:[-85.635658,41.941284]},n2970:{id:"n2970",loc:[-85.624942,41.951591]},n2971:{id:"n2971",loc:[-85.627399,41.947546]},n2972:{id:"n2972",loc:[-85.627695,41.947404]},n2973:{id:"n2973",loc:[-85.625925,41.94896]},n2974:{id:"n2974",loc:[-85.625725,41.950211]},n2975:{id:"n2975",loc:[-85.627008,41.947963]},n2976:{id:"n2976",loc:[-85.624373,41.953458]},n2977:{id:"n2977",loc:[-85.624137,41.954392]},n2978:{id:"n2978",loc:[-85.628257,41.947307]},n2979:{id:"n2979",loc:[-85.625281,41.95066]},n298:{id:"n298",loc:[-85.635602,41.941166]},n2980:{id:"n2980",loc:[-85.625865,41.949804]},n2981:{id:"n2981",loc:[-85.626508,41.955932]},n2982:{id:"n2982",loc:[-85.626333,41.955216]},n2983:{id:"n2983",loc:[-85.626637,41.955676]},n2984:{id:"n2984",loc:[-85.624223,41.954599]},n2985:{id:"n2985",loc:[-85.626219,41.948671]},n2986:{id:"n2986",loc:[-85.624556,41.953043]},n2987:{id:"n2987",loc:[-85.625598,41.956302]},n2988:{id:"n2988",loc:[-85.624571,41.952971]},n2989:{id:"n2989",loc:[-85.627141,41.940727]},n299:{id:"n299",loc:[-85.635598,41.941138]},n2990:{id:"n2990",loc:[-85.627102,41.939144]},n2991:{id:"n2991",loc:[-85.627127,41.940086]},n2992:{id:"n2992",loc:[-85.627116,41.940843]},n2993:{id:"n2993",loc:[-85.627132,41.9402]},n2994:{id:"n2994",loc:[-85.629734,41.940078]},n2995:{id:"n2995",loc:[-85.6276,41.937412]},n2996:{id:"n2996",loc:[-85.627451,41.937549]},n2997:{id:"n2997",loc:[-85.627375,41.937618]},n2998:{id:"n2998",loc:[-85.627278,41.937728]},n2999:{id:"n2999",loc:[-85.627199,41.937842]},n3:{id:"n3",loc:[-85.627345,41.953983]},n30:{id:"n30",loc:[-85.637882,41.944205]},n300:{id:"n300",loc:[-85.635614,41.941076]},n3000:{id:"n3000",loc:[-85.627141,41.937981]},n3001:{id:"n3001",loc:[-85.627109,41.938153]},n3002:{id:"n3002",loc:[-85.627101,41.938699]},n3003:{id:"n3003",loc:[-85.628311,41.942261]},n3004:{id:"n3004",loc:[-85.628439,41.940082]},n3005:{id:"n3005",loc:[-85.619538,41.942622],tags:{leisure:"slipway"}},n3006:{id:"n3006",loc:[-85.619872,41.942618]},n3007:{id:"n3007",loc:[-85.619755,41.942612]},n3008:{id:"n3008",loc:[-85.619647,41.942628]},n3009:{id:"n3009",loc:[-85.619415,41.942626]},n301:{id:"n301",loc:[-85.635659,41.940956]},n3010:{id:"n3010",loc:[-85.619212,41.942623]},n3011:{id:"n3011",loc:[-85.631485,41.942472]},n3012:{id:"n3012",loc:[-85.630986,41.941786]},n3013:{id:"n3013",loc:[-85.631797,41.942006]},n3014:{id:"n3014",loc:[-85.630972,41.941162]},n3015:{id:"n3015",loc:[-85.631396,41.941611],tags:{railway:"level_crossing"}},n3016:{id:"n3016",loc:[-85.631878,41.941545]},n3017:{id:"n3017",loc:[-85.630461,41.94055]},n3018:{id:"n3018",loc:[-85.629751,41.939539],tags:{railway:"level_crossing"}},n3019:{id:"n3019",loc:[-85.631663,41.941513]},n302:{id:"n302",loc:[-85.635666,41.940922]},n3020:{id:"n3020",loc:[-85.631328,41.941375]},n3021:{id:"n3021",loc:[-85.632554,41.941779]},n3022:{id:"n3022",loc:[-85.63245,41.941769]},n3023:{id:"n3023",loc:[-85.632475,41.941644]},n3024:{id:"n3024",loc:[-85.632581,41.941654]},n3025:{id:"n3025",loc:[-85.631957,41.941352]},n3026:{id:"n3026",loc:[-85.632293,41.941139]},n3027:{id:"n3027",loc:[-85.632315,41.941153]},n3028:{id:"n3028",loc:[-85.632302,41.941262]},n3029:{id:"n3029",loc:[-85.63237,41.941267]},n303:{id:"n303",loc:[-85.635667,41.940877]},n3030:{id:"n3030",loc:[-85.632356,41.941538]},n3031:{id:"n3031",loc:[-85.632134,41.941678]},n3032:{id:"n3032",loc:[-85.631942,41.941687]},n3033:{id:"n3033",loc:[-85.63203,41.941694]},n3034:{id:"n3034",loc:[-85.632166,41.941555]},n3035:{id:"n3035",loc:[-85.632412,41.941416]},n3036:{id:"n3036",loc:[-85.63248,41.941342]},n3037:{id:"n3037",loc:[-85.632502,41.941259]},n3038:{id:"n3038",loc:[-85.632453,41.941161]},n3039:{id:"n3039",loc:[-85.63235,41.941103]},n304:{id:"n304",loc:[-85.635668,41.940655]},n3040:{id:"n3040",loc:[-85.632236,41.941118]},n3041:{id:"n3041",loc:[-85.631894,41.941355]},n3042:{id:"n3042",loc:[-85.631859,41.941411]},n3043:{id:"n3043",loc:[-85.632011,41.941587]},n3044:{id:"n3044",loc:[-85.632446,41.941379]},n3045:{id:"n3045",loc:[-85.632511,41.941416]},n3046:{id:"n3046",loc:[-85.632545,41.941634]},n3047:{id:"n3047",loc:[-85.632612,41.94164]},n3048:{id:"n3048",loc:[-85.632595,41.942197]},n3049:{id:"n3049",loc:[-85.632565,41.942241]},n305:{id:"n305",loc:[-85.635628,41.940617]},n3050:{id:"n3050",loc:[-85.632515,41.942256]},n3051:{id:"n3051",loc:[-85.63245,41.94223]},n3052:{id:"n3052",loc:[-85.632401,41.942174]},n3053:{id:"n3053",loc:[-85.632391,41.942115]},n3054:{id:"n3054",loc:[-85.632029,41.941859]},n3055:{id:"n3055",loc:[-85.631828,41.941639]},n3056:{id:"n3056",loc:[-85.631829,41.941508]},n3057:{id:"n3057",loc:[-85.631281,41.94312]},n3058:{id:"n3058",loc:[-85.631421,41.943065]},n3059:{id:"n3059",loc:[-85.631339,41.942949]},n306:{id:"n306",loc:[-85.635623,41.940272]},n3060:{id:"n3060",loc:[-85.631199,41.943004]},n3061:{id:"n3061",loc:[-85.631102,41.942931]},n3062:{id:"n3062",loc:[-85.631009,41.942809]},n3063:{id:"n3063",loc:[-85.631383,41.94265]},n3064:{id:"n3064",loc:[-85.631477,41.942773]},n3065:{id:"n3065",loc:[-85.630638,41.942809]},n3066:{id:"n3066",loc:[-85.630738,41.942943]},n3067:{id:"n3067",loc:[-85.630841,41.9429]},n3068:{id:"n3068",loc:[-85.630741,41.942766]},n3069:{id:"n3069",loc:[-85.63054,41.942603]},n307:{id:"n307",loc:[-85.635651,41.940183]},n3070:{id:"n3070",loc:[-85.630498,41.942619]},n3071:{id:"n3071",loc:[-85.630567,41.942718]},n3072:{id:"n3072",loc:[-85.630616,41.942698]},n3073:{id:"n3073",loc:[-85.630642,41.94273]},n3074:{id:"n3074",loc:[-85.630686,41.942714]},n3075:{id:"n3075",loc:[-85.630715,41.942754]},n3076:{id:"n3076",loc:[-85.6309,41.942681]},n3077:{id:"n3077",loc:[-85.630843,41.942605]},n3078:{id:"n3078",loc:[-85.6309,41.942581]},n3079:{id:"n3079",loc:[-85.630832,41.942487]},n308:{id:"n308",loc:[-85.63577,41.940183],tags:{crossing:"marked",highway:"crossing"}},n3080:{id:"n3080",loc:[-85.630773,41.942509]},n3081:{id:"n3081",loc:[-85.630718,41.942436]},n3082:{id:"n3082",loc:[-85.630485,41.942524]},n3083:{id:"n3083",loc:[-85.631468,41.941233]},n3084:{id:"n3084",loc:[-85.631334,41.94114]},n3085:{id:"n3085",loc:[-85.632052,41.940568]},n3086:{id:"n3086",loc:[-85.63219,41.940663]},n3087:{id:"n3087",loc:[-85.631323,41.940834]},n3088:{id:"n3088",loc:[-85.631122,41.941002]},n3089:{id:"n3089",loc:[-85.631321,41.941133]},n309:{id:"n309",loc:[-85.636939,41.942544]},n3090:{id:"n3090",loc:[-85.631521,41.940966]},n3091:{id:"n3091",loc:[-85.631103,41.940253]},n3092:{id:"n3092",loc:[-85.631226,41.940211]},n3093:{id:"n3093",loc:[-85.631597,41.940805]},n3094:{id:"n3094",loc:[-85.631474,41.940847]},n3095:{id:"n3095",loc:[-85.631811,41.940534]},n3096:{id:"n3096",loc:[-85.631588,41.94061]},n3097:{id:"n3097",loc:[-85.631438,41.940366]},n3098:{id:"n3098",loc:[-85.631661,41.94029]},n3099:{id:"n3099",loc:[-85.630621,41.940041]},n31:{id:"n31",loc:[-85.63827,41.944203]},n310:{id:"n310",loc:[-85.636323,41.942552]},n3100:{id:"n3100",loc:[-85.630436,41.939773]},n3101:{id:"n3101",loc:[-85.63059,41.939714]},n3102:{id:"n3102",loc:[-85.630775,41.939983]},n3103:{id:"n3103",loc:[-85.63047,41.940167]},n3104:{id:"n3104",loc:[-85.63013,41.939686]},n3105:{id:"n3105",loc:[-85.630302,41.939618]},n3106:{id:"n3106",loc:[-85.630641,41.9401]},n3107:{id:"n3107",loc:[-85.630966,41.940619]},n3108:{id:"n3108",loc:[-85.630874,41.940493]},n3109:{id:"n3109",loc:[-85.630933,41.940469]},n311:{id:"n311",loc:[-85.636257,41.942555]},n3110:{id:"n3110",loc:[-85.630763,41.940236]},n3111:{id:"n3111",loc:[-85.63088,41.940189]},n3112:{id:"n3112",loc:[-85.631142,41.940548]},n3113:{id:"n3113",loc:[-85.630958,41.940871]},n3114:{id:"n3114",loc:[-85.630874,41.940778]},n3115:{id:"n3115",loc:[-85.631062,41.940684]},n3116:{id:"n3116",loc:[-85.631146,41.940777]},n3117:{id:"n3117",loc:[-85.632031,41.940575]},n3118:{id:"n3118",loc:[-85.631777,41.940186]},n3119:{id:"n3119",loc:[-85.631346,41.940179]},n312:{id:"n312",loc:[-85.636208,41.942561]},n3120:{id:"n3120",loc:[-85.631342,41.94012]},n3121:{id:"n3121",loc:[-85.631831,41.940118]},n3122:{id:"n3122",loc:[-85.632115,41.940543]},n3123:{id:"n3123",loc:[-85.631031,41.941683]},n3124:{id:"n3124",loc:[-85.630981,41.941608]},n3125:{id:"n3125",loc:[-85.631209,41.941516]},n3126:{id:"n3126",loc:[-85.631264,41.941586]},n3127:{id:"n3127",loc:[-85.630938,41.94155]},n3128:{id:"n3128",loc:[-85.631156,41.941462]},n3129:{id:"n3129",loc:[-85.631197,41.94152]},n313:{id:"n313",loc:[-85.636159,41.942573]},n3130:{id:"n3130",loc:[-85.630895,41.941485]},n3131:{id:"n3131",loc:[-85.630824,41.941389]},n3132:{id:"n3132",loc:[-85.630986,41.941323]},n3133:{id:"n3133",loc:[-85.631057,41.941419]},n3134:{id:"n3134",loc:[-85.630777,41.941328]},n3135:{id:"n3135",loc:[-85.630907,41.941274]},n3136:{id:"n3136",loc:[-85.630953,41.941335]},n3137:{id:"n3137",loc:[-85.630797,41.941247]},n3138:{id:"n3138",loc:[-85.630701,41.94117]},n3139:{id:"n3139",loc:[-85.630829,41.941113]},n314:{id:"n314",loc:[-85.635743,41.942881]},n3140:{id:"n3140",loc:[-85.6309,41.941201]},n3141:{id:"n3141",loc:[-85.630765,41.941206]},n3142:{id:"n3142",loc:[-85.630739,41.941218]},n3143:{id:"n3143",loc:[-85.630582,41.941039]},n3144:{id:"n3144",loc:[-85.630412,41.940818]},n3145:{id:"n3145",loc:[-85.630509,41.940777]},n3146:{id:"n3146",loc:[-85.630678,41.941004]},n3147:{id:"n3147",loc:[-85.630773,41.942166]},n3148:{id:"n3148",loc:[-85.630708,41.942074]},n3149:{id:"n3149",loc:[-85.630863,41.942013]},n315:{id:"n315",loc:[-85.635452,41.942966]},n3150:{id:"n3150",loc:[-85.630928,41.942105]},n3151:{id:"n3151",loc:[-85.630701,41.942026]},n3152:{id:"n3152",loc:[-85.630665,41.941971]},n3153:{id:"n3153",loc:[-85.630793,41.941918]},n3154:{id:"n3154",loc:[-85.630837,41.94197]},n3155:{id:"n3155",loc:[-85.630757,41.941871]},n3156:{id:"n3156",loc:[-85.630629,41.941923]},n3157:{id:"n3157",loc:[-85.630694,41.941783]},n3158:{id:"n3158",loc:[-85.630534,41.941847]},n3159:{id:"n3159",loc:[-85.630598,41.941935]},n316:{id:"n316",loc:[-85.634911,41.943118]},n3160:{id:"n3160",loc:[-85.631548,41.93938]},n3161:{id:"n3161",loc:[-85.631525,41.939919]},n3162:{id:"n3162",loc:[-85.631648,41.940043]},n3163:{id:"n3163",loc:[-85.624586,41.951121]},n3164:{id:"n3164",loc:[-85.622139,41.952064]},n3165:{id:"n3165",loc:[-85.622141,41.952144]},n3166:{id:"n3166",loc:[-85.621977,41.952146]},n3167:{id:"n3167",loc:[-85.621978,41.952211]},n3168:{id:"n3168",loc:[-85.62191,41.952212]},n3169:{id:"n3169",loc:[-85.633628,41.935437]},n317:{id:"n317",loc:[-85.634743,41.943167]},n3170:{id:"n3170",loc:[-85.632849,41.935518]},n3171:{id:"n3171",loc:[-85.632376,41.93574]},n3172:{id:"n3172",loc:[-85.631517,41.935897]},n3173:{id:"n3173",loc:[-85.630433,41.936124]},n3174:{id:"n3174",loc:[-85.630207,41.936427]},n3175:{id:"n3175",loc:[-85.630346,41.936795]},n3176:{id:"n3176",loc:[-85.62996,41.936974]},n3177:{id:"n3177",loc:[-85.629916,41.937488]},n3178:{id:"n3178",loc:[-85.629946,41.937802]},n3179:{id:"n3179",loc:[-85.629977,41.937905]},n318:{id:"n318",loc:[-85.634401,41.94328]},n3180:{id:"n3180",loc:[-85.63016,41.937909]},n3181:{id:"n3181",loc:[-85.630804,41.937791]},n3182:{id:"n3182",loc:[-85.631688,41.937808]},n3183:{id:"n3183",loc:[-85.631685,41.938008]},n3184:{id:"n3184",loc:[-85.631845,41.938116]},n3185:{id:"n3185",loc:[-85.63207,41.938181]},n3186:{id:"n3186",loc:[-85.632143,41.938371]},n3187:{id:"n3187",loc:[-85.632056,41.938435]},n3188:{id:"n3188",loc:[-85.631787,41.938457]},n3189:{id:"n3189",loc:[-85.631657,41.938728]},n319:{id:"n319",loc:[-85.634345,41.943299]},n3190:{id:"n3190",loc:[-85.631595,41.93775]},n3191:{id:"n3191",loc:[-85.630264,41.937839]},n3192:{id:"n3192",loc:[-85.628591,41.948536]},n3193:{id:"n3193",loc:[-85.63205,41.951181]},n3194:{id:"n3194",loc:[-85.632034,41.949909]},n3195:{id:"n3195",loc:[-85.630841,41.951191]},n3196:{id:"n3196",loc:[-85.632083,41.9537]},n3197:{id:"n3197",loc:[-85.630929,41.959037]},n3198:{id:"n3198",loc:[-85.632151,41.959028]},n3199:{id:"n3199",loc:[-85.630911,41.957428]},n32:{id:"n32",loc:[-85.638273,41.944246]},n320:{id:"n320",loc:[-85.634287,41.943326]},n3200:{id:"n3200",loc:[-85.63213,41.957427]},n3201:{id:"n3201",loc:[-85.632072,41.952447]},n3202:{id:"n3202",loc:[-85.632095,41.954677]},n3203:{id:"n3203",loc:[-85.632111,41.955911]},n3204:{id:"n3204",loc:[-85.630855,41.952457]},n3205:{id:"n3205",loc:[-85.630869,41.953709]},n3206:{id:"n3206",loc:[-85.63088,41.954682]},n3207:{id:"n3207",loc:[-85.630894,41.955913]},n3208:{id:"n3208",loc:[-85.633214,41.948619]},n3209:{id:"n3209",loc:[-85.633253,41.951171]},n321:{id:"n321",loc:[-85.634233,41.943354]},n3210:{id:"n3210",loc:[-85.633234,41.949901]},n3211:{id:"n3211",loc:[-85.633922,41.948616]},n3212:{id:"n3212",loc:[-85.625188,41.947832]},n3213:{id:"n3213",loc:[-85.625208,41.947775]},n3214:{id:"n3214",loc:[-85.625229,41.94776]},n3215:{id:"n3215",loc:[-85.625201,41.947749]},n3216:{id:"n3216",loc:[-85.625168,41.947707]},n3217:{id:"n3217",loc:[-85.625171,41.947609]},n3218:{id:"n3218",loc:[-85.625213,41.947564]},n3219:{id:"n3219",loc:[-85.62529,41.94756]},n322:{id:"n322",loc:[-85.634099,41.943429]},n3220:{id:"n3220",loc:[-85.625303,41.947533]},n3221:{id:"n3221",loc:[-85.625344,41.947482]},n3222:{id:"n3222",loc:[-85.625442,41.947468]},n3223:{id:"n3223",loc:[-85.62565,41.947494]},n3224:{id:"n3224",loc:[-85.625726,41.947613]},n3225:{id:"n3225",loc:[-85.625703,41.947728]},n3226:{id:"n3226",loc:[-85.625534,41.94781]},n3227:{id:"n3227",loc:[-85.625391,41.947822]},n3228:{id:"n3228",loc:[-85.625304,41.947859]},n3229:{id:"n3229",loc:[-85.625203,41.947885]},n323:{id:"n323",loc:[-85.633958,41.943507],tags:{highway:"crossing"}},n3230:{id:"n3230",loc:[-85.624691,41.948659]},n3231:{id:"n3231",loc:[-85.624328,41.948661]},n3232:{id:"n3232",loc:[-85.624331,41.949046]},n3233:{id:"n3233",loc:[-85.624694,41.949045]},n3234:{id:"n3234",loc:[-85.623623,41.949606]},n3235:{id:"n3235",loc:[-85.623623,41.9497]},n3236:{id:"n3236",loc:[-85.623357,41.9497]},n3237:{id:"n3237",loc:[-85.623357,41.949614]},n3238:{id:"n3238",loc:[-85.623974,41.949429]},n3239:{id:"n3239",loc:[-85.623974,41.949605]},n324:{id:"n324",loc:[-85.633698,41.943651],tags:{railway:"crossing"}},n3240:{id:"n3240",loc:[-85.624501,41.951226]},n3241:{id:"n3241",loc:[-85.624501,41.951123]},n3242:{id:"n3242",loc:[-85.624319,41.951123]},n3243:{id:"n3243",loc:[-85.624319,41.951226]},n3244:{id:"n3244",loc:[-85.624121,41.950866]},n3245:{id:"n3245",loc:[-85.624115,41.950525]},n3246:{id:"n3246",loc:[-85.624315,41.950523]},n3247:{id:"n3247",loc:[-85.62432,41.950865]},n3248:{id:"n3248",loc:[-85.624393,41.950867]},n3249:{id:"n3249",loc:[-85.62439,41.950596]},n325:{id:"n325",loc:[-85.633508,41.943757]},n3250:{id:"n3250",loc:[-85.624673,41.950594]},n3251:{id:"n3251",loc:[-85.624675,41.95082]},n3252:{id:"n3252",loc:[-85.62451,41.950821]},n3253:{id:"n3253",loc:[-85.62451,41.950866]},n3254:{id:"n3254",loc:[-85.624101,41.949346]},n3255:{id:"n3255",loc:[-85.624244,41.949346]},n3256:{id:"n3256",loc:[-85.624244,41.949368]},n3257:{id:"n3257",loc:[-85.62434,41.949368]},n3258:{id:"n3258",loc:[-85.624342,41.949351]},n3259:{id:"n3259",loc:[-85.624725,41.949348]},n326:{id:"n326",loc:[-85.634839,41.942974]},n3260:{id:"n3260",loc:[-85.624755,41.950495]},n3261:{id:"n3261",loc:[-85.624121,41.950502]},n3262:{id:"n3262",loc:[-85.625453,41.950163]},n3263:{id:"n3263",loc:[-85.625454,41.949976]},n3264:{id:"n3264",loc:[-85.625549,41.949977]},n3265:{id:"n3265",loc:[-85.62555,41.949833]},n3266:{id:"n3266",loc:[-85.625577,41.949833]},n3267:{id:"n3267",loc:[-85.625578,41.949656]},n3268:{id:"n3268",loc:[-85.625195,41.949655]},n3269:{id:"n3269",loc:[-85.625192,41.950162]},n327:{id:"n327",loc:[-85.634657,41.943028]},n3270:{id:"n3270",loc:[-85.622992,41.949614]},n3271:{id:"n3271",loc:[-85.622991,41.949431]},n3272:{id:"n3272",loc:[-85.620103,41.951]},n3273:{id:"n3273",loc:[-85.605644,41.947468]},n3274:{id:"n3274",loc:[-85.617421,41.947457]},n3275:{id:"n3275",loc:[-85.620078,41.947444]},n3276:{id:"n3276",loc:[-85.620087,41.94924]},n3277:{id:"n3277",loc:[-85.62156,41.948333]},n3278:{id:"n3278",loc:[-85.620106,41.950132]},n3279:{id:"n3279",loc:[-85.637412,41.951136]},n328:{id:"n328",loc:[-85.634222,41.943152]},n3280:{id:"n3280",loc:[-85.635429,41.948608]},n3281:{id:"n3281",loc:[-85.635047,41.947788]},n3282:{id:"n3282",loc:[-85.635048,41.947796]},n3283:{id:"n3283",loc:[-85.635002,41.947797]},n3284:{id:"n3284",loc:[-85.635002,41.947788]},n3285:{id:"n3285",loc:[-85.634914,41.94779]},n3286:{id:"n3286",loc:[-85.634913,41.947753]},n3287:{id:"n3287",loc:[-85.63494,41.947753]},n3288:{id:"n3288",loc:[-85.634938,41.947708]},n3289:{id:"n3289",loc:[-85.635124,41.947705]},n329:{id:"n329",loc:[-85.634099,41.943202]},n3290:{id:"n3290",loc:[-85.635126,41.947787]},n3291:{id:"n3291",loc:[-85.634972,41.947599]},n3292:{id:"n3292",loc:[-85.634921,41.9476]},n3293:{id:"n3293",loc:[-85.63485,41.947546]},n3294:{id:"n3294",loc:[-85.63485,41.947508]},n3295:{id:"n3295",loc:[-85.634924,41.947457]},n3296:{id:"n3296",loc:[-85.634967,41.947456]},n3297:{id:"n3297",loc:[-85.635041,41.947512]},n3298:{id:"n3298",loc:[-85.635041,41.947542]},n3299:{id:"n3299",loc:[-85.634244,41.947839]},n33:{id:"n33",loc:[-85.638257,41.944188]},n330:{id:"n330",loc:[-85.634093,41.943138]},n3300:{id:"n3300",loc:[-85.634243,41.947793]},n3301:{id:"n3301",loc:[-85.634244,41.947686]},n3302:{id:"n3302",loc:[-85.634243,41.947657]},n3303:{id:"n3303",loc:[-85.634462,41.947653]},n3304:{id:"n3304",loc:[-85.634468,41.947835]},n3305:{id:"n3305",loc:[-85.634416,41.948006]},n3306:{id:"n3306",loc:[-85.634415,41.947898]},n3307:{id:"n3307",loc:[-85.634275,41.947899]},n3308:{id:"n3308",loc:[-85.634275,41.947927]},n3309:{id:"n3309",loc:[-85.63425,41.947927]},n331:{id:"n331",loc:[-85.633938,41.943291]},n3310:{id:"n3310",loc:[-85.63425,41.947976]},n3311:{id:"n3311",loc:[-85.634274,41.947976]},n3312:{id:"n3312",loc:[-85.634275,41.948007]},n3313:{id:"n3313",loc:[-85.634342,41.947635]},n3314:{id:"n3314",loc:[-85.634339,41.947497]},n3315:{id:"n3315",loc:[-85.634313,41.94748]},n3316:{id:"n3316",loc:[-85.634287,41.947474]},n3317:{id:"n3317",loc:[-85.63498,41.94815]},n3318:{id:"n3318",loc:[-85.634891,41.94815]},n3319:{id:"n3319",loc:[-85.634892,41.948169]},n332:{id:"n332",loc:[-85.633535,41.943511],tags:{railway:"crossing"}},n3320:{id:"n3320",loc:[-85.634852,41.948169]},n3321:{id:"n3321",loc:[-85.634853,41.948268]},n3322:{id:"n3322",loc:[-85.634832,41.948268]},n3323:{id:"n3323",loc:[-85.634832,41.948296]},n3324:{id:"n3324",loc:[-85.634965,41.948295]},n3325:{id:"n3325",loc:[-85.634966,41.948321]},n3326:{id:"n3326",loc:[-85.634999,41.948321]},n3327:{id:"n3327",loc:[-85.634999,41.948295]},n3328:{id:"n3328",loc:[-85.635175,41.948293]},n3329:{id:"n3329",loc:[-85.635175,41.948262]},n333:{id:"n333",loc:[-85.63339,41.943596]},n3330:{id:"n3330",loc:[-85.635159,41.948262]},n3331:{id:"n3331",loc:[-85.635158,41.948152]},n3332:{id:"n3332",loc:[-85.635067,41.948152]},n3333:{id:"n3333",loc:[-85.635065,41.947966]},n3334:{id:"n3334",loc:[-85.634979,41.947966]},n3335:{id:"n3335",loc:[-85.634307,41.948326]},n3336:{id:"n3336",loc:[-85.634305,41.948298]},n3337:{id:"n3337",loc:[-85.634331,41.948055]},n3338:{id:"n3338",loc:[-85.634331,41.948046]},n3339:{id:"n3339",loc:[-85.634435,41.948047]},n334:{id:"n334",loc:[-85.632842,41.943895]},n3340:{id:"n3340",loc:[-85.634434,41.948375]},n3341:{id:"n3341",loc:[-85.634463,41.948373]},n3342:{id:"n3342",loc:[-85.634464,41.948456]},n3343:{id:"n3343",loc:[-85.63443,41.948457]},n3344:{id:"n3344",loc:[-85.634432,41.948505]},n3345:{id:"n3345",loc:[-85.637386,41.94906]},n3346:{id:"n3346",loc:[-85.637113,41.9486]},n3347:{id:"n3347",loc:[-85.635448,41.949424]},n335:{id:"n335",loc:[-85.633856,41.943315]},n3352:{id:"n3352",loc:[-85.635457,41.949787]},n3353:{id:"n3353",loc:[-85.635459,41.949886]},n336:{id:"n336",loc:[-85.633697,41.943405]},n337:{id:"n337",loc:[-85.63347,41.943181]},n3372:{id:"n3372",loc:[-85.634423,41.950964]},n3373:{id:"n3373",loc:[-85.634424,41.95074]},n3374:{id:"n3374",loc:[-85.634394,41.950284]},n3375:{id:"n3375",loc:[-85.634398,41.950626]},n3376:{id:"n3376",loc:[-85.63452,41.951063]},n3377:{id:"n3377",loc:[-85.634511,41.949977]},n3378:{id:"n3378",loc:[-85.637409,41.949873]},n3379:{id:"n3379",loc:[-85.634824,41.94996]},n338:{id:"n338",loc:[-85.633597,41.943109]},n3380:{id:"n3380",loc:[-85.635437,41.949954]},n3381:{id:"n3381",loc:[-85.634844,41.951064]},n3382:{id:"n3382",loc:[-85.635458,41.951058]},n3383:{id:"n3383",loc:[-85.633921,41.947333]},n3384:{id:"n3384",loc:[-85.634208,41.947793]},n3385:{id:"n3385",loc:[-85.634204,41.947687]},n3386:{id:"n3386",loc:[-85.63424,41.947475]},n3387:{id:"n3387",loc:[-85.63424,41.947635]},n3388:{id:"n3388",loc:[-85.634089,41.948328]},n3389:{id:"n3389",loc:[-85.63424,41.948299]},n339:{id:"n339",loc:[-85.633673,41.943184]},n3390:{id:"n3390",loc:[-85.634239,41.948212]},n3391:{id:"n3391",loc:[-85.634086,41.948214]},n3392:{id:"n3392",loc:[-85.63408,41.948056]},n3393:{id:"n3393",loc:[-85.634093,41.948506]},n3394:{id:"n3394",loc:[-85.64344,41.941866]},n3395:{id:"n3395",loc:[-85.63378,41.95099]},n3396:{id:"n3396",loc:[-85.633779,41.950967]},n3397:{id:"n3397",loc:[-85.63375,41.950746]},n3398:{id:"n3398",loc:[-85.63375,41.950697]},n3399:{id:"n3399",loc:[-85.633903,41.950696]},n34:{id:"n34",loc:[-85.638176,41.944312]},n340:{id:"n340",loc:[-85.633714,41.94316]},n3400:{id:"n3400",loc:[-85.633901,41.950436]},n3401:{id:"n3401",loc:[-85.633492,41.950438]},n3402:{id:"n3402",loc:[-85.633494,41.950756]},n3403:{id:"n3403",loc:[-85.633454,41.950756]},n3404:{id:"n3404",loc:[-85.633456,41.950992]},n3405:{id:"n3405",loc:[-85.633994,41.950284]},n3406:{id:"n3406",loc:[-85.633998,41.950628]},n3407:{id:"n3407",loc:[-85.633364,41.951068]},n3408:{id:"n3408",loc:[-85.633356,41.949982]},n3409:{id:"n3409",loc:[-85.643327,41.941903]},n341:{id:"n341",loc:[-85.633811,41.943256]},n3410:{id:"n3410",loc:[-85.633292,41.953691]},n3411:{id:"n3411",loc:[-85.637432,41.952399]},n3412:{id:"n3412",loc:[-85.633349,41.957422]},n3413:{id:"n3413",loc:[-85.633326,41.955909]},n3414:{id:"n3414",loc:[-85.633307,41.954673]},n3415:{id:"n3415",loc:[-85.633273,41.952436]},n3416:{id:"n3416",loc:[-85.633361,41.95823],tags:{highway:"turning_circle"}},n3417:{id:"n3417",loc:[-85.619899,41.945527]},n3418:{id:"n3418",loc:[-85.643422,41.941946]},n3419:{id:"n3419",loc:[-85.643505,41.942033]},n342:{id:"n342",loc:[-85.633801,41.943261]},n3420:{id:"n3420",loc:[-85.620088,41.945571]},n3421:{id:"n3421",loc:[-85.620051,41.945505]},n3422:{id:"n3422",loc:[-85.62001,41.94541]},n3423:{id:"n3423",loc:[-85.620982,41.944742]},n3424:{id:"n3424",loc:[-85.621305,41.944782]},n3425:{id:"n3425",loc:[-85.621174,41.944819]},n3426:{id:"n3426",loc:[-85.621029,41.944871]},n3427:{id:"n3427",loc:[-85.620741,41.945011]},n3428:{id:"n3428",loc:[-85.620616,41.945085]},n3429:{id:"n3429",loc:[-85.620506,41.945172]},n343:{id:"n343",loc:[-85.63374,41.943514]},n3430:{id:"n3430",loc:[-85.620394,41.945273]},n3431:{id:"n3431",loc:[-85.620316,41.94536]},n3432:{id:"n3432",loc:[-85.620257,41.945452]},n3433:{id:"n3433",loc:[-85.620212,41.945535]},n3434:{id:"n3434",loc:[-85.620101,41.945811]},n3435:{id:"n3435",loc:[-85.620081,41.945937]},n3436:{id:"n3436",loc:[-85.619899,41.943718]},n3437:{id:"n3437",loc:[-85.619969,41.943211]},n3438:{id:"n3438",loc:[-85.619894,41.943292]},n3439:{id:"n3439",loc:[-85.620047,41.944738]},n344:{id:"n344",loc:[-85.633665,41.943441]},n3440:{id:"n3440",loc:[-85.620226,41.946088]},n3441:{id:"n3441",loc:[-85.620225,41.945864]},n3442:{id:"n3442",loc:[-85.620518,41.945863]},n3443:{id:"n3443",loc:[-85.620519,41.945944]},n3444:{id:"n3444",loc:[-85.620388,41.945944]},n3445:{id:"n3445",loc:[-85.620389,41.946088]},n3446:{id:"n3446",loc:[-85.618405,41.946566]},n3447:{id:"n3447",loc:[-85.619156,41.946562]},n3448:{id:"n3448",loc:[-85.619154,41.946319]},n3449:{id:"n3449",loc:[-85.618736,41.946322]},n345:{id:"n345",loc:[-85.633162,41.942947]},n3450:{id:"n3450",loc:[-85.618733,41.94612]},n3451:{id:"n3451",loc:[-85.619317,41.946116]},n3452:{id:"n3452",loc:[-85.619316,41.946023]},n3453:{id:"n3453",loc:[-85.619622,41.946021]},n3454:{id:"n3454",loc:[-85.619624,41.946171]},n3455:{id:"n3455",loc:[-85.61977,41.94617]},n3456:{id:"n3456",loc:[-85.619769,41.94602]},n3457:{id:"n3457",loc:[-85.619732,41.94602]},n3458:{id:"n3458",loc:[-85.619731,41.945856]},n3459:{id:"n3459",loc:[-85.619617,41.945857]},n346:{id:"n346",loc:[-85.633598,41.943083]},n3460:{id:"n3460",loc:[-85.619616,41.945776]},n3461:{id:"n3461",loc:[-85.619447,41.945777]},n3462:{id:"n3462",loc:[-85.619415,41.945778]},n3463:{id:"n3463",loc:[-85.618378,41.945788]},n3464:{id:"n3464",loc:[-85.618384,41.946132]},n3465:{id:"n3465",loc:[-85.618503,41.94613]},n3466:{id:"n3466",loc:[-85.618506,41.946319]},n3467:{id:"n3467",loc:[-85.6184,41.94632]},n3468:{id:"n3468",loc:[-85.618248,41.946416]},n3469:{id:"n3469",loc:[-85.618247,41.946319]},n347:{id:"n347",loc:[-85.63343,41.943179]},n3470:{id:"n3470",loc:[-85.618039,41.946321]},n3471:{id:"n3471",loc:[-85.61804,41.946418]},n3472:{id:"n3472",loc:[-85.620118,41.951895]},n3473:{id:"n3473",loc:[-85.617075,41.95469]},n3474:{id:"n3474",loc:[-85.620107,41.952113]},n3475:{id:"n3475",loc:[-85.620091,41.95232]},n3476:{id:"n3476",loc:[-85.620047,41.952505]},n3477:{id:"n3477",loc:[-85.61998,41.952715]},n3478:{id:"n3478",loc:[-85.619861,41.952986]},n3479:{id:"n3479",loc:[-85.619622,41.953365]},n348:{id:"n348",loc:[-85.633669,41.94341]},n3480:{id:"n3480",loc:[-85.619441,41.953567]},n3481:{id:"n3481",loc:[-85.619259,41.953741]},n3482:{id:"n3482",loc:[-85.618835,41.954056]},n3483:{id:"n3483",loc:[-85.618602,41.954194]},n3484:{id:"n3484",loc:[-85.618305,41.954347]},n3485:{id:"n3485",loc:[-85.618006,41.954466]},n3486:{id:"n3486",loc:[-85.617611,41.954587]},n3487:{id:"n3487",loc:[-85.615094,41.943412]},n3488:{id:"n3488",loc:[-85.619337,41.943025]},n3489:{id:"n3489",loc:[-85.610477,41.945527]},n349:{id:"n349",loc:[-85.633566,41.943466]},n3490:{id:"n3490",loc:[-85.610477,41.943718]},n3491:{id:"n3491",loc:[-85.619804,41.942976]},n3492:{id:"n3492",loc:[-85.61921,41.942672]},n3493:{id:"n3493",loc:[-85.619862,41.942836]},n3494:{id:"n3494",loc:[-85.616326,41.942769]},n3495:{id:"n3495",loc:[-85.617953,41.942917]},n3496:{id:"n3496",loc:[-85.61972,41.942728]},n3497:{id:"n3497",loc:[-85.61944,41.942784]},n3498:{id:"n3498",loc:[-85.615323,41.942841]},n3499:{id:"n3499",loc:[-85.612923,41.943718]},n35:{id:"n35",loc:[-85.637928,41.944249]},n350:{id:"n350",loc:[-85.633031,41.942986]},n3500:{id:"n3500",loc:[-85.61958,41.942756]},n3501:{id:"n3501",loc:[-85.619643,41.942647],tags:{leisure:"fishing"}},n3502:{id:"n3502",loc:[-85.619935,41.942962]},n3503:{id:"n3503",loc:[-85.629677,41.954687]},n3504:{id:"n3504",loc:[-85.629083,41.953722]},n3505:{id:"n3505",loc:[-85.621907,41.952067]},n3506:{id:"n3506",loc:[-85.621788,41.952058]},n3507:{id:"n3507",loc:[-85.629665,41.953718]},n3508:{id:"n3508",loc:[-85.624454,41.954707]},n3509:{id:"n3509",loc:[-85.634609,41.954585]},n351:{id:"n351",loc:[-85.633238,41.94283]},n3510:{id:"n3510",loc:[-85.634595,41.953772]},n3511:{id:"n3511",loc:[-85.633425,41.953783]},n3512:{id:"n3512",loc:[-85.633439,41.954596]},n3517:{id:"n3517",loc:[-85.621789,41.952179]},n3518:{id:"n3518",loc:[-85.624105,41.954704]},n3519:{id:"n3519",loc:[-85.623306,41.954542]},n352:{id:"n352",loc:[-85.633173,41.943556]},n3520:{id:"n3520",loc:[-85.623123,41.954502]},n3521:{id:"n3521",loc:[-85.622965,41.954473]},n3522:{id:"n3522",loc:[-85.622822,41.954455]},n3523:{id:"n3523",loc:[-85.62269,41.954448]},n3524:{id:"n3524",loc:[-85.622388,41.954467]},n3525:{id:"n3525",loc:[-85.62403,41.954895]},n3526:{id:"n3526",loc:[-85.623579,41.954855]},n3527:{id:"n3527",loc:[-85.623836,41.954951]},n3528:{id:"n3528",loc:[-85.622473,41.954592]},n3529:{id:"n3529",loc:[-85.622753,41.95458]},n353:{id:"n353",loc:[-85.633127,41.943552]},n3530:{id:"n3530",loc:[-85.62404,41.955078]},n3531:{id:"n3531",loc:[-85.624126,41.954999]},n3532:{id:"n3532",loc:[-85.623171,41.954687]},n3533:{id:"n3533",loc:[-85.624276,41.955206]},n3534:{id:"n3534",loc:[-85.62491,41.952801]},n3535:{id:"n3535",loc:[-85.625186,41.952756]},n3536:{id:"n3536",loc:[-85.625552,41.952792]},n3537:{id:"n3537",loc:[-85.626001,41.952948]},n3538:{id:"n3538",loc:[-85.626528,41.952984]},n3539:{id:"n3539",loc:[-85.626942,41.952886]},n354:{id:"n354",loc:[-85.632745,41.943222]},n3540:{id:"n3540",loc:[-85.627092,41.952685]},n3541:{id:"n3541",loc:[-85.627212,41.95244]},n3542:{id:"n3542",loc:[-85.627158,41.952226]},n3543:{id:"n3543",loc:[-85.627002,41.951972]},n3544:{id:"n3544",loc:[-85.626822,41.951838]},n3545:{id:"n3545",loc:[-85.626528,41.951807]},n3546:{id:"n3546",loc:[-85.625653,41.951852]},n3547:{id:"n3547",loc:[-85.625348,41.951834]},n3548:{id:"n3548",loc:[-85.625114,41.951767]},n3549:{id:"n3549",loc:[-85.620627,41.954682]},n355:{id:"n355",loc:[-85.632756,41.943199]},n3550:{id:"n3550",loc:[-85.622758,41.951884]},n3551:{id:"n3551",loc:[-85.618135,41.954734]},n3552:{id:"n3552",loc:[-85.620229,41.95472]},n3553:{id:"n3553",loc:[-85.624491,41.955573]},n3554:{id:"n3554",loc:[-85.621792,41.958314]},n3555:{id:"n3555",loc:[-85.623395,41.960001]},n3556:{id:"n3556",loc:[-85.620461,41.956212]},n3557:{id:"n3557",loc:[-85.62109,41.956766]},n3558:{id:"n3558",loc:[-85.620246,41.956224]},n3559:{id:"n3559",loc:[-85.625017,41.956068]},n356:{id:"n356",loc:[-85.632855,41.943147]},n3560:{id:"n3560",loc:[-85.622795,41.959702]},n3561:{id:"n3561",loc:[-85.621573,41.958457]},n3562:{id:"n3562",loc:[-85.619631,41.9573]},n3563:{id:"n3563",loc:[-85.62095,41.956311]},n3564:{id:"n3564",loc:[-85.619694,41.957408]},n3565:{id:"n3565",loc:[-85.621079,41.957751]},n3566:{id:"n3566",loc:[-85.622426,41.961142]},n3567:{id:"n3567",loc:[-85.623251,41.960484]},n3568:{id:"n3568",loc:[-85.619084,41.956291]},n3569:{id:"n3569",loc:[-85.622227,41.959303]},n357:{id:"n357",loc:[-85.632888,41.94315]},n3570:{id:"n3570",loc:[-85.620976,41.959104]},n3571:{id:"n3571",loc:[-85.621208,41.95653]},n3572:{id:"n3572",loc:[-85.623531,41.95951]},n3573:{id:"n3573",loc:[-85.623556,41.957935]},n3574:{id:"n3574",loc:[-85.623037,41.95746]},n3575:{id:"n3575",loc:[-85.621175,41.956427]},n3576:{id:"n3576",loc:[-85.622651,41.960109]},n3577:{id:"n3577",loc:[-85.621803,41.960747]},n3578:{id:"n3578",loc:[-85.620791,41.961874]},n3579:{id:"n3579",loc:[-85.625295,41.956786]},n358:{id:"n358",loc:[-85.633232,41.943547]},n3580:{id:"n3580",loc:[-85.619662,41.956894]},n3581:{id:"n3581",loc:[-85.622442,41.958708]},n3582:{id:"n3582",loc:[-85.621744,41.955864]},n3583:{id:"n3583",loc:[-85.621336,41.959212]},n3584:{id:"n3584",loc:[-85.622801,41.957304]},n3585:{id:"n3585",loc:[-85.619973,41.957433]},n3586:{id:"n3586",loc:[-85.619556,41.955717]},n3587:{id:"n3587",loc:[-85.622978,41.958601]},n3588:{id:"n3588",loc:[-85.625396,41.956264]},n3589:{id:"n3589",loc:[-85.623525,41.958034]},n359:{id:"n359",loc:[-85.633302,41.94351]},n3590:{id:"n3590",loc:[-85.623299,41.959631]},n3591:{id:"n3591",loc:[-85.622678,41.959873]},n3592:{id:"n3592",loc:[-85.625553,41.956179]},n3593:{id:"n3593",loc:[-85.623557,41.959231]},n3594:{id:"n3594",loc:[-85.622843,41.957373]},n3595:{id:"n3595",loc:[-85.619378,41.955677]},n3596:{id:"n3596",loc:[-85.620092,41.955425]},n3597:{id:"n3597",loc:[-85.622666,41.96044]},n3598:{id:"n3598",loc:[-85.621996,41.960256]},n3599:{id:"n3599",loc:[-85.623273,41.959997]},n36:{id:"n36",loc:[-85.637894,41.945551]},n360:{id:"n360",loc:[-85.633442,41.943794],tags:{highway:"crossing"}},n3600:{id:"n3600",loc:[-85.62477,41.95689]},n3601:{id:"n3601",loc:[-85.621641,41.955015]},n3602:{id:"n3602",loc:[-85.622495,41.960392]},n3603:{id:"n3603",loc:[-85.61918,41.955565]},n3604:{id:"n3604",loc:[-85.620017,41.955505]},n3605:{id:"n3605",loc:[-85.621739,41.956315]},n3606:{id:"n3606",loc:[-85.622957,41.959837]},n3607:{id:"n3607",loc:[-85.620912,41.960919]},n3608:{id:"n3608",loc:[-85.625231,41.956235]},n3609:{id:"n3609",loc:[-85.620976,41.961868]},n361:{id:"n361",loc:[-85.633381,41.94383]},n3610:{id:"n3610",loc:[-85.620956,41.958908]},n3611:{id:"n3611",loc:[-85.619035,41.956139]},n3612:{id:"n3612",loc:[-85.623643,41.958669]},n3613:{id:"n3613",loc:[-85.61949,41.956539]},n3614:{id:"n3614",loc:[-85.621927,41.958242]},n3615:{id:"n3615",loc:[-85.620826,41.955721]},n3616:{id:"n3616",loc:[-85.621202,41.961321]},n3617:{id:"n3617",loc:[-85.624877,41.95594]},n3618:{id:"n3618",loc:[-85.62065,41.958369]},n3619:{id:"n3619",loc:[-85.621524,41.956279]},n362:{id:"n362",loc:[-85.632977,41.944053]},n3620:{id:"n3620",loc:[-85.624662,41.955932]},n3621:{id:"n3621",loc:[-85.623048,41.958509]},n3622:{id:"n3622",loc:[-85.62111,41.95754]},n3623:{id:"n3623",loc:[-85.621508,41.954847]},n3624:{id:"n3624",loc:[-85.620655,41.958601]},n3625:{id:"n3625",loc:[-85.62154,41.954971]},n3626:{id:"n3626",loc:[-85.621691,41.955521]},n3627:{id:"n3627",loc:[-85.62154,41.954739]},n3628:{id:"n3628",loc:[-85.621996,41.959913]},n3629:{id:"n3629",loc:[-85.622286,41.960699]},n363:{id:"n363",loc:[-85.632915,41.943981],tags:{crossing:"marked",highway:"crossing"}},n3630:{id:"n3630",loc:[-85.622844,41.9572]},n3631:{id:"n3631",loc:[-85.620252,41.955446]},n3632:{id:"n3632",loc:[-85.623434,41.957528]},n3633:{id:"n3633",loc:[-85.623429,41.956858]},n3634:{id:"n3634",loc:[-85.622957,41.957137]},n3635:{id:"n3635",loc:[-85.622554,41.959027]},n3636:{id:"n3636",loc:[-85.623289,41.958314]},n3637:{id:"n3637",loc:[-85.622977,41.960855]},n3638:{id:"n3638",loc:[-85.624008,41.956953]},n3639:{id:"n3639",loc:[-85.621278,41.960855]},n364:{id:"n364",loc:[-85.632724,41.943969],tags:{crossing:"marked",highway:"crossing"}},n3640:{id:"n3640",loc:[-85.623128,41.956993]},n3641:{id:"n3641",loc:[-85.622452,41.959183]},n3642:{id:"n3642",loc:[-85.621095,41.961082]},n3643:{id:"n3643",loc:[-85.622011,41.960544]},n3644:{id:"n3644",loc:[-85.621637,41.955385]},n3645:{id:"n3645",loc:[-85.620999,41.959271]},n3646:{id:"n3646",loc:[-85.620044,41.956347]},n3647:{id:"n3647",loc:[-85.621936,41.959682]},n3648:{id:"n3648",loc:[-85.623761,41.95685]},n3649:{id:"n3649",loc:[-85.621239,41.959343]},n365:{id:"n365",loc:[-85.632621,41.944034]},n3650:{id:"n3650",loc:[-85.621073,41.956012]},n3651:{id:"n3651",loc:[-85.621271,41.956184]},n3652:{id:"n3652",loc:[-85.623444,41.95778]},n3653:{id:"n3653",loc:[-85.62125,41.96186]},n3654:{id:"n3654",loc:[-85.62169,41.961059]},n3655:{id:"n3655",loc:[-85.620012,41.955637]},n3656:{id:"n3656",loc:[-85.621058,41.9573]},n3657:{id:"n3657",loc:[-85.621138,41.957663]},n3658:{id:"n3658",loc:[-85.620773,41.957895]},n3659:{id:"n3659",loc:[-85.62007,41.957157]},n366:{id:"n366",loc:[-85.632684,41.944109],tags:{crossing:"marked",highway:"crossing"}},n3660:{id:"n3660",loc:[-85.624534,41.955844]},n3661:{id:"n3661",loc:[-85.621932,41.960807]},n3662:{id:"n3662",loc:[-85.623358,41.958138]},n3663:{id:"n3663",loc:[-85.620456,41.955514]},n3664:{id:"n3664",loc:[-85.623504,41.957607]},n3665:{id:"n3665",loc:[-85.621444,41.960751]},n3666:{id:"n3666",loc:[-85.623492,41.960213]},n3667:{id:"n3667",loc:[-85.621669,41.954655]},n3668:{id:"n3668",loc:[-85.623106,41.958685]},n3669:{id:"n3669",loc:[-85.620922,41.957867]},n367:{id:"n367",loc:[-85.632738,41.944172]},n3670:{id:"n3670",loc:[-85.620092,41.957296]},n3671:{id:"n3671",loc:[-85.621669,41.955222]},n3672:{id:"n3672",loc:[-85.621614,41.960967]},n3673:{id:"n3673",loc:[-85.621691,41.955732]},n3674:{id:"n3674",loc:[-85.619207,41.956419]},n3675:{id:"n3675",loc:[-85.621116,41.956603]},n3676:{id:"n3676",loc:[-85.623311,41.956929]},n3677:{id:"n3677",loc:[-85.625671,41.956499]},n3678:{id:"n3678",loc:[-85.623525,41.956738]},n3679:{id:"n3679",loc:[-85.625381,41.956634]},n368:{id:"n368",loc:[-85.63287,41.944135],tags:{crossing:"marked",highway:"crossing"}},n3680:{id:"n3680",loc:[-85.620096,41.95677]},n3681:{id:"n3681",loc:[-85.623803,41.958745]},n3682:{id:"n3682",loc:[-85.623498,41.958457]},n3683:{id:"n3683",loc:[-85.624223,41.957009]},n3684:{id:"n3684",loc:[-85.620026,41.956946]},n3685:{id:"n3685",loc:[-85.623005,41.960124]},n3686:{id:"n3686",loc:[-85.619073,41.955832]},n3687:{id:"n3687",loc:[-85.621744,41.95501]},n3688:{id:"n3688",loc:[-85.620804,41.958781]},n3689:{id:"n3689",loc:[-85.619844,41.957448]},n369:{id:"n369",loc:[-85.63298,41.944076]},n3690:{id:"n3690",loc:[-85.623713,41.958872]},n3691:{id:"n3691",loc:[-85.622329,41.960507]},n3692:{id:"n3692",loc:[-85.620804,41.956244]},n3693:{id:"n3693",loc:[-85.621818,41.955968]},n3694:{id:"n3694",loc:[-85.621405,41.958697]},n3695:{id:"n3695",loc:[-85.620998,41.960996]},n3696:{id:"n3696",loc:[-85.621621,41.960444]},n3697:{id:"n3697",loc:[-85.620941,41.961637]},n3698:{id:"n3698",loc:[-85.622195,41.958333]},n3699:{id:"n3699",loc:[-85.621668,41.961529]},n37:{id:"n37",loc:[-85.637611,41.945383]},n370:{id:"n370",loc:[-85.633191,41.944471]},n3700:{id:"n3700",loc:[-85.621015,41.957049]},n3701:{id:"n3701",loc:[-85.619368,41.955521]},n3702:{id:"n3702",loc:[-85.651578,41.942534]},n3703:{id:"n3703",loc:[-85.651541,41.943847]},n3704:{id:"n3704",loc:[-85.651365,41.944817]},n3705:{id:"n3705",loc:[-85.651076,41.945985]},n3706:{id:"n3706",loc:[-85.650626,41.947213]},n3707:{id:"n3707",loc:[-85.649669,41.949161]},n3708:{id:"n3708",loc:[-85.641802,41.961801]},n3709:{id:"n3709",loc:[-85.623333,41.961987]},n371:{id:"n371",loc:[-85.633132,41.94372]},n3710:{id:"n3710",loc:[-85.620621,41.965658]},n3711:{id:"n3711",loc:[-85.605673,41.965764]},n3712:{id:"n3712",loc:[-85.605664,41.962094]},n3713:{id:"n3713",loc:[-85.583774,41.962178]},n3714:{id:"n3714",loc:[-85.583774,41.961789]},n3715:{id:"n3715",loc:[-85.581303,41.961783]},n3716:{id:"n3716",loc:[-85.581245,41.958394]},n3717:{id:"n3717",loc:[-85.585299,41.955483]},n3718:{id:"n3718",loc:[-85.585588,41.955331]},n3719:{id:"n3719",loc:[-85.586053,41.955163]},n372:{id:"n372",loc:[-85.633011,41.943788]},n3720:{id:"n3720",loc:[-85.58632,41.955076]},n3721:{id:"n3721",loc:[-85.586478,41.955025]},n3722:{id:"n3722",loc:[-85.58692,41.954947]},n3723:{id:"n3723",loc:[-85.587345,41.954913]},n3724:{id:"n3724",loc:[-85.605592,41.954766]},n3725:{id:"n3725",loc:[-85.605303,41.936236]},n3726:{id:"n3726",loc:[-85.606941,41.936117]},n3727:{id:"n3727",loc:[-85.60876,41.935856]},n3728:{id:"n3728",loc:[-85.610092,41.935451]},n3729:{id:"n3729",loc:[-85.610681,41.935247]},n373:{id:"n373",loc:[-85.632854,41.943632]},n3730:{id:"n3730",loc:[-85.611446,41.934955]},n3731:{id:"n3731",loc:[-85.612057,41.934696]},n3732:{id:"n3732",loc:[-85.613256,41.934084]},n3733:{id:"n3733",loc:[-85.613948,41.933682]},n3734:{id:"n3734",loc:[-85.614638,41.933212]},n3735:{id:"n3735",loc:[-85.619801,41.929305]},n3736:{id:"n3736",loc:[-85.619768,41.925548]},n3737:{id:"n3737",loc:[-85.625761,41.925597]},n3738:{id:"n3738",loc:[-85.6263,41.927323]},n3739:{id:"n3739",loc:[-85.633708,41.927402]},n374:{id:"n374",loc:[-85.632974,41.943565]},n3740:{id:"n3740",loc:[-85.633927,41.929109]},n3741:{id:"n3741",loc:[-85.639213,41.929088]},n3742:{id:"n3742",loc:[-85.639204,41.925488]},n3743:{id:"n3743",loc:[-85.651425,41.925406]},n3744:{id:"n3744",loc:[-85.643386,41.941933]},n3745:{id:"n3745",loc:[-85.642776,41.941161]},n3746:{id:"n3746",loc:[-85.637277,41.948812]},n3747:{id:"n3747",loc:[-85.637366,41.94897]},n3748:{id:"n3748",loc:[-85.637329,41.94889]},n3749:{id:"n3749",loc:[-85.629649,41.952596]},n375:{id:"n375",loc:[-85.632741,41.943351]},n3750:{id:"n3750",loc:[-85.630291,41.954684]},n3751:{id:"n3751",loc:[-85.630284,41.953713]},n3752:{id:"n3752",loc:[-85.630269,41.952463]},n3753:{id:"n3753",loc:[-85.633933,41.949896]},n3754:{id:"n3754",loc:[-85.629339,41.941467]},n3755:{id:"n3755",loc:[-85.629857,41.94316]},n3756:{id:"n3756",loc:[-85.629987,41.944025]},n3757:{id:"n3757",loc:[-85.628538,41.948604]},n3758:{id:"n3758",loc:[-85.627415,41.957442]},n3759:{id:"n3759",loc:[-85.627019,41.957369]},n376:{id:"n376",loc:[-85.63251,41.943481]},n3760:{id:"n3760",loc:[-85.62167,41.952179]},n3761:{id:"n3761",loc:[-85.62167,41.952138]},n3762:{id:"n3762",loc:[-85.621562,41.952139]},n3763:{id:"n3763",loc:[-85.621562,41.952058]},n3764:{id:"n3764",loc:[-85.621476,41.952043]},n3765:{id:"n3765",loc:[-85.621477,41.952132]},n3766:{id:"n3766",loc:[-85.621386,41.952132]},n3767:{id:"n3767",loc:[-85.621387,41.95214]},n3768:{id:"n3768",loc:[-85.621262,41.95214]},n3769:{id:"n3769",loc:[-85.621261,41.952038]},n377:{id:"n377",loc:[-85.632706,41.943715]},n3770:{id:"n3770",loc:[-85.621389,41.952038]},n3771:{id:"n3771",loc:[-85.621389,41.952043]},n3772:{id:"n3772",loc:[-85.620898,41.952024]},n3773:{id:"n3773",loc:[-85.620898,41.952085]},n3774:{id:"n3774",loc:[-85.620774,41.952084]},n3775:{id:"n3775",loc:[-85.620774,41.952023]},n3776:{id:"n3776",loc:[-85.620749,41.952036]},n3777:{id:"n3777",loc:[-85.620723,41.952097]},n3778:{id:"n3778",loc:[-85.626158,41.958996]},n3779:{id:"n3779",loc:[-85.626319,41.958686]},n378:{id:"n378",loc:[-85.638683,41.943295]},n3780:{id:"n3780",loc:[-85.626119,41.958629]},n3781:{id:"n3781",loc:[-85.626064,41.958733]},n3782:{id:"n3782",loc:[-85.626155,41.958759]},n3783:{id:"n3783",loc:[-85.626048,41.958965]},n3784:{id:"n3784",loc:[-85.620648,41.952079]},n3785:{id:"n3785",loc:[-85.63826,41.961213]},n3786:{id:"n3786",loc:[-85.638003,41.961614]},n3787:{id:"n3787",loc:[-85.638817,41.961902]},n3788:{id:"n3788",loc:[-85.639073,41.961501]},n3789:{id:"n3789",loc:[-85.620674,41.952018]},n379:{id:"n379",loc:[-85.638684,41.94323]},n3790:{id:"n3790",loc:[-85.62082,41.952106]},n3791:{id:"n3791",loc:[-85.620819,41.952143]},n3792:{id:"n3792",loc:[-85.620778,41.952143]},n3793:{id:"n3793",loc:[-85.620778,41.952106]},n3794:{id:"n3794",loc:[-85.620563,41.952276]},n3795:{id:"n3795",loc:[-85.620543,41.95238]},n3796:{id:"n3796",loc:[-85.620422,41.952367]},n3797:{id:"n3797",loc:[-85.620441,41.952263]},n3798:{id:"n3798",loc:[-85.620561,41.952266]},n3799:{id:"n3799",loc:[-85.620444,41.952254]},n38:{id:"n38",loc:[-85.63879,41.943295]},n380:{id:"n380",loc:[-85.638627,41.94322]},n3800:{id:"n3800",loc:[-85.620773,41.955585]},n3801:{id:"n3801",loc:[-85.621265,41.955989]},n3802:{id:"n3802",loc:[-85.620692,41.954969]},n3803:{id:"n3803",loc:[-85.620691,41.955367]},n3804:{id:"n3804",loc:[-85.620458,41.952178]},n3805:{id:"n3805",loc:[-85.620575,41.95219]},n3806:{id:"n3806",loc:[-85.617609,41.952712]},n3807:{id:"n3807",loc:[-85.617533,41.952801],tags:{entrance:"yes"}},n3808:{id:"n3808",loc:[-85.616816,41.952911]},n3809:{id:"n3809",loc:[-85.616797,41.952901]},n381:{id:"n381",loc:[-85.638624,41.943294]},n3810:{id:"n3810",loc:[-85.616343,41.952694]},n3811:{id:"n3811",loc:[-85.616336,41.952729]},n3812:{id:"n3812",loc:[-85.616343,41.952772]},n3813:{id:"n3813",loc:[-85.628479,41.948649]},n3814:{id:"n3814",loc:[-85.628413,41.948679]},n3815:{id:"n3815",loc:[-85.628336,41.948694]},n3816:{id:"n3816",loc:[-85.62826,41.948694]},n3817:{id:"n3817",loc:[-85.628185,41.948679]},n3818:{id:"n3818",loc:[-85.628103,41.948649]},n3819:{id:"n3819",loc:[-85.627482,41.948395]},n382:{id:"n382",loc:[-85.638437,41.943291]},n3820:{id:"n3820",loc:[-85.619957,41.951168]},n3821:{id:"n3821",loc:[-85.619955,41.952077]},n3822:{id:"n3822",loc:[-85.619843,41.952666]},n3823:{id:"n3823",loc:[-85.619513,41.95324]},n3824:{id:"n3824",loc:[-85.619163,41.953668]},n3825:{id:"n3825",loc:[-85.618813,41.953947]},n3826:{id:"n3826",loc:[-85.618265,41.954252]},n3827:{id:"n3827",loc:[-85.617691,41.954458]},n3828:{id:"n3828",loc:[-85.616978,41.95459]},n3829:{id:"n3829",loc:[-85.615408,41.954628]},n383:{id:"n383",loc:[-85.63844,41.943209]},n3830:{id:"n3830",loc:[-85.615374,41.951076]},n3831:{id:"n3831",loc:[-85.61932,41.947564]},n3832:{id:"n3832",loc:[-85.610553,41.94755]},n3833:{id:"n3833",loc:[-85.610572,41.951065]},n3834:{id:"n3834",loc:[-85.617548,41.94757]},n3835:{id:"n3835",loc:[-85.619842,41.947939]},n3836:{id:"n3836",loc:[-85.619874,41.950905]},n3837:{id:"n3837",loc:[-85.619695,41.950911]},n3838:{id:"n3838",loc:[-85.617591,41.951078]},n3839:{id:"n3839",loc:[-85.619551,41.951065]},n384:{id:"n384",loc:[-85.632616,41.944021]},n3840:{id:"n3840",loc:[-85.626813,41.947337]},n3841:{id:"n3841",loc:[-85.616371,41.952814]},n3842:{id:"n3842",loc:[-85.617205,41.951308]},n3843:{id:"n3843",loc:[-85.616795,41.950953]},n3844:{id:"n3844",loc:[-85.617441,41.950889]},n3845:{id:"n3845",loc:[-85.619155,41.949377]},n3846:{id:"n3846",loc:[-85.618556,41.949377]},n3847:{id:"n3847",loc:[-85.618557,41.948372]},n3848:{id:"n3848",loc:[-85.619156,41.948372]},n3849:{id:"n3849",loc:[-85.61927,41.949796]},n385:{id:"n385",loc:[-85.632319,41.944172]},n3850:{id:"n3850",loc:[-85.61926,41.948344]},n3851:{id:"n3851",loc:[-85.619219,41.948264]},n3852:{id:"n3852",loc:[-85.619147,41.948196]},n3853:{id:"n3853",loc:[-85.619049,41.948144]},n3854:{id:"n3854",loc:[-85.618942,41.948116]},n3855:{id:"n3855",loc:[-85.618822,41.948109]},n3856:{id:"n3856",loc:[-85.618699,41.94813]},n3857:{id:"n3857",loc:[-85.618937,41.951943]},n3858:{id:"n3858",loc:[-85.616762,41.952222]},n3859:{id:"n3859",loc:[-85.616799,41.95472]},n386:{id:"n386",loc:[-85.63221,41.944066]},n3860:{id:"n3860",loc:[-85.616458,41.954735]},n3861:{id:"n3861",loc:[-85.61763,41.951515]},n3862:{id:"n3862",loc:[-85.617735,41.951572]},n3863:{id:"n3863",loc:[-85.61929,41.951573]},n3864:{id:"n3864",loc:[-85.617134,41.951348]},n3865:{id:"n3865",loc:[-85.616598,41.95192]},n3866:{id:"n3866",loc:[-85.616557,41.951997]},n3867:{id:"n3867",loc:[-85.61658,41.952093]},n3868:{id:"n3868",loc:[-85.616636,41.952145]},n3869:{id:"n3869",loc:[-85.616918,41.952276]},n387:{id:"n387",loc:[-85.632524,41.943912]},n3870:{id:"n3870",loc:[-85.617098,41.952235]},n3871:{id:"n3871",loc:[-85.61892,41.951467]},n3872:{id:"n3872",loc:[-85.618035,41.951473]},n3873:{id:"n3873",loc:[-85.618036,41.951572]},n3874:{id:"n3874",loc:[-85.61892,41.951573]},n3875:{id:"n3875",loc:[-85.618919,41.951957]},n3876:{id:"n3876",loc:[-85.619457,41.952237]},n3877:{id:"n3877",loc:[-85.618178,41.953618]},n3878:{id:"n3878",loc:[-85.617658,41.953366]},n3879:{id:"n3879",loc:[-85.617987,41.953024]},n388:{id:"n388",loc:[-85.632268,41.943621]},n3880:{id:"n3880",loc:[-85.618429,41.953248]},n3881:{id:"n3881",loc:[-85.618554,41.953119]},n3882:{id:"n3882",loc:[-85.618077,41.952868]},n3883:{id:"n3883",loc:[-85.618039,41.952886]},n3884:{id:"n3884",loc:[-85.619375,41.952169]},n3885:{id:"n3885",loc:[-85.618137,41.953538]},n3886:{id:"n3886",loc:[-85.61799,41.953555]},n3887:{id:"n3887",loc:[-85.617729,41.953423]},n3888:{id:"n3888",loc:[-85.618101,41.953029]},n3889:{id:"n3889",loc:[-85.618516,41.953119]},n389:{id:"n389",loc:[-85.631951,41.943773]},n3890:{id:"n3890",loc:[-85.619132,41.952042]},n3891:{id:"n3891",loc:[-85.618235,41.952981]},n3892:{id:"n3892",loc:[-85.618485,41.952425]},n3893:{id:"n3893",loc:[-85.618676,41.952519]},n3894:{id:"n3894",loc:[-85.618942,41.952648]},n3895:{id:"n3895",loc:[-85.618287,41.953122]},n3896:{id:"n3896",loc:[-85.617914,41.953516]},n3897:{id:"n3897",loc:[-85.617836,41.953573]},n3898:{id:"n3898",loc:[-85.616477,41.95289]},n3899:{id:"n3899",loc:[-85.618441,41.953201]},n39:{id:"n39",loc:[-85.619931,41.951013]},n390:{id:"n390",loc:[-85.631981,41.943654]},n3900:{id:"n3900",loc:[-85.617537,41.953335]},n3901:{id:"n3901",loc:[-85.617221,41.953166]},n3902:{id:"n3902",loc:[-85.617253,41.953135]},n3903:{id:"n3903",loc:[-85.617211,41.953114]},n3904:{id:"n3904",loc:[-85.617197,41.95313]},n3905:{id:"n3905",loc:[-85.616802,41.952925]},n3906:{id:"n3906",loc:[-85.616771,41.952928]},n3907:{id:"n3907",loc:[-85.616493,41.952785]},n3908:{id:"n3908",loc:[-85.616823,41.952426]},n3909:{id:"n3909",loc:[-85.617191,41.952616]},n391:{id:"n391",loc:[-85.631886,41.943699]},n3910:{id:"n3910",loc:[-85.61724,41.952559]},n3911:{id:"n3911",loc:[-85.61721,41.952542]},n3912:{id:"n3912",loc:[-85.617395,41.952351]},n3913:{id:"n3913",loc:[-85.617426,41.952368]},n3914:{id:"n3914",loc:[-85.617483,41.952309]},n3915:{id:"n3915",loc:[-85.617332,41.952229]},n3916:{id:"n3916",loc:[-85.617451,41.952102]},n3917:{id:"n3917",loc:[-85.617477,41.952115]},n3918:{id:"n3918",loc:[-85.617658,41.951923]},n3919:{id:"n3919",loc:[-85.617634,41.95191]},n392:{id:"n392",loc:[-85.631807,41.943606]},n3920:{id:"n3920",loc:[-85.617747,41.951786]},n3921:{id:"n3921",loc:[-85.618268,41.952056]},n3922:{id:"n3922",loc:[-85.618211,41.952122]},n3923:{id:"n3923",loc:[-85.618386,41.95222]},n3924:{id:"n3924",loc:[-85.618098,41.952527]},n3925:{id:"n3925",loc:[-85.617916,41.95243]},n3926:{id:"n3926",loc:[-85.617854,41.952498]},n3927:{id:"n3927",loc:[-85.617769,41.952453]},n3928:{id:"n3928",loc:[-85.617476,41.952773]},n3929:{id:"n3929",loc:[-85.617876,41.952973]},n393:{id:"n393",loc:[-85.631902,41.943561]},n3930:{id:"n3930",loc:[-85.617174,41.953638]},n3931:{id:"n3931",loc:[-85.618016,41.953578]},n3932:{id:"n3932",loc:[-85.618107,41.953628]},n3933:{id:"n3933",loc:[-85.618067,41.954268]},n3934:{id:"n3934",loc:[-85.617864,41.954263]},n3935:{id:"n3935",loc:[-85.61762,41.954205]},n3936:{id:"n3936",loc:[-85.617437,41.954103]},n3937:{id:"n3937",loc:[-85.617294,41.953978]},n3938:{id:"n3938",loc:[-85.617217,41.95384]},n3939:{id:"n3939",loc:[-85.616814,41.954327]},n394:{id:"n394",loc:[-85.63236,41.943543]},n3940:{id:"n3940",loc:[-85.616778,41.95381]},n3941:{id:"n3941",loc:[-85.616585,41.953707]},n3942:{id:"n3942",loc:[-85.616458,41.954318]},n3943:{id:"n3943",loc:[-85.616643,41.954345]},n3944:{id:"n3944",loc:[-85.618133,41.951412]},n3945:{id:"n3945",loc:[-85.618326,41.951411]},n3946:{id:"n3946",loc:[-85.618503,41.95141]},n3947:{id:"n3947",loc:[-85.618681,41.951409]},n3948:{id:"n3948",loc:[-85.618868,41.951408]},n3949:{id:"n3949",loc:[-85.617047,41.95136]},n395:{id:"n395",loc:[-85.633839,41.944082]},n3950:{id:"n3950",loc:[-85.616502,41.951946]},n3951:{id:"n3951",loc:[-85.616497,41.952072]},n3952:{id:"n3952",loc:[-85.616565,41.952165]},n3953:{id:"n3953",loc:[-85.616663,41.952218]},n3954:{id:"n3954",loc:[-85.616733,41.952255]},n3955:{id:"n3955",loc:[-85.617238,41.952512],tags:{entrance:"yes"}},n3956:{id:"n3956",loc:[-85.617043,41.952406]},n3957:{id:"n3957",loc:[-85.617691,41.951711]},n3958:{id:"n3958",loc:[-85.617773,41.951679]},n3959:{id:"n3959",loc:[-85.619085,41.951681]},n396:{id:"n396",loc:[-85.63376,41.944097]},n3960:{id:"n3960",loc:[-85.617943,41.952895]},n3961:{id:"n3961",loc:[-85.618039,41.952938]},n3962:{id:"n3962",loc:[-85.61763,41.95336]},n3963:{id:"n3963",loc:[-85.617554,41.95344]},n3964:{id:"n3964",loc:[-85.617381,41.952366],tags:{entrance:"yes"}},n3965:{id:"n3965",loc:[-85.617184,41.952254]},n3966:{id:"n3966",loc:[-85.617208,41.952496]},n3967:{id:"n3967",loc:[-85.617124,41.952581],tags:{entrance:"yes"}},n3968:{id:"n3968",loc:[-85.618094,41.952735]},n3969:{id:"n3969",loc:[-85.617702,41.952525],tags:{entrance:"yes"}},n397:{id:"n397",loc:[-85.63361,41.943957]},n3970:{id:"n3970",loc:[-85.617554,41.952686],tags:{entrance:"yes"}},n3971:{id:"n3971",loc:[-85.617959,41.952878]},n3972:{id:"n3972",loc:[-85.616367,41.952655]},n3973:{id:"n3973",loc:[-85.616416,41.952851]},n3974:{id:"n3974",loc:[-85.619777,41.951075]},n3975:{id:"n3975",loc:[-85.618611,41.94817]},n3976:{id:"n3976",loc:[-85.618538,41.948229]},n3977:{id:"n3977",loc:[-85.617421,41.947559]},n3978:{id:"n3978",loc:[-85.617395,41.951039]},n3979:{id:"n3979",loc:[-85.618488,41.94829]},n398:{id:"n398",loc:[-85.633309,41.943886]},n3980:{id:"n3980",loc:[-85.610238,41.954774]},n3981:{id:"n3981",loc:[-85.617449,41.950756]},n3982:{id:"n3982",loc:[-85.617288,41.951286]},n3983:{id:"n3983",loc:[-85.61745,41.950197]},n3984:{id:"n3984",loc:[-85.617436,41.948908]},n3985:{id:"n3985",loc:[-85.615915,41.953804]},n3986:{id:"n3986",loc:[-85.615953,41.953968]},n3987:{id:"n3987",loc:[-85.616031,41.954085]},n3988:{id:"n3988",loc:[-85.616135,41.954181]},n3989:{id:"n3989",loc:[-85.616273,41.954263]},n399:{id:"n399",loc:[-85.633226,41.943931]},n3990:{id:"n3990",loc:[-85.618327,41.951083]},n3991:{id:"n3991",loc:[-85.618135,41.951084]},n3992:{id:"n3992",loc:[-85.618503,41.951082]},n3993:{id:"n3993",loc:[-85.618682,41.951081]},n3994:{id:"n3994",loc:[-85.618864,41.951082]},n3995:{id:"n3995",loc:[-85.616761,41.950101]},n3996:{id:"n3996",loc:[-85.617317,41.947558]},n3997:{id:"n3997",loc:[-85.617336,41.948883]},n3998:{id:"n3998",loc:[-85.616779,41.949295]},n3999:{id:"n3999",loc:[-85.616754,41.949349]},n4:{id:"n4",loc:[-85.622764,41.950892],tags:{highway:"stop",direction:"forward",stop:"minor"}},n40:{id:"n40",loc:[-85.619841,41.951037]},n400:{id:"n400",loc:[-85.63326,41.943966]},n4000:{id:"n4000",loc:[-85.616761,41.950865]},n4001:{id:"n4001",loc:[-85.616883,41.951041]},n4002:{id:"n4002",loc:[-85.617004,41.951142]},n4003:{id:"n4003",loc:[-85.617062,41.951248]},n4004:{id:"n4004",loc:[-85.616809,41.949273]},n4005:{id:"n4005",loc:[-85.616755,41.949489]},n4006:{id:"n4006",loc:[-85.616759,41.949971]},n4007:{id:"n4007",loc:[-85.616757,41.949702]},n4008:{id:"n4008",loc:[-85.618456,41.94836]},n4009:{id:"n4009",loc:[-85.618447,41.948428]},n401:{id:"n401",loc:[-85.63324,41.943976]},n4010:{id:"n4010",loc:[-85.618437,41.949322]},n4011:{id:"n4011",loc:[-85.618447,41.949418]},n4012:{id:"n4012",loc:[-85.618478,41.949491]},n4013:{id:"n4013",loc:[-85.618535,41.949559]},n4014:{id:"n4014",loc:[-85.618623,41.94962]},n4015:{id:"n4015",loc:[-85.618721,41.94966]},n4016:{id:"n4016",loc:[-85.618838,41.949674]},n4017:{id:"n4017",loc:[-85.618967,41.949667]},n4018:{id:"n4018",loc:[-85.619065,41.949632]},n4019:{id:"n4019",loc:[-85.61915,41.949578]},n402:{id:"n402",loc:[-85.63327,41.944006]},n4020:{id:"n4020",loc:[-85.619216,41.949507]},n4021:{id:"n4021",loc:[-85.61927,41.949399]},n4022:{id:"n4022",loc:[-85.619074,41.947639]},n4023:{id:"n4023",loc:[-85.619073,41.947793]},n4024:{id:"n4024",loc:[-85.618912,41.947793]},n4025:{id:"n4025",loc:[-85.618911,41.947947]},n4026:{id:"n4026",loc:[-85.618752,41.947947]},n4027:{id:"n4027",loc:[-85.618754,41.947637]},n4028:{id:"n4028",loc:[-85.617896,41.947599]},n4029:{id:"n4029",loc:[-85.617898,41.947811]},n403:{id:"n403",loc:[-85.633278,41.944002]},n4030:{id:"n4030",loc:[-85.617717,41.947812]},n4031:{id:"n4031",loc:[-85.617715,41.9476]},n4032:{id:"n4032",loc:[-85.619003,41.949828]},n4033:{id:"n4033",loc:[-85.619003,41.949882]},n4034:{id:"n4034",loc:[-85.618926,41.949882]},n4035:{id:"n4035",loc:[-85.618926,41.949828]},n4036:{id:"n4036",loc:[-85.618861,41.949809]},n4037:{id:"n4037",loc:[-85.618861,41.949898]},n4038:{id:"n4038",loc:[-85.618688,41.949898]},n4039:{id:"n4039",loc:[-85.618687,41.94981]},n404:{id:"n404",loc:[-85.63331,41.944036]},n4040:{id:"n4040",loc:[-85.618349,41.949473]},n4041:{id:"n4041",loc:[-85.618287,41.949473]},n4042:{id:"n4042",loc:[-85.618287,41.94942]},n4043:{id:"n4043",loc:[-85.618348,41.949419]},n4044:{id:"n4044",loc:[-85.62316,41.951604]},n4045:{id:"n4045",loc:[-85.623026,41.951605]},n4046:{id:"n4046",loc:[-85.623023,41.951466]},n4047:{id:"n4047",loc:[-85.623134,41.951465]},n4048:{id:"n4048",loc:[-85.623136,41.951539]},n4049:{id:"n4049",loc:[-85.623159,41.951539]},n405:{id:"n405",loc:[-85.633348,41.944015]},n4050:{id:"n4050",loc:[-85.623025,41.95155]},n4051:{id:"n4051",loc:[-85.622955,41.951551]},n4052:{id:"n4052",loc:[-85.622953,41.951507]},n4053:{id:"n4053",loc:[-85.623024,41.951506]},n4054:{id:"n4054",loc:[-85.623318,41.951242]},n4055:{id:"n4055",loc:[-85.623175,41.951241]},n4056:{id:"n4056",loc:[-85.623176,41.951153]},n4057:{id:"n4057",loc:[-85.623319,41.951154]},n4058:{id:"n4058",loc:[-85.623077,41.951191]},n4059:{id:"n4059",loc:[-85.622973,41.951191]},n406:{id:"n406",loc:[-85.63338,41.944048]},n4060:{id:"n4060",loc:[-85.622972,41.951349]},n4061:{id:"n4061",loc:[-85.623059,41.95135]},n4062:{id:"n4062",loc:[-85.62306,41.951301]},n4063:{id:"n4063",loc:[-85.623077,41.951301]},n4064:{id:"n4064",loc:[-85.623117,41.951405]},n4065:{id:"n4065",loc:[-85.62312,41.951087]},n4066:{id:"n4066",loc:[-85.623118,41.951274]},n4067:{id:"n4067",loc:[-85.62328,41.951275]},n4068:{id:"n4068",loc:[-85.62328,41.951242]},n4069:{id:"n4069",loc:[-85.623179,41.951392]},n407:{id:"n407",loc:[-85.633431,41.94402]},n4070:{id:"n4070",loc:[-85.623141,41.951392]},n4071:{id:"n4071",loc:[-85.623142,41.95136]},n4072:{id:"n4072",loc:[-85.623179,41.951361]},n4073:{id:"n4073",loc:[-85.622565,41.951639]},n4074:{id:"n4074",loc:[-85.622565,41.951741]},n4075:{id:"n4075",loc:[-85.622463,41.95174]},n4076:{id:"n4076",loc:[-85.622463,41.95173]},n4077:{id:"n4077",loc:[-85.622442,41.95173]},n4078:{id:"n4078",loc:[-85.622442,41.951742]},n4079:{id:"n4079",loc:[-85.622361,41.951742]},n408:{id:"n408",loc:[-85.633425,41.944014]},n4080:{id:"n4080",loc:[-85.622362,41.951667]},n4081:{id:"n4081",loc:[-85.622441,41.951667]},n4082:{id:"n4082",loc:[-85.622441,41.951688]},n4083:{id:"n4083",loc:[-85.622461,41.951688]},n4084:{id:"n4084",loc:[-85.622461,41.951638]},n4085:{id:"n4085",loc:[-85.62255,41.951587]},n4086:{id:"n4086",loc:[-85.622449,41.95159]},n4087:{id:"n4087",loc:[-85.622441,41.951448]},n4088:{id:"n4088",loc:[-85.62253,41.951445]},n4089:{id:"n4089",loc:[-85.622532,41.951486]},n409:{id:"n409",loc:[-85.633457,41.943997]},n4090:{id:"n4090",loc:[-85.622555,41.951485]},n4091:{id:"n4091",loc:[-85.622558,41.951531]},n4092:{id:"n4092",loc:[-85.622547,41.951531]},n4093:{id:"n4093",loc:[-85.622451,41.95159]},n4094:{id:"n4094",loc:[-85.622452,41.95161]},n4095:{id:"n4095",loc:[-85.622106,41.951617]},n4096:{id:"n4096",loc:[-85.622133,41.951443]},n4097:{id:"n4097",loc:[-85.622552,41.951379]},n4098:{id:"n4098",loc:[-85.622443,41.95138]},n4099:{id:"n4099",loc:[-85.622441,41.951281]},n41:{id:"n41",loc:[-85.636233,41.942764]},n410:{id:"n410",loc:[-85.633429,41.943969]},n4100:{id:"n4100",loc:[-85.62255,41.95128]},n4101:{id:"n4101",loc:[-85.622541,41.951437]},n4102:{id:"n4102",loc:[-85.622441,41.951438]},n4103:{id:"n4103",loc:[-85.621561,41.951444]},n4104:{id:"n4104",loc:[-85.622302,41.951479]},n4105:{id:"n4105",loc:[-85.6223,41.95152]},n4106:{id:"n4106",loc:[-85.622169,41.951517]},n4107:{id:"n4107",loc:[-85.622171,41.951476]},n4108:{id:"n4108",loc:[-85.622543,41.951228]},n4109:{id:"n4109",loc:[-85.622433,41.951228]},n411:{id:"n411",loc:[-85.633442,41.943962]},n4110:{id:"n4110",loc:[-85.622433,41.951133]},n4111:{id:"n4111",loc:[-85.622543,41.951133]},n4112:{id:"n4112",loc:[-85.622356,41.951256]},n4113:{id:"n4113",loc:[-85.622293,41.951256]},n4114:{id:"n4114",loc:[-85.622292,41.9512]},n4115:{id:"n4115",loc:[-85.622313,41.9512]},n4116:{id:"n4116",loc:[-85.622312,41.951173]},n4117:{id:"n4117",loc:[-85.622364,41.951173]},n4118:{id:"n4118",loc:[-85.622365,41.951231]},n4119:{id:"n4119",loc:[-85.622355,41.951231]},n412:{id:"n412",loc:[-85.633411,41.943932]},n4120:{id:"n4120",loc:[-85.62197,41.951155]},n4121:{id:"n4121",loc:[-85.62197,41.951213]},n4122:{id:"n4122",loc:[-85.621848,41.951213]},n4123:{id:"n4123",loc:[-85.621848,41.951155]},n4124:{id:"n4124",loc:[-85.622193,41.951268]},n4125:{id:"n4125",loc:[-85.622194,41.951305]},n4126:{id:"n4126",loc:[-85.622121,41.951306]},n4127:{id:"n4127",loc:[-85.622121,41.951322]},n4128:{id:"n4128",loc:[-85.621984,41.951324]},n4129:{id:"n4129",loc:[-85.621983,41.951271]},n413:{id:"n413",loc:[-85.633421,41.943926]},n4130:{id:"n4130",loc:[-85.622171,41.9514]},n4131:{id:"n4131",loc:[-85.622148,41.951382]},n4132:{id:"n4132",loc:[-85.6221,41.951414]},n4133:{id:"n4133",loc:[-85.622122,41.951433]},n4134:{id:"n4134",loc:[-85.621782,41.951148]},n4135:{id:"n4135",loc:[-85.621783,41.951219]},n4136:{id:"n4136",loc:[-85.62164,41.951221]},n4137:{id:"n4137",loc:[-85.62164,41.951236]},n4138:{id:"n4138",loc:[-85.621556,41.951237]},n4139:{id:"n4139",loc:[-85.621555,41.95117]},n414:{id:"n414",loc:[-85.633376,41.94388]},n4140:{id:"n4140",loc:[-85.621644,41.951169]},n4141:{id:"n4141",loc:[-85.621643,41.951139]},n4142:{id:"n4142",loc:[-85.621719,41.951138]},n4143:{id:"n4143",loc:[-85.621719,41.951148]},n4144:{id:"n4144",loc:[-85.621409,41.951322]},n4145:{id:"n4145",loc:[-85.621338,41.951322]},n4146:{id:"n4146",loc:[-85.621336,41.95115]},n4147:{id:"n4147",loc:[-85.621521,41.951149]},n4148:{id:"n4148",loc:[-85.621522,41.951228]},n4149:{id:"n4149",loc:[-85.621408,41.951228]},n415:{id:"n415",loc:[-85.633348,41.943895]},n4150:{id:"n4150",loc:[-85.621284,41.951219]},n4151:{id:"n4151",loc:[-85.621153,41.951219]},n4152:{id:"n4152",loc:[-85.621152,41.951152]},n4153:{id:"n4153",loc:[-85.621283,41.951152]},n4154:{id:"n4154",loc:[-85.621159,41.951241]},n4155:{id:"n4155",loc:[-85.62116,41.951301]},n4156:{id:"n4156",loc:[-85.621088,41.951302]},n4157:{id:"n4157",loc:[-85.621088,41.951241]},n4158:{id:"n4158",loc:[-85.621049,41.951158]},n4159:{id:"n4159",loc:[-85.62105,41.951229]},n416:{id:"n416",loc:[-85.633341,41.943888]},n4160:{id:"n4160",loc:[-85.620976,41.951229]},n4161:{id:"n4161",loc:[-85.620977,41.951295]},n4162:{id:"n4162",loc:[-85.620887,41.951296]},n4163:{id:"n4163",loc:[-85.620886,41.951229]},n4164:{id:"n4164",loc:[-85.620862,41.951229]},n4165:{id:"n4165",loc:[-85.620861,41.951159]},n4166:{id:"n4166",loc:[-85.620626,41.951133]},n4167:{id:"n4167",loc:[-85.620626,41.951205]},n4168:{id:"n4168",loc:[-85.620412,41.951206]},n4169:{id:"n4169",loc:[-85.620411,41.951134]},n417:{id:"n417",loc:[-85.633321,41.943898]},n4170:{id:"n4170",loc:[-85.621775,41.951443]},n4171:{id:"n4171",loc:[-85.621777,41.951264]},n4172:{id:"n4172",loc:[-85.621565,41.951654]},n4173:{id:"n4173",loc:[-85.621331,41.951439]},n4174:{id:"n4174",loc:[-85.621031,41.951443]},n4175:{id:"n4175",loc:[-85.621836,41.951724]},n4176:{id:"n4176",loc:[-85.621834,41.951621]},n4177:{id:"n4177",loc:[-85.62197,41.951619]},n4178:{id:"n4178",loc:[-85.621972,41.951722]},n4179:{id:"n4179",loc:[-85.621772,41.951638]},n418:{id:"n418",loc:[-85.633547,41.943896]},n4180:{id:"n4180",loc:[-85.621772,41.951715]},n4181:{id:"n4181",loc:[-85.621699,41.951716]},n4182:{id:"n4182",loc:[-85.6217,41.951722]},n4183:{id:"n4183",loc:[-85.621641,41.951722]},n4184:{id:"n4184",loc:[-85.62164,41.951639]},n4185:{id:"n4185",loc:[-85.621505,41.951655]},n4186:{id:"n4186",loc:[-85.621505,41.951729]},n4187:{id:"n4187",loc:[-85.621389,41.951729]},n4188:{id:"n4188",loc:[-85.62139,41.951654]},n4189:{id:"n4189",loc:[-85.621105,41.951635]},n419:{id:"n419",loc:[-85.633467,41.944075]},n4190:{id:"n4190",loc:[-85.621104,41.951576]},n4191:{id:"n4191",loc:[-85.621168,41.951576]},n4192:{id:"n4192",loc:[-85.621168,41.951595]},n4193:{id:"n4193",loc:[-85.621261,41.951595]},n4194:{id:"n4194",loc:[-85.621261,41.951646]},n4195:{id:"n4195",loc:[-85.621294,41.951646]},n4196:{id:"n4196",loc:[-85.621294,41.951732]},n4197:{id:"n4197",loc:[-85.621251,41.951732]},n4198:{id:"n4198",loc:[-85.621251,41.95174]},n4199:{id:"n4199",loc:[-85.621175,41.951741]},n42:{id:"n42",loc:[-85.635996,41.942727]},n420:{id:"n420",loc:[-85.633578,41.944055]},n4200:{id:"n4200",loc:[-85.621175,41.951651]},n4201:{id:"n4201",loc:[-85.621189,41.951651]},n4202:{id:"n4202",loc:[-85.621189,41.951635]},n4203:{id:"n4203",loc:[-85.620554,41.951641]},n4204:{id:"n4204",loc:[-85.620555,41.951742]},n4205:{id:"n4205",loc:[-85.620719,41.951742]},n4206:{id:"n4206",loc:[-85.620719,41.951731]},n4207:{id:"n4207",loc:[-85.620803,41.95173]},n4208:{id:"n4208",loc:[-85.620803,41.951603]},n4209:{id:"n4209",loc:[-85.62072,41.951603]},n421:{id:"n421",loc:[-85.633462,41.944125]},n4210:{id:"n4210",loc:[-85.620721,41.951641]},n4211:{id:"n4211",loc:[-85.620269,41.953053]},n4212:{id:"n4212",loc:[-85.620229,41.953051]},n4213:{id:"n4213",loc:[-85.620231,41.953013]},n4214:{id:"n4214",loc:[-85.620271,41.953015]},n4215:{id:"n4215",loc:[-85.620215,41.953133]},n4216:{id:"n4216",loc:[-85.62013,41.953134]},n4217:{id:"n4217",loc:[-85.620129,41.953083]},n4218:{id:"n4218",loc:[-85.620214,41.953082]},n4219:{id:"n4219",loc:[-85.62016,41.953272]},n422:{id:"n422",loc:[-85.633372,41.944061]},n4220:{id:"n4220",loc:[-85.620046,41.953273]},n4221:{id:"n4221",loc:[-85.620045,41.953171]},n4222:{id:"n4222",loc:[-85.620088,41.953171]},n4223:{id:"n4223",loc:[-85.620087,41.953162]},n4224:{id:"n4224",loc:[-85.620121,41.953162]},n4225:{id:"n4225",loc:[-85.620121,41.953173]},n4226:{id:"n4226",loc:[-85.620157,41.953173]},n4227:{id:"n4227",loc:[-85.620158,41.953196]},n4228:{id:"n4228",loc:[-85.620189,41.953196]},n4229:{id:"n4229",loc:[-85.620189,41.953246]},n423:{id:"n423",loc:[-85.633509,41.943981]},n4230:{id:"n4230",loc:[-85.62016,41.953246]},n4231:{id:"n4231",loc:[-85.6195,41.954012]},n4232:{id:"n4232",loc:[-85.619438,41.954057]},n4233:{id:"n4233",loc:[-85.619418,41.954043]},n4234:{id:"n4234",loc:[-85.619381,41.954069]},n4235:{id:"n4235",loc:[-85.619399,41.954083]},n4236:{id:"n4236",loc:[-85.619339,41.954126]},n4237:{id:"n4237",loc:[-85.619584,41.954313]},n4238:{id:"n4238",loc:[-85.619743,41.954198]},n4239:{id:"n4239",loc:[-85.619453,41.954727]},n424:{id:"n424",loc:[-85.635421,41.945367]},n4240:{id:"n4240",loc:[-85.619503,41.954581]},n4241:{id:"n4241",loc:[-85.619597,41.954472]},n4242:{id:"n4242",loc:[-85.619862,41.95419]},n4243:{id:"n4243",loc:[-85.619506,41.953907]},n4244:{id:"n4244",loc:[-85.619261,41.9541]},n4245:{id:"n4245",loc:[-85.619246,41.954139]},n4246:{id:"n4246",loc:[-85.619244,41.9542]},n4247:{id:"n4247",loc:[-85.619259,41.954243]},n4248:{id:"n4248",loc:[-85.619285,41.954274]},n4249:{id:"n4249",loc:[-85.619123,41.954381]},n425:{id:"n425",loc:[-85.634425,41.943552]},n4250:{id:"n4250",loc:[-85.619641,41.954607]},n4251:{id:"n4251",loc:[-85.619383,41.954615]},n4252:{id:"n4252",loc:[-85.61896,41.954391]},n4253:{id:"n4253",loc:[-85.619211,41.954178]},n4254:{id:"n4254",loc:[-85.619115,41.954102]},n4255:{id:"n4255",loc:[-85.619519,41.953821]},n4256:{id:"n4256",loc:[-85.619956,41.954156]},n4257:{id:"n4257",loc:[-85.619851,41.954266]},n4258:{id:"n4258",loc:[-85.619779,41.95436]},n4259:{id:"n4259",loc:[-85.620525,41.954364]},n426:{id:"n426",loc:[-85.634248,41.943654]},n4260:{id:"n4260",loc:[-85.620398,41.954365]},n4261:{id:"n4261",loc:[-85.620398,41.954324]},n4262:{id:"n4262",loc:[-85.620525,41.954323]},n4263:{id:"n4263",loc:[-85.620359,41.954588]},n4264:{id:"n4264",loc:[-85.620321,41.954588]},n4265:{id:"n4265",loc:[-85.620321,41.954599]},n4266:{id:"n4266",loc:[-85.620296,41.954599]},n4267:{id:"n4267",loc:[-85.620296,41.954587]},n4268:{id:"n4268",loc:[-85.620262,41.954588]},n4269:{id:"n4269",loc:[-85.620261,41.954516]},n427:{id:"n427",loc:[-85.634177,41.943585]},n4270:{id:"n4270",loc:[-85.620282,41.954516]},n4271:{id:"n4271",loc:[-85.620282,41.954373]},n4272:{id:"n4272",loc:[-85.620378,41.954373]},n4273:{id:"n4273",loc:[-85.620379,41.954486]},n4274:{id:"n4274",loc:[-85.620348,41.954486]},n4275:{id:"n4275",loc:[-85.620348,41.954537]},n4276:{id:"n4276",loc:[-85.620359,41.954537]},n4277:{id:"n4277",loc:[-85.620463,41.95521]},n4278:{id:"n4278",loc:[-85.620409,41.955273]},n4279:{id:"n4279",loc:[-85.620205,41.955177]},n428:{id:"n428",loc:[-85.634354,41.943484]},n4280:{id:"n4280",loc:[-85.620288,41.955079]},n4281:{id:"n4281",loc:[-85.620379,41.955121]},n4282:{id:"n4282",loc:[-85.620349,41.955157]},n4283:{id:"n4283",loc:[-85.620083,41.955101]},n4284:{id:"n4284",loc:[-85.620083,41.954986]},n4285:{id:"n4285",loc:[-85.620016,41.954986]},n4286:{id:"n4286",loc:[-85.620016,41.954999]},n4287:{id:"n4287",loc:[-85.619941,41.954999]},n4288:{id:"n4288",loc:[-85.619941,41.954988]},n4289:{id:"n4289",loc:[-85.619815,41.954988]},n429:{id:"n429",loc:[-85.638577,41.943212]},n4290:{id:"n4290",loc:[-85.619815,41.955075]},n4291:{id:"n4291",loc:[-85.619948,41.955075]},n4292:{id:"n4292",loc:[-85.619948,41.955082]},n4293:{id:"n4293",loc:[-85.620004,41.955082]},n4294:{id:"n4294",loc:[-85.620004,41.955101]},n4295:{id:"n4295",loc:[-85.619293,41.955127]},n4296:{id:"n4296",loc:[-85.619208,41.955124]},n4297:{id:"n4297",loc:[-85.619212,41.955061]},n4298:{id:"n4298",loc:[-85.619297,41.955064]},n4299:{id:"n4299",loc:[-85.619068,41.954936]},n43:{id:"n43",loc:[-85.637047,41.943054]},n430:{id:"n430",loc:[-85.638576,41.943219]},n4300:{id:"n4300",loc:[-85.619003,41.954936]},n4301:{id:"n4301",loc:[-85.619004,41.955003]},n4302:{id:"n4302",loc:[-85.618994,41.955003]},n4303:{id:"n4303",loc:[-85.618994,41.955016]},n4304:{id:"n4304",loc:[-85.618973,41.955016]},n4305:{id:"n4305",loc:[-85.618973,41.955071]},n4306:{id:"n4306",loc:[-85.619061,41.955071]},n4307:{id:"n4307",loc:[-85.61906,41.955024]},n4308:{id:"n4308",loc:[-85.619105,41.955024]},n4309:{id:"n4309",loc:[-85.619105,41.954956]},n431:{id:"n431",loc:[-85.638653,41.943078]},n4310:{id:"n4310",loc:[-85.619068,41.954956]},n4311:{id:"n4311",loc:[-85.618294,41.954596]},n4312:{id:"n4312",loc:[-85.618235,41.954602]},n4313:{id:"n4313",loc:[-85.618222,41.954535]},n4314:{id:"n4314",loc:[-85.618281,41.954529]},n4315:{id:"n4315",loc:[-85.618593,41.954556]},n4316:{id:"n4316",loc:[-85.618551,41.954565]},n4317:{id:"n4317",loc:[-85.618545,41.954552]},n4318:{id:"n4318",loc:[-85.618493,41.954563]},n4319:{id:"n4319",loc:[-85.618449,41.954455]},n432:{id:"n432",loc:[-85.638654,41.943148]},n4320:{id:"n4320",loc:[-85.618544,41.954434]},n4321:{id:"n4321",loc:[-85.622545,41.950775]},n4322:{id:"n4322",loc:[-85.622546,41.950843]},n4323:{id:"n4323",loc:[-85.622503,41.950844]},n4324:{id:"n4324",loc:[-85.622503,41.950853]},n4325:{id:"n4325",loc:[-85.622479,41.950853]},n4326:{id:"n4326",loc:[-85.622478,41.950843]},n4327:{id:"n4327",loc:[-85.622425,41.950843]},n4328:{id:"n4328",loc:[-85.622425,41.950808]},n4329:{id:"n4329",loc:[-85.622366,41.950809]},n433:{id:"n433",loc:[-85.638387,41.943151]},n4330:{id:"n4330",loc:[-85.622364,41.950673]},n4331:{id:"n4331",loc:[-85.622448,41.950673]},n4332:{id:"n4332",loc:[-85.622449,41.950732]},n4333:{id:"n4333",loc:[-85.622479,41.950731]},n4334:{id:"n4334",loc:[-85.622479,41.950775]},n4335:{id:"n4335",loc:[-85.621909,41.950641]},n4336:{id:"n4336",loc:[-85.621864,41.950641]},n4337:{id:"n4337",loc:[-85.621865,41.950567]},n4338:{id:"n4338",loc:[-85.62191,41.950567]},n4339:{id:"n4339",loc:[-85.621787,41.950829]},n434:{id:"n434",loc:[-85.638386,41.94308]},n4340:{id:"n4340",loc:[-85.621786,41.950775]},n4341:{id:"n4341",loc:[-85.621588,41.950776]},n4342:{id:"n4342",loc:[-85.621589,41.950848]},n4343:{id:"n4343",loc:[-85.621737,41.950847]},n4344:{id:"n4344",loc:[-85.621737,41.950829]},n4345:{id:"n4345",loc:[-85.621509,41.950846]},n4346:{id:"n4346",loc:[-85.621399,41.950846]},n4347:{id:"n4347",loc:[-85.621398,41.95073]},n4348:{id:"n4348",loc:[-85.621509,41.95073]},n4349:{id:"n4349",loc:[-85.621217,41.950841]},n435:{id:"n435",loc:[-85.634427,41.943533]},n4350:{id:"n4350",loc:[-85.6211,41.95084]},n4351:{id:"n4351",loc:[-85.6211,41.950777]},n4352:{id:"n4352",loc:[-85.621218,41.950778]},n4353:{id:"n4353",loc:[-85.621055,41.950764]},n4354:{id:"n4354",loc:[-85.621054,41.950826]},n4355:{id:"n4355",loc:[-85.620988,41.950826]},n4356:{id:"n4356",loc:[-85.620988,41.950843]},n4357:{id:"n4357",loc:[-85.620842,41.950843]},n4358:{id:"n4358",loc:[-85.620842,41.950764]},n4359:{id:"n4359",loc:[-85.620825,41.950922]},n436:{id:"n436",loc:[-85.63428,41.943229]},n4360:{id:"n4360",loc:[-85.620824,41.950553]},n4361:{id:"n4361",loc:[-85.620543,41.950771]},n4362:{id:"n4362",loc:[-85.620431,41.950772]},n4363:{id:"n4363",loc:[-85.62043,41.950585]},n4364:{id:"n4364",loc:[-85.620542,41.950585]},n4365:{id:"n4365",loc:[-85.62068,41.950505]},n4366:{id:"n4366",loc:[-85.620681,41.950552]},n4367:{id:"n4367",loc:[-85.620589,41.950553]},n4368:{id:"n4368",loc:[-85.620588,41.950506]},n4369:{id:"n4369",loc:[-85.620539,41.950407]},n437:{id:"n437",loc:[-85.634499,41.943461]},n4370:{id:"n4370",loc:[-85.62054,41.950504]},n4371:{id:"n4371",loc:[-85.620416,41.950504]},n4372:{id:"n4372",loc:[-85.620416,41.950408]},n4373:{id:"n4373",loc:[-85.620742,41.95038]},n4374:{id:"n4374",loc:[-85.620527,41.95038]},n4375:{id:"n4375",loc:[-85.620528,41.950408]},n4376:{id:"n4376",loc:[-85.622449,41.950373]},n4377:{id:"n4377",loc:[-85.622452,41.950397]},n4378:{id:"n4378",loc:[-85.622336,41.950404]},n4379:{id:"n4379",loc:[-85.622333,41.950379]},n438:{id:"n438",loc:[-85.634514,41.943486]},n4380:{id:"n4380",loc:[-85.622263,41.950324]},n4381:{id:"n4381",loc:[-85.622261,41.950256]},n4382:{id:"n4382",loc:[-85.62236,41.950254]},n4383:{id:"n4383",loc:[-85.62236,41.95027]},n4384:{id:"n4384",loc:[-85.622402,41.950281]},n4385:{id:"n4385",loc:[-85.622403,41.9503]},n4386:{id:"n4386",loc:[-85.622439,41.950299]},n4387:{id:"n4387",loc:[-85.62244,41.950334]},n4388:{id:"n4388",loc:[-85.622414,41.950335]},n4389:{id:"n4389",loc:[-85.622414,41.95036]},n439:{id:"n439",loc:[-85.63452,41.943511]},n4390:{id:"n4390",loc:[-85.62231,41.950362]},n4391:{id:"n4391",loc:[-85.622309,41.950323]},n4392:{id:"n4392",loc:[-85.622015,41.950539]},n4393:{id:"n4393",loc:[-85.621909,41.95054]},n4394:{id:"n4394",loc:[-85.621909,41.950472]},n4395:{id:"n4395",loc:[-85.622015,41.950471]},n4396:{id:"n4396",loc:[-85.62199,41.950439]},n4397:{id:"n4397",loc:[-85.621956,41.95044]},n4398:{id:"n4398",loc:[-85.621955,41.950405]},n4399:{id:"n4399",loc:[-85.621988,41.950404]},n44:{id:"n44",loc:[-85.636799,41.943055]},n440:{id:"n440",loc:[-85.63451,41.943534]},n4400:{id:"n4400",loc:[-85.621668,41.950418]},n4401:{id:"n4401",loc:[-85.621667,41.950343]},n4402:{id:"n4402",loc:[-85.621745,41.950342]},n4403:{id:"n4403",loc:[-85.621744,41.950306]},n4404:{id:"n4404",loc:[-85.621764,41.950306]},n4405:{id:"n4405",loc:[-85.621763,41.950254]},n4406:{id:"n4406",loc:[-85.621861,41.950253]},n4407:{id:"n4407",loc:[-85.621861,41.950274]},n4408:{id:"n4408",loc:[-85.621896,41.950273]},n4409:{id:"n4409",loc:[-85.621898,41.950389]},n441:{id:"n441",loc:[-85.634483,41.943556]},n4410:{id:"n4410",loc:[-85.621843,41.95039]},n4411:{id:"n4411",loc:[-85.621843,41.950425]},n4412:{id:"n4412",loc:[-85.621789,41.950425]},n4413:{id:"n4413",loc:[-85.621789,41.950386]},n4414:{id:"n4414",loc:[-85.621752,41.950387]},n4415:{id:"n4415",loc:[-85.621753,41.950417]},n4416:{id:"n4416",loc:[-85.621556,41.950562]},n4417:{id:"n4417",loc:[-85.621552,41.950217]},n4418:{id:"n4418",loc:[-85.621788,41.950562]},n4419:{id:"n4419",loc:[-85.621155,41.950562]},n442:{id:"n442",loc:[-85.63419,41.943713]},n4420:{id:"n4420",loc:[-85.622473,41.950551]},n4421:{id:"n4421",loc:[-85.622043,41.950551]},n4422:{id:"n4422",loc:[-85.62142,41.950454]},n4423:{id:"n4423",loc:[-85.621315,41.950455]},n4424:{id:"n4424",loc:[-85.621313,41.950311]},n4425:{id:"n4425",loc:[-85.621388,41.950311]},n4426:{id:"n4426",loc:[-85.621387,41.950261]},n4427:{id:"n4427",loc:[-85.621468,41.95026]},n4428:{id:"n4428",loc:[-85.621468,41.950271]},n4429:{id:"n4429",loc:[-85.621503,41.95027]},n443:{id:"n443",loc:[-85.634462,41.943294]},n4430:{id:"n4430",loc:[-85.621505,41.950353]},n4431:{id:"n4431",loc:[-85.621483,41.950354]},n4432:{id:"n4432",loc:[-85.621483,41.950392]},n4433:{id:"n4433",loc:[-85.621419,41.950393]},n4434:{id:"n4434",loc:[-85.621213,41.95039]},n4435:{id:"n4435",loc:[-85.621127,41.950391]},n4436:{id:"n4436",loc:[-85.621126,41.950357]},n4437:{id:"n4437",loc:[-85.621094,41.950357]},n4438:{id:"n4438",loc:[-85.621094,41.950391]},n4439:{id:"n4439",loc:[-85.620977,41.950392]},n444:{id:"n444",loc:[-85.634298,41.943389]},n4440:{id:"n4440",loc:[-85.620975,41.950278]},n4441:{id:"n4441",loc:[-85.621087,41.950277]},n4442:{id:"n4442",loc:[-85.621088,41.950331]},n4443:{id:"n4443",loc:[-85.621211,41.950312]},n4444:{id:"n4444",loc:[-85.621104,41.950313]},n4445:{id:"n4445",loc:[-85.621105,41.950331]},n4446:{id:"n4446",loc:[-85.620706,41.950328]},n4447:{id:"n4447",loc:[-85.620606,41.950327]},n4448:{id:"n4448",loc:[-85.620607,41.950261]},n4449:{id:"n4449",loc:[-85.620707,41.950262]},n445:{id:"n445",loc:[-85.634527,41.943623]},n4450:{id:"n4450",loc:[-85.620599,41.950336]},n4451:{id:"n4451",loc:[-85.620559,41.950336]},n4452:{id:"n4452",loc:[-85.620559,41.950299]},n4453:{id:"n4453",loc:[-85.620599,41.950299]},n4454:{id:"n4454",loc:[-85.620545,41.950357]},n4455:{id:"n4455",loc:[-85.620418,41.950357]},n4456:{id:"n4456",loc:[-85.620417,41.950257]},n4457:{id:"n4457",loc:[-85.620544,41.950256]},n4458:{id:"n4458",loc:[-85.620246,41.950131],tags:{highway:"crossing"}},n4459:{id:"n4459",loc:[-85.620252,41.950956]},n446:{id:"n446",loc:[-85.634608,41.943577]},n4460:{id:"n4460",loc:[-85.620245,41.950179]},n4461:{id:"n4461",loc:[-85.620246,41.950088]},n4462:{id:"n4462",loc:[-85.620251,41.950885]},n4463:{id:"n4463",loc:[-85.620103,41.950884],tags:{crossing:"marked",highway:"crossing"}},n4464:{id:"n4464",loc:[-85.619992,41.950884]},n4465:{id:"n4465",loc:[-85.619704,41.951008]},n4466:{id:"n4466",loc:[-85.619599,41.951122]},n4467:{id:"n4467",loc:[-85.619264,41.951486]},n4468:{id:"n4468",loc:[-85.619179,41.951573],tags:{highway:"crossing"}},n4469:{id:"n4469",loc:[-85.620251,41.950999],tags:{highway:"crossing"}},n447:{id:"n447",loc:[-85.634555,41.943531]},n4470:{id:"n4470",loc:[-85.620249,41.951066]},n4471:{id:"n4471",loc:[-85.620256,41.951374]},n4472:{id:"n4472",loc:[-85.620249,41.951389]},n4473:{id:"n4473",loc:[-85.620249,41.951407]},n4474:{id:"n4474",loc:[-85.620255,41.951423]},n4475:{id:"n4475",loc:[-85.62026,41.951853]},n4476:{id:"n4476",loc:[-85.620262,41.951894],tags:{highway:"crossing"}},n4477:{id:"n4477",loc:[-85.620265,41.951957]},n4478:{id:"n4478",loc:[-85.620262,41.952135]},n4479:{id:"n4479",loc:[-85.620241,41.952424]},n448:{id:"n448",loc:[-85.634555,41.943482]},n4480:{id:"n4480",loc:[-85.620213,41.952583]},n4481:{id:"n4481",loc:[-85.620158,41.952754]},n4482:{id:"n4482",loc:[-85.620065,41.952942]},n4483:{id:"n4483",loc:[-85.619753,41.953439]},n4484:{id:"n4484",loc:[-85.619605,41.953626]},n4485:{id:"n4485",loc:[-85.619381,41.953834]},n4486:{id:"n4486",loc:[-85.619069,41.954066]},n4487:{id:"n4487",loc:[-85.618674,41.95429]},n4488:{id:"n4488",loc:[-85.621816,41.952389]},n4489:{id:"n4489",loc:[-85.6217,41.952386]},n449:{id:"n449",loc:[-85.634509,41.943427]},n4490:{id:"n4490",loc:[-85.621705,41.952306]},n4491:{id:"n4491",loc:[-85.621821,41.95231]},n4492:{id:"n4492",loc:[-85.621819,41.952272]},n4493:{id:"n4493",loc:[-85.621778,41.952272]},n4494:{id:"n4494",loc:[-85.621778,41.952199]},n4495:{id:"n4495",loc:[-85.621818,41.952199]},n4496:{id:"n4496",loc:[-85.621754,41.952281]},n4497:{id:"n4497",loc:[-85.621701,41.95228]},n4498:{id:"n4498",loc:[-85.621702,41.952197]},n4499:{id:"n4499",loc:[-85.621755,41.952197]},n45:{id:"n45",loc:[-85.636791,41.942792]},n450:{id:"n450",loc:[-85.63453,41.943365]},n4500:{id:"n4500",loc:[-85.628201,41.954694],tags:{highway:"stop",stop:"all",direction:"forward"}},n4501:{id:"n4501",loc:[-85.627921,41.954783],tags:{highway:"stop",stop:"all",direction:"backward"}},n4502:{id:"n4502",loc:[-85.62775,41.954696],tags:{highway:"stop",stop:"all",direction:"backward"}},n4503:{id:"n4503",loc:[-85.628046,41.954591],tags:{highway:"stop",stop:"all",direction:"forward"}},n4504:{id:"n4504",loc:[-85.631074,41.957428],tags:{highway:"stop",direction:"backward",stop:"minor"}},n4505:{id:"n4505",loc:[-85.630768,41.957429],tags:{highway:"stop",direction:"forward",stop:"minor"}},n4506:{id:"n4506",loc:[-85.629888,41.957432],tags:{highway:"stop",direction:"backward",stop:"minor"}},n4507:{id:"n4507",loc:[-85.629565,41.957433],tags:{highway:"stop",stop:"minor",direction:"forward"}},n4508:{id:"n4508",loc:[-85.629559,41.957343]},n4509:{id:"n4509",loc:[-85.628723,41.95735]},n451:{id:"n451",loc:[-85.634356,41.943468]},n4510:{id:"n4510",loc:[-85.62842,41.957515]},n4511:{id:"n4511",loc:[-85.627561,41.957525]},n4512:{id:"n4512",loc:[-85.630323,41.957508]},n4513:{id:"n4513",loc:[-85.630811,41.957506]},n4514:{id:"n4514",loc:[-85.630839,41.960874]},n4515:{id:"n4515",loc:[-85.631035,41.957506]},n4516:{id:"n4516",loc:[-85.632027,41.9575]},n4517:{id:"n4517",loc:[-85.631038,41.958066]},n4518:{id:"n4518",loc:[-85.630787,41.954769]},n4519:{id:"n4519",loc:[-85.630806,41.957342]},n452:{id:"n452",loc:[-85.634123,41.943596]},n4520:{id:"n4520",loc:[-85.630809,41.957428],tags:{highway:"crossing"}},n4521:{id:"n4521",loc:[-85.630912,41.957506],tags:{highway:"crossing"}},n4522:{id:"n4522",loc:[-85.631033,41.957428],tags:{highway:"crossing"}},n4523:{id:"n4523",loc:[-85.631032,41.957341]},n4524:{id:"n4524",loc:[-85.63091,41.957341],tags:{highway:"crossing"}},n4525:{id:"n4525",loc:[-85.631027,41.95597]},n4526:{id:"n4526",loc:[-85.631027,41.955913],tags:{highway:"crossing"}},n4527:{id:"n4527",loc:[-85.631025,41.955873]},n4528:{id:"n4528",loc:[-85.631073,41.955913],tags:{highway:"stop",stop:"minor",direction:"backward"}},n4529:{id:"n4529",loc:[-85.631007,41.954766]},n453:{id:"n453",loc:[-85.634709,41.943926]},n4530:{id:"n4530",loc:[-85.630881,41.954768],tags:{highway:"crossing"}},n4531:{id:"n4531",loc:[-85.628022,41.954776]},n4532:{id:"n4532",loc:[-85.627385,41.95584]},n4533:{id:"n4533",loc:[-85.627329,41.955937]},n4534:{id:"n4534",loc:[-85.626583,41.957153]},n4535:{id:"n4535",loc:[-85.629675,41.954564],tags:{highway:"stop",direction:"forward",stop:"minor"}},n4536:{id:"n4536",loc:[-85.630881,41.954806],tags:{highway:"stop",stop:"minor",direction:"backward"}},n4537:{id:"n4537",loc:[-85.630879,41.954564],tags:{highway:"stop",stop:"minor",direction:"forward"}},n4538:{id:"n4538",loc:[-85.630784,41.954682],tags:{highway:"crossing"}},n4539:{id:"n4539",loc:[-85.63078,41.954595]},n454:{id:"n454",loc:[-85.63525,41.943855]},n4540:{id:"n4540",loc:[-85.630879,41.954595],tags:{highway:"crossing"}},n4541:{id:"n4541",loc:[-85.631004,41.954594]},n4542:{id:"n4542",loc:[-85.631006,41.954681],tags:{highway:"crossing"}},n4543:{id:"n4543",loc:[-85.631045,41.959036],tags:{highway:"stop",stop:"minor",direction:"backward"}},n4544:{id:"n4544",loc:[-85.632071,41.959029],tags:{highway:"stop",stop:"minor",direction:"forward"}},n4545:{id:"n4545",loc:[-85.632257,41.959027],tags:{highway:"stop",stop:"minor",direction:"backward"}},n4546:{id:"n4546",loc:[-85.631966,41.957427],tags:{highway:"stop",direction:"forward",stop:"minor"}},n4547:{id:"n4547",loc:[-85.632297,41.957426],tags:{highway:"stop",direction:"backward",stop:"minor"}},n4548:{id:"n4548",loc:[-85.631976,41.955911],tags:{highway:"give_way",direction:"forward"}},n4549:{id:"n4549",loc:[-85.632272,41.955911],tags:{highway:"give_way",direction:"backward"}},n455:{id:"n455",loc:[-85.635224,41.943869]},n4550:{id:"n4550",loc:[-85.632097,41.954805],tags:{highway:"stop",stop:"minor",direction:"backward"}},n4551:{id:"n4551",loc:[-85.632094,41.954566],tags:{highway:"stop",stop:"minor",direction:"forward"}},n4552:{id:"n4552",loc:[-85.626519,41.957256]},n4553:{id:"n4553",loc:[-85.625334,41.959165]},n4554:{id:"n4554",loc:[-85.626483,41.95806]},n4555:{id:"n4555",loc:[-85.626481,41.958175]},n4556:{id:"n4556",loc:[-85.626412,41.958174]},n4557:{id:"n4557",loc:[-85.626412,41.958202]},n4558:{id:"n4558",loc:[-85.62628,41.958201]},n4559:{id:"n4559",loc:[-85.626283,41.958057]},n456:{id:"n456",loc:[-85.638854,41.943104]},n4560:{id:"n4560",loc:[-85.622763,41.95109],tags:{highway:"stop",direction:"backward",stop:"minor"}},n4561:{id:"n4561",loc:[-85.622858,41.950876],tags:{emergency:"fire_hydrant"}},n4562:{id:"n4562",loc:[-85.624073,41.950393]},n4563:{id:"n4563",loc:[-85.624077,41.950924]},n4564:{id:"n4564",loc:[-85.624599,41.950984],tags:{highway:"stop",direction:"forward",stop:"minor"}},n4565:{id:"n4565",loc:[-85.624831,41.95119],tags:{emergency:"fire_hydrant"}},n4566:{id:"n4566",loc:[-85.624437,41.952568],tags:{emergency:"fire_hydrant"}},n4567:{id:"n4567",loc:[-85.624077,41.954606],tags:{emergency:"fire_hydrant"}},n4568:{id:"n4568",loc:[-85.624263,41.954888]},n4569:{id:"n4569",loc:[-85.624206,41.954919]},n457:{id:"n457",loc:[-85.635186,41.943901]},n4570:{id:"n4570",loc:[-85.624154,41.954865]},n4571:{id:"n4571",loc:[-85.624212,41.954835]},n4572:{id:"n4572",loc:[-85.622442,41.954401],tags:{emergency:"fire_hydrant"}},n4573:{id:"n4573",loc:[-85.619751,41.954658],tags:{emergency:"fire_hydrant"}},n4574:{id:"n4574",loc:[-85.617785,41.954534]},n4575:{id:"n4575",loc:[-85.617416,41.954721]},n4576:{id:"n4576",loc:[-85.617662,41.95474]},n4577:{id:"n4577",loc:[-85.618014,41.954717]},n4578:{id:"n4578",loc:[-85.617886,41.954671]},n4579:{id:"n4579",loc:[-85.617831,41.954612]},n458:{id:"n458",loc:[-85.635162,41.943917]},n4580:{id:"n4580",loc:[-85.617968,41.954752]},n4581:{id:"n4581",loc:[-85.617815,41.954752]},n4582:{id:"n4582",loc:[-85.617938,41.954695]},n4583:{id:"n4583",loc:[-85.617856,41.954642],tags:{highway:"stop",direction:"forward",stop:"minor"}},n4584:{id:"n4584",loc:[-85.619116,41.954164],tags:{man_made:"flagpole"}},n4585:{id:"n4585",loc:[-85.619569,41.953255],tags:{emergency:"fire_hydrant"}},n4586:{id:"n4586",loc:[-85.620352,41.951894],tags:{highway:"stop",direction:"forward",stop:"minor"}},n4587:{id:"n4587",loc:[-85.620485,41.951948],tags:{emergency:"fire_hydrant"}},n4588:{id:"n4588",loc:[-85.620316,41.950999],tags:{highway:"stop",direction:"backward",stop:"minor"}},n4589:{id:"n4589",loc:[-85.620311,41.950131],tags:{highway:"stop",direction:"backward",stop:"minor"}},n459:{id:"n459",loc:[-85.634856,41.943905]},n4590:{id:"n4590",loc:[-85.620374,41.95018],tags:{emergency:"fire_hydrant"}},n4591:{id:"n4591",loc:[-85.620301,41.949239],tags:{highway:"stop",direction:"backward",stop:"minor"}},n4592:{id:"n4592",loc:[-85.620278,41.947443],tags:{highway:"stop",direction:"backward",stop:"minor"}},n4593:{id:"n4593",loc:[-85.619844,41.947444],tags:{highway:"stop",direction:"forward",stop:"minor"}},n4594:{id:"n4594",loc:[-85.620191,41.947352],tags:{emergency:"fire_hydrant"}},n4595:{id:"n4595",loc:[-85.622819,41.947493],tags:{emergency:"fire_hydrant"}},n4596:{id:"n4596",loc:[-85.622744,41.947541],tags:{highway:"stop",stop:"minor",direction:"backward"}},n4597:{id:"n4597",loc:[-85.622739,41.947316],tags:{highway:"stop",direction:"forward",stop:"minor"}},n4598:{id:"n4598",loc:[-85.622909,41.948333],tags:{highway:"give_way"}},n4599:{id:"n4599",loc:[-85.622593,41.948333],tags:{highway:"give_way"}},n46:{id:"n46",loc:[-85.637131,41.94307]},n460:{id:"n460",loc:[-85.634811,41.944007]},n4600:{id:"n4600",loc:[-85.622835,41.948387],tags:{emergency:"fire_hydrant"}},n4601:{id:"n4601",loc:[-85.622768,41.949125],tags:{highway:"stop",direction:"forward",stop:"minor"}},n4602:{id:"n4602",loc:[-85.622769,41.949325],tags:{highway:"stop",stop:"minor",direction:"backward"}},n4603:{id:"n4603",loc:[-85.622837,41.949329],tags:{emergency:"fire_hydrant"}},n4604:{id:"n4604",loc:[-85.622614,41.950113],tags:{highway:"give_way",direction:"forward"}},n4605:{id:"n4605",loc:[-85.624777,41.949219],tags:{highway:"stop",direction:"forward",stop:"minor"}},n4606:{id:"n4606",loc:[-85.624849,41.949106],tags:{emergency:"fire_hydrant"}},n4607:{id:"n4607",loc:[-85.624858,41.950119],tags:{emergency:"fire_hydrant"}},n4608:{id:"n4608",loc:[-85.624752,41.948334],tags:{highway:"give_way"}},n4609:{id:"n4609",loc:[-85.624845,41.948422],tags:{emergency:"fire_hydrant"}},n461:{id:"n461",loc:[-85.634987,41.943112]},n4610:{id:"n4610",loc:[-85.62484,41.947539],tags:{emergency:"fire_hydrant"}},n4611:{id:"n4611",loc:[-85.62476,41.947428],tags:{highway:"stop",stop:"minor",direction:"forward"}},n4612:{id:"n4612",loc:[-85.620286,41.950926]},n4613:{id:"n4613",loc:[-85.618237,41.950963]},n4614:{id:"n4614",loc:[-85.618107,41.950876]},n4615:{id:"n4615",loc:[-85.618131,41.950393]},n4616:{id:"n4616",loc:[-85.618232,41.949913]},n4617:{id:"n4617",loc:[-85.619138,41.950212]},n4618:{id:"n4618",loc:[-85.619299,41.950388]},n4619:{id:"n4619",loc:[-85.619306,41.950897]},n462:{id:"n462",loc:[-85.634698,41.943194]},n4620:{id:"n4620",loc:[-85.619155,41.950958]},n4621:{id:"n4621",loc:[-85.620079,41.947715]},n4622:{id:"n4622",loc:[-85.619674,41.947728]},n4623:{id:"n4623",loc:[-85.619634,41.947735]},n4624:{id:"n4624",loc:[-85.619587,41.947756],tags:{barrier:"gate"}},n4625:{id:"n4625",loc:[-85.61953,41.947796]},n4626:{id:"n4626",loc:[-85.619475,41.947847]},n4627:{id:"n4627",loc:[-85.619433,41.947903]},n4628:{id:"n4628",loc:[-85.619402,41.947982]},n4629:{id:"n4629",loc:[-85.619394,41.948043]},n463:{id:"n463",loc:[-85.634632,41.943219]},n4630:{id:"n4630",loc:[-85.619395,41.948476]},n4631:{id:"n4631",loc:[-85.618367,41.947452]},n4632:{id:"n4632",loc:[-85.618371,41.947567],tags:{barrier:"gate"}},n4633:{id:"n4633",loc:[-85.618341,41.947622]},n4634:{id:"n4634",loc:[-85.618138,41.94773]},n4635:{id:"n4635",loc:[-85.618078,41.947814]},n4636:{id:"n4636",loc:[-85.618072,41.948009]},n4637:{id:"n4637",loc:[-85.618269,41.947666]},n4638:{id:"n4638",loc:[-85.618099,41.947765]},n4639:{id:"n4639",loc:[-85.618378,41.954453]},n464:{id:"n464",loc:[-85.63459,41.943239]},n4640:{id:"n4640",loc:[-85.618198,41.95453]},n4641:{id:"n4641",loc:[-85.618212,41.954623]},n4642:{id:"n4642",loc:[-85.635211,41.943103],tags:{leisure:"picnic_table"}},n4643:{id:"n4643",loc:[-85.635345,41.943448],tags:{leisure:"picnic_table"}},n4644:{id:"n4644",loc:[-85.635901,41.943353],tags:{amenity:"bench"}},n4645:{id:"n4645",loc:[-85.635815,41.942638],tags:{highway:"stop",direction:"forward",stop:"minor"}},n4646:{id:"n4646",loc:[-85.635355,41.942044],tags:{leisure:"picnic_table"}},n4647:{id:"n4647",loc:[-85.635206,41.942045],tags:{leisure:"picnic_table"}},n4648:{id:"n4648",loc:[-85.63504,41.941992],tags:{leisure:"picnic_table"}},n4649:{id:"n4649",loc:[-85.635185,41.942001]},n465:{id:"n465",loc:[-85.634555,41.943263]},n4650:{id:"n4650",loc:[-85.635176,41.942021]},n4651:{id:"n4651",loc:[-85.635127,41.942008]},n4652:{id:"n4652",loc:[-85.635136,41.941988]},n4653:{id:"n4653",loc:[-85.635,41.941709],tags:{emergency:"fire_hydrant"}},n4654:{id:"n4654",loc:[-85.634893,41.941801]},n4655:{id:"n4655",loc:[-85.634937,41.941843]},n4656:{id:"n4656",loc:[-85.634963,41.941859]},n4657:{id:"n4657",loc:[-85.635027,41.941904]},n4658:{id:"n4658",loc:[-85.63494,41.94187]},n4659:{id:"n4659",loc:[-85.634951,41.941871]},n466:{id:"n466",loc:[-85.634526,41.943289]},n4660:{id:"n4660",loc:[-85.634753,41.941701],tags:{amenity:"drinking_water"}},n4661:{id:"n4661",loc:[-85.634717,41.941804],tags:{amenity:"bench"}},n4662:{id:"n4662",loc:[-85.634554,41.941883],tags:{amenity:"bench"}},n4663:{id:"n4663",loc:[-85.635002,41.941579],tags:{amenity:"fountain"}},n4664:{id:"n4664",loc:[-85.635258,41.94188],tags:{amenity:"waste_basket"}},n4665:{id:"n4665",loc:[-85.635262,41.941581],tags:{amenity:"bench"}},n4666:{id:"n4666",loc:[-85.635319,41.941744],tags:{amenity:"bench"}},n4667:{id:"n4667",loc:[-85.634702,41.941473],tags:{amenity:"waste_basket"}},n4668:{id:"n4668",loc:[-85.633981,41.941966],tags:{amenity:"bench"}},n4669:{id:"n4669",loc:[-85.63388,41.941743]},n467:{id:"n467",loc:[-85.635163,41.944985]},n4670:{id:"n4670",loc:[-85.633746,41.941741]},n4671:{id:"n4671",loc:[-85.633749,41.941664]},n4672:{id:"n4672",loc:[-85.633883,41.941667]},n4673:{id:"n4673",loc:[-85.634283,41.941183],tags:{leisure:"picnic_table"}},n4674:{id:"n4674",loc:[-85.634046,41.941102],tags:{amenity:"bbq"}},n4675:{id:"n4675",loc:[-85.63401,41.941093],tags:{amenity:"bbq"}},n4676:{id:"n4676",loc:[-85.633408,41.940862],tags:{amenity:"bench"}},n4677:{id:"n4677",loc:[-85.633359,41.940651],tags:{amenity:"bench"}},n4678:{id:"n4678",loc:[-85.634109,41.940831]},n4679:{id:"n4679",loc:[-85.63396,41.940867]},n468:{id:"n468",loc:[-85.635095,41.945035]},n4680:{id:"n4680",loc:[-85.633816,41.940913]},n4681:{id:"n4681",loc:[-85.633237,41.940455]},n4682:{id:"n4682",loc:[-85.634453,41.940025],tags:{emergency:"fire_hydrant"}},n4683:{id:"n4683",loc:[-85.635692,41.940218],tags:{emergency:"fire_hydrant"}},n4684:{id:"n4684",loc:[-85.635566,41.940102],tags:{highway:"stop",direction:"forward",stop:"minor"}},n4685:{id:"n4685",loc:[-85.635961,41.940125],tags:{highway:"stop",stop:"minor",direction:"backward"}},n4686:{id:"n4686",loc:[-85.635883,41.94012],tags:{crossing:"marked",highway:"crossing"}},n4687:{id:"n4687",loc:[-85.635883,41.94006]},n4688:{id:"n4688",loc:[-85.635768,41.940051],tags:{crossing:"marked",highway:"crossing"}},n4689:{id:"n4689",loc:[-85.635669,41.940043]},n469:{id:"n469",loc:[-85.634269,41.944431]},n4690:{id:"n4690",loc:[-85.635661,41.940107],tags:{crossing:"marked",highway:"crossing"}},n4691:{id:"n4691",loc:[-85.635424,41.941005],tags:{amenity:"fountain"}},n4692:{id:"n4692",loc:[-85.635542,41.941371],tags:{amenity:"bench"}},n4693:{id:"n4693",loc:[-85.635709,41.941341],tags:{emergency:"fire_hydrant"}},n4694:{id:"n4694",loc:[-85.637038,41.942513],tags:{highway:"stop",direction:"forward",stop:"minor"}},n4695:{id:"n4695",loc:[-85.637174,41.941354],tags:{highway:"stop",direction:"backward",stop:"minor"}},n4696:{id:"n4696",loc:[-85.637091,41.941273],tags:{emergency:"fire_hydrant"}},n4697:{id:"n4697",loc:[-85.638058,41.941346],tags:{highway:"give_way",direction:"forward"}},n4698:{id:"n4698",loc:[-85.638359,41.941344],tags:{highway:"give_way",direction:"backward"}},n4699:{id:"n4699",loc:[-85.638288,41.941236],tags:{emergency:"fire_hydrant"}},n47:{id:"n47",loc:[-85.636693,41.943073]},n470:{id:"n470",loc:[-85.634352,41.944376]},n4700:{id:"n4700",loc:[-85.63935,41.94128],tags:{emergency:"fire_hydrant"}},n4701:{id:"n4701",loc:[-85.639277,41.941337],tags:{highway:"give_way",direction:"forward"}},n4702:{id:"n4702",loc:[-85.639548,41.941334],tags:{highway:"give_way",direction:"backward"}},n4703:{id:"n4703",loc:[-85.642191,41.940039]},n4704:{id:"n4704",loc:[-85.640585,41.941263],tags:{emergency:"fire_hydrant"}},n4705:{id:"n4705",loc:[-85.64049,41.941327],tags:{highway:"stop",direction:"forward",stop:"minor"}},n4706:{id:"n4706",loc:[-85.640803,41.941324],tags:{highway:"stop",direction:"backward",stop:"minor"}},n4707:{id:"n4707",loc:[-85.641717,41.941317],tags:{highway:"stop",direction:"forward",stop:"all"}},n4708:{id:"n4708",loc:[-85.641846,41.941415],tags:{highway:"stop",direction:"backward",stop:"all"}},n4709:{id:"n4709",loc:[-85.641756,41.941392],tags:{emergency:"fire_hydrant"}},n471:{id:"n471",loc:[-85.634747,41.944561],tags:{railway:"crossing"}},n4710:{id:"n4710",loc:[-85.642014,41.941313],tags:{highway:"stop",direction:"forward",stop:"all"}},n4711:{id:"n4711",loc:[-85.641854,41.942455],tags:{highway:"stop",direction:"forward",stop:"minor"}},n4712:{id:"n4712",loc:[-85.641859,41.942739],tags:{highway:"stop",direction:"backward",stop:"minor"}},n4713:{id:"n4713",loc:[-85.640754,41.942707],tags:{emergency:"fire_hydrant"}},n4714:{id:"n4714",loc:[-85.640669,41.942716],tags:{highway:"stop",direction:"backward",stop:"minor"}},n4715:{id:"n4715",loc:[-85.640664,41.942478],tags:{highway:"stop",direction:"forward",stop:"minor"}},n4716:{id:"n4716",loc:[-85.63964,41.94274],tags:{man_made:"flagpole"}},n4717:{id:"n4717",loc:[-85.639455,41.942731],tags:{highway:"stop",direction:"backward",stop:"minor"}},n4718:{id:"n4718",loc:[-85.63945,41.942492],tags:{highway:"stop",direction:"forward",stop:"minor"}},n4719:{id:"n4719",loc:[-85.639527,41.942505],tags:{emergency:"fire_hydrant"}},n472:{id:"n472",loc:[-85.634667,41.944613]},n4720:{id:"n4720",loc:[-85.638238,41.942745],tags:{highway:"stop",direction:"backward",stop:"minor"}},n4721:{id:"n4721",loc:[-85.638233,41.942511],tags:{highway:"stop",direction:"forward",stop:"minor"}},n4722:{id:"n4722",loc:[-85.638018,41.94299],tags:{amenity:"waste_disposal"}},n4723:{id:"n4723",loc:[-85.637918,41.944152],tags:{amenity:"waste_basket"}},n4724:{id:"n4724",loc:[-85.635902,41.943291],tags:{leisure:"picnic_table"}},n4725:{id:"n4725",loc:[-85.63704,41.942741],tags:{highway:"stop",direction:"forward",stop:"minor"}},n4726:{id:"n4726",loc:[-85.633467,41.943818],tags:{highway:"stop",stop:"minor",direction:"backward"}},n4727:{id:"n4727",loc:[-85.633987,41.943531],tags:{highway:"stop",direction:"forward",stop:"minor"}},n4728:{id:"n4728",loc:[-85.632154,41.943539],tags:{emergency:"fire_hydrant"}},n4729:{id:"n4729",loc:[-85.633567,41.944641],tags:{amenity:"bench"}},n473:{id:"n473",loc:[-85.634161,41.944371]},n4730:{id:"n4730",loc:[-85.633127,41.944574],tags:{amenity:"bench"}},n4731:{id:"n4731",loc:[-85.633439,41.944871],tags:{amenity:"bench"}},n4732:{id:"n4732",loc:[-85.633676,41.944799],tags:{amenity:"waste_basket"}},n4733:{id:"n4733",loc:[-85.633466,41.944862],tags:{amenity:"waste_basket"}},n4734:{id:"n4734",loc:[-85.633451,41.944847],tags:{emergency:"fire_hydrant"}},n4735:{id:"n4735",loc:[-85.634202,41.945543],tags:{amenity:"waste_basket"}},n4736:{id:"n4736",loc:[-85.634652,41.945472],tags:{leisure:"picnic_table"}},n4737:{id:"n4737",loc:[-85.6347,41.945445],tags:{leisure:"picnic_table"}},n4738:{id:"n4738",loc:[-85.634646,41.945662],tags:{emergency:"fire_hydrant"}},n4739:{id:"n4739",loc:[-85.634673,41.945687],tags:{amenity:"waste_basket"}},n474:{id:"n474",loc:[-85.633861,41.944117]},n4740:{id:"n4740",loc:[-85.63449,41.945827],tags:{amenity:"clock",display:"analog"}},n4741:{id:"n4741",loc:[-85.63481,41.946056],tags:{highway:"stop",stop:"minor",direction:"backward"}},n4742:{id:"n4742",loc:[-85.634814,41.946176],tags:{amenity:"post_box"}},n4743:{id:"n4743",loc:[-85.638744,41.945328]},n4744:{id:"n4744",loc:[-85.63867,41.945228],tags:{amenity:"bench"}},n4745:{id:"n4745",loc:[-85.639487,41.945042],tags:{highway:"stop",direction:"forward",stop:"minor"}},n4746:{id:"n4746",loc:[-85.639635,41.94387],tags:{highway:"stop",stop:"minor",direction:"backward"}},n4747:{id:"n4747",loc:[-85.639549,41.943756],tags:{emergency:"fire_hydrant"}},n4748:{id:"n4748",loc:[-85.64055,41.943862],tags:{highway:"stop",direction:"forward",stop:"minor"}},n4749:{id:"n4749",loc:[-85.640864,41.943859],tags:{highway:"stop",stop:"minor",direction:"backward"}},n475:{id:"n475",loc:[-85.633906,41.943535]},n4750:{id:"n4750",loc:[-85.640718,41.945022],tags:{highway:"stop",direction:"forward",stop:"minor"}},n4751:{id:"n4751",loc:[-85.640664,41.945076],tags:{emergency:"fire_hydrant"}},n4752:{id:"n4752",loc:[-85.641913,41.94502],tags:{highway:"stop",direction:"forward",stop:"minor"}},n4753:{id:"n4753",loc:[-85.641838,41.945076],tags:{emergency:"fire_hydrant"}},n4754:{id:"n4754",loc:[-85.642045,41.94385],tags:{highway:"give_way",direction:"backward"}},n4755:{id:"n4755",loc:[-85.641738,41.943852],tags:{highway:"give_way",direction:"forward"}},n4756:{id:"n4756",loc:[-85.642928,41.943843],tags:{highway:"stop",stop:"minor",direction:"forward"}},n4757:{id:"n4757",loc:[-85.64305,41.943902],tags:{emergency:"fire_hydrant"}},n4758:{id:"n4758",loc:[-85.642986,41.945105],tags:{highway:"stop",direction:"backward",stop:"all"}},n4759:{id:"n4759",loc:[-85.643136,41.94502],tags:{highway:"stop",stop:"all",direction:"forward"}},n476:{id:"n476",loc:[-85.63423,41.943692]},n4760:{id:"n4760",loc:[-85.63169,41.947812]},n4761:{id:"n4761",loc:[-85.631307,41.947655]},n4762:{id:"n4762",loc:[-85.631407,41.947413]},n4763:{id:"n4763",loc:[-85.631173,41.947306]},n4764:{id:"n4764",loc:[-85.631316,41.947145]},n4765:{id:"n4765",loc:[-85.631476,41.947087]},n4766:{id:"n4766",loc:[-85.631793,41.946871]},n4767:{id:"n4767",loc:[-85.631884,41.946723]},n4768:{id:"n4768",loc:[-85.631814,41.946397]},n4769:{id:"n4769",loc:[-85.631382,41.947685]},n477:{id:"n477",loc:[-85.635096,41.942814]},n4770:{id:"n4770",loc:[-85.63109,41.947819]},n4771:{id:"n4771",loc:[-85.630921,41.947961]},n4772:{id:"n4772",loc:[-85.630249,41.947709]},n4773:{id:"n4773",loc:[-85.630149,41.947451]},n4774:{id:"n4774",loc:[-85.629733,41.947339]},n4775:{id:"n4775",loc:[-85.629755,41.946948]},n4776:{id:"n4776",loc:[-85.630457,41.947103]},n4777:{id:"n4777",loc:[-85.630934,41.946939]},n4778:{id:"n4778",loc:[-85.631277,41.946852]},n4779:{id:"n4779",loc:[-85.63142,41.946781]},n478:{id:"n478",loc:[-85.635058,41.942795]},n4780:{id:"n4780",loc:[-85.631116,41.946474]},n4781:{id:"n4781",loc:[-85.63073,41.945965]},n4782:{id:"n4782",loc:[-85.631337,41.94571]},n4783:{id:"n4783",loc:[-85.631589,41.945487]},n4784:{id:"n4784",loc:[-85.632278,41.945784]},n4785:{id:"n4785",loc:[-85.632105,41.946034]},n4786:{id:"n4786",loc:[-85.632532,41.946198]},n4787:{id:"n4787",loc:[-85.632566,41.946151]},n4788:{id:"n4788",loc:[-85.632684,41.946196]},n4789:{id:"n4789",loc:[-85.628676,41.947106]},n479:{id:"n479",loc:[-85.635002,41.94279]},n4790:{id:"n4790",loc:[-85.628973,41.946476]},n4791:{id:"n4791",loc:[-85.629094,41.946079]},n4792:{id:"n4792",loc:[-85.629226,41.94578]},n4793:{id:"n4793",loc:[-85.629479,41.945682]},n4794:{id:"n4794",loc:[-85.630606,41.94569]},n4795:{id:"n4795",loc:[-85.631255,41.945588]},n4796:{id:"n4796",loc:[-85.631546,41.945281]},n4797:{id:"n4797",loc:[-85.631629,41.944823]},n4798:{id:"n4798",loc:[-85.631766,41.944958]},n4799:{id:"n4799",loc:[-85.631689,41.945318]},n48:{id:"n48",loc:[-85.636689,41.94276]},n480:{id:"n480",loc:[-85.634908,41.94279]},n4800:{id:"n4800",loc:[-85.615069,41.945527]},n4801:{id:"n4801",loc:[-85.615058,41.946677]},n4802:{id:"n4802",loc:[-85.613692,41.946689]},n4803:{id:"n4803",loc:[-85.613475,41.946531]},n4804:{id:"n4804",loc:[-85.611717,41.946252]},n4805:{id:"n4805",loc:[-85.611353,41.946385]},n4806:{id:"n4806",loc:[-85.611304,41.947397]},n4807:{id:"n4807",loc:[-85.610564,41.947401]},n4808:{id:"n4808",loc:[-85.610553,41.947122]},n4809:{id:"n4809",loc:[-85.610194,41.946992]},n481:{id:"n481",loc:[-85.634478,41.942342]},n4810:{id:"n4810",loc:[-85.609976,41.946628]},n4811:{id:"n4811",loc:[-85.609769,41.946523]},n4812:{id:"n4812",loc:[-85.609307,41.946523]},n4813:{id:"n4813",loc:[-85.609035,41.946462]},n4814:{id:"n4814",loc:[-85.609018,41.943277]},n4815:{id:"n4815",loc:[-85.609617,41.943423]},n4816:{id:"n4816",loc:[-85.610471,41.943447]},n4817:{id:"n4817",loc:[-85.621491,41.949168]},n4818:{id:"n4818",loc:[-85.620266,41.94917]},n4819:{id:"n4819",loc:[-85.620262,41.947557]},n482:{id:"n482",loc:[-85.634521,41.942254]},n4820:{id:"n4820",loc:[-85.620825,41.947556]},n4821:{id:"n4821",loc:[-85.620827,41.948371]},n4822:{id:"n4822",loc:[-85.621489,41.94837]},n4823:{id:"n4823",loc:[-85.622865,41.950928]},n4824:{id:"n4824",loc:[-85.622858,41.949744]},n4825:{id:"n4825",loc:[-85.623696,41.949714]},n4826:{id:"n4826",loc:[-85.623696,41.949647]},n4827:{id:"n4827",loc:[-85.624019,41.949647]},n4828:{id:"n4828",loc:[-85.624024,41.950093]},n4829:{id:"n4829",loc:[-85.622885,41.949711]},n483:{id:"n483",loc:[-85.63425,41.941819]},n4830:{id:"n4830",loc:[-85.624584,41.951049]},n4831:{id:"n4831",loc:[-85.624669,41.9511]},n4832:{id:"n4832",loc:[-85.624316,41.952218]},n4833:{id:"n4833",loc:[-85.623819,41.952094]},n4834:{id:"n4834",loc:[-85.623385,41.952101]},n4835:{id:"n4835",loc:[-85.623456,41.951238]},n4836:{id:"n4836",loc:[-85.623535,41.951051]},n4837:{id:"n4837",loc:[-85.624693,41.950921]},n4838:{id:"n4838",loc:[-85.624727,41.950897]},n4839:{id:"n4839",loc:[-85.624869,41.950341]},n484:{id:"n484",loc:[-85.634324,41.942131]},n4840:{id:"n4840",loc:[-85.624859,41.949284]},n4841:{id:"n4841",loc:[-85.624788,41.949262]},n4842:{id:"n4842",loc:[-85.62402,41.949265]},n4843:{id:"n4843",loc:[-85.610382,41.954663]},n4844:{id:"n4844",loc:[-85.605675,41.954667]},n4845:{id:"n4845",loc:[-85.605669,41.949407]},n4846:{id:"n4846",loc:[-85.610376,41.949404]},n4847:{id:"n4847",loc:[-85.605552,41.958536]},n4848:{id:"n4848",loc:[-85.595755,41.958588]},n4849:{id:"n4849",loc:[-85.595732,41.956419]},n485:{id:"n485",loc:[-85.634211,41.941374]},n4850:{id:"n4850",loc:[-85.596908,41.955605]},n4851:{id:"n4851",loc:[-85.597723,41.955596]},n4852:{id:"n4852",loc:[-85.597715,41.954967]},n4853:{id:"n4853",loc:[-85.5874,41.955018]},n4854:{id:"n4854",loc:[-85.586615,41.955124]},n4855:{id:"n4855",loc:[-85.58613,41.955293]},n4856:{id:"n4856",loc:[-85.586166,41.962122]},n4857:{id:"n4857",loc:[-85.587008,41.955052]},n4858:{id:"n4858",loc:[-85.591685,41.95499]},n4859:{id:"n4859",loc:[-85.591718,41.956649]},n486:{id:"n486",loc:[-85.634085,41.940704]},n4860:{id:"n4860",loc:[-85.591133,41.956649]},n4861:{id:"n4861",loc:[-85.591061,41.95582]},n4862:{id:"n4862",loc:[-85.590677,41.95613]},n4863:{id:"n4863",loc:[-85.590826,41.956369]},n4864:{id:"n4864",loc:[-85.591016,41.954991]},n4865:{id:"n4865",loc:[-85.587656,41.954855]},n4866:{id:"n4866",loc:[-85.5964,41.955274]},n4867:{id:"n4867",loc:[-85.58776,41.96178]},n4868:{id:"n4868",loc:[-85.601172,41.960448]},n4869:{id:"n4869",loc:[-85.589489,41.960478]},n487:{id:"n487",loc:[-85.635567,41.940944]},n4870:{id:"n4870",loc:[-85.586664,41.960493]},n4871:{id:"n4871",loc:[-85.591227,41.95676]},n4872:{id:"n4872",loc:[-85.589424,41.958093]},n4873:{id:"n4873",loc:[-85.588779,41.957611]},n4874:{id:"n4874",loc:[-85.590583,41.956278]},n4875:{id:"n4875",loc:[-85.590759,41.957106]},n4876:{id:"n4876",loc:[-85.592213,41.958218]},n4877:{id:"n4877",loc:[-85.592262,41.958279]},n4878:{id:"n4878",loc:[-85.592304,41.958358]},n4879:{id:"n4879",loc:[-85.592351,41.95849]},n488:{id:"n488",loc:[-85.635542,41.940919]},n4880:{id:"n4880",loc:[-85.592363,41.958605]},n4881:{id:"n4881",loc:[-85.592383,41.96047]},n4882:{id:"n4882",loc:[-85.592376,41.959808]},n4883:{id:"n4883",loc:[-85.600825,41.959779]},n4884:{id:"n4884",loc:[-85.601084,41.959844]},n4885:{id:"n4885",loc:[-85.601144,41.959908]},n4886:{id:"n4886",loc:[-85.601164,41.960008]},n4887:{id:"n4887",loc:[-85.601162,41.960125]},n4888:{id:"n4888",loc:[-85.601134,41.960221]},n4889:{id:"n4889",loc:[-85.600993,41.960353]},n489:{id:"n489",loc:[-85.635514,41.940906]},n4890:{id:"n4890",loc:[-85.600794,41.960449]},n4891:{id:"n4891",loc:[-85.60098,41.959792]},n4892:{id:"n4892",loc:[-85.601067,41.960294]},n4893:{id:"n4893",loc:[-85.596829,41.959793]},n4894:{id:"n4894",loc:[-85.596839,41.960459]},n4895:{id:"n4895",loc:[-85.589364,41.958048]},n4896:{id:"n4896",loc:[-85.587374,41.959511]},n4897:{id:"n4897",loc:[-85.587286,41.959564]},n4898:{id:"n4898",loc:[-85.587163,41.959632]},n4899:{id:"n4899",loc:[-85.586694,41.959865]},n49:{id:"n49",loc:[-85.637127,41.942757]},n490:{id:"n490",loc:[-85.635469,41.940896]},n4900:{id:"n4900",loc:[-85.586634,41.959921]},n4901:{id:"n4901",loc:[-85.586607,41.960001]},n4902:{id:"n4902",loc:[-85.586599,41.960099]},n4903:{id:"n4903",loc:[-85.586602,41.96034]},n4904:{id:"n4904",loc:[-85.586669,41.960439]},n4905:{id:"n4905",loc:[-85.586758,41.960493]},n4906:{id:"n4906",loc:[-85.586618,41.960391]},n4907:{id:"n4907",loc:[-85.591201,41.956352]},n4908:{id:"n4908",loc:[-85.59112,41.954843]},n4909:{id:"n4909",loc:[-85.591536,41.956349]},n491:{id:"n491",loc:[-85.635667,41.940826]},n4910:{id:"n4910",loc:[-85.590953,41.956354]},n4911:{id:"n4911",loc:[-85.591468,41.956406]},n4912:{id:"n4912",loc:[-85.591469,41.956478]},n4913:{id:"n4913",loc:[-85.591123,41.956481]},n4914:{id:"n4914",loc:[-85.591121,41.956409]},n4915:{id:"n4915",loc:[-85.590826,41.955954]},n4916:{id:"n4916",loc:[-85.590612,41.956115]},n4917:{id:"n4917",loc:[-85.590402,41.955962]},n4918:{id:"n4918",loc:[-85.590622,41.955804]},n4919:{id:"n4919",loc:[-85.59011,41.956502]},n492:{id:"n492",loc:[-85.636197,41.940599]},n4920:{id:"n4920",loc:[-85.589877,41.956668]},n4921:{id:"n4921",loc:[-85.589777,41.95659]},n4922:{id:"n4922",loc:[-85.59001,41.956424]},n4923:{id:"n4923",loc:[-85.589595,41.956427]},n4924:{id:"n4924",loc:[-85.589434,41.956549]},n4925:{id:"n4925",loc:[-85.589262,41.956424]},n4926:{id:"n4926",loc:[-85.589422,41.956302]},n4927:{id:"n4927",loc:[-85.589358,41.956286]},n4928:{id:"n4928",loc:[-85.5892,41.956408]},n4929:{id:"n4929",loc:[-85.589032,41.956288]},n493:{id:"n493",loc:[-85.6362,41.940686]},n4930:{id:"n4930",loc:[-85.58919,41.956166]},n4931:{id:"n4931",loc:[-85.589165,41.956132]},n4932:{id:"n4932",loc:[-85.589002,41.956253]},n4933:{id:"n4933",loc:[-85.588826,41.956122]},n4934:{id:"n4934",loc:[-85.588989,41.956001]},n4935:{id:"n4935",loc:[-85.588673,41.955757]},n4936:{id:"n4936",loc:[-85.588502,41.955882]},n4937:{id:"n4937",loc:[-85.588339,41.955759]},n4938:{id:"n4938",loc:[-85.58851,41.955633]},n4939:{id:"n4939",loc:[-85.590382,41.955892]},n494:{id:"n494",loc:[-85.635969,41.94069]},n4940:{id:"n4940",loc:[-85.589923,41.956231]},n4941:{id:"n4941",loc:[-85.58984,41.956168]},n4942:{id:"n4942",loc:[-85.5903,41.95583]},n4943:{id:"n4943",loc:[-85.589636,41.956038]},n4944:{id:"n4944",loc:[-85.589546,41.956105]},n4945:{id:"n4945",loc:[-85.589045,41.955729]},n4946:{id:"n4946",loc:[-85.589135,41.955662]},n4947:{id:"n4947",loc:[-85.590718,41.955293]},n4948:{id:"n4948",loc:[-85.590718,41.955374]},n4949:{id:"n4949",loc:[-85.589211,41.955369]},n495:{id:"n495",loc:[-85.635965,41.940561]},n4950:{id:"n4950",loc:[-85.589212,41.955287]},n4951:{id:"n4951",loc:[-85.589675,41.956817]},n4952:{id:"n4952",loc:[-85.58947,41.95697]},n4953:{id:"n4953",loc:[-85.589219,41.956784]},n4954:{id:"n4954",loc:[-85.589425,41.95663]},n4955:{id:"n4955",loc:[-85.589373,41.95702]},n4956:{id:"n4956",loc:[-85.589171,41.957172]},n4957:{id:"n4957",loc:[-85.588962,41.957019]},n4958:{id:"n4958",loc:[-85.589164,41.956867]},n4959:{id:"n4959",loc:[-85.588881,41.955006]},n496:{id:"n496",loc:[-85.636031,41.94056]},n4960:{id:"n4960",loc:[-85.588804,41.955006]},n4961:{id:"n4961",loc:[-85.604773,41.954521]},n4962:{id:"n4962",loc:[-85.601603,41.954527]},n4963:{id:"n4963",loc:[-85.600823,41.954169]},n4964:{id:"n4964",loc:[-85.600828,41.950191]},n4965:{id:"n4965",loc:[-85.601673,41.949457]},n4966:{id:"n4966",loc:[-85.604464,41.949488]},n4967:{id:"n4967",loc:[-85.60538,41.950212]},n4968:{id:"n4968",loc:[-85.605395,41.954108]},n4969:{id:"n4969",loc:[-85.604771,41.954109]},n497:{id:"n497",loc:[-85.636032,41.940602]},n4970:{id:"n4970",loc:[-85.600613,41.953916]},n4971:{id:"n4971",loc:[-85.599758,41.954649]},n4972:{id:"n4972",loc:[-85.591194,41.954663]},n4973:{id:"n4973",loc:[-85.591182,41.950465]},n4974:{id:"n4974",loc:[-85.591871,41.950464]},n4975:{id:"n4975",loc:[-85.591868,41.949209]},n4976:{id:"n4976",loc:[-85.592155,41.949209]},n4977:{id:"n4977",loc:[-85.592155,41.94848]},n4978:{id:"n4978",loc:[-85.600615,41.948482]},n4979:{id:"n4979",loc:[-85.605421,41.949378]},n498:{id:"n498",loc:[-85.635776,41.940583]},n4980:{id:"n4980",loc:[-85.600614,41.949373]},n4981:{id:"n4981",loc:[-85.601316,41.94849]},n4982:{id:"n4982",loc:[-85.601592,41.947641]},n4983:{id:"n4983",loc:[-85.60395,41.947618]},n4984:{id:"n4984",loc:[-85.603973,41.948114]},n4985:{id:"n4985",loc:[-85.605398,41.948103]},n4986:{id:"n4986",loc:[-85.614017,41.965566]},n4987:{id:"n4987",loc:[-85.605787,41.965619]},n4988:{id:"n4988",loc:[-85.60577,41.963821]},n4989:{id:"n4989",loc:[-85.612886,41.963808]},n499:{id:"n499",loc:[-85.63589,41.940578]},n4990:{id:"n4990",loc:[-85.613207,41.963705]},n4991:{id:"n4991",loc:[-85.613511,41.963525]},n4992:{id:"n4992",loc:[-85.613667,41.963305]},n4993:{id:"n4993",loc:[-85.613779,41.962983]},n4994:{id:"n4994",loc:[-85.613797,41.959709]},n4995:{id:"n4995",loc:[-85.613663,41.95936]},n4996:{id:"n4996",loc:[-85.61339,41.959064]},n4997:{id:"n4997",loc:[-85.610503,41.956898]},n4998:{id:"n4998",loc:[-85.610485,41.956595]},n4999:{id:"n4999",loc:[-85.613892,41.956621]},n5:{id:"n5",loc:[-85.622744,41.95268]},n50:{id:"n50",loc:[-85.636673,41.943143]},n500:{id:"n500",loc:[-85.636198,41.940578]},n5000:{id:"n5000",loc:[-85.613866,41.958574]},n5001:{id:"n5001",loc:[-85.615262,41.958561]},n5002:{id:"n5002",loc:[-85.615279,41.959541]},n5003:{id:"n5003",loc:[-85.615314,41.95597]},n5004:{id:"n5004",loc:[-85.613887,41.955988]},n5005:{id:"n5005",loc:[-85.613074,41.962244]},n5006:{id:"n5006",loc:[-85.611678,41.963354]},n5007:{id:"n5007",loc:[-85.611678,41.963487]},n5008:{id:"n5008",loc:[-85.606906,41.963502]},n5009:{id:"n5009",loc:[-85.605777,41.962657]},n501:{id:"n501",loc:[-85.636251,41.940584]},n5010:{id:"n5010",loc:[-85.605711,41.9599]},n5011:{id:"n5011",loc:[-85.608139,41.9585]},n5012:{id:"n5012",loc:[-85.60814,41.956306]},n5013:{id:"n5013",loc:[-85.608854,41.95581]},n5014:{id:"n5014",loc:[-85.610039,41.955883]},n5015:{id:"n5015",loc:[-85.610068,41.956754]},n5016:{id:"n5016",loc:[-85.613058,41.959411]},n5017:{id:"n5017",loc:[-85.610234,41.957068]},n5018:{id:"n5018",loc:[-85.609826,41.95581]},n5019:{id:"n5019",loc:[-85.606987,41.958505]},n502:{id:"n502",loc:[-85.636279,41.940605]},n5020:{id:"n5020",loc:[-85.606498,41.958846]},n5021:{id:"n5021",loc:[-85.606013,41.959342]},n5022:{id:"n5022",loc:[-85.614553,41.961581]},n5023:{id:"n5023",loc:[-85.61465,41.96214]},n5024:{id:"n5024",loc:[-85.615277,41.962442]},n5025:{id:"n5025",loc:[-85.615451,41.962972]},n5026:{id:"n5026",loc:[-85.614355,41.964826]},n5027:{id:"n5027",loc:[-85.615133,41.964589]},n5028:{id:"n5028",loc:[-85.615342,41.963818]},n5029:{id:"n5029",loc:[-85.615971,41.963792]},n503:{id:"n503",loc:[-85.636285,41.940633]},n5030:{id:"n5030",loc:[-85.615751,41.963122]},n5031:{id:"n5031",loc:[-85.616575,41.963123]},n5032:{id:"n5032",loc:[-85.612527,41.963846]},n5033:{id:"n5033",loc:[-85.630653,41.940709]},n5034:{id:"n5034",loc:[-85.629858,41.939568]},n5035:{id:"n5035",loc:[-85.629847,41.937926]},n504:{id:"n504",loc:[-85.636281,41.940662]},n505:{id:"n505",loc:[-85.636266,41.940688]},n506:{id:"n506",loc:[-85.636236,41.940701]},n507:{id:"n507",loc:[-85.63619,41.940706]},n508:{id:"n508",loc:[-85.635892,41.940707]},n509:{id:"n509",loc:[-85.635777,41.9407]},n51:{id:"n51",loc:[-85.636673,41.942864]},n510:{id:"n510",loc:[-85.636044,41.940578]},n511:{id:"n511",loc:[-85.635946,41.940578]},n512:{id:"n512",loc:[-85.636475,41.940732]},n513:{id:"n513",loc:[-85.636475,41.940777]},n514:{id:"n514",loc:[-85.636405,41.940777]},n515:{id:"n515",loc:[-85.636405,41.940732]},n516:{id:"n516",loc:[-85.636471,41.940916]},n517:{id:"n517",loc:[-85.636471,41.940961]},n518:{id:"n518",loc:[-85.636404,41.940961]},n519:{id:"n519",loc:[-85.636404,41.940916]},n52:{id:"n52",loc:[-85.636227,41.942864]},n520:{id:"n520",loc:[-85.636286,41.941127]},n521:{id:"n521",loc:[-85.636203,41.941126]},n522:{id:"n522",loc:[-85.636204,41.941083]},n523:{id:"n523",loc:[-85.636287,41.941083]},n524:{id:"n524",loc:[-85.636124,41.941064]},n525:{id:"n525",loc:[-85.636,41.941065]},n526:{id:"n526",loc:[-85.636,41.940964]},n527:{id:"n527",loc:[-85.636045,41.940964]},n528:{id:"n528",loc:[-85.636045,41.940928]},n529:{id:"n529",loc:[-85.636111,41.940928]},n53:{id:"n53",loc:[-85.636227,41.943143]},n530:{id:"n530",loc:[-85.636111,41.940961]},n531:{id:"n531",loc:[-85.636123,41.940961]},n532:{id:"n532",loc:[-85.636124,41.940997]},n533:{id:"n533",loc:[-85.636164,41.940997]},n534:{id:"n534",loc:[-85.636164,41.941044]},n535:{id:"n535",loc:[-85.636124,41.941044]},n536:{id:"n536",loc:[-85.636534,41.941256]},n537:{id:"n537",loc:[-85.63645,41.941246]},n538:{id:"n538",loc:[-85.636462,41.941189]},n539:{id:"n539",loc:[-85.636546,41.941199]},n54:{id:"n54",loc:[-85.636198,41.943119]},n540:{id:"n540",loc:[-85.636802,41.941226]},n541:{id:"n541",loc:[-85.636701,41.941215]},n542:{id:"n542",loc:[-85.636709,41.941174]},n543:{id:"n543",loc:[-85.636656,41.941168]},n544:{id:"n544",loc:[-85.636666,41.941122]},n545:{id:"n545",loc:[-85.636781,41.941136]},n546:{id:"n546",loc:[-85.636774,41.94117]},n547:{id:"n547",loc:[-85.636812,41.941175]},n548:{id:"n548",loc:[-85.636803,41.941047]},n549:{id:"n549",loc:[-85.636785,41.941047]},n55:{id:"n55",loc:[-85.635945,41.94312]},n550:{id:"n550",loc:[-85.636785,41.941058]},n551:{id:"n551",loc:[-85.636644,41.941059]},n552:{id:"n552",loc:[-85.636644,41.941038]},n553:{id:"n553",loc:[-85.636581,41.941039]},n554:{id:"n554",loc:[-85.636581,41.940995]},n555:{id:"n555",loc:[-85.636746,41.940995]},n556:{id:"n556",loc:[-85.636746,41.940978]},n557:{id:"n557",loc:[-85.636803,41.940978]},n558:{id:"n558",loc:[-85.636781,41.940768]},n559:{id:"n559",loc:[-85.636783,41.940828]},n56:{id:"n56",loc:[-85.635943,41.942909]},n560:{id:"n560",loc:[-85.636761,41.940828]},n561:{id:"n561",loc:[-85.636762,41.940857]},n562:{id:"n562",loc:[-85.636641,41.940859]},n563:{id:"n563",loc:[-85.63664,41.940805]},n564:{id:"n564",loc:[-85.636676,41.940804]},n565:{id:"n565",loc:[-85.636675,41.940769]},n566:{id:"n566",loc:[-85.636733,41.94033]},n567:{id:"n567",loc:[-85.636471,41.940334]},n568:{id:"n568",loc:[-85.636469,41.940262]},n569:{id:"n569",loc:[-85.636731,41.940257]},n57:{id:"n57",loc:[-85.636227,41.942909]},n570:{id:"n570",loc:[-85.636798,41.940419]},n571:{id:"n571",loc:[-85.6368,41.940524]},n572:{id:"n572",loc:[-85.63664,41.940526]},n573:{id:"n573",loc:[-85.636638,41.940421]},n574:{id:"n574",loc:[-85.636372,41.940551]},n575:{id:"n575",loc:[-85.636338,41.94055]},n576:{id:"n576",loc:[-85.636339,41.940524]},n577:{id:"n577",loc:[-85.636373,41.940525]},n578:{id:"n578",loc:[-85.636388,41.940435]},n579:{id:"n579",loc:[-85.636222,41.940436]},n58:{id:"n58",loc:[-85.63627,41.943175]},n580:{id:"n580",loc:[-85.636222,41.940366]},n581:{id:"n581",loc:[-85.636387,41.940365]},n582:{id:"n582",loc:[-85.636158,41.940482]},n583:{id:"n583",loc:[-85.635963,41.940484]},n584:{id:"n584",loc:[-85.635961,41.940399]},n585:{id:"n585",loc:[-85.636156,41.940397]},n586:{id:"n586",loc:[-85.635987,41.940314]},n587:{id:"n587",loc:[-85.635987,41.940268]},n588:{id:"n588",loc:[-85.635968,41.940268]},n589:{id:"n589",loc:[-85.635967,41.940212]},n59:{id:"n59",loc:[-85.635531,41.943176]},n590:{id:"n590",loc:[-85.636082,41.940211]},n591:{id:"n591",loc:[-85.636083,41.94027]},n592:{id:"n592",loc:[-85.636064,41.94027]},n593:{id:"n593",loc:[-85.636064,41.940313]},n594:{id:"n594",loc:[-85.638071,41.941562]},n595:{id:"n595",loc:[-85.637953,41.941562]},n596:{id:"n596",loc:[-85.637952,41.941522]},n597:{id:"n597",loc:[-85.637876,41.941523]},n598:{id:"n598",loc:[-85.637876,41.941471]},n599:{id:"n599",loc:[-85.638035,41.94147]},n6:{id:"n6",loc:[-85.624925,41.950604]},n60:{id:"n60",loc:[-85.63542,41.942883]},n600:{id:"n600",loc:[-85.638035,41.941513]},n601:{id:"n601",loc:[-85.638071,41.941512]},n602:{id:"n602",loc:[-85.637038,41.942543],tags:{crossing:"marked",highway:"crossing"}},n603:{id:"n603",loc:[-85.637134,41.942542]},n604:{id:"n604",loc:[-85.638122,41.942532]},n605:{id:"n605",loc:[-85.638121,41.942478]},n606:{id:"n606",loc:[-85.638104,41.941424]},n607:{id:"n607",loc:[-85.637115,41.941438]},n608:{id:"n608",loc:[-85.637133,41.942453]},n609:{id:"n609",loc:[-85.637429,41.942004]},n61:{id:"n61",loc:[-85.635701,41.942802]},n610:{id:"n610",loc:[-85.637125,41.942004]},n611:{id:"n611",loc:[-85.637022,41.942004]},n612:{id:"n612",loc:[-85.635952,41.943579]},n613:{id:"n613",loc:[-85.635872,41.943594]},n614:{id:"n614",loc:[-85.635857,41.943551]},n615:{id:"n615",loc:[-85.635937,41.943535]},n616:{id:"n616",loc:[-85.63671,41.94344]},n617:{id:"n617",loc:[-85.636427,41.94334]},n618:{id:"n618",loc:[-85.635353,41.943279]},n619:{id:"n619",loc:[-85.635319,41.943257]},n62:{id:"n62",loc:[-85.6358,41.942997]},n620:{id:"n620",loc:[-85.638786,41.943105]},n621:{id:"n621",loc:[-85.634957,41.943146]},n622:{id:"n622",loc:[-85.635012,41.943119]},n623:{id:"n623",loc:[-85.632409,41.944222]},n624:{id:"n624",loc:[-85.631863,41.944749]},n625:{id:"n625",loc:[-85.631915,41.944722]},n626:{id:"n626",loc:[-85.631884,41.94464]},n627:{id:"n627",loc:[-85.631792,41.944359]},n628:{id:"n628",loc:[-85.631817,41.944703]},n629:{id:"n629",loc:[-85.633464,41.945787]},n63:{id:"n63",loc:[-85.635808,41.943176]},n630:{id:"n630",loc:[-85.633583,41.945919]},n631:{id:"n631",loc:[-85.63382,41.945698]},n632:{id:"n632",loc:[-85.633681,41.945571]},n633:{id:"n633",loc:[-85.634217,41.946824]},n634:{id:"n634",loc:[-85.634271,41.946836]},n635:{id:"n635",loc:[-85.634319,41.94573]},n636:{id:"n636",loc:[-85.634377,41.945672]},n637:{id:"n637",loc:[-85.634909,41.945354]},n638:{id:"n638",loc:[-85.634726,41.945493],tags:{artwork_type:"mural",tourism:"artwork"}},n639:{id:"n639",loc:[-85.63546,41.945612]},n64:{id:"n64",loc:[-85.63631,41.943253]},n640:{id:"n640",loc:[-85.635561,41.945493]},n641:{id:"n641",loc:[-85.635417,41.945565]},n642:{id:"n642",loc:[-85.635315,41.945583]},n643:{id:"n643",loc:[-85.63506,41.945383]},n644:{id:"n644",loc:[-85.635198,41.945199]},n645:{id:"n645",loc:[-85.635361,41.94558]},n646:{id:"n646",loc:[-85.635017,41.945066]},n647:{id:"n647",loc:[-85.634779,41.945206]},n648:{id:"n648",loc:[-85.63425,41.945655]},n649:{id:"n649",loc:[-85.634247,41.945631]},n65:{id:"n65",loc:[-85.635398,41.943259]},n650:{id:"n650",loc:[-85.634889,41.945921]},n651:{id:"n651",loc:[-85.634889,41.945939]},n652:{id:"n652",loc:[-85.634889,41.945761]},n653:{id:"n653",loc:[-85.634889,41.945778]},n654:{id:"n654",loc:[-85.635112,41.945715]},n655:{id:"n655",loc:[-85.635025,41.945714]},n656:{id:"n656",loc:[-85.635027,41.945761]},n657:{id:"n657",loc:[-85.635438,41.945665]},n658:{id:"n658",loc:[-85.635416,41.945676]},n659:{id:"n659",loc:[-85.635401,41.945709]},n66:{id:"n66",loc:[-85.635336,41.943036]},n660:{id:"n660",loc:[-85.635271,41.945566]},n661:{id:"n661",loc:[-85.636106,41.946268]},n662:{id:"n662",loc:[-85.635867,41.946747]},n663:{id:"n663",loc:[-85.636476,41.946797]},n664:{id:"n664",loc:[-85.63651,41.946796]},n665:{id:"n665",loc:[-85.635367,41.946389]},n666:{id:"n666",loc:[-85.635367,41.946437]},n667:{id:"n667",loc:[-85.634787,41.946441]},n668:{id:"n668",loc:[-85.6358,41.946243]},n669:{id:"n669",loc:[-85.635784,41.94622]},n67:{id:"n67",loc:[-85.635911,41.942899]},n670:{id:"n670",loc:[-85.635727,41.946195]},n671:{id:"n671",loc:[-85.635708,41.946588]},n672:{id:"n672",loc:[-85.635648,41.946561]},n673:{id:"n673",loc:[-85.635624,41.946555]},n674:{id:"n674",loc:[-85.635417,41.946559]},n675:{id:"n675",loc:[-85.634866,41.946561]},n676:{id:"n676",loc:[-85.634866,41.946543]},n677:{id:"n677",loc:[-85.635085,41.946546]},n678:{id:"n678",loc:[-85.635085,41.946554]},n679:{id:"n679",loc:[-85.634584,41.94488]},n68:{id:"n68",loc:[-85.635915,41.943156]},n680:{id:"n680",loc:[-85.634557,41.944882]},n681:{id:"n681",loc:[-85.634455,41.944943]},n682:{id:"n682",loc:[-85.634305,41.944968]},n683:{id:"n683",loc:[-85.634261,41.944927]},n684:{id:"n684",loc:[-85.634132,41.944741]},n685:{id:"n685",loc:[-85.633705,41.944759]},n686:{id:"n686",loc:[-85.633918,41.944616]},n687:{id:"n687",loc:[-85.633974,41.944663]},n688:{id:"n688",loc:[-85.6336,41.944665]},n689:{id:"n689",loc:[-85.633817,41.944528]},n69:{id:"n69",loc:[-85.63631,41.943157]},n690:{id:"n690",loc:[-85.633889,41.944485]},n691:{id:"n691",loc:[-85.633931,41.944525]},n692:{id:"n692",loc:[-85.633864,41.944563]},n693:{id:"n693",loc:[-85.633456,41.944524]},n694:{id:"n694",loc:[-85.633676,41.944399]},n695:{id:"n695",loc:[-85.633352,41.944415]},n696:{id:"n696",loc:[-85.633655,41.944234]},n697:{id:"n697",loc:[-85.633761,41.94435]},n698:{id:"n698",loc:[-85.633254,41.944318]},n699:{id:"n699",loc:[-85.633472,41.944188]},n7:{id:"n7",loc:[-85.638791,41.943231]},n70:{id:"n70",loc:[-85.63579,41.942967]},n700:{id:"n700",loc:[-85.633524,41.944237]},n701:{id:"n701",loc:[-85.633583,41.944202]},n702:{id:"n702",loc:[-85.633632,41.944247]},n703:{id:"n703",loc:[-85.633165,41.944228]},n704:{id:"n704",loc:[-85.633388,41.944105]},n705:{id:"n705",loc:[-85.633117,41.944175]},n706:{id:"n706",loc:[-85.633302,41.944077]},n707:{id:"n707",loc:[-85.633352,41.944126]},n708:{id:"n708",loc:[-85.633052,41.944107]},n709:{id:"n709",loc:[-85.633237,41.944009]},n71:{id:"n71",loc:[-85.637506,41.942824]},n710:{id:"n710",loc:[-85.633187,41.943955]},n711:{id:"n711",loc:[-85.633,41.944054]},n712:{id:"n712",loc:[-85.633155,41.944265]},n713:{id:"n713",loc:[-85.633669,41.944765]},n714:{id:"n714",loc:[-85.634468,41.945503]},n715:{id:"n715",loc:[-85.63455,41.945566]},n716:{id:"n716",loc:[-85.634737,41.945729]},n717:{id:"n717",loc:[-85.634753,41.945752]},n718:{id:"n718",loc:[-85.634756,41.945781]},n719:{id:"n719",loc:[-85.634758,41.945978]},n72:{id:"n72",loc:[-85.637511,41.943056]},n720:{id:"n720",loc:[-85.634363,41.945548],tags:{crossing:"marked",highway:"crossing"}},n721:{id:"n721",loc:[-85.634245,41.945599]},n722:{id:"n722",loc:[-85.633474,41.944889]},n723:{id:"n723",loc:[-85.632997,41.944418]},n724:{id:"n724",loc:[-85.63278,41.944183]},n725:{id:"n725",loc:[-85.63331,41.944429]},n726:{id:"n726",loc:[-85.633568,41.944829],tags:{crossing:"marked",highway:"crossing"}},n727:{id:"n727",loc:[-85.634669,41.94567]},n728:{id:"n728",loc:[-85.634462,41.945787]},n729:{id:"n729",loc:[-85.634272,41.945625]},n73:{id:"n73",loc:[-85.637361,41.943058]},n730:{id:"n730",loc:[-85.634344,41.945699],tags:{crossing:"marked",highway:"crossing"}},n731:{id:"n731",loc:[-85.634426,41.945783]},n732:{id:"n732",loc:[-85.632425,41.944137]},n733:{id:"n733",loc:[-85.632302,41.944192]},n734:{id:"n734",loc:[-85.632762,41.944174]},n735:{id:"n735",loc:[-85.632713,41.944179]},n736:{id:"n736",loc:[-85.632411,41.944327]},n737:{id:"n737",loc:[-85.632362,41.944341]},n738:{id:"n738",loc:[-85.632236,41.944204]},n739:{id:"n739",loc:[-85.634939,41.942165]},n74:{id:"n74",loc:[-85.637356,41.942825]},n740:{id:"n740",loc:[-85.635079,41.941535]},n741:{id:"n741",loc:[-85.635112,41.941595]},n742:{id:"n742",loc:[-85.635113,41.941633]},n743:{id:"n743",loc:[-85.635067,41.941652]},n744:{id:"n744",loc:[-85.634989,41.941651]},n745:{id:"n745",loc:[-85.634921,41.941609]},n746:{id:"n746",loc:[-85.634881,41.941544]},n747:{id:"n747",loc:[-85.635537,41.940939]},n748:{id:"n748",loc:[-85.635573,41.941048]},n749:{id:"n749",loc:[-85.635453,41.94091]},n75:{id:"n75",loc:[-85.638097,41.942833]},n750:{id:"n750",loc:[-85.635319,41.940943]},n751:{id:"n751",loc:[-85.637057,41.943224]},n752:{id:"n752",loc:[-85.636989,41.943296]},n753:{id:"n753",loc:[-85.636851,41.943299]},n754:{id:"n754",loc:[-85.636848,41.94322]},n755:{id:"n755",loc:[-85.636986,41.943217]},n756:{id:"n756",loc:[-85.637569,41.943454]},n757:{id:"n757",loc:[-85.637437,41.943458]},n758:{id:"n758",loc:[-85.637432,41.943384]},n759:{id:"n759",loc:[-85.637564,41.94338]},n76:{id:"n76",loc:[-85.638098,41.942912]},n760:{id:"n760",loc:[-85.637213,41.943378]},n761:{id:"n761",loc:[-85.637217,41.943435]},n762:{id:"n762",loc:[-85.637235,41.943434]},n763:{id:"n763",loc:[-85.637237,41.943465]},n764:{id:"n764",loc:[-85.637424,41.943459]},n765:{id:"n765",loc:[-85.637418,41.943371]},n766:{id:"n766",loc:[-85.638094,41.943149]},n767:{id:"n767",loc:[-85.638096,41.943201]},n768:{id:"n768",loc:[-85.638041,41.943202]},n769:{id:"n769",loc:[-85.638042,41.943216]},n77:{id:"n77",loc:[-85.637705,41.942913]},n770:{id:"n770",loc:[-85.637927,41.943218]},n771:{id:"n771",loc:[-85.637926,41.943201]},n772:{id:"n772",loc:[-85.637897,41.943201]},n773:{id:"n773",loc:[-85.637896,41.943155]},n774:{id:"n774",loc:[-85.637962,41.943153]},n775:{id:"n775",loc:[-85.637962,41.943134]},n776:{id:"n776",loc:[-85.638017,41.943132]},n777:{id:"n777",loc:[-85.638018,41.943151]},n778:{id:"n778",loc:[-85.638045,41.943289]},n779:{id:"n779",loc:[-85.638048,41.943363]},n78:{id:"n78",loc:[-85.637705,41.942834]},n780:{id:"n780",loc:[-85.637842,41.943367]},n781:{id:"n781",loc:[-85.637839,41.943296]},n782:{id:"n782",loc:[-85.637896,41.943295]},n783:{id:"n783",loc:[-85.637897,41.943314]},n784:{id:"n784",loc:[-85.637957,41.943312]},n785:{id:"n785",loc:[-85.637957,41.943291]},n786:{id:"n786",loc:[-85.637816,41.943375]},n787:{id:"n787",loc:[-85.637815,41.943416]},n788:{id:"n788",loc:[-85.637715,41.943415]},n789:{id:"n789",loc:[-85.637716,41.943374]},n79:{id:"n79",loc:[-85.638071,41.942298]},n790:{id:"n790",loc:[-85.637912,41.943545]},n791:{id:"n791",loc:[-85.637909,41.943479]},n792:{id:"n792",loc:[-85.637967,41.943477]},n793:{id:"n793",loc:[-85.637967,41.94346]},n794:{id:"n794",loc:[-85.638077,41.943457]},n795:{id:"n795",loc:[-85.638078,41.943473]},n796:{id:"n796",loc:[-85.638124,41.943471]},n797:{id:"n797",loc:[-85.638126,41.943514]},n798:{id:"n798",loc:[-85.638079,41.943515]},n799:{id:"n799",loc:[-85.638079,41.943532]},n8:{id:"n8",loc:[-85.635241,41.941948]},n80:{id:"n80",loc:[-85.638074,41.942431]},n800:{id:"n800",loc:[-85.638028,41.943534]},n801:{id:"n801",loc:[-85.638028,41.943542]},n802:{id:"n802",loc:[-85.638845,41.942983]},n803:{id:"n803",loc:[-85.638846,41.94305]},n804:{id:"n804",loc:[-85.638661,41.943052]},n805:{id:"n805",loc:[-85.63866,41.942984]},n806:{id:"n806",loc:[-85.638579,41.942753]},n807:{id:"n807",loc:[-85.638445,41.942755]},n808:{id:"n808",loc:[-85.638452,41.942978]},n809:{id:"n809",loc:[-85.638545,41.942976]},n81:{id:"n81",loc:[-85.637836,41.942433]},n810:{id:"n810",loc:[-85.638543,41.942935]},n811:{id:"n811",loc:[-85.638571,41.942934]},n812:{id:"n812",loc:[-85.63857,41.942901]},n813:{id:"n813",loc:[-85.638611,41.9429]},n814:{id:"n814",loc:[-85.638607,41.942769]},n815:{id:"n815",loc:[-85.63858,41.94277]},n816:{id:"n816",loc:[-85.638597,41.942614]},n817:{id:"n817",loc:[-85.638601,41.94273]},n818:{id:"n818",loc:[-85.638686,41.942731]},n819:{id:"n819",loc:[-85.638689,41.942917]},n82:{id:"n82",loc:[-85.637835,41.94242]},n820:{id:"n820",loc:[-85.638558,41.943018]},n821:{id:"n821",loc:[-85.638243,41.943019]},n822:{id:"n822",loc:[-85.637536,41.943887]},n823:{id:"n823",loc:[-85.63749,41.943926]},n824:{id:"n824",loc:[-85.63743,41.943886]},n825:{id:"n825",loc:[-85.637476,41.943847]},n826:{id:"n826",loc:[-85.637527,41.943846]},n827:{id:"n827",loc:[-85.637141,41.943728]},n828:{id:"n828",loc:[-85.637201,41.943755]},n829:{id:"n829",loc:[-85.636987,41.943608]},n83:{id:"n83",loc:[-85.63776,41.942421]},n830:{id:"n830",loc:[-85.637441,41.943807]},n831:{id:"n831",loc:[-85.637673,41.94399]},n832:{id:"n832",loc:[-85.637783,41.944137]},n833:{id:"n833",loc:[-85.63845,41.944333]},n834:{id:"n834",loc:[-85.638159,41.944248]},n835:{id:"n835",loc:[-85.637859,41.94416]},n836:{id:"n836",loc:[-85.638685,41.944542]},n837:{id:"n837",loc:[-85.638714,41.944611]},n838:{id:"n838",loc:[-85.638711,41.944757]},n839:{id:"n839",loc:[-85.638774,41.945069]},n84:{id:"n84",loc:[-85.637758,41.942339]},n840:{id:"n840",loc:[-85.638742,41.945205]},n841:{id:"n841",loc:[-85.640267,41.942403]},n842:{id:"n842",loc:[-85.640154,41.942404]},n843:{id:"n843",loc:[-85.640152,41.942249]},n844:{id:"n844",loc:[-85.640266,41.942248]},n845:{id:"n845",loc:[-85.640366,41.942599]},n846:{id:"n846",loc:[-85.640362,41.942192]},n847:{id:"n847",loc:[-85.640146,41.942191]},n848:{id:"n848",loc:[-85.640122,41.942196]},n849:{id:"n849",loc:[-85.640108,41.942211]},n85:{id:"n85",loc:[-85.637836,41.942339]},n850:{id:"n850",loc:[-85.640101,41.942236]},n851:{id:"n851",loc:[-85.640103,41.94241]},n852:{id:"n852",loc:[-85.64011,41.942435]},n853:{id:"n853",loc:[-85.640126,41.942445]},n854:{id:"n854",loc:[-85.640153,41.942451]},n855:{id:"n855",loc:[-85.640183,41.942452]},n856:{id:"n856",loc:[-85.640364,41.942452]},n857:{id:"n857",loc:[-85.640007,41.942452]},n858:{id:"n858",loc:[-85.639449,41.942461]},n859:{id:"n859",loc:[-85.640049,41.942391]},n86:{id:"n86",loc:[-85.637835,41.942301]},n860:{id:"n860",loc:[-85.640052,41.942503]},n861:{id:"n861",loc:[-85.639575,41.94251]},n862:{id:"n862",loc:[-85.639572,41.942398]},n863:{id:"n863",loc:[-85.638782,41.942227]},n864:{id:"n864",loc:[-85.63843,41.942226]},n865:{id:"n865",loc:[-85.63823,41.942183]},n866:{id:"n866",loc:[-85.638363,41.942216],tags:{barrier:"gate"}},n867:{id:"n867",loc:[-85.6384,41.942223]},n868:{id:"n868",loc:[-85.636042,41.942797]},n869:{id:"n869",loc:[-85.636308,41.942752]},n87:{id:"n87",loc:[-85.637566,41.942367]},n870:{id:"n870",loc:[-85.636516,41.942729]},n871:{id:"n871",loc:[-85.636782,41.942712]},n872:{id:"n872",loc:[-85.636944,41.942706]},n873:{id:"n873",loc:[-85.63704,41.942706]},n874:{id:"n874",loc:[-85.637237,41.942703]},n875:{id:"n875",loc:[-85.637553,41.9427]},n876:{id:"n876",loc:[-85.638236,41.942697]},n877:{id:"n877",loc:[-85.636284,41.942781]},n878:{id:"n878",loc:[-85.636551,41.942641]},n879:{id:"n879",loc:[-85.633914,41.943693]},n88:{id:"n88",loc:[-85.637566,41.94241]},n880:{id:"n880",loc:[-85.63389,41.943708]},n881:{id:"n881",loc:[-85.633866,41.943686]},n882:{id:"n882",loc:[-85.63389,41.943671]},n883:{id:"n883",loc:[-85.633857,41.943609]},n884:{id:"n884",loc:[-85.634858,41.944474]},n885:{id:"n885",loc:[-85.633988,41.943234]},n886:{id:"n886",loc:[-85.633999,41.943485]},n887:{id:"n887",loc:[-85.634109,41.943449],tags:{emergency:"fire_hydrant"}},n888:{id:"n888",loc:[-85.635728,41.942655],tags:{emergency:"fire_hydrant"}},n889:{id:"n889",loc:[-85.636499,41.942845],tags:{man_made:"flagpole"}},n89:{id:"n89",loc:[-85.637455,41.94241]},n890:{id:"n890",loc:[-85.636197,41.943073]},n891:{id:"n891",loc:[-85.636227,41.943073]},n892:{id:"n892",loc:[-85.637433,41.942933],tags:{"addr:city":"Three Rivers","addr:housenumber":"401","addr:postcode":"49093","addr:state":"MI","addr:street":"Michigan Avenue",amenity:"restaurant",cuisine:"pizza",name:"Pizza Hut"}},n893:{id:"n893",loc:[-85.637907,41.942879],tags:{amenity:"car_wash"}},n894:{id:"n894",loc:[-85.637661,41.943018]},n895:{id:"n895",loc:[-85.636933,41.942733],tags:{emergency:"fire_hydrant"}},n896:{id:"n896",loc:[-85.637661,41.94304]},n897:{id:"n897",loc:[-85.637562,41.943041]},n898:{id:"n898",loc:[-85.637556,41.942725]},n899:{id:"n899",loc:[-85.637656,41.942724]},n9:{id:"n9",loc:[-85.635159,41.941926]},n90:{id:"n90",loc:[-85.637454,41.942367]},n900:{id:"n900",loc:[-85.637657,41.942779]},n901:{id:"n901",loc:[-85.637983,41.942777]},n902:{id:"n902",loc:[-85.637982,41.942616]},n903:{id:"n903",loc:[-85.637777,41.942778]},n904:{id:"n904",loc:[-85.637775,41.942699]},n905:{id:"n905",loc:[-85.637772,41.942618]},n906:{id:"n906",loc:[-85.637982,41.942698]},n907:{id:"n907",loc:[-85.637941,41.942378],tags:{"addr:city":"Three Rivers","addr:housenumber":"416","addr:postcode":"49093","addr:state":"MI","addr:street":"Michigan Avenue",name:"Gem Pawnbroker",shop:"pawnbroker"}},n908:{id:"n908",loc:[-85.637515,41.942394],tags:{second_hand:"only",shop:"car"}},n909:{id:"n909",loc:[-85.638743,41.942374],tags:{"addr:city":"Three Rivers","addr:housenumber":"500","addr:postcode":"49093","addr:state":"MI","addr:street":"Michigan Avenue",name:"William Towing","service:vehicle:towing":"yes","service:vehicle:tyres":"yes",shop:"car_repair"}},n91:{id:"n91",loc:[-85.637565,41.942341]},n910:{id:"n910",loc:[-85.638594,41.942357]},n911:{id:"n911",loc:[-85.634312,41.943562],tags:{"addr:city":"Three Rivers","addr:housenumber":"145","addr:postcode":"49093","addr:state":"MI","addr:street":"Michigan Avenue",amenity:"cafe",cuisine:"coffee_shop",name:"L.A.'s Coffee Cafe",outdoor_seating:"yes"}},n912:{id:"n912",loc:[-85.634404,41.943512]},n913:{id:"n913",loc:[-85.634391,41.943519],tags:{entrance:"yes"}},n914:{id:"n914",loc:[-85.634259,41.943538],tags:{entrance:"yes"}},n915:{id:"n915",loc:[-85.634247,41.943528]},n916:{id:"n916",loc:[-85.633747,41.943322],tags:{"addr:city":"Three Rivers","addr:housenumber":"132","addr:postcode":"49093","addr:state":"MI","addr:street":"Michigan Avenue",name:"Preferred Insurance Services",office:"insurance"}},n917:{id:"n917",loc:[-85.63299,41.943686],tags:{"addr:city":"Three Rivers","addr:housenumber":"101","addr:postcode":"49093","addr:state":"MI","addr:street":"Main Street",name:"Lynn's Garage","service:vehicle:tyres":"yes",shop:"car_repair"}},n918:{id:"n918",loc:[-85.633438,41.944883]},n919:{id:"n919",loc:[-85.633265,41.944983]},n92:{id:"n92",loc:[-85.637481,41.942341]},n920:{id:"n920",loc:[-85.633315,41.945027]},n921:{id:"n921",loc:[-85.633376,41.944827]},n922:{id:"n922",loc:[-85.633199,41.944922]},n923:{id:"n923",loc:[-85.633316,41.944772]},n924:{id:"n924",loc:[-85.633147,41.944867]},n925:{id:"n925",loc:[-85.633261,41.944719]},n926:{id:"n926",loc:[-85.633096,41.944812]},n927:{id:"n927",loc:[-85.633191,41.944645]},n928:{id:"n928",loc:[-85.632981,41.94476]},n929:{id:"n929",loc:[-85.633062,41.94483]},n93:{id:"n93",loc:[-85.637481,41.94226]},n930:{id:"n930",loc:[-85.633146,41.944602]},n931:{id:"n931",loc:[-85.632969,41.944703]},n932:{id:"n932",loc:[-85.633008,41.944745]},n933:{id:"n933",loc:[-85.633088,41.944545]},n934:{id:"n934",loc:[-85.632868,41.944655]},n935:{id:"n935",loc:[-85.632941,41.944718]},n936:{id:"n936",loc:[-85.633028,41.944483]},n937:{id:"n937",loc:[-85.632817,41.944605]},n938:{id:"n938",loc:[-85.632923,41.944373]},n939:{id:"n939",loc:[-85.632692,41.944485]},n94:{id:"n94",loc:[-85.637565,41.94226]},n940:{id:"n940",loc:[-85.632871,41.944316]},n941:{id:"n941",loc:[-85.632655,41.944421]},n942:{id:"n942",loc:[-85.632711,41.944478]},n943:{id:"n943",loc:[-85.632825,41.94426]},n944:{id:"n944",loc:[-85.632606,41.944363]},n945:{id:"n945",loc:[-85.63275,41.94418]},n946:{id:"n946",loc:[-85.632588,41.944256]},n947:{id:"n947",loc:[-85.632611,41.944279]},n948:{id:"n948",loc:[-85.632548,41.944306]},n949:{id:"n949",loc:[-85.632512,41.944406]},n95:{id:"n95",loc:[-85.637188,41.942217]},n950:{id:"n950",loc:[-85.632565,41.944463]},n951:{id:"n951",loc:[-85.632579,41.944456]},n952:{id:"n952",loc:[-85.632634,41.944518]},n953:{id:"n953",loc:[-85.632686,41.944569]},n954:{id:"n954",loc:[-85.632745,41.944537]},n955:{id:"n955",loc:[-85.632659,41.944587]},n956:{id:"n956",loc:[-85.632778,41.944705]},n957:{id:"n957",loc:[-85.632815,41.944301],tags:{"addr:city":"Three Rivers","addr:housenumber":"5","addr:postcode":"49093","addr:state":"MI","addr:street":"Main Street",name:"Access Point Employment",office:"employment_agency"}},n958:{id:"n958",loc:[-85.6332,41.944174],tags:{"addr:city":"Three Rivers","addr:housenumber":"6","addr:postcode":"49093","addr:state":"MI","addr:street":"Main Street",name:"Paisley Emporium",shop:"second_hand"}},n959:{id:"n959",loc:[-85.633578,41.944568],tags:{"addr:city":"Three Rivers","addr:housenumber":"22","addr:postcode":"49093","addr:state":"MI","addr:street":"Main Street",name:"Lowry's Books",shop:"books"}},n96:{id:"n96",loc:[-85.637189,41.942303]},n960:{id:"n960",loc:[-85.63344,41.944443],tags:{"addr:city":"Three Rivers","addr:housenumber":"16","addr:postcode":"49093","addr:state":"MI","addr:street":"Main Street",amenity:"restaurant",cuisine:"pizza",name:"Paisano's Bar and Grill"}},n961:{id:"n961",loc:[-85.633009,41.944542],tags:{"addr:city":"Three Rivers","addr:housenumber":"13","addr:postcode":"49093","addr:state":"MI","addr:street":"Main Street",amenity:"cafe",cuisine:"american",internet_access:"yes",name:"Main Street Cafe"}},n962:{id:"n962",loc:[-85.633674,41.944682],tags:{"addr:city":"Three Rivers","addr:housenumber":"28","addr:postcode":"49093","addr:state":"MI","addr:street":"Main Street",leisure:"fitness_centre",name:"Main Street Fitness"}},n963:{id:"n963",loc:[-85.633376,41.944868],tags:{"addr:city":"Three Rivers","addr:housenumber":"27","addr:postcode":"49093","addr:state":"MI","addr:street":"Main Street",leisure:"fitness_centre",name:"Main Street Barbell"}},n964:{id:"n964",loc:[-85.633366,41.944783]},n965:{id:"n965",loc:[-85.633296,41.94482]},n966:{id:"n966",loc:[-85.633214,41.94487]},n967:{id:"n967",loc:[-85.633005,41.944988]},n968:{id:"n968",loc:[-85.633269,41.944816]},n969:{id:"n969",loc:[-85.633215,41.944842]},n97:{id:"n97",loc:[-85.637299,41.942302]},n970:{id:"n970",loc:[-85.633245,41.944871]},n971:{id:"n971",loc:[-85.633296,41.944845]},n972:{id:"n972",loc:[-85.633254,41.944845],tags:{natural:"tree"}},n973:{id:"n973",loc:[-85.633557,41.945515]},n974:{id:"n974",loc:[-85.633279,41.945246]},n975:{id:"n975",loc:[-85.63324,41.945226]},n976:{id:"n976",loc:[-85.6332,41.945213]},n977:{id:"n977",loc:[-85.633133,41.945164]},n978:{id:"n978",loc:[-85.63312,41.945132]},n979:{id:"n979",loc:[-85.633095,41.945081]},n98:{id:"n98",loc:[-85.637299,41.942314]},n980:{id:"n980",loc:[-85.633064,41.945047]},n981:{id:"n981",loc:[-85.632739,41.944742]},n982:{id:"n982",loc:[-85.633281,41.945026]},n983:{id:"n983",loc:[-85.633155,41.944903]},n984:{id:"n984",loc:[-85.633079,41.944829]},n985:{id:"n985",loc:[-85.63304,41.944853]},n986:{id:"n986",loc:[-85.632949,41.944776]},n987:{id:"n987",loc:[-85.632921,41.944725]},n988:{id:"n988",loc:[-85.632859,41.944673]},n989:{id:"n989",loc:[-85.632895,41.94505]},n99:{id:"n99",loc:[-85.637396,41.942313]},n990:{id:"n990",loc:[-85.633336,41.945138]},n991:{id:"n991",loc:[-85.633466,41.945265]},n992:{id:"n992",loc:[-85.633367,41.945327]},n993:{id:"n993",loc:[-85.633163,41.945189]},n994:{id:"n994",loc:[-85.633678,41.945309]},n995:{id:"n995",loc:[-85.633619,41.945261]},n996:{id:"n996",loc:[-85.63355,41.945301]},n997:{id:"n997",loc:[-85.633607,41.945352]},n998:{id:"n998",loc:[-85.633579,41.945327],tags:{entrance:"yes"}},n999:{id:"n999",loc:[-85.633445,41.945404]},r2:{id:"r2",members:[{id:"w225",role:"outer",type:"way"}],tags:{type:"multipolygon",waterway:"riverbank"}},r5:{id:"r5",members:[{id:"w642",role:"outer",type:"way"}],tags:{admin_level:"8",border_type:"city",boundary:"administrative",name:"Three Rivers",place:"city",type:"boundary"}},w1:{id:"w1",nodes:["n5","n1797"],tags:{highway:"residential",name:"12th Avenue"}},w10:{id:"w10",nodes:["n54","n55","n56","n57","n891","n890","n54"],tags:{building:"yes"}},w100:{id:"w100",nodes:["n451","n915","n452"],tags:{highway:"footway"}},w101:{id:"w101",nodes:["n461","n462","n463","n464","n465","n466"],tags:{barrier:"fence"}},w102:{id:"w102",nodes:["n467","n468","n469","n470","n472","n467"],tags:{amenity:"parking"}},w103:{id:"w103",nodes:["n2597","n2444","n471","n472"],tags:{highway:"footway"}},w104:{id:"w104",nodes:["n473","n474","n325"],tags:{footway:"sidewalk",highway:"footway"}},w105:{id:"w105",nodes:["n475","n324","n325"],tags:{footway:"sidewalk",highway:"footway"}},w106:{id:"w106",nodes:["n886","n452","n476"],tags:{footway:"sidewalk",highway:"footway"}},w107:{id:"w107",nodes:["n485","n4678","n486","n18"],tags:{highway:"service"}},w108:{id:"w108",nodes:["n300","n487","n488","n489","n490"],tags:{highway:"footway"}},w109:{id:"w109",nodes:["n490","n491"],tags:{highway:"footway"}},w11:{id:"w11",nodes:["n58","n63","n59","n315","n60"],tags:{highway:"service"}},w110:{id:"w110",nodes:["n492","n493","n494","n495","n496","n497","n492"],tags:{building:"yes"}},w111:{id:"w111",nodes:["n498","n499","n511"],tags:{highway:"service"}},w112:{id:"w112",nodes:["n510","n500","n501","n502","n503","n504","n505","n506","n507","n508","n509"],tags:{highway:"service"}},w113:{id:"w113",nodes:["n511","n510"],tags:{covered:"yes",highway:"service"}},w114:{id:"w114",nodes:["n512","n513","n514","n515","n512"],tags:{building:"yes"}},w115:{id:"w115",nodes:["n516","n517","n518","n519","n516"],tags:{building:"yes"}},w116:{id:"w116",nodes:["n520","n521","n522","n523","n520"],tags:{building:"yes"}},w117:{id:"w117",nodes:["n524","n525","n526","n527","n528","n529","n530","n531","n532","n533","n534","n535","n524"],tags:{building:"yes"}},w118:{id:"w118",nodes:["n536","n537","n538","n539","n536"],tags:{building:"yes"}},w119:{id:"w119",nodes:["n540","n541","n542","n543","n544","n545","n546","n547","n540"],tags:{building:"yes"}},w12:{id:"w12",nodes:["n61","n314","n70","n62","n63"],tags:{highway:"service"}},w120:{id:"w120",nodes:["n548","n549","n550","n551","n552","n553","n554","n555","n556","n557","n548"],tags:{building:"yes"}},w121:{id:"w121",nodes:["n558","n559","n560","n561","n562","n563","n564","n565","n558"],tags:{building:"yes"}},w122:{id:"w122",nodes:["n566","n567","n568","n569","n566"],tags:{building:"yes"}},w123:{id:"w123",nodes:["n570","n571","n572","n573","n570"],tags:{building:"yes"}},w124:{id:"w124",nodes:["n574","n575","n576","n577","n574"],tags:{building:"yes"}},w125:{id:"w125",nodes:["n578","n579","n580","n581","n578"],tags:{building:"yes"}},w126:{id:"w126",nodes:["n582","n583","n584","n585","n582"],tags:{building:"yes"}},w127:{id:"w127",nodes:["n586","n587","n588","n589","n590","n591","n592","n593","n586"],tags:{building:"yes"}},w128:{id:"w128",nodes:["n594","n595","n596","n597","n598","n599","n600","n601","n594"],tags:{building:"yes"}},w129:{id:"w129",nodes:["n309","n602","n603"],tags:{crossing:"marked",footway:"crossing",highway:"footway"}},w13:{id:"w13",nodes:["n64","n65","n66","n67","n68","n69","n64"],tags:{amenity:"parking"}},w130:{id:"w130",nodes:["n603","n604"],tags:{footway:"sidewalk",highway:"footway"}},w131:{id:"w131",nodes:["n604","n605","n606"],tags:{footway:"sidewalk",highway:"footway"}},w132:{id:"w132",nodes:["n606","n607"],tags:{footway:"sidewalk",highway:"footway"}},w133:{id:"w133",nodes:["n607","n610","n608","n603"],tags:{footway:"sidewalk",highway:"footway"}},w134:{id:"w134",nodes:["n609","n610","n611"],tags:{highway:"service",service:"driveway",surface:"unpaved"}},w135:{id:"w135",nodes:["n244","n245","n246"],tags:{highway:"service"}},w136:{id:"w136",nodes:["n612","n613","n614","n615","n612"],tags:{amenity:"shelter",building:"yes"}},w137:{id:"w137",nodes:["n2779","n2788","n2776","n2778","n2775","n2787","n2440","n2437","n629","n2438","n630","n2439","n2407","n2408","n2409"],tags:{highway:"residential",name:"Foster Street"}},w138:{id:"w138",nodes:["n2779","n625","n626","n627"],tags:{highway:"residential",name:"Foster Street",oneway:"yes"}},w139:{id:"w139",nodes:["n630","n631","n632","n2437"],tags:{highway:"service"}},w14:{id:"w14",nodes:["n71","n72","n73","n74","n71"],tags:{building:"yes"}},w140:{id:"w140",nodes:["n643","n637","n715","n2410"],tags:{highway:"footway",name:"Mural Mall"}},w141:{id:"w141",nodes:["n639","n2516"],tags:{barrier:"wall"}},w142:{id:"w142",nodes:["n640","n641","n645","n642","n660","n643","n644"],tags:{highway:"service"}},w143:{id:"w143",nodes:["n646","n647"],tags:{highway:"service"}},w144:{id:"w144",nodes:["n654","n655","n656"],tags:{barrier:"wall"}},w145:{id:"w145",nodes:["n665","n666","n667"],tags:{barrier:"wall"}},w146:{id:"w146",nodes:["n2727","n662","n2719"],tags:{highway:"service",oneway:"yes",service:"parking_aisle"}},w147:{id:"w147",nodes:["n2725","n674"],tags:{highway:"service",oneway:"yes"}},w148:{id:"w148",nodes:["n2464","n2460","n2454","n684","n2455","n2464"],tags:{building:"yes"}},w149:{id:"w149",nodes:["n2456","n685","n686","n687","n2456"],tags:{building:"yes"}},w15:{id:"w15",nodes:["n75","n76","n77","n78","n75"],tags:{building:"yes"}},w150:{id:"w150",nodes:["n685","n688","n689","n690","n691","n692","n686","n685"],tags:{building:"yes"}},w151:{id:"w151",nodes:["n688","n693","n694","n689","n688"],tags:{building:"yes"}},w152:{id:"w152",nodes:["n693","n695","n702","n696","n697","n694","n693"],tags:{building:"yes"}},w153:{id:"w153",nodes:["n695","n698","n699","n700","n701","n702","n695"],tags:{building:"yes"}},w154:{id:"w154",nodes:["n698","n703","n707","n704","n699","n698"],tags:{building:"yes"}},w155:{id:"w155",nodes:["n703","n705","n706","n707","n703"],tags:{building:"yes"}},w156:{id:"w156",nodes:["n705","n708","n709","n706","n705"],tags:{building:"yes"}},w157:{id:"w157",nodes:["n709","n710","n711","n708","n709"],tags:{building:"yes"}},w158:{id:"w158",nodes:["n369","n712","n725","n713","n714","n715","n727","n716","n717","n718","n719"],tags:{footway:"sidewalk",highway:"footway"}},w159:{id:"w159",nodes:["n714","n720","n721"],tags:{crossing:"marked",footway:"crossing",highway:"footway"}},w16:{id:"w16",nodes:["n79","n80","n81","n82","n83","n84","n85","n86","n79"],tags:{building:"yes"}},w160:{id:"w160",nodes:["n729","n721","n722","n964","n723","n724"],tags:{footway:"sidewalk",highway:"footway"}},w161:{id:"w161",nodes:["n713","n726","n722"],tags:{crossing:"marked",footway:"crossing",highway:"footway"}},w162:{id:"w162",nodes:["n727","n2411","n728"],tags:{crossing:"marked",footway:"crossing",highway:"footway"}},w163:{id:"w163",nodes:["n729","n730","n731"],tags:{crossing:"marked",footway:"crossing",highway:"footway"}},w164:{id:"w164",nodes:["n365","n732","n733","n738"],tags:{footway:"sidewalk",highway:"footway"}},w165:{id:"w165",nodes:["n724","n734","n367","n735","n736","n737"],tags:{footway:"sidewalk",highway:"footway"}},w166:{id:"w166",nodes:["n739","n2037","n2038","n2039","n2040","n1623","n2032"],tags:{highway:"footway"}},w167:{id:"w167",nodes:["n150","n751"],tags:{highway:"service"}},w168:{id:"w168",nodes:["n752","n753","n754","n755","n752"],tags:{building:"yes"}},w169:{id:"w169",nodes:["n756","n757","n758","n759","n756"],tags:{building:"yes"}},w17:{id:"w17",nodes:["n87","n88","n89","n90","n87"],tags:{building:"yes"}},w170:{id:"w170",nodes:["n760","n761","n762","n763","n764","n765","n760"],tags:{building:"yes"}},w171:{id:"w171",nodes:["n766","n767","n768","n769","n770","n771","n772","n773","n774","n775","n776","n777","n766"],tags:{building:"yes"}},w172:{id:"w172",nodes:["n778","n779","n780","n781","n782","n783","n784","n785","n778"],tags:{building:"yes"}},w173:{id:"w173",nodes:["n786","n787","n788","n789","n786"],tags:{building:"yes"}},w174:{id:"w174",nodes:["n790","n791","n792","n793","n794","n795","n796","n797","n798","n799","n800","n801","n790"],tags:{building:"yes"}},w175:{id:"w175",nodes:["n802","n803","n804","n805","n802"],tags:{building:"yes"}},w176:{id:"w176",nodes:["n806","n807","n808","n809","n810","n811","n812","n813","n814","n815","n806"],tags:{building:"yes"}},w177:{id:"w177",nodes:["n816","n1140","n817","n818","n819","n820","n821"],tags:{highway:"service"}},w178:{id:"w178",nodes:["n822","n823","n824","n825","n822"],tags:{building:"yes"}},w179:{id:"w179",nodes:["n841","n842","n843","n844","n841"],tags:{building:"yes"}},w18:{id:"w18",nodes:["n91","n92","n93","n94","n91"],tags:{building:"yes"}},w180:{id:"w180",nodes:["n845","n856","n846"],tags:{highway:"service"}},w181:{id:"w181",nodes:["n846","n847","n848","n849","n850","n851","n852","n853","n854","n855","n856"],tags:{highway:"service",oneway:"yes",service:"drive-through"}},w182:{id:"w182",nodes:["n857","n858"],tags:{highway:"service"}},w183:{id:"w183",nodes:["n859","n860","n861","n862","n859"],tags:{amenity:"parking"}},w184:{id:"w184",nodes:["n863","n864","n867","n866","n865"],tags:{highway:"service"}},w185:{id:"w185",nodes:["n883","n884"],tags:{barrier:"fence"}},w186:{id:"w186",nodes:["n1954","n622","n1955"],tags:{highway:"path",name:"Riverwalk Trail"}},w187:{id:"w187",nodes:["n621","n1954"],tags:{highway:"steps",incline:"up",name:"Riverwalk Trail",surface:"wood"}},w188:{id:"w188",nodes:["n2274","n2275","n2276","n2277","n2278","n2279","n1953","n621"],tags:{highway:"path",name:"Riverwalk Trail",surface:"wood"}},w189:{id:"w189",nodes:["n2273","n2274"],tags:{highway:"steps",incline:"down",name:"Riverwalk Trail",surface:"wood"}},w19:{id:"w19",nodes:["n95","n96","n97","n98","n99","n100","n101","n102","n95"],tags:{building:"yes"}},w190:{id:"w190",nodes:["n821","n894","n900","n903","n901"],tags:{highway:"service"}},w191:{id:"w191",nodes:["n896","n897","n898","n899","n900","n894","n896"],tags:{amenity:"parking"}},w192:{id:"w192",nodes:["n903","n904","n905"],tags:{highway:"service"}},w193:{id:"w193",nodes:["n901","n906","n902"],tags:{highway:"service"}},w194:{id:"w194",nodes:["n912","n913"],tags:{highway:"footway"}},w195:{id:"w195",nodes:["n914","n915"],tags:{highway:"footway"}},w196:{id:"w196",nodes:["n2466","n918","n919","n920","n2466"],tags:{building:"yes"}},w197:{id:"w197",nodes:["n918","n921","n922","n919","n918"],tags:{building:"yes"}},w198:{id:"w198",nodes:["n923","n925","n926","n924","n923"],tags:{building:"yes"}},w199:{id:"w199",nodes:["n925","n927","n932","n928","n929","n926","n925"],tags:{building:"yes"}},w2:{id:"w2",nodes:["n3523","n2182","n2160"],tags:{highway:"service"}},w20:{id:"w20",nodes:["n103","n104","n105","n106","n107","n108","n109","n110","n111","n112","n113","n114","n103"],tags:{building:"yes"}},w200:{id:"w200",nodes:["n927","n930","n931","n932","n927"],tags:{building:"yes"}},w201:{id:"w201",nodes:["n930","n933","n934","n935","n931","n930"],tags:{building:"yes"}},w202:{id:"w202",nodes:["n933","n936","n937","n934","n933"],tags:{building:"yes"}},w203:{id:"w203",nodes:["n936","n938","n942","n939","n954","n937","n936"],tags:{building:"yes"}},w204:{id:"w204",nodes:["n938","n940","n941","n942","n938"],tags:{building:"yes"}},w205:{id:"w205",nodes:["n940","n943","n944","n941","n940"],tags:{building:"yes"}},w206:{id:"w206",nodes:["n943","n945","n946","n947","n948","n944","n943"],tags:{building:"yes"}},w207:{id:"w207",nodes:["n944","n949","n950","n951","n941","n944"],tags:{building:"yes"}},w208:{id:"w208",nodes:["n941","n951","n952","n939","n942","n941"],tags:{building:"yes"}},w209:{id:"w209",nodes:["n952","n953","n954","n939","n952"],tags:{building:"yes"}},w21:{id:"w21",nodes:["n115","n116","n117","n118","n115"],tags:{building:"yes"}},w210:{id:"w210",nodes:["n953","n955","n956","n934","n937","n954","n953"],tags:{building:"yes"}},w211:{id:"w211",nodes:["n964","n965"],tags:{highway:"footway"}},w212:{id:"w212",nodes:["n966","n983","n967","n989"],tags:{highway:"footway"}},w213:{id:"w213",nodes:["n965","n968","n969","n966","n970","n971","n965"],tags:{highway:"footway"}},w214:{id:"w214",nodes:["n973","n999","n992","n974","n975","n976","n993","n977","n978","n979","n980","n967","n981","n1000","n1001","n1002","n1003","n1004","n1005","n1006","n1007","n1008","n1009"],tags:{footway:"sidewalk",highway:"footway"}},w215:{id:"w215",nodes:["n978","n982","n983","n984","n985","n986","n987","n988","n981"],tags:{highway:"footway"}},w216:{id:"w216",nodes:["n976","n990","n991","n992"],tags:{highway:"footway"}},w217:{id:"w217",nodes:["n998","n999"],tags:{highway:"footway"}},w218:{id:"w218",nodes:["n1019","n1020","n1021","n1022","n731","n728","n1023","n1025","n1024","n1019"],tags:{footway:"sidewalk",highway:"footway"}},w219:{id:"w219",nodes:["n719","n1026","n1027"],tags:{crossing:"marked",footway:"crossing",highway:"footway"}},w22:{id:"w22",nodes:["n119","n120","n121","n122","n119"],tags:{building:"yes"}},w220:{id:"w220",nodes:["n1027","n1028","n1019"],tags:{crossing:"marked",footway:"crossing",highway:"footway"}},w221:{id:"w221",nodes:["n2080","n1828","n1863","n1829"],tags:{highway:"tertiary",name:"Constantine Street"}},w222:{id:"w222",nodes:["n1029","n1030","n1031"],tags:{highway:"service"}},w223:{id:"w223",nodes:["n2213","n2171","n2183","n2180","n2205","n2177","n2179","n2218","n2200","n2188","n2169","n2196","n2162","n2170","n2211","n2216","n2204","n2220","n2164","n2210","n2217","n2189","n460","n453","n2282"],tags:{name:"Rocky River",waterway:"river"}},w224:{id:"w224",nodes:["n3750","n3751","n3752"],tags:{highway:"service",service:"alley",surface:"unpaved"}},w225:{id:"w225",nodes:["n2134","n2127","n2313","n2109","n2112","n2129","n2156","n2146","n2126","n2153","n2288","n2283","n2284","n2131","n2286","n2287","n2285","n2132","n2140","n2289","n2122","n2114","n2149","n2119","n2106","n2111","n2145","n2113","n2117","n2159","n2143","n2123","n2142","n2116","n2154","n2139","n2150","n2157","n2120","n2138","n2130","n2136","n2155","n2107","n2141","n2124","n3754","n2121","n2105","n2108","n3755","n2128","n2110","n2152","n2125","n2135","n2186","n2115","n2144","n2137","n2133","n2148","n2118","n1871","n1875","n1872","n2041","n1873","n2042","n1874","n1884","n1870","n2151","n2147","n2158","n2104","n2134"]},w226:{id:"w226",nodes:["n2243","n2280","n2244","n2245","n2246","n2247","n1931","n1932","n1933","n1934","n1935","n1936","n1937","n1938","n4681","n1939","n1940","n1941","n1942","n1943","n1944","n1945","n1946","n1947"],tags:{highway:"path",name:"Riverwalk Trail",surface:"asphalt",width:"3"}},w227:{id:"w227",nodes:["n2994","n3012","n3011","n2958"],tags:{highway:"secondary",name:"Main Street"}},w228:{id:"w228",nodes:["n2747","n2762","n2757","n2746","n2761","n2758","n2760","n2755","n2749","n2691","n1028","n2432","n2414","n2413","n2412","n2411","n2410","n720","n726","n370","n368","n2748"],tags:{highway:"primary",name:"Main Street"}},w229:{id:"w229",nodes:["n2083","n2103","n2102","n2084","n2085","n2086","n2087","n2242","n471","n324","n2101","n332","n1868"],tags:{name:"Conrail Railroad",railway:"rail"}},w23:{id:"w23",nodes:["n123","n124","n125","n126","n123"],tags:{building:"yes"}},w230:{id:"w230",nodes:["n2232","n2236","n2231","n2230","n2226","n2241","n2237","n2227","n1182","n2233","n2228","n2229","n1183","n2234","n19","n1891","n20","n2223","n2224","n2238","n2235","n2240","n2225","n2239"],tags:{name:"Saint Joseph River",waterway:"river"}},w231:{id:"w231",nodes:["n456","n1036","n1037","n1038"],tags:{barrier:"wall"}},w232:{id:"w232",nodes:["n1034","n1039","n1040"],tags:{barrier:"wall"}},w233:{id:"w233",nodes:["n1041","n1042","n1043","n1044","n1045","n1046","n1041"],tags:{access:"private",leisure:"swimming_pool"}},w234:{id:"w234",nodes:["n1047","n1048"],tags:{barrier:"hedge"}},w235:{id:"w235",nodes:["n1049","n1050","n1051","n1052","n1049"],tags:{building:"yes"}},w236:{id:"w236",nodes:["n1053","n1054","n1055","n1056","n1057","n1058","n1059","n1060","n1053"],tags:{building:"yes"}},w237:{id:"w237",nodes:["n1061","n1062","n1063","n1064","n1065","n1061"],tags:{building:"yes"}},w238:{id:"w238",nodes:["n1066","n1067","n1068","n1069","n1070","n1071","n1066"],tags:{building:"yes"}},w239:{id:"w239",nodes:["n1072","n1073","n1074","n1075","n1072"],tags:{building:"yes"}},w24:{id:"w24",nodes:["n127","n128","n129","n130","n127"],tags:{building:"yes"}},w240:{id:"w240",nodes:["n1076","n1077","n1078","n1079","n1080","n1081","n1076"],tags:{building:"yes"}},w241:{id:"w241",nodes:["n1082","n1083","n1084","n1085","n1082"],tags:{building:"yes"}},w242:{id:"w242",nodes:["n1086","n1087","n1088","n1089","n1086"],tags:{building:"yes"}},w243:{id:"w243",nodes:["n1090","n1091","n1092","n1093","n1094","n1095","n1096","n1097","n1090"],tags:{building:"yes"}},w244:{id:"w244",nodes:["n1098","n1099","n1100","n1101"],tags:{barrier:"fence"}},w245:{id:"w245",nodes:["n1102","n835","n30","n2590","n35","n29","n2591","n34","n28","n2592","n2312","n32","n2593","n31","n33","n2594","n2595","n1102"],tags:{highway:"service"}},w246:{id:"w246",nodes:["n1103","n1139","n1104"],tags:{barrier:"fence"}},w247:{id:"w247",nodes:["n1105","n1106","n1107","n1108","n1109","n1110","n1111","n1112","n1113","n1114","n1105"],tags:{building:"yes"}},w248:{id:"w248",nodes:["n1115","n1116","n1117","n1118","n1119","n1120","n1115"],tags:{building:"yes"}},w249:{id:"w249",nodes:["n1121","n1122","n1123","n1124","n1121"],tags:{building:"yes"}},w25:{id:"w25",nodes:["n131","n132","n133","n134","n135","n136","n137","n138","n139","n140","n141","n142","n131"],tags:{building:"yes"}},w250:{id:"w250",nodes:["n1125","n1126","n1127","n1128","n1129","n1130","n1131","n1132","n1133","n1134","n1135","n1136","n1125"],tags:{building:"yes"}},w251:{id:"w251",nodes:["n1137","n1138","n1139"],tags:{barrier:"fence"}},w252:{id:"w252",nodes:["n876","n1140","n1141"],tags:{footway:"sidewalk",highway:"footway"}},w253:{id:"w253",nodes:["n1141","n1142","n1143","n1144","n1145","n1146"],tags:{footway:"sidewalk",highway:"footway"}},w254:{id:"w254",nodes:["n1146","n4743","n1147","n1148"],tags:{footway:"sidewalk",highway:"footway"}},w255:{id:"w255",nodes:["n1148","n1149","n1150","n1151"],tags:{bridge:"yes",footway:"sidewalk",highway:"footway",layer:"1"}},w256:{id:"w256",nodes:["n1151","n1153","n1154","n1155"],tags:{footway:"sidewalk",highway:"footway"}},w257:{id:"w257",nodes:["n1155","n1156"],tags:{bridge:"yes",footway:"sidewalk",highway:"footway",layer:"1"}},w258:{id:"w258",nodes:["n1157","n1158"],tags:{barrier:"retaining_wall"}},w259:{id:"w259",nodes:["n1156","n1161","n1159","n1160","n719"],tags:{footway:"sidewalk",highway:"footway"}},w26:{id:"w26",nodes:["n143","n608","n144"],tags:{highway:"service"}},w260:{id:"w260",nodes:["n1162","n1163","n1164","n1165","n1166","n1167","n1168","n1169","n1170","n2528"],tags:{highway:"footway"}},w261:{id:"w261",nodes:["n1171","n1172","n1173"],tags:{barrier:"wall"}},w262:{id:"w262",nodes:["n1175","n1176","n1177","n1178","n1179","n1180","n1181","n1175"],tags:{natural:"wood"}},w263:{id:"w263",nodes:["n1947","n1184","n1948","n1185","n1949","n1957","n1950","n480","n1951","n479","n478","n477","n1952","n1851","n1956","n2248","n619","n618","n2249","n2250","n2251","n617","n2252","n616","n2253","n829","n2254","n827","n828","n2255","n830","n2256","n826","n2257","n831","n2258","n832","n835","n834","n2312","n2267","n2259","n833","n2268","n2260","n836","n2261","n837","n2262","n838","n2263","n2264","n839","n2265","n840","n2266"],tags:{highway:"path",name:"Riverwalk Trail",surface:"asphalt",width:"3"}},w264:{id:"w264",nodes:["n1186","n1187","n1188","n1189","n1186"],tags:{building:"yes"}},w265:{id:"w265",nodes:["n1190","n1191","n1192","n1193","n1190"],tags:{building:"yes"}},w266:{id:"w266",nodes:["n1194","n1195","n1196","n1197","n1198","n1199","n1200","n1201","n1194"],tags:{building:"yes"}},w267:{id:"w267",nodes:["n1205","n1206","n1207","n1208","n1209","n1210","n1205"],tags:{building:"house"}},w268:{id:"w268",nodes:["n1211","n1212","n1213","n1214","n1215","n1216","n1217","n1218","n1219","n1220","n1211"],tags:{building:"house"}},w269:{id:"w269",nodes:["n1221","n1225","n1222","n1223","n1224","n1221"],tags:{building:"house"}},w27:{id:"w27",nodes:["n145","n147","n146"],tags:{highway:"footway"}},w270:{id:"w270",nodes:["n1225","n1226","n1227","n1229","n1228"],tags:{barrier:"fence"}},w271:{id:"w271",nodes:["n1229","n1230"],tags:{barrier:"fence"}},w272:{id:"w272",nodes:["n1231","n1232","n1233","n1234","n1235","n1236","n1237","n1238","n1231"],tags:{building:"house"}},w273:{id:"w273",nodes:["n1239","n1240","n1241","n1242","n1243","n1244","n1245","n1246","n1239"],tags:{building:"house"}},w274:{id:"w274",nodes:["n1247","n1248","n1249","n1250","n1247"],tags:{building:"house"}},w275:{id:"w275",nodes:["n1251","n1252","n1253","n1254","n1255","n1256","n1251"],tags:{building:"house"}},w276:{id:"w276",nodes:["n1257","n1258","n1259","n1260","n1257"],tags:{building:"shed"}},w277:{id:"w277",nodes:["n1261","n1262","n1263","n1264","n1265","n1266","n1267","n1268","n1261"],tags:{building:"house"}},w278:{id:"w278",nodes:["n1269","n1270","n1271","n1272","n1273","n1274","n1284","n1269"],tags:{building:"house"}},w279:{id:"w279",nodes:["n1275","n1276","n1277","n1278","n1279","n1280","n1275"],tags:{building:"house"}},w28:{id:"w28",nodes:["n147","n148"],tags:{highway:"footway"}},w280:{id:"w280",nodes:["n1281","n1282","n1283","n1284"],tags:{barrier:"fence"}},w281:{id:"w281",nodes:["n1285","n1286","n1287","n1288","n1285"],tags:{building:"house"}},w282:{id:"w282",nodes:["n1289","n1290","n1291","n1292","n1293","n1294","n1295","n1296","n1289"],tags:{building:"house"}},w283:{id:"w283",nodes:["n1297","n1298","n1299","n1300","n1301","n1302","n1297"],tags:{access:"private",leisure:"swimming_pool"}},w284:{id:"w284",nodes:["n1303","n1304","n1305","n1306","n1307","n1308","n1309","n1310","n1311","n1312","n1303"],tags:{building:"house"}},w285:{id:"w285",nodes:["n1313","n1314","n1315","n1316","n1313"],tags:{building:"house"}},w286:{id:"w286",nodes:["n1317","n1318","n1319","n1320","n1321","n1322","n1323","n1324","n1325","n1326","n1327","n1328","n1329","n1330","n1317"],tags:{building:"house"}},w287:{id:"w287",nodes:["n1331","n1332","n1333","n1334","n1465","n1335","n1336","n1331"],tags:{building:"yes"}},w288:{id:"w288",nodes:["n1349","n1350","n1351","n1352","n1353","n1354","n1355","n1337","n1338","n1341","n1342","n1343","n1344","n1345","n1346","n1347","n1348","n1339","n1340","n1349"],tags:{access:"private",leisure:"swimming_pool"}},w289:{id:"w289",nodes:["n1356","n1331"],tags:{barrier:"fence"}},w29:{id:"w29",nodes:["n149","n874","n150","n151","n897","n898","n875","n152"],tags:{highway:"service",oneway:"yes"}},w290:{id:"w290",nodes:["n1357","n1358","n1359","n1360","n1357"],tags:{building:"shed"}},w291:{id:"w291",nodes:["n1358","n1361","n1362"],tags:{barrier:"fence"}},w292:{id:"w292",nodes:["n1363","n1364","n1365","n1366","n1367","n1368","n1363"],tags:{building:"house"}},w293:{id:"w293",nodes:["n1369","n1370","n1371","n1372","n1373","n1374","n1369"],tags:{leisure:"swimming_pool"}},w294:{id:"w294",nodes:["n1367","n1375","n1376","n1377"],tags:{barrier:"fence"}},w295:{id:"w295",nodes:["n1378","n1379","n1380","n1381","n1378"],tags:{building:"house"}},w296:{id:"w296",nodes:["n1382","n1383","n1384","n1385","n1386","n1387","n1382"],tags:{building:"house"}},w297:{id:"w297",nodes:["n1388","n1389","n1390","n1391","n1392","n1393","n1388"],tags:{building:"house"}},w298:{id:"w298",nodes:["n1394","n1395","n1396","n1397","n1394"],tags:{building:"house"}},w299:{id:"w299",nodes:["n1398","n1399","n1400","n1401","n1398"],tags:{access:"private3",leisure:"swimming_pool"}},w3:{id:"w3",nodes:["n1","n2"],tags:{highway:"track",name:"Water Street"}},w30:{id:"w30",nodes:["n153","n154","n155","n156","n153"],tags:{amenity:"parking"}},w300:{id:"w300",nodes:["n1402","n1403","n1404","n1405","n1406","n1407","n1408","n1409","n1410","n1411","n1412","n1413","n1402"],tags:{building:"house"}},w301:{id:"w301",nodes:["n1414","n1415","n1416","n1417","n1414"],tags:{building:"garage"}},w302:{id:"w302",nodes:["n1406","n1418","n1419","n1403"],tags:{barrier:"fence"}},w303:{id:"w303",nodes:["n1423","n1424","n1425","n1426","n1427","n1428","n1429","n1430","n1431","n1432","n1423"],tags:{building:"house"}},w304:{id:"w304",nodes:["n1433","n1434","n1435","n1446","n1436","n1437","n1438","n1439","n1444","n1440","n1441","n1445","n1442","n1443","n1433"],tags:{access:"private",leisure:"swimming_pool"}},w305:{id:"w305",nodes:["n1447","n1448","n1452","n1453","n1454","n1451","n1449","n1450","n1447"],tags:{building:"house"}},w306:{id:"w306",nodes:["n1455","n1456","n1457","n1458","n1455"],tags:{building:"shed"}},w307:{id:"w307",nodes:["n1459","n1460","n1461","n1462","n1459"],tags:{building:"shed"}},w308:{id:"w308",nodes:["n1463","n1464"],tags:{barrier:"fence"}},w309:{id:"w309",nodes:["n1465","n1466","n1467","n1468"],tags:{barrier:"fence"}},w31:{id:"w31",nodes:["n157","n605","n158"],tags:{highway:"service"}},w310:{id:"w310",nodes:["n1469","n1481","n1463"],tags:{barrier:"hedge"}},w311:{id:"w311",nodes:["n1470","n1471","n1472","n1473","n1474","n1475","n1480","n1476","n1477","n1478","n1479","n1470"],tags:{building:"house"}},w312:{id:"w312",nodes:["n1480","n1481"],tags:{barrier:"wall"}},w313:{id:"w313",nodes:["n1482","n1483","n1484","n1485","n1486","n1487","n1488","n1489","n1490","n1491","n1482"],tags:{access:"private",leisure:"swimming_pool"}},w314:{id:"w314",nodes:["n1492","n1493","n1494","n1495","n1496","n1497","n1498","n1499","n1500","n1501","n1502","n1503","n1504","n1505","n1492"],tags:{building:"house"}},w315:{id:"w315",nodes:["n1506","n1507","n1508","n1509","n1510","n1511","n1512","n1513","n1514","n1515","n1506"],tags:{building:"house"}},w316:{id:"w316",nodes:["n1516","n1517","n1518","n1519","n1520","n1521","n1522","n1523","n1516"],tags:{building:"house"}},w317:{id:"w317",nodes:["n1524","n1525","n1526","n1527","n1528","n1529","n1530","n1531","n1524"],tags:{building:"house"}},w318:{id:"w318",nodes:["n1532","n1533"],tags:{barrier:"fence"}},w319:{id:"w319",nodes:["n1534","n1532","n1535"],tags:{barrier:"fence"}},w32:{id:"w32",nodes:["n159","n160","n161","n162","n159"],tags:{amenity:"parking"}},w320:{id:"w320",nodes:["n1536","n1537","n1538","n1539","n1536"],tags:{building:"shed"}},w321:{id:"w321",nodes:["n1540","n1541","n1542","n1543","n1540"],tags:{building:"shed"}},w322:{id:"w322",nodes:["n1544","n1545","n1546","n1547","n1544"],tags:{building:"shed"}},w323:{id:"w323",nodes:["n1548","n1549","n1550","n1551","n1548"],tags:{building:"house"}},w324:{id:"w324",nodes:["n1552","n1553","n1554","n1555","n1556","n1557","n1558","n1559","n1552"],tags:{building:"house"}},w325:{id:"w325",nodes:["n1560","n1561","n1562","n1563","n1564","n1565","n1566","n1567","n1560"],tags:{building:"house"}},w326:{id:"w326",nodes:["n1561","n1568","n1569","n1570"],tags:{barrier:"wall"}},w327:{id:"w327",nodes:["n1571","n1572"],tags:{barrier:"fence"}},w328:{id:"w328",nodes:["n1573","n1574","n1575","n1576","n1573"],tags:{building:"house"}},w329:{id:"w329",nodes:["n1577","n1578","n1579","n1580","n1581","n1582","n1583","n1584","n1585","n1586","n1577"],tags:{building:"house"}},w33:{id:"w33",nodes:["n157","n163"],tags:{highway:"service"}},w330:{id:"w330",nodes:["n1587","n1588","n1589","n1590","n1591","n1592","n1593","n1594","n1587"],tags:{building:"house"}},w331:{id:"w331",nodes:["n1595","n1596","n1597","n1598","n1599","n1600","n1601","n1595"],tags:{access:"private",leisure:"swimming_pool"}},w332:{id:"w332",nodes:["n1602","n1603","n1604","n1605","n1606","n1607","n1608","n1609","n1611","n1610","n1612","n1613","n1602"],tags:{building:"house"}},w333:{id:"w333",nodes:["n2018","n1626","n1627","n2017","n2018"],tags:{amenity:"shelter",building:"yes",shelter_type:"picnic_shelter"}},w334:{id:"w334",nodes:["n2","n3","n2764"],tags:{highway:"service",name:"Water Street"}},w335:{id:"w335",nodes:["n3","n1628","n1614"],tags:{highway:"service"}},w336:{id:"w336",nodes:["n3198","n4545","n2747"],tags:{highway:"residential",name:"Morris Avenue"}},w337:{id:"w337",nodes:["n1629","n3504"],tags:{highway:"service",service:"alley",surface:"unpaved"}},w338:{id:"w338",nodes:["n1813","n1635","n1814","n1634","n1815","n1632","n1816","n1817"],tags:{highway:"service",service:"parking_aisle"}},w339:{id:"w339",nodes:["n1827","n4684","n4690","n1842","n4686","n4685","n1826","n1828","n1846","n1645","n1637","n4703","n1641"],tags:{highway:"residential",name:"Millard Street"}},w34:{id:"w34",nodes:["n164","n165","n166","n171","n866","n172","n167","n168","n169","n910","n170","n164"],tags:{amenity:"parking"}},w340:{id:"w340",nodes:["n1824","n1825"],tags:{highway:"service",service:"parking_aisle"}},w341:{id:"w341",nodes:["n1701","n1702","n1703","n1704","n1705","n1706","n1701"],tags:{building:"yes"}},w342:{id:"w342",nodes:["n1855","n1860","n1856","n1775","n1804","n1776","n1855"],tags:{amenity:"parking",fee:"no"}},w343:{id:"w343",nodes:["n1757","n1758","n1759","n1760","n1757"],tags:{building:"yes"}},w344:{id:"w344",nodes:["n1659","n1660","n1661","n1662","n1663","n1664","n1665","n1666","n1659"],tags:{building:"school"}},w345:{id:"w345",nodes:["n1751","n1752","n1753","n1754","n1755","n1756","n1751"],tags:{building:"yes"}},w346:{id:"w346",nodes:["n1641","n1676","n1673","n1639","n1810","n1642","n1849","n4759","n1845"],tags:{highway:"residential",name:"Douglas Avenue"}},w347:{id:"w347",nodes:["n1642","n1643","n1031","n1630","n845","n1631","n816","n1831","n902","n905","n152","n149","n1832","n1850","n878","n1833","n1852","n42","n1834","n61","n60","n1851","n1835"],tags:{highway:"primary",name:"Michigan Avenue"}},w348:{id:"w348",nodes:["n1650","n1651","n1652","n1653","n1654","n1655","n1656","n1657","n1658","n1650"],tags:{leisure:"playground"}},w349:{id:"w349",nodes:["n1861","n1818","n1819","n1820","n1821","n1825","n1823","n1639"],tags:{highway:"service"}},w35:{id:"w35",nodes:["n168","n167","n172"],tags:{barrier:"fence",fence_type:"chain_link"}},w350:{id:"w350",nodes:["n1783","n1819","n1784","n1857","n1861","n1858","n1783"],tags:{amenity:"parking"}},w351:{id:"w351",nodes:["n1717","n1718","n1719","n1720","n1717"],tags:{building:"yes"}},w352:{id:"w352",nodes:["n1743","n1744","n1745","n1746","n1747","n1748","n1749","n1750","n1743"],tags:{building:"yes"}},w353:{id:"w353",nodes:["n1637","n1636","n1029","n4715","n1630"],tags:{highway:"residential",name:"Lincoln Avenue"}},w354:{id:"w354",nodes:["n1713","n1714","n1715","n1716","n1713"],tags:{building:"yes"}},w355:{id:"w355",nodes:["n1689","n1690","n1691","n1692","n1693","n1694","n1695","n1696","n1689"],tags:{building:"yes"}},w356:{id:"w356",nodes:["n1631","n4717","n1840","n4745","n1841"],tags:{highway:"residential",name:"Hook Avenue"}},w357:{id:"w357",nodes:["n1737","n1738","n1739","n1740","n1741","n1742","n1737"],tags:{building:"yes"}},w358:{id:"w358",nodes:["n1707","n1708","n1709","n1710","n1711","n1712","n1707"],tags:{building:"yes"}},w359:{id:"w359",nodes:["n1829","n4695","n4697","n1843","n4698","n4701","n1638","n4702","n4705","n1636","n4706","n4707","n1633"],tags:{highway:"residential",name:"South Street"}},w36:{id:"w36",nodes:["n910","n171","n866","n172"],tags:{barrier:"fence",fence_type:"chain_link"}},w360:{id:"w360",nodes:["n1767","n1768","n1769","n1770","n1771","n1772","n1773","n1774","n1767"],tags:{building:"yes"}},w361:{id:"w361",nodes:["n1859","n1860","n1804","n1640","n1805","n1817","n1806","n1644","n1811","n1807","n1808","n3419","n1812","n1790","n3418","n3744","n1809","n1813","n1810"],tags:{highway:"service"}},w362:{id:"w362",nodes:["n1639","n1683","n4710","n1633"],tags:{highway:"residential",name:"South Street",oneway:"yes"}},w363:{id:"w363",nodes:["n1646","n1647","n1648","n1649","n1646"],tags:{leisure:"pitch",pitch:"basketball"}},w364:{id:"w364",nodes:["n3820","n3821","n3822","n3823","n3824","n3825","n3826","n3827","n3828","n3829","n3830","n3838","n3839","n3820"],tags:{amenity:"school",name:"Three Rivers Middle School"}},w365:{id:"w365",nodes:["n1721","n1722","n1723","n1724","n1725","n1726","n1727","n1728","n1729","n1730","n1731","n1732","n1733","n1734","n1735","n1736","n1721"],tags:{building:"yes"}},w366:{id:"w366",nodes:["n1791","n1792","n1793","n1794","n1795","n1796","n1798","n1799","n1800","n1801","n1802","n1803","n1791"],tags:{amenity:"parking"}},w367:{id:"w367",nodes:["n1633","n4708","n4711","n1643","n4712","n1838","n4752","n1839"],tags:{highway:"residential",name:"Grant Avenue"}},w368:{id:"w368",nodes:["n1853","n1687","n1688","n1854","n1853"],tags:{amenity:"library",building:"yes",name:"Three Rivers Public Library"}},w369:{id:"w369",nodes:["n1777","n1778","n1779","n1780","n1781","n1782","n1777"],tags:{amenity:"parking"}},w37:{id:"w37",nodes:["n173","n174","n175","n176","n177","n178","n179","n180","n173"],tags:{building:"yes"}},w370:{id:"w370",nodes:["n1645","n1638","n858","n4718","n1631"],tags:{highway:"residential",name:"Hook Avenue"}},w371:{id:"w371",nodes:["n3836","n3835","n4624","n3831","n4632","n3834","n3832","n3833","n3830","n3838","n3839","n3837","n3836"],tags:{amenity:"school",name:"Three Rivers High School"}},w372:{id:"w372",nodes:["n1697","n1698","n1699","n1700","n1697"],tags:{building:"yes"}},w373:{id:"w373",nodes:["n2891","n1785","n1786","n3394","n1787","n1788","n1789","n1830","n1836","n1837","n1848","n3409","n2891"],tags:{amenity:"parking"}},w374:{id:"w374",nodes:["n1761","n1762","n1763","n1764","n1765","n1766","n1761"],tags:{building:"yes"}},w375:{id:"w375",nodes:["n1822","n1823"],tags:{highway:"service",service:"parking_aisle"}},w376:{id:"w376",nodes:["n1677","n1678","n1679","n1680","n1681","n1682","n1677"],tags:{amenity:"parking"}},w377:{id:"w377",nodes:["n1676","n1675","n1674","n1673"],tags:{highway:"service",oneway:"yes"}},w378:{id:"w378",nodes:["n1667","n1668","n1669","n1670","n1671","n1672","n1667"],tags:{amenity:"school",name:"Andrews Elementary School"}},w379:{id:"w379",nodes:["n1630","n4714","n1847","n4750","n1844"],tags:{highway:"residential",name:"Lincoln Avenue"}},w38:{id:"w38",nodes:["n181","n182","n183","n185","n184","n181"],tags:{building:"yes"}},w380:{id:"w380",nodes:["n1683","n3745","n1686","n1633"],tags:{highway:"service",oneway:"yes",service:"parking_aisle"}},w381:{id:"w381",nodes:["n2022","n2037"],tags:{highway:"footway"}},w382:{id:"w382",nodes:["n1826","n1863"],tags:{highway:"residential"}},w383:{id:"w383",nodes:["n2011","n2012","n739","n2013","n2014","n2029","n2011"],tags:{amenity:"shelter",building:"yes",shelter_type:"picnic_shelter"}},w384:{id:"w384",nodes:["n2064","n2065","n2066","n2067","n2068","n2069","n2070","n2071","n2072","n2073","n2074","n2075","n2076","n2077","n2078","n2079","n2064"],tags:{building:"yes"}},w385:{id:"w385",nodes:["n1923","n1924","n1925","n1926","n1927","n1928","n1930","n1929","n1923"],tags:{natural:"water"}},w386:{id:"w386",nodes:["n1827","n14","n1886","n15","n1887","n16","n1888","n18","n17","n1889","n12","n13","n1890","n485","n1864","n11","n10","n2058","n2036","n1865","n2020","n9","n8","n1866","n295","n1867"],tags:{highway:"service"}},w387:{id:"w387",nodes:["n1846","n1843","n865","n157","n4721","n1831"],tags:{highway:"residential",name:"Andrews Street"}},w388:{id:"w388",nodes:["n2019","n2020","n2021","n2022","n2023","n2024","n2025","n2026","n2027","n2028","n2029"],tags:{highway:"footway"}},w389:{id:"w389",nodes:["n2217","n2222","n2221","n2219","n1877","n1879","n1882","n1883","n484","n1885","n483","n1880","n1881","n1878","n1884","n2223"],tags:{name:"Rocky River",waterway:"river"}},w39:{id:"w39",nodes:["n185","n186","n187"],tags:{barrier:"fence"}},w390:{id:"w390",nodes:["n2050","n2051","n2052","n2053","n2050"],tags:{amenity:"shelter",building:"yes",shelter_type:"picnic_shelter"}},w391:{id:"w391",nodes:["n2089","n2090","n2091","n2092","n2093","n2094","n2311","n2095","n2096","n2097","n2098","n1174","n2099","n751","n43","n2062","n4725","n873","n1832"],tags:{highway:"residential",name:"Constantine Street"}},w392:{id:"w392",nodes:["n1869","n212","n436","n2281","n2081"],tags:{highway:"primary",name:"Michigan Avenue"}},w393:{id:"w393",nodes:["n1829","n611","n144","n4694","n602","n1832"],tags:{highway:"tertiary",name:"Constantine Street"}},w394:{id:"w394",nodes:["n1997","n1998","n2000","n1999"],tags:{highway:"service",service:"parking_aisle"}},w395:{id:"w395",nodes:["n1835","n1869"],tags:{bridge:"yes",highway:"primary",name:"Michigan Avenue"}},w396:{id:"w396",nodes:["n2000","n2001"],tags:{highway:"service",service:"parking_aisle"}},w397:{id:"w397",nodes:["n2082","n4688","n1842","n308","n498","n509","n246","n241","n1867","n4645","n293","n1834"],tags:{highway:"residential",name:"Spring Street"}},w398:{id:"w398",nodes:["n2015","n2016","n2017","n2018","n2015"],tags:{building:"yes"}},w399:{id:"w399",nodes:["n2062","n45","n2063","n877","n41","n1852"],tags:{highway:"service"}},w4:{id:"w4",nodes:["n7","n38","n378","n379","n7"],tags:{building:"yes"}},w40:{id:"w40",nodes:["n188","n189","n190","n191","n192","n193","n188"],tags:{building:"house"}},w400:{id:"w400",nodes:["n1968","n1969","n1970","n1971","n2007","n1972","n1973","n1978","n1974","n1977","n1976","n1975","n1968"],tags:{amenity:"parking"}},w401:{id:"w401",nodes:["n1963","n1964"],tags:{bridge:"yes",highway:"footway"}},w402:{id:"w402",nodes:["n1892","n1893","n1894","n1895","n1896","n1897","n1898","n1899","n1900","n1901","n1902","n1903","n1892"],tags:{"addr:city":"Three Rivers","addr:housenumber":"112","addr:postcode":"49093","addr:state":"MI","addr:street":"Spring Street",barrier:"fence",name:"Scidmore Park Petting Zoo",tourism:"zoo",zoo:"petting_zoo"}},w403:{id:"w403",nodes:["n1957","n1958","n1959","n481","n1960","n482","n1949"],tags:{highway:"path"}},w404:{id:"w404",nodes:["n2281","n27","n330","n1987","n1988"],tags:{highway:"service"}},w405:{id:"w405",nodes:["n2249","n2269","n2270","n2271","n2272","n454","n455","n2273"],tags:{highway:"path",name:"Riverwalk Trail"}},w406:{id:"w406",nodes:["n1947","n1624","n1625","n2030","n2033","n4658","n4659","n2031","n2032","n2021"],tags:{highway:"footway"}},w407:{id:"w407",nodes:["n2034","n2036","n2009"],tags:{highway:"footway"}},w408:{id:"w408",nodes:["n1964","n1965","n2002","n1966","n21","n1967","n1969"],tags:{highway:"footway"}},w409:{id:"w409",nodes:["n1904","n1905","n1906","n1907","n1908","n1909","n748","n1910","n747","n1911","n749","n1912","n750","n1913","n1922","n1914","n1921","n1915","n746","n1916","n745","n1917","n744","n1918","n743","n742","n1919","n741","n1920","n740","n1904"],tags:{natural:"water"}},w41:{id:"w41",nodes:["n194","n195","n196","n197","n198","n199","n200","n201","n202","n203","n204","n205","n194"],tags:{building:"house"}},w410:{id:"w410",nodes:["n1868","n2088"],tags:{bridge:"yes",name:"Conrail Railroad",railway:"rail"}},w411:{id:"w411",nodes:["n2010","n2019","n2009","n2008","n2058","n2035","n1961","n1962","n1947","n1963"],tags:{highway:"footway"}},w412:{id:"w412",nodes:["n2290","n2043","n2044","n2045","n1872","n2041","n1873","n2042","n1874","n2046","n2047","n2048","n2049","n2290"],tags:{"addr:city":"Three Rivers","addr:housenumber":"112","addr:postcode":"49093","addr:state":"MI","addr:street":"Spring Street",leisure:"park",name:"Scidmore Park"}},w413:{id:"w413",nodes:["n1831","n876","n4720","n821","n2089"],tags:{highway:"residential",name:"Andrews Street"}},w414:{id:"w414",nodes:["n2002","n2003","n2004","n2005","n2006","n2007"],tags:{highway:"footway"}},w415:{id:"w415",nodes:["n1979","n1980","n1981","n1982","n1979"],tags:{amenity:"parking"}},w416:{id:"w416",nodes:["n2054","n2055","n2056","n2057","n2054"],tags:{amenity:"shelter",building:"yes",shelter_type:"picnic_shelter"}},w417:{id:"w417",nodes:["n2291","n2292","n2293","n2294","n2295","n2296","n2297","n2298","n2299","n1098","n2300","n2301","n2302","n2303","n2304","n2059","n2060","n2305","n2307","n2306","n2310","n2308","n2309","n2291"],tags:{leisure:"park",name:"Memory Isle Park"}},w418:{id:"w418",nodes:["n2033","n2034","n2035"],tags:{highway:"footway"}},w419:{id:"w419",nodes:["n1983","n1984","n1985","n1986","n1983"],tags:{amenity:"parking"}},w42:{id:"w42",nodes:["n206","n207","n208","n209","n210","n211","n206"],tags:{building:"house"}},w420:{id:"w420",nodes:["n1840","n4746","n4748","n1847","n4749","n4755","n1838","n4754","n4756","n1849"],tags:{highway:"residential",name:"French Street"}},w421:{id:"w421",nodes:["n2337","n2268"],tags:{highway:"path"}},w422:{id:"w422",nodes:["n2338","n2339","n2320","n2317","n2319","n2318","n2340","n2341","n2342","n2343","n2344","n2345","n2346","n2347","n2348","n2338"],tags:{natural:"water"}},w423:{id:"w423",nodes:["n2180","n2349","n2350","n2351","n2352","n2404","n2353","n2354","n2355","n2356","n2357","n2358","n2359","n2360","n2361","n2362","n2363","n2364","n2365","n2366","n2370","n2371","n2372","n2373","n2374","n2375","n2377","n2378","n2380","n2381","n2382","n2383","n2386","n2389","n2390","n2391","n2392","n2393","n2396","n2397","n2401","n2402","n2321","n2322","n2323","n2403","n2180"],tags:{natural:"wetland"}},w424:{id:"w424",nodes:["n2324","n2316","n1841","n2315","n2314","n1844","n1839","n4758","n1845"],tags:{highway:"residential",name:"Pealer Street"}},w425:{id:"w425",nodes:["n2267","n2337","n2336","n2335","n2334","n2333","n2332","n2331","n2330","n37","n2329","n2328","n2327","n36","n2326","n2325","n2266"],tags:{highway:"path",name:"Riverwalk Trail"}},w426:{id:"w426",nodes:["n2478","n681","n680","n679","n2459","n2467","n2487","n2478"],tags:{building:"yes"}},w427:{id:"w427",nodes:["n2671","n2672","n2673","n2674","n2671"],tags:{building:"yes"}},w428:{id:"w428",nodes:["n2483","n2482","n2486","n2489","n2492","n2502","n2495","n2480","n2483"],tags:{building:"yes"}},w429:{id:"w429",nodes:["n2707","n2708","n2716","n2712","n2714","n2713","n2715","n2711","n2710","n2723","n2709","n2707"],tags:{amenity:"parking"}},w43:{id:"w43",nodes:["n1955","n1956"],tags:{footway:"sidewalk",highway:"footway",name:"Riverwalk Trail"}},w430:{id:"w430",nodes:["n2471","n2474","n2484","n2479","n2471"],tags:{building:"yes"}},w431:{id:"w431",nodes:["n2218","n2434","n2436","n2433","n2435","n2210"],tags:{name:"Rocky River",waterway:"river"}},w432:{id:"w432",nodes:["n2782","n2532","n2783","n2784","n2782"],tags:{amenity:"parking"}},w433:{id:"w433",nodes:["n2513","n649","n2520","n2514","n2507","n2513"],tags:{building:"yes"}},w434:{id:"w434",nodes:["n2470","n2468","n2461","n2465","n2470"],tags:{building:"yes"}},w435:{id:"w435",nodes:["n2598","n2599","n648","n649","n2520","n2598"],tags:{building:"yes"}},w436:{id:"w436",nodes:["n2639","n2640","n2641","n2642","n2643","n2644","n2645","n2646","n2647","n2648","n2639"],tags:{building:"yes"}},w437:{id:"w437",nodes:["n2503","n2512","n2508","n2499","n2503"],tags:{building:"yes"}},w438:{id:"w438",nodes:["n2440","n2800","n2774","n1"],tags:{highway:"residential",name:"Water Street"}},w439:{id:"w439",nodes:["n2675","n2676","n2677","n2678","n2675"],tags:{building:"yes"}},w44:{id:"w44",nodes:["n213","n214","n215","n216","n213"],tags:{building:"yes"}},w440:{id:"w440",nodes:["n2512","n2503","n2507","n2514","n2512"],tags:{building:"yes"}},w441:{id:"w441",nodes:["n2554","n2717","n674","n2720","n2798"],tags:{highway:"service",oneway:"yes"}},w442:{id:"w442",nodes:["n2583","n2596","n2584","n2585","n2595","n2586","n2587","n2588","n2589","n2583"],tags:{amenity:"parking"}},w443:{id:"w443",nodes:["n2629","n2627","n2628","n2616","n2630","n2629"],tags:{building:"yes"}},w444:{id:"w444",nodes:["n2717","n2724","n670","n2718","n669","n668","n2722","n2727"],tags:{highway:"service",oneway:"yes",service:"parking_aisle"}},w445:{id:"w445",nodes:["n2572","n2573"],tags:{bridge:"yes",highway:"path",name:"Riverwalk Trail"}},w446:{id:"w446",nodes:["n2603","n2604","n2601","n2605","n2606","n2607","n2603"],tags:{building:"yes"}},w447:{id:"w447",nodes:["n2780","n2777","n628","n624","n2779"],tags:{highway:"residential",name:"Foster Street",oneway:"yes"}},w448:{id:"w448",nodes:["n2733","n2734","n2735","n2736","n2737","n2738","n663","n664","n2739","n2733"],tags:{building:"yes"}},w449:{id:"w449",nodes:["n2564","n2565","n2566","n2567","n2568","n2794","n2795","n2564"],tags:{amenity:"parking"}},w45:{id:"w45",nodes:["n217","n218","n219","n220","n217"],tags:{amenity:"shelter",building:"yes",shelter_type:"picnic_shelter"}},w450:{id:"w450",nodes:["n2799","n2728","n2729","n2730","n2731","n2732","n2799"],tags:{building:"yes"}},w451:{id:"w451",nodes:["n2441","n1170","n2442","n2575","n2443","n2445","n2444","n2448","n2441"],tags:{amenity:"parking"}},w452:{id:"w452",nodes:["n2273","n457","n2569","n458","n2570"],tags:{highway:"path",name:"Riverwalk Trail"}},w453:{id:"w453",nodes:["n2447","n2242","n2448","n2527","n2530"],tags:{highway:"service"}},w454:{id:"w454",nodes:["n2560","n333","n2561"],tags:{highway:"service",service:"parking_aisle"}},w455:{id:"w455",nodes:["n2679","n2680","n2681","n2682","n2683","n2684","n2685","n2686","n2687","n2688","n2689","n2690","n2679"],tags:{building:"yes"}},w456:{id:"w456",nodes:["n2425","n2429","n2424"],tags:{bridge:"yes",highway:"residential",name:"Moore Street"}},w457:{id:"w457",nodes:["n2487","n2467","n2472","n2480","n2495","n2487"],tags:{building:"yes"}},w458:{id:"w458",nodes:["n2659","n2660","n2661","n2662","n678","n677","n2663","n2664","n2665","n2666","n675","n676","n2659"],tags:{building:"yes"}},w459:{id:"w459",nodes:["n2600","n2598","n2599","n2601","n2605","n2602","n2600"],tags:{building:"yes"}},w46:{id:"w46",nodes:["n221","n222","n223","n224","n221"],tags:{amenity:"shelter",building:"yes",shelter_type:"picnic_shelter"}},w460:{id:"w460",nodes:["n2468","n2464","n2455","n2457","n2461","n2468"],tags:{building:"yes"}},w461:{id:"w461",nodes:["n2478","n2473","n683","n682","n2463","n681","n2478"],tags:{building:"yes"}},w462:{id:"w462",nodes:["n2547","n473","n2548","n2549"],tags:{highway:"service",service:"parking_aisle"}},w463:{id:"w463",nodes:["n2573","n2574"],tags:{highway:"path",name:"Riverwalk Trail"}},w464:{id:"w464",nodes:["n2445","n2597","n2527","n2528","n2529","n2530","n2531","n2597"],tags:{highway:"service",service:"parking_aisle"}},w465:{id:"w465",nodes:["n2571","n459","n2572"],tags:{highway:"path",name:"Riverwalk Trail"}},w466:{id:"w466",nodes:["n2445","n2574","n2552","n442","n2551","n4727","n323","n2446"],tags:{highway:"service"}},w467:{id:"w467",nodes:["n2484","n2474","n2477","n2485","n2488","n2484"],tags:{building:"yes"}},w468:{id:"w468",nodes:["n2695","n2696","n2697","n2698","n2699","n2700","n2701","n2702","n2695"],tags:{building:"yes"}},w469:{id:"w469",nodes:["n2469","n2476","n2481","n2475","n920","n2466","n2469"],tags:{building:"yes"}},w47:{id:"w47",nodes:["n1988","n1997","n1989","n25","n24","n1990","n26","n1991","n21","n1992","n2006","n1993","n22","n1994","n23","n1995","n1999","n1996","n2001","n1988"],tags:{highway:"service"}},w470:{id:"w470",nodes:["n2473","n2470","n2465","n2458","n2462","n683","n2473"],tags:{building:"yes"}},w471:{id:"w471",nodes:["n2490","n2496","n994","n997","n998","n996","n995","n2485","n2477","n2490"],tags:{building:"yes"}},w472:{id:"w472",nodes:["n2424","n2426","n2427","n2428"],tags:{highway:"residential",name:"Moore Street"}},w473:{id:"w473",nodes:["n2432","n1026","n4741","n2554","n2425"],tags:{highway:"residential",name:"Moore Street"}},w474:{id:"w474",nodes:["n2577","n2576"],tags:{bridge:"yes",highway:"footway"}},w475:{id:"w475",nodes:["n2497","n2505","n2500","n2493","n2497"],tags:{building:"yes"}},w476:{id:"w476",nodes:["n2493","n2500","n2501","n2496","n2490","n2493"],tags:{building:"yes"}},w477:{id:"w477",nodes:["n2431","n360","n4726","n418","n397","n396","n2547","n646","n2447","n644","n2418","n424","n640","n2419","n2420","n2423"],tags:{highway:"residential",name:"Railroad Drive"}},w478:{id:"w478",nodes:["n2515","n2511","n2498","n2504","n2509","n2515"],tags:{building:"yes"}},w479:{id:"w479",nodes:["n2525","n651","n650","n2526","n2524","n653","n652","n656","n2523","n654","n2518","n2517","n2521","n2522","n2525"],tags:{building:"yes"}},w48:{id:"w48",nodes:["n225","n237","n226","n227","n228","n229","n230","n231","n232","n233","n234","n235","n236","n225"],tags:{building:"yes"}},w480:{id:"w480",nodes:["n2703","n2704","n2710","n2711","n2705","n2706","n2703"],tags:{amenity:"parking"}},w481:{id:"w481",nodes:["n2796","n2657","n2658","n2797","n2796"],tags:{building:"yes"}},w482:{id:"w482",nodes:["n2550","n2551","n442","n2552","n2553","n2550"],tags:{amenity:"parking"}},w483:{id:"w483",nodes:["n2790","n2542"],tags:{highway:"service",service:"parking_aisle"}},w484:{id:"w484",nodes:["n2311","n1102"],tags:{highway:"service"}},w485:{id:"w485",nodes:["n2515","n2509","n2516","n2519","n2515"],tags:{building:"yes"}},w486:{id:"w486",nodes:["n2506","n2502","n2492","n2491","n2494","n2506"],tags:{building:"yes"}},w487:{id:"w487",nodes:["n2667","n2668","n2669","n2670","n2667"],tags:{building:"yes"}},w488:{id:"w488",nodes:["n2616","n2608","n2617","n2618","n2619","n2620","n2621","n2622","n2623","n2624","n2625","n2626","n2627","n2628","n2616"],tags:{building:"yes"}},w489:{id:"w489",nodes:["n2081","n2430"],tags:{bridge:"yes",highway:"primary",name:"Michigan Avenue"}},w49:{id:"w49",nodes:["n237","n238"],tags:{highway:"footway"}},w490:{id:"w490",nodes:["n2410","n636","n730","n635","n2409","n2694","n2751","n2765","n2753","n2768","n2754","n2769","n2745","n2766","n4503","n2763","n4501","n2752","n2781"],tags:{highway:"residential",name:"Portage Avenue"}},w491:{id:"w491",nodes:["n2578","n2579","n2580","n2581","n2578"],tags:{amenity:"shelter",building:"yes",shelter_type:"picnic_shelter"}},w492:{id:"w492",nodes:["n2556","n2557","n2558","n2559","n2556"],tags:{amenity:"parking"}},w493:{id:"w493",nodes:["n2460","n2456","n687","n2453","n2454","n2460"],tags:{building:"yes"}},w494:{id:"w494",nodes:["n2471","n2479","n2476","n2469","n2471"],tags:{building:"yes"}},w495:{id:"w495",nodes:["n2724","n2725","n673","n672","n671","n2726","n2727"],tags:{highway:"service",oneway:"yes",service:"parking_aisle"}},w496:{id:"w496",nodes:["n2649","n2650","n2651","n2652","n2653","n2654","n2655","n2656","n2649"],tags:{building:"yes"}},w497:{id:"w497",nodes:["n2430","n2446","n343","n2101","n2560","n2431","n363","n2748"],tags:{highway:"primary",name:"Michigan Avenue"}},w498:{id:"w498",nodes:["n2691","n2692","n634","n633","n2693","n2694"],tags:{highway:"service"}},w499:{id:"w499",nodes:["n2423","n2415","n661","n2416","n2417","n2719","n2721","n2772","n2756","n2773","n2759","n2767"],tags:{highway:"residential",name:"West Street"}},w5:{id:"w5",nodes:["n380","n381","n382","n383","n429","n430","n380"],tags:{building:"yes"}},w50:{id:"w50",nodes:["n239","n499","n508","n245","n238","n242","n240"],tags:{footway:"sidewalk",highway:"footway"}},w500:{id:"w500",nodes:["n2428","n1152","n2421","n2324"],tags:{bridge:"yes",highway:"residential",name:"Moore Street"}},w501:{id:"w501",nodes:["n2608","n2609","n2610","n2611","n2612","n2613","n2614","n2615","n2617","n2608"],tags:{building:"yes"}},w502:{id:"w502",nodes:["n2570","n2571"],tags:{bridge:"yes",highway:"path",name:"Riverwalk Trail"}},w503:{id:"w503",nodes:["n2540","n2542","n2787"],tags:{highway:"service"}},w504:{id:"w504",nodes:["n2269","n2582","n2250"],tags:{highway:"path"}},w505:{id:"w505",nodes:["n2631","n2632","n2633","n2634","n2635","n2636","n2637","n2638","n2631"],tags:{building:"yes"}},w506:{id:"w506",nodes:["n2543","n2544","n2545","n395","n2546","n2543"],tags:{amenity:"parking"}},w507:{id:"w507",nodes:["n2449","n2450","n2451","n2452","n1162","n2449"],tags:{leisure:"pitch",sport:"tennis"}},w508:{id:"w508",nodes:["n2554","n1160","n2559","n2558","n659","n2555","n658","n657","n2419"],tags:{highway:"service"}},w509:{id:"w509",nodes:["n2499","n2508","n2510","n2505","n2497","n2499"],tags:{building:"yes"}},w51:{id:"w51",nodes:["n241","n242","n243","n244"],tags:{highway:"service",surface:"unpaved"}},w510:{id:"w510",nodes:["n2575","n2577"],tags:{highway:"footway"}},w511:{id:"w511",nodes:["n2533","n2534","n2535","n2536","n2537","n2538","n2539","n2785","n2786","n2533"],tags:{amenity:"parking"}},w512:{id:"w512",nodes:["n2801","n2740","n2741","n2742","n2743","n2744","n2801"],tags:{building:"yes"}},w513:{id:"w513",nodes:["n2720","n2721"],tags:{highway:"service",service:"parking_aisle"}},w514:{id:"w514",nodes:["n2788","n2790","n2789","n989","n2540","n2541"],tags:{highway:"service",service:"parking_aisle"}},w515:{id:"w515",nodes:["n2848","n2849","n2850","n2851","n2803","n2804","n2812"],tags:{highway:"residential",name:"Middle Street"}},w516:{id:"w516",nodes:["n2852","n2805"],tags:{access:"private",highway:"service",name:"Battle Street"}},w517:{id:"w517",nodes:["n2863","n2815","n2814","n2812","n2864","n2855","n2865","n2867","n2868"],tags:{highway:"secondary",name:"Michigan Avenue",name_1:"State Highway 60",ref:"M 60"}},w518:{id:"w518",nodes:["n2859","n2808"],tags:{highway:"residential",name:"2nd Avenue"}},w519:{id:"w519",nodes:["n2823","n2824","n2825","n2826","n2827","n2828","n2823"],tags:{building:"yes"}},w52:{id:"w52",nodes:["n247","n248","n249","n250","n247"],tags:{amenity:"parking"}},w520:{id:"w520",nodes:["n2806","n2807","n2803"],tags:{highway:"residential",name:"2nd Avenue"}},w521:{id:"w521",nodes:["n2829","n2830","n2831","n2832","n2833","n2834","n2835","n2836","n2837","n2838","n2829"],tags:{building:"yes"}},w522:{id:"w522",nodes:["n2815","n2813","n2811","n4597","n2846","n4596","n2857","n4601","n2853","n4602","n2861","n4","n2879","n4560","n3550","n5","n1685"],tags:{highway:"residential",name:"Washington Street"}},w523:{id:"w523",nodes:["n2878","n2811","n2810","n2860","n2880","n2881","n2882"],tags:{highway:"residential",name:"5th Avenue"}},w524:{id:"w524",nodes:["n2816","n2817","n2818","n2819","n2820","n2821","n2822","n2816"],tags:{building:"yes"}},w525:{id:"w525",nodes:["n2869","n2856","n2806","n2808","n2814","n2809","n2810","n2847","n2858","n2854","n2870","n2871","n6","n2872","n2839","n2862"],tags:{highway:"residential",name:"Wood Street"}},w526:{id:"w526",nodes:["n2877","n2809","n2813","n2844","n2843"],tags:{highway:"residential",name:"4th Avenue"}},w527:{id:"w527",nodes:["n4785","n4784","n2936","n4788","n4787","n4786","n4785"],tags:{amenity:"parking"}},w528:{id:"w528",nodes:["n2864","n2892","n2893","n2877","n2860","n3840"],tags:{highway:"residential",name:"Garden Street"}},w529:{id:"w529",nodes:["n2868","n2890"],tags:{bridge:"yes",highway:"secondary",name:"Michigan Avenue",name_1:"State Highway 60",ref:"M 60"}},w53:{id:"w53",nodes:["n251","n252","n253","n254","n255","n256","n257","n258","n259","n260","n261","n262","n251"],tags:{building:"yes"}},w530:{id:"w530",nodes:["n2914","n2915","n2916","n2917","n2918","n2919","n2920","n2921","n2922","n2923","n2924","n2925","n2926","n2927","n2928","n2929","n2930","n2931","n2932","n2933","n2914"],tags:{building:"yes"}},w531:{id:"w531",nodes:["n2958","n2896"],tags:{bridge:"yes",highway:"secondary",name:"Main Street"}},w532:{id:"w532",nodes:["n2896","n394","n364","n2748"],tags:{highway:"secondary",name:"Main Street"}},w533:{id:"w533",nodes:["n2800","n2943","n2940","n2941","n2942","n2943"],tags:{highway:"service",service:"parking_aisle"}},w534:{id:"w534",nodes:["n3836","n3837","n3839","n3838","n3834","n4632","n3831","n4624","n3835","n3836"],tags:{barrier:"fence"}},w535:{id:"w535",nodes:["n2894","n2944","n2774","n2765"],tags:{highway:"residential",name:"5th Avenue"}},w536:{id:"w536",nodes:["n2890","n2780","n627","n2889","n2887","n623","n2888","n366","n2748"],tags:{highway:"secondary",name:"Michigan Avenue",name_1:"State Highway 60",ref:"M 60"}},w537:{id:"w537",nodes:["n2895","n738","n2887","n737","n2913"],tags:{highway:"residential",name:"Water Street"}},w538:{id:"w538",nodes:["n2855","n3756","n2884","n2885","n2886","n2945","n2946","n2947","n2948","n2949","n2950","n2951","n2952","n2953","n2955","n2848","n2956","n2856"],tags:{highway:"residential",name:"River Drive"}},w539:{id:"w539",nodes:["n2882","n2894"],tags:{bridge:"yes",highway:"residential",name:"5th Avenue"}},w54:{id:"w54",nodes:["n263","n264","n265","n266","n267","n268","n269","n270","n271","n272","n273","n274","n275","n276","n263"],tags:{building:"yes"}},w540:{id:"w540",nodes:["n2987","n2964","n2981","n2983","n2966","n2982","n2962","n2960","n2967","n2965","n2984","n2977","n2968","n2976","n2986","n2988","n2963","n2970","n2969","n2979","n2974","n2980","n2959","n2973","n2985","n2961","n2975","n2971","n2972","n2978","n2898","n2907","n2912","n2909","n2911","n2901","n2903","n2904","n2906","n2902","n2900","n2910","n2908","n2899","n2897","n2905","n2186","n2233"],tags:{name:"Portage River",waterway:"river"}},w541:{id:"w541",nodes:["n2852","n2851","n3003"],tags:{highway:"residential",name:"1st Avenue"}},w542:{id:"w542",nodes:["n2991","n3004","n2994"],tags:{highway:"residential",name:"River Street"}},w543:{id:"w543",nodes:["n2993","n2989"],tags:{bridge:"yes",highway:"residential",name:"6th Street"}},w544:{id:"w544",nodes:["n2995","n2996","n2997","n2998","n2999","n3000","n3001","n3002","n2990","n2991","n2993"],tags:{highway:"residential",name:"6th Street"}},w545:{id:"w545",nodes:["n2989","n2992","n2848"],tags:{highway:"residential",name:"6th Street"}},w546:{id:"w546",nodes:["n2313","n3169","n3170","n3171","n3172","n3173","n3174","n3175","n3176","n3177","n3178","n3179","n3180","n3191","n3181","n3190","n3182","n3183","n3184","n3185","n3186","n3187","n3188","n3189","n3160","n3161","n3162","n2126","n2146","n2156","n2129","n2112","n2109","n2313"],tags:{natural:"wetland"}},w547:{id:"w547",nodes:["n2088","n3013","n3015","n3014","n3017","n3018"],tags:{name:"Conrail Railroad",railway:"rail"}},w548:{id:"w548",nodes:["n3083","n3084","n3085","n3086","n3083"],tags:{building:"yes"}},w549:{id:"w549",nodes:["n3020","n2288","n2283","n2284","n2131","n2286","n2287","n2285","n2132","n2140","n2289","n3020"],tags:{leisure:"park",name:"Conservation Park"}},w55:{id:"w55",nodes:["n277","n278","n279","n280","n281","n282","n283","n284","n277"],tags:{building:"yes"}},w550:{id:"w550",nodes:["n3056","n3042","n3041","n3040","n3039","n3038","n3037","n3036","n3044","n3035","n3034","n3043","n3016","n3056","n3019","n3015","n3012"],tags:{highway:"service"}},w551:{id:"w551",nodes:["n3044","n3045","n3046","n3047","n3048","n3049","n3050","n3051","n3052","n3053","n3054","n3055","n3016"],tags:{highway:"footway"}},w552:{id:"w552",nodes:["n3117","n3118","n3119","n3120","n3121","n3122","n3117"],tags:{building:"yes"}},w553:{id:"w553",nodes:["n3123","n3124","n3129","n3125","n3126","n3123"],tags:{building:"yes"}},w554:{id:"w554",nodes:["n3069","n3070","n3071","n3072","n3073","n3074","n3075","n3076","n3077","n3078","n3079","n3080","n3081","n3082","n3069"],tags:{building:"yes"}},w555:{id:"w555",nodes:["n3087","n3088","n3089","n3090","n3087"],tags:{building:"yes"}},w556:{id:"w556",nodes:["n3113","n3114","n3115","n3116","n3113"],tags:{building:"yes"}},w557:{id:"w557",nodes:["n3103","n3104","n3105","n3106","n3103"],tags:{building:"yes"}},w558:{id:"w558",nodes:["n3127","n3128","n3129","n3124","n3127"],tags:{building:"yes"}},w559:{id:"w559",nodes:["n3137","n3141","n3142","n3138","n3139","n3140","n3137"],tags:{building:"yes"}},w56:{id:"w56",nodes:["n285","n286","n287","n288","n285"],tags:{amenity:"parking"}},w560:{id:"w560",nodes:["n3091","n3092","n3093","n3094","n3091"],tags:{building:"yes"}},w561:{id:"w561",nodes:["n3155","n3157","n3158","n3159","n3156","n3155"],tags:{building:"yes"}},w562:{id:"w562",nodes:["n3057","n3058","n3059","n3060","n3057"],tags:{building:"yes"}},w563:{id:"w563",nodes:["n3107","n3108","n3109","n3110","n3111","n3112","n3107"],tags:{building:"yes"}},w564:{id:"w564",nodes:["n3134","n3135","n3136","n3131","n3134"],tags:{building:"yes"}},w565:{id:"w565",nodes:["n3143","n3144","n3145","n3146","n3143"],tags:{building:"yes"}},w566:{id:"w566",nodes:["n3095","n3096","n3097","n3098","n3095"],tags:{building:"yes"}},w567:{id:"w567",nodes:["n3130","n3131","n3136","n3132","n3133","n3130"],tags:{building:"yes"}},w568:{id:"w568",nodes:["n3025","n3026","n3027","n3028","n3029","n3030","n3031","n3033","n3032","n3025"],tags:{amenity:"parking"}},w569:{id:"w569",nodes:["n3061","n3062","n3063","n3064","n3061"],tags:{building:"yes"}},w57:{id:"w57",nodes:["n289","n290","n291","n292","n289"],tags:{amenity:"parking"}},w570:{id:"w570",nodes:["n3155","n3156","n3152","n3153","n3155"],tags:{building:"yes"}},w571:{id:"w571",nodes:["n3099","n3100","n3101","n3102","n3099"],tags:{building:"yes"}},w572:{id:"w572",nodes:["n3147","n3148","n3149","n3150","n3147"],tags:{building:"yes"}},w573:{id:"w573",nodes:["n3039","n2284"],tags:{highway:"service"}},w574:{id:"w574",nodes:["n3151","n3152","n3153","n3154","n3151"],tags:{building:"yes"}},w575:{id:"w575",nodes:["n3021","n3022","n3023","n3024","n3021"],tags:{amenity:"shelter",building:"yes",shelter_type:"picnic_shelter"}},w576:{id:"w576",nodes:["n3065","n3066","n3067","n3068","n3065"],tags:{building:"yes"}},w577:{id:"w577",nodes:["n2944","n3192","n3757","n3813","n3814","n3815","n3816","n3817","n3818","n3819"],tags:{highway:"service",name:"Willow Drive",service:"driveway",surface:"unpaved"}},w578:{id:"w578",nodes:["n2163","n2165","n2166","n2167","n2168","n2172","n2173","n2174","n2175","n2176","n2178","n2181","n2163"],tags:{building:"yes"}},w579:{id:"w579",nodes:["n2754","n3195","n3204","n3205","n4537","n4540","n3206","n4530","n4536","n3207","n4524","n3199","n4521","n3197","n1032"],tags:{highway:"residential",name:"Elm Street"}},w58:{id:"w58",nodes:["n240","n293","n294"],tags:{crossing:"marked",footway:"crossing",highway:"footway"}},w580:{id:"w580",nodes:["n2184","n2185","n2187","n2190","n2191","n2192","n2184"],tags:{building:"yes"}},w581:{id:"w581",nodes:["n2765","n3208","n3211","n2755","n3280","n2756","n3346"],tags:{highway:"residential",name:"Kelsey Street"}},w582:{id:"w582",nodes:["n2753","n3194","n3193","n3201","n3196","n4551","n3202","n4550","n3203","n3200","n3198","n1033"],tags:{highway:"residential",name:"Walnut Street"}},w583:{id:"w583",nodes:["n3272","n4469","n4588","n2879","n4564","n2872"],tags:{highway:"residential",name:"10th Avenue"}},w584:{id:"w584",nodes:["n3243","n3242","n3241","n3240","n3243"],tags:{building:"industrial"}},w585:{id:"w585",nodes:["n3273","n3274","n4631","n4593","n3275","n4592","n2846","n4611","n2847"],tags:{highway:"residential",name:"6th Avenue"}},w586:{id:"w586",nodes:["n3276","n4591","n2853","n4605","n2854"],tags:{highway:"residential",name:"8th Avenue"}},w587:{id:"w587",nodes:["n3269","n3268","n3267","n3266","n3265","n3264","n3263","n3262","n3269"],tags:{building:"industrial"}},w588:{id:"w588",nodes:["n3277","n4599","n2857","n4598","n4608","n2858"],tags:{highway:"residential",name:"7th Avenue"}},w589:{id:"w589",nodes:["n3239","n3238","n3271","n3270","n3237","n3236","n3235","n3234","n3239"],tags:{building:"yes"}},w59:{id:"w59",nodes:["n294","n295","n296","n297","n298","n299","n300","n301","n302","n303","n491","n304","n305","n306","n307"],tags:{footway:"sidewalk",highway:"footway"}},w590:{id:"w590",nodes:["n3278","n4458","n4589","n4604","n2861"],tags:{highway:"residential",name:"9th Avenue"}},w591:{id:"w591",nodes:["n3253","n3252","n3251","n3250","n3249","n3248","n3253"],tags:{building:"industrial"}},w592:{id:"w592",nodes:["n3229","n3228","n3227","n3226","n3225","n3224","n3223","n3222","n3221","n3220","n3219","n3218","n3217","n3216","n3215","n3214","n3213","n3212","n3229"],tags:{natural:"water",water:"pond"}},w593:{id:"w593",nodes:["n3261","n3260","n3259","n3258","n3257","n3256","n3255","n3254","n3261"],tags:{building:"industrial"}},w594:{id:"w594",nodes:["n3233","n3232","n3231","n3230","n3233"],tags:{building:"yes"}},w595:{id:"w595",nodes:["n3247","n3246","n3245","n3244","n3247"],tags:{building:"industrial"}},w596:{id:"w596",nodes:["n2769","n3195","n3193","n3209","n2758","n2759","n3279"],tags:{highway:"residential",name:"Armitage Street"}},w597:{id:"w597",nodes:["n2193","n2194","n2195","n2197","n2193"],tags:{building:"yes"}},w598:{id:"w598",nodes:["n3404","n3403","n3402","n3401","n3400","n3399","n3398","n3397","n3373","n3372","n3396","n3395","n3404"],tags:{building:"school"}},w6:{id:"w6",nodes:["n879","n880","n881","n882","n879"],tags:{building:"shed"}},w60:{id:"w60",nodes:["n239","n308","n307"],tags:{crossing:"marked",footway:"crossing",highway:"footway"}},w600:{id:"w600",nodes:["n3387","n3386","n3316","n3315","n3314","n3313","n3387"],tags:{building:"yes"}},w601:{id:"w601",nodes:["n3304","n3303","n3302","n3301","n3385","n3384","n3300","n3299","n3304"],tags:{building:"yes"}},w602:{id:"w602",nodes:["n3334","n3333","n3332","n3331","n3330","n3329","n3328","n3327","n3326","n3325","n3324","n3323","n3322","n3321","n3320","n3319","n3318","n3317","n3334"],tags:{building:"yes"}},w603:{id:"w603",nodes:["n3353","n3352","n3347","n3280","n2798"],tags:{highway:"service",service:"alley",surface:"unpaved"}},w604:{id:"w604",nodes:["n3753","n3211","n3383"],tags:{highway:"service",service:"alley"}},w605:{id:"w605",nodes:["n3290","n3289","n3288","n3287","n3286","n3285","n3284","n3283","n3282","n3281","n3290"],tags:{building:"yes"}},w606:{id:"w606",nodes:["n2198","n2199","n2201","n2202","n2203","n2206","n2198"],tags:{building:"yes"}},w607:{id:"w607",nodes:["n2198","n2207"],tags:{barrier:"wall"}},w608:{id:"w608",nodes:["n2751","n3208","n3210","n3209","n3415","n3410","n3414","n3413","n3412","n3416"],tags:{highway:"residential",name:"East Street"}},w609:{id:"w609",nodes:["n2772","n3346","n3746","n3748","n3747","n3345","n3378","n3279","n3411"],tags:{highway:"residential",name:"Maple Street"}},w61:{id:"w61",nodes:["n309","n310","n311","n312","n313","n240"],tags:{footway:"sidewalk",highway:"footway"}},w610:{id:"w610",nodes:["n3379","n3380","n3382","n3381","n3379"],tags:{leisure:"park",name:"LaFayette Park"}},w611:{id:"w611",nodes:["n2768","n3194","n3210","n3753","n2760","n3353","n2773","n3378"],tags:{highway:"residential",name:"Bennett Street"}},w612:{id:"w612",nodes:["n2751","n3383","n2749","n2798","n2772"],tags:{highway:"residential",name:"Market Street"}},w613:{id:"w613",nodes:["n3298","n3297","n3296","n3295","n3294","n3293","n3292","n3291","n3298"],tags:{building:"yes"}},w614:{id:"w614",nodes:["n3375","n3406","n3405","n3374","n3375"],tags:{leisure:"playground"}},w615:{id:"w615",nodes:["n3393","n3344","n3343","n3342","n3341","n3340","n3339","n3338","n3337","n3392","n3391","n3390","n3389","n3336","n3335","n3388","n3393"],tags:{building:"yes"}},w616:{id:"w616",nodes:["n3376","n3407","n3408","n3377","n3376"],tags:{amenity:"school",name:"Three Rivers Elementary School"}},w617:{id:"w617",nodes:["n3312","n3311","n3310","n3309","n3308","n3307","n3306","n3305","n3312"],tags:{building:"yes"}},w619:{id:"w619",nodes:["n2863","n3424","n3425","n3426","n3427","n3428","n3429","n3430","n3431","n3432","n3433","n2844"],tags:{highway:"secondary",name:"Michigan Avenue",ref:"M 60"}},w62:{id:"w62",nodes:["n876","n906","n904","n875","n874","n873","n872","n871","n870","n869","n41","n868","n146","n314","n315","n1956"],tags:{footway:"sidewalk",highway:"footway"}},w620:{id:"w620",nodes:["n2844","n3420","n3421","n3422","n3439","n2859","n3437","n3493","n3496","n3500","n3497"],tags:{highway:"residential"}},w621:{id:"w621",nodes:["n3468","n3469","n3470","n3471","n3468"],tags:{building:"yes"}},w622:{id:"w622",nodes:["n3417","n3436","n3438","n3491","n3488","n3492","n3495","n3494","n3498","n3487","n3499","n3490","n3489","n4800","n3417"],tags:{landuse:"cemetery",name:"Riverside Cemetery"}},w623:{id:"w623",nodes:["n3440","n3441","n3442","n3443","n3444","n3445","n3440"],tags:{building:"yes"}},w624:{id:"w624",nodes:["n3446","n3447","n3448","n3449","n3450","n3451","n3452","n3453","n3454","n3455","n3456","n3457","n3458","n3459","n3460","n3461","n3462","n3463","n3464","n3465","n3466","n3467","n3446"],tags:{building:"yes"}},w625:{id:"w625",nodes:["n2844","n3434","n3435","n2878","n3275","n4621","n3276","n3278","n4463","n3272","n3472","n3474","n3475","n3476","n3477","n3478","n1202","n3479","n3480","n3481","n1203","n3482","n3483","n3484","n3485","n4574","n3486","n3473"],tags:{highway:"secondary",name:"Jefferson Street",name_1:"State Highway 60",ref:"M 60"}},w626:{id:"w626",nodes:["n3439","n3423","n2863"],tags:{highway:"unclassified",name:"Michigan Avenue",name_1:"State Highway 60"}},w627:{id:"w627",nodes:["n3500","n3005"],tags:{highway:"service"}},w628:{id:"w628",nodes:["n3491","n3488","n3492","n3010","n3009","n3005","n3008","n3007","n3006","n3502","n3491"],tags:{leisure:"park",name:"Marina Park"}},w629:{id:"w629",nodes:["n2208","n2209","n2212","n2214","n2208"],tags:{building:"yes"}},w63:{id:"w63",nodes:["n1955","n316"],tags:{footway:"sidewalk",highway:"footway"}},w630:{id:"w630",nodes:["n2757","n3414","n3202","n4542","n3206","n4538","n3750","n3503","n1629","n4500","n2763","n4502","n2764","n3508"],tags:{highway:"residential",name:"Hoffman Street"}},w631:{id:"w631",nodes:["n2215","n2750","n2770","n2771","n2215"],tags:{building:"yes"}},w632:{id:"w632",nodes:["n2766","n3504","n3507","n3751","n3205","n3196","n3410","n2746"],tags:{highway:"residential",name:"Cushman Street"}},w633:{id:"w633",nodes:["n2745","n3749","n3507","n4535","n3503"],tags:{highway:"residential",name:"Pine Street"}},w634:{id:"w634",nodes:["n3510","n3511","n3512","n3509","n3510"],tags:{leisure:"park",name:"Bowman Park"}},w636:{id:"w636",nodes:["n2745","n3752","n3204","n3201","n3415","n2761","n2767","n3411"],tags:{highway:"residential",name:"Wheeler Street"}},w637:{id:"w637",nodes:["n3550","n4586","n4476","n3472"],tags:{highway:"residential",name:"11th Avenue"}},w638:{id:"w638",nodes:["n3508","n3518"],tags:{bridge:"yes",highway:"residential",name:"Hoffman Street"}},w639:{id:"w639",nodes:["n3518","n1204","n2862","n3519","n3520","n3521","n3522","n3523","n2161","n3524","n3549","n3552","n4239","n3551","n4577","n4582","n4578","n4583","n4579","n4574"],tags:{highway:"residential",name:"Hoffman Street"}},w64:{id:"w64",nodes:["n316","n317"],tags:{bridge:"yes",footway:"sidewalk",highway:"footway",layer:"1"}},w640:{id:"w640",nodes:["n3634","n3640","n3676","n3633","n3678","n3648","n3638","n3683","n3600","n3579","n3679","n3677","n2987","n3592","n3588","n3608","n3559","n3617","n3620","n3660","n3553","n3533","n3530","n3531","n3525","n3527","n3526","n3532","n3529","n3528","n3667","n3627","n3623","n3625","n3601","n3687","n3671","n3644","n3626","n3673","n3582","n3693","n3605","n3619","n3651","n3650","n3615","n3663","n3631","n3596","n3604","n3655","n3586","n3595","n3701","n3603","n3686","n3611","n3568","n3674","n3613","n3580","n3562","n3564","n3689","n3585","n3670","n3659","n3684","n3680","n3646","n3558","n3556","n3692","n3563","n3575","n3571","n3675","n3557","n3700","n3656","n3622","n3657","n3565","n3669","n3658","n3618","n3624","n3688","n3610","n3570","n3645","n3649","n3583","n3694","n3561","n3554","n3614","n3698","n3581","n3635","n3641","n3569","n3647","n3628","n3598","n3696","n3665","n3639","n3607","n3695","n3642","n3672","n3577","n3643","n3691","n3602","n3576","n3591","n3560","n3606","n3685","n3597","n3629","n3661","n3654","n3616","n3697","n3578","n3609","n3653","n3699","n3566","n3637","n3567","n3666","n3555","n3599","n3590","n3572","n3593","n3690","n3681","n3612","n3682","n3668","n3587","n3621","n3636","n3662","n3589","n3573","n3652","n3664","n3632","n3574","n3594","n3584","n3630","n3634"],tags:{landuse:"reservoir",name:"Hoffman Pond",natural:"water"}},w641:{id:"w641",nodes:["n2988","n3534","n3535","n3536","n3537","n3538","n3539","n3540","n3541","n3542","n3543","n3544","n3545","n3546","n3547","n3548","n2970"],tags:{waterway:"river"}},w642:{id:"w642",nodes:["n3702","n3703","n3704","n3705","n3706","n3707","n3708","n3709","n3710","n3711","n3712","n3713","n3714","n3715","n3716","n3717","n3718","n3719","n3720","n3721","n3722","n3723","n3724","n3725","n3726","n3727","n3728","n3729","n3730","n3731","n3732","n3733","n3734","n3735","n3736","n3737","n3738","n3739","n3740","n3741","n3742","n3743","n3702"],tags:{admin_level:"8",boundary:"administrative"}},w643:{id:"w643",nodes:["n2839","n2873"],tags:{highway:"service",service:"driveway"}},w644:{id:"w644",nodes:["n2873","n2840"],tags:{bridge:"yes",highway:"service",layer:"1",service:"driveway"}},w645:{id:"w645",nodes:["n2840","n2841","n2842","n2845","n2866"],tags:{highway:"service",service:"driveway",surface:"unpaved"}},w646:{id:"w646",nodes:["n2752","n3759","n1420","n1421","n1422","n3758","n4507","n4506","n4505","n4520","n3199","n4522","n4504","n4546","n3200","n4547","n3412"],tags:{highway:"residential",name:"Flower Street"}},w647:{id:"w647",nodes:["n2874","n2875","n2876","n2954","n2874"],tags:{building:"industrial"}},w648:{id:"w648",nodes:["n3778","n3779","n3780","n3781","n3782","n3783","n3778"],tags:{building:"yes"}},w649:{id:"w649",nodes:["n3197","n4543","n4544","n3198"],tags:{highway:"residential",name:"Morris Avenue",surface:"unpaved"}},w65:{id:"w65",nodes:["n317","n318","n319","n320","n321"],tags:{footway:"sidewalk",highway:"footway"}},w650:{id:"w650",nodes:["n3207","n4526","n4528","n4548","n3203","n4549","n3413","n2762"],tags:{highway:"residential",name:"Adams Street"}},w651:{id:"w651",nodes:["n3788","n3785","n3786","n3787","n3788"],tags:{power:"station"}},w652:{id:"w652",nodes:["n2957","n3163","n3241"],tags:{barrier:"wall"}},w653:{id:"w653",nodes:["n3549","n3802","n3803","n3800","n3801"],tags:{highway:"service",surface:"unpaved"}},w654:{id:"w654",nodes:["n3164","n3165","n3166","n3167","n3168","n3505","n3164"],tags:{building:"yes"}},w655:{id:"w655",nodes:["n3506","n3517","n3760","n3761","n3762","n3763","n3506"],tags:{building:"yes"}},w656:{id:"w656",nodes:["n3764","n3765","n3766","n3767","n3768","n3769","n3770","n3771","n3764"],tags:{building:"yes"}},w657:{id:"w657",nodes:["n3772","n3773","n3774","n3775","n3772"],tags:{building:"yes"}},w658:{id:"w658",nodes:["n3776","n3777","n3784","n3789","n3776"],tags:{building:"yes"}},w659:{id:"w659",nodes:["n3930","n3931","n3932","n3933","n3934","n3935","n3936","n3937","n3938","n3930"],tags:{leisure:"pitch",sport:"baseball"}},w66:{id:"w66",nodes:["n321","n322"],tags:{bridge:"yes",footway:"sidewalk",highway:"footway",layer:"1"}},w660:{id:"w660",nodes:["n3982","n3842","n3864","n3865","n2938","n3866","n2939","n3867","n3868","n3858","n2937","n3869","n2935","n2934","n3870","n3348","n3862"],tags:{highway:"service"}},w661:{id:"w661",nodes:["n3968","n3969"],tags:{highway:"footway"}},w662:{id:"w662",nodes:["n3875","n3876","n3877","n3878","n3879","n3880","n3881","n3882","n3875"],tags:{amenity:"parking"}},w663:{id:"w663",nodes:["n3964","n3965"],tags:{highway:"footway"}},w664:{id:"w664",nodes:["n3966","n3967"],tags:{highway:"footway"}},w665:{id:"w665",nodes:["n3857","n3890","n3884","n3894","n3889","n3899","n3885","n3886","n3896","n3887"],tags:{highway:"service",service:"parking_aisle"}},w666:{id:"w666",nodes:["n3895","n3896"],tags:{highway:"service",service:"parking_aisle"}},w667:{id:"w667",nodes:["n3274","n3977","n3984","n3983","n3981","n3844","n3978","n3982","n3861","n3862","n3873","n3874","n4468","n3863"],tags:{access:"private",highway:"service",name:"Collins Drive"}},w668:{id:"w668",nodes:["n3900","n3901","n3902","n3903","n3904","n3905","n3808","n3809","n3906","n3907","n3908","n3967","n3909","n3910","n3911","n3955","n3964","n3912","n3913","n3914","n3915","n3916","n3917","n3918","n3919","n3920","n3921","n3922","n3923","n3924","n3925","n3926","n3927","n3969","n3970","n3928","n3807","n3929","n3900"],tags:{building:"school"}},w669:{id:"w669",nodes:["n3272","n39","n40","n3974","n3863","n3857","n3892","n3883","n3891","n3889"],tags:{highway:"service"}},w67:{id:"w67",nodes:["n322","n886","n323","n475"],tags:{footway:"crossing",highway:"footway"}},w670:{id:"w670",nodes:["n3473","n3859","n3860","n3980","n4908","n4865"],tags:{highway:"secondary",name:"Hoffman Street",ref:"M 60"}},w671:{id:"w671",nodes:["n3970","n3806","n3971"],tags:{highway:"footway"}},w672:{id:"w672",nodes:["n3892","n3893","n3894"],tags:{highway:"service",service:"parking_aisle"}},w673:{id:"w673",nodes:["n3945","n3946","n3992","n3990","n3945"],tags:{leisure:"pitch",sport:"tennis"}},w674:{id:"w674",nodes:["n3890","n3893","n3891"],tags:{highway:"service",service:"parking_aisle"}},w675:{id:"w675",nodes:["n3947","n3948","n3994","n3993","n3947"],tags:{leisure:"pitch",sport:"tennis"}},w676:{id:"w676",nodes:["n3858","n3954","n3972","n3810","n3811","n3812","n3841","n3973","n3898","n3963","n3897","n3896"],tags:{highway:"service"}},w677:{id:"w677",nodes:["n3977","n3996","n3997","n4004","n3998","n3999","n4005","n4007","n4006","n3995","n4000","n3843","n4001","n4002","n4003","n3949","n3351","n3950","n3354","n3350","n3951","n3349","n3952","n3953","n3954","n3956","n3966","n3955"],tags:{highway:"footway"}},w678:{id:"w678",nodes:["n3887","n3888","n3895","n3899"],tags:{highway:"service",service:"parking_aisle"}},w679:{id:"w679",nodes:["n3946","n3947","n3993","n3992","n3946"],tags:{leisure:"pitch",sport:"tennis"}},w68:{id:"w68",nodes:["n294","n1952","n326"],tags:{footway:"sidewalk",highway:"footway"}},w680:{id:"w680",nodes:["n3939","n3940","n3941","n3985","n3986","n3987","n3988","n3989","n3942","n3943","n3939"],tags:{leisure:"pitch",sport:"baseball"}},w681:{id:"w681",nodes:["n3990","n3991","n3944","n3945","n3990"],tags:{leisure:"pitch",sport:"tennis"}},w682:{id:"w682",nodes:["n3871","n3872","n3873","n3874","n3871"],tags:{amenity:"parking"}},w683:{id:"w683",nodes:["n3956","n3965","n3957","n3958","n3959"],tags:{footway:"sidewalk",highway:"footway"}},w684:{id:"w684",nodes:["n3790","n3791","n3792","n3793","n3790"],tags:{building:"shed"}},w685:{id:"w685",nodes:["n3794","n3795","n3796","n3797","n3794"],tags:{building:"yes"}},w686:{id:"w686",nodes:["n3798","n3799","n3804","n3805","n3798"],tags:{building:"yes"}},w687:{id:"w687",nodes:["n3806","n3807"],tags:{highway:"footway"}},w688:{id:"w688",nodes:["n3845","n3846","n3847","n3848","n3845"],tags:{leisure:"pitch",sport:"american_football"}},w689:{id:"w689",nodes:["n3849","n4021","n3850","n3851","n3852","n3853","n3854","n3855","n3856","n3975","n3976","n3979","n4008","n4009","n4010","n4011","n4012","n4013","n4014","n4015","n4016","n4017","n4018","n4019","n4020","n4021"],tags:{leisure:"track",sport:"running"}},w69:{id:"w69",nodes:["n326","n327"],tags:{bridge:"yes",footway:"sidewalk",highway:"footway",layer:"1"}},w690:{id:"w690",nodes:["n4022","n4023","n4024","n4025","n4026","n4027","n4022"],tags:{building:"yes"}},w691:{id:"w691",nodes:["n4028","n4029","n4030","n4031","n4028"],tags:{building:"yes"}},w692:{id:"w692",nodes:["n4032","n4033","n4034","n4035","n4032"],tags:{building:"yes"}},w693:{id:"w693",nodes:["n4036","n4037","n4038","n4039","n4036"],tags:{building:"yes"}},w694:{id:"w694",nodes:["n4040","n4041","n4042","n4043","n4040"],tags:{building:"yes"}},w695:{id:"w695",nodes:["n4044","n4045","n4050","n4053","n4046","n4047","n4048","n4049","n4044"],tags:{building:"yes"}},w696:{id:"w696",nodes:["n4050","n4051","n4052","n4053","n4050"],tags:{building:"roof"}},w697:{id:"w697",nodes:["n4054","n4068","n4055","n4056","n4057","n4054"],tags:{building:"yes"}},w698:{id:"w698",nodes:["n4058","n4059","n4060","n4061","n4062","n4063","n4058"],tags:{building:"yes"}},w699:{id:"w699",nodes:["n4064","n4066","n4065"],tags:{barrier:"fence"}},w7:{id:"w7",nodes:["n43","n44","n45"],tags:{highway:"service"}},w70:{id:"w70",nodes:["n327","n328","n27","n329"],tags:{footway:"sidewalk",highway:"footway"}},w700:{id:"w700",nodes:["n4066","n4067","n4068"],tags:{barrier:"fence"}},w701:{id:"w701",nodes:["n4069","n4070","n4071","n4072","n4069"],tags:{building:"shed"}},w702:{id:"w702",nodes:["n4073","n4074","n4075","n4076","n4077","n4078","n4079","n4080","n4081","n4082","n4083","n4084","n4073"],tags:{building:"yes"}},w703:{id:"w703",nodes:["n4085","n4093","n4086","n4087","n4088","n4089","n4090","n4091","n4092","n4085"],tags:{building:"yes"}},w704:{id:"w704",nodes:["n4093","n4094","n4095","n4096"],tags:{barrier:"fence"}},w705:{id:"w705",nodes:["n4097","n4098","n4099","n4100","n4097"],tags:{building:"yes"}},w706:{id:"w706",nodes:["n4098","n4102","n4087"],tags:{barrier:"fence"}},w707:{id:"w707",nodes:["n4101","n4102","n4096","n4170","n4103"],tags:{barrier:"fence"}},w708:{id:"w708",nodes:["n4104","n4105","n4106","n4107","n4104"],tags:{access:"private",leisure:"swimming_pool"}},w709:{id:"w709",nodes:["n4108","n4109","n4110","n4111","n4108"],tags:{building:"yes"}},w71:{id:"w71",nodes:["n329","n331"],tags:{bridge:"yes",footway:"sidewalk",highway:"footway",layer:"1"}},w710:{id:"w710",nodes:["n4112","n4113","n4114","n4115","n4116","n4117","n4118","n4119","n4112"],tags:{building:"yes"}},w711:{id:"w711",nodes:["n4120","n4121","n4122","n4123","n4120"],tags:{building:"yes"}},w712:{id:"w712",nodes:["n4124","n4125","n4126","n4127","n4128","n4129","n4124"],tags:{building:"yes"}},w713:{id:"w713",nodes:["n4130","n4131","n4132","n4133","n4130"],tags:{building:"shed"}},w714:{id:"w714",nodes:["n4134","n4135","n4136","n4137","n4138","n4139","n4140","n4141","n4142","n4143","n4134"],tags:{building:"yes"}},w715:{id:"w715",nodes:["n4144","n4145","n4146","n4147","n4148","n4149","n4144"],tags:{building:"yes"}},w716:{id:"w716",nodes:["n4150","n4151","n4152","n4153","n4150"],tags:{building:"yes"}},w717:{id:"w717",nodes:["n4154","n4155","n4156","n4157","n4154"],tags:{building:"yes"}},w718:{id:"w718",nodes:["n4158","n4159","n4160","n4161","n4162","n4163","n4164","n4165","n4158"],tags:{building:"yes"}},w719:{id:"w719",nodes:["n4166","n4167","n4168","n4169","n4166"],tags:{building:"yes"}},w72:{id:"w72",nodes:["n331","n344","n332","n333","n334"],tags:{footway:"sidewalk",highway:"footway"}},w720:{id:"w720",nodes:["n4170","n4171"],tags:{barrier:"fence"}},w721:{id:"w721",nodes:["n4138","n4103"],tags:{barrier:"fence"}},w722:{id:"w722",nodes:["n4103","n4172"],tags:{barrier:"fence"}},w723:{id:"w723",nodes:["n4173","n4174"],tags:{barrier:"fence"}},w724:{id:"w724",nodes:["n4175","n4176","n4177","n4178","n4175"],tags:{building:"yes"}},w725:{id:"w725",nodes:["n4179","n4180","n4181","n4182","n4183","n4184","n4179"],tags:{building:"yes"}},w726:{id:"w726",nodes:["n4185","n4186","n4187","n4188","n4185"],tags:{building:"yes"}},w727:{id:"w727",nodes:["n4189","n4190","n4191","n4192","n4193","n4194","n4195","n4196","n4197","n4198","n4199","n4200","n4201","n4202","n4189"],tags:{building:"yes"}},w728:{id:"w728",nodes:["n4203","n4204","n4205","n4206","n4207","n4208","n4209","n4210","n4203"],tags:{building:"yes"}},w729:{id:"w729",nodes:["n4211","n4212","n4213","n4214","n4211"],tags:{building:"shed"}},w73:{id:"w73",nodes:["n335","n336","n337","n338","n339","n340","n341","n342","n335"],tags:{building:"yes"}},w730:{id:"w730",nodes:["n4215","n4216","n4217","n4218","n4215"],tags:{building:"yes"}},w731:{id:"w731",nodes:["n4219","n4220","n4221","n4222","n4223","n4224","n4225","n4226","n4227","n4228","n4229","n4230","n4219"],tags:{building:"yes"}},w732:{id:"w732",nodes:["n4231","n4232","n4233","n4234","n4235","n4236","n4237","n4238","n4231"],tags:{building:"yes"}},w733:{id:"w733",nodes:["n4239","n4240","n4241","n4242","n4243","n4244","n4245","n4246","n4247","n4248","n4241"],tags:{highway:"service"}},w734:{id:"w734",nodes:["n4240","n4249","n4248"],tags:{highway:"service",service:"parking_aisle"}},w735:{id:"w735",nodes:["n4250","n4251","n4252","n4253","n4254","n4255","n4256","n4257","n4258","n4250"],tags:{amenity:"parking"}},w736:{id:"w736",nodes:["n4259","n4260","n4261","n4262","n4259"],tags:{building:"yes"}},w737:{id:"w737",nodes:["n4263","n4264","n4265","n4266","n4267","n4268","n4269","n4270","n4271","n4272","n4273","n4274","n4275","n4276","n4263"],tags:{building:"yes"}},w738:{id:"w738",nodes:["n4277","n4278","n4279","n4280","n4281","n4282","n4277"],tags:{building:"yes"}},w739:{id:"w739",nodes:["n4283","n4284","n4285","n4286","n4287","n4288","n4289","n4290","n4291","n4292","n4293","n4294","n4283"],tags:{building:"yes"}},w74:{id:"w74",nodes:["n343","n344","n345"],tags:{highway:"service"}},w740:{id:"w740",nodes:["n4295","n4296","n4297","n4298","n4295"],tags:{building:"yes"}},w741:{id:"w741",nodes:["n4299","n4300","n4301","n4302","n4303","n4304","n4305","n4306","n4307","n4308","n4309","n4310","n4299"],tags:{building:"yes"}},w742:{id:"w742",nodes:["n4311","n4312","n4313","n4314","n4311"],tags:{building:"shed"}},w743:{id:"w743",nodes:["n4315","n4316","n4317","n4318","n4319","n4320","n4315"],tags:{building:"yes"}},w744:{id:"w744",nodes:["n4321","n4322","n4323","n4324","n4325","n4326","n4327","n4328","n4329","n4330","n4331","n4332","n4333","n4334","n4321"],tags:{building:"yes"}},w745:{id:"w745",nodes:["n4335","n4336","n4337","n4338","n4335"],tags:{building:"shed"}},w746:{id:"w746",nodes:["n4339","n4340","n4341","n4342","n4343","n4344","n4339"],tags:{building:"yes"}},w747:{id:"w747",nodes:["n4345","n4346","n4347","n4348","n4345"],tags:{building:"yes"}},w748:{id:"w748",nodes:["n4349","n4350","n4351","n4352","n4349"],tags:{building:"yes"}},w749:{id:"w749",nodes:["n4353","n4354","n4355","n4356","n4357","n4358","n4353"],tags:{building:"yes"}},w75:{id:"w75",nodes:["n346","n347","n348","n349","n350","n351","n346"],tags:{amenity:"parking"}},w750:{id:"w750",nodes:["n4612","n4359","n4360"],tags:{barrier:"fence"}},w751:{id:"w751",nodes:["n4361","n4362","n4363","n4364","n4361"],tags:{building:"yes"}},w752:{id:"w752",nodes:["n4365","n4366","n4367","n4368","n4365"],tags:{building:"yes"}},w753:{id:"w753",nodes:["n4369","n4370","n4371","n4372","n4375","n4369"],tags:{building:"yes"}},w754:{id:"w754",nodes:["n4373","n4374","n4375"],tags:{barrier:"fence"}},w755:{id:"w755",nodes:["n4376","n4377","n4378","n4379","n4376"],tags:{building:"shed"}},w756:{id:"w756",nodes:["n4380","n4381","n4382","n4383","n4384","n4385","n4386","n4387","n4388","n4389","n4390","n4391","n4380"],tags:{building:"yes"}},w757:{id:"w757",nodes:["n4392","n4393","n4394","n4395","n4392"],tags:{building:"yes"}},w758:{id:"w758",nodes:["n4396","n4397","n4398","n4399","n4396"],tags:{building:"shed"}},w759:{id:"w759",nodes:["n4400","n4401","n4402","n4403","n4404","n4405","n4406","n4407","n4408","n4409","n4410","n4411","n4412","n4413","n4414","n4415","n4400"],tags:{building:"yes"}},w76:{id:"w76",nodes:["n2561","n359","n2563","n2793","n357","n356","n2792","n355","n354","n2791","n2562","n353","n352","n358","n2561"],tags:{highway:"service",oneway:"yes",service:"parking_aisle"}},w760:{id:"w760",nodes:["n4416","n4417"],tags:{barrier:"fence"}},w761:{id:"w761",nodes:["n4418","n4416","n4419"],tags:{barrier:"fence"}},w762:{id:"w762",nodes:["n4420","n4421"],tags:{barrier:"fence"}},w763:{id:"w763",nodes:["n4422","n4423","n4424","n4425","n4426","n4427","n4428","n4429","n4430","n4431","n4432","n4433","n4422"],tags:{building:"yes"}},w764:{id:"w764",nodes:["n4434","n4435","n4436","n4437","n4438","n4439","n4440","n4441","n4442","n4445","n4444","n4443","n4434"],tags:{building:"yes"}},w765:{id:"w765",nodes:["n4446","n4447","n4448","n4449","n4446"],tags:{building:"yes"}},w766:{id:"w766",nodes:["n4450","n4451","n4452","n4453","n4450"],tags:{building:"yes"}},w767:{id:"w767",nodes:["n4454","n4455","n4456","n4457","n4454"],tags:{building:"yes"}},w768:{id:"w768",nodes:["n4461","n4458","n4460"],tags:{footway:"crossing",highway:"footway"}},w769:{id:"w769",nodes:["n4460","n4462","n4459"],tags:{footway:"sidewalk",highway:"footway"}},w77:{id:"w77",nodes:["n325","n360","n361"],tags:{footway:"crossing",highway:"footway"}},w770:{id:"w770",nodes:["n4462","n4463","n4464"],tags:{crossing:"marked",footway:"crossing",highway:"footway"}},w771:{id:"w771",nodes:["n4464","n4465","n4466","n4467"],tags:{footway:"sidewalk",highway:"footway"}},w772:{id:"w772",nodes:["n3959","n3968","n3971","n3960","n3961","n3962","n3963"],tags:{footway:"sidewalk",highway:"footway"}},w773:{id:"w773",nodes:["n4467","n4468","n3959"],tags:{footway:"crossing",highway:"footway"}},w774:{id:"w774",nodes:["n4459","n4469","n4470"],tags:{footway:"crossing",highway:"footway"}},w775:{id:"w775",nodes:["n4470","n4471","n4472","n4473","n4474","n4475"],tags:{footway:"sidewalk",highway:"footway"}},w776:{id:"w776",nodes:["n4475","n4476","n4477"],tags:{footway:"crossing",highway:"footway"}},w777:{id:"w777",nodes:["n4477","n4478","n4479","n4480","n4481","n4482","n4483","n4484","n4485","n4486","n4487"],tags:{footway:"sidewalk",highway:"footway"}},w778:{id:"w778",nodes:["n4488","n4489","n4490","n4491","n4488"],tags:{building:"yes"}},w779:{id:"w779",nodes:["n4492","n4493","n4494","n4495","n4492"],tags:{building:"yes"}},w78:{id:"w78",nodes:["n361","n362","n369"],tags:{footway:"sidewalk",highway:"footway"}},w780:{id:"w780",nodes:["n4496","n4497","n4498","n4499","n4496"],tags:{access:"private",leisure:"swimming_pool"}},w781:{id:"w781",nodes:["n4508","n4509"],tags:{footway:"sidewalk",highway:"footway"}},w782:{id:"w782",nodes:["n4510","n4511"],tags:{footway:"sidewalk",highway:"footway"}},w783:{id:"w783",nodes:["n4512","n4513"],tags:{footway:"sidewalk",highway:"footway"}},w784:{id:"w784",nodes:["n4513","n4514"],tags:{footway:"sidewalk",highway:"footway"}},w785:{id:"w785",nodes:["n4515","n4516"],tags:{footway:"sidewalk",highway:"footway"}},w786:{id:"w786",nodes:["n4517","n4515"],tags:{footway:"sidewalk",highway:"footway"}},w787:{id:"w787",nodes:["n4518","n4519"],tags:{footway:"sidewalk",highway:"footway"}},w788:{id:"w788",nodes:["n4519","n4520","n4513"],tags:{footway:"crossing",highway:"footway"}},w789:{id:"w789",nodes:["n4515","n4521","n4513"],tags:{footway:"crossing",highway:"footway"}},w79:{id:"w79",nodes:["n362","n363","n334"],tags:{crossing:"marked",footway:"crossing",highway:"footway"}},w790:{id:"w790",nodes:["n4515","n4522","n4523"],tags:{footway:"crossing",highway:"footway"}},w791:{id:"w791",nodes:["n4523","n4524","n4519"],tags:{footway:"crossing",highway:"footway"}},w792:{id:"w792",nodes:["n4523","n4525"],tags:{footway:"sidewalk",highway:"footway"}},w793:{id:"w793",nodes:["n4525","n4526","n4527"],tags:{footway:"crossing",highway:"footway"}},w794:{id:"w794",nodes:["n4527","n4529"],tags:{footway:"sidewalk",highway:"footway"}},w795:{id:"w795",nodes:["n4529","n4530","n4518"],tags:{footway:"crossing",highway:"footway"}},w796:{id:"w796",nodes:["n4518","n4531"],tags:{footway:"sidewalk",highway:"footway"}},w797:{id:"w797",nodes:["n4531","n4532"],tags:{footway:"sidewalk",highway:"footway"}},w798:{id:"w798",nodes:["n4533","n4534"],tags:{footway:"sidewalk",highway:"footway"}},w799:{id:"w799",nodes:["n4518","n4538","n4539"],tags:{footway:"crossing",highway:"footway"}},w8:{id:"w8",nodes:["n46","n47","n145","n48","n49","n46"],tags:{amenity:"parking"}},w80:{id:"w80",nodes:["n334","n364","n365"],tags:{crossing:"marked",footway:"crossing",highway:"footway"}},w800:{id:"w800",nodes:["n4539","n4540","n4541"],tags:{footway:"crossing",highway:"footway"}},w801:{id:"w801",nodes:["n4541","n4542","n4529"],tags:{footway:"crossing",highway:"footway"}},w802:{id:"w802",nodes:["n4552","n4553"],tags:{footway:"sidewalk",highway:"footway"}},w803:{id:"w803",nodes:["n4554","n4555","n4556","n4557","n4558","n4559","n4554"],tags:{building:"yes"}},w804:{id:"w804",nodes:["n4562","n4563"],tags:{barrier:"retaining_wall"}},w805:{id:"w805",nodes:["n4568","n4569","n4570","n4571","n4568"],tags:{building:"yes"}},w806:{id:"w806",nodes:["n3473","n4575","n4576","n4581","n4580","n3551"],tags:{highway:"residential",oneway:"yes"}},w807:{id:"w807",nodes:["n4613","n4614","n4615","n4616","n4617","n4618","n4619","n4620","n4613"],tags:{leisure:"pitch",sport:"baseball"}},w808:{id:"w808",nodes:["n4621","n4622","n4623","n4624","n4625","n4626","n4627","n4628","n4629","n4630"],tags:{highway:"service"}},w809:{id:"w809",nodes:["n4631","n4632","n4633","n4637","n4634","n4638","n4635","n4636"],tags:{highway:"service"}},w81:{id:"w81",nodes:["n365","n366","n367"],tags:{crossing:"marked",footway:"crossing",highway:"footway"}},w810:{id:"w810",nodes:["n4639","n4640","n4641"],tags:{barrier:"fence"}},w811:{id:"w811",nodes:["n4649","n4650","n4651","n4652","n4649"],tags:{building:"yes"}},w812:{id:"w812",nodes:["n4654","n4655"],tags:{barrier:"fence"}},w813:{id:"w813",nodes:["n4656","n4657"],tags:{barrier:"fence"}},w814:{id:"w814",nodes:["n4669","n4670","n4671","n4672","n4669"],tags:{amenity:"shelter",building:"yes",shelter_type:"picnic_shelter"}},w815:{id:"w815",nodes:["n4678","n4679","n4680","n1889"],tags:{highway:"service"}},w816:{id:"w816",nodes:["n239","n4686","n4687"],tags:{crossing:"marked",footway:"crossing",highway:"footway"}},w817:{id:"w817",nodes:["n4687","n4688","n4689"],tags:{crossing:"marked",footway:"crossing",highway:"footway"}},w818:{id:"w818",nodes:["n4689","n4690","n307"],tags:{crossing:"marked",footway:"crossing",highway:"footway"}},w819:{id:"w819",nodes:["n2266","n4743"],tags:{highway:"path"}},w82:{id:"w82",nodes:["n724","n368","n369"],tags:{crossing:"marked",footway:"crossing",highway:"footway"}},w820:{id:"w820",nodes:["n4785","n4786","n4787","n4788","n1684","n4760","n4769","n4761","n4762","n4763","n4764","n4765","n4766","n4767","n4768","n4785"],tags:{natural:"wood"}},w821:{id:"w821",nodes:["n4769","n4770","n4771","n4772","n4773","n4774","n4775","n4776","n4777","n4778","n4779","n4780","n4781","n4782","n4783","n4784","n4785","n4768","n4767","n4766","n4765","n4764","n4763","n4762","n4761","n4769"],tags:{natural:"scrub"}},w822:{id:"w822",nodes:["n4772","n4789","n4790","n4791","n4792","n4793","n4794","n4795","n4796","n4797","n4798","n4799","n4783","n4782","n4781","n4780","n4779","n4778","n4777","n4776","n4775","n4774","n4773","n4772"],tags:{natural:"wood"}},w823:{id:"w823",nodes:["n4800","n4801","n4802","n4803","n4804","n4805","n4806","n4807","n4808","n4809","n4810","n4811","n4812","n4813","n4814","n4815","n4816","n3490","n3489","n4800"],tags:{natural:"wood"}},w824:{id:"w824",nodes:["n4817","n4818","n4819","n4820","n4821","n4822","n4817"],tags:{landuse:"recreation_ground"}},w825:{id:"w825",nodes:["n4563","n4823","n4824","n4829","n4825","n4826","n4827","n4828","n4562","n4563"],tags:{landuse:"recreation_ground"}},w826:{id:"w826",nodes:["n4830","n4831","n4832","n4833","n4834","n4835","n4836","n4830"],tags:{landuse:"industrial"}},w827:{id:"w827",nodes:["n4563","n4837","n4838","n4839","n4840","n4841","n4842","n4827","n4828","n4562","n4563"],tags:{landuse:"industrial"}},w828:{id:"w828",nodes:["n4843","n4844","n4845","n4846","n4843"],tags:{landuse:"farmland"}},w829:{id:"w829",nodes:["n3712","n4847","n4848","n4849","n4850","n4851","n4852","n4858","n4864","n4959","n4960","n4853","n4857","n4854","n4855","n4856","n3712"],tags:{aeroway:"aerodrome",name:"Three Rivers Municipal Airport"}},w83:{id:"w83",nodes:["n371","n372","n373","n374","n371"],tags:{building:"yes"}},w830:{id:"w830",nodes:["n4855","n4854","n4857","n4853","n4960"],tags:{barrier:"fence"}},w831:{id:"w831",nodes:["n4860","n4859","n4858","n4852","n4851"],tags:{barrier:"fence"}},w832:{id:"w832",nodes:["n4866","n4878","n4869","n4867"],tags:{aeroway:"runway",ref:"5/23"}},w833:{id:"w833",nodes:["n4868","n4890","n4894","n4881","n4869","n4905","n4870"],tags:{aeroway:"runway",ref:"9/27"}},w834:{id:"w834",nodes:["n4871","n4875","n4872","n4895","n4873","n4874","n4871"],tags:{aeroway:"apron"}},w835:{id:"w835",nodes:["n4875","n4876","n4877","n4878","n4879","n4880","n4882","n4881"],tags:{aeroway:"taxiway"}},w836:{id:"w836",nodes:["n4882","n4893","n4883","n4891","n4884","n4885","n4886","n4887","n4888","n4892","n4889","n4890"],tags:{aeroway:"taxiway"}},w837:{id:"w837",nodes:["n4893","n4894"],tags:{aeroway:"taxiway"}},w838:{id:"w838",nodes:["n4895","n4896","n4897","n4898","n4899","n4900","n4901","n4902","n4903","n4906","n4904","n4905"],tags:{aeroway:"taxiway"}},w839:{id:"w839",nodes:["n4907","n4908"],tags:{highway:"service"}},w84:{id:"w84",nodes:["n374","n375","n376","n377","n373","n374"],tags:{building:"yes"}},w840:{id:"w840",nodes:["n4909","n4907","n4910"],tags:{highway:"service"}},w841:{id:"w841",nodes:["n4911","n4912","n4913","n4914","n4911"],tags:{building:"yes"}},w842:{id:"w842",nodes:["n4915","n4916","n4917","n4918","n4915"],tags:{aeroway:"hangar",building:"yes"}},w843:{id:"w843",nodes:["n4919","n4920","n4921","n4922","n4919"],tags:{building:"yes"}},w844:{id:"w844",nodes:["n4923","n4924","n4925","n4926","n4923"],tags:{aeroway:"hangar",building:"yes"}},w845:{id:"w845",nodes:["n4927","n4928","n4929","n4930","n4927"],tags:{aeroway:"hangar",building:"yes"}},w846:{id:"w846",nodes:["n4931","n4932","n4933","n4934","n4931"],tags:{aeroway:"hangar",building:"yes"}},w847:{id:"w847",nodes:["n4935","n4936","n4937","n4938","n4935"],tags:{aeroway:"hangar",building:"yes"}},w848:{id:"w848",nodes:["n4939","n4940","n4941","n4942","n4939"],tags:{aeroway:"hangar",building:"yes"}},w849:{id:"w849",nodes:["n4943","n4944","n4945","n4946","n4943"],tags:{aeroway:"hangar",building:"yes"}},w85:{id:"w85",nodes:["n431","n432","n1038","n433","n434","n1040","n431"],tags:{building:"yes"}},w850:{id:"w850",nodes:["n4947","n4948","n4949","n4950","n4947"],tags:{aeroway:"hangar",building:"yes"}},w851:{id:"w851",nodes:["n4951","n4952","n4953","n4954","n4951"],tags:{aeroway:"hangar",building:"yes"}},w852:{id:"w852",nodes:["n4955","n4956","n4957","n4958","n4955"],tags:{aeroway:"hangar",building:"yes"}},w853:{id:"w853",nodes:["n4959","n4864","n4861","n4862","n4863"],tags:{barrier:"fence"}},w854:{id:"w854",nodes:["n4961","n4962","n4963","n4964","n4965","n4966","n4967","n4968","n4969","n4961"],tags:{landuse:"farmland"}},w855:{id:"w855",nodes:["n4970","n4971","n4972","n4973","n4974","n4975","n4976","n4977","n4978","n4980","n4970"],tags:{landuse:"farmland"}},w856:{id:"w856",nodes:["n4979","n4980","n4978","n4981","n4982","n4983","n4984","n4985","n4979"],tags:{natural:"scrub"}},w857:{id:"w857",nodes:["n4986","n4987","n4988","n5032","n4989","n4990","n4991","n4992","n4993","n4994","n4995","n4996","n4997","n4998","n4999","n5000","n5001","n5002","n5022","n5023","n5024","n5025","n5030","n5031","n5029","n5028","n5027","n5026","n4986"],tags:{landuse:"farmland"}},w858:{id:"w858",nodes:["n5001","n5003","n5004","n4999","n5000","n5001"],tags:{natural:"scrub"}},w859:{id:"w859",nodes:["n5005","n5006","n5007","n5008","n5009","n5010","n5021","n5020","n5019","n5011","n5012","n5013","n5018","n5014","n5015","n5017","n5016","n5005"],tags:{landuse:"farmland"}},w86:{id:"w86",nodes:["n384","n385","n386","n387","n384"],tags:{building:"yes"}},w860:{id:"w860",nodes:["n3020","n5033","n5034","n5035","n3179","n3180","n3191","n3181","n3190","n3182","n3183","n3184","n3185","n3186","n3187","n3188","n3189","n3160","n3161","n3162","n2126","n2153","n2288","n3020"],tags:{landuse:"industrial"}},w87:{id:"w87",nodes:["n387","n388","n389","n386","n387"],tags:{building:"yes"}},w88:{id:"w88",nodes:["n390","n391","n392","n393","n390"],tags:{building:"yes"}},w89:{id:"w89",nodes:["n394","n2895"],tags:{highway:"service"}},w9:{id:"w9",nodes:["n50","n51","n148","n52","n57","n891","n53","n50"],tags:{building:"yes"}},w90:{id:"w90",nodes:["n398","n399","n400","n401","n402","n403","n404","n405","n406","n407","n408","n409","n410","n411","n412","n413","n414","n415","n416","n417","n398"],tags:{building:"yes"}},w91:{id:"w91",nodes:["n418","n423","n419"],tags:{highway:"service"}},w92:{id:"w92",nodes:["n420","n421","n422","n423","n420"],tags:{amenity:"parking"}},w93:{id:"w93",nodes:["n2282","n1876"],tags:{name:"Rocky River",tunnel:"building_passage",waterway:"river"}},w94:{id:"w94",nodes:["n1876","n885","n1875","n2234"],tags:{name:"Rocky River",waterway:"river"}},w95:{id:"w95",nodes:["n425","n426","n427","n914","n428","n913","n425"],tags:{building:"yes"}},w96:{id:"w96",nodes:["n456","n620","n1034","n1035","n456"],tags:{building:"yes"}},w97:{id:"w97",nodes:["n435","n912","n451","n321"],tags:{highway:"footway"}},w98:{id:"w98",nodes:["n436","n319","n437","n438","n439","n440","n441","n476","n442"],tags:{highway:"service"}},w99:{id:"w99",nodes:["n443","n444","n445","n446","n447","n448","n449","n450","n443"],tags:{amenity:"parking"}},n2934:{id:"n2934",loc:[-85.617051,41.952263]},n2935:{id:"n2935",loc:[-85.61699,41.952276]},n2937:{id:"n2937",loc:[-85.616847,41.952262]},n2938:{id:"n2938",loc:[-85.616577,41.951956]},n2939:{id:"n2939",loc:[-85.61656,41.952044]},n3348:{id:"n3348",loc:[-85.61714,41.9522]},n3349:{id:"n3349",loc:[-85.616517,41.95212]},n3350:{id:"n3350",loc:[-85.616489,41.952033]},n3351:{id:"n3351",loc:[-85.616529,41.951907]},n3354:{id:"n3354",loc:[-85.616488,41.951994]}};
-
-  /* Built-in method references for those with the same name as other `lodash` methods. */
-  var nativeMin$1 = Math.min;
+      return drawMidpoints;
+  }
 
-  /**
-   * The base implementation of methods like `_.intersection`, without support
-   * for iteratee shorthands, that accepts an array of arrays to inspect.
-   *
-   * @private
-   * @param {Array} arrays The arrays to inspect.
-   * @param {Function} [iteratee] The iteratee invoked per element.
-   * @param {Function} [comparator] The comparator invoked per element.
-   * @returns {Array} Returns the new array of shared values.
-   */
-  function baseIntersection(arrays, iteratee, comparator) {
-    var includes = comparator ? arrayIncludesWith : arrayIncludes,
-        length = arrays[0].length,
-        othLength = arrays.length,
-        othIndex = othLength,
-        caches = Array(othLength),
-        maxLength = Infinity,
-        result = [];
+  function svgPoints(projection, context) {
 
-    while (othIndex--) {
-      var array = arrays[othIndex];
-      if (othIndex && iteratee) {
-        array = arrayMap(array, baseUnary(iteratee));
+      function markerPath(selection, klass) {
+          selection
+              .attr('class', klass)
+              .attr('transform', 'translate(-8, -23)')
+              .attr('d', 'M 17,8 C 17,13 11,21 8.5,23.5 C 6,21 0,13 0,8 C 0,4 4,-0.5 8.5,-0.5 C 13,-0.5 17,4 17,8 z');
       }
-      maxLength = nativeMin$1(array.length, maxLength);
-      caches[othIndex] = !comparator && (iteratee || (length >= 120 && array.length >= 120))
-        ? new SetCache(othIndex && array)
-        : undefined;
-    }
-    array = arrays[0];
 
-    var index = -1,
-        seen = caches[0];
+      function sortY(a, b) {
+          return b.loc[1] - a.loc[1];
+      }
 
-    outer:
-    while (++index < length && result.length < maxLength) {
-      var value = array[index],
-          computed = iteratee ? iteratee(value) : value;
 
-      value = (comparator || value !== 0) ? value : 0;
-      if (!(seen
-            ? cacheHas(seen, computed)
-            : includes(result, computed, comparator)
-          )) {
-        othIndex = othLength;
-        while (--othIndex) {
-          var cache = caches[othIndex];
-          if (!(cache
-                ? cacheHas(cache, computed)
-                : includes(arrays[othIndex], computed, comparator))
-              ) {
-            continue outer;
-          }
-        }
-        if (seen) {
-          seen.push(computed);
-        }
-        result.push(value);
+      // Avoid exit/enter if we're just moving stuff around.
+      // The node will get a new version but we only need to run the update selection.
+      function fastEntityKey(d) {
+          var mode = context.mode();
+          var isMoving = mode && /^(add|draw|drag|move|rotate)/.test(mode.id);
+          return isMoving ? d.id : osmEntity.key(d);
       }
-    }
-    return result;
-  }
 
-  /**
-   * Casts `value` to an empty array if it's not an array like object.
-   *
-   * @private
-   * @param {*} value The value to inspect.
-   * @returns {Array|Object} Returns the cast array-like object.
-   */
-  function castArrayLikeObject(value) {
-    return isArrayLikeObject(value) ? value : [];
-  }
 
-  /**
-   * Creates an array of unique values that are included in all given arrays
-   * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
-   * for equality comparisons. The order and references of result values are
-   * determined by the first array.
-   *
-   * @static
-   * @memberOf _
-   * @since 0.1.0
-   * @category Array
-   * @param {...Array} [arrays] The arrays to inspect.
-   * @returns {Array} Returns the new array of intersecting values.
-   * @example
-   *
-   * _.intersection([2, 1], [2, 3]);
-   * // => [2]
-   */
-  var intersection = baseRest(function(arrays) {
-    var mapped = arrayMap(arrays, castArrayLikeObject);
-    return (mapped.length && mapped[0] === arrays[0])
-      ? baseIntersection(mapped)
-      : [];
-  });
+      function drawTargets(selection, graph, entities, filter) {
+          var fillClass = context.getDebug('target') ? 'pink ' : 'nocolor ';
+          var getTransform = svgPointTransform(projection).geojson;
+          var activeID = context.activeID();
+          var data = [];
 
-  function modeDragNode$$1(context) {
-      var mode = {
-          id: 'drag-node',
-          button: 'browse'
-      };
-      var hover = behaviorHover(context).altDisables(true)
-          .on('hover', context.ui().sidebar.hover);
-      var edit = behaviorEdit(context);
+          entities.forEach(function(node) {
+              if (activeID === node.id) return;   // draw no target on the activeID
 
-      var _nudgeInterval;
-      var _restoreSelectedIDs = [];
-      var _wasMidpoint = false;
-      var _isCancelled = false;
-      var _activeEntity;
-      var _startLoc;
-      var _lastLoc;
+              data.push({
+                  type: 'Feature',
+                  id: node.id,
+                  properties: {
+                      target: true,
+                      entity: node
+                  },
+                  geometry: node.asGeoJSON()
+              });
+          });
 
+          var targets = selection.selectAll('.point.target')
+              .filter(function(d) { return filter(d.properties.entity); })
+              .data(data, function key(d) { return d.id; });
 
-      function startNudge(entity, nudge) {
-          if (_nudgeInterval) window.clearInterval(_nudgeInterval);
-          _nudgeInterval = window.setInterval(function() {
-              context.pan(nudge);
-              doMove(entity, nudge);
-          }, 50);
+          // exit
+          targets.exit()
+              .remove();
+
+          // enter/update
+          targets.enter()
+              .append('rect')
+              .attr('x', -10)
+              .attr('y', -26)
+              .attr('width', 20)
+              .attr('height', 30)
+              .merge(targets)
+              .attr('class', function(d) { return 'node point target ' + fillClass + d.id; })
+              .attr('transform', getTransform);
       }
 
 
-      function stopNudge() {
-          if (_nudgeInterval) {
-              window.clearInterval(_nudgeInterval);
-              _nudgeInterval = null;
-          }
-      }
+      function drawPoints(selection, graph, entities, filter) {
+          var wireframe = context.surface().classed('fill-wireframe');
+          var zoom = geoScaleToZoom(projection.scale());
 
+          // Points with a direction will render as vertices at higher zooms..
+          function renderAsPoint(entity) {
+              return entity.geometry(graph) === 'point' &&
+                  !(zoom >= 18 && entity.directions(graph, projection).length);
+          }
 
-      function moveAnnotation(entity) {
-          return t('operations.move.annotation.' + entity.geometry(context.graph()));
-      }
+          // All points will render as vertices in wireframe mode too..
+          var points = wireframe ? [] : entities.filter(renderAsPoint);
+          points.sort(sortY);
 
 
-      function connectAnnotation(nodeEntity, targetEntity) {
-          var nodeGeometry = nodeEntity.geometry(context.graph());
-          var targetGeometry = targetEntity.geometry(context.graph());
-          if (nodeGeometry === 'vertex' && targetGeometry === 'vertex') {
-              var nodeParentWayIDs = context.graph().parentWays(nodeEntity);
-              var targetParentWayIDs = context.graph().parentWays(targetEntity);
-              var sharedParentWays = intersection(nodeParentWayIDs, targetParentWayIDs);
-              // if both vertices are part of the same way
-              if (sharedParentWays.length !== 0) {
-                  // if the nodes are next to each other, they are merged
-                  if (sharedParentWays[0].areAdjacent(nodeEntity.id, targetEntity.id)) {
-                      return t('operations.connect.annotation.from_vertex.to_adjacent_vertex');
-                  }
-                  return t('operations.connect.annotation.from_vertex.to_sibling_vertex');
-              }
-          }
-          return t('operations.connect.annotation.from_' + nodeGeometry + '.to_' + targetGeometry);
-      }
+          var drawLayer = selection.selectAll('.layer-osm.points .points-group.points');
+          var touchLayer = selection.selectAll('.layer-touch.points');
 
+          // Draw points..
+          var groups = drawLayer.selectAll('g.point')
+              .filter(filter)
+              .data(points, fastEntityKey);
 
-      function origin(entity) {
-          return context.projection(entity.loc);
-      }
+          groups.exit()
+              .remove();
 
+          var enter = groups.enter()
+              .append('g')
+              .attr('class', function(d) { return 'node point ' + d.id; })
+              .order();
 
-      function keydown() {
-          if (event.keyCode === utilKeybinding.modifierCodes.alt) {
-              if (context.surface().classed('nope')) {
-                  context.surface()
-                      .classed('nope-suppressed', true);
-              }
-              context.surface()
-                  .classed('nope', false)
-                  .classed('nope-disabled', true);
-          }
-      }
+          enter
+              .append('path')
+              .call(markerPath, 'shadow');
 
+          enter
+              .append('ellipse')
+              .attr('cx', 0.5)
+              .attr('cy', 1)
+              .attr('rx', 6.5)
+              .attr('ry', 3)
+              .attr('class', 'stroke');
 
-      function keyup() {
-          if (event.keyCode === utilKeybinding.modifierCodes.alt) {
-              if (context.surface().classed('nope-suppressed')) {
-                  context.surface()
-                      .classed('nope', true);
-              }
-              context.surface()
-                  .classed('nope-suppressed', false)
-                  .classed('nope-disabled', false);
-          }
-      }
+          enter
+              .append('path')
+              .call(markerPath, 'stroke');
 
+          enter
+              .append('use')
+              .attr('transform', 'translate(-5, -19)')
+              .attr('class', 'icon')
+              .attr('width', '11px')
+              .attr('height', '11px');
 
-      function start(entity) {
-          _wasMidpoint = entity.type === 'midpoint';
-          var hasHidden = context.features().hasHiddenConnections(entity, context.graph());
-          _isCancelled = event.sourceEvent.shiftKey || hasHidden;
+          groups = groups
+              .merge(enter)
+              .attr('transform', svgPointTransform(projection))
+              .call(svgTagClasses());
 
+          // Selecting the following implicitly
+          // sets the data (point entity) on the element
+          groups.select('.shadow');
+          groups.select('.stroke');
+          groups.select('.icon')
+              .attr('xlink:href', function(entity) {
+                  var preset = context.presets().match(entity, graph);
+                  var picon = preset && preset.icon;
 
-          if (_isCancelled) {
-              if (hasHidden) {
-                  uiFlash()
-                      .duration(4000)
-                      .text(t('modes.drag_node.connected_to_hidden'))();
-              }
-              return drag.cancel();
-          }
+                  if (!picon) {
+                      return '';
+                  } else {
+                      var isMaki = /^maki-/.test(picon);
+                      return '#' + picon + (isMaki ? '-11' : '');
+                  }
+              });
 
-          if (_wasMidpoint) {
-              var midpoint = entity;
-              entity = osmNode();
-              context.perform(actionAddMidpoint(midpoint, entity));
-              entity = context.entity(entity.id);   // get post-action entity
 
-              var vertex = context.surface().selectAll('.' + entity.id);
-              drag.target(vertex.node(), entity);
+          // Draw touch targets..
+          touchLayer
+              .call(drawTargets, graph, points, filter);
+      }
 
-          } else {
-              context.perform(actionNoop());
-          }
 
-          _activeEntity = entity;
-          _startLoc = entity.loc;
+      return drawPoints;
+  }
 
-          context.surface().selectAll('.' + _activeEntity.id)
-              .classed('active', true);
+  function svgTagClasses() {
+      var primaries = [
+          'building', 'highway', 'railway', 'waterway', 'aeroway', 'aerialway',
+          'piste:type', 'boundary', 'power', 'amenity', 'natural', 'landuse',
+          'leisure', 'military', 'place', 'man_made', 'route', 'attraction'
+      ];
+      var statuses = [
+          'proposed', 'construction', 'disused', 'abandoned', 'dismantled',
+          'razed', 'demolished', 'obliterated', 'intermittent'
+      ];
+      var secondaries = [
+          'oneway', 'bridge', 'tunnel', 'embankment', 'cutting', 'barrier',
+          'surface', 'tracktype', 'footway', 'crossing', 'service', 'sport',
+          'public_transport', 'location', 'parking', 'golf', 'type'
+      ];
+      var _tags = function(entity) { return entity.tags; };
 
-          context.enter(mode);
-      }
 
+      var tagClasses = function(selection) {
+          selection.each(function tagClassesEach(entity) {
+              var value = this.className;
 
-      // related code
-      // - `behavior/draw.js` `datum()`
-      function datum() {
-          var event$$1 = event && event.sourceEvent;
-          if (!event$$1 || event$$1.altKey) {
-              return {};
-          } else {
-              // When dragging, snap only to touch targets..
-              // (this excludes area fills and active drawing elements)
-              var d = event$$1.target.__data__;
-              return (d && d.properties && d.properties.target) ? d : {};
-          }
-      }
+              if (value.baseVal !== undefined) {
+                  value = value.baseVal;
+              }
 
+              var t = _tags(entity);
 
-      function doMove(entity, nudge) {
-          nudge = nudge || [0, 0];
+              var computed = tagClasses.getClassesString(t, value, entity);
 
-          var currPoint = (event && event.point) || context.projection(_lastLoc);
-          var currMouse = geoVecSubtract(currPoint, nudge);
-          var loc = context.projection.invert(currMouse);
+              if (computed !== value) {
+                  select(this).attr('class', computed);
+              }
+          });
+      };
 
-          if (!_nudgeInterval) {   // If not nudging at the edge of the viewport, try to snap..
-              // related code
-              // - `mode/drag_node.js`     `doMode()`
-              // - `behavior/draw.js`      `click()`
-              // - `behavior/draw_way.js`  `move()`
-              var d = datum();
-              var target = d && d.properties && d.properties.entity;
-              var targetLoc = target && target.loc;
-              var targetNodes = d && d.properties && d.properties.nodes;
-              var edge;
 
-              if (targetLoc) {   // snap to node/vertex - a point target with `.loc`
-                  loc = targetLoc;
+      tagClasses.getClassesString = function(t, value, entity) {
+          var primary, status;
+          var i, k, v;
 
-              } else if (targetNodes) {   // snap to way - a line target with `.nodes`
-                  edge = geoChooseEdge(targetNodes, context.mouse(), context.projection, end.id);
-                  if (edge) {
-                      loc = edge.loc;
-                  }
+          // in some situations we want to render perimeter strokes a certain way
+          var overrideGeometry;
+          if (/\bstroke\b/.test(value)) {
+              if (!!t.barrier && t.barrier !== 'no') {
+                  overrideGeometry = 'line';
+              } else if (t.type === 'multipolygon' && !entity.hasInterestingTags()) {
+                  overrideGeometry = 'area';
               }
           }
 
-          context.replace(
-              actionMoveNode(entity.id, loc),
-              moveAnnotation(entity)
-          );
+          // preserve base classes (nothing with `tag-`)
+          var classes = value.trim().split(/\s+/)
+              .filter(function(klass) {
+                  return klass.length && !/^tag-/.test(klass);
+              })
+              .map(function(klass) {  // special overrides for some perimeter strokes
+                  return (klass === 'line' || klass === 'area') ? (overrideGeometry || klass) : klass;
+              });
 
-          // Below here: validations
-          var isInvalid = false;
+          // pick at most one primary classification tag..
+          for (i = 0; i < primaries.length; i++) {
+              k = primaries[i];
+              v = t[k];
+              if (!v || v === 'no') continue;
 
-          // Check if this connection to `target` could cause relations to break..
-          if (target) {
-              isInvalid = hasRelationConflict(entity, target, edge, context.graph());
-          }
+              if (k === 'piste:type') {  // avoid a ':' in the class name
+                  k = 'piste';
+              }
 
-          // Check if this drag causes the geometry to break..
-          if (!isInvalid) {
-              isInvalid = hasInvalidGeometry(entity, context.graph());
+              primary = k;
+              if (statuses.indexOf(v) !== -1) {   // e.g. `railway=abandoned`
+                  status = v;
+                  classes.push('tag-' + k);
+              } else {
+                  classes.push('tag-' + k);
+                  classes.push('tag-' + k + '-' + v);
+              }
+
+              break;
           }
 
+          // add at most one status tag, only if relates to primary tag..
+          if (!status) {
+              for (i = 0; i < statuses.length; i++) {
+                  k = statuses[i];
+                  v = t[k];
+                  if (!v || v === 'no') continue;
 
-          var nope = context.surface().classed('nope');
-          if (isInvalid === 'relation' || isInvalid === 'restriction') {
-              if (!nope) {   // about to nope - show hint
-                  uiFlash()
-                      .duration(4000)
-                      .text(t('operations.connect.' + isInvalid,
-                          { relation: context.presets().item('type/restriction').name() }
-                      ))();
-              }
-          } else {
-              if (nope) {   // about to un-nope, remove hint
-                  uiFlash()
-                      .duration(1)
-                      .text('')();
+                  if (v === 'yes') {   // e.g. `railway=rail + abandoned=yes`
+                      status = k;
+                  }
+                  else if (primary && primary === v) {  // e.g. `railway=rail + abandoned=railway`
+                      status = k;
+                  } else if (!primary && primaries.indexOf(v) !== -1) {  // e.g. `abandoned=railway`
+                      status = k;
+                      primary = v;
+                      classes.push('tag-' + v);
+                  }  // else ignore e.g.  `highway=path + abandoned=railway`
+
+                  if (status) break;
               }
           }
 
+          if (status) {
+              classes.push('tag-status');
+              classes.push('tag-status-' + status);
+          }
 
-          var nopeDisabled = context.surface().classed('nope-disabled');
-          if (nopeDisabled) {
-              context.surface()
-                  .classed('nope', false)
-                  .classed('nope-suppressed', isInvalid);
-          } else {
-              context.surface()
-                  .classed('nope', isInvalid)
-                  .classed('nope-suppressed', false);
+          // add any secondary tags
+          for (i = 0; i < secondaries.length; i++) {
+              k = secondaries[i];
+              v = t[k];
+              if (!v || v === 'no') continue;
+              classes.push('tag-' + k);
+              classes.push('tag-' + k + '-' + v);
           }
 
-          _lastLoc = loc;
-      }
+          // For highways, look for surface tagging..
+          if (primary === 'highway' || primary === 'aeroway') {
+              var paved = (t.highway !== 'track');
+              for (k in t) {
+                  v = t[k];
+                  if (k in osmPavedTags) {
+                      paved = !!osmPavedTags[k][v];
+                      break;
+                  }
+              }
+              if (!paved) {
+                  classes.push('tag-unpaved');
+              }
+          }
 
+          return classes.join(' ').trim();
+      };
 
-      // Uses `actionConnect.disabled()` to know whether this connection is ok..
-      function hasRelationConflict(entity, target, edge, graph) {
-          var testGraph = graph.update();  // copy
 
-          // if snapping to way - add midpoint there and consider that the target..
-          if (edge) {
-              var midpoint = osmNode();
-              var action = actionAddMidpoint({
-                  loc: edge.loc,
-                  edge: [target.nodes[edge.index - 1], target.nodes[edge.index]]
-              }, midpoint);
+      tagClasses.tags = function(val) {
+          if (!arguments.length) return _tags;
+          _tags = val;
+          return tagClasses;
+      };
 
-              testGraph = action(testGraph);
-              target = midpoint;
-          }
+      return tagClasses;
+  }
 
-          // can we connect to it?
-          var ids = [entity.id, target.id];
-          return actionConnect(ids).disabled(testGraph);
-      }
+  function svgTurns(projection, context) {
 
+      function icon(turn) {
+          var u = turn.u ? '-u' : '';
+          if (turn.no) return '#iD-turn-no' + u;
+          if (turn.only) return '#iD-turn-only' + u;
+          return '#iD-turn-yes' + u;
+      }
 
-      function hasInvalidGeometry(entity, graph) {
-          var parents = graph.parentWays(entity);
-          var i, j, k;
+      function drawTurns(selection, graph, turns) {
 
-          for (i = 0; i < parents.length; i++) {
-              var parent = parents[i];
-              var nodes = [];
-              var activeIndex = null;    // which multipolygon ring contains node being dragged
+          function turnTransform(d) {
+              var pxRadius = 50;
+              var toWay = graph.entity(d.to.way);
+              var toPoints = graph.childNodes(toWay)
+                  .map(function (n) { return n.loc; })
+                  .map(projection);
+              var toLength = geoPathLength(toPoints);
+              var mid = toLength / 2;    // midpoint of destination way
 
-              // test any parent multipolygons for valid geometry
-              var relations = graph.parentRelations(parent);
-              for (j = 0; j < relations.length; j++) {
-                  if (!relations[j].isMultipolygon()) continue;
+              var toNode = graph.entity(d.to.node);
+              var toVertex = graph.entity(d.to.vertex);
+              var a = geoAngle(toVertex, toNode, projection);
+              var o = projection(toVertex.loc);
+              var r = d.u ? 0                  // u-turn: no radius
+                  : !toWay.__via ? pxRadius    // leaf way: put marker at pxRadius
+                  : Math.min(mid, pxRadius);   // via way: prefer pxRadius, fallback to mid for very short ways
 
-                  var rings = osmJoinWays(relations[j].members, graph);
+              return 'translate(' + (r * Math.cos(a) + o[0]) + ',' + (r * Math.sin(a) + o[1]) + ') ' +
+                  'rotate(' + a * 180 / Math.PI + ')';
+          }
 
-                  // find active ring and test it for self intersections
-                  for (k = 0; k < rings.length; k++) {
-                      nodes = rings[k].nodes;
-                      if (find$1(nodes, function(n) { return n.id === entity.id; })) {
-                          activeIndex = k;
-                          if (geoHasSelfIntersections(nodes, entity.id)) {
-                              return true;
-                          }
-                      }
-                      rings[k].coords = nodes.map(function(n) { return n.loc; });
-                  }
 
-                  // test active ring for intersections with other rings in the multipolygon
-                  for (k = 0; k < rings.length; k++) {
-                      if (k === activeIndex) continue;
+          var drawLayer = selection.selectAll('.layer-osm.points .points-group.turns');
+          var touchLayer = selection.selectAll('.layer-touch.turns');
 
-                      // make sure active ring doesnt cross passive rings
-                      if (geoHasLineIntersections(rings[activeIndex].nodes, rings[k].nodes, entity.id)) {
-                          return true;
-                      }
-                  }
-              }
+          // Draw turns..
+          var groups = drawLayer.selectAll('g.turn')
+              .data(turns, function(d) { return d.key; });
 
+          // exit
+          groups.exit()
+              .remove();
 
-              // If we still haven't tested this node's parent way for self-intersections.
-              // (because it's not a member of a multipolygon), test it now.
-              if (activeIndex === null) {
-                  nodes = parent.nodes.map(function(nodeID) { return graph.entity(nodeID); });
-                  if (nodes.length && geoHasSelfIntersections(nodes, entity.id)) {
-                      return true;
-                  }
-              }
+          // enter
+          var groupsEnter = groups.enter()
+              .append('g')
+              .attr('class', function(d) { return 'turn ' + d.key; });
 
-          }
+          var turnsEnter = groupsEnter
+              .filter(function(d) { return !d.u; });
 
-          return false;
-      }
+          turnsEnter.append('rect')
+              .attr('transform', 'translate(-22, -12)')
+              .attr('width', '44')
+              .attr('height', '24');
 
+          turnsEnter.append('use')
+              .attr('transform', 'translate(-22, -12)')
+              .attr('width', '44')
+              .attr('height', '24');
 
-      function move(entity) {
-          if (_isCancelled) return;
-          event.sourceEvent.stopPropagation();
+          var uEnter = groupsEnter
+              .filter(function(d) { return d.u; });
 
-          context.surface().classed('nope-disabled', event.sourceEvent.altKey);
+          uEnter.append('circle')
+              .attr('r', '16');
 
-          _lastLoc = context.projection.invert(event.point);
+          uEnter.append('use')
+              .attr('transform', 'translate(-16, -16)')
+              .attr('width', '32')
+              .attr('height', '32');
 
-          doMove(entity);
-          var nudge = geoViewportEdge(event.point, context.map().dimensions());
-          if (nudge) {
-              startNudge(entity, nudge);
-          } else {
-              stopNudge();
-          }
-      }
+          // update
+          groups = groups
+              .merge(groupsEnter)
+              .attr('opacity', function(d) { return d.direct === false ? '0.7' : null; })
+              .attr('transform', turnTransform);
 
+          groups.select('use')
+              .attr('xlink:href', icon);
 
-      function end(entity) {
-          if (_isCancelled) return;
+          groups.select('rect');      // propagate bound data
+          groups.select('circle');    // propagate bound data
 
-          var d = datum();
-          var nope = (d && d.properties && d.properties.nope) || context.surface().classed('nope');
-          var target = d && d.properties && d.properties.entity;   // entity to snap to
 
-          if (nope) {   // bounce back
-              context.perform(
-                  _actionBounceBack(entity.id, _startLoc)
-              );
+          // Draw touch targets..
+          var fillClass = context.getDebug('target') ? 'pink ' : 'nocolor ';
+          groups = touchLayer.selectAll('g.turn')
+              .data(turns, function(d) { return d.key; });
 
-          } else if (target && target.type === 'way') {
-              var choice = geoChooseEdge(context.childNodes(target), context.mouse(), context.projection, entity.id);
-              context.replace(
-                  actionAddMidpoint({
-                      loc: choice.loc,
-                      edge: [target.nodes[choice.index - 1], target.nodes[choice.index]]
-                  }, entity),
-                  connectAnnotation(entity, target)
-              );
+          // exit
+          groups.exit()
+              .remove();
 
-          } else if (target && target.type === 'node') {
-              context.replace(
-                  actionConnect([target.id, entity.id]),
-                  connectAnnotation(entity, target)
-              );
+          // enter
+          groupsEnter = groups.enter()
+              .append('g')
+              .attr('class', function(d) { return 'turn ' + d.key; });
 
-          } else if (_wasMidpoint) {
-              context.replace(
-                  actionNoop(),
-                  t('operations.add.annotation.vertex')
-              );
+          turnsEnter = groupsEnter
+              .filter(function(d) { return !d.u; });
 
-          } else {
-              context.replace(
-                  actionNoop(),
-                  moveAnnotation(entity)
-              );
-          }
+          turnsEnter.append('rect')
+              .attr('class', 'target ' + fillClass)
+              .attr('transform', 'translate(-22, -12)')
+              .attr('width', '44')
+              .attr('height', '24');
 
-          var reselection = _restoreSelectedIDs.filter(function(id) {
-              return context.graph().hasEntity(id);
-          });
+          uEnter = groupsEnter
+              .filter(function(d) { return d.u; });
 
-          if (reselection.length) {
-              context.enter(modeSelect(context, reselection));
-          } else {
-              context.enter(modeBrowse(context));
-          }
-      }
+          uEnter.append('circle')
+              .attr('class', 'target ' + fillClass)
+              .attr('r', '16');
 
+          // update
+          groups = groups
+              .merge(groupsEnter)
+              .attr('transform', turnTransform);
 
-      function _actionBounceBack(nodeID, toLoc) {
-          var moveNode = actionMoveNode(nodeID, toLoc);
-          var action = function(graph, t$$1) {
-              // last time through, pop off the bounceback perform.
-              // it will then overwrite the initial perform with a moveNode that does nothing
-              if (t$$1 === 1) context.pop();
-              return moveNode(graph, t$$1);
-          };
-          action.transitionable = true;
-          return action;
-      }
+          groups.select('rect');      // propagate bound data
+          groups.select('circle');    // propagate bound data
 
 
-      function cancel() {
-          drag.cancel();
-          context.enter(modeBrowse(context));
+          return this;
       }
 
+      return drawTurns;
+  }
 
-      var drag = behaviorDrag()
-          .selector('.layer-touch.points .target')
-          .surface(select('#map').node())
-          .origin(origin)
-          .on('start', start)
-          .on('move', move)
-          .on('end', end);
+  function svgVertices(projection, context) {
+      var radiuses = {
+          //       z16-, z17,   z18+,  w/icon
+          shadow: [6,    7.5,   7.5,   12],
+          stroke: [2.5,  3.5,   3.5,   8],
+          fill:   [1,    1.5,   1.5,   1.5]
+      };
 
+      var _currHoverTarget;
+      var _currPersistent = {};
+      var _currHover = {};
+      var _prevHover = {};
+      var _currSelected = {};
+      var _prevSelected = {};
+      var _radii = {};
 
-      mode.enter = function() {
-          context.install(hover);
-          context.install(edit);
 
-          select(window)
-              .on('keydown.drawWay', keydown)
-              .on('keyup.drawWay', keyup);
+      function sortY(a, b) {
+          return b.loc[1] - a.loc[1];
+      }
 
-          context.history()
-              .on('undone.drag-node', cancel);
-      };
+      // Avoid exit/enter if we're just moving stuff around.
+      // The node will get a new version but we only need to run the update selection.
+      function fastEntityKey(d) {
+          var mode = context.mode();
+          var isMoving = mode && /^(add|draw|drag|move|rotate)/.test(mode.id);
+          return isMoving ? d.id : osmEntity.key(d);
+      }
 
 
-      mode.exit = function() {
-          context.ui().sidebar.hover.cancel();
-          context.uninstall(hover);
-          context.uninstall(edit);
+      function draw(selection, graph, vertices, sets, filter) {
+          sets = sets || { selected: {}, important: {}, hovered: {} };
 
-          select(window)
-              .on('keydown.hover', null)
-              .on('keyup.hover', null);
+          var icons = {};
+          var directions = {};
+          var wireframe = context.surface().classed('fill-wireframe');
+          var zoom = geoScaleToZoom(projection.scale());
+          var z = (zoom < 17 ? 0 : zoom < 18 ? 1 : 2);
+          var activeID = context.activeID();
 
-          context.history()
-              .on('undone.drag-node', null);
 
-          _activeEntity = null;
+          function getIcon(d) {
+              // always check latest entity, as fastEntityKey avoids enter/exit now
+              var entity = graph.entity(d.id);
+              if (entity.id in icons) return icons[entity.id];
 
-          context.surface()
-              .classed('nope', false)
-              .classed('nope-suppressed', false)
-              .classed('nope-disabled', false)
-              .selectAll('.active')
-              .classed('active', false);
+              icons[entity.id] =
+                  entity.hasInterestingTags() &&
+                  context.presets().match(entity, graph).icon;
 
-          stopNudge();
-      };
+              return icons[entity.id];
+          }
 
 
-      mode.selectedIDs = function() {
-          if (!arguments.length) return _activeEntity ? [_activeEntity.id] : [];
-          // no assign
-          return mode;
-      };
+          // memoize directions results, return false for empty arrays (for use in filter)
+          function getDirections(entity) {
+              if (entity.id in directions) return directions[entity.id];
 
+              var angles = entity.directions(graph, projection);
+              directions[entity.id] = angles.length ? angles : false;
+              return angles;
+          }
 
-      mode.activeID = function() {
-          if (!arguments.length) return _activeEntity && _activeEntity.id;
-          // no assign
-          return mode;
-      };
 
+          function updateAttributes(selection) {
+              ['shadow', 'stroke', 'fill'].forEach(function(klass) {
+                  var rads = radiuses[klass];
+                  selection.selectAll('.' + klass)
+                      .each(function(entity) {
+                          var i = z && getIcon(entity);
+                          var r = rads[i ? 3 : z];
 
-      mode.restoreSelectedIDs = function(_) {
-          if (!arguments.length) return _restoreSelectedIDs;
-          _restoreSelectedIDs = _;
-          return mode;
-      };
+                          // slightly increase the size of unconnected endpoints #3775
+                          if (entity.id !== activeID && entity.isEndpoint(graph) && !entity.isConnected(graph)) {
+                              r += 1.5;
+                          }
 
+                          if (klass === 'shadow') {   // remember this value, so we don't need to
+                              _radii[entity.id] = r;  // recompute it when we draw the touch targets
+                          }
 
-      mode.behavior = drag;
+                          select(this)
+                              .attr('r', r)
+                              .attr('visibility', (i && klass === 'fill') ? 'hidden' : null);
+                      });
+              });
+          }
 
+          vertices.sort(sortY);
 
-      return mode;
-  }
+          var groups = selection.selectAll('g.vertex')
+              .filter(filter)
+              .data(vertices, fastEntityKey);
 
-  function modeDragNote$$1(context) {
-      var mode = {
-          id: 'drag-note',
-          button: 'browse'
-      };
+          // exit
+          groups.exit()
+              .remove();
 
-      var edit = behaviorEdit(context);
+          // enter
+          var enter = groups.enter()
+              .append('g')
+              .attr('class', function(d) { return 'node vertex ' + d.id; })
+              .order();
 
-      var _nudgeInterval;
-      var _lastLoc;
-      var _note;    // most current note.. dragged note may have stale datum.
+          enter
+              .append('circle')
+              .attr('class', 'shadow');
 
+          enter
+              .append('circle')
+              .attr('class', 'stroke');
 
-      function startNudge(nudge) {
-          if (_nudgeInterval) window.clearInterval(_nudgeInterval);
-          _nudgeInterval = window.setInterval(function() {
-              context.pan(nudge);
-              doMove(nudge);
-          }, 50);
-      }
+          // Vertices with tags get a fill.
+          enter.filter(function(d) { return d.hasInterestingTags(); })
+              .append('circle')
+              .attr('class', 'fill');
 
+          // update
+          groups = groups
+              .merge(enter)
+              .attr('transform', svgPointTransform(projection))
+              .classed('sibling', function(d) { return d.id in sets.selected; })
+              .classed('shared', function(d) { return graph.isShared(d); })
+              .classed('endpoint', function(d) { return d.isEndpoint(graph); })
+              .call(updateAttributes);
 
-      function stopNudge() {
-          if (_nudgeInterval) {
-              window.clearInterval(_nudgeInterval);
-              _nudgeInterval = null;
-          }
-      }
 
+          // Vertices with icons get a `use`.
+          var iconUse = groups
+              .selectAll('.icon')
+              .data(function data(d) { return zoom >= 17 && getIcon(d) ? [d] : []; }, fastEntityKey);
 
-      function origin(note) {
-          return context.projection(note.loc);
-      }
+          // exit
+          iconUse.exit()
+              .remove();
+
+          // enter
+          iconUse.enter()
+              .append('use')
+              .attr('class', 'icon')
+              .attr('width', '11px')
+              .attr('height', '11px')
+              .attr('transform', 'translate(-5.5, -5.5)')
+              .attr('xlink:href', function(d) {
+                  var picon = getIcon(d);
+                  var isMaki = /^maki-/.test(picon);
+                  return '#' + picon + (isMaki ? '-11' : '');
+              });
 
 
-      function start(note) {
-          _note = note;
-          var osm = services.osm;
-          if (osm) {
-              // Get latest note from cache.. The marker may have a stale datum bound to it
-              // and dragging it around can sometimes delete the users note comment.
-              _note = osm.getNote(_note.id);
-          }
+          // Vertices with directions get viewfields
+          var dgroups = groups
+              .selectAll('.viewfieldgroup')
+              .data(function data(d) { return zoom >= 18 && getDirections(d) ? [d] : []; }, fastEntityKey);
 
-          context.surface().selectAll('.note-' + _note.id)
-              .classed('active', true);
+          // exit
+          dgroups.exit()
+              .remove();
 
-          context.perform(actionNoop());
-          context.enter(mode);
-          context.selectedNoteID(_note.id);
-      }
+          // enter/update
+          dgroups = dgroups.enter()
+              .insert('g', '.shadow')
+              .attr('class', 'viewfieldgroup')
+              .merge(dgroups);
 
+          var viewfields = dgroups.selectAll('.viewfield')
+              .data(getDirections, function key(d) { return osmEntity.key(d); });
 
-      function move() {
-          event.sourceEvent.stopPropagation();
-          _lastLoc = context.projection.invert(event.point);
+          // exit
+          viewfields.exit()
+              .remove();
 
-          doMove();
-          var nudge = geoViewportEdge(event.point, context.map().dimensions());
-          if (nudge) {
-              startNudge(nudge);
-          } else {
-              stopNudge();
-          }
+          // enter/update
+          viewfields.enter()
+              .append('path')
+              .attr('class', 'viewfield')
+              .attr('d', 'M0,0H0')
+              .merge(viewfields)
+              .attr('marker-start', 'url(#viewfield-marker' + (wireframe ? '-wireframe' : '') + ')')
+              .attr('transform', function(d) { return 'rotate(' + d + ')'; });
       }
 
 
-      function doMove(nudge) {
-          nudge = nudge || [0, 0];
+      function drawTargets(selection, graph, entities, filter) {
+          var targetClass = context.getDebug('target') ? 'pink ' : 'nocolor ';
+          var nopeClass = context.getDebug('target') ? 'red ' : 'nocolor ';
+          var getTransform = svgPointTransform(projection).geojson;
+          var activeID = context.activeID();
+          var data = { targets: [], nopes: [] };
 
-          var currPoint = (event && event.point) || context.projection(_lastLoc);
-          var currMouse = geoVecSubtract(currPoint, nudge);
-          var loc = context.projection.invert(currMouse);
+          entities.forEach(function(node) {
+              if (activeID === node.id) return;   // draw no target on the activeID
 
-          _note = _note.move(loc);
+              var vertexType = svgPassiveVertex(node, graph, activeID);
+              if (vertexType !== 0) {     // passive or adjacent - allow to connect
+                  data.targets.push({
+                      type: 'Feature',
+                      id: node.id,
+                      properties: {
+                          target: true,
+                          entity: node
+                      },
+                      geometry: node.asGeoJSON()
+                  });
+              } else {
+                  data.nopes.push({
+                      type: 'Feature',
+                      id: node.id + '-nope',
+                      properties: {
+                          nope: true,
+                          target: true,
+                          entity: node
+                      },
+                      geometry: node.asGeoJSON()
+                  });
+              }
+          });
 
-          var osm = services.osm;
-          if (osm) {
-              osm.replaceNote(_note);  // update note cache
-          }
 
-          context.replace(actionNoop());   // trigger redraw
-      }
+          // Targets allow hover and vertex snapping
+          var targets = selection.selectAll('.vertex.target-allowed')
+              .filter(function(d) { return filter(d.properties.entity); })
+              .data(data.targets, function key(d) { return d.id; });
 
+          // exit
+          targets.exit()
+              .remove();
 
-      function end() {
-          context.replace(actionNoop());   // trigger redraw
+          // enter/update
+          targets.enter()
+              .append('circle')
+              .attr('r', function(d) { return (_radii[d.id] || radiuses.shadow[3]); })
+              .merge(targets)
+              .attr('class', function(d) { return 'node vertex target target-allowed ' + targetClass + d.id; })
+              .attr('transform', getTransform);
 
-          context
-              .selectedNoteID(_note.id)
-              .enter(modeSelectNote$$1(context, _note.id));
-      }
 
+          // NOPE
+          var nopes = selection.selectAll('.vertex.target-nope')
+              .filter(function(d) { return filter(d.properties.entity); })
+              .data(data.nopes, function key(d) { return d.id; });
 
-      var drag = behaviorDrag()
-          .selector('.layer-touch.markers .target.note.new')
-          .surface(select('#map').node())
-          .origin(origin)
-          .on('start', start)
-          .on('move', move)
-          .on('end', end);
+          // exit
+          nopes.exit()
+              .remove();
 
+          // enter/update
+          nopes.enter()
+              .append('circle')
+              .attr('r', function(d) { return (_radii[d.properties.entity.id] || radiuses.shadow[3]); })
+              .merge(nopes)
+              .attr('class', function(d) { return 'node vertex target target-nope ' + nopeClass + d.id; })
+              .attr('transform', getTransform);
+      }
 
-      mode.enter = function() {
-          context.install(edit);
-      };
 
+      // Points can also render as vertices:
+      // 1. in wireframe mode or
+      // 2. at higher zooms if they have a direction
+      function renderAsVertex(entity, graph, wireframe, zoom) {
+          var geometry = entity.geometry(graph);
+          return geometry === 'vertex' || (geometry === 'point' && (
+              wireframe || (zoom >= 18 && entity.directions(graph, projection).length)
+          ));
+      }
 
-      mode.exit = function() {
-          context.ui().sidebar.hover.cancel();
-          context.uninstall(edit);
 
-          context.surface()
-              .selectAll('.active')
-              .classed('active', false);
+      function getSiblingAndChildVertices(ids, graph, wireframe, zoom) {
+          var results = {};
 
-          stopNudge();
-      };
+          function addChildVertices(entity) {
+              var geometry = entity.geometry(graph);
+              if (!context.features().isHiddenFeature(entity, graph, geometry)) {
+                  var i;
+                  if (entity.type === 'way') {
+                      for (i = 0; i < entity.nodes.length; i++) {
+                          var child = graph.hasEntity(entity.nodes[i]);
+                          if (child) {
+                              addChildVertices(child);
+                          }
+                      }
+                  } else if (entity.type === 'relation') {
+                      for (i = 0; i < entity.members.length; i++) {
+                          var member = graph.hasEntity(entity.members[i].id);
+                          if (member) {
+                              addChildVertices(member);
+                          }
+                      }
+                  } else if (renderAsVertex(entity, graph, wireframe, zoom)) {
+                      results[entity.id] = entity;
+                  }
+              }
+          }
 
-      mode.behavior = drag;
+          ids.forEach(function(id) {
+              var entity = graph.hasEntity(id);
+              if (!entity) return;
 
-      return mode;
-  }
+              if (entity.type === 'node') {
+                  if (renderAsVertex(entity, graph, wireframe, zoom)) {
+                      results[entity.id] = entity;
+                      graph.parentWays(entity).forEach(function(entity) {
+                          addChildVertices(entity);
+                      });
+                  }
+              } else {  // way, relation
+                  addChildVertices(entity);
+              }
+          });
 
-  function modeBrowse(context) {
-      var mode = {
-          button: 'browse',
-          id: 'browse',
-          title: t('modes.browse.title'),
-          description: t('modes.browse.description')
-      }, sidebar;
+          return results;
+      }
 
-      var behaviors = [
-          behaviorPaste(context),
-          behaviorHover(context).on('hover', context.ui().sidebar.hover),
-          behaviorSelect(context),
-          behaviorLasso(context),
-          modeDragNode$$1(context).behavior,
-          modeDragNote$$1(context).behavior
-      ];
 
+      function drawVertices(selection, graph, entities, filter, extent, fullRedraw) {
+          var wireframe = context.surface().classed('fill-wireframe');
+          var zoom = geoScaleToZoom(projection.scale());
+          var mode = context.mode();
+          var isMoving = mode && /^(add|draw|drag|move|rotate)/.test(mode.id);
 
-      mode.enter = function() {
-          behaviors.forEach(context.install);
+          var drawLayer = selection.selectAll('.layer-osm.points .points-group.vertices');
+          var touchLayer = selection.selectAll('.layer-touch.points');
 
-          // Get focus on the body.
-          if (document.activeElement && document.activeElement.blur) {
-              document.activeElement.blur();
+          if (fullRedraw) {
+              _currPersistent = {};
+              _radii = {};
           }
 
-          if (sidebar) {
-              context.ui().sidebar.show(sidebar);
-          } else {
-              context.ui().sidebar.select(null);
-          }
-      };
+          // Collect important vertices from the `entities` list..
+          // (during a paritial redraw, it will not contain everything)
+          for (var i = 0; i < entities.length; i++) {
+              var entity = entities[i];
+              var geometry = entity.geometry(graph);
+              var keep = false;
 
+              // a point that looks like a vertex..
+              if ((geometry === 'point') && renderAsVertex(entity, graph, wireframe, zoom)) {
+                  _currPersistent[entity.id] = entity;
+                  keep = true;
 
-      mode.exit = function() {
-          context.ui().sidebar.hover.cancel();
-          behaviors.forEach(context.uninstall);
+              // a vertex of some importance..
+              } else if (geometry === 'vertex' &&
+                  (entity.hasInterestingTags() || entity.isEndpoint(graph) || entity.isConnected(graph))) {
+                  _currPersistent[entity.id] = entity;
+                  keep = true;
+              }
 
-          if (sidebar) {
-              context.ui().sidebar.hide();
+              // whatever this is, it's not a persistent vertex..
+              if (!keep && !fullRedraw) {
+                  delete _currPersistent[entity.id];
+              }
           }
-      };
 
+          // 3 sets of vertices to consider:
+          var sets = {
+              persistent: _currPersistent,  // persistent = important vertices (render always)
+              selected: _currSelected,      // selected + siblings of selected (render always)
+              hovered: _currHover           // hovered + siblings of hovered (render only in draw modes)
+          };
 
-      mode.sidebar = function(_) {
-          if (!arguments.length) return sidebar;
-          sidebar = _;
-          return mode;
-      };
-
+          var all = assign({}, (isMoving ? _currHover : {}), _currSelected, _currPersistent);
 
-      return mode;
-  }
+          // Draw the vertices..
+          // The filter function controls the scope of what objects d3 will touch (exit/enter/update)
+          // Adjust the filter function to expand the scope beyond whatever entities were passed in.
+          var filterRendered = function(d) {
+              return d.id in _currPersistent || d.id in _currSelected || d.id in _currHover || filter(d);
+          };
+          drawLayer
+              .call(draw, graph, currentVisible(all), sets, filterRendered);
 
-  function svgIcon(name, svgklass, useklass) {
-      return function drawIcon(selection) {
-          selection.selectAll('svg')
-              .data([0])
-              .enter()
-              .append('svg')
-              .attr('class', 'icon ' + (svgklass || ''))
-              .append('use')
-              .attr('xlink:href', name)
-              .attr('class', useklass);
-      };
-  }
+          // Draw touch targets..
+          // When drawing, render all targets (not just those affected by a partial redraw)
+          var filterTouch = function(d) {
+              return isMoving ? true : filterRendered(d);
+          };
+          touchLayer
+              .call(drawTargets, graph, currentVisible(all), filterTouch);
 
-  // Tooltips and svg mask used to highlight certain features
-  function uiCurtain() {
 
-      var surface = select(null),
-          tooltip = select(null),
-          darkness = select(null);
+          function currentVisible(which) {
+              return Object.keys(which)
+                  .map(graph.hasEntity, graph)     // the current version of this entity
+                  .filter(function (entity) { return entity && entity.intersects(extent, graph); });
+          }
+      }
 
-      function curtain(selection$$1) {
-          surface = selection$$1
-              .append('svg')
-              .attr('id', 'curtain')
-              .style('z-index', 1000)
-              .style('pointer-events', 'none')
-              .style('position', 'absolute')
-              .style('top', 0)
-              .style('left', 0);
 
-          darkness = surface.append('path')
-              .attr('x', 0)
-              .attr('y', 0)
-              .attr('class', 'curtain-darkness');
+      // partial redraw - only update the selected items..
+      drawVertices.drawSelected = function(selection, graph, extent) {
+          var wireframe = context.surface().classed('fill-wireframe');
+          var zoom = geoScaleToZoom(projection.scale());
 
-          select(window).on('resize.curtain', resize);
+          _prevSelected = _currSelected || {};
+          _currSelected = getSiblingAndChildVertices(context.selectedIDs(), graph, wireframe, zoom);
 
-          tooltip = selection$$1.append('div')
-              .attr('class', 'tooltip')
-              .style('z-index', 1002);
+          // note that drawVertices will add `_currSelected` automatically if needed..
+          var filter = function(d) { return d.id in _prevSelected; };
+          drawVertices(selection, graph, values$1(_prevSelected), filter, extent, false);
+      };
 
-          tooltip
-              .append('div')
-              .attr('class', 'tooltip-arrow');
 
-          tooltip
-              .append('div')
-              .attr('class', 'tooltip-inner');
+      // partial redraw - only update the hovered items..
+      drawVertices.drawHover = function(selection, graph, target, extent) {
+          if (target === _currHoverTarget) return;  // continue only if something changed
 
-          resize();
+          var wireframe = context.surface().classed('fill-wireframe');
+          var zoom = geoScaleToZoom(projection.scale());
 
+          _prevHover = _currHover || {};
+          _currHoverTarget = target;
+          var entity = target && target.properties && target.properties.entity;
 
-          function resize() {
-              surface
-                  .attr('width', window.innerWidth)
-                  .attr('height', window.innerHeight);
-              curtain.cut(darkness.datum());
+          if (entity) {
+              _currHover = getSiblingAndChildVertices([entity.id], graph, wireframe, zoom);
+          } else {
+              _currHover = {};
           }
-      }
 
+          // note that drawVertices will add `_currHover` automatically if needed..
+          var filter = function(d) { return d.id in _prevHover; };
+          drawVertices(selection, graph, values$1(_prevHover), filter, extent, false);
+      };
 
-      /**
-       * Reveal cuts the curtain to highlight the given box,
-       * and shows a tooltip with instructions next to the box.
-       *
-       * @param  {String|ClientRect} [box]   box used to cut the curtain
-       * @param  {String}    [text]          text for a tooltip
-       * @param  {Object}    [options]
-       * @param  {string}    [options.tooltipClass]    optional class to add to the tooltip
-       * @param  {integer}   [options.duration]        transition time in milliseconds
-       * @param  {string}    [options.buttonText]      if set, create a button with this text label
-       * @param  {function}  [options.buttonCallback]  if set, the callback for the button
-       * @param  {String|ClientRect} [options.tooltipBox]  box for tooltip position, if different from box for the curtain
-       */
-      curtain.reveal = function(box, text, options) {
-          if (typeof box === 'string') {
-              box = select(box).node();
-          }
-          if (box && box.getBoundingClientRect) {
-              box = copyBox(box.getBoundingClientRect());
-          }
+      return drawVertices;
+  }
 
-          options = options || {};
+  /* global Mapillary:false */
 
-          var tooltipBox;
-          if (options.tooltipBox) {
-              tooltipBox = options.tooltipBox;
-              if (typeof tooltipBox === 'string') {
-                  tooltipBox = select(tooltipBox).node();
-              }
-              if (tooltipBox && tooltipBox.getBoundingClientRect) {
-                  tooltipBox = copyBox(tooltipBox.getBoundingClientRect());
-              }
-          } else {
-              tooltipBox = box;
-          }
 
-          if (tooltipBox && text) {
-              // pseudo markdown bold text for the instruction section..
-              var parts = text.split('**');
-              var html = parts[0] ? '<span>' + parts[0] + '</span>' : '';
-              if (parts[1]) {
-                  html += '<span class="instruction">' + parts[1] + '</span>';
-              }
+  var apibase = 'https://a.mapillary.com/v3/';
+  var viewercss = 'mapillary-js/mapillary.min.css';
+  var viewerjs = 'mapillary-js/mapillary.min.js';
+  var clientId = 'NzNRM2otQkR2SHJzaXJmNmdQWVQ0dzo1ZWYyMmYwNjdmNDdlNmVi';
+  var maxResults = 1000;
+  var tileZoom = 14;
+  var tiler$2 = utilTiler().zoomExtent([tileZoom, tileZoom]).skipNullIsland(true);
+  var dispatch$3 = dispatch('loadedImages', 'loadedSigns', 'bearingChanged');
+  var _mlyFallback = false;
+  var _mlyCache;
+  var _mlyClicks;
+  var _mlySelectedImage;
+  var _mlyViewer;
 
-              html = html.replace(/\*(.*?)\*/g, '<em>$1</em>');   // emphasis
-              html = html.replace(/\{br\}/g, '<br/><br/>');       // linebreak
 
-              if (options.buttonText && options.buttonCallback) {
-                  html += '<div class="button-section">' +
-                      '<button href="#" class="button action col8">' + options.buttonText + '</button></div>';
-              }
+  function abortRequest$2(i) {
+      i.abort();
+  }
 
-              var classes = 'curtain-tooltip tooltip in ' + (options.tooltipClass || '');
-              tooltip
-                  .classed(classes, true)
-                  .selectAll('.tooltip-inner')
-                  .html(html);
 
-              if (options.buttonText && options.buttonCallback) {
-                  var button = tooltip.selectAll('.button-section .button.action');
-                  button
-                      .on('click', function() {
-                          event.preventDefault();
-                          options.buttonCallback();
-                      });
-              }
+  function maxPageAtZoom(z) {
+      if (z < 15)   return 2;
+      if (z === 15) return 5;
+      if (z === 16) return 10;
+      if (z === 17) return 20;
+      if (z === 18) return 40;
+      if (z > 18)   return 80;
+  }
 
-              var tip = copyBox(tooltip.node().getBoundingClientRect()),
-                  w = window.innerWidth,
-                  h = window.innerHeight,
-                  tooltipWidth = 200,
-                  tooltipArrow = 5,
-                  side, pos;
 
+  function loadTiles(which, url, projection) {
+      var currZoom = Math.floor(geoScaleToZoom(projection.scale()));
+      var tiles = tiler$2.getTiles(projection);
 
-              // hack: this will have bottom placement,
-              // so need to reserve extra space for the tooltip illustration.
-              if (options.tooltipClass === 'intro-mouse') {
-                  tip.height += 80;
-              }
+      // abort inflight requests that are no longer needed
+      var cache = _mlyCache[which];
+      forEach(cache.inflight, function(v, k) {
+          var wanted = find$1(tiles, function(tile) { return k.indexOf(tile.id + ',') === 0; });
 
-              // trim box dimensions to just the portion that fits in the window..
-              if (tooltipBox.top + tooltipBox.height > h) {
-                  tooltipBox.height -= (tooltipBox.top + tooltipBox.height - h);
-              }
-              if (tooltipBox.left + tooltipBox.width > w) {
-                  tooltipBox.width -= (tooltipBox.left + tooltipBox.width - w);
-              }
+          if (!wanted) {
+              abortRequest$2(v);
+              delete cache.inflight[k];
+          }
+      });
 
-              // determine tooltip placement..
+      tiles.forEach(function(tile) {
+          loadNextTilePage(which, currZoom, url, tile);
+      });
+  }
 
-              if (tooltipBox.top + tooltipBox.height < 100) {
-                  // tooltip below box..
-                  side = 'bottom';
-                  pos = [
-                      tooltipBox.left + tooltipBox.width / 2 - tip.width / 2,
-                      tooltipBox.top + tooltipBox.height
-                  ];
 
-              } else if (tooltipBox.top > h - 140) {
-                  // tooltip above box..
-                  side = 'top';
-                  pos = [
-                      tooltipBox.left + tooltipBox.width / 2 - tip.width / 2,
-                      tooltipBox.top - tip.height
-                  ];
+  function loadNextTilePage(which, currZoom, url, tile) {
+      var cache = _mlyCache[which];
+      var rect = tile.extent.rectangle();
+      var maxPages = maxPageAtZoom(currZoom);
+      var nextPage = cache.nextPage[tile.id] || 0;
+      var 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(','),
+          });
 
-              } else {
-                  // tooltip to the side of the tooltipBox..
-                  var tipY = tooltipBox.top + tooltipBox.height / 2 - tip.height / 2;
+      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;
+                  }
+              }
+              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;
 
-                  if (textDirection === 'rtl') {
-                      if (tooltipBox.left - tooltipWidth - tooltipArrow < 70) {
-                          side = 'right';
-                          pos = [tooltipBox.left + tooltipBox.width + tooltipArrow, tipY];
+              var features = data.features.map(function(feature) {
+                  var loc = feature.geometry.coordinates;
+                  var d;
 
-                      } else {
-                          side = 'left';
-                          pos = [tooltipBox.left - tooltipWidth - tooltipArrow, tipY];
-                      }
+                  // An image (shown as a green dot on the map) is a single street photo with extra
+                  // information such as location, camera angle (CA), camera model, and so on.
+                  // Each image feature is a GeoJSON Point
+                  if (which === 'images') {
+                      d = {
+                          loc: loc,
+                          key: feature.properties.key,
+                          ca: feature.properties.ca,
+                          captured_at: feature.properties.captured_at,
+                          captured_by: feature.properties.username,
+                          pano: feature.properties.pano
+                      };
 
-                  } else {
-                      if (tooltipBox.left + tooltipBox.width + tooltipArrow + tooltipWidth > w - 70) {
-                          side = 'left';
-                          pos = [tooltipBox.left - tooltipWidth - tooltipArrow, tipY];
-                      }
-                      else {
-                          side = 'right';
-                          pos = [tooltipBox.left + tooltipBox.width + tooltipArrow, tipY];
-                      }
-                  }
-              }
+                      cache.forImageKey[d.key] = d;     // cache imageKey -> image
 
-              if (options.duration !== 0 || !tooltip.classed(side)) {
-                  tooltip.call(uiToggle(true));
-              }
+                  // Mapillary organizes images as sequences. A sequence of images are continuously captured
+                  // by a user at a give time. Sequences are shown on the map as green lines.
+                  // Each sequence feature is a GeoJSON LineString
+                  } else if (which === 'sequences') {
+                      var sequenceKey = feature.properties.key;
+                      cache.lineString[sequenceKey] = feature;           // cache sequenceKey -> lineString
+                      feature.properties.coordinateProperties.image_keys.forEach(function(imageKey) {
+                          cache.forImageKey[imageKey] = sequenceKey;     // cache imageKey -> sequenceKey
+                      });
+                      return false;    // because no `d` data worth loading into an rbush
 
-              tooltip
-                  .style('top', pos[1] + 'px')
-                  .style('left', pos[0] + 'px')
-                  .attr('class', classes + ' ' + side);
+                  // An image detection is a semantic pixel area on an image. The area could indicate
+                  // sky, trees, sidewalk in the image. A detection can be a polygon, a bounding box, or a point.
+                  // Each image_detection feature is a GeoJSON Point (located where the image was taken)
+                  } else if (which === 'image_detections') {
+                      d = {
+                          key: feature.properties.key,
+                          image_key: feature.properties.image_key,
+                          value: feature.properties.value,
+                          package: feature.properties.package,
+                          shape: feature.properties.shape
+                      };
 
+                      // cache imageKey -> image_detections
+                      if (!cache.forImageKey[d.image_key]) {
+                          cache.forImageKey[d.image_key] = [];
+                      }
+                      cache.forImageKey[d.image_key].push(d);
+                      return false;    // because no `d` data worth loading into an rbush
 
-              // shift tooltip-inner if it is very close to the top or bottom edge
-              // (doesn't affect the placement of the tooltip-arrow)
-              var shiftY = 0;
-              if (side === 'left' || side === 'right') {
-                  if (pos[1] < 60) {
-                      shiftY = 60 - pos[1];
-                  }
-                  else if (pos[1] + tip.height > h - 100) {
-                      shiftY = h - pos[1] - tip.height - 100;
+
+                  // A map feature is a real world object that can be shown on a map. It could be any object
+                  // recognized from images, manually added in images, or added on the map.
+                  // Each map feature is a GeoJSON Point (located where the feature is)
+                  } else if (which === 'map_features') {
+                      d = {
+                          loc: loc,
+                          key: feature.properties.key,
+                          value: feature.properties.value,
+                          package: feature.properties.package,
+                          detections: feature.properties.detections
+                      };
                   }
-              }
-              tooltip.selectAll('.tooltip-inner')
-                  .style('top', shiftY + 'px');
 
-          } else {
-              tooltip
-                  .classed('in', false)
-                  .call(uiToggle(false));
-          }
+                  return {
+                      minX: loc[0], minY: loc[1], maxX: loc[0], maxY: loc[1], data: d
+                  };
 
-          curtain.cut(box, options.duration);
+              }).filter(Boolean);
 
-          return tooltip;
-      };
+              if (cache.rtree && features) {
+                  cache.rtree.load(features);
+              }
 
+              if (which === 'images' || which === 'sequences') {
+                  dispatch$3.call('loadedImages');
+              } else if (which === 'map_features') {
+                  dispatch$3.call('loadedSigns');
+              }
 
-      curtain.cut = function(datum, duration) {
-          darkness.datum(datum)
-              .interrupt();
+              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
+              }
+          });
+  }
 
-          var selection$$1;
-          if (duration === 0) {
-              selection$$1 = darkness;
+  // 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 {
-              selection$$1 = darkness
-                  .transition()
-                  .duration(duration || 600)
-                  .ease(linear$1);
+              return ['',''];
           }
+      }).reduce(function(pagination, val) {
+          pagination[val[1]] = val[0];
+          return pagination;
+      }, {});
+  }
 
-          selection$$1
-              .attr('d', function(d) {
-                  var string = 'M 0,0 L 0,' + window.innerHeight + ' L ' +
-                      window.innerWidth + ',' + window.innerHeight + 'L' +
-                      window.innerWidth + ',0 Z';
-
-                  if (!d) return string;
-                  return string + 'M' +
-                      d.left + ',' + d.top + 'L' +
-                      d.left + ',' + (d.top + d.height) + 'L' +
-                      (d.left + d.width) + ',' + (d.top + d.height) + 'L' +
-                      (d.left + d.width) + ',' + (d.top) + 'Z';
-
-              });
-      };
 
+  // partition viewport into higher zoom tiles
+  function partitionViewport(projection) {
+      var z = geoScaleToZoom(projection.scale());
+      var z2 = (Math.ceil(z * 2) / 2) + 2.5;   // round to next 0.5 and add 2.5
+      var tiler = utilTiler().zoomExtent([z2, z2]);
 
-      curtain.remove = function() {
-          surface.remove();
-          tooltip.remove();
-          select(window).on('resize.curtain', null);
-      };
+      return tiler.getTiles(projection)
+          .map(function(tile) { return tile.extent; });
+  }
 
 
-      // ClientRects are immutable, so copy them to an object,
-      // in case we need to trim the height/width.
-      function copyBox(src) {
-          return {
-              top: src.top,
-              right: src.right,
-              bottom: src.bottom,
-              left: src.left,
-              width: src.width,
-              height: src.height
-          };
-      }
+  // no more than `limit` results per partition.
+  function searchLimited(limit, projection, rtree) {
+      limit = limit || 5;
 
+      return partitionViewport(projection)
+          .reduce(function(result, extent) {
+              var found = rtree.search(extent.bbox())
+                  .slice(0, limit)
+                  .map(function(d) { return d.data; });
 
-      return curtain;
+              return (found.length ? result.concat(found) : result);
+          }, []);
   }
 
-  function uiIntroWelcome(context, reveal) {
-      var dispatch$$1 = dispatch('done');
-      var listener = clickListener();
 
-      var chapter = {
-          title: 'intro.welcome.title'
-      };
 
+  var serviceMapillary = {
 
-      function welcome() {
-          context.map().centerZoom([-85.63591, 41.94285], 19);
-          reveal('.intro-nav-wrap .chapter-welcome',
-              t('intro.welcome.welcome'),
-              { buttonText: t('intro.ok'), buttonCallback: practice }
-          );
-      }
+      init: function() {
+          if (!_mlyCache) {
+              this.reset();
+          }
 
-      function practice() {
-          reveal('.intro-nav-wrap .chapter-welcome',
-              t('intro.welcome.practice'),
-              { buttonText: t('intro.ok'), buttonCallback: words }
-          );
-      }
+          this.event = utilRebind(this, dispatch$3, 'on');
+      },
 
-      function words() {
-          reveal('.intro-nav-wrap .chapter-welcome',
-              t('intro.welcome.words'),
-              { buttonText: t('intro.ok'), buttonCallback: mouse$$1 }
-          );
-      }
+      reset: function() {
+          var cache = _mlyCache;
 
+          if (cache) {
+              if (cache.images && cache.images.inflight) {
+                  forEach(cache.images.inflight, abortRequest$2);
+              }
+              if (cache.image_detections && cache.image_detections.inflight) {
+                  forEach(cache.image_detections.inflight, abortRequest$2);
+              }
+              if (cache.map_features && cache.map_features.inflight) {
+                  forEach(cache.map_features.inflight, abortRequest$2);
+              }
+              if (cache.sequences && cache.sequences.inflight) {
+                  forEach(cache.sequences.inflight, abortRequest$2);
+              }
+          }
 
-      function mouse$$1() {
-          reveal('.intro-nav-wrap .chapter-welcome',
-              t('intro.welcome.mouse'),
-              { buttonText: t('intro.ok'), buttonCallback: leftClick }
-          );
-      }
+          _mlyCache = {
+              images: { inflight: {}, loaded: {}, nextPage: {}, nextURL: {}, rtree: rbush_1(), forImageKey: {} },
+              image_detections: { inflight: {}, loaded: {}, nextPage: {}, nextURL: {}, forImageKey: {} },
+              map_features: { inflight: {}, loaded: {}, nextPage: {}, nextURL: {}, rtree: rbush_1() },
+              sequences: { inflight: {}, loaded: {}, nextPage: {}, nextURL: {}, rtree: rbush_1(), forImageKey: {}, lineString: {} }
+          };
 
+          _mlySelectedImage = null;
+          _mlyClicks = [];
+      },
 
-      function leftClick() {
-          var counter = 0;
-          var times = 5;
 
-          var tooltip = reveal('.intro-nav-wrap .chapter-welcome',
-              t('intro.welcome.leftclick', { num: times }),
-              { tooltipClass: 'intro-mouse' }
-          );
+      images: function(projection) {
+          var limit = 5;
+          return searchLimited(limit, projection, _mlyCache.images.rtree);
+      },
 
-          tooltip.selectAll('.tooltip-inner')
-              .insert('svg', 'span')
-              .attr('class', 'tooltip-illustration')
-              .append('use')
-              .attr('xlink:href', '#iD-walkthrough-mouse');
 
-          tooltip
-              .append('div')
-              .attr('class', 'counter');
+      signs: function(projection) {
+          var limit = 5;
+          return searchLimited(limit, projection, _mlyCache.map_features.rtree);
+      },
 
-          tooltip.call(listener);
 
-          listener.on('click', function(which) {
-              if (which === 'left') {
-                  select('.curtain-tooltip.intro-mouse .counter')
-                      .text(String(++counter));
+      sequences: function(projection) {
+          var viewport = projection.clipExtent();
+          var min = [viewport[0][0], viewport[1][1]];
+          var max = [viewport[1][0], viewport[0][1]];
+          var bbox = geoExtent(projection.invert(min), projection.invert(max)).bbox();
+          var sequenceKeys = {};
 
-                  if (counter === times) {
-                      window.setTimeout(function() { continueTo(rightClick); }, 1000);
+          // all sequences for images in viewport
+          _mlyCache.images.rtree.search(bbox)
+              .forEach(function(d) {
+                  var sequenceKey = _mlyCache.sequences.forImageKey[d.data.key];
+                  if (sequenceKey) {
+                      sequenceKeys[sequenceKey] = true;
                   }
-              }
+              });
+
+          // Return lineStrings for the sequences
+          return Object.keys(sequenceKeys).map(function(sequenceKey) {
+              return _mlyCache.sequences.lineString[sequenceKey];
           });
+      },
 
-          function continueTo(nextStep) {
-              listener.on('click', null);
-              tooltip.call(listener.off);
-              tooltip.select('.counter').remove();
-              nextStep();
-          }
-      }
 
+      signsSupported: function() {
+          return true;
+      },
 
-      function rightClick() {
-          var counter = 0;
-          var times = 5;
 
-          var tooltip = reveal('.intro-nav-wrap .chapter-welcome',
-              t('intro.welcome.rightclick', { num: times }),
-              { tooltipClass: 'intro-mouse' }
-          );
+      loadImages: function(projection) {
+          loadTiles('images', apibase + 'images?', projection);
+          loadTiles('sequences', apibase + 'sequences?', projection);
+      },
 
-          tooltip.selectAll('.tooltip-inner')
-              .insert('svg', 'span')
-              .attr('class', 'tooltip-illustration')
-              .append('use')
-              .attr('xlink:href', '#iD-walkthrough-mouse');
 
-          tooltip
+      loadSigns: function(context, projection) {
+          // if we are looking at signs, we'll actually need to fetch images too
+          loadTiles('images', apibase + 'images?', projection);
+          loadTiles('map_features', apibase + 'map_features?layers=trafficsigns&min_nbr_image_detections=1&', projection);
+          loadTiles('image_detections', apibase + 'image_detections?layers=trafficsigns&', projection);
+      },
+
+
+      loadViewer: function(context) {
+          // add mly-wrapper
+          var wrap = select('#photoviewer').selectAll('.mly-wrapper')
+              .data([0]);
+
+          wrap.enter()
               .append('div')
-              .attr('class', 'counter');
+              .attr('id', 'mly')
+              .attr('class', 'photo-wrapper mly-wrapper')
+              .classed('hide', true);
 
-          tooltip.call(listener);
+          // load mapillary-viewercss
+          select('head').selectAll('#mapillary-viewercss')
+              .data([0])
+              .enter()
+              .append('link')
+              .attr('id', 'mapillary-viewercss')
+              .attr('rel', 'stylesheet')
+              .attr('href', context.asset(viewercss));
 
-          listener.on('click', function(which) {
-              if (which === 'right') {
-                  select('.curtain-tooltip.intro-mouse .counter')
-                      .text(String(++counter));
+          // load mapillary-viewerjs
+          select('head').selectAll('#mapillary-viewerjs')
+              .data([0])
+              .enter()
+              .append('script')
+              .attr('id', 'mapillary-viewerjs')
+              .attr('src', context.asset(viewerjs));
 
-                  if (counter === times) {
-                      window.setTimeout(function() { continueTo(chapters); }, 1000);
-                  }
+          // load mapillary signs sprite
+          var defs = context.container().select('defs');
+          defs.call(svgDefs(context).addSprites, ['mapillary-sprite'], false /* don't override colors */ );
+
+          // Register viewer resize handler
+          context.ui().photoviewer.on('resize', function() {
+              if (_mlyViewer) {
+                  _mlyViewer.resize();
               }
           });
-
-          function continueTo(nextStep) {
-              listener.on('click', null);
-              tooltip.call(listener.off);
-              tooltip.select('.counter').remove();
-              nextStep();
-          }
-      }
+      },
 
 
-      function chapters() {
-          dispatch$$1.call('done');
-          reveal('.intro-nav-wrap .chapter-navigation',
-              t('intro.welcome.chapters', { next: t('intro.navigation.title') })
-          );
-      }
+      showViewer: function() {
+          var wrap = select('#photoviewer')
+              .classed('hide', false);
 
+          var isHidden = wrap.selectAll('.photo-wrapper.mly-wrapper.hide').size();
 
-      chapter.enter = function() {
-          welcome();
-      };
+          if (isHidden && _mlyViewer) {
+              wrap
+                  .selectAll('.photo-wrapper:not(.mly-wrapper)')
+                  .classed('hide', true);
 
+              wrap
+                  .selectAll('.photo-wrapper.mly-wrapper')
+                  .classed('hide', false);
 
-      chapter.exit = function() {
-          listener.off();
-          select('.curtain-tooltip.intro-mouse')
-              .selectAll('.counter')
-              .remove();
-      };
+              _mlyViewer.resize();
+          }
 
+          return this;
+      },
 
-      chapter.restart = function() {
-          chapter.exit();
-          chapter.enter();
-      };
 
+      hideViewer: function() {
+          _mlySelectedImage = null;
 
-      return utilRebind(chapter, dispatch$$1, 'on');
-  }
+          if (!_mlyFallback && _mlyViewer) {
+              _mlyViewer.getComponent('sequence').stop();
+          }
 
+          var viewer = select('#photoviewer');
+          if (!viewer.empty()) viewer.datum(null);
 
+          viewer
+              .classed('hide', true)
+              .selectAll('.photo-wrapper')
+              .classed('hide', true);
 
-  function clickListener() {
-      var dispatch$$1 = dispatch('click');
-      var minTime = 120;
-      var tooltip = select(null);
-      var down = {};
+          d3_selectAll('.viewfield-group, .sequence, .icon-sign')
+              .classed('currentView', false);
 
-      // `down` keeps track of which buttons/keys are down.
-      // Setting a property in `down` happens immediately.
-      // Unsetting a property in `down` is delayed because
-      //   on Windows a contextmenu event happens after keyup/mouseup
+          return this.setStyles(null, true);
+      },
 
-      function keydown() {
-          if (event.keyCode === 93)  {   // context menu
-              event.preventDefault();
-              event.stopPropagation();
-              down.menu = event.timeStamp;
-              tooltip.classed('rightclick', true);
-          }
-      }
 
+      parsePagination: parsePagination,
 
-      function keyup() {
-          if (event.keyCode === 93)  {   // context menu
-              event.preventDefault();
-              event.stopPropagation();
-              var endTime = event.timeStamp;
-              var startTime = down.menu || endTime;
-              var delay = (endTime - startTime < minTime) ? minTime : 0;
 
-              window.setTimeout(function() {
-                  tooltip.classed('rightclick', false);
-                  down.menu = undefined;  // delayed, for Windows
-              }, delay);
+      updateViewer: function(imageKey, context) {
+          if (!imageKey) return this;
 
-              dispatch$$1.call('click', this, 'right');
+          if (!_mlyViewer) {
+              this.initViewer(imageKey, context);
+          } else {
+              _mlyViewer.moveToKey(imageKey)
+                  .catch(function(e) { console.error('mly3', e); });  // eslint-disable-line no-console
           }
-      }
 
-
-      function mousedown() {
-          var button = event.button;
-          if (button === 0 && !event.ctrlKey) {
-              tooltip.classed('leftclick', true);
-          } else if (button === 2) {
-              tooltip.classed('rightclick', true);
-          }
-          down[button] = event.timeStamp;
-      }
+          return this;
+      },
 
 
-      function mouseup() {
-          var button = event.button;
-          var endTime = event.timeStamp;
-          var startTime = down[button] || endTime;
-          var delay = (endTime - startTime < minTime) ? minTime : 0;
+      initViewer: function(imageKey, context) {
+          var that = this;
+          if (window.Mapillary && imageKey) {
+              var opts = {
+                  baseImageSize: 320,
+                  component: {
+                      cover: false,
+                      keyboard: false,
+                      tag: true
+                  }
+              };
 
-          if (button === 0 && !event.ctrlKey) {
-              window.setTimeout(function() {
-                  tooltip.classed('leftclick', false);
-                  down[button] = undefined;  // delayed, for Windows
-              }, delay);
+              // Disable components requiring WebGL support
+              if (!Mapillary.isSupported() && Mapillary.isFallbackSupported()) {
+                  _mlyFallback = true;
+                  opts.component = {
+                      cover: false,
+                      direction: false,
+                      imagePlane: false,
+                      keyboard: false,
+                      mouse: false,
+                      sequence: false,
+                      tag: false,
+                      image: true,        // fallback
+                      navigation: true    // fallback
+                  };
+              }
 
-              dispatch$$1.call('click', this, 'left');
+              _mlyViewer = new Mapillary.Viewer('mly', clientId, null, opts);
+              _mlyViewer.on('nodechanged', nodeChanged);
+              _mlyViewer.on('bearingchanged', bearingChanged);
+              _mlyViewer.moveToKey(imageKey)
+                  .catch(function(e) { console.error('mly3', e); });  // eslint-disable-line no-console
+          }
 
-          } else if (button === 2) {
-              window.setTimeout(function() {
-                  tooltip.classed('rightclick', false);
-                  down[button] = undefined;  // delayed, for Windows
-              }, delay);
+          // nodeChanged: called after the viewer has changed images and is ready.
+          //
+          // There is some logic here to batch up clicks into a _mlyClicks array
+          // because the user might click on a lot of markers quickly and nodechanged
+          // may be called out of order asychronously.
+          //
+          // Clicks are added to the array in `selectedImage` and removed here.
+          //
+          function nodeChanged(node) {
+              if (!_mlyFallback) {
+                  _mlyViewer.getComponent('tag').removeAll();  // remove previous detections
+              }
 
-              dispatch$$1.call('click', this, 'right');
+              var clicks = _mlyClicks;
+              var index = clicks.indexOf(node.key);
+              var selectedKey = _mlySelectedImage && _mlySelectedImage.key;
 
-          } else {
-              window.setTimeout(function() {
-                  down[button] = undefined;  // delayed, for Windows
-              }, delay);
+              if (index > -1) {              // `nodechanged` initiated from clicking on a marker..
+                  clicks.splice(index, 1);   // remove the click
+                  // If `node.key` matches the current _mlySelectedImage, call `selectImage()`
+                  // one more time to update the detections and attribution..
+                  if (node.key === selectedKey) {
+                      that.selectImage(_mlySelectedImage, node.key, true);
+                  }
+              } else {             // `nodechanged` initiated from the Mapillary viewer controls..
+                  var loc = node.computedLatLon ? [node.computedLatLon.lon, node.computedLatLon.lat] : [node.latLon.lon, node.latLon.lat];
+                  context.map().centerEase(loc);
+                  that.selectImage(undefined, node.key, true);
+              }
           }
-      }
-
 
-      function contextmenu() {
-          event.preventDefault();
-          event.stopPropagation();
-          if (!down[2] && !down.menu) {
-              tooltip.classed('rightclick', true);
-              window.setTimeout(function() {
-                  tooltip.classed('rightclick', false);
-              }, minTime);
-              dispatch$$1.call('click', this, 'right');
+          function bearingChanged(e) {
+              dispatch$3.call('bearingChanged', undefined, e);
           }
-      }
-
-
-      var behavior = function(selection$$1) {
-          tooltip = selection$$1;
-          down = {};
+      },
 
-          select(window)
-              .on('keydown.intro', keydown)
-              .on('keyup.intro', keyup)
-              .on('mousedown.intro', mousedown)
-              .on('mouseup.intro', mouseup)
-              .on('contextmenu.intro', contextmenu);
-      };
 
+      // Pass the image datum itself in `d` or the `imageKey` string.
+      // This allows images to be selected from places that dont have access
+      // to the full image datum (like the street signs layer or the js viewer)
+      selectImage: function(d, imageKey, fromViewer) {
+          if (!d && imageKey) {
+              // If the user clicked on something that's not an image marker, we
+              // might get in here.. Cache lookup can fail, e.g. if the user
+              // clicked a streetsign, but images are loading slowly asynchronously.
+              // We'll try to carry on anyway if there is no datum.  There just
+              // might be a delay before user sees detections, captured_at, etc.
+              d = _mlyCache.images.forImageKey[imageKey];
+          }
 
-      behavior.off = function() {
-          select(window)
-              .on('keydown.intro', null)
-              .on('keyup.intro', null)
-              .on('mousedown.intro', null)
-              .on('mouseup.intro', null)
-              .on('contextmenu.intro', null);
+          _mlySelectedImage = d;
+          var viewer = select('#photoviewer');
+          if (!viewer.empty()) viewer.datum(d);
 
-          tooltip
-              .classed('leftclick', false)
-              .classed('rightclick', false);
-      };
+          imageKey = (d && d.key) || imageKey;
+          if (!fromViewer && imageKey) {
+              _mlyClicks.push(imageKey);
+          }
 
-      return utilRebind(behavior, dispatch$$1, 'on');
-  }
+          this.setStyles(null, true);
 
-  function uiIntroNavigation(context, reveal) {
-      var dispatch$$1 = dispatch('done');
-      var timeouts = [];
-      var hallId = 'n2061';
-      var townHall = [-85.63591, 41.94285];
-      var springStreetId = 'w397';
-      var springStreetEndId = 'n1834';
-      var springStreet = [-85.63582, 41.94255];
-      var onewayField = context.presets().field('oneway');
-      var maxspeedField = context.presets().field('maxspeed');
+          // if signs signs are shown, highlight the ones that appear in this image
+          d3_selectAll('.layer-mapillary-signs .icon-sign')
+              .classed('currentView', function(d) {
+                  return some(d.detections, function(detection) {
+                      return detection.image_key === imageKey;
+                  });
+              });
 
+          if (d) {
+              this.updateDetections(d);
+          }
 
-      var chapter = {
-          title: 'intro.navigation.title'
-      };
+          return this;
+      },
 
 
-      function timeout(f, t$$1) {
-          timeouts.push(window.setTimeout(f, t$$1));
-      }
+      getSelectedImage: function() {
+          return _mlySelectedImage;
+      },
 
 
-      function eventCancel() {
-          event.stopPropagation();
-          event.preventDefault();
-      }
+      getSequenceKeyForImage: function(d) {
+          var imageKey = d && d.key;
+          return imageKey && _mlyCache.sequences.forImageKey[imageKey];
+      },
 
 
-      function isTownHallSelected() {
-          var ids = context.selectedIDs();
-          return ids.length === 1 && ids[0] === hallId;
-      }
+      // Updates the currently highlighted sequence and selected bubble.
+      // Reset is only necessary when interacting with the viewport because
+      // this implicitly changes the currently selected bubble/sequence
+      setStyles: function(hovered, reset) {
+          if (reset) {  // reset all layers
+              d3_selectAll('.viewfield-group')
+                  .classed('highlighted', false)
+                  .classed('hovered', false)
+                  .classed('currentView', false);
 
+              d3_selectAll('.sequence')
+                  .classed('highlighted', false)
+                  .classed('currentView', false);
+          }
 
-      function dragMap() {
-          context.enter(modeBrowse(context));
-          context.history().reset('initial');
+          var hoveredImageKey = hovered && hovered.key;
+          var hoveredSequenceKey = this.getSequenceKeyForImage(hovered);
+          var hoveredLineString = hoveredSequenceKey && _mlyCache.sequences.lineString[hoveredSequenceKey];
+          var hoveredImageKeys = (hoveredLineString && hoveredLineString.properties.coordinateProperties.image_keys) || [];
 
-          var msec = transitionTime(townHall, context.map().center());
-          if (msec) { reveal(null, null, { duration: 0 }); }
-          context.map().centerZoomEase(townHall, 19, msec);
+          var viewer = select('#photoviewer');
+          var selected = viewer.empty() ? undefined : viewer.datum();
+          var selectedImageKey = selected && selected.key;
+          var selectedSequenceKey = this.getSequenceKeyForImage(selected);
+          var selectedLineString = selectedSequenceKey && _mlyCache.sequences.lineString[selectedSequenceKey];
+          var selectedImageKeys = (selectedLineString && selectedLineString.properties.coordinateProperties.image_keys) || [];
 
-          timeout(function() {
-              var centerStart = context.map().center();
+          // highlight sibling viewfields on either the selected or the hovered sequences
+          var highlightedImageKeys = union(hoveredImageKeys, selectedImageKeys);
 
-              reveal('#surface', t('intro.navigation.drag'));
-              context.map().on('drawn.intro', function() {
-                  reveal('#surface', t('intro.navigation.drag'), { duration: 0 });
-              });
+          d3_selectAll('.layer-mapillary-images .viewfield-group')
+              .classed('highlighted', function(d) { return highlightedImageKeys.indexOf(d.key) !== -1; })
+              .classed('hovered', function(d) { return d.key === hoveredImageKey; })
+              .classed('currentView', function(d) { return d.key === selectedImageKey; });
 
-              context.map().on('move.intro', function() {
-                  var centerNow = context.map().center();
-                  if (centerStart[0] !== centerNow[0] || centerStart[1] !== centerNow[1]) {
-                      context.map().on('move.intro', null);
-                      timeout(function() { continueTo(zoomMap); }, 3000);
-                  }
-              });
+          d3_selectAll('.layer-mapillary-images .sequence')
+              .classed('highlighted', function(d) { return d.properties.key === hoveredSequenceKey; })
+              .classed('currentView', function(d) { return d.properties.key === selectedSequenceKey; });
 
-          }, msec + 100);
+          // update viewfields if needed
+          d3_selectAll('.viewfield-group .viewfield')
+              .attr('d', viewfieldPath);
 
-          function continueTo(nextStep) {
-              context.map().on('move.intro drawn.intro', null);
-              nextStep();
+          function viewfieldPath() {
+              var d = this.parentNode.__data__;
+              if (d.pano && d.key !== selectedImageKey) {
+                  return 'M 8,13 m -10,0 a 10,10 0 1,0 20,0 a 10,10 0 1,0 -20,0';
+              } else {
+                  return 'M 6,9 C 8,8.4 8,8.4 10,9 L 16,-2 C 12,-5 4,-5 0,-2 z';
+              }
           }
-      }
 
+          return this;
+      },
 
-      function zoomMap() {
-          var zoomStart = context.map().zoom();
 
-          reveal('#surface',
-              t('intro.navigation.zoom', {
-                  plus: icon('#iD-icon-plus', 'pre-text'),
-                  minus: icon('#iD-icon-minus', 'pre-text')
-              })
-          );
+      updateDetections: function(d) {
+          if (!_mlyViewer || _mlyFallback) return;
 
-          context.map().on('drawn.intro', function() {
-              reveal('#surface',
-                  t('intro.navigation.zoom', {
-                      plus: icon('#iD-icon-plus', 'pre-text'),
-                      minus: icon('#iD-icon-minus', 'pre-text')
-                  }), { duration: 0 }
-              );
-          });
+          var imageKey = d && d.key;
+          if (!imageKey) return;
 
-          context.map().on('move.intro', function() {
-              if (context.map().zoom() !== zoomStart) {
-                  context.map().on('move.intro', null);
-                  timeout(function() { continueTo(features); }, 3000);
+          var detections = _mlyCache.image_detections.forImageKey[imageKey] || [];
+          detections.forEach(function(data) {
+              var tag = makeTag(data);
+              if (tag) {
+                  var tagComponent = _mlyViewer.getComponent('tag');
+                  tagComponent.add([tag]);
               }
           });
 
-          function continueTo(nextStep) {
-              context.map().on('move.intro drawn.intro', null);
-              nextStep();
-          }
-      }
-
-
-      function features() {
-          var onClick = function() { continueTo(pointsLinesAreas); };
-
-          reveal('#surface', t('intro.navigation.features'),
-              { buttonText: t('intro.ok'), buttonCallback: onClick }
-          );
+          function makeTag(data) {
+              var valueParts = data.value.split('--');
+              if (valueParts.length !== 3) return;
 
-          context.map().on('drawn.intro', function() {
-              reveal('#surface', t('intro.navigation.features'),
-                  { duration: 0, buttonText: t('intro.ok'), buttonCallback: onClick }
-              );
-          });
+              var text = valueParts[1].replace(/-/g, ' ');
+              var tag;
 
-          function continueTo(nextStep) {
-              context.map().on('drawn.intro', null);
-              nextStep();
-          }
-      }
+              // Currently only two shapes <Polygon|Point>
+              if (data.shape.type === 'Polygon') {
+                  var polygonGeometry = new Mapillary
+                      .TagComponent
+                      .PolygonGeometry(data.shape.coordinates[0]);
 
-      function pointsLinesAreas() {
-          var onClick = function() { continueTo(nodesWays); };
+                  tag = new Mapillary.TagComponent.OutlineTag(
+                      data.key,
+                      polygonGeometry,
+                      {
+                          text: text,
+                          textColor: 0xffff00,
+                          lineColor: 0xffff00,
+                          lineWidth: 2,
+                          fillColor: 0xffff00,
+                          fillOpacity: 0.3,
+                      }
+                  );
 
-          reveal('#surface', t('intro.navigation.points_lines_areas'),
-              { buttonText: t('intro.ok'), buttonCallback: onClick }
-          );
+              } else if (data.shape.type === 'Point') {
+                  var pointGeometry = new Mapillary
+                      .TagComponent
+                      .PointGeometry(data.shape.coordinates[0]);
 
-          context.map().on('drawn.intro', function() {
-              reveal('#surface', t('intro.navigation.points_lines_areas'),
-                  { duration: 0, buttonText: t('intro.ok'), buttonCallback: onClick }
-              );
-          });
+                  tag = new Mapillary.TagComponent.SpotTag(
+                      data.key,
+                      pointGeometry,
+                      {
+                          text: text,
+                          color: 0xffff00,
+                          textColor: 0xffff00
+                      }
+                  );
+              }
 
-          function continueTo(nextStep) {
-              context.map().on('drawn.intro', null);
-              nextStep();
+              return tag;
           }
-      }
-
-      function nodesWays() {
-          var onClick = function() { continueTo(clickTownHall); };
-
-          reveal('#surface', t('intro.navigation.nodes_ways'),
-              { buttonText: t('intro.ok'), buttonCallback: onClick }
-          );
+      },
 
-          context.map().on('drawn.intro', function() {
-              reveal('#surface', t('intro.navigation.nodes_ways'),
-                  { duration: 0, buttonText: t('intro.ok'), buttonCallback: onClick }
-              );
-          });
 
-          function continueTo(nextStep) {
-              context.map().on('drawn.intro', null);
-              nextStep();
-          }
+      cache: function() {
+          return _mlyCache;
       }
 
-      function clickTownHall() {
-          context.enter(modeBrowse(context));
-          context.history().reset('initial');
+  };
 
-          var entity = context.hasEntity(hallId);
-          if (!entity) return;
-          reveal(null, null, { duration: 0 });
-          context.map().centerZoomEase(entity.loc, 19, 500);
+  /**
+   * Performs a partial deep comparison between `object` and `source` to
+   * determine if `object` contains equivalent property values.
+   *
+   * **Note:** This method is equivalent to `_.matches` when `source` is
+   * partially applied.
+   *
+   * Partial comparisons will match empty array and empty object `source`
+   * values against any array or object value, respectively. See `_.isEqual`
+   * for a list of supported value comparisons.
+   *
+   * @static
+   * @memberOf _
+   * @since 3.0.0
+   * @category Lang
+   * @param {Object} object The object to inspect.
+   * @param {Object} source The object of property values to match.
+   * @returns {boolean} Returns `true` if `object` is a match, else `false`.
+   * @example
+   *
+   * var object = { 'a': 1, 'b': 2 };
+   *
+   * _.isMatch(object, { 'b': 2 });
+   * // => true
+   *
+   * _.isMatch(object, { 'b': 1 });
+   * // => false
+   */
+  function isMatch(object, source) {
+    return object === source || baseIsMatch(object, source, getMatchData(source));
+  }
 
-          timeout(function() {
-              var entity = context.hasEntity(hallId);
-              if (!entity) return;
-              var box = pointBox(entity.loc, context);
-              reveal(box, t('intro.navigation.click_townhall'));
+  /* Built-in method references for those with the same name as other `lodash` methods. */
+  var nativeMin$1 = Math.min;
 
-              context.map().on('move.intro drawn.intro', function() {
-                  var entity = context.hasEntity(hallId);
-                  if (!entity) return;
-                  var box = pointBox(entity.loc, context);
-                  reveal(box, t('intro.navigation.click_townhall'), { duration: 0 });
-              });
+  /**
+   * The base implementation of methods like `_.intersection`, without support
+   * for iteratee shorthands, that accepts an array of arrays to inspect.
+   *
+   * @private
+   * @param {Array} arrays The arrays to inspect.
+   * @param {Function} [iteratee] The iteratee invoked per element.
+   * @param {Function} [comparator] The comparator invoked per element.
+   * @returns {Array} Returns the new array of shared values.
+   */
+  function baseIntersection(arrays, iteratee, comparator) {
+    var includes = comparator ? arrayIncludesWith : arrayIncludes,
+        length = arrays[0].length,
+        othLength = arrays.length,
+        othIndex = othLength,
+        caches = Array(othLength),
+        maxLength = Infinity,
+        result = [];
 
-              context.on('enter.intro', function() {
-                  if (isTownHallSelected()) continueTo(selectedTownHall);
-              });
+    while (othIndex--) {
+      var array = arrays[othIndex];
+      if (othIndex && iteratee) {
+        array = arrayMap(array, baseUnary(iteratee));
+      }
+      maxLength = nativeMin$1(array.length, maxLength);
+      caches[othIndex] = !comparator && (iteratee || (length >= 120 && array.length >= 120))
+        ? new SetCache(othIndex && array)
+        : undefined;
+    }
+    array = arrays[0];
 
-          }, 550);  // after centerZoomEase
+    var index = -1,
+        seen = caches[0];
 
-          context.history().on('change.intro', function() {
-              if (!context.hasEntity(hallId)) {
-                  continueTo(clickTownHall);
-              }
-          });
+    outer:
+    while (++index < length && result.length < maxLength) {
+      var value = array[index],
+          computed = iteratee ? iteratee(value) : value;
 
-          function continueTo(nextStep) {
-              context.on('enter.intro', null);
-              context.map().on('move.intro drawn.intro', null);
-              context.history().on('change.intro', null);
-              nextStep();
+      value = (comparator || value !== 0) ? value : 0;
+      if (!(seen
+            ? cacheHas(seen, computed)
+            : includes(result, computed, comparator)
+          )) {
+        othIndex = othLength;
+        while (--othIndex) {
+          var cache = caches[othIndex];
+          if (!(cache
+                ? cacheHas(cache, computed)
+                : includes(arrays[othIndex], computed, comparator))
+              ) {
+            continue outer;
           }
+        }
+        if (seen) {
+          seen.push(computed);
+        }
+        result.push(value);
       }
+    }
+    return result;
+  }
+
+  /**
+   * Casts `value` to an empty array if it's not an array like object.
+   *
+   * @private
+   * @param {*} value The value to inspect.
+   * @returns {Array|Object} Returns the cast array-like object.
+   */
+  function castArrayLikeObject(value) {
+    return isArrayLikeObject(value) ? value : [];
+  }
 
+  /**
+   * Creates an array of unique values that are included in all given arrays
+   * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
+   * for equality comparisons. The order and references of result values are
+   * determined by the first array.
+   *
+   * @static
+   * @memberOf _
+   * @since 0.1.0
+   * @category Array
+   * @param {...Array} [arrays] The arrays to inspect.
+   * @returns {Array} Returns the new array of intersecting values.
+   * @example
+   *
+   * _.intersection([2, 1], [2, 3]);
+   * // => [2]
+   */
+  var intersection = baseRest(function(arrays) {
+    var mapped = arrayMap(arrays, castArrayLikeObject);
+    return (mapped.length && mapped[0] === arrays[0])
+      ? baseIntersection(mapped)
+      : [];
+  });
 
-      function selectedTownHall() {
-          if (!isTownHallSelected()) return clickTownHall();
+  /** Used as references for various `Number` constants. */
+  var INFINITY$4 = 1 / 0;
 
-          var entity = context.hasEntity(hallId);
-          if (!entity) return clickTownHall();
+  /**
+   * Recursively flattens `array`.
+   *
+   * @static
+   * @memberOf _
+   * @since 3.0.0
+   * @category Array
+   * @param {Array} array The array to flatten.
+   * @returns {Array} Returns the new flattened array.
+   * @example
+   *
+   * _.flattenDeep([1, [2, [3, [4]], 5]]);
+   * // => [1, 2, 3, 4, 5]
+   */
+  function flattenDeep(array) {
+    var length = array == null ? 0 : array.length;
+    return length ? baseFlatten(array, INFINITY$4) : [];
+  }
+
+  /**
+   * This method is like `_.uniq` except that it accepts `comparator` which
+   * is invoked to compare elements of `array`. The order of result values is
+   * determined by the order they occur in the array.The comparator is invoked
+   * with two arguments: (arrVal, othVal).
+   *
+   * @static
+   * @memberOf _
+   * @since 4.0.0
+   * @category Array
+   * @param {Array} array The array to inspect.
+   * @param {Function} [comparator] The comparator invoked per element.
+   * @returns {Array} Returns the new duplicate free array.
+   * @example
+   *
+   * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 2 }];
+   *
+   * _.uniqWith(objects, _.isEqual);
+   * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]
+   */
+  function uniqWith(array, comparator) {
+    comparator = typeof comparator == 'function' ? comparator : undefined;
+    return (array && array.length) ? baseUniq(array, undefined, comparator) : [];
+  }
+
+  /**
+   * Look for roads that can be connected to other roads with a short extension
+   */
+  function validationAlmostJunction() {
+      var type = 'almost_junction';
 
-          var box = pointBox(entity.loc, context);
-          var onClick = function() { continueTo(editorTownHall); };
 
-          reveal(box, t('intro.navigation.selected_townhall'),
-              { buttonText: t('intro.ok'), buttonCallback: onClick }
-          );
+      function isHighway(entity) {
+          return entity.type === 'way' && entity.tags.highway && entity.tags.highway !== 'no';
+      }
 
-          context.map().on('move.intro drawn.intro', function() {
-              var entity = context.hasEntity(hallId);
-              if (!entity) return;
-              var box = pointBox(entity.loc, context);
-              reveal(box, t('intro.navigation.selected_townhall'),
-                  { duration: 0, buttonText: t('intro.ok'), buttonCallback: onClick }
-              );
-          });
+      function isNoexit(node) {
+          return node.tags.noexit && node.tags.noexit === 'yes';
+      }
 
-          context.history().on('change.intro', function() {
-              if (!context.hasEntity(hallId)) {
-                  continueTo(clickTownHall);
+      function isExtendableCandidate(node, way, graph) {
+          if (isNoexit(node) || graph.parentWays(node).length !== 1) {
+              return false;
+          }
+          var occurences = 0;
+          for (var index in way.nodes) {
+              if (way.nodes[index] === node.id) {
+                  occurences += 1;
+                  if (occurences > 1) {
+                      return false;
+                  }
               }
-          });
-
-          function continueTo(nextStep) {
-              context.map().on('move.intro drawn.intro', null);
-              context.history().on('change.intro', null);
-              nextStep();
           }
+          return true;
       }
 
+      function findConnectableEndNodesByExtension(way, graph, tree) {
 
-      function editorTownHall() {
-          if (!isTownHallSelected()) return clickTownHall();
-
-          // disallow scrolling
-          select('.inspector-wrap').on('wheel.intro', eventCancel);
-
-          var onClick = function() { continueTo(presetTownHall); };
-
-          reveal('.entity-editor-pane',
-              t('intro.navigation.editor_townhall'),
-              { buttonText: t('intro.ok'), buttonCallback: onClick }
-          );
-
-          context.on('exit.intro', function() {
-              continueTo(clickTownHall);
-          });
+          var results = [];
 
-          context.history().on('change.intro', function() {
-              if (!context.hasEntity(hallId)) {
-                  continueTo(clickTownHall);
+          if (way.isClosed()) return results;
+
+          var nidFirst = way.nodes[0];
+          var nidLast = way.nodes[way.nodes.length - 1];
+          var nodeFirst = graph.entity(nidFirst);
+          var nodeLast = graph.entity(nidLast);
+
+          var testNodes;
+
+          if (isExtendableCandidate(nodeFirst, way, graph)) {
+              var connNearFirst = canConnectByExtend(way, 0, graph, tree);
+              if (connNearFirst !== null) {
+                  testNodes = cloneDeep(graph.childNodes(way));
+                  testNodes[0].loc = connNearFirst.cross_loc;
+                  // don't flag issue if connecting the ways would cause self-intersection
+                  if (!geoHasSelfIntersections(testNodes, nodeFirst.id)) {
+                      results.push({
+                          node: nodeFirst,
+                          wid: connNearFirst.wid,
+                          edge: connNearFirst.edge,
+                          cross_loc: connNearFirst.cross_loc
+                      });
+                  }
               }
-          });
+          }
 
-          function continueTo(nextStep) {
-              context.on('exit.intro', null);
-              context.history().on('change.intro', null);
-              select('.inspector-wrap').on('wheel.intro', null);
-              nextStep();
+          if (isExtendableCandidate(nodeLast, way, graph)) {
+              var connNearLast = canConnectByExtend(way, way.nodes.length - 1, graph, tree);
+              if (connNearLast !== null) {
+                  testNodes = cloneDeep(graph.childNodes(way));
+                  testNodes[testNodes.length-1].loc = connNearLast.cross_loc;
+                  // don't flag issue if connecting the ways would cause self-intersection
+                  if (!geoHasSelfIntersections(testNodes, nodeLast.id)) {
+                      results.push({
+                          node: nodeLast,
+                          wid: connNearLast.wid,
+                          edge: connNearLast.edge,
+                          cross_loc: connNearLast.cross_loc
+                      });
+                  }
+              }
           }
+          return results;
       }
 
 
-      function presetTownHall() {
-          if (!isTownHallSelected()) return clickTownHall();
-
-          // reset pane, in case user happened to change it..
-          select('.inspector-wrap .panewrap').style('right', '0%');
-          // disallow scrolling
-          select('.inspector-wrap').on('wheel.intro', eventCancel);
-
-          // preset match, in case the user happened to change it.
-          var entity = context.entity(context.selectedIDs()[0]);
-          var preset = context.presets().match(entity, context.graph());
-
-          var onClick = function() { continueTo(fieldsTownHall); };
-
-          context.on('exit.intro', function() {
-              continueTo(clickTownHall);
-          });
+      function canConnectByExtend(way, endNodeIdx, graph, tree) {
+          var EXTEND_TH_METERS = 5;
+          var tipNid = way.nodes[endNodeIdx];  // the 'tip' node for extension point
+          var midNid = endNodeIdx === 0 ? way.nodes[1] : way.nodes[way.nodes.length - 2];  // the other node of the edge
+          var tipNode = graph.entity(tipNid);
+          var midNode = graph.entity(midNid);
+          var lon = tipNode.loc[0];
+          var lat = tipNode.loc[1];
+          var lon_range = geoMetersToLon(EXTEND_TH_METERS, lat) / 2;
+          var lat_range = geoMetersToLat(EXTEND_TH_METERS) / 2;
+          var queryExtent = geoExtent([
+              [lon - lon_range, lat - lat_range],
+              [lon + lon_range, lat + lat_range]
+          ]);
 
-          context.history().on('change.intro', function() {
-              if (!context.hasEntity(hallId)) {
-                  continueTo(clickTownHall);
+          // first, extend the edge of [midNode -> tipNode] by EXTEND_TH_METERS and find the "extended tip" location
+          var edgeLen = geoSphericalDistance(midNode.loc, tipNode.loc);
+          var t = EXTEND_TH_METERS / edgeLen + 1.0;
+          var extTipLoc = geoVecInterp(midNode.loc, tipNode.loc, t);
+
+          // then, check if the extension part [tipNode.loc -> extTipLoc] intersects any other ways
+          var intersected = tree.intersects(queryExtent, graph);
+          for (var i = 0; i < intersected.length; i++) {
+              if (!isHighway(intersected[i]) || intersected[i].id === way.id) continue;
+
+              var way2 = intersected[i];
+              for (var j = 0; j < way2.nodes.length - 1; j++) {
+                  var nA = graph.entity(way2.nodes[j]);
+                  var nB = graph.entity(way2.nodes[j + 1]);
+                  var crossLoc = geoLineIntersection([tipNode.loc, extTipLoc], [nA.loc, nB.loc]);
+                  if (crossLoc !== null) {
+                      return {
+                          wid: way2.id,
+                          edge: [nA.id, nB.id],
+                          cross_loc: crossLoc
+                      };
+                  }
               }
-          });
-
-          reveal('.inspector-body .preset-list-item.inspector-inner',
-              t('intro.navigation.preset_townhall', { preset: preset.name() }),
-              { buttonText: t('intro.ok'), buttonCallback: onClick }
-          );
-
-          function continueTo(nextStep) {
-              context.on('exit.intro', null);
-              context.history().on('change.intro', null);
-              select('.inspector-wrap').on('wheel.intro', null);
-              nextStep();
           }
+          return null;
       }
 
 
-      function fieldsTownHall() {
-          if (!isTownHallSelected()) return clickTownHall();
+      var validation = function(endHighway, context) {
+          if (!isHighway(endHighway)) return [];
 
-          // reset pane, in case user happened to change it..
-          select('.inspector-wrap .panewrap').style('right', '0%');
-          // disallow scrolling
-          select('.inspector-wrap').on('wheel.intro', eventCancel);
+          var graph = context.graph();
+          var tree = context.history().tree();
+          var issues = [];
+
+          var extendableNodeInfos = findConnectableEndNodesByExtension(endHighway, graph, tree);
+          extendableNodeInfos.forEach(function(extendableNodeInfo) {
+              var node = extendableNodeInfo.node;
+              var edgeHighway = graph.entity(extendableNodeInfo.wid);
+
+              var fixes = [new validationIssueFix({
+                  icon: 'iD-icon-abutment',
+                  title: t('issues.fix.connect_features.title'),
+                  onClick: function() {
+                      var endNode = this.issue.entities[1];
+                      var targetEdge = this.issue.info.edge;
+                      var crossLoc = this.issue.info.cross_loc;
+                      var edgeNodes = [context.graph().entity(targetEdge[0]), context.graph().entity(targetEdge[1])];
+                      var closestNodeInfo = geoSphericalClosestNode(edgeNodes, crossLoc);
+
+                      var annotation = t('issues.fix.connect_almost_junction.annotation');
+                      // already a point nearby, just connect to that
+                      if (closestNodeInfo.distance < 0.75) {
+                          context.perform(
+                              actionMergeNodes([closestNodeInfo.node.id, endNode.id], closestNodeInfo.node.loc),
+                              annotation
+                          );
+                      // else add the end node to the edge way
+                      } else {
+                          context.perform(
+                              actionAddMidpoint({loc: crossLoc, edge: targetEdge}, endNode),
+                              annotation
+                          );
+                      }
+                  }
+              })];
+
+              if (Object.keys(node.tags).length === 0) {
+                  // node has no tags, suggest noexit fix
+                  fixes.push(new validationIssueFix({
+                      icon: 'maki-barrier',
+                      title: t('issues.fix.tag_as_disconnected.title'),
+                      onClick: function() {
+                          var nodeID = this.issue.entities[1].id;
+                          context.perform(
+                              actionChangeTags(nodeID, { noexit: 'yes' }),
+                              t('issues.fix.tag_as_disconnected.annotation')
+                          );
+                      }
+                  }));
+              }
 
-          var onClick = function() { continueTo(closeTownHall); };
+              issues.push(new validationIssue({
+                  type: type,
+                  severity: 'warning',
+                  message: t('issues.almost_junction.message', {
+                      feature: utilDisplayLabel(endHighway, context),
+                      feature2: utilDisplayLabel(edgeHighway, context)
+                  }),
+                  tooltip: t('issues.almost_junction.highway-highway.tip'),
+                  entities: [endHighway, node, edgeHighway],
+                  loc: extendableNodeInfo.node.loc,
+                  info: {
+                      edge: extendableNodeInfo.edge,
+                      cross_loc: extendableNodeInfo.cross_loc
+                  },
+                  fixes: fixes
+              }));
+          });
 
-          reveal('.inspector-body .preset-editor',
-              t('intro.navigation.fields_townhall'),
-              { buttonText: t('intro.ok'), buttonCallback: onClick }
-          );
+          return issues;
+      };
 
-          context.on('exit.intro', function() {
-              continueTo(clickTownHall);
-          });
+      validation.type = type;
 
-          context.history().on('change.intro', function() {
-              if (!context.hasEntity(hallId)) {
-                  continueTo(clickTownHall);
-              }
-          });
+      return validation;
+  }
 
-          function continueTo(nextStep) {
-              context.on('exit.intro', null);
-              context.history().on('change.intro', null);
-              select('.inspector-wrap').on('wheel.intro', null);
-              nextStep();
+  function validationCrossingWays() {
+      var type = 'crossing_ways';
+
+      // returns the way or its parent relation, whichever has a useful feature type
+      function getFeatureWithFeatureTypeTagsForWay(way, graph) {
+          if (getFeatureTypeForTags(way.tags) === null) {
+              // if the way doesn't match a feature type, check is parent relations
+              var parentRels = graph.parentRelations(way);
+              for (var i = 0; i < parentRels.length; i++) {
+                  var rel = parentRels[i];
+                  if (getFeatureTypeForTags(rel.tags) !== null) {
+                      return rel;
+                  }
+              }
           }
+          return way;
       }
 
 
-      function closeTownHall() {
-          if (!isTownHallSelected()) return clickTownHall();
+      function hasTag(tags, key) {
+          return tags[key] !== undefined && tags[key] !== 'no';
+      }
 
-          var selector$$1 = '.entity-editor-pane button.preset-close svg use';
-          var href = select(selector$$1).attr('href') || '#iD-icon-close';
+      function tagsImplyIndoors(tags) {
+          return hasTag(tags, 'level') || tags.highway === 'corridor';
+      }
 
-          reveal('.entity-editor-pane',
-              t('intro.navigation.close_townhall', { button: icon(href, 'pre-text') })
-          );
+      function allowsStructures(featureType) {
+          return allowsBridge(featureType) || allowsTunnel(featureType);
+      }
+      function allowsBridge(featureType) {
+          return featureType === 'highway' || featureType === 'railway' || featureType === 'waterway';
+      }
+      function allowsTunnel(featureType) {
+          return featureType === 'highway' || featureType === 'railway' || featureType === 'waterway';
+      }
+      function canCover(featureType) {
+          return featureType === 'building';
+      }
 
-          context.on('exit.intro', function() {
-              continueTo(searchStreet);
-          });
 
-          context.history().on('change.intro', function() {
-              // update the close icon in the tooltip if the user edits something.
-              var selector$$1 = '.entity-editor-pane button.preset-close svg use';
-              var href = select(selector$$1).attr('href') || '#iD-icon-close';
+      function getFeatureTypeForCrossingCheck(way, graph) {
+          var tags = getFeatureWithFeatureTypeTagsForWay(way, graph).tags;
+          return getFeatureTypeForTags(tags);
+      }
 
-              reveal('.entity-editor-pane',
-                  t('intro.navigation.close_townhall', { button: icon(href, 'pre-text') }),
-                  { duration: 0 }
-              );
-          });
 
-          function continueTo(nextStep) {
-              context.on('exit.intro', null);
-              context.history().on('change.intro', null);
-              nextStep();
-          }
-      }
+      // only validate certain waterway features
+      var waterways = ['canal', 'ditch', 'drain', 'river', 'stream'];
+      // ignore certain highway and railway features
+      var ignoredHighways = ['rest_area', 'services'];
+      var ignoredRailways = ['train_wash'];
 
 
-      function searchStreet() {
-          context.enter(modeBrowse(context));
-          context.history().reset('initial');  // ensure spring street exists
+      function getFeatureTypeForTags(tags) {
+          if (hasTag(tags, 'building')) return 'building';
 
-          var msec = transitionTime(springStreet, context.map().center());
-          if (msec) { reveal(null, null, { duration: 0 }); }
-          context.map().centerZoomEase(springStreet, 19, msec);  // ..and user can see it
+          // don't check non-building areas
+          if (hasTag(tags, 'area')) return null;
 
-          timeout(function() {
-              reveal('.search-header input',
-                  t('intro.navigation.search_street', { name: t('intro.graph.name.spring-street') })
-              );
+          if (hasTag(tags, 'highway') && ignoredHighways.indexOf(tags.highway) === -1) return 'highway';
+          if (hasTag(tags, 'railway') && ignoredRailways.indexOf(tags.railway) === -1) return 'railway';
+          if (hasTag(tags, 'waterway') && waterways.indexOf(tags.waterway) !== -1) return 'waterway';
 
-              select('.search-header input')
-                  .on('keyup.intro', checkSearchResult);
-          }, msec + 100);
+          return null;
       }
 
 
-      function checkSearchResult() {
-          var first = select('.feature-list-item:nth-child(0n+2)');  // skip "No Results" item
-          var firstName = first.select('.entity-name');
-          var name = t('intro.graph.name.spring-street');
-
-          if (!firstName.empty() && firstName.text() === name) {
-              reveal(first.node(),
-                  t('intro.navigation.choose_street', { name: name }),
-                  { duration: 300 }
-              );
+      function isLegitCrossing(way1, featureType1, way2, featureType2) {
+          var tags1 = way1.tags;
+          var tags2 = way2.tags;
 
-              context.on('exit.intro', function() {
-                  continueTo(selectedStreet);
-              });
+          // assume 0 by default
+          var level1 = tags1.level || '0';
+          var level2 = tags2.level || '0';
 
-              select('.search-header input')
-                  .on('keydown.intro', eventCancel, true)
-                  .on('keyup.intro', null);
+          if (tagsImplyIndoors(tags1) && tagsImplyIndoors(tags2) && level1 !== level2) {
+              // assume features don't interact if they're indoor on different levels
+              return true;
           }
 
-          function continueTo(nextStep) {
-              context.on('exit.intro', null);
-              select('.search-header input')
-                  .on('keydown.intro', null)
-                  .on('keyup.intro', null);
-              nextStep();
+          // assume 0 by default; don't use way.layer() since we account for structures here
+          var layer1 = tags1.layer || '0';
+          var layer2 = tags2.layer || '0';
+
+          if (allowsBridge(featureType1) && allowsBridge(featureType2)) {
+              if (hasTag(tags1, 'bridge') && !hasTag(tags2, 'bridge')) return true;
+              if (!hasTag(tags1, 'bridge') && hasTag(tags2, 'bridge')) return true;
+              // crossing bridges must use different layers
+              if (hasTag(tags1, 'bridge') && hasTag(tags2, 'bridge') && layer1 !== layer2) return true;
+          } else if (allowsBridge(featureType1) && hasTag(tags1, 'bridge')) return true;
+          else if (allowsBridge(featureType2) && hasTag(tags2, 'bridge')) return true;
+
+          if (allowsTunnel(featureType1) && allowsTunnel(featureType2)) {
+              if (hasTag(tags1, 'tunnel') && !hasTag(tags2, 'tunnel')) return true;
+              if (!hasTag(tags1, 'tunnel') && hasTag(tags2, 'tunnel')) return true;
+              // crossing tunnels must use different layers
+              if (hasTag(tags1, 'tunnel') && hasTag(tags2, 'tunnel') && layer1 !== layer2) return true;
+          } else if (allowsTunnel(featureType1) && hasTag(tags1, 'tunnel')) return true;
+          else if (allowsTunnel(featureType2) && hasTag(tags2, 'tunnel')) return true;
+
+          if (canCover(featureType1) && canCover(featureType2)) {
+              if (hasTag(tags1, 'covered') && !hasTag(tags2, 'covered')) return true;
+              if (!hasTag(tags1, 'covered') && hasTag(tags2, 'covered')) return true;
+              // crossing covered features that can themselves cover must use different layers
+              if (hasTag(tags1, 'covered') && hasTag(tags2, 'covered') && layer1 !== layer2) return true;
+          } else if (canCover(featureType1) && hasTag(tags2, 'covered')) return true;
+          else if (canCover(featureType2) && hasTag(tags1, 'covered')) return true;
+
+          if (!allowsStructures(featureType1) && !allowsStructures(featureType2)) {
+              // if no structures are applicable, the layers must be different
+              if (layer1 !== layer2) return true;
           }
+          return false;
       }
 
 
-      function selectedStreet() {
-          if (!context.hasEntity(springStreetEndId) || !context.hasEntity(springStreetId)) {
-              return searchStreet();
-          }
-
-          var onClick = function() { continueTo(editorStreet); };
-          var entity = context.entity(springStreetEndId);
-          var box = pointBox(entity.loc, context);
-          box.height = 500;
+      // highway values for which we shouldn't recommend connecting to waterways
+      var highwaysDisallowingFords = [
+          'motorway', 'motorway_link', 'trunk', 'trunk_link',
+          'primary', 'primary_link', 'secondary', 'secondary_link'
+      ];
+      var pathHighways = [
+          'path', 'footway', 'cycleway', 'bridleway', 'pedestrian', 'steps', 'corridor'
+      ];
 
-          reveal(box,
-              t('intro.navigation.selected_street', { name: t('intro.graph.name.spring-street') }),
-              { duration: 600, buttonText: t('intro.ok'), buttonCallback: onClick }
-          );
+      function tagsForConnectionNodeIfAllowed(entity1, entity2) {
+          var featureType1 = getFeatureTypeForTags(entity1.tags);
+          var featureType2 = getFeatureTypeForTags(entity2.tags);
+          if (featureType1 === featureType2) {
+              if (featureType1 === 'highway') {
+                  var entity1IsPath = pathHighways.indexOf(entity1.tags.highway) !== -1;
+                  var entity2IsPath = pathHighways.indexOf(entity2.tags.highway) !== -1;
+                  if ((entity1IsPath || entity2IsPath) && entity1IsPath !== entity2IsPath) {
+                      // one feature is a path but not both, use a crossing
+
+                      var pathFeature = entity1IsPath ? entity1 : entity2;
+                      if (pathFeature.tags.highway === 'footway' &&
+                          pathFeature.tags.footway === 'crossing' &&
+                          ['marked', 'unmarked'].indexOf(pathFeature.tags.crossing) !== -1) {
+                          // if the path is a crossing, match the crossing type
+                          return { highway: 'crossing', crossing: pathFeature.tags.crossing };
+                      }
+                      return { highway: 'crossing' };
+                  }
+                  return {};
+              }
+              if (featureType1 === 'waterway') return {};
+              if (featureType1 === 'railway') return {};
 
-          timeout(function() {
-              context.map().on('move.intro drawn.intro', function() {
-                  var entity = context.hasEntity(springStreetEndId);
-                  if (!entity) return;
-                  var box = pointBox(entity.loc, context);
-                  box.height = 500;
-                  reveal(box,
-                      t('intro.navigation.selected_street', { name: t('intro.graph.name.spring-street') }),
-                      { duration: 0, buttonText: t('intro.ok'), buttonCallback: onClick }
-                  );
-              });
-          }, 600);  // after reveal.
+          } else {
+              var featureTypes = [featureType1, featureType2];
+              if (featureTypes.indexOf('highway') !== -1) {
+                  if (featureTypes.indexOf('railway') !== -1) {
+                      if (pathHighways.indexOf(entity1.tags.highway) !== -1 ||
+                          pathHighways.indexOf(entity2.tags.highway) !== -1) {
+                          // path-rail connections use this tag
+                          return { railway: 'crossing' };
+                      } else {
+                          // road-rail connections use this tag
+                          return { railway: 'level_crossing' };
+                      }
+                  }
 
-          context.on('enter.intro', function(mode) {
-              if (!context.hasEntity(springStreetId)) {
-                  return continueTo(searchStreet);
-              }
-              var ids = context.selectedIDs();
-              if (mode.id !== 'select' || !ids.length || ids[0] !== springStreetId) {
-                  // keep Spring Street selected..
-                  context.enter(modeSelect(context, [springStreetId]));
-              }
-          });
+                  if (featureTypes.indexOf('waterway') !== -1) {
+                      // do not allow fords on structures
+                      if (hasTag(entity1.tags, 'tunnel') && hasTag(entity2.tags, 'tunnel')) return null;
+                      if (hasTag(entity1.tags, 'bridge') && hasTag(entity2.tags, 'bridge')) return null;
 
-          context.history().on('change.intro', function() {
-              if (!context.hasEntity(springStreetEndId) || !context.hasEntity(springStreetId)) {
-                  timeout(function() {
-                      continueTo(searchStreet);
-                  }, 300);  // after any transition (e.g. if user deleted intersection)
+                      if (highwaysDisallowingFords.indexOf(entity1.tags.highway) !== -1 ||
+                          highwaysDisallowingFords.indexOf(entity2.tags.highway) !== -1) {
+                          // do not allow fords on major highways
+                          return null;
+                      }
+                      return { ford: 'yes' };
+                  }
               }
-          });
-
-          function continueTo(nextStep) {
-              context.map().on('move.intro drawn.intro', null);
-              context.on('enter.intro', null);
-              context.history().on('change.intro', null);
-              nextStep();
           }
+          return null;
       }
 
 
-      function editorStreet() {
-          var selector$$1 = '.entity-editor-pane button.preset-close svg use';
-          var href = select(selector$$1).attr('href') || '#iD-icon-close';
+      function findCrossingsByWay(way1, graph, tree) {
+
+          var edgeCrossInfos = [];
+          if (way1.type !== 'way') return edgeCrossInfos;
+
+          var way1FeatureType = getFeatureTypeForCrossingCheck(way1, graph);
+          if (way1FeatureType === null) return edgeCrossInfos;
+
+          var checkedSingleCrossingWays = {};
+
+          // declare vars ahead of time to reduce garbage collection
+          var i, j, nodeIndex;
+          var extent;
+          var n1, n2, nA, nB;
+          var segment1, segment2;
+          var oneOnly;
+          var intersected, way2, way2FeatureType, way2Nodes;
+          var way1Nodes = graph.childNodes(way1);
+          for (i = 0; i < way1Nodes.length - 1; i++) {
+              n1 = way1Nodes[i];
+              n2 = way1Nodes[i + 1];
+              extent = geoExtent([
+                  [
+                      Math.min(n1.loc[0], n2.loc[0]),
+                      Math.min(n1.loc[1], n2.loc[1])
+                  ],
+                  [
+                      Math.max(n1.loc[0], n2.loc[0]),
+                      Math.max(n1.loc[1], n2.loc[1])
+                  ]
+              ]);
 
-          reveal('.entity-editor-pane',
-              t('intro.navigation.editor_street', {
-                  button: icon(href, 'pre-text'),
-                  field1: onewayField.label(),
-                  field2: maxspeedField.label()
-              })
-          );
+              intersected = tree.intersects(extent, graph);
+              for (j = 0; j < intersected.length; j++) {
+                  way2 = intersected[j];
 
-          context.on('exit.intro', function() {
-              continueTo(play);
-          });
+                  if (way2.type !== 'way') continue;
 
-          context.history().on('change.intro', function() {
-              // update the close icon in the tooltip if the user edits something.
-              var selector$$1 = '.entity-editor-pane button.preset-close svg use';
-              var href = select(selector$$1).attr('href') || '#iD-icon-close';
+                  // skip if this way was already checked and only one issue is needed
+                  if (checkedSingleCrossingWays[way2.id]) continue;
 
-              reveal('.entity-editor-pane',
-                  t('intro.navigation.editor_street', {
-                      button: icon(href, 'pre-text'),
-                      field1: onewayField.label().toLowerCase(),
-                      field2: maxspeedField.label().toLowerCase()
-                  }), { duration: 0 }
-              );
-          });
+                  // don't check for self-intersection in this validation
+                  if (way2.id === way1.id) continue;
 
-          function continueTo(nextStep) {
-              context.on('exit.intro', null);
-              context.history().on('change.intro', null);
-              nextStep();
+                  // only check crossing highway, waterway, building, and railway
+                  way2FeatureType = getFeatureTypeForCrossingCheck(way2, graph);
+                  if (way2FeatureType === null ||
+                      isLegitCrossing(way1, way1FeatureType, way2, way2FeatureType)) {
+                      continue;
+                  }
+
+                  // create only one issue for building crossings
+                  oneOnly = way1FeatureType === 'building' || way2FeatureType === 'building';
+                  segment1 = [n1.loc, n2.loc];
+
+                  way2Nodes = graph.childNodes(way2);
+                  for (nodeIndex = 0; nodeIndex < way2Nodes.length - 1; nodeIndex++) {
+                      nA = way2Nodes[nodeIndex];
+                      nB = way2Nodes[nodeIndex + 1];
+                      if (nA.id === n1.id || nA.id === n2.id ||
+                          nB.id === n1.id || nB.id === n2.id) {
+                          // n1 or n2 is a connection node; skip
+                          continue;
+                      }
+                      segment2 = [nA.loc, nB.loc];
+                      var point = geoLineIntersection(segment1, segment2);
+                      if (point) {
+                          edgeCrossInfos.push({
+                              ways: [way1, way2],
+                              featureTypes: [way1FeatureType, way2FeatureType],
+                              edges: [[n1.id, n2.id], [nA.id, nB.id]],
+                              crossPoint: point
+                          });
+                          if (oneOnly) {
+                              checkedSingleCrossingWays[way2.id] = true;
+                              break;
+                          }
+                      }
+                  }
+              }
           }
+          return edgeCrossInfos;
       }
 
 
-      function play() {
-          dispatch$$1.call('done');
-          reveal('#id-container',
-              t('intro.navigation.play', { next: t('intro.points.title') }), {
-                  tooltipBox: '.intro-nav-wrap .chapter-point',
-                  buttonText: t('intro.ok'),
-                  buttonCallback: function() { reveal('#id-container'); }
-              }
-          );
+      function waysToCheck(entity, context) {
+          if (!getFeatureTypeForTags(entity.tags)) {
+              return [];
+          }
+          if (entity.type === 'way') {
+              return [entity];
+          } else if (entity.type === 'relation' &&
+              entity.isMultipolygon() &&
+              // only check multipolygons if they are buildings
+              hasTag(entity.tags, 'building')) {
+              return entity.members.reduce(function(array, member) {
+                  if (member.type === 'way' &&
+                      //(member.role === 'outer' || member.role === 'inner') &&
+                      context.hasEntity(member.id)) {
+                      var entity = context.entity(member.id);
+                      array.push(entity);
+                  }
+                  return array;
+              }, []);
+          }
+          return [];
       }
 
+      var validation = function(entity, context) {
+          var graph = context.graph();
+          var tree = context.history().tree();
 
-      chapter.enter = function() {
-          dragMap();
+          var ways = waysToCheck(entity, context);
+
+          var issues = [];
+          for (var wayIndex in ways) {
+              var crossings = findCrossingsByWay(ways[wayIndex], graph, tree);
+              for (var crossingIndex in crossings) {
+                  issues.push(createIssue(crossings[crossingIndex], context));
+              }
+          }
+          return issues;
       };
 
 
-      chapter.exit = function() {
-          timeouts.forEach(window.clearTimeout);
-          context.on('enter.intro exit.intro', null);
-          context.map().on('move.intro drawn.intro', null);
-          context.history().on('change.intro', null);
-          select('.inspector-wrap').on('wheel.intro', null);
-          select('.search-header input').on('keydown.intro keyup.intro', null);
-      };
+      function createIssue(crossing, context) {
+          var graph = context.graph();
 
+          // use the entities with the tags that define the feature type
+          var entities = crossing.ways.sort(function(entity1, entity2) {
+              var type1 = getFeatureTypeForCrossingCheck(entity1, graph);
+              var type2 = getFeatureTypeForCrossingCheck(entity2, graph);
+              if (type1 === type2) {
+                  return utilDisplayLabel(entity1, context) > utilDisplayLabel(entity2, context);
+              } else if (type1 === 'waterway') {
+                  return true;
+              } else if (type2 === 'waterway') {
+                  return false;
+              }
+              return type1 < type2;
+          });
+          entities = entities.map(function(way) {
+              return getFeatureWithFeatureTypeTagsForWay(way, graph);
+          });
 
-      chapter.restart = function() {
-          chapter.exit();
-          chapter.enter();
-      };
+          var connectionTags = tagsForConnectionNodeIfAllowed(entities[0], entities[1]);
 
+          var featureType1 = crossing.featureTypes[0];
+          var featureType2 = crossing.featureTypes[1];
 
-      return utilRebind(chapter, dispatch$$1, 'on');
-  }
+          var isCrossingIndoors = tagsImplyIndoors(entities[0].tags) && tagsImplyIndoors(entities[1].tags);
+          var isCrossingTunnels = allowsTunnel(featureType1) && hasTag(entities[0].tags, 'tunnel') &&
+                                  allowsTunnel(featureType2) && hasTag(entities[1].tags, 'tunnel');
+          var isCrossingBridges = allowsBridge(featureType1) && hasTag(entities[0].tags, 'bridge') &&
+                                  allowsBridge(featureType2) && hasTag(entities[1].tags, 'bridge');
 
-  function uiIntroPoint(context, reveal) {
-      var dispatch$$1 = dispatch('done');
-      var timeouts = [];
-      var intersection = [-85.63279, 41.94394];
-      var building = [-85.632422, 41.944045];
-      var cafePreset = context.presets().item('amenity/cafe');
-      var _pointID = null;
+          var crossingTypeID;
 
+          if (isCrossingIndoors) {
+              crossingTypeID = 'indoor-indoor';
+          } else if (isCrossingTunnels) {
+              crossingTypeID = 'tunnel-tunnel';
+          } else if (isCrossingBridges) {
+              crossingTypeID = 'bridge-bridge';
+          } else {
+              crossingTypeID = crossing.featureTypes.sort().join('-');
+          }
+          if (connectionTags && (isCrossingIndoors || isCrossingTunnels || isCrossingBridges)) {
+              crossingTypeID += '_connectable';
+          }
 
-      var chapter = {
-          title: 'intro.points.title'
-      };
+          var messageDict = {
+              feature: utilDisplayLabel(entities[0], context),
+              feature2: utilDisplayLabel(entities[1], context)
+          };
 
+          var fixes = [];
+          if (connectionTags) {
+              fixes.push(new validationIssueFix({
+                  icon: 'iD-icon-crossing',
+                  title: t('issues.fix.connect_features.title'),
+                  onClick: function() {
+                      var loc = this.issue.loc;
+                      var connectionTags = this.issue.info.connectionTags;
+                      var edges = this.issue.info.edges;
 
-      function timeout(f, t$$1) {
-          timeouts.push(window.setTimeout(f, t$$1));
-      }
+                      context.perform(
+                          function actionConnectCrossingWays(graph) {
+                              // create the new node for the points
+                              var node = osmNode({ loc: loc, tags: connectionTags });
+                              graph = graph.replace(node);
+
+                              var nodesToMerge = [node.id];
+                              var mergeThresholdInMeters = 0.75;
+
+                              edges.forEach(function(edge) {
+                                  var edgeNodes = [graph.entity(edge[0]), graph.entity(edge[1])];
+                                  var closestNodeInfo = geoSphericalClosestNode(edgeNodes, loc);
+                                  // if there is already a point nearby, use that
+                                  if (closestNodeInfo.distance < mergeThresholdInMeters) {
+                                      nodesToMerge.push(closestNodeInfo.node.id);
+                                  // else add the new node to the way
+                                  } else {
+                                      graph = actionAddMidpoint({loc: loc, edge: edge}, node)(graph);
+                                  }
+                              });
 
+                              if (nodesToMerge.length > 1) {
+                                  // if we're using nearby nodes, merge them with the new node
+                                  graph = actionMergeNodes(nodesToMerge, loc)(graph);
+                              }
 
-      function revealEditMenu(loc, text, options) {
-          var rect = context.surfaceRect();
-          var point$$1 = context.curtainProjection(loc);
-          var pad = 40;
-          var width = 250 + (2 * pad);
-          var height = 250;
-          var startX = rect.left + point$$1[0];
-          var left = (textDirection === 'rtl') ? (startX - width + pad) : (startX - pad);
-          var box = {
-              left: left,
-              top: point$$1[1] + rect.top - 60,
-              width: width,
-              height: height
-          };
-          reveal(box, text, options);
+                              return graph;
+                          },
+                          t('issues.fix.connect_crossing_features.annotation')
+                      );
+                  }
+              }));
+          }
+          var useFixIcon = 'iD-icon-layers';
+          var useFixID;
+          if (isCrossingIndoors) {
+              useFixID = 'use_different_levels';
+          } else if (isCrossingTunnels || isCrossingBridges) {
+              useFixID = 'use_different_layers';
+          // don't recommend bridges for waterways even though they're okay
+          } else if ((allowsBridge(featureType1) && featureType1 !== 'waterway') ||
+                  (allowsBridge(featureType2) && featureType2 !== 'waterway')) {
+              useFixID = 'use_bridge_or_tunnel';
+              useFixIcon = 'maki-bridge';
+          } else if (allowsTunnel(featureType1) || allowsTunnel(featureType2)) {
+              useFixID = 'use_tunnel';
+          } else {
+              useFixID = 'use_different_layers';
+          }
+          fixes.push(new validationIssueFix({
+              icon: useFixIcon,
+              title: t('issues.fix.' + useFixID + '.title')
+          }));
+          fixes.push(new validationIssueFix({
+              icon: 'iD-operation-move',
+              title: t('issues.fix.reposition_features.title')
+          }));
+          return new validationIssue({
+              type: type,
+              severity: 'warning',
+              message: t('issues.crossing_ways.message', messageDict),
+              tooltip: t('issues.crossing_ways.'+crossingTypeID+'.tip'),
+              entities: entities,
+              info: { edges: crossing.edges, connectionTags: connectionTags },
+              loc: crossing.crossPoint,
+              fixes: fixes
+          });
       }
 
+      validation.type = type;
 
-      function eventCancel() {
-          event.stopPropagation();
-          event.preventDefault();
-      }
+      return validation;
+  }
 
+  function validationDeprecatedTag() {
+      var type = 'deprecated_tag';
+
+
+      var validation = function(entity, context) {
+          var issues = [];
+          var deprecatedTagsArray = entity.deprecatedTags();
+          if (deprecatedTagsArray.length > 0) {
+              for (var deprecatedTagIndex in deprecatedTagsArray) {
+                  var deprecatedTags = deprecatedTagsArray[deprecatedTagIndex];
+                  var labelTags = clone(deprecatedTags.old);
+                  for (var key in labelTags) {
+                      if (labelTags[key] === '*') {
+                          // show the user the actual tag, like color=red instead of color=*
+                          labelTags[key] = entity.tags[key];
+                      }
+                  }
+                  var tagsLabel = utilTagText({ tags: labelTags });
+                  var featureLabel = utilDisplayLabel(entity, context);
+                  var isCombo = Object.keys(deprecatedTags.old).length > 1;
+                  var messageObj = { feature: featureLabel };
+                  if (isCombo) {
+                      messageObj.tags = tagsLabel;
+                  } else {
+                      messageObj.tag = tagsLabel;
+                  }
+                  var tagMessageID = isCombo ? 'combination' : 'single';
+                  issues.push(new validationIssue({
+                      type: type,
+                      severity: 'warning',
+                      message: t('issues.deprecated_tag.' + tagMessageID + '.message', messageObj),
+                      tooltip: t('issues.deprecated_tag.tip'),
+                      entities: [entity],
+                      hash: tagsLabel,
+                      info: {
+                          oldTags: deprecatedTags.old,
+                          replaceTags: deprecatedTags.replace
+                      },
+                      fixes: [
+                          new validationIssueFix({
+                              icon: 'iD-icon-up',
+                              title: t('issues.fix.' + (isCombo ? 'upgrade_tag_combo' : 'upgrade_tag') + '.title'),
+                              onClick: function() {
+                                  var entity = this.issue.entities[0];
+                                  var tags = clone(entity.tags);
+                                  var replaceTags = this.issue.info.replaceTags;
+                                  var oldTags = this.issue.info.oldTags;
+                                  var fixTextID = Object.keys(oldTags).length > 1 ? 'upgrade_tag_combo' : 'upgrade_tag';
+                                  var transferValue;
+                                  for (var oldTagKey in oldTags) {
+                                      if (oldTags[oldTagKey] === '*') {
+                                          transferValue = tags[oldTagKey];
+                                      }
+                                      delete tags[oldTagKey];
+                                  }
+                                  for (var replaceKey in replaceTags) {
+                                      var replaceValue = replaceTags[replaceKey];
+                                      if (replaceValue === '*') {
+                                          if (tags[replaceKey]) {
+                                              // any value is okay and there already
+                                              // is one, so don't update it
+                                              continue;
+                                          } else {
+                                              // otherwise assume `yes` is okay
+                                              tags[replaceKey] = 'yes';
+                                          }
+                                      } else if (replaceValue === '$1') {
+                                          tags[replaceKey] = transferValue;
+                                      } else {
+                                          tags[replaceKey] = replaceValue;
+                                      }
+                                  }
+                                  context.perform(
+                                      actionChangeTags(entity.id, tags),
+                                      t('issues.fix.' + fixTextID + '.annotation')
+                                  );
+                              }
+                          }),
+                          new validationIssueFix({
+                              icon: 'iD-operation-delete',
+                              title: t('issues.fix.' + (isCombo ? 'remove_tags' : 'remove_tag') + '.title'),
+                              onClick: function() {
+                                  var entity = this.issue.entities[0];
+                                  var tags = clone(entity.tags);
+                                  var oldTags = this.issue.info.oldTags;
+                                  for (var key in oldTags) {
+                                      delete tags[key];
+                                  }
+                                  var fixTextID = Object.keys(oldTags).length > 1 ? 'remove_deprecated_tag_combo' : 'remove_deprecated_tag';
+                                  context.perform(
+                                      actionChangeTags(entity.id, tags),
+                                      t('issues.fix.' + fixTextID + '.annotation')
+                                  );
+                              }
+                          })
+                      ]
+                  }));
+              }
+          }
 
-      function addPoint() {
-          context.enter(modeBrowse(context));
-          context.history().reset('initial');
+          return issues;
+      };
 
-          var msec = transitionTime(intersection, context.map().center());
-          if (msec) { reveal(null, null, { duration: 0 }); }
-          context.map().centerZoomEase(intersection, 19, msec);
+      validation.type = type;
 
-          timeout(function() {
-              var tooltip = reveal('button.add-point',
-                  t('intro.points.add_point', { button: icon('#iD-icon-point', 'pre-text') }));
+      return validation;
+  }
 
-              _pointID = null;
+  function operationCircularize(selectedIDs, context) {
+      var entityId = selectedIDs[0],
+          entity = context.entity(entityId),
+          extent = entity.extent(context.graph()),
+          geometry = context.geometry(entityId),
+          action = actionCircularize(entityId, context.projection);
 
-              tooltip.selectAll('.tooltip-inner')
-                  .insert('svg', 'span')
-                  .attr('class', 'tooltip-illustration')
-                  .append('use')
-                  .attr('xlink:href', '#iD-graphic-points');
 
-              context.on('enter.intro', function(mode) {
-                  if (mode.id !== 'add-point') return;
-                  continueTo(placePoint);
-              });
-          }, msec + 100);
+      var operation = function() {
+          context.perform(action, operation.annotation());
+      };
 
-          function continueTo(nextStep) {
-              context.on('enter.intro', null);
-              nextStep();
-          }
-      }
+
+      operation.available = function() {
+          return selectedIDs.length === 1 &&
+              entity.type === 'way' &&
+              uniq(entity.nodes).length > 1;
+      };
 
 
-      function placePoint() {
-          if (context.mode().id !== 'add-point') {
-              return chapter.restart();
+      operation.disabled = function() {
+          var reason;
+          if (extent.percentContainedIn(context.extent()) < 0.8) {
+              reason = 'too_large';
+          } else if (context.hasHiddenConnections(entityId)) {
+              reason = 'connected_to_hidden';
           }
+          return action.disabled(context.graph()) || reason;
+      };
 
-          var pointBox$$1 = pad$1(building, 150, context);
-          reveal(pointBox$$1, t('intro.points.place_point'));
 
-          context.map().on('move.intro drawn.intro', function() {
-              pointBox$$1 = pad$1(building, 150, context);
-              reveal(pointBox$$1, t('intro.points.place_point'), { duration: 0 });
-          });
+      operation.tooltip = function() {
+          var disable = operation.disabled();
+          return disable ?
+              t('operations.circularize.' + disable) :
+              t('operations.circularize.description.' + geometry);
+      };
 
-          context.on('enter.intro', function(mode) {
-              if (mode.id !== 'select') return chapter.restart();
-              _pointID = context.mode().selectedIDs()[0];
-              continueTo(searchPreset);
-          });
 
-          function continueTo(nextStep) {
-              context.map().on('move.intro drawn.intro', null);
-              context.on('enter.intro', null);
-              nextStep();
-          }
-      }
+      operation.annotation = function() {
+          return t('operations.circularize.annotation.' + geometry);
+      };
 
 
-      function searchPreset() {
-          if (context.mode().id !== 'select' || !_pointID || !context.hasEntity(_pointID)) {
-              return addPoint();
-          }
+      operation.id = 'circularize';
+      operation.keys = [t('operations.circularize.key')];
+      operation.title = t('operations.circularize.title');
+      operation.behavior = behaviorOperation(context).which(operation);
 
-          // disallow scrolling
-          select('.inspector-wrap').on('wheel.intro', eventCancel);
+      return operation;
+  }
+
+  function operationContinue(selectedIDs, context) {
+      var graph = context.graph(),
+          entities = selectedIDs.map(function(id) { return graph.entity(id); }),
+          geometries = assignIn({ line: [], vertex: [] },
+              groupBy(entities, function(entity) { return entity.geometry(graph); })),
+          vertex = geometries.vertex[0];
+
+
+      function candidateWays() {
+          return graph.parentWays(vertex).filter(function(parent) {
+              return parent.geometry(graph) === 'line' &&
+                  !parent.isClosed() &&
+                  parent.affix(vertex.id) &&
+                  (geometries.line.length === 0 || geometries.line[0] === parent);
+          });
+      }
 
-          select('.preset-search-input')
-              .on('keydown.intro', null)
-              .on('keyup.intro', checkPresetSearch);
 
-          reveal('.preset-search-input',
-              t('intro.points.search_cafe', { preset: cafePreset.name() })
+      var operation = function() {
+          var candidate = candidateWays()[0];
+          context.enter(
+              modeDrawLine(context, candidate.id, context.graph(), context.graph(), candidate.affix(vertex.id), true)
           );
+      };
 
-          context.on('enter.intro', function(mode) {
-              if (!_pointID || !context.hasEntity(_pointID)) {
-                  return continueTo(addPoint);
-              }
 
-              var ids = context.selectedIDs();
-              if (mode.id !== 'select' || !ids.length || ids[0] !== _pointID) {
-                  // keep the user's point selected..
-                  context.enter(modeSelect(context, [_pointID]));
+      operation.available = function() {
+          return geometries.vertex.length === 1 && geometries.line.length <= 1 &&
+              !context.features().hasHiddenConnections(vertex, context.graph());
+      };
 
-                  // disallow scrolling
-                  select('.inspector-wrap').on('wheel.intro', eventCancel);
 
-                  select('.preset-search-input')
-                      .on('keydown.intro', null)
-                      .on('keyup.intro', checkPresetSearch);
+      operation.disabled = function() {
+          var candidates = candidateWays();
+          if (candidates.length === 0)
+              return 'not_eligible';
+          if (candidates.length > 1)
+              return 'multiple';
+      };
 
-                  reveal('.preset-search-input',
-                      t('intro.points.search_cafe', { preset: cafePreset.name() })
-                  );
 
-                  context.history().on('change.intro', null);
-              }
-          });
+      operation.tooltip = function() {
+          var disable = operation.disabled();
+          return disable ?
+              t('operations.continue.' + disable) :
+              t('operations.continue.description');
+      };
 
 
-          function checkPresetSearch() {
-              var first = select('.preset-list-item:first-child');
+      operation.annotation = function() {
+          return t('operations.continue.annotation.line');
+      };
 
-              if (first.classed('preset-amenity-cafe')) {
-                  select('.preset-search-input')
-                      .on('keydown.intro', eventCancel, true)
-                      .on('keyup.intro', null);
 
-                  reveal(first.select('.preset-list-button').node(),
-                      t('intro.points.choose_cafe', { preset: cafePreset.name() }),
-                      { duration: 300 }
-                  );
+      operation.id = 'continue';
+      operation.keys = [t('operations.continue.key')];
+      operation.title = t('operations.continue.title');
+      operation.behavior = behaviorOperation(context).which(operation);
 
-                  context.history().on('change.intro', function() {
-                      continueTo(aboutFeatureEditor);
-                  });
-              }
-          }
+      return operation;
+  }
 
-          function continueTo(nextStep) {
-              context.on('enter.intro', null);
-              context.history().on('change.intro', null);
-              select('.inspector-wrap').on('wheel.intro', null);
-              select('.preset-search-input').on('keydown.intro keyup.intro', null);
-              nextStep();
-          }
-      }
+  function operationDelete(selectedIDs, context) {
+      var multi = (selectedIDs.length === 1 ? 'single' : 'multiple'),
+          action = actionDeleteMultiple(selectedIDs),
+          extent = selectedIDs.reduce(function(extent, id) {
+                  return extent.extend(context.entity(id).extent(context.graph()));
+              }, geoExtent());
 
 
-      function aboutFeatureEditor() {
-          if (context.mode().id !== 'select' || !_pointID || !context.hasEntity(_pointID)) {
-              return addPoint();
-          }
+      var operation = function() {
+          var nextSelectedID;
+          var nextSelectedLoc;
 
-          timeout(function() {
-              reveal('.entity-editor-pane', t('intro.points.feature_editor'), {
-                  tooltipClass: 'intro-points-describe',
-                  buttonText: t('intro.ok'),
-                  buttonCallback: function() { continueTo(addName); }
-              });
-          }, 400);
+          if (selectedIDs.length === 1) {
+              var id = selectedIDs[0],
+                  entity = context.entity(id),
+                  geometry = context.geometry(id),
+                  parents = context.graph().parentWays(entity),
+                  parent = parents[0];
 
-          context.on('exit.intro', function() {
-              // if user leaves select mode here, just continue with the tutorial.
-              continueTo(reselectPoint);
-          });
+              // Select the next closest node in the way.
+              if (geometry === 'vertex') {
+                  var nodes = parent.nodes,
+                      i = nodes.indexOf(id);
 
-          function continueTo(nextStep) {
-              context.on('exit.intro', null);
-              nextStep();
+                  if (i === 0) {
+                      i++;
+                  } else if (i === nodes.length - 1) {
+                      i--;
+                  } else {
+                      var a = geoSphericalDistance(entity.loc, context.entity(nodes[i - 1]).loc),
+                          b = geoSphericalDistance(entity.loc, context.entity(nodes[i + 1]).loc);
+                      i = a < b ? i - 1 : i + 1;
+                  }
+
+                  nextSelectedID = nodes[i];
+                  nextSelectedLoc = context.entity(nextSelectedID).loc;
+              }
           }
-      }
 
+          context.perform(action, operation.annotation());
 
-      function addName() {
-          if (context.mode().id !== 'select' || !_pointID || !context.hasEntity(_pointID)) {
-              return addPoint();
+          if (nextSelectedID && nextSelectedLoc) {
+              if (context.hasEntity(nextSelectedID)) {
+                  context.enter(modeSelect(context, [nextSelectedID]).follow(true));
+              } else {
+                  context.map().centerEase(nextSelectedLoc);
+                  context.enter(modeBrowse(context));
+              }
+          } else {
+              context.enter(modeBrowse(context));
           }
 
-          // reset pane, in case user happened to change it..
-          select('.inspector-wrap .panewrap').style('right', '0%');
+      };
 
-          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.
-              var entity = context.entity(_pointID);
-              if (entity.tags.name) {
-                  var tooltip = reveal('.entity-editor-pane', t('intro.points.add_name'), {
-                      tooltipClass: 'intro-points-describe',
-                      buttonText: t('intro.ok'),
-                      buttonCallback: function() { continueTo(addCloseEditor); }
-                  });
-                  tooltip.select('.instruction').style('display', 'none');
 
-              } else {
-                  reveal('.entity-editor-pane', t('intro.points.add_name'),
-                      { tooltipClass: 'intro-points-describe' }
-                  );
-              }
-          }, 400);
+      operation.available = function() {
+          return true;
+      };
 
-          context.history().on('change.intro', function() {
-              continueTo(addCloseEditor);
-          });
 
-          context.on('exit.intro', function() {
-              // if user leaves select mode here, just continue with the tutorial.
-              continueTo(reselectPoint);
-          });
+      operation.disabled = function() {
+          var reason;
+          if (extent.area() && extent.percentContainedIn(context.extent()) < 0.8) {
+              reason = 'too_large';
+          } else if (some(selectedIDs, context.hasHiddenConnections)) {
+              reason = 'connected_to_hidden';
+          } else if (some(selectedIDs, protectedMember)) {
+              reason = 'part_of_relation';
+          } else if (some(selectedIDs, incompleteRelation)) {
+              reason = 'incomplete_relation';
+          }
+          return reason;
 
-          function continueTo(nextStep) {
-              context.on('exit.intro', null);
-              context.history().on('change.intro', null);
-              nextStep();
+          function incompleteRelation(id) {
+              var entity = context.entity(id);
+              return entity.type === 'relation' && !entity.isComplete(context.graph());
           }
-      }
 
+          function protectedMember(id) {
+              var entity = context.entity(id);
+              if (entity.type !== 'way') return false;
 
-      function addCloseEditor() {
-          // reset pane, in case user happened to change it..
-          select('.inspector-wrap .panewrap').style('right', '0%');
+              var parents = context.graph().parentRelations(entity);
+              for (var i = 0; i < parents.length; i++) {
+                  var parent = parents[i],
+                      type = parent.tags.type,
+                      role = parent.memberById(id).role || 'outer';
+                  if (type === 'route' || type === 'boundary' || (type === 'multipolygon' && role === 'outer')) {
+                      return true;
+                  }
+              }
+              return false;
+          }
 
-          var selector$$1 = '.entity-editor-pane button.preset-close svg use';
-          var href = select(selector$$1).attr('href') || '#iD-icon-close';
+      };
 
-          context.on('exit.intro', function() {
-              continueTo(reselectPoint);
-          });
 
-          reveal('.entity-editor-pane',
-              t('intro.points.add_close', { button: icon(href, 'pre-text') })
-          );
+      operation.tooltip = function() {
+          var disable = operation.disabled();
+          return disable ?
+              t('operations.delete.' + disable + '.' + multi) :
+              t('operations.delete.description' + '.' + multi);
+      };
 
-          function continueTo(nextStep) {
-              context.on('exit.intro', null);
-              nextStep();
-          }
-      }
 
+      operation.annotation = function() {
+          return selectedIDs.length === 1 ?
+              t('operations.delete.annotation.' + context.geometry(selectedIDs[0])) :
+              t('operations.delete.annotation.multiple', { n: selectedIDs.length });
+      };
 
-      function reselectPoint() {
-          if (!_pointID) return chapter.restart();
-          var entity = context.hasEntity(_pointID);
-          if (!entity) return chapter.restart();
 
-          // make sure it's still a cafe, in case user somehow changed it..
-          var oldPreset = context.presets().match(entity, context.graph());
-          context.replace(actionChangePreset(_pointID, oldPreset, cafePreset));
+      operation.id = 'delete';
+      operation.keys = [uiCmd('⌘⌫'), uiCmd('⌘⌦'), uiCmd('⌦')];
+      operation.title = t('operations.delete.title');
+      operation.behavior = behaviorOperation(context).which(operation);
 
-          context.enter(modeBrowse(context));
+      return operation;
+  }
 
-          var msec = transitionTime(entity.loc, context.map().center());
-          if (msec) { reveal(null, null, { duration: 0 }); }
-          context.map().centerEase(entity.loc, msec);
+  function operationDisconnect(selectedIDs, context) {
+      var vertices = filter(selectedIDs, function(entityId) {
+          return context.geometry(entityId) === 'vertex';
+      });
 
-          timeout(function() {
-              var box = pointBox(entity.loc, context);
-              reveal(box, t('intro.points.reselect'), { duration: 600 });
+      var entityId = vertices[0],
+          action = actionDisconnect(entityId);
 
-              timeout(function() {
-                  context.map().on('move.intro drawn.intro', function() {
-                      var entity = context.hasEntity(_pointID);
-                      if (!entity) return chapter.restart();
-                      var box = pointBox(entity.loc, context);
-                      reveal(box, t('intro.points.reselect'), { duration: 0 });
-                  });
-              }, 600); // after reveal..
+      if (selectedIDs.length > 1) {
+          action.limitWays(without(selectedIDs, entityId));
+      }
 
-              context.on('enter.intro', function(mode) {
-                  if (mode.id !== 'select') return;
-                  continueTo(updatePoint);
-              });
 
-          }, msec + 100);
+      var operation = function() {
+          context.perform(action, operation.annotation());
+      };
 
-          function continueTo(nextStep) {
-              context.map().on('move.intro drawn.intro', null);
-              context.on('enter.intro', null);
-              nextStep();
-          }
-      }
 
+      operation.available = function() {
+          return vertices.length === 1;
+      };
 
-      function updatePoint() {
-          if (context.mode().id !== 'select' || !_pointID || !context.hasEntity(_pointID)) {
-              return continueTo(reselectPoint);
-          }
 
-          // reset pane, in case user happened to untag the point..
-          select('.inspector-wrap .panewrap').style('right', '0%');
+      operation.disabled = function() {
+          var reason;
+          if (some(selectedIDs, context.hasHiddenConnections)) {
+              reason = 'connected_to_hidden';
+          }
+          return action.disabled(context.graph()) || reason;
+      };
 
-          context.on('exit.intro', function() {
-              continueTo(reselectPoint);
-          });
 
-          context.history().on('change.intro', function() {
-              continueTo(updateCloseEditor);
-          });
+      operation.tooltip = function() {
+          var disable = operation.disabled();
+          return disable ?
+              t('operations.disconnect.' + disable) :
+              t('operations.disconnect.description');
+      };
 
-          timeout(function() {
-              reveal('.entity-editor-pane', t('intro.points.update'),
-                  { tooltipClass: 'intro-points-describe' }
-              );
-          }, 400);
 
-          function continueTo(nextStep) {
-              context.on('exit.intro', null);
-              context.history().on('change.intro', null);
-              nextStep();
-          }
-      }
+      operation.annotation = function() {
+          return t('operations.disconnect.annotation');
+      };
 
 
-      function updateCloseEditor() {
-          if (context.mode().id !== 'select' || !_pointID || !context.hasEntity(_pointID)) {
-              return continueTo(reselectPoint);
-          }
+      operation.id = 'disconnect';
+      operation.keys = [t('operations.disconnect.key')];
+      operation.title = t('operations.disconnect.title');
+      operation.behavior = behaviorOperation(context).which(operation);
 
-          // reset pane, in case user happened to change it..
-          select('.inspector-wrap .panewrap').style('right', '0%');
+      return operation;
+  }
 
-          context.on('exit.intro', function() {
-              continueTo(rightClickPoint);
-          });
+  function operationMerge(selectedIDs, context) {
 
-          timeout(function() {
-              reveal('.entity-editor-pane',
-                  t('intro.points.update_close', { button: icon('#iD-icon-apply', 'pre-text') })
-              );
-          }, 500);
+      function updatePresetTags(newGraph, ids) {
+          var id = ids[0];
+          var newEntity = newGraph.hasEntity(id);
 
-          function continueTo(nextStep) {
-              context.on('exit.intro', null);
-              nextStep();
-          }
+          if (!newEntity) return;
+          var newPreset = context.presets().match(newEntity, newGraph);
+          context.replace(actionChangePreset(id, null, newPreset), operation.annotation());
       }
 
 
-      function rightClickPoint() {
-          if (!_pointID) return chapter.restart();
-          var entity = context.hasEntity(_pointID);
-          if (!entity) return chapter.restart();
+      var join = actionJoin(selectedIDs);
+      var merge = actionMerge(selectedIDs);
+      var mergePolygon = actionMergePolygon(selectedIDs);
+      var mergeNodes = actionMergeNodes(selectedIDs);
 
-          context.enter(modeBrowse(context));
 
-          var box = pointBox(entity.loc, context);
-          reveal(box, t('intro.points.rightclick'), { duration: 600 });
+      var operation = function() {
+          var doUpdateTags;
+          var action;
 
-          timeout(function() {
-              context.map().on('move.intro drawn.intro', function() {
-                  var entity = context.hasEntity(_pointID);
-                  if (!entity) return chapter.restart();
-                  var box = pointBox(entity.loc, context);
-                  reveal(box, t('intro.points.rightclick'), { duration: 0 });
-              });
-          }, 600); // after reveal
+          if (!join.disabled(context.graph())) {
+              doUpdateTags = false;
+              action = join;
+          } else if (!merge.disabled(context.graph())) {
+              doUpdateTags = true;
+              action = merge;
+          } else if (!mergePolygon.disabled(context.graph())) {
+              doUpdateTags = false;
+              action = mergePolygon;
+          } else {
+              doUpdateTags = true;
+              action = mergeNodes;
+          }
 
-          context.on('enter.intro', function(mode) {
-              if (mode.id !== 'select') return;
-              var ids = context.selectedIDs();
-              if (ids.length !== 1 || ids[0] !== _pointID) return;
+          context.perform(action, operation.annotation());
 
-              timeout(function() {
-                  var node = selectMenuItem('delete').node();
-                  if (!node) return;
-                  continueTo(enterDelete);
-              }, 300);  // after menu visible
+          var ids = selectedIDs.filter(function(id) {
+              var entity = context.hasEntity(id);
+              return entity && entity.type !== 'node';
           });
 
-          function continueTo(nextStep) {
-              context.on('enter.intro', null);
-              context.map().on('move.intro drawn.intro', null);
-              nextStep();
+          // if we merged tags, rematch preset to update tags if necessary (#3851)
+          if (doUpdateTags) {
+              updatePresetTags(context.graph(), ids);
           }
-      }
 
+          context.enter(modeSelect(context, ids));
+      };
 
-      function enterDelete() {
-          if (!_pointID) return chapter.restart();
-          var entity = context.hasEntity(_pointID);
-          if (!entity) return chapter.restart();
 
-          var node = selectMenuItem('delete').node();
-          if (!node) { return continueTo(rightClickPoint); }
+      operation.available = function() {
+          return selectedIDs.length >= 2;
+      };
 
-          revealEditMenu(entity.loc,
-              t('intro.points.delete', { button: icon('#iD-operation-delete', 'pre-text') })
-          );
 
-          timeout(function() {
-              context.map().on('move.intro drawn.intro', function() {
-                  revealEditMenu(entity.loc,
-                      t('intro.points.delete', { button: icon('#iD-operation-delete', 'pre-text') }),
-                      { duration: 0}
-                  );
-              });
-          }, 300); // after menu visible
+      operation.disabled = function() {
+          return join.disabled(context.graph()) &&
+              merge.disabled(context.graph()) &&
+              mergePolygon.disabled(context.graph()) &&
+              mergeNodes.disabled(context.graph());
+      };
 
-          context.on('exit.intro', function() {
-              if (!_pointID) return chapter.restart();
-              var entity = context.hasEntity(_pointID);
-              if (entity) return continueTo(rightClickPoint);  // point still exists
-          });
 
-          context.history().on('change.intro', function(changed) {
-              if (changed.deleted().length) {
-                  continueTo(undo);
-              }
-          });
+      operation.tooltip = function() {
+          var j = join.disabled(context.graph());          // 'not_eligible', 'not_adjacent', 'restriction', 'conflicting_tags'
+          var m = merge.disabled(context.graph());         // 'not_eligible'
+          var p = mergePolygon.disabled(context.graph());  // 'not_eligible', 'incomplete_relation'
+          var n = mergeNodes.disabled(context.graph());    // 'not_eligible', 'relation', 'restriction'
 
-          function continueTo(nextStep) {
-              context.map().on('move.intro drawn.intro', null);
-              context.history().on('change.intro', null);
-              context.on('exit.intro', null);
-              nextStep();
-          }
-      }
+          // disabled for one of various reasons
+          if (j && m && p && n) {
+              if (j === 'restriction' || n === 'restriction') {
+                  return t('operations.merge.restriction',
+                      { relation: context.presets().item('type/restriction').name() });
 
+              } else if (p === 'incomplete_relation') {
+                  return t('operations.merge.incomplete_relation');
 
-      function undo() {
-          context.history().on('change.intro', function() {
-              continueTo(play);
-          });
+              } else if (n === 'relation') {
+                  return t('operations.merge.relation');
 
-          var iconName = '#iD-icon-' + (textDirection === 'rtl' ? 'redo' : 'undo');
-          reveal('#bar button.undo-button',
-              t('intro.points.undo', { button: icon(iconName, 'pre-text') })
-          );
+              } else {
+                  return t('operations.merge.' + j);
+              }
 
-          function continueTo(nextStep) {
-              context.history().on('change.intro', null);
-              nextStep();
+          } else {
+              return t('operations.merge.description');
           }
-      }
+      };
 
 
-      function play() {
-          dispatch$$1.call('done');
-          reveal('#id-container',
-              t('intro.points.play', { next: t('intro.areas.title') }), {
-                  tooltipBox: '.intro-nav-wrap .chapter-area',
-                  buttonText: t('intro.ok'),
-                  buttonCallback: function() { reveal('#id-container'); }
-              }
-          );
-      }
+      operation.annotation = function() {
+          return t('operations.merge.annotation', { n: selectedIDs.length });
+      };
 
 
-      chapter.enter = function() {
-          addPoint();
-      };
+      operation.id = 'merge';
+      operation.keys = [t('operations.merge.key')];
+      operation.title = t('operations.merge.title');
+      operation.behavior = behaviorOperation(context).which(operation);
+
+      return operation;
+  }
 
+  function operationMove(selectedIDs, context) {
+      var multi = (selectedIDs.length === 1 ? 'single' : 'multiple');
+      var extent = selectedIDs.reduce(function(extent, id) {
+          return extent.extend(context.entity(id).extent(context.graph()));
+      }, geoExtent());
 
-      chapter.exit = function() {
-          timeouts.forEach(window.clearTimeout);
-          context.on('enter.intro exit.intro', null);
-          context.map().on('move.intro drawn.intro', null);
-          context.history().on('change.intro', null);
-          select('.inspector-wrap').on('wheel.intro', eventCancel);
-          select('.preset-search-input').on('keydown.intro keyup.intro', null);
+
+      var operation = function() {
+          context.enter(modeMove(context, selectedIDs));
       };
 
 
-      chapter.restart = function() {
-          chapter.exit();
-          chapter.enter();
+      operation.available = function() {
+          return selectedIDs.length > 1 ||
+              context.entity(selectedIDs[0]).type !== 'node';
       };
 
 
-      return utilRebind(chapter, dispatch$$1, 'on');
-  }
+      operation.disabled = function() {
+          var reason;
+          if (extent.area() && extent.percentContainedIn(context.extent()) < 0.8) {
+              reason = 'too_large';
+          } else if (some(selectedIDs, context.hasHiddenConnections)) {
+              reason = 'connected_to_hidden';
+          } else if (some(selectedIDs, incompleteRelation)) {
+              reason = 'incomplete_relation';
+          }
+          return reason;
 
-  function uiIntroArea(context, reveal) {
-      var dispatch$$1 = dispatch('done');
-      var playground = [-85.63552, 41.94159];
-      var playgroundPreset = context.presets().item('leisure/playground');
-      var descriptionField = context.presets().field('description');
-      var timeouts = [];
-      var _areaID;
+          function incompleteRelation(id) {
+              var entity = context.entity(id);
+              return entity.type === 'relation' && !entity.isComplete(context.graph());
+          }
+      };
 
 
-      var chapter = {
-          title: 'intro.areas.title'
+      operation.tooltip = function() {
+          var disable = operation.disabled();
+          return disable ?
+              t('operations.move.' + disable + '.' + multi) :
+              t('operations.move.description.' + multi);
       };
 
 
-      function timeout(f, t$$1) {
-          timeouts.push(window.setTimeout(f, t$$1));
-      }
-
+      operation.annotation = function() {
+          return selectedIDs.length === 1 ?
+              t('operations.move.annotation.' + context.geometry(selectedIDs[0])) :
+              t('operations.move.annotation.multiple');
+      };
 
-      function eventCancel() {
-          event.stopPropagation();
-          event.preventDefault();
-      }
 
+      operation.id = 'move';
+      operation.keys = [t('operations.move.key')];
+      operation.title = t('operations.move.title');
+      operation.behavior = behaviorOperation(context).which(operation);
 
-      function revealPlayground(center, text, options) {
-          var padding = 180 * Math.pow(2, context.map().zoom() - 19.5);
-          var box = pad$1(center, padding, context);
-          reveal(box, text, options);
-      }
+      return operation;
+  }
 
+  function operationOrthogonalize(selectedIDs, context) {
+      var entityId = selectedIDs[0],
+          entity = context.entity(entityId),
+          extent = entity.extent(context.graph()),
+          geometry = context.geometry(entityId),
+          action = actionOrthogonalize(entityId, context.projection);
 
-      function addArea() {
-          context.enter(modeBrowse(context));
-          context.history().reset('initial');
-          _areaID = null;
 
-          var msec = transitionTime(playground, context.map().center());
-          if (msec) { reveal(null, null, { duration: 0 }); }
-          context.map().centerZoomEase(playground, 19, msec);
+      var operation = function() {
+          context.perform(action, operation.annotation());
+      };
 
-          timeout(function() {
-              var tooltip = reveal('button.add-area',
-                  t('intro.areas.add_playground', { button: icon('#iD-icon-area', 'pre-text') }));
 
-              tooltip.selectAll('.tooltip-inner')
-                  .insert('svg', 'span')
-                  .attr('class', 'tooltip-illustration')
-                  .append('use')
-                  .attr('xlink:href', '#iD-graphic-areas');
+      operation.available = function() {
+          return selectedIDs.length === 1 &&
+              entity.type === 'way' &&
+              entity.isClosed() &&
+              uniq(entity.nodes).length > 2;
+      };
 
-              context.on('enter.intro', function(mode) {
-                  if (mode.id !== 'add-area') return;
-                  continueTo(startPlayground);
-              });
-          }, msec + 100);
 
-          function continueTo(nextStep) {
-              context.on('enter.intro', null);
-              nextStep();
+      operation.disabled = function() {
+          var reason;
+          if (extent.percentContainedIn(context.extent()) < 0.8) {
+              reason = 'too_large';
+          } else if (context.hasHiddenConnections(entityId)) {
+              reason = 'connected_to_hidden';
           }
-      }
+          return action.disabled(context.graph()) || reason;
+      };
 
 
-      function startPlayground() {
-          if (context.mode().id !== 'add-area') {
-              return chapter.restart();
-          }
+      operation.tooltip = function() {
+          var disable = operation.disabled();
+          return disable ?
+              t('operations.orthogonalize.' + disable) :
+              t('operations.orthogonalize.description.' + geometry);
+      };
 
-          _areaID = null;
-          context.map().zoomEase(19.5, 500);
 
-          timeout(function() {
-              revealPlayground(playground,
-                  t('intro.areas.start_playground'), { duration: 250 }
-              );
+      operation.annotation = function() {
+          return t('operations.orthogonalize.annotation.' + geometry);
+      };
 
-              timeout(function() {
-                  context.map().on('move.intro drawn.intro', function() {
-                      revealPlayground(playground,
-                          t('intro.areas.start_playground'), { duration: 0 }
-                      );
-                  });
-                  context.on('enter.intro', function(mode) {
-                      if (mode.id !== 'draw-area') return chapter.restart();
-                      continueTo(continuePlayground);
-                  });
-              }, 250);  // after reveal
 
-          }, 550);  // after easing
+      operation.id = 'orthogonalize';
+      operation.keys = [t('operations.orthogonalize.key')];
+      operation.title = t('operations.orthogonalize.title');
+      operation.behavior = behaviorOperation(context).which(operation);
 
-          function continueTo(nextStep) {
-              context.map().on('move.intro drawn.intro', null);
-              context.on('enter.intro', null);
-              nextStep();
-          }
-      }
+      return operation;
+  }
 
+  /**
+   * This method is like `_.uniq` except that it accepts `iteratee` which is
+   * invoked for each element in `array` to generate the criterion by which
+   * uniqueness is computed. The order of result values is determined by the
+   * order they occur in the array. The iteratee is invoked with one argument:
+   * (value).
+   *
+   * @static
+   * @memberOf _
+   * @since 4.0.0
+   * @category Array
+   * @param {Array} array The array to inspect.
+   * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
+   * @returns {Array} Returns the new duplicate free array.
+   * @example
+   *
+   * _.uniqBy([2.1, 1.2, 2.3], Math.floor);
+   * // => [2.1, 1.2]
+   *
+   * // The `_.property` iteratee shorthand.
+   * _.uniqBy([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x');
+   * // => [{ 'x': 1 }, { 'x': 2 }]
+   */
+  function uniqBy(array, iteratee) {
+    return (array && array.length) ? baseUniq(array, baseIteratee(iteratee, 2)) : [];
+  }
 
-      function continuePlayground() {
-          if (context.mode().id !== 'draw-area') {
-              return chapter.restart();
-          }
+  function operationReflectShort(selectedIDs, context) {
+      return operationReflect(selectedIDs, context, 'short');
+  }
 
-          _areaID = null;
-          revealPlayground(playground,
-              t('intro.areas.continue_playground', { alt: uiCmd.display('⌥') }),
-              { duration: 250 }
-          );
 
-          timeout(function() {
-              context.map().on('move.intro drawn.intro', function() {
-                  revealPlayground(playground,
-                      t('intro.areas.continue_playground', { alt: uiCmd.display('⌥') }),
-                      { duration: 0 }
-                  );
-              });
-          }, 250);  // after reveal
+  function operationReflectLong(selectedIDs, context) {
+      return operationReflect(selectedIDs, context, 'long');
+  }
 
-          context.on('enter.intro', function(mode) {
-              if (mode.id === 'draw-area') {
-                  var entity = context.hasEntity(context.selectedIDs()[0]);
-                  if (entity && entity.nodes.length >= 6) {
-                      return continueTo(finishPlayground);
-                  } else {
-                      return;
-                  }
-              } else if (mode.id === 'select') {
-                  _areaID = context.selectedIDs()[0];
-                  return continueTo(searchPresets);
-              } else {
-                  return chapter.restart();
-              }
-          });
 
-          function continueTo(nextStep) {
-              context.map().on('move.intro drawn.intro', null);
-              context.on('enter.intro', null);
-              nextStep();
-          }
-      }
+  function operationReflect(selectedIDs, context, axis) {
+      axis = axis || 'long';
+      var multi = (selectedIDs.length === 1 ? 'single' : 'multiple'),
+          extent = selectedIDs.reduce(function(extent, id) {
+              return extent.extend(context.entity(id).extent(context.graph()));
+          }, geoExtent());
 
 
-      function finishPlayground() {
-          if (context.mode().id !== 'draw-area') {
-              return chapter.restart();
-          }
+      var operation = function() {
+          var action = actionReflect(selectedIDs, context.projection)
+              .useLongAxis(Boolean(axis === 'long'));
+          context.perform(action, operation.annotation());
+      };
 
-          _areaID = null;
-          revealPlayground(playground,
-              t('intro.areas.finish_playground'), { duration: 250 }
-          );
 
-          timeout(function() {
-              context.map().on('move.intro drawn.intro', function() {
-                  revealPlayground(playground,
-                      t('intro.areas.finish_playground'), { duration: 0 }
-                  );
-              });
-          }, 250);  // after reveal
+      operation.available = function() {
+          var nodes = utilGetAllNodes(selectedIDs, context.graph());
+          return uniqBy(nodes, function(n) { return n.loc; }).length >= 3;
+      };
 
-          context.on('enter.intro', function(mode) {
-              if (mode.id === 'draw-area') {
-                  return;
-              } else if (mode.id === 'select') {
-                  _areaID = context.selectedIDs()[0];
-                  return continueTo(searchPresets);
-              } else {
-                  return chapter.restart();
-              }
-          });
 
-          function continueTo(nextStep) {
-              context.map().on('move.intro drawn.intro', null);
-              context.on('enter.intro', null);
-              nextStep();
+      operation.disabled = function() {
+          var reason;
+          if (extent.area() && extent.percentContainedIn(context.extent()) < 0.8) {
+              reason = 'too_large';
+          } else if (some(selectedIDs, context.hasHiddenConnections)) {
+              reason = 'connected_to_hidden';
+          } else if (some(selectedIDs, incompleteRelation)) {
+              reason = 'incomplete_relation';
           }
-      }
-
+          return reason;
 
-      function searchPresets() {
-          if (!_areaID || !context.hasEntity(_areaID)) {
-              return addArea();
-          }
-          var ids = context.selectedIDs();
-          if (context.mode().id !== 'select' || !ids.length || ids[0] !== _areaID) {
-              context.enter(modeSelect(context, [_areaID]));
+          function incompleteRelation(id) {
+              var entity = context.entity(id);
+              return entity.type === 'relation' && !entity.isComplete(context.graph());
           }
+      };
 
-          // disallow scrolling
-          select('.inspector-wrap').on('wheel.intro', eventCancel);
 
-          timeout(function() {
-              // reset pane, in case user somehow happened to change it..
-              select('.inspector-wrap .panewrap').style('right', '-100%');
+      operation.tooltip = function() {
+          var disable = operation.disabled();
+          return disable ?
+              t('operations.reflect.' + disable + '.' + multi) :
+              t('operations.reflect.description.' + axis + '.' + multi);
+      };
 
-              select('.preset-search-input')
-                  .on('keydown.intro', null)
-                  .on('keyup.intro', checkPresetSearch);
 
-              reveal('.preset-search-input',
-                  t('intro.areas.search_playground', { preset: playgroundPreset.name() })
-              );
-          }, 400);  // after preset list pane visible..
+      operation.annotation = function() {
+          return t('operations.reflect.annotation.' + axis + '.' + multi);
+      };
 
-          context.on('enter.intro', function(mode) {
-              if (!_areaID || !context.hasEntity(_areaID)) {
-                  return continueTo(addArea);
-              }
 
-              var ids = context.selectedIDs();
-              if (mode.id !== 'select' || !ids.length || ids[0] !== _areaID) {
-                  // keep the user's area selected..
-                  context.enter(modeSelect(context, [_areaID]));
+      operation.id = 'reflect-' + axis;
+      operation.keys = [t('operations.reflect.key.' + axis)];
+      operation.title = t('operations.reflect.title.' + axis);
+      operation.behavior = behaviorOperation(context).which(operation);
 
-                  // reset pane, in case user somehow happened to change it..
-                  select('.inspector-wrap .panewrap').style('right', '-100%');
-                  // disallow scrolling
-                  select('.inspector-wrap').on('wheel.intro', eventCancel);
+      return operation;
+  }
 
-                  select('.preset-search-input')
-                      .on('keydown.intro', null)
-                      .on('keyup.intro', checkPresetSearch);
+  function operationReverse(selectedIDs, context) {
+      var entityId = selectedIDs[0];
 
-                  reveal('.preset-search-input',
-                      t('intro.areas.search_playground', { preset: playgroundPreset.name() })
-                  );
+      var operation = function() {
+          context.perform(actionReverse(entityId), operation.annotation());
+      };
 
-                  context.history().on('change.intro', null);
-              }
-          });
 
-          function checkPresetSearch() {
-              var first = select('.preset-list-item:first-child');
+      operation.available = function() {
+          return selectedIDs.length === 1 && context.geometry(entityId) === 'line';
+      };
 
-              if (first.classed('preset-leisure-playground')) {
-                  reveal(first.select('.preset-list-button').node(),
-                      t('intro.areas.choose_playground', { preset: playgroundPreset.name() }),
-                      { duration: 300 }
-                  );
 
-                  select('.preset-search-input')
-                      .on('keydown.intro', eventCancel, true)
-                      .on('keyup.intro', null);
+      operation.disabled = function() {
+          return false;
+      };
 
-                  context.history().on('change.intro', function() {
-                      continueTo(clickAddField);
-                  });
-              }
-          }
 
-          function continueTo(nextStep) {
-              select('.inspector-wrap').on('wheel.intro', null);
-              context.on('enter.intro', null);
-              context.history().on('change.intro', null);
-              select('.preset-search-input').on('keydown.intro keyup.intro', null);
-              nextStep();
-          }
-      }
+      operation.tooltip = function() {
+          return t('operations.reverse.description');
+      };
 
 
-      function clickAddField() {
-          if (!_areaID || !context.hasEntity(_areaID)) {
-              return addArea();
-          }
-          var ids = context.selectedIDs();
-          if (context.mode().id !== 'select' || !ids.length || ids[0] !== _areaID) {
-              return searchPresets();
-          }
+      operation.annotation = function() {
+          return t('operations.reverse.annotation');
+      };
 
-          if (!select('.form-field-description').empty()) {
-              return continueTo(describePlayground);
-          }
 
-          // disallow scrolling
-          select('.inspector-wrap').on('wheel.intro', eventCancel);
+      operation.id = 'reverse';
+      operation.keys = [t('operations.reverse.key')];
+      operation.title = t('operations.reverse.title');
+      operation.behavior = behaviorOperation(context).which(operation);
 
-          timeout(function() {
-              // reset pane, in case user somehow happened to change it..
-              select('.inspector-wrap .panewrap').style('right', '0%');
+      return operation;
+  }
 
-              // It's possible for the user to add a description in a previous step..
-              // If they did this already, just continue to next step.
-              var entity = context.entity(_areaID);
-              if (entity.tags.description) {
-                  return continueTo(play);
-              }
+  function operationRotate(selectedIDs, context) {
+      var multi = (selectedIDs.length === 1 ? 'single' : 'multiple'),
+          extent = selectedIDs.reduce(function(extent, id) {
+              return extent.extend(context.entity(id).extent(context.graph()));
+          }, geoExtent());
 
-              // scroll "Add field" into view
-              var box = select('.more-fields').node().getBoundingClientRect();
-              if (box.top > 300) {
-                  var pane = select('.entity-editor-pane .inspector-body');
-                  var start = pane.node().scrollTop;
-                  var end = start + (box.top - 300);
 
-                  pane
-                      .transition()
-                      .duration(250)
-                      .tween('scroll.inspector', function() {
-                          var node = this;
-                          var i = interpolateNumber(start, end);
-                          return function(t$$1) {
-                              node.scrollTop = i(t$$1);
-                          };
-                      });
-              }
+      var operation = function() {
+          context.enter(modeRotate(context, selectedIDs));
+      };
 
-              timeout(function() {
-                  reveal('.more-fields .combobox-input',
-                      t('intro.areas.add_field'),
-                      { duration: 300 }
-                  );
 
-                  select('.more-fields .combobox-input')
-                      .on('click.intro', function() {
-                          // Watch for the combobox to appear...
-                          var watcher;
-                          watcher = window.setInterval(function() {
-                              if (!select('div.combobox').empty()) {
-                                  window.clearInterval(watcher);
-                                  continueTo(chooseDescriptionField);
-                              }
-                          }, 300);
-                      });
-              }, 300);  // after "Add Field" visible
+      operation.available = function() {
+          var nodes = utilGetAllNodes(selectedIDs, context.graph());
+          return uniqBy(nodes, function(n) { return n.loc; }).length >= 2;
+      };
 
-          }, 400);  // after editor pane visible
 
-          context.on('exit.intro', function() {
-              return continueTo(searchPresets);
-          });
+      operation.disabled = function() {
+          var reason;
+          if (extent.area() && extent.percentContainedIn(context.extent()) < 0.8) {
+              reason = 'too_large';
+          } else if (some(selectedIDs, context.hasHiddenConnections)) {
+              reason = 'connected_to_hidden';
+          } else if (some(selectedIDs, incompleteRelation)) {
+              reason = 'incomplete_relation';
+          }
+          return reason;
 
-          function continueTo(nextStep) {
-              select('.inspector-wrap').on('wheel.intro', null);
-              select('.more-fields .combobox-input').on('click.intro', null);
-              context.on('exit.intro', null);
-              nextStep();
+          function incompleteRelation(id) {
+              var entity = context.entity(id);
+              return entity.type === 'relation' && !entity.isComplete(context.graph());
           }
-      }
+      };
 
 
-      function chooseDescriptionField() {
-          if (!_areaID || !context.hasEntity(_areaID)) {
-              return addArea();
-          }
-          var ids = context.selectedIDs();
-          if (context.mode().id !== 'select' || !ids.length || ids[0] !== _areaID) {
-              return searchPresets();
-          }
+      operation.tooltip = function() {
+          var disable = operation.disabled();
+          return disable ?
+              t('operations.rotate.' + disable + '.' + multi) :
+              t('operations.rotate.description.' + multi);
+      };
 
-          if (!select('.form-field-description').empty()) {
-              return continueTo(describePlayground);
-          }
 
-          // Make sure combobox is ready..
-          if (select('div.combobox').empty()) {
-              return continueTo(clickAddField);
-          }
-          // Watch for the combobox to go away..
-          var watcher;
-          watcher = window.setInterval(function() {
-              if (select('div.combobox').empty()) {
-                  window.clearInterval(watcher);
-                  timeout(function() {
-                      if (select('.form-field-description').empty()) {
-                          continueTo(retryChooseDescription);
-                      } else {
-                          continueTo(describePlayground);
-                      }
-                  }, 300);  // after description field added.
-              }
-          }, 300);
+      operation.annotation = function() {
+          return selectedIDs.length === 1 ?
+              t('operations.rotate.annotation.' + context.geometry(selectedIDs[0])) :
+              t('operations.rotate.annotation.multiple');
+      };
 
-          reveal('div.combobox',
-              t('intro.areas.choose_field', { field: descriptionField.label() }),
-              { duration: 300 }
-          );
 
-          context.on('exit.intro', function() {
-              return continueTo(searchPresets);
-          });
+      operation.id = 'rotate';
+      operation.keys = [t('operations.rotate.key')];
+      operation.title = t('operations.rotate.title');
+      operation.behavior = behaviorOperation(context).which(operation);
 
-          function continueTo(nextStep) {
-              if (watcher) window.clearInterval(watcher);
-              context.on('exit.intro', null);
-              nextStep();
-          }
-      }
+      return operation;
+  }
 
+  function operationSplit(selectedIDs, context) {
+      var vertices = filter(selectedIDs, function(entityId) {
+          return context.geometry(entityId) === 'vertex';
+      });
 
-      function describePlayground() {
-          if (!_areaID || !context.hasEntity(_areaID)) {
-              return addArea();
-          }
-          var ids = context.selectedIDs();
-          if (context.mode().id !== 'select' || !ids.length || ids[0] !== _areaID) {
-              return searchPresets();
+      var entityId = vertices[0],
+          action = actionSplit(entityId),
+          ways = [];
+
+      if (vertices.length === 1) {
+          if (selectedIDs.length > 1) {
+              action.limitWays(without(selectedIDs, entityId));
           }
+          ways = action.ways(context.graph());
+      }
 
-          // reset pane, in case user happened to change it..
-          select('.inspector-wrap .panewrap').style('right', '0%');
 
-          if (select('.form-field-description').empty()) {
-              return continueTo(retryChooseDescription);
-          }
+      var operation = function() {
+          var difference = context.perform(action, operation.annotation());
+          context.enter(modeSelect(context, difference.extantIDs()));
+      };
 
-          context.on('exit.intro', function() {
-              continueTo(play);
-          });
 
-          reveal('.entity-editor-pane',
-              t('intro.areas.describe_playground', { button: icon('#iD-icon-apply', 'pre-text') }),
-              { duration: 300 }
-          );
+      operation.available = function() {
+          return vertices.length === 1;
+      };
 
-          function continueTo(nextStep) {
-              context.on('exit.intro', null);
-              nextStep();
+
+      operation.disabled = function() {
+          var reason;
+          if (some(selectedIDs, context.hasHiddenConnections)) {
+              reason = 'connected_to_hidden';
           }
-      }
+          return action.disabled(context.graph()) || reason;
+      };
 
 
-      function retryChooseDescription() {
-          if (!_areaID || !context.hasEntity(_areaID)) {
-              return addArea();
+      operation.tooltip = function() {
+          var disable = operation.disabled();
+          if (disable) {
+              return t('operations.split.' + disable);
           }
-          var ids = context.selectedIDs();
-          if (context.mode().id !== 'select' || !ids.length || ids[0] !== _areaID) {
-              return searchPresets();
+          if (ways.length === 1) {
+              return t('operations.split.description.' + context.geometry(ways[0].id));
+          } else {
+              return t('operations.split.description.multiple');
           }
+      };
 
-          // reset pane, in case user happened to change it..
-          select('.inspector-wrap .panewrap').style('right', '0%');
 
-          reveal('.entity-editor-pane',
-              t('intro.areas.retry_add_field', { field: descriptionField.label() }), {
-              buttonText: t('intro.ok'),
-              buttonCallback: function() { continueTo(clickAddField); }
-          });
+      operation.annotation = function() {
+          return ways.length === 1 ?
+              t('operations.split.annotation.' + context.geometry(ways[0].id)) :
+              t('operations.split.annotation.multiple', { n: ways.length });
+      };
 
-          context.on('exit.intro', function() {
-              return continueTo(searchPresets);
-          });
 
-          function continueTo(nextStep) {
-              context.on('exit.intro', null);
-              nextStep();
-          }
-      }
+      operation.id = 'split';
+      operation.keys = [t('operations.split.key')];
+      operation.title = t('operations.split.title');
+      operation.behavior = behaviorOperation(context).which(operation);
 
+      return operation;
+  }
 
-      function play() {
-          dispatch$$1.call('done');
-          reveal('#id-container',
-              t('intro.areas.play', { next: t('intro.lines.title') }), {
-                  tooltipBox: '.intro-nav-wrap .chapter-line',
-                  buttonText: t('intro.ok'),
-                  buttonCallback: function() { reveal('#id-container'); }
-              }
-          );
+  function operationStraighten(selectedIDs, context) {
+      var entityId = selectedIDs[0],
+          action = actionStraighten(entityId, context.projection);
+
+
+      function operation() {
+          context.perform(action, operation.annotation());
       }
 
 
-      chapter.enter = function() {
-          addArea();
+      operation.available = function() {
+          var entity = context.entity(entityId);
+          return selectedIDs.length === 1 &&
+              entity.type === 'way' &&
+              !entity.isClosed() &&
+              uniq(entity.nodes).length > 2;
       };
 
 
-      chapter.exit = function() {
-          timeouts.forEach(window.clearTimeout);
-          context.on('enter.intro exit.intro', null);
-          context.map().on('move.intro drawn.intro', null);
-          context.history().on('change.intro', null);
-          select('.inspector-wrap').on('wheel.intro', null);
-          select('.preset-search-input').on('keydown.intro keyup.intro', null);
-          select('.more-fields .combobox-input').on('click.intro', null);
+      operation.disabled = function() {
+          var reason;
+          if (context.hasHiddenConnections(entityId)) {
+              reason = 'connected_to_hidden';
+          }
+          return action.disabled(context.graph()) || reason;
       };
 
 
-      chapter.restart = function() {
-          chapter.exit();
-          chapter.enter();
+      operation.tooltip = function() {
+          var disable = operation.disabled();
+          return disable ?
+              t('operations.straighten.' + disable) :
+              t('operations.straighten.description');
       };
 
 
-      return utilRebind(chapter, dispatch$$1, 'on');
-  }
+      operation.annotation = function() {
+          return t('operations.straighten.annotation');
+      };
 
-  function uiIntroLine(context, reveal) {
-      var dispatch$$1 = dispatch('done');
-      var timeouts = [];
-      var _tulipRoadID = null;
-      var flowerRoadID = 'w646';
-      var tulipRoadStart = [-85.6297754121684, 41.95805253325314];
-      var tulipRoadMidpoint = [-85.62975395449628, 41.95787501510204];
-      var tulipRoadIntersection = [-85.62974496187628, 41.95742515554585];
-      var roadCategory = context.presets().item('category-road');
-      var residentialPreset = context.presets().item('highway/residential');
-      var woodRoadID = 'w525';
-      var woodRoadEndID = 'n2862';
-      var woodRoadAddNode = [-85.62390110349587, 41.95397111462291];
-      var woodRoadDragEndpoint = [-85.623867390213, 41.95466987786487];
-      var woodRoadDragMidpoint = [-85.62386254803509, 41.95430395953872];
-      var washingtonStreetID = 'w522';
-      var twelfthAvenueID = 'w1';
-      var eleventhAvenueEndID = 'n3550';
-      var twelfthAvenueEndID = 'n5';
-      var _washingtonSegmentID = null;
-      var eleventhAvenueEnd = context.entity(eleventhAvenueEndID).loc;
-      var twelfthAvenueEnd = context.entity(twelfthAvenueEndID).loc;
-      var deleteLinesLoc = [-85.6219395542764, 41.95228033922477];
-      var twelfthAvenue = [-85.62219310052491, 41.952505413152956];
 
+      operation.id = 'straighten';
+      operation.keys = [t('operations.straighten.key')];
+      operation.title = t('operations.straighten.title');
+      operation.behavior = behaviorOperation(context).which(operation);
 
-      var chapter = {
-          title: 'intro.lines.title'
-      };
+      return operation;
+  }
 
+  function operationDetachNode(selectedIDs, context) {
+      var nodeID = selectedIDs.length && selectedIDs[0];
+      var action = actionDetachNode(nodeID);
 
-      function timeout(f, t$$1) {
-          timeouts.push(window.setTimeout(f, t$$1));
-      }
+      var operation = function () {
+          context.perform(action);  // do the detach
 
+          var mouse = context.map().mouseCoordinates();
+          if (mouse.some(isNaN)) {
+              enterMoveMode();
 
-      function eventCancel() {
-          event.stopPropagation();
-          event.preventDefault();
-      }
+          } else {
+              // move detached node to the mouse location (transitioned)
+              context.perform(actionMoveNode(nodeID, mouse));
 
+              // after transition completes, put at final mouse location and enter move mode.
+              window.setTimeout(function() {
+                  mouse = context.map().mouseCoordinates();
+                  context.replace(actionMoveNode(nodeID, mouse));
+                  enterMoveMode();
+              }, 150);
+          }
 
-      function revealEditMenu(loc, text, options) {
-          var rect = context.surfaceRect();
-          var point$$1 = context.curtainProjection(loc);
-          var pad = 40;
-          var width = 250 + (2 * pad);
-          var height = 350;
-          var startX = rect.left + point$$1[0];
-          var left = (textDirection === 'rtl') ? (startX - width + pad) : (startX - pad);
-          var box = {
-              left: left,
-              top: point$$1[1] + rect.top - 60,
-              width: width,
-              height: height
-          };
-          reveal(box, text, options);
-      }
+          function enterMoveMode() {
+              var baseGraph = context.graph();
+              context.enter(modeMove(context, [nodeID], baseGraph));
+          }
+      };
 
 
-      function addLine() {
-          context.enter(modeBrowse(context));
-          context.history().reset('initial');
+      operation.available = function () {
+          if (selectedIDs.length !== 1) return false;
 
-          var msec = transitionTime(tulipRoadStart, context.map().center());
-          if (msec) { reveal(null, null, { duration: 0 }); }
-          context.map().centerZoomEase(tulipRoadStart, 18.5, msec);
+          var graph = context.graph();
+          var entity = graph.hasEntity(nodeID);
+          if (!entity) return false;
 
-          timeout(function() {
-              var tooltip = reveal('button.add-line',
-                  t('intro.lines.add_line', { button: icon('#iD-icon-line', 'pre-text') }));
+          return entity.type === 'node' &&
+              entity.hasInterestingTags() &&
+              graph.parentWays(entity).length > 0;
+      };
 
-              tooltip.selectAll('.tooltip-inner')
-                  .insert('svg', 'span')
-                  .attr('class', 'tooltip-illustration')
-                  .append('use')
-                  .attr('xlink:href', '#iD-graphic-lines');
 
-              context.on('enter.intro', function(mode) {
-                  if (mode.id !== 'add-line') return;
-                  continueTo(startLine);
-              });
-          }, msec + 100);
+      operation.disabled = function () {
+          var reason;
+          if (some(selectedIDs, context.hasHiddenConnections)) {
+              reason = 'connected_to_hidden';
+          }
+          return action.disabled(context.graph()) || reason;
+      };
 
-          function continueTo(nextStep) {
-              context.on('enter.intro', null);
-              nextStep();
+
+      operation.tooltip = function () {
+          var disableReason = operation.disabled();
+          if (disableReason) {
+              return t('operations.detach_node.' + disableReason,
+                  { relation: context.presets().item('type/restriction').name() });
+          } else {
+              return t('operations.detach_node.description');
           }
-      }
+      };
 
 
-      function startLine() {
-          if (context.mode().id !== 'add-line') return chapter.restart();
+      operation.annotation = function () {
+          return t('operations.detach_node.annotation');
+      };
 
-          _tulipRoadID = null;
 
-          var padding = 70 * Math.pow(2, context.map().zoom() - 18);
-          var box = pad$1(tulipRoadStart, padding, context);
-          box.height = box.height + 100;
-          reveal(box, t('intro.lines.start_line'));
+      operation.id = 'detach-node';
+      operation.keys = [t('operations.detach_node.key')];
+      operation.title = t('operations.detach_node.title');
+      operation.behavior = behaviorOperation(context).which(operation);
 
-          context.map().on('move.intro drawn.intro', function() {
-              padding = 70 * Math.pow(2, context.map().zoom() - 18);
-              box = pad$1(tulipRoadStart, padding, context);
-              box.height = box.height + 100;
-              reveal(box, t('intro.lines.start_line'), { duration: 0 });
-          });
 
-          context.on('enter.intro', function(mode) {
-              if (mode.id !== 'draw-line') return chapter.restart();
-              continueTo(drawLine);
-          });
+      return operation;
+  }
 
-          function continueTo(nextStep) {
-              context.map().on('move.intro drawn.intro', null);
-              context.on('enter.intro', null);
-              nextStep();
-          }
-      }
 
 
-      function drawLine() {
-          if (context.mode().id !== 'draw-line') return chapter.restart();
+  var Operations = /*#__PURE__*/Object.freeze({
+    operationCircularize: operationCircularize,
+    operationContinue: operationContinue,
+    operationDelete: operationDelete,
+    operationDisconnect: operationDisconnect,
+    operationMerge: operationMerge,
+    operationMove: operationMove,
+    operationOrthogonalize: operationOrthogonalize,
+    operationReflectShort: operationReflectShort,
+    operationReflectLong: operationReflectLong,
+    operationReverse: operationReverse,
+    operationRotate: operationRotate,
+    operationSplit: operationSplit,
+    operationStraighten: operationStraighten,
+    operationDetachNode: operationDetachNode
+  });
 
-          _tulipRoadID = context.mode().selectedIDs()[0];
-          context.map().centerEase(tulipRoadMidpoint, 500);
+  function validationDisconnectedWay() {
+      var type = 'disconnected_way';
 
-          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;
-              reveal(box,
-                  t('intro.lines.intersect', { name: t('intro.graph.name.flower-street') })
-              );
 
-              context.map().on('move.intro drawn.intro', function() {
-                  padding = 200 * Math.pow(2, context.map().zoom() - 18.5);
-                  box = pad$1(tulipRoadMidpoint, padding, context);
-                  box.height = box.height * 2;
-                  reveal(box,
-                      t('intro.lines.intersect', { name: t('intro.graph.name.flower-street') }),
-                      { duration: 0 }
-                  );
+      function isDisconnectedHighway(entity, graph) {
+          if (!entity.tags.highway) return false;
+          if (entity.geometry(graph) !== 'line') return false;
+
+          return graph.childNodes(entity)
+              .every(function(vertex) {
+                  var parents = graph.parentWays(vertex);
+                  if (parents.length === 1) {  // standalone vertex
+                      return true;
+                  } else {                     // shared vertex
+                      return !vertex.tags.entrance &&
+                          parents.filter(function(parent) {
+                              return parent.tags.highway && parent !== entity;
+                          }).length === 0;
+                  }
               });
-          }, 550);  // after easing..
+      }
 
-          context.history().on('change.intro', function() {
-              if (isLineConnected()) {
-                  continueTo(continueLine);
+
+      var validation = function(entity, context) {
+          var issues = [];
+          var graph = context.graph();
+
+          if (isDisconnectedHighway(entity, graph)) {
+              var entityLabel = utilDisplayLabel(entity, context);
+              var fixes = [];
+
+              if (!entity.isClosed()) {
+                  var first = context.entity(entity.first());
+                  if (first.tags.noexit !== 'yes') {
+                      fixes.push(new validationIssueFix({
+                          icon: 'iD-operation-continue-left',
+                          title: t('issues.fix.continue_from_start.title'),
+                          entityIds: [entity.first()],
+                          onClick: function() {
+                              var vertex = context.entity(entity.first());
+                              continueDrawing(entity, vertex, context);
+                          }
+                      }));
+                  }
+                  var last = context.entity(entity.last());
+                  if (last.tags.noexit !== 'yes') {
+                      fixes.push(new validationIssueFix({
+                          icon: 'iD-operation-continue',
+                          title: t('issues.fix.continue_from_end.title'),
+                          entityIds: [entity.last()],
+                          onClick: function() {
+                              var vertex = context.entity(entity.last());
+                              continueDrawing(entity, vertex, context);
+                          }
+                      }));
+                  }
               }
-          });
 
-          context.on('enter.intro', function(mode) {
-              if (mode.id === 'draw-line') {
-                  return;
-              } else if (mode.id === 'select') {
-                  continueTo(retryIntersect);
-                  return;
-              } else {
-                  return chapter.restart();
+              fixes.push(new validationIssueFix({
+                  icon: 'iD-operation-delete',
+                  title: t('issues.fix.delete_feature.title'),
+                  entityIds: [entity.id],
+                  onClick: function() {
+                      var id = this.issue.entities[0].id;
+                      operationDelete([id], context)();
+                  }
+              }));
+
+              issues.push(new validationIssue({
+                  type: type,
+                  severity: 'warning',
+                  message: t('issues.disconnected_way.highway.message', { highway: entityLabel }),
+                  tooltip: t('issues.disconnected_way.highway.tip'),
+                  entities: [entity],
+                  fixes: fixes
+              }));
+          }
+
+          return issues;
+
+
+          function continueDrawing(way, vertex) {
+              // make sure the vertex is actually visible and editable
+              var map = context.map();
+              if (!map.editable() || !map.trimmedExtent().contains(vertex.loc)) {
+                  map.zoomToEase(vertex);
               }
-          });
 
-          function continueTo(nextStep) {
-              context.map().on('move.intro drawn.intro', null);
-              context.history().on('change.intro', null);
-              context.on('enter.intro', null);
-              nextStep();
+              context.enter(
+                  modeDrawLine(context, way.id, context.graph(), context.graph(), way.affix(vertex.id), true)
+              );
           }
-      }
+      };
 
 
-      function isLineConnected() {
-          var entity = _tulipRoadID && context.hasEntity(_tulipRoadID);
-          if (!entity) return false;
+      validation.type = type;
 
-          var drawNodes = context.graph().childNodes(entity);
-          return some(drawNodes, function(node) {
-              return some(context.graph().parentWays(node), function(parent) {
-                  return parent.id === flowerRoadID;
-              });
-          });
-      }
+      return validation;
+  }
 
+  var discardNames = ["\\(historical\\)","^[0-9]+$","^agencja pocztowa$","^änderungsschneiderei$","^apotek(a|et)$","^(adler|bahnhof|brunnen|burg|bären|engel|hirsch|hubertus|kur|linden|löwen)(-| )?apotheke$","^(marien|markt|neue|park|rathaus|rats|rosen|schloss|sonnen|stadt|stern)(-| )?apotheke$","^alte (apotheke|post)$","^apotheke(\\sam\\smarkt)?$","^apteka$","^аптека","^atelier de couture$","^atm$","^auto serwis$","^bank(| spółdzielczy)$","^bar$","^bar (centrale|kafe)$","^bazar$","^bäckerei$","^baguette$","^bakery$","^(the )?barber(ia|shop|\\sshop)?$","^berber$","^biletomat$","^bistro$","^blumen(laden)?$","^bodega$","^borracharia$","^bo(u)?tique$","^boucherie(\\scharcuterie)?$","^boulangerie(\\sp(a|â)tisserie)?$","^bread$","^briefkasten$","^budget inn$","^(bureau de |)change$","^bureau de poste$","^büfé$","^caf(e|é)(t(e|é)r(i|í)a)?( )?(central)?$","^caf(e|é) de(s)? (la )?(place|sports|gare)$","^carnicer(i|í)a$","^central$","^centro naturista$","^cine(ma)?$","^cleaners$","^coiff(eur|ure)$","^coffee$","^colmado$","^commercial hotel$","^correos$","^currency exchange$","^d(ö|o)ner(\\skebab)?$","^drinks$","^droguer(i|í)a$","^eczane$","^el árbol$","^estanco$","^eisdiele","^eiscaf(e|é)(\\s(dolomiti|venezia))?$","^exchange$","^euroshop$","^élelmiszer$","^élelmiszerbolt$","^farm(a|à|á)ci(a|à|á|e)$","^fagyizó$","^fast food$","^fish (and|&) chips$","^fleuriste$","^florărie$","^food court$","^fotocopias$","^fris(eu|ö)r$","^fri(t|z)erie$","^frituur$","^fryzjer$","^frutería$","^funeraria$","^ferreter(i|í)a$","^game$","^garage$","^gasoline(ra)?$","^gast(haus|hof)\\s(krone|(zur)\\s(linde|post))?$","^getränkemarkt$","^gimnasio$","^gomer(i|í)a$","^gym(nase|nasium)?$","^gyógyszertár$","^haar(genau|monie|scharf)$","^hair\\s(design|lounge|salon)$","^hardware$","^(hof|dorf)laden$","^hospedaje$","^(h|m)otel$","^h(o|ô)tel\\s(astoria|central|europa|krone|panorama|plaza|royal|victoria|(zur\\s)?post|de france)$","^(central|city|europa|grand|palace|park|royal)(\\s)?hotel$","^húsbolt$","^indipend\\.$","^((drummed|independent)\\s)?(cng|filling|fuel|gas|lpg|petrol)(\\s(station|pump))?$","^istanbul(\\skebab)?$","^imbiss$","^internet cafe$","^kaf(e|é)$","^kios(co|k|ko|que)?$","^kantine$","^kantor$","^kebab(ai|\\shouse)?$","^kitchen$","^kisbolt$","^księgarnia$","^kwiaciarnia$","^ladestation$","^lékárna$","^librer(i|í)a$","^librairie$","^libro$","^ljekarna$","^lombard$","^lot 1$","^lubricentro$","^macelleria$","^mailbox$","^maison$","^magazin","^market$","^máquina de tickets$","^mécanique$","^mercado$","^mini(\\s)?(abc|market|mart|mercado|pump)","municipal","^nails$","^obuwie$","^(okręgowa\\s)?stacja kontroli pojazdów$","^oplaadpunt$","^opti(c|k)a$","^optical center$","^padaria$","^panader(i|í)a$","^pancake house$","^panificio$","^panorama$","^papeler(i|í)a$","^pa(r|cz)komat$","^parafarmacia$","^parkscheinautomat$","^parquímetro$","^peluquer(i|í)a$","^pharmac(ie|y)$","^pho$","^piekarnia$","^pizz(eri)?a$","^piscine$","^poczta$","^po(s|š)t(a|e|o)$","^post(\\s)?(agentur|filiale|partner|office|stelle)?$","^punkt apteczny$","^pressing$","^rent a car$","^restaurant(e)?(\\suniversitário)?$","^rzeźnik$","^salle (omnisport|polyvalente)$","^(the\\s)?salo(o)?n( de coiffure| fryzjerski)?$","^second\\shand$","^shop$","^(coffee|pet|vulcanizing|gift)(\\sshop)?$","^sklep$","^(sklep\\s)?(spożywcz(y|o))(-przemysłowy)?$","^snack$","^souvenirs$","^stacja (benzynowa|paliw)$","^stadium$","^station service$","^steak house$","^stores?$","^(beer|convenience|corner|general|liquor|variety)(\\sstore)?$","^stromtankstelle$","^super ?america","^superm(arket|ercado)$","^sushi(\\s(bar|shop))?$","^tabaccher(i|í)a$","^taba(c|k)(os|chi)?(\\strafi(k|c))?$","^tacos$","^tankstelle$","^tattoo$","^taverna$","^tea stall$","^tienda(\\sde\\s(barrio|abarrotes))?$","^tokyo$","^trattoria$","^trafik(a)?$","^trinkhalle$","^ufficio postale$","^urząd pocztowy$","^vegyesbolt$","^venezia$","^večerka$","^virágbolt$","^vision\\splus$","^(clinica\\s)?veterinari(a|o)$","^(clinique\\s)?vétérinaire$","^warung$","^warzywniak$","^windmill$","^wok$","^wulkanizacja$","^zigarettenautomat$","^zöldséges$","^авто(рынок|ремонт|сервис|электрик|запчасти(ни)?)?$","^автома(г|газин|стерская)?$","^ателье$","^бистро$","^буфет$","^бассейн$","^ветеринарная клиника$","^ветлечебница$","^вулканизация$","^газ$","^газовая заправка$","^гостиница$","^главпочтамт$","^детский дом$","^ломбард$","^закусочная$","замена масла","^золото(й)?$","^зоо(магазин|товары)$","^канцтовары$","^касса$","^(летнее\\s)?кафе(терий)?$","^кофе(йня|\\sхауз)$","^книги$","^киоск$","^мебель$","^меблі$","^мороженое$","^оптика$","^овощи(\\sи\\s|-)фрукты$","^(спец|детская|женская)?(\\s)?одежда$","^(парикмахерская|персона|перукарня)$","^Пиццерия$","^почта$","^почтовое отделение$","^подарки$","^пресса$","^(Проездные\\s)?билет(ы)?$","^продукт(ы|и)?$","^промтовары$","^ресторан$","^ремонт\\sобуви$","^рыб(a|олов)$","^ритуал(ьные услуги)?$","^салон красоты$","^сувениры$","^супермаркет$","^столовая$","^стройматериалы$","^социальный участковый$","^спорт(зал|комплекс)$","^табак(ерка)?$","^товары для дома$","^Уют$","^универ(маг|сам)$","^φαρμακείο$","^фармация$","^химчистка$","^хоз(товары|яюшка)$","шиномонтаж","^ша(ве|у)рма$","^نانوایی$","^نانوایی بربری$","^حلاق$","^مخبز(ة)?$","^مقهى$","^محط(ه|ة) وقود$","^میوه فروشی$","^داروخانه$","^بانک$","^بقال(ة)?$","^پمپ (بنزین|گاز)$","^سوپر\\s?مارکت$","^صيدلية$","^اداره پست$","^رستوران$","^مطعم$","^მარკეტი\\s\\(Market\\)","^דלק$","^カフェ$","^ポスト$","^珈琲館$","^加油站$","^郵局$","^食堂$","^(自動販売機|自販機)$","^体育館$"];
 
-      function retryIntersect() {
-          select(window).on('mousedown.intro', eventCancel, true);
+  function validationGenericName() {
+      var type = 'generic_name';
 
-          var box = pad$1(tulipRoadIntersection, 80, context);
-          reveal(box,
-              t('intro.lines.retry_intersect', { name: t('intro.graph.name.flower-street') })
-          );
+      // known list of generic names (e.g. "bar")
+      var discardNamesRegexes = discardNames.map(function(discardName) {
+          return new RegExp(discardName, 'i');
+      });
 
-          timeout(chapter.restart, 3000);
+      var keysToTestForGenericValues = ['amenity', 'building', 'leisure', 'man_made', 'shop', 'tourism'];
+
+      function isGenericName(entity) {
+          var name = entity.tags.name;
+          if (!name) return false;
+          name = name.toLowerCase();
+
+          var i, key, val;
+
+          // test if the name is just the key or tag value (e.g. "park")
+          for (i = 0; i < keysToTestForGenericValues.length; i++) {
+              key = keysToTestForGenericValues[i];
+              val = entity.tags[key];
+              if (val) {
+                  val = val.toLowerCase();
+                  if (key === name ||
+                      val === name ||
+                      key.replace(/\_/g, ' ') === name ||
+                      val.replace(/\_/g, ' ') === name) {
+                      return entity.tags.name;
+                  }
+              }
+          }
+
+          // test if the name is otherwise generic
+          for (i = 0; i < discardNamesRegexes.length; i++) {
+              if (discardNamesRegexes[i].test(name)) {
+                  return entity.tags.name;
+              }
+          }
+
+          return false;
       }
 
 
-      function continueLine() {
-          if (context.mode().id !== 'draw-line') return chapter.restart();
-          var entity = _tulipRoadID && context.hasEntity(_tulipRoadID);
-          if (!entity) return chapter.restart();
+      var validation = function(entity, context) {
+          var issues = [];
+          var generic = isGenericName(entity);
+          if (generic) {
+              var preset = utilPreset(entity, context);
+              issues.push(new validationIssue({
+                  type: type,
+                  severity: 'warning',
+                  message: t('issues.generic_name.message', {feature: preset.name(), name: generic}),
+                  tooltip: t('issues.generic_name.tip'),
+                  entities: [entity],
+                  fixes: [
+                      new validationIssueFix({
+                          icon: 'iD-operation-delete',
+                          title: t('issues.fix.remove_generic_name.title'),
+                          onClick: function() {
+                              var entity = this.issue.entities[0];
+                              var tags = clone(entity.tags);
+                              delete tags.name;
+                              context.perform(
+                                  actionChangeTags(entity.id, tags),
+                                  t('issues.fix.remove_generic_name.annotation')
+                              );
+                          }
+                      })
+                  ]
+              }));
+          }
 
-          context.map().centerEase(tulipRoadIntersection, 500);
+          return issues;
+      };
 
-          reveal('#surface', t('intro.lines.continue_line'));
+      validation.type = type;
 
-          context.on('enter.intro', function(mode) {
-              if (mode.id === 'draw-line')
-                  return;
-              else if (mode.id === 'select')
-                  return continueTo(chooseCategoryRoad);
-              else
-                  return chapter.restart();
+      return validation;
+  }
+
+  function validationManyDeletions() {
+      var totalOtherGeomThreshold = 50;
+      var relationThreshold = 10;   // relations are less common so use a lower threshold
+
+      var type = 'many_deletions';
+
+      var validation = function(changes, context) {
+          var issues = [];
+          var points = 0, lines = 0, areas = 0, relations = 0;
+          var base = context.history().base();
+          var geometry;
+
+          changes.deleted.forEach(function(entity) {
+              if (entity.type === 'node' && entity.geometry(base) === 'point') {
+                  points++;
+              } else if (entity.type === 'way') {
+                  geometry = entity.geometry(base);
+                  if (geometry === 'line') {
+                      lines++;
+                  } else if (geometry === 'area') {
+                       areas++;
+                  }
+              } else if (entity.type === 'relation') {
+                  relations++;
+              }
           });
 
-          function continueTo(nextStep) {
-              context.on('enter.intro', null);
-              nextStep();
+          if (points + lines + areas >= totalOtherGeomThreshold || relations >= relationThreshold) {
+              var totalFeatures = points + lines + areas + relations;
+
+              var messageType = 'points-lines-areas';
+              if (relations > 0) {
+                  messageType += '-relations';
+              }
+              issues.push(new validationIssue({
+                  type: type,
+                  severity: 'warning',
+                  message: t(
+                      'issues.many_deletions.'+messageType+'.message',
+                      { n: totalFeatures, p: points, l: lines, a:areas, r: relations }
+                  ),
+                  tooltip: t('issues.many_deletions.tip'),
+                  hash: [points, lines, areas, relations].join()
+              }));
           }
-      }
 
+          return issues;
+      };
 
-      function chooseCategoryRoad() {
-          if (context.mode().id !== 'select') return chapter.restart();
+      validation.type = type;
+      validation.inputType = 'changes';
 
-          context.on('exit.intro', function() {
-              return chapter.restart();
-          });
+      return validation;
+  }
 
-          var button = select('.preset-category-road .preset-list-button');
-          if (button.empty()) return chapter.restart();
+  function validationMaprules() {
+      var type = 'maprules';
 
-          // disallow scrolling
-          select('.inspector-wrap').on('wheel.intro', eventCancel);
 
-          timeout(function() {
-              // reset pane, in case user somehow happened to change it..
-              select('.inspector-wrap .panewrap').style('right', '-100%');
+      var validation = function(entity, context) {
+          if (!services.maprules) return [];
 
-              reveal(button.node(),
-                  t('intro.lines.choose_category_road', { category: roadCategory.name() })
-              );
+          var graph = context.graph();
 
-              button.on('click.intro', function() {
-                  continueTo(choosePresetResidential);
-              });
+          var rules = services.maprules.validationRules();
+          var issues = [];
 
-          }, 400);  // after editor pane visible
+          for (var i = 0; i < rules.length; i++) {
+              var rule = rules[i];
+              rule.findIssues(entity, graph, issues);
+          }
 
-          function continueTo(nextStep) {
-              select('.inspector-wrap').on('wheel.intro', null);
-              select('.preset-list-button').on('click.intro', null);
-              context.on('exit.intro', null);
-              nextStep();
+          return issues;
+      };
+
+
+      validation.type = type;
+
+
+      return validation;
+  }
+
+  function validationMissingTag() {
+      var type = 'missing_tag';
+
+
+      function hasDescriptiveTags(entity) {
+          var keys = without(Object.keys(entity.tags), 'area', 'name').filter(osmIsInterestingTag);
+          if (entity.type === 'relation' && keys.length === 1) {
+              return entity.tags.type !== 'multipolygon';
           }
+          return keys.length > 0;
       }
 
 
-      function choosePresetResidential() {
-          if (context.mode().id !== 'select') return chapter.restart();
+      var validation = function(entity, context) {
+          var graph = context.graph();
 
-          context.on('exit.intro', function() {
-              return chapter.restart();
-          });
+          // ignore vertex features and relation members
+          if (entity.geometry(graph) === 'vertex' || entity.hasParentRelations(graph)) {
+              return [];
+          }
 
-          var subgrid = select('.preset-category-road .subgrid');
-          if (subgrid.empty()) return chapter.restart();
+          var messageObj = {};
+          var missingTagType;
 
-          subgrid.selectAll(':not(.preset-highway-residential) .preset-list-button')
-              .on('click.intro', function() {
-                  continueTo(retryPresetResidential);
-              });
+          if (isEmpty(entity.tags)) {
+              missingTagType = 'any';
+          } else if (!hasDescriptiveTags(entity)) {
+              missingTagType = 'descriptive';
+          } else if (entity.type === 'relation' && !entity.tags.type) {
+              missingTagType = 'specific';
+              messageObj.tag = 'type';
+          }
 
-          subgrid.selectAll('.preset-highway-residential .preset-list-button')
-              .on('click.intro', function() {
-                  continueTo(nameRoad);
-              });
+          if (!missingTagType) {
+              return [];
+          }
 
-          timeout(function() {
-              reveal(subgrid.node(),
-                  t('intro.lines.choose_preset_residential', { preset: residentialPreset.name() }),
-                  { tooltipBox: '.preset-highway-residential .preset-list-button', duration: 300 }
-              );
-          }, 300);
+          messageObj.feature = utilDisplayLabel(entity, context);
 
-          function continueTo(nextStep) {
-              select('.preset-list-button').on('click.intro', null);
-              context.on('exit.intro', null);
-              nextStep();
-          }
-      }
+          var issues = [];
 
+          var deleteFixOnClick = function() {
+              var id = this.issue.entities[0].id;
+              operationDelete([id], context)();
+          };
+          var canDelete = true;
+          
+          if (entity.type === 'relation' &&
+              !entity.members.every(function(member) { return context.hasEntity(member.id); })) {
+              deleteFixOnClick = null;
+              canDelete = false;
+          }
 
-      // selected wrong road type
-      function retryPresetResidential() {
-          if (context.mode().id !== 'select') return chapter.restart();
+          issues.push(new validationIssue({
+              type: type,
+              // error if created or modified and is deletable, else warning
+              severity: (!entity.version || entity.v) && canDelete  ? 'error' : 'warning',
+              message: t('issues.missing_tag.' + missingTagType + '.message', messageObj),
+              tooltip: t('issues.missing_tag.tip'),
+              entities: [entity],
+              fixes: [
+                  new validationIssueFix({
+                      icon: 'iD-icon-search',
+                      title: t('issues.fix.select_preset.title'),
+                      onClick: function() {
+                          context.ui().sidebar.showPresetList();
+                      }
+                  }),
+                  new validationIssueFix({
+                      icon: 'iD-operation-delete',
+                      title: t('issues.fix.delete_feature.title'),
+                      onClick: deleteFixOnClick
+                  })
+              ]
+          }));
 
-          context.on('exit.intro', function() {
-              return chapter.restart();
-          });
+          return issues;
+      };
 
-          // disallow scrolling
-          select('.inspector-wrap').on('wheel.intro', eventCancel);
+      validation.type = type;
 
-          timeout(function() {
-              var button = select('.entity-editor-pane .preset-list-button');
+      return validation;
+  }
 
-              reveal(button.node(),
-                  t('intro.lines.retry_preset_residential', { preset: residentialPreset.name() })
-              );
+  function validationOldMultipolygon() {
+      var type = 'old_multipolygon';
 
-              button.on('click.intro', function() {
-                  continueTo(chooseCategoryRoad);
-              });
 
-          }, 500);
+      var validation = function(entity, context) {
+          var issues = [];
+          var graph = context.graph();
 
-          function continueTo(nextStep) {
-              select('.inspector-wrap').on('wheel.intro', null);
-              select('.preset-list-button').on('click.intro', null);
-              context.on('exit.intro', null);
-              nextStep();
+          var multipolygon, outerWay;
+          if (entity.type === 'relation') {
+              outerWay = osmOldMultipolygonOuterMemberOfRelation(entity, graph);
+              multipolygon = entity;
+          } else if (entity.type === 'way') {
+              multipolygon = osmIsOldMultipolygonOuterMember(entity, graph);
+              outerWay = entity;
+          } else {
+              return issues;
+          }
+
+          if (multipolygon && outerWay) {
+              var multipolygonLabel = utilDisplayLabel(multipolygon, context);
+              issues.push(new validationIssue({
+                  type: type,
+                  severity: 'warning',
+                  message: t('issues.old_multipolygon.message', { multipolygon: multipolygonLabel }),
+                  tooltip: t('issues.old_multipolygon.tip'),
+                  entities: [outerWay, multipolygon],
+                  fixes: [
+                      new validationIssueFix({
+                          title: t('issues.fix.move_tags.title'),
+                          onClick: function() {
+                              var outerWay = this.issue.entities[0];
+                              var multipolygon =  this.issue.entities[1];
+                              context.perform(
+                                  function(graph) {
+                                      multipolygon = multipolygon.mergeTags(outerWay.tags);
+                                      graph = graph.replace(multipolygon);
+                                      graph = actionChangeTags(outerWay.id, {})(graph);
+                                      return graph;
+                                  },
+                                  t('issues.fix.move_tags.annotation')
+                              );
+                          }
+                      })
+                  ]
+              }));
           }
-      }
+          return issues;
+      };
 
+      validation.type = type;
 
-      function nameRoad() {
-          context.on('exit.intro', function() {
-              continueTo(didNameRoad);
-          });
+      return validation;
+  }
 
-          timeout(function() {
-              reveal('.entity-editor-pane',
-                  t('intro.lines.name_road', { button: icon('#iD-icon-apply', 'pre-text') }),
-                  { tooltipClass: 'intro-lines-name_road' }
-              );
-          }, 500);
+  function validationTagSuggestsArea() {
+      var type = 'tag_suggests_area';
 
-          function continueTo(nextStep) {
-              context.on('exit.intro', null);
-              nextStep();
-          }
-      }
 
+      var validation = function(entity, context) {
+          if (entity.type !== 'way') return [];
 
-      function didNameRoad() {
-          context.history().checkpoint('doneAddLine');
+          var issues = [];
+          var graph = context.graph();
+          var tagSuggestingArea = entity.tagSuggestingArea();
+          var tagSuggestsArea = !entity.isClosed() && tagSuggestingArea;
+
+          if (tagSuggestsArea) {
+              var tagText = utilTagText({ tags: tagSuggestingArea });
+              var fixes = [];
+
+              var connectEndpointsOnClick;
+
+              // must have at least three nodes to close this automatically
+              if (entity.nodes.length >= 3) {
+                  var nodes = graph.childNodes(entity), testNodes;
+                  var firstToLastDistanceMeters = geoSphericalDistance(nodes[0].loc, nodes[nodes.length-1].loc);
+
+                  // if the distance is very small, attempt to merge the endpoints
+                  if (firstToLastDistanceMeters < 0.75) {
+                      testNodes = clone(nodes);
+                      testNodes.pop();
+                      testNodes.push(testNodes[0]);
+                      // make sure this will not create a self-intersection
+                      if (!geoHasSelfIntersections(testNodes, testNodes[0].id)) {
+                          connectEndpointsOnClick = function() {
+                              var way = this.issue.entities[0];
+                              context.perform(
+                                  actionMergeNodes([way.nodes[0], way.nodes[way.nodes.length-1]], nodes[0].loc),
+                                  t('issues.fix.connect_endpoints.annotation')
+                              );
+                          };
+                      }
+                  }
 
-          timeout(function() {
-              reveal('#surface', t('intro.lines.did_name_road'), {
-                  buttonText: t('intro.ok'),
-                  buttonCallback: function() { continueTo(updateLine); }
-              });
-          }, 500);
+                  if (!connectEndpointsOnClick) {
+                      // if the points were not merged, attempt to close the way
+                      testNodes = clone(nodes);
+                      testNodes.push(testNodes[0]);
+                      // make sure this will not create a self-intersection
+                      if (!geoHasSelfIntersections(testNodes, testNodes[0].id)) {
+                          connectEndpointsOnClick = function() {
+                              var way = this.issue.entities[0];
+                              var nodeId = way.nodes[0];
+                              var index = way.nodes.length;
+                              context.perform(
+                                  actionAddVertex(way.id, nodeId, index),
+                                  t('issues.fix.connect_endpoints.annotation')
+                              );
+                          };
+                      }
+                  }
+              }
 
-          function continueTo(nextStep) {
-              nextStep();
-          }
-      }
+              fixes.push(new validationIssueFix({
+                  title: t('issues.fix.connect_endpoints.title'),
+                  onClick: connectEndpointsOnClick
+              }));
 
+              fixes.push(new validationIssueFix({
+                  icon: 'iD-operation-delete',
+                  title: t('issues.fix.remove_tag.title'),
+                  onClick: function() {
+                      var entity = this.issue.entities[0];
+                      var tags = clone(entity.tags);
+                      for (var key in tagSuggestingArea) {
+                          delete tags[key];
+                      }
+                      context.perform(
+                          actionChangeTags(entity.id, tags),
+                          t('issues.fix.remove_tag.annotation')
+                      );
+                  }
+              }));
 
-      function updateLine() {
-          context.history().reset('doneAddLine');
-          if (!context.hasEntity(woodRoadID) || !context.hasEntity(woodRoadEndID)) {
-              return chapter.restart();
+              var featureLabel = utilDisplayLabel(entity, context);
+              issues.push(new validationIssue({
+                  type: type,
+                  severity: 'warning',
+                  message: t('issues.tag_suggests_area.message', { feature: featureLabel, tag: tagText }),
+                  tooltip: t('issues.tag_suggests_area.tip'),
+                  entities: [entity],
+                  fixes: fixes
+              }));
           }
 
-          var msec = transitionTime(woodRoadDragMidpoint, context.map().center());
-          if (msec) { reveal(null, null, { duration: 0 }); }
-          context.map().centerZoomEase(woodRoadDragMidpoint, 19, msec);
+          return issues;
+      };
 
-          timeout(function() {
-              var padding = 250 * Math.pow(2, context.map().zoom() - 19);
-              var box = pad$1(woodRoadDragMidpoint, padding, context);
-              var advance = function() { continueTo(addNode); };
+      validation.type = type;
 
-              reveal(box, t('intro.lines.update_line'),
-                  { buttonText: t('intro.ok'), buttonCallback: advance }
-              );
+      return validation;
+  }
 
-              context.map().on('move.intro drawn.intro', function() {
-                  var padding = 250 * Math.pow(2, context.map().zoom() - 19);
-                  var box = pad$1(woodRoadDragMidpoint, padding, context);
-                  reveal(box, t('intro.lines.update_line'),
-                      { duration: 0, buttonText: t('intro.ok'), buttonCallback: advance }
-                  );
-              });
-          }, msec + 100);
 
-          function continueTo(nextStep) {
-              context.map().on('move.intro drawn.intro', null);
-              nextStep();
+
+  var Validations = /*#__PURE__*/Object.freeze({
+    validationAlmostJunction: validationAlmostJunction,
+    validationCrossingWays: validationCrossingWays,
+    validationDeprecatedTag: validationDeprecatedTag,
+    validationDisconnectedWay: validationDisconnectedWay,
+    validationGenericName: validationGenericName,
+    validationManyDeletions: validationManyDeletions,
+    validationMaprules: validationMaprules,
+    validationMissingTag: validationMissingTag,
+    validationOldMultipolygon: validationOldMultipolygon,
+    validationTagSuggestsArea: validationTagSuggestsArea
+  });
+
+  function coreValidator(context) {
+      var dispatch$1 = dispatch('reload');
+      var self = {};
+      var _issues = [];
+      var _issuesByEntityID = {};
+
+      var validations = filter(Validations, isFunction).reduce(function(obj, validation) {
+          var func = validation();
+          obj[func.type] = func;
+          return obj;
+      }, {});
+
+      var entityValidationIDs = [];
+      var changesValidationIDs = [];
+
+      for (var key in validations) {
+          var validation = validations[key];
+          if (validation.inputType && validation.inputType === 'changes') {
+              changesValidationIDs.push(key);
+          } else {
+              entityValidationIDs.push(key);
           }
       }
 
+      //self.featureApplicabilityOptions = ['edited', 'all'];
 
-      function addNode() {
-          context.history().reset('doneAddLine');
-          if (!context.hasEntity(woodRoadID) || !context.hasEntity(woodRoadEndID)) {
-              return chapter.restart();
-          }
+      /*var featureApplicability = context.storage('issue-features') || 'edited';
 
-          var padding = 40 * Math.pow(2, context.map().zoom() - 19);
-          var box = pad$1(woodRoadAddNode, padding, context);
-          reveal(box, t('intro.lines.add_node'));
+      self.getFeatureApplicability = function() {
+          return featureApplicability;
+      };
 
-          context.map().on('move.intro drawn.intro', function() {
-              var padding = 40 * Math.pow(2, context.map().zoom() - 19);
-              var box = pad$1(woodRoadAddNode, padding, context);
-              reveal(box, t('intro.lines.add_node'), { duration: 0 });
-          });
+      self.setFeatureApplicability = function(applicability) {
+          featureApplicability = applicability;
+          context.storage('issue-features', applicability);
+      };*/
 
-          context.history().on('change.intro', function(changed) {
-              if (!context.hasEntity(woodRoadID) || !context.hasEntity(woodRoadEndID)) {
-                  return continueTo(updateLine);
-              }
-              if (changed.created().length === 1) {
-                  timeout(function() { continueTo(startDragEndpoint); }, 500);
-              }
-          });
+      self.getIssues = function() {
+          return _issues;
+      };
 
-          context.on('enter.intro', function(mode) {
-              if (mode.id !== 'select') {
-                  continueTo(updateLine);
-              }
-          });
+      self.getWarnings = function() {
+          return _issues.filter(function(d) { return d.severity === 'warning'; });
+      };
 
-          function continueTo(nextStep) {
-              context.map().on('move.intro drawn.intro', null);
-              context.history().on('change.intro', null);
-              context.on('enter.intro', null);
-              nextStep();
-          }
-      }
+      self.getErrors = function() {
+          return _issues.filter(function(d) { return d.severity === 'error'; });
+      };
 
+      self.getIssuesForEntityWithID = function(entityID) {
+          if (!context.hasEntity(entityID)) return [];
+          var entity = context.entity(entityID);
+          var key = osmEntity.key(entity);
 
-      function startDragEndpoint() {
-          if (!context.hasEntity(woodRoadID) || !context.hasEntity(woodRoadEndID)) {
-              return continueTo(updateLine);
+          if (!_issuesByEntityID[key]) {
+              _issuesByEntityID[key] = validateEntity(entity);
           }
-          var padding = 100 * Math.pow(2, context.map().zoom() - 19);
-          var box = pad$1(woodRoadDragEndpoint, padding, context);
-          reveal(box, t('intro.lines.start_drag_endpoint'));
+          return _issuesByEntityID[key];
+      };
 
-          context.map().on('move.intro drawn.intro', function() {
-              if (!context.hasEntity(woodRoadID) || !context.hasEntity(woodRoadEndID)) {
-                  return continueTo(updateLine);
-              }
-              var padding = 100 * Math.pow(2, context.map().zoom() - 19);
-              var box = pad$1(woodRoadDragEndpoint, padding, context);
-              reveal(box, t('intro.lines.start_drag_endpoint'), { duration: 0 });
 
-              var entity = context.entity(woodRoadEndID);
-              if (geoSphericalDistance(entity.loc, woodRoadDragEndpoint) <= 4) {
-                  continueTo(finishDragEndpoint);
-              }
-          });
+      function validateEntity(entity) {
+          var _issues = [];
+          var ran = {};
 
-          function continueTo(nextStep) {
-              context.map().on('move.intro drawn.intro', null);
-              nextStep();
-          }
-      }
+          // runs validation and appends resulting issues, returning true if validation passed
+          function runValidation(which) {
+              if (ran[which]) return true;
 
+              var fn = validations[which];
+              var typeIssues = fn(entity, context);
+              _issues = _issues.concat(typeIssues);
+              ran[which] = true;   // mark this validation as having run
+              return !typeIssues.length;
+          }
 
-      function finishDragEndpoint() {
-          if (!context.hasEntity(woodRoadID) || !context.hasEntity(woodRoadEndID)) {
-              return continueTo(updateLine);
+          if (entity.type === 'relation') {
+              if (!runValidation('old_multipolygon')) {
+                  // don't flag missing tags if they are on the outer way
+                  ran.missing_tag = true;
+              }
           }
 
-          var padding = 100 * Math.pow(2, context.map().zoom() - 19);
-          var box = pad$1(woodRoadDragEndpoint, padding, context);
-          reveal(box, t('intro.lines.finish_drag_endpoint'));
+          // other validations require feature to be tagged
+          if (!runValidation('missing_tag')) return _issues;
 
-          context.map().on('move.intro drawn.intro', function() {
-              if (!context.hasEntity(woodRoadID) || !context.hasEntity(woodRoadEndID)) {
-                  return continueTo(updateLine);
-              }
-              var padding = 100 * Math.pow(2, context.map().zoom() - 19);
-              var box = pad$1(woodRoadDragEndpoint, padding, context);
-              reveal(box, t('intro.lines.finish_drag_endpoint'), { duration: 0 });
+          if (entity.type === 'way') {
+              runValidation('crossing_ways');
 
-              var entity = context.entity(woodRoadEndID);
-              if (geoSphericalDistance(entity.loc, woodRoadDragEndpoint) > 4) {
-                  continueTo(startDragEndpoint);
+              // only check for disconnected way if no almost junctions
+              if (runValidation('almost_junction')) {
+                  runValidation('disconnected_way');
+              } else {
+                  ran.disconnected_way = true;
               }
-          });
-
-          context.on('enter.intro', function() {
-              continueTo(startDragMidpoint);
-          });
 
-          function continueTo(nextStep) {
-              context.map().on('move.intro drawn.intro', null);
-              context.on('enter.intro', null);
-              nextStep();
+              runValidation('tag_suggests_area');
           }
-      }
 
+          // run all validations not yet run manually
+          entityValidationIDs.forEach(runValidation);
 
-      function startDragMidpoint() {
-          if (!context.hasEntity(woodRoadID) || !context.hasEntity(woodRoadEndID)) {
-              return continueTo(updateLine);
-          }
-          if (context.selectedIDs().indexOf(woodRoadID) === -1) {
-              context.enter(modeSelect(context, [woodRoadID]));
-          }
+          return _issues;
+      }
 
-          var padding = 80 * Math.pow(2, context.map().zoom() - 19);
-          var box = pad$1(woodRoadDragMidpoint, padding, context);
-          reveal(box, t('intro.lines.start_drag_midpoint'));
 
-          context.map().on('move.intro drawn.intro', function() {
-              if (!context.hasEntity(woodRoadID) || !context.hasEntity(woodRoadEndID)) {
-                  return continueTo(updateLine);
-              }
-              var padding = 80 * Math.pow(2, context.map().zoom() - 19);
-              var box = pad$1(woodRoadDragMidpoint, padding, context);
-              reveal(box, t('intro.lines.start_drag_midpoint'), { duration: 0 });
-          });
+      self.validate = function() {
+          _issuesByEntityID = {};   // clear cached
+          _issues = [];
 
-          context.history().on('change.intro', function(changed) {
-              if (changed.created().length === 1) {
-                  continueTo(continueDragMidpoint);
-              }
-          });
+          var history = context.history();
+          var changes = history.changes();
+          var entitiesToCheck = changes.created.concat(changes.modified);
+          var graph = history.graph();
 
-          context.on('enter.intro', function(mode) {
-              if (mode.id !== 'select') {
-                  // keep Wood Road selected so midpoint triangles are drawn..
-                  context.enter(modeSelect(context, [woodRoadID]));
+          _issues = flatten(map$3(changesValidationIDs, function(ruleID) {
+              var validation = validations[ruleID];
+              return validation(changes, context);
+          }));
+
+          entitiesToCheck = uniq(flattenDeep(map$3(entitiesToCheck, function(entity) {
+              var entities = [entity];
+              if (entity.type === 'node') {  // validate ways if their nodes have changed
+                  entities = entities.concat(graph.parentWays(entity));
               }
-          });
+              entities = map$3(entities, function(entity) {
+                  if (entity.type !== 'relation') {  // validate relations if their geometries have changed
+                      return [entity].concat(graph.parentRelations(entity));
+                  }
+                  return entity;
+              });
+              return entities;
+          })));
 
-          function continueTo(nextStep) {
-              context.map().on('move.intro drawn.intro', null);
-              context.history().on('change.intro', null);
-              context.on('enter.intro', null);
-              nextStep();
+          for (var entityIndex in entitiesToCheck) {
+              var entity = entitiesToCheck[entityIndex];
+              var entityIssues = validateEntity(entity);
+              _issuesByEntityID[entity.id] = entityIssues;
+              _issues = _issues.concat(entityIssues);
           }
-      }
 
+          _issues = uniqWith(_issues, function(issue1, issue2) {
+              return issue1.id() === issue2.id();
+          });
 
-      function continueDragMidpoint() {
-          if (!context.hasEntity(woodRoadID) || !context.hasEntity(woodRoadEndID)) {
-              return continueTo(updateLine);
-          }
+          dispatch$1.call('reload', self, _issues);
+      };
 
-          var padding = 100 * Math.pow(2, context.map().zoom() - 19);
-          var box = pad$1(woodRoadDragEndpoint, padding, context);
-          box.height += 400;
+      return utilRebind(self, dispatch$1, 'on');
+  }
 
-          var advance = function() {
-              context.history().checkpoint('doneUpdateLine');
-              continueTo(deleteLines);
-          };
 
-          reveal(box, t('intro.lines.continue_drag_midpoint'),
-              { buttonText: t('intro.ok'), buttonCallback: advance }
-          );
+  function validationIssue(attrs) {
+      this.type = attrs.type;                // required
+      this.severity = attrs.severity;        // required - 'warning' or 'error'
+      this.message = attrs.message;          // required - localized string
+      this.tooltip = attrs.tooltip;          // required - localized string
+      this.entities = attrs.entities;        // optional - array of entities
+      this.loc = attrs.loc;                  // optional - expect a [lon, lat] array
+      this.info = attrs.info;                // optional - object containing arbitrary extra information
+      this.fixes = attrs.fixes;              // optional - array of validationIssueFix objects
+      this.hash = attrs.hash;                // optional - string to further differentiate the issue
 
-          context.map().on('move.intro drawn.intro', function() {
-              if (!context.hasEntity(woodRoadID) || !context.hasEntity(woodRoadEndID)) {
-                  return continueTo(updateLine);
-              }
-              var padding = 100 * Math.pow(2, context.map().zoom() - 19);
-              var box = pad$1(woodRoadDragEndpoint, padding, context);
-              box.height += 400;
-              reveal(box, t('intro.lines.continue_drag_midpoint'),
-                  { duration: 0, buttonText: t('intro.ok'), buttonCallback: advance }
-              );
-          });
+      // A unique, deterministic string hash.
+      // Issues with identical id values are considered identical.
+      this.id = function() {
+          var id = this.type;
 
-          function continueTo(nextStep) {
-              context.map().on('move.intro drawn.intro', null);
-              nextStep();
+          if (this.hash) {   // subclasses can pass in their own differentiator
+              id += this.hash;
           }
-      }
 
+          // factor in the entities this issue is for
+          // (sort them so the id is deterministic)
+          var entityKeys = this.entities.map(osmEntity.key);
+          id += entityKeys.sort().join();
 
-      function deleteLines() {
-          context.history().reset('doneUpdateLine');
-          context.enter(modeBrowse(context));
+          // factor in loc since two separate issues can have an
+          // idential type and entities, e.g. in crossing_ways
+          if (this.loc) {
+              id += this.loc.join();
+          }
+          return id;
+      };
 
-          if (!context.hasEntity(washingtonStreetID) ||
-              !context.hasEntity(twelfthAvenueID) ||
-              !context.hasEntity(eleventhAvenueEndID)) {
-              return chapter.restart();
+
+      this.extent = function(resolver) {
+          if (this.loc) {
+              return geoExtent(this.loc);
           }
+          if (this.entities && this.entities.length) {
+              return this.entities.reduce(function(extent, entity) {
+                  return extent.extend(entity.extent(resolver));
+              }, geoExtent());
+          }
+          return null;
+      };
 
-          var msec = transitionTime(deleteLinesLoc, context.map().center());
-          if (msec) { reveal(null, null, { duration: 0 }); }
-          context.map().centerZoomEase(deleteLinesLoc, 18, msec);
 
-          timeout(function() {
-              var padding = 200 * Math.pow(2, context.map().zoom() - 18);
-              var box = pad$1(deleteLinesLoc, padding, context);
-              box.top -= 200;
-              box.height += 400;
-              var advance = function() { continueTo(rightClickIntersection); };
+      if (this.fixes) {   // add a reference in the fixes to the issue for use in fix actions
+          for (var i = 0; i < this.fixes.length; i++) {
+              this.fixes[i].issue = this;
+          }
+      }
+  }
 
-              reveal(box, t('intro.lines.delete_lines', { street: t('intro.graph.name.12th-avenue') }),
-                  { buttonText: t('intro.ok'), buttonCallback: advance }
-              );
 
-              context.map().on('move.intro drawn.intro', function() {
-                  var padding = 200 * Math.pow(2, context.map().zoom() - 18);
-                  var box = pad$1(deleteLinesLoc, padding, context);
-                  box.top -= 200;
-                  box.height += 400;
-                  reveal(box, t('intro.lines.delete_lines', { street: t('intro.graph.name.12th-avenue') }),
-                      { duration: 0, buttonText: t('intro.ok'), buttonCallback: advance }
-                  );
-              });
+  function validationIssueFix(attrs) {
+      this.icon = attrs.icon;
+      this.title = attrs.title;
+      this.onClick = attrs.onClick;
+      this.entityIds = attrs.entityIds || [];  // Used for hover-higlighting.
+      this.issue = null;    // the issue this fix is for
+  }
 
-              context.history().on('change.intro', function() {
-                  timeout(function() {
-                      continueTo(deleteLines);
-                  }, 500);  // after any transition (e.g. if user deleted intersection)
-              });
+  var buildRuleChecks = function() {
+      return {
+          equals: function (equals) {
+              return function(tags) {
+                  return isMatch(tags, equals);
+              };
+          },
+          notEquals: function (notEquals) {
+              return function(tags) {
+                  return !isMatch(tags, notEquals);
+              };
+          },
+          absence: function(absence) {
+              return function(tags) {
+                  return Object.keys(tags).indexOf(absence) === -1;
+              };
+          },
+          presence: function(presence) {
+              return function(tags) {
+                  return Object.keys(tags).indexOf(presence) > -1;
+              };
+          },
+          greaterThan: function(greaterThan) {
+              var key = Object.keys(greaterThan)[0];
+              var value = greaterThan[key];
 
-          }, msec + 100);
+              return function(tags) {
+                  return tags[key] > value;
+              };
+          },
+          greaterThanEqual: function(greaterThanEqual) {
+              var key = Object.keys(greaterThanEqual)[0];
+              var value = greaterThanEqual[key];
 
-          function continueTo(nextStep) {
-              context.map().on('move.intro drawn.intro', null);
-              context.history().on('change.intro', null);
-              nextStep();
-          }
-      }
+              return function(tags) {
+                  return tags[key] >= value;
+              };
+          },
+          lessThan: function(lessThan) {
+              var key = Object.keys(lessThan)[0];
+              var value = lessThan[key];
 
+              return function(tags) {
+                  return tags[key] < value;
+              };
+          },
+          lessThanEqual: function(lessThanEqual) {
+              var key = Object.keys(lessThanEqual)[0];
+              var value = lessThanEqual[key];
 
-      function rightClickIntersection() {
-          context.history().reset('doneUpdateLine');
-          context.enter(modeBrowse(context));
+              return function(tags) {
+                  return tags[key] <= value;
+              };
+          },
+          positiveRegex: function(positiveRegex) {
+              var tagKey = Object.keys(positiveRegex)[0];
+              var expression = positiveRegex[tagKey].join('|');
+              var regex = new RegExp(expression);
 
-          context.map().centerZoomEase(eleventhAvenueEnd, 18, 500);
+              return function(tags) {
+                  return regex.test(tags[tagKey]);
+              };
+          },
+          negativeRegex: function(negativeRegex) {
+              var tagKey = Object.keys(negativeRegex)[0];
+              var expression = negativeRegex[tagKey].join('|');
+              var regex = new RegExp(expression);
 
-          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',
-                  { street1: t('intro.graph.name.11th-avenue'), street2: t('intro.graph.name.washington-street') })
-              );
+              return function(tags) {
+                  return !regex.test(tags[tagKey]);
+              };
+          }
+      };
+  };
 
-              context.map().on('move.intro drawn.intro', 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',
-                      { street1: t('intro.graph.name.11th-avenue'), street2: t('intro.graph.name.washington-street') }),
-                      { duration: 0 }
-                  );
-              });
+  var buildLineKeys = function() {
+      return {
+          highway: {
+              rest_area: true,
+              services: true
+          },
+          railway: {
+              roundhouse: true,
+              station: true,
+              traverser: true,
+              turntable: true,
+              wash: true
+          }
+      };
+  };
 
-              context.on('enter.intro', function(mode) {
-                  if (mode.id !== 'select') return;
-                  var ids = context.selectedIDs();
-                  if (ids.length !== 1 || ids[0] !== eleventhAvenueEndID) return;
+  var serviceMapRules = {
+      init: function() {
+          this._ruleChecks  = buildRuleChecks();
+          this._validationRules = [];
+          this._areaKeys = areaKeys;
+          this._lineKeys = buildLineKeys();
+      },
 
-                  timeout(function() {
-                      var node = selectMenuItem('split').node();
-                      if (!node) return;
-                      continueTo(splitIntersection);
-                  }, 300);  // after menu visible
+      // list of rules only relevant to tag checks...
+      filterRuleChecks: function(selector) {
+          var _ruleChecks = this._ruleChecks;
+          return reduce(Object.keys(selector), function(rules, key) {
+              if (['geometry', 'error', 'warning'].indexOf(key) === -1) {
+                  rules.push(_ruleChecks[key](selector[key]));
+              }
+              return rules;
+          }, []);
+      },
+
+      // builds tagMap from mapcss-parse selector object...
+      buildTagMap: function(selector) {
+          var getRegexValues = function(regexes) {
+              return regexes.map(function(regex) {
+                  return regex.replace(/\$|\^/g, '');
               });
+          };
 
-              context.history().on('change.intro', function() {
-                  timeout(function() {
-                      continueTo(deleteLines);
-                  }, 300);  // after any transition (e.g. if user deleted intersection)
-              });
+          var selectorKeys = Object.keys(selector);
+          var tagMap = reduce(selectorKeys, function (expectedTags, key) {
+              var values;
+              var isRegex = /regex/gi.test(key);
+              var isEqual = /equals/gi.test(key);
 
-          }, 600);
+              if (isRegex || isEqual) {
+                  Object.keys(selector[key]).forEach(function(selectorKey) {
+                      values = isEqual ? [selector[key][selectorKey]] : getRegexValues(selector[key][selectorKey]);
 
-          function continueTo(nextStep) {
-              context.map().on('move.intro drawn.intro', null);
-              context.on('enter.intro', null);
-              context.history().on('change.intro', null);
-              nextStep();
-          }
-      }
+                      if (expectedTags.hasOwnProperty(selectorKey)) {
+                          values = values.concat(expectedTags[selectorKey]);
+                      }
 
+                      expectedTags[selectorKey] = values;
+                  });
 
-      function splitIntersection() {
-          if (!context.hasEntity(washingtonStreetID) ||
-              !context.hasEntity(twelfthAvenueID) ||
-              !context.hasEntity(eleventhAvenueEndID)) {
-              return continueTo(deleteLines);
-          }
+              } else if (/(greater|less)Than(Equal)?|presence/g.test(key)) {
+                  var tagKey = /presence/.test(key) ? selector[key] : Object.keys(selector[key])[0];
 
-          var node = selectMenuItem('split').node();
-          if (!node) { return continueTo(rightClickIntersection); }
+                  values = [selector[key][tagKey]];
 
-          var wasChanged = false;
-          var menuCoords = context.map().mouseCoordinates();
-          _washingtonSegmentID = null;
+                  if (expectedTags.hasOwnProperty(tagKey)) {
+                      values = values.concat(expectedTags[tagKey]);
+                  }
 
-          revealEditMenu(menuCoords, t('intro.lines.split_intersection',
-              { button: icon('#iD-operation-split', 'pre-text'), street: t('intro.graph.name.washington-street') })
-          );
+                  expectedTags[tagKey] = values;
+              }
 
-          context.map().on('move.intro drawn.intro', function() {
-              var node = selectMenuItem('split').node();
-              if (!wasChanged && !node) { return continueTo(rightClickIntersection); }
+              return expectedTags;
+          }, {});
 
-              revealEditMenu(menuCoords, t('intro.lines.split_intersection',
-                  { button: icon('#iD-operation-split', 'pre-text'), street: t('intro.graph.name.washington-street') }),
-                  { duration: 0 }
-              );
-          });
+          return tagMap;
+      },
 
-          context.history().on('change.intro', function(changed) {
-              wasChanged = true;
-              timeout(function() {
-                  if (context.history().undoAnnotation() === t('operations.split.annotation.line')) {
-                      _washingtonSegmentID = changed.created()[0].id;
-                      continueTo(didSplit);
-                  } else {
-                      _washingtonSegmentID = null;
-                      continueTo(retrySplit);
-                  }
-              }, 300);  // after any transition (e.g. if user deleted intersection)
-          });
+      // inspired by osmWay#isArea()
+      inferGeometry: function(tagMap) {
+          var _lineKeys = this._lineKeys;
+          var _areaKeys = this._areaKeys;
 
-          function continueTo(nextStep) {
-              context.map().on('move.intro drawn.intro', null);
-              context.history().on('change.intro', null);
-              nextStep();
+          var isAreaKeyBlackList = function(key) {
+              return intersection(tagMap[key], Object.keys(_areaKeys[key])).length > 0;
+          };
+          var isLineKeysWhiteList = function(key) {
+              return intersection(tagMap[key], Object.keys(_lineKeys[key])).length > 0;
+          };
+
+          if (tagMap.hasOwnProperty('area')) {
+              if (tagMap.area.indexOf('yes') > -1) {
+                  return 'area';
+              }
+              if (tagMap.area.indexOf('no') > -1) {
+                  return 'line';
+              }
           }
-      }
 
+          for (var key in tagMap) {
+              if (key in _areaKeys && !isAreaKeyBlackList(key)) {
+                  return 'area';
+              }
+              if (key in _lineKeys && isLineKeysWhiteList(key)) {
+                  return 'area';
+              }
+          }
 
-      function retrySplit() {
-          context.enter(modeBrowse(context));
-          context.map().centerZoomEase(eleventhAvenueEnd, 18, 500);
-          var advance = function() { continueTo(rightClickIntersection); };
+          return 'line';
+      },
 
-          var padding = 60 * Math.pow(2, context.map().zoom() - 18);
-          var box = pad$1(eleventhAvenueEnd, padding, context);
-          reveal(box, t('intro.lines.retry_split'),
-              { buttonText: t('intro.ok'), buttonCallback: advance }
-          );
+      // adds from mapcss-parse selector check...
+      addRule: function(selector) {
+          var rule = {
+              // checks relevant to mapcss-selector
+              checks: this.filterRuleChecks(selector),
+              // true if all conditions for a tag error are true..
+              matches: function(entity) {
+                  return every(this.checks, function(check) {
+                      return check(entity.tags);
+                  });
+              },
+              // borrowed from Way#isArea()
+              inferredGeometry: this.inferGeometry(this.buildTagMap(selector), this._areaKeys),
+              geometryMatches: function(entity, graph) {
+                  if (entity.type === 'node' || entity.type === 'relation') {
+                      return selector.geometry === entity.type;
+                  } else if (entity.type === 'way') {
+                      return this.inferredGeometry === entity.geometry(graph);
+                  }
+              },
+              // when geometries match and tag matches are present, return a warning...
+              findIssues: function (entity, graph, issues) {
+                  if (this.geometryMatches(entity, graph) && this.matches(entity)) {
+                      var severity = Object.keys(selector).indexOf('error') > -1
+                              ? 'error'
+                              : 'warning';
+                      issues.push(new validationIssue({
+                          type: 'maprules',
+                          severity: severity,
+                          message: selector[severity],
+                          entities: [entity],
+                      }));
+                  }
+              }
+          };
+          this._validationRules.push(rule);
+      },
 
-          context.map().on('move.intro drawn.intro', function() {
-              var padding = 60 * Math.pow(2, context.map().zoom() - 18);
-              var box = pad$1(eleventhAvenueEnd, padding, context);
-              reveal(box, t('intro.lines.retry_split'),
-                  { duration: 0, buttonText: t('intro.ok'), buttonCallback: advance }
-              );
-          });
+      clearRules: function() { this._validationRules = []; },
 
-          function continueTo(nextStep) {
-              context.map().on('move.intro drawn.intro', null);
-              nextStep();
-          }
-      }
+      // returns validationRules...
+      validationRules: function() { return this._validationRules; },
 
+      // returns ruleChecks
+      ruleChecks: function() { return this._ruleChecks; }
+  };
 
-      function didSplit() {
-          if (!_washingtonSegmentID ||
-              !context.hasEntity(_washingtonSegmentID) ||
-              !context.hasEntity(washingtonStreetID) ||
-              !context.hasEntity(twelfthAvenueID) ||
-              !context.hasEntity(eleventhAvenueEndID)) {
-              return continueTo(rightClickIntersection);
-          }
+  var apibase$1 = 'https://nominatim.openstreetmap.org/',
+      inflight = {},
+      nominatimCache;
 
-          var ids = context.selectedIDs();
-          var string = 'intro.lines.did_split_' + (ids.length > 1 ? 'multi' : 'single');
-          var street = t('intro.graph.name.washington-street');
 
-          var padding = 200 * Math.pow(2, context.map().zoom() - 18);
-          var box = pad$1(twelfthAvenue, padding, context);
-          box.width = box.width / 2;
-          reveal(box, t(string, { street1: street, street2: street }),
-              { duration: 500 }
-          );
+  var serviceNominatim = {
 
-          timeout(function() {
-              context.map().centerZoomEase(twelfthAvenue, 18, 500);
+      init: function() {
+          inflight = {};
+          nominatimCache = rbush_1();
+      },
 
-              context.map().on('move.intro drawn.intro', function() {
-                  var padding = 200 * Math.pow(2, context.map().zoom() - 18);
-                  var box = pad$1(twelfthAvenue, padding, context);
-                  box.width = box.width / 2;
-                  reveal(box, t(string, { street1: street, street2: street }),
-                      { duration: 0 }
-                  );
-              });
-          }, 600);  // after initial reveal and curtain cut
+      reset: function() {
+          forEach(inflight, function(req) { req.abort(); });
+          inflight = {};
+          nominatimCache = rbush_1();
+      },
 
-          context.on('enter.intro', function() {
-              var ids = context.selectedIDs();
-              if (ids.length === 1 && ids[0] === _washingtonSegmentID) {
-                  continueTo(multiSelect);
-              }
-          });
 
-          context.history().on('change.intro', function() {
-              if (!_washingtonSegmentID ||
-                  !context.hasEntity(_washingtonSegmentID) ||
-                  !context.hasEntity(washingtonStreetID) ||
-                  !context.hasEntity(twelfthAvenueID) ||
-                  !context.hasEntity(eleventhAvenueEndID)) {
-                  return continueTo(rightClickIntersection);
+      countryCode: function (location, callback) {
+          this.reverse(location, function(err, result) {
+              if (err) {
+                  return callback(err);
+              } else if (result.address) {
+                  return callback(null, result.address.country_code);
+              } else {
+                  return callback('Unable to geocode', null);
               }
           });
+      },
 
-          function continueTo(nextStep) {
-              context.map().on('move.intro drawn.intro', null);
-              context.on('enter.intro', null);
-              context.history().on('change.intro', null);
-              nextStep();
-          }
-      }
 
+      reverse: function (location, callback) {
+          var cached = nominatimCache.search(
+              { minX: location[0], minY: location[1], maxX: location[0], maxY: location[1] }
+          );
 
-      function multiSelect() {
-          if (!_washingtonSegmentID ||
-              !context.hasEntity(_washingtonSegmentID) ||
-              !context.hasEntity(washingtonStreetID) ||
-              !context.hasEntity(twelfthAvenueID) ||
-              !context.hasEntity(eleventhAvenueEndID)) {
-              return continueTo(rightClickIntersection);
+          if (cached.length > 0) {
+              return callback(null, cached[0].data);
           }
 
-          var ids = context.selectedIDs();
-          var hasWashington = ids.indexOf(_washingtonSegmentID) !== -1;
-          var hasTwelfth = ids.indexOf(twelfthAvenueID) !== -1;
-
-          if (hasWashington && hasTwelfth) {
-              return continueTo(multiRightClick);
-          } else if (!hasWashington && !hasTwelfth) {
-              return continueTo(didSplit);
-          }
+          var params = { zoom: 13, format: 'json', addressdetails: 1, lat: location[1], lon: location[0] };
+          var url = apibase$1 + 'reverse?' + utilQsString(params);
+          if (inflight[url]) return;
 
-          context.map().centerZoomEase(twelfthAvenue, 18, 500);
+          inflight[url] = d3_json(url, function(err, result) {
+              delete inflight[url];
 
-          timeout(function() {
-              var selected, other, padding, box;
-              if (hasWashington) {
-                  selected = t('intro.graph.name.washington-street');
-                  other = t('intro.graph.name.12th-avenue');
-                  padding = 60 * Math.pow(2, context.map().zoom() - 18);
-                  box = pad$1(twelfthAvenueEnd, padding, context);
-                  box.width *= 3;
-              } else {
-                  selected = t('intro.graph.name.12th-avenue');
-                  other = t('intro.graph.name.washington-street');
-                  padding = 200 * Math.pow(2, context.map().zoom() - 18);
-                  box = pad$1(twelfthAvenue, padding, context);
-                  box.width /= 2;
+              if (err) {
+                  return callback(err);
+              } else if (result && result.error) {
+                  return callback(result.error);
               }
 
-              reveal(box,
-                  t('intro.lines.multi_select', { selected: selected, other1: other, other2: other })
-              );
-
-              context.map().on('move.intro drawn.intro', function() {
-                  if (hasWashington) {
-                      selected = t('intro.graph.name.washington-street');
-                      other = t('intro.graph.name.12th-avenue');
-                      padding = 60 * Math.pow(2, context.map().zoom() - 18);
-                      box = pad$1(twelfthAvenueEnd, padding, context);
-                      box.width *= 3;
-                  } else {
-                      selected = t('intro.graph.name.12th-avenue');
-                      other = t('intro.graph.name.washington-street');
-                      padding = 200 * Math.pow(2, context.map().zoom() - 18);
-                      box = pad$1(twelfthAvenue, padding, context);
-                      box.width /= 2;
-                  }
+              var extent = geoExtent(location).padByMeters(200);
+              nominatimCache.insert(assign(extent.bbox(), {data: result}));
 
-                  reveal(box,
-                      t('intro.lines.multi_select', { selected: selected, other1: other, other2: other }),
-                      { duration: 0 }
-                  );
-              });
+              callback(null, result);
+          });
+      },
 
-              context.on('enter.intro', function() {
-                  continueTo(multiSelect);
-              });
 
-              context.history().on('change.intro', function() {
-                  if (!_washingtonSegmentID ||
-                      !context.hasEntity(_washingtonSegmentID) ||
-                      !context.hasEntity(washingtonStreetID) ||
-                      !context.hasEntity(twelfthAvenueID) ||
-                      !context.hasEntity(eleventhAvenueEndID)) {
-                      return continueTo(rightClickIntersection);
-                  }
-              });
-          }, 600);
+      search: function (val, callback) {
+          var searchVal = encodeURIComponent(val);
+          var url = apibase$1 + 'search/' + searchVal + '?limit=10&format=json';
+          if (inflight[url]) return;
 
-          function continueTo(nextStep) {
-              context.map().on('move.intro drawn.intro', null);
-              context.on('enter.intro', null);
-              context.history().on('change.intro', null);
-              nextStep();
-          }
+          inflight[url] = d3_json(url, function(err, result) {
+              delete inflight[url];
+              callback(err, result);
+          });
       }
 
+  };
 
-      function multiRightClick() {
-          if (!_washingtonSegmentID ||
-              !context.hasEntity(_washingtonSegmentID) ||
-              !context.hasEntity(washingtonStreetID) ||
-              !context.hasEntity(twelfthAvenueID) ||
-              !context.hasEntity(eleventhAvenueEndID)) {
-              return continueTo(rightClickIntersection);
-          }
+  var apibase$2 = 'https://openstreetcam.org';
+  var maxResults$1 = 1000;
+  var tileZoom$1 = 14;
+  var tiler$3 = utilTiler().zoomExtent([tileZoom$1, tileZoom$1]).skipNullIsland(true);
+  var dispatch$4 = dispatch('loadedImages');
+  var imgZoom = d3_zoom()
+      .extent([[0, 0], [320, 240]])
+      .translateExtent([[0, 0], [320, 240]])
+      .scaleExtent([1, 15])
+      .on('zoom', zoomPan);
+  var _oscCache;
+  var _oscSelectedImage;
 
-          var padding = 200 * Math.pow(2, context.map().zoom() - 18);
-          var box = pad$1(twelfthAvenue, padding, context);
-          reveal(box, t('intro.lines.multi_rightclick'));
 
-          context.map().on('move.intro drawn.intro', function() {
-              var padding = 200 * Math.pow(2, context.map().zoom() - 18);
-              var box = pad$1(twelfthAvenue, padding, context);
-              reveal(box, t('intro.lines.multi_rightclick'), { duration: 0 });
-          });
+  function abortRequest$3(i) {
+      i.abort();
+  }
 
-          select(window).on('click.intro contextmenu.intro', function() {
-              timeout(function() {
-                  var ids = context.selectedIDs();
-                  if (ids.length === 2 &&
-                      ids.indexOf(twelfthAvenueID) !== -1 &&
-                      ids.indexOf(_washingtonSegmentID) !== -1) {
-                          var node = selectMenuItem('delete').node();
-                          if (!node) return;
-                          continueTo(multiDelete);
-                  } else if (ids.length === 1 &&
-                      ids.indexOf(_washingtonSegmentID) !== -1) {
-                      return continueTo(multiSelect);
-                  } else {
-                      return continueTo(didSplit);
-                  }
-              }, 300);  // after edit menu visible
-          }, true);
 
-          context.history().on('change.intro', function() {
-              if (!_washingtonSegmentID ||
-                  !context.hasEntity(_washingtonSegmentID) ||
-                  !context.hasEntity(washingtonStreetID) ||
-                  !context.hasEntity(twelfthAvenueID) ||
-                  !context.hasEntity(eleventhAvenueEndID)) {
-                  return continueTo(rightClickIntersection);
-              }
-          });
+  function maxPageAtZoom$1(z) {
+      if (z < 15)   return 2;
+      if (z === 15) return 5;
+      if (z === 16) return 10;
+      if (z === 17) return 20;
+      if (z === 18) return 40;
+      if (z > 18)   return 80;
+  }
 
-          function continueTo(nextStep) {
-              context.map().on('move.intro drawn.intro', null);
-              select(window).on('click.intro contextmenu.intro', null, true);
-              context.history().on('change.intro', null);
-              nextStep();
-          }
-      }
 
+  function loadTiles$1(which, url, projection) {
+      var currZoom = Math.floor(geoScaleToZoom(projection.scale()));
+      var tiles = tiler$3.getTiles(projection);
 
-      function multiDelete() {
-          if (!_washingtonSegmentID ||
-              !context.hasEntity(_washingtonSegmentID) ||
-              !context.hasEntity(washingtonStreetID) ||
-              !context.hasEntity(twelfthAvenueID) ||
-              !context.hasEntity(eleventhAvenueEndID)) {
-              return continueTo(rightClickIntersection);
+      // abort inflight requests that are no longer needed
+      var cache = _oscCache[which];
+      forEach(cache.inflight, function(v, k) {
+          var wanted = find$1(tiles, function(tile) { return k.indexOf(tile.id + ',') === 0; });
+
+          if (!wanted) {
+              abortRequest$3(v);
+              delete cache.inflight[k];
           }
+      });
 
-          var node = selectMenuItem('delete').node();
-          if (!node) return continueTo(multiRightClick);
+      tiles.forEach(function(tile) {
+          loadNextTilePage$1(which, currZoom, url, tile);
+      });
+  }
 
-          var menuCoords = context.map().mouseCoordinates();
-          revealEditMenu(menuCoords,
-              t('intro.lines.multi_delete', { button: icon('#iD-operation-delete', 'pre-text') })
-          );
 
-          context.map().on('move.intro drawn.intro', function() {
-              revealEditMenu(menuCoords,
-                  t('intro.lines.multi_delete', { button: icon('#iD-operation-delete', 'pre-text') }),
-                  { duration: 0 }
-              );
-          });
+  function loadNextTilePage$1(which, currZoom, url, tile) {
+      var cache = _oscCache[which];
+      var bbox = tile.extent.bbox();
+      var maxPages = maxPageAtZoom$1(currZoom);
+      var nextPage = cache.nextPage[tile.id] || 1;
+      var params = utilQsString({
+          ipp: maxResults$1,
+          page: nextPage,
+          // client_id: clientId,
+          bbTopLeft: [bbox.maxY, bbox.minX].join(','),
+          bbBottomRight: [bbox.minY, bbox.maxX].join(',')
+      }, true);
 
-          context.on('exit.intro', function() {
-              if (context.hasEntity(_washingtonSegmentID) || context.hasEntity(twelfthAvenueID)) {
-                  return continueTo(multiSelect);  // left select mode but roads still exist
+      if (nextPage > maxPages) return;
+
+      var id = tile.id + ',' + String(nextPage);
+      if (cache.loaded[id] || cache.inflight[id]) return;
+
+      cache.inflight[id] = request(url)
+          .mimeType('application/json')
+          .header('Content-type', 'application/x-www-form-urlencoded')
+          .response(function(xhr) { return JSON.parse(xhr.responseText); })
+          .post(params, function(err, data) {
+              cache.loaded[id] = true;
+              delete cache.inflight[id];
+              if (err || !data.currentPageItems || !data.currentPageItems.length) return;
+
+              function localeDateString(s) {
+                  if (!s) return null;
+                  var detected = utilDetect();
+                  var options = { day: 'numeric', month: 'short', year: 'numeric' };
+                  var d = new Date(s);
+                  if (isNaN(d.getTime())) return null;
+                  return d.toLocaleDateString(detected.locale, options);
               }
-          });
 
-          context.history().on('change.intro', function() {
-              if (context.hasEntity(_washingtonSegmentID) || context.hasEntity(twelfthAvenueID)) {
-                  continueTo(retryDelete);         // changed something but roads still exist
+              var features = data.currentPageItems.map(function(item) {
+                  var loc = [+item.lng, +item.lat];
+                  var d;
+
+                  if (which === 'images') {
+                      d = {
+                          loc: loc,
+                          key: item.id,
+                          ca: +item.heading,
+                          captured_at: localeDateString(item.shot_date || item.date_added),
+                          captured_by: item.username,
+                          imagePath: item.lth_name,
+                          sequence_id: item.sequence_id,
+                          sequence_index: +item.sequence_index
+                      };
+
+                      // cache sequence info
+                      var seq = _oscCache.sequences[d.sequence_id];
+                      if (!seq) {
+                          seq = { rotation: 0, images: [] };
+                          _oscCache.sequences[d.sequence_id] = seq;
+                      }
+                      seq.images[d.sequence_index] = d;
+                  }
+
+                  return {
+                      minX: loc[0], minY: loc[1], maxX: loc[0], maxY: loc[1], data: d
+                  };
+              });
+
+              cache.rtree.load(features);
+
+              if (which === 'images') {
+                  dispatch$4.call('loadedImages');
+              }
+
+              if (data.currentPageItems.length === maxResults$1) {  // more pages to load
+                  cache.nextPage[tile.id] = nextPage + 1;
+                  loadNextTilePage$1(which, currZoom, url, tile);
               } else {
-                  continueTo(play);
+                  cache.nextPage[tile.id] = Infinity;     // no more pages to load
               }
           });
+  }
 
-          function continueTo(nextStep) {
-              context.map().on('move.intro drawn.intro', null);
-              context.on('exit.intro', null);
-              context.history().on('change.intro', null);
-              nextStep();
-          }
-      }
 
+  // partition viewport into higher zoom tiles
+  function partitionViewport$1(projection) {
+      var z = geoScaleToZoom(projection.scale());
+      var z2 = (Math.ceil(z * 2) / 2) + 2.5;   // round to next 0.5 and add 2.5
+      var tiler = utilTiler().zoomExtent([z2, z2]);
 
-      function retryDelete() {
-          context.enter(modeBrowse(context));
+      return tiler.getTiles(projection)
+          .map(function(tile) { return tile.extent; });
+  }
 
-          var padding = 200 * Math.pow(2, context.map().zoom() - 18);
-          var box = pad$1(twelfthAvenue, padding, context);
-          reveal(box, t('intro.lines.retry_delete'), {
-              buttonText: t('intro.ok'),
-              buttonCallback: function() { continueTo(multiSelect); }
-          });
 
-          function continueTo(nextStep) {
-              nextStep();
-          }
-      }
+  // no more than `limit` results per partition.
+  function searchLimited$1(limit, projection, rtree) {
+      limit = limit || 5;
 
+      return partitionViewport$1(projection)
+          .reduce(function(result, extent) {
+              var found = rtree.search(extent.bbox())
+                  .slice(0, limit)
+                  .map(function(d) { return d.data; });
 
-      function play() {
-          dispatch$$1.call('done');
-          reveal('#id-container',
-              t('intro.lines.play', { next: t('intro.buildings.title') }), {
-                  tooltipBox: '.intro-nav-wrap .chapter-building',
-                  buttonText: t('intro.ok'),
-                  buttonCallback: function() { reveal('#id-container'); }
-              }
-          );
-     }
+              return (found.length ? result.concat(found) : result);
+          }, []);
+  }
 
 
-      chapter.enter = function() {
-          addLine();
-      };
+  function zoomPan() {
+      var t = event.transform;
+      select('#photoviewer .osc-image-wrap')
+          .call(utilSetTransform, t.x, t.y, t.k);
+  }
 
 
-      chapter.exit = function() {
-          timeouts.forEach(window.clearTimeout);
-          select(window).on('mousedown.intro', null, true);
-          context.on('enter.intro exit.intro', null);
-          context.map().on('move.intro drawn.intro', null);
-          context.history().on('change.intro', null);
-          select('.inspector-wrap').on('wheel.intro', null);
-          select('.preset-list-button').on('click.intro', null);
-      };
+  var serviceOpenstreetcam = {
 
+      init: function() {
+          if (!_oscCache) {
+              this.reset();
+          }
 
-      chapter.restart = function() {
-          chapter.exit();
-          chapter.enter();
-      };
+          this.event = utilRebind(this, dispatch$4, 'on');
+      },
 
+      reset: function() {
+          var cache = _oscCache;
 
-      return utilRebind(chapter, dispatch$$1, 'on');
-  }
+          if (cache) {
+              if (cache.images && cache.images.inflight) {
+                  forEach(cache.images.inflight, abortRequest$3);
+              }
+          }
 
-  function uiIntroBuilding(context, reveal) {
-      var dispatch$$1 = dispatch('done');
-      var house = [-85.62815, 41.95638];
-      var tank = [-85.62732, 41.95347];
-      var buildingCatetory = context.presets().item('category-building');
-      var housePreset = context.presets().item('building/house');
-      var tankPreset = context.presets().item('man_made/storage_tank');
-      var timeouts = [];
-      var _houseID = null;
-      var _tankID = null;
+          _oscCache = {
+              images: { inflight: {}, loaded: {}, nextPage: {}, rtree: rbush_1() },
+              sequences: {}
+          };
 
+          _oscSelectedImage = null;
+      },
 
-      var chapter = {
-          title: 'intro.buildings.title'
-      };
 
+      images: function(projection) {
+          var limit = 5;
+          return searchLimited$1(limit, projection, _oscCache.images.rtree);
+      },
 
-      function timeout(f, t$$1) {
-          timeouts.push(window.setTimeout(f, t$$1));
-      }
 
+      sequences: function(projection) {
+          var viewport = projection.clipExtent();
+          var min = [viewport[0][0], viewport[1][1]];
+          var max = [viewport[1][0], viewport[0][1]];
+          var bbox = geoExtent(projection.invert(min), projection.invert(max)).bbox();
+          var sequenceKeys = {};
 
-      function eventCancel() {
-          event.stopPropagation();
-          event.preventDefault();
-      }
+          // all sequences for images in viewport
+          _oscCache.images.rtree.search(bbox)
+              .forEach(function(d) { sequenceKeys[d.data.sequence_id] = true; });
 
+          // make linestrings from those sequences
+          var lineStrings = [];
+          Object.keys(sequenceKeys)
+              .forEach(function(sequenceKey) {
+                  var seq = _oscCache.sequences[sequenceKey];
+                  var images = seq && seq.images;
+                  if (images) {
+                      lineStrings.push({
+                          type: 'LineString',
+                          coordinates: images.map(function (d) { return d.loc; }).filter(Boolean),
+                          properties: { key: sequenceKey }
+                      });
+                  }
+              });
+          return lineStrings;
+      },
 
-      function revealHouse(center, text, options) {
-          var padding = 160 * Math.pow(2, context.map().zoom() - 20);
-          var box = pad$1(center, padding, context);
-          reveal(box, text, options);
-      }
 
+      loadImages: function(projection) {
+          var url = apibase$2 + '/1.0/list/nearby-photos/';
+          loadTiles$1('images', url, projection);
+      },
 
-      function revealTank(center, text, options) {
-          var padding = 190 * Math.pow(2, context.map().zoom() - 19.5);
-          var box = pad$1(center, padding, context);
-          reveal(box, text, options);
-      }
 
+      loadViewer: function(context) {
+          var that = this;
 
-      function revealEditMenu(loc, text, options) {
-          var rect = context.surfaceRect();
-          var point$$1 = context.curtainProjection(loc);
-          var pad = 40;
-          var width = 250 + (2 * pad);
-          var height = 350;
-          var startX = rect.left + point$$1[0];
-          var left = (textDirection === 'rtl') ? (startX - width + pad) : (startX - pad);
-          var box = {
-              left: left,
-              top: point$$1[1] + rect.top - 60,
-              width: width,
-              height: height
-          };
-          reveal(box, text, options);
-      }
+          // add osc-wrapper
+          var wrap = select('#photoviewer').selectAll('.osc-wrapper')
+              .data([0]);
 
+          var wrapEnter = wrap.enter()
+              .append('div')
+              .attr('class', 'photo-wrapper osc-wrapper')
+              .classed('hide', true)
+              .call(imgZoom)
+              .on('dblclick.zoom', null);
 
-      function addHouse() {
-          context.enter(modeBrowse(context));
-          context.history().reset('initial');
-          _houseID = null;
+          wrapEnter
+              .append('div')
+              .attr('class', 'photo-attribution fillD');
 
-          var msec = transitionTime(house, context.map().center());
-          if (msec) { reveal(null, null, { duration: 0 }); }
-          context.map().centerZoomEase(house, 19, msec);
+          var controlsEnter = wrapEnter
+              .append('div')
+              .attr('class', 'photo-controls-wrap')
+              .append('div')
+              .attr('class', 'photo-controls');
 
-          timeout(function() {
-              var tooltip = reveal('button.add-area',
-                  t('intro.buildings.add_building', { button: icon('#iD-icon-area', 'pre-text') }));
+          controlsEnter
+              .append('button')
+              .on('click.back', step(-1))
+              .text('◄');
 
-              tooltip.selectAll('.tooltip-inner')
-                  .insert('svg', 'span')
-                  .attr('class', 'tooltip-illustration')
-                  .append('use')
-                  .attr('xlink:href', '#iD-graphic-buildings');
+          controlsEnter
+              .append('button')
+              .on('click.rotate-ccw', rotate(-90))
+              .text('⤿');
 
-              context.on('enter.intro', function(mode) {
-                  if (mode.id !== 'add-area') return;
-                  continueTo(startHouse);
-              });
-          }, msec + 100);
+          controlsEnter
+              .append('button')
+              .on('click.rotate-cw', rotate(90))
+              .text('⤾');
 
-          function continueTo(nextStep) {
-              context.on('enter.intro', null);
-              nextStep();
-          }
-      }
+          controlsEnter
+              .append('button')
+              .on('click.forward', step(1))
+              .text('►');
 
+          wrapEnter
+              .append('div')
+              .attr('class', 'osc-image-wrap');
 
-      function startHouse() {
-          if (context.mode().id !== 'add-area') {
-              return continueTo(addHouse);
-          }
 
-          _houseID = null;
-          context.map().zoomEase(20, 500);
+          // Register viewer resize handler
+          context.ui().photoviewer.on('resize', function(dimensions) {
+              imgZoom = d3_zoom()
+                  .extent([[0, 0], dimensions])
+                  .translateExtent([[0, 0], dimensions])
+                  .scaleExtent([1, 15])
+                  .on('zoom', zoomPan);
+          });
 
-          timeout(function() {
-              revealHouse(house, t('intro.buildings.start_building'));
 
-              context.map().on('move.intro drawn.intro', function() {
-                  revealHouse(house, t('intro.buildings.start_building'), { duration: 0 });
-              });
+          function rotate(deg) {
+              return function() {
+                  if (!_oscSelectedImage) return;
+                  var sequenceKey = _oscSelectedImage.sequence_id;
+                  var sequence = _oscCache.sequences[sequenceKey];
+                  if (!sequence) return;
 
-              context.on('enter.intro', function(mode) {
-                  if (mode.id !== 'draw-area') return chapter.restart();
-                  continueTo(continueHouse);
-              });
+                  var r = sequence.rotation || 0;
+                  r += deg;
 
-          }, 550);  // after easing
+                  if (r > 180) r -= 360;
+                  if (r < -180) r += 360;
+                  sequence.rotation = r;
 
-          function continueTo(nextStep) {
-              context.map().on('move.intro drawn.intro', null);
-              context.on('enter.intro', null);
-              nextStep();
-          }
-      }
+                  var wrap = select('#photoviewer .osc-wrapper');
 
+                  wrap
+                      .transition()
+                      .duration(100)
+                      .call(imgZoom.transform, identity$7);
 
-      function continueHouse() {
-          if (context.mode().id !== 'draw-area') {
-              return continueTo(addHouse);
+                  wrap.selectAll('.osc-image')
+                      .transition()
+                      .duration(100)
+                      .style('transform', 'rotate(' + r + 'deg)');
+              };
           }
 
-          _houseID = null;
+          function step(stepBy) {
+              return function() {
+                  if (!_oscSelectedImage) return;
+                  var sequenceKey = _oscSelectedImage.sequence_id;
+                  var sequence = _oscCache.sequences[sequenceKey];
+                  if (!sequence) return;
 
-          revealHouse(house, t('intro.buildings.continue_building'));
+                  var nextIndex = _oscSelectedImage.sequence_index + stepBy;
+                  var nextImage = sequence.images[nextIndex];
+                  if (!nextImage) return;
 
-          context.map().on('move.intro drawn.intro', function() {
-              revealHouse(house, t('intro.buildings.continue_building'), { duration: 0 });
-          });
+                  context.map().centerEase(nextImage.loc);
 
-          context.on('enter.intro', function(mode) {
-              if (mode.id === 'draw-area') {
-                  return;
-              } else if (mode.id === 'select') {
-                  var graph = context.graph();
-                  var way = context.entity(context.selectedIDs()[0]);
-                  var nodes = graph.childNodes(way);
-                  var points = uniq(nodes).map(function(n) { return context.projection(n.loc); });
+                  that
+                      .selectImage(nextImage)
+                      .updateViewer(nextImage);
+              };
+          }
+      },
 
-                  if (isMostlySquare(points)) {
-                      _houseID = way.id;
-                      return continueTo(chooseCategoryBuilding);
-                  } else {
-                      return continueTo(retryHouse);
-                  }
 
-              } else {
-                  return chapter.restart();
-              }
-          });
+      showViewer: function() {
+          var viewer = select('#photoviewer')
+              .classed('hide', false);
 
-          function continueTo(nextStep) {
-              context.map().on('move.intro drawn.intro', null);
-              context.on('enter.intro', null);
-              nextStep();
+          var isHidden = viewer.selectAll('.photo-wrapper.osc-wrapper.hide').size();
+
+          if (isHidden) {
+              viewer
+                  .selectAll('.photo-wrapper:not(.osc-wrapper)')
+                  .classed('hide', true);
+
+              viewer
+                  .selectAll('.photo-wrapper.osc-wrapper')
+                  .classed('hide', false);
           }
-      }
 
+          return this;
+      },
 
-      function retryHouse() {
-          var onClick = function() { continueTo(addHouse); };
 
-          revealHouse(house, t('intro.buildings.retry_building'),
-              { buttonText: t('intro.ok'), buttonCallback: onClick }
-          );
+      hideViewer: function() {
+          _oscSelectedImage = null;
 
-          context.map().on('move.intro drawn.intro', function() {
-              revealHouse(house, t('intro.buildings.retry_building'),
-                  { duration: 0, buttonText: t('intro.ok'), buttonCallback: onClick }
-              );
-          });
+          var viewer = select('#photoviewer');
+          if (!viewer.empty()) viewer.datum(null);
 
-          function continueTo(nextStep) {
-              context.map().on('move.intro drawn.intro', null);
-              nextStep();
-          }
-      }
+          viewer
+              .classed('hide', true)
+              .selectAll('.photo-wrapper')
+              .classed('hide', true);
 
+          d3_selectAll('.viewfield-group, .sequence, .icon-sign')
+              .classed('currentView', false);
 
-      function chooseCategoryBuilding() {
-          if (!_houseID || !context.hasEntity(_houseID)) {
-              return addHouse();
-          }
-          var ids = context.selectedIDs();
-          if (context.mode().id !== 'select' || !ids.length || ids[0] !== _houseID) {
-              context.enter(modeSelect(context, [_houseID]));
-          }
+          return this.setStyles(null, true);
+      },
 
-          // disallow scrolling
-          select('.inspector-wrap').on('wheel.intro', eventCancel);
 
-          timeout(function() {
-              // reset pane, in case user somehow happened to change it..
-              select('.inspector-wrap .panewrap').style('right', '-100%');
+      updateViewer: function(d) {
+          var wrap = select('#photoviewer .osc-wrapper');
+          var imageWrap = wrap.selectAll('.osc-image-wrap');
+          var attribution = wrap.selectAll('.photo-attribution').html('');
 
-              var button = select('.preset-category-building .preset-list-button');
+          wrap
+              .transition()
+              .duration(100)
+              .call(imgZoom.transform, identity$7);
 
-              reveal(button.node(),
-                  t('intro.buildings.choose_category_building', { category: buildingCatetory.name() })
-              );
+          imageWrap
+              .selectAll('.osc-image')
+              .remove();
 
-              button.on('click.intro', function() {
-                  button.on('click.intro', null);
-                  continueTo(choosePresetHouse);
-              });
+          if (d) {
+              var sequence = _oscCache.sequences[d.sequence_id];
+              var r = (sequence && sequence.rotation) || 0;
 
-          }, 400);  // after preset list pane visible..
+              imageWrap
+                  .append('img')
+                  .attr('class', 'osc-image')
+                  .attr('src', apibase$2 + '/' + d.imagePath)
+                  .style('transform', 'rotate(' + r + 'deg)');
 
+              if (d.captured_by) {
+                  attribution
+                      .append('a')
+                      .attr('class', 'captured_by')
+                      .attr('target', '_blank')
+                      .attr('href', 'https://openstreetcam.org/user/' + encodeURIComponent(d.captured_by))
+                      .text('@' + d.captured_by);
 
-          context.on('enter.intro', function(mode) {
-              if (!_houseID || !context.hasEntity(_houseID)) {
-                  return continueTo(addHouse);
+                  attribution
+                      .append('span')
+                      .text('|');
               }
-              var ids = context.selectedIDs();
-              if (mode.id !== 'select' || !ids.length || ids[0] !== _houseID) {
-                  return continueTo(chooseCategoryBuilding);
+
+              if (d.captured_at) {
+                  attribution
+                      .append('span')
+                      .attr('class', 'captured_at')
+                      .text(d.captured_at);
+
+                  attribution
+                      .append('span')
+                      .text('|');
               }
-          });
 
-          function continueTo(nextStep) {
-              select('.inspector-wrap').on('wheel.intro', null);
-              select('.preset-list-button').on('click.intro', null);
-              context.on('enter.intro', null);
-              nextStep();
+              attribution
+                  .append('a')
+                  .attr('class', 'image-link')
+                  .attr('target', '_blank')
+                  .attr('href', 'https://openstreetcam.org/details/' + d.sequence_id + '/' + d.sequence_index)
+                  .text('openstreetcam.org');
           }
-      }
+          return this;
+      },
 
 
-      function choosePresetHouse() {
-          if (!_houseID || !context.hasEntity(_houseID)) {
-              return addHouse();
-          }
-          var ids = context.selectedIDs();
-          if (context.mode().id !== 'select' || !ids.length || ids[0] !== _houseID) {
-              context.enter(modeSelect(context, [_houseID]));
-          }
+      selectImage: function(d) {
+          _oscSelectedImage = d;
+          var viewer = select('#photoviewer');
+          if (!viewer.empty()) viewer.datum(d);
 
-          // disallow scrolling
-          select('.inspector-wrap').on('wheel.intro', eventCancel);
+          this.setStyles(null, true);
 
-          timeout(function() {
-              // reset pane, in case user somehow happened to change it..
-              select('.inspector-wrap .panewrap').style('right', '-100%');
+          d3_selectAll('.icon-sign')
+              .classed('currentView', false);
 
-              var button = select('.preset-building-house .preset-list-button');
+          return this;
+      },
 
-              reveal(button.node(),
-                  t('intro.buildings.choose_preset_house', { preset: housePreset.name() }),
-                  { duration: 300 }
-              );
 
-              button.on('click.intro', function() {
-                  button.on('click.intro', null);
-                  continueTo(closeEditorHouse);
-              });
+      getSelectedImage: function() {
+          return _oscSelectedImage;
+      },
+
+
+      getSequenceKeyForImage: function(d) {
+          return d && d.sequence_id;
+      },
+
+
+      // Updates the currently highlighted sequence and selected bubble.
+      // Reset is only necessary when interacting with the viewport because
+      // this implicitly changes the currently selected bubble/sequence
+      setStyles: function(hovered, reset) {
+          if (reset) {  // reset all layers
+              d3_selectAll('.viewfield-group')
+                  .classed('highlighted', false)
+                  .classed('hovered', false)
+                  .classed('currentView', false);
+
+              d3_selectAll('.sequence')
+                  .classed('highlighted', false)
+                  .classed('currentView', false);
+          }
+
+          var hoveredImageKey = hovered && hovered.key;
+          var hoveredSequenceKey = this.getSequenceKeyForImage(hovered);
+          var hoveredSequence = hoveredSequenceKey && _oscCache.sequences[hoveredSequenceKey];
+          var hoveredImageKeys = (hoveredSequence && hoveredSequence.images.map(function (d) { return d.key; })) || [];
+
+          var viewer = select('#photoviewer');
+          var selected = viewer.empty() ? undefined : viewer.datum();
+          var selectedImageKey = selected && selected.key;
+          var selectedSequenceKey = this.getSequenceKeyForImage(selected);
+          var selectedSequence = selectedSequenceKey && _oscCache.sequences[selectedSequenceKey];
+          var selectedImageKeys = (selectedSequence && selectedSequence.images.map(function (d) { return d.key; })) || [];
 
-          }, 400);  // after preset list pane visible..
+          // highlight sibling viewfields on either the selected or the hovered sequences
+          var highlightedImageKeys = union(hoveredImageKeys, selectedImageKeys);
 
-          context.on('enter.intro', function(mode) {
-              if (!_houseID || !context.hasEntity(_houseID)) {
-                  return continueTo(addHouse);
-              }
-              var ids = context.selectedIDs();
-              if (mode.id !== 'select' || !ids.length || ids[0] !== _houseID) {
-                  return continueTo(chooseCategoryBuilding);
-              }
-          });
+          d3_selectAll('.layer-openstreetcam-images .viewfield-group')
+              .classed('highlighted', function(d) { return highlightedImageKeys.indexOf(d.key) !== -1; })
+              .classed('hovered', function(d) { return d.key === hoveredImageKey; })
+              .classed('currentView', function(d) { return d.key === selectedImageKey; });
 
-          function continueTo(nextStep) {
-              select('.inspector-wrap').on('wheel.intro', null);
-              select('.preset-list-button').on('click.intro', null);
-              context.on('enter.intro', null);
-              nextStep();
-          }
-      }
+          d3_selectAll('.layer-openstreetcam-images .sequence')
+              .classed('highlighted', function(d) { return d.properties.key === hoveredSequenceKey; })
+              .classed('currentView', function(d) { return d.properties.key === selectedSequenceKey; });
 
+          // update viewfields if needed
+          d3_selectAll('.viewfield-group .viewfield')
+              .attr('d', viewfieldPath);
 
-      function closeEditorHouse() {
-          if (!_houseID || !context.hasEntity(_houseID)) {
-              return addHouse();
-          }
-          var ids = context.selectedIDs();
-          if (context.mode().id !== 'select' || !ids.length || ids[0] !== _houseID) {
-              context.enter(modeSelect(context, [_houseID]));
+          function viewfieldPath() {
+              var d = this.parentNode.__data__;
+              if (d.pano && d.key !== selectedImageKey) {
+                  return 'M 8,13 m -10,0 a 10,10 0 1,0 20,0 a 10,10 0 1,0 -20,0';
+              } else {
+                  return 'M 6,9 C 8,8.4 8,8.4 10,9 L 16,-2 C 12,-5 4,-5 0,-2 z';
+              }
           }
 
-          context.history().checkpoint('hasHouse');
-
-          context.on('exit.intro', function() {
-              continueTo(rightClickHouse);
-          });
+          return this;
+      },
 
-          timeout(function() {
-              reveal('.entity-editor-pane',
-                  t('intro.buildings.close', { button: icon('#iD-icon-apply', 'pre-text') })
-              );
-          }, 500);
 
-          function continueTo(nextStep) {
-              context.on('exit.intro', null);
-              nextStep();
-          }
+      cache: function() {
+          return _oscCache;
       }
 
+  };
 
-      function rightClickHouse() {
-          if (!_houseID) return chapter.restart();
-
-          context.enter(modeBrowse(context));
-          context.history().reset('hasHouse');
-          var zoom = context.map().zoom();
-          if (zoom < 20) {
-              zoom = 20;
-          }
-          context.map().centerZoomEase(house, zoom, 500);
+  /* Built-in method references for those with the same name as other `lodash` methods. */
+  var nativeCeil = Math.ceil,
+      nativeMax$4 = Math.max;
 
-          context.on('enter.intro', function(mode) {
-              if (mode.id !== 'select') return;
-              var ids = context.selectedIDs();
-              if (ids.length !== 1 || ids[0] !== _houseID) return;
+  /**
+   * Creates an array of elements split into groups the length of `size`.
+   * If `array` can't be split evenly, the final chunk will be the remaining
+   * elements.
+   *
+   * @static
+   * @memberOf _
+   * @since 3.0.0
+   * @category Array
+   * @param {Array} array The array to process.
+   * @param {number} [size=1] The length of each chunk
+   * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
+   * @returns {Array} Returns the new array of chunks.
+   * @example
+   *
+   * _.chunk(['a', 'b', 'c', 'd'], 2);
+   * // => [['a', 'b'], ['c', 'd']]
+   *
+   * _.chunk(['a', 'b', 'c', 'd'], 3);
+   * // => [['a', 'b', 'c'], ['d']]
+   */
+  function chunk(array, size, guard) {
+    if ((guard ? isIterateeCall(array, size, guard) : size === undefined)) {
+      size = 1;
+    } else {
+      size = nativeMax$4(toInteger(size), 0);
+    }
+    var length = array == null ? 0 : array.length;
+    if (!length || size < 1) {
+      return [];
+    }
+    var index = 0,
+        resIndex = 0,
+        result = Array(nativeCeil(length / size));
 
-              timeout(function() {
-                  var node = selectMenuItem('orthogonalize').node();
-                  if (!node) return;
-                  continueTo(clickSquare);
-              }, 300);  // after menu visible
-          });
+    while (index < length) {
+      result[resIndex++] = baseSlice(array, index, (index += size));
+    }
+    return result;
+  }
 
-          context.map().on('move.intro drawn.intro', function() {
-              revealHouse(house, t('intro.buildings.rightclick_building'), { duration: 0 });
-          });
+  var hashes = createCommonjsModule(function (module, exports) {
+  /**
+   * jshashes - https://github.com/h2non/jshashes
+   * Released under the "New BSD" license
+   *
+   * Algorithms specification:
+   *
+   * MD5 - http://www.ietf.org/rfc/rfc1321.txt
+   * RIPEMD-160 - http://homes.esat.kuleuven.be/~bosselae/ripemd160.html
+   * SHA1   - http://csrc.nist.gov/publications/fips/fips180-4/fips-180-4.pdf
+   * SHA256 - http://csrc.nist.gov/publications/fips/fips180-4/fips-180-4.pdf
+   * SHA512 - http://csrc.nist.gov/publications/fips/fips180-4/fips-180-4.pdf
+   * HMAC - http://www.ietf.org/rfc/rfc2104.txt
+   */
+  (function() {
+    var Hashes;
 
-          context.history().on('change.intro', function() {
-              continueTo(rightClickHouse);
-          });
+    function utf8Encode(str) {
+      var x, y, output = '',
+        i = -1,
+        l;
 
-          function continueTo(nextStep) {
-              context.on('enter.intro', null);
-              context.map().on('move.intro drawn.intro', null);
-              context.history().on('change.intro', null);
-              nextStep();
+      if (str && str.length) {
+        l = str.length;
+        while ((i += 1) < l) {
+          /* Decode utf-16 surrogate pairs */
+          x = str.charCodeAt(i);
+          y = i + 1 < l ? str.charCodeAt(i + 1) : 0;
+          if (0xD800 <= x && x <= 0xDBFF && 0xDC00 <= y && y <= 0xDFFF) {
+            x = 0x10000 + ((x & 0x03FF) << 10) + (y & 0x03FF);
+            i += 1;
+          }
+          /* Encode output as utf-8 */
+          if (x <= 0x7F) {
+            output += String.fromCharCode(x);
+          } else if (x <= 0x7FF) {
+            output += String.fromCharCode(0xC0 | ((x >>> 6) & 0x1F),
+              0x80 | (x & 0x3F));
+          } else if (x <= 0xFFFF) {
+            output += String.fromCharCode(0xE0 | ((x >>> 12) & 0x0F),
+              0x80 | ((x >>> 6) & 0x3F),
+              0x80 | (x & 0x3F));
+          } else if (x <= 0x1FFFFF) {
+            output += String.fromCharCode(0xF0 | ((x >>> 18) & 0x07),
+              0x80 | ((x >>> 12) & 0x3F),
+              0x80 | ((x >>> 6) & 0x3F),
+              0x80 | (x & 0x3F));
           }
+        }
       }
+      return output;
+    }
 
+    function utf8Decode(str) {
+      var i, ac, c1, c2, c3, arr = [],
+        l;
+      i = ac = c1 = c2 = c3 = 0;
 
-      function clickSquare() {
-          if (!_houseID) return chapter.restart();
-          var entity = context.hasEntity(_houseID);
-          if (!entity) return continueTo(rightClickHouse);
-
-          var node = selectMenuItem('orthogonalize').node();
-          if (!node) { return continueTo(rightClickHouse); }
-
-          var wasChanged = false;
-          var menuCoords = context.map().mouseCoordinates();
+      if (str && str.length) {
+        l = str.length;
+        str += '';
 
-          revealEditMenu(menuCoords,
-              t('intro.buildings.square_building', { button: icon('#iD-operation-orthogonalize', 'pre-text') })
-          );
+        while (i < l) {
+          c1 = str.charCodeAt(i);
+          ac += 1;
+          if (c1 < 128) {
+            arr[ac] = String.fromCharCode(c1);
+            i += 1;
+          } else if (c1 > 191 && c1 < 224) {
+            c2 = str.charCodeAt(i + 1);
+            arr[ac] = String.fromCharCode(((c1 & 31) << 6) | (c2 & 63));
+            i += 2;
+          } else {
+            c2 = str.charCodeAt(i + 1);
+            c3 = str.charCodeAt(i + 2);
+            arr[ac] = String.fromCharCode(((c1 & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));
+            i += 3;
+          }
+        }
+      }
+      return arr.join('');
+    }
 
-          context.on('enter.intro', function(mode) {
-              if (mode.id === 'browse') {
-                  continueTo(rightClickHouse);
-              } else if (mode.id === 'move' || mode.id === 'rotate') {
-                  continueTo(retryClickSquare);
-              }
-          });
+    /**
+     * Add integers, wrapping at 2^32. This uses 16-bit operations internally
+     * to work around bugs in some JS interpreters.
+     */
 
-          context.map().on('move.intro drawn.intro', function() {
-              var node = selectMenuItem('orthogonalize').node();
-              if (!wasChanged && !node) { return continueTo(rightClickHouse); }
+    function safe_add(x, y) {
+      var lsw = (x & 0xFFFF) + (y & 0xFFFF),
+        msw = (x >> 16) + (y >> 16) + (lsw >> 16);
+      return (msw << 16) | (lsw & 0xFFFF);
+    }
 
-              revealEditMenu(menuCoords,
-                  t('intro.buildings.square_building', { button: icon('#iD-operation-orthogonalize', 'pre-text') }),
-                  { duration: 0 }
-              );
-          });
+    /**
+     * Bitwise rotate a 32-bit number to the left.
+     */
 
-          context.history().on('change.intro', function() {
-              wasChanged = true;
-              context.history().on('change.intro', null);
+    function bit_rol(num, cnt) {
+      return (num << cnt) | (num >>> (32 - cnt));
+    }
 
-              // Something changed.  Wait for transition to complete and check undo annotation.
-              timeout(function() {
-                  if (context.history().undoAnnotation() === t('operations.orthogonalize.annotation.area')) {
-                      continueTo(doneSquare);
-                  } else {
-                      continueTo(retryClickSquare);
-                  }
-              }, 500);  // after transitioned actions
-          });
+    /**
+     * Convert a raw string to a hex string
+     */
 
-          function continueTo(nextStep) {
-              context.on('enter.intro', null);
-              context.map().on('move.intro drawn.intro', null);
-              context.history().on('change.intro', null);
-              nextStep();
-          }
+    function rstr2hex(input, hexcase) {
+      var hex_tab = hexcase ? '0123456789ABCDEF' : '0123456789abcdef',
+        output = '',
+        x, i = 0,
+        l = input.length;
+      for (; i < l; i += 1) {
+        x = input.charCodeAt(i);
+        output += hex_tab.charAt((x >>> 4) & 0x0F) + hex_tab.charAt(x & 0x0F);
       }
+      return output;
+    }
 
+    /**
+     * Convert an array of big-endian words to a string
+     */
 
-      function retryClickSquare() {
-          context.enter(modeBrowse(context));
+    function binb2rstr(input) {
+      var i, l = input.length * 32,
+        output = '';
+      for (i = 0; i < l; i += 8) {
+        output += String.fromCharCode((input[i >> 5] >>> (24 - i % 32)) & 0xFF);
+      }
+      return output;
+    }
 
-          revealHouse(house, t('intro.buildings.retry_square'), {
-              buttonText: t('intro.ok'),
-              buttonCallback: function() { continueTo(rightClickHouse); }
-          });
+    /**
+     * Convert an array of little-endian words to a string
+     */
 
-          function continueTo(nextStep) {
-              nextStep();
-          }
+    function binl2rstr(input) {
+      var i, l = input.length * 32,
+        output = '';
+      for (i = 0; i < l; i += 8) {
+        output += String.fromCharCode((input[i >> 5] >>> (i % 32)) & 0xFF);
       }
+      return output;
+    }
 
+    /**
+     * Convert a raw string to an array of little-endian words
+     * Characters >255 have their high-byte silently ignored.
+     */
 
-      function doneSquare() {
-          context.history().checkpoint('doneSquare');
+    function rstr2binl(input) {
+      var i, l = input.length * 8,
+        output = Array(input.length >> 2),
+        lo = output.length;
+      for (i = 0; i < lo; i += 1) {
+        output[i] = 0;
+      }
+      for (i = 0; i < l; i += 8) {
+        output[i >> 5] |= (input.charCodeAt(i / 8) & 0xFF) << (i % 32);
+      }
+      return output;
+    }
 
-          revealHouse(house, t('intro.buildings.done_square'), {
-              buttonText: t('intro.ok'),
-              buttonCallback: function() { continueTo(addTank); }
-          });
+    /**
+     * Convert a raw string to an array of big-endian words
+     * Characters >255 have their high-byte silently ignored.
+     */
 
-          function continueTo(nextStep) {
-              nextStep();
-          }
+    function rstr2binb(input) {
+      var i, l = input.length * 8,
+        output = Array(input.length >> 2),
+        lo = output.length;
+      for (i = 0; i < lo; i += 1) {
+        output[i] = 0;
+      }
+      for (i = 0; i < l; i += 8) {
+        output[i >> 5] |= (input.charCodeAt(i / 8) & 0xFF) << (24 - i % 32);
       }
+      return output;
+    }
 
+    /**
+     * Convert a raw string to an arbitrary string encoding
+     */
 
-      function addTank() {
-          context.enter(modeBrowse(context));
-          context.history().reset('doneSquare');
-          _tankID = null;
+    function rstr2any(input, encoding) {
+      var divisor = encoding.length,
+        remainders = Array(),
+        i, q, x, ld, quotient, dividend, output, full_length;
 
-          var msec = transitionTime(tank, context.map().center());
-          if (msec) { reveal(null, null, { duration: 0 }); }
-          context.map().centerZoomEase(tank, 19.5, msec);
+      /* Convert to an array of 16-bit big-endian values, forming the dividend */
+      dividend = Array(Math.ceil(input.length / 2));
+      ld = dividend.length;
+      for (i = 0; i < ld; i += 1) {
+        dividend[i] = (input.charCodeAt(i * 2) << 8) | input.charCodeAt(i * 2 + 1);
+      }
 
-          timeout(function() {
-              reveal('button.add-area',
-                  t('intro.buildings.add_tank', { button: icon('#iD-icon-area', 'pre-text') })
-              );
+      /**
+       * Repeatedly perform a long division. The binary array forms the dividend,
+       * the length of the encoding is the divisor. Once computed, the quotient
+       * forms the dividend for the next step. We stop when the dividend is zerHashes.
+       * All remainders are stored for later use.
+       */
+      while (dividend.length > 0) {
+        quotient = Array();
+        x = 0;
+        for (i = 0; i < dividend.length; i += 1) {
+          x = (x << 16) + dividend[i];
+          q = Math.floor(x / divisor);
+          x -= q * divisor;
+          if (quotient.length > 0 || q > 0) {
+            quotient[quotient.length] = q;
+          }
+        }
+        remainders[remainders.length] = x;
+        dividend = quotient;
+      }
 
-              context.on('enter.intro', function(mode) {
-                  if (mode.id !== 'add-area') return;
-                  continueTo(startTank);
-              });
-          }, msec + 100);
+      /* Convert the remainders to the output string */
+      output = '';
+      for (i = remainders.length - 1; i >= 0; i--) {
+        output += encoding.charAt(remainders[i]);
+      }
 
-          function continueTo(nextStep) {
-              context.on('enter.intro', null);
-              nextStep();
-          }
+      /* Append leading zero equivalents */
+      full_length = Math.ceil(input.length * 8 / (Math.log(encoding.length) / Math.log(2)));
+      for (i = output.length; i < full_length; i += 1) {
+        output = encoding[0] + output;
       }
+      return output;
+    }
 
+    /**
+     * Convert a raw string to a base-64 string
+     */
 
-      function startTank() {
-          if (context.mode().id !== 'add-area') {
-              return continueTo(addTank);
+    function rstr2b64(input, b64pad) {
+      var tab = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/',
+        output = '',
+        len = input.length,
+        i, j, triplet;
+      b64pad = b64pad || '=';
+      for (i = 0; i < len; i += 3) {
+        triplet = (input.charCodeAt(i) << 16) | (i + 1 < len ? input.charCodeAt(i + 1) << 8 : 0) | (i + 2 < len ? input.charCodeAt(i + 2) : 0);
+        for (j = 0; j < 4; j += 1) {
+          if (i * 8 + j * 6 > input.length * 8) {
+            output += b64pad;
+          } else {
+            output += tab.charAt((triplet >>> 6 * (3 - j)) & 0x3F);
           }
+        }
+      }
+      return output;
+    }
 
-          _tankID = null;
-
-          timeout(function() {
-              revealTank(tank, t('intro.buildings.start_tank'));
+    Hashes = {
+      /**
+       * @property {String} version
+       * @readonly
+       */
+      VERSION: '1.0.6',
+      /**
+       * @member Hashes
+       * @class Base64
+       * @constructor
+       */
+      Base64: function() {
+        // private properties
+        var tab = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/',
+          pad = '=', // default pad according with the RFC standard
+          utf8 = true; // by default enable UTF-8 support encoding
 
-              context.map().on('move.intro drawn.intro', function() {
-                  revealTank(tank, t('intro.buildings.start_tank'), { duration: 0 });
-              });
+        // public method for encoding
+        this.encode = function(input) {
+          var i, j, triplet,
+            output = '',
+            len = input.length;
 
-              context.on('enter.intro', function(mode) {
-                  if (mode.id !== 'draw-area') return chapter.restart();
-                  continueTo(continueTank);
-              });
+          pad = pad || '=';
+          input = (utf8) ? utf8Encode(input) : input;
 
-          }, 550);  // after easing
+          for (i = 0; i < len; i += 3) {
+            triplet = (input.charCodeAt(i) << 16) | (i + 1 < len ? input.charCodeAt(i + 1) << 8 : 0) | (i + 2 < len ? input.charCodeAt(i + 2) : 0);
+            for (j = 0; j < 4; j += 1) {
+              if (i * 8 + j * 6 > len * 8) {
+                output += pad;
+              } else {
+                output += tab.charAt((triplet >>> 6 * (3 - j)) & 0x3F);
+              }
+            }
+          }
+          return output;
+        };
 
-          function continueTo(nextStep) {
-              context.map().on('move.intro drawn.intro', null);
-              context.on('enter.intro', null);
-              nextStep();
+        // public method for decoding
+        this.decode = function(input) {
+          // var b64 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';
+          var i, o1, o2, o3, h1, h2, h3, h4, bits, ac,
+            dec = '',
+            arr = [];
+          if (!input) {
+            return input;
           }
-      }
 
+          i = ac = 0;
+          input = input.replace(new RegExp('\\' + pad, 'gi'), ''); // use '='
+          //input += '';
 
-      function continueTank() {
-          if (context.mode().id !== 'draw-area') {
-              return continueTo(addTank);
-          }
+          do { // unpack four hexets into three octets using index points in b64
+            h1 = tab.indexOf(input.charAt(i += 1));
+            h2 = tab.indexOf(input.charAt(i += 1));
+            h3 = tab.indexOf(input.charAt(i += 1));
+            h4 = tab.indexOf(input.charAt(i += 1));
+
+            bits = h1 << 18 | h2 << 12 | h3 << 6 | h4;
 
-          _tankID = null;
+            o1 = bits >> 16 & 0xff;
+            o2 = bits >> 8 & 0xff;
+            o3 = bits & 0xff;
+            ac += 1;
 
-          revealTank(tank, t('intro.buildings.continue_tank'));
+            if (h3 === 64) {
+              arr[ac] = String.fromCharCode(o1);
+            } else if (h4 === 64) {
+              arr[ac] = String.fromCharCode(o1, o2);
+            } else {
+              arr[ac] = String.fromCharCode(o1, o2, o3);
+            }
+          } while (i < input.length);
 
-          context.map().on('move.intro drawn.intro', function() {
-              revealTank(tank, t('intro.buildings.continue_tank'), { duration: 0 });
-          });
+          dec = arr.join('');
+          dec = (utf8) ? utf8Decode(dec) : dec;
 
-          context.on('enter.intro', function(mode) {
-              if (mode.id === 'draw-area') {
-                  return;
-              } else if (mode.id === 'select') {
-                  _tankID = context.selectedIDs()[0];
-                  return continueTo(searchPresetTank);
-              } else {
-                  return continueTo(addTank);
-              }
-          });
+          return dec;
+        };
 
-          function continueTo(nextStep) {
-              context.map().on('move.intro drawn.intro', null);
-              context.on('enter.intro', null);
-              nextStep();
+        // set custom pad string
+        this.setPad = function(str) {
+          pad = str || pad;
+          return this;
+        };
+        // set custom tab string characters
+        this.setTab = function(str) {
+          tab = str || tab;
+          return this;
+        };
+        this.setUTF8 = function(bool) {
+          if (typeof bool === 'boolean') {
+            utf8 = bool;
           }
-      }
+          return this;
+        };
+      },
+
+      /**
+       * CRC-32 calculation
+       * @member Hashes
+       * @method CRC32
+       * @static
+       * @param {String} str Input String
+       * @return {String}
+       */
+      CRC32: function(str) {
+        var crc = 0,
+          x = 0,
+          y = 0,
+          table, i, iTop;
+        str = utf8Encode(str);
 
+        table = [
+          '00000000 77073096 EE0E612C 990951BA 076DC419 706AF48F E963A535 9E6495A3 0EDB8832 ',
+          '79DCB8A4 E0D5E91E 97D2D988 09B64C2B 7EB17CBD E7B82D07 90BF1D91 1DB71064 6AB020F2 F3B97148 ',
+          '84BE41DE 1ADAD47D 6DDDE4EB F4D4B551 83D385C7 136C9856 646BA8C0 FD62F97A 8A65C9EC 14015C4F ',
+          '63066CD9 FA0F3D63 8D080DF5 3B6E20C8 4C69105E D56041E4 A2677172 3C03E4D1 4B04D447 D20D85FD ',
+          'A50AB56B 35B5A8FA 42B2986C DBBBC9D6 ACBCF940 32D86CE3 45DF5C75 DCD60DCF ABD13D59 26D930AC ',
+          '51DE003A C8D75180 BFD06116 21B4F4B5 56B3C423 CFBA9599 B8BDA50F 2802B89E 5F058808 C60CD9B2 ',
+          'B10BE924 2F6F7C87 58684C11 C1611DAB B6662D3D 76DC4190 01DB7106 98D220BC EFD5102A 71B18589 ',
+          '06B6B51F 9FBFE4A5 E8B8D433 7807C9A2 0F00F934 9609A88E E10E9818 7F6A0DBB 086D3D2D 91646C97 ',
+          'E6635C01 6B6B51F4 1C6C6162 856530D8 F262004E 6C0695ED 1B01A57B 8208F4C1 F50FC457 65B0D9C6 ',
+          '12B7E950 8BBEB8EA FCB9887C 62DD1DDF 15DA2D49 8CD37CF3 FBD44C65 4DB26158 3AB551CE A3BC0074 ',
+          'D4BB30E2 4ADFA541 3DD895D7 A4D1C46D D3D6F4FB 4369E96A 346ED9FC AD678846 DA60B8D0 44042D73 ',
+          '33031DE5 AA0A4C5F DD0D7CC9 5005713C 270241AA BE0B1010 C90C2086 5768B525 206F85B3 B966D409 ',
+          'CE61E49F 5EDEF90E 29D9C998 B0D09822 C7D7A8B4 59B33D17 2EB40D81 B7BD5C3B C0BA6CAD EDB88320 ',
+          '9ABFB3B6 03B6E20C 74B1D29A EAD54739 9DD277AF 04DB2615 73DC1683 E3630B12 94643B84 0D6D6A3E ',
+          '7A6A5AA8 E40ECF0B 9309FF9D 0A00AE27 7D079EB1 F00F9344 8708A3D2 1E01F268 6906C2FE F762575D ',
+          '806567CB 196C3671 6E6B06E7 FED41B76 89D32BE0 10DA7A5A 67DD4ACC F9B9DF6F 8EBEEFF9 17B7BE43 ',
+          '60B08ED5 D6D6A3E8 A1D1937E 38D8C2C4 4FDFF252 D1BB67F1 A6BC5767 3FB506DD 48B2364B D80D2BDA ',
+          'AF0A1B4C 36034AF6 41047A60 DF60EFC3 A867DF55 316E8EEF 4669BE79 CB61B38C BC66831A 256FD2A0 ',
+          '5268E236 CC0C7795 BB0B4703 220216B9 5505262F C5BA3BBE B2BD0B28 2BB45A92 5CB36A04 C2D7FFA7 ',
+          'B5D0CF31 2CD99E8B 5BDEAE1D 9B64C2B0 EC63F226 756AA39C 026D930A 9C0906A9 EB0E363F 72076785 ',
+          '05005713 95BF4A82 E2B87A14 7BB12BAE 0CB61B38 92D28E9B E5D5BE0D 7CDCEFB7 0BDBDF21 86D3D2D4 ',
+          'F1D4E242 68DDB3F8 1FDA836E 81BE16CD F6B9265B 6FB077E1 18B74777 88085AE6 FF0F6A70 66063BCA ',
+          '11010B5C 8F659EFF F862AE69 616BFFD3 166CCF45 A00AE278 D70DD2EE 4E048354 3903B3C2 A7672661 ',
+          'D06016F7 4969474D 3E6E77DB AED16A4A D9D65ADC 40DF0B66 37D83BF0 A9BCAE53 DEBB9EC5 47B2CF7F ',
+          '30B5FFE9 BDBDF21C CABAC28A 53B39330 24B4A3A6 BAD03605 CDD70693 54DE5729 23D967BF B3667A2E ',
+          'C4614AB8 5D681B02 2A6F2B94 B40BBE37 C30C8EA1 5A05DF1B 2D02EF8D'
+        ].join('');
 
-      function searchPresetTank() {
-          if (!_tankID || !context.hasEntity(_tankID)) {
-              return addTank();
+        crc = crc ^ (-1);
+        for (i = 0, iTop = str.length; i < iTop; i += 1) {
+          y = (crc ^ str.charCodeAt(i)) & 0xFF;
+          x = '0x' + table.substr(y * 9, 8);
+          crc = (crc >>> 8) ^ x;
+        }
+        // always return a positive number (that's what >>> 0 does)
+        return (crc ^ (-1)) >>> 0;
+      },
+      /**
+       * @member Hashes
+       * @class MD5
+       * @constructor
+       * @param {Object} [config]
+       *
+       * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
+       * Digest Algorithm, as defined in RFC 1321.
+       * Version 2.2 Copyright (C) Paul Johnston 1999 - 2009
+       * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
+       * See <http://pajhome.org.uk/crypt/md5> for more infHashes.
+       */
+      MD5: function(options) {
+        /**
+         * Private config properties. You may need to tweak these to be compatible with
+         * the server-side, but the defaults work in most cases.
+         * See {@link Hashes.MD5#method-setUpperCase} and {@link Hashes.SHA1#method-setUpperCase}
+         */
+        var hexcase = (options && typeof options.uppercase === 'boolean') ? options.uppercase : false, // hexadecimal output case format. false - lowercase; true - uppercase
+          b64pad = (options && typeof options.pad === 'string') ? options.pad : '=', // base-64 pad character. Defaults to '=' for strict RFC compliance
+          utf8 = (options && typeof options.utf8 === 'boolean') ? options.utf8 : true; // enable/disable utf8 encoding
+
+        // privileged (public) methods
+        this.hex = function(s) {
+          return rstr2hex(rstr(s, utf8), hexcase);
+        };
+        this.b64 = function(s) {
+          return rstr2b64(rstr(s), b64pad);
+        };
+        this.any = function(s, e) {
+          return rstr2any(rstr(s, utf8), e);
+        };
+        this.raw = function(s) {
+          return rstr(s, utf8);
+        };
+        this.hex_hmac = function(k, d) {
+          return rstr2hex(rstr_hmac(k, d), hexcase);
+        };
+        this.b64_hmac = function(k, d) {
+          return rstr2b64(rstr_hmac(k, d), b64pad);
+        };
+        this.any_hmac = function(k, d, e) {
+          return rstr2any(rstr_hmac(k, d), e);
+        };
+        /**
+         * Perform a simple self-test to see if the VM is working
+         * @return {String} Hexadecimal hash sample
+         */
+        this.vm_test = function() {
+          return hex('abc').toLowerCase() === '900150983cd24fb0d6963f7d28e17f72';
+        };
+        /**
+         * Enable/disable uppercase hexadecimal returned string
+         * @param {Boolean}
+         * @return {Object} this
+         */
+        this.setUpperCase = function(a) {
+          if (typeof a === 'boolean') {
+            hexcase = a;
           }
-          var ids = context.selectedIDs();
-          if (context.mode().id !== 'select' || !ids.length || ids[0] !== _tankID) {
-              context.enter(modeSelect(context, [_tankID]));
+          return this;
+        };
+        /**
+         * Defines a base64 pad string
+         * @param {String} Pad
+         * @return {Object} this
+         */
+        this.setPad = function(a) {
+          b64pad = a || b64pad;
+          return this;
+        };
+        /**
+         * Defines a base64 pad string
+         * @param {Boolean}
+         * @return {Object} [this]
+         */
+        this.setUTF8 = function(a) {
+          if (typeof a === 'boolean') {
+            utf8 = a;
           }
+          return this;
+        };
 
-          // disallow scrolling
-          select('.inspector-wrap').on('wheel.intro', eventCancel);
-
-          timeout(function() {
-              // reset pane, in case user somehow happened to change it..
-              select('.inspector-wrap .panewrap').style('right', '-100%');
+        // private methods
 
-              select('.preset-search-input')
-                  .on('keydown.intro', null)
-                  .on('keyup.intro', checkPresetSearch);
+        /**
+         * Calculate the MD5 of a raw string
+         */
 
-              reveal('.preset-search-input',
-                  t('intro.buildings.search_tank', { preset: tankPreset.name() })
-              );
-          }, 400);  // after preset list pane visible..
+        function rstr(s) {
+          s = (utf8) ? utf8Encode(s) : s;
+          return binl2rstr(binl(rstr2binl(s), s.length * 8));
+        }
 
-          context.on('enter.intro', function(mode) {
-              if (!_tankID || !context.hasEntity(_tankID)) {
-                  return continueTo(addTank);
-              }
+        /**
+         * Calculate the HMAC-MD5, of a key and some data (raw strings)
+         */
 
-              var ids = context.selectedIDs();
-              if (mode.id !== 'select' || !ids.length || ids[0] !== _tankID) {
-                  // keep the user's area selected..
-                  context.enter(modeSelect(context, [_tankID]));
+        function rstr_hmac(key, data) {
+          var bkey, ipad, opad, hash, i;
 
-                  // reset pane, in case user somehow happened to change it..
-                  select('.inspector-wrap .panewrap').style('right', '-100%');
-                  // disallow scrolling
-                  select('.inspector-wrap').on('wheel.intro', eventCancel);
+          key = (utf8) ? utf8Encode(key) : key;
+          data = (utf8) ? utf8Encode(data) : data;
+          bkey = rstr2binl(key);
+          if (bkey.length > 16) {
+            bkey = binl(bkey, key.length * 8);
+          }
 
-                  select('.preset-search-input')
-                      .on('keydown.intro', null)
-                      .on('keyup.intro', checkPresetSearch);
+          ipad = Array(16), opad = Array(16);
+          for (i = 0; i < 16; i += 1) {
+            ipad[i] = bkey[i] ^ 0x36363636;
+            opad[i] = bkey[i] ^ 0x5C5C5C5C;
+          }
+          hash = binl(ipad.concat(rstr2binl(data)), 512 + data.length * 8);
+          return binl2rstr(binl(opad.concat(hash), 512 + 128));
+        }
 
-                  reveal('.preset-search-input',
-                      t('intro.buildings.search_tank', { preset: tankPreset.name() })
-                  );
+        /**
+         * Calculate the MD5 of an array of little-endian words, and a bit length.
+         */
 
-                  context.history().on('change.intro', null);
-              }
-          });
+        function binl(x, len) {
+          var i, olda, oldb, oldc, oldd,
+            a = 1732584193,
+            b = -271733879,
+            c = -1732584194,
+            d = 271733878;
 
-          function checkPresetSearch() {
-              var first = select('.preset-list-item:first-child');
+          /* append padding */
+          x[len >> 5] |= 0x80 << ((len) % 32);
+          x[(((len + 64) >>> 9) << 4) + 14] = len;
 
-              if (first.classed('preset-man_made-storage_tank')) {
-                  reveal(first.select('.preset-list-button').node(),
-                      t('intro.buildings.choose_tank', { preset: tankPreset.name() }),
-                      { duration: 300 }
-                  );
+          for (i = 0; i < x.length; i += 16) {
+            olda = a;
+            oldb = b;
+            oldc = c;
+            oldd = d;
 
-                  select('.preset-search-input')
-                      .on('keydown.intro', eventCancel, true)
-                      .on('keyup.intro', null);
+            a = md5_ff(a, b, c, d, x[i + 0], 7, -680876936);
+            d = md5_ff(d, a, b, c, x[i + 1], 12, -389564586);
+            c = md5_ff(c, d, a, b, x[i + 2], 17, 606105819);
+            b = md5_ff(b, c, d, a, x[i + 3], 22, -1044525330);
+            a = md5_ff(a, b, c, d, x[i + 4], 7, -176418897);
+            d = md5_ff(d, a, b, c, x[i + 5], 12, 1200080426);
+            c = md5_ff(c, d, a, b, x[i + 6], 17, -1473231341);
+            b = md5_ff(b, c, d, a, x[i + 7], 22, -45705983);
+            a = md5_ff(a, b, c, d, x[i + 8], 7, 1770035416);
+            d = md5_ff(d, a, b, c, x[i + 9], 12, -1958414417);
+            c = md5_ff(c, d, a, b, x[i + 10], 17, -42063);
+            b = md5_ff(b, c, d, a, x[i + 11], 22, -1990404162);
+            a = md5_ff(a, b, c, d, x[i + 12], 7, 1804603682);
+            d = md5_ff(d, a, b, c, x[i + 13], 12, -40341101);
+            c = md5_ff(c, d, a, b, x[i + 14], 17, -1502002290);
+            b = md5_ff(b, c, d, a, x[i + 15], 22, 1236535329);
 
-                  context.history().on('change.intro', function() {
-                      continueTo(closeEditorTank);
-                  });
-              }
-          }
+            a = md5_gg(a, b, c, d, x[i + 1], 5, -165796510);
+            d = md5_gg(d, a, b, c, x[i + 6], 9, -1069501632);
+            c = md5_gg(c, d, a, b, x[i + 11], 14, 643717713);
+            b = md5_gg(b, c, d, a, x[i + 0], 20, -373897302);
+            a = md5_gg(a, b, c, d, x[i + 5], 5, -701558691);
+            d = md5_gg(d, a, b, c, x[i + 10], 9, 38016083);
+            c = md5_gg(c, d, a, b, x[i + 15], 14, -660478335);
+            b = md5_gg(b, c, d, a, x[i + 4], 20, -405537848);
+            a = md5_gg(a, b, c, d, x[i + 9], 5, 568446438);
+            d = md5_gg(d, a, b, c, x[i + 14], 9, -1019803690);
+            c = md5_gg(c, d, a, b, x[i + 3], 14, -187363961);
+            b = md5_gg(b, c, d, a, x[i + 8], 20, 1163531501);
+            a = md5_gg(a, b, c, d, x[i + 13], 5, -1444681467);
+            d = md5_gg(d, a, b, c, x[i + 2], 9, -51403784);
+            c = md5_gg(c, d, a, b, x[i + 7], 14, 1735328473);
+            b = md5_gg(b, c, d, a, x[i + 12], 20, -1926607734);
 
-          function continueTo(nextStep) {
-              select('.inspector-wrap').on('wheel.intro', null);
-              context.on('enter.intro', null);
-              context.history().on('change.intro', null);
-              select('.preset-search-input').on('keydown.intro keyup.intro', null);
-              nextStep();
-          }
-      }
+            a = md5_hh(a, b, c, d, x[i + 5], 4, -378558);
+            d = md5_hh(d, a, b, c, x[i + 8], 11, -2022574463);
+            c = md5_hh(c, d, a, b, x[i + 11], 16, 1839030562);
+            b = md5_hh(b, c, d, a, x[i + 14], 23, -35309556);
+            a = md5_hh(a, b, c, d, x[i + 1], 4, -1530992060);
+            d = md5_hh(d, a, b, c, x[i + 4], 11, 1272893353);
+            c = md5_hh(c, d, a, b, x[i + 7], 16, -155497632);
+            b = md5_hh(b, c, d, a, x[i + 10], 23, -1094730640);
+            a = md5_hh(a, b, c, d, x[i + 13], 4, 681279174);
+            d = md5_hh(d, a, b, c, x[i + 0], 11, -358537222);
+            c = md5_hh(c, d, a, b, x[i + 3], 16, -722521979);
+            b = md5_hh(b, c, d, a, x[i + 6], 23, 76029189);
+            a = md5_hh(a, b, c, d, x[i + 9], 4, -640364487);
+            d = md5_hh(d, a, b, c, x[i + 12], 11, -421815835);
+            c = md5_hh(c, d, a, b, x[i + 15], 16, 530742520);
+            b = md5_hh(b, c, d, a, x[i + 2], 23, -995338651);
 
+            a = md5_ii(a, b, c, d, x[i + 0], 6, -198630844);
+            d = md5_ii(d, a, b, c, x[i + 7], 10, 1126891415);
+            c = md5_ii(c, d, a, b, x[i + 14], 15, -1416354905);
+            b = md5_ii(b, c, d, a, x[i + 5], 21, -57434055);
+            a = md5_ii(a, b, c, d, x[i + 12], 6, 1700485571);
+            d = md5_ii(d, a, b, c, x[i + 3], 10, -1894986606);
+            c = md5_ii(c, d, a, b, x[i + 10], 15, -1051523);
+            b = md5_ii(b, c, d, a, x[i + 1], 21, -2054922799);
+            a = md5_ii(a, b, c, d, x[i + 8], 6, 1873313359);
+            d = md5_ii(d, a, b, c, x[i + 15], 10, -30611744);
+            c = md5_ii(c, d, a, b, x[i + 6], 15, -1560198380);
+            b = md5_ii(b, c, d, a, x[i + 13], 21, 1309151649);
+            a = md5_ii(a, b, c, d, x[i + 4], 6, -145523070);
+            d = md5_ii(d, a, b, c, x[i + 11], 10, -1120210379);
+            c = md5_ii(c, d, a, b, x[i + 2], 15, 718787259);
+            b = md5_ii(b, c, d, a, x[i + 9], 21, -343485551);
 
-      function closeEditorTank() {
-          if (!_tankID || !context.hasEntity(_tankID)) {
-              return addTank();
-          }
-          var ids = context.selectedIDs();
-          if (context.mode().id !== 'select' || !ids.length || ids[0] !== _tankID) {
-              context.enter(modeSelect(context, [_tankID]));
+            a = safe_add(a, olda);
+            b = safe_add(b, oldb);
+            c = safe_add(c, oldc);
+            d = safe_add(d, oldd);
           }
+          return Array(a, b, c, d);
+        }
 
-          context.history().checkpoint('hasTank');
-
-          context.on('exit.intro', function() {
-              continueTo(rightClickTank);
-          });
+        /**
+         * These functions implement the four basic operations the algorithm uses.
+         */
 
-          timeout(function() {
-              reveal('.entity-editor-pane',
-                  t('intro.buildings.close', { button: icon('#iD-icon-apply', 'pre-text') })
-              );
-          }, 500);
+        function md5_cmn(q, a, b, x, s, t) {
+          return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s), b);
+        }
 
-          function continueTo(nextStep) {
-              context.on('exit.intro', null);
-              nextStep();
-          }
-      }
+        function md5_ff(a, b, c, d, x, s, t) {
+          return md5_cmn((b & c) | ((~b) & d), a, b, x, s, t);
+        }
 
+        function md5_gg(a, b, c, d, x, s, t) {
+          return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t);
+        }
 
-      function rightClickTank() {
-          if (!_tankID) return continueTo(addTank);
+        function md5_hh(a, b, c, d, x, s, t) {
+          return md5_cmn(b ^ c ^ d, a, b, x, s, t);
+        }
 
-          context.enter(modeBrowse(context));
-          context.history().reset('hasTank');
-          context.map().centerEase(tank, 500);
+        function md5_ii(a, b, c, d, x, s, t) {
+          return md5_cmn(c ^ (b | (~d)), a, b, x, s, t);
+        }
+      },
+      /**
+       * @member Hashes
+       * @class Hashes.SHA1
+       * @param {Object} [config]
+       * @constructor
+       *
+       * A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined in FIPS 180-1
+       * Version 2.2 Copyright Paul Johnston 2000 - 2009.
+       * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
+       * See http://pajhome.org.uk/crypt/md5 for details.
+       */
+      SHA1: function(options) {
+        /**
+         * Private config properties. You may need to tweak these to be compatible with
+         * the server-side, but the defaults work in most cases.
+         * See {@link Hashes.MD5#method-setUpperCase} and {@link Hashes.SHA1#method-setUpperCase}
+         */
+        var hexcase = (options && typeof options.uppercase === 'boolean') ? options.uppercase : false, // hexadecimal output case format. false - lowercase; true - uppercase
+          b64pad = (options && typeof options.pad === 'string') ? options.pad : '=', // base-64 pad character. Defaults to '=' for strict RFC compliance
+          utf8 = (options && typeof options.utf8 === 'boolean') ? options.utf8 : true; // enable/disable utf8 encoding
 
-          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;
+        // public methods
+        this.hex = function(s) {
+          return rstr2hex(rstr(s, utf8), hexcase);
+        };
+        this.b64 = function(s) {
+          return rstr2b64(rstr(s, utf8), b64pad);
+        };
+        this.any = function(s, e) {
+          return rstr2any(rstr(s, utf8), e);
+        };
+        this.raw = function(s) {
+          return rstr(s, utf8);
+        };
+        this.hex_hmac = function(k, d) {
+          return rstr2hex(rstr_hmac(k, d));
+        };
+        this.b64_hmac = function(k, d) {
+          return rstr2b64(rstr_hmac(k, d), b64pad);
+        };
+        this.any_hmac = function(k, d, e) {
+          return rstr2any(rstr_hmac(k, d), e);
+        };
+        /**
+         * Perform a simple self-test to see if the VM is working
+         * @return {String} Hexadecimal hash sample
+         * @public
+         */
+        this.vm_test = function() {
+          return hex('abc').toLowerCase() === '900150983cd24fb0d6963f7d28e17f72';
+        };
+        /**
+         * @description Enable/disable uppercase hexadecimal returned string
+         * @param {boolean}
+         * @return {Object} this
+         * @public
+         */
+        this.setUpperCase = function(a) {
+          if (typeof a === 'boolean') {
+            hexcase = a;
+          }
+          return this;
+        };
+        /**
+         * @description Defines a base64 pad string
+         * @param {string} Pad
+         * @return {Object} this
+         * @public
+         */
+        this.setPad = function(a) {
+          b64pad = a || b64pad;
+          return this;
+        };
+        /**
+         * @description Defines a base64 pad string
+         * @param {boolean}
+         * @return {Object} this
+         * @public
+         */
+        this.setUTF8 = function(a) {
+          if (typeof a === 'boolean') {
+            utf8 = a;
+          }
+          return this;
+        };
 
-                  timeout(function() {
-                      var node = selectMenuItem('circularize').node();
-                      if (!node) return;
-                      continueTo(clickCircle);
-                  }, 300);  // after menu visible
-              });
+        // private methods
 
-              revealTank(tank, t('intro.buildings.rightclick_tank'));
+        /**
+         * Calculate the SHA-512 of a raw string
+         */
 
-              context.map().on('move.intro drawn.intro', function() {
-                  revealTank(tank, t('intro.buildings.rightclick_tank'), { duration: 0 });
-              });
+        function rstr(s) {
+          s = (utf8) ? utf8Encode(s) : s;
+          return binb2rstr(binb(rstr2binb(s), s.length * 8));
+        }
 
-              context.history().on('change.intro', function() {
-                  continueTo(rightClickTank);
-              });
+        /**
+         * Calculate the HMAC-SHA1 of a key and some data (raw strings)
+         */
 
-          }, 600);
+        function rstr_hmac(key, data) {
+          var bkey, ipad, opad, i, hash;
+          key = (utf8) ? utf8Encode(key) : key;
+          data = (utf8) ? utf8Encode(data) : data;
+          bkey = rstr2binb(key);
 
-          function continueTo(nextStep) {
-              context.on('enter.intro', null);
-              context.map().on('move.intro drawn.intro', null);
-              context.history().on('change.intro', null);
-              nextStep();
+          if (bkey.length > 16) {
+            bkey = binb(bkey, key.length * 8);
           }
-      }
-
+          ipad = Array(16), opad = Array(16);
+          for (i = 0; i < 16; i += 1) {
+            ipad[i] = bkey[i] ^ 0x36363636;
+            opad[i] = bkey[i] ^ 0x5C5C5C5C;
+          }
+          hash = binb(ipad.concat(rstr2binb(data)), 512 + data.length * 8);
+          return binb2rstr(binb(opad.concat(hash), 512 + 160));
+        }
 
-      function clickCircle() {
-          if (!_tankID) return chapter.restart();
-          var entity = context.hasEntity(_tankID);
-          if (!entity) return continueTo(rightClickTank);
+        /**
+         * Calculate the SHA-1 of an array of big-endian words, and a bit length
+         */
 
-          var node = selectMenuItem('circularize').node();
-          if (!node) { return continueTo(rightClickTank); }
+        function binb(x, len) {
+          var i, j, t, olda, oldb, oldc, oldd, olde,
+            w = Array(80),
+            a = 1732584193,
+            b = -271733879,
+            c = -1732584194,
+            d = 271733878,
+            e = -1009589776;
 
-          var wasChanged = false;
-          var menuCoords = context.map().mouseCoordinates();
+          /* append padding */
+          x[len >> 5] |= 0x80 << (24 - len % 32);
+          x[((len + 64 >> 9) << 4) + 15] = len;
 
-          revealEditMenu(menuCoords,
-              t('intro.buildings.circle_tank', { button: icon('#iD-operation-circularize', 'pre-text') })
-          );
+          for (i = 0; i < x.length; i += 16) {
+            olda = a;
+            oldb = b;
+            oldc = c;
+            oldd = d;
+            olde = e;
 
-          context.on('enter.intro', function(mode) {
-              if (mode.id === 'browse') {
-                  continueTo(rightClickTank);
-              } else if (mode.id === 'move' || mode.id === 'rotate') {
-                  continueTo(retryClickCircle);
+            for (j = 0; j < 80; j += 1) {
+              if (j < 16) {
+                w[j] = x[i + j];
+              } else {
+                w[j] = bit_rol(w[j - 3] ^ w[j - 8] ^ w[j - 14] ^ w[j - 16], 1);
               }
-          });
+              t = safe_add(safe_add(bit_rol(a, 5), sha1_ft(j, b, c, d)),
+                safe_add(safe_add(e, w[j]), sha1_kt(j)));
+              e = d;
+              d = c;
+              c = bit_rol(b, 30);
+              b = a;
+              a = t;
+            }
 
-          context.map().on('move.intro drawn.intro', function() {
-              var node = selectMenuItem('circularize').node();
-              if (!wasChanged && !node) { return continueTo(rightClickTank); }
+            a = safe_add(a, olda);
+            b = safe_add(b, oldb);
+            c = safe_add(c, oldc);
+            d = safe_add(d, oldd);
+            e = safe_add(e, olde);
+          }
+          return Array(a, b, c, d, e);
+        }
 
-              revealEditMenu(menuCoords,
-                  t('intro.buildings.circle_tank', { button: icon('#iD-operation-circularize', 'pre-text') }),
-                  { duration: 0 }
-              );
-          });
+        /**
+         * Perform the appropriate triplet combination function for the current
+         * iteration
+         */
 
-          context.history().on('change.intro', function() {
-              wasChanged = true;
-              context.history().on('change.intro', null);
+        function sha1_ft(t, b, c, d) {
+          if (t < 20) {
+            return (b & c) | ((~b) & d);
+          }
+          if (t < 40) {
+            return b ^ c ^ d;
+          }
+          if (t < 60) {
+            return (b & c) | (b & d) | (c & d);
+          }
+          return b ^ c ^ d;
+        }
 
-              // Something changed.  Wait for transition to complete and check undo annotation.
-              timeout(function() {
-                  if (context.history().undoAnnotation() === t('operations.circularize.annotation.area')) {
-                      continueTo(play);
-                  } else {
-                      continueTo(retryClickCircle);
-                  }
-              }, 500);  // after transitioned actions
-          });
+        /**
+         * Determine the appropriate additive constant for the current iteration
+         */
 
-          function continueTo(nextStep) {
-              context.on('enter.intro', null);
-              context.map().on('move.intro drawn.intro', null);
-              context.history().on('change.intro', null);
-              nextStep();
-          }
-      }
+        function sha1_kt(t) {
+          return (t < 20) ? 1518500249 : (t < 40) ? 1859775393 :
+            (t < 60) ? -1894007588 : -899497514;
+        }
+      },
+      /**
+       * @class Hashes.SHA256
+       * @param {config}
+       *
+       * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined in FIPS 180-2
+       * Version 2.2 Copyright Angel Marin, Paul Johnston 2000 - 2009.
+       * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
+       * See http://pajhome.org.uk/crypt/md5 for details.
+       * Also http://anmar.eu.org/projects/jssha2/
+       */
+      SHA256: function(options) {
+        /**
+         * Private properties configuration variables. You may need to tweak these to be compatible with
+         * the server-side, but the defaults work in most cases.
+         * @see this.setUpperCase() method
+         * @see this.setPad() method
+         */
+        var hexcase = (options && typeof options.uppercase === 'boolean') ? options.uppercase : false, // hexadecimal output case format. false - lowercase; true - uppercase  */
+          b64pad = (options && typeof options.pad === 'string') ? options.pad : '=',
+          /* base-64 pad character. Default '=' for strict RFC compliance   */
+          utf8 = (options && typeof options.utf8 === 'boolean') ? options.utf8 : true,
+          /* enable/disable utf8 encoding */
+          sha256_K;
 
+        /* privileged (public) methods */
+        this.hex = function(s) {
+          return rstr2hex(rstr(s, utf8));
+        };
+        this.b64 = function(s) {
+          return rstr2b64(rstr(s, utf8), b64pad);
+        };
+        this.any = function(s, e) {
+          return rstr2any(rstr(s, utf8), e);
+        };
+        this.raw = function(s) {
+          return rstr(s, utf8);
+        };
+        this.hex_hmac = function(k, d) {
+          return rstr2hex(rstr_hmac(k, d));
+        };
+        this.b64_hmac = function(k, d) {
+          return rstr2b64(rstr_hmac(k, d), b64pad);
+        };
+        this.any_hmac = function(k, d, e) {
+          return rstr2any(rstr_hmac(k, d), e);
+        };
+        /**
+         * Perform a simple self-test to see if the VM is working
+         * @return {String} Hexadecimal hash sample
+         * @public
+         */
+        this.vm_test = function() {
+          return hex('abc').toLowerCase() === '900150983cd24fb0d6963f7d28e17f72';
+        };
+        /**
+         * Enable/disable uppercase hexadecimal returned string
+         * @param {boolean}
+         * @return {Object} this
+         * @public
+         */
+        this.setUpperCase = function(a) {
+          if (typeof a === 'boolean') {
+            hexcase = a;
+          }
+          return this;
+        };
+        /**
+         * @description Defines a base64 pad string
+         * @param {string} Pad
+         * @return {Object} this
+         * @public
+         */
+        this.setPad = function(a) {
+          b64pad = a || b64pad;
+          return this;
+        };
+        /**
+         * Defines a base64 pad string
+         * @param {boolean}
+         * @return {Object} this
+         * @public
+         */
+        this.setUTF8 = function(a) {
+          if (typeof a === 'boolean') {
+            utf8 = a;
+          }
+          return this;
+        };
 
-      function retryClickCircle() {
-          context.enter(modeBrowse(context));
+        // private methods
 
-          revealTank(tank, t('intro.buildings.retry_circle'), {
-              buttonText: t('intro.ok'),
-              buttonCallback: function() { continueTo(rightClickTank); }
-          });
+        /**
+         * Calculate the SHA-512 of a raw string
+         */
 
-          function continueTo(nextStep) {
-              nextStep();
-          }
-      }
+        function rstr(s, utf8) {
+          s = (utf8) ? utf8Encode(s) : s;
+          return binb2rstr(binb(rstr2binb(s), s.length * 8));
+        }
 
+        /**
+         * Calculate the HMAC-sha256 of a key and some data (raw strings)
+         */
 
-      function play() {
-          dispatch$$1.call('done');
-          reveal('#id-container',
-              t('intro.buildings.play', { next: t('intro.startediting.title') }), {
-                  tooltipBox: '.intro-nav-wrap .chapter-startEditing',
-                  buttonText: t('intro.ok'),
-                  buttonCallback: function() { reveal('#id-container'); }
-              }
-          );
-      }
+        function rstr_hmac(key, data) {
+          key = (utf8) ? utf8Encode(key) : key;
+          data = (utf8) ? utf8Encode(data) : data;
+          var hash, i = 0,
+            bkey = rstr2binb(key),
+            ipad = Array(16),
+            opad = Array(16);
 
+          if (bkey.length > 16) {
+            bkey = binb(bkey, key.length * 8);
+          }
 
-      chapter.enter = function() {
-          addHouse();
-      };
+          for (; i < 16; i += 1) {
+            ipad[i] = bkey[i] ^ 0x36363636;
+            opad[i] = bkey[i] ^ 0x5C5C5C5C;
+          }
 
+          hash = binb(ipad.concat(rstr2binb(data)), 512 + data.length * 8);
+          return binb2rstr(binb(opad.concat(hash), 512 + 256));
+        }
 
-      chapter.exit = function() {
-          timeouts.forEach(window.clearTimeout);
-          context.on('enter.intro exit.intro', null);
-          context.map().on('move.intro drawn.intro', null);
-          context.history().on('change.intro', null);
-          select('.inspector-wrap').on('wheel.intro', null);
-          select('.preset-search-input').on('keydown.intro keyup.intro', null);
-          select('.more-fields .combobox-input').on('click.intro', null);
-      };
+        /*
+         * Main sha256 function, with its support functions
+         */
 
+        function sha256_S(X, n) {
+          return (X >>> n) | (X << (32 - n));
+        }
 
-      chapter.restart = function() {
-          chapter.exit();
-          chapter.enter();
-      };
+        function sha256_R(X, n) {
+          return (X >>> n);
+        }
 
+        function sha256_Ch(x, y, z) {
+          return ((x & y) ^ ((~x) & z));
+        }
 
-      return utilRebind(chapter, dispatch$$1, 'on');
-  }
+        function sha256_Maj(x, y, z) {
+          return ((x & y) ^ (x & z) ^ (y & z));
+        }
 
-  function uiModal(selection$$1, blocking) {
-      var keybinding = utilKeybinding('modal');
-      var previous = selection$$1.select('div.modal');
-      var animate = previous.empty();
+        function sha256_Sigma0256(x) {
+          return (sha256_S(x, 2) ^ sha256_S(x, 13) ^ sha256_S(x, 22));
+        }
 
-      previous.transition()
-          .duration(200)
-          .style('opacity', 0)
-          .remove();
+        function sha256_Sigma1256(x) {
+          return (sha256_S(x, 6) ^ sha256_S(x, 11) ^ sha256_S(x, 25));
+        }
 
-      var shaded = selection$$1
-          .append('div')
-          .attr('class', 'shaded')
-          .style('opacity', 0);
+        function sha256_Gamma0256(x) {
+          return (sha256_S(x, 7) ^ sha256_S(x, 18) ^ sha256_R(x, 3));
+        }
 
-      shaded.close = function() {
-          shaded
-              .transition()
-              .duration(200)
-              .style('opacity',0)
-              .remove();
+        function sha256_Gamma1256(x) {
+          return (sha256_S(x, 17) ^ sha256_S(x, 19) ^ sha256_R(x, 10));
+        }
 
-          modal
-              .transition()
-              .duration(200)
-              .style('top','0px');
+        sha256_K = [
+          1116352408, 1899447441, -1245643825, -373957723, 961987163, 1508970993, -1841331548, -1424204075, -670586216, 310598401, 607225278, 1426881987,
+          1925078388, -2132889090, -1680079193, -1046744716, -459576895, -272742522,
+          264347078, 604807628, 770255983, 1249150122, 1555081692, 1996064986, -1740746414, -1473132947, -1341970488, -1084653625, -958395405, -710438585,
+          113926993, 338241895, 666307205, 773529912, 1294757372, 1396182291,
+          1695183700, 1986661051, -2117940946, -1838011259, -1564481375, -1474664885, -1035236496, -949202525, -778901479, -694614492, -200395387, 275423344,
+          430227734, 506948616, 659060556, 883997877, 958139571, 1322822218,
+          1537002063, 1747873779, 1955562222, 2024104815, -2067236844, -1933114872, -1866530822, -1538233109, -1090935817, -965641998
+        ];
 
-          select(document)
-              .call(keybinding.unbind);
-      };
+        function binb(m, l) {
+          var HASH = [1779033703, -1150833019, 1013904242, -1521486534,
+            1359893119, -1694144372, 528734635, 1541459225
+          ];
+          var W = new Array(64);
+          var a, b, c, d, e, f, g, h;
+          var i, j, T1, T2;
 
+          /* append padding */
+          m[l >> 5] |= 0x80 << (24 - l % 32);
+          m[((l + 64 >> 9) << 4) + 15] = l;
 
-      var modal = shaded
-          .append('div')
-          .attr('class', 'modal fillL col6');
+          for (i = 0; i < m.length; i += 16) {
+            a = HASH[0];
+            b = HASH[1];
+            c = HASH[2];
+            d = HASH[3];
+            e = HASH[4];
+            f = HASH[5];
+            g = HASH[6];
+            h = HASH[7];
 
-      if (!blocking) {
-          shaded.on('click.remove-modal', function() {
-              if (event.target === this) {
-                  shaded.close();
+            for (j = 0; j < 64; j += 1) {
+              if (j < 16) {
+                W[j] = m[j + i];
+              } else {
+                W[j] = safe_add(safe_add(safe_add(sha256_Gamma1256(W[j - 2]), W[j - 7]),
+                  sha256_Gamma0256(W[j - 15])), W[j - 16]);
               }
-          });
 
-          modal.append('button')
-              .attr('class', 'close')
-              .on('click', shaded.close)
-              .call(svgIcon('#iD-icon-close'));
+              T1 = safe_add(safe_add(safe_add(safe_add(h, sha256_Sigma1256(e)), sha256_Ch(e, f, g)),
+                sha256_K[j]), W[j]);
+              T2 = safe_add(sha256_Sigma0256(a), sha256_Maj(a, b, c));
+              h = g;
+              g = f;
+              f = e;
+              e = safe_add(d, T1);
+              d = c;
+              c = b;
+              b = a;
+              a = safe_add(T1, T2);
+            }
 
-          keybinding
-              .on('⌫', shaded.close)
-              .on('⎋', shaded.close);
+            HASH[0] = safe_add(a, HASH[0]);
+            HASH[1] = safe_add(b, HASH[1]);
+            HASH[2] = safe_add(c, HASH[2]);
+            HASH[3] = safe_add(d, HASH[3]);
+            HASH[4] = safe_add(e, HASH[4]);
+            HASH[5] = safe_add(f, HASH[5]);
+            HASH[6] = safe_add(g, HASH[6]);
+            HASH[7] = safe_add(h, HASH[7]);
+          }
+          return HASH;
+        }
 
-          select(document)
-              .call(keybinding);
-      }
+      },
 
-      modal
-          .append('div')
-          .attr('class', 'content');
+      /**
+       * @class Hashes.SHA512
+       * @param {config}
+       *
+       * A JavaScript implementation of the Secure Hash Algorithm, SHA-512, as defined in FIPS 180-2
+       * Version 2.2 Copyright Anonymous Contributor, Paul Johnston 2000 - 2009.
+       * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
+       * See http://pajhome.org.uk/crypt/md5 for details.
+       */
+      SHA512: function(options) {
+        /**
+         * Private properties configuration variables. You may need to tweak these to be compatible with
+         * the server-side, but the defaults work in most cases.
+         * @see this.setUpperCase() method
+         * @see this.setPad() method
+         */
+        var hexcase = (options && typeof options.uppercase === 'boolean') ? options.uppercase : false,
+          /* hexadecimal output case format. false - lowercase; true - uppercase  */
+          b64pad = (options && typeof options.pad === 'string') ? options.pad : '=',
+          /* base-64 pad character. Default '=' for strict RFC compliance   */
+          utf8 = (options && typeof options.utf8 === 'boolean') ? options.utf8 : true,
+          /* enable/disable utf8 encoding */
+          sha512_k;
 
-      if (animate) {
-          shaded.transition().style('opacity', 1);
-      } else {
-          shaded.style('opacity', 1);
-      }
+        /* privileged (public) methods */
+        this.hex = function(s) {
+          return rstr2hex(rstr(s));
+        };
+        this.b64 = function(s) {
+          return rstr2b64(rstr(s), b64pad);
+        };
+        this.any = function(s, e) {
+          return rstr2any(rstr(s), e);
+        };
+        this.raw = function(s) {
+          return rstr(s, utf8);
+        };
+        this.hex_hmac = function(k, d) {
+          return rstr2hex(rstr_hmac(k, d));
+        };
+        this.b64_hmac = function(k, d) {
+          return rstr2b64(rstr_hmac(k, d), b64pad);
+        };
+        this.any_hmac = function(k, d, e) {
+          return rstr2any(rstr_hmac(k, d), e);
+        };
+        /**
+         * Perform a simple self-test to see if the VM is working
+         * @return {String} Hexadecimal hash sample
+         * @public
+         */
+        this.vm_test = function() {
+          return hex('abc').toLowerCase() === '900150983cd24fb0d6963f7d28e17f72';
+        };
+        /**
+         * @description Enable/disable uppercase hexadecimal returned string
+         * @param {boolean}
+         * @return {Object} this
+         * @public
+         */
+        this.setUpperCase = function(a) {
+          if (typeof a === 'boolean') {
+            hexcase = a;
+          }
+          return this;
+        };
+        /**
+         * @description Defines a base64 pad string
+         * @param {string} Pad
+         * @return {Object} this
+         * @public
+         */
+        this.setPad = function(a) {
+          b64pad = a || b64pad;
+          return this;
+        };
+        /**
+         * @description Defines a base64 pad string
+         * @param {boolean}
+         * @return {Object} this
+         * @public
+         */
+        this.setUTF8 = function(a) {
+          if (typeof a === 'boolean') {
+            utf8 = a;
+          }
+          return this;
+        };
 
+        /* private methods */
 
-      return shaded;
-  }
+        /**
+         * Calculate the SHA-512 of a raw string
+         */
 
-  function uiIntroStartEditing(context, reveal) {
-      var dispatch$$1 = dispatch('done', 'startEditing');
-      var modalSelection = select(null);
+        function rstr(s) {
+          s = (utf8) ? utf8Encode(s) : s;
+          return binb2rstr(binb(rstr2binb(s), s.length * 8));
+        }
+        /*
+         * Calculate the HMAC-SHA-512 of a key and some data (raw strings)
+         */
 
+        function rstr_hmac(key, data) {
+          key = (utf8) ? utf8Encode(key) : key;
+          data = (utf8) ? utf8Encode(data) : data;
 
-      var chapter = {
-          title: 'intro.startediting.title'
-      };
+          var hash, i = 0,
+            bkey = rstr2binb(key),
+            ipad = Array(32),
+            opad = Array(32);
 
-      function showHelp() {
-          reveal('.map-control.help-control',
-              t('intro.startediting.help', { button: icon('#iD-icon-help', 'pre-text'), key: t('help.key') }), {
-                  buttonText: t('intro.ok'),
-                  buttonCallback: function() { shortcuts(); }
-              }
-          );
-      }
+          if (bkey.length > 32) {
+            bkey = binb(bkey, key.length * 8);
+          }
 
-      function shortcuts() {
-          reveal('.map-control.help-control',
-              t('intro.startediting.shortcuts', { key: t('shortcuts.toggle.key') }), {
-                  buttonText: t('intro.ok'),
-                  buttonCallback: function() { showSave(); }
-              }
-          );
-      }
+          for (; i < 32; i += 1) {
+            ipad[i] = bkey[i] ^ 0x36363636;
+            opad[i] = bkey[i] ^ 0x5C5C5C5C;
+          }
 
-      function showSave() {
-          d3_selectAll('.shaded').remove();  // in case user opened keyboard shortcuts
-          reveal('#bar button.save',
-              t('intro.startediting.save'), {
-                  buttonText: t('intro.ok'),
-                  buttonCallback: function() { showStart(); }
-              }
-          );
-      }
+          hash = binb(ipad.concat(rstr2binb(data)), 1024 + data.length * 8);
+          return binb2rstr(binb(opad.concat(hash), 1024 + 512));
+        }
 
-      function showStart() {
-          d3_selectAll('.shaded').remove();  // in case user opened keyboard shortcuts
+        /**
+         * Calculate the SHA-512 of an array of big-endian dwords, and a bit length
+         */
 
-          modalSelection = uiModal(context.container());
+        function binb(x, len) {
+          var j, i, l,
+            W = new Array(80),
+            hash = new Array(16),
+            //Initial hash values
+            H = [
+              new int64(0x6a09e667, -205731576),
+              new int64(-1150833019, -2067093701),
+              new int64(0x3c6ef372, -23791573),
+              new int64(-1521486534, 0x5f1d36f1),
+              new int64(0x510e527f, -1377402159),
+              new int64(-1694144372, 0x2b3e6c1f),
+              new int64(0x1f83d9ab, -79577749),
+              new int64(0x5be0cd19, 0x137e2179)
+            ],
+            T1 = new int64(0, 0),
+            T2 = new int64(0, 0),
+            a = new int64(0, 0),
+            b = new int64(0, 0),
+            c = new int64(0, 0),
+            d = new int64(0, 0),
+            e = new int64(0, 0),
+            f = new int64(0, 0),
+            g = new int64(0, 0),
+            h = new int64(0, 0),
+            //Temporary variables not specified by the document
+            s0 = new int64(0, 0),
+            s1 = new int64(0, 0),
+            Ch = new int64(0, 0),
+            Maj = new int64(0, 0),
+            r1 = new int64(0, 0),
+            r2 = new int64(0, 0),
+            r3 = new int64(0, 0);
 
-          modalSelection.select('.modal')
-              .attr('class', 'modal-splash modal col6');
+          if (sha512_k === undefined) {
+            //SHA512 constants
+            sha512_k = [
+              new int64(0x428a2f98, -685199838), new int64(0x71374491, 0x23ef65cd),
+              new int64(-1245643825, -330482897), new int64(-373957723, -2121671748),
+              new int64(0x3956c25b, -213338824), new int64(0x59f111f1, -1241133031),
+              new int64(-1841331548, -1357295717), new int64(-1424204075, -630357736),
+              new int64(-670586216, -1560083902), new int64(0x12835b01, 0x45706fbe),
+              new int64(0x243185be, 0x4ee4b28c), new int64(0x550c7dc3, -704662302),
+              new int64(0x72be5d74, -226784913), new int64(-2132889090, 0x3b1696b1),
+              new int64(-1680079193, 0x25c71235), new int64(-1046744716, -815192428),
+              new int64(-459576895, -1628353838), new int64(-272742522, 0x384f25e3),
+              new int64(0xfc19dc6, -1953704523), new int64(0x240ca1cc, 0x77ac9c65),
+              new int64(0x2de92c6f, 0x592b0275), new int64(0x4a7484aa, 0x6ea6e483),
+              new int64(0x5cb0a9dc, -1119749164), new int64(0x76f988da, -2096016459),
+              new int64(-1740746414, -295247957), new int64(-1473132947, 0x2db43210),
+              new int64(-1341970488, -1728372417), new int64(-1084653625, -1091629340),
+              new int64(-958395405, 0x3da88fc2), new int64(-710438585, -1828018395),
+              new int64(0x6ca6351, -536640913), new int64(0x14292967, 0xa0e6e70),
+              new int64(0x27b70a85, 0x46d22ffc), new int64(0x2e1b2138, 0x5c26c926),
+              new int64(0x4d2c6dfc, 0x5ac42aed), new int64(0x53380d13, -1651133473),
+              new int64(0x650a7354, -1951439906), new int64(0x766a0abb, 0x3c77b2a8),
+              new int64(-2117940946, 0x47edaee6), new int64(-1838011259, 0x1482353b),
+              new int64(-1564481375, 0x4cf10364), new int64(-1474664885, -1136513023),
+              new int64(-1035236496, -789014639), new int64(-949202525, 0x654be30),
+              new int64(-778901479, -688958952), new int64(-694614492, 0x5565a910),
+              new int64(-200395387, 0x5771202a), new int64(0x106aa070, 0x32bbd1b8),
+              new int64(0x19a4c116, -1194143544), new int64(0x1e376c08, 0x5141ab53),
+              new int64(0x2748774c, -544281703), new int64(0x34b0bcb5, -509917016),
+              new int64(0x391c0cb3, -976659869), new int64(0x4ed8aa4a, -482243893),
+              new int64(0x5b9cca4f, 0x7763e373), new int64(0x682e6ff3, -692930397),
+              new int64(0x748f82ee, 0x5defb2fc), new int64(0x78a5636f, 0x43172f60),
+              new int64(-2067236844, -1578062990), new int64(-1933114872, 0x1a6439ec),
+              new int64(-1866530822, 0x23631e28), new int64(-1538233109, -561857047),
+              new int64(-1090935817, -1295615723), new int64(-965641998, -479046869),
+              new int64(-903397682, -366583396), new int64(-779700025, 0x21c0c207),
+              new int64(-354779690, -840897762), new int64(-176337025, -294727304),
+              new int64(0x6f067aa, 0x72176fba), new int64(0xa637dc5, -1563912026),
+              new int64(0x113f9804, -1090974290), new int64(0x1b710b35, 0x131c471b),
+              new int64(0x28db77f5, 0x23047d84), new int64(0x32caab7b, 0x40c72493),
+              new int64(0x3c9ebe0a, 0x15c9bebc), new int64(0x431d67c4, -1676669620),
+              new int64(0x4cc5d4be, -885112138), new int64(0x597f299c, -60457430),
+              new int64(0x5fcb6fab, 0x3ad6faec), new int64(0x6c44198c, 0x4a475817)
+            ];
+          }
 
-          modalSelection.selectAll('.close').remove();
+          for (i = 0; i < 80; i += 1) {
+            W[i] = new int64(0, 0);
+          }
 
-          var startbutton = modalSelection.select('.content')
-              .attr('class', 'fillL')
-              .append('button')
-                  .attr('class', 'modal-section huge-modal-button')
-                  .on('click', function() {
-                      modalSelection.remove();
-                  });
+          // append padding to the source string. The format is described in the FIPS.
+          x[len >> 5] |= 0x80 << (24 - (len & 0x1f));
+          x[((len + 128 >> 10) << 5) + 31] = len;
+          l = x.length;
+          for (i = 0; i < l; i += 32) { //32 dwords is the block size
+            int64copy(a, H[0]);
+            int64copy(b, H[1]);
+            int64copy(c, H[2]);
+            int64copy(d, H[3]);
+            int64copy(e, H[4]);
+            int64copy(f, H[5]);
+            int64copy(g, H[6]);
+            int64copy(h, H[7]);
 
-              startbutton
-                  .append('svg')
-                  .attr('class', 'illustration')
-                  .append('use')
-                  .attr('xlink:href', '#iD-logo-walkthrough');
+            for (j = 0; j < 16; j += 1) {
+              W[j].h = x[i + 2 * j];
+              W[j].l = x[i + 2 * j + 1];
+            }
 
-              startbutton
-                  .append('h2')
-                  .text(t('intro.startediting.start'));
+            for (j = 16; j < 80; j += 1) {
+              //sigma1
+              int64rrot(r1, W[j - 2], 19);
+              int64revrrot(r2, W[j - 2], 29);
+              int64shr(r3, W[j - 2], 6);
+              s1.l = r1.l ^ r2.l ^ r3.l;
+              s1.h = r1.h ^ r2.h ^ r3.h;
+              //sigma0
+              int64rrot(r1, W[j - 15], 1);
+              int64rrot(r2, W[j - 15], 8);
+              int64shr(r3, W[j - 15], 7);
+              s0.l = r1.l ^ r2.l ^ r3.l;
+              s0.h = r1.h ^ r2.h ^ r3.h;
 
-          dispatch$$1.call('startEditing');
-      }
+              int64add4(W[j], s1, W[j - 7], s0, W[j - 16]);
+            }
 
+            for (j = 0; j < 80; j += 1) {
+              //Ch
+              Ch.l = (e.l & f.l) ^ (~e.l & g.l);
+              Ch.h = (e.h & f.h) ^ (~e.h & g.h);
 
-      chapter.enter = function() {
-          showHelp();
-      };
+              //Sigma1
+              int64rrot(r1, e, 14);
+              int64rrot(r2, e, 18);
+              int64revrrot(r3, e, 9);
+              s1.l = r1.l ^ r2.l ^ r3.l;
+              s1.h = r1.h ^ r2.h ^ r3.h;
 
+              //Sigma0
+              int64rrot(r1, a, 28);
+              int64revrrot(r2, a, 2);
+              int64revrrot(r3, a, 7);
+              s0.l = r1.l ^ r2.l ^ r3.l;
+              s0.h = r1.h ^ r2.h ^ r3.h;
 
-      chapter.exit = function() {
-          modalSelection.remove();
-          d3_selectAll('.shaded').remove();  // in case user opened keyboard shortcuts
-      };
+              //Maj
+              Maj.l = (a.l & b.l) ^ (a.l & c.l) ^ (b.l & c.l);
+              Maj.h = (a.h & b.h) ^ (a.h & c.h) ^ (b.h & c.h);
 
+              int64add5(T1, h, s1, Ch, sha512_k[j], W[j]);
+              int64add(T2, s0, Maj);
 
-      return utilRebind(chapter, dispatch$$1, 'on');
-  }
+              int64copy(h, g);
+              int64copy(g, f);
+              int64copy(f, e);
+              int64add(e, d, T1);
+              int64copy(d, c);
+              int64copy(c, b);
+              int64copy(b, a);
+              int64add(a, T1, T2);
+            }
+            int64add(H[0], H[0], a);
+            int64add(H[1], H[1], b);
+            int64add(H[2], H[2], c);
+            int64add(H[3], H[3], d);
+            int64add(H[4], H[4], e);
+            int64add(H[5], H[5], f);
+            int64add(H[6], H[6], g);
+            int64add(H[7], H[7], h);
+          }
 
-  var chapterUi = {
-      welcome: uiIntroWelcome,
-      navigation: uiIntroNavigation,
-      point: uiIntroPoint,
-      area: uiIntroArea,
-      line: uiIntroLine,
-      building: uiIntroBuilding,
-      startEditing: uiIntroStartEditing
-  };
+          //represent the hash as an array of 32-bit dwords
+          for (i = 0; i < 8; i += 1) {
+            hash[2 * i] = H[i].h;
+            hash[2 * i + 1] = H[i].l;
+          }
+          return hash;
+        }
 
-  var chapterFlow = [
-      'welcome',
-      'navigation',
-      'point',
-      'area',
-      'line',
-      'building',
-      'startEditing'
-  ];
+        //A constructor for 64-bit numbers
 
+        function int64(h, l) {
+          this.h = h;
+          this.l = l;
+          //this.toString = int64toString;
+        }
 
-  function uiIntro(context) {
-      var INTRO_IMAGERY = 'EsriWorldImageryClarity';
-      var introGraph = {};
-      var _currChapter;
+        //Copies src into dst, assuming both are 64-bit numbers
 
-      // create entities for intro graph and localize names
-      for (var id in dataIntroGraph) {
-          introGraph[id] = osmEntity$$1(localize(dataIntroGraph[id]));
-      }
+        function int64copy(dst, src) {
+          dst.h = src.h;
+          dst.l = src.l;
+        }
 
+        //Right-rotates a 64-bit number by shift
+        //Won't handle cases of shift>=32
+        //The function revrrot() is for that
 
-      function intro(selection$$1) {
-          context.enter(modeBrowse(context));
+        function int64rrot(dst, x, shift) {
+          dst.l = (x.l >>> shift) | (x.h << (32 - shift));
+          dst.h = (x.h >>> shift) | (x.l << (32 - shift));
+        }
 
-          // Save current map state
-          var osm = context.connection();
-          var history = context.history().toJSON();
-          var hash = window.location.hash;
-          var center = context.map().center();
-          var zoom = context.map().zoom();
-          var background = context.background().baseLayerSource();
-          var overlays = context.background().overlayLayerSources();
-          var opacity = d3_selectAll('#map .layer-background').style('opacity');
-          var caches = osm && osm.caches();
-          var baseEntities = context.history().graph().base().entities;
-          var countryCode = services.geocoder.countryCode;
+        //Reverses the dwords of the source and then rotates right by shift.
+        //This is equivalent to rotation by 32+shift
 
-          // Show sidebar and disable the sidebar resizing button
-          // (this needs to be before `context.inIntro(true)`)
-          context.ui().sidebar.expand();
-          d3_selectAll('button.sidebar-toggle').classed('disabled', true);
+        function int64revrrot(dst, x, shift) {
+          dst.l = (x.h >>> shift) | (x.l << (32 - shift));
+          dst.h = (x.l >>> shift) | (x.h << (32 - shift));
+        }
 
-          // Block saving
-          context.inIntro(true);
+        //Bitwise-shifts right a 64-bit number by shift
+        //Won't handle shift>=32, but it's never needed in SHA512
 
-          // Load semi-real data used in intro
-          if (osm) { osm.toggle(false).reset(); }
-          context.history().reset();
-          context.history().merge(values$1(coreGraph$$1().load(introGraph).entities));
-          context.history().checkpoint('initial');
+        function int64shr(dst, x, shift) {
+          dst.l = (x.l >>> shift) | (x.h << (32 - shift));
+          dst.h = (x.h >>> shift);
+        }
 
-          // Setup imagery
-          var imagery = context.background().findSource(INTRO_IMAGERY);
-          if (imagery) {
-              context.background().baseLayerSource(imagery);
-          } else {
-              context.background().bing();
-          }
-          overlays.forEach(function(d) {
-              context.background().toggleOverlayLayer(d);
-          });
+        //Adds two 64-bit numbers
+        //Like the original implementation, does not rely on 32-bit operations
 
-          // Setup data layers (only OSM)
-          var layers = context.layers();
-          layers.all().forEach(function(item) {
-              // if the layer has the function `enabled`
-              if (typeof item.layer.enabled === 'function') {
-                  item.layer.enabled(item.id === 'osm');
-              }
-          });
+        function int64add(dst, x, y) {
+          var w0 = (x.l & 0xffff) + (y.l & 0xffff);
+          var w1 = (x.l >>> 16) + (y.l >>> 16) + (w0 >>> 16);
+          var w2 = (x.h & 0xffff) + (y.h & 0xffff) + (w1 >>> 16);
+          var w3 = (x.h >>> 16) + (y.h >>> 16) + (w2 >>> 16);
+          dst.l = (w0 & 0xffff) | (w1 << 16);
+          dst.h = (w2 & 0xffff) | (w3 << 16);
+        }
 
-          // Mock geocoder
-          services.geocoder.countryCode = function(location, callback) {
-              callback(null, t('intro.graph.countrycode'));
-          };
+        //Same, except with 4 addends. Works faster than adding them one by one.
 
+        function int64add4(dst, a, b, c, d) {
+          var w0 = (a.l & 0xffff) + (b.l & 0xffff) + (c.l & 0xffff) + (d.l & 0xffff);
+          var w1 = (a.l >>> 16) + (b.l >>> 16) + (c.l >>> 16) + (d.l >>> 16) + (w0 >>> 16);
+          var w2 = (a.h & 0xffff) + (b.h & 0xffff) + (c.h & 0xffff) + (d.h & 0xffff) + (w1 >>> 16);
+          var w3 = (a.h >>> 16) + (b.h >>> 16) + (c.h >>> 16) + (d.h >>> 16) + (w2 >>> 16);
+          dst.l = (w0 & 0xffff) | (w1 << 16);
+          dst.h = (w2 & 0xffff) | (w3 << 16);
+        }
 
-          d3_selectAll('#map .layer-background').style('opacity', 1);
+        //Same, except with 5 addends
 
-          var curtain = uiCurtain();
-          selection$$1.call(curtain);
+        function int64add5(dst, a, b, c, d, e) {
+          var w0 = (a.l & 0xffff) + (b.l & 0xffff) + (c.l & 0xffff) + (d.l & 0xffff) + (e.l & 0xffff),
+            w1 = (a.l >>> 16) + (b.l >>> 16) + (c.l >>> 16) + (d.l >>> 16) + (e.l >>> 16) + (w0 >>> 16),
+            w2 = (a.h & 0xffff) + (b.h & 0xffff) + (c.h & 0xffff) + (d.h & 0xffff) + (e.h & 0xffff) + (w1 >>> 16),
+            w3 = (a.h >>> 16) + (b.h >>> 16) + (c.h >>> 16) + (d.h >>> 16) + (e.h >>> 16) + (w2 >>> 16);
+          dst.l = (w0 & 0xffff) | (w1 << 16);
+          dst.h = (w2 & 0xffff) | (w3 << 16);
+        }
+      },
+      /**
+       * @class Hashes.RMD160
+       * @constructor
+       * @param {Object} [config]
+       *
+       * A JavaScript implementation of the RIPEMD-160 Algorithm
+       * Version 2.2 Copyright Jeremy Lin, Paul Johnston 2000 - 2009.
+       * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
+       * See http://pajhome.org.uk/crypt/md5 for details.
+       * Also http://www.ocf.berkeley.edu/~jjlin/jsotp/
+       */
+      RMD160: function(options) {
+        /**
+         * Private properties configuration variables. You may need to tweak these to be compatible with
+         * the server-side, but the defaults work in most cases.
+         * @see this.setUpperCase() method
+         * @see this.setPad() method
+         */
+        var hexcase = (options && typeof options.uppercase === 'boolean') ? options.uppercase : false,
+          /* hexadecimal output case format. false - lowercase; true - uppercase  */
+          b64pad = (options && typeof options.pad === 'string') ? options.pa : '=',
+          /* base-64 pad character. Default '=' for strict RFC compliance   */
+          utf8 = (options && typeof options.utf8 === 'boolean') ? options.utf8 : true,
+          /* enable/disable utf8 encoding */
+          rmd160_r1 = [
+            0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
+            7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,
+            3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,
+            1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,
+            4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13
+          ],
+          rmd160_r2 = [
+            5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,
+            6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,
+            15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,
+            8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,
+            12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11
+          ],
+          rmd160_s1 = [
+            11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,
+            7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,
+            11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,
+            11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,
+            9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6
+          ],
+          rmd160_s2 = [
+            8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,
+            9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,
+            9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,
+            15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,
+            8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11
+          ];
 
-          // Store that the user started the walkthrough..
-          context.storage('walkthrough_started', 'yes');
+        /* privileged (public) methods */
+        this.hex = function(s) {
+          return rstr2hex(rstr(s, utf8));
+        };
+        this.b64 = function(s) {
+          return rstr2b64(rstr(s, utf8), b64pad);
+        };
+        this.any = function(s, e) {
+          return rstr2any(rstr(s, utf8), e);
+        };
+        this.raw = function(s) {
+          return rstr(s, utf8);
+        };
+        this.hex_hmac = function(k, d) {
+          return rstr2hex(rstr_hmac(k, d));
+        };
+        this.b64_hmac = function(k, d) {
+          return rstr2b64(rstr_hmac(k, d), b64pad);
+        };
+        this.any_hmac = function(k, d, e) {
+          return rstr2any(rstr_hmac(k, d), e);
+        };
+        /**
+         * Perform a simple self-test to see if the VM is working
+         * @return {String} Hexadecimal hash sample
+         * @public
+         */
+        this.vm_test = function() {
+          return hex('abc').toLowerCase() === '900150983cd24fb0d6963f7d28e17f72';
+        };
+        /**
+         * @description Enable/disable uppercase hexadecimal returned string
+         * @param {boolean}
+         * @return {Object} this
+         * @public
+         */
+        this.setUpperCase = function(a) {
+          if (typeof a === 'boolean') {
+            hexcase = a;
+          }
+          return this;
+        };
+        /**
+         * @description Defines a base64 pad string
+         * @param {string} Pad
+         * @return {Object} this
+         * @public
+         */
+        this.setPad = function(a) {
+          if (typeof a !== 'undefined') {
+            b64pad = a;
+          }
+          return this;
+        };
+        /**
+         * @description Defines a base64 pad string
+         * @param {boolean}
+         * @return {Object} this
+         * @public
+         */
+        this.setUTF8 = function(a) {
+          if (typeof a === 'boolean') {
+            utf8 = a;
+          }
+          return this;
+        };
 
-          // Restore previous walkthrough progress..
-          var storedProgress = context.storage('walkthrough_progress') || '';
-          var progress = storedProgress.split(';').filter(Boolean);
+        /* private methods */
 
-          var chapters = chapterFlow.map(function(chapter, i) {
-              var s = chapterUi[chapter](context, curtain.reveal)
-                  .on('done', function() {
-                      context.presets().init();  // clear away "recent" presets
+        /**
+         * Calculate the rmd160 of a raw string
+         */
 
-                      buttons.filter(function(d) {
-                          return d.title === s.title;
-                      }).classed('finished', true);
+        function rstr(s) {
+          s = (utf8) ? utf8Encode(s) : s;
+          return binl2rstr(binl(rstr2binl(s), s.length * 8));
+        }
 
-                      if (i < chapterFlow.length - 1) {
-                          var next = chapterFlow[i + 1];
-                          select('button.chapter-' + next)
-                              .classed('next', true);
-                      }
+        /**
+         * Calculate the HMAC-rmd160 of a key and some data (raw strings)
+         */
 
-                      // Store walkthrough progress..
-                      progress.push(chapter);
-                      context.storage('walkthrough_progress', uniq(progress).join(';'));
-                  });
-              return s;
-          });
+        function rstr_hmac(key, data) {
+          key = (utf8) ? utf8Encode(key) : key;
+          data = (utf8) ? utf8Encode(data) : data;
+          var i, hash,
+            bkey = rstr2binl(key),
+            ipad = Array(16),
+            opad = Array(16);
 
-          chapters[chapters.length - 1].on('startEditing', function() {
-              // Store walkthrough progress..
-              progress.push('startEditing');
-              context.storage('walkthrough_progress', uniq(progress).join(';'));
+          if (bkey.length > 16) {
+            bkey = binl(bkey, key.length * 8);
+          }
 
-              // Store if walkthrough is completed..
-              var incomplete = difference(chapterFlow, progress);
-              if (!incomplete.length) {
-                  context.storage('walkthrough_completed', 'yes');
-              }
+          for (i = 0; i < 16; i += 1) {
+            ipad[i] = bkey[i] ^ 0x36363636;
+            opad[i] = bkey[i] ^ 0x5C5C5C5C;
+          }
+          hash = binl(ipad.concat(rstr2binl(data)), 512 + data.length * 8);
+          return binl2rstr(binl(opad.concat(hash), 512 + 160));
+        }
 
-              curtain.remove();
-              navwrap.remove();
-              d3_selectAll('#map .layer-background').style('opacity', opacity);
-              d3_selectAll('button.sidebar-toggle').classed('disabled', false);
-              if (osm) { osm.toggle(true).reset().caches(caches); }
-              context.history().reset().merge(values$1(baseEntities));
-              context.background().baseLayerSource(background);
-              overlays.forEach(function(d) { context.background().toggleOverlayLayer(d); });
-              if (history) { context.history().fromJSON(history, false); }
-              context.map().centerZoom(center, zoom);
-              window.location.replace(hash);
-              services.geocoder.countryCode = countryCode;
-              context.inIntro(false);
-          });
+        /**
+         * Convert an array of little-endian words to a string
+         */
 
-          var navwrap = selection$$1
-              .append('div')
-              .attr('class', 'intro-nav-wrap fillD');
+        function binl2rstr(input) {
+          var i, output = '',
+            l = input.length * 32;
+          for (i = 0; i < l; i += 8) {
+            output += String.fromCharCode((input[i >> 5] >>> (i % 32)) & 0xFF);
+          }
+          return output;
+        }
 
-          navwrap
-              .append('svg')
-              .attr('class', 'intro-nav-wrap-logo')
-              .append('use')
-              .attr('xlink:href', '#iD-logo-walkthrough');
+        /**
+         * Calculate the RIPE-MD160 of an array of little-endian words, and a bit length.
+         */
 
-          var buttonwrap = navwrap
-              .append('div')
-              .attr('class', 'joined')
-              .selectAll('button.chapter');
+        function binl(x, len) {
+          var T, j, i, l,
+            h0 = 0x67452301,
+            h1 = 0xefcdab89,
+            h2 = 0x98badcfe,
+            h3 = 0x10325476,
+            h4 = 0xc3d2e1f0,
+            A1, B1, C1, D1, E1,
+            A2, B2, C2, D2, E2;
 
-          var buttons = buttonwrap
-              .data(chapters)
-              .enter()
-              .append('button')
-              .attr('class', function(d, i) { return 'chapter chapter-' + chapterFlow[i]; })
-              .on('click', enterChapter);
+          /* append padding */
+          x[len >> 5] |= 0x80 << (len % 32);
+          x[(((len + 64) >>> 9) << 4) + 14] = len;
+          l = x.length;
 
-          buttons
-              .append('span')
-              .text(function(d) { return t(d.title); });
+          for (i = 0; i < l; i += 16) {
+            A1 = A2 = h0;
+            B1 = B2 = h1;
+            C1 = C2 = h2;
+            D1 = D2 = h3;
+            E1 = E2 = h4;
+            for (j = 0; j <= 79; j += 1) {
+              T = safe_add(A1, rmd160_f(j, B1, C1, D1));
+              T = safe_add(T, x[i + rmd160_r1[j]]);
+              T = safe_add(T, rmd160_K1(j));
+              T = safe_add(bit_rol(T, rmd160_s1[j]), E1);
+              A1 = E1;
+              E1 = D1;
+              D1 = bit_rol(C1, 10);
+              C1 = B1;
+              B1 = T;
+              T = safe_add(A2, rmd160_f(79 - j, B2, C2, D2));
+              T = safe_add(T, x[i + rmd160_r2[j]]);
+              T = safe_add(T, rmd160_K2(j));
+              T = safe_add(bit_rol(T, rmd160_s2[j]), E2);
+              A2 = E2;
+              E2 = D2;
+              D2 = bit_rol(C2, 10);
+              C2 = B2;
+              B2 = T;
+            }
 
-          buttons
-              .append('span')
-              .attr('class', 'status')
-              .call(svgIcon((textDirection === 'rtl' ? '#iD-icon-backward' : '#iD-icon-forward'), 'inline'));
+            T = safe_add(h1, safe_add(C1, D2));
+            h1 = safe_add(h2, safe_add(D1, E2));
+            h2 = safe_add(h3, safe_add(E1, A2));
+            h3 = safe_add(h4, safe_add(A1, B2));
+            h4 = safe_add(h0, safe_add(B1, C2));
+            h0 = T;
+          }
+          return [h0, h1, h2, h3, h4];
+        }
 
-          enterChapter(chapters[0]);
+        // specific algorithm methods
 
+        function rmd160_f(j, x, y, z) {
+          return (0 <= j && j <= 15) ? (x ^ y ^ z) :
+            (16 <= j && j <= 31) ? (x & y) | (~x & z) :
+            (32 <= j && j <= 47) ? (x | ~y) ^ z :
+            (48 <= j && j <= 63) ? (x & z) | (y & ~z) :
+            (64 <= j && j <= 79) ? x ^ (y | ~z) :
+            'rmd160_f: j out of range';
+        }
 
-          function enterChapter(newChapter) {
-              if (_currChapter) { _currChapter.exit(); }
-              context.enter(modeBrowse(context));
+        function rmd160_K1(j) {
+          return (0 <= j && j <= 15) ? 0x00000000 :
+            (16 <= j && j <= 31) ? 0x5a827999 :
+            (32 <= j && j <= 47) ? 0x6ed9eba1 :
+            (48 <= j && j <= 63) ? 0x8f1bbcdc :
+            (64 <= j && j <= 79) ? 0xa953fd4e :
+            'rmd160_K1: j out of range';
+        }
 
-              _currChapter = newChapter;
-              _currChapter.enter();
+        function rmd160_K2(j) {
+          return (0 <= j && j <= 15) ? 0x50a28be6 :
+            (16 <= j && j <= 31) ? 0x5c4dd124 :
+            (32 <= j && j <= 47) ? 0x6d703ef3 :
+            (48 <= j && j <= 63) ? 0x7a6d76e9 :
+            (64 <= j && j <= 79) ? 0x00000000 :
+            'rmd160_K2: j out of range';
+        }
+      }
+    };
 
-              buttons
-                  .classed('next', false)
-                  .classed('active', function(d) {
-                      return d.title === _currChapter.title;
-                  });
-          }
+    // exposes Hashes
+    (function(window, undefined$1) {
+      var freeExports = false;
+      {
+        freeExports = exports;
+        if (exports && typeof commonjsGlobal === 'object' && commonjsGlobal && commonjsGlobal === commonjsGlobal.global) {
+          window = commonjsGlobal;
+        }
       }
 
+      if (typeof undefined$1 === 'function' && typeof undefined$1.amd === 'object' && undefined$1.amd) {
+        // define as an anonymous module, so, through path mapping, it can be aliased
+        undefined$1(function() {
+          return Hashes;
+        });
+      } else if (freeExports) {
+        // in Node.js or RingoJS v0.8.0+
+        if (module && module.exports === freeExports) {
+          module.exports = Hashes;
+        }
+        // in Narwhal or RingoJS v0.7.0-
+        else {
+          freeExports.Hashes = Hashes;
+        }
+      } else {
+        // in a browser or Rhino
+        window.Hashes = Hashes;
+      }
+    }(this));
+  }()); // IIFE
+  });
 
-      return intro;
-  }
+  var immutable = extend$2;
 
-  function uiConfirm(selection) {
-      var modalSelection = uiModal(selection);
+  var hasOwnProperty$g = Object.prototype.hasOwnProperty;
 
-      modalSelection.select('.modal')
-          .classed('modal-alert', true);
+  function extend$2() {
+      var target = {};
 
-      var section = modalSelection.select('.content');
+      for (var i = 0; i < arguments.length; i++) {
+          var source = arguments[i];
 
-      section.append('div')
-          .attr('class', 'modal-section header');
+          for (var key in source) {
+              if (hasOwnProperty$g.call(source, key)) {
+                  target[key] = source[key];
+              }
+          }
+      }
 
-      section.append('div')
-          .attr('class', 'modal-section message-text');
+      return target
+  }
 
-      var buttons = section.append('div')
-          .attr('class', 'modal-section buttons cf');
+  var sha1 = new hashes.SHA1();
 
+  var ohauth = {};
 
-      modalSelection.okButton = function() {
-          buttons
-              .append('button')
-              .attr('class', 'button ok-button action')
-              .on('click.confirm', function() {
-                  modalSelection.remove();
-              })
-              .text(t('confirm.okay'))
-              .node()
-              .focus();
+  ohauth.qsString = function(obj) {
+      return Object.keys(obj).sort().map(function(key) {
+          return ohauth.percentEncode(key) + '=' +
+              ohauth.percentEncode(obj[key]);
+      }).join('&');
+  };
 
-          return modalSelection;
+  ohauth.stringQs = function(str) {
+      return str.split('&').filter(function (pair) {
+          return pair !== '';
+      }).reduce(function(obj, pair){
+          var parts = pair.split('=');
+          obj[decodeURIComponent(parts[0])] = (null === parts[1]) ?
+              '' : decodeURIComponent(parts[1]);
+          return obj;
+      }, {});
+  };
+
+  ohauth.rawxhr = function(method, url, data, headers, callback) {
+      var xhr = new XMLHttpRequest(),
+          twoHundred = /^20\d$/;
+      xhr.onreadystatechange = function() {
+          if (4 === xhr.readyState && 0 !== xhr.status) {
+              if (twoHundred.test(xhr.status)) callback(null, xhr);
+              else return callback(xhr, null);
+          }
       };
+      xhr.onerror = function(e) { return callback(e, null); };
+      xhr.open(method, url, true);
+      for (var h in headers) xhr.setRequestHeader(h, headers[h]);
+      xhr.send(data);
+      return xhr;
+  };
 
+  ohauth.xhr = function(method, url, auth, data, options, callback) {
+      var headers = (options && options.header) || {
+          'Content-Type': 'application/x-www-form-urlencoded'
+      };
+      headers.Authorization = 'OAuth ' + ohauth.authHeader(auth);
+      return ohauth.rawxhr(method, url, data, headers, callback);
+  };
 
-      return modalSelection;
-  }
+  ohauth.nonce = function() {
+      for (var o = ''; o.length < 6;) {
+          o += '0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZabcdefghiklmnopqrstuvwxyz'[Math.floor(Math.random() * 61)];
+      }
+      return o;
+  };
 
-  function uiSettingsCustomData(context) {
-      var dispatch$$1 = dispatch('change');
+  ohauth.authHeader = function(obj) {
+      return Object.keys(obj).sort().map(function(key) {
+          return encodeURIComponent(key) + '="' + encodeURIComponent(obj[key]) + '"';
+      }).join(', ');
+  };
 
-      function render(selection$$1) {
-          var dataLayer = context.layers().layer('data');
-          var _origSettings = {
-              fileList: (dataLayer && dataLayer.fileList()) || null,
-              url: context.storage('settings-custom-data-url')
-          };
-          var _currSettings = cloneDeep(_origSettings);
+  ohauth.timestamp = function() { return ~~((+new Date()) / 1000); };
 
-          // var example = 'https://{switch:a,b,c}.tile.openstreetmap.org/{zoom}/{x}/{y}.png';
-          var modal = uiConfirm(selection$$1).okButton();
+  ohauth.percentEncode = function(s) {
+      return encodeURIComponent(s)
+          .replace(/\!/g, '%21').replace(/\'/g, '%27')
+          .replace(/\*/g, '%2A').replace(/\(/g, '%28').replace(/\)/g, '%29');
+  };
 
-          modal
-              .classed('settings-modal settings-custom-data', true);
+  ohauth.baseString = function(method, url, params) {
+      if (params.oauth_signature) delete params.oauth_signature;
+      return [
+          method,
+          ohauth.percentEncode(url),
+          ohauth.percentEncode(ohauth.qsString(params))].join('&');
+  };
 
-          modal.select('.modal-section.header')
-              .append('h3')
-              .text(t('settings.custom_data.header'));
+  ohauth.signature = function(oauth_secret, token_secret, baseString) {
+      return sha1.b64_hmac(
+          ohauth.percentEncode(oauth_secret) + '&' +
+          ohauth.percentEncode(token_secret),
+          baseString);
+  };
 
+  /**
+   * Takes an options object for configuration (consumer_key,
+   * consumer_secret, version, signature_method, token, token_secret)
+   * and returns a function that generates the Authorization header
+   * for given data.
+   *
+   * The returned function takes these parameters:
+   * - method: GET/POST/...
+   * - uri: full URI with protocol, port, path and query string
+   * - extra_params: any extra parameters (that are passed in the POST data),
+   *   can be an object or a from-urlencoded string.
+   *
+   * Returned function returns full OAuth header with "OAuth" string in it.
+   */
 
-          var textSection = modal.select('.modal-section.message-text');
+  ohauth.headerGenerator = function(options) {
+      options = options || {};
+      var consumer_key = options.consumer_key || '',
+          consumer_secret = options.consumer_secret || '',
+          signature_method = options.signature_method || 'HMAC-SHA1',
+          version = options.version || '1.0',
+          token = options.token || '',
+          token_secret = options.token_secret || '';
 
-          textSection
-              .append('pre')
-              .attr('class', 'instructions-file')
-              .text(t('settings.custom_data.file.instructions'));
+      return function(method, uri, extra_params) {
+          method = method.toUpperCase();
+          if (typeof extra_params === 'string' && extra_params.length > 0) {
+              extra_params = ohauth.stringQs(extra_params);
+          }
 
-          textSection
-              .append('input')
-              .attr('class', 'field-file')
-              .attr('type', 'file')
-              .property('files', _currSettings.fileList)  // works for all except IE11
-              .on('change', function() {
-                  var files = event.target.files;
-                  if (files && files.length) {
-                      _currSettings.url = '';
-                      textSection.select('.field-url').property('value', '');
-                      _currSettings.fileList = files;
-                  } else {
-                      _currSettings.fileList = null;
-                  }
-              });
+          var uri_parts = uri.split('?', 2),
+          base_uri = uri_parts[0];
 
-          textSection
-              .append('h4')
-              .text(t('settings.custom_data.or'));
+          var query_params = uri_parts.length === 2 ?
+              ohauth.stringQs(uri_parts[1]) : {};
 
-          textSection
-              .append('pre')
-              .attr('class', 'instructions-url')
-              .text(t('settings.custom_data.url.instructions'));
+          var oauth_params = {
+              oauth_consumer_key: consumer_key,
+              oauth_signature_method: signature_method,
+              oauth_version: version,
+              oauth_timestamp: ohauth.timestamp(),
+              oauth_nonce: ohauth.nonce()
+          };
 
-          textSection
-              .append('textarea')
-              .attr('class', 'field-url')
-              .attr('placeholder', t('settings.custom_data.url.placeholder'))
-              .call(utilNoAuto)
-              .property('value', _currSettings.url);
+          if (token) oauth_params.oauth_token = token;
 
+          var all_params = immutable({}, oauth_params, query_params, extra_params),
+              base_str = ohauth.baseString(method, base_uri, all_params);
 
-          // insert a cancel button
-          var buttonSection = modal.select('.modal-section.buttons');
+          oauth_params.oauth_signature = ohauth.signature(consumer_secret, token_secret, base_str);
 
-          buttonSection
-              .insert('button', '.ok-button')
-              .attr('class', 'button cancel-button secondary-action')
-              .text(t('confirm.cancel'));
+          return 'OAuth ' + ohauth.authHeader(oauth_params);
+      };
+  };
 
+  var ohauth_1 = ohauth;
 
-          buttonSection.select('.cancel-button')
-              .on('click.cancel', clickCancel);
+  var resolveUrl = createCommonjsModule(function (module, exports) {
+  // Copyright 2014 Simon Lydell
+  // X11 (“MIT”) Licensed. (See LICENSE.)
 
-          buttonSection.select('.ok-button')
-              .attr('disabled', isSaveDisabled)
-              .on('click.save', clickSave);
+  void (function(root, factory) {
+    {
+      module.exports = factory();
+    }
+  }(commonjsGlobal, function() {
 
+    function resolveUrl(/* ...urls */) {
+      var numUrls = arguments.length;
 
-          function isSaveDisabled() {
-              return null;
-          }
+      if (numUrls === 0) {
+        throw new Error("resolveUrl requires at least one argument; got none.")
+      }
 
+      var base = document.createElement("base");
+      base.href = arguments[0];
 
-          // restore the original url
-          function clickCancel() {
-              textSection.select('.field-url').property('value', _origSettings.url);
-              context.storage('settings-custom-data-url', _origSettings.url);
-              this.blur();
-              modal.close();
-          }
+      if (numUrls === 1) {
+        return base.href
+      }
 
-          // accept the current url
-          function clickSave() {
-              _currSettings.url = textSection.select('.field-url').property('value').trim();
+      var head = document.getElementsByTagName("head")[0];
+      head.insertBefore(base, head.firstChild);
 
-              // one or the other but not both
-              if (_currSettings.url) { _currSettings.fileList = null; }
-              if (_currSettings.fileList) { _currSettings.url = ''; }
+      var a = document.createElement("a");
+      var resolved;
 
-              context.storage('settings-custom-data-url', _currSettings.url);
-              this.blur();
-              modal.close();
-              dispatch$$1.call('change', this, _currSettings);
-          }
+      for (var index = 1; index < numUrls; index++) {
+        a.href = arguments[index];
+        resolved = a.href;
+        base.href = resolved;
       }
 
-      return utilRebind(render, dispatch$$1, 'on');
-  }
-
-  function uiTooltipHtml(text, key, heading) {
-      var s = '';
+      head.removeChild(base);
 
-      if (heading) {
-          s += '<div class="tooltip-heading"><span>' + heading + '</span></div>';
-      }
-      if (text) {
-          s += '<div class="tooltip-text"><span>' + text + '</span></div>';
-      }
-      if (key) {
-          s += '<div class="keyhint-wrap"><span>' + t('tooltip_keyhint') + '</span>' +
-              '<span class="keyhint">' + key + '</span></div>';
-      }
+      return resolved
+    }
 
-      return s;
-  }
+    return resolveUrl
 
-  function uiMapData(context) {
-      var key = t('map_data.key');
-      var features = context.features().keys();
-      var layers = context.layers();
-      var fills = ['wireframe', 'partial', 'full'];
+  }));
+  });
 
-      var settingsCustomData = uiSettingsCustomData(context)
-          .on('change', customChanged);
+  var assign$1 = make_assign();
+  var create$2 = make_create();
+  var trim = make_trim();
+  var Global = (typeof window !== 'undefined' ? window : commonjsGlobal);
 
-      var pane = select(null);
+  var util = {
+       assign: assign$1,
+       create: create$2,
+       trim: trim,
+       bind: bind,
+       slice: slice$7,
+       each: each,
+       map: map$4,
+       pluck: pluck,
+       isList: isList,
+       isFunction: isFunction$1,
+       isObject: isObject$1,
+       Global: Global
+  };
 
-      var _fillSelected = context.storage('area-fill') || 'partial';
-      var _shown = false;
-      var _dataLayerContainer = select(null);
-      var _fillList = select(null);
-      var _featureList = select(null);
-      var _QAList = select(null);
+  function make_assign() {
+       if (Object.assign) {
+               return Object.assign
+       } else {
+               return function shimAssign(obj, props1, props2, etc) {
+                       for (var i = 1; i < arguments.length; i++) {
+                               each(Object(arguments[i]), function(val, key) {
+                                       obj[key] = val;
+                               });
+                       }                       
+                       return obj
+               }
+       }
+  }
 
+  function make_create() {
+       if (Object.create) {
+               return function create(obj, assignProps1, assignProps2, etc) {
+                       var assignArgsList = slice$7(arguments, 1);
+                       return assign$1.apply(this, [Object.create(obj)].concat(assignArgsList))
+               }
+       } else {
+               function F() {} // eslint-disable-line no-inner-declarations
+               return function create(obj, assignProps1, assignProps2, etc) {
+                       var assignArgsList = slice$7(arguments, 1);
+                       F.prototype = obj;
+                       return assign$1.apply(this, [new F()].concat(assignArgsList))
+               }
+       }
+  }
 
-      function showsFeature(d) {
-          return context.features().enabled(d);
-      }
+  function make_trim() {
+       if (String.prototype.trim) {
+               return function trim(str) {
+                       return String.prototype.trim.call(str)
+               }
+       } else {
+               return function trim(str) {
+                       return str.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, '')
+               }
+       }
+  }
 
+  function bind(obj, fn) {
+       return function() {
+               return fn.apply(obj, Array.prototype.slice.call(arguments, 0))
+       }
+  }
 
-      function autoHiddenFeature(d) {
-          if (d.type === 'kr_error') return context.errors().autoHidden(d);
-          return context.features().autoHidden(d);
-      }
+  function slice$7(arr, index) {
+       return Array.prototype.slice.call(arr, index || 0)
+  }
 
+  function each(obj, fn) {
+       pluck(obj, function(val, key) {
+               fn(val, key);
+               return false
+       });
+  }
 
-      function clickFeature(d) {
-          context.features().toggle(d);
-          update();
-      }
+  function map$4(obj, fn) {
+       var res = (isList(obj) ? [] : {});
+       pluck(obj, function(v, k) {
+               res[k] = fn(v, k);
+               return false
+       });
+       return res
+  }
 
+  function pluck(obj, fn) {
+       if (isList(obj)) {
+               for (var i=0; i<obj.length; i++) {
+                       if (fn(obj[i], i)) {
+                               return obj[i]
+                       }
+               }
+       } else {
+               for (var key in obj) {
+                       if (obj.hasOwnProperty(key)) {
+                               if (fn(obj[key], key)) {
+                                       return obj[key]
+                               }
+                       }
+               }
+       }
+  }
 
-      function showsQA(d) {
-          var QAKeys = [d];
-          var QALayers = layers.all().filter(function(obj) { return QAKeys.indexOf(obj.id) !== -1; });
-          var data = QALayers.filter(function(obj) { return obj.layer.supported(); });
+  function isList(val) {
+       return (val != null && typeof val != 'function' && typeof val.length == 'number')
+  }
 
-          function layerSupported(d) {
-              return d.layer && d.layer.supported();
-          }
-          function layerEnabled(d) {
-              return layerSupported(d) && d.layer.enabled();
-          }
+  function isFunction$1(val) {
+       return val && {}.toString.call(val) === '[object Function]'
+  }
 
-          return layerEnabled(data[0]);
-      }
+  function isObject$1(val) {
+       return val && {}.toString.call(val) === '[object Object]'
+  }
 
+  var slice$8 = util.slice;
+  var pluck$1 = util.pluck;
+  var each$1 = util.each;
+  var bind$1 = util.bind;
+  var create$3 = util.create;
+  var isList$1 = util.isList;
+  var isFunction$2 = util.isFunction;
+  var isObject$2 = util.isObject;
 
-      function showsFill(d) {
-          return _fillSelected === d;
-      }
+  var storeEngine = {
+       createStore: createStore
+  };
 
+  var storeAPI = {
+       version: '2.0.12',
+       enabled: false,
+       
+       // get returns the value of the given key. If that value
+       // is undefined, it returns optionalDefaultValue instead.
+       get: function(key, optionalDefaultValue) {
+               var data = this.storage.read(this._namespacePrefix + key);
+               return this._deserialize(data, optionalDefaultValue)
+       },
 
-      function setFill(d) {
-          fills.forEach(function(opt) {
-              context.surface().classed('fill-' + opt, Boolean(opt === d));
-          });
+       // set will store the given value at key and returns value.
+       // Calling set with value === undefined is equivalent to calling remove.
+       set: function(key, value) {
+               if (value === undefined) {
+                       return this.remove(key)
+               }
+               this.storage.write(this._namespacePrefix + key, this._serialize(value));
+               return value
+       },
 
-          _fillSelected = d;
-          context.storage('area-fill', d);
-          if (d !== 'wireframe') {
-              context.storage('area-fill-toggle', d);
-          }
-          update();
-      }
+       // remove deletes the key and value stored at the given key.
+       remove: function(key) {
+               this.storage.remove(this._namespacePrefix + key);
+       },
 
+       // each will call the given callback once for each key-value pair
+       // in this store.
+       each: function(callback) {
+               var self = this;
+               this.storage.each(function(val, namespacedKey) {
+                       callback.call(self, self._deserialize(val), (namespacedKey || '').replace(self._namespaceRegexp, ''));
+               });
+       },
 
-      function showsLayer(which) {
-          var layer = layers.layer(which);
-          if (layer) {
-              return layer.enabled();
-          }
-          return false;
-      }
+       // clearAll will remove all the stored key-value pairs in this store.
+       clearAll: function() {
+               this.storage.clearAll();
+       },
 
+       // additional functionality that can't live in plugins
+       // ---------------------------------------------------
 
-      function setLayer(which, enabled) {
-          var layer = layers.layer(which);
-          if (layer) {
-              layer.enabled(enabled);
+       // hasNamespace returns true if this store instance has the given namespace.
+       hasNamespace: function(namespace) {
+               return (this._namespacePrefix == '__storejs_'+namespace+'_')
+       },
 
-              if (!enabled && (which === 'osm' || which === 'notes')) {
-                  context.enter(modeBrowse(context));
-              }
+       // createStore creates a store.js instance with the first
+       // functioning storage in the list of storage candidates,
+       // and applies the the given mixins to the instance.
+       createStore: function() {
+               return createStore.apply(this, arguments)
+       },
+       
+       addPlugin: function(plugin) {
+               this._addPlugin(plugin);
+       },
+       
+       namespace: function(namespace) {
+               return createStore(this.storage, this.plugins, namespace)
+       }
+  };
 
-              update();
-          }
-      }
+  function _warn() {
+       var _console = (typeof console == 'undefined' ? null : console);
+       if (!_console) { return }
+       var fn = (_console.warn ? _console.warn : _console.log);
+       fn.apply(_console, arguments);
+  }
 
+  function createStore(storages, plugins, namespace) {
+       if (!namespace) {
+               namespace = '';
+       }
+       if (storages && !isList$1(storages)) {
+               storages = [storages];
+       }
+       if (plugins && !isList$1(plugins)) {
+               plugins = [plugins];
+       }
 
-      function toggleLayer(which) {
-          setLayer(which, !showsLayer(which));
-      }
+       var namespacePrefix = (namespace ? '__storejs_'+namespace+'_' : '');
+       var namespaceRegexp = (namespace ? new RegExp('^'+namespacePrefix) : null);
+       var legalNamespaces = /^[a-zA-Z0-9_\-]*$/; // alpha-numeric + underscore and dash
+       if (!legalNamespaces.test(namespace)) {
+               throw new Error('store.js namespaces can only have alphanumerics + underscores and dashes')
+       }
+       
+       var _privateStoreProps = {
+               _namespacePrefix: namespacePrefix,
+               _namespaceRegexp: namespaceRegexp,
 
+               _testStorage: function(storage) {
+                       try {
+                               var testStr = '__storejs__test__';
+                               storage.write(testStr, testStr);
+                               var ok = (storage.read(testStr) === testStr);
+                               storage.remove(testStr);
+                               return ok
+                       } catch(e) {
+                               return false
+                       }
+               },
 
-      function drawPhotoItems(selection$$1) {
-          var photoKeys = ['streetside', 'mapillary-images', 'mapillary-signs', 'openstreetcam-images'];
-          var photoLayers = layers.all().filter(function(obj) { return photoKeys.indexOf(obj.id) !== -1; });
-          var data = photoLayers.filter(function(obj) { return obj.layer.supported(); });
+               _assignPluginFnProp: function(pluginFnProp, propName) {
+                       var oldFn = this[propName];
+                       this[propName] = function pluginFn() {
+                               var args = slice$8(arguments, 0);
+                               var self = this;
 
-          function layerSupported(d) {
-              return d.layer && d.layer.supported();
-          }
-          function layerEnabled(d) {
-              return layerSupported(d) && d.layer.enabled();
-          }
+                               // super_fn calls the old function which was overwritten by
+                               // this mixin.
+                               function super_fn() {
+                                       if (!oldFn) { return }
+                                       each$1(arguments, function(arg, i) {
+                                               args[i] = arg;
+                                       });
+                                       return oldFn.apply(self, args)
+                               }
 
-          var ul = selection$$1
-              .selectAll('.layer-list-photos')
-              .data([0]);
+                               // Give mixing function access to super_fn by prefixing all mixin function
+                               // arguments with super_fn.
+                               var newFnArgs = [super_fn].concat(args);
 
-          ul = ul.enter()
-              .append('ul')
-              .attr('class', 'layer-list layer-list-photos')
-              .merge(ul);
+                               return pluginFnProp.apply(self, newFnArgs)
+                       };
+               },
 
-          var li = ul.selectAll('.list-item-photos')
-              .data(data);
+               _serialize: function(obj) {
+                       return JSON.stringify(obj)
+               },
 
-          li.exit()
-              .remove();
+               _deserialize: function(strVal, defaultVal) {
+                       if (!strVal) { return defaultVal }
+                       // It is possible that a raw string value has been previously stored
+                       // in a storage without using store.js, meaning it will be a raw
+                       // string value instead of a JSON serialized string. By defaulting
+                       // to the raw string value in case of a JSON parse error, we allow
+                       // for past stored values to be forwards-compatible with store.js
+                       var val = '';
+                       try { val = JSON.parse(strVal); }
+                       catch(e) { val = strVal; }
 
-          var liEnter = li.enter()
-              .append('li')
-              .attr('class', function(d) { return 'list-item-photos list-item-' + d.id; });
+                       return (val !== undefined ? val : defaultVal)
+               },
+               
+               _addStorage: function(storage) {
+                       if (this.enabled) { return }
+                       if (this._testStorage(storage)) {
+                               this.storage = storage;
+                               this.enabled = true;
+                       }
+               },
 
-          var labelEnter = liEnter
-              .append('label')
-              .each(function(d) {
-                  select(this)
-                      .call(tooltip()
-                          .title(t(d.id.replace('-', '_') + '.tooltip'))
-                          .placement('top')
-                      );
-              });
+               _addPlugin: function(plugin) {
+                       var self = this;
 
-          labelEnter
-              .append('input')
-              .attr('type', 'checkbox')
-              .on('change', function(d) { toggleLayer(d.id); });
+                       // If the plugin is an array, then add all plugins in the array.
+                       // This allows for a plugin to depend on other plugins.
+                       if (isList$1(plugin)) {
+                               each$1(plugin, function(plugin) {
+                                       self._addPlugin(plugin);
+                               });
+                               return
+                       }
 
-          labelEnter
-              .append('span')
-              .text(function(d) { return t(d.id.replace('-', '_') + '.title'); });
+                       // Keep track of all plugins we've seen so far, so that we
+                       // don't add any of them twice.
+                       var seenPlugin = pluck$1(this.plugins, function(seenPlugin) {
+                               return (plugin === seenPlugin)
+                       });
+                       if (seenPlugin) {
+                               return
+                       }
+                       this.plugins.push(plugin);
 
+                       // Check that the plugin is properly formed
+                       if (!isFunction$2(plugin)) {
+                               throw new Error('Plugins must be function values that return objects')
+                       }
 
-          // Update
-          li
-              .merge(liEnter)
-              .classed('active', layerEnabled)
-              .selectAll('input')
-              .property('checked', layerEnabled);
-      }
+                       var pluginProperties = plugin.call(this);
+                       if (!isObject$2(pluginProperties)) {
+                               throw new Error('Plugins must return an object of function properties')
+                       }
 
+                       // Add the plugin function properties to this store instance.
+                       each$1(pluginProperties, function(pluginFnProp, propName) {
+                               if (!isFunction$2(pluginFnProp)) {
+                                       throw new Error('Bad plugin property: '+propName+' from plugin '+plugin.name+'. Plugins should only return functions.')
+                               }
+                               self._assignPluginFnProp(pluginFnProp, propName);
+                       });
+               },
+               
+               // Put deprecated properties in the private API, so as to not expose it to accidential
+               // discovery through inspection of the store object.
+               
+               // Deprecated: addStorage
+               addStorage: function(storage) {
+                       _warn('store.addStorage(storage) is deprecated. Use createStore([storages])');
+                       this._addStorage(storage);
+               }
+       };
 
-      function drawOsmItems(selection$$1) {
-          var osmKeys = ['osm', 'notes'];
-          var osmLayers = layers.all().filter(function(obj) { return osmKeys.indexOf(obj.id) !== -1; });
+       var store = create$3(_privateStoreProps, storeAPI, {
+               plugins: []
+       });
+       store.raw = {};
+       each$1(store, function(prop, propName) {
+               if (isFunction$2(prop)) {
+                       store.raw[propName] = bind$1(store, prop);                      
+               }
+       });
+       each$1(storages, function(storage) {
+               store._addStorage(storage);
+       });
+       each$1(plugins, function(plugin) {
+               store._addPlugin(plugin);
+       });
+       return store
+  }
 
-          var ul = selection$$1
-              .selectAll('.layer-list-osm')
-              .data([0]);
+  var Global$1 = util.Global;
 
-          ul = ul.enter()
-              .append('ul')
-              .attr('class', 'layer-list layer-list-osm')
-              .merge(ul);
+  var localStorage_1 = {
+       name: 'localStorage',
+       read: read,
+       write: write,
+       each: each$2,
+       remove: remove$2,
+       clearAll: clearAll,
+  };
 
-          var li = ul.selectAll('.list-item')
-              .data(osmLayers);
+  function localStorage$1() {
+       return Global$1.localStorage
+  }
 
-          li.exit()
-              .remove();
+  function read(key) {
+       return localStorage$1().getItem(key)
+  }
 
-          var liEnter = li.enter()
-              .append('li')
-              .attr('class', function(d) { return 'list-item list-item-' + d.id; });
+  function write(key, data) {
+       return localStorage$1().setItem(key, data)
+  }
 
-          var labelEnter = liEnter
-              .append('label')
-              .each(function(d) {
-                  select(this)
-                      .call(tooltip()
-                          .title(t('map_data.layers.' + d.id + '.tooltip'))
-                          .placement('bottom')
-                      );
-              });
+  function each$2(fn) {
+       for (var i = localStorage$1().length - 1; i >= 0; i--) {
+               var key = localStorage$1().key(i);
+               fn(read(key), key);
+       }
+  }
 
-          labelEnter
-              .append('input')
-              .attr('type', 'checkbox')
-              .on('change', function(d) { toggleLayer(d.id); });
+  function remove$2(key) {
+       return localStorage$1().removeItem(key)
+  }
 
-          labelEnter
-              .append('span')
-              .text(function(d) { return t('map_data.layers.' + d.id + '.title'); });
+  function clearAll() {
+       return localStorage$1().clear()
+  }
 
+  // oldFF-globalStorage provides storage for Firefox
+  // versions 6 and 7, where no localStorage, etc
+  // is available.
 
-          // Update
-          li
-              .merge(liEnter)
-              .classed('active', function (d) { return d.layer.enabled(); })
-              .selectAll('input')
-              .property('checked', function (d) { return d.layer.enabled(); });
-      }
 
+  var Global$2 = util.Global;
 
-      function drawQAItems(selection$$1) {
-          var qaKeys = ['keepRight'];
-          var qaLayers = layers.all().filter(function(obj) { return qaKeys.indexOf(obj.id) !== -1; });
+  var oldFFGlobalStorage = {
+       name: 'oldFF-globalStorage',
+       read: read$1,
+       write: write$1,
+       each: each$3,
+       remove: remove$3,
+       clearAll: clearAll$1,
+  };
 
-          var ul = selection$$1
-              .selectAll('.layer-list-qa')
-              .data([0]);
+  var globalStorage = Global$2.globalStorage;
 
-          ul = ul.enter()
-              .append('ul')
-              .attr('class', 'layer-list layer-list-qa')
-              .merge(ul);
+  function read$1(key) {
+       return globalStorage[key]
+  }
 
-          var li = ul.selectAll('.list-item')
-              .data(qaLayers);
+  function write$1(key, data) {
+       globalStorage[key] = data;
+  }
 
-          li.exit()
-              .remove();
+  function each$3(fn) {
+       for (var i = globalStorage.length - 1; i >= 0; i--) {
+               var key = globalStorage.key(i);
+               fn(globalStorage[key], key);
+       }
+  }
 
-          var liEnter = li.enter()
-              .append('li')
-              .attr('class', function(d) { return 'list-item list-item-' + d.id; });
+  function remove$3(key) {
+       return globalStorage.removeItem(key)
+  }
 
-          var labelEnter = liEnter
-              .append('label')
-              .each(function(d) {
-                  select(this)
-                      .call(tooltip()
-                          .title(t('map_data.layers.' + d.id + '.tooltip'))
-                          .placement('bottom')
-                      );
-              });
+  function clearAll$1() {
+       each$3(function(key, _) {
+               delete globalStorage[key];
+       });
+  }
 
-          labelEnter
-              .append('input')
-              .attr('type', 'checkbox')
-              .on('change', function(d) { toggleLayer(d.id); });
+  // oldIE-userDataStorage provides storage for Internet Explorer
+  // versions 6 and 7, where no localStorage, sessionStorage, etc
+  // is available.
 
-          labelEnter
-              .append('span')
-              .text(function(d) { return t('map_data.layers.' + d.id + '.title'); });
 
+  var Global$3 = util.Global;
 
-          // Update
-          li
-              .merge(liEnter)
-              .classed('active', function (d) { return d.layer.enabled(); })
-              .selectAll('input')
-              .property('checked', function (d) { return d.layer.enabled(); });
-      }
+  var oldIEUserDataStorage = {
+       name: 'oldIE-userDataStorage',
+       write: write$2,
+       read: read$2,
+       each: each$4,
+       remove: remove$4,
+       clearAll: clearAll$2,
+  };
 
+  var storageName = 'storejs';
+  var doc = Global$3.document;
+  var _withStorageEl = _makeIEStorageElFunction();
+  var disable = (Global$3.navigator ? Global$3.navigator.userAgent : '').match(/ (MSIE 8|MSIE 9|MSIE 10)\./); // MSIE 9.x, MSIE 10.x
 
-      // Beta feature - sample vector layers to support Detroit Mapping Challenge
-      // https://github.com/osmus/detroit-mapping-challenge
-      function drawVectorItems(selection$$1) {
-          var dataLayer = layers.layer('data');
-          var vtData = [
-              {
-                  name: 'Detroit Neighborhoods/Parks',
-                  src: 'neighborhoods-parks',
-                  tooltip: 'Neighborhood boundaries and parks as compiled by City of Detroit in concert with community groups.',
-                  template: 'https://{switch:a,b,c,d}.tiles.mapbox.com/v4/jonahadkins.cjksmur6x34562qp9iv1u3ksf-54hev,jonahadkins.cjksmqxdx33jj2wp90xd9x2md-4e5y2/{z}/{x}/{y}.vector.pbf?access_token=pk.eyJ1Ijoiam9uYWhhZGtpbnMiLCJhIjoiRlVVVkx3VSJ9.9sdVEK_B_VkEXPjssU5MqA'
-              }, {
-                  name: 'Detroit Composite POIs',
-                  src: 'composite-poi',
-                  tooltip: 'Fire Inspections, Business Licenses, and other public location data collated from the City of Detroit.',
-                  template: 'https://{switch:a,b,c,d}.tiles.mapbox.com/v4/jonahadkins.cjksmm6a02sli31myxhsr7zf3-2sw8h/{z}/{x}/{y}.vector.pbf?access_token=pk.eyJ1Ijoiam9uYWhhZGtpbnMiLCJhIjoiRlVVVkx3VSJ9.9sdVEK_B_VkEXPjssU5MqA'
-              }, {
-                  name: 'Detroit All-The-Places POIs',
-                  src: 'alltheplaces-poi',
-                  tooltip: 'Public domain business location data created by web scrapers.',
-                  template: 'https://{switch:a,b,c,d}.tiles.mapbox.com/v4/jonahadkins.cjksmswgk340g2vo06p1w9w0j-8fjjc/{z}/{x}/{y}.vector.pbf?access_token=pk.eyJ1Ijoiam9uYWhhZGtpbnMiLCJhIjoiRlVVVkx3VSJ9.9sdVEK_B_VkEXPjssU5MqA'
-              }
-          ];
+  function write$2(unfixedKey, data) {
+       if (disable) { return }
+       var fixedKey = fixKey(unfixedKey);
+       _withStorageEl(function(storageEl) {
+               storageEl.setAttribute(fixedKey, data);
+               storageEl.save(storageName);
+       });
+  }
 
-          // Only show this if the map is around Detroit..
-          var detroit = geoExtent$$1([-83.5, 42.1], [-82.8, 42.5]);
-          var showVectorItems = (context.map().zoom() > 9 && detroit.contains(context.map().center()));
+  function read$2(unfixedKey) {
+       if (disable) { return }
+       var fixedKey = fixKey(unfixedKey);
+       var res = null;
+       _withStorageEl(function(storageEl) {
+               res = storageEl.getAttribute(fixedKey);
+       });
+       return res
+  }
 
-          var container = selection$$1.selectAll('.vectortile-container')
-              .data(showVectorItems ? [0] : []);
+  function each$4(callback) {
+       _withStorageEl(function(storageEl) {
+               var attributes = storageEl.XMLDocument.documentElement.attributes;
+               for (var i=attributes.length-1; i>=0; i--) {
+                       var attr = attributes[i];
+                       callback(storageEl.getAttribute(attr.name), attr.name);
+               }
+       });
+  }
 
-          container.exit()
-              .remove();
+  function remove$4(unfixedKey) {
+       var fixedKey = fixKey(unfixedKey);
+       _withStorageEl(function(storageEl) {
+               storageEl.removeAttribute(fixedKey);
+               storageEl.save(storageName);
+       });
+  }
 
-          var containerEnter = container.enter()
-              .append('div')
-              .attr('class', 'vectortile-container');
+  function clearAll$2() {
+       _withStorageEl(function(storageEl) {
+               var attributes = storageEl.XMLDocument.documentElement.attributes;
+               storageEl.load(storageName);
+               for (var i=attributes.length-1; i>=0; i--) {
+                       storageEl.removeAttribute(attributes[i].name);
+               }
+               storageEl.save(storageName);
+       });
+  }
 
-          containerEnter
-              .append('h4')
-              .attr('class', 'vectortile-header')
-              .text('Detroit Vector Tiles (Beta)');
+  // Helpers
+  //////////
 
-          containerEnter
-              .append('ul')
-              .attr('class', 'layer-list layer-list-vectortile');
+  // In IE7, keys cannot start with a digit or contain certain chars.
+  // See https://github.com/marcuswestin/store.js/issues/40
+  // See https://github.com/marcuswestin/store.js/issues/83
+  var forbiddenCharsRegex = new RegExp("[!\"#$%&'()*+,/\\\\:;<=>?@[\\]^`{|}~]", "g");
+  function fixKey(key) {
+       return key.replace(/^\d/, '___$&').replace(forbiddenCharsRegex, '___')
+  }
 
-          containerEnter
-              .append('div')
-              .attr('class', 'vectortile-footer')
-              .append('a')
-              .attr('target', '_blank')
-              .attr('tabindex', -1)
-              .call(svgIcon('#iD-icon-out-link', 'inline'))
-              .attr('href', 'https://github.com/osmus/detroit-mapping-challenge')
-              .append('span')
-              .text('About these layers');
+  function _makeIEStorageElFunction() {
+       if (!doc || !doc.documentElement || !doc.documentElement.addBehavior) {
+               return null
+       }
+       var scriptTag = 'script',
+               storageOwner,
+               storageContainer,
+               storageEl;
 
-          container = container
-              .merge(containerEnter);
+       // Since #userData storage applies only to specific paths, we need to
+       // somehow link our data to a specific path.  We choose /favicon.ico
+       // as a pretty safe option, since all browsers already make a request to
+       // this URL anyway and being a 404 will not hurt us here.  We wrap an
+       // iframe pointing to the favicon in an ActiveXObject(htmlfile) object
+       // (see: http://msdn.microsoft.com/en-us/library/aa752574(v=VS.85).aspx)
+       // since the iframe access rules appear to allow direct access and
+       // manipulation of the document element, even for a 404 page.  This
+       // document can be used instead of the current document (which would
+       // have been limited to the current path) to perform #userData storage.
+       try {
+               /* global ActiveXObject */
+               storageContainer = new ActiveXObject('htmlfile');
+               storageContainer.open();
+               storageContainer.write('<'+scriptTag+'>document.w=window</'+scriptTag+'><iframe src="/favicon.ico"></iframe>');
+               storageContainer.close();
+               storageOwner = storageContainer.w.frames[0].document;
+               storageEl = storageOwner.createElement('div');
+       } catch(e) {
+               // somehow ActiveXObject instantiation failed (perhaps some special
+               // security settings or otherwse), fall back to per-path storage
+               storageEl = doc.createElement('div');
+               storageOwner = doc.body;
+       }
 
+       return function(storeFunction) {
+               var args = [].slice.call(arguments, 0);
+               args.unshift(storageEl);
+               // See http://msdn.microsoft.com/en-us/library/ms531081(v=VS.85).aspx
+               // and http://msdn.microsoft.com/en-us/library/ms531424(v=VS.85).aspx
+               storageOwner.appendChild(storageEl);
+               storageEl.addBehavior('#default#userData');
+               storageEl.load(storageName);
+               storeFunction.apply(this, args);
+               storageOwner.removeChild(storageEl);
+               return
+       }
+  }
 
-          var ul = container.selectAll('.layer-list-vectortile');
+  // cookieStorage is useful Safari private browser mode, where localStorage
+  // doesn't work but cookies do. This implementation is adopted from
+  // https://developer.mozilla.org/en-US/docs/Web/API/Storage/LocalStorage
 
-          var li = ul.selectAll('.list-item')
-              .data(vtData);
 
-          li.exit()
-              .remove();
+  var Global$4 = util.Global;
+  var trim$1 = util.trim;
 
-          var liEnter = li.enter()
-              .append('li')
-              .attr('class', function(d) { return 'list-item list-item-' + d.src; });
+  var cookieStorage = {
+       name: 'cookieStorage',
+       read: read$3,
+       write: write$3,
+       each: each$5,
+       remove: remove$5,
+       clearAll: clearAll$3,
+  };
 
-          var labelEnter = liEnter
-              .append('label')
-              .each(function(d) {
-                  select(this).call(
-                      tooltip().title(d.tooltip).placement('top')
-                  );
-              });
+  var doc$1 = Global$4.document;
 
-          labelEnter
-              .append('input')
-              .attr('type', 'radio')
-              .attr('name', 'vectortile')
-              .on('change', selectVTLayer);
+  function read$3(key) {
+       if (!key || !_has(key)) { return null }
+       var regexpStr = "(?:^|.*;\\s*)" +
+               escape(key).replace(/[\-\.\+\*]/g, "\\$&") +
+               "\\s*\\=\\s*((?:[^;](?!;))*[^;]?).*";
+       return unescape(doc$1.cookie.replace(new RegExp(regexpStr), "$1"))
+  }
 
-          labelEnter
-              .append('span')
-              .text(function(d) { return d.name; });
+  function each$5(callback) {
+       var cookies = doc$1.cookie.split(/; ?/g);
+       for (var i = cookies.length - 1; i >= 0; i--) {
+               if (!trim$1(cookies[i])) {
+                       continue
+               }
+               var kvp = cookies[i].split('=');
+               var key = unescape(kvp[0]);
+               var val = unescape(kvp[1]);
+               callback(val, key);
+       }
+  }
 
-          // Update
-          li
-              .merge(liEnter)
-              .classed('active', isVTLayerSelected)
-              .selectAll('input')
-              .property('checked', isVTLayerSelected);
+  function write$3(key, data) {
+       if(!key) { return }
+       doc$1.cookie = escape(key) + "=" + escape(data) + "; expires=Tue, 19 Jan 2038 03:14:07 GMT; path=/";
+  }
 
+  function remove$5(key) {
+       if (!key || !_has(key)) {
+               return
+       }
+       doc$1.cookie = escape(key) + "=; expires=Thu, 01 Jan 1970 00:00:00 GMT; path=/";
+  }
 
-          function isVTLayerSelected(d) {
-              return dataLayer && dataLayer.template() === d.template;
-          }
+  function clearAll$3() {
+       each$5(function(_, key) {
+               remove$5(key);
+       });
+  }
 
-          function selectVTLayer(d) {
-              context.storage('settings-custom-data-url', d.template);
-              if (dataLayer) {
-                  dataLayer.template(d.template, d.src);
-                  dataLayer.enabled(true);
-              }
-          }
-      }
+  function _has(key) {
+       return (new RegExp("(?:^|;\\s*)" + escape(key).replace(/[\-\.\+\*]/g, "\\$&") + "\\s*\\=")).test(doc$1.cookie)
+  }
 
+  var Global$5 = util.Global;
 
-      function drawCustomDataItems(selection$$1) {
-          var dataLayer = layers.layer('data');
-          var hasData = dataLayer && dataLayer.hasData();
-          var showsData = hasData && dataLayer.enabled();
+  var sessionStorage_1 = {
+       name: 'sessionStorage',
+       read: read$4,
+       write: write$4,
+       each: each$6,
+       remove: remove$6,
+       clearAll: clearAll$4
+  };
 
-          var ul = selection$$1
-              .selectAll('.layer-list-data')
-              .data(dataLayer ? [0] : []);
+  function sessionStorage() {
+       return Global$5.sessionStorage
+  }
 
-          // Exit
-          ul.exit()
-              .remove();
+  function read$4(key) {
+       return sessionStorage().getItem(key)
+  }
 
-          // Enter
-          var ulEnter = ul.enter()
-              .append('ul')
-              .attr('class', 'layer-list layer-list-data');
+  function write$4(key, data) {
+       return sessionStorage().setItem(key, data)
+  }
 
-          var liEnter = ulEnter
-              .append('li')
-              .attr('class', 'list-item-data');
+  function each$6(fn) {
+       for (var i = sessionStorage().length - 1; i >= 0; i--) {
+               var key = sessionStorage().key(i);
+               fn(read$4(key), key);
+       }
+  }
 
-          liEnter
-              .append('button')
-              .call(tooltip()
-                  .title(t('settings.custom_data.tooltip'))
-                  .placement((textDirection === 'rtl') ? 'right' : 'left')
-              )
-              .on('click', editCustom)
-              .call(svgIcon('#iD-icon-more'));
+  function remove$6(key) {
+       return sessionStorage().removeItem(key)
+  }
 
-          liEnter
-              .append('button')
-              .call(tooltip()
-                  .title(t('map_data.layers.custom.zoom'))
-                  .placement((textDirection === 'rtl') ? 'right' : 'left')
-              )
-              .on('click', function() {
-                  event.preventDefault();
-                  event.stopPropagation();
-                  dataLayer.fitZoom();
-              })
-              .call(svgIcon('#iD-icon-search'));
+  function clearAll$4() {
+       return sessionStorage().clear()
+  }
 
-          var labelEnter = liEnter
-              .append('label')
-              .call(tooltip()
-                  .title(t('map_data.layers.custom.tooltip'))
-                  .placement('top')
-              );
+  // memoryStorage is a useful last fallback to ensure that the store
+  // is functions (meaning store.get(), store.set(), etc will all function).
+  // However, stored values will not persist when the browser navigates to
+  // a new page or reloads the current page.
 
-          labelEnter
-              .append('input')
-              .attr('type', 'checkbox')
-              .on('change', function() { toggleLayer('data'); });
+  var memoryStorage_1 = {
+       name: 'memoryStorage',
+       read: read$5,
+       write: write$5,
+       each: each$7,
+       remove: remove$7,
+       clearAll: clearAll$5,
+  };
 
-          labelEnter
-              .append('span')
-              .text(t('map_data.layers.custom.title'));
+  var memoryStorage = {};
 
-          // Update
-          ul = ul
-              .merge(ulEnter);
+  function read$5(key) {
+       return memoryStorage[key]
+  }
 
-          ul.selectAll('.list-item-data')
-              .classed('active', showsData)
-              .selectAll('label')
-              .classed('deemphasize', !hasData)
-              .selectAll('input')
-              .property('disabled', !hasData)
-              .property('checked', showsData);
-      }
+  function write$5(key, data) {
+       memoryStorage[key] = data;
+  }
 
+  function each$7(callback) {
+       for (var key in memoryStorage) {
+               if (memoryStorage.hasOwnProperty(key)) {
+                       callback(memoryStorage[key], key);
+               }
+       }
+  }
 
-      function editCustom() {
-          event.preventDefault();
-          context.container()
-              .call(settingsCustomData);
-      }
+  function remove$7(key) {
+       delete memoryStorage[key];
+  }
 
+  function clearAll$5(key) {
+       memoryStorage = {};
+  }
 
-      function customChanged(d) {
-          var dataLayer = layers.layer('data');
+  var all = [
+       // Listed in order of usage preference
+       localStorage_1,
+       oldFFGlobalStorage,
+       oldIEUserDataStorage,
+       cookieStorage,
+       sessionStorage_1,
+       memoryStorage_1
+  ];
 
-          if (d && d.url) {
-              dataLayer.url(d.url);
-          } else if (d && d.fileList) {
-              dataLayer.fileList(d.fileList);
-          }
-      }
+  /* eslint-disable */
 
+  //  json2.js
+  //  2016-10-28
+  //  Public Domain.
+  //  NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK.
+  //  See http://www.JSON.org/js.html
+  //  This code should be minified before deployment.
+  //  See http://javascript.crockford.com/jsmin.html
 
-      function drawListItems(selection$$1, data, type, name, change, active) {
-          var items = selection$$1.selectAll('li')
-              .data(data);
+  //  USE YOUR OWN COPY. IT IS EXTREMELY UNWISE TO LOAD CODE FROM SERVERS YOU DO
+  //  NOT CONTROL.
 
-          // Exit
-          items.exit()
-              .remove();
+  //  This file creates a global JSON object containing two methods: stringify
+  //  and parse. This file provides the ES5 JSON capability to ES3 systems.
+  //  If a project might run on IE8 or earlier, then this file should be included.
+  //  This file does nothing on ES5 systems.
 
-          // Enter
-          var enter = items.enter()
-              .append('li')
-              .attr('class', 'layer')
-              .call(tooltip()
-                  .html(true)
-                  .title(function(d) {
-                      var tip = t(name + '.' + d + '.tooltip');
-                      var key = (d === 'wireframe' ? t('area_fill.wireframe.key') : null);
-                      if ((name === 'feature' || name === 'keepRight') && autoHiddenFeature(d)) {
-                          var msg = showsLayer('osm') ? t('map_data.autohidden') : t('map_data.osmhidden');
-                          tip += '<div>' + msg + '</div>';
-                      }
-                      return uiTooltipHtml(tip, key);
-                  })
-                  .placement('top')
-              );
+  //      JSON.stringify(value, replacer, space)
+  //          value       any JavaScript value, usually an object or array.
+  //          replacer    an optional parameter that determines how object
+  //                      values are stringified for objects. It can be a
+  //                      function or an array of strings.
+  //          space       an optional parameter that specifies the indentation
+  //                      of nested structures. If it is omitted, the text will
+  //                      be packed without extra whitespace. If it is a number,
+  //                      it will specify the number of spaces to indent at each
+  //                      level. If it is a string (such as "\t" or "&nbsp;"),
+  //                      it contains the characters used to indent at each level.
+  //          This method produces a JSON text from a JavaScript value.
+  //          When an object value is found, if the object contains a toJSON
+  //          method, its toJSON method will be called and the result will be
+  //          stringified. A toJSON method does not serialize: it returns the
+  //          value represented by the name/value pair that should be serialized,
+  //          or undefined if nothing should be serialized. The toJSON method
+  //          will be passed the key associated with the value, and this will be
+  //          bound to the value.
 
-          var label = enter
-              .append('label');
+  //          For example, this would serialize Dates as ISO strings.
 
-          label
-              .append('input')
-              .attr('type', type)
-              .attr('name', name)
-              .on('change', change);
+  //              Date.prototype.toJSON = function (key) {
+  //                  function f(n) {
+  //                      // Format integers to have at least two digits.
+  //                      return (n < 10)
+  //                          ? "0" + n
+  //                          : n;
+  //                  }
+  //                  return this.getUTCFullYear()   + "-" +
+  //                       f(this.getUTCMonth() + 1) + "-" +
+  //                       f(this.getUTCDate())      + "T" +
+  //                       f(this.getUTCHours())     + ":" +
+  //                       f(this.getUTCMinutes())   + ":" +
+  //                       f(this.getUTCSeconds())   + "Z";
+  //              };
 
-          label
-              .append('span')
-              .text(function(d) { return t(name + '.' + d + '.description'); });
+  //          You can provide an optional replacer method. It will be passed the
+  //          key and value of each member, with this bound to the containing
+  //          object. The value that is returned from your method will be
+  //          serialized. If your method returns undefined, then the member will
+  //          be excluded from the serialization.
 
-          // Update
-          items = items
-              .merge(enter);
+  //          If the replacer parameter is an array of strings, then it will be
+  //          used to select the members to be serialized. It filters the results
+  //          such that only members with keys listed in the replacer array are
+  //          stringified.
 
-          items
-              .classed('active', active)
-              .selectAll('input')
-              .property('checked', active)
-              .property('indeterminate', function(d) {
-                  return ((name === 'feature' || name === 'keepRight') && autoHiddenFeature(d));
-              });
-      }
+  //          Values that do not have JSON representations, such as undefined or
+  //          functions, will not be serialized. Such values in objects will be
+  //          dropped; in arrays they will be replaced with null. You can use
+  //          a replacer function to replace those with JSON values.
 
+  //          JSON.stringify(undefined) returns undefined.
 
-      function renderDataLayers(selection$$1) {
-          var container = selection$$1.selectAll('.data-layer-container')
-              .data([0]);
+  //          The optional space parameter produces a stringification of the
+  //          value that is filled with line breaks and indentation to make it
+  //          easier to read.
 
-          _dataLayerContainer = container.enter()
-              .append('div')
-              .attr('class', 'data-layer-container')
-              .merge(container);
+  //          If the space parameter is a non-empty string, then that string will
+  //          be used for indentation. If the space parameter is a number, then
+  //          the indentation will be that many spaces.
 
-          updateDataLayers();
-      }
+  //          Example:
 
+  //          text = JSON.stringify(["e", {pluribus: "unum"}]);
+  //          // text is '["e",{"pluribus":"unum"}]'
 
-      function renderFillList(selection$$1) {
-          var container = selection$$1.selectAll('.layer-fill-list')
-              .data([0]);
+  //          text = JSON.stringify(["e", {pluribus: "unum"}], null, "\t");
+  //          // text is '[\n\t"e",\n\t{\n\t\t"pluribus": "unum"\n\t}\n]'
 
-          _fillList = container.enter()
-              .append('ul')
-              .attr('class', 'layer-list layer-fill-list')
-              .merge(container);
+  //          text = JSON.stringify([new Date()], function (key, value) {
+  //              return this[key] instanceof Date
+  //                  ? "Date(" + this[key] + ")"
+  //                  : value;
+  //          });
+  //          // text is '["Date(---current time---)"]'
 
-          updateFillList();
-      }
+  //      JSON.parse(text, reviver)
+  //          This method parses a JSON text to produce an object or array.
+  //          It can throw a SyntaxError exception.
 
+  //          The optional reviver parameter is a function that can filter and
+  //          transform the results. It receives each of the keys and values,
+  //          and its return value is used instead of the original value.
+  //          If it returns what it received, then the structure is not modified.
+  //          If it returns undefined then the member is deleted.
 
-      function renderFeatureList(selection$$1) {
-          var container = selection$$1.selectAll('.layer-feature-list')
-              .data([0]);
+  //          Example:
 
-          _featureList = container.enter()
-              .append('ul')
-              .attr('class', 'layer-list layer-feature-list')
-              .merge(container);
+  //          // Parse the text. Values that look like ISO date strings will
+  //          // be converted to Date objects.
 
-          updateFeatureList();
-      }
+  //          myData = JSON.parse(text, function (key, value) {
+  //              var a;
+  //              if (typeof value === "string") {
+  //                  a =
+  //   /^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2}(?:\.\d*)?)Z$/.exec(value);
+  //                  if (a) {
+  //                      return new Date(Date.UTC(+a[1], +a[2] - 1, +a[3], +a[4],
+  //                          +a[5], +a[6]));
+  //                  }
+  //              }
+  //              return value;
+  //          });
 
-      function updateDataLayers() {
-          _dataLayerContainer
-              .call(drawOsmItems)
-              .call(drawQAItems)
-              .call(drawPhotoItems)
-              .call(drawCustomDataItems)
-              .call(drawVectorItems);      // Beta - Detroit mapping challenge
-      }
+  //          myData = JSON.parse('["Date(09/09/2001)"]', function (key, value) {
+  //              var d;
+  //              if (typeof value === "string" &&
+  //                      value.slice(0, 5) === "Date(" &&
+  //                      value.slice(-1) === ")") {
+  //                  d = new Date(value.slice(5, -1));
+  //                  if (d) {
+  //                      return d;
+  //                  }
+  //              }
+  //              return value;
+  //          });
 
-      function updateFillList() {
-          _fillList
-              .call(drawListItems, fills, 'radio', 'area_fill', setFill, showsFill);
-      }
+  //  This is a reference implementation. You are free to copy, modify, or
+  //  redistribute.
 
-      function updateFeatureList() {
-          _featureList
-              .call(drawListItems, features, 'checkbox', 'feature', clickFeature, showsFeature);
-      }
+  /*jslint
+      eval, for, this
+  */
 
-      function update() {
+  /*property
+      JSON, apply, call, charCodeAt, getUTCDate, getUTCFullYear, getUTCHours,
+      getUTCMinutes, getUTCMonth, getUTCSeconds, hasOwnProperty, join,
+      lastIndex, length, parse, prototype, push, replace, slice, stringify,
+      test, toJSON, toString, valueOf
+  */
 
-          if (!pane.select('.disclosure-wrap-data_layers').classed('hide')) {
-              updateDataLayers();
-          }
-          if (!pane.select('.disclosure-wrap-fill_area').classed('hide')) {
-              updateFillList();
-          }
-          if (!pane.select('.disclosure-wrap-map_features').classed('hide')) {
-              updateFeatureList();
-          }
 
-          _QAList
-              .call(drawListItems, ['keep-right'], 'checkbox', 'QA', function(d) { toggleLayer(d); }, showsQA);
-      }
+  // Create a JSON object only if one does not already exist. We create the
+  // methods in a closure to avoid creating global variables.
 
+  if (typeof JSON !== "object") {
+      JSON = {};
+  }
 
-      function toggleWireframe() {
-          if (event) {
-              event.preventDefault();
-              event.stopPropagation();
-          }
+  (function () {
 
-          if (_fillSelected === 'wireframe') {
-              _fillSelected = context.storage('area-fill-toggle') || 'partial';
-          } else {
-              _fillSelected = 'wireframe';
-          }
+      var rx_one = /^[\],:{}\s]*$/;
+      var rx_two = /\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g;
+      var rx_three = /"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g;
+      var rx_four = /(?:^|:|,)(?:\s*\[)+/g;
+      var rx_escapable = /[\\"\u0000-\u001f\u007f-\u009f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g;
+      var rx_dangerous = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g;
 
-          setFill(_fillSelected);
-          context.map().pan([0,0]);  // trigger a redraw
+      function f(n) {
+          // Format integers to have at least two digits.
+          return n < 10
+              ? "0" + n
+              : n;
       }
 
+      function this_value() {
+          return this.valueOf();
+      }
 
-      function mapData(selection$$1) {
-
-          function hidePane() {
-              setVisible(false);
-          }
+      if (typeof Date.prototype.toJSON !== "function") {
 
-          function togglePane() {
-              if (event) event.preventDefault();
-              paneTooltip.hide(button);
-              setVisible(!button.classed('active'));
-          }
+          Date.prototype.toJSON = function () {
 
-          function setVisible(show) {
-              if (show !== _shown) {
-                  button.classed('active', show);
-                  _shown = show;
+              return isFinite(this.valueOf())
+                  ? this.getUTCFullYear() + "-" +
+                          f(this.getUTCMonth() + 1) + "-" +
+                          f(this.getUTCDate()) + "T" +
+                          f(this.getUTCHours()) + ":" +
+                          f(this.getUTCMinutes()) + ":" +
+                          f(this.getUTCSeconds()) + "Z"
+                  : null;
+          };
 
-                  if (show) {
-                      uiBackground.hidePane();
-                      uiHelp.hidePane();
-                      update();
+          Boolean.prototype.toJSON = this_value;
+          Number.prototype.toJSON = this_value;
+          String.prototype.toJSON = this_value;
+      }
 
-                      pane
-                          .style('display', 'block')
-                          .style('right', '-300px')
-                          .transition()
-                          .duration(200)
-                          .style('right', '0px');
+      var gap;
+      var indent;
+      var meta;
+      var rep;
 
-                  } else {
-                      pane
-                          .style('display', 'block')
-                          .style('right', '0px')
-                          .transition()
-                          .duration(200)
-                          .style('right', '-300px')
-                          .on('end', function() {
-                              select(this).style('display', 'none');
-                          });
-                  }
-              }
-          }
 
+      function quote(string) {
 
-          pane = selection$$1
-              .append('div')
-              .attr('class', 'fillL map-pane hide');
+  // If the string contains no control characters, no quote characters, and no
+  // backslash characters, then we can safely slap some quotes around it.
+  // Otherwise we must also replace the offending characters with safe escape
+  // sequences.
 
-          var paneTooltip = tooltip()
-              .placement((textDirection === 'rtl') ? 'right' : 'left')
-              .html(true)
-              .title(uiTooltipHtml(t('map_data.description'), key));
+          rx_escapable.lastIndex = 0;
+          return rx_escapable.test(string)
+              ? "\"" + string.replace(rx_escapable, function (a) {
+                  var c = meta[a];
+                  return typeof c === "string"
+                      ? c
+                      : "\\u" + ("0000" + a.charCodeAt(0).toString(16)).slice(-4);
+              }) + "\""
+              : "\"" + string + "\"";
+      }
 
-          var button = selection$$1
-              .append('button')
-              .attr('tabindex', -1)
-              .on('click', togglePane)
-              .call(svgIcon('#iD-icon-data', 'light'))
-              .call(paneTooltip);
 
+      function str(key, holder) {
 
-          var heading = pane
-              .append('div')
-              .attr('class', 'pane-heading');
+  // Produce a string from holder[key].
 
-          heading
-              .append('h2')
-              .text(t('map_data.title'));
+          var i;          // The loop counter.
+          var k;          // The member key.
+          var v;          // The member value.
+          var length;
+          var mind = gap;
+          var partial;
+          var value = holder[key];
 
-          heading
-              .append('button')
-              .on('click', function() { uiMapData.hidePane(); })
-              .call(svgIcon('#iD-icon-close'));
+  // If the value has a toJSON method, call it to obtain a replacement value.
 
+          if (value && typeof value === "object" &&
+                  typeof value.toJSON === "function") {
+              value = value.toJSON(key);
+          }
 
-          var content = pane
-              .append('div')
-              .attr('class', 'pane-content');
+  // If we were called with a replacer function, then call the replacer to
+  // obtain a replacement value.
 
+          if (typeof rep === "function") {
+              value = rep.call(holder, key, value);
+          }
 
-          // data layers
-          content
-              .append('div')
-              .attr('class', 'map-data-data-layers')
-              .call(uiDisclosure(context, 'data_layers', true)
-                  .title(t('map_data.data_layers'))
-                  .content(renderDataLayers)
-              );
+  // What happens next depends on the value's type.
 
-          // area fills
-          content
-              .append('div')
-              .attr('class', 'map-data-area-fills')
-              .call(uiDisclosure(context, 'fill_area', false)
-                  .title(t('map_data.fill_area'))
-                  .content(renderFillList)
-              );
+          switch (typeof value) {
+          case "string":
+              return quote(value);
 
-          // feature filters
-          content
-              .append('div')
-              .attr('class', 'map-data-feature-filters')
-              .call(uiDisclosure(context, 'map_features', false)
-                  .title(t('map_data.map_features'))
-                  .content(renderFeatureList)
-              );
+          case "number":
 
+  // JSON numbers must be finite. Encode non-finite numbers as null.
 
-          // add listeners
-          context.features()
-              .on('change.map_data-update', update);
+              return isFinite(value)
+                  ? String(value)
+                  : "null";
 
-          update();
-          setFill(_fillSelected);
+          case "boolean":
+          case "null":
 
-          context.keybinding()
-              .on(key, togglePane)
-              .on(t('area_fill.wireframe.key'), toggleWireframe);
+  // If the value is a boolean or null, convert it to a string. Note:
+  // typeof null does not produce "null". The case is included here in
+  // the remote chance that this gets fixed someday.
 
-          uiMapData.hidePane = hidePane;
-          uiMapData.togglePane = togglePane;
-          uiMapData.setVisible = setVisible;
-      }
+              return String(value);
 
-      return mapData;
-  }
+  // If the type is "object", we might be dealing with an object or an array or
+  // null.
 
-  function uiShortcuts(context) {
-      var detected = utilDetect();
-      var _activeTab = 0;
-      var _modalSelection;
-      var _selection = select(null);
+          case "object":
 
+  // Due to a specification blunder in ECMAScript, typeof null is "object",
+  // so watch out for that case.
 
-      context.keybinding()
-          .on([t('shortcuts.toggle.key'), '?'], function () {
-              if (d3_selectAll('.modal-shortcuts').size()) {  // already showing
-                  if (_modalSelection) {
-                      _modalSelection.close();
-                      _modalSelection = null;
-                  }
-              } else {
-                  _modalSelection = uiModal(_selection);
-                  shortcutsModal(_modalSelection);
+              if (!value) {
+                  return "null";
               }
-          });
-
-
-      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);
-      }
 
+  // Make an array to hold the partial results of stringifying this object value.
 
-      function render(selection$$1) {
-          var wrapper = selection$$1
-              .selectAll('.wrapper')
-              .data([0]);
+              gap += indent;
+              partial = [];
 
-          var wrapperEnter = wrapper
-              .enter()
-              .append('div')
-              .attr('class', 'wrapper modal-section');
+  // Is the value an array?
 
-          var tabsBar = wrapperEnter
-              .append('div')
-              .attr('class', 'tabs-bar');
+              if (Object.prototype.toString.apply(value) === "[object Array]") {
 
-          var shortcutsList = wrapperEnter
-              .append('div')
-              .attr('class', 'shortcuts-list');
+  // The value is an array. Stringify every element. Use null as a placeholder
+  // for non-JSON values.
 
-          wrapper = wrapper.merge(wrapperEnter);
+                  length = value.length;
+                  for (i = 0; i < length; i += 1) {
+                      partial[i] = str(i, value) || "null";
+                  }
 
-          var tabs = tabsBar
-              .selectAll('.tab')
-              .data(dataShortcuts);
+  // Join all of the elements together, separated with commas, and wrap them in
+  // brackets.
 
-          var tabsEnter = tabs
-              .enter()
-              .append('div')
-              .attr('class', 'tab')
-              .on('click', function (d, i) {
-                  _activeTab = i;
-                  render(selection$$1);
-              });
+                  v = partial.length === 0
+                      ? "[]"
+                      : gap
+                          ? "[\n" + gap + partial.join(",\n" + gap) + "\n" + mind + "]"
+                          : "[" + partial.join(",") + "]";
+                  gap = mind;
+                  return v;
+              }
 
-          tabsEnter
-              .append('span')
-              .text(function (d) { return t(d.text); });
+  // If the replacer is an array, use it to select the members to be stringified.
 
-          tabs = tabs
-              .merge(tabsEnter);
+              if (rep && typeof rep === "object") {
+                  length = rep.length;
+                  for (i = 0; i < length; i += 1) {
+                      if (typeof rep[i] === "string") {
+                          k = rep[i];
+                          v = str(k, value);
+                          if (v) {
+                              partial.push(quote(k) + (
+                                  gap
+                                      ? ": "
+                                      : ":"
+                              ) + v);
+                          }
+                      }
+                  }
+              } else {
 
-          // Update
-          wrapper.selectAll('.tab')
-              .classed('active', function (d, i) {
-                  return i === _activeTab;
-              });
+  // Otherwise, iterate through all of the keys in the object.
 
+                  for (k in value) {
+                      if (Object.prototype.hasOwnProperty.call(value, k)) {
+                          v = str(k, value);
+                          if (v) {
+                              partial.push(quote(k) + (
+                                  gap
+                                      ? ": "
+                                      : ":"
+                              ) + v);
+                          }
+                      }
+                  }
+              }
 
-          var shortcuts = shortcutsList
-              .selectAll('.shortcut-tab')
-              .data(dataShortcuts);
+  // Join all of the member texts together, separated with commas,
+  // and wrap them in braces.
 
-          var shortcutsEnter = shortcuts
-              .enter()
-              .append('div')
-              .attr('class', function(d) { return 'shortcut-tab shortcut-tab-' + d.tab; });
+              v = partial.length === 0
+                  ? "{}"
+                  : gap
+                      ? "{\n" + gap + partial.join(",\n" + gap) + "\n" + mind + "}"
+                      : "{" + partial.join(",") + "}";
+              gap = mind;
+              return v;
+          }
+      }
 
-          var columnsEnter = shortcutsEnter
-              .selectAll('.shortcut-column')
-              .data(function (d) { return d.columns; })
-              .enter()
-              .append('table')
-              .attr('class', 'shortcut-column');
+  // If the JSON object does not yet have a stringify method, give it one.
 
-          var rowsEnter = columnsEnter
-              .selectAll('.shortcut-row')
-              .data(function (d) { return d.rows; })
-              .enter()
-              .append('tr')
-              .attr('class', 'shortcut-row');
+      if (typeof JSON.stringify !== "function") {
+          meta = {    // table of character substitutions
+              "\b": "\\b",
+              "\t": "\\t",
+              "\n": "\\n",
+              "\f": "\\f",
+              "\r": "\\r",
+              "\"": "\\\"",
+              "\\": "\\\\"
+          };
+          JSON.stringify = function (value, replacer, space) {
 
+  // The stringify method takes a value and an optional replacer, and an optional
+  // space parameter, and returns a JSON text. The replacer can be a function
+  // that can replace values, or an array of strings that will select the keys.
+  // A default replacer method can be provided. Use of the space parameter can
+  // produce text that is more easily readable.
 
-          var sectionRows = rowsEnter
-              .filter(function (d) { return !d.shortcuts; });
+              var i;
+              gap = "";
+              indent = "";
 
-          sectionRows
-              .append('td');
+  // If the space parameter is a number, make an indent string containing that
+  // many spaces.
 
-          sectionRows
-              .append('td')
-              .attr('class', 'shortcut-section')
-              .append('h3')
-              .text(function (d) { return t(d.text); });
+              if (typeof space === "number") {
+                  for (i = 0; i < space; i += 1) {
+                      indent += " ";
+                  }
 
+  // If the space parameter is a string, it will be used as the indent string.
 
-          var shortcutRows = rowsEnter
-              .filter(function (d) { return d.shortcuts; });
+              } else if (typeof space === "string") {
+                  indent = space;
+              }
 
-          var shortcutKeys = shortcutRows
-              .append('td')
-              .attr('class', 'shortcut-keys');
+  // If there is a replacer, it must be a function or an array.
+  // Otherwise, throw an error.
 
-          var modifierKeys = shortcutKeys
-              .filter(function (d) { return d.modifiers; });
+              rep = replacer;
+              if (replacer && typeof replacer !== "function" &&
+                      (typeof replacer !== "object" ||
+                      typeof replacer.length !== "number")) {
+                  throw new Error("JSON.stringify");
+              }
 
-          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);
+  // Make a fake root object containing our value under the key of "".
+  // Return the result of stringifying the value.
 
-                  selection$$1
-                      .append('kbd')
-                      .attr('class', 'modifier')
-                      .text(function (d) { return uiCmd.display(d); });
+              return str("", {"": value});
+          };
+      }
 
-                  selection$$1
-                      .append('span')
-                      .text('+');
-              });
 
+  // If the JSON object does not yet have a parse method, give it one.
 
-          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'];
-                  }
+      if (typeof JSON.parse !== "function") {
+          JSON.parse = function (text, reviver) {
 
-                  // replace translations
-                  arr = arr.map(function(s) {
-                      return uiCmd.display(s.indexOf('.') !== -1 ? t(s) : s);
-                  });
+  // The parse method takes a text and an optional reviver function, and returns
+  // a JavaScript value if the text is a valid JSON text.
 
-                  return uniq(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/);
+              var j;
 
-                  if (click && click[1]) {   // replace "left_click", "right_click" with mouse icon
-                      selection$$1
-                          .call(svgIcon('#iD-walkthrough-mouse', 'mouseclick', click[1]));
-                  } else {
-                      selection$$1
-                          .append('kbd')
-                          .attr('class', 'shortcut')
-                          .text(function (d) { return d.shortcut; });
-                  }
+              function walk(holder, key) {
 
-                  if (i < nodes.length - 1) {
-                      selection$$1
-                          .append('span')
-                          .text(d.separator || '\u00a0' + t('shortcuts.or') + '\u00a0');
+  // The walk method is used to recursively walk the resulting structure so
+  // that modifications can be made.
+
+                  var k;
+                  var v;
+                  var value = holder[key];
+                  if (value && typeof value === "object") {
+                      for (k in value) {
+                          if (Object.prototype.hasOwnProperty.call(value, k)) {
+                              v = walk(value, k);
+                              if (v !== undefined) {
+                                  value[k] = v;
+                              } else {
+                                  delete value[k];
+                              }
+                          }
+                      }
                   }
-              });
+                  return reviver.call(holder, key, value);
+              }
 
 
-          shortcutKeys
-              .filter(function(d) { return d.gesture; })
-              .each(function () {
-                  var selection$$1 = select(this);
+  // Parsing happens in four stages. In the first stage, we replace certain
+  // Unicode characters with escape sequences. JavaScript handles many characters
+  // incorrectly, either silently deleting them, or treating them as line endings.
 
-                  selection$$1
-                      .append('span')
-                      .text('+');
+              text = String(text);
+              rx_dangerous.lastIndex = 0;
+              if (rx_dangerous.test(text)) {
+                  text = text.replace(rx_dangerous, function (a) {
+                      return "\\u" +
+                              ("0000" + a.charCodeAt(0).toString(16)).slice(-4);
+                  });
+              }
 
-                  selection$$1
-                      .append('span')
-                      .attr('class', 'gesture')
-                      .text(function (d) { return t(d.gesture); });
-              });
+  // In the second stage, we run the text against regular expressions that look
+  // for non-JSON patterns. We are especially concerned with "()" and "new"
+  // because they can cause invocation, and "=" because it can cause mutation.
+  // But just to be safe, we want to reject all unexpected forms.
+
+  // We split the second stage into 4 regexp operations in order to work around
+  // crippling inefficiencies in IE's and Safari's regexp engines. First we
+  // replace the JSON backslash pairs with "@" (a non-JSON character). Second, we
+  // replace all simple value tokens with "]" characters. Third, we delete all
+  // open brackets that follow a colon or comma or that begin the text. Finally,
+  // we look to see that the remaining characters are only whitespace or "]" or
+  // "," or ":" or "{" or "}". If that is so, then the text is safe for eval.
 
+              if (
+                  rx_one.test(
+                      text
+                          .replace(rx_two, "@")
+                          .replace(rx_three, "]")
+                          .replace(rx_four, "")
+                  )
+              ) {
 
-          shortcutRows
-              .append('td')
-              .attr('class', 'shortcut-desc')
-              .text(function (d) { return d.text ? t(d.text) : '\u00a0'; });
+  // In the third stage we use the eval function to compile the text into a
+  // JavaScript structure. The "{" operator is subject to a syntactic ambiguity
+  // in JavaScript: it can begin a block or an object literal. We wrap the text
+  // in parens to eliminate the ambiguity.
 
+                  j = eval("(" + text + ")");
 
-          shortcuts = shortcuts
-              .merge(shortcutsEnter);
+  // In the optional fourth stage, we recursively walk the new structure, passing
+  // each name/value pair to a reviver function for possible transformation.
 
-          // Update
-          wrapper.selectAll('.shortcut-tab')
-              .style('display', function (d, i) {
-                  return i === _activeTab ? 'flex' : 'none';
-              });
+                  return (typeof reviver === "function")
+                      ? walk({"": j}, "")
+                      : j;
+              }
+
+  // If the text is not JSON parseable, then a SyntaxError is thrown.
+
+              throw new SyntaxError("JSON.parse");
+          };
       }
+  }());
 
+  var json2 = json2Plugin;
 
-      return function(selection$$1, show) {
-          _selection = selection$$1;
-          if (show) {
-              _modalSelection = uiModal(selection$$1);
-              shortcutsModal(_modalSelection);
-          }
-      };
+  function json2Plugin() {
+       
+       return {}
   }
 
-  function uiHelp(context) {
-      var key = t('help.key');
+  var plugins = [json2];
 
-      var docKeys = [
-          ['help', [
-              'welcome',
-              'open_data_h',
-              'open_data',
-              'before_start_h',
-              'before_start',
-              'open_source_h',
-              'open_source',
-              'open_source_help'
-          ]],
-          ['overview', [
-              'navigation_h',
-              'navigation_drag',
-              'navigation_zoom',
-              'features_h',
-              'features',
-              'nodes_ways'
-          ]],
-          ['editing', [
-              'select_h',
-              'select_left_click',
-              'select_right_click',
-              'multiselect_h',
-              'multiselect_shift_click',
-              'multiselect_lasso',
-              'undo_redo_h',
-              'undo_redo',
-              'save_h',
-              'save',
-              'save_validation',
-              'upload_h',
-              'upload',
-              'backups_h',
-              'backups',
-              'keyboard_h',
-              'keyboard'
-          ]],
-          ['feature_editor', [
-              'intro',
-              'definitions',
-              'type_h',
-              'type',
-              'type_picker',
-              'fields_h',
-              'fields_all_fields',
-              'fields_example',
-              'fields_add_field',
-              'tags_h',
-              'tags_all_tags',
-              'tags_resources'
-          ]],
-          ['points', [
-              'intro',
-              'add_point_h',
-              'add_point',
-              'add_point_finish',
-              'move_point_h',
-              'move_point',
-              'delete_point_h',
-              'delete_point',
-              'delete_point_command'
-          ]],
-          ['lines', [
-              'intro',
-              'add_line_h',
-              'add_line',
-              'add_line_draw',
-              'add_line_finish',
-              'modify_line_h',
-              'modify_line_dragnode',
-              'modify_line_addnode',
-              'connect_line_h',
-              'connect_line',
-              'connect_line_display',
-              'connect_line_drag',
-              'connect_line_tag',
-              'disconnect_line_h',
-              'disconnect_line_command',
-              'move_line_h',
-              'move_line_command',
-              'move_line_connected',
-              'delete_line_h',
-              'delete_line',
-              'delete_line_command'
-          ]],
-          ['areas', [
-              'intro',
-              'point_or_area_h',
-              'point_or_area',
-              'add_area_h',
-              'add_area_command',
-              'add_area_draw',
-              'add_area_finish',
-              'square_area_h',
-              'square_area_command',
-              'modify_area_h',
-              'modify_area_dragnode',
-              'modify_area_addnode',
-              'delete_area_h',
-              'delete_area',
-              'delete_area_command'
-          ]],
-          ['relations', [
-              'intro',
-              'edit_relation_h',
-              'edit_relation',
-              'edit_relation_add',
-              'edit_relation_delete',
-              'maintain_relation_h',
-              'maintain_relation',
-              'relation_types_h',
-              'multipolygon_h',
-              'multipolygon',
-              'multipolygon_create',
-              'multipolygon_merge',
-              'turn_restriction_h',
-              'turn_restriction',
-              'turn_restriction_field',
-              'turn_restriction_editing',
-              'route_h',
-              'route',
-              'route_add',
-              'boundary_h',
-              'boundary',
-              'boundary_add'
-          ]],
-          ['notes', [
-              'intro',
-              'add_note_h',
-              'add_note',
-              'move_note',
-              'update_note_h',
-              'update_note',
-              'save_note_h',
-              'save_note'
-          ]],
+  var store_legacy = storeEngine.createStore(all, plugins);
 
-          ['imagery', [
-              'intro',
-              'sources_h',
-              'choosing',
-              'sources',
-              'offsets_h',
-              'offset',
-              'offset_change'
-          ]],
-          ['streetlevel', [
-              'intro',
-              'using_h',
-              'using',
-              'photos',
-              'viewer'
-          ]],
-          ['gps', [
-              'intro',
-              'survey',
-              'using_h',
-              'using',
-              'tracing',
-              'upload'
-          ]],
-          ['qa', [
-              'intro',
-              'tools_h',
-              'tools',
-              'issues_h',
-              'issues'
-          ]]
-      ];
+  // # osm-auth
+  //
+  // This code is only compatible with IE10+ because the [XDomainRequest](http://bit.ly/LfO7xo)
+  // object, IE<10's idea of [CORS](http://en.wikipedia.org/wiki/Cross-origin_resource_sharing),
+  // does not support custom headers, which this uses everywhere.
+  var osmAuth = function(o) {
 
-      var headings = {
-          'help.help.open_data_h': 3,
-          'help.help.before_start_h': 3,
-          'help.help.open_source_h': 3,
-          'help.overview.navigation_h': 3,
-          'help.overview.features_h': 3,
-          'help.editing.select_h': 3,
-          'help.editing.multiselect_h': 3,
-          'help.editing.undo_redo_h': 3,
-          'help.editing.save_h': 3,
-          'help.editing.upload_h': 3,
-          'help.editing.backups_h': 3,
-          'help.editing.keyboard_h': 3,
-          'help.feature_editor.type_h': 3,
-          'help.feature_editor.fields_h': 3,
-          'help.feature_editor.tags_h': 3,
-          'help.points.add_point_h': 3,
-          'help.points.move_point_h': 3,
-          'help.points.delete_point_h': 3,
-          'help.lines.add_line_h': 3,
-          'help.lines.modify_line_h': 3,
-          'help.lines.connect_line_h': 3,
-          'help.lines.disconnect_line_h': 3,
-          'help.lines.move_line_h': 3,
-          'help.lines.delete_line_h': 3,
-          'help.areas.point_or_area_h': 3,
-          'help.areas.add_area_h': 3,
-          'help.areas.square_area_h': 3,
-          'help.areas.modify_area_h': 3,
-          'help.areas.delete_area_h': 3,
-          'help.relations.edit_relation_h': 3,
-          'help.relations.maintain_relation_h': 3,
-          'help.relations.relation_types_h': 2,
-          'help.relations.multipolygon_h': 3,
-          'help.relations.turn_restriction_h': 3,
-          'help.relations.route_h': 3,
-          'help.relations.boundary_h': 3,
-          'help.notes.add_note_h': 3,
-          'help.notes.update_note_h': 3,
-          'help.notes.save_note_h': 3,
-          'help.imagery.sources_h': 3,
-          'help.imagery.offsets_h': 3,
-          'help.streetlevel.using_h': 3,
-          'help.gps.using_h': 3,
-          'help.qa.tools_h': 3,
-          'help.qa.issues_h': 3
+      var oauth = {};
+
+      // authenticated users will also have a request token secret, but it's
+      // not used in transactions with the server
+      oauth.authenticated = function() {
+          return !!(token('oauth_token') && token('oauth_token_secret'));
       };
 
-      var replacements = {
-          point: icon('#iD-icon-point', 'pre-text'),
-          line: icon('#iD-icon-line', 'pre-text'),
-          area: icon('#iD-icon-area', 'pre-text'),
-          note: icon('#iD-icon-note', 'pre-text add-note'),
-          plus: icon('#iD-icon-plus', 'pre-text'),
-          minus: icon('#iD-icon-minus', 'pre-text'),
-          orthogonalize: icon('#iD-operation-orthogonalize', 'pre-text'),
-          disconnect: icon('#iD-operation-disconnect', 'pre-text'),
-          layers: icon('#iD-icon-layers', 'pre-text'),
-          data: icon('#iD-icon-data', 'pre-text'),
-          inspect: icon('#iD-icon-inspect', 'pre-text'),
-          move: icon('#iD-operation-move', 'pre-text'),
-          merge: icon('#iD-operation-merge', 'pre-text'),
-          delete: icon('#iD-operation-delete', 'pre-text'),
-          close: icon('#iD-icon-close', 'pre-text'),
-          undo: icon(textDirection === 'rtl' ? '#iD-icon-redo' : '#iD-icon-undo', 'pre-text'),
-          redo: icon(textDirection === 'rtl' ? '#iD-icon-undo' : '#iD-icon-redo', 'pre-text'),
-          save: icon('#iD-icon-save', 'pre-text'),
-          leftclick: icon('#iD-walkthrough-mouse', 'pre-text mouseclick', 'left'),
-          rightclick: icon('#iD-walkthrough-mouse', 'pre-text mouseclick', 'right'),
-          shift: uiCmd.display('⇧'),
-          alt: uiCmd.display('⌥'),
-          return: uiCmd.display('↵'),
-          version: context.version
+      oauth.logout = function() {
+          token('oauth_token', '');
+          token('oauth_token_secret', '');
+          token('oauth_request_token_secret', '');
+          return oauth;
       };
 
-      // For each section, squash all the texts into a single markdown document
-      var docs = docKeys.map(function(key) {
-          var helpkey = 'help.' + key[0];
-          var text = key[1].reduce(function(all, part) {
-              var subkey = helpkey + '.' + part;
-              var depth = headings[subkey];                              // is this subkey a heading?
-              var hhh = depth ? Array(depth + 1).join('#') + ' ' : '';   // if so, prepend with some ##'s
-              return all + hhh + t(subkey, replacements) + '\n\n';
-          }, '');
+      // TODO: detect lack of click event
+      oauth.authenticate = function(callback) {
+          if (oauth.authenticated()) return callback();
 
-          return {
-              title: t(helpkey + '.title'),
-              html: marked(text.trim())
+          oauth.logout();
+
+          // ## Getting a request token
+          var params = timenonce(getAuth(o)),
+              url = o.url + '/oauth/request_token';
+
+          params.oauth_signature = ohauth_1.signature(
+              o.oauth_secret, '',
+              ohauth_1.baseString('POST', url, params));
+
+          if (!o.singlepage) {
+              // Create a 600x550 popup window in the center of the screen
+              var w = 600, h = 550,
+                  settings = [
+                      ['width', w], ['height', h],
+                      ['left', screen.width / 2 - w / 2],
+                      ['top', screen.height / 2 - h / 2]].map(function(x) {
+                          return x.join('=');
+                      }).join(','),
+                  popup = window.open('about:blank', 'oauth_window', settings);
+          }
+
+          // Request a request token. When this is complete, the popup
+          // window is redirected to OSM's authorization page.
+          ohauth_1.xhr('POST', url, params, null, {}, reqTokenDone);
+          o.loading();
+
+          function reqTokenDone(err, xhr) {
+              o.done();
+              if (err) return callback(err);
+              var resp = ohauth_1.stringQs(xhr.response);
+              token('oauth_request_token_secret', resp.oauth_token_secret);
+              var authorize_url = o.url + '/oauth/authorize?' + ohauth_1.qsString({
+                  oauth_token: resp.oauth_token,
+                  oauth_callback: resolveUrl(o.landing)
+              });
+
+              if (o.singlepage) {
+                  location.href = authorize_url;
+              } else {
+                  popup.location = authorize_url;
+              }
+          }
+
+          // Called by a function in a landing page, in the popup window. The
+          // window closes itself.
+          window.authComplete = function(token) {
+              var oauth_token = ohauth_1.stringQs(token.split('?')[1]);
+              get_access_token(oauth_token.oauth_token);
+              delete window.authComplete;
           };
-      });
 
+          // ## Getting an request token
+          //
+          // At this point we have an `oauth_token`, brought in from a function
+          // call on a landing page popup.
+          function get_access_token(oauth_token) {
+              var url = o.url + '/oauth/access_token',
+                  params = timenonce(getAuth(o)),
+                  request_token_secret = token('oauth_request_token_secret');
+              params.oauth_token = oauth_token;
+              params.oauth_signature = ohauth_1.signature(
+                  o.oauth_secret,
+                  request_token_secret,
+                  ohauth_1.baseString('POST', url, params));
 
-      function help(selection$$1) {
+              // ## Getting an access token
+              //
+              // The final token required for authentication. At this point
+              // we have a `request token secret`
+              ohauth_1.xhr('POST', url, params, null, {}, accessTokenDone);
+              o.loading();
+          }
 
-          function hidePane() {
-              setVisible(false);
+          function accessTokenDone(err, xhr) {
+              o.done();
+              if (err) return callback(err);
+              var access_token = ohauth_1.stringQs(xhr.response);
+              token('oauth_token', access_token.oauth_token);
+              token('oauth_token_secret', access_token.oauth_token_secret);
+              callback(null, oauth);
           }
+      };
 
+      oauth.bootstrapToken = function(oauth_token, callback) {
+          // ## Getting an request token
+          // At this point we have an `oauth_token`, brought in from a function
+          // call on a landing page popup.
+          function get_access_token(oauth_token) {
+              var url = o.url + '/oauth/access_token',
+                  params = timenonce(getAuth(o)),
+                  request_token_secret = token('oauth_request_token_secret');
+              params.oauth_token = oauth_token;
+              params.oauth_signature = ohauth_1.signature(
+                  o.oauth_secret,
+                  request_token_secret,
+                  ohauth_1.baseString('POST', url, params));
 
-          function togglePane() {
-              if (event) event.preventDefault();
-              tooltipBehavior.hide(button);
-              setVisible(!button.classed('active'));
+              // ## Getting an access token
+              // The final token required for authentication. At this point
+              // we have a `request token secret`
+              ohauth_1.xhr('POST', url, params, null, {}, accessTokenDone);
+              o.loading();
           }
 
-
-          function setVisible(show) {
-              if (show !== shown) {
-                  button.classed('active', show);
-                  shown = show;
-
-                  if (show) {
-                      uiBackground.hidePane();
-                      uiMapData.hidePane();
-
-                      pane.style('display', 'block')
-                          .style('right', '-500px')
-                          .transition()
-                          .duration(200)
-                          .style('right', '0px');
-
-                  } else {
-                      pane.style('right', '0px')
-                          .transition()
-                          .duration(200)
-                          .style('right', '-500px')
-                          .on('end', function() {
-                              select(this).style('display', 'none');
-                          });
-                  }
-              }
+          function accessTokenDone(err, xhr) {
+              o.done();
+              if (err) return callback(err);
+              var access_token = ohauth_1.stringQs(xhr.response);
+              token('oauth_token', access_token.oauth_token);
+              token('oauth_token_secret', access_token.oauth_token_secret);
+              callback(null, oauth);
           }
 
+          get_access_token(oauth_token);
+      };
 
-          function clickHelp(d, i) {
-              var rtl = (textDirection === 'rtl');
-              content.property('scrollTop', 0);
-              doctitle.html(d.title);
-
-              body.html(d.html);
-              body.selectAll('a')
-                  .attr('target', '_blank');
-              menuItems.classed('selected', function(m) {
-                  return m.title === d.title;
-              });
-
-              nav.html('');
-              if (rtl) {
-                  nav.call(drawNext).call(drawPrevious);
+      // # xhr
+      //
+      // A single XMLHttpRequest wrapper that does authenticated calls if the
+      // user has logged in.
+      oauth.xhr = function(options, callback) {
+          if (!oauth.authenticated()) {
+              if (o.auto) {
+                  return oauth.authenticate(run);
               } else {
-                  nav.call(drawPrevious).call(drawNext);
-              }
-
-
-              function drawNext(selection$$1) {
-                  if (i < docs.length - 1) {
-                      var nextLink = selection$$1
-                          .append('a')
-                          .attr('class', 'next')
-                          .on('click', function() {
-                              clickHelp(docs[i + 1], i + 1);
-                          });
-
-                      nextLink
-                          .append('span')
-                          .text(docs[i + 1].title)
-                          .call(svgIcon((rtl ? '#iD-icon-backward' : '#iD-icon-forward'), 'inline'));
-                  }
+                  callback('not authenticated', null);
+                  return;
               }
+          } else {
+              return run();
+          }
 
+          function run() {
+              var params = timenonce(getAuth(o)),
+                  oauth_token_secret = token('oauth_token_secret'),
+                  url = (options.prefix !== false) ? o.url + options.path : options.path,
+                  url_parts = url.replace(/#.*$/, '').split('?', 2),
+                  base_url = url_parts[0],
+                  query = (url_parts.length === 2) ? url_parts[1] : '';
 
-              function drawPrevious(selection$$1) {
-                  if (i > 0) {
-                      var prevLink = selection$$1
-                          .append('a')
-                          .attr('class', 'previous')
-                          .on('click', function() {
-                              clickHelp(docs[i - 1], i - 1);
-                          });
-
-                      prevLink
-                          .call(svgIcon((rtl ? '#iD-icon-forward' : '#iD-icon-backward'), 'inline'))
-                          .append('span')
-                          .text(docs[i - 1].title);
-                  }
+              // https://tools.ietf.org/html/rfc5849#section-3.4.1.3.1
+              if ((!options.options || !options.options.header ||
+                  options.options.header['Content-Type'] === 'application/x-www-form-urlencoded') &&
+                  options.content) {
+                  params = immutable(params, ohauth_1.stringQs(options.content));
               }
-          }
 
+              params.oauth_token = token('oauth_token');
+              params.oauth_signature = ohauth_1.signature(
+                  o.oauth_secret,
+                  oauth_token_secret,
+                  ohauth_1.baseString(options.method, base_url, immutable(params, ohauth_1.stringQs(query)))
+              );
 
-          function clickWalkthrough() {
-              if (context.inIntro()) return;
-              context.container().call(uiIntro(context));
-              setVisible(false);
+              return ohauth_1.xhr(options.method, url, params, options.content, options.options, done);
           }
 
-
-          function clickShortcuts() {
-              context.container().call(uiShortcuts(context), true);
+          function done(err, xhr) {
+              if (err) return callback(err);
+              else if (xhr.responseXML) return callback(err, xhr.responseXML);
+              else return callback(err, xhr.response);
           }
+      };
 
+      // pre-authorize this object, if we can just get a token and token_secret
+      // from the start
+      oauth.preauth = function(c) {
+          if (!c) return;
+          if (c.oauth_token) token('oauth_token', c.oauth_token);
+          if (c.oauth_token_secret) token('oauth_token_secret', c.oauth_token_secret);
+          return oauth;
+      };
 
-          var pane = selection$$1.append('div')
-              .attr('class', 'help-wrap map-pane fillL hide');
-
-          var tooltipBehavior = tooltip()
-              .placement((textDirection === 'rtl') ? 'right' : 'left')
-              .html(true)
-              .title(uiTooltipHtml(t('help.title'), key));
-
-          var button = selection$$1.append('button')
-              .attr('tabindex', -1)
-              .on('click', togglePane)
-              .call(svgIcon('#iD-icon-help', 'light'))
-              .call(tooltipBehavior);
-
-          var shown = false;
-
+      oauth.options = function(_) {
+          if (!arguments.length) return o;
 
-          var heading = pane
-              .append('div')
-              .attr('class', 'pane-heading');
+          o = _;
+          o.url = o.url || 'https://www.openstreetmap.org';
+          o.landing = o.landing || 'land.html';
+          o.singlepage = o.singlepage || false;
 
-          var doctitle = heading
-              .append('h2')
-              .text(t('help.title'));
+          // Optional loading and loading-done functions for nice UI feedback.
+          // by default, no-ops
+          o.loading = o.loading || function() {};
+          o.done = o.done || function() {};
 
-          heading
-              .append('button')
-              .on('click', function() { uiHelp.hidePane(); })
-              .call(svgIcon('#iD-icon-close'));
+          return oauth.preauth(o);
+      };
 
+      // 'stamp' an authentication object from `getAuth()`
+      // with a [nonce](http://en.wikipedia.org/wiki/Cryptographic_nonce)
+      // and timestamp
+      function timenonce(o) {
+          o.oauth_timestamp = ohauth_1.timestamp();
+          o.oauth_nonce = ohauth_1.nonce();
+          return o;
+      }
 
-          var content = pane
-              .append('div')
-              .attr('class', 'pane-content');
+      // get/set tokens. These are prefixed with the base URL so that `osm-auth`
+      // can be used with multiple APIs and the keys in `localStorage`
+      // will not clash
+      var token;
 
-          var toc = content
-              .append('ul')
-              .attr('class', 'toc');
+      if (store_legacy.enabled) {
+          token = function (x, y) {
+              if (arguments.length === 1) return store_legacy.get(o.url + x);
+              else if (arguments.length === 2) return store_legacy.set(o.url + x, y);
+          };
+      } else {
+          var storage = {};
+          token = function (x, y) {
+              if (arguments.length === 1) return storage[o.url + x];
+              else if (arguments.length === 2) return storage[o.url + x] = y;
+          };
+      }
 
-          var menuItems = toc.selectAll('li')
-              .data(docs)
-              .enter()
-              .append('li')
-              .append('a')
-              .html(function(d) { return d.title; })
-              .on('click', clickHelp);
+      // Get an authentication object. If you just add and remove properties
+      // from a single object, you'll need to use `delete` to make sure that
+      // it doesn't contain undesired properties for authentication
+      function getAuth(o) {
+          return {
+              oauth_consumer_key: o.oauth_consumer_key,
+              oauth_signature_method: 'HMAC-SHA1'
+          };
+      }
 
-          var shortcuts = toc
-              .append('li')
-              .attr('class', 'shortcuts')
-              .call(tooltip()
-                  .html(true)
-                  .title(uiTooltipHtml(t('shortcuts.tooltip'), '?'))
-                  .placement('top')
-              )
-              .append('a')
-              .on('click', clickShortcuts);
+      // potentially pre-authorize
+      oauth.options(o);
 
-          shortcuts
-              .append('div')
-              .text(t('shortcuts.title'));
+      return oauth;
+  };
 
-          var walkthrough = toc
-              .append('li')
-              .attr('class', 'walkthrough')
-              .append('a')
-              .on('click', clickWalkthrough);
+  var JXON = new (function () {
+    var
+      sValueProp = 'keyValue', sAttributesProp = 'keyAttributes', sAttrPref = '@', /* you can customize these values */
+      aCache = [], rIsNull = /^\s*$/, rIsBool = /^(?:true|false)$/i;
 
-          walkthrough
-              .append('svg')
-              .attr('class', 'logo logo-walkthrough')
-              .append('use')
-              .attr('xlink:href', '#iD-logo-walkthrough');
+    function parseText (sValue) {
+      if (rIsNull.test(sValue)) { return null; }
+      if (rIsBool.test(sValue)) { return sValue.toLowerCase() === 'true'; }
+      if (isFinite(sValue)) { return parseFloat(sValue); }
+      if (isFinite(Date.parse(sValue))) { return new Date(sValue); }
+      return sValue;
+    }
 
-          walkthrough
-              .append('div')
-              .text(t('splash.walkthrough'));
+    function EmptyTree () { }
+    EmptyTree.prototype.toString = function () { return 'null'; };
+    EmptyTree.prototype.valueOf = function () { return null; };
 
+    function objectify (vValue) {
+      return vValue === null ? new EmptyTree() : vValue instanceof Object ? vValue : new vValue.constructor(vValue);
+    }
 
-          var helpContent = content
-              .append('div')
-              .attr('class', 'left-content');
+    function createObjTree (oParentNode, nVerb, bFreeze, bNesteAttr) {
+      var
+        nLevelStart = aCache.length, bChildren = oParentNode.hasChildNodes(),
+        bAttributes = oParentNode.hasAttributes(), bHighVerb = Boolean(nVerb & 2);
 
-          var body = helpContent
-              .append('div')
-              .attr('class', 'body');
+      var
+        sProp, vContent, nLength = 0, sCollectedTxt = '',
+        vResult = bHighVerb ? {} : /* put here the default value for empty nodes: */ true;
 
-          var nav = helpContent
-              .append('div')
-              .attr('class', 'nav');
+      if (bChildren) {
+        for (var oNode, nItem = 0; nItem < oParentNode.childNodes.length; nItem++) {
+          oNode = oParentNode.childNodes.item(nItem);
+          if (oNode.nodeType === 4) { sCollectedTxt += oNode.nodeValue; } /* nodeType is 'CDATASection' (4) */
+          else if (oNode.nodeType === 3) { sCollectedTxt += oNode.nodeValue.trim(); } /* nodeType is 'Text' (3) */
+          else if (oNode.nodeType === 1 && !oNode.prefix) { aCache.push(oNode); } /* nodeType is 'Element' (1) */
+        }
+      }
 
-          clickHelp(docs[0], 0);
+      var nLevelEnd = aCache.length, vBuiltVal = parseText(sCollectedTxt);
 
-          context.keybinding()
-              .on(key, togglePane);
+      if (!bHighVerb && (bChildren || bAttributes)) { vResult = nVerb === 0 ? objectify(vBuiltVal) : {}; }
 
-          uiHelp.hidePane = hidePane;
-          uiHelp.togglePane = togglePane;
-          uiHelp.setVisible = setVisible;
+      for (var nElId = nLevelStart; nElId < nLevelEnd; nElId++) {
+        sProp = aCache[nElId].nodeName.toLowerCase();
+        vContent = createObjTree(aCache[nElId], nVerb, bFreeze, bNesteAttr);
+        if (vResult.hasOwnProperty(sProp)) {
+          if (vResult[sProp].constructor !== Array) { vResult[sProp] = [vResult[sProp]]; }
+          vResult[sProp].push(vContent);
+        } else {
+          vResult[sProp] = vContent;
+          nLength++;
+        }
       }
 
-      return help;
-  }
+      if (bAttributes) {
+        var
+          nAttrLen = oParentNode.attributes.length,
+          sAPrefix = bNesteAttr ? '' : sAttrPref, oAttrParent = bNesteAttr ? {} : vResult;
 
-  function localeDateString(s) {
-      if (!s) return null;
-      var detected = utilDetect();
-      var options = { day: 'numeric', month: 'short', year: 'numeric' };
-      var d = new Date(s);
-      if (isNaN(d.getTime())) return null;
-      return d.toLocaleDateString(detected.locale, options);
-  }
+        for (var oAttrib, nAttrib = 0; nAttrib < nAttrLen; nLength++, nAttrib++) {
+          oAttrib = oParentNode.attributes.item(nAttrib);
+          oAttrParent[sAPrefix + oAttrib.name.toLowerCase()] = parseText(oAttrib.value.trim());
+        }
 
-  function vintageRange(vintage) {
-      var s;
-      if (vintage.start || vintage.end) {
-          s = (vintage.start || '?');
-          if (vintage.start !== vintage.end) {
-              s += ' - ' + (vintage.end || '?');
-          }
+        if (bNesteAttr) {
+          if (bFreeze) { Object.freeze(oAttrParent); }
+          vResult[sAttributesProp] = oAttrParent;
+          nLength -= nAttrLen - 1;
+        }
       }
-      return s;
-  }
-
-
-  function rendererBackgroundSource(data) {
-      var source = clone(data);
-      var offset = [0, 0];
-      var name = source.name;
-      var description = source.description;
-      var best = !!source.best;
-      var template = source.template;
 
-      source.tileSize = data.tileSize || 256;
-      source.zoomExtent = data.zoomExtent || [0, 22];
-      source.overzoom = data.overzoom !== false;
+      if (nVerb === 3 || (nVerb === 2 || nVerb === 1 && nLength > 0) && sCollectedTxt) {
+        vResult[sValueProp] = vBuiltVal;
+      } else if (!bHighVerb && nLength === 0 && sCollectedTxt) {
+        vResult = vBuiltVal;
+      }
 
-      source.offset = function(_) {
-          if (!arguments.length) return offset;
-          offset = _;
-          return source;
-      };
+      if (bFreeze && (bHighVerb || nLength > 0)) { Object.freeze(vResult); }
 
+      aCache.length = nLevelStart;
 
-      source.nudge = function(_, zoomlevel) {
-          offset[0] += _[0] / Math.pow(2, zoomlevel);
-          offset[1] += _[1] / Math.pow(2, zoomlevel);
-          return source;
-      };
+      return vResult;
+    }
 
+    function loadObjTree (oXMLDoc, oParentEl, oParentObj) {
+      var vValue, oChild;
 
-      source.name = function() {
-          var id_safe = source.id.replace(/\./g, '<TX_DOT>');
-          return t('imagery.' + id_safe + '.name', { default: name });
-      };
+      if (oParentObj instanceof String || oParentObj instanceof Number || oParentObj instanceof Boolean) {
+        oParentEl.appendChild(oXMLDoc.createTextNode(oParentObj.toString())); /* verbosity level is 0 */
+      } else if (oParentObj.constructor === Date) {
+        oParentEl.appendChild(oXMLDoc.createTextNode(oParentObj.toGMTString()));    
+      }
 
+      for (var sName in oParentObj) {
+        vValue = oParentObj[sName];
+        if (isFinite(sName) || vValue instanceof Function) { continue; } /* verbosity level is 0 */
+        if (sName === sValueProp) {
+          if (vValue !== null && vValue !== true) { oParentEl.appendChild(oXMLDoc.createTextNode(vValue.constructor === Date ? vValue.toGMTString() : String(vValue))); }
+        } else if (sName === sAttributesProp) { /* verbosity level is 3 */
+          for (var sAttrib in vValue) { oParentEl.setAttribute(sAttrib, vValue[sAttrib]); }
+        } else if (sName.charAt(0) === sAttrPref) {
+          oParentEl.setAttribute(sName.slice(1), vValue);
+        } else if (vValue.constructor === Array) {
+          for (var nItem = 0; nItem < vValue.length; nItem++) {
+            oChild = oXMLDoc.createElement(sName);
+            loadObjTree(oXMLDoc, oChild, vValue[nItem]);
+            oParentEl.appendChild(oChild);
+          }
+        } else {
+          oChild = oXMLDoc.createElement(sName);
+          if (vValue instanceof Object) {
+            loadObjTree(oXMLDoc, oChild, vValue);
+          } else if (vValue !== null && vValue !== true) {
+            oChild.appendChild(oXMLDoc.createTextNode(vValue.toString()));
+          }
+          oParentEl.appendChild(oChild);
+       }
+     }
+    }
 
-      source.description = function() {
-          var id_safe = source.id.replace(/\./g, '<TX_DOT>');
-          return t('imagery.' + id_safe + '.description', { default: description });
-      };
+    this.build = function (oXMLParent, nVerbosity /* optional */, bFreeze /* optional */, bNesteAttributes /* optional */) {
+      var _nVerb = arguments.length > 1 && typeof nVerbosity === 'number' ? nVerbosity & 3 : /* put here the default verbosity level: */ 1;
+      return createObjTree(oXMLParent, _nVerb, bFreeze || false, arguments.length > 3 ? bNesteAttributes : _nVerb === 3);    
+    };
 
+    this.unbuild = function (oObjTree) {    
+      var oNewDoc = document.implementation.createDocument('', '', null);
+      loadObjTree(oNewDoc, oNewDoc, oObjTree);
+      return oNewDoc;
+    };
 
-      source.best = function() {
-          return best;
-      };
+    this.stringify = function (oObjTree) {
+      return (new XMLSerializer()).serializeToString(JXON.unbuild(oObjTree));
+    };
+  })();
 
+  // var myObject = JXON.build(doc);
+  // we got our javascript object! try: alert(JSON.stringify(myObject));
 
-      source.area = function() {
-          if (!data.polygon) return Number.MAX_VALUE;  // worldwide
-          var area = d3_geoArea({ type: 'MultiPolygon', coordinates: [ data.polygon ] });
-          return isNaN(area) ? 0 : area;
-      };
+  // var newDoc = JXON.unbuild(myObject);
+  // we got our Document instance! try: alert((new XMLSerializer()).serializeToString(newDoc));
 
+  var tiler$4 = utilTiler();
+  var dispatch$5 = dispatch('authLoading', 'authDone', 'change', 'loading', 'loaded', 'loadedNotes');
+  var urlroot = 'https://www.openstreetmap.org';
+  var oauth = osmAuth({
+      url: urlroot,
+      oauth_consumer_key: '5A043yRSEugj4DJ5TljuapfnrflWDte8jTOcWLlT',
+      oauth_secret: 'aB3jKq1TRsCOUrfOIZ6oQMEDmv2ptV76PA54NGLL',
+      loading: authLoading,
+      done: authDone
+  });
 
-      source.imageryUsed = function() {
-          return name || source.id;
-      };
+  var _blacklists = ['.*\.google(apis)?\..*/(vt|kh)[\?/].*([xyz]=.*){3}.*'];
+  var _tileCache = { loaded: {}, inflight: {}, seen: {} };
+  var _noteCache = { loaded: {}, inflight: {}, inflightPost: {}, note: {}, closed: {}, rtree: rbush_1() };
+  var _userCache = { toLoad: {}, user: {} };
+  var _changeset = {};
 
+  var _connectionID = 1;
+  var _tileZoom = 16;
+  var _noteZoom = 12;
+  var _rateLimitError;
+  var _userChangesets;
+  var _userDetails;
+  var _off;
 
-      source.template = function(_) {
-          if (!arguments.length) return template;
-          if (source.id === 'custom') template = _;
-          return source;
-      };
 
+  function authLoading() {
+      dispatch$5.call('authLoading');
+  }
 
-      source.url = function(coord) {
-          if (this.type === 'wms') {
-              var tileToProjectedCoords = (function(x, y, z) {
-                  //polyfill for IE11, PhantomJS
-                  var sinh = Math.sinh || function(x) {
-                      var y = Math.exp(x);
-                      return (y - 1 / y) / 2;
-                  };
 
-                  var zoomSize = Math.pow(2, z);
-                  var lon = x / zoomSize * Math.PI * 2 - Math.PI;
-                  var lat = Math.atan(sinh(Math.PI * (1 - 2 * y / zoomSize)));
+  function authDone() {
+      dispatch$5.call('authDone');
+  }
 
-                  switch (this.projection) {
-                      case 'EPSG:4326':
-                          return {
-                              x: lon * 180 / Math.PI,
-                              y: lat * 180 / Math.PI
-                          };
-                      default: // EPSG:3857 and synonyms
-                          var mercCoords = mercatorRaw(lon, lat);
-                          return {
-                              x: 20037508.34 / Math.PI * mercCoords[0],
-                              y: 20037508.34 / Math.PI * mercCoords[1]
-                          };
-                  }
-              }).bind(this);
 
-              var tileSize = this.tileSize;
-              var projection$$1 = this.projection;
-              var minXmaxY = tileToProjectedCoords(coord[0], coord[1], coord[2]);
-              var maxXminY = tileToProjectedCoords(coord[0]+1, coord[1]+1, coord[2]);
-              return template.replace(/\{(\w+)\}/g, function (token, key) {
-                switch (key) {
-                  case 'width':
-                  case 'height':
-                    return tileSize;
-                  case 'proj':
-                    return projection$$1;
-                  case 'wkid':
-                    return projection$$1.replace(/^EPSG:/, '');
-                  case 'bbox':
-                    return minXmaxY.x + ',' + maxXminY.y + ',' + maxXminY.x + ',' + minXmaxY.y;
-                  case 'w':
-                    return minXmaxY.x;
-                  case 's':
-                    return maxXminY.y;
-                  case 'n':
-                    return maxXminY.x;
-                  case 'e':
-                    return minXmaxY.y;
-                  default:
-                    return token;
-                }
-              });
-          }
-          return template
-              .replace('{x}', coord[0])
-              .replace('{y}', coord[1])
-              // TMS-flipped y coordinate
-              .replace(/\{[t-]y\}/, Math.pow(2, coord[2]) - coord[1] - 1)
-              .replace(/\{z(oom)?\}/, coord[2])
-              .replace(/\{switch:([^}]+)\}/, function(s, r) {
-                  var subdomains = r.split(',');
-                  return subdomains[(coord[0] + coord[1]) % subdomains.length];
-              })
-              .replace('{u}', function() {
-                  var u = '';
-                  for (var zoom = coord[2]; zoom > 0; zoom--) {
-                      var b = 0;
-                      var mask = 1 << (zoom - 1);
-                      if ((coord[0] & mask) !== 0) b++;
-                      if ((coord[1] & mask) !== 0) b += 2;
-                      u += b.toString();
-                  }
-                  return u;
-              });
-      };
+  function abortRequest$4(i) {
+      if (i) {
+          i.abort();
+      }
+  }
 
 
-      source.validZoom = function(z) {
-          return source.zoomExtent[0] <= z &&
-              (source.overzoom || source.zoomExtent[1] > z);
-      };
+  function abortUnwantedRequests$2(cache, tiles) {
+      forEach(cache.inflight, function(v, k) {
+          var wanted = find$1(tiles, function(tile) { return k === tile.id; });
+          if (!wanted) {
+              abortRequest$4(v);
+              delete cache.inflight[k];
+          }
+      });
+  }
 
 
-      source.isLocatorOverlay = function() {
-          return source.id === 'mapbox_locator_overlay';
-      };
+  function getLoc(attrs) {
+      var lon = attrs.lon && attrs.lon.value;
+      var lat = attrs.lat && attrs.lat.value;
+      return [parseFloat(lon), parseFloat(lat)];
+  }
 
 
-      /* hides a source from the list, but leaves it available for use */
-      source.isHidden = function() {
-          return source.id === 'DigitalGlobe-Premium-vintage' ||
-              source.id === 'DigitalGlobe-Standard-vintage';
-      };
+  function getNodes(obj) {
+      var elems = obj.getElementsByTagName('nd');
+      var nodes = new Array(elems.length);
+      for (var i = 0, l = elems.length; i < l; i++) {
+          nodes[i] = 'n' + elems[i].attributes.ref.value;
+      }
+      return nodes;
+  }
 
 
-      source.copyrightNotices = function() {};
+  function getTags(obj) {
+      var elems = obj.getElementsByTagName('tag');
+      var tags = {};
+      for (var i = 0, l = elems.length; i < l; i++) {
+          var attrs = elems[i].attributes;
+          tags[attrs.k.value] = attrs.v.value;
+      }
 
+      return tags;
+  }
 
-      source.getMetadata = function(center, tileCoord, callback) {
-          var vintage = {
-              start: localeDateString(source.startDate),
-              end: localeDateString(source.endDate)
-          };
-          vintage.range = vintageRange(vintage);
 
-          var metadata = { vintage: vintage };
-          callback(null, metadata);
-      };
+  function getMembers(obj) {
+      var elems = obj.getElementsByTagName('member');
+      var members = new Array(elems.length);
+      for (var i = 0, l = elems.length; i < l; i++) {
+          var attrs = elems[i].attributes;
+          members[i] = {
+              id: attrs.type.value[0] + attrs.ref.value,
+              type: attrs.type.value,
+              role: attrs.role.value
+          };
+      }
+      return members;
+  }
 
 
-      return source;
+  function getVisible(attrs) {
+      return (!attrs.visible || attrs.visible.value !== 'false');
   }
 
 
-  rendererBackgroundSource.Bing = function(data, dispatch) {
-      // http://msdn.microsoft.com/en-us/library/ff701716.aspx
-      // http://msdn.microsoft.com/en-us/library/ff701701.aspx
+  function parseComments(comments) {
+      var parsedComments = [];
 
-      data.template = 'https://ecn.t{switch:0,1,2,3}.tiles.virtualearth.net/tiles/a{u}.jpeg?g=587&mkt=en-gb&n=z';
+      // for each comment
+      for (var i = 0; i < comments.length; i++) {
+          var comment = comments[i];
+          if (comment.nodeName === 'comment') {
+              var childNodes = comment.childNodes;
+              var parsedComment = {};
 
-      var bing = rendererBackgroundSource(data);
-      var key = 'Arzdiw4nlOJzRwOz__qailc8NiR31Tt51dN2D7cm57NrnceZnCpgOkmJhNpGoppU'; // Same as P2 and JOSM
-      var url = 'https://dev.virtualearth.net/REST/v1/Imagery/Metadata/Aerial?include=ImageryProviders&key=' +
-              key;
-      var cache = {};
-      var inflight = {};
-      var providers = [];
+              for (var j = 0; j < childNodes.length; j++) {
+                  var node = childNodes[j];
+                  var nodeName = node.nodeName;
+                  if (nodeName === '#text') continue;
+                  parsedComment[nodeName] = node.textContent;
 
-      d3_json(url, function(err, json$$1) {
-          providers = json$$1.resourceSets[0].resources[0].imageryProviders.map(function(provider) {
-              return {
-                  attribution: provider.attribution,
-                  areas: provider.coverageAreas.map(function(area) {
-                      return {
-                          zoom: [area.zoomMin, area.zoomMax],
-                          extent: geoExtent$$1([area.bbox[1], area.bbox[0]], [area.bbox[3], area.bbox[2]])
-                      };
-                  })
-              };
-          });
-          dispatch.call('change');
-      });
+                  if (nodeName === 'uid') {
+                      var uid = node.textContent;
+                      if (uid && !_userCache.user[uid]) {
+                          _userCache.toLoad[uid] = true;
+                      }
+                  }
+              }
 
+              if (parsedComment) {
+                  parsedComments.push(parsedComment);
+              }
+          }
+      }
+      return parsedComments;
+  }
 
-      bing.copyrightNotices = function(zoom, extent) {
-          zoom = Math.min(zoom, 21);
-          return providers.filter(function(provider) {
-              return some(provider.areas, function(area) {
-                  return extent.intersects(area.extent) &&
-                      area.zoom[0] <= zoom &&
-                      area.zoom[1] >= zoom;
-              });
-          }).map(function(provider) {
-              return provider.attribution;
-          }).join(', ');
+
+  function encodeNoteRtree(note) {
+      return {
+          minX: note.loc[0],
+          minY: note.loc[1],
+          maxX: note.loc[0],
+          maxY: note.loc[1],
+          data: note
       };
+  }
 
 
-      bing.getMetadata = function(center, tileCoord, callback) {
-          var tileId = tileCoord.slice(0, 3).join('/');
-          var zoom = Math.min(tileCoord[2], 21);
-          var centerPoint = center[1] + ',' + center[0];  // lat,lng
-          var url = 'https://dev.virtualearth.net/REST/v1/Imagery/Metadata/Aerial/' + centerPoint +
-                  '?zl=' + zoom + '&key=' + key;
+  var parsers = {
+      node: function nodeData(obj, uid) {
+          var attrs = obj.attributes;
+          return new osmNode({
+              id: uid,
+              visible: getVisible(attrs),
+              version: attrs.version.value,
+              changeset: attrs.changeset && attrs.changeset.value,
+              timestamp: attrs.timestamp && attrs.timestamp.value,
+              user: attrs.user && attrs.user.value,
+              uid: attrs.uid && attrs.uid.value,
+              loc: getLoc(attrs),
+              tags: getTags(obj)
+          });
+      },
 
-          if (inflight[tileId]) return;
+      way: function wayData(obj, uid) {
+          var attrs = obj.attributes;
+          return new osmWay({
+              id: uid,
+              visible: getVisible(attrs),
+              version: attrs.version.value,
+              changeset: attrs.changeset && attrs.changeset.value,
+              timestamp: attrs.timestamp && attrs.timestamp.value,
+              user: attrs.user && attrs.user.value,
+              uid: attrs.uid && attrs.uid.value,
+              tags: getTags(obj),
+              nodes: getNodes(obj),
+          });
+      },
 
-          if (!cache[tileId]) {
-              cache[tileId] = {};
-          }
-          if (cache[tileId] && cache[tileId].metadata) {
-              return callback(null, cache[tileId].metadata);
-          }
+      relation: function relationData(obj, uid) {
+          var attrs = obj.attributes;
+          return new osmRelation({
+              id: uid,
+              visible: getVisible(attrs),
+              version: attrs.version.value,
+              changeset: attrs.changeset && attrs.changeset.value,
+              timestamp: attrs.timestamp && attrs.timestamp.value,
+              user: attrs.user && attrs.user.value,
+              uid: attrs.uid && attrs.uid.value,
+              tags: getTags(obj),
+              members: getMembers(obj)
+          });
+      },
 
-          inflight[tileId] = true;
-          d3_json(url, function(error, result) {
-              delete inflight[tileId];
+      note: function parseNote(obj, uid) {
+          var attrs = obj.attributes;
+          var childNodes = obj.childNodes;
+          var props = {};
 
-              var err;
-              if (error) {
-                  err = error;
-              } else if (!result && 'Unknown Error') {
-                  err = result.errorDetails;
+          props.id = uid;
+          props.loc = getLoc(attrs);
+
+          // if notes are coincident, move them apart slightly
+          var coincident = false;
+          var epsilon = 0.00001;
+          do {
+              if (coincident) {
+                  props.loc = geoVecAdd(props.loc, [epsilon, epsilon]);
               }
-              if (err) {
-                  return callback(err);
-              } else {
-                  var vintage = {
-                      start: localeDateString(result.resourceSets[0].resources[0].vintageStart),
-                      end: localeDateString(result.resourceSets[0].resources[0].vintageEnd)
-                  };
-                  vintage.range = vintageRange(vintage);
+              var bbox = geoExtent(props.loc).bbox();
+              coincident = _noteCache.rtree.search(bbox).length;
+          } while (coincident);
 
-                  var metadata = { vintage: vintage };
-                  cache[tileId].metadata = metadata;
-                  return callback(null, metadata);
+          // parse note contents
+          for (var i = 0; i < childNodes.length; i++) {
+              var node = childNodes[i];
+              var nodeName = node.nodeName;
+              if (nodeName === '#text') continue;
+
+              // if the element is comments, parse the comments
+              if (nodeName === 'comments') {
+                  props[nodeName] = parseComments(node.childNodes);
+              } else {
+                  props[nodeName] = node.textContent;
               }
-          });
-      };
+          }
+
+          var note = new osmNote(props);
+          var item = encodeNoteRtree(note);
+          _noteCache.note[note.id] = note;
+          _noteCache.rtree.insert(item);
 
+          return note;
+      },
 
-      bing.terms_url = 'https://blog.openstreetmap.org/2010/11/30/microsoft-imagery-details';
+      user: function parseUser(obj, uid) {
+          var attrs = obj.attributes;
+          var user = {
+              id: uid,
+              display_name: attrs.display_name && attrs.display_name.value,
+              account_created: attrs.account_created && attrs.account_created.value,
+              changesets_count: 0
+          };
+
+          var img = obj.getElementsByTagName('img');
+          if (img && img[0] && img[0].getAttribute('href')) {
+              user.image_url = img[0].getAttribute('href');
+          }
 
+          var changesets = obj.getElementsByTagName('changesets');
+          if (changesets && changesets[0] && changesets[0].getAttribute('count')) {
+              user.changesets_count = changesets[0].getAttribute('count');
+          }
 
-      return bing;
+          _userCache.user[uid] = user;
+          delete _userCache.toLoad[uid];
+          return user;
+      }
   };
 
 
+  function parseXML(xml, callback, options) {
+      options = assignIn({ skipSeen: true }, options);
+      if (!xml || !xml.childNodes) {
+          return callback({ message: 'No XML', status: -1 });
+      }
 
-  rendererBackgroundSource.Esri = function(data) {
-      // in addition to using the tilemap at zoom level 20, overzoom real tiles - #4327 (deprecated technique, but it works)
-      if (data.template.match(/blankTile/) === null) {
-          data.template = data.template + '?blankTile=false';
+      var root = xml.childNodes[0];
+      var children = root.childNodes;
+      utilIdleWorker(children, parseChild, done);
+
+
+      function done(results) {
+          callback(null, results);
       }
 
-      var esri = rendererBackgroundSource(data);
-      var cache = {};
-      var inflight = {};
-      var _prevCenter;
+      function parseChild(child) {
+          var parser = parsers[child.nodeName];
+          if (!parser) return null;
 
-      // use a tilemap service to set maximum zoom for esri tiles dynamically
-      // https://developers.arcgis.com/documentation/tiled-elevation-service/
-      esri.fetchTilemap = function(center) {
-          // skip if we have already fetched a tilemap within 5km
-          if (_prevCenter && geoSphericalDistance(center, _prevCenter) < 5000) return;
-          _prevCenter = center;
+          var uid;
+          if (child.nodeName === 'user') {
+              uid = child.attributes.id.value;
+              if (options.skipSeen && _userCache.user[uid]) {
+                  delete _userCache.toLoad[uid];
+                  return null;
+              }
 
-          // tiles are available globally to zoom level 19, afterward they may or may not be present
-          var z = 20;
+          } else if (child.nodeName === 'note') {
+              uid = child.getElementsByTagName('id')[0].textContent;
 
-          // first generate a random url using the template
-          var dummyUrl = esri.url([1,2,3]);
+          } else {
+              uid = osmEntity.id.fromOSM(child.nodeName, child.attributes.id.value);
+              if (options.skipSeen) {
+                  if (_tileCache.seen[uid]) return null;  // avoid reparsing a "seen" entity
+                  _tileCache.seen[uid] = true;
+              }
+          }
 
-          // calculate url z/y/x from the lat/long of the center of the map
-          var x = (Math.floor((center[0] + 180) / 360 * Math.pow(2, z)));
-          var y = (Math.floor((1 - Math.log(Math.tan(center[1] * Math.PI / 180) + 1 / Math.cos(center[1] * Math.PI / 180)) / Math.PI) / 2 * Math.pow(2, z)));
+          return parser(child, uid);
+      }
+  }
 
-          // fetch an 8x8 grid to leverage cache
-          var tilemapUrl = dummyUrl.replace(/tile\/[0-9]+\/[0-9]+\/[0-9]+\?blankTile=false/, 'tilemap') + '/' + z + '/' + y + '/' + x + '/8/8';
 
-          // make the request and introspect the response from the tilemap server
-          d3_json(tilemapUrl, function (err, tilemap) {
-              if (err || !tilemap) return;
+  // replace or remove note from rtree
+  function updateRtree$2(item, replace) {
+      _noteCache.rtree.remove(item, function isEql(a, b) { return a.data.id === b.data.id; });
 
-              var hasTiles = true;
-              for (var i = 0; i < tilemap.data.length; i++) {
-                  // 0 means an individual tile in the grid doesn't exist
-                  if (!tilemap.data[i]) {
-                      hasTiles = false;
-                      break;
-                  }
+      if (replace) {
+          _noteCache.rtree.insert(item);
+      }
+  }
+
+
+  function wrapcb(thisArg, callback, cid) {
+      return function(err, result) {
+          if (err) {
+              // 400 Bad Request, 401 Unauthorized, 403 Forbidden..
+              if (err.status === 400 || err.status === 401 || err.status === 403) {
+                  thisArg.logout();
               }
+              return callback.call(thisArg, err);
 
-              // if any tiles are missing at level 20 we restrict maxZoom to 19
-              esri.zoomExtent[1] = (hasTiles ? 22 : 19);
-          });
+          } else if (thisArg.getConnectionId() !== cid) {
+              return callback.call(thisArg, { message: 'Connection Switched', status: -1 });
+
+          } else {
+              return callback.call(thisArg, err, result);
+          }
       };
+  }
 
-      esri.getMetadata = function(center, tileCoord, callback) {
-          var tileId = tileCoord.slice(0, 3).join('/');
-          var zoom = Math.min(tileCoord[2], esri.zoomExtent[1]);
-          var centerPoint = center[0] + ',' + center[1];  // long, lat (as it should be)
-          var unknown = t('info_panels.background.unknown');
-          var metadataLayer;
-          var vintage = {};
-          var metadata = {};
 
-          if (inflight[tileId]) return;
+  var serviceOsm = {
 
-          switch (true) {
-              case (zoom >= 20 && esri.id === 'EsriWorldImageryClarity'):
-                  metadataLayer = 4;
-                  break;
-              case zoom >= 19:
-                  metadataLayer = 3;
-                  break;
-              case zoom >= 17:
-                  metadataLayer = 2;
-                  break;
-              case zoom >= 13:
-                  metadataLayer = 0;
-                  break;
-              default:
-                  metadataLayer = 99;
-          }
+      init: function() {
+          utilRebind(this, dispatch$5, 'on');
+      },
 
-          var url;
-          // build up query using the layer appropriate to the current zoom
-          if (esri.id === 'EsriWorldImagery') {
-              url = 'https://services.arcgisonline.com/arcgis/rest/services/World_Imagery/MapServer/';
-          } else if (esri.id === 'EsriWorldImageryClarity') {
-              url = 'https://serviceslab.arcgisonline.com/arcgis/rest/services/Clarity_World_Imagery/MapServer/';
-          }
 
-          url += metadataLayer + '/query?returnGeometry=false&geometry=' + centerPoint + '&inSR=4326&geometryType=esriGeometryPoint&outFields=*&f=json';
+      reset: function() {
+          _connectionID++;
+          _userChangesets = undefined;
+          _userDetails = undefined;
+          _rateLimitError = undefined;
 
-          if (!cache[tileId]) {
-              cache[tileId] = {};
-          }
-          if (cache[tileId] && cache[tileId].metadata) {
-              return callback(null, cache[tileId].metadata);
-          }
+          forEach(_tileCache.inflight, abortRequest$4);
+          forEach(_noteCache.inflight, abortRequest$4);
+          forEach(_noteCache.inflightPost, abortRequest$4);
+          if (_changeset.inflight) abortRequest$4(_changeset.inflight);
 
-          // accurate metadata is only available >= 13
-          if (metadataLayer === 99) {
-              vintage = {
-                  start: null,
-                  end: null,
-                  range: null
-              };
-              metadata = {
-                  vintage: null,
-                  source: unknown,
-                  description: unknown,
-                  resolution: unknown,
-                  accuracy: unknown
-              };
+          _tileCache = { loaded: {}, inflight: {}, seen: {} };
+          _noteCache = { loaded: {}, inflight: {}, inflightPost: {}, note: {}, closed: {}, rtree: rbush_1() };
+          _userCache = { toLoad: {}, user: {} };
+          _changeset = {};
 
-              callback(null, metadata);
+          return this;
+      },
 
-          } else {
-              inflight[tileId] = true;
-              d3_json(url, function(error, result) {
-                  delete inflight[tileId];
 
-                  var err;
-                  if (error) {
-                      err = error;
-                  } else if (!result) {
-                      err = 'Unknown Error';
-                  } else if (result.features && result.features.length < 1) {
-                      err = 'No Results';
-                  } else if (result.error && result.error.message) {
-                      err = result.error.message;
-                  }
+      getConnectionId: function() {
+          return _connectionID;
+      },
 
-                  if (err) {
-                      return callback(err);
-                  } else {
-                      // pass through the discrete capture date from metadata
-                      var captureDate = localeDateString(result.features[0].attributes.SRC_DATE2);
-                      vintage = {
-                          start: captureDate,
-                          end: captureDate,
-                          range: captureDate
-                      };
-                      metadata = {
-                          vintage: vintage,
-                          source: clean(result.features[0].attributes.NICE_NAME),
-                          description: clean(result.features[0].attributes.NICE_DESC),
-                          resolution: clean(result.features[0].attributes.SRC_RES),
-                          accuracy: clean(result.features[0].attributes.SRC_ACC)
-                      };
 
-                      // append units - meters
-                      if (isFinite(metadata.resolution)) {
-                          metadata.resolution += ' m';
-                      }
-                      if (isFinite(metadata.accuracy)) {
-                          metadata.accuracy += ' m';
-                      }
+      changesetURL: function(changesetID) {
+          return urlroot + '/changeset/' + changesetID;
+      },
 
-                      cache[tileId].metadata = metadata;
-                      return callback(null, metadata);
-                  }
-              });
-          }
+
+      changesetsURL: function(center, zoom) {
+          var precision = Math.max(0, Math.ceil(Math.log(zoom) / Math.LN2));
+          return urlroot + '/history#map=' +
+              Math.floor(zoom) + '/' +
+              center[1].toFixed(precision) + '/' +
+              center[0].toFixed(precision);
+      },
 
 
-          function clean(val) {
-              return String(val).trim() || unknown;
-          }
-      };
+      entityURL: function(entity) {
+          return urlroot + '/' + entity.type + '/' + entity.osmId();
+      },
 
-      return esri;
-  };
 
+      historyURL: function(entity) {
+          return urlroot + '/' + entity.type + '/' + entity.osmId() + '/history';
+      },
+
+
+      userURL: function(username) {
+          return urlroot + '/user/' + username;
+      },
+
+
+      noteURL: function(note) {
+          return urlroot + '/note/' + note.id;
+      },
+
+
+      noteReportURL: function(note) {
+          return urlroot + '/reports/new?reportable_type=Note&reportable_id=' + note.id;
+      },
 
-  rendererBackgroundSource.None = function() {
-      var source = rendererBackgroundSource({ id: 'none', template: '' });
 
+      // Generic method to load data from the OSM API
+      // Can handle either auth or unauth calls.
+      loadFromAPI: function(path, callback, options) {
+          options = assignIn({ skipSeen: true }, options);
+          var that = this;
+          var cid = _connectionID;
 
-      source.name = function() {
-          return t('background.none');
-      };
+          function done(err, xml) {
+              if (that.getConnectionId() !== cid) {
+                  if (callback) callback({ message: 'Connection Switched', status: -1 });
+                  return;
+              }
 
+              var isAuthenticated = that.authenticated();
 
-      source.imageryUsed = function() {
-          return null;
-      };
+              // 400 Bad Request, 401 Unauthorized, 403 Forbidden
+              // Logout and retry the request..
+              if (isAuthenticated && err && (err.status === 400 || err.status === 401 || err.status === 403)) {
+                  that.logout();
+                  that.loadFromAPI(path, callback, options);
 
+              // else, no retry..
+              } else {
+                  // 509 Bandwidth Limit Exceeded, 429 Too Many Requests
+                  // Set the rateLimitError flag and trigger a warning..
+                  if (!isAuthenticated && !_rateLimitError && err &&
+                          (err.status === 509 || err.status === 429)) {
+                      _rateLimitError = err;
+                      dispatch$5.call('change');
+                  }
 
-      source.area = function() {
-          return -1;  // sources in background pane are sorted by area
-      };
+                  if (callback) {
+                      if (err) {
+                          return callback(err);
+                      } else {
+                          return parseXML(xml, callback, options);
+                      }
+                  }
+              }
+          }
 
+          if (this.authenticated()) {
+              return oauth.xhr({ method: 'GET', path: path }, done);
+          } else {
+              var url = urlroot + path;
+              return d3_xml(url).get(done);
+          }
+      },
 
-      return source;
-  };
 
+      // Load a single entity by id (ways and relations use the `/full` call)
+      // GET /api/0.6/node/#id
+      // GET /api/0.6/[way|relation]/#id/full
+      loadEntity: function(id, callback) {
+          var type = osmEntity.id.type(id);
+          var osmID = osmEntity.id.toOSM(id);
+          var options = { skipSeen: false };
 
-  rendererBackgroundSource.Custom = function(template) {
-      var source = rendererBackgroundSource({ id: 'custom', template: template });
+          this.loadFromAPI(
+              '/api/0.6/' + type + '/' + osmID + (type !== 'node' ? '/full' : ''),
+              function(err, entities) {
+                  if (callback) callback(err, { data: entities });
+              },
+              options
+          );
+      },
 
 
-      source.name = function() {
-          return t('background.custom');
-      };
+      // Load a single entity with a specific version
+      // GET /api/0.6/[node|way|relation]/#id/#version
+      loadEntityVersion: function(id, version, callback) {
+          var type = osmEntity.id.type(id);
+          var osmID = osmEntity.id.toOSM(id);
+          var options = { skipSeen: false };
 
+          this.loadFromAPI(
+              '/api/0.6/' + type + '/' + osmID + '/' + version,
+              function(err, entities) {
+                  if (callback) callback(err, { data: entities });
+              },
+              options
+          );
+      },
 
-      source.imageryUsed = function() {
-          return 'Custom (' + source.template() + ')';
-      };
 
+      // Load multiple entities in chunks
+      // (note: callback may be called multiple times)
+      // GET /api/0.6/[nodes|ways|relations]?#parameters
+      loadMultiple: function(ids, callback) {
+          var that = this;
 
-      source.area = function() {
-          return -2;  // sources in background pane are sorted by area
-      };
+          forEach(groupBy(uniq(ids), osmEntity.id.type), function(v, k) {
+              var type = k + 's';
+              var osmIDs = map$3(v, osmEntity.id.toOSM);
+              var options = { skipSeen: false };
 
+              forEach(chunk(osmIDs, 150), function(arr) {
+                  that.loadFromAPI(
+                      '/api/0.6/' + type + '?' + type + '=' + arr.join(),
+                      function(err, entities) {
+                          if (callback) callback(err, { data: entities });
+                      },
+                      options
+                  );
+              });
+          });
+      },
 
-      return source;
-  };
 
-  function rendererTileLayer(context) {
-      var transformProp = utilPrefixCSSProperty('Transform');
-      var tiler = utilTiler();
+      // Create, upload, and close a changeset
+      // PUT /api/0.6/changeset/create
+      // POST /api/0.6/changeset/#id/upload
+      // PUT /api/0.6/changeset/#id/close
+      putChangeset: function(changeset, changes, callback) {
+          var cid = _connectionID;
 
-      var _tileSize = 256;
-      var _projection;
-      var _cache = {};
-      var _tileOrigin;
-      var _zoom;
-      var _source;
+          if (_changeset.inflight) {
+              return callback({ message: 'Changeset already inflight', status: -2 }, changeset);
 
+          } else if (_changeset.open) {   // reuse existing open changeset..
+              return createdChangeset.call(this, null, _changeset.open);
 
-      function tileSizeAtZoom(d, z) {
-          var EPSILON = 0.002;    // close seams
-          return ((_tileSize * Math.pow(2, z - d[2])) / _tileSize) + EPSILON;
-      }
+          } else {   // Open a new changeset..
+              var options = {
+                  method: 'PUT',
+                  path: '/api/0.6/changeset/create',
+                  options: { header: { 'Content-Type': 'text/xml' } },
+                  content: JXON.stringify(changeset.asJXON())
+              };
+              _changeset.inflight = oauth.xhr(
+                  options,
+                  wrapcb(this, createdChangeset, cid)
+              );
+          }
 
 
-      function atZoom(t$$1, distance) {
-          var power = Math.pow(2, distance);
-          return [
-              Math.floor(t$$1[0] * power),
-              Math.floor(t$$1[1] * power),
-              t$$1[2] + distance
-          ];
-      }
+          function createdChangeset(err, changesetID) {
+              _changeset.inflight = null;
+              if (err) { return callback(err, changeset); }
 
+              _changeset.open = changesetID;
+              changeset = changeset.update({ id: changesetID });
 
-      function lookUp(d) {
-          for (var up = -1; up > -d[2]; up--) {
-              var tile = atZoom(d, up);
-              if (_cache[_source.url(tile)] !== false) {
-                  return tile;
-              }
+              // Upload the changeset..
+              var options = {
+                  method: 'POST',
+                  path: '/api/0.6/changeset/' + changesetID + '/upload',
+                  options: { header: { 'Content-Type': 'text/xml' } },
+                  content: JXON.stringify(changeset.osmChangeJXON(changes))
+              };
+              _changeset.inflight = oauth.xhr(
+                  options,
+                  wrapcb(this, uploadedChangeset, cid)
+              );
           }
-      }
 
 
-      function uniqueBy(a, n) {
-          var o = [];
-          var seen = {};
-          for (var i = 0; i < a.length; i++) {
-              if (seen[a[i][n]] === undefined) {
-                  o.push(a[i]);
-                  seen[a[i][n]] = true;
+          function uploadedChangeset(err) {
+              _changeset.inflight = null;
+              if (err) return callback(err, changeset);
+
+              // Upload was successful, safe to call the callback.
+              // Add delay to allow for postgres replication #1646 #2678
+              window.setTimeout(function() { callback(null, changeset); }, 2500);
+              _changeset.open = null;
+
+              // At this point, we don't really care if the connection was switched..
+              // Only try to close the changeset if we're still talking to the same server.
+              if (this.getConnectionId() === cid) {
+                  // Still attempt to close changeset, but ignore response because #2667
+                  oauth.xhr({
+                      method: 'PUT',
+                      path: '/api/0.6/changeset/' + changeset.id + '/close',
+                      options: { header: { 'Content-Type': 'text/xml' } }
+                  }, function() { return true; });
               }
           }
-          return o;
-      }
-
+      },
 
-      function addSource(d) {
-          d.push(_source.url(d));
-          return d;
-      }
 
+      // Load multiple users in chunks
+      // (note: callback may be called multiple times)
+      // GET /api/0.6/users?users=#id1,#id2,...,#idn
+      loadUsers: function(uids, callback) {
+          var toLoad = [];
+          var cached = [];
 
-      // Update tiles based on current state of `projection`.
-      function background(selection$$1) {
-          _zoom = geoScaleToZoom(_projection.scale(), _tileSize);
+          uniq(uids).forEach(function(uid) {
+              if (_userCache.user[uid]) {
+                  delete _userCache.toLoad[uid];
+                  cached.push(_userCache.user[uid]);
+              } else {
+                  toLoad.push(uid);
+              }
+          });
 
-          var pixelOffset;
-          if (_source) {
-              pixelOffset = [
-                  _source.offset()[0] * Math.pow(2, _zoom),
-                  _source.offset()[1] * Math.pow(2, _zoom)
-              ];
-          } else {
-              pixelOffset = [0, 0];
+          if (cached.length || !this.authenticated()) {
+              callback(undefined, cached);
+              if (!this.authenticated()) return;  // require auth
           }
 
-          var translate = [
-              _projection.translate()[0] + pixelOffset[0],
-              _projection.translate()[1] + pixelOffset[1]
-          ];
+          chunk(toLoad, 150).forEach(function(arr) {
+              oauth.xhr(
+                  { method: 'GET', path: '/api/0.6/users?users=' + arr.join() },
+                  wrapcb(this, done, _connectionID)
+              );
+          }.bind(this));
 
-          tiler
-              .scale(_projection.scale() * 2 * Math.PI)
-              .translate(translate);
+          function done(err, xml) {
+              if (err) { return callback(err); }
 
-          _tileOrigin = [
-              _projection.scale() * Math.PI - translate[0],
-              _projection.scale() * Math.PI - translate[1]
-          ];
+              var options = { skipSeen: true };
+              return parseXML(xml, function(err, results) {
+                  if (err) {
+                      return callback(err);
+                  } else {
+                      return callback(undefined, results);
+                  }
+              }, options);
+          }
+      },
 
-          render(selection$$1);
-      }
 
+      // Load a given user by id
+      // GET /api/0.6/user/#id
+      loadUser: function(uid, callback) {
+          if (_userCache.user[uid] || !this.authenticated()) {   // require auth
+              delete _userCache.toLoad[uid];
+              return callback(undefined, _userCache.user[uid]);
+          }
 
-      // Derive the tiles onscreen, remove those offscreen and position them.
-      // Important that this part not depend on `_projection` because it's
-      // rentered when tiles load/error (see #644).
-      function render(selection$$1) {
-          if (!_source) return;
-          var requests = [];
-          var showDebug = context.getDebug('tile') && !_source.overlay;
+          oauth.xhr(
+              { method: 'GET', path: '/api/0.6/user/' + uid },
+              wrapcb(this, done, _connectionID)
+          );
 
-          if (_source.validZoom(_zoom)) {
-              tiler.skipNullIsland(!!_source.overlay);
+          function done(err, xml) {
+              if (err) { return callback(err); }
 
-              tiler().forEach(function(d) {
-                  addSource(d);
-                  if (d[3] === '') return;
-                  if (typeof d[3] !== 'string') return; // Workaround for #2295
-                  requests.push(d);
-                  if (_cache[d[3]] === false && lookUp(d)) {
-                      requests.push(addSource(lookUp(d)));
+              var options = { skipSeen: true };
+              return parseXML(xml, function(err, results) {
+                  if (err) {
+                      return callback(err);
+                  } else {
+                      return callback(undefined, results[0]);
                   }
-              });
-
-              requests = uniqueBy(requests, 3).filter(function(r) {
-                  // don't re-request tiles which have failed in the past
-                  return _cache[r[3]] !== false;
-              });
+              }, options);
           }
+      },
 
-          function load(d) {
-              _cache[d[3]] = true;
-              select(this)
-                  .on('error', null)
-                  .on('load', null)
-                  .classed('tile-loaded', true);
-              render(selection$$1);
-          }
 
-          function error(d) {
-              _cache[d[3]] = false;
-              select(this)
-                  .on('error', null)
-                  .on('load', null)
-                  .remove();
-              render(selection$$1);
+      // Load the details of the logged-in user
+      // GET /api/0.6/user/details
+      userDetails: function(callback) {
+          if (_userDetails) {    // retrieve cached
+              return callback(undefined, _userDetails);
           }
 
-          function imageTransform(d) {
-              var ts = _tileSize * Math.pow(2, _zoom - d[2]);
-              var scale = tileSizeAtZoom(d, _zoom);
-              return 'translate(' +
-                  ((d[0] * ts) - _tileOrigin[0]) + 'px,' +
-                  ((d[1] * ts) - _tileOrigin[1]) + 'px) ' +
-                  'scale(' + scale + ',' + scale + ')';
-          }
+          oauth.xhr(
+              { method: 'GET', path: '/api/0.6/user/details' },
+              wrapcb(this, done, _connectionID)
+          );
 
-          function tileCenter(d) {
-              var ts = _tileSize * Math.pow(2, _zoom - d[2]);
-              return [
-                  ((d[0] * ts) - _tileOrigin[0] + (ts / 2)),
-                  ((d[1] * ts) - _tileOrigin[1] + (ts / 2))
-              ];
+          function done(err, xml) {
+              if (err) { return callback(err); }
+
+              var options = { skipSeen: false };
+              return parseXML(xml, function(err, results) {
+                  if (err) {
+                      return callback(err);
+                  } else {
+                      _userDetails = results[0];
+                      return callback(undefined, _userDetails);
+                  }
+              }, options);
           }
+      },
 
-          function debugTransform(d) {
-              var coord = tileCenter(d);
-              return 'translate(' + coord[0] + 'px,' + coord[1] + 'px)';
+
+      // Load previous changesets for the logged in user
+      // GET /api/0.6/changesets?user=#id
+      userChangesets: function(callback) {
+          if (_userChangesets) {    // retrieve cached
+              return callback(undefined, _userChangesets);
           }
 
+          this.userDetails(
+              wrapcb(this, gotDetails, _connectionID)
+          );
 
-          // Pick a representative tile near the center of the viewport
-          // (This is useful for sampling the imagery vintage)
-          var dims = tiler.size();
-          var mapCenter = [dims[0] / 2, dims[1] / 2];
-          var minDist = Math.max(dims[0], dims[1]);
-          var nearCenter;
 
-          requests.forEach(function(d) {
-              var c = tileCenter(d);
-              var dist = geoVecLength(c, mapCenter);
-              if (dist < minDist) {
-                  minDist = dist;
-                  nearCenter = d;
-              }
-          });
+          function gotDetails(err, user) {
+              if (err) { return callback(err); }
 
+              oauth.xhr(
+                  { method: 'GET', path: '/api/0.6/changesets?user=' + user.id },
+                  wrapcb(this, done, _connectionID)
+              );
+          }
 
-          var image = selection$$1.selectAll('img')
-              .data(requests, function(d) { return d[3]; });
+          function done(err, xml) {
+              if (err) { return callback(err); }
 
-          image.exit()
-              .style(transformProp, imageTransform)
-              .classed('tile-removing', true)
-              .classed('tile-center', false)
-              .each(function() {
-                  var tile = select(this);
-                  window.setTimeout(function() {
-                      if (tile.classed('tile-removing')) {
-                          tile.remove();
-                      }
-                  }, 300);
+              _userChangesets = Array.prototype.map.call(
+                  xml.getElementsByTagName('changeset'),
+                  function (changeset) { return { tags: getTags(changeset) }; }
+              ).filter(function (changeset) {
+                  var comment = changeset.tags.comment;
+                  return comment && comment !== '';
               });
 
-          image.enter()
-            .append('img')
-              .attr('class', 'tile')
-              .attr('src', function(d) { return d[3]; })
-              .on('error', error)
-              .on('load', load)
-            .merge(image)
-              .style(transformProp, imageTransform)
-              .classed('tile-debug', showDebug)
-              .classed('tile-removing', false)
-              .classed('tile-center', function(d) { return d === nearCenter; });
-
+              return callback(undefined, _userChangesets);
+          }
+      },
 
 
-          var debug = selection$$1.selectAll('.tile-label-debug')
-              .data(showDebug ? requests : [], function(d) { return d[3]; });
+      // Fetch the status of the OSM API
+      // GET /api/capabilities
+      status: function(callback) {
+          d3_xml(urlroot + '/api/capabilities').get(
+              wrapcb(this, done, _connectionID)
+          );
 
-          debug.exit()
-              .remove();
+          function done(err, xml) {
+              if (err) { return callback(err); }
 
-          if (showDebug) {
-              var debugEnter = debug.enter()
-                  .append('div')
-                  .attr('class', 'tile-label-debug');
+              // update blacklists
+              var elements = xml.getElementsByTagName('blacklist');
+              var regexes = [];
+              for (var i = 0; i < elements.length; i++) {
+                  var regex = elements[i].getAttribute('regex');  // needs unencode?
+                  if (regex) {
+                      regexes.push(regex);
+                  }
+              }
+              if (regexes.length) {
+                  _blacklists = regexes;
+              }
 
-              debugEnter
-                  .append('div')
-                  .attr('class', 'tile-label-debug-coord');
+              if (_rateLimitError) {
+                  return callback(_rateLimitError, 'rateLimited');
+              } else {
+                  var apiStatus = xml.getElementsByTagName('status');
+                  var val = apiStatus[0].getAttribute('api');
+                  return callback(undefined, val);
+              }
+          }
+      },
 
-              debugEnter
-                  .append('div')
-                  .attr('class', 'tile-label-debug-vintage');
 
-              debug = debug.merge(debugEnter);
+      // Load data (entities) from the API in tiles
+      // GET /api/0.6/map?bbox=
+      loadTiles: function(projection, callback) {
+          if (_off) return;
 
-              debug
-                  .style(transformProp, debugTransform);
+          var that = this;
+          var path = '/api/0.6/map?bbox=';
 
-              debug
-                  .selectAll('.tile-label-debug-coord')
-                  .text(function(d) { return d[2] + ' / ' + d[0] + ' / ' + d[1]; });
+          // determine the needed tiles to cover the view
+          var tiles = tiler$4.zoomExtent([_tileZoom, _tileZoom]).getTiles(projection);
 
-              debug
-                  .selectAll('.tile-label-debug-vintage')
-                  .each(function(d) {
-                      var span = select(this);
-                      var center = context.projection.invert(tileCenter(d));
-                      _source.getMetadata(center, d, function(err, result) {
-                          span.text((result && result.vintage && result.vintage.range) ||
-                              t('info_panels.background.vintage') + ': ' + t('info_panels.background.unknown')
-                          );
-                      });
-                  });
+          // abort inflight requests that are no longer needed
+          var hadRequests = !isEmpty(_tileCache.inflight);
+          abortUnwantedRequests$2(_tileCache, tiles);
+          if (hadRequests && isEmpty(_tileCache.inflight)) {
+              dispatch$5.call('loaded');    // stop the spinner
           }
 
-      }
+          // issue new requests..
+          tiles.forEach(function(tile) {
+              if (_tileCache.loaded[tile.id] || _tileCache.inflight[tile.id]) return;
+              if (isEmpty(_tileCache.inflight)) {
+                  dispatch$5.call('loading');   // start the spinner
+              }
+
+              var options = { skipSeen: true };
+              _tileCache.inflight[tile.id] = that.loadFromAPI(
+                  path + tile.extent.toParam(),
+                  function(err, parsed) {
+                      delete _tileCache.inflight[tile.id];
+                      if (!err) {
+                          _tileCache.loaded[tile.id] = true;
+                      }
+                      if (callback) {
+                          callback(err, assignIn({ data: parsed }, tile));
+                      }
+                      if (isEmpty(_tileCache.inflight)) {
+                          dispatch$5.call('loaded');     // stop the spinner
+                      }
+                  },
+                  options
+              );
+          });
+      },
 
 
-      background.projection = function(_) {
-          if (!arguments.length) return _projection;
-          _projection = _;
-          return background;
-      };
+      // Load notes from the API in tiles
+      // GET /api/0.6/notes?bbox=
+      loadNotes: function(projection, noteOptions) {
+          noteOptions = assignIn({ limit: 10000, closed: 7 }, noteOptions);
+          if (_off) return;
+
+          var that = this;
+          var path = '/api/0.6/notes?limit=' + noteOptions.limit + '&closed=' + noteOptions.closed + '&bbox=';
+          var throttleLoadUsers = throttle(function() {
+              var uids = Object.keys(_userCache.toLoad);
+              if (!uids.length) return;
+              that.loadUsers(uids, function() {});  // eagerly load user details
+          }, 750);
 
+          // determine the needed tiles to cover the view
+          var tiles = tiler$4.zoomExtent([_noteZoom, _noteZoom]).getTiles(projection);
 
-      background.dimensions = function(_) {
-          if (!arguments.length) return tiler.size();
-          tiler.size(_);
-          return background;
-      };
+          // abort inflight requests that are no longer needed
+          abortUnwantedRequests$2(_noteCache, tiles);
 
+          // issue new requests..
+          tiles.forEach(function(tile) {
+              if (_noteCache.loaded[tile.id] || _noteCache.inflight[tile.id]) return;
 
-      background.source = function(_) {
-          if (!arguments.length) return _source;
-          _source = _;
-          _tileSize = _source.tileSize;
-          _cache = {};
-          tiler.tileSize(_source.tileSize).zoomExtent(_source.zoomExtent);
-          return background;
-      };
+              var options = { skipSeen: false };
+              _noteCache.inflight[tile.id] = that.loadFromAPI(
+                  path + tile.extent.toParam(),
+                  function(err) {
+                      delete _noteCache.inflight[tile.id];
+                      if (!err) {
+                          _noteCache.loaded[tile.id] = true;
+                      }
+                      throttleLoadUsers();
+                      dispatch$5.call('loadedNotes');
+                  },
+                  options
+              );
+          });
+      },
 
 
-      return background;
-  }
+      // Create a note
+      // POST /api/0.6/notes?params
+      postNoteCreate: function(note, callback) {
+          if (!this.authenticated()) {
+              return callback({ message: 'Not Authenticated', status: -3 }, note);
+          }
+          if (_noteCache.inflightPost[note.id]) {
+              return callback({ message: 'Note update already inflight', status: -2 }, note);
+          }
 
-  function rendererBackground(context) {
-      var dispatch$$1 = dispatch('change');
-      var detected = utilDetect();
-      var baseLayer = rendererTileLayer(context).projection(context.projection);
-      var _isValid = true;
-      var _overlayLayers = [];
-      var _backgroundSources = [];
-      var _brightness = 1;
-      var _contrast = 1;
-      var _saturation = 1;
-      var _sharpness = 1;
+          if (!note.loc[0] || !note.loc[1] || !note.newComment) return; // location & description required
 
+          var comment = note.newComment;
+          if (note.newCategory && note.newCategory !== 'None') { comment += ' #' + note.newCategory; }
 
-      function background(selection$$1) {
-          // If we are displaying an Esri basemap at high zoom,
-          // check its tilemap to see how high the zoom can go
-          if (context.map().zoom() > 18) {
-              var basemap = baseLayer.source();
-              if (basemap && /^EsriWorldImagery/.test(basemap.id)) {
-                  var center = context.map().center();
-                  basemap.fetchTilemap(center);
-              }
-          }
+          var path = '/api/0.6/notes?' + utilQsString({ lon: note.loc[0], lat: note.loc[1], text: comment });
 
-          // Is the imagery valid here? - #4827
-          var sources = background.sources(context.map().extent());
-          var wasValid = _isValid;
-          _isValid = !!sources
-              .filter(function(d) { return d === baseLayer.source(); }).length;
+          _noteCache.inflightPost[note.id] = oauth.xhr(
+              { method: 'POST', path: path },
+              wrapcb(this, done, _connectionID)
+          );
 
-          if (wasValid !== _isValid) {      // change in valid status
-              background.updateImagery();
-          }
 
+          function done(err, xml) {
+              delete _noteCache.inflightPost[note.id];
+              if (err) { return callback(err); }
 
-          var baseFilter = '';
-          if (detected.cssfilters) {
-              if (_brightness !== 1) {
-                  baseFilter += 'brightness(' + _brightness + ')';
-              }
-              if (_contrast !== 1) {
-                  baseFilter += 'contrast(' + _contrast + ')';
-              }
-              if (_saturation !== 1) {
-                  baseFilter += 'saturate(' + _saturation + ')';
-              }
-              if (_sharpness < 1) {  // gaussian blur
-                  var blur = interpolateNumber(0.5, 5)(1 - _sharpness);
-                  baseFilter += 'blur(' + blur + 'px)';
-              }
+              // we get the updated note back, remove from caches and reparse..
+              this.removeNote(note);
+
+              var options = { skipSeen: false };
+              return parseXML(xml, function(err, results) {
+                  if (err) {
+                      return callback(err);
+                  } else {
+                      return callback(undefined, results[0]);
+                  }
+              }, options);
           }
+      },
 
-          var base = selection$$1.selectAll('.layer-background')
-              .data([0]);
 
-          base = base.enter()
-              .insert('div', '.layer-data')
-              .attr('class', 'layer layer-background')
-              .merge(base);
+      // Update a note
+      // POST /api/0.6/notes/#id/comment?text=comment
+      // POST /api/0.6/notes/#id/close?text=comment
+      // POST /api/0.6/notes/#id/reopen?text=comment
+      postNoteUpdate: function(note, newStatus, callback) {
+          if (!this.authenticated()) {
+              return callback({ message: 'Not Authenticated', status: -3 }, note);
+          }
+          if (_noteCache.inflightPost[note.id]) {
+              return callback({ message: 'Note update already inflight', status: -2 }, note);
+          }
 
-          if (detected.cssfilters) {
-              base.style('filter', baseFilter || null);
+          var action;
+          if (note.status !== 'closed' && newStatus === 'closed') {
+              action = 'close';
+          } else if (note.status !== 'open' && newStatus === 'open') {
+              action = 'reopen';
           } else {
-              base.style('opacity', _brightness);
+              action = 'comment';
+              if (!note.newComment) return; // when commenting, comment required
           }
 
+          var path = '/api/0.6/notes/' + note.id + '/' + action;
+          if (note.newComment) {
+              path += '?' + utilQsString({ text: note.newComment });
+          }
 
-          var imagery = base.selectAll('.layer-imagery')
-              .data([0]);
+          _noteCache.inflightPost[note.id] = oauth.xhr(
+              { method: 'POST', path: path },
+              wrapcb(this, done, _connectionID)
+          );
 
-          imagery.enter()
-              .append('div')
-              .attr('class', 'layer layer-imagery')
-              .merge(imagery)
-              .call(baseLayer);
 
+          function done(err, xml) {
+              delete _noteCache.inflightPost[note.id];
+              if (err) { return callback(err); }
 
-          var maskFilter = '';
-          var mixBlendMode = '';
-          if (detected.cssfilters && _sharpness > 1) {  // apply unsharp mask
-              mixBlendMode = 'overlay';
-              maskFilter = 'saturate(0) blur(3px) invert(1)';
+              // we get the updated note back, remove from caches and reparse..
+              this.removeNote(note);
 
-              var contrast = _sharpness - 1;
-              maskFilter += ' contrast(' + contrast + ')';
+              // update closed note cache - used to populate `closed:note` changeset tag
+              if (action === 'close') {
+                  _noteCache.closed[note.id] = true;
+              } else if (action === 'reopen') {
+                  delete _noteCache.closed[note.id];
+              }
 
-              var brightness = interpolateNumber(1, 0.85)(_sharpness - 1);
-              maskFilter += ' brightness(' + brightness + ')';
+              var options = { skipSeen: false };
+              return parseXML(xml, function(err, results) {
+                  if (err) {
+                      return callback(err);
+                  } else {
+                      return callback(undefined, results[0]);
+                  }
+              }, options);
           }
+      },
 
-          var mask = base.selectAll('.layer-unsharp-mask')
-              .data(detected.cssfilters && _sharpness > 1 ? [0] : []);
-
-          mask.exit()
-              .remove();
-
-          mask.enter()
-              .append('div')
-              .attr('class', 'layer layer-mask layer-unsharp-mask')
-              .merge(mask)
-              .call(baseLayer)
-              .style('filter', maskFilter || null)
-              .style('mix-blend-mode', mixBlendMode || null);
 
+      switch: function(options) {
+          urlroot = options.urlroot;
 
-          var overlays = selection$$1.selectAll('.layer-overlay')
-              .data(_overlayLayers, function(d) { return d.source().name(); });
+          oauth.options(assignIn({
+              url: urlroot,
+              loading: authLoading,
+              done: authDone
+          }, options));
 
-          overlays.exit()
-              .remove();
+          this.reset();
+          this.userChangesets(function() {});  // eagerly load user details/changesets
+          dispatch$5.call('change');
+          return this;
+      },
 
-          overlays.enter()
-              .insert('div', '.layer-data')
-              .attr('class', 'layer layer-overlay')
-              .merge(overlays)
-              .each(function(layer) { select(this).call(layer); });
-      }
 
+      toggle: function(_) {
+          _off = !_;
+          return this;
+      },
 
-      background.updateImagery = function() {
-          var b = baseLayer.source();
-          if (context.inIntro() || !b) return;
 
-          var o = _overlayLayers
-              .filter(function (d) { return !d.source().isLocatorOverlay() && !d.source().isHidden(); })
-              .map(function (d) { return d.source().id; })
-              .join(',');
+      isChangesetInflight: function() {
+          return !!_changeset.inflight;
+      },
 
-          var meters = geoOffsetToMeters(b.offset());
-          var epsilon = 0.01;
-          var x = +meters[0].toFixed(2);
-          var y = +meters[1].toFixed(2);
-          var q = utilStringQs(window.location.hash.substring(1));
 
-          var id = b.id;
-          if (id === 'custom') {
-              id = 'custom:' + b.template();
+      // get/set cached data
+      // This is used to save/restore the state when entering/exiting the walkthrough
+      // Also used for testing purposes.
+      caches: function(obj) {
+          if (!arguments.length) {
+              return {
+                  tile: cloneDeep(_tileCache),
+                  note: cloneDeep(_noteCache),
+                  user: cloneDeep(_userCache)
+              };
           }
 
-          if (id) {
-              q.background = id;
-          } else {
-              delete q.background;
+          // access caches directly for testing (e.g., loading notes rtree)
+          if (obj === 'get') {
+              return {
+                  tile: _tileCache,
+                  note: _noteCache,
+                  user: _userCache
+              };
           }
 
-          if (o) {
-              q.overlays = o;
-          } else {
-              delete q.overlays;
+          if (obj.tile) {
+              _tileCache = obj.tile;
+              _tileCache.inflight = {};
           }
-
-          if (Math.abs(x) > epsilon || Math.abs(y) > epsilon) {
-              q.offset = x + ',' + y;
-          } else {
-              delete q.offset;
+          if (obj.note) {
+              _noteCache = obj.note;
+              _noteCache.inflight = {};
+              _noteCache.inflightPost = {};
           }
-
-          if (!window.mocha) {
-              window.location.replace('#' + utilQsString(q, true));
+          if (obj.user) {
+              _userCache = obj.user;
           }
 
-          var imageryUsed = [];
+          return this;
+      },
 
-          var current = b.imageryUsed();
-          if (current && _isValid) {
-              imageryUsed.push(current);
-          }
 
-          _overlayLayers
-              .filter(function (d) { return !d.source().isLocatorOverlay() && !d.source().isHidden(); })
-              .forEach(function (d) { imageryUsed.push(d.source().imageryUsed()); });
+      logout: function() {
+          _userChangesets = undefined;
+          _userDetails = undefined;
+          oauth.logout();
+          dispatch$5.call('change');
+          return this;
+      },
 
-          var data$$1 = context.layers().layer('data');
-          if (data$$1 && data$$1.enabled() && data$$1.hasData()) {
-              imageryUsed.push(data$$1.getSrc());
-          }
 
-          var streetside = context.layers().layer('streetside');
-          if (streetside && streetside.enabled()) {
-              imageryUsed.push('Bing Streetside');
-          }
+      authenticated: function() {
+          return oauth.authenticated();
+      },
 
-          var mapillary_images = context.layers().layer('mapillary-images');
-          if (mapillary_images && mapillary_images.enabled()) {
-              imageryUsed.push('Mapillary Images');
-          }
 
-          var mapillary_signs = context.layers().layer('mapillary-signs');
-          if (mapillary_signs && mapillary_signs.enabled()) {
-              imageryUsed.push('Mapillary Signs');
-          }
+      authenticate: function(callback) {
+          var that = this;
+          var cid = _connectionID;
+          _userChangesets = undefined;
+          _userDetails = undefined;
 
-          var openstreetcam_images = context.layers().layer('openstreetcam-images');
-          if (openstreetcam_images && openstreetcam_images.enabled()) {
-              imageryUsed.push('OpenStreetCam Images');
+          function done(err, res) {
+              if (err) {
+                  if (callback) callback(err);
+                  return;
+              }
+              if (that.getConnectionId() !== cid) {
+                  if (callback) callback({ message: 'Connection Switched', status: -1 });
+                  return;
+              }
+              _rateLimitError = undefined;
+              dispatch$5.call('change');
+              if (callback) callback(err, res);
+              that.userChangesets(function() {});  // eagerly load user details/changesets
           }
 
-          context.history().imageryUsed(imageryUsed);
-      };
+          return oauth.authenticate(done);
+      },
 
 
-      background.sources = function(extent) {
-          if (!data.imagery || !data.imagery.query) return [];   // called before init()?
+      imageryBlacklists: function() {
+          return _blacklists;
+      },
 
-          var matchIDs = {};
-          var matchImagery = data.imagery.query.bbox(extent.rectangle(), true) || [];
-          matchImagery.forEach(function(d) { matchIDs[d.id] = true; });
 
-          return _backgroundSources.filter(function(source) {
-              return matchIDs[source.id] || !source.polygon;   // no polygon = worldwide
-          });
-      };
+      tileZoom: function(_) {
+          if (!arguments.length) return _tileZoom;
+          _tileZoom = _;
+          return this;
+      },
 
 
-      background.dimensions = function(d) {
-          if (!d) return;
-          baseLayer.dimensions(d);
+      // get all cached notes covering the viewport
+      notes: function(projection) {
+          var viewport = projection.clipExtent();
+          var min = [viewport[0][0], viewport[1][1]];
+          var max = [viewport[1][0], viewport[0][1]];
+          var bbox = geoExtent(projection.invert(min), projection.invert(max)).bbox();
 
-          _overlayLayers.forEach(function(layer) {
-              layer.dimensions(d);
-          });
-      };
+          return _noteCache.rtree.search(bbox)
+              .map(function(d) { return d.data; });
+      },
 
 
-      background.baseLayerSource = function(d) {
-          if (!arguments.length) return baseLayer.source();
+      // get a single note from the cache
+      getNote: function(id) {
+          return _noteCache.note[id];
+      },
 
-          // test source against OSM imagery blacklists..
-          var osm = context.connection();
-          if (!osm) return background;
 
-          var blacklists = context.connection().imageryBlacklists();
-          var template = d.template();
-          var fail = false;
-          var tested = 0;
-          var regex;
+      // remove a single note from the cache
+      removeNote: function(note) {
+          if (!(note instanceof osmNote) || !note.id) return;
 
-          for (var i = 0; i < blacklists.length; i++) {
-              try {
-                  regex = new RegExp(blacklists[i]);
-                  fail = regex.test(template);
-                  tested++;
-                  if (fail) break;
-              } catch (e) {
-                  /* noop */
-              }
-          }
+          delete _noteCache.note[note.id];
+          updateRtree$2(encodeNoteRtree(note), false);  // false = remove
+      },
 
-          // ensure at least one test was run.
-          if (!tested) {
-              regex = new RegExp('.*\.google(apis)?\..*/(vt|kh)[\?/].*([xyz]=.*){3}.*');
-              fail = regex.test(template);
-          }
 
-          baseLayer.source(!fail ? d : background.findSource('none'));
-          dispatch$$1.call('change');
-          background.updateImagery();
-          return background;
-      };
+      // replace a single note in the cache
+      replaceNote: function(note) {
+          if (!(note instanceof osmNote) || !note.id) return;
 
+          _noteCache.note[note.id] = note;
+          updateRtree$2(encodeNoteRtree(note), true);  // true = replace
+          return note;
+      },
 
-      background.findSource = function(id) {
-          return find$1(_backgroundSources, function(d) {
-              return d.id && d.id === id;
-          });
-      };
 
+      // Get an array of note IDs closed during this session.
+      // Used to populate `closed:note` changeset tag
+      getClosedIDs: function() {
+          return Object.keys(_noteCache.closed).sort();
+      }
 
-      background.bing = function() {
-          background.baseLayerSource(background.findSource('Bing'));
-      };
+  };
 
+  var apibase$3 = 'https://wiki.openstreetmap.org/w/api.php';
+  var _inflight = {};
+  var _wikibaseCache = {};
+  var _localeIDs = { en: false };
 
-      background.showsLayer = function(d) {
-          return d.id === baseLayer.source().id ||
-              _overlayLayers.some(function(layer) { return d.id === layer.source().id; });
-      };
 
+  var debouncedRequest = debounce(request$1, 500, { leading: false });
 
-      background.overlayLayerSources = function() {
-          return _overlayLayers.map(function (l) { return l.source(); });
-      };
+  function request$1(url, callback) {
+      if (_inflight[url]) return;
 
+      _inflight[url] = d3_json(url, function (err, data) {
+          delete _inflight[url];
+          callback(err, data);
+      });
+  }
 
-      background.toggleOverlayLayer = function(d) {
-          var layer;
-          for (var i = 0; i < _overlayLayers.length; i++) {
-              layer = _overlayLayers[i];
-              if (layer.source() === d) {
-                  _overlayLayers.splice(i, 1);
-                  dispatch$$1.call('change');
-                  background.updateImagery();
-                  return;
-              }
-          }
 
-          layer = rendererTileLayer(context)
-              .source(d)
-              .projection(context.projection)
-              .dimensions(baseLayer.dimensions()
-          );
+  /**
+   * Get the best string value from the descriptions/labels result
+   * Note that if mediawiki doesn't recognize language code, it will return all values.
+   * In that case, fallback to use English.
+   * @param values object - either descriptions or labels
+   * @param langCode String
+   * @returns localized string
+   */
+  function localizedToString(values, langCode) {
+      if (values) {
+          values = values[langCode] || values.en;
+      }
+      return values ? values.value : '';
+  }
 
-          _overlayLayers.push(layer);
-          dispatch$$1.call('change');
-          background.updateImagery();
-      };
 
+  var serviceOsmWikibase = {
 
-      background.nudge = function(d, zoom) {
-          baseLayer.source().nudge(d, zoom);
-          dispatch$$1.call('change');
-          background.updateImagery();
-          return background;
-      };
+      init: function() {
+          _inflight = {};
+          _wikibaseCache = {};
+          _localeIDs = {};
+      },
 
 
-      background.offset = function(d) {
-          if (!arguments.length) return baseLayer.source().offset();
-          baseLayer.source().offset(d);
-          dispatch$$1.call('change');
-          background.updateImagery();
-          return background;
-      };
+      reset: function() {
+          forEach(_inflight, function(req) { req.abort(); });
+          _inflight = {};
+      },
+
+
+      /**
+       * Get the best value for the property, or undefined if not found
+       * @param entity object from wikibase
+       * @param property string e.g. 'P4' for image
+       * @param langCode string e.g. 'fr' for French
+       */
+      claimToValue: function(entity, property, langCode) {
+          if (!entity.claims[property]) return undefined;
+          var locale = _localeIDs[langCode];
+          var preferredPick, localePick;
 
+          forEach(entity.claims[property], function(stmt) {
+              // If exists, use value limited to the needed language (has a qualifier P26 = locale)
+              // Or if not found, use the first value with the "preferred" rank
+              if (!preferredPick && stmt.rank === 'preferred') {
+                  preferredPick = stmt;
+              }
+              if (locale && stmt.qualifiers && stmt.qualifiers.P26 &&
+                  stmt.qualifiers.P26[0].datavalue.value.id === locale
+              ) {
+                  localePick = stmt;
+              }
+          });
 
-      background.brightness = function(d) {
-          if (!arguments.length) return _brightness;
-          _brightness = d;
-          if (context.mode()) dispatch$$1.call('change');
-          return background;
-      };
+          var result = localePick || preferredPick;
+          if (result) {
+              var datavalue = result.mainsnak.datavalue;
+              return datavalue.type === 'wikibase-entityid' ? datavalue.value.id : datavalue.value;
+          } else {
+              return undefined;
+          }
+      },
 
 
-      background.contrast = function(d) {
-          if (!arguments.length) return _contrast;
-          _contrast = d;
-          if (context.mode()) dispatch$$1.call('change');
-          return background;
-      };
+      /**
+       * Convert monolingual property into a key-value object (language -> value)
+       * @param entity object from wikibase
+       * @param property string e.g. 'P31' for monolingual wiki page title
+       */
+      monolingualClaimToValueObj: function(entity, property) {
+          if (!entity || !entity.claims[property]) return undefined;
 
+          return entity.claims[property].reduce(function(acc, obj) {
+              var value = obj.mainsnak.datavalue.value;
+              acc[value.language] = value.text;
+              return acc;
+          }, {});
+      },
 
-      background.saturation = function(d) {
-          if (!arguments.length) return _saturation;
-          _saturation = d;
-          if (context.mode()) dispatch$$1.call('change');
-          return background;
-      };
 
+      toSitelink: function(key, value) {
+          var result = value ? ('Tag:' + key + '=' + value) : 'Key:' + key;
+          return result.replace(/_/g, ' ').trim();
+      },
 
-      background.sharpness = function(d) {
-          if (!arguments.length) return _sharpness;
-          _sharpness = d;
-          if (context.mode()) dispatch$$1.call('change');
-          return background;
-      };
 
+      //
+      // Pass params object of the form:
+      // {
+      //   key: 'string',
+      //   value: 'string',
+      //   rtype: 'string',
+      //   langCode: 'string'
+      // }
+      //
+      getEntity: function(params, callback) {
+          var doRequest = params.debounce ? debouncedRequest : request$1;
+          var that = this;
+          var titles = [];
+          var result = {};
+          var rtypeSitelink = params.rtype ? ('Relation:' + params.rtype).replace(/_/g, ' ').trim() : false;
+          var keySitelink = params.key ? this.toSitelink(params.key) : false;
+          var tagSitelink = (params.key && params.value) ? this.toSitelink(params.key, params.value) : false;
+          var localeSitelink;
 
-      background.init = function() {
-          function parseMap(qmap) {
-              if (!qmap) return false;
-              var args = qmap.split('/').map(Number);
-              if (args.length < 3 || args.some(isNaN)) return false;
-              return geoExtent$$1([args[2], args[1]]);
+          if (params.langCode && _localeIDs[params.langCode] === undefined) {
+              // If this is the first time we are asking about this locale,
+              // fetch corresponding entity (if it exists), and cache it.
+              // If there is no such entry, cache `false` value to avoid re-requesting it.
+              localeSitelink = ('Locale:' + params.langCode).replace(/_/g, ' ').trim();
+              titles.push(localeSitelink);
           }
 
-          var q = utilStringQs(window.location.hash.substring(1));
-          var requested = q.background || q.layer;
-          var extent = parseMap(q.map);
-          var first;
-          var best;
+          if (rtypeSitelink) {
+              if (_wikibaseCache[rtypeSitelink]) {
+                  result.rtype = _wikibaseCache[rtypeSitelink];
+              } else {
+                  titles.push(rtypeSitelink);
+              }
+          }
 
+          if (keySitelink) {
+              if (_wikibaseCache[keySitelink]) {
+                  result.key = _wikibaseCache[keySitelink];
+              } else {
+                  titles.push(keySitelink);
+              }
+          }
 
-          data.imagery = data.imagery || [];
-          data.imagery.features = {};
+          if (tagSitelink) {
+              if (_wikibaseCache[tagSitelink]) {
+                  result.tag = _wikibaseCache[tagSitelink];
+              } else {
+                  titles.push(tagSitelink);
+              }
+          }
 
-          // build efficient index and querying for data.imagery
-          var features = data.imagery.map(function(source) {
-              if (!source.polygon) return null;
+          if (!titles.length) {
+              // Nothing to do, we already had everything in the cache
+              return callback(null, result);
+          }
 
-              // Add an extra array nest to each element in `source.polygon`
-              // so the rings are not treated as a bunch of holes:
-              // what we have: [ [[outer],[hole],[hole]] ]
-              // what we want: [ [[outer]],[[outer]],[[outer]] ]
-              var rings = source.polygon.map(function(ring) { return [ring]; });
+          // Requesting just the user language code
+          // If backend recognizes the code, it will perform proper fallbacks,
+          // and the result will contain the requested code. If not, all values are returned:
+          // {"zh-tw":{"value":"...","language":"zh-tw","source-language":"zh-hant"}
+          // {"pt-br":{"value":"...","language":"pt","for-language":"pt-br"}}
+          var obj = {
+              action: 'wbgetentities',
+              sites: 'wiki',
+              titles: titles.join('|'),
+              languages: params.langCode,
+              languagefallback: 1,
+              origin: '*',
+              format: 'json',
+              // There is an MW Wikibase API bug https://phabricator.wikimedia.org/T212069
+              // We shouldn't use v1 until it gets fixed, but should switch to it afterwards
+              // formatversion: 2,
+          };
 
-              var feature = {
-                  type: 'Feature',
-                  properties: { id: source.id },
-                  geometry: { type: 'MultiPolygon', coordinates: rings }
-              };
+          var url = apibase$3 + '?' + utilQsString(obj);
+          doRequest(url, function(err, d) {
+              if (err) {
+                  callback(err);
+              } else if (!d.success || d.error) {
+                  callback(d.error.messages.map(function(v) { return v.html['*']; }).join('<br>'));
+              } else {
+                  var localeID = false;
+                  forEach(d.entities, function(res) {
+                      if (res.missing !== '') {
+                          // Simplify access to the localized values
+                          res.description = localizedToString(res.descriptions, params.langCode);
+                          res.label = localizedToString(res.labels, params.langCode);
 
-              data.imagery.features[source.id] = feature;
-              return feature;
+                          var title = res.sitelinks.wiki.title;
+                          if (title === rtypeSitelink) {
+                              _wikibaseCache[rtypeSitelink] = res;
+                              result.rtype = res;
+                          } else if (title === keySitelink) {
+                              _wikibaseCache[keySitelink] = res;
+                              result.key = res;
+                          } else if (title === tagSitelink) {
+                              _wikibaseCache[tagSitelink] = res;
+                              result.tag = res;
+                          } else if (title === localeSitelink) {
+                              localeID = res.id;
+                          } else {
+                              console.log('Unexpected title ' + title);  // eslint-disable-line no-console
+                          }
+                      }
+                  });
 
-          }).filter(Boolean);
+                  if (localeSitelink) {
+                      // If locale ID is not found, store false to prevent repeated queries
+                      that.addLocale(params.langCode, localeID);
+                  }
 
-          data.imagery.query = whichPolygon_1({
-              type: 'FeatureCollection',
-              features: features
+                  callback(null, result);
+              }
           });
+      },
 
 
-          // Add all the available imagery sources
-          _backgroundSources = data.imagery.map(function(source) {
-              if (source.type === 'bing') {
-                  return rendererBackgroundSource.Bing(source, dispatch$$1);
-              } else if (/^EsriWorldImagery/.test(source.id)) {
-                  return rendererBackgroundSource.Esri(source);
-              } else {
-                  return rendererBackgroundSource(source);
-              }
-          });
+      //
+      // Pass params object of the form:
+      // {
+      //   key: 'string',     // required
+      //   value: 'string'    // optional
+      // }
+      //   -or-
+      // {
+      //   rtype: 'rtype'     // relation type  (e.g. 'multipolygon')
+      // }
+      //
+      // Get an result object used to display tag documentation
+      // {
+      //   title:        'string',
+      //   description:  'string',
+      //   editURL:      'string',
+      //   imageURL:     'string',
+      //   wiki:         { title: 'string', text: 'string', url: 'string' }
+      // }
+      //
+      getDocs: function(params, callback) {
+          var that = this;
+          var langCode = utilDetect().locale.toLowerCase();
+          params.langCode = langCode;
 
-          first = _backgroundSources.length && _backgroundSources[0];
+          this.getEntity(params, function(err, data) {
+              if (err) {
+                  callback(err);
+                  return;
+              }
 
-          // Add 'None'
-          _backgroundSources.unshift(rendererBackgroundSource.None());
+              var entity = data.rtype || data.tag || data.key;
+              if (!entity) {
+                  callback('No entity');
+                  return;
+              }
 
-          // Add 'Custom'
-          var template = context.storage('background-custom-template') || '';
-          var custom = rendererBackgroundSource.Custom(template);
-          _backgroundSources.unshift(custom);
+              // prepare result
+              var result = {
+                  title: entity.title,
+                  description: entity.description,
+                  editURL: 'https://wiki.openstreetmap.org/wiki/' + entity.title
+              };
 
+              // add image
+              if (entity.claims) {
+                  var imageroot;
+                  var image = that.claimToValue(entity, 'P4', langCode);
+                  if (image) {
+                      imageroot = 'https://commons.wikimedia.org/w/index.php';
+                  } else {
+                      image = that.claimToValue(entity, 'P28', langCode);
+                      if (image) {
+                          imageroot = 'https://wiki.openstreetmap.org/w/index.php';
+                      }
+                  }
+                  if (imageroot && image) {
+                      result.imageURL = imageroot + '?' + utilQsString({
+                          title: 'Special:Redirect/file/' + image,
+                          width: 400
+                      });
+                  }
+              }
 
-          // Decide which background layer to display
-          if (!requested && extent) {
-              best = find$1(this.sources(extent), function(s) { return s.best(); });
-          }
-          if (requested && requested.indexOf('custom:') === 0) {
-              template = requested.replace(/^custom:/, '');
-              background.baseLayerSource(custom.template(template));
-              context.storage('background-custom-template', template);
-          } else {
-              background.baseLayerSource(
-                  background.findSource(requested) ||
-                  best ||
-                  background.findSource(context.storage('background-last-used')) ||
-                  background.findSource('Bing') ||
-                  first ||
-                  background.findSource('none')
-              );
-          }
+              // Try to get a wiki page from tag data item first, followed by the corresponding key data item.
+              // If neither tag nor key data item contain a wiki page in the needed language nor English,
+              // get the first found wiki page from either the tag or the key item.
+              var rtypeWiki = that.monolingualClaimToValueObj(data.rtype, 'P31');
+              var tagWiki = that.monolingualClaimToValueObj(data.tag, 'P31');
+              var keyWiki = that.monolingualClaimToValueObj(data.key, 'P31');
+
+              // If exact language code does not exist, try to find the first part before the '-'
+              // BUG: in some cases, a more elaborate fallback logic might be needed
+              var langPrefix = langCode.split('-', 2)[0];
+
+              // use the first acceptable wiki page
+              result.wiki =
+                  getWikiInfo(rtypeWiki, langCode, 'inspector.wiki_reference') ||
+                  getWikiInfo(rtypeWiki, langPrefix, 'inspector.wiki_reference') ||
+                  getWikiInfo(rtypeWiki, 'en', 'inspector.wiki_en_reference') ||
+                  getWikiInfo(tagWiki, langCode, 'inspector.wiki_reference') ||
+                  getWikiInfo(tagWiki, langPrefix, 'inspector.wiki_reference') ||
+                  getWikiInfo(tagWiki, 'en', 'inspector.wiki_en_reference') ||
+                  getWikiInfo(keyWiki, langCode, 'inspector.wiki_reference') ||
+                  getWikiInfo(keyWiki, langPrefix, 'inspector.wiki_reference') ||
+                  getWikiInfo(keyWiki, 'en', 'inspector.wiki_en_reference');
 
-          var locator = find$1(_backgroundSources, function(d) {
-              return d.overlay && d.default;
-          });
+              callback(null, result);
 
-          if (locator) {
-              background.toggleOverlayLayer(locator);
-          }
 
-          var overlays = (q.overlays || '').split(',');
-          overlays.forEach(function(overlay) {
-              overlay = background.findSource(overlay);
-              if (overlay) {
-                  background.toggleOverlayLayer(overlay);
+              // Helper method to get wiki info if a given language exists
+              function getWikiInfo(wiki, langCode, tKey) {
+                  if (wiki && wiki[langCode]) {
+                      return {
+                          title: wiki[langCode],
+                          text: tKey,
+                          url: 'https://wiki.openstreetmap.org/wiki/' + wiki[langCode]
+                      };
+                  }
               }
           });
+      },
 
-          if (q.gpx) {
-              var gpx = context.layers().layer('data');
-              if (gpx) {
-                  gpx.url(q.gpx, '.gpx');
-              }
-          }
-
-          if (q.offset) {
-              var offset = q.offset.replace(/;/g, ',').split(',').map(function(n) {
-                  return !isNaN(n) && n;
-              });
-
-              if (offset.length === 2) {
-                  background.offset(geoMetersToOffset(offset));
-              }
-          }
-      };
 
+      addLocale: function(langCode, qid) {
+          // Makes it easier to unit test
+          _localeIDs[langCode] = qid;
+      },
 
-      return utilRebind(background, dispatch$$1, 'on');
-  }
 
-  function rendererFeatures(context) {
-      var traffic_roads = {
-          'motorway': true,
-          'motorway_link': true,
-          'trunk': true,
-          'trunk_link': true,
-          'primary': true,
-          'primary_link': true,
-          'secondary': true,
-          'secondary_link': true,
-          'tertiary': true,
-          'tertiary_link': true,
-          'residential': true,
-          'unclassified': true,
-          'living_street': true
-      };
+      apibase: function(val) {
+          if (!arguments.length) return apibase$3;
+          apibase$3 = val;
+          return this;
+      }
 
-      var service_roads = {
-          'service': true,
-          'road': true,
-          'track': true
-      };
+  };
 
-      var paths = {
-          'path': true,
-          'footway': true,
-          'cycleway': true,
-          'bridleway': true,
-          'steps': true,
-          'pedestrian': true,
-          'corridor': true
-      };
+  var jsonpCache = {};
+  window.jsonpCache = jsonpCache;
 
-      var past_futures = {
-          'proposed': true,
-          'construction': true,
-          'abandoned': true,
-          'dismantled': true,
-          'disused': true,
-          'razed': true,
-          'demolished': true,
-          'obliterated': true
+  function jsonpRequest(url, callback) {
+      var request = {
+          abort: function() {}
       };
 
-      var dispatch$$1 = dispatch('change', 'redraw'),
-          _cullFactor = 1,
-          _cache = {},
-          _features = {},
-          _stats = {},
-          _keys = [],
-          _hidden = [];
-
+      if (window.JSONP_FIX) {
+          if (window.JSONP_DELAY === 0) {
+              callback(window.JSONP_FIX);
+          } else {
+              var t = window.setTimeout(function() {
+                  callback(window.JSONP_FIX);
+              }, window.JSONP_DELAY || 0);
 
-      function update() {
-          if (!window.mocha) {
-              var q = utilStringQs(window.location.hash.substring(1));
-              var disabled = features.disabled();
-              if (disabled.length) {
-                  q.disable_features = disabled.join(',');
-              } else {
-                  delete q.disable_features;
-              }
-              window.location.replace('#' + utilQsString(q, true));
-              context.storage('disabled-features', disabled.join(','));
+              request.abort = function() { window.clearTimeout(t); };
           }
-          _hidden = features.hidden();
-          dispatch$$1.call('change');
-          dispatch$$1.call('redraw');
+
+          return request;
       }
 
+      function rand() {
+          var chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
+          var c = '';
+          var i = -1;
+          while (++i < 15) c += chars.charAt(Math.floor(Math.random() * 52));
+          return c;
+      }
 
-      function defineFeature(k, filter, max) {
-          var isEnabled = true;
+      function create(url) {
+          var e = url.match(/callback=(\w+)/);
+          var c = e ? e[1] : rand();
 
-          _keys.push(k);
-          _features[k] = {
-              filter: filter,
-              enabled: isEnabled,   // whether the user wants it enabled..
-              count: 0,
-              currentMax: (max || Infinity),
-              defaultMax: (max || Infinity),
-              enable: function() { this.enabled = true; this.currentMax = this.defaultMax; },
-              disable: function() { this.enabled = false; this.currentMax = 0; },
-              hidden: function() { return !context.editable() || this.count > this.currentMax * _cullFactor; },
-              autoHidden: function() { return this.hidden() && this.currentMax > 0; }
+          jsonpCache[c] = function(data) {
+              if (jsonpCache[c]) {
+                  callback(data);
+              }
+              finalize();
           };
-      }
 
+          function finalize() {
+              delete jsonpCache[c];
+              script.remove();
+          }
 
-      defineFeature('points', function isPoint(entity, resolver, geometry) {
-          return geometry === 'point';
-      }, 200);
+          request.abort = finalize;
+          return 'jsonpCache.' + c;
+      }
 
-      defineFeature('traffic_roads', function isTrafficRoad(entity) {
-          return traffic_roads[entity.tags.highway];
-      });
+      var cb = create(url);
 
-      defineFeature('service_roads', function isServiceRoad(entity) {
-          return service_roads[entity.tags.highway];
-      });
+      var script = select('head')
+          .append('script')
+          .attr('type', 'text/javascript')
+          .attr('src', url.replace(/(\{|%7B)callback(\}|%7D)/, cb));
 
-      defineFeature('paths', function isPath(entity) {
-          return paths[entity.tags.highway];
-      });
+      return request;
+  }
 
-      defineFeature('buildings', function isBuilding(entity) {
-          return (
-              !!entity.tags['building:part'] ||
-              (!!entity.tags.building && entity.tags.building !== 'no') ||
-              entity.tags.parking === 'multi-storey' ||
-              entity.tags.parking === 'sheds' ||
-              entity.tags.parking === 'carports' ||
-              entity.tags.parking === 'garage_boxes'
-          );
-      }, 250);
+  var q = createCommonjsModule(function (module, exports) {
+  // vim:ts=4:sts=4:sw=4:
+  /*!
+   *
+   * Copyright 2009-2017 Kris Kowal under the terms of the MIT
+   * license found at https://github.com/kriskowal/q/blob/v1/LICENSE
+   *
+   * With parts by Tyler Close
+   * Copyright 2007-2009 Tyler Close under the terms of the MIT X license found
+   * at http://www.opensource.org/licenses/mit-license.html
+   * Forked at ref_send.js version: 2009-05-11
+   *
+   * With parts by Mark Miller
+   * Copyright (C) 2011 Google Inc.
+   *
+   * Licensed under the Apache License, Version 2.0 (the "License");
+   * you may not use this file except in compliance with the License.
+   * You may obtain a copy of the License at
+   *
+   * http://www.apache.org/licenses/LICENSE-2.0
+   *
+   * Unless required by applicable law or agreed to in writing, software
+   * distributed under the License is distributed on an "AS IS" BASIS,
+   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   * See the License for the specific language governing permissions and
+   * limitations under the License.
+   *
+   */
 
-      defineFeature('landuse', function isLanduse(entity, resolver, geometry) {
-          return geometry === 'area' &&
-              !_features.buildings.filter(entity) &&
-              !_features.water.filter(entity);
-      });
+  (function (definition) {
 
-      defineFeature('boundaries', function isBoundary(entity) {
-          return (
-              !!entity.tags.boundary
-          ) && !(
-              traffic_roads[entity.tags.highway] ||
-              service_roads[entity.tags.highway] ||
-              paths[entity.tags.highway]
-          );
-      });
+      // This file will function properly as a <script> tag, or a module
+      // using CommonJS and NodeJS or RequireJS module formats.  In
+      // Common/Node/RequireJS, the module exports the Q API and when
+      // executed as a simple <script>, it creates a Q global instead.
 
-      defineFeature('water', function isWater(entity) {
-          return (
-              !!entity.tags.waterway ||
-              entity.tags.natural === 'water' ||
-              entity.tags.natural === 'coastline' ||
-              entity.tags.natural === 'bay' ||
-              entity.tags.landuse === 'pond' ||
-              entity.tags.landuse === 'basin' ||
-              entity.tags.landuse === 'reservoir' ||
-              entity.tags.landuse === 'salt_pond'
-          );
-      });
+      // Montage Require
+      if (typeof bootstrap === "function") {
+          bootstrap("promise", definition);
 
-      defineFeature('rail', function isRail(entity) {
-          return (
-              !!entity.tags.railway ||
-              entity.tags.landuse === 'railway'
-          ) && !(
-              traffic_roads[entity.tags.highway] ||
-              service_roads[entity.tags.highway] ||
-              paths[entity.tags.highway]
-          );
-      });
+      // CommonJS
+      } else {
+          module.exports = definition();
 
-      defineFeature('power', function isPower(entity) {
-          return !!entity.tags.power;
-      });
+      // RequireJS
+      }
 
-      // contains a past/future tag, but not in active use as a road/path/cycleway/etc..
-      defineFeature('past_future', function isPastFuture(entity) {
-          if (
-              traffic_roads[entity.tags.highway] ||
-              service_roads[entity.tags.highway] ||
-              paths[entity.tags.highway]
-          ) { return false; }
+  })(function () {
 
-          var strings = Object.keys(entity.tags);
+  var hasStacks = false;
+  try {
+      throw new Error();
+  } catch (e) {
+      hasStacks = !!e.stack;
+  }
 
-          for (var i = 0; i < strings.length; i++) {
-              var s = strings[i];
-              if (past_futures[s] || past_futures[entity.tags[s]]) { return true; }
-          }
-          return false;
-      });
+  // All code after this point will be filtered from stack traces reported
+  // by Q.
+  var qStartingLine = captureLine();
+  var qFileName;
 
-      // Lines or areas that don't match another feature filter.
-      // IMPORTANT: The 'others' feature must be the last one defined,
-      //   so that code in getMatches can skip this test if `hasMatch = true`
-      defineFeature('others', function isOther(entity, resolver, geometry) {
-          return (geometry === 'line' || geometry === 'area');
-      });
+  // shims
 
+  // used for fallback in "allResolved"
+  var noop = function () {};
 
-      function features() {}
+  // Use the fastest possible means to execute a task in a future turn
+  // of the event loop.
+  var nextTick =(function () {
+      // linked list of tasks (single, with head node)
+      var head = {task: void 0, next: null};
+      var tail = head;
+      var flushing = false;
+      var requestTick = void 0;
+      var isNodeJS = false;
+      // queue for late tasks, used by unhandled rejection tracking
+      var laterQueue = [];
 
+      function flush() {
+          /* jshint loopfunc: true */
+          var task, domain;
 
-      features.features = function() {
-          return _features;
-      };
+          while (head.next) {
+              head = head.next;
+              task = head.task;
+              head.task = void 0;
+              domain = head.domain;
 
+              if (domain) {
+                  head.domain = void 0;
+                  domain.enter();
+              }
+              runSingle(task, domain);
 
-      features.keys = function() {
-          return _keys;
-      };
+          }
+          while (laterQueue.length) {
+              task = laterQueue.pop();
+              runSingle(task);
+          }
+          flushing = false;
+      }
+      // runs a single function in the async queue
+      function runSingle(task, domain) {
+          try {
+              task();
 
+          } catch (e) {
+              if (isNodeJS) {
+                  // In node, uncaught exceptions are considered fatal errors.
+                  // Re-throw them synchronously to interrupt flushing!
 
-      features.enabled = function(k) {
-          if (!arguments.length) {
-              return _keys.filter(function(k) { return _features[k].enabled; });
-          }
-          return _features[k] && _features[k].enabled;
-      };
+                  // Ensure continuation if the uncaught exception is suppressed
+                  // listening "uncaughtException" events (as domains does).
+                  // Continue in next event to avoid tick recursion.
+                  if (domain) {
+                      domain.exit();
+                  }
+                  setTimeout(flush, 0);
+                  if (domain) {
+                      domain.enter();
+                  }
 
+                  throw e;
 
-      features.disabled = function(k) {
-          if (!arguments.length) {
-              return _keys.filter(function(k) { return !_features[k].enabled; });
+              } else {
+                  // In browsers, uncaught exceptions are not fatal.
+                  // Re-throw them asynchronously to avoid slow-downs.
+                  setTimeout(function () {
+                      throw e;
+                  }, 0);
+              }
           }
-          return _features[k] && !_features[k].enabled;
-      };
-
 
-      features.hidden = function(k) {
-          if (!arguments.length) {
-              return _keys.filter(function(k) { return _features[k].hidden(); });
+          if (domain) {
+              domain.exit();
           }
-          return _features[k] && _features[k].hidden();
-      };
+      }
 
+      nextTick = function (task) {
+          tail = tail.next = {
+              task: task,
+              domain: isNodeJS && process.domain,
+              next: null
+          };
 
-      features.autoHidden = function(k) {
-          if (!arguments.length) {
-              return _keys.filter(function(k) { return _features[k].autoHidden(); });
+          if (!flushing) {
+              flushing = true;
+              requestTick();
           }
-          return _features[k] && _features[k].autoHidden();
       };
 
+      if (typeof process === "object" &&
+          process.toString() === "[object process]" && process.nextTick) {
+          // Ensure Q is in a real Node environment, with a `process.nextTick`.
+          // To see through fake Node environments:
+          // * Mocha test runner - exposes a `process` global without a `nextTick`
+          // * Browserify - exposes a `process.nexTick` function that uses
+          //   `setTimeout`. In this case `setImmediate` is preferred because
+          //    it is faster. Browserify's `process.toString()` yields
+          //   "[object Object]", while in a real Node environment
+          //   `process.toString()` yields "[object process]".
+          isNodeJS = true;
 
-      features.enable = function(k) {
-          if (_features[k] && !_features[k].enabled) {
-              _features[k].enable();
-              update();
-          }
-      };
-
+          requestTick = function () {
+              process.nextTick(flush);
+          };
 
-      features.disable = function(k) {
-          if (_features[k] && _features[k].enabled) {
-              _features[k].disable();
-              update();
+      } else if (typeof setImmediate === "function") {
+          // In IE10, Node.js 0.9+, or https://github.com/NobleJS/setImmediate
+          if (typeof window !== "undefined") {
+              requestTick = setImmediate.bind(window, flush);
+          } else {
+              requestTick = function () {
+                  setImmediate(flush);
+              };
           }
-      };
 
+      } else if (typeof MessageChannel !== "undefined") {
+          // modern browsers
+          // http://www.nonblocking.io/2011/06/windownexttick.html
+          var channel = new MessageChannel();
+          // At least Safari Version 6.0.5 (8536.30.1) intermittently cannot create
+          // working message ports the first time a page loads.
+          channel.port1.onmessage = function () {
+              requestTick = requestPortTick;
+              channel.port1.onmessage = flush;
+              flush();
+          };
+          var requestPortTick = function () {
+              // Opera requires us to provide a message payload, regardless of
+              // whether we use it.
+              channel.port2.postMessage(0);
+          };
+          requestTick = function () {
+              setTimeout(flush, 0);
+              requestPortTick();
+          };
 
-      features.toggle = function(k) {
-          if (_features[k]) {
-              (function(f) { return f.enabled ? f.disable() : f.enable(); }(_features[k]));
-              update();
+      } else {
+          // old browsers
+          requestTick = function () {
+              setTimeout(flush, 0);
+          };
+      }
+      // runs a task after all other tasks have been run
+      // this is useful for unhandled rejection tracking that needs to happen
+      // after all `then`d tasks have been run.
+      nextTick.runAfter = function (task) {
+          laterQueue.push(task);
+          if (!flushing) {
+              flushing = true;
+              requestTick();
           }
       };
+      return nextTick;
+  })();
 
-
-      features.resetStats = function() {
-          for (var i = 0; i < _keys.length; i++) {
-              _features[_keys[i]].count = 0;
-          }
-          dispatch$$1.call('change');
+  // Attempt to make generics safe in the face of downstream
+  // modifications.
+  // There is no situation where this is necessary.
+  // If you need a security guarantee, these primordials need to be
+  // deeply frozen anyway, and if you don’t need a security guarantee,
+  // this is just plain paranoid.
+  // However, this **might** have the nice side-effect of reducing the size of
+  // the minified code by reducing x.call() to merely x()
+  // See Mark Miller’s explanation of what this does.
+  // http://wiki.ecmascript.org/doku.php?id=conventions:safe_meta_programming
+  var call = Function.call;
+  function uncurryThis(f) {
+      return function () {
+          return call.apply(f, arguments);
       };
+  }
+  // This is equivalent, but slower:
+  // uncurryThis = Function_bind.bind(Function_bind.call);
+  // http://jsperf.com/uncurrythis
 
+  var array_slice = uncurryThis(Array.prototype.slice);
 
-      features.gatherStats = function(d, resolver, dimensions) {
-          var needsRedraw = false,
-              type = groupBy(d, function(ent) { return ent.type; }),
-              entities = [].concat(type.relation || [], type.way || [], type.node || []),
-              currHidden, geometry, matches, i, j;
-
-          for (i = 0; i < _keys.length; i++) {
-              _features[_keys[i]].count = 0;
-          }
-
-          // adjust the threshold for point/building culling based on viewport size..
-          // a _cullFactor of 1 corresponds to a 1000x1000px viewport..
-          _cullFactor = dimensions[0] * dimensions[1] / 1000000;
-
-          for (i = 0; i < entities.length; i++) {
-              geometry = entities[i].geometry(resolver);
-              if (!(geometry === 'vertex' || geometry === 'relation')) {
-                  matches = Object.keys(features.getMatches(entities[i], resolver, geometry));
-                  for (j = 0; j < matches.length; j++) {
-                      _features[matches[j]].count++;
+  var array_reduce = uncurryThis(
+      Array.prototype.reduce || function (callback, basis) {
+          var index = 0,
+              length = this.length;
+          // concerning the initial value, if one is not provided
+          if (arguments.length === 1) {
+              // seek to the first value in the array, accounting
+              // for the possibility that is is a sparse array
+              do {
+                  if (index in this) {
+                      basis = this[index++];
+                      break;
+                  }
+                  if (++index >= length) {
+                      throw new TypeError();
                   }
+              } while (1);
+          }
+          // reduce
+          for (; index < length; index++) {
+              // account for the possibility that the array is sparse
+              if (index in this) {
+                  basis = callback(basis, this[index], index);
               }
           }
+          return basis;
+      }
+  );
 
-          currHidden = features.hidden();
-          if (currHidden !== _hidden) {
-              _hidden = currHidden;
-              needsRedraw = true;
-              dispatch$$1.call('change');
+  var array_indexOf = uncurryThis(
+      Array.prototype.indexOf || function (value) {
+          // not a very good shim, but good enough for our one use of it
+          for (var i = 0; i < this.length; i++) {
+              if (this[i] === value) {
+                  return i;
+              }
           }
+          return -1;
+      }
+  );
 
-          return needsRedraw;
-      };
-
+  var array_map = uncurryThis(
+      Array.prototype.map || function (callback, thisp) {
+          var self = this;
+          var collect = [];
+          array_reduce(self, function (undefined$1, value, index) {
+              collect.push(callback.call(thisp, value, index, self));
+          }, void 0);
+          return collect;
+      }
+  );
 
-      features.stats = function() {
-          for (var i = 0; i < _keys.length; i++) {
-              _stats[_keys[i]] = _features[_keys[i]].count;
-          }
+  var object_create = Object.create || function (prototype) {
+      function Type() { }
+      Type.prototype = prototype;
+      return new Type();
+  };
 
-          return _stats;
-      };
+  var object_defineProperty = Object.defineProperty || function (obj, prop, descriptor) {
+      obj[prop] = descriptor.value;
+      return obj;
+  };
 
+  var object_hasOwnProperty = uncurryThis(Object.prototype.hasOwnProperty);
 
-      features.clear = function(d) {
-          for (var i = 0; i < d.length; i++) {
-              features.clearEntity(d[i]);
+  var object_keys = Object.keys || function (object) {
+      var keys = [];
+      for (var key in object) {
+          if (object_hasOwnProperty(object, key)) {
+              keys.push(key);
           }
-      };
+      }
+      return keys;
+  };
 
+  var object_toString = uncurryThis(Object.prototype.toString);
 
-      features.clearEntity = function(entity) {
-          delete _cache[osmEntity$$1.key(entity)];
-      };
+  function isObject(value) {
+      return value === Object(value);
+  }
 
+  // generator related shims
 
-      features.reset = function() {
-          _cache = {};
+  // FIXME: Remove this function once ES6 generators are in SpiderMonkey.
+  function isStopIteration(exception) {
+      return (
+          object_toString(exception) === "[object StopIteration]" ||
+          exception instanceof QReturnValue
+      );
+  }
+
+  // FIXME: Remove this helper and Q.return once ES6 generators are in
+  // SpiderMonkey.
+  var QReturnValue;
+  if (typeof ReturnValue !== "undefined") {
+      QReturnValue = ReturnValue;
+  } else {
+      QReturnValue = function (value) {
+          this.value = value;
       };
+  }
 
+  // long stack traces
 
-      features.getMatches = function(entity, resolver, geometry) {
-          if (geometry === 'vertex' || geometry === 'relation') return {};
+  var STACK_JUMP_SEPARATOR = "From previous event:";
 
-          var ent = osmEntity$$1.key(entity);
-          if (!_cache[ent]) {
-              _cache[ent] = {};
+  function makeStackTraceLong(error, promise) {
+      // If possible, transform the error stack trace by removing Node and Q
+      // cruft, then concatenating with the stack trace of `promise`. See #57.
+      if (hasStacks &&
+          promise.stack &&
+          typeof error === "object" &&
+          error !== null &&
+          error.stack
+      ) {
+          var stacks = [];
+          for (var p = promise; !!p; p = p.source) {
+              if (p.stack && (!error.__minimumStackCounter__ || error.__minimumStackCounter__ > p.stackCounter)) {
+                  object_defineProperty(error, "__minimumStackCounter__", {value: p.stackCounter, configurable: true});
+                  stacks.unshift(p.stack);
+              }
           }
+          stacks.unshift(error.stack);
 
-          if (!_cache[ent].matches) {
-              var matches = {},
-                  hasMatch = false;
-
-              for (var i = 0; i < _keys.length; i++) {
-                  if (_keys[i] === 'others') {
-                      if (hasMatch) continue;
+          var concatedStacks = stacks.join("\n" + STACK_JUMP_SEPARATOR + "\n");
+          var stack = filterStackString(concatedStacks);
+          object_defineProperty(error, "stack", {value: stack, configurable: true});
+      }
+  }
 
-                      // Multipolygon members:
-                      // If an entity...
-                      //   1. is a way that hasn't matched other 'interesting' feature rules,
-                      //   2. and it belongs to a single parent multipolygon relation
-                      // ...then match whatever feature rules the parent multipolygon has matched.
-                      // see #2548, #2887
-                      //
-                      // IMPORTANT:
-                      // For this to work, getMatches must be called on relations before ways.
-                      //
-                      if (entity.type === 'way') {
-                          var parents = features.getParents(entity, resolver, geometry);
-                          if (parents.length === 1 && parents[0].isMultipolygon()) {
-                              var pkey = osmEntity$$1.key(parents[0]);
-                              if (_cache[pkey] && _cache[pkey].matches) {
-                                  matches = clone(_cache[pkey].matches);
-                                  continue;
-                              }
-                          }
-                      }
-                  }
+  function filterStackString(stackString) {
+      var lines = stackString.split("\n");
+      var desiredLines = [];
+      for (var i = 0; i < lines.length; ++i) {
+          var line = lines[i];
 
-                  if (_features[_keys[i]].filter(entity, resolver, geometry)) {
-                      matches[_keys[i]] = hasMatch = true;
-                  }
-              }
-              _cache[ent].matches = matches;
+          if (!isInternalFrame(line) && !isNodeFrame(line) && line) {
+              desiredLines.push(line);
           }
+      }
+      return desiredLines.join("\n");
+  }
 
-          return _cache[ent].matches;
-      };
-
+  function isNodeFrame(stackLine) {
+      return stackLine.indexOf("(module.js:") !== -1 ||
+             stackLine.indexOf("(node.js:") !== -1;
+  }
 
-      features.getParents = function(entity, resolver, geometry) {
-          if (geometry === 'point') return [];
+  function getFileNameAndLineNumber(stackLine) {
+      // Named functions: "at functionName (filename:lineNumber:columnNumber)"
+      // In IE10 function name can have spaces ("Anonymous function") O_o
+      var attempt1 = /at .+ \((.+):(\d+):(?:\d+)\)$/.exec(stackLine);
+      if (attempt1) {
+          return [attempt1[1], Number(attempt1[2])];
+      }
 
-          var ent = osmEntity$$1.key(entity);
-          if (!_cache[ent]) {
-              _cache[ent] = {};
-          }
+      // Anonymous functions: "at filename:lineNumber:columnNumber"
+      var attempt2 = /at ([^ ]+):(\d+):(?:\d+)$/.exec(stackLine);
+      if (attempt2) {
+          return [attempt2[1], Number(attempt2[2])];
+      }
 
-          if (!_cache[ent].parents) {
-              var parents = [];
-              if (geometry === 'vertex') {
-                  parents = resolver.parentWays(entity);
-              } else {   // 'line', 'area', 'relation'
-                  parents = resolver.parentRelations(entity);
-              }
-              _cache[ent].parents = parents;
-          }
-          return _cache[ent].parents;
-      };
+      // Firefox style: "function@filename:lineNumber or @filename:lineNumber"
+      var attempt3 = /.*@(.+):(\d+)$/.exec(stackLine);
+      if (attempt3) {
+          return [attempt3[1], Number(attempt3[2])];
+      }
+  }
 
+  function isInternalFrame(stackLine) {
+      var fileNameAndLineNumber = getFileNameAndLineNumber(stackLine);
 
-      features.isHiddenFeature = function(entity, resolver, geometry) {
-          if (!_hidden.length) return false;
-          if (!entity.version) return false;
+      if (!fileNameAndLineNumber) {
+          return false;
+      }
 
-          var matches = features.getMatches(entity, resolver, geometry);
+      var fileName = fileNameAndLineNumber[0];
+      var lineNumber = fileNameAndLineNumber[1];
 
-          for (var i = 0; i < _hidden.length; i++) {
-              if (matches[_hidden[i]]) return true;
-          }
-          return false;
-      };
+      return fileName === qFileName &&
+          lineNumber >= qStartingLine &&
+          lineNumber <= qEndingLine;
+  }
 
+  // discover own file name and line number range for filtering stack
+  // traces
+  function captureLine() {
+      if (!hasStacks) {
+          return;
+      }
 
-      features.isHiddenChild = function(entity, resolver, geometry) {
-          if (!_hidden.length) return false;
-          if (!entity.version || geometry === 'point') return false;
+      try {
+          throw new Error();
+      } catch (e) {
+          var lines = e.stack.split("\n");
+          var firstLine = lines[0].indexOf("@") > 0 ? lines[1] : lines[2];
+          var fileNameAndLineNumber = getFileNameAndLineNumber(firstLine);
+          if (!fileNameAndLineNumber) {
+              return;
+          }
 
-          var parents = features.getParents(entity, resolver, geometry);
-          if (!parents.length) return false;
+          qFileName = fileNameAndLineNumber[0];
+          return fileNameAndLineNumber[1];
+      }
+  }
 
-          for (var i = 0; i < parents.length; i++) {
-              if (!features.isHidden(parents[i], resolver, parents[i].geometry(resolver))) {
-                  return false;
-              }
+  function deprecate(callback, name, alternative) {
+      return function () {
+          if (typeof console !== "undefined" &&
+              typeof console.warn === "function") {
+              console.warn(name + " is deprecated, use " + alternative +
+                           " instead.", new Error("").stack);
           }
-          return true;
+          return callback.apply(callback, arguments);
       };
+  }
 
+  // end of shims
+  // beginning of real work
 
-      features.hasHiddenConnections = function(entity, resolver) {
-          if (!_hidden.length) return false;
-          var childNodes, connections;
-
-          if (entity.type === 'midpoint') {
-              childNodes = [resolver.entity(entity.edge[0]), resolver.entity(entity.edge[1])];
-              connections = [];
-          } else {
-              childNodes = entity.nodes ? resolver.childNodes(entity) : [];
-              connections = features.getParents(entity, resolver, entity.geometry(resolver));
-          }
+  /**
+   * Constructs a promise for an immediate reference, passes promises through, or
+   * coerces promises from different systems.
+   * @param value immediate reference or promise
+   */
+  function Q(value) {
+      // If the object is already a Promise, return it directly.  This enables
+      // the resolve function to both be used to created references from objects,
+      // but to tolerably coerce non-promises to promises.
+      if (value instanceof Promise) {
+          return value;
+      }
 
-          // gather ways connected to child nodes..
-          connections = reduce(childNodes, function(result, e) {
-              return resolver.isShared(e) ? union(result, resolver.parentWays(e)) : result;
-          }, connections);
+      // assimilate thenables
+      if (isPromiseAlike(value)) {
+          return coerce(value);
+      } else {
+          return fulfill(value);
+      }
+  }
+  Q.resolve = Q;
 
-          return connections.length ? some(connections, function(e) {
-              return features.isHidden(e, resolver, e.geometry(resolver));
-          }) : false;
-      };
+  /**
+   * Performs a task in a future turn of the event loop.
+   * @param {Function} task
+   */
+  Q.nextTick = nextTick;
 
+  /**
+   * Controls whether or not long stack traces will be on
+   */
+  Q.longStackSupport = false;
 
-      features.isHidden = function(entity, resolver, geometry) {
-          if (!_hidden.length) return false;
-          if (!entity.version) return false;
+  /**
+   * The counter is used to determine the stopping point for building
+   * long stack traces. In makeStackTraceLong we walk backwards through
+   * the linked list of promises, only stacks which were created before
+   * the rejection are concatenated.
+   */
+  var longStackCounter = 1;
 
-          var fn = (geometry === 'vertex' ? features.isHiddenChild : features.isHiddenFeature);
-          return fn(entity, resolver, geometry);
-      };
+  // enable long stacks if Q_DEBUG is set
+  if (typeof process === "object" && process && process.env && process.env.Q_DEBUG) {
+      Q.longStackSupport = true;
+  }
 
+  /**
+   * Constructs a {promise, resolve, reject} object.
+   *
+   * `resolve` is a callback to invoke with a more resolved value for the
+   * promise. To fulfill the promise, invoke `resolve` with any value that is
+   * not a thenable. To reject the promise, invoke `resolve` with a rejected
+   * thenable, or invoke `reject` with the reason directly. To resolve the
+   * promise to another thenable, thus putting it in the same state, invoke
+   * `resolve` with that other thenable.
+   */
+  Q.defer = defer;
+  function defer() {
+      // if "messages" is an "Array", that indicates that the promise has not yet
+      // been resolved.  If it is "undefined", it has been resolved.  Each
+      // element of the messages array is itself an array of complete arguments to
+      // forward to the resolved promise.  We coerce the resolution value to a
+      // promise using the `resolve` function because it handles both fully
+      // non-thenable values and other thenables gracefully.
+      var messages = [], progressListeners = [], resolvedPromise;
 
-      features.filter = function(d, resolver) {
-          if (!_hidden.length) return d;
+      var deferred = object_create(defer.prototype);
+      var promise = object_create(Promise.prototype);
 
-          var result = [];
-          for (var i = 0; i < d.length; i++) {
-              var entity = d[i];
-              if (!features.isHidden(entity, resolver, entity.geometry(resolver))) {
-                  result.push(entity);
+      promise.promiseDispatch = function (resolve, op, operands) {
+          var args = array_slice(arguments);
+          if (messages) {
+              messages.push(args);
+              if (op === "when" && operands[1]) { // progress operand
+                  progressListeners.push(operands[1]);
               }
+          } else {
+              Q.nextTick(function () {
+                  resolvedPromise.promiseDispatch.apply(resolvedPromise, args);
+              });
           }
-          return result;
       };
 
-
-      features.init = function() {
-          var storage = context.storage('disabled-features');
-          if (storage) {
-              var storageDisabled = storage.replace(/;/g, ',').split(',');
-              storageDisabled.forEach(features.disable);
+      // XXX deprecated
+      promise.valueOf = function () {
+          if (messages) {
+              return promise;
           }
-
-          var q = utilStringQs(window.location.hash.substring(1));
-          if (q.disable_features) {
-              var hashDisabled = q.disable_features.replace(/;/g, ',').split(',');
-              hashDisabled.forEach(features.disable);
+          var nearerValue = nearer(resolvedPromise);
+          if (isPromise(nearerValue)) {
+              resolvedPromise = nearerValue; // shorten chain
           }
+          return nearerValue;
       };
 
-      return utilRebind(features, dispatch$$1, 'on');
-  }
+      promise.inspect = function () {
+          if (!resolvedPromise) {
+              return { state: "pending" };
+          }
+          return resolvedPromise.inspect();
+      };
 
-  function utilBindOnce(target, type, listener, capture) {
-      var typeOnce = type + '.once';
-      function one() {
-          target.on(typeOnce, null);
-          listener.apply(this, arguments);
+      if (Q.longStackSupport && hasStacks) {
+          try {
+              throw new Error();
+          } catch (e) {
+              // NOTE: don't try to use `Error.captureStackTrace` or transfer the
+              // accessor around; that causes memory leaks as per GH-111. Just
+              // reify the stack trace as a string ASAP.
+              //
+              // At the same time, cut off the first line; it's always just
+              // "[object Promise]\n", as per the `toString`.
+              promise.stack = e.stack.substring(e.stack.indexOf("\n") + 1);
+              promise.stackCounter = longStackCounter++;
+          }
       }
-      target.on(typeOnce, one, capture);
-      return this;
-  }
-
-  // constants
-  var TILESIZE = 256;
-  var kMin = geoZoomToScale(2, TILESIZE);
-  var kMax = geoZoomToScale(24, TILESIZE);
-
-  function clamp(num, min, max) {
-      return Math.max(min, Math.min(num, max));
-  }
-
-
-  function rendererMap(context) {
-      var dispatch$$1 = dispatch('move', 'drawn');
-      var projection = context.projection;
-      var curtainProjection = context.curtainProjection;
-      var drawLayers = svgLayers(projection, context);
-      var drawPoints = svgPoints$$1(projection, context);
-      var drawVertices = svgVertices$$1(projection, context);
-      var drawLines = svgLines$$1(projection, context);
-      var drawAreas = svgAreas$$1(projection, context);
-      var drawMidpoints = svgMidpoints$$1(projection, context);
-      var drawLabels = svgLabels(projection, context);
 
-      var _selection = select(null);
-      var supersurface = select(null);
-      var wrapper = select(null);
-      var surface = select(null);
+      // NOTE: we do the checks for `resolvedPromise` in each method, instead of
+      // consolidating them into `become`, since otherwise we'd create new
+      // promises with the lines `become(whatever(value))`. See e.g. GH-252.
 
-      var _dimensions = [1, 1];
-      var _dblClickEnabled = true;
-      var _redrawEnabled = true;
-      var _gestureTransformStart;
-      var _transformStart = projection.transform();
-      var _transformLast;
-      var _isTransformed = false;
-      var _minzoom = 0;
-      var _getMouseCoords;
-      var _mouseEvent;
+      function become(newPromise) {
+          resolvedPromise = newPromise;
 
-      var zoom$$1 = d3_zoom()
-          .scaleExtent([kMin, kMax])
-          .interpolate(interpolate)
-          .filter(zoomEventFilter)
-          .on('zoom', zoomPan);
+          if (Q.longStackSupport && hasStacks) {
+              // Only hold a reference to the new promise if long stacks
+              // are enabled to reduce memory usage
+              promise.source = newPromise;
+          }
 
-      var scheduleRedraw = throttle(redraw, 750);
-      // var isRedrawScheduled = false;
-      // var pendingRedrawCall;
-      // function scheduleRedraw() {
-      //     // Only schedule the redraw if one has not already been set.
-      //     if (isRedrawScheduled) return;
-      //     isRedrawScheduled = true;
-      //     var that = this;
-      //     var args = arguments;
-      //     pendingRedrawCall = window.requestIdleCallback(function () {
-      //         // Reset the boolean so future redraws can be set.
-      //         isRedrawScheduled = false;
-      //         redraw.apply(that, args);
-      //     }, { timeout: 1400 });
-      // }
+          array_reduce(messages, function (undefined$1, message) {
+              Q.nextTick(function () {
+                  newPromise.promiseDispatch.apply(newPromise, message);
+              });
+          }, void 0);
 
-      function cancelPendingRedraw() {
-          scheduleRedraw.cancel();
-          // isRedrawScheduled = false;
-          // window.cancelIdleCallback(pendingRedrawCall);
+          messages = void 0;
+          progressListeners = void 0;
       }
 
+      deferred.promise = promise;
+      deferred.resolve = function (value) {
+          if (resolvedPromise) {
+              return;
+          }
 
-      function map(selection$$1) {
-          _selection = selection$$1;
+          become(Q(value));
+      };
 
-          context
-              .on('change.map', immediateRedraw);
+      deferred.fulfill = function (value) {
+          if (resolvedPromise) {
+              return;
+          }
 
-          var osm = context.connection();
-          if (osm) {
-              osm.on('change.map', immediateRedraw);
+          become(fulfill(value));
+      };
+      deferred.reject = function (reason) {
+          if (resolvedPromise) {
+              return;
           }
 
-          context.history()
-              .on('change.map', immediateRedraw)
-              .on('undone.map redone.map', function(stack) {
-                  var mode = context.mode().id;
-                  if (mode !== 'browse' && mode !== 'select') return;
+          become(reject(reason));
+      };
+      deferred.notify = function (progress) {
+          if (resolvedPromise) {
+              return;
+          }
 
-                  var followSelected = false;
-                  if (Array.isArray(stack.selectedIDs)) {
-                      followSelected = (stack.selectedIDs.length === 1 && stack.selectedIDs[0][0] === 'n');
-                      context.enter(
-                          modeSelect(context, stack.selectedIDs).follow(followSelected)
-                      );
-                  }
-                  if (!followSelected && stack.transform) {
-                      map.transformEase(stack.transform);
-                  }
+          array_reduce(progressListeners, function (undefined$1, progressListener) {
+              Q.nextTick(function () {
+                  progressListener(progress);
               });
+          }, void 0);
+      };
 
-          context.background()
-              .on('change.map', immediateRedraw);
-
-          context.features()
-              .on('redraw.map', immediateRedraw);
+      return deferred;
+  }
 
-          drawLayers
-              .on('change.map', function() {
-                  context.background().updateImagery();
-                  immediateRedraw();
-              });
+  /**
+   * Creates a Node-style callback that will resolve or reject the deferred
+   * promise.
+   * @returns a nodeback
+   */
+  defer.prototype.makeNodeResolver = function () {
+      var self = this;
+      return function (error, value) {
+          if (error) {
+              self.reject(error);
+          } else if (arguments.length > 2) {
+              self.resolve(array_slice(arguments, 1));
+          } else {
+              self.resolve(value);
+          }
+      };
+  };
 
-          selection$$1
-              .on('dblclick.map', dblClick)
-              .call(zoom$$1)
-              .call(zoom$$1.transform, projection.transform());
+  /**
+   * @param resolver {Function} a function that returns nothing and accepts
+   * the resolve, reject, and notify functions for a deferred.
+   * @returns a promise that may be resolved with the given resolve and reject
+   * functions, or rejected by a thrown exception in resolver
+   */
+  Q.Promise = promise; // ES6
+  Q.promise = promise;
+  function promise(resolver) {
+      if (typeof resolver !== "function") {
+          throw new TypeError("resolver must be a function.");
+      }
+      var deferred = defer();
+      try {
+          resolver(deferred.resolve, deferred.reject, deferred.notify);
+      } catch (reason) {
+          deferred.reject(reason);
+      }
+      return deferred.promise;
+  }
 
-          supersurface = selection$$1.append('div')
-              .attr('id', 'supersurface')
-              .call(utilSetTransform, 0, 0);
+  promise.race = race; // ES6
+  promise.all = all; // ES6
+  promise.reject = reject; // ES6
+  promise.resolve = Q; // ES6
 
-          // Need a wrapper div because Opera can't cope with an absolutely positioned
-          // SVG element: http://bl.ocks.org/jfirebaugh/6fbfbd922552bf776c16
-          wrapper = supersurface
-              .append('div')
-              .attr('class', 'layer layer-data');
+  // XXX experimental.  This method is a way to denote that a local value is
+  // serializable and should be immediately dispatched to a remote upon request,
+  // instead of passing a reference.
+  Q.passByCopy = function (object) {
+      //freeze(object);
+      //passByCopies.set(object, true);
+      return object;
+  };
 
-          map.surface = surface = wrapper
-              .call(drawLayers)
-              .selectAll('.surface')
-              .attr('id', 'surface');
+  Promise.prototype.passByCopy = function () {
+      //freeze(object);
+      //passByCopies.set(object, true);
+      return this;
+  };
 
-          surface
-              .call(drawLabels.observe)
-              .on('gesturestart.surface', function() {
-                  _gestureTransformStart = projection.transform();
-              })
-              .on('gesturechange.surface', gestureChange)
-              .on('mousedown.zoom', function() {
-                  if (event.button === 2) {
-                      event.stopPropagation();
-                  }
-              }, true)
-              .on('mouseup.zoom', function() {
-                  if (resetTransform()) {
-                      immediateRedraw();
-                  }
-              })
-              .on('mousemove.map', function() {
-                  _mouseEvent = event;
-              })
-              .on('mouseover.vertices', function() {
-                  if (map.editable() && !_isTransformed) {
-                      var hover = event.target.__data__;
-                      surface.call(drawVertices.drawHover, context.graph(), hover, map.extent());
-                      dispatch$$1.call('drawn', this, { full: false });
-                  }
-              })
-              .on('mouseout.vertices', function() {
-                  if (map.editable() && !_isTransformed) {
-                      var hover = event.relatedTarget && event.relatedTarget.__data__;
-                      surface.call(drawVertices.drawHover, context.graph(), hover, map.extent());
-                      dispatch$$1.call('drawn', this, { full: false });
-                  }
-              });
+  /**
+   * If two promises eventually fulfill to the same value, promises that value,
+   * but otherwise rejects.
+   * @param x {Any*}
+   * @param y {Any*}
+   * @returns {Any*} a promise for x and y if they are the same, but a rejection
+   * otherwise.
+   *
+   */
+  Q.join = function (x, y) {
+      return Q(x).join(y);
+  };
 
-          supersurface
-              .call(context.background());
+  Promise.prototype.join = function (that) {
+      return Q([this, that]).spread(function (x, y) {
+          if (x === y) {
+              // TODO: "===" should be Object.is or equiv
+              return x;
+          } else {
+              throw new Error("Q can't join: not the same: " + x + " " + y);
+          }
+      });
+  };
 
-          context.on('enter.map',  function() {
-              if (map.editable() && !_isTransformed) {
-                  // redraw immediately any objects affected by a change in selectedIDs.
-                  var graph = context.graph();
-                  var selectedAndParents = {};
-                  context.selectedIDs().forEach(function(id) {
-                      var entity = graph.hasEntity(id);
-                      if (entity) {
-                          selectedAndParents[entity.id] = entity;
-                          if (entity.type === 'node') {
-                              graph.parentWays(entity).forEach(function(parent) {
-                                  selectedAndParents[parent.id] = parent;
-                              });
-                          }
-                      }
-                  });
-                  var data = values$1(selectedAndParents);
-                  var filter = function(d) { return d.id in selectedAndParents; };
+  /**
+   * Returns a promise for the first of an array of promises to become settled.
+   * @param answers {Array[Any*]} promises to race
+   * @returns {Any*} the first promise to be settled
+   */
+  Q.race = race;
+  function race(answerPs) {
+      return promise(function (resolve, reject) {
+          // Switch to this once we can assume at least ES5
+          // answerPs.forEach(function (answerP) {
+          //     Q(answerP).then(resolve, reject);
+          // });
+          // Use this in the meantime
+          for (var i = 0, len = answerPs.length; i < len; i++) {
+              Q(answerPs[i]).then(resolve, reject);
+          }
+      });
+  }
 
-                  data = context.features().filter(data, graph);
+  Promise.prototype.race = function () {
+      return this.then(Q.race);
+  };
 
-                  surface
-                      .call(drawVertices.drawSelected, graph, map.extent())
-                      .call(drawLines, graph, data, filter)
-                      .call(drawAreas, graph, data, filter)
-                      .call(drawMidpoints, graph, data, filter, map.trimmedExtent());
+  /**
+   * Constructs a Promise with a promise descriptor object and optional fallback
+   * function.  The descriptor contains methods like when(rejected), get(name),
+   * set(name, value), post(name, args), and delete(name), which all
+   * return either a value, a promise for a value, or a rejection.  The fallback
+   * accepts the operation name, a resolver, and any further arguments that would
+   * have been forwarded to the appropriate method above had a method been
+   * provided with the proper name.  The API makes no guarantees about the nature
+   * of the returned object, apart from that it is usable whereever promises are
+   * bought and sold.
+   */
+  Q.makePromise = Promise;
+  function Promise(descriptor, fallback, inspect) {
+      if (fallback === void 0) {
+          fallback = function (op) {
+              return reject(new Error(
+                  "Promise does not support operation: " + op
+              ));
+          };
+      }
+      if (inspect === void 0) {
+          inspect = function () {
+              return {state: "unknown"};
+          };
+      }
 
-                  dispatch$$1.call('drawn', this, { full: false });
+      var promise = object_create(Promise.prototype);
 
-                  // redraw everything else later
-                  scheduleRedraw();
+      promise.promiseDispatch = function (resolve, op, args) {
+          var result;
+          try {
+              if (descriptor[op]) {
+                  result = descriptor[op].apply(promise, args);
+              } else {
+                  result = fallback.call(promise, op, args);
               }
-          });
-
-          map.dimensions(utilGetDimensions(selection$$1));
-      }
+          } catch (exception) {
+              result = reject(exception);
+          }
+          if (resolve) {
+              resolve(result);
+          }
+      };
 
+      promise.inspect = inspect;
 
-      function zoomEventFilter() {
-          // Fix for #2151, (see also d3/d3-zoom#60, d3/d3-brush#18)
-          // Intercept `mousedown` and check if there is an orphaned zoom gesture.
-          // This can happen if a previous `mousedown` occurred without a `mouseup`.
-          // If we detect this, dispatch `mouseup` to complete the orphaned gesture,
-          // so that d3-zoom won't stop propagation of new `mousedown` events.
-          if (event.type === 'mousedown') {
-              var hasOrphan = false;
-              var listeners = window.__on;
-              for (var i = 0; i < listeners.length; i++) {
-                  var listener = listeners[i];
-                  if (listener.name === 'zoom' && listener.type === 'mouseup') {
-                      hasOrphan = true;
-                      break;
-                  }
-              }
-              if (hasOrphan) {
-                  var event$$1 = window.CustomEvent;
-                  if (event$$1) {
-                      event$$1 = new event$$1('mouseup');
-                  } else {
-                      event$$1 = window.document.createEvent('Event');
-                      event$$1.initEvent('mouseup', false, false);
-                  }
-                  // Event needs to be dispatched with an event.view property.
-                  event$$1.view = window;
-                  window.dispatchEvent(event$$1);
-              }
+      // XXX deprecated `valueOf` and `exception` support
+      if (inspect) {
+          var inspected = inspect();
+          if (inspected.state === "rejected") {
+              promise.exception = inspected.reason;
           }
 
-          return event.button !== 2;   // ignore right clicks
+          promise.valueOf = function () {
+              var inspected = inspect();
+              if (inspected.state === "pending" ||
+                  inspected.state === "rejected") {
+                  return promise;
+              }
+              return inspected.value;
+          };
       }
 
+      return promise;
+  }
 
-      function pxCenter() {
-          return [_dimensions[0] / 2, _dimensions[1] / 2];
+  Promise.prototype.toString = function () {
+      return "[object Promise]";
+  };
+
+  Promise.prototype.then = function (fulfilled, rejected, progressed) {
+      var self = this;
+      var deferred = defer();
+      var done = false;   // ensure the untrusted promise makes at most a
+                          // single call to one of the callbacks
+
+      function _fulfilled(value) {
+          try {
+              return typeof fulfilled === "function" ? fulfilled(value) : value;
+          } catch (exception) {
+              return reject(exception);
+          }
       }
 
+      function _rejected(exception) {
+          if (typeof rejected === "function") {
+              makeStackTraceLong(exception, self);
+              try {
+                  return rejected(exception);
+              } catch (newException) {
+                  return reject(newException);
+              }
+          }
+          return reject(exception);
+      }
 
-      function drawVector(difference, extent) {
-          var mode = context.mode();
-          var graph = context.graph();
-          var features = context.features();
-          var all = context.intersects(map.extent());
-          var fullRedraw = false;
-          var data;
-          var filter;
+      function _progressed(value) {
+          return typeof progressed === "function" ? progressed(value) : value;
+      }
 
-          if (difference) {
-              var complete = difference.complete(map.extent());
-              data = compact(values$1(complete));
-              filter = function(d) { return d.id in complete; };
-              features.clear(data);
+      Q.nextTick(function () {
+          self.promiseDispatch(function (value) {
+              if (done) {
+                  return;
+              }
+              done = true;
 
-          } else {
-              // force a full redraw if gatherStats detects that a feature
-              // should be auto-hidden (e.g. points or buildings)..
-              if (features.gatherStats(all, graph, _dimensions)) {
-                  extent = undefined;
+              deferred.resolve(_fulfilled(value));
+          }, "when", [function (exception) {
+              if (done) {
+                  return;
               }
+              done = true;
 
-              if (extent) {
-                  data = context.intersects(map.extent().intersection(extent));
-                  var set$$1 = set$2(map$3(data, 'id'));
-                  filter = function(d) { return set$$1.has(d.id); };
+              deferred.resolve(_rejected(exception));
+          }]);
+      });
 
+      // Progress propagator need to be attached in the current tick.
+      self.promiseDispatch(void 0, "when", [void 0, function (value) {
+          var newValue;
+          var threw = false;
+          try {
+              newValue = _progressed(value);
+          } catch (e) {
+              threw = true;
+              if (Q.onerror) {
+                  Q.onerror(e);
               } else {
-                  data = all;
-                  fullRedraw = true;
-                  filter = utilFunctor(true);
+                  throw e;
               }
           }
 
-          data = features.filter(data, graph);
+          if (!threw) {
+              deferred.notify(newValue);
+          }
+      }]);
+
+      return deferred.promise;
+  };
 
-          if (mode && mode.id === 'select') {
-              // update selected vertices - the user might have just double-clicked a way,
-              // creating a new vertex, triggering a partial redraw without a mode change
-              surface.call(drawVertices.drawSelected, graph, map.extent());
-          }
+  Q.tap = function (promise, callback) {
+      return Q(promise).tap(callback);
+  };
 
-          surface
-              .call(drawVertices, graph, data, filter, map.extent(), fullRedraw)
-              .call(drawLines, graph, data, filter)
-              .call(drawAreas, graph, data, filter)
-              .call(drawMidpoints, graph, data, filter, map.trimmedExtent())
-              .call(drawLabels, graph, data, filter, _dimensions, fullRedraw)
-              .call(drawPoints, graph, data, filter);
+  /**
+   * Works almost like "finally", but not called for rejections.
+   * Original resolution value is passed through callback unaffected.
+   * Callback may return a promise that will be awaited for.
+   * @param {Function} callback
+   * @returns {Q.Promise}
+   * @example
+   * doSomething()
+   *   .then(...)
+   *   .tap(console.log)
+   *   .then(...);
+   */
+  Promise.prototype.tap = function (callback) {
+      callback = Q(callback);
 
-          dispatch$$1.call('drawn', this, {full: true});
-      }
+      return this.then(function (value) {
+          return callback.fcall(value).thenResolve(value);
+      });
+  };
 
+  /**
+   * Registers an observer on a promise.
+   *
+   * Guarantees:
+   *
+   * 1. that fulfilled and rejected will be called only once.
+   * 2. that either the fulfilled callback or the rejected callback will be
+   *    called, but not both.
+   * 3. that fulfilled and rejected will not be called in this turn.
+   *
+   * @param value      promise or immediate reference to observe
+   * @param fulfilled  function to be called with the fulfilled value
+   * @param rejected   function to be called with the rejection exception
+   * @param progressed function to be called on any progress notifications
+   * @return promise for the return value from the invoked callback
+   */
+  Q.when = when;
+  function when(value, fulfilled, rejected, progressed) {
+      return Q(value).then(fulfilled, rejected, progressed);
+  }
 
-      function editOff() {
-          context.features().resetStats();
-          surface.selectAll('.layer-osm *').remove();
-          surface.selectAll('.layer-touch:not(.markers) *').remove();
+  Promise.prototype.thenResolve = function (value) {
+      return this.then(function () { return value; });
+  };
 
-          var allowed = {
-              'browse': true,
-              'save': true,
-              'select-note': true,
-              'select-data': true,
-              'select-error': true
-          };
+  Q.thenResolve = function (promise, value) {
+      return Q(promise).thenResolve(value);
+  };
 
-          var mode = context.mode();
-          if (mode && !allowed[mode.id]) {
-              context.enter(modeBrowse(context));
-          }
+  Promise.prototype.thenReject = function (reason) {
+      return this.then(function () { throw reason; });
+  };
 
-          dispatch$$1.call('drawn', this, {full: true});
-      }
+  Q.thenReject = function (promise, reason) {
+      return Q(promise).thenReject(reason);
+  };
 
+  /**
+   * If an object is not a promise, it is as "near" as possible.
+   * If a promise is rejected, it is as "near" as possible too.
+   * If it’s a fulfilled promise, the fulfillment value is nearer.
+   * If it’s a deferred promise and the deferred has been resolved, the
+   * resolution is "nearer".
+   * @param object
+   * @returns most resolved (nearest) form of the object
+   */
 
-      function dblClick() {
-          if (!_dblClickEnabled) {
-              event.preventDefault();
-              event.stopImmediatePropagation();
+  // XXX should we re-do this?
+  Q.nearer = nearer;
+  function nearer(value) {
+      if (isPromise(value)) {
+          var inspected = value.inspect();
+          if (inspected.state === "fulfilled") {
+              return inspected.value;
           }
       }
+      return value;
+  }
 
+  /**
+   * @returns whether the given object is a promise.
+   * Otherwise it is a fulfilled value.
+   */
+  Q.isPromise = isPromise;
+  function isPromise(object) {
+      return object instanceof Promise;
+  }
 
-      function gestureChange() {
-          // Remap Safari gesture events to wheel events - #5492
-          // We want these disabled most places, but enabled for zoom/unzoom on map surface
-          // https://developer.mozilla.org/en-US/docs/Web/API/GestureEvent
-          var e = event;
-          e.preventDefault();
-
-          var props = {
-              deltaMode: 0,    // dummy values to ignore in zoomPan
-              deltaY: 1,       // dummy values to ignore in zoomPan
-              clientX: e.clientX,
-              clientY: e.clientY,
-              screenX: e.screenX,
-              screenY: e.screenY,
-              x: e.x,
-              y: e.y
-          };
+  Q.isPromiseAlike = isPromiseAlike;
+  function isPromiseAlike(object) {
+      return isObject(object) && typeof object.then === "function";
+  }
 
-          var e2 = new WheelEvent('wheel', props);
-          e2._scale = e.scale;         // preserve the original scale
-          e2._rotation = e.rotation;   // preserve the original rotation
+  /**
+   * @returns whether the given object is a pending promise, meaning not
+   * fulfilled or rejected.
+   */
+  Q.isPending = isPending;
+  function isPending(object) {
+      return isPromise(object) && object.inspect().state === "pending";
+  }
 
-          _selection.node().dispatchEvent(e2);
-      }
+  Promise.prototype.isPending = function () {
+      return this.inspect().state === "pending";
+  };
 
+  /**
+   * @returns whether the given object is a value or fulfilled
+   * promise.
+   */
+  Q.isFulfilled = isFulfilled;
+  function isFulfilled(object) {
+      return !isPromise(object) || object.inspect().state === "fulfilled";
+  }
 
-      function zoomPan(manualEvent) {
-          var event$$1 = (manualEvent || event);
-          var source = event$$1.sourceEvent;
-          var eventTransform = event$$1.transform;
-          var x = eventTransform.x;
-          var y = eventTransform.y;
-          var k = eventTransform.k;
+  Promise.prototype.isFulfilled = function () {
+      return this.inspect().state === "fulfilled";
+  };
 
-          if (_transformStart.x === x &&
-              _transformStart.y === y &&
-              _transformStart.k === k) {
-              return;  // no change
-          }
+  /**
+   * @returns whether the given object is a rejected promise.
+   */
+  Q.isRejected = isRejected;
+  function isRejected(object) {
+      return isPromise(object) && object.inspect().state === "rejected";
+  }
 
-          // Special handling of 'wheel' events:
-          // They might be triggered by the user scrolling the mouse wheel,
-          // or 2-finger pinch/zoom gestures, the transform may need adjustment.
-          if (source && source.type === 'wheel') {
-              var detected = utilDetect();
-              var dX = source.deltaX;
-              var dY = source.deltaY;
-              var x2 = x;
-              var y2 = y;
-              var k2 = k;
-              var t0, p0, p1;
+  Promise.prototype.isRejected = function () {
+      return this.inspect().state === "rejected";
+  };
 
-              // Normalize mousewheel scroll speed (Firefox) - #3029
-              // If wheel delta is provided in LINE units, recalculate it in PIXEL units
-              // We are essentially redoing the calculations that occur here:
-              //   https://github.com/d3/d3-zoom/blob/78563a8348aa4133b07cac92e2595c2227ca7cd7/src/zoom.js#L203
-              // See this for more info:
-              //   https://github.com/basilfx/normalize-wheel/blob/master/src/normalizeWheel.js
-              if (source.deltaMode === 1 /* LINE */) {
-                  // Convert from lines to pixels, more if the user is scrolling fast.
-                  // (I made up the exp function to roughly match Firefox to what Chrome does)
-                  // These numbers should be floats, because integers are treated as pan gesture below.
-                  var lines = Math.abs(source.deltaY);
-                  var sign = (source.deltaY > 0) ? 1 : -1;
-                  dY = sign * clamp(
-                      Math.exp((lines - 1) * 0.75) * 4.000244140625,
-                      4.000244140625,    // min
-                      350.000244140625   // max
-                  );
+  //// BEGIN UNHANDLED REJECTION TRACKING
 
-                  // On Firefox Windows and Linux we always get +/- the scroll line amount (default 3)
-                  // There doesn't seem to be any scroll accelleration.
-                  // This multiplier increases the speed a little bit - #5512
-                  if (detected.os !== 'mac') {
-                      dY *= 5;
-                  }
+  // This promise library consumes exceptions thrown in handlers so they can be
+  // handled by a subsequent promise.  The exceptions get added to this array when
+  // they are created, and removed when they are handled.  Note that in ES6 or
+  // shimmed environments, this would naturally be a `Set`.
+  var unhandledReasons = [];
+  var unhandledRejections = [];
+  var reportedUnhandledRejections = [];
+  var trackUnhandledRejections = true;
 
-                  // recalculate x2,y2,k2
-                  t0 = _isTransformed ? _transformLast : _transformStart;
-                  p0 = _getMouseCoords(source);
-                  p1 = t0.invert(p0);
-                  k2 = t0.k * Math.pow(2, -dY / 500);
-                  x2 = p0[0] - p1[0] * k2;
-                  y2 = p0[1] - p1[1] * k2;
+  function resetUnhandledRejections() {
+      unhandledReasons.length = 0;
+      unhandledRejections.length = 0;
 
-              // 2 finger map pinch zooming (Safari) - #5492
-              // These are fake `wheel` events we made from Safari `gesturechange` events..
-              } else if (source._scale) {
-                  // recalculate x2,y2,k2
-                  t0 = _gestureTransformStart;
-                  p0 = _getMouseCoords(source);
-                  p1 = t0.invert(p0);
-                  k2 = t0.k * source._scale;
-                  x2 = p0[0] - p1[0] * k2;
-                  y2 = p0[1] - p1[1] * k2;
+      if (!trackUnhandledRejections) {
+          trackUnhandledRejections = true;
+      }
+  }
 
-              // 2 finger map pinch zooming (all browsers except Safari) - #5492
-              // Pinch zooming via the `wheel` event will always have:
-              // - `ctrlKey = true`
-              // - `deltaY` is not round integer pixels (ignore `deltaX`)
-              } else if (source.ctrlKey && !isInteger(dY)) {
-                  dY *= 6;   // slightly scale up whatever the browser gave us
+  function trackRejection(promise, reason) {
+      if (!trackUnhandledRejections) {
+          return;
+      }
+      if (typeof process === "object" && typeof process.emit === "function") {
+          Q.nextTick.runAfter(function () {
+              if (array_indexOf(unhandledRejections, promise) !== -1) {
+                  process.emit("unhandledRejection", reason, promise);
+                  reportedUnhandledRejections.push(promise);
+              }
+          });
+      }
 
-                  // recalculate x2,y2,k2
-                  t0 = _isTransformed ? _transformLast : _transformStart;
-                  p0 = _getMouseCoords(source);
-                  p1 = t0.invert(p0);
-                  k2 = t0.k * Math.pow(2, -dY / 500);
-                  x2 = p0[0] - p1[0] * k2;
-                  y2 = p0[1] - p1[1] * k2;
+      unhandledRejections.push(promise);
+      if (reason && typeof reason.stack !== "undefined") {
+          unhandledReasons.push(reason.stack);
+      } else {
+          unhandledReasons.push("(no stack) " + reason);
+      }
+  }
 
-              // Trackpad scroll zooming with shift or alt/option key down
-              } else if ((source.altKey || source.shiftKey) && isInteger(dY)) {
-                  // recalculate x2,y2,k2
-                  t0 = _isTransformed ? _transformLast : _transformStart;
-                  p0 = _getMouseCoords(source);
-                  p1 = t0.invert(p0);
-                  k2 = t0.k * Math.pow(2, -dY / 500);
-                  x2 = p0[0] - p1[0] * k2;
-                  y2 = p0[1] - p1[1] * k2;
+  function untrackRejection(promise) {
+      if (!trackUnhandledRejections) {
+          return;
+      }
 
-              // 2 finger map panning (Mac only, all browsers) - #5492, #5512
-              // Panning via the `wheel` event will always have:
-              // - `ctrlKey = false`
-              // - `deltaX`,`deltaY` are round integer pixels
-              } else if (detected.os === 'mac' && !source.ctrlKey && isInteger(dX) && isInteger(dY)) {
-                  p1 = projection.translate();
-                  x2 = p1[0] - dX;
-                  y2 = p1[1] - dY;
-                  k2 = projection.scale();
-              }
+      var at = array_indexOf(unhandledRejections, promise);
+      if (at !== -1) {
+          if (typeof process === "object" && typeof process.emit === "function") {
+              Q.nextTick.runAfter(function () {
+                  var atReport = array_indexOf(reportedUnhandledRejections, promise);
+                  if (atReport !== -1) {
+                      process.emit("rejectionHandled", unhandledReasons[at], promise);
+                      reportedUnhandledRejections.splice(atReport, 1);
+                  }
+              });
+          }
+          unhandledRejections.splice(at, 1);
+          unhandledReasons.splice(at, 1);
+      }
+  }
 
-              // something changed - replace the event transform
-              if (x2 !== x || y2 !== y || k2 !== k) {
-                  x = x2;
-                  y = y2;
-                  k = k2;
-                  eventTransform = identity$7.translate(x2, y2).scale(k2);
-                  _selection.node().__zoom = eventTransform;
-              }
+  Q.resetUnhandledRejections = resetUnhandledRejections;
 
-          }
+  Q.getUnhandledReasons = function () {
+      // Make a copy so that consumers can't interfere with our internal state.
+      return unhandledReasons.slice();
+  };
 
-          if (geoScaleToZoom(k, TILESIZE) < _minzoom) {
-              surface.interrupt();
-              uiFlash().text(t('cannot_zoom'))();
-              setCenterZoom(map.center(), context.minEditableZoom(), 0, true);
-              scheduleRedraw();
-              dispatch$$1.call('move', this, map);
-              return;
-          }
+  Q.stopUnhandledRejectionTracking = function () {
+      resetUnhandledRejections();
+      trackUnhandledRejections = false;
+  };
 
-          projection.transform(eventTransform);
+  resetUnhandledRejections();
 
-          var scale = k / _transformStart.k;
-          var tX = (x / scale - _transformStart.x) * scale;
-          var tY = (y / scale - _transformStart.y) * scale;
+  //// END UNHANDLED REJECTION TRACKING
 
-          if (context.inIntro()) {
-              curtainProjection.transform({
-                  x: x - tX,
-                  y: y - tY,
-                  k: k
-              });
+  /**
+   * Constructs a rejected promise.
+   * @param reason value describing the failure
+   */
+  Q.reject = reject;
+  function reject(reason) {
+      var rejection = Promise({
+          "when": function (rejected) {
+              // note that the error has been handled
+              if (rejected) {
+                  untrackRejection(this);
+              }
+              return rejected ? rejected(reason) : this;
           }
+      }, function fallback() {
+          return this;
+      }, function inspect() {
+          return { state: "rejected", reason: reason };
+      });
 
-          if (source) {
-              _mouseEvent = event$$1;
-          }
-          _isTransformed = true;
-          _transformLast = eventTransform;
-          utilSetTransform(supersurface, tX, tY, scale);
-          scheduleRedraw();
+      // Note that the reason has not been handled.
+      trackRejection(rejection, reason);
 
-          dispatch$$1.call('move', this, map);
+      return rejection;
+  }
 
+  /**
+   * Constructs a fulfilled promise for an immediate reference.
+   * @param value immediate reference
+   */
+  Q.fulfill = fulfill;
+  function fulfill(value) {
+      return Promise({
+          "when": function () {
+              return value;
+          },
+          "get": function (name) {
+              return value[name];
+          },
+          "set": function (name, rhs) {
+              value[name] = rhs;
+          },
+          "delete": function (name) {
+              delete value[name];
+          },
+          "post": function (name, args) {
+              // Mark Miller proposes that post with no name should apply a
+              // promised function.
+              if (name === null || name === void 0) {
+                  return value.apply(void 0, args);
+              } else {
+                  return value[name].apply(value, args);
+              }
+          },
+          "apply": function (thisp, args) {
+              return value.apply(thisp, args);
+          },
+          "keys": function () {
+              return object_keys(value);
+          }
+      }, void 0, function inspect() {
+          return { state: "fulfilled", value: value };
+      });
+  }
 
-          function isInteger(val) {
-              return typeof val === 'number' && isFinite(val) && Math.floor(val) === val;
+  /**
+   * Converts thenables to Q promises.
+   * @param promise thenable promise
+   * @returns a Q promise
+   */
+  function coerce(promise) {
+      var deferred = defer();
+      Q.nextTick(function () {
+          try {
+              promise.then(deferred.resolve, deferred.reject, deferred.notify);
+          } catch (exception) {
+              deferred.reject(exception);
           }
-      }
+      });
+      return deferred.promise;
+  }
 
+  /**
+   * Annotates an object such that it will never be
+   * transferred away from this process over any promise
+   * communication channel.
+   * @param object
+   * @returns promise a wrapping of that object that
+   * additionally responds to the "isDef" message
+   * without a rejection.
+   */
+  Q.master = master;
+  function master(object) {
+      return Promise({
+          "isDef": function () {}
+      }, function fallback(op, args) {
+          return dispatch(object, op, args);
+      }, function () {
+          return Q(object).inspect();
+      });
+  }
 
-      function resetTransform() {
-          if (!_isTransformed) return false;
+  /**
+   * Spreads the values of a promised array of arguments into the
+   * fulfillment callback.
+   * @param fulfilled callback that receives variadic arguments from the
+   * promised array
+   * @param rejected callback that receives the exception if the promise
+   * is rejected.
+   * @returns a promise for the return value or thrown exception of
+   * either callback.
+   */
+  Q.spread = spread;
+  function spread(value, fulfilled, rejected) {
+      return Q(value).spread(fulfilled, rejected);
+  }
 
-          // deprecation warning - Radial Menu to be removed in iD v3
-          surface.selectAll('.edit-menu, .radial-menu').interrupt().remove();
-          utilSetTransform(supersurface, 0, 0);
-          _isTransformed = false;
-          if (context.inIntro()) {
-              curtainProjection.transform(projection.transform());
-          }
-          return true;
-      }
+  Promise.prototype.spread = function (fulfilled, rejected) {
+      return this.all().then(function (array) {
+          return fulfilled.apply(void 0, array);
+      }, rejected);
+  };
 
+  /**
+   * The async function is a decorator for generator functions, turning
+   * them into asynchronous generators.  Although generators are only part
+   * of the newest ECMAScript 6 drafts, this code does not cause syntax
+   * errors in older engines.  This code should continue to work and will
+   * in fact improve over time as the language improves.
+   *
+   * ES6 generators are currently part of V8 version 3.19 with the
+   * --harmony-generators runtime flag enabled.  SpiderMonkey has had them
+   * for longer, but under an older Python-inspired form.  This function
+   * works on both kinds of generators.
+   *
+   * Decorates a generator function such that:
+   *  - it may yield promises
+   *  - execution will continue when that promise is fulfilled
+   *  - the value of the yield expression will be the fulfilled value
+   *  - it returns a promise for the return value (when the generator
+   *    stops iterating)
+   *  - the decorated function returns a promise for the return value
+   *    of the generator or the first rejected promise among those
+   *    yielded.
+   *  - if an error is thrown in the generator, it propagates through
+   *    every following yield until it is caught, or until it escapes
+   *    the generator function altogether, and is translated into a
+   *    rejection for the promise returned by the decorated generator.
+   */
+  Q.async = async;
+  function async(makeGenerator) {
+      return function () {
+          // when verb is "send", arg is a value
+          // when verb is "throw", arg is an exception
+          function continuer(verb, arg) {
+              var result;
 
-      function redraw(difference, extent) {
-          if (surface.empty() || !_redrawEnabled) return;
+              // Until V8 3.19 / Chromium 29 is released, SpiderMonkey is the only
+              // engine that has a deployed base of browsers that support generators.
+              // However, SM's generators use the Python-inspired semantics of
+              // outdated ES6 drafts.  We would like to support ES6, but we'd also
+              // like to make it possible to use generators in deployed browsers, so
+              // we also support Python-style generators.  At some point we can remove
+              // this block.
 
-          // If we are in the middle of a zoom/pan, we can't do differenced redraws.
-          // It would result in artifacts where differenced entities are redrawn with
-          // one transform and unchanged entities with another.
-          if (resetTransform()) {
-              difference = extent = undefined;
+              if (typeof StopIteration === "undefined") {
+                  // ES6 Generators
+                  try {
+                      result = generator[verb](arg);
+                  } catch (exception) {
+                      return reject(exception);
+                  }
+                  if (result.done) {
+                      return Q(result.value);
+                  } else {
+                      return when(result.value, callback, errback);
+                  }
+              } else {
+                  // SpiderMonkey Generators
+                  // FIXME: Remove this case when SM does ES6 generators.
+                  try {
+                      result = generator[verb](arg);
+                  } catch (exception) {
+                      if (isStopIteration(exception)) {
+                          return Q(exception.value);
+                      } else {
+                          return reject(exception);
+                      }
+                  }
+                  return when(result, callback, errback);
+              }
           }
+          var generator = makeGenerator.apply(this, arguments);
+          var callback = continuer.bind(continuer, "next");
+          var errback = continuer.bind(continuer, "throw");
+          return callback();
+      };
+  }
 
-          var zoom$$1 = map.zoom();
-          var z = String(~~zoom$$1);
-
-          if (surface.attr('data-zoom') !== z) {
-              surface.attr('data-zoom', z);
-          }
+  /**
+   * The spawn function is a small wrapper around async that immediately
+   * calls the generator and also ends the promise chain, so that any
+   * unhandled errors are thrown instead of forwarded to the error
+   * handler. This is useful because it's extremely common to run
+   * generators at the top-level to work with libraries.
+   */
+  Q.spawn = spawn;
+  function spawn(makeGenerator) {
+      Q.done(Q.async(makeGenerator)());
+  }
 
-          // class surface as `lowzoom` around z17-z18.5 (based on latitude)
-          var lat = map.center()[1];
-          var lowzoom = linear$2()
-              .domain([-60, 0, 60])
-              .range([17, 18.5, 17])
-              .clamp(true);
+  // FIXME: Remove this interface once ES6 generators are in SpiderMonkey.
+  /**
+   * Throws a ReturnValue exception to stop an asynchronous generator.
+   *
+   * This interface is a stop-gap measure to support generator return
+   * values in older Firefox/SpiderMonkey.  In browsers that support ES6
+   * generators like Chromium 29, just use "return" in your generator
+   * functions.
+   *
+   * @param value the return value for the surrounding generator
+   * @throws ReturnValue exception with the value.
+   * @example
+   * // ES6 style
+   * Q.async(function* () {
+   *      var foo = yield getFooPromise();
+   *      var bar = yield getBarPromise();
+   *      return foo + bar;
+   * })
+   * // Older SpiderMonkey style
+   * Q.async(function () {
+   *      var foo = yield getFooPromise();
+   *      var bar = yield getBarPromise();
+   *      Q.return(foo + bar);
+   * })
+   */
+  Q["return"] = _return;
+  function _return(value) {
+      throw new QReturnValue(value);
+  }
 
-          surface
-              .classed('low-zoom', zoom$$1 <= lowzoom(lat));
+  /**
+   * The promised function decorator ensures that any promise arguments
+   * are settled and passed as values (`this` is also settled and passed
+   * as a value).  It will also ensure that the result of a function is
+   * always a promise.
+   *
+   * @example
+   * var add = Q.promised(function (a, b) {
+   *     return a + b;
+   * });
+   * add(Q(a), Q(B));
+   *
+   * @param {function} callback The function to decorate
+   * @returns {function} a function that has been decorated.
+   */
+  Q.promised = promised;
+  function promised(callback) {
+      return function () {
+          return spread([this, all(arguments)], function (self, args) {
+              return callback.apply(self, args);
+          });
+      };
+  }
 
+  /**
+   * sends a message to a value in a future turn
+   * @param object* the recipient
+   * @param op the name of the message operation, e.g., "when",
+   * @param args further arguments to be forwarded to the operation
+   * @returns result {Promise} a promise for the result of the operation
+   */
+  Q.dispatch = dispatch;
+  function dispatch(object, op, args) {
+      return Q(object).dispatch(op, args);
+  }
 
-          if (!difference) {
-              supersurface.call(context.background());
-          }
+  Promise.prototype.dispatch = function (op, args) {
+      var self = this;
+      var deferred = defer();
+      Q.nextTick(function () {
+          self.promiseDispatch(deferred.resolve, op, args);
+      });
+      return deferred.promise;
+  };
 
-          wrapper
-              .call(drawLayers);
+  /**
+   * Gets the value of a property in a future turn.
+   * @param object    promise or immediate reference for target object
+   * @param name      name of property to get
+   * @return promise for the property value
+   */
+  Q.get = function (object, key) {
+      return Q(object).dispatch("get", [key]);
+  };
 
-          // OSM
-          if (map.editable()) {
-              context.loadTiles(projection);
-              drawVector(difference, extent);
-          } else {
-              editOff();
-          }
+  Promise.prototype.get = function (key) {
+      return this.dispatch("get", [key]);
+  };
 
-          _transformStart = projection.transform();
+  /**
+   * Sets the value of a property in a future turn.
+   * @param object    promise or immediate reference for object object
+   * @param name      name of property to set
+   * @param value     new value of property
+   * @return promise for the return value
+   */
+  Q.set = function (object, key, value) {
+      return Q(object).dispatch("set", [key, value]);
+  };
 
-          return map;
-      }
+  Promise.prototype.set = function (key, value) {
+      return this.dispatch("set", [key, value]);
+  };
 
+  /**
+   * Deletes a property in a future turn.
+   * @param object    promise or immediate reference for target object
+   * @param name      name of property to delete
+   * @return promise for the return value
+   */
+  Q.del = // XXX legacy
+  Q["delete"] = function (object, key) {
+      return Q(object).dispatch("delete", [key]);
+  };
 
+  Promise.prototype.del = // XXX legacy
+  Promise.prototype["delete"] = function (key) {
+      return this.dispatch("delete", [key]);
+  };
 
-      var immediateRedraw = function(difference, extent) {
-          if (!difference && !extent) cancelPendingRedraw();
-          redraw(difference, extent);
-      };
+  /**
+   * Invokes a method in a future turn.
+   * @param object    promise or immediate reference for target object
+   * @param name      name of method to invoke
+   * @param value     a value to post, typically an array of
+   *                  invocation arguments for promises that
+   *                  are ultimately backed with `resolve` values,
+   *                  as opposed to those backed with URLs
+   *                  wherein the posted value can be any
+   *                  JSON serializable object.
+   * @return promise for the return value
+   */
+  // bound locally because it is used by other methods
+  Q.mapply = // XXX As proposed by "Redsandro"
+  Q.post = function (object, name, args) {
+      return Q(object).dispatch("post", [name, args]);
+  };
 
+  Promise.prototype.mapply = // XXX As proposed by "Redsandro"
+  Promise.prototype.post = function (name, args) {
+      return this.dispatch("post", [name, args]);
+  };
 
-      map.mouse = function() {
-          var event$$1 = _mouseEvent || event;
-          if (event$$1) {
-              var s;
-              while ((s = event$$1.sourceEvent)) { event$$1 = s; }
-              return _getMouseCoords(event$$1);
-          }
-          return null;
-      };
+  /**
+   * Invokes a method in a future turn.
+   * @param object    promise or immediate reference for target object
+   * @param name      name of method to invoke
+   * @param ...args   array of invocation arguments
+   * @return promise for the return value
+   */
+  Q.send = // XXX Mark Miller's proposed parlance
+  Q.mcall = // XXX As proposed by "Redsandro"
+  Q.invoke = function (object, name /*...args*/) {
+      return Q(object).dispatch("post", [name, array_slice(arguments, 2)]);
+  };
 
+  Promise.prototype.send = // XXX Mark Miller's proposed parlance
+  Promise.prototype.mcall = // XXX As proposed by "Redsandro"
+  Promise.prototype.invoke = function (name /*...args*/) {
+      return this.dispatch("post", [name, array_slice(arguments, 1)]);
+  };
 
-      // returns Lng/Lat
-      map.mouseCoordinates = function() {
-          var coord = map.mouse() || pxCenter();
-          return projection.invert(coord);
-      };
+  /**
+   * Applies the promised function in a future turn.
+   * @param object    promise or immediate reference for target function
+   * @param args      array of application arguments
+   */
+  Q.fapply = function (object, args) {
+      return Q(object).dispatch("apply", [void 0, args]);
+  };
 
+  Promise.prototype.fapply = function (args) {
+      return this.dispatch("apply", [void 0, args]);
+  };
 
-      map.dblclickEnable = function(val) {
-          if (!arguments.length) return _dblClickEnabled;
-          _dblClickEnabled = val;
-          return map;
-      };
+  /**
+   * Calls the promised function in a future turn.
+   * @param object    promise or immediate reference for target function
+   * @param ...args   array of application arguments
+   */
+  Q["try"] =
+  Q.fcall = function (object /* ...args*/) {
+      return Q(object).dispatch("apply", [void 0, array_slice(arguments, 1)]);
+  };
 
+  Promise.prototype.fcall = function (/*...args*/) {
+      return this.dispatch("apply", [void 0, array_slice(arguments)]);
+  };
 
-      map.redrawEnable = function(val) {
-          if (!arguments.length) return _redrawEnabled;
-          _redrawEnabled = val;
-          return map;
+  /**
+   * Binds the promised function, transforming return values into a fulfilled
+   * promise and thrown errors into a rejected one.
+   * @param object    promise or immediate reference for target function
+   * @param ...args   array of application arguments
+   */
+  Q.fbind = function (object /*...args*/) {
+      var promise = Q(object);
+      var args = array_slice(arguments, 1);
+      return function fbound() {
+          return promise.dispatch("apply", [
+              this,
+              args.concat(array_slice(arguments))
+          ]);
       };
-
-
-      map.isTransformed = function() {
-          return _isTransformed;
+  };
+  Promise.prototype.fbind = function (/*...args*/) {
+      var promise = this;
+      var args = array_slice(arguments);
+      return function fbound() {
+          return promise.dispatch("apply", [
+              this,
+              args.concat(array_slice(arguments))
+          ]);
       };
+  };
 
+  /**
+   * Requests the names of the owned properties of a promised
+   * object in a future turn.
+   * @param object    promise or immediate reference for target object
+   * @return promise for the keys of the eventually settled object
+   */
+  Q.keys = function (object) {
+      return Q(object).dispatch("keys", []);
+  };
 
-      function setTransform(t2, duration, force) {
-          var t$$1 = projection.transform();
-          if (!force && t2.k === t$$1.k && t2.x === t$$1.x && t2.y === t$$1.y) return false;
+  Promise.prototype.keys = function () {
+      return this.dispatch("keys", []);
+  };
 
-          if (duration) {
-              _selection
-                  .transition()
-                  .duration(duration)
-                  .on('start', function() { map.startEase(); })
-                  .call(zoom$$1.transform, identity$7.translate(t2.x, t2.y).scale(t2.k));
-          } else {
-              projection.transform(t2);
-              _transformStart = t2;
-              _selection.call(zoom$$1.transform, _transformStart);
+  /**
+   * Turns an array of promises into a promise for an array.  If any of
+   * the promises gets rejected, the whole array is rejected immediately.
+   * @param {Array*} an array (or promise for an array) of values (or
+   * promises for values)
+   * @returns a promise for an array of the corresponding values
+   */
+  // By Mark Miller
+  // http://wiki.ecmascript.org/doku.php?id=strawman:concurrency&rev=1308776521#allfulfilled
+  Q.all = all;
+  function all(promises) {
+      return when(promises, function (promises) {
+          var pendingCount = 0;
+          var deferred = defer();
+          array_reduce(promises, function (undefined$1, promise, index) {
+              var snapshot;
+              if (
+                  isPromise(promise) &&
+                  (snapshot = promise.inspect()).state === "fulfilled"
+              ) {
+                  promises[index] = snapshot.value;
+              } else {
+                  ++pendingCount;
+                  when(
+                      promise,
+                      function (value) {
+                          promises[index] = value;
+                          if (--pendingCount === 0) {
+                              deferred.resolve(promises);
+                          }
+                      },
+                      deferred.reject,
+                      function (progress) {
+                          deferred.notify({ index: index, value: progress });
+                      }
+                  );
+              }
+          }, void 0);
+          if (pendingCount === 0) {
+              deferred.resolve(promises);
           }
+          return deferred.promise;
+      });
+  }
 
-          return true;
-      }
-
-
-      function setCenterZoom(loc2, z2, duration, force) {
-          var c = map.center();
-          var z = map.zoom();
-          if (loc2[0] === c[0] && loc2[1] === c[1] && z2 === z && !force) return false;
-
-          var proj = geoRawMercator().transform(projection.transform());  // copy projection
-
-          var k2 = clamp(geoZoomToScale(z2, TILESIZE), kMin, kMax);
-          proj.scale(k2);
-
-          var t$$1 = proj.translate();
-          var point$$1 = proj(loc2);
+  Promise.prototype.all = function () {
+      return all(this);
+  };
 
-          var center = pxCenter();
-          t$$1[0] += center[0] - point$$1[0];
-          t$$1[1] += center[1] - point$$1[1];
+  /**
+   * Returns the first resolved promise of an array. Prior rejected promises are
+   * ignored.  Rejects only if all promises are rejected.
+   * @param {Array*} an array containing values or promises for values
+   * @returns a promise fulfilled with the value of the first resolved promise,
+   * or a rejected promise if all promises are rejected.
+   */
+  Q.any = any;
 
-          return setTransform(identity$7.translate(t$$1[0], t$$1[1]).scale(k2), duration, force);
+  function any(promises) {
+      if (promises.length === 0) {
+          return Q.resolve();
       }
 
+      var deferred = Q.defer();
+      var pendingCount = 0;
+      array_reduce(promises, function (prev, current, index) {
+          var promise = promises[index];
 
-      map.pan = function(delta, duration) {
-          var t$$1 = projection.translate();
-          var k = projection.scale();
-
-          t$$1[0] += delta[0];
-          t$$1[1] += delta[1];
+          pendingCount++;
 
-          if (duration) {
-              _selection
-                  .transition()
-                  .duration(duration)
-                  .on('start', function() { map.startEase(); })
-                  .call(zoom$$1.transform, identity$7.translate(t$$1[0], t$$1[1]).scale(k));
-          } else {
-              projection.translate(t$$1);
-              _transformStart = projection.transform();
-              _selection.call(zoom$$1.transform, _transformStart);
-              dispatch$$1.call('move', this, map);
-              immediateRedraw();
+          when(promise, onFulfilled, onRejected, onProgress);
+          function onFulfilled(result) {
+              deferred.resolve(result);
           }
+          function onRejected(err) {
+              pendingCount--;
+              if (pendingCount === 0) {
+                  var rejection = err || new Error("" + err);
 
-          return map;
-      };
+                  rejection.message = ("Q can't get fulfillment value from any promise, all " +
+                      "promises were rejected. Last error message: " + rejection.message);
 
+                  deferred.reject(rejection);
+              }
+          }
+          function onProgress(progress) {
+              deferred.notify({
+                  index: index,
+                  value: progress
+              });
+          }
+      }, undefined);
 
-      map.dimensions = function(val) {
-          if (!arguments.length) return _dimensions;
+      return deferred.promise;
+  }
 
-          _dimensions = val;
-          drawLayers.dimensions(_dimensions);
-          context.background().dimensions(_dimensions);
-          projection.clipExtent([[0, 0], _dimensions]);
-          _getMouseCoords = utilFastMouse(supersurface.node());
+  Promise.prototype.any = function () {
+      return any(this);
+  };
 
-          scheduleRedraw();
-          return map;
-      };
+  /**
+   * Waits for all promises to be settled, either fulfilled or
+   * rejected.  This is distinct from `all` since that would stop
+   * waiting at the first rejection.  The promise returned by
+   * `allResolved` will never be rejected.
+   * @param promises a promise for an array (or an array) of promises
+   * (or values)
+   * @return a promise for an array of promises
+   */
+  Q.allResolved = deprecate(allResolved, "allResolved", "allSettled");
+  function allResolved(promises) {
+      return when(promises, function (promises) {
+          promises = array_map(promises, Q);
+          return when(all(array_map(promises, function (promise) {
+              return when(promise, noop, noop);
+          })), function () {
+              return promises;
+          });
+      });
+  }
 
+  Promise.prototype.allResolved = function () {
+      return allResolved(this);
+  };
 
-      function zoomIn(delta) {
-          setCenterZoom(map.center(), ~~map.zoom() + delta, 250, true);
-      }
+  /**
+   * @see Promise#allSettled
+   */
+  Q.allSettled = allSettled;
+  function allSettled(promises) {
+      return Q(promises).allSettled();
+  }
 
-      function zoomOut(delta) {
-          setCenterZoom(map.center(), ~~map.zoom() - delta, 250, true);
-      }
+  /**
+   * Turns an array of promises into a promise for an array of their states (as
+   * returned by `inspect`) when they have all settled.
+   * @param {Array[Any*]} values an array (or promise for an array) of values (or
+   * promises for values)
+   * @returns {Array[State]} an array of states for the respective values.
+   */
+  Promise.prototype.allSettled = function () {
+      return this.then(function (promises) {
+          return all(array_map(promises, function (promise) {
+              promise = Q(promise);
+              function regardless() {
+                  return promise.inspect();
+              }
+              return promise.then(regardless, regardless);
+          }));
+      });
+  };
 
-      map.zoomIn = function() { zoomIn(1); };
-      map.zoomInFurther = function() { zoomIn(4); };
+  /**
+   * Captures the failure of a promise, giving an oportunity to recover
+   * with a callback.  If the given promise is fulfilled, the returned
+   * promise is fulfilled.
+   * @param {Any*} promise for something
+   * @param {Function} callback to fulfill the returned promise if the
+   * given promise is rejected
+   * @returns a promise for the return value of the callback
+   */
+  Q.fail = // XXX legacy
+  Q["catch"] = function (object, rejected) {
+      return Q(object).then(void 0, rejected);
+  };
 
-      map.zoomOut = function() { zoomOut(1); };
-      map.zoomOutFurther = function() { zoomOut(4); };
+  Promise.prototype.fail = // XXX legacy
+  Promise.prototype["catch"] = function (rejected) {
+      return this.then(void 0, rejected);
+  };
 
+  /**
+   * Attaches a listener that can respond to progress notifications from a
+   * promise's originating deferred. This listener receives the exact arguments
+   * passed to ``deferred.notify``.
+   * @param {Any*} promise for something
+   * @param {Function} callback to receive any progress notifications
+   * @returns the given promise, unchanged
+   */
+  Q.progress = progress;
+  function progress(object, progressed) {
+      return Q(object).then(void 0, void 0, progressed);
+  }
 
-      map.center = function(loc2) {
-          if (!arguments.length) {
-              return projection.invert(pxCenter());
-          }
+  Promise.prototype.progress = function (progressed) {
+      return this.then(void 0, void 0, progressed);
+  };
 
-          if (setCenterZoom(loc2, map.zoom())) {
-              dispatch$$1.call('move', this, map);
-          }
+  /**
+   * Provides an opportunity to observe the settling of a promise,
+   * regardless of whether the promise is fulfilled or rejected.  Forwards
+   * the resolution to the returned promise when the callback is done.
+   * The callback can return a promise to defer completion.
+   * @param {Any*} promise
+   * @param {Function} callback to observe the resolution of the given
+   * promise, takes no arguments.
+   * @returns a promise for the resolution of the given promise when
+   * ``fin`` is done.
+   */
+  Q.fin = // XXX legacy
+  Q["finally"] = function (object, callback) {
+      return Q(object)["finally"](callback);
+  };
 
-          scheduleRedraw();
-          return map;
-      };
+  Promise.prototype.fin = // XXX legacy
+  Promise.prototype["finally"] = function (callback) {
+      if (!callback || typeof callback.apply !== "function") {
+          throw new Error("Q can't apply finally callback");
+      }
+      callback = Q(callback);
+      return this.then(function (value) {
+          return callback.fcall().then(function () {
+              return value;
+          });
+      }, function (reason) {
+          // TODO attempt to recycle the rejection with "this".
+          return callback.fcall().then(function () {
+              throw reason;
+          });
+      });
+  };
 
+  /**
+   * Terminates a chain of promises, forcing rejections to be
+   * thrown as exceptions.
+   * @param {Any*} promise at the end of a chain of promises
+   * @returns nothing
+   */
+  Q.done = function (object, fulfilled, rejected, progress) {
+      return Q(object).done(fulfilled, rejected, progress);
+  };
 
-      map.zoom = function(z2) {
-          if (!arguments.length) {
-              return Math.max(geoScaleToZoom(projection.scale(), TILESIZE), 0);
-          }
+  Promise.prototype.done = function (fulfilled, rejected, progress) {
+      var onUnhandledError = function (error) {
+          // forward to a future turn so that ``when``
+          // does not catch it and turn it into a rejection.
+          Q.nextTick(function () {
+              makeStackTraceLong(error, promise);
+              if (Q.onerror) {
+                  Q.onerror(error);
+              } else {
+                  throw error;
+              }
+          });
+      };
 
-          if (z2 < _minzoom) {
-              surface.interrupt();
-              uiFlash().text(t('cannot_zoom'))();
-              z2 = context.minEditableZoom();
-          }
+      // Avoid unnecessary `nextTick`ing via an unnecessary `when`.
+      var promise = fulfilled || rejected || progress ?
+          this.then(fulfilled, rejected, progress) :
+          this;
 
-          if (setCenterZoom(map.center(), z2)) {
-              dispatch$$1.call('move', this, map);
-          }
+      if (typeof process === "object" && process && process.domain) {
+          onUnhandledError = process.domain.bind(onUnhandledError);
+      }
 
-          scheduleRedraw();
-          return map;
-      };
+      promise.then(void 0, onUnhandledError);
+  };
 
+  /**
+   * Causes a promise to be rejected if it does not get fulfilled before
+   * some milliseconds time out.
+   * @param {Any*} promise
+   * @param {Number} milliseconds timeout
+   * @param {Any*} custom error message or Error object (optional)
+   * @returns a promise for the resolution of the given promise if it is
+   * fulfilled before the timeout, otherwise rejected.
+   */
+  Q.timeout = function (object, ms, error) {
+      return Q(object).timeout(ms, error);
+  };
 
-      map.centerZoom = function(loc2, z2) {
-          if (setCenterZoom(loc2, z2)) {
-              dispatch$$1.call('move', this, map);
+  Promise.prototype.timeout = function (ms, error) {
+      var deferred = defer();
+      var timeoutId = setTimeout(function () {
+          if (!error || "string" === typeof error) {
+              error = new Error(error || "Timed out after " + ms + " ms");
+              error.code = "ETIMEDOUT";
           }
+          deferred.reject(error);
+      }, ms);
 
-          scheduleRedraw();
-          return map;
-      };
-
+      this.then(function (value) {
+          clearTimeout(timeoutId);
+          deferred.resolve(value);
+      }, function (exception) {
+          clearTimeout(timeoutId);
+          deferred.reject(exception);
+      }, deferred.notify);
 
-      map.zoomTo = function(entity) {
-          var extent = entity.extent(context.graph());
-          if (!isFinite(extent.area())) return map;
+      return deferred.promise;
+  };
 
-          var z2 = clamp(map.trimmedExtentZoom(extent), context.minEditableZoom(), 20);
-          return map.centerZoom(extent.center(), z2);
-      };
+  /**
+   * Returns a promise for the given value (or promised value), some
+   * milliseconds after it resolved. Passes rejections immediately.
+   * @param {Any*} promise
+   * @param {Number} milliseconds
+   * @returns a promise for the resolution of the given promise after milliseconds
+   * time has elapsed since the resolution of the given promise.
+   * If the given promise rejects, that is passed immediately.
+   */
+  Q.delay = function (object, timeout) {
+      if (timeout === void 0) {
+          timeout = object;
+          object = void 0;
+      }
+      return Q(object).delay(timeout);
+  };
 
+  Promise.prototype.delay = function (timeout) {
+      return this.then(function (value) {
+          var deferred = defer();
+          setTimeout(function () {
+              deferred.resolve(value);
+          }, timeout);
+          return deferred.promise;
+      });
+  };
 
-      map.centerEase = function(loc2, duration) {
-          duration = duration || 250;
-          setCenterZoom(loc2, map.zoom(), duration);
-          return map;
-      };
+  /**
+   * Passes a continuation to a Node function, which is called with the given
+   * arguments provided as an array, and returns a promise.
+   *
+   *      Q.nfapply(FS.readFile, [__filename])
+   *      .then(function (content) {
+   *      })
+   *
+   */
+  Q.nfapply = function (callback, args) {
+      return Q(callback).nfapply(args);
+  };
 
+  Promise.prototype.nfapply = function (args) {
+      var deferred = defer();
+      var nodeArgs = array_slice(args);
+      nodeArgs.push(deferred.makeNodeResolver());
+      this.fapply(nodeArgs).fail(deferred.reject);
+      return deferred.promise;
+  };
 
-      map.zoomEase = function(z2, duration) {
-          duration = duration || 250;
-          setCenterZoom(map.center(), z2, duration, false);
-          return map;
-      };
+  /**
+   * Passes a continuation to a Node function, which is called with the given
+   * arguments provided individually, and returns a promise.
+   * @example
+   * Q.nfcall(FS.readFile, __filename)
+   * .then(function (content) {
+   * })
+   *
+   */
+  Q.nfcall = function (callback /*...args*/) {
+      var args = array_slice(arguments, 1);
+      return Q(callback).nfapply(args);
+  };
 
+  Promise.prototype.nfcall = function (/*...args*/) {
+      var nodeArgs = array_slice(arguments);
+      var deferred = defer();
+      nodeArgs.push(deferred.makeNodeResolver());
+      this.fapply(nodeArgs).fail(deferred.reject);
+      return deferred.promise;
+  };
 
-      map.centerZoomEase = function(loc2, z2, duration) {
-          duration = duration || 250;
-          setCenterZoom(loc2, z2, duration, false);
-          return map;
+  /**
+   * Wraps a NodeJS continuation passing function and returns an equivalent
+   * version that returns a promise.
+   * @example
+   * Q.nfbind(FS.readFile, __filename)("utf-8")
+   * .then(console.log)
+   * .done()
+   */
+  Q.nfbind =
+  Q.denodeify = function (callback /*...args*/) {
+      if (callback === undefined) {
+          throw new Error("Q can't wrap an undefined function");
+      }
+      var baseArgs = array_slice(arguments, 1);
+      return function () {
+          var nodeArgs = baseArgs.concat(array_slice(arguments));
+          var deferred = defer();
+          nodeArgs.push(deferred.makeNodeResolver());
+          Q(callback).fapply(nodeArgs).fail(deferred.reject);
+          return deferred.promise;
       };
+  };
 
+  Promise.prototype.nfbind =
+  Promise.prototype.denodeify = function (/*...args*/) {
+      var args = array_slice(arguments);
+      args.unshift(this);
+      return Q.denodeify.apply(void 0, args);
+  };
 
-      map.transformEase = function(t2, duration) {
-          duration = duration || 250;
-          setTransform(t2, duration, false);
-          return map;
+  Q.nbind = function (callback, thisp /*...args*/) {
+      var baseArgs = array_slice(arguments, 2);
+      return function () {
+          var nodeArgs = baseArgs.concat(array_slice(arguments));
+          var deferred = defer();
+          nodeArgs.push(deferred.makeNodeResolver());
+          function bound() {
+              return callback.apply(thisp, arguments);
+          }
+          Q(bound).fapply(nodeArgs).fail(deferred.reject);
+          return deferred.promise;
       };
+  };
 
+  Promise.prototype.nbind = function (/*thisp, ...args*/) {
+      var args = array_slice(arguments, 0);
+      args.unshift(this);
+      return Q.nbind.apply(void 0, args);
+  };
 
-      map.zoomToEase = function(entity, duration) {
-          var extent = entity.extent(context.graph());
-          if (!isFinite(extent.area())) return map;
-
-          var z2 = clamp(map.trimmedExtentZoom(extent), context.minEditableZoom(), 20);
-          return map.centerZoomEase(extent.center(), z2, duration);
-      };
-
+  /**
+   * Calls a method of a Node-style object that accepts a Node-style
+   * callback with a given array of arguments, plus a provided callback.
+   * @param object an object that has the named method
+   * @param {String} name name of the method of object
+   * @param {Array} args arguments to pass to the method; the callback
+   * will be provided by Q and appended to these arguments.
+   * @returns a promise for the value or error
+   */
+  Q.nmapply = // XXX As proposed by "Redsandro"
+  Q.npost = function (object, name, args) {
+      return Q(object).npost(name, args);
+  };
 
-      map.startEase = function() {
-          utilBindOnce(surface, 'mousedown.ease', function() {
-              map.cancelEase();
-          });
-          return map;
-      };
+  Promise.prototype.nmapply = // XXX As proposed by "Redsandro"
+  Promise.prototype.npost = function (name, args) {
+      var nodeArgs = array_slice(args || []);
+      var deferred = defer();
+      nodeArgs.push(deferred.makeNodeResolver());
+      this.dispatch("post", [name, nodeArgs]).fail(deferred.reject);
+      return deferred.promise;
+  };
 
+  /**
+   * Calls a method of a Node-style object that accepts a Node-style
+   * callback, forwarding the given variadic arguments, plus a provided
+   * callback argument.
+   * @param object an object that has the named method
+   * @param {String} name name of the method of object
+   * @param ...args arguments to pass to the method; the callback will
+   * be provided by Q and appended to these arguments.
+   * @returns a promise for the value or error
+   */
+  Q.nsend = // XXX Based on Mark Miller's proposed "send"
+  Q.nmcall = // XXX Based on "Redsandro's" proposal
+  Q.ninvoke = function (object, name /*...args*/) {
+      var nodeArgs = array_slice(arguments, 2);
+      var deferred = defer();
+      nodeArgs.push(deferred.makeNodeResolver());
+      Q(object).dispatch("post", [name, nodeArgs]).fail(deferred.reject);
+      return deferred.promise;
+  };
 
-      map.cancelEase = function() {
-          _selection.interrupt();
-          return map;
-      };
+  Promise.prototype.nsend = // XXX Based on Mark Miller's proposed "send"
+  Promise.prototype.nmcall = // XXX Based on "Redsandro's" proposal
+  Promise.prototype.ninvoke = function (name /*...args*/) {
+      var nodeArgs = array_slice(arguments, 1);
+      var deferred = defer();
+      nodeArgs.push(deferred.makeNodeResolver());
+      this.dispatch("post", [name, nodeArgs]).fail(deferred.reject);
+      return deferred.promise;
+  };
 
+  /**
+   * If a function would like to support both Node continuation-passing-style and
+   * promise-returning-style, it can end its internal promise chain with
+   * `nodeify(nodeback)`, forwarding the optional nodeback argument.  If the user
+   * elects to use a nodeback, the result will be sent there.  If they do not
+   * pass a nodeback, they will receive the result promise.
+   * @param object a result (or a promise for a result)
+   * @param {Function} nodeback a Node.js-style callback
+   * @returns either the promise or nothing
+   */
+  Q.nodeify = nodeify;
+  function nodeify(object, nodeback) {
+      return Q(object).nodeify(nodeback);
+  }
 
-      map.extent = function(val) {
-          if (!arguments.length) {
-              return new geoExtent$$1(
-                  projection.invert([0, _dimensions[1]]),
-                  projection.invert([_dimensions[0], 0])
-              );
-          } else {
-              var extent = geoExtent$$1(val);
-              map.centerZoom(extent.center(), map.extentZoom(extent));
-          }
-      };
+  Promise.prototype.nodeify = function (nodeback) {
+      if (nodeback) {
+          this.then(function (value) {
+              Q.nextTick(function () {
+                  nodeback(null, value);
+              });
+          }, function (error) {
+              Q.nextTick(function () {
+                  nodeback(error);
+              });
+          });
+      } else {
+          return this;
+      }
+  };
 
+  Q.noConflict = function() {
+      throw new Error("Q.noConflict only works when Q is used as a global");
+  };
 
-      map.trimmedExtent = function(val) {
-          if (!arguments.length) {
-              var headerY = 60;
-              var footerY = 30;
-              var pad = 10;
-              return new geoExtent$$1(
-                  projection.invert([pad, _dimensions[1] - footerY - pad]),
-                  projection.invert([_dimensions[0] - pad, headerY + pad])
-              );
-          } else {
-              var extent = geoExtent$$1(val);
-              map.centerZoom(extent.center(), map.trimmedExtentZoom(extent));
-          }
-      };
+  // All code before this point will be filtered from stack traces.
+  var qEndingLine = captureLine();
 
+  return Q;
 
-      function calcExtentZoom(extent, dim) {
-          var tl = projection([extent[0][0], extent[1][1]]);
-          var br = projection([extent[1][0], extent[0][1]]);
+  });
+  });
 
-          // Calculate maximum zoom that fits extent
-          var hFactor = (br[0] - tl[0]) / dim[0];
-          var vFactor = (br[1] - tl[1]) / dim[1];
-          var hZoomDiff = Math.log(Math.abs(hFactor)) / Math.LN2;
-          var vZoomDiff = Math.log(Math.abs(vFactor)) / Math.LN2;
-          var newZoom = map.zoom() - Math.max(hZoomDiff, vZoomDiff);
+  var bubbleApi = 'https://dev.virtualearth.net/mapcontrol/HumanScaleServices/GetBubbles.ashx?';
+  var streetsideImagesApi = 'https://t.ssl.ak.tiles.virtualearth.net/tiles/';
+  var bubbleAppKey = 'AuftgJsO0Xs8Ts4M1xZUQJQXJNsvmh3IV8DkNieCiy3tCwCUMq76-WpkrBtNAuEm';
+  var pannellumViewerCSS = 'pannellum-streetside/pannellum.css';
+  var pannellumViewerJS = 'pannellum-streetside/pannellum.js';
+  var maxResults$2 = 2000;
+  var tileZoom$2 = 16.5;
+  var tiler$5 = utilTiler().zoomExtent([tileZoom$2, tileZoom$2]).skipNullIsland(true);
+  var dispatch$6 = dispatch('loadedBubbles', 'viewerChanged');
+  var minHfov = 10;         // zoom in degrees:  20, 10, 5
+  var maxHfov = 90;         // zoom out degrees
+  var defaultHfov = 45;
 
-          return newZoom;
-      }
+  var _hires = false;
+  var _resolution = 512;    // higher numbers are slower - 512, 1024, 2048, 4096
+  var _currScene = 0;
+  var _ssCache;
+  var _pannellumViewer;
+  var _sceneOptions;
+  var _dataUrlArray = [];
 
 
-      map.extentZoom = function(val) {
-          return calcExtentZoom(geoExtent$$1(val), _dimensions);
-      };
+  /**
+   * abortRequest().
+   */
+  function abortRequest$5(i) {
+      i.abort();
+  }
 
 
-      map.trimmedExtentZoom = function(val) {
-          var trimY = 120;
-          var trimX = 40;
-          var trimmed = [_dimensions[0] - trimX, _dimensions[1] - trimY];
-          return calcExtentZoom(geoExtent$$1(val), trimmed);
-      };
+  /**
+   * localeTimeStamp().
+   */
+  function localeTimestamp(s) {
+      if (!s) return null;
+      var detected = utilDetect();
+      var options = { day: 'numeric', month: 'short', year: 'numeric' };
+      var d = new Date(s);
+      if (isNaN(d.getTime())) return null;
+      return d.toLocaleString(detected.locale, options);
+  }
 
 
-      map.editable = function() {
-          var osmLayer = surface.selectAll('.data-layer.osm');
-          if (!osmLayer.empty() && osmLayer.classed('disabled')) return false;
+  /**
+   * loadTiles() wraps the process of generating tiles and then fetching image points for each tile.
+   */
+  function loadTiles$2(which, url, projection, margin) {
+      var tiles = tiler$5.margin(margin).getTiles(projection);
 
-          return map.zoom() >= context.minEditableZoom();
-      };
+      // abort inflight requests that are no longer needed
+      var cache = _ssCache[which];
+      forEach(cache.inflight, function(v, k) {
+          var wanted = find$1(tiles, function(tile) { return k.indexOf(tile.id + ',') === 0; });
 
+          if (!wanted) {
+              abortRequest$5(v);
+              delete cache.inflight[k];
+          }
+      });
 
-      map.notesEditable = function() {
-          var noteLayer = surface.selectAll('.data-layer.notes');
-          if (!noteLayer.empty() && noteLayer.classed('disabled')) return false;
+      tiles.forEach(function (tile) {
+         loadNextTilePage$2(which, url, tile);
+      });
+  }
 
-          return map.zoom() >= context.minEditableZoom();
-      };
+  /**
+   * loadNextTilePage() load data for the next tile page in line.
+   */
+  function loadNextTilePage$2(which, url, tile) {
+      var cache = _ssCache[which];
+      var nextPage = cache.nextPage[tile.id] || 0;
+      var id = tile.id + ',' + String(nextPage);
+      if (cache.loaded[id] || cache.inflight[id]) return;
 
+      cache.inflight[id] = getBubbles(url, tile, function(bubbles) {
+          cache.loaded[id] = true;
+          delete cache.inflight[id];
+          if (!bubbles) return;
 
-      map.minzoom = function(val) {
-          if (!arguments.length) return _minzoom;
-          _minzoom = val;
-          return map;
-      };
+          // [].shift() removes the first element, some statistics info, not a bubble point
+          bubbles.shift();
 
+          var features = bubbles.map(function(bubble) {
+              if (cache.points[bubble.id]) return null;  // skip duplicates
 
-      map.layers = drawLayers;
+              var loc = [bubble.lo, bubble.la];
+              var d = {
+                  loc: loc,
+                  key: bubble.id,
+                  ca: bubble.he,
+                  captured_at: bubble.cd,
+                  captured_by: 'microsoft',
+                  // nbn: bubble.nbn,
+                  // pbn: bubble.pbn,
+                  // ad: bubble.ad,
+                  // rn: bubble.rn,
+                  pr: bubble.pr,  // previous
+                  ne: bubble.ne,  // next
+                  pano: true,
+                  sequenceKey: null
+              };
 
+              cache.points[bubble.id] = d;
 
-      return utilRebind(map, dispatch$$1, 'on');
-  }
+              // a sequence starts here
+              if (bubble.pr === undefined) {
+                  cache.leaders.push(bubble.id);
+              }
 
-  function uiMapInMap(context) {
+              return {
+                  minX: loc[0], minY: loc[1], maxX: loc[0], maxY: loc[1], data: d
+              };
 
-      function map_in_map(selection$$1) {
-          var backgroundLayer = rendererTileLayer(context);
-          var overlayLayers = {};
-          var projection$$1 = geoRawMercator();
-          var dataLayer = svgData$$1(projection$$1, context).showLabels(false);
-          var debugLayer = svgDebug$$1(projection$$1, context);
-          var zoom$$1 = d3_zoom()
-              .scaleExtent([geoZoomToScale(0.5), geoZoomToScale(24)])
-              .on('start', zoomStarted)
-              .on('zoom', zoomed)
-              .on('end', zoomEnded);
-          var isTransformed = false;
-          var isHidden = true;
-          var skipEvents = false;
-          var gesture = null;
-          var zDiff = 6;    // by default, minimap renders at (main zoom - 6)
-          var wrap = select(null);
-          var tiles = select(null);
-          var viewport = select(null);
-          var tStart;    // transform at start of gesture
-          var tCurr;     // transform at most recent event
-          var timeoutId;
+          }).filter(Boolean);
+
+          cache.rtree.load(features);
 
+          connectSequences();
 
-          function zoomStarted() {
-              if (skipEvents) return;
-              tStart = tCurr = projection$$1.transform();
-              gesture = null;
+          if (which === 'bubbles') {
+              dispatch$6.call('loadedBubbles');
           }
+      });
+  }
 
 
-          function zoomed() {
-              if (skipEvents) return;
-
-              var x = event.transform.x;
-              var y = event.transform.y;
-              var k = event.transform.k;
-              var isZooming = (k !== tStart.k);
-              var isPanning = (x !== tStart.x || y !== tStart.y);
+  // call this sometimes to connect the bubbles into sequences
+  function connectSequences() {
+      var cache = _ssCache.bubbles;
+      var keepLeaders = [];
 
-              if (!isZooming && !isPanning) {
-                  return;  // no change
-              }
+      for (var i = 0; i < cache.leaders.length; i++) {
+          var bubble = cache.points[cache.leaders[i]];
+          var seen = {};
 
-              // lock in either zooming or panning, don't allow both in minimap.
-              if (!gesture) {
-                  gesture = isZooming ? 'zoom' : 'pan';
-              }
+          // try to make a sequence.. use the key of the leader bubble.
+          var sequence = { key: bubble.key, bubbles: [] };
+          var complete = false;
 
-              var tMini = projection$$1.transform();
-              var tX, tY, scale;
+          do {
+              sequence.bubbles.push(bubble);
+              seen[bubble.key] = true;
 
-              if (gesture === 'zoom') {
-                  var dMini = utilGetDimensions(wrap);
-                  var cMini = geoVecScale(dMini, 0.5);
-                  scale = k / tMini.k;
-                  tX = (cMini[0] / scale - cMini[0]) * scale;
-                  tY = (cMini[1] / scale - cMini[1]) * scale;
+              if (bubble.ne === undefined) {
+                  complete = true;
               } else {
-                  k = tMini.k;
-                  scale = 1;
-                  tX = x - tMini.x;
-                  tY = y - tMini.y;
+                  bubble = cache.points[bubble.ne];  // advance to next
               }
+          } while (bubble && !seen[bubble.key] && !complete);
 
-              utilSetTransform(tiles, tX, tY, scale);
-              utilSetTransform(viewport, 0, 0, scale);
-              isTransformed = true;
-              tCurr = identity$7.translate(x, y).scale(k);
 
-              var zMain = geoScaleToZoom(context.projection.scale());
-              var zMini = geoScaleToZoom(k);
+          if (complete) {
+              _ssCache.sequences[sequence.key] = sequence;
 
-              zDiff = zMain - zMini;
+              // assign bubbles to the sequence
+              for (var j = 0; j < sequence.bubbles.length; j++) {
+                  sequence.bubbles[j].sequenceKey = sequence.key;
+              }
 
-              queueRedraw();
+              // create a GeoJSON LineString
+              sequence.geojson = {
+                  type: 'LineString',
+                  properties: { key: sequence.key },
+                  coordinates: sequence.bubbles.map(function (d) { return d.loc; })
+              };
+
+          } else {
+              keepLeaders.push(cache.leaders[i]);
           }
+      }
 
+      // couldn't complete these, save for later
+      cache.leaders = keepLeaders;
+  }
 
-          function zoomEnded() {
-              if (skipEvents) return;
-              if (gesture !== 'pan') return;
+  /**
+   * getBubbles() handles the request to the server for a tile extent of 'bubbles' (streetside image locations).
+   */
+  function getBubbles(url, tile, callback) {
+      var rect = tile.extent.rectangle();
+      var urlForRequest = url + utilQsString({
+          n: rect[3],
+          s: rect[1],
+          e: rect[2],
+          w: rect[0],
+          c: maxResults$2,
+          appkey: bubbleAppKey,
+          jsCallback: '{callback}'
+      });
 
-              updateProjection();
-              gesture = null;
-              var dMini = utilGetDimensions(wrap);
-              var cMini = geoVecScale(dMini, 0.5);
-              context.map().center(projection$$1.invert(cMini));   // recenter main map..
+      return jsonpRequest(urlForRequest, function (data) {
+          if (!data || data.error) {
+              callback(null);
+          } else {
+              callback(data);
           }
+      });
+  }
 
 
-          function updateProjection() {
-              var loc = context.map().center();
-              var dMini = utilGetDimensions(wrap);
-              var cMini = geoVecScale(dMini, 0.5);
-              var tMain = context.projection.transform();
-              var zMain = geoScaleToZoom(tMain.k);
-              var zMini = Math.max(zMain - zDiff, 0.5);
-              var kMini = geoZoomToScale(zMini);
+  // partition viewport into higher zoom tiles
+  function partitionViewport$2(projection) {
+      var z = geoScaleToZoom(projection.scale());
+      var z2 = (Math.ceil(z * 2) / 2) + 2.5;   // round to next 0.5 and add 2.5
+      var tiler = utilTiler().zoomExtent([z2, z2]);
 
-              projection$$1
-                  .translate([tMain.x, tMain.y])
-                  .scale(kMini);
+      return tiler.getTiles(projection)
+          .map(function(tile) { return tile.extent; });
+  }
 
-              var point$$1 = projection$$1(loc);
-              var mouse$$1 = (gesture === 'pan') ? geoVecSubtract([tCurr.x, tCurr.y], [tStart.x, tStart.y]) : [0, 0];
-              var xMini = cMini[0] - point$$1[0] + tMain.x + mouse$$1[0];
-              var yMini = cMini[1] - point$$1[1] + tMain.y + mouse$$1[1];
 
-              projection$$1
-                  .translate([xMini, yMini])
-                  .clipExtent([[0, 0], dMini]);
+  // no more than `limit` results per partition.
+  function searchLimited$2(limit, projection, rtree) {
+      limit = limit || 5;
 
-              tCurr = projection$$1.transform();
+      return partitionViewport$2(projection)
+          .reduce(function(result, extent) {
+              var found = rtree.search(extent.bbox())
+                  .slice(0, limit)
+                  .map(function(d) { return d.data; });
 
-              if (isTransformed) {
-                  utilSetTransform(tiles, 0, 0);
-                  utilSetTransform(viewport, 0, 0);
-                  isTransformed = false;
-              }
+              return (found.length ? result.concat(found) : result);
+          }, []);
+  }
 
-              zoom$$1
-                  .scaleExtent([geoZoomToScale(0.5), geoZoomToScale(zMain - 3)]);
 
-              skipEvents = true;
-              wrap.call(zoom$$1.transform, tCurr);
-              skipEvents = false;
-          }
+  /**
+   * getImage()
+   */
+  function getImage(imgInfo) {
+      var response = q.defer();
+      var img = new Image();
 
+      img.onload = function() {
+          var canvas = document.getElementById('canvas' + imgInfo.face);
+          var ctx = canvas.getContext('2d');
+          ctx.drawImage(img, imgInfo.x, imgInfo.y);
+          response.resolve({imgInfo:imgInfo, status: 'ok'});
+      };
+      img.onerror = function() {
+          response.resolve({data: imgInfo, status: 'error'});
+      };
+      img.setAttribute('crossorigin', '');
+      img.src = imgInfo.url;
 
-          function redraw() {
-              clearTimeout(timeoutId);
-              if (isHidden) return;
+      return response.promise;
+  }
 
-              updateProjection();
 
-              var dMini = utilGetDimensions(wrap);
-              var zMini = geoScaleToZoom(projection$$1.scale());
+  /**
+   * loadCanvas()
+   */
+  function loadCanvas(imgInfoGroup) {
+      var response = q.defer();
+      var getImagePromises = imgInfoGroup.map(function(imgInfo) {
+          return getImage(imgInfo);
+      });
 
-              // setup tile container
-              tiles = wrap
-                  .selectAll('.map-in-map-tiles')
-                  .data([0]);
+      q.all(getImagePromises).then(function(data) {
+          var canvas = document.getElementById('canvas' + data[0].imgInfo.face);
+          switch (data[0].imgInfo.face) {
+              case '01':
+                  _dataUrlArray[0] = canvas.toDataURL('image/jpeg', 1.0);
+                  break;
+              case '02':
+                  _dataUrlArray[1] = canvas.toDataURL('image/jpeg', 1.0);
+                  break;
+              case '03':
+                  _dataUrlArray[2] = canvas.toDataURL('image/jpeg', 1.0);
+                  break;
+              case '10':
+                  _dataUrlArray[3] = canvas.toDataURL('image/jpeg', 1.0);
+                  break;
+              case '11':
+                  _dataUrlArray[4] = canvas.toDataURL('image/jpeg', 1.0);
+                  break;
+              case '12':
+                  _dataUrlArray[5] = canvas.toDataURL('image/jpeg', 1.0);
+                  break;
+          }
+          response.resolve({status:'loadCanvas for face ' + data[0].imgInfo.face + 'ok'});
+      });
 
-              tiles = tiles.enter()
-                  .append('div')
-                  .attr('class', 'map-in-map-tiles')
-                  .merge(tiles);
+      return response.promise;
+  }
 
-              // redraw background
-              backgroundLayer
-                  .source(context.background().baseLayerSource())
-                  .projection(projection$$1)
-                  .dimensions(dMini);
 
-              var background = tiles
-                  .selectAll('.map-in-map-background')
-                  .data([0]);
+  function setupCanvas(selection, reset) {
+      if (reset) {
+          selection.selectAll('#divForCanvasWork')
+              .remove();
+      }
 
-              background.enter()
-                  .append('div')
-                  .attr('class', 'map-in-map-background')
-                  .merge(background)
-                  .call(backgroundLayer);
+      // Add the Streetside working canvases. These are used for 'stitching', or combining,
+      // multiple images for each of the six faces, before passing to the Pannellum control as DataUrls
+      selection.selectAll('#divForCanvasWork')
+          .data([0])
+          .enter()
+          .append('div')
+          .attr('id', 'divForCanvasWork')
+          .attr('display', 'none')
+          .selectAll('canvas')
+          .data(['canvas01', 'canvas02', 'canvas03', 'canvas10', 'canvas11', 'canvas12'])
+          .enter()
+          .append('canvas')
+          .attr('id', function(d) { return d; })
+          .attr('width', _resolution)
+          .attr('height', _resolution);
+  }
 
 
-              // redraw overlay
-              var overlaySources = context.background().overlayLayerSources();
-              var activeOverlayLayers = [];
-              for (var i = 0; i < overlaySources.length; i++) {
-                  if (overlaySources[i].validZoom(zMini)) {
-                      if (!overlayLayers[i]) overlayLayers[i] = rendererTileLayer(context);
-                      activeOverlayLayers.push(overlayLayers[i]
-                          .source(overlaySources[i])
-                          .projection(projection$$1)
-                          .dimensions(dMini));
-                  }
-              }
+  /**
+   * processFaces()
+   */
+  function processFaces(imgFaceInfoGroups) {
+      var response = q.defer();
+      var loadCanvasPromises = imgFaceInfoGroups.map(function(faceImgGroup) {
+          return loadCanvas(faceImgGroup);
+      });
 
-              var overlay = tiles
-                  .selectAll('.map-in-map-overlay')
-                  .data([0]);
+      q.all(loadCanvasPromises).then(function() {
+          response.resolve({status: 'processFaces done'});
+      });
 
-              overlay = overlay.enter()
-                  .append('div')
-                  .attr('class', 'map-in-map-overlay')
-                  .merge(overlay);
+      return response.promise;
+  }
 
 
-              var overlays = overlay
-                  .selectAll('div')
-                  .data(activeOverlayLayers, function(d) { return d.source().name(); });
 
-              overlays.exit()
-                  .remove();
+  function qkToXY(qk) {
+      var x = 0;
+      var y = 0;
+      var scale = 256;
+      for (var i = qk.length; i > 0; i--) {
+          var key = qk[i-1];
+          x += (+(key === '1' || key === '3')) * scale;
+          y += (+(key === '2' || key === '3')) * scale;
+          scale *= 2;
+      }
+      return [x, y];
+  }
 
-              overlays = overlays.enter()
-                  .append('div')
-                  .merge(overlays)
-                  .each(function(layer) { select(this).call(layer); });
 
+  function getQuadKeys() {
+      var dim = _resolution / 256;
+      var quadKeys;
 
-              var dataLayers = tiles
-                  .selectAll('.map-in-map-data')
-                  .data([0]);
+      if (dim === 16) {
+          quadKeys = [
+              '0000','0001','0010','0011','0100','0101','0110','0111',  '1000','1001','1010','1011','1100','1101','1110','1111',
+              '0002','0003','0012','0013','0102','0103','0112','0113',  '1002','1003','1012','1013','1102','1103','1112','1113',
+              '0020','0021','0030','0031','0120','0121','0130','0131',  '1020','1021','1030','1031','1120','1121','1130','1131',
+              '0022','0023','0032','0033','0122','0123','0132','0133',  '1022','1023','1032','1033','1122','1123','1132','1133',
+              '0200','0201','0210','0211','0300','0301','0310','0311',  '1200','1201','1210','1211','1300','1301','1310','1311',
+              '0202','0203','0212','0213','0302','0303','0312','0313',  '1202','1203','1212','1213','1302','1303','1312','1313',
+              '0220','0221','0230','0231','0320','0321','0330','0331',  '1220','1221','1230','1231','1320','1321','1330','1331',
+              '0222','0223','0232','0233','0322','0323','0332','0333',  '1222','1223','1232','1233','1322','1323','1332','1333',
 
-              dataLayers.exit()
-                  .remove();
+              '2000','2001','2010','2011','2100','2101','2110','2111',  '3000','3001','3010','3011','3100','3101','3110','3111',
+              '2002','2003','2012','2013','2102','2103','2112','2113',  '3002','3003','3012','3013','3102','3103','3112','3113',
+              '2020','2021','2030','2031','2120','2121','2130','2131',  '3020','3021','3030','3031','3120','3121','3130','3131',
+              '2022','2023','2032','2033','2122','2123','2132','2133',  '3022','3023','3032','3033','3122','3123','3132','3133',
+              '2200','2201','2210','2211','2300','2301','2310','2311',  '3200','3201','3210','3211','3300','3301','3310','3311',
+              '2202','2203','2212','2213','2302','2303','2312','2313',  '3202','3203','3212','3213','3302','3303','3312','3313',
+              '2220','2221','2230','2231','2320','2321','2330','2331',  '3220','3221','3230','3231','3320','3321','3330','3331',
+              '2222','2223','2232','2233','2322','2323','2332','2333',  '3222','3223','3232','3233','3322','3323','3332','3333'
+          ];
 
-              dataLayers = dataLayers.enter()
-                  .append('svg')
-                  .attr('class', 'map-in-map-data')
-                  .merge(dataLayers)
-                  .call(dataLayer)
-                  .call(debugLayer);
+      } else if (dim === 8) {
+          quadKeys = [
+              '000','001','010','011',  '100','101','110','111',
+              '002','003','012','013',  '102','103','112','113',
+              '020','021','030','031',  '120','121','130','131',
+              '022','023','032','033',  '122','123','132','133',
+
+              '200','201','210','211',  '300','301','310','311',
+              '202','203','212','213',  '302','303','312','313',
+              '220','221','230','231',  '320','321','330','331',
+              '222','223','232','233',  '322','323','332','333'
+          ];
 
+      } else if (dim === 4) {
+          quadKeys = [
+              '00','01',  '10','11',
+              '02','03',  '12','13',
 
-              // redraw viewport bounding box
-              if (gesture !== 'pan') {
-                  var getPath = d3_geoPath(projection$$1);
-                  var bbox = { type: 'Polygon', coordinates: [context.map().extent().polygon()] };
+              '20','21',  '30','31',
+              '22','23',  '32','33'
+          ];
 
-                  viewport = wrap.selectAll('.map-in-map-viewport')
-                      .data([0]);
+      } else {  // dim === 2
+          quadKeys = [
+              '0', '1',
+              '2', '3'
+          ];
+      }
 
-                  viewport = viewport.enter()
-                      .append('svg')
-                      .attr('class', 'map-in-map-viewport')
-                      .merge(viewport);
+      return quadKeys;
+  }
 
 
-                  var path = viewport.selectAll('.map-in-map-bbox')
-                      .data([bbox]);
 
-                  path.enter()
-                      .append('path')
-                      .attr('class', 'map-in-map-bbox')
-                      .merge(path)
-                      .attr('d', getPath)
-                      .classed('thick', function(d) { return getPath.area(d) < 30; });
-              }
+  var serviceStreetside = {
+      /**
+       * init() initialize streetside.
+       */
+      init: function () {
+          if (!_ssCache) {
+              this.reset();
           }
 
+          this.event = utilRebind(this, dispatch$6, 'on');
+      },
 
-          function queueRedraw() {
-              clearTimeout(timeoutId);
-              timeoutId = setTimeout(function() { redraw(); }, 750);
-          }
+      /**
+       * reset() reset the cache.
+       */
+      reset: function () {
+          var cache = _ssCache;
 
+          if (cache) {
+              if (cache.bubbles && cache.bubbles.inflight) {
+                  forEach(cache.bubbles.inflight, abortRequest$5);
+              }
+          }
 
-          function toggle() {
-              if (event) event.preventDefault();
+          _ssCache = {
+              bubbles: { inflight: {}, loaded: {}, nextPage: {}, rtree: rbush_1(), points: {}, leaders: [] },
+              sequences: {}
+          };
+      },
 
-              isHidden = !isHidden;
+      /**
+       * bubbles()
+       */
+      bubbles: function (projection) {
+          var limit = 5;
+          return searchLimited$2(limit, projection, _ssCache.bubbles.rtree);
+      },
 
-              select('.minimap-toggle-item')
-                  .classed('active', !isHidden)
-                  .select('input')
-                  .property('checked', !isHidden);
 
-              if (isHidden) {
-                  wrap
-                      .style('display', 'block')
-                      .style('opacity', '1')
-                      .transition()
-                      .duration(200)
-                      .style('opacity', '0')
-                      .on('end', function() {
-                          selection$$1.selectAll('.map-in-map')
-                              .style('display', 'none');
-                      });
-              } else {
-                  wrap
-                      .style('display', 'block')
-                      .style('opacity', '0')
-                      .transition()
-                      .duration(200)
-                      .style('opacity', '1')
-                      .on('end', function() {
-                          redraw();
-                      });
-              }
-          }
+      sequences: function(projection) {
+          var viewport = projection.clipExtent();
+          var min = [viewport[0][0], viewport[1][1]];
+          var max = [viewport[1][0], viewport[0][1]];
+          var bbox = geoExtent(projection.invert(min), projection.invert(max)).bbox();
+          var seen = {};
+          var results = [];
 
+          // all sequences for bubbles in viewport
+          _ssCache.bubbles.rtree.search(bbox)
+              .forEach(function(d) {
+                  var key = d.data.sequenceKey;
+                  if (key && !seen[key]) {
+                      seen[key] = true;
+                      results.push(_ssCache.sequences[key].geojson);
+                  }
+              });
 
-          uiMapInMap.toggle = toggle;
+          return results;
+      },
 
-          wrap = selection$$1.selectAll('.map-in-map')
-              .data([0]);
 
-          wrap = wrap.enter()
-              .append('div')
-              .attr('class', 'map-in-map')
-              .style('display', (isHidden ? 'none' : 'block'))
-              .call(zoom$$1)
-              .on('dblclick.zoom', null)
-              .merge(wrap);
+      /**
+       * loadBubbles()
+       */
+      loadBubbles: function (projection, margin) {
+          // by default: request 2 nearby tiles so we can connect sequences.
+          if (margin === undefined) margin = 2;
 
-          context.map()
-              .on('drawn.map-in-map', function(drawn) {
-                  if (drawn.full === true) {
-                      redraw();
-                  }
-              });
+          loadTiles$2('bubbles', bubbleApi, projection, margin);
+      },
 
-          redraw();
 
-          context.keybinding()
-              .on(t('background.minimap.key'), toggle);
-      }
+      viewer: function() {
+          return _pannellumViewer;
+      },
 
-      return map_in_map;
-  }
 
-  function uiSettingsCustomBackground(context) {
-      var dispatch$$1 = dispatch('change');
+      initViewer: function () {
+          if (!window.pannellum) return;
+          if (_pannellumViewer) return;
 
-      function render(selection) {
-          var _origSettings = {
-              template: context.storage('background-custom-template')
+          var sceneID = ++_currScene + '';
+          var options = {
+              'default': { firstScene: sceneID },
+              scenes: {}
           };
-          var _currSettings = cloneDeep(_origSettings);
-          var example = 'https://{switch:a,b,c}.tile.openstreetmap.org/{zoom}/{x}/{y}.png';
-          var modal = uiConfirm(selection).okButton();
-
-          modal
-              .classed('settings-modal settings-custom-background', true);
+          options.scenes[sceneID] = _sceneOptions;
 
-          modal.select('.modal-section.header')
-              .append('h3')
-              .text(t('settings.custom_background.header'));
+          _pannellumViewer = window.pannellum.viewer('viewer-streetside', options);
 
+          _pannellumViewer
+              .on('mousedown', function() {
+                  select(window).on('mousemove.pannellum', function() {
+                      dispatch$6.call('viewerChanged');
+                  });
+              })
+              .on('mouseup', function() {
+                  select(window).on('mousemove.pannellum', null);
+                  // continue dispatching events for a few seconds, in case viewer has inertia.
+                  var t = timer(function(elapsed) {
+                      dispatch$6.call('viewerChanged');
+                      if (elapsed > 2000) {
+                          t.stop();
+                      }
+                  });
+              });
+      },
 
-          var textSection = modal.select('.modal-section.message-text');
 
-          textSection
-              .append('pre')
-              .attr('class', 'instructions-template')
-              .text(t('settings.custom_background.instructions', { example: example }));
+      /**
+       * loadViewer() create the streeside viewer.
+       */
+      loadViewer: function (context) {
+          var that = this;
 
-          textSection
-              .append('textarea')
-              .attr('class', 'field-template')
-              .attr('placeholder', t('settings.custom_background.template.placeholder'))
-              .call(utilNoAuto)
-              .property('value', _currSettings.template);
+          // create ms-wrapper, a photo wrapper class
+          var wrap = select('#photoviewer').selectAll('.ms-wrapper')
+              .data([0]);
 
+          // inject ms-wrapper into the photoviewer div
+          // (used by all to house each custom photo viewer)
+          var wrapEnter = wrap.enter()
+              .append('div')
+              .attr('id', 'ms')
+              .attr('class', 'photo-wrapper ms-wrapper')
+              .classed('hide', true);
 
-          // insert a cancel button
-          var buttonSection = modal.select('.modal-section.buttons');
+          // inject div to support streetside viewer (pannellum) and attribution line
+          wrapEnter
+              .append('div')
+              .attr('id', 'viewer-streetside')
+              .append('div')
+              .attr('class', 'photo-attribution fillD');
 
-          buttonSection
-              .insert('button', '.ok-button')
-              .attr('class', 'button cancel-button secondary-action')
-              .text(t('confirm.cancel'));
+          var controlsEnter = wrapEnter
+              .append('div')
+              .attr('class', 'photo-controls-wrap')
+              .append('div')
+              .attr('class', 'photo-controls');
 
+          controlsEnter
+              .append('button')
+              .on('click.back', step(-1))
+              .text('◄');
 
-          buttonSection.select('.cancel-button')
-              .on('click.cancel', clickCancel);
+          controlsEnter
+              .append('button')
+              .on('click.forward', step(1))
+              .text('►');
 
-          buttonSection.select('.ok-button')
-              .attr('disabled', isSaveDisabled)
-              .on('click.save', clickSave);
 
+          // create working canvas for stitching together images
+          wrap = wrap
+              .merge(wrapEnter)
+              .call(setupCanvas, true);
 
-          function isSaveDisabled() {
-              return null;
-          }
+          // load streetside pannellum viewer css
+          select('head').selectAll('#streetside-viewercss')
+              .data([0])
+              .enter()
+              .append('link')
+              .attr('id', 'streetside-viewercss')
+              .attr('rel', 'stylesheet')
+              .attr('href', context.asset(pannellumViewerCSS));
 
+          // load streetside pannellum viewer js
+          select('head').selectAll('#streetside-viewerjs')
+              .data([0])
+              .enter()
+              .append('script')
+              .attr('id', 'streetside-viewerjs')
+              .attr('src', context.asset(pannellumViewerJS));
 
-          // restore the original template
-          function clickCancel() {
-              textSection.select('.field-template').property('value', _origSettings.template);
-              context.storage('background-custom-template', _origSettings.template);
-              this.blur();
-              modal.close();
-          }
 
-          // accept the current template
-          function clickSave() {
-              _currSettings.template = textSection.select('.field-template').property('value');
-              context.storage('background-custom-template', _currSettings.template);
-              this.blur();
-              modal.close();
-              dispatch$$1.call('change', this, _currSettings);
-          }
-      }
+          // Register viewer resize handler
+          context.ui().photoviewer.on('resize', function() {
+              if (_pannellumViewer) {
+                  _pannellumViewer.resize();
+              }
+          });
 
-      return utilRebind(render, dispatch$$1, 'on');
-  }
 
-  function uiBackground(context) {
-      var key = t('background.key');
+          function step(stepBy) {
+              return function() {
+                  var viewer = select('#photoviewer');
+                  var selected = viewer.empty() ? undefined : viewer.datum();
+                  if (!selected) return;
 
-      var pane = select(null);
+                  var nextID = (stepBy === 1 ? selected.ne : selected.pr);
+                  var yaw = _pannellumViewer.getYaw();
+                  var ca = selected.ca + yaw;
+                  var origin = selected.loc;
 
-      var _customSource = context.background().findSource('custom');
-      var _previousBackground = context.background().findSource(context.storage('background-last-used-toggle'));
-      var _shown = false;
+                  // construct a search trapezoid pointing out from current bubble
+                  var meters = 35;
+                  var p1 = [
+                      origin[0] + geoMetersToLon(meters / 5, origin[1]),
+                      origin[1]
+                  ];
+                  var p2 = [
+                      origin[0] + geoMetersToLon(meters / 2, origin[1]),
+                      origin[1] + geoMetersToLat(meters)
+                  ];
+                  var p3 = [
+                      origin[0] - geoMetersToLon(meters / 2, origin[1]),
+                      origin[1] + geoMetersToLat(meters)
+                  ];
+                  var p4 = [
+                      origin[0] - geoMetersToLon(meters / 5, origin[1]),
+                      origin[1]
+                  ];
 
-      var _backgroundList = select(null);
-      var _overlayList = select(null);
-      var _displayOptionsContainer = select(null);
-      var _offsetContainer = select(null);
+                  var poly = [p1, p2, p3, p4, p1];
 
-      var backgroundDisplayOptions = uiBackgroundDisplayOptions(context);
-      var backgroundOffset = uiBackgroundOffset(context);
+                  // rotate it to face forward/backward
+                  var angle = (stepBy === 1 ? ca : ca + 180) * (Math.PI / 180);
+                  poly = geoRotate(poly, -angle, origin);
 
-      var settingsCustomBackground = uiSettingsCustomBackground(context)
-          .on('change', customChanged);
+                  var extent = poly.reduce(function(extent, point) {
+                      return extent.extend(geoExtent(point));
+                  }, geoExtent());
 
+                  // find nearest other bubble in the search polygon
+                  var minDist = Infinity;
+                  _ssCache.bubbles.rtree.search(extent.bbox())
+                      .forEach(function(d) {
+                          if (d.data.key === selected.key) return;
+                          if (!geoPointInPolygon(d.data.loc, poly)) return;
 
-      function setTooltips(selection$$1) {
-          selection$$1.each(function(d, i, nodes) {
-              var item = select(this).select('label');
-              var span = item.select('span');
-              var placement = (i < nodes.length / 2) ? 'bottom' : 'top';
-              var description = d.description();
-              var isOverflowing = (span.property('clientWidth') !== span.property('scrollWidth'));
+                          var dist = geoVecLength(d.data.loc, selected.loc);
+                          var theta = selected.ca - d.data.ca;
+                          var minTheta = Math.min(Math.abs(theta), 360 - Math.abs(theta));
+                          if (minTheta > 20) {
+                              dist += 5;  // penalize distance if camera angles don't match
+                          }
 
-              item.call(tooltip().destroyAny);
+                          if (dist < minDist) {
+                              nextID = d.data.key;
+                              minDist = dist;
+                          }
+                      });
 
-              if (d === _previousBackground) {
-                  item.call(tooltip()
-                      .placement(placement)
-                      .html(true)
-                      .title(function() {
-                          var tip = '<div>' + t('background.switch') + '</div>';
-                          return uiTooltipHtml(tip, uiCmd('⌘' + key));
-                      })
-                  );
-              } else if (description || isOverflowing) {
-                  item.call(tooltip()
-                      .placement(placement)
-                      .title(description || d.name())
-                  );
-              }
-          });
-      }
+                  var nextBubble = nextID && _ssCache.bubbles.points[nextID];
+                  if (!nextBubble) return;
 
+                  context.map().centerEase(nextBubble.loc);
 
-      function updateLayerSelections(selection$$1) {
-          function active(d) {
-              return context.background().showsLayer(d);
+                  that.selectImage(nextBubble)
+                      .then(function(r) {
+                          if (r.status === 'ok') {
+                              _sceneOptions.yaw = yaw;
+                              that.showViewer();
+                          }
+                      });
+              };
           }
+      },
 
-          selection$$1.selectAll('.layer')
-              .classed('active', active)
-              .classed('switch', function(d) { return d === _previousBackground; })
-              .call(setTooltips)
-              .selectAll('input')
-              .property('checked', active);
-      }
+      /**
+       * showViewer()
+       */
+      showViewer: function (yaw) {
+          if (!_sceneOptions) return;
 
+          if (yaw !== undefined) {
+              _sceneOptions.yaw = yaw;
+          }
 
-      function chooseBackground(d) {
-          if (d.id === 'custom' && !d.template()) {
-              return editCustom();
+          if (!_pannellumViewer) {
+              this.initViewer();
+          } else {
+              // make a new scene
+              var sceneID = ++_currScene + '';
+              _pannellumViewer
+                  .addScene(sceneID, _sceneOptions)
+                  .loadScene(sceneID);
+
+              // remove previous scene
+              if (_currScene > 2) {
+                  sceneID = (_currScene - 1) + '';
+                  _pannellumViewer
+                      .removeScene(sceneID);
+              }
           }
 
-          event.preventDefault();
-          _previousBackground = context.background().baseLayerSource();
-          context.storage('background-last-used-toggle', _previousBackground.id);
-          context.storage('background-last-used', d.id);
-          context.background().baseLayerSource(d);
-          _backgroundList.call(updateLayerSelections);
-          document.activeElement.blur();
-      }
+          var wrap = select('#photoviewer')
+              .classed('hide', false);
 
+          var isHidden = wrap.selectAll('.photo-wrapper.ms-wrapper.hide').size();
 
-      function customChanged(d) {
-          if (d && d.template) {
-              _customSource.template(d.template);
-              chooseBackground(_customSource);
-          } else {
-              _customSource.template('');
-              chooseBackground(context.background().findSource('none'));
+          if (isHidden) {
+              wrap
+                  .selectAll('.photo-wrapper:not(.ms-wrapper)')
+                  .classed('hide', true);
+
+              wrap
+                  .selectAll('.photo-wrapper.ms-wrapper')
+                  .classed('hide', false);
           }
-      }
 
+          return this;
+      },
 
-      function editCustom() {
-          event.preventDefault();
-          context.container()
-              .call(settingsCustomBackground);
-      }
+      /**
+       * hideViewer()
+       */
+      hideViewer: function () {
+          var viewer = select('#photoviewer');
+          if (!viewer.empty()) viewer.datum(null);
 
+          viewer
+              .classed('hide', true)
+              .selectAll('.photo-wrapper')
+              .classed('hide', true);
 
-      function chooseOverlay(d) {
-          event.preventDefault();
-          context.background().toggleOverlayLayer(d);
-          _overlayList.call(updateLayerSelections);
-          document.activeElement.blur();
-      }
+          d3_selectAll('.viewfield-group, .sequence, .icon-sign')
+              .classed('currentView', false);
 
+          return this.setStyles(null, true);
+      },
 
-      function drawListItems(layerList, type, change, filter) {
-          var sources = context.background()
-              .sources(context.map().extent())
-              .filter(filter);
+      /**
+       * selectImage().
+       */
+      selectImage: function (d) {
+          var response = q.defer();
+          var that = this;
 
-          var layerLinks = layerList.selectAll('li.layer')
-              .data(sources, function(d) { return d.name(); });
+          var viewer = select('#photoviewer');
+          if (!viewer.empty()) viewer.datum(d);
 
-          layerLinks.exit()
-              .remove();
+          this.setStyles(null, true);
 
-          var enter = layerLinks.enter()
-              .append('li')
-              .attr('class', 'layer')
-              .classed('layer-custom', function(d) { return d.id === 'custom'; })
-              .classed('best', function(d) { return d.best(); });
+          var wrap = select('#photoviewer .ms-wrapper');
+          var attribution = wrap.selectAll('.photo-attribution').html('');
 
-          enter.filter(function(d) { return d.id === 'custom'; })
-              .append('button')
-              .attr('class', 'layer-browse')
-              .call(tooltip()
-                  .title(t('settings.custom_background.tooltip'))
-                  .placement((textDirection === 'rtl') ? 'right' : 'left')
-              )
-              .on('click', editCustom)
-              .call(svgIcon('#iD-icon-more'));
+          wrap.selectAll('.pnlm-load-box')   // display "loading.."
+              .style('display', 'block');
 
-          enter.filter(function(d) { return d.best(); })
+          if (!d) {
+              response.resolve({status: 'ok'});
+              return response.promise;
+          }
+
+          var line1 = attribution
               .append('div')
-              .attr('class', 'best')
-              .call(tooltip()
-                  .title(t('background.best_imagery'))
-                  .placement((textDirection === 'rtl') ? 'right' : 'left')
-              )
-              .append('span')
-              .html('&#9733;');
+              .attr('class', 'attribution-row');
 
-          var label = enter
-              .append('label');
+          // Add hires checkbox
+          var label = line1
+              .append('label')
+              .attr('class', 'streetside-hires');
 
           label
               .append('input')
-              .attr('type', type)
-              .attr('name', 'layers')
-              .on('change', change);
+              .attr('type', 'checkbox')
+              .attr('id', 'streetside-hires-input')
+              .property('checked', _hires)
+              .on('click', function() {
+                  event.stopPropagation();
+
+                  _hires = !_hires;
+                  _resolution = _hires ? 1024 : 512;
+                  wrap.call(setupCanvas, true);
+
+                  var viewstate = {
+                      yaw: _pannellumViewer.getYaw(),
+                      pitch: _pannellumViewer.getPitch(),
+                      hfov: _pannellumViewer.getHfov()
+                  };
+
+                  that.selectImage(d)
+                      .then(function(r) {
+                          if (r.status === 'ok') {
+                              _sceneOptions = assignIn(_sceneOptions, viewstate);
+                              that.showViewer();
+                          }
+                      });
+              });
 
           label
               .append('span')
-              .text(function(d) { return d.name(); });
+              .text(t('streetside.hires'));
 
 
-          layerList.selectAll('li.layer')
-              .sort(sortSources)
-              .style('display', layerList.selectAll('li.layer').data().length > 0 ? 'block' : 'none');
+          var captureInfo = line1
+              .append('div')
+              .attr('class', 'attribution-capture-info');
 
-          layerList
-              .call(updateLayerSelections);
+          // Add capture date
+          if (d.captured_by) {
+              var yyyy = (new Date()).getFullYear();
 
+              captureInfo
+                  .append('a')
+                  .attr('class', 'captured_by')
+                  .attr('target', '_blank')
+                  .attr('href', 'https://www.microsoft.com/en-us/maps/streetside')
+                  .text('©' + yyyy + ' Microsoft');
 
-          function sortSources(a, b) {
-              return a.best() && !b.best() ? -1
-                  : b.best() && !a.best() ? 1
-                  : d3_descending(a.area(), b.area()) || ascending(a.name(), b.name()) || 0;
+              captureInfo
+                  .append('span')
+                  .text('|');
           }
-      }
 
+          if (d.captured_at) {
+              captureInfo
+                  .append('span')
+                  .attr('class', 'captured_at')
+                  .text(localeTimestamp(d.captured_at));
+          }
 
-      function renderBackgroundList(selection$$1) {
+          // Add image links
+          var line2 = attribution
+              .append('div')
+              .attr('class', 'attribution-row');
 
-          // the background list
-          var container = selection$$1.selectAll('.layer-background-list')
-              .data([0]);
+          line2
+              .append('a')
+              .attr('class', 'image-view-link')
+              .attr('target', '_blank')
+              .attr('href', 'https://www.bing.com/maps?cp=' + d.loc[1] + '~' + d.loc[0] +
+                  '&lvl=17&dir=' + d.ca + '&style=x&v=2&sV=1')
+              .text(t('streetside.view_on_bing'));
 
-          _backgroundList = container.enter()
-              .append('ul')
-              .attr('class', 'layer-list layer-background-list')
-              .attr('dir', 'auto')
-              .merge(container);
+          line2
+              .append('a')
+              .attr('class', 'image-report-link')
+              .attr('target', '_blank')
+              .attr('href', 'https://www.bing.com/maps/privacyreport/streetsideprivacyreport?bubbleid=' + encodeURIComponent(d.key) +
+                  '&focus=photo&lat=' + d.loc[1] + '&lng=' + d.loc[0] + '&z=17')
+              .text(t('streetside.report'));
 
 
-          // add minimap toggle below list
-          var minimapEnter = selection$$1.selectAll('.minimap-toggle-list')
-              .data([0])
-              .enter()
-              .append('ul')
-              .attr('class', 'layer-list minimap-toggle-list')
-              .append('li')
-              .attr('class', 'layer minimap-toggle-item');
+          var bubbleIdQuadKey = d.key.toString(4);
+          var paddingNeeded = 16 - bubbleIdQuadKey.length;
+          for (var i = 0; i < paddingNeeded; i++) {
+              bubbleIdQuadKey = '0' + bubbleIdQuadKey;
+          }
+          var imgUrlPrefix = streetsideImagesApi + 'hs' + bubbleIdQuadKey;
+          var imgUrlSuffix = '.jpg?g=6338&n=z';
 
-          var minimapLabelEnter = minimapEnter
-              .append('label')
-              .call(tooltip()
-                  .html(true)
-                  .title(uiTooltipHtml(t('background.minimap.tooltip'), t('background.minimap.key')))
-                  .placement('top')
-              );
+          // Cubemap face code order matters here: front=01, right=02, back=03, left=10, up=11, down=12
+          var faceKeys = ['01','02','03','10','11','12'];
 
-          minimapLabelEnter
-              .append('input')
-              .attr('type', 'checkbox')
-              .on('change', function() {
-                  event.preventDefault();
-                  uiMapInMap.toggle();
+          // Map images to cube faces
+          var quadKeys = getQuadKeys();
+          var faces = faceKeys.map(function(faceKey) {
+              return quadKeys.map(function(quadKey) {
+                  var xy = qkToXY(quadKey);
+                  return {
+                      face: faceKey,
+                      url: imgUrlPrefix + faceKey + quadKey + imgUrlSuffix,
+                      x: xy[0],
+                      y: xy[1]
+                  };
               });
+          });
 
-          minimapLabelEnter
-              .append('span')
-              .text(t('background.minimap.description'));
+          processFaces(faces).then(function() {
+              _sceneOptions = {
+                  showFullscreenCtrl: false,
+                  autoLoad: true,
+                  compass: true,
+                  northOffset: d.ca,
+                  yaw: 0,
+                  minHfov: minHfov,
+                  maxHfov: maxHfov,
+                  hfov: defaultHfov,
+                  type: 'cubemap',
+                  cubeMap: [
+                      _dataUrlArray[0],
+                      _dataUrlArray[1],
+                      _dataUrlArray[2],
+                      _dataUrlArray[3],
+                      _dataUrlArray[4],
+                      _dataUrlArray[5]
+                  ]
+              };
+              response.resolve({status: 'ok'});
+          });
 
+          return response.promise;
+      },
 
-          // "Info / Report a Problem" link
-          selection$$1.selectAll('.imagery-faq')
-              .data([0])
-              .enter()
-              .append('div')
-              .attr('class', 'imagery-faq')
-              .append('a')
-              .attr('target', '_blank')
-              .attr('tabindex', -1)
-              .call(svgIcon('#iD-icon-out-link', 'inline'))
-              .attr('href', 'https://github.com/openstreetmap/iD/blob/master/FAQ.md#how-can-i-report-an-issue-with-background-imagery')
-              .append('span')
-              .text(t('background.imagery_source_faq'));
 
-          updateBackgroundList();
-      }
+      getSequenceKeyForBubble: function(d) {
+          return d && d.sequenceKey;
+      },
 
 
-      function renderOverlayList(selection$$1) {
-          var container = selection$$1.selectAll('.layer-overlay-list')
-              .data([0]);
+      // Updates the currently highlighted sequence and selected bubble.
+      // Reset is only necessary when interacting with the viewport because
+      // this implicitly changes the currently selected bubble/sequence
+      setStyles: function (hovered, reset) {
+          if (reset) {  // reset all layers
+              d3_selectAll('.viewfield-group')
+                  .classed('highlighted', false)
+                  .classed('hovered', false)
+                  .classed('currentView', false);
 
-          _overlayList = container.enter()
-              .append('ul')
-              .attr('class', 'layer-list layer-overlay-list')
-              .attr('dir', 'auto')
-              .merge(container);
+              d3_selectAll('.sequence')
+                  .classed('highlighted', false)
+                  .classed('currentView', false);
+          }
 
-          updateOverlayList();
-      }
+          var hoveredBubbleKey = hovered && hovered.key;
+          var hoveredSequenceKey = this.getSequenceKeyForBubble(hovered);
+          var hoveredSequence = hoveredSequenceKey && _ssCache.sequences[hoveredSequenceKey];
+          var hoveredBubbleKeys =  (hoveredSequence && hoveredSequence.bubbles.map(function (d) { return d.key; })) || [];
 
-      function updateBackgroundList() {
-          _backgroundList
-              .call(drawListItems, 'radio', chooseBackground, function(d) { return !d.isHidden() && !d.overlay; });
-      }
+          var viewer = select('#photoviewer');
+          var selected = viewer.empty() ? undefined : viewer.datum();
+          var selectedBubbleKey = selected && selected.key;
+          var selectedSequenceKey = this.getSequenceKeyForBubble(selected);
+          var selectedSequence = selectedSequenceKey && _ssCache.sequences[selectedSequenceKey];
+          var selectedBubbleKeys = (selectedSequence && selectedSequence.bubbles.map(function (d) { return d.key; })) || [];
 
-      function updateOverlayList() {
-          _overlayList
-              .call(drawListItems, 'checkbox', chooseOverlay, function(d) { return !d.isHidden() && d.overlay; });
-      }
+          // highlight sibling viewfields on either the selected or the hovered sequences
+          var highlightedBubbleKeys = union(hoveredBubbleKeys, selectedBubbleKeys);
 
+          d3_selectAll('.layer-streetside-images .viewfield-group')
+              .classed('highlighted', function (d) { return highlightedBubbleKeys.indexOf(d.key) !== -1; })
+              .classed('hovered', function (d) { return d.key === hoveredBubbleKey; })
+              .classed('currentView', function (d) { return d.key === selectedBubbleKey; });
 
-      function update() {
+          d3_selectAll('.layer-streetside-images .sequence')
+              .classed('highlighted', function (d) { return d.properties.key === hoveredSequenceKey; })
+              .classed('currentView', function (d) { return d.properties.key === selectedSequenceKey; });
 
-          if (!pane.select('.disclosure-wrap-background_list').classed('hide')) {
-              updateBackgroundList();
-          }
+          // update viewfields if needed
+          d3_selectAll('.viewfield-group .viewfield')
+              .attr('d', viewfieldPath);
 
-          if (!pane.select('.disclosure-wrap-overlay_list').classed('hide')) {
-              updateOverlayList();
+          function viewfieldPath() {
+              var d = this.parentNode.__data__;
+              if (d.pano && d.key !== selectedBubbleKey) {
+                  return 'M 8,13 m -10,0 a 10,10 0 1,0 20,0 a 10,10 0 1,0 -20,0';
+              } else {
+                  return 'M 6,9 C 8,8.4 8,8.4 10,9 L 16,-2 C 12,-5 4,-5 0,-2 z';
+              }
           }
 
-          _displayOptionsContainer
-              .call(backgroundDisplayOptions);
+          return this;
+      },
 
-          _offsetContainer
-              .call(backgroundOffset);
+      /**
+       * cache().
+       */
+      cache: function () {
+          return _ssCache;
       }
+  };
 
+  var apibase$4 = 'https://taginfo.openstreetmap.org/api/4/';
+  var _inflight$1 = {};
+  var _popularKeys = {};
+  var _taginfoCache = {};
 
-      function quickSwitch() {
-          if (event) {
-              event.stopImmediatePropagation();
-              event.preventDefault();
-          }
-          if (_previousBackground) {
-              chooseBackground(_previousBackground);
-          }
-      }
+  var tag_sorts = {
+      point: 'count_nodes',
+      vertex: 'count_nodes',
+      area: 'count_ways',
+      line: 'count_ways'
+  };
+  var tag_sort_members = {
+      point: 'count_node_members',
+      vertex: 'count_node_members',
+      area: 'count_way_members',
+      line: 'count_way_members',
+      relation: 'count_relation_members'
+  };
+  var tag_filters = {
+      point: 'nodes',
+      vertex: 'nodes',
+      area: 'ways',
+      line: 'ways'
+  };
+  var tag_members_fractions = {
+      point: 'count_node_members_fraction',
+      vertex: 'count_node_members_fraction',
+      area: 'count_way_members_fraction',
+      line: 'count_way_members_fraction',
+      relation: 'count_relation_members_fraction'
+  };
 
 
-      function background(selection$$1) {
+  function sets(params, n, o) {
+      if (params.geometry && o[params.geometry]) {
+          params[n] = o[params.geometry];
+      }
+      return params;
+  }
 
-          function hidePane() {
-              setVisible(false);
-          }
 
-          function togglePane() {
-              if (event) event.preventDefault();
-              paneTooltip.hide(button);
-              setVisible(!button.classed('active'));
-          }
+  function setFilter(params) {
+      return sets(params, 'filter', tag_filters);
+  }
 
-          function setVisible(show) {
-              if (show !== _shown) {
-                  button.classed('active', show);
-                  _shown = show;
 
-                  if (show) {
-                      uiMapData.hidePane();
-                      uiHelp.hidePane();
-                      update();
+  function setSort(params) {
+      return sets(params, 'sortname', tag_sorts);
+  }
 
-                      pane
-                          .style('display', 'block')
-                          .style('right', '-300px')
-                          .transition()
-                          .duration(200)
-                          .style('right', '0px');
 
-                  } else {
-                      pane
-                          .style('display', 'block')
-                          .style('right', '0px')
-                          .transition()
-                          .duration(200)
-                          .style('right', '-300px')
-                          .on('end', function() {
-                              select(this).style('display', 'none');
-                          });
-                  }
-              }
-          }
+  function setSortMembers(params) {
+      return sets(params, 'sortname', tag_sort_members);
+  }
 
 
-          pane = selection$$1
-              .append('div')
-              .attr('class', 'fillL map-pane hide');
+  function clean(params) {
+      return omit(params, ['geometry', 'debounce']);
+  }
 
-          var paneTooltip = tooltip()
-              .placement((textDirection === 'rtl') ? 'right' : 'left')
-              .html(true)
-              .title(uiTooltipHtml(t('background.description'), key));
 
-          var button = selection$$1
-              .append('button')
-              .attr('tabindex', -1)
-              .on('click', togglePane)
-              .call(svgIcon('#iD-icon-layers', 'light'))
-              .call(paneTooltip);
+  function filterKeys(type) {
+      var count_type = type ? 'count_' + type : 'count_all';
+      return function(d) {
+          return parseFloat(d[count_type]) > 2500 || d.in_wiki;
+      };
+  }
 
 
-          var heading = pane
-              .append('div')
-              .attr('class', 'pane-heading');
+  function filterMultikeys(prefix) {
+      return function(d) {
+          // d.key begins with prefix, and d.key contains no additional ':'s
+          var re = new RegExp('^' + prefix + '(.*)$');
+          var matches = d.key.match(re) || [];
+          return (matches.length === 2 && matches[1].indexOf(':') === -1);
+      };
+  }
 
-          heading
-              .append('h2')
-              .text(t('background.title'));
 
-          heading
-              .append('button')
-              .on('click', function() { uiBackground.hidePane(); })
-              .call(svgIcon('#iD-icon-close'));
+  function filterValues(allowUpperCase) {
+      return function(d) {
+          if (d.value.match(/[;,]/) !== null) return false;  // exclude some punctuation
+          if (!allowUpperCase && d.value.match(/[A-Z*]/) !== null) return false;  // exclude uppercase letters
+          return parseFloat(d.fraction) > 0.0;
+      };
+  }
 
 
-          var content = pane
-              .append('div')
-              .attr('class', 'pane-content');
+  function filterRoles(geometry) {
+      return function(d) {
+          if (d.role === '') return false; // exclude empty role
+          if (d.role.match(/[A-Z*;,]/) !== null) return false;  // exclude uppercase letters and some punctuation
+          return parseFloat(d[tag_members_fractions[geometry]]) > 0.0;
+      };
+  }
 
-          // background list
-          content
-              .append('div')
-              .attr('class', 'background-background-list-container')
-              .call(uiDisclosure(context, 'background_list', true)
-                  .title(t('background.backgrounds'))
-                  .content(renderBackgroundList)
-              );
 
-          // overlay list
-          content
-              .append('div')
-              .attr('class', 'background-overlay-list-container')
-              .call(uiDisclosure(context, 'overlay_list', true)
-                  .title(t('background.overlays'))
-                  .content(renderOverlayList)
-              );
+  function valKey(d) {
+      return {
+          value: d.key,
+          title: d.key
+      };
+  }
 
-          // display options
-          _displayOptionsContainer = content
-              .append('div')
-              .attr('class', 'background-display-options');
 
-          // offset controls
-          _offsetContainer = content
-              .append('div')
-              .attr('class', 'background-offset');
+  function valKeyDescription(d) {
+      return {
+          value: d.value,
+          title: d.description || d.value
+      };
+  }
 
 
-          // add listeners
-          context.map()
-              .on('move.background-update', debounce(utilCallWhenIdle(update), 1000));
+  function roleKey(d) {
+      return {
+          value: d.role,
+          title: d.role
+      };
+  }
 
-          context.background()
-              .on('change.background-update', update);
 
+  // sort keys with ':' lower than keys without ':'
+  function sortKeys(a, b) {
+      return (a.key.indexOf(':') === -1 && b.key.indexOf(':') !== -1) ? -1
+          : (a.key.indexOf(':') !== -1 && b.key.indexOf(':') === -1) ? 1
+          : 0;
+  }
 
-          update();
 
-          context.keybinding()
-              .on(key, togglePane)
-              .on(uiCmd('⌘' + key), quickSwitch);
+  var debouncedRequest$1 = debounce(request$2, 300, { leading: false });
 
-          uiBackground.hidePane = hidePane;
-          uiBackground.togglePane = togglePane;
-          uiBackground.setVisible = setVisible;
-      }
+  function request$2(url, params, exactMatch, callback, loaded) {
+      if (_inflight$1[url]) return;
 
-      return background;
-  }
+      if (checkCache(url, params, exactMatch, callback)) return;
 
-  function uiContributors(context) {
-      var osm = context.connection(),
-          debouncedUpdate = debounce(function() { update(); }, 1000),
-          limit = 4,
-          hidden = false,
-          wrap = select(null);
+      _inflight$1[url] = d3_json(url, function (err, data) {
+          delete _inflight$1[url];
+          loaded(err, data);
+      });
+  }
 
 
-      function update() {
-          if (!osm) return;
+  function checkCache(url, params, exactMatch, callback) {
+      var rp = params.rp || 25;
+      var testQuery = params.query || '';
+      var testUrl = url;
 
-          var users = {},
-              entities = context.intersects(context.map().extent());
+      do {
+          var hit = _taginfoCache[testUrl];
 
-          entities.forEach(function(entity) {
-              if (entity && entity.user) users[entity.user] = true;
-          });
+          // exact match, or shorter match yielding fewer than max results (rp)
+          if (hit && (url === testUrl || hit.length < rp)) {
+              callback(null, hit);
+              return true;
+          }
 
-          var u = Object.keys(users),
-              subset = u.slice(0, u.length > limit ? limit - 1 : limit);
+          // don't try to shorten the query
+          if (exactMatch || !testQuery.length) return false;
 
-          wrap.html('')
-              .call(svgIcon('#iD-icon-nearby', 'pre-text light'));
+          // do shorten the query to see if we already have a cached result
+          // that has returned fewer than max results (rp)
+          testQuery = testQuery.slice(0, -1);
+          testUrl = url.replace(/&query=(.*?)&/, '&query=' + testQuery + '&');
+      } while (testQuery.length >= 0);
 
-          var userList = select(document.createElement('span'));
+      return false;
+  }
 
-          userList.selectAll()
-              .data(subset)
-              .enter()
-              .append('a')
-              .attr('class', 'user-link')
-              .attr('href', function(d) { return osm.userURL(d); })
-              .attr('target', '_blank')
-              .attr('tabindex', -1)
-              .text(String);
 
-          if (u.length > limit) {
-              var count = select(document.createElement('span'));
+  var serviceTaginfo = {
 
-              count.append('a')
-                  .attr('target', '_blank')
-                  .attr('tabindex', -1)
-                  .attr('href', function() {
-                      return osm.changesetsURL(context.map().center(), context.map().zoom());
-                  })
-                  .text(u.length - limit + 1);
+      init: function() {
+          _inflight$1 = {};
+          _taginfoCache = {};
+          _popularKeys = {
+              postal_code: true   // #5377
+          };
 
-              wrap.append('span')
-                  .html(t('contributors.truncated_list', { users: userList.html(), count: count.html() }));
+          // Fetch popular keys.  We'll exclude these from `values`
+          // lookups because they stress taginfo, and they aren't likely
+          // to yield meaningful autocomplete results.. see #3955
+          var params = {
+              rp: 100,
+              sortname: 'values_all',
+              sortorder: 'desc',
+              page: 1,
+              debounce: false,
+              lang: currentLocale
+          };
+          this.keys(params, function(err, data) {
+              if (err) return;
+              data.forEach(function(d) {
+                  if (d.value === 'opening_hours') return;  // exception
+                  _popularKeys[d.value] = true;
+              });
+          });
+      },
 
-          } else {
-              wrap.append('span')
-                  .html(t('contributors.list', { users: userList.html() }));
-          }
 
-          if (!u.length) {
-              hidden = true;
-              wrap
-                  .transition()
-                  .style('opacity', 0);
+      reset: function() {
+          forEach(_inflight$1, function(req) { req.abort(); });
+          _inflight$1 = {};
+      },
 
-          } else if (hidden) {
-              wrap
-                  .transition()
-                  .style('opacity', 1);
-          }
-      }
 
+      keys: function(params, callback) {
+          var doRequest = params.debounce ? debouncedRequest$1 : request$2;
+          params = clean(setSort(params));
+          params = assignIn({
+              rp: 10,
+              sortname: 'count_all',
+              sortorder: 'desc',
+              page: 1,
+              lang: currentLocale
+          }, params);
 
-      return function(selection$$1) {
-          if (!osm) return;
-          wrap = selection$$1;
-          update();
+          var url = apibase$4 + 'keys/all?' + utilQsString(params);
+          doRequest(url, params, false, callback, function(err, d) {
+              if (err) {
+                  callback(err);
+              } else {
+                  var f = filterKeys(params.filter);
+                  var result = d.data.filter(f).sort(sortKeys).map(valKey);
+                  _taginfoCache[url] = result;
+                  callback(null, result);
+              }
+          });
+      },
 
-          osm.on('loaded.contributors', debouncedUpdate);
-          context.map().on('move.contributors', debouncedUpdate);
-      };
-  }
 
-  function uiFeatureInfo(context) {
-      function update(selection$$1) {
-          var features = context.features(),
-              stats = features.stats(),
-              count = 0,
-              hiddenList = compact(map$3(features.hidden(), function(k) {
-                  if (stats[k]) {
-                      count += stats[k];
-                      return String(stats[k]) + ' ' + t('feature.' + k + '.description');
-                  }
-              }));
+      multikeys: function(params, callback) {
+          var doRequest = params.debounce ? debouncedRequest$1 : request$2;
+          params = clean(setSort(params));
+          params = assignIn({
+              rp: 25,
+              sortname: 'count_all',
+              sortorder: 'desc',
+              page: 1,
+              lang: currentLocale
+          }, params);
 
-          selection$$1.html('');
+          var prefix = params.query;
+          var url = apibase$4 + 'keys/all?' + utilQsString(params);
+          doRequest(url, params, true, callback, function(err, d) {
+              if (err) {
+                  callback(err);
+              } else {
+                  var f = filterMultikeys(prefix);
+                  var result = d.data.filter(f).map(valKey);
+                  _taginfoCache[url] = result;
+                  callback(null, result);
+              }
+          });
+      },
 
-          if (hiddenList.length) {
-              var tooltipBehavior = tooltip()
-                  .placement('top')
-                  .html(true)
-                  .title(function() {
-                      return uiTooltipHtml(hiddenList.join('<br/>'));
-                  });
 
-              var warning = selection$$1.append('a')
-                  .attr('href', '#')
-                  .attr('tabindex', -1)
-                  .html(t('feature_info.hidden_warning', { count: count }))
-                  .call(tooltipBehavior)
-                  .on('click', function() {
-                      tooltipBehavior.hide(warning);
-                      // open map data panel?
-                      event.preventDefault();
-                  });
+      values: function(params, callback) {
+          // Exclude popular keys from values lookups.. see #3955
+          var key = params.key;
+          if (key && _popularKeys[key]) {
+              callback(null, []);
+              return;
           }
 
-          selection$$1
-              .classed('hide', !hiddenList.length);
-      }
+          var doRequest = params.debounce ? debouncedRequest$1 : request$2;
+          params = clean(setSort(setFilter(params)));
+          params = assignIn({
+              rp: 25,
+              sortname: 'count_all',
+              sortorder: 'desc',
+              page: 1,
+              lang: currentLocale
+          }, params);
+
+          var url = apibase$4 + 'key/values?' + utilQsString(params);
+          doRequest(url, params, false, callback, function(err, d) {
+              if (err) {
+                  callback(err);
+              } else {
+                  // In most cases we prefer taginfo value results with lowercase letters.
+                  // A few OSM keys expect values to contain uppercase values (see #3377).
+                  // This is not an exhaustive list (e.g. `name` also has uppercase values)
+                  // but these are the fields where taginfo value lookup is most useful.
+                  var re = /network|taxon|genus|species|brand|grape_variety|royal_cypher|listed_status|booth|rating|stars|:output|_hours|_times/;
+                  var allowUpperCase = (params.key.match(re) !== null);
+                  var f = filterValues(allowUpperCase);
+
+                  var result = d.data.filter(f).map(valKeyDescription);
+                  _taginfoCache[url] = result;
+                  callback(null, result);
+              }
+          });
+      },
 
 
-      return function(selection$$1) {
-          update(selection$$1);
+      roles: function(params, callback) {
+          var doRequest = params.debounce ? debouncedRequest$1 : request$2;
+          var geometry = params.geometry;
+          params = clean(setSortMembers(params));
+          params = assignIn({
+              rp: 25,
+              sortname: 'count_all_members',
+              sortorder: 'desc',
+              page: 1,
+              lang: currentLocale
+          }, params);
 
-          context.features().on('change.feature_info', function() {
-              update(selection$$1);
+          var url = apibase$4 + 'relation/roles?' + utilQsString(params);
+          doRequest(url, params, true, callback, function(err, d) {
+              if (err) {
+                  callback(err);
+              } else {
+                  var f = filterRoles(geometry);
+                  var result = d.data.filter(f).map(roleKey);
+                  _taginfoCache[url] = result;
+                  callback(null, result);
+              }
           });
-      };
-  }
+      },
 
-  function uiFullScreen(context) {
-      var element = context.container().node();
-      // var button = d3_select(null);
 
+      docs: function(params, callback) {
+          var doRequest = params.debounce ? debouncedRequest$1 : request$2;
+          params = clean(setSort(params));
 
-      function getFullScreenFn() {
-          if (element.requestFullscreen) {
-              return element.requestFullscreen;
-          } else if (element.msRequestFullscreen) {
-              return element.msRequestFullscreen;
-          } else if (element.mozRequestFullScreen) {
-              return element.mozRequestFullScreen;
-          } else if (element.webkitRequestFullscreen) {
-              return element.webkitRequestFullscreen;
+          var path = 'key/wiki_pages?';
+          if (params.value) {
+              path = 'tag/wiki_pages?';
+          } else if (params.rtype) {
+              path = 'relation/wiki_pages?';
           }
-      }
-
 
-      function getExitFullScreenFn() {
-          if (document.exitFullscreen) {
-              return document.exitFullscreen;
-          } else if (document.msExitFullscreen) {
-              return document.msExitFullscreen;
-          } else if (document.mozCancelFullScreen) {
-              return document.mozCancelFullScreen;
-          } else if (document.webkitExitFullscreen) {
-              return document.webkitExitFullscreen;
-          }
-      }
+          var url = apibase$4 + path + utilQsString(params);
+          doRequest(url, params, true, callback, function(err, d) {
+              if (err) {
+                  callback(err);
+              } else {
+                  _taginfoCache[url] = d.data;
+                  callback(null, d.data);
+              }
+          });
+      },
 
 
-      function isFullScreen() {
-          return document.fullscreenElement ||
-              document.mozFullScreenElement ||
-              document.webkitFullscreenElement ||
-              document.msFullscreenElement;
+      apibase: function(_) {
+          if (!arguments.length) return apibase$4;
+          apibase$4 = _;
+          return this;
       }
 
+  };
 
-      function isSupported() {
-          return !!getFullScreenFn();
+  var helpers = createCommonjsModule(function (module, exports) {
+  Object.defineProperty(exports, "__esModule", { value: true });
+  /**
+   * @module helpers
+   */
+  /**
+   * Earth Radius used with the Harvesine formula and approximates using a spherical (non-ellipsoid) Earth.
+   *
+   * @memberof helpers
+   * @type {number}
+   */
+  exports.earthRadius = 6371008.8;
+  /**
+   * Unit of measurement factors using a spherical (non-ellipsoid) earth radius.
+   *
+   * @memberof helpers
+   * @type {Object}
+   */
+  exports.factors = {
+      centimeters: exports.earthRadius * 100,
+      centimetres: exports.earthRadius * 100,
+      degrees: exports.earthRadius / 111325,
+      feet: exports.earthRadius * 3.28084,
+      inches: exports.earthRadius * 39.370,
+      kilometers: exports.earthRadius / 1000,
+      kilometres: exports.earthRadius / 1000,
+      meters: exports.earthRadius,
+      metres: exports.earthRadius,
+      miles: exports.earthRadius / 1609.344,
+      millimeters: exports.earthRadius * 1000,
+      millimetres: exports.earthRadius * 1000,
+      nauticalmiles: exports.earthRadius / 1852,
+      radians: 1,
+      yards: exports.earthRadius / 1.0936,
+  };
+  /**
+   * Units of measurement factors based on 1 meter.
+   *
+   * @memberof helpers
+   * @type {Object}
+   */
+  exports.unitsFactors = {
+      centimeters: 100,
+      centimetres: 100,
+      degrees: 1 / 111325,
+      feet: 3.28084,
+      inches: 39.370,
+      kilometers: 1 / 1000,
+      kilometres: 1 / 1000,
+      meters: 1,
+      metres: 1,
+      miles: 1 / 1609.344,
+      millimeters: 1000,
+      millimetres: 1000,
+      nauticalmiles: 1 / 1852,
+      radians: 1 / exports.earthRadius,
+      yards: 1 / 1.0936,
+  };
+  /**
+   * Area of measurement factors based on 1 square meter.
+   *
+   * @memberof helpers
+   * @type {Object}
+   */
+  exports.areaFactors = {
+      acres: 0.000247105,
+      centimeters: 10000,
+      centimetres: 10000,
+      feet: 10.763910417,
+      inches: 1550.003100006,
+      kilometers: 0.000001,
+      kilometres: 0.000001,
+      meters: 1,
+      metres: 1,
+      miles: 3.86e-7,
+      millimeters: 1000000,
+      millimetres: 1000000,
+      yards: 1.195990046,
+  };
+  /**
+   * Wraps a GeoJSON {@link Geometry} in a GeoJSON {@link Feature}.
+   *
+   * @name feature
+   * @param {Geometry} geometry input geometry
+   * @param {Object} [properties={}] an Object of key-value pairs to add as properties
+   * @param {Object} [options={}] Optional Parameters
+   * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature
+   * @param {string|number} [options.id] Identifier associated with the Feature
+   * @returns {Feature} a GeoJSON Feature
+   * @example
+   * var geometry = {
+   *   "type": "Point",
+   *   "coordinates": [110, 50]
+   * };
+   *
+   * var feature = turf.feature(geometry);
+   *
+   * //=feature
+   */
+  function feature(geom, properties, options) {
+      if (options === void 0) { options = {}; }
+      var feat = { type: "Feature" };
+      if (options.id === 0 || options.id) {
+          feat.id = options.id;
       }
-
-
-      function fullScreen() {
-          event.preventDefault();
-          if (!isFullScreen()) {
-              // button.classed('active', true);
-              getFullScreenFn().apply(element);
-          } else {
-              // button.classed('active', false);
-              getExitFullScreenFn().apply(document);
+      if (options.bbox) {
+          feat.bbox = options.bbox;
+      }
+      feat.properties = properties || {};
+      feat.geometry = geom;
+      return feat;
+  }
+  exports.feature = feature;
+  /**
+   * Creates a GeoJSON {@link Geometry} from a Geometry string type & coordinates.
+   * For GeometryCollection type use `helpers.geometryCollection`
+   *
+   * @name geometry
+   * @param {string} type Geometry Type
+   * @param {Array<any>} coordinates Coordinates
+   * @param {Object} [options={}] Optional Parameters
+   * @returns {Geometry} a GeoJSON Geometry
+   * @example
+   * var type = "Point";
+   * var coordinates = [110, 50];
+   * var geometry = turf.geometry(type, coordinates);
+   * // => geometry
+   */
+  function geometry(type, coordinates, options) {
+      if (options === void 0) { options = {}; }
+      switch (type) {
+          case "Point": return point(coordinates).geometry;
+          case "LineString": return lineString(coordinates).geometry;
+          case "Polygon": return polygon(coordinates).geometry;
+          case "MultiPoint": return multiPoint(coordinates).geometry;
+          case "MultiLineString": return multiLineString(coordinates).geometry;
+          case "MultiPolygon": return multiPolygon(coordinates).geometry;
+          default: throw new Error(type + " is invalid");
+      }
+  }
+  exports.geometry = geometry;
+  /**
+   * Creates a {@link Point} {@link Feature} from a Position.
+   *
+   * @name point
+   * @param {Array<number>} coordinates longitude, latitude position (each in decimal degrees)
+   * @param {Object} [properties={}] an Object of key-value pairs to add as properties
+   * @param {Object} [options={}] Optional Parameters
+   * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature
+   * @param {string|number} [options.id] Identifier associated with the Feature
+   * @returns {Feature<Point>} a Point feature
+   * @example
+   * var point = turf.point([-75.343, 39.984]);
+   *
+   * //=point
+   */
+  function point(coordinates, properties, options) {
+      if (options === void 0) { options = {}; }
+      var geom = {
+          type: "Point",
+          coordinates: coordinates,
+      };
+      return feature(geom, properties, options);
+  }
+  exports.point = point;
+  /**
+   * Creates a {@link Point} {@link FeatureCollection} from an Array of Point coordinates.
+   *
+   * @name points
+   * @param {Array<Array<number>>} coordinates an array of Points
+   * @param {Object} [properties={}] Translate these properties to each Feature
+   * @param {Object} [options={}] Optional Parameters
+   * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north]
+   * associated with the FeatureCollection
+   * @param {string|number} [options.id] Identifier associated with the FeatureCollection
+   * @returns {FeatureCollection<Point>} Point Feature
+   * @example
+   * var points = turf.points([
+   *   [-75, 39],
+   *   [-80, 45],
+   *   [-78, 50]
+   * ]);
+   *
+   * //=points
+   */
+  function points(coordinates, properties, options) {
+      if (options === void 0) { options = {}; }
+      return featureCollection(coordinates.map(function (coords) {
+          return point(coords, properties);
+      }), options);
+  }
+  exports.points = points;
+  /**
+   * Creates a {@link Polygon} {@link Feature} from an Array of LinearRings.
+   *
+   * @name polygon
+   * @param {Array<Array<Array<number>>>} coordinates an array of LinearRings
+   * @param {Object} [properties={}] an Object of key-value pairs to add as properties
+   * @param {Object} [options={}] Optional Parameters
+   * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature
+   * @param {string|number} [options.id] Identifier associated with the Feature
+   * @returns {Feature<Polygon>} Polygon Feature
+   * @example
+   * var polygon = turf.polygon([[[-5, 52], [-4, 56], [-2, 51], [-7, 54], [-5, 52]]], { name: 'poly1' });
+   *
+   * //=polygon
+   */
+  function polygon(coordinates, properties, options) {
+      if (options === void 0) { options = {}; }
+      for (var _i = 0, coordinates_1 = coordinates; _i < coordinates_1.length; _i++) {
+          var ring = coordinates_1[_i];
+          if (ring.length < 4) {
+              throw new Error("Each LinearRing of a Polygon must have 4 or more Positions.");
+          }
+          for (var j = 0; j < ring[ring.length - 1].length; j++) {
+              // Check if first point of Polygon contains two numbers
+              if (ring[ring.length - 1][j] !== ring[0][j]) {
+                  throw new Error("First and last Position are not equivalent.");
+              }
           }
       }
-
-
-      return function() { // selection) {
-          if (!isSupported()) return;
-
-          // button = selection.append('button')
-          //     .attr('title', t('full_screen'))
-          //     .attr('tabindex', -1)
-          //     .on('click', fullScreen)
-          //     .call(tooltip);
-
-          // button.append('span')
-          //     .attr('class', 'icon full-screen');
-
-          var detected = utilDetect();
-          var keys = (detected.os === 'mac' ? [uiCmd('⌃⌘F'), 'f11'] : ['f11']);
-          context.keybinding().on(keys, fullScreen);
+      var geom = {
+          type: "Polygon",
+          coordinates: coordinates,
       };
+      return feature(geom, properties, options);
   }
-
-  function uiLoading(context) {
-      var _modalSelection = select(null);
-      var _message = '';
-      var _blocking = false;
-
-
-      var loading = function(selection$$1) {
-          _modalSelection = uiModal(selection$$1, _blocking);
-
-          var loadertext = _modalSelection.select('.content')
-              .classed('loading-modal', true)
-              .append('div')
-              .attr('class', 'modal-section fillL');
-
-          loadertext
-              .append('img')
-              .attr('class', 'loader')
-              .attr('src', context.imagePath('loader-white.gif'));
-
-          loadertext
-              .append('h3')
-              .text(_message);
-
-          _modalSelection.select('button.close')
-              .attr('class', 'hide');
-
-          return loading;
+  exports.polygon = polygon;
+  /**
+   * Creates a {@link Polygon} {@link FeatureCollection} from an Array of Polygon coordinates.
+   *
+   * @name polygons
+   * @param {Array<Array<Array<Array<number>>>>} coordinates an array of Polygon coordinates
+   * @param {Object} [properties={}] an Object of key-value pairs to add as properties
+   * @param {Object} [options={}] Optional Parameters
+   * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature
+   * @param {string|number} [options.id] Identifier associated with the FeatureCollection
+   * @returns {FeatureCollection<Polygon>} Polygon FeatureCollection
+   * @example
+   * var polygons = turf.polygons([
+   *   [[[-5, 52], [-4, 56], [-2, 51], [-7, 54], [-5, 52]]],
+   *   [[[-15, 42], [-14, 46], [-12, 41], [-17, 44], [-15, 42]]],
+   * ]);
+   *
+   * //=polygons
+   */
+  function polygons(coordinates, properties, options) {
+      if (options === void 0) { options = {}; }
+      return featureCollection(coordinates.map(function (coords) {
+          return polygon(coords, properties);
+      }), options);
+  }
+  exports.polygons = polygons;
+  /**
+   * Creates a {@link LineString} {@link Feature} from an Array of Positions.
+   *
+   * @name lineString
+   * @param {Array<Array<number>>} coordinates an array of Positions
+   * @param {Object} [properties={}] an Object of key-value pairs to add as properties
+   * @param {Object} [options={}] Optional Parameters
+   * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature
+   * @param {string|number} [options.id] Identifier associated with the Feature
+   * @returns {Feature<LineString>} LineString Feature
+   * @example
+   * var linestring1 = turf.lineString([[-24, 63], [-23, 60], [-25, 65], [-20, 69]], {name: 'line 1'});
+   * var linestring2 = turf.lineString([[-14, 43], [-13, 40], [-15, 45], [-10, 49]], {name: 'line 2'});
+   *
+   * //=linestring1
+   * //=linestring2
+   */
+  function lineString(coordinates, properties, options) {
+      if (options === void 0) { options = {}; }
+      if (coordinates.length < 2) {
+          throw new Error("coordinates must be an array of two or more positions");
+      }
+      var geom = {
+          type: "LineString",
+          coordinates: coordinates,
       };
-
-
-      loading.message = function(_) {
-          if (!arguments.length) return _message;
-          _message = _;
-          return loading;
+      return feature(geom, properties, options);
+  }
+  exports.lineString = lineString;
+  /**
+   * Creates a {@link LineString} {@link FeatureCollection} from an Array of LineString coordinates.
+   *
+   * @name lineStrings
+   * @param {Array<Array<Array<number>>>} coordinates an array of LinearRings
+   * @param {Object} [properties={}] an Object of key-value pairs to add as properties
+   * @param {Object} [options={}] Optional Parameters
+   * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north]
+   * associated with the FeatureCollection
+   * @param {string|number} [options.id] Identifier associated with the FeatureCollection
+   * @returns {FeatureCollection<LineString>} LineString FeatureCollection
+   * @example
+   * var linestrings = turf.lineStrings([
+   *   [[-24, 63], [-23, 60], [-25, 65], [-20, 69]],
+   *   [[-14, 43], [-13, 40], [-15, 45], [-10, 49]]
+   * ]);
+   *
+   * //=linestrings
+   */
+  function lineStrings(coordinates, properties, options) {
+      if (options === void 0) { options = {}; }
+      return featureCollection(coordinates.map(function (coords) {
+          return lineString(coords, properties);
+      }), options);
+  }
+  exports.lineStrings = lineStrings;
+  /**
+   * Takes one or more {@link Feature|Features} and creates a {@link FeatureCollection}.
+   *
+   * @name featureCollection
+   * @param {Feature[]} features input features
+   * @param {Object} [options={}] Optional Parameters
+   * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature
+   * @param {string|number} [options.id] Identifier associated with the Feature
+   * @returns {FeatureCollection} FeatureCollection of Features
+   * @example
+   * var locationA = turf.point([-75.343, 39.984], {name: 'Location A'});
+   * var locationB = turf.point([-75.833, 39.284], {name: 'Location B'});
+   * var locationC = turf.point([-75.534, 39.123], {name: 'Location C'});
+   *
+   * var collection = turf.featureCollection([
+   *   locationA,
+   *   locationB,
+   *   locationC
+   * ]);
+   *
+   * //=collection
+   */
+  function featureCollection(features, options) {
+      if (options === void 0) { options = {}; }
+      var fc = { type: "FeatureCollection" };
+      if (options.id) {
+          fc.id = options.id;
+      }
+      if (options.bbox) {
+          fc.bbox = options.bbox;
+      }
+      fc.features = features;
+      return fc;
+  }
+  exports.featureCollection = featureCollection;
+  /**
+   * Creates a {@link Feature<MultiLineString>} based on a
+   * coordinate array. Properties can be added optionally.
+   *
+   * @name multiLineString
+   * @param {Array<Array<Array<number>>>} coordinates an array of LineStrings
+   * @param {Object} [properties={}] an Object of key-value pairs to add as properties
+   * @param {Object} [options={}] Optional Parameters
+   * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature
+   * @param {string|number} [options.id] Identifier associated with the Feature
+   * @returns {Feature<MultiLineString>} a MultiLineString feature
+   * @throws {Error} if no coordinates are passed
+   * @example
+   * var multiLine = turf.multiLineString([[[0,0],[10,10]]]);
+   *
+   * //=multiLine
+   */
+  function multiLineString(coordinates, properties, options) {
+      if (options === void 0) { options = {}; }
+      var geom = {
+          type: "MultiLineString",
+          coordinates: coordinates,
+      };
+      return feature(geom, properties, options);
+  }
+  exports.multiLineString = multiLineString;
+  /**
+   * Creates a {@link Feature<MultiPoint>} based on a
+   * coordinate array. Properties can be added optionally.
+   *
+   * @name multiPoint
+   * @param {Array<Array<number>>} coordinates an array of Positions
+   * @param {Object} [properties={}] an Object of key-value pairs to add as properties
+   * @param {Object} [options={}] Optional Parameters
+   * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature
+   * @param {string|number} [options.id] Identifier associated with the Feature
+   * @returns {Feature<MultiPoint>} a MultiPoint feature
+   * @throws {Error} if no coordinates are passed
+   * @example
+   * var multiPt = turf.multiPoint([[0,0],[10,10]]);
+   *
+   * //=multiPt
+   */
+  function multiPoint(coordinates, properties, options) {
+      if (options === void 0) { options = {}; }
+      var geom = {
+          type: "MultiPoint",
+          coordinates: coordinates,
       };
-
-
-      loading.blocking = function(_) {
-          if (!arguments.length) return _blocking;
-          _blocking = _;
-          return loading;
+      return feature(geom, properties, options);
+  }
+  exports.multiPoint = multiPoint;
+  /**
+   * Creates a {@link Feature<MultiPolygon>} based on a
+   * coordinate array. Properties can be added optionally.
+   *
+   * @name multiPolygon
+   * @param {Array<Array<Array<Array<number>>>>} coordinates an array of Polygons
+   * @param {Object} [properties={}] an Object of key-value pairs to add as properties
+   * @param {Object} [options={}] Optional Parameters
+   * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature
+   * @param {string|number} [options.id] Identifier associated with the Feature
+   * @returns {Feature<MultiPolygon>} a multipolygon feature
+   * @throws {Error} if no coordinates are passed
+   * @example
+   * var multiPoly = turf.multiPolygon([[[[0,0],[0,10],[10,10],[10,0],[0,0]]]]);
+   *
+   * //=multiPoly
+   *
+   */
+  function multiPolygon(coordinates, properties, options) {
+      if (options === void 0) { options = {}; }
+      var geom = {
+          type: "MultiPolygon",
+          coordinates: coordinates,
       };
-
-
-      loading.close = function() {
-          _modalSelection.remove();
+      return feature(geom, properties, options);
+  }
+  exports.multiPolygon = multiPolygon;
+  /**
+   * Creates a {@link Feature<GeometryCollection>} based on a
+   * coordinate array. Properties can be added optionally.
+   *
+   * @name geometryCollection
+   * @param {Array<Geometry>} geometries an array of GeoJSON Geometries
+   * @param {Object} [properties={}] an Object of key-value pairs to add as properties
+   * @param {Object} [options={}] Optional Parameters
+   * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature
+   * @param {string|number} [options.id] Identifier associated with the Feature
+   * @returns {Feature<GeometryCollection>} a GeoJSON GeometryCollection Feature
+   * @example
+   * var pt = turf.geometry("Point", [100, 0]);
+   * var line = turf.geometry("LineString", [[101, 0], [102, 1]]);
+   * var collection = turf.geometryCollection([pt, line]);
+   *
+   * // => collection
+   */
+  function geometryCollection(geometries, properties, options) {
+      if (options === void 0) { options = {}; }
+      var geom = {
+          type: "GeometryCollection",
+          geometries: geometries,
       };
-
-
-      return loading;
+      return feature(geom, properties, options);
   }
-
-  function uiGeolocate(context) {
-      var geoOptions = { enableHighAccuracy: false, timeout: 6000 /* 6sec */ };
-      var locating = uiLoading(context).message(t('geolocate.locating')).blocking(true);
-      var layer = context.layers().layer('geolocate');
-      var _position;
-      var _extent;
-      var _timeoutID;
-
-
-      function click() {
-          if (context.inIntro()) return;
-          context.enter(modeBrowse(context));
-          if (!layer.enabled()) {
-              if (!_position) {
-                  context.container().call(locating);
-                  navigator.geolocation.getCurrentPosition(success, error, geoOptions);
-              } else {
-                  zoomTo();
-              }
-          } else {
-              layer.enabled(null, false);
-          }
-          // This timeout ensures that we still call finish() even if
-          // the user declines to share their location in Firefox
-          _timeoutID = setTimeout(finish, 10000 /* 10sec */ );
+  exports.geometryCollection = geometryCollection;
+  /**
+   * Round number to precision
+   *
+   * @param {number} num Number
+   * @param {number} [precision=0] Precision
+   * @returns {number} rounded number
+   * @example
+   * turf.round(120.4321)
+   * //=120
+   *
+   * turf.round(120.4321, 2)
+   * //=120.43
+   */
+  function round(num, precision) {
+      if (precision === void 0) { precision = 0; }
+      if (precision && !(precision >= 0)) {
+          throw new Error("precision must be a positive number");
       }
-
-      function zoomTo() {
-          var map = context.map();
-          layer.enabled(_position, true);
-          map.centerZoomEase(_extent.center(), Math.min(20, map.extentZoom(_extent)));
+      var multiplier = Math.pow(10, precision || 0);
+      return Math.round(num * multiplier) / multiplier;
+  }
+  exports.round = round;
+  /**
+   * Convert a distance measurement (assuming a spherical Earth) from radians to a more friendly unit.
+   * Valid units: miles, nauticalmiles, inches, yards, meters, metres, kilometers, centimeters, feet
+   *
+   * @name radiansToLength
+   * @param {number} radians in radians across the sphere
+   * @param {string} [units="kilometers"] can be degrees, radians, miles, or kilometers inches, yards, metres,
+   * meters, kilometres, kilometers.
+   * @returns {number} distance
+   */
+  function radiansToLength(radians, units) {
+      if (units === void 0) { units = "kilometers"; }
+      var factor = exports.factors[units];
+      if (!factor) {
+          throw new Error(units + " units is invalid");
       }
-
-
-      function success(geolocation) {
-          _position = geolocation;
-          var coords = _position.coords;
-          _extent = geoExtent$$1([coords.longitude, coords.latitude]).padByMeters(coords.accuracy);
-          zoomTo();
-          finish();
+      return radians * factor;
+  }
+  exports.radiansToLength = radiansToLength;
+  /**
+   * Convert a distance measurement (assuming a spherical Earth) from a real-world unit into radians
+   * Valid units: miles, nauticalmiles, inches, yards, meters, metres, kilometers, centimeters, feet
+   *
+   * @name lengthToRadians
+   * @param {number} distance in real units
+   * @param {string} [units="kilometers"] can be degrees, radians, miles, or kilometers inches, yards, metres,
+   * meters, kilometres, kilometers.
+   * @returns {number} radians
+   */
+  function lengthToRadians(distance, units) {
+      if (units === void 0) { units = "kilometers"; }
+      var factor = exports.factors[units];
+      if (!factor) {
+          throw new Error(units + " units is invalid");
       }
-
-
-      function error() {
-          finish();
+      return distance / factor;
+  }
+  exports.lengthToRadians = lengthToRadians;
+  /**
+   * Convert a distance measurement (assuming a spherical Earth) from a real-world unit into degrees
+   * Valid units: miles, nauticalmiles, inches, yards, meters, metres, centimeters, kilometres, feet
+   *
+   * @name lengthToDegrees
+   * @param {number} distance in real units
+   * @param {string} [units="kilometers"] can be degrees, radians, miles, or kilometers inches, yards, metres,
+   * meters, kilometres, kilometers.
+   * @returns {number} degrees
+   */
+  function lengthToDegrees(distance, units) {
+      return radiansToDegrees(lengthToRadians(distance, units));
+  }
+  exports.lengthToDegrees = lengthToDegrees;
+  /**
+   * Converts any bearing angle from the north line direction (positive clockwise)
+   * and returns an angle between 0-360 degrees (positive clockwise), 0 being the north line
+   *
+   * @name bearingToAzimuth
+   * @param {number} bearing angle, between -180 and +180 degrees
+   * @returns {number} angle between 0 and 360 degrees
+   */
+  function bearingToAzimuth(bearing) {
+      var angle = bearing % 360;
+      if (angle < 0) {
+          angle += 360;
       }
-
-
-      function finish() {
-          locating.close();  // unblock ui
-          if (_timeoutID) { clearTimeout(_timeoutID); }
-          _timeoutID = undefined;
+      return angle;
+  }
+  exports.bearingToAzimuth = bearingToAzimuth;
+  /**
+   * Converts an angle in radians to degrees
+   *
+   * @name radiansToDegrees
+   * @param {number} radians angle in radians
+   * @returns {number} degrees between 0 and 360 degrees
+   */
+  function radiansToDegrees(radians) {
+      var degrees = radians % (2 * Math.PI);
+      return degrees * 180 / Math.PI;
+  }
+  exports.radiansToDegrees = radiansToDegrees;
+  /**
+   * Converts an angle in degrees to radians
+   *
+   * @name degreesToRadians
+   * @param {number} degrees angle between 0 and 360 degrees
+   * @returns {number} angle in radians
+   */
+  function degreesToRadians(degrees) {
+      var radians = degrees % 360;
+      return radians * Math.PI / 180;
+  }
+  exports.degreesToRadians = degreesToRadians;
+  /**
+   * Converts a length to the requested unit.
+   * Valid units: miles, nauticalmiles, inches, yards, meters, metres, kilometers, centimeters, feet
+   *
+   * @param {number} length to be converted
+   * @param {Units} [originalUnit="kilometers"] of the length
+   * @param {Units} [finalUnit="kilometers"] returned unit
+   * @returns {number} the converted length
+   */
+  function convertLength(length, originalUnit, finalUnit) {
+      if (originalUnit === void 0) { originalUnit = "kilometers"; }
+      if (finalUnit === void 0) { finalUnit = "kilometers"; }
+      if (!(length >= 0)) {
+          throw new Error("length must be a positive number");
       }
-
-
-      return function(selection) {
-          if (!navigator.geolocation) return;
-
-          selection
-              .append('button')
-              .attr('tabindex', -1)
-              .attr('title', t('geolocate.title'))
-              .on('click', click)
-              .call(svgIcon('#iD-icon-geolocate', 'light'))
-              .call(tooltip()
-                  .placement((textDirection === 'rtl') ? 'right' : 'left'));
-      };
+      return radiansToLength(lengthToRadians(length, originalUnit), finalUnit);
   }
-
-  function uiPanelBackground(context) {
-      var background = context.background();
-      var currSourceName = null;
-      var metadata = {};
-      var metadataKeys = [
-          'zoom', 'vintage', 'source', 'description', 'resolution', 'accuracy'
-      ];
-
-      var debouncedRedraw = debounce(redraw, 250);
-
-      function redraw(selection$$1) {
-          var source = background.baseLayerSource();
-          var isDG = (source.id.match(/^DigitalGlobe/i) !== null);
-
-          if (currSourceName !== source.name()) {
-              currSourceName = source.name();
-              metadata = {};
-          }
-
-          selection$$1.html('');
-
-          var list = selection$$1
-              .append('ul')
-              .attr('class', 'background-info');
-
-          list
-              .append('li')
-              .text(currSourceName);
-
-          metadataKeys.forEach(function(k) {
-              // DigitalGlobe vintage is available in raster layers for now.
-              if (isDG && k === 'vintage') return;
-
-              list
-                  .append('li')
-                  .attr('class', 'background-info-list-' + k)
-                  .classed('hide', !metadata[k])
-                  .text(t('info_panels.background.' + k) + ':')
-                  .append('span')
-                  .attr('class', 'background-info-span-' + k)
-                  .text(metadata[k]);
-          });
-
-          debouncedGetMetadata(selection$$1);
-
-          var toggleTiles = context.getDebug('tile') ? 'hide_tiles' : 'show_tiles';
-
-          selection$$1
-              .append('a')
-              .text(t('info_panels.background.' + toggleTiles))
-              .attr('href', '#')
-              .attr('class', 'button button-toggle-tiles')
-              .on('click', function() {
-                  event.preventDefault();
-                  context.setDebug('tile', !context.getDebug('tile'));
-                  selection$$1.call(redraw);
-              });
-
-          if (isDG) {
-              var key = source.id + '-vintage';
-              var sourceVintage = context.background().findSource(key);
-              var showsVintage = context.background().showsLayer(sourceVintage);
-              var toggleVintage = showsVintage ? 'hide_vintage' : 'show_vintage';
-              selection$$1
-                  .append('a')
-                  .text(t('info_panels.background.' + toggleVintage))
-                  .attr('href', '#')
-                  .attr('class', 'button button-toggle-vintage')
-                  .on('click', function() {
-                      event.preventDefault();
-                      context.background().toggleOverlayLayer(sourceVintage);
-                      selection$$1.call(redraw);
-                  });
-          }
-
-          // disable if necessary
-          ['DigitalGlobe-Premium', 'DigitalGlobe-Standard'].forEach(function(layerId) {
-              if (source.id !== layerId) {
-                  var key = layerId + '-vintage';
-                  var sourceVintage = context.background().findSource(key);
-                  if (context.background().showsLayer(sourceVintage)) {
-                      context.background().toggleOverlayLayer(sourceVintage);
-                  }
-              }
-          });
+  exports.convertLength = convertLength;
+  /**
+   * Converts a area to the requested unit.
+   * Valid units: kilometers, kilometres, meters, metres, centimetres, millimeters, acres, miles, yards, feet, inches
+   * @param {number} area to be converted
+   * @param {Units} [originalUnit="meters"] of the distance
+   * @param {Units} [finalUnit="kilometers"] returned unit
+   * @returns {number} the converted distance
+   */
+  function convertArea(area, originalUnit, finalUnit) {
+      if (originalUnit === void 0) { originalUnit = "meters"; }
+      if (finalUnit === void 0) { finalUnit = "kilometers"; }
+      if (!(area >= 0)) {
+          throw new Error("area must be a positive number");
       }
-
-
-      var debouncedGetMetadata = debounce(getMetadata, 250);
-
-      function getMetadata(selection$$1) {
-          var tile = select('.layer-background img.tile-center');   // tile near viewport center
-          if (tile.empty()) return;
-
-          var sourceName = currSourceName,
-              d = tile.datum(),
-              zoom = (d && d.length >= 3 && d[2]) || Math.floor(context.map().zoom()),
-              center = context.map().center();
-
-          // update zoom
-          metadata.zoom = String(zoom);
-          selection$$1.selectAll('.background-info-list-zoom')
-              .classed('hide', false)
-              .selectAll('.background-info-span-zoom')
-              .text(metadata.zoom);
-
-          if (!d || !d.length >= 3) return;
-
-          background.baseLayerSource().getMetadata(center, d, function(err, result) {
-              if (err || currSourceName !== sourceName) return;
-
-              // update vintage
-              var vintage = result.vintage;
-              metadata.vintage = (vintage && vintage.range) || t('info_panels.background.unknown');
-              selection$$1.selectAll('.background-info-list-vintage')
-                  .classed('hide', false)
-                  .selectAll('.background-info-span-vintage')
-                  .text(metadata.vintage);
-
-              // update other metdata
-              without(metadataKeys, 'zoom', 'vintage')
-                  .forEach(function(k) {
-                      var val = result[k];
-                      metadata[k] = val;
-                      selection$$1.selectAll('.background-info-list-' + k)
-                          .classed('hide', !val)
-                          .selectAll('.background-info-span-' + k)
-                          .text(val);
-                  });
-          });
+      var startFactor = exports.areaFactors[originalUnit];
+      if (!startFactor) {
+          throw new Error("invalid original units");
       }
-
-
-      var panel = function(selection$$1) {
-          selection$$1.call(redraw);
-
-          context.map()
-              .on('drawn.info-background', function() {
-                  selection$$1.call(debouncedRedraw);
-              })
-              .on('move.info-background', function() {
-                  selection$$1.call(debouncedGetMetadata);
-              });
-
-      };
-
-      panel.off = function() {
-          context.map()
-              .on('drawn.info-background', null)
-              .on('move.info-background', null);
-      };
-
-      panel.id = 'background';
-      panel.title = t('info_panels.background.title');
-      panel.key = t('info_panels.background.key');
-
-
-      return panel;
-  }
-
-  function uiPanelHistory(context) {
-      var osm;
-
-      function displayTimestamp(timestamp) {
-          if (!timestamp) return t('info_panels.history.unknown');
-          var detected = utilDetect();
-          var options = {
-              day: 'numeric', month: 'short', year: 'numeric',
-              hour: 'numeric', minute: 'numeric', second: 'numeric'
-          };
-          var d = new Date(timestamp);
-          if (isNaN(d.getTime())) return t('info_panels.history.unknown');
-          return d.toLocaleString(detected.locale, options);
+      var finalFactor = exports.areaFactors[finalUnit];
+      if (!finalFactor) {
+          throw new Error("invalid final units");
       }
-
-
-      function displayUser(selection, userName) {
-          if (!userName) {
-              selection
-                  .append('span')
-                  .text(t('info_panels.history.unknown'));
-              return;
-          }
-
-          selection
-              .append('span')
-              .attr('class', 'user-name')
-              .text(userName);
-
-          var links = selection
-              .append('div')
-              .attr('class', 'links');
-
-          if (osm) {
-              links
-                  .append('a')
-                  .attr('class', 'user-osm-link')
-                  .attr('href', osm.userURL(userName))
-                  .attr('target', '_blank')
-                  .attr('tabindex', -1)
-                  .text('OSM');
-          }
-
-          links
-              .append('a')
-              .attr('class', 'user-hdyc-link')
-              .attr('href', 'https://hdyc.neis-one.org/?' + userName)
-              .attr('target', '_blank')
-              .attr('tabindex', -1)
-              .text('HDYC');
+      return (area / startFactor) * finalFactor;
+  }
+  exports.convertArea = convertArea;
+  /**
+   * isNumber
+   *
+   * @param {*} num Number to validate
+   * @returns {boolean} true/false
+   * @example
+   * turf.isNumber(123)
+   * //=true
+   * turf.isNumber('foo')
+   * //=false
+   */
+  function isNumber(num) {
+      return !isNaN(num) && num !== null && !Array.isArray(num) && !/^\s*$/.test(num);
+  }
+  exports.isNumber = isNumber;
+  /**
+   * isObject
+   *
+   * @param {*} input variable to validate
+   * @returns {boolean} true/false
+   * @example
+   * turf.isObject({elevation: 10})
+   * //=true
+   * turf.isObject('foo')
+   * //=false
+   */
+  function isObject(input) {
+      return (!!input) && (input.constructor === Object);
+  }
+  exports.isObject = isObject;
+  /**
+   * Validate BBox
+   *
+   * @private
+   * @param {Array<number>} bbox BBox to validate
+   * @returns {void}
+   * @throws Error if BBox is not valid
+   * @example
+   * validateBBox([-180, -40, 110, 50])
+   * //=OK
+   * validateBBox([-180, -40])
+   * //=Error
+   * validateBBox('Foo')
+   * //=Error
+   * validateBBox(5)
+   * //=Error
+   * validateBBox(null)
+   * //=Error
+   * validateBBox(undefined)
+   * //=Error
+   */
+  function validateBBox(bbox) {
+      if (!bbox) {
+          throw new Error("bbox is required");
       }
-
-
-      function displayChangeset(selection, changeset) {
-          if (!changeset) {
-              selection
-                  .append('span')
-                  .text(t('info_panels.history.unknown'));
-              return;
-          }
-
-          selection
-              .append('span')
-              .attr('class', 'changeset-id')
-              .text(changeset);
-
-          var links = selection
-              .append('div')
-              .attr('class', 'links');
-
-          if (osm) {
-              links
-                  .append('a')
-                  .attr('class', 'changeset-osm-link')
-                  .attr('href', osm.changesetURL(changeset))
-                  .attr('target', '_blank')
-                  .attr('tabindex', -1)
-                  .text('OSM');
-          }
-
-          links
-              .append('a')
-              .attr('class', 'changeset-osmcha-link')
-              .attr('href', 'https://osmcha.mapbox.com/changesets/' + changeset)
-              .attr('target', '_blank')
-              .attr('tabindex', -1)
-              .text('OSMCha');
+      if (!Array.isArray(bbox)) {
+          throw new Error("bbox must be an Array");
       }
-
-
-      function redraw(selection) {
-          var selectedNoteID = context.selectedNoteID();
-          osm = context.connection();
-
-          var selected, note, entity;
-          if (selectedNoteID && osm) {       // selected 1 note
-              selected = [ t('note.note') + ' ' + selectedNoteID ];
-              note = osm.getNote(selectedNoteID);
-          } else {                           // selected 1..n entities
-              selected = filter(context.selectedIDs(), function(e) { return context.hasEntity(e); });
-              if (selected.length) {
-                  entity = context.entity(selected[0]);
-              }
-          }
-
-          var singular = selected.length === 1 ? selected[0] : null;
-
-          selection.html('');
-
-          selection
-              .append('h4')
-              .attr('class', 'history-heading')
-              .text(singular || t('info_panels.history.selected', { n: selected.length }));
-
-          if (!singular) return;
-
-          if (entity) {
-              selection.call(redrawEntity, entity);
-          } else if (note) {
-              selection.call(redrawNote, note);
-          }
+      if (bbox.length !== 4 && bbox.length !== 6) {
+          throw new Error("bbox must be an Array of 4 or 6 numbers");
       }
-
-
-      function redrawNote(selection, note) {
-          if (!note || note.isNew()) {
-              selection
-                  .append('div')
-                  .text(t('info_panels.history.note_no_history'));
-              return;
-          }
-
-          var list = selection
-              .append('ul');
-
-          list
-              .append('li')
-              .text(t('info_panels.history.note_comments') + ':')
-              .append('span')
-              .text(note.comments.length);
-
-          if (note.comments.length) {
-              list
-                  .append('li')
-                  .text(t('info_panels.history.note_created_date') + ':')
-                  .append('span')
-                  .text(displayTimestamp(note.comments[0].date));
-
-              list
-                  .append('li')
-                  .text(t('info_panels.history.note_created_user') + ':')
-                  .call(displayUser, note.comments[0].user);
-          }
-
-          if (osm) {
-              selection
-                  .append('a')
-                  .attr('class', 'view-history-on-osm')
-                  .attr('target', '_blank')
-                  .attr('tabindex', -1)
-                  .attr('href', osm.noteURL(note))
-                  .call(svgIcon('#iD-icon-out-link', 'inline'))
-                  .append('span')
-                  .text(t('info_panels.history.note_link_text'));
+      bbox.forEach(function (num) {
+          if (!isNumber(num)) {
+              throw new Error("bbox must only contain numbers");
           }
+      });
+  }
+  exports.validateBBox = validateBBox;
+  /**
+   * Validate Id
+   *
+   * @private
+   * @param {string|number} id Id to validate
+   * @returns {void}
+   * @throws Error if Id is not valid
+   * @example
+   * validateId([-180, -40, 110, 50])
+   * //=Error
+   * validateId([-180, -40])
+   * //=Error
+   * validateId('Foo')
+   * //=OK
+   * validateId(5)
+   * //=OK
+   * validateId(null)
+   * //=Error
+   * validateId(undefined)
+   * //=Error
+   */
+  function validateId(id) {
+      if (!id) {
+          throw new Error("id is required");
       }
-
-
-      function redrawEntity(selection, entity) {
-          if (!entity || entity.isNew()) {
-              selection
-                  .append('div')
-                  .text(t('info_panels.history.no_history'));
-              return;
-          }
-
-          var list = selection
-              .append('ul');
-
-          list
-              .append('li')
-              .text(t('info_panels.history.version') + ':')
-              .append('span')
-              .text(entity.version);
-
-          list
-              .append('li')
-              .text(t('info_panels.history.last_edit') + ':')
-              .append('span')
-              .text(displayTimestamp(entity.timestamp));
-
-          list
-              .append('li')
-              .text(t('info_panels.history.edited_by') + ':')
-              .call(displayUser, entity.user);
-
-          list
-              .append('li')
-              .text(t('info_panels.history.changeset') + ':')
-              .call(displayChangeset, entity.changeset);
-
-          if (osm) {
-              selection
-                  .append('a')
-                  .attr('class', 'view-history-on-osm')
-                  .attr('target', '_blank')
-                  .attr('tabindex', -1)
-                  .attr('href', osm.historyURL(entity))
-                  .call(svgIcon('#iD-icon-out-link', 'inline'))
-                  .append('span')
-                  .text(t('info_panels.history.link_text'));
-          }
+      if (["string", "number"].indexOf(typeof id) === -1) {
+          throw new Error("id must be a number or a string");
       }
-
-
-      var panel = function(selection) {
-          selection.call(redraw);
-
-          context.map()
-              .on('drawn.info-history', function() {
-                  selection.call(redraw);
-              });
-
-          context
-              .on('enter.info-history', function() {
-                  selection.call(redraw);
-              });
-      };
-
-      panel.off = function() {
-          context.map().on('drawn.info-history', null);
-          context.on('enter.info-history', null);
-      };
-
-      panel.id = 'history';
-      panel.title = t('info_panels.history.title');
-      panel.key = t('info_panels.history.key');
-
-
-      return panel;
   }
+  exports.validateId = validateId;
+  // Deprecated methods
+  function radians2degrees() {
+      throw new Error("method has been renamed to `radiansToDegrees`");
+  }
+  exports.radians2degrees = radians2degrees;
+  function degrees2radians() {
+      throw new Error("method has been renamed to `degreesToRadians`");
+  }
+  exports.degrees2radians = degrees2radians;
+  function distanceToDegrees() {
+      throw new Error("method has been renamed to `lengthToDegrees`");
+  }
+  exports.distanceToDegrees = distanceToDegrees;
+  function distanceToRadians() {
+      throw new Error("method has been renamed to `lengthToRadians`");
+  }
+  exports.distanceToRadians = distanceToRadians;
+  function radiansToDistance() {
+      throw new Error("method has been renamed to `radiansToLength`");
+  }
+  exports.radiansToDistance = radiansToDistance;
+  function bearingToAngle() {
+      throw new Error("method has been renamed to `bearingToAzimuth`");
+  }
+  exports.bearingToAngle = bearingToAngle;
+  function convertDistance() {
+      throw new Error("method has been renamed to `convertLength`");
+  }
+  exports.convertDistance = convertDistance;
+  });
 
-  var OSM_PRECISION = 7;
-  var locale$2 = utilDetect().locale;
+  unwrapExports(helpers);
+  var helpers_1 = helpers.earthRadius;
+  var helpers_2 = helpers.factors;
+  var helpers_3 = helpers.unitsFactors;
+  var helpers_4 = helpers.areaFactors;
+  var helpers_5 = helpers.feature;
+  var helpers_6 = helpers.geometry;
+  var helpers_7 = helpers.point;
+  var helpers_8 = helpers.points;
+  var helpers_9 = helpers.polygon;
+  var helpers_10 = helpers.polygons;
+  var helpers_11 = helpers.lineString;
+  var helpers_12 = helpers.lineStrings;
+  var helpers_13 = helpers.featureCollection;
+  var helpers_14 = helpers.multiLineString;
+  var helpers_15 = helpers.multiPoint;
+  var helpers_16 = helpers.multiPolygon;
+  var helpers_17 = helpers.geometryCollection;
+  var helpers_18 = helpers.round;
+  var helpers_19 = helpers.radiansToLength;
+  var helpers_20 = helpers.lengthToRadians;
+  var helpers_21 = helpers.lengthToDegrees;
+  var helpers_22 = helpers.bearingToAzimuth;
+  var helpers_23 = helpers.radiansToDegrees;
+  var helpers_24 = helpers.degreesToRadians;
+  var helpers_25 = helpers.convertLength;
+  var helpers_26 = helpers.convertArea;
+  var helpers_27 = helpers.isNumber;
+  var helpers_28 = helpers.isObject;
+  var helpers_29 = helpers.validateBBox;
+  var helpers_30 = helpers.validateId;
+  var helpers_31 = helpers.radians2degrees;
+  var helpers_32 = helpers.degrees2radians;
+  var helpers_33 = helpers.distanceToDegrees;
+  var helpers_34 = helpers.distanceToRadians;
+  var helpers_35 = helpers.radiansToDistance;
+  var helpers_36 = helpers.bearingToAngle;
+  var helpers_37 = helpers.convertDistance;
+
+  var invariant = createCommonjsModule(function (module, exports) {
+  Object.defineProperty(exports, "__esModule", { value: true });
 
   /**
-   * Returns a localized representation of the given length measurement.
+   * Unwrap a coordinate from a Point Feature, Geometry or a single coordinate.
    *
-   * @param {Number} m area in meters
-   * @param {Boolean} isImperial true for U.S. customary units; false for metric
+   * @name getCoord
+   * @param {Array<number>|Geometry<Point>|Feature<Point>} coord GeoJSON Point or an Array of numbers
+   * @returns {Array<number>} coordinates
+   * @example
+   * var pt = turf.point([10, 10]);
+   *
+   * var coord = turf.getCoord(pt);
+   * //= [10, 10]
    */
-  function displayLength(m, isImperial) {
-      var d = m * (isImperial ? 3.28084 : 1);
-      var unit;
-
-      if (isImperial) {
-          if (d >= 5280) {
-              d /= 5280;
-              unit = 'miles';
-          } else {
-              unit = 'feet';
+  function getCoord(coord) {
+      if (!coord) {
+          throw new Error("coord is required");
+      }
+      if (!Array.isArray(coord)) {
+          if (coord.type === "Feature" && coord.geometry !== null && coord.geometry.type === "Point") {
+              return coord.geometry.coordinates;
           }
-      } else {
-          if (d >= 1000) {
-              d /= 1000;
-              unit = 'kilometers';
-          } else {
-              unit = 'meters';
+          if (coord.type === "Point") {
+              return coord.coordinates;
           }
       }
-
-      return t('units.' + unit, {
-          quantity: d.toLocaleString(locale$2, {
-              maximumSignificantDigits: 4
-          })
-      });
+      if (Array.isArray(coord) && coord.length >= 2 && !Array.isArray(coord[0]) && !Array.isArray(coord[1])) {
+          return coord;
+      }
+      throw new Error("coord must be GeoJSON Point or an Array of numbers");
   }
-
+  exports.getCoord = getCoord;
   /**
-   * Returns a localized representation of the given area measurement.
+   * Unwrap coordinates from a Feature, Geometry Object or an Array
    *
-   * @param {Number} m2 area in square meters
-   * @param {Boolean} isImperial true for U.S. customary units; false for metric
+   * @name getCoords
+   * @param {Array<any>|Geometry|Feature} coords Feature, Geometry Object or an Array
+   * @returns {Array<any>} coordinates
+   * @example
+   * var poly = turf.polygon([[[119.32, -8.7], [119.55, -8.69], [119.51, -8.54], [119.32, -8.7]]]);
+   *
+   * var coords = turf.getCoords(poly);
+   * //= [[[119.32, -8.7], [119.55, -8.69], [119.51, -8.54], [119.32, -8.7]]]
    */
-  function displayArea(m2, isImperial) {
-      var d = m2 * (isImperial ? 10.7639111056 : 1);
-      var d1, d2, area;
-      var unit1 = '';
-      var unit2 = '';
-
-      if (isImperial) {
-          if (d >= 6969600) { // > 0.25mi² show mi²
-              d1 = d / 27878400;
-              unit1 = 'square_miles';
-          } else {
-              d1 = d;
-              unit1 = 'square_feet';
-          }
-
-          if (d > 4356 && d < 43560000) { // 0.1 - 1000 acres
-              d2 = d / 43560;
-              unit2 = 'acres';
-          }
-
-      } else {
-          if (d >= 250000) { // > 0.25km² show km²
-              d1 = d / 1000000;
-              unit1 = 'square_kilometers';
-          } else {
-              d1 = d;
-              unit1 = 'square_meters';
-          }
-
-          if (d > 1000 && d < 10000000) { // 0.1 - 1000 hectares
-              d2 = d / 10000;
-              unit2 = 'hectares';
+  function getCoords(coords) {
+      if (Array.isArray(coords)) {
+          return coords;
+      }
+      // Feature
+      if (coords.type === "Feature") {
+          if (coords.geometry !== null) {
+              return coords.geometry.coordinates;
           }
       }
-
-      area = t('units.' + unit1, {
-          quantity: d1.toLocaleString(locale$2, {
-              maximumSignificantDigits: 4
-          })
-      });
-
-      if (d2) {
-          return t('units.area_pair', {
-              area1: area,
-              area2: t('units.' + unit2, {
-                  quantity: d2.toLocaleString(locale$2, {
-                      maximumSignificantDigits: 2
-                  })
-              })
-          });
-      } else {
-          return area;
+      else {
+          // Geometry
+          if (coords.coordinates) {
+              return coords.coordinates;
+          }
       }
+      throw new Error("coords must be GeoJSON Feature, Geometry Object or an Array");
   }
-
-  function wrap(x, min, max) {
-      var d = max - min;
-      return ((x - min) % d + d) % d + min;
-  }
-
-  function clamp$1(x, min, max) {
-      return Math.max(min, Math.min(x, max));
-  }
-
-  function displayCoordinate(deg, pos, neg) {
-      var min = (Math.abs(deg) - Math.floor(Math.abs(deg))) * 60;
-      var sec = (min - Math.floor(min)) * 60;
-      var displayDegrees = t('units.arcdegrees', {
-          quantity: Math.floor(Math.abs(deg)).toLocaleString(locale$2)
-      });
-      var displayCoordinate;
-
-      if (Math.floor(sec) > 0) {
-          displayCoordinate = displayDegrees +
-              t('units.arcminutes', {
-                  quantity: Math.floor(min).toLocaleString(locale$2)
-              }) +
-              t('units.arcseconds', {
-                  quantity: Math.round(sec).toLocaleString(locale$2)
-              });
-      } else if (Math.floor(min) > 0) {
-          displayCoordinate = displayDegrees +
-              t('units.arcminutes', {
-                  quantity: Math.round(min).toLocaleString(locale$2)
-              });
-      } else {
-          displayCoordinate = t('units.arcdegrees', {
-              quantity: Math.round(Math.abs(deg)).toLocaleString(locale$2)
-          });
+  exports.getCoords = getCoords;
+  /**
+   * Checks if coordinates contains a number
+   *
+   * @name containsNumber
+   * @param {Array<any>} coordinates GeoJSON Coordinates
+   * @returns {boolean} true if Array contains a number
+   */
+  function containsNumber(coordinates) {
+      if (coordinates.length > 1 && helpers.isNumber(coordinates[0]) && helpers.isNumber(coordinates[1])) {
+          return true;
       }
-
-      if (deg === 0) {
-          return displayCoordinate;
-      } else {
-          return t('units.coordinate', {
-              coordinate: displayCoordinate,
-              direction: t('units.' + (deg > 0 ? pos : neg))
-          });
+      if (Array.isArray(coordinates[0]) && coordinates[0].length) {
+          return containsNumber(coordinates[0]);
       }
+      throw new Error("coordinates must only contain numbers");
   }
-
+  exports.containsNumber = containsNumber;
   /**
-   * Returns given coordinate pair in degree-minute-second format.
+   * Enforce expectations about types of GeoJSON objects for Turf.
    *
-   * @param {Array<Number>} coord longitude and latitude
+   * @name geojsonType
+   * @param {GeoJSON} value any GeoJSON object
+   * @param {string} type expected GeoJSON type
+   * @param {string} name name of calling function
+   * @throws {Error} if value is not the expected type.
    */
-  function dmsCoordinatePair(coord) {
-      return t('units.coordinate_pair', {
-          latitude: displayCoordinate(clamp$1(coord[1], -90, 90), 'north', 'south'),
-          longitude: displayCoordinate(wrap(coord[0], -180, 180), 'east', 'west')
-      });
+  function geojsonType(value, type, name) {
+      if (!type || !name) {
+          throw new Error("type and name required");
+      }
+      if (!value || value.type !== type) {
+          throw new Error("Invalid input to " + name + ": must be a " + type + ", given " + value.type);
+      }
   }
-
+  exports.geojsonType = geojsonType;
   /**
-   * Returns the given coordinate pair in decimal format.
-   * note: unlocalized to avoid comma ambiguity - see #4765
+   * Enforce expectations about types of {@link Feature} inputs for Turf.
+   * Internally this uses {@link geojsonType} to judge geometry types.
    *
-   * @param {Array<Number>} coord longitude and latitude
+   * @name featureOf
+   * @param {Feature} feature a feature with an expected geometry type
+   * @param {string} type expected GeoJSON type
+   * @param {string} name name of calling function
+   * @throws {Error} error if value is not the expected type.
    */
-  function decimalCoordinatePair(coord) {
-      return t('units.coordinate_pair', {
-          latitude: clamp$1(coord[1], -90, 90).toFixed(OSM_PRECISION),
-          longitude: wrap(coord[0], -180, 180).toFixed(OSM_PRECISION)
-      });
-  }
-
-  function uiPanelLocation(context) {
-      var currLocation = '';
-
-
-      function redraw(selection) {
-          selection.html('');
-
-          var list = selection
-              .append('ul');
-
-          // Mouse coordinates
-          var coord = context.map().mouseCoordinates();
-          if (coord.some(isNaN)) {
-              coord = context.map().center();
-          }
-
-          list
-              .append('li')
-              .text(dmsCoordinatePair(coord))
-              .append('li')
-              .text(decimalCoordinatePair(coord));
-
-          // Location Info
-          selection
-              .append('div')
-              .attr('class', 'location-info')
-              .text(currLocation || ' ');
-
-          debouncedGetLocation(selection, coord);
+  function featureOf(feature, type, name) {
+      if (!feature) {
+          throw new Error("No feature passed");
       }
-
-
-      var debouncedGetLocation = debounce(getLocation, 250);
-      function getLocation(selection, coord) {
-          if (!services.geocoder) {
-              currLocation = t('info_panels.location.unknown_location');
-              selection.selectAll('.location-info')
-                  .text(currLocation);
-          } else {
-              services.geocoder.reverse(coord, function(err, result) {
-                  currLocation = result ? result.display_name : t('info_panels.location.unknown_location');
-                  selection.selectAll('.location-info')
-                      .text(currLocation);
-              });
-          }
+      if (!name) {
+          throw new Error(".featureOf() requires a name");
       }
-
-
-      var panel = function(selection) {
-          selection.call(redraw);
-
-          context.surface()
-              .on('mousemove.info-location', function() {
-                  selection.call(redraw);
-              });
-      };
-
-      panel.off = function() {
-          context.surface()
-              .on('mousemove.info-location', null);
-      };
-
-      panel.id = 'location';
-      panel.title = t('info_panels.location.title');
-      panel.key = t('info_panels.location.key');
-
-
-      return panel;
-  }
-
-  function uiPanelMeasurement(context) {
-      var locale = utilDetect().locale,
-          isImperial = (locale.toLowerCase() === 'en-us');
-
-
-      function radiansToMeters(r) {
-          // using WGS84 authalic radius (6371007.1809 m)
-          return r * 6371007.1809;
+      if (!feature || feature.type !== "Feature" || !feature.geometry) {
+          throw new Error("Invalid input to " + name + ", Feature with geometry required");
       }
-
-      function steradiansToSqmeters(r) {
-          // http://gis.stackexchange.com/a/124857/40446
-          return r / (4 * Math.PI) * 510065621724000;
+      if (!feature.geometry || feature.geometry.type !== type) {
+          throw new Error("Invalid input to " + name + ": must be a " + type + ", given " + feature.geometry.type);
       }
-
-
-      function toLineString(feature) {
-          if (feature.type === 'LineString') return feature;
-
-          var result = { type: 'LineString', coordinates: [] };
-          if (feature.type === 'Polygon') {
-              result.coordinates = feature.coordinates[0];
-          } else if (feature.type === 'MultiPolygon') {
-              result.coordinates = feature.coordinates[0][0];
-          }
-
-          return result;
+  }
+  exports.featureOf = featureOf;
+  /**
+   * Enforce expectations about types of {@link FeatureCollection} inputs for Turf.
+   * Internally this uses {@link geojsonType} to judge geometry types.
+   *
+   * @name collectionOf
+   * @param {FeatureCollection} featureCollection a FeatureCollection for which features will be judged
+   * @param {string} type expected GeoJSON type
+   * @param {string} name name of calling function
+   * @throws {Error} if value is not the expected type.
+   */
+  function collectionOf(featureCollection, type, name) {
+      if (!featureCollection) {
+          throw new Error("No featureCollection passed");
       }
-
-
-      function nodeCount(feature) {
-        if (feature.type === 'LineString') return feature.coordinates.length;
-        if (feature.type === 'Polygon') return feature.coordinates[0].length - 1;
+      if (!name) {
+          throw new Error(".collectionOf() requires a name");
       }
-
-
-      function redraw(selection$$1) {
-          var resolver = context.graph();
-          var selectedNoteID = context.selectedNoteID();
-          var osm = services.osm;
-
-          var selected, center, entity, note, geometry;
-
-          if (selectedNoteID && osm) {       // selected 1 note
-              selected = [ t('note.note') + ' ' + selectedNoteID ];
-              note = osm.getNote(selectedNoteID);
-              center = note.loc;
-              geometry = 'note';
-
-          } else {                           // selected 1..n entities
-              var extent = geoExtent$$1();
-              selected = filter(context.selectedIDs(), function(e) { return context.hasEntity(e); });
-              if (selected.length) {
-                  for (var i = 0; i < selected.length; i++) {
-                      entity = context.entity(selected[i]);
-                      extent._extend(entity.extent(resolver));
-                  }
-                  center = extent.center();
-                  geometry = entity.geometry(resolver);
-              }
-          }
-
-          var singular = selected.length === 1 ? selected[0] : null;
-
-          selection$$1.html('');
-
-          selection$$1
-              .append('h4')
-              .attr('class', 'measurement-heading')
-              .text(singular || t('info_panels.measurement.selected', { n: selected.length.toLocaleString(locale) }));
-
-          if (!selected.length) return;
-
-
-          var list = selection$$1
-              .append('ul');
-          var coordItem;
-
-          // multiple selected features, just display extent center..
-          if (!singular) {
-              coordItem = list
-                  .append('li')
-                  .text(t('info_panels.measurement.center') + ':');
-              coordItem.append('span')
-                  .text(dmsCoordinatePair(center));
-              coordItem.append('span')
-                  .text(decimalCoordinatePair(center));
-              return;
-          }
-
-          // single selected feature, display details..
-          if (geometry === 'line' || geometry === 'area') {
-              var closed = (entity.type === 'relation') || (entity.isClosed() && !entity.isDegenerate());
-              var feature = entity.asGeoJSON(resolver);
-              var length = radiansToMeters(length$1(toLineString(feature)));
-              var lengthLabel = t('info_panels.measurement.' + (closed ? 'perimeter' : 'length'));
-              var centroid = d3_geoCentroid(feature);
-
-              list
-                  .append('li')
-                  .text(t('info_panels.measurement.geometry') + ':')
-                  .append('span')
-                  .text(
-                      closed ? t('info_panels.measurement.closed_' + geometry) : t('geometry.' + geometry)
-                  );
-
-              if (entity.type !== 'relation') {
-                  list
-                      .append('li')
-                      .text(t('info_panels.measurement.node_count') + ':')
-                      .append('span')
-                      .text(nodeCount(feature).toLocaleString(locale));
-              }
-
-              if (closed) {
-                  var area = steradiansToSqmeters(entity.area(resolver));
-                  list
-                      .append('li')
-                      .text(t('info_panels.measurement.area') + ':')
-                      .append('span')
-                      .text(displayArea(area, isImperial));
-              }
-
-
-              list
-                  .append('li')
-                  .text(lengthLabel + ':')
-                  .append('span')
-                  .text(displayLength(length, isImperial));
-
-              coordItem = list
-                  .append('li')
-                  .text(t('info_panels.measurement.centroid') + ':');
-              coordItem.append('span')
-                  .text(dmsCoordinatePair(centroid));
-              coordItem.append('span')
-                  .text(decimalCoordinatePair(centroid));
-
-              var toggle  = isImperial ? 'imperial' : 'metric';
-
-              selection$$1
-                  .append('a')
-                  .text(t('info_panels.measurement.' + toggle))
-                  .attr('href', '#')
-                  .attr('class', 'button button-toggle-units')
-                  .on('click', function() {
-                      event.preventDefault();
-                      isImperial = !isImperial;
-                      selection$$1.call(redraw);
-                  });
-
-          } else {
-              var centerLabel = t('info_panels.measurement.' +
-                  (note || entity.type === 'node' ? 'location' : 'center'));
-
-              list
-                  .append('li')
-                  .text(t('info_panels.measurement.geometry') + ':')
-                  .append('span')
-                  .text(t('geometry.' + geometry));
-
-              coordItem = list
-                  .append('li')
-                  .text(centerLabel + ':');
-              coordItem.append('span')
-                  .text(dmsCoordinatePair(center));
-              coordItem.append('span')
-                  .text(decimalCoordinatePair(center));
-          }
+      if (!featureCollection || featureCollection.type !== "FeatureCollection") {
+          throw new Error("Invalid input to " + name + ", FeatureCollection required");
       }
-
-
-      var panel = function(selection$$1) {
-          selection$$1.call(redraw);
-
-          context.map()
-              .on('drawn.info-measurement', function() {
-                  selection$$1.call(redraw);
-              });
-
-          context
-              .on('enter.info-measurement', function() {
-                  selection$$1.call(redraw);
-              });
-      };
-
-      panel.off = function() {
-          context.map().on('drawn.info-measurement', null);
-          context.on('enter.info-measurement', null);
-      };
-
-      panel.id = 'measurement';
-      panel.title = t('info_panels.measurement.title');
-      panel.key = t('info_panels.measurement.key');
-
-
-      return panel;
-  }
-
-  var uiInfoPanels = {
-      background: uiPanelBackground,
-      history: uiPanelHistory,
-      location: uiPanelLocation,
-      measurement: uiPanelMeasurement,
-  };
-
-  function uiInfo(context) {
-      var ids = Object.keys(uiInfoPanels);
-      var wasActive = ['measurement'];
-      var panels = {};
-      var active = {};
-
-      // create panels
-      ids.forEach(function(k) {
-          if (!panels[k]) {
-              panels[k] = uiInfoPanels[k](context);
-              active[k] = false;
-          }
-      });
-
-
-      function info(selection$$1) {
-
-          function redraw() {
-              var activeids = ids.filter(function(k) { return active[k]; }).sort();
-
-              var containers = infoPanels.selectAll('.panel-container')
-                  .data(activeids, function(k) { return k; });
-
-              containers.exit()
-                  .style('opacity', 1)
-                  .transition()
-                  .duration(200)
-                  .style('opacity', 0)
-                  .on('end', function(d) {
-                      select(this)
-                          .call(panels[d].off)
-                          .remove();
-                  });
-
-              var enter = containers.enter()
-                  .append('div')
-                  .attr('class', function(d) { return 'fillD2 panel-container panel-container-' + d; });
-
-              enter
-                  .style('opacity', 0)
-                  .transition()
-                  .duration(200)
-                  .style('opacity', 1);
-
-              var title = enter
-                  .append('div')
-                  .attr('class', 'panel-title fillD2');
-
-              title
-                  .append('h3')
-                  .text(function(d) { return panels[d].title; });
-
-              title
-                  .append('button')
-                  .attr('class', 'close')
-                  .on('click', function (d) { toggle(d); })
-                  .call(svgIcon('#iD-icon-close'));
-
-              enter
-                  .append('div')
-                  .attr('class', function(d) { return 'panel-content panel-content-' + d; });
-
-
-              // redraw the panels
-              infoPanels.selectAll('.panel-content')
-                  .each(function(d) {
-                      select(this).call(panels[d]);
-                  });
+      for (var _i = 0, _a = featureCollection.features; _i < _a.length; _i++) {
+          var feature = _a[_i];
+          if (!feature || feature.type !== "Feature" || !feature.geometry) {
+              throw new Error("Invalid input to " + name + ", Feature with geometry required");
           }
-
-
-          function toggle(which) {
-              if (event) {
-                  event.stopImmediatePropagation();
-                  event.preventDefault();
-              }
-
-              var activeids = ids.filter(function(k) { return active[k]; });
-
-              if (which) {  // toggle one
-                  active[which] = !active[which];
-                  if (activeids.length === 1 && activeids[0] === which) {  // none active anymore
-                      wasActive = [which];
-                  }
-              } else {      // toggle all
-                  if (activeids.length) {
-                      wasActive = activeids;
-                      activeids.forEach(function(k) { active[k] = false; });
-                  } else {
-                      wasActive.forEach(function(k) { active[k] = true; });
-                  }
-              }
-
-              redraw();
+          if (!feature.geometry || feature.geometry.type !== type) {
+              throw new Error("Invalid input to " + name + ": must be a " + type + ", given " + feature.geometry.type);
           }
-
-
-          var infoPanels = selection$$1.selectAll('.info-panels')
-              .data([0]);
-
-          infoPanels = infoPanels.enter()
-              .append('div')
-              .attr('class', 'info-panels')
-              .merge(infoPanels);
-
-          redraw();
-
-          context.keybinding()
-              .on(uiCmd('⌘' + t('info_panels.key')), toggle);
-
-          ids.forEach(function(k) {
-              var key = t('info_panels.' + k + '.key', { default: null });
-              if (!key) return;
-              context.keybinding()
-                  .on(uiCmd('⌘⇧' + key), function() { toggle(k); });
-          });
       }
-
-      return info;
   }
-
-  function uiModes(context) {
-      var modes = [
-          modeAddPoint$$1(context),
-          modeAddLine$$1(context),
-          modeAddArea$$1(context),
-          modeAddNote$$1(context)
-      ];
-
-
-      function enabled(d) {
-          if (d.id === 'add-note') {
-              return notesEnabled() && notesEditable();
-          } else {
-              return osmEditable();
-          }
-      }
-
-      function osmEditable() {
-          var mode = context.mode();
-          return context.editable() && mode && mode.id !== 'save';
-      }
-
-      function notesEnabled() {
-          var noteLayer = context.layers().layer('notes');
-          return noteLayer && noteLayer.enabled();
-      }
-
-      function notesEditable() {
-          var mode = context.mode();
-          return context.map().notesEditable() && mode && mode.id !== 'save';
+  exports.collectionOf = collectionOf;
+  /**
+   * Get Geometry from Feature or Geometry Object
+   *
+   * @param {Feature|Geometry} geojson GeoJSON Feature or Geometry Object
+   * @returns {Geometry|null} GeoJSON Geometry Object
+   * @throws {Error} if geojson is not a Feature or Geometry Object
+   * @example
+   * var point = {
+   *   "type": "Feature",
+   *   "properties": {},
+   *   "geometry": {
+   *     "type": "Point",
+   *     "coordinates": [110, 40]
+   *   }
+   * }
+   * var geom = turf.getGeom(point)
+   * //={"type": "Point", "coordinates": [110, 40]}
+   */
+  function getGeom(geojson) {
+      if (geojson.type === "Feature") {
+          return geojson.geometry;
       }
+      return geojson;
+  }
+  exports.getGeom = getGeom;
+  /**
+   * Get GeoJSON object's type, Geometry type is prioritize.
+   *
+   * @param {GeoJSON} geojson GeoJSON object
+   * @param {string} [name="geojson"] name of the variable to display in error message
+   * @returns {string} GeoJSON type
+   * @example
+   * var point = {
+   *   "type": "Feature",
+   *   "properties": {},
+   *   "geometry": {
+   *     "type": "Point",
+   *     "coordinates": [110, 40]
+   *   }
+   * }
+   * var geom = turf.getType(point)
+   * //="Point"
+   */
+  function getType(geojson, name) {
+      if (geojson.type === "FeatureCollection") {
+          return "FeatureCollection";
+      }
+      if (geojson.type === "GeometryCollection") {
+          return "GeometryCollection";
+      }
+      if (geojson.type === "Feature" && geojson.geometry !== null) {
+          return geojson.geometry.type;
+      }
+      return geojson.type;
+  }
+  exports.getType = getType;
+  });
 
+  unwrapExports(invariant);
+  var invariant_1 = invariant.getCoord;
+  var invariant_2 = invariant.getCoords;
+  var invariant_3 = invariant.containsNumber;
+  var invariant_4 = invariant.geojsonType;
+  var invariant_5 = invariant.featureOf;
+  var invariant_6 = invariant.collectionOf;
+  var invariant_7 = invariant.getGeom;
+  var invariant_8 = invariant.getType;
 
-      return function(selection$$1) {
-          context
-              .on('enter.editor', function(entered) {
-                  selection$$1.selectAll('button.add-button')
-                      .classed('active', function(mode) { return entered.button === mode.button; });
-                  context.container()
-                      .classed('mode-' + entered.id, true);
-              });
-
-          context
-              .on('exit.editor', function(exited) {
-                  context.container()
-                      .classed('mode-' + exited.id, false);
-              });
-
-          modes.forEach(function(mode) {
-              context.keybinding().on(mode.key, function() {
-                  if (!enabled(mode)) return;
-
-                  if (mode.id === context.mode().id) {
-                      context.enter(modeBrowse(context));
-                  } else {
-                      context.enter(mode);
-                  }
-              });
-          });
-
+  var lineclip_1$1 = lineclip$1;
+  var default_1$1 = lineclip$1;
 
-          var debouncedUpdate = debounce(update, 500, { leading: true, trailing: true });
+  lineclip$1.polyline = lineclip$1;
+  lineclip$1.polygon = polygonclip$1;
 
-          context.map()
-              .on('move.modes', debouncedUpdate)
-              .on('drawn.modes', debouncedUpdate);
 
-          context
-              .on('enter.modes', update);
+  // Cohen-Sutherland line clippign algorithm, adapted to efficiently
+  // handle polylines rather than just segments
 
-          update();
+  function lineclip$1(points, bbox, result) {
 
+      var len = points.length,
+          codeA = bitCode$1(points[0], bbox),
+          part = [],
+          i, a, b, codeB, lastCode;
 
-          function update() {
-              var showNotes = notesEnabled();
-              var data = showNotes ? modes : modes.slice(0, 3);
+      if (!result) result = [];
 
-              var buttons = selection$$1.selectAll('button.add-button')
-                  .data(data, function(d) { return d.id; });
+      for (i = 1; i < len; i++) {
+          a = points[i - 1];
+          b = points[i];
+          codeB = lastCode = bitCode$1(b, bbox);
 
-              // exit
-              buttons.exit()
-                  .remove();
+          while (true) {
 
-              // enter
-              var buttonsEnter = buttons.enter()
-                  .append('button')
-                  .attr('tabindex', -1)
-                  .attr('class', function(d) { return d.id + ' add-button'; })
-                  .on('click.mode-buttons', function(d) {
-                      if (!enabled(d)) return;
+              if (!(codeA | codeB)) { // accept
+                  part.push(a);
 
-                      // When drawing, ignore accidental clicks on mode buttons - #4042
-                      var currMode = context.mode().id;
-                      if (/^draw/.test(currMode)) return;
+                  if (codeB !== lastCode) { // segment went outside
+                      part.push(b);
 
-                      if (d.id === currMode) {
-                          context.enter(modeBrowse(context));
-                      } else {
-                          context.enter(d);
+                      if (i < len - 1) { // start a new line
+                          result.push(part);
+                          part = [];
                       }
-                  })
-                  .call(tooltip()
-                      .placement('bottom')
-                      .html(true)
-                      .title(function(d) { return uiTooltipHtml(d.description, d.key); })
-                  );
+                  } else if (i === len - 1) {
+                      part.push(b);
+                  }
+                  break;
 
-              buttonsEnter
-                  .each(function(d) {
-                      select(this)
-                          .call(svgIcon('#iD-icon-' + d.button));
-                  });
+              } else if (codeA & codeB) { // trivial reject
+                  break;
 
-              buttonsEnter
-                  .append('span')
-                  .attr('class', 'label')
-                  .text(function(mode) { return mode.title; });
+              } else if (codeA) { // a outside, intersect with clip edge
+                  a = intersect$2(a, b, codeA, bbox);
+                  codeA = bitCode$1(a, bbox);
 
-              // if we are adding/removing the buttons, check if toolbar has overflowed
-              if (buttons.enter().size() || buttons.exit().size()) {
-                  context.ui().checkOverflow('#bar', true);
+              } else { // b outside
+                  b = intersect$2(a, b, codeB, bbox);
+                  codeB = bitCode$1(b, bbox);
               }
-
-              // update
-              buttons = buttons
-                  .merge(buttonsEnter)
-                  .classed('disabled', function(d) { return !enabled(d); });
           }
-      };
-  }
-
-  function uiNotice(context) {
-
-      return function(selection$$1) {
-          var div = selection$$1
-              .append('div')
-              .attr('class', 'notice');
-
-          var button = div
-              .append('button')
-              .attr('class', 'zoom-to notice fillD')
-              .on('click', function() {
-                  context.map().zoomEase(context.minEditableZoom());
-              })
-              .on('wheel', function() {   // let wheel events pass through #4482
-                  var e2 = new WheelEvent(event.type, event);
-                  context.surface().node().dispatchEvent(e2);
-              });
-
-          button
-              .call(svgIcon('#iD-icon-plus', 'pre-text'))
-              .append('span')
-              .attr('class', 'label')
-              .text(t('zoom_in_edit'));
 
+          codeA = lastCode;
+      }
 
-          function disableTooHigh() {
-              var canEdit = context.map().zoom() >= context.minEditableZoom();
-              div.style('display', canEdit ? 'none' : 'block');
-          }
-
-          context.map()
-              .on('move.notice', debounce(disableTooHigh, 500));
+      if (part.length) result.push(part);
 
-          disableTooHigh();
-      };
+      return result;
   }
 
-  function uiPhotoviewer(context) {
-
-      var dispatch$$1 = dispatch('resize');
-
-      function photoviewer(selection$$1) {
-          selection$$1
-              .append('button')
-              .attr('class', 'thumb-hide')
-              .on('click', function () {
-                  if (services.streetside) { services.streetside.hideViewer(); }
-                  if (services.mapillary) { services.mapillary.hideViewer(); }
-                  if (services.openstreetcam) { services.openstreetcam.hideViewer(); }
-              })
-              .append('div')
-              .call(svgIcon('#iD-icon-close'));
-
-          selection$$1
-              .append('button')
-              .attr('class', 'resize-handle-xy')
-              .on(
-                  'mousedown',
-                  buildResizeListener(selection$$1, 'resize', dispatch$$1, { resizeOnX: true, resizeOnY: true })
-              );
-
-          selection$$1
-              .append('button')
-              .attr('class', 'resize-handle-x')
-              .on(
-                  'mousedown',
-                  buildResizeListener(selection$$1, 'resize', dispatch$$1, { resizeOnX: true })
-              );
-
-          selection$$1
-              .append('button')
-              .attr('class', 'resize-handle-y')
-              .on(
-                  'mousedown',
-                  buildResizeListener(selection$$1, 'resize', dispatch$$1, { resizeOnY: true })
-              );
-
-
-          function buildResizeListener(target, eventName, dispatch$$1, options) {
-              var resizeOnX = !!options.resizeOnX;
-              var resizeOnY = !!options.resizeOnY;
-              var minHeight = options.minHeight || 240;
-              var minWidth = options.minWidth || 320;
-              var startX;
-              var startY;
-              var startWidth;
-              var startHeight;
-
-              function startResize() {
-                  var mapSize = context.map().dimensions();
+  // Sutherland-Hodgeman polygon clipping algorithm
 
-                  if (resizeOnX) {
-                      var maxWidth = mapSize[0];
-                      var newWidth = clamp((startWidth + event.clientX - startX), minWidth, maxWidth);
-                      target.style('width', newWidth + 'px');
-                  }
+  function polygonclip$1(points, bbox) {
 
-                  if (resizeOnY) {
-                      var maxHeight = mapSize[1] - 90;  // preserve space at top/bottom of map
-                      var newHeight = clamp((startHeight + startY - event.clientY), minHeight, maxHeight);
-                      target.style('height', newHeight + 'px');
-                  }
+      var result, edge, prev, prevInside, i, p, inside;
 
-                  dispatch$$1.call(eventName, target, utilGetDimensions(target, true));
-              }
+      // clip against each side of the clip rectangle
+      for (edge = 1; edge <= 8; edge *= 2) {
+          result = [];
+          prev = points[points.length - 1];
+          prevInside = !(bitCode$1(prev, bbox) & edge);
 
-              function clamp(num, min, max) {
-                  return Math.max(min, Math.min(num, max));
-              }
+          for (i = 0; i < points.length; i++) {
+              p = points[i];
+              inside = !(bitCode$1(p, bbox) & edge);
 
-              function stopResize() {
-                  select(window)
-                      .on('.' + eventName, null);
-              }
+              // if segment goes through the clip window, add an intersection
+              if (inside !== prevInside) result.push(intersect$2(prev, p, edge, bbox));
 
-              return function initResize() {
-                  startX = event.clientX;
-                  startY = event.clientY;
-                  startWidth = target.node().getBoundingClientRect().width;
-                  startHeight = target.node().getBoundingClientRect().height;
+              if (inside) result.push(p); // add a point if it's inside
 
-                  select(window)
-                      .on('mousemove.' + eventName, startResize, false)
-                      .on('mouseup.' + eventName, stopResize, false);
-              };
+              prev = p;
+              prevInside = inside;
           }
-      }
-
-      photoviewer.onMapResize = function() {
-          var photoviewer = select('#photoviewer');
-          var content = select('#content');
-          var mapDimensions = utilGetDimensions(content, true);
-          // shrink photo viewer if it is too big
-          // (-90 preserves space at top and bottom of map used by menus)
-          var photoDimensions = utilGetDimensions(photoviewer, true);
-          if (photoDimensions[0] > mapDimensions[0] || photoDimensions[1] > (mapDimensions[1] - 90)) {
-              var setPhotoDimensions = [
-                  Math.min(photoDimensions[0], mapDimensions[0]),
-                  Math.min(photoDimensions[1], mapDimensions[1] - 90),
-              ];
 
-              photoviewer
-                  .style('width', setPhotoDimensions[0] + 'px')
-                  .style('height', setPhotoDimensions[1] + 'px');
+          points = result;
 
-              dispatch$$1.call('resize', photoviewer, setPhotoDimensions);
-          }
-      };
+          if (!points.length) break;
+      }
 
-      return utilRebind(photoviewer, dispatch$$1, 'on');
+      return result;
   }
 
-  function uiRestore(context) {
-
-      return function(selection) {
-          if (!context.history().lock() || !context.history().restorableChanges())
-              return;
-
-          var modalSelection = uiModal(selection, true);
+  // intersect a segment against one of the 4 lines that make up the bbox
 
-          modalSelection.select('.modal')
-              .attr('class', 'modal fillL col6');
+  function intersect$2(a, b, edge, bbox) {
+      return edge & 8 ? [a[0] + (b[0] - a[0]) * (bbox[3] - a[1]) / (b[1] - a[1]), bbox[3]] : // top
+             edge & 4 ? [a[0] + (b[0] - a[0]) * (bbox[1] - a[1]) / (b[1] - a[1]), bbox[1]] : // bottom
+             edge & 2 ? [bbox[2], a[1] + (b[1] - a[1]) * (bbox[2] - a[0]) / (b[0] - a[0])] : // right
+             edge & 1 ? [bbox[0], a[1] + (b[1] - a[1]) * (bbox[0] - a[0]) / (b[0] - a[0])] : // left
+             null;
+  }
 
-          var introModal = modalSelection.select('.content');
+  // bit code reflects the point position relative to the bbox:
 
-          introModal
-              .attr('class','cf');
+  //         left  mid  right
+  //    top  1001  1000  1010
+  //    mid  0001  0000  0010
+  // bottom  0101  0100  0110
 
-          introModal
-              .append('div')
-              .attr('class', 'modal-section')
-              .append('h3')
-              .text(t('restore.heading'));
+  function bitCode$1(p, bbox) {
+      var code = 0;
 
-          introModal
-              .append('div')
-              .attr('class','modal-section')
-              .append('p')
-              .text(t('restore.description'));
+      if (p[0] < bbox[0]) code |= 1; // left
+      else if (p[0] > bbox[2]) code |= 2; // right
 
-          var buttonWrap = introModal
-              .append('div')
-              .attr('class', 'modal-actions cf');
+      if (p[1] < bbox[1]) code |= 4; // bottom
+      else if (p[1] > bbox[3]) code |= 8; // top
 
-          var restore = buttonWrap
-              .append('button')
-              .attr('class', 'restore col6')
-              .on('click', function() {
-                  context.history().restore();
-                  modalSelection.remove();
-              });
+      return code;
+  }
+  lineclip_1$1.default = default_1$1;
 
-          restore
-              .append('svg')
-              .attr('class', 'logo logo-restore')
-              .append('use')
-              .attr('xlink:href', '#iD-logo-restore');
+  var bboxClip_1 = createCommonjsModule(function (module, exports) {
+  var __importStar = (commonjsGlobal && commonjsGlobal.__importStar) || function (mod) {
+      if (mod && mod.__esModule) return mod;
+      var result = {};
+      if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
+      result["default"] = mod;
+      return result;
+  };
+  Object.defineProperty(exports, "__esModule", { value: true });
 
-          restore
-              .append('div')
-              .text(t('restore.restore'));
 
-          var reset = buttonWrap
-              .append('button')
-              .attr('class', 'reset col6')
-              .on('click', function() {
-                  context.history().clearSaved();
-                  modalSelection.remove();
+  var lineclip = __importStar(lineclip_1$1);
+  /**
+   * Takes a {@link Feature} and a bbox and clips the feature to the bbox using
+   * [lineclip](https://github.com/mapbox/lineclip).
+   * May result in degenerate edges when clipping Polygons.
+   *
+   * @name bboxClip
+   * @param {Feature<LineString|MultiLineString|Polygon|MultiPolygon>} feature feature to clip to the bbox
+   * @param {BBox} bbox extent in [minX, minY, maxX, maxY] order
+   * @returns {Feature<LineString|MultiLineString|Polygon|MultiPolygon>} clipped Feature
+   * @example
+   * var bbox = [0, 0, 10, 10];
+   * var poly = turf.polygon([[[2, 2], [8, 4], [12, 8], [3, 7], [2, 2]]]);
+   *
+   * var clipped = turf.bboxClip(poly, bbox);
+   *
+   * //addToMap
+   * var addToMap = [bbox, poly, clipped]
+   */
+  function bboxClip(feature, bbox) {
+      var geom = invariant.getGeom(feature);
+      var type = geom.type;
+      var properties = feature.type === "Feature" ? feature.properties : {};
+      var coords = geom.coordinates;
+      switch (type) {
+          case "LineString":
+          case "MultiLineString":
+              var lines_1 = [];
+              if (type === "LineString") {
+                  coords = [coords];
+              }
+              coords.forEach(function (line) {
+                  lineclip.polyline(line, bbox, lines_1);
               });
-
-          reset
-              .append('svg')
-              .attr('class', 'logo logo-reset')
-              .append('use')
-              .attr('xlink:href', '#iD-logo-reset');
-
-          reset
-              .append('div')
-              .text(t('restore.reset'));
-
-          restore.node().focus();
-      };
+              if (lines_1.length === 1) {
+                  return helpers.lineString(lines_1[0], properties);
+              }
+              return helpers.multiLineString(lines_1, properties);
+          case "Polygon":
+              return helpers.polygon(clipPolygon(coords, bbox), properties);
+          case "MultiPolygon":
+              return helpers.multiPolygon(coords.map(function (poly) {
+                  return clipPolygon(poly, bbox);
+              }), properties);
+          default:
+              throw new Error("geometry " + type + " not supported");
+      }
   }
-
-  function uiSave(context) {
-      var history = context.history();
-      var key = uiCmd('⌘S');
-      var _numChanges = 0;
-
-
-      return function(selection$$1) {
-
-
-          function isSaving() {
-              var mode = context.mode();
-              return mode && mode.id === 'save';
-          }
-
-
-          function isDisabled() {
-              return _numChanges === 0 || isSaving();
-          }
-
-
-          function save() {
-              event.preventDefault();
-              if (!context.inIntro() && !isSaving() && history.hasChanges()) {
-                  context.enter(modeSave$$1(context));
+  exports.default = bboxClip;
+  function clipPolygon(rings, bbox) {
+      var outRings = [];
+      for (var _i = 0, rings_1 = rings; _i < rings_1.length; _i++) {
+          var ring = rings_1[_i];
+          var clipped = lineclip.polygon(ring, bbox);
+          if (clipped.length > 0) {
+              if (clipped[0][0] !== clipped[clipped.length - 1][0] || clipped[0][1] !== clipped[clipped.length - 1][1]) {
+                  clipped.push(clipped[0]);
               }
-          }
-
-
-          function bgColor() {
-              var step;
-              if (_numChanges === 0) {
-                  return null;
-              } else if (_numChanges <= 50) {
-                  step = _numChanges / 50;
-                  return interpolateRgb('#fff', '#ff8')(step);  // white -> yellow
-              } else {
-                  step = Math.min((_numChanges - 50) / 50, 1.0);
-                  return interpolateRgb('#ff8', '#f88')(step);  // yellow -> red
+              if (clipped.length >= 4) {
+                  outRings.push(clipped);
               }
           }
+      }
+      return outRings;
+  }
+  });
 
+  var turf_bboxClip = unwrapExports(bboxClip_1);
 
-          function updateCount() {
-              var val = history.difference().summary().length;
-              if (val === _numChanges) return;
-              _numChanges = val;
-
-              tooltipBehavior
-                  .title(uiTooltipHtml(
-                      t(_numChanges > 0 ? 'save.help' : 'save.no_changes'), key)
-                  );
-
-              button
-                  .classed('disabled', isDisabled())
-                  .style('background', bgColor(_numChanges));
-
-              button.select('span.count')
-                  .text(_numChanges);
-          }
-
-
-          var tooltipBehavior = tooltip()
-              .placement('bottom')
-              .html(true)
-              .title(uiTooltipHtml(t('save.no_changes'), key));
-
-          var button = selection$$1
-              .append('button')
-              .attr('class', 'save disabled')
-              .attr('tabindex', -1)
-              .on('click', save)
-              .call(tooltipBehavior);
-
-          button
-              .call(svgIcon('#iD-icon-save'));
-
-          button
-              .append('span')
-              .attr('class', 'label')
-              .text(t('save.title'));
+  var martinez_umd = createCommonjsModule(function (module, exports) {
+  /**
+   * martinez v0.5.0
+   * Martinez polygon clipping algorithm, does boolean operation on polygons (multipolygons, polygons with holes etc): intersection, union, difference, xor
+   *
+   * @author Alex Milevski <info@w8r.name>
+   * @license MIT
+   * @preserve
+   */
 
-          button
-              .append('span')
-              .attr('class', 'count')
-              .text('0');
+  (function (global, factory) {
+    factory(exports);
+  }(commonjsGlobal, (function (exports) {
+    function DEFAULT_COMPARE (a, b) { return a > b ? 1 : a < b ? -1 : 0; }
 
-          updateCount();
+    var SplayTree = function SplayTree(compare, noDuplicates) {
+      if ( compare === void 0 ) compare = DEFAULT_COMPARE;
+      if ( noDuplicates === void 0 ) noDuplicates = false;
 
+      this._compare = compare;
+      this._root = null;
+      this._size = 0;
+      this._noDuplicates = !!noDuplicates;
+    };
 
-          context.keybinding()
-              .on(key, save, true);
+    var prototypeAccessors = { size: { configurable: true } };
 
-          context.history()
-              .on('change.save', updateCount);
 
-          context
-              .on('enter.save', function() {
-                  button
-                      .classed('disabled', isDisabled());
+    SplayTree.prototype.rotateLeft = function rotateLeft (x) {
+      var y = x.right;
+      if (y) {
+        x.right = y.left;
+        if (y.left) { y.left.parent = x; }
+        y.parent = x.parent;
+      }
 
-                  if (isSaving()) {
-                      button.call(tooltipBehavior.hide);
-                  }
-              });
-      };
-  }
+      if (!x.parent)              { this._root = y; }
+      else if (x === x.parent.left) { x.parent.left = y; }
+      else                        { x.parent.right = y; }
+      if (y) { y.left = x; }
+      x.parent = y;
+    };
 
-  function uiScale(context) {
-      var projection = context.projection,
-          isImperial = (utilDetect().locale.toLowerCase() === 'en-us'),
-          maxLength = 180,
-          tickHeight = 8;
 
+    SplayTree.prototype.rotateRight = function rotateRight (x) {
+      var y = x.left;
+      if (y) {
+        x.left = y.right;
+        if (y.right) { y.right.parent = x; }
+        y.parent = x.parent;
+      }
 
-      function scaleDefs(loc1, loc2) {
-          var lat = (loc2[1] + loc1[1]) / 2,
-              conversion = (isImperial ? 3.28084 : 1),
-              dist = geoLonToMeters(loc2[0] - loc1[0], lat) * conversion,
-              scale = { dist: 0, px: 0, text: '' },
-              buckets, i, val, dLon;
+      if (!x.parent)             { this._root = y; }
+      else if(x === x.parent.left) { x.parent.left = y; }
+      else                       { x.parent.right = y; }
+      if (y) { y.right = x; }
+      x.parent = y;
+    };
 
-          if (isImperial) {
-              buckets = [5280000, 528000, 52800, 5280, 500, 50, 5, 1];
-          } else {
-              buckets = [5000000, 500000, 50000, 5000, 500, 50, 5, 1];
-          }
 
-          // determine a user-friendly endpoint for the scale
-          for (i = 0; i < buckets.length; i++) {
-              val = buckets[i];
-              if (dist >= val) {
-                  scale.dist = Math.floor(dist / val) * val;
-                  break;
-              } else {
-                  scale.dist = +dist.toFixed(2);
-              }
-          }
+    SplayTree.prototype._splay = function _splay (x) {
+        var this$1 = this;
 
-          dLon = geoMetersToLon(scale.dist / conversion, lat);
-          scale.px = Math.round(projection([loc1[0] + dLon, loc1[1]])[0]);
+      while (x.parent) {
+        var p = x.parent;
+        if (!p.parent) {
+          if (p.left === x) { this$1.rotateRight(p); }
+          else            { this$1.rotateLeft(p); }
+        } else if (p.left === x && p.parent.left === p) {
+          this$1.rotateRight(p.parent);
+          this$1.rotateRight(p);
+        } else if (p.right === x && p.parent.right === p) {
+          this$1.rotateLeft(p.parent);
+          this$1.rotateLeft(p);
+        } else if (p.left === x && p.parent.right === p) {
+          this$1.rotateRight(p);
+          this$1.rotateLeft(p);
+        } else {
+          this$1.rotateLeft(p);
+          this$1.rotateRight(p);
+        }
+      }
+    };
 
-          scale.text = displayLength(scale.dist / conversion, isImperial);
 
-          return scale;
-      }
+    SplayTree.prototype.splay = function splay (x) {
+        var this$1 = this;
 
+      var p, gp, ggp, l, r;
 
-      function update(selection) {
-          // choose loc1, loc2 along bottom of viewport (near where the scale will be drawn)
-          var dims = context.map().dimensions(),
-              loc1 = projection.invert([0, dims[1]]),
-              loc2 = projection.invert([maxLength, dims[1]]),
-              scale = scaleDefs(loc1, loc2);
+      while (x.parent) {
+        p = x.parent;
+        gp = p.parent;
 
-          selection.select('#scale-path')
-              .attr('d', 'M0.5,0.5v' + tickHeight + 'h' + scale.px + 'v-' + tickHeight);
+        if (gp && gp.parent) {
+          ggp = gp.parent;
+          if (ggp.left === gp) { ggp.left= x; }
+          else               { ggp.right = x; }
+          x.parent = ggp;
+        } else {
+          x.parent = null;
+          this$1._root = x;
+        }
 
-          selection.select('#scale-textgroup')
-              .attr('transform', 'translate(' + (scale.px + 8) + ',' + tickHeight + ')');
+        l = x.left; r = x.right;
 
-          selection.select('#scale-text')
-              .text(scale.text);
-      }
+        if (x === p.left) { // left
+          if (gp) {
+            if (gp.left === p) {
+              /* zig-zig */
+              if (p.right) {
+                gp.left = p.right;
+                gp.left.parent = gp;
+              } else { gp.left = null; }
 
+              p.right = gp;
+              gp.parent = p;
+            } else {
+              /* zig-zag */
+              if (l) {
+                gp.right = l;
+                l.parent = gp;
+              } else { gp.right = null; }
 
-      return function(selection) {
-          function switchUnits() {
-              isImperial = !isImperial;
-              selection.call(update);
+              x.left  = gp;
+              gp.parent = x;
+            }
           }
+          if (r) {
+            p.left = r;
+            r.parent = p;
+          } else { p.left = null; }
 
-          var scalegroup = selection.append('svg')
-              .attr('id', 'scale')
-              .on('click', switchUnits)
-              .append('g')
-              .attr('transform', 'translate(10,11)');
+          x.right= p;
+          p.parent = x;
+        } else { // right
+          if (gp) {
+            if (gp.right === p) {
+              /* zig-zig */
+              if (p.left) {
+                gp.right = p.left;
+                gp.right.parent = gp;
+              } else { gp.right = null; }
 
-          scalegroup
-              .append('path')
-              .attr('id', 'scale-path');
+              p.left = gp;
+              gp.parent = p;
+            } else {
+              /* zig-zag */
+              if (r) {
+                gp.left = r;
+                r.parent = gp;
+              } else { gp.left = null; }
 
-          scalegroup
-              .append('g')
-              .attr('id', 'scale-textgroup')
-              .append('text')
-              .attr('id', 'scale-text');
+              x.right = gp;
+              gp.parent = x;
+            }
+          }
+          if (l) {
+            p.right = l;
+            l.parent = p;
+          } else { p.right = null; }
 
-          selection.call(update);
+          x.left = p;
+          p.parent = x;
+        }
+      }
+    };
 
-          context.map().on('move.scale', function() {
-              update(selection);
-          });
-      };
-  }
 
-  function uiSidebar$$1(context) {
-      var inspector = uiInspector(context);
-      var dataEditor = uiDataEditor$$1(context);
-      var noteEditor = uiNoteEditor$$1(context);
-      var keepRightEditor = uiKeepRightEditor$$1(context);
-      var _current;
-      var _wasData = false;
-      var _wasNote = false;
-      var _wasKRError = false;
+    SplayTree.prototype.replace = function replace (u, v) {
+      if (!u.parent) { this._root = v; }
+      else if (u === u.parent.left) { u.parent.left = v; }
+      else { u.parent.right = v; }
+      if (v) { v.parent = u.parent; }
+    };
 
 
-      function sidebar(selection$$1) {
-          var container = select('#id-container');
-          var minWidth = 280;
-          var sidebarWidth;
-          var containerWidth;
-          var dragOffset;
+    SplayTree.prototype.minNode = function minNode (u) {
+        if ( u === void 0 ) u = this._root;
 
-          var resizer = selection$$1
-              .append('div')
-              .attr('id', 'sidebar-resizer');
+      if (u) { while (u.left) { u = u.left; } }
+      return u;
+    };
 
-          // Set the initial width constraints
-          selection$$1
-              .style('min-width', minWidth + 'px')
-              .style('max-width', '400px')
-              .style('width', '33.3333%');
 
-          resizer.call(d3_drag()
-              .container(container.node())
-              .on('start', function() {
-                  // offset from edge of sidebar-resizer
-                  dragOffset = event.sourceEvent.offsetX - 1;
+    SplayTree.prototype.maxNode = function maxNode (u) {
+        if ( u === void 0 ) u = this._root;
 
-                  sidebarWidth = selection$$1.node().getBoundingClientRect().width;
-                  containerWidth = container.node().getBoundingClientRect().width;
-                  var widthPct = (sidebarWidth / containerWidth) * 100;
-                  selection$$1
-                      .style('width', widthPct + '%')    // lock in current width
-                      .style('max-width', '85%');        // but allow larger widths
+      if (u) { while (u.right) { u = u.right; } }
+      return u;
+    };
 
-                  resizer.classed('dragging', true);
-              })
-              .on('drag', function() {
-                  var isRTL = (textDirection === 'rtl');
-                  var xMarginProperty = isRTL ? 'margin-right' : 'margin-left';
 
-                  var x = event.x - dragOffset;
-                  sidebarWidth = isRTL ? containerWidth - x : x;
+    SplayTree.prototype.insert = function insert (key, data) {
+      var z = this._root;
+      var p = null;
+      var comp = this._compare;
+      var cmp;
 
-                  var isCollapsed = selection$$1.classed('collapsed');
-                  var shouldCollapse = sidebarWidth < minWidth;
+      if (this._noDuplicates) {
+        while (z) {
+          p = z;
+          cmp = comp(z.key, key);
+          if (cmp === 0) { return; }
+          else if (comp(z.key, key) < 0) { z = z.right; }
+          else { z = z.left; }
+        }
+      } else {
+        while (z) {
+          p = z;
+          if (comp(z.key, key) < 0) { z = z.right; }
+          else { z = z.left; }
+        }
+      }
 
-                  selection$$1.classed('collapsed', shouldCollapse);
+      z = { key: key, data: data, left: null, right: null, parent: p };
 
-                  if (shouldCollapse) {
-                      if (!isCollapsed) {
-                          selection$$1
-                              .style(xMarginProperty, '-400px')
-                              .style('width', '400px');
+      if (!p)                        { this._root = z; }
+      else if (comp(p.key, z.key) < 0) { p.right = z; }
+      else                           { p.left= z; }
 
-                          context.ui().onResize([sidebarWidth - event.dx, 0]);
-                      }
+      this.splay(z);
+      this._size++;
+      return z;
+    };
 
-                  } else {
-                      var widthPct = (sidebarWidth / containerWidth) * 100;
-                      selection$$1
-                          .style(xMarginProperty, null)
-                          .style('width', widthPct + '%');
 
-                      if (isCollapsed) {
-                          context.ui().onResize([-sidebarWidth, 0]);
-                      } else {
-                          context.ui().onResize([-event.dx, 0]);
-                      }
-                  }
-              })
-              .on('end', function() {
-                  resizer.classed('dragging', false);
-              })
-          );
+    SplayTree.prototype.find = function find (key) {
+      var z  = this._root;
+      var comp = this._compare;
+      while (z) {
+        var cmp = comp(z.key, key);
+        if    (cmp < 0) { z = z.right; }
+        else if (cmp > 0) { z = z.left; }
+        else            { return z; }
+      }
+      return null;
+    };
 
-          var featureListWrap = selection$$1
-              .append('div')
-              .attr('class', 'feature-list-pane')
-              .call(uiFeatureList(context));
+    /**
+     * Whether the tree contains a node with the given key
+     * @param{Key} key
+     * @return {boolean} true/false
+     */
+    SplayTree.prototype.contains = function contains (key) {
+      var node     = this._root;
+      var comparator = this._compare;
+      while (node){
+        var cmp = comparator(key, node.key);
+        if    (cmp === 0) { return true; }
+        else if (cmp < 0) { node = node.left; }
+        else              { node = node.right; }
+      }
 
-          var inspectorWrap = selection$$1
-              .append('div')
-              .attr('class', 'inspector-hidden inspector-wrap fr');
+      return false;
+    };
 
 
-          function hover(datum) {
-              if (datum && datum.__featurehash__) {   // hovering on data
-                  _wasData = true;
-                  sidebar
-                      .show(dataEditor.datum(datum));
+    SplayTree.prototype.remove = function remove (key) {
+      var z = this.find(key);
 
-                  selection$$1.selectAll('.sidebar-component')
-                      .classed('inspector-hover', true);
+      if (!z) { return false; }
 
-              } else if (datum instanceof osmNote) {
-                  if (context.mode().id === 'drag-note') return;
-                  _wasNote = true;
+      this.splay(z);
 
-                  var osm = services.osm;
-                  if (osm) {
-                      datum = osm.getNote(datum.id);   // marker may contain stale data - get latest
-                  }
+      if (!z.left) { this.replace(z, z.right); }
+      else if (!z.right) { this.replace(z, z.left); }
+      else {
+        var y = this.minNode(z.right);
+        if (y.parent !== z) {
+          this.replace(y, y.right);
+          y.right = z.right;
+          y.right.parent = y;
+        }
+        this.replace(z, y);
+        y.left = z.left;
+        y.left.parent = y;
+      }
 
-                  sidebar
-                      .show(noteEditor.note(datum));
+      this._size--;
+      return true;
+    };
 
-                  selection$$1.selectAll('.sidebar-component')
-                      .classed('inspector-hover', true);
 
-              } else if (datum instanceof krError) {
-                  _wasKRError = true;
+    SplayTree.prototype.removeNode = function removeNode (z) {
+      if (!z) { return false; }
 
-                  var keepRight = services.keepRight;
-                  if (keepRight) {
-                      datum = keepRight.getError(datum.id);   // marker may contain stale data - get latest
-                  }
+      this.splay(z);
 
-                  d3_selectAll('.kr_error')
-                      .classed('hover', function(d) { return d.id === datum.id; });
+      if (!z.left) { this.replace(z, z.right); }
+      else if (!z.right) { this.replace(z, z.left); }
+      else {
+        var y = this.minNode(z.right);
+        if (y.parent !== z) {
+          this.replace(y, y.right);
+          y.right = z.right;
+          y.right.parent = y;
+        }
+        this.replace(z, y);
+        y.left = z.left;
+        y.left.parent = y;
+      }
 
-                  sidebar
-                      .show(keepRightEditor.error(datum));
+      this._size--;
+      return true;
+    };
 
-                  selection$$1.selectAll('.sidebar-component')
-                      .classed('inspector-hover', true);
 
-              } else if (!_current && (datum instanceof osmEntity$$1)) {
-                  featureListWrap
-                      .classed('inspector-hidden', true);
+    SplayTree.prototype.erase = function erase (key) {
+      var z = this.find(key);
+      if (!z) { return; }
 
-                  inspectorWrap
-                      .classed('inspector-hidden', false)
-                      .classed('inspector-hover', true);
+      this.splay(z);
 
-                  if (inspector.entityID() !== datum.id || inspector.state() !== 'hover') {
-                      inspector
-                          .state('hover')
-                          .entityID(datum.id);
+      var s = z.left;
+      var t = z.right;
 
-                      inspectorWrap
-                          .call(inspector);
-                  }
+      var sMax = null;
+      if (s) {
+        s.parent = null;
+        sMax = this.maxNode(s);
+        this.splay(sMax);
+        this._root = sMax;
+      }
+      if (t) {
+        if (s) { sMax.right = t; }
+        else { this._root = t; }
+        t.parent = sMax;
+      }
 
-              } else if (!_current) {
-                  featureListWrap
-                      .classed('inspector-hidden', false);
-                  inspectorWrap
-                      .classed('inspector-hidden', true);
-                  inspector
-                      .state('hide');
+      this._size--;
+    };
 
-              } else if (_wasData || _wasNote || _wasKRError) {
-                  _wasNote = false;
-                  _wasData = false;
-                  _wasKRError = false;
-                  d3_selectAll('.note').classed('hover', false);
-                  d3_selectAll('.kr_error').classed('hover', false);
-                  sidebar.hide();
-              }
-          }
+    /**
+     * Removes and returns the node with smallest key
+     * @return {?Node}
+     */
+    SplayTree.prototype.pop = function pop () {
+      var node = this._root, returnValue = null;
+      if (node) {
+        while (node.left) { node = node.left; }
+        returnValue = { key: node.key, data: node.data };
+        this.remove(node.key);
+      }
+      return returnValue;
+    };
 
 
-          sidebar.hover = throttle(hover, 200);
+    /* eslint-disable class-methods-use-this */
 
+    /**
+     * Successor node
+     * @param{Node} node
+     * @return {?Node}
+     */
+    SplayTree.prototype.next = function next (node) {
+      var successor = node;
+      if (successor) {
+        if (successor.right) {
+          successor = successor.right;
+          while (successor && successor.left) { successor = successor.left; }
+        } else {
+          successor = node.parent;
+          while (successor && successor.right === node) {
+            node = successor; successor = successor.parent;
+          }
+        }
+      }
+      return successor;
+    };
 
-          sidebar.intersects = function(extent) {
-              var rect = selection$$1.node().getBoundingClientRect();
-              return extent.intersects([
-                  context.projection.invert([0, rect.height]),
-                  context.projection.invert([rect.width, 0])
-              ]);
-          };
 
+    /**
+     * Predecessor node
+     * @param{Node} node
+     * @return {?Node}
+     */
+    SplayTree.prototype.prev = function prev (node) {
+      var predecessor = node;
+      if (predecessor) {
+        if (predecessor.left) {
+          predecessor = predecessor.left;
+          while (predecessor && predecessor.right) { predecessor = predecessor.right; }
+        } else {
+          predecessor = node.parent;
+          while (predecessor && predecessor.left === node) {
+            node = predecessor;
+            predecessor = predecessor.parent;
+          }
+        }
+      }
+      return predecessor;
+    };
+    /* eslint-enable class-methods-use-this */
 
-          sidebar.select = function(id, newFeature) {
-              sidebar.hide();
 
-              if (id) {
-                  // uncollapse the sidebar
-                  if (selection$$1.classed('collapsed')) {
-                      var entity = context.entity(id);
-                      var extent = entity.extent(context.graph());
-                      sidebar.expand(sidebar.intersects(extent));
-                  }
+    /**
+     * @param{forEachCallback} callback
+     * @return {SplayTree}
+     */
+    SplayTree.prototype.forEach = function forEach (callback) {
+      var current = this._root;
+      var s = [], done = false, i = 0;
 
-                  featureListWrap
-                      .classed('inspector-hidden', true);
+      while (!done) {
+        // Reach the left most Node of the current Node
+        if (current) {
+          // Place pointer to a tree node on the stack
+          // before traversing the node's left subtree
+          s.push(current);
+          current = current.left;
+        } else {
+          // BackTrack from the empty subtree and visit the Node
+          // at the top of the stack; however, if the stack is
+          // empty you are done
+          if (s.length > 0) {
+            current = s.pop();
+            callback(current, i++);
 
-                  inspectorWrap
-                      .classed('inspector-hidden', false)
-                      .classed('inspector-hover', false);
+            // We have visited the node and its left
+            // subtree. Now, it's right subtree's turn
+            current = current.right;
+          } else { done = true; }
+        }
+      }
+      return this;
+    };
 
-                  if (inspector.entityID() !== id || inspector.state() !== 'select') {
-                      inspector
-                          .state('select')
-                          .entityID(id)
-                          .newFeature(newFeature);
 
-                      inspectorWrap
-                          .call(inspector, newFeature);
-                  }
+    /**
+     * Walk key range from `low` to `high`. Stops if `fn` returns a value.
+     * @param{Key}    low
+     * @param{Key}    high
+     * @param{Function} fn
+     * @param{*?}     ctx
+     * @return {SplayTree}
+     */
+    SplayTree.prototype.range = function range (low, high, fn, ctx) {
+        var this$1 = this;
 
-              } else {
-                  inspector
-                      .state('hide');
-              }
-          };
+      var Q = [];
+      var compare = this._compare;
+      var node = this._root, cmp;
 
+      while (Q.length !== 0 || node) {
+        if (node) {
+          Q.push(node);
+          node = node.left;
+        } else {
+          node = Q.pop();
+          cmp = compare(node.key, high);
+          if (cmp > 0) {
+            break;
+          } else if (compare(node.key, low) >= 0) {
+            if (fn.call(ctx, node)) { return this$1; } // stop if smth is returned
+          }
+          node = node.right;
+        }
+      }
+      return this;
+    };
 
-          sidebar.show = function(component, element) {
-              featureListWrap
-                  .classed('inspector-hidden', true);
-              inspectorWrap
-                  .classed('inspector-hidden', true);
+    /**
+     * Returns all keys in order
+     * @return {Array<Key>}
+     */
+    SplayTree.prototype.keys = function keys () {
+      var current = this._root;
+      var s = [], r = [], done = false;
 
-              if (_current) _current.remove();
-              _current = selection$$1
-                  .append('div')
-                  .attr('class', 'sidebar-component')
-                  .call(component, element);
-          };
+      while (!done) {
+        if (current) {
+          s.push(current);
+          current = current.left;
+        } else {
+          if (s.length > 0) {
+            current = s.pop();
+            r.push(current.key);
+            current = current.right;
+          } else { done = true; }
+        }
+      }
+      return r;
+    };
 
 
-          sidebar.hide = function() {
-              featureListWrap
-                  .classed('inspector-hidden', false);
-              inspectorWrap
-                  .classed('inspector-hidden', true);
+    /**
+     * Returns `data` fields of all nodes in order.
+     * @return {Array<Value>}
+     */
+    SplayTree.prototype.values = function values () {
+      var current = this._root;
+      var s = [], r = [], done = false;
 
-              if (_current) _current.remove();
-              _current = null;
-          };
+      while (!done) {
+        if (current) {
+          s.push(current);
+          current = current.left;
+        } else {
+          if (s.length > 0) {
+            current = s.pop();
+            r.push(current.data);
+            current = current.right;
+          } else { done = true; }
+        }
+      }
+      return r;
+    };
 
 
-          sidebar.expand = function(moveMap) {
-              if (selection$$1.classed('collapsed')) {
-                  sidebar.toggle(moveMap);
-              }
-          };
+    /**
+     * Returns node at given index
+     * @param{number} index
+     * @return {?Node}
+     */
+    SplayTree.prototype.at = function at (index) {
+      // removed after a consideration, more misleading than useful
+      // index = index % this.size;
+      // if (index < 0) index = this.size - index;
 
+      var current = this._root;
+      var s = [], done = false, i = 0;
 
-          sidebar.collapse = function(moveMap) {
-              if (!selection$$1.classed('collapsed')) {
-                  sidebar.toggle(moveMap);
-              }
-          };
+      while (!done) {
+        if (current) {
+          s.push(current);
+          current = current.left;
+        } else {
+          if (s.length > 0) {
+            current = s.pop();
+            if (i === index) { return current; }
+            i++;
+            current = current.right;
+          } else { done = true; }
+        }
+      }
+      return null;
+    };
 
+    /**
+     * Bulk-load items. Both array have to be same size
+     * @param{Array<Key>}  keys
+     * @param{Array<Value>}[values]
+     * @param{Boolean}     [presort=false] Pre-sort keys and values, using
+     *                                       tree's comparator. Sorting is done
+     *                                       in-place
+     * @return {AVLTree}
+     */
+    SplayTree.prototype.load = function load (keys, values, presort) {
+        if ( keys === void 0 ) keys = [];
+        if ( values === void 0 ) values = [];
+        if ( presort === void 0 ) presort = false;
 
-          sidebar.toggle = function(moveMap) {
-              var e = event;
-              if (e && e.sourceEvent) {
-                  e.sourceEvent.preventDefault();
-              } else if (e) {
-                  e.preventDefault();
-              }
+      if (this._size !== 0) { throw new Error('bulk-load: tree is not empty'); }
+      var size = keys.length;
+      if (presort) { sort(keys, values, 0, size - 1, this._compare); }
+      this._root = loadRecursive(null, keys, values, 0, size);
+      this._size = size;
+      return this;
+    };
 
-              // Don't allow sidebar to toggle when the user is in the walkthrough.
-              if (context.inIntro()) return;
 
-              var isCollapsed = selection$$1.classed('collapsed');
-              var isCollapsing = !isCollapsed;
-              var xMarginProperty = textDirection === 'rtl' ? 'margin-right' : 'margin-left';
+    SplayTree.prototype.min = function min () {
+      var node = this.minNode(this._root);
+      if (node) { return node.key; }
+      else    { return null; }
+    };
 
-              sidebarWidth = selection$$1.node().getBoundingClientRect().width;
 
-              // switch from % to px
-              selection$$1.style('width', sidebarWidth + 'px');
+    SplayTree.prototype.max = function max () {
+      var node = this.maxNode(this._root);
+      if (node) { return node.key; }
+      else    { return null; }
+    };
 
-              var startMargin, endMargin, lastMargin;
-              if (isCollapsing) {
-                  startMargin = lastMargin = 0;
-                  endMargin = -sidebarWidth;
-              } else {
-                  startMargin = lastMargin = -sidebarWidth;
-                  endMargin = 0;
-              }
+    SplayTree.prototype.isEmpty = function isEmpty () { return this._root === null; };
+    prototypeAccessors.size.get = function () { return this._size; };
 
-              selection$$1.transition()
-                  .style(xMarginProperty, endMargin + 'px')
-                  .tween('panner', function() {
-                      var i = interpolateNumber(startMargin, endMargin);
-                      return function(t$$1) {
-                          var dx = lastMargin - Math.round(i(t$$1));
-                          lastMargin = lastMargin - dx;
-                          context.ui().onResize(moveMap ? undefined : [dx, 0]);
-                      };
-                  })
-                  .on('end', function() {
-                      selection$$1.classed('collapsed', isCollapsing);
 
-                      // switch back from px to %
-                      if (!isCollapsing) {
-                          var containerWidth = container.node().getBoundingClientRect().width;
-                          var widthPct = (sidebarWidth / containerWidth) * 100;
-                          selection$$1
-                              .style(xMarginProperty, null)
-                              .style('width', widthPct + '%');
-                      }
-                  });
-          };
+    /**
+     * Create a tree and load it with items
+     * @param{Array<Key>}        keys
+     * @param{Array<Value>?}      [values]
 
-          // toggle the sidebar collapse when double-clicking the resizer
-          resizer.on('dblclick', sidebar.toggle);
-      }
+     * @param{Function?}          [comparator]
+     * @param{Boolean?}           [presort=false] Pre-sort keys and values, using
+     *                                             tree's comparator. Sorting is done
+     *                                             in-place
+     * @param{Boolean?}           [noDuplicates=false] Allow duplicates
+     * @return {SplayTree}
+     */
+    SplayTree.createTree = function createTree (keys, values, comparator, presort, noDuplicates) {
+      return new SplayTree(comparator, noDuplicates).load(keys, values, presort);
+    };
 
+    Object.defineProperties( SplayTree.prototype, prototypeAccessors );
 
-      sidebar.hover = function() {};
-      sidebar.hover.cancel = function() {};
-      sidebar.intersects = function() {};
-      sidebar.select = function() {};
-      sidebar.show = function() {};
-      sidebar.hide = function() {};
-      sidebar.expand = function() {};
-      sidebar.collapse = function() {};
-      sidebar.toggle = function() {};
 
-      return sidebar;
-  }
+    function loadRecursive (parent, keys, values, start, end) {
+      var size = end - start;
+      if (size > 0) {
+        var middle = start + Math.floor(size / 2);
+        var key    = keys[middle];
+        var data   = values[middle];
+        var node   = { key: key, data: data, parent: parent };
+        node.left    = loadRecursive(node, keys, values, start, middle);
+        node.right   = loadRecursive(node, keys, values, middle + 1, end);
+        return node;
+      }
+      return null;
+    }
 
-  function uiSpinner(context) {
-      var osm = context.connection();
 
+    function sort(keys, values, left, right, compare) {
+      if (left >= right) { return; }
 
-      return function(selection) {
-          var img = selection
-              .append('img')
-              .attr('src', context.imagePath('loader-black.gif'))
-              .style('opacity', 0);
+      var pivot = keys[(left + right) >> 1];
+      var i = left - 1;
+      var j = right + 1;
 
-          if (osm) {
-              osm
-                  .on('loading.spinner', function() {
-                      img.transition()
-                          .style('opacity', 1);
-                  })
-                  .on('loaded.spinner', function() {
-                      img.transition()
-                          .style('opacity', 0);
-                  });
-          }
-      };
-  }
+      while (true) {
+        do { i++; } while (compare(keys[i], pivot) < 0);
+        do { j--; } while (compare(keys[j], pivot) > 0);
+        if (i >= j) { break; }
 
-  function uiSplash(context) {
+        var tmp = keys[i];
+        keys[i] = keys[j];
+        keys[j] = tmp;
 
-      return function(selection) {
-          if (context.storage('sawSplash'))
-               return;
+        tmp = values[i];
+        values[i] = values[j];
+        values[j] = tmp;
+      }
 
-          context.storage('sawSplash', true);
+      sort(keys, values,  left,     j, compare);
+      sort(keys, values, j + 1, right, compare);
+    }
 
-          var modalSelection = uiModal(selection);
+    var NORMAL               = 0;
+    var NON_CONTRIBUTING     = 1;
+    var SAME_TRANSITION      = 2;
+    var DIFFERENT_TRANSITION = 3;
 
-          modalSelection.select('.modal')
-              .attr('class', 'modal-splash modal col6');
+    var INTERSECTION = 0;
+    var UNION        = 1;
+    var DIFFERENCE   = 2;
+    var XOR          = 3;
 
-          var introModal = modalSelection.select('.content')
-              .append('div')
-              .attr('class', 'fillL');
+    /**
+     * @param  {SweepEvent} event
+     * @param  {SweepEvent} prev
+     * @param  {Operation} operation
+     */
+    function computeFields (event, prev, operation) {
+      // compute inOut and otherInOut fields
+      if (prev === null) {
+        event.inOut      = false;
+        event.otherInOut = true;
 
-          introModal
-              .append('div')
-              .attr('class','modal-section cf')
-              .append('h3').text(t('splash.welcome'));
+      // previous line segment in sweepline belongs to the same polygon
+      } else {
+        if (event.isSubject === prev.isSubject) {
+          event.inOut      = !prev.inOut;
+          event.otherInOut = prev.otherInOut;
 
-          introModal
-              .append('div')
-              .attr('class','modal-section')
-              .append('p')
-              .html(t('splash.text', {
-                  version: context.version,
-                  website: '<a href="http://ideditor.com/">ideditor.com</a>',
-                  github: '<a href="https://github.com/openstreetmap/iD">github.com</a>'
-              }));
+        // previous line segment in sweepline belongs to the clipping polygon
+        } else {
+          event.inOut      = !prev.otherInOut;
+          event.otherInOut = prev.isVertical() ? !prev.inOut : prev.inOut;
+        }
 
-          var buttonWrap = introModal
-              .append('div')
-              .attr('class', 'modal-actions cf');
+        // compute prevInResult field
+        if (prev) {
+          event.prevInResult = (!inResult(prev, operation) || prev.isVertical())
+            ? prev.prevInResult : prev;
+        }
+      }
 
-          var walkthrough = buttonWrap
-              .append('button')
-              .attr('class', 'walkthrough col6')
-              .on('click', function() {
-                  context.container().call(uiIntro(context));
-                  modalSelection.close();
-              });
+      // check if the line segment belongs to the Boolean operation
+      event.inResult = inResult(event, operation);
+    }
 
-          walkthrough
-              .append('svg')
-              .attr('class', 'logo logo-walkthrough')
-              .append('use')
-              .attr('xlink:href', '#iD-logo-walkthrough');
 
-          walkthrough
-              .append('div')
-              .text(t('splash.walkthrough'));
+    /* eslint-disable indent */
+    function inResult(event, operation) {
+      switch (event.type) {
+        case NORMAL:
+          switch (operation) {
+            case INTERSECTION:
+              return !event.otherInOut;
+            case UNION:
+              return event.otherInOut;
+            case DIFFERENCE:
+              // return (event.isSubject && !event.otherInOut) ||
+              //         (!event.isSubject && event.otherInOut);
+              return (event.isSubject && event.otherInOut) ||
+                      (!event.isSubject && !event.otherInOut);
+            case XOR:
+              return true;
+          }
+          break;
+        case SAME_TRANSITION:
+          return operation === INTERSECTION || operation === UNION;
+        case DIFFERENT_TRANSITION:
+          return operation === DIFFERENCE;
+        case NON_CONTRIBUTING:
+          return false;
+      }
+      return false;
+    }
+    /* eslint-enable indent */
 
-          var startEditing = buttonWrap
-              .append('button')
-              .attr('class', 'start-editing col6')
-              .on('click', modalSelection.close);
+    var SweepEvent = function SweepEvent (point, left, otherEvent, isSubject, edgeType) {
 
-          startEditing
-              .append('svg')
-              .attr('class', 'logo logo-features')
-              .append('use')
-              .attr('xlink:href', '#iD-logo-features');
+      /**
+       * Is left endpoint?
+       * @type {Boolean}
+       */
+      this.left = left;
 
-          startEditing
-              .append('div')
-              .text(t('splash.start'));
+      /**
+       * @type {Array.<Number>}
+       */
+      this.point = point;
 
+      /**
+       * Other edge reference
+       * @type {SweepEvent}
+       */
+      this.otherEvent = otherEvent;
 
-          modalSelection.select('button.close')
-              .attr('class','hide');
+      /**
+       * Belongs to source or clipping polygon
+       * @type {Boolean}
+       */
+      this.isSubject = isSubject;
 
-      };
-  }
+      /**
+       * Edge contribution type
+       * @type {Number}
+       */
+      this.type = edgeType || NORMAL;
 
-  function uiStatus(context) {
-      var osm = context.connection();
 
+      /**
+       * In-out transition for the sweepline crossing polygon
+       * @type {Boolean}
+       */
+      this.inOut = false;
 
-      return function(selection$$1) {
-          if (!osm) return;
 
-          function update() {
-              osm.status(function(err, apiStatus) {
-                  selection$$1.html('');
+      /**
+       * @type {Boolean}
+       */
+      this.otherInOut = false;
 
-                  if (err) {
-                      if (apiStatus === 'connectionSwitched') {
-                          // if the connection was just switched, we can't rely on
-                          // the status (we're getting the status of the previous api)
-                          return;
+      /**
+       * Previous event in result?
+       * @type {SweepEvent}
+       */
+      this.prevInResult = null;
 
-                      } else if (apiStatus === 'rateLimited') {
-                          selection$$1
-                              .text(t('status.rateLimit'))
-                              .append('a')
-                              .attr('class', 'api-status-login')
-                              .attr('target', '_blank')
-                              .call(svgIcon('#iD-icon-out-link', 'inline'))
-                              .append('span')
-                              .text(t('login'))
-                              .on('click.login', function() {
-                                  event.preventDefault();
-                                  osm.authenticate();
-                              });
-                      } else {
-                          // eslint-disable-next-line no-warning-comments
-                          // TODO: nice messages for different error types
-                          selection$$1.text(t('status.error'));
-                      }
+      /**
+       * Does event belong to result?
+       * @type {Boolean}
+       */
+      this.inResult = false;
 
-                  } else if (apiStatus === 'readonly') {
-                      selection$$1.text(t('status.readonly'));
-                  } else if (apiStatus === 'offline') {
-                      selection$$1.text(t('status.offline'));
-                  }
 
-                  selection$$1.attr('class', 'api-status ' + (err ? 'error' : apiStatus));
-              });
-          }
+      // connection step
 
-          osm.on('change', function() { update(selection$$1); });
+      /**
+       * @type {Boolean}
+       */
+      this.resultInOut = false;
 
-          window.setInterval(update, 90000);
-          update(selection$$1);
-      };
-  }
+      this.isExteriorRing = true;
+    };
 
-  function uiUndoRedo(context) {
-      var commands = [{
-          id: 'undo',
-          cmd: uiCmd('⌘Z'),
-          action: function() { if (editable()) context.undo(); },
-          annotation: function() { return context.history().undoAnnotation(); }
-      }, {
-          id: 'redo',
-          cmd: uiCmd('⌘⇧Z'),
-          action: function() { if (editable()) context.redo(); },
-          annotation: function() { return context.history().redoAnnotation(); }
-      }];
 
+    /**
+     * @param{Array.<Number>}p
+     * @return {Boolean}
+     */
+    SweepEvent.prototype.isBelow = function isBelow (p) {
+      var p0 = this.point, p1 = this.otherEvent.point;
+      return this.left
+        ? (p0[0] - p[0]) * (p1[1] - p[1]) - (p1[0] - p[0]) * (p0[1] - p[1]) > 0
+        // signedArea(this.point, this.otherEvent.point, p) > 0 :
+        : (p1[0] - p[0]) * (p0[1] - p[1]) - (p0[0] - p[0]) * (p1[1] - p[1]) > 0;
+        //signedArea(this.otherEvent.point, this.point, p) > 0;
+    };
 
-      function editable() {
-          var mode = context.mode();
-          return context.editable() && mode && mode.id !== 'save';
-      }
 
+    /**
+     * @param{Array.<Number>}p
+     * @return {Boolean}
+     */
+    SweepEvent.prototype.isAbove = function isAbove (p) {
+      return !this.isBelow(p);
+    };
 
-      return function(selection$$1) {
-          var tooltipBehavior = tooltip()
-              .placement('bottom')
-              .html(true)
-              .title(function (d) {
-                  return uiTooltipHtml(d.annotation() ?
-                      t(d.id + '.tooltip', {action: d.annotation()}) :
-                      t(d.id + '.nothing'), d.cmd);
-              });
 
-          var buttons = selection$$1.selectAll('button')
-              .data(commands)
-              .enter()
-              .append('button')
-              .attr('class', function(d) { return 'disabled ' + d.id + '-button'; })
-              .on('click', function(d) { return d.action(); })
-              .call(tooltipBehavior);
+    /**
+     * @return {Boolean}
+     */
+    SweepEvent.prototype.isVertical = function isVertical () {
+      return this.point[0] === this.otherEvent.point[0];
+    };
 
-          buttons.each(function(d) {
-              var iconName = d.id;
-              if (textDirection === 'rtl') {
-                  if (iconName === 'undo') {
-                      iconName = 'redo';
-                  } else if (iconName === 'redo') {
-                      iconName = 'undo';
-                  }
-              }
-              select(this)
-                  .call(svgIcon('#iD-icon-' + iconName));
-          });
 
-          context.keybinding()
-              .on(commands[0].cmd, function() { event.preventDefault(); commands[0].action(); })
-              .on(commands[1].cmd, function() { event.preventDefault(); commands[1].action(); });
+    SweepEvent.prototype.clone = function clone () {
+      var copy = new SweepEvent(
+        this.point, this.left, this.otherEvent, this.isSubject, this.type);
 
+      copy.inResult     = this.inResult;
+      copy.prevInResult = this.prevInResult;
+      copy.isExteriorRing = this.isExteriorRing;
+      copy.inOut        = this.inOut;
+      copy.otherInOut   = this.otherInOut;
 
-          var debouncedUpdate = debounce(update, 500, { leading: true, trailing: true });
+      return copy;
+    };
 
-          context.map()
-              .on('move.undo_redo', debouncedUpdate)
-              .on('drawn.undo_redo', debouncedUpdate);
+    function equals(p1, p2) {
+      if (p1[0] === p2[0]) {
+        if (p1[1] === p2[1]) {
+          return true;
+        } else {
+          return false;
+        }
+      }
+      return false;
+    }
 
-          context.history()
-              .on('change.undo_redo', update);
+    // const EPSILON = 1e-9;
+    // const abs = Math.abs;
+    // TODO https://github.com/w8r/martinez/issues/6#issuecomment-262847164
+    // Precision problem.
+    //
+    // module.exports = function equals(p1, p2) {
+    //   return abs(p1[0] - p2[0]) <= EPSILON && abs(p1[1] - p2[1]) <= EPSILON;
+    // };
 
-          context
-              .on('enter.undo_redo', update);
+    /**
+     * Signed area of the triangle (p0, p1, p2)
+     * @param  {Array.<Number>} p0
+     * @param  {Array.<Number>} p1
+     * @param  {Array.<Number>} p2
+     * @return {Number}
+     */
+    function signedArea(p0, p1, p2) {
+      return (p0[0] - p2[0]) * (p1[1] - p2[1]) - (p1[0] - p2[0]) * (p0[1] - p2[1]);
+    }
 
+    /**
+     * @param  {SweepEvent} e1
+     * @param  {SweepEvent} e2
+     * @return {Number}
+     */
+    function compareEvents(e1, e2) {
+      var p1 = e1.point;
+      var p2 = e2.point;
 
-          function update() {
-              buttons
-                  .property('disabled', !editable())
-                  .classed('disabled', function(d) { return !d.annotation(); })
-                  .each(function() {
-                      var selection$$1 = select(this);
-                      if (selection$$1.property('tooltipVisible')) {
-                          selection$$1.call(tooltipBehavior.show);
-                      }
-                  });
-          }
-      };
-  }
+      // Different x-coordinate
+      if (p1[0] > p2[0]) { return 1; }
+      if (p1[0] < p2[0]) { return -1; }
 
-  // these are module variables so they are preserved through a ui.restart()
-  var sawVersion = null;
-  var isNewVersion = false;
-  var isNewUser = false;
+      // Different points, but same x-coordinate
+      // Event with lower y-coordinate is processed first
+      if (p1[1] !== p2[1]) { return p1[1] > p2[1] ? 1 : -1; }
 
+      return specialCases(e1, e2, p1, p2);
+    }
 
-  function uiVersion(context) {
 
-      var currVersion = context.version;
-      var matchedVersion = currVersion.match(/\d+\.\d+\.\d+.*/);
+    /* eslint-disable no-unused-vars */
+    function specialCases(e1, e2, p1, p2) {
+      // Same coordinates, but one is a left endpoint and the other is
+      // a right endpoint. The right endpoint is processed first
+      if (e1.left !== e2.left)
+        { return e1.left ? 1 : -1; }
 
-      if (sawVersion === null && matchedVersion !== null) {
-          isNewVersion = (context.storage('sawVersion') !== currVersion);
-          isNewUser = !context.storage('sawSplash');
-          context.storage('sawVersion', currVersion);
-          sawVersion = currVersion;
+      // const p2 = e1.otherEvent.point, p3 = e2.otherEvent.point;
+      // const sa = (p1[0] - p3[0]) * (p2[1] - p3[1]) - (p2[0] - p3[0]) * (p1[1] - p3[1])
+      // Same coordinates, both events
+      // are left endpoints or right endpoints.
+      // not collinear
+      if (signedArea(p1, e1.otherEvent.point, e2.otherEvent.point) !== 0) {
+        // the event associate to the bottom segment is processed first
+        return (!e1.isBelow(e2.otherEvent.point)) ? 1 : -1;
       }
 
-      return function(selection) {
-          selection
-              .append('a')
-              .attr('target', '_blank')
-              .attr('tabindex', -1)
-              .attr('href', 'https://github.com/openstreetmap/iD')
-              .text(currVersion);
-
-          // only show new version indicator to users that have used iD before
-          if (isNewVersion && !isNewUser) {
-              selection
-                  .append('div')
-                  .attr('class', 'badge')
-                  .append('a')
-                  .attr('target', '_blank')
-                  .attr('tabindex', -1)
-                  .attr('href', 'https://github.com/openstreetmap/iD/blob/master/CHANGELOG.md#whats-new')
-                  .call(svgIcon('#maki-gift-11'))
-                  .call(tooltip()
-                      .title(t('version.whats_new', { version: currVersion }))
-                      .placement('top')
-                  );
-          }
-      };
-  }
+      return (!e1.isSubject && e2.isSubject) ? 1 : -1;
+    }
+    /* eslint-enable no-unused-vars */
 
-  function uiZoom(context) {
-      var zooms = [{
-          id: 'zoom-in',
-          icon: 'plus',
-          title: t('zoom.in'),
-          action: context.zoomIn,
-          key: '+'
-      }, {
-          id: 'zoom-out',
-          icon: 'minus',
-          title: t('zoom.out'),
-          action: context.zoomOut,
-          key: '-'
-      }];
+    /**
+     * @param  {SweepEvent} se
+     * @param  {Array.<Number>} p
+     * @param  {Queue} queue
+     * @return {Queue}
+     */
+    function divideSegment(se, p, queue)  {
+      var r = new SweepEvent(p, false, se,            se.isSubject);
+      var l = new SweepEvent(p, true,  se.otherEvent, se.isSubject);
 
+      /* eslint-disable no-console */
+      if (equals(se.point, se.otherEvent.point)) {
 
-      function zoomIn() {
-          event.preventDefault();
-          context.zoomIn();
+        console.warn('what is that, a collapsed segment?', se);
       }
+      /* eslint-enable no-console */
 
+      r.contourId = l.contourId = se.contourId;
 
-      function zoomOut() {
-          event.preventDefault();
-          context.zoomOut();
+      // avoid a rounding error. The left event would be processed after the right event
+      if (compareEvents(l, se.otherEvent) > 0) {
+        se.otherEvent.left = true;
+        l.left = false;
       }
 
+      // avoid a rounding error. The left event would be processed after the right event
+      // if (compareEvents(se, r) > 0) {}
+
+      se.otherEvent.otherEvent = l;
+      se.otherEvent = r;
 
-      function zoomInFurther() {
-          event.preventDefault();
-          context.zoomInFurther();
+      queue.push(l);
+      queue.push(r);
+
+      return queue;
+    }
+
+    //const EPS = 1e-9;
+
+    /**
+     * Finds the magnitude of the cross product of two vectors (if we pretend
+     * they're in three dimensions)
+     *
+     * @param {Object} a First vector
+     * @param {Object} b Second vector
+     * @private
+     * @returns {Number} The magnitude of the cross product
+     */
+    function crossProduct(a, b) {
+      return (a[0] * b[1]) - (a[1] * b[0]);
+    }
+
+    /**
+     * Finds the dot product of two vectors.
+     *
+     * @param {Object} a First vector
+     * @param {Object} b Second vector
+     * @private
+     * @returns {Number} The dot product
+     */
+    function dotProduct(a, b) {
+      return (a[0] * b[0]) + (a[1] * b[1]);
+    }
+
+    /**
+     * Finds the intersection (if any) between two line segments a and b, given the
+     * line segments' end points a1, a2 and b1, b2.
+     *
+     * This algorithm is based on Schneider and Eberly.
+     * http://www.cimec.org.ar/~ncalvo/Schneider_Eberly.pdf
+     * Page 244.
+     *
+     * @param {Array.<Number>} a1 point of first line
+     * @param {Array.<Number>} a2 point of first line
+     * @param {Array.<Number>} b1 point of second line
+     * @param {Array.<Number>} b2 point of second line
+     * @param {Boolean=}       noEndpointTouch whether to skip single touchpoints
+     *                                         (meaning connected segments) as
+     *                                         intersections
+     * @returns {Array.<Array.<Number>>|Null} If the lines intersect, the point of
+     * intersection. If they overlap, the two end points of the overlapping segment.
+     * Otherwise, null.
+     */
+    function intersection (a1, a2, b1, b2, noEndpointTouch) {
+      // The algorithm expects our lines in the form P + sd, where P is a point,
+      // s is on the interval [0, 1], and d is a vector.
+      // We are passed two points. P can be the first point of each pair. The
+      // vector, then, could be thought of as the distance (in x and y components)
+      // from the first point to the second point.
+      // So first, let's make our vectors:
+      var va = [a2[0] - a1[0], a2[1] - a1[1]];
+      var vb = [b2[0] - b1[0], b2[1] - b1[1]];
+      // We also define a function to convert back to regular point form:
+
+      /* eslint-disable arrow-body-style */
+
+      function toPoint(p, s, d) {
+        return [
+          p[0] + s * d[0],
+          p[1] + s * d[1]
+        ];
       }
 
+      /* eslint-enable arrow-body-style */
 
-      function zoomOutFurther() {
-          event.preventDefault();
-          context.zoomOutFurther();
+      // The rest is pretty much a straight port of the algorithm.
+      var e = [b1[0] - a1[0], b1[1] - a1[1]];
+      var kross    = crossProduct(va, vb);
+      var sqrKross = kross * kross;
+      var sqrLenA  = dotProduct(va, va);
+      //const sqrLenB  = dotProduct(vb, vb);
+
+      // Check for line intersection. This works because of the properties of the
+      // cross product -- specifically, two vectors are parallel if and only if the
+      // cross product is the 0 vector. The full calculation involves relative error
+      // to account for possible very small line segments. See Schneider & Eberly
+      // for details.
+      if (sqrKross > 0/* EPS * sqrLenB * sqLenA */) {
+        // If they're not parallel, then (because these are line segments) they
+        // still might not actually intersect. This code checks that the
+        // intersection point of the lines is actually on both line segments.
+        var s = crossProduct(e, vb) / kross;
+        if (s < 0 || s > 1) {
+          // not on line segment a
+          return null;
+        }
+        var t = crossProduct(e, va) / kross;
+        if (t < 0 || t > 1) {
+          // not on line segment b
+          return null;
+        }
+        if (s === 0 || s === 1) {
+          // on an endpoint of line segment a
+          return noEndpointTouch ? null : [toPoint(a1, s, va)];
+        }
+        if (t === 0 || t === 1) {
+          // on an endpoint of line segment b
+          return noEndpointTouch ? null : [toPoint(b1, t, vb)];
+        }
+        return [toPoint(a1, s, va)];
       }
 
+      // If we've reached this point, then the lines are either parallel or the
+      // same, but the segments could overlap partially or fully, or not at all.
+      // So we need to find the overlap, if any. To do that, we can use e, which is
+      // the (vector) difference between the two initial points. If this is parallel
+      // with the line itself, then the two lines are the same line, and there will
+      // be overlap.
+      //const sqrLenE = dotProduct(e, e);
+      kross = crossProduct(e, va);
+      sqrKross = kross * kross;
 
-      return function(selection$$1) {
-          var button = selection$$1.selectAll('button')
-              .data(zooms)
-              .enter()
-              .append('button')
-              .attr('tabindex', -1)
-              .attr('class', function(d) { return d.id; })
-              .on('click.editor', function(d) { d.action(); })
-              .call(tooltip()
-                  .placement((textDirection === 'rtl') ? 'right' : 'left')
-                  .html(true)
-                  .title(function(d) {
-                      return uiTooltipHtml(d.title, d.key);
-                  })
-              );
+      if (sqrKross > 0 /* EPS * sqLenB * sqLenE */) {
+      // Lines are just parallel, not the same. No overlap.
+        return null;
+      }
 
-          button.each(function(d) {
-              select(this)
-                  .call(svgIcon('#iD-icon-' + d.icon, 'light'));
-          });
+      var sa = dotProduct(va, e) / sqrLenA;
+      var sb = sa + dotProduct(va, vb) / sqrLenA;
+      var smin = Math.min(sa, sb);
+      var smax = Math.max(sa, sb);
 
-          ['plus', 'ffplus', '=', 'ffequals'].forEach(function(key) {
-              context.keybinding().on([key], zoomIn);
-              context.keybinding().on([uiCmd('⌘' + key)], zoomInFurther);
-          });
+      // this is, essentially, the FindIntersection acting on floats from
+      // Schneider & Eberly, just inlined into this function.
+      if (smin <= 1 && smax >= 0) {
 
-          ['_', '-', 'ffminus', 'dash'].forEach(function(key) {
-              context.keybinding().on([key], zoomOut);
-              context.keybinding().on([uiCmd('⌘' + key)], zoomOutFurther);
-          });
-      };
-  }
+        // overlap on an end point
+        if (smin === 1) {
+          return noEndpointTouch ? null : [toPoint(a1, smin > 0 ? smin : 0, va)];
+        }
 
-  function uiInit(context) {
-      var _initCounter = 0;
-      var _initCallback;
-      var _needWidth = {};
+        if (smax === 0) {
+          return noEndpointTouch ? null : [toPoint(a1, smax < 1 ? smax : 1, va)];
+        }
 
+        if (noEndpointTouch && smin === 0 && smax === 1) { return null; }
 
-      function render(container) {
-          container
-              .attr('dir', textDirection);
+        // There's overlap on a segment -- two points of intersection. Return both.
+        return [
+          toPoint(a1, smin > 0 ? smin : 0, va),
+          toPoint(a1, smax < 1 ? smax : 1, va)
+        ];
+      }
 
-          var map = context.map();
+      return null;
+    }
 
-          container
-              .append('svg')
-              .attr('id', 'defs')
-              .call(svgDefs(context));
+    /**
+     * @param  {SweepEvent} se1
+     * @param  {SweepEvent} se2
+     * @param  {Queue}      queue
+     * @return {Number}
+     */
+    function possibleIntersection (se1, se2, queue) {
+      // that disallows self-intersecting polygons,
+      // did cost us half a day, so I'll leave it
+      // out of respect
+      // if (se1.isSubject === se2.isSubject) return;
+      var inter = intersection(
+        se1.point, se1.otherEvent.point,
+        se2.point, se2.otherEvent.point
+      );
 
-          container
-              .append('div')
-              .attr('id', 'sidebar')
-              .call(ui.sidebar);
+      var nintersections = inter ? inter.length : 0;
+      if (nintersections === 0) { return 0; } // no intersection
 
-          var content = container
-              .append('div')
-              .attr('id', 'content')
-              .attr('class', 'active');
+      // the line segments intersect at an endpoint of both line segments
+      if ((nintersections === 1) &&
+          (equals(se1.point, se2.point) ||
+           equals(se1.otherEvent.point, se2.otherEvent.point))) {
+        return 0;
+      }
 
-          // Top toolbar
-          var bar = content
-              .append('div')
-              .attr('id', 'bar')
-              .attr('class', 'fillD');
+      if (nintersections === 2 && se1.isSubject === se2.isSubject) {
+        // if(se1.contourId === se2.contourId){
+        // console.warn('Edges of the same polygon overlap',
+        //   se1.point, se1.otherEvent.point, se2.point, se2.otherEvent.point);
+        // }
+        //throw new Error('Edges of the same polygon overlap');
+        return 0;
+      }
 
-          content
-              .append('div')
-              .attr('id', 'map')
-              .attr('dir', 'ltr')
-              .call(map);
+      // The line segments associated to se1 and se2 intersect
+      if (nintersections === 1) {
 
-          // Leading area button group (Sidebar toggle)
-          var leadingArea = bar
-              .append('div')
-              .attr('class', 'tool-group leading-area');
+        // if the intersection point is not an endpoint of se1
+        if (!equals(se1.point, inter[0]) && !equals(se1.otherEvent.point, inter[0])) {
+          divideSegment(se1, inter[0], queue);
+        }
 
-          var sidebarButton = leadingArea
-              .append('div')
-              .append('button')
-              .attr('class', 'sidebar-toggle')
-              .attr('tabindex', -1)
-              .on('click', ui.sidebar.toggle)
-              .call(tooltip()
-                  .placement('bottom')
-                  .html(true)
-                  .title(uiTooltipHtml(t('sidebar.tooltip'), t('sidebar.key')))
-              );
+        // if the intersection point is not an endpoint of se2
+        if (!equals(se2.point, inter[0]) && !equals(se2.otherEvent.point, inter[0])) {
+          divideSegment(se2, inter[0], queue);
+        }
+        return 1;
+      }
 
-          var iconSuffix = textDirection === 'rtl' ? 'right' : 'left';
-          sidebarButton
-              .call(svgIcon('#iD-icon-sidebar-' + iconSuffix));
+      // The line segments associated to se1 and se2 overlap
+      var events        = [];
+      var leftCoincide  = false;
+      var rightCoincide = false;
 
-          leadingArea
-              .append('div')
-              .attr('class', 'full-screen bar-group')
-              .call(uiFullScreen(context));
+      if (equals(se1.point, se2.point)) {
+        leftCoincide = true; // linked
+      } else if (compareEvents(se1, se2) === 1) {
+        events.push(se2, se1);
+      } else {
+        events.push(se1, se2);
+      }
 
+      if (equals(se1.otherEvent.point, se2.otherEvent.point)) {
+        rightCoincide = true;
+      } else if (compareEvents(se1.otherEvent, se2.otherEvent) === 1) {
+        events.push(se2.otherEvent, se1.otherEvent);
+      } else {
+        events.push(se1.otherEvent, se2.otherEvent);
+      }
 
-          // Center area button group (Point/Line/Area/Note mode buttons)
-          bar
-              .append('div')
-              .attr('class', 'tool-group center-area')
-              .append('div')
-              .attr('class', 'modes joined')
-              .call(uiModes(context), bar);
+      if ((leftCoincide && rightCoincide) || leftCoincide) {
+        // both line segments are equal or share the left endpoint
+        se2.type = NON_CONTRIBUTING;
+        se1.type = (se2.inOut === se1.inOut)
+          ? SAME_TRANSITION : DIFFERENT_TRANSITION;
 
+        if (leftCoincide && !rightCoincide) {
+          // honestly no idea, but changing events selection from [2, 1]
+          // to [0, 1] fixes the overlapping self-intersecting polygons issue
+          divideSegment(events[1].otherEvent, events[0].point, queue);
+        }
+        return 2;
+      }
 
-          // Trailing area button group (Undo/Redo save buttons)
-          var trailingArea = bar
-              .append('div')
-              .attr('class', 'tool-group trailing-area');
+      // the line segments share the right endpoint
+      if (rightCoincide) {
+        divideSegment(events[0], events[1].point, queue);
+        return 3;
+      }
 
-          trailingArea
-              .append('div')
-              .attr('class', 'joined')
-              .call(uiUndoRedo(context));
+      // no line segment includes totally the other one
+      if (events[0] !== events[3].otherEvent) {
+        divideSegment(events[0], events[1].point, queue);
+        divideSegment(events[1], events[2].point, queue);
+        return 3;
+      }
 
-          trailingArea
-              .append('div')
-              .attr('class', 'save-wrap')
-              .call(uiSave(context));
+      // one line segment includes the other one
+      divideSegment(events[0], events[1].point, queue);
+      divideSegment(events[3].otherEvent, events[2].point, queue);
 
+      return 3;
+    }
 
-          // For now, just put spinner at the end of the #bar
-          bar
-              .append('div')
-              .attr('class', 'spinner')
-              .call(uiSpinner(context));
+    /**
+     * @param  {SweepEvent} le1
+     * @param  {SweepEvent} le2
+     * @return {Number}
+     */
+    function compareSegments(le1, le2) {
+      if (le1 === le2) { return 0; }
 
+      // Segments are not collinear
+      if (signedArea(le1.point, le1.otherEvent.point, le2.point) !== 0 ||
+        signedArea(le1.point, le1.otherEvent.point, le2.otherEvent.point) !== 0) {
 
-          // Map controls (appended to #bar, but absolutely positioned)
-          var controls = bar
-              .append('div')
-              .attr('class', 'map-controls');
+        // If they share their left endpoint use the right endpoint to sort
+        if (equals(le1.point, le2.point)) { return le1.isBelow(le2.otherEvent.point) ? -1 : 1; }
 
-          controls
-              .append('div')
-              .attr('class', 'map-control zoombuttons')
-              .call(uiZoom(context));
+        // Different left endpoint: use the left endpoint to sort
+        if (le1.point[0] === le2.point[0]) { return le1.point[1] < le2.point[1] ? -1 : 1; }
 
-          controls
-              .append('div')
-              .attr('class', 'map-control geolocate-control')
-              .call(uiGeolocate(context));
+        // has the line segment associated to e1 been inserted
+        // into S after the line segment associated to e2 ?
+        if (compareEvents(le1, le2) === 1) { return le2.isAbove(le1.point) ? -1 : 1; }
 
-          controls
-              .append('div')
-              .attr('class', 'map-control background-control')
-              .call(uiBackground(context));
+        // The line segment associated to e2 has been inserted
+        // into S after the line segment associated to e1
+        return le1.isBelow(le2.point) ? -1 : 1;
+      }
 
-          controls
-              .append('div')
-              .attr('class', 'map-control map-data-control')
-              .call(uiMapData(context));
+      if (le1.isSubject === le2.isSubject) { // same polygon
+        var p1 = le1.point, p2 = le2.point;
+        if (p1[0] === p2[0] && p1[1] === p2[1]/*equals(le1.point, le2.point)*/) {
+          p1 = le1.otherEvent.point; p2 = le2.otherEvent.point;
+          if (p1[0] === p2[0] && p1[1] === p2[1]) { return 0; }
+          else { return le1.contourId > le2.contourId ? 1 : -1; }
+        }
+      } else { // Segments are collinear, but belong to separate polygons
+        return le1.isSubject ? -1 : 1;
+      }
 
-          controls
-              .append('div')
-              .attr('class', 'map-control help-control')
-              .call(uiHelp(context));
+      return compareEvents(le1, le2) === 1 ? 1 : -1;
+    }
 
+    function subdivide(eventQueue, subject, clipping, sbbox, cbbox, operation) {
+      var sweepLine = new SplayTree(compareSegments);
+      var sortedEvents = [];
 
-          // Add attribution and footer
-          var about = content
-              .append('div')
-              .attr('id', 'about');
+      var rightbound = Math.min(sbbox[2], cbbox[2]);
 
-          about
-              .append('div')
-              .attr('id', 'attrib')
-              .attr('dir', 'ltr')
-              .call(uiAttribution(context));
+      var prev, next, begin;
 
-          about
-              .append('div')
-              .attr('class', 'api-status')
-              .call(uiStatus(context));
+      while (eventQueue.length !== 0) {
+        var event = eventQueue.pop();
+        sortedEvents.push(event);
 
+        // optimization by bboxes for intersection and difference goes here
+        if ((operation === INTERSECTION && event.point[0] > rightbound) ||
+            (operation === DIFFERENCE   && event.point[0] > sbbox[2])) {
+          break;
+        }
 
-          var footer = about
-              .append('div')
-              .attr('id', 'footer')
-              .attr('class', 'fillD');
+        if (event.left) {
+          next  = prev = sweepLine.insert(event);
+          begin = sweepLine.minNode();
 
-          footer
-              .append('div')
-              .attr('id', 'flash-wrap')
-              .attr('class', 'footer-hide');
+          if (prev !== begin) { prev = sweepLine.prev(prev); }
+          else                { prev = null; }
 
-          var footerWrap = footer
-              .append('div')
-              .attr('id', 'footer-wrap')
-              .attr('class', 'footer-show');
+          next = sweepLine.next(next);
 
-          footerWrap
-              .append('div')
-              .attr('id', 'scale-block')
-              .call(uiScale(context));
+          var prevEvent = prev ? prev.key : null;
+          var prevprevEvent = (void 0);
+          computeFields(event, prevEvent, operation);
+          if (next) {
+            if (possibleIntersection(event, next.key, eventQueue) === 2) {
+              computeFields(event, prevEvent, operation);
+              computeFields(event, next.key, operation);
+            }
+          }
 
-          var aboutList = footerWrap
-              .append('div')
-              .attr('id', 'info-block')
-              .append('ul')
-              .attr('id', 'about-list');
+          if (prev) {
+            if (possibleIntersection(prev.key, event, eventQueue) === 2) {
+              var prevprev = prev;
+              if (prevprev !== begin) { prevprev = sweepLine.prev(prevprev); }
+              else                    { prevprev = null; }
 
-          if (!context.embed()) {
-              aboutList
-                  .call(uiAccount(context));
+              prevprevEvent = prevprev ? prevprev.key : null;
+              computeFields(prevEvent, prevprevEvent, operation);
+              computeFields(event,     prevEvent,     operation);
+            }
           }
+        } else {
+          event = event.otherEvent;
+          next = prev = sweepLine.find(event);
 
-          aboutList
-              .append('li')
-              .attr('class', 'version')
-              .call(uiVersion(context));
+          if (prev && next) {
 
-          var issueLinks = aboutList
-              .append('li');
+            if (prev !== begin) { prev = sweepLine.prev(prev); }
+            else                { prev = null; }
 
-          issueLinks
-              .append('a')
-              .attr('target', '_blank')
-              .attr('tabindex', -1)
-              .attr('href', 'https://github.com/openstreetmap/iD/issues')
-              .call(svgIcon('#iD-icon-bug', 'light'))
-              .call(tooltip().title(t('report_a_bug')).placement('top'));
+            next = sweepLine.next(next);
+            sweepLine.remove(event);
 
-          issueLinks
-              .append('a')
-              .attr('target', '_blank')
-              .attr('tabindex', -1)
-              .attr('href', 'https://github.com/openstreetmap/iD/blob/master/CONTRIBUTING.md#translating')
-              .call(svgIcon('#iD-icon-translate', 'light'))
-              .call(tooltip().title(t('help_translate')).placement('top'));
+            if (next && prev) {
+              possibleIntersection(prev.key, next.key, eventQueue);
+            }
+          }
+        }
+      }
+      return sortedEvents;
+    }
 
-          aboutList
-              .append('li')
-              .attr('class', 'feature-warning')
-              .attr('tabindex', -1)
-              .call(uiFeatureInfo(context));
+    /**
+     * @param  {Array.<SweepEvent>} sortedEvents
+     * @return {Array.<SweepEvent>}
+     */
+    function orderEvents(sortedEvents) {
+      var event, i, len, tmp;
+      var resultEvents = [];
+      for (i = 0, len = sortedEvents.length; i < len; i++) {
+        event = sortedEvents[i];
+        if ((event.left && event.inResult) ||
+          (!event.left && event.otherEvent.inResult)) {
+          resultEvents.push(event);
+        }
+      }
+      // Due to overlapping edges the resultEvents array can be not wholly sorted
+      var sorted = false;
+      while (!sorted) {
+        sorted = true;
+        for (i = 0, len = resultEvents.length; i < len; i++) {
+          if ((i + 1) < len &&
+            compareEvents(resultEvents[i], resultEvents[i + 1]) === 1) {
+            tmp = resultEvents[i];
+            resultEvents[i] = resultEvents[i + 1];
+            resultEvents[i + 1] = tmp;
+            sorted = false;
+          }
+        }
+      }
 
-          aboutList
-              .append('li')
-              .attr('class', 'user-list')
-              .attr('tabindex', -1)
-              .call(uiContributors(context));
 
+      for (i = 0, len = resultEvents.length; i < len; i++) {
+        event = resultEvents[i];
+        event.pos = i;
+      }
 
-          // Setup map dimensions and move map to initial center/zoom.
-          // This should happen after #content and toolbars exist.
-          ui.onResize();
+      // imagine, the right event is found in the beginning of the queue,
+      // when his left counterpart is not marked yet
+      for (i = 0, len = resultEvents.length; i < len; i++) {
+        event = resultEvents[i];
+        if (!event.left) {
+          tmp = event.pos;
+          event.pos = event.otherEvent.pos;
+          event.otherEvent.pos = tmp;
+        }
+      }
 
-          var hash = behaviorHash(context);
-          hash();
-          if (!hash.hadHash) {
-              map.centerZoom([0, 0], 2);
-          }
+      return resultEvents;
+    }
 
 
-          // Add absolutely-positioned elements that sit on top of the map
-          // This should happen after the map is ready (center/zoom)
-          content
-              .call(uiMapInMap(context))
-              .call(uiInfo(context))
-              .call(uiNotice(context));
+    /**
+     * @param  {Number} pos
+     * @param  {Array.<SweepEvent>} resultEvents
+     * @param  {Object>}    processed
+     * @return {Number}
+     */
+    function nextPos(pos, resultEvents, processed, origIndex) {
+      var p, p1;
+      var newPos = pos + 1;
+      var length = resultEvents.length;
 
-          content
-              .append('div')
-              .attr('id', 'photoviewer')
-              .classed('al', true)       // 'al'=left,  'ar'=right
-              .classed('hide', true)
-              .call(ui.photoviewer);
+      p  = resultEvents[pos].point;
 
+      if (newPos < length)
+        { p1 = resultEvents[newPos].point; }
 
-          // Bind events
-          window.onbeforeunload = function() {
-              return context.save();
-          };
-          window.onunload = function() {
-              context.history().unlock();
-          };
 
-          select(window)
-              .on('gesturestart.editor', eventCancel)
-              .on('gesturechange.editor', eventCancel)
-              .on('gestureend.editor', eventCancel)
-              .on('resize.editor', ui.onResize);
+      // while in range and not the current one by value
+      while (newPos < length && p1[0] === p[0] && p1[1] === p[1]) {
+        if (!processed[newPos]) {
+          return newPos;
+        } else   {
+          newPos++;
+        }
+        p1 = resultEvents[newPos].point;
+      }
 
+      newPos = pos - 1;
 
-          var panPixels = 80;
-          context.keybinding()
-              .on('⌫', function() { event.preventDefault(); })
-              .on([t('sidebar.key'), '`', '²'], ui.sidebar.toggle)   // #5663 - common QWERTY, AZERTY
-              .on('←', pan([panPixels, 0]))
-              .on('↑', pan([0, panPixels]))
-              .on('→', pan([-panPixels, 0]))
-              .on('↓', pan([0, -panPixels]))
-              .on(['⇧←', uiCmd('⌘←')], pan([map.dimensions()[0], 0]))
-              .on(['⇧↑', uiCmd('⌘↑')], pan([0, map.dimensions()[1]]))
-              .on(['⇧→', uiCmd('⌘→')], pan([-map.dimensions()[0], 0]))
-              .on(['⇧↓', uiCmd('⌘↓')], pan([0, -map.dimensions()[1]]));
+      while (processed[newPos] && newPos >= origIndex) {
+        newPos--;
+      }
+      return newPos;
+    }
 
-          context.enter(modeBrowse(context));
 
-          if (!_initCounter++) {
-              if (!hash.startWalkthrough) {
-                  context.container()
-                      .call(uiSplash(context))
-                      .call(uiRestore(context));
-              }
+    /**
+     * @param  {Array.<SweepEvent>} sortedEvents
+     * @return {Array.<*>} polygons
+     */
+    function connectEdges(sortedEvents, operation) {
+      var i, len;
+      var resultEvents = orderEvents(sortedEvents);
 
-              context.container()
-                  .call(uiShortcuts(context));
-          }
+      // "false"-filled array
+      var processed = {};
+      var result = [];
+      var event;
 
-          var osm = context.connection();
-          var auth = uiLoading(context).message(t('loading_auth')).blocking(true);
+      for (i = 0, len = resultEvents.length; i < len; i++) {
+        if (processed[i]) { continue; }
+        var contour = [[]];
 
-          if (osm && auth) {
-              osm
-                  .on('authLoading.ui', function() {
-                      context.container()
-                          .call(auth);
-                  })
-                  .on('authDone.ui', function() {
-                      auth.close();
-                  });
+        if (!resultEvents[i].isExteriorRing) {
+          if (operation === DIFFERENCE && !resultEvents[i].isSubject && result.length === 0) {
+            result.push(contour);
+          } else if (result.length === 0) {
+            result.push([[contour]]);
+          } else {
+            result[result.length - 1].push(contour[0]);
           }
+        } else if (operation === DIFFERENCE && !resultEvents[i].isSubject && result.length > 1) {
+          result[result.length - 1].push(contour[0]);
+        } else {
+          result.push(contour);
+        }
 
-          _initCounter++;
+        var ringId = result.length - 1;
+        var pos = i;
 
-          if (hash.startWalkthrough) {
-              hash.startWalkthrough = false;
-              context.container().call(uiIntro(context));
-          }
+        var initial = resultEvents[i].point;
+        contour[0].push(initial);
 
+        while (pos >= i) {
+          event = resultEvents[pos];
+          processed[pos] = true;
 
-          function pan(d) {
-              return function() {
-                  if (select('.combobox').size()) return;
-                  event.preventDefault();
-                  context.pan(d, 100);
-              };
+          if (event.left) {
+            event.resultInOut = false;
+            event.contourId   = ringId;
+          } else {
+            event.otherEvent.resultInOut = true;
+            event.otherEvent.contourId   = ringId;
           }
 
-          function eventCancel() {
-              event.preventDefault();
-          }
-      }
+          pos = event.pos;
+          processed[pos] = true;
+          contour[0].push(resultEvents[pos].point);
+          pos = nextPos(pos, resultEvents, processed, i);
+        }
 
+        pos = pos === -1 ? i : pos;
 
-      function ui(node, callback) {
-          _initCallback = callback;
-          var container = select(node);
-          context.container(container);
-          context.loadLocale(function(err) {
-              if (!err) {
-                  render(container);
-              }
-              if (callback) {
-                  callback(err);
-              }
-          });
+        event = resultEvents[pos];
+        processed[pos] = processed[event.pos] = true;
+        event.otherEvent.resultInOut = true;
+        event.otherEvent.contourId   = ringId;
       }
 
+      // Handle if the result is a polygon (eg not multipoly)
+      // Commented it again, let's see what do we mean by that
+      // if (result.length === 1) result = result[0];
+      return result;
+    }
 
-      ui.restart = function(arg) {
-          context.keybinding().clear();
-          context.locale(arg);
-          context.loadLocale(function(err) {
-              if (!err) {
-                  context.container().selectAll('*').remove();
-                  render(context.container());
-                  if (_initCallback) _initCallback();
-              }
-          });
-      };
+    var tinyqueue = TinyQueue;
+    var default_1 = TinyQueue;
+
+    function TinyQueue(data, compare) {
+        var this$1 = this;
+
+        if (!(this instanceof TinyQueue)) { return new TinyQueue(data, compare); }
+
+        this.data = data || [];
+        this.length = this.data.length;
+        this.compare = compare || defaultCompare;
+
+        if (this.length > 0) {
+            for (var i = (this.length >> 1) - 1; i >= 0; i--) { this$1._down(i); }
+        }
+    }
+
+    function defaultCompare(a, b) {
+        return a < b ? -1 : a > b ? 1 : 0;
+    }
+
+    TinyQueue.prototype = {
+
+        push: function (item) {
+            this.data.push(item);
+            this.length++;
+            this._up(this.length - 1);
+        },
 
+        pop: function () {
+            if (this.length === 0) { return undefined; }
 
-      ui.sidebar = uiSidebar$$1(context);
+            var top = this.data[0];
+            this.length--;
 
-      ui.photoviewer = uiPhotoviewer(context);
+            if (this.length > 0) {
+                this.data[0] = this.data[this.length];
+                this._down(0);
+            }
+            this.data.pop();
 
-      ui.onResize = function(withPan) {
-          var map = context.map();
+            return top;
+        },
 
-          // Recalc dimensions of map and sidebar.. (`true` = force recalc)
-          // This will call `getBoundingClientRect` and trigger reflow,
-          //  but the values will be cached for later use.
-          var mapDimensions = utilGetDimensions(select('#content'), true);
-          utilGetDimensions(select('#sidebar'), true);
+        peek: function () {
+            return this.data[0];
+        },
 
-          if (withPan !== undefined) {
-              map.redrawEnable(false);
-              map.pan(withPan);
-              map.redrawEnable(true);
-          }
-          map.dimensions(mapDimensions);
+        _up: function (pos) {
+            var data = this.data;
+            var compare = this.compare;
+            var item = data[pos];
 
-          ui.photoviewer.onMapResize();
+            while (pos > 0) {
+                var parent = (pos - 1) >> 1;
+                var current = data[parent];
+                if (compare(item, current) >= 0) { break; }
+                data[pos] = current;
+                pos = parent;
+            }
 
-          // check if header or footer have overflowed
-          ui.checkOverflow('#bar');
-          ui.checkOverflow('#footer');
+            data[pos] = item;
+        },
 
-          // Use outdated code so it works on Explorer
-          var resizeWindowEvent = document.createEvent('Event');
+        _down: function (pos) {
+            var this$1 = this;
 
-          resizeWindowEvent.initEvent('resizeWindow', true, true);
+            var data = this.data;
+            var compare = this.compare;
+            var halfLength = this.length >> 1;
+            var item = data[pos];
 
-          document.dispatchEvent(resizeWindowEvent);
-      };
+            while (pos < halfLength) {
+                var left = (pos << 1) + 1;
+                var right = left + 1;
+                var best = data[left];
 
+                if (right < this$1.length && compare(data[right], best) < 0) {
+                    left = right;
+                    best = data[right];
+                }
+                if (compare(best, item) >= 0) { break; }
 
-      // Call checkOverflow when resizing or whenever the contents change.
-      ui.checkOverflow = function(selector$$1, reset) {
-          if (reset) {
-              delete _needWidth[selector$$1];
-          }
+                data[pos] = best;
+                pos = left;
+            }
 
-          var element = select(selector$$1);
-          var scrollWidth = element.property('scrollWidth');
-          var clientWidth = element.property('clientWidth');
-          var needed = _needWidth[selector$$1] || scrollWidth;
+            data[pos] = item;
+        }
+    };
+    tinyqueue.default = default_1;
 
-          if (scrollWidth > clientWidth) {    // overflow happening
-              element.classed('narrow', true);
-              if (!_needWidth[selector$$1]) {
-                  _needWidth[selector$$1] = scrollWidth;
-              }
+    var max = Math.max;
+    var min = Math.min;
 
-          } else if (scrollWidth >= needed) {
-              element.classed('narrow', false);
-          }
-      };
+    var contourId = 0;
 
 
-      return ui;
-  }
+    function processPolygon(contourOrHole, isSubject, depth, Q, bbox, isExteriorRing) {
+      var i, len, s1, s2, e1, e2;
+      for (i = 0, len = contourOrHole.length - 1; i < len; i++) {
+        s1 = contourOrHole[i];
+        s2 = contourOrHole[i + 1];
+        e1 = new SweepEvent(s1, false, undefined, isSubject);
+        e2 = new SweepEvent(s2, false, e1,        isSubject);
+        e1.otherEvent = e2;
 
-  /**
-   * This method is like `_.uniq` except that it accepts `iteratee` which is
-   * invoked for each element in `array` to generate the criterion by which
-   * uniqueness is computed. The order of result values is determined by the
-   * order they occur in the array. The iteratee is invoked with one argument:
-   * (value).
-   *
-   * @static
-   * @memberOf _
-   * @since 4.0.0
-   * @category Array
-   * @param {Array} array The array to inspect.
-   * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
-   * @returns {Array} Returns the new duplicate free array.
-   * @example
-   *
-   * _.uniqBy([2.1, 1.2, 2.3], Math.floor);
-   * // => [2.1, 1.2]
-   *
-   * // The `_.property` iteratee shorthand.
-   * _.uniqBy([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x');
-   * // => [{ 'x': 1 }, { 'x': 2 }]
-   */
-  function uniqBy(array, iteratee) {
-    return (array && array.length) ? baseUniq(array, baseIteratee(iteratee, 2)) : [];
-  }
+        if (s1[0] === s2[0] && s1[1] === s2[1]) {
+          continue; // skip collapsed edges, or it breaks
+        }
 
-  function uiChangesetEditor$$1(context) {
-      var dispatch$$1 = dispatch('change');
-      var formFields = uiFormFields$$1(context);
-      var commentCombo = uiCombobox(context, 'comment').caseSensitive(true);
-      var _fieldsArr;
-      var _tags;
-      var _changesetID;
+        e1.contourId = e2.contourId = depth;
+        if (!isExteriorRing) {
+          e1.isExteriorRing = false;
+          e2.isExteriorRing = false;
+        }
+        if (compareEvents(e1, e2) > 0) {
+          e2.left = true;
+        } else {
+          e1.left = true;
+        }
 
+        var x = s1[0], y = s1[1];
+        bbox[0] = min(bbox[0], x);
+        bbox[1] = min(bbox[1], y);
+        bbox[2] = max(bbox[2], x);
+        bbox[3] = max(bbox[3], y);
 
-      function changesetEditor(selection) {
-          render(selection);
+        // Pushing it so the queue is sorted from left to right,
+        // with object on the left having the highest priority.
+        Q.push(e1);
+        Q.push(e2);
       }
+    }
 
 
-      function render(selection) {
-          var initial = false;
+    function fillQueue(subject, clipping, sbbox, cbbox, operation) {
+      var eventQueue = new tinyqueue(null, compareEvents);
+      var polygonSet, isExteriorRing, i, ii, j, jj; //, k, kk;
 
-          if (!_fieldsArr) {
-              initial = true;
-              var presets = context.presets();
+      for (i = 0, ii = subject.length; i < ii; i++) {
+        polygonSet = subject[i];
+        for (j = 0, jj = polygonSet.length; j < jj; j++) {
+          isExteriorRing = j === 0;
+          if (isExteriorRing) { contourId++; }
+          processPolygon(polygonSet[j], true, contourId, eventQueue, sbbox, isExteriorRing);
+        }
+      }
 
-              _fieldsArr = [
-                  uiField(context, presets.field('comment'), null, { show: true, revert: false }),
-                  uiField(context, presets.field('source'), null, { show: false, revert: false }),
-                  uiField(context, presets.field('hashtags'), null, { show: false, revert: false }),
-              ];
+      for (i = 0, ii = clipping.length; i < ii; i++) {
+        polygonSet = clipping[i];
+        for (j = 0, jj = polygonSet.length; j < jj; j++) {
+          isExteriorRing = j === 0;
+          if (operation === DIFFERENCE) { isExteriorRing = false; }
+          if (isExteriorRing) { contourId++; }
+          processPolygon(polygonSet[j], false, contourId, eventQueue, cbbox, isExteriorRing);
+        }
+      }
 
-              _fieldsArr.forEach(function(field) {
-                  field
-                      .on('change', function(t$$1, onInput) {
-                          dispatch$$1.call('change', field, t$$1, onInput);
-                      });
-              });
-          }
+      return eventQueue;
+    }
 
-          _fieldsArr.forEach(function(field) {
-              field
-                  .tags(_tags);
-          });
+    var EMPTY = [];
 
 
-          selection
-              .call(formFields.fieldsArr(_fieldsArr));
+    function trivialOperation(subject, clipping, operation) {
+      var result = null;
+      if (subject.length * clipping.length === 0) {
+        if        (operation === INTERSECTION) {
+          result = EMPTY;
+        } else if (operation === DIFFERENCE) {
+          result = subject;
+        } else if (operation === UNION ||
+                   operation === XOR) {
+          result = (subject.length === 0) ? clipping : subject;
+        }
+      }
+      return result;
+    }
 
 
-          if (initial) {
-              var commentField = selection.select('#preset-input-comment');
-              var commentNode = commentField.node();
+    function compareBBoxes(subject, clipping, sbbox, cbbox, operation) {
+      var result = null;
+      if (sbbox[0] > cbbox[2] ||
+          cbbox[0] > sbbox[2] ||
+          sbbox[1] > cbbox[3] ||
+          cbbox[1] > sbbox[3]) {
+        if        (operation === INTERSECTION) {
+          result = EMPTY;
+        } else if (operation === DIFFERENCE) {
+          result = subject;
+        } else if (operation === UNION ||
+                   operation === XOR) {
+          result = subject.concat(clipping);
+        }
+      }
+      return result;
+    }
 
-              if (commentNode) {
-                  commentNode.focus();
-                  commentNode.select();
-              }
 
-              // trigger a 'blur' event so that comment field can be cleaned
-              // and checked for hashtags, even if retrieved from localstorage
-              utilTriggerEvent(commentField, 'blur');
+    function boolean(subject, clipping, operation) {
+      if (typeof subject[0][0][0] === 'number') {
+        subject = [subject];
+      }
+      if (typeof clipping[0][0][0] === 'number') {
+        clipping = [clipping];
+      }
+      var trivial = trivialOperation(subject, clipping, operation);
+      if (trivial) {
+        return trivial === EMPTY ? null : trivial;
+      }
+      var sbbox = [Infinity, Infinity, -Infinity, -Infinity];
+      var cbbox = [Infinity, Infinity, -Infinity, -Infinity];
 
-              var osm = context.connection();
-              if (osm) {
-                  osm.userChangesets(function (err, changesets) {
-                      if (err) return;
+      //console.time('fill queue');
+      var eventQueue = fillQueue(subject, clipping, sbbox, cbbox, operation);
+      //console.timeEnd('fill queue');
 
-                      var comments = changesets.map(function(changeset) {
-                          return {
-                              title: changeset.tags.comment,
-                              value: changeset.tags.comment
-                          };
-                      });
+      trivial = compareBBoxes(subject, clipping, sbbox, cbbox, operation);
+      if (trivial) {
+        return trivial === EMPTY ? null : trivial;
+      }
+      //console.time('subdivide edges');
+      var sortedEvents = subdivide(eventQueue, subject, clipping, sbbox, cbbox, operation);
+      //console.timeEnd('subdivide edges');
 
-                      commentField
-                          .call(commentCombo
-                              .data(uniqBy(comments, 'title'))
-                          );
-                  });
-              }
-          }
+      //console.time('connect vertices');
+      var result = connectEdges(sortedEvents, operation);
+      //console.timeEnd('connect vertices');
+      return result;
+    }
 
-          // Add warning if comment mentions Google
-          var hasGoogle = _tags.comment.match(/google/i);
-          var commentWarning = selection.select('.form-field-comment').selectAll('.comment-warning')
-              .data(hasGoogle ? [0] : []);
+    function union (subject, clipping) {
+      return boolean(subject, clipping, UNION);
+    }
 
-          commentWarning.exit()
-              .transition()
-              .duration(200)
-              .style('opacity', 0)
-              .remove();
+    function diff (subject, clipping) {
+      return boolean(subject, clipping, DIFFERENCE);
+    }
 
-          var commentEnter = commentWarning.enter()
-              .insert('div', '.tag-reference-body')
-              .attr('class', 'field-warning comment-warning')
-              .style('opacity', 0);
+    function xor (subject, clipping){
+      return boolean(subject, clipping, XOR);
+    }
 
-          commentEnter
-              .append('a')
-              .attr('target', '_blank')
-              .attr('tabindex', -1)
-              .call(svgIcon('#iD-icon-alert', 'inline'))
-              .attr('href', t('commit.google_warning_link'))
-              .append('span')
-              .text(t('commit.google_warning'));
+    function intersection$1 (subject, clipping) {
+      return boolean(subject, clipping, INTERSECTION);
+    }
 
-          commentEnter
-              .transition()
-              .duration(200)
-              .style('opacity', 1);
-      }
+    /**
+     * @enum {Number}
+     */
+    var operations = { UNION: UNION, DIFFERENCE: DIFFERENCE, INTERSECTION: INTERSECTION, XOR: XOR };
 
+    exports.union = union;
+    exports.diff = diff;
+    exports.xor = xor;
+    exports.intersection = intersection$1;
+    exports.operations = operations;
 
-      changesetEditor.tags = function(_) {
-          if (!arguments.length) return _tags;
-          _tags = _;
-          // Don't reset _fieldsArr here.
-          return changesetEditor;
-      };
+    Object.defineProperty(exports, '__esModule', { value: true });
 
+  })));
 
-      changesetEditor.changesetID = function(_) {
-          if (!arguments.length) return _changesetID;
-          if (_changesetID === _) return changesetEditor;
-          _changesetID = _;
-          _fieldsArr = null;
-          return changesetEditor;
-      };
+  });
 
+  var martinez = unwrapExports(martinez_umd);
 
-      return utilRebind(changesetEditor, dispatch$$1, 'on');
-  }
+  var read$6 = function (buffer, offset, isLE, mLen, nBytes) {
+    var e, m;
+    var eLen = (nBytes * 8) - mLen - 1;
+    var eMax = (1 << eLen) - 1;
+    var eBias = eMax >> 1;
+    var nBits = -7;
+    var i = isLE ? (nBytes - 1) : 0;
+    var d = isLE ? -1 : 1;
+    var s = buffer[offset + i];
 
-  // This code assumes that the combobox values will not have duplicate entries.
-  // It is keyed on the `value` of the entry. Data should be an array of objects like:
-  //   [{
-  //       value:  'display text',  // required
-  //       title:  'hover text'     // optional
-  //   }, ...]
+    i += d;
 
-  var _comboHideTimerID;
+    e = s & ((1 << (-nBits)) - 1);
+    s >>= (-nBits);
+    nBits += eLen;
+    for (; nBits > 0; e = (e * 256) + buffer[offset + i], i += d, nBits -= 8) {}
 
-  function uiCombobox(context, klass) {
-      var dispatch$$1 = dispatch('accept', 'cancel');
-      var container = context.container();
+    m = e & ((1 << (-nBits)) - 1);
+    e >>= (-nBits);
+    nBits += mLen;
+    for (; nBits > 0; m = (m * 256) + buffer[offset + i], i += d, nBits -= 8) {}
 
-      var _suggestions = [];
-      var _data = [];
-      var _fetched = {};
-      var _selected = null;
-      var _canAutocomplete = true;
-      var _caseSensitive = false;
-      var _cancelFetch = false;
-      var _minItems = 2;
-      var _tDown = 0;
+    if (e === 0) {
+      e = 1 - eBias;
+    } else if (e === eMax) {
+      return m ? NaN : ((s ? -1 : 1) * Infinity)
+    } else {
+      m = m + Math.pow(2, mLen);
+      e = e - eBias;
+    }
+    return (s ? -1 : 1) * m * Math.pow(2, e - mLen)
+  };
 
-      var _fetcher = function(val, cb) {
-          cb(_data.filter(function(d) {
-              return d.value
-                  .toString()
-                  .toLowerCase()
-                  .indexOf(val.toLowerCase()) !== -1;
-          }));
-      };
+  var write$6 = function (buffer, value, offset, isLE, mLen, nBytes) {
+    var e, m, c;
+    var eLen = (nBytes * 8) - mLen - 1;
+    var eMax = (1 << eLen) - 1;
+    var eBias = eMax >> 1;
+    var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0);
+    var i = isLE ? 0 : (nBytes - 1);
+    var d = isLE ? 1 : -1;
+    var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0;
 
-      var combobox = function(input, attachTo) {
-          if (!input || input.empty()) return;
+    value = Math.abs(value);
 
-          input
-              .classed('combobox-input', true)
-              .on('focus.combo-input', focus)
-              .on('blur.combo-input', blur)
-              .on('keydown.combo-input', keydown)
-              .on('keyup.combo-input', keyup)
-              .on('input.combo-input', change)
-              .on('mousedown.combo-input', mousedown)
-              .each(function() {
-                  var parent = this.parentNode;
-                  var sibling = this.nextSibling;
+    if (isNaN(value) || value === Infinity) {
+      m = isNaN(value) ? 1 : 0;
+      e = eMax;
+    } else {
+      e = Math.floor(Math.log(value) / Math.LN2);
+      if (value * (c = Math.pow(2, -e)) < 1) {
+        e--;
+        c *= 2;
+      }
+      if (e + eBias >= 1) {
+        value += rt / c;
+      } else {
+        value += rt * Math.pow(2, 1 - eBias);
+      }
+      if (value * c >= 2) {
+        e++;
+        c /= 2;
+      }
 
-                  select(parent).selectAll('.combobox-caret')
-                      .filter(function(d) { return d === input.node(); })
-                      .data([input.node()])
-                      .enter()
-                      .insert('div', function() { return sibling; })
-                      .attr('class', 'combobox-caret')
-                      .on('mousedown.combo-caret mouseup.combo-caret', function() {
-                          var e2 = new MouseEvent(event.type, event);
-                          event.preventDefault();       // don't steal focus from input
-                          input.node().dispatchEvent(e2);  // send events to the input instead
-                      });
-              });
+      if (e + eBias >= eMax) {
+        m = 0;
+        e = eMax;
+      } else if (e + eBias >= 1) {
+        m = ((value * c) - 1) * Math.pow(2, mLen);
+        e = e + eBias;
+      } else {
+        m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen);
+        e = 0;
+      }
+    }
 
+    for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}
 
-          function mousedown() {
-              if (event.button !== 0) return;    // left click only
-              _tDown = +new Date();
+    e = (e << mLen) | m;
+    eLen += mLen;
+    for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}
 
-              // clear selection
-              var start = input.property('selectionStart');
-              var end = input.property('selectionEnd');
-              if (start !== end) {
-                  var val = utilGetSetValue(input);
-                  input.node().setSelectionRange(val.length, val.length);
-                  return;
-              }
+    buffer[offset + i - d] |= s * 128;
+  };
 
-              input.on('mouseup.combo-input', mouseup);
-          }
+  var ieee754 = {
+       read: read$6,
+       write: write$6
+  };
 
+  var pbf = Pbf;
 
-          function mouseup() {
-              input.on('mouseup.combo-input', null);
-              if (event.button !== 0) return;    // left click only
 
-              var start = input.property('selectionStart');
-              var end = input.property('selectionEnd');
-              if (start !== end) return;  // exit if user is selecting
 
-              // not showing or showing for a different field - try to show it.
-              var combo = container.selectAll('.combobox');
-              if (combo.empty() || combo.datum() !== input) {
-                  var tOrig = _tDown;
-                  window.setTimeout(function() {
-                      if (tOrig !== _tDown) return;   // exit if user double clicked
-                      input.node().focus();
-                      fetch('', function() {
-                          show();
-                          render();
-                      });
-                  }, 250);
+  function Pbf(buf) {
+      this.buf = ArrayBuffer.isView && ArrayBuffer.isView(buf) ? buf : new Uint8Array(buf || 0);
+      this.pos = 0;
+      this.type = 0;
+      this.length = this.buf.length;
+  }
 
-              } else {
-                  hide();
-              }
-          }
+  Pbf.Varint  = 0; // varint: int32, int64, uint32, uint64, sint32, sint64, bool, enum
+  Pbf.Fixed64 = 1; // 64-bit: double, fixed64, sfixed64
+  Pbf.Bytes   = 2; // length-delimited: string, bytes, embedded messages, packed repeated fields
+  Pbf.Fixed32 = 5; // 32-bit: float, fixed32, sfixed32
 
+  var SHIFT_LEFT_32 = (1 << 16) * (1 << 16),
+      SHIFT_RIGHT_32 = 1 / SHIFT_LEFT_32;
 
-          function focus() {
-              fetch('');   // prefetch values (may warm taginfo cache)
-          }
+  Pbf.prototype = {
 
+      destroy: function() {
+          this.buf = null;
+      },
 
-          function blur() {
-              _comboHideTimerID = window.setTimeout(hide, 75);
-          }
+      // === READING =================================================================
 
+      readFields: function(readField, result, end) {
+          end = end || this.length;
 
-          function show() {
-              hide();   // remove any existing
+          while (this.pos < end) {
+              var val = this.readVarint(),
+                  tag = val >> 3,
+                  startPos = this.pos;
 
-              container
-                  .insert('div', ':first-child')
-                  .datum(input.node())
-                  .attr('class', 'combobox' + (klass ? ' combobox-' + klass : ''))
-                  .style('position', 'absolute')
-                  .style('display', 'block')
-                  .style('left', '0px')
-                  .on('mousedown.combo-container', function () {
-                      // prevent moving focus out of the input field
-                      event.preventDefault();
-                  });
+              this.type = val & 0x7;
+              readField(tag, result, this);
 
-              select('body')
-                  .on('scroll.combo-scroll', render, true);
+              if (this.pos === startPos) this.skip(val);
           }
+          return result;
+      },
 
+      readMessage: function(readField, result) {
+          return this.readFields(readField, result, this.readVarint() + this.pos);
+      },
 
-          function hide() {
-              if (_comboHideTimerID) {
-                  window.clearTimeout(_comboHideTimerID);
-                  _comboHideTimerID = undefined;
-              }
+      readFixed32: function() {
+          var val = readUInt32(this.buf, this.pos);
+          this.pos += 4;
+          return val;
+      },
 
-              container.selectAll('.combobox')
-                  .remove();
+      readSFixed32: function() {
+          var val = readInt32(this.buf, this.pos);
+          this.pos += 4;
+          return val;
+      },
 
-              select('body')
-                  .on('scroll.combo-scroll', null);
-          }
+      // 64-bit int handling is based on github.com/dpw/node-buffer-more-ints (MIT-licensed)
 
+      readFixed64: function() {
+          var val = readUInt32(this.buf, this.pos) + readUInt32(this.buf, this.pos + 4) * SHIFT_LEFT_32;
+          this.pos += 8;
+          return val;
+      },
 
-          function keydown() {
-              var shown = !container.selectAll('.combobox').empty();
-              var tagName = input.node() ? input.node().tagName.toLowerCase() : '';
+      readSFixed64: function() {
+          var val = readUInt32(this.buf, this.pos) + readInt32(this.buf, this.pos + 4) * SHIFT_LEFT_32;
+          this.pos += 8;
+          return val;
+      },
 
-              switch (event.keyCode) {
-                  case 8:   // ⌫ Backspace
-                  case 46:  // ⌦ Delete
-                      event.stopPropagation();
-                      _selected = null;
-                      render();
-                      input.on('input.combo-input', function() {
-                          var start = input.property('selectionStart');
-                          input.node().setSelectionRange(start, start);
-                          input.on('input.combo-input', change);
-                      });
-                      break;
+      readFloat: function() {
+          var val = ieee754.read(this.buf, this.pos, true, 23, 4);
+          this.pos += 4;
+          return val;
+      },
 
-                  case 9:   // ⇥ Tab
-                      event.stopPropagation();
-                      accept();
-                      break;
+      readDouble: function() {
+          var val = ieee754.read(this.buf, this.pos, true, 52, 8);
+          this.pos += 8;
+          return val;
+      },
 
-                  case 13:  // ↩ Return
-                      event.preventDefault();
-                      event.stopPropagation();
-                      break;
+      readVarint: function(isSigned) {
+          var buf = this.buf,
+              val, b;
 
-                  case 38:  // ↑ Up arrow
-                      if (tagName === 'textarea' && !shown) return;
-                      event.preventDefault();
-                      if (tagName === 'input' && !shown) {
-                          show();
-                      }
-                      nav(-1);
-                      break;
+          b = buf[this.pos++]; val  =  b & 0x7f;        if (b < 0x80) return val;
+          b = buf[this.pos++]; val |= (b & 0x7f) << 7;  if (b < 0x80) return val;
+          b = buf[this.pos++]; val |= (b & 0x7f) << 14; if (b < 0x80) return val;
+          b = buf[this.pos++]; val |= (b & 0x7f) << 21; if (b < 0x80) return val;
+          b = buf[this.pos];   val |= (b & 0x0f) << 28;
 
-                  case 40:  // ↓ Down arrow
-                      if (tagName === 'textarea' && !shown) return;
-                      event.preventDefault();
-                      if (tagName === 'input' && !shown) {
-                          show();
-                      }
-                      nav(+1);
-                      break;
-              }
-          }
+          return readVarintRemainder(val, isSigned, this);
+      },
 
+      readVarint64: function() { // for compatibility with v2.0.1
+          return this.readVarint(true);
+      },
 
-          function keyup() {
-              switch (event.keyCode) {
-                  case 27:  // ⎋ Escape
-                      cancel();
-                      break;
+      readSVarint: function() {
+          var num = this.readVarint();
+          return num % 2 === 1 ? (num + 1) / -2 : num / 2; // zigzag encoding
+      },
 
-                  case 13:  // ↩ Return
-                      accept();
-                      break;
-              }
-          }
+      readBoolean: function() {
+          return Boolean(this.readVarint());
+      },
 
+      readString: function() {
+          var end = this.readVarint() + this.pos,
+              str = readUtf8(this.buf, this.pos, end);
+          this.pos = end;
+          return str;
+      },
 
-          // Called whenever the input value is changed (e.g. on typing)
-          function change() {
-              fetch(value(), function() {
-                  _selected = null;
-                  var val = input.property('value');
+      readBytes: function() {
+          var end = this.readVarint() + this.pos,
+              buffer = this.buf.subarray(this.pos, end);
+          this.pos = end;
+          return buffer;
+      },
 
-                  if (_suggestions.length) {
-                      if (input.property('selectionEnd') === val.length) {
-                          _selected = tryAutocomplete();
-                      }
+      // verbose for performance reasons; doesn't affect gzipped size
 
-                      if (!_selected) {
-                          _selected = val;
-                      }
-                  }
+      readPackedVarint: function(arr, isSigned) {
+          var end = readPackedEnd(this);
+          arr = arr || [];
+          while (this.pos < end) arr.push(this.readVarint(isSigned));
+          return arr;
+      },
+      readPackedSVarint: function(arr) {
+          var end = readPackedEnd(this);
+          arr = arr || [];
+          while (this.pos < end) arr.push(this.readSVarint());
+          return arr;
+      },
+      readPackedBoolean: function(arr) {
+          var end = readPackedEnd(this);
+          arr = arr || [];
+          while (this.pos < end) arr.push(this.readBoolean());
+          return arr;
+      },
+      readPackedFloat: function(arr) {
+          var end = readPackedEnd(this);
+          arr = arr || [];
+          while (this.pos < end) arr.push(this.readFloat());
+          return arr;
+      },
+      readPackedDouble: function(arr) {
+          var end = readPackedEnd(this);
+          arr = arr || [];
+          while (this.pos < end) arr.push(this.readDouble());
+          return arr;
+      },
+      readPackedFixed32: function(arr) {
+          var end = readPackedEnd(this);
+          arr = arr || [];
+          while (this.pos < end) arr.push(this.readFixed32());
+          return arr;
+      },
+      readPackedSFixed32: function(arr) {
+          var end = readPackedEnd(this);
+          arr = arr || [];
+          while (this.pos < end) arr.push(this.readSFixed32());
+          return arr;
+      },
+      readPackedFixed64: function(arr) {
+          var end = readPackedEnd(this);
+          arr = arr || [];
+          while (this.pos < end) arr.push(this.readFixed64());
+          return arr;
+      },
+      readPackedSFixed64: function(arr) {
+          var end = readPackedEnd(this);
+          arr = arr || [];
+          while (this.pos < end) arr.push(this.readSFixed64());
+          return arr;
+      },
 
-                  if (val.length) {
-                      var combo = container.selectAll('.combobox');
-                      if (combo.empty()) {
-                          show();
-                      }
-                  } else {
-                      hide();
-                  }
+      skip: function(val) {
+          var type = val & 0x7;
+          if (type === Pbf.Varint) while (this.buf[this.pos++] > 0x7f) {}
+          else if (type === Pbf.Bytes) this.pos = this.readVarint() + this.pos;
+          else if (type === Pbf.Fixed32) this.pos += 4;
+          else if (type === Pbf.Fixed64) this.pos += 8;
+          else throw new Error('Unimplemented type: ' + type);
+      },
 
-                  render();
-              });
-          }
+      // === WRITING =================================================================
 
+      writeTag: function(tag, type) {
+          this.writeVarint((tag << 3) | type);
+      },
 
-          // Called when the user presses up/down arrows to navigate the list
-          function nav(dir) {
-              if (_suggestions.length) {
-                  // try to determine previously selected index..
-                  var index = -1;
-                  for (var i = 0; i < _suggestions.length; i++) {
-                      if (_selected && _suggestions[i].value === _selected) {
-                          index = i;
-                          break;
-                      }
-                  }
+      realloc: function(min) {
+          var length = this.length || 16;
 
-                  // pick new _selected
-                  index = Math.max(Math.min(index + dir, _suggestions.length - 1), 0);
-                  _selected = _suggestions[index].value;
-                  input.property('value', _selected);
-              }
+          while (length < this.pos + min) length *= 2;
 
-              render();
-              ensureVisible();
+          if (length !== this.length) {
+              var buf = new Uint8Array(length);
+              buf.set(this.buf);
+              this.buf = buf;
+              this.length = length;
           }
+      },
 
+      finish: function() {
+          this.length = this.pos;
+          this.pos = 0;
+          return this.buf.subarray(0, this.length);
+      },
 
-          function ensureVisible() {
-              var combo = container.selectAll('.combobox');
-              if (combo.empty()) return;
-
-              var containerRect = container.node().getBoundingClientRect();
-              var comboRect = combo.node().getBoundingClientRect();
-
-              if (comboRect.bottom > containerRect.bottom) {
-                  var node = attachTo ? attachTo.node() : input.node();
-                  node.scrollIntoView({ behavior: 'instant', block: 'center' });
-                  render();
-              }
+      writeFixed32: function(val) {
+          this.realloc(4);
+          writeInt32(this.buf, val, this.pos);
+          this.pos += 4;
+      },
 
-              // https://stackoverflow.com/questions/11039885/scrollintoview-causing-the-whole-page-to-move
-              var selected = combo.selectAll('.combobox-option.selected').node();
-              if (selected) {
-                  selected.scrollIntoView({ behavior: 'smooth', block: 'nearest' });
-              }
-          }
+      writeSFixed32: function(val) {
+          this.realloc(4);
+          writeInt32(this.buf, val, this.pos);
+          this.pos += 4;
+      },
 
+      writeFixed64: function(val) {
+          this.realloc(8);
+          writeInt32(this.buf, val & -1, this.pos);
+          writeInt32(this.buf, Math.floor(val * SHIFT_RIGHT_32), this.pos + 4);
+          this.pos += 8;
+      },
 
-          function value() {
-              var value = input.property('value');
-              var start = input.property('selectionStart');
-              var end = input.property('selectionEnd');
+      writeSFixed64: function(val) {
+          this.realloc(8);
+          writeInt32(this.buf, val & -1, this.pos);
+          writeInt32(this.buf, Math.floor(val * SHIFT_RIGHT_32), this.pos + 4);
+          this.pos += 8;
+      },
 
-              if (start && end) {
-                  value = value.substring(0, start);
-              }
+      writeVarint: function(val) {
+          val = +val || 0;
 
-              return value;
+          if (val > 0xfffffff || val < 0) {
+              writeBigVarint(val, this);
+              return;
           }
 
+          this.realloc(4);
 
-          function fetch(v, cb) {
-              _cancelFetch = false;
-
-              _fetcher.call(input, v, function(results) {
-                  // already chose a value, don't overwrite or autocomplete it
-                  if (_cancelFetch) return;
-
-                  _suggestions = results;
-                  results.forEach(function(d) { _fetched[d.value] = d; });
+          this.buf[this.pos++] =           val & 0x7f  | (val > 0x7f ? 0x80 : 0); if (val <= 0x7f) return;
+          this.buf[this.pos++] = ((val >>>= 7) & 0x7f) | (val > 0x7f ? 0x80 : 0); if (val <= 0x7f) return;
+          this.buf[this.pos++] = ((val >>>= 7) & 0x7f) | (val > 0x7f ? 0x80 : 0); if (val <= 0x7f) return;
+          this.buf[this.pos++] =   (val >>> 7) & 0x7f;
+      },
 
-                  if (cb) {
-                      cb();
-                  }
-              });
-          }
+      writeSVarint: function(val) {
+          this.writeVarint(val < 0 ? -val * 2 - 1 : val * 2);
+      },
 
+      writeBoolean: function(val) {
+          this.writeVarint(Boolean(val));
+      },
 
-          function tryAutocomplete() {
-              if (!_canAutocomplete) return;
+      writeString: function(str) {
+          str = String(str);
+          this.realloc(str.length * 4);
 
-              var val = _caseSensitive ? value() : value().toLowerCase();
-              if (!val) return;
+          this.pos++; // reserve 1 byte for short string length
 
-              // Don't autocomplete if user is typing a number - #4935
-              if (!isNaN(parseFloat(val)) && isFinite(val)) return;
+          var startPos = this.pos;
+          // write the string directly to the buffer and see how much was written
+          this.pos = writeUtf8(this.buf, str, this.pos);
+          var len = this.pos - startPos;
 
-              var bestIndex = -1;
-              for (var i = 0; i < _suggestions.length; i++) {
-                  var suggestion = _suggestions[i].value;
-                  var compare = _caseSensitive ? suggestion : suggestion.toLowerCase();
+          if (len >= 0x80) makeRoomForExtraLength(startPos, len, this);
 
-                  // if search string matches suggestion exactly, pick it..
-                  if (compare === val) {
-                      bestIndex = i;
-                      break;
+          // finally, write the message length in the reserved place and restore the position
+          this.pos = startPos - 1;
+          this.writeVarint(len);
+          this.pos += len;
+      },
 
-                  // otherwise lock in the first result that starts with the search string..
-                  } else if (bestIndex === -1 && compare.indexOf(val) === 0) {
-                      bestIndex = i;
-                  }
-              }
+      writeFloat: function(val) {
+          this.realloc(4);
+          ieee754.write(this.buf, val, this.pos, true, 23, 4);
+          this.pos += 4;
+      },
 
-              if (bestIndex !== -1) {
-                  var bestVal = _suggestions[bestIndex].value;
-                  input.property('value', bestVal);
-                  input.node().setSelectionRange(val.length, bestVal.length);
-                  return bestVal;
-              }
-          }
+      writeDouble: function(val) {
+          this.realloc(8);
+          ieee754.write(this.buf, val, this.pos, true, 52, 8);
+          this.pos += 8;
+      },
 
+      writeBytes: function(buffer) {
+          var len = buffer.length;
+          this.writeVarint(len);
+          this.realloc(len);
+          for (var i = 0; i < len; i++) this.buf[this.pos++] = buffer[i];
+      },
 
-          function render() {
-              if (_suggestions.length < _minItems || document.activeElement !== input.node()) {
-                  hide();
-                  return;
-              }
+      writeRawMessage: function(fn, obj) {
+          this.pos++; // reserve 1 byte for short message length
 
-              var shown = !container.selectAll('.combobox').empty();
-              if (!shown) return;
+          // write the message directly to the buffer and see how much was written
+          var startPos = this.pos;
+          fn(obj, this);
+          var len = this.pos - startPos;
 
-              var combo = container.selectAll('.combobox');
-              var options = combo.selectAll('.combobox-option')
-                  .data(_suggestions, function(d) { return d.value; });
+          if (len >= 0x80) makeRoomForExtraLength(startPos, len, this);
 
-              options.exit()
-                  .remove();
+          // finally, write the message length in the reserved place and restore the position
+          this.pos = startPos - 1;
+          this.writeVarint(len);
+          this.pos += len;
+      },
 
-              // enter/update
-              options.enter()
-                  .append('a')
-                  .attr('class', 'combobox-option')
-                  .attr('title', function(d) { return d.title; })
-                  .text(function(d) { return d.display || d.value; })
-                  .merge(options)
-                  .classed('selected', function(d) { return d.value === _selected; })
-                  .on('click.combo-option', accept)
-                  .order();
+      writeMessage: function(tag, fn, obj) {
+          this.writeTag(tag, Pbf.Bytes);
+          this.writeRawMessage(fn, obj);
+      },
 
-              var node = attachTo ? attachTo.node() : input.node();
-              var rect = node.getBoundingClientRect();
+      writePackedVarint:   function(tag, arr) { this.writeMessage(tag, writePackedVarint, arr);   },
+      writePackedSVarint:  function(tag, arr) { this.writeMessage(tag, writePackedSVarint, arr);  },
+      writePackedBoolean:  function(tag, arr) { this.writeMessage(tag, writePackedBoolean, arr);  },
+      writePackedFloat:    function(tag, arr) { this.writeMessage(tag, writePackedFloat, arr);    },
+      writePackedDouble:   function(tag, arr) { this.writeMessage(tag, writePackedDouble, arr);   },
+      writePackedFixed32:  function(tag, arr) { this.writeMessage(tag, writePackedFixed32, arr);  },
+      writePackedSFixed32: function(tag, arr) { this.writeMessage(tag, writePackedSFixed32, arr); },
+      writePackedFixed64:  function(tag, arr) { this.writeMessage(tag, writePackedFixed64, arr);  },
+      writePackedSFixed64: function(tag, arr) { this.writeMessage(tag, writePackedSFixed64, arr); },
 
-              combo
-                  .style('left', (rect.left + 5) + 'px')
-                  .style('width', (rect.width - 10) + 'px')
-                  .style('top', rect.height + rect.top + 'px');
-          }
+      writeBytesField: function(tag, buffer) {
+          this.writeTag(tag, Pbf.Bytes);
+          this.writeBytes(buffer);
+      },
+      writeFixed32Field: function(tag, val) {
+          this.writeTag(tag, Pbf.Fixed32);
+          this.writeFixed32(val);
+      },
+      writeSFixed32Field: function(tag, val) {
+          this.writeTag(tag, Pbf.Fixed32);
+          this.writeSFixed32(val);
+      },
+      writeFixed64Field: function(tag, val) {
+          this.writeTag(tag, Pbf.Fixed64);
+          this.writeFixed64(val);
+      },
+      writeSFixed64Field: function(tag, val) {
+          this.writeTag(tag, Pbf.Fixed64);
+          this.writeSFixed64(val);
+      },
+      writeVarintField: function(tag, val) {
+          this.writeTag(tag, Pbf.Varint);
+          this.writeVarint(val);
+      },
+      writeSVarintField: function(tag, val) {
+          this.writeTag(tag, Pbf.Varint);
+          this.writeSVarint(val);
+      },
+      writeStringField: function(tag, str) {
+          this.writeTag(tag, Pbf.Bytes);
+          this.writeString(str);
+      },
+      writeFloatField: function(tag, val) {
+          this.writeTag(tag, Pbf.Fixed32);
+          this.writeFloat(val);
+      },
+      writeDoubleField: function(tag, val) {
+          this.writeTag(tag, Pbf.Fixed64);
+          this.writeDouble(val);
+      },
+      writeBooleanField: function(tag, val) {
+          this.writeVarintField(tag, Boolean(val));
+      }
+  };
 
+  function readVarintRemainder(l, s, p) {
+      var buf = p.buf,
+          h, b;
 
-          // Dispatches an 'accept' event
-          // Then hides the combobox.
-          function accept(d) {
-              _cancelFetch = true;
-              var thiz = input.node();
+      b = buf[p.pos++]; h  = (b & 0x70) >> 4;  if (b < 0x80) return toNum(l, h, s);
+      b = buf[p.pos++]; h |= (b & 0x7f) << 3;  if (b < 0x80) return toNum(l, h, s);
+      b = buf[p.pos++]; h |= (b & 0x7f) << 10; if (b < 0x80) return toNum(l, h, s);
+      b = buf[p.pos++]; h |= (b & 0x7f) << 17; if (b < 0x80) return toNum(l, h, s);
+      b = buf[p.pos++]; h |= (b & 0x7f) << 24; if (b < 0x80) return toNum(l, h, s);
+      b = buf[p.pos++]; h |= (b & 0x01) << 31; if (b < 0x80) return toNum(l, h, s);
 
-              if (d) {   // user clicked on a suggestion
-                  utilGetSetValue(input, d.value);    // replace field contents
-                  utilTriggerEvent(input, 'change');
-              }
+      throw new Error('Expected varint not more than 10 bytes');
+  }
 
-              // clear (and keep) selection
-              var val = utilGetSetValue(input);
-              thiz.setSelectionRange(val.length, val.length);
+  function readPackedEnd(pbf) {
+      return pbf.type === Pbf.Bytes ?
+          pbf.readVarint() + pbf.pos : pbf.pos + 1;
+  }
 
-              d = _fetched[val];
-              dispatch$$1.call('accept', thiz, d, val);
-              hide();
-          }
+  function toNum(low, high, isSigned) {
+      if (isSigned) {
+          return high * 0x100000000 + (low >>> 0);
+      }
 
+      return ((high >>> 0) * 0x100000000) + (low >>> 0);
+  }
 
-          // Dispatches an 'cancel' event
-          // Then hides the combobox.
-          function cancel() {
-              _cancelFetch = true;
-              var thiz = input.node();
+  function writeBigVarint(val, pbf) {
+      var low, high;
 
-              // clear (and remove) selection, and replace field contents
-              var val = utilGetSetValue(input);
-              var start = input.property('selectionStart');
-              var end = input.property('selectionEnd');
-              val = val.slice(0, start) + val.slice(end);
-              utilGetSetValue(input, val);
-              thiz.setSelectionRange(val.length, val.length);
+      if (val >= 0) {
+          low  = (val % 0x100000000) | 0;
+          high = (val / 0x100000000) | 0;
+      } else {
+          low  = ~(-val % 0x100000000);
+          high = ~(-val / 0x100000000);
 
-              dispatch$$1.call('cancel', thiz);
-              hide();
+          if (low ^ 0xffffffff) {
+              low = (low + 1) | 0;
+          } else {
+              low = 0;
+              high = (high + 1) | 0;
           }
+      }
 
-      };
-
-
-      combobox.canAutocomplete = function(val) {
-          if (!arguments.length) return _canAutocomplete;
-          _canAutocomplete = val;
-          return combobox;
-      };
-
-      combobox.caseSensitive = function(val) {
-          if (!arguments.length) return _caseSensitive;
-          _caseSensitive = val;
-          return combobox;
-      };
+      if (val >= 0x10000000000000000 || val < -0x10000000000000000) {
+          throw new Error('Given varint doesn\'t fit into 10 bytes');
+      }
 
-      combobox.data = function(val) {
-          if (!arguments.length) return _data;
-          _data = val;
-          return combobox;
-      };
+      pbf.realloc(10);
 
-      combobox.fetcher = function(val) {
-          if (!arguments.length) return _fetcher;
-          _fetcher = val;
-          return combobox;
-      };
+      writeBigVarintLow(low, high, pbf);
+      writeBigVarintHigh(high, pbf);
+  }
 
-      combobox.minItems = function(val) {
-          if (!arguments.length) return _minItems;
-          _minItems = val;
-          return combobox;
-      };
+  function writeBigVarintLow(low, high, pbf) {
+      pbf.buf[pbf.pos++] = low & 0x7f | 0x80; low >>>= 7;
+      pbf.buf[pbf.pos++] = low & 0x7f | 0x80; low >>>= 7;
+      pbf.buf[pbf.pos++] = low & 0x7f | 0x80; low >>>= 7;
+      pbf.buf[pbf.pos++] = low & 0x7f | 0x80; low >>>= 7;
+      pbf.buf[pbf.pos]   = low & 0x7f;
+  }
 
+  function writeBigVarintHigh(high, pbf) {
+      var lsb = (high & 0x07) << 4;
 
-      return utilRebind(combobox, dispatch$$1, 'on');
+      pbf.buf[pbf.pos++] |= lsb         | ((high >>>= 3) ? 0x80 : 0); if (!high) return;
+      pbf.buf[pbf.pos++]  = high & 0x7f | ((high >>>= 7) ? 0x80 : 0); if (!high) return;
+      pbf.buf[pbf.pos++]  = high & 0x7f | ((high >>>= 7) ? 0x80 : 0); if (!high) return;
+      pbf.buf[pbf.pos++]  = high & 0x7f | ((high >>>= 7) ? 0x80 : 0); if (!high) return;
+      pbf.buf[pbf.pos++]  = high & 0x7f | ((high >>>= 7) ? 0x80 : 0); if (!high) return;
+      pbf.buf[pbf.pos++]  = high & 0x7f;
   }
 
+  function makeRoomForExtraLength(startPos, len, pbf) {
+      var extraLen =
+          len <= 0x3fff ? 1 :
+          len <= 0x1fffff ? 2 :
+          len <= 0xfffffff ? 3 : Math.ceil(Math.log(len) / (Math.LN2 * 7));
 
-  uiCombobox.off = function(input) {
-      input
-          .on('focus.combo-input', null)
-          .on('blur.combo-input', null)
-          .on('keydown.combo-input', null)
-          .on('keyup.combo-input', null)
-          .on('input.combo-input', null)
-          .on('mousedown.combo-input', null)
-          .on('mouseup.combo-input', null);
+      // if 1 byte isn't enough for encoding message length, shift the data to the right
+      pbf.realloc(extraLen);
+      for (var i = pbf.pos - 1; i >= startPos; i--) pbf.buf[i + extraLen] = pbf.buf[i];
+  }
 
+  function writePackedVarint(arr, pbf)   { for (var i = 0; i < arr.length; i++) pbf.writeVarint(arr[i]);   }
+  function writePackedSVarint(arr, pbf)  { for (var i = 0; i < arr.length; i++) pbf.writeSVarint(arr[i]);  }
+  function writePackedFloat(arr, pbf)    { for (var i = 0; i < arr.length; i++) pbf.writeFloat(arr[i]);    }
+  function writePackedDouble(arr, pbf)   { for (var i = 0; i < arr.length; i++) pbf.writeDouble(arr[i]);   }
+  function writePackedBoolean(arr, pbf)  { for (var i = 0; i < arr.length; i++) pbf.writeBoolean(arr[i]);  }
+  function writePackedFixed32(arr, pbf)  { for (var i = 0; i < arr.length; i++) pbf.writeFixed32(arr[i]);  }
+  function writePackedSFixed32(arr, pbf) { for (var i = 0; i < arr.length; i++) pbf.writeSFixed32(arr[i]); }
+  function writePackedFixed64(arr, pbf)  { for (var i = 0; i < arr.length; i++) pbf.writeFixed64(arr[i]);  }
+  function writePackedSFixed64(arr, pbf) { for (var i = 0; i < arr.length; i++) pbf.writeSFixed64(arr[i]); }
 
-      select('body')
-          .on('scroll.combo-scroll', null);
-  };
+  // Buffer code below from https://github.com/feross/buffer, MIT-licensed
 
-  /**
-   * This method is like `_.union` except that it accepts `iteratee` which is
-   * invoked for each element of each `arrays` to generate the criterion by
-   * which uniqueness is computed. Result values are chosen from the first
-   * array in which the value occurs. The iteratee is invoked with one argument:
-   * (value).
-   *
-   * @static
-   * @memberOf _
-   * @since 4.0.0
-   * @category Array
-   * @param {...Array} [arrays] The arrays to inspect.
-   * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
-   * @returns {Array} Returns the new array of combined values.
-   * @example
-   *
-   * _.unionBy([2.1], [1.2, 2.3], Math.floor);
-   * // => [2.1, 1.2]
-   *
-   * // The `_.property` iteratee shorthand.
-   * _.unionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');
-   * // => [{ 'x': 1 }, { 'x': 2 }]
-   */
-  var unionBy = baseRest(function(arrays) {
-    var iteratee = last(arrays);
-    if (isArrayLikeObject(iteratee)) {
-      iteratee = undefined;
-    }
-    return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), baseIteratee(iteratee, 2));
-  });
+  function readUInt32(buf, pos) {
+      return ((buf[pos]) |
+          (buf[pos + 1] << 8) |
+          (buf[pos + 2] << 16)) +
+          (buf[pos + 3] * 0x1000000);
+  }
 
-  var JXON = new (function () {
-    var
-      sValueProp = 'keyValue', sAttributesProp = 'keyAttributes', sAttrPref = '@', /* you can customize these values */
-      aCache = [], rIsNull = /^\s*$/, rIsBool = /^(?:true|false)$/i;
+  function writeInt32(buf, val, pos) {
+      buf[pos] = val;
+      buf[pos + 1] = (val >>> 8);
+      buf[pos + 2] = (val >>> 16);
+      buf[pos + 3] = (val >>> 24);
+  }
 
-    function parseText (sValue) {
-      if (rIsNull.test(sValue)) { return null; }
-      if (rIsBool.test(sValue)) { return sValue.toLowerCase() === 'true'; }
-      if (isFinite(sValue)) { return parseFloat(sValue); }
-      if (isFinite(Date.parse(sValue))) { return new Date(sValue); }
-      return sValue;
-    }
+  function readInt32(buf, pos) {
+      return ((buf[pos]) |
+          (buf[pos + 1] << 8) |
+          (buf[pos + 2] << 16)) +
+          (buf[pos + 3] << 24);
+  }
 
-    function EmptyTree () { }
-    EmptyTree.prototype.toString = function () { return 'null'; };
-    EmptyTree.prototype.valueOf = function () { return null; };
+  function readUtf8(buf, pos, end) {
+      var str = '';
+      var i = pos;
 
-    function objectify (vValue) {
-      return vValue === null ? new EmptyTree() : vValue instanceof Object ? vValue : new vValue.constructor(vValue);
-    }
+      while (i < end) {
+          var b0 = buf[i];
+          var c = null; // codepoint
+          var bytesPerSequence =
+              b0 > 0xEF ? 4 :
+              b0 > 0xDF ? 3 :
+              b0 > 0xBF ? 2 : 1;
 
-    function createObjTree (oParentNode, nVerb, bFreeze, bNesteAttr) {
-      var
-        nLevelStart = aCache.length, bChildren = oParentNode.hasChildNodes(),
-        bAttributes = oParentNode.hasAttributes(), bHighVerb = Boolean(nVerb & 2);
+          if (i + bytesPerSequence > end) break;
 
-      var
-        sProp, vContent, nLength = 0, sCollectedTxt = '',
-        vResult = bHighVerb ? {} : /* put here the default value for empty nodes: */ true;
+          var b1, b2, b3;
 
-      if (bChildren) {
-        for (var oNode, nItem = 0; nItem < oParentNode.childNodes.length; nItem++) {
-          oNode = oParentNode.childNodes.item(nItem);
-          if (oNode.nodeType === 4) { sCollectedTxt += oNode.nodeValue; } /* nodeType is 'CDATASection' (4) */
-          else if (oNode.nodeType === 3) { sCollectedTxt += oNode.nodeValue.trim(); } /* nodeType is 'Text' (3) */
-          else if (oNode.nodeType === 1 && !oNode.prefix) { aCache.push(oNode); } /* nodeType is 'Element' (1) */
-        }
-      }
+          if (bytesPerSequence === 1) {
+              if (b0 < 0x80) {
+                  c = b0;
+              }
+          } else if (bytesPerSequence === 2) {
+              b1 = buf[i + 1];
+              if ((b1 & 0xC0) === 0x80) {
+                  c = (b0 & 0x1F) << 0x6 | (b1 & 0x3F);
+                  if (c <= 0x7F) {
+                      c = null;
+                  }
+              }
+          } else if (bytesPerSequence === 3) {
+              b1 = buf[i + 1];
+              b2 = buf[i + 2];
+              if ((b1 & 0xC0) === 0x80 && (b2 & 0xC0) === 0x80) {
+                  c = (b0 & 0xF) << 0xC | (b1 & 0x3F) << 0x6 | (b2 & 0x3F);
+                  if (c <= 0x7FF || (c >= 0xD800 && c <= 0xDFFF)) {
+                      c = null;
+                  }
+              }
+          } else if (bytesPerSequence === 4) {
+              b1 = buf[i + 1];
+              b2 = buf[i + 2];
+              b3 = buf[i + 3];
+              if ((b1 & 0xC0) === 0x80 && (b2 & 0xC0) === 0x80 && (b3 & 0xC0) === 0x80) {
+                  c = (b0 & 0xF) << 0x12 | (b1 & 0x3F) << 0xC | (b2 & 0x3F) << 0x6 | (b3 & 0x3F);
+                  if (c <= 0xFFFF || c >= 0x110000) {
+                      c = null;
+                  }
+              }
+          }
 
-      var nLevelEnd = aCache.length, vBuiltVal = parseText(sCollectedTxt);
+          if (c === null) {
+              c = 0xFFFD;
+              bytesPerSequence = 1;
 
-      if (!bHighVerb && (bChildren || bAttributes)) { vResult = nVerb === 0 ? objectify(vBuiltVal) : {}; }
+          } else if (c > 0xFFFF) {
+              c -= 0x10000;
+              str += String.fromCharCode(c >>> 10 & 0x3FF | 0xD800);
+              c = 0xDC00 | c & 0x3FF;
+          }
 
-      for (var nElId = nLevelStart; nElId < nLevelEnd; nElId++) {
-        sProp = aCache[nElId].nodeName.toLowerCase();
-        vContent = createObjTree(aCache[nElId], nVerb, bFreeze, bNesteAttr);
-        if (vResult.hasOwnProperty(sProp)) {
-          if (vResult[sProp].constructor !== Array) { vResult[sProp] = [vResult[sProp]]; }
-          vResult[sProp].push(vContent);
-        } else {
-          vResult[sProp] = vContent;
-          nLength++;
-        }
+          str += String.fromCharCode(c);
+          i += bytesPerSequence;
       }
 
-      if (bAttributes) {
-        var
-          nAttrLen = oParentNode.attributes.length,
-          sAPrefix = bNesteAttr ? '' : sAttrPref, oAttrParent = bNesteAttr ? {} : vResult;
+      return str;
+  }
 
-        for (var oAttrib, nAttrib = 0; nAttrib < nAttrLen; nLength++, nAttrib++) {
-          oAttrib = oParentNode.attributes.item(nAttrib);
-          oAttrParent[sAPrefix + oAttrib.name.toLowerCase()] = parseText(oAttrib.value.trim());
-        }
+  function writeUtf8(buf, str, pos) {
+      for (var i = 0, c, lead; i < str.length; i++) {
+          c = str.charCodeAt(i); // code point
 
-        if (bNesteAttr) {
-          if (bFreeze) { Object.freeze(oAttrParent); }
-          vResult[sAttributesProp] = oAttrParent;
-          nLength -= nAttrLen - 1;
-        }
-      }
+          if (c > 0xD7FF && c < 0xE000) {
+              if (lead) {
+                  if (c < 0xDC00) {
+                      buf[pos++] = 0xEF;
+                      buf[pos++] = 0xBF;
+                      buf[pos++] = 0xBD;
+                      lead = c;
+                      continue;
+                  } else {
+                      c = lead - 0xD800 << 10 | c - 0xDC00 | 0x10000;
+                      lead = null;
+                  }
+              } else {
+                  if (c > 0xDBFF || (i + 1 === str.length)) {
+                      buf[pos++] = 0xEF;
+                      buf[pos++] = 0xBF;
+                      buf[pos++] = 0xBD;
+                  } else {
+                      lead = c;
+                  }
+                  continue;
+              }
+          } else if (lead) {
+              buf[pos++] = 0xEF;
+              buf[pos++] = 0xBF;
+              buf[pos++] = 0xBD;
+              lead = null;
+          }
 
-      if (nVerb === 3 || (nVerb === 2 || nVerb === 1 && nLength > 0) && sCollectedTxt) {
-        vResult[sValueProp] = vBuiltVal;
-      } else if (!bHighVerb && nLength === 0 && sCollectedTxt) {
-        vResult = vBuiltVal;
+          if (c < 0x80) {
+              buf[pos++] = c;
+          } else {
+              if (c < 0x800) {
+                  buf[pos++] = c >> 0x6 | 0xC0;
+              } else {
+                  if (c < 0x10000) {
+                      buf[pos++] = c >> 0xC | 0xE0;
+                  } else {
+                      buf[pos++] = c >> 0x12 | 0xF0;
+                      buf[pos++] = c >> 0xC & 0x3F | 0x80;
+                  }
+                  buf[pos++] = c >> 0x6 & 0x3F | 0x80;
+              }
+              buf[pos++] = c & 0x3F | 0x80;
+          }
       }
+      return pos;
+  }
 
-      if (bFreeze && (bHighVerb || nLength > 0)) { Object.freeze(vResult); }
+  var pointGeometry = Point;
 
-      aCache.length = nLevelStart;
+  /**
+   * A standalone point geometry with useful accessor, comparison, and
+   * modification methods.
+   *
+   * @class Point
+   * @param {Number} x the x-coordinate. this could be longitude or screen
+   * pixels, or any other sort of unit.
+   * @param {Number} y the y-coordinate. this could be latitude or screen
+   * pixels, or any other sort of unit.
+   * @example
+   * var point = new Point(-77, 38);
+   */
+  function Point(x, y) {
+      this.x = x;
+      this.y = y;
+  }
 
-      return vResult;
-    }
+  Point.prototype = {
 
-    function loadObjTree (oXMLDoc, oParentEl, oParentObj) {
-      var vValue, oChild;
+      /**
+       * Clone this point, returning a new point that can be modified
+       * without affecting the old one.
+       * @return {Point} the clone
+       */
+      clone: function() { return new Point(this.x, this.y); },
 
-      if (oParentObj instanceof String || oParentObj instanceof Number || oParentObj instanceof Boolean) {
-        oParentEl.appendChild(oXMLDoc.createTextNode(oParentObj.toString())); /* verbosity level is 0 */
-      } else if (oParentObj.constructor === Date) {
-        oParentEl.appendChild(oXMLDoc.createTextNode(oParentObj.toGMTString()));    
-      }
+      /**
+       * Add this point's x & y coordinates to another point,
+       * yielding a new point.
+       * @param {Point} p the other point
+       * @return {Point} output point
+       */
+      add:     function(p) { return this.clone()._add(p); },
 
-      for (var sName in oParentObj) {
-        vValue = oParentObj[sName];
-        if (isFinite(sName) || vValue instanceof Function) { continue; } /* verbosity level is 0 */
-        if (sName === sValueProp) {
-          if (vValue !== null && vValue !== true) { oParentEl.appendChild(oXMLDoc.createTextNode(vValue.constructor === Date ? vValue.toGMTString() : String(vValue))); }
-        } else if (sName === sAttributesProp) { /* verbosity level is 3 */
-          for (var sAttrib in vValue) { oParentEl.setAttribute(sAttrib, vValue[sAttrib]); }
-        } else if (sName.charAt(0) === sAttrPref) {
-          oParentEl.setAttribute(sName.slice(1), vValue);
-        } else if (vValue.constructor === Array) {
-          for (var nItem = 0; nItem < vValue.length; nItem++) {
-            oChild = oXMLDoc.createElement(sName);
-            loadObjTree(oXMLDoc, oChild, vValue[nItem]);
-            oParentEl.appendChild(oChild);
-          }
-        } else {
-          oChild = oXMLDoc.createElement(sName);
-          if (vValue instanceof Object) {
-            loadObjTree(oXMLDoc, oChild, vValue);
-          } else if (vValue !== null && vValue !== true) {
-            oChild.appendChild(oXMLDoc.createTextNode(vValue.toString()));
-          }
-          oParentEl.appendChild(oChild);
-       }
-     }
-    }
+      /**
+       * Subtract this point's x & y coordinates to from point,
+       * yielding a new point.
+       * @param {Point} p the other point
+       * @return {Point} output point
+       */
+      sub:     function(p) { return this.clone()._sub(p); },
 
-    this.build = function (oXMLParent, nVerbosity /* optional */, bFreeze /* optional */, bNesteAttributes /* optional */) {
-      var _nVerb = arguments.length > 1 && typeof nVerbosity === 'number' ? nVerbosity & 3 : /* put here the default verbosity level: */ 1;
-      return createObjTree(oXMLParent, _nVerb, bFreeze || false, arguments.length > 3 ? bNesteAttributes : _nVerb === 3);    
-    };
+      /**
+       * Multiply this point's x & y coordinates by point,
+       * yielding a new point.
+       * @param {Point} p the other point
+       * @return {Point} output point
+       */
+      multByPoint:    function(p) { return this.clone()._multByPoint(p); },
 
-    this.unbuild = function (oObjTree) {    
-      var oNewDoc = document.implementation.createDocument('', '', null);
-      loadObjTree(oNewDoc, oNewDoc, oObjTree);
-      return oNewDoc;
-    };
+      /**
+       * Divide this point's x & y coordinates by point,
+       * yielding a new point.
+       * @param {Point} p the other point
+       * @return {Point} output point
+       */
+      divByPoint:     function(p) { return this.clone()._divByPoint(p); },
 
-    this.stringify = function (oObjTree) {
-      return (new XMLSerializer()).serializeToString(JXON.unbuild(oObjTree));
-    };
-  })();
+      /**
+       * Multiply this point's x & y coordinates by a factor,
+       * yielding a new point.
+       * @param {Point} k factor
+       * @return {Point} output point
+       */
+      mult:    function(k) { return this.clone()._mult(k); },
 
-  // var myObject = JXON.build(doc);
-  // we got our javascript object! try: alert(JSON.stringify(myObject));
+      /**
+       * Divide this point's x & y coordinates by a factor,
+       * yielding a new point.
+       * @param {Point} k factor
+       * @return {Point} output point
+       */
+      div:     function(k) { return this.clone()._div(k); },
 
-  // var newDoc = JXON.unbuild(myObject);
-  // we got our Document instance! try: alert((new XMLSerializer()).serializeToString(newDoc));
+      /**
+       * Rotate this point around the 0, 0 origin by an angle a,
+       * given in radians
+       * @param {Number} a angle to rotate around, in radians
+       * @return {Point} output point
+       */
+      rotate:  function(a) { return this.clone()._rotate(a); },
 
-  function uiCommitChanges(context) {
-      var detected = utilDetect();
-      var _entityID;
+      /**
+       * Rotate this point around p point by an angle a,
+       * given in radians
+       * @param {Number} a angle to rotate around, in radians
+       * @param {Point} p Point to rotate around
+       * @return {Point} output point
+       */
+      rotateAround:  function(a,p) { return this.clone()._rotateAround(a,p); },
+
+      /**
+       * Multiply this point by a 4x1 transformation matrix
+       * @param {Array<Number>} m transformation matrix
+       * @return {Point} output point
+       */
+      matMult: function(m) { return this.clone()._matMult(m); },
 
+      /**
+       * Calculate this point but as a unit vector from 0, 0, meaning
+       * that the distance from the resulting point to the 0, 0
+       * coordinate will be equal to 1 and the angle from the resulting
+       * point to the 0, 0 coordinate will be the same as before.
+       * @return {Point} unit vector point
+       */
+      unit:    function() { return this.clone()._unit(); },
 
-      function commitChanges(selection$$1) {
-          var history = context.history();
-          var summary = history.difference().summary();
+      /**
+       * Compute a perpendicular point, where the new y coordinate
+       * is the old x coordinate and the new x coordinate is the old y
+       * coordinate multiplied by -1
+       * @return {Point} perpendicular point
+       */
+      perp:    function() { return this.clone()._perp(); },
 
-          var container = selection$$1.selectAll('.modal-section.commit-section')
-              .data([0]);
+      /**
+       * Return a version of this point with the x & y coordinates
+       * rounded to integers.
+       * @return {Point} rounded point
+       */
+      round:   function() { return this.clone()._round(); },
 
-          var containerEnter = container.enter()
-              .append('div')
-              .attr('class', 'commit-section modal-section fillL2');
+      /**
+       * Return the magitude of this point: this is the Euclidean
+       * distance from the 0, 0 coordinate to this point's x and y
+       * coordinates.
+       * @return {Number} magnitude
+       */
+      mag: function() {
+          return Math.sqrt(this.x * this.x + this.y * this.y);
+      },
 
-          containerEnter
-              .append('h3')
-              .text(t('commit.changes', { count: summary.length }));
+      /**
+       * Judge whether this point is equal to another point, returning
+       * true or false.
+       * @param {Point} other the other point
+       * @return {boolean} whether the points are equal
+       */
+      equals: function(other) {
+          return this.x === other.x &&
+                 this.y === other.y;
+      },
 
-          containerEnter
-              .append('ul')
-              .attr('class', 'changeset-list');
+      /**
+       * Calculate the distance from this point to another point
+       * @param {Point} p the other point
+       * @return {Number} distance
+       */
+      dist: function(p) {
+          return Math.sqrt(this.distSqr(p));
+      },
 
-          container = containerEnter
-              .merge(container);
+      /**
+       * Calculate the distance from this point to another point,
+       * without the square root step. Useful if you're comparing
+       * relative distances.
+       * @param {Point} p the other point
+       * @return {Number} distance
+       */
+      distSqr: function(p) {
+          var dx = p.x - this.x,
+              dy = p.y - this.y;
+          return dx * dx + dy * dy;
+      },
 
+      /**
+       * Get the angle from the 0, 0 coordinate to this point, in radians
+       * coordinates.
+       * @return {Number} angle
+       */
+      angle: function() {
+          return Math.atan2(this.y, this.x);
+      },
 
-          var items = container.select('ul').selectAll('li')
-              .data(summary);
+      /**
+       * Get the angle from this point to another point, in radians
+       * @param {Point} b the other point
+       * @return {Number} angle
+       */
+      angleTo: function(b) {
+          return Math.atan2(this.y - b.y, this.x - b.x);
+      },
 
-          var itemsEnter = items.enter()
-              .append('li')
-              .attr('class', 'change-item');
+      /**
+       * Get the angle between this point and another point, in radians
+       * @param {Point} b the other point
+       * @return {Number} angle
+       */
+      angleWith: function(b) {
+          return this.angleWithSep(b.x, b.y);
+      },
 
-          itemsEnter
-              .each(function(d) {
-                  select(this)
-                      .call(svgIcon('#iD-icon-' + d.entity.geometry(d.graph), 'pre-text ' + d.changeType));
-              });
+      /*
+       * Find the angle of the two vectors, solving the formula for
+       * the cross product a x b = |a||b|sin(θ) for θ.
+       * @param {Number} x the x-coordinate
+       * @param {Number} y the y-coordinate
+       * @return {Number} the angle in radians
+       */
+      angleWithSep: function(x, y) {
+          return Math.atan2(
+              this.x * y - this.y * x,
+              this.x * x + this.y * y);
+      },
 
-          itemsEnter
-              .append('span')
-              .attr('class', 'change-type')
-              .text(function(d) { return t('commit.' + d.changeType) + ' '; });
+      _matMult: function(m) {
+          var x = m[0] * this.x + m[1] * this.y,
+              y = m[2] * this.x + m[3] * this.y;
+          this.x = x;
+          this.y = y;
+          return this;
+      },
 
-          itemsEnter
-              .append('strong')
-              .attr('class', 'entity-type')
-              .text(function(d) {
-                  var matched = context.presets().match(d.entity, d.graph);
-                  return (matched && matched.name()) || utilDisplayType(d.entity.id);
-              });
+      _add: function(p) {
+          this.x += p.x;
+          this.y += p.y;
+          return this;
+      },
 
-          itemsEnter
-              .append('span')
-              .attr('class', 'entity-name')
-              .text(function(d) {
-                  var name = utilDisplayName(d.entity) || '',
-                      string = '';
-                  if (name !== '') {
-                      string += ':';
-                  }
-                  return string += ' ' + name;
-              });
+      _sub: function(p) {
+          this.x -= p.x;
+          this.y -= p.y;
+          return this;
+      },
 
-          itemsEnter
-              .style('opacity', 0)
-              .transition()
-              .style('opacity', 1);
+      _mult: function(k) {
+          this.x *= k;
+          this.y *= k;
+          return this;
+      },
 
-          items = itemsEnter
-              .merge(items);
+      _div: function(k) {
+          this.x /= k;
+          this.y /= k;
+          return this;
+      },
 
-          items
-              .on('mouseover', mouseover)
-              .on('mouseout', mouseout)
-              .on('click', click);
+      _multByPoint: function(p) {
+          this.x *= p.x;
+          this.y *= p.y;
+          return this;
+      },
 
+      _divByPoint: function(p) {
+          this.x /= p.x;
+          this.y /= p.y;
+          return this;
+      },
 
-          // Download changeset link
-          var changeset = new osmChangeset().update({ id: undefined });
-          var changes = history.changes(actionDiscardTags(history.difference()));
+      _unit: function() {
+          this._div(this.mag());
+          return this;
+      },
 
-          delete changeset.id;  // Export without chnageset_id
+      _perp: function() {
+          var y = this.y;
+          this.y = this.x;
+          this.x = -y;
+          return this;
+      },
 
-          var data = JXON.stringify(changeset.osmChangeJXON(changes));
-          var blob = new Blob([data], {type: 'text/xml;charset=utf-8;'});
-          var fileName = 'changes.osc';
+      _rotate: function(angle) {
+          var cos = Math.cos(angle),
+              sin = Math.sin(angle),
+              x = cos * this.x - sin * this.y,
+              y = sin * this.x + cos * this.y;
+          this.x = x;
+          this.y = y;
+          return this;
+      },
 
-          var linkEnter = container.selectAll('.download-changes')
-              .data([0])
-              .enter()
-              .append('a')
-              .attr('class', 'download-changes');
+      _rotateAround: function(angle, p) {
+          var cos = Math.cos(angle),
+              sin = Math.sin(angle),
+              x = p.x + cos * (this.x - p.x) - sin * (this.y - p.y),
+              y = p.y + sin * (this.x - p.x) + cos * (this.y - p.y);
+          this.x = x;
+          this.y = y;
+          return this;
+      },
 
-          if (detected.download) {      // All except IE11 and Edge
-              linkEnter                 // download the data as a file
-                  .attr('href', window.URL.createObjectURL(blob))
-                  .attr('download', fileName);
+      _round: function() {
+          this.x = Math.round(this.x);
+          this.y = Math.round(this.y);
+          return this;
+      }
+  };
 
-          } else {                      // IE11 and Edge
-              linkEnter                 // open data uri in a new tab
-                  .attr('target', '_blank')
-                  .on('click.download', function() {
-                      navigator.msSaveBlob(blob, fileName);
-                  });
-          }
+  /**
+   * Construct a point from an array if necessary, otherwise if the input
+   * is already a Point, or an unknown type, return it unchanged
+   * @param {Array<Number>|Point|*} a any kind of input value
+   * @return {Point} constructed point, or passed-through value.
+   * @example
+   * // this
+   * var point = Point.convert([0, 1]);
+   * // is equivalent to
+   * var point = new Point(0, 1);
+   */
+  Point.convert = function (a) {
+      if (a instanceof Point) {
+          return a;
+      }
+      if (Array.isArray(a)) {
+          return new Point(a[0], a[1]);
+      }
+      return a;
+  };
 
-          linkEnter
-              .call(svgIcon('#iD-icon-load', 'inline'))
-              .append('span')
-              .text(t('commit.download_changes'));
+  var vectortilefeature = VectorTileFeature;
 
+  function VectorTileFeature(pbf, end, extent, keys, values) {
+      // Public
+      this.properties = {};
+      this.extent = extent;
+      this.type = 0;
 
-          function mouseover(d) {
-              if (d.entity) {
-                  context.surface().selectAll(
-                      utilEntityOrMemberSelector([d.entity.id], context.graph())
-                  ).classed('hover', true);
-              }
-          }
+      // Private
+      this._pbf = pbf;
+      this._geometry = -1;
+      this._keys = keys;
+      this._values = values;
 
+      pbf.readFields(readFeature, this, end);
+  }
 
-          function mouseout() {
-              context.surface().selectAll('.hover')
-                  .classed('hover', false);
-          }
+  function readFeature(tag, feature, pbf) {
+      if (tag == 1) feature.id = pbf.readVarint();
+      else if (tag == 2) readTag(pbf, feature);
+      else if (tag == 3) feature.type = pbf.readVarint();
+      else if (tag == 4) feature._geometry = pbf.pos;
+  }
 
+  function readTag(pbf, feature) {
+      var end = pbf.readVarint() + pbf.pos;
 
-          function click(change) {
-              if (change.changeType === 'deleted') {
-                  _entityID = null;
-              } else {
-                  var entity = change.entity;
-                  _entityID = change.entity.id;
-                  context.map().zoomToEase(entity);
-                  context.surface().selectAll(utilEntityOrMemberSelector([_entityID], context.graph()))
-                      .classed('hover', true);
-              }
-          }
+      while (pbf.pos < end) {
+          var key = feature._keys[pbf.readVarint()],
+              value = feature._values[pbf.readVarint()];
+          feature.properties[key] = value;
       }
+  }
 
+  VectorTileFeature.types = ['Unknown', 'Point', 'LineString', 'Polygon'];
 
-      commitChanges.entityID = function(_) {
-          if (!arguments.length) return _entityID;
-          _entityID = _;
-          return commitChanges;
-      };
-
+  VectorTileFeature.prototype.loadGeometry = function() {
+      var pbf = this._pbf;
+      pbf.pos = this._geometry;
 
-      return commitChanges;
-  }
+      var end = pbf.readVarint() + pbf.pos,
+          cmd = 1,
+          length = 0,
+          x = 0,
+          y = 0,
+          lines = [],
+          line;
 
-  function uiCommitWarnings(context) {
+      while (pbf.pos < end) {
+          if (length <= 0) {
+              var cmdLen = pbf.readVarint();
+              cmd = cmdLen & 0x7;
+              length = cmdLen >> 3;
+          }
 
-      function commitWarnings(selection) {
+          length--;
 
-          var changes = context.history().changes();
-          var validations = context.history().validate(changes);
+          if (cmd === 1 || cmd === 2) {
+              x += pbf.readSVarint();
+              y += pbf.readSVarint();
 
-          validations = reduce(validations, function(validations, val) {
-              var severity = val.severity;
-              if (validations.hasOwnProperty(severity)) {
-                  validations[severity].push(val);
-              } else {
-                  validations[severity] = [val];
+              if (cmd === 1) { // moveTo
+                  if (line) lines.push(line);
+                  line = [];
               }
-              return validations;
-          }, {});
-
-          forEach(validations, function(instances, type) {
-              instances = uniqBy(instances, function(val) {
-                  return val.entity || (val.id + '_' + val.message.replace(/\s+/g,''));
-              });
 
-              var section = type + '-section';
-              var instanceItem = type + '-item';
+              line.push(new pointGeometry(x, y));
 
-              var container = selection.selectAll('.' + section)
-                  .data(instances.length ? [0] : []);
+          } else if (cmd === 7) {
 
-              container.exit()
-                  .remove();
+              // Workaround for https://github.com/mapbox/mapnik-vector-tile/issues/90
+              if (line) {
+                  line.push(line[0].clone()); // closePolygon
+              }
 
-              var containerEnter = container.enter()
-                  .append('div')
-                  .attr('class', 'modal-section ' + section + ' fillL2');
+          } else {
+              throw new Error('unknown command ' + cmd);
+          }
+      }
 
-              containerEnter
-                  .append('h3')
-                  .text(type === 'warning' ? t('commit.warnings') : t('commit.errors'));
+      if (line) lines.push(line);
 
-              containerEnter
-                  .append('ul')
-                  .attr('class', 'changeset-list');
+      return lines;
+  };
 
-              container = containerEnter
-                  .merge(container);
+  VectorTileFeature.prototype.bbox = function() {
+      var pbf = this._pbf;
+      pbf.pos = this._geometry;
 
+      var end = pbf.readVarint() + pbf.pos,
+          cmd = 1,
+          length = 0,
+          x = 0,
+          y = 0,
+          x1 = Infinity,
+          x2 = -Infinity,
+          y1 = Infinity,
+          y2 = -Infinity;
 
-              var items = container.select('ul').selectAll('li')
-                  .data(instances);
+      while (pbf.pos < end) {
+          if (length <= 0) {
+              var cmdLen = pbf.readVarint();
+              cmd = cmdLen & 0x7;
+              length = cmdLen >> 3;
+          }
 
-              items.exit()
-                  .remove();
+          length--;
 
-              var itemsEnter = items.enter()
-                  .append('li')
-                  .attr('class', instanceItem);
+          if (cmd === 1 || cmd === 2) {
+              x += pbf.readSVarint();
+              y += pbf.readSVarint();
+              if (x < x1) x1 = x;
+              if (x > x2) x2 = x;
+              if (y < y1) y1 = y;
+              if (y > y2) y2 = y;
 
-              itemsEnter
-                  .call(svgIcon('#iD-icon-alert', 'pre-text'));
+          } else if (cmd !== 7) {
+              throw new Error('unknown command ' + cmd);
+          }
+      }
 
-              itemsEnter
-                  .append('strong')
-                  .text(function(d) { return d.message; });
+      return [x1, y1, x2, y2];
+  };
 
-              itemsEnter.filter(function(d) { return d.tooltip; })
-                  .call(tooltip()
-                      .title(function(d) { return d.tooltip; })
-                      .placement('top')
-                  );
+  VectorTileFeature.prototype.toGeoJSON = function(x, y, z) {
+      var size = this.extent * Math.pow(2, z),
+          x0 = this.extent * x,
+          y0 = this.extent * y,
+          coords = this.loadGeometry(),
+          type = VectorTileFeature.types[this.type],
+          i, j;
 
-              items = itemsEnter
-                  .merge(items);
+      function project(line) {
+          for (var j = 0; j < line.length; j++) {
+              var p = line[j], y2 = 180 - (p.y + y0) * 360 / size;
+              line[j] = [
+                  (p.x + x0) * 360 / size - 180,
+                  360 / Math.PI * Math.atan(Math.exp(y2 * Math.PI / 180)) - 90
+              ];
+          }
+      }
 
-              items
-                  .on('mouseover', mouseover)
-                  .on('mouseout', mouseout)
-                  .on('click', warningClick);
+      switch (this.type) {
+      case 1:
+          var points = [];
+          for (i = 0; i < coords.length; i++) {
+              points[i] = coords[i][0];
+          }
+          coords = points;
+          project(coords);
+          break;
 
+      case 2:
+          for (i = 0; i < coords.length; i++) {
+              project(coords[i]);
+          }
+          break;
 
-              function mouseover(d) {
-                  if (d.entity) {
-                      context.surface().selectAll(
-                          utilEntityOrMemberSelector([d.entity.id], context.graph())
-                      ).classed('hover', true);
-                  }
+      case 3:
+          coords = classifyRings(coords);
+          for (i = 0; i < coords.length; i++) {
+              for (j = 0; j < coords[i].length; j++) {
+                  project(coords[i][j]);
               }
+          }
+          break;
+      }
 
+      if (coords.length === 1) {
+          coords = coords[0];
+      } else {
+          type = 'Multi' + type;
+      }
 
-              function mouseout() {
-                  context.surface().selectAll('.hover')
-                      .classed('hover', false);
-              }
-
+      var result = {
+          type: "Feature",
+          geometry: {
+              type: type,
+              coordinates: coords
+          },
+          properties: this.properties
+      };
 
-              function warningClick(d) {
-                  if (d.entity) {
-                      context.map().zoomTo(d.entity);
-                      context.enter(modeSelect(context, [d.entity.id]));
-                  }
-              }
-          });
+      if ('id' in this) {
+          result.id = this.id;
       }
 
+      return result;
+  };
+
+  // classifies an array of rings into polygons with outer rings and holes
 
-      return commitWarnings;
-  }
+  function classifyRings(rings) {
+      var len = rings.length;
 
-  function uiRawTagEditor$$1(context) {
-      var taginfo = services.taginfo;
-      var dispatch$$1 = dispatch('change');
-      var _readOnlyTags = [];
-      var _showBlank = false;
-      var _updatePreference = true;
-      var _expanded = false;
-      var _newRow;
-      var _state;
-      var _preset;
-      var _tags;
-      var _entityID;
+      if (len <= 1) return [rings];
 
+      var polygons = [],
+          polygon,
+          ccw;
 
-      function rawTagEditor(selection$$1) {
-          var count = Object.keys(_tags).filter(function(d) { return d; }).length;
+      for (var i = 0; i < len; i++) {
+          var area = signedArea(rings[i]);
+          if (area === 0) continue;
 
-          var disclosure = uiDisclosure(context, 'raw_tag_editor', false)
-              .title(t('inspector.all_tags') + ' (' + count + ')')
-              .on('toggled', toggled)
-              .updatePreference(_updatePreference)
-              .content(content);
+          if (ccw === undefined) ccw = area < 0;
 
-          // Sometimes we want to force the raw_tag_editor to be opened/closed..
-          // When undefined, uiDisclosure will use the user's stored preference.
-          if (_expanded !== undefined) {
-              disclosure.expanded(_expanded);
+          if (ccw === area < 0) {
+              if (polygon) polygons.push(polygon);
+              polygon = [rings[i]];
+
+          } else {
+              polygon.push(rings[i]);
           }
+      }
+      if (polygon) polygons.push(polygon);
 
-          selection$$1.call(disclosure);
+      return polygons;
+  }
 
-          function toggled(expanded) {
-              _expanded = expanded;
-              if (expanded) {
-                  selection$$1.node().parentNode.scrollTop += 200;
-              }
-          }
+  function signedArea(ring) {
+      var sum = 0;
+      for (var i = 0, len = ring.length, j = len - 1, p1, p2; i < len; j = i++) {
+          p1 = ring[i];
+          p2 = ring[j];
+          sum += (p2.x - p1.x) * (p1.y + p2.y);
       }
+      return sum;
+  }
 
+  var vectortilelayer = VectorTileLayer;
 
-      function content(wrap) {
-          var entries = map$3(_tags, function(v, k) {
-              return { key: k, value: v };
-          });
+  function VectorTileLayer(pbf, end) {
+      // Public
+      this.version = 1;
+      this.name = null;
+      this.extent = 4096;
+      this.length = 0;
 
-          if (!entries.length || _showBlank) {
-              _showBlank = false;
-              entries.push({key: '', value: ''});
-              _newRow = '';
-          }
+      // Private
+      this._pbf = pbf;
+      this._keys = [];
+      this._values = [];
+      this._features = [];
 
-          // List of tags
-          var list = wrap.selectAll('.tag-list')
-              .data([0]);
+      pbf.readFields(readLayer, this, end);
 
-          list = list.enter()
-              .append('ul')
-              .attr('class', 'tag-list')
-              .merge(list);
+      this.length = this._features.length;
+  }
 
+  function readLayer(tag, layer, pbf) {
+      if (tag === 15) layer.version = pbf.readVarint();
+      else if (tag === 1) layer.name = pbf.readString();
+      else if (tag === 5) layer.extent = pbf.readVarint();
+      else if (tag === 2) layer._features.push(pbf.pos);
+      else if (tag === 3) layer._keys.push(pbf.readString());
+      else if (tag === 4) layer._values.push(readValueMessage(pbf));
+  }
 
-          // Container for the Add button
-          var addRowEnter = wrap.selectAll('.add-row')
-              .data([0])
-              .enter()
-              .append('div')
-              .attr('class', 'add-row');
+  function readValueMessage(pbf) {
+      var value = null,
+          end = pbf.readVarint() + pbf.pos;
 
-          addRowEnter
-              .append('button')
-              .attr('class', 'add-tag')
-              .call(svgIcon('#iD-icon-plus', 'light'))
-              .on('click', addTag);
+      while (pbf.pos < end) {
+          var tag = pbf.readVarint() >> 3;
 
-          addRowEnter
-              .append('div')
-              .attr('class', 'space-value');   // preserve space
+          value = tag === 1 ? pbf.readString() :
+              tag === 2 ? pbf.readFloat() :
+              tag === 3 ? pbf.readDouble() :
+              tag === 4 ? pbf.readVarint64() :
+              tag === 5 ? pbf.readVarint() :
+              tag === 6 ? pbf.readSVarint() :
+              tag === 7 ? pbf.readBoolean() : null;
+      }
 
-          addRowEnter
-              .append('div')
-              .attr('class', 'space-buttons');  // preserve space
+      return value;
+  }
 
+  // return feature `i` from this layer as a `VectorTileFeature`
+  VectorTileLayer.prototype.feature = function(i) {
+      if (i < 0 || i >= this._features.length) throw new Error('feature index out of bounds');
 
-          // Tag list items
-          var items = list.selectAll('.tag-row')
-              .data(entries, function(d) { return d.key; });
+      this._pbf.pos = this._features[i];
 
-          items.exit()
-              .each(unbind)
-              .remove();
+      var end = this._pbf.readVarint() + this._pbf.pos;
+      return new vectortilefeature(this._pbf, end, this.extent, this._keys, this._values);
+  };
 
+  var vectortile = VectorTile;
 
-          // Enter
-          var enter = items.enter()
-              .append('li')
-              .attr('class', 'tag-row')
-              .classed('readonly', isReadOnly);
+  function VectorTile(pbf, end) {
+      this.layers = pbf.readFields(readTile, {}, end);
+  }
 
-          var innerWrap = enter.append('div')
-              .attr('class', 'inner-wrap');
+  function readTile(tag, layers, pbf) {
+      if (tag === 3) {
+          var layer = new vectortilelayer(pbf, pbf.readVarint() + pbf.pos);
+          if (layer.length) layers[layer.name] = layer;
+      }
+  }
 
-          innerWrap
-              .append('div')
-              .attr('class', 'key-wrap')
-              .append('input')
-              .property('type', 'text')
-              .attr('class', 'key')
-              .attr('maxlength', 255)
-              .call(utilNoAuto)
-              .on('blur', keyChange)
-              .on('change', keyChange);
+  var VectorTile$1 = vectortile;
+  var VectorTileFeature$1 = vectortilefeature;
+  var VectorTileLayer$1 = vectortilelayer;
 
-          innerWrap
-              .append('div')
-              .attr('class', 'value-wrap')
-              .append('input')
-              .property('type', 'text')
-              .attr('class', 'value')
-              .attr('maxlength', 255)
-              .call(utilNoAuto)
-              .on('blur', valueChange)
-              .on('change', valueChange)
-              .on('keydown.push-more', pushMore);
+  var vectorTile = {
+       VectorTile: VectorTile$1,
+       VectorTileFeature: VectorTileFeature$1,
+       VectorTileLayer: VectorTileLayer$1
+  };
 
-          innerWrap
-              .append('button')
-              .attr('tabindex', -1)
-              .attr('class', 'form-field-button remove')
-              .call(svgIcon('#iD-operation-delete'));
+  var tiler$6 = utilTiler().tileSize(512).margin(1);
+  var dispatch$7 = dispatch('loadedData');
+  var _vtCache;
 
 
-          // Update
-          items = items
-              .merge(enter)
-              .sort(function(a, b) {
-                  return (a.key === _newRow && b.key !== _newRow) ? 1
-                      : (a.key !== _newRow && b.key === _newRow) ? -1
-                      : ascending(a.key, b.key);
-              });
+  function abortRequest$6(i) {
+      i.abort();
+  }
 
-          items
-              .each(function(tag) {
-                  var row = select(this);
-                  var key = row.select('input.key');      // propagate bound data to child
-                  var value = row.select('input.value');  // propagate bound data to child
 
-                  if (_entityID && taginfo && _state !== 'hover') {
-                      bindTypeahead(key, value);
-                  }
+  function vtToGeoJSON(data, tile, mergeCache) {
+      var vectorTile$1 = new vectorTile.VectorTile(new pbf(data.response));
+      var layers = Object.keys(vectorTile$1.layers);
+      if (!Array.isArray(layers)) { layers = [layers]; }
 
-                  var isRelation = (_entityID && context.entity(_entityID).type === 'relation');
-                  var reference;
+      var features = [];
+      layers.forEach(function(layerID) {
+          var layer = vectorTile$1.layers[layerID];
+          if (layer) {
+              for (var i = 0; i < layer.length; i++) {
+                  var feature = layer.feature(i).toGeoJSON(tile.xyz[0], tile.xyz[1], tile.xyz[2]);
+                  var geometry = feature.geometry;
 
-                  if (isRelation && tag.key === 'type') {
-                      reference = uiTagReference({ rtype: tag.value }, context);
-                  } else {
-                      reference = uiTagReference({ key: tag.key, value: tag.value }, context);
+                  // Treat all Polygons as MultiPolygons
+                  if (geometry.type === 'Polygon') {
+                      geometry.type = 'MultiPolygon';
+                      geometry.coordinates = [geometry.coordinates];
                   }
 
-                  if (_state === 'hover') {
-                      reference.showing(false);
+                  // Clip to tile bounds
+                  if (geometry.type === 'MultiPolygon') {
+                      var isClipped = false;
+                      var featureClip = turf_bboxClip(feature, tile.extent.rectangle());
+                      if (!isEqual(feature.geometry, featureClip.geometry)) {
+                          // feature = featureClip;
+                          isClipped = true;
+                      }
+                      if (!feature.geometry.coordinates.length) continue;   // not actually on this tile
+                      if (!feature.geometry.coordinates[0].length) continue;   // not actually on this tile
                   }
 
-                  row.select('.inner-wrap')
-                      .call(reference.button);
+                  // Generate some unique IDs and add some metadata
+                  var featurehash = utilHashcode(fastJsonStableStringify(feature));
+                  var propertyhash = utilHashcode(fastJsonStableStringify(feature.properties || {}));
+                  feature.__layerID__ = layerID.replace(/[^_a-zA-Z0-9\-]/g, '_');
+                  feature.__featurehash__ = featurehash;
+                  feature.__propertyhash__ = propertyhash;
+                  features.push(feature);
 
-                  row.call(reference.body);
-              });
+                  // Clipped Polygons at same zoom with identical properties can get merged
+                  if (isClipped && geometry.type === 'MultiPolygon') {
+                      var merged = mergeCache[propertyhash];
+                      if (merged && merged.length) {
+                          var other = merged[0];
+                          var coords = martinez.union(
+                              feature.geometry.coordinates, other.geometry.coordinates
+                          );
 
-          items.selectAll('input.key')
-              .attr('title', function(d) { return d.key; })
-              .call(utilGetSetValue, function(d) { return d.key; })
-              .property('disabled', isReadOnly);
+                          if (!coords || !coords.length) {
+                              continue;  // something failed in martinez union
+                          }
 
-          items.selectAll('input.value')
-              .attr('title', function(d) { return d.value; })
-              .call(utilGetSetValue, function(d) { return d.value; })
-              .property('disabled', isReadOnly);
+                          merged.push(feature);
+                          for (var j = 0; j < merged.length; j++) {      // all these features get...
+                              merged[j].geometry.coordinates = coords;   // same coords
+                              merged[j].__featurehash__ = featurehash;   // same hash, so deduplication works
+                          }
+                      } else {
+                          mergeCache[propertyhash] = [feature];
+                      }
+                  }
+              }
+          }
+      });
 
-          items.selectAll('button.remove')
-              .on('click', removeTag);
+      return features;
+  }
 
 
+  function loadTile(source, tile) {
+      if (source.loaded[tile.id] || source.inflight[tile.id]) return;
 
-          function isReadOnly(d) {
-              for (var i = 0; i < _readOnlyTags.length; i++) {
-                  if (d.key.match(_readOnlyTags[i]) !== null) {
-                      return true;
-                  }
-              }
-              return false;
-          }
+      var url = source.template
+          .replace('{x}', tile.xyz[0])
+          .replace('{y}', tile.xyz[1])
+          // TMS-flipped y coordinate
+          .replace(/\{[t-]y\}/, Math.pow(2, tile.xyz[2]) - tile.xyz[1] - 1)
+          .replace(/\{z(oom)?\}/, tile.xyz[2])
+          .replace(/\{switch:([^}]+)\}/, function(s, r) {
+              var subdomains = r.split(',');
+              return subdomains[(tile.xyz[0] + tile.xyz[1]) % subdomains.length];
+          });
 
+      source.inflight[tile.id] = request(url)
+          .responseType('arraybuffer')
+          .get(function(err, data) {
+              source.loaded[tile.id] = [];
+              delete source.inflight[tile.id];
+              if (err || !data) return;
 
-          function pushMore() {
-              if (event.keyCode === 9 && !event.shiftKey &&
-                  list.selectAll('li:last-child input.value').node() === this) {
-                  addTag();
+              var z = tile.xyz[2];
+              if (!source.canMerge[z]) {
+                  source.canMerge[z] = {};  // initialize mergeCache
               }
-          }
 
+              source.loaded[tile.id] = vtToGeoJSON(data, tile, source.canMerge[z]);
+              dispatch$7.call('loadedData');
+          });
+  }
 
-          function bindTypeahead(key, value) {
-              if (isReadOnly(key.datum())) return;
 
-              var geometry = context.geometry(_entityID);
+  var serviceVectorTile = {
 
-              key.call(uiCombobox(context, 'tag-key')
-                  .fetcher(function(value, callback) {
-                      taginfo.keys({
-                          debounce: true,
-                          geometry: geometry,
-                          query: value
-                      }, function(err, data) {
-                          if (!err) callback(sort(value, data));
-                      });
-                  }));
+      init: function() {
+          if (!_vtCache) {
+              this.reset();
+          }
 
-              value.call(uiCombobox(context, 'tag-value')
-                  .fetcher(function(value, callback) {
-                      taginfo.values({
-                          debounce: true,
-                          key: utilGetSetValue(key),
-                          geometry: geometry,
-                          query: value
-                      }, function(err, data) {
-                          if (!err) callback(sort(value, data));
-                      });
-                  }));
+          this.event = utilRebind(this, dispatch$7, 'on');
+      },
 
 
-              function sort(value, data) {
-                  var sameletter = [];
-                  var other = [];
-                  for (var i = 0; i < data.length; i++) {
-                      if (data[i].value.substring(0, value.length) === value) {
-                          sameletter.push(data[i]);
-                      } else {
-                          other.push(data[i]);
-                      }
-                  }
-                  return sameletter.concat(other);
+      reset: function() {
+          for (var sourceID in _vtCache) {
+              var source = _vtCache[sourceID];
+              if (source && source.inflight) {
+                  forEach(source.inflight, abortRequest$6);
               }
           }
 
+          _vtCache = {};
+      },
 
-          function unbind() {
-              var row = select(this);
-
-              row.selectAll('input.key')
-                  .call(uiCombobox.off);
 
-              row.selectAll('input.value')
-                  .call(uiCombobox.off);
-          }
+      addSource: function(sourceID, template) {
+          _vtCache[sourceID] = { template: template, inflight: {}, loaded: {}, canMerge: {} };
+          return _vtCache[sourceID];
+      },
 
 
-          function keyChange(d) {
-              var kOld = d.key;
-              var kNew = this.value.trim();
-              var tag = {};
+      data: function(sourceID, projection) {
+          var source = _vtCache[sourceID];
+          if (!source) return [];
 
-              if (isReadOnly({ key: kNew })) {
-                  this.value = kOld;
-                  return;
-              }
+          var tiles = tiler$6.getTiles(projection);
+          var seen = {};
+          var results = [];
 
-              if (kNew && kNew !== kOld) {
-                  var match = kNew.match(/^(.*?)(?:_(\d+))?$/);
-                  var base = match[1];
-                  var suffix = +(match[2] || 1);
-                  while (_tags[kNew]) {  // rename key if already in use
-                      kNew = base + '_' + suffix++;
-                  }
+          for (var i = 0; i < tiles.length; i++) {
+              var features = source.loaded[tiles[i].id];
+              if (!features || !features.length) continue;
 
-                  if (includes(kNew, '=')) {
-                      var splitStr = kNew.split('=').map(function(str) { return str.trim(); });
-                      var key = splitStr[0];
-                      var value = splitStr[1];
+              for (var j = 0; j < features.length; j++) {
+                  var feature = features[j];
+                  var hash = feature.__featurehash__;
+                  if (seen[hash]) continue;
+                  seen[hash] = true;
 
-                      kNew = key;
-                      d.value = value;
-                  }
+                  // return a shallow clone, because the hash may change
+                  // later if this feature gets merged with another
+                  results.push(clone(feature));
               }
-              tag[kOld] = undefined;
-              tag[kNew] = d.value;
+          }
 
-              d.key = kNew;  // Maintain DOM identity through the subsequent update.
+          return results;
+      },
 
-              if (_newRow === kOld) {   // see if this row is still a new row
-                  _newRow = ((d.value === '' || kNew === '') ? kNew : undefined);
-              }
 
-              this.value = kNew;
-              dispatch$$1.call('change', this, tag);
+      loadTiles: function(sourceID, template, projection) {
+          var source = _vtCache[sourceID];
+          if (!source) {
+              source = this.addSource(sourceID, template);
           }
 
+          var tiles = tiler$6.getTiles(projection);
 
-          function valueChange(d) {
-              if (isReadOnly(d)) return;
-              var tag = {};
-              tag[d.key] = this.value;
+          // abort inflight requests that are no longer needed
+          forEach(source.inflight, function(v, k) {
+              var wanted = find$1(tiles, function(tile) { return k === tile.id; });
 
-              if (_newRow === d.key && d.key !== '' && d.value !== '') {   // not a new row anymore
-                  _newRow = undefined;
+              if (!wanted) {
+                  abortRequest$6(v);
+                  delete source.inflight[k];
               }
+          });
 
-              dispatch$$1.call('change', this, tag);
-          }
+          tiles.forEach(function(tile) {
+              loadTile(source, tile);
+          });
+      },
 
 
-          function removeTag(d) {
-              if (isReadOnly(d)) return;
-              var tag = {};
-              tag[d.key] = undefined;
-              dispatch$$1.call('change', this, tag);
-              select(this.parentNode).remove();
-          }
+      cache: function() {
+          return _vtCache;
+      }
 
+  };
 
-          function addTag() {
-              // Wrapped in a setTimeout in case it's being called from a blur
-              // handler. Without the setTimeout, the call to `content` would
-              // wipe out the pending value change.
-              window.setTimeout(function() {
-                  _showBlank = true;
-                  content(wrap);
-                  list.selectAll('li:last-child input.key').node().focus();
-              }, 1);
-          }
-      }
+  var apibase$5 = 'https://www.wikidata.org/w/api.php?';
+  var _wikidataCache = {};
 
+  var serviceWikidata = {
 
-      rawTagEditor.state = function(val) {
-          if (!arguments.length) return _state;
-          _state = val;
-          return rawTagEditor;
-      };
+      init: function() {},
 
+      reset: function() {
+          _wikidataCache = {};
+      },
 
-      rawTagEditor.preset = function(val) {
-          if (!arguments.length) return _preset;
-          _preset = val;
-          if (_preset.isFallback()) {
-              _expanded = true;
-              _updatePreference = false;
-          } else {
-              _expanded = undefined;
-              _updatePreference = true;
+
+      // Given a Wikipedia language and article title, return an array of
+      // corresponding Wikidata entities.
+      itemsByTitle: function(lang, title, callback) {
+          if (!title) {
+              callback('No title', {});
+              return;
           }
-          return rawTagEditor;
-      };
 
+          lang = lang || 'en';
 
-      rawTagEditor.tags = function(val) {
-          if (!arguments.length) return _tags;
-          _tags = val;
-          return rawTagEditor;
-      };
+          d3_json(apibase$5 + utilQsString({
+              action: 'wbgetentities',
+              format: 'json',
+              formatversion: 2,
+              sites: lang.replace(/-/g, '_') + 'wiki',
+              titles: title,
+              languages: 'en', // shrink response by filtering to one language
+              origin: '*'
+          }), function(err, data) {
+              if (data && data.error) {
+                  err = data.error;
+              }
+              if (err) {
+                  callback(err, {});
+              } else {
+                  callback(null, data.entities || {});
+              }
+          });
+      },
 
 
-      rawTagEditor.entityID = function(val) {
-          if (!arguments.length) return _entityID;
-          _entityID = val;
-          return rawTagEditor;
-      };
+      entityByQID: function(qid, callback) {
+          if (!qid) {
+              callback('No qid', {});
+              return;
+          }
+          if (_wikidataCache[qid]) {
+              callback(null, _wikidataCache[qid]);
+              return;
+          }
 
+          var langs = uniq([
+              currentLocale.toLowerCase(),
+              currentLocale.split('-', 2)[0].toLowerCase(),
+              'en'
+          ]);
 
-      rawTagEditor.expanded = function(val) {
-          if (!arguments.length) return _expanded;
-          _expanded = val;
-          _updatePreference = false;
-          return rawTagEditor;
-      };
+          d3_json(apibase$5 + utilQsString({
+              action: 'wbgetentities',
+              format: 'json',
+              formatversion: 2,
+              ids: qid,
+              props: 'labels|descriptions|claims|sitelinks',
+              sitefilter: langs.map(function(d) { return d + 'wiki'; }).join('|'),
+              languages: langs.join('|'),
+              languagefallback: 1,
+              origin: '*'
+          }), function(err, data) {
+              if (data && data.error) {
+                  err = data.error;
+              }
+              if (err) {
+                  callback(err, {});
+              } else {
+                  _wikidataCache[qid] = data.entities[qid];
+                  callback(null, data.entities[qid] || {});
+              }
+          });
+      },
 
 
-      rawTagEditor.readOnlyTags = function(val) {
-          if (!arguments.length) return _readOnlyTags;
-          _readOnlyTags = val;
-          return rawTagEditor;
-      };
+      // Pass `params` object of the form:
+      // {
+      //   qid: 'string'      // brand wikidata  (e.g. 'Q37158')
+      // }
+      //
+      // Get an result object used to display tag documentation
+      // {
+      //   title:        'string',
+      //   description:  'string',
+      //   editURL:      'string',
+      //   imageURL:     'string',
+      //   wiki:         { title: 'string', text: 'string', url: 'string' }
+      // }
+      //
+      getDocs: function(params, callback) {
+          this.entityByQID(params.qid, function(err, entity) {
+              if (err || !entity) {
+                  callback(err || 'No entity');
+                  return;
+              }
 
+              var i;
 
-      return utilRebind(rawTagEditor, dispatch$$1, 'on');
-  }
+              var description;
+              if (entity.descriptions && Object.keys(entity.descriptions).length > 0) {
+                  description = entity.descriptions[Object.keys(entity.descriptions)[0]].value;
+              }
 
-  var _changeset;
-  var readOnlyTags = [
-      /^changesets_count$/,
-      /^created_by$/,
-      /^ideditor:/,
-      /^imagery_used$/,
-      /^host$/,
-      /^locale$/
-  ];
+              // prepare result
+              var result = {
+                  title: entity.id,
+                  description: description,
+                  editURL: 'https://www.wikidata.org/wiki/' + entity.id
+              };
 
-  // treat most punctuation (except -, _, +, &) as hashtag delimiters - #4398
-  // from https://stackoverflow.com/a/25575009
-  var hashtagRegex = /(#[^\u2000-\u206F\u2E00-\u2E7F\s\\'!"#$%()*,.\/:;<=>?@\[\]^`{|}~]+)/g;
+              // add image
+              if (entity.claims) {
+                  var imageroot = 'https://commons.wikimedia.org/w/index.php';
+                  var props = ['P154','P18'];  // logo image, image
+                  var prop, image;
+                  for (i = 0; i < props.length; i++) {
+                      prop = entity.claims[props[i]];
+                      if (prop && Object.keys(prop).length > 0) {
+                          image = prop[Object.keys(prop)[0]].mainsnak.datavalue.value;
+                          if (image) {
+                              result.imageURL = imageroot + '?' + utilQsString({
+                                  title: 'Special:Redirect/file/' + image,
+                                  width: 400
+                              });
+                              break;
+                          }
+                      }
+                  }
+              }
 
+              if (entity.sitelinks) {
+                  // must be one of these that we requested..
+                  var langs = uniq([
+                      currentLocale.toLowerCase(),
+                      currentLocale.split('-', 2)[0].toLowerCase(),
+                      'en'
+                  ]);
+                  var englishLocale = (currentLocale.split('-', 2)[0].toLowerCase() === 'en');
+
+                  for (i = 0; i < langs.length; i++) {   // check each, in order of preference
+                      var w = langs[i] + 'wiki';
+                      if (entity.sitelinks[w]) {
+                          var title = entity.sitelinks[w].title;
+                          var tKey = 'inspector.wiki_reference';
+                          if (!englishLocale && langs[i] === 'en') {   // user's currentLocale isn't English but
+                              tKey = 'inspector.wiki_en_reference';    // we are sending them to enwiki anyway..
+                          }
 
-  function uiCommit(context) {
-      var dispatch$$1 = dispatch('cancel', 'save');
-      var _userDetails;
-      var _selection;
+                          result.wiki = {
+                              title: title,
+                              text: tKey,
+                              url: 'https://' + langs[i] + '.wikipedia.org/wiki/' + title.replace(/ /g, '_')
+                          };
+                          break;
+                      }
+                  }
+              }
 
-      var changesetEditor = uiChangesetEditor$$1(context)
-          .on('change', changeTags);
-      var rawTagEditor = uiRawTagEditor$$1(context)
-          .on('change', changeTags);
-      var commitChanges = uiCommitChanges(context);
-      var commitWarnings = uiCommitWarnings(context);
+              callback(null, result);
+          });
+      }
 
+  };
 
-      function commit(selection$$1) {
-          _selection = selection$$1;
+  var endpoint = 'https://en.wikipedia.org/w/api.php?';
 
-          var osm = context.connection();
-          if (!osm) return;
+  var serviceWikipedia = {
 
-          // expire stored comment, hashtags, source after cutoff datetime - #3947 #4899
-          var commentDate = +context.storage('commentDate') || 0;
-          var currDate = Date.now();
-          var cutoff = 2 * 86400 * 1000;   // 2 days
-          if (commentDate > currDate || currDate - commentDate > cutoff) {
-              context.storage('comment', null);
-              context.storage('hashtags', null);
-              context.storage('source', null);
-          }
+      init: function() {},
+      reset: function() {},
 
-          var tags;
-          // Initialize changeset if one does not exist yet.
-          // Also pull values from local storage.
-          if (!_changeset) {
-              var detected = utilDetect();
-              tags = {
-                  comment: context.storage('comment') || '',
-                  created_by: ('iD ' + context.version).substr(0, 255),
-                  host: detected.host.substr(0, 255),
-                  locale: detected.locale.substr(0, 255)
-              };
 
-              // call findHashtags initially - this will remove stored
-              // hashtags if any hashtags are found in the comment - #4304
-              findHashtags(tags, true);
+      search: function(lang, query, callback) {
+          if (!query) {
+              callback('', []);
+              return;
+          }
 
-              var hashtags = context.storage('hashtags');
-              if (hashtags) {
-                  tags.hashtags = hashtags;
+          lang = lang || 'en';
+          d3_json(endpoint.replace('en', lang) +
+              utilQsString({
+                  action: 'query',
+                  list: 'search',
+                  srlimit: '10',
+                  srinfo: 'suggestion',
+                  format: 'json',
+                  origin: '*',
+                  srsearch: query
+              }), function(err, data) {
+                  if (err || !data || !data.query || !data.query.search || data.error) {
+                      callback('', []);
+                  } else {
+                      var results = data.query.search.map(function(d) { return d.title; });
+                      callback(query, results);
+                  }
               }
+          );
+      },
 
-              var source = context.storage('source');
-              if (source) {
-                  tags.source = source;
-              }
 
-              _changeset = new osmChangeset({ tags: tags });
+      suggestions: function(lang, query, callback) {
+          if (!query) {
+              callback('', []);
+              return;
           }
 
-          tags = clone(_changeset.tags);
+          lang = lang || 'en';
+          d3_json(endpoint.replace('en', lang) +
+              utilQsString({
+                  action: 'opensearch',
+                  namespace: 0,
+                  suggest: '',
+                  format: 'json',
+                  origin: '*',
+                  search: query
+              }), function(err, data) {
+                  if (err || !data || data.error) {
+                      callback('', []);
+                  } else {
+                      callback(data[0], data[1] || []);
+                  }
+              }
+          );
+      },
 
-          // assign tags for imagery used
-          var imageryUsed = context.history().imageryUsed().join(';').substr(0, 255);
-          tags.imagery_used = imageryUsed || 'None';
 
-          // assign tags for closed issues and notes
-          var osmClosed = osm.getClosedIDs();
-          if (osmClosed.length) {
-              tags['closed:note'] = osmClosed.join(';').substr(0, 255);
+      translations: function(lang, title, callback) {
+          if (!title) {
+              callback({});
+              return;
           }
-          if (services.keepRight) {
-              var krClosed = services.keepRight.getClosedIDs();
-              if (krClosed.length) {
-                  tags['closed:keepright'] = krClosed.join(';').substr(0, 255);
+
+          d3_json(endpoint.replace('en', lang) +
+              utilQsString({
+                  action: 'query',
+                  prop: 'langlinks',
+                  format: 'json',
+                  origin: '*',
+                  lllimit: 500,
+                  titles: title
+              }), function(err, data) {
+                  if (err || !data || !data.query || !data.query.pages || data.error) {
+                      callback({});
+                  } else {
+                      var list = data.query.pages[Object.keys(data.query.pages)[0]],
+                          translations = {};
+                      if (list && list.langlinks) {
+                          list.langlinks.forEach(function(d) {
+                              translations[d.lang] = d['*'];
+                          });
+                      }
+                      callback(translations);
+                  }
               }
-          }
+          );
+      }
 
-          _changeset = _changeset.update({ tags: tags });
+  };
 
-          var header = selection$$1.selectAll('.header')
-              .data([0]);
+  var services = {
+      geocoder: serviceNominatim,
+      keepRight: serviceKeepRight,
+      improveOSM: serviceImproveOSM,
+      mapillary: serviceMapillary,
+      openstreetcam: serviceOpenstreetcam,
+      osm: serviceOsm,
+      osmWikibase: serviceOsmWikibase,
+      maprules: serviceMapRules,
+      streetside: serviceStreetside,
+      taginfo: serviceTaginfo,
+      vectorTile: serviceVectorTile,
+      wikidata: serviceWikidata,
+      wikipedia: serviceWikipedia
+  };
 
-          var headerTitle = header.enter()
-              .append('div')
-              .attr('class', 'header fillL header-container');
+  function modeAddNote(context) {
+      var mode = {
+          id: 'add-note',
+          button: 'note',
+          title: t('modes.add_note.title'),
+          description: t('modes.add_note.description'),
+          key: '4'
+      };
 
-          headerTitle
-              .append('div')
-              .attr('class', 'header-block header-block-outer');
+      var behavior = behaviorDraw(context)
+          .tail(t('modes.add_note.tail'))
+          .on('click', add)
+          .on('cancel', cancel)
+          .on('finish', cancel);
 
-          headerTitle
-              .append('div')
-              .attr('class', 'header-block')
-              .append('h3')
-              .text(t('commit.title'));
 
-          headerTitle
-              .append('div')
-              .attr('class', 'header-block header-block-outer header-block-close')
-              .append('button')
-              .attr('class', 'close')
-              .on('click', function() { context.enter(modeBrowse(context)); })
-              .call(svgIcon('#iD-icon-close'));
+      function add(loc) {
+          var osm = services.osm;
+          if (!osm) return;
 
-          var body = selection$$1.selectAll('.body')
-              .data([0]);
+          var note = osmNote({ loc: loc, status: 'open', comments: [] });
+          osm.replaceNote(note);
 
-          body = body.enter()
-              .append('div')
-              .attr('class', 'body')
-              .merge(body);
+          // force a reraw (there is no history change that would otherwise do this)
+          context.pan([0,0]);
 
+          context
+              .selectedNoteID(note.id)
+              .enter(modeSelectNote(context, note.id).newFeature(true));
+      }
 
-          // Changeset Section
-          var changesetSection = body.selectAll('.changeset-editor')
-              .data([0]);
 
-          changesetSection = changesetSection.enter()
-              .append('div')
-              .attr('class', 'modal-section changeset-editor')
-              .merge(changesetSection);
+      function cancel() {
+          context.enter(modeBrowse(context));
+      }
 
-          changesetSection
-              .call(changesetEditor
-                  .changesetID(_changeset.id)
-                  .tags(tags)
-              );
 
+      mode.enter = function() {
+          context.install(behavior);
+      };
 
-          // Warnings
-          body.call(commitWarnings);
 
+      mode.exit = function() {
+          context.uninstall(behavior);
+      };
 
-          // Upload Explanation
-          var saveSection = body.selectAll('.save-section')
-              .data([0]);
 
-          saveSection = saveSection.enter()
-              .append('div')
-              .attr('class','modal-section save-section fillL cf')
-              .merge(saveSection);
+      return mode;
+  }
 
-          var prose = saveSection.selectAll('.commit-info')
-              .data([0]);
+  function modeDragNode(context) {
+      var mode = {
+          id: 'drag-node',
+          button: 'browse'
+      };
+      var hover = behaviorHover(context).altDisables(true)
+          .on('hover', context.ui().sidebar.hover);
+      var edit = behaviorEdit(context);
 
-          prose = prose.enter()
-              .append('p')
-              .attr('class', 'commit-info')
-              .text(t('commit.upload_explanation'))
-              .merge(prose);
+      var _nudgeInterval;
+      var _restoreSelectedIDs = [];
+      var _wasMidpoint = false;
+      var _isCancelled = false;
+      var _activeEntity;
+      var _startLoc;
+      var _lastLoc;
 
-          osm.userDetails(function(err, user) {
-              if (err) return;
 
-              var userLink = select(document.createElement('div'));
+      function startNudge(entity, nudge) {
+          if (_nudgeInterval) window.clearInterval(_nudgeInterval);
+          _nudgeInterval = window.setInterval(function() {
+              context.pan(nudge);
+              doMove(entity, nudge);
+          }, 50);
+      }
 
-              _userDetails = user;
 
-              if (user.image_url) {
-                  userLink
-                      .append('img')
-                      .attr('src', user.image_url)
-                      .attr('class', 'icon pre-text user-icon');
+      function stopNudge() {
+          if (_nudgeInterval) {
+              window.clearInterval(_nudgeInterval);
+              _nudgeInterval = null;
+          }
+      }
+
+
+      function moveAnnotation(entity) {
+          return t('operations.move.annotation.' + entity.geometry(context.graph()));
+      }
+
+
+      function connectAnnotation(nodeEntity, targetEntity) {
+          var nodeGeometry = nodeEntity.geometry(context.graph());
+          var targetGeometry = targetEntity.geometry(context.graph());
+          if (nodeGeometry === 'vertex' && targetGeometry === 'vertex') {
+              var nodeParentWayIDs = context.graph().parentWays(nodeEntity);
+              var targetParentWayIDs = context.graph().parentWays(targetEntity);
+              var sharedParentWays = intersection(nodeParentWayIDs, targetParentWayIDs);
+              // if both vertices are part of the same way
+              if (sharedParentWays.length !== 0) {
+                  // if the nodes are next to each other, they are merged
+                  if (sharedParentWays[0].areAdjacent(nodeEntity.id, targetEntity.id)) {
+                      return t('operations.connect.annotation.from_vertex.to_adjacent_vertex');
+                  }
+                  return t('operations.connect.annotation.from_vertex.to_sibling_vertex');
               }
+          }
+          return t('operations.connect.annotation.from_' + nodeGeometry + '.to_' + targetGeometry);
+      }
 
-              userLink
-                  .append('a')
-                  .attr('class', 'user-info')
-                  .text(user.display_name)
-                  .attr('href', osm.userURL(user.display_name))
-                  .attr('tabindex', -1)
-                  .attr('target', '_blank');
 
-              prose
-                  .html(t('commit.upload_explanation_with_user', { user: userLink.html() }));
-          });
+      function shouldSnapToNode(target) {
+          return _activeEntity.geometry(context.graph()) !== 'vertex' ||
+              context.presets().allowsVertex(target, context.graph());
+      }
 
 
-          // Request Review
-          var requestReview = saveSection.selectAll('.request-review')
-              .data([0]);
+      function origin(entity) {
+          return context.projection(entity.loc);
+      }
 
-          // Enter
-          var requestReviewEnter = requestReview.enter()
-              .append('div')
-              .attr('class', 'request-review');
 
-          var labelEnter = requestReviewEnter
-              .append('label')
-              .attr('for', 'commit-input-request-review');
+      function keydown() {
+          if (event.keyCode === utilKeybinding.modifierCodes.alt) {
+              if (context.surface().classed('nope')) {
+                  context.surface()
+                      .classed('nope-suppressed', true);
+              }
+              context.surface()
+                  .classed('nope', false)
+                  .classed('nope-disabled', true);
+          }
+      }
 
-          labelEnter
-              .append('input')
-              .attr('type', 'checkbox')
-              .attr('id', 'commit-input-request-review');
 
-          labelEnter
-              .append('span')
-              .text(t('commit.request_review'));
+      function keyup() {
+          if (event.keyCode === utilKeybinding.modifierCodes.alt) {
+              if (context.surface().classed('nope-suppressed')) {
+                  context.surface()
+                      .classed('nope', true);
+              }
+              context.surface()
+                  .classed('nope-suppressed', false)
+                  .classed('nope-disabled', false);
+          }
+      }
 
-          // Update
-          requestReview = requestReview
-              .merge(requestReviewEnter);
 
-          var requestReviewInput = requestReview.selectAll('input')
-              .property('checked', isReviewRequested(_changeset.tags))
-              .on('change', toggleRequestReview);
+      function start(entity) {
+          _wasMidpoint = entity.type === 'midpoint';
+          var hasHidden = context.features().hasHiddenConnections(entity, context.graph());
+          _isCancelled = event.sourceEvent.shiftKey || hasHidden;
 
 
-          // Buttons
-          var buttonSection = saveSection.selectAll('.buttons')
-              .data([0]);
+          if (_isCancelled) {
+              if (hasHidden) {
+                  uiFlash()
+                      .duration(4000)
+                      .text(t('modes.drag_node.connected_to_hidden'))();
+              }
+              return drag.cancel();
+          }
 
-          // enter
-          var buttonEnter = buttonSection.enter()
-              .append('div')
-              .attr('class', 'buttons fillL cf');
+          if (_wasMidpoint) {
+              var midpoint = entity;
+              entity = osmNode();
+              context.perform(actionAddMidpoint(midpoint, entity));
+              entity = context.entity(entity.id);   // get post-action entity
 
-          buttonEnter
-              .append('button')
-              .attr('class', 'secondary-action button cancel-button')
-              .append('span')
-              .attr('class', 'label')
-              .text(t('commit.cancel'));
+              var vertex = context.surface().selectAll('.' + entity.id);
+              drag.target(vertex.node(), entity);
 
-          buttonEnter
-              .append('button')
-              .attr('class', 'action button save-button')
-              .append('span')
-              .attr('class', 'label')
-              .text(t('commit.save'));
+          } else {
+              context.perform(actionNoop());
+          }
 
-          // update
-          buttonSection = buttonSection
-              .merge(buttonEnter);
+          _activeEntity = entity;
+          _startLoc = entity.loc;
 
-          buttonSection.selectAll('.cancel-button')
-              .on('click.cancel', function() {
-                  var selectedID = commitChanges.entityID();
-                  dispatch$$1.call('cancel', this, selectedID);
-              });
+          hover.ignoreVertex(entity.geometry(context.graph()) === 'vertex');
 
-          buttonSection.selectAll('.save-button')
-              .attr('disabled', function() {
-                  var n = select('#preset-input-comment').node();
-                  return (n && n.value.length) ? null : true;
-              })
-              .on('click.save', function() {
-                  this.blur();    // avoid keeping focus on the button - #4641
-                  dispatch$$1.call('save', this, _changeset);
-              });
+          context.surface().selectAll('.' + _activeEntity.id)
+              .classed('active', true);
 
+          context.enter(mode);
+      }
 
-          // Raw Tag Editor
-          var tagSection = body.selectAll('.tag-section.raw-tag-editor')
-              .data([0]);
 
-          tagSection = tagSection.enter()
-              .append('div')
-              .attr('class', 'modal-section tag-section raw-tag-editor')
-              .merge(tagSection);
+      // related code
+      // - `behavior/draw.js` `datum()`
+      function datum() {
+          var event$1 = event && event.sourceEvent;
+          if (!event$1 || event$1.altKey) {
+              return {};
+          } else {
+              // When dragging, snap only to touch targets..
+              // (this excludes area fills and active drawing elements)
+              var d = event$1.target.__data__;
+              return (d && d.properties && d.properties.target) ? d : {};
+          }
+      }
 
-          var expanded = !tagSection.selectAll('a.hide-toggle.expanded').empty();
-          tagSection
-              .call(rawTagEditor
-                  .expanded(expanded)
-                  .readOnlyTags(readOnlyTags)
-                  .tags(clone(_changeset.tags))
-              );
 
+      function doMove(entity, nudge) {
+          nudge = nudge || [0, 0];
 
-          // Change summary
-          body.call(commitChanges);
+          var currPoint = (event && event.point) || context.projection(_lastLoc);
+          var currMouse = geoVecSubtract(currPoint, nudge);
+          var loc = context.projection.invert(currMouse);
+
+          if (!_nudgeInterval) {   // If not nudging at the edge of the viewport, try to snap..
+              // related code
+              // - `mode/drag_node.js`     `doMode()`
+              // - `behavior/draw.js`      `click()`
+              // - `behavior/draw_way.js`  `move()`
+              var d = datum();
+              var target = d && d.properties && d.properties.entity;
+              var targetLoc = target && target.loc;
+              var targetNodes = d && d.properties && d.properties.nodes;
+              var edge;
 
+              if (targetLoc) {   // snap to node/vertex - a point target with `.loc`
+                  if (shouldSnapToNode(target)) {
+                      loc = targetLoc;
+                  }
 
-          function toggleRequestReview() {
-              var rr = requestReviewInput.property('checked');
-              updateChangeset({ review_requested: (rr ? 'yes' : undefined) });
+              } else if (targetNodes) {   // snap to way - a line target with `.nodes`
+                  edge = geoChooseEdge(targetNodes, context.mouse(), context.projection, end.id);
+                  if (edge) {
+                      loc = edge.loc;
+                  }
+              }
+          }
 
-              var expanded = !tagSection.selectAll('a.hide-toggle.expanded').empty();
-              tagSection
-                  .call(rawTagEditor
-                      .expanded(expanded)
-                      .readOnlyTags(readOnlyTags)
-                      .tags(clone(_changeset.tags))
-                  );
+          context.replace(
+              actionMoveNode(entity.id, loc)
+          );
+
+          // Below here: validations
+          var isInvalid = false;
+
+          // Check if this connection to `target` could cause relations to break..
+          if (target) {
+              isInvalid = hasRelationConflict(entity, target, edge, context.graph());
           }
-      }
 
+          // Check if this drag causes the geometry to break..
+          if (!isInvalid) {
+              isInvalid = hasInvalidGeometry(entity, context.graph());
+          }
 
-      function changeTags(changed, onInput) {
-          if (changed.hasOwnProperty('comment')) {
-              if (changed.comment === undefined) {
-                  changed.comment = '';
-              }
-              if (!onInput) {
-                  context.storage('comment', changed.comment);
-                  context.storage('commentDate', Date.now());
+
+          var nope = context.surface().classed('nope');
+          if (isInvalid === 'relation' || isInvalid === 'restriction') {
+              if (!nope) {   // about to nope - show hint
+                  uiFlash()
+                      .duration(4000)
+                      .text(t('operations.connect.' + isInvalid,
+                          { relation: context.presets().item('type/restriction').name() }
+                      ))();
               }
-          }
-          if (changed.hasOwnProperty('source')) {
-              if (changed.source === undefined) {
-                  context.storage('source', null);
-              } else if (!onInput) {
-                  context.storage('source', changed.source);
-                  context.storage('commentDate', Date.now());
+          } else {
+              if (nope) {   // about to un-nope, remove hint
+                  uiFlash()
+                      .duration(1)
+                      .text('')();
               }
           }
 
-          updateChangeset(changed, onInput);
 
-          if (_selection) {
-              _selection.call(commit);
+          var nopeDisabled = context.surface().classed('nope-disabled');
+          if (nopeDisabled) {
+              context.surface()
+                  .classed('nope', false)
+                  .classed('nope-suppressed', isInvalid);
+          } else {
+              context.surface()
+                  .classed('nope', isInvalid)
+                  .classed('nope-suppressed', false);
           }
+
+          _lastLoc = loc;
       }
 
 
-      function findHashtags(tags, commentOnly) {
-          var inComment = commentTags();
-          var inHashTags = hashTags();
+      // Uses `actionConnect.disabled()` to know whether this connection is ok..
+      function hasRelationConflict(entity, target, edge, graph) {
+          var testGraph = graph.update();  // copy
 
-          if (inComment !== null) {                    // when hashtags are detected in comment...
-              context.storage('hashtags', null);       // always remove stored hashtags - #4304
-              if (commentOnly) { inHashTags = null; }  // optionally override hashtags field
-          }
-          return unionBy(inComment, inHashTags, function (s) {
-              return s.toLowerCase();
-          });
+          // if snapping to way - add midpoint there and consider that the target..
+          if (edge) {
+              var midpoint = osmNode();
+              var action = actionAddMidpoint({
+                  loc: edge.loc,
+                  edge: [target.nodes[edge.index - 1], target.nodes[edge.index]]
+              }, midpoint);
 
-          // Extract hashtags from `comment`
-          function commentTags() {
-              return tags.comment
-                  .replace(/http\S*/g, '')  // drop anything that looks like a URL - #4289
-                  .match(hashtagRegex);
+              testGraph = action(testGraph);
+              target = midpoint;
           }
 
-          // Extract and clean hashtags from `hashtags`
-          function hashTags() {
-              var t$$1 = tags.hashtags || '';
-              return t$$1
-                  .split(/[,;\s]+/)
-                  .map(function (s) {
-                      if (s[0] !== '#') { s = '#' + s; }    // prepend '#'
-                      var matched = s.match(hashtagRegex);
-                      return matched && matched[0];
-                  }).filter(Boolean);                       // exclude falsey
-          }
+          // can we connect to it?
+          var ids = [entity.id, target.id];
+          return actionConnect(ids).disabled(testGraph);
       }
 
 
-      function isReviewRequested(tags) {
-          var rr = tags.review_requested;
-          if (rr === undefined) return false;
-          rr = rr.trim().toLowerCase();
-          return !(rr === '' || rr === 'no');
-      }
+      function hasInvalidGeometry(entity, graph) {
+          var parents = graph.parentWays(entity);
+          var i, j, k;
 
+          for (i = 0; i < parents.length; i++) {
+              var parent = parents[i];
+              var nodes = [];
+              var activeIndex = null;    // which multipolygon ring contains node being dragged
 
-      function updateChangeset(changed, onInput) {
-          var tags = clone(_changeset.tags);
+              // test any parent multipolygons for valid geometry
+              var relations = graph.parentRelations(parent);
+              for (j = 0; j < relations.length; j++) {
+                  if (!relations[j].isMultipolygon()) continue;
 
-          forEach(changed, function(v, k) {
-              k = k.trim().substr(0, 255);
-              if (readOnlyTags.indexOf(k) !== -1) return;
+                  var rings = osmJoinWays(relations[j].members, graph);
 
-              if (k !== '' && v !== undefined) {
-                  if (onInput) {
-                      tags[k] = v;
-                  } else {
-                      tags[k] = v.trim().substr(0, 255);
+                  // find active ring and test it for self intersections
+                  for (k = 0; k < rings.length; k++) {
+                      nodes = rings[k].nodes;
+                      if (find$1(nodes, function(n) { return n.id === entity.id; })) {
+                          activeIndex = k;
+                          if (geoHasSelfIntersections(nodes, entity.id)) {
+                              return true;
+                          }
+                      }
+                      rings[k].coords = nodes.map(function(n) { return n.loc; });
                   }
-              } else {
-                  delete tags[k];
-              }
-          });
-
-          if (!onInput) {
-              // when changing the comment, override hashtags with any found in comment.
-              var commentOnly = changed.hasOwnProperty('comment') && (changed.comment !== '');
-              var arr = findHashtags(tags, commentOnly);
-              if (arr.length) {
-                  tags.hashtags = arr.join(';').substr(0, 255);
-                  context.storage('hashtags', tags.hashtags);
-              } else {
-                  delete tags.hashtags;
-                  context.storage('hashtags', null);
-              }
-          }
 
-          // always update userdetails, just in case user reauthenticates as someone else
-          if (_userDetails && _userDetails.changesets_count !== undefined) {
-              var changesetsCount = parseInt(_userDetails.changesets_count, 10) + 1;  // #4283
-              tags.changesets_count = String(changesetsCount);
+                  // test active ring for intersections with other rings in the multipolygon
+                  for (k = 0; k < rings.length; k++) {
+                      if (k === activeIndex) continue;
 
-              // first 100 edits - new user
-              if (changesetsCount <= 100) {
-                  var s;
-                  s = context.storage('walkthrough_completed');
-                  if (s) {
-                      tags['ideditor:walkthrough_completed'] = s;
+                      // make sure active ring doesnt cross passive rings
+                      if (geoHasLineIntersections(rings[activeIndex].nodes, rings[k].nodes, entity.id)) {
+                          return true;
+                      }
                   }
+              }
 
-                  s = context.storage('walkthrough_progress');
-                  if (s) {
-                      tags['ideditor:walkthrough_progress'] = s;
-                  }
 
-                  s = context.storage('walkthrough_started');
-                  if (s) {
-                      tags['ideditor:walkthrough_started'] = s;
+              // If we still haven't tested this node's parent way for self-intersections.
+              // (because it's not a member of a multipolygon), test it now.
+              if (activeIndex === null) {
+                  nodes = parent.nodes.map(function(nodeID) { return graph.entity(nodeID); });
+                  if (nodes.length && geoHasSelfIntersections(nodes, entity.id)) {
+                      return true;
                   }
               }
-          } else {
-              delete tags.changesets_count;
-          }
 
-          if (!isEqual(_changeset.tags, tags)) {
-              _changeset = _changeset.update({ tags: tags });
           }
-      }
-
-
-      commit.reset = function() {
-          _changeset = null;
-      };
-
-
-      return utilRebind(commit, dispatch$$1, 'on');
-  }
-
-  function uiConflicts(context) {
-      var dispatch$$1 = dispatch('cancel', 'save');
-      var keybinding = utilKeybinding('conflicts');
-      var _origChanges;
-      var _conflictList;
-
-
-      function keybindingOn() {
-          select(document)
-              .call(keybinding.on('⎋', cancel, true));
-      }
-
-      function keybindingOff() {
-          select(document)
-              .call(keybinding.unbind);
-      }
 
-      function tryAgain() {
-          keybindingOff();
-          dispatch$$1.call('save');
-      }
-
-      function cancel() {
-          keybindingOff();
-          dispatch$$1.call('cancel');
+          return false;
       }
 
 
-      function conflicts(selection$$1) {
-          keybindingOn();
+      function move(entity) {
+          if (_isCancelled) return;
+          event.sourceEvent.stopPropagation();
 
-          var headerEnter = selection$$1.selectAll('.header')
-              .data([0])
-              .enter()
-              .append('div')
-              .attr('class', 'header fillL');
+          context.surface().classed('nope-disabled', event.sourceEvent.altKey);
 
-          headerEnter
-              .append('button')
-              .attr('class', 'fr')
-              .on('click', cancel)
-              .call(svgIcon('#iD-icon-close'));
+          _lastLoc = context.projection.invert(event.point);
 
-          headerEnter
-              .append('h3')
-              .text(t('save.conflict.header'));
+          doMove(entity);
+          var nudge = geoViewportEdge(event.point, context.map().dimensions());
+          if (nudge) {
+              startNudge(entity, nudge);
+          } else {
+              stopNudge();
+          }
+      }
 
-          var bodyEnter = selection$$1.selectAll('.body')
-              .data([0])
-              .enter()
-              .append('div')
-              .attr('class', 'body fillL');
+      function end(entity) {
+          if (_isCancelled) return;
 
-          var conflictsHelpEnter = bodyEnter
-              .append('div')
-              .attr('class', 'conflicts-help')
-              .text(t('save.conflict.help'));
+          var d = datum();
+          var nope = (d && d.properties && d.properties.nope) || context.surface().classed('nope');
+          var target = d && d.properties && d.properties.entity;   // entity to snap to
 
+          if (nope) {   // bounce back
+              context.perform(
+                  _actionBounceBack(entity.id, _startLoc)
+              );
 
-          // Download changes link
-          var detected = utilDetect();
-          var changeset = new osmChangeset();
+          } else if (target && target.type === 'way') {
+              var choice = geoChooseEdge(context.childNodes(target), context.mouse(), context.projection, entity.id);
+              context.replace(
+                  actionAddMidpoint({
+                      loc: choice.loc,
+                      edge: [target.nodes[choice.index - 1], target.nodes[choice.index]]
+                  }, entity),
+                  connectAnnotation(entity, target)
+              );
 
-          delete changeset.id;  // Export without changeset_id
+          } else if (target && target.type === 'node' && shouldSnapToNode(target)) {
+              context.replace(
+                  actionConnect([target.id, entity.id]),
+                  connectAnnotation(entity, target)
+              );
 
-          var data = JXON.stringify(changeset.osmChangeJXON(_origChanges));
-          var blob = new Blob([data], { type: 'text/xml;charset=utf-8;' });
-          var fileName = 'changes.osc';
+          } else if (_wasMidpoint) {
+              context.replace(
+                  actionNoop(),
+                  t('operations.add.annotation.vertex')
+              );
 
-          var linkEnter = conflictsHelpEnter.selectAll('.download-changes')
-              .append('a')
-              .attr('class', 'download-changes');
+          } else {
+              context.replace(
+                  actionNoop(),
+                  moveAnnotation(entity)
+              );
+          }
 
-          if (detected.download) {      // All except IE11 and Edge
-              linkEnter                 // download the data as a file
-                  .attr('href', window.URL.createObjectURL(blob))
-                  .attr('download', fileName);
+          var reselection = _restoreSelectedIDs.filter(function(id) {
+              return context.graph().hasEntity(id);
+          });
 
-          } else {                      // IE11 and Edge
-              linkEnter                 // open data uri in a new tab
-                  .attr('target', '_blank')
-                  .on('click.download', function() {
-                      navigator.msSaveBlob(blob, fileName);
-                  });
+          if (reselection.length) {
+              context.enter(modeSelect(context, reselection));
+          } else {
+              context.enter(modeBrowse(context));
           }
+      }
 
-          linkEnter
-              .call(svgIcon('#iD-icon-load', 'inline'))
-              .append('span')
-              .text(t('save.conflict.download_changes'));
 
+      function _actionBounceBack(nodeID, toLoc) {
+          var moveNode = actionMoveNode(nodeID, toLoc);
+          var action = function(graph, t) {
+              // last time through, pop off the bounceback perform.
+              // it will then overwrite the initial perform with a moveNode that does nothing
+              if (t === 1) context.pop();
+              return moveNode(graph, t);
+          };
+          action.transitionable = true;
+          return action;
+      }
 
-          bodyEnter
-              .append('div')
-              .attr('class', 'conflict-container fillL3')
-              .call(showConflict, 0);
 
-          bodyEnter
-              .append('div')
-              .attr('class', 'conflicts-done')
-              .attr('opacity', 0)
-              .style('display', 'none')
-              .text(t('save.conflict.done'));
+      function cancel() {
+          drag.cancel();
+          context.enter(modeBrowse(context));
+      }
 
-          var buttonsEnter = bodyEnter
-              .append('div')
-              .attr('class','buttons col12 joined conflicts-buttons');
 
-          buttonsEnter
-              .append('button')
-              .attr('disabled', _conflictList.length > 1)
-              .attr('class', 'action conflicts-button col6')
-              .text(t('save.title'))
-              .on('click.try_again', tryAgain);
+      var drag = behaviorDrag()
+          .selector('.layer-touch.points .target')
+          .surface(select('#map').node())
+          .origin(origin)
+          .on('start', start)
+          .on('move', move)
+          .on('end', end);
 
-          buttonsEnter
-              .append('button')
-              .attr('class', 'secondary-action conflicts-button col6')
-              .text(t('confirm.cancel'))
-              .on('click.cancel', cancel);
-      }
 
+      mode.enter = function() {
+          context.install(hover);
+          context.install(edit);
 
-      function showConflict(selection$$1, index) {
-          index = utilWrap(index, _conflictList.length);
+          select(window)
+              .on('keydown.drawWay', keydown)
+              .on('keyup.drawWay', keyup);
 
-          var parent = select(selection$$1.node().parentNode);
+          context.history()
+              .on('undone.drag-node', cancel);
+      };
 
-          // enable save button if this is the last conflict being reviewed..
-          if (index === _conflictList.length - 1) {
-              window.setTimeout(function() {
-                  parent.select('.conflicts-button')
-                      .attr('disabled', null);
 
-                  parent.select('.conflicts-done')
-                      .transition()
-                      .attr('opacity', 1)
-                      .style('display', 'block');
-              }, 250);
-          }
+      mode.exit = function() {
+          context.ui().sidebar.hover.cancel();
+          context.uninstall(hover);
+          context.uninstall(edit);
 
-          var conflict = selection$$1
-              .selectAll('.conflict')
-              .data([_conflictList[index]]);
+          select(window)
+              .on('keydown.hover', null)
+              .on('keyup.hover', null);
 
-          conflict.exit()
-              .remove();
+          context.history()
+              .on('undone.drag-node', null);
 
-          var conflictEnter = conflict.enter()
-              .append('div')
-              .attr('class', 'conflict');
+          _activeEntity = null;
 
-          conflictEnter
-              .append('h4')
-              .attr('class', 'conflict-count')
-              .text(t('save.conflict.count', { num: index + 1, total: _conflictList.length }));
+          context.surface()
+              .classed('nope', false)
+              .classed('nope-suppressed', false)
+              .classed('nope-disabled', false)
+              .selectAll('.active')
+              .classed('active', false);
 
-          conflictEnter
-              .append('a')
-              .attr('class', 'conflict-description')
-              .attr('href', '#')
-              .text(function(d) { return d.name; })
-              .on('click', function(d) {
-                  event.preventDefault();
-                  zoomToEntity(d.id);
-              });
+          stopNudge();
+      };
 
-          var details = conflictEnter
-              .append('div')
-              .attr('class', 'conflict-detail-container');
 
-          details
-              .append('ul')
-              .attr('class', 'conflict-detail-list')
-              .selectAll('li')
-              .data(function(d) { return d.details || []; })
-              .enter()
-              .append('li')
-              .attr('class', 'conflict-detail-item')
-              .html(function(d) { return d; });
+      mode.selectedIDs = function() {
+          if (!arguments.length) return _activeEntity ? [_activeEntity.id] : [];
+          // no assign
+          return mode;
+      };
 
-          details
-              .append('div')
-              .attr('class', 'conflict-choices')
-              .call(addChoices);
 
-          details
-              .append('div')
-              .attr('class', 'conflict-nav-buttons joined cf')
-              .selectAll('button')
-              .data(['previous', 'next'])
-              .enter()
-              .append('button')
-              .text(function(d) { return t('save.conflict.' + d); })
-              .attr('class', 'conflict-nav-button action col6')
-              .attr('disabled', function(d, i) {
-                  return (i === 0 && index === 0) ||
-                      (i === 1 && index === _conflictList.length - 1) || null;
-              })
-              .on('click', function(d, i) {
-                  event.preventDefault();
+      mode.activeID = function() {
+          if (!arguments.length) return _activeEntity && _activeEntity.id;
+          // no assign
+          return mode;
+      };
 
-                  var container = parent.selectAll('.conflict-container');
-                  var sign = (i === 0 ? -1 : 1);
 
-                  container
-                      .selectAll('.conflict')
-                      .remove();
+      mode.restoreSelectedIDs = function(_) {
+          if (!arguments.length) return _restoreSelectedIDs;
+          _restoreSelectedIDs = _;
+          return mode;
+      };
 
-                  container
-                      .call(showConflict, index + sign);
-              });
 
-      }
+      mode.behavior = drag;
 
 
-      function addChoices(selection$$1) {
-          var choices = selection$$1
-              .append('ul')
-              .attr('class', 'layer-list')
-              .selectAll('li')
-              .data(function(d) { return d.choices || []; });
+      return mode;
+  }
 
-          // enter
-          var choicesEnter = choices.enter()
-              .append('li')
-              .attr('class', 'layer');
+  function modeDragNote(context) {
+      var mode = {
+          id: 'drag-note',
+          button: 'browse'
+      };
 
-          var labelEnter = choicesEnter
-              .append('label');
+      var edit = behaviorEdit(context);
 
-          labelEnter
-              .append('input')
-              .attr('type', 'radio')
-              .attr('name', function(d) { return d.id; })
-              .on('change', function(d, i) {
-                  var ul = this.parentNode.parentNode.parentNode;
-                  ul.__data__.chosen = i;
-                  choose(ul, d);
-              });
+      var _nudgeInterval;
+      var _lastLoc;
+      var _note;    // most current note.. dragged note may have stale datum.
 
-          labelEnter
-              .append('span')
-              .text(function(d) { return d.text; });
 
-          // update
-          choicesEnter
-              .merge(choices)
-              .each(function(d, i) {
-                  var ul = this.parentNode;
-                  if (ul.__data__.chosen === i) {
-                      choose(ul, d);
-                  }
-              });
+      function startNudge(nudge) {
+          if (_nudgeInterval) window.clearInterval(_nudgeInterval);
+          _nudgeInterval = window.setInterval(function() {
+              context.pan(nudge);
+              doMove(nudge);
+          }, 50);
       }
 
 
-      function choose(ul, datum) {
-          if (event) event.preventDefault();
+      function stopNudge() {
+          if (_nudgeInterval) {
+              window.clearInterval(_nudgeInterval);
+              _nudgeInterval = null;
+          }
+      }
 
-          select(ul)
-              .selectAll('li')
-              .classed('active', function(d) { return d === datum; })
-              .selectAll('input')
-              .property('checked', function(d) { return d === datum; });
 
-          var extent = geoExtent$$1();
-          var entity;
+      function origin(note) {
+          return context.projection(note.loc);
+      }
 
-          entity = context.graph().hasEntity(datum.id);
-          if (entity) extent._extend(entity.extent(context.graph()));
 
-          datum.action();
+      function start(note) {
+          _note = note;
+          var osm = services.osm;
+          if (osm) {
+              // Get latest note from cache.. The marker may have a stale datum bound to it
+              // and dragging it around can sometimes delete the users note comment.
+              _note = osm.getNote(_note.id);
+          }
 
-          entity = context.graph().hasEntity(datum.id);
-          if (entity) extent._extend(entity.extent(context.graph()));
+          context.surface().selectAll('.note-' + _note.id)
+              .classed('active', true);
 
-          zoomToEntity(datum.id, extent);
+          context.perform(actionNoop());
+          context.enter(mode);
+          context.selectedNoteID(_note.id);
       }
 
 
-      function zoomToEntity(id, extent) {
-          context.surface().selectAll('.hover')
-              .classed('hover', false);
+      function move() {
+          event.sourceEvent.stopPropagation();
+          _lastLoc = context.projection.invert(event.point);
 
-          var entity = context.graph().hasEntity(id);
-          if (entity) {
-              if (extent) {
-                  context.map().trimmedExtent(extent);
-              } else {
-                  context.map().zoomToEase(entity);
-              }
-              context.surface().selectAll(utilEntityOrMemberSelector([entity.id], context.graph()))
-                  .classed('hover', true);
+          doMove();
+          var nudge = geoViewportEdge(event.point, context.map().dimensions());
+          if (nudge) {
+              startNudge(nudge);
+          } else {
+              stopNudge();
           }
       }
 
 
-      // The conflict list should be an array of objects like:
-      // {
-      //     id: id,
-      //     name: entityName(local),
-      //     details: merge.conflicts(),
-      //     chosen: 1,
-      //     choices: [
-      //         choice(id, keepMine, forceLocal),
-      //         choice(id, keepTheirs, forceRemote)
-      //     ]
-      // }
-      conflicts.conflictList = function(_) {
-          if (!arguments.length) return _conflictList;
-          _conflictList = _;
-          return conflicts;
-      };
-
-
-      conflicts.origChanges = function(_) {
-          if (!arguments.length) return _origChanges;
-          _origChanges = _;
-          return conflicts;
-      };
-
-
-      return utilRebind(conflicts, dispatch$$1, 'on');
-  }
-
-  function uiDataEditor$$1(context) {
-      var dataHeader = uiDataHeader();
-      var quickLinks = uiQuickLinks();
-      var rawTagEditor = uiRawTagEditor$$1(context);
-      var _datum;
-
+      function doMove(nudge) {
+          nudge = nudge || [0, 0];
 
-      function dataEditor(selection) {
-          // quick links
-          var choices = [{
-              id: 'zoom_to',
-              label: 'inspector.zoom_to.title',
-              tooltip: function() {
-                  return uiTooltipHtml(t('inspector.zoom_to.tooltip_data'), t('inspector.zoom_to.key'));
-              },
-              click: function zoomTo() {
-                  context.mode().zoomToSelected();
-              }
-          }];
+          var currPoint = (event && event.point) || context.projection(_lastLoc);
+          var currMouse = geoVecSubtract(currPoint, nudge);
+          var loc = context.projection.invert(currMouse);
 
+          _note = _note.move(loc);
 
-          var header = selection.selectAll('.header')
-              .data([0]);
+          var osm = services.osm;
+          if (osm) {
+              osm.replaceNote(_note);  // update note cache
+          }
 
-          var headerEnter = header.enter()
-              .append('div')
-              .attr('class', 'header fillL');
+          context.replace(actionNoop());   // trigger redraw
+      }
 
-          headerEnter
-              .append('button')
-              .attr('class', 'fr data-editor-close')
-              .on('click', function() {
-                  context.enter(modeBrowse(context));
-              })
-              .call(svgIcon('#iD-icon-close'));
 
-          headerEnter
-              .append('h3')
-              .text(t('map_data.title'));
+      function end() {
+          context.replace(actionNoop());   // trigger redraw
 
+          context
+              .selectedNoteID(_note.id)
+              .enter(modeSelectNote(context, _note.id));
+      }
 
-          var body = selection.selectAll('.body')
-              .data([0]);
 
-          body = body.enter()
-              .append('div')
-              .attr('class', 'body')
-              .merge(body);
+      var drag = behaviorDrag()
+          .selector('.layer-touch.markers .target.note.new')
+          .surface(select('#map').node())
+          .origin(origin)
+          .on('start', start)
+          .on('move', move)
+          .on('end', end);
 
-          var editor = body.selectAll('.data-editor')
-              .data([0]);
 
-          editor.enter()
-              .append('div')
-              .attr('class', 'modal-section data-editor')
-              .merge(editor)
-              .call(dataHeader.datum(_datum))
-              .call(quickLinks.choices(choices));
+      mode.enter = function() {
+          context.install(edit);
+      };
 
-          var rte = body.selectAll('.raw-tag-editor')
-              .data([0]);
 
-          rte.enter()
-              .append('div')
-              .attr('class', 'raw-tag-editor inspector-inner data-editor')
-              .merge(rte)
-              .call(rawTagEditor
-                  .expanded(true)
-                  .readOnlyTags([/./])
-                  .tags((_datum && _datum.properties) || {})
-                  .state('hover')
-              );
-      }
+      mode.exit = function() {
+          context.ui().sidebar.hover.cancel();
+          context.uninstall(edit);
 
+          context.surface()
+              .selectAll('.active')
+              .classed('active', false);
 
-      dataEditor.datum = function(val) {
-          if (!arguments.length) return _datum;
-          _datum = val;
-          return this;
+          stopNudge();
       };
 
+      mode.behavior = drag;
 
-      return dataEditor;
+      return mode;
   }
 
-  function uiDataHeader() {
-      var _datum;
+  function modeBrowse(context) {
+      var mode = {
+          button: 'browse',
+          id: 'browse',
+          title: t('modes.browse.title'),
+          description: t('modes.browse.description')
+      }, sidebar;
 
+      var behaviors = [
+          behaviorPaste(context),
+          behaviorHover(context).on('hover', context.ui().sidebar.hover),
+          behaviorSelect(context),
+          behaviorLasso(context),
+          modeDragNode(context).behavior,
+          modeDragNote(context).behavior
+      ];
 
-      function dataHeader(selection) {
-          var header = selection.selectAll('.data-header')
-              .data(
-                  (_datum ? [_datum] : []),
-                  function(d) { return d.__featurehash__; }
-              );
 
-          header.exit()
-              .remove();
+      mode.enter = function() {
+          behaviors.forEach(context.install);
 
-          var headerEnter = header.enter()
-              .append('div')
-              .attr('class', 'data-header');
+          // Get focus on the body.
+          if (document.activeElement && document.activeElement.blur) {
+              document.activeElement.blur();
+          }
 
-          var iconEnter = headerEnter
-              .append('div')
-              .attr('class', 'data-header-icon');
+          if (sidebar) {
+              context.ui().sidebar.show(sidebar);
+          } else {
+              context.ui().sidebar.select(null);
+          }
+      };
 
-          iconEnter
-              .append('div')
-              .attr('class', 'preset-icon-28')
-              .call(svgIcon('#iD-icon-data', 'note-fill'));
 
-          headerEnter
-              .append('div')
-              .attr('class', 'data-header-label')
-              .text(t('map_data.layers.custom.title'));
-      }
+      mode.exit = function() {
+          context.ui().sidebar.hover.cancel();
+          behaviors.forEach(context.uninstall);
+
+          if (sidebar) {
+              context.ui().sidebar.hide();
+          }
+      };
 
 
-      dataHeader.datum = function(val) {
-          if (!arguments.length) return _datum;
-          _datum = val;
-          return this;
+      mode.sidebar = function(_) {
+          if (!arguments.length) return sidebar;
+          sidebar = _;
+          return mode;
       };
 
 
-      return dataHeader;
+      return mode;
   }
 
-  function uiEditMenu(context, operations) {
-      var menu;
-      var center = [0, 0];
-      var offset = [0, 0];
-      var tooltip;
+  function modeDrawArea(context, wayId, startGraph, baselineGraph) {
+      var mode = {
+          button: 'area',
+          id: 'draw-area'
+      };
 
-      var p = 8;               // top padding
-      var m = 4;               // top margin
-      var h = 15;              // height of icon
-      var vpBottomMargin = 45; // viewport bottom margin
-      var vpSideMargin = 35;   // viewport side margin
-      var buttonWidth = 44;
-      var buttonHeight = (2 * p + h);
-      var menuWidth = buttonWidth;
-      var menuHeight = (2 * m) + operations.length * buttonHeight;
-      var menuSideMargin = 10;
-      var tooltipWidth = 200;
-      var tooltipHeight = 200;  // a reasonable guess, real height depends on tooltip contents
+      var behavior;
 
 
-      var editMenu = function (selection$$1) {
-          if (!operations.length) return;
+      mode.enter = function() {
+          var way = context.entity(wayId);
 
-          selection$$1.node().parentNode.focus();
+          behavior = behaviorDrawWay(context, wayId, undefined, mode, startGraph, baselineGraph)
+              .tail(t('modes.draw_area.tail'));
 
-          var isRTL = textDirection === 'rtl';
-          var viewport = context.surfaceRect();
+          var addNode = behavior.addNode;
 
-          if (!isRTL && (center[0] + menuSideMargin + menuWidth) > (viewport.width - vpSideMargin)) {
-              // menu is going left-to-right and near right viewport edge, go left instead
-              isRTL = true;
-          } else if (isRTL && (center[0] - menuSideMargin - menuWidth) < vpSideMargin) {
-              // menu is going right-to-left and near left viewport edge, go right instead
-              isRTL = false;
-          }
+          behavior.addNode = function(node, d) {
+              var length = way.nodes.length;
+              var penultimate = length > 2 ? way.nodes[length - 2] : null;
 
-          offset[0] = (isRTL ? -1 * (menuSideMargin + menuWidth) : menuSideMargin);
+              if (node.id === way.first() || node.id === penultimate) {
+                  behavior.finish();
+              } else {
+                  addNode(node, d);
+              }
+          };
 
-          if (center[1] + menuHeight > (viewport.height - vpBottomMargin)) {
-              // menu is near bottom viewport edge, shift upwards
-              offset[1] = -1 * (center[1] + menuHeight - viewport.height + vpBottomMargin);
-          }
+          context.install(behavior);
+      };
 
-          var origin = [ center[0] + offset[0], center[1] + offset[1] ];
 
-          menu = selection$$1
-              .append('g')
-              .attr('class', 'edit-menu')
-              .attr('transform', 'translate(' + origin + ')')
-              .attr('opacity', 0);
+      mode.exit = function() {
+          context.uninstall(behavior);
+      };
 
-          menu
-              .transition()
-              .attr('opacity', 1);
 
-          menu
-              .append('rect')
-              .attr('class', 'edit-menu-background')
-              .attr('x', 4)
-              .attr('rx', 4)
-              .attr('ry', 4)
-              .attr('width', menuWidth)
-              .attr('height', menuHeight)
-              .attr('stroke-linecap', 'round');
+      mode.selectedIDs = function() {
+          return [wayId];
+      };
 
 
-          var button = menu.selectAll('.edit-menu-item')
-              .data(operations)
-              .enter()
-              .append('g')
-              .attr('class', function (d) { return 'edit-menu-item edit-menu-item-' + d.id; })
-              .classed('disabled', function (d) { return d.disabled(); })
-              .attr('transform', function (d, i) {
-                  return 'translate(' + geoVecFloor([
-                      0,
-                      m + i * buttonHeight
-                  ]).join(',') + ')';
-              });
+      mode.activeID = function() {
+          return (behavior && behavior.activeID()) || [];
+      };
 
-          button
-              .append('rect')
-              .attr('x', 4)
-              .attr('width', buttonWidth)
-              .attr('height', buttonHeight)
-              .on('click', click)
-              .on('mousedown', mousedown)
-              .on('mouseover', mouseover)
-              .on('mouseout', mouseout);
 
-          button
-              .append('use')
-              .attr('width', '20')
-              .attr('height', '20')
-              .attr('transform', function () { return 'translate(' + [2 * p, 5] + ')'; })
-              .attr('xlink:href', function (d) { return '#iD-operation-' + d.id; });
+      return mode;
+  }
 
-          tooltip = select('#id-container')
-              .append('div')
-              .attr('class', 'tooltip-inner edit-menu-tooltip');
+  function modeDrawLine(context, wayID, startGraph, baselineGraph, affix, continuing) {
+      var mode = {
+          button: 'line',
+          id: 'draw-line'
+      };
 
+      var behavior;
 
-          function click(operation) {
-              event.stopPropagation();
-              if (operation.disabled()) return;
-              operation();
-              editMenu.close();
-          }
+      mode.isContinuing = continuing;
 
-          function mousedown() {
-              event.stopPropagation();  // https://github.com/openstreetmap/iD/issues/1869
-          }
+      mode.enter = function() {
+          var way = context.entity(wayID);
+          var index = (affix === 'prefix') ? 0 : undefined;
+          var headID = (affix === 'prefix') ? way.first() : way.last();
 
-          function mouseover(d, i) {
-              var tipX, tipY;
+          behavior = behaviorDrawWay(context, wayID, index, mode, startGraph, baselineGraph)
+              .tail(t('modes.draw_line.tail'));
 
-              if (!isRTL) {
-                  tipX = viewport.left + origin[0] + menuSideMargin + menuWidth;
+          var addNode = behavior.addNode;
+          behavior.addNode = function(node, d) {
+              if (node.id === headID) {
+                  behavior.finish();
               } else {
-                  tipX = viewport.left + origin[0] - 4 - tooltipWidth;
-              }
-
-              if (tipX + tooltipWidth > viewport.right) {
-                  // tip is going left-to-right and near right viewport edge, go left instead
-                  tipX = viewport.left + origin[0] - 4 - tooltipWidth;
-              } else if (tipX < viewport.left) {
-                  // tip is going right-to-left and near left viewport edge, go right instead
-                  tipX = viewport.left + origin[0] + menuSideMargin + menuWidth;
+                  addNode(node, d);
               }
+          };
 
-              tipY = viewport.top + origin[1] + (i * buttonHeight);
-              if (tipY + tooltipHeight > viewport.bottom) {
-                  // tip is near bottom viewport edge, shift upwards
-                  tipY -= tipY + tooltipHeight - viewport.bottom;
-              }
+          context.install(behavior);
+      };
 
-              tooltip
-                  .style('left', tipX + 'px')
-                  .style('top', tipY + 'px')
-                  .style('display', 'block')
-                  .html(uiTooltipHtml(d.tooltip(), d.keys[0], d.title));
-          }
 
-          function mouseout() {
-              tooltip.style('display', 'none');
-          }
+      mode.exit = function() {
+          context.uninstall(behavior);
       };
 
 
-      editMenu.close = function () {
-          if (menu) {
-              menu
-                  .style('pointer-events', 'none')
-                  .transition()
-                  .attr('opacity', 0)
-                  .remove();
-          }
-
-          if (tooltip) {
-              tooltip.remove();
-          }
+      mode.selectedIDs = function() {
+          return [wayID];
       };
 
 
-      editMenu.center = function (_) {
-          if (!arguments.length) return center;
-          center = _;
-          return editMenu;
+      mode.activeID = function() {
+          return (behavior && behavior.activeID()) || [];
       };
 
-
-      return editMenu;
+      return mode;
   }
 
-  // This currently only works with the 'restrictions' field
-  // It borrows some code from uiHelp
-
-  function uiFieldHelp(context, fieldName) {
-      var fieldHelp = {};
-      var _inspector = select(null);
-      var _wrap = select(null);
-      var _body = select(null);
-
-      var fieldHelpKeys = {
-          restrictions: [
-              ['about',[
-                  'about',
-                  'from_via_to',
-                  'maxdist',
-                  'maxvia'
-              ]],
-              ['inspecting',[
-                  'about',
-                  'from_shadow',
-                  'allow_shadow',
-                  'restrict_shadow',
-                  'only_shadow',
-                  'restricted',
-                  'only'
-              ]],
-              ['modifying',[
-                  'about',
-                  'indicators',
-                  'allow_turn',
-                  'restrict_turn',
-                  'only_turn'
-              ]],
-              ['tips',[
-                  'simple',
-                  'simple_example',
-                  'indirect',
-                  'indirect_example',
-                  'indirect_noedit'
-              ]]
-          ]
+  function modeMove(context, entityIDs, baseGraph) {
+      var mode = {
+          id: 'move',
+          button: 'browse'
       };
 
-      var fieldHelpHeadings = {};
-
-      var replacements = {
-          distField: t('restriction.controls.distance'),
-          viaField: t('restriction.controls.via'),
-          fromShadow: icon('#iD-turn-shadow', 'pre-text shadow from'),
-          allowShadow: icon('#iD-turn-shadow', 'pre-text shadow allow'),
-          restrictShadow: icon('#iD-turn-shadow', 'pre-text shadow restrict'),
-          onlyShadow: icon('#iD-turn-shadow', 'pre-text shadow only'),
-          allowTurn: icon('#iD-turn-yes', 'pre-text turn'),
-          restrictTurn: icon('#iD-turn-no', 'pre-text turn'),
-          onlyTurn: icon('#iD-turn-only', 'pre-text turn')
-      };
+      var keybinding = utilKeybinding('move');
+      var behaviors = [
+          behaviorEdit(context),
+          operationCircularize(entityIDs, context).behavior,
+          operationDelete(entityIDs, context).behavior,
+          operationOrthogonalize(entityIDs, context).behavior,
+          operationReflectLong(entityIDs, context).behavior,
+          operationReflectShort(entityIDs, context).behavior,
+          operationRotate(entityIDs, context).behavior
+      ];
+      var annotation = entityIDs.length === 1 ?
+          t('operations.move.annotation.' + context.geometry(entityIDs[0])) :
+          t('operations.move.annotation.multiple');
 
+      var _prevGraph;
+      var _cache;
+      var _origin;
+      var _nudgeInterval;
 
-      // For each section, squash all the texts into a single markdown document
-      var docs = fieldHelpKeys[fieldName].map(function(key) {
-          var helpkey = 'help.field.' + fieldName + '.' + key[0];
-          var text = key[1].reduce(function(all, part) {
-              var subkey = helpkey + '.' + part;
-              var depth = fieldHelpHeadings[subkey];                     // is this subkey a heading?
-              var hhh = depth ? Array(depth + 1).join('#') + ' ' : '';   // if so, prepend with some ##'s
-              return all + hhh + t(subkey, replacements) + '\n\n';
-          }, '');
 
-          return {
-              key: helpkey,
-              title: t(helpkey + '.title'),
-              html: marked(text.trim())
-          };
-      });
+      function doMove(nudge) {
+          nudge = nudge || [0, 0];
 
+          var fn;
+          if (_prevGraph !== context.graph()) {
+              _cache = {};
+              _origin = context.map().mouseCoordinates();
+              fn = context.perform;
+          } else {
+              fn = context.overwrite;
+          }
 
-      function show() {
-          updatePosition();
+          var currMouse = context.mouse();
+          var origMouse = context.projection(_origin);
+          var delta = geoVecSubtract(geoVecSubtract(currMouse, origMouse), nudge);
 
-          _body
-              .classed('hide', false)
-              .style('opacity', '0')
-              .transition()
-              .duration(200)
-              .style('opacity', '1');
+          fn(actionMove(entityIDs, delta, context.projection, _cache));
+          _prevGraph = context.graph();
       }
 
 
-      function hide() {
-          _body
-              .classed('hide', true)
-              .transition()
-              .duration(200)
-              .style('opacity', '0')
-              .on('end', function () {
-                  _body.classed('hide', true);
-              });
+      function startNudge(nudge) {
+          if (_nudgeInterval) window.clearInterval(_nudgeInterval);
+          _nudgeInterval = window.setInterval(function() {
+              context.pan(nudge);
+              doMove(nudge);
+          }, 50);
       }
 
 
-      function clickHelp(index) {
-          var d = docs[index];
-          var tkeys = fieldHelpKeys[fieldName][index][1];
+      function stopNudge() {
+          if (_nudgeInterval) {
+              window.clearInterval(_nudgeInterval);
+              _nudgeInterval = null;
+          }
+      }
 
-          _body.selectAll('.field-help-nav-item')
-              .classed('active', function(d, i) { return i === index; });
 
-          var content = _body.selectAll('.field-help-content')
-              .html(d.html);
+      function move() {
+          doMove();
+          var nudge = geoViewportEdge(context.mouse(), context.map().dimensions());
+          if (nudge) {
+              startNudge(nudge);
+          } else {
+              stopNudge();
+          }
+      }
 
-          // class the paragraphs so we can find and style them
-          content.selectAll('p')
-              .attr('class', function(d, i) { return tkeys[i]; });
 
-          // insert special content for certain help sections
-          if (d.key === 'help.field.restrictions.inspecting') {
-              content
-                  .insert('img', 'p.from_shadow')
-                  .attr('class', 'field-help-image cf')
-                  .attr('src', context.imagePath('tr_inspect.gif'));
+      function finish() {
+          event.stopPropagation();
+          context.replace(actionNoop(), annotation);
+          context.enter(modeSelect(context, entityIDs));
+          stopNudge();
+      }
 
-          } else if (d.key === 'help.field.restrictions.modifying') {
-              content
-                  .insert('img', 'p.allow_turn')
-                  .attr('class', 'field-help-image cf')
-                  .attr('src', context.imagePath('tr_modify.gif'));
+
+      function cancel() {
+          if (baseGraph) {
+              while (context.graph() !== baseGraph) context.pop();
+              context.enter(modeBrowse(context));
+          } else {
+              context.pop();
+              context.enter(modeSelect(context, entityIDs));
           }
+          stopNudge();
       }
 
 
-      fieldHelp.button = function(selection$$1) {
-          if (_body.empty()) return;
-
-          var button = selection$$1.selectAll('.field-help-button')
-              .data([0]);
+      function undone() {
+          context.enter(modeBrowse(context));
+      }
 
-          // enter/update
-          button.enter()
-              .append('button')
-              .attr('class', 'field-help-button')
-              .attr('tabindex', -1)
-              .call(svgIcon('#iD-icon-help'))
-              .merge(button)
-              .on('click', function () {
-                  event.stopPropagation();
-                  event.preventDefault();
-                  if (_body.classed('hide')) {
-                      show();
-                  } else {
-                      hide();
-                  }
-              });
-      };
 
+      mode.enter = function() {
+          _origin = context.map().mouseCoordinates();
+          _prevGraph = null;
+          _cache = {};
 
-      function updatePosition() {
-          var wrap = _wrap.node();
-          var inspector = _inspector.node();
-          var wRect = wrap.getBoundingClientRect();
-          var iRect = inspector.getBoundingClientRect();
+          context.features().forceVisible(entityIDs);
 
-          _body
-              .style('top', wRect.top + inspector.scrollTop - iRect.top + 'px');
-      }
+          behaviors.forEach(context.install);
 
+          context.surface()
+              .on('mousemove.move', move)
+              .on('click.move', finish);
 
-      fieldHelp.body = function(selection$$1) {
-          // This control expects the field to have a form-field-input-wrap div
-          _wrap = selection$$1.selectAll('.form-field-input-wrap');
-          if (_wrap.empty()) return;
+          context.history()
+              .on('undone.move', undone);
 
-          // absolute position relative to the inspector, so it "floats" above the fields
-          _inspector = select('#sidebar .entity-editor-pane .inspector-body');
-          if (_inspector.empty()) return;
+          keybinding
+              .on('⎋', cancel)
+              .on('↩', finish);
 
-          _body = _inspector.selectAll('.field-help-body')
-              .data([0]);
+          select(document)
+              .call(keybinding);
+      };
 
-          var enter = _body.enter()
-              .append('div')
-              .attr('class', 'field-help-body hide');   // initially hidden
 
-          var titleEnter = enter
-              .append('div')
-              .attr('class', 'field-help-title cf');
+      mode.exit = function() {
+          stopNudge();
 
-          titleEnter
-              .append('h2')
-              .attr('class', ((textDirection === 'rtl') ? 'fr' : 'fl'))
-              .text(t('help.field.' + fieldName + '.title'));
+          behaviors.forEach(function(behavior) {
+              context.uninstall(behavior);
+          });
 
-          titleEnter
-              .append('button')
-              .attr('class', 'fr close')
-              .on('click', function() {
-                  event.stopPropagation();
-                  event.preventDefault();
-                  hide();
-              })
-              .call(svgIcon('#iD-icon-close'));
+          context.surface()
+              .on('mousemove.move', null)
+              .on('click.move', null);
 
-          var navEnter = enter
-              .append('div')
-              .attr('class', 'field-help-nav cf');
+          context.history()
+              .on('undone.move', null);
 
-          var titles = docs.map(function(d) { return d.title; });
-          navEnter.selectAll('.field-help-nav-item')
-              .data(titles)
-              .enter()
-              .append('div')
-              .attr('class', 'field-help-nav-item')
-              .text(function(d) { return d; })
-              .on('click', function(d, i) {
-                  event.stopPropagation();
-                  event.preventDefault();
-                  clickHelp(i);
-              });
+          select(document)
+              .call(keybinding.unbind);
 
-          enter
-              .append('div')
-              .attr('class', 'field-help-content');
+          context.features().forceVisible([]);
+      };
 
-          _body = _body
-              .merge(enter);
 
-          clickHelp(0);
+      mode.selectedIDs = function() {
+          if (!arguments.length) return entityIDs;
+          // no assign
+          return mode;
       };
 
 
-      return fieldHelp;
+      return mode;
   }
 
-  function uiFieldCheck(field, context) {
-      var dispatch$$1 = dispatch('change');
-      var options = field.strings && field.strings.options;
-      var values = [];
-      var texts = [];
+  function modeRotate(context, entityIDs) {
+      var mode = {
+          id: 'rotate',
+          button: 'browse'
+      };
 
-      var input = select(null);
-      var text = select(null);
-      var label = select(null);
-      var reverser = select(null);
+      var keybinding = utilKeybinding('rotate');
+      var behaviors = [
+          behaviorEdit(context),
+          operationCircularize(entityIDs, context).behavior,
+          operationDelete(entityIDs, context).behavior,
+          operationMove(entityIDs, context).behavior,
+          operationOrthogonalize(entityIDs, context).behavior,
+          operationReflectLong(entityIDs, context).behavior,
+          operationReflectShort(entityIDs, context).behavior
+      ];
+      var annotation = entityIDs.length === 1 ?
+          t('operations.rotate.annotation.' + context.geometry(entityIDs[0])) :
+          t('operations.rotate.annotation.multiple');
 
-      var _impliedYes;
-      var _entityID;
-      var _value;
+      var _prevGraph;
+      var _prevAngle;
+      var _prevTransform;
+      var _pivot;
 
 
-      if (options) {
-          for (var k in options) {
-              values.push(k === 'undefined' ? undefined : k);
-              texts.push(field.t('options.' + k, { 'default': options[k] }));
-          }
-      } else {
-          values = [undefined, 'yes'];
-          texts = [t('inspector.unknown'), t('inspector.check.yes')];
-          if (field.type !== 'defaultCheck') {
-              values.push('no');
-              texts.push(t('inspector.check.no'));
+      function doRotate() {
+          var fn;
+          if (context.graph() !== _prevGraph) {
+              fn = context.perform;
+          } else {
+              fn = context.replace;
           }
-      }
 
+          // projection changed, recalculate _pivot
+          var projection = context.projection;
+          var currTransform = projection.transform();
+          if (!_prevTransform ||
+              currTransform.k !== _prevTransform.k ||
+              currTransform.x !== _prevTransform.x ||
+              currTransform.y !== _prevTransform.y) {
 
-      // Checks tags to see whether an undefined value is "Assumed to be Yes"
-      function checkImpliedYes() {
-          _impliedYes = (field.id === 'oneway_yes');
+              var nodes = utilGetAllNodes(entityIDs, context.graph());
+              var points = nodes.map(function(n) { return projection(n.loc); });
 
-          // hack: pretend `oneway` field is a `oneway_yes` field
-          // where implied oneway tag exists (e.g. `junction=roundabout`) #2220, #1841
-          if (field.id === 'oneway') {
-              var entity = context.entity(_entityID);
-              for (var key in entity.tags) {
-                  if (key in osmOneWayTags && (entity.tags[key] in osmOneWayTags[key])) {
-                      _impliedYes = true;
-                      texts[0] = t('presets.fields.oneway_yes.options.undefined');
-                      break;
-                  }
+              if (points.length === 1) {  // degenerate case
+                  _pivot = points[0];
+              } else if (points.length === 2) {
+                  _pivot = geoVecInterp(points[0], points[1], 0.5);
+              } else {
+                  _pivot = d3_polygonCentroid(d3_polygonHull(points));
               }
+              _prevAngle = undefined;
           }
-      }
 
 
-      function reverserHidden() {
-          if (!select('div.inspector-hover').empty()) return true;
-          return !(_value === 'yes' || (_impliedYes && !_value));
+          var currMouse = context.mouse();
+          var currAngle = Math.atan2(currMouse[1] - _pivot[1], currMouse[0] - _pivot[0]);
+
+          if (typeof _prevAngle === 'undefined') _prevAngle = currAngle;
+          var delta = currAngle - _prevAngle;
+
+          fn(actionRotate(entityIDs, _pivot, delta, projection));
+
+          _prevTransform = currTransform;
+          _prevAngle = currAngle;
+          _prevGraph = context.graph();
       }
 
 
-      function reverserSetText(selection$$1) {
-          var entity = context.hasEntity(_entityID);
-          if (reverserHidden() || !entity) return selection$$1;
+      function finish() {
+          event.stopPropagation();
+          context.replace(actionNoop(), annotation);
+          context.enter(modeSelect(context, entityIDs));
+      }
 
-          var first = entity.first();
-          var last = entity.isClosed() ? entity.nodes[entity.nodes.length - 2] : entity.last();
-          var pseudoDirection = first < last;
-          var icon = pseudoDirection ? '#iD-icon-forward' : '#iD-icon-backward';
 
-          selection$$1.selectAll('.reverser-span')
-              .text(t('inspector.check.reverser'))
-              .call(svgIcon(icon, 'inline'));
+      function cancel() {
+          context.pop();
+          context.enter(modeSelect(context, entityIDs));
+      }
 
-          return selection$$1;
+
+      function undone() {
+          context.enter(modeBrowse(context));
       }
 
 
-      var check = function(selection$$1) {
-          checkImpliedYes();
+      mode.enter = function() {
+          context.features().forceVisible(entityIDs);
 
-          label = selection$$1.selectAll('.form-field-input-wrap')
-              .data([0]);
+          behaviors.forEach(context.install);
 
-          var enter = label.enter()
-              .append('label')
-              .attr('class', 'form-field-input-wrap form-field-input-check');
+          context.surface()
+              .on('mousemove.rotate', doRotate)
+              .on('click.rotate', finish);
 
-          enter
-              .append('input')
-              .property('indeterminate', field.type !== 'defaultCheck')
-              .attr('type', 'checkbox')
-              .attr('id', 'preset-input-' + field.safeid);
+          context.history()
+              .on('undone.rotate', undone);
 
-          enter
-              .append('span')
-              .text(texts[0])
-              .attr('class', 'value');
+          keybinding
+              .on('⎋', cancel)
+              .on('↩', finish);
 
-          if (field.type === 'onewayCheck') {
-              enter
-                  .append('a')
-                  .attr('id', 'preset-input-' + field.safeid + '-reverser')
-                  .attr('class', 'reverser button' + (reverserHidden() ? ' hide' : ''))
-                  .attr('href', '#')
-                  .append('span')
-                  .attr('class', 'reverser-span');
-          }
+          select(document)
+              .call(keybinding);
+      };
 
-          label = label.merge(enter);
-          input = label.selectAll('input');
-          text = label.selectAll('span.value');
 
-          input
-              .on('click', function() {
-                  event.stopPropagation();
-                  var t$$1 = {};
-                  t$$1[field.key] = values[(values.indexOf(_value) + 1) % values.length];
+      mode.exit = function() {
+          behaviors.forEach(context.uninstall);
 
-                  // Don't cycle through `alternating` or `reversible` states - #4970
-                  // (They are supported as translated strings, but should not toggle with clicks)
-                  if (t$$1[field.key] === 'reversible' || t$$1[field.key] === 'alternating') {
-                      t$$1[field.key] = values[0];
-                  }
+          context.surface()
+              .on('mousemove.rotate', null)
+              .on('click.rotate', null);
 
-                  dispatch$$1.call('change', this, t$$1);
-              });
+          context.history()
+              .on('undone.rotate', null);
 
-          if (field.type === 'onewayCheck') {
-              reverser = label.selectAll('.reverser');
+          select(document)
+              .call(keybinding.unbind);
 
-              reverser
-                  .call(reverserSetText)
-                  .on('click', function() {
-                      event.preventDefault();
-                      event.stopPropagation();
-                      context.perform(
-                          actionReverse(_entityID),
-                          t('operations.reverse.annotation')
-                      );
-                      select(this)
-                          .call(reverserSetText);
-                  });
-          }
+          context.features().forceVisible([]);
       };
 
 
-      check.entity = function(_) {
-          if (!arguments.length) return context.hasEntity(_entityID);
-          _entityID = _.id;
-          return check;
+      mode.selectedIDs = function() {
+          if (!arguments.length) return entityIDs;
+          // no assign
+          return mode;
       };
 
 
-      check.tags = function(tags) {
+      return mode;
+  }
 
-          function isChecked(val) {
-              return val !== 'no' && val !== '' && val !== undefined && val !== null;
+  var _isSaving = false;
+
+
+  function modeSave(context) {
+      var mode = { id: 'save' };
+      var keybinding = utilKeybinding('modeSave');
+
+      var loading = uiLoading(context)
+          .message(t('save.uploading'))
+          .blocking(true);
+
+      var commit = uiCommit(context)
+          .on('cancel', cancel)
+          .on('save', save);
+
+      var _toCheck = [];
+      var _toLoad = [];
+      var _loaded = {};
+      var _toLoadCount = 0;
+      var _toLoadTotal = 0;
+
+      var _conflicts = [];
+      var _errors = [];
+      var _origChanges;
+      var _location;
+
+
+      function cancel(selectedID) {
+          if (selectedID) {
+              context.enter(modeSelect(context, [selectedID]));
+          } else {
+              context.enter(modeBrowse(context));
+          }
+      }
+
+
+      function save(changeset, tryAgain, checkConflicts) {
+          // Guard against accidentally entering save code twice - #4641
+          if (_isSaving && !tryAgain) {
+              return;
+          }
+
+          var osm = context.connection();
+          if (!osm) {
+              cancel();
+              return;
+          }
+
+          // If user somehow got logged out mid-save, try to reauthenticate..
+          // This can happen if they were logged in from before, but the tokens are no longer valid.
+          if (!osm.authenticated()) {
+              osm.authenticate(function(err) {
+                  if (err) {
+                      cancel();   // quit save mode..
+                  } else {
+                      save(changeset, tryAgain, checkConflicts);  // continue where we left off..
+                  }
+              });
+              return;
+          }
+
+          if (!_isSaving) {
+              keybindingOff();
+              context.container().call(loading);  // block input
+              _isSaving = true;
+          }
+
+          var history = context.history();
+          var localGraph = context.graph();
+          var remoteGraph = coreGraph(history.base(), true);
+
+          _conflicts = [];
+          _errors = [];
+
+          // Store original changes, in case user wants to download them as an .osc file
+          _origChanges = history.changes(actionDiscardTags(history.difference()));
+
+          // First time, `history.perform` a no-op action.
+          // Any conflict resolutions will be done as `history.replace`
+          if (!tryAgain) {
+              history.perform(actionNoop());
+          }
+
+          // Attempt a fast upload.. If there are conflicts, re-enter with `checkConflicts = true`
+          if (!checkConflicts) {
+              upload(changeset);
+
+          // Do the full (slow) conflict check..
+          } else {
+              var modified = filter(history.difference().summary(), { changeType: 'modified' });
+              _toCheck = map$3(map$3(modified, 'entity'), 'id');
+              _toLoad = withChildNodes(_toCheck, localGraph);
+              _loaded = {};
+              _toLoadCount = 0;
+              _toLoadTotal = _toLoad.length;
+
+              if (_toCheck.length) {
+                  showProgress(_toLoadCount, _toLoadTotal);
+                  _toLoad.forEach(function(id) { _loaded[id] = false; });
+                  osm.loadMultiple(_toLoad, loaded);
+              } else {
+                  upload(changeset);
+              }
           }
 
-          function textFor(val) {
-              if (val === '') val = undefined;
-              var index = values.indexOf(val);
-              return (index !== -1 ? texts[index] : ('"' + val + '"'));
-          }
+          return;
 
-          checkImpliedYes();
-          _value = tags[field.key] && tags[field.key].toLowerCase();
 
-          if (field.type === 'onewayCheck' && (_value === '1' || _value === '-1')) {
-              _value = 'yes';
+          function withChildNodes(ids, graph) {
+              return uniq(reduce(ids, function(result, id) {
+                  var entity = graph.entity(id);
+                  if (entity.type === 'way') {
+                      try {
+                          var children = graph.childNodes(entity);
+                          result.push.apply(result, map$3(filter(children, 'version'), 'id'));
+                      } catch (err) {
+                          /* eslint-disable no-console */
+                          if (typeof console !== 'undefined') console.error(err);
+                          /* eslint-enable no-console */
+                      }
+                  }
+                  return result;
+              }, clone(ids)));
           }
 
-          input
-              .property('indeterminate', field.type !== 'defaultCheck' && !_value)
-              .property('checked', isChecked(_value));
 
-          text
-              .text(textFor(_value));
+          // Reload modified entities into an alternate graph and check for conflicts..
+          function loaded(err, result) {
+              if (_errors.length) return;
 
-          label
-              .classed('set', !!_value);
+              if (err) {
+                  _errors.push({
+                      msg: err.message || err.responseText,
+                      details: [ t('save.status_code', { code: err.status }) ]
+                  });
+                  showErrors();
 
-          if (field.type === 'onewayCheck') {
-              reverser
-                  .classed('hide', reverserHidden())
-                  .call(reverserSetText);
-          }
-      };
+              } else {
+                  var loadMore = [];
 
+                  result.data.forEach(function(entity) {
+                      remoteGraph.replace(entity);
+                      _loaded[entity.id] = true;
+                      _toLoad = without(_toLoad, entity.id);
 
-      check.focus = function() {
-          input.node().focus();
-      };
+                      if (!entity.visible) return;
 
-      return utilRebind(check, dispatch$$1, 'on');
-  }
+                      // Because loadMultiple doesn't download /full like loadEntity,
+                      // need to also load children that aren't already being checked..
+                      var i, id;
+                      if (entity.type === 'way') {
+                          for (i = 0; i < entity.nodes.length; i++) {
+                              id = entity.nodes[i];
+                              if (_loaded[id] === undefined) {
+                                  _loaded[id] = false;
+                                  loadMore.push(id);
+                              }
+                          }
+                      } else if (entity.type === 'relation' && entity.isMultipolygon()) {
+                          for (i = 0; i < entity.members.length; i++) {
+                              id = entity.members[i].id;
+                              if (_loaded[id] === undefined) {
+                                  _loaded[id] = false;
+                                  loadMore.push(id);
+                              }
+                          }
+                      }
+                  });
 
-  /** Used for built-in method references. */
-  var arrayProto$1 = Array.prototype;
+                  _toLoadCount += result.data.length;
+                  _toLoadTotal += loadMore.length;
+                  showProgress(_toLoadCount, _toLoadTotal);
 
-  /** Built-in value references. */
-  var splice$1 = arrayProto$1.splice;
+                  if (loadMore.length) {
+                      _toLoad.push.apply(_toLoad, loadMore);
+                      osm.loadMultiple(loadMore, loaded);
+                  }
 
-  /**
-   * The base implementation of `_.pullAt` without support for individual
-   * indexes or capturing the removed elements.
-   *
-   * @private
-   * @param {Array} array The array to modify.
-   * @param {number[]} indexes The indexes of elements to remove.
-   * @returns {Array} Returns `array`.
-   */
-  function basePullAt(array, indexes) {
-    var length = array ? indexes.length : 0,
-        lastIndex = length - 1;
+                  if (!_toLoad.length) {
+                      detectConflicts();
+                  }
+              }
+          }
 
-    while (length--) {
-      var index = indexes[length];
-      if (length == lastIndex || index !== previous) {
-        var previous = index;
-        if (isIndex(index)) {
-          splice$1.call(array, index, 1);
-        } else {
-          baseUnset(array, index);
-        }
-      }
-    }
-    return array;
-  }
 
-  /**
-   * Removes all elements from `array` that `predicate` returns truthy for
-   * and returns an array of the removed elements. The predicate is invoked
-   * with three arguments: (value, index, array).
-   *
-   * **Note:** Unlike `_.filter`, this method mutates `array`. Use `_.pull`
-   * to pull elements from an array by value.
-   *
-   * @static
-   * @memberOf _
-   * @since 2.0.0
-   * @category Array
-   * @param {Array} array The array to modify.
-   * @param {Function} [predicate=_.identity] The function invoked per iteration.
-   * @returns {Array} Returns the new array of removed elements.
-   * @example
-   *
-   * var array = [1, 2, 3, 4];
-   * var evens = _.remove(array, function(n) {
-   *   return n % 2 == 0;
-   * });
-   *
-   * console.log(array);
-   * // => [1, 3]
-   *
-   * console.log(evens);
-   * // => [2, 4]
-   */
-  function remove$2(array, predicate) {
-    var result = [];
-    if (!(array && array.length)) {
-      return result;
-    }
-    var index = -1,
-        indexes = [],
-        length = array.length;
+          function detectConflicts() {
+              function choice(id, text, action) {
+                  return { id: id, text: text, action: function() { history.replace(action); } };
+              }
+              function formatUser(d) {
+                  return '<a href="' + osm.userURL(d) + '" target="_blank">' + d + '</a>';
+              }
+              function entityName(entity) {
+                  return utilDisplayName(entity) || (utilDisplayType(entity.id) + ' ' + entity.id);
+              }
 
-    predicate = baseIteratee(predicate, 3);
-    while (++index < length) {
-      var value = array[index];
-      if (predicate(value, index, array)) {
-        result.push(value);
-        indexes.push(index);
-      }
-    }
-    basePullAt(array, indexes);
-    return result;
-  }
+              function sameVersions(local, remote) {
+                  if (local.version !== remote.version) return false;
 
-  function uiFieldCombo(field, context) {
-      var dispatch$$1 = dispatch('change');
-      var nominatim = services.geocoder;
-      var taginfo = services.taginfo;
-      var isMulti = (field.type === 'multiCombo');
-      var isNetwork = (field.type === 'networkCombo');
-      var isSemi = (field.type === 'semiCombo');
-      var optstrings = field.strings && field.strings.options;
-      var optarray = field.options;
-      var snake_case = (field.snake_case || (field.snake_case === undefined));
-      var caseSensitive = field.caseSensitive;
-      var combobox = uiCombobox(context, 'combo-' + field.safeid)
-          .caseSensitive(caseSensitive)
-          .minItems(isMulti || isSemi ? 1 : 2);
-      var container = select(null);
-      var inputWrap = select(null);
-      var input = select(null);
-      var _comboData = [];
-      var _multiData = [];
-      var _entity;
-      var _country;
+                  if (local.type === 'way') {
+                      var children = union(local.nodes, remote.nodes);
+                      for (var i = 0; i < children.length; i++) {
+                          var a = localGraph.hasEntity(children[i]);
+                          var b = remoteGraph.hasEntity(children[i]);
+                          if (a && b && a.version !== b.version) return false;
+                      }
+                  }
 
-      // ensure multiCombo field.key ends with a ':'
-      if (isMulti && /[^:]$/.test(field.key)) {
-          field.key += ':';
-      }
+                  return true;
+              }
 
+              _toCheck.forEach(function(id) {
+                  var local = localGraph.entity(id);
+                  var remote = remoteGraph.entity(id);
 
-      function snake(s) {
-          return s.replace(/\s+/g, '_');
-      }
+                  if (sameVersions(local, remote)) return;
 
-      function unsnake(s) {
-          return s.replace(/_+/g, ' ');
-      }
+                  var action = actionMergeRemoteChanges;
+                  var merge = action(id, localGraph, remoteGraph, formatUser);
 
-      function clean(s) {
-          return s.split(';')
-              .map(function(s) { return s.trim(); })
-              .join(';');
-      }
+                  history.replace(merge);
 
+                  var mergeConflicts = merge.conflicts();
+                  if (!mergeConflicts.length) return;  // merged safely
 
-      // returns the tag value for a display value
-      // (for multiCombo, dval should be the key suffix, not the entire key)
-      function tagValue(dval) {
-          dval = clean(dval || '');
+                  var forceLocal = action(id, localGraph, remoteGraph).withOption('force_local');
+                  var forceRemote = action(id, localGraph, remoteGraph).withOption('force_remote');
+                  var keepMine = t('save.conflict.' + (remote.visible ? 'keep_local' : 'restore'));
+                  var keepTheirs = t('save.conflict.' + (remote.visible ? 'keep_remote' : 'delete'));
 
-          if (optstrings) {
-              var found = find$1(_comboData, function(o) {
-                  return o.key && clean(o.value) === dval;
+                  _conflicts.push({
+                      id: id,
+                      name: entityName(local),
+                      details: mergeConflicts,
+                      chosen: 1,
+                      choices: [
+                          choice(id, keepMine, forceLocal),
+                          choice(id, keepTheirs, forceRemote)
+                      ]
+                  });
               });
-              if (found) {
-                  return found.key;
-              }
-          }
 
-          if (field.type === 'typeCombo' && !dval) {
-              return 'yes';
+              upload(changeset);
           }
-
-          return (snake_case ? snake(dval) : dval) || undefined;
       }
 
 
-      // returns the display value for a tag value
-      // (for multiCombo, tval should be the key suffix, not the entire key)
-      function displayValue(tval) {
-          tval = tval || '';
-
-          if (optstrings) {
-              var found = find$1(_comboData, function(o) { return o.key === tval && o.value; });
-              if (found) {
-                  return found.value;
-              }
-          }
-
-          if (field.type === 'typeCombo' && tval.toLowerCase() === 'yes') {
-              return '';
+      function upload(changeset) {
+          var osm = context.connection();
+          if (!osm) {
+              _errors.push({ msg: 'No OSM Service' });
           }
 
-          return snake_case ? unsnake(tval) : tval;
-      }
+          if (_conflicts.length) {
+              _conflicts.sort(function(a, b) { return b.id.localeCompare(a.id); });
+              showConflicts(changeset);
 
+          } else if (_errors.length) {
+              showErrors();
 
-      function objectDifference(a, b) {
-          return reject(a, function(d1) {
-              return some(b, function(d2) { return d1.value === d2.value; });
-          });
+          } else {
+              var history = context.history();
+              var changes = history.changes(actionDiscardTags(history.difference()));
+              if (changes.modified.length || changes.created.length || changes.deleted.length) {
+                  loadLocation();  // so it is ready when we display the save screen
+                  osm.putChangeset(changeset, changes, uploadCallback);
+              } else {        // changes were insignificant or reverted by user
+                  select('.inspector-wrap *').remove();
+                  loading.close();
+                  _isSaving = false;
+                  context.flush();
+                  cancel();
+              }
+          }
       }
 
 
-      function initCombo(selection$$1, attachTo) {
-          if (optstrings) {
-              selection$$1.attr('readonly', 'readonly');
-              selection$$1.call(combobox, attachTo);
-              setStaticValues(setPlaceholder);
-
-          } else if (optarray) {
-              selection$$1.call(combobox, attachTo);
-              setStaticValues(setPlaceholder);
+      function uploadCallback(err, changeset) {
+          if (err) {
+              if (err.status === 409) {          // 409 Conflict
+                  save(changeset, true, true);   // tryAgain = true, checkConflicts = true
+              } else {
+                  _errors.push({
+                      msg: err.message || err.responseText,
+                      details: [ t('save.status_code', { code: err.status }) ]
+                  });
+                  showErrors();
+              }
 
-          } else if (taginfo) {
-              selection$$1.call(combobox.fetcher(setTaginfoValues), attachTo);
-              setTaginfoValues('', setPlaceholder);
+          } else {
+              context.history().clearSaved();
+              success(changeset);
+              // Add delay to allow for postgres replication #1646 #2678
+              window.setTimeout(function() {
+                  select('.inspector-wrap *').remove();
+                  loading.close();
+                  _isSaving = false;
+                  context.flush();
+              }, 2500);
           }
       }
 
 
-      function setStaticValues(callback) {
-          if (!(optstrings || optarray)) return;
+      function showProgress(num, total) {
+          var modal = context.container().select('.loading-modal .modal-section');
+          var progress = modal.selectAll('.progress')
+              .data([0]);
 
-          if (optstrings) {
-              _comboData = Object.keys(optstrings).map(function(k) {
-                  var v = field.t('options.' + k, { 'default': optstrings[k] });
-                  return {
-                      key: k,
-                      value: v,
-                      title: v
-                  };
-              });
+          // enter/update
+          progress.enter()
+              .append('div')
+              .attr('class', 'progress')
+              .merge(progress)
+              .text(t('save.conflict_progress', { num: num, total: total }));
+      }
 
-          } else if (optarray) {
-              _comboData = optarray.map(function(k) {
-                  var v = snake_case ? unsnake(k) : k;
-                  return {
-                      key: k,
-                      value: v,
-                      title: v
-                  };
-              });
-          }
 
-          combobox.data(objectDifference(_comboData, _multiData));
-          if (callback) callback(_comboData);
-      }
+      function showConflicts(changeset) {
+          var history = context.history();
+          var selection = context.container()
+              .select('#sidebar')
+              .append('div')
+              .attr('class','sidebar-component');
 
+          loading.close();
+          _isSaving = false;
 
-      function setTaginfoValues(q, callback) {
-          var fn = isMulti ? 'multikeys' : 'values';
-          var query = (isMulti ? field.key : '') + q;
-          var hasCountryPrefix = isNetwork && _country && _country.indexOf(q.toLowerCase()) === 0;
-          if (hasCountryPrefix) {
-              query = _country + ':';
-          }
+          var ui = uiConflicts(context)
+              .conflictList(_conflicts)
+              .origChanges(_origChanges)
+              .on('cancel', function() {
+                  history.pop();
+                  selection.remove();
+                  keybindingOn();
+              })
+              .on('save', function() {
+                  for (var i = 0; i < _conflicts.length; i++) {
+                      if (_conflicts[i].chosen === 1) {  // user chose "keep theirs"
+                          var entity = context.hasEntity(_conflicts[i].id);
+                          if (entity && entity.type === 'way') {
+                              var children = uniq(entity.nodes);
+                              for (var j = 0; j < children.length; j++) {
+                                  history.replace(actionRevert(children[j]));
+                              }
+                          }
+                          history.replace(actionRevert(_conflicts[i].id));
+                      }
+                  }
 
-          var params = {
-              debounce: (q !== ''),
-              key: field.key,
-              query: query
-          };
+                  selection.remove();
+                  save(changeset, true, false);  // tryAgain = true, checkConflicts = false
+              });
 
-          if (_entity) {
-              params.geometry = context.geometry(_entity.id);
-          }
+          selection.call(ui);
+      }
 
-          taginfo[fn](params, function(err, data) {
-              if (err) return;
-              if (hasCountryPrefix) {
-                  data = filter(data, function(d) {
-                      return d.value.toLowerCase().indexOf(_country + ':') === 0;
-                  });
-              }
 
-              // hide the caret if there are no suggestions
-              container.classed('empty-combobox', data.length === 0);
+      function showErrors() {
+          keybindingOn();
+          context.history().pop();
+          loading.close();
+          _isSaving = false;
 
-              _comboData = map$3(data, function(d) {
-                  var k = d.value;
-                  if (isMulti) k = k.replace(field.key, '');
-                  var v = snake_case ? unsnake(k) : k;
-                  return {
-                      key: k,
-                      value: v,
-                      title: isMulti ? v : d.title
-                  };
-              });
+          var selection = uiConfirm(context.container());
+          selection
+              .select('.modal-section.header')
+              .append('h3')
+              .text(t('save.error'));
 
-              _comboData = objectDifference(_comboData, _multiData);
-              if (callback) callback(_comboData);
-          });
+          addErrors(selection, _errors);
+          selection.okButton();
       }
 
 
-      function setPlaceholder(d) {
-          var ph;
+      function addErrors(selection, data) {
+          var message = selection
+              .select('.modal-section.message-text');
 
-          if (isMulti || isSemi) {
-              ph = field.placeholder() || t('inspector.add');
-          } else {
-              var vals = map$3(d, 'value').filter(function(s) { return s.length < 20; }),
-                  placeholders = vals.length > 1 ? vals : map$3(d, 'key');
-              ph = field.placeholder() || placeholders.slice(0, 3).join(', ');
-          }
+          var items = message
+              .selectAll('.error-container')
+              .data(data);
 
-          if (!/(…|\.\.\.)$/.test(ph)) {
-              ph += '…';
-          }
+          var enter = items.enter()
+              .append('div')
+              .attr('class', 'error-container');
 
-          container.selectAll('input')
-              .attr('placeholder', ph);
-      }
+          enter
+              .append('a')
+              .attr('class', 'error-description')
+              .attr('href', '#')
+              .classed('hide-toggle', true)
+              .text(function(d) { return d.msg || t('save.unknown_error_details'); })
+              .on('click', function() {
+                  event.preventDefault();
 
+                  var error = select(this);
+                  var detail = select(this.nextElementSibling);
+                  var exp = error.classed('expanded');
 
-      function change() {
-          var val = tagValue(utilGetSetValue(input));
-          var t$$1 = {};
+                  detail.style('display', exp ? 'none' : 'block');
+                  error.classed('expanded', !exp);
+              });
 
-          if (isMulti || isSemi) {
-              if (!val) return;
-              container.classed('active', false);
-              utilGetSetValue(input, '');
+          var details = enter
+              .append('div')
+              .attr('class', 'error-detail-container')
+              .style('display', 'none');
 
-              if (isMulti) {
-                  var key = field.key + val;
-                  if (_entity) {
-                      // don't set a multicombo value to 'yes' if it already has a non-'no' value
-                      // e.g. `language:de=main`
-                      var old = _entity.tags[key] || '';
-                      if (old && old.toLowerCase() !== 'no') return;
-                  }
-                  field.keys.push(key);
-                  t$$1[key] = 'yes';
+          details
+              .append('ul')
+              .attr('class', 'error-detail-list')
+              .selectAll('li')
+              .data(function(d) { return d.details || []; })
+              .enter()
+              .append('li')
+              .attr('class', 'error-detail-item')
+              .text(function(d) { return d; });
 
-              } else if (isSemi) {
-                  var arr = _multiData.map(function(d) { return d.key; });
-                  arr.push(val);
-                  t$$1[field.key] = compact(uniq(arr)).join(';');
-              }
+          items.exit()
+              .remove();
+      }
 
-              window.setTimeout(function() { input.node().focus(); }, 10);
 
-          } else {
-              t$$1[field.key] = val;
-          }
+      function success(changeset) {
+          commit.reset();
+
+          var ui = uiSuccess(context)
+              .changeset(changeset)
+              .location(_location)
+              .on('cancel', function() { context.ui().sidebar.hide(); });
 
-          dispatch$$1.call('change', this, t$$1);
+          context.enter(modeBrowse(context).sidebar(ui));
       }
 
 
-      function removeMultikey(d) {
-          event.stopPropagation();
-          var t$$1 = {};
-          if (isMulti) {
-              t$$1[d.key] = undefined;
-          } else if (isSemi) {
-              remove$2(_multiData, function(md) { return md.key === d.key; });
-              var arr = _multiData.map(function(md) { return md.key; });
-              arr = compact(uniq(arr));
-              t$$1[field.key] = arr.length ? arr.join(';') : undefined;
-          }
-          dispatch$$1.call('change', this, t$$1);
+      function keybindingOn() {
+          select(document)
+              .call(keybinding.on('⎋', cancel, true));
       }
 
 
-      function combo(selection$$1) {
-          container = selection$$1.selectAll('.form-field-input-wrap')
-              .data([0]);
+      function keybindingOff() {
+          select(document)
+              .call(keybinding.unbind);
+      }
 
-          var type = (isMulti || isSemi) ? 'multicombo': 'combo';
-          container = container.enter()
-              .append('div')
-              .attr('class', 'form-field-input-wrap form-field-input-' + type)
-              .merge(container);
 
-          if (isMulti || isSemi) {
-              container = container.selectAll('.chiplist')
-                  .data([0]);
+      // Reverse geocode current map location so we can display a message on
+      // the success screen like "Thank you for editing around city, state."
+      function loadLocation() {
+          _location = null;
+          if (!services.geocoder) return;
 
-              var listClass = 'chiplist';
-              
-              // Use a separate line for each value in the Destinations field
-              // to mimic highway exit signs
-              if (field.id === 'destination_oneway') {
-                  listClass += ' full-line-chips';
-              }
+          services.geocoder.reverse(context.map().center(), function(err, result) {
+              if (err || !result || !result.address) return;
 
-              container = container.enter()
-                  .append('ul')
-                  .attr('class', listClass)
-                  .on('click', function() {
-                      window.setTimeout(function() { input.node().focus(); }, 10);
-                  })
-                  .merge(container);
+              var parts = [];
+              var addr = result.address;
+              var city = addr && (addr.town || addr.city || addr.county);
+              if (city) parts.push(city);
+              var region = addr && (addr.state || addr.country);
+              if (region) parts.push(region);
 
+              _location = parts.join(', ');
+          });
+      }
 
-              inputWrap = container.selectAll('.input-wrap')
-                  .data([0]);
 
-              inputWrap = inputWrap.enter()
-                  .append('li')
-                  .attr('class', 'input-wrap')
-                  .merge(inputWrap);
+      mode.enter = function() {
+          // Show sidebar
+          context.ui().sidebar.expand();
 
-              input = inputWrap.selectAll('input')
-                  .data([0]);
-          } else {
-              input = container.selectAll('input')
-                  .data([0]);
+          function done() {
+              context.ui().sidebar.show(commit);
           }
 
-          input = input.enter()
-              .append('input')
-              .attr('type', 'text')
-              .attr('id', 'preset-input-' + field.safeid)
-              .call(utilNoAuto)
-              .call(initCombo, selection$$1)
-              .merge(input);
+          keybindingOn();
 
-          if (isNetwork && nominatim && _entity) {
-              var center = _entity.extent(context.graph()).center();
-              nominatim.countryCode(center, function (err, code) {
-                  _country = code;
-              });
-          }
+          context.container().selectAll('#content')
+              .attr('class', 'inactive');
 
-          input
-              .on('change', change)
-              .on('blur', change);
+          var osm = context.connection();
+          if (!osm) {
+              cancel();
+              return;
+          }
 
-          input
-              .on('keydown.field', function() {
-                  switch (event.keyCode) {
-                      case 13: // ↩ Return
-                          input.node().blur(); // blurring also enters the value
-                          event.stopPropagation();
-                          break;
+          if (osm.authenticated()) {
+              done();
+          } else {
+              osm.authenticate(function(err) {
+                  if (err) {
+                      cancel();
+                  } else {
+                      done();
                   }
               });
+          }
+      };
 
-          if (isMulti || isSemi) {
-              combobox
-                  .on('accept', function() {
-                      input.node().blur();
-                      input.node().focus();
-                  });
 
-              input
-                  .on('focus', function() { container.classed('active', true); });
-          }
-      }
+      mode.exit = function() {
+          _isSaving = false;
 
+          keybindingOff();
 
-      combo.tags = function(tags) {
-          if (isMulti || isSemi) {
-              _multiData = [];
+          context.container().selectAll('#content')
+              .attr('class', 'active');
 
-              if (isMulti) {
-                  // Build _multiData array containing keys already set..
-                  for (var k in tags) {
-                      if (k.indexOf(field.key) !== 0) continue;
-                      var v = (tags[k] || '').toLowerCase();
-                      if (v === '' || v === 'no') continue;
+          context.ui().sidebar.hide();
+      };
 
-                      var suffix = k.substring(field.key.length);
-                      _multiData.push({
-                          key: k,
-                          value: displayValue(suffix)
-                      });
-                  }
+      return mode;
+  }
 
-                  // Set keys for form-field modified (needed for undo and reset buttons)..
-                  field.keys = map$3(_multiData, 'key');
+  // Translate a MacOS key command into the appropriate Windows/Linux equivalent.
+  // For example, ⌘Z -> Ctrl+Z
+  var uiCmd = function (code) {
+      var detected = utilDetect();
 
-              } else if (isSemi) {
-                  var arr = compact(uniq((tags[field.key] || '').split(';')));
-                  _multiData = arr.map(function(k) {
-                      return {
-                          key: k,
-                          value: displayValue(k)
-                      };
-                  });
-              }
+      if (detected.os === 'mac') {
+          return code;
+      }
 
-              // Exclude existing multikeys from combo options..
-              var available = objectDifference(_comboData, _multiData);
-              combobox.data(available);
+      if (detected.os === 'win') {
+          if (code === '⌘⇧Z') return 'Ctrl+Y';
+      }
 
-              // Hide 'Add' button if this field uses fixed set of
-              // translateable optstrings and they're all currently used..
-              container.selectAll('.combobox-input, .combobox-caret')
-                  .classed('hide', optstrings && !available.length);
+      var result = '',
+          replacements = {
+              '⌘': 'Ctrl',
+              '⇧': 'Shift',
+              '⌥': 'Alt',
+              '⌫': 'Backspace',
+              '⌦': 'Delete'
+          };
 
+      for (var i = 0; i < code.length; i++) {
+          if (code[i] in replacements) {
+              result += replacements[code[i]] + (i < code.length - 1 ? '+' : '');
+          } else {
+              result += code[i];
+          }
+      }
 
-              // Render chips
-              var chips = container.selectAll('.chips')
-                  .data(_multiData);
+      return result;
+  };
 
-              chips.exit()
-                  .remove();
 
-              var enter = chips.enter()
-                  .insert('li', '.input-wrap')
-                  .attr('class', 'chips');
+  // return a display-focused string for a given keyboard code
+  uiCmd.display = function(code) {
+      if (code.length !== 1) return code;
 
-              enter.append('span');
-              enter.append('a');
+      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'),
+      };
 
-              chips = chips.merge(enter);
+      return replacements[code] || code;
+  };
 
-              chips.select('span')
-                  .text(function(d) { return d.value; });
+  var _relatedParent;
 
-              chips.select('a')
-                  .on('click', removeMultikey)
-                  .attr('class', 'remove')
-                  .text('×');
 
-          } else {
-              utilGetSetValue(input, displayValue(tags[field.key]));
-          }
+  function modeSelect(context, selectedIDs) {
+      var mode = {
+          id: 'select',
+          button: 'browse'
       };
 
+      var keybinding = utilKeybinding('select');
+      var timeout = null;
+      var behaviors = [
+          behaviorCopy(context),
+          behaviorPaste(context),
+          behaviorBreathe(context),
+          behaviorHover(context),
+          behaviorSelect(context),
+          behaviorLasso(context),
+          modeDragNode(context).restoreSelectedIDs(selectedIDs).behavior,
+          modeDragNote(context).behavior
+      ];
+      var editMenu;
+      var newFeature = false;
+      var suppressMenu = true;
+      var follow = false;
 
-      combo.focus = function() {
-          input.node().focus();
-      };
 
+      var wrap = context.container()
+          .select('.inspector-wrap');
 
-      combo.entity = function(val) {
-          if (!arguments.length) return _entity;
-          _entity = val;
-          return combo;
-      };
 
+      function singular() {
+          if (selectedIDs.length === 1) {
+              return context.hasEntity(selectedIDs[0]);
+          }
+      }
 
-      return utilRebind(combo, dispatch$$1, 'on');
-  }
 
-  function uiFieldText(field, context) {
-      var dispatch$$1 = dispatch('change');
-      var nominatim = services.geocoder;
-      var input = select(null);
-      var _entity;
-      var _brandTip;
+      function checkSelectedIDs() {
+          var ids = [];
+          if (Array.isArray(selectedIDs)) {
+              ids = selectedIDs.filter(function(id) {
+                  return context.hasEntity(id);
+              });
+          }
 
-      if (field.id === 'brand') {
-          _brandTip = tooltip()
-              .title(t('inspector.lock.suggestion', { label: field.label }))
-              .placement('bottom');
+          if (ids.length) {
+              selectedIDs = ids;
+          } else {
+              context.enter(modeBrowse(context));
+          }
+          return !!ids.length;
       }
 
 
-      function i(selection$$1) {
-          var preset = _entity && context.presets().match(_entity, context.graph());
-          var isSuggestion = preset && preset.suggestion && field.id === 'brand';
+      // find the common parent ways for nextVertex, previousVertex
+      function commonParents() {
+          var graph = context.graph();
+          var commonParents = [];
 
-          var wrap = selection$$1.selectAll('.form-field-input-wrap')
-              .data([0]);
+          for (var i = 0; i < selectedIDs.length; i++) {
+              var entity = context.hasEntity(selectedIDs[i]);
+              if (!entity || entity.geometry(graph) !== 'vertex') {
+                  return [];  // selection includes some not vertexes
+              }
 
-          wrap = wrap.enter()
-              .append('div')
-              .attr('class', 'form-field-input-wrap form-field-input-' + field.type)
-              .merge(wrap);
+              var currParents = map$3(graph.parentWays(entity), 'id');
+              if (!commonParents.length) {
+                  commonParents = currParents;
+                  continue;
+              }
 
-          var fieldID = 'preset-input-' + field.safeid;
+              commonParents = intersection(commonParents, currParents);
+              if (!commonParents.length) {
+                  return [];
+              }
+          }
 
-          input = wrap.selectAll('input')
-              .data([0]);
+          return commonParents;
+      }
 
-          input = input.enter()
-              .append('input')
-              .attr('type', field.type)
-              .attr('id', fieldID)
-              .attr('placeholder', field.placeholder() || t('inspector.unknown'))
-              .classed(field.type, true)
-              .call(utilNoAuto)
-              .merge(input);
 
-          input
-              .classed('disabled', !!isSuggestion)
-              .attr('readonly', isSuggestion || null)
-              .on('input', change(true))
-              .on('blur', change())
-              .on('change', change());
+      function singularParent() {
+          var parents = commonParents();
+          if (!parents || parents.length === 0) {
+              _relatedParent = null;
+              return null;
+          }
 
+          // relatedParent is used when we visit a vertex with multiple
+          // parents, and we want to remember which parent line we started on.
 
-          if (field.type === 'tel' && nominatim && _entity) {
-              var center = _entity.extent(context.graph()).center();
-              nominatim.countryCode(center, function (err, countryCode) {
-                  if (err || !dataPhoneFormats[countryCode]) return;
-                  wrap.selectAll('#' + fieldID)
-                      .attr('placeholder', dataPhoneFormats[countryCode]);
-              });
+          if (parents.length === 1) {
+              _relatedParent = parents[0];  // remember this parent for later
+              return _relatedParent;
+          }
 
-          } else if (field.type === 'number') {
-              var rtl = (textDirection === 'rtl');
+          if (parents.indexOf(_relatedParent) !== -1) {
+              return _relatedParent;   // prefer the previously seen parent
+          }
 
-              input.attr('type', 'text');
+          return parents[0];
+      }
 
-              var buttons = wrap.selectAll('.increment, .decrement')
-                  .data(rtl ? [1, -1] : [-1, 1]);
 
-              buttons.enter()
-                  .append('button')
-                  .attr('tabindex', -1)
-                  .attr('class', function(d) {
-                      var which = (d === 1 ? 'increment' : 'decrement');
-                      return 'form-field-button ' + which;
-                  })
-                  .merge(buttons)
-                  .on('click', function(d) {
-                      event.preventDefault();
-                      var vals = input.node().value.split(';');
-                      vals = vals.map(function(v) {
-                          var num = parseFloat(v.trim(), 10);
-                          return isFinite(num) ? clamped(num + d) : v.trim();
-                      });
-                      input.node().value = vals.join(';');
-                      change()();
-                  });
+      function closeMenu() {
+          if (editMenu) {
+              context.surface().call(editMenu.close);
+          }
+      }
 
-          } else if (preset && field.id === 'brand') {
-              var pTag = preset.id.split('/', 2);
-              var pKey = pTag[0];
-              if (isSuggestion) {
-                  // A "suggestion" preset (brand name)
-                  // Put suggestion keys in `field.keys` so delete button can remove them all.
-                  field.keys = Object.keys(preset.removeTags)
-                      .filter(function(k) { return k !== pKey && k !== 'name'; });
-              }
 
-              wrap.call(isSuggestion ? _brandTip : _brandTip.destroy);
+      function positionMenu() {
+          if (!editMenu) { return; }
+
+          var entity = singular();
+          if (entity && context.geometry(entity.id) === 'relation') {
+              suppressMenu = true;
+          } else {
+              var point = context.mouse();
+              var viewport = geoExtent(context.projection.clipExtent()).polygon();
+
+              if (point && geoPointInPolygon(point, viewport)) {
+                  editMenu.center(point);
+              } else {
+                  suppressMenu = true;
+              }
           }
       }
 
 
-      // clamp number to min/max
-      function clamped(num) {
-          if (field.minValue !== undefined) {
-              num = Math.max(num, field.minValue);
+      function showMenu() {
+          closeMenu();
+          if (editMenu) {
+              context.surface().call(editMenu);
           }
-          if (field.maxValue !== undefined) {
-              num = Math.min(num, field.maxValue);
+      }
+
+
+      function toggleMenu() {
+          // deprecation warning - Radial Menu to be removed in iD v3
+          if (select('.edit-menu, .radial-menu').empty()) {
+              positionMenu();
+              showMenu();
+          } else {
+              closeMenu();
           }
-          return num;
       }
 
 
-      function change(onInput) {
-          return function() {
-              var t$$1 = {};
-              var val = utilGetSetValue(input).trim() || undefined;
+      mode.selectedIDs = function() {
+          return selectedIDs;
+      };
 
-              if (!onInput) {
-                  if (field.type === 'number' && val !== undefined) {
-                      var vals = val.split(';');
-                      vals = vals.map(function(v) {
-                          var num = parseFloat(v.trim(), 10);
-                          return isFinite(num) ? clamped(num) : v.trim();
-                      });
-                      val = vals.join(';');
-                  }
-                  utilGetSetValue(input, val || '');
-              }
-              t$$1[field.key] = val;
-              dispatch$$1.call('change', this, t$$1, onInput);
-          };
-      }
 
+      mode.zoomToSelected = function() {
+          var entity = singular();
+          if (entity) {
+              context.map().zoomToEase(entity);
+          }
+      };
 
-      i.entity = function(val) {
-          if (!arguments.length) return _entity;
-          _entity = val;
-          return i;
+
+      mode.reselect = function() {
+          if (!checkSelectedIDs()) return;
+
+          var surfaceNode = context.surface().node();
+          if (surfaceNode.focus) {   // FF doesn't support it
+              surfaceNode.focus();
+          }
+
+          positionMenu();
+          if (!suppressMenu) {
+              showMenu();
+          }
       };
 
 
-      i.tags = function(tags) {
-          utilGetSetValue(input, tags[field.key] || '');
+      mode.newFeature = function(_) {
+          if (!arguments.length) return newFeature;
+          newFeature = _;
+          return mode;
+      };
+
+
+      mode.suppressMenu = function(_) {
+          if (!arguments.length) return suppressMenu;
+          suppressMenu = _;
+          return mode;
+      };
+
+
+      mode.follow = function(_) {
+          if (!arguments.length) return follow;
+          follow = _;
+          return mode;
       };
 
 
-      i.focus = function() {
-          var node = input.node();
-          if (node) node.focus();
-      };
+      mode.enter = function() {
+          if (!checkSelectedIDs()) return;
+
+          context.features().forceVisible(selectedIDs);
+
+          var operations = without(values$1(Operations), operationDelete)
+              .map(function(o) { return o(selectedIDs, context); })
+              .filter(function(o) { return o.available(); });
+
+          // deprecation warning - Radial Menu to be removed in iD v3
+          var isRadialMenu = context.storage('edit-menu-style') === 'radial';
+          if (isRadialMenu) {
+              operations = operations.slice(0,7);
+              operations.unshift(operationDelete(selectedIDs, context));
+          } else {
+              operations.push(operationDelete(selectedIDs, context));
+          }
+
+          operations.forEach(function(operation) {
+              if (operation.behavior) {
+                  behaviors.push(operation.behavior);
+              }
+          });
+
+          behaviors.forEach(context.install);
+
+          keybinding
+              .on(t('inspector.zoom_to.key'), mode.zoomToSelected)
+              .on(['[', 'pgup'], previousVertex)
+              .on([']', 'pgdown'], nextVertex)
+              .on(['{', uiCmd('⌘['), 'home'], firstVertex)
+              .on(['}', uiCmd('⌘]'), 'end'], lastVertex)
+              .on(['\\', 'pause'], nextParent)
+              .on('⎋', esc, true)
+              .on('space', toggleMenu);
 
-      return utilRebind(i, dispatch$$1, 'on');
-  }
+          select(document)
+              .call(keybinding);
 
-  function uiFieldAccess(field, context) {
-      var dispatch$$1 = dispatch('change');
-      var items = select(null);
 
-      function access(selection$$1) {
-          var wrap = selection$$1.selectAll('.form-field-input-wrap')
-              .data([0]);
+          // deprecation warning - Radial Menu to be removed in iD v3
+          editMenu = isRadialMenu
+              ? uiRadialMenu(context, operations)
+              : uiEditMenu(context, operations);
 
-          wrap = wrap.enter()
-              .append('div')
-              .attr('class', 'form-field-input-wrap form-field-input-' + field.type)
-              .merge(wrap);
+          context.ui().sidebar
+              .select(singular() ? singular().id : null, newFeature);
 
-          var list = wrap.selectAll('ul')
-              .data([0]);
+          context.history()
+              .on('undone.select', update)
+              .on('redone.select', update);
 
-          list = list.enter()
-              .append('ul')
-              .attr('class', 'labeled-inputs')
-              .merge(list);
+          context.map()
+              .on('move.select', closeMenu)
+              .on('drawn.select', selectElements);
 
+          context.surface()
+              .on('dblclick.select', dblclick);
 
-          items = list.selectAll('li')
-              .data(field.keys);
 
-          // Enter
-          var enter = items.enter()
-              .append('li')
-              .attr('class', function(d) { return 'preset-access-' + d; });
+          selectElements();
 
-          enter
-              .append('span')
-              .attr('class', 'label preset-label-access')
-              .attr('for', function(d) { return 'preset-input-access-' + d; })
-              .text(function(d) { return field.t('types.' + d); });
+          if (selectedIDs.length > 1) {
+              var entities = uiSelectionList(context, selectedIDs);
+              context.ui().sidebar.show(entities);
+          }
 
-          enter
-              .append('div')
-              .attr('class', 'preset-input-access-wrap')
-              .append('input')
-              .attr('type', 'text')
-              .attr('class', 'preset-input-access')
-              .attr('id', function(d) { return 'preset-input-access-' + d; })
-              .call(utilNoAuto)
-              .each(function(d) {
-                  select(this)
-                      .call(uiCombobox(context, 'access-' + d)
-                          .data(access.options(d))
-                      );
+          if (follow) {
+              var extent = geoExtent();
+              var graph = context.graph();
+              selectedIDs.forEach(function(id) {
+                  var entity = context.entity(id);
+                  extent._extend(entity.extent(graph));
               });
 
+              var loc = extent.center();
+              context.map().centerEase(loc);
+          } else if (singular() && singular().type === 'way') {
+              context.map().pan([0,0]);  // full redraw, to adjust z-sorting #2914
+          }
 
-          // Update
-          items = items.merge(enter);
+          timeout = window.setTimeout(function() {
+              positionMenu();
+              if (!suppressMenu) {
+                  showMenu();
+              }
+          }, 270);  /* after any centerEase completes */
 
-          wrap.selectAll('.preset-input-access')
-              .on('change', change)
-              .on('blur', change);
-      }
 
+          function update() {
+              closeMenu();
+              checkSelectedIDs();
+          }
 
-      function change(d) {
-          var tag = {};
-          tag[d] = utilGetSetValue(select(this)) || undefined;
-          dispatch$$1.call('change', this, tag);
-      }
 
+          function dblclick() {
+              var target = select(event.target);
 
-      access.options = function(type) {
-          var options = ['no', 'permissive', 'private', 'permit', 'destination'];
+              var datum = target.datum();
+              var entity = datum && datum.properties && datum.properties.entity;
+              if (!entity) return;
 
-          if (type !== 'access') {
-              options.unshift('yes');
-              options.push('designated');
+              if (entity instanceof osmWay && target.classed('target')) {
+                  var choice = geoChooseEdge(context.childNodes(entity), context.mouse(), context.projection);
+                  var prev = entity.nodes[choice.index - 1];
+                  var next = entity.nodes[choice.index];
 
-              if (type === 'bicycle') {
-                  options.push('dismount');
-              }
-          }
+                  context.perform(
+                      actionAddMidpoint({loc: choice.loc, edge: [prev, next]}, osmNode()),
+                      t('operations.add.annotation.vertex')
+                  );
 
-          return options.map(function(option) {
-              return {
-                  title: field.t('options.' + option + '.description'),
-                  value: option
-              };
-          });
-      };
+                  event.preventDefault();
+                  event.stopPropagation();
 
+              } else if (entity.type === 'midpoint') {
+                  context.perform(
+                      actionAddMidpoint({loc: entity.loc, edge: entity.edge}, osmNode()),
+                      t('operations.add.annotation.vertex'));
 
-      var placeholders = {
-          footway: {
-              foot: 'designated',
-              motor_vehicle: 'no'
-          },
-          steps: {
-              foot: 'yes',
-              motor_vehicle: 'no',
-              bicycle: 'no',
-              horse: 'no'
-          },
-          pedestrian: {
-              foot: 'yes',
-              motor_vehicle: 'no'
-          },
-          cycleway: {
-              motor_vehicle: 'no',
-              bicycle: 'designated'
-          },
-          bridleway: {
-              motor_vehicle: 'no',
-              horse: 'designated'
-          },
-          path: {
-              foot: 'yes',
-              motor_vehicle: 'no',
-              bicycle: 'yes',
-              horse: 'yes'
-          },
-          motorway: {
-              foot: 'no',
-              motor_vehicle: 'yes',
-              bicycle: 'no',
-              horse: 'no'
-          },
-          trunk: {
-              motor_vehicle: 'yes'
-          },
-          primary: {
-              foot: 'yes',
-              motor_vehicle: 'yes',
-              bicycle: 'yes',
-              horse: 'yes'
-          },
-          secondary: {
-              foot: 'yes',
-              motor_vehicle: 'yes',
-              bicycle: 'yes',
-              horse: 'yes'
-          },
-          tertiary: {
-              foot: 'yes',
-              motor_vehicle: 'yes',
-              bicycle: 'yes',
-              horse: 'yes'
-          },
-          residential: {
-              foot: 'yes',
-              motor_vehicle: 'yes',
-              bicycle: 'yes',
-              horse: 'yes'
-          },
-          unclassified: {
-              foot: 'yes',
-              motor_vehicle: 'yes',
-              bicycle: 'yes',
-              horse: 'yes'
-          },
-          service: {
-              foot: 'yes',
-              motor_vehicle: 'yes',
-              bicycle: 'yes',
-              horse: 'yes'
-          },
-          motorway_link: {
-              foot: 'no',
-              motor_vehicle: 'yes',
-              bicycle: 'no',
-              horse: 'no'
-          },
-          trunk_link: {
-              motor_vehicle: 'yes'
-          },
-          primary_link: {
-              foot: 'yes',
-              motor_vehicle: 'yes',
-              bicycle: 'yes',
-              horse: 'yes'
-          },
-          secondary_link: {
-              foot: 'yes',
-              motor_vehicle: 'yes',
-              bicycle: 'yes',
-              horse: 'yes'
-          },
-          tertiary_link: {
-              foot: 'yes',
-              motor_vehicle: 'yes',
-              bicycle: 'yes',
-              horse: 'yes'
+                  event.preventDefault();
+                  event.stopPropagation();
+              }
           }
-      };
 
 
-      access.tags = function(tags) {
-          utilGetSetValue(items.selectAll('.preset-input-access'),
-              function(d) { return tags[d] || ''; })
-              .attr('placeholder', function() {
-                  return tags.access ? tags.access : field.placeholder();
-              });
-
-          items.selectAll('#preset-input-access-access')
-              .attr('placeholder', 'yes');
+          function selectElements(drawn) {
+              if (!checkSelectedIDs()) return;
 
-          var which = tags.highway;
-          if (!placeholders[which]) return;
+              var surface = context.surface();
+              var entity = singular();
 
-          var keys = Object.keys(placeholders[which]);
-          keys.forEach(function(k) {
-              var v = placeholders[which][k];
-              items.selectAll('#preset-input-access-' + k)
-                  .attr('placeholder', tags.access || v);
-          });
-      };
+              if (entity && context.geometry(entity.id) === 'relation') {
+                  suppressMenu = true;
+                  return;
+              }
 
+              surface.selectAll('.related')
+                  .classed('related', false);
 
-      access.focus = function() {
-          items.selectAll('.preset-input-access')
-              .node().focus();
-      };
+              singularParent();
+              if (_relatedParent) {
+                  surface.selectAll(utilEntitySelector([_relatedParent]))
+                      .classed('related', true);
+              }
 
+              var selection = context.surface()
+                  .selectAll(utilEntityOrMemberSelector(selectedIDs, context.graph()));
 
-      return utilRebind(access, dispatch$$1, 'on');
-  }
+              if (selection.empty()) {
+                  // Return to browse mode if selected DOM elements have
+                  // disappeared because the user moved them out of view..
+                  var source = event && event.type === 'zoom' && event.sourceEvent;
+                  if (drawn && source && (source.type === 'mousemove' || source.type === 'touchmove')) {
+                      context.enter(modeBrowse(context));
+                  }
+              } else {
+                  selection
+                      .classed('selected', true);
+              }
+          }
 
-  function uiFieldAddress(field, context) {
-      var dispatch$$1 = dispatch('init', 'change');
-      var nominatim = services.geocoder;
-      var wrap = select(null);
-      var _isInitialized = false;
-      var _entity;
 
-      function getNearStreets() {
-          var extent = _entity.extent(context.graph());
-          var l = extent.center();
-          var box = geoExtent$$1(l).padByMeters(200);
+          function esc() {
+              if (select('.combobox').size()) return;
+              context.enter(modeBrowse(context));
+          }
 
-          var streets = context.intersects(box)
-              .filter(isAddressable)
-              .map(function(d) {
-                  var loc = context.projection([
-                      (extent[0][0] + extent[1][0]) / 2,
-                      (extent[0][1] + extent[1][1]) / 2
-                  ]);
-                  var choice = geoChooseEdge(context.childNodes(d), loc, context.projection);
 
-                  return {
-                      title: d.tags.name,
-                      value: d.tags.name,
-                      dist: choice.distance
-                  };
-              })
-              .sort(function(a, b) {
-                  return a.dist - b.dist;
-              });
+          function firstVertex() {
+              event.preventDefault();
+              var entity = singular();
+              var parent = singularParent();
+              var way;
 
-          return uniqBy(streets, 'value');
+              if (entity && entity.type === 'way') {
+                  way = entity;
+              } else if (parent) {
+                  way = context.entity(parent);
+              }
 
-          function isAddressable(d) {
-              return d.tags.highway && d.tags.name && d.type === 'way';
+              if (way) {
+                  context.enter(
+                      modeSelect(context, [way.first()]).follow(true)
+                  );
+              }
           }
-      }
-
-
-      function getNearCities() {
-          var extent = _entity.extent(context.graph());
-          var l = extent.center();
-          var box = geoExtent$$1(l).padByMeters(200);
-
-          var cities = context.intersects(box)
-              .filter(isAddressable)
-              .map(function(d) {
-                  return {
-                      title: d.tags['addr:city'] || d.tags.name,
-                      value: d.tags['addr:city'] || d.tags.name,
-                      dist: geoSphericalDistance(d.extent(context.graph()).center(), l)
-                  };
-              })
-              .sort(function(a, b) {
-                  return a.dist - b.dist;
-              });
 
-          return uniqBy(cities, 'value');
 
+          function lastVertex() {
+              event.preventDefault();
+              var entity = singular();
+              var parent = singularParent();
+              var way;
 
-          function isAddressable(d) {
-              if (d.tags.name) {
-                  if (d.tags.admin_level === '8' && d.tags.boundary === 'administrative')
-                      return true;
-                  if (d.tags.border_type === 'city')
-                      return true;
-                  if (d.tags.place === 'city' || d.tags.place === 'town' || d.tags.place === 'village')
-                      return true;
+              if (entity && entity.type === 'way') {
+                  way = entity;
+              } else if (parent) {
+                  way = context.entity(parent);
               }
 
-              if (d.tags['addr:city'])
-                  return true;
-
-              return false;
+              if (way) {
+                  context.enter(
+                      modeSelect(context, [way.last()]).follow(true)
+                  );
+              }
           }
-      }
 
-      function getNearValues(key) {
-          var extent = _entity.extent(context.graph());
-          var l = extent.center();
-          var box = geoExtent$$1(l).padByMeters(200);
 
-          var results = context.intersects(box)
-              .filter(function hasTag(d) { return d.tags[key]; })
-              .map(function(d) {
-                  return {
-                      title: d.tags[key],
-                      value: d.tags[key],
-                      dist: geoSphericalDistance(d.extent(context.graph()).center(), l)
-                  };
-              })
-              .sort(function(a, b) {
-                  return a.dist - b.dist;
-              });
+          function previousVertex() {
+              event.preventDefault();
+              var parent = singularParent();
+              if (!parent) return;
 
-          return uniqBy(results, 'value');
-      }
+              var way = context.entity(parent);
+              var length = way.nodes.length;
+              var curr = way.nodes.indexOf(selectedIDs[0]);
+              var index = -1;
 
+              if (curr > 0) {
+                  index = curr - 1;
+              } else if (way.isClosed()) {
+                  index = length - 2;
+              }
 
-      function countryCallback(err, countryCode) {
-          if (err) return;
+              if (index !== -1) {
+                  context.enter(
+                      modeSelect(context, [way.nodes[index]]).follow(true)
+                  );
+              }
+          }
 
-          var addressFormat = find$1(dataAddressFormats, function (a) {
-              return a && a.countryCodes && includes(a.countryCodes, countryCode.toLowerCase());
-          }) || dataAddressFormats[0];
 
-          var dropdowns = addressFormat.dropdowns || [
-              'city', 'county', 'country', 'district', 'hamlet',
-              'neighbourhood', 'place', 'postcode', 'province',
-              'quarter', 'state', 'street', 'subdistrict', 'suburb'
-          ];
+          function nextVertex() {
+              event.preventDefault();
+              var parent = singularParent();
+              if (!parent) return;
 
-          var widths = addressFormat.widths || {
-              housenumber: 1/3, street: 2/3,
-              city: 2/3, state: 1/4, postcode: 1/3
-          };
+              var way = context.entity(parent);
+              var length = way.nodes.length;
+              var curr = way.nodes.indexOf(selectedIDs[0]);
+              var index = -1;
 
-          function row(r) {
-              // Normalize widths.
-              var total = reduce(r, function(sum, key) {
-                  return sum + (widths[key] || 0.5);
-              }, 0);
+              if (curr < length - 1) {
+                  index = curr + 1;
+              } else if (way.isClosed()) {
+                  index = 0;
+              }
 
-              return r.map(function(key) {
-                  return {
-                      id: key,
-                      width: (widths[key] || 0.5) / total
-                  };
-              });
+              if (index !== -1) {
+                  context.enter(
+                      modeSelect(context, [way.nodes[index]]).follow(true)
+                  );
+              }
           }
 
-          wrap.selectAll('.addr-row')
-              .data(addressFormat.format)
-              .enter()
-              .append('div')
-              .attr('class', 'addr-row')
-              .selectAll('input')
-              .data(row)
-              .enter()
-              .append('input')
-              .property('type', 'text')
-              .attr('placeholder', function (d) {
-                  var localkey = d.id + '!' + countryCode.toLowerCase();
-                  var tkey = field.strings.placeholders[localkey] ? localkey : d.id;
-                  return field.t('placeholders.' + tkey);
-              })
-              .attr('class', function (d) { return 'addr-' + d.id; })
-              .call(utilNoAuto)
-              .each(addDropdown)
-              .style('width', function (d) { return d.width * 100 + '%'; });
 
+          function nextParent() {
+              event.preventDefault();
+              var parents = uniq(commonParents());
+              if (!parents || parents.length < 2) return;
 
-          function addDropdown(d) {
-              if (dropdowns.indexOf(d.id) === -1) return;  // not a dropdown
+              var index = parents.indexOf(_relatedParent);
+              if (index < 0 || index > parents.length - 2) {
+                  _relatedParent = parents[0];
+              } else {
+                  _relatedParent = parents[index + 1];
+              }
 
-              var nearValues = (d.id === 'street') ? getNearStreets
-                  : (d.id === 'city') ? getNearCities
-                  : getNearValues;
+              var surface = context.surface();
+              surface.selectAll('.related')
+                  .classed('related', false);
 
-              select(this)
-                  .call(uiCombobox(context, 'address-' + d.id)
-                      .minItems(1)
-                      .fetcher(function(value, callback) {
-                          callback(nearValues('addr:' + d.id));
-                      })
-                  );
+              if (_relatedParent) {
+                  surface.selectAll(utilEntitySelector([_relatedParent]))
+                      .classed('related', true);
+              }
           }
+      };
 
-          wrap.selectAll('input')
-              .on('blur', change())
-              .on('change', change());
 
-          wrap.selectAll('input:not(.combobox-input)')
-              .on('input', change(true));
+      mode.exit = function() {
+          if (timeout) window.clearTimeout(timeout);
 
-          dispatch$$1.call('init');
-          _isInitialized = true;
-      }
+          behaviors.forEach(context.uninstall);
 
+          select(document)
+              .call(keybinding.unbind);
 
-      function address(selection$$1) {
-          _isInitialized = false;
+          closeMenu();
+          editMenu = undefined;
 
-          wrap = selection$$1.selectAll('.form-field-input-wrap')
-              .data([0]);
+          context.history()
+              .on('undone.select', null)
+              .on('redone.select', null);
 
-          wrap = wrap.enter()
-              .append('div')
-              .attr('class', 'form-field-input-wrap form-field-input-' + field.type)
-              .merge(wrap);
+          var surface = context.surface();
 
-          if (nominatim && _entity) {
-              var center = _entity.extent(context.graph()).center();
-              nominatim.countryCode(center, countryCallback);
-          }
-      }
+          surface
+              .on('dblclick.select', null);
 
+          surface
+              .selectAll('.selected')
+              .classed('selected', false);
 
-      function change(onInput) {
-          return function() {
-              var tags = {};
+          surface
+              .selectAll('.related')
+              .classed('related', false);
 
-              wrap.selectAll('input')
-                  .each(function (field) {
-                      tags['addr:' + field.id] = this.value || undefined;
-                  });
+          context.map().on('drawn.select', null);
+          context.ui().sidebar.hide();
+          context.features().forceVisible([]);
+      };
 
-              dispatch$$1.call('change', this, tags, onInput);
-          };
-      }
 
+      return mode;
+  }
 
-      function updateTags(tags) {
-          utilGetSetValue(wrap.selectAll('input'), function (field) {
-              return tags['addr:' + field.id] || '';
-          });
-      }
+  function modeSelectData(context, selectedDatum) {
+      var mode = {
+          id: 'select-data',
+          button: 'browse'
+      };
 
+      var keybinding = utilKeybinding('select-data');
+      var dataEditor = uiDataEditor(context);
 
-      address.entity = function(val) {
-          if (!arguments.length) return _entity;
-          _entity = val;
-          return address;
-      };
+      var behaviors = [
+          behaviorBreathe(context),
+          behaviorHover(context),
+          behaviorSelect(context),
+          behaviorLasso(context),
+          modeDragNode(context).behavior,
+          modeDragNote(context).behavior
+      ];
 
 
-      address.tags = function(tags) {
-          if (_isInitialized) {
-              updateTags(tags);
+      // class the data as selected, or return to browse mode if the data is gone
+      function selectData(drawn) {
+          var selection = context.surface().selectAll('.layer-mapdata .data' + selectedDatum.__featurehash__);
+
+          if (selection.empty()) {
+              // Return to browse mode if selected DOM elements have
+              // disappeared because the user moved them out of view..
+              var source = event && event.type === 'zoom' && event.sourceEvent;
+              if (drawn && source && (source.type === 'mousemove' || source.type === 'touchmove')) {
+                  context.enter(modeBrowse(context));
+              }
           } else {
-              dispatch$$1.on('init', function () {
-                  dispatch$$1.on('init', null);
-                  updateTags(tags);
-              });
+              selection.classed('selected', true);
           }
-      };
+      }
 
 
-      address.focus = function() {
-          var node = wrap.selectAll('input').node();
-          if (node) node.focus();
+      function esc() {
+          if (select('.combobox').size()) return;
+          context.enter(modeBrowse(context));
+      }
+
+
+      mode.zoomToSelected = function() {
+          var extent = geoExtent(d3_geoBounds(selectedDatum));
+          context.map().centerZoomEase(extent.center(), context.map().trimmedExtentZoom(extent));
       };
 
 
-      return utilRebind(address, dispatch$$1, 'on');
-  }
+      mode.enter = function() {
+          behaviors.forEach(context.install);
 
-  function uiFieldCycleway(field, context) {
-      var dispatch$$1 = dispatch('change');
-      var items = select(null);
-      var wrap = select(null);
+          keybinding
+              .on(t('inspector.zoom_to.key'), mode.zoomToSelected)
+              .on('⎋', esc, true);
 
-      function cycleway(selection$$1) {
+          select(document)
+              .call(keybinding);
 
-          function stripcolon(s) {
-              return s.replace(':', '');
-          }
+          selectData();
 
+          var sidebar = context.ui().sidebar;
+          sidebar.show(dataEditor.datum(selectedDatum));
 
-          wrap = selection$$1.selectAll('.form-field-input-wrap')
-              .data([0]);
+          // expand the sidebar, avoid obscuring the data if needed
+          var extent = geoExtent(d3_geoBounds(selectedDatum));
+          sidebar.expand(sidebar.intersects(extent));
 
-          wrap = wrap.enter()
-              .append('div')
-              .attr('class', 'form-field-input-wrap form-field-input-' + field.type)
-              .merge(wrap);
+          context.map()
+              .on('drawn.select-data', selectData);
+      };
 
 
-          var div = wrap.selectAll('ul')
-              .data([0]);
+      mode.exit = function() {
+          behaviors.forEach(context.uninstall);
 
-          div = div.enter()
-              .append('ul')
-              .attr('class', 'labeled-inputs')
-              .merge(div);
+          select(document)
+              .call(keybinding.unbind);
 
-          var keys = ['cycleway:left', 'cycleway:right'];
+          context.surface()
+              .selectAll('.layer-mapdata .selected')
+              .classed('selected hover', false);
 
-          items = div.selectAll('li')
-              .data(keys);
+          context.map()
+              .on('drawn.select-data', null);
 
-          var enter = items.enter()
-              .append('li')
-              .attr('class', function(d) { return 'preset-cycleway-' + stripcolon(d); });
+          context.ui().sidebar
+              .hide();
+      };
 
-          enter
-              .append('span')
-              .attr('class', 'label preset-label-cycleway')
-              .attr('for', function(d) { return 'preset-input-cycleway-' + stripcolon(d); })
-              .text(function(d) { return field.t('types.' + d); });
 
-          enter
-              .append('div')
-              .attr('class', 'preset-input-cycleway-wrap')
-              .append('input')
-              .attr('type', 'text')
-              .attr('class', function(d) { return 'preset-input-cycleway preset-input-' + stripcolon(d); })
-              .call(utilNoAuto)
-              .each(function(d) {
-                  select(this)
-                      .call(uiCombobox(context, 'cycleway-' + stripcolon(d))
-                          .data(cycleway.options(d))
-                      );
-              });
+      return mode;
+  }
+
+  function modeSelectError(context, selectedErrorID, selectedErrorService) {
+      var mode = {
+          id: 'select-error',
+          button: 'browse'
+      };
 
+      var keybinding = utilKeybinding('select-error');
 
-          // Update
-          wrap.selectAll('.preset-input-cycleway')
-              .on('change', change)
-              .on('blur', change);
+      var errorService = services[selectedErrorService];
+      var errorEditor;
+      switch (selectedErrorService) {
+          case 'improveOSM':
+              errorEditor = uiImproveOsmEditor(context)
+              .on('change', function() {
+                  context.map().pan([0,0]);  // trigger a redraw
+                  var error = checkSelectedID();
+                  if (!error) return;
+                  context.ui().sidebar
+                      .show(errorEditor.error(error));
+              });
+              break;
+          case 'keepRight':
+              errorEditor = uiKeepRightEditor(context)
+              .on('change', function() {
+                  context.map().pan([0,0]);  // trigger a redraw
+                  var error = checkSelectedID();
+                  if (!error) return;
+                  context.ui().sidebar
+                      .show(errorEditor.error(error));
+              });
+              break;
       }
 
 
-      function change() {
-          var left = utilGetSetValue(select('.preset-input-cyclewayleft'));
-          var right = utilGetSetValue(select('.preset-input-cyclewayright'));
-          var tag = {};
-
-          if (left === 'none' || left === '') { left = undefined; }
-          if (right === 'none' || right === '') { right = undefined; }
+      var behaviors = [
+          behaviorBreathe(context),
+          behaviorHover(context),
+          behaviorSelect(context),
+          behaviorLasso(context),
+          modeDragNode(context).behavior,
+          modeDragNote(context).behavior
+      ];
 
-          // Always set both left and right as changing one can affect the other
-          tag = {
-              cycleway: undefined,
-              'cycleway:left': left,
-              'cycleway:right': right
-          };
 
-          // If the left and right tags match, use the cycleway tag to tag both
-          // sides the same way
-          if (left === right) {
-              tag = {
-                  cycleway: left,
-                  'cycleway:left': undefined,
-                  'cycleway:right': undefined
-              };
+      function checkSelectedID() {
+          if (!errorService) return;
+          var error = errorService.getError(selectedErrorID);
+          if (!error) {
+              context.enter(modeBrowse(context));
           }
-
-          dispatch$$1.call('change', this, tag);
+          return error;
       }
 
 
-      cycleway.options = function() {
-          return Object.keys(field.strings.options).map(function(option) {
-              return {
-                  title: field.t('options.' + option + '.description'),
-                  value: option
-              };
-          });
+      mode.zoomToSelected = function() {
+          if (!errorService) return;
+          var error = errorService.getError(selectedErrorID);
+          if (error) {
+              context.map().centerZoomEase(error.loc, 20);
+          }
       };
 
 
-      cycleway.tags = function(tags) {
-          utilGetSetValue(items.selectAll('.preset-input-cycleway'), function(d) {
-                  // If cycleway is set, always return that
-                  if (tags.cycleway) {
-                      return tags.cycleway;
-                  }
-                  return tags[d] || '';
-              })
-              .attr('placeholder', field.placeholder());
-      };
-
+      mode.enter = function() {
+          var error = checkSelectedID();
+          if (!error) return;
 
-      cycleway.focus = function() {
-          var node = wrap.selectAll('input').node();
-          if (node) node.focus();
-      };
+          behaviors.forEach(context.install);
+          keybinding
+              .on(t('inspector.zoom_to.key'), mode.zoomToSelected)
+              .on('⎋', esc, true);
 
+          select(document)
+              .call(keybinding);
 
-      return utilRebind(cycleway, dispatch$$1, 'on');
-  }
+          selectError();
 
-  function uiFieldLanes(field, context) {
-      var dispatch$$1 = dispatch('change');
-      var LANE_WIDTH = 40;
-      var LANE_HEIGHT = 200;
-      var _entityID;
+          var sidebar = context.ui().sidebar;
+          sidebar.show(errorEditor.error(error));
 
-      function lanes(selection$$1) {
-          var lanesData = context.entity(_entityID).lanes();
+          context.map()
+              .on('drawn.select-error', selectError);
 
-          if (!select('.inspector-wrap.inspector-hidden').empty() || !selection$$1.node().parentNode) {
-              selection$$1.call(lanes.off);
-              return;
-          }
 
-          var wrap = selection$$1.selectAll('.form-field-input-wrap')
-              .data([0]);
+          // class the error as selected, or return to browse mode if the error is gone
+          function selectError(drawn) {
+              if (!checkSelectedID()) return;
 
-          wrap = wrap.enter()
-              .append('div')
-              .attr('class', 'form-field-input-wrap form-field-input-' + field.type)
-              .merge(wrap);
+              var selection = context.surface()
+                  .selectAll('.error_id-' + selectedErrorID + '.' + selectedErrorService);
 
-          var surface =  wrap.selectAll('.surface')
-              .data([0]);
+              if (selection.empty()) {
+                  // Return to browse mode if selected DOM elements have
+                  // disappeared because the user moved them out of view..
+                  var source = event && event.type === 'zoom' && event.sourceEvent;
+                  if (drawn && source && (source.type === 'mousemove' || source.type === 'touchmove')) {
+                      context.enter(modeBrowse(context));
+                  }
 
-          var d = utilGetDimensions(wrap);
-          var freeSpace = d[0] - lanesData.lanes.length * LANE_WIDTH * 1.5 + LANE_WIDTH * 0.5;
+              } else {
+                  selection
+                      .classed('selected', true);
 
-          surface = surface.enter()
-              .append('svg')
-              .attr('width', d[0])
-              .attr('height', 300)
-              .attr('class', 'surface')
-              .merge(surface);
+                  context.selectedErrorID(selectedErrorID);
+              }
+          }
 
+          function esc() {
+              if (select('.combobox').size()) return;
+              context.enter(modeBrowse(context));
+          }
+      };
 
-          var lanesSelection = surface.selectAll('.lanes')
-              .data([0]);
 
-          lanesSelection = lanesSelection.enter()
-              .append('g')
-              .attr('class', 'lanes')
-              .merge(lanesSelection);
+      mode.exit = function() {
+          behaviors.forEach(context.uninstall);
 
-          lanesSelection
-              .attr('transform', function () {
-                  return 'translate(' + (freeSpace / 2) + ', 0)';
-              });
+          select(document)
+              .call(keybinding.unbind);
 
+          context.surface()
+              .selectAll('.qa_error.selected')
+              .classed('selected hover', false);
 
-          var lane = lanesSelection.selectAll('.lane')
-             .data(lanesData.lanes);
+          context.map()
+              .on('drawn.select-error', null);
 
-          lane.exit()
-              .remove();
+          context.ui().sidebar
+              .hide();
 
-          var enter = lane.enter()
-              .append('g')
-              .attr('class', 'lane');
+          context.selectedErrorID(null);
+          context.features().forceVisible([]);
+      };
 
-          enter
-              .append('g')
-              .append('rect')
-              .attr('y', 50)
-              .attr('width', LANE_WIDTH)
-              .attr('height', LANE_HEIGHT);
 
-          enter
-              .append('g')
-              .attr('class', 'forward')
-              .append('text')
-              .attr('y', 40)
-              .attr('x', 14)
-              .text('▲');
+      return mode;
+  }
 
-          enter
-              .append('g')
-              .attr('class', 'bothways')
-              .append('text')
-              .attr('y', 40)
-              .attr('x', 14)
-              .text('▲▼');
+  function modeSelectNote(context, selectedNoteID) {
+      var mode = {
+          id: 'select-note',
+          button: 'browse'
+      };
 
-          enter
-              .append('g')
-              .attr('class', 'backward')
-              .append('text')
-              .attr('y', 40)
-              .attr('x', 14)
-              .text('▼');
+      var osm = services.osm;
+      var keybinding = utilKeybinding('select-note');
+      var noteEditor = uiNoteEditor(context)
+          .on('change', function() {
+              context.map().pan([0,0]);  // trigger a redraw
+              var note = checkSelectedID();
+              if (!note) return;
+              context.ui().sidebar
+                  .show(noteEditor.note(note));
+          });
 
+      var behaviors = [
+          behaviorBreathe(context),
+          behaviorHover(context),
+          behaviorSelect(context),
+          behaviorLasso(context),
+          modeDragNode(context).behavior,
+          modeDragNote(context).behavior
+      ];
 
-          lane = lane
-              .merge(enter);
+      var newFeature = false;
 
-          lane
-              .attr('transform', function(d) {
-                  return 'translate(' + (LANE_WIDTH * d.index * 1.5) + ', 0)';
-              });
 
-          lane.select('.forward')
-              .style('visibility', function(d) {
-                  return d.direction === 'forward' ? 'visible' : 'hidden';
-              });
+      function checkSelectedID() {
+          if (!osm) return;
+          var note = osm.getNote(selectedNoteID);
+          if (!note) {
+              context.enter(modeBrowse(context));
+          }
+          return note;
+      }
 
-          lane.select('.bothways')
-              .style('visibility', function(d) {
-                  return d.direction === 'bothways' ? 'visible' : 'hidden';
-              });
 
-          lane.select('.backward')
-              .style('visibility', function(d) {
-                  return d.direction === 'backward' ? 'visible' : 'hidden';
-              });
-      }
+      // class the note as selected, or return to browse mode if the note is gone
+      function selectNote(drawn) {
+          if (!checkSelectedID()) return;
 
+          var selection = context.surface().selectAll('.layer-notes .note-' + selectedNoteID);
 
-      lanes.entity = function(val) {
-          if (!_entityID || _entityID !== val.id) {
-              _entityID = val.id;
-          }
-      };
+          if (selection.empty()) {
+              // Return to browse mode if selected DOM elements have
+              // disappeared because the user moved them out of view..
+              var source = event && event.type === 'zoom' && event.sourceEvent;
+              if (drawn && source && (source.type === 'mousemove' || source.type === 'touchmove')) {
+                  context.enter(modeBrowse(context));
+              }
 
-      lanes.tags = function() {};
-      lanes.focus = function() {};
-      lanes.off = function() {};
+          } else {
+              selection
+                  .classed('selected', true);
 
-      return utilRebind(lanes, dispatch$$1, 'on');
-  }
+              context.selectedNoteID(selectedNoteID);
+          }
+      }
 
-  function uiFieldLocalized(field, context) {
-      var dispatch$$1 = dispatch('change', 'input');
-      var wikipedia = services.wikipedia;
-      var input = select(null);
-      var localizedInputs = select(null);
 
-      var allSuggestions = context.presets().collection.filter(function(p) {
-          return p.suggestion === true;
-      });
+      function esc() {
+          if (select('.combobox').size()) return;
+          context.enter(modeBrowse(context));
+      }
 
-      // reuse these combos
-      var langCombo = uiCombobox(context, 'localized-lang')
-          .fetcher(fetchLanguages)
-          .minItems(0);
 
-      var brandCombo = uiCombobox(context, 'localized-brand')
-          .canAutocomplete(false)
-          .minItems(1);
+      mode.zoomToSelected = function() {
+          if (!osm) return;
+          var note = osm.getNote(selectedNoteID);
+          if (note) {
+              context.map().centerZoomEase(note.loc, 20);
+          }
+      };
 
-      var _selection = select(null);
-      var _multilingual = [];
-      var _isLocked = false;
-      var _brandTip = tooltip()
-          .title(t('inspector.lock.suggestion', { label: field.label }))
-          .placement('bottom');
-      var _buttonTip = tooltip()
-          .title(t('translate.translate'))
-          .placement('left');
-      var _wikiTitles;
-      var _entity;
 
+      mode.newFeature = function(val) {
+          if (!arguments.length) return newFeature;
+          newFeature = val;
+          return mode;
+      };
 
-      function calcLocked() {
-          if (!_entity) {    // the original entity
-              _isLocked = false;
-              return;
-          }
 
-          var latest = context.hasEntity(_entity.id);
-          if (!latest) {    // get current entity, possibly edited
-              _isLocked = false;
-              return;
-          }
+      mode.enter = function() {
+          var note = checkSelectedID();
+          if (!note) return;
 
-          var hasOriginalName = (latest.tags.name && latest.tags.name === _entity.tags.name);
-          var hasWikidata = latest.tags.wikidata;
-          var preset = context.presets().match(latest, context.graph());
-          var isSuggestion = preset && preset.suggestion;
-          var showsBrand = preset && preset.fields
-              .filter(function(d) { return d.id === 'brand'; }).length;
+          behaviors.forEach(context.install);
 
-          _isLocked = !!(field.id === 'name' && hasOriginalName &&
-              (hasWikidata || (isSuggestion && !showsBrand)));
-      }
+          keybinding
+              .on(t('inspector.zoom_to.key'), mode.zoomToSelected)
+              .on('⎋', esc, true);
 
+          select(document)
+              .call(keybinding);
 
-      function calcMultilingual(tags) {
-          _multilingual = [];
-          for (var k in tags) {
-              var m = k.match(/^(.*):([a-zA-Z_-]+)$/);
-              if (m && m[1] === field.key && m[2]) {
-                  _multilingual.push({ lang: m[2], value: tags[k] });
-              }
-          }
-          _multilingual.reverse();
-      }
+          selectNote();
 
+          var sidebar = context.ui().sidebar;
+          sidebar.show(noteEditor.note(note));
 
-      function localized(selection$$1) {
-          _selection = selection$$1;
-          calcLocked();
-          var entity = _entity && context.hasEntity(_entity.id);  // get latest
-          var preset = entity && context.presets().match(entity, context.graph());
+          // expand the sidebar, avoid obscuring the note if needed
+          sidebar.expand(sidebar.intersects(note.extent()));
 
-          var wrap = selection$$1.selectAll('.form-field-input-wrap')
-              .data([0]);
+          context.map()
+              .on('drawn.select', selectNote);
+      };
 
-          // enter/update
-          wrap = wrap.enter()
-              .append('div')
-              .attr('class', 'form-field-input-wrap form-field-input-' + field.type)
-              .merge(wrap)
-              .call(_isLocked ? _brandTip : _brandTip.destroy);
 
+      mode.exit = function() {
+          behaviors.forEach(context.uninstall);
 
-          input = wrap.selectAll('.localized-main')
-              .data([0]);
+          select(document)
+              .call(keybinding.unbind);
 
-          // enter/update
-          input = input.enter()
-              .append('input')
-              .attr('type', 'text')
-              .attr('id', 'preset-input-' + field.safeid)
-              .attr('class', 'localized-main')
-              .attr('placeholder', field.placeholder())
-              .call(utilNoAuto)
-              .merge(input);
+          context.surface()
+              .selectAll('.layer-notes .selected')
+              .classed('selected hover', false);
 
-          if (preset && field.id === 'name') {
-              var pTag = preset.id.split('/', 2);
-              var pKey = pTag[0];
-              var pValue = pTag[1];
+          context.map()
+              .on('drawn.select', null);
 
-              if (preset.suggestion) {
-                  // A "suggestion" preset (brand name)
-                  // Put suggestion keys in `field.keys` so delete button can remove them all.
-                  field.keys = Object.keys(preset.removeTags)
-                      .filter(function(k) { return k !== pKey; });
+          context.ui().sidebar
+              .hide();
 
-              } else {
-                  // Not a suggestion preset - Add a suggestions dropdown if it makes sense to.
-                  // This code attempts to determine if the matched preset is the
-                  // kind of preset that even can benefit from name suggestions..
-                  // - true = shops, cafes, hotels, etc. (also generic and fallback presets)
-                  // - false = churches, parks, hospitals, etc. (things not in the index)
-                  var isFallback = preset.isFallback();
-                  var goodSuggestions = allSuggestions.filter(function(s) {
-                      if (isFallback) return true;
-                      var sTag = s.id.split('/', 2);
-                      var sKey = sTag[0];
-                      var sValue = sTag[1];
-                      return pKey === sKey && (!pValue || pValue === sValue);
-                  });
+          context.selectedNoteID(null);
+      };
 
-                  // Show the suggestions.. If the user picks one, change the tags..
-                  if (allSuggestions.length && goodSuggestions.length) {
-                      input
-                          .on('blur.localized', checkBrandOnBlur)
-                          .call(brandCombo
-                              .fetcher(fetchBrandNames(preset, allSuggestions))
-                              .on('accept', acceptBrand)
-                              .on('cancel', cancelBrand)
-                          );
-                  }
-              }
-          }
 
-          input
-              .classed('disabled', !!_isLocked)
-              .attr('readonly', _isLocked || null)
-              .on('input', change(true))
-              .on('blur', change())
-              .on('change', change());
+      return mode;
+  }
 
+  function behaviorAddWay(context) {
+      var dispatch$1 = dispatch('start', 'startFromWay', 'startFromNode');
+      var draw = behaviorDraw(context);
 
-          var translateButton = wrap.selectAll('.localized-add')
-              .data([0]);
+      function behavior(surface) {
+          draw.on('click', function() { dispatch$1.apply('start', this, arguments); })
+              .on('clickWay', function() { dispatch$1.apply('startFromWay', this, arguments); })
+              .on('clickNode', function() { dispatch$1.apply('startFromNode', this, arguments); })
+              .on('cancel', behavior.cancel)
+              .on('finish', behavior.cancel);
 
-          translateButton = translateButton.enter()
-              .append('button')
-              .attr('class', 'localized-add form-field-button')
-              .attr('tabindex', -1)
-              .call(svgIcon('#iD-icon-plus'))
-              .merge(translateButton);
+          context.map()
+              .dblclickEnable(false);
 
-          translateButton
-              .classed('disabled', !!_isLocked)
-              .call(_isLocked ? _buttonTip.destroy : _buttonTip)
-              .on('click', addNew);
+          surface.call(draw);
+      }
 
 
-          if (entity && !_multilingual.length) {
-              calcMultilingual(entity.tags);
-          }
+      behavior.off = function(surface) {
+          surface.call(draw.off);
+      };
 
-          localizedInputs = selection$$1.selectAll('.localized-multilingual')
-              .data([0]);
 
-          localizedInputs = localizedInputs.enter()
-              .append('div')
-              .attr('class', 'localized-multilingual')
-              .merge(localizedInputs);
+      behavior.cancel = function() {
+          window.setTimeout(function() {
+              context.map().dblclickEnable(true);
+          }, 1000);
 
-          localizedInputs
-              .call(renderMultilingual);
+          context.enter(modeBrowse(context));
+      };
 
-          localizedInputs.selectAll('button, input')
-              .classed('disabled', !!_isLocked)
-              .attr('readonly', _isLocked || null);
 
+      behavior.tail = function(text) {
+          draw.tail(text);
+          return behavior;
+      };
 
-          // We are not guaranteed to get an `accept` or `cancel` when blurring the field.
-          // (This can happen if the user actives the combo, arrows down, and then clicks off to blur)
-          // So compare the current field value against the suggestions one last time.
-          function checkBrandOnBlur() {
-              var latest = context.hasEntity(_entity.id);
-              if (!latest) return;   // deleting the entity blurred the field?
 
-              var preset = context.presets().match(latest, context.graph());
-              if (preset && preset.suggestion) return;   // already accepted
+      return utilRebind(behavior, dispatch$1, 'on');
+  }
 
-              // note: here we are testing against "decorated" names, i.e. 'Starbucks – Cafe'
-              var name = utilGetSetValue(input).trim();
-              var matched = allSuggestions.filter(function(s) { return name === s.name(); });
+  function behaviorBreathe() {
+      var duration = 800;
+      var steps = 4;
+      var selector = '.selected.shadow, .selected .shadow';
+      var _selected = select(null);
+      var _classed = '';
+      var _params = {};
+      var _done = false;
+      var _timer;
 
-              if (matched.length === 1) {
-                  acceptBrand({ suggestion: matched[0] });
-              } else {
-                  cancelBrand();
-              }
-          }
 
+      function ratchetyInterpolator(a, b, steps, units) {
+          a = parseFloat(a);
+          b = parseFloat(b);
+          var sample = quantize()
+              .domain([0, 1])
+              .range(d3_quantize(interpolateNumber(a, b), steps));
 
-          function acceptBrand(d) {
-              if (!d) {
-                  cancelBrand();
-                  return;
-              }
+          return function(t) {
+              return String(sample(t)) + (units || '');
+          };
+      }
 
-              var entity = context.entity(_entity.id);  // get latest
-              var tags = entity.tags;
-              var geometry = entity.geometry(context.graph());
-              var removed = preset.unsetTags(tags, geometry);
-              for (var k in tags) {
-                  tags[k] = removed[k];  // set removed tags to `undefined`
-              }
-              tags = d.suggestion.setTags(tags, geometry);
-              utilGetSetValue(input, tags.name);
-              dispatch$$1.call('change', this, tags);
-          }
 
+      function reset(selection) {
+          selection
+              .style('stroke-opacity', null)
+              .style('stroke-width', null)
+              .style('fill-opacity', null)
+              .style('r', null);
+      }
 
-          // user hit escape, clean whatever preset name appears after the last ' – '
-          function cancelBrand() {
-              var name = utilGetSetValue(input);
-              var clean = cleanName(name);
-              if (clean !== name) {
-                  utilGetSetValue(input, clean);
-                  dispatch$$1.call('change', this, { name: clean });
-              }
-          }
 
-          // Remove whatever is after the last ' – '
-          // NOTE: split/join on en-dash, not a hypen (to avoid conflict with fr - nl names in Brussels etc)
-          function cleanName(name) {
-              var parts = name.split(' – ');
-              if (parts.length > 1) {
-                  parts.pop();
-                  name = parts.join(' – ');
-              }
-              return name;
-          }
+      function setAnimationParams(transition, fromTo) {
+          var toFrom = (fromTo === 'from' ? 'to' : 'from');
 
+          transition
+              .styleTween('stroke-opacity', function(d) {
+                  return ratchetyInterpolator(
+                      _params[d.id][toFrom].opacity,
+                      _params[d.id][fromTo].opacity,
+                      steps
+                  );
+              })
+              .styleTween('stroke-width', function(d) {
+                  return ratchetyInterpolator(
+                      _params[d.id][toFrom].width,
+                      _params[d.id][fromTo].width,
+                      steps,
+                      'px'
+                  );
+              })
+              .styleTween('fill-opacity', function(d) {
+                  return ratchetyInterpolator(
+                      _params[d.id][toFrom].opacity,
+                      _params[d.id][fromTo].opacity,
+                      steps
+                  );
+              })
+              .styleTween('r', function(d) {
+                  return ratchetyInterpolator(
+                      _params[d.id][toFrom].width,
+                      _params[d.id][fromTo].width,
+                      steps,
+                      'px'
+                  );
+              });
+      }
 
-          function fetchBrandNames(preset, suggestions) {
-              var pTag = preset.id.split('/', 2);
-              var pKey = pTag[0];
-              var pValue = pTag[1];
 
-              return function(value, callback) {
-                  var results = [];
-                  if (value && value.length > 2) {
-                      for (var i = 0; i < suggestions.length; i++) {
-                          var s = suggestions[i];
-                          var sTag = s.id.split('/', 2);
-                          var sKey = sTag[0];
-                          var sValue = sTag[1];
-                          var name = s.name();
-                          var dist = utilEditDistance(value, name.substring(0, value.length));
-                          var matchesPreset = (pKey === sKey && (!pValue || pValue === sValue));
+      function calcAnimationParams(selection) {
+          selection
+              .call(reset)
+              .each(function(d) {
+                  var s = select(this);
+                  var tag = s.node().tagName;
+                  var p = {'from': {}, 'to': {}};
+                  var opacity;
+                  var width;
 
-                          if (dist < 1 || (matchesPreset && dist < 3)) {
-                              var obj = {
-                                  title: name,
-                                  value: name,
-                                  suggestion: s,
-                                  dist: dist + (matchesPreset ? 0 : 1)  // penalize if not matched preset
-                              };
-                              results.push(obj);
-                          }
-                      }
-                      results.sort(function(a, b) { return a.dist - b.dist; });
+                  // determine base opacity and width
+                  if (tag === 'circle') {
+                      opacity = parseFloat(s.style('fill-opacity') || 0.5);
+                      width = parseFloat(s.style('r') || 15.5);
+                  } else {
+                      opacity = parseFloat(s.style('stroke-opacity') || 0.7);
+                      width = parseFloat(s.style('stroke-width') || 10);
                   }
-                  results = results.slice(0, 10);
-                  callback(results);
-              };
-          }
 
+                  // calculate from/to interpolation params..
+                  p.tag = tag;
+                  p.from.opacity = opacity * 0.6;
+                  p.to.opacity = opacity * 1.25;
+                  p.from.width = width * 0.7;
+                  p.to.width = width * (tag === 'circle' ? 1.5 : 1);
+                  _params[d.id] = p;
+              });
+      }
 
-          function addNew() {
-              event.preventDefault();
-              if (_isLocked) return;
 
-              var defaultLang = utilDetect().locale.toLowerCase().split('-')[0];
-              var langExists = find$1(_multilingual, function(datum) { return datum.lang === defaultLang;});
-              var isLangEn = defaultLang.indexOf('en') > -1;
-              if (isLangEn || langExists) {
-                  defaultLang = '';
-              }
-              _multilingual.push({ lang: defaultLang, value: '' });
+      function run(surface, fromTo) {
+          var toFrom = (fromTo === 'from' ? 'to' : 'from');
+          var currSelected = surface.selectAll(selector);
+          var currClassed = surface.attr('class');
 
-              localizedInputs
-                  .call(renderMultilingual);
+          if (_done || currSelected.empty()) {
+              _selected.call(reset);
+              return;
           }
 
-
-          function change(onInput) {
-              return function() {
-                  if (_isLocked) {
-                      event.preventDefault();
-                      return;
-                  }
-                  var t$$1 = {};
-                  t$$1[field.key] = utilGetSetValue(select(this)) || undefined;
-                  dispatch$$1.call('change', this, t$$1, onInput);
-              };
+          if (!isEqual(currSelected.data(), _selected.data()) || currClassed !== _classed) {
+              _selected.call(reset);
+              _classed = currClassed;
+              _selected = currSelected.call(calcAnimationParams);
           }
-      }
-
 
-      function key(lang) {
-          return field.key + ':' + lang;
+          _selected
+              .transition()
+              .duration(duration)
+              .call(setAnimationParams, fromTo)
+              .on('end', function() {
+                  surface.call(run, toFrom);
+              });
       }
 
 
-      function changeLang(d) {
-          var lang = utilGetSetValue(select(this));
-          var t$$1 = {};
-          var language = find$1(wikipedia$2, function(d) {
-              return d[0].toLowerCase() === lang.toLowerCase() ||
-                  d[1].toLowerCase() === lang.toLowerCase();
-          });
-
-          if (language) lang = language[2];
+      function behavior(surface) {
+          _done = false;
+          _timer = timer(function() {
+              // wait for elements to actually become selected
+              if (surface.selectAll(selector).empty()) {
+                  return false;
+              }
 
-          if (d.lang && d.lang !== lang) {
-              t$$1[key(d.lang)] = undefined;
-          }
+              surface.call(run, 'from');
+              _timer.stop();
+              return true;
+          }, 20);
+      }
 
-          var value = utilGetSetValue(select(this.parentNode)
-              .selectAll('.localized-value'));
 
-          if (lang && value) {
-              t$$1[key(lang)] = value;
-          } else if (lang && _wikiTitles && _wikiTitles[d.lang]) {
-              t$$1[key(lang)] = _wikiTitles[d.lang];
+      behavior.off = function() {
+          _done = true;
+          if (_timer) {
+              _timer.stop();
           }
+          _selected
+              .interrupt()
+              .call(reset);
+      };
 
-          d.lang = lang;
-          dispatch$$1.call('change', this, t$$1);
-      }
 
+      return behavior;
+  }
+
+  function behaviorCopy(context) {
 
-      function changeValue(d) {
-          if (!d.lang) return;
-          var t$$1 = {};
-          t$$1[key(d.lang)] = utilGetSetValue(select(this)) || undefined;
-          dispatch$$1.call('change', this, t$$1);
+      function groupEntities(ids, graph) {
+          var entities = ids.map(function (id) { return graph.entity(id); });
+          return assignIn({relation: [], way: [], node: []},
+              groupBy(entities, function(entity) { return entity.type; }));
       }
 
 
-      function fetchLanguages(value, cb) {
-          var v = value.toLowerCase();
+      function getDescendants(id, graph, descendants) {
+          var entity = graph.entity(id);
+          var children;
 
-          cb(wikipedia$2.filter(function(d) {
-              return d[0].toLowerCase().indexOf(v) >= 0 ||
-              d[1].toLowerCase().indexOf(v) >= 0 ||
-              d[2].toLowerCase().indexOf(v) >= 0;
-          }).map(function(d) {
-              return { value: d[1] };
-          }));
-      }
+          descendants = descendants || {};
 
+          if (entity.type === 'relation') {
+              children = map$3(entity.members, 'id');
+          } else if (entity.type === 'way') {
+              children = entity.nodes;
+          } else {
+              children = [];
+          }
 
-      function renderMultilingual(selection$$1) {
-          var wraps = selection$$1.selectAll('div.entry')
-              .data(_multilingual, function(d) { return d.lang; });
+          for (var i = 0; i < children.length; i++) {
+              if (!descendants[children[i]]) {
+                  descendants[children[i]] = true;
+                  descendants = getDescendants(children[i], graph, descendants);
+              }
+          }
 
-          wraps.exit()
-              .transition()
-              .duration(200)
-              .style('max-height', '0px')
-              .style('opacity', '0')
-              .style('top', '-10px')
-              .remove();
+          return descendants;
+      }
 
-          var innerWrap = wraps.enter()
-              .insert('div', ':first-child');
 
-          innerWrap
-              .attr('class', 'entry')
-              .each(function() {
-                  var wrap = select(this);
+      function getSelectionText() {
+          return window.getSelection().toString();
+      }
 
-                  var label = wrap
-                      .append('label')
-                      .attr('class', 'form-field-label');
 
-                  label
-                      .append('span')
-                      .attr('class', 'label-text')
-                      .text(t('translate.localized_translation_label'));
+      function doCopy() {
+          if (!getSelectionText()) {
+              event.preventDefault();
+          }
 
-                  label
-                      .append('button')
-                      .attr('class', 'remove-icon-multilingual')
-                      .on('click', function(d){
-                          if (_isLocked) return;
-                          event.preventDefault();
-                          var t$$1 = {};
-                          t$$1[key(d.lang)] = undefined;
-                          dispatch$$1.call('change', this, t$$1);
-                          select(this.parentNode.parentNode.parentNode)
-                              .style('top', '0')
-                              .style('max-height', '240px')
-                              .transition()
-                              .style('opacity', '0')
-                              .style('max-height', '0px')
-                              .remove();
-                      })
-                      .call(svgIcon('#iD-operation-delete'));
+          var graph = context.graph();
+          var selected = groupEntities(context.selectedIDs(), graph);
+          var canCopy = [];
+          var skip = {};
+          var entity;
+          var i;
 
-                  wrap
-                      .append('input')
-                      .attr('class', 'localized-lang')
-                      .attr('type', 'text')
-                      .attr('placeholder', t('translate.localized_translation_language'))
-                      .on('blur', changeLang)
-                      .on('change', changeLang)
-                      .call(langCombo);
+          for (i = 0; i < selected.relation.length; i++) {
+              entity = selected.relation[i];
+              if (!skip[entity.id] && entity.isComplete(graph)) {
+                  canCopy.push(entity.id);
+                  skip = getDescendants(entity.id, graph, skip);
+              }
+          }
+          for (i = 0; i < selected.way.length; i++) {
+              entity = selected.way[i];
+              if (!skip[entity.id]) {
+                  canCopy.push(entity.id);
+                  skip = getDescendants(entity.id, graph, skip);
+              }
+          }
+          for (i = 0; i < selected.node.length; i++) {
+              entity = selected.node[i];
+              if (!skip[entity.id]) {
+                  canCopy.push(entity.id);
+              }
+          }
 
-                  wrap
-                      .append('input')
-                      .attr('type', 'text')
-                      .attr('placeholder', t('translate.localized_translation_name'))
-                      .attr('class', 'localized-value')
-                      .on('blur', changeValue)
-                      .on('change', changeValue);
-              });
+          context.copyIDs(canCopy);
+      }
 
-          innerWrap
-              .style('margin-top', '0px')
-              .style('max-height', '0px')
-              .style('opacity', '0')
-              .transition()
-              .duration(200)
-              .style('margin-top', '10px')
-              .style('max-height', '240px')
-              .style('opacity', '1')
-              .on('end', function() {
-                  select(this)
-                      .style('max-height', '')
-                      .style('overflow', 'visible');
-              });
 
+      function behavior() {
+          context.keybinding().on(uiCmd('⌘C'), doCopy);
+          return behavior;
+      }
 
-          var entry = selection$$1.selectAll('.entry');
+      behavior.off = function() {
+          context.keybinding().off(uiCmd('⌘C'));
+      };
 
-          utilGetSetValue(entry.select('.localized-lang'), function(d) {
-              var lang = find$1(wikipedia$2, function(lang) { return lang[2] === d.lang; });
-              return lang ? lang[1] : d.lang;
-          });
 
-          utilGetSetValue(entry.select('.localized-value'),
-              function(d) { return d.value; });
-      }
+      return behavior;
+  }
 
+  /*
+      `behaviorDrag` is like `d3_behavior.drag`, with the following differences:
 
-      localized.tags = function(tags) {
-          // Fetch translations from wikipedia
-          if (tags.wikipedia && !_wikiTitles) {
-              _wikiTitles = {};
-              var wm = tags.wikipedia.match(/([^:]+):(.+)/);
-              if (wm && wm[0] && wm[1]) {
-                  wikipedia.translations(wm[1], wm[2], function(d) { _wikiTitles = d; });
-              }
-          }
+      * The `origin` function is expected to return an [x, y] tuple rather than an
+        {x, y} object.
+      * The events are `start`, `move`, and `end`.
+        (https://github.com/mbostock/d3/issues/563)
+      * The `start` event is not dispatched until the first cursor movement occurs.
+        (https://github.com/mbostock/d3/pull/368)
+      * The `move` event has a `point` and `delta` [x, y] tuple properties rather
+        than `x`, `y`, `dx`, and `dy` properties.
+      * The `end` event is not dispatched if no movement occurs.
+      * An `off` function is available that unbinds the drag's internal event handlers.
+   */
 
-          utilGetSetValue(input, tags[field.key] || '');
+  function behaviorDrag() {
+      var dispatch$1 = dispatch('start', 'move', 'end');
+      var _origin = null;
+      var _selector = '';
+      var _event;
+      var _target;
+      var _surface;
 
-          calcMultilingual(tags);
 
-          _selection
-              .call(localized);
-      };
+      var d3_event_userSelectProperty = utilPrefixCSSProperty('UserSelect');
+      var d3_event_userSelectSuppress = function() {
+              var selection$1 = selection();
+              var select = selection$1.style(d3_event_userSelectProperty);
+              selection$1.style(d3_event_userSelectProperty, 'none');
+              return function() {
+                  selection$1.style(d3_event_userSelectProperty, select);
+              };
+          };
 
 
-      localized.focus = function() {
-          input.node().focus();
-      };
+      function d3_eventCancel() {
+          event.stopPropagation();
+          event.preventDefault();
+      }
 
 
-      localized.entity = function(val) {
-          if (!arguments.length) return _entity;
-          _entity = val;
-          _multilingual = [];
-          return localized;
-      };
+      function eventOf(thiz, argumentz) {
+          return function(e1) {
+              e1.target = behavior;
+              customEvent(e1, dispatch$1.apply, dispatch$1, [e1.type, thiz, argumentz]);
+          };
+      }
 
-      return utilRebind(localized, dispatch$$1, 'on');
-  }
 
-  function uiFieldMaxspeed(field, context) {
-      var dispatch$$1 = dispatch('change');
-      var unitInput = select(null);
-      var input = select(null);
-      var _entity;
-      var _isImperial;
+      function dragstart() {
+          _target = this;
+          _event = eventOf(_target, arguments);
 
-      var speedCombo = uiCombobox(context, 'maxspeed');
-      var unitCombo = uiCombobox(context, 'maxspeed-unit')
-              .data(['km/h', 'mph'].map(comboValues));
+          var eventTarget = event.target;
+          var touchId = event.touches ? event.changedTouches[0].identifier : null;
+          var offset;
+          var startOrigin = point();
+          var started = false;
+          var selectEnable = d3_event_userSelectSuppress(touchId !== null ? 'drag-' + touchId : 'drag');
 
-      var metricValues = [20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120];
-      var imperialValues = [5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80];
+          select(window)
+              .on(touchId !== null ? 'touchmove.drag-' + touchId : 'mousemove.drag', dragmove)
+              .on(touchId !== null ? 'touchend.drag-' + touchId : 'mouseup.drag', dragend, true);
 
+          if (_origin) {
+              offset = _origin.apply(_target, arguments);
+              offset = [offset[0] - startOrigin[0], offset[1] - startOrigin[1]];
+          } else {
+              offset = [0, 0];
+          }
 
-      function maxspeed(selection$$1) {
+          if (touchId === null) {
+              event.stopPropagation();
+          }
 
-          var wrap = selection$$1.selectAll('.form-field-input-wrap')
-              .data([0]);
 
-          wrap = wrap.enter()
-              .append('div')
-              .attr('class', 'form-field-input-wrap form-field-input-' + field.type)
-              .merge(wrap);
+          function point() {
+              var p = _surface || _target.parentNode;
+              return touchId !== null ? d3_touches(p).filter(function(p) {
+                  return p.identifier === touchId;
+              })[0] : mouse(p);
+          }
 
 
-          input = wrap.selectAll('#preset-input-' + field.safeid)
-              .data([0]);
+          function dragmove() {
+              var p = point();
+              var dx = p[0] - startOrigin[0];
+              var dy = p[1] - startOrigin[1];
 
-          input = input.enter()
-              .append('input')
-              .attr('type', 'text')
-              .attr('id', 'preset-input-' + field.safeid)
-              .attr('placeholder', field.placeholder())
-              .call(utilNoAuto)
-              .call(speedCombo)
-              .merge(input);
+              if (dx === 0 && dy === 0)
+                  return;
 
-          input
-              .on('change', change)
-              .on('blur', change);
+              startOrigin = p;
+              d3_eventCancel();
 
-          var loc;
-          if (_entity.type === 'node') {
-              loc = _entity.loc;
-          } else {
-              var childNodes = context.graph().childNodes(context.entity(_entity.id));
-              loc = childNodes[~~(childNodes.length/2)].loc;
+              if (!started) {
+                  started = true;
+                  _event({ type: 'start' });
+              } else {
+                  _event({
+                      type: 'move',
+                      point: [p[0] + offset[0],  p[1] + offset[1]],
+                      delta: [dx, dy]
+                  });
+              }
           }
 
-          _isImperial = some(dataImperial.features, function(f) {
-              return some(f.geometry.coordinates, function(d) {
-                  return geoPointInPolygon(loc, d);
-              });
-          });
-
-          unitInput = wrap.selectAll('input.maxspeed-unit')
-              .data([0]);
 
-          unitInput = unitInput.enter()
-              .append('input')
-              .attr('type', 'text')
-              .attr('class', 'maxspeed-unit')
-              .call(unitCombo)
-              .merge(unitInput);
+          function dragend() {
+              if (started) {
+                  _event({ type: 'end' });
 
-          unitInput
-              .on('blur', changeUnits)
-              .on('change', changeUnits);
+                  d3_eventCancel();
+                  if (event.target === eventTarget) {
+                      select(window)
+                          .on('click.drag', click, true);
+                  }
+              }
 
+              select(window)
+                  .on(touchId !== null ? 'touchmove.drag-' + touchId : 'mousemove.drag', null)
+                  .on(touchId !== null ? 'touchend.drag-' + touchId : 'mouseup.drag', null);
 
-          function changeUnits() {
-              _isImperial = utilGetSetValue(unitInput) === 'mph';
-              utilGetSetValue(unitInput, _isImperial ? 'mph' : 'km/h');
-              setSuggestions();
-              change();
+              selectEnable();
           }
-      }
 
 
-      function setSuggestions() {
-          speedCombo.data((_isImperial ? imperialValues : metricValues).map(comboValues));
-          utilGetSetValue(unitInput, _isImperial ? 'mph' : 'km/h');
+          function click() {
+              d3_eventCancel();
+              select(window)
+                  .on('click.drag', null);
+          }
       }
 
 
-      function comboValues(d) {
-          return {
-              value: d.toString(),
-              title: d.toString()
-          };
-      }
+      function behavior(selection) {
+          var matchesSelector = utilPrefixDOMProperty('matchesSelector');
+          var delegate = dragstart;
 
+          if (_selector) {
+              delegate = function() {
+                  var root = this;
+                  var target = event.target;
+                  for (; target && target !== root; target = target.parentNode) {
+                      var datum = target.__data__;
 
-      function change() {
-          var tag = {};
-          var value = utilGetSetValue(input);
+                      var entity = datum instanceof osmNote ? datum
+                          : datum && datum.properties && datum.properties.entity;
 
-          if (!value) {
-              tag[field.key] = undefined;
-          } else if (isNaN(value) || !_isImperial) {
-              tag[field.key] = value;
-          } else {
-              tag[field.key] = value + ' mph';
+                      if (entity && target[matchesSelector](_selector)) {
+                          return dragstart.call(target, entity);
+                      }
+                  }
+              };
           }
 
-          dispatch$$1.call('change', this, tag);
+          selection
+              .on('mousedown.drag' + _selector, delegate)
+              .on('touchstart.drag' + _selector, delegate);
       }
 
 
-      maxspeed.tags = function(tags) {
-          var value = tags[field.key];
+      behavior.off = function(selection) {
+          selection
+              .on('mousedown.drag' + _selector, null)
+              .on('touchstart.drag' + _selector, null);
+      };
 
-          if (value && value.indexOf('mph') >= 0) {
-              value = parseInt(value, 10);
-              _isImperial = true;
-          } else if (value) {
-              _isImperial = false;
-          }
 
-          setSuggestions();
-          utilGetSetValue(input, value || '');
+      behavior.selector = function(_) {
+          if (!arguments.length) return _selector;
+          _selector = _;
+          return behavior;
       };
 
 
-      maxspeed.focus = function() {
-          input.node().focus();
+      behavior.origin = function(_) {
+          if (!arguments.length) return _origin;
+          _origin = _;
+          return behavior;
       };
 
 
-      maxspeed.entity = function(val) {
-          _entity = val;
+      behavior.cancel = function() {
+          select(window)
+              .on('mousemove.drag', null)
+              .on('mouseup.drag', null);
+          return behavior;
       };
 
 
-      return utilRebind(maxspeed, dispatch$$1, 'on');
-  }
+      behavior.target = function() {
+          if (!arguments.length) return _target;
+          _target = arguments[0];
+          _event = eventOf(_target, Array.prototype.slice.call(arguments, 1));
+          return behavior;
+      };
 
-  /**
-   * This function is like `baseIndexOf` except that it accepts a comparator.
-   *
-   * @private
-   * @param {Array} array The array to inspect.
-   * @param {*} value The value to search for.
-   * @param {number} fromIndex The index to search from.
-   * @param {Function} comparator The comparator invoked per element.
-   * @returns {number} Returns the index of the matched value, else `-1`.
-   */
-  function baseIndexOfWith(array, value, fromIndex, comparator) {
-    var index = fromIndex - 1,
-        length = array.length;
 
-    while (++index < length) {
-      if (comparator(array[index], value)) {
-        return index;
-      }
-    }
-    return -1;
-  }
+      behavior.surface = function() {
+          if (!arguments.length) return _surface;
+          _surface = arguments[0];
+          return behavior;
+      };
 
-  /** Used for built-in method references. */
-  var arrayProto$2 = Array.prototype;
 
-  /** Built-in value references. */
-  var splice$2 = arrayProto$2.splice;
+      return utilRebind(behavior, dispatch$1, 'on');
+  }
 
-  /**
-   * The base implementation of `_.pullAllBy` without support for iteratee
-   * shorthands.
-   *
-   * @private
-   * @param {Array} array The array to modify.
-   * @param {Array} values The values to remove.
-   * @param {Function} [iteratee] The iteratee invoked per element.
-   * @param {Function} [comparator] The comparator invoked per element.
-   * @returns {Array} Returns `array`.
-   */
-  function basePullAll(array, values, iteratee, comparator) {
-    var indexOf = comparator ? baseIndexOfWith : baseIndexOf,
-        index = -1,
-        length = values.length,
-        seen = array;
+  function behaviorDrawWay(context, wayID, index, mode, startGraph, baselineGraph) {
 
-    if (array === values) {
-      values = copyArray(values);
-    }
-    if (iteratee) {
-      seen = arrayMap(array, baseUnary(iteratee));
-    }
-    while (++index < length) {
-      var fromIndex = 0,
-          value = values[index],
-          computed = iteratee ? iteratee(value) : value;
+      var origWay = context.entity(wayID);
 
-      while ((fromIndex = indexOf(seen, computed, fromIndex, comparator)) > -1) {
-        if (seen !== array) {
-          splice$2.call(seen, fromIndex, 1);
-        }
-        splice$2.call(array, fromIndex, 1);
-      }
-    }
-    return array;
-  }
+      var annotation = t((origWay.isDegenerate() ?
+          'operations.start.annotation.' :
+          'operations.continue.annotation.') + context.geometry(wayID)
+      );
 
-  /**
-   * This method is like `_.pull` except that it accepts an array of values to remove.
-   *
-   * **Note:** Unlike `_.difference`, this method mutates `array`.
-   *
-   * @static
-   * @memberOf _
-   * @since 4.0.0
-   * @category Array
-   * @param {Array} array The array to modify.
-   * @param {Array} values The values to remove.
-   * @returns {Array} Returns `array`.
-   * @example
-   *
-   * var array = ['a', 'b', 'c', 'a', 'b', 'c'];
-   *
-   * _.pullAll(array, ['a', 'c']);
-   * console.log(array);
-   * // => ['b', 'b']
-   */
-  function pullAll(array, values) {
-    return (array && array.length && values && values.length)
-      ? basePullAll(array, values)
-      : array;
-  }
+      var behavior = behaviorDraw(context);
+      behavior.hover().initialNodeId(index ? origWay.nodes[index] : origWay.nodes[origWay.nodes.length - 1]);
 
-  /**
-   * Removes all given values from `array` using
-   * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
-   * for equality comparisons.
-   *
-   * **Note:** Unlike `_.without`, this method mutates `array`. Use `_.remove`
-   * to remove elements from an array by predicate.
-   *
-   * @static
-   * @memberOf _
-   * @since 2.0.0
-   * @category Array
-   * @param {Array} array The array to modify.
-   * @param {...*} [values] The values to remove.
-   * @returns {Array} Returns `array`.
-   * @example
-   *
-   * var array = ['a', 'b', 'c', 'a', 'b', 'c'];
-   *
-   * _.pull(array, 'a', 'c');
-   * console.log(array);
-   * // => ['b', 'b']
-   */
-  var pull = baseRest(pullAll);
+      var _tempEdits = 0;
 
-  function uiFieldRadio(field, context) {
-      var dispatch$$1 = dispatch('change');
-      var placeholder = select(null);
-      var wrap = select(null);
-      var labels = select(null);
-      var radios = select(null);
-      var radioData = clone(field.options || field.keys);
-      var typeField;
-      var layerField;
-      var _oldType = {};
-      var _entity;
+      var end = osmNode({ loc: context.map().mouseCoordinates() });
 
+      // Push an annotated state for undo to return back to.
+      // We must make sure to remove this edit later.
+      context.perform(actionNoop(), annotation);
+      _tempEdits++;
 
-      function selectedKey() {
-          var node = wrap.selectAll('.form-field-input-radio label.active input');
-          return !node.empty() && node.datum();
-      }
+      // Add the drawing node to the graph.
+      // We must make sure to remove this edit later.
+      context.perform(_actionAddDrawNode());
+      _tempEdits++;
 
 
-      function radio(selection$$1) {
-          selection$$1.classed('preset-radio', true);
+      function keydown() {
+          if (event.keyCode === utilKeybinding.modifierCodes.alt) {
+              if (context.surface().classed('nope')) {
+                  context.surface()
+                      .classed('nope-suppressed', true);
+              }
+              context.surface()
+                  .classed('nope', false)
+                  .classed('nope-disabled', true);
+          }
+      }
 
-          wrap = selection$$1.selectAll('.form-field-input-wrap')
-              .data([0]);
 
-          var enter = wrap.enter()
-              .append('div')
-              .attr('class', 'form-field-input-wrap form-field-input-radio');
+      function keyup() {
+          if (event.keyCode === utilKeybinding.modifierCodes.alt) {
+              if (context.surface().classed('nope-suppressed')) {
+                  context.surface()
+                      .classed('nope', true);
+              }
+              context.surface()
+                  .classed('nope-suppressed', false)
+                  .classed('nope-disabled', false);
+          }
+      }
 
-          enter
-              .append('span')
-              .attr('class', 'placeholder');
 
-          wrap = wrap
-              .merge(enter);
+      function allowsVertex(d) {
+          return context.presets().allowsVertex(d, context.graph());
+      }
 
 
-          placeholder = wrap.selectAll('.placeholder');
+      // related code
+      // - `mode/drag_node.js`     `doMode()`
+      // - `behavior/draw.js`      `click()`
+      // - `behavior/draw_way.js`  `move()`
+      function move(datum) {
+          context.surface().classed('nope-disabled', event.altKey);
 
-          labels = wrap.selectAll('label')
-              .data(radioData);
+          var targetLoc = datum && datum.properties && datum.properties.entity && allowsVertex(datum.properties.entity) && datum.properties.entity.loc;
+          var targetNodes = datum && datum.properties && datum.properties.nodes;
+          var loc = context.map().mouseCoordinates();
 
-          enter = labels.enter()
-              .append('label');
+          if (targetLoc) {   // snap to node/vertex - a point target with `.loc`
+              loc = targetLoc;
 
-          enter
-              .append('input')
-              .attr('type', 'radio')
-              .attr('name', field.id)
-              .attr('value', function(d) { return field.t('options.' + d, { 'default': d }); })
-              .attr('checked', false);
+          } else if (targetNodes) {   // snap to way - a line target with `.nodes`
+              var choice = geoChooseEdge(targetNodes, context.mouse(), context.projection, end.id);
+              if (choice) {
+                  loc = choice.loc;
+              }
+          }
 
-          enter
-              .append('span')
-              .text(function(d) { return field.t('options.' + d, { 'default': d }); });
+          context.replace(actionMoveNode(end.id, loc));
+          end = context.entity(end.id);
+          checkGeometry(false);
+      }
 
-          labels = labels
-              .merge(enter);
 
-          radios = labels.selectAll('input')
-              .on('change', changeRadio);
+      // Check whether this edit causes the geometry to break.
+      // If so, class the surface with a nope cursor.
+      // `finishDraw` - Only checks the relevant line segments if finishing drawing
+      function checkGeometry(finishDraw) {
+          var nopeDisabled = context.surface().classed('nope-disabled');
+          var isInvalid = isInvalidGeometry(end, context.graph(), finishDraw);
 
+          if (nopeDisabled) {
+              context.surface()
+                  .classed('nope', false)
+                  .classed('nope-suppressed', isInvalid);
+          } else {
+              context.surface()
+                  .classed('nope', isInvalid)
+                  .classed('nope-suppressed', false);
+          }
       }
 
 
-      function structureExtras(selection$$1, tags) {
-          var selected = selectedKey();
-          var type = context.presets().field(selected);
-          var layer = context.presets().field('layer');
-          var showLayer = (selected === 'bridge' || selected === 'tunnel');
+      function isInvalidGeometry(entity, graph, finishDraw) {
+          var parents = graph.parentWays(entity);
 
+          for (var i = 0; i < parents.length; i++) {
+              var parent = parents[i];
 
-          var extrasWrap = selection$$1.selectAll('.structure-extras-wrap')
-              .data(selected ? [0] : []);
+              var nodes = graph.childNodes(parent);
 
-          extrasWrap.exit()
-              .remove();
+              if (origWay.isClosed()) { // Check if Area
+                  if (finishDraw) {
+                      nodes.splice(-2, 1);
+                      entity = nodes[nodes.length-2];
+                  } else {
+                      nodes.pop();
+                  }
+              } else { // Line
+                  if (finishDraw) {
+                      nodes.pop();
+                  }
+              }
 
-          extrasWrap = extrasWrap.enter()
-              .append('div')
-              .attr('class', 'structure-extras-wrap')
-              .merge(extrasWrap);
+              if (geoHasSelfIntersections(nodes, entity.id)) {
+                  return true;
+              }
+          }
 
-          var list = extrasWrap.selectAll('ul')
-              .data([0]);
+          return false;
+      }
 
-          list = list.enter()
-              .append('ul')
-              .attr('class', 'labeled-inputs')
-              .merge(list);
 
+      function undone() {
+          // Undo popped the history back to the initial annotated no-op edit.
+          _tempEdits = 0;     // We will deal with the temp edits here
+          context.pop(1);     // Remove initial no-op edit
 
-          // Type
-          if (type) {
-              if (!typeField || typeField.id !== selected) {
-                  typeField = uiField(context, type, _entity, { wrap: false })
-                      .on('change', changeType);
+          if (context.graph() === baselineGraph) {    // We've undone back to the beginning
+              // baselineGraph may be behind startGraph if this way was added rather than continued
+              while (context.graph() !== startGraph) {
+                  context.pop();
               }
-              typeField.tags(tags);
+              context.enter(modeSelect(context, [wayID]));
           } else {
-              typeField = null;
+              // Remove whatever segment was drawn previously and continue drawing
+              context.pop(1);
+              context.enter(mode);
           }
+      }
 
-          var typeItem = list.selectAll('.structure-type-item')
-              .data(typeField ? [typeField] : [], function(d) { return d.id; });
 
-          // Exit
-          typeItem.exit()
-              .remove();
+      function setActiveElements() {
+          context.surface().selectAll('.' + end.id)
+              .classed('active', true);
+      }
 
-          // Enter
-          var typeEnter = typeItem.enter()
-              .insert('li', ':first-child')
-              .attr('class', 'structure-type-item');
 
-          typeEnter
-              .append('span')
-              .attr('class', 'label structure-label-type')
-              .attr('for', 'preset-input-' + selected)
-              .text(t('inspector.radio.structure.type'));
+      var drawWay = function(surface) {
+          behavior
+              .on('move', move)
+              .on('click', drawWay.add)
+              .on('clickWay', drawWay.addWay)
+              .on('clickNode', drawWay.addNode)
+              .on('undo', context.undo)
+              .on('cancel', drawWay.cancel)
+              .on('finish', drawWay.finish);
 
-          typeEnter
-              .append('div')
-              .attr('class', 'structure-input-type-wrap');
+          select(window)
+              .on('keydown.drawWay', keydown)
+              .on('keyup.drawWay', keyup);
 
-          // Update
-          typeItem = typeItem
-              .merge(typeEnter);
+          context.map()
+              .dblclickEnable(false)
+              .on('drawn.draw', setActiveElements);
 
-          if (typeField) {
-              typeItem.selectAll('.structure-input-type-wrap')
-                  .call(typeField.render);
-          }
+          setActiveElements();
 
+          surface.call(behavior);
 
-          // Layer
-          if (layer && showLayer) {
-              if (!layerField) {
-                  layerField = uiField(context, layer, _entity, { wrap: false })
-                      .on('change', changeLayer);
-              }
-              layerField.tags(tags);
-              field.keys = union(field.keys, ['layer']);
-          } else {
-              layerField = null;
-              pull(field.keys, 'layer');
+          context.history()
+              .on('undone.draw', undone);
+      };
+
+
+      drawWay.off = function(surface) {
+          // Drawing was interrupted unexpectedly.
+          // This can happen if the user changes modes,
+          // clicks geolocate button, a hashchange event occurs, etc.
+          if (_tempEdits) {
+              context.history().reset('drawWay-initial');
           }
 
-          var layerItem = list.selectAll('.structure-layer-item')
-              .data(layerField ? [layerField] : []);
+          context.map()
+              .on('drawn.draw', null);
 
-          // Exit
-          layerItem.exit()
-              .remove();
+          surface.call(behavior.off)
+              .selectAll('.active')
+              .classed('active', false);
 
-          // Enter
-          var layerEnter = layerItem.enter()
-              .append('li')
-              .attr('class', 'structure-layer-item');
+          surface
+              .classed('nope', false)
+              .classed('nope-suppressed', false)
+              .classed('nope-disabled', false);
 
-          layerEnter
-              .append('span')
-              .attr('class', 'label structure-label-layer')
-              .attr('for', 'preset-input-layer')
-              .text(t('inspector.radio.structure.layer'));
+          select(window)
+              .on('keydown.hover', null)
+              .on('keyup.hover', null);
 
-          layerEnter
-              .append('div')
-              .attr('class', 'structure-input-layer-wrap');
+          context.history()
+              .on('undone.draw', null);
+      };
 
-          // Update
-          layerItem = layerItem
-              .merge(layerEnter);
 
-          if (layerField) {
-              layerItem.selectAll('.structure-input-layer-wrap')
-                  .call(layerField.render);
-          }
+      function _actionAddDrawNode() {
+          return function(graph) {
+              return graph
+                  .replace(end)
+                  .replace(origWay.addNode(end.id, index));
+          };
       }
 
 
-      function changeType(t$$1, onInput) {
-          var key = selectedKey();
-          if (!key) return;
+      function _actionReplaceDrawNode(newNode) {
+          return function(graph) {
+              return graph
+                  .replace(origWay.addNode(newNode.id, index))
+                  .remove(end);
+          };
+      }
 
-          var val = t$$1[key];
-          if (val !== 'no') {
-              _oldType[key] = val;
+
+      // Accept the current position of the drawing node and continue drawing.
+      drawWay.add = function(loc, d) {
+          if ((d && d.properties && d.properties.nope) || context.surface().classed('nope')) {
+              return;   // can't click here
           }
 
-          if (field.type === 'structureRadio') {
-              // remove layer if it should not be set
-              if (val === 'no' ||
-                  (key !== 'bridge' && key !== 'tunnel') ||
-                  (key === 'tunnel' && val === 'building_passage')) {
-                  t$$1.layer = undefined;
-              }
-              // add layer if it should be set
-              if (t$$1.layer === undefined) {
-                  if (key === 'bridge' && val !== 'no') {
-                      t$$1.layer = '1';
-                  }
-                  if (key === 'tunnel' && val !== 'no' && val !== 'building_passage') {
-                      t$$1.layer = '-1';
-                  }
-              }
-           }
+          context.pop(_tempEdits);
+          _tempEdits = 0;
 
-          dispatch$$1.call('change', this, t$$1, onInput);
-      }
+          context.perform(
+              _actionAddDrawNode(),
+              annotation
+          );
+
+          checkGeometry(false);   // finishDraw = false
+          context.enter(mode);
+      };
 
 
-      function changeLayer(t$$1, onInput) {
-          if (t$$1.layer === '0') {
-              t$$1.layer = undefined;
+      // Connect the way to an existing way.
+      drawWay.addWay = function(loc, edge, d) {
+          if ((d && d.properties && d.properties.nope) || context.surface().classed('nope')) {
+              return;   // can't click here
           }
-          dispatch$$1.call('change', this, t$$1, onInput);
-      }
 
+          context.pop(_tempEdits);
+          _tempEdits = 0;
 
-      function changeRadio() {
-          var t$$1 = {};
-          var activeKey;
+          context.perform(
+              _actionAddDrawNode(),
+              actionAddMidpoint({ loc: loc, edge: edge }, end),
+              annotation
+          );
 
-          if (field.key) {
-              t$$1[field.key] = undefined;
+          checkGeometry(false);   // finishDraw = false
+          context.enter(mode);
+      };
+
+
+      // Connect the way to an existing node and continue drawing.
+      drawWay.addNode = function(node, d) {
+          if ((d && d.properties && d.properties.nope) || context.surface().classed('nope')) {
+              return;   // can't click here
           }
 
-          radios.each(function(d) {
-              var active = select(this).property('checked');
-              if (active) activeKey = d;
+          context.pop(_tempEdits);
+          _tempEdits = 0;
 
-              if (field.key) {
-                  if (active) t$$1[field.key] = d;
-              } else {
-                  var val = _oldType[activeKey] || 'yes';
-                  t$$1[d] = active ? val : undefined;
-              }
-          });
+          context.perform(
+              _actionReplaceDrawNode(node),
+              annotation
+          );
 
-          if (field.type === 'structureRadio') {
-              if (activeKey === 'bridge') {
-                  t$$1.layer = '1';
-              } else if (activeKey === 'tunnel' && t$$1.tunnel !== 'building_passage') {
-                  t$$1.layer = '-1';
-              } else {
-                  t$$1.layer = undefined;
-              }
-          }
+          checkGeometry(false);   // finishDraw = false
+          context.enter(mode);
+      };
 
-          dispatch$$1.call('change', this, t$$1);
-      }
 
+      // Finish the draw operation, removing the temporary edits.
+      // If the way has enough nodes to be valid, it's selected.
+      // Otherwise, delete everything and return to browse mode.
+      drawWay.finish = function() {
+          checkGeometry(true);   // finishDraw = true
+          if (context.surface().classed('nope')) {
+              return;   // can't click here
+          }
 
-      radio.tags = function(tags) {
-          function checked(d) {
-              if (field.key) {
-                  return tags[field.key] === d;
-              } else {
-                  return !!(tags[d] && tags[d].toLowerCase() !== 'no');
-              }
+          context.pop(_tempEdits);
+          _tempEdits = 0;
+
+          var way = context.hasEntity(wayID);
+          if (!way || way.isDegenerate()) {
+              drawWay.cancel();
+              return;
           }
 
-          labels.classed('active', checked);
-          radios.property('checked', checked);
+          window.setTimeout(function() {
+              context.map().dblclickEnable(true);
+          }, 1000);
+          var isNewFeature = !mode.isContinuing;
+          context.enter(modeSelect(context, [wayID]).newFeature(isNewFeature));
+      };
 
-          var selection$$1 = radios.filter(function() { return this.checked; });
 
-          if (selection$$1.empty()) {
-              placeholder.text(t('inspector.none'));
-          } else {
-              placeholder.text(selection$$1.attr('value'));
-              _oldType[selection$$1.datum()] = tags[selection$$1.datum()];
+      // Cancel the draw operation, delete everything, and return to browse mode.
+      drawWay.cancel = function() {
+          context.pop(_tempEdits);
+          _tempEdits = 0;
+
+          while (context.graph() !== startGraph) {
+              context.pop();
           }
 
-          if (field.type === 'structureRadio') {
-              // For waterways without a tunnel tag, set 'culvert' as
-              // the _oldType to default to if the user picks 'tunnel'
-              if (!!tags.waterway && !_oldType.tunnel) {
-                  _oldType.tunnel = 'culvert';
-              }
+          window.setTimeout(function() {
+              context.map().dblclickEnable(true);
+          }, 1000);
 
-              wrap.call(structureExtras, tags);
-          }
+          context.surface()
+              .classed('nope', false)
+              .classed('nope-disabled', false)
+              .classed('nope-suppressed', false);
+
+          context.enter(modeBrowse(context));
       };
 
 
-      radio.focus = function() {
-          radios.node().focus();
+      drawWay.activeID = function() {
+          if (!arguments.length) return end.id;
+          // no assign
+          return drawWay;
       };
 
 
-      radio.entity = function(val) {
-          if (!arguments.length) return _entity;
-          _entity = val;
-          _oldType = {};
-          return radio;
+      drawWay.tail = function(text) {
+          behavior.tail(text);
+          return drawWay;
       };
 
 
-      return utilRebind(radio, dispatch$$1, 'on');
+      return drawWay;
   }
 
-  function uiFieldRestrictions(field, context) {
-      var dispatch$$1 = dispatch('change');
-      var breathe = behaviorBreathe(context);
-      var storedViaWay = context.storage('turn-restriction-via-way');
-      var storedDistance = context.storage('turn-restriction-distance');
+  function behaviorHash(context) {
+      var s0 = null; // cached window.location.hash
+      var lat = 90 - 1e-8; // allowable latitude range
 
-      var _maxViaWay = storedViaWay !== null ? (+storedViaWay) : 1;
-      var _maxDistance = storedDistance ? (+storedDistance) : 30;
-      var _initialized = false;
-      var _parent = select(null);       // the entire field
-      var _container = select(null);    // just the map
-      var _oldTurns;
-      var _graph;
-      var _vertexID;
-      var _intersection;
-      var _fromWayID;
 
-      var _lastXPos;
+      var parser = function(map, s) {
+          var q = utilStringQs(s);
+          var args = (q.map || '').split('/').map(Number);
+
+          if (args.length < 3 || args.some(isNaN)) {
+              return true; // replace bogus hash
 
+          } else if (s !== formatter(map).slice(1)) {   // hash has changed
+              var mode = context.mode(),
+                  dist = geoSphericalDistance(map.center(), [args[2], args[1]]),
+                  maxdist = 500;
 
-      function restrictions(selection$$1) {
-          _parent = selection$$1;
+              // 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));
+              }
 
-          // try to reuse the intersection, but always rebuild it if the graph has changed
-          if (_vertexID && (context.graph() !== _graph || !_intersection)) {
-              _graph = context.graph();
-              _intersection = osmIntersection(_graph, _vertexID, _maxDistance);
+              map.centerZoom([args[2], Math.min(lat, Math.max(-lat, args[1]))], args[0]);
           }
+      };
 
-          // It's possible for there to be no actual intersection here.
-          // for example, a vertex of two `highway=path`
-          // In this case, hide the field.
-          var isOK = (
-              _intersection &&
-              _intersection.vertices.length &&           // has vertices
-              _intersection.vertices                     // has the vertex that the user selected
-                  .filter(function(vertex) { return vertex.id === _vertexID; }).length &&
-              _intersection.ways.length > 2 &&           // has more than 2 ways
-              _intersection.ways                         // has more than 1 TO way
-                  .filter(function(way) { return way.__to; }).length > 1
-          );
 
-          // Also hide in the case where
-          select(selection$$1.node().parentNode).classed('hide', !isOK);
+      var formatter = function(map) {
+          var center = map.center();
+          var zoom = map.zoom();
+          var precision = Math.max(0, Math.ceil(Math.log(zoom) / Math.LN2));
+          var q = omit(utilStringQs(window.location.hash.substring(1)),
+              ['comment', 'source', 'hashtags', 'walkthrough']
+          );
+          var newParams = {};
 
-          // if form field is hidden or has detached from dom, clean up.
-          if (!isOK ||
-              !select('.inspector-wrap.inspector-hidden').empty() ||
-              !selection$$1.node().parentNode ||
-              !selection$$1.node().parentNode.parentNode) {
-              selection$$1.call(restrictions.off);
-              return;
+          delete q.id;
+          var selected = context.selectedIDs().filter(function(id) {
+              return !context.entity(id).isNew();
+          });
+          if (selected.length) {
+              newParams.id = selected.join(',');
           }
 
+          newParams.map = zoom.toFixed(2) +
+              '/' + center[1].toFixed(precision) +
+              '/' + center[0].toFixed(precision);
 
-          var wrap = selection$$1.selectAll('.form-field-input-wrap')
-              .data([0]);
-
-          wrap = wrap.enter()
-              .append('div')
-              .attr('class', 'form-field-input-wrap form-field-input-' + field.type)
-              .merge(wrap);
+          return '#' + utilQsString(assign(q, newParams), true);
+      };
 
-          var container = wrap.selectAll('.restriction-container')
-              .data([0]);
 
-          // enter
-          var containerEnter = container.enter()
-              .append('div')
-              .attr('class', 'restriction-container');
+      function update() {
+          if (context.inIntro()) return;
+          var s1 = formatter(context.map());
+          if (s0 !== s1) {
+              window.location.replace(s0 = s1);  // don't recenter the map!
+          }
+      }
 
-          containerEnter
-              .append('div')
-              .attr('class', 'restriction-help');
 
-          // update
-          _container = containerEnter
-              .merge(container)
-              .call(renderViewer);
+      var throttledUpdate = throttle(update, 500);
 
-          var controls = wrap.selectAll('.restriction-controls')
-              .data([0]);
 
-          // enter/update
-          controls.enter()
-              .append('div')
-              .attr('class', 'restriction-controls-container')
-              .append('div')
-              .attr('class', 'restriction-controls')
-              .merge(controls)
-              .call(renderControls);
+      function hashchange() {
+          if (window.location.hash === s0) return;  // ignore spurious hashchange events
+          if (parser(context.map(), (s0 = window.location.hash).substring(1))) {
+              update(); // replace bogus hash
+          }
       }
 
 
-      function renderControls(selection$$1) {
-          var distControl = selection$$1.selectAll('.restriction-distance')
-              .data([0]);
+      function behavior() {
+          context.map()
+              .on('move.hash', throttledUpdate);
 
-          distControl.exit()
-              .remove();
+          context
+              .on('enter.hash', throttledUpdate);
 
-          var distControlEnter = distControl.enter()
-              .append('div')
-              .attr('class', 'restriction-control restriction-distance');
+          select(window)
+              .on('hashchange.hash', hashchange);
 
-          distControlEnter
-              .append('span')
-              .attr('class', 'restriction-control-label restriction-distance-label')
-              .text(t('restriction.controls.distance') + ':');
+          if (window.location.hash) {
+              var q = utilStringQs(window.location.hash.substring(1));
 
-          distControlEnter
-              .append('input')
-              .attr('class', 'restriction-distance-input')
-              .attr('type', 'range')
-              .attr('min', '20')
-              .attr('max', '50')
-              .attr('step', '5');
+              if (q.id) {
+                  context.zoomToEntity(q.id.split(',')[0], !q.map);
+              }
 
-          distControlEnter
-              .append('span')
-              .attr('class', 'restriction-distance-text');
+              if (q.comment) {
+                  context.storage('comment', q.comment);
+                  context.storage('commentDate', Date.now());
+              }
 
-          // update
-          selection$$1.selectAll('.restriction-distance-input')
-              .property('value', _maxDistance)
-              .on('input', function() {
-                  var val = select(this).property('value');
-                  _maxDistance = +val;
-                  _intersection = null;
-                  _container.selectAll('.layer-osm .layer-turns *').remove();
-                  context.storage('turn-restriction-distance', _maxDistance);
-                  _parent.call(restrictions);
-              });
+              if (q.source) {
+                  context.storage('source', q.source);
+                  context.storage('commentDate', Date.now());
+              }
 
-          selection$$1.selectAll('.restriction-distance-text')
-              .text(displayMaxDistance(_maxDistance));
+              if (q.hashtags) {
+                  context.storage('hashtags', q.hashtags);
+              }
 
+              if (q.walkthrough === 'true') {
+                  behavior.startWalkthrough = true;
+              }
 
-          var viaControl = selection$$1.selectAll('.restriction-via-way')
-              .data([0]);
+              hashchange();
 
-          viaControl.exit()
-              .remove();
+              if (q.map) {
+                  behavior.hadHash = true;
+              }
+          }
+      }
 
-          var viaControlEnter = viaControl.enter()
-              .append('div')
-              .attr('class', 'restriction-control restriction-via-way');
 
-          viaControlEnter
-              .append('span')
-              .attr('class', 'restriction-control-label restriction-via-way-label')
-              .text(t('restriction.controls.via') + ':');
+      behavior.off = function() {
+          throttledUpdate.cancel();
 
-          viaControlEnter
-              .append('input')
-              .attr('class', 'restriction-via-way-input')
-              .attr('type', 'range')
-              .attr('min', '0')
-              .attr('max', '2')
-              .attr('step', '1');
+          context.map()
+              .on('move.hash', null);
 
-          viaControlEnter
-              .append('span')
-              .attr('class', 'restriction-via-way-text');
+          context
+              .on('enter.hash', null);
 
-          // update
-          selection$$1.selectAll('.restriction-via-way-input')
-              .property('value', _maxViaWay)
-              .on('input', function() {
-                  var val = select(this).property('value');
-                  _maxViaWay = +val;
-                  _container.selectAll('.layer-osm .layer-turns *').remove();
-                  context.storage('turn-restriction-via-way', _maxViaWay);
-                  _parent.call(restrictions);
-              });
+          select(window)
+              .on('hashchange.hash', null);
 
-          selection$$1.selectAll('.restriction-via-way-text')
-              .text(displayMaxVia(_maxViaWay));
-      }
+          window.location.hash = '';
+      };
 
 
-      function renderViewer(selection$$1) {
-          if (!_intersection) return;
+      return behavior;
+  }
 
-          var vgraph = _intersection.graph;
-          var filter = utilFunctor(true);
-          var projection = geoRawMercator();
+  function behaviorLasso(context) {
 
-          // Reflow warning: `utilGetDimensions` calls `getBoundingClientRect`
-          // Instead of asking the restriction-container for its dimensions,
-          //  we can ask the #sidebar, which can have its dimensions cached.
-          // width: calc as sidebar - padding
-          // height: hardcoded (from `80_app.css`)
-          // var d = utilGetDimensions(selection);
-          var sdims = utilGetDimensions(select('#sidebar'));
-          var d = [ sdims[0] - 50, 370 ];
-          var c = geoVecScale(d, 0.5);
-          var z = 22;
+      var behavior = function(selection) {
+          var lasso;
 
-          projection.scale(geoZoomToScale(z));
 
-          // Calculate extent of all key vertices
-          var extent = geoExtent$$1();
-          for (var i = 0; i < _intersection.vertices.length; i++) {
-              extent._extend(_intersection.vertices[i].extent());
-          }
+          function mousedown() {
+              var button = 0;  // left
+              if (event.button === button && event.shiftKey === true) {
+                  lasso = null;
 
-          // If this is a large intersection, adjust zoom to fit extent
-          if (_intersection.vertices.length > 1) {
-              var padding = 180;   // in z22 pixels
-              var tl = projection([extent[0][0], extent[1][1]]);
-              var br = projection([extent[1][0], extent[0][1]]);
-              var hFactor = (br[0] - tl[0]) / (d[0] - padding);
-              var vFactor = (br[1] - tl[1]) / (d[1] - padding);
-              var hZoomDiff = Math.log(Math.abs(hFactor)) / Math.LN2;
-              var vZoomDiff = Math.log(Math.abs(vFactor)) / Math.LN2;
-              z = z - Math.max(hZoomDiff, vZoomDiff);
-              projection.scale(geoZoomToScale(z));
+                  select(window)
+                      .on('mousemove.lasso', mousemove)
+                      .on('mouseup.lasso', mouseup);
+
+                  event.stopPropagation();
+              }
           }
 
-          var padTop = 35;   // reserve top space for hint text
-          var extentCenter = projection(extent.center());
-          extentCenter[1] = extentCenter[1] - padTop;
 
-          projection
-              .translate(geoVecSubtract(c, extentCenter))
-              .clipExtent([[0, 0], d]);
+          function mousemove() {
+              if (!lasso) {
+                  lasso = uiLasso(context);
+                  context.surface().call(lasso);
+              }
 
-          var drawLayers = svgLayers(projection, context).only(['osm','touch']).dimensions(d);
-          var drawVertices = svgVertices$$1(projection, context);
-          var drawLines = svgLines$$1(projection, context);
-          var drawTurns = svgTurns(projection, context);
+              lasso.p(context.mouse());
+          }
 
-          var firstTime = selection$$1.selectAll('.surface').empty();
 
-          selection$$1
-              .call(drawLayers);
+          function normalize(a, b) {
+              return [
+                  [Math.min(a[0], b[0]), Math.min(a[1], b[1])],
+                  [Math.max(a[0], b[0]), Math.max(a[1], b[1])]];
+          }
 
-          var surface = selection$$1.selectAll('.surface')
-              .classed('tr', true);
 
-          if (firstTime) {
-              _initialized = true;
+          function lassoed() {
+              if (!lasso) return [];
 
-              surface
-                  .call(breathe);
-          }
+              var graph = context.graph();
+              var bounds = lasso.extent().map(context.projection.invert);
+              var extent = geoExtent(normalize(bounds[0], bounds[1]));
 
-          // This can happen if we've lowered the detail while a FROM way
-          // is selected, and that way is no longer part of the intersection.
-          if (_fromWayID && !vgraph.hasEntity(_fromWayID)) {
-              _fromWayID = null;
-              _oldTurns = null;
+              return map$3(context.intersects(extent).filter(function(entity) {
+                  return entity.type === 'node' &&
+                      geoPointInPolygon(context.projection(entity.loc), lasso.coordinates) &&
+                      !context.features().isHidden(entity, graph, entity.geometry(graph));
+              }), 'id');
           }
 
-          surface
-              .call(utilSetDimensions, d)
-              .call(drawVertices, vgraph, _intersection.vertices, filter, extent, z)
-              .call(drawLines, vgraph, _intersection.ways, filter)
-              .call(drawTurns, vgraph, _intersection.turns(_fromWayID, _maxViaWay));
 
-          surface
-              .on('click.restrictions', click)
-              .on('mouseover.restrictions', mouseover);
+          function mouseup() {
+              select(window)
+                  .on('mousemove.lasso', null)
+                  .on('mouseup.lasso', null);
 
-          surface
-              .selectAll('.selected')
-              .classed('selected', false);
+              if (!lasso) return;
 
-          surface
-              .selectAll('.related')
-              .classed('related', false);
+              var ids = lassoed();
+              lasso.close();
 
-          if (_fromWayID) {
-              var way = vgraph.entity(_fromWayID);
-              surface
-                  .selectAll('.' + _fromWayID)
-                  .classed('selected', true)
-                  .classed('related', true);
+              if (ids.length) {
+                  context.enter(modeSelect(context, ids));
+              }
           }
 
-          document.addEventListener('resizeWindow', function () {
-              utilSetDimensions(_container, null);
-              redraw(1);
-          }, false);
+          selection
+              .on('mousedown.lasso', mousedown);
+      };
 
-          updateHints(null);
 
+      behavior.off = function(selection) {
+          selection.on('mousedown.lasso', null);
+      };
 
-          function click() {
-              surface
-                  .call(breathe.off)
-                  .call(breathe);
 
-              var datum = event.target.__data__;
-              var entity = datum && datum.properties && datum.properties.entity;
-              if (entity) {
-                  datum = entity;
-              }
+      return behavior;
+  }
 
-              if (datum instanceof osmWay && (datum.__from || datum.__via)) {
-                  _fromWayID = datum.id;
-                  _oldTurns = null;
-                  redraw();
+  /* Creates a keybinding behavior for an operation */
+  function behaviorOperation(context) {
+      var _operation;
 
-              } else if (datum instanceof osmTurn) {
-                  var actions, extraActions, turns, i;
-                  var restrictionType = osmInferRestriction(vgraph, datum, projection);
+      function keypress() {
+          event.preventDefault();
+          var disabled = _operation.disabled();
+          var flash;
 
-                  if (datum.restrictionID && !datum.direct) {
-                      return;
+          if (disabled) {
+              flash = uiFlash()
+                  .duration(4000)
+                  .iconName('#iD-operation-' + _operation.id)
+                  .iconClass('operation disabled')
+                  .text(_operation.tooltip);
 
-                  } else if (datum.restrictionID && !datum.only) {    // NO -> ONLY
-                      var seen = {};
-                      var datumOnly = cloneDeep(datum);
-                      datumOnly.only = true;
-                      restrictionType = restrictionType.replace(/^no/, 'only');
+              flash();
 
-                      // Adding an ONLY restriction should destroy all other direct restrictions from the FROM towards the VIA.
-                      // We will remember them in _oldTurns, and restore them if the user clicks again.
-                      turns = _intersection.turns(_fromWayID, 2);
-                      extraActions = [];
-                      _oldTurns = [];
-                      for (i = 0; i < turns.length; i++) {
-                          var turn = turns[i];
-                          if (seen[turn.restrictionID]) continue;  // avoid deleting the turn twice (#4968, #4928)
+          } else {
+              flash = uiFlash()
+                  .duration(2000)
+                  .iconName('#iD-operation-' + _operation.id)
+                  .iconClass('operation')
+                  .text(_operation.annotation() || _operation.title);
 
-                          if (turn.direct && turn.path[1] === datum.path[1]) {
-                              seen[turns[i].restrictionID] = true;
-                              turn.restrictionType = osmInferRestriction(vgraph, turn, projection);
-                              _oldTurns.push(turn);
-                              extraActions.push(actionUnrestrictTurn(turn));
-                          }
-                      }
+              flash();
+              _operation();
+          }
+      }
 
-                      actions = _intersection.actions.concat(extraActions, [
-                          actionRestrictTurn(datumOnly, restrictionType),
-                          t('operations.restriction.annotation.create')
-                      ]);
 
-                  } else if (datum.restrictionID) {   // ONLY -> Allowed
-                      // Restore whatever restrictions we might have destroyed by cycling thru the ONLY state.
-                      // This relies on the assumption that the intersection was already split up when we
-                      // performed the previous action (NO -> ONLY), so the IDs in _oldTurns shouldn't have changed.
-                      turns = _oldTurns || [];
-                      extraActions = [];
-                      for (i = 0; i < turns.length; i++) {
-                          if (turns[i].key !== datum.key) {
-                              extraActions.push(actionRestrictTurn(turns[i], turns[i].restrictionType));
-                          }
-                      }
-                      _oldTurns = null;
+      function behavior() {
+          if (_operation && _operation.available()) {
+              context.keybinding()
+                  .on(_operation.keys, keypress);
+          }
 
-                      actions = _intersection.actions.concat(extraActions, [
-                          actionUnrestrictTurn(datum),
-                          t('operations.restriction.annotation.delete')
-                      ]);
+          return behavior;
+      }
 
-                  } else {    // Allowed -> NO
-                      actions = _intersection.actions.concat([
-                          actionRestrictTurn(datum, restrictionType),
-                          t('operations.restriction.annotation.create')
-                      ]);
-                  }
 
-                  context.perform.apply(context, actions);
+      behavior.off = function() {
+          context.keybinding()
+              .off(_operation.keys);
+      };
 
-                  // At this point the datum will be changed, but will have same key..
-                  // Refresh it and update the help..
-                  var s = surface.selectAll('.' + datum.key);
-                  datum = s.empty() ? null : s.datum();
-                  updateHints(datum);
 
-              } else {
-                  _fromWayID = null;
-                  _oldTurns = null;
-                  redraw();
-              }
-          }
+      behavior.which = function (_) {
+          if (!arguments.length) return _operation;
+          _operation = _;
+          return behavior;
+      };
 
 
-          function mouseover() {
-              var datum = event.target.__data__;
-              updateHints(datum);
-          }
+      return behavior;
+  }
 
-          _lastXPos = _lastXPos || sdims[0];
+  /**
+   * The base implementation of `_.invert` and `_.invertBy` which inverts
+   * `object` with values transformed by `iteratee` and set by `setter`.
+   *
+   * @private
+   * @param {Object} object The object to iterate over.
+   * @param {Function} setter The function to set `accumulator` values.
+   * @param {Function} iteratee The iteratee to transform values.
+   * @param {Object} accumulator The initial inverted object.
+   * @returns {Function} Returns `accumulator`.
+   */
+  function baseInverter(object, setter, iteratee, accumulator) {
+    baseForOwn(object, function(value, key, object) {
+      setter(accumulator, iteratee(value), key, object);
+    });
+    return accumulator;
+  }
 
-          function redraw(minChange) {
-              var xPos = -1;
+  /**
+   * Creates a function like `_.invertBy`.
+   *
+   * @private
+   * @param {Function} setter The function to set accumulator values.
+   * @param {Function} toIteratee The function to resolve iteratees.
+   * @returns {Function} Returns the new inverter function.
+   */
+  function createInverter(setter, toIteratee) {
+    return function(object, iteratee) {
+      return baseInverter(object, setter, toIteratee(iteratee), {});
+    };
+  }
 
-              if (minChange) {
-                  xPos = utilGetDimensions(select('#sidebar'))[0];
-              }
+  /** Used for built-in method references. */
+  var objectProto$j = Object.prototype;
 
-              if (!minChange || (minChange && Math.abs(xPos - _lastXPos) >= minChange)) {
-                  if (context.hasEntity(_vertexID)) {
-                      _lastXPos = xPos;
-                      _container.call(renderViewer);
-                  }
-              }
-          }
+  /**
+   * Used to resolve the
+   * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)
+   * of values.
+   */
+  var nativeObjectToString$2 = objectProto$j.toString;
 
+  /**
+   * Creates an object composed of the inverted keys and values of `object`.
+   * If `object` contains duplicate values, subsequent values overwrite
+   * property assignments of previous values.
+   *
+   * @static
+   * @memberOf _
+   * @since 0.7.0
+   * @category Object
+   * @param {Object} object The object to invert.
+   * @returns {Object} Returns the new inverted object.
+   * @example
+   *
+   * var object = { 'a': 1, 'b': 2, 'c': 1 };
+   *
+   * _.invert(object);
+   * // => { '1': 'c', '2': 'b' }
+   */
+  var invert = createInverter(function(result, value, key) {
+    if (value != null &&
+        typeof value.toString != 'function') {
+      value = nativeObjectToString$2.call(value);
+    }
 
-          function highlightPathsFrom(wayID) {
-              surface.selectAll('.related')
-                  .classed('related', false)
-                  .classed('allow', false)
-                  .classed('restrict', false)
-                  .classed('only', false);
+    result[value] = key;
+  }, constant$d(identity$8));
 
-              surface.selectAll('.' + wayID)
-                  .classed('related', true);
+  /**
+   * Creates an object with the same keys as `object` and values generated
+   * by running each own enumerable string keyed property of `object` thru
+   * `iteratee`. The iteratee is invoked with three arguments:
+   * (value, key, object).
+   *
+   * @static
+   * @memberOf _
+   * @since 2.4.0
+   * @category Object
+   * @param {Object} object The object to iterate over.
+   * @param {Function} [iteratee=_.identity] The function invoked per iteration.
+   * @returns {Object} Returns the new mapped object.
+   * @see _.mapKeys
+   * @example
+   *
+   * var users = {
+   *   'fred':    { 'user': 'fred',    'age': 40 },
+   *   'pebbles': { 'user': 'pebbles', 'age': 1 }
+   * };
+   *
+   * _.mapValues(users, function(o) { return o.age; });
+   * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)
+   *
+   * // The `_.property` iteratee shorthand.
+   * _.mapValues(users, 'age');
+   * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)
+   */
+  function mapValues(object, iteratee) {
+    var result = {};
+    iteratee = baseIteratee(iteratee, 3);
 
-              if (wayID) {
-                  var turns = _intersection.turns(wayID, _maxViaWay);
-                  for (var i = 0; i < turns.length; i++) {
-                      var turn = turns[i];
-                      var ids = [turn.to.way];
-                      var klass = (turn.no ? 'restrict' : (turn.only ? 'only' : 'allow'));
+    baseForOwn(object, function(value, key, object) {
+      baseAssignValue(result, key, iteratee(value, key, object));
+    });
+    return result;
+  }
 
-                      if (turn.only || turns.length === 1) {
-                          if (turn.via.ways) {
-                              ids = ids.concat(turn.via.ways);
-                          }
-                      } else if (turn.to.way === wayID) {
-                          continue;
-                      }
+  function behaviorPaste(context) {
 
-                      surface.selectAll(utilEntitySelector(ids))
-                          .classed('related', true)
-                          .classed('allow', (klass === 'allow'))
-                          .classed('restrict', (klass === 'restrict'))
-                          .classed('only', (klass === 'only'));
-                  }
-              }
-          }
+      function doPaste() {
+          event.preventDefault();
 
+          var baseGraph = context.graph();
+          var mouse = context.mouse();
+          var projection = context.projection;
+          var viewport = geoExtent(projection.clipExtent()).polygon();
 
-          function updateHints(datum) {
-              var help = _container.selectAll('.restriction-help').html('');
+          if (!geoPointInPolygon(mouse, viewport)) return;
 
-              var placeholders = {};
-              ['from', 'via', 'to'].forEach(function(k) {
-                  placeholders[k] = '<span class="qualifier">' + t('restriction.help.' + k) + '</span>';
-              });
+          var extent = geoExtent();
+          var oldIDs = context.copyIDs();
+          var oldGraph = context.copyGraph();
+          var newIDs = [];
 
-              var entity = datum && datum.properties && datum.properties.entity;
-              if (entity) {
-                  datum = entity;
-              }
+          if (!oldIDs.length) return;
 
-              if (_fromWayID) {
-                  way = vgraph.entity(_fromWayID);
-                  surface
-                      .selectAll('.' + _fromWayID)
-                      .classed('selected', true)
-                      .classed('related', true);
-              }
+          var action = actionCopyEntities(oldIDs, oldGraph);
+          context.perform(action);
 
-              // Hovering a way
-              if (datum instanceof osmWay && datum.__from) {
-                  way = datum;
+          var copies = action.copies();
+          var originals = invert(mapValues(copies, 'id'));
+          for (var id in copies) {
+              var oldEntity = oldGraph.entity(id);
+              var newEntity = copies[id];
 
-                  highlightPathsFrom(_fromWayID ? null : way.id);
-                  surface.selectAll('.' + way.id)
-                      .classed('related', true);
+              extent._extend(oldEntity.extent(oldGraph));
 
-                  var clickSelect = (!_fromWayID || _fromWayID !== way.id);
-                  help
-                      .append('div')      // "Click to select FROM {fromName}." / "FROM {fromName}"
-                      .html(t('restriction.help.' + (clickSelect ? 'select_from_name' : 'from_name'), {
-                          from: placeholders.from,
-                          fromName: displayName(way.id, vgraph)
-                      }));
+              // Exclude child nodes from newIDs if their parent way was also copied.
+              var parents = context.graph().parentWays(newEntity);
+              var parentCopied = false;
+              for (var i = 0; i < parents.length; i++) {
+                  if (originals[parents[i].id]) {
+                      parentCopied = true;
+                      break;
+                  }
+              }
 
+              if (!parentCopied) {
+                  newIDs.push(newEntity.id);
+              }
+          }
 
-              // Hovering a turn arrow
-              } else if (datum instanceof osmTurn) {
-                  var restrictionType = osmInferRestriction(vgraph, datum, projection);
-                  var turnType = restrictionType.replace(/^(only|no)\_/, '');
-                  var indirect = (datum.direct === false ? t('restriction.help.indirect') : '');
-                  var klass, turnText, nextText;
+          // Put pasted objects where mouse pointer is..
+          var center = projection(extent.center());
+          var delta = geoVecSubtract(mouse, center);
 
-                  if (datum.no) {
-                      klass = 'restrict';
-                      turnText = t('restriction.help.turn.no_' + turnType, { indirect: indirect });
-                      nextText = t('restriction.help.turn.only_' + turnType, { indirect: '' });
-                  } else if (datum.only) {
-                      klass = 'only';
-                      turnText = t('restriction.help.turn.only_' + turnType, { indirect: indirect });
-                      nextText = t('restriction.help.turn.allowed_' + turnType, { indirect: '' });
-                  } else {
-                      klass = 'allow';
-                      turnText = t('restriction.help.turn.allowed_' + turnType, { indirect: indirect });
-                      nextText = t('restriction.help.turn.no_' + turnType, { indirect: '' });
-                  }
+          context.perform(actionMove(newIDs, delta, projection));
+          context.enter(modeMove(context, newIDs, baseGraph));
+      }
 
-                  help
-                      .append('div')      // "NO Right Turn (indirect)"
-                      .attr('class', 'qualifier ' + klass)
-                      .text(turnText);
 
-                  help
-                      .append('div')      // "FROM {fromName} TO {toName}"
-                      .html(t('restriction.help.from_name_to_name', {
-                          from: placeholders.from,
-                          fromName: displayName(datum.from.way, vgraph),
-                          to: placeholders.to,
-                          toName: displayName(datum.to.way, vgraph)
-                      }));
+      function behavior() {
+          context.keybinding().on(uiCmd('⌘V'), doPaste);
+          return behavior;
+      }
 
-                  if (datum.via.ways && datum.via.ways.length) {
-                      var names = [];
-                      for (var i = 0; i < datum.via.ways.length; i++) {
-                          var prev = names[names.length - 1];
-                          var curr = displayName(datum.via.ways[i], vgraph);
-                          if (!prev || curr !== prev)   // collapse identical names
-                              names.push(curr);
-                      }
 
-                      help
-                          .append('div')      // "VIA {viaNames}"
-                          .html(t('restriction.help.via_names', {
-                              via: placeholders.via,
-                              viaNames: names.join(', ')
-                          }));
-                  }
+      behavior.off = function() {
+          context.keybinding().off(uiCmd('⌘V'));
+      };
 
-                  if (!indirect) {
-                      help
-                          .append('div')      // Click for "No Right Turn"
-                          .text(t('restriction.help.toggle', { turn: nextText.trim() }));
-                  }
 
-                  highlightPathsFrom(null);
-                  var alongIDs = datum.path.slice();
-                  surface.selectAll(utilEntitySelector(alongIDs))
-                      .classed('related', true)
-                      .classed('allow', (klass === 'allow'))
-                      .classed('restrict', (klass === 'restrict'))
-                      .classed('only', (klass === 'only'));
+      return behavior;
+  }
 
+  function behaviorSelect(context) {
+      var lastMouse = null;
+      var suppressMenu = true;
+      var tolerance = 4;
+      var p1 = null;
 
-              // Hovering empty surface
-              } else {
-                  highlightPathsFrom(null);
-                  if (_fromWayID) {
-                      help
-                          .append('div')      // "FROM {fromName}"
-                          .html(t('restriction.help.from_name', {
-                              from: placeholders.from,
-                              fromName: displayName(_fromWayID, vgraph)
-                          }));
 
-                  } else {
-                      help
-                          .append('div')      // "Click to select a FROM segment."
-                          .html(t('restriction.help.select_from', {
-                              from: placeholders.from
-                          }));
-                  }
-              }
-          }
+      function point() {
+          return mouse(context.container().node());
       }
 
 
-      function displayMaxDistance(maxDist) {
-          var isImperial = (utilDetect().locale.toLowerCase() === 'en-us');
-          var opts;
+      function keydown() {
+          var e = event;
+          if (e && e.shiftKey) {
+              context.surface()
+                  .classed('behavior-multiselect', true);
+          }
 
-          if (isImperial) {
-              var distToFeet = {   // imprecise conversion for prettier display
-                  20: 70, 25: 85, 30: 100, 35: 115, 40: 130, 45: 145, 50: 160
-              }[maxDist];
-              opts = { distance: t('units.feet', { quantity: distToFeet }) };
-          } else {
-              opts = { distance: t('units.meters', { quantity: maxDist }) };
+          if (e && e.keyCode === 93) {  // context menu
+              e.preventDefault();
+              e.stopPropagation();
           }
+      }
 
-          return t('restriction.controls.distance_up_to', opts);
+
+      function keyup() {
+          var e = event;
+          if (!e || !e.shiftKey) {
+              context.surface()
+                  .classed('behavior-multiselect', false);
+          }
+
+
+          if (e && e.keyCode === 93) {  // context menu
+              e.preventDefault();
+              e.stopPropagation();
+              contextmenu();
+          }
       }
 
 
-      function displayMaxVia(maxVia) {
-          return maxVia === 0 ? t('restriction.controls.via_node_only')
-              : maxVia === 1 ? t('restriction.controls.via_up_to_one')
-              : t('restriction.controls.via_up_to_two');
+      function mousedown() {
+          if (!p1) p1 = point();
+          select(window)
+              .on('mouseup.select', mouseup, true);
+
+          var isShowAlways = +context.storage('edit-menu-show-always') === 1;
+          suppressMenu = !isShowAlways;
       }
 
 
-      function displayName(entityID, graph) {
-          var entity = graph.entity(entityID);
-          var name = utilDisplayName(entity) || '';
-          var matched = context.presets().match(entity, graph);
-          var type = (matched && matched.name()) || utilDisplayType(entity.id);
-          return name || type;
+      function mousemove() {
+          if (event) lastMouse = event;
       }
 
 
-      restrictions.entity = function(_) {
-          _intersection = null;
-          _fromWayID = null;
-          _oldTurns = null;
-          _vertexID = _.id;
-      };
+      function mouseup() {
+          click();
+      }
 
 
-      restrictions.tags = function() {};
-      restrictions.focus = function() {};
+      function contextmenu() {
+          var e = event;
+          e.preventDefault();
+          e.stopPropagation();
 
+          if (!+e.clientX && !+e.clientY) {
+              if (lastMouse) {
+                  e.sourceEvent = lastMouse;
+              } else {
+                  return;
+              }
+          }
 
-      restrictions.off = function(selection$$1) {
-          if (!_initialized) return;
+          if (!p1) p1 = point();
+          suppressMenu = false;
+          click();
+      }
 
-          selection$$1.selectAll('.surface')
-              .call(breathe.off)
-              .on('click.restrictions', null)
-              .on('mouseover.restrictions', null);
 
+      function click() {
           select(window)
-              .on('resize.restrictions', null);
-      };
+              .on('mouseup.select', null, true);
 
+          if (!p1) return;
+          var p2 = point();
+          var dist = geoVecLength(p1, p2);
 
-      return utilRebind(restrictions, dispatch$$1, 'on');
-  }
+          p1 = null;
+          if (dist > tolerance) {
+              return;
+          }
 
-  function uiFieldTextarea(field) {
-      var dispatch$$1 = dispatch('change');
-      var input = select(null);
+          var isMultiselect = event.shiftKey || select('#surface .lasso').node();
+          var isShowAlways = +context.storage('edit-menu-show-always') === 1;
+          var datum = event.target.__data__ || (lastMouse && lastMouse.target.__data__);
+          var mode = context.mode();
 
+          var entity = datum && datum.properties && datum.properties.entity;
+          if (entity) datum = entity;
 
-      function textarea(selection$$1) {
-          var wrap = selection$$1.selectAll('.form-field-input-wrap')
-              .data([0]);
+          if (datum && datum.type === 'midpoint') {
+              datum = datum.parents[0];
+          }
 
-          wrap = wrap.enter()
-              .append('div')
-              .attr('class', 'form-field-input-wrap form-field-input-' + field.type)
-              .merge(wrap);
+          if (datum instanceof osmEntity) {    // clicked an entity..
+              var selectedIDs = context.selectedIDs();
+              context.selectedNoteID(null);
+              context.selectedErrorID(null);
 
-          input = wrap.selectAll('textarea')
-              .data([0]);
+              if (!isMultiselect) {
+                  if (selectedIDs.length > 1 && (!suppressMenu && !isShowAlways)) {
+                      // multiple things already selected, just show the menu...
+                      mode.suppressMenu(false).reselect();
+                  } else {
+                      // select a single thing..
+                      context.enter(modeSelect(context, [datum.id]).suppressMenu(suppressMenu));
+                  }
 
-          input = input.enter()
-              .append('textarea')
-              .attr('id', 'preset-input-' + field.safeid)
-              .attr('placeholder', field.placeholder() || t('inspector.unknown'))
-              .attr('maxlength', 255)
-              .call(utilNoAuto)
-              .on('input', change(true))
-              .on('blur', change())
-              .on('change', change())
-              .merge(input);
-      }
+              } else {
+                  if (selectedIDs.indexOf(datum.id) !== -1) {
+                      // clicked entity is already in the selectedIDs list..
+                      if (!suppressMenu && !isShowAlways) {
+                          // don't deselect clicked entity, just show the menu.
+                          mode.suppressMenu(false).reselect();
+                      } else {
+                          // deselect clicked entity, then reenter select mode or return to browse mode..
+                          selectedIDs = without(selectedIDs, datum.id);
+                          context.enter(selectedIDs.length ? modeSelect(context, selectedIDs) : modeBrowse(context));
+                      }
+                  } else {
+                      // clicked entity is not in the selected list, add it..
+                      selectedIDs = selectedIDs.concat([datum.id]);
+                      context.enter(modeSelect(context, selectedIDs).suppressMenu(suppressMenu));
+                  }
+              }
+
+          } else if (datum && datum.__featurehash__ && !isMultiselect) {    // clicked Data..
+              context
+                  .selectedNoteID(null)
+                  .enter(modeSelectData(context, datum));
 
+          } else if (datum instanceof osmNote && !isMultiselect) {    // clicked a Note..
+              context
+                  .selectedNoteID(datum.id)
+                  .enter(modeSelectNote(context, datum.id));
+          } else if (datum instanceof qaError & !isMultiselect) {  // clicked an external QA error
+              context
+                  .selectedErrorID(datum.id)
+                  .enter(modeSelectError(context, datum.id, datum.service));
+          } else {    // clicked nothing..
+              context.selectedNoteID(null);
+              context.selectedErrorID(null);
+              if (!isMultiselect && mode.id !== 'browse') {
+                  context.enter(modeBrowse(context));
+              }
+          }
 
-      function change(onInput) {
-          return function() {
-              var t$$1 = {};
-              t$$1[field.key] = utilGetSetValue(input) || undefined;
-              dispatch$$1.call('change', this, t$$1, onInput);
-          };
+          // reset for next time..
+          suppressMenu = true;
       }
 
 
-      textarea.tags = function(tags) {
-          utilGetSetValue(input, tags[field.key] || '');
-      };
+      function behavior(selection) {
+          lastMouse = null;
+          suppressMenu = true;
+          p1 = null;
 
+          select(window)
+              .on('keydown.select', keydown)
+              .on('keyup.select', keyup)
+              .on('contextmenu.select-window', function() {
+                  // Edge and IE really like to show the contextmenu on the
+                  // menubar when user presses a keyboard menu button
+                  // even after we've already preventdefaulted the key event.
+                  var e = event;
+                  if (+e.clientX === 0 && +e.clientY === 0) {
+                      event.preventDefault();
+                      event.stopPropagation();
+                  }
+              });
 
-      textarea.focus = function() {
-          input.node().focus();
-      };
+          selection
+              .on('mousedown.select', mousedown)
+              .on('mousemove.select', mousemove)
+              .on('contextmenu.select', contextmenu);
 
+          if (event && event.shiftKey) {
+              context.surface()
+                  .classed('behavior-multiselect', true);
+          }
+      }
 
-      return utilRebind(textarea, dispatch$$1, 'on');
-  }
 
-  function uiFieldWikidata(field) {
-      var wikidata = services.wikidata;
-      var dispatch$$1 = dispatch('change');
-      var link = select(null);
-      var title = select(null);
-      var _wikiURL = '';
+      behavior.off = function(selection) {
+          select(window)
+              .on('keydown.select', null)
+              .on('keyup.select', null)
+              .on('contextmenu.select-window', null)
+              .on('mouseup.select', null, true);
 
+          selection
+              .on('mousedown.select', null)
+              .on('mousemove.select', null)
+              .on('contextmenu.select', null);
 
-      function wiki(selection$$1) {
+          context.surface()
+              .classed('behavior-multiselect', false);
+      };
 
-          var wrap = selection$$1.selectAll('.form-field-input-wrap')
-              .data([0]);
 
-          wrap = wrap.enter()
-              .append('div')
-              .attr('class', 'form-field-input-wrap form-field-input-' + field.type)
-              .merge(wrap);
+      return behavior;
+  }
 
+  function uiAccount(context) {
+      var osm = context.connection();
 
-          var list = wrap.selectAll('ul')
-              .data([0]);
 
-          list = list.enter()
-              .append('ul')
-              .attr('class', 'labeled-inputs')
-              .merge(list);
+      function update(selection) {
+          if (!osm) return;
 
-          var wikidataProperties = ['identifier', 'label', 'description'];
+          if (!osm.authenticated()) {
+              selection.selectAll('#userLink, #logoutLink')
+                  .classed('hide', true);
+              return;
+          }
 
-          var items = list.selectAll('li')
-              .data(wikidataProperties);
+          osm.userDetails(function(err, details) {
+              var userLink = selection.select('#userLink'),
+                  logoutLink = selection.select('#logoutLink');
 
-          // Enter
-          var enter = items.enter()
-              .append('li')
-              .attr('class', function(d) { return 'preset-wikidata-' + d; });
+              userLink.html('');
+              logoutLink.html('');
 
-          enter
-              .append('span')
-              .attr('class', 'label')
-              .attr('for', function(d) { return 'preset-input-wikidata-' + d; })
-              .text(function(d) { return t('wikidata.' + d); });
+              if (err) return;
 
-          var inputWrap = enter
-              .append('div')
-              .attr('class', 'input-wrap');
+              selection.selectAll('#userLink, #logoutLink')
+                  .classed('hide', false);
 
-          inputWrap
-              .append('input')
-              .attr('type', 'text')
-              .attr('class', 'preset-input-wikidata')
-              .attr('id', function(d) { return 'preset-input-wikidata-' + d; });
+              // Link
+              userLink.append('a')
+                  .attr('href', osm.userURL(details.display_name))
+                  .attr('target', '_blank');
 
+              // Add thumbnail or dont
+              if (details.image_url) {
+                  userLink.append('img')
+                      .attr('class', 'icon pre-text user-icon')
+                      .attr('src', details.image_url);
+              } else {
+                  userLink
+                      .call(svgIcon('#iD-icon-avatar', 'pre-text light'));
+              }
 
-          title = wrap.select('.preset-wikidata-identifier input')
-              .call(utilNoAuto)
-              .merge(title);
+              // Add user name
+              userLink.append('span')
+                  .attr('class', 'label')
+                  .text(details.display_name);
 
-          title
-              .on('blur', blur)
-              .on('change', change);
+              logoutLink.append('a')
+                  .attr('class', 'logout')
+                  .attr('href', '#')
+                  .text(t('logout'))
+                  .on('click.logout', function() {
+                      event.preventDefault();
+                      osm.logout();
+                  });
+          });
+      }
 
-          var idItem = wrap.select('.preset-wikidata-identifier');
 
-          idItem.select('button')
-              .remove();
+      return function(selection) {
+          selection.append('li')
+              .attr('id', 'logoutLink')
+              .classed('hide', true);
 
-          link = idItem
-              .append('button')
-              .attr('class', 'form-field-button wiki-link')
-              .attr('title', t('icons.open_wikidata'))
-              .attr('tabindex', -1)
-              .call(svgIcon('#iD-icon-out-link'))
-              .merge(link);
+          selection.append('li')
+              .attr('id', 'userLink')
+              .classed('hide', true);
 
-          link
-              .on('click', function() {
-                  event.preventDefault();
-                  if (_wikiURL) window.open(_wikiURL, '_blank');
-              });
+          if (osm) {
+              osm.on('change.account', function() { update(selection); });
+              update(selection);
+          }
+      };
+  }
 
-          var readOnlyItems = wrap.selectAll('li:not(.preset-wikidata-identifier)');
+  function uiAttribution(context) {
+      var selection;
 
-          readOnlyItems.select('input')
-              .classed('disabled', 'true')
-              .attr('readonly', 'true');
 
-          readOnlyItems.select('button')
-              .remove();
+      function attribution(data, klass) {
+          var div = selection.selectAll('.' + klass)
+              .data([0]);
 
-          readOnlyItems.append('button')
-              .attr('class', 'form-field-button wiki-link')
-              .attr('title', t('icons.copy'))
-              .attr('tabindex', -1)
-              .call(svgIcon('#iD-operation-copy'))
-              .on('click', function() {
-                  event.preventDefault();
-                  select(this.parentNode)
-                      .select('input')
-                      .node()
-                      .select();
-                  document.execCommand('copy');
-              });
-      }
+          div = div.enter()
+              .append('div')
+              .attr('class', klass)
+              .merge(div);
 
 
-      function blur() {
-          change();
-      }
+          var background = div.selectAll('.attribution')
+              .data(data, function(d) { return d.name(); });
 
+          background.exit()
+              .remove();
 
-      function change() {
-          var syncTags = {
-              wikidata: utilGetSetValue(title)
-          };
-          dispatch$$1.call('change', this, syncTags);
-      }
+          background = background.enter()
+              .append('span')
+              .attr('class', 'attribution')
+              .each(function(d) {
+                  if (d.terms_html) {
+                      select(this)
+                          .html(d.terms_html);
+                      return;
+                  }
 
+                  var selection;
+                  if (d.terms_url) {
+                      selection = select(this)
+                          .append('a')
+                          .attr('href', d.terms_url)
+                          .attr('target', '_blank');
+                  } else {
+                      selection = select(this);
+                  }
 
-      wiki.tags = function(tags) {
-          var value = tags[field.key] || '';
-          var matches = value.match(/^Q[0-9]*$/);
 
-          utilGetSetValue(title, value);
+                  var id_safe = d.id.replace(/\./g, '<TX_DOT>');
+                  var terms_text = t('imagery.' + id_safe + '.attribution.text',
+                      { default: d.terms_text || d.id || d.name() }
+                  );
 
-          // value in correct format
-          if (matches) {
-              _wikiURL = 'https://wikidata.org/wiki/' + value;
-              wikidata.entityByQID(value, function(qid, entity) {
-                  var label = '';
-                  var description = '';
-
-                  if (entity.labels && Object.keys(entity.labels).length > 0) {
-                      label = entity.labels[Object.keys(entity.labels)[0]].value;
-                  }
-                  if (entity.descriptions && Object.keys(entity.descriptions).length > 0) {
-                      description = entity.descriptions[Object.keys(entity.descriptions)[0]].value;
+                  if (d.icon && !d.overlay) {
+                      selection
+                          .append('img')
+                          .attr('class', 'source-image')
+                          .attr('src', d.icon);
                   }
 
-                  select('.preset-wikidata-label')
-                      .style('display', function(){
-                          return label.length > 0 ? 'flex' : 'none';
-                      })
-                      .select('input')
-                      .attr('value', label);
+                  selection
+                      .append('span')
+                      .attr('class', 'attribution-text')
+                      .text(terms_text);
+              })
+              .merge(background);
 
-                  select('.preset-wikidata-description')
-                      .style('display', function(){
-                          return description.length > 0 ? 'flex' : 'none';
-                      })
-                      .select('input')
-                      .attr('value', description);
+
+          var copyright = background.selectAll('.copyright-notice')
+              .data(function(d) {
+                  var notice = d.copyrightNotices(context.map().zoom(), context.map().extent());
+                  return notice ? [notice] : [];
               });
 
-          // unrecognized value format
-          } else {
-              select('.preset-wikidata-label').style('display', 'none');
-              select('.preset-wikidata-description').style('display', 'none');
-              if (value && value !== '') {
-                  _wikiURL = 'https://wikidata.org/wiki/Special:Search?search=' + value;
-              } else {
-                  _wikiURL = '';
-              }
-          }
-      };
+          copyright.exit()
+              .remove();
 
+          copyright = copyright.enter()
+              .append('span')
+              .attr('class', 'copyright-notice')
+              .merge(copyright);
 
-      wiki.focus = function() {
-          title.node().focus();
-      };
+          copyright
+              .text(String);
+      }
 
 
-      return utilRebind(wiki, dispatch$$1, 'on');
-  }
+      function update() {
+          attribution([context.background().baseLayerSource()], 'base-layer-attribution');
+          attribution(context.background().overlayLayerSources().filter(function (s) {
+              return s.validZoom(context.map().zoom());
+          }), 'overlay-layer-attribution');
+      }
 
-  function uiFieldWikipedia(field, context) {
-      var dispatch$$1 = dispatch('change');
-      var wikipedia = services.wikipedia;
-      var wikidata = services.wikidata;
-      var lang = select(null);
-      var title = select(null);
-      var _wikiURL = '';
-      var _entity;
 
-      var langCombo = uiCombobox(context, 'wikipedia-lang')
-          .fetcher(function(value, cb) {
-              var v = value.toLowerCase();
+      return function(select) {
+          selection = select;
 
-              cb(wikipedia$2.filter(function(d) {
-                  return d[0].toLowerCase().indexOf(v) >= 0 ||
-                      d[1].toLowerCase().indexOf(v) >= 0 ||
-                      d[2].toLowerCase().indexOf(v) >= 0;
-              }).map(function(d) {
-                  return { value: d[1] };
-              }));
-          });
+          context.background()
+              .on('change.attribution', update);
 
-      var titleCombo = uiCombobox(context, 'wikipedia-title')
-          .fetcher(function(value, cb) {
-              if (!value && _entity) {
-                  value = context.entity(_entity.id).tags.name || '';
-              }
+          context.map()
+              .on('move.attribution', throttle(update, 400, {leading: false}));
 
-              var searchfn = value.length > 7 ? wikipedia.search : wikipedia.suggestions;
-              searchfn(language()[2], value, function(query, data$$1) {
-                  cb(data$$1.map(function(d) {
-                      return { value: d };
-                  }));
+          update();
+      };
+  }
+
+  // toggles the visibility of ui elements, using a combination of the
+  // hide class, which sets display=none, and a d3 transition for opacity.
+  // this will cause blinking when called repeatedly, so check that the
+  // value actually changes between calls.
+  function uiToggle(show, callback) {
+      return function(selection) {
+          selection
+              .style('opacity', show ? 0 : 1)
+              .classed('hide', false)
+              .transition()
+              .style('opacity', show ? 1 : 0)
+              .on('end', function() {
+                  select(this)
+                      .classed('hide', !show)
+                      .style('opacity', null);
+                  if (callback) callback.apply(this);
               });
-          });
-
-
-      function wiki(selection$$1) {
-          var wrap = selection$$1.selectAll('.form-field-input-wrap')
-              .data([0]);
+      };
+  }
 
-          wrap = wrap.enter()
-              .append('div')
-              .attr('class', 'form-field-input-wrap form-field-input-' + field.type)
-              .merge(wrap);
+  function uiDisclosure(context, key, expandedDefault) {
+      var dispatch$1 = dispatch('toggled');
+      var _preference = (context.storage('disclosure.' + key + '.expanded'));
+      var _expanded = (_preference === null ? !!expandedDefault : (_preference === 'true'));
+      var _title;
+      var _updatePreference = true;
+      var _content = function () {};
 
 
-          var langRow = wrap.selectAll('.wiki-lang-container')
+      var disclosure = function(selection) {
+          var hideToggle = selection.selectAll('.hide-toggle-' + key)
               .data([0]);
 
-          langRow = langRow.enter()
-              .append('div')
-              .attr('class', 'wiki-lang-container')
-              .merge(langRow);
+          // enter
+          var hideToggleEnter = hideToggle.enter()
+              .append('a')
+              .attr('href', '#')
+              .attr('class', 'hide-toggle hide-toggle-' + key)
+              .call(svgIcon('', 'pre-text', 'hide-toggle-icon'));
 
+          hideToggleEnter
+              .append('span')
+              .attr('class', 'hide-toggle-text');
 
-          lang = langRow.selectAll('input.wiki-lang')
-              .data([0]);
+          // update
+          hideToggle = hideToggleEnter
+              .merge(hideToggle);
 
-          lang = lang.enter()
-              .append('input')
-              .attr('type', 'text')
-              .attr('class', 'wiki-lang')
-              .attr('placeholder', t('translate.localized_translation_language'))
-              .call(utilNoAuto)
-              .call(langCombo)
-              .merge(lang);
+          hideToggle
+              .on('click', toggle)
+              .classed('expanded', _expanded);
 
-          utilGetSetValue(lang, language()[1]);
+          hideToggle.selectAll('.hide-toggle-text')
+              .text(_title);
 
-          lang
-              .on('blur', changeLang)
-              .on('change', changeLang);
+          hideToggle.selectAll('.hide-toggle-icon')
+              .attr('xlink:href', _expanded ? '#iD-icon-down'
+                  : (textDirection === 'rtl') ? '#iD-icon-backward' : '#iD-icon-forward'
+              );
 
 
-          var titleRow = wrap.selectAll('.wiki-title-container')
+          var wrap = selection.selectAll('.disclosure-wrap')
               .data([0]);
 
-          titleRow = titleRow.enter()
+          // enter/update
+          wrap = wrap.enter()
               .append('div')
-              .attr('class', 'wiki-title-container')
-              .merge(titleRow);
-
-          title = titleRow.selectAll('input.wiki-title')
-              .data([0]);
+              .attr('class', 'disclosure-wrap disclosure-wrap-' + key)
+              .merge(wrap)
+              .classed('hide', !_expanded);
 
-          title = title.enter()
-              .append('input')
-              .attr('type', 'text')
-              .attr('class', 'wiki-title')
-              .attr('id', 'preset-input-' + field.safeid)
-              .call(utilNoAuto)
-              .call(titleCombo)
-              .merge(title);
+          if (_expanded) {
+              wrap
+                  .call(_content);
+          }
 
-          title
-              .on('blur', blur)
-              .on('change', change);
 
+          function toggle() {
+              event.preventDefault();
 
-          var link = titleRow.selectAll('.wiki-link')
-              .data([0]);
+              _expanded = !_expanded;
 
-          link = link.enter()
-              .append('button')
-              .attr('class', 'form-field-button wiki-link')
-              .attr('tabindex', -1)
-              .call(svgIcon('#iD-icon-out-link'))
-              .merge(link);
+              if (_updatePreference) {
+                  context.storage('disclosure.' + key + '.expanded', _expanded);
+              }
 
-          link
-              .on('click', function() {
-                  event.preventDefault();
-                  if (_wikiURL) window.open(_wikiURL, '_blank');
-              });
-      }
+              hideToggle
+                  .classed('expanded', _expanded);
 
+              hideToggle.selectAll('.hide-toggle-icon')
+                  .attr('xlink:href', _expanded ? '#iD-icon-down'
+                      : (textDirection === 'rtl') ? '#iD-icon-backward' : '#iD-icon-forward'
+                  );
 
-      function language() {
-          var value = utilGetSetValue(lang).toLowerCase();
-          var locale = utilDetect().locale.toLowerCase();
-          var localeLanguage;
-          return find$1(wikipedia$2, function(d) {
-              if (d[2] === locale) localeLanguage = d;
-              return d[0].toLowerCase() === value ||
-                  d[1].toLowerCase() === value ||
-                  d[2] === value;
-          }) || localeLanguage || ['English', 'English', 'en'];
-      }
+              if (_expanded) {
+                  wrap
+                      .call(_content);
+              }
 
+              wrap
+                  .call(uiToggle(_expanded));
 
-      function changeLang() {
-          utilGetSetValue(lang, language()[1]);
-          change(true);
-      }
+              dispatch$1.call('toggled', this, _expanded);
+          }
+      };
 
 
-      function blur() {
-          change(true);
-      }
+      disclosure.title = function(val) {
+          if (!arguments.length) return _title;
+          _title = val;
+          return disclosure;
+      };
 
 
-      function change(skipWikidata) {
-          var value = utilGetSetValue(title);
-          var m = value.match(/https?:\/\/([-a-z]+)\.wikipedia\.org\/(?:wiki|\1-[-a-z]+)\/([^#]+)(?:#(.+))?/);
-          var l = m && find$1(wikipedia$2, function(d) { return m[1] === d[2]; });
-          var syncTags = {};
+      disclosure.expanded = function(val) {
+          if (!arguments.length) return _expanded;
+          _expanded = val;
+          return disclosure;
+      };
 
-          if (l) {
-              // Normalize title http://www.mediawiki.org/wiki/API:Query#Title_normalization
-              value = decodeURIComponent(m[2]).replace(/_/g, ' ');
-              if (m[3]) {
-                  var anchor;
-                  try {
-                      // Best-effort `anchordecode:` implementation
-                      anchor = decodeURIComponent(m[3].replace(/\.([0-9A-F]{2})/g, '%$1'));
-                  } catch (e) {
-                      anchor = decodeURIComponent(m[3]);
-                  }
-                  value += '#' + anchor.replace(/_/g, ' ');
-              }
-              value = value.slice(0, 1).toUpperCase() + value.slice(1);
-              utilGetSetValue(lang, l[1]);
-              utilGetSetValue(title, value);
-          }
 
-          if (value) {
-              syncTags.wikipedia = language()[2] + ':' + value;
-          } else {
-              syncTags.wikipedia = undefined;
-              syncTags.wikidata = undefined;
-          }
+      disclosure.updatePreference = function(val) {
+          if (!arguments.length) return _updatePreference;
+          _updatePreference = val;
+          return disclosure;
+      };
 
-          dispatch$$1.call('change', this, syncTags);
 
+      disclosure.content = function(val) {
+          if (!arguments.length) return _content;
+          _content = val;
+          return disclosure;
+      };
 
-          if (skipWikidata || !value || !language()[2]) return;
 
-          // attempt asynchronous update of wikidata tag..
-          var initGraph = context.graph();
-          var initEntityID = _entity.id;
+      return utilRebind(disclosure, dispatch$1, 'on');
+  }
 
-          wikidata.itemsByTitle(language()[2], value, function(title, data$$1) {
-              // If graph has changed, we can't apply this update.
-              if (context.graph() !== initGraph) return;
+  function uiBackgroundDisplayOptions(context) {
+      var detected = utilDetect();
+      var storedOpacity = context.storage('background-opacity');
+      var minVal = 0.25;
+      var maxVal = detected.cssfilters ? 2 : 1;
 
-              if (!data$$1 || !Object.keys(data$$1).length) return;
+      var sliders = detected.cssfilters
+          ? ['brightness', 'contrast', 'saturation', 'sharpness']
+          : ['brightness'];
 
-              var qids = Object.keys(data$$1);
-              var value = qids && find$1(qids, function(id) { return id.match(/^Q\d+$/); });
-              var currTags = clone(context.entity(initEntityID).tags);
+      var _options = {
+          brightness: (storedOpacity !== null ? (+storedOpacity) : 1),
+          contrast: 1,
+          saturation: 1,
+          sharpness: 1
+      };
 
-              currTags.wikidata = value;
+      var _selection = select(null);
 
-              // Coalesce the update of wikidata tag into the previous tag change
-              context.overwrite(
-                  actionChangeTags(initEntityID, currTags),
-                  context.history().undoAnnotation()
-              );
 
-              // do not dispatch.call('change') here, because entity_editor
-              // changeTags() is not intended to be called asynchronously
-          });
+      function clamp(x, min, max) {
+          return Math.max(min, Math.min(x, max));
       }
 
 
-      wiki.tags = function(tags) {
-          var value = tags[field.key] || '';
-          var m = value.match(/([^:]+):([^#]+)(?:#(.+))?/);
-          var l = m && find$1(wikipedia$2, function(d) { return m[1] === d[2]; });
-          var anchor = m && m[3];
+      function updateValue(d, val) {
+          if (!val && event && event.target) {
+              val = event.target.value;
+          }
 
-          // value in correct format
-          if (l) {
-              utilGetSetValue(lang, l[1]);
-              utilGetSetValue(title, m[2] + (anchor ? ('#' + anchor) : ''));
-              if (anchor) {
-                  try {
-                      // Best-effort `anchorencode:` implementation
-                      anchor = encodeURIComponent(anchor.replace(/ /g, '_')).replace(/%/g, '.');
-                  } catch (e) {
-                      anchor = anchor.replace(/ /g, '_');
-                  }
-              }
-              _wikiURL = 'https://' + m[1] + '.wikipedia.org/wiki/' +
-                  m[2].replace(/ /g, '_') + (anchor ? ('#' + anchor) : '');
+          val = clamp(val, minVal, maxVal);
 
-          // unrecognized value format
-          } else {
-              utilGetSetValue(title, value);
-              if (value && value !== '') {
-                  utilGetSetValue(lang, '');
-                  _wikiURL = 'https://en.wikipedia.org/wiki/Special:Search?search=' + value;
-              } else {
-                  _wikiURL = '';
-              }
+          _options[d] = val;
+          context.background()[d](val);
+
+          if (d === 'brightness') {
+              context.storage('background-opacity', val);
           }
-      };
 
+          _selection
+              .call(render);
+      }
 
-      wiki.entity = function(val) {
-          if (!arguments.length) return _entity;
-          _entity = val;
-          return wiki;
-      };
 
+      function render(selection) {
+          var container = selection.selectAll('.display-options-container')
+              .data([0]);
 
-      wiki.focus = function() {
-          title.node().focus();
-      };
+          var containerEnter = container.enter()
+              .append('div')
+              .attr('class', 'display-options-container controls-list');
 
+          // add slider controls
+          var slidersEnter = containerEnter.selectAll('.display-control')
+              .data(sliders)
+              .enter()
+              .append('div')
+              .attr('class', function(d) { return 'display-control display-control-' + d; });
 
-      return utilRebind(wiki, dispatch$$1, 'on');
-  }
+          slidersEnter
+              .append('h5')
+              .text(function(d) { return t('background.' + d); })
+              .append('span')
+              .attr('class', function(d) { return 'display-option-value display-option-value-' + d; });
 
-  var uiFields = {
-      access: uiFieldAccess,
-      address: uiFieldAddress,
-      check: uiFieldCheck,
-      combo: uiFieldCombo,
-      cycleway: uiFieldCycleway,
-      defaultCheck: uiFieldCheck,
-      email: uiFieldText,
-      lanes: uiFieldLanes,
-      localized: uiFieldLocalized,
-      maxspeed: uiFieldMaxspeed,
-      multiCombo: uiFieldCombo,
-      networkCombo: uiFieldCombo,
-      number: uiFieldText,
-      onewayCheck: uiFieldCheck,
-      radio: uiFieldRadio,
-      restrictions: uiFieldRestrictions,
-      semiCombo: uiFieldCombo,
-      structureRadio: uiFieldRadio,
-      tel: uiFieldText,
-      text: uiFieldText,
-      textarea: uiFieldTextarea,
-      typeCombo: uiFieldCombo,
-      url: uiFieldText,
-      wikidata: uiFieldWikidata,
-      wikipedia: uiFieldWikipedia
-  };
+          slidersEnter
+              .append('input')
+              .attr('class', function(d) { return 'display-option-input display-option-input-' + d; })
+              .attr('type', 'range')
+              .attr('min', minVal)
+              .attr('max', maxVal)
+              .attr('step', '0.05')
+              .on('input', function(d) {
+                  var val = select(this).property('value');
+                  updateValue(d, val);
+              });
 
-  function uiTagReference(tag) {
-      var wikibase = services.osmWikibase;
-      var tagReference = {};
+          slidersEnter
+              .append('button')
+              .attr('title', t('background.reset'))
+              .attr('class', function(d) { return 'display-option-reset display-option-reset-' + d; })
+              .on('click', function(d) {
+                  if (event.button !== 0) return;
+                  updateValue(d, 1);
+              })
+              .call(svgIcon('#iD-icon-' + (textDirection === 'rtl' ? 'redo' : 'undo')));
 
-      var _button = select(null);
-      var _body = select(null);
-      var _loaded;
-      var _showing;
 
-      /**
-       * @returns {{itemTitle: String, description: String, image: String|null}|null}
-       **/
-      function findLocal(data) {
-          var entity = data.tag || data.key;
-          if (!entity) return null;
-
-          var result = {
-              title: entity.title,
-              description: entity.description,
-          };
+          // update
+          container = containerEnter
+              .merge(container);
 
-          if (entity.claims) {
-              var langCode = utilDetect().locale.toLowerCase();
-              var url;
-              var image = wikibase.claimToValue(entity, 'P4', langCode);
-              if (image) {
-                  url = 'https://commons.wikimedia.org/w/index.php';
-              } else {
-                  image = wikibase.claimToValue(entity, 'P28', langCode);
-                  if (image) {
-                      url = 'https://wiki.openstreetmap.org/w/index.php';
-                  }
-              }
-              if (image) {
-                  result.image = {
-                      url: url,
-                      title: 'Special:Redirect/file/' + image
-                  };
-              }
-          }
+          container.selectAll('.display-option-input')
+              .property('value', function(d) { return _options[d]; });
 
-          // Helper method to get wiki info if a given language exists
-          function getWikiInfo(wiki, langCode, msg) {
-              if (wiki && wiki[langCode]) {
-                  return {title: wiki[langCode], text: t(msg)};
-              }
-          }
+          container.selectAll('.display-option-value')
+              .text(function(d) { return Math.floor(_options[d] * 100) + '%'; });
+
+          container.selectAll('.display-option-reset')
+              .classed('disabled', function(d) { return _options[d] === 1; });
 
-          // Try to get a wiki page from tag data item first, followed by the corresponding key data item.
-          // If neither tag nor key data item contain a wiki page in the needed language nor English,
-          // get the first found wiki page from either the tag or the key item.
-          var tagWiki = wikibase.monolingualClaimToValueObj(data.tag, 'P31');
-          var keyWiki = wikibase.monolingualClaimToValueObj(data.key, 'P31');
+          // first time only, set brightness if needed
+          if (containerEnter.size() && _options.brightness !== 1) {
+              context.background().brightness(_options.brightness);
+          }
+      }
 
-          // If exact language code does not exist, try to find the first part before the '-'
-          // BUG: in some cases, a more elaborate fallback logic might be needed
-          var langPrefix = langCode.split('-', 2)[0];
 
-          result.wiki =
-            getWikiInfo(tagWiki, langCode, 'inspector.wiki_reference') ||
-            getWikiInfo(tagWiki, langPrefix, 'inspector.wiki_reference') ||
-            getWikiInfo(tagWiki, 'en', 'inspector.wiki_en_reference') ||
-            getWikiInfo(keyWiki, langCode, 'inspector.wiki_reference') ||
-            getWikiInfo(keyWiki, langPrefix, 'inspector.wiki_reference') ||
-            getWikiInfo(keyWiki, 'en', 'inspector.wiki_en_reference');
+      function backgroundDisplayOptions(selection) {
+          _selection = selection;
 
-          return result;
+          selection
+              .call(uiDisclosure(context, 'background_display_options', true)
+                  .title(t('background.display_options'))
+                  .content(render)
+              );
       }
 
 
-      function load(param) {
-          if (!wikibase) return;
+      return backgroundDisplayOptions;
+  }
 
-          _button
-              .classed('tag-reference-loading', true);
+  function uiBackgroundOffset(context) {
+      var directions = [
+          ['right', [0.5, 0]],
+          ['top', [0, -0.5]],
+          ['left', [-0.5, 0]],
+          ['bottom', [0, 0.5]]
+      ];
 
-          wikibase.getEntity(param, function show(err, data) {
-              var docs;
-              if (!err && data) {
-                  docs = findLocal(data);
-              }
 
-              _body.html('');
+      function d3_eventCancel() {
+          event.stopPropagation();
+          event.preventDefault();
+      }
 
-              if (!docs || !docs.title) {
-                  _body
-                      .append('p')
-                      .attr('class', 'tag-reference-description')
-                      .text(t('inspector.no_documentation_key'));
-                  done();
-                  return;
-              }
 
-              if (docs.image) {
-                  var imageUrl = docs.image.url + '?' + utilQsString({
-                      title: docs.image.title,
-                      width: 100,
-                      height: 100,
-                  });
+      function updateValue() {
+          var meters = geoOffsetToMeters(context.background().offset());
+          var x = +meters[0].toFixed(2);
+          var y = +meters[1].toFixed(2);
 
-                  _body
-                      .append('img')
-                      .attr('class', 'tag-reference-wiki-image')
-                      .attr('src', imageUrl)
-                      .on('load', function() { done(); })
-                      .on('error', function() { select(this).remove(); done(); });
-              } else {
-                  done();
-              }
+          d3_selectAll('.nudge-inner-rect')
+              .select('input')
+              .classed('error', false)
+              .property('value', x + ', ' + y);
 
-              _body
-                  .append('p')
-                  .attr('class', 'tag-reference-description')
-                  .text(docs.description || t('inspector.no_documentation_key'));
+          d3_selectAll('.nudge-reset')
+              .classed('disabled', function() {
+                  return (x === 0 && y === 0);
+              });
+      }
 
-              _body
-                  .append('a')
-                  .attr('class', 'tag-reference-link')
-                  .attr('target', '_blank')
-                  .attr('tabindex', -1)
-                  .attr('href', 'https://wiki.openstreetmap.org/wiki/' + docs.title)
-                  .call(svgIcon('#iD-icon-out-link', 'inline'))
-                  .append('span')
-                  .text(t('inspector.edit_reference'));
-
-              if (docs.wiki) {
-                  _body
-                    .append('a')
-                    .attr('class', 'tag-reference-link')
-                    .attr('target', '_blank')
-                    .attr('tabindex', -1)
-                    .attr('href', 'https://wiki.openstreetmap.org/wiki/' + docs.wiki.title)
-                    .call(svgIcon('#iD-icon-out-link', 'inline'))
-                    .append('span')
-                    .text(docs.wiki.text);
-              }
 
-              // Add link to info about "good changeset comments" - #2923
-              if (param.key === 'comment') {
-                  _body
-                      .append('a')
-                      .attr('class', 'tag-reference-comment-link')
-                      .attr('target', '_blank')
-                      .attr('tabindex', -1)
-                      .call(svgIcon('#iD-icon-out-link', 'inline'))
-                      .attr('href', t('commit.about_changeset_comments_link'))
-                      .append('span')
-                      .text(t('commit.about_changeset_comments'));
-              }
-          });
+      function resetOffset() {
+          context.background().offset([0, 0]);
+          updateValue();
       }
 
 
-      function done() {
-          _loaded = true;
-
-          _button
-              .classed('tag-reference-loading', false);
+      function nudge(d) {
+          context.background().nudge(d, context.map().zoom());
+          updateValue();
+      }
 
-          _body
-              .classed('expanded', true)
-              .transition()
-              .duration(200)
-              .style('max-height', '200px')
-              .style('opacity', '1');
 
-          _showing = true;
-      }
+      function clickNudgeButton(d) {
+          var interval;
+          var timeout = window.setTimeout(function() {
+                  interval = window.setInterval(nudge.bind(null, d), 100);
+              }, 500);
 
+          function doneNudge() {
+              window.clearTimeout(timeout);
+              window.clearInterval(interval);
+              select(window)
+                  .on('mouseup.buttonoffset', null, true)
+                  .on('mousedown.buttonoffset', null, true);
+          }
 
-      function hide() {
-          _body
-              .transition()
-              .duration(200)
-              .style('max-height', '0px')
-              .style('opacity', '0')
-              .on('end', function () {
-                  _body.classed('expanded', false);
-              });
+          select(window)
+              .on('mouseup.buttonoffset', doneNudge, true)
+              .on('mousedown.buttonoffset', doneNudge, true);
 
-          _showing = false;
+          nudge(d);
       }
 
 
-      tagReference.button = function(selection$$1) {
-          _button = selection$$1.selectAll('.tag-reference-button')
-              .data([0]);
+      function inputOffset() {
+          var input = select(this);
+          var d = input.node().value;
 
-          _button = _button.enter()
-              .append('button')
-              .attr('class', 'tag-reference-button')
-              .attr('title', t('icons.information'))
-              .attr('tabindex', -1)
-              .call(svgIcon('#iD-icon-inspect'))
-              .merge(_button);
+          if (d === '') return resetOffset();
 
-          _button
-              .on('click', function () {
-                  event.stopPropagation();
-                  event.preventDefault();
-                  if (_showing) {
-                      hide();
-                  } else if (_loaded) {
-                      done();
-                  } else {
-                      tag.langCode = utilDetect().locale.toLowerCase();
-                      load(tag);
-                  }
-              });
-      };
+          d = d.replace(/;/g, ',').split(',').map(function(n) {
+              // if n is NaN, it will always get mapped to false.
+              return !isNaN(n) && n;
+          });
+
+          if (d.length !== 2 || !d[0] || !d[1]) {
+              input.classed('error', true);
+              return;
+          }
+
+          context.background().offset(geoMetersToOffset(d));
+          updateValue();
+      }
 
 
-      tagReference.body = function(selection$$1) {
-          var tagid = tag.rtype || (tag.key + '-' + tag.value);
-          _body = selection$$1.selectAll('.tag-reference-body')
-              .data([tagid], function(d) { return d; });
+      function dragOffset() {
+          event.preventDefault();
+          if (event.button !== 0) return;
 
-          _body.exit()
-              .remove();
+          var origin = [event.clientX, event.clientY];
 
-          _body = _body.enter()
+          context.container()
               .append('div')
-              .attr('class', 'tag-reference-body')
-              .style('max-height', '0')
-              .style('opacity', '0')
-              .merge(_body);
+              .attr('class', 'nudge-surface');
 
-          if (_showing === false) {
-              hide();
-          }
-      };
+          select(window)
+              .on('mousemove.offset', function() {
+                  var latest = [event.clientX, event.clientY];
+                  var d = [
+                      -(origin[0] - latest[0]) / 4,
+                      -(origin[1] - latest[1]) / 4
+                  ];
 
+                  origin = latest;
+                  nudge(d);
+              })
+              .on('mouseup.offset', function() {
+                  if (event.button !== 0) return;
+                  d3_selectAll('.nudge-surface')
+                      .remove();
 
-      tagReference.showing = function(_) {
-          if (!arguments.length) return _showing;
-          _showing = _;
-          return tagReference;
-      };
+                  select(window)
+                      .on('mousemove.offset', null)
+                      .on('mouseup.offset', null);
+              });
+      }
 
 
-      return tagReference;
-  }
+      function render(selection) {
+          var container = selection.selectAll('.nudge-container')
+              .data([0]);
 
-  function uiField(context, presetField, entity, options) {
-      options = assignIn({
-          show: true,
-          wrap: true,
-          remove: true,
-          revert: true,
-          info: true
-      }, options);
+          var containerEnter = container.enter()
+              .append('div')
+              .attr('class', 'nudge-container cf');
 
-      var dispatch$$1 = dispatch('change');
-      var field = clone(presetField);
-      var _show = options.show;
-      var _state = '';
-      var _tags = {};
+          containerEnter
+              .append('div')
+              .attr('class', 'nudge-instructions')
+              .text(t('background.offset'));
 
-      field.keys = field.keys || [field.key];
+          var nudgeEnter = containerEnter
+              .append('div')
+              .attr('class', 'nudge-outer-rect')
+              .on('mousedown', dragOffset);
 
-      // only create the fields that are actually being shown
-      if (_show && !field.impl) {
-          createField();
-      }
+          nudgeEnter
+              .append('div')
+              .attr('class', 'nudge-inner-rect')
+              .append('input')
+              .on('change', inputOffset);
 
-      // Creates the field.. This is done lazily,
-      // once we know that the field will be shown.
-      function createField() {
-          field.impl = uiFields[field.type](field, context)
-              .on('change', function(t$$1, onInput) {
-                  dispatch$$1.call('change', field, t$$1, onInput);
+          containerEnter
+              .append('div')
+              .selectAll('button')
+              .data(directions).enter()
+              .append('button')
+              .attr('class', function(d) { return d[0] + ' nudge'; })
+              .on('contextmenu', d3_eventCancel)
+              .on('mousedown', function(d) {
+                  if (event.button !== 0) return;
+                  clickNudgeButton(d[1]);
               });
 
-          if (entity) {
-              field.entityID = entity.id;
-              // if this field cares about the entity, pass it along
-              if (field.impl.entity) {
-                  field.impl.entity(entity);
-              }
-          }
-      }
-
+          containerEnter
+              .append('button')
+              .attr('title', t('background.reset'))
+              .attr('class', 'nudge-reset disabled')
+              .on('contextmenu', d3_eventCancel)
+              .on('click', function() {
+                  if (event.button !== 0) return;
+                  resetOffset();
+              })
+              .call(svgIcon('#iD-icon-' + (textDirection === 'rtl' ? 'redo' : 'undo')));
 
-      function isModified() {
-          if (!entity) return false;
-          var original = context.graph().base().entities[entity.id];
-          return some(field.keys, function(key) {
-              return original ? _tags[key] !== original.tags[key] : _tags[key];
-          });
+          updateValue();
       }
 
 
-      function isPresent() {
-          return some(field.keys, function(key) {
-              if (field.type === 'multiCombo') {
-                  for (var tagKey in _tags) {
-                      if (tagKey.indexOf(key) === 0) {
-                          return true;
-                      }
-                  }
-                  return false;
-              }
-              return _tags[key] !== undefined;
-          });
+      function backgroundOffset(selection) {
+          selection
+              .call(uiDisclosure(context, 'background_offset', false)
+                  .title(t('background.fix_misalignment'))
+                  .content(render)
+              );
       }
 
 
-      function revert(d) {
-          event.stopPropagation();
-          event.preventDefault();
-          if (!entity) return false;
+      context.background()
+          .on('change.backgroundOffset-update', updateValue);
 
-          var original = context.graph().base().entities[entity.id];
-          var t$$1 = {};
-          d.keys.forEach(function(key) {
-              t$$1[key] = original ? original.tags[key] : undefined;
-          });
+      return backgroundOffset;
+  }
 
-          dispatch$$1.call('change', d, t$$1);
-      }
+  var marked = createCommonjsModule(function (module, exports) {
+  (function(root) {
 
+  /**
+   * Block-Level Grammar
+   */
 
-      function remove(d) {
-          event.stopPropagation();
-          event.preventDefault();
+  var block = {
+    newline: /^\n+/,
+    code: /^( {4}[^\n]+\n*)+/,
+    fences: noop,
+    hr: /^ {0,3}((?:- *){3,}|(?:_ *){3,}|(?:\* *){3,})(?:\n+|$)/,
+    heading: /^ *(#{1,6}) *([^\n]+?) *(?:#+ *)?(?:\n+|$)/,
+    nptable: noop,
+    blockquote: /^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/,
+    list: /^( {0,3})(bull) [\s\S]+?(?:hr|def|\n{2,}(?! )(?!\1bull )\n*|\s*$)/,
+    html: '^ {0,3}(?:' // optional indentation
+      + '<(script|pre|style)[\\s>][\\s\\S]*?(?:</\\1>[^\\n]*\\n+|$)' // (1)
+      + '|comment[^\\n]*(\\n+|$)' // (2)
+      + '|<\\?[\\s\\S]*?\\?>\\n*' // (3)
+      + '|<![A-Z][\\s\\S]*?>\\n*' // (4)
+      + '|<!\\[CDATA\\[[\\s\\S]*?\\]\\]>\\n*' // (5)
+      + '|</?(tag)(?: +|\\n|/?>)[\\s\\S]*?(?:\\n{2,}|$)' // (6)
+      + '|<(?!script|pre|style)([a-z][\\w-]*)(?:attribute)*? */?>(?=\\h*\\n)[\\s\\S]*?(?:\\n{2,}|$)' // (7) open tag
+      + '|</(?!script|pre|style)[a-z][\\w-]*\\s*>(?=\\h*\\n)[\\s\\S]*?(?:\\n{2,}|$)' // (7) closing tag
+      + ')',
+    def: /^ {0,3}\[(label)\]: *\n? *<?([^\s>]+)>?(?:(?: +\n? *| *\n *)(title))? *(?:\n+|$)/,
+    table: noop,
+    lheading: /^([^\n]+)\n *(=|-){2,} *(?:\n+|$)/,
+    paragraph: /^([^\n]+(?:\n(?!hr|heading|lheading| {0,3}>|<\/?(?:tag)(?: +|\n|\/?>)|<(?:script|pre|style|!--))[^\n]+)*)/,
+    text: /^[^\n]+/
+  };
 
-          var t$$1 = {};
-          d.keys.forEach(function(key) {
-              t$$1[key] = undefined;
-          });
+  block._label = /(?!\s*\])(?:\\[\[\]]|[^\[\]])+/;
+  block._title = /(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/;
+  block.def = edit(block.def)
+    .replace('label', block._label)
+    .replace('title', block._title)
+    .getRegex();
 
-          dispatch$$1.call('change', d, t$$1);
-      }
+  block.bullet = /(?:[*+-]|\d{1,9}\.)/;
+  block.item = /^( *)(bull) ?[^\n]*(?:\n(?!\1bull ?)[^\n]*)*/;
+  block.item = edit(block.item, 'gm')
+    .replace(/bull/g, block.bullet)
+    .getRegex();
 
+  block.list = edit(block.list)
+    .replace(/bull/g, block.bullet)
+    .replace('hr', '\\n+(?=\\1?(?:(?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$))')
+    .replace('def', '\\n+(?=' + block.def.source + ')')
+    .getRegex();
 
-      field.render = function(selection$$1) {
-          var container = selection$$1.selectAll('.form-field')
-              .data([field]);
+  block._tag = 'address|article|aside|base|basefont|blockquote|body|caption'
+    + '|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption'
+    + '|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe'
+    + '|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option'
+    + '|p|param|section|source|summary|table|tbody|td|tfoot|th|thead|title|tr'
+    + '|track|ul';
+  block._comment = /<!--(?!-?>)[\s\S]*?-->/;
+  block.html = edit(block.html, 'i')
+    .replace('comment', block._comment)
+    .replace('tag', block._tag)
+    .replace('attribute', / +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/)
+    .getRegex();
 
-          // Enter
-          var enter = container.enter()
-              .append('div')
-              .attr('class', function(d) { return 'form-field form-field-' + d.safeid; })
-              .classed('nowrap', !options.wrap);
+  block.paragraph = edit(block.paragraph)
+    .replace('hr', block.hr)
+    .replace('heading', block.heading)
+    .replace('lheading', block.lheading)
+    .replace('tag', block._tag) // pars can be interrupted by type (6) html blocks
+    .getRegex();
 
-          if (options.wrap) {
-              var label = enter
-                  .append('label')
-                  .attr('class', 'form-field-label')
-                  .attr('for', function(d) { return 'preset-input-' + d.safeid; });
+  block.blockquote = edit(block.blockquote)
+    .replace('paragraph', block.paragraph)
+    .getRegex();
 
-              label
-                  .append('span')
-                  .attr('class', 'label-text')
-                  .text(function(d) { return d.label(); });
+  /**
+   * Normal Block Grammar
+   */
 
-              if (options.remove) {
-                  label
-                      .append('button')
-                      .attr('class', 'remove-icon')
-                      .attr('title', t('icons.remove'))
-                      .attr('tabindex', -1)
-                      .call(svgIcon('#iD-operation-delete'));
-              }
+  block.normal = merge({}, block);
 
-              if (options.revert) {
-                  label
-                      .append('button')
-                      .attr('class', 'modified-icon')
-                      .attr('title', t('icons.undo'))
-                      .attr('tabindex', -1)
-                      .call(svgIcon((textDirection === 'rtl') ? '#iD-icon-redo' : '#iD-icon-undo'));
-              }
-          }
+  /**
+   * GFM Block Grammar
+   */
 
+  block.gfm = merge({}, block.normal, {
+    fences: /^ {0,3}(`{3,}|~{3,})([^`\n]*)\n(?:|([\s\S]*?)\n)(?: {0,3}\1[~`]* *(?:\n+|$)|$)/,
+    paragraph: /^/,
+    heading: /^ *(#{1,6}) +([^\n]+?) *#* *(?:\n+|$)/
+  });
 
-          // Update
-          container = container
-              .merge(enter);
+  block.gfm.paragraph = edit(block.paragraph)
+    .replace('(?!', '(?!'
+      + block.gfm.fences.source.replace('\\1', '\\2') + '|'
+      + block.list.source.replace('\\1', '\\3') + '|')
+    .getRegex();
 
-          container.select('.form-field-label > .remove-icon')  // propagate bound data
-              .on('click', remove);
+  /**
+   * GFM + Tables Block Grammar
+   */
 
-          container.select('.form-field-label > .modified-icon')  // propagate bound data
-              .on('click', revert);
+  block.tables = merge({}, block.gfm, {
+    nptable: /^ *([^|\n ].*\|.*)\n *([-:]+ *\|[-| :]*)(?:\n((?:.*[^>\n ].*(?:\n|$))*)\n*|$)/,
+    table: /^ *\|(.+)\n *\|?( *[-:]+[-| :]*)(?:\n((?: *[^>\n ].*(?:\n|$))*)\n*|$)/
+  });
 
-          container
-              .classed('modified', isModified())
-              .classed('present', isPresent())
-              .each(function(d) {
-                  if (!d.impl) {
-                      createField();
-                  }
+  /**
+   * Pedantic grammar
+   */
 
-                  var reference, help;
+  block.pedantic = merge({}, block.normal, {
+    html: edit(
+      '^ *(?:comment *(?:\\n|\\s*$)'
+      + '|<(tag)[\\s\\S]+?</\\1> *(?:\\n{2,}|\\s*$)' // closed tag
+      + '|<tag(?:"[^"]*"|\'[^\']*\'|\\s[^\'"/>\\s]*)*?/?> *(?:\\n{2,}|\\s*$))')
+      .replace('comment', block._comment)
+      .replace(/tag/g, '(?!(?:'
+        + 'a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub'
+        + '|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)'
+        + '\\b)\\w+(?!:|[^\\w\\s@]*@)\\b')
+      .getRegex(),
+    def: /^ *\[([^\]]+)\]: *<?([^\s>]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/
+  });
 
-                  // instantiate field help
-                  if (options.wrap && field.type === 'restrictions') {
-                      help = uiFieldHelp(context, 'restrictions');
-                  }
+  /**
+   * Block Lexer
+   */
 
-                  // instantiate tag reference
-                  if (options.wrap && options.info) {
-                      var referenceKey = d.key;
-                      if (d.type === 'multiCombo') {   // lookup key without the trailing ':'
-                          referenceKey = referenceKey.replace(/:$/, '');
-                      }
+  function Lexer(options) {
+    this.tokens = [];
+    this.tokens.links = Object.create(null);
+    this.options = options || marked.defaults;
+    this.rules = block.normal;
 
-                      reference = uiTagReference(d.reference || { key: referenceKey }, context);
-                      if (_state === 'hover') {
-                          reference.showing(false);
-                      }
-                  }
+    if (this.options.pedantic) {
+      this.rules = block.pedantic;
+    } else if (this.options.gfm) {
+      if (this.options.tables) {
+        this.rules = block.tables;
+      } else {
+        this.rules = block.gfm;
+      }
+    }
+  }
 
-                  select(this)
-                      .call(d.impl);
+  /**
+   * Expose Block Rules
+   */
 
-                  // add field help components
-                  if (help) {
-                      select(this)
-                          .call(help.body)
-                          .select('.form-field-label')
-                          .call(help.button);
-                  }
+  Lexer.rules = block;
 
-                  // add tag reference components
-                  if (reference) {
-                      select(this)
-                          .call(reference.body)
-                          .select('.form-field-label')
-                          .call(reference.button);
-                  }
+  /**
+   * Static Lex Method
+   */
 
-                  d.impl.tags(_tags);
-              });
-      };
+  Lexer.lex = function(src, options) {
+    var lexer = new Lexer(options);
+    return lexer.lex(src);
+  };
 
+  /**
+   * Preprocessing
+   */
 
-      field.state = function(val) {
-          if (!arguments.length) return _state;
-          _state = val;
-          return field;
-      };
+  Lexer.prototype.lex = function(src) {
+    src = src
+      .replace(/\r\n|\r/g, '\n')
+      .replace(/\t/g, '    ')
+      .replace(/\u00a0/g, ' ')
+      .replace(/\u2424/g, '\n');
 
+    return this.token(src, true);
+  };
 
-      field.tags = function(val) {
-          if (!arguments.length) return _tags;
-          _tags = val;
-          return field;
-      };
+  /**
+   * Lexing
+   */
 
+  Lexer.prototype.token = function(src, top) {
+    src = src.replace(/^ +$/gm, '');
+    var next,
+        loose,
+        cap,
+        bull,
+        b,
+        item,
+        listStart,
+        listItems,
+        t,
+        space,
+        i,
+        tag,
+        l,
+        isordered,
+        istask,
+        ischecked;
 
-      field.show = function() {
-          _show = true;
-          if (!field.impl) {
-              createField();
-          }
-          if (field.default && field.key && _tags[field.key] !== field.default) {
-              var t$$1 = {};
-              t$$1[field.key] = field.default;
-              dispatch$$1.call('change', this, t$$1);
-          }
-      };
+    while (src) {
+      // newline
+      if (cap = this.rules.newline.exec(src)) {
+        src = src.substring(cap[0].length);
+        if (cap[0].length > 1) {
+          this.tokens.push({
+            type: 'space'
+          });
+        }
+      }
 
+      // code
+      if (cap = this.rules.code.exec(src)) {
+        src = src.substring(cap[0].length);
+        cap = cap[0].replace(/^ {4}/gm, '');
+        this.tokens.push({
+          type: 'code',
+          text: !this.options.pedantic
+            ? rtrim(cap, '\n')
+            : cap
+        });
+        continue;
+      }
 
-      // A shown field has a visible UI, a non-shown field is in the 'Add field' dropdown
-      field.isShown = function() {
-          return _show || isPresent();
-      };
+      // fences (gfm)
+      if (cap = this.rules.fences.exec(src)) {
+        src = src.substring(cap[0].length);
+        this.tokens.push({
+          type: 'code',
+          lang: cap[2] ? cap[2].trim() : cap[2],
+          text: cap[3] || ''
+        });
+        continue;
+      }
 
+      // heading
+      if (cap = this.rules.heading.exec(src)) {
+        src = src.substring(cap[0].length);
+        this.tokens.push({
+          type: 'heading',
+          depth: cap[1].length,
+          text: cap[2]
+        });
+        continue;
+      }
 
-      // An allowed field can appear in the UI or in the 'Add field' dropdown.
-      // A non-allowed field is hidden from the user altogether
-      field.isAllowed = function() {
-          if (!entity || isPresent()) return true;   // a field with a value should always display
+      // table no leading pipe (gfm)
+      if (top && (cap = this.rules.nptable.exec(src))) {
+        item = {
+          type: 'table',
+          header: splitCells(cap[1].replace(/^ *| *\| *$/g, '')),
+          align: cap[2].replace(/^ *|\| *$/g, '').split(/ *\| */),
+          cells: cap[3] ? cap[3].replace(/\n$/, '').split('\n') : []
+        };
 
-          var latest = context.hasEntity(entity.id);   // check the most current copy of the entity
-          if (!latest) return true;
+        if (item.header.length === item.align.length) {
+          src = src.substring(cap[0].length);
 
-          var require = field.prerequisiteTag;
-          if (require && require.key) {
-              var value = latest.tags[require.key];
-              if (!value) return false;
+          for (i = 0; i < item.align.length; i++) {
+            if (/^ *-+: *$/.test(item.align[i])) {
+              item.align[i] = 'right';
+            } else if (/^ *:-+: *$/.test(item.align[i])) {
+              item.align[i] = 'center';
+            } else if (/^ *:-+ *$/.test(item.align[i])) {
+              item.align[i] = 'left';
+            } else {
+              item.align[i] = null;
+            }
+          }
 
-              if (require.valueNot) {
-                  return require.valueNot !== value;
-              }
-              if (require.value) {
-                  return require.value === value;
-              }
-              return true;
+          for (i = 0; i < item.cells.length; i++) {
+            item.cells[i] = splitCells(item.cells[i], item.header.length);
           }
-          return true;
-      };
 
+          this.tokens.push(item);
+
+          continue;
+        }
+      }
+
+      // hr
+      if (cap = this.rules.hr.exec(src)) {
+        src = src.substring(cap[0].length);
+        this.tokens.push({
+          type: 'hr'
+        });
+        continue;
+      }
 
-      field.focus = function() {
-          if (field.impl) {
-              field.impl.focus();
-          }
-      };
+      // blockquote
+      if (cap = this.rules.blockquote.exec(src)) {
+        src = src.substring(cap[0].length);
 
+        this.tokens.push({
+          type: 'blockquote_start'
+        });
 
-      return utilRebind(field, dispatch$$1, 'on');
-  }
+        cap = cap[0].replace(/^ *> ?/gm, '');
 
-  function uiFormFields$$1(context) {
-      var moreCombo = uiCombobox(context, 'more-fields').minItems(1);
-      var _fieldsArr = [];
-      var _state = '';
-      var _klass = '';
+        // Pass `top` to keep the current
+        // "toplevel" state. This is exactly
+        // how markdown.pl works.
+        this.token(cap, top);
 
+        this.tokens.push({
+          type: 'blockquote_end'
+        });
 
-      function formFields(selection$$1) {
-          var allowedFields = _fieldsArr.filter(function(field) { return field.isAllowed(); });
-          var shown = allowedFields.filter(function(field) { return field.isShown(); });
-          var notShown = allowedFields.filter(function(field) { return !field.isShown(); });
+        continue;
+      }
 
-          var container = selection$$1.selectAll('.form-fields-container')
-              .data([0]);
+      // list
+      if (cap = this.rules.list.exec(src)) {
+        src = src.substring(cap[0].length);
+        bull = cap[2];
+        isordered = bull.length > 1;
 
-          container = container.enter()
-              .append('div')
-              .attr('class', 'form-fields-container ' + (_klass || ''))
-              .merge(container);
+        listStart = {
+          type: 'list_start',
+          ordered: isordered,
+          start: isordered ? +bull : '',
+          loose: false
+        };
 
+        this.tokens.push(listStart);
 
-          var fields = container.selectAll('.wrap-form-field')
-              .data(shown, function(d) { return d.id + (d.entityID || ''); });
+        // Get each top-level item.
+        cap = cap[0].match(this.rules.item);
 
-          fields.exit()
-              .remove();
+        listItems = [];
+        next = false;
+        l = cap.length;
+        i = 0;
 
-          // Enter
-          var enter = fields.enter()
-              .append('div')
-              .attr('class', function(d) { return 'wrap-form-field wrap-form-field-' + d.safeid; });
+        for (; i < l; i++) {
+          item = cap[i];
 
-          // Update
-          fields = fields
-              .merge(enter);
+          // Remove the list item's bullet
+          // so it is seen as the next token.
+          space = item.length;
+          item = item.replace(/^ *([*+-]|\d+\.) */, '');
 
-          fields
-              .order()
-              .each(function(d) {
-                  select(this)
-                      .call(d.render);
-              });
+          // Outdent whatever the
+          // list item contains. Hacky.
+          if (~item.indexOf('\n ')) {
+            space -= item.length;
+            item = !this.options.pedantic
+              ? item.replace(new RegExp('^ {1,' + space + '}', 'gm'), '')
+              : item.replace(/^ {1,4}/gm, '');
+          }
 
+          // Determine whether the next list item belongs here.
+          // Backpedal if it does not belong in this list.
+          if (i !== l - 1) {
+            b = block.bullet.exec(cap[i + 1])[0];
+            if (bull.length > 1 ? b.length === 1
+              : (b.length > 1 || (this.options.smartLists && b !== bull))) {
+              src = cap.slice(i + 1).join('\n') + src;
+              i = l - 1;
+            }
+          }
 
-          notShown = notShown.map(function(field) {
-              return {
-                  title: field.label(),
-                  value: field.label(),
-                  field: field
-              };
-          });
+          // Determine whether item is loose or not.
+          // Use: /(^|\n)(?! )[^\n]+\n\n(?!\s*$)/
+          // for discount behavior.
+          loose = next || /\n\n(?!\s*$)/.test(item);
+          if (i !== l - 1) {
+            next = item.charAt(item.length - 1) === '\n';
+            if (!loose) loose = next;
+          }
 
+          if (loose) {
+            listStart.loose = true;
+          }
 
-          var more = selection$$1.selectAll('.more-fields')
-              .data((_state === 'hover' || notShown.length === 0) ? [] : [0]);
+          // Check for task list items
+          istask = /^\[[ xX]\] /.test(item);
+          ischecked = undefined;
+          if (istask) {
+            ischecked = item[1] !== ' ';
+            item = item.replace(/^\[[ xX]\] +/, '');
+          }
 
-          more.exit()
-              .remove();
+          t = {
+            type: 'list_item_start',
+            task: istask,
+            checked: ischecked,
+            loose: loose
+          };
 
-          more = more.enter()
-              .append('div')
-              .attr('class', 'more-fields')
-              .append('label')
-              .text(t('inspector.add_fields'))
-              .merge(more);
+          listItems.push(t);
+          this.tokens.push(t);
 
+          // Recurse.
+          this.token(item, false);
 
-          var input = more.selectAll('.value')
-              .data([0]);
+          this.tokens.push({
+            type: 'list_item_end'
+          });
+        }
 
-          input.exit()
-              .remove();
+        if (listStart.loose) {
+          l = listItems.length;
+          i = 0;
+          for (; i < l; i++) {
+            listItems[i].loose = true;
+          }
+        }
 
-          input = input.enter()
-              .append('input')
-              .attr('class', 'value')
-              .attr('type', 'text')
-              .call(utilNoAuto)
-              .merge(input);
+        this.tokens.push({
+          type: 'list_end'
+        });
 
-          input
-              .call(utilGetSetValue, '')
-              .attr('placeholder', function() {
-                  var placeholder = [];
-                  for (var field in notShown) {
-                      placeholder.push(notShown[field].title);
-                  }
-                  return placeholder.slice(0,3).join(', ') + ((placeholder.length > 3) ? '…' : '');
-              })
-              .call(moreCombo
-                  .data(notShown)
-                  .on('accept', function (d) {
-                      if (!d) return;  // user entered something that was not matched
-                      var field = d.field;
-                      field.show();
-                      selection$$1.call(formFields);  // rerender
-                      if (field.type !== 'semiCombo' && field.type !== 'multiCombo') {
-                          field.focus();
-                      }
-                  })
-              );
+        continue;
       }
 
+      // html
+      if (cap = this.rules.html.exec(src)) {
+        src = src.substring(cap[0].length);
+        this.tokens.push({
+          type: this.options.sanitize
+            ? 'paragraph'
+            : 'html',
+          pre: !this.options.sanitizer
+            && (cap[1] === 'pre' || cap[1] === 'script' || cap[1] === 'style'),
+          text: cap[0]
+        });
+        continue;
+      }
 
-      formFields.fieldsArr = function(val) {
-          if (!arguments.length) return _fieldsArr;
-          _fieldsArr = val || [];
-          return formFields;
-      };
-
-      formFields.state = function(val) {
-          if (!arguments.length) return _state;
-          _state = val;
-          return formFields;
-      };
+      // def
+      if (top && (cap = this.rules.def.exec(src))) {
+        src = src.substring(cap[0].length);
+        if (cap[3]) cap[3] = cap[3].substring(1, cap[3].length - 1);
+        tag = cap[1].toLowerCase().replace(/\s+/g, ' ');
+        if (!this.tokens.links[tag]) {
+          this.tokens.links[tag] = {
+            href: cap[2],
+            title: cap[3]
+          };
+        }
+        continue;
+      }
 
-      formFields.klass = function(val) {
-          if (!arguments.length) return _klass;
-          _klass = val;
-          return formFields;
-      };
+      // table (gfm)
+      if (top && (cap = this.rules.table.exec(src))) {
+        item = {
+          type: 'table',
+          header: splitCells(cap[1].replace(/^ *| *\| *$/g, '')),
+          align: cap[2].replace(/^ *|\| *$/g, '').split(/ *\| */),
+          cells: cap[3] ? cap[3].replace(/(?: *\| *)?\n$/, '').split('\n') : []
+        };
 
+        if (item.header.length === item.align.length) {
+          src = src.substring(cap[0].length);
 
-      return formFields;
-  }
+          for (i = 0; i < item.align.length; i++) {
+            if (/^ *-+: *$/.test(item.align[i])) {
+              item.align[i] = 'right';
+            } else if (/^ *:-+: *$/.test(item.align[i])) {
+              item.align[i] = 'center';
+            } else if (/^ *:-+ *$/.test(item.align[i])) {
+              item.align[i] = 'left';
+            } else {
+              item.align[i] = null;
+            }
+          }
 
-  function uiPresetEditor(context) {
-      var dispatch$$1 = dispatch('change');
-      var formFields = uiFormFields$$1(context);
-      var _state;
-      var _fieldsArr;
-      var _preset;
-      var _tags;
-      var _entityID;
+          for (i = 0; i < item.cells.length; i++) {
+            item.cells[i] = splitCells(
+              item.cells[i].replace(/^ *\| *| *\| *$/g, ''),
+              item.header.length);
+          }
 
+          this.tokens.push(item);
 
-      function presetEditor(selection$$1) {
-          selection$$1.call(uiDisclosure(context, 'preset_fields', true)
-              .title(t('inspector.all_fields'))
-              .content(render)
-          );
+          continue;
+        }
       }
 
+      // lheading
+      if (cap = this.rules.lheading.exec(src)) {
+        src = src.substring(cap[0].length);
+        this.tokens.push({
+          type: 'heading',
+          depth: cap[2] === '=' ? 1 : 2,
+          text: cap[1]
+        });
+        continue;
+      }
 
-      function render(selection$$1) {
-          if (!_fieldsArr) {
-              var entity = context.entity(_entityID);
-              var geometry = context.geometry(_entityID);
-              var presets = context.presets();
-
-              _fieldsArr = [];
+      // top-level paragraph
+      if (top && (cap = this.rules.paragraph.exec(src))) {
+        src = src.substring(cap[0].length);
+        this.tokens.push({
+          type: 'paragraph',
+          text: cap[1].charAt(cap[1].length - 1) === '\n'
+            ? cap[1].slice(0, -1)
+            : cap[1]
+        });
+        continue;
+      }
 
-              _preset.fields.forEach(function(field) {
-                  if (field.matchGeometry(geometry)) {
-                      _fieldsArr.push(
-                          uiField(context, field, entity)
-                      );
-                  }
-              });
+      // text
+      if (cap = this.rules.text.exec(src)) {
+        // Top-level should never reach here.
+        src = src.substring(cap[0].length);
+        this.tokens.push({
+          type: 'text',
+          text: cap[0]
+        });
+        continue;
+      }
 
-              if (entity.isHighwayIntersection(context.graph()) && presets.field('restrictions')) {
-                  _fieldsArr.push(
-                      uiField(context, presets.field('restrictions'), entity)
-                  );
-              }
+      if (src) {
+        throw new Error('Infinite loop on byte: ' + src.charCodeAt(0));
+      }
+    }
 
-              var additionalFields = union(_preset.moreFields, presets.universal());
-              additionalFields.sort(function(field1, field2) {
-                  return field1.label() > field2.label();
-              });
+    return this.tokens;
+  };
 
-              additionalFields.forEach(function(field) {
-                  if (_preset.fields.indexOf(field) === -1) {
-                      _fieldsArr.push(
-                          uiField(context, field, entity, { show: false })
-                      );
-                  }
-              });
+  /**
+   * Inline-Level Grammar
+   */
 
-              _fieldsArr.forEach(function(field) {
-                  field
-                      .on('change', function(t$$1, onInput) {
-                          dispatch$$1.call('change', field, t$$1, onInput);
-                      });
-              });
-          }
+  var inline = {
+    escape: /^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/,
+    autolink: /^<(scheme:[^\s\x00-\x1f<>]*|email)>/,
+    url: noop,
+    tag: '^comment'
+      + '|^</[a-zA-Z][\\w:-]*\\s*>' // self-closing tag
+      + '|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>' // open tag
+      + '|^<\\?[\\s\\S]*?\\?>' // processing instruction, e.g. <?php ?>
+      + '|^<![a-zA-Z]+\\s[\\s\\S]*?>' // declaration, e.g. <!DOCTYPE html>
+      + '|^<!\\[CDATA\\[[\\s\\S]*?\\]\\]>', // CDATA section
+    link: /^!?\[(label)\]\(href(?:\s+(title))?\s*\)/,
+    reflink: /^!?\[(label)\]\[(?!\s*\])((?:\\[\[\]]?|[^\[\]\\])+)\]/,
+    nolink: /^!?\[(?!\s*\])((?:\[[^\[\]]*\]|\\[\[\]]|[^\[\]])*)\](?:\[\])?/,
+    strong: /^__([^\s_])__(?!_)|^\*\*([^\s*])\*\*(?!\*)|^__([^\s][\s\S]*?[^\s])__(?!_)|^\*\*([^\s][\s\S]*?[^\s])\*\*(?!\*)/,
+    em: /^_([^\s_])_(?!_)|^\*([^\s*"<\[])\*(?!\*)|^_([^\s][\s\S]*?[^\s_])_(?!_|[^\spunctuation])|^_([^\s_][\s\S]*?[^\s])_(?!_|[^\spunctuation])|^\*([^\s"<\[][\s\S]*?[^\s*])\*(?!\*)|^\*([^\s*"<\[][\s\S]*?[^\s])\*(?!\*)/,
+    code: /^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/,
+    br: /^( {2,}|\\)\n(?!\s*$)/,
+    del: noop,
+    text: /^(`+|[^`])[\s\S]*?(?=[\\<!\[`*]|\b_| {2,}\n|$)/
+  };
 
-          _fieldsArr.forEach(function(field) {
-              field
-                  .state(_state)
-                  .tags(_tags);
-          });
+  // list of punctuation marks from common mark spec
+  // without ` and ] to workaround Rule 17 (inline code blocks/links)
+  inline._punctuation = '!"#$%&\'()*+,\\-./:;<=>?@\\[^_{|}~';
+  inline.em = edit(inline.em).replace(/punctuation/g, inline._punctuation).getRegex();
 
+  inline._escapes = /\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/g;
 
-          selection$$1
-              .call(formFields
-                  .fieldsArr(_fieldsArr)
-                  .state(_state)
-                  .klass('inspector-inner fillL3')
-              );
+  inline._scheme = /[a-zA-Z][a-zA-Z0-9+.-]{1,31}/;
+  inline._email = /[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/;
+  inline.autolink = edit(inline.autolink)
+    .replace('scheme', inline._scheme)
+    .replace('email', inline._email)
+    .getRegex();
 
+  inline._attribute = /\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/;
 
-          selection$$1.selectAll('.wrap-form-field input')
-              .on('keydown', function() {
-                  // if user presses enter, and combobox is not active, accept edits..
-                  if (event.keyCode === 13 && select('.combobox').empty()) {
-                      context.enter(modeBrowse(context));
-                  }
-              });
-      }
+  inline.tag = edit(inline.tag)
+    .replace('comment', block._comment)
+    .replace('attribute', inline._attribute)
+    .getRegex();
 
+  inline._label = /(?:\[[^\[\]]*\]|\\[\[\]]?|`[^`]*`|[^\[\]\\])*?/;
+  inline._href = /\s*(<(?:\\[<>]?|[^\s<>\\])*>|(?:\\[()]?|\([^\s\x00-\x1f\\]*\)|[^\s\x00-\x1f()\\])*?)/;
+  inline._title = /"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/;
 
-      presetEditor.preset = function(val) {
-          if (!arguments.length) return _preset;
-          if (_preset && _preset.id === val.id) return presetEditor;
-          _preset = val;
-          _fieldsArr = null;
-          return presetEditor;
-      };
+  inline.link = edit(inline.link)
+    .replace('label', inline._label)
+    .replace('href', inline._href)
+    .replace('title', inline._title)
+    .getRegex();
 
+  inline.reflink = edit(inline.reflink)
+    .replace('label', inline._label)
+    .getRegex();
 
-      presetEditor.state = function(val) {
-          if (!arguments.length) return _state;
-          _state = val;
-          return presetEditor;
-      };
+  /**
+   * Normal Inline Grammar
+   */
 
+  inline.normal = merge({}, inline);
 
-      presetEditor.tags = function(val) {
-          if (!arguments.length) return _tags;
-          _tags = val;
-          // Don't reset _fieldsArr here.
-          return presetEditor;
-      };
+  /**
+   * Pedantic Inline Grammar
+   */
 
+  inline.pedantic = merge({}, inline.normal, {
+    strong: /^__(?=\S)([\s\S]*?\S)__(?!_)|^\*\*(?=\S)([\s\S]*?\S)\*\*(?!\*)/,
+    em: /^_(?=\S)([\s\S]*?\S)_(?!_)|^\*(?=\S)([\s\S]*?\S)\*(?!\*)/,
+    link: edit(/^!?\[(label)\]\((.*?)\)/)
+      .replace('label', inline._label)
+      .getRegex(),
+    reflink: edit(/^!?\[(label)\]\s*\[([^\]]*)\]/)
+      .replace('label', inline._label)
+      .getRegex()
+  });
 
-      presetEditor.entityID = function(val) {
-          if (!arguments.length) return _entityID;
-          if (_entityID === val) return presetEditor;
-          _entityID = val;
-          _fieldsArr = null;
-          return presetEditor;
-      };
+  /**
+   * GFM Inline Grammar
+   */
 
+  inline.gfm = merge({}, inline.normal, {
+    escape: edit(inline.escape).replace('])', '~|])').getRegex(),
+    _extended_email: /[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/,
+    url: /^((?:ftp|https?):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/,
+    _backpedal: /(?:[^?!.,:;*_~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_~)]+(?!$))+/,
+    del: /^~+(?=\S)([\s\S]*?\S)~+/,
+    text: edit(inline.text)
+      .replace(']|', '~]|')
+      .replace('|$', '|https?://|ftp://|www\\.|[a-zA-Z0-9.!#$%&\'*+/=?^_`{\\|}~-]+@|$')
+      .getRegex()
+  });
 
-      return utilRebind(presetEditor, dispatch$$1, 'on');
-  }
+  inline.gfm.url = edit(inline.gfm.url, 'i')
+    .replace('email', inline.gfm._extended_email)
+    .getRegex();
+  /**
+   * GFM + Line Breaks Inline Grammar
+   */
 
-  function uiPresetIcon() {
-      var preset, geometry;
+  inline.breaks = merge({}, inline.gfm, {
+    br: edit(inline.br).replace('{2,}', '*').getRegex(),
+    text: edit(inline.gfm.text).replace('{2,}', '*').getRegex()
+  });
 
+  /**
+   * Inline Lexer & Compiler
+   */
 
-      function presetIcon(selection$$1) {
-          selection$$1.each(render);
-      }
+  function InlineLexer(links, options) {
+    this.options = options || marked.defaults;
+    this.links = links;
+    this.rules = inline.normal;
+    this.renderer = this.options.renderer || new Renderer();
+    this.renderer.options = this.options;
 
+    if (!this.links) {
+      throw new Error('Tokens array requires a `links` property.');
+    }
 
-      function getIcon(p, geom) {
-          if (p.icon)
-              return p.icon;
-          else if (geom === 'line')
-              return 'iD-other-line';
-          else if (geom === 'vertex')
-              return p.isFallback() ? '' : 'temaki-vertex';
-          else
-              return 'maki-marker-stroked';
+    if (this.options.pedantic) {
+      this.rules = inline.pedantic;
+    } else if (this.options.gfm) {
+      if (this.options.breaks) {
+        this.rules = inline.breaks;
+      } else {
+        this.rules = inline.gfm;
       }
+    }
+  }
 
+  /**
+   * Expose Inline Rules
+   */
 
-      function render() {
-          var selection$$1 = select(this);
-          var p = preset.apply(this, arguments);
-          var geom = geometry.apply(this, arguments);
-          var picon = getIcon(p, geom);
-          var isMaki = /^maki-/.test(picon);
-          var isTemaki = /^temaki-/.test(picon);
-          var isFa = /^fa[srb]-/.test(picon);
-          var isPOI = isMaki || isTemaki || isFa;
-          var isFramed = (geom === 'area' || geom === 'vertex');
+  InlineLexer.rules = inline;
 
-          var tagClasses = '';
-          for (var k in p.tags) {
-              var v = p.tags[k];
-              tagClasses += ' tag-' + k;
-              if (v !== '*') {
-                  tagClasses += ' tag-' + k + '-' + v;
-              }
-          }
+  /**
+   * Static Lexing/Compiling Method
+   */
 
-          // if the preset includes a `building_area` field, class it as a building
-          if (p.fields && p.fields.filter(function(d) { return d.id === 'building_area'; }).length) {
-              tagClasses += ' tag-building';
-          }
+  InlineLexer.output = function(src, links, options) {
+    var inline = new InlineLexer(links, options);
+    return inline.output(src);
+  };
 
+  /**
+   * Lexing/Compiling
+   */
 
-          var fill = selection$$1.selectAll('.preset-icon-fill')
-              .data([0]);
+  InlineLexer.prototype.output = function(src) {
+    var out = '',
+        link,
+        text,
+        href,
+        title,
+        cap,
+        prevCapZero;
 
-          fill = fill.enter()
-              .append('div')
-              .merge(fill);
+    while (src) {
+      // escape
+      if (cap = this.rules.escape.exec(src)) {
+        src = src.substring(cap[0].length);
+        out += escape(cap[1]);
+        continue;
+      }
 
-          fill
-              .attr('class', function() {
-                  return 'preset-icon-fill preset-icon-fill-' + geom + tagClasses;
-              });
+      // tag
+      if (cap = this.rules.tag.exec(src)) {
+        if (!this.inLink && /^<a /i.test(cap[0])) {
+          this.inLink = true;
+        } else if (this.inLink && /^<\/a>/i.test(cap[0])) {
+          this.inLink = false;
+        }
+        if (!this.inRawBlock && /^<(pre|code|kbd|script)(\s|>)/i.test(cap[0])) {
+          this.inRawBlock = true;
+        } else if (this.inRawBlock && /^<\/(pre|code|kbd|script)(\s|>)/i.test(cap[0])) {
+          this.inRawBlock = false;
+        }
 
+        src = src.substring(cap[0].length);
+        out += this.options.sanitize
+          ? this.options.sanitizer
+            ? this.options.sanitizer(cap[0])
+            : escape(cap[0])
+          : cap[0];
+        continue;
+      }
 
-          var areaFrame = selection$$1.selectAll('.preset-icon-frame')
-              .data((geom === 'area') ? [0] : []);
+      // link
+      if (cap = this.rules.link.exec(src)) {
+        src = src.substring(cap[0].length);
+        this.inLink = true;
+        href = cap[2];
+        if (this.options.pedantic) {
+          link = /^([^'"]*[^\s])\s+(['"])(.*)\2/.exec(href);
 
-          areaFrame.exit()
-              .remove();
+          if (link) {
+            href = link[1];
+            title = link[3];
+          } else {
+            title = '';
+          }
+        } else {
+          title = cap[3] ? cap[3].slice(1, -1) : '';
+        }
+        href = href.trim().replace(/^<([\s\S]*)>$/, '$1');
+        out += this.outputLink(cap, {
+          href: InlineLexer.escapes(href),
+          title: InlineLexer.escapes(title)
+        });
+        this.inLink = false;
+        continue;
+      }
 
-          areaFrame = areaFrame.enter()
-              .append('div')
-              .attr('class', 'preset-icon-frame')
-              .call(svgIcon('#iD-preset-icon-frame'));
+      // reflink, nolink
+      if ((cap = this.rules.reflink.exec(src))
+          || (cap = this.rules.nolink.exec(src))) {
+        src = src.substring(cap[0].length);
+        link = (cap[2] || cap[1]).replace(/\s+/g, ' ');
+        link = this.links[link.toLowerCase()];
+        if (!link || !link.href) {
+          out += cap[0].charAt(0);
+          src = cap[0].substring(1) + src;
+          continue;
+        }
+        this.inLink = true;
+        out += this.outputLink(cap, link);
+        this.inLink = false;
+        continue;
+      }
 
+      // strong
+      if (cap = this.rules.strong.exec(src)) {
+        src = src.substring(cap[0].length);
+        out += this.renderer.strong(this.output(cap[4] || cap[3] || cap[2] || cap[1]));
+        continue;
+      }
 
-          var icon = selection$$1.selectAll('.preset-icon')
-              .data([0]);
+      // em
+      if (cap = this.rules.em.exec(src)) {
+        src = src.substring(cap[0].length);
+        out += this.renderer.em(this.output(cap[6] || cap[5] || cap[4] || cap[3] || cap[2] || cap[1]));
+        continue;
+      }
 
-          icon = icon.enter()
-              .append('div')
-              .attr('class', 'preset-icon')
-              .call(svgIcon(''))
-              .merge(icon);
+      // code
+      if (cap = this.rules.code.exec(src)) {
+        src = src.substring(cap[0].length);
+        out += this.renderer.codespan(escape(cap[2].trim(), true));
+        continue;
+      }
 
-          icon
-              .attr('class', 'preset-icon preset-icon-' +
-                  (isPOI ? (isFramed ? '24' : '28') : (isFramed ? '44' : '60'))
-              );
+      // br
+      if (cap = this.rules.br.exec(src)) {
+        src = src.substring(cap[0].length);
+        out += this.renderer.br();
+        continue;
+      }
 
-          icon.selectAll('svg')
-              .attr('class', function() {
-                  return 'icon ' + picon + (isPOI ? '' : tagClasses);
-              });
+      // del (gfm)
+      if (cap = this.rules.del.exec(src)) {
+        src = src.substring(cap[0].length);
+        out += this.renderer.del(this.output(cap[1]));
+        continue;
+      }
 
-          icon.selectAll('use')
-              .attr('href', '#' + picon + (isMaki ? '-15' : ''));
+      // autolink
+      if (cap = this.rules.autolink.exec(src)) {
+        src = src.substring(cap[0].length);
+        if (cap[2] === '@') {
+          text = escape(this.mangle(cap[1]));
+          href = 'mailto:' + text;
+        } else {
+          text = escape(cap[1]);
+          href = text;
+        }
+        out += this.renderer.link(href, null, text);
+        continue;
       }
 
+      // url (gfm)
+      if (!this.inLink && (cap = this.rules.url.exec(src))) {
+        if (cap[2] === '@') {
+          text = escape(cap[0]);
+          href = 'mailto:' + text;
+        } else {
+          // do extended autolink path validation
+          do {
+            prevCapZero = cap[0];
+            cap[0] = this.rules._backpedal.exec(cap[0])[0];
+          } while (prevCapZero !== cap[0]);
+          text = escape(cap[0]);
+          if (cap[1] === 'www.') {
+            href = 'http://' + text;
+          } else {
+            href = text;
+          }
+        }
+        src = src.substring(cap[0].length);
+        out += this.renderer.link(href, null, text);
+        continue;
+      }
 
-      presetIcon.preset = function(val) {
-          if (!arguments.length) return preset;
-          preset = utilFunctor(val);
-          return presetIcon;
-      };
+      // text
+      if (cap = this.rules.text.exec(src)) {
+        src = src.substring(cap[0].length);
+        if (this.inRawBlock) {
+          out += this.renderer.text(cap[0]);
+        } else {
+          out += this.renderer.text(escape(this.smartypants(cap[0])));
+        }
+        continue;
+      }
 
+      if (src) {
+        throw new Error('Infinite loop on byte: ' + src.charCodeAt(0));
+      }
+    }
 
-      presetIcon.geometry = function(val) {
-          if (!arguments.length) return geometry;
-          geometry = utilFunctor(val);
-          return presetIcon;
-      };
+    return out;
+  };
 
-      return presetIcon;
-  }
+  InlineLexer.escapes = function(text) {
+    return text ? text.replace(InlineLexer.rules._escapes, '$1') : text;
+  };
 
-  function uiQuickLinks() {
-      var _choices = [];
+  /**
+   * Compile Link
+   */
 
+  InlineLexer.prototype.outputLink = function(cap, link) {
+    var href = link.href,
+        title = link.title ? escape(link.title) : null;
 
-      function quickLinks(selection$$1) {
-          var container = selection$$1.selectAll('.quick-links')
-              .data([0]);
+    return cap[0].charAt(0) !== '!'
+      ? this.renderer.link(href, title, this.output(cap[1]))
+      : this.renderer.image(href, title, escape(cap[1]));
+  };
 
-          container = container.enter()
-              .append('div')
-              .attr('class', 'quick-links')
-              .merge(container);
+  /**
+   * Smartypants Transformations
+   */
 
-          var items = container.selectAll('.quick-link')
-              .data(_choices, function(d) { return d.id; });
+  InlineLexer.prototype.smartypants = function(text) {
+    if (!this.options.smartypants) return text;
+    return text
+      // em-dashes
+      .replace(/---/g, '\u2014')
+      // en-dashes
+      .replace(/--/g, '\u2013')
+      // opening singles
+      .replace(/(^|[-\u2014/(\[{"\s])'/g, '$1\u2018')
+      // closing singles & apostrophes
+      .replace(/'/g, '\u2019')
+      // opening doubles
+      .replace(/(^|[-\u2014/(\[{\u2018\s])"/g, '$1\u201c')
+      // closing doubles
+      .replace(/"/g, '\u201d')
+      // ellipses
+      .replace(/\.{3}/g, '\u2026');
+  };
 
-          items.exit()
-              .remove();
+  /**
+   * Mangle Links
+   */
 
-          items.enter()
-              .append('a')
-              .attr('class', function(d) { return 'quick-link quick-link-' + d.id; })
-              .attr('href', '#')
-              .text(function(d) { return t(d.label); })
-              .each(function(d) {
-                  if (typeof d.tooltip !== 'function') return;
-                  select(this)
-                      .call(tooltip().html(true).title(d.tooltip).placement('bottom'));
-              })
-              .on('click', function(d) {
-                  if (typeof d.click !== 'function') return;
-                  event.preventDefault();
-                  d.click(d);
-              });
-      }
+  InlineLexer.prototype.mangle = function(text) {
+    if (!this.options.mangle) return text;
+    var out = '',
+        l = text.length,
+        i = 0,
+        ch;
 
+    for (; i < l; i++) {
+      ch = text.charCodeAt(i);
+      if (Math.random() > 0.5) {
+        ch = 'x' + ch.toString(16);
+      }
+      out += '&#' + ch + ';';
+    }
 
-      //  val should be an array of choices like:
-      //    [{
-      //       id: 'link-id',
-      //       label: 'translation.key',
-      //       tooltip: function(d),
-      //       click: function(d)
-      //    }, ..]
-      quickLinks.choices = function(val) {
-          if (!arguments.length) return _choices;
-          _choices = val;
-          return quickLinks;
-      };
+    return out;
+  };
 
+  /**
+   * Renderer
+   */
 
-      return quickLinks;
+  function Renderer(options) {
+    this.options = options || marked.defaults;
   }
 
-  function uiRawMemberEditor$$1(context) {
-      var taginfo = services.taginfo;
-      var _entityID;
-
-      function downloadMember(d) {
-          event.preventDefault();
-
-          // display the loading indicator
-          select(this.parentNode).classed('tag-reference-loading', true);
-          context.loadEntity(d.id);
+  Renderer.prototype.code = function(code, infostring, escaped) {
+    var lang = (infostring || '').match(/\S*/)[0];
+    if (this.options.highlight) {
+      var out = this.options.highlight(code, lang);
+      if (out != null && out !== code) {
+        escaped = true;
+        code = out;
       }
+    }
 
-      function zoomToMember(d) {
-          event.preventDefault();
-
-          var entity = context.entity(d.id);
-          context.map().zoomTo(entity);
+    if (!lang) {
+      return '<pre><code>'
+        + (escaped ? code : escape(code, true))
+        + '</code></pre>';
+    }
 
-          // highlight the feature in case it wasn't previously on-screen
-          utilHighlightEntity(d.id, true, context);
-      }
+    return '<pre><code class="'
+      + this.options.langPrefix
+      + escape(lang, true)
+      + '">'
+      + (escaped ? code : escape(code, true))
+      + '</code></pre>\n';
+  };
 
+  Renderer.prototype.blockquote = function(quote) {
+    return '<blockquote>\n' + quote + '</blockquote>\n';
+  };
 
-      function selectMember(d) {
-          event.preventDefault();
+  Renderer.prototype.html = function(html) {
+    return html;
+  };
 
-          // remove the hover-highlight styling
-          utilHighlightEntity(d.id, false, context);
+  Renderer.prototype.heading = function(text, level, raw, slugger) {
+    if (this.options.headerIds) {
+      return '<h'
+        + level
+        + ' id="'
+        + this.options.headerPrefix
+        + slugger.slug(raw)
+        + '">'
+        + text
+        + '</h'
+        + level
+        + '>\n';
+    }
+    // ignore IDs
+    return '<h' + level + '>' + text + '</h' + level + '>\n';
+  };
 
-          var entity = context.entity(d.id);
-          var mapExtent = context.map().extent();
-          if (!entity.intersects(mapExtent, context.graph())) {
-              // zoom to the entity if its extent is not visible now
-              context.map().zoomToEase(entity);
-          }
+  Renderer.prototype.hr = function() {
+    return this.options.xhtml ? '<hr/>\n' : '<hr>\n';
+  };
 
-          context.enter(modeSelect(context, [d.id]));
-      }
+  Renderer.prototype.list = function(body, ordered, start) {
+    var type = ordered ? 'ol' : 'ul',
+        startatt = (ordered && start !== 1) ? (' start="' + start + '"') : '';
+    return '<' + type + startatt + '>\n' + body + '</' + type + '>\n';
+  };
 
+  Renderer.prototype.listitem = function(text) {
+    return '<li>' + text + '</li>\n';
+  };
 
-      function changeRole(d) {
-          var oldRole = d.role;
-          var newRole = select(this).property('value');
+  Renderer.prototype.checkbox = function(checked) {
+    return '<input '
+      + (checked ? 'checked="" ' : '')
+      + 'disabled="" type="checkbox"'
+      + (this.options.xhtml ? ' /' : '')
+      + '> ';
+  };
 
-          if (oldRole !== newRole) {
-              var member = { id: d.id, type: d.type, role: newRole };
-              context.perform(
-                  actionChangeMember(d.relation.id, member, d.index),
-                  t('operations.change_role.annotation')
-              );
-          }
-      }
+  Renderer.prototype.paragraph = function(text) {
+    return '<p>' + text + '</p>\n';
+  };
 
+  Renderer.prototype.table = function(header, body) {
+    if (body) body = '<tbody>' + body + '</tbody>';
 
-      function deleteMember(d) {
-          context.perform(
-              actionDeleteMember(d.relation.id, d.index),
-              t('operations.delete_member.annotation')
-          );
+    return '<table>\n'
+      + '<thead>\n'
+      + header
+      + '</thead>\n'
+      + body
+      + '</table>\n';
+  };
 
-          if (!context.hasEntity(d.relation.id)) {
-              context.enter(modeBrowse(context));
-          }
+  Renderer.prototype.tablerow = function(content) {
+    return '<tr>\n' + content + '</tr>\n';
+  };
 
-          utilHighlightEntity(d.id, false, context);
-      }
+  Renderer.prototype.tablecell = function(content, flags) {
+    var type = flags.header ? 'th' : 'td';
+    var tag = flags.align
+      ? '<' + type + ' align="' + flags.align + '">'
+      : '<' + type + '>';
+    return tag + content + '</' + type + '>\n';
+  };
 
+  // span level renderer
+  Renderer.prototype.strong = function(text) {
+    return '<strong>' + text + '</strong>';
+  };
 
-      function rawMemberEditor(selection$$1) {
-          var entity = context.entity(_entityID);
-          var memberships = [];
+  Renderer.prototype.em = function(text) {
+    return '<em>' + text + '</em>';
+  };
 
-          entity.members.slice(0, 1000).forEach(function(member, index) {
-              memberships.push({
-                  index: index,
-                  id: member.id,
-                  type: member.type,
-                  role: member.role,
-                  relation: entity,
-                  member: context.hasEntity(member.id)
-              });
-          });
+  Renderer.prototype.codespan = function(text) {
+    return '<code>' + text + '</code>';
+  };
 
-          var gt = entity.members.length > 1000 ? '>' : '';
-          selection$$1.call(uiDisclosure(context, 'raw_member_editor', true)
-              .title(t('inspector.all_members') + ' (' + gt + memberships.length + ')')
-              .expanded(true)
-              .updatePreference(false)
-              .on('toggled', function(expanded) {
-                  if (expanded) {
-                      selection$$1.node().parentNode.scrollTop += 200;
-                  }
-              })
-              .content(content)
-          );
+  Renderer.prototype.br = function() {
+    return this.options.xhtml ? '<br/>' : '<br>';
+  };
 
+  Renderer.prototype.del = function(text) {
+    return '<del>' + text + '</del>';
+  };
 
-          function content(selection$$1) {
-              var list = selection$$1.selectAll('.member-list')
-                  .data([0]);
+  Renderer.prototype.link = function(href, title, text) {
+    href = cleanUrl(this.options.sanitize, this.options.baseUrl, href);
+    if (href === null) {
+      return text;
+    }
+    var out = '<a href="' + escape(href) + '"';
+    if (title) {
+      out += ' title="' + title + '"';
+    }
+    out += '>' + text + '</a>';
+    return out;
+  };
 
-              list = list.enter()
-                  .append('ul')
-                  .attr('class', 'member-list')
-                  .merge(list);
+  Renderer.prototype.image = function(href, title, text) {
+    href = cleanUrl(this.options.sanitize, this.options.baseUrl, href);
+    if (href === null) {
+      return text;
+    }
 
+    var out = '<img src="' + href + '" alt="' + text + '"';
+    if (title) {
+      out += ' title="' + title + '"';
+    }
+    out += this.options.xhtml ? '/>' : '>';
+    return out;
+  };
 
-              var items = list.selectAll('li')
-                  .data(memberships, function(d) {
-                      return osmEntity$$1.key(d.relation) + ',' + d.index + ',' +
-                          (d.member ? osmEntity$$1.key(d.member) : 'incomplete');
-                  });
+  Renderer.prototype.text = function(text) {
+    return text;
+  };
 
-              items.exit()
-                  .each(unbind)
-                  .remove();
+  /**
+   * TextRenderer
+   * returns only the textual part of the token
+   */
 
-              var itemsEnter = items.enter()
-                  .append('li')
-                  .attr('class', 'member-row form-field')
-                  .classed('member-incomplete', function(d) { return !d.member; });
+  function TextRenderer() {}
 
-              itemsEnter
-                  .each(function(d) {
-                      var item = select(this);
+  // no need for block level renderers
 
-                      var label = item
-                          .append('label')
-                          .attr('class', 'form-field-label');
+  TextRenderer.prototype.strong =
+  TextRenderer.prototype.em =
+  TextRenderer.prototype.codespan =
+  TextRenderer.prototype.del =
+  TextRenderer.prototype.text = function (text) {
+    return text;
+  };
 
-                      if (d.member) {
-                          // highlight the member feature in the map while hovering on the list item
-                          item
-                              .on('mouseover', function() {
-                                  utilHighlightEntity(d.id, true, context);
-                              })
-                              .on('mouseout', function() {
-                                  utilHighlightEntity(d.id, false, context);
-                              });
+  TextRenderer.prototype.link =
+  TextRenderer.prototype.image = function(href, title, text) {
+    return '' + text;
+  };
 
-                          var labelLink = label
-                              .append('span')
-                              .attr('class', 'label-text')
-                              .append('a')
-                              .attr('href', '#')
-                              .on('click', selectMember);
+  TextRenderer.prototype.br = function() {
+    return '';
+  };
 
-                          labelLink
-                              .append('span')
-                              .attr('class', 'member-entity-type')
-                              .text(function(d) {
-                                  var matched = context.presets().match(d.member, context.graph());
-                                  return (matched && matched.name()) || utilDisplayType(d.member.id);
-                              });
+  /**
+   * Parsing & Compiling
+   */
 
-                          labelLink
-                              .append('span')
-                              .attr('class', 'member-entity-name')
-                              .text(function(d) { return utilDisplayName(d.member); });
+  function Parser(options) {
+    this.tokens = [];
+    this.token = null;
+    this.options = options || marked.defaults;
+    this.options.renderer = this.options.renderer || new Renderer();
+    this.renderer = this.options.renderer;
+    this.renderer.options = this.options;
+    this.slugger = new Slugger();
+  }
 
-                          label
-                              .append('button')
-                              .attr('class', 'member-zoom')
-                              .attr('title', t('icons.zoom_to'))
-                              .attr('tabindex', -1)
-                              .call(svgIcon('#iD-icon-geolocate'))
-                              .on('click', zoomToMember);
+  /**
+   * Static Parse Method
+   */
 
-                      } else {
-                          var labelText = label
-                              .append('span')
-                              .attr('class', 'label-text');
+  Parser.parse = function(src, options) {
+    var parser = new Parser(options);
+    return parser.parse(src);
+  };
 
-                          labelText
-                              .append('span')
-                              .attr('class', 'member-entity-type')
-                              .text(t('inspector.' + d.type, { id: d.id }));
+  /**
+   * Parse Loop
+   */
 
-                          labelText
-                              .append('span')
-                              .attr('class', 'member-entity-name')
-                              .text(t('inspector.incomplete', { id: d.id }));
+  Parser.prototype.parse = function(src) {
+    this.inline = new InlineLexer(src.links, this.options);
+    // use an InlineLexer with a TextRenderer to extract pure text
+    this.inlineText = new InlineLexer(
+      src.links,
+      merge({}, this.options, {renderer: new TextRenderer()})
+    );
+    this.tokens = src.reverse();
 
-                          label
-                              .append('button')
-                              .attr('class', 'member-download')
-                              .attr('title', t('icons.download'))
-                              .attr('tabindex', -1)
-                              .call(svgIcon('#iD-icon-load'))
-                              .on('click', downloadMember);
-                      }
-                  });
+    var out = '';
+    while (this.next()) {
+      out += this.tok();
+    }
 
-              var wrapEnter = itemsEnter
-                  .append('div')
-                  .attr('class', 'form-field-input-wrap form-field-input-member');
+    return out;
+  };
 
-              wrapEnter
-                  .append('input')
-                  .attr('class', 'member-role')
-                  .property('type', 'text')
-                  .attr('maxlength', 255)
-                  .attr('placeholder', t('inspector.role'))
-                  .call(utilNoAuto);
+  /**
+   * Next Token
+   */
 
-              wrapEnter
-                  .append('button')
-                  .attr('tabindex', -1)
-                  .attr('title', t('icons.remove'))
-                  .attr('class', 'remove form-field-button member-delete')
-                  .call(svgIcon('#iD-operation-delete'));
+  Parser.prototype.next = function() {
+    return this.token = this.tokens.pop();
+  };
 
-              if (taginfo) {
-                  wrapEnter.each(bindTypeahead);
-              }
+  /**
+   * Preview Next Token
+   */
 
+  Parser.prototype.peek = function() {
+    return this.tokens[this.tokens.length - 1] || 0;
+  };
 
-              // update
-              items = items
-                  .merge(itemsEnter);
+  /**
+   * Parse Text Tokens
+   */
 
-              items.select('input.member-role')
-                  .property('value', function(d) { return d.role; })
-                  .on('blur', changeRole)
-                  .on('change', changeRole);
+  Parser.prototype.parseText = function() {
+    var body = this.token.text;
 
-              items.select('button.member-delete')
-                  .on('click', deleteMember);
+    while (this.peek().type === 'text') {
+      body += '\n' + this.next().text;
+    }
 
+    return this.inline.output(body);
+  };
 
+  /**
+   * Parse Current Token
+   */
 
-              function bindTypeahead(d) {
-                  var row = select(this);
-                  var role = row.selectAll('input.member-role');
-                  var origValue = role.property('value');
+  Parser.prototype.tok = function() {
+    switch (this.token.type) {
+      case 'space': {
+        return '';
+      }
+      case 'hr': {
+        return this.renderer.hr();
+      }
+      case 'heading': {
+        return this.renderer.heading(
+          this.inline.output(this.token.text),
+          this.token.depth,
+          unescape(this.inlineText.output(this.token.text)),
+          this.slugger);
+      }
+      case 'code': {
+        return this.renderer.code(this.token.text,
+          this.token.lang,
+          this.token.escaped);
+      }
+      case 'table': {
+        var header = '',
+            body = '',
+            i,
+            row,
+            cell,
+            j;
 
-                  function sort(value, data) {
-                      var sameletter = [];
-                      var other = [];
-                      for (var i = 0; i < data.length; i++) {
-                          if (data[i].value.substring(0, value.length) === value) {
-                              sameletter.push(data[i]);
-                          } else {
-                              other.push(data[i]);
-                          }
-                      }
-                      return sameletter.concat(other);
-                  }
+        // header
+        cell = '';
+        for (i = 0; i < this.token.header.length; i++) {
+          cell += this.renderer.tablecell(
+            this.inline.output(this.token.header[i]),
+            { header: true, align: this.token.align[i] }
+          );
+        }
+        header += this.renderer.tablerow(cell);
 
-                  role.call(uiCombobox(context, 'member-role')
-                      .fetcher(function(role, callback) {
-                          // The `geometry` param is used in the `taginfo.js` interface for
-                          // filtering results, as a key into the `tag_members_fractions`
-                          // object.  If we don't know the geometry because the member is
-                          // not yet downloaded, it's ok to guess based on type.
-                          var geometry;
-                          if (d.member) {
-                              geometry = context.geometry(d.member.id);
-                          } else if (d.type === 'relation') {
-                              geometry = 'relation';
-                          } else if (d.type === 'way') {
-                              geometry = 'line';
-                          } else {
-                              geometry = 'point';
-                          }
+        for (i = 0; i < this.token.cells.length; i++) {
+          row = this.token.cells[i];
 
-                          var rtype = entity.tags.type;
-                          taginfo.roles({
-                              debounce: true,
-                              rtype: rtype || '',
-                              geometry: geometry,
-                              query: role
-                          }, function(err, data) {
-                              if (!err) callback(sort(role, data));
-                          });
-                      })
-                      .on('cancel', function() {
-                          role.property('value', origValue);
-                      })
-                  );
-              }
+          cell = '';
+          for (j = 0; j < row.length; j++) {
+            cell += this.renderer.tablecell(
+              this.inline.output(row[j]),
+              { header: false, align: this.token.align[j] }
+            );
+          }
 
+          body += this.renderer.tablerow(cell);
+        }
+        return this.renderer.table(header, body);
+      }
+      case 'blockquote_start': {
+        body = '';
 
-              function unbind() {
-                  var row = select(this);
+        while (this.next().type !== 'blockquote_end') {
+          body += this.tok();
+        }
 
-                  row.selectAll('input.member-role')
-                      .call(uiCombobox.off);
-              }
-          }
+        return this.renderer.blockquote(body);
       }
+      case 'list_start': {
+        body = '';
+        var ordered = this.token.ordered,
+            start = this.token.start;
 
+        while (this.next().type !== 'list_end') {
+          body += this.tok();
+        }
 
-      rawMemberEditor.entityID = function(val) {
-          if (!arguments.length) return _entityID;
-          _entityID = val;
-          return rawMemberEditor;
-      };
+        return this.renderer.list(body, ordered, start);
+      }
+      case 'list_item_start': {
+        body = '';
+        var loose = this.token.loose;
 
+        if (this.token.task) {
+          body += this.renderer.checkbox(this.token.checked);
+        }
 
-      return rawMemberEditor;
-  }
+        while (this.next().type !== 'list_item_end') {
+          body += !loose && this.token.type === 'text'
+            ? this.parseText()
+            : this.tok();
+        }
 
-  function uiRawMembershipEditor$$1(context) {
-      var taginfo = services.taginfo;
-      var nearbyCombo = uiCombobox(context, 'parent-relation')
-          .minItems(1)
-          .fetcher(fetchNearbyRelations);
-      var _inChange = false;
-      var _entityID;
-      var _showBlank;
+        return this.renderer.listitem(body);
+      }
+      case 'html': {
+        // TODO parse inline content if parameter markdown=1
+        return this.renderer.html(this.token.text);
+      }
+      case 'paragraph': {
+        return this.renderer.paragraph(this.inline.output(this.token.text));
+      }
+      case 'text': {
+        return this.renderer.paragraph(this.parseText());
+      }
+      default: {
+        var errMsg = 'Token with "' + this.token.type + '" type was not found.';
+        if (this.options.silent) {
+          console.log(errMsg);
+        } else {
+          throw new Error(errMsg);
+        }
+      }
+    }
+  };
 
+  /**
+   * Slugger generates header id
+   */
 
-      function selectRelation(d) {
-          event.preventDefault();
+  function Slugger () {
+    this.seen = {};
+  }
 
-          // remove the hover-highlight styling
-          utilHighlightEntity(d.relation.id, false, context);
+  /**
+   * Convert string to unique id
+   */
 
-          context.enter(modeSelect(context, [d.relation.id]));
-      }
+  Slugger.prototype.slug = function (value) {
+    var slug = value
+      .toLowerCase()
+      .trim()
+      .replace(/[\u2000-\u206F\u2E00-\u2E7F\\'!"#$%&()*+,./:;<=>?@[\]^`{|}~]/g, '')
+      .replace(/\s/g, '-');
 
+    if (this.seen.hasOwnProperty(slug)) {
+      var originalSlug = slug;
+      do {
+        this.seen[originalSlug]++;
+        slug = originalSlug + '-' + this.seen[originalSlug];
+      } while (this.seen.hasOwnProperty(slug));
+    }
+    this.seen[slug] = 0;
 
-      function changeRole(d) {
-          if (d === 0) return;    // called on newrow (shoudn't happen)
-          if (_inChange) return;  // avoid accidental recursive call #5731
+    return slug;
+  };
 
-          var oldRole = d.member.role;
-          var newRole = select(this).property('value');
+  /**
+   * Helpers
+   */
 
-          if (oldRole !== newRole) {
-              _inChange = true;
-              context.perform(
-                  actionChangeMember(d.relation.id, assignIn({}, d.member, { role: newRole }), d.index),
-                  t('operations.change_role.annotation')
-              );
-          }
-          _inChange = false;
+  function escape(html, encode) {
+    if (encode) {
+      if (escape.escapeTest.test(html)) {
+        return html.replace(escape.escapeReplace, function (ch) { return escape.replacements[ch]; });
+      }
+    } else {
+      if (escape.escapeTestNoEncode.test(html)) {
+        return html.replace(escape.escapeReplaceNoEncode, function (ch) { return escape.replacements[ch]; });
       }
+    }
 
+    return html;
+  }
 
-      function addMembership(d, role) {
-          this.blur();           // avoid keeping focus on the button
-          _showBlank = false;
+  escape.escapeTest = /[&<>"']/;
+  escape.escapeReplace = /[&<>"']/g;
+  escape.replacements = {
+    '&': '&amp;',
+    '<': '&lt;',
+    '>': '&gt;',
+    '"': '&quot;',
+    "'": '&#39;'
+  };
 
-          var member = { id: _entityID, type: context.entity(_entityID).type, role: role };
+  escape.escapeTestNoEncode = /[<>"']|&(?!#?\w+;)/;
+  escape.escapeReplaceNoEncode = /[<>"']|&(?!#?\w+;)/g;
 
-          if (d.relation) {
-              context.perform(
-                  actionAddMember(d.relation.id, member),
-                  t('operations.add_member.annotation')
-              );
+  function unescape(html) {
+    // explicitly match decimal, hex, and named HTML entities
+    return html.replace(/&(#(?:\d+)|(?:#x[0-9A-Fa-f]+)|(?:\w+));?/ig, function(_, n) {
+      n = n.toLowerCase();
+      if (n === 'colon') return ':';
+      if (n.charAt(0) === '#') {
+        return n.charAt(1) === 'x'
+          ? String.fromCharCode(parseInt(n.substring(2), 16))
+          : String.fromCharCode(+n.substring(1));
+      }
+      return '';
+    });
+  }
 
-          } else {
-              var relation = osmRelation();
-              context.perform(
-                  actionAddEntity(relation),
-                  actionAddMember(relation.id, member),
-                  t('operations.add.annotation.relation')
-              );
+  function edit(regex, opt) {
+    regex = regex.source || regex;
+    opt = opt || '';
+    return {
+      replace: function(name, val) {
+        val = val.source || val;
+        val = val.replace(/(^|[^\[])\^/g, '$1');
+        regex = regex.replace(name, val);
+        return this;
+      },
+      getRegex: function() {
+        return new RegExp(regex, opt);
+      }
+    };
+  }
 
-              context.enter(modeSelect(context, [relation.id]).newFeature(true));
-          }
+  function cleanUrl(sanitize, base, href) {
+    if (sanitize) {
+      try {
+        var prot = decodeURIComponent(unescape(href))
+          .replace(/[^\w:]/g, '')
+          .toLowerCase();
+      } catch (e) {
+        return null;
+      }
+      if (prot.indexOf('javascript:') === 0 || prot.indexOf('vbscript:') === 0 || prot.indexOf('data:') === 0) {
+        return null;
+      }
+    }
+    if (base && !originIndependentUrl.test(href)) {
+      href = resolveUrl(base, href);
+    }
+    try {
+      href = encodeURI(href).replace(/%25/g, '%');
+    } catch (e) {
+      return null;
+    }
+    return href;
+  }
+
+  function resolveUrl(base, href) {
+    if (!baseUrls[' ' + base]) {
+      // we can ignore everything in base after the last slash of its path component,
+      // but we might need to add _that_
+      // https://tools.ietf.org/html/rfc3986#section-3
+      if (/^[^:]+:\/*[^/]*$/.test(base)) {
+        baseUrls[' ' + base] = base + '/';
+      } else {
+        baseUrls[' ' + base] = rtrim(base, '/', true);
       }
+    }
+    base = baseUrls[' ' + base];
+
+    if (href.slice(0, 2) === '//') {
+      return base.replace(/:[\s\S]*/, ':') + href;
+    } else if (href.charAt(0) === '/') {
+      return base.replace(/(:\/*[^/]*)[\s\S]*/, '$1') + href;
+    } else {
+      return base + href;
+    }
+  }
+  var baseUrls = {};
+  var originIndependentUrl = /^$|^[a-z][a-z0-9+.-]*:|^[?#]/i;
 
+  function noop() {}
+  noop.exec = noop;
 
-      function deleteMembership(d) {
-          this.blur();           // avoid keeping focus on the button
-          if (d === 0) return;   // called on newrow (shoudn't happen)
+  function merge(obj) {
+    var i = 1,
+        target,
+        key;
 
-          context.perform(
-              actionDeleteMember(d.relation.id, d.index),
-              t('operations.delete_member.annotation')
-          );
+    for (; i < arguments.length; i++) {
+      target = arguments[i];
+      for (key in target) {
+        if (Object.prototype.hasOwnProperty.call(target, key)) {
+          obj[key] = target[key];
+        }
       }
+    }
 
+    return obj;
+  }
 
-      function fetchNearbyRelations(q, callback) {
-          var newRelation = { relation: null, value: t('inspector.new_relation') };
-          var result = [];
-          var graph = context.graph();
+  function splitCells(tableRow, count) {
+    // ensure that every cell-delimiting pipe has a space
+    // before it to distinguish it from an escaped pipe
+    var row = tableRow.replace(/\|/g, function (match, offset, str) {
+          var escaped = false,
+              curr = offset;
+          while (--curr >= 0 && str[curr] === '\\') escaped = !escaped;
+          if (escaped) {
+            // odd number of slashes means | is escaped
+            // so we leave it alone
+            return '|';
+          } else {
+            // add space before unescaped |
+            return ' |';
+          }
+        }),
+        cells = row.split(/ \|/),
+        i = 0;
 
-          context.intersects(context.extent()).forEach(function(entity) {
-              if (entity.type !== 'relation' || entity.id === _entityID) return;
+    if (cells.length > count) {
+      cells.splice(count);
+    } else {
+      while (cells.length < count) cells.push('');
+    }
 
-              var matched = context.presets().match(entity, graph);
-              var presetName = (matched && matched.name()) || t('inspector.relation');
-              var entityName = utilDisplayName(entity) || '';
+    for (; i < cells.length; i++) {
+      // leading or trailing whitespace is ignored per the gfm spec
+      cells[i] = cells[i].trim().replace(/\\\|/g, '|');
+    }
+    return cells;
+  }
 
-              var value = presetName + ' ' + entityName;
-              if (q && value.toLowerCase().indexOf(q.toLowerCase()) === -1) return;
+  // Remove trailing 'c's. Equivalent to str.replace(/c*$/, '').
+  // /c*$/ is vulnerable to REDOS.
+  // invert: Remove suffix of non-c chars instead. Default falsey.
+  function rtrim(str, c, invert) {
+    if (str.length === 0) {
+      return '';
+    }
 
-              result.push({ relation: entity, value: value });
-          });
+    // Length of suffix matching the invert condition.
+    var suffLen = 0;
 
-          result.sort(function(a, b) {
-              return osmRelation.creationOrder(a.relation, b.relation);
-          });
+    // Step left until we fail to match the invert condition.
+    while (suffLen < str.length) {
+      var currChar = str.charAt(str.length - suffLen - 1);
+      if (currChar === c && !invert) {
+        suffLen++;
+      } else if (currChar !== c && invert) {
+        suffLen++;
+      } else {
+        break;
+      }
+    }
 
-          // Dedupe identical names by appending relation id - see #2891
-          var dupeGroups = filter(
-              groupBy(result, 'value'),
-              function(v) { return v.length > 1; }
-          );
+    return str.substr(0, str.length - suffLen);
+  }
 
-          dupeGroups.forEach(function(group) {
-              group.forEach(function(obj) {
-                  obj.value += ' ' + obj.relation.id;
-              });
-          });
+  /**
+   * Marked
+   */
 
-          result.forEach(function(obj) {
-              obj.title = obj.value;
-          });
+  function marked(src, opt, callback) {
+    // throw error in case of non string input
+    if (typeof src === 'undefined' || src === null) {
+      throw new Error('marked(): input parameter is undefined or null');
+    }
+    if (typeof src !== 'string') {
+      throw new Error('marked(): input parameter is of type '
+        + Object.prototype.toString.call(src) + ', string expected');
+    }
 
-          result.unshift(newRelation);
-          callback(result);
+    if (callback || typeof opt === 'function') {
+      if (!callback) {
+        callback = opt;
+        opt = null;
       }
 
+      opt = merge({}, marked.defaults, opt || {});
 
-      function rawMembershipEditor(selection$$1) {
-          var entity = context.entity(_entityID);
-          var parents = context.graph().parentRelations(entity);
-          var memberships = [];
-
-          parents.slice(0, 1000).forEach(function(relation) {
-              relation.members.forEach(function(member, index) {
-                  if (member.id === entity.id) {
-                      memberships.push({ relation: relation, member: member, index: index });
-                  }
-              });
-          });
-
-          var gt = parents.length > 1000 ? '>' : '';
-          selection$$1.call(uiDisclosure(context, 'raw_membership_editor', true)
-              .title(t('inspector.all_relations') + ' (' + gt + memberships.length + ')')
-              .expanded(true)
-              .updatePreference(false)
-              .on('toggled', function(expanded) {
-                  if (expanded) { selection$$1.node().parentNode.scrollTop += 200; }
-              })
-              .content(content)
-          );
+      var highlight = opt.highlight,
+          tokens,
+          pending,
+          i = 0;
 
+      try {
+        tokens = Lexer.lex(src, opt);
+      } catch (e) {
+        return callback(e);
+      }
 
-          function content(selection$$1) {
-              var list = selection$$1.selectAll('.member-list')
-                  .data([0]);
+      pending = tokens.length;
 
-              list = list.enter()
-                  .append('ul')
-                  .attr('class', 'member-list')
-                  .merge(list);
+      var done = function(err) {
+        if (err) {
+          opt.highlight = highlight;
+          return callback(err);
+        }
 
+        var out;
 
-              var items = list.selectAll('li.member-row-normal')
-                  .data(memberships, function(d) {
-                      return osmEntity$$1.key(d.relation) + ',' + d.index;
-                  });
+        try {
+          out = Parser.parse(tokens, opt);
+        } catch (e) {
+          err = e;
+        }
 
-              items.exit()
-                  .each(unbind)
-                  .remove();
+        opt.highlight = highlight;
 
-              // Enter
-              var itemsEnter = items.enter()
-                  .append('li')
-                  .attr('class', 'member-row member-row-normal form-field');
+        return err
+          ? callback(err)
+          : callback(null, out);
+      };
 
-              itemsEnter.each(function(d){
-                  // highlight the relation in the map while hovering on the list item
-                  select(this)
-                      .on('mouseover', function() {
-                          utilHighlightEntity(d.relation.id, true, context);
-                      })
-                      .on('mouseout', function() {
-                          utilHighlightEntity(d.relation.id, false, context);
-                      });
-              });
+      if (!highlight || highlight.length < 3) {
+        return done();
+      }
 
-              var labelEnter = itemsEnter
-                  .append('label')
-                  .attr('class', 'form-field-label')
-                  .append('span')
-                  .attr('class', 'label-text')
-                  .append('a')
-                  .attr('href', '#')
-                  .on('click', selectRelation);
+      delete opt.highlight;
 
-              labelEnter
-                  .append('span')
-                  .attr('class', 'member-entity-type')
-                  .text(function(d) {
-                      var matched = context.presets().match(d.relation, context.graph());
-                      return (matched && matched.name()) || t('inspector.relation');
-                  });
+      if (!pending) return done();
 
-              labelEnter
-                  .append('span')
-                  .attr('class', 'member-entity-name')
-                  .text(function(d) { return utilDisplayName(d.relation); });
+      for (; i < tokens.length; i++) {
+        (function(token) {
+          if (token.type !== 'code') {
+            return --pending || done();
+          }
+          return highlight(token.text, token.lang, function(err, code) {
+            if (err) return done(err);
+            if (code == null || code === token.text) {
+              return --pending || done();
+            }
+            token.text = code;
+            token.escaped = true;
+            --pending || done();
+          });
+        })(tokens[i]);
+      }
 
-              var wrapEnter = itemsEnter
-                  .append('div')
-                  .attr('class', 'form-field-input-wrap form-field-input-member');
+      return;
+    }
+    try {
+      if (opt) opt = merge({}, marked.defaults, opt);
+      return Parser.parse(Lexer.lex(src, opt), opt);
+    } catch (e) {
+      e.message += '\nPlease report this to https://github.com/markedjs/marked.';
+      if ((opt || marked.defaults).silent) {
+        return '<p>An error occurred:</p><pre>'
+          + escape(e.message + '', true)
+          + '</pre>';
+      }
+      throw e;
+    }
+  }
 
-              wrapEnter
-                  .append('input')
-                  .attr('class', 'member-role')
-                  .property('type', 'text')
-                  .attr('maxlength', 255)
-                  .attr('placeholder', t('inspector.role'))
-                  .call(utilNoAuto)
-                  .property('value', function(d) { return d.member.role; })
-                  .on('blur', changeRole)
-                  .on('change', changeRole);
+  /**
+   * Options
+   */
 
-              wrapEnter
-                  .append('button')
-                  .attr('tabindex', -1)
-                  .attr('class', 'remove form-field-button member-delete')
-                  .call(svgIcon('#iD-operation-delete'))
-                  .on('click', deleteMembership);
+  marked.options =
+  marked.setOptions = function(opt) {
+    merge(marked.defaults, opt);
+    return marked;
+  };
 
-              if (taginfo) {
-                  wrapEnter.each(bindTypeahead);
-              }
+  marked.getDefaults = function () {
+    return {
+      baseUrl: null,
+      breaks: false,
+      gfm: true,
+      headerIds: true,
+      headerPrefix: '',
+      highlight: null,
+      langPrefix: 'language-',
+      mangle: true,
+      pedantic: false,
+      renderer: new Renderer(),
+      sanitize: false,
+      sanitizer: null,
+      silent: false,
+      smartLists: false,
+      smartypants: false,
+      tables: true,
+      xhtml: false
+    };
+  };
 
+  marked.defaults = marked.getDefaults();
 
-              var newMembership = list.selectAll('.member-row-new')
-                  .data(_showBlank ? [0] : []);
+  /**
+   * Expose
+   */
 
-              // Exit
-              newMembership.exit()
-                  .remove();
+  marked.Parser = Parser;
+  marked.parser = Parser.parse;
 
-              // Enter
-              var newMembershipEnter = newMembership.enter()
-                  .append('li')
-                  .attr('class', 'member-row member-row-new form-field');
+  marked.Renderer = Renderer;
+  marked.TextRenderer = TextRenderer;
 
-              newMembershipEnter
-                  .append('label')
-                  .attr('class', 'form-field-label')
-                  .append('input')
-                  .attr('placeholder', t('inspector.choose_relation'))
-                  .attr('type', 'text')
-                  .attr('class', 'member-entity-input')
-                  .call(utilNoAuto);
+  marked.Lexer = Lexer;
+  marked.lexer = Lexer.lex;
 
-              var newWrapEnter = newMembershipEnter
-                  .append('div')
-                  .attr('class', 'form-field-input-wrap form-field-input-member');
+  marked.InlineLexer = InlineLexer;
+  marked.inlineLexer = InlineLexer.output;
 
-              newWrapEnter
-                  .append('input')
-                  .attr('class', 'member-role')
-                  .property('type', 'text')
-                  .attr('maxlength', 255)
-                  .attr('placeholder', t('inspector.role'))
-                  .call(utilNoAuto);
+  marked.Slugger = Slugger;
 
-              newWrapEnter
-                  .append('button')
-                  .attr('tabindex', -1)
-                  .attr('class', 'remove form-field-button member-delete')
-                  .call(svgIcon('#iD-operation-delete'))
-                  .on('click', function() {
-                      list.selectAll('.member-row-new')
-                          .remove();
-                  });
+  marked.parse = marked;
 
-              // Update
-              newMembership = newMembership
-                  .merge(newMembershipEnter);
+  {
+    module.exports = marked;
+  }
+  })(commonjsGlobal || (typeof window !== 'undefined' ? window : commonjsGlobal));
+  });
 
-              newMembership.selectAll('.member-entity-input')
-                  .on('blur', cancelEntity)   // if it wasn't accepted normally, cancel it
-                  .call(nearbyCombo
-                      .on('accept', acceptEntity)
-                      .on('cancel', cancelEntity)
-                  );
+  function pointBox(loc, context) {
+      var rect = context.surfaceRect();
+      var point = context.curtainProjection(loc);
+      return {
+          left: point[0] + rect.left - 40,
+          top: point[1] + rect.top - 60,
+          width: 80,
+          height: 90
+      };
+  }
 
 
-              // Container for the Add button
-              var addRow = selection$$1.selectAll('.add-row')
-                  .data([0]);
+  function pad$1(locOrBox, padding, context) {
+      var box;
+      if (locOrBox instanceof Array) {
+          var rect = context.surfaceRect();
+          var point = context.curtainProjection(locOrBox);
+          box = {
+              left: point[0] + rect.left,
+              top: point[1] + rect.top
+          };
+      } else {
+          box = locOrBox;
+      }
 
-              // enter
-              var addRowEnter = addRow.enter()
-                  .append('div')
-                  .attr('class', 'add-row');
+      return {
+          left: box.left - padding,
+          top: box.top - padding,
+          width: (box.width || 0) + 2 * padding,
+          height: (box.width || 0) + 2 * padding
+      };
+  }
 
-              addRowEnter
-                  .append('button')
-                  .attr('class', 'add-relation')
-                  .call(svgIcon('#iD-icon-plus', 'light'));
 
-              addRowEnter
-                  .append('div')
-                  .attr('class', 'space-value');   // preserve space
+  function icon(name, svgklass, useklass) {
+      return '<svg class="icon ' + (svgklass || '') + '">' +
+           '<use xlink:href="' + name + '"' +
+           (useklass ? ' class="' + useklass + '"' : '') + '></use></svg>';
+  }
 
-              addRowEnter
-                  .append('div')
-                  .attr('class', 'space-buttons');  // preserve space
 
-              // update
-              addRow = addRow
-                  .merge(addRowEnter);
+  function slugify(text) {
+      return text.toString().toLowerCase()
+          .replace(/\s+/g, '-')           // Replace spaces with -
+          .replace(/[^\w\-]+/g, '')       // Remove all non-word chars
+          .replace(/\-\-+/g, '-')         // Replace multiple - with single -
+          .replace(/^-+/, '')             // Trim - from start of text
+          .replace(/-+$/, '');            // Trim - from end of text
+  }
 
-              addRow.select('.add-relation')
-                  .on('click', function() {
-                      _showBlank = true;
-                      content(selection$$1);
-                      list.selectAll('.member-entity-input').node().focus();
-                  });
 
+  // console warning for missing walkthrough names
+  var missingStrings = {};
+  function checkKey(key, text) {
+      if (t(key, { default: undefined}) === undefined) {
+          if (missingStrings.hasOwnProperty(key)) return;  // warn once
+          missingStrings[key] = text;
+          var missing = key + ': ' + text;
+          if (typeof console !== 'undefined') console.log(missing); // eslint-disable-line
+      }
+  }
 
-              function acceptEntity(d) {
-                  if (!d) {
-                      cancelEntity();
-                      return;
-                  }
-                  var role = list.selectAll('.member-row-new .member-role').property('value');
-                  addMembership(d, role);
-              }
 
+  function localize(obj) {
+      var key;
 
-              function cancelEntity() {
-                  var input = newMembership.selectAll('.member-entity-input');
-                  input.property('value', '');
-              }
+      // Assign name if entity has one..
+      var name = obj.tags && obj.tags.name;
+      if (name) {
+          key = 'intro.graph.name.' + slugify(name);
+          obj.tags.name = t(key, { default: name });
+          checkKey(key, name);
+      }
 
+      // Assign street name if entity has one..
+      var street = obj.tags && obj.tags['addr:street'];
+      if (street) {
+          key = 'intro.graph.name.' + slugify(street);
+          obj.tags['addr:street'] = t(key, { default: street });
+          checkKey(key, street);
 
-              function bindTypeahead(d) {
-                  var row = select(this);
-                  var role = row.selectAll('input.member-role');
-                  var origValue = role.property('value');
+          // Add address details common across walkthrough..
+          var addrTags = [
+              'block_number', 'city', 'county', 'district', 'hamlet', 'neighbourhood',
+              'postcode', 'province', 'quarter', 'state', 'subdistrict', 'suburb'
+          ];
+          addrTags.forEach(function(k) {
+              var key = 'intro.graph.' + k;
+              var tag = 'addr:' + k;
+              var val = obj.tags && obj.tags[tag];
+              var str = t(key, { default: val });
 
-                  function sort(value, data) {
-                      var sameletter = [];
-                      var other = [];
-                      for (var i = 0; i < data.length; i++) {
-                          if (data[i].value.substring(0, value.length) === value) {
-                              sameletter.push(data[i]);
-                          } else {
-                              other.push(data[i]);
-                          }
-                      }
-                      return sameletter.concat(other);
+              if (str) {
+                  if (str.match(/^<.*>$/) !== null) {
+                      delete obj.tags[tag];
+                  } else {
+                      obj.tags[tag] = str;
                   }
-
-                  role.call(uiCombobox(context, 'member-role')
-                      .fetcher(function(role, callback) {
-                          var rtype = d.relation.tags.type;
-                          taginfo.roles({
-                              debounce: true,
-                              rtype: rtype || '',
-                              geometry: context.geometry(_entityID),
-                              query: role
-                          }, function(err, data) {
-                              if (!err) callback(sort(role, data));
-                          });
-                      })
-                      .on('cancel', function() {
-                          role.property('value', origValue);
-                      })
-                  );
               }
+          });
+      }
 
+      return obj;
+  }
 
-              function unbind() {
-                  var row = select(this);
 
-                  row.selectAll('input.member-role')
-                      .call(uiCombobox.off);
-              }
+  // Used to detect squareness.. some duplicataion of code from actionOrthogonalize.
+  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
+      var lowerBound = Math.cos((90 - threshold) * Math.PI / 180);  // near right
+      var upperBound = Math.cos(threshold * Math.PI / 180);         // near straight
+      var mag;
+
+      for (var i = 0; i < points.length; i++) {
+          mag = Math.abs(normalizedDotProduct(i, points));
+          if (mag > lowerBound && mag < upperBound) {
+              return false;
           }
       }
 
+      return true;
 
-      rawMembershipEditor.entityID = function(val) {
-          if (!arguments.length) return _entityID;
-          _entityID = val;
-          _showBlank = false;
-          return rawMembershipEditor;
-      };
 
+      function normalizedDotProduct(i, points) {
+          var a = points[(i - 1 + points.length) % points.length];
+          var b = points[i];
+          var c = points[(i + 1) % points.length];
+          var p = subtractPoints(a, b);
+          var q = subtractPoints(c, b);
 
-      return rawMembershipEditor;
-  }
+          p = normalizePoint(p);
+          q = normalizePoint(q);
 
-  function uiEntityEditor(context) {
-      var dispatch$$1 = dispatch('choose');
-      var _state = 'select';
-      var _coalesceChanges = false;
-      var _modified = false;
-      var _base;
-      var _entityID;
-      var _activePreset;
-      var _tagReference;
+          return p[0] * q[0] + p[1] * q[1];
 
-      var quickLinks = uiQuickLinks();
-      var presetEditor = uiPresetEditor(context).on('change', changeTags);
-      var rawTagEditor = uiRawTagEditor$$1(context).on('change', changeTags);
-      var rawMemberEditor = uiRawMemberEditor$$1(context);
-      var rawMembershipEditor = uiRawMembershipEditor$$1(context);
 
-      function entityEditor(selection$$1) {
-          var entity = context.entity(_entityID);
-          var tags = clone(entity.tags);
+          function subtractPoints(a, b) {
+              return [a[0] - b[0], a[1] - b[1]];
+          }
 
-          // Header
-          var header = selection$$1.selectAll('.header')
-              .data([0]);
+          function normalizePoint(point) {
+              var vector = [0, 0];
+              var length = Math.sqrt(point[0] * point[0] + point[1] * point[1]);
+              if (length !== 0) {
+                  vector[0] = point[0] / length;
+                  vector[1] = point[1] / length;
+              }
+              return vector;
+          }
+      }
+  }
 
-          // Enter
-          var headerEnter = header.enter()
-              .append('div')
-              .attr('class', 'header fillL cf');
 
-          headerEnter
-              .append('button')
-              .attr('class', 'fl preset-reset preset-choose')
-              .call(svgIcon((textDirection === 'rtl') ? '#iD-icon-forward' : '#iD-icon-backward'));
+  function selectMenuItem(operation) {
+      var selector = '.edit-menu .edit-menu-item-' + operation +
+          ', .radial-menu .radial-menu-item-' + operation;
+      return select(selector);
+  }
 
-          headerEnter
-              .append('button')
-              .attr('class', 'fr preset-close')
-              .on('click', function() { context.enter(modeBrowse(context)); })
-              .call(svgIcon(_modified ? '#iD-icon-apply' : '#iD-icon-close'));
 
-          headerEnter
-              .append('h3')
-              .text(t('inspector.edit'));
+  function transitionTime(point1, point2) {
+      var distance = geoSphericalDistance(point1, point2);
+      if (distance === 0)
+          return 0;
+      else if (distance < 80)
+          return 500;
+      else
+          return 1000;
+  }
 
-          // Update
-          header = header
-              .merge(headerEnter);
+  var dataIntroGraph = {n1:{id:"n1",loc:[-85.631039,41.948829]},n10:{id:"n10",loc:[-85.634733,41.941588]},n100:{id:"n100",loc:[-85.637395,41.942252]},n1000:{id:"n1000",loc:[-85.632699,41.944763]},n1001:{id:"n1001",loc:[-85.632685,41.944763]},n1002:{id:"n1002",loc:[-85.632673,41.944755]},n1003:{id:"n1003",loc:[-85.632595,41.944682]},n1004:{id:"n1004",loc:[-85.632576,41.944673]},n1005:{id:"n1005",loc:[-85.632551,41.944667]},n1006:{id:"n1006",loc:[-85.63253,41.944667]},n1007:{id:"n1007",loc:[-85.632502,41.944669]},n1008:{id:"n1008",loc:[-85.632483,41.944677]},n1009:{id:"n1009",loc:[-85.632383,41.944731]},n101:{id:"n101",loc:[-85.637357,41.942252]},n1010:{id:"n1010",loc:[-85.63349,41.944976],tags:{"addr:city":"Three Rivers","addr:housenumber":"31","addr:postcode":"49093","addr:state":"MI","addr:street":"Main Street",name:"Sherwin-Williams",shop:"paint"}},n1011:{id:"n1011",loc:[-85.633548,41.945034],tags:{"addr:city":"Three Rivers","addr:housenumber":"33","addr:postcode":"49093","addr:state":"MI","addr:street":"Main Street",name:"Unique Jewelry",shop:"jewelry"}},n1012:{id:"n1012",loc:[-85.633683,41.945129],tags:{"addr:city":"Three Rivers","addr:housenumber":"37","addr:postcode":"49093","addr:state":"MI","addr:street":"Main Street",name:"World Fare",shop:"gift"}},n1013:{id:"n1013",loc:[-85.634563,41.945469],tags:{"addr:city":"Three Rivers","addr:housenumber":"62","addr:postcode":"49093","addr:state":"MI","addr:street":"Main Street",name:"Golden Finch Framing",shop:"frame"}},n1014:{id:"n1014",loc:[-85.634469,41.945379],tags:{"addr:city":"Three Rivers","addr:housenumber":"58","addr:postcode":"49093","addr:state":"MI","addr:street":"Main Street",name:"Dollar Tree",shop:"second_hand"}},n1015:{id:"n1015",loc:[-85.634227,41.945159],tags:{"addr:city":"Three Rivers","addr:housenumber":"48","addr:postcode":"49093","addr:state":"MI","addr:street":"Main Street",amenity:"theatre",name:"Riviera Theatre"}},n1016:{id:"n1016",loc:[-85.634057,41.945012],tags:{"addr:city":"Three Rivers","addr:housenumber":"42","addr:postcode":"49093","addr:state":"MI","addr:street":"Main Street",name:"River City Appliance",shop:"appliance"}},n1017:{id:"n1017",loc:[-85.633879,41.945325],tags:{"addr:city":"Three Rivers","addr:housenumber":"45","addr:postcode":"49093","addr:state":"MI","addr:street":"Main Street",name:"Paparazzi Tattoo",shop:"tattoo"}},n1018:{id:"n1018",loc:[-85.634914,41.945839],tags:{"addr:city":"Three Rivers","addr:housenumber":"88","addr:postcode":"49093","addr:state":"MI","addr:street":"Main Street",amenity:"bank",name:"Southern Michigan Bank"}},n1019:{id:"n1019",loc:[-85.634514,41.946176]},n102:{id:"n102",loc:[-85.637357,41.942216]},n1020:{id:"n1020",loc:[-85.634087,41.946178]},n1021:{id:"n1021",loc:[-85.634357,41.945805]},n1022:{id:"n1022",loc:[-85.634389,41.945788]},n1023:{id:"n1023",loc:[-85.634491,41.94581]},n1024:{id:"n1024",loc:[-85.634513,41.945853]},n1025:{id:"n1025",loc:[-85.634506,41.94583]},n1026:{id:"n1026",loc:[-85.634762,41.946056],tags:{crossing:"marked",highway:"crossing"}},n1027:{id:"n1027",loc:[-85.634767,41.946172]},n1028:{id:"n1028",loc:[-85.634622,41.946175],tags:{crossing:"marked",highway:"crossing"}},n1029:{id:"n1029",loc:[-85.640655,41.942057]},n103:{id:"n103",loc:[-85.637386,41.942054]},n1030:{id:"n1030",loc:[-85.640947,41.942057]},n1031:{id:"n1031",loc:[-85.640957,41.942593]},n1032:{id:"n1032",loc:[-85.630953,41.960873]},n1033:{id:"n1033",loc:[-85.632174,41.960679]},n1034:{id:"n1034",loc:[-85.638785,41.943066]},n1035:{id:"n1035",loc:[-85.638853,41.943065]},n1036:{id:"n1036",loc:[-85.638855,41.943183]},n1037:{id:"n1037",loc:[-85.638552,41.943189]},n1038:{id:"n1038",loc:[-85.63855,41.943149]},n1039:{id:"n1039",loc:[-85.638638,41.943068]},n104:{id:"n104",loc:[-85.637387,41.942125]},n1040:{id:"n1040",loc:[-85.638638,41.943078]},n1041:{id:"n1041",loc:[-85.638813,41.943163]},n1042:{id:"n1042",loc:[-85.638684,41.943165]},n1043:{id:"n1043",loc:[-85.638682,41.943105]},n1044:{id:"n1044",loc:[-85.638706,41.943105]},n1045:{id:"n1045",loc:[-85.638707,41.943117]},n1046:{id:"n1046",loc:[-85.638812,41.943115]},n1047:{id:"n1047",loc:[-85.638769,41.943407]},n1048:{id:"n1048",loc:[-85.638549,41.943407]},n1049:{id:"n1049",loc:[-85.638567,41.943555]},n105:{id:"n105",loc:[-85.637319,41.942125]},n1050:{id:"n1050",loc:[-85.638426,41.943554]},n1051:{id:"n1051",loc:[-85.638427,41.94346]},n1052:{id:"n1052",loc:[-85.638568,41.943461]},n1053:{id:"n1053",loc:[-85.639264,41.943415]},n1054:{id:"n1054",loc:[-85.639082,41.943417]},n1055:{id:"n1055",loc:[-85.63908,41.943331]},n1056:{id:"n1056",loc:[-85.639136,41.94333]},n1057:{id:"n1057",loc:[-85.639158,41.943312]},n1058:{id:"n1058",loc:[-85.639188,41.943313]},n1059:{id:"n1059",loc:[-85.639211,41.943331]},n106:{id:"n106",loc:[-85.637319,41.942137]},n1060:{id:"n1060",loc:[-85.639262,41.943331]},n1061:{id:"n1061",loc:[-85.638986,41.943515]},n1062:{id:"n1062",loc:[-85.63888,41.943521]},n1063:{id:"n1063",loc:[-85.638871,41.943436]},n1064:{id:"n1064",loc:[-85.638958,41.943431]},n1065:{id:"n1065",loc:[-85.638979,41.943443]},n1066:{id:"n1066",loc:[-85.63926,41.943703]},n1067:{id:"n1067",loc:[-85.639152,41.943704]},n1068:{id:"n1068",loc:[-85.639152,41.943691]},n1069:{id:"n1069",loc:[-85.639063,41.943691]},n107:{id:"n107",loc:[-85.637259,41.942137]},n1070:{id:"n1070",loc:[-85.639062,41.943613]},n1071:{id:"n1071",loc:[-85.639259,41.943611]},n1072:{id:"n1072",loc:[-85.639117,41.943726]},n1073:{id:"n1073",loc:[-85.639118,41.943767]},n1074:{id:"n1074",loc:[-85.639051,41.943768]},n1075:{id:"n1075",loc:[-85.63905,41.943727]},n1076:{id:"n1076",loc:[-85.638627,41.943716]},n1077:{id:"n1077",loc:[-85.63863,41.943634]},n1078:{id:"n1078",loc:[-85.63844,41.943631]},n1079:{id:"n1079",loc:[-85.638437,41.943729]},n108:{id:"n108",loc:[-85.637259,41.942126]},n1080:{id:"n1080",loc:[-85.638533,41.94373]},n1081:{id:"n1081",loc:[-85.638534,41.943715]},n1082:{id:"n1082",loc:[-85.638678,41.943941]},n1083:{id:"n1083",loc:[-85.638522,41.943944]},n1084:{id:"n1084",loc:[-85.63852,41.943864]},n1085:{id:"n1085",loc:[-85.638676,41.943861]},n1086:{id:"n1086",loc:[-85.638663,41.944059]},n1087:{id:"n1087",loc:[-85.638513,41.944061]},n1088:{id:"n1088",loc:[-85.638511,41.943991]},n1089:{id:"n1089",loc:[-85.638661,41.943989]},n109:{id:"n109",loc:[-85.637193,41.942126]},n1090:{id:"n1090",loc:[-85.63865,41.944134]},n1091:{id:"n1091",loc:[-85.638429,41.944144]},n1092:{id:"n1092",loc:[-85.638426,41.944106]},n1093:{id:"n1093",loc:[-85.638476,41.944104]},n1094:{id:"n1094",loc:[-85.638475,41.94409]},n1095:{id:"n1095",loc:[-85.638594,41.944084]},n1096:{id:"n1096",loc:[-85.638595,41.944101]},n1097:{id:"n1097",loc:[-85.638647,41.944099]},n1098:{id:"n1098",loc:[-85.63829,41.944154]},n1099:{id:"n1099",loc:[-85.638558,41.944155]},n11:{id:"n11",loc:[-85.634602,41.941523]},n110:{id:"n110",loc:[-85.637192,41.942053]},n1100:{id:"n1100",loc:[-85.638558,41.944338]},n1101:{id:"n1101",loc:[-85.638851,41.944408]},n1102:{id:"n1102",loc:[-85.637771,41.943989]},n1103:{id:"n1103",loc:[-85.639345,41.943964]},n1104:{id:"n1104",loc:[-85.638515,41.94397]},n1105:{id:"n1105",loc:[-85.639256,41.943928]},n1106:{id:"n1106",loc:[-85.639157,41.943929]},n1107:{id:"n1107",loc:[-85.639156,41.9439]},n1108:{id:"n1108",loc:[-85.639118,41.9439]},n1109:{id:"n1109",loc:[-85.639116,41.94382]},n111:{id:"n111",loc:[-85.637248,41.942053]},n1110:{id:"n1110",loc:[-85.639202,41.943819]},n1111:{id:"n1111",loc:[-85.639202,41.943837]},n1112:{id:"n1112",loc:[-85.639293,41.943836]},n1113:{id:"n1113",loc:[-85.639295,41.943898]},n1114:{id:"n1114",loc:[-85.639255,41.943898]},n1115:{id:"n1115",loc:[-85.639296,41.944083]},n1116:{id:"n1116",loc:[-85.639144,41.944084]},n1117:{id:"n1117",loc:[-85.639143,41.944026]},n1118:{id:"n1118",loc:[-85.639162,41.944026]},n1119:{id:"n1119",loc:[-85.639162,41.944]},n112:{id:"n112",loc:[-85.637248,41.942042]},n1120:{id:"n1120",loc:[-85.639295,41.943999]},n1121:{id:"n1121",loc:[-85.639131,41.944139]},n1122:{id:"n1122",loc:[-85.63901,41.94414]},n1123:{id:"n1123",loc:[-85.63901,41.944076]},n1124:{id:"n1124",loc:[-85.63913,41.944075]},n1125:{id:"n1125",loc:[-85.639092,41.944155]},n1126:{id:"n1126",loc:[-85.639093,41.944308]},n1127:{id:"n1127",loc:[-85.639225,41.944308]},n1128:{id:"n1128",loc:[-85.639225,41.94429]},n1129:{id:"n1129",loc:[-85.639253,41.944289]},n113:{id:"n113",loc:[-85.637338,41.942041]},n1130:{id:"n1130",loc:[-85.639253,41.944269]},n1131:{id:"n1131",loc:[-85.639243,41.944269]},n1132:{id:"n1132",loc:[-85.639243,41.944229]},n1133:{id:"n1133",loc:[-85.639224,41.944229]},n1134:{id:"n1134",loc:[-85.639224,41.944196]},n1135:{id:"n1135",loc:[-85.639195,41.944196]},n1136:{id:"n1136",loc:[-85.639195,41.944155]},n1137:{id:"n1137",loc:[-85.639072,41.944154]},n1138:{id:"n1138",loc:[-85.638865,41.944154]},n1139:{id:"n1139",loc:[-85.638863,41.943967]},n114:{id:"n114",loc:[-85.637338,41.942055]},n1140:{id:"n1140",loc:[-85.6386,41.942698]},n1141:{id:"n1141",loc:[-85.639348,41.942698]},n1142:{id:"n1142",loc:[-85.639377,41.944984]},n1143:{id:"n1143",loc:[-85.63937,41.945013]},n1144:{id:"n1144",loc:[-85.639357,41.945033]},n1145:{id:"n1145",loc:[-85.639353,41.945053]},n1146:{id:"n1146",loc:[-85.639352,41.945084]},n1147:{id:"n1147",loc:[-85.638278,41.945516]},n1148:{id:"n1148",loc:[-85.637505,41.945801]},n1149:{id:"n1149",loc:[-85.637327,41.945857]},n115:{id:"n115",loc:[-85.637583,41.941943]},n1150:{id:"n1150",loc:[-85.637168,41.945899]},n1151:{id:"n1151",loc:[-85.637017,41.94593]},n1152:{id:"n1152",loc:[-85.637185,41.945938]},n1153:{id:"n1153",loc:[-85.63682,41.945963]},n1154:{id:"n1154",loc:[-85.636639,41.945984]},n1155:{id:"n1155",loc:[-85.636439,41.945999]},n1156:{id:"n1156",loc:[-85.635801,41.945999]},n1157:{id:"n1157",loc:[-85.635769,41.945908]},n1158:{id:"n1158",loc:[-85.635953,41.946154]},n1159:{id:"n1159",loc:[-85.635472,41.94598]},n116:{id:"n116",loc:[-85.637584,41.941983]},n1160:{id:"n1160",loc:[-85.635409,41.945981]},n1161:{id:"n1161",loc:[-85.635583,41.945987]},n1162:{id:"n1162",loc:[-85.636452,41.945805]},n1163:{id:"n1163",loc:[-85.636425,41.94582]},n1164:{id:"n1164",loc:[-85.636396,41.945817]},n1165:{id:"n1165",loc:[-85.636368,41.945797]},n1166:{id:"n1166",loc:[-85.636346,41.945767]},n1167:{id:"n1167",loc:[-85.636307,41.945745]},n1168:{id:"n1168",loc:[-85.636194,41.94565]},n1169:{id:"n1169",loc:[-85.636121,41.945579]},n117:{id:"n117",loc:[-85.63751,41.941983]},n1170:{id:"n1170",loc:[-85.635995,41.945432]},n1171:{id:"n1171",loc:[-85.637564,41.943538]},n1172:{id:"n1172",loc:[-85.63756,41.943505]},n1173:{id:"n1173",loc:[-85.637435,41.943489]},n1174:{id:"n1174",loc:[-85.637093,41.943556]},n1175:{id:"n1175",loc:[-85.634836,41.941574]},n1176:{id:"n1176",loc:[-85.634692,41.9415]},n1177:{id:"n1177",loc:[-85.634261,41.941337]},n1178:{id:"n1178",loc:[-85.634208,41.940962]},n1179:{id:"n1179",loc:[-85.635247,41.940968]},n118:{id:"n118",loc:[-85.637509,41.941944]},n1180:{id:"n1180",loc:[-85.63514,41.941205]},n1181:{id:"n1181",loc:[-85.634858,41.941511]},n1182:{id:"n1182",loc:[-85.630725,41.943465]},n1183:{id:"n1183",loc:[-85.632591,41.942826]},n1184:{id:"n1184",loc:[-85.634487,41.941928]},n1185:{id:"n1185",loc:[-85.634499,41.942056]},n1186:{id:"n1186",loc:[-85.63433,41.943102]},n1187:{id:"n1187",loc:[-85.634158,41.943151]},n1188:{id:"n1188",loc:[-85.634107,41.94305]},n1189:{id:"n1189",loc:[-85.634279,41.943002]},n119:{id:"n119",loc:[-85.637724,41.941973]},n1190:{id:"n1190",loc:[-85.634362,41.943762]},n1191:{id:"n1191",loc:[-85.634331,41.943731]},n1192:{id:"n1192",loc:[-85.634396,41.943695]},n1193:{id:"n1193",loc:[-85.634426,41.943726]},n1194:{id:"n1194",loc:[-85.621569,41.956021]},n1195:{id:"n1195",loc:[-85.621574,41.956164]},n1196:{id:"n1196",loc:[-85.621489,41.956165]},n1197:{id:"n1197",loc:[-85.621488,41.956136]},n1198:{id:"n1198",loc:[-85.621372,41.956139]},n1199:{id:"n1199",loc:[-85.621369,41.956049]},n12:{id:"n12",loc:[-85.63359,41.941093]},n120:{id:"n120",loc:[-85.637633,41.941973]},n1200:{id:"n1200",loc:[-85.621493,41.956047]},n1201:{id:"n1201",loc:[-85.621492,41.956022]},n1202:{id:"n1202",loc:[-85.619744,41.953192]},n1203:{id:"n1203",loc:[-85.619059,41.953902]},n1204:{id:"n1204",loc:[-85.623984,41.95469]},n1205:{id:"n1205",loc:[-85.630159,41.958208]},n1206:{id:"n1206",loc:[-85.63002,41.958208]},n1207:{id:"n1207",loc:[-85.630021,41.95814]},n1208:{id:"n1208",loc:[-85.63,41.95814]},n1209:{id:"n1209",loc:[-85.63,41.958043]},n121:{id:"n121",loc:[-85.637633,41.941853]},n1210:{id:"n1210",loc:[-85.630159,41.958043]},n1211:{id:"n1211",loc:[-85.630304,41.957566]},n1212:{id:"n1212",loc:[-85.630303,41.957684]},n1213:{id:"n1213",loc:[-85.630073,41.957683]},n1214:{id:"n1214",loc:[-85.630072,41.957721]},n1215:{id:"n1215",loc:[-85.629993,41.95772]},n1216:{id:"n1216",loc:[-85.629993,41.95768]},n1217:{id:"n1217",loc:[-85.629968,41.95768]},n1218:{id:"n1218",loc:[-85.629969,41.957588]},n1219:{id:"n1219",loc:[-85.630219,41.95759]},n122:{id:"n122",loc:[-85.637724,41.941853]},n1220:{id:"n1220",loc:[-85.630219,41.957566]},n1221:{id:"n1221",loc:[-85.630717,41.957744]},n1222:{id:"n1222",loc:[-85.630596,41.957745]},n1223:{id:"n1223",loc:[-85.630598,41.957553]},n1224:{id:"n1224",loc:[-85.630717,41.957555]},n1225:{id:"n1225",loc:[-85.630609,41.957745]},n1226:{id:"n1226",loc:[-85.63061,41.957789]},n1227:{id:"n1227",loc:[-85.630327,41.957791]},n1228:{id:"n1228",loc:[-85.630324,41.95752]},n1229:{id:"n1229",loc:[-85.630325,41.95756]},n123:{id:"n123",loc:[-85.637773,41.941988]},n1230:{id:"n1230",loc:[-85.63057,41.95756]},n1231:{id:"n1231",loc:[-85.63069,41.958016]},n1232:{id:"n1232",loc:[-85.630586,41.958017]},n1233:{id:"n1233",loc:[-85.630584,41.957956]},n1234:{id:"n1234",loc:[-85.630614,41.957956]},n1235:{id:"n1235",loc:[-85.630611,41.957835]},n1236:{id:"n1236",loc:[-85.630737,41.957833]},n1237:{id:"n1237",loc:[-85.630739,41.957921]},n1238:{id:"n1238",loc:[-85.630688,41.957922]},n1239:{id:"n1239",loc:[-85.630719,41.958291]},n124:{id:"n124",loc:[-85.637773,41.942046]},n1240:{id:"n1240",loc:[-85.630592,41.958291]},n1241:{id:"n1241",loc:[-85.630593,41.958108]},n1242:{id:"n1242",loc:[-85.630701,41.958109]},n1243:{id:"n1243",loc:[-85.6307,41.958173]},n1244:{id:"n1244",loc:[-85.630711,41.958173]},n1245:{id:"n1245",loc:[-85.630711,41.958233]},n1246:{id:"n1246",loc:[-85.630719,41.958233]},n1247:{id:"n1247",loc:[-85.630523,41.958329]},n1248:{id:"n1248",loc:[-85.630388,41.958329]},n1249:{id:"n1249",loc:[-85.630387,41.958262]},n125:{id:"n125",loc:[-85.637693,41.942047]},n1250:{id:"n1250",loc:[-85.630523,41.958261]},n1251:{id:"n1251",loc:[-85.63072,41.958636]},n1252:{id:"n1252",loc:[-85.630721,41.958709]},n1253:{id:"n1253",loc:[-85.630503,41.958712]},n1254:{id:"n1254",loc:[-85.630498,41.958511]},n1255:{id:"n1255",loc:[-85.630635,41.95851]},n1256:{id:"n1256",loc:[-85.630638,41.958636]},n1257:{id:"n1257",loc:[-85.630437,41.958822]},n1258:{id:"n1258",loc:[-85.630437,41.958849]},n1259:{id:"n1259",loc:[-85.630393,41.958849]},n126:{id:"n126",loc:[-85.637692,41.941988]},n1260:{id:"n1260",loc:[-85.630393,41.958822]},n1261:{id:"n1261",loc:[-85.630605,41.959102]},n1262:{id:"n1262",loc:[-85.63049,41.959104]},n1263:{id:"n1263",loc:[-85.630487,41.958996]},n1264:{id:"n1264",loc:[-85.630462,41.958996]},n1265:{id:"n1265",loc:[-85.63046,41.958922]},n1266:{id:"n1266",loc:[-85.630562,41.958921]},n1267:{id:"n1267",loc:[-85.630564,41.958992]},n1268:{id:"n1268",loc:[-85.630602,41.958992]},n1269:{id:"n1269",loc:[-85.630126,41.957096]},n127:{id:"n127",loc:[-85.637604,41.941994]},n1270:{id:"n1270",loc:[-85.630129,41.957283]},n1271:{id:"n1271",loc:[-85.629993,41.957284]},n1272:{id:"n1272",loc:[-85.629992,41.957216]},n1273:{id:"n1273",loc:[-85.630015,41.957215]},n1274:{id:"n1274",loc:[-85.630013,41.957097]},n1275:{id:"n1275",loc:[-85.630211,41.956592]},n1276:{id:"n1276",loc:[-85.630211,41.956676]},n1277:{id:"n1277",loc:[-85.630162,41.956676]},n1278:{id:"n1278",loc:[-85.630162,41.95676]},n1279:{id:"n1279",loc:[-85.630037,41.956761]},n128:{id:"n128",loc:[-85.637604,41.942057]},n1280:{id:"n1280",loc:[-85.630037,41.956592]},n1281:{id:"n1281",loc:[-85.630309,41.95653]},n1282:{id:"n1282",loc:[-85.630326,41.957065]},n1283:{id:"n1283",loc:[-85.630118,41.957065]},n1284:{id:"n1284",loc:[-85.630119,41.957096]},n1285:{id:"n1285",loc:[-85.63067,41.957307]},n1286:{id:"n1286",loc:[-85.630536,41.957308]},n1287:{id:"n1287",loc:[-85.630533,41.957111]},n1288:{id:"n1288",loc:[-85.630667,41.95711]},n1289:{id:"n1289",loc:[-85.630676,41.956808]},n129:{id:"n129",loc:[-85.63748,41.942057]},n1290:{id:"n1290",loc:[-85.630551,41.956808]},n1291:{id:"n1291",loc:[-85.630552,41.956982]},n1292:{id:"n1292",loc:[-85.63059,41.956982]},n1293:{id:"n1293",loc:[-85.63059,41.957001]},n1294:{id:"n1294",loc:[-85.630692,41.957001]},n1295:{id:"n1295",loc:[-85.630692,41.956936]},n1296:{id:"n1296",loc:[-85.630676,41.956936]},n1297:{id:"n1297",loc:[-85.630496,41.956889]},n1298:{id:"n1298",loc:[-85.630501,41.956947]},n1299:{id:"n1299",loc:[-85.630377,41.956953]},n13:{id:"n13",loc:[-85.633643,41.941143]},n130:{id:"n130",loc:[-85.63748,41.941994]},n1300:{id:"n1300",loc:[-85.630359,41.956938]},n1301:{id:"n1301",loc:[-85.630359,41.956912]},n1302:{id:"n1302",loc:[-85.63038,41.956894]},n1303:{id:"n1303",loc:[-85.630679,41.956747]},n1304:{id:"n1304",loc:[-85.630572,41.956748]},n1305:{id:"n1305",loc:[-85.63057,41.956668]},n1306:{id:"n1306",loc:[-85.630501,41.956669]},n1307:{id:"n1307",loc:[-85.630499,41.95659]},n1308:{id:"n1308",loc:[-85.630565,41.956589]},n1309:{id:"n1309",loc:[-85.630564,41.956541]},n131:{id:"n131",loc:[-85.637431,41.941832]},n1310:{id:"n1310",loc:[-85.630686,41.956539]},n1311:{id:"n1311",loc:[-85.630688,41.956631]},n1312:{id:"n1312",loc:[-85.630676,41.956631]},n1313:{id:"n1313",loc:[-85.630686,41.956487]},n1314:{id:"n1314",loc:[-85.63059,41.956487]},n1315:{id:"n1315",loc:[-85.63059,41.956396]},n1316:{id:"n1316",loc:[-85.630686,41.956396]},n1317:{id:"n1317",loc:[-85.630643,41.9563]},n1318:{id:"n1318",loc:[-85.630548,41.956301]},n1319:{id:"n1319",loc:[-85.630545,41.956217]},n132:{id:"n132",loc:[-85.637432,41.94189]},n1320:{id:"n1320",loc:[-85.630529,41.956214]},n1321:{id:"n1321",loc:[-85.630521,41.956202]},n1322:{id:"n1322",loc:[-85.63052,41.95618]},n1323:{id:"n1323",loc:[-85.630527,41.956169]},n1324:{id:"n1324",loc:[-85.630544,41.956163]},n1325:{id:"n1325",loc:[-85.630543,41.956094]},n1326:{id:"n1326",loc:[-85.630641,41.956093]},n1327:{id:"n1327",loc:[-85.630642,41.956134]},n1328:{id:"n1328",loc:[-85.630656,41.956134]},n1329:{id:"n1329",loc:[-85.630657,41.956252]},n133:{id:"n133",loc:[-85.637412,41.94189]},n1330:{id:"n1330",loc:[-85.630643,41.956252]},n1331:{id:"n1331",loc:[-85.630409,41.956044]},n1332:{id:"n1332",loc:[-85.630409,41.956075]},n1333:{id:"n1333",loc:[-85.630195,41.956078]},n1334:{id:"n1334",loc:[-85.630195,41.9561]},n1335:{id:"n1335",loc:[-85.630088,41.956101]},n1336:{id:"n1336",loc:[-85.630087,41.956048]},n1337:{id:"n1337",loc:[-85.630345,41.956114]},n1338:{id:"n1338",loc:[-85.630328,41.956113]},n1339:{id:"n1339",loc:[-85.63034,41.956189]},n134:{id:"n134",loc:[-85.637413,41.941938]},n1340:{id:"n1340",loc:[-85.630355,41.956185]},n1341:{id:"n1341",loc:[-85.630311,41.956117]},n1342:{id:"n1342",loc:[-85.630297,41.956125]},n1343:{id:"n1343",loc:[-85.630287,41.956136]},n1344:{id:"n1344",loc:[-85.630283,41.956149]},n1345:{id:"n1345",loc:[-85.630285,41.956162]},n1346:{id:"n1346",loc:[-85.630293,41.956174]},n1347:{id:"n1347",loc:[-85.630306,41.956183]},n1348:{id:"n1348",loc:[-85.630322,41.956188]},n1349:{id:"n1349",loc:[-85.630368,41.956179]},n135:{id:"n135",loc:[-85.637342,41.941939]},n1350:{id:"n1350",loc:[-85.630378,41.95617]},n1351:{id:"n1351",loc:[-85.630384,41.956159]},n1352:{id:"n1352",loc:[-85.630385,41.956147]},n1353:{id:"n1353",loc:[-85.630381,41.956136]},n1354:{id:"n1354",loc:[-85.630372,41.956126]},n1355:{id:"n1355",loc:[-85.63036,41.956118]},n1356:{id:"n1356",loc:[-85.630776,41.956041]},n1357:{id:"n1357",loc:[-85.630195,41.956036]},n1358:{id:"n1358",loc:[-85.630137,41.956037]},n1359:{id:"n1359",loc:[-85.630136,41.956006]},n136:{id:"n136",loc:[-85.637342,41.941914]},n1360:{id:"n1360",loc:[-85.630194,41.956005]},n1361:{id:"n1361",loc:[-85.629864,41.956039]},n1362:{id:"n1362",loc:[-85.629864,41.955862]},n1363:{id:"n1363",loc:[-85.629541,41.958291]},n1364:{id:"n1364",loc:[-85.629419,41.958292]},n1365:{id:"n1365",loc:[-85.629417,41.958168]},n1366:{id:"n1366",loc:[-85.629445,41.958168]},n1367:{id:"n1367",loc:[-85.629444,41.958109]},n1368:{id:"n1368",loc:[-85.629537,41.958108]},n1369:{id:"n1369",loc:[-85.629351,41.958136]},n137:{id:"n137",loc:[-85.637212,41.941916]},n1370:{id:"n1370",loc:[-85.629352,41.958202]},n1371:{id:"n1371",loc:[-85.629365,41.958202]},n1372:{id:"n1372",loc:[-85.629365,41.958223]},n1373:{id:"n1373",loc:[-85.629291,41.958224]},n1374:{id:"n1374",loc:[-85.62929,41.958137]},n1375:{id:"n1375",loc:[-85.629443,41.958073]},n1376:{id:"n1376",loc:[-85.629252,41.958075]},n1377:{id:"n1377",loc:[-85.629253,41.95827]},n1378:{id:"n1378",loc:[-85.629566,41.957585]},n1379:{id:"n1379",loc:[-85.629566,41.957692]},n138:{id:"n138",loc:[-85.637211,41.941835]},n1380:{id:"n1380",loc:[-85.629281,41.957693]},n1381:{id:"n1381",loc:[-85.62928,41.957585]},n1382:{id:"n1382",loc:[-85.629004,41.957599]},n1383:{id:"n1383",loc:[-85.629004,41.957682]},n1384:{id:"n1384",loc:[-85.628902,41.957682]},n1385:{id:"n1385",loc:[-85.628902,41.957723]},n1386:{id:"n1386",loc:[-85.628731,41.957724]},n1387:{id:"n1387",loc:[-85.628731,41.9576]},n1388:{id:"n1388",loc:[-85.62836,41.957679]},n1389:{id:"n1389",loc:[-85.628359,41.957759]},n139:{id:"n139",loc:[-85.637293,41.941834]},n1390:{id:"n1390",loc:[-85.628062,41.957757]},n1391:{id:"n1391",loc:[-85.628063,41.957657]},n1392:{id:"n1392",loc:[-85.628198,41.957657]},n1393:{id:"n1393",loc:[-85.628198,41.957678]},n1394:{id:"n1394",loc:[-85.627775,41.958095]},n1395:{id:"n1395",loc:[-85.627608,41.958095]},n1396:{id:"n1396",loc:[-85.627606,41.957829]},n1397:{id:"n1397",loc:[-85.627774,41.957829]},n1398:{id:"n1398",loc:[-85.626816,41.957636]},n1399:{id:"n1399",loc:[-85.626787,41.957681]},n14:{id:"n14",loc:[-85.633643,41.940122]},n140:{id:"n140",loc:[-85.637293,41.941823]},n1400:{id:"n1400",loc:[-85.626673,41.95764]},n1401:{id:"n1401",loc:[-85.626703,41.957594]},n1402:{id:"n1402",loc:[-85.62694,41.95752]},n1403:{id:"n1403",loc:[-85.62688,41.957611]},n1404:{id:"n1404",loc:[-85.626798,41.957582]},n1405:{id:"n1405",loc:[-85.626793,41.95759]},n1406:{id:"n1406",loc:[-85.626657,41.95754]},n1407:{id:"n1407",loc:[-85.626666,41.957526]},n1408:{id:"n1408",loc:[-85.626584,41.957497]},n1409:{id:"n1409",loc:[-85.626638,41.957415]},n141:{id:"n141",loc:[-85.637363,41.941822]},n1410:{id:"n1410",loc:[-85.626731,41.957449]},n1411:{id:"n1411",loc:[-85.626725,41.957457]},n1412:{id:"n1412",loc:[-85.626843,41.9575]},n1413:{id:"n1413",loc:[-85.626851,41.957487]},n1414:{id:"n1414",loc:[-85.626579,41.957521]},n1415:{id:"n1415",loc:[-85.626537,41.957587]},n1416:{id:"n1416",loc:[-85.626427,41.957551]},n1417:{id:"n1417",loc:[-85.626468,41.957483]},n1418:{id:"n1418",loc:[-85.626592,41.957639]},n1419:{id:"n1419",loc:[-85.626807,41.957713]},n142:{id:"n142",loc:[-85.637364,41.941833]},n1420:{id:"n1420",loc:[-85.627129,41.957401]},n1421:{id:"n1421",loc:[-85.627209,41.95742]},n1422:{id:"n1422",loc:[-85.627302,41.957435]},n1423:{id:"n1423",loc:[-85.629566,41.957048]},n1424:{id:"n1424",loc:[-85.629568,41.957215]},n1425:{id:"n1425",loc:[-85.629383,41.957216]},n1426:{id:"n1426",loc:[-85.629384,41.95727]},n1427:{id:"n1427",loc:[-85.629231,41.957271]},n1428:{id:"n1428",loc:[-85.62923,41.957198]},n1429:{id:"n1429",loc:[-85.629322,41.957198]},n143:{id:"n143",loc:[-85.637559,41.942448]},n1430:{id:"n1430",loc:[-85.629321,41.957108]},n1431:{id:"n1431",loc:[-85.629441,41.957108]},n1432:{id:"n1432",loc:[-85.62944,41.957049]},n1433:{id:"n1433",loc:[-85.629337,41.957018]},n1434:{id:"n1434",loc:[-85.629366,41.957028]},n1435:{id:"n1435",loc:[-85.629375,41.957044]},n1436:{id:"n1436",loc:[-85.629354,41.957071]},n1437:{id:"n1437",loc:[-85.629317,41.957071]},n1438:{id:"n1438",loc:[-85.62929,41.957074]},n1439:{id:"n1439",loc:[-85.62927,41.957084]},n144:{id:"n144",loc:[-85.637036,41.942454]},n1440:{id:"n1440",loc:[-85.629232,41.957081]},n1441:{id:"n1441",loc:[-85.629222,41.957057]},n1442:{id:"n1442",loc:[-85.629259,41.957025]},n1443:{id:"n1443",loc:[-85.629293,41.957017]},n1444:{id:"n1444",loc:[-85.629251,41.957085]},n1445:{id:"n1445",loc:[-85.629235,41.957041]},n1446:{id:"n1446",loc:[-85.62937,41.95706]},n1447:{id:"n1447",loc:[-85.629531,41.956909]},n1448:{id:"n1448",loc:[-85.629408,41.956909]},n1449:{id:"n1449",loc:[-85.629402,41.956681]},n145:{id:"n145",loc:[-85.636692,41.942828]},n1450:{id:"n1450",loc:[-85.62953,41.956681]},n1451:{id:"n1451",loc:[-85.629402,41.956728]},n1452:{id:"n1452",loc:[-85.629408,41.956845]},n1453:{id:"n1453",loc:[-85.629385,41.956845]},n1454:{id:"n1454",loc:[-85.629384,41.956728]},n1455:{id:"n1455",loc:[-85.629063,41.956973]},n1456:{id:"n1456",loc:[-85.629064,41.957009]},n1457:{id:"n1457",loc:[-85.62902,41.957009]},n1458:{id:"n1458",loc:[-85.629019,41.956973]},n1459:{id:"n1459",loc:[-85.629136,41.956633]},n146:{id:"n146",loc:[-85.635929,41.942826]},n1460:{id:"n1460",loc:[-85.629084,41.956632]},n1461:{id:"n1461",loc:[-85.629084,41.956605]},n1462:{id:"n1462",loc:[-85.629136,41.956605]},n1463:{id:"n1463",loc:[-85.629153,41.956657]},n1464:{id:"n1464",loc:[-85.627914,41.956661]},n1465:{id:"n1465",loc:[-85.630096,41.956101]},n1466:{id:"n1466",loc:[-85.630097,41.95612]},n1467:{id:"n1467",loc:[-85.630011,41.956121]},n1468:{id:"n1468",loc:[-85.630015,41.956374]},n1469:{id:"n1469",loc:[-85.629148,41.95626]},n147:{id:"n147",loc:[-85.636433,41.942828]},n1470:{id:"n1470",loc:[-85.629527,41.956591]},n1471:{id:"n1471",loc:[-85.629405,41.956591]},n1472:{id:"n1472",loc:[-85.629405,41.956459]},n1473:{id:"n1473",loc:[-85.629369,41.956459]},n1474:{id:"n1474",loc:[-85.629369,41.956424]},n1475:{id:"n1475",loc:[-85.629413,41.956424]},n1476:{id:"n1476",loc:[-85.629414,41.956326]},n1477:{id:"n1477",loc:[-85.629522,41.956326]},n1478:{id:"n1478",loc:[-85.629522,41.956487]},n1479:{id:"n1479",loc:[-85.629527,41.956487]},n148:{id:"n148",loc:[-85.636435,41.942864],tags:{entrance:"yes"}},n1480:{id:"n1480",loc:[-85.629414,41.95634]},n1481:{id:"n1481",loc:[-85.629149,41.956338]},n1482:{id:"n1482",loc:[-85.62931,41.956531]},n1483:{id:"n1483",loc:[-85.629291,41.95655]},n1484:{id:"n1484",loc:[-85.629255,41.95655]},n1485:{id:"n1485",loc:[-85.629236,41.956533]},n1486:{id:"n1486",loc:[-85.629237,41.956461]},n1487:{id:"n1487",loc:[-85.629257,41.956445]},n1488:{id:"n1488",loc:[-85.629257,41.956428]},n1489:{id:"n1489",loc:[-85.629287,41.956428]},n149:{id:"n149",loc:[-85.637235,41.942622]},n1490:{id:"n1490",loc:[-85.629287,41.956445]},n1491:{id:"n1491",loc:[-85.62931,41.95646]},n1492:{id:"n1492",loc:[-85.629049,41.956425]},n1493:{id:"n1493",loc:[-85.628907,41.956427]},n1494:{id:"n1494",loc:[-85.628907,41.956455]},n1495:{id:"n1495",loc:[-85.628841,41.956455]},n1496:{id:"n1496",loc:[-85.62884,41.956424]},n1497:{id:"n1497",loc:[-85.628764,41.956425]},n1498:{id:"n1498",loc:[-85.628762,41.956323]},n1499:{id:"n1499",loc:[-85.628808,41.956323]},n15:{id:"n15",loc:[-85.633477,41.940187]},n150:{id:"n150",loc:[-85.637247,41.943116]},n1500:{id:"n1500",loc:[-85.628808,41.956314]},n1501:{id:"n1501",loc:[-85.628911,41.956313]},n1502:{id:"n1502",loc:[-85.628911,41.956322]},n1503:{id:"n1503",loc:[-85.62896,41.956322]},n1504:{id:"n1504",loc:[-85.62896,41.956348]},n1505:{id:"n1505",loc:[-85.629047,41.956347]},n1506:{id:"n1506",loc:[-85.628893,41.957263]},n1507:{id:"n1507",loc:[-85.628788,41.957264]},n1508:{id:"n1508",loc:[-85.628786,41.95711]},n1509:{id:"n1509",loc:[-85.628894,41.957109]},n151:{id:"n151",loc:[-85.637564,41.943116]},n1510:{id:"n1510",loc:[-85.628893,41.957075]},n1511:{id:"n1511",loc:[-85.628965,41.957075]},n1512:{id:"n1512",loc:[-85.628965,41.957111]},n1513:{id:"n1513",loc:[-85.629035,41.95711]},n1514:{id:"n1514",loc:[-85.629036,41.957209]},n1515:{id:"n1515",loc:[-85.628893,41.95721]},n1516:{id:"n1516",loc:[-85.631348,41.95773]},n1517:{id:"n1517",loc:[-85.631101,41.957732]},n1518:{id:"n1518",loc:[-85.631099,41.957558]},n1519:{id:"n1519",loc:[-85.63123,41.957557]},n152:{id:"n152",loc:[-85.637552,41.942619]},n1520:{id:"n1520",loc:[-85.631231,41.957618]},n1521:{id:"n1521",loc:[-85.63129,41.957618]},n1522:{id:"n1522",loc:[-85.63129,41.957651]},n1523:{id:"n1523",loc:[-85.631346,41.957651]},n1524:{id:"n1524",loc:[-85.631366,41.95802]},n1525:{id:"n1525",loc:[-85.631141,41.958021]},n1526:{id:"n1526",loc:[-85.63114,41.957943]},n1527:{id:"n1527",loc:[-85.631167,41.957943]},n1528:{id:"n1528",loc:[-85.631166,41.957808]},n1529:{id:"n1529",loc:[-85.631301,41.957807]},n153:{id:"n153",loc:[-85.63763,41.942528]},n1530:{id:"n1530",loc:[-85.631302,41.95789]},n1531:{id:"n1531",loc:[-85.631364,41.95789]},n1532:{id:"n1532",loc:[-85.631539,41.957754]},n1533:{id:"n1533",loc:[-85.631069,41.957756]},n1534:{id:"n1534",loc:[-85.631536,41.957518]},n1535:{id:"n1535",loc:[-85.631543,41.957995]},n1536:{id:"n1536",loc:[-85.631531,41.957748]},n1537:{id:"n1537",loc:[-85.631485,41.957748]},n1538:{id:"n1538",loc:[-85.631484,41.957698]},n1539:{id:"n1539",loc:[-85.631531,41.957698]},n154:{id:"n154",loc:[-85.637151,41.94253]},n1540:{id:"n1540",loc:[-85.631586,41.957742]},n1541:{id:"n1541",loc:[-85.63155,41.957742]},n1542:{id:"n1542",loc:[-85.631551,41.957702]},n1543:{id:"n1543",loc:[-85.631587,41.957702]},n1544:{id:"n1544",loc:[-85.631534,41.95807]},n1545:{id:"n1545",loc:[-85.631534,41.958097]},n1546:{id:"n1546",loc:[-85.631491,41.958097]},n1547:{id:"n1547",loc:[-85.631491,41.95807]},n1548:{id:"n1548",loc:[-85.631304,41.958861]},n1549:{id:"n1549",loc:[-85.631186,41.958862]},n155:{id:"n155",loc:[-85.63715,41.942424]},n1550:{id:"n1550",loc:[-85.631182,41.958653]},n1551:{id:"n1551",loc:[-85.6313,41.958651]},n1552:{id:"n1552",loc:[-85.631293,41.95854]},n1553:{id:"n1553",loc:[-85.631176,41.958539]},n1554:{id:"n1554",loc:[-85.631176,41.958377]},n1555:{id:"n1555",loc:[-85.631297,41.958377]},n1556:{id:"n1556",loc:[-85.631297,41.958422]},n1557:{id:"n1557",loc:[-85.631333,41.958422]},n1558:{id:"n1558",loc:[-85.631333,41.958479]},n1559:{id:"n1559",loc:[-85.631293,41.958479]},n156:{id:"n156",loc:[-85.637629,41.942422]},n1560:{id:"n1560",loc:[-85.631951,41.958908]},n1561:{id:"n1561",loc:[-85.631838,41.958909]},n1562:{id:"n1562",loc:[-85.631837,41.958847]},n1563:{id:"n1563",loc:[-85.631859,41.958847]},n1564:{id:"n1564",loc:[-85.631858,41.958746]},n1565:{id:"n1565",loc:[-85.631961,41.958745]},n1566:{id:"n1566",loc:[-85.631962,41.958812]},n1567:{id:"n1567",loc:[-85.631949,41.958813]},n1568:{id:"n1568",loc:[-85.631579,41.958913]},n1569:{id:"n1569",loc:[-85.631567,41.95864]},n157:{id:"n157",loc:[-85.638232,41.942477]},n1570:{id:"n1570",loc:[-85.631942,41.958639]},n1571:{id:"n1571",loc:[-85.631543,41.958594]},n1572:{id:"n1572",loc:[-85.631543,41.958065]},n1573:{id:"n1573",loc:[-85.631888,41.958546]},n1574:{id:"n1574",loc:[-85.631804,41.958546]},n1575:{id:"n1575",loc:[-85.631803,41.95841]},n1576:{id:"n1576",loc:[-85.631886,41.958409]},n1577:{id:"n1577",loc:[-85.631897,41.958125]},n1578:{id:"n1578",loc:[-85.631755,41.958126]},n1579:{id:"n1579",loc:[-85.631756,41.958174]},n158:{id:"n158",loc:[-85.637775,41.942483]},n1580:{id:"n1580",loc:[-85.63178,41.958174]},n1581:{id:"n1581",loc:[-85.631782,41.958272]},n1582:{id:"n1582",loc:[-85.631922,41.958271]},n1583:{id:"n1583",loc:[-85.631922,41.958244]},n1584:{id:"n1584",loc:[-85.631883,41.958245]},n1585:{id:"n1585",loc:[-85.631882,41.958175]},n1586:{id:"n1586",loc:[-85.631898,41.958175]},n1587:{id:"n1587",loc:[-85.631924,41.958032]},n1588:{id:"n1588",loc:[-85.631762,41.958032]},n1589:{id:"n1589",loc:[-85.63176,41.957827]},n159:{id:"n159",loc:[-85.638107,41.942512]},n1590:{id:"n1590",loc:[-85.631888,41.957826]},n1591:{id:"n1591",loc:[-85.631888,41.957892]},n1592:{id:"n1592",loc:[-85.631871,41.957892]},n1593:{id:"n1593",loc:[-85.631872,41.957949]},n1594:{id:"n1594",loc:[-85.631923,41.957949]},n1595:{id:"n1595",loc:[-85.631695,41.95795]},n1596:{id:"n1596",loc:[-85.631666,41.957975]},n1597:{id:"n1597",loc:[-85.63163,41.957975]},n1598:{id:"n1598",loc:[-85.6316,41.957951]},n1599:{id:"n1599",loc:[-85.6316,41.95785]},n16:{id:"n16",loc:[-85.63341,41.94032]},n160:{id:"n160",loc:[-85.637763,41.942514]},n1600:{id:"n1600",loc:[-85.63166,41.95785]},n1601:{id:"n1601",loc:[-85.631696,41.957873]},n1602:{id:"n1602",loc:[-85.631924,41.957762]},n1603:{id:"n1603",loc:[-85.631762,41.957762]},n1604:{id:"n1604",loc:[-85.631762,41.957708]},n1605:{id:"n1605",loc:[-85.631785,41.957708]},n1606:{id:"n1606",loc:[-85.631785,41.957606]},n1607:{id:"n1607",loc:[-85.631734,41.957606]},n1608:{id:"n1608",loc:[-85.631734,41.957538]},n1609:{id:"n1609",loc:[-85.631821,41.957538]},n161:{id:"n161",loc:[-85.637763,41.942445]},n1610:{id:"n1610",loc:[-85.631935,41.957545]},n1611:{id:"n1611",loc:[-85.631821,41.957544]},n1612:{id:"n1612",loc:[-85.631935,41.957645]},n1613:{id:"n1613",loc:[-85.631924,41.957645]},n1614:{id:"n1614",loc:[-85.627135,41.953828]},n1615:{id:"n1615",loc:[-85.633517,41.941353],tags:{man_made:"lighthouse"}},n1616:{id:"n1616",loc:[-85.633659,41.942041],tags:{amenity:"bbq"}},n1617:{id:"n1617",loc:[-85.63662,41.942911],tags:{amenity:"toilets"}},n1618:{id:"n1618",loc:[-85.637487,41.943876],tags:{amenity:"toilets"}},n1619:{id:"n1619",loc:[-85.634938,41.941917],tags:{amenity:"toilets"}},n162:{id:"n162",loc:[-85.638107,41.942443]},n1620:{id:"n1620",loc:[-85.632427,41.941678],tags:{amenity:"bbq"}},n1621:{id:"n1621",loc:[-85.638033,41.944568],tags:{amenity:"bbq"}},n1622:{id:"n1622",loc:[-85.638052,41.944522],tags:{amenity:"bbq"}},n1623:{id:"n1623",loc:[-85.635001,41.941965]},n1624:{id:"n1624",loc:[-85.634635,41.941884]},n1625:{id:"n1625",loc:[-85.634667,41.941894]},n1626:{id:"n1626",loc:[-85.634791,41.942011]},n1627:{id:"n1627",loc:[-85.634749,41.941938]},n1628:{id:"n1628",loc:[-85.627295,41.953946],tags:{barrier:"gate"}},n1629:{id:"n1629",loc:[-85.629076,41.954689]},n163:{id:"n163",loc:[-85.638813,41.942475]},n1630:{id:"n1630",loc:[-85.640667,41.942595]},n1631:{id:"n1631",loc:[-85.639455,41.94261]},n1632:{id:"n1632",loc:[-85.643407,41.942336]},n1633:{id:"n1633",loc:[-85.641845,41.941316]},n1634:{id:"n1634",loc:[-85.643322,41.942224]},n1635:{id:"n1635",loc:[-85.643301,41.942124]},n1636:{id:"n1636",loc:[-85.640639,41.941326]},n1637:{id:"n1637",loc:[-85.640614,41.940058]},n1638:{id:"n1638",loc:[-85.639428,41.941335]},n1639:{id:"n1639",loc:[-85.643078,41.941293]},n164:{id:"n164",loc:[-85.63883,41.942422]},n1640:{id:"n1640",loc:[-85.64371,41.942302]},n1641:{id:"n1641",loc:[-85.643056,41.94001]},n1642:{id:"n1642",loc:[-85.643097,41.942575],tags:{highway:"traffic_signals",traffic_signals:"signal","traffic_signals:direction":"both"}},n1643:{id:"n1643",loc:[-85.641855,41.942586]},n1644:{id:"n1644",loc:[-85.643549,41.942209]},n1645:{id:"n1645",loc:[-85.639359,41.94007]},n1646:{id:"n1646",loc:[-85.642797,41.940522]},n1647:{id:"n1647",loc:[-85.642589,41.940523]},n1648:{id:"n1648",loc:[-85.642587,41.940287]},n1649:{id:"n1649",loc:[-85.642797,41.940286]},n165:{id:"n165",loc:[-85.63883,41.942508]},n1650:{id:"n1650",loc:[-85.642571,41.940523]},n1651:{id:"n1651",loc:[-85.642568,41.940286]},n1652:{id:"n1652",loc:[-85.642316,41.940289]},n1653:{id:"n1653",loc:[-85.642321,41.940436]},n1654:{id:"n1654",loc:[-85.642292,41.940458]},n1655:{id:"n1655",loc:[-85.642287,41.940483]},n1656:{id:"n1656",loc:[-85.642323,41.940509]},n1657:{id:"n1657",loc:[-85.642385,41.940511]},n1658:{id:"n1658",loc:[-85.642408,41.940526]},n1659:{id:"n1659",loc:[-85.641962,41.94109]},n166:{id:"n166",loc:[-85.638364,41.942508]},n1660:{id:"n1660",loc:[-85.642753,41.941084]},n1661:{id:"n1661",loc:[-85.642752,41.941004]},n1662:{id:"n1662",loc:[-85.642806,41.941003]},n1663:{id:"n1663",loc:[-85.642803,41.940731]},n1664:{id:"n1664",loc:[-85.642741,41.940732]},n1665:{id:"n1665",loc:[-85.64274,41.940645]},n1666:{id:"n1666",loc:[-85.641957,41.940651]},n1667:{id:"n1667",loc:[-85.642937,41.941241]},n1668:{id:"n1668",loc:[-85.641776,41.941253]},n1669:{id:"n1669",loc:[-85.641766,41.940598]},n167:{id:"n167",loc:[-85.638836,41.942167]},n1670:{id:"n1670",loc:[-85.64198,41.940598]},n1671:{id:"n1671",loc:[-85.641961,41.940137]},n1672:{id:"n1672",loc:[-85.642934,41.94012]},n1673:{id:"n1673",loc:[-85.643074,41.941173]},n1674:{id:"n1674",loc:[-85.642841,41.940997]},n1675:{id:"n1675",loc:[-85.642839,41.940721]},n1676:{id:"n1676",loc:[-85.643065,41.940552]},n1677:{id:"n1677",loc:[-85.642732,41.94124]},n1678:{id:"n1678",loc:[-85.641815,41.941246]},n1679:{id:"n1679",loc:[-85.641813,41.941132]},n168:{id:"n168",loc:[-85.638836,41.94229]},n1680:{id:"n1680",loc:[-85.641839,41.941111]},n1681:{id:"n1681",loc:[-85.641884,41.941098]},n1682:{id:"n1682",loc:[-85.642732,41.941092]},n1683:{id:"n1683",loc:[-85.642776,41.941302]},n1684:{id:"n1684",loc:[-85.632788,41.946236]},n1685:{id:"n1685",loc:[-85.622342,41.953127]},n1686:{id:"n1686",loc:[-85.641848,41.941167]},n1687:{id:"n1687",loc:[-85.643753,41.941503]},n1688:{id:"n1688",loc:[-85.643762,41.942119]},n1689:{id:"n1689",loc:[-85.64238,41.942262]},n169:{id:"n169",loc:[-85.638594,41.94229]},n1690:{id:"n1690",loc:[-85.642374,41.941944]},n1691:{id:"n1691",loc:[-85.642518,41.941943]},n1692:{id:"n1692",loc:[-85.642519,41.94198]},n1693:{id:"n1693",loc:[-85.642831,41.941977]},n1694:{id:"n1694",loc:[-85.642837,41.942312]},n1695:{id:"n1695",loc:[-85.642495,41.942315]},n1696:{id:"n1696",loc:[-85.642494,41.942261]},n1697:{id:"n1697",loc:[-85.641087,41.942433]},n1698:{id:"n1698",loc:[-85.641081,41.942006]},n1699:{id:"n1699",loc:[-85.641244,41.942005]},n17:{id:"n17",loc:[-85.633478,41.94081]},n170:{id:"n170",loc:[-85.638594,41.942422]},n1700:{id:"n1700",loc:[-85.64125,41.942431]},n1701:{id:"n1701",loc:[-85.641331,41.942968]},n1702:{id:"n1702",loc:[-85.641328,41.942713]},n1703:{id:"n1703",loc:[-85.641521,41.942712]},n1704:{id:"n1704",loc:[-85.641523,41.942924]},n1705:{id:"n1705",loc:[-85.641504,41.942924]},n1706:{id:"n1706",loc:[-85.641505,41.942967]},n1707:{id:"n1707",loc:[-85.638612,41.942408]},n1708:{id:"n1708",loc:[-85.638612,41.942327]},n1709:{id:"n1709",loc:[-85.638775,41.942327]},n171:{id:"n171",loc:[-85.638364,41.942356]},n1710:{id:"n1710",loc:[-85.638775,41.942299]},n1711:{id:"n1711",loc:[-85.638835,41.942298]},n1712:{id:"n1712",loc:[-85.638835,41.942407]},n1713:{id:"n1713",loc:[-85.639116,41.942444]},n1714:{id:"n1714",loc:[-85.639114,41.942362]},n1715:{id:"n1715",loc:[-85.639294,41.94236]},n1716:{id:"n1716",loc:[-85.639296,41.942442]},n1717:{id:"n1717",loc:[-85.639808,41.942385]},n1718:{id:"n1718",loc:[-85.639805,41.942285]},n1719:{id:"n1719",loc:[-85.639988,41.942283]},n172:{id:"n172",loc:[-85.638364,41.942167]},n1720:{id:"n1720",loc:[-85.63999,41.942383]},n1721:{id:"n1721",loc:[-85.639633,41.943023]},n1722:{id:"n1722",loc:[-85.639867,41.943019]},n1723:{id:"n1723",loc:[-85.639866,41.942964]},n1724:{id:"n1724",loc:[-85.639888,41.942963]},n1725:{id:"n1725",loc:[-85.639883,41.942779]},n1726:{id:"n1726",loc:[-85.639851,41.94278]},n1727:{id:"n1727",loc:[-85.63985,41.94274]},n1728:{id:"n1728",loc:[-85.639789,41.942741]},n1729:{id:"n1729",loc:[-85.639789,41.942753]},n173:{id:"n173",loc:[-85.639038,41.942463]},n1730:{id:"n1730",loc:[-85.639698,41.942754]},n1731:{id:"n1731",loc:[-85.639699,41.942788]},n1732:{id:"n1732",loc:[-85.639675,41.942789]},n1733:{id:"n1733",loc:[-85.639676,41.94283]},n1734:{id:"n1734",loc:[-85.639701,41.942829]},n1735:{id:"n1735",loc:[-85.639702,41.942869]},n1736:{id:"n1736",loc:[-85.639629,41.94287]},n1737:{id:"n1737",loc:[-85.643568,41.942946]},n1738:{id:"n1738",loc:[-85.643568,41.942777]},n1739:{id:"n1739",loc:[-85.643401,41.942777]},n174:{id:"n174",loc:[-85.638897,41.942464]},n1740:{id:"n1740",loc:[-85.643401,41.942863]},n1741:{id:"n1741",loc:[-85.643448,41.942863]},n1742:{id:"n1742",loc:[-85.643448,41.942946]},n1743:{id:"n1743",loc:[-85.642836,41.942981]},n1744:{id:"n1744",loc:[-85.642917,41.942979]},n1745:{id:"n1745",loc:[-85.642914,41.942904]},n1746:{id:"n1746",loc:[-85.642938,41.942903]},n1747:{id:"n1747",loc:[-85.642935,41.942813]},n1748:{id:"n1748",loc:[-85.642775,41.942816]},n1749:{id:"n1749",loc:[-85.642778,41.942906]},n175:{id:"n175",loc:[-85.638897,41.942423]},n1750:{id:"n1750",loc:[-85.642833,41.942905]},n1751:{id:"n1751",loc:[-85.642302,41.942886]},n1752:{id:"n1752",loc:[-85.642299,41.942721]},n1753:{id:"n1753",loc:[-85.642422,41.94272]},n1754:{id:"n1754",loc:[-85.642425,41.942868]},n1755:{id:"n1755",loc:[-85.642385,41.942869]},n1756:{id:"n1756",loc:[-85.642385,41.942885]},n1757:{id:"n1757",loc:[-85.641533,41.942939]},n1758:{id:"n1758",loc:[-85.64161,41.942877]},n1759:{id:"n1759",loc:[-85.641676,41.942922]},n176:{id:"n176",loc:[-85.638853,41.942423]},n1760:{id:"n1760",loc:[-85.6416,41.942985]},n1761:{id:"n1761",loc:[-85.64206,41.942802]},n1762:{id:"n1762",loc:[-85.642059,41.942741]},n1763:{id:"n1763",loc:[-85.642196,41.942741]},n1764:{id:"n1764",loc:[-85.642196,41.942818]},n1765:{id:"n1765",loc:[-85.642128,41.942819]},n1766:{id:"n1766",loc:[-85.642128,41.942801]},n1767:{id:"n1767",loc:[-85.640943,41.942934]},n1768:{id:"n1768",loc:[-85.641035,41.942933]},n1769:{id:"n1769",loc:[-85.641032,41.942797]},n177:{id:"n177",loc:[-85.638852,41.94237]},n1770:{id:"n1770",loc:[-85.640997,41.942798]},n1771:{id:"n1771",loc:[-85.640996,41.942764]},n1772:{id:"n1772",loc:[-85.640861,41.942766]},n1773:{id:"n1773",loc:[-85.640862,41.942848]},n1774:{id:"n1774",loc:[-85.640941,41.942847]},n1775:{id:"n1775",loc:[-85.643766,41.942226]},n1776:{id:"n1776",loc:[-85.643768,41.942407]},n1777:{id:"n1777",loc:[-85.643218,41.94177]},n1778:{id:"n1778",loc:[-85.64321,41.941327]},n1779:{id:"n1779",loc:[-85.643649,41.941323]},n178:{id:"n178",loc:[-85.638892,41.94237]},n1780:{id:"n1780",loc:[-85.643656,41.941716]},n1781:{id:"n1781",loc:[-85.64358,41.941717]},n1782:{id:"n1782",loc:[-85.64358,41.941767]},n1783:{id:"n1783",loc:[-85.64382,41.941495]},n1784:{id:"n1784",loc:[-85.643817,41.941317]},n1785:{id:"n1785",loc:[-85.643235,41.941833]},n1786:{id:"n1786",loc:[-85.64335,41.941842]},n1787:{id:"n1787",loc:[-85.643504,41.941903]},n1788:{id:"n1788",loc:[-85.643554,41.941946]},n1789:{id:"n1789",loc:[-85.643618,41.942015]},n179:{id:"n179",loc:[-85.638891,41.942334]},n1790:{id:"n1790",loc:[-85.64346,41.941971]},n1791:{id:"n1791",loc:[-85.643528,41.942468]},n1792:{id:"n1792",loc:[-85.643621,41.942363]},n1793:{id:"n1793",loc:[-85.643496,41.942297]},n1794:{id:"n1794",loc:[-85.643446,41.942246]},n1795:{id:"n1795",loc:[-85.643398,41.942177]},n1796:{id:"n1796",loc:[-85.643398,41.942031]},n1797:{id:"n1797",loc:[-85.621531,41.952693]},n1798:{id:"n1798",loc:[-85.643221,41.942028]},n1799:{id:"n1799",loc:[-85.643225,41.942276]},n18:{id:"n18",loc:[-85.63345,41.94071]},n180:{id:"n180",loc:[-85.639037,41.942334]},n1800:{id:"n1800",loc:[-85.643265,41.942347]},n1801:{id:"n1801",loc:[-85.643323,41.942413]},n1802:{id:"n1802",loc:[-85.643411,41.94247]},n1803:{id:"n1803",loc:[-85.643459,41.942435]},n1804:{id:"n1804",loc:[-85.643767,41.942307]},n1805:{id:"n1805",loc:[-85.643661,41.942293]},n1806:{id:"n1806",loc:[-85.643578,41.942247]},n1807:{id:"n1807",loc:[-85.643522,41.942125]},n1808:{id:"n1808",loc:[-85.643515,41.942061]},n1809:{id:"n1809",loc:[-85.643346,41.941924]},n181:{id:"n181",loc:[-85.638074,41.941839]},n1810:{id:"n1810",loc:[-85.643086,41.94192]},n1811:{id:"n1811",loc:[-85.643529,41.94217]},n1812:{id:"n1812",loc:[-85.643489,41.942003]},n1813:{id:"n1813",loc:[-85.643295,41.941919]},n1814:{id:"n1814",loc:[-85.643305,41.942163]},n1815:{id:"n1815",loc:[-85.643354,41.942285]},n1816:{id:"n1816",loc:[-85.643472,41.942389]},n1817:{id:"n1817",loc:[-85.643608,41.942271]},n1818:{id:"n1818",loc:[-85.643876,41.941402]},n1819:{id:"n1819",loc:[-85.643818,41.941369]},n182:{id:"n182",loc:[-85.638076,41.941942]},n1820:{id:"n1820",loc:[-85.643682,41.941304]},n1821:{id:"n1821",loc:[-85.64359,41.941286]},n1822:{id:"n1822",loc:[-85.643317,41.941727]},n1823:{id:"n1823",loc:[-85.643301,41.941286]},n1824:{id:"n1824",loc:[-85.643553,41.941698]},n1825:{id:"n1825",loc:[-85.643543,41.941286]},n1826:{id:"n1826",loc:[-85.636967,41.940118]},n1827:{id:"n1827",loc:[-85.63378,41.940114]},n1828:{id:"n1828",loc:[-85.637254,41.940075]},n1829:{id:"n1829",loc:[-85.637002,41.941355]},n183:{id:"n183",loc:[-85.637955,41.941944]},n1830:{id:"n1830",loc:[-85.643532,41.94204]},n1831:{id:"n1831",loc:[-85.638235,41.942615]},n1832:{id:"n1832",loc:[-85.637039,41.942624]},n1833:{id:"n1833",loc:[-85.636369,41.94266]},n1834:{id:"n1834",loc:[-85.63582,41.942771],tags:{highway:"traffic_signals",traffic_signals:"emergency","traffic_signals:direction":"both"}},n1835:{id:"n1835",loc:[-85.634873,41.943044]},n1836:{id:"n1836",loc:[-85.643482,41.941976]},n1837:{id:"n1837",loc:[-85.64345,41.941945]},n1838:{id:"n1838",loc:[-85.641885,41.943851]},n1839:{id:"n1839",loc:[-85.641915,41.945121]},n184:{id:"n184",loc:[-85.637953,41.94184]},n1840:{id:"n1840",loc:[-85.639454,41.943871]},n1841:{id:"n1841",loc:[-85.639491,41.945191]},n1842:{id:"n1842",loc:[-85.635768,41.940113]},n1843:{id:"n1843",loc:[-85.638206,41.941345]},n1844:{id:"n1844",loc:[-85.640721,41.94513]},n1845:{id:"n1845",loc:[-85.643137,41.945103]},n1846:{id:"n1846",loc:[-85.638199,41.940079]},n1847:{id:"n1847",loc:[-85.640688,41.943861]},n1848:{id:"n1848",loc:[-85.643397,41.941924]},n1849:{id:"n1849",loc:[-85.643117,41.943841]},n185:{id:"n185",loc:[-85.637953,41.941866]},n1850:{id:"n1850",loc:[-85.636731,41.94263]},n1851:{id:"n1851",loc:[-85.63518,41.942955],tags:{highway:"crossing"}},n1852:{id:"n1852",loc:[-85.636152,41.942695]},n1853:{id:"n1853",loc:[-85.644202,41.941499]},n1854:{id:"n1854",loc:[-85.644211,41.942116]},n1855:{id:"n1855",loc:[-85.644233,41.942404]},n1856:{id:"n1856",loc:[-85.644231,41.942223]},n1857:{id:"n1857",loc:[-85.644133,41.941315]},n1858:{id:"n1858",loc:[-85.644136,41.941493]},n1859:{id:"n1859",loc:[-85.644345,41.942307]},n186:{id:"n186",loc:[-85.637873,41.941867]},n1860:{id:"n1860",loc:[-85.644232,41.942304]},n1861:{id:"n1861",loc:[-85.644134,41.941403]},n1862:{id:"n1862",loc:[-85.63607,41.943005],tags:{"addr:city":"Three Rivers","addr:housenumber":"333","addr:postcode":"49093","addr:state":"MI","addr:street":"Michigan Avenue",amenity:"fire_station",name:"Three Rivers Fire Department"}},n1863:{id:"n1863",loc:[-85.637,41.941236]},n1864:{id:"n1864",loc:[-85.634476,41.941475]},n1865:{id:"n1865",loc:[-85.635036,41.941858]},n1866:{id:"n1866",loc:[-85.635362,41.941962]},n1867:{id:"n1867",loc:[-85.635796,41.941962]},n1868:{id:"n1868",loc:[-85.63295,41.943006]},n1869:{id:"n1869",loc:[-85.634692,41.943098]},n187:{id:"n187",loc:[-85.637877,41.941975]},n1870:{id:"n1870",loc:[-85.633128,41.940484]},n1871:{id:"n1871",loc:[-85.633117,41.942798]},n1872:{id:"n1872",loc:[-85.633303,41.942412]},n1873:{id:"n1873",loc:[-85.633482,41.941912]},n1874:{id:"n1874",loc:[-85.633455,41.941359]},n1875:{id:"n1875",loc:[-85.633162,41.942679]},n1876:{id:"n1876",loc:[-85.634274,41.943479]},n1877:{id:"n1877",loc:[-85.634678,41.942909]},n1878:{id:"n1878",loc:[-85.6339,41.941453]},n1879:{id:"n1879",loc:[-85.634571,41.942774]},n188:{id:"n188",loc:[-85.636855,41.942488]},n1880:{id:"n1880",loc:[-85.63419,41.941732]},n1881:{id:"n1881",loc:[-85.634067,41.941565]},n1882:{id:"n1882",loc:[-85.63436,41.942358]},n1883:{id:"n1883",loc:[-85.634327,41.942247]},n1884:{id:"n1884",loc:[-85.633391,41.941231]},n1885:{id:"n1885",loc:[-85.634303,41.941972]},n1886:{id:"n1886",loc:[-85.633541,41.940147]},n1887:{id:"n1887",loc:[-85.633433,41.940252]},n1888:{id:"n1888",loc:[-85.633402,41.940411]},n1889:{id:"n1889",loc:[-85.633551,41.941023]},n189:{id:"n189",loc:[-85.636702,41.942488]},n1890:{id:"n1890",loc:[-85.633719,41.941186]},n1891:{id:"n1891",loc:[-85.633067,41.941845]},n1892:{id:"n1892",loc:[-85.634902,41.942766]},n1893:{id:"n1893",loc:[-85.634603,41.942202]},n1894:{id:"n1894",loc:[-85.634858,41.942152]},n1895:{id:"n1895",loc:[-85.634842,41.942269]},n1896:{id:"n1896",loc:[-85.634907,41.942313]},n1897:{id:"n1897",loc:[-85.635049,41.942331]},n1898:{id:"n1898",loc:[-85.635101,41.942281]},n1899:{id:"n1899",loc:[-85.635129,41.942144]},n19:{id:"n19",loc:[-85.633009,41.942229]},n190:{id:"n190",loc:[-85.636702,41.942434]},n1900:{id:"n1900",loc:[-85.635531,41.942143]},n1901:{id:"n1901",loc:[-85.635534,41.942577]},n1902:{id:"n1902",loc:[-85.635158,41.942656]},n1903:{id:"n1903",loc:[-85.635121,41.942703]},n1904:{id:"n1904",loc:[-85.635087,41.941508]},n1905:{id:"n1905",loc:[-85.63536,41.941106]},n1906:{id:"n1906",loc:[-85.635442,41.941094]},n1907:{id:"n1907",loc:[-85.635508,41.941104]},n1908:{id:"n1908",loc:[-85.635569,41.941125]},n1909:{id:"n1909",loc:[-85.635583,41.941106]},n191:{id:"n191",loc:[-85.636761,41.942434]},n1910:{id:"n1910",loc:[-85.635555,41.940976]},n1911:{id:"n1911",loc:[-85.635501,41.940915]},n1912:{id:"n1912",loc:[-85.635392,41.940922]},n1913:{id:"n1913",loc:[-85.635276,41.940974]},n1914:{id:"n1914",loc:[-85.63517,41.941204]},n1915:{id:"n1915",loc:[-85.634888,41.941517]},n1916:{id:"n1916",loc:[-85.634897,41.941576]},n1917:{id:"n1917",loc:[-85.634961,41.94164]},n1918:{id:"n1918",loc:[-85.635028,41.941659]},n1919:{id:"n1919",loc:[-85.635118,41.941621]},n192:{id:"n192",loc:[-85.636761,41.942369]},n1920:{id:"n1920",loc:[-85.635085,41.941558]},n1921:{id:"n1921",loc:[-85.63504,41.94136]},n1922:{id:"n1922",loc:[-85.635221,41.941077]},n1923:{id:"n1923",loc:[-85.634387,41.941559]},n1924:{id:"n1924",loc:[-85.634351,41.941587]},n1925:{id:"n1925",loc:[-85.634416,41.941756]},n1926:{id:"n1926",loc:[-85.634461,41.941797]},n1927:{id:"n1927",loc:[-85.634501,41.941819]},n1928:{id:"n1928",loc:[-85.634597,41.941816]},n1929:{id:"n1929",loc:[-85.634732,41.941724]},n193:{id:"n193",loc:[-85.636855,41.942369]},n1930:{id:"n1930",loc:[-85.634672,41.941775]},n1931:{id:"n1931",loc:[-85.633403,41.939101]},n1932:{id:"n1932",loc:[-85.633297,41.939397]},n1933:{id:"n1933",loc:[-85.633205,41.939674]},n1934:{id:"n1934",loc:[-85.63322,41.939777]},n1935:{id:"n1935",loc:[-85.633345,41.939936]},n1936:{id:"n1936",loc:[-85.633376,41.940002]},n1937:{id:"n1937",loc:[-85.633266,41.940228]},n1938:{id:"n1938",loc:[-85.633236,41.940352]},n1939:{id:"n1939",loc:[-85.633282,41.94063]},n194:{id:"n194",loc:[-85.636645,41.94249]},n1940:{id:"n1940",loc:[-85.633364,41.940874]},n1941:{id:"n1941",loc:[-85.633439,41.941052]},n1942:{id:"n1942",loc:[-85.633582,41.941172]},n1943:{id:"n1943",loc:[-85.633748,41.941273]},n1944:{id:"n1944",loc:[-85.634317,41.941527]},n1945:{id:"n1945",loc:[-85.634389,41.94174]},n1946:{id:"n1946",loc:[-85.634441,41.941801]},n1947:{id:"n1947",loc:[-85.634514,41.941837]},n1948:{id:"n1948",loc:[-85.634485,41.942005]},n1949:{id:"n1949",loc:[-85.63457,41.942202]},n195:{id:"n195",loc:[-85.636565,41.94249]},n1950:{id:"n1950",loc:[-85.634869,41.942769]},n1951:{id:"n1951",loc:[-85.634943,41.942792]},n1952:{id:"n1952",loc:[-85.635139,41.942882]},n1953:{id:"n1953",loc:[-85.634962,41.943161]},n1954:{id:"n1954",loc:[-85.635002,41.943131]},n1955:{id:"n1955",loc:[-85.635005,41.943091]},n1956:{id:"n1956",loc:[-85.635216,41.943033]},n1957:{id:"n1957",loc:[-85.634817,41.94267]},n1958:{id:"n1958",loc:[-85.634614,41.942599]},n1959:{id:"n1959",loc:[-85.634494,41.942381]},n196:{id:"n196",loc:[-85.636565,41.942474]},n1960:{id:"n1960",loc:[-85.634486,41.9423]},n1961:{id:"n1961",loc:[-85.634671,41.941795]},n1962:{id:"n1962",loc:[-85.634595,41.941831]},n1963:{id:"n1963",loc:[-85.634332,41.941866]},n1964:{id:"n1964",loc:[-85.634207,41.941885]},n1965:{id:"n1965",loc:[-85.634133,41.941892]},n1966:{id:"n1966",loc:[-85.634131,41.942203]},n1967:{id:"n1967",loc:[-85.634047,41.942327]},n1968:{id:"n1968",loc:[-85.634219,41.942793]},n1969:{id:"n1969",loc:[-85.634061,41.942392]},n197:{id:"n197",loc:[-85.636514,41.942474]},n1970:{id:"n1970",loc:[-85.633989,41.942407]},n1971:{id:"n1971",loc:[-85.633971,41.942356]},n1972:{id:"n1972",loc:[-85.63361,41.942423]},n1973:{id:"n1973",loc:[-85.633714,41.942682]},n1974:{id:"n1974",loc:[-85.633698,41.942863]},n1975:{id:"n1975",loc:[-85.633882,41.942865]},n1976:{id:"n1976",loc:[-85.633941,41.943007]},n1977:{id:"n1977",loc:[-85.633887,41.943035]},n1978:{id:"n1978",loc:[-85.633768,41.942815]},n1979:{id:"n1979",loc:[-85.633682,41.942351]},n198:{id:"n198",loc:[-85.636514,41.942326]},n1980:{id:"n1980",loc:[-85.634037,41.942273]},n1981:{id:"n1981",loc:[-85.634029,41.942252]},n1982:{id:"n1982",loc:[-85.633673,41.942331]},n1983:{id:"n1983",loc:[-85.634219,41.942571]},n1984:{id:"n1984",loc:[-85.634252,41.942565]},n1985:{id:"n1985",loc:[-85.634144,41.942299]},n1986:{id:"n1986",loc:[-85.634115,41.942306]},n1987:{id:"n1987",loc:[-85.634059,41.943094]},n1988:{id:"n1988",loc:[-85.633944,41.942903]},n1989:{id:"n1989",loc:[-85.634311,41.942821]},n199:{id:"n199",loc:[-85.636561,41.942326]},n1990:{id:"n1990",loc:[-85.634351,41.94277]},n1991:{id:"n1991",loc:[-85.634153,41.942254]},n1992:{id:"n1992",loc:[-85.634092,41.94222]},n1993:{id:"n1993",loc:[-85.633571,41.942336]},n1994:{id:"n1994",loc:[-85.633513,41.942387]},n1995:{id:"n1995",loc:[-85.633509,41.942455]},n1996:{id:"n1996",loc:[-85.63363,41.942665]},n1997:{id:"n1997",loc:[-85.63414,41.94286]},n1998:{id:"n1998",loc:[-85.63397,41.942449]},n1999:{id:"n1999",loc:[-85.633551,41.942529]},n2:{id:"n2",loc:[-85.627421,41.953877]},n20:{id:"n20",loc:[-85.633013,41.941438]},n200:{id:"n200",loc:[-85.636561,41.942311]},n2000:{id:"n2000",loc:[-85.633741,41.942493]},n2001:{id:"n2001",loc:[-85.633894,41.942869]},n2002:{id:"n2002",loc:[-85.634132,41.941954]},n2003:{id:"n2003",loc:[-85.634032,41.942038]},n2004:{id:"n2004",loc:[-85.633765,41.942238]},n2005:{id:"n2005",loc:[-85.63376,41.942268]},n2006:{id:"n2006",loc:[-85.633768,41.942293]},n2007:{id:"n2007",loc:[-85.633808,41.942386]},n2008:{id:"n2008",loc:[-85.634946,41.941663]},n2009:{id:"n2009",loc:[-85.63511,41.941697]},n201:{id:"n201",loc:[-85.636621,41.942311]},n2010:{id:"n2010",loc:[-85.635337,41.94168]},n2011:{id:"n2011",loc:[-85.634997,41.942251]},n2012:{id:"n2012",loc:[-85.635013,41.942173]},n2013:{id:"n2013",loc:[-85.634876,41.942157]},n2014:{id:"n2014",loc:[-85.634859,41.942235]},n2015:{id:"n2015",loc:[-85.634992,41.941951]},n2016:{id:"n2016",loc:[-85.634952,41.941877]},n2017:{id:"n2017",loc:[-85.634844,41.94191]},n2018:{id:"n2018",loc:[-85.634884,41.941983]},n2019:{id:"n2019",loc:[-85.635189,41.941691]},n202:{id:"n202",loc:[-85.636621,41.942351]},n2020:{id:"n2020",loc:[-85.635089,41.941896]},n2021:{id:"n2021",loc:[-85.635077,41.941964]},n2022:{id:"n2022",loc:[-85.635058,41.942147]},n2023:{id:"n2023",loc:[-85.635099,41.942161]},n2024:{id:"n2024",loc:[-85.635099,41.942213]},n2025:{id:"n2025",loc:[-85.635079,41.942285]},n2026:{id:"n2026",loc:[-85.635047,41.942316]},n2027:{id:"n2027",loc:[-85.634925,41.9423]},n2028:{id:"n2028",loc:[-85.634911,41.942276]},n2029:{id:"n2029",loc:[-85.634917,41.942242]},n203:{id:"n203",loc:[-85.63666,41.942351]},n2030:{id:"n2030",loc:[-85.634698,41.941898]},n2031:{id:"n2031",loc:[-85.634964,41.941878]},n2032:{id:"n2032",loc:[-85.635025,41.941929]},n2033:{id:"n2033",loc:[-85.634862,41.941887]},n2034:{id:"n2034",loc:[-85.634811,41.94181]},n2035:{id:"n2035",loc:[-85.634731,41.941745]},n2036:{id:"n2036",loc:[-85.634933,41.94176]},n2037:{id:"n2037",loc:[-85.634942,41.942145]},n2038:{id:"n2038",loc:[-85.634944,41.942065]},n2039:{id:"n2039",loc:[-85.634914,41.941996]},n204:{id:"n204",loc:[-85.63666,41.942453]},n2040:{id:"n2040",loc:[-85.634981,41.941979]},n2041:{id:"n2041",loc:[-85.633419,41.942172]},n2042:{id:"n2042",loc:[-85.633509,41.941631]},n2043:{id:"n2043",loc:[-85.633686,41.942937]},n2044:{id:"n2044",loc:[-85.633371,41.942722]},n2045:{id:"n2045",loc:[-85.633291,41.942538]},n2046:{id:"n2046",loc:[-85.633902,41.940941]},n2047:{id:"n2047",loc:[-85.635254,41.940939]},n2048:{id:"n2048",loc:[-85.635686,41.940829]},n2049:{id:"n2049",loc:[-85.635712,41.942681]},n205:{id:"n205",loc:[-85.636645,41.942453]},n2050:{id:"n2050",loc:[-85.633721,41.942118]},n2051:{id:"n2051",loc:[-85.633698,41.942057]},n2052:{id:"n2052",loc:[-85.633591,41.942079]},n2053:{id:"n2053",loc:[-85.633614,41.94214]},n2054:{id:"n2054",loc:[-85.633968,41.941099]},n2055:{id:"n2055",loc:[-85.633907,41.941138]},n2056:{id:"n2056",loc:[-85.633968,41.941197]},n2057:{id:"n2057",loc:[-85.63404,41.941162]},n2058:{id:"n2058",loc:[-85.634839,41.941665]},n2059:{id:"n2059",loc:[-85.635314,41.943035]},n206:{id:"n206",loc:[-85.636394,41.942471]},n2060:{id:"n2060",loc:[-85.634919,41.943142]},n2061:{id:"n2061",loc:[-85.636433,41.942959],tags:{"addr:city":"Three Rivers","addr:housenumber":"333","addr:postcode":"49093","addr:state":"MI","addr:street":"Michigan Avenue",amenity:"townhall",name:"Three Rivers City Hall"}},n2062:{id:"n2062",loc:[-85.637039,41.942789]},n2063:{id:"n2063",loc:[-85.636333,41.94279]},n2064:{id:"n2064",loc:[-85.634484,41.940726]},n2065:{id:"n2065",loc:[-85.634483,41.940603]},n2066:{id:"n2066",loc:[-85.634908,41.940601]},n2067:{id:"n2067",loc:[-85.634908,41.94053]},n2068:{id:"n2068",loc:[-85.634934,41.94053]},n2069:{id:"n2069",loc:[-85.634934,41.940496]},n207:{id:"n207",loc:[-85.636262,41.942472]},n2070:{id:"n2070",loc:[-85.63504,41.940495]},n2071:{id:"n2071",loc:[-85.63504,41.940531]},n2072:{id:"n2072",loc:[-85.635068,41.940531]},n2073:{id:"n2073",loc:[-85.635071,41.940794]},n2074:{id:"n2074",loc:[-85.635183,41.940793]},n2075:{id:"n2075",loc:[-85.635185,41.940916]},n2076:{id:"n2076",loc:[-85.634799,41.940919]},n2077:{id:"n2077",loc:[-85.634798,41.940798]},n2078:{id:"n2078",loc:[-85.634925,41.940797]},n2079:{id:"n2079",loc:[-85.634924,41.940724]},n208:{id:"n208",loc:[-85.636261,41.94233]},n2080:{id:"n2080",loc:[-85.637448,41.938233]},n2081:{id:"n2081",loc:[-85.634168,41.943279]},n2082:{id:"n2082",loc:[-85.635744,41.938248]},n2083:{id:"n2083",loc:[-85.638744,41.951211]},n2084:{id:"n2084",loc:[-85.636421,41.946392]},n2085:{id:"n2085",loc:[-85.635965,41.945809]},n2086:{id:"n2086",loc:[-85.635683,41.945449]},n2087:{id:"n2087",loc:[-85.635281,41.945025]},n2088:{id:"n2088",loc:[-85.632443,41.942574]},n2089:{id:"n2089",loc:[-85.638243,41.943674]},n209:{id:"n209",loc:[-85.636353,41.942329]},n2090:{id:"n2090",loc:[-85.638228,41.943747]},n2091:{id:"n2091",loc:[-85.638163,41.943797]},n2092:{id:"n2092",loc:[-85.638089,41.943832]},n2093:{id:"n2093",loc:[-85.637969,41.943841]},n2094:{id:"n2094",loc:[-85.637841,41.943833]},n2095:{id:"n2095",loc:[-85.637342,41.943734]},n2096:{id:"n2096",loc:[-85.637232,41.943707]},n2097:{id:"n2097",loc:[-85.637163,41.943668]},n2098:{id:"n2098",loc:[-85.637118,41.943615]},n2099:{id:"n2099",loc:[-85.637078,41.943494]},n21:{id:"n21",loc:[-85.634126,41.942228]},n210:{id:"n210",loc:[-85.636354,41.94239]},n2100:{id:"n2100",loc:[-85.632903,41.998429],tags:{railway:"level_crossing"}},n2101:{id:"n2101",loc:[-85.633616,41.943581],tags:{railway:"level_crossing"}},n2102:{id:"n2102",loc:[-85.636943,41.947311]},n2103:{id:"n2103",loc:[-85.6376,41.94854]},n2104:{id:"n2104",loc:[-85.634565,41.93631]},n2105:{id:"n2105",loc:[-85.629597,41.942562]},n2106:{id:"n2106",loc:[-85.630821,41.943077]},n2107:{id:"n2107",loc:[-85.627473,41.940659]},n2108:{id:"n2108",loc:[-85.629708,41.942872]},n2109:{id:"n2109",loc:[-85.634093,41.935448]},n211:{id:"n211",loc:[-85.636393,41.94239]},n2110:{id:"n2110",loc:[-85.630413,41.94366]},n2111:{id:"n2111",loc:[-85.630488,41.942662]},n2112:{id:"n2112",loc:[-85.63361,41.936749]},n2113:{id:"n2113",loc:[-85.630038,41.941808]},n2114:{id:"n2114",loc:[-85.632016,41.942922]},n2115:{id:"n2115",loc:[-85.631525,41.944303]},n2116:{id:"n2116",loc:[-85.626862,41.94022]},n2117:{id:"n2117",loc:[-85.629673,41.94121]},n2118:{id:"n2118",loc:[-85.632752,41.943101]},n2119:{id:"n2119",loc:[-85.631147,41.943201]},n212:{id:"n212",loc:[-85.63444,41.943176]},n2120:{id:"n2120",loc:[-85.624974,41.940579]},n2121:{id:"n2121",loc:[-85.629518,41.941783]},n2122:{id:"n2122",loc:[-85.632349,41.942699]},n2123:{id:"n2123",loc:[-85.628418,41.940356]},n2124:{id:"n2124",loc:[-85.629147,41.94129]},n2125:{id:"n2125",loc:[-85.631111,41.943979]},n2126:{id:"n2126",loc:[-85.632087,41.940013]},n2127:{id:"n2127",loc:[-85.634469,41.935057]},n2128:{id:"n2128",loc:[-85.630097,41.943449]},n2129:{id:"n2129",loc:[-85.6331,41.937878]},n213:{id:"n213",loc:[-85.63375,41.942814]},n2130:{id:"n2130",loc:[-85.625274,41.941114]},n2131:{id:"n2131",loc:[-85.632632,41.941217]},n2132:{id:"n2132",loc:[-85.632739,41.941926]},n2133:{id:"n2133",loc:[-85.631647,41.94366]},n2134:{id:"n2134",loc:[-85.635059,41.935456]},n2135:{id:"n2135",loc:[-85.631259,41.944349]},n2136:{id:"n2136",loc:[-85.626336,41.940811]},n2137:{id:"n2137",loc:[-85.631507,41.943875]},n2138:{id:"n2138",loc:[-85.625081,41.940859]},n2139:{id:"n2139",loc:[-85.625778,41.940093]},n214:{id:"n214",loc:[-85.633674,41.942869]},n2140:{id:"n2140",loc:[-85.632641,41.942436]},n2141:{id:"n2141",loc:[-85.628825,41.941034]},n2142:{id:"n2142",loc:[-85.627913,41.940292]},n2143:{id:"n2143",loc:[-85.628943,41.940516]},n2144:{id:"n2144",loc:[-85.63139,41.943941]},n2145:{id:"n2145",loc:[-85.630081,41.94204]},n2146:{id:"n2146",loc:[-85.632194,41.93963]},n2147:{id:"n2147",loc:[-85.632913,41.93939]},n2148:{id:"n2148",loc:[-85.632001,41.943492]},n2149:{id:"n2149",loc:[-85.63149,41.943154]},n215:{id:"n215",loc:[-85.633542,41.942768]},n2150:{id:"n2150",loc:[-85.625167,41.940117]},n2151:{id:"n2151",loc:[-85.63287,41.939941]},n2152:{id:"n2152",loc:[-85.630789,41.943732]},n2153:{id:"n2153",loc:[-85.632173,41.940348]},n2154:{id:"n2154",loc:[-85.626587,41.940113]},n2155:{id:"n2155",loc:[-85.62684,41.940667]},n2156:{id:"n2156",loc:[-85.632527,41.938904]},n2157:{id:"n2157",loc:[-85.624866,41.94018]},n2158:{id:"n2158",loc:[-85.633267,41.93872]},n2159:{id:"n2159",loc:[-85.62934,41.940843]},n216:{id:"n216",loc:[-85.633618,41.942714]},n2160:{id:"n2160",loc:[-85.62272,41.953817]},n2161:{id:"n2161",loc:[-85.622555,41.954453]},n2162:{id:"n2162",loc:[-85.637225,41.944128]},n2163:{id:"n2163",loc:[-85.622628,41.953683]},n2164:{id:"n2164",loc:[-85.635441,41.943989]},n2165:{id:"n2165",loc:[-85.622629,41.953807]},n2166:{id:"n2166",loc:[-85.62262,41.953807]},n2167:{id:"n2167",loc:[-85.62262,41.953837]},n2168:{id:"n2168",loc:[-85.622532,41.953838]},n2169:{id:"n2169",loc:[-85.637469,41.944579]},n217:{id:"n217",loc:[-85.634001,41.942336]},n2170:{id:"n2170",loc:[-85.63688,41.943935]},n2171:{id:"n2171",loc:[-85.638263,41.946367]},n2172:{id:"n2172",loc:[-85.622532,41.953807]},n2173:{id:"n2173",loc:[-85.622353,41.953808]},n2174:{id:"n2174",loc:[-85.622352,41.953685]},n2175:{id:"n2175",loc:[-85.622464,41.953684]},n2176:{id:"n2176",loc:[-85.622464,41.953648]},n2177:{id:"n2177",loc:[-85.637136,41.94576]},n2178:{id:"n2178",loc:[-85.622521,41.953648]},n2179:{id:"n2179",loc:[-85.637129,41.945415]},n218:{id:"n218",loc:[-85.633825,41.942376]},n2180:{id:"n2180",loc:[-85.637473,41.94607]},n2181:{id:"n2181",loc:[-85.622521,41.953683]},n2182:{id:"n2182",loc:[-85.622717,41.954104]},n2183:{id:"n2183",loc:[-85.637769,41.946095]},n2184:{id:"n2184",loc:[-85.623872,41.953515]},n2185:{id:"n2185",loc:[-85.623851,41.953588]},n2186:{id:"n2186",loc:[-85.631385,41.94433]},n2187:{id:"n2187",loc:[-85.623608,41.953543]},n2188:{id:"n2188",loc:[-85.637308,41.944882]},n2189:{id:"n2189",loc:[-85.634898,41.944041]},n219:{id:"n219",loc:[-85.633807,41.942334]},n2190:{id:"n2190",loc:[-85.623604,41.953442]},n2191:{id:"n2191",loc:[-85.623705,41.953442]},n2192:{id:"n2192",loc:[-85.623708,41.953493]},n2193:{id:"n2193",loc:[-85.624064,41.952655]},n2194:{id:"n2194",loc:[-85.62395,41.952654]},n2195:{id:"n2195",loc:[-85.623951,41.952579]},n2196:{id:"n2196",loc:[-85.637435,41.944342]},n2197:{id:"n2197",loc:[-85.624064,41.952579]},n2198:{id:"n2198",loc:[-85.623812,41.952648]},n2199:{id:"n2199",loc:[-85.623813,41.952705]},n22:{id:"n22",loc:[-85.633531,41.942357]},n220:{id:"n220",loc:[-85.633983,41.942294]},n2200:{id:"n2200",loc:[-85.637169,41.945098]},n2201:{id:"n2201",loc:[-85.623552,41.952707]},n2202:{id:"n2202",loc:[-85.623551,41.95263]},n2203:{id:"n2203",loc:[-85.623701,41.952629]},n2204:{id:"n2204",loc:[-85.635894,41.943719]},n2205:{id:"n2205",loc:[-85.637297,41.945992]},n2206:{id:"n2206",loc:[-85.623724,41.952648]},n2207:{id:"n2207",loc:[-85.623812,41.952438]},n2208:{id:"n2208",loc:[-85.625239,41.952197]},n2209:{id:"n2209",loc:[-85.625232,41.952257]},n221:{id:"n221",loc:[-85.634182,41.942495]},n2210:{id:"n2210",loc:[-85.635175,41.94408]},n2211:{id:"n2211",loc:[-85.636381,41.943761]},n2212:{id:"n2212",loc:[-85.625115,41.952249]},n2213:{id:"n2213",loc:[-85.638578,41.946644]},n2214:{id:"n2214",loc:[-85.625122,41.952189]},n2215:{id:"n2215",loc:[-85.625085,41.952031]},n2216:{id:"n2216",loc:[-85.636126,41.943713]},n2217:{id:"n2217",loc:[-85.635005,41.944041]},n2218:{id:"n2218",loc:[-85.63714,41.945328]},n2219:{id:"n2219",loc:[-85.634871,41.943292]},n222:{id:"n222",loc:[-85.634149,41.942503]},n2220:{id:"n2220",loc:[-85.635705,41.943799]},n2221:{id:"n2221",loc:[-85.634995,41.943576]},n2222:{id:"n2222",loc:[-85.635026,41.943829]},n2223:{id:"n2223",loc:[-85.632874,41.941031]},n2224:{id:"n2224",loc:[-85.632531,41.940233]},n2225:{id:"n2225",loc:[-85.634247,41.936003]},n2226:{id:"n2226",loc:[-85.62929,41.941127]},n2227:{id:"n2227",loc:[-85.630428,41.943266]},n2228:{id:"n2228",loc:[-85.631608,41.943425]},n2229:{id:"n2229",loc:[-85.632316,41.943042]},n223:{id:"n223",loc:[-85.634098,41.942373]},n2230:{id:"n2230",loc:[-85.628711,41.940744]},n2231:{id:"n2231",loc:[-85.627831,41.940536]},n2232:{id:"n2232",loc:[-85.625514,41.94052]},n2233:{id:"n2233",loc:[-85.631127,41.943545]},n2234:{id:"n2234",loc:[-85.632909,41.942531]},n2235:{id:"n2235",loc:[-85.632917,41.938796]},n2236:{id:"n2236",loc:[-85.626716,41.94044]},n2237:{id:"n2237",loc:[-85.630122,41.942852]},n2238:{id:"n2238",loc:[-85.632509,41.939674]},n2239:{id:"n2239",loc:[-85.634762,41.935237]},n224:{id:"n224",loc:[-85.634131,41.942366]},n2240:{id:"n2240",loc:[-85.63384,41.937025]},n2241:{id:"n2241",loc:[-85.629741,41.941909]},n2242:{id:"n2242",loc:[-85.635254,41.945001],tags:{railway:"level_crossing"}},n2243:{id:"n2243",loc:[-85.634005,41.938168]},n2244:{id:"n2244",loc:[-85.63393,41.938335]},n2245:{id:"n2245",loc:[-85.633859,41.93846]},n2246:{id:"n2246",loc:[-85.633663,41.938776]},n2247:{id:"n2247",loc:[-85.633513,41.938936]},n2248:{id:"n2248",loc:[-85.635295,41.943225]},n2249:{id:"n2249",loc:[-85.635393,41.943293]},n225:{id:"n225",loc:[-85.635986,41.94177]},n2250:{id:"n2250",loc:[-85.635645,41.94332]},n2251:{id:"n2251",loc:[-85.63629,41.943328]},n2252:{id:"n2252",loc:[-85.636554,41.943372]},n2253:{id:"n2253",loc:[-85.636869,41.943526]},n2254:{id:"n2254",loc:[-85.637099,41.943704]},n2255:{id:"n2255",loc:[-85.637268,41.943773]},n2256:{id:"n2256",loc:[-85.637483,41.943821]},n2257:{id:"n2257",loc:[-85.637616,41.943929]},n2258:{id:"n2258",loc:[-85.637752,41.944114]},n2259:{id:"n2259",loc:[-85.638399,41.944308]},n226:{id:"n226",loc:[-85.635982,41.941523]},n2260:{id:"n2260",loc:[-85.638573,41.944451]},n2261:{id:"n2261",loc:[-85.638702,41.944574]},n2262:{id:"n2262",loc:[-85.638718,41.944652]},n2263:{id:"n2263",loc:[-85.638715,41.944809]},n2264:{id:"n2264",loc:[-85.638766,41.944988]},n2265:{id:"n2265",loc:[-85.638773,41.945136]},n2266:{id:"n2266",loc:[-85.638705,41.945251]},n2267:{id:"n2267",loc:[-85.638335,41.944291]},n2268:{id:"n2268",loc:[-85.638474,41.944352]},n2269:{id:"n2269",loc:[-85.635408,41.943429]},n227:{id:"n227",loc:[-85.636108,41.941521]},n2270:{id:"n2270",loc:[-85.635271,41.943654]},n2271:{id:"n2271",loc:[-85.635266,41.943744]},n2272:{id:"n2272",loc:[-85.635271,41.943819]},n2273:{id:"n2273",loc:[-85.635192,41.943876]},n2274:{id:"n2274",loc:[-85.635129,41.943857]},n2275:{id:"n2275",loc:[-85.635122,41.943764]},n2276:{id:"n2276",loc:[-85.635124,41.943664]},n2277:{id:"n2277",loc:[-85.63515,41.943611]},n2278:{id:"n2278",loc:[-85.635106,41.943534]},n2279:{id:"n2279",loc:[-85.634972,41.943197]},n228:{id:"n228",loc:[-85.636109,41.941559]},n2280:{id:"n2280",loc:[-85.633978,41.938227]},n2281:{id:"n2281",loc:[-85.634216,41.943255]},n2282:{id:"n2282",loc:[-85.634434,41.943622]},n2283:{id:"n2283",loc:[-85.632406,41.940854]},n2284:{id:"n2284",loc:[-85.632488,41.941063],tags:{leisure:"slipway"}},n2285:{id:"n2285",loc:[-85.632726,41.941537]},n2286:{id:"n2286",loc:[-85.632639,41.94136]},n2287:{id:"n2287",loc:[-85.632704,41.941439]},n2288:{id:"n2288",loc:[-85.632289,41.940601]},n2289:{id:"n2289",loc:[-85.632541,41.942526]},n229:{id:"n229",loc:[-85.636145,41.941559]},n2290:{id:"n2290",loc:[-85.634058,41.943173]},n2291:{id:"n2291",loc:[-85.636175,41.945974]},n2292:{id:"n2292",loc:[-85.636528,41.945975]},n2293:{id:"n2293",loc:[-85.637092,41.945893]},n2294:{id:"n2294",loc:[-85.637881,41.945647]},n2295:{id:"n2295",loc:[-85.639329,41.945162]},n2296:{id:"n2296",loc:[-85.639323,41.945026]},n2297:{id:"n2297",loc:[-85.638826,41.945032]},n2298:{id:"n2298",loc:[-85.638817,41.944174]},n2299:{id:"n2299",loc:[-85.638291,41.94418]},n23:{id:"n23",loc:[-85.633504,41.942418]},n230:{id:"n230",loc:[-85.636145,41.941551]},n2300:{id:"n2300",loc:[-85.63828,41.943811]},n2301:{id:"n2301",loc:[-85.638195,41.943601]},n2302:{id:"n2302",loc:[-85.63719,41.943592]},n2303:{id:"n2303",loc:[-85.636697,41.943273]},n2304:{id:"n2304",loc:[-85.635375,41.943274]},n2305:{id:"n2305",loc:[-85.635091,41.943547]},n2306:{id:"n2306",loc:[-85.63442,41.944117]},n2307:{id:"n2307",loc:[-85.635117,41.943717]},n2308:{id:"n2308",loc:[-85.635601,41.945177]},n2309:{id:"n2309",loc:[-85.635819,41.945494]},n231:{id:"n231",loc:[-85.636312,41.941549]},n2310:{id:"n2310",loc:[-85.635303,41.944891]},n2311:{id:"n2311",loc:[-85.637674,41.943802]},n2312:{id:"n2312",loc:[-85.638263,41.944272]},n2313:{id:"n2313",loc:[-85.634267,41.935266]},n2314:{id:"n2314",loc:[-85.639788,41.945152]},n2315:{id:"n2315",loc:[-85.639645,41.945167]},n2316:{id:"n2316",loc:[-85.639362,41.945233]},n2317:{id:"n2317",loc:[-85.638616,41.945163]},n2318:{id:"n2318",loc:[-85.638514,41.944936]},n2319:{id:"n2319",loc:[-85.638578,41.94503]},n232:{id:"n232",loc:[-85.636314,41.941649]},n2320:{id:"n2320",loc:[-85.638578,41.945215]},n2321:{id:"n2321",loc:[-85.640495,41.947015]},n2322:{id:"n2322",loc:[-85.639577,41.946495]},n2323:{id:"n2323",loc:[-85.638935,41.946087]},n2324:{id:"n2324",loc:[-85.637535,41.94584]},n2325:{id:"n2325",loc:[-85.638357,41.945404]},n2326:{id:"n2326",loc:[-85.638051,41.94553]},n2327:{id:"n2327",loc:[-85.637732,41.945555]},n2328:{id:"n2328",loc:[-85.637657,41.945524]},n2329:{id:"n2329",loc:[-85.637598,41.945467]},n233:{id:"n233",loc:[-85.636152,41.94165]},n2330:{id:"n2330",loc:[-85.637669,41.945318]},n2331:{id:"n2331",loc:[-85.637894,41.945171]},n2332:{id:"n2332",loc:[-85.637923,41.945082]},n2333:{id:"n2333",loc:[-85.63793,41.944756]},n2334:{id:"n2334",loc:[-85.637976,41.944696]},n2335:{id:"n2335",loc:[-85.638044,41.944671]},n2336:{id:"n2336",loc:[-85.638129,41.944597]},n2337:{id:"n2337",loc:[-85.638252,41.944413]},n2338:{id:"n2338",loc:[-85.638092,41.945442]},n2339:{id:"n2339",loc:[-85.638409,41.945315]},n234:{id:"n234",loc:[-85.636152,41.941628]},n2340:{id:"n2340",loc:[-85.638325,41.944771]},n2341:{id:"n2341",loc:[-85.638103,41.944744]},n2342:{id:"n2342",loc:[-85.637976,41.944781]},n2343:{id:"n2343",loc:[-85.637983,41.944865]},n2344:{id:"n2344",loc:[-85.638063,41.945074]},n2345:{id:"n2345",loc:[-85.638041,41.945206]},n2346:{id:"n2346",loc:[-85.637907,41.945309]},n2347:{id:"n2347",loc:[-85.637925,41.94539]},n2348:{id:"n2348",loc:[-85.637998,41.94545]},n2349:{id:"n2349",loc:[-85.637135,41.946254]},n235:{id:"n235",loc:[-85.63611,41.941628]},n2350:{id:"n2350",loc:[-85.636837,41.946615]},n2351:{id:"n2351",loc:[-85.637954,41.948909]},n2352:{id:"n2352",loc:[-85.638382,41.949786]},n2353:{id:"n2353",loc:[-85.639367,41.951242]},n2354:{id:"n2354",loc:[-85.640554,41.951777]},n2355:{id:"n2355",loc:[-85.6411,41.952234]},n2356:{id:"n2356",loc:[-85.641742,41.952657]},n2357:{id:"n2357",loc:[-85.642321,41.952941]},n2358:{id:"n2358",loc:[-85.64277,41.953228]},n2359:{id:"n2359",loc:[-85.643333,41.953825]},n236:{id:"n236",loc:[-85.636113,41.941768]},n2360:{id:"n2360",loc:[-85.643579,41.954365]},n2361:{id:"n2361",loc:[-85.644439,41.954105]},n2362:{id:"n2362",loc:[-85.64506,41.954]},n2363:{id:"n2363",loc:[-85.645483,41.953911]},n2364:{id:"n2364",loc:[-85.646046,41.953853]},n2365:{id:"n2365",loc:[-85.646318,41.953717]},n2366:{id:"n2366",loc:[-85.646276,41.953414]},n2367:{id:"n2367",loc:[-85.631063,41.957478],tags:{emergency:"fire_hydrant"}},n2368:{id:"n2368",loc:[-85.630996,41.955857],tags:{emergency:"fire_hydrant"}},n2369:{id:"n2369",loc:[-85.630976,41.954608],tags:{emergency:"fire_hydrant"}},n237:{id:"n237",loc:[-85.635983,41.941589],tags:{entrance:"yes"}},n2370:{id:"n2370",loc:[-85.646,41.953154]},n2371:{id:"n2371",loc:[-85.645222,41.953193]},n2372:{id:"n2372",loc:[-85.644732,41.953181]},n2373:{id:"n2373",loc:[-85.644064,41.953298]},n2374:{id:"n2374",loc:[-85.643818,41.953177]},n2375:{id:"n2375",loc:[-85.644001,41.95284]},n2376:{id:"n2376",loc:[-85.628174,41.95456],tags:{emergency:"fire_hydrant"}},n2377:{id:"n2377",loc:[-85.644267,41.952591]},n2378:{id:"n2378",loc:[-85.644288,41.952328]},n2379:{id:"n2379",loc:[-85.627276,41.953987],tags:{emergency:"fire_hydrant"}},n238:{id:"n238",loc:[-85.635906,41.94159]},n2380:{id:"n2380",loc:[-85.644262,41.952153]},n2381:{id:"n2381",loc:[-85.644168,41.95204]},n2382:{id:"n2382",loc:[-85.64421,41.951749]},n2383:{id:"n2383",loc:[-85.64385,41.951586]},n2384:{id:"n2384",loc:[-85.62736,41.955964],tags:{emergency:"fire_hydrant"}},n2385:{id:"n2385",loc:[-85.626307,41.957198],tags:{emergency:"fire_hydrant"}},n2386:{id:"n2386",loc:[-85.643589,41.951323]},n2387:{id:"n2387",loc:[-85.62747,41.957509],tags:{emergency:"fire_hydrant"}},n2388:{id:"n2388",loc:[-85.628665,41.957492],tags:{emergency:"fire_hydrant"}},n2389:{id:"n2389",loc:[-85.642535,41.951031]},n239:{id:"n239",loc:[-85.635883,41.940182]},n2390:{id:"n2390",loc:[-85.642269,41.95088]},n2391:{id:"n2391",loc:[-85.641878,41.950814]},n2392:{id:"n2392",loc:[-85.641549,41.950806]},n2393:{id:"n2393",loc:[-85.641103,41.950549]},n2394:{id:"n2394",loc:[-85.630864,41.959046],tags:{emergency:"fire_hydrant"}},n2395:{id:"n2395",loc:[-85.632249,41.958969],tags:{emergency:"fire_hydrant"}},n2396:{id:"n2396",loc:[-85.641037,41.949821]},n2397:{id:"n2397",loc:[-85.641006,41.949433]},n2398:{id:"n2398",loc:[-85.632232,41.95859],tags:{emergency:"fire_hydrant"}},n2399:{id:"n2399",loc:[-85.632071,41.958345],tags:{emergency:"fire_hydrant"}},n24:{id:"n24",loc:[-85.634346,41.942792]},n240:{id:"n240",loc:[-85.635916,41.94264]},n2400:{id:"n2400",loc:[-85.632228,41.9573],tags:{emergency:"fire_hydrant"}},n2401:{id:"n2401",loc:[-85.641152,41.948257]},n2402:{id:"n2402",loc:[-85.641055,41.947304]},n2403:{id:"n2403",loc:[-85.638022,41.945897]},n2404:{id:"n2404",loc:[-85.638672,41.950778]},n2405:{id:"n2405",loc:[-85.63666,41.944492],tags:{name:"Memory Isle",place:"island"}},n2406:{id:"n2406",loc:[-85.635,41.946389],tags:{amenity:"post_office",name:"Three Rivers Post Office"}},n2407:{id:"n2407",loc:[-85.633676,41.946036]},n2408:{id:"n2408",loc:[-85.633736,41.946078]},n2409:{id:"n2409",loc:[-85.633997,41.946185]},n241:{id:"n241",loc:[-85.635795,41.941906]},n2410:{id:"n2410",loc:[-85.634448,41.945626],tags:{highway:"traffic_signals",traffic_signals:"signal"}},n2411:{id:"n2411",loc:[-85.63456,41.945731],tags:{crossing:"marked",highway:"crossing"}},n2412:{id:"n2412",loc:[-85.634592,41.94578]},n2413:{id:"n2413",loc:[-85.634607,41.945815]},n2414:{id:"n2414",loc:[-85.634614,41.945864]},n2415:{id:"n2415",loc:[-85.636066,41.946185]},n2416:{id:"n2416",loc:[-85.636128,41.946352]},n2417:{id:"n2417",loc:[-85.636142,41.946452]},n2418:{id:"n2418",loc:[-85.635327,41.945292]},n2419:{id:"n2419",loc:[-85.635648,41.94558]},n242:{id:"n242",loc:[-85.635909,41.941906]},n2420:{id:"n2420",loc:[-85.635769,41.945729]},n2421:{id:"n2421",loc:[-85.637349,41.945897]},n2422:{id:"n2422",loc:[-85.632211,41.95596],tags:{emergency:"fire_hydrant"}},n2423:{id:"n2423",loc:[-85.635942,41.94598]},n2424:{id:"n2424",loc:[-85.636443,41.946042]},n2425:{id:"n2425",loc:[-85.635819,41.946052]},n2426:{id:"n2426",loc:[-85.636669,41.946025]},n2427:{id:"n2427",loc:[-85.636832,41.946005]},n2428:{id:"n2428",loc:[-85.637039,41.945968]},n2429:{id:"n2429",loc:[-85.636291,41.946046]},n243:{id:"n243",loc:[-85.636359,41.941904]},n2430:{id:"n2430",loc:[-85.634005,41.943367]},n2431:{id:"n2431",loc:[-85.633366,41.943724]},n2432:{id:"n2432",loc:[-85.634617,41.946057]},n2433:{id:"n2433",loc:[-85.636534,41.944793]},n2434:{id:"n2434",loc:[-85.637055,41.945188]},n2435:{id:"n2435",loc:[-85.636153,41.944618]},n2436:{id:"n2436",loc:[-85.636803,41.944944]},n2437:{id:"n2437",loc:[-85.633389,41.945735]},n2438:{id:"n2438",loc:[-85.633536,41.94585]},n2439:{id:"n2439",loc:[-85.63363,41.945993]},n244:{id:"n244",loc:[-85.636351,41.941438]},n2440:{id:"n2440",loc:[-85.633268,41.94568]},n2441:{id:"n2441",loc:[-85.635947,41.94546]},n2442:{id:"n2442",loc:[-85.636277,41.945268]},n2443:{id:"n2443",loc:[-85.635203,41.944287]},n2444:{id:"n2444",loc:[-85.634876,41.944477]},n2445:{id:"n2445",loc:[-85.634975,41.944419]},n2446:{id:"n2446",loc:[-85.633877,41.943438]},n2447:{id:"n2447",loc:[-85.63508,41.945113]},n2448:{id:"n2448",loc:[-85.635372,41.944932]},n2449:{id:"n2449",loc:[-85.636594,41.945935]},n245:{id:"n245",loc:[-85.635903,41.941436]},n2450:{id:"n2450",loc:[-85.636901,41.945747]},n2451:{id:"n2451",loc:[-85.636329,41.945228]},n2452:{id:"n2452",loc:[-85.636025,41.945417]},n2453:{id:"n2453",loc:[-85.634002,41.944644]},n2454:{id:"n2454",loc:[-85.63407,41.944692]},n2455:{id:"n2455",loc:[-85.634114,41.944756]},n2456:{id:"n2456",loc:[-85.633762,41.944809]},n2457:{id:"n2457",loc:[-85.634184,41.944807]},n2458:{id:"n2458",loc:[-85.634291,41.944819]},n2459:{id:"n2459",loc:[-85.634639,41.944845]},n246:{id:"n246",loc:[-85.635788,41.941436]},n2460:{id:"n2460",loc:[-85.633822,41.944861]},n2461:{id:"n2461",loc:[-85.63411,41.944855]},n2462:{id:"n2462",loc:[-85.63435,41.944872]},n2463:{id:"n2463",loc:[-85.63441,41.944903]},n2464:{id:"n2464",loc:[-85.633883,41.944913]},n2465:{id:"n2465",loc:[-85.634164,41.944896]},n2466:{id:"n2466",loc:[-85.633487,41.944926]},n2467:{id:"n2467",loc:[-85.634736,41.944929]},n2468:{id:"n2468",loc:[-85.633944,41.944965]},n2469:{id:"n2469",loc:[-85.633555,41.944983]},n247:{id:"n247",loc:[-85.635929,41.941511]},n2470:{id:"n2470",loc:[-85.633995,41.945013]},n2471:{id:"n2471",loc:[-85.633614,41.945037]},n2472:{id:"n2472",loc:[-85.634848,41.945031]},n2473:{id:"n2473",loc:[-85.634049,41.945061]},n2474:{id:"n2474",loc:[-85.633678,41.945094]},n2475:{id:"n2475",loc:[-85.63317,41.945111]},n2476:{id:"n2476",loc:[-85.633357,41.945103]},n2477:{id:"n2477",loc:[-85.633728,41.945136]},n2478:{id:"n2478",loc:[-85.634146,41.945148]},n2479:{id:"n2479",loc:[-85.633416,41.945157]},n248:{id:"n248",loc:[-85.635929,41.941317]},n2480:{id:"n2480",loc:[-85.634625,41.945172]},n2481:{id:"n2481",loc:[-85.633239,41.945174]},n2482:{id:"n2482",loc:[-85.63469,41.945185]},n2483:{id:"n2483",loc:[-85.634661,41.945203]},n2484:{id:"n2484",loc:[-85.63348,41.945214]},n2485:{id:"n2485",loc:[-85.633578,41.945221]},n2486:{id:"n2486",loc:[-85.634742,41.945231]},n2487:{id:"n2487",loc:[-85.634251,41.94525]},n2488:{id:"n2488",loc:[-85.633524,41.945254]},n2489:{id:"n2489",loc:[-85.63468,41.945271]},n249:{id:"n249",loc:[-85.636414,41.941316]},n2490:{id:"n2490",loc:[-85.633885,41.945272]},n2491:{id:"n2491",loc:[-85.634795,41.945288]},n2492:{id:"n2492",loc:[-85.634742,41.94532]},n2493:{id:"n2493",loc:[-85.633946,41.945327]},n2494:{id:"n2494",loc:[-85.634844,41.945331]},n2495:{id:"n2495",loc:[-85.63435,41.945349]},n2496:{id:"n2496",loc:[-85.633733,41.945357]},n2497:{id:"n2497",loc:[-85.633987,41.945375]},n2498:{id:"n2498",loc:[-85.634911,41.945419]},n2499:{id:"n2499",loc:[-85.634049,41.945431]},n25:{id:"n25",loc:[-85.634333,41.942809]},n250:{id:"n250",loc:[-85.636414,41.941511]},n2500:{id:"n2500",loc:[-85.633705,41.945461]},n2501:{id:"n2501",loc:[-85.633642,41.945408]},n2502:{id:"n2502",loc:[-85.634493,41.945475]},n2503:{id:"n2503",loc:[-85.634106,41.945484]},n2504:{id:"n2504",loc:[-85.635008,41.945505]},n2505:{id:"n2505",loc:[-85.633757,41.945506]},n2506:{id:"n2506",loc:[-85.634542,41.945519]},n2507:{id:"n2507",loc:[-85.634162,41.945536]},n2508:{id:"n2508",loc:[-85.633843,41.945547]},n2509:{id:"n2509",loc:[-85.634919,41.94556]},n251:{id:"n251",loc:[-85.636819,41.941617]},n2510:{id:"n2510",loc:[-85.633818,41.945561]},n2511:{id:"n2511",loc:[-85.634638,41.94559]},n2512:{id:"n2512",loc:[-85.633901,41.945598]},n2513:{id:"n2513",loc:[-85.634257,41.945626]},n2514:{id:"n2514",loc:[-85.633967,41.945652]},n2515:{id:"n2515",loc:[-85.634735,41.945676]},n2516:{id:"n2516",loc:[-85.635057,41.945683]},n2517:{id:"n2517",loc:[-85.635296,41.945703]},n2518:{id:"n2518",loc:[-85.635112,41.945703]},n2519:{id:"n2519",loc:[-85.634782,41.945729]},n252:{id:"n252",loc:[-85.636718,41.941619]},n2520:{id:"n2520",loc:[-85.634052,41.945747]},n2521:{id:"n2521",loc:[-85.635296,41.945757]},n2522:{id:"n2522",loc:[-85.635314,41.945757]},n2523:{id:"n2523",loc:[-85.635112,41.945761]},n2524:{id:"n2524",loc:[-85.63484,41.945778]},n2525:{id:"n2525",loc:[-85.635314,41.945938]},n2526:{id:"n2526",loc:[-85.63484,41.945922]},n2527:{id:"n2527",loc:[-85.635461,41.944879]},n2528:{id:"n2528",loc:[-85.636024,41.945384]},n2529:{id:"n2529",loc:[-85.636145,41.945312]},n253:{id:"n253",loc:[-85.636716,41.941509]},n2530:{id:"n2530",loc:[-85.6356,41.944797]},n2531:{id:"n2531",loc:[-85.635135,41.944354]},n2532:{id:"n2532",loc:[-85.632988,41.945369]},n2533:{id:"n2533",loc:[-85.633376,41.94563]},n2534:{id:"n2534",loc:[-85.633539,41.945534]},n2535:{id:"n2535",loc:[-85.633238,41.945248]},n2536:{id:"n2536",loc:[-85.633166,41.945216]},n2537:{id:"n2537",loc:[-85.633114,41.945188]},n2538:{id:"n2538",loc:[-85.633078,41.945127]},n2539:{id:"n2539",loc:[-85.633066,41.94508]},n254:{id:"n254",loc:[-85.636732,41.941509]},n2540:{id:"n2540",loc:[-85.633222,41.945358]},n2541:{id:"n2541",loc:[-85.633425,41.945541]},n2542:{id:"n2542",loc:[-85.63299,41.9455]},n2543:{id:"n2543",loc:[-85.634374,41.944327]},n2544:{id:"n2544",loc:[-85.633648,41.943697]},n2545:{id:"n2545",loc:[-85.633533,41.943764]},n2546:{id:"n2546",loc:[-85.634239,41.944417]},n2547:{id:"n2547",loc:[-85.634122,41.944395]},n2548:{id:"n2548",loc:[-85.634235,41.944326]},n2549:{id:"n2549",loc:[-85.633613,41.943787]},n255:{id:"n255",loc:[-85.636731,41.941461]},n2550:{id:"n2550",loc:[-85.633915,41.943613]},n2551:{id:"n2551",loc:[-85.634015,41.943555]},n2552:{id:"n2552",loc:[-85.63433,41.943839]},n2553:{id:"n2553",loc:[-85.634236,41.943894]},n2554:{id:"n2554",loc:[-85.635413,41.946052]},n2555:{id:"n2555",loc:[-85.635405,41.94569]},n2556:{id:"n2556",loc:[-85.635684,41.945925]},n2557:{id:"n2557",loc:[-85.635614,41.945742]},n2558:{id:"n2558",loc:[-85.635401,41.945745]},n2559:{id:"n2559",loc:[-85.635406,41.945928]},n256:{id:"n256",loc:[-85.636799,41.941461]},n2560:{id:"n2560",loc:[-85.633478,41.943663]},n2561:{id:"n2561",loc:[-85.633291,41.943526]},n2562:{id:"n2562",loc:[-85.633094,41.943541]},n2563:{id:"n2563",loc:[-85.633302,41.943492]},n2564:{id:"n2564",loc:[-85.633047,41.943623]},n2565:{id:"n2565",loc:[-85.633275,41.943562]},n2566:{id:"n2566",loc:[-85.633351,41.943518]},n2567:{id:"n2567",loc:[-85.633224,41.9434]},n2568:{id:"n2568",loc:[-85.633235,41.943369]},n2569:{id:"n2569",loc:[-85.635179,41.943911]},n257:{id:"n257",loc:[-85.6368,41.9415]},n2570:{id:"n2570",loc:[-85.635146,41.943918]},n2571:{id:"n2571",loc:[-85.634888,41.943905]},n2572:{id:"n2572",loc:[-85.634832,41.943911]},n2573:{id:"n2573",loc:[-85.634638,41.944007]},n2574:{id:"n2574",loc:[-85.634568,41.94405]},n2575:{id:"n2575",loc:[-85.635994,41.94501]},n2576:{id:"n2576",loc:[-85.636388,41.944608]},n2577:{id:"n2577",loc:[-85.636215,41.944787]},n2578:{id:"n2578",loc:[-85.637948,41.944587]},n2579:{id:"n2579",loc:[-85.637849,41.944567]},n258:{id:"n258",loc:[-85.636814,41.9415]},n2580:{id:"n2580",loc:[-85.637895,41.944455]},n2581:{id:"n2581",loc:[-85.637996,41.944477]},n2582:{id:"n2582",loc:[-85.635525,41.94337]},n2583:{id:"n2583",loc:[-85.637847,41.943923]},n2584:{id:"n2584",loc:[-85.637891,41.944124]},n2585:{id:"n2585",loc:[-85.638167,41.944229]},n2586:{id:"n2586",loc:[-85.638236,41.944097]},n2587:{id:"n2587",loc:[-85.638207,41.944025]},n2588:{id:"n2588",loc:[-85.638141,41.943997]},n2589:{id:"n2589",loc:[-85.638057,41.944015]},n259:{id:"n259",loc:[-85.636815,41.941538]},n2590:{id:"n2590",loc:[-85.637902,41.944231]},n2591:{id:"n2591",loc:[-85.638134,41.944307]},n2592:{id:"n2592",loc:[-85.638242,41.944294]},n2593:{id:"n2593",loc:[-85.638274,41.944222]},n2594:{id:"n2594",loc:[-85.638236,41.944174]},n2595:{id:"n2595",loc:[-85.638207,41.944157]},n2596:{id:"n2596",loc:[-85.637818,41.943984]},n2597:{id:"n2597",loc:[-85.634996,41.944439]},n2598:{id:"n2598",loc:[-85.633946,41.945804]},n2599:{id:"n2599",loc:[-85.634102,41.945864]},n26:{id:"n26",loc:[-85.634346,41.942744]},n260:{id:"n260",loc:[-85.636827,41.941538]},n2600:{id:"n2600",loc:[-85.633819,41.945756]},n2601:{id:"n2601",loc:[-85.634025,41.945975]},n2602:{id:"n2602",loc:[-85.633742,41.945867]},n2603:{id:"n2603",loc:[-85.63373,41.946004]},n2604:{id:"n2604",loc:[-85.633947,41.946081]},n2605:{id:"n2605",loc:[-85.633872,41.945917]},n2606:{id:"n2606",loc:[-85.633825,41.945985]},n2607:{id:"n2607",loc:[-85.633762,41.94596]},n2608:{id:"n2608",loc:[-85.634224,41.946037]},n2609:{id:"n2609",loc:[-85.634357,41.945851]},n261:{id:"n261",loc:[-85.636828,41.941584]},n2610:{id:"n2610",loc:[-85.634398,41.945813]},n2611:{id:"n2611",loc:[-85.634461,41.945812]},n2612:{id:"n2612",loc:[-85.634501,41.945852]},n2613:{id:"n2613",loc:[-85.634503,41.94597]},n2614:{id:"n2614",loc:[-85.634462,41.945971]},n2615:{id:"n2615",loc:[-85.634465,41.946036]},n2616:{id:"n2616",loc:[-85.634235,41.946072]},n2617:{id:"n2617",loc:[-85.634447,41.946036]},n2618:{id:"n2618",loc:[-85.634448,41.946052]},n2619:{id:"n2619",loc:[-85.634494,41.946051]},n262:{id:"n262",loc:[-85.636819,41.941585]},n2620:{id:"n2620",loc:[-85.634497,41.946144]},n2621:{id:"n2621",loc:[-85.634453,41.946144]},n2622:{id:"n2622",loc:[-85.634454,41.94616]},n2623:{id:"n2623",loc:[-85.634393,41.946161]},n2624:{id:"n2624",loc:[-85.634394,41.94618]},n2625:{id:"n2625",loc:[-85.634345,41.94618]},n2626:{id:"n2626",loc:[-85.634344,41.946162]},n2627:{id:"n2627",loc:[-85.63427,41.946163]},n2628:{id:"n2628",loc:[-85.634266,41.946071]},n2629:{id:"n2629",loc:[-85.634148,41.946163]},n263:{id:"n263",loc:[-85.636854,41.941714]},n2630:{id:"n2630",loc:[-85.634213,41.946072]},n2631:{id:"n2631",loc:[-85.633293,41.946309]},n2632:{id:"n2632",loc:[-85.633122,41.946239]},n2633:{id:"n2633",loc:[-85.633295,41.946005]},n2634:{id:"n2634",loc:[-85.633395,41.946047]},n2635:{id:"n2635",loc:[-85.633404,41.946035]},n2636:{id:"n2636",loc:[-85.633459,41.946057]},n2637:{id:"n2637",loc:[-85.633387,41.946154]},n2638:{id:"n2638",loc:[-85.633403,41.946161]},n2639:{id:"n2639",loc:[-85.634176,41.946415]},n264:{id:"n264",loc:[-85.636855,41.941774]},n2640:{id:"n2640",loc:[-85.634179,41.946339]},n2641:{id:"n2641",loc:[-85.634455,41.946345]},n2642:{id:"n2642",loc:[-85.634452,41.946422]},n2643:{id:"n2643",loc:[-85.63437,41.946421]},n2644:{id:"n2644",loc:[-85.634367,41.946497]},n2645:{id:"n2645",loc:[-85.634289,41.946495]},n2646:{id:"n2646",loc:[-85.634291,41.946448]},n2647:{id:"n2647",loc:[-85.634269,41.946448]},n2648:{id:"n2648",loc:[-85.63427,41.946417]},n2649:{id:"n2649",loc:[-85.63484,41.946328]},n265:{id:"n265",loc:[-85.636822,41.941774]},n2650:{id:"n2650",loc:[-85.634839,41.946187]},n2651:{id:"n2651",loc:[-85.635148,41.946186]},n2652:{id:"n2652",loc:[-85.635148,41.946216]},n2653:{id:"n2653",loc:[-85.63521,41.946216]},n2654:{id:"n2654",loc:[-85.63521,41.946348]},n2655:{id:"n2655",loc:[-85.635154,41.946348]},n2656:{id:"n2656",loc:[-85.635153,41.946327]},n2657:{id:"n2657",loc:[-85.634037,41.946957]},n2658:{id:"n2658",loc:[-85.634253,41.946953]},n2659:{id:"n2659",loc:[-85.63481,41.946543]},n266:{id:"n266",loc:[-85.636822,41.941778]},n2660:{id:"n2660",loc:[-85.634809,41.946459]},n2661:{id:"n2661",loc:[-85.635154,41.946458]},n2662:{id:"n2662",loc:[-85.635155,41.946554]},n2663:{id:"n2663",loc:[-85.635022,41.946547]},n2664:{id:"n2664",loc:[-85.635022,41.946573]},n2665:{id:"n2665",loc:[-85.634909,41.946574]},n2666:{id:"n2666",loc:[-85.634909,41.946561]},n2667:{id:"n2667",loc:[-85.634896,41.947159]},n2668:{id:"n2668",loc:[-85.634894,41.947032]},n2669:{id:"n2669",loc:[-85.635024,41.947031]},n267:{id:"n267",loc:[-85.636756,41.941779]},n2670:{id:"n2670",loc:[-85.635026,41.947158]},n2671:{id:"n2671",loc:[-85.635233,41.947105]},n2672:{id:"n2672",loc:[-85.635236,41.946991]},n2673:{id:"n2673",loc:[-85.635369,41.946993]},n2674:{id:"n2674",loc:[-85.635366,41.947107]},n2675:{id:"n2675",loc:[-85.634824,41.946929]},n2676:{id:"n2676",loc:[-85.634825,41.946818]},n2677:{id:"n2677",loc:[-85.63512,41.946819]},n2678:{id:"n2678",loc:[-85.635119,41.94693]},n2679:{id:"n2679",loc:[-85.634796,41.946806]},n268:{id:"n268",loc:[-85.636756,41.941774]},n2680:{id:"n2680",loc:[-85.634792,41.946604]},n2681:{id:"n2681",loc:[-85.634948,41.946602]},n2682:{id:"n2682",loc:[-85.634949,41.946645]},n2683:{id:"n2683",loc:[-85.634975,41.946644]},n2684:{id:"n2684",loc:[-85.634974,41.946599]},n2685:{id:"n2685",loc:[-85.635117,41.946598]},n2686:{id:"n2686",loc:[-85.635122,41.946801]},n2687:{id:"n2687",loc:[-85.634981,41.946803]},n2688:{id:"n2688",loc:[-85.634979,41.946752]},n2689:{id:"n2689",loc:[-85.634952,41.946752]},n269:{id:"n269",loc:[-85.636721,41.941774]},n2690:{id:"n2690",loc:[-85.634953,41.946804]},n2691:{id:"n2691",loc:[-85.634649,41.946841]},n2692:{id:"n2692",loc:[-85.634331,41.94684]},n2693:{id:"n2693",loc:[-85.634183,41.946809]},n2694:{id:"n2694",loc:[-85.633699,41.946607]},n2695:{id:"n2695",loc:[-85.634487,41.946664]},n2696:{id:"n2696",loc:[-85.634486,41.946598]},n2697:{id:"n2697",loc:[-85.63423,41.946599]},n2698:{id:"n2698",loc:[-85.634231,41.946662]},n2699:{id:"n2699",loc:[-85.634284,41.946662]},n27:{id:"n27",loc:[-85.634136,41.943183]},n270:{id:"n270",loc:[-85.63672,41.941714]},n2700:{id:"n2700",loc:[-85.634284,41.946679]},n2701:{id:"n2701",loc:[-85.634365,41.946679]},n2702:{id:"n2702",loc:[-85.634365,41.946664]},n2703:{id:"n2703",loc:[-85.635443,41.947015]},n2704:{id:"n2704",loc:[-85.635442,41.946801]},n2705:{id:"n2705",loc:[-85.63603,41.9468]},n2706:{id:"n2706",loc:[-85.636028,41.947016]},n2707:{id:"n2707",loc:[-85.635457,41.946582]},n2708:{id:"n2708",loc:[-85.635455,41.946211]},n2709:{id:"n2709",loc:[-85.635636,41.946579]},n271:{id:"n271",loc:[-85.636767,41.941713]},n2710:{id:"n2710",loc:[-85.635716,41.9468]},n2711:{id:"n2711",loc:[-85.635969,41.9468]},n2712:{id:"n2712",loc:[-85.635973,41.946295]},n2713:{id:"n2713",loc:[-85.636019,41.946484]},n2714:{id:"n2714",loc:[-85.636022,41.946388]},n2715:{id:"n2715",loc:[-85.635961,41.946493]},n2716:{id:"n2716",loc:[-85.635713,41.94621]},n2717:{id:"n2717",loc:[-85.635416,41.946142]},n2718:{id:"n2718",loc:[-85.635759,41.946203]},n2719:{id:"n2719",loc:[-85.636153,41.946747]},n272:{id:"n272",loc:[-85.636767,41.941706]},n2720:{id:"n2720",loc:[-85.635417,41.946915]},n2721:{id:"n2721",loc:[-85.636154,41.946915]},n2722:{id:"n2722",loc:[-85.635866,41.946473]},n2723:{id:"n2723",loc:[-85.635717,41.946633]},n2724:{id:"n2724",loc:[-85.635556,41.946166]},n2725:{id:"n2725",loc:[-85.63556,41.946556]},n2726:{id:"n2726",loc:[-85.635731,41.946594]},n2727:{id:"n2727",loc:[-85.635866,41.946595]},n2728:{id:"n2728",loc:[-85.635456,41.947028]},n2729:{id:"n2729",loc:[-85.635796,41.947023]},n273:{id:"n273",loc:[-85.636779,41.941698]},n2730:{id:"n2730",loc:[-85.635798,41.947091]},n2731:{id:"n2731",loc:[-85.63573,41.947092]},n2732:{id:"n2732",loc:[-85.635733,41.947233]},n2733:{id:"n2733",loc:[-85.636283,41.946863]},n2734:{id:"n2734",loc:[-85.63628,41.946706]},n2735:{id:"n2735",loc:[-85.636341,41.946705]},n2736:{id:"n2736",loc:[-85.636273,41.946584]},n2737:{id:"n2737",loc:[-85.636396,41.946545]},n2738:{id:"n2738",loc:[-85.636474,41.946684]},n2739:{id:"n2739",loc:[-85.636511,41.946861]},n274:{id:"n274",loc:[-85.636798,41.941697]},n2740:{id:"n2740",loc:[-85.633713,41.947184]},n2741:{id:"n2741",loc:[-85.633651,41.94716]},n2742:{id:"n2742",loc:[-85.633704,41.947085]},n2743:{id:"n2743",loc:[-85.6336,41.947044]},n2744:{id:"n2744",loc:[-85.633506,41.947177]},n2745:{id:"n2745",loc:[-85.629586,41.952469]},n2746:{id:"n2746",loc:[-85.634723,41.953681]},n2747:{id:"n2747",loc:[-85.63478,41.959007]},n2748:{id:"n2748",loc:[-85.632793,41.94405],tags:{highway:"traffic_signals",traffic_signals:"signal","traffic_signals:direction":"both"}},n2749:{id:"n2749",loc:[-85.634648,41.947325]},n275:{id:"n275",loc:[-85.63681,41.941705]},n2750:{id:"n2750",loc:[-85.625078,41.952097]},n2751:{id:"n2751",loc:[-85.633195,41.94734]},n2752:{id:"n2752",loc:[-85.626447,41.957168]},n2753:{id:"n2753",loc:[-85.632023,41.949012]},n2754:{id:"n2754",loc:[-85.630835,41.950656]},n2755:{id:"n2755",loc:[-85.634655,41.948612]},n2756:{id:"n2756",loc:[-85.636182,41.948605]},n2757:{id:"n2757",loc:[-85.634729,41.954667]},n2758:{id:"n2758",loc:[-85.634686,41.951159]},n2759:{id:"n2759",loc:[-85.636206,41.951146]},n276:{id:"n276",loc:[-85.63681,41.941714]},n2760:{id:"n2760",loc:[-85.634668,41.949891]},n2761:{id:"n2761",loc:[-85.634701,41.952422]},n2762:{id:"n2762",loc:[-85.634747,41.955907]},n2763:{id:"n2763",loc:[-85.627975,41.954695]},n2764:{id:"n2764",loc:[-85.626832,41.954698]},n2765:{id:"n2765",loc:[-85.632278,41.948624]},n2766:{id:"n2766",loc:[-85.628639,41.953725]},n2767:{id:"n2767",loc:[-85.636233,41.95241]},n2768:{id:"n2768",loc:[-85.631385,41.949913]},n2769:{id:"n2769",loc:[-85.630486,41.951194]},n277:{id:"n277",loc:[-85.636861,41.942041]},n2770:{id:"n2770",loc:[-85.624937,41.952088]},n2771:{id:"n2771",loc:[-85.624945,41.952022]},n2772:{id:"n2772",loc:[-85.636162,41.94731]},n2773:{id:"n2773",loc:[-85.636188,41.949881]},n2774:{id:"n2774",loc:[-85.631422,41.948294]},n2775:{id:"n2775",loc:[-85.632844,41.945547]},n2776:{id:"n2776",loc:[-85.632484,41.945344]},n2777:{id:"n2777",loc:[-85.631775,41.944636]},n2778:{id:"n2778",loc:[-85.632656,41.945471]},n2779:{id:"n2779",loc:[-85.631959,41.944827]},n278:{id:"n278",loc:[-85.636862,41.942099]},n2780:{id:"n2780",loc:[-85.631679,41.94438]},n2781:{id:"n2781",loc:[-85.625129,41.959272]},n2782:{id:"n2782",loc:[-85.632446,41.944861]},n2783:{id:"n2783",loc:[-85.632804,41.945477]},n2784:{id:"n2784",loc:[-85.632255,41.944962]},n2785:{id:"n2785",loc:[-85.632736,41.944757]},n2786:{id:"n2786",loc:[-85.632543,41.94486]},n2787:{id:"n2787",loc:[-85.632889,41.945561]},n2788:{id:"n2788",loc:[-85.632091,41.944949]},n2789:{id:"n2789",loc:[-85.632537,41.944713]},n279:{id:"n279",loc:[-85.636807,41.942099]},n2790:{id:"n2790",loc:[-85.632279,41.94485]},n2791:{id:"n2791",loc:[-85.632749,41.943247]},n2792:{id:"n2792",loc:[-85.632824,41.943152]},n2793:{id:"n2793",loc:[-85.632929,41.94317]},n2794:{id:"n2794",loc:[-85.632897,41.943078]},n2795:{id:"n2795",loc:[-85.632626,41.943231]},n2796:{id:"n2796",loc:[-85.634048,41.947257]},n2797:{id:"n2797",loc:[-85.634264,41.947252]},n2798:{id:"n2798",loc:[-85.635418,41.947317]},n2799:{id:"n2799",loc:[-85.635461,41.947237]},n28:{id:"n28",loc:[-85.63821,41.944308]},n280:{id:"n280",loc:[-85.636807,41.942126]},n2800:{id:"n2800",loc:[-85.632868,41.946229]},n2801:{id:"n2801",loc:[-85.633673,41.947242]},n2802:{id:"n2802",loc:[-85.623604,41.945881],tags:{amenity:"school",name:"Barrows School"}},n2803:{id:"n2803",loc:[-85.627401,41.943496]},n2804:{id:"n2804",loc:[-85.627403,41.943625]},n2805:{id:"n2805",loc:[-85.626409,41.943215]},n2806:{id:"n2806",loc:[-85.624884,41.943508]},n2807:{id:"n2807",loc:[-85.625191,41.943509]},n2808:{id:"n2808",loc:[-85.624882,41.94382]},n2809:{id:"n2809",loc:[-85.624893,41.945618]},n281:{id:"n281",loc:[-85.636726,41.942126]},n2810:{id:"n2810",loc:[-85.624912,41.946524]},n2811:{id:"n2811",loc:[-85.622721,41.946535]},n2812:{id:"n2812",loc:[-85.627399,41.94469]},n2813:{id:"n2813",loc:[-85.622716,41.945622]},n2814:{id:"n2814",loc:[-85.624886,41.944724]},n2815:{id:"n2815",loc:[-85.622674,41.944737]},n2816:{id:"n2816",loc:[-85.625092,41.945063]},n2817:{id:"n2817",loc:[-85.625233,41.945064]},n2818:{id:"n2818",loc:[-85.625229,41.944871]},n2819:{id:"n2819",loc:[-85.625066,41.944871]},n282:{id:"n282",loc:[-85.636726,41.942098]},n2820:{id:"n2820",loc:[-85.625024,41.944901]},n2821:{id:"n2821",loc:[-85.625025,41.944924]},n2822:{id:"n2822",loc:[-85.625087,41.944926]},n2823:{id:"n2823",loc:[-85.625349,41.944506]},n2824:{id:"n2824",loc:[-85.625347,41.944388]},n2825:{id:"n2825",loc:[-85.625152,41.94439]},n2826:{id:"n2826",loc:[-85.625152,41.944431]},n2827:{id:"n2827",loc:[-85.625134,41.944431]},n2828:{id:"n2828",loc:[-85.625136,41.944508]},n2829:{id:"n2829",loc:[-85.623236,41.946341]},n283:{id:"n283",loc:[-85.636708,41.942098]},n2830:{id:"n2830",loc:[-85.623241,41.946067]},n2831:{id:"n2831",loc:[-85.623207,41.946067]},n2832:{id:"n2832",loc:[-85.623212,41.945827]},n2833:{id:"n2833",loc:[-85.622981,41.945825]},n2834:{id:"n2834",loc:[-85.622976,41.946063]},n2835:{id:"n2835",loc:[-85.623006,41.946063]},n2836:{id:"n2836",loc:[-85.623002,41.946256]},n2837:{id:"n2837",loc:[-85.623075,41.946256]},n2838:{id:"n2838",loc:[-85.623074,41.946339]},n2839:{id:"n2839",loc:[-85.624574,41.951755]},n284:{id:"n284",loc:[-85.636708,41.942041]},n2840:{id:"n2840",loc:[-85.62498,41.951844]},n2841:{id:"n2841",loc:[-85.625086,41.95188]},n2842:{id:"n2842",loc:[-85.625135,41.951922]},n2843:{id:"n2843",loc:[-85.615273,41.945637]},n2844:{id:"n2844",loc:[-85.620172,41.945627]},n2845:{id:"n2845",loc:[-85.625167,41.951985]},n2846:{id:"n2846",loc:[-85.622741,41.947437]},n2847:{id:"n2847",loc:[-85.624907,41.947428]},n2848:{id:"n2848",loc:[-85.627046,41.940995]},n2849:{id:"n2849",loc:[-85.627295,41.941304]},n285:{id:"n285",loc:[-85.635618,41.941852]},n2850:{id:"n2850",loc:[-85.627352,41.94148]},n2851:{id:"n2851",loc:[-85.62737,41.942261]},n2852:{id:"n2852",loc:[-85.6264,41.942263]},n2853:{id:"n2853",loc:[-85.622769,41.949228]},n2854:{id:"n2854",loc:[-85.624937,41.949218]},n2855:{id:"n2855",loc:[-85.630001,41.944664]},n2856:{id:"n2856",loc:[-85.624873,41.942022]},n2857:{id:"n2857",loc:[-85.622761,41.948333]},n2858:{id:"n2858",loc:[-85.624924,41.948334]},n2859:{id:"n2859",loc:[-85.620051,41.94383]},n286:{id:"n286",loc:[-85.635621,41.94202]},n2860:{id:"n2860",loc:[-85.627629,41.946498]},n2861:{id:"n2861",loc:[-85.622757,41.950111]},n2862:{id:"n2862",loc:[-85.623685,41.954624]},n2863:{id:"n2863",loc:[-85.621459,41.944756]},n2864:{id:"n2864",loc:[-85.628637,41.944676]},n2865:{id:"n2865",loc:[-85.630125,41.944654]},n2866:{id:"n2866",loc:[-85.625196,41.952097]},n2867:{id:"n2867",loc:[-85.630257,41.944637]},n2868:{id:"n2868",loc:[-85.631247,41.944459]},n2869:{id:"n2869",loc:[-85.624867,41.94159]},n287:{id:"n287",loc:[-85.63524,41.942023]},n2870:{id:"n2870",loc:[-85.624958,41.950343]},n2871:{id:"n2871",loc:[-85.624948,41.950484]},n2872:{id:"n2872",loc:[-85.624813,41.950983]},n2873:{id:"n2873",loc:[-85.624723,41.951789]},n2874:{id:"n2874",loc:[-85.624262,41.9512]},n2875:{id:"n2875",loc:[-85.62414,41.951201]},n2876:{id:"n2876",loc:[-85.624139,41.95112]},n2877:{id:"n2877",loc:[-85.628481,41.945611]},n2878:{id:"n2878",loc:[-85.620072,41.946538]},n2879:{id:"n2879",loc:[-85.622763,41.95099]},n288:{id:"n288",loc:[-85.635237,41.941855]},n2880:{id:"n2880",loc:[-85.62814,41.946963]},n2881:{id:"n2881",loc:[-85.628245,41.947031]},n2882:{id:"n2882",loc:[-85.628331,41.947066]},n2883:{id:"n2883",loc:[-85.629722,41.944444],tags:{leisure:"park",name:"Scouter Park"}},n2884:{id:"n2884",loc:[-85.629977,41.943907]},n2885:{id:"n2885",loc:[-85.629947,41.943775]},n2886:{id:"n2886",loc:[-85.629899,41.943625]},n2887:{id:"n2887",loc:[-85.632286,41.944257]},n2888:{id:"n2888",loc:[-85.632523,41.944179]},n2889:{id:"n2889",loc:[-85.632141,41.944293]},n289:{id:"n289",loc:[-85.635568,41.940475]},n2890:{id:"n2890",loc:[-85.631571,41.9444]},n2891:{id:"n2891",loc:[-85.643236,41.941895]},n2892:{id:"n2892",loc:[-85.62865,41.945353]},n2893:{id:"n2893",loc:[-85.628594,41.945481]},n2894:{id:"n2894",loc:[-85.628581,41.947169]},n2895:{id:"n2895",loc:[-85.631843,41.943793]},n2896:{id:"n2896",loc:[-85.632299,41.943472]},n2897:{id:"n2897",loc:[-85.631519,41.944881]},n2898:{id:"n2898",loc:[-85.628429,41.947219]},n2899:{id:"n2899",loc:[-85.63145,41.945162]},n29:{id:"n29",loc:[-85.637963,41.944263]},n290:{id:"n290",loc:[-85.634584,41.940477]},n2900:{id:"n2900",loc:[-85.630939,41.945519]},n2901:{id:"n2901",loc:[-85.62903,41.945719]},n2902:{id:"n2902",loc:[-85.630521,41.945559]},n2903:{id:"n2903",loc:[-85.629294,41.945585]},n2904:{id:"n2904",loc:[-85.629845,41.945543]},n2905:{id:"n2905",loc:[-85.631497,41.944625]},n2906:{id:"n2906",loc:[-85.630281,41.945553]},n2907:{id:"n2907",loc:[-85.628553,41.946973]},n2908:{id:"n2908",loc:[-85.631383,41.945338]},n2909:{id:"n2909",loc:[-85.628843,41.946103]},n291:{id:"n291",loc:[-85.634583,41.940203]},n2910:{id:"n2910",loc:[-85.631193,41.945473]},n2911:{id:"n2911",loc:[-85.628897,41.945944]},n2912:{id:"n2912",loc:[-85.628789,41.946454]},n2913:{id:"n2913",loc:[-85.632548,41.944563]},n2914:{id:"n2914",loc:[-85.627527,41.944555]},n2915:{id:"n2915",loc:[-85.62752,41.943726]},n2916:{id:"n2916",loc:[-85.627894,41.943723]},n2917:{id:"n2917",loc:[-85.627897,41.943919]},n2918:{id:"n2918",loc:[-85.627991,41.943934]},n2919:{id:"n2919",loc:[-85.628082,41.943966]},n292:{id:"n292",loc:[-85.635567,41.940201]},n2920:{id:"n2920",loc:[-85.628177,41.944015]},n2921:{id:"n2921",loc:[-85.628193,41.944048]},n2922:{id:"n2922",loc:[-85.628167,41.944054]},n2923:{id:"n2923",loc:[-85.628193,41.944094]},n2924:{id:"n2924",loc:[-85.628213,41.944144]},n2925:{id:"n2925",loc:[-85.628214,41.944199]},n2926:{id:"n2926",loc:[-85.62833,41.944196]},n2927:{id:"n2927",loc:[-85.628328,41.944262]},n2928:{id:"n2928",loc:[-85.628173,41.944262]},n2929:{id:"n2929",loc:[-85.628171,41.944293]},n293:{id:"n293",loc:[-85.635816,41.942673],tags:{crossing:"marked",highway:"crossing"}},n2930:{id:"n2930",loc:[-85.628039,41.944296]},n2931:{id:"n2931",loc:[-85.62804,41.944329]},n2932:{id:"n2932",loc:[-85.627829,41.944335]},n2933:{id:"n2933",loc:[-85.627835,41.94455]},n2936:{id:"n2936",loc:[-85.632823,41.945994]},n294:{id:"n294",loc:[-85.635696,41.942712]},n2940:{id:"n2940",loc:[-85.632192,41.945973]},n2941:{id:"n2941",loc:[-85.63226,41.94587]},n2942:{id:"n2942",loc:[-85.632721,41.946036]},n2943:{id:"n2943",loc:[-85.632641,41.946142]},n2944:{id:"n2944",loc:[-85.62937,41.947467]},n2945:{id:"n2945",loc:[-85.62959,41.942936]},n2946:{id:"n2946",loc:[-85.629551,41.94284]},n2947:{id:"n2947",loc:[-85.629501,41.942704]},n2948:{id:"n2948",loc:[-85.629472,41.942578]},n2949:{id:"n2949",loc:[-85.629361,41.941801]},n295:{id:"n295",loc:[-85.635679,41.941962]},n2950:{id:"n2950",loc:[-85.629339,41.941716]},n2951:{id:"n2951",loc:[-85.629315,41.94166]},n2952:{id:"n2952",loc:[-85.629279,41.941602]},n2953:{id:"n2953",loc:[-85.629227,41.941556]},n2954:{id:"n2954",loc:[-85.624261,41.95112]},n2955:{id:"n2955",loc:[-85.629153,41.941524]},n2956:{id:"n2956",loc:[-85.626904,41.941098]},n2957:{id:"n2957",loc:[-85.624588,41.951294]},n2958:{id:"n2958",loc:[-85.631844,41.942945]},n2959:{id:"n2959",loc:[-85.625854,41.949222]},n296:{id:"n296",loc:[-85.635672,41.941337]},n2960:{id:"n2960",loc:[-85.625146,41.955238]},n2961:{id:"n2961",loc:[-85.626745,41.948296]},n2962:{id:"n2962",loc:[-85.625721,41.95524]},n2963:{id:"n2963",loc:[-85.624706,41.952317]},n2964:{id:"n2964",loc:[-85.62609,41.956147]},n2965:{id:"n2965",loc:[-85.624401,41.954928]},n2966:{id:"n2966",loc:[-85.626558,41.955367]},n2967:{id:"n2967",loc:[-85.62468,41.955096]},n2968:{id:"n2968",loc:[-85.624159,41.953929]},n2969:{id:"n2969",loc:[-85.62506,41.951113]},n297:{id:"n297",loc:[-85.635658,41.941284]},n2970:{id:"n2970",loc:[-85.624942,41.951591]},n2971:{id:"n2971",loc:[-85.627399,41.947546]},n2972:{id:"n2972",loc:[-85.627695,41.947404]},n2973:{id:"n2973",loc:[-85.625925,41.94896]},n2974:{id:"n2974",loc:[-85.625725,41.950211]},n2975:{id:"n2975",loc:[-85.627008,41.947963]},n2976:{id:"n2976",loc:[-85.624373,41.953458]},n2977:{id:"n2977",loc:[-85.624137,41.954392]},n2978:{id:"n2978",loc:[-85.628257,41.947307]},n2979:{id:"n2979",loc:[-85.625281,41.95066]},n298:{id:"n298",loc:[-85.635602,41.941166]},n2980:{id:"n2980",loc:[-85.625865,41.949804]},n2981:{id:"n2981",loc:[-85.626508,41.955932]},n2982:{id:"n2982",loc:[-85.626333,41.955216]},n2983:{id:"n2983",loc:[-85.626637,41.955676]},n2984:{id:"n2984",loc:[-85.624223,41.954599]},n2985:{id:"n2985",loc:[-85.626219,41.948671]},n2986:{id:"n2986",loc:[-85.624556,41.953043]},n2987:{id:"n2987",loc:[-85.625598,41.956302]},n2988:{id:"n2988",loc:[-85.624571,41.952971]},n2989:{id:"n2989",loc:[-85.627141,41.940727]},n299:{id:"n299",loc:[-85.635598,41.941138]},n2990:{id:"n2990",loc:[-85.627102,41.939144]},n2991:{id:"n2991",loc:[-85.627127,41.940086]},n2992:{id:"n2992",loc:[-85.627116,41.940843]},n2993:{id:"n2993",loc:[-85.627132,41.9402]},n2994:{id:"n2994",loc:[-85.629734,41.940078]},n2995:{id:"n2995",loc:[-85.6276,41.937412]},n2996:{id:"n2996",loc:[-85.627451,41.937549]},n2997:{id:"n2997",loc:[-85.627375,41.937618]},n2998:{id:"n2998",loc:[-85.627278,41.937728]},n2999:{id:"n2999",loc:[-85.627199,41.937842]},n3:{id:"n3",loc:[-85.627345,41.953983]},n30:{id:"n30",loc:[-85.637882,41.944205]},n300:{id:"n300",loc:[-85.635614,41.941076]},n3000:{id:"n3000",loc:[-85.627141,41.937981]},n3001:{id:"n3001",loc:[-85.627109,41.938153]},n3002:{id:"n3002",loc:[-85.627101,41.938699]},n3003:{id:"n3003",loc:[-85.628311,41.942261]},n3004:{id:"n3004",loc:[-85.628439,41.940082]},n3005:{id:"n3005",loc:[-85.619538,41.942622],tags:{leisure:"slipway"}},n3006:{id:"n3006",loc:[-85.619872,41.942618]},n3007:{id:"n3007",loc:[-85.619755,41.942612]},n3008:{id:"n3008",loc:[-85.619647,41.942628]},n3009:{id:"n3009",loc:[-85.619415,41.942626]},n301:{id:"n301",loc:[-85.635659,41.940956]},n3010:{id:"n3010",loc:[-85.619212,41.942623]},n3011:{id:"n3011",loc:[-85.631485,41.942472]},n3012:{id:"n3012",loc:[-85.630986,41.941786]},n3013:{id:"n3013",loc:[-85.631797,41.942006]},n3014:{id:"n3014",loc:[-85.630972,41.941162]},n3015:{id:"n3015",loc:[-85.631396,41.941611],tags:{railway:"level_crossing"}},n3016:{id:"n3016",loc:[-85.631878,41.941545]},n3017:{id:"n3017",loc:[-85.630461,41.94055]},n3018:{id:"n3018",loc:[-85.629751,41.939539],tags:{railway:"level_crossing"}},n3019:{id:"n3019",loc:[-85.631663,41.941513]},n302:{id:"n302",loc:[-85.635666,41.940922]},n3020:{id:"n3020",loc:[-85.631328,41.941375]},n3021:{id:"n3021",loc:[-85.632554,41.941779]},n3022:{id:"n3022",loc:[-85.63245,41.941769]},n3023:{id:"n3023",loc:[-85.632475,41.941644]},n3024:{id:"n3024",loc:[-85.632581,41.941654]},n3025:{id:"n3025",loc:[-85.631957,41.941352]},n3026:{id:"n3026",loc:[-85.632293,41.941139]},n3027:{id:"n3027",loc:[-85.632315,41.941153]},n3028:{id:"n3028",loc:[-85.632302,41.941262]},n3029:{id:"n3029",loc:[-85.63237,41.941267]},n303:{id:"n303",loc:[-85.635667,41.940877]},n3030:{id:"n3030",loc:[-85.632356,41.941538]},n3031:{id:"n3031",loc:[-85.632134,41.941678]},n3032:{id:"n3032",loc:[-85.631942,41.941687]},n3033:{id:"n3033",loc:[-85.63203,41.941694]},n3034:{id:"n3034",loc:[-85.632166,41.941555]},n3035:{id:"n3035",loc:[-85.632412,41.941416]},n3036:{id:"n3036",loc:[-85.63248,41.941342]},n3037:{id:"n3037",loc:[-85.632502,41.941259]},n3038:{id:"n3038",loc:[-85.632453,41.941161]},n3039:{id:"n3039",loc:[-85.63235,41.941103]},n304:{id:"n304",loc:[-85.635668,41.940655]},n3040:{id:"n3040",loc:[-85.632236,41.941118]},n3041:{id:"n3041",loc:[-85.631894,41.941355]},n3042:{id:"n3042",loc:[-85.631859,41.941411]},n3043:{id:"n3043",loc:[-85.632011,41.941587]},n3044:{id:"n3044",loc:[-85.632446,41.941379]},n3045:{id:"n3045",loc:[-85.632511,41.941416]},n3046:{id:"n3046",loc:[-85.632545,41.941634]},n3047:{id:"n3047",loc:[-85.632612,41.94164]},n3048:{id:"n3048",loc:[-85.632595,41.942197]},n3049:{id:"n3049",loc:[-85.632565,41.942241]},n305:{id:"n305",loc:[-85.635628,41.940617]},n3050:{id:"n3050",loc:[-85.632515,41.942256]},n3051:{id:"n3051",loc:[-85.63245,41.94223]},n3052:{id:"n3052",loc:[-85.632401,41.942174]},n3053:{id:"n3053",loc:[-85.632391,41.942115]},n3054:{id:"n3054",loc:[-85.632029,41.941859]},n3055:{id:"n3055",loc:[-85.631828,41.941639]},n3056:{id:"n3056",loc:[-85.631829,41.941508]},n3057:{id:"n3057",loc:[-85.631281,41.94312]},n3058:{id:"n3058",loc:[-85.631421,41.943065]},n3059:{id:"n3059",loc:[-85.631339,41.942949]},n306:{id:"n306",loc:[-85.635623,41.940272]},n3060:{id:"n3060",loc:[-85.631199,41.943004]},n3061:{id:"n3061",loc:[-85.631102,41.942931]},n3062:{id:"n3062",loc:[-85.631009,41.942809]},n3063:{id:"n3063",loc:[-85.631383,41.94265]},n3064:{id:"n3064",loc:[-85.631477,41.942773]},n3065:{id:"n3065",loc:[-85.630638,41.942809]},n3066:{id:"n3066",loc:[-85.630738,41.942943]},n3067:{id:"n3067",loc:[-85.630841,41.9429]},n3068:{id:"n3068",loc:[-85.630741,41.942766]},n3069:{id:"n3069",loc:[-85.63054,41.942603]},n307:{id:"n307",loc:[-85.635651,41.940183]},n3070:{id:"n3070",loc:[-85.630498,41.942619]},n3071:{id:"n3071",loc:[-85.630567,41.942718]},n3072:{id:"n3072",loc:[-85.630616,41.942698]},n3073:{id:"n3073",loc:[-85.630642,41.94273]},n3074:{id:"n3074",loc:[-85.630686,41.942714]},n3075:{id:"n3075",loc:[-85.630715,41.942754]},n3076:{id:"n3076",loc:[-85.6309,41.942681]},n3077:{id:"n3077",loc:[-85.630843,41.942605]},n3078:{id:"n3078",loc:[-85.6309,41.942581]},n3079:{id:"n3079",loc:[-85.630832,41.942487]},n308:{id:"n308",loc:[-85.63577,41.940183],tags:{crossing:"marked",highway:"crossing"}},n3080:{id:"n3080",loc:[-85.630773,41.942509]},n3081:{id:"n3081",loc:[-85.630718,41.942436]},n3082:{id:"n3082",loc:[-85.630485,41.942524]},n3083:{id:"n3083",loc:[-85.631468,41.941233]},n3084:{id:"n3084",loc:[-85.631334,41.94114]},n3085:{id:"n3085",loc:[-85.632052,41.940568]},n3086:{id:"n3086",loc:[-85.63219,41.940663]},n3087:{id:"n3087",loc:[-85.631323,41.940834]},n3088:{id:"n3088",loc:[-85.631122,41.941002]},n3089:{id:"n3089",loc:[-85.631321,41.941133]},n309:{id:"n309",loc:[-85.636939,41.942544]},n3090:{id:"n3090",loc:[-85.631521,41.940966]},n3091:{id:"n3091",loc:[-85.631103,41.940253]},n3092:{id:"n3092",loc:[-85.631226,41.940211]},n3093:{id:"n3093",loc:[-85.631597,41.940805]},n3094:{id:"n3094",loc:[-85.631474,41.940847]},n3095:{id:"n3095",loc:[-85.631811,41.940534]},n3096:{id:"n3096",loc:[-85.631588,41.94061]},n3097:{id:"n3097",loc:[-85.631438,41.940366]},n3098:{id:"n3098",loc:[-85.631661,41.94029]},n3099:{id:"n3099",loc:[-85.630621,41.940041]},n31:{id:"n31",loc:[-85.63827,41.944203]},n310:{id:"n310",loc:[-85.636323,41.942552]},n3100:{id:"n3100",loc:[-85.630436,41.939773]},n3101:{id:"n3101",loc:[-85.63059,41.939714]},n3102:{id:"n3102",loc:[-85.630775,41.939983]},n3103:{id:"n3103",loc:[-85.63047,41.940167]},n3104:{id:"n3104",loc:[-85.63013,41.939686]},n3105:{id:"n3105",loc:[-85.630302,41.939618]},n3106:{id:"n3106",loc:[-85.630641,41.9401]},n3107:{id:"n3107",loc:[-85.630966,41.940619]},n3108:{id:"n3108",loc:[-85.630874,41.940493]},n3109:{id:"n3109",loc:[-85.630933,41.940469]},n311:{id:"n311",loc:[-85.636257,41.942555]},n3110:{id:"n3110",loc:[-85.630763,41.940236]},n3111:{id:"n3111",loc:[-85.63088,41.940189]},n3112:{id:"n3112",loc:[-85.631142,41.940548]},n3113:{id:"n3113",loc:[-85.630958,41.940871]},n3114:{id:"n3114",loc:[-85.630874,41.940778]},n3115:{id:"n3115",loc:[-85.631062,41.940684]},n3116:{id:"n3116",loc:[-85.631146,41.940777]},n3117:{id:"n3117",loc:[-85.632031,41.940575]},n3118:{id:"n3118",loc:[-85.631777,41.940186]},n3119:{id:"n3119",loc:[-85.631346,41.940179]},n312:{id:"n312",loc:[-85.636208,41.942561]},n3120:{id:"n3120",loc:[-85.631342,41.94012]},n3121:{id:"n3121",loc:[-85.631831,41.940118]},n3122:{id:"n3122",loc:[-85.632115,41.940543]},n3123:{id:"n3123",loc:[-85.631031,41.941683]},n3124:{id:"n3124",loc:[-85.630981,41.941608]},n3125:{id:"n3125",loc:[-85.631209,41.941516]},n3126:{id:"n3126",loc:[-85.631264,41.941586]},n3127:{id:"n3127",loc:[-85.630938,41.94155]},n3128:{id:"n3128",loc:[-85.631156,41.941462]},n3129:{id:"n3129",loc:[-85.631197,41.94152]},n313:{id:"n313",loc:[-85.636159,41.942573]},n3130:{id:"n3130",loc:[-85.630895,41.941485]},n3131:{id:"n3131",loc:[-85.630824,41.941389]},n3132:{id:"n3132",loc:[-85.630986,41.941323]},n3133:{id:"n3133",loc:[-85.631057,41.941419]},n3134:{id:"n3134",loc:[-85.630777,41.941328]},n3135:{id:"n3135",loc:[-85.630907,41.941274]},n3136:{id:"n3136",loc:[-85.630953,41.941335]},n3137:{id:"n3137",loc:[-85.630797,41.941247]},n3138:{id:"n3138",loc:[-85.630701,41.94117]},n3139:{id:"n3139",loc:[-85.630829,41.941113]},n314:{id:"n314",loc:[-85.635743,41.942881]},n3140:{id:"n3140",loc:[-85.6309,41.941201]},n3141:{id:"n3141",loc:[-85.630765,41.941206]},n3142:{id:"n3142",loc:[-85.630739,41.941218]},n3143:{id:"n3143",loc:[-85.630582,41.941039]},n3144:{id:"n3144",loc:[-85.630412,41.940818]},n3145:{id:"n3145",loc:[-85.630509,41.940777]},n3146:{id:"n3146",loc:[-85.630678,41.941004]},n3147:{id:"n3147",loc:[-85.630773,41.942166]},n3148:{id:"n3148",loc:[-85.630708,41.942074]},n3149:{id:"n3149",loc:[-85.630863,41.942013]},n315:{id:"n315",loc:[-85.635452,41.942966]},n3150:{id:"n3150",loc:[-85.630928,41.942105]},n3151:{id:"n3151",loc:[-85.630701,41.942026]},n3152:{id:"n3152",loc:[-85.630665,41.941971]},n3153:{id:"n3153",loc:[-85.630793,41.941918]},n3154:{id:"n3154",loc:[-85.630837,41.94197]},n3155:{id:"n3155",loc:[-85.630757,41.941871]},n3156:{id:"n3156",loc:[-85.630629,41.941923]},n3157:{id:"n3157",loc:[-85.630694,41.941783]},n3158:{id:"n3158",loc:[-85.630534,41.941847]},n3159:{id:"n3159",loc:[-85.630598,41.941935]},n316:{id:"n316",loc:[-85.634911,41.943118]},n3160:{id:"n3160",loc:[-85.631548,41.93938]},n3161:{id:"n3161",loc:[-85.631525,41.939919]},n3162:{id:"n3162",loc:[-85.631648,41.940043]},n3163:{id:"n3163",loc:[-85.624586,41.951121]},n3164:{id:"n3164",loc:[-85.622139,41.952064]},n3165:{id:"n3165",loc:[-85.622141,41.952144]},n3166:{id:"n3166",loc:[-85.621977,41.952146]},n3167:{id:"n3167",loc:[-85.621978,41.952211]},n3168:{id:"n3168",loc:[-85.62191,41.952212]},n3169:{id:"n3169",loc:[-85.633628,41.935437]},n317:{id:"n317",loc:[-85.634743,41.943167]},n3170:{id:"n3170",loc:[-85.632849,41.935518]},n3171:{id:"n3171",loc:[-85.632376,41.93574]},n3172:{id:"n3172",loc:[-85.631517,41.935897]},n3173:{id:"n3173",loc:[-85.630433,41.936124]},n3174:{id:"n3174",loc:[-85.630207,41.936427]},n3175:{id:"n3175",loc:[-85.630346,41.936795]},n3176:{id:"n3176",loc:[-85.62996,41.936974]},n3177:{id:"n3177",loc:[-85.629916,41.937488]},n3178:{id:"n3178",loc:[-85.629946,41.937802]},n3179:{id:"n3179",loc:[-85.629977,41.937905]},n318:{id:"n318",loc:[-85.634401,41.94328]},n3180:{id:"n3180",loc:[-85.63016,41.937909]},n3181:{id:"n3181",loc:[-85.630804,41.937791]},n3182:{id:"n3182",loc:[-85.631688,41.937808]},n3183:{id:"n3183",loc:[-85.631685,41.938008]},n3184:{id:"n3184",loc:[-85.631845,41.938116]},n3185:{id:"n3185",loc:[-85.63207,41.938181]},n3186:{id:"n3186",loc:[-85.632143,41.938371]},n3187:{id:"n3187",loc:[-85.632056,41.938435]},n3188:{id:"n3188",loc:[-85.631787,41.938457]},n3189:{id:"n3189",loc:[-85.631657,41.938728]},n319:{id:"n319",loc:[-85.634345,41.943299]},n3190:{id:"n3190",loc:[-85.631595,41.93775]},n3191:{id:"n3191",loc:[-85.630264,41.937839]},n3192:{id:"n3192",loc:[-85.628591,41.948536]},n3193:{id:"n3193",loc:[-85.63205,41.951181]},n3194:{id:"n3194",loc:[-85.632034,41.949909]},n3195:{id:"n3195",loc:[-85.630841,41.951191]},n3196:{id:"n3196",loc:[-85.632083,41.9537]},n3197:{id:"n3197",loc:[-85.630929,41.959037]},n3198:{id:"n3198",loc:[-85.632151,41.959028]},n3199:{id:"n3199",loc:[-85.630911,41.957428]},n32:{id:"n32",loc:[-85.638273,41.944246]},n320:{id:"n320",loc:[-85.634287,41.943326]},n3200:{id:"n3200",loc:[-85.63213,41.957427]},n3201:{id:"n3201",loc:[-85.632072,41.952447]},n3202:{id:"n3202",loc:[-85.632095,41.954677]},n3203:{id:"n3203",loc:[-85.632111,41.955911]},n3204:{id:"n3204",loc:[-85.630855,41.952457]},n3205:{id:"n3205",loc:[-85.630869,41.953709]},n3206:{id:"n3206",loc:[-85.63088,41.954682]},n3207:{id:"n3207",loc:[-85.630894,41.955913]},n3208:{id:"n3208",loc:[-85.633214,41.948619]},n3209:{id:"n3209",loc:[-85.633253,41.951171]},n321:{id:"n321",loc:[-85.634233,41.943354]},n3210:{id:"n3210",loc:[-85.633234,41.949901]},n3211:{id:"n3211",loc:[-85.633922,41.948616]},n3212:{id:"n3212",loc:[-85.625188,41.947832]},n3213:{id:"n3213",loc:[-85.625208,41.947775]},n3214:{id:"n3214",loc:[-85.625229,41.94776]},n3215:{id:"n3215",loc:[-85.625201,41.947749]},n3216:{id:"n3216",loc:[-85.625168,41.947707]},n3217:{id:"n3217",loc:[-85.625171,41.947609]},n3218:{id:"n3218",loc:[-85.625213,41.947564]},n3219:{id:"n3219",loc:[-85.62529,41.94756]},n322:{id:"n322",loc:[-85.634099,41.943429]},n3220:{id:"n3220",loc:[-85.625303,41.947533]},n3221:{id:"n3221",loc:[-85.625344,41.947482]},n3222:{id:"n3222",loc:[-85.625442,41.947468]},n3223:{id:"n3223",loc:[-85.62565,41.947494]},n3224:{id:"n3224",loc:[-85.625726,41.947613]},n3225:{id:"n3225",loc:[-85.625703,41.947728]},n3226:{id:"n3226",loc:[-85.625534,41.94781]},n3227:{id:"n3227",loc:[-85.625391,41.947822]},n3228:{id:"n3228",loc:[-85.625304,41.947859]},n3229:{id:"n3229",loc:[-85.625203,41.947885]},n323:{id:"n323",loc:[-85.633958,41.943507],tags:{highway:"crossing"}},n3230:{id:"n3230",loc:[-85.624691,41.948659]},n3231:{id:"n3231",loc:[-85.624328,41.948661]},n3232:{id:"n3232",loc:[-85.624331,41.949046]},n3233:{id:"n3233",loc:[-85.624694,41.949045]},n3234:{id:"n3234",loc:[-85.623623,41.949606]},n3235:{id:"n3235",loc:[-85.623623,41.9497]},n3236:{id:"n3236",loc:[-85.623357,41.9497]},n3237:{id:"n3237",loc:[-85.623357,41.949614]},n3238:{id:"n3238",loc:[-85.623974,41.949429]},n3239:{id:"n3239",loc:[-85.623974,41.949605]},n324:{id:"n324",loc:[-85.633698,41.943651],tags:{railway:"crossing"}},n3240:{id:"n3240",loc:[-85.624501,41.951226]},n3241:{id:"n3241",loc:[-85.624501,41.951123]},n3242:{id:"n3242",loc:[-85.624319,41.951123]},n3243:{id:"n3243",loc:[-85.624319,41.951226]},n3244:{id:"n3244",loc:[-85.624121,41.950866]},n3245:{id:"n3245",loc:[-85.624115,41.950525]},n3246:{id:"n3246",loc:[-85.624315,41.950523]},n3247:{id:"n3247",loc:[-85.62432,41.950865]},n3248:{id:"n3248",loc:[-85.624393,41.950867]},n3249:{id:"n3249",loc:[-85.62439,41.950596]},n325:{id:"n325",loc:[-85.633508,41.943757]},n3250:{id:"n3250",loc:[-85.624673,41.950594]},n3251:{id:"n3251",loc:[-85.624675,41.95082]},n3252:{id:"n3252",loc:[-85.62451,41.950821]},n3253:{id:"n3253",loc:[-85.62451,41.950866]},n3254:{id:"n3254",loc:[-85.624101,41.949346]},n3255:{id:"n3255",loc:[-85.624244,41.949346]},n3256:{id:"n3256",loc:[-85.624244,41.949368]},n3257:{id:"n3257",loc:[-85.62434,41.949368]},n3258:{id:"n3258",loc:[-85.624342,41.949351]},n3259:{id:"n3259",loc:[-85.624725,41.949348]},n326:{id:"n326",loc:[-85.634839,41.942974]},n3260:{id:"n3260",loc:[-85.624755,41.950495]},n3261:{id:"n3261",loc:[-85.624121,41.950502]},n3262:{id:"n3262",loc:[-85.625453,41.950163]},n3263:{id:"n3263",loc:[-85.625454,41.949976]},n3264:{id:"n3264",loc:[-85.625549,41.949977]},n3265:{id:"n3265",loc:[-85.62555,41.949833]},n3266:{id:"n3266",loc:[-85.625577,41.949833]},n3267:{id:"n3267",loc:[-85.625578,41.949656]},n3268:{id:"n3268",loc:[-85.625195,41.949655]},n3269:{id:"n3269",loc:[-85.625192,41.950162]},n327:{id:"n327",loc:[-85.634657,41.943028]},n3270:{id:"n3270",loc:[-85.622992,41.949614]},n3271:{id:"n3271",loc:[-85.622991,41.949431]},n3272:{id:"n3272",loc:[-85.620103,41.951]},n3273:{id:"n3273",loc:[-85.605644,41.947468]},n3274:{id:"n3274",loc:[-85.617421,41.947457]},n3275:{id:"n3275",loc:[-85.620078,41.947444]},n3276:{id:"n3276",loc:[-85.620087,41.94924]},n3277:{id:"n3277",loc:[-85.62156,41.948333]},n3278:{id:"n3278",loc:[-85.620106,41.950132]},n3279:{id:"n3279",loc:[-85.637412,41.951136]},n328:{id:"n328",loc:[-85.634222,41.943152]},n3280:{id:"n3280",loc:[-85.635429,41.948608]},n3281:{id:"n3281",loc:[-85.635047,41.947788]},n3282:{id:"n3282",loc:[-85.635048,41.947796]},n3283:{id:"n3283",loc:[-85.635002,41.947797]},n3284:{id:"n3284",loc:[-85.635002,41.947788]},n3285:{id:"n3285",loc:[-85.634914,41.94779]},n3286:{id:"n3286",loc:[-85.634913,41.947753]},n3287:{id:"n3287",loc:[-85.63494,41.947753]},n3288:{id:"n3288",loc:[-85.634938,41.947708]},n3289:{id:"n3289",loc:[-85.635124,41.947705]},n329:{id:"n329",loc:[-85.634099,41.943202]},n3290:{id:"n3290",loc:[-85.635126,41.947787]},n3291:{id:"n3291",loc:[-85.634972,41.947599]},n3292:{id:"n3292",loc:[-85.634921,41.9476]},n3293:{id:"n3293",loc:[-85.63485,41.947546]},n3294:{id:"n3294",loc:[-85.63485,41.947508]},n3295:{id:"n3295",loc:[-85.634924,41.947457]},n3296:{id:"n3296",loc:[-85.634967,41.947456]},n3297:{id:"n3297",loc:[-85.635041,41.947512]},n3298:{id:"n3298",loc:[-85.635041,41.947542]},n3299:{id:"n3299",loc:[-85.634244,41.947839]},n33:{id:"n33",loc:[-85.638257,41.944188]},n330:{id:"n330",loc:[-85.634093,41.943138]},n3300:{id:"n3300",loc:[-85.634243,41.947793]},n3301:{id:"n3301",loc:[-85.634244,41.947686]},n3302:{id:"n3302",loc:[-85.634243,41.947657]},n3303:{id:"n3303",loc:[-85.634462,41.947653]},n3304:{id:"n3304",loc:[-85.634468,41.947835]},n3305:{id:"n3305",loc:[-85.634416,41.948006]},n3306:{id:"n3306",loc:[-85.634415,41.947898]},n3307:{id:"n3307",loc:[-85.634275,41.947899]},n3308:{id:"n3308",loc:[-85.634275,41.947927]},n3309:{id:"n3309",loc:[-85.63425,41.947927]},n331:{id:"n331",loc:[-85.633938,41.943291]},n3310:{id:"n3310",loc:[-85.63425,41.947976]},n3311:{id:"n3311",loc:[-85.634274,41.947976]},n3312:{id:"n3312",loc:[-85.634275,41.948007]},n3313:{id:"n3313",loc:[-85.634342,41.947635]},n3314:{id:"n3314",loc:[-85.634339,41.947497]},n3315:{id:"n3315",loc:[-85.634313,41.94748]},n3316:{id:"n3316",loc:[-85.634287,41.947474]},n3317:{id:"n3317",loc:[-85.63498,41.94815]},n3318:{id:"n3318",loc:[-85.634891,41.94815]},n3319:{id:"n3319",loc:[-85.634892,41.948169]},n332:{id:"n332",loc:[-85.633535,41.943511],tags:{railway:"crossing"}},n3320:{id:"n3320",loc:[-85.634852,41.948169]},n3321:{id:"n3321",loc:[-85.634853,41.948268]},n3322:{id:"n3322",loc:[-85.634832,41.948268]},n3323:{id:"n3323",loc:[-85.634832,41.948296]},n3324:{id:"n3324",loc:[-85.634965,41.948295]},n3325:{id:"n3325",loc:[-85.634966,41.948321]},n3326:{id:"n3326",loc:[-85.634999,41.948321]},n3327:{id:"n3327",loc:[-85.634999,41.948295]},n3328:{id:"n3328",loc:[-85.635175,41.948293]},n3329:{id:"n3329",loc:[-85.635175,41.948262]},n333:{id:"n333",loc:[-85.63339,41.943596]},n3330:{id:"n3330",loc:[-85.635159,41.948262]},n3331:{id:"n3331",loc:[-85.635158,41.948152]},n3332:{id:"n3332",loc:[-85.635067,41.948152]},n3333:{id:"n3333",loc:[-85.635065,41.947966]},n3334:{id:"n3334",loc:[-85.634979,41.947966]},n3335:{id:"n3335",loc:[-85.634307,41.948326]},n3336:{id:"n3336",loc:[-85.634305,41.948298]},n3337:{id:"n3337",loc:[-85.634331,41.948055]},n3338:{id:"n3338",loc:[-85.634331,41.948046]},n3339:{id:"n3339",loc:[-85.634435,41.948047]},n334:{id:"n334",loc:[-85.632842,41.943895]},n3340:{id:"n3340",loc:[-85.634434,41.948375]},n3341:{id:"n3341",loc:[-85.634463,41.948373]},n3342:{id:"n3342",loc:[-85.634464,41.948456]},n3343:{id:"n3343",loc:[-85.63443,41.948457]},n3344:{id:"n3344",loc:[-85.634432,41.948505]},n3345:{id:"n3345",loc:[-85.637386,41.94906]},n3346:{id:"n3346",loc:[-85.637113,41.9486]},n3347:{id:"n3347",loc:[-85.635448,41.949424]},n335:{id:"n335",loc:[-85.633856,41.943315]},n3352:{id:"n3352",loc:[-85.635457,41.949787]},n3353:{id:"n3353",loc:[-85.635459,41.949886]},n336:{id:"n336",loc:[-85.633697,41.943405]},n337:{id:"n337",loc:[-85.63347,41.943181]},n3372:{id:"n3372",loc:[-85.634423,41.950964]},n3373:{id:"n3373",loc:[-85.634424,41.95074]},n3374:{id:"n3374",loc:[-85.634394,41.950284]},n3375:{id:"n3375",loc:[-85.634398,41.950626]},n3376:{id:"n3376",loc:[-85.63452,41.951063]},n3377:{id:"n3377",loc:[-85.634511,41.949977]},n3378:{id:"n3378",loc:[-85.637409,41.949873]},n3379:{id:"n3379",loc:[-85.634824,41.94996]},n338:{id:"n338",loc:[-85.633597,41.943109]},n3380:{id:"n3380",loc:[-85.635437,41.949954]},n3381:{id:"n3381",loc:[-85.634844,41.951064]},n3382:{id:"n3382",loc:[-85.635458,41.951058]},n3383:{id:"n3383",loc:[-85.633921,41.947333]},n3384:{id:"n3384",loc:[-85.634208,41.947793]},n3385:{id:"n3385",loc:[-85.634204,41.947687]},n3386:{id:"n3386",loc:[-85.63424,41.947475]},n3387:{id:"n3387",loc:[-85.63424,41.947635]},n3388:{id:"n3388",loc:[-85.634089,41.948328]},n3389:{id:"n3389",loc:[-85.63424,41.948299]},n339:{id:"n339",loc:[-85.633673,41.943184]},n3390:{id:"n3390",loc:[-85.634239,41.948212]},n3391:{id:"n3391",loc:[-85.634086,41.948214]},n3392:{id:"n3392",loc:[-85.63408,41.948056]},n3393:{id:"n3393",loc:[-85.634093,41.948506]},n3394:{id:"n3394",loc:[-85.64344,41.941866]},n3395:{id:"n3395",loc:[-85.63378,41.95099]},n3396:{id:"n3396",loc:[-85.633779,41.950967]},n3397:{id:"n3397",loc:[-85.63375,41.950746]},n3398:{id:"n3398",loc:[-85.63375,41.950697]},n3399:{id:"n3399",loc:[-85.633903,41.950696]},n34:{id:"n34",loc:[-85.638176,41.944312]},n340:{id:"n340",loc:[-85.633714,41.94316]},n3400:{id:"n3400",loc:[-85.633901,41.950436]},n3401:{id:"n3401",loc:[-85.633492,41.950438]},n3402:{id:"n3402",loc:[-85.633494,41.950756]},n3403:{id:"n3403",loc:[-85.633454,41.950756]},n3404:{id:"n3404",loc:[-85.633456,41.950992]},n3405:{id:"n3405",loc:[-85.633994,41.950284]},n3406:{id:"n3406",loc:[-85.633998,41.950628]},n3407:{id:"n3407",loc:[-85.633364,41.951068]},n3408:{id:"n3408",loc:[-85.633356,41.949982]},n3409:{id:"n3409",loc:[-85.643327,41.941903]},n341:{id:"n341",loc:[-85.633811,41.943256]},n3410:{id:"n3410",loc:[-85.633292,41.953691]},n3411:{id:"n3411",loc:[-85.637432,41.952399]},n3412:{id:"n3412",loc:[-85.633349,41.957422]},n3413:{id:"n3413",loc:[-85.633326,41.955909]},n3414:{id:"n3414",loc:[-85.633307,41.954673]},n3415:{id:"n3415",loc:[-85.633273,41.952436]},n3416:{id:"n3416",loc:[-85.633361,41.95823],tags:{highway:"turning_circle"}},n3417:{id:"n3417",loc:[-85.619899,41.945527]},n3418:{id:"n3418",loc:[-85.643422,41.941946]},n3419:{id:"n3419",loc:[-85.643505,41.942033]},n342:{id:"n342",loc:[-85.633801,41.943261]},n3420:{id:"n3420",loc:[-85.620088,41.945571]},n3421:{id:"n3421",loc:[-85.620051,41.945505]},n3422:{id:"n3422",loc:[-85.62001,41.94541]},n3423:{id:"n3423",loc:[-85.620982,41.944742]},n3424:{id:"n3424",loc:[-85.621305,41.944782]},n3425:{id:"n3425",loc:[-85.621174,41.944819]},n3426:{id:"n3426",loc:[-85.621029,41.944871]},n3427:{id:"n3427",loc:[-85.620741,41.945011]},n3428:{id:"n3428",loc:[-85.620616,41.945085]},n3429:{id:"n3429",loc:[-85.620506,41.945172]},n343:{id:"n343",loc:[-85.63374,41.943514]},n3430:{id:"n3430",loc:[-85.620394,41.945273]},n3431:{id:"n3431",loc:[-85.620316,41.94536]},n3432:{id:"n3432",loc:[-85.620257,41.945452]},n3433:{id:"n3433",loc:[-85.620212,41.945535]},n3434:{id:"n3434",loc:[-85.620101,41.945811]},n3435:{id:"n3435",loc:[-85.620081,41.945937]},n3436:{id:"n3436",loc:[-85.619899,41.943718]},n3437:{id:"n3437",loc:[-85.619969,41.943211]},n3438:{id:"n3438",loc:[-85.619894,41.943292]},n3439:{id:"n3439",loc:[-85.620047,41.944738]},n344:{id:"n344",loc:[-85.633665,41.943441]},n3440:{id:"n3440",loc:[-85.620226,41.946088]},n3441:{id:"n3441",loc:[-85.620225,41.945864]},n3442:{id:"n3442",loc:[-85.620518,41.945863]},n3443:{id:"n3443",loc:[-85.620519,41.945944]},n3444:{id:"n3444",loc:[-85.620388,41.945944]},n3445:{id:"n3445",loc:[-85.620389,41.946088]},n3446:{id:"n3446",loc:[-85.618405,41.946566]},n3447:{id:"n3447",loc:[-85.619156,41.946562]},n3448:{id:"n3448",loc:[-85.619154,41.946319]},n3449:{id:"n3449",loc:[-85.618736,41.946322]},n345:{id:"n345",loc:[-85.633162,41.942947]},n3450:{id:"n3450",loc:[-85.618733,41.94612]},n3451:{id:"n3451",loc:[-85.619317,41.946116]},n3452:{id:"n3452",loc:[-85.619316,41.946023]},n3453:{id:"n3453",loc:[-85.619622,41.946021]},n3454:{id:"n3454",loc:[-85.619624,41.946171]},n3455:{id:"n3455",loc:[-85.61977,41.94617]},n3456:{id:"n3456",loc:[-85.619769,41.94602]},n3457:{id:"n3457",loc:[-85.619732,41.94602]},n3458:{id:"n3458",loc:[-85.619731,41.945856]},n3459:{id:"n3459",loc:[-85.619617,41.945857]},n346:{id:"n346",loc:[-85.633598,41.943083]},n3460:{id:"n3460",loc:[-85.619616,41.945776]},n3461:{id:"n3461",loc:[-85.619447,41.945777]},n3462:{id:"n3462",loc:[-85.619415,41.945778]},n3463:{id:"n3463",loc:[-85.618378,41.945788]},n3464:{id:"n3464",loc:[-85.618384,41.946132]},n3465:{id:"n3465",loc:[-85.618503,41.94613]},n3466:{id:"n3466",loc:[-85.618506,41.946319]},n3467:{id:"n3467",loc:[-85.6184,41.94632]},n3468:{id:"n3468",loc:[-85.618248,41.946416]},n3469:{id:"n3469",loc:[-85.618247,41.946319]},n347:{id:"n347",loc:[-85.63343,41.943179]},n3470:{id:"n3470",loc:[-85.618039,41.946321]},n3471:{id:"n3471",loc:[-85.61804,41.946418]},n3472:{id:"n3472",loc:[-85.620118,41.951895]},n3473:{id:"n3473",loc:[-85.617075,41.95469]},n3474:{id:"n3474",loc:[-85.620107,41.952113]},n3475:{id:"n3475",loc:[-85.620091,41.95232]},n3476:{id:"n3476",loc:[-85.620047,41.952505]},n3477:{id:"n3477",loc:[-85.61998,41.952715]},n3478:{id:"n3478",loc:[-85.619861,41.952986]},n3479:{id:"n3479",loc:[-85.619622,41.953365]},n348:{id:"n348",loc:[-85.633669,41.94341]},n3480:{id:"n3480",loc:[-85.619441,41.953567]},n3481:{id:"n3481",loc:[-85.619259,41.953741]},n3482:{id:"n3482",loc:[-85.618835,41.954056]},n3483:{id:"n3483",loc:[-85.618602,41.954194]},n3484:{id:"n3484",loc:[-85.618305,41.954347]},n3485:{id:"n3485",loc:[-85.618006,41.954466]},n3486:{id:"n3486",loc:[-85.617611,41.954587]},n3487:{id:"n3487",loc:[-85.615094,41.943412]},n3488:{id:"n3488",loc:[-85.619337,41.943025]},n3489:{id:"n3489",loc:[-85.610477,41.945527]},n349:{id:"n349",loc:[-85.633566,41.943466]},n3490:{id:"n3490",loc:[-85.610477,41.943718]},n3491:{id:"n3491",loc:[-85.619804,41.942976]},n3492:{id:"n3492",loc:[-85.61921,41.942672]},n3493:{id:"n3493",loc:[-85.619862,41.942836]},n3494:{id:"n3494",loc:[-85.616326,41.942769]},n3495:{id:"n3495",loc:[-85.617953,41.942917]},n3496:{id:"n3496",loc:[-85.61972,41.942728]},n3497:{id:"n3497",loc:[-85.61944,41.942784]},n3498:{id:"n3498",loc:[-85.615323,41.942841]},n3499:{id:"n3499",loc:[-85.612923,41.943718]},n35:{id:"n35",loc:[-85.637928,41.944249]},n350:{id:"n350",loc:[-85.633031,41.942986]},n3500:{id:"n3500",loc:[-85.61958,41.942756]},n3501:{id:"n3501",loc:[-85.619643,41.942647],tags:{leisure:"fishing"}},n3502:{id:"n3502",loc:[-85.619935,41.942962]},n3503:{id:"n3503",loc:[-85.629677,41.954687]},n3504:{id:"n3504",loc:[-85.629083,41.953722]},n3505:{id:"n3505",loc:[-85.621907,41.952067]},n3506:{id:"n3506",loc:[-85.621788,41.952058]},n3507:{id:"n3507",loc:[-85.629665,41.953718]},n3508:{id:"n3508",loc:[-85.624454,41.954707]},n3509:{id:"n3509",loc:[-85.634609,41.954585]},n351:{id:"n351",loc:[-85.633238,41.94283]},n3510:{id:"n3510",loc:[-85.634595,41.953772]},n3511:{id:"n3511",loc:[-85.633425,41.953783]},n3512:{id:"n3512",loc:[-85.633439,41.954596]},n3517:{id:"n3517",loc:[-85.621789,41.952179]},n3518:{id:"n3518",loc:[-85.624105,41.954704]},n3519:{id:"n3519",loc:[-85.623306,41.954542]},n352:{id:"n352",loc:[-85.633173,41.943556]},n3520:{id:"n3520",loc:[-85.623123,41.954502]},n3521:{id:"n3521",loc:[-85.622965,41.954473]},n3522:{id:"n3522",loc:[-85.622822,41.954455]},n3523:{id:"n3523",loc:[-85.62269,41.954448]},n3524:{id:"n3524",loc:[-85.622388,41.954467]},n3525:{id:"n3525",loc:[-85.62403,41.954895]},n3526:{id:"n3526",loc:[-85.623579,41.954855]},n3527:{id:"n3527",loc:[-85.623836,41.954951]},n3528:{id:"n3528",loc:[-85.622473,41.954592]},n3529:{id:"n3529",loc:[-85.622753,41.95458]},n353:{id:"n353",loc:[-85.633127,41.943552]},n3530:{id:"n3530",loc:[-85.62404,41.955078]},n3531:{id:"n3531",loc:[-85.624126,41.954999]},n3532:{id:"n3532",loc:[-85.623171,41.954687]},n3533:{id:"n3533",loc:[-85.624276,41.955206]},n3534:{id:"n3534",loc:[-85.62491,41.952801]},n3535:{id:"n3535",loc:[-85.625186,41.952756]},n3536:{id:"n3536",loc:[-85.625552,41.952792]},n3537:{id:"n3537",loc:[-85.626001,41.952948]},n3538:{id:"n3538",loc:[-85.626528,41.952984]},n3539:{id:"n3539",loc:[-85.626942,41.952886]},n354:{id:"n354",loc:[-85.632745,41.943222]},n3540:{id:"n3540",loc:[-85.627092,41.952685]},n3541:{id:"n3541",loc:[-85.627212,41.95244]},n3542:{id:"n3542",loc:[-85.627158,41.952226]},n3543:{id:"n3543",loc:[-85.627002,41.951972]},n3544:{id:"n3544",loc:[-85.626822,41.951838]},n3545:{id:"n3545",loc:[-85.626528,41.951807]},n3546:{id:"n3546",loc:[-85.625653,41.951852]},n3547:{id:"n3547",loc:[-85.625348,41.951834]},n3548:{id:"n3548",loc:[-85.625114,41.951767]},n3549:{id:"n3549",loc:[-85.620627,41.954682]},n355:{id:"n355",loc:[-85.632756,41.943199]},n3550:{id:"n3550",loc:[-85.622758,41.951884]},n3551:{id:"n3551",loc:[-85.618135,41.954734]},n3552:{id:"n3552",loc:[-85.620229,41.95472]},n3553:{id:"n3553",loc:[-85.624491,41.955573]},n3554:{id:"n3554",loc:[-85.621792,41.958314]},n3555:{id:"n3555",loc:[-85.623395,41.960001]},n3556:{id:"n3556",loc:[-85.620461,41.956212]},n3557:{id:"n3557",loc:[-85.62109,41.956766]},n3558:{id:"n3558",loc:[-85.620246,41.956224]},n3559:{id:"n3559",loc:[-85.625017,41.956068]},n356:{id:"n356",loc:[-85.632855,41.943147]},n3560:{id:"n3560",loc:[-85.622795,41.959702]},n3561:{id:"n3561",loc:[-85.621573,41.958457]},n3562:{id:"n3562",loc:[-85.619631,41.9573]},n3563:{id:"n3563",loc:[-85.62095,41.956311]},n3564:{id:"n3564",loc:[-85.619694,41.957408]},n3565:{id:"n3565",loc:[-85.621079,41.957751]},n3566:{id:"n3566",loc:[-85.622426,41.961142]},n3567:{id:"n3567",loc:[-85.623251,41.960484]},n3568:{id:"n3568",loc:[-85.619084,41.956291]},n3569:{id:"n3569",loc:[-85.622227,41.959303]},n357:{id:"n357",loc:[-85.632888,41.94315]},n3570:{id:"n3570",loc:[-85.620976,41.959104]},n3571:{id:"n3571",loc:[-85.621208,41.95653]},n3572:{id:"n3572",loc:[-85.623531,41.95951]},n3573:{id:"n3573",loc:[-85.623556,41.957935]},n3574:{id:"n3574",loc:[-85.623037,41.95746]},n3575:{id:"n3575",loc:[-85.621175,41.956427]},n3576:{id:"n3576",loc:[-85.622651,41.960109]},n3577:{id:"n3577",loc:[-85.621803,41.960747]},n3578:{id:"n3578",loc:[-85.620791,41.961874]},n3579:{id:"n3579",loc:[-85.625295,41.956786]},n358:{id:"n358",loc:[-85.633232,41.943547]},n3580:{id:"n3580",loc:[-85.619662,41.956894]},n3581:{id:"n3581",loc:[-85.622442,41.958708]},n3582:{id:"n3582",loc:[-85.621744,41.955864]},n3583:{id:"n3583",loc:[-85.621336,41.959212]},n3584:{id:"n3584",loc:[-85.622801,41.957304]},n3585:{id:"n3585",loc:[-85.619973,41.957433]},n3586:{id:"n3586",loc:[-85.619556,41.955717]},n3587:{id:"n3587",loc:[-85.622978,41.958601]},n3588:{id:"n3588",loc:[-85.625396,41.956264]},n3589:{id:"n3589",loc:[-85.623525,41.958034]},n359:{id:"n359",loc:[-85.633302,41.94351]},n3590:{id:"n3590",loc:[-85.623299,41.959631]},n3591:{id:"n3591",loc:[-85.622678,41.959873]},n3592:{id:"n3592",loc:[-85.625553,41.956179]},n3593:{id:"n3593",loc:[-85.623557,41.959231]},n3594:{id:"n3594",loc:[-85.622843,41.957373]},n3595:{id:"n3595",loc:[-85.619378,41.955677]},n3596:{id:"n3596",loc:[-85.620092,41.955425]},n3597:{id:"n3597",loc:[-85.622666,41.96044]},n3598:{id:"n3598",loc:[-85.621996,41.960256]},n3599:{id:"n3599",loc:[-85.623273,41.959997]},n36:{id:"n36",loc:[-85.637894,41.945551]},n360:{id:"n360",loc:[-85.633442,41.943794],tags:{highway:"crossing"}},n3600:{id:"n3600",loc:[-85.62477,41.95689]},n3601:{id:"n3601",loc:[-85.621641,41.955015]},n3602:{id:"n3602",loc:[-85.622495,41.960392]},n3603:{id:"n3603",loc:[-85.61918,41.955565]},n3604:{id:"n3604",loc:[-85.620017,41.955505]},n3605:{id:"n3605",loc:[-85.621739,41.956315]},n3606:{id:"n3606",loc:[-85.622957,41.959837]},n3607:{id:"n3607",loc:[-85.620912,41.960919]},n3608:{id:"n3608",loc:[-85.625231,41.956235]},n3609:{id:"n3609",loc:[-85.620976,41.961868]},n361:{id:"n361",loc:[-85.633381,41.94383]},n3610:{id:"n3610",loc:[-85.620956,41.958908]},n3611:{id:"n3611",loc:[-85.619035,41.956139]},n3612:{id:"n3612",loc:[-85.623643,41.958669]},n3613:{id:"n3613",loc:[-85.61949,41.956539]},n3614:{id:"n3614",loc:[-85.621927,41.958242]},n3615:{id:"n3615",loc:[-85.620826,41.955721]},n3616:{id:"n3616",loc:[-85.621202,41.961321]},n3617:{id:"n3617",loc:[-85.624877,41.95594]},n3618:{id:"n3618",loc:[-85.62065,41.958369]},n3619:{id:"n3619",loc:[-85.621524,41.956279]},n362:{id:"n362",loc:[-85.632977,41.944053]},n3620:{id:"n3620",loc:[-85.624662,41.955932]},n3621:{id:"n3621",loc:[-85.623048,41.958509]},n3622:{id:"n3622",loc:[-85.62111,41.95754]},n3623:{id:"n3623",loc:[-85.621508,41.954847]},n3624:{id:"n3624",loc:[-85.620655,41.958601]},n3625:{id:"n3625",loc:[-85.62154,41.954971]},n3626:{id:"n3626",loc:[-85.621691,41.955521]},n3627:{id:"n3627",loc:[-85.62154,41.954739]},n3628:{id:"n3628",loc:[-85.621996,41.959913]},n3629:{id:"n3629",loc:[-85.622286,41.960699]},n363:{id:"n363",loc:[-85.632915,41.943981],tags:{crossing:"marked",highway:"crossing"}},n3630:{id:"n3630",loc:[-85.622844,41.9572]},n3631:{id:"n3631",loc:[-85.620252,41.955446]},n3632:{id:"n3632",loc:[-85.623434,41.957528]},n3633:{id:"n3633",loc:[-85.623429,41.956858]},n3634:{id:"n3634",loc:[-85.622957,41.957137]},n3635:{id:"n3635",loc:[-85.622554,41.959027]},n3636:{id:"n3636",loc:[-85.623289,41.958314]},n3637:{id:"n3637",loc:[-85.622977,41.960855]},n3638:{id:"n3638",loc:[-85.624008,41.956953]},n3639:{id:"n3639",loc:[-85.621278,41.960855]},n364:{id:"n364",loc:[-85.632724,41.943969],tags:{crossing:"marked",highway:"crossing"}},n3640:{id:"n3640",loc:[-85.623128,41.956993]},n3641:{id:"n3641",loc:[-85.622452,41.959183]},n3642:{id:"n3642",loc:[-85.621095,41.961082]},n3643:{id:"n3643",loc:[-85.622011,41.960544]},n3644:{id:"n3644",loc:[-85.621637,41.955385]},n3645:{id:"n3645",loc:[-85.620999,41.959271]},n3646:{id:"n3646",loc:[-85.620044,41.956347]},n3647:{id:"n3647",loc:[-85.621936,41.959682]},n3648:{id:"n3648",loc:[-85.623761,41.95685]},n3649:{id:"n3649",loc:[-85.621239,41.959343]},n365:{id:"n365",loc:[-85.632621,41.944034]},n3650:{id:"n3650",loc:[-85.621073,41.956012]},n3651:{id:"n3651",loc:[-85.621271,41.956184]},n3652:{id:"n3652",loc:[-85.623444,41.95778]},n3653:{id:"n3653",loc:[-85.62125,41.96186]},n3654:{id:"n3654",loc:[-85.62169,41.961059]},n3655:{id:"n3655",loc:[-85.620012,41.955637]},n3656:{id:"n3656",loc:[-85.621058,41.9573]},n3657:{id:"n3657",loc:[-85.621138,41.957663]},n3658:{id:"n3658",loc:[-85.620773,41.957895]},n3659:{id:"n3659",loc:[-85.62007,41.957157]},n366:{id:"n366",loc:[-85.632684,41.944109],tags:{crossing:"marked",highway:"crossing"}},n3660:{id:"n3660",loc:[-85.624534,41.955844]},n3661:{id:"n3661",loc:[-85.621932,41.960807]},n3662:{id:"n3662",loc:[-85.623358,41.958138]},n3663:{id:"n3663",loc:[-85.620456,41.955514]},n3664:{id:"n3664",loc:[-85.623504,41.957607]},n3665:{id:"n3665",loc:[-85.621444,41.960751]},n3666:{id:"n3666",loc:[-85.623492,41.960213]},n3667:{id:"n3667",loc:[-85.621669,41.954655]},n3668:{id:"n3668",loc:[-85.623106,41.958685]},n3669:{id:"n3669",loc:[-85.620922,41.957867]},n367:{id:"n367",loc:[-85.632738,41.944172]},n3670:{id:"n3670",loc:[-85.620092,41.957296]},n3671:{id:"n3671",loc:[-85.621669,41.955222]},n3672:{id:"n3672",loc:[-85.621614,41.960967]},n3673:{id:"n3673",loc:[-85.621691,41.955732]},n3674:{id:"n3674",loc:[-85.619207,41.956419]},n3675:{id:"n3675",loc:[-85.621116,41.956603]},n3676:{id:"n3676",loc:[-85.623311,41.956929]},n3677:{id:"n3677",loc:[-85.625671,41.956499]},n3678:{id:"n3678",loc:[-85.623525,41.956738]},n3679:{id:"n3679",loc:[-85.625381,41.956634]},n368:{id:"n368",loc:[-85.63287,41.944135],tags:{crossing:"marked",highway:"crossing"}},n3680:{id:"n3680",loc:[-85.620096,41.95677]},n3681:{id:"n3681",loc:[-85.623803,41.958745]},n3682:{id:"n3682",loc:[-85.623498,41.958457]},n3683:{id:"n3683",loc:[-85.624223,41.957009]},n3684:{id:"n3684",loc:[-85.620026,41.956946]},n3685:{id:"n3685",loc:[-85.623005,41.960124]},n3686:{id:"n3686",loc:[-85.619073,41.955832]},n3687:{id:"n3687",loc:[-85.621744,41.95501]},n3688:{id:"n3688",loc:[-85.620804,41.958781]},n3689:{id:"n3689",loc:[-85.619844,41.957448]},n369:{id:"n369",loc:[-85.63298,41.944076]},n3690:{id:"n3690",loc:[-85.623713,41.958872]},n3691:{id:"n3691",loc:[-85.622329,41.960507]},n3692:{id:"n3692",loc:[-85.620804,41.956244]},n3693:{id:"n3693",loc:[-85.621818,41.955968]},n3694:{id:"n3694",loc:[-85.621405,41.958697]},n3695:{id:"n3695",loc:[-85.620998,41.960996]},n3696:{id:"n3696",loc:[-85.621621,41.960444]},n3697:{id:"n3697",loc:[-85.620941,41.961637]},n3698:{id:"n3698",loc:[-85.622195,41.958333]},n3699:{id:"n3699",loc:[-85.621668,41.961529]},n37:{id:"n37",loc:[-85.637611,41.945383]},n370:{id:"n370",loc:[-85.633191,41.944471]},n3700:{id:"n3700",loc:[-85.621015,41.957049]},n3701:{id:"n3701",loc:[-85.619368,41.955521]},n3702:{id:"n3702",loc:[-85.651578,41.942534]},n3703:{id:"n3703",loc:[-85.651541,41.943847]},n3704:{id:"n3704",loc:[-85.651365,41.944817]},n3705:{id:"n3705",loc:[-85.651076,41.945985]},n3706:{id:"n3706",loc:[-85.650626,41.947213]},n3707:{id:"n3707",loc:[-85.649669,41.949161]},n3708:{id:"n3708",loc:[-85.641802,41.961801]},n3709:{id:"n3709",loc:[-85.623333,41.961987]},n371:{id:"n371",loc:[-85.633132,41.94372]},n3710:{id:"n3710",loc:[-85.620621,41.965658]},n3711:{id:"n3711",loc:[-85.605673,41.965764]},n3712:{id:"n3712",loc:[-85.605664,41.962094]},n3713:{id:"n3713",loc:[-85.583774,41.962178]},n3714:{id:"n3714",loc:[-85.583774,41.961789]},n3715:{id:"n3715",loc:[-85.581303,41.961783]},n3716:{id:"n3716",loc:[-85.581245,41.958394]},n3717:{id:"n3717",loc:[-85.585299,41.955483]},n3718:{id:"n3718",loc:[-85.585588,41.955331]},n3719:{id:"n3719",loc:[-85.586053,41.955163]},n372:{id:"n372",loc:[-85.633011,41.943788]},n3720:{id:"n3720",loc:[-85.58632,41.955076]},n3721:{id:"n3721",loc:[-85.586478,41.955025]},n3722:{id:"n3722",loc:[-85.58692,41.954947]},n3723:{id:"n3723",loc:[-85.587345,41.954913]},n3724:{id:"n3724",loc:[-85.605592,41.954766]},n3725:{id:"n3725",loc:[-85.605303,41.936236]},n3726:{id:"n3726",loc:[-85.606941,41.936117]},n3727:{id:"n3727",loc:[-85.60876,41.935856]},n3728:{id:"n3728",loc:[-85.610092,41.935451]},n3729:{id:"n3729",loc:[-85.610681,41.935247]},n373:{id:"n373",loc:[-85.632854,41.943632]},n3730:{id:"n3730",loc:[-85.611446,41.934955]},n3731:{id:"n3731",loc:[-85.612057,41.934696]},n3732:{id:"n3732",loc:[-85.613256,41.934084]},n3733:{id:"n3733",loc:[-85.613948,41.933682]},n3734:{id:"n3734",loc:[-85.614638,41.933212]},n3735:{id:"n3735",loc:[-85.619801,41.929305]},n3736:{id:"n3736",loc:[-85.619768,41.925548]},n3737:{id:"n3737",loc:[-85.625761,41.925597]},n3738:{id:"n3738",loc:[-85.6263,41.927323]},n3739:{id:"n3739",loc:[-85.633708,41.927402]},n374:{id:"n374",loc:[-85.632974,41.943565]},n3740:{id:"n3740",loc:[-85.633927,41.929109]},n3741:{id:"n3741",loc:[-85.639213,41.929088]},n3742:{id:"n3742",loc:[-85.639204,41.925488]},n3743:{id:"n3743",loc:[-85.651425,41.925406]},n3744:{id:"n3744",loc:[-85.643386,41.941933]},n3745:{id:"n3745",loc:[-85.642776,41.941161]},n3746:{id:"n3746",loc:[-85.637277,41.948812]},n3747:{id:"n3747",loc:[-85.637366,41.94897]},n3748:{id:"n3748",loc:[-85.637329,41.94889]},n3749:{id:"n3749",loc:[-85.629649,41.952596]},n375:{id:"n375",loc:[-85.632741,41.943351]},n3750:{id:"n3750",loc:[-85.630291,41.954684]},n3751:{id:"n3751",loc:[-85.630284,41.953713]},n3752:{id:"n3752",loc:[-85.630269,41.952463]},n3753:{id:"n3753",loc:[-85.633933,41.949896]},n3754:{id:"n3754",loc:[-85.629339,41.941467]},n3755:{id:"n3755",loc:[-85.629857,41.94316]},n3756:{id:"n3756",loc:[-85.629987,41.944025]},n3757:{id:"n3757",loc:[-85.628538,41.948604]},n3758:{id:"n3758",loc:[-85.627415,41.957442]},n3759:{id:"n3759",loc:[-85.627019,41.957369]},n376:{id:"n376",loc:[-85.63251,41.943481]},n3760:{id:"n3760",loc:[-85.62167,41.952179]},n3761:{id:"n3761",loc:[-85.62167,41.952138]},n3762:{id:"n3762",loc:[-85.621562,41.952139]},n3763:{id:"n3763",loc:[-85.621562,41.952058]},n3764:{id:"n3764",loc:[-85.621476,41.952043]},n3765:{id:"n3765",loc:[-85.621477,41.952132]},n3766:{id:"n3766",loc:[-85.621386,41.952132]},n3767:{id:"n3767",loc:[-85.621387,41.95214]},n3768:{id:"n3768",loc:[-85.621262,41.95214]},n3769:{id:"n3769",loc:[-85.621261,41.952038]},n377:{id:"n377",loc:[-85.632706,41.943715]},n3770:{id:"n3770",loc:[-85.621389,41.952038]},n3771:{id:"n3771",loc:[-85.621389,41.952043]},n3772:{id:"n3772",loc:[-85.620898,41.952024]},n3773:{id:"n3773",loc:[-85.620898,41.952085]},n3774:{id:"n3774",loc:[-85.620774,41.952084]},n3775:{id:"n3775",loc:[-85.620774,41.952023]},n3776:{id:"n3776",loc:[-85.620749,41.952036]},n3777:{id:"n3777",loc:[-85.620723,41.952097]},n3778:{id:"n3778",loc:[-85.626158,41.958996]},n3779:{id:"n3779",loc:[-85.626319,41.958686]},n378:{id:"n378",loc:[-85.638683,41.943295]},n3780:{id:"n3780",loc:[-85.626119,41.958629]},n3781:{id:"n3781",loc:[-85.626064,41.958733]},n3782:{id:"n3782",loc:[-85.626155,41.958759]},n3783:{id:"n3783",loc:[-85.626048,41.958965]},n3784:{id:"n3784",loc:[-85.620648,41.952079]},n3785:{id:"n3785",loc:[-85.63826,41.961213]},n3786:{id:"n3786",loc:[-85.638003,41.961614]},n3787:{id:"n3787",loc:[-85.638817,41.961902]},n3788:{id:"n3788",loc:[-85.639073,41.961501]},n3789:{id:"n3789",loc:[-85.620674,41.952018]},n379:{id:"n379",loc:[-85.638684,41.94323]},n3790:{id:"n3790",loc:[-85.62082,41.952106]},n3791:{id:"n3791",loc:[-85.620819,41.952143]},n3792:{id:"n3792",loc:[-85.620778,41.952143]},n3793:{id:"n3793",loc:[-85.620778,41.952106]},n3794:{id:"n3794",loc:[-85.620563,41.952276]},n3795:{id:"n3795",loc:[-85.620543,41.95238]},n3796:{id:"n3796",loc:[-85.620422,41.952367]},n3797:{id:"n3797",loc:[-85.620441,41.952263]},n3798:{id:"n3798",loc:[-85.620561,41.952266]},n3799:{id:"n3799",loc:[-85.620444,41.952254]},n38:{id:"n38",loc:[-85.63879,41.943295]},n380:{id:"n380",loc:[-85.638627,41.94322]},n3800:{id:"n3800",loc:[-85.620773,41.955585]},n3801:{id:"n3801",loc:[-85.621265,41.955989]},n3802:{id:"n3802",loc:[-85.620692,41.954969]},n3803:{id:"n3803",loc:[-85.620691,41.955367]},n3804:{id:"n3804",loc:[-85.620458,41.952178]},n3805:{id:"n3805",loc:[-85.620575,41.95219]},n3806:{id:"n3806",loc:[-85.617609,41.952712]},n3807:{id:"n3807",loc:[-85.617533,41.952801],tags:{entrance:"yes"}},n3808:{id:"n3808",loc:[-85.616816,41.952911]},n3809:{id:"n3809",loc:[-85.616797,41.952901]},n381:{id:"n381",loc:[-85.638624,41.943294]},n3810:{id:"n3810",loc:[-85.616343,41.952694]},n3811:{id:"n3811",loc:[-85.616336,41.952729]},n3812:{id:"n3812",loc:[-85.616343,41.952772]},n3813:{id:"n3813",loc:[-85.628479,41.948649]},n3814:{id:"n3814",loc:[-85.628413,41.948679]},n3815:{id:"n3815",loc:[-85.628336,41.948694]},n3816:{id:"n3816",loc:[-85.62826,41.948694]},n3817:{id:"n3817",loc:[-85.628185,41.948679]},n3818:{id:"n3818",loc:[-85.628103,41.948649]},n3819:{id:"n3819",loc:[-85.627482,41.948395]},n382:{id:"n382",loc:[-85.638437,41.943291]},n3820:{id:"n3820",loc:[-85.619957,41.951168]},n3821:{id:"n3821",loc:[-85.619955,41.952077]},n3822:{id:"n3822",loc:[-85.619843,41.952666]},n3823:{id:"n3823",loc:[-85.619513,41.95324]},n3824:{id:"n3824",loc:[-85.619163,41.953668]},n3825:{id:"n3825",loc:[-85.618813,41.953947]},n3826:{id:"n3826",loc:[-85.618265,41.954252]},n3827:{id:"n3827",loc:[-85.617691,41.954458]},n3828:{id:"n3828",loc:[-85.616978,41.95459]},n3829:{id:"n3829",loc:[-85.615408,41.954628]},n383:{id:"n383",loc:[-85.63844,41.943209]},n3830:{id:"n3830",loc:[-85.615374,41.951076]},n3831:{id:"n3831",loc:[-85.61932,41.947564]},n3832:{id:"n3832",loc:[-85.610553,41.94755]},n3833:{id:"n3833",loc:[-85.610572,41.951065]},n3834:{id:"n3834",loc:[-85.617548,41.94757]},n3835:{id:"n3835",loc:[-85.619842,41.947939]},n3836:{id:"n3836",loc:[-85.619874,41.950905]},n3837:{id:"n3837",loc:[-85.619695,41.950911]},n3838:{id:"n3838",loc:[-85.617591,41.951078]},n3839:{id:"n3839",loc:[-85.619551,41.951065]},n384:{id:"n384",loc:[-85.632616,41.944021]},n3840:{id:"n3840",loc:[-85.626813,41.947337]},n3841:{id:"n3841",loc:[-85.616371,41.952814]},n3842:{id:"n3842",loc:[-85.617205,41.951308]},n3843:{id:"n3843",loc:[-85.616795,41.950953]},n3844:{id:"n3844",loc:[-85.617441,41.950889]},n3845:{id:"n3845",loc:[-85.619155,41.949377]},n3846:{id:"n3846",loc:[-85.618556,41.949377]},n3847:{id:"n3847",loc:[-85.618557,41.948372]},n3848:{id:"n3848",loc:[-85.619156,41.948372]},n3849:{id:"n3849",loc:[-85.61927,41.949796]},n385:{id:"n385",loc:[-85.632319,41.944172]},n3850:{id:"n3850",loc:[-85.61926,41.948344]},n3851:{id:"n3851",loc:[-85.619219,41.948264]},n3852:{id:"n3852",loc:[-85.619147,41.948196]},n3853:{id:"n3853",loc:[-85.619049,41.948144]},n3854:{id:"n3854",loc:[-85.618942,41.948116]},n3855:{id:"n3855",loc:[-85.618822,41.948109]},n3856:{id:"n3856",loc:[-85.618699,41.94813]},n3857:{id:"n3857",loc:[-85.618937,41.951943]},n3858:{id:"n3858",loc:[-85.616762,41.952222]},n3859:{id:"n3859",loc:[-85.616799,41.95472]},n386:{id:"n386",loc:[-85.63221,41.944066]},n3860:{id:"n3860",loc:[-85.616458,41.954735]},n3861:{id:"n3861",loc:[-85.61763,41.951515]},n3862:{id:"n3862",loc:[-85.617735,41.951572]},n3863:{id:"n3863",loc:[-85.61929,41.951573]},n3864:{id:"n3864",loc:[-85.617134,41.951348]},n3865:{id:"n3865",loc:[-85.616598,41.95192]},n3866:{id:"n3866",loc:[-85.616557,41.951997]},n3867:{id:"n3867",loc:[-85.61658,41.952093]},n3868:{id:"n3868",loc:[-85.616636,41.952145]},n3869:{id:"n3869",loc:[-85.616918,41.952276]},n387:{id:"n387",loc:[-85.632524,41.943912]},n3870:{id:"n3870",loc:[-85.617098,41.952235]},n3871:{id:"n3871",loc:[-85.61892,41.951467]},n3872:{id:"n3872",loc:[-85.618035,41.951473]},n3873:{id:"n3873",loc:[-85.618036,41.951572]},n3874:{id:"n3874",loc:[-85.61892,41.951573]},n3875:{id:"n3875",loc:[-85.618919,41.951957]},n3876:{id:"n3876",loc:[-85.619457,41.952237]},n3877:{id:"n3877",loc:[-85.618178,41.953618]},n3878:{id:"n3878",loc:[-85.617658,41.953366]},n3879:{id:"n3879",loc:[-85.617987,41.953024]},n388:{id:"n388",loc:[-85.632268,41.943621]},n3880:{id:"n3880",loc:[-85.618429,41.953248]},n3881:{id:"n3881",loc:[-85.618554,41.953119]},n3882:{id:"n3882",loc:[-85.618077,41.952868]},n3883:{id:"n3883",loc:[-85.618039,41.952886]},n3884:{id:"n3884",loc:[-85.619375,41.952169]},n3885:{id:"n3885",loc:[-85.618137,41.953538]},n3886:{id:"n3886",loc:[-85.61799,41.953555]},n3887:{id:"n3887",loc:[-85.617729,41.953423]},n3888:{id:"n3888",loc:[-85.618101,41.953029]},n3889:{id:"n3889",loc:[-85.618516,41.953119]},n389:{id:"n389",loc:[-85.631951,41.943773]},n3890:{id:"n3890",loc:[-85.619132,41.952042]},n3891:{id:"n3891",loc:[-85.618235,41.952981]},n3892:{id:"n3892",loc:[-85.618485,41.952425]},n3893:{id:"n3893",loc:[-85.618676,41.952519]},n3894:{id:"n3894",loc:[-85.618942,41.952648]},n3895:{id:"n3895",loc:[-85.618287,41.953122]},n3896:{id:"n3896",loc:[-85.617914,41.953516]},n3897:{id:"n3897",loc:[-85.617836,41.953573]},n3898:{id:"n3898",loc:[-85.616477,41.95289]},n3899:{id:"n3899",loc:[-85.618441,41.953201]},n39:{id:"n39",loc:[-85.619931,41.951013]},n390:{id:"n390",loc:[-85.631981,41.943654]},n3900:{id:"n3900",loc:[-85.617537,41.953335]},n3901:{id:"n3901",loc:[-85.617221,41.953166]},n3902:{id:"n3902",loc:[-85.617253,41.953135]},n3903:{id:"n3903",loc:[-85.617211,41.953114]},n3904:{id:"n3904",loc:[-85.617197,41.95313]},n3905:{id:"n3905",loc:[-85.616802,41.952925]},n3906:{id:"n3906",loc:[-85.616771,41.952928]},n3907:{id:"n3907",loc:[-85.616493,41.952785]},n3908:{id:"n3908",loc:[-85.616823,41.952426]},n3909:{id:"n3909",loc:[-85.617191,41.952616]},n391:{id:"n391",loc:[-85.631886,41.943699]},n3910:{id:"n3910",loc:[-85.61724,41.952559]},n3911:{id:"n3911",loc:[-85.61721,41.952542]},n3912:{id:"n3912",loc:[-85.617395,41.952351]},n3913:{id:"n3913",loc:[-85.617426,41.952368]},n3914:{id:"n3914",loc:[-85.617483,41.952309]},n3915:{id:"n3915",loc:[-85.617332,41.952229]},n3916:{id:"n3916",loc:[-85.617451,41.952102]},n3917:{id:"n3917",loc:[-85.617477,41.952115]},n3918:{id:"n3918",loc:[-85.617658,41.951923]},n3919:{id:"n3919",loc:[-85.617634,41.95191]},n392:{id:"n392",loc:[-85.631807,41.943606]},n3920:{id:"n3920",loc:[-85.617747,41.951786]},n3921:{id:"n3921",loc:[-85.618268,41.952056]},n3922:{id:"n3922",loc:[-85.618211,41.952122]},n3923:{id:"n3923",loc:[-85.618386,41.95222]},n3924:{id:"n3924",loc:[-85.618098,41.952527]},n3925:{id:"n3925",loc:[-85.617916,41.95243]},n3926:{id:"n3926",loc:[-85.617854,41.952498]},n3927:{id:"n3927",loc:[-85.617769,41.952453]},n3928:{id:"n3928",loc:[-85.617476,41.952773]},n3929:{id:"n3929",loc:[-85.617876,41.952973]},n393:{id:"n393",loc:[-85.631902,41.943561]},n3930:{id:"n3930",loc:[-85.617174,41.953638]},n3931:{id:"n3931",loc:[-85.618016,41.953578]},n3932:{id:"n3932",loc:[-85.618107,41.953628]},n3933:{id:"n3933",loc:[-85.618067,41.954268]},n3934:{id:"n3934",loc:[-85.617864,41.954263]},n3935:{id:"n3935",loc:[-85.61762,41.954205]},n3936:{id:"n3936",loc:[-85.617437,41.954103]},n3937:{id:"n3937",loc:[-85.617294,41.953978]},n3938:{id:"n3938",loc:[-85.617217,41.95384]},n3939:{id:"n3939",loc:[-85.616814,41.954327]},n394:{id:"n394",loc:[-85.63236,41.943543]},n3940:{id:"n3940",loc:[-85.616778,41.95381]},n3941:{id:"n3941",loc:[-85.616585,41.953707]},n3942:{id:"n3942",loc:[-85.616458,41.954318]},n3943:{id:"n3943",loc:[-85.616643,41.954345]},n3944:{id:"n3944",loc:[-85.618133,41.951412]},n3945:{id:"n3945",loc:[-85.618326,41.951411]},n3946:{id:"n3946",loc:[-85.618503,41.95141]},n3947:{id:"n3947",loc:[-85.618681,41.951409]},n3948:{id:"n3948",loc:[-85.618868,41.951408]},n3949:{id:"n3949",loc:[-85.617047,41.95136]},n395:{id:"n395",loc:[-85.633839,41.944082]},n3950:{id:"n3950",loc:[-85.616502,41.951946]},n3951:{id:"n3951",loc:[-85.616497,41.952072]},n3952:{id:"n3952",loc:[-85.616565,41.952165]},n3953:{id:"n3953",loc:[-85.616663,41.952218]},n3954:{id:"n3954",loc:[-85.616733,41.952255]},n3955:{id:"n3955",loc:[-85.617238,41.952512],tags:{entrance:"yes"}},n3956:{id:"n3956",loc:[-85.617043,41.952406]},n3957:{id:"n3957",loc:[-85.617691,41.951711]},n3958:{id:"n3958",loc:[-85.617773,41.951679]},n3959:{id:"n3959",loc:[-85.619085,41.951681]},n396:{id:"n396",loc:[-85.63376,41.944097]},n3960:{id:"n3960",loc:[-85.617943,41.952895]},n3961:{id:"n3961",loc:[-85.618039,41.952938]},n3962:{id:"n3962",loc:[-85.61763,41.95336]},n3963:{id:"n3963",loc:[-85.617554,41.95344]},n3964:{id:"n3964",loc:[-85.617381,41.952366],tags:{entrance:"yes"}},n3965:{id:"n3965",loc:[-85.617184,41.952254]},n3966:{id:"n3966",loc:[-85.617208,41.952496]},n3967:{id:"n3967",loc:[-85.617124,41.952581],tags:{entrance:"yes"}},n3968:{id:"n3968",loc:[-85.618094,41.952735]},n3969:{id:"n3969",loc:[-85.617702,41.952525],tags:{entrance:"yes"}},n397:{id:"n397",loc:[-85.63361,41.943957]},n3970:{id:"n3970",loc:[-85.617554,41.952686],tags:{entrance:"yes"}},n3971:{id:"n3971",loc:[-85.617959,41.952878]},n3972:{id:"n3972",loc:[-85.616367,41.952655]},n3973:{id:"n3973",loc:[-85.616416,41.952851]},n3974:{id:"n3974",loc:[-85.619777,41.951075]},n3975:{id:"n3975",loc:[-85.618611,41.94817]},n3976:{id:"n3976",loc:[-85.618538,41.948229]},n3977:{id:"n3977",loc:[-85.617421,41.947559]},n3978:{id:"n3978",loc:[-85.617395,41.951039]},n3979:{id:"n3979",loc:[-85.618488,41.94829]},n398:{id:"n398",loc:[-85.633309,41.943886]},n3980:{id:"n3980",loc:[-85.610238,41.954774]},n3981:{id:"n3981",loc:[-85.617449,41.950756]},n3982:{id:"n3982",loc:[-85.617288,41.951286]},n3983:{id:"n3983",loc:[-85.61745,41.950197]},n3984:{id:"n3984",loc:[-85.617436,41.948908]},n3985:{id:"n3985",loc:[-85.615915,41.953804]},n3986:{id:"n3986",loc:[-85.615953,41.953968]},n3987:{id:"n3987",loc:[-85.616031,41.954085]},n3988:{id:"n3988",loc:[-85.616135,41.954181]},n3989:{id:"n3989",loc:[-85.616273,41.954263]},n399:{id:"n399",loc:[-85.633226,41.943931]},n3990:{id:"n3990",loc:[-85.618327,41.951083]},n3991:{id:"n3991",loc:[-85.618135,41.951084]},n3992:{id:"n3992",loc:[-85.618503,41.951082]},n3993:{id:"n3993",loc:[-85.618682,41.951081]},n3994:{id:"n3994",loc:[-85.618864,41.951082]},n3995:{id:"n3995",loc:[-85.616761,41.950101]},n3996:{id:"n3996",loc:[-85.617317,41.947558]},n3997:{id:"n3997",loc:[-85.617336,41.948883]},n3998:{id:"n3998",loc:[-85.616779,41.949295]},n3999:{id:"n3999",loc:[-85.616754,41.949349]},n4:{id:"n4",loc:[-85.622764,41.950892],tags:{highway:"stop",direction:"forward",stop:"minor"}},n40:{id:"n40",loc:[-85.619841,41.951037]},n400:{id:"n400",loc:[-85.63326,41.943966]},n4000:{id:"n4000",loc:[-85.616761,41.950865]},n4001:{id:"n4001",loc:[-85.616883,41.951041]},n4002:{id:"n4002",loc:[-85.617004,41.951142]},n4003:{id:"n4003",loc:[-85.617062,41.951248]},n4004:{id:"n4004",loc:[-85.616809,41.949273]},n4005:{id:"n4005",loc:[-85.616755,41.949489]},n4006:{id:"n4006",loc:[-85.616759,41.949971]},n4007:{id:"n4007",loc:[-85.616757,41.949702]},n4008:{id:"n4008",loc:[-85.618456,41.94836]},n4009:{id:"n4009",loc:[-85.618447,41.948428]},n401:{id:"n401",loc:[-85.63324,41.943976]},n4010:{id:"n4010",loc:[-85.618437,41.949322]},n4011:{id:"n4011",loc:[-85.618447,41.949418]},n4012:{id:"n4012",loc:[-85.618478,41.949491]},n4013:{id:"n4013",loc:[-85.618535,41.949559]},n4014:{id:"n4014",loc:[-85.618623,41.94962]},n4015:{id:"n4015",loc:[-85.618721,41.94966]},n4016:{id:"n4016",loc:[-85.618838,41.949674]},n4017:{id:"n4017",loc:[-85.618967,41.949667]},n4018:{id:"n4018",loc:[-85.619065,41.949632]},n4019:{id:"n4019",loc:[-85.61915,41.949578]},n402:{id:"n402",loc:[-85.63327,41.944006]},n4020:{id:"n4020",loc:[-85.619216,41.949507]},n4021:{id:"n4021",loc:[-85.61927,41.949399]},n4022:{id:"n4022",loc:[-85.619074,41.947639]},n4023:{id:"n4023",loc:[-85.619073,41.947793]},n4024:{id:"n4024",loc:[-85.618912,41.947793]},n4025:{id:"n4025",loc:[-85.618911,41.947947]},n4026:{id:"n4026",loc:[-85.618752,41.947947]},n4027:{id:"n4027",loc:[-85.618754,41.947637]},n4028:{id:"n4028",loc:[-85.617896,41.947599]},n4029:{id:"n4029",loc:[-85.617898,41.947811]},n403:{id:"n403",loc:[-85.633278,41.944002]},n4030:{id:"n4030",loc:[-85.617717,41.947812]},n4031:{id:"n4031",loc:[-85.617715,41.9476]},n4032:{id:"n4032",loc:[-85.619003,41.949828]},n4033:{id:"n4033",loc:[-85.619003,41.949882]},n4034:{id:"n4034",loc:[-85.618926,41.949882]},n4035:{id:"n4035",loc:[-85.618926,41.949828]},n4036:{id:"n4036",loc:[-85.618861,41.949809]},n4037:{id:"n4037",loc:[-85.618861,41.949898]},n4038:{id:"n4038",loc:[-85.618688,41.949898]},n4039:{id:"n4039",loc:[-85.618687,41.94981]},n404:{id:"n404",loc:[-85.63331,41.944036]},n4040:{id:"n4040",loc:[-85.618349,41.949473]},n4041:{id:"n4041",loc:[-85.618287,41.949473]},n4042:{id:"n4042",loc:[-85.618287,41.94942]},n4043:{id:"n4043",loc:[-85.618348,41.949419]},n4044:{id:"n4044",loc:[-85.62316,41.951604]},n4045:{id:"n4045",loc:[-85.623026,41.951605]},n4046:{id:"n4046",loc:[-85.623023,41.951466]},n4047:{id:"n4047",loc:[-85.623134,41.951465]},n4048:{id:"n4048",loc:[-85.623136,41.951539]},n4049:{id:"n4049",loc:[-85.623159,41.951539]},n405:{id:"n405",loc:[-85.633348,41.944015]},n4050:{id:"n4050",loc:[-85.623025,41.95155]},n4051:{id:"n4051",loc:[-85.622955,41.951551]},n4052:{id:"n4052",loc:[-85.622953,41.951507]},n4053:{id:"n4053",loc:[-85.623024,41.951506]},n4054:{id:"n4054",loc:[-85.623318,41.951242]},n4055:{id:"n4055",loc:[-85.623175,41.951241]},n4056:{id:"n4056",loc:[-85.623176,41.951153]},n4057:{id:"n4057",loc:[-85.623319,41.951154]},n4058:{id:"n4058",loc:[-85.623077,41.951191]},n4059:{id:"n4059",loc:[-85.622973,41.951191]},n406:{id:"n406",loc:[-85.63338,41.944048]},n4060:{id:"n4060",loc:[-85.622972,41.951349]},n4061:{id:"n4061",loc:[-85.623059,41.95135]},n4062:{id:"n4062",loc:[-85.62306,41.951301]},n4063:{id:"n4063",loc:[-85.623077,41.951301]},n4064:{id:"n4064",loc:[-85.623117,41.951405]},n4065:{id:"n4065",loc:[-85.62312,41.951087]},n4066:{id:"n4066",loc:[-85.623118,41.951274]},n4067:{id:"n4067",loc:[-85.62328,41.951275]},n4068:{id:"n4068",loc:[-85.62328,41.951242]},n4069:{id:"n4069",loc:[-85.623179,41.951392]},n407:{id:"n407",loc:[-85.633431,41.94402]},n4070:{id:"n4070",loc:[-85.623141,41.951392]},n4071:{id:"n4071",loc:[-85.623142,41.95136]},n4072:{id:"n4072",loc:[-85.623179,41.951361]},n4073:{id:"n4073",loc:[-85.622565,41.951639]},n4074:{id:"n4074",loc:[-85.622565,41.951741]},n4075:{id:"n4075",loc:[-85.622463,41.95174]},n4076:{id:"n4076",loc:[-85.622463,41.95173]},n4077:{id:"n4077",loc:[-85.622442,41.95173]},n4078:{id:"n4078",loc:[-85.622442,41.951742]},n4079:{id:"n4079",loc:[-85.622361,41.951742]},n408:{id:"n408",loc:[-85.633425,41.944014]},n4080:{id:"n4080",loc:[-85.622362,41.951667]},n4081:{id:"n4081",loc:[-85.622441,41.951667]},n4082:{id:"n4082",loc:[-85.622441,41.951688]},n4083:{id:"n4083",loc:[-85.622461,41.951688]},n4084:{id:"n4084",loc:[-85.622461,41.951638]},n4085:{id:"n4085",loc:[-85.62255,41.951587]},n4086:{id:"n4086",loc:[-85.622449,41.95159]},n4087:{id:"n4087",loc:[-85.622441,41.951448]},n4088:{id:"n4088",loc:[-85.62253,41.951445]},n4089:{id:"n4089",loc:[-85.622532,41.951486]},n409:{id:"n409",loc:[-85.633457,41.943997]},n4090:{id:"n4090",loc:[-85.622555,41.951485]},n4091:{id:"n4091",loc:[-85.622558,41.951531]},n4092:{id:"n4092",loc:[-85.622547,41.951531]},n4093:{id:"n4093",loc:[-85.622451,41.95159]},n4094:{id:"n4094",loc:[-85.622452,41.95161]},n4095:{id:"n4095",loc:[-85.622106,41.951617]},n4096:{id:"n4096",loc:[-85.622133,41.951443]},n4097:{id:"n4097",loc:[-85.622552,41.951379]},n4098:{id:"n4098",loc:[-85.622443,41.95138]},n4099:{id:"n4099",loc:[-85.622441,41.951281]},n41:{id:"n41",loc:[-85.636233,41.942764]},n410:{id:"n410",loc:[-85.633429,41.943969]},n4100:{id:"n4100",loc:[-85.62255,41.95128]},n4101:{id:"n4101",loc:[-85.622541,41.951437]},n4102:{id:"n4102",loc:[-85.622441,41.951438]},n4103:{id:"n4103",loc:[-85.621561,41.951444]},n4104:{id:"n4104",loc:[-85.622302,41.951479]},n4105:{id:"n4105",loc:[-85.6223,41.95152]},n4106:{id:"n4106",loc:[-85.622169,41.951517]},n4107:{id:"n4107",loc:[-85.622171,41.951476]},n4108:{id:"n4108",loc:[-85.622543,41.951228]},n4109:{id:"n4109",loc:[-85.622433,41.951228]},n411:{id:"n411",loc:[-85.633442,41.943962]},n4110:{id:"n4110",loc:[-85.622433,41.951133]},n4111:{id:"n4111",loc:[-85.622543,41.951133]},n4112:{id:"n4112",loc:[-85.622356,41.951256]},n4113:{id:"n4113",loc:[-85.622293,41.951256]},n4114:{id:"n4114",loc:[-85.622292,41.9512]},n4115:{id:"n4115",loc:[-85.622313,41.9512]},n4116:{id:"n4116",loc:[-85.622312,41.951173]},n4117:{id:"n4117",loc:[-85.622364,41.951173]},n4118:{id:"n4118",loc:[-85.622365,41.951231]},n4119:{id:"n4119",loc:[-85.622355,41.951231]},n412:{id:"n412",loc:[-85.633411,41.943932]},n4120:{id:"n4120",loc:[-85.62197,41.951155]},n4121:{id:"n4121",loc:[-85.62197,41.951213]},n4122:{id:"n4122",loc:[-85.621848,41.951213]},n4123:{id:"n4123",loc:[-85.621848,41.951155]},n4124:{id:"n4124",loc:[-85.622193,41.951268]},n4125:{id:"n4125",loc:[-85.622194,41.951305]},n4126:{id:"n4126",loc:[-85.622121,41.951306]},n4127:{id:"n4127",loc:[-85.622121,41.951322]},n4128:{id:"n4128",loc:[-85.621984,41.951324]},n4129:{id:"n4129",loc:[-85.621983,41.951271]},n413:{id:"n413",loc:[-85.633421,41.943926]},n4130:{id:"n4130",loc:[-85.622171,41.9514]},n4131:{id:"n4131",loc:[-85.622148,41.951382]},n4132:{id:"n4132",loc:[-85.6221,41.951414]},n4133:{id:"n4133",loc:[-85.622122,41.951433]},n4134:{id:"n4134",loc:[-85.621782,41.951148]},n4135:{id:"n4135",loc:[-85.621783,41.951219]},n4136:{id:"n4136",loc:[-85.62164,41.951221]},n4137:{id:"n4137",loc:[-85.62164,41.951236]},n4138:{id:"n4138",loc:[-85.621556,41.951237]},n4139:{id:"n4139",loc:[-85.621555,41.95117]},n414:{id:"n414",loc:[-85.633376,41.94388]},n4140:{id:"n4140",loc:[-85.621644,41.951169]},n4141:{id:"n4141",loc:[-85.621643,41.951139]},n4142:{id:"n4142",loc:[-85.621719,41.951138]},n4143:{id:"n4143",loc:[-85.621719,41.951148]},n4144:{id:"n4144",loc:[-85.621409,41.951322]},n4145:{id:"n4145",loc:[-85.621338,41.951322]},n4146:{id:"n4146",loc:[-85.621336,41.95115]},n4147:{id:"n4147",loc:[-85.621521,41.951149]},n4148:{id:"n4148",loc:[-85.621522,41.951228]},n4149:{id:"n4149",loc:[-85.621408,41.951228]},n415:{id:"n415",loc:[-85.633348,41.943895]},n4150:{id:"n4150",loc:[-85.621284,41.951219]},n4151:{id:"n4151",loc:[-85.621153,41.951219]},n4152:{id:"n4152",loc:[-85.621152,41.951152]},n4153:{id:"n4153",loc:[-85.621283,41.951152]},n4154:{id:"n4154",loc:[-85.621159,41.951241]},n4155:{id:"n4155",loc:[-85.62116,41.951301]},n4156:{id:"n4156",loc:[-85.621088,41.951302]},n4157:{id:"n4157",loc:[-85.621088,41.951241]},n4158:{id:"n4158",loc:[-85.621049,41.951158]},n4159:{id:"n4159",loc:[-85.62105,41.951229]},n416:{id:"n416",loc:[-85.633341,41.943888]},n4160:{id:"n4160",loc:[-85.620976,41.951229]},n4161:{id:"n4161",loc:[-85.620977,41.951295]},n4162:{id:"n4162",loc:[-85.620887,41.951296]},n4163:{id:"n4163",loc:[-85.620886,41.951229]},n4164:{id:"n4164",loc:[-85.620862,41.951229]},n4165:{id:"n4165",loc:[-85.620861,41.951159]},n4166:{id:"n4166",loc:[-85.620626,41.951133]},n4167:{id:"n4167",loc:[-85.620626,41.951205]},n4168:{id:"n4168",loc:[-85.620412,41.951206]},n4169:{id:"n4169",loc:[-85.620411,41.951134]},n417:{id:"n417",loc:[-85.633321,41.943898]},n4170:{id:"n4170",loc:[-85.621775,41.951443]},n4171:{id:"n4171",loc:[-85.621777,41.951264]},n4172:{id:"n4172",loc:[-85.621565,41.951654]},n4173:{id:"n4173",loc:[-85.621331,41.951439]},n4174:{id:"n4174",loc:[-85.621031,41.951443]},n4175:{id:"n4175",loc:[-85.621836,41.951724]},n4176:{id:"n4176",loc:[-85.621834,41.951621]},n4177:{id:"n4177",loc:[-85.62197,41.951619]},n4178:{id:"n4178",loc:[-85.621972,41.951722]},n4179:{id:"n4179",loc:[-85.621772,41.951638]},n418:{id:"n418",loc:[-85.633547,41.943896]},n4180:{id:"n4180",loc:[-85.621772,41.951715]},n4181:{id:"n4181",loc:[-85.621699,41.951716]},n4182:{id:"n4182",loc:[-85.6217,41.951722]},n4183:{id:"n4183",loc:[-85.621641,41.951722]},n4184:{id:"n4184",loc:[-85.62164,41.951639]},n4185:{id:"n4185",loc:[-85.621505,41.951655]},n4186:{id:"n4186",loc:[-85.621505,41.951729]},n4187:{id:"n4187",loc:[-85.621389,41.951729]},n4188:{id:"n4188",loc:[-85.62139,41.951654]},n4189:{id:"n4189",loc:[-85.621105,41.951635]},n419:{id:"n419",loc:[-85.633467,41.944075]},n4190:{id:"n4190",loc:[-85.621104,41.951576]},n4191:{id:"n4191",loc:[-85.621168,41.951576]},n4192:{id:"n4192",loc:[-85.621168,41.951595]},n4193:{id:"n4193",loc:[-85.621261,41.951595]},n4194:{id:"n4194",loc:[-85.621261,41.951646]},n4195:{id:"n4195",loc:[-85.621294,41.951646]},n4196:{id:"n4196",loc:[-85.621294,41.951732]},n4197:{id:"n4197",loc:[-85.621251,41.951732]},n4198:{id:"n4198",loc:[-85.621251,41.95174]},n4199:{id:"n4199",loc:[-85.621175,41.951741]},n42:{id:"n42",loc:[-85.635996,41.942727]},n420:{id:"n420",loc:[-85.633578,41.944055]},n4200:{id:"n4200",loc:[-85.621175,41.951651]},n4201:{id:"n4201",loc:[-85.621189,41.951651]},n4202:{id:"n4202",loc:[-85.621189,41.951635]},n4203:{id:"n4203",loc:[-85.620554,41.951641]},n4204:{id:"n4204",loc:[-85.620555,41.951742]},n4205:{id:"n4205",loc:[-85.620719,41.951742]},n4206:{id:"n4206",loc:[-85.620719,41.951731]},n4207:{id:"n4207",loc:[-85.620803,41.95173]},n4208:{id:"n4208",loc:[-85.620803,41.951603]},n4209:{id:"n4209",loc:[-85.62072,41.951603]},n421:{id:"n421",loc:[-85.633462,41.944125]},n4210:{id:"n4210",loc:[-85.620721,41.951641]},n4211:{id:"n4211",loc:[-85.620269,41.953053]},n4212:{id:"n4212",loc:[-85.620229,41.953051]},n4213:{id:"n4213",loc:[-85.620231,41.953013]},n4214:{id:"n4214",loc:[-85.620271,41.953015]},n4215:{id:"n4215",loc:[-85.620215,41.953133]},n4216:{id:"n4216",loc:[-85.62013,41.953134]},n4217:{id:"n4217",loc:[-85.620129,41.953083]},n4218:{id:"n4218",loc:[-85.620214,41.953082]},n4219:{id:"n4219",loc:[-85.62016,41.953272]},n422:{id:"n422",loc:[-85.633372,41.944061]},n4220:{id:"n4220",loc:[-85.620046,41.953273]},n4221:{id:"n4221",loc:[-85.620045,41.953171]},n4222:{id:"n4222",loc:[-85.620088,41.953171]},n4223:{id:"n4223",loc:[-85.620087,41.953162]},n4224:{id:"n4224",loc:[-85.620121,41.953162]},n4225:{id:"n4225",loc:[-85.620121,41.953173]},n4226:{id:"n4226",loc:[-85.620157,41.953173]},n4227:{id:"n4227",loc:[-85.620158,41.953196]},n4228:{id:"n4228",loc:[-85.620189,41.953196]},n4229:{id:"n4229",loc:[-85.620189,41.953246]},n423:{id:"n423",loc:[-85.633509,41.943981]},n4230:{id:"n4230",loc:[-85.62016,41.953246]},n4231:{id:"n4231",loc:[-85.6195,41.954012]},n4232:{id:"n4232",loc:[-85.619438,41.954057]},n4233:{id:"n4233",loc:[-85.619418,41.954043]},n4234:{id:"n4234",loc:[-85.619381,41.954069]},n4235:{id:"n4235",loc:[-85.619399,41.954083]},n4236:{id:"n4236",loc:[-85.619339,41.954126]},n4237:{id:"n4237",loc:[-85.619584,41.954313]},n4238:{id:"n4238",loc:[-85.619743,41.954198]},n4239:{id:"n4239",loc:[-85.619453,41.954727]},n424:{id:"n424",loc:[-85.635421,41.945367]},n4240:{id:"n4240",loc:[-85.619503,41.954581]},n4241:{id:"n4241",loc:[-85.619597,41.954472]},n4242:{id:"n4242",loc:[-85.619862,41.95419]},n4243:{id:"n4243",loc:[-85.619506,41.953907]},n4244:{id:"n4244",loc:[-85.619261,41.9541]},n4245:{id:"n4245",loc:[-85.619246,41.954139]},n4246:{id:"n4246",loc:[-85.619244,41.9542]},n4247:{id:"n4247",loc:[-85.619259,41.954243]},n4248:{id:"n4248",loc:[-85.619285,41.954274]},n4249:{id:"n4249",loc:[-85.619123,41.954381]},n425:{id:"n425",loc:[-85.634425,41.943552]},n4250:{id:"n4250",loc:[-85.619641,41.954607]},n4251:{id:"n4251",loc:[-85.619383,41.954615]},n4252:{id:"n4252",loc:[-85.61896,41.954391]},n4253:{id:"n4253",loc:[-85.619211,41.954178]},n4254:{id:"n4254",loc:[-85.619115,41.954102]},n4255:{id:"n4255",loc:[-85.619519,41.953821]},n4256:{id:"n4256",loc:[-85.619956,41.954156]},n4257:{id:"n4257",loc:[-85.619851,41.954266]},n4258:{id:"n4258",loc:[-85.619779,41.95436]},n4259:{id:"n4259",loc:[-85.620525,41.954364]},n426:{id:"n426",loc:[-85.634248,41.943654]},n4260:{id:"n4260",loc:[-85.620398,41.954365]},n4261:{id:"n4261",loc:[-85.620398,41.954324]},n4262:{id:"n4262",loc:[-85.620525,41.954323]},n4263:{id:"n4263",loc:[-85.620359,41.954588]},n4264:{id:"n4264",loc:[-85.620321,41.954588]},n4265:{id:"n4265",loc:[-85.620321,41.954599]},n4266:{id:"n4266",loc:[-85.620296,41.954599]},n4267:{id:"n4267",loc:[-85.620296,41.954587]},n4268:{id:"n4268",loc:[-85.620262,41.954588]},n4269:{id:"n4269",loc:[-85.620261,41.954516]},n427:{id:"n427",loc:[-85.634177,41.943585]},n4270:{id:"n4270",loc:[-85.620282,41.954516]},n4271:{id:"n4271",loc:[-85.620282,41.954373]},n4272:{id:"n4272",loc:[-85.620378,41.954373]},n4273:{id:"n4273",loc:[-85.620379,41.954486]},n4274:{id:"n4274",loc:[-85.620348,41.954486]},n4275:{id:"n4275",loc:[-85.620348,41.954537]},n4276:{id:"n4276",loc:[-85.620359,41.954537]},n4277:{id:"n4277",loc:[-85.620463,41.95521]},n4278:{id:"n4278",loc:[-85.620409,41.955273]},n4279:{id:"n4279",loc:[-85.620205,41.955177]},n428:{id:"n428",loc:[-85.634354,41.943484]},n4280:{id:"n4280",loc:[-85.620288,41.955079]},n4281:{id:"n4281",loc:[-85.620379,41.955121]},n4282:{id:"n4282",loc:[-85.620349,41.955157]},n4283:{id:"n4283",loc:[-85.620083,41.955101]},n4284:{id:"n4284",loc:[-85.620083,41.954986]},n4285:{id:"n4285",loc:[-85.620016,41.954986]},n4286:{id:"n4286",loc:[-85.620016,41.954999]},n4287:{id:"n4287",loc:[-85.619941,41.954999]},n4288:{id:"n4288",loc:[-85.619941,41.954988]},n4289:{id:"n4289",loc:[-85.619815,41.954988]},n429:{id:"n429",loc:[-85.638577,41.943212]},n4290:{id:"n4290",loc:[-85.619815,41.955075]},n4291:{id:"n4291",loc:[-85.619948,41.955075]},n4292:{id:"n4292",loc:[-85.619948,41.955082]},n4293:{id:"n4293",loc:[-85.620004,41.955082]},n4294:{id:"n4294",loc:[-85.620004,41.955101]},n4295:{id:"n4295",loc:[-85.619293,41.955127]},n4296:{id:"n4296",loc:[-85.619208,41.955124]},n4297:{id:"n4297",loc:[-85.619212,41.955061]},n4298:{id:"n4298",loc:[-85.619297,41.955064]},n4299:{id:"n4299",loc:[-85.619068,41.954936]},n43:{id:"n43",loc:[-85.637047,41.943054]},n430:{id:"n430",loc:[-85.638576,41.943219]},n4300:{id:"n4300",loc:[-85.619003,41.954936]},n4301:{id:"n4301",loc:[-85.619004,41.955003]},n4302:{id:"n4302",loc:[-85.618994,41.955003]},n4303:{id:"n4303",loc:[-85.618994,41.955016]},n4304:{id:"n4304",loc:[-85.618973,41.955016]},n4305:{id:"n4305",loc:[-85.618973,41.955071]},n4306:{id:"n4306",loc:[-85.619061,41.955071]},n4307:{id:"n4307",loc:[-85.61906,41.955024]},n4308:{id:"n4308",loc:[-85.619105,41.955024]},n4309:{id:"n4309",loc:[-85.619105,41.954956]},n431:{id:"n431",loc:[-85.638653,41.943078]},n4310:{id:"n4310",loc:[-85.619068,41.954956]},n4311:{id:"n4311",loc:[-85.618294,41.954596]},n4312:{id:"n4312",loc:[-85.618235,41.954602]},n4313:{id:"n4313",loc:[-85.618222,41.954535]},n4314:{id:"n4314",loc:[-85.618281,41.954529]},n4315:{id:"n4315",loc:[-85.618593,41.954556]},n4316:{id:"n4316",loc:[-85.618551,41.954565]},n4317:{id:"n4317",loc:[-85.618545,41.954552]},n4318:{id:"n4318",loc:[-85.618493,41.954563]},n4319:{id:"n4319",loc:[-85.618449,41.954455]},n432:{id:"n432",loc:[-85.638654,41.943148]},n4320:{id:"n4320",loc:[-85.618544,41.954434]},n4321:{id:"n4321",loc:[-85.622545,41.950775]},n4322:{id:"n4322",loc:[-85.622546,41.950843]},n4323:{id:"n4323",loc:[-85.622503,41.950844]},n4324:{id:"n4324",loc:[-85.622503,41.950853]},n4325:{id:"n4325",loc:[-85.622479,41.950853]},n4326:{id:"n4326",loc:[-85.622478,41.950843]},n4327:{id:"n4327",loc:[-85.622425,41.950843]},n4328:{id:"n4328",loc:[-85.622425,41.950808]},n4329:{id:"n4329",loc:[-85.622366,41.950809]},n433:{id:"n433",loc:[-85.638387,41.943151]},n4330:{id:"n4330",loc:[-85.622364,41.950673]},n4331:{id:"n4331",loc:[-85.622448,41.950673]},n4332:{id:"n4332",loc:[-85.622449,41.950732]},n4333:{id:"n4333",loc:[-85.622479,41.950731]},n4334:{id:"n4334",loc:[-85.622479,41.950775]},n4335:{id:"n4335",loc:[-85.621909,41.950641]},n4336:{id:"n4336",loc:[-85.621864,41.950641]},n4337:{id:"n4337",loc:[-85.621865,41.950567]},n4338:{id:"n4338",loc:[-85.62191,41.950567]},n4339:{id:"n4339",loc:[-85.621787,41.950829]},n434:{id:"n434",loc:[-85.638386,41.94308]},n4340:{id:"n4340",loc:[-85.621786,41.950775]},n4341:{id:"n4341",loc:[-85.621588,41.950776]},n4342:{id:"n4342",loc:[-85.621589,41.950848]},n4343:{id:"n4343",loc:[-85.621737,41.950847]},n4344:{id:"n4344",loc:[-85.621737,41.950829]},n4345:{id:"n4345",loc:[-85.621509,41.950846]},n4346:{id:"n4346",loc:[-85.621399,41.950846]},n4347:{id:"n4347",loc:[-85.621398,41.95073]},n4348:{id:"n4348",loc:[-85.621509,41.95073]},n4349:{id:"n4349",loc:[-85.621217,41.950841]},n435:{id:"n435",loc:[-85.634427,41.943533]},n4350:{id:"n4350",loc:[-85.6211,41.95084]},n4351:{id:"n4351",loc:[-85.6211,41.950777]},n4352:{id:"n4352",loc:[-85.621218,41.950778]},n4353:{id:"n4353",loc:[-85.621055,41.950764]},n4354:{id:"n4354",loc:[-85.621054,41.950826]},n4355:{id:"n4355",loc:[-85.620988,41.950826]},n4356:{id:"n4356",loc:[-85.620988,41.950843]},n4357:{id:"n4357",loc:[-85.620842,41.950843]},n4358:{id:"n4358",loc:[-85.620842,41.950764]},n4359:{id:"n4359",loc:[-85.620825,41.950922]},n436:{id:"n436",loc:[-85.63428,41.943229]},n4360:{id:"n4360",loc:[-85.620824,41.950553]},n4361:{id:"n4361",loc:[-85.620543,41.950771]},n4362:{id:"n4362",loc:[-85.620431,41.950772]},n4363:{id:"n4363",loc:[-85.62043,41.950585]},n4364:{id:"n4364",loc:[-85.620542,41.950585]},n4365:{id:"n4365",loc:[-85.62068,41.950505]},n4366:{id:"n4366",loc:[-85.620681,41.950552]},n4367:{id:"n4367",loc:[-85.620589,41.950553]},n4368:{id:"n4368",loc:[-85.620588,41.950506]},n4369:{id:"n4369",loc:[-85.620539,41.950407]},n437:{id:"n437",loc:[-85.634499,41.943461]},n4370:{id:"n4370",loc:[-85.62054,41.950504]},n4371:{id:"n4371",loc:[-85.620416,41.950504]},n4372:{id:"n4372",loc:[-85.620416,41.950408]},n4373:{id:"n4373",loc:[-85.620742,41.95038]},n4374:{id:"n4374",loc:[-85.620527,41.95038]},n4375:{id:"n4375",loc:[-85.620528,41.950408]},n4376:{id:"n4376",loc:[-85.622449,41.950373]},n4377:{id:"n4377",loc:[-85.622452,41.950397]},n4378:{id:"n4378",loc:[-85.622336,41.950404]},n4379:{id:"n4379",loc:[-85.622333,41.950379]},n438:{id:"n438",loc:[-85.634514,41.943486]},n4380:{id:"n4380",loc:[-85.622263,41.950324]},n4381:{id:"n4381",loc:[-85.622261,41.950256]},n4382:{id:"n4382",loc:[-85.62236,41.950254]},n4383:{id:"n4383",loc:[-85.62236,41.95027]},n4384:{id:"n4384",loc:[-85.622402,41.950281]},n4385:{id:"n4385",loc:[-85.622403,41.9503]},n4386:{id:"n4386",loc:[-85.622439,41.950299]},n4387:{id:"n4387",loc:[-85.62244,41.950334]},n4388:{id:"n4388",loc:[-85.622414,41.950335]},n4389:{id:"n4389",loc:[-85.622414,41.95036]},n439:{id:"n439",loc:[-85.63452,41.943511]},n4390:{id:"n4390",loc:[-85.62231,41.950362]},n4391:{id:"n4391",loc:[-85.622309,41.950323]},n4392:{id:"n4392",loc:[-85.622015,41.950539]},n4393:{id:"n4393",loc:[-85.621909,41.95054]},n4394:{id:"n4394",loc:[-85.621909,41.950472]},n4395:{id:"n4395",loc:[-85.622015,41.950471]},n4396:{id:"n4396",loc:[-85.62199,41.950439]},n4397:{id:"n4397",loc:[-85.621956,41.95044]},n4398:{id:"n4398",loc:[-85.621955,41.950405]},n4399:{id:"n4399",loc:[-85.621988,41.950404]},n44:{id:"n44",loc:[-85.636799,41.943055]},n440:{id:"n440",loc:[-85.63451,41.943534]},n4400:{id:"n4400",loc:[-85.621668,41.950418]},n4401:{id:"n4401",loc:[-85.621667,41.950343]},n4402:{id:"n4402",loc:[-85.621745,41.950342]},n4403:{id:"n4403",loc:[-85.621744,41.950306]},n4404:{id:"n4404",loc:[-85.621764,41.950306]},n4405:{id:"n4405",loc:[-85.621763,41.950254]},n4406:{id:"n4406",loc:[-85.621861,41.950253]},n4407:{id:"n4407",loc:[-85.621861,41.950274]},n4408:{id:"n4408",loc:[-85.621896,41.950273]},n4409:{id:"n4409",loc:[-85.621898,41.950389]},n441:{id:"n441",loc:[-85.634483,41.943556]},n4410:{id:"n4410",loc:[-85.621843,41.95039]},n4411:{id:"n4411",loc:[-85.621843,41.950425]},n4412:{id:"n4412",loc:[-85.621789,41.950425]},n4413:{id:"n4413",loc:[-85.621789,41.950386]},n4414:{id:"n4414",loc:[-85.621752,41.950387]},n4415:{id:"n4415",loc:[-85.621753,41.950417]},n4416:{id:"n4416",loc:[-85.621556,41.950562]},n4417:{id:"n4417",loc:[-85.621552,41.950217]},n4418:{id:"n4418",loc:[-85.621788,41.950562]},n4419:{id:"n4419",loc:[-85.621155,41.950562]},n442:{id:"n442",loc:[-85.63419,41.943713]},n4420:{id:"n4420",loc:[-85.622473,41.950551]},n4421:{id:"n4421",loc:[-85.622043,41.950551]},n4422:{id:"n4422",loc:[-85.62142,41.950454]},n4423:{id:"n4423",loc:[-85.621315,41.950455]},n4424:{id:"n4424",loc:[-85.621313,41.950311]},n4425:{id:"n4425",loc:[-85.621388,41.950311]},n4426:{id:"n4426",loc:[-85.621387,41.950261]},n4427:{id:"n4427",loc:[-85.621468,41.95026]},n4428:{id:"n4428",loc:[-85.621468,41.950271]},n4429:{id:"n4429",loc:[-85.621503,41.95027]},n443:{id:"n443",loc:[-85.634462,41.943294]},n4430:{id:"n4430",loc:[-85.621505,41.950353]},n4431:{id:"n4431",loc:[-85.621483,41.950354]},n4432:{id:"n4432",loc:[-85.621483,41.950392]},n4433:{id:"n4433",loc:[-85.621419,41.950393]},n4434:{id:"n4434",loc:[-85.621213,41.95039]},n4435:{id:"n4435",loc:[-85.621127,41.950391]},n4436:{id:"n4436",loc:[-85.621126,41.950357]},n4437:{id:"n4437",loc:[-85.621094,41.950357]},n4438:{id:"n4438",loc:[-85.621094,41.950391]},n4439:{id:"n4439",loc:[-85.620977,41.950392]},n444:{id:"n444",loc:[-85.634298,41.943389]},n4440:{id:"n4440",loc:[-85.620975,41.950278]},n4441:{id:"n4441",loc:[-85.621087,41.950277]},n4442:{id:"n4442",loc:[-85.621088,41.950331]},n4443:{id:"n4443",loc:[-85.621211,41.950312]},n4444:{id:"n4444",loc:[-85.621104,41.950313]},n4445:{id:"n4445",loc:[-85.621105,41.950331]},n4446:{id:"n4446",loc:[-85.620706,41.950328]},n4447:{id:"n4447",loc:[-85.620606,41.950327]},n4448:{id:"n4448",loc:[-85.620607,41.950261]},n4449:{id:"n4449",loc:[-85.620707,41.950262]},n445:{id:"n445",loc:[-85.634527,41.943623]},n4450:{id:"n4450",loc:[-85.620599,41.950336]},n4451:{id:"n4451",loc:[-85.620559,41.950336]},n4452:{id:"n4452",loc:[-85.620559,41.950299]},n4453:{id:"n4453",loc:[-85.620599,41.950299]},n4454:{id:"n4454",loc:[-85.620545,41.950357]},n4455:{id:"n4455",loc:[-85.620418,41.950357]},n4456:{id:"n4456",loc:[-85.620417,41.950257]},n4457:{id:"n4457",loc:[-85.620544,41.950256]},n4458:{id:"n4458",loc:[-85.620246,41.950131],tags:{highway:"crossing"}},n4459:{id:"n4459",loc:[-85.620252,41.950956]},n446:{id:"n446",loc:[-85.634608,41.943577]},n4460:{id:"n4460",loc:[-85.620245,41.950179]},n4461:{id:"n4461",loc:[-85.620246,41.950088]},n4462:{id:"n4462",loc:[-85.620251,41.950885]},n4463:{id:"n4463",loc:[-85.620103,41.950884],tags:{crossing:"marked",highway:"crossing"}},n4464:{id:"n4464",loc:[-85.619992,41.950884]},n4465:{id:"n4465",loc:[-85.619704,41.951008]},n4466:{id:"n4466",loc:[-85.619599,41.951122]},n4467:{id:"n4467",loc:[-85.619264,41.951486]},n4468:{id:"n4468",loc:[-85.619179,41.951573],tags:{highway:"crossing"}},n4469:{id:"n4469",loc:[-85.620251,41.950999],tags:{highway:"crossing"}},n447:{id:"n447",loc:[-85.634555,41.943531]},n4470:{id:"n4470",loc:[-85.620249,41.951066]},n4471:{id:"n4471",loc:[-85.620256,41.951374]},n4472:{id:"n4472",loc:[-85.620249,41.951389]},n4473:{id:"n4473",loc:[-85.620249,41.951407]},n4474:{id:"n4474",loc:[-85.620255,41.951423]},n4475:{id:"n4475",loc:[-85.62026,41.951853]},n4476:{id:"n4476",loc:[-85.620262,41.951894],tags:{highway:"crossing"}},n4477:{id:"n4477",loc:[-85.620265,41.951957]},n4478:{id:"n4478",loc:[-85.620262,41.952135]},n4479:{id:"n4479",loc:[-85.620241,41.952424]},n448:{id:"n448",loc:[-85.634555,41.943482]},n4480:{id:"n4480",loc:[-85.620213,41.952583]},n4481:{id:"n4481",loc:[-85.620158,41.952754]},n4482:{id:"n4482",loc:[-85.620065,41.952942]},n4483:{id:"n4483",loc:[-85.619753,41.953439]},n4484:{id:"n4484",loc:[-85.619605,41.953626]},n4485:{id:"n4485",loc:[-85.619381,41.953834]},n4486:{id:"n4486",loc:[-85.619069,41.954066]},n4487:{id:"n4487",loc:[-85.618674,41.95429]},n4488:{id:"n4488",loc:[-85.621816,41.952389]},n4489:{id:"n4489",loc:[-85.6217,41.952386]},n449:{id:"n449",loc:[-85.634509,41.943427]},n4490:{id:"n4490",loc:[-85.621705,41.952306]},n4491:{id:"n4491",loc:[-85.621821,41.95231]},n4492:{id:"n4492",loc:[-85.621819,41.952272]},n4493:{id:"n4493",loc:[-85.621778,41.952272]},n4494:{id:"n4494",loc:[-85.621778,41.952199]},n4495:{id:"n4495",loc:[-85.621818,41.952199]},n4496:{id:"n4496",loc:[-85.621754,41.952281]},n4497:{id:"n4497",loc:[-85.621701,41.95228]},n4498:{id:"n4498",loc:[-85.621702,41.952197]},n4499:{id:"n4499",loc:[-85.621755,41.952197]},n45:{id:"n45",loc:[-85.636791,41.942792]},n450:{id:"n450",loc:[-85.63453,41.943365]},n4500:{id:"n4500",loc:[-85.628201,41.954694],tags:{highway:"stop",stop:"all",direction:"forward"}},n4501:{id:"n4501",loc:[-85.627921,41.954783],tags:{highway:"stop",stop:"all",direction:"backward"}},n4502:{id:"n4502",loc:[-85.62775,41.954696],tags:{highway:"stop",stop:"all",direction:"backward"}},n4503:{id:"n4503",loc:[-85.628046,41.954591],tags:{highway:"stop",stop:"all",direction:"forward"}},n4504:{id:"n4504",loc:[-85.631074,41.957428],tags:{highway:"stop",direction:"backward",stop:"minor"}},n4505:{id:"n4505",loc:[-85.630768,41.957429],tags:{highway:"stop",direction:"forward",stop:"minor"}},n4506:{id:"n4506",loc:[-85.629888,41.957432],tags:{highway:"stop",direction:"backward",stop:"minor"}},n4507:{id:"n4507",loc:[-85.629565,41.957433],tags:{highway:"stop",stop:"minor",direction:"forward"}},n4508:{id:"n4508",loc:[-85.629559,41.957343]},n4509:{id:"n4509",loc:[-85.628723,41.95735]},n451:{id:"n451",loc:[-85.634356,41.943468]},n4510:{id:"n4510",loc:[-85.62842,41.957515]},n4511:{id:"n4511",loc:[-85.627561,41.957525]},n4512:{id:"n4512",loc:[-85.630323,41.957508]},n4513:{id:"n4513",loc:[-85.630811,41.957506]},n4514:{id:"n4514",loc:[-85.630839,41.960874]},n4515:{id:"n4515",loc:[-85.631035,41.957506]},n4516:{id:"n4516",loc:[-85.632027,41.9575]},n4517:{id:"n4517",loc:[-85.631038,41.958066]},n4518:{id:"n4518",loc:[-85.630787,41.954769]},n4519:{id:"n4519",loc:[-85.630806,41.957342]},n452:{id:"n452",loc:[-85.634123,41.943596]},n4520:{id:"n4520",loc:[-85.630809,41.957428],tags:{highway:"crossing"}},n4521:{id:"n4521",loc:[-85.630912,41.957506],tags:{highway:"crossing"}},n4522:{id:"n4522",loc:[-85.631033,41.957428],tags:{highway:"crossing"}},n4523:{id:"n4523",loc:[-85.631032,41.957341]},n4524:{id:"n4524",loc:[-85.63091,41.957341],tags:{highway:"crossing"}},n4525:{id:"n4525",loc:[-85.631027,41.95597]},n4526:{id:"n4526",loc:[-85.631027,41.955913],tags:{highway:"crossing"}},n4527:{id:"n4527",loc:[-85.631025,41.955873]},n4528:{id:"n4528",loc:[-85.631073,41.955913],tags:{highway:"stop",stop:"minor",direction:"backward"}},n4529:{id:"n4529",loc:[-85.631007,41.954766]},n453:{id:"n453",loc:[-85.634709,41.943926]},n4530:{id:"n4530",loc:[-85.630881,41.954768],tags:{highway:"crossing"}},n4531:{id:"n4531",loc:[-85.628022,41.954776]},n4532:{id:"n4532",loc:[-85.627385,41.95584]},n4533:{id:"n4533",loc:[-85.627329,41.955937]},n4534:{id:"n4534",loc:[-85.626583,41.957153]},n4535:{id:"n4535",loc:[-85.629675,41.954564],tags:{highway:"stop",direction:"forward",stop:"minor"}},n4536:{id:"n4536",loc:[-85.630881,41.954806],tags:{highway:"stop",stop:"minor",direction:"backward"}},n4537:{id:"n4537",loc:[-85.630879,41.954564],tags:{highway:"stop",stop:"minor",direction:"forward"}},n4538:{id:"n4538",loc:[-85.630784,41.954682],tags:{highway:"crossing"}},n4539:{id:"n4539",loc:[-85.63078,41.954595]},n454:{id:"n454",loc:[-85.63525,41.943855]},n4540:{id:"n4540",loc:[-85.630879,41.954595],tags:{highway:"crossing"}},n4541:{id:"n4541",loc:[-85.631004,41.954594]},n4542:{id:"n4542",loc:[-85.631006,41.954681],tags:{highway:"crossing"}},n4543:{id:"n4543",loc:[-85.631045,41.959036],tags:{highway:"stop",stop:"minor",direction:"backward"}},n4544:{id:"n4544",loc:[-85.632071,41.959029],tags:{highway:"stop",stop:"minor",direction:"forward"}},n4545:{id:"n4545",loc:[-85.632257,41.959027],tags:{highway:"stop",stop:"minor",direction:"backward"}},n4546:{id:"n4546",loc:[-85.631966,41.957427],tags:{highway:"stop",direction:"forward",stop:"minor"}},n4547:{id:"n4547",loc:[-85.632297,41.957426],tags:{highway:"stop",direction:"backward",stop:"minor"}},n4548:{id:"n4548",loc:[-85.631976,41.955911],tags:{highway:"give_way",direction:"forward"}},n4549:{id:"n4549",loc:[-85.632272,41.955911],tags:{highway:"give_way",direction:"backward"}},n455:{id:"n455",loc:[-85.635224,41.943869]},n4550:{id:"n4550",loc:[-85.632097,41.954805],tags:{highway:"stop",stop:"minor",direction:"backward"}},n4551:{id:"n4551",loc:[-85.632094,41.954566],tags:{highway:"stop",stop:"minor",direction:"forward"}},n4552:{id:"n4552",loc:[-85.626519,41.957256]},n4553:{id:"n4553",loc:[-85.625334,41.959165]},n4554:{id:"n4554",loc:[-85.626483,41.95806]},n4555:{id:"n4555",loc:[-85.626481,41.958175]},n4556:{id:"n4556",loc:[-85.626412,41.958174]},n4557:{id:"n4557",loc:[-85.626412,41.958202]},n4558:{id:"n4558",loc:[-85.62628,41.958201]},n4559:{id:"n4559",loc:[-85.626283,41.958057]},n456:{id:"n456",loc:[-85.638854,41.943104]},n4560:{id:"n4560",loc:[-85.622763,41.95109],tags:{highway:"stop",direction:"backward",stop:"minor"}},n4561:{id:"n4561",loc:[-85.622858,41.950876],tags:{emergency:"fire_hydrant"}},n4562:{id:"n4562",loc:[-85.624073,41.950393]},n4563:{id:"n4563",loc:[-85.624077,41.950924]},n4564:{id:"n4564",loc:[-85.624599,41.950984],tags:{highway:"stop",direction:"forward",stop:"minor"}},n4565:{id:"n4565",loc:[-85.624831,41.95119],tags:{emergency:"fire_hydrant"}},n4566:{id:"n4566",loc:[-85.624437,41.952568],tags:{emergency:"fire_hydrant"}},n4567:{id:"n4567",loc:[-85.624077,41.954606],tags:{emergency:"fire_hydrant"}},n4568:{id:"n4568",loc:[-85.624263,41.954888]},n4569:{id:"n4569",loc:[-85.624206,41.954919]},n457:{id:"n457",loc:[-85.635186,41.943901]},n4570:{id:"n4570",loc:[-85.624154,41.954865]},n4571:{id:"n4571",loc:[-85.624212,41.954835]},n4572:{id:"n4572",loc:[-85.622442,41.954401],tags:{emergency:"fire_hydrant"}},n4573:{id:"n4573",loc:[-85.619751,41.954658],tags:{emergency:"fire_hydrant"}},n4574:{id:"n4574",loc:[-85.617785,41.954534]},n4575:{id:"n4575",loc:[-85.617416,41.954721]},n4576:{id:"n4576",loc:[-85.617662,41.95474]},n4577:{id:"n4577",loc:[-85.618014,41.954717]},n4578:{id:"n4578",loc:[-85.617886,41.954671]},n4579:{id:"n4579",loc:[-85.617831,41.954612]},n458:{id:"n458",loc:[-85.635162,41.943917]},n4580:{id:"n4580",loc:[-85.617968,41.954752]},n4581:{id:"n4581",loc:[-85.617815,41.954752]},n4582:{id:"n4582",loc:[-85.617938,41.954695]},n4583:{id:"n4583",loc:[-85.617856,41.954642],tags:{highway:"stop",direction:"forward",stop:"minor"}},n4584:{id:"n4584",loc:[-85.619116,41.954164],tags:{man_made:"flagpole"}},n4585:{id:"n4585",loc:[-85.619569,41.953255],tags:{emergency:"fire_hydrant"}},n4586:{id:"n4586",loc:[-85.620352,41.951894],tags:{highway:"stop",direction:"forward",stop:"minor"}},n4587:{id:"n4587",loc:[-85.620485,41.951948],tags:{emergency:"fire_hydrant"}},n4588:{id:"n4588",loc:[-85.620316,41.950999],tags:{highway:"stop",direction:"backward",stop:"minor"}},n4589:{id:"n4589",loc:[-85.620311,41.950131],tags:{highway:"stop",direction:"backward",stop:"minor"}},n459:{id:"n459",loc:[-85.634856,41.943905]},n4590:{id:"n4590",loc:[-85.620374,41.95018],tags:{emergency:"fire_hydrant"}},n4591:{id:"n4591",loc:[-85.620301,41.949239],tags:{highway:"stop",direction:"backward",stop:"minor"}},n4592:{id:"n4592",loc:[-85.620278,41.947443],tags:{highway:"stop",direction:"backward",stop:"minor"}},n4593:{id:"n4593",loc:[-85.619844,41.947444],tags:{highway:"stop",direction:"forward",stop:"minor"}},n4594:{id:"n4594",loc:[-85.620191,41.947352],tags:{emergency:"fire_hydrant"}},n4595:{id:"n4595",loc:[-85.622819,41.947493],tags:{emergency:"fire_hydrant"}},n4596:{id:"n4596",loc:[-85.622744,41.947541],tags:{highway:"stop",stop:"minor",direction:"backward"}},n4597:{id:"n4597",loc:[-85.622739,41.947316],tags:{highway:"stop",direction:"forward",stop:"minor"}},n4598:{id:"n4598",loc:[-85.622909,41.948333],tags:{highway:"give_way"}},n4599:{id:"n4599",loc:[-85.622593,41.948333],tags:{highway:"give_way"}},n46:{id:"n46",loc:[-85.637131,41.94307]},n460:{id:"n460",loc:[-85.634811,41.944007]},n4600:{id:"n4600",loc:[-85.622835,41.948387],tags:{emergency:"fire_hydrant"}},n4601:{id:"n4601",loc:[-85.622768,41.949125],tags:{highway:"stop",direction:"forward",stop:"minor"}},n4602:{id:"n4602",loc:[-85.622769,41.949325],tags:{highway:"stop",stop:"minor",direction:"backward"}},n4603:{id:"n4603",loc:[-85.622837,41.949329],tags:{emergency:"fire_hydrant"}},n4604:{id:"n4604",loc:[-85.622614,41.950113],tags:{highway:"give_way",direction:"forward"}},n4605:{id:"n4605",loc:[-85.624777,41.949219],tags:{highway:"stop",direction:"forward",stop:"minor"}},n4606:{id:"n4606",loc:[-85.624849,41.949106],tags:{emergency:"fire_hydrant"}},n4607:{id:"n4607",loc:[-85.624858,41.950119],tags:{emergency:"fire_hydrant"}},n4608:{id:"n4608",loc:[-85.624752,41.948334],tags:{highway:"give_way"}},n4609:{id:"n4609",loc:[-85.624845,41.948422],tags:{emergency:"fire_hydrant"}},n461:{id:"n461",loc:[-85.634987,41.943112]},n4610:{id:"n4610",loc:[-85.62484,41.947539],tags:{emergency:"fire_hydrant"}},n4611:{id:"n4611",loc:[-85.62476,41.947428],tags:{highway:"stop",stop:"minor",direction:"forward"}},n4612:{id:"n4612",loc:[-85.620286,41.950926]},n4613:{id:"n4613",loc:[-85.618237,41.950963]},n4614:{id:"n4614",loc:[-85.618107,41.950876]},n4615:{id:"n4615",loc:[-85.618131,41.950393]},n4616:{id:"n4616",loc:[-85.618232,41.949913]},n4617:{id:"n4617",loc:[-85.619138,41.950212]},n4618:{id:"n4618",loc:[-85.619299,41.950388]},n4619:{id:"n4619",loc:[-85.619306,41.950897]},n462:{id:"n462",loc:[-85.634698,41.943194]},n4620:{id:"n4620",loc:[-85.619155,41.950958]},n4621:{id:"n4621",loc:[-85.620079,41.947715]},n4622:{id:"n4622",loc:[-85.619674,41.947728]},n4623:{id:"n4623",loc:[-85.619634,41.947735]},n4624:{id:"n4624",loc:[-85.619587,41.947756],tags:{barrier:"gate"}},n4625:{id:"n4625",loc:[-85.61953,41.947796]},n4626:{id:"n4626",loc:[-85.619475,41.947847]},n4627:{id:"n4627",loc:[-85.619433,41.947903]},n4628:{id:"n4628",loc:[-85.619402,41.947982]},n4629:{id:"n4629",loc:[-85.619394,41.948043]},n463:{id:"n463",loc:[-85.634632,41.943219]},n4630:{id:"n4630",loc:[-85.619395,41.948476]},n4631:{id:"n4631",loc:[-85.618367,41.947452]},n4632:{id:"n4632",loc:[-85.618371,41.947567],tags:{barrier:"gate"}},n4633:{id:"n4633",loc:[-85.618341,41.947622]},n4634:{id:"n4634",loc:[-85.618138,41.94773]},n4635:{id:"n4635",loc:[-85.618078,41.947814]},n4636:{id:"n4636",loc:[-85.618072,41.948009]},n4637:{id:"n4637",loc:[-85.618269,41.947666]},n4638:{id:"n4638",loc:[-85.618099,41.947765]},n4639:{id:"n4639",loc:[-85.618378,41.954453]},n464:{id:"n464",loc:[-85.63459,41.943239]},n4640:{id:"n4640",loc:[-85.618198,41.95453]},n4641:{id:"n4641",loc:[-85.618212,41.954623]},n4642:{id:"n4642",loc:[-85.635211,41.943103],tags:{leisure:"picnic_table"}},n4643:{id:"n4643",loc:[-85.635345,41.943448],tags:{leisure:"picnic_table"}},n4644:{id:"n4644",loc:[-85.635901,41.943353],tags:{amenity:"bench"}},n4645:{id:"n4645",loc:[-85.635815,41.942638],tags:{highway:"stop",direction:"forward",stop:"minor"}},n4646:{id:"n4646",loc:[-85.635355,41.942044],tags:{leisure:"picnic_table"}},n4647:{id:"n4647",loc:[-85.635206,41.942045],tags:{leisure:"picnic_table"}},n4648:{id:"n4648",loc:[-85.63504,41.941992],tags:{leisure:"picnic_table"}},n4649:{id:"n4649",loc:[-85.635185,41.942001]},n465:{id:"n465",loc:[-85.634555,41.943263]},n4650:{id:"n4650",loc:[-85.635176,41.942021]},n4651:{id:"n4651",loc:[-85.635127,41.942008]},n4652:{id:"n4652",loc:[-85.635136,41.941988]},n4653:{id:"n4653",loc:[-85.635,41.941709],tags:{emergency:"fire_hydrant"}},n4654:{id:"n4654",loc:[-85.634893,41.941801]},n4655:{id:"n4655",loc:[-85.634937,41.941843]},n4656:{id:"n4656",loc:[-85.634963,41.941859]},n4657:{id:"n4657",loc:[-85.635027,41.941904]},n4658:{id:"n4658",loc:[-85.63494,41.94187]},n4659:{id:"n4659",loc:[-85.634951,41.941871]},n466:{id:"n466",loc:[-85.634526,41.943289]},n4660:{id:"n4660",loc:[-85.634753,41.941701],tags:{amenity:"drinking_water"}},n4661:{id:"n4661",loc:[-85.634717,41.941804],tags:{amenity:"bench"}},n4662:{id:"n4662",loc:[-85.634554,41.941883],tags:{amenity:"bench"}},n4663:{id:"n4663",loc:[-85.635002,41.941579],tags:{amenity:"fountain"}},n4664:{id:"n4664",loc:[-85.635258,41.94188],tags:{amenity:"waste_basket"}},n4665:{id:"n4665",loc:[-85.635262,41.941581],tags:{amenity:"bench"}},n4666:{id:"n4666",loc:[-85.635319,41.941744],tags:{amenity:"bench"}},n4667:{id:"n4667",loc:[-85.634702,41.941473],tags:{amenity:"waste_basket"}},n4668:{id:"n4668",loc:[-85.633981,41.941966],tags:{amenity:"bench"}},n4669:{id:"n4669",loc:[-85.63388,41.941743]},n467:{id:"n467",loc:[-85.635163,41.944985]},n4670:{id:"n4670",loc:[-85.633746,41.941741]},n4671:{id:"n4671",loc:[-85.633749,41.941664]},n4672:{id:"n4672",loc:[-85.633883,41.941667]},n4673:{id:"n4673",loc:[-85.634283,41.941183],tags:{leisure:"picnic_table"}},n4674:{id:"n4674",loc:[-85.634046,41.941102],tags:{amenity:"bbq"}},n4675:{id:"n4675",loc:[-85.63401,41.941093],tags:{amenity:"bbq"}},n4676:{id:"n4676",loc:[-85.633408,41.940862],tags:{amenity:"bench"}},n4677:{id:"n4677",loc:[-85.633359,41.940651],tags:{amenity:"bench"}},n4678:{id:"n4678",loc:[-85.634109,41.940831]},n4679:{id:"n4679",loc:[-85.63396,41.940867]},n468:{id:"n468",loc:[-85.635095,41.945035]},n4680:{id:"n4680",loc:[-85.633816,41.940913]},n4681:{id:"n4681",loc:[-85.633237,41.940455]},n4682:{id:"n4682",loc:[-85.634453,41.940025],tags:{emergency:"fire_hydrant"}},n4683:{id:"n4683",loc:[-85.635692,41.940218],tags:{emergency:"fire_hydrant"}},n4684:{id:"n4684",loc:[-85.635566,41.940102],tags:{highway:"stop",direction:"forward",stop:"minor"}},n4685:{id:"n4685",loc:[-85.635961,41.940125],tags:{highway:"stop",stop:"minor",direction:"backward"}},n4686:{id:"n4686",loc:[-85.635883,41.94012],tags:{crossing:"marked",highway:"crossing"}},n4687:{id:"n4687",loc:[-85.635883,41.94006]},n4688:{id:"n4688",loc:[-85.635768,41.940051],tags:{crossing:"marked",highway:"crossing"}},n4689:{id:"n4689",loc:[-85.635669,41.940043]},n469:{id:"n469",loc:[-85.634269,41.944431]},n4690:{id:"n4690",loc:[-85.635661,41.940107],tags:{crossing:"marked",highway:"crossing"}},n4691:{id:"n4691",loc:[-85.635424,41.941005],tags:{amenity:"fountain"}},n4692:{id:"n4692",loc:[-85.635542,41.941371],tags:{amenity:"bench"}},n4693:{id:"n4693",loc:[-85.635709,41.941341],tags:{emergency:"fire_hydrant"}},n4694:{id:"n4694",loc:[-85.637038,41.942513],tags:{highway:"stop",direction:"forward",stop:"minor"}},n4695:{id:"n4695",loc:[-85.637174,41.941354],tags:{highway:"stop",direction:"backward",stop:"minor"}},n4696:{id:"n4696",loc:[-85.637091,41.941273],tags:{emergency:"fire_hydrant"}},n4697:{id:"n4697",loc:[-85.638058,41.941346],tags:{highway:"give_way",direction:"forward"}},n4698:{id:"n4698",loc:[-85.638359,41.941344],tags:{highway:"give_way",direction:"backward"}},n4699:{id:"n4699",loc:[-85.638288,41.941236],tags:{emergency:"fire_hydrant"}},n47:{id:"n47",loc:[-85.636693,41.943073]},n470:{id:"n470",loc:[-85.634352,41.944376]},n4700:{id:"n4700",loc:[-85.63935,41.94128],tags:{emergency:"fire_hydrant"}},n4701:{id:"n4701",loc:[-85.639277,41.941337],tags:{highway:"give_way",direction:"forward"}},n4702:{id:"n4702",loc:[-85.639548,41.941334],tags:{highway:"give_way",direction:"backward"}},n4703:{id:"n4703",loc:[-85.642191,41.940039]},n4704:{id:"n4704",loc:[-85.640585,41.941263],tags:{emergency:"fire_hydrant"}},n4705:{id:"n4705",loc:[-85.64049,41.941327],tags:{highway:"stop",direction:"forward",stop:"minor"}},n4706:{id:"n4706",loc:[-85.640803,41.941324],tags:{highway:"stop",direction:"backward",stop:"minor"}},n4707:{id:"n4707",loc:[-85.641717,41.941317],tags:{highway:"stop",direction:"forward",stop:"all"}},n4708:{id:"n4708",loc:[-85.641846,41.941415],tags:{highway:"stop",direction:"backward",stop:"all"}},n4709:{id:"n4709",loc:[-85.641756,41.941392],tags:{emergency:"fire_hydrant"}},n471:{id:"n471",loc:[-85.634747,41.944561],tags:{railway:"crossing"}},n4710:{id:"n4710",loc:[-85.642014,41.941313],tags:{highway:"stop",direction:"forward",stop:"all"}},n4711:{id:"n4711",loc:[-85.641854,41.942455],tags:{highway:"stop",direction:"forward",stop:"minor"}},n4712:{id:"n4712",loc:[-85.641859,41.942739],tags:{highway:"stop",direction:"backward",stop:"minor"}},n4713:{id:"n4713",loc:[-85.640754,41.942707],tags:{emergency:"fire_hydrant"}},n4714:{id:"n4714",loc:[-85.640669,41.942716],tags:{highway:"stop",direction:"backward",stop:"minor"}},n4715:{id:"n4715",loc:[-85.640664,41.942478],tags:{highway:"stop",direction:"forward",stop:"minor"}},n4716:{id:"n4716",loc:[-85.63964,41.94274],tags:{man_made:"flagpole"}},n4717:{id:"n4717",loc:[-85.639455,41.942731],tags:{highway:"stop",direction:"backward",stop:"minor"}},n4718:{id:"n4718",loc:[-85.63945,41.942492],tags:{highway:"stop",direction:"forward",stop:"minor"}},n4719:{id:"n4719",loc:[-85.639527,41.942505],tags:{emergency:"fire_hydrant"}},n472:{id:"n472",loc:[-85.634667,41.944613]},n4720:{id:"n4720",loc:[-85.638238,41.942745],tags:{highway:"stop",direction:"backward",stop:"minor"}},n4721:{id:"n4721",loc:[-85.638233,41.942511],tags:{highway:"stop",direction:"forward",stop:"minor"}},n4722:{id:"n4722",loc:[-85.638018,41.94299],tags:{amenity:"waste_disposal"}},n4723:{id:"n4723",loc:[-85.637918,41.944152],tags:{amenity:"waste_basket"}},n4724:{id:"n4724",loc:[-85.635902,41.943291],tags:{leisure:"picnic_table"}},n4725:{id:"n4725",loc:[-85.63704,41.942741],tags:{highway:"stop",direction:"forward",stop:"minor"}},n4726:{id:"n4726",loc:[-85.633467,41.943818],tags:{highway:"stop",stop:"minor",direction:"backward"}},n4727:{id:"n4727",loc:[-85.633987,41.943531],tags:{highway:"stop",direction:"forward",stop:"minor"}},n4728:{id:"n4728",loc:[-85.632154,41.943539],tags:{emergency:"fire_hydrant"}},n4729:{id:"n4729",loc:[-85.633567,41.944641],tags:{amenity:"bench"}},n473:{id:"n473",loc:[-85.634161,41.944371]},n4730:{id:"n4730",loc:[-85.633127,41.944574],tags:{amenity:"bench"}},n4731:{id:"n4731",loc:[-85.633439,41.944871],tags:{amenity:"bench"}},n4732:{id:"n4732",loc:[-85.633676,41.944799],tags:{amenity:"waste_basket"}},n4733:{id:"n4733",loc:[-85.633466,41.944862],tags:{amenity:"waste_basket"}},n4734:{id:"n4734",loc:[-85.633451,41.944847],tags:{emergency:"fire_hydrant"}},n4735:{id:"n4735",loc:[-85.634202,41.945543],tags:{amenity:"waste_basket"}},n4736:{id:"n4736",loc:[-85.634652,41.945472],tags:{leisure:"picnic_table"}},n4737:{id:"n4737",loc:[-85.6347,41.945445],tags:{leisure:"picnic_table"}},n4738:{id:"n4738",loc:[-85.634646,41.945662],tags:{emergency:"fire_hydrant"}},n4739:{id:"n4739",loc:[-85.634673,41.945687],tags:{amenity:"waste_basket"}},n474:{id:"n474",loc:[-85.633861,41.944117]},n4740:{id:"n4740",loc:[-85.63449,41.945827],tags:{amenity:"clock",display:"analog"}},n4741:{id:"n4741",loc:[-85.63481,41.946056],tags:{highway:"stop",stop:"minor",direction:"backward"}},n4742:{id:"n4742",loc:[-85.634814,41.946176],tags:{amenity:"post_box"}},n4743:{id:"n4743",loc:[-85.638744,41.945328]},n4744:{id:"n4744",loc:[-85.63867,41.945228],tags:{amenity:"bench"}},n4745:{id:"n4745",loc:[-85.639487,41.945042],tags:{highway:"stop",direction:"forward",stop:"minor"}},n4746:{id:"n4746",loc:[-85.639635,41.94387],tags:{highway:"stop",stop:"minor",direction:"backward"}},n4747:{id:"n4747",loc:[-85.639549,41.943756],tags:{emergency:"fire_hydrant"}},n4748:{id:"n4748",loc:[-85.64055,41.943862],tags:{highway:"stop",direction:"forward",stop:"minor"}},n4749:{id:"n4749",loc:[-85.640864,41.943859],tags:{highway:"stop",stop:"minor",direction:"backward"}},n475:{id:"n475",loc:[-85.633906,41.943535]},n4750:{id:"n4750",loc:[-85.640718,41.945022],tags:{highway:"stop",direction:"forward",stop:"minor"}},n4751:{id:"n4751",loc:[-85.640664,41.945076],tags:{emergency:"fire_hydrant"}},n4752:{id:"n4752",loc:[-85.641913,41.94502],tags:{highway:"stop",direction:"forward",stop:"minor"}},n4753:{id:"n4753",loc:[-85.641838,41.945076],tags:{emergency:"fire_hydrant"}},n4754:{id:"n4754",loc:[-85.642045,41.94385],tags:{highway:"give_way",direction:"backward"}},n4755:{id:"n4755",loc:[-85.641738,41.943852],tags:{highway:"give_way",direction:"forward"}},n4756:{id:"n4756",loc:[-85.642928,41.943843],tags:{highway:"stop",stop:"minor",direction:"forward"}},n4757:{id:"n4757",loc:[-85.64305,41.943902],tags:{emergency:"fire_hydrant"}},n4758:{id:"n4758",loc:[-85.642986,41.945105],tags:{highway:"stop",direction:"backward",stop:"all"}},n4759:{id:"n4759",loc:[-85.643136,41.94502],tags:{highway:"stop",stop:"all",direction:"forward"}},n476:{id:"n476",loc:[-85.63423,41.943692]},n4760:{id:"n4760",loc:[-85.63169,41.947812]},n4761:{id:"n4761",loc:[-85.631307,41.947655]},n4762:{id:"n4762",loc:[-85.631407,41.947413]},n4763:{id:"n4763",loc:[-85.631173,41.947306]},n4764:{id:"n4764",loc:[-85.631316,41.947145]},n4765:{id:"n4765",loc:[-85.631476,41.947087]},n4766:{id:"n4766",loc:[-85.631793,41.946871]},n4767:{id:"n4767",loc:[-85.631884,41.946723]},n4768:{id:"n4768",loc:[-85.631814,41.946397]},n4769:{id:"n4769",loc:[-85.631382,41.947685]},n477:{id:"n477",loc:[-85.635096,41.942814]},n4770:{id:"n4770",loc:[-85.63109,41.947819]},n4771:{id:"n4771",loc:[-85.630921,41.947961]},n4772:{id:"n4772",loc:[-85.630249,41.947709]},n4773:{id:"n4773",loc:[-85.630149,41.947451]},n4774:{id:"n4774",loc:[-85.629733,41.947339]},n4775:{id:"n4775",loc:[-85.629755,41.946948]},n4776:{id:"n4776",loc:[-85.630457,41.947103]},n4777:{id:"n4777",loc:[-85.630934,41.946939]},n4778:{id:"n4778",loc:[-85.631277,41.946852]},n4779:{id:"n4779",loc:[-85.63142,41.946781]},n478:{id:"n478",loc:[-85.635058,41.942795]},n4780:{id:"n4780",loc:[-85.631116,41.946474]},n4781:{id:"n4781",loc:[-85.63073,41.945965]},n4782:{id:"n4782",loc:[-85.631337,41.94571]},n4783:{id:"n4783",loc:[-85.631589,41.945487]},n4784:{id:"n4784",loc:[-85.632278,41.945784]},n4785:{id:"n4785",loc:[-85.632105,41.946034]},n4786:{id:"n4786",loc:[-85.632532,41.946198]},n4787:{id:"n4787",loc:[-85.632566,41.946151]},n4788:{id:"n4788",loc:[-85.632684,41.946196]},n4789:{id:"n4789",loc:[-85.628676,41.947106]},n479:{id:"n479",loc:[-85.635002,41.94279]},n4790:{id:"n4790",loc:[-85.628973,41.946476]},n4791:{id:"n4791",loc:[-85.629094,41.946079]},n4792:{id:"n4792",loc:[-85.629226,41.94578]},n4793:{id:"n4793",loc:[-85.629479,41.945682]},n4794:{id:"n4794",loc:[-85.630606,41.94569]},n4795:{id:"n4795",loc:[-85.631255,41.945588]},n4796:{id:"n4796",loc:[-85.631546,41.945281]},n4797:{id:"n4797",loc:[-85.631629,41.944823]},n4798:{id:"n4798",loc:[-85.631766,41.944958]},n4799:{id:"n4799",loc:[-85.631689,41.945318]},n48:{id:"n48",loc:[-85.636689,41.94276]},n480:{id:"n480",loc:[-85.634908,41.94279]},n4800:{id:"n4800",loc:[-85.615069,41.945527]},n4801:{id:"n4801",loc:[-85.615058,41.946677]},n4802:{id:"n4802",loc:[-85.613692,41.946689]},n4803:{id:"n4803",loc:[-85.613475,41.946531]},n4804:{id:"n4804",loc:[-85.611717,41.946252]},n4805:{id:"n4805",loc:[-85.611353,41.946385]},n4806:{id:"n4806",loc:[-85.611304,41.947397]},n4807:{id:"n4807",loc:[-85.610564,41.947401]},n4808:{id:"n4808",loc:[-85.610553,41.947122]},n4809:{id:"n4809",loc:[-85.610194,41.946992]},n481:{id:"n481",loc:[-85.634478,41.942342]},n4810:{id:"n4810",loc:[-85.609976,41.946628]},n4811:{id:"n4811",loc:[-85.609769,41.946523]},n4812:{id:"n4812",loc:[-85.609307,41.946523]},n4813:{id:"n4813",loc:[-85.609035,41.946462]},n4814:{id:"n4814",loc:[-85.609018,41.943277]},n4815:{id:"n4815",loc:[-85.609617,41.943423]},n4816:{id:"n4816",loc:[-85.610471,41.943447]},n4817:{id:"n4817",loc:[-85.621491,41.949168]},n4818:{id:"n4818",loc:[-85.620266,41.94917]},n4819:{id:"n4819",loc:[-85.620262,41.947557]},n482:{id:"n482",loc:[-85.634521,41.942254]},n4820:{id:"n4820",loc:[-85.620825,41.947556]},n4821:{id:"n4821",loc:[-85.620827,41.948371]},n4822:{id:"n4822",loc:[-85.621489,41.94837]},n4823:{id:"n4823",loc:[-85.622865,41.950928]},n4824:{id:"n4824",loc:[-85.622858,41.949744]},n4825:{id:"n4825",loc:[-85.623696,41.949714]},n4826:{id:"n4826",loc:[-85.623696,41.949647]},n4827:{id:"n4827",loc:[-85.624019,41.949647]},n4828:{id:"n4828",loc:[-85.624024,41.950093]},n4829:{id:"n4829",loc:[-85.622885,41.949711]},n483:{id:"n483",loc:[-85.63425,41.941819]},n4830:{id:"n4830",loc:[-85.624584,41.951049]},n4831:{id:"n4831",loc:[-85.624669,41.9511]},n4832:{id:"n4832",loc:[-85.624316,41.952218]},n4833:{id:"n4833",loc:[-85.623819,41.952094]},n4834:{id:"n4834",loc:[-85.623385,41.952101]},n4835:{id:"n4835",loc:[-85.623456,41.951238]},n4836:{id:"n4836",loc:[-85.623535,41.951051]},n4837:{id:"n4837",loc:[-85.624693,41.950921]},n4838:{id:"n4838",loc:[-85.624727,41.950897]},n4839:{id:"n4839",loc:[-85.624869,41.950341]},n484:{id:"n484",loc:[-85.634324,41.942131]},n4840:{id:"n4840",loc:[-85.624859,41.949284]},n4841:{id:"n4841",loc:[-85.624788,41.949262]},n4842:{id:"n4842",loc:[-85.62402,41.949265]},n4843:{id:"n4843",loc:[-85.610382,41.954663]},n4844:{id:"n4844",loc:[-85.605675,41.954667]},n4845:{id:"n4845",loc:[-85.605669,41.949407]},n4846:{id:"n4846",loc:[-85.610376,41.949404]},n4847:{id:"n4847",loc:[-85.605552,41.958536]},n4848:{id:"n4848",loc:[-85.595755,41.958588]},n4849:{id:"n4849",loc:[-85.595732,41.956419]},n485:{id:"n485",loc:[-85.634211,41.941374]},n4850:{id:"n4850",loc:[-85.596908,41.955605]},n4851:{id:"n4851",loc:[-85.597723,41.955596]},n4852:{id:"n4852",loc:[-85.597715,41.954967]},n4853:{id:"n4853",loc:[-85.5874,41.955018]},n4854:{id:"n4854",loc:[-85.586615,41.955124]},n4855:{id:"n4855",loc:[-85.58613,41.955293]},n4856:{id:"n4856",loc:[-85.586166,41.962122]},n4857:{id:"n4857",loc:[-85.587008,41.955052]},n4858:{id:"n4858",loc:[-85.591685,41.95499]},n4859:{id:"n4859",loc:[-85.591718,41.956649]},n486:{id:"n486",loc:[-85.634085,41.940704]},n4860:{id:"n4860",loc:[-85.591133,41.956649]},n4861:{id:"n4861",loc:[-85.591061,41.95582]},n4862:{id:"n4862",loc:[-85.590677,41.95613]},n4863:{id:"n4863",loc:[-85.590826,41.956369]},n4864:{id:"n4864",loc:[-85.591016,41.954991]},n4865:{id:"n4865",loc:[-85.587656,41.954855]},n4866:{id:"n4866",loc:[-85.5964,41.955274]},n4867:{id:"n4867",loc:[-85.58776,41.96178]},n4868:{id:"n4868",loc:[-85.601172,41.960448]},n4869:{id:"n4869",loc:[-85.589489,41.960478]},n487:{id:"n487",loc:[-85.635567,41.940944]},n4870:{id:"n4870",loc:[-85.586664,41.960493]},n4871:{id:"n4871",loc:[-85.591227,41.95676]},n4872:{id:"n4872",loc:[-85.589424,41.958093]},n4873:{id:"n4873",loc:[-85.588779,41.957611]},n4874:{id:"n4874",loc:[-85.590583,41.956278]},n4875:{id:"n4875",loc:[-85.590759,41.957106]},n4876:{id:"n4876",loc:[-85.592213,41.958218]},n4877:{id:"n4877",loc:[-85.592262,41.958279]},n4878:{id:"n4878",loc:[-85.592304,41.958358]},n4879:{id:"n4879",loc:[-85.592351,41.95849]},n488:{id:"n488",loc:[-85.635542,41.940919]},n4880:{id:"n4880",loc:[-85.592363,41.958605]},n4881:{id:"n4881",loc:[-85.592383,41.96047]},n4882:{id:"n4882",loc:[-85.592376,41.959808]},n4883:{id:"n4883",loc:[-85.600825,41.959779]},n4884:{id:"n4884",loc:[-85.601084,41.959844]},n4885:{id:"n4885",loc:[-85.601144,41.959908]},n4886:{id:"n4886",loc:[-85.601164,41.960008]},n4887:{id:"n4887",loc:[-85.601162,41.960125]},n4888:{id:"n4888",loc:[-85.601134,41.960221]},n4889:{id:"n4889",loc:[-85.600993,41.960353]},n489:{id:"n489",loc:[-85.635514,41.940906]},n4890:{id:"n4890",loc:[-85.600794,41.960449]},n4891:{id:"n4891",loc:[-85.60098,41.959792]},n4892:{id:"n4892",loc:[-85.601067,41.960294]},n4893:{id:"n4893",loc:[-85.596829,41.959793]},n4894:{id:"n4894",loc:[-85.596839,41.960459]},n4895:{id:"n4895",loc:[-85.589364,41.958048]},n4896:{id:"n4896",loc:[-85.587374,41.959511]},n4897:{id:"n4897",loc:[-85.587286,41.959564]},n4898:{id:"n4898",loc:[-85.587163,41.959632]},n4899:{id:"n4899",loc:[-85.586694,41.959865]},n49:{id:"n49",loc:[-85.637127,41.942757]},n490:{id:"n490",loc:[-85.635469,41.940896]},n4900:{id:"n4900",loc:[-85.586634,41.959921]},n4901:{id:"n4901",loc:[-85.586607,41.960001]},n4902:{id:"n4902",loc:[-85.586599,41.960099]},n4903:{id:"n4903",loc:[-85.586602,41.96034]},n4904:{id:"n4904",loc:[-85.586669,41.960439]},n4905:{id:"n4905",loc:[-85.586758,41.960493]},n4906:{id:"n4906",loc:[-85.586618,41.960391]},n4907:{id:"n4907",loc:[-85.591201,41.956352]},n4908:{id:"n4908",loc:[-85.59112,41.954843]},n4909:{id:"n4909",loc:[-85.591536,41.956349]},n491:{id:"n491",loc:[-85.635667,41.940826]},n4910:{id:"n4910",loc:[-85.590953,41.956354]},n4911:{id:"n4911",loc:[-85.591468,41.956406]},n4912:{id:"n4912",loc:[-85.591469,41.956478]},n4913:{id:"n4913",loc:[-85.591123,41.956481]},n4914:{id:"n4914",loc:[-85.591121,41.956409]},n4915:{id:"n4915",loc:[-85.590826,41.955954]},n4916:{id:"n4916",loc:[-85.590612,41.956115]},n4917:{id:"n4917",loc:[-85.590402,41.955962]},n4918:{id:"n4918",loc:[-85.590622,41.955804]},n4919:{id:"n4919",loc:[-85.59011,41.956502]},n492:{id:"n492",loc:[-85.636197,41.940599]},n4920:{id:"n4920",loc:[-85.589877,41.956668]},n4921:{id:"n4921",loc:[-85.589777,41.95659]},n4922:{id:"n4922",loc:[-85.59001,41.956424]},n4923:{id:"n4923",loc:[-85.589595,41.956427]},n4924:{id:"n4924",loc:[-85.589434,41.956549]},n4925:{id:"n4925",loc:[-85.589262,41.956424]},n4926:{id:"n4926",loc:[-85.589422,41.956302]},n4927:{id:"n4927",loc:[-85.589358,41.956286]},n4928:{id:"n4928",loc:[-85.5892,41.956408]},n4929:{id:"n4929",loc:[-85.589032,41.956288]},n493:{id:"n493",loc:[-85.6362,41.940686]},n4930:{id:"n4930",loc:[-85.58919,41.956166]},n4931:{id:"n4931",loc:[-85.589165,41.956132]},n4932:{id:"n4932",loc:[-85.589002,41.956253]},n4933:{id:"n4933",loc:[-85.588826,41.956122]},n4934:{id:"n4934",loc:[-85.588989,41.956001]},n4935:{id:"n4935",loc:[-85.588673,41.955757]},n4936:{id:"n4936",loc:[-85.588502,41.955882]},n4937:{id:"n4937",loc:[-85.588339,41.955759]},n4938:{id:"n4938",loc:[-85.58851,41.955633]},n4939:{id:"n4939",loc:[-85.590382,41.955892]},n494:{id:"n494",loc:[-85.635969,41.94069]},n4940:{id:"n4940",loc:[-85.589923,41.956231]},n4941:{id:"n4941",loc:[-85.58984,41.956168]},n4942:{id:"n4942",loc:[-85.5903,41.95583]},n4943:{id:"n4943",loc:[-85.589636,41.956038]},n4944:{id:"n4944",loc:[-85.589546,41.956105]},n4945:{id:"n4945",loc:[-85.589045,41.955729]},n4946:{id:"n4946",loc:[-85.589135,41.955662]},n4947:{id:"n4947",loc:[-85.590718,41.955293]},n4948:{id:"n4948",loc:[-85.590718,41.955374]},n4949:{id:"n4949",loc:[-85.589211,41.955369]},n495:{id:"n495",loc:[-85.635965,41.940561]},n4950:{id:"n4950",loc:[-85.589212,41.955287]},n4951:{id:"n4951",loc:[-85.589675,41.956817]},n4952:{id:"n4952",loc:[-85.58947,41.95697]},n4953:{id:"n4953",loc:[-85.589219,41.956784]},n4954:{id:"n4954",loc:[-85.589425,41.95663]},n4955:{id:"n4955",loc:[-85.589373,41.95702]},n4956:{id:"n4956",loc:[-85.589171,41.957172]},n4957:{id:"n4957",loc:[-85.588962,41.957019]},n4958:{id:"n4958",loc:[-85.589164,41.956867]},n4959:{id:"n4959",loc:[-85.588881,41.955006]},n496:{id:"n496",loc:[-85.636031,41.94056]},n4960:{id:"n4960",loc:[-85.588804,41.955006]},n4961:{id:"n4961",loc:[-85.604773,41.954521]},n4962:{id:"n4962",loc:[-85.601603,41.954527]},n4963:{id:"n4963",loc:[-85.600823,41.954169]},n4964:{id:"n4964",loc:[-85.600828,41.950191]},n4965:{id:"n4965",loc:[-85.601673,41.949457]},n4966:{id:"n4966",loc:[-85.604464,41.949488]},n4967:{id:"n4967",loc:[-85.60538,41.950212]},n4968:{id:"n4968",loc:[-85.605395,41.954108]},n4969:{id:"n4969",loc:[-85.604771,41.954109]},n497:{id:"n497",loc:[-85.636032,41.940602]},n4970:{id:"n4970",loc:[-85.600613,41.953916]},n4971:{id:"n4971",loc:[-85.599758,41.954649]},n4972:{id:"n4972",loc:[-85.591194,41.954663]},n4973:{id:"n4973",loc:[-85.591182,41.950465]},n4974:{id:"n4974",loc:[-85.591871,41.950464]},n4975:{id:"n4975",loc:[-85.591868,41.949209]},n4976:{id:"n4976",loc:[-85.592155,41.949209]},n4977:{id:"n4977",loc:[-85.592155,41.94848]},n4978:{id:"n4978",loc:[-85.600615,41.948482]},n4979:{id:"n4979",loc:[-85.605421,41.949378]},n498:{id:"n498",loc:[-85.635776,41.940583]},n4980:{id:"n4980",loc:[-85.600614,41.949373]},n4981:{id:"n4981",loc:[-85.601316,41.94849]},n4982:{id:"n4982",loc:[-85.601592,41.947641]},n4983:{id:"n4983",loc:[-85.60395,41.947618]},n4984:{id:"n4984",loc:[-85.603973,41.948114]},n4985:{id:"n4985",loc:[-85.605398,41.948103]},n4986:{id:"n4986",loc:[-85.614017,41.965566]},n4987:{id:"n4987",loc:[-85.605787,41.965619]},n4988:{id:"n4988",loc:[-85.60577,41.963821]},n4989:{id:"n4989",loc:[-85.612886,41.963808]},n499:{id:"n499",loc:[-85.63589,41.940578]},n4990:{id:"n4990",loc:[-85.613207,41.963705]},n4991:{id:"n4991",loc:[-85.613511,41.963525]},n4992:{id:"n4992",loc:[-85.613667,41.963305]},n4993:{id:"n4993",loc:[-85.613779,41.962983]},n4994:{id:"n4994",loc:[-85.613797,41.959709]},n4995:{id:"n4995",loc:[-85.613663,41.95936]},n4996:{id:"n4996",loc:[-85.61339,41.959064]},n4997:{id:"n4997",loc:[-85.610503,41.956898]},n4998:{id:"n4998",loc:[-85.610485,41.956595]},n4999:{id:"n4999",loc:[-85.613892,41.956621]},n5:{id:"n5",loc:[-85.622744,41.95268]},n50:{id:"n50",loc:[-85.636673,41.943143]},n500:{id:"n500",loc:[-85.636198,41.940578]},n5000:{id:"n5000",loc:[-85.613866,41.958574]},n5001:{id:"n5001",loc:[-85.615262,41.958561]},n5002:{id:"n5002",loc:[-85.615279,41.959541]},n5003:{id:"n5003",loc:[-85.615314,41.95597]},n5004:{id:"n5004",loc:[-85.613887,41.955988]},n5005:{id:"n5005",loc:[-85.613074,41.962244]},n5006:{id:"n5006",loc:[-85.611678,41.963354]},n5007:{id:"n5007",loc:[-85.611678,41.963487]},n5008:{id:"n5008",loc:[-85.606906,41.963502]},n5009:{id:"n5009",loc:[-85.605777,41.962657]},n501:{id:"n501",loc:[-85.636251,41.940584]},n5010:{id:"n5010",loc:[-85.605711,41.9599]},n5011:{id:"n5011",loc:[-85.608139,41.9585]},n5012:{id:"n5012",loc:[-85.60814,41.956306]},n5013:{id:"n5013",loc:[-85.608854,41.95581]},n5014:{id:"n5014",loc:[-85.610039,41.955883]},n5015:{id:"n5015",loc:[-85.610068,41.956754]},n5016:{id:"n5016",loc:[-85.613058,41.959411]},n5017:{id:"n5017",loc:[-85.610234,41.957068]},n5018:{id:"n5018",loc:[-85.609826,41.95581]},n5019:{id:"n5019",loc:[-85.606987,41.958505]},n502:{id:"n502",loc:[-85.636279,41.940605]},n5020:{id:"n5020",loc:[-85.606498,41.958846]},n5021:{id:"n5021",loc:[-85.606013,41.959342]},n5022:{id:"n5022",loc:[-85.614553,41.961581]},n5023:{id:"n5023",loc:[-85.61465,41.96214]},n5024:{id:"n5024",loc:[-85.615277,41.962442]},n5025:{id:"n5025",loc:[-85.615451,41.962972]},n5026:{id:"n5026",loc:[-85.614355,41.964826]},n5027:{id:"n5027",loc:[-85.615133,41.964589]},n5028:{id:"n5028",loc:[-85.615342,41.963818]},n5029:{id:"n5029",loc:[-85.615971,41.963792]},n503:{id:"n503",loc:[-85.636285,41.940633]},n5030:{id:"n5030",loc:[-85.615751,41.963122]},n5031:{id:"n5031",loc:[-85.616575,41.963123]},n5032:{id:"n5032",loc:[-85.612527,41.963846]},n5033:{id:"n5033",loc:[-85.630653,41.940709]},n5034:{id:"n5034",loc:[-85.629858,41.939568]},n5035:{id:"n5035",loc:[-85.629847,41.937926]},n504:{id:"n504",loc:[-85.636281,41.940662]},n505:{id:"n505",loc:[-85.636266,41.940688]},n506:{id:"n506",loc:[-85.636236,41.940701]},n507:{id:"n507",loc:[-85.63619,41.940706]},n508:{id:"n508",loc:[-85.635892,41.940707]},n509:{id:"n509",loc:[-85.635777,41.9407]},n51:{id:"n51",loc:[-85.636673,41.942864]},n510:{id:"n510",loc:[-85.636044,41.940578]},n511:{id:"n511",loc:[-85.635946,41.940578]},n512:{id:"n512",loc:[-85.636475,41.940732]},n513:{id:"n513",loc:[-85.636475,41.940777]},n514:{id:"n514",loc:[-85.636405,41.940777]},n515:{id:"n515",loc:[-85.636405,41.940732]},n516:{id:"n516",loc:[-85.636471,41.940916]},n517:{id:"n517",loc:[-85.636471,41.940961]},n518:{id:"n518",loc:[-85.636404,41.940961]},n519:{id:"n519",loc:[-85.636404,41.940916]},n52:{id:"n52",loc:[-85.636227,41.942864]},n520:{id:"n520",loc:[-85.636286,41.941127]},n521:{id:"n521",loc:[-85.636203,41.941126]},n522:{id:"n522",loc:[-85.636204,41.941083]},n523:{id:"n523",loc:[-85.636287,41.941083]},n524:{id:"n524",loc:[-85.636124,41.941064]},n525:{id:"n525",loc:[-85.636,41.941065]},n526:{id:"n526",loc:[-85.636,41.940964]},n527:{id:"n527",loc:[-85.636045,41.940964]},n528:{id:"n528",loc:[-85.636045,41.940928]},n529:{id:"n529",loc:[-85.636111,41.940928]},n53:{id:"n53",loc:[-85.636227,41.943143]},n530:{id:"n530",loc:[-85.636111,41.940961]},n531:{id:"n531",loc:[-85.636123,41.940961]},n532:{id:"n532",loc:[-85.636124,41.940997]},n533:{id:"n533",loc:[-85.636164,41.940997]},n534:{id:"n534",loc:[-85.636164,41.941044]},n535:{id:"n535",loc:[-85.636124,41.941044]},n536:{id:"n536",loc:[-85.636534,41.941256]},n537:{id:"n537",loc:[-85.63645,41.941246]},n538:{id:"n538",loc:[-85.636462,41.941189]},n539:{id:"n539",loc:[-85.636546,41.941199]},n54:{id:"n54",loc:[-85.636198,41.943119]},n540:{id:"n540",loc:[-85.636802,41.941226]},n541:{id:"n541",loc:[-85.636701,41.941215]},n542:{id:"n542",loc:[-85.636709,41.941174]},n543:{id:"n543",loc:[-85.636656,41.941168]},n544:{id:"n544",loc:[-85.636666,41.941122]},n545:{id:"n545",loc:[-85.636781,41.941136]},n546:{id:"n546",loc:[-85.636774,41.94117]},n547:{id:"n547",loc:[-85.636812,41.941175]},n548:{id:"n548",loc:[-85.636803,41.941047]},n549:{id:"n549",loc:[-85.636785,41.941047]},n55:{id:"n55",loc:[-85.635945,41.94312]},n550:{id:"n550",loc:[-85.636785,41.941058]},n551:{id:"n551",loc:[-85.636644,41.941059]},n552:{id:"n552",loc:[-85.636644,41.941038]},n553:{id:"n553",loc:[-85.636581,41.941039]},n554:{id:"n554",loc:[-85.636581,41.940995]},n555:{id:"n555",loc:[-85.636746,41.940995]},n556:{id:"n556",loc:[-85.636746,41.940978]},n557:{id:"n557",loc:[-85.636803,41.940978]},n558:{id:"n558",loc:[-85.636781,41.940768]},n559:{id:"n559",loc:[-85.636783,41.940828]},n56:{id:"n56",loc:[-85.635943,41.942909]},n560:{id:"n560",loc:[-85.636761,41.940828]},n561:{id:"n561",loc:[-85.636762,41.940857]},n562:{id:"n562",loc:[-85.636641,41.940859]},n563:{id:"n563",loc:[-85.63664,41.940805]},n564:{id:"n564",loc:[-85.636676,41.940804]},n565:{id:"n565",loc:[-85.636675,41.940769]},n566:{id:"n566",loc:[-85.636733,41.94033]},n567:{id:"n567",loc:[-85.636471,41.940334]},n568:{id:"n568",loc:[-85.636469,41.940262]},n569:{id:"n569",loc:[-85.636731,41.940257]},n57:{id:"n57",loc:[-85.636227,41.942909]},n570:{id:"n570",loc:[-85.636798,41.940419]},n571:{id:"n571",loc:[-85.6368,41.940524]},n572:{id:"n572",loc:[-85.63664,41.940526]},n573:{id:"n573",loc:[-85.636638,41.940421]},n574:{id:"n574",loc:[-85.636372,41.940551]},n575:{id:"n575",loc:[-85.636338,41.94055]},n576:{id:"n576",loc:[-85.636339,41.940524]},n577:{id:"n577",loc:[-85.636373,41.940525]},n578:{id:"n578",loc:[-85.636388,41.940435]},n579:{id:"n579",loc:[-85.636222,41.940436]},n58:{id:"n58",loc:[-85.63627,41.943175]},n580:{id:"n580",loc:[-85.636222,41.940366]},n581:{id:"n581",loc:[-85.636387,41.940365]},n582:{id:"n582",loc:[-85.636158,41.940482]},n583:{id:"n583",loc:[-85.635963,41.940484]},n584:{id:"n584",loc:[-85.635961,41.940399]},n585:{id:"n585",loc:[-85.636156,41.940397]},n586:{id:"n586",loc:[-85.635987,41.940314]},n587:{id:"n587",loc:[-85.635987,41.940268]},n588:{id:"n588",loc:[-85.635968,41.940268]},n589:{id:"n589",loc:[-85.635967,41.940212]},n59:{id:"n59",loc:[-85.635531,41.943176]},n590:{id:"n590",loc:[-85.636082,41.940211]},n591:{id:"n591",loc:[-85.636083,41.94027]},n592:{id:"n592",loc:[-85.636064,41.94027]},n593:{id:"n593",loc:[-85.636064,41.940313]},n594:{id:"n594",loc:[-85.638071,41.941562]},n595:{id:"n595",loc:[-85.637953,41.941562]},n596:{id:"n596",loc:[-85.637952,41.941522]},n597:{id:"n597",loc:[-85.637876,41.941523]},n598:{id:"n598",loc:[-85.637876,41.941471]},n599:{id:"n599",loc:[-85.638035,41.94147]},n6:{id:"n6",loc:[-85.624925,41.950604]},n60:{id:"n60",loc:[-85.63542,41.942883]},n600:{id:"n600",loc:[-85.638035,41.941513]},n601:{id:"n601",loc:[-85.638071,41.941512]},n602:{id:"n602",loc:[-85.637038,41.942543],tags:{crossing:"marked",highway:"crossing"}},n603:{id:"n603",loc:[-85.637134,41.942542]},n604:{id:"n604",loc:[-85.638122,41.942532]},n605:{id:"n605",loc:[-85.638121,41.942478]},n606:{id:"n606",loc:[-85.638104,41.941424]},n607:{id:"n607",loc:[-85.637115,41.941438]},n608:{id:"n608",loc:[-85.637133,41.942453]},n609:{id:"n609",loc:[-85.637429,41.942004]},n61:{id:"n61",loc:[-85.635701,41.942802]},n610:{id:"n610",loc:[-85.637125,41.942004]},n611:{id:"n611",loc:[-85.637022,41.942004]},n612:{id:"n612",loc:[-85.635952,41.943579]},n613:{id:"n613",loc:[-85.635872,41.943594]},n614:{id:"n614",loc:[-85.635857,41.943551]},n615:{id:"n615",loc:[-85.635937,41.943535]},n616:{id:"n616",loc:[-85.63671,41.94344]},n617:{id:"n617",loc:[-85.636427,41.94334]},n618:{id:"n618",loc:[-85.635353,41.943279]},n619:{id:"n619",loc:[-85.635319,41.943257]},n62:{id:"n62",loc:[-85.6358,41.942997]},n620:{id:"n620",loc:[-85.638786,41.943105]},n621:{id:"n621",loc:[-85.634957,41.943146]},n622:{id:"n622",loc:[-85.635012,41.943119]},n623:{id:"n623",loc:[-85.632409,41.944222]},n624:{id:"n624",loc:[-85.631863,41.944749]},n625:{id:"n625",loc:[-85.631915,41.944722]},n626:{id:"n626",loc:[-85.631884,41.94464]},n627:{id:"n627",loc:[-85.631792,41.944359]},n628:{id:"n628",loc:[-85.631817,41.944703]},n629:{id:"n629",loc:[-85.633464,41.945787]},n63:{id:"n63",loc:[-85.635808,41.943176]},n630:{id:"n630",loc:[-85.633583,41.945919]},n631:{id:"n631",loc:[-85.63382,41.945698]},n632:{id:"n632",loc:[-85.633681,41.945571]},n633:{id:"n633",loc:[-85.634217,41.946824]},n634:{id:"n634",loc:[-85.634271,41.946836]},n635:{id:"n635",loc:[-85.634319,41.94573]},n636:{id:"n636",loc:[-85.634377,41.945672]},n637:{id:"n637",loc:[-85.634909,41.945354]},n638:{id:"n638",loc:[-85.634726,41.945493],tags:{artwork_type:"mural",tourism:"artwork"}},n639:{id:"n639",loc:[-85.63546,41.945612]},n64:{id:"n64",loc:[-85.63631,41.943253]},n640:{id:"n640",loc:[-85.635561,41.945493]},n641:{id:"n641",loc:[-85.635417,41.945565]},n642:{id:"n642",loc:[-85.635315,41.945583]},n643:{id:"n643",loc:[-85.63506,41.945383]},n644:{id:"n644",loc:[-85.635198,41.945199]},n645:{id:"n645",loc:[-85.635361,41.94558]},n646:{id:"n646",loc:[-85.635017,41.945066]},n647:{id:"n647",loc:[-85.634779,41.945206]},n648:{id:"n648",loc:[-85.63425,41.945655]},n649:{id:"n649",loc:[-85.634247,41.945631]},n65:{id:"n65",loc:[-85.635398,41.943259]},n650:{id:"n650",loc:[-85.634889,41.945921]},n651:{id:"n651",loc:[-85.634889,41.945939]},n652:{id:"n652",loc:[-85.634889,41.945761]},n653:{id:"n653",loc:[-85.634889,41.945778]},n654:{id:"n654",loc:[-85.635112,41.945715]},n655:{id:"n655",loc:[-85.635025,41.945714]},n656:{id:"n656",loc:[-85.635027,41.945761]},n657:{id:"n657",loc:[-85.635438,41.945665]},n658:{id:"n658",loc:[-85.635416,41.945676]},n659:{id:"n659",loc:[-85.635401,41.945709]},n66:{id:"n66",loc:[-85.635336,41.943036]},n660:{id:"n660",loc:[-85.635271,41.945566]},n661:{id:"n661",loc:[-85.636106,41.946268]},n662:{id:"n662",loc:[-85.635867,41.946747]},n663:{id:"n663",loc:[-85.636476,41.946797]},n664:{id:"n664",loc:[-85.63651,41.946796]},n665:{id:"n665",loc:[-85.635367,41.946389]},n666:{id:"n666",loc:[-85.635367,41.946437]},n667:{id:"n667",loc:[-85.634787,41.946441]},n668:{id:"n668",loc:[-85.6358,41.946243]},n669:{id:"n669",loc:[-85.635784,41.94622]},n67:{id:"n67",loc:[-85.635911,41.942899]},n670:{id:"n670",loc:[-85.635727,41.946195]},n671:{id:"n671",loc:[-85.635708,41.946588]},n672:{id:"n672",loc:[-85.635648,41.946561]},n673:{id:"n673",loc:[-85.635624,41.946555]},n674:{id:"n674",loc:[-85.635417,41.946559]},n675:{id:"n675",loc:[-85.634866,41.946561]},n676:{id:"n676",loc:[-85.634866,41.946543]},n677:{id:"n677",loc:[-85.635085,41.946546]},n678:{id:"n678",loc:[-85.635085,41.946554]},n679:{id:"n679",loc:[-85.634584,41.94488]},n68:{id:"n68",loc:[-85.635915,41.943156]},n680:{id:"n680",loc:[-85.634557,41.944882]},n681:{id:"n681",loc:[-85.634455,41.944943]},n682:{id:"n682",loc:[-85.634305,41.944968]},n683:{id:"n683",loc:[-85.634261,41.944927]},n684:{id:"n684",loc:[-85.634132,41.944741]},n685:{id:"n685",loc:[-85.633705,41.944759]},n686:{id:"n686",loc:[-85.633918,41.944616]},n687:{id:"n687",loc:[-85.633974,41.944663]},n688:{id:"n688",loc:[-85.6336,41.944665]},n689:{id:"n689",loc:[-85.633817,41.944528]},n69:{id:"n69",loc:[-85.63631,41.943157]},n690:{id:"n690",loc:[-85.633889,41.944485]},n691:{id:"n691",loc:[-85.633931,41.944525]},n692:{id:"n692",loc:[-85.633864,41.944563]},n693:{id:"n693",loc:[-85.633456,41.944524]},n694:{id:"n694",loc:[-85.633676,41.944399]},n695:{id:"n695",loc:[-85.633352,41.944415]},n696:{id:"n696",loc:[-85.633655,41.944234]},n697:{id:"n697",loc:[-85.633761,41.94435]},n698:{id:"n698",loc:[-85.633254,41.944318]},n699:{id:"n699",loc:[-85.633472,41.944188]},n7:{id:"n7",loc:[-85.638791,41.943231]},n70:{id:"n70",loc:[-85.63579,41.942967]},n700:{id:"n700",loc:[-85.633524,41.944237]},n701:{id:"n701",loc:[-85.633583,41.944202]},n702:{id:"n702",loc:[-85.633632,41.944247]},n703:{id:"n703",loc:[-85.633165,41.944228]},n704:{id:"n704",loc:[-85.633388,41.944105]},n705:{id:"n705",loc:[-85.633117,41.944175]},n706:{id:"n706",loc:[-85.633302,41.944077]},n707:{id:"n707",loc:[-85.633352,41.944126]},n708:{id:"n708",loc:[-85.633052,41.944107]},n709:{id:"n709",loc:[-85.633237,41.944009]},n71:{id:"n71",loc:[-85.637506,41.942824]},n710:{id:"n710",loc:[-85.633187,41.943955]},n711:{id:"n711",loc:[-85.633,41.944054]},n712:{id:"n712",loc:[-85.633155,41.944265]},n713:{id:"n713",loc:[-85.633669,41.944765]},n714:{id:"n714",loc:[-85.634468,41.945503]},n715:{id:"n715",loc:[-85.63455,41.945566]},n716:{id:"n716",loc:[-85.634737,41.945729]},n717:{id:"n717",loc:[-85.634753,41.945752]},n718:{id:"n718",loc:[-85.634756,41.945781]},n719:{id:"n719",loc:[-85.634758,41.945978]},n72:{id:"n72",loc:[-85.637511,41.943056]},n720:{id:"n720",loc:[-85.634363,41.945548],tags:{crossing:"marked",highway:"crossing"}},n721:{id:"n721",loc:[-85.634245,41.945599]},n722:{id:"n722",loc:[-85.633474,41.944889]},n723:{id:"n723",loc:[-85.632997,41.944418]},n724:{id:"n724",loc:[-85.63278,41.944183]},n725:{id:"n725",loc:[-85.63331,41.944429]},n726:{id:"n726",loc:[-85.633568,41.944829],tags:{crossing:"marked",highway:"crossing"}},n727:{id:"n727",loc:[-85.634669,41.94567]},n728:{id:"n728",loc:[-85.634462,41.945787]},n729:{id:"n729",loc:[-85.634272,41.945625]},n73:{id:"n73",loc:[-85.637361,41.943058]},n730:{id:"n730",loc:[-85.634344,41.945699],tags:{crossing:"marked",highway:"crossing"}},n731:{id:"n731",loc:[-85.634426,41.945783]},n732:{id:"n732",loc:[-85.632425,41.944137]},n733:{id:"n733",loc:[-85.632302,41.944192]},n734:{id:"n734",loc:[-85.632762,41.944174]},n735:{id:"n735",loc:[-85.632713,41.944179]},n736:{id:"n736",loc:[-85.632411,41.944327]},n737:{id:"n737",loc:[-85.632362,41.944341]},n738:{id:"n738",loc:[-85.632236,41.944204]},n739:{id:"n739",loc:[-85.634939,41.942165]},n74:{id:"n74",loc:[-85.637356,41.942825]},n740:{id:"n740",loc:[-85.635079,41.941535]},n741:{id:"n741",loc:[-85.635112,41.941595]},n742:{id:"n742",loc:[-85.635113,41.941633]},n743:{id:"n743",loc:[-85.635067,41.941652]},n744:{id:"n744",loc:[-85.634989,41.941651]},n745:{id:"n745",loc:[-85.634921,41.941609]},n746:{id:"n746",loc:[-85.634881,41.941544]},n747:{id:"n747",loc:[-85.635537,41.940939]},n748:{id:"n748",loc:[-85.635573,41.941048]},n749:{id:"n749",loc:[-85.635453,41.94091]},n75:{id:"n75",loc:[-85.638097,41.942833]},n750:{id:"n750",loc:[-85.635319,41.940943]},n751:{id:"n751",loc:[-85.637057,41.943224]},n752:{id:"n752",loc:[-85.636989,41.943296]},n753:{id:"n753",loc:[-85.636851,41.943299]},n754:{id:"n754",loc:[-85.636848,41.94322]},n755:{id:"n755",loc:[-85.636986,41.943217]},n756:{id:"n756",loc:[-85.637569,41.943454]},n757:{id:"n757",loc:[-85.637437,41.943458]},n758:{id:"n758",loc:[-85.637432,41.943384]},n759:{id:"n759",loc:[-85.637564,41.94338]},n76:{id:"n76",loc:[-85.638098,41.942912]},n760:{id:"n760",loc:[-85.637213,41.943378]},n761:{id:"n761",loc:[-85.637217,41.943435]},n762:{id:"n762",loc:[-85.637235,41.943434]},n763:{id:"n763",loc:[-85.637237,41.943465]},n764:{id:"n764",loc:[-85.637424,41.943459]},n765:{id:"n765",loc:[-85.637418,41.943371]},n766:{id:"n766",loc:[-85.638094,41.943149]},n767:{id:"n767",loc:[-85.638096,41.943201]},n768:{id:"n768",loc:[-85.638041,41.943202]},n769:{id:"n769",loc:[-85.638042,41.943216]},n77:{id:"n77",loc:[-85.637705,41.942913]},n770:{id:"n770",loc:[-85.637927,41.943218]},n771:{id:"n771",loc:[-85.637926,41.943201]},n772:{id:"n772",loc:[-85.637897,41.943201]},n773:{id:"n773",loc:[-85.637896,41.943155]},n774:{id:"n774",loc:[-85.637962,41.943153]},n775:{id:"n775",loc:[-85.637962,41.943134]},n776:{id:"n776",loc:[-85.638017,41.943132]},n777:{id:"n777",loc:[-85.638018,41.943151]},n778:{id:"n778",loc:[-85.638045,41.943289]},n779:{id:"n779",loc:[-85.638048,41.943363]},n78:{id:"n78",loc:[-85.637705,41.942834]},n780:{id:"n780",loc:[-85.637842,41.943367]},n781:{id:"n781",loc:[-85.637839,41.943296]},n782:{id:"n782",loc:[-85.637896,41.943295]},n783:{id:"n783",loc:[-85.637897,41.943314]},n784:{id:"n784",loc:[-85.637957,41.943312]},n785:{id:"n785",loc:[-85.637957,41.943291]},n786:{id:"n786",loc:[-85.637816,41.943375]},n787:{id:"n787",loc:[-85.637815,41.943416]},n788:{id:"n788",loc:[-85.637715,41.943415]},n789:{id:"n789",loc:[-85.637716,41.943374]},n79:{id:"n79",loc:[-85.638071,41.942298]},n790:{id:"n790",loc:[-85.637912,41.943545]},n791:{id:"n791",loc:[-85.637909,41.943479]},n792:{id:"n792",loc:[-85.637967,41.943477]},n793:{id:"n793",loc:[-85.637967,41.94346]},n794:{id:"n794",loc:[-85.638077,41.943457]},n795:{id:"n795",loc:[-85.638078,41.943473]},n796:{id:"n796",loc:[-85.638124,41.943471]},n797:{id:"n797",loc:[-85.638126,41.943514]},n798:{id:"n798",loc:[-85.638079,41.943515]},n799:{id:"n799",loc:[-85.638079,41.943532]},n8:{id:"n8",loc:[-85.635241,41.941948]},n80:{id:"n80",loc:[-85.638074,41.942431]},n800:{id:"n800",loc:[-85.638028,41.943534]},n801:{id:"n801",loc:[-85.638028,41.943542]},n802:{id:"n802",loc:[-85.638845,41.942983]},n803:{id:"n803",loc:[-85.638846,41.94305]},n804:{id:"n804",loc:[-85.638661,41.943052]},n805:{id:"n805",loc:[-85.63866,41.942984]},n806:{id:"n806",loc:[-85.638579,41.942753]},n807:{id:"n807",loc:[-85.638445,41.942755]},n808:{id:"n808",loc:[-85.638452,41.942978]},n809:{id:"n809",loc:[-85.638545,41.942976]},n81:{id:"n81",loc:[-85.637836,41.942433]},n810:{id:"n810",loc:[-85.638543,41.942935]},n811:{id:"n811",loc:[-85.638571,41.942934]},n812:{id:"n812",loc:[-85.63857,41.942901]},n813:{id:"n813",loc:[-85.638611,41.9429]},n814:{id:"n814",loc:[-85.638607,41.942769]},n815:{id:"n815",loc:[-85.63858,41.94277]},n816:{id:"n816",loc:[-85.638597,41.942614]},n817:{id:"n817",loc:[-85.638601,41.94273]},n818:{id:"n818",loc:[-85.638686,41.942731]},n819:{id:"n819",loc:[-85.638689,41.942917]},n82:{id:"n82",loc:[-85.637835,41.94242]},n820:{id:"n820",loc:[-85.638558,41.943018]},n821:{id:"n821",loc:[-85.638243,41.943019]},n822:{id:"n822",loc:[-85.637536,41.943887]},n823:{id:"n823",loc:[-85.63749,41.943926]},n824:{id:"n824",loc:[-85.63743,41.943886]},n825:{id:"n825",loc:[-85.637476,41.943847]},n826:{id:"n826",loc:[-85.637527,41.943846]},n827:{id:"n827",loc:[-85.637141,41.943728]},n828:{id:"n828",loc:[-85.637201,41.943755]},n829:{id:"n829",loc:[-85.636987,41.943608]},n83:{id:"n83",loc:[-85.63776,41.942421]},n830:{id:"n830",loc:[-85.637441,41.943807]},n831:{id:"n831",loc:[-85.637673,41.94399]},n832:{id:"n832",loc:[-85.637783,41.944137]},n833:{id:"n833",loc:[-85.63845,41.944333]},n834:{id:"n834",loc:[-85.638159,41.944248]},n835:{id:"n835",loc:[-85.637859,41.94416]},n836:{id:"n836",loc:[-85.638685,41.944542]},n837:{id:"n837",loc:[-85.638714,41.944611]},n838:{id:"n838",loc:[-85.638711,41.944757]},n839:{id:"n839",loc:[-85.638774,41.945069]},n84:{id:"n84",loc:[-85.637758,41.942339]},n840:{id:"n840",loc:[-85.638742,41.945205]},n841:{id:"n841",loc:[-85.640267,41.942403]},n842:{id:"n842",loc:[-85.640154,41.942404]},n843:{id:"n843",loc:[-85.640152,41.942249]},n844:{id:"n844",loc:[-85.640266,41.942248]},n845:{id:"n845",loc:[-85.640366,41.942599]},n846:{id:"n846",loc:[-85.640362,41.942192]},n847:{id:"n847",loc:[-85.640146,41.942191]},n848:{id:"n848",loc:[-85.640122,41.942196]},n849:{id:"n849",loc:[-85.640108,41.942211]},n85:{id:"n85",loc:[-85.637836,41.942339]},n850:{id:"n850",loc:[-85.640101,41.942236]},n851:{id:"n851",loc:[-85.640103,41.94241]},n852:{id:"n852",loc:[-85.64011,41.942435]},n853:{id:"n853",loc:[-85.640126,41.942445]},n854:{id:"n854",loc:[-85.640153,41.942451]},n855:{id:"n855",loc:[-85.640183,41.942452]},n856:{id:"n856",loc:[-85.640364,41.942452]},n857:{id:"n857",loc:[-85.640007,41.942452]},n858:{id:"n858",loc:[-85.639449,41.942461]},n859:{id:"n859",loc:[-85.640049,41.942391]},n86:{id:"n86",loc:[-85.637835,41.942301]},n860:{id:"n860",loc:[-85.640052,41.942503]},n861:{id:"n861",loc:[-85.639575,41.94251]},n862:{id:"n862",loc:[-85.639572,41.942398]},n863:{id:"n863",loc:[-85.638782,41.942227]},n864:{id:"n864",loc:[-85.63843,41.942226]},n865:{id:"n865",loc:[-85.63823,41.942183]},n866:{id:"n866",loc:[-85.638363,41.942216],tags:{barrier:"gate"}},n867:{id:"n867",loc:[-85.6384,41.942223]},n868:{id:"n868",loc:[-85.636042,41.942797]},n869:{id:"n869",loc:[-85.636308,41.942752]},n87:{id:"n87",loc:[-85.637566,41.942367]},n870:{id:"n870",loc:[-85.636516,41.942729]},n871:{id:"n871",loc:[-85.636782,41.942712]},n872:{id:"n872",loc:[-85.636944,41.942706]},n873:{id:"n873",loc:[-85.63704,41.942706]},n874:{id:"n874",loc:[-85.637237,41.942703]},n875:{id:"n875",loc:[-85.637553,41.9427]},n876:{id:"n876",loc:[-85.638236,41.942697]},n877:{id:"n877",loc:[-85.636284,41.942781]},n878:{id:"n878",loc:[-85.636551,41.942641]},n879:{id:"n879",loc:[-85.633914,41.943693]},n88:{id:"n88",loc:[-85.637566,41.94241]},n880:{id:"n880",loc:[-85.63389,41.943708]},n881:{id:"n881",loc:[-85.633866,41.943686]},n882:{id:"n882",loc:[-85.63389,41.943671]},n883:{id:"n883",loc:[-85.633857,41.943609]},n884:{id:"n884",loc:[-85.634858,41.944474]},n885:{id:"n885",loc:[-85.633988,41.943234]},n886:{id:"n886",loc:[-85.633999,41.943485]},n887:{id:"n887",loc:[-85.634109,41.943449],tags:{emergency:"fire_hydrant"}},n888:{id:"n888",loc:[-85.635728,41.942655],tags:{emergency:"fire_hydrant"}},n889:{id:"n889",loc:[-85.636499,41.942845],tags:{man_made:"flagpole"}},n89:{id:"n89",loc:[-85.637455,41.94241]},n890:{id:"n890",loc:[-85.636197,41.943073]},n891:{id:"n891",loc:[-85.636227,41.943073]},n892:{id:"n892",loc:[-85.637433,41.942933],tags:{"addr:city":"Three Rivers","addr:housenumber":"401","addr:postcode":"49093","addr:state":"MI","addr:street":"Michigan Avenue",amenity:"restaurant",cuisine:"pizza",name:"Pizza Hut"}},n893:{id:"n893",loc:[-85.637907,41.942879],tags:{amenity:"car_wash"}},n894:{id:"n894",loc:[-85.637661,41.943018]},n895:{id:"n895",loc:[-85.636933,41.942733],tags:{emergency:"fire_hydrant"}},n896:{id:"n896",loc:[-85.637661,41.94304]},n897:{id:"n897",loc:[-85.637562,41.943041]},n898:{id:"n898",loc:[-85.637556,41.942725]},n899:{id:"n899",loc:[-85.637656,41.942724]},n9:{id:"n9",loc:[-85.635159,41.941926]},n90:{id:"n90",loc:[-85.637454,41.942367]},n900:{id:"n900",loc:[-85.637657,41.942779]},n901:{id:"n901",loc:[-85.637983,41.942777]},n902:{id:"n902",loc:[-85.637982,41.942616]},n903:{id:"n903",loc:[-85.637777,41.942778]},n904:{id:"n904",loc:[-85.637775,41.942699]},n905:{id:"n905",loc:[-85.637772,41.942618]},n906:{id:"n906",loc:[-85.637982,41.942698]},n907:{id:"n907",loc:[-85.637941,41.942378],tags:{"addr:city":"Three Rivers","addr:housenumber":"416","addr:postcode":"49093","addr:state":"MI","addr:street":"Michigan Avenue",name:"Gem Pawnbroker",shop:"pawnbroker"}},n908:{id:"n908",loc:[-85.637515,41.942394],tags:{second_hand:"only",shop:"car"}},n909:{id:"n909",loc:[-85.638743,41.942374],tags:{"addr:city":"Three Rivers","addr:housenumber":"500","addr:postcode":"49093","addr:state":"MI","addr:street":"Michigan Avenue",name:"William Towing","service:vehicle:towing":"yes","service:vehicle:tyres":"yes",shop:"car_repair"}},n91:{id:"n91",loc:[-85.637565,41.942341]},n910:{id:"n910",loc:[-85.638594,41.942357]},n911:{id:"n911",loc:[-85.634312,41.943562],tags:{"addr:city":"Three Rivers","addr:housenumber":"145","addr:postcode":"49093","addr:state":"MI","addr:street":"Michigan Avenue",amenity:"cafe",cuisine:"coffee_shop",name:"L.A.'s Coffee Cafe",outdoor_seating:"yes"}},n912:{id:"n912",loc:[-85.634404,41.943512]},n913:{id:"n913",loc:[-85.634391,41.943519],tags:{entrance:"yes"}},n914:{id:"n914",loc:[-85.634259,41.943538],tags:{entrance:"yes"}},n915:{id:"n915",loc:[-85.634247,41.943528]},n916:{id:"n916",loc:[-85.633747,41.943322],tags:{"addr:city":"Three Rivers","addr:housenumber":"132","addr:postcode":"49093","addr:state":"MI","addr:street":"Michigan Avenue",name:"Preferred Insurance Services",office:"insurance"}},n917:{id:"n917",loc:[-85.63299,41.943686],tags:{"addr:city":"Three Rivers","addr:housenumber":"101","addr:postcode":"49093","addr:state":"MI","addr:street":"Main Street",name:"Lynn's Garage","service:vehicle:tyres":"yes",shop:"car_repair"}},n918:{id:"n918",loc:[-85.633438,41.944883]},n919:{id:"n919",loc:[-85.633265,41.944983]},n92:{id:"n92",loc:[-85.637481,41.942341]},n920:{id:"n920",loc:[-85.633315,41.945027]},n921:{id:"n921",loc:[-85.633376,41.944827]},n922:{id:"n922",loc:[-85.633199,41.944922]},n923:{id:"n923",loc:[-85.633316,41.944772]},n924:{id:"n924",loc:[-85.633147,41.944867]},n925:{id:"n925",loc:[-85.633261,41.944719]},n926:{id:"n926",loc:[-85.633096,41.944812]},n927:{id:"n927",loc:[-85.633191,41.944645]},n928:{id:"n928",loc:[-85.632981,41.94476]},n929:{id:"n929",loc:[-85.633062,41.94483]},n93:{id:"n93",loc:[-85.637481,41.94226]},n930:{id:"n930",loc:[-85.633146,41.944602]},n931:{id:"n931",loc:[-85.632969,41.944703]},n932:{id:"n932",loc:[-85.633008,41.944745]},n933:{id:"n933",loc:[-85.633088,41.944545]},n934:{id:"n934",loc:[-85.632868,41.944655]},n935:{id:"n935",loc:[-85.632941,41.944718]},n936:{id:"n936",loc:[-85.633028,41.944483]},n937:{id:"n937",loc:[-85.632817,41.944605]},n938:{id:"n938",loc:[-85.632923,41.944373]},n939:{id:"n939",loc:[-85.632692,41.944485]},n94:{id:"n94",loc:[-85.637565,41.94226]},n940:{id:"n940",loc:[-85.632871,41.944316]},n941:{id:"n941",loc:[-85.632655,41.944421]},n942:{id:"n942",loc:[-85.632711,41.944478]},n943:{id:"n943",loc:[-85.632825,41.94426]},n944:{id:"n944",loc:[-85.632606,41.944363]},n945:{id:"n945",loc:[-85.63275,41.94418]},n946:{id:"n946",loc:[-85.632588,41.944256]},n947:{id:"n947",loc:[-85.632611,41.944279]},n948:{id:"n948",loc:[-85.632548,41.944306]},n949:{id:"n949",loc:[-85.632512,41.944406]},n95:{id:"n95",loc:[-85.637188,41.942217]},n950:{id:"n950",loc:[-85.632565,41.944463]},n951:{id:"n951",loc:[-85.632579,41.944456]},n952:{id:"n952",loc:[-85.632634,41.944518]},n953:{id:"n953",loc:[-85.632686,41.944569]},n954:{id:"n954",loc:[-85.632745,41.944537]},n955:{id:"n955",loc:[-85.632659,41.944587]},n956:{id:"n956",loc:[-85.632778,41.944705]},n957:{id:"n957",loc:[-85.632815,41.944301],tags:{"addr:city":"Three Rivers","addr:housenumber":"5","addr:postcode":"49093","addr:state":"MI","addr:street":"Main Street",name:"Access Point Employment",office:"employment_agency"}},n958:{id:"n958",loc:[-85.6332,41.944174],tags:{"addr:city":"Three Rivers","addr:housenumber":"6","addr:postcode":"49093","addr:state":"MI","addr:street":"Main Street",name:"Paisley Emporium",shop:"second_hand"}},n959:{id:"n959",loc:[-85.633578,41.944568],tags:{"addr:city":"Three Rivers","addr:housenumber":"22","addr:postcode":"49093","addr:state":"MI","addr:street":"Main Street",name:"Lowry's Books",shop:"books"}},n96:{id:"n96",loc:[-85.637189,41.942303]},n960:{id:"n960",loc:[-85.63344,41.944443],tags:{"addr:city":"Three Rivers","addr:housenumber":"16","addr:postcode":"49093","addr:state":"MI","addr:street":"Main Street",amenity:"restaurant",cuisine:"pizza",name:"Paisano's Bar and Grill"}},n961:{id:"n961",loc:[-85.633009,41.944542],tags:{"addr:city":"Three Rivers","addr:housenumber":"13","addr:postcode":"49093","addr:state":"MI","addr:street":"Main Street",amenity:"cafe",cuisine:"american",internet_access:"yes",name:"Main Street Cafe"}},n962:{id:"n962",loc:[-85.633674,41.944682],tags:{"addr:city":"Three Rivers","addr:housenumber":"28","addr:postcode":"49093","addr:state":"MI","addr:street":"Main Street",leisure:"fitness_centre",name:"Main Street Fitness"}},n963:{id:"n963",loc:[-85.633376,41.944868],tags:{"addr:city":"Three Rivers","addr:housenumber":"27","addr:postcode":"49093","addr:state":"MI","addr:street":"Main Street",leisure:"fitness_centre",name:"Main Street Barbell"}},n964:{id:"n964",loc:[-85.633366,41.944783]},n965:{id:"n965",loc:[-85.633296,41.94482]},n966:{id:"n966",loc:[-85.633214,41.94487]},n967:{id:"n967",loc:[-85.633005,41.944988]},n968:{id:"n968",loc:[-85.633269,41.944816]},n969:{id:"n969",loc:[-85.633215,41.944842]},n97:{id:"n97",loc:[-85.637299,41.942302]},n970:{id:"n970",loc:[-85.633245,41.944871]},n971:{id:"n971",loc:[-85.633296,41.944845]},n972:{id:"n972",loc:[-85.633254,41.944845],tags:{natural:"tree"}},n973:{id:"n973",loc:[-85.633557,41.945515]},n974:{id:"n974",loc:[-85.633279,41.945246]},n975:{id:"n975",loc:[-85.63324,41.945226]},n976:{id:"n976",loc:[-85.6332,41.945213]},n977:{id:"n977",loc:[-85.633133,41.945164]},n978:{id:"n978",loc:[-85.63312,41.945132]},n979:{id:"n979",loc:[-85.633095,41.945081]},n98:{id:"n98",loc:[-85.637299,41.942314]},n980:{id:"n980",loc:[-85.633064,41.945047]},n981:{id:"n981",loc:[-85.632739,41.944742]},n982:{id:"n982",loc:[-85.633281,41.945026]},n983:{id:"n983",loc:[-85.633155,41.944903]},n984:{id:"n984",loc:[-85.633079,41.944829]},n985:{id:"n985",loc:[-85.63304,41.944853]},n986:{id:"n986",loc:[-85.632949,41.944776]},n987:{id:"n987",loc:[-85.632921,41.944725]},n988:{id:"n988",loc:[-85.632859,41.944673]},n989:{id:"n989",loc:[-85.632895,41.94505]},n99:{id:"n99",loc:[-85.637396,41.942313]},n990:{id:"n990",loc:[-85.633336,41.945138]},n991:{id:"n991",loc:[-85.633466,41.945265]},n992:{id:"n992",loc:[-85.633367,41.945327]},n993:{id:"n993",loc:[-85.633163,41.945189]},n994:{id:"n994",loc:[-85.633678,41.945309]},n995:{id:"n995",loc:[-85.633619,41.945261]},n996:{id:"n996",loc:[-85.63355,41.945301]},n997:{id:"n997",loc:[-85.633607,41.945352]},n998:{id:"n998",loc:[-85.633579,41.945327],tags:{entrance:"yes"}},n999:{id:"n999",loc:[-85.633445,41.945404]},r2:{id:"r2",members:[{id:"w225",role:"outer",type:"way"}],tags:{type:"multipolygon",waterway:"riverbank"}},r5:{id:"r5",members:[{id:"w642",role:"outer",type:"way"}],tags:{admin_level:"8",border_type:"city",boundary:"administrative",name:"Three Rivers",place:"city",type:"boundary"}},w1:{id:"w1",nodes:["n5","n1797"],tags:{highway:"residential",name:"12th Avenue"}},w10:{id:"w10",nodes:["n54","n55","n56","n57","n891","n890","n54"],tags:{building:"yes"}},w100:{id:"w100",nodes:["n451","n915","n452"],tags:{highway:"footway"}},w101:{id:"w101",nodes:["n461","n462","n463","n464","n465","n466"],tags:{barrier:"fence"}},w102:{id:"w102",nodes:["n467","n468","n469","n470","n472","n467"],tags:{amenity:"parking"}},w103:{id:"w103",nodes:["n2597","n2444","n471","n472"],tags:{highway:"footway"}},w104:{id:"w104",nodes:["n473","n474","n325"],tags:{footway:"sidewalk",highway:"footway"}},w105:{id:"w105",nodes:["n475","n324","n325"],tags:{footway:"sidewalk",highway:"footway"}},w106:{id:"w106",nodes:["n886","n452","n476"],tags:{footway:"sidewalk",highway:"footway"}},w107:{id:"w107",nodes:["n485","n4678","n486","n18"],tags:{highway:"service"}},w108:{id:"w108",nodes:["n300","n487","n488","n489","n490"],tags:{highway:"footway"}},w109:{id:"w109",nodes:["n490","n491"],tags:{highway:"footway"}},w11:{id:"w11",nodes:["n58","n63","n59","n315","n60"],tags:{highway:"service"}},w110:{id:"w110",nodes:["n492","n493","n494","n495","n496","n497","n492"],tags:{building:"yes"}},w111:{id:"w111",nodes:["n498","n499","n511"],tags:{highway:"service"}},w112:{id:"w112",nodes:["n510","n500","n501","n502","n503","n504","n505","n506","n507","n508","n509"],tags:{highway:"service"}},w113:{id:"w113",nodes:["n511","n510"],tags:{covered:"yes",highway:"service"}},w114:{id:"w114",nodes:["n512","n513","n514","n515","n512"],tags:{building:"yes"}},w115:{id:"w115",nodes:["n516","n517","n518","n519","n516"],tags:{building:"yes"}},w116:{id:"w116",nodes:["n520","n521","n522","n523","n520"],tags:{building:"yes"}},w117:{id:"w117",nodes:["n524","n525","n526","n527","n528","n529","n530","n531","n532","n533","n534","n535","n524"],tags:{building:"yes"}},w118:{id:"w118",nodes:["n536","n537","n538","n539","n536"],tags:{building:"yes"}},w119:{id:"w119",nodes:["n540","n541","n542","n543","n544","n545","n546","n547","n540"],tags:{building:"yes"}},w12:{id:"w12",nodes:["n61","n314","n70","n62","n63"],tags:{highway:"service"}},w120:{id:"w120",nodes:["n548","n549","n550","n551","n552","n553","n554","n555","n556","n557","n548"],tags:{building:"yes"}},w121:{id:"w121",nodes:["n558","n559","n560","n561","n562","n563","n564","n565","n558"],tags:{building:"yes"}},w122:{id:"w122",nodes:["n566","n567","n568","n569","n566"],tags:{building:"yes"}},w123:{id:"w123",nodes:["n570","n571","n572","n573","n570"],tags:{building:"yes"}},w124:{id:"w124",nodes:["n574","n575","n576","n577","n574"],tags:{building:"yes"}},w125:{id:"w125",nodes:["n578","n579","n580","n581","n578"],tags:{building:"yes"}},w126:{id:"w126",nodes:["n582","n583","n584","n585","n582"],tags:{building:"yes"}},w127:{id:"w127",nodes:["n586","n587","n588","n589","n590","n591","n592","n593","n586"],tags:{building:"yes"}},w128:{id:"w128",nodes:["n594","n595","n596","n597","n598","n599","n600","n601","n594"],tags:{building:"yes"}},w129:{id:"w129",nodes:["n309","n602","n603"],tags:{crossing:"marked",footway:"crossing",highway:"footway"}},w13:{id:"w13",nodes:["n64","n65","n66","n67","n68","n69","n64"],tags:{amenity:"parking"}},w130:{id:"w130",nodes:["n603","n604"],tags:{footway:"sidewalk",highway:"footway"}},w131:{id:"w131",nodes:["n604","n605","n606"],tags:{footway:"sidewalk",highway:"footway"}},w132:{id:"w132",nodes:["n606","n607"],tags:{footway:"sidewalk",highway:"footway"}},w133:{id:"w133",nodes:["n607","n610","n608","n603"],tags:{footway:"sidewalk",highway:"footway"}},w134:{id:"w134",nodes:["n609","n610","n611"],tags:{highway:"service",service:"driveway",surface:"unpaved"}},w135:{id:"w135",nodes:["n244","n245","n246"],tags:{highway:"service"}},w136:{id:"w136",nodes:["n612","n613","n614","n615","n612"],tags:{amenity:"shelter",building:"yes"}},w137:{id:"w137",nodes:["n2779","n2788","n2776","n2778","n2775","n2787","n2440","n2437","n629","n2438","n630","n2439","n2407","n2408","n2409"],tags:{highway:"residential",name:"Foster Street"}},w138:{id:"w138",nodes:["n2779","n625","n626","n627"],tags:{highway:"residential",name:"Foster Street",oneway:"yes"}},w139:{id:"w139",nodes:["n630","n631","n632","n2437"],tags:{highway:"service"}},w14:{id:"w14",nodes:["n71","n72","n73","n74","n71"],tags:{building:"yes"}},w140:{id:"w140",nodes:["n643","n637","n715","n2410"],tags:{highway:"footway",name:"Mural Mall"}},w141:{id:"w141",nodes:["n639","n2516"],tags:{barrier:"wall"}},w142:{id:"w142",nodes:["n640","n641","n645","n642","n660","n643","n644"],tags:{highway:"service"}},w143:{id:"w143",nodes:["n646","n647"],tags:{highway:"service"}},w144:{id:"w144",nodes:["n654","n655","n656"],tags:{barrier:"wall"}},w145:{id:"w145",nodes:["n665","n666","n667"],tags:{barrier:"wall"}},w146:{id:"w146",nodes:["n2727","n662","n2719"],tags:{highway:"service",oneway:"yes",service:"parking_aisle"}},w147:{id:"w147",nodes:["n2725","n674"],tags:{highway:"service",oneway:"yes"}},w148:{id:"w148",nodes:["n2464","n2460","n2454","n684","n2455","n2464"],tags:{building:"yes"}},w149:{id:"w149",nodes:["n2456","n685","n686","n687","n2456"],tags:{building:"yes"}},w15:{id:"w15",nodes:["n75","n76","n77","n78","n75"],tags:{building:"yes"}},w150:{id:"w150",nodes:["n685","n688","n689","n690","n691","n692","n686","n685"],tags:{building:"yes"}},w151:{id:"w151",nodes:["n688","n693","n694","n689","n688"],tags:{building:"yes"}},w152:{id:"w152",nodes:["n693","n695","n702","n696","n697","n694","n693"],tags:{building:"yes"}},w153:{id:"w153",nodes:["n695","n698","n699","n700","n701","n702","n695"],tags:{building:"yes"}},w154:{id:"w154",nodes:["n698","n703","n707","n704","n699","n698"],tags:{building:"yes"}},w155:{id:"w155",nodes:["n703","n705","n706","n707","n703"],tags:{building:"yes"}},w156:{id:"w156",nodes:["n705","n708","n709","n706","n705"],tags:{building:"yes"}},w157:{id:"w157",nodes:["n709","n710","n711","n708","n709"],tags:{building:"yes"}},w158:{id:"w158",nodes:["n369","n712","n725","n713","n714","n715","n727","n716","n717","n718","n719"],tags:{footway:"sidewalk",highway:"footway"}},w159:{id:"w159",nodes:["n714","n720","n721"],tags:{crossing:"marked",footway:"crossing",highway:"footway"}},w16:{id:"w16",nodes:["n79","n80","n81","n82","n83","n84","n85","n86","n79"],tags:{building:"yes"}},w160:{id:"w160",nodes:["n729","n721","n722","n964","n723","n724"],tags:{footway:"sidewalk",highway:"footway"}},w161:{id:"w161",nodes:["n713","n726","n722"],tags:{crossing:"marked",footway:"crossing",highway:"footway"}},w162:{id:"w162",nodes:["n727","n2411","n728"],tags:{crossing:"marked",footway:"crossing",highway:"footway"}},w163:{id:"w163",nodes:["n729","n730","n731"],tags:{crossing:"marked",footway:"crossing",highway:"footway"}},w164:{id:"w164",nodes:["n365","n732","n733","n738"],tags:{footway:"sidewalk",highway:"footway"}},w165:{id:"w165",nodes:["n724","n734","n367","n735","n736","n737"],tags:{footway:"sidewalk",highway:"footway"}},w166:{id:"w166",nodes:["n739","n2037","n2038","n2039","n2040","n1623","n2032"],tags:{highway:"footway"}},w167:{id:"w167",nodes:["n150","n751"],tags:{highway:"service"}},w168:{id:"w168",nodes:["n752","n753","n754","n755","n752"],tags:{building:"yes"}},w169:{id:"w169",nodes:["n756","n757","n758","n759","n756"],tags:{building:"yes"}},w17:{id:"w17",nodes:["n87","n88","n89","n90","n87"],tags:{building:"yes"}},w170:{id:"w170",nodes:["n760","n761","n762","n763","n764","n765","n760"],tags:{building:"yes"}},w171:{id:"w171",nodes:["n766","n767","n768","n769","n770","n771","n772","n773","n774","n775","n776","n777","n766"],tags:{building:"yes"}},w172:{id:"w172",nodes:["n778","n779","n780","n781","n782","n783","n784","n785","n778"],tags:{building:"yes"}},w173:{id:"w173",nodes:["n786","n787","n788","n789","n786"],tags:{building:"yes"}},w174:{id:"w174",nodes:["n790","n791","n792","n793","n794","n795","n796","n797","n798","n799","n800","n801","n790"],tags:{building:"yes"}},w175:{id:"w175",nodes:["n802","n803","n804","n805","n802"],tags:{building:"yes"}},w176:{id:"w176",nodes:["n806","n807","n808","n809","n810","n811","n812","n813","n814","n815","n806"],tags:{building:"yes"}},w177:{id:"w177",nodes:["n816","n1140","n817","n818","n819","n820","n821"],tags:{highway:"service"}},w178:{id:"w178",nodes:["n822","n823","n824","n825","n822"],tags:{building:"yes"}},w179:{id:"w179",nodes:["n841","n842","n843","n844","n841"],tags:{building:"yes"}},w18:{id:"w18",nodes:["n91","n92","n93","n94","n91"],tags:{building:"yes"}},w180:{id:"w180",nodes:["n845","n856","n846"],tags:{highway:"service"}},w181:{id:"w181",nodes:["n846","n847","n848","n849","n850","n851","n852","n853","n854","n855","n856"],tags:{highway:"service",oneway:"yes",service:"drive-through"}},w182:{id:"w182",nodes:["n857","n858"],tags:{highway:"service"}},w183:{id:"w183",nodes:["n859","n860","n861","n862","n859"],tags:{amenity:"parking"}},w184:{id:"w184",nodes:["n863","n864","n867","n866","n865"],tags:{highway:"service"}},w185:{id:"w185",nodes:["n883","n884"],tags:{barrier:"fence"}},w186:{id:"w186",nodes:["n1954","n622","n1955"],tags:{highway:"path",name:"Riverwalk Trail"}},w187:{id:"w187",nodes:["n621","n1954"],tags:{highway:"steps",incline:"up",name:"Riverwalk Trail",surface:"wood"}},w188:{id:"w188",nodes:["n2274","n2275","n2276","n2277","n2278","n2279","n1953","n621"],tags:{highway:"path",name:"Riverwalk Trail",surface:"wood"}},w189:{id:"w189",nodes:["n2273","n2274"],tags:{highway:"steps",incline:"down",name:"Riverwalk Trail",surface:"wood"}},w19:{id:"w19",nodes:["n95","n96","n97","n98","n99","n100","n101","n102","n95"],tags:{building:"yes"}},w190:{id:"w190",nodes:["n821","n894","n900","n903","n901"],tags:{highway:"service"}},w191:{id:"w191",nodes:["n896","n897","n898","n899","n900","n894","n896"],tags:{amenity:"parking"}},w192:{id:"w192",nodes:["n903","n904","n905"],tags:{highway:"service"}},w193:{id:"w193",nodes:["n901","n906","n902"],tags:{highway:"service"}},w194:{id:"w194",nodes:["n912","n913"],tags:{highway:"footway"}},w195:{id:"w195",nodes:["n914","n915"],tags:{highway:"footway"}},w196:{id:"w196",nodes:["n2466","n918","n919","n920","n2466"],tags:{building:"yes"}},w197:{id:"w197",nodes:["n918","n921","n922","n919","n918"],tags:{building:"yes"}},w198:{id:"w198",nodes:["n923","n925","n926","n924","n923"],tags:{building:"yes"}},w199:{id:"w199",nodes:["n925","n927","n932","n928","n929","n926","n925"],tags:{building:"yes"}},w2:{id:"w2",nodes:["n3523","n2182","n2160"],tags:{highway:"service"}},w20:{id:"w20",nodes:["n103","n104","n105","n106","n107","n108","n109","n110","n111","n112","n113","n114","n103"],tags:{building:"yes"}},w200:{id:"w200",nodes:["n927","n930","n931","n932","n927"],tags:{building:"yes"}},w201:{id:"w201",nodes:["n930","n933","n934","n935","n931","n930"],tags:{building:"yes"}},w202:{id:"w202",nodes:["n933","n936","n937","n934","n933"],tags:{building:"yes"}},w203:{id:"w203",nodes:["n936","n938","n942","n939","n954","n937","n936"],tags:{building:"yes"}},w204:{id:"w204",nodes:["n938","n940","n941","n942","n938"],tags:{building:"yes"}},w205:{id:"w205",nodes:["n940","n943","n944","n941","n940"],tags:{building:"yes"}},w206:{id:"w206",nodes:["n943","n945","n946","n947","n948","n944","n943"],tags:{building:"yes"}},w207:{id:"w207",nodes:["n944","n949","n950","n951","n941","n944"],tags:{building:"yes"}},w208:{id:"w208",nodes:["n941","n951","n952","n939","n942","n941"],tags:{building:"yes"}},w209:{id:"w209",nodes:["n952","n953","n954","n939","n952"],tags:{building:"yes"}},w21:{id:"w21",nodes:["n115","n116","n117","n118","n115"],tags:{building:"yes"}},w210:{id:"w210",nodes:["n953","n955","n956","n934","n937","n954","n953"],tags:{building:"yes"}},w211:{id:"w211",nodes:["n964","n965"],tags:{highway:"footway"}},w212:{id:"w212",nodes:["n966","n983","n967","n989"],tags:{highway:"footway"}},w213:{id:"w213",nodes:["n965","n968","n969","n966","n970","n971","n965"],tags:{highway:"footway"}},w214:{id:"w214",nodes:["n973","n999","n992","n974","n975","n976","n993","n977","n978","n979","n980","n967","n981","n1000","n1001","n1002","n1003","n1004","n1005","n1006","n1007","n1008","n1009"],tags:{footway:"sidewalk",highway:"footway"}},w215:{id:"w215",nodes:["n978","n982","n983","n984","n985","n986","n987","n988","n981"],tags:{highway:"footway"}},w216:{id:"w216",nodes:["n976","n990","n991","n992"],tags:{highway:"footway"}},w217:{id:"w217",nodes:["n998","n999"],tags:{highway:"footway"}},w218:{id:"w218",nodes:["n1019","n1020","n1021","n1022","n731","n728","n1023","n1025","n1024","n1019"],tags:{footway:"sidewalk",highway:"footway"}},w219:{id:"w219",nodes:["n719","n1026","n1027"],tags:{crossing:"marked",footway:"crossing",highway:"footway"}},w22:{id:"w22",nodes:["n119","n120","n121","n122","n119"],tags:{building:"yes"}},w220:{id:"w220",nodes:["n1027","n1028","n1019"],tags:{crossing:"marked",footway:"crossing",highway:"footway"}},w221:{id:"w221",nodes:["n2080","n1828","n1863","n1829"],tags:{highway:"tertiary",name:"Constantine Street"}},w222:{id:"w222",nodes:["n1029","n1030","n1031"],tags:{highway:"service"}},w223:{id:"w223",nodes:["n2213","n2171","n2183","n2180","n2205","n2177","n2179","n2218","n2200","n2188","n2169","n2196","n2162","n2170","n2211","n2216","n2204","n2220","n2164","n2210","n2217","n2189","n460","n453","n2282"],tags:{name:"Rocky River",waterway:"river"}},w224:{id:"w224",nodes:["n3750","n3751","n3752"],tags:{highway:"service",service:"alley",surface:"unpaved"}},w225:{id:"w225",nodes:["n2134","n2127","n2313","n2109","n2112","n2129","n2156","n2146","n2126","n2153","n2288","n2283","n2284","n2131","n2286","n2287","n2285","n2132","n2140","n2289","n2122","n2114","n2149","n2119","n2106","n2111","n2145","n2113","n2117","n2159","n2143","n2123","n2142","n2116","n2154","n2139","n2150","n2157","n2120","n2138","n2130","n2136","n2155","n2107","n2141","n2124","n3754","n2121","n2105","n2108","n3755","n2128","n2110","n2152","n2125","n2135","n2186","n2115","n2144","n2137","n2133","n2148","n2118","n1871","n1875","n1872","n2041","n1873","n2042","n1874","n1884","n1870","n2151","n2147","n2158","n2104","n2134"]},w226:{id:"w226",nodes:["n2243","n2280","n2244","n2245","n2246","n2247","n1931","n1932","n1933","n1934","n1935","n1936","n1937","n1938","n4681","n1939","n1940","n1941","n1942","n1943","n1944","n1945","n1946","n1947"],tags:{highway:"path",name:"Riverwalk Trail",surface:"asphalt",width:"3"}},w227:{id:"w227",nodes:["n2994","n3012","n3011","n2958"],tags:{highway:"secondary",name:"Main Street"}},w228:{id:"w228",nodes:["n2747","n2762","n2757","n2746","n2761","n2758","n2760","n2755","n2749","n2691","n1028","n2432","n2414","n2413","n2412","n2411","n2410","n720","n726","n370","n368","n2748"],tags:{highway:"primary",name:"Main Street"}},w229:{id:"w229",nodes:["n2083","n2103","n2102","n2084","n2085","n2086","n2087","n2242","n471","n324","n2101","n332","n1868"],tags:{name:"Conrail Railroad",railway:"rail"}},w23:{id:"w23",nodes:["n123","n124","n125","n126","n123"],tags:{building:"yes"}},w230:{id:"w230",nodes:["n2232","n2236","n2231","n2230","n2226","n2241","n2237","n2227","n1182","n2233","n2228","n2229","n1183","n2234","n19","n1891","n20","n2223","n2224","n2238","n2235","n2240","n2225","n2239"],tags:{name:"Saint Joseph River",waterway:"river"}},w231:{id:"w231",nodes:["n456","n1036","n1037","n1038"],tags:{barrier:"wall"}},w232:{id:"w232",nodes:["n1034","n1039","n1040"],tags:{barrier:"wall"}},w233:{id:"w233",nodes:["n1041","n1042","n1043","n1044","n1045","n1046","n1041"],tags:{access:"private",leisure:"swimming_pool"}},w234:{id:"w234",nodes:["n1047","n1048"],tags:{barrier:"hedge"}},w235:{id:"w235",nodes:["n1049","n1050","n1051","n1052","n1049"],tags:{building:"yes"}},w236:{id:"w236",nodes:["n1053","n1054","n1055","n1056","n1057","n1058","n1059","n1060","n1053"],tags:{building:"yes"}},w237:{id:"w237",nodes:["n1061","n1062","n1063","n1064","n1065","n1061"],tags:{building:"yes"}},w238:{id:"w238",nodes:["n1066","n1067","n1068","n1069","n1070","n1071","n1066"],tags:{building:"yes"}},w239:{id:"w239",nodes:["n1072","n1073","n1074","n1075","n1072"],tags:{building:"yes"}},w24:{id:"w24",nodes:["n127","n128","n129","n130","n127"],tags:{building:"yes"}},w240:{id:"w240",nodes:["n1076","n1077","n1078","n1079","n1080","n1081","n1076"],tags:{building:"yes"}},w241:{id:"w241",nodes:["n1082","n1083","n1084","n1085","n1082"],tags:{building:"yes"}},w242:{id:"w242",nodes:["n1086","n1087","n1088","n1089","n1086"],tags:{building:"yes"}},w243:{id:"w243",nodes:["n1090","n1091","n1092","n1093","n1094","n1095","n1096","n1097","n1090"],tags:{building:"yes"}},w244:{id:"w244",nodes:["n1098","n1099","n1100","n1101"],tags:{barrier:"fence"}},w245:{id:"w245",nodes:["n1102","n835","n30","n2590","n35","n29","n2591","n34","n28","n2592","n2312","n32","n2593","n31","n33","n2594","n2595","n1102"],tags:{highway:"service"}},w246:{id:"w246",nodes:["n1103","n1139","n1104"],tags:{barrier:"fence"}},w247:{id:"w247",nodes:["n1105","n1106","n1107","n1108","n1109","n1110","n1111","n1112","n1113","n1114","n1105"],tags:{building:"yes"}},w248:{id:"w248",nodes:["n1115","n1116","n1117","n1118","n1119","n1120","n1115"],tags:{building:"yes"}},w249:{id:"w249",nodes:["n1121","n1122","n1123","n1124","n1121"],tags:{building:"yes"}},w25:{id:"w25",nodes:["n131","n132","n133","n134","n135","n136","n137","n138","n139","n140","n141","n142","n131"],tags:{building:"yes"}},w250:{id:"w250",nodes:["n1125","n1126","n1127","n1128","n1129","n1130","n1131","n1132","n1133","n1134","n1135","n1136","n1125"],tags:{building:"yes"}},w251:{id:"w251",nodes:["n1137","n1138","n1139"],tags:{barrier:"fence"}},w252:{id:"w252",nodes:["n876","n1140","n1141"],tags:{footway:"sidewalk",highway:"footway"}},w253:{id:"w253",nodes:["n1141","n1142","n1143","n1144","n1145","n1146"],tags:{footway:"sidewalk",highway:"footway"}},w254:{id:"w254",nodes:["n1146","n4743","n1147","n1148"],tags:{footway:"sidewalk",highway:"footway"}},w255:{id:"w255",nodes:["n1148","n1149","n1150","n1151"],tags:{bridge:"yes",footway:"sidewalk",highway:"footway",layer:"1"}},w256:{id:"w256",nodes:["n1151","n1153","n1154","n1155"],tags:{footway:"sidewalk",highway:"footway"}},w257:{id:"w257",nodes:["n1155","n1156"],tags:{bridge:"yes",footway:"sidewalk",highway:"footway",layer:"1"}},w258:{id:"w258",nodes:["n1157","n1158"],tags:{barrier:"retaining_wall"}},w259:{id:"w259",nodes:["n1156","n1161","n1159","n1160","n719"],tags:{footway:"sidewalk",highway:"footway"}},w26:{id:"w26",nodes:["n143","n608","n144"],tags:{highway:"service"}},w260:{id:"w260",nodes:["n1162","n1163","n1164","n1165","n1166","n1167","n1168","n1169","n1170","n2528"],tags:{highway:"footway"}},w261:{id:"w261",nodes:["n1171","n1172","n1173"],tags:{barrier:"wall"}},w262:{id:"w262",nodes:["n1175","n1176","n1177","n1178","n1179","n1180","n1181","n1175"],tags:{natural:"wood"}},w263:{id:"w263",nodes:["n1947","n1184","n1948","n1185","n1949","n1957","n1950","n480","n1951","n479","n478","n477","n1952","n1851","n1956","n2248","n619","n618","n2249","n2250","n2251","n617","n2252","n616","n2253","n829","n2254","n827","n828","n2255","n830","n2256","n826","n2257","n831","n2258","n832","n835","n834","n2312","n2267","n2259","n833","n2268","n2260","n836","n2261","n837","n2262","n838","n2263","n2264","n839","n2265","n840","n2266"],tags:{highway:"path",name:"Riverwalk Trail",surface:"asphalt",width:"3"}},w264:{id:"w264",nodes:["n1186","n1187","n1188","n1189","n1186"],tags:{building:"yes"}},w265:{id:"w265",nodes:["n1190","n1191","n1192","n1193","n1190"],tags:{building:"yes"}},w266:{id:"w266",nodes:["n1194","n1195","n1196","n1197","n1198","n1199","n1200","n1201","n1194"],tags:{building:"yes"}},w267:{id:"w267",nodes:["n1205","n1206","n1207","n1208","n1209","n1210","n1205"],tags:{building:"house"}},w268:{id:"w268",nodes:["n1211","n1212","n1213","n1214","n1215","n1216","n1217","n1218","n1219","n1220","n1211"],tags:{building:"house"}},w269:{id:"w269",nodes:["n1221","n1225","n1222","n1223","n1224","n1221"],tags:{building:"house"}},w27:{id:"w27",nodes:["n145","n147","n146"],tags:{highway:"footway"}},w270:{id:"w270",nodes:["n1225","n1226","n1227","n1229","n1228"],tags:{barrier:"fence"}},w271:{id:"w271",nodes:["n1229","n1230"],tags:{barrier:"fence"}},w272:{id:"w272",nodes:["n1231","n1232","n1233","n1234","n1235","n1236","n1237","n1238","n1231"],tags:{building:"house"}},w273:{id:"w273",nodes:["n1239","n1240","n1241","n1242","n1243","n1244","n1245","n1246","n1239"],tags:{building:"house"}},w274:{id:"w274",nodes:["n1247","n1248","n1249","n1250","n1247"],tags:{building:"house"}},w275:{id:"w275",nodes:["n1251","n1252","n1253","n1254","n1255","n1256","n1251"],tags:{building:"house"}},w276:{id:"w276",nodes:["n1257","n1258","n1259","n1260","n1257"],tags:{building:"shed"}},w277:{id:"w277",nodes:["n1261","n1262","n1263","n1264","n1265","n1266","n1267","n1268","n1261"],tags:{building:"house"}},w278:{id:"w278",nodes:["n1269","n1270","n1271","n1272","n1273","n1274","n1284","n1269"],tags:{building:"house"}},w279:{id:"w279",nodes:["n1275","n1276","n1277","n1278","n1279","n1280","n1275"],tags:{building:"house"}},w28:{id:"w28",nodes:["n147","n148"],tags:{highway:"footway"}},w280:{id:"w280",nodes:["n1281","n1282","n1283","n1284"],tags:{barrier:"fence"}},w281:{id:"w281",nodes:["n1285","n1286","n1287","n1288","n1285"],tags:{building:"house"}},w282:{id:"w282",nodes:["n1289","n1290","n1291","n1292","n1293","n1294","n1295","n1296","n1289"],tags:{building:"house"}},w283:{id:"w283",nodes:["n1297","n1298","n1299","n1300","n1301","n1302","n1297"],tags:{access:"private",leisure:"swimming_pool"}},w284:{id:"w284",nodes:["n1303","n1304","n1305","n1306","n1307","n1308","n1309","n1310","n1311","n1312","n1303"],tags:{building:"house"}},w285:{id:"w285",nodes:["n1313","n1314","n1315","n1316","n1313"],tags:{building:"house"}},w286:{id:"w286",nodes:["n1317","n1318","n1319","n1320","n1321","n1322","n1323","n1324","n1325","n1326","n1327","n1328","n1329","n1330","n1317"],tags:{building:"house"}},w287:{id:"w287",nodes:["n1331","n1332","n1333","n1334","n1465","n1335","n1336","n1331"],tags:{building:"yes"}},w288:{id:"w288",nodes:["n1349","n1350","n1351","n1352","n1353","n1354","n1355","n1337","n1338","n1341","n1342","n1343","n1344","n1345","n1346","n1347","n1348","n1339","n1340","n1349"],tags:{access:"private",leisure:"swimming_pool"}},w289:{id:"w289",nodes:["n1356","n1331"],tags:{barrier:"fence"}},w29:{id:"w29",nodes:["n149","n874","n150","n151","n897","n898","n875","n152"],tags:{highway:"service",oneway:"yes"}},w290:{id:"w290",nodes:["n1357","n1358","n1359","n1360","n1357"],tags:{building:"shed"}},w291:{id:"w291",nodes:["n1358","n1361","n1362"],tags:{barrier:"fence"}},w292:{id:"w292",nodes:["n1363","n1364","n1365","n1366","n1367","n1368","n1363"],tags:{building:"house"}},w293:{id:"w293",nodes:["n1369","n1370","n1371","n1372","n1373","n1374","n1369"],tags:{leisure:"swimming_pool"}},w294:{id:"w294",nodes:["n1367","n1375","n1376","n1377"],tags:{barrier:"fence"}},w295:{id:"w295",nodes:["n1378","n1379","n1380","n1381","n1378"],tags:{building:"house"}},w296:{id:"w296",nodes:["n1382","n1383","n1384","n1385","n1386","n1387","n1382"],tags:{building:"house"}},w297:{id:"w297",nodes:["n1388","n1389","n1390","n1391","n1392","n1393","n1388"],tags:{building:"house"}},w298:{id:"w298",nodes:["n1394","n1395","n1396","n1397","n1394"],tags:{building:"house"}},w299:{id:"w299",nodes:["n1398","n1399","n1400","n1401","n1398"],tags:{access:"private3",leisure:"swimming_pool"}},w3:{id:"w3",nodes:["n1","n2"],tags:{highway:"track",name:"Water Street"}},w30:{id:"w30",nodes:["n153","n154","n155","n156","n153"],tags:{amenity:"parking"}},w300:{id:"w300",nodes:["n1402","n1403","n1404","n1405","n1406","n1407","n1408","n1409","n1410","n1411","n1412","n1413","n1402"],tags:{building:"house"}},w301:{id:"w301",nodes:["n1414","n1415","n1416","n1417","n1414"],tags:{building:"garage"}},w302:{id:"w302",nodes:["n1406","n1418","n1419","n1403"],tags:{barrier:"fence"}},w303:{id:"w303",nodes:["n1423","n1424","n1425","n1426","n1427","n1428","n1429","n1430","n1431","n1432","n1423"],tags:{building:"house"}},w304:{id:"w304",nodes:["n1433","n1434","n1435","n1446","n1436","n1437","n1438","n1439","n1444","n1440","n1441","n1445","n1442","n1443","n1433"],tags:{access:"private",leisure:"swimming_pool"}},w305:{id:"w305",nodes:["n1447","n1448","n1452","n1453","n1454","n1451","n1449","n1450","n1447"],tags:{building:"house"}},w306:{id:"w306",nodes:["n1455","n1456","n1457","n1458","n1455"],tags:{building:"shed"}},w307:{id:"w307",nodes:["n1459","n1460","n1461","n1462","n1459"],tags:{building:"shed"}},w308:{id:"w308",nodes:["n1463","n1464"],tags:{barrier:"fence"}},w309:{id:"w309",nodes:["n1465","n1466","n1467","n1468"],tags:{barrier:"fence"}},w31:{id:"w31",nodes:["n157","n605","n158"],tags:{highway:"service"}},w310:{id:"w310",nodes:["n1469","n1481","n1463"],tags:{barrier:"hedge"}},w311:{id:"w311",nodes:["n1470","n1471","n1472","n1473","n1474","n1475","n1480","n1476","n1477","n1478","n1479","n1470"],tags:{building:"house"}},w312:{id:"w312",nodes:["n1480","n1481"],tags:{barrier:"wall"}},w313:{id:"w313",nodes:["n1482","n1483","n1484","n1485","n1486","n1487","n1488","n1489","n1490","n1491","n1482"],tags:{access:"private",leisure:"swimming_pool"}},w314:{id:"w314",nodes:["n1492","n1493","n1494","n1495","n1496","n1497","n1498","n1499","n1500","n1501","n1502","n1503","n1504","n1505","n1492"],tags:{building:"house"}},w315:{id:"w315",nodes:["n1506","n1507","n1508","n1509","n1510","n1511","n1512","n1513","n1514","n1515","n1506"],tags:{building:"house"}},w316:{id:"w316",nodes:["n1516","n1517","n1518","n1519","n1520","n1521","n1522","n1523","n1516"],tags:{building:"house"}},w317:{id:"w317",nodes:["n1524","n1525","n1526","n1527","n1528","n1529","n1530","n1531","n1524"],tags:{building:"house"}},w318:{id:"w318",nodes:["n1532","n1533"],tags:{barrier:"fence"}},w319:{id:"w319",nodes:["n1534","n1532","n1535"],tags:{barrier:"fence"}},w32:{id:"w32",nodes:["n159","n160","n161","n162","n159"],tags:{amenity:"parking"}},w320:{id:"w320",nodes:["n1536","n1537","n1538","n1539","n1536"],tags:{building:"shed"}},w321:{id:"w321",nodes:["n1540","n1541","n1542","n1543","n1540"],tags:{building:"shed"}},w322:{id:"w322",nodes:["n1544","n1545","n1546","n1547","n1544"],tags:{building:"shed"}},w323:{id:"w323",nodes:["n1548","n1549","n1550","n1551","n1548"],tags:{building:"house"}},w324:{id:"w324",nodes:["n1552","n1553","n1554","n1555","n1556","n1557","n1558","n1559","n1552"],tags:{building:"house"}},w325:{id:"w325",nodes:["n1560","n1561","n1562","n1563","n1564","n1565","n1566","n1567","n1560"],tags:{building:"house"}},w326:{id:"w326",nodes:["n1561","n1568","n1569","n1570"],tags:{barrier:"wall"}},w327:{id:"w327",nodes:["n1571","n1572"],tags:{barrier:"fence"}},w328:{id:"w328",nodes:["n1573","n1574","n1575","n1576","n1573"],tags:{building:"house"}},w329:{id:"w329",nodes:["n1577","n1578","n1579","n1580","n1581","n1582","n1583","n1584","n1585","n1586","n1577"],tags:{building:"house"}},w33:{id:"w33",nodes:["n157","n163"],tags:{highway:"service"}},w330:{id:"w330",nodes:["n1587","n1588","n1589","n1590","n1591","n1592","n1593","n1594","n1587"],tags:{building:"house"}},w331:{id:"w331",nodes:["n1595","n1596","n1597","n1598","n1599","n1600","n1601","n1595"],tags:{access:"private",leisure:"swimming_pool"}},w332:{id:"w332",nodes:["n1602","n1603","n1604","n1605","n1606","n1607","n1608","n1609","n1611","n1610","n1612","n1613","n1602"],tags:{building:"house"}},w333:{id:"w333",nodes:["n2018","n1626","n1627","n2017","n2018"],tags:{amenity:"shelter",building:"yes",shelter_type:"picnic_shelter"}},w334:{id:"w334",nodes:["n2","n3","n2764"],tags:{highway:"service",name:"Water Street"}},w335:{id:"w335",nodes:["n3","n1628","n1614"],tags:{highway:"service"}},w336:{id:"w336",nodes:["n3198","n4545","n2747"],tags:{highway:"residential",name:"Morris Avenue"}},w337:{id:"w337",nodes:["n1629","n3504"],tags:{highway:"service",service:"alley",surface:"unpaved"}},w338:{id:"w338",nodes:["n1813","n1635","n1814","n1634","n1815","n1632","n1816","n1817"],tags:{highway:"service",service:"parking_aisle"}},w339:{id:"w339",nodes:["n1827","n4684","n4690","n1842","n4686","n4685","n1826","n1828","n1846","n1645","n1637","n4703","n1641"],tags:{highway:"residential",name:"Millard Street"}},w34:{id:"w34",nodes:["n164","n165","n166","n171","n866","n172","n167","n168","n169","n910","n170","n164"],tags:{amenity:"parking"}},w340:{id:"w340",nodes:["n1824","n1825"],tags:{highway:"service",service:"parking_aisle"}},w341:{id:"w341",nodes:["n1701","n1702","n1703","n1704","n1705","n1706","n1701"],tags:{building:"yes"}},w342:{id:"w342",nodes:["n1855","n1860","n1856","n1775","n1804","n1776","n1855"],tags:{amenity:"parking",fee:"no"}},w343:{id:"w343",nodes:["n1757","n1758","n1759","n1760","n1757"],tags:{building:"yes"}},w344:{id:"w344",nodes:["n1659","n1660","n1661","n1662","n1663","n1664","n1665","n1666","n1659"],tags:{building:"school"}},w345:{id:"w345",nodes:["n1751","n1752","n1753","n1754","n1755","n1756","n1751"],tags:{building:"yes"}},w346:{id:"w346",nodes:["n1641","n1676","n1673","n1639","n1810","n1642","n1849","n4759","n1845"],tags:{highway:"residential",name:"Douglas Avenue"}},w347:{id:"w347",nodes:["n1642","n1643","n1031","n1630","n845","n1631","n816","n1831","n902","n905","n152","n149","n1832","n1850","n878","n1833","n1852","n42","n1834","n61","n60","n1851","n1835"],tags:{highway:"primary",name:"Michigan Avenue"}},w348:{id:"w348",nodes:["n1650","n1651","n1652","n1653","n1654","n1655","n1656","n1657","n1658","n1650"],tags:{leisure:"playground"}},w349:{id:"w349",nodes:["n1861","n1818","n1819","n1820","n1821","n1825","n1823","n1639"],tags:{highway:"service"}},w35:{id:"w35",nodes:["n168","n167","n172"],tags:{barrier:"fence",fence_type:"chain_link"}},w350:{id:"w350",nodes:["n1783","n1819","n1784","n1857","n1861","n1858","n1783"],tags:{amenity:"parking"}},w351:{id:"w351",nodes:["n1717","n1718","n1719","n1720","n1717"],tags:{building:"yes"}},w352:{id:"w352",nodes:["n1743","n1744","n1745","n1746","n1747","n1748","n1749","n1750","n1743"],tags:{building:"yes"}},w353:{id:"w353",nodes:["n1637","n1636","n1029","n4715","n1630"],tags:{highway:"residential",name:"Lincoln Avenue"}},w354:{id:"w354",nodes:["n1713","n1714","n1715","n1716","n1713"],tags:{building:"yes"}},w355:{id:"w355",nodes:["n1689","n1690","n1691","n1692","n1693","n1694","n1695","n1696","n1689"],tags:{building:"yes"}},w356:{id:"w356",nodes:["n1631","n4717","n1840","n4745","n1841"],tags:{highway:"residential",name:"Hook Avenue"}},w357:{id:"w357",nodes:["n1737","n1738","n1739","n1740","n1741","n1742","n1737"],tags:{building:"yes"}},w358:{id:"w358",nodes:["n1707","n1708","n1709","n1710","n1711","n1712","n1707"],tags:{building:"yes"}},w359:{id:"w359",nodes:["n1829","n4695","n4697","n1843","n4698","n4701","n1638","n4702","n4705","n1636","n4706","n4707","n1633"],tags:{highway:"residential",name:"South Street"}},w36:{id:"w36",nodes:["n910","n171","n866","n172"],tags:{barrier:"fence",fence_type:"chain_link"}},w360:{id:"w360",nodes:["n1767","n1768","n1769","n1770","n1771","n1772","n1773","n1774","n1767"],tags:{building:"yes"}},w361:{id:"w361",nodes:["n1859","n1860","n1804","n1640","n1805","n1817","n1806","n1644","n1811","n1807","n1808","n3419","n1812","n1790","n3418","n3744","n1809","n1813","n1810"],tags:{highway:"service"}},w362:{id:"w362",nodes:["n1639","n1683","n4710","n1633"],tags:{highway:"residential",name:"South Street",oneway:"yes"}},w363:{id:"w363",nodes:["n1646","n1647","n1648","n1649","n1646"],tags:{leisure:"pitch",pitch:"basketball"}},w364:{id:"w364",nodes:["n3820","n3821","n3822","n3823","n3824","n3825","n3826","n3827","n3828","n3829","n3830","n3838","n3839","n3820"],tags:{amenity:"school",name:"Three Rivers Middle School"}},w365:{id:"w365",nodes:["n1721","n1722","n1723","n1724","n1725","n1726","n1727","n1728","n1729","n1730","n1731","n1732","n1733","n1734","n1735","n1736","n1721"],tags:{building:"yes"}},w366:{id:"w366",nodes:["n1791","n1792","n1793","n1794","n1795","n1796","n1798","n1799","n1800","n1801","n1802","n1803","n1791"],tags:{amenity:"parking"}},w367:{id:"w367",nodes:["n1633","n4708","n4711","n1643","n4712","n1838","n4752","n1839"],tags:{highway:"residential",name:"Grant Avenue"}},w368:{id:"w368",nodes:["n1853","n1687","n1688","n1854","n1853"],tags:{amenity:"library",building:"yes",name:"Three Rivers Public Library"}},w369:{id:"w369",nodes:["n1777","n1778","n1779","n1780","n1781","n1782","n1777"],tags:{amenity:"parking"}},w37:{id:"w37",nodes:["n173","n174","n175","n176","n177","n178","n179","n180","n173"],tags:{building:"yes"}},w370:{id:"w370",nodes:["n1645","n1638","n858","n4718","n1631"],tags:{highway:"residential",name:"Hook Avenue"}},w371:{id:"w371",nodes:["n3836","n3835","n4624","n3831","n4632","n3834","n3832","n3833","n3830","n3838","n3839","n3837","n3836"],tags:{amenity:"school",name:"Three Rivers High School"}},w372:{id:"w372",nodes:["n1697","n1698","n1699","n1700","n1697"],tags:{building:"yes"}},w373:{id:"w373",nodes:["n2891","n1785","n1786","n3394","n1787","n1788","n1789","n1830","n1836","n1837","n1848","n3409","n2891"],tags:{amenity:"parking"}},w374:{id:"w374",nodes:["n1761","n1762","n1763","n1764","n1765","n1766","n1761"],tags:{building:"yes"}},w375:{id:"w375",nodes:["n1822","n1823"],tags:{highway:"service",service:"parking_aisle"}},w376:{id:"w376",nodes:["n1677","n1678","n1679","n1680","n1681","n1682","n1677"],tags:{amenity:"parking"}},w377:{id:"w377",nodes:["n1676","n1675","n1674","n1673"],tags:{highway:"service",oneway:"yes"}},w378:{id:"w378",nodes:["n1667","n1668","n1669","n1670","n1671","n1672","n1667"],tags:{amenity:"school",name:"Andrews Elementary School"}},w379:{id:"w379",nodes:["n1630","n4714","n1847","n4750","n1844"],tags:{highway:"residential",name:"Lincoln Avenue"}},w38:{id:"w38",nodes:["n181","n182","n183","n185","n184","n181"],tags:{building:"yes"}},w380:{id:"w380",nodes:["n1683","n3745","n1686","n1633"],tags:{highway:"service",oneway:"yes",service:"parking_aisle"}},w381:{id:"w381",nodes:["n2022","n2037"],tags:{highway:"footway"}},w382:{id:"w382",nodes:["n1826","n1863"],tags:{highway:"residential"}},w383:{id:"w383",nodes:["n2011","n2012","n739","n2013","n2014","n2029","n2011"],tags:{amenity:"shelter",building:"yes",shelter_type:"picnic_shelter"}},w384:{id:"w384",nodes:["n2064","n2065","n2066","n2067","n2068","n2069","n2070","n2071","n2072","n2073","n2074","n2075","n2076","n2077","n2078","n2079","n2064"],tags:{building:"yes"}},w385:{id:"w385",nodes:["n1923","n1924","n1925","n1926","n1927","n1928","n1930","n1929","n1923"],tags:{natural:"water"}},w386:{id:"w386",nodes:["n1827","n14","n1886","n15","n1887","n16","n1888","n18","n17","n1889","n12","n13","n1890","n485","n1864","n11","n10","n2058","n2036","n1865","n2020","n9","n8","n1866","n295","n1867"],tags:{highway:"service"}},w387:{id:"w387",nodes:["n1846","n1843","n865","n157","n4721","n1831"],tags:{highway:"residential",name:"Andrews Street"}},w388:{id:"w388",nodes:["n2019","n2020","n2021","n2022","n2023","n2024","n2025","n2026","n2027","n2028","n2029"],tags:{highway:"footway"}},w389:{id:"w389",nodes:["n2217","n2222","n2221","n2219","n1877","n1879","n1882","n1883","n484","n1885","n483","n1880","n1881","n1878","n1884","n2223"],tags:{name:"Rocky River",waterway:"river"}},w39:{id:"w39",nodes:["n185","n186","n187"],tags:{barrier:"fence"}},w390:{id:"w390",nodes:["n2050","n2051","n2052","n2053","n2050"],tags:{amenity:"shelter",building:"yes",shelter_type:"picnic_shelter"}},w391:{id:"w391",nodes:["n2089","n2090","n2091","n2092","n2093","n2094","n2311","n2095","n2096","n2097","n2098","n1174","n2099","n751","n43","n2062","n4725","n873","n1832"],tags:{highway:"residential",name:"Constantine Street"}},w392:{id:"w392",nodes:["n1869","n212","n436","n2281","n2081"],tags:{highway:"primary",name:"Michigan Avenue"}},w393:{id:"w393",nodes:["n1829","n611","n144","n4694","n602","n1832"],tags:{highway:"tertiary",name:"Constantine Street"}},w394:{id:"w394",nodes:["n1997","n1998","n2000","n1999"],tags:{highway:"service",service:"parking_aisle"}},w395:{id:"w395",nodes:["n1835","n1869"],tags:{bridge:"yes",highway:"primary",name:"Michigan Avenue"}},w396:{id:"w396",nodes:["n2000","n2001"],tags:{highway:"service",service:"parking_aisle"}},w397:{id:"w397",nodes:["n2082","n4688","n1842","n308","n498","n509","n246","n241","n1867","n4645","n293","n1834"],tags:{highway:"residential",name:"Spring Street"}},w398:{id:"w398",nodes:["n2015","n2016","n2017","n2018","n2015"],tags:{building:"yes"}},w399:{id:"w399",nodes:["n2062","n45","n2063","n877","n41","n1852"],tags:{highway:"service"}},w4:{id:"w4",nodes:["n7","n38","n378","n379","n7"],tags:{building:"yes"}},w40:{id:"w40",nodes:["n188","n189","n190","n191","n192","n193","n188"],tags:{building:"house"}},w400:{id:"w400",nodes:["n1968","n1969","n1970","n1971","n2007","n1972","n1973","n1978","n1974","n1977","n1976","n1975","n1968"],tags:{amenity:"parking"}},w401:{id:"w401",nodes:["n1963","n1964"],tags:{bridge:"yes",highway:"footway"}},w402:{id:"w402",nodes:["n1892","n1893","n1894","n1895","n1896","n1897","n1898","n1899","n1900","n1901","n1902","n1903","n1892"],tags:{"addr:city":"Three Rivers","addr:housenumber":"112","addr:postcode":"49093","addr:state":"MI","addr:street":"Spring Street",barrier:"fence",name:"Scidmore Park Petting Zoo",tourism:"zoo",zoo:"petting_zoo"}},w403:{id:"w403",nodes:["n1957","n1958","n1959","n481","n1960","n482","n1949"],tags:{highway:"path"}},w404:{id:"w404",nodes:["n2281","n27","n330","n1987","n1988"],tags:{highway:"service"}},w405:{id:"w405",nodes:["n2249","n2269","n2270","n2271","n2272","n454","n455","n2273"],tags:{highway:"path",name:"Riverwalk Trail"}},w406:{id:"w406",nodes:["n1947","n1624","n1625","n2030","n2033","n4658","n4659","n2031","n2032","n2021"],tags:{highway:"footway"}},w407:{id:"w407",nodes:["n2034","n2036","n2009"],tags:{highway:"footway"}},w408:{id:"w408",nodes:["n1964","n1965","n2002","n1966","n21","n1967","n1969"],tags:{highway:"footway"}},w409:{id:"w409",nodes:["n1904","n1905","n1906","n1907","n1908","n1909","n748","n1910","n747","n1911","n749","n1912","n750","n1913","n1922","n1914","n1921","n1915","n746","n1916","n745","n1917","n744","n1918","n743","n742","n1919","n741","n1920","n740","n1904"],tags:{natural:"water"}},w41:{id:"w41",nodes:["n194","n195","n196","n197","n198","n199","n200","n201","n202","n203","n204","n205","n194"],tags:{building:"house"}},w410:{id:"w410",nodes:["n1868","n2088"],tags:{bridge:"yes",name:"Conrail Railroad",railway:"rail"}},w411:{id:"w411",nodes:["n2010","n2019","n2009","n2008","n2058","n2035","n1961","n1962","n1947","n1963"],tags:{highway:"footway"}},w412:{id:"w412",nodes:["n2290","n2043","n2044","n2045","n1872","n2041","n1873","n2042","n1874","n2046","n2047","n2048","n2049","n2290"],tags:{"addr:city":"Three Rivers","addr:housenumber":"112","addr:postcode":"49093","addr:state":"MI","addr:street":"Spring Street",leisure:"park",name:"Scidmore Park"}},w413:{id:"w413",nodes:["n1831","n876","n4720","n821","n2089"],tags:{highway:"residential",name:"Andrews Street"}},w414:{id:"w414",nodes:["n2002","n2003","n2004","n2005","n2006","n2007"],tags:{highway:"footway"}},w415:{id:"w415",nodes:["n1979","n1980","n1981","n1982","n1979"],tags:{amenity:"parking"}},w416:{id:"w416",nodes:["n2054","n2055","n2056","n2057","n2054"],tags:{amenity:"shelter",building:"yes",shelter_type:"picnic_shelter"}},w417:{id:"w417",nodes:["n2291","n2292","n2293","n2294","n2295","n2296","n2297","n2298","n2299","n1098","n2300","n2301","n2302","n2303","n2304","n2059","n2060","n2305","n2307","n2306","n2310","n2308","n2309","n2291"],tags:{leisure:"park",name:"Memory Isle Park"}},w418:{id:"w418",nodes:["n2033","n2034","n2035"],tags:{highway:"footway"}},w419:{id:"w419",nodes:["n1983","n1984","n1985","n1986","n1983"],tags:{amenity:"parking"}},w42:{id:"w42",nodes:["n206","n207","n208","n209","n210","n211","n206"],tags:{building:"house"}},w420:{id:"w420",nodes:["n1840","n4746","n4748","n1847","n4749","n4755","n1838","n4754","n4756","n1849"],tags:{highway:"residential",name:"French Street"}},w421:{id:"w421",nodes:["n2337","n2268"],tags:{highway:"path"}},w422:{id:"w422",nodes:["n2338","n2339","n2320","n2317","n2319","n2318","n2340","n2341","n2342","n2343","n2344","n2345","n2346","n2347","n2348","n2338"],tags:{natural:"water"}},w423:{id:"w423",nodes:["n2180","n2349","n2350","n2351","n2352","n2404","n2353","n2354","n2355","n2356","n2357","n2358","n2359","n2360","n2361","n2362","n2363","n2364","n2365","n2366","n2370","n2371","n2372","n2373","n2374","n2375","n2377","n2378","n2380","n2381","n2382","n2383","n2386","n2389","n2390","n2391","n2392","n2393","n2396","n2397","n2401","n2402","n2321","n2322","n2323","n2403","n2180"],tags:{natural:"wetland"}},w424:{id:"w424",nodes:["n2324","n2316","n1841","n2315","n2314","n1844","n1839","n4758","n1845"],tags:{highway:"residential",name:"Pealer Street"}},w425:{id:"w425",nodes:["n2267","n2337","n2336","n2335","n2334","n2333","n2332","n2331","n2330","n37","n2329","n2328","n2327","n36","n2326","n2325","n2266"],tags:{highway:"path",name:"Riverwalk Trail"}},w426:{id:"w426",nodes:["n2478","n681","n680","n679","n2459","n2467","n2487","n2478"],tags:{building:"yes"}},w427:{id:"w427",nodes:["n2671","n2672","n2673","n2674","n2671"],tags:{building:"yes"}},w428:{id:"w428",nodes:["n2483","n2482","n2486","n2489","n2492","n2502","n2495","n2480","n2483"],tags:{building:"yes"}},w429:{id:"w429",nodes:["n2707","n2708","n2716","n2712","n2714","n2713","n2715","n2711","n2710","n2723","n2709","n2707"],tags:{amenity:"parking"}},w43:{id:"w43",nodes:["n1955","n1956"],tags:{footway:"sidewalk",highway:"footway",name:"Riverwalk Trail"}},w430:{id:"w430",nodes:["n2471","n2474","n2484","n2479","n2471"],tags:{building:"yes"}},w431:{id:"w431",nodes:["n2218","n2434","n2436","n2433","n2435","n2210"],tags:{name:"Rocky River",waterway:"river"}},w432:{id:"w432",nodes:["n2782","n2532","n2783","n2784","n2782"],tags:{amenity:"parking"}},w433:{id:"w433",nodes:["n2513","n649","n2520","n2514","n2507","n2513"],tags:{building:"yes"}},w434:{id:"w434",nodes:["n2470","n2468","n2461","n2465","n2470"],tags:{building:"yes"}},w435:{id:"w435",nodes:["n2598","n2599","n648","n649","n2520","n2598"],tags:{building:"yes"}},w436:{id:"w436",nodes:["n2639","n2640","n2641","n2642","n2643","n2644","n2645","n2646","n2647","n2648","n2639"],tags:{building:"yes"}},w437:{id:"w437",nodes:["n2503","n2512","n2508","n2499","n2503"],tags:{building:"yes"}},w438:{id:"w438",nodes:["n2440","n2800","n2774","n1"],tags:{highway:"residential",name:"Water Street"}},w439:{id:"w439",nodes:["n2675","n2676","n2677","n2678","n2675"],tags:{building:"yes"}},w44:{id:"w44",nodes:["n213","n214","n215","n216","n213"],tags:{building:"yes"}},w440:{id:"w440",nodes:["n2512","n2503","n2507","n2514","n2512"],tags:{building:"yes"}},w441:{id:"w441",nodes:["n2554","n2717","n674","n2720","n2798"],tags:{highway:"service",oneway:"yes"}},w442:{id:"w442",nodes:["n2583","n2596","n2584","n2585","n2595","n2586","n2587","n2588","n2589","n2583"],tags:{amenity:"parking"}},w443:{id:"w443",nodes:["n2629","n2627","n2628","n2616","n2630","n2629"],tags:{building:"yes"}},w444:{id:"w444",nodes:["n2717","n2724","n670","n2718","n669","n668","n2722","n2727"],tags:{highway:"service",oneway:"yes",service:"parking_aisle"}},w445:{id:"w445",nodes:["n2572","n2573"],tags:{bridge:"yes",highway:"path",name:"Riverwalk Trail"}},w446:{id:"w446",nodes:["n2603","n2604","n2601","n2605","n2606","n2607","n2603"],tags:{building:"yes"}},w447:{id:"w447",nodes:["n2780","n2777","n628","n624","n2779"],tags:{highway:"residential",name:"Foster Street",oneway:"yes"}},w448:{id:"w448",nodes:["n2733","n2734","n2735","n2736","n2737","n2738","n663","n664","n2739","n2733"],tags:{building:"yes"}},w449:{id:"w449",nodes:["n2564","n2565","n2566","n2567","n2568","n2794","n2795","n2564"],tags:{amenity:"parking"}},w45:{id:"w45",nodes:["n217","n218","n219","n220","n217"],tags:{amenity:"shelter",building:"yes",shelter_type:"picnic_shelter"}},w450:{id:"w450",nodes:["n2799","n2728","n2729","n2730","n2731","n2732","n2799"],tags:{building:"yes"}},w451:{id:"w451",nodes:["n2441","n1170","n2442","n2575","n2443","n2445","n2444","n2448","n2441"],tags:{amenity:"parking"}},w452:{id:"w452",nodes:["n2273","n457","n2569","n458","n2570"],tags:{highway:"path",name:"Riverwalk Trail"}},w453:{id:"w453",nodes:["n2447","n2242","n2448","n2527","n2530"],tags:{highway:"service"}},w454:{id:"w454",nodes:["n2560","n333","n2561"],tags:{highway:"service",service:"parking_aisle"}},w455:{id:"w455",nodes:["n2679","n2680","n2681","n2682","n2683","n2684","n2685","n2686","n2687","n2688","n2689","n2690","n2679"],tags:{building:"yes"}},w456:{id:"w456",nodes:["n2425","n2429","n2424"],tags:{bridge:"yes",highway:"residential",name:"Moore Street"}},w457:{id:"w457",nodes:["n2487","n2467","n2472","n2480","n2495","n2487"],tags:{building:"yes"}},w458:{id:"w458",nodes:["n2659","n2660","n2661","n2662","n678","n677","n2663","n2664","n2665","n2666","n675","n676","n2659"],tags:{building:"yes"}},w459:{id:"w459",nodes:["n2600","n2598","n2599","n2601","n2605","n2602","n2600"],tags:{building:"yes"}},w46:{id:"w46",nodes:["n221","n222","n223","n224","n221"],tags:{amenity:"shelter",building:"yes",shelter_type:"picnic_shelter"}},w460:{id:"w460",nodes:["n2468","n2464","n2455","n2457","n2461","n2468"],tags:{building:"yes"}},w461:{id:"w461",nodes:["n2478","n2473","n683","n682","n2463","n681","n2478"],tags:{building:"yes"}},w462:{id:"w462",nodes:["n2547","n473","n2548","n2549"],tags:{highway:"service",service:"parking_aisle"}},w463:{id:"w463",nodes:["n2573","n2574"],tags:{highway:"path",name:"Riverwalk Trail"}},w464:{id:"w464",nodes:["n2445","n2597","n2527","n2528","n2529","n2530","n2531","n2597"],tags:{highway:"service",service:"parking_aisle"}},w465:{id:"w465",nodes:["n2571","n459","n2572"],tags:{highway:"path",name:"Riverwalk Trail"}},w466:{id:"w466",nodes:["n2445","n2574","n2552","n442","n2551","n4727","n323","n2446"],tags:{highway:"service"}},w467:{id:"w467",nodes:["n2484","n2474","n2477","n2485","n2488","n2484"],tags:{building:"yes"}},w468:{id:"w468",nodes:["n2695","n2696","n2697","n2698","n2699","n2700","n2701","n2702","n2695"],tags:{building:"yes"}},w469:{id:"w469",nodes:["n2469","n2476","n2481","n2475","n920","n2466","n2469"],tags:{building:"yes"}},w47:{id:"w47",nodes:["n1988","n1997","n1989","n25","n24","n1990","n26","n1991","n21","n1992","n2006","n1993","n22","n1994","n23","n1995","n1999","n1996","n2001","n1988"],tags:{highway:"service"}},w470:{id:"w470",nodes:["n2473","n2470","n2465","n2458","n2462","n683","n2473"],tags:{building:"yes"}},w471:{id:"w471",nodes:["n2490","n2496","n994","n997","n998","n996","n995","n2485","n2477","n2490"],tags:{building:"yes"}},w472:{id:"w472",nodes:["n2424","n2426","n2427","n2428"],tags:{highway:"residential",name:"Moore Street"}},w473:{id:"w473",nodes:["n2432","n1026","n4741","n2554","n2425"],tags:{highway:"residential",name:"Moore Street"}},w474:{id:"w474",nodes:["n2577","n2576"],tags:{bridge:"yes",highway:"footway"}},w475:{id:"w475",nodes:["n2497","n2505","n2500","n2493","n2497"],tags:{building:"yes"}},w476:{id:"w476",nodes:["n2493","n2500","n2501","n2496","n2490","n2493"],tags:{building:"yes"}},w477:{id:"w477",nodes:["n2431","n360","n4726","n418","n397","n396","n2547","n646","n2447","n644","n2418","n424","n640","n2419","n2420","n2423"],tags:{highway:"residential",name:"Railroad Drive"}},w478:{id:"w478",nodes:["n2515","n2511","n2498","n2504","n2509","n2515"],tags:{building:"yes"}},w479:{id:"w479",nodes:["n2525","n651","n650","n2526","n2524","n653","n652","n656","n2523","n654","n2518","n2517","n2521","n2522","n2525"],tags:{building:"yes"}},w48:{id:"w48",nodes:["n225","n237","n226","n227","n228","n229","n230","n231","n232","n233","n234","n235","n236","n225"],tags:{building:"yes"}},w480:{id:"w480",nodes:["n2703","n2704","n2710","n2711","n2705","n2706","n2703"],tags:{amenity:"parking"}},w481:{id:"w481",nodes:["n2796","n2657","n2658","n2797","n2796"],tags:{building:"yes"}},w482:{id:"w482",nodes:["n2550","n2551","n442","n2552","n2553","n2550"],tags:{amenity:"parking"}},w483:{id:"w483",nodes:["n2790","n2542"],tags:{highway:"service",service:"parking_aisle"}},w484:{id:"w484",nodes:["n2311","n1102"],tags:{highway:"service"}},w485:{id:"w485",nodes:["n2515","n2509","n2516","n2519","n2515"],tags:{building:"yes"}},w486:{id:"w486",nodes:["n2506","n2502","n2492","n2491","n2494","n2506"],tags:{building:"yes"}},w487:{id:"w487",nodes:["n2667","n2668","n2669","n2670","n2667"],tags:{building:"yes"}},w488:{id:"w488",nodes:["n2616","n2608","n2617","n2618","n2619","n2620","n2621","n2622","n2623","n2624","n2625","n2626","n2627","n2628","n2616"],tags:{building:"yes"}},w489:{id:"w489",nodes:["n2081","n2430"],tags:{bridge:"yes",highway:"primary",name:"Michigan Avenue"}},w49:{id:"w49",nodes:["n237","n238"],tags:{highway:"footway"}},w490:{id:"w490",nodes:["n2410","n636","n730","n635","n2409","n2694","n2751","n2765","n2753","n2768","n2754","n2769","n2745","n2766","n4503","n2763","n4501","n2752","n2781"],tags:{highway:"residential",name:"Portage Avenue"}},w491:{id:"w491",nodes:["n2578","n2579","n2580","n2581","n2578"],tags:{amenity:"shelter",building:"yes",shelter_type:"picnic_shelter"}},w492:{id:"w492",nodes:["n2556","n2557","n2558","n2559","n2556"],tags:{amenity:"parking"}},w493:{id:"w493",nodes:["n2460","n2456","n687","n2453","n2454","n2460"],tags:{building:"yes"}},w494:{id:"w494",nodes:["n2471","n2479","n2476","n2469","n2471"],tags:{building:"yes"}},w495:{id:"w495",nodes:["n2724","n2725","n673","n672","n671","n2726","n2727"],tags:{highway:"service",oneway:"yes",service:"parking_aisle"}},w496:{id:"w496",nodes:["n2649","n2650","n2651","n2652","n2653","n2654","n2655","n2656","n2649"],tags:{building:"yes"}},w497:{id:"w497",nodes:["n2430","n2446","n343","n2101","n2560","n2431","n363","n2748"],tags:{highway:"primary",name:"Michigan Avenue"}},w498:{id:"w498",nodes:["n2691","n2692","n634","n633","n2693","n2694"],tags:{highway:"service"}},w499:{id:"w499",nodes:["n2423","n2415","n661","n2416","n2417","n2719","n2721","n2772","n2756","n2773","n2759","n2767"],tags:{highway:"residential",name:"West Street"}},w5:{id:"w5",nodes:["n380","n381","n382","n383","n429","n430","n380"],tags:{building:"yes"}},w50:{id:"w50",nodes:["n239","n499","n508","n245","n238","n242","n240"],tags:{footway:"sidewalk",highway:"footway"}},w500:{id:"w500",nodes:["n2428","n1152","n2421","n2324"],tags:{bridge:"yes",highway:"residential",name:"Moore Street"}},w501:{id:"w501",nodes:["n2608","n2609","n2610","n2611","n2612","n2613","n2614","n2615","n2617","n2608"],tags:{building:"yes"}},w502:{id:"w502",nodes:["n2570","n2571"],tags:{bridge:"yes",highway:"path",name:"Riverwalk Trail"}},w503:{id:"w503",nodes:["n2540","n2542","n2787"],tags:{highway:"service"}},w504:{id:"w504",nodes:["n2269","n2582","n2250"],tags:{highway:"path"}},w505:{id:"w505",nodes:["n2631","n2632","n2633","n2634","n2635","n2636","n2637","n2638","n2631"],tags:{building:"yes"}},w506:{id:"w506",nodes:["n2543","n2544","n2545","n395","n2546","n2543"],tags:{amenity:"parking"}},w507:{id:"w507",nodes:["n2449","n2450","n2451","n2452","n1162","n2449"],tags:{leisure:"pitch",sport:"tennis"}},w508:{id:"w508",nodes:["n2554","n1160","n2559","n2558","n659","n2555","n658","n657","n2419"],tags:{highway:"service"}},w509:{id:"w509",nodes:["n2499","n2508","n2510","n2505","n2497","n2499"],tags:{building:"yes"}},w51:{id:"w51",nodes:["n241","n242","n243","n244"],tags:{highway:"service",surface:"unpaved"}},w510:{id:"w510",nodes:["n2575","n2577"],tags:{highway:"footway"}},w511:{id:"w511",nodes:["n2533","n2534","n2535","n2536","n2537","n2538","n2539","n2785","n2786","n2533"],tags:{amenity:"parking"}},w512:{id:"w512",nodes:["n2801","n2740","n2741","n2742","n2743","n2744","n2801"],tags:{building:"yes"}},w513:{id:"w513",nodes:["n2720","n2721"],tags:{highway:"service",service:"parking_aisle"}},w514:{id:"w514",nodes:["n2788","n2790","n2789","n989","n2540","n2541"],tags:{highway:"service",service:"parking_aisle"}},w515:{id:"w515",nodes:["n2848","n2849","n2850","n2851","n2803","n2804","n2812"],tags:{highway:"residential",name:"Middle Street"}},w516:{id:"w516",nodes:["n2852","n2805"],tags:{access:"private",highway:"service",name:"Battle Street"}},w517:{id:"w517",nodes:["n2863","n2815","n2814","n2812","n2864","n2855","n2865","n2867","n2868"],tags:{highway:"secondary",name:"Michigan Avenue",name_1:"State Highway 60",ref:"M 60"}},w518:{id:"w518",nodes:["n2859","n2808"],tags:{highway:"residential",name:"2nd Avenue"}},w519:{id:"w519",nodes:["n2823","n2824","n2825","n2826","n2827","n2828","n2823"],tags:{building:"yes"}},w52:{id:"w52",nodes:["n247","n248","n249","n250","n247"],tags:{amenity:"parking"}},w520:{id:"w520",nodes:["n2806","n2807","n2803"],tags:{highway:"residential",name:"2nd Avenue"}},w521:{id:"w521",nodes:["n2829","n2830","n2831","n2832","n2833","n2834","n2835","n2836","n2837","n2838","n2829"],tags:{building:"yes"}},w522:{id:"w522",nodes:["n2815","n2813","n2811","n4597","n2846","n4596","n2857","n4601","n2853","n4602","n2861","n4","n2879","n4560","n3550","n5","n1685"],tags:{highway:"residential",name:"Washington Street"}},w523:{id:"w523",nodes:["n2878","n2811","n2810","n2860","n2880","n2881","n2882"],tags:{highway:"residential",name:"5th Avenue"}},w524:{id:"w524",nodes:["n2816","n2817","n2818","n2819","n2820","n2821","n2822","n2816"],tags:{building:"yes"}},w525:{id:"w525",nodes:["n2869","n2856","n2806","n2808","n2814","n2809","n2810","n2847","n2858","n2854","n2870","n2871","n6","n2872","n2839","n2862"],tags:{highway:"residential",name:"Wood Street"}},w526:{id:"w526",nodes:["n2877","n2809","n2813","n2844","n2843"],tags:{highway:"residential",name:"4th Avenue"}},w527:{id:"w527",nodes:["n4785","n4784","n2936","n4788","n4787","n4786","n4785"],tags:{amenity:"parking"}},w528:{id:"w528",nodes:["n2864","n2892","n2893","n2877","n2860","n3840"],tags:{highway:"residential",name:"Garden Street"}},w529:{id:"w529",nodes:["n2868","n2890"],tags:{bridge:"yes",highway:"secondary",name:"Michigan Avenue",name_1:"State Highway 60",ref:"M 60"}},w53:{id:"w53",nodes:["n251","n252","n253","n254","n255","n256","n257","n258","n259","n260","n261","n262","n251"],tags:{building:"yes"}},w530:{id:"w530",nodes:["n2914","n2915","n2916","n2917","n2918","n2919","n2920","n2921","n2922","n2923","n2924","n2925","n2926","n2927","n2928","n2929","n2930","n2931","n2932","n2933","n2914"],tags:{building:"yes"}},w531:{id:"w531",nodes:["n2958","n2896"],tags:{bridge:"yes",highway:"secondary",name:"Main Street"}},w532:{id:"w532",nodes:["n2896","n394","n364","n2748"],tags:{highway:"secondary",name:"Main Street"}},w533:{id:"w533",nodes:["n2800","n2943","n2940","n2941","n2942","n2943"],tags:{highway:"service",service:"parking_aisle"}},w534:{id:"w534",nodes:["n3836","n3837","n3839","n3838","n3834","n4632","n3831","n4624","n3835","n3836"],tags:{barrier:"fence"}},w535:{id:"w535",nodes:["n2894","n2944","n2774","n2765"],tags:{highway:"residential",name:"5th Avenue"}},w536:{id:"w536",nodes:["n2890","n2780","n627","n2889","n2887","n623","n2888","n366","n2748"],tags:{highway:"secondary",name:"Michigan Avenue",name_1:"State Highway 60",ref:"M 60"}},w537:{id:"w537",nodes:["n2895","n738","n2887","n737","n2913"],tags:{highway:"residential",name:"Water Street"}},w538:{id:"w538",nodes:["n2855","n3756","n2884","n2885","n2886","n2945","n2946","n2947","n2948","n2949","n2950","n2951","n2952","n2953","n2955","n2848","n2956","n2856"],tags:{highway:"residential",name:"River Drive"}},w539:{id:"w539",nodes:["n2882","n2894"],tags:{bridge:"yes",highway:"residential",name:"5th Avenue"}},w54:{id:"w54",nodes:["n263","n264","n265","n266","n267","n268","n269","n270","n271","n272","n273","n274","n275","n276","n263"],tags:{building:"yes"}},w540:{id:"w540",nodes:["n2987","n2964","n2981","n2983","n2966","n2982","n2962","n2960","n2967","n2965","n2984","n2977","n2968","n2976","n2986","n2988","n2963","n2970","n2969","n2979","n2974","n2980","n2959","n2973","n2985","n2961","n2975","n2971","n2972","n2978","n2898","n2907","n2912","n2909","n2911","n2901","n2903","n2904","n2906","n2902","n2900","n2910","n2908","n2899","n2897","n2905","n2186","n2233"],tags:{name:"Portage River",waterway:"river"}},w541:{id:"w541",nodes:["n2852","n2851","n3003"],tags:{highway:"residential",name:"1st Avenue"}},w542:{id:"w542",nodes:["n2991","n3004","n2994"],tags:{highway:"residential",name:"River Street"}},w543:{id:"w543",nodes:["n2993","n2989"],tags:{bridge:"yes",highway:"residential",name:"6th Street"}},w544:{id:"w544",nodes:["n2995","n2996","n2997","n2998","n2999","n3000","n3001","n3002","n2990","n2991","n2993"],tags:{highway:"residential",name:"6th Street"}},w545:{id:"w545",nodes:["n2989","n2992","n2848"],tags:{highway:"residential",name:"6th Street"}},w546:{id:"w546",nodes:["n2313","n3169","n3170","n3171","n3172","n3173","n3174","n3175","n3176","n3177","n3178","n3179","n3180","n3191","n3181","n3190","n3182","n3183","n3184","n3185","n3186","n3187","n3188","n3189","n3160","n3161","n3162","n2126","n2146","n2156","n2129","n2112","n2109","n2313"],tags:{natural:"wetland"}},w547:{id:"w547",nodes:["n2088","n3013","n3015","n3014","n3017","n3018"],tags:{name:"Conrail Railroad",railway:"rail"}},w548:{id:"w548",nodes:["n3083","n3084","n3085","n3086","n3083"],tags:{building:"yes"}},w549:{id:"w549",nodes:["n3020","n2288","n2283","n2284","n2131","n2286","n2287","n2285","n2132","n2140","n2289","n3020"],tags:{leisure:"park",name:"Conservation Park"}},w55:{id:"w55",nodes:["n277","n278","n279","n280","n281","n282","n283","n284","n277"],tags:{building:"yes"}},w550:{id:"w550",nodes:["n3056","n3042","n3041","n3040","n3039","n3038","n3037","n3036","n3044","n3035","n3034","n3043","n3016","n3056","n3019","n3015","n3012"],tags:{highway:"service"}},w551:{id:"w551",nodes:["n3044","n3045","n3046","n3047","n3048","n3049","n3050","n3051","n3052","n3053","n3054","n3055","n3016"],tags:{highway:"footway"}},w552:{id:"w552",nodes:["n3117","n3118","n3119","n3120","n3121","n3122","n3117"],tags:{building:"yes"}},w553:{id:"w553",nodes:["n3123","n3124","n3129","n3125","n3126","n3123"],tags:{building:"yes"}},w554:{id:"w554",nodes:["n3069","n3070","n3071","n3072","n3073","n3074","n3075","n3076","n3077","n3078","n3079","n3080","n3081","n3082","n3069"],tags:{building:"yes"}},w555:{id:"w555",nodes:["n3087","n3088","n3089","n3090","n3087"],tags:{building:"yes"}},w556:{id:"w556",nodes:["n3113","n3114","n3115","n3116","n3113"],tags:{building:"yes"}},w557:{id:"w557",nodes:["n3103","n3104","n3105","n3106","n3103"],tags:{building:"yes"}},w558:{id:"w558",nodes:["n3127","n3128","n3129","n3124","n3127"],tags:{building:"yes"}},w559:{id:"w559",nodes:["n3137","n3141","n3142","n3138","n3139","n3140","n3137"],tags:{building:"yes"}},w56:{id:"w56",nodes:["n285","n286","n287","n288","n285"],tags:{amenity:"parking"}},w560:{id:"w560",nodes:["n3091","n3092","n3093","n3094","n3091"],tags:{building:"yes"}},w561:{id:"w561",nodes:["n3155","n3157","n3158","n3159","n3156","n3155"],tags:{building:"yes"}},w562:{id:"w562",nodes:["n3057","n3058","n3059","n3060","n3057"],tags:{building:"yes"}},w563:{id:"w563",nodes:["n3107","n3108","n3109","n3110","n3111","n3112","n3107"],tags:{building:"yes"}},w564:{id:"w564",nodes:["n3134","n3135","n3136","n3131","n3134"],tags:{building:"yes"}},w565:{id:"w565",nodes:["n3143","n3144","n3145","n3146","n3143"],tags:{building:"yes"}},w566:{id:"w566",nodes:["n3095","n3096","n3097","n3098","n3095"],tags:{building:"yes"}},w567:{id:"w567",nodes:["n3130","n3131","n3136","n3132","n3133","n3130"],tags:{building:"yes"}},w568:{id:"w568",nodes:["n3025","n3026","n3027","n3028","n3029","n3030","n3031","n3033","n3032","n3025"],tags:{amenity:"parking"}},w569:{id:"w569",nodes:["n3061","n3062","n3063","n3064","n3061"],tags:{building:"yes"}},w57:{id:"w57",nodes:["n289","n290","n291","n292","n289"],tags:{amenity:"parking"}},w570:{id:"w570",nodes:["n3155","n3156","n3152","n3153","n3155"],tags:{building:"yes"}},w571:{id:"w571",nodes:["n3099","n3100","n3101","n3102","n3099"],tags:{building:"yes"}},w572:{id:"w572",nodes:["n3147","n3148","n3149","n3150","n3147"],tags:{building:"yes"}},w573:{id:"w573",nodes:["n3039","n2284"],tags:{highway:"service"}},w574:{id:"w574",nodes:["n3151","n3152","n3153","n3154","n3151"],tags:{building:"yes"}},w575:{id:"w575",nodes:["n3021","n3022","n3023","n3024","n3021"],tags:{amenity:"shelter",building:"yes",shelter_type:"picnic_shelter"}},w576:{id:"w576",nodes:["n3065","n3066","n3067","n3068","n3065"],tags:{building:"yes"}},w577:{id:"w577",nodes:["n2944","n3192","n3757","n3813","n3814","n3815","n3816","n3817","n3818","n3819"],tags:{highway:"service",name:"Willow Drive",service:"driveway",surface:"unpaved"}},w578:{id:"w578",nodes:["n2163","n2165","n2166","n2167","n2168","n2172","n2173","n2174","n2175","n2176","n2178","n2181","n2163"],tags:{building:"yes"}},w579:{id:"w579",nodes:["n2754","n3195","n3204","n3205","n4537","n4540","n3206","n4530","n4536","n3207","n4524","n3199","n4521","n3197","n1032"],tags:{highway:"residential",name:"Elm Street"}},w58:{id:"w58",nodes:["n240","n293","n294"],tags:{crossing:"marked",footway:"crossing",highway:"footway"}},w580:{id:"w580",nodes:["n2184","n2185","n2187","n2190","n2191","n2192","n2184"],tags:{building:"yes"}},w581:{id:"w581",nodes:["n2765","n3208","n3211","n2755","n3280","n2756","n3346"],tags:{highway:"residential",name:"Kelsey Street"}},w582:{id:"w582",nodes:["n2753","n3194","n3193","n3201","n3196","n4551","n3202","n4550","n3203","n3200","n3198","n1033"],tags:{highway:"residential",name:"Walnut Street"}},w583:{id:"w583",nodes:["n3272","n4469","n4588","n2879","n4564","n2872"],tags:{highway:"residential",name:"10th Avenue"}},w584:{id:"w584",nodes:["n3243","n3242","n3241","n3240","n3243"],tags:{building:"industrial"}},w585:{id:"w585",nodes:["n3273","n3274","n4631","n4593","n3275","n4592","n2846","n4611","n2847"],tags:{highway:"residential",name:"6th Avenue"}},w586:{id:"w586",nodes:["n3276","n4591","n2853","n4605","n2854"],tags:{highway:"residential",name:"8th Avenue"}},w587:{id:"w587",nodes:["n3269","n3268","n3267","n3266","n3265","n3264","n3263","n3262","n3269"],tags:{building:"industrial"}},w588:{id:"w588",nodes:["n3277","n4599","n2857","n4598","n4608","n2858"],tags:{highway:"residential",name:"7th Avenue"}},w589:{id:"w589",nodes:["n3239","n3238","n3271","n3270","n3237","n3236","n3235","n3234","n3239"],tags:{building:"yes"}},w59:{id:"w59",nodes:["n294","n295","n296","n297","n298","n299","n300","n301","n302","n303","n491","n304","n305","n306","n307"],tags:{footway:"sidewalk",highway:"footway"}},w590:{id:"w590",nodes:["n3278","n4458","n4589","n4604","n2861"],tags:{highway:"residential",name:"9th Avenue"}},w591:{id:"w591",nodes:["n3253","n3252","n3251","n3250","n3249","n3248","n3253"],tags:{building:"industrial"}},w592:{id:"w592",nodes:["n3229","n3228","n3227","n3226","n3225","n3224","n3223","n3222","n3221","n3220","n3219","n3218","n3217","n3216","n3215","n3214","n3213","n3212","n3229"],tags:{natural:"water",water:"pond"}},w593:{id:"w593",nodes:["n3261","n3260","n3259","n3258","n3257","n3256","n3255","n3254","n3261"],tags:{building:"industrial"}},w594:{id:"w594",nodes:["n3233","n3232","n3231","n3230","n3233"],tags:{building:"yes"}},w595:{id:"w595",nodes:["n3247","n3246","n3245","n3244","n3247"],tags:{building:"industrial"}},w596:{id:"w596",nodes:["n2769","n3195","n3193","n3209","n2758","n2759","n3279"],tags:{highway:"residential",name:"Armitage Street"}},w597:{id:"w597",nodes:["n2193","n2194","n2195","n2197","n2193"],tags:{building:"yes"}},w598:{id:"w598",nodes:["n3404","n3403","n3402","n3401","n3400","n3399","n3398","n3397","n3373","n3372","n3396","n3395","n3404"],tags:{building:"school"}},w6:{id:"w6",nodes:["n879","n880","n881","n882","n879"],tags:{building:"shed"}},w60:{id:"w60",nodes:["n239","n308","n307"],tags:{crossing:"marked",footway:"crossing",highway:"footway"}},w600:{id:"w600",nodes:["n3387","n3386","n3316","n3315","n3314","n3313","n3387"],tags:{building:"yes"}},w601:{id:"w601",nodes:["n3304","n3303","n3302","n3301","n3385","n3384","n3300","n3299","n3304"],tags:{building:"yes"}},w602:{id:"w602",nodes:["n3334","n3333","n3332","n3331","n3330","n3329","n3328","n3327","n3326","n3325","n3324","n3323","n3322","n3321","n3320","n3319","n3318","n3317","n3334"],tags:{building:"yes"}},w603:{id:"w603",nodes:["n3353","n3352","n3347","n3280","n2798"],tags:{highway:"service",service:"alley",surface:"unpaved"}},w604:{id:"w604",nodes:["n3753","n3211","n3383"],tags:{highway:"service",service:"alley"}},w605:{id:"w605",nodes:["n3290","n3289","n3288","n3287","n3286","n3285","n3284","n3283","n3282","n3281","n3290"],tags:{building:"yes"}},w606:{id:"w606",nodes:["n2198","n2199","n2201","n2202","n2203","n2206","n2198"],tags:{building:"yes"}},w607:{id:"w607",nodes:["n2198","n2207"],tags:{barrier:"wall"}},w608:{id:"w608",nodes:["n2751","n3208","n3210","n3209","n3415","n3410","n3414","n3413","n3412","n3416"],tags:{highway:"residential",name:"East Street"}},w609:{id:"w609",nodes:["n2772","n3346","n3746","n3748","n3747","n3345","n3378","n3279","n3411"],tags:{highway:"residential",name:"Maple Street"}},w61:{id:"w61",nodes:["n309","n310","n311","n312","n313","n240"],tags:{footway:"sidewalk",highway:"footway"}},w610:{id:"w610",nodes:["n3379","n3380","n3382","n3381","n3379"],tags:{leisure:"park",name:"LaFayette Park"}},w611:{id:"w611",nodes:["n2768","n3194","n3210","n3753","n2760","n3353","n2773","n3378"],tags:{highway:"residential",name:"Bennett Street"}},w612:{id:"w612",nodes:["n2751","n3383","n2749","n2798","n2772"],tags:{highway:"residential",name:"Market Street"}},w613:{id:"w613",nodes:["n3298","n3297","n3296","n3295","n3294","n3293","n3292","n3291","n3298"],tags:{building:"yes"}},w614:{id:"w614",nodes:["n3375","n3406","n3405","n3374","n3375"],tags:{leisure:"playground"}},w615:{id:"w615",nodes:["n3393","n3344","n3343","n3342","n3341","n3340","n3339","n3338","n3337","n3392","n3391","n3390","n3389","n3336","n3335","n3388","n3393"],tags:{building:"yes"}},w616:{id:"w616",nodes:["n3376","n3407","n3408","n3377","n3376"],tags:{amenity:"school",name:"Three Rivers Elementary School"}},w617:{id:"w617",nodes:["n3312","n3311","n3310","n3309","n3308","n3307","n3306","n3305","n3312"],tags:{building:"yes"}},w619:{id:"w619",nodes:["n2863","n3424","n3425","n3426","n3427","n3428","n3429","n3430","n3431","n3432","n3433","n2844"],tags:{highway:"secondary",name:"Michigan Avenue",ref:"M 60"}},w62:{id:"w62",nodes:["n876","n906","n904","n875","n874","n873","n872","n871","n870","n869","n41","n868","n146","n314","n315","n1956"],tags:{footway:"sidewalk",highway:"footway"}},w620:{id:"w620",nodes:["n2844","n3420","n3421","n3422","n3439","n2859","n3437","n3493","n3496","n3500","n3497"],tags:{highway:"residential"}},w621:{id:"w621",nodes:["n3468","n3469","n3470","n3471","n3468"],tags:{building:"yes"}},w622:{id:"w622",nodes:["n3417","n3436","n3438","n3491","n3488","n3492","n3495","n3494","n3498","n3487","n3499","n3490","n3489","n4800","n3417"],tags:{landuse:"cemetery",name:"Riverside Cemetery"}},w623:{id:"w623",nodes:["n3440","n3441","n3442","n3443","n3444","n3445","n3440"],tags:{building:"yes"}},w624:{id:"w624",nodes:["n3446","n3447","n3448","n3449","n3450","n3451","n3452","n3453","n3454","n3455","n3456","n3457","n3458","n3459","n3460","n3461","n3462","n3463","n3464","n3465","n3466","n3467","n3446"],tags:{building:"yes"}},w625:{id:"w625",nodes:["n2844","n3434","n3435","n2878","n3275","n4621","n3276","n3278","n4463","n3272","n3472","n3474","n3475","n3476","n3477","n3478","n1202","n3479","n3480","n3481","n1203","n3482","n3483","n3484","n3485","n4574","n3486","n3473"],tags:{highway:"secondary",name:"Jefferson Street",name_1:"State Highway 60",ref:"M 60"}},w626:{id:"w626",nodes:["n3439","n3423","n2863"],tags:{highway:"unclassified",name:"Michigan Avenue",name_1:"State Highway 60"}},w627:{id:"w627",nodes:["n3500","n3005"],tags:{highway:"service"}},w628:{id:"w628",nodes:["n3491","n3488","n3492","n3010","n3009","n3005","n3008","n3007","n3006","n3502","n3491"],tags:{leisure:"park",name:"Marina Park"}},w629:{id:"w629",nodes:["n2208","n2209","n2212","n2214","n2208"],tags:{building:"yes"}},w63:{id:"w63",nodes:["n1955","n316"],tags:{footway:"sidewalk",highway:"footway"}},w630:{id:"w630",nodes:["n2757","n3414","n3202","n4542","n3206","n4538","n3750","n3503","n1629","n4500","n2763","n4502","n2764","n3508"],tags:{highway:"residential",name:"Hoffman Street"}},w631:{id:"w631",nodes:["n2215","n2750","n2770","n2771","n2215"],tags:{building:"yes"}},w632:{id:"w632",nodes:["n2766","n3504","n3507","n3751","n3205","n3196","n3410","n2746"],tags:{highway:"residential",name:"Cushman Street"}},w633:{id:"w633",nodes:["n2745","n3749","n3507","n4535","n3503"],tags:{highway:"residential",name:"Pine Street"}},w634:{id:"w634",nodes:["n3510","n3511","n3512","n3509","n3510"],tags:{leisure:"park",name:"Bowman Park"}},w636:{id:"w636",nodes:["n2745","n3752","n3204","n3201","n3415","n2761","n2767","n3411"],tags:{highway:"residential",name:"Wheeler Street"}},w637:{id:"w637",nodes:["n3550","n4586","n4476","n3472"],tags:{highway:"residential",name:"11th Avenue"}},w638:{id:"w638",nodes:["n3508","n3518"],tags:{bridge:"yes",highway:"residential",name:"Hoffman Street"}},w639:{id:"w639",nodes:["n3518","n1204","n2862","n3519","n3520","n3521","n3522","n3523","n2161","n3524","n3549","n3552","n4239","n3551","n4577","n4582","n4578","n4583","n4579","n4574"],tags:{highway:"residential",name:"Hoffman Street"}},w64:{id:"w64",nodes:["n316","n317"],tags:{bridge:"yes",footway:"sidewalk",highway:"footway",layer:"1"}},w640:{id:"w640",nodes:["n3634","n3640","n3676","n3633","n3678","n3648","n3638","n3683","n3600","n3579","n3679","n3677","n2987","n3592","n3588","n3608","n3559","n3617","n3620","n3660","n3553","n3533","n3530","n3531","n3525","n3527","n3526","n3532","n3529","n3528","n3667","n3627","n3623","n3625","n3601","n3687","n3671","n3644","n3626","n3673","n3582","n3693","n3605","n3619","n3651","n3650","n3615","n3663","n3631","n3596","n3604","n3655","n3586","n3595","n3701","n3603","n3686","n3611","n3568","n3674","n3613","n3580","n3562","n3564","n3689","n3585","n3670","n3659","n3684","n3680","n3646","n3558","n3556","n3692","n3563","n3575","n3571","n3675","n3557","n3700","n3656","n3622","n3657","n3565","n3669","n3658","n3618","n3624","n3688","n3610","n3570","n3645","n3649","n3583","n3694","n3561","n3554","n3614","n3698","n3581","n3635","n3641","n3569","n3647","n3628","n3598","n3696","n3665","n3639","n3607","n3695","n3642","n3672","n3577","n3643","n3691","n3602","n3576","n3591","n3560","n3606","n3685","n3597","n3629","n3661","n3654","n3616","n3697","n3578","n3609","n3653","n3699","n3566","n3637","n3567","n3666","n3555","n3599","n3590","n3572","n3593","n3690","n3681","n3612","n3682","n3668","n3587","n3621","n3636","n3662","n3589","n3573","n3652","n3664","n3632","n3574","n3594","n3584","n3630","n3634"],tags:{landuse:"reservoir",name:"Hoffman Pond",natural:"water"}},w641:{id:"w641",nodes:["n2988","n3534","n3535","n3536","n3537","n3538","n3539","n3540","n3541","n3542","n3543","n3544","n3545","n3546","n3547","n3548","n2970"],tags:{waterway:"river"}},w642:{id:"w642",nodes:["n3702","n3703","n3704","n3705","n3706","n3707","n3708","n3709","n3710","n3711","n3712","n3713","n3714","n3715","n3716","n3717","n3718","n3719","n3720","n3721","n3722","n3723","n3724","n3725","n3726","n3727","n3728","n3729","n3730","n3731","n3732","n3733","n3734","n3735","n3736","n3737","n3738","n3739","n3740","n3741","n3742","n3743","n3702"],tags:{admin_level:"8",boundary:"administrative"}},w643:{id:"w643",nodes:["n2839","n2873"],tags:{highway:"service",service:"driveway"}},w644:{id:"w644",nodes:["n2873","n2840"],tags:{bridge:"yes",highway:"service",layer:"1",service:"driveway"}},w645:{id:"w645",nodes:["n2840","n2841","n2842","n2845","n2866"],tags:{highway:"service",service:"driveway",surface:"unpaved"}},w646:{id:"w646",nodes:["n2752","n3759","n1420","n1421","n1422","n3758","n4507","n4506","n4505","n4520","n3199","n4522","n4504","n4546","n3200","n4547","n3412"],tags:{highway:"residential",name:"Flower Street"}},w647:{id:"w647",nodes:["n2874","n2875","n2876","n2954","n2874"],tags:{building:"industrial"}},w648:{id:"w648",nodes:["n3778","n3779","n3780","n3781","n3782","n3783","n3778"],tags:{building:"yes"}},w649:{id:"w649",nodes:["n3197","n4543","n4544","n3198"],tags:{highway:"residential",name:"Morris Avenue",surface:"unpaved"}},w65:{id:"w65",nodes:["n317","n318","n319","n320","n321"],tags:{footway:"sidewalk",highway:"footway"}},w650:{id:"w650",nodes:["n3207","n4526","n4528","n4548","n3203","n4549","n3413","n2762"],tags:{highway:"residential",name:"Adams Street"}},w651:{id:"w651",nodes:["n3788","n3785","n3786","n3787","n3788"],tags:{power:"station"}},w652:{id:"w652",nodes:["n2957","n3163","n3241"],tags:{barrier:"wall"}},w653:{id:"w653",nodes:["n3549","n3802","n3803","n3800","n3801"],tags:{highway:"service",surface:"unpaved"}},w654:{id:"w654",nodes:["n3164","n3165","n3166","n3167","n3168","n3505","n3164"],tags:{building:"yes"}},w655:{id:"w655",nodes:["n3506","n3517","n3760","n3761","n3762","n3763","n3506"],tags:{building:"yes"}},w656:{id:"w656",nodes:["n3764","n3765","n3766","n3767","n3768","n3769","n3770","n3771","n3764"],tags:{building:"yes"}},w657:{id:"w657",nodes:["n3772","n3773","n3774","n3775","n3772"],tags:{building:"yes"}},w658:{id:"w658",nodes:["n3776","n3777","n3784","n3789","n3776"],tags:{building:"yes"}},w659:{id:"w659",nodes:["n3930","n3931","n3932","n3933","n3934","n3935","n3936","n3937","n3938","n3930"],tags:{leisure:"pitch",sport:"baseball"}},w66:{id:"w66",nodes:["n321","n322"],tags:{bridge:"yes",footway:"sidewalk",highway:"footway",layer:"1"}},w660:{id:"w660",nodes:["n3982","n3842","n3864","n3865","n2938","n3866","n2939","n3867","n3868","n3858","n2937","n3869","n2935","n2934","n3870","n3348","n3862"],tags:{highway:"service"}},w661:{id:"w661",nodes:["n3968","n3969"],tags:{highway:"footway"}},w662:{id:"w662",nodes:["n3875","n3876","n3877","n3878","n3879","n3880","n3881","n3882","n3875"],tags:{amenity:"parking"}},w663:{id:"w663",nodes:["n3964","n3965"],tags:{highway:"footway"}},w664:{id:"w664",nodes:["n3966","n3967"],tags:{highway:"footway"}},w665:{id:"w665",nodes:["n3857","n3890","n3884","n3894","n3889","n3899","n3885","n3886","n3896","n3887"],tags:{highway:"service",service:"parking_aisle"}},w666:{id:"w666",nodes:["n3895","n3896"],tags:{highway:"service",service:"parking_aisle"}},w667:{id:"w667",nodes:["n3274","n3977","n3984","n3983","n3981","n3844","n3978","n3982","n3861","n3862","n3873","n3874","n4468","n3863"],tags:{access:"private",highway:"service",name:"Collins Drive"}},w668:{id:"w668",nodes:["n3900","n3901","n3902","n3903","n3904","n3905","n3808","n3809","n3906","n3907","n3908","n3967","n3909","n3910","n3911","n3955","n3964","n3912","n3913","n3914","n3915","n3916","n3917","n3918","n3919","n3920","n3921","n3922","n3923","n3924","n3925","n3926","n3927","n3969","n3970","n3928","n3807","n3929","n3900"],tags:{building:"school"}},w669:{id:"w669",nodes:["n3272","n39","n40","n3974","n3863","n3857","n3892","n3883","n3891","n3889"],tags:{highway:"service"}},w67:{id:"w67",nodes:["n322","n886","n323","n475"],tags:{footway:"crossing",highway:"footway"}},w670:{id:"w670",nodes:["n3473","n3859","n3860","n3980","n4908","n4865"],tags:{highway:"secondary",name:"Hoffman Street",ref:"M 60"}},w671:{id:"w671",nodes:["n3970","n3806","n3971"],tags:{highway:"footway"}},w672:{id:"w672",nodes:["n3892","n3893","n3894"],tags:{highway:"service",service:"parking_aisle"}},w673:{id:"w673",nodes:["n3945","n3946","n3992","n3990","n3945"],tags:{leisure:"pitch",sport:"tennis"}},w674:{id:"w674",nodes:["n3890","n3893","n3891"],tags:{highway:"service",service:"parking_aisle"}},w675:{id:"w675",nodes:["n3947","n3948","n3994","n3993","n3947"],tags:{leisure:"pitch",sport:"tennis"}},w676:{id:"w676",nodes:["n3858","n3954","n3972","n3810","n3811","n3812","n3841","n3973","n3898","n3963","n3897","n3896"],tags:{highway:"service"}},w677:{id:"w677",nodes:["n3977","n3996","n3997","n4004","n3998","n3999","n4005","n4007","n4006","n3995","n4000","n3843","n4001","n4002","n4003","n3949","n3351","n3950","n3354","n3350","n3951","n3349","n3952","n3953","n3954","n3956","n3966","n3955"],tags:{highway:"footway"}},w678:{id:"w678",nodes:["n3887","n3888","n3895","n3899"],tags:{highway:"service",service:"parking_aisle"}},w679:{id:"w679",nodes:["n3946","n3947","n3993","n3992","n3946"],tags:{leisure:"pitch",sport:"tennis"}},w68:{id:"w68",nodes:["n294","n1952","n326"],tags:{footway:"sidewalk",highway:"footway"}},w680:{id:"w680",nodes:["n3939","n3940","n3941","n3985","n3986","n3987","n3988","n3989","n3942","n3943","n3939"],tags:{leisure:"pitch",sport:"baseball"}},w681:{id:"w681",nodes:["n3990","n3991","n3944","n3945","n3990"],tags:{leisure:"pitch",sport:"tennis"}},w682:{id:"w682",nodes:["n3871","n3872","n3873","n3874","n3871"],tags:{amenity:"parking"}},w683:{id:"w683",nodes:["n3956","n3965","n3957","n3958","n3959"],tags:{footway:"sidewalk",highway:"footway"}},w684:{id:"w684",nodes:["n3790","n3791","n3792","n3793","n3790"],tags:{building:"shed"}},w685:{id:"w685",nodes:["n3794","n3795","n3796","n3797","n3794"],tags:{building:"yes"}},w686:{id:"w686",nodes:["n3798","n3799","n3804","n3805","n3798"],tags:{building:"yes"}},w687:{id:"w687",nodes:["n3806","n3807"],tags:{highway:"footway"}},w688:{id:"w688",nodes:["n3845","n3846","n3847","n3848","n3845"],tags:{leisure:"pitch",sport:"american_football"}},w689:{id:"w689",nodes:["n3849","n4021","n3850","n3851","n3852","n3853","n3854","n3855","n3856","n3975","n3976","n3979","n4008","n4009","n4010","n4011","n4012","n4013","n4014","n4015","n4016","n4017","n4018","n4019","n4020","n4021"],tags:{leisure:"track",sport:"running"}},w69:{id:"w69",nodes:["n326","n327"],tags:{bridge:"yes",footway:"sidewalk",highway:"footway",layer:"1"}},w690:{id:"w690",nodes:["n4022","n4023","n4024","n4025","n4026","n4027","n4022"],tags:{building:"yes"}},w691:{id:"w691",nodes:["n4028","n4029","n4030","n4031","n4028"],tags:{building:"yes"}},w692:{id:"w692",nodes:["n4032","n4033","n4034","n4035","n4032"],tags:{building:"yes"}},w693:{id:"w693",nodes:["n4036","n4037","n4038","n4039","n4036"],tags:{building:"yes"}},w694:{id:"w694",nodes:["n4040","n4041","n4042","n4043","n4040"],tags:{building:"yes"}},w695:{id:"w695",nodes:["n4044","n4045","n4050","n4053","n4046","n4047","n4048","n4049","n4044"],tags:{building:"yes"}},w696:{id:"w696",nodes:["n4050","n4051","n4052","n4053","n4050"],tags:{building:"roof"}},w697:{id:"w697",nodes:["n4054","n4068","n4055","n4056","n4057","n4054"],tags:{building:"yes"}},w698:{id:"w698",nodes:["n4058","n4059","n4060","n4061","n4062","n4063","n4058"],tags:{building:"yes"}},w699:{id:"w699",nodes:["n4064","n4066","n4065"],tags:{barrier:"fence"}},w7:{id:"w7",nodes:["n43","n44","n45"],tags:{highway:"service"}},w70:{id:"w70",nodes:["n327","n328","n27","n329"],tags:{footway:"sidewalk",highway:"footway"}},w700:{id:"w700",nodes:["n4066","n4067","n4068"],tags:{barrier:"fence"}},w701:{id:"w701",nodes:["n4069","n4070","n4071","n4072","n4069"],tags:{building:"shed"}},w702:{id:"w702",nodes:["n4073","n4074","n4075","n4076","n4077","n4078","n4079","n4080","n4081","n4082","n4083","n4084","n4073"],tags:{building:"yes"}},w703:{id:"w703",nodes:["n4085","n4093","n4086","n4087","n4088","n4089","n4090","n4091","n4092","n4085"],tags:{building:"yes"}},w704:{id:"w704",nodes:["n4093","n4094","n4095","n4096"],tags:{barrier:"fence"}},w705:{id:"w705",nodes:["n4097","n4098","n4099","n4100","n4097"],tags:{building:"yes"}},w706:{id:"w706",nodes:["n4098","n4102","n4087"],tags:{barrier:"fence"}},w707:{id:"w707",nodes:["n4101","n4102","n4096","n4170","n4103"],tags:{barrier:"fence"}},w708:{id:"w708",nodes:["n4104","n4105","n4106","n4107","n4104"],tags:{access:"private",leisure:"swimming_pool"}},w709:{id:"w709",nodes:["n4108","n4109","n4110","n4111","n4108"],tags:{building:"yes"}},w71:{id:"w71",nodes:["n329","n331"],tags:{bridge:"yes",footway:"sidewalk",highway:"footway",layer:"1"}},w710:{id:"w710",nodes:["n4112","n4113","n4114","n4115","n4116","n4117","n4118","n4119","n4112"],tags:{building:"yes"}},w711:{id:"w711",nodes:["n4120","n4121","n4122","n4123","n4120"],tags:{building:"yes"}},w712:{id:"w712",nodes:["n4124","n4125","n4126","n4127","n4128","n4129","n4124"],tags:{building:"yes"}},w713:{id:"w713",nodes:["n4130","n4131","n4132","n4133","n4130"],tags:{building:"shed"}},w714:{id:"w714",nodes:["n4134","n4135","n4136","n4137","n4138","n4139","n4140","n4141","n4142","n4143","n4134"],tags:{building:"yes"}},w715:{id:"w715",nodes:["n4144","n4145","n4146","n4147","n4148","n4149","n4144"],tags:{building:"yes"}},w716:{id:"w716",nodes:["n4150","n4151","n4152","n4153","n4150"],tags:{building:"yes"}},w717:{id:"w717",nodes:["n4154","n4155","n4156","n4157","n4154"],tags:{building:"yes"}},w718:{id:"w718",nodes:["n4158","n4159","n4160","n4161","n4162","n4163","n4164","n4165","n4158"],tags:{building:"yes"}},w719:{id:"w719",nodes:["n4166","n4167","n4168","n4169","n4166"],tags:{building:"yes"}},w72:{id:"w72",nodes:["n331","n344","n332","n333","n334"],tags:{footway:"sidewalk",highway:"footway"}},w720:{id:"w720",nodes:["n4170","n4171"],tags:{barrier:"fence"}},w721:{id:"w721",nodes:["n4138","n4103"],tags:{barrier:"fence"}},w722:{id:"w722",nodes:["n4103","n4172"],tags:{barrier:"fence"}},w723:{id:"w723",nodes:["n4173","n4174"],tags:{barrier:"fence"}},w724:{id:"w724",nodes:["n4175","n4176","n4177","n4178","n4175"],tags:{building:"yes"}},w725:{id:"w725",nodes:["n4179","n4180","n4181","n4182","n4183","n4184","n4179"],tags:{building:"yes"}},w726:{id:"w726",nodes:["n4185","n4186","n4187","n4188","n4185"],tags:{building:"yes"}},w727:{id:"w727",nodes:["n4189","n4190","n4191","n4192","n4193","n4194","n4195","n4196","n4197","n4198","n4199","n4200","n4201","n4202","n4189"],tags:{building:"yes"}},w728:{id:"w728",nodes:["n4203","n4204","n4205","n4206","n4207","n4208","n4209","n4210","n4203"],tags:{building:"yes"}},w729:{id:"w729",nodes:["n4211","n4212","n4213","n4214","n4211"],tags:{building:"shed"}},w73:{id:"w73",nodes:["n335","n336","n337","n338","n339","n340","n341","n342","n335"],tags:{building:"yes"}},w730:{id:"w730",nodes:["n4215","n4216","n4217","n4218","n4215"],tags:{building:"yes"}},w731:{id:"w731",nodes:["n4219","n4220","n4221","n4222","n4223","n4224","n4225","n4226","n4227","n4228","n4229","n4230","n4219"],tags:{building:"yes"}},w732:{id:"w732",nodes:["n4231","n4232","n4233","n4234","n4235","n4236","n4237","n4238","n4231"],tags:{building:"yes"}},w733:{id:"w733",nodes:["n4239","n4240","n4241","n4242","n4243","n4244","n4245","n4246","n4247","n4248","n4241"],tags:{highway:"service"}},w734:{id:"w734",nodes:["n4240","n4249","n4248"],tags:{highway:"service",service:"parking_aisle"}},w735:{id:"w735",nodes:["n4250","n4251","n4252","n4253","n4254","n4255","n4256","n4257","n4258","n4250"],tags:{amenity:"parking"}},w736:{id:"w736",nodes:["n4259","n4260","n4261","n4262","n4259"],tags:{building:"yes"}},w737:{id:"w737",nodes:["n4263","n4264","n4265","n4266","n4267","n4268","n4269","n4270","n4271","n4272","n4273","n4274","n4275","n4276","n4263"],tags:{building:"yes"}},w738:{id:"w738",nodes:["n4277","n4278","n4279","n4280","n4281","n4282","n4277"],tags:{building:"yes"}},w739:{id:"w739",nodes:["n4283","n4284","n4285","n4286","n4287","n4288","n4289","n4290","n4291","n4292","n4293","n4294","n4283"],tags:{building:"yes"}},w74:{id:"w74",nodes:["n343","n344","n345"],tags:{highway:"service"}},w740:{id:"w740",nodes:["n4295","n4296","n4297","n4298","n4295"],tags:{building:"yes"}},w741:{id:"w741",nodes:["n4299","n4300","n4301","n4302","n4303","n4304","n4305","n4306","n4307","n4308","n4309","n4310","n4299"],tags:{building:"yes"}},w742:{id:"w742",nodes:["n4311","n4312","n4313","n4314","n4311"],tags:{building:"shed"}},w743:{id:"w743",nodes:["n4315","n4316","n4317","n4318","n4319","n4320","n4315"],tags:{building:"yes"}},w744:{id:"w744",nodes:["n4321","n4322","n4323","n4324","n4325","n4326","n4327","n4328","n4329","n4330","n4331","n4332","n4333","n4334","n4321"],tags:{building:"yes"}},w745:{id:"w745",nodes:["n4335","n4336","n4337","n4338","n4335"],tags:{building:"shed"}},w746:{id:"w746",nodes:["n4339","n4340","n4341","n4342","n4343","n4344","n4339"],tags:{building:"yes"}},w747:{id:"w747",nodes:["n4345","n4346","n4347","n4348","n4345"],tags:{building:"yes"}},w748:{id:"w748",nodes:["n4349","n4350","n4351","n4352","n4349"],tags:{building:"yes"}},w749:{id:"w749",nodes:["n4353","n4354","n4355","n4356","n4357","n4358","n4353"],tags:{building:"yes"}},w75:{id:"w75",nodes:["n346","n347","n348","n349","n350","n351","n346"],tags:{amenity:"parking"}},w750:{id:"w750",nodes:["n4612","n4359","n4360"],tags:{barrier:"fence"}},w751:{id:"w751",nodes:["n4361","n4362","n4363","n4364","n4361"],tags:{building:"yes"}},w752:{id:"w752",nodes:["n4365","n4366","n4367","n4368","n4365"],tags:{building:"yes"}},w753:{id:"w753",nodes:["n4369","n4370","n4371","n4372","n4375","n4369"],tags:{building:"yes"}},w754:{id:"w754",nodes:["n4373","n4374","n4375"],tags:{barrier:"fence"}},w755:{id:"w755",nodes:["n4376","n4377","n4378","n4379","n4376"],tags:{building:"shed"}},w756:{id:"w756",nodes:["n4380","n4381","n4382","n4383","n4384","n4385","n4386","n4387","n4388","n4389","n4390","n4391","n4380"],tags:{building:"yes"}},w757:{id:"w757",nodes:["n4392","n4393","n4394","n4395","n4392"],tags:{building:"yes"}},w758:{id:"w758",nodes:["n4396","n4397","n4398","n4399","n4396"],tags:{building:"shed"}},w759:{id:"w759",nodes:["n4400","n4401","n4402","n4403","n4404","n4405","n4406","n4407","n4408","n4409","n4410","n4411","n4412","n4413","n4414","n4415","n4400"],tags:{building:"yes"}},w76:{id:"w76",nodes:["n2561","n359","n2563","n2793","n357","n356","n2792","n355","n354","n2791","n2562","n353","n352","n358","n2561"],tags:{highway:"service",oneway:"yes",service:"parking_aisle"}},w760:{id:"w760",nodes:["n4416","n4417"],tags:{barrier:"fence"}},w761:{id:"w761",nodes:["n4418","n4416","n4419"],tags:{barrier:"fence"}},w762:{id:"w762",nodes:["n4420","n4421"],tags:{barrier:"fence"}},w763:{id:"w763",nodes:["n4422","n4423","n4424","n4425","n4426","n4427","n4428","n4429","n4430","n4431","n4432","n4433","n4422"],tags:{building:"yes"}},w764:{id:"w764",nodes:["n4434","n4435","n4436","n4437","n4438","n4439","n4440","n4441","n4442","n4445","n4444","n4443","n4434"],tags:{building:"yes"}},w765:{id:"w765",nodes:["n4446","n4447","n4448","n4449","n4446"],tags:{building:"yes"}},w766:{id:"w766",nodes:["n4450","n4451","n4452","n4453","n4450"],tags:{building:"yes"}},w767:{id:"w767",nodes:["n4454","n4455","n4456","n4457","n4454"],tags:{building:"yes"}},w768:{id:"w768",nodes:["n4461","n4458","n4460"],tags:{footway:"crossing",highway:"footway"}},w769:{id:"w769",nodes:["n4460","n4462","n4459"],tags:{footway:"sidewalk",highway:"footway"}},w77:{id:"w77",nodes:["n325","n360","n361"],tags:{footway:"crossing",highway:"footway"}},w770:{id:"w770",nodes:["n4462","n4463","n4464"],tags:{crossing:"marked",footway:"crossing",highway:"footway"}},w771:{id:"w771",nodes:["n4464","n4465","n4466","n4467"],tags:{footway:"sidewalk",highway:"footway"}},w772:{id:"w772",nodes:["n3959","n3968","n3971","n3960","n3961","n3962","n3963"],tags:{footway:"sidewalk",highway:"footway"}},w773:{id:"w773",nodes:["n4467","n4468","n3959"],tags:{footway:"crossing",highway:"footway"}},w774:{id:"w774",nodes:["n4459","n4469","n4470"],tags:{footway:"crossing",highway:"footway"}},w775:{id:"w775",nodes:["n4470","n4471","n4472","n4473","n4474","n4475"],tags:{footway:"sidewalk",highway:"footway"}},w776:{id:"w776",nodes:["n4475","n4476","n4477"],tags:{footway:"crossing",highway:"footway"}},w777:{id:"w777",nodes:["n4477","n4478","n4479","n4480","n4481","n4482","n4483","n4484","n4485","n4486","n4487"],tags:{footway:"sidewalk",highway:"footway"}},w778:{id:"w778",nodes:["n4488","n4489","n4490","n4491","n4488"],tags:{building:"yes"}},w779:{id:"w779",nodes:["n4492","n4493","n4494","n4495","n4492"],tags:{building:"yes"}},w78:{id:"w78",nodes:["n361","n362","n369"],tags:{footway:"sidewalk",highway:"footway"}},w780:{id:"w780",nodes:["n4496","n4497","n4498","n4499","n4496"],tags:{access:"private",leisure:"swimming_pool"}},w781:{id:"w781",nodes:["n4508","n4509"],tags:{footway:"sidewalk",highway:"footway"}},w782:{id:"w782",nodes:["n4510","n4511"],tags:{footway:"sidewalk",highway:"footway"}},w783:{id:"w783",nodes:["n4512","n4513"],tags:{footway:"sidewalk",highway:"footway"}},w784:{id:"w784",nodes:["n4513","n4514"],tags:{footway:"sidewalk",highway:"footway"}},w785:{id:"w785",nodes:["n4515","n4516"],tags:{footway:"sidewalk",highway:"footway"}},w786:{id:"w786",nodes:["n4517","n4515"],tags:{footway:"sidewalk",highway:"footway"}},w787:{id:"w787",nodes:["n4518","n4519"],tags:{footway:"sidewalk",highway:"footway"}},w788:{id:"w788",nodes:["n4519","n4520","n4513"],tags:{footway:"crossing",highway:"footway"}},w789:{id:"w789",nodes:["n4515","n4521","n4513"],tags:{footway:"crossing",highway:"footway"}},w79:{id:"w79",nodes:["n362","n363","n334"],tags:{crossing:"marked",footway:"crossing",highway:"footway"}},w790:{id:"w790",nodes:["n4515","n4522","n4523"],tags:{footway:"crossing",highway:"footway"}},w791:{id:"w791",nodes:["n4523","n4524","n4519"],tags:{footway:"crossing",highway:"footway"}},w792:{id:"w792",nodes:["n4523","n4525"],tags:{footway:"sidewalk",highway:"footway"}},w793:{id:"w793",nodes:["n4525","n4526","n4527"],tags:{footway:"crossing",highway:"footway"}},w794:{id:"w794",nodes:["n4527","n4529"],tags:{footway:"sidewalk",highway:"footway"}},w795:{id:"w795",nodes:["n4529","n4530","n4518"],tags:{footway:"crossing",highway:"footway"}},w796:{id:"w796",nodes:["n4518","n4531"],tags:{footway:"sidewalk",highway:"footway"}},w797:{id:"w797",nodes:["n4531","n4532"],tags:{footway:"sidewalk",highway:"footway"}},w798:{id:"w798",nodes:["n4533","n4534"],tags:{footway:"sidewalk",highway:"footway"}},w799:{id:"w799",nodes:["n4518","n4538","n4539"],tags:{footway:"crossing",highway:"footway"}},w8:{id:"w8",nodes:["n46","n47","n145","n48","n49","n46"],tags:{amenity:"parking"}},w80:{id:"w80",nodes:["n334","n364","n365"],tags:{crossing:"marked",footway:"crossing",highway:"footway"}},w800:{id:"w800",nodes:["n4539","n4540","n4541"],tags:{footway:"crossing",highway:"footway"}},w801:{id:"w801",nodes:["n4541","n4542","n4529"],tags:{footway:"crossing",highway:"footway"}},w802:{id:"w802",nodes:["n4552","n4553"],tags:{footway:"sidewalk",highway:"footway"}},w803:{id:"w803",nodes:["n4554","n4555","n4556","n4557","n4558","n4559","n4554"],tags:{building:"yes"}},w804:{id:"w804",nodes:["n4562","n4563"],tags:{barrier:"retaining_wall"}},w805:{id:"w805",nodes:["n4568","n4569","n4570","n4571","n4568"],tags:{building:"yes"}},w806:{id:"w806",nodes:["n3473","n4575","n4576","n4581","n4580","n3551"],tags:{highway:"residential",oneway:"yes"}},w807:{id:"w807",nodes:["n4613","n4614","n4615","n4616","n4617","n4618","n4619","n4620","n4613"],tags:{leisure:"pitch",sport:"baseball"}},w808:{id:"w808",nodes:["n4621","n4622","n4623","n4624","n4625","n4626","n4627","n4628","n4629","n4630"],tags:{highway:"service"}},w809:{id:"w809",nodes:["n4631","n4632","n4633","n4637","n4634","n4638","n4635","n4636"],tags:{highway:"service"}},w81:{id:"w81",nodes:["n365","n366","n367"],tags:{crossing:"marked",footway:"crossing",highway:"footway"}},w810:{id:"w810",nodes:["n4639","n4640","n4641"],tags:{barrier:"fence"}},w811:{id:"w811",nodes:["n4649","n4650","n4651","n4652","n4649"],tags:{building:"yes"}},w812:{id:"w812",nodes:["n4654","n4655"],tags:{barrier:"fence"}},w813:{id:"w813",nodes:["n4656","n4657"],tags:{barrier:"fence"}},w814:{id:"w814",nodes:["n4669","n4670","n4671","n4672","n4669"],tags:{amenity:"shelter",building:"yes",shelter_type:"picnic_shelter"}},w815:{id:"w815",nodes:["n4678","n4679","n4680","n1889"],tags:{highway:"service"}},w816:{id:"w816",nodes:["n239","n4686","n4687"],tags:{crossing:"marked",footway:"crossing",highway:"footway"}},w817:{id:"w817",nodes:["n4687","n4688","n4689"],tags:{crossing:"marked",footway:"crossing",highway:"footway"}},w818:{id:"w818",nodes:["n4689","n4690","n307"],tags:{crossing:"marked",footway:"crossing",highway:"footway"}},w819:{id:"w819",nodes:["n2266","n4743"],tags:{highway:"path"}},w82:{id:"w82",nodes:["n724","n368","n369"],tags:{crossing:"marked",footway:"crossing",highway:"footway"}},w820:{id:"w820",nodes:["n4785","n4786","n4787","n4788","n1684","n4760","n4769","n4761","n4762","n4763","n4764","n4765","n4766","n4767","n4768","n4785"],tags:{natural:"wood"}},w821:{id:"w821",nodes:["n4769","n4770","n4771","n4772","n4773","n4774","n4775","n4776","n4777","n4778","n4779","n4780","n4781","n4782","n4783","n4784","n4785","n4768","n4767","n4766","n4765","n4764","n4763","n4762","n4761","n4769"],tags:{natural:"scrub"}},w822:{id:"w822",nodes:["n4772","n4789","n4790","n4791","n4792","n4793","n4794","n4795","n4796","n4797","n4798","n4799","n4783","n4782","n4781","n4780","n4779","n4778","n4777","n4776","n4775","n4774","n4773","n4772"],tags:{natural:"wood"}},w823:{id:"w823",nodes:["n4800","n4801","n4802","n4803","n4804","n4805","n4806","n4807","n4808","n4809","n4810","n4811","n4812","n4813","n4814","n4815","n4816","n3490","n3489","n4800"],tags:{natural:"wood"}},w824:{id:"w824",nodes:["n4817","n4818","n4819","n4820","n4821","n4822","n4817"],tags:{landuse:"recreation_ground"}},w825:{id:"w825",nodes:["n4563","n4823","n4824","n4829","n4825","n4826","n4827","n4828","n4562","n4563"],tags:{landuse:"recreation_ground"}},w826:{id:"w826",nodes:["n4830","n4831","n4832","n4833","n4834","n4835","n4836","n4830"],tags:{landuse:"industrial"}},w827:{id:"w827",nodes:["n4563","n4837","n4838","n4839","n4840","n4841","n4842","n4827","n4828","n4562","n4563"],tags:{landuse:"industrial"}},w828:{id:"w828",nodes:["n4843","n4844","n4845","n4846","n4843"],tags:{landuse:"farmland"}},w829:{id:"w829",nodes:["n3712","n4847","n4848","n4849","n4850","n4851","n4852","n4858","n4864","n4959","n4960","n4853","n4857","n4854","n4855","n4856","n3712"],tags:{aeroway:"aerodrome",name:"Three Rivers Municipal Airport"}},w83:{id:"w83",nodes:["n371","n372","n373","n374","n371"],tags:{building:"yes"}},w830:{id:"w830",nodes:["n4855","n4854","n4857","n4853","n4960"],tags:{barrier:"fence"}},w831:{id:"w831",nodes:["n4860","n4859","n4858","n4852","n4851"],tags:{barrier:"fence"}},w832:{id:"w832",nodes:["n4866","n4878","n4869","n4867"],tags:{aeroway:"runway",ref:"5/23"}},w833:{id:"w833",nodes:["n4868","n4890","n4894","n4881","n4869","n4905","n4870"],tags:{aeroway:"runway",ref:"9/27"}},w834:{id:"w834",nodes:["n4871","n4875","n4872","n4895","n4873","n4874","n4871"],tags:{aeroway:"apron"}},w835:{id:"w835",nodes:["n4875","n4876","n4877","n4878","n4879","n4880","n4882","n4881"],tags:{aeroway:"taxiway"}},w836:{id:"w836",nodes:["n4882","n4893","n4883","n4891","n4884","n4885","n4886","n4887","n4888","n4892","n4889","n4890"],tags:{aeroway:"taxiway"}},w837:{id:"w837",nodes:["n4893","n4894"],tags:{aeroway:"taxiway"}},w838:{id:"w838",nodes:["n4895","n4896","n4897","n4898","n4899","n4900","n4901","n4902","n4903","n4906","n4904","n4905"],tags:{aeroway:"taxiway"}},w839:{id:"w839",nodes:["n4907","n4908"],tags:{highway:"service"}},w84:{id:"w84",nodes:["n374","n375","n376","n377","n373","n374"],tags:{building:"yes"}},w840:{id:"w840",nodes:["n4909","n4907","n4910"],tags:{highway:"service"}},w841:{id:"w841",nodes:["n4911","n4912","n4913","n4914","n4911"],tags:{building:"yes"}},w842:{id:"w842",nodes:["n4915","n4916","n4917","n4918","n4915"],tags:{aeroway:"hangar",building:"yes"}},w843:{id:"w843",nodes:["n4919","n4920","n4921","n4922","n4919"],tags:{building:"yes"}},w844:{id:"w844",nodes:["n4923","n4924","n4925","n4926","n4923"],tags:{aeroway:"hangar",building:"yes"}},w845:{id:"w845",nodes:["n4927","n4928","n4929","n4930","n4927"],tags:{aeroway:"hangar",building:"yes"}},w846:{id:"w846",nodes:["n4931","n4932","n4933","n4934","n4931"],tags:{aeroway:"hangar",building:"yes"}},w847:{id:"w847",nodes:["n4935","n4936","n4937","n4938","n4935"],tags:{aeroway:"hangar",building:"yes"}},w848:{id:"w848",nodes:["n4939","n4940","n4941","n4942","n4939"],tags:{aeroway:"hangar",building:"yes"}},w849:{id:"w849",nodes:["n4943","n4944","n4945","n4946","n4943"],tags:{aeroway:"hangar",building:"yes"}},w85:{id:"w85",nodes:["n431","n432","n1038","n433","n434","n1040","n431"],tags:{building:"yes"}},w850:{id:"w850",nodes:["n4947","n4948","n4949","n4950","n4947"],tags:{aeroway:"hangar",building:"yes"}},w851:{id:"w851",nodes:["n4951","n4952","n4953","n4954","n4951"],tags:{aeroway:"hangar",building:"yes"}},w852:{id:"w852",nodes:["n4955","n4956","n4957","n4958","n4955"],tags:{aeroway:"hangar",building:"yes"}},w853:{id:"w853",nodes:["n4959","n4864","n4861","n4862","n4863"],tags:{barrier:"fence"}},w854:{id:"w854",nodes:["n4961","n4962","n4963","n4964","n4965","n4966","n4967","n4968","n4969","n4961"],tags:{landuse:"farmland"}},w855:{id:"w855",nodes:["n4970","n4971","n4972","n4973","n4974","n4975","n4976","n4977","n4978","n4980","n4970"],tags:{landuse:"farmland"}},w856:{id:"w856",nodes:["n4979","n4980","n4978","n4981","n4982","n4983","n4984","n4985","n4979"],tags:{natural:"scrub"}},w857:{id:"w857",nodes:["n4986","n4987","n4988","n5032","n4989","n4990","n4991","n4992","n4993","n4994","n4995","n4996","n4997","n4998","n4999","n5000","n5001","n5002","n5022","n5023","n5024","n5025","n5030","n5031","n5029","n5028","n5027","n5026","n4986"],tags:{landuse:"farmland"}},w858:{id:"w858",nodes:["n5001","n5003","n5004","n4999","n5000","n5001"],tags:{natural:"scrub"}},w859:{id:"w859",nodes:["n5005","n5006","n5007","n5008","n5009","n5010","n5021","n5020","n5019","n5011","n5012","n5013","n5018","n5014","n5015","n5017","n5016","n5005"],tags:{landuse:"farmland"}},w86:{id:"w86",nodes:["n384","n385","n386","n387","n384"],tags:{building:"yes"}},w860:{id:"w860",nodes:["n3020","n5033","n5034","n5035","n3179","n3180","n3191","n3181","n3190","n3182","n3183","n3184","n3185","n3186","n3187","n3188","n3189","n3160","n3161","n3162","n2126","n2153","n2288","n3020"],tags:{landuse:"industrial"}},w87:{id:"w87",nodes:["n387","n388","n389","n386","n387"],tags:{building:"yes"}},w88:{id:"w88",nodes:["n390","n391","n392","n393","n390"],tags:{building:"yes"}},w89:{id:"w89",nodes:["n394","n2895"],tags:{highway:"service"}},w9:{id:"w9",nodes:["n50","n51","n148","n52","n57","n891","n53","n50"],tags:{building:"yes"}},w90:{id:"w90",nodes:["n398","n399","n400","n401","n402","n403","n404","n405","n406","n407","n408","n409","n410","n411","n412","n413","n414","n415","n416","n417","n398"],tags:{building:"yes"}},w91:{id:"w91",nodes:["n418","n423","n419"],tags:{highway:"service"}},w92:{id:"w92",nodes:["n420","n421","n422","n423","n420"],tags:{amenity:"parking"}},w93:{id:"w93",nodes:["n2282","n1876"],tags:{name:"Rocky River",tunnel:"building_passage",waterway:"river"}},w94:{id:"w94",nodes:["n1876","n885","n1875","n2234"],tags:{name:"Rocky River",waterway:"river"}},w95:{id:"w95",nodes:["n425","n426","n427","n914","n428","n913","n425"],tags:{building:"yes"}},w96:{id:"w96",nodes:["n456","n620","n1034","n1035","n456"],tags:{building:"yes"}},w97:{id:"w97",nodes:["n435","n912","n451","n321"],tags:{highway:"footway"}},w98:{id:"w98",nodes:["n436","n319","n437","n438","n439","n440","n441","n476","n442"],tags:{highway:"service"}},w99:{id:"w99",nodes:["n443","n444","n445","n446","n447","n448","n449","n450","n443"],tags:{amenity:"parking"}},n2934:{id:"n2934",loc:[-85.617051,41.952263]},n2935:{id:"n2935",loc:[-85.61699,41.952276]},n2937:{id:"n2937",loc:[-85.616847,41.952262]},n2938:{id:"n2938",loc:[-85.616577,41.951956]},n2939:{id:"n2939",loc:[-85.61656,41.952044]},n3348:{id:"n3348",loc:[-85.61714,41.9522]},n3349:{id:"n3349",loc:[-85.616517,41.95212]},n3350:{id:"n3350",loc:[-85.616489,41.952033]},n3351:{id:"n3351",loc:[-85.616529,41.951907]},n3354:{id:"n3354",loc:[-85.616488,41.951994]}};
 
-          header.selectAll('.preset-reset')
-              .on('click', function() {
-                  dispatch$$1.call('choose', this, _activePreset);
-              });
+  // Tooltips and svg mask used to highlight certain features
+  function uiCurtain() {
 
+      var surface = select(null),
+          tooltip = select(null),
+          darkness = select(null);
 
-          // Body
-          var body = selection$$1.selectAll('.inspector-body')
-              .data([0]);
+      function curtain(selection) {
+          surface = selection
+              .append('svg')
+              .attr('id', 'curtain')
+              .style('z-index', 1000)
+              .style('pointer-events', 'none')
+              .style('position', 'absolute')
+              .style('top', 0)
+              .style('left', 0);
 
-          // Enter
-          var bodyEnter = body.enter()
-              .append('div')
-              .attr('class', 'inspector-body');
+          darkness = surface.append('path')
+              .attr('x', 0)
+              .attr('y', 0)
+              .attr('class', 'curtain-darkness');
 
-          bodyEnter
-              .append('div')
-              .attr('class', 'preset-list-item inspector-inner')
-              .append('div')
-              .attr('class', 'preset-list-button-wrap')
-              .append('button')
-              .attr('class', 'preset-list-button preset-reset')
-              .call(tooltip().title(t('inspector.back_tooltip')).placement('bottom'))
-              .append('div')
-              .attr('class', 'label')
-              .append('div')
-              .attr('class', 'label-inner');
+          select(window).on('resize.curtain', resize);
 
-          bodyEnter
-              .append('div')
-              .attr('class', 'preset-quick-links');
+          tooltip = selection.append('div')
+              .attr('class', 'tooltip')
+              .style('z-index', 1002);
 
-          bodyEnter
+          tooltip
               .append('div')
-              .attr('class', 'preset-editor');
+              .attr('class', 'tooltip-arrow');
 
-          bodyEnter
+          tooltip
               .append('div')
-              .attr('class', 'raw-tag-editor inspector-inner');
+              .attr('class', 'tooltip-inner');
 
-          bodyEnter
-              .append('div')
-              .attr('class', 'raw-member-editor inspector-inner');
+          resize();
 
-          bodyEnter
-              .append('div')
-              .attr('class', 'raw-membership-editor inspector-inner');
 
-          bodyEnter
-              .append('input')
-              .attr('type', 'text')
-              .attr('class', 'key-trap');
+          function resize() {
+              surface
+                  .attr('width', window.innerWidth)
+                  .attr('height', window.innerHeight);
+              curtain.cut(darkness.datum());
+          }
+      }
 
 
-          // Update
-          body = body
-              .merge(bodyEnter);
+      /**
+       * Reveal cuts the curtain to highlight the given box,
+       * and shows a tooltip with instructions next to the box.
+       *
+       * @param  {String|ClientRect} [box]   box used to cut the curtain
+       * @param  {String}    [text]          text for a tooltip
+       * @param  {Object}    [options]
+       * @param  {string}    [options.tooltipClass]    optional class to add to the tooltip
+       * @param  {integer}   [options.duration]        transition time in milliseconds
+       * @param  {string}    [options.buttonText]      if set, create a button with this text label
+       * @param  {function}  [options.buttonCallback]  if set, the callback for the button
+       * @param  {String|ClientRect} [options.tooltipBox]  box for tooltip position, if different from box for the curtain
+       */
+      curtain.reveal = function(box, text, options) {
+          if (typeof box === 'string') {
+              box = select(box).node();
+          }
+          if (box && box.getBoundingClientRect) {
+              box = copyBox(box.getBoundingClientRect());
+          }
 
-          // update header
-          if (_tagReference) {
-              body.selectAll('.preset-list-button-wrap')
-                  .call(_tagReference.button);
+          options = options || {};
 
-              body.selectAll('.preset-list-item')
-                  .call(_tagReference.body);
+          var tooltipBox;
+          if (options.tooltipBox) {
+              tooltipBox = options.tooltipBox;
+              if (typeof tooltipBox === 'string') {
+                  tooltipBox = select(tooltipBox).node();
+              }
+              if (tooltipBox && tooltipBox.getBoundingClientRect) {
+                  tooltipBox = copyBox(tooltipBox.getBoundingClientRect());
+              }
+          } else {
+              tooltipBox = box;
           }
 
-          body.selectAll('.preset-reset')
-              .on('click', function() {
-                  dispatch$$1.call('choose', this, _activePreset);
-              });
+          if (tooltipBox && text) {
+              // pseudo markdown bold text for the instruction section..
+              var parts = text.split('**');
+              var html = parts[0] ? '<span>' + parts[0] + '</span>' : '';
+              if (parts[1]) {
+                  html += '<span class="instruction">' + parts[1] + '</span>';
+              }
 
-          body.select('.preset-list-item button')
-              .call(uiPresetIcon()
-                  .geometry(context.geometry(_entityID))
-                  .preset(_activePreset)
-              );
+              html = html.replace(/\*(.*?)\*/g, '<em>$1</em>');   // emphasis
+              html = html.replace(/\{br\}/g, '<br/><br/>');       // linebreak
 
-          // NOTE: split on en-dash, not a hypen (to avoid conflict with hyphenated names)
-          var label = body.select('.label-inner');
-          var nameparts = label.selectAll('.namepart')
-              .data(_activePreset.name().split(' – '), function(d) { return d; });
+              if (options.buttonText && options.buttonCallback) {
+                  html += '<div class="button-section">' +
+                      '<button href="#" class="button action col8">' + options.buttonText + '</button></div>';
+              }
 
-          nameparts.exit()
-              .remove();
+              var classes = 'curtain-tooltip tooltip in ' + (options.tooltipClass || '');
+              tooltip
+                  .classed(classes, true)
+                  .selectAll('.tooltip-inner')
+                  .html(html);
 
-          nameparts
-              .enter()
-              .append('div')
-              .attr('class', 'namepart')
-              .text(function(d) { return d; });
+              if (options.buttonText && options.buttonCallback) {
+                  var button = tooltip.selectAll('.button-section .button.action');
+                  button
+                      .on('click', function() {
+                          event.preventDefault();
+                          options.buttonCallback();
+                      });
+              }
 
+              var tip = copyBox(tooltip.node().getBoundingClientRect()),
+                  w = window.innerWidth,
+                  h = window.innerHeight,
+                  tooltipWidth = 200,
+                  tooltipArrow = 5,
+                  side, pos;
 
-          // update quick links
-          var choices = [{
-              id: 'zoom_to',
-              label: 'inspector.zoom_to.title',
-              tooltip: function() {
-                  return uiTooltipHtml(t('inspector.zoom_to.tooltip_feature'), t('inspector.zoom_to.key'));
-              },
-              click: function zoomTo() {
-                  context.mode().zoomToSelected();
-              }
-          }];
 
-          body.select('.preset-quick-links')
-              .call(quickLinks.choices(choices));
+              // hack: this will have bottom placement,
+              // so need to reserve extra space for the tooltip illustration.
+              if (options.tooltipClass === 'intro-mouse') {
+                  tip.height += 80;
+              }
 
+              // trim box dimensions to just the portion that fits in the window..
+              if (tooltipBox.top + tooltipBox.height > h) {
+                  tooltipBox.height -= (tooltipBox.top + tooltipBox.height - h);
+              }
+              if (tooltipBox.left + tooltipBox.width > w) {
+                  tooltipBox.width -= (tooltipBox.left + tooltipBox.width - w);
+              }
 
-          // update editor sections
-          body.select('.preset-editor')
-              .call(presetEditor
-                  .preset(_activePreset)
-                  .entityID(_entityID)
-                  .tags(tags)
-                  .state(_state)
-              );
+              // determine tooltip placement..
 
-          body.select('.raw-tag-editor')
-              .call(rawTagEditor
-                  .preset(_activePreset)
-                  .entityID(_entityID)
-                  .tags(tags)
-                  .state(_state)
-              );
+              if (tooltipBox.top + tooltipBox.height < 100) {
+                  // tooltip below box..
+                  side = 'bottom';
+                  pos = [
+                      tooltipBox.left + tooltipBox.width / 2 - tip.width / 2,
+                      tooltipBox.top + tooltipBox.height
+                  ];
 
-          if (entity.type === 'relation') {
-              body.select('.raw-member-editor')
-                  .style('display', 'block')
-                  .call(rawMemberEditor
-                      .entityID(_entityID)
-                  );
-          } else {
-              body.select('.raw-member-editor')
-                  .style('display', 'none');
-          }
+              } else if (tooltipBox.top > h - 140) {
+                  // tooltip above box..
+                  side = 'top';
+                  pos = [
+                      tooltipBox.left + tooltipBox.width / 2 - tip.width / 2,
+                      tooltipBox.top - tip.height
+                  ];
 
-          body.select('.raw-membership-editor')
-              .call(rawMembershipEditor
-                  .entityID(_entityID)
-              );
+              } else {
+                  // tooltip to the side of the tooltipBox..
+                  var tipY = tooltipBox.top + tooltipBox.height / 2 - tip.height / 2;
 
-          body.select('.key-trap')
-              .on('keydown.key-trap', function() {
-                  // On tabbing, send focus back to the first field on the inspector-body
-                  // (probably the `name` field) #4159
-                  if (event.keyCode === 9 && !event.shiftKey) {
-                      event.preventDefault();
-                      body.select('input').node().focus();
-                  }
-              });
+                  if (textDirection === 'rtl') {
+                      if (tooltipBox.left - tooltipWidth - tooltipArrow < 70) {
+                          side = 'right';
+                          pos = [tooltipBox.left + tooltipBox.width + tooltipArrow, tipY];
 
-          context.history()
-              .on('change.entity-editor', historyChanged);
+                      } else {
+                          side = 'left';
+                          pos = [tooltipBox.left - tooltipWidth - tooltipArrow, tipY];
+                      }
 
+                  } else {
+                      if (tooltipBox.left + tooltipBox.width + tooltipArrow + tooltipWidth > w - 70) {
+                          side = 'left';
+                          pos = [tooltipBox.left - tooltipWidth - tooltipArrow, tipY];
+                      }
+                      else {
+                          side = 'right';
+                          pos = [tooltipBox.left + tooltipBox.width + tooltipArrow, tipY];
+                      }
+                  }
+              }
 
-          function historyChanged() {
-              if (_state === 'hide') return;
+              if (options.duration !== 0 || !tooltip.classed(side)) {
+                  tooltip.call(uiToggle(true));
+              }
 
-              var entity = context.hasEntity(_entityID);
-              var graph = context.graph();
-              if (!entity) return;
+              tooltip
+                  .style('top', pos[1] + 'px')
+                  .style('left', pos[0] + 'px')
+                  .attr('class', classes + ' ' + side);
 
-              var match = context.presets().match(entity, graph);
-              var activePreset = entityEditor.preset();
-              var weakPreset = activePreset && isEmpty(activePreset.addTags);
 
-              // A "weak" preset doesn't set any tags. (e.g. "Address")
-              // Don't replace a weak preset with a fallback preset (e.g. "Point")
-              if (!(weakPreset && match.isFallback())) {
-                  entityEditor.preset(match);
+              // shift tooltip-inner if it is very close to the top or bottom edge
+              // (doesn't affect the placement of the tooltip-arrow)
+              var shiftY = 0;
+              if (side === 'left' || side === 'right') {
+                  if (pos[1] < 60) {
+                      shiftY = 60 - pos[1];
+                  }
+                  else if (pos[1] + tip.height > h - 100) {
+                      shiftY = h - pos[1] - tip.height - 100;
+                  }
               }
-              entityEditor.modified(_base !== graph);
-              entityEditor(selection$$1);
+              tooltip.selectAll('.tooltip-inner')
+                  .style('top', shiftY + 'px');
+
+          } else {
+              tooltip
+                  .classed('in', false)
+                  .call(uiToggle(false));
           }
-      }
 
+          curtain.cut(box, options.duration);
+
+          return tooltip;
+      };
 
-      // Tag changes that fire on input can all get coalesced into a single
-      // history operation when the user leaves the field.  #2342
-      function changeTags(changed, onInput) {
-          var entity = context.entity(_entityID);
-          var annotation = t('operations.change_tags.annotation');
-          var tags = clone(entity.tags);
 
-          for (var k in changed) {
-              if (!k) continue;
-              var v = changed[k];
-              if (v !== undefined || tags.hasOwnProperty(k)) {
-                  tags[k] = v;
-              }
-          }
+      curtain.cut = function(datum, duration) {
+          darkness.datum(datum)
+              .interrupt();
 
-          if (!onInput) {
-              tags = utilCleanTags(tags);
+          var selection;
+          if (duration === 0) {
+              selection = darkness;
+          } else {
+              selection = darkness
+                  .transition()
+                  .duration(duration || 600)
+                  .ease(linear$1);
           }
 
-          if (!isEqual(entity.tags, tags)) {
-              if (_coalesceChanges) {
-                  context.overwrite(actionChangeTags(_entityID, tags), annotation);
-              } else {
-                  context.perform(actionChangeTags(_entityID, tags), annotation);
-                  _coalesceChanges = !!onInput;
-              }
-          }
-      }
+          selection
+              .attr('d', function(d) {
+                  var string = 'M 0,0 L 0,' + window.innerHeight + ' L ' +
+                      window.innerWidth + ',' + window.innerHeight + 'L' +
+                      window.innerWidth + ',0 Z';
 
+                  if (!d) return string;
+                  return string + 'M' +
+                      d.left + ',' + d.top + 'L' +
+                      d.left + ',' + (d.top + d.height) + 'L' +
+                      (d.left + d.width) + ',' + (d.top + d.height) + 'L' +
+                      (d.left + d.width) + ',' + (d.top) + 'Z';
 
-      entityEditor.modified = function(val) {
-          if (!arguments.length) return _modified;
-          _modified = val;
-          d3_selectAll('button.preset-close use')
-              .attr('xlink:href', (_modified ? '#iD-icon-apply' : '#iD-icon-close'));
-          return entityEditor;
+              });
       };
 
 
-      entityEditor.state = function(val) {
-          if (!arguments.length) return _state;
-          _state = val;
-          return entityEditor;
+      curtain.remove = function() {
+          surface.remove();
+          tooltip.remove();
+          select(window).on('resize.curtain', null);
       };
 
 
-      entityEditor.entityID = function(val) {
-          if (!arguments.length) return _entityID;
-          _entityID = val;
-          _base = context.graph();
-          _coalesceChanges = false;
+      // ClientRects are immutable, so copy them to an object,
+      // in case we need to trim the height/width.
+      function copyBox(src) {
+          return {
+              top: src.top,
+              right: src.right,
+              bottom: src.bottom,
+              left: src.left,
+              width: src.width,
+              height: src.height
+          };
+      }
 
-          // reset the scroll to the top of the inspector
-          var body = d3_selectAll('.entity-editor-pane .inspector-body');
-          if (!body.empty()) {
-              body.node().scrollTop = 0;
-          }
 
-          var presetMatch = context.presets().match(context.entity(_entityID), _base);
+      return curtain;
+  }
 
-          return entityEditor
-              .preset(presetMatch)
-              .modified(false);
+  function uiIntroWelcome(context, reveal) {
+      var dispatch$1 = dispatch('done');
+      var listener = clickListener();
+
+      var chapter = {
+          title: 'intro.welcome.title'
       };
 
 
-      entityEditor.preset = function(val) {
-          if (!arguments.length) return _activePreset;
-          if (val !== _activePreset) {
-              _activePreset = val;
-              _tagReference = uiTagReference(_activePreset.reference(context.geometry(_entityID)), context)
-                  .showing(false);
-          }
-          return entityEditor;
-      };
+      function welcome() {
+          context.map().centerZoom([-85.63591, 41.94285], 19);
+          reveal('.intro-nav-wrap .chapter-welcome',
+              t('intro.welcome.welcome'),
+              { buttonText: t('intro.ok'), buttonCallback: practice }
+          );
+      }
 
+      function practice() {
+          reveal('.intro-nav-wrap .chapter-welcome',
+              t('intro.welcome.practice'),
+              { buttonText: t('intro.ok'), buttonCallback: words }
+          );
+      }
 
-      return utilRebind(entityEditor, dispatch$$1, 'on');
-  }
+      function words() {
+          reveal('.intro-nav-wrap .chapter-welcome',
+              t('intro.welcome.words'),
+              { buttonText: t('intro.ok'), buttonCallback: mouse }
+          );
+      }
 
-  var pair_1 = pair$1;
 
-  function search(x, dims, r) {
-    if (!dims) dims = 'NSEW';
-    if (typeof x !== 'string') return { val: null, regex: r };
+      function mouse() {
+          reveal('.intro-nav-wrap .chapter-welcome',
+              t('intro.welcome.mouse'),
+              { buttonText: t('intro.ok'), buttonCallback: leftClick }
+          );
+      }
 
-    r = r || /[\s\,]*([NSEW])?\s*([\-|\—|\―]?[0-9.]+)°?\s*(?:([0-9.]+)['’′‘]\s*)?(?:([0-9.]+)(?:''|"|”|″)\s*)?([NSEW])?/gi;
 
-    var m = r.exec(x);
-    if (!m) return { val: null, regex: r };
+      function leftClick() {
+          var counter = 0;
+          var times = 5;
 
-    var dim = m[1] || m[5];
-    if (dim && dims.indexOf(dim) === -1) return { val: null, regex: r };
+          var tooltip = reveal('.intro-nav-wrap .chapter-welcome',
+              t('intro.welcome.leftclick', { num: times }),
+              { tooltipClass: 'intro-mouse' }
+          );
 
-    return {
-      val: (((m[2]) ? parseFloat(m[2]) : 0) +
-            ((m[3] ? parseFloat(m[3]) / 60 : 0)) +
-            ((m[4] ? parseFloat(m[4]) / 3600 : 0))) *
-            ((dim === 'S' || dim === 'W') ? -1 : 1),
-      regex: r,
-      raw: m[0],
-      dim: dim
-    };
-  }
+          tooltip.selectAll('.tooltip-inner')
+              .insert('svg', 'span')
+              .attr('class', 'tooltip-illustration')
+              .append('use')
+              .attr('xlink:href', '#iD-walkthrough-mouse');
 
-  function pair$1(x, dims) {
-    x = x.trim();
-    var one = search(x, dims);
-    if (one.val === null) return null;
-    var two = search(x, dims, one.regex);
-    if (two.val === null) return null;
-    // null if one/two are not contiguous.
-    if (one.raw + two.raw !== x) return null;
-    if (one.dim) {
-      return swapdim(one.val, two.val, one.dim);
-    } else {
-      return [one.val, two.val];
-    }
-  }
+          tooltip
+              .append('div')
+              .attr('class', 'counter');
 
-  function swapdim(a, b, dim) {
-    if (dim === 'N' || dim === 'S') return [a, b];
-    if (dim === 'W' || dim === 'E') return [b, a];
-  }
+          tooltip.call(listener);
 
-  /*
-      iD.Difference represents the difference between two graphs.
-      It knows how to calculate the set of entities that were
-      created, modified, or deleted, and also contains the logic
-      for recursively extending a difference to the complete set
-      of entities that will require a redraw, taking into account
-      child and parent relationships.
-   */
-  function coreDifference(base, head) {
-      var _changes = {};
-      var _diff = {};
-      var _length = 0;
-      var i, k, h, b, keys;
+          listener.on('click', function(which) {
+              if (which === 'left') {
+                  select('.curtain-tooltip.intro-mouse .counter')
+                      .text(String(++counter));
 
-      function changed(h, b) {
-          if (h === b) return false;
-          if (!h || !b) return true;
+                  if (counter === times) {
+                      window.setTimeout(function() { continueTo(rightClick); }, 1000);
+                  }
+              }
+          });
 
-          if (h.loc || b.loc) {
-              if (!h.loc && b.loc || h.loc && !b.loc ||
-                  h.loc[0] !== b.loc[0] || h.loc[1] !== b.loc[1]) return true;
-          }
-          if (h.nodes || b.nodes) {
-              if (!isEqual(h.nodes, b.nodes)) return true;
-          }
-          if (h.members || b.members) {
-              if (!isEqual(h.members, b.members)) return true;
+          function continueTo(nextStep) {
+              listener.on('click', null);
+              tooltip.call(listener.off);
+              tooltip.select('.counter').remove();
+              nextStep();
           }
-          return !isEqual(h.tags, b.tags);
       }
 
 
-      keys = Object.keys(head.entities);
-      for (i = 0; i < keys.length; i++) {
-          k = keys[i];
-          h = head.entities[k];
-          b = base.entities[k];
-          if (changed(h, b)) {
-              _changes[k] = {base: b, head: h};
-              _length++;
-          }
-      }
+      function rightClick() {
+          var counter = 0;
+          var times = 5;
 
-      keys = Object.keys(base.entities);
-      for (i = 0; i < keys.length; i++) {
-          k = keys[i];
-          h = head.entities[k];
-          b = base.entities[k];
-          if (!_changes[k] && changed(h, b)) {
-              _changes[k] = {base: b, head: h};
-              _length++;
-          }
-      }
+          var tooltip = reveal('.intro-nav-wrap .chapter-welcome',
+              t('intro.welcome.rightclick', { num: times }),
+              { tooltipClass: 'intro-mouse' }
+          );
 
+          tooltip.selectAll('.tooltip-inner')
+              .insert('svg', 'span')
+              .attr('class', 'tooltip-illustration')
+              .append('use')
+              .attr('xlink:href', '#iD-walkthrough-mouse');
 
-      function addParents(parents, result) {
-          for (var i = 0; i < parents.length; i++) {
-              var parent = parents[i];
+          tooltip
+              .append('div')
+              .attr('class', 'counter');
 
-              if (parent.id in result)
-                  continue;
+          tooltip.call(listener);
 
-              result[parent.id] = parent;
-              addParents(head.parentRelations(parent), result);
+          listener.on('click', function(which) {
+              if (which === 'right') {
+                  select('.curtain-tooltip.intro-mouse .counter')
+                      .text(String(++counter));
+
+                  if (counter === times) {
+                      window.setTimeout(function() { continueTo(chapters); }, 1000);
+                  }
+              }
+          });
+
+          function continueTo(nextStep) {
+              listener.on('click', null);
+              tooltip.call(listener.off);
+              tooltip.select('.counter').remove();
+              nextStep();
           }
       }
 
 
-      _diff.length = function length() {
-          return _length;
-      };
+      function chapters() {
+          dispatch$1.call('done');
+          reveal('.intro-nav-wrap .chapter-navigation',
+              t('intro.welcome.chapters', { next: t('intro.navigation.title') })
+          );
+      }
 
 
-      _diff.changes = function changes() {
-          return _changes;
+      chapter.enter = function() {
+          welcome();
       };
 
 
-      _diff.extantIDs = function extantIDs() {
-          var result = [];
-          forEach(_changes, function(change, id) {
-              if (change.head) result.push(id);
-          });
-          return result;
+      chapter.exit = function() {
+          listener.off();
+          select('.curtain-tooltip.intro-mouse')
+              .selectAll('.counter')
+              .remove();
       };
 
 
-      _diff.modified = function modified() {
-          var result = [];
-          forEach(_changes, function(change) {
-              if (change.base && change.head) result.push(change.head);
-          });
-          return result;
+      chapter.restart = function() {
+          chapter.exit();
+          chapter.enter();
       };
 
 
-      _diff.created = function created() {
-          var result = [];
-          forEach(_changes, function(change) {
-              if (!change.base && change.head) result.push(change.head);
-          });
-          return result;
-      };
+      return utilRebind(chapter, dispatch$1, 'on');
+  }
 
 
-      _diff.deleted = function deleted() {
-          var result = [];
-          forEach(_changes, function(change) {
-              if (change.base && !change.head) result.push(change.base);
-          });
-          return result;
-      };
 
+  function clickListener() {
+      var dispatch$1 = dispatch('click');
+      var minTime = 120;
+      var tooltip = select(null);
+      var down = {};
 
-      _diff.summary = function summary() {
-          var relevant = {};
+      // `down` keeps track of which buttons/keys are down.
+      // Setting a property in `down` happens immediately.
+      // Unsetting a property in `down` is delayed because
+      //   on Windows a contextmenu event happens after keyup/mouseup
 
-          function addEntity(entity, graph, changeType) {
-              relevant[entity.id] = {
-                  entity: entity,
-                  graph: graph,
-                  changeType: changeType
-              };
+      function keydown() {
+          if (event.keyCode === 93)  {   // context menu
+              event.preventDefault();
+              event.stopPropagation();
+              down.menu = event.timeStamp;
+              tooltip.classed('rightclick', true);
           }
+      }
 
-          function addParents(entity) {
-              var parents = head.parentWays(entity);
-              for (var j = parents.length - 1; j >= 0; j--) {
-                  var parent = parents[j];
-                  if (!(parent.id in relevant)) addEntity(parent, head, 'modified');
-              }
-          }
 
-          var keys = Object.keys(_changes);
-          for (var i = 0; i < keys.length; i++) {
-              var change = _changes[keys[i]];
+      function keyup() {
+          if (event.keyCode === 93)  {   // context menu
+              event.preventDefault();
+              event.stopPropagation();
+              var endTime = event.timeStamp;
+              var startTime = down.menu || endTime;
+              var delay = (endTime - startTime < minTime) ? minTime : 0;
 
-              if (change.head && change.head.geometry(head) !== 'vertex') {
-                  addEntity(change.head, head, change.base ? 'modified' : 'created');
+              window.setTimeout(function() {
+                  tooltip.classed('rightclick', false);
+                  down.menu = undefined;  // delayed, for Windows
+              }, delay);
 
-              } else if (change.base && change.base.geometry(base) !== 'vertex') {
-                  addEntity(change.base, base, 'deleted');
+              dispatch$1.call('click', this, 'right');
+          }
+      }
 
-              } else if (change.base && change.head) { // modified vertex
-                  var moved    = !isEqual(change.base.loc,  change.head.loc);
-                  var retagged = !isEqual(change.base.tags, change.head.tags);
 
-                  if (moved) {
-                      addParents(change.head);
-                  }
+      function mousedown() {
+          var button = event.button;
+          if (button === 0 && !event.ctrlKey) {
+              tooltip.classed('leftclick', true);
+          } else if (button === 2) {
+              tooltip.classed('rightclick', true);
+          }
+          down[button] = event.timeStamp;
+      }
 
-                  if (retagged || (moved && change.head.hasInterestingTags())) {
-                      addEntity(change.head, head, 'modified');
-                  }
 
-              } else if (change.head && change.head.hasInterestingTags()) { // created vertex
-                  addEntity(change.head, head, 'created');
+      function mouseup() {
+          var button = event.button;
+          var endTime = event.timeStamp;
+          var startTime = down[button] || endTime;
+          var delay = (endTime - startTime < minTime) ? minTime : 0;
 
-              } else if (change.base && change.base.hasInterestingTags()) { // deleted vertex
-                  addEntity(change.base, base, 'deleted');
-              }
-          }
+          if (button === 0 && !event.ctrlKey) {
+              window.setTimeout(function() {
+                  tooltip.classed('leftclick', false);
+                  down[button] = undefined;  // delayed, for Windows
+              }, delay);
 
-          return values$1(relevant);
-      };
+              dispatch$1.call('click', this, 'left');
 
+          } else if (button === 2) {
+              window.setTimeout(function() {
+                  tooltip.classed('rightclick', false);
+                  down[button] = undefined;  // delayed, for Windows
+              }, delay);
 
-      _diff.complete = function complete(extent) {
-          var result = {};
-          var id, change;
+              dispatch$1.call('click', this, 'right');
 
-          for (id in _changes) {
-              change = _changes[id];
+          } else {
+              window.setTimeout(function() {
+                  down[button] = undefined;  // delayed, for Windows
+              }, delay);
+          }
+      }
 
-              var h = change.head;
-              var b = change.base;
-              var entity = h || b;
 
-              if (extent &&
-                  (!h || !h.intersects(extent, head)) &&
-                  (!b || !b.intersects(extent, base)))
-                  continue;
+      function contextmenu() {
+          event.preventDefault();
+          event.stopPropagation();
+          if (!down[2] && !down.menu) {
+              tooltip.classed('rightclick', true);
+              window.setTimeout(function() {
+                  tooltip.classed('rightclick', false);
+              }, minTime);
+              dispatch$1.call('click', this, 'right');
+          }
+      }
 
-              result[id] = h;
 
-              if (entity.type === 'way') {
-                  var nh = h ? h.nodes : [];
-                  var nb = b ? b.nodes : [];
-                  var diff, i;
+      var behavior = function(selection) {
+          tooltip = selection;
+          down = {};
 
-                  diff = difference(nh, nb);
-                  for (i = 0; i < diff.length; i++) {
-                      result[diff[i]] = head.hasEntity(diff[i]);
-                  }
+          select(window)
+              .on('keydown.intro', keydown)
+              .on('keyup.intro', keyup)
+              .on('mousedown.intro', mousedown)
+              .on('mouseup.intro', mouseup)
+              .on('contextmenu.intro', contextmenu);
+      };
 
-                  diff = difference(nb, nh);
-                  for (i = 0; i < diff.length; i++) {
-                      result[diff[i]] = head.hasEntity(diff[i]);
-                  }
-              }
 
-              addParents(head.parentWays(entity), result);
-              addParents(head.parentRelations(entity), result);
-          }
+      behavior.off = function() {
+          select(window)
+              .on('keydown.intro', null)
+              .on('keyup.intro', null)
+              .on('mousedown.intro', null)
+              .on('mouseup.intro', null)
+              .on('contextmenu.intro', null);
 
-          return result;
+          tooltip
+              .classed('leftclick', false)
+              .classed('rightclick', false);
       };
 
-
-      return _diff;
+      return utilRebind(behavior, dispatch$1, 'on');
   }
 
-  function coreTree(head) {
-      var rtree = rbush_1(),
-          bboxes = {},
-          tree = {};
-
+  function uiIntroNavigation(context, reveal) {
+      var dispatch$1 = dispatch('done');
+      var timeouts = [];
+      var hallId = 'n2061';
+      var townHall = [-85.63591, 41.94285];
+      var springStreetId = 'w397';
+      var springStreetEndId = 'n1834';
+      var springStreet = [-85.63582, 41.94255];
+      var onewayField = context.presets().field('oneway');
+      var maxspeedField = context.presets().field('maxspeed');
 
-      function entityBBox(entity) {
-          var bbox = entity.extent(head).bbox();
-          bbox.id = entity.id;
-          bboxes[entity.id] = bbox;
-          return bbox;
-      }
 
+      var chapter = {
+          title: 'intro.navigation.title'
+      };
 
-      function updateParents(entity, insertions, memo) {
-          head.parentWays(entity).forEach(function(way) {
-              if (bboxes[way.id]) {
-                  rtree.remove(bboxes[way.id]);
-                  insertions[way.id] = way;
-              }
-              updateParents(way, insertions, memo);
-          });
 
-          head.parentRelations(entity).forEach(function(relation) {
-              if (memo[entity.id]) return;
-              memo[entity.id] = true;
-              if (bboxes[relation.id]) {
-                  rtree.remove(bboxes[relation.id]);
-                  insertions[relation.id] = relation;
-              }
-              updateParents(relation, insertions, memo);
-          });
+      function timeout(f, t) {
+          timeouts.push(window.setTimeout(f, t));
       }
 
 
-      tree.rebase = function(entities, force) {
-          var insertions = {};
-
-          for (var i = 0; i < entities.length; i++) {
-              var entity = entities[i];
-
-              if (!entity.visible)
-                  continue;
-
-              if (head.entities.hasOwnProperty(entity.id) || bboxes[entity.id]) {
-                  if (!force) {
-                      continue;
-                  } else if (bboxes[entity.id]) {
-                      rtree.remove(bboxes[entity.id]);
-                  }
-              }
+      function eventCancel() {
+          event.stopPropagation();
+          event.preventDefault();
+      }
 
-              insertions[entity.id] = entity;
-              updateParents(entity, insertions, {});
-          }
 
-          rtree.load(map$3(insertions, entityBBox));
+      function isTownHallSelected() {
+          var ids = context.selectedIDs();
+          return ids.length === 1 && ids[0] === hallId;
+      }
 
-          return tree;
-      };
 
+      function dragMap() {
+          context.enter(modeBrowse(context));
+          context.history().reset('initial');
 
-      tree.intersects = function(extent, graph) {
-          if (graph !== head) {
-              var diff = coreDifference(head, graph),
-                  insertions = {};
+          var msec = transitionTime(townHall, context.map().center());
+          if (msec) { reveal(null, null, { duration: 0 }); }
+          context.map().centerZoomEase(townHall, 19, msec);
 
-              head = graph;
+          timeout(function() {
+              var centerStart = context.map().center();
 
-              diff.deleted().forEach(function(entity) {
-                  rtree.remove(bboxes[entity.id]);
-                  delete bboxes[entity.id];
+              reveal('#surface', t('intro.navigation.drag'));
+              context.map().on('drawn.intro', function() {
+                  reveal('#surface', t('intro.navigation.drag'), { duration: 0 });
               });
 
-              diff.modified().forEach(function(entity) {
-                  rtree.remove(bboxes[entity.id]);
-                  insertions[entity.id] = entity;
-                  updateParents(entity, insertions, {});
+              context.map().on('move.intro', function() {
+                  var centerNow = context.map().center();
+                  if (centerStart[0] !== centerNow[0] || centerStart[1] !== centerNow[1]) {
+                      context.map().on('move.intro', null);
+                      timeout(function() { continueTo(zoomMap); }, 3000);
+                  }
               });
 
-              diff.created().forEach(function(entity) {
-                  insertions[entity.id] = entity;
-              });
+          }, msec + 100);
 
-              rtree.load(map$3(insertions, entityBBox));
+          function continueTo(nextStep) {
+              context.map().on('move.intro drawn.intro', null);
+              nextStep();
           }
+      }
 
-          return rtree.search(extent.bbox()).map(function(bbox) {
-              return head.entity(bbox.id);
-          });
-      };
-
-
-      return tree;
-  }
-
-  function uiFeatureList(context) {
-      var _geocodeResults;
-
-
-      function featureList(selection$$1) {
-          var header = selection$$1
-              .append('div')
-              .attr('class', 'header fillL cf');
-
-          header
-              .append('h3')
-              .text(t('inspector.feature_list'));
 
-          var searchWrap = selection$$1
-              .append('div')
-              .attr('class', 'search-header');
+      function zoomMap() {
+          var zoomStart = context.map().zoom();
 
-          var search = searchWrap
-              .append('input')
-              .attr('placeholder', t('inspector.search'))
-              .attr('type', 'search')
-              .call(utilNoAuto)
-              .on('keypress', keypress)
-              .on('keydown', keydown)
-              .on('input', inputevent);
+          reveal('#surface',
+              t('intro.navigation.zoom', {
+                  plus: icon('#iD-icon-plus', 'pre-text'),
+                  minus: icon('#iD-icon-minus', 'pre-text')
+              })
+          );
 
-          searchWrap
-              .call(svgIcon('#iD-icon-search', 'pre-text'));
+          context.map().on('drawn.intro', function() {
+              reveal('#surface',
+                  t('intro.navigation.zoom', {
+                      plus: icon('#iD-icon-plus', 'pre-text'),
+                      minus: icon('#iD-icon-minus', 'pre-text')
+                  }), { duration: 0 }
+              );
+          });
 
-          var listWrap = selection$$1
-              .append('div')
-              .attr('class', 'inspector-body');
+          context.map().on('move.intro', function() {
+              if (context.map().zoom() !== zoomStart) {
+                  context.map().on('move.intro', null);
+                  timeout(function() { continueTo(features); }, 3000);
+              }
+          });
 
-          var list = listWrap
-              .append('div')
-              .attr('class', 'feature-list cf');
+          function continueTo(nextStep) {
+              context.map().on('move.intro drawn.intro', null);
+              nextStep();
+          }
+      }
 
-          context
-              .on('exit.feature-list', clearSearch);
-          context.map()
-              .on('drawn.feature-list', mapDrawn);
 
-          context.keybinding()
-              .on(uiCmd('⌘F'), focusSearch);
+      function features() {
+          var onClick = function() { continueTo(pointsLinesAreas); };
 
+          reveal('#surface', t('intro.navigation.features'),
+              { buttonText: t('intro.ok'), buttonCallback: onClick }
+          );
 
-          function focusSearch() {
-              var mode = context.mode() && context.mode().id;
-              if (mode !== 'browse') return;
+          context.map().on('drawn.intro', function() {
+              reveal('#surface', t('intro.navigation.features'),
+                  { duration: 0, buttonText: t('intro.ok'), buttonCallback: onClick }
+              );
+          });
 
-              event.preventDefault();
-              search.node().focus();
+          function continueTo(nextStep) {
+              context.map().on('drawn.intro', null);
+              nextStep();
           }
+      }
 
+      function pointsLinesAreas() {
+          var onClick = function() { continueTo(nodesWays); };
 
-          function keydown() {
-              if (event.keyCode === 27) {  // escape
-                  search.node().blur();
-              }
-          }
+          reveal('#surface', t('intro.navigation.points_lines_areas'),
+              { buttonText: t('intro.ok'), buttonCallback: onClick }
+          );
 
+          context.map().on('drawn.intro', function() {
+              reveal('#surface', t('intro.navigation.points_lines_areas'),
+                  { duration: 0, buttonText: t('intro.ok'), buttonCallback: onClick }
+              );
+          });
 
-          function keypress() {
-              var q = search.property('value'),
-                  items = list.selectAll('.feature-list-item');
-              if (event.keyCode === 13 && q.length && items.size()) {  // return
-                  click(items.datum());
-              }
+          function continueTo(nextStep) {
+              context.map().on('drawn.intro', null);
+              nextStep();
           }
+      }
 
+      function nodesWays() {
+          var onClick = function() { continueTo(clickTownHall); };
 
-          function inputevent() {
-              _geocodeResults = undefined;
-              drawList();
-          }
+          reveal('#surface', t('intro.navigation.nodes_ways'),
+              { buttonText: t('intro.ok'), buttonCallback: onClick }
+          );
 
+          context.map().on('drawn.intro', function() {
+              reveal('#surface', t('intro.navigation.nodes_ways'),
+                  { duration: 0, buttonText: t('intro.ok'), buttonCallback: onClick }
+              );
+          });
 
-          function clearSearch() {
-              search.property('value', '');
-              drawList();
+          function continueTo(nextStep) {
+              context.map().on('drawn.intro', null);
+              nextStep();
           }
+      }
 
+      function clickTownHall() {
+          context.enter(modeBrowse(context));
+          context.history().reset('initial');
 
-          function mapDrawn(e) {
-              if (e.full) {
-                  drawList();
-              }
-          }
+          var entity = context.hasEntity(hallId);
+          if (!entity) return;
+          reveal(null, null, { duration: 0 });
+          context.map().centerZoomEase(entity.loc, 19, 500);
 
+          timeout(function() {
+              var entity = context.hasEntity(hallId);
+              if (!entity) return;
+              var box = pointBox(entity.loc, context);
+              reveal(box, t('intro.navigation.click_townhall'));
 
-          function features() {
-              var entities = {};
-              var result = [];
-              var graph = context.graph();
-              var q = search.property('value').toLowerCase();
+              context.map().on('move.intro drawn.intro', function() {
+                  var entity = context.hasEntity(hallId);
+                  if (!entity) return;
+                  var box = pointBox(entity.loc, context);
+                  reveal(box, t('intro.navigation.click_townhall'), { duration: 0 });
+              });
 
-              if (!q) return result;
+              context.on('enter.intro', function() {
+                  if (isTownHallSelected()) continueTo(selectedTownHall);
+              });
 
-              var idMatch = q.match(/^([nwr])([0-9]+)$/);
+          }, 550);  // after centerZoomEase
 
-              if (idMatch) {
-                  result.push({
-                      id: idMatch[0],
-                      geometry: idMatch[1] === 'n' ? 'point' : idMatch[1] === 'w' ? 'line' : 'relation',
-                      type: idMatch[1] === 'n' ? t('inspector.node') : idMatch[1] === 'w' ? t('inspector.way') : t('inspector.relation'),
-                      name: idMatch[2]
-                  });
+          context.history().on('change.intro', function() {
+              if (!context.hasEntity(hallId)) {
+                  continueTo(clickTownHall);
               }
+          });
 
-              var locationMatch = pair_1(q.toUpperCase()) || q.match(/^(-?\d+\.?\d*)\s+(-?\d+\.?\d*)$/);
+          function continueTo(nextStep) {
+              context.on('enter.intro', null);
+              context.map().on('move.intro drawn.intro', null);
+              context.history().on('change.intro', null);
+              nextStep();
+          }
+      }
 
-              if (locationMatch) {
-                  var loc = [parseFloat(locationMatch[0]), parseFloat(locationMatch[1])];
-                  result.push({
-                      id: -1,
-                      geometry: 'point',
-                      type: t('inspector.location'),
-                      name: dmsCoordinatePair([loc[1], loc[0]]),
-                      location: loc
-                  });
-              }
 
-              function addEntity(entity) {
-                  if (entity.id in entities || result.length > 200)
-                      return;
+      function selectedTownHall() {
+          if (!isTownHallSelected()) return clickTownHall();
 
-                  entities[entity.id] = true;
+          var entity = context.hasEntity(hallId);
+          if (!entity) return clickTownHall();
 
-                  var name = utilDisplayName(entity) || '';
-                  if (name.toLowerCase().indexOf(q) >= 0) {
-                      var matched = context.presets().match(entity, graph);
-                      var type = (matched && matched.name()) || utilDisplayType(entity.id);
+          var box = pointBox(entity.loc, context);
+          var onClick = function() { continueTo(editorTownHall); };
 
-                      result.push({
-                          id: entity.id,
-                          entity: entity,
-                          geometry: context.geometry(entity.id),
-                          type: type,
-                          name: name
-                      });
-                  }
+          reveal(box, t('intro.navigation.selected_townhall'),
+              { buttonText: t('intro.ok'), buttonCallback: onClick }
+          );
 
-                  graph.parentRelations(entity).forEach(function(parent) {
-                      addEntity(parent);
-                  });
-              }
+          context.map().on('move.intro drawn.intro', function() {
+              var entity = context.hasEntity(hallId);
+              if (!entity) return;
+              var box = pointBox(entity.loc, context);
+              reveal(box, t('intro.navigation.selected_townhall'),
+                  { duration: 0, buttonText: t('intro.ok'), buttonCallback: onClick }
+              );
+          });
 
-              var visible = context.surface().selectAll('.point, .line, .area').nodes();
-              for (var i = 0; i < visible.length && result.length <= 200; i++) {
-                  var datum = visible[i].__data__;
-                  var entity = datum && datum.properties && datum.properties.entity;
-                  if (entity) { addEntity(entity); }
+          context.history().on('change.intro', function() {
+              if (!context.hasEntity(hallId)) {
+                  continueTo(clickTownHall);
               }
+          });
 
-              (_geocodeResults || []).forEach(function(d) {
-                  if (d.osm_type && d.osm_id) {    // some results may be missing these - #1890
+          function continueTo(nextStep) {
+              context.map().on('move.intro drawn.intro', null);
+              context.history().on('change.intro', null);
+              nextStep();
+          }
+      }
 
-                      // Make a temporary osmEntity so we can preset match
-                      // and better localize the search result - #4725
-                      var id = osmEntity$$1.id.fromOSM(d.osm_type, d.osm_id);
-                      var tags = {};
-                      tags[d.class] = d.type;
 
-                      var attrs = { id: id, type: d.osm_type, tags: tags };
-                      if (d.osm_type === 'way') {   // for ways, add some fake closed nodes
-                          attrs.nodes = ['a','a'];  // so that geometry area is possible
-                      }
+      function editorTownHall() {
+          if (!isTownHallSelected()) return clickTownHall();
 
-                      var tempEntity = osmEntity$$1(attrs);
-                      var tempGraph = coreGraph$$1([tempEntity]);
-                      var matched = context.presets().match(tempEntity, tempGraph);
-                      var type = (matched && matched.name()) || utilDisplayType(id);
+          // disallow scrolling
+          select('.inspector-wrap').on('wheel.intro', eventCancel);
 
-                      result.push({
-                          id: tempEntity.id,
-                          geometry: tempEntity.geometry(tempGraph),
-                          type: type,
-                          name: d.display_name,
-                          extent: new geoExtent$$1(
-                              [parseFloat(d.boundingbox[3]), parseFloat(d.boundingbox[0])],
-                              [parseFloat(d.boundingbox[2]), parseFloat(d.boundingbox[1])])
-                      });
-                  }
-              });
+          var onClick = function() { continueTo(presetTownHall); };
 
-              return result;
-          }
+          reveal('.entity-editor-pane',
+              t('intro.navigation.editor_townhall'),
+              { buttonText: t('intro.ok'), buttonCallback: onClick }
+          );
 
+          context.on('exit.intro', function() {
+              continueTo(clickTownHall);
+          });
 
-          function drawList() {
-              var value = search.property('value');
-              var results = features();
+          context.history().on('change.intro', function() {
+              if (!context.hasEntity(hallId)) {
+                  continueTo(clickTownHall);
+              }
+          });
 
-              list.classed('filtered', value.length);
+          function continueTo(nextStep) {
+              context.on('exit.intro', null);
+              context.history().on('change.intro', null);
+              select('.inspector-wrap').on('wheel.intro', null);
+              nextStep();
+          }
+      }
 
-              var noResultsWorldwide = _geocodeResults && _geocodeResults.length === 0;
 
-              var resultsIndicator = list.selectAll('.no-results-item')
-                  .data([0])
-                  .enter()
-                  .append('button')
-                  .property('disabled', true)
-                  .attr('class', 'no-results-item')
-                  .call(svgIcon('#iD-icon-alert', 'pre-text'));
+      function presetTownHall() {
+          if (!isTownHallSelected()) return clickTownHall();
 
-              resultsIndicator.append('span')
-                  .attr('class', 'entity-name');
+          // reset pane, in case user happened to change it..
+          select('.inspector-wrap .panewrap').style('right', '0%');
+          // disallow scrolling
+          select('.inspector-wrap').on('wheel.intro', eventCancel);
 
-              list.selectAll('.no-results-item .entity-name')
-                  .text(noResultsWorldwide ? t('geocoder.no_results_worldwide') : t('geocoder.no_results_visible'));
+          // preset match, in case the user happened to change it.
+          var entity = context.entity(context.selectedIDs()[0]);
+          var preset = context.presets().match(entity, context.graph());
 
-              if (services.geocoder) {
-                list.selectAll('.geocode-item')
-                    .data([0])
-                    .enter()
-                    .append('button')
-                    .attr('class', 'geocode-item')
-                    .on('click', geocoderSearch)
-                    .append('div')
-                    .attr('class', 'label')
-                    .append('span')
-                    .attr('class', 'entity-name')
-                    .text(t('geocoder.search'));
-              }
+          var onClick = function() { continueTo(fieldsTownHall); };
 
-              list.selectAll('.no-results-item')
-                  .style('display', (value.length && !results.length) ? 'block' : 'none');
+          context.on('exit.intro', function() {
+              continueTo(clickTownHall);
+          });
 
-              list.selectAll('.geocode-item')
-                  .style('display', (value && _geocodeResults === undefined) ? 'block' : 'none');
+          context.history().on('change.intro', function() {
+              if (!context.hasEntity(hallId)) {
+                  continueTo(clickTownHall);
+              }
+          });
 
-              list.selectAll('.feature-list-item')
-                  .data([-1])
-                  .remove();
+          reveal('.inspector-body .preset-list-item.inspector-inner',
+              t('intro.navigation.preset_townhall', { preset: preset.name() }),
+              { buttonText: t('intro.ok'), buttonCallback: onClick }
+          );
 
-              var items = list.selectAll('.feature-list-item')
-                  .data(results, function(d) { return d.id; });
+          function continueTo(nextStep) {
+              context.on('exit.intro', null);
+              context.history().on('change.intro', null);
+              select('.inspector-wrap').on('wheel.intro', null);
+              nextStep();
+          }
+      }
 
-              var enter = items.enter()
-                  .insert('button', '.geocode-item')
-                  .attr('class', 'feature-list-item')
-                  .on('mouseover', mouseover)
-                  .on('mouseout', mouseout)
-                  .on('click', click);
 
-              var label = enter
-                  .append('div')
-                  .attr('class', 'label');
+      function fieldsTownHall() {
+          if (!isTownHallSelected()) return clickTownHall();
 
-              label
-                  .each(function(d) {
-                      select(this)
-                          .call(svgIcon('#iD-icon-' + d.geometry, 'pre-text'));
-                  });
+          // reset pane, in case user happened to change it..
+          select('.inspector-wrap .panewrap').style('right', '0%');
+          // disallow scrolling
+          select('.inspector-wrap').on('wheel.intro', eventCancel);
 
-              label
-                  .append('span')
-                  .attr('class', 'entity-type')
-                  .text(function(d) { return d.type; });
+          var onClick = function() { continueTo(closeTownHall); };
 
-              label
-                  .append('span')
-                  .attr('class', 'entity-name')
-                  .text(function(d) { return d.name; });
+          reveal('.inspector-body .preset-editor',
+              t('intro.navigation.fields_townhall'),
+              { buttonText: t('intro.ok'), buttonCallback: onClick }
+          );
 
-              enter
-                  .style('opacity', 0)
-                  .transition()
-                  .style('opacity', 1);
+          context.on('exit.intro', function() {
+              continueTo(clickTownHall);
+          });
 
-              items.order();
+          context.history().on('change.intro', function() {
+              if (!context.hasEntity(hallId)) {
+                  continueTo(clickTownHall);
+              }
+          });
 
-              items.exit()
-                  .remove();
+          function continueTo(nextStep) {
+              context.on('exit.intro', null);
+              context.history().on('change.intro', null);
+              select('.inspector-wrap').on('wheel.intro', null);
+              nextStep();
           }
+      }
 
 
-          function mouseover(d) {
-              if (d.id === -1) return;
-
-              context.surface().selectAll(utilEntityOrMemberSelector([d.id], context.graph()))
-                  .classed('hover', true);
-          }
+      function closeTownHall() {
+          if (!isTownHallSelected()) return clickTownHall();
 
+          var selector = '.entity-editor-pane button.preset-close svg use';
+          var href = select(selector).attr('href') || '#iD-icon-close';
 
-          function mouseout() {
-              context.surface().selectAll('.hover')
-                  .classed('hover', false);
-          }
+          reveal('.entity-editor-pane',
+              t('intro.navigation.close_townhall', { button: icon(href, 'pre-text') })
+          );
 
+          context.on('exit.intro', function() {
+              continueTo(searchStreet);
+          });
 
-          function click(d) {
-              event.preventDefault();
-              if (d.location) {
-                  context.map().centerZoomEase([d.location[1], d.location[0]], 19);
-              }
-              else if (d.entity) {
-                  if (d.entity.type === 'node') {
-                      context.map().center(d.entity.loc);
-                  } else if (d.entity.type === 'way') {
-                      var center = context.projection(context.map().center());
-                      var edge = geoChooseEdge(context.childNodes(d.entity), center, context.projection);
-                      context.map().center(edge.loc);
-                  }
-                  context.enter(modeSelect(context, [d.entity.id]));
-              } else {
-                  context.zoomToEntity(d.id);
-              }
-          }
+          context.history().on('change.intro', function() {
+              // update the close icon in the tooltip if the user edits something.
+              var selector = '.entity-editor-pane button.preset-close svg use';
+              var href = select(selector).attr('href') || '#iD-icon-close';
 
+              reveal('.entity-editor-pane',
+                  t('intro.navigation.close_townhall', { button: icon(href, 'pre-text') }),
+                  { duration: 0 }
+              );
+          });
 
-          function geocoderSearch() {
-              services.geocoder.search(search.property('value'), function (err, resp) {
-                  _geocodeResults = resp || [];
-                  drawList();
-              });
+          function continueTo(nextStep) {
+              context.on('exit.intro', null);
+              context.history().on('change.intro', null);
+              nextStep();
           }
       }
 
 
-      return featureList;
-  }
+      function searchStreet() {
+          context.enter(modeBrowse(context));
+          context.history().reset('initial');  // ensure spring street exists
 
-  var _flashTimer;
+          var msec = transitionTime(springStreet, context.map().center());
+          if (msec) { reveal(null, null, { duration: 0 }); }
+          context.map().centerZoomEase(springStreet, 19, msec);  // ..and user can see it
 
+          timeout(function() {
+              reveal('.search-header input',
+                  t('intro.navigation.search_street', { name: t('intro.graph.name.spring-street') })
+              );
 
-  function uiFlash() {
-      var _duration = 2000;
-      var _iconName = '#iD-icon-no';
-      var _iconClass = 'disabled';
-      var _text = '';
-      var _textClass;
+              select('.search-header input')
+                  .on('keyup.intro', checkSearchResult);
+          }, msec + 100);
+      }
 
 
-      function flash() {
-          if (_flashTimer) {
-              _flashTimer.stop();
+      function checkSearchResult() {
+          var first = select('.feature-list-item:nth-child(0n+2)');  // skip "No Results" item
+          var firstName = first.select('.entity-name');
+          var name = t('intro.graph.name.spring-street');
+
+          if (!firstName.empty() && firstName.text() === name) {
+              reveal(first.node(),
+                  t('intro.navigation.choose_street', { name: name }),
+                  { duration: 300 }
+              );
+
+              context.on('exit.intro', function() {
+                  continueTo(selectedStreet);
+              });
+
+              select('.search-header input')
+                  .on('keydown.intro', eventCancel, true)
+                  .on('keyup.intro', null);
           }
 
-          select('#footer-wrap')
-              .attr('class', 'footer-hide');
-          select('#flash-wrap')
-              .attr('class', 'footer-show');
+          function continueTo(nextStep) {
+              context.on('exit.intro', null);
+              select('.search-header input')
+                  .on('keydown.intro', null)
+                  .on('keyup.intro', null);
+              nextStep();
+          }
+      }
 
-          var content = select('#flash-wrap').selectAll('.flash-content')
-              .data([0]);
 
-          // Enter
-          var contentEnter = content.enter()
-              .append('div')
-              .attr('class', 'flash-content');
+      function selectedStreet() {
+          if (!context.hasEntity(springStreetEndId) || !context.hasEntity(springStreetId)) {
+              return searchStreet();
+          }
 
-          var iconEnter = contentEnter
-              .append('svg')
-              .attr('class', 'flash-icon')
-              .append('g')
-              .attr('transform', 'translate(10,10)');
+          var onClick = function() { continueTo(editorStreet); };
+          var entity = context.entity(springStreetEndId);
+          var box = pointBox(entity.loc, context);
+          box.height = 500;
+
+          reveal(box,
+              t('intro.navigation.selected_street', { name: t('intro.graph.name.spring-street') }),
+              { duration: 600, buttonText: t('intro.ok'), buttonCallback: onClick }
+          );
+
+          timeout(function() {
+              context.map().on('move.intro drawn.intro', function() {
+                  var entity = context.hasEntity(springStreetEndId);
+                  if (!entity) return;
+                  var box = pointBox(entity.loc, context);
+                  box.height = 500;
+                  reveal(box,
+                      t('intro.navigation.selected_street', { name: t('intro.graph.name.spring-street') }),
+                      { duration: 0, buttonText: t('intro.ok'), buttonCallback: onClick }
+                  );
+              });
+          }, 600);  // after reveal.
 
-          iconEnter
-              .append('circle')
-              .attr('r', 9);
+          context.on('enter.intro', function(mode) {
+              if (!context.hasEntity(springStreetId)) {
+                  return continueTo(searchStreet);
+              }
+              var ids = context.selectedIDs();
+              if (mode.id !== 'select' || !ids.length || ids[0] !== springStreetId) {
+                  // keep Spring Street selected..
+                  context.enter(modeSelect(context, [springStreetId]));
+              }
+          });
 
-          iconEnter
-              .append('use')
-              .attr('transform', 'translate(-7,-7)')
-              .attr('width', '14')
-              .attr('height', '14');
+          context.history().on('change.intro', function() {
+              if (!context.hasEntity(springStreetEndId) || !context.hasEntity(springStreetId)) {
+                  timeout(function() {
+                      continueTo(searchStreet);
+                  }, 300);  // after any transition (e.g. if user deleted intersection)
+              }
+          });
 
-          contentEnter
-              .append('div')
-              .attr('class', 'flash-text');
+          function continueTo(nextStep) {
+              context.map().on('move.intro drawn.intro', null);
+              context.on('enter.intro', null);
+              context.history().on('change.intro', null);
+              nextStep();
+          }
+      }
 
 
-          // Update
-          content = content
-              .merge(contentEnter);
+      function editorStreet() {
+          var selector = '.entity-editor-pane button.preset-close svg use';
+          var href = select(selector).attr('href') || '#iD-icon-close';
 
-          content
-              .selectAll('.flash-icon')
-              .attr('class', 'flash-icon ' + (_iconClass || ''));
+          reveal('.entity-editor-pane',
+              t('intro.navigation.editor_street', {
+                  button: icon(href, 'pre-text'),
+                  field1: onewayField.label(),
+                  field2: maxspeedField.label()
+              })
+          );
 
-          content
-              .selectAll('.flash-icon use')
-              .attr('xlink:href', _iconName);
+          context.on('exit.intro', function() {
+              continueTo(play);
+          });
 
-          content
-              .selectAll('.flash-text')
-              .attr('class', 'flash-text ' + (_textClass || ''))
-              .text(_text);
+          context.history().on('change.intro', function() {
+              // update the close icon in the tooltip if the user edits something.
+              var selector = '.entity-editor-pane button.preset-close svg use';
+              var href = select(selector).attr('href') || '#iD-icon-close';
+
+              reveal('.entity-editor-pane',
+                  t('intro.navigation.editor_street', {
+                      button: icon(href, 'pre-text'),
+                      field1: onewayField.label().toLowerCase(),
+                      field2: maxspeedField.label().toLowerCase()
+                  }), { duration: 0 }
+              );
+          });
 
+          function continueTo(nextStep) {
+              context.on('exit.intro', null);
+              context.history().on('change.intro', null);
+              nextStep();
+          }
+      }
 
-          _flashTimer = timeout$1(function() {
-              _flashTimer = null;
-              select('#footer-wrap')
-                  .attr('class', 'footer-show');
-              select('#flash-wrap')
-                  .attr('class', 'footer-hide');
-          }, _duration);
 
-          return content;
+      function play() {
+          dispatch$1.call('done');
+          reveal('#id-container',
+              t('intro.navigation.play', { next: t('intro.points.title') }), {
+                  tooltipBox: '.intro-nav-wrap .chapter-point',
+                  buttonText: t('intro.ok'),
+                  buttonCallback: function() { reveal('#id-container'); }
+              }
+          );
       }
 
 
-      flash.duration = function(_) {
-          if (!arguments.length) return _duration;
-          _duration = _;
-          return flash;
+      chapter.enter = function() {
+          dragMap();
       };
 
-      flash.text = function(_) {
-          if (!arguments.length) return _text;
-          _text = _;
-          return flash;
-      };
 
-      flash.textClass = function(_) {
-          if (!arguments.length) return _textClass;
-          _textClass = _;
-          return flash;
+      chapter.exit = function() {
+          timeouts.forEach(window.clearTimeout);
+          context.on('enter.intro exit.intro', null);
+          context.map().on('move.intro drawn.intro', null);
+          context.history().on('change.intro', null);
+          select('.inspector-wrap').on('wheel.intro', null);
+          select('.search-header input').on('keydown.intro keyup.intro', null);
       };
 
-      flash.iconName = function(_) {
-          if (!arguments.length) return _iconName;
-          _iconName = _;
-          return flash;
-      };
 
-      flash.iconClass = function(_) {
-          if (!arguments.length) return _iconClass;
-          _iconClass = _;
-          return flash;
+      chapter.restart = function() {
+          chapter.exit();
+          chapter.enter();
       };
 
-      return flash;
+
+      return utilRebind(chapter, dispatch$1, 'on');
   }
 
-  function operationCircularize(selectedIDs, context) {
-      var entityId = selectedIDs[0],
-          entity = context.entity(entityId),
-          extent = entity.extent(context.graph()),
-          geometry = context.geometry(entityId),
-          action = actionCircularize(entityId, context.projection);
+  function uiIntroPoint(context, reveal) {
+      var dispatch$1 = dispatch('done');
+      var timeouts = [];
+      var intersection = [-85.63279, 41.94394];
+      var building = [-85.632422, 41.944045];
+      var cafePreset = context.presets().item('amenity/cafe');
+      var _pointID = null;
 
 
-      var operation = function() {
-          context.perform(action, operation.annotation());
+      var chapter = {
+          title: 'intro.points.title'
       };
 
 
-      operation.available = function() {
-          return selectedIDs.length === 1 &&
-              entity.type === 'way' &&
-              uniq(entity.nodes).length > 1;
-      };
+      function timeout(f, t) {
+          timeouts.push(window.setTimeout(f, t));
+      }
 
 
-      operation.disabled = function() {
-          var reason;
-          if (extent.percentContainedIn(context.extent()) < 0.8) {
-              reason = 'too_large';
-          } else if (context.hasHiddenConnections(entityId)) {
-              reason = 'connected_to_hidden';
-          }
-          return action.disabled(context.graph()) || reason;
-      };
+      function revealEditMenu(loc, text, options) {
+          var rect = context.surfaceRect();
+          var point = context.curtainProjection(loc);
+          var pad = 40;
+          var width = 250 + (2 * pad);
+          var height = 250;
+          var startX = rect.left + point[0];
+          var left = (textDirection === 'rtl') ? (startX - width + pad) : (startX - pad);
+          var box = {
+              left: left,
+              top: point[1] + rect.top - 60,
+              width: width,
+              height: height
+          };
+          reveal(box, text, options);
+      }
 
 
-      operation.tooltip = function() {
-          var disable = operation.disabled();
-          return disable ?
-              t('operations.circularize.' + disable) :
-              t('operations.circularize.description.' + geometry);
-      };
+      function eventCancel() {
+          event.stopPropagation();
+          event.preventDefault();
+      }
 
 
-      operation.annotation = function() {
-          return t('operations.circularize.annotation.' + geometry);
-      };
+      function addPoint() {
+          context.enter(modeBrowse(context));
+          context.history().reset('initial');
 
+          var msec = transitionTime(intersection, context.map().center());
+          if (msec) { reveal(null, null, { duration: 0 }); }
+          context.map().centerZoomEase(intersection, 19, msec);
 
-      operation.id = 'circularize';
-      operation.keys = [t('operations.circularize.key')];
-      operation.title = t('operations.circularize.title');
-      operation.behavior = behaviorOperation(context).which(operation);
+          timeout(function() {
+              var tooltip = reveal('button.add-point',
+                  t('intro.points.add_point', { button: icon('#iD-icon-point', 'pre-text') }));
 
-      return operation;
-  }
+              _pointID = null;
 
-  function operationContinue(selectedIDs, context) {
-      var graph = context.graph(),
-          entities = selectedIDs.map(function(id) { return graph.entity(id); }),
-          geometries = assignIn({ line: [], vertex: [] },
-              groupBy(entities, function(entity) { return entity.geometry(graph); })),
-          vertex = geometries.vertex[0];
+              tooltip.selectAll('.tooltip-inner')
+                  .insert('svg', 'span')
+                  .attr('class', 'tooltip-illustration')
+                  .append('use')
+                  .attr('xlink:href', '#iD-graphic-points');
 
+              context.on('enter.intro', function(mode) {
+                  if (mode.id !== 'add-point') return;
+                  continueTo(placePoint);
+              });
+          }, msec + 100);
 
-      function candidateWays() {
-          return graph.parentWays(vertex).filter(function(parent) {
-              return parent.geometry(graph) === 'line' &&
-                  !parent.isClosed() &&
-                  parent.affix(vertex.id) &&
-                  (geometries.line.length === 0 || geometries.line[0] === parent);
-          });
+          function continueTo(nextStep) {
+              context.on('enter.intro', null);
+              nextStep();
+          }
       }
 
 
-      var operation = function() {
-          var candidate = candidateWays()[0];
-          context.enter(
-              modeDrawLine(context, candidate.id, context.graph(), candidate.affix(vertex.id), true)
-          );
-      };
+      function placePoint() {
+          if (context.mode().id !== 'add-point') {
+              return chapter.restart();
+          }
 
+          var pointBox = pad$1(building, 150, context);
+          reveal(pointBox, t('intro.points.place_point'));
 
-      operation.available = function() {
-          return geometries.vertex.length === 1 && geometries.line.length <= 1 &&
-              !context.features().hasHiddenConnections(vertex, context.graph());
-      };
+          context.map().on('move.intro drawn.intro', function() {
+              pointBox = pad$1(building, 150, context);
+              reveal(pointBox, t('intro.points.place_point'), { duration: 0 });
+          });
 
+          context.on('enter.intro', function(mode) {
+              if (mode.id !== 'select') return chapter.restart();
+              _pointID = context.mode().selectedIDs()[0];
+              continueTo(searchPreset);
+          });
 
-      operation.disabled = function() {
-          var candidates = candidateWays();
-          if (candidates.length === 0)
-              return 'not_eligible';
-          if (candidates.length > 1)
-              return 'multiple';
-      };
+          function continueTo(nextStep) {
+              context.map().on('move.intro drawn.intro', null);
+              context.on('enter.intro', null);
+              nextStep();
+          }
+      }
 
 
-      operation.tooltip = function() {
-          var disable = operation.disabled();
-          return disable ?
-              t('operations.continue.' + disable) :
-              t('operations.continue.description');
-      };
+      function searchPreset() {
+          if (context.mode().id !== 'select' || !_pointID || !context.hasEntity(_pointID)) {
+              return addPoint();
+          }
 
+          // disallow scrolling
+          select('.inspector-wrap').on('wheel.intro', eventCancel);
 
-      operation.annotation = function() {
-          return t('operations.continue.annotation.line');
-      };
+          select('.preset-search-input')
+              .on('keydown.intro', null)
+              .on('keyup.intro', checkPresetSearch);
 
+          reveal('.preset-search-input',
+              t('intro.points.search_cafe', { preset: cafePreset.name() })
+          );
 
-      operation.id = 'continue';
-      operation.keys = [t('operations.continue.key')];
-      operation.title = t('operations.continue.title');
-      operation.behavior = behaviorOperation(context).which(operation);
+          context.on('enter.intro', function(mode) {
+              if (!_pointID || !context.hasEntity(_pointID)) {
+                  return continueTo(addPoint);
+              }
 
-      return operation;
-  }
+              var ids = context.selectedIDs();
+              if (mode.id !== 'select' || !ids.length || ids[0] !== _pointID) {
+                  // keep the user's point selected..
+                  context.enter(modeSelect(context, [_pointID]));
 
-  function operationDelete(selectedIDs, context) {
-      var multi = (selectedIDs.length === 1 ? 'single' : 'multiple'),
-          action = actionDeleteMultiple(selectedIDs),
-          extent = selectedIDs.reduce(function(extent, id) {
-                  return extent.extend(context.entity(id).extent(context.graph()));
-              }, geoExtent$$1());
+                  // disallow scrolling
+                  select('.inspector-wrap').on('wheel.intro', eventCancel);
 
+                  select('.preset-search-input')
+                      .on('keydown.intro', null)
+                      .on('keyup.intro', checkPresetSearch);
 
-      var operation = function() {
-          var nextSelectedID;
-          var nextSelectedLoc;
+                  reveal('.preset-search-input',
+                      t('intro.points.search_cafe', { preset: cafePreset.name() })
+                  );
 
-          if (selectedIDs.length === 1) {
-              var id = selectedIDs[0],
-                  entity = context.entity(id),
-                  geometry = context.geometry(id),
-                  parents = context.graph().parentWays(entity),
-                  parent = parents[0];
+                  context.history().on('change.intro', null);
+              }
+          });
 
-              // Select the next closest node in the way.
-              if (geometry === 'vertex') {
-                  var nodes = parent.nodes,
-                      i = nodes.indexOf(id);
 
-                  if (i === 0) {
-                      i++;
-                  } else if (i === nodes.length - 1) {
-                      i--;
-                  } else {
-                      var a = geoSphericalDistance(entity.loc, context.entity(nodes[i - 1]).loc),
-                          b = geoSphericalDistance(entity.loc, context.entity(nodes[i + 1]).loc);
-                      i = a < b ? i - 1 : i + 1;
-                  }
+          function checkPresetSearch() {
+              var first = select('.preset-list-item:first-child');
 
-                  nextSelectedID = nodes[i];
-                  nextSelectedLoc = context.entity(nextSelectedID).loc;
-              }
-          }
+              if (first.classed('preset-amenity-cafe')) {
+                  select('.preset-search-input')
+                      .on('keydown.intro', eventCancel, true)
+                      .on('keyup.intro', null);
 
-          context.perform(action, operation.annotation());
+                  reveal(first.select('.preset-list-button').node(),
+                      t('intro.points.choose_cafe', { preset: cafePreset.name() }),
+                      { duration: 300 }
+                  );
 
-          if (nextSelectedID && nextSelectedLoc) {
-              if (context.hasEntity(nextSelectedID)) {
-                  context.enter(modeSelect(context, [nextSelectedID]).follow(true));
-              } else {
-                  context.map().centerEase(nextSelectedLoc);
-                  context.enter(modeBrowse(context));
+                  context.history().on('change.intro', function() {
+                      continueTo(aboutFeatureEditor);
+                  });
               }
-          } else {
-              context.enter(modeBrowse(context));
           }
 
-      };
+          function continueTo(nextStep) {
+              context.on('enter.intro', null);
+              context.history().on('change.intro', null);
+              select('.inspector-wrap').on('wheel.intro', null);
+              select('.preset-search-input').on('keydown.intro keyup.intro', null);
+              nextStep();
+          }
+      }
 
 
-      operation.available = function() {
-          return true;
-      };
+      function aboutFeatureEditor() {
+          if (context.mode().id !== 'select' || !_pointID || !context.hasEntity(_pointID)) {
+              return addPoint();
+          }
+
+          timeout(function() {
+              reveal('.entity-editor-pane', t('intro.points.feature_editor'), {
+                  tooltipClass: 'intro-points-describe',
+                  buttonText: t('intro.ok'),
+                  buttonCallback: function() { continueTo(addName); }
+              });
+          }, 400);
 
+          context.on('exit.intro', function() {
+              // if user leaves select mode here, just continue with the tutorial.
+              continueTo(reselectPoint);
+          });
 
-      operation.disabled = function() {
-          var reason;
-          if (extent.area() && extent.percentContainedIn(context.extent()) < 0.8) {
-              reason = 'too_large';
-          } else if (some(selectedIDs, context.hasHiddenConnections)) {
-              reason = 'connected_to_hidden';
-          } else if (some(selectedIDs, protectedMember)) {
-              reason = 'part_of_relation';
-          } else if (some(selectedIDs, incompleteRelation)) {
-              reason = 'incomplete_relation';
+          function continueTo(nextStep) {
+              context.on('exit.intro', null);
+              nextStep();
           }
-          return reason;
+      }
 
-          function incompleteRelation(id) {
-              var entity = context.entity(id);
-              return entity.type === 'relation' && !entity.isComplete(context.graph());
+
+      function addName() {
+          if (context.mode().id !== 'select' || !_pointID || !context.hasEntity(_pointID)) {
+              return addPoint();
           }
 
-          function protectedMember(id) {
-              var entity = context.entity(id);
-              if (entity.type !== 'way') return false;
+          // reset pane, in case user happened to change it..
+          select('.inspector-wrap .panewrap').style('right', '0%');
 
-              var parents = context.graph().parentRelations(entity);
-              for (var i = 0; i < parents.length; i++) {
-                  var parent = parents[i],
-                      type = parent.tags.type,
-                      role = parent.memberById(id).role || 'outer';
-                  if (type === 'route' || type === 'boundary' || (type === 'multipolygon' && role === 'outer')) {
-                      return true;
-                  }
+          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.
+              var entity = context.entity(_pointID);
+              if (entity.tags.name) {
+                  var tooltip = reveal('.entity-editor-pane', t('intro.points.add_name'), {
+                      tooltipClass: 'intro-points-describe',
+                      buttonText: t('intro.ok'),
+                      buttonCallback: function() { continueTo(addCloseEditor); }
+                  });
+                  tooltip.select('.instruction').style('display', 'none');
+
+              } else {
+                  reveal('.entity-editor-pane', t('intro.points.add_name'),
+                      { tooltipClass: 'intro-points-describe' }
+                  );
               }
-              return false;
+          }, 400);
+
+          context.history().on('change.intro', function() {
+              continueTo(addCloseEditor);
+          });
+
+          context.on('exit.intro', function() {
+              // if user leaves select mode here, just continue with the tutorial.
+              continueTo(reselectPoint);
+          });
+
+          function continueTo(nextStep) {
+              context.on('exit.intro', null);
+              context.history().on('change.intro', null);
+              nextStep();
           }
+      }
 
-      };
 
+      function addCloseEditor() {
+          // reset pane, in case user happened to change it..
+          select('.inspector-wrap .panewrap').style('right', '0%');
 
-      operation.tooltip = function() {
-          var disable = operation.disabled();
-          return disable ?
-              t('operations.delete.' + disable + '.' + multi) :
-              t('operations.delete.description' + '.' + multi);
-      };
+          var selector = '.entity-editor-pane button.preset-close svg use';
+          var href = select(selector).attr('href') || '#iD-icon-close';
 
+          context.on('exit.intro', function() {
+              continueTo(reselectPoint);
+          });
 
-      operation.annotation = function() {
-          return selectedIDs.length === 1 ?
-              t('operations.delete.annotation.' + context.geometry(selectedIDs[0])) :
-              t('operations.delete.annotation.multiple', { n: selectedIDs.length });
-      };
+          reveal('.entity-editor-pane',
+              t('intro.points.add_close', { button: icon(href, 'pre-text') })
+          );
 
+          function continueTo(nextStep) {
+              context.on('exit.intro', null);
+              nextStep();
+          }
+      }
 
-      operation.id = 'delete';
-      operation.keys = [uiCmd('⌘⌫'), uiCmd('⌘⌦'), uiCmd('⌦')];
-      operation.title = t('operations.delete.title');
-      operation.behavior = behaviorOperation(context).which(operation);
 
-      return operation;
-  }
+      function reselectPoint() {
+          if (!_pointID) return chapter.restart();
+          var entity = context.hasEntity(_pointID);
+          if (!entity) return chapter.restart();
 
-  function operationDisconnect(selectedIDs, context) {
-      var vertices = filter(selectedIDs, function(entityId) {
-          return context.geometry(entityId) === 'vertex';
-      });
+          // make sure it's still a cafe, in case user somehow changed it..
+          var oldPreset = context.presets().match(entity, context.graph());
+          context.replace(actionChangePreset(_pointID, oldPreset, cafePreset));
 
-      var entityId = vertices[0],
-          action = actionDisconnect(entityId);
+          context.enter(modeBrowse(context));
 
-      if (selectedIDs.length > 1) {
-          action.limitWays(without(selectedIDs, entityId));
-      }
+          var msec = transitionTime(entity.loc, context.map().center());
+          if (msec) { reveal(null, null, { duration: 0 }); }
+          context.map().centerEase(entity.loc, msec);
+
+          timeout(function() {
+              var box = pointBox(entity.loc, context);
+              reveal(box, t('intro.points.reselect'), { duration: 600 });
 
+              timeout(function() {
+                  context.map().on('move.intro drawn.intro', function() {
+                      var entity = context.hasEntity(_pointID);
+                      if (!entity) return chapter.restart();
+                      var box = pointBox(entity.loc, context);
+                      reveal(box, t('intro.points.reselect'), { duration: 0 });
+                  });
+              }, 600); // after reveal..
 
-      var operation = function() {
-          context.perform(action, operation.annotation());
-      };
+              context.on('enter.intro', function(mode) {
+                  if (mode.id !== 'select') return;
+                  continueTo(updatePoint);
+              });
 
+          }, msec + 100);
 
-      operation.available = function() {
-          return vertices.length === 1;
-      };
+          function continueTo(nextStep) {
+              context.map().on('move.intro drawn.intro', null);
+              context.on('enter.intro', null);
+              nextStep();
+          }
+      }
 
 
-      operation.disabled = function() {
-          var reason;
-          if (some(selectedIDs, context.hasHiddenConnections)) {
-              reason = 'connected_to_hidden';
+      function updatePoint() {
+          if (context.mode().id !== 'select' || !_pointID || !context.hasEntity(_pointID)) {
+              return continueTo(reselectPoint);
           }
-          return action.disabled(context.graph()) || reason;
-      };
 
+          // reset pane, in case user happened to untag the point..
+          select('.inspector-wrap .panewrap').style('right', '0%');
 
-      operation.tooltip = function() {
-          var disable = operation.disabled();
-          return disable ?
-              t('operations.disconnect.' + disable) :
-              t('operations.disconnect.description');
-      };
+          context.on('exit.intro', function() {
+              continueTo(reselectPoint);
+          });
 
+          context.history().on('change.intro', function() {
+              continueTo(updateCloseEditor);
+          });
 
-      operation.annotation = function() {
-          return t('operations.disconnect.annotation');
-      };
+          timeout(function() {
+              reveal('.entity-editor-pane', t('intro.points.update'),
+                  { tooltipClass: 'intro-points-describe' }
+              );
+          }, 400);
+
+          function continueTo(nextStep) {
+              context.on('exit.intro', null);
+              context.history().on('change.intro', null);
+              nextStep();
+          }
+      }
 
 
-      operation.id = 'disconnect';
-      operation.keys = [t('operations.disconnect.key')];
-      operation.title = t('operations.disconnect.title');
-      operation.behavior = behaviorOperation(context).which(operation);
+      function updateCloseEditor() {
+          if (context.mode().id !== 'select' || !_pointID || !context.hasEntity(_pointID)) {
+              return continueTo(reselectPoint);
+          }
 
-      return operation;
-  }
+          // reset pane, in case user happened to change it..
+          select('.inspector-wrap .panewrap').style('right', '0%');
 
-  function operationMerge(selectedIDs, context) {
+          context.on('exit.intro', function() {
+              continueTo(rightClickPoint);
+          });
 
-      function updatePresetTags(newGraph, ids) {
-          var id = ids[0];
-          var newEntity = newGraph.hasEntity(id);
+          timeout(function() {
+              reveal('.entity-editor-pane',
+                  t('intro.points.update_close', { button: icon('#iD-icon-apply', 'pre-text') })
+              );
+          }, 500);
 
-          if (!newEntity) return;
-          var newPreset = context.presets().match(newEntity, newGraph);
-          context.replace(actionChangePreset(id, null, newPreset), operation.annotation());
+          function continueTo(nextStep) {
+              context.on('exit.intro', null);
+              nextStep();
+          }
       }
 
 
-      var join = actionJoin(selectedIDs);
-      var merge = actionMerge(selectedIDs);
-      var mergePolygon = actionMergePolygon(selectedIDs);
-      var mergeNodes = actionMergeNodes(selectedIDs);
+      function rightClickPoint() {
+          if (!_pointID) return chapter.restart();
+          var entity = context.hasEntity(_pointID);
+          if (!entity) return chapter.restart();
 
+          context.enter(modeBrowse(context));
 
-      var operation = function() {
-          var doUpdateTags;
-          var action;
+          var box = pointBox(entity.loc, context);
+          reveal(box, t('intro.points.rightclick'), { duration: 600 });
 
-          if (!join.disabled(context.graph())) {
-              doUpdateTags = false;
-              action = join;
-          } else if (!merge.disabled(context.graph())) {
-              doUpdateTags = true;
-              action = merge;
-          } else if (!mergePolygon.disabled(context.graph())) {
-              doUpdateTags = false;
-              action = mergePolygon;
-          } else {
-              doUpdateTags = true;
-              action = mergeNodes;
-          }
+          timeout(function() {
+              context.map().on('move.intro drawn.intro', function() {
+                  var entity = context.hasEntity(_pointID);
+                  if (!entity) return chapter.restart();
+                  var box = pointBox(entity.loc, context);
+                  reveal(box, t('intro.points.rightclick'), { duration: 0 });
+              });
+          }, 600); // after reveal
 
-          context.perform(action, operation.annotation());
+          context.on('enter.intro', function(mode) {
+              if (mode.id !== 'select') return;
+              var ids = context.selectedIDs();
+              if (ids.length !== 1 || ids[0] !== _pointID) return;
 
-          var ids = selectedIDs.filter(function(id) {
-              var entity = context.hasEntity(id);
-              return entity && entity.type !== 'node';
+              timeout(function() {
+                  var node = selectMenuItem('delete').node();
+                  if (!node) return;
+                  continueTo(enterDelete);
+              }, 300);  // after menu visible
           });
 
-          // if we merged tags, rematch preset to update tags if necessary (#3851)
-          if (doUpdateTags) {
-              updatePresetTags(context.graph(), ids);
+          function continueTo(nextStep) {
+              context.on('enter.intro', null);
+              context.map().on('move.intro drawn.intro', null);
+              nextStep();
           }
+      }
 
-          context.enter(modeSelect(context, ids));
-      };
 
+      function enterDelete() {
+          if (!_pointID) return chapter.restart();
+          var entity = context.hasEntity(_pointID);
+          if (!entity) return chapter.restart();
 
-      operation.available = function() {
-          return selectedIDs.length >= 2;
-      };
+          var node = selectMenuItem('delete').node();
+          if (!node) { return continueTo(rightClickPoint); }
 
+          revealEditMenu(entity.loc,
+              t('intro.points.delete', { button: icon('#iD-operation-delete', 'pre-text') })
+          );
 
-      operation.disabled = function() {
-          return join.disabled(context.graph()) &&
-              merge.disabled(context.graph()) &&
-              mergePolygon.disabled(context.graph()) &&
-              mergeNodes.disabled(context.graph());
-      };
+          timeout(function() {
+              context.map().on('move.intro drawn.intro', function() {
+                  revealEditMenu(entity.loc,
+                      t('intro.points.delete', { button: icon('#iD-operation-delete', 'pre-text') }),
+                      { duration: 0}
+                  );
+              });
+          }, 300); // after menu visible
 
+          context.on('exit.intro', function() {
+              if (!_pointID) return chapter.restart();
+              var entity = context.hasEntity(_pointID);
+              if (entity) return continueTo(rightClickPoint);  // point still exists
+          });
 
-      operation.tooltip = function() {
-          var j = join.disabled(context.graph());          // 'not_eligible', 'not_adjacent', 'restriction', 'conflicting_tags'
-          var m = merge.disabled(context.graph());         // 'not_eligible'
-          var p = mergePolygon.disabled(context.graph());  // 'not_eligible', 'incomplete_relation'
-          var n = mergeNodes.disabled(context.graph());    // 'not_eligible', 'relation', 'restriction'
+          context.history().on('change.intro', function(changed) {
+              if (changed.deleted().length) {
+                  continueTo(undo);
+              }
+          });
 
-          // disabled for one of various reasons
-          if (j && m && p && n) {
-              if (j === 'restriction' || n === 'restriction') {
-                  return t('operations.merge.restriction',
-                      { relation: context.presets().item('type/restriction').name() });
+          function continueTo(nextStep) {
+              context.map().on('move.intro drawn.intro', null);
+              context.history().on('change.intro', null);
+              context.on('exit.intro', null);
+              nextStep();
+          }
+      }
 
-              } else if (p === 'incomplete_relation') {
-                  return t('operations.merge.incomplete_relation');
 
-              } else if (n === 'relation') {
-                  return t('operations.merge.relation');
+      function undo() {
+          context.history().on('change.intro', function() {
+              continueTo(play);
+          });
 
-              } else {
-                  return t('operations.merge.' + j);
-              }
+          var iconName = '#iD-icon-' + (textDirection === 'rtl' ? 'redo' : 'undo');
+          reveal('#bar button.undo-button',
+              t('intro.points.undo', { button: icon(iconName, 'pre-text') })
+          );
 
-          } else {
-              return t('operations.merge.description');
+          function continueTo(nextStep) {
+              context.history().on('change.intro', null);
+              nextStep();
           }
-      };
-
-
-      operation.annotation = function() {
-          return t('operations.merge.annotation', { n: selectedIDs.length });
-      };
+      }
 
 
-      operation.id = 'merge';
-      operation.keys = [t('operations.merge.key')];
-      operation.title = t('operations.merge.title');
-      operation.behavior = behaviorOperation(context).which(operation);
+      function play() {
+          dispatch$1.call('done');
+          reveal('#id-container',
+              t('intro.points.play', { next: t('intro.areas.title') }), {
+                  tooltipBox: '.intro-nav-wrap .chapter-area',
+                  buttonText: t('intro.ok'),
+                  buttonCallback: function() { reveal('#id-container'); }
+              }
+          );
+      }
 
-      return operation;
-  }
 
-  function operationMove(selectedIDs, context) {
-      var multi = (selectedIDs.length === 1 ? 'single' : 'multiple');
-      var extent = selectedIDs.reduce(function(extent, id) {
-          return extent.extend(context.entity(id).extent(context.graph()));
-      }, geoExtent$$1());
+      chapter.enter = function() {
+          addPoint();
+      };
 
 
-      var operation = function() {
-          context.enter(modeMove$$1(context, selectedIDs));
+      chapter.exit = function() {
+          timeouts.forEach(window.clearTimeout);
+          context.on('enter.intro exit.intro', null);
+          context.map().on('move.intro drawn.intro', null);
+          context.history().on('change.intro', null);
+          select('.inspector-wrap').on('wheel.intro', eventCancel);
+          select('.preset-search-input').on('keydown.intro keyup.intro', null);
       };
 
 
-      operation.available = function() {
-          return selectedIDs.length > 1 ||
-              context.entity(selectedIDs[0]).type !== 'node';
+      chapter.restart = function() {
+          chapter.exit();
+          chapter.enter();
       };
 
 
-      operation.disabled = function() {
-          var reason;
-          if (extent.area() && extent.percentContainedIn(context.extent()) < 0.8) {
-              reason = 'too_large';
-          } else if (some(selectedIDs, context.hasHiddenConnections)) {
-              reason = 'connected_to_hidden';
-          } else if (some(selectedIDs, incompleteRelation)) {
-              reason = 'incomplete_relation';
-          }
-          return reason;
+      return utilRebind(chapter, dispatch$1, 'on');
+  }
 
-          function incompleteRelation(id) {
-              var entity = context.entity(id);
-              return entity.type === 'relation' && !entity.isComplete(context.graph());
-          }
-      };
+  function uiIntroArea(context, reveal) {
+      var dispatch$1 = dispatch('done');
+      var playground = [-85.63552, 41.94159];
+      var playgroundPreset = context.presets().item('leisure/playground');
+      var descriptionField = context.presets().field('description');
+      var timeouts = [];
+      var _areaID;
 
 
-      operation.tooltip = function() {
-          var disable = operation.disabled();
-          return disable ?
-              t('operations.move.' + disable + '.' + multi) :
-              t('operations.move.description.' + multi);
+      var chapter = {
+          title: 'intro.areas.title'
       };
 
 
-      operation.annotation = function() {
-          return selectedIDs.length === 1 ?
-              t('operations.move.annotation.' + context.geometry(selectedIDs[0])) :
-              t('operations.move.annotation.multiple');
-      };
+      function timeout(f, t) {
+          timeouts.push(window.setTimeout(f, t));
+      }
 
 
-      operation.id = 'move';
-      operation.keys = [t('operations.move.key')];
-      operation.title = t('operations.move.title');
-      operation.behavior = behaviorOperation(context).which(operation);
+      function eventCancel() {
+          event.stopPropagation();
+          event.preventDefault();
+      }
 
-      return operation;
-  }
 
-  function operationOrthogonalize(selectedIDs, context) {
-      var entityId = selectedIDs[0],
-          entity = context.entity(entityId),
-          extent = entity.extent(context.graph()),
-          geometry = context.geometry(entityId),
-          action = actionOrthogonalize(entityId, context.projection);
+      function revealPlayground(center, text, options) {
+          var padding = 180 * Math.pow(2, context.map().zoom() - 19.5);
+          var box = pad$1(center, padding, context);
+          reveal(box, text, options);
+      }
 
 
-      var operation = function() {
-          context.perform(action, operation.annotation());
-      };
+      function addArea() {
+          context.enter(modeBrowse(context));
+          context.history().reset('initial');
+          _areaID = null;
 
+          var msec = transitionTime(playground, context.map().center());
+          if (msec) { reveal(null, null, { duration: 0 }); }
+          context.map().centerZoomEase(playground, 19, msec);
 
-      operation.available = function() {
-          return selectedIDs.length === 1 &&
-              entity.type === 'way' &&
-              entity.isClosed() &&
-              uniq(entity.nodes).length > 2;
-      };
+          timeout(function() {
+              var tooltip = reveal('button.add-area',
+                  t('intro.areas.add_playground', { button: icon('#iD-icon-area', 'pre-text') }));
 
+              tooltip.selectAll('.tooltip-inner')
+                  .insert('svg', 'span')
+                  .attr('class', 'tooltip-illustration')
+                  .append('use')
+                  .attr('xlink:href', '#iD-graphic-areas');
 
-      operation.disabled = function() {
-          var reason;
-          if (extent.percentContainedIn(context.extent()) < 0.8) {
-              reason = 'too_large';
-          } else if (context.hasHiddenConnections(entityId)) {
-              reason = 'connected_to_hidden';
+              context.on('enter.intro', function(mode) {
+                  if (mode.id !== 'add-area') return;
+                  continueTo(startPlayground);
+              });
+          }, msec + 100);
+
+          function continueTo(nextStep) {
+              context.on('enter.intro', null);
+              nextStep();
           }
-          return action.disabled(context.graph()) || reason;
-      };
+      }
 
 
-      operation.tooltip = function() {
-          var disable = operation.disabled();
-          return disable ?
-              t('operations.orthogonalize.' + disable) :
-              t('operations.orthogonalize.description.' + geometry);
-      };
+      function startPlayground() {
+          if (context.mode().id !== 'add-area') {
+              return chapter.restart();
+          }
 
+          _areaID = null;
+          context.map().zoomEase(19.5, 500);
 
-      operation.annotation = function() {
-          return t('operations.orthogonalize.annotation.' + geometry);
-      };
+          timeout(function() {
+              revealPlayground(playground,
+                  t('intro.areas.start_playground'), { duration: 250 }
+              );
 
+              timeout(function() {
+                  context.map().on('move.intro drawn.intro', function() {
+                      revealPlayground(playground,
+                          t('intro.areas.start_playground'), { duration: 0 }
+                      );
+                  });
+                  context.on('enter.intro', function(mode) {
+                      if (mode.id !== 'draw-area') return chapter.restart();
+                      continueTo(continuePlayground);
+                  });
+              }, 250);  // after reveal
 
-      operation.id = 'orthogonalize';
-      operation.keys = [t('operations.orthogonalize.key')];
-      operation.title = t('operations.orthogonalize.title');
-      operation.behavior = behaviorOperation(context).which(operation);
+          }, 550);  // after easing
 
-      return operation;
-  }
+          function continueTo(nextStep) {
+              context.map().on('move.intro drawn.intro', null);
+              context.on('enter.intro', null);
+              nextStep();
+          }
+      }
 
-  function operationReflectShort(selectedIDs, context) {
-      return operationReflect(selectedIDs, context, 'short');
-  }
 
+      function continuePlayground() {
+          if (context.mode().id !== 'draw-area') {
+              return chapter.restart();
+          }
 
-  function operationReflectLong(selectedIDs, context) {
-      return operationReflect(selectedIDs, context, 'long');
-  }
+          _areaID = null;
+          revealPlayground(playground,
+              t('intro.areas.continue_playground', { alt: uiCmd.display('⌥') }),
+              { duration: 250 }
+          );
 
+          timeout(function() {
+              context.map().on('move.intro drawn.intro', function() {
+                  revealPlayground(playground,
+                      t('intro.areas.continue_playground', { alt: uiCmd.display('⌥') }),
+                      { duration: 0 }
+                  );
+              });
+          }, 250);  // after reveal
 
-  function operationReflect(selectedIDs, context, axis) {
-      axis = axis || 'long';
-      var multi = (selectedIDs.length === 1 ? 'single' : 'multiple'),
-          extent = selectedIDs.reduce(function(extent, id) {
-              return extent.extend(context.entity(id).extent(context.graph()));
-          }, geoExtent$$1());
+          context.on('enter.intro', function(mode) {
+              if (mode.id === 'draw-area') {
+                  var entity = context.hasEntity(context.selectedIDs()[0]);
+                  if (entity && entity.nodes.length >= 6) {
+                      return continueTo(finishPlayground);
+                  } else {
+                      return;
+                  }
+              } else if (mode.id === 'select') {
+                  _areaID = context.selectedIDs()[0];
+                  return continueTo(searchPresets);
+              } else {
+                  return chapter.restart();
+              }
+          });
 
+          function continueTo(nextStep) {
+              context.map().on('move.intro drawn.intro', null);
+              context.on('enter.intro', null);
+              nextStep();
+          }
+      }
 
-      var operation = function() {
-          var action = actionReflect(selectedIDs, context.projection)
-              .useLongAxis(Boolean(axis === 'long'));
-          context.perform(action, operation.annotation());
-      };
 
+      function finishPlayground() {
+          if (context.mode().id !== 'draw-area') {
+              return chapter.restart();
+          }
 
-      operation.available = function() {
-          var nodes = utilGetAllNodes(selectedIDs, context.graph());
-          return uniqBy(nodes, function(n) { return n.loc; }).length >= 3;
-      };
+          _areaID = null;
+          revealPlayground(playground,
+              t('intro.areas.finish_playground'), { duration: 250 }
+          );
 
+          timeout(function() {
+              context.map().on('move.intro drawn.intro', function() {
+                  revealPlayground(playground,
+                      t('intro.areas.finish_playground'), { duration: 0 }
+                  );
+              });
+          }, 250);  // after reveal
 
-      operation.disabled = function() {
-          var reason;
-          if (extent.area() && extent.percentContainedIn(context.extent()) < 0.8) {
-              reason = 'too_large';
-          } else if (some(selectedIDs, context.hasHiddenConnections)) {
-              reason = 'connected_to_hidden';
-          } else if (some(selectedIDs, incompleteRelation)) {
-              reason = 'incomplete_relation';
-          }
-          return reason;
+          context.on('enter.intro', function(mode) {
+              if (mode.id === 'draw-area') {
+                  return;
+              } else if (mode.id === 'select') {
+                  _areaID = context.selectedIDs()[0];
+                  return continueTo(searchPresets);
+              } else {
+                  return chapter.restart();
+              }
+          });
 
-          function incompleteRelation(id) {
-              var entity = context.entity(id);
-              return entity.type === 'relation' && !entity.isComplete(context.graph());
+          function continueTo(nextStep) {
+              context.map().on('move.intro drawn.intro', null);
+              context.on('enter.intro', null);
+              nextStep();
           }
-      };
-
+      }
 
-      operation.tooltip = function() {
-          var disable = operation.disabled();
-          return disable ?
-              t('operations.reflect.' + disable + '.' + multi) :
-              t('operations.reflect.description.' + axis + '.' + multi);
-      };
 
+      function searchPresets() {
+          if (!_areaID || !context.hasEntity(_areaID)) {
+              return addArea();
+          }
+          var ids = context.selectedIDs();
+          if (context.mode().id !== 'select' || !ids.length || ids[0] !== _areaID) {
+              context.enter(modeSelect(context, [_areaID]));
+          }
 
-      operation.annotation = function() {
-          return t('operations.reflect.annotation.' + axis + '.' + multi);
-      };
+          // disallow scrolling
+          select('.inspector-wrap').on('wheel.intro', eventCancel);
 
+          timeout(function() {
+              // reset pane, in case user somehow happened to change it..
+              select('.inspector-wrap .panewrap').style('right', '-100%');
 
-      operation.id = 'reflect-' + axis;
-      operation.keys = [t('operations.reflect.key.' + axis)];
-      operation.title = t('operations.reflect.title.' + axis);
-      operation.behavior = behaviorOperation(context).which(operation);
+              select('.preset-search-input')
+                  .on('keydown.intro', null)
+                  .on('keyup.intro', checkPresetSearch);
 
-      return operation;
-  }
+              reveal('.preset-search-input',
+                  t('intro.areas.search_playground', { preset: playgroundPreset.name() })
+              );
+          }, 400);  // after preset list pane visible..
 
-  function operationReverse(selectedIDs, context) {
-      var entityId = selectedIDs[0];
+          context.on('enter.intro', function(mode) {
+              if (!_areaID || !context.hasEntity(_areaID)) {
+                  return continueTo(addArea);
+              }
 
-      var operation = function() {
-          context.perform(actionReverse(entityId), operation.annotation());
-      };
+              var ids = context.selectedIDs();
+              if (mode.id !== 'select' || !ids.length || ids[0] !== _areaID) {
+                  // keep the user's area selected..
+                  context.enter(modeSelect(context, [_areaID]));
 
+                  // reset pane, in case user somehow happened to change it..
+                  select('.inspector-wrap .panewrap').style('right', '-100%');
+                  // disallow scrolling
+                  select('.inspector-wrap').on('wheel.intro', eventCancel);
 
-      operation.available = function() {
-          return selectedIDs.length === 1 && context.geometry(entityId) === 'line';
-      };
+                  select('.preset-search-input')
+                      .on('keydown.intro', null)
+                      .on('keyup.intro', checkPresetSearch);
 
+                  reveal('.preset-search-input',
+                      t('intro.areas.search_playground', { preset: playgroundPreset.name() })
+                  );
 
-      operation.disabled = function() {
-          return false;
-      };
+                  context.history().on('change.intro', null);
+              }
+          });
 
+          function checkPresetSearch() {
+              var first = select('.preset-list-item:first-child');
 
-      operation.tooltip = function() {
-          return t('operations.reverse.description');
-      };
+              if (first.classed('preset-leisure-playground')) {
+                  reveal(first.select('.preset-list-button').node(),
+                      t('intro.areas.choose_playground', { preset: playgroundPreset.name() }),
+                      { duration: 300 }
+                  );
 
+                  select('.preset-search-input')
+                      .on('keydown.intro', eventCancel, true)
+                      .on('keyup.intro', null);
 
-      operation.annotation = function() {
-          return t('operations.reverse.annotation');
-      };
+                  context.history().on('change.intro', function() {
+                      continueTo(clickAddField);
+                  });
+              }
+          }
 
+          function continueTo(nextStep) {
+              select('.inspector-wrap').on('wheel.intro', null);
+              context.on('enter.intro', null);
+              context.history().on('change.intro', null);
+              select('.preset-search-input').on('keydown.intro keyup.intro', null);
+              nextStep();
+          }
+      }
 
-      operation.id = 'reverse';
-      operation.keys = [t('operations.reverse.key')];
-      operation.title = t('operations.reverse.title');
-      operation.behavior = behaviorOperation(context).which(operation);
 
-      return operation;
-  }
+      function clickAddField() {
+          if (!_areaID || !context.hasEntity(_areaID)) {
+              return addArea();
+          }
+          var ids = context.selectedIDs();
+          if (context.mode().id !== 'select' || !ids.length || ids[0] !== _areaID) {
+              return searchPresets();
+          }
 
-  function operationRotate(selectedIDs, context) {
-      var multi = (selectedIDs.length === 1 ? 'single' : 'multiple'),
-          extent = selectedIDs.reduce(function(extent, id) {
-              return extent.extend(context.entity(id).extent(context.graph()));
-          }, geoExtent$$1());
+          if (!select('.form-field-description').empty()) {
+              return continueTo(describePlayground);
+          }
 
+          // disallow scrolling
+          select('.inspector-wrap').on('wheel.intro', eventCancel);
 
-      var operation = function() {
-          context.enter(modeRotate$$1(context, selectedIDs));
-      };
+          timeout(function() {
+              // reset pane, in case user somehow happened to change it..
+              select('.inspector-wrap .panewrap').style('right', '0%');
 
+              // It's possible for the user to add a description in a previous step..
+              // If they did this already, just continue to next step.
+              var entity = context.entity(_areaID);
+              if (entity.tags.description) {
+                  return continueTo(play);
+              }
 
-      operation.available = function() {
-          var nodes = utilGetAllNodes(selectedIDs, context.graph());
-          return uniqBy(nodes, function(n) { return n.loc; }).length >= 2;
-      };
+              // scroll "Add field" into view
+              var box = select('.more-fields').node().getBoundingClientRect();
+              if (box.top > 300) {
+                  var pane = select('.entity-editor-pane .inspector-body');
+                  var start = pane.node().scrollTop;
+                  var end = start + (box.top - 300);
 
+                  pane
+                      .transition()
+                      .duration(250)
+                      .tween('scroll.inspector', function() {
+                          var node = this;
+                          var i = interpolateNumber(start, end);
+                          return function(t) {
+                              node.scrollTop = i(t);
+                          };
+                      });
+              }
 
-      operation.disabled = function() {
-          var reason;
-          if (extent.area() && extent.percentContainedIn(context.extent()) < 0.8) {
-              reason = 'too_large';
-          } else if (some(selectedIDs, context.hasHiddenConnections)) {
-              reason = 'connected_to_hidden';
-          } else if (some(selectedIDs, incompleteRelation)) {
-              reason = 'incomplete_relation';
-          }
-          return reason;
+              timeout(function() {
+                  reveal('.more-fields .combobox-input',
+                      t('intro.areas.add_field'),
+                      { duration: 300 }
+                  );
 
-          function incompleteRelation(id) {
-              var entity = context.entity(id);
-              return entity.type === 'relation' && !entity.isComplete(context.graph());
-          }
-      };
+                  select('.more-fields .combobox-input')
+                      .on('click.intro', function() {
+                          // Watch for the combobox to appear...
+                          var watcher;
+                          watcher = window.setInterval(function() {
+                              if (!select('div.combobox').empty()) {
+                                  window.clearInterval(watcher);
+                                  continueTo(chooseDescriptionField);
+                              }
+                          }, 300);
+                      });
+              }, 300);  // after "Add Field" visible
 
+          }, 400);  // after editor pane visible
 
-      operation.tooltip = function() {
-          var disable = operation.disabled();
-          return disable ?
-              t('operations.rotate.' + disable + '.' + multi) :
-              t('operations.rotate.description.' + multi);
-      };
+          context.on('exit.intro', function() {
+              return continueTo(searchPresets);
+          });
 
+          function continueTo(nextStep) {
+              select('.inspector-wrap').on('wheel.intro', null);
+              select('.more-fields .combobox-input').on('click.intro', null);
+              context.on('exit.intro', null);
+              nextStep();
+          }
+      }
 
-      operation.annotation = function() {
-          return selectedIDs.length === 1 ?
-              t('operations.rotate.annotation.' + context.geometry(selectedIDs[0])) :
-              t('operations.rotate.annotation.multiple');
-      };
 
+      function chooseDescriptionField() {
+          if (!_areaID || !context.hasEntity(_areaID)) {
+              return addArea();
+          }
+          var ids = context.selectedIDs();
+          if (context.mode().id !== 'select' || !ids.length || ids[0] !== _areaID) {
+              return searchPresets();
+          }
 
-      operation.id = 'rotate';
-      operation.keys = [t('operations.rotate.key')];
-      operation.title = t('operations.rotate.title');
-      operation.behavior = behaviorOperation(context).which(operation);
+          if (!select('.form-field-description').empty()) {
+              return continueTo(describePlayground);
+          }
 
-      return operation;
-  }
+          // Make sure combobox is ready..
+          if (select('div.combobox').empty()) {
+              return continueTo(clickAddField);
+          }
+          // Watch for the combobox to go away..
+          var watcher;
+          watcher = window.setInterval(function() {
+              if (select('div.combobox').empty()) {
+                  window.clearInterval(watcher);
+                  timeout(function() {
+                      if (select('.form-field-description').empty()) {
+                          continueTo(retryChooseDescription);
+                      } else {
+                          continueTo(describePlayground);
+                      }
+                  }, 300);  // after description field added.
+              }
+          }, 300);
 
-  function operationSplit(selectedIDs, context) {
-      var vertices = filter(selectedIDs, function(entityId) {
-          return context.geometry(entityId) === 'vertex';
-      });
+          reveal('div.combobox',
+              t('intro.areas.choose_field', { field: descriptionField.label() }),
+              { duration: 300 }
+          );
 
-      var entityId = vertices[0],
-          action = actionSplit(entityId),
-          ways = [];
+          context.on('exit.intro', function() {
+              return continueTo(searchPresets);
+          });
 
-      if (vertices.length === 1) {
-          if (selectedIDs.length > 1) {
-              action.limitWays(without(selectedIDs, entityId));
+          function continueTo(nextStep) {
+              if (watcher) window.clearInterval(watcher);
+              context.on('exit.intro', null);
+              nextStep();
           }
-          ways = action.ways(context.graph());
       }
 
 
-      var operation = function() {
-          var difference = context.perform(action, operation.annotation());
-          context.enter(modeSelect(context, difference.extantIDs()));
-      };
+      function describePlayground() {
+          if (!_areaID || !context.hasEntity(_areaID)) {
+              return addArea();
+          }
+          var ids = context.selectedIDs();
+          if (context.mode().id !== 'select' || !ids.length || ids[0] !== _areaID) {
+              return searchPresets();
+          }
 
+          // reset pane, in case user happened to change it..
+          select('.inspector-wrap .panewrap').style('right', '0%');
 
-      operation.available = function() {
-          return vertices.length === 1;
-      };
+          if (select('.form-field-description').empty()) {
+              return continueTo(retryChooseDescription);
+          }
 
+          context.on('exit.intro', function() {
+              continueTo(play);
+          });
 
-      operation.disabled = function() {
-          var reason;
-          if (some(selectedIDs, context.hasHiddenConnections)) {
-              reason = 'connected_to_hidden';
+          reveal('.entity-editor-pane',
+              t('intro.areas.describe_playground', { button: icon('#iD-icon-apply', 'pre-text') }),
+              { duration: 300 }
+          );
+
+          function continueTo(nextStep) {
+              context.on('exit.intro', null);
+              nextStep();
           }
-          return action.disabled(context.graph()) || reason;
-      };
+      }
 
 
-      operation.tooltip = function() {
-          var disable = operation.disabled();
-          if (disable) {
-              return t('operations.split.' + disable);
+      function retryChooseDescription() {
+          if (!_areaID || !context.hasEntity(_areaID)) {
+              return addArea();
           }
-          if (ways.length === 1) {
-              return t('operations.split.description.' + context.geometry(ways[0].id));
-          } else {
-              return t('operations.split.description.multiple');
+          var ids = context.selectedIDs();
+          if (context.mode().id !== 'select' || !ids.length || ids[0] !== _areaID) {
+              return searchPresets();
           }
-      };
-
-
-      operation.annotation = function() {
-          return ways.length === 1 ?
-              t('operations.split.annotation.' + context.geometry(ways[0].id)) :
-              t('operations.split.annotation.multiple', { n: ways.length });
-      };
 
+          // reset pane, in case user happened to change it..
+          select('.inspector-wrap .panewrap').style('right', '0%');
 
-      operation.id = 'split';
-      operation.keys = [t('operations.split.key')];
-      operation.title = t('operations.split.title');
-      operation.behavior = behaviorOperation(context).which(operation);
+          reveal('.entity-editor-pane',
+              t('intro.areas.retry_add_field', { field: descriptionField.label() }), {
+              buttonText: t('intro.ok'),
+              buttonCallback: function() { continueTo(clickAddField); }
+          });
 
-      return operation;
-  }
+          context.on('exit.intro', function() {
+              return continueTo(searchPresets);
+          });
 
-  function operationStraighten(selectedIDs, context) {
-      var entityId = selectedIDs[0],
-          action = actionStraighten(entityId, context.projection);
+          function continueTo(nextStep) {
+              context.on('exit.intro', null);
+              nextStep();
+          }
+      }
 
 
-      function operation() {
-          context.perform(action, operation.annotation());
+      function play() {
+          dispatch$1.call('done');
+          reveal('#id-container',
+              t('intro.areas.play', { next: t('intro.lines.title') }), {
+                  tooltipBox: '.intro-nav-wrap .chapter-line',
+                  buttonText: t('intro.ok'),
+                  buttonCallback: function() { reveal('#id-container'); }
+              }
+          );
       }
 
 
-      operation.available = function() {
-          var entity = context.entity(entityId);
-          return selectedIDs.length === 1 &&
-              entity.type === 'way' &&
-              !entity.isClosed() &&
-              uniq(entity.nodes).length > 2;
+      chapter.enter = function() {
+          addArea();
       };
 
 
-      operation.disabled = function() {
-          var reason;
-          if (context.hasHiddenConnections(entityId)) {
-              reason = 'connected_to_hidden';
-          }
-          return action.disabled(context.graph()) || reason;
+      chapter.exit = function() {
+          timeouts.forEach(window.clearTimeout);
+          context.on('enter.intro exit.intro', null);
+          context.map().on('move.intro drawn.intro', null);
+          context.history().on('change.intro', null);
+          select('.inspector-wrap').on('wheel.intro', null);
+          select('.preset-search-input').on('keydown.intro keyup.intro', null);
+          select('.more-fields .combobox-input').on('click.intro', null);
       };
 
 
-      operation.tooltip = function() {
-          var disable = operation.disabled();
-          return disable ?
-              t('operations.straighten.' + disable) :
-              t('operations.straighten.description');
+      chapter.restart = function() {
+          chapter.exit();
+          chapter.enter();
       };
 
 
-      operation.annotation = function() {
-          return t('operations.straighten.annotation');
-      };
-
+      return utilRebind(chapter, dispatch$1, 'on');
+  }
 
-      operation.id = 'straighten';
-      operation.keys = [t('operations.straighten.key')];
-      operation.title = t('operations.straighten.title');
-      operation.behavior = behaviorOperation(context).which(operation);
+  function uiIntroLine(context, reveal) {
+      var dispatch$1 = dispatch('done');
+      var timeouts = [];
+      var _tulipRoadID = null;
+      var flowerRoadID = 'w646';
+      var tulipRoadStart = [-85.6297754121684, 41.95805253325314];
+      var tulipRoadMidpoint = [-85.62975395449628, 41.95787501510204];
+      var tulipRoadIntersection = [-85.62974496187628, 41.95742515554585];
+      var roadCategory = context.presets().item('category-road');
+      var residentialPreset = context.presets().item('highway/residential');
+      var woodRoadID = 'w525';
+      var woodRoadEndID = 'n2862';
+      var woodRoadAddNode = [-85.62390110349587, 41.95397111462291];
+      var woodRoadDragEndpoint = [-85.623867390213, 41.95466987786487];
+      var woodRoadDragMidpoint = [-85.62386254803509, 41.95430395953872];
+      var washingtonStreetID = 'w522';
+      var twelfthAvenueID = 'w1';
+      var eleventhAvenueEndID = 'n3550';
+      var twelfthAvenueEndID = 'n5';
+      var _washingtonSegmentID = null;
+      var eleventhAvenueEnd = context.entity(eleventhAvenueEndID).loc;
+      var twelfthAvenueEnd = context.entity(twelfthAvenueEndID).loc;
+      var deleteLinesLoc = [-85.6219395542764, 41.95228033922477];
+      var twelfthAvenue = [-85.62219310052491, 41.952505413152956];
 
-      return operation;
-  }
 
-  function operationDetachNode(selectedIDs, context) {
-      var nodeID = selectedIDs.length && selectedIDs[0];
-      var action = actionDetachNode(nodeID);
+      var chapter = {
+          title: 'intro.lines.title'
+      };
 
-      var operation = function () {
-          context.perform(action);  // do the detach
 
-          var mouse = context.map().mouseCoordinates();
-          if (mouse.some(isNaN)) {
-              enterMoveMode();
+      function timeout(f, t) {
+          timeouts.push(window.setTimeout(f, t));
+      }
 
-          } else {
-              // move detached node to the mouse location (transitioned)
-              context.perform(actionMoveNode(nodeID, mouse));
 
-              // after transition completes, put at final mouse location and enter move mode.
-              window.setTimeout(function() {
-                  mouse = context.map().mouseCoordinates();
-                  context.replace(actionMoveNode(nodeID, mouse));
-                  enterMoveMode();
-              }, 150);
-          }
+      function eventCancel() {
+          event.stopPropagation();
+          event.preventDefault();
+      }
 
-          function enterMoveMode() {
-              var baseGraph = context.graph();
-              context.enter(modeMove$$1(context, [nodeID], baseGraph));
-          }
-      };
 
+      function revealEditMenu(loc, text, options) {
+          var rect = context.surfaceRect();
+          var point = context.curtainProjection(loc);
+          var pad = 40;
+          var width = 250 + (2 * pad);
+          var height = 350;
+          var startX = rect.left + point[0];
+          var left = (textDirection === 'rtl') ? (startX - width + pad) : (startX - pad);
+          var box = {
+              left: left,
+              top: point[1] + rect.top - 60,
+              width: width,
+              height: height
+          };
+          reveal(box, text, options);
+      }
 
-      operation.available = function () {
-          if (selectedIDs.length !== 1) return false;
 
-          var graph = context.graph();
-          var entity = graph.hasEntity(nodeID);
-          if (!entity) return false;
+      function addLine() {
+          context.enter(modeBrowse(context));
+          context.history().reset('initial');
 
-          return entity.type === 'node' &&
-              entity.hasInterestingTags() &&
-              graph.parentWays(entity).length > 0;
-      };
+          var msec = transitionTime(tulipRoadStart, context.map().center());
+          if (msec) { reveal(null, null, { duration: 0 }); }
+          context.map().centerZoomEase(tulipRoadStart, 18.5, msec);
 
+          timeout(function() {
+              var tooltip = reveal('button.add-line',
+                  t('intro.lines.add_line', { button: icon('#iD-icon-line', 'pre-text') }));
 
-      operation.disabled = function () {
-          var reason;
-          if (some(selectedIDs, context.hasHiddenConnections)) {
-              reason = 'connected_to_hidden';
-          }
-          return action.disabled(context.graph()) || reason;
-      };
+              tooltip.selectAll('.tooltip-inner')
+                  .insert('svg', 'span')
+                  .attr('class', 'tooltip-illustration')
+                  .append('use')
+                  .attr('xlink:href', '#iD-graphic-lines');
 
+              context.on('enter.intro', function(mode) {
+                  if (mode.id !== 'add-line') return;
+                  continueTo(startLine);
+              });
+          }, msec + 100);
 
-      operation.tooltip = function () {
-          var disableReason = operation.disabled();
-          if (disableReason) {
-              return t('operations.detach_node.' + disableReason,
-                  { relation: context.presets().item('type/restriction').name() });
-          } else {
-              return t('operations.detach_node.description');
+          function continueTo(nextStep) {
+              context.on('enter.intro', null);
+              nextStep();
           }
-      };
+      }
 
 
-      operation.annotation = function () {
-          return t('operations.detach_node.annotation');
-      };
+      function startLine() {
+          if (context.mode().id !== 'add-line') return chapter.restart();
 
+          _tulipRoadID = null;
 
-      operation.id = 'detach-node';
-      operation.keys = [t('operations.detach_node.key')];
-      operation.title = t('operations.detach_node.title');
-      operation.behavior = behaviorOperation(context).which(operation);
+          var padding = 70 * Math.pow(2, context.map().zoom() - 18);
+          var box = pad$1(tulipRoadStart, padding, context);
+          box.height = box.height + 100;
+          reveal(box, t('intro.lines.start_line'));
 
+          context.map().on('move.intro drawn.intro', function() {
+              padding = 70 * Math.pow(2, context.map().zoom() - 18);
+              box = pad$1(tulipRoadStart, padding, context);
+              box.height = box.height + 100;
+              reveal(box, t('intro.lines.start_line'), { duration: 0 });
+          });
 
-      return operation;
-  }
+          context.on('enter.intro', function(mode) {
+              if (mode.id !== 'draw-line') return chapter.restart();
+              continueTo(drawLine);
+          });
 
+          function continueTo(nextStep) {
+              context.map().on('move.intro drawn.intro', null);
+              context.on('enter.intro', null);
+              nextStep();
+          }
+      }
 
 
-  var Operations = /*#__PURE__*/Object.freeze({
-    operationCircularize: operationCircularize,
-    operationContinue: operationContinue,
-    operationDelete: operationDelete,
-    operationDisconnect: operationDisconnect,
-    operationMerge: operationMerge,
-    operationMove: operationMove,
-    operationOrthogonalize: operationOrthogonalize,
-    operationReflectShort: operationReflectShort,
-    operationReflectLong: operationReflectLong,
-    operationReverse: operationReverse,
-    operationRotate: operationRotate,
-    operationSplit: operationSplit,
-    operationStraighten: operationStraighten,
-    operationDetachNode: operationDetachNode
-  });
+      function drawLine() {
+          if (context.mode().id !== 'draw-line') return chapter.restart();
 
-  function uiPresetList(context) {
-      var dispatch$$1 = dispatch('choose');
-      var _entityID;
-      var _currentPreset;
-      var _autofocus = false;
+          _tulipRoadID = context.mode().selectedIDs()[0];
+          context.map().centerEase(tulipRoadMidpoint, 500);
 
+          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;
+              reveal(box,
+                  t('intro.lines.intersect', { name: t('intro.graph.name.flower-street') })
+              );
 
-      function presetList(selection$$1) {
-          var entity = context.entity(_entityID);
-          var geometry = context.geometry(_entityID);
+              context.map().on('move.intro drawn.intro', function() {
+                  padding = 200 * Math.pow(2, context.map().zoom() - 18.5);
+                  box = pad$1(tulipRoadMidpoint, padding, context);
+                  box.height = box.height * 2;
+                  reveal(box,
+                      t('intro.lines.intersect', { name: t('intro.graph.name.flower-street') }),
+                      { duration: 0 }
+                  );
+              });
+          }, 550);  // after easing..
 
-          // Treat entities on addr:interpolation lines as points, not vertices (#3241)
-          if (geometry === 'vertex' && entity.isOnAddressLine(context.graph())) {
-              geometry = 'point';
-          }
+          context.history().on('change.intro', function() {
+              if (isLineConnected()) {
+                  continueTo(continueLine);
+              }
+          });
 
-          var presets = context.presets().matchGeometry(geometry);
+          context.on('enter.intro', function(mode) {
+              if (mode.id === 'draw-line') {
+                  return;
+              } else if (mode.id === 'select') {
+                  continueTo(retryIntersect);
+                  return;
+              } else {
+                  return chapter.restart();
+              }
+          });
 
-          selection$$1.html('');
+          function continueTo(nextStep) {
+              context.map().on('move.intro drawn.intro', null);
+              context.history().on('change.intro', null);
+              context.on('enter.intro', null);
+              nextStep();
+          }
+      }
 
-          var messagewrap = selection$$1
-              .append('div')
-              .attr('class', 'header fillL cf');
 
-          var message = messagewrap
-              .append('h3')
-              .text(t('inspector.choose'));
+      function isLineConnected() {
+          var entity = _tulipRoadID && context.hasEntity(_tulipRoadID);
+          if (!entity) return false;
 
-          messagewrap
-              .append('button')
-              .attr('class', 'preset-choose')
-              .on('click', function() { dispatch$$1.call('choose', this, _currentPreset); })
-              .call(svgIcon((textDirection === 'rtl') ? '#iD-icon-backward' : '#iD-icon-forward'));
+          var drawNodes = context.graph().childNodes(entity);
+          return some(drawNodes, function(node) {
+              return some(context.graph().parentWays(node), function(parent) {
+                  return parent.id === flowerRoadID;
+              });
+          });
+      }
 
-          function initialKeydown() {
-              // hack to let delete shortcut work when search is autofocused
-              if (search.property('value').length === 0 &&
-                  (event.keyCode === utilKeybinding.keyCodes['⌫'] ||
-                   event.keyCode === utilKeybinding.keyCodes['⌦'])) {
-                  event.preventDefault();
-                  event.stopPropagation();
-                  operationDelete([_entityID], context)();
 
-              // hack to let undo work when search is autofocused
-              } else if (search.property('value').length === 0 &&
-                  (event.ctrlKey || event.metaKey) &&
-                  event.keyCode === utilKeybinding.keyCodes.z) {
-                  event.preventDefault();
-                  event.stopPropagation();
-                  context.undo();
-              } else if (!event.ctrlKey && !event.metaKey) {
-                  // don't check for delete/undo hack on future keydown events
-                  select(this).on('keydown', keydown);
-                  keydown.call(this);
-              }
-          }
+      function retryIntersect() {
+          select(window).on('mousedown.intro', eventCancel, true);
 
-          function keydown() {
-              // down arrow
-              if (event.keyCode === utilKeybinding.keyCodes['↓'] &&
-                  // if insertion point is at the end of the string
-                  search.node().selectionStart === search.property('value').length) {
-                  event.preventDefault();
-                  event.stopPropagation();
-                  // move focus to the first item in the preset list
-                  list.select('.preset-list-button').node().focus();
-              }
-          }
+          var box = pad$1(tulipRoadIntersection, 80, context);
+          reveal(box,
+              t('intro.lines.retry_intersect', { name: t('intro.graph.name.flower-street') })
+          );
 
-          function keypress() {
-              // enter
-              var value = search.property('value');
-              if (event.keyCode === 13 && value.length) {
-                  list.selectAll('.preset-list-item:first-child').datum().choose();
-              }
-          }
+          timeout(chapter.restart, 3000);
+      }
 
-          function inputevent() {
-              var value = search.property('value');
-              list.classed('filtered', value.length);
-              if (value.length) {
-                  var results = presets.search(value, geometry);
-                  message.text(t('inspector.results', {
-                      n: results.collection.length,
-                      search: value
-                  }));
-                  list.call(drawList, results);
-              } else {
-                  list.call(drawList, context.presets().defaults(geometry, 36));
-                  message.text(t('inspector.choose'));
-              }
-          }
 
-          var searchWrap = selection$$1
-              .append('div')
-              .attr('class', 'search-header');
+      function continueLine() {
+          if (context.mode().id !== 'draw-line') return chapter.restart();
+          var entity = _tulipRoadID && context.hasEntity(_tulipRoadID);
+          if (!entity) return chapter.restart();
 
-          var search = searchWrap
-              .append('input')
-              .attr('class', 'preset-search-input')
-              .attr('placeholder', t('inspector.search'))
-              .attr('type', 'search')
-              .call(utilNoAuto)
-              .on('keydown', initialKeydown)
-              .on('keypress', keypress)
-              .on('input', inputevent);
+          context.map().centerEase(tulipRoadIntersection, 500);
 
-          searchWrap
-              .call(svgIcon('#iD-icon-search', 'pre-text'));
+          reveal('#surface', t('intro.lines.continue_line'));
 
-          if (_autofocus) {
-              search.node().focus();
+          context.on('enter.intro', function(mode) {
+              if (mode.id === 'draw-line')
+                  return;
+              else if (mode.id === 'select')
+                  return continueTo(chooseCategoryRoad);
+              else
+                  return chapter.restart();
+          });
+
+          function continueTo(nextStep) {
+              context.on('enter.intro', null);
+              nextStep();
           }
+      }
 
-          var listWrap = selection$$1
-              .append('div')
-              .attr('class', 'inspector-body');
 
-          var list = listWrap
-              .append('div')
-              .attr('class', 'preset-list fillL cf')
-              .call(drawList, context.presets().defaults(geometry, 36));
-      }
+      function chooseCategoryRoad() {
+          if (context.mode().id !== 'select') return chapter.restart();
 
+          context.on('exit.intro', function() {
+              return chapter.restart();
+          });
 
-      function drawList(list, presets) {
-          var collection = presets.collection.reduce(function(collection, preset) {
-              if (preset.members) {
-                  collection.push(CategoryItem(preset));
-              } else if (preset.visible()) {
-                  collection.push(PresetItem(preset));
-              }
-              return collection;
-          }, []);
+          var button = select('.preset-category-road .preset-list-button');
+          if (button.empty()) return chapter.restart();
 
-          var items = list.selectAll('.preset-list-item')
-              .data(collection, function(d) { return d.preset.id; });
+          // disallow scrolling
+          select('.inspector-wrap').on('wheel.intro', eventCancel);
 
-          items.order();
+          timeout(function() {
+              // reset pane, in case user somehow happened to change it..
+              select('.inspector-wrap .panewrap').style('right', '-100%');
 
-          items.exit()
-              .remove();
+              reveal(button.node(),
+                  t('intro.lines.choose_category_road', { category: roadCategory.name() })
+              );
 
-          items.enter()
-              .append('div')
-              .attr('class', function(item) { return 'preset-list-item preset-' + item.preset.id.replace('/', '-'); })
-              .classed('current', function(item) { return item.preset === _currentPreset; })
-              .each(function(item) { select(this).call(item); })
-              .style('opacity', 0)
-              .transition()
-              .style('opacity', 1);
+              button.on('click.intro', function() {
+                  continueTo(choosePresetResidential);
+              });
+
+          }, 400);  // after editor pane visible
+
+          function continueTo(nextStep) {
+              select('.inspector-wrap').on('wheel.intro', null);
+              select('.preset-list-button').on('click.intro', null);
+              context.on('exit.intro', null);
+              nextStep();
+          }
       }
 
-      function itemKeydown(){
-          // the actively focused item
-          var item = select(this.closest('.preset-list-item'));
-          var parentItem = select(item.node().parentElement.closest('.preset-list-item'));
 
-          // arrow down, move focus to the next, lower item
-          if (event.keyCode === utilKeybinding.keyCodes['↓']) {
-              event.preventDefault();
-              event.stopPropagation();
-              // the next item in the list at the same level
-              var nextItem = select(item.node().nextElementSibling);
-              // if there is no next item in this list
-              if (nextItem.empty()) {
-                  // if there is a parent item
-                  if (!parentItem.empty()) {
-                      // the item is the last item of a sublist,
-                      // select the next item at the parent level
-                      nextItem = select(parentItem.node().nextElementSibling);
-                  }
-              // if the focused item is expanded
-              } else if (select(this).classed('expanded')) {
-                  // select the first subitem instead
-                  nextItem = item.select('.subgrid .preset-list-item:first-child');
-              }
-              if (!nextItem.empty()) {
-                  // focus on the next item
-                  nextItem.select('.preset-list-button').node().focus();
-              }
+      function choosePresetResidential() {
+          if (context.mode().id !== 'select') return chapter.restart();
 
-          // arrow up, move focus to the previous, higher item
-          } else if (event.keyCode === utilKeybinding.keyCodes['↑']) {
-              event.preventDefault();
-              event.stopPropagation();
-              // the previous item in the list at the same level
-              var previousItem = select(item.node().previousElementSibling);
+          context.on('exit.intro', function() {
+              return chapter.restart();
+          });
 
-              // if there is no previous item in this list
-              if (previousItem.empty()) {
-                  // if there is a parent item
-                  if (!parentItem.empty()) {
-                      // the item is the first subitem of a sublist select the parent item
-                      previousItem = parentItem;
-                  }
-              // if the previous item is expanded
-              } else if (previousItem.select('.preset-list-button').classed('expanded')) {
-                  // select the last subitem of the sublist of the previous item
-                  previousItem = previousItem.select('.subgrid .preset-list-item:last-child');
-              }
+          var subgrid = select('.preset-category-road .subgrid');
+          if (subgrid.empty()) return chapter.restart();
 
-              if (!previousItem.empty()) {
-                  // focus on the previous item
-                  previousItem.select('.preset-list-button').node().focus();
-              } else {
-                  // the focus is at the top of the list, move focus back to the search field
-                  var search = select(this.closest('.preset-list-pane')).select('.preset-search-input');
-                  search.node().focus();
-              }
+          subgrid.selectAll(':not(.preset-highway-residential) .preset-list-button')
+              .on('click.intro', function() {
+                  continueTo(retryPresetResidential);
+              });
 
-          // arrow left, move focus to the parent item if there is one
-          } else if (event.keyCode === utilKeybinding.keyCodes[(textDirection === 'rtl') ? '→' : '←']) {
-              event.preventDefault();
-              event.stopPropagation();
-              // if there is a parent item, focus on the parent item
-              if (!parentItem.empty()) {
-                  parentItem.select('.preset-list-button').node().focus();
-              }
+          subgrid.selectAll('.preset-highway-residential .preset-list-button')
+              .on('click.intro', function() {
+                  continueTo(nameRoad);
+              });
 
-          // arrow right, choose this item
-          } else if (event.keyCode === utilKeybinding.keyCodes[(textDirection === 'rtl') ? '←' : '→']) {
-              event.preventDefault();
-              event.stopPropagation();
-              item.datum().choose();
+          timeout(function() {
+              reveal(subgrid.node(),
+                  t('intro.lines.choose_preset_residential', { preset: residentialPreset.name() }),
+                  { tooltipBox: '.preset-highway-residential .preset-list-button', duration: 300 }
+              );
+          }, 300);
+
+          function continueTo(nextStep) {
+              select('.preset-list-button').on('click.intro', null);
+              context.on('exit.intro', null);
+              nextStep();
           }
       }
 
 
-      function CategoryItem(preset) {
-          var box, sublist, shown = false;
-
-          function item(selection$$1) {
-              var wrap = selection$$1.append('div')
-                  .attr('class', 'preset-list-button-wrap category col12');
+      // selected wrong road type
+      function retryPresetResidential() {
+          if (context.mode().id !== 'select') return chapter.restart();
 
-              function click() {
-                  var isExpanded = select(this).classed('expanded');
-                  var iconName = isExpanded ?
-                      (textDirection === 'rtl' ? '#iD-icon-backward' : '#iD-icon-forward') : '#iD-icon-down';
-                  select(this)
-                      .classed('expanded', !isExpanded);
-                  select(this).selectAll('div.label-inner svg.icon use')
-                      .attr('href', iconName);
-                  item.choose();
-              }
+          context.on('exit.intro', function() {
+              return chapter.restart();
+          });
 
-              var button = wrap
-                  .append('button')
-                  .attr('class', 'preset-list-button')
-                  .classed('expanded', false)
-                  .call(uiPresetIcon()
-                      .geometry(context.geometry(_entityID))
-                      .preset(preset))
-                  .on('click', click)
-                  .on('keydown', function() {
-                      // right arrow, expand the focused item
-                      if (event.keyCode === utilKeybinding.keyCodes[(textDirection === 'rtl') ? '←' : '→']) {
-                          event.preventDefault();
-                          event.stopPropagation();
-                          // if the item isn't expanded
-                          if (!select(this).classed('expanded')) {
-                              // toggle expansion (expand the item)
-                              click.call(this);
-                          }
-                      // left arrow, collapse the focused item
-                      } else if (event.keyCode === utilKeybinding.keyCodes[(textDirection === 'rtl') ? '→' : '←']) {
-                          event.preventDefault();
-                          event.stopPropagation();
-                          // if the item is expanded
-                          if (select(this).classed('expanded')) {
-                              // toggle expansion (collapse the item)
-                              click.call(this);
-                          }
-                      } else {
-                          itemKeydown.call(this);
-                      }
-                  });
+          // disallow scrolling
+          select('.inspector-wrap').on('wheel.intro', eventCancel);
 
-              var label = button
-                  .append('div')
-                  .attr('class', 'label')
-                  .append('div')
-                  .attr('class', 'label-inner');
+          timeout(function() {
+              var button = select('.entity-editor-pane .preset-list-button');
 
-              label
-                  .append('div')
-                  .attr('class', 'namepart')
-                  .call(svgIcon((textDirection === 'rtl' ? '#iD-icon-backward' : '#iD-icon-forward'), 'inline'))
-                  .append('span')
-                  .html(function() { return preset.name() + '&hellip;'; });
+              reveal(button.node(),
+                  t('intro.lines.retry_preset_residential', { preset: residentialPreset.name() })
+              );
 
-              box = selection$$1.append('div')
-                  .attr('class', 'subgrid col12')
-                  .style('max-height', '0px')
-                  .style('opacity', 0);
+              button.on('click.intro', function() {
+                  continueTo(chooseCategoryRoad);
+              });
 
-              box.append('div')
-                  .attr('class', 'arrow');
+          }, 500);
 
-              sublist = box.append('div')
-                  .attr('class', 'preset-list fillL3 cf fl');
+          function continueTo(nextStep) {
+              select('.inspector-wrap').on('wheel.intro', null);
+              select('.preset-list-button').on('click.intro', null);
+              context.on('exit.intro', null);
+              nextStep();
           }
+      }
 
 
-          item.choose = function() {
-              if (!box || !sublist) return;
+      function nameRoad() {
+          context.on('exit.intro', function() {
+              continueTo(didNameRoad);
+          });
 
-              if (shown) {
-                  shown = false;
-                  box.transition()
-                      .duration(200)
-                      .style('opacity', '0')
-                      .style('max-height', '0px')
-                      .style('padding-bottom', '0px');
-              } else {
-                  shown = true;
-                  sublist.call(drawList, preset.members);
-                  box.transition()
-                      .duration(200)
-                      .style('opacity', '1')
-                      .style('max-height', 200 + preset.members.collection.length * 190 + 'px')
-                      .style('padding-bottom', '20px');
-              }
-          };
+          timeout(function() {
+              reveal('.entity-editor-pane',
+                  t('intro.lines.name_road', { button: icon('#iD-icon-apply', 'pre-text') }),
+                  { tooltipClass: 'intro-lines-name_road' }
+              );
+          }, 500);
 
-          item.preset = preset;
-          return item;
+          function continueTo(nextStep) {
+              context.on('exit.intro', null);
+              nextStep();
+          }
       }
 
 
-      function PresetItem(preset) {
-          function item(selection$$1) {
-              var wrap = selection$$1.append('div')
-                  .attr('class', 'preset-list-button-wrap col12');
+      function didNameRoad() {
+          context.history().checkpoint('doneAddLine');
 
-              var button = wrap.append('button')
-                  .attr('class', 'preset-list-button')
-                  .call(uiPresetIcon()
-                      .geometry(context.geometry(_entityID))
-                      .preset(preset))
-                  .on('click', item.choose)
-                  .on('keydown', itemKeydown);
+          timeout(function() {
+              reveal('#surface', t('intro.lines.did_name_road'), {
+                  buttonText: t('intro.ok'),
+                  buttonCallback: function() { continueTo(updateLine); }
+              });
+          }, 500);
 
-              var label = button
-                  .append('div')
-                  .attr('class', 'label')
-                  .append('div')
-                  .attr('class', 'label-inner');
+          function continueTo(nextStep) {
+              nextStep();
+          }
+      }
 
-              // NOTE: split/join on en-dash, not a hypen (to avoid conflict with fr - nl names in Brussels etc)
-              label.selectAll('.namepart')
-                  .data(preset.name().split(' – '))
-                  .enter()
-                  .append('div')
-                  .attr('class', 'namepart')
-                  .text(function(d) { return d; });
 
-              wrap.call(item.reference.button);
-              selection$$1.call(item.reference.body);
+      function updateLine() {
+          context.history().reset('doneAddLine');
+          if (!context.hasEntity(woodRoadID) || !context.hasEntity(woodRoadEndID)) {
+              return chapter.restart();
           }
 
-          item.choose = function() {
-              context.presets().choose(preset);
-              context.perform(
-                  actionChangePreset(_entityID, _currentPreset, preset),
-                  t('operations.change_tags.annotation')
-              );
+          var msec = transitionTime(woodRoadDragMidpoint, context.map().center());
+          if (msec) { reveal(null, null, { duration: 0 }); }
+          context.map().centerZoomEase(woodRoadDragMidpoint, 19, msec);
 
-              dispatch$$1.call('choose', this, preset);
-          };
+          timeout(function() {
+              var padding = 250 * Math.pow(2, context.map().zoom() - 19);
+              var box = pad$1(woodRoadDragMidpoint, padding, context);
+              var advance = function() { continueTo(addNode); };
 
-          item.help = function() {
-              event.stopPropagation();
-              item.reference.toggle();
-          };
+              reveal(box, t('intro.lines.update_line'),
+                  { buttonText: t('intro.ok'), buttonCallback: advance }
+              );
 
-          item.preset = preset;
-          item.reference = uiTagReference(preset.reference(context.geometry(_entityID)), context);
+              context.map().on('move.intro drawn.intro', function() {
+                  var padding = 250 * Math.pow(2, context.map().zoom() - 19);
+                  var box = pad$1(woodRoadDragMidpoint, padding, context);
+                  reveal(box, t('intro.lines.update_line'),
+                      { duration: 0, buttonText: t('intro.ok'), buttonCallback: advance }
+                  );
+              });
+          }, msec + 100);
 
-          return item;
+          function continueTo(nextStep) {
+              context.map().on('move.intro drawn.intro', null);
+              nextStep();
+          }
       }
 
 
-      presetList.autofocus = function(val) {
-          if (!arguments.length) return _autofocus;
-          _autofocus = val;
-          return presetList;
-      };
-
-
-      presetList.entityID = function(val) {
-          if (!arguments.length) return _entityID;
-          _entityID = val;
-          presetList.preset(context.presets().match(context.entity(_entityID), context.graph()));
-          return presetList;
-      };
+      function addNode() {
+          context.history().reset('doneAddLine');
+          if (!context.hasEntity(woodRoadID) || !context.hasEntity(woodRoadEndID)) {
+              return chapter.restart();
+          }
 
+          var padding = 40 * Math.pow(2, context.map().zoom() - 19);
+          var box = pad$1(woodRoadAddNode, padding, context);
+          reveal(box, t('intro.lines.add_node'));
 
-      presetList.preset = function(val) {
-          if (!arguments.length) return _currentPreset;
-          _currentPreset = val;
-          return presetList;
-      };
+          context.map().on('move.intro drawn.intro', function() {
+              var padding = 40 * Math.pow(2, context.map().zoom() - 19);
+              var box = pad$1(woodRoadAddNode, padding, context);
+              reveal(box, t('intro.lines.add_node'), { duration: 0 });
+          });
 
+          context.history().on('change.intro', function(changed) {
+              if (!context.hasEntity(woodRoadID) || !context.hasEntity(woodRoadEndID)) {
+                  return continueTo(updateLine);
+              }
+              if (changed.created().length === 1) {
+                  timeout(function() { continueTo(startDragEndpoint); }, 500);
+              }
+          });
 
-      return utilRebind(presetList, dispatch$$1, 'on');
-  }
+          context.on('enter.intro', function(mode) {
+              if (mode.id !== 'select') {
+                  continueTo(updateLine);
+              }
+          });
 
-  function uiViewOnOSM(context) {
-      var _what;   // an osmEntity or osmNote
+          function continueTo(nextStep) {
+              context.map().on('move.intro drawn.intro', null);
+              context.history().on('change.intro', null);
+              context.on('enter.intro', null);
+              nextStep();
+          }
+      }
 
 
-      function viewOnOSM(selection) {
-          var url;
-          if (_what instanceof osmEntity$$1) {
-              url = context.connection().entityURL(_what);
-          } else if (_what instanceof osmNote) {
-              url = context.connection().noteURL(_what);
+      function startDragEndpoint() {
+          if (!context.hasEntity(woodRoadID) || !context.hasEntity(woodRoadEndID)) {
+              return continueTo(updateLine);
           }
+          var padding = 100 * Math.pow(2, context.map().zoom() - 19);
+          var box = pad$1(woodRoadDragEndpoint, padding, context);
+          reveal(box, t('intro.lines.start_drag_endpoint'));
 
-          var data = ((!_what || _what.isNew()) ? [] : [_what]);
-          var link = selection.selectAll('.view-on-osm')
-              .data(data, function(d) { return d.id; });
-
-          // exit
-          link.exit()
-              .remove();
+          context.map().on('move.intro drawn.intro', function() {
+              if (!context.hasEntity(woodRoadID) || !context.hasEntity(woodRoadEndID)) {
+                  return continueTo(updateLine);
+              }
+              var padding = 100 * Math.pow(2, context.map().zoom() - 19);
+              var box = pad$1(woodRoadDragEndpoint, padding, context);
+              reveal(box, t('intro.lines.start_drag_endpoint'), { duration: 0 });
 
-          // enter
-          var linkEnter = link.enter()
-              .append('a')
-              .attr('class', 'view-on-osm')
-              .attr('target', '_blank')
-              .attr('href', url)
-              .call(svgIcon('#iD-icon-out-link', 'inline'));
+              var entity = context.entity(woodRoadEndID);
+              if (geoSphericalDistance(entity.loc, woodRoadDragEndpoint) <= 4) {
+                  continueTo(finishDragEndpoint);
+              }
+          });
 
-          linkEnter
-              .append('span')
-              .text(t('inspector.view_on_osm'));
+          function continueTo(nextStep) {
+              context.map().on('move.intro drawn.intro', null);
+              nextStep();
+          }
       }
 
 
-      viewOnOSM.what = function(_) {
-          if (!arguments.length) return _what;
-          _what = _;
-          return viewOnOSM;
-      };
+      function finishDragEndpoint() {
+          if (!context.hasEntity(woodRoadID) || !context.hasEntity(woodRoadEndID)) {
+              return continueTo(updateLine);
+          }
 
-      return viewOnOSM;
-  }
+          var padding = 100 * Math.pow(2, context.map().zoom() - 19);
+          var box = pad$1(woodRoadDragEndpoint, padding, context);
+          reveal(box, t('intro.lines.finish_drag_endpoint'));
 
-  function uiInspector(context) {
-      var presetList = uiPresetList(context);
-      var entityEditor = uiEntityEditor(context);
-      var _state = 'select';
-      var _entityID;
-      var _newFeature = false;
+          context.map().on('move.intro drawn.intro', function() {
+              if (!context.hasEntity(woodRoadID) || !context.hasEntity(woodRoadEndID)) {
+                  return continueTo(updateLine);
+              }
+              var padding = 100 * Math.pow(2, context.map().zoom() - 19);
+              var box = pad$1(woodRoadDragEndpoint, padding, context);
+              reveal(box, t('intro.lines.finish_drag_endpoint'), { duration: 0 });
 
+              var entity = context.entity(woodRoadEndID);
+              if (geoSphericalDistance(entity.loc, woodRoadDragEndpoint) > 4) {
+                  continueTo(startDragEndpoint);
+              }
+          });
 
-      function inspector(selection$$1, newFeature) {
-          presetList
-              .entityID(_entityID)
-              .autofocus(_newFeature)
-              .on('choose', setPreset);
+          context.on('enter.intro', function() {
+              continueTo(startDragMidpoint);
+          });
 
-          entityEditor
-              .state(_state)
-              .entityID(_entityID)
-              .on('choose', showList);
+          function continueTo(nextStep) {
+              context.map().on('move.intro drawn.intro', null);
+              context.on('enter.intro', null);
+              nextStep();
+          }
+      }
 
-          var wrap = selection$$1.selectAll('.panewrap')
-              .data([0]);
 
-          var enter = wrap.enter()
-              .append('div')
-              .attr('class', 'panewrap');
+      function startDragMidpoint() {
+          if (!context.hasEntity(woodRoadID) || !context.hasEntity(woodRoadEndID)) {
+              return continueTo(updateLine);
+          }
+          if (context.selectedIDs().indexOf(woodRoadID) === -1) {
+              context.enter(modeSelect(context, [woodRoadID]));
+          }
 
-          enter
-              .append('div')
-              .attr('class', 'preset-list-pane pane');
+          var padding = 80 * Math.pow(2, context.map().zoom() - 19);
+          var box = pad$1(woodRoadDragMidpoint, padding, context);
+          reveal(box, t('intro.lines.start_drag_midpoint'));
 
-          enter
-              .append('div')
-              .attr('class', 'entity-editor-pane pane');
+          context.map().on('move.intro drawn.intro', function() {
+              if (!context.hasEntity(woodRoadID) || !context.hasEntity(woodRoadEndID)) {
+                  return continueTo(updateLine);
+              }
+              var padding = 80 * Math.pow(2, context.map().zoom() - 19);
+              var box = pad$1(woodRoadDragMidpoint, padding, context);
+              reveal(box, t('intro.lines.start_drag_midpoint'), { duration: 0 });
+          });
 
-          wrap = wrap.merge(enter);
-          var presetPane = wrap.selectAll('.preset-list-pane');
-          var editorPane = wrap.selectAll('.entity-editor-pane');
+          context.history().on('change.intro', function(changed) {
+              if (changed.created().length === 1) {
+                  continueTo(continueDragMidpoint);
+              }
+          });
 
-          var entity = context.entity(_entityID);
+          context.on('enter.intro', function(mode) {
+              if (mode.id !== 'select') {
+                  // keep Wood Road selected so midpoint triangles are drawn..
+                  context.enter(modeSelect(context, [woodRoadID]));
+              }
+          });
 
-          var isTaglessOrIntersectionVertex = entity.geometry(context.graph()) === 'vertex' &&
-              (!entity.hasNonGeometryTags() && !entity.isHighwayIntersection(context.graph()));
-          // start with the preset list if the feature is new or is an uninteresting vertex
-          var showPresetList = newFeature || isTaglessOrIntersectionVertex;
+          function continueTo(nextStep) {
+              context.map().on('move.intro drawn.intro', null);
+              context.history().on('change.intro', null);
+              context.on('enter.intro', null);
+              nextStep();
+          }
+      }
 
-          if (showPresetList) {
-              wrap.style('right', '-100%');
-              presetPane.call(presetList);
-          } else {
-              wrap.style('right', '0%');
-              editorPane.call(entityEditor);
+
+      function continueDragMidpoint() {
+          if (!context.hasEntity(woodRoadID) || !context.hasEntity(woodRoadEndID)) {
+              return continueTo(updateLine);
           }
 
-          var footer = selection$$1.selectAll('.footer')
-              .data([0]);
+          var padding = 100 * Math.pow(2, context.map().zoom() - 19);
+          var box = pad$1(woodRoadDragEndpoint, padding, context);
+          box.height += 400;
 
-          footer = footer.enter()
-              .append('div')
-              .attr('class', 'footer')
-              .merge(footer);
+          var advance = function() {
+              context.history().checkpoint('doneUpdateLine');
+              continueTo(deleteLines);
+          };
 
-          footer
-              .call(uiViewOnOSM(context)
-                  .what(context.hasEntity(_entityID))
+          reveal(box, t('intro.lines.continue_drag_midpoint'),
+              { buttonText: t('intro.ok'), buttonCallback: advance }
+          );
+
+          context.map().on('move.intro drawn.intro', function() {
+              if (!context.hasEntity(woodRoadID) || !context.hasEntity(woodRoadEndID)) {
+                  return continueTo(updateLine);
+              }
+              var padding = 100 * Math.pow(2, context.map().zoom() - 19);
+              var box = pad$1(woodRoadDragEndpoint, padding, context);
+              box.height += 400;
+              reveal(box, t('intro.lines.continue_drag_midpoint'),
+                  { duration: 0, buttonText: t('intro.ok'), buttonCallback: advance }
               );
+          });
 
+          function continueTo(nextStep) {
+              context.map().on('move.intro drawn.intro', null);
+              nextStep();
+          }
+      }
 
-          function showList(preset) {
-              wrap.transition()
-                  .styleTween('right', function() { return interpolate('0%', '-100%'); });
 
-              presetPane
-                  .call(presetList.preset(preset).autofocus(true));
+      function deleteLines() {
+          context.history().reset('doneUpdateLine');
+          context.enter(modeBrowse(context));
+
+          if (!context.hasEntity(washingtonStreetID) ||
+              !context.hasEntity(twelfthAvenueID) ||
+              !context.hasEntity(eleventhAvenueEndID)) {
+              return chapter.restart();
           }
 
+          var msec = transitionTime(deleteLinesLoc, context.map().center());
+          if (msec) { reveal(null, null, { duration: 0 }); }
+          context.map().centerZoomEase(deleteLinesLoc, 18, msec);
 
-          function setPreset(preset) {
-              wrap.transition()
-                  .styleTween('right', function() { return interpolate('-100%', '0%'); });
+          timeout(function() {
+              var padding = 200 * Math.pow(2, context.map().zoom() - 18);
+              var box = pad$1(deleteLinesLoc, padding, context);
+              box.top -= 200;
+              box.height += 400;
+              var advance = function() { continueTo(rightClickIntersection); };
 
-              editorPane
-                  .call(entityEditor.preset(preset));
-          }
-      }
+              reveal(box, t('intro.lines.delete_lines', { street: t('intro.graph.name.12th-avenue') }),
+                  { buttonText: t('intro.ok'), buttonCallback: advance }
+              );
 
+              context.map().on('move.intro drawn.intro', function() {
+                  var padding = 200 * Math.pow(2, context.map().zoom() - 18);
+                  var box = pad$1(deleteLinesLoc, padding, context);
+                  box.top -= 200;
+                  box.height += 400;
+                  reveal(box, t('intro.lines.delete_lines', { street: t('intro.graph.name.12th-avenue') }),
+                      { duration: 0, buttonText: t('intro.ok'), buttonCallback: advance }
+                  );
+              });
 
-      inspector.state = function(val) {
-          if (!arguments.length) return _state;
-          _state = val;
-          entityEditor.state(_state);
+              context.history().on('change.intro', function() {
+                  timeout(function() {
+                      continueTo(deleteLines);
+                  }, 500);  // after any transition (e.g. if user deleted intersection)
+              });
 
-          // remove any old field help overlay that might have gotten attached to the inspector
-          d3_selectAll('.field-help-body').remove();
+          }, msec + 100);
 
-          return inspector;
-      };
+          function continueTo(nextStep) {
+              context.map().on('move.intro drawn.intro', null);
+              context.history().on('change.intro', null);
+              nextStep();
+          }
+      }
 
 
-      inspector.entityID = function(val) {
-          if (!arguments.length) return _entityID;
-          _entityID = val;
-          return inspector;
-      };
+      function rightClickIntersection() {
+          context.history().reset('doneUpdateLine');
+          context.enter(modeBrowse(context));
 
+          context.map().centerZoomEase(eleventhAvenueEnd, 18, 500);
 
-      inspector.newFeature = function(val) {
-          if (!arguments.length) return _newFeature;
-          _newFeature = val;
-          return inspector;
-      };
+          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',
+                  { street1: t('intro.graph.name.11th-avenue'), street2: t('intro.graph.name.washington-street') })
+              );
 
+              context.map().on('move.intro drawn.intro', 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',
+                      { street1: t('intro.graph.name.11th-avenue'), street2: t('intro.graph.name.washington-street') }),
+                      { duration: 0 }
+                  );
+              });
 
-      return inspector;
-  }
+              context.on('enter.intro', function(mode) {
+                  if (mode.id !== 'select') return;
+                  var ids = context.selectedIDs();
+                  if (ids.length !== 1 || ids[0] !== eleventhAvenueEndID) return;
 
-  function uiKeepRightDetails(context) {
-      var _error;
+                  timeout(function() {
+                      var node = selectMenuItem('split').node();
+                      if (!node) return;
+                      continueTo(splitIntersection);
+                  }, 300);  // after menu visible
+              });
 
+              context.history().on('change.intro', function() {
+                  timeout(function() {
+                      continueTo(deleteLines);
+                  }, 300);  // after any transition (e.g. if user deleted intersection)
+              });
 
-      function errorDetail(d) {
-          var unknown = t('inspector.unknown');
+          }, 600);
 
-          if (!d) return unknown;
-          var errorType = d.error_type;
-          var parentErrorType = d.parent_error_type;
+          function continueTo(nextStep) {
+              context.map().on('move.intro drawn.intro', null);
+              context.on('enter.intro', null);
+              context.history().on('change.intro', null);
+              nextStep();
+          }
+      }
 
-          var et = en.QA.keepRight.errorTypes[errorType];
-          var pt = en.QA.keepRight.errorTypes[parentErrorType];
 
-          var detail;
-          if (et && et.description) {
-              detail = t('QA.keepRight.errorTypes.' + errorType + '.description', d.replacements);
-          } else if (pt && pt.description) {
-              detail = t('QA.keepRight.errorTypes.' + parentErrorType + '.description', d.replacements);
-          } else {
-              detail = unknown;
+      function splitIntersection() {
+          if (!context.hasEntity(washingtonStreetID) ||
+              !context.hasEntity(twelfthAvenueID) ||
+              !context.hasEntity(eleventhAvenueEndID)) {
+              return continueTo(deleteLines);
           }
 
-          return detail;
-      }
+          var node = selectMenuItem('split').node();
+          if (!node) { return continueTo(rightClickIntersection); }
 
+          var wasChanged = false;
+          var menuCoords = context.map().mouseCoordinates();
+          _washingtonSegmentID = null;
 
-      function keepRightDetails(selection$$1) {
-          var details = selection$$1.selectAll('.kr_error-details')
-              .data(
-                  (_error ? [_error] : []),
-                  function(d) { return d.id + '-' + (d.status || 0); }
-              );
+          revealEditMenu(menuCoords, t('intro.lines.split_intersection',
+              { button: icon('#iD-operation-split', 'pre-text'), street: t('intro.graph.name.washington-street') })
+          );
 
-          details.exit()
-              .remove();
+          context.map().on('move.intro drawn.intro', function() {
+              var node = selectMenuItem('split').node();
+              if (!wasChanged && !node) { return continueTo(rightClickIntersection); }
 
-          var detailsEnter = details.enter()
-              .append('div')
-              .attr('class', 'kr_error-details kr_error-details-container');
+              revealEditMenu(menuCoords, t('intro.lines.split_intersection',
+                  { button: icon('#iD-operation-split', 'pre-text'), street: t('intro.graph.name.washington-street') }),
+                  { duration: 0 }
+              );
+          });
+
+          context.history().on('change.intro', function(changed) {
+              wasChanged = true;
+              timeout(function() {
+                  if (context.history().undoAnnotation() === t('operations.split.annotation.line')) {
+                      _washingtonSegmentID = changed.created()[0].id;
+                      continueTo(didSplit);
+                  } else {
+                      _washingtonSegmentID = null;
+                      continueTo(retrySplit);
+                  }
+              }, 300);  // after any transition (e.g. if user deleted intersection)
+          });
 
+          function continueTo(nextStep) {
+              context.map().on('move.intro drawn.intro', null);
+              context.history().on('change.intro', null);
+              nextStep();
+          }
+      }
 
-          // description
-          var descriptionEnter = detailsEnter
-              .append('div')
-              .attr('class', 'kr_error-details-description');
 
-          descriptionEnter
-              .append('h4')
-              .text(function() { return t('QA.keepRight.detail_description'); });
+      function retrySplit() {
+          context.enter(modeBrowse(context));
+          context.map().centerZoomEase(eleventhAvenueEnd, 18, 500);
+          var advance = function() { continueTo(rightClickIntersection); };
 
-          descriptionEnter
-              .append('div')
-              .attr('class', 'kr_error-details-description-text')
-              .html(errorDetail);
+          var padding = 60 * Math.pow(2, context.map().zoom() - 18);
+          var box = pad$1(eleventhAvenueEnd, padding, context);
+          reveal(box, t('intro.lines.retry_split'),
+              { buttonText: t('intro.ok'), buttonCallback: advance }
+          );
 
-          // If there are entity links in the error message..
-          descriptionEnter.selectAll('.kr_error_entity_link, .kr_error_object_link')
-              .each(function() {
-                  var link = select(this);
-                  var isObjectLink = link.classed('kr_error_object_link');
-                  var entityID = isObjectLink ?
-                      (utilEntityRoot(_error.object_type) + _error.object_id)
-                      : this.textContent;
-                  var entity = context.hasEntity(entityID);
+          context.map().on('move.intro drawn.intro', function() {
+              var padding = 60 * Math.pow(2, context.map().zoom() - 18);
+              var box = pad$1(eleventhAvenueEnd, padding, context);
+              reveal(box, t('intro.lines.retry_split'),
+                  { duration: 0, buttonText: t('intro.ok'), buttonCallback: advance }
+              );
+          });
 
-                  // Add click handler
-                  link
-                      .on('mouseover', function() {
-                          context.surface().selectAll(utilEntityOrMemberSelector([entityID], context.graph()))
-                              .classed('hover', true);
-                      })
-                      .on('mouseout', function() {
-                          context.surface().selectAll('.hover')
-                              .classed('hover', false);
-                      })
-                      .on('click', function() {
-                          event.preventDefault();
-                          var osmlayer = context.layers().layer('osm');
-                          if (!osmlayer.enabled()) {
-                              osmlayer.enabled(true);
-                          }
+          function continueTo(nextStep) {
+              context.map().on('move.intro drawn.intro', null);
+              nextStep();
+          }
+      }
 
-                          context.map().centerZoomEase(_error.loc, 20);
 
-                          if (entity) {
-                              context.enter(modeSelect(context, [entityID]));
-                          } else {
-                              context.loadEntity(entityID, function() {
-                                  context.enter(modeSelect(context, [entityID]));
-                              });
-                          }
-                      });
+      function didSplit() {
+          if (!_washingtonSegmentID ||
+              !context.hasEntity(_washingtonSegmentID) ||
+              !context.hasEntity(washingtonStreetID) ||
+              !context.hasEntity(twelfthAvenueID) ||
+              !context.hasEntity(eleventhAvenueEndID)) {
+              return continueTo(rightClickIntersection);
+          }
 
-                  // Replace with friendly name if possible
-                  // (The entity may not yet be loaded into the graph)
-                  if (entity) {
-                      var name = utilDisplayName(entity);  // try to use common name
+          var ids = context.selectedIDs();
+          var string = 'intro.lines.did_split_' + (ids.length > 1 ? 'multi' : 'single');
+          var street = t('intro.graph.name.washington-street');
 
-                      if (!name && !isObjectLink) {
-                          var preset = context.presets().match(entity, context.graph());
-                          name = preset && !preset.isFallback() && preset.name();  // fallback to preset name
-                      }
+          var padding = 200 * Math.pow(2, context.map().zoom() - 18);
+          var box = pad$1(twelfthAvenue, padding, context);
+          box.width = box.width / 2;
+          reveal(box, t(string, { street1: street, street2: street }),
+              { duration: 500 }
+          );
 
-                      if (name) {
-                          this.innerText = name;
-                      }
-                  }
+          timeout(function() {
+              context.map().centerZoomEase(twelfthAvenue, 18, 500);
+
+              context.map().on('move.intro drawn.intro', function() {
+                  var padding = 200 * Math.pow(2, context.map().zoom() - 18);
+                  var box = pad$1(twelfthAvenue, padding, context);
+                  box.width = box.width / 2;
+                  reveal(box, t(string, { street1: street, street2: street }),
+                      { duration: 0 }
+                  );
               });
-      }
+          }, 600);  // after initial reveal and curtain cut
 
+          context.on('enter.intro', function() {
+              var ids = context.selectedIDs();
+              if (ids.length === 1 && ids[0] === _washingtonSegmentID) {
+                  continueTo(multiSelect);
+              }
+          });
 
-      keepRightDetails.error = function(val) {
-          if (!arguments.length) return _error;
-          _error = val;
-          return keepRightDetails;
-      };
+          context.history().on('change.intro', function() {
+              if (!_washingtonSegmentID ||
+                  !context.hasEntity(_washingtonSegmentID) ||
+                  !context.hasEntity(washingtonStreetID) ||
+                  !context.hasEntity(twelfthAvenueID) ||
+                  !context.hasEntity(eleventhAvenueEndID)) {
+                  return continueTo(rightClickIntersection);
+              }
+          });
 
+          function continueTo(nextStep) {
+              context.map().on('move.intro drawn.intro', null);
+              context.on('enter.intro', null);
+              context.history().on('change.intro', null);
+              nextStep();
+          }
+      }
 
-      return keepRightDetails;
-  }
 
-  function uiKeepRightEditor$$1(context) {
-      var dispatch$$1 = dispatch('change');
-      var keepRightDetails = uiKeepRightDetails(context);
-      var keepRightHeader = uiKeepRightHeader(context);
-      var quickLinks = uiQuickLinks();
+      function multiSelect() {
+          if (!_washingtonSegmentID ||
+              !context.hasEntity(_washingtonSegmentID) ||
+              !context.hasEntity(washingtonStreetID) ||
+              !context.hasEntity(twelfthAvenueID) ||
+              !context.hasEntity(eleventhAvenueEndID)) {
+              return continueTo(rightClickIntersection);
+          }
 
-      var _error;
+          var ids = context.selectedIDs();
+          var hasWashington = ids.indexOf(_washingtonSegmentID) !== -1;
+          var hasTwelfth = ids.indexOf(twelfthAvenueID) !== -1;
+
+          if (hasWashington && hasTwelfth) {
+              return continueTo(multiRightClick);
+          } else if (!hasWashington && !hasTwelfth) {
+              return continueTo(didSplit);
+          }
 
+          context.map().centerZoomEase(twelfthAvenue, 18, 500);
 
-      function keepRightEditor(selection$$1) {
-          // quick links
-          var choices = [{
-              id: 'zoom_to',
-              label: 'inspector.zoom_to.title',
-              tooltip: function() {
-                  return uiTooltipHtml(t('inspector.zoom_to.tooltip_issue'), t('inspector.zoom_to.key'));
-              },
-              click: function zoomTo() {
-                  context.mode().zoomToSelected();
+          timeout(function() {
+              var selected, other, padding, box;
+              if (hasWashington) {
+                  selected = t('intro.graph.name.washington-street');
+                  other = t('intro.graph.name.12th-avenue');
+                  padding = 60 * Math.pow(2, context.map().zoom() - 18);
+                  box = pad$1(twelfthAvenueEnd, padding, context);
+                  box.width *= 3;
+              } else {
+                  selected = t('intro.graph.name.12th-avenue');
+                  other = t('intro.graph.name.washington-street');
+                  padding = 200 * Math.pow(2, context.map().zoom() - 18);
+                  box = pad$1(twelfthAvenue, padding, context);
+                  box.width /= 2;
               }
-          }];
 
+              reveal(box,
+                  t('intro.lines.multi_select', { selected: selected, other1: other, other2: other })
+              );
 
-          var header = selection$$1.selectAll('.header')
-              .data([0]);
+              context.map().on('move.intro drawn.intro', function() {
+                  if (hasWashington) {
+                      selected = t('intro.graph.name.washington-street');
+                      other = t('intro.graph.name.12th-avenue');
+                      padding = 60 * Math.pow(2, context.map().zoom() - 18);
+                      box = pad$1(twelfthAvenueEnd, padding, context);
+                      box.width *= 3;
+                  } else {
+                      selected = t('intro.graph.name.12th-avenue');
+                      other = t('intro.graph.name.washington-street');
+                      padding = 200 * Math.pow(2, context.map().zoom() - 18);
+                      box = pad$1(twelfthAvenue, padding, context);
+                      box.width /= 2;
+                  }
 
-          var headerEnter = header.enter()
-              .append('div')
-              .attr('class', 'header fillL');
+                  reveal(box,
+                      t('intro.lines.multi_select', { selected: selected, other1: other, other2: other }),
+                      { duration: 0 }
+                  );
+              });
 
-          headerEnter
-              .append('button')
-              .attr('class', 'fr keepRight-editor-close')
-              .on('click', function() {
-                  context.enter(modeBrowse(context));
-              })
-              .call(svgIcon('#iD-icon-close'));
+              context.on('enter.intro', function() {
+                  continueTo(multiSelect);
+              });
 
-          headerEnter
-              .append('h3')
-              .text(t('QA.keepRight.title'));
+              context.history().on('change.intro', function() {
+                  if (!_washingtonSegmentID ||
+                      !context.hasEntity(_washingtonSegmentID) ||
+                      !context.hasEntity(washingtonStreetID) ||
+                      !context.hasEntity(twelfthAvenueID) ||
+                      !context.hasEntity(eleventhAvenueEndID)) {
+                      return continueTo(rightClickIntersection);
+                  }
+              });
+          }, 600);
 
+          function continueTo(nextStep) {
+              context.map().on('move.intro drawn.intro', null);
+              context.on('enter.intro', null);
+              context.history().on('change.intro', null);
+              nextStep();
+          }
+      }
 
-          var body = selection$$1.selectAll('.body')
-              .data([0]);
 
-          body = body.enter()
-              .append('div')
-              .attr('class', 'body')
-              .merge(body);
+      function multiRightClick() {
+          if (!_washingtonSegmentID ||
+              !context.hasEntity(_washingtonSegmentID) ||
+              !context.hasEntity(washingtonStreetID) ||
+              !context.hasEntity(twelfthAvenueID) ||
+              !context.hasEntity(eleventhAvenueEndID)) {
+              return continueTo(rightClickIntersection);
+          }
 
-          var editor = body.selectAll('.keepRight-editor')
-              .data([0]);
+          var padding = 200 * Math.pow(2, context.map().zoom() - 18);
+          var box = pad$1(twelfthAvenue, padding, context);
+          reveal(box, t('intro.lines.multi_rightclick'));
 
-          editor.enter()
-              .append('div')
-              .attr('class', 'modal-section keepRight-editor')
-              .merge(editor)
-              .call(keepRightHeader.error(_error))
-              .call(quickLinks.choices(choices))
-              .call(keepRightDetails.error(_error))
-              .call(keepRightSaveSection);
+          context.map().on('move.intro drawn.intro', function() {
+              var padding = 200 * Math.pow(2, context.map().zoom() - 18);
+              var box = pad$1(twelfthAvenue, padding, context);
+              reveal(box, t('intro.lines.multi_rightclick'), { duration: 0 });
+          });
 
+          select(window).on('click.intro contextmenu.intro', function() {
+              timeout(function() {
+                  var ids = context.selectedIDs();
+                  if (ids.length === 2 &&
+                      ids.indexOf(twelfthAvenueID) !== -1 &&
+                      ids.indexOf(_washingtonSegmentID) !== -1) {
+                          var node = selectMenuItem('delete').node();
+                          if (!node) return;
+                          continueTo(multiDelete);
+                  } else if (ids.length === 1 &&
+                      ids.indexOf(_washingtonSegmentID) !== -1) {
+                      return continueTo(multiSelect);
+                  } else {
+                      return continueTo(didSplit);
+                  }
+              }, 300);  // after edit menu visible
+          }, true);
 
-          var footer = selection$$1.selectAll('.footer')
-              .data([0]);
+          context.history().on('change.intro', function() {
+              if (!_washingtonSegmentID ||
+                  !context.hasEntity(_washingtonSegmentID) ||
+                  !context.hasEntity(washingtonStreetID) ||
+                  !context.hasEntity(twelfthAvenueID) ||
+                  !context.hasEntity(eleventhAvenueEndID)) {
+                  return continueTo(rightClickIntersection);
+              }
+          });
 
-          footer.enter()
-              .append('div')
-              .attr('class', 'footer')
-              .merge(footer)
-              .call(uiViewOnKeepRight(context).what(_error));
+          function continueTo(nextStep) {
+              context.map().on('move.intro drawn.intro', null);
+              select(window).on('click.intro contextmenu.intro', null, true);
+              context.history().on('change.intro', null);
+              nextStep();
+          }
       }
 
 
-      function keepRightSaveSection(selection$$1) {
-          var isSelected = (_error && _error.id === context.selectedErrorID());
-          var isShown = (_error && (isSelected || _error.newComment || _error.comment));
-          var saveSection = selection$$1.selectAll('.error-save')
-              .data(
-                  (isShown ? [_error] : []),
-                  function(d) { return d.id + '-' + (d.status || 0); }
+      function multiDelete() {
+          if (!_washingtonSegmentID ||
+              !context.hasEntity(_washingtonSegmentID) ||
+              !context.hasEntity(washingtonStreetID) ||
+              !context.hasEntity(twelfthAvenueID) ||
+              !context.hasEntity(eleventhAvenueEndID)) {
+              return continueTo(rightClickIntersection);
+          }
+
+          var node = selectMenuItem('delete').node();
+          if (!node) return continueTo(multiRightClick);
+
+          var menuCoords = context.map().mouseCoordinates();
+          revealEditMenu(menuCoords,
+              t('intro.lines.multi_delete', { button: icon('#iD-operation-delete', 'pre-text') })
+          );
+
+          context.map().on('move.intro drawn.intro', function() {
+              revealEditMenu(menuCoords,
+                  t('intro.lines.multi_delete', { button: icon('#iD-operation-delete', 'pre-text') }),
+                  { duration: 0 }
               );
+          });
 
-          // exit
-          saveSection.exit()
-              .remove();
+          context.on('exit.intro', function() {
+              if (context.hasEntity(_washingtonSegmentID) || context.hasEntity(twelfthAvenueID)) {
+                  return continueTo(multiSelect);  // left select mode but roads still exist
+              }
+          });
 
-          // enter
-          var saveSectionEnter = saveSection.enter()
-              .append('div')
-              .attr('class', 'keepRight-save save-section cf');
+          context.history().on('change.intro', function() {
+              if (context.hasEntity(_washingtonSegmentID) || context.hasEntity(twelfthAvenueID)) {
+                  continueTo(retryDelete);         // changed something but roads still exist
+              } else {
+                  continueTo(play);
+              }
+          });
 
-          saveSectionEnter
-              .append('h4')
-              .attr('class', '.error-save-header')
-              .text(t('QA.keepRight.comment'));
+          function continueTo(nextStep) {
+              context.map().on('move.intro drawn.intro', null);
+              context.on('exit.intro', null);
+              context.history().on('change.intro', null);
+              nextStep();
+          }
+      }
 
-          saveSectionEnter
-              .append('textarea')
-              .attr('class', 'new-comment-input')
-              .attr('placeholder', t('QA.keepRight.comment_placeholder'))
-              .attr('maxlength', 1000)
-              .property('value', function(d) { return d.newComment || d.comment; })
-              .call(utilNoAuto)
-              .on('input', changeInput)
-              .on('blur', changeInput);
 
-          // update
-          saveSection = saveSectionEnter
-              .merge(saveSection)
-              .call(keepRightSaveButtons);
+      function retryDelete() {
+          context.enter(modeBrowse(context));
+
+          var padding = 200 * Math.pow(2, context.map().zoom() - 18);
+          var box = pad$1(twelfthAvenue, padding, context);
+          reveal(box, t('intro.lines.retry_delete'), {
+              buttonText: t('intro.ok'),
+              buttonCallback: function() { continueTo(multiSelect); }
+          });
 
+          function continueTo(nextStep) {
+              nextStep();
+          }
+      }
 
-          function changeInput() {
-              var input = select(this);
-              var val = input.property('value').trim();
 
-              if (val === _error.comment) {
-                  val = undefined;
+      function play() {
+          dispatch$1.call('done');
+          reveal('#id-container',
+              t('intro.lines.play', { next: t('intro.buildings.title') }), {
+                  tooltipBox: '.intro-nav-wrap .chapter-building',
+                  buttonText: t('intro.ok'),
+                  buttonCallback: function() { reveal('#id-container'); }
               }
+          );
+     }
 
-              // store the unsaved comment with the error itself
-              _error = _error.update({ newComment: val });
 
-              var keepRight = services.keepRight;
-              if (keepRight) {
-                  keepRight.replaceError(_error);  // update keepright cache
-              }
+      chapter.enter = function() {
+          addLine();
+      };
 
-              saveSection
-                  .call(keepRightSaveButtons);
-          }
-      }
 
+      chapter.exit = function() {
+          timeouts.forEach(window.clearTimeout);
+          select(window).on('mousedown.intro', null, true);
+          context.on('enter.intro exit.intro', null);
+          context.map().on('move.intro drawn.intro', null);
+          context.history().on('change.intro', null);
+          select('.inspector-wrap').on('wheel.intro', null);
+          select('.preset-list-button').on('click.intro', null);
+      };
 
-      function keepRightSaveButtons(selection$$1) {
-          var isSelected = (_error && _error.id === context.selectedErrorID());
-          var buttonSection = selection$$1.selectAll('.buttons')
-              .data((isSelected ? [_error] : []), function(d) { return d.status + d.id; });
 
-          // exit
-          buttonSection.exit()
-              .remove();
+      chapter.restart = function() {
+          chapter.exit();
+          chapter.enter();
+      };
 
-          // enter
-          var buttonEnter = buttonSection.enter()
-              .append('div')
-              .attr('class', 'buttons');
 
-          buttonEnter
-              .append('button')
-              .attr('class', 'button comment-button action')
-              .text(t('QA.keepRight.save_comment'));
+      return utilRebind(chapter, dispatch$1, 'on');
+  }
 
-          buttonEnter
-              .append('button')
-              .attr('class', 'button close-button action');
+  function uiIntroBuilding(context, reveal) {
+      var dispatch$1 = dispatch('done');
+      var house = [-85.62815, 41.95638];
+      var tank = [-85.62732, 41.95347];
+      var buildingCatetory = context.presets().item('category-building');
+      var housePreset = context.presets().item('building/house');
+      var tankPreset = context.presets().item('man_made/storage_tank');
+      var timeouts = [];
+      var _houseID = null;
+      var _tankID = null;
 
-          buttonEnter
-              .append('button')
-              .attr('class', 'button ignore-button action');
 
+      var chapter = {
+          title: 'intro.buildings.title'
+      };
 
-          // update
-          buttonSection = buttonSection
-              .merge(buttonEnter);
 
-          buttonSection.select('.comment-button')   // select and propagate data
-              .attr('disabled', function(d) {
-                  return d.newComment === undefined ? true : null;
-              })
-              .on('click.comment', function(d) {
-                  this.blur();    // avoid keeping focus on the button - #4641
-                  var keepRight = services.keepRight;
-                  if (keepRight) {
-                      keepRight.postKeepRightUpdate(d, function(err, error) {
-                          dispatch$$1.call('change', error);
-                      });
-                  }
-              });
+      function timeout(f, t) {
+          timeouts.push(window.setTimeout(f, t));
+      }
 
-          buttonSection.select('.close-button')   // select and propagate data
-              .text(function(d) {
-                  var andComment = (d.newComment !== undefined ? '_comment' : '');
-                  return t('QA.keepRight.close' + andComment);
-              })
-              .on('click.close', function(d) {
-                  this.blur();    // avoid keeping focus on the button - #4641
-                  var keepRight = services.keepRight;
-                  if (keepRight) {
-                      d.state = 'ignore_t';   // ignore temporarily (error fixed)
-                      keepRight.postKeepRightUpdate(d, function(err, error) {
-                          dispatch$$1.call('change', error);
-                      });
-                  }
-              });
 
-          buttonSection.select('.ignore-button')   // select and propagate data
-              .text(function(d) {
-                  var andComment = (d.newComment !== undefined ? '_comment' : '');
-                  return t('QA.keepRight.ignore' + andComment);
-              })
-              .on('click.ignore', function(d) {
-                  this.blur();    // avoid keeping focus on the button - #4641
-                  var keepRight = services.keepRight;
-                  if (keepRight) {
-                      d.state = 'ignore';   // ignore permanently (false positive)
-                      keepRight.postKeepRightUpdate(d, function(err, error) {
-                          dispatch$$1.call('change', error);
-                      });
-                  }
-              });
+      function eventCancel() {
+          event.stopPropagation();
+          event.preventDefault();
       }
 
 
-      keepRightEditor.error = function(val) {
-          if (!arguments.length) return _error;
-          _error = val;
-          return keepRightEditor;
-      };
+      function revealHouse(center, text, options) {
+          var padding = 160 * Math.pow(2, context.map().zoom() - 20);
+          var box = pad$1(center, padding, context);
+          reveal(box, text, options);
+      }
 
 
-      return utilRebind(keepRightEditor, dispatch$$1, 'on');
-  }
+      function revealTank(center, text, options) {
+          var padding = 190 * Math.pow(2, context.map().zoom() - 19.5);
+          var box = pad$1(center, padding, context);
+          reveal(box, text, options);
+      }
 
-  function uiKeepRightHeader() {
-      var _error;
 
+      function revealEditMenu(loc, text, options) {
+          var rect = context.surfaceRect();
+          var point = context.curtainProjection(loc);
+          var pad = 40;
+          var width = 250 + (2 * pad);
+          var height = 350;
+          var startX = rect.left + point[0];
+          var left = (textDirection === 'rtl') ? (startX - width + pad) : (startX - pad);
+          var box = {
+              left: left,
+              top: point[1] + rect.top - 60,
+              width: width,
+              height: height
+          };
+          reveal(box, text, options);
+      }
 
-      function errorTitle(d) {
-          var unknown = t('inspector.unknown');
 
-          if (!d) return unknown;
-          var errorType = d.error_type;
-          var parentErrorType = d.parent_error_type;
+      function addHouse() {
+          context.enter(modeBrowse(context));
+          context.history().reset('initial');
+          _houseID = null;
 
-          var et = en.QA.keepRight.errorTypes[errorType];
-          var pt = en.QA.keepRight.errorTypes[parentErrorType];
+          var msec = transitionTime(house, context.map().center());
+          if (msec) { reveal(null, null, { duration: 0 }); }
+          context.map().centerZoomEase(house, 19, msec);
 
-          if (et && et.title) {
-              return t('QA.keepRight.errorTypes.' + errorType + '.title');
-          } else if (pt && pt.title) {
-              return t('QA.keepRight.errorTypes.' + parentErrorType + '.title');
-          } else {
-              return unknown;
+          timeout(function() {
+              var tooltip = reveal('button.add-area',
+                  t('intro.buildings.add_building', { button: icon('#iD-icon-area', 'pre-text') }));
+
+              tooltip.selectAll('.tooltip-inner')
+                  .insert('svg', 'span')
+                  .attr('class', 'tooltip-illustration')
+                  .append('use')
+                  .attr('xlink:href', '#iD-graphic-buildings');
+
+              context.on('enter.intro', function(mode) {
+                  if (mode.id !== 'add-area') return;
+                  continueTo(startHouse);
+              });
+          }, msec + 100);
+
+          function continueTo(nextStep) {
+              context.on('enter.intro', null);
+              nextStep();
           }
       }
 
 
-      function keepRightHeader(selection) {
-          var header = selection.selectAll('.kr_error-header')
-              .data(
-                  (_error ? [_error] : []),
-                  function(d) { return d.id + '-' + (d.status || 0); }
-              );
+      function startHouse() {
+          if (context.mode().id !== 'add-area') {
+              return continueTo(addHouse);
+          }
 
-          header.exit()
-              .remove();
+          _houseID = null;
+          context.map().zoomEase(20, 500);
 
-          var headerEnter = header.enter()
-              .append('div')
-              .attr('class', 'kr_error-header');
+          timeout(function() {
+              revealHouse(house, t('intro.buildings.start_building'));
 
-          var iconEnter = headerEnter
-              .append('div')
-              .attr('class', 'kr_error-header-icon')
-              .classed('new', function(d) { return d.id < 0; });
+              context.map().on('move.intro drawn.intro', function() {
+                  revealHouse(house, t('intro.buildings.start_building'), { duration: 0 });
+              });
 
-          iconEnter
-              .append('div')
-              .attr('class', function(d) {
-                  return 'preset-icon-28 kr_error kr_error-' + d.id + ' kr_error_type_' + d.parent_error_type;
-              })
-              .call(svgIcon('#iD-icon-bolt', 'kr_error-fill'));
+              context.on('enter.intro', function(mode) {
+                  if (mode.id !== 'draw-area') return chapter.restart();
+                  continueTo(continueHouse);
+              });
 
-          headerEnter
-              .append('div')
-              .attr('class', 'kr_error-header-label')
-              .text(errorTitle);
-      }
+          }, 550);  // after easing
 
+          function continueTo(nextStep) {
+              context.map().on('move.intro drawn.intro', null);
+              context.on('enter.intro', null);
+              nextStep();
+          }
+      }
 
-      keepRightHeader.error = function(val) {
-          if (!arguments.length) return _error;
-          _error = val;
-          return keepRightHeader;
-      };
 
+      function continueHouse() {
+          if (context.mode().id !== 'draw-area') {
+              return continueTo(addHouse);
+          }
 
-      return keepRightHeader;
-  }
+          _houseID = null;
 
-  function uiLasso(context) {
-      var group, polygon;
+          revealHouse(house, t('intro.buildings.continue_building'));
 
-      lasso.coordinates = [];
+          context.map().on('move.intro drawn.intro', function() {
+              revealHouse(house, t('intro.buildings.continue_building'), { duration: 0 });
+          });
 
-      function lasso(selection$$1) {
-          context.container()
-              .classed('lasso', true);
+          context.on('enter.intro', function(mode) {
+              if (mode.id === 'draw-area') {
+                  return;
+              } else if (mode.id === 'select') {
+                  var graph = context.graph();
+                  var way = context.entity(context.selectedIDs()[0]);
+                  var nodes = graph.childNodes(way);
+                  var points = uniq(nodes).map(function(n) { return context.projection(n.loc); });
 
-          group = selection$$1
-              .append('g')
-              .attr('class', 'lasso hide');
+                  if (isMostlySquare(points)) {
+                      _houseID = way.id;
+                      return continueTo(chooseCategoryBuilding);
+                  } else {
+                      return continueTo(retryHouse);
+                  }
 
-          polygon = group
-              .append('path')
-              .attr('class', 'lasso-path');
+              } else {
+                  return chapter.restart();
+              }
+          });
 
-          group
-              .call(uiToggle(true));
+          function continueTo(nextStep) {
+              context.map().on('move.intro drawn.intro', null);
+              context.on('enter.intro', null);
+              nextStep();
+          }
       }
 
 
-      function draw() {
-          if (polygon) {
-              polygon.data([lasso.coordinates])
-                  .attr('d', function(d) { return 'M' + d.join(' L') + ' Z'; });
+      function retryHouse() {
+          var onClick = function() { continueTo(addHouse); };
+
+          revealHouse(house, t('intro.buildings.retry_building'),
+              { buttonText: t('intro.ok'), buttonCallback: onClick }
+          );
+
+          context.map().on('move.intro drawn.intro', function() {
+              revealHouse(house, t('intro.buildings.retry_building'),
+                  { duration: 0, buttonText: t('intro.ok'), buttonCallback: onClick }
+              );
+          });
+
+          function continueTo(nextStep) {
+              context.map().on('move.intro drawn.intro', null);
+              nextStep();
           }
       }
 
 
-      lasso.extent = function () {
-          return lasso.coordinates.reduce(function(extent, point$$1) {
-              return extent.extend(geoExtent$$1(point$$1));
-          }, geoExtent$$1());
-      };
+      function chooseCategoryBuilding() {
+          if (!_houseID || !context.hasEntity(_houseID)) {
+              return addHouse();
+          }
+          var ids = context.selectedIDs();
+          if (context.mode().id !== 'select' || !ids.length || ids[0] !== _houseID) {
+              context.enter(modeSelect(context, [_houseID]));
+          }
 
+          // disallow scrolling
+          select('.inspector-wrap').on('wheel.intro', eventCancel);
 
-      lasso.p = function(_) {
-          if (!arguments.length) return lasso;
-          lasso.coordinates.push(_);
-          draw();
-          return lasso;
-      };
+          timeout(function() {
+              // reset pane, in case user somehow happened to change it..
+              select('.inspector-wrap .panewrap').style('right', '-100%');
 
+              var button = select('.preset-category-building .preset-list-button');
 
-      lasso.close = function() {
-          if (group) {
-              group.call(uiToggle(false, function() {
-                  select(this).remove();
-              }));
-          }
-          context.container().classed('lasso', false);
-      };
+              reveal(button.node(),
+                  t('intro.buildings.choose_category_building', { category: buildingCatetory.name() })
+              );
 
+              button.on('click.intro', function() {
+                  button.on('click.intro', null);
+                  continueTo(choosePresetHouse);
+              });
 
-      return lasso;
-  }
+          }, 400);  // after preset list pane visible..
 
-  function uiNoteComments() {
-      var _note;
 
+          context.on('enter.intro', function(mode) {
+              if (!_houseID || !context.hasEntity(_houseID)) {
+                  return continueTo(addHouse);
+              }
+              var ids = context.selectedIDs();
+              if (mode.id !== 'select' || !ids.length || ids[0] !== _houseID) {
+                  return continueTo(chooseCategoryBuilding);
+              }
+          });
 
-      function noteComments(selection$$1) {
-          if (_note.isNew()) return; // don't draw .comments-container
+          function continueTo(nextStep) {
+              select('.inspector-wrap').on('wheel.intro', null);
+              select('.preset-list-button').on('click.intro', null);
+              context.on('enter.intro', null);
+              nextStep();
+          }
+      }
 
-          var comments = selection$$1.selectAll('.comments-container')
-              .data([0]);
 
-          comments = comments.enter()
-              .append('div')
-              .attr('class', 'comments-container')
-              .merge(comments);
+      function choosePresetHouse() {
+          if (!_houseID || !context.hasEntity(_houseID)) {
+              return addHouse();
+          }
+          var ids = context.selectedIDs();
+          if (context.mode().id !== 'select' || !ids.length || ids[0] !== _houseID) {
+              context.enter(modeSelect(context, [_houseID]));
+          }
 
-          var commentEnter = comments.selectAll('.comment')
-              .data(_note.comments)
-              .enter()
-              .append('div')
-              .attr('class', 'comment');
+          // disallow scrolling
+          select('.inspector-wrap').on('wheel.intro', eventCancel);
 
-          commentEnter
-              .append('div')
-              .attr('class', function(d) { return 'comment-avatar user-' + d.uid; })
-              .call(svgIcon('#iD-icon-avatar', 'comment-avatar-icon'));
+          timeout(function() {
+              // reset pane, in case user somehow happened to change it..
+              select('.inspector-wrap .panewrap').style('right', '-100%');
 
-          var mainEnter = commentEnter
-              .append('div')
-              .attr('class', 'comment-main');
+              var button = select('.preset-building-house .preset-list-button');
 
-          var metadataEnter = mainEnter
-              .append('div')
-              .attr('class', 'comment-metadata');
+              reveal(button.node(),
+                  t('intro.buildings.choose_preset_house', { preset: housePreset.name() }),
+                  { duration: 300 }
+              );
 
-          metadataEnter
-              .append('div')
-              .attr('class', 'comment-author')
-              .each(function(d) {
-                  var selection$$1 = select(this);
-                  var osm = services.osm;
-                  if (osm && d.user) {
-                      selection$$1 = selection$$1
-                          .append('a')
-                          .attr('class', 'comment-author-link')
-                          .attr('href', osm.userURL(d.user))
-                          .attr('tabindex', -1)
-                          .attr('target', '_blank');
-                  }
-                  selection$$1
-                      .text(function(d) { return d.user || t('note.anonymous'); });
+              button.on('click.intro', function() {
+                  button.on('click.intro', null);
+                  continueTo(closeEditorHouse);
               });
 
-          metadataEnter
-              .append('div')
-              .attr('class', 'comment-date')
-              .text(function(d) {
-                  return t('note.status.' + d.action, { when: localeDateString(d.date) });
-              });
+          }, 400);  // after preset list pane visible..
 
-          mainEnter
-              .append('div')
-              .attr('class', 'comment-text')
-              .html(function(d) { return d.html; });
+          context.on('enter.intro', function(mode) {
+              if (!_houseID || !context.hasEntity(_houseID)) {
+                  return continueTo(addHouse);
+              }
+              var ids = context.selectedIDs();
+              if (mode.id !== 'select' || !ids.length || ids[0] !== _houseID) {
+                  return continueTo(chooseCategoryBuilding);
+              }
+          });
 
-          comments
-              .call(replaceAvatars);
+          function continueTo(nextStep) {
+              select('.inspector-wrap').on('wheel.intro', null);
+              select('.preset-list-button').on('click.intro', null);
+              context.on('enter.intro', null);
+              nextStep();
+          }
       }
 
 
-      function replaceAvatars(selection$$1) {
-          var osm = services.osm;
-          if (!osm) return;
-
-          var uids = {};  // gather uids in the comment thread
-          _note.comments.forEach(function(d) {
-              if (d.uid) uids[d.uid] = true;
-          });
+      function closeEditorHouse() {
+          if (!_houseID || !context.hasEntity(_houseID)) {
+              return addHouse();
+          }
+          var ids = context.selectedIDs();
+          if (context.mode().id !== 'select' || !ids.length || ids[0] !== _houseID) {
+              context.enter(modeSelect(context, [_houseID]));
+          }
 
-          Object.keys(uids).forEach(function(uid) {
-              osm.loadUser(uid, function(err, user) {
-                  if (!user || !user.image_url) return;
+          context.history().checkpoint('hasHouse');
 
-                  selection$$1.selectAll('.comment-avatar.user-' + uid)
-                      .html('')
-                      .append('img')
-                      .attr('class', 'icon comment-avatar-icon')
-                      .attr('src', user.image_url)
-                      .attr('alt', user.display_name);
-              });
+          context.on('exit.intro', function() {
+              continueTo(rightClickHouse);
           });
-      }
 
+          timeout(function() {
+              reveal('.entity-editor-pane',
+                  t('intro.buildings.close', { button: icon('#iD-icon-apply', 'pre-text') })
+              );
+          }, 500);
 
-      function localeDateString(s) {
-          if (!s) return null;
-          var detected = utilDetect();
-          var options = { day: 'numeric', month: 'short', year: 'numeric' };
-          s = s.replace(/-/g, '/'); // fix browser-specific Date() issues
-          var d = new Date(s);
-          if (isNaN(d.getTime())) return null;
-          return d.toLocaleDateString(detected.locale, options);
+          function continueTo(nextStep) {
+              context.on('exit.intro', null);
+              nextStep();
+          }
       }
 
 
-      noteComments.note = function(val) {
-          if (!arguments.length) return _note;
-          _note = val;
-          return noteComments;
-      };
-
+      function rightClickHouse() {
+          if (!_houseID) return chapter.restart();
 
-      return noteComments;
-  }
+          context.enter(modeBrowse(context));
+          context.history().reset('hasHouse');
+          var zoom = context.map().zoom();
+          if (zoom < 20) {
+              zoom = 20;
+          }
+          context.map().centerZoomEase(house, zoom, 500);
 
-  function uiNoteEditor$$1(context) {
-      var dispatch$$1 = dispatch('change');
-      var quickLinks = uiQuickLinks();
-      var noteComments = uiNoteComments();
-      var noteHeader = uiNoteHeader();
+          context.on('enter.intro', function(mode) {
+              if (mode.id !== 'select') return;
+              var ids = context.selectedIDs();
+              if (ids.length !== 1 || ids[0] !== _houseID) return;
 
-      // var formFields = uiFormFields(context);
+              timeout(function() {
+                  var node = selectMenuItem('orthogonalize').node();
+                  if (!node) return;
+                  continueTo(clickSquare);
+              }, 300);  // after menu visible
+          });
 
-      var _note;
-      // var _fieldsArr;
+          context.map().on('move.intro drawn.intro', function() {
+              revealHouse(house, t('intro.buildings.rightclick_building'), { duration: 0 });
+          });
 
+          context.history().on('change.intro', function() {
+              continueTo(rightClickHouse);
+          });
 
-      function noteEditor(selection$$1) {
-          // quick links
-          var choices = [{
-              id: 'zoom_to',
-              label: 'inspector.zoom_to.title',
-              tooltip: function() {
-                  return uiTooltipHtml(t('inspector.zoom_to.tooltip_note'), t('inspector.zoom_to.key'));
-              },
-              click: function zoomTo() {
-                  context.mode().zoomToSelected();
-              }
-          }];
+          function continueTo(nextStep) {
+              context.on('enter.intro', null);
+              context.map().on('move.intro drawn.intro', null);
+              context.history().on('change.intro', null);
+              nextStep();
+          }
+      }
 
 
-          var header = selection$$1.selectAll('.header')
-              .data([0]);
+      function clickSquare() {
+          if (!_houseID) return chapter.restart();
+          var entity = context.hasEntity(_houseID);
+          if (!entity) return continueTo(rightClickHouse);
 
-          var headerEnter = header.enter()
-              .append('div')
-              .attr('class', 'header fillL');
+          var node = selectMenuItem('orthogonalize').node();
+          if (!node) { return continueTo(rightClickHouse); }
 
-          headerEnter
-              .append('button')
-              .attr('class', 'fr note-editor-close')
-              .on('click', function() {
-                  context.enter(modeBrowse(context));
-              })
-              .call(svgIcon('#iD-icon-close'));
+          var wasChanged = false;
+          var menuCoords = context.map().mouseCoordinates();
 
-          headerEnter
-              .append('h3')
-              .text(t('note.title'));
+          revealEditMenu(menuCoords,
+              t('intro.buildings.square_building', { button: icon('#iD-operation-orthogonalize', 'pre-text') })
+          );
 
+          context.on('enter.intro', function(mode) {
+              if (mode.id === 'browse') {
+                  continueTo(rightClickHouse);
+              } else if (mode.id === 'move' || mode.id === 'rotate') {
+                  continueTo(retryClickSquare);
+              }
+          });
 
-          var body = selection$$1.selectAll('.body')
-              .data([0]);
+          context.map().on('move.intro drawn.intro', function() {
+              var node = selectMenuItem('orthogonalize').node();
+              if (!wasChanged && !node) { return continueTo(rightClickHouse); }
 
-          body = body.enter()
-              .append('div')
-              .attr('class', 'body')
-              .merge(body);
+              revealEditMenu(menuCoords,
+                  t('intro.buildings.square_building', { button: icon('#iD-operation-orthogonalize', 'pre-text') }),
+                  { duration: 0 }
+              );
+          });
 
-          var editor = body.selectAll('.note-editor')
-              .data([0]);
+          context.history().on('change.intro', function() {
+              wasChanged = true;
+              context.history().on('change.intro', null);
 
-          editor.enter()
-              .append('div')
-              .attr('class', 'modal-section note-editor')
-              .merge(editor)
-              .call(noteHeader.note(_note))
-              .call(quickLinks.choices(choices))
-              .call(noteComments.note(_note))
-              .call(noteSaveSection);
+              // Something changed.  Wait for transition to complete and check undo annotation.
+              timeout(function() {
+                  if (context.history().undoAnnotation() === t('operations.orthogonalize.annotation.area')) {
+                      continueTo(doneSquare);
+                  } else {
+                      continueTo(retryClickSquare);
+                  }
+              }, 500);  // after transitioned actions
+          });
 
+          function continueTo(nextStep) {
+              context.on('enter.intro', null);
+              context.map().on('move.intro drawn.intro', null);
+              context.history().on('change.intro', null);
+              nextStep();
+          }
+      }
 
-          var footer = selection$$1.selectAll('.footer')
-              .data([0]);
 
-          footer.enter()
-              .append('div')
-              .attr('class', 'footer')
-              .merge(footer)
-              .call(uiViewOnOSM(context).what(_note))
-              .call(uiNoteReport(context).note(_note));
+      function retryClickSquare() {
+          context.enter(modeBrowse(context));
 
+          revealHouse(house, t('intro.buildings.retry_square'), {
+              buttonText: t('intro.ok'),
+              buttonCallback: function() { continueTo(rightClickHouse); }
+          });
 
-          // rerender the note editor on any auth change
-          var osm = services.osm;
-          if (osm) {
-              osm.on('change.note-save', function() {
-                  selection$$1.call(noteEditor);
-              });
+          function continueTo(nextStep) {
+              nextStep();
           }
       }
 
 
-      function noteSaveSection(selection$$1) {
-          var isSelected = (_note && _note.id === context.selectedNoteID());
-          var noteSave = selection$$1.selectAll('.note-save')
-              .data((isSelected ? [_note] : []), function(d) { return d.status + d.id; });
-
-          // exit
-          noteSave.exit()
-              .remove();
-
-          // enter
-          var noteSaveEnter = noteSave.enter()
-              .append('div')
-              .attr('class', 'note-save save-section cf');
-
-          // // if new note, show categories to pick from
-          // if (_note.isNew()) {
-          //     var presets = context.presets();
+      function doneSquare() {
+          context.history().checkpoint('doneSquare');
 
-          //     // NOTE: this key isn't a age and therefore there is no documentation (yet)
-          //     _fieldsArr = [
-          //         uiField(context, presets.field('category'), null, { show: true, revert: false }),
-          //     ];
+          revealHouse(house, t('intro.buildings.done_square'), {
+              buttonText: t('intro.ok'),
+              buttonCallback: function() { continueTo(addTank); }
+          });
 
-          //     _fieldsArr.forEach(function(field) {
-          //         field
-          //             .on('change', changeCategory);
-          //     });
+          function continueTo(nextStep) {
+              nextStep();
+          }
+      }
 
-          //     noteSaveEnter
-          //         .append('div')
-          //         .attr('class', 'note-category')
-          //         .call(formFields.fieldsArr(_fieldsArr));
-          // }
 
-          // function changeCategory() {
-          //     // NOTE: perhaps there is a better way to get value
-          //     var val = d3_select('input[name=\'category\']:checked').property('__data__') || undefined;
+      function addTank() {
+          context.enter(modeBrowse(context));
+          context.history().reset('doneSquare');
+          _tankID = null;
 
-          //     // store the unsaved category with the note itself
-          //     _note = _note.update({ newCategory: val });
-          //     var osm = services.osm;
-          //     if (osm) {
-          //         osm.replaceNote(_note);  // update note cache
-          //     }
-          //     noteSave
-          //         .call(noteSaveButtons);
-          // }
+          var msec = transitionTime(tank, context.map().center());
+          if (msec) { reveal(null, null, { duration: 0 }); }
+          context.map().centerZoomEase(tank, 19.5, msec);
 
-          noteSaveEnter
-              .append('h4')
-              .attr('class', '.note-save-header')
-              .text(function() {
-                  return _note.isNew() ? t('note.newDescription') : t('note.newComment');
+          timeout(function() {
+              reveal('button.add-area',
+                  t('intro.buildings.add_tank', { button: icon('#iD-icon-area', 'pre-text') })
+              );
+
+              context.on('enter.intro', function(mode) {
+                  if (mode.id !== 'add-area') return;
+                  continueTo(startTank);
               });
+          }, msec + 100);
 
-          noteSaveEnter
-              .append('textarea')
-              .attr('class', 'new-comment-input')
-              .attr('placeholder', t('note.inputPlaceholder'))
-              .attr('maxlength', 1000)
-              .property('value', function(d) { return d.newComment; })
-              .call(utilNoAuto)
-              .on('keydown.note-input', keydown)
-              .on('input.note-input', changeInput)
-              .on('blur.note-input', changeInput);
+          function continueTo(nextStep) {
+              context.on('enter.intro', null);
+              nextStep();
+          }
+      }
 
-          // update
-          noteSave = noteSaveEnter
-              .merge(noteSave)
-              .call(userDetails)
-              .call(noteSaveButtons);
 
+      function startTank() {
+          if (context.mode().id !== 'add-area') {
+              return continueTo(addTank);
+          }
 
-          // fast submit if user presses cmd+enter
-          function keydown() {
-              if (!(event.keyCode === 13 && event.metaKey)) return;
+          _tankID = null;
 
-              var osm = services.osm;
-              if (!osm) return;
+          timeout(function() {
+              revealTank(tank, t('intro.buildings.start_tank'));
 
-              var hasAuth = osm.authenticated();
-              if (!hasAuth) return;
+              context.map().on('move.intro drawn.intro', function() {
+                  revealTank(tank, t('intro.buildings.start_tank'), { duration: 0 });
+              });
 
-              if (!_note.newComment) return;
+              context.on('enter.intro', function(mode) {
+                  if (mode.id !== 'draw-area') return chapter.restart();
+                  continueTo(continueTank);
+              });
 
-              event.preventDefault();
+          }, 550);  // after easing
 
-              select(this)
-                  .on('keydown.note-input', null);
+          function continueTo(nextStep) {
+              context.map().on('move.intro drawn.intro', null);
+              context.on('enter.intro', null);
+              nextStep();
+          }
+      }
 
-              // focus on button and submit
-              window.setTimeout(function() {
-                  if (_note.isNew()) {
-                      noteSave.selectAll('.save-button').node().focus();
-                      clickSave(_note);
-                  } else  {
-                      noteSave.selectAll('.comment-button').node().focus();
-                      clickComment(_note);
-                  }
-              }, 10);
+
+      function continueTank() {
+          if (context.mode().id !== 'draw-area') {
+              return continueTo(addTank);
           }
 
+          _tankID = null;
 
-          function changeInput() {
-              var input = select(this);
-              var val = input.property('value').trim() || undefined;
+          revealTank(tank, t('intro.buildings.continue_tank'));
 
-              // store the unsaved comment with the note itself
-              _note = _note.update({ newComment: val });
+          context.map().on('move.intro drawn.intro', function() {
+              revealTank(tank, t('intro.buildings.continue_tank'), { duration: 0 });
+          });
 
-              var osm = services.osm;
-              if (osm) {
-                  osm.replaceNote(_note);  // update note cache
+          context.on('enter.intro', function(mode) {
+              if (mode.id === 'draw-area') {
+                  return;
+              } else if (mode.id === 'select') {
+                  _tankID = context.selectedIDs()[0];
+                  return continueTo(searchPresetTank);
+              } else {
+                  return continueTo(addTank);
               }
+          });
 
-              noteSave
-                  .call(noteSaveButtons);
+          function continueTo(nextStep) {
+              context.map().on('move.intro drawn.intro', null);
+              context.on('enter.intro', null);
+              nextStep();
           }
       }
 
 
-      function userDetails(selection$$1) {
-          var detailSection = selection$$1.selectAll('.detail-section')
-              .data([0]);
+      function searchPresetTank() {
+          if (!_tankID || !context.hasEntity(_tankID)) {
+              return addTank();
+          }
+          var ids = context.selectedIDs();
+          if (context.mode().id !== 'select' || !ids.length || ids[0] !== _tankID) {
+              context.enter(modeSelect(context, [_tankID]));
+          }
 
-          detailSection = detailSection.enter()
-              .append('div')
-              .attr('class', 'detail-section')
-              .merge(detailSection);
+          // disallow scrolling
+          select('.inspector-wrap').on('wheel.intro', eventCancel);
 
-          var osm = services.osm;
-          if (!osm) return;
+          timeout(function() {
+              // reset pane, in case user somehow happened to change it..
+              select('.inspector-wrap .panewrap').style('right', '-100%');
 
-          // Add warning if user is not logged in
-          var hasAuth = osm.authenticated();
-          var authWarning = detailSection.selectAll('.auth-warning')
-              .data(hasAuth ? [] : [0]);
+              select('.preset-search-input')
+                  .on('keydown.intro', null)
+                  .on('keyup.intro', checkPresetSearch);
 
-          authWarning.exit()
-              .transition()
-              .duration(200)
-              .style('opacity', 0)
-              .remove();
+              reveal('.preset-search-input',
+                  t('intro.buildings.search_tank', { preset: tankPreset.name() })
+              );
+          }, 400);  // after preset list pane visible..
 
-          var authEnter = authWarning.enter()
-              .insert('div', '.tag-reference-body')
-              .attr('class', 'field-warning auth-warning')
-              .style('opacity', 0);
+          context.on('enter.intro', function(mode) {
+              if (!_tankID || !context.hasEntity(_tankID)) {
+                  return continueTo(addTank);
+              }
 
-          authEnter
-              .call(svgIcon('#iD-icon-alert', 'inline'));
+              var ids = context.selectedIDs();
+              if (mode.id !== 'select' || !ids.length || ids[0] !== _tankID) {
+                  // keep the user's area selected..
+                  context.enter(modeSelect(context, [_tankID]));
 
-          authEnter
-              .append('span')
-              .text(t('note.login'));
+                  // reset pane, in case user somehow happened to change it..
+                  select('.inspector-wrap .panewrap').style('right', '-100%');
+                  // disallow scrolling
+                  select('.inspector-wrap').on('wheel.intro', eventCancel);
 
-          authEnter
-              .append('a')
-              .attr('target', '_blank')
-              .call(svgIcon('#iD-icon-out-link', 'inline'))
-              .append('span')
-              .text(t('login'))
-              .on('click.note-login', function() {
-                  event.preventDefault();
-                  osm.authenticate();
-              });
+                  select('.preset-search-input')
+                      .on('keydown.intro', null)
+                      .on('keyup.intro', checkPresetSearch);
 
-          authEnter
-              .transition()
-              .duration(200)
-              .style('opacity', 1);
+                  reveal('.preset-search-input',
+                      t('intro.buildings.search_tank', { preset: tankPreset.name() })
+                  );
 
+                  context.history().on('change.intro', null);
+              }
+          });
 
-          var prose = detailSection.selectAll('.note-save-prose')
-              .data(hasAuth ? [0] : []);
+          function checkPresetSearch() {
+              var first = select('.preset-list-item:first-child');
 
-          prose.exit()
-              .remove();
+              if (first.classed('preset-man_made-storage_tank')) {
+                  reveal(first.select('.preset-list-button').node(),
+                      t('intro.buildings.choose_tank', { preset: tankPreset.name() }),
+                      { duration: 300 }
+                  );
 
-          prose = prose.enter()
-              .append('p')
-              .attr('class', 'note-save-prose')
-              .text(t('note.upload_explanation'))
-              .merge(prose);
+                  select('.preset-search-input')
+                      .on('keydown.intro', eventCancel, true)
+                      .on('keyup.intro', null);
 
-          osm.userDetails(function(err, user) {
-              if (err) return;
+                  context.history().on('change.intro', function() {
+                      continueTo(closeEditorTank);
+                  });
+              }
+          }
 
-              var userLink = select(document.createElement('div'));
+          function continueTo(nextStep) {
+              select('.inspector-wrap').on('wheel.intro', null);
+              context.on('enter.intro', null);
+              context.history().on('change.intro', null);
+              select('.preset-search-input').on('keydown.intro keyup.intro', null);
+              nextStep();
+          }
+      }
 
-              if (user.image_url) {
-                  userLink
-                      .append('img')
-                      .attr('src', user.image_url)
-                      .attr('class', 'icon pre-text user-icon');
-              }
 
-              userLink
-                  .append('a')
-                  .attr('class', 'user-info')
-                  .text(user.display_name)
-                  .attr('href', osm.userURL(user.display_name))
-                  .attr('tabindex', -1)
-                  .attr('target', '_blank');
+      function closeEditorTank() {
+          if (!_tankID || !context.hasEntity(_tankID)) {
+              return addTank();
+          }
+          var ids = context.selectedIDs();
+          if (context.mode().id !== 'select' || !ids.length || ids[0] !== _tankID) {
+              context.enter(modeSelect(context, [_tankID]));
+          }
 
-              prose
-                  .html(t('note.upload_explanation_with_user', { user: userLink.html() }));
+          context.history().checkpoint('hasTank');
+
+          context.on('exit.intro', function() {
+              continueTo(rightClickTank);
           });
+
+          timeout(function() {
+              reveal('.entity-editor-pane',
+                  t('intro.buildings.close', { button: icon('#iD-icon-apply', 'pre-text') })
+              );
+          }, 500);
+
+          function continueTo(nextStep) {
+              context.on('exit.intro', null);
+              nextStep();
+          }
       }
 
 
-      function noteSaveButtons(selection$$1) {
-          var osm = services.osm;
-          var hasAuth = osm && osm.authenticated();
+      function rightClickTank() {
+          if (!_tankID) return continueTo(addTank);
 
-          var isSelected = (_note && _note.id === context.selectedNoteID());
-          var buttonSection = selection$$1.selectAll('.buttons')
-              .data((isSelected ? [_note] : []), function(d) { return d.status + d.id; });
+          context.enter(modeBrowse(context));
+          context.history().reset('hasTank');
+          context.map().centerEase(tank, 500);
 
-          // exit
-          buttonSection.exit()
-              .remove();
+          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;
 
-          // enter
-          var buttonEnter = buttonSection.enter()
-              .append('div')
-              .attr('class', 'buttons');
+                  timeout(function() {
+                      var node = selectMenuItem('circularize').node();
+                      if (!node) return;
+                      continueTo(clickCircle);
+                  }, 300);  // after menu visible
+              });
 
-          if (_note.isNew()) {
-              buttonEnter
-                  .append('button')
-                  .attr('class', 'button cancel-button secondary-action')
-                  .text(t('confirm.cancel'));
+              revealTank(tank, t('intro.buildings.rightclick_tank'));
 
-              buttonEnter
-                  .append('button')
-                  .attr('class', 'button save-button action')
-                  .text(t('note.save'));
+              context.map().on('move.intro drawn.intro', function() {
+                  revealTank(tank, t('intro.buildings.rightclick_tank'), { duration: 0 });
+              });
 
-          } else {
-              buttonEnter
-                  .append('button')
-                  .attr('class', 'button status-button action');
+              context.history().on('change.intro', function() {
+                  continueTo(rightClickTank);
+              });
 
-              buttonEnter
-                  .append('button')
-                  .attr('class', 'button comment-button action')
-                  .text(t('note.comment'));
+          }, 600);
+
+          function continueTo(nextStep) {
+              context.on('enter.intro', null);
+              context.map().on('move.intro drawn.intro', null);
+              context.history().on('change.intro', null);
+              nextStep();
           }
+      }
 
 
-          // update
-          buttonSection = buttonSection
-              .merge(buttonEnter);
+      function clickCircle() {
+          if (!_tankID) return chapter.restart();
+          var entity = context.hasEntity(_tankID);
+          if (!entity) return continueTo(rightClickTank);
 
-          buttonSection.select('.cancel-button')   // select and propagate data
-              .on('click.cancel', clickCancel);
+          var node = selectMenuItem('circularize').node();
+          if (!node) { return continueTo(rightClickTank); }
 
-          buttonSection.select('.save-button')     // select and propagate data
-              .attr('disabled', isSaveDisabled)
-              .on('click.save', clickSave);
+          var wasChanged = false;
+          var menuCoords = context.map().mouseCoordinates();
 
-          buttonSection.select('.status-button')   // select and propagate data
-              .attr('disabled', (hasAuth ? null : true))
-              .text(function(d) {
-                  var action = (d.status === 'open' ? 'close' : 'open');
-                  var andComment = (d.newComment ? '_comment' : '');
-                  return t('note.' + action + andComment);
-              })
-              .on('click.status', clickStatus);
+          revealEditMenu(menuCoords,
+              t('intro.buildings.circle_tank', { button: icon('#iD-operation-circularize', 'pre-text') })
+          );
 
-          buttonSection.select('.comment-button')   // select and propagate data
-              .attr('disabled', isSaveDisabled)
-              .on('click.comment', clickComment);
+          context.on('enter.intro', function(mode) {
+              if (mode.id === 'browse') {
+                  continueTo(rightClickTank);
+              } else if (mode.id === 'move' || mode.id === 'rotate') {
+                  continueTo(retryClickCircle);
+              }
+          });
 
+          context.map().on('move.intro drawn.intro', function() {
+              var node = selectMenuItem('circularize').node();
+              if (!wasChanged && !node) { return continueTo(rightClickTank); }
 
-          function isSaveDisabled(d) {
-              return (hasAuth && d.status === 'open' && d.newComment) ? null : true;
-          }
-      }
+              revealEditMenu(menuCoords,
+                  t('intro.buildings.circle_tank', { button: icon('#iD-operation-circularize', 'pre-text') }),
+                  { duration: 0 }
+              );
+          });
 
+          context.history().on('change.intro', function() {
+              wasChanged = true;
+              context.history().on('change.intro', null);
 
+              // Something changed.  Wait for transition to complete and check undo annotation.
+              timeout(function() {
+                  if (context.history().undoAnnotation() === t('operations.circularize.annotation.area')) {
+                      continueTo(play);
+                  } else {
+                      continueTo(retryClickCircle);
+                  }
+              }, 500);  // after transitioned actions
+          });
 
-      function clickCancel(d) {
-          this.blur();    // avoid keeping focus on the button - #4641
-          var osm = services.osm;
-          if (osm) {
-              osm.removeNote(d);
+          function continueTo(nextStep) {
+              context.on('enter.intro', null);
+              context.map().on('move.intro drawn.intro', null);
+              context.history().on('change.intro', null);
+              nextStep();
           }
-          context.enter(modeBrowse(context));
-          dispatch$$1.call('change');
       }
 
 
-      function clickSave(d) {
-          this.blur();    // avoid keeping focus on the button - #4641
-          var osm = services.osm;
-          if (osm) {
-              osm.postNoteCreate(d, function(err, note) {
-                  dispatch$$1.call('change', note);
-              });
-          }
-      }
+      function retryClickCircle() {
+          context.enter(modeBrowse(context));
 
+          revealTank(tank, t('intro.buildings.retry_circle'), {
+              buttonText: t('intro.ok'),
+              buttonCallback: function() { continueTo(rightClickTank); }
+          });
 
-      function clickStatus(d) {
-          this.blur();    // avoid keeping focus on the button - #4641
-          var osm = services.osm;
-          if (osm) {
-              var setStatus = (d.status === 'open' ? 'closed' : 'open');
-              osm.postNoteUpdate(d, setStatus, function(err, note) {
-                  dispatch$$1.call('change', note);
-              });
+          function continueTo(nextStep) {
+              nextStep();
           }
       }
 
-      function clickComment(d) {
-          this.blur();    // avoid keeping focus on the button - #4641
-          var osm = services.osm;
-          if (osm) {
-              osm.postNoteUpdate(d, d.status, function(err, note) {
-                  dispatch$$1.call('change', note);
-              });
-          }
+
+      function play() {
+          dispatch$1.call('done');
+          reveal('#id-container',
+              t('intro.buildings.play', { next: t('intro.startediting.title') }), {
+                  tooltipBox: '.intro-nav-wrap .chapter-startEditing',
+                  buttonText: t('intro.ok'),
+                  buttonCallback: function() { reveal('#id-container'); }
+              }
+          );
       }
 
 
-      noteEditor.note = function(val) {
-          if (!arguments.length) return _note;
-          _note = val;
-          return noteEditor;
+      chapter.enter = function() {
+          addHouse();
+      };
+
+
+      chapter.exit = function() {
+          timeouts.forEach(window.clearTimeout);
+          context.on('enter.intro exit.intro', null);
+          context.map().on('move.intro drawn.intro', null);
+          context.history().on('change.intro', null);
+          select('.inspector-wrap').on('wheel.intro', null);
+          select('.preset-search-input').on('keydown.intro keyup.intro', null);
+          select('.more-fields .combobox-input').on('click.intro', null);
       };
 
 
-      return utilRebind(noteEditor, dispatch$$1, 'on');
+      chapter.restart = function() {
+          chapter.exit();
+          chapter.enter();
+      };
+
+
+      return utilRebind(chapter, dispatch$1, 'on');
   }
 
-  function uiNoteHeader() {
-      var _note;
+  function uiModal(selection, blocking) {
+      var keybinding = utilKeybinding('modal');
+      var previous = selection.select('div.modal');
+      var animate = previous.empty();
 
+      previous.transition()
+          .duration(200)
+          .style('opacity', 0)
+          .remove();
 
-      function noteHeader(selection) {
-          var header = selection.selectAll('.note-header')
-              .data(
-                  (_note ? [_note] : []),
-                  function(d) { return d.status + d.id; }
-              );
+      var shaded = selection
+          .append('div')
+          .attr('class', 'shaded')
+          .style('opacity', 0);
+
+      shaded.close = function() {
+          shaded
+              .transition()
+              .duration(200)
+              .style('opacity',0)
+              .remove();
+
+          modal
+              .transition()
+              .duration(200)
+              .style('top','0px');
+
+          select(document)
+              .call(keybinding.unbind);
+      };
+
+
+      var modal = shaded
+          .append('div')
+          .attr('class', 'modal fillL col6');
+
+      if (!blocking) {
+          shaded.on('click.remove-modal', function() {
+              if (event.target === this) {
+                  shaded.close();
+              }
+          });
+
+          modal.append('button')
+              .attr('class', 'close')
+              .on('click', shaded.close)
+              .call(svgIcon('#iD-icon-close'));
+
+          keybinding
+              .on('⌫', shaded.close)
+              .on('⎋', shaded.close);
+
+          select(document)
+              .call(keybinding);
+      }
 
-          header.exit()
-              .remove();
+      modal
+          .append('div')
+          .attr('class', 'content');
 
-          var headerEnter = header.enter()
-              .append('div')
-              .attr('class', 'note-header');
+      if (animate) {
+          shaded.transition().style('opacity', 1);
+      } else {
+          shaded.style('opacity', 1);
+      }
 
-          var iconEnter = headerEnter
-              .append('div')
-              .attr('class', function(d) { return 'note-header-icon ' + d.status; })
-              .classed('new', function(d) { return d.id < 0; });
 
-          iconEnter
-              .append('div')
-              .attr('class', 'preset-icon-28')
-              .call(svgIcon('#iD-icon-note', 'note-fill'));
+      return shaded;
+  }
 
-          iconEnter.each(function(d) {
-              var statusIcon = '#iD-icon-' + (d.id < 0 ? 'plus' : (d.status === 'open' ? 'close' : 'apply'));
-              iconEnter
-                  .append('div')
-                  .attr('class', 'note-icon-annotation')
-                  .call(svgIcon(statusIcon, 'note-annotation'));
-          });
+  function uiIntroStartEditing(context, reveal) {
+      var dispatch$1 = dispatch('done', 'startEditing');
+      var modalSelection = select(null);
 
-          headerEnter
-              .append('div')
-              .attr('class', 'note-header-label')
-              .text(function(d) {
-                  if (_note.isNew()) { return t('note.new'); }
-                  return t('note.note') + ' ' + d.id + ' ' +
-                      (d.status === 'closed' ? t('note.closed') : '');
-              });
+
+      var chapter = {
+          title: 'intro.startediting.title'
+      };
+
+      function showHelp() {
+          reveal('.map-control.help-control',
+              t('intro.startediting.help', { button: icon('#iD-icon-help', 'pre-text'), key: t('help.key') }), {
+                  buttonText: t('intro.ok'),
+                  buttonCallback: function() { shortcuts(); }
+              }
+          );
       }
 
+      function shortcuts() {
+          reveal('.map-control.help-control',
+              t('intro.startediting.shortcuts', { key: t('shortcuts.toggle.key') }), {
+                  buttonText: t('intro.ok'),
+                  buttonCallback: function() { showSave(); }
+              }
+          );
+      }
 
-      noteHeader.note = function(val) {
-          if (!arguments.length) return _note;
-          _note = val;
-          return noteHeader;
-      };
+      function showSave() {
+          d3_selectAll('.shaded').remove();  // in case user opened keyboard shortcuts
+          reveal('#bar button.save',
+              t('intro.startediting.save'), {
+                  buttonText: t('intro.ok'),
+                  buttonCallback: function() { showStart(); }
+              }
+          );
+      }
 
+      function showStart() {
+          d3_selectAll('.shaded').remove();  // in case user opened keyboard shortcuts
 
-      return noteHeader;
-  }
+          modalSelection = uiModal(context.container());
 
-  function uiNoteReport() {
-      var _note;
+          modalSelection.select('.modal')
+              .attr('class', 'modal-splash modal col6');
 
-      function noteReport(selection) {
-          var url;
-          if (services.osm && (_note instanceof osmNote) && (!_note.isNew())) {
-              url = services.osm.noteReportURL(_note);
-          }
+          modalSelection.selectAll('.close').remove();
 
-          var link = selection.selectAll('.note-report')
-              .data(url ? [url] : []);
+          var startbutton = modalSelection.select('.content')
+              .attr('class', 'fillL')
+              .append('button')
+                  .attr('class', 'modal-section huge-modal-button')
+                  .on('click', function() {
+                      modalSelection.remove();
+                  });
 
-          // exit
-          link.exit()
-              .remove();
+              startbutton
+                  .append('svg')
+                  .attr('class', 'illustration')
+                  .append('use')
+                  .attr('xlink:href', '#iD-logo-walkthrough');
 
-          // enter
-          var linkEnter = link.enter()
-              .append('a')
-              .attr('class', 'note-report')
-              .attr('target', '_blank')
-              .attr('href', function(d) { return d; })
-              .call(svgIcon('#iD-icon-out-link', 'inline'));
+              startbutton
+                  .append('h2')
+                  .text(t('intro.startediting.start'));
 
-          linkEnter
-              .append('span')
-              .text(t('note.report'));
+          dispatch$1.call('startEditing');
       }
 
 
-      noteReport.note = function(val) {
-          if (!arguments.length) return _note;
-          _note = val;
-          return noteReport;
+      chapter.enter = function() {
+          showHelp();
       };
 
-      return noteReport;
-  }
-
-  function uiRadialMenu(context, operations) {
-      var menu;
-      var center = [0, 0];
-      var tooltip;
-
 
-      var radialMenu = function(selection$$1) {
-          if (!operations.length) return;
+      chapter.exit = function() {
+          modalSelection.remove();
+          d3_selectAll('.shaded').remove();  // in case user opened keyboard shortcuts
+      };
 
-          selection$$1.node().parentNode.focus();
 
-          function click(operation) {
-              event.stopPropagation();
-              if (operation.disabled()) return;
-              operation();
-              radialMenu.close();
-          }
+      return utilRebind(chapter, dispatch$1, 'on');
+  }
 
-          menu = selection$$1
-              .append('g')
-              .attr('class', 'radial-menu')
-              .attr('transform', 'translate(' + center + ')')
-              .attr('opacity', 0);
+  var chapterUi = {
+      welcome: uiIntroWelcome,
+      navigation: uiIntroNavigation,
+      point: uiIntroPoint,
+      area: uiIntroArea,
+      line: uiIntroLine,
+      building: uiIntroBuilding,
+      startEditing: uiIntroStartEditing
+  };
 
-          menu
-              .transition()
-              .attr('opacity', 1);
+  var chapterFlow = [
+      'welcome',
+      'navigation',
+      'point',
+      'area',
+      'line',
+      'building',
+      'startEditing'
+  ];
 
-          var r = 50;
-          var a = Math.PI / 4;
-          var a0 = -Math.PI / 4;
-          var a1 = a0 + (operations.length - 1) * a;
 
-          menu
-              .append('path')
-              .attr('class', 'radial-menu-background')
-              .attr('d', 'M' + r * Math.sin(a0) + ',' +
-                               r * Math.cos(a0) +
-                        ' A' + r + ',' + r + ' 0 ' + (operations.length > 5 ? '1' : '0') + ',0 ' +
-                               (r * Math.sin(a1) + 1e-3) + ',' +
-                               (r * Math.cos(a1) + 1e-3)) // Force positive-length path (#1305)
-              .attr('stroke-width', 50)
-              .attr('stroke-linecap', 'round');
+  function uiIntro(context) {
+      var INTRO_IMAGERY = 'EsriWorldImageryClarity';
+      var introGraph = {};
+      var _currChapter;
 
-          var button = menu.selectAll()
-              .data(operations)
-              .enter()
-              .append('g')
-              .attr('class', function(d) { return 'radial-menu-item radial-menu-item-' + d.id; })
-              .classed('disabled', function(d) { return d.disabled(); })
-              .attr('transform', function(d, i) {
-                  return 'translate(' + geoVecFloor([
-                          r * Math.sin(a0 + i * a),
-                          r * Math.cos(a0 + i * a)]).join(',') + ')';
-              });
+      // create entities for intro graph and localize names
+      for (var id in dataIntroGraph) {
+          introGraph[id] = osmEntity(localize(dataIntroGraph[id]));
+      }
 
-          button
-              .append('circle')
-              .attr('r', 15)
-              .on('click', click)
-              .on('mousedown', mousedown)
-              .on('mouseover', mouseover)
-              .on('mouseout', mouseout);
 
-          button
-              .append('use')
-              .attr('transform', 'translate(-10,-10)')
-              .attr('width', '20')
-              .attr('height', '20')
-              .attr('xlink:href', function(d) { return '#iD-operation-' + d.id; });
+      function intro(selection) {
+          context.enter(modeBrowse(context));
 
-          tooltip = select(document.body)
-              .append('div')
-              .attr('class', 'tooltip-inner radial-menu-tooltip');
+          // Save current map state
+          var osm = context.connection();
+          var history = context.history().toJSON();
+          var hash = window.location.hash;
+          var center = context.map().center();
+          var zoom = context.map().zoom();
+          var background = context.background().baseLayerSource();
+          var overlays = context.background().overlayLayerSources();
+          var opacity = d3_selectAll('#map .layer-background').style('opacity');
+          var caches = osm && osm.caches();
+          var baseEntities = context.history().graph().base().entities;
+          var countryCode = services.geocoder.countryCode;
 
-          function mousedown() {
-              event.stopPropagation(); // https://github.com/openstreetmap/iD/issues/1869
-          }
+          // Show sidebar and disable the sidebar resizing button
+          // (this needs to be before `context.inIntro(true)`)
+          context.ui().sidebar.expand();
+          d3_selectAll('button.sidebar-toggle').classed('disabled', true);
 
-          function mouseover(d, i) {
-              var rect = context.surfaceRect();
-              var angle = a0 + i * a;
-              var top = rect.top + (r + 25) * Math.cos(angle) + center[1] + 'px';
-              var left = rect.left + (r + 25) * Math.sin(angle) + center[0] + 'px';
-              var bottom = rect.height - (r + 25) * Math.cos(angle) - center[1] + 'px';
-              var right = rect.width - (r + 25) * Math.sin(angle) - center[0] + 'px';
+          // Block saving
+          context.inIntro(true);
 
-              tooltip
-                  .style('top', null)
-                  .style('left', null)
-                  .style('bottom', null)
-                  .style('right', null)
-                  .style('display', 'block')
-                  .html(uiTooltipHtml(d.tooltip(), d.keys[0]));
+          // Load semi-real data used in intro
+          if (osm) { osm.toggle(false).reset(); }
+          context.history().reset();
+          context.history().merge(values$1(coreGraph().load(introGraph).entities));
+          context.history().checkpoint('initial');
 
-              if (i === 0) {
-                  tooltip
-                      .style('right', right)
-                      .style('top', top);
-              } else if (i >= 4) {
-                  tooltip
-                      .style('left', left)
-                      .style('bottom', bottom);
-              } else {
-                  tooltip
-                      .style('left', left)
-                      .style('top', top);
-              }
+          // Setup imagery
+          var imagery = context.background().findSource(INTRO_IMAGERY);
+          if (imagery) {
+              context.background().baseLayerSource(imagery);
+          } else {
+              context.background().bing();
           }
+          overlays.forEach(function(d) {
+              context.background().toggleOverlayLayer(d);
+          });
 
-          function mouseout() {
-              tooltip.style('display', 'none');
-          }
-      };
+          // Setup data layers (only OSM)
+          var layers = context.layers();
+          layers.all().forEach(function(item) {
+              // if the layer has the function `enabled`
+              if (typeof item.layer.enabled === 'function') {
+                  item.layer.enabled(item.id === 'osm');
+              }
+          });
 
+          // Mock geocoder
+          services.geocoder.countryCode = function(location, callback) {
+              callback(null, t('intro.graph.countrycode'));
+          };
 
-      radialMenu.close = function() {
-          if (menu) {
-              menu
-                  .style('pointer-events', 'none')
-                  .transition()
-                  .attr('opacity', 0)
-                  .remove();
-          }
 
-          if (tooltip) {
-              tooltip.remove();
-          }
-      };
+          d3_selectAll('#map .layer-background').style('opacity', 1);
 
+          var curtain = uiCurtain();
+          selection.call(curtain);
 
-      radialMenu.center = function(_) {
-          if (!arguments.length) return center;
-          center = _;
-          return radialMenu;
-      };
+          // Store that the user started the walkthrough..
+          context.storage('walkthrough_started', 'yes');
 
+          // Restore previous walkthrough progress..
+          var storedProgress = context.storage('walkthrough_progress') || '';
+          var progress = storedProgress.split(';').filter(Boolean);
 
-      return radialMenu;
-  }
+          var chapters = chapterFlow.map(function(chapter, i) {
+              var s = chapterUi[chapter](context, curtain.reveal)
+                  .on('done', function() {
+                      context.presets().init();  // clear away "recent" presets
 
-  function uiSelectionList(context, selectedIDs) {
+                      buttons.filter(function(d) {
+                          return d.title === s.title;
+                      }).classed('finished', true);
 
-      function selectEntity(entity) {
-          context.enter(modeSelect(context, [entity.id]));
-      }
+                      if (i < chapterFlow.length - 1) {
+                          var next = chapterFlow[i + 1];
+                          select('button.chapter-' + next)
+                              .classed('next', true);
+                      }
 
+                      // Store walkthrough progress..
+                      progress.push(chapter);
+                      context.storage('walkthrough_progress', uniq(progress).join(';'));
+                  });
+              return s;
+          });
 
-      function deselectEntity(entity) {
-          event.stopPropagation();
-          var index = selectedIDs.indexOf(entity.id);
-          if (index > -1) {
-              selectedIDs.splice(index, 1);
-          }
-          context.enter(modeSelect(context, selectedIDs));
-      }
+          chapters[chapters.length - 1].on('startEditing', function() {
+              // Store walkthrough progress..
+              progress.push('startEditing');
+              context.storage('walkthrough_progress', uniq(progress).join(';'));
 
+              // Store if walkthrough is completed..
+              var incomplete = difference(chapterFlow, progress);
+              if (!incomplete.length) {
+                  context.storage('walkthrough_completed', 'yes');
+              }
 
-      function selectionList(selection$$1) {
-          selection$$1.classed('selection-list-pane', true);
+              curtain.remove();
+              navwrap.remove();
+              d3_selectAll('#map .layer-background').style('opacity', opacity);
+              d3_selectAll('button.sidebar-toggle').classed('disabled', false);
+              if (osm) { osm.toggle(true).reset().caches(caches); }
+              context.history().reset().merge(values$1(baseEntities));
+              context.background().baseLayerSource(background);
+              overlays.forEach(function(d) { context.background().toggleOverlayLayer(d); });
+              if (history) { context.history().fromJSON(history, false); }
+              context.map().centerZoom(center, zoom);
+              window.location.replace(hash);
+              services.geocoder.countryCode = countryCode;
+              context.inIntro(false);
+          });
 
-          var header = selection$$1
+          var navwrap = selection
               .append('div')
-              .attr('class', 'header fillL cf');
+              .attr('class', 'intro-nav-wrap fillD');
 
-          header
-              .append('h3')
-              .text(t('inspector.multiselect'));
+          navwrap
+              .append('svg')
+              .attr('class', 'intro-nav-wrap-logo')
+              .append('use')
+              .attr('xlink:href', '#iD-logo-walkthrough');
 
-          var listWrap = selection$$1
+          var buttonwrap = navwrap
               .append('div')
-              .attr('class', 'inspector-body');
+              .attr('class', 'joined')
+              .selectAll('button.chapter');
 
-          var list = listWrap
-              .append('div')
-              .attr('class', 'feature-list cf');
+          var buttons = buttonwrap
+              .data(chapters)
+              .enter()
+              .append('button')
+              .attr('class', function(d, i) { return 'chapter chapter-' + chapterFlow[i]; })
+              .on('click', enterChapter);
 
-          context.history().on('change.selection-list', drawList);
-          drawList();
+          buttons
+              .append('span')
+              .text(function(d) { return t(d.title); });
 
+          buttons
+              .append('span')
+              .attr('class', 'status')
+              .call(svgIcon((textDirection === 'rtl' ? '#iD-icon-backward' : '#iD-icon-forward'), 'inline'));
 
-          function drawList() {
-              var entities = selectedIDs
-                  .map(function(id) { return context.hasEntity(id); })
-                  .filter(function(entity) { return entity; });
+          enterChapter(chapters[0]);
 
-              var items = list.selectAll('.feature-list-item')
-                  .data(entities, osmEntity$$1.key);
 
-              items.exit()
-                  .remove();
+          function enterChapter(newChapter) {
+              if (_currChapter) { _currChapter.exit(); }
+              context.enter(modeBrowse(context));
 
-              // Enter
-              var enter = items.enter()
-                  .append('div')
-                  .attr('class', 'feature-list-item')
-                  .on('click', selectEntity);
+              _currChapter = newChapter;
+              _currChapter.enter();
 
-              enter
-                  .each(function(d) {
-                  // highlight the feature in the map while hovering on the list item
-                  select(this).on('mouseover', function() {
-                      utilHighlightEntity(d.id, true, context);
-                  });
-                  select(this).on('mouseout', function() {
-                      utilHighlightEntity(d.id, false, context);
+              buttons
+                  .classed('next', false)
+                  .classed('active', function(d) {
+                      return d.title === _currChapter.title;
                   });
-              });
-
-              var label = enter
-                  .append('button')
-                  .attr('class', 'label');
-
-              enter
-                  .append('button')
-                  .attr('class', 'close')
-                  .on('click', deselectEntity)
-                  .call(svgIcon('#iD-icon-close'));
-
-              label
-                  .append('span')
-                  .attr('class', 'entity-geom-icon')
-                  .call(svgIcon('', 'pre-text'));
-
-              label
-                  .append('span')
-                  .attr('class', 'entity-type');
-
-              label
-                  .append('span')
-                  .attr('class', 'entity-name');
+          }
+      }
 
-              // Update
-              items = items.merge(enter);
 
-              items.selectAll('.entity-geom-icon use')
-                  .attr('href', function() {
-                      var entity = this.parentNode.parentNode.__data__;
-                      return '#iD-icon-' + context.geometry(entity.id);
-                  });
+      return intro;
+  }
 
-              items.selectAll('.entity-type')
-                  .text(function(entity) { return context.presets().match(entity, context.graph()).name(); });
+  function uiTooltipHtml(text, key, heading) {
+      var s = '';
 
-              items.selectAll('.entity-name')
-                  .text(function(entity) { return utilDisplayName(entity); });
-          }
+      if (heading) {
+          s += '<div class="tooltip-heading"><span>' + heading + '</span></div>';
+      }
+      if (text) {
+          s += '<div class="tooltip-text"><span>' + text + '</span></div>';
+      }
+      if (key) {
+          s += '<div class="keyhint-wrap"><span>' + t('tooltip_keyhint') + '</span>' +
+              '<span class="keyhint">' + key + '</span></div>';
       }
 
-      return selectionList;
+      return s;
   }
 
-  function uiSourceSwitch(context) {
-      var keys;
+  function uiIssues(context) {
+      var key = t('issues.key');
+      //var _featureApplicabilityList = d3_select(null);
+      var _errorsList = select(null);
+      var _warningsList = select(null);
+      var _pane = select(null);
+      var _toggleButton = select(null);
+      var _shown = false;
 
+      context.validator().on('reload.issues_pane', update);
 
-      function click() {
-          event.preventDefault();
+      /*function renderIssuesOptions(selection) {
+          var container = selection.selectAll('.issues-options-container')
+              .data([0]);
 
-          var osm = context.connection();
-          if (!osm) return;
+          container = container.enter()
+              .append('div')
+              .attr('class', 'issues-options-container')
+              .merge(container);
 
-          if (context.inIntro()) return;
+          _featureApplicabilityList = container.selectAll('.feature-applicability-list')
+              .data([0]);
 
-          if (context.history().hasChanges() &&
-              !window.confirm(t('source_switch.lose_changes'))) return;
+          _featureApplicabilityList = _featureApplicabilityList.enter()
+              .append('ul')
+              .attr('class', 'layer-list feature-applicability-list')
+              .merge(_featureApplicabilityList);
 
-          var isLive = select(this)
-              .classed('live');
+          updateFeatureApplicabilityList();
+      }*/
 
-          isLive = !isLive;
-          context.enter(modeBrowse(context));
-          context.history().clearSaved();          // remove saved history
-          context.flush();                         // remove stored data
+      function addIconBadge(selection) {
+          var d = 10;
+          selection.selectAll('svg.icon-badge')
+              .data([0])
+              .enter()
+              .append('svg')
+              .attr('viewbox', '0 0 ' + d + ' ' + d)
+              .attr('class', 'icon-badge')
+              .append('circle')
+              .attr('cx', d / 2)
+              .attr('cy', d / 2)
+              .attr('r', (d / 2) - 1)
+              .attr('fill', 'currentColor');
+      }
+
+      function renderErrorsList(selection) {
+          _errorsList = selection.selectAll('.errors-list')
+              .data([0]);
 
-          select(this)
-              .text(isLive ? t('source_switch.live') : t('source_switch.dev'))
-              .classed('live', isLive);
+          _errorsList = _errorsList.enter()
+              .append('ul')
+              .attr('class', 'layer-list errors-list issues-list')
+              .merge(_errorsList);
 
-          osm.switch(isLive ? keys[0] : keys[1]);  // switch connection (warning: dispatches 'change' event)
+          updateErrorsList();
       }
 
-      var sourceSwitch = function(selection$$1) {
-          selection$$1
-              .append('a')
-              .attr('href', '#')
-              .text(t('source_switch.live'))
-              .classed('live', true)
-              .attr('tabindex', -1)
-              .on('click', click);
-      };
+      function renderWarningsList(selection) {
+          _warningsList = selection.selectAll('.warnings-list')
+              .data([0]);
 
+          _warningsList = _warningsList.enter()
+              .append('ul')
+              .attr('class', 'layer-list warnings-list issues-list')
+              .merge(_warningsList);
 
-      sourceSwitch.keys = function(_) {
-          if (!arguments.length) return keys;
-          keys = _;
-          return sourceSwitch;
-      };
+          updateWarningsList();
+      }
 
 
-      return sourceSwitch;
-  }
+      function drawIssuesList(selection, issues) {
+          var items = selection.selectAll('li')
+              .data(issues, function(d) { return d.id(); });
 
-  function uiSuccess$$1(context) {
-      var MAXEVENTS = 2;
+          // Exit
+          items.exit()
+              .remove();
 
-      // All else being equal, rank more "social" communities higher
-      // (anything not in this list receives no adjustment)
-      var COMMUNITYRANK = {
-          'meetup': +5,
-          'slack': +4,
-          'facebook': +3,
-          'reddit': +2,
-          'forum': -2,
-          'mailinglist': -3,
-          'irc': -4
-      };
+          // Enter
+          var itemsEnter = items.enter()
+              .append('li')
+              .attr('class', function (d) { return 'issue severity-' + d.severity; })
+              .on('click', function(d) {
+                  var extent = d.extent(context.graph());
+                  if (extent) {
+                      var msec = 0;
+                      var view = context.map().trimmedExtent();
+                      var zoom = context.map().zoom();
+
+                      // make sure user can see the issue
+                      if (!view.contains(extent) || zoom < 19) {
+                          msec = 250;
+                          context.map().centerZoomEase(extent.center(), Math.max(zoom, 19), msec);
+                      }
 
-      var detected = utilDetect();
-      var dispatch$$1 = dispatch('cancel');
-      var _changeset;
-      var _location;
+                      // select the first entity
+                      if (d.entities && d.entities.length) {
+                          window.setTimeout(function() {
+                              var ids = d.entities.map(function(e) { return e.id; });
+                              context.enter(modeSelect(context, [ids[0]]));
+                              utilHighlightEntities(ids, true, context);
+                          }, msec);
+                      }
+                  }
+              })
+              .on('mouseover', function(d) {
+                  var ids = d.entities.map(function(e) { return e.id; });
+                  utilHighlightEntities(ids, true, context);
+              })
+              .on('mouseout', function(d) {
+                  var ids = d.entities.map(function(e) { return e.id; });
+                  utilHighlightEntities(ids, false, context);
+              });
 
 
-      // string-to-date parsing in JavaScript is weird
-      function parseEventDate(when) {
-          if (!when) return;
+          var messagesEnter = itemsEnter
+              .append('button')
+              .attr('class', 'message');
 
-          var raw = when.trim();
-          if (!raw) return;
+          messagesEnter
+              .call(tooltip()
+                  .html(true)
+                  .title(function(d) { return uiTooltipHtml(d.tooltip); })
+                  .placement('top')
+              );
 
-          if (!/Z$/.test(raw)) {    // if no trailing 'Z', add one
-              raw += 'Z';           // this forces date to be parsed as a UTC date
-          }
+          messagesEnter
+              .append('span')
+              .attr('class', 'issue-icon')
+              .call(svgIcon('', 'pre-text'));
 
-          var parsed = new Date(raw);
-          return new Date(parsed.toUTCString().substr(0, 25));  // convert to local timezone
-      }
+          messagesEnter
+              .append('span')
+              .attr('class', 'issue-text');
 
 
-      function success(selection$$1) {
-          var header = selection$$1
-              .append('div')
-              .attr('class', 'header fillL');
+          // Update
+          items = items
+              .merge(itemsEnter);
 
-          header
-              .append('button')
-              .attr('class', 'fr')
-              .on('click', function() { dispatch$$1.call('cancel'); })
-              .call(svgIcon('#iD-icon-close'));
+          items.select('.issue-icon svg use')     // propagate bound data
+              .attr('href', function(d) {
+                  return '#iD-icon-' + (d.severity === 'warning' ? 'alert' : 'error');
+              });
 
-          header
-              .append('h3')
-              .text(t('success.just_edited'));
+          items.select('.issue-text')     // propagate bound data
+              .text(function(d) { return d.message; });
+      }
 
-          var body = selection$$1
-              .append('div')
-              .attr('class', 'body save-success fillL');
 
-          var summary = body
+      function renderNoIssuesBox(selection) {
+          selection
               .append('div')
-              .attr('class', 'save-summary');
+              .call(svgIcon('#iD-icon-apply', 'pre-text'));
 
-          summary
-              .append('h3')
-              .text(t('success.thank_you' + (_location ? '_location' : ''), { where: _location }));
+          var noIssuesMessage = selection
+              .append('span');
 
-          summary
-              .append('p')
-              .text(t('success.help_html'))
-              .append('a')
-              .attr('class', 'link-out')
-              .attr('target', '_blank')
-              .attr('tabindex', -1)
-              .attr('href', t('success.help_link_url'))
-              .call(svgIcon('#iD-icon-out-link', 'inline'))
-              .append('span')
-              .text(t('success.help_link_text'));
+          noIssuesMessage
+              .append('strong')
+              .text(t('issues.no_issues.message'));
 
-          var osm = context.connection();
-          if (!osm) return;
+          noIssuesMessage
+              .append('br');
 
-          var changesetURL = osm.changesetURL(_changeset.id);
+          noIssuesMessage
+              .append('span')
+              .text(t('issues.no_issues.info'));
+      }
 
-          var table = summary
-              .append('table')
-              .attr('class', 'summary-table');
+      /*
+      function showsFeatureApplicability(d) {
+          return context.validator().getFeatureApplicability() === d;
+      }
 
-          var row = table
-              .append('tr')
-              .attr('class', 'summary-row');
+      function setFeatureApplicability(d) {
+          context.validator().setFeatureApplicability(d);
+          update();
+      }
 
-          row
-              .append('td')
-              .attr('class', 'cell-icon summary-icon')
-              .append('a')
-              .attr('target', '_blank')
-              .attr('href', changesetURL)
-              .append('svg')
-              .attr('class', 'logo-small')
-              .append('use')
-              .attr('xlink:href', '#iD-logo-osm');
+      function updateFeatureApplicabilityList() {
+          _featureApplicabilityList
+              .call(
+                  drawListItems,
+                  context.validator().featureApplicabilityOptions,
+                  'radio',
+                  'features_to_validate',
+                  setFeatureApplicability,
+                  showsFeatureApplicability
+              );
+      }*/
 
-          var summaryDetail = row
-              .append('td')
-              .attr('class', 'cell-detail summary-detail');
+      function updateErrorsList() {
+          var errors = context.validator().getErrors();
+          _errorsList
+              .call(drawIssuesList, errors);
+      }
 
-          summaryDetail
-              .append('a')
-              .attr('class', 'cell-detail summary-view-on-osm')
-              .attr('target', '_blank')
-              .attr('href', changesetURL)
-              .text(t('success.view_on_osm'));
 
-          summaryDetail
-              .append('div')
-              .text(t('success.changeset_id', { changeset_id: _changeset.id }));
+      function updateWarningsList() {
+          var warnings = context.validator().getWarnings();
+          _warningsList
+              .call(drawIssuesList, warnings);
+      }
 
 
-          // Gather community polygon IDs intersecting the map..
-          var matchFeatures = data.community.query(context.map().center(), true) || [];
-          var matchIDs = matchFeatures.map(function(feature) { return feature.id; });
+      function update() {
+          var errors = context.validator().getErrors();
+          var warnings = context.validator().getWarnings();
 
-          // Gather community resources that are either global or match a polygon.
-          var matchResources = filter(data.community.resources, function(v) {
-              return !v.featureId || matchIDs.indexOf(v.featureId) !== -1;
-          });
+          _toggleButton.selectAll('.icon-badge')
+              .classed('error', (errors.length > 0))
+              .classed('warning', (errors.length === 0 && warnings.length > 0))
+              .classed('hide', (errors.length === 0 && warnings.length === 0));
 
-          if (matchResources.length) {
-              // sort by size ascending, then by community rank
-              matchResources.sort(function(a, b) {
-                  var aSize = Infinity;
-                  var bSize = Infinity;
-                  var aRank = COMMUNITYRANK[a.type] || 0;
-                  var bRank = COMMUNITYRANK[b.type] || 0;
+          _pane.select('.issues-errors')
+              .classed('hide', errors.length === 0);
 
-                  if (a.featureId) {
-                      aSize = data.community.features[a.featureId].properties.area;
-                  }
-                  if (b.featureId) {
-                      bSize = data.community.features[b.featureId].properties.area;
-                  }
+          if (errors.length > 0) {
+              _pane.select('.hide-toggle-issues_errors .hide-toggle-text')
+                  .text(t('issues.errors.list_title', { count: errors.length }));
+              if (!_pane.select('.disclosure-wrap-issues_errors').classed('hide')) {
+                  updateErrorsList();
+              }
+          }
 
-                  return aSize < bSize ? -1 : aSize > bSize ? 1 : bRank - aRank;
-              });
+          _pane.select('.issues-warnings')
+              .classed('hide', warnings.length === 0);
 
-              body
-                  .call(showCommunityLinks, matchResources);
+          if (warnings.length > 0) {
+              _pane.select('.hide-toggle-issues_warnings .hide-toggle-text')
+                  .text(t('issues.warnings.list_title', { count: warnings.length }));
+              if (!_pane.select('.disclosure-wrap-issues_warnings').classed('hide')) {
+                  updateWarningsList();
+              }
           }
-      }
 
+          _pane.select('.issues-none')
+              .classed('hide', warnings.length > 0 || errors.length > 0);
 
-      function showCommunityLinks(selection$$1, matchResources) {
-          var communityLinks = selection$$1
-              .append('div')
-              .attr('class', 'save-communityLinks');
+          //if (!_pane.select('.disclosure-wrap-issues_options').classed('hide')) {
+          //    updateFeatureApplicabilityList();
+          //}
+      }
 
-          communityLinks
-              .append('h3')
-              .text(t('success.like_osm'));
+      var paneTooltip = tooltip()
+          .placement((textDirection === 'rtl') ? 'right' : 'left')
+          .html(true)
+          .title(uiTooltipHtml(t('issues.title'), key));
 
-          var table = communityLinks
-              .append('table')
-              .attr('class', 'community-table');
+      uiIssues.hidePane = function() {
+          uiIssues.setVisible(false);
+      };
 
-          var row = table.selectAll('.community-row')
-              .data(matchResources);
+      uiIssues.togglePane = function() {
+          if (event) event.preventDefault();
+          paneTooltip.hide(_toggleButton);
+          uiIssues.setVisible(!_toggleButton.classed('active'));
+      };
 
-          var rowEnter = row.enter()
-              .append('tr')
-              .attr('class', 'community-row');
+      uiIssues.setVisible = function(show) {
+          if (show !== _shown) {
+              _toggleButton.classed('active', show);
+              _shown = show;
 
-          rowEnter
-              .append('td')
-              .attr('class', 'cell-icon community-icon')
-              .append('a')
-              .attr('target', '_blank')
-              .attr('href', function(d) { return d.url; })
-              .append('svg')
-              .attr('class', 'logo-small')
-              .append('use')
-              .attr('xlink:href', function(d) { return '#community-' + d.type; });
+              if (show) {
+                  uiBackground.hidePane();
+                  uiHelp.hidePane();
+                  uiMapData.hidePane();
+                  update();
 
-          var communityDetail = rowEnter
-              .append('td')
-              .attr('class', 'cell-detail community-detail');
+                  _pane
+                      .style('display', 'block')
+                      .style('right', '-300px')
+                      .transition()
+                      .duration(200)
+                      .style('right', '0px');
 
-          communityDetail
-              .each(showCommunityDetails);
+              } else {
+                  _pane
+                      .style('display', 'block')
+                      .style('right', '0px')
+                      .transition()
+                      .duration(200)
+                      .style('right', '-300px')
+                      .on('end', function() {
+                          select(this).style('display', 'none');
+                      });
+              }
+          }
+      };
 
-          communityLinks
-              .append('div')
-              .attr('class', 'community-missing')
-              .text(t('success.missing'))
-              .append('a')
-              .attr('class', 'link-out')
-              .attr('target', '_blank')
+      uiIssues.renderToggleButton = function(selection) {
+
+          _toggleButton = selection
+              .append('button')
               .attr('tabindex', -1)
-              .call(svgIcon('#iD-icon-out-link', 'inline'))
-              .attr('href', 'https://github.com/osmlab/osm-community-index/issues')
-              .append('span')
-              .text(t('success.tell_us'));
-      }
+              .on('click', uiIssues.togglePane)
+              .call(svgIcon('#iD-icon-alert', 'light'))
+              .call(addIconBadge)
+              .call(paneTooltip);
 
+      };
 
-      function showCommunityDetails(d) {
-          var selection$$1 = select(this);
-          var communityID = d.id;
-          var replacements = {
-              url: linkify(d.url),
-              signupUrl: linkify(d.signupUrl || d.url)
-          };
+      uiIssues.renderPane = function(selection) {
 
-          selection$$1
+          _pane = selection
               .append('div')
-              .attr('class', 'community-name')
-              .append('a')
-              .attr('target', '_blank')
-              .attr('href', d.url)
-              .text(t('community.' + d.id + '.name'));
-
-          var descriptionHTML = t('community.' + d.id + '.description', replacements);
-
-          if (d.type === 'reddit') {   // linkify subreddits  #4997
-              descriptionHTML = descriptionHTML
-                  .replace(/(\/r\/\w*\/*)/i, function(match) { return linkify(d.url, match); });
-          }
+              .attr('class', 'fillL map-pane issues-pane hide');
 
-          selection$$1
+          var heading = _pane
               .append('div')
-              .attr('class', 'community-description')
-              .html(descriptionHTML);
+              .attr('class', 'pane-heading');
 
-          if (d.extendedDescription || (d.languageCodes && d.languageCodes.length)) {
-              selection$$1
-                  .append('div')
-                  .call(uiDisclosure(context, 'community-more-' + d.id, false)
-                      .expanded(false)
-                      .updatePreference(false)
-                      .title(t('success.more'))
-                      .content(showMore)
-                  );
-          }
+          heading
+              .append('h2')
+              .text(t('issues.title'));
 
-          var nextEvents = (d.events || [])
-              .map(function(event$$1) {
-                  event$$1.date = parseEventDate(event$$1.when);
-                  return event$$1;
-              })
-              .filter(function(event$$1) {               // date is valid and future (or today)
-                  var t$$1 = event$$1.date.getTime();
-                  var now = (new Date()).setHours(0,0,0,0);
-                  return !isNaN(t$$1) && t$$1 >= now;
-              })
-              .sort(function(a, b) {                  // sort by date ascending
-                  return a.date < b.date ? -1 : a.date > b.date ? 1 : 0;
-              })
-              .slice(0, MAXEVENTS);                   // limit number of events shown
+          heading
+              .append('button')
+              .on('click', uiIssues.hidePane)
+              .call(svgIcon('#iD-icon-close'));
 
-          if (nextEvents.length) {
-              selection$$1
-                  .append('div')
-                  .call(uiDisclosure(context, 'community-events-' + d.id, false)
-                      .expanded(false)
-                      .updatePreference(false)
-                      .title(t('success.events'))
-                      .content(showNextEvents)
-                  )
-                  .select('.hide-toggle')
-                  .append('span')
-                  .attr('class', 'badge-text')
-                  .text(nextEvents.length);
-          }
+          var content = _pane
+              .append('div')
+              .attr('class', 'pane-content');
 
+          content
+              .append('div')
+              .attr('class', 'issues-none')
+              .call(renderNoIssuesBox);
 
-          function showMore(selection$$1) {
-              var more = selection$$1
-                  .append('div')
-                  .attr('class', 'community-more');
+          // errors
+          content
+              .append('div')
+              .attr('class', 'issues-errors')
+              .call(uiDisclosure(context, 'issues_errors', true)
+                  .content(renderErrorsList)
+              );
 
-              if (d.extendedDescription) {
-                  more
-                      .append('div')
-                      .attr('class', 'community-extended-description')
-                      .html(t('community.' + d.id + '.extendedDescription', replacements));
-              }
+          // warnings
+          content
+              .append('div')
+              .attr('class', 'issues-warnings')
+              .call(uiDisclosure(context, 'issues_warnings', true)
+                  .content(renderWarningsList)
+              );
 
-              if (d.languageCodes && d.languageCodes.length) {
-                  more
-                      .append('div')
-                      .attr('class', 'community-languages')
-                      .text(t('success.languages', { languages: d.languageCodes.join(', ') }));
-              }
-          }
+          // options
+          /*
+          // add this back to core.yaml when re-enabling the options
+          options:
+            title: Options
+          features_to_validate:
+            edited:
+              description: Edited features only
+              tooltip: Flag issues with features you create and modify
+            all:
+              description: All features
+              tooltip: Flag issues with all nearby features
 
+          content
+              .append('div')
+              .attr('class', 'issues-options')
+              .call(uiDisclosure(context, 'issues_options', true)
+                  .title(t('issues.options.title'))
+                  .content(renderIssuesOptions)
+              );
+          */
+          update();
 
-          function showNextEvents(selection$$1) {
-              var events = selection$$1
-                  .append('div')
-                  .attr('class', 'community-events');
+          context.keybinding()
+              .on(key, uiIssues.togglePane);
+      };
 
-              var item = events.selectAll('.community-event')
-                  .data(nextEvents);
+      return uiIssues;
+  }
 
-              var itemEnter = item.enter()
-                  .append('div')
-                  .attr('class', 'community-event');
+  function uiConfirm(selection) {
+      var modalSelection = uiModal(selection);
 
-              itemEnter
-                  .append('div')
-                  .attr('class', 'community-event-name')
-                  .append('a')
-                  .attr('target', '_blank')
-                  .attr('href', function(d) { return d.url; })
-                  .text(function(d) {
-                      var name = d.name;
-                      if (d.i18n && d.id) {
-                          name = t('community.' + communityID + '.events.' + d.id + '.name', { default: name });
-                      }
-                      return name;
-                  });
+      modalSelection.select('.modal')
+          .classed('modal-alert', true);
 
-              itemEnter
-                  .append('div')
-                  .attr('class', 'community-event-when')
-                  .text(function(d) {
-                      var options = {
-                          weekday: 'short', day: 'numeric', month: 'short', year: 'numeric'
-                      };
-                      if (d.date.getHours() || d.date.getMinutes()) {   // include time if it has one
-                          options.hour = 'numeric';
-                          options.minute = 'numeric';
-                      }
-                      return d.date.toLocaleString(detected.locale, options);
-                  });
+      var section = modalSelection.select('.content');
 
-              itemEnter
-                  .append('div')
-                  .attr('class', 'community-event-where')
-                  .text(function(d) {
-                      var where = d.where;
-                      if (d.i18n && d.id) {
-                          where = t('community.' + communityID + '.events.' + d.id + '.where', { default: where });
-                      }
-                      return where;
-                  });
+      section.append('div')
+          .attr('class', 'modal-section header');
 
-              itemEnter
-                  .append('div')
-                  .attr('class', 'community-event-description')
-                  .text(function(d) {
-                      var description = d.description;
-                      if (d.i18n && d.id) {
-                          description = t('community.' + communityID + '.events.' + d.id + '.description', { default: description });
-                      }
-                      return description;
-                  });
-          }
+      section.append('div')
+          .attr('class', 'modal-section message-text');
 
+      var buttons = section.append('div')
+          .attr('class', 'modal-section buttons cf');
 
-          function linkify(url, text) {
-              text = text || url;
-              return '<a target="_blank" href="' + url + '">' + text + '</a>';
-          }
-      }
 
+      modalSelection.okButton = function() {
+          buttons
+              .append('button')
+              .attr('class', 'button ok-button action')
+              .on('click.confirm', function() {
+                  modalSelection.remove();
+              })
+              .text(t('confirm.okay'))
+              .node()
+              .focus();
 
-      success.changeset = function(_) {
-          if (!arguments.length) return _changeset;
-          _changeset = _;
-          return success;
+          return modalSelection;
       };
 
 
-      success.location = function(_) {
-          if (!arguments.length) return _location;
-          _location = _;
-          return success;
-      };
+      return modalSelection;
+  }
 
+  function uiSettingsCustomData(context) {
+      var dispatch$1 = dispatch('change');
 
-      return utilRebind(success, dispatch$$1, 'on');
-  }
+      function render(selection) {
+          var dataLayer = context.layers().layer('data');
+          var _origSettings = {
+              fileList: (dataLayer && dataLayer.fileList()) || null,
+              url: context.storage('settings-custom-data-url')
+          };
+          var _currSettings = cloneDeep(_origSettings);
 
-  function uiViewOnKeepRight() {
-      var _error;   // a keepright error
+          // var example = 'https://{switch:a,b,c}.tile.openstreetmap.org/{zoom}/{x}/{y}.png';
+          var modal = uiConfirm(selection).okButton();
 
+          modal
+              .classed('settings-modal settings-custom-data', true);
 
-      function viewOnKeepRight(selection) {
-          var url;
-          if (services.keepRight && (_error instanceof krError)) {
-              url = services.keepRight.errorURL(_error);
-          }
+          modal.select('.modal-section.header')
+              .append('h3')
+              .text(t('settings.custom_data.header'));
 
-          var link = selection.selectAll('.view-on-keepRight')
-              .data(url ? [url] : []);
 
-          // exit
-          link.exit()
-              .remove();
+          var textSection = modal.select('.modal-section.message-text');
 
-          // enter
-          var linkEnter = link.enter()
-              .append('a')
-              .attr('class', 'view-on-keepRight')
-              .attr('target', '_blank')
-              .attr('href', function(d) { return d; })
-              .call(svgIcon('#iD-icon-out-link', 'inline'));
+          textSection
+              .append('pre')
+              .attr('class', 'instructions-file')
+              .text(t('settings.custom_data.file.instructions'));
 
-          linkEnter
-              .append('span')
-              .text(t('inspector.view_on_keepRight'));
-      }
+          textSection
+              .append('input')
+              .attr('class', 'field-file')
+              .attr('type', 'file')
+              .property('files', _currSettings.fileList)  // works for all except IE11
+              .on('change', function() {
+                  var files = event.target.files;
+                  if (files && files.length) {
+                      _currSettings.url = '';
+                      textSection.select('.field-url').property('value', '');
+                      _currSettings.fileList = files;
+                  } else {
+                      _currSettings.fileList = null;
+                  }
+              });
 
+          textSection
+              .append('h4')
+              .text(t('settings.custom_data.or'));
 
-      viewOnKeepRight.what = function(val) {
-          if (!arguments.length) return _error;
-          _error = val;
-          return viewOnKeepRight;
-      };
+          textSection
+              .append('pre')
+              .attr('class', 'instructions-url')
+              .text(t('settings.custom_data.url.instructions'));
 
-      return viewOnKeepRight;
-  }
+          textSection
+              .append('textarea')
+              .attr('class', 'field-url')
+              .attr('placeholder', t('settings.custom_data.url.placeholder'))
+              .call(utilNoAuto)
+              .property('value', _currSettings.url);
 
-  function behaviorCopy(context) {
 
-      function groupEntities(ids, graph) {
-          var entities = ids.map(function (id) { return graph.entity(id); });
-          return assignIn({relation: [], way: [], node: []},
-              groupBy(entities, function(entity) { return entity.type; }));
-      }
+          // insert a cancel button
+          var buttonSection = modal.select('.modal-section.buttons');
 
+          buttonSection
+              .insert('button', '.ok-button')
+              .attr('class', 'button cancel-button secondary-action')
+              .text(t('confirm.cancel'));
 
-      function getDescendants(id, graph, descendants) {
-          var entity = graph.entity(id);
-          var children;
 
-          descendants = descendants || {};
+          buttonSection.select('.cancel-button')
+              .on('click.cancel', clickCancel);
+
+          buttonSection.select('.ok-button')
+              .attr('disabled', isSaveDisabled)
+              .on('click.save', clickSave);
+
 
-          if (entity.type === 'relation') {
-              children = map$3(entity.members, 'id');
-          } else if (entity.type === 'way') {
-              children = entity.nodes;
-          } else {
-              children = [];
+          function isSaveDisabled() {
+              return null;
           }
 
-          for (var i = 0; i < children.length; i++) {
-              if (!descendants[children[i]]) {
-                  descendants[children[i]] = true;
-                  descendants = getDescendants(children[i], graph, descendants);
-              }
+
+          // restore the original url
+          function clickCancel() {
+              textSection.select('.field-url').property('value', _origSettings.url);
+              context.storage('settings-custom-data-url', _origSettings.url);
+              this.blur();
+              modal.close();
           }
 
-          return descendants;
-      }
+          // accept the current url
+          function clickSave() {
+              _currSettings.url = textSection.select('.field-url').property('value').trim();
 
+              // one or the other but not both
+              if (_currSettings.url) { _currSettings.fileList = null; }
+              if (_currSettings.fileList) { _currSettings.url = ''; }
 
-      function getSelectionText() {
-          return window.getSelection().toString();
+              context.storage('settings-custom-data-url', _currSettings.url);
+              this.blur();
+              modal.close();
+              dispatch$1.call('change', this, _currSettings);
+          }
       }
 
+      return utilRebind(render, dispatch$1, 'on');
+  }
 
-      function doCopy() {
-          if (!getSelectionText()) {
-              event.preventDefault();
-          }
+  function uiMapData(context) {
+      var key = t('map_data.key');
+      var features = context.features().keys();
+      var layers = context.layers();
+      var fills = ['wireframe', 'partial', 'full'];
 
-          var graph = context.graph();
-          var selected = groupEntities(context.selectedIDs(), graph);
-          var canCopy = [];
-          var skip = {};
-          var entity;
-          var i;
+      var settingsCustomData = uiSettingsCustomData(context)
+          .on('change', customChanged);
 
-          for (i = 0; i < selected.relation.length; i++) {
-              entity = selected.relation[i];
-              if (!skip[entity.id] && entity.isComplete(graph)) {
-                  canCopy.push(entity.id);
-                  skip = getDescendants(entity.id, graph, skip);
-              }
-          }
-          for (i = 0; i < selected.way.length; i++) {
-              entity = selected.way[i];
-              if (!skip[entity.id]) {
-                  canCopy.push(entity.id);
-                  skip = getDescendants(entity.id, graph, skip);
-              }
-          }
-          for (i = 0; i < selected.node.length; i++) {
-              entity = selected.node[i];
-              if (!skip[entity.id]) {
-                  canCopy.push(entity.id);
-              }
-          }
+      var _pane = select(null), _toggleButton = select(null);
 
-          context.copyIDs(canCopy);
-      }
+      var _fillSelected = context.storage('area-fill') || 'partial';
+      var _shown = false;
+      var _dataLayerContainer = select(null);
+      var _fillList = select(null);
+      var _featureList = select(null);
+      var _QAList = select(null);
 
 
-      function behavior() {
-          context.keybinding().on(uiCmd('⌘C'), doCopy);
-          return behavior;
+      function showsFeature(d) {
+          return context.features().enabled(d);
       }
 
-      behavior.off = function() {
-          context.keybinding().off(uiCmd('⌘C'));
-      };
-
-
-      return behavior;
-  }
 
-  /*
-      `behaviorDrag` is like `d3_behavior.drag`, with the following differences:
+      function autoHiddenFeature(d) {
+          if (d.type === 'kr_error') return context.errors().autoHidden(d);
+          return context.features().autoHidden(d);
+      }
 
-      * The `origin` function is expected to return an [x, y] tuple rather than an
-        {x, y} object.
-      * The events are `start`, `move`, and `end`.
-        (https://github.com/mbostock/d3/issues/563)
-      * The `start` event is not dispatched until the first cursor movement occurs.
-        (https://github.com/mbostock/d3/pull/368)
-      * The `move` event has a `point` and `delta` [x, y] tuple properties rather
-        than `x`, `y`, `dx`, and `dy` properties.
-      * The `end` event is not dispatched if no movement occurs.
-      * An `off` function is available that unbinds the drag's internal event handlers.
-   */
 
-  function behaviorDrag() {
-      var dispatch$$1 = dispatch('start', 'move', 'end');
-      var _origin = null;
-      var _selector = '';
-      var _event;
-      var _target;
-      var _surface;
+      function clickFeature(d) {
+          context.features().toggle(d);
+          update();
+      }
 
 
-      var d3_event_userSelectProperty = utilPrefixCSSProperty('UserSelect');
-      var d3_event_userSelectSuppress = function() {
-              var selection$$1 = selection();
-              var select$$1 = selection$$1.style(d3_event_userSelectProperty);
-              selection$$1.style(d3_event_userSelectProperty, 'none');
-              return function() {
-                  selection$$1.style(d3_event_userSelectProperty, select$$1);
-              };
-          };
+      function showsQA(d) {
+          var QAKeys = [d];
+          var QALayers = layers.all().filter(function(obj) { return QAKeys.indexOf(obj.id) !== -1; });
+          var data = QALayers.filter(function(obj) { return obj.layer.supported(); });
 
+          function layerSupported(d) {
+              return d.layer && d.layer.supported();
+          }
+          function layerEnabled(d) {
+              return layerSupported(d) && d.layer.enabled();
+          }
 
-      function d3_eventCancel() {
-          event.stopPropagation();
-          event.preventDefault();
+          return layerEnabled(data[0]);
       }
 
 
-      function eventOf(thiz, argumentz) {
-          return function(e1) {
-              e1.target = behavior;
-              customEvent(e1, dispatch$$1.apply, dispatch$$1, [e1.type, thiz, argumentz]);
-          };
+      function showsFill(d) {
+          return _fillSelected === d;
       }
 
 
-      function dragstart() {
-          _target = this;
-          _event = eventOf(_target, arguments);
+      function setFill(d) {
+          fills.forEach(function(opt) {
+              context.surface().classed('fill-' + opt, Boolean(opt === d));
+          });
 
-          var eventTarget = event.target;
-          var touchId = event.touches ? event.changedTouches[0].identifier : null;
-          var offset;
-          var startOrigin = point$$1();
-          var started = false;
-          var selectEnable = d3_event_userSelectSuppress(touchId !== null ? 'drag-' + touchId : 'drag');
+          _fillSelected = d;
+          context.storage('area-fill', d);
+          if (d !== 'wireframe') {
+              context.storage('area-fill-toggle', d);
+          }
+          update();
+      }
 
-          select(window)
-              .on(touchId !== null ? 'touchmove.drag-' + touchId : 'mousemove.drag', dragmove)
-              .on(touchId !== null ? 'touchend.drag-' + touchId : 'mouseup.drag', dragend, true);
 
-          if (_origin) {
-              offset = _origin.apply(_target, arguments);
-              offset = [offset[0] - startOrigin[0], offset[1] - startOrigin[1]];
-          } else {
-              offset = [0, 0];
+      function showsLayer(which) {
+          var layer = layers.layer(which);
+          if (layer) {
+              return layer.enabled();
           }
+          return false;
+      }
 
-          if (touchId === null) {
-              event.stopPropagation();
-          }
 
+      function setLayer(which, enabled) {
+          var layer = layers.layer(which);
+          if (layer) {
+              layer.enabled(enabled);
 
-          function point$$1() {
-              var p = _surface || _target.parentNode;
-              return touchId !== null ? d3_touches(p).filter(function(p) {
-                  return p.identifier === touchId;
-              })[0] : mouse(p);
+              if (!enabled && (which === 'osm' || which === 'notes')) {
+                  context.enter(modeBrowse(context));
+              }
+
+              update();
           }
+      }
 
 
-          function dragmove() {
-              var p = point$$1();
-              var dx = p[0] - startOrigin[0];
-              var dy = p[1] - startOrigin[1];
+      function toggleLayer(which) {
+          setLayer(which, !showsLayer(which));
+      }
 
-              if (dx === 0 && dy === 0)
-                  return;
 
-              startOrigin = p;
-              d3_eventCancel();
+      function drawPhotoItems(selection) {
+          var photoKeys = ['streetside', 'mapillary-images', 'mapillary-signs', 'openstreetcam-images'];
+          var photoLayers = layers.all().filter(function(obj) { return photoKeys.indexOf(obj.id) !== -1; });
+          var data = photoLayers.filter(function(obj) { return obj.layer.supported(); });
 
-              if (!started) {
-                  started = true;
-                  _event({ type: 'start' });
-              } else {
-                  _event({
-                      type: 'move',
-                      point: [p[0] + offset[0],  p[1] + offset[1]],
-                      delta: [dx, dy]
-                  });
-              }
+          function layerSupported(d) {
+              return d.layer && d.layer.supported();
           }
+          function layerEnabled(d) {
+              return layerSupported(d) && d.layer.enabled();
+          }
+
+          var ul = selection
+              .selectAll('.layer-list-photos')
+              .data([0]);
 
+          ul = ul.enter()
+              .append('ul')
+              .attr('class', 'layer-list layer-list-photos')
+              .merge(ul);
 
-          function dragend() {
-              if (started) {
-                  _event({ type: 'end' });
+          var li = ul.selectAll('.list-item-photos')
+              .data(data);
 
-                  d3_eventCancel();
-                  if (event.target === eventTarget) {
-                      select(window)
-                          .on('click.drag', click, true);
-                  }
-              }
+          li.exit()
+              .remove();
 
-              select(window)
-                  .on(touchId !== null ? 'touchmove.drag-' + touchId : 'mousemove.drag', null)
-                  .on(touchId !== null ? 'touchend.drag-' + touchId : 'mouseup.drag', null);
+          var liEnter = li.enter()
+              .append('li')
+              .attr('class', function(d) { return 'list-item-photos list-item-' + d.id; });
 
-              selectEnable();
-          }
+          var labelEnter = liEnter
+              .append('label')
+              .each(function(d) {
+                  select(this)
+                      .call(tooltip()
+                          .title(t(d.id.replace('-', '_') + '.tooltip'))
+                          .placement('top')
+                      );
+              });
 
+          labelEnter
+              .append('input')
+              .attr('type', 'checkbox')
+              .on('change', function(d) { toggleLayer(d.id); });
 
-          function click() {
-              d3_eventCancel();
-              select(window)
-                  .on('click.drag', null);
-          }
-      }
+          labelEnter
+              .append('span')
+              .text(function(d) { return t(d.id.replace('-', '_') + '.title'); });
 
 
-      function behavior(selection$$1) {
-          var matchesSelector = utilPrefixDOMProperty('matchesSelector');
-          var delegate = dragstart;
+          // Update
+          li
+              .merge(liEnter)
+              .classed('active', layerEnabled)
+              .selectAll('input')
+              .property('checked', layerEnabled);
+      }
 
-          if (_selector) {
-              delegate = function() {
-                  var root = this;
-                  var target = event.target;
-                  for (; target && target !== root; target = target.parentNode) {
-                      var datum = target.__data__;
 
-                      var entity = datum instanceof osmNote ? datum
-                          : datum && datum.properties && datum.properties.entity;
+      function drawOsmItems(selection) {
+          var osmKeys = ['osm', 'notes'];
+          var osmLayers = layers.all().filter(function(obj) { return osmKeys.indexOf(obj.id) !== -1; });
 
-                      if (entity && target[matchesSelector](_selector)) {
-                          return dragstart.call(target, entity);
-                      }
-                  }
-              };
-          }
+          var ul = selection
+              .selectAll('.layer-list-osm')
+              .data([0]);
 
-          selection$$1
-              .on('mousedown.drag' + _selector, delegate)
-              .on('touchstart.drag' + _selector, delegate);
-      }
+          ul = ul.enter()
+              .append('ul')
+              .attr('class', 'layer-list layer-list-osm')
+              .merge(ul);
 
+          var li = ul.selectAll('.list-item')
+              .data(osmLayers);
 
-      behavior.off = function(selection$$1) {
-          selection$$1
-              .on('mousedown.drag' + _selector, null)
-              .on('touchstart.drag' + _selector, null);
-      };
+          li.exit()
+              .remove();
 
+          var liEnter = li.enter()
+              .append('li')
+              .attr('class', function(d) { return 'list-item list-item-' + d.id; });
 
-      behavior.selector = function(_) {
-          if (!arguments.length) return _selector;
-          _selector = _;
-          return behavior;
-      };
+          var labelEnter = liEnter
+              .append('label')
+              .each(function(d) {
+                  select(this)
+                      .call(tooltip()
+                          .title(t('map_data.layers.' + d.id + '.tooltip'))
+                          .placement('bottom')
+                      );
+              });
 
+          labelEnter
+              .append('input')
+              .attr('type', 'checkbox')
+              .on('change', function(d) { toggleLayer(d.id); });
 
-      behavior.origin = function(_) {
-          if (!arguments.length) return _origin;
-          _origin = _;
-          return behavior;
-      };
+          labelEnter
+              .append('span')
+              .text(function(d) { return t('map_data.layers.' + d.id + '.title'); });
 
 
-      behavior.cancel = function() {
-          select(window)
-              .on('mousemove.drag', null)
-              .on('mouseup.drag', null);
-          return behavior;
-      };
+          // Update
+          li
+              .merge(liEnter)
+              .classed('active', function (d) { return d.layer.enabled(); })
+              .selectAll('input')
+              .property('checked', function (d) { return d.layer.enabled(); });
+      }
 
 
-      behavior.target = function() {
-          if (!arguments.length) return _target;
-          _target = arguments[0];
-          _event = eventOf(_target, Array.prototype.slice.call(arguments, 1));
-          return behavior;
-      };
+      function drawQAItems(selection) {
+          var qaKeys = ['keepRight', 'improveOSM'];
+          var qaLayers = layers.all().filter(function(obj) { return qaKeys.indexOf(obj.id) !== -1; });
 
+          var ul = selection
+              .selectAll('.layer-list-qa')
+              .data([0]);
 
-      behavior.surface = function() {
-          if (!arguments.length) return _surface;
-          _surface = arguments[0];
-          return behavior;
-      };
+          ul = ul.enter()
+              .append('ul')
+              .attr('class', 'layer-list layer-list-qa')
+              .merge(ul);
 
+          var li = ul.selectAll('.list-item')
+              .data(qaLayers);
 
-      return utilRebind(behavior, dispatch$$1, 'on');
-  }
+          li.exit()
+              .remove();
 
-  function behaviorDrawWay(context, wayId, index, mode, startGraph) {
-      var origWay = context.entity(wayId);
-      var annotation = t((origWay.isDegenerate() ?
-          'operations.start.annotation.' :
-          'operations.continue.annotation.') + context.geometry(wayId)
-      );
-      var behavior = behaviorDraw(context);
-      var _tempEdits = 0;
+          var liEnter = li.enter()
+              .append('li')
+              .attr('class', function(d) { return 'list-item list-item-' + d.id; });
 
-      var end = osmNode({ loc: context.map().mouseCoordinates() });
+          var labelEnter = liEnter
+              .append('label')
+              .each(function(d) {
+                  select(this)
+                      .call(tooltip()
+                          .title(t('map_data.layers.' + d.id + '.tooltip'))
+                          .placement('bottom')
+                      );
+              });
 
-      // Push an annotated state for undo to return back to.
-      // We must make sure to remove this edit later.
-      context.perform(actionNoop(), annotation);
-      _tempEdits++;
+          labelEnter
+              .append('input')
+              .attr('type', 'checkbox')
+              .on('change', function(d) { toggleLayer(d.id); });
 
-      // Add the drawing node to the graph.
-      // We must make sure to remove this edit later.
-      context.perform(_actionAddDrawNode());
-      _tempEdits++;
+          labelEnter
+              .append('span')
+              .text(function(d) { return t('map_data.layers.' + d.id + '.title'); });
 
 
-      function keydown() {
-          if (event.keyCode === utilKeybinding.modifierCodes.alt) {
-              if (context.surface().classed('nope')) {
-                  context.surface()
-                      .classed('nope-suppressed', true);
-              }
-              context.surface()
-                  .classed('nope', false)
-                  .classed('nope-disabled', true);
-          }
+          // Update
+          li
+              .merge(liEnter)
+              .classed('active', function (d) { return d.layer.enabled(); })
+              .selectAll('input')
+              .property('checked', function (d) { return d.layer.enabled(); });
       }
 
 
-      function keyup() {
-          if (event.keyCode === utilKeybinding.modifierCodes.alt) {
-              if (context.surface().classed('nope-suppressed')) {
-                  context.surface()
-                      .classed('nope', true);
+      // Beta feature - sample vector layers to support Detroit Mapping Challenge
+      // https://github.com/osmus/detroit-mapping-challenge
+      function drawVectorItems(selection) {
+          var dataLayer = layers.layer('data');
+          var vtData = [
+              {
+                  name: 'Detroit Neighborhoods/Parks',
+                  src: 'neighborhoods-parks',
+                  tooltip: 'Neighborhood boundaries and parks as compiled by City of Detroit in concert with community groups.',
+                  template: 'https://{switch:a,b,c,d}.tiles.mapbox.com/v4/jonahadkins.cjksmur6x34562qp9iv1u3ksf-54hev,jonahadkins.cjksmqxdx33jj2wp90xd9x2md-4e5y2/{z}/{x}/{y}.vector.pbf?access_token=pk.eyJ1Ijoiam9uYWhhZGtpbnMiLCJhIjoiRlVVVkx3VSJ9.9sdVEK_B_VkEXPjssU5MqA'
+              }, {
+                  name: 'Detroit Composite POIs',
+                  src: 'composite-poi',
+                  tooltip: 'Fire Inspections, Business Licenses, and other public location data collated from the City of Detroit.',
+                  template: 'https://{switch:a,b,c,d}.tiles.mapbox.com/v4/jonahadkins.cjksmm6a02sli31myxhsr7zf3-2sw8h/{z}/{x}/{y}.vector.pbf?access_token=pk.eyJ1Ijoiam9uYWhhZGtpbnMiLCJhIjoiRlVVVkx3VSJ9.9sdVEK_B_VkEXPjssU5MqA'
+              }, {
+                  name: 'Detroit All-The-Places POIs',
+                  src: 'alltheplaces-poi',
+                  tooltip: 'Public domain business location data created by web scrapers.',
+                  template: 'https://{switch:a,b,c,d}.tiles.mapbox.com/v4/jonahadkins.cjksmswgk340g2vo06p1w9w0j-8fjjc/{z}/{x}/{y}.vector.pbf?access_token=pk.eyJ1Ijoiam9uYWhhZGtpbnMiLCJhIjoiRlVVVkx3VSJ9.9sdVEK_B_VkEXPjssU5MqA'
               }
-              context.surface()
-                  .classed('nope-suppressed', false)
-                  .classed('nope-disabled', false);
-          }
-      }
+          ];
 
+          // Only show this if the map is around Detroit..
+          var detroit = geoExtent([-83.5, 42.1], [-82.8, 42.5]);
+          var showVectorItems = (context.map().zoom() > 9 && detroit.contains(context.map().center()));
 
-      // related code
-      // - `mode/drag_node.js`     `doMode()`
-      // - `behavior/draw.js`      `click()`
-      // - `behavior/draw_way.js`  `move()`
-      function move(datum) {
-          context.surface().classed('nope-disabled', event.altKey);
+          var container = selection.selectAll('.vectortile-container')
+              .data(showVectorItems ? [0] : []);
 
-          var targetLoc = datum && datum.properties && datum.properties.entity && datum.properties.entity.loc;
-          var targetNodes = datum && datum.properties && datum.properties.nodes;
-          var loc = context.map().mouseCoordinates();
+          container.exit()
+              .remove();
 
-          if (targetLoc) {   // snap to node/vertex - a point target with `.loc`
-              loc = targetLoc;
+          var containerEnter = container.enter()
+              .append('div')
+              .attr('class', 'vectortile-container');
 
-          } else if (targetNodes) {   // snap to way - a line target with `.nodes`
-              var choice = geoChooseEdge(targetNodes, context.mouse(), context.projection, end.id);
-              if (choice) {
-                  loc = choice.loc;
-              }
-          }
+          containerEnter
+              .append('h4')
+              .attr('class', 'vectortile-header')
+              .text('Detroit Vector Tiles (Beta)');
 
-          context.replace(actionMoveNode(end.id, loc));
-          end = context.entity(end.id);
-          checkGeometry(false);
-      }
+          containerEnter
+              .append('ul')
+              .attr('class', 'layer-list layer-list-vectortile');
+
+          containerEnter
+              .append('div')
+              .attr('class', 'vectortile-footer')
+              .append('a')
+              .attr('target', '_blank')
+              .attr('tabindex', -1)
+              .call(svgIcon('#iD-icon-out-link', 'inline'))
+              .attr('href', 'https://github.com/osmus/detroit-mapping-challenge')
+              .append('span')
+              .text('About these layers');
 
+          container = container
+              .merge(containerEnter);
 
-      // Check whether this edit causes the geometry to break.
-      // If so, class the surface with a nope cursor.
-      // `finishDraw` - Only checks the relevant line segments if finishing drawing
-      function checkGeometry(finishDraw) {
-          var nopeDisabled = context.surface().classed('nope-disabled');
-          var isInvalid = isInvalidGeometry(end, context.graph(), finishDraw);
 
-          if (nopeDisabled) {
-              context.surface()
-                  .classed('nope', false)
-                  .classed('nope-suppressed', isInvalid);
-          } else {
-              context.surface()
-                  .classed('nope', isInvalid)
-                  .classed('nope-suppressed', false);
-          }
-      }
+          var ul = container.selectAll('.layer-list-vectortile');
 
+          var li = ul.selectAll('.list-item')
+              .data(vtData);
 
-      function isInvalidGeometry(entity, graph, finishDraw) {
-          var parents = graph.parentWays(entity);
+          li.exit()
+              .remove();
 
-          for (var i = 0; i < parents.length; i++) {
-              var parent = parents[i];
-              var nodes = parent.nodes.map(function(nodeID) { return graph.entity(nodeID); });
+          var liEnter = li.enter()
+              .append('li')
+              .attr('class', function(d) { return 'list-item list-item-' + d.src; });
 
-              if (origWay.isClosed()) { // Check if Area
-                  if (finishDraw) {
-                      nodes.splice(-2, 1);
-                      entity = nodes[nodes.length-2];
-                  } else {
-                      nodes.pop();
-                  }
-              } else { // Line
-                  if (finishDraw) {
-                      nodes.pop();
-                  }
-              }
+          var labelEnter = liEnter
+              .append('label')
+              .each(function(d) {
+                  select(this).call(
+                      tooltip().title(d.tooltip).placement('top')
+                  );
+              });
 
-              if (geoHasSelfIntersections(nodes, entity.id)) {
-                  return true;
-              }
-          }
+          labelEnter
+              .append('input')
+              .attr('type', 'radio')
+              .attr('name', 'vectortile')
+              .on('change', selectVTLayer);
 
-          return false;
-      }
+          labelEnter
+              .append('span')
+              .text(function(d) { return d.name; });
 
+          // Update
+          li
+              .merge(liEnter)
+              .classed('active', isVTLayerSelected)
+              .selectAll('input')
+              .property('checked', isVTLayerSelected);
 
-      function undone() {
-          // Undo popped the history back to the initial annotated no-op edit.
-          // Remove initial no-op edit and whatever edit happened immediately before it.
-          context.pop(2);
-          _tempEdits = 0;
 
-          if (context.hasEntity(wayId)) {
-              context.enter(mode);
-          } else {
-              context.enter(modeBrowse(context));
+          function isVTLayerSelected(d) {
+              return dataLayer && dataLayer.template() === d.template;
           }
-      }
 
-
-      function setActiveElements() {
-          context.surface().selectAll('.' + end.id)
-              .classed('active', true);
+          function selectVTLayer(d) {
+              context.storage('settings-custom-data-url', d.template);
+              if (dataLayer) {
+                  dataLayer.template(d.template, d.src);
+                  dataLayer.enabled(true);
+              }
+          }
       }
 
 
-      var drawWay = function(surface) {
-          behavior
-              .on('move', move)
-              .on('click', drawWay.add)
-              .on('clickWay', drawWay.addWay)
-              .on('clickNode', drawWay.addNode)
-              .on('undo', context.undo)
-              .on('cancel', drawWay.cancel)
-              .on('finish', drawWay.finish);
-
-          select(window)
-              .on('keydown.drawWay', keydown)
-              .on('keyup.drawWay', keyup);
+      function drawCustomDataItems(selection) {
+          var dataLayer = layers.layer('data');
+          var hasData = dataLayer && dataLayer.hasData();
+          var showsData = hasData && dataLayer.enabled();
 
-          context.map()
-              .dblclickEnable(false)
-              .on('drawn.draw', setActiveElements);
+          var ul = selection
+              .selectAll('.layer-list-data')
+              .data(dataLayer ? [0] : []);
 
-          setActiveElements();
+          // Exit
+          ul.exit()
+              .remove();
 
-          surface.call(behavior);
+          // Enter
+          var ulEnter = ul.enter()
+              .append('ul')
+              .attr('class', 'layer-list layer-list-data');
 
-          context.history()
-              .on('undone.draw', undone);
-      };
+          var liEnter = ulEnter
+              .append('li')
+              .attr('class', 'list-item-data');
 
+          liEnter
+              .append('button')
+              .call(tooltip()
+                  .title(t('settings.custom_data.tooltip'))
+                  .placement((textDirection === 'rtl') ? 'right' : 'left')
+              )
+              .on('click', editCustom)
+              .call(svgIcon('#iD-icon-more'));
 
-      drawWay.off = function(surface) {
-          // Drawing was interrupted unexpectedly.
-          // This can happen if the user changes modes,
-          // clicks geolocate button, a hashchange event occurs, etc.
-          if (_tempEdits) {
-              context.pop(_tempEdits);
-              while (context.graph() !== startGraph) {
-                  context.pop();
-              }
-          }
+          liEnter
+              .append('button')
+              .call(tooltip()
+                  .title(t('map_data.layers.custom.zoom'))
+                  .placement((textDirection === 'rtl') ? 'right' : 'left')
+              )
+              .on('click', function() {
+                  event.preventDefault();
+                  event.stopPropagation();
+                  dataLayer.fitZoom();
+              })
+              .call(svgIcon('#iD-icon-search'));
 
-          context.map()
-              .on('drawn.draw', null);
+          var labelEnter = liEnter
+              .append('label')
+              .call(tooltip()
+                  .title(t('map_data.layers.custom.tooltip'))
+                  .placement('top')
+              );
 
-          surface.call(behavior.off)
-              .selectAll('.active')
-              .classed('active', false);
+          labelEnter
+              .append('input')
+              .attr('type', 'checkbox')
+              .on('change', function() { toggleLayer('data'); });
 
-          surface
-              .classed('nope', false)
-              .classed('nope-suppressed', false)
-              .classed('nope-disabled', false);
+          labelEnter
+              .append('span')
+              .text(t('map_data.layers.custom.title'));
 
-          select(window)
-              .on('keydown.hover', null)
-              .on('keyup.hover', null);
+          // Update
+          ul = ul
+              .merge(ulEnter);
 
-          context.history()
-              .on('undone.draw', null);
-      };
+          ul.selectAll('.list-item-data')
+              .classed('active', showsData)
+              .selectAll('label')
+              .classed('deemphasize', !hasData)
+              .selectAll('input')
+              .property('disabled', !hasData)
+              .property('checked', showsData);
+      }
 
 
-      function _actionAddDrawNode() {
-          return function(graph) {
-              return graph
-                  .replace(end)
-                  .replace(origWay.addNode(end.id, index));
-          };
+      function editCustom() {
+          event.preventDefault();
+          context.container()
+              .call(settingsCustomData);
       }
 
 
-      function _actionReplaceDrawNode(newNode) {
-          return function(graph) {
-              return graph
-                  .replace(origWay.addNode(newNode.id, index))
-                  .remove(end);
-          };
+      function customChanged(d) {
+          var dataLayer = layers.layer('data');
+
+          if (d && d.url) {
+              dataLayer.url(d.url);
+          } else if (d && d.fileList) {
+              dataLayer.fileList(d.fileList);
+          }
       }
 
 
-      // Accept the current position of the drawing node and continue drawing.
-      drawWay.add = function(loc, d) {
-          if ((d && d.properties && d.properties.nope) || context.surface().classed('nope')) {
-              return;   // can't click here
-          }
+      function drawListItems(selection, data, type, name, change, active) {
+          var items = selection.selectAll('li')
+              .data(data);
 
-          context.pop(_tempEdits);
-          _tempEdits = 0;
+          // Exit
+          items.exit()
+              .remove();
 
-          context.perform(
-              _actionAddDrawNode(),
-              annotation
-          );
+          // Enter
+          var enter = items.enter()
+              .append('li')
+              .call(tooltip()
+                  .html(true)
+                  .title(function(d) {
+                      var tip = t(name + '.' + d + '.tooltip');
+                      var key = (d === 'wireframe' ? t('area_fill.wireframe.key') : null);
+                      if ((name === 'feature' || name === 'keepRight') && autoHiddenFeature(d)) {
+                          var msg = showsLayer('osm') ? t('map_data.autohidden') : t('map_data.osmhidden');
+                          tip += '<div>' + msg + '</div>';
+                      }
+                      return uiTooltipHtml(tip, key);
+                  })
+                  .placement('top')
+              );
 
-          checkGeometry(false);   // finishDraw = false
-          context.enter(mode);
-      };
+          var label = enter
+              .append('label');
 
+          label
+              .append('input')
+              .attr('type', type)
+              .attr('name', name)
+              .on('change', change);
 
-      // Connect the way to an existing way.
-      drawWay.addWay = function(loc, edge, d) {
-          if ((d && d.properties && d.properties.nope) || context.surface().classed('nope')) {
-              return;   // can't click here
-          }
+          label
+              .append('span')
+              .text(function(d) { return t(name + '.' + d + '.description'); });
 
-          context.pop(_tempEdits);
-          _tempEdits = 0;
+          // Update
+          items = items
+              .merge(enter);
 
-          context.perform(
-              _actionAddDrawNode(),
-              actionAddMidpoint({ loc: loc, edge: edge }, end),
-              annotation
-          );
+          items
+              .classed('active', active)
+              .selectAll('input')
+              .property('checked', active)
+              .property('indeterminate', function(d) {
+                  return ((name === 'feature' || name === 'keepRight') && autoHiddenFeature(d));
+              });
+      }
 
-          checkGeometry(false);   // finishDraw = false
-          context.enter(mode);
-      };
 
+      function renderDataLayers(selection) {
+          var container = selection.selectAll('.data-layer-container')
+              .data([0]);
 
-      // Connect the way to an existing node and continue drawing.
-      drawWay.addNode = function(node, d) {
-          if ((d && d.properties && d.properties.nope) || context.surface().classed('nope')) {
-              return;   // can't click here
-          }
+          _dataLayerContainer = container.enter()
+              .append('div')
+              .attr('class', 'data-layer-container')
+              .merge(container);
 
-          context.pop(_tempEdits);
-          _tempEdits = 0;
+          updateDataLayers();
+      }
 
-          context.perform(
-              _actionReplaceDrawNode(node),
-              annotation
-          );
 
-          checkGeometry(false);   // finishDraw = false
-          context.enter(mode);
-      };
+      function renderFillList(selection) {
+          var container = selection.selectAll('.layer-fill-list')
+              .data([0]);
 
+          _fillList = container.enter()
+              .append('ul')
+              .attr('class', 'layer-list layer-fill-list')
+              .merge(container);
 
-      // Finish the draw operation, removing the temporary edits.
-      // If the way has enough nodes to be valid, it's selected.
-      // Otherwise, delete everything and return to browse mode.
-      drawWay.finish = function() {
-          checkGeometry(true);   // finishDraw = true
-          if (context.surface().classed('nope')) {
-              return;   // can't click here
-          }
+          updateFillList();
+      }
 
-          context.pop(_tempEdits);
-          _tempEdits = 0;
 
-          var way = context.hasEntity(wayId);
-          if (!way || way.isDegenerate()) {
-              drawWay.cancel();
-              return;
-          }
+      function renderFeatureList(selection) {
+          var container = selection.selectAll('.layer-feature-list')
+              .data([0]);
 
-          window.setTimeout(function() {
-              context.map().dblclickEnable(true);
-          }, 1000);
-          var isNewFeature = !mode.isContinuing;
-          context.enter(modeSelect(context, [wayId]).newFeature(isNewFeature));
-      };
+          _featureList = container.enter()
+              .append('ul')
+              .attr('class', 'layer-list layer-feature-list')
+              .merge(container);
 
+          updateFeatureList();
+      }
 
-      // Cancel the draw operation, delete everything, and return to browse mode.
-      drawWay.cancel = function() {
-          context.pop(_tempEdits);
-          _tempEdits = 0;
+      function updateDataLayers() {
+          _dataLayerContainer
+              .call(drawOsmItems)
+              .call(drawQAItems)
+              .call(drawPhotoItems)
+              .call(drawCustomDataItems)
+              .call(drawVectorItems);      // Beta - Detroit mapping challenge
+      }
 
-          while (context.graph() !== startGraph) {
-              context.pop();
-          }
+      function updateFillList() {
+          _fillList
+              .call(drawListItems, fills, 'radio', 'area_fill', setFill, showsFill);
+      }
 
-          window.setTimeout(function() {
-              context.map().dblclickEnable(true);
-          }, 1000);
+      function updateFeatureList() {
+          _featureList
+              .call(drawListItems, features, 'checkbox', 'feature', clickFeature, showsFeature);
+      }
 
-          context.surface()
-              .classed('nope', false)
-              .classed('nope-disabled', false)
-              .classed('nope-suppressed', false);
+      function update() {
 
-          context.enter(modeBrowse(context));
-      };
+          if (!_pane.select('.disclosure-wrap-data_layers').classed('hide')) {
+              updateDataLayers();
+          }
+          if (!_pane.select('.disclosure-wrap-fill_area').classed('hide')) {
+              updateFillList();
+          }
+          if (!_pane.select('.disclosure-wrap-map_features').classed('hide')) {
+              updateFeatureList();
+          }
 
+          _QAList
+              .call(drawListItems, ['keep-right'], 'checkbox', 'QA', function(d) { toggleLayer(d); }, showsQA);
+      }
 
-      drawWay.activeID = function() {
-          if (!arguments.length) return end.id;
-          // no assign
-          return drawWay;
-      };
 
+      function toggleWireframe() {
+          if (event) {
+              event.preventDefault();
+              event.stopPropagation();
+          }
 
-      drawWay.tail = function(text) {
-          behavior.tail(text);
-          return drawWay;
-      };
+          if (_fillSelected === 'wireframe') {
+              _fillSelected = context.storage('area-fill-toggle') || 'partial';
+          } else {
+              _fillSelected = 'wireframe';
+          }
 
+          setFill(_fillSelected);
+          context.map().pan([0,0]);  // trigger a redraw
+      }
 
-      return drawWay;
-  }
+      var paneTooltip = tooltip()
+          .placement((textDirection === 'rtl') ? 'right' : 'left')
+          .html(true)
+          .title(uiTooltipHtml(t('map_data.description'), key));
 
-  function behaviorHash(context) {
-      var s0 = null; // cached window.location.hash
-      var lat = 90 - 1e-8; // allowable latitude range
+      uiMapData.hidePane = function() {
+          uiMapData.setVisible(false);
+      };
 
+      uiMapData.togglePane = function() {
+          if (event) event.preventDefault();
+          paneTooltip.hide(_toggleButton);
+          uiMapData.setVisible(!_toggleButton.classed('active'));
+      };
 
-      var parser = function(map, s) {
-          var q = utilStringQs(s);
-          var args = (q.map || '').split('/').map(Number);
+      uiMapData.setVisible = function(show) {
+          if (show !== _shown) {
+              _toggleButton.classed('active', show);
+              _shown = show;
 
-          if (args.length < 3 || args.some(isNaN)) {
-              return true; // replace bogus hash
+              if (show) {
+                  uiBackground.hidePane();
+                  uiHelp.hidePane();
+                  uiIssues.hidePane();
+                  update();
 
-          } else if (s !== formatter(map).slice(1)) {   // hash has changed
-              var mode = context.mode(),
-                  dist = geoSphericalDistance(map.center(), [args[2], args[1]]),
-                  maxdist = 500;
+                  _pane
+                      .style('display', 'block')
+                      .style('right', '-300px')
+                      .transition()
+                      .duration(200)
+                      .style('right', '0px');
 
-              // 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));
+              } else {
+                  _pane
+                      .style('display', 'block')
+                      .style('right', '0px')
+                      .transition()
+                      .duration(200)
+                      .style('right', '-300px')
+                      .on('end', function() {
+                          select(this).style('display', 'none');
+                      });
               }
-
-              map.centerZoom([args[2], Math.min(lat, Math.max(-lat, args[1]))], args[0]);
           }
       };
 
+      uiMapData.renderToggleButton = function(selection) {
 
-      var formatter = function(map) {
-          var center = map.center();
-          var zoom = map.zoom();
-          var precision = Math.max(0, Math.ceil(Math.log(zoom) / Math.LN2));
-          var q = omit(utilStringQs(window.location.hash.substring(1)),
-              ['comment', 'source', 'hashtags', 'walkthrough']
-          );
-          var newParams = {};
-
-          delete q.id;
-          var selected = context.selectedIDs().filter(function(id) {
-              return !context.entity(id).isNew();
-          });
-          if (selected.length) {
-              newParams.id = selected.join(',');
-          }
+          _toggleButton = selection
+              .append('button')
+              .attr('tabindex', -1)
+              .on('click', uiMapData.togglePane)
+              .call(svgIcon('#iD-icon-data', 'light'))
+              .call(paneTooltip);
+      };
 
-          newParams.map = zoom.toFixed(2) +
-              '/' + center[1].toFixed(precision) +
-              '/' + center[0].toFixed(precision);
 
-          return '#' + utilQsString(assign(q, newParams), true);
-      };
+      uiMapData.renderPane = function(selection) {
 
+          _pane = selection
+              .append('div')
+              .attr('class', 'fillL map-pane map-data-pane hide');
 
-      function update() {
-          if (context.inIntro()) return;
-          var s1 = formatter(context.map());
-          if (s0 !== s1) {
-              window.location.replace(s0 = s1);  // don't recenter the map!
-          }
-      }
+          var heading = _pane
+              .append('div')
+              .attr('class', 'pane-heading');
 
+          heading
+              .append('h2')
+              .text(t('map_data.title'));
 
-      var throttledUpdate = throttle(update, 500);
+          heading
+              .append('button')
+              .on('click', uiMapData.hidePane)
+              .call(svgIcon('#iD-icon-close'));
 
 
-      function hashchange() {
-          if (window.location.hash === s0) return;  // ignore spurious hashchange events
-          if (parser(context.map(), (s0 = window.location.hash).substring(1))) {
-              update(); // replace bogus hash
-          }
-      }
+          var content = _pane
+              .append('div')
+              .attr('class', 'pane-content');
 
 
-      function behavior() {
-          context.map()
-              .on('move.hash', throttledUpdate);
+          // data layers
+          content
+              .append('div')
+              .attr('class', 'map-data-data-layers')
+              .call(uiDisclosure(context, 'data_layers', true)
+                  .title(t('map_data.data_layers'))
+                  .content(renderDataLayers)
+              );
 
-          context
-              .on('enter.hash', throttledUpdate);
+          // area fills
+          content
+              .append('div')
+              .attr('class', 'map-data-area-fills')
+              .call(uiDisclosure(context, 'fill_area', false)
+                  .title(t('map_data.fill_area'))
+                  .content(renderFillList)
+              );
 
-          select(window)
-              .on('hashchange.hash', hashchange);
+          // feature filters
+          content
+              .append('div')
+              .attr('class', 'map-data-feature-filters')
+              .call(uiDisclosure(context, 'map_features', false)
+                  .title(t('map_data.map_features'))
+                  .content(renderFeatureList)
+              );
 
-          if (window.location.hash) {
-              var q = utilStringQs(window.location.hash.substring(1));
 
-              if (q.id) {
-                  context.zoomToEntity(q.id.split(',')[0], !q.map);
-              }
+          // add listeners
+          context.features()
+              .on('change.map_data-update', update);
 
-              if (q.comment) {
-                  context.storage('comment', q.comment);
-                  context.storage('commentDate', Date.now());
-              }
+          update();
+          setFill(_fillSelected);
 
-              if (q.source) {
-                  context.storage('source', q.source);
-                  context.storage('commentDate', Date.now());
-              }
+          context.keybinding()
+              .on(key, uiMapData.togglePane)
+              .on(t('area_fill.wireframe.key'), toggleWireframe);
+      };
 
-              if (q.hashtags) {
-                  context.storage('hashtags', q.hashtags);
-              }
+      return uiMapData;
+  }
 
-              if (q.walkthrough === 'true') {
-                  behavior.startWalkthrough = true;
-              }
+  function uiShortcuts(context) {
+      var detected = utilDetect();
+      var _activeTab = 0;
+      var _modalSelection;
+      var _selection = select(null);
 
-              hashchange();
 
-              if (q.map) {
-                  behavior.hadHash = true;
+      context.keybinding()
+          .on([t('shortcuts.toggle.key'), '?'], function () {
+              if (d3_selectAll('.modal-shortcuts').size()) {  // already showing
+                  if (_modalSelection) {
+                      _modalSelection.close();
+                      _modalSelection = null;
+                  }
+              } else {
+                  _modalSelection = uiModal(_selection);
+                  shortcutsModal(_modalSelection);
               }
-          }
-      }
-
+          });
 
-      behavior.off = function() {
-          throttledUpdate.cancel();
 
-          context.map()
-              .on('move.hash', null);
+      function shortcutsModal(_modalSelection) {
+          _modalSelection.select('.modal')
+              .classed('modal-shortcuts', true);
 
-          context
-              .on('enter.hash', null);
+          var shortcutsModal = _modalSelection.select('.content');
 
-          select(window)
-              .on('hashchange.hash', null);
+          shortcutsModal
+              .append('div')
+              .attr('class', 'modal-section')
+              .append('h3')
+              .text(t('shortcuts.title'));
 
-          window.location.hash = '';
-      };
+          shortcutsModal
+              .call(render);
+      }
 
 
-      return behavior;
-  }
+      function render(selection) {
+          var wrapper = selection
+              .selectAll('.wrapper')
+              .data([0]);
 
-  function behaviorLasso(context) {
+          var wrapperEnter = wrapper
+              .enter()
+              .append('div')
+              .attr('class', 'wrapper modal-section');
 
-      var behavior = function(selection$$1) {
-          var lasso;
+          var tabsBar = wrapperEnter
+              .append('div')
+              .attr('class', 'tabs-bar');
 
+          var shortcutsList = wrapperEnter
+              .append('div')
+              .attr('class', 'shortcuts-list');
 
-          function mousedown() {
-              var button = 0;  // left
-              if (event.button === button && event.shiftKey === true) {
-                  lasso = null;
+          wrapper = wrapper.merge(wrapperEnter);
 
-                  select(window)
-                      .on('mousemove.lasso', mousemove)
-                      .on('mouseup.lasso', mouseup);
+          var tabs = tabsBar
+              .selectAll('.tab')
+              .data(dataShortcuts);
 
-                  event.stopPropagation();
-              }
-          }
+          var tabsEnter = tabs
+              .enter()
+              .append('div')
+              .attr('class', 'tab')
+              .on('click', function (d, i) {
+                  _activeTab = i;
+                  render(selection);
+              });
 
+          tabsEnter
+              .append('span')
+              .text(function (d) { return t(d.text); });
 
-          function mousemove() {
-              if (!lasso) {
-                  lasso = uiLasso(context);
-                  context.surface().call(lasso);
-              }
+          tabs = tabs
+              .merge(tabsEnter);
 
-              lasso.p(context.mouse());
-          }
+          // Update
+          wrapper.selectAll('.tab')
+              .classed('active', function (d, i) {
+                  return i === _activeTab;
+              });
 
 
-          function normalize(a, b) {
-              return [
-                  [Math.min(a[0], b[0]), Math.min(a[1], b[1])],
-                  [Math.max(a[0], b[0]), Math.max(a[1], b[1])]];
-          }
+          var shortcuts = shortcutsList
+              .selectAll('.shortcut-tab')
+              .data(dataShortcuts);
 
+          var shortcutsEnter = shortcuts
+              .enter()
+              .append('div')
+              .attr('class', function(d) { return 'shortcut-tab shortcut-tab-' + d.tab; });
 
-          function lassoed() {
-              if (!lasso) return [];
+          var columnsEnter = shortcutsEnter
+              .selectAll('.shortcut-column')
+              .data(function (d) { return d.columns; })
+              .enter()
+              .append('table')
+              .attr('class', 'shortcut-column');
 
-              var graph = context.graph();
-              var bounds = lasso.extent().map(context.projection.invert);
-              var extent = geoExtent$$1(normalize(bounds[0], bounds[1]));
+          var rowsEnter = columnsEnter
+              .selectAll('.shortcut-row')
+              .data(function (d) { return d.rows; })
+              .enter()
+              .append('tr')
+              .attr('class', 'shortcut-row');
 
-              return map$3(context.intersects(extent).filter(function(entity) {
-                  return entity.type === 'node' &&
-                      geoPointInPolygon(context.projection(entity.loc), lasso.coordinates) &&
-                      !context.features().isHidden(entity, graph, entity.geometry(graph));
-              }), 'id');
-          }
 
+          var sectionRows = rowsEnter
+              .filter(function (d) { return !d.shortcuts; });
 
-          function mouseup() {
-              select(window)
-                  .on('mousemove.lasso', null)
-                  .on('mouseup.lasso', null);
+          sectionRows
+              .append('td');
 
-              if (!lasso) return;
+          sectionRows
+              .append('td')
+              .attr('class', 'shortcut-section')
+              .append('h3')
+              .text(function (d) { return t(d.text); });
 
-              var ids = lassoed();
-              lasso.close();
 
-              if (ids.length) {
-                  context.enter(modeSelect(context, ids));
-              }
-          }
+          var shortcutRows = rowsEnter
+              .filter(function (d) { return d.shortcuts; });
 
-          selection$$1
-              .on('mousedown.lasso', mousedown);
-      };
+          var shortcutKeys = shortcutRows
+              .append('td')
+              .attr('class', 'shortcut-keys');
 
+          var modifierKeys = shortcutKeys
+              .filter(function (d) { return d.modifiers; });
 
-      behavior.off = function(selection$$1) {
-          selection$$1.on('mousedown.lasso', null);
-      };
+          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 = select(this);
 
+                  selection
+                      .append('kbd')
+                      .attr('class', 'modifier')
+                      .text(function (d) { return uiCmd.display(d); });
 
-      return behavior;
-  }
+                  selection
+                      .append('span')
+                      .text('+');
+              });
 
-  /* Creates a keybinding behavior for an operation */
-  function behaviorOperation(context) {
-      var _operation;
 
-      function keypress() {
-          event.preventDefault();
-          var disabled = _operation.disabled();
-          var flash;
+          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'];
+                  }
 
-          if (disabled) {
-              flash = uiFlash()
-                  .duration(4000)
-                  .iconName('#iD-operation-' + _operation.id)
-                  .iconClass('operation disabled')
-                  .text(_operation.tooltip);
+                  // replace translations
+                  arr = arr.map(function(s) {
+                      return uiCmd.display(s.indexOf('.') !== -1 ? t(s) : s);
+                  });
 
-              flash();
+                  return uniq(arr).map(function(s) {
+                      return {
+                          shortcut: s,
+                          separator: d.separator
+                      };
+                  });
+              })
+              .enter()
+              .each(function (d, i, nodes) {
+                  var selection = select(this);
+                  var click = d.shortcut.toLowerCase().match(/(.*).click/);
 
-          } else {
-              flash = uiFlash()
-                  .duration(2000)
-                  .iconName('#iD-operation-' + _operation.id)
-                  .iconClass('operation')
-                  .text(_operation.annotation() || _operation.title);
+                  if (click && click[1]) {   // replace "left_click", "right_click" with mouse icon
+                      selection
+                          .call(svgIcon('#iD-walkthrough-mouse', 'mouseclick', click[1]));
+                  } else {
+                      selection
+                          .append('kbd')
+                          .attr('class', 'shortcut')
+                          .text(function (d) { return d.shortcut; });
+                  }
 
-              flash();
-              _operation();
-          }
-      }
+                  if (i < nodes.length - 1) {
+                      selection
+                          .append('span')
+                          .text(d.separator || '\u00a0' + t('shortcuts.or') + '\u00a0');
+                  }
+              });
 
 
-      function behavior() {
-          if (_operation && _operation.available()) {
-              context.keybinding()
-                  .on(_operation.keys, keypress);
-          }
+          shortcutKeys
+              .filter(function(d) { return d.gesture; })
+              .each(function () {
+                  var selection = select(this);
 
-          return behavior;
-      }
+                  selection
+                      .append('span')
+                      .text('+');
 
+                  selection
+                      .append('span')
+                      .attr('class', 'gesture')
+                      .text(function (d) { return t(d.gesture); });
+              });
 
-      behavior.off = function() {
-          context.keybinding()
-              .off(_operation.keys);
-      };
 
+          shortcutRows
+              .append('td')
+              .attr('class', 'shortcut-desc')
+              .text(function (d) { return d.text ? t(d.text) : '\u00a0'; });
 
-      behavior.which = function (_) {
-          if (!arguments.length) return _operation;
-          _operation = _;
-          return behavior;
-      };
 
+          shortcuts = shortcuts
+              .merge(shortcutsEnter);
 
-      return behavior;
-  }
+          // Update
+          wrapper.selectAll('.shortcut-tab')
+              .style('display', function (d, i) {
+                  return i === _activeTab ? 'flex' : 'none';
+              });
+      }
 
-  /**
-   * The base implementation of `_.invert` and `_.invertBy` which inverts
-   * `object` with values transformed by `iteratee` and set by `setter`.
-   *
-   * @private
-   * @param {Object} object The object to iterate over.
-   * @param {Function} setter The function to set `accumulator` values.
-   * @param {Function} iteratee The iteratee to transform values.
-   * @param {Object} accumulator The initial inverted object.
-   * @returns {Function} Returns `accumulator`.
-   */
-  function baseInverter(object, setter, iteratee, accumulator) {
-    baseForOwn(object, function(value, key, object) {
-      setter(accumulator, iteratee(value), key, object);
-    });
-    return accumulator;
-  }
 
-  /**
-   * Creates a function like `_.invertBy`.
-   *
-   * @private
-   * @param {Function} setter The function to set accumulator values.
-   * @param {Function} toIteratee The function to resolve iteratees.
-   * @returns {Function} Returns the new inverter function.
-   */
-  function createInverter(setter, toIteratee) {
-    return function(object, iteratee) {
-      return baseInverter(object, setter, toIteratee(iteratee), {});
-    };
+      return function(selection, show) {
+          _selection = selection;
+          if (show) {
+              _modalSelection = uiModal(selection);
+              shortcutsModal(_modalSelection);
+          }
+      };
   }
 
-  /** Used for built-in method references. */
-  var objectProto$j = Object.prototype;
-
-  /**
-   * Used to resolve the
-   * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)
-   * of values.
-   */
-  var nativeObjectToString$2 = objectProto$j.toString;
+  function uiHelp(context) {
+      var key = t('help.key');
 
-  /**
-   * Creates an object composed of the inverted keys and values of `object`.
-   * If `object` contains duplicate values, subsequent values overwrite
-   * property assignments of previous values.
-   *
-   * @static
-   * @memberOf _
-   * @since 0.7.0
-   * @category Object
-   * @param {Object} object The object to invert.
-   * @returns {Object} Returns the new inverted object.
-   * @example
-   *
-   * var object = { 'a': 1, 'b': 2, 'c': 1 };
-   *
-   * _.invert(object);
-   * // => { '1': 'c', '2': 'b' }
-   */
-  var invert = createInverter(function(result, value, key) {
-    if (value != null &&
-        typeof value.toString != 'function') {
-      value = nativeObjectToString$2.call(value);
-    }
+      var _pane = select(null), _toggleButton = select(null);
 
-    result[value] = key;
-  }, constant$d(identity$8));
+      var _shown = false;
 
-  /**
-   * Creates an object with the same keys as `object` and values generated
-   * by running each own enumerable string keyed property of `object` thru
-   * `iteratee`. The iteratee is invoked with three arguments:
-   * (value, key, object).
-   *
-   * @static
-   * @memberOf _
-   * @since 2.4.0
-   * @category Object
-   * @param {Object} object The object to iterate over.
-   * @param {Function} [iteratee=_.identity] The function invoked per iteration.
-   * @returns {Object} Returns the new mapped object.
-   * @see _.mapKeys
-   * @example
-   *
-   * var users = {
-   *   'fred':    { 'user': 'fred',    'age': 40 },
-   *   'pebbles': { 'user': 'pebbles', 'age': 1 }
-   * };
-   *
-   * _.mapValues(users, function(o) { return o.age; });
-   * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)
-   *
-   * // The `_.property` iteratee shorthand.
-   * _.mapValues(users, 'age');
-   * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)
-   */
-  function mapValues(object, iteratee) {
-    var result = {};
-    iteratee = baseIteratee(iteratee, 3);
+      var docKeys = [
+          ['help', [
+              'welcome',
+              'open_data_h',
+              'open_data',
+              'before_start_h',
+              'before_start',
+              'open_source_h',
+              'open_source',
+              'open_source_help'
+          ]],
+          ['overview', [
+              'navigation_h',
+              'navigation_drag',
+              'navigation_zoom',
+              'features_h',
+              'features',
+              'nodes_ways'
+          ]],
+          ['editing', [
+              'select_h',
+              'select_left_click',
+              'select_right_click',
+              'multiselect_h',
+              'multiselect_shift_click',
+              'multiselect_lasso',
+              'undo_redo_h',
+              'undo_redo',
+              'save_h',
+              'save',
+              'save_validation',
+              'upload_h',
+              'upload',
+              'backups_h',
+              'backups',
+              'keyboard_h',
+              'keyboard'
+          ]],
+          ['feature_editor', [
+              'intro',
+              'definitions',
+              'type_h',
+              'type',
+              'type_picker',
+              'fields_h',
+              'fields_all_fields',
+              'fields_example',
+              'fields_add_field',
+              'tags_h',
+              'tags_all_tags',
+              'tags_resources'
+          ]],
+          ['points', [
+              'intro',
+              'add_point_h',
+              'add_point',
+              'add_point_finish',
+              'move_point_h',
+              'move_point',
+              'delete_point_h',
+              'delete_point',
+              'delete_point_command'
+          ]],
+          ['lines', [
+              'intro',
+              'add_line_h',
+              'add_line',
+              'add_line_draw',
+              'add_line_finish',
+              'modify_line_h',
+              'modify_line_dragnode',
+              'modify_line_addnode',
+              'connect_line_h',
+              'connect_line',
+              'connect_line_display',
+              'connect_line_drag',
+              'connect_line_tag',
+              'disconnect_line_h',
+              'disconnect_line_command',
+              'move_line_h',
+              'move_line_command',
+              'move_line_connected',
+              'delete_line_h',
+              'delete_line',
+              'delete_line_command'
+          ]],
+          ['areas', [
+              'intro',
+              'point_or_area_h',
+              'point_or_area',
+              'add_area_h',
+              'add_area_command',
+              'add_area_draw',
+              'add_area_finish',
+              'square_area_h',
+              'square_area_command',
+              'modify_area_h',
+              'modify_area_dragnode',
+              'modify_area_addnode',
+              'delete_area_h',
+              'delete_area',
+              'delete_area_command'
+          ]],
+          ['relations', [
+              'intro',
+              'edit_relation_h',
+              'edit_relation',
+              'edit_relation_add',
+              'edit_relation_delete',
+              'maintain_relation_h',
+              'maintain_relation',
+              'relation_types_h',
+              'multipolygon_h',
+              'multipolygon',
+              'multipolygon_create',
+              'multipolygon_merge',
+              'turn_restriction_h',
+              'turn_restriction',
+              'turn_restriction_field',
+              'turn_restriction_editing',
+              'route_h',
+              'route',
+              'route_add',
+              'boundary_h',
+              'boundary',
+              'boundary_add'
+          ]],
+          ['notes', [
+              'intro',
+              'add_note_h',
+              'add_note',
+              'move_note',
+              'update_note_h',
+              'update_note',
+              'save_note_h',
+              'save_note'
+          ]],
 
-    baseForOwn(object, function(value, key, object) {
-      baseAssignValue(result, key, iteratee(value, key, object));
-    });
-    return result;
-  }
+          ['imagery', [
+              'intro',
+              'sources_h',
+              'choosing',
+              'sources',
+              'offsets_h',
+              'offset',
+              'offset_change'
+          ]],
+          ['streetlevel', [
+              'intro',
+              'using_h',
+              'using',
+              'photos',
+              'viewer'
+          ]],
+          ['gps', [
+              'intro',
+              'survey',
+              'using_h',
+              'using',
+              'tracing',
+              'upload'
+          ]],
+          ['qa', [
+              'intro',
+              'tools_h',
+              'tools',
+              'issues_h',
+              'issues'
+          ]]
+      ];
 
-  function behaviorPaste(context) {
+      var headings = {
+          'help.help.open_data_h': 3,
+          'help.help.before_start_h': 3,
+          'help.help.open_source_h': 3,
+          'help.overview.navigation_h': 3,
+          'help.overview.features_h': 3,
+          'help.editing.select_h': 3,
+          'help.editing.multiselect_h': 3,
+          'help.editing.undo_redo_h': 3,
+          'help.editing.save_h': 3,
+          'help.editing.upload_h': 3,
+          'help.editing.backups_h': 3,
+          'help.editing.keyboard_h': 3,
+          'help.feature_editor.type_h': 3,
+          'help.feature_editor.fields_h': 3,
+          'help.feature_editor.tags_h': 3,
+          'help.points.add_point_h': 3,
+          'help.points.move_point_h': 3,
+          'help.points.delete_point_h': 3,
+          'help.lines.add_line_h': 3,
+          'help.lines.modify_line_h': 3,
+          'help.lines.connect_line_h': 3,
+          'help.lines.disconnect_line_h': 3,
+          'help.lines.move_line_h': 3,
+          'help.lines.delete_line_h': 3,
+          'help.areas.point_or_area_h': 3,
+          'help.areas.add_area_h': 3,
+          'help.areas.square_area_h': 3,
+          'help.areas.modify_area_h': 3,
+          'help.areas.delete_area_h': 3,
+          'help.relations.edit_relation_h': 3,
+          'help.relations.maintain_relation_h': 3,
+          'help.relations.relation_types_h': 2,
+          'help.relations.multipolygon_h': 3,
+          'help.relations.turn_restriction_h': 3,
+          'help.relations.route_h': 3,
+          'help.relations.boundary_h': 3,
+          'help.notes.add_note_h': 3,
+          'help.notes.update_note_h': 3,
+          'help.notes.save_note_h': 3,
+          'help.imagery.sources_h': 3,
+          'help.imagery.offsets_h': 3,
+          'help.streetlevel.using_h': 3,
+          'help.gps.using_h': 3,
+          'help.qa.tools_h': 3,
+          'help.qa.issues_h': 3
+      };
 
-      function doPaste() {
-          event.preventDefault();
+      var replacements = {
+          point: icon('#iD-icon-point', 'pre-text'),
+          line: icon('#iD-icon-line', 'pre-text'),
+          area: icon('#iD-icon-area', 'pre-text'),
+          note: icon('#iD-icon-note', 'pre-text add-note'),
+          plus: icon('#iD-icon-plus', 'pre-text'),
+          minus: icon('#iD-icon-minus', 'pre-text'),
+          orthogonalize: icon('#iD-operation-orthogonalize', 'pre-text'),
+          disconnect: icon('#iD-operation-disconnect', 'pre-text'),
+          layers: icon('#iD-icon-layers', 'pre-text'),
+          data: icon('#iD-icon-data', 'pre-text'),
+          inspect: icon('#iD-icon-inspect', 'pre-text'),
+          move: icon('#iD-operation-move', 'pre-text'),
+          merge: icon('#iD-operation-merge', 'pre-text'),
+          delete: icon('#iD-operation-delete', 'pre-text'),
+          close: icon('#iD-icon-close', 'pre-text'),
+          undo: icon(textDirection === 'rtl' ? '#iD-icon-redo' : '#iD-icon-undo', 'pre-text'),
+          redo: icon(textDirection === 'rtl' ? '#iD-icon-undo' : '#iD-icon-redo', 'pre-text'),
+          save: icon('#iD-icon-save', 'pre-text'),
+          leftclick: icon('#iD-walkthrough-mouse', 'pre-text mouseclick', 'left'),
+          rightclick: icon('#iD-walkthrough-mouse', 'pre-text mouseclick', 'right'),
+          shift: uiCmd.display('⇧'),
+          alt: uiCmd.display('⌥'),
+          return: uiCmd.display('↵'),
+          version: context.version
+      };
 
-          var baseGraph = context.graph();
-          var mouse$$1 = context.mouse();
-          var projection = context.projection;
-          var viewport = geoExtent$$1(projection.clipExtent()).polygon();
+      // For each section, squash all the texts into a single markdown document
+      var docs = docKeys.map(function(key) {
+          var helpkey = 'help.' + key[0];
+          var text = key[1].reduce(function(all, part) {
+              var subkey = helpkey + '.' + part;
+              var depth = headings[subkey];                              // is this subkey a heading?
+              var hhh = depth ? Array(depth + 1).join('#') + ' ' : '';   // if so, prepend with some ##'s
+              return all + hhh + t(subkey, replacements) + '\n\n';
+          }, '');
 
-          if (!geoPointInPolygon(mouse$$1, viewport)) return;
+          return {
+              title: t(helpkey + '.title'),
+              html: marked(text.trim())
+          };
+      });
 
-          var extent = geoExtent$$1();
-          var oldIDs = context.copyIDs();
-          var oldGraph = context.copyGraph();
-          var newIDs = [];
+      var paneTooltip = tooltip()
+          .placement((textDirection === 'rtl') ? 'right' : 'left')
+          .html(true)
+          .title(uiTooltipHtml(t('help.title'), key));
 
-          if (!oldIDs.length) return;
+      uiHelp.hidePane = function() {
+          uiHelp.setVisible(false);
+      };
 
-          var action = actionCopyEntities(oldIDs, oldGraph);
-          context.perform(action);
+      uiHelp.togglePane = function() {
+          if (event) event.preventDefault();
+          paneTooltip.hide(_toggleButton);
+          uiHelp.setVisible(!_toggleButton.classed('active'));
+      };
 
-          var copies = action.copies();
-          var originals = invert(mapValues(copies, 'id'));
-          for (var id in copies) {
-              var oldEntity = oldGraph.entity(id);
-              var newEntity = copies[id];
+      uiHelp.setVisible = function(show) {
+          if (show !== _shown) {
+              _toggleButton.classed('active', show);
+              _shown = show;
 
-              extent._extend(oldEntity.extent(oldGraph));
+              if (show) {
+                  uiBackground.hidePane();
+                  uiIssues.hidePane();
+                  uiMapData.hidePane();
 
-              // Exclude child nodes from newIDs if their parent way was also copied.
-              var parents = context.graph().parentWays(newEntity);
-              var parentCopied = false;
-              for (var i = 0; i < parents.length; i++) {
-                  if (originals[parents[i].id]) {
-                      parentCopied = true;
-                      break;
-                  }
-              }
+                  _pane.style('display', 'block')
+                      .style('right', '-500px')
+                      .transition()
+                      .duration(200)
+                      .style('right', '0px');
 
-              if (!parentCopied) {
-                  newIDs.push(newEntity.id);
+              } else {
+                  _pane.style('right', '0px')
+                      .transition()
+                      .duration(200)
+                      .style('right', '-500px')
+                      .on('end', function() {
+                          select(this).style('display', 'none');
+                      });
               }
           }
-
-          // Put pasted objects where mouse pointer is..
-          var center = projection(extent.center());
-          var delta = geoVecSubtract(mouse$$1, center);
-
-          context.perform(actionMove(newIDs, delta, projection));
-          context.enter(modeMove$$1(context, newIDs, baseGraph));
-      }
-
-
-      function behavior() {
-          context.keybinding().on(uiCmd('⌘V'), doPaste);
-          return behavior;
-      }
-
-
-      behavior.off = function() {
-          context.keybinding().off(uiCmd('⌘V'));
       };
 
+      uiHelp.renderToggleButton = function(selection) {
 
-      return behavior;
-  }
-
-  function behaviorSelect(context) {
-      var lastMouse = null;
-      var suppressMenu = true;
-      var tolerance = 4;
-      var p1 = null;
-
-
-      function point$$1() {
-          return mouse(context.container().node());
-      }
-
-
-      function keydown() {
-          var e = event;
-          if (e && e.shiftKey) {
-              context.surface()
-                  .classed('behavior-multiselect', true);
-          }
-
-          if (e && e.keyCode === 93) {  // context menu
-              e.preventDefault();
-              e.stopPropagation();
-          }
-      }
-
-
-      function keyup() {
-          var e = event;
-          if (!e || !e.shiftKey) {
-              context.surface()
-                  .classed('behavior-multiselect', false);
-          }
-
-
-          if (e && e.keyCode === 93) {  // context menu
-              e.preventDefault();
-              e.stopPropagation();
-              contextmenu();
-          }
-      }
-
-
-      function mousedown() {
-          if (!p1) p1 = point$$1();
-          select(window)
-              .on('mouseup.select', mouseup, true);
-
-          var isShowAlways = +context.storage('edit-menu-show-always') === 1;
-          suppressMenu = !isShowAlways;
-      }
-
-
-      function mousemove() {
-          if (event) lastMouse = event;
-      }
+          _toggleButton = selection.append('button')
+              .attr('tabindex', -1)
+              .on('click', uiHelp.togglePane)
+              .call(svgIcon('#iD-icon-help', 'light'))
+              .call(paneTooltip);
+      };
 
 
-      function mouseup() {
-          click();
-      }
+      uiHelp.renderPane = function(selection) {
 
+          function clickHelp(d, i) {
+              var rtl = (textDirection === 'rtl');
+              content.property('scrollTop', 0);
+              doctitle.html(d.title);
 
-      function contextmenu() {
-          var e = event;
-          e.preventDefault();
-          e.stopPropagation();
+              body.html(d.html);
+              body.selectAll('a')
+                  .attr('target', '_blank');
+              menuItems.classed('selected', function(m) {
+                  return m.title === d.title;
+              });
 
-          if (!+e.clientX && !+e.clientY) {
-              if (lastMouse) {
-                  e.sourceEvent = lastMouse;
+              nav.html('');
+              if (rtl) {
+                  nav.call(drawNext).call(drawPrevious);
               } else {
-                  return;
+                  nav.call(drawPrevious).call(drawNext);
               }
-          }
-
-          if (!p1) p1 = point$$1();
-          suppressMenu = false;
-          click();
-      }
-
-
-      function click() {
-          select(window)
-              .on('mouseup.select', null, true);
-
-          if (!p1) return;
-          var p2 = point$$1();
-          var dist = geoVecLength(p1, p2);
-
-          p1 = null;
-          if (dist > tolerance) {
-              return;
-          }
-
-          var isMultiselect = event.shiftKey || select('#surface .lasso').node();
-          var isShowAlways = +context.storage('edit-menu-show-always') === 1;
-          var datum = event.target.__data__ || (lastMouse && lastMouse.target.__data__);
-          var mode = context.mode();
-
-          var entity = datum && datum.properties && datum.properties.entity;
-          if (entity) datum = entity;
-
-          if (datum && datum.type === 'midpoint') {
-              datum = datum.parents[0];
-          }
 
-          if (datum instanceof osmEntity$$1) {    // clicked an entity..
-              var selectedIDs = context.selectedIDs();
-              context.selectedNoteID(null);
-              context.selectedErrorID(null);
 
-              if (!isMultiselect) {
-                  if (selectedIDs.length > 1 && (!suppressMenu && !isShowAlways)) {
-                      // multiple things already selected, just show the menu...
-                      mode.suppressMenu(false).reselect();
-                  } else {
-                      // select a single thing..
-                      context.enter(modeSelect(context, [datum.id]).suppressMenu(suppressMenu));
-                  }
+              function drawNext(selection) {
+                  if (i < docs.length - 1) {
+                      var nextLink = selection
+                          .append('a')
+                          .attr('class', 'next')
+                          .on('click', function() {
+                              clickHelp(docs[i + 1], i + 1);
+                          });
 
-              } else {
-                  if (selectedIDs.indexOf(datum.id) !== -1) {
-                      // clicked entity is already in the selectedIDs list..
-                      if (!suppressMenu && !isShowAlways) {
-                          // don't deselect clicked entity, just show the menu.
-                          mode.suppressMenu(false).reselect();
-                      } else {
-                          // deselect clicked entity, then reenter select mode or return to browse mode..
-                          selectedIDs = without(selectedIDs, datum.id);
-                          context.enter(selectedIDs.length ? modeSelect(context, selectedIDs) : modeBrowse(context));
-                      }
-                  } else {
-                      // clicked entity is not in the selected list, add it..
-                      selectedIDs = selectedIDs.concat([datum.id]);
-                      context.enter(modeSelect(context, selectedIDs).suppressMenu(suppressMenu));
+                      nextLink
+                          .append('span')
+                          .text(docs[i + 1].title)
+                          .call(svgIcon((rtl ? '#iD-icon-backward' : '#iD-icon-forward'), 'inline'));
                   }
               }
 
-          } else if (datum && datum.__featurehash__ && !isMultiselect) {    // clicked Data..
-              context
-                  .selectedNoteID(null)
-                  .enter(modeSelectData$$1(context, datum));
 
-          } else if (datum instanceof osmNote && !isMultiselect) {    // clicked a Note..
-              context
-                  .selectedNoteID(datum.id)
-                  .enter(modeSelectNote$$1(context, datum.id));
-          } else if (datum instanceof krError & !isMultiselect) {     // clicked a krError error
-              context
-                  .selectedErrorID(datum.id)
-                  .enter(modeSelectError$$1(context, datum.id));
-          } else {    // clicked nothing..
-              context.selectedNoteID(null);
-              context.selectedErrorID(null);
-              if (!isMultiselect && mode.id !== 'browse') {
-                  context.enter(modeBrowse(context));
+              function drawPrevious(selection) {
+                  if (i > 0) {
+                      var prevLink = selection
+                          .append('a')
+                          .attr('class', 'previous')
+                          .on('click', function() {
+                              clickHelp(docs[i - 1], i - 1);
+                          });
+
+                      prevLink
+                          .call(svgIcon((rtl ? '#iD-icon-forward' : '#iD-icon-backward'), 'inline'))
+                          .append('span')
+                          .text(docs[i - 1].title);
+                  }
               }
           }
 
-          // reset for next time..
-          suppressMenu = true;
-      }
-
-
-      function behavior(selection$$1) {
-          lastMouse = null;
-          suppressMenu = true;
-          p1 = null;
 
-          select(window)
-              .on('keydown.select', keydown)
-              .on('keyup.select', keyup)
-              .on('contextmenu.select-window', function() {
-                  // Edge and IE really like to show the contextmenu on the
-                  // menubar when user presses a keyboard menu button
-                  // even after we've already preventdefaulted the key event.
-                  var e = event;
-                  if (+e.clientX === 0 && +e.clientY === 0) {
-                      event.preventDefault();
-                      event.stopPropagation();
-                  }
-              });
+          function clickWalkthrough() {
+              if (context.inIntro()) return;
+              context.container().call(uiIntro(context));
+              uiHelp.setVisible(false);
+          }
 
-          selection$$1
-              .on('mousedown.select', mousedown)
-              .on('mousemove.select', mousemove)
-              .on('contextmenu.select', contextmenu);
 
-          if (event && event.shiftKey) {
-              context.surface()
-                  .classed('behavior-multiselect', true);
+          function clickShortcuts() {
+              context.container().call(uiShortcuts(context), true);
           }
-      }
 
 
-      behavior.off = function(selection$$1) {
-          select(window)
-              .on('keydown.select', null)
-              .on('keyup.select', null)
-              .on('contextmenu.select-window', null)
-              .on('mouseup.select', null, true);
+          _pane = selection.append('div')
+              .attr('class', 'help-wrap map-pane fillL hide');
 
-          selection$$1
-              .on('mousedown.select', null)
-              .on('mousemove.select', null)
-              .on('contextmenu.select', null);
+          var heading = _pane
+              .append('div')
+              .attr('class', 'pane-heading');
 
-          context.surface()
-              .classed('behavior-multiselect', false);
-      };
+          var doctitle = heading
+              .append('h2')
+              .text(t('help.title'));
 
+          heading
+              .append('button')
+              .on('click', uiHelp.hidePane)
+              .call(svgIcon('#iD-icon-close'));
 
-      return behavior;
-  }
 
-  function modeAddArea$$1(context) {
-      var mode = {
-          id: 'add-area',
-          button: 'area',
-          title: t('modes.add_area.title'),
-          description: t('modes.add_area.description'),
-          key: '3'
-      };
+          var content = _pane
+              .append('div')
+              .attr('class', 'pane-content');
 
-      var behavior = behaviorAddWay(context)
-          .tail(t('modes.add_area.tail'))
-          .on('start', start)
-          .on('startFromWay', startFromWay)
-          .on('startFromNode', startFromNode);
+          var toc = content
+              .append('ul')
+              .attr('class', 'toc');
 
-      var defaultTags = { area: 'yes' };
+          var menuItems = toc.selectAll('li')
+              .data(docs)
+              .enter()
+              .append('li')
+              .append('a')
+              .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);
 
-      function actionClose(wayId) {
-          return function (graph) {
-              return graph.replace(graph.entity(wayId).close());
-          };
-      }
+          shortcuts
+              .append('div')
+              .text(t('shortcuts.title'));
 
+          var walkthrough = toc
+              .append('li')
+              .attr('class', 'walkthrough')
+              .append('a')
+              .on('click', clickWalkthrough);
 
-      function start(loc) {
-          var startGraph = context.graph();
-          var node = osmNode({ loc: loc });
-          var way = osmWay({ tags: defaultTags });
+          walkthrough
+              .append('svg')
+              .attr('class', 'logo logo-walkthrough')
+              .append('use')
+              .attr('xlink:href', '#iD-logo-walkthrough');
 
-          context.perform(
-              actionAddEntity(node),
-              actionAddEntity(way),
-              actionAddVertex(way.id, node.id),
-              actionClose(way.id)
-          );
+          walkthrough
+              .append('div')
+              .text(t('splash.walkthrough'));
 
-          context.enter(modeDrawArea(context, way.id, startGraph));
-      }
 
+          var helpContent = content
+              .append('div')
+              .attr('class', 'left-content');
 
-      function startFromWay(loc, edge) {
-          var startGraph = context.graph();
-          var node = osmNode({ loc: loc });
-          var way = osmWay({ tags: defaultTags });
+          var body = helpContent
+              .append('div')
+              .attr('class', 'body');
 
-          context.perform(
-              actionAddEntity(node),
-              actionAddEntity(way),
-              actionAddVertex(way.id, node.id),
-              actionClose(way.id),
-              actionAddMidpoint({ loc: loc, edge: edge }, node)
-          );
+          var nav = helpContent
+              .append('div')
+              .attr('class', 'nav');
 
-          context.enter(modeDrawArea(context, way.id, startGraph));
-      }
+          clickHelp(docs[0], 0);
 
+          context.keybinding()
+              .on(key, uiHelp.togglePane);
 
-      function startFromNode(node) {
-          var startGraph = context.graph();
-          var way = osmWay({ tags: defaultTags });
+      };
 
-          context.perform(
-              actionAddEntity(way),
-              actionAddVertex(way.id, node.id),
-              actionClose(way.id)
-          );
+      return uiHelp;
+  }
+
+  function localeDateString(s) {
+      if (!s) return null;
+      var detected = utilDetect();
+      var options = { day: 'numeric', month: 'short', year: 'numeric' };
+      var d = new Date(s);
+      if (isNaN(d.getTime())) return null;
+      return d.toLocaleDateString(detected.locale, options);
+  }
 
-          context.enter(modeDrawArea(context, way.id, startGraph));
+  function vintageRange(vintage) {
+      var s;
+      if (vintage.start || vintage.end) {
+          s = (vintage.start || '?');
+          if (vintage.start !== vintage.end) {
+              s += ' - ' + (vintage.end || '?');
+          }
       }
+      return s;
+  }
 
 
-      mode.enter = function() {
-          context.install(behavior);
-      };
+  function rendererBackgroundSource(data) {
+      var source = clone(data);
+      var offset = [0, 0];
+      var name = source.name;
+      var description = source.description;
+      var best = !!source.best;
+      var template = source.template;
 
+      source.tileSize = data.tileSize || 256;
+      source.zoomExtent = data.zoomExtent || [0, 22];
+      source.overzoom = data.overzoom !== false;
 
-      mode.exit = function() {
-          context.uninstall(behavior);
+      source.offset = function(_) {
+          if (!arguments.length) return offset;
+          offset = _;
+          return source;
       };
 
 
-      return mode;
-  }
+      source.nudge = function(_, zoomlevel) {
+          offset[0] += _[0] / Math.pow(2, zoomlevel);
+          offset[1] += _[1] / Math.pow(2, zoomlevel);
+          return source;
+      };
 
-  function modeAddLine$$1(context) {
-      var mode = {
-          id: 'add-line',
-          button: 'line',
-          title: t('modes.add_line.title'),
-          description: t('modes.add_line.description'),
-          key: '2'
+
+      source.name = function() {
+          var id_safe = source.id.replace(/\./g, '<TX_DOT>');
+          return t('imagery.' + id_safe + '.name', { default: name });
       };
 
-      var behavior = behaviorAddWay(context)
-          .tail(t('modes.add_line.tail'))
-          .on('start', start)
-          .on('startFromWay', startFromWay)
-          .on('startFromNode', startFromNode);
 
+      source.description = function() {
+          var id_safe = source.id.replace(/\./g, '<TX_DOT>');
+          return t('imagery.' + id_safe + '.description', { default: description });
+      };
 
-      function start(loc) {
-          var startGraph = context.graph();
-          var node = osmNode({ loc: loc });
-          var way = osmWay();
 
-          context.perform(
-              actionAddEntity(node),
-              actionAddEntity(way),
-              actionAddVertex(way.id, node.id)
-          );
+      source.best = function() {
+          return best;
+      };
 
-          context.enter(modeDrawLine(context, way.id, startGraph));
-      }
 
+      source.area = function() {
+          if (!data.polygon) return Number.MAX_VALUE;  // worldwide
+          var area = d3_geoArea({ type: 'MultiPolygon', coordinates: [ data.polygon ] });
+          return isNaN(area) ? 0 : area;
+      };
 
-      function startFromWay(loc, edge) {
-          var startGraph = context.graph();
-          var node = osmNode({ loc: loc });
-          var way = osmWay();
 
-          context.perform(
-              actionAddEntity(node),
-              actionAddEntity(way),
-              actionAddVertex(way.id, node.id),
-              actionAddMidpoint({ loc: loc, edge: edge }, node)
-          );
+      source.imageryUsed = function() {
+          return name || source.id;
+      };
 
-          context.enter(modeDrawLine(context, way.id, startGraph));
-      }
 
+      source.template = function(_) {
+          if (!arguments.length) return template;
+          if (source.id === 'custom') template = _;
+          return source;
+      };
 
-      function startFromNode(node) {
-          var startGraph = context.graph();
-          var way = osmWay();
 
-          context.perform(
-              actionAddEntity(way),
-              actionAddVertex(way.id, node.id)
-          );
+      source.url = function(coord) {
+          if (this.type === 'wms') {
+              var tileToProjectedCoords = (function(x, y, z) {
+                  //polyfill for IE11, PhantomJS
+                  var sinh = Math.sinh || function(x) {
+                      var y = Math.exp(x);
+                      return (y - 1 / y) / 2;
+                  };
 
-          context.enter(modeDrawLine(context, way.id, startGraph));
-      }
+                  var zoomSize = Math.pow(2, z);
+                  var lon = x / zoomSize * Math.PI * 2 - Math.PI;
+                  var lat = Math.atan(sinh(Math.PI * (1 - 2 * y / zoomSize)));
 
+                  switch (this.projection) {
+                      case 'EPSG:4326':
+                          return {
+                              x: lon * 180 / Math.PI,
+                              y: lat * 180 / Math.PI
+                          };
+                      default: // EPSG:3857 and synonyms
+                          var mercCoords = mercatorRaw(lon, lat);
+                          return {
+                              x: 20037508.34 / Math.PI * mercCoords[0],
+                              y: 20037508.34 / Math.PI * mercCoords[1]
+                          };
+                  }
+              }).bind(this);
 
-      mode.enter = function() {
-          context.install(behavior);
+              var tileSize = this.tileSize;
+              var projection = this.projection;
+              var minXmaxY = tileToProjectedCoords(coord[0], coord[1], coord[2]);
+              var maxXminY = tileToProjectedCoords(coord[0]+1, coord[1]+1, coord[2]);
+              return template.replace(/\{(\w+)\}/g, function (token, key) {
+                switch (key) {
+                  case 'width':
+                  case 'height':
+                    return tileSize;
+                  case 'proj':
+                    return projection;
+                  case 'wkid':
+                    return projection.replace(/^EPSG:/, '');
+                  case 'bbox':
+                    return minXmaxY.x + ',' + maxXminY.y + ',' + maxXminY.x + ',' + minXmaxY.y;
+                  case 'w':
+                    return minXmaxY.x;
+                  case 's':
+                    return maxXminY.y;
+                  case 'n':
+                    return maxXminY.x;
+                  case 'e':
+                    return minXmaxY.y;
+                  default:
+                    return token;
+                }
+              });
+          }
+          return template
+              .replace('{x}', coord[0])
+              .replace('{y}', coord[1])
+              // TMS-flipped y coordinate
+              .replace(/\{[t-]y\}/, Math.pow(2, coord[2]) - coord[1] - 1)
+              .replace(/\{z(oom)?\}/, coord[2])
+              .replace(/\{switch:([^}]+)\}/, function(s, r) {
+                  var subdomains = r.split(',');
+                  return subdomains[(coord[0] + coord[1]) % subdomains.length];
+              })
+              .replace('{u}', function() {
+                  var u = '';
+                  for (var zoom = coord[2]; zoom > 0; zoom--) {
+                      var b = 0;
+                      var mask = 1 << (zoom - 1);
+                      if ((coord[0] & mask) !== 0) b++;
+                      if ((coord[1] & mask) !== 0) b += 2;
+                      u += b.toString();
+                  }
+                  return u;
+              });
       };
 
 
-      mode.exit = function() {
-          context.uninstall(behavior);
+      source.validZoom = function(z) {
+          return source.zoomExtent[0] <= z &&
+              (source.overzoom || source.zoomExtent[1] > z);
       };
 
-      return mode;
-  }
 
-  function modeAddPoint$$1(context) {
-      var mode = {
-          id: 'add-point',
-          button: 'point',
-          title: t('modes.add_point.title'),
-          description: t('modes.add_point.description'),
-          key: '1'
+      source.isLocatorOverlay = function() {
+          return source.id === 'mapbox_locator_overlay';
       };
 
-      var behavior = behaviorDraw(context)
-          .tail(t('modes.add_point.tail'))
-          .on('click', add)
-          .on('clickWay', addWay)
-          .on('clickNode', addNode)
-          .on('cancel', cancel)
-          .on('finish', cancel);
+
+      /* hides a source from the list, but leaves it available for use */
+      source.isHidden = function() {
+          return source.id === 'DigitalGlobe-Premium-vintage' ||
+              source.id === 'DigitalGlobe-Standard-vintage';
+      };
 
 
-      function add(loc) {
-          var node = osmNode({ loc: loc });
+      source.copyrightNotices = function() {};
 
-          context.perform(
-              actionAddEntity(node),
-              t('operations.add.annotation.point')
-          );
 
-          context.enter(
-              modeSelect(context, [node.id]).newFeature(true)
-          );
-      }
+      source.getMetadata = function(center, tileCoord, callback) {
+          var vintage = {
+              start: localeDateString(source.startDate),
+              end: localeDateString(source.endDate)
+          };
+          vintage.range = vintageRange(vintage);
 
+          var metadata = { vintage: vintage };
+          callback(null, metadata);
+      };
 
-      function addWay(loc, edge) {
-          var node =  osmNode();
 
-          context.perform(
-              actionAddMidpoint({loc: loc, edge: edge}, node),
-              t('operations.add.annotation.vertex')
-          );
+      return source;
+  }
 
-          context.enter(
-              modeSelect(context, [node.id]).newFeature(true)
-          );
-      }
 
+  rendererBackgroundSource.Bing = function(data, dispatch) {
+      // http://msdn.microsoft.com/en-us/library/ff701716.aspx
+      // http://msdn.microsoft.com/en-us/library/ff701701.aspx
 
-      function addNode(node) {
-          add(node.loc);
-      }
+      data.template = 'https://ecn.t{switch:0,1,2,3}.tiles.virtualearth.net/tiles/a{u}.jpeg?g=587&mkt=en-gb&n=z';
 
+      var bing = rendererBackgroundSource(data);
+      var key = 'Arzdiw4nlOJzRwOz__qailc8NiR31Tt51dN2D7cm57NrnceZnCpgOkmJhNpGoppU'; // Same as P2 and JOSM
+      var url = 'https://dev.virtualearth.net/REST/v1/Imagery/Metadata/Aerial?include=ImageryProviders&key=' +
+              key;
+      var cache = {};
+      var inflight = {};
+      var providers = [];
 
-      function cancel() {
-          context.enter(modeBrowse(context));
-      }
+      d3_json(url, function(err, json) {
+          providers = json.resourceSets[0].resources[0].imageryProviders.map(function(provider) {
+              return {
+                  attribution: provider.attribution,
+                  areas: provider.coverageAreas.map(function(area) {
+                      return {
+                          zoom: [area.zoomMin, area.zoomMax],
+                          extent: geoExtent([area.bbox[1], area.bbox[0]], [area.bbox[3], area.bbox[2]])
+                      };
+                  })
+              };
+          });
+          dispatch.call('change');
+      });
 
 
-      mode.enter = function() {
-          context.install(behavior);
+      bing.copyrightNotices = function(zoom, extent) {
+          zoom = Math.min(zoom, 21);
+          return providers.filter(function(provider) {
+              return some(provider.areas, function(area) {
+                  return extent.intersects(area.extent) &&
+                      area.zoom[0] <= zoom &&
+                      area.zoom[1] >= zoom;
+              });
+          }).map(function(provider) {
+              return provider.attribution;
+          }).join(', ');
       };
 
 
-      mode.exit = function() {
-          context.uninstall(behavior);
-      };
+      bing.getMetadata = function(center, tileCoord, callback) {
+          var tileId = tileCoord.slice(0, 3).join('/');
+          var zoom = Math.min(tileCoord[2], 21);
+          var centerPoint = center[1] + ',' + center[0];  // lat,lng
+          var url = 'https://dev.virtualearth.net/REST/v1/Imagery/Metadata/Aerial/' + centerPoint +
+                  '?zl=' + zoom + '&key=' + key;
 
+          if (inflight[tileId]) return;
 
-      return mode;
-  }
+          if (!cache[tileId]) {
+              cache[tileId] = {};
+          }
+          if (cache[tileId] && cache[tileId].metadata) {
+              return callback(null, cache[tileId].metadata);
+          }
 
-  function modeAddNote$$1(context) {
-      var mode = {
-          id: 'add-note',
-          button: 'note',
-          title: t('modes.add_note.title'),
-          description: t('modes.add_note.description'),
-          key: '4'
+          inflight[tileId] = true;
+          d3_json(url, function(error, result) {
+              delete inflight[tileId];
+
+              var err;
+              if (error) {
+                  err = error;
+              } else if (!result && 'Unknown Error') {
+                  err = result.errorDetails;
+              }
+              if (err) {
+                  return callback(err);
+              } else {
+                  var vintage = {
+                      start: localeDateString(result.resourceSets[0].resources[0].vintageStart),
+                      end: localeDateString(result.resourceSets[0].resources[0].vintageEnd)
+                  };
+                  vintage.range = vintageRange(vintage);
+
+                  var metadata = { vintage: vintage };
+                  cache[tileId].metadata = metadata;
+                  return callback(null, metadata);
+              }
+          });
       };
 
-      var behavior = behaviorDraw(context)
-          .tail(t('modes.add_note.tail'))
-          .on('click', add)
-          .on('cancel', cancel)
-          .on('finish', cancel);
 
+      bing.terms_url = 'https://blog.openstreetmap.org/2010/11/30/microsoft-imagery-details';
 
-      function add(loc) {
-          var osm = services.osm;
-          if (!osm) return;
 
-          var note = osmNote({ loc: loc, status: 'open', comments: [] });
-          osm.replaceNote(note);
+      return bing;
+  };
 
-          // force a reraw (there is no history change that would otherwise do this)
-          context.pan([0,0]);
 
-          context
-              .selectedNoteID(note.id)
-              .enter(modeSelectNote$$1(context, note.id).newFeature(true));
+
+  rendererBackgroundSource.Esri = function(data) {
+      // in addition to using the tilemap at zoom level 20, overzoom real tiles - #4327 (deprecated technique, but it works)
+      if (data.template.match(/blankTile/) === null) {
+          data.template = data.template + '?blankTile=false';
       }
 
+      var esri = rendererBackgroundSource(data);
+      var cache = {};
+      var inflight = {};
+      var _prevCenter;
 
-      function cancel() {
-          context.enter(modeBrowse(context));
-      }
+      // use a tilemap service to set maximum zoom for esri tiles dynamically
+      // https://developers.arcgis.com/documentation/tiled-elevation-service/
+      esri.fetchTilemap = function(center) {
+          // skip if we have already fetched a tilemap within 5km
+          if (_prevCenter && geoSphericalDistance(center, _prevCenter) < 5000) return;
+          _prevCenter = center;
 
+          // tiles are available globally to zoom level 19, afterward they may or may not be present
+          var z = 20;
 
-      mode.enter = function() {
-          context.install(behavior);
-      };
+          // first generate a random url using the template
+          var dummyUrl = esri.url([1,2,3]);
 
+          // calculate url z/y/x from the lat/long of the center of the map
+          var x = (Math.floor((center[0] + 180) / 360 * Math.pow(2, z)));
+          var y = (Math.floor((1 - Math.log(Math.tan(center[1] * Math.PI / 180) + 1 / Math.cos(center[1] * Math.PI / 180)) / Math.PI) / 2 * Math.pow(2, z)));
 
-      mode.exit = function() {
-          context.uninstall(behavior);
-      };
+          // fetch an 8x8 grid to leverage cache
+          var tilemapUrl = dummyUrl.replace(/tile\/[0-9]+\/[0-9]+\/[0-9]+\?blankTile=false/, 'tilemap') + '/' + z + '/' + y + '/' + x + '/8/8';
 
+          // make the request and introspect the response from the tilemap server
+          d3_json(tilemapUrl, function (err, tilemap) {
+              if (err || !tilemap) return;
 
-      return mode;
-  }
+              var hasTiles = true;
+              for (var i = 0; i < tilemap.data.length; i++) {
+                  // 0 means an individual tile in the grid doesn't exist
+                  if (!tilemap.data[i]) {
+                      hasTiles = false;
+                      break;
+                  }
+              }
 
-  function modeDrawArea(context, wayId, startGraph) {
-      var mode = {
-          button: 'area',
-          id: 'draw-area'
+              // if any tiles are missing at level 20 we restrict maxZoom to 19
+              esri.zoomExtent[1] = (hasTiles ? 22 : 19);
+          });
       };
 
-      var behavior;
+      esri.getMetadata = function(center, tileCoord, callback) {
+          var tileId = tileCoord.slice(0, 3).join('/');
+          var zoom = Math.min(tileCoord[2], esri.zoomExtent[1]);
+          var centerPoint = center[0] + ',' + center[1];  // long, lat (as it should be)
+          var unknown = t('info_panels.background.unknown');
+          var metadataLayer;
+          var vintage = {};
+          var metadata = {};
 
+          if (inflight[tileId]) return;
 
-      mode.enter = function() {
-          var way = context.entity(wayId);
+          switch (true) {
+              case (zoom >= 20 && esri.id === 'EsriWorldImageryClarity'):
+                  metadataLayer = 4;
+                  break;
+              case zoom >= 19:
+                  metadataLayer = 3;
+                  break;
+              case zoom >= 17:
+                  metadataLayer = 2;
+                  break;
+              case zoom >= 13:
+                  metadataLayer = 0;
+                  break;
+              default:
+                  metadataLayer = 99;
+          }
 
-          behavior = behaviorDrawWay(context, wayId, undefined, mode, startGraph)
-              .tail(t('modes.draw_area.tail'));
+          var url;
+          // build up query using the layer appropriate to the current zoom
+          if (esri.id === 'EsriWorldImagery') {
+              url = 'https://services.arcgisonline.com/arcgis/rest/services/World_Imagery/MapServer/';
+          } else if (esri.id === 'EsriWorldImageryClarity') {
+              url = 'https://serviceslab.arcgisonline.com/arcgis/rest/services/Clarity_World_Imagery/MapServer/';
+          }
 
-          var addNode = behavior.addNode;
+          url += metadataLayer + '/query?returnGeometry=false&geometry=' + centerPoint + '&inSR=4326&geometryType=esriGeometryPoint&outFields=*&f=json';
 
-          behavior.addNode = function(node, d) {
-              var length = way.nodes.length;
-              var penultimate = length > 2 ? way.nodes[length - 2] : null;
+          if (!cache[tileId]) {
+              cache[tileId] = {};
+          }
+          if (cache[tileId] && cache[tileId].metadata) {
+              return callback(null, cache[tileId].metadata);
+          }
 
-              if (node.id === way.first() || node.id === penultimate) {
-                  behavior.finish();
-              } else {
-                  addNode(node, d);
-              }
-          };
+          // accurate metadata is only available >= 13
+          if (metadataLayer === 99) {
+              vintage = {
+                  start: null,
+                  end: null,
+                  range: null
+              };
+              metadata = {
+                  vintage: null,
+                  source: unknown,
+                  description: unknown,
+                  resolution: unknown,
+                  accuracy: unknown
+              };
+
+              callback(null, metadata);
+
+          } else {
+              inflight[tileId] = true;
+              d3_json(url, function(error, result) {
+                  delete inflight[tileId];
+
+                  var err;
+                  if (error) {
+                      err = error;
+                  } else if (!result) {
+                      err = 'Unknown Error';
+                  } else if (result.features && result.features.length < 1) {
+                      err = 'No Results';
+                  } else if (result.error && result.error.message) {
+                      err = result.error.message;
+                  }
 
-          context.install(behavior);
-      };
+                  if (err) {
+                      return callback(err);
+                  } else {
+                      // pass through the discrete capture date from metadata
+                      var captureDate = localeDateString(result.features[0].attributes.SRC_DATE2);
+                      vintage = {
+                          start: captureDate,
+                          end: captureDate,
+                          range: captureDate
+                      };
+                      metadata = {
+                          vintage: vintage,
+                          source: clean(result.features[0].attributes.NICE_NAME),
+                          description: clean(result.features[0].attributes.NICE_DESC),
+                          resolution: clean(result.features[0].attributes.SRC_RES),
+                          accuracy: clean(result.features[0].attributes.SRC_ACC)
+                      };
 
+                      // append units - meters
+                      if (isFinite(metadata.resolution)) {
+                          metadata.resolution += ' m';
+                      }
+                      if (isFinite(metadata.accuracy)) {
+                          metadata.accuracy += ' m';
+                      }
 
-      mode.exit = function() {
-          context.uninstall(behavior);
-      };
+                      cache[tileId].metadata = metadata;
+                      return callback(null, metadata);
+                  }
+              });
+          }
 
 
-      mode.selectedIDs = function() {
-          return [wayId];
+          function clean(val) {
+              return String(val).trim() || unknown;
+          }
       };
 
+      return esri;
+  };
 
-      mode.activeID = function() {
-          return (behavior && behavior.activeID()) || [];
-      };
 
+  rendererBackgroundSource.None = function() {
+      var source = rendererBackgroundSource({ id: 'none', template: '' });
 
-      return mode;
-  }
 
-  function modeDrawLine(context, wayID, startGraph, affix, continuing) {
-      var mode = {
-          button: 'line',
-          id: 'draw-line'
+      source.name = function() {
+          return t('background.none');
       };
 
-      var behavior;
 
-      mode.isContinuing = continuing;
+      source.imageryUsed = function() {
+          return null;
+      };
 
-      mode.enter = function() {
-          var way = context.entity(wayID);
-          var index = (affix === 'prefix') ? 0 : undefined;
-          var headID = (affix === 'prefix') ? way.first() : way.last();
 
-          behavior = behaviorDrawWay(context, wayID, index, mode, startGraph, continuing)
-              .tail(t('modes.draw_line.tail'));
+      source.area = function() {
+          return -1;  // sources in background pane are sorted by area
+      };
 
-          var addNode = behavior.addNode;
-          behavior.addNode = function(node, d) {
-              if (node.id === headID) {
-                  behavior.finish();
-              } else {
-                  addNode(node, d);
-              }
-          };
 
-          context.install(behavior);
-      };
+      return source;
+  };
 
 
-      mode.exit = function() {
-          context.uninstall(behavior);
-      };
+  rendererBackgroundSource.Custom = function(template) {
+      var source = rendererBackgroundSource({ id: 'custom', template: template });
 
 
-      mode.selectedIDs = function() {
-          return [wayID];
+      source.name = function() {
+          return t('background.custom');
       };
 
 
-      mode.activeID = function() {
-          return (behavior && behavior.activeID()) || [];
+      source.imageryUsed = function() {
+          return 'Custom (' + source.template() + ')';
       };
 
-      return mode;
-  }
 
-  function modeMove$$1(context, entityIDs, baseGraph) {
-      var mode = {
-          id: 'move',
-          button: 'browse'
+      source.area = function() {
+          return -2;  // sources in background pane are sorted by area
       };
 
-      var keybinding = utilKeybinding('move');
-      var behaviors = [
-          behaviorEdit(context),
-          operationCircularize(entityIDs, context).behavior,
-          operationDelete(entityIDs, context).behavior,
-          operationOrthogonalize(entityIDs, context).behavior,
-          operationReflectLong(entityIDs, context).behavior,
-          operationReflectShort(entityIDs, context).behavior,
-          operationRotate(entityIDs, context).behavior
-      ];
-      var annotation = entityIDs.length === 1 ?
-          t('operations.move.annotation.' + context.geometry(entityIDs[0])) :
-          t('operations.move.annotation.multiple');
-
-      var _prevGraph;
-      var _cache;
-      var _origin;
-      var _nudgeInterval;
 
+      return source;
+  };
 
-      function doMove(nudge) {
-          nudge = nudge || [0, 0];
+  function rendererTileLayer(context) {
+      var transformProp = utilPrefixCSSProperty('Transform');
+      var tiler = utilTiler();
 
-          var fn;
-          if (_prevGraph !== context.graph()) {
-              _cache = {};
-              _origin = context.map().mouseCoordinates();
-              fn = context.perform;
-          } else {
-              fn = context.overwrite;
-          }
+      var _tileSize = 256;
+      var _projection;
+      var _cache = {};
+      var _tileOrigin;
+      var _zoom;
+      var _source;
 
-          var currMouse = context.mouse();
-          var origMouse = context.projection(_origin);
-          var delta = geoVecSubtract(geoVecSubtract(currMouse, origMouse), nudge);
 
-          fn(actionMove(entityIDs, delta, context.projection, _cache), annotation);
-          _prevGraph = context.graph();
+      function tileSizeAtZoom(d, z) {
+          var EPSILON = 0.002;    // close seams
+          return ((_tileSize * Math.pow(2, z - d[2])) / _tileSize) + EPSILON;
       }
 
 
-      function startNudge(nudge) {
-          if (_nudgeInterval) window.clearInterval(_nudgeInterval);
-          _nudgeInterval = window.setInterval(function() {
-              context.pan(nudge);
-              doMove(nudge);
-          }, 50);
+      function atZoom(t, distance) {
+          var power = Math.pow(2, distance);
+          return [
+              Math.floor(t[0] * power),
+              Math.floor(t[1] * power),
+              t[2] + distance
+          ];
       }
 
 
-      function stopNudge() {
-          if (_nudgeInterval) {
-              window.clearInterval(_nudgeInterval);
-              _nudgeInterval = null;
+      function lookUp(d) {
+          for (var up = -1; up > -d[2]; up--) {
+              var tile = atZoom(d, up);
+              if (_cache[_source.url(tile)] !== false) {
+                  return tile;
+              }
           }
       }
 
 
-      function move() {
-          doMove();
-          var nudge = geoViewportEdge(context.mouse(), context.map().dimensions());
-          if (nudge) {
-              startNudge(nudge);
-          } else {
-              stopNudge();
+      function uniqueBy(a, n) {
+          var o = [];
+          var seen = {};
+          for (var i = 0; i < a.length; i++) {
+              if (seen[a[i][n]] === undefined) {
+                  o.push(a[i]);
+                  seen[a[i][n]] = true;
+              }
           }
+          return o;
       }
 
 
-      function finish() {
-          event.stopPropagation();
-          context.enter(modeSelect(context, entityIDs));
-          stopNudge();
+      function addSource(d) {
+          d.push(_source.url(d));
+          return d;
       }
 
 
-      function cancel() {
-          if (baseGraph) {
-              while (context.graph() !== baseGraph) context.pop();
-              context.enter(modeBrowse(context));
+      // Update tiles based on current state of `projection`.
+      function background(selection) {
+          _zoom = geoScaleToZoom(_projection.scale(), _tileSize);
+
+          var pixelOffset;
+          if (_source) {
+              pixelOffset = [
+                  _source.offset()[0] * Math.pow(2, _zoom),
+                  _source.offset()[1] * Math.pow(2, _zoom)
+              ];
           } else {
-              context.pop();
-              context.enter(modeSelect(context, entityIDs));
+              pixelOffset = [0, 0];
           }
-          stopNudge();
-      }
 
+          var translate = [
+              _projection.translate()[0] + pixelOffset[0],
+              _projection.translate()[1] + pixelOffset[1]
+          ];
 
-      function undone() {
-          context.enter(modeBrowse(context));
-      }
+          tiler
+              .scale(_projection.scale() * 2 * Math.PI)
+              .translate(translate);
 
+          _tileOrigin = [
+              _projection.scale() * Math.PI - translate[0],
+              _projection.scale() * Math.PI - translate[1]
+          ];
 
-      mode.enter = function() {
-          _origin = context.map().mouseCoordinates();
-          _prevGraph = null;
-          _cache = {};
+          render(selection);
+      }
 
-          behaviors.forEach(function(behavior) {
-              context.install(behavior);
-          });
 
-          context.surface()
-              .on('mousemove.move', move)
-              .on('click.move', finish);
+      // Derive the tiles onscreen, remove those offscreen and position them.
+      // Important that this part not depend on `_projection` because it's
+      // rentered when tiles load/error (see #644).
+      function render(selection) {
+          if (!_source) return;
+          var requests = [];
+          var showDebug = context.getDebug('tile') && !_source.overlay;
 
-          context.history()
-              .on('undone.move', undone);
+          if (_source.validZoom(_zoom)) {
+              tiler.skipNullIsland(!!_source.overlay);
 
-          keybinding
-              .on('⎋', cancel)
-              .on('↩', finish);
+              tiler().forEach(function(d) {
+                  addSource(d);
+                  if (d[3] === '') return;
+                  if (typeof d[3] !== 'string') return; // Workaround for #2295
+                  requests.push(d);
+                  if (_cache[d[3]] === false && lookUp(d)) {
+                      requests.push(addSource(lookUp(d)));
+                  }
+              });
 
-          select(document)
-              .call(keybinding);
-      };
+              requests = uniqueBy(requests, 3).filter(function(r) {
+                  // don't re-request tiles which have failed in the past
+                  return _cache[r[3]] !== false;
+              });
+          }
 
+          function load(d) {
+              _cache[d[3]] = true;
+              select(this)
+                  .on('error', null)
+                  .on('load', null)
+                  .classed('tile-loaded', true);
+              render(selection);
+          }
 
-      mode.exit = function() {
-          stopNudge();
+          function error(d) {
+              _cache[d[3]] = false;
+              select(this)
+                  .on('error', null)
+                  .on('load', null)
+                  .remove();
+              render(selection);
+          }
 
-          behaviors.forEach(function(behavior) {
-              context.uninstall(behavior);
-          });
+          function imageTransform(d) {
+              var ts = _tileSize * Math.pow(2, _zoom - d[2]);
+              var scale = tileSizeAtZoom(d, _zoom);
+              return 'translate(' +
+                  ((d[0] * ts) - _tileOrigin[0]) + 'px,' +
+                  ((d[1] * ts) - _tileOrigin[1]) + 'px) ' +
+                  'scale(' + scale + ',' + scale + ')';
+          }
 
-          context.surface()
-              .on('mousemove.move', null)
-              .on('click.move', null);
+          function tileCenter(d) {
+              var ts = _tileSize * Math.pow(2, _zoom - d[2]);
+              return [
+                  ((d[0] * ts) - _tileOrigin[0] + (ts / 2)),
+                  ((d[1] * ts) - _tileOrigin[1] + (ts / 2))
+              ];
+          }
 
-          context.history()
-              .on('undone.move', null);
+          function debugTransform(d) {
+              var coord = tileCenter(d);
+              return 'translate(' + coord[0] + 'px,' + coord[1] + 'px)';
+          }
 
-          select(document)
-              .call(keybinding.unbind);
-      };
 
+          // Pick a representative tile near the center of the viewport
+          // (This is useful for sampling the imagery vintage)
+          var dims = tiler.size();
+          var mapCenter = [dims[0] / 2, dims[1] / 2];
+          var minDist = Math.max(dims[0], dims[1]);
+          var nearCenter;
 
-      mode.selectedIDs = function() {
-          if (!arguments.length) return entityIDs;
-          // no assign
-          return mode;
-      };
+          requests.forEach(function(d) {
+              var c = tileCenter(d);
+              var dist = geoVecLength(c, mapCenter);
+              if (dist < minDist) {
+                  minDist = dist;
+                  nearCenter = d;
+              }
+          });
 
 
-      return mode;
-  }
+          var image = selection.selectAll('img')
+              .data(requests, function(d) { return d[3]; });
 
-  function modeRotate$$1(context, entityIDs) {
-      var mode = {
-          id: 'rotate',
-          button: 'browse'
-      };
+          image.exit()
+              .style(transformProp, imageTransform)
+              .classed('tile-removing', true)
+              .classed('tile-center', false)
+              .each(function() {
+                  var tile = select(this);
+                  window.setTimeout(function() {
+                      if (tile.classed('tile-removing')) {
+                          tile.remove();
+                      }
+                  }, 300);
+              });
 
-      var keybinding = utilKeybinding('rotate');
-      var behaviors = [
-          behaviorEdit(context),
-          operationCircularize(entityIDs, context).behavior,
-          operationDelete(entityIDs, context).behavior,
-          operationMove(entityIDs, context).behavior,
-          operationOrthogonalize(entityIDs, context).behavior,
-          operationReflectLong(entityIDs, context).behavior,
-          operationReflectShort(entityIDs, context).behavior
-      ];
-      var annotation = entityIDs.length === 1 ?
-          t('operations.rotate.annotation.' + context.geometry(entityIDs[0])) :
-          t('operations.rotate.annotation.multiple');
+          image.enter()
+            .append('img')
+              .attr('class', 'tile')
+              .attr('src', function(d) { return d[3]; })
+              .on('error', error)
+              .on('load', load)
+            .merge(image)
+              .style(transformProp, imageTransform)
+              .classed('tile-debug', showDebug)
+              .classed('tile-removing', false)
+              .classed('tile-center', function(d) { return d === nearCenter; });
 
-      var _prevGraph;
-      var _prevAngle;
-      var _prevTransform;
-      var _pivot;
 
 
-      function doRotate() {
-          var fn;
-          if (context.graph() !== _prevGraph) {
-              fn = context.perform;
-          } else {
-              fn = context.replace;
-          }
+          var debug = selection.selectAll('.tile-label-debug')
+              .data(showDebug ? requests : [], function(d) { return d[3]; });
 
-          // projection changed, recalculate _pivot
-          var projection = context.projection;
-          var currTransform = projection.transform();
-          if (!_prevTransform ||
-              currTransform.k !== _prevTransform.k ||
-              currTransform.x !== _prevTransform.x ||
-              currTransform.y !== _prevTransform.y) {
+          debug.exit()
+              .remove();
 
-              var nodes = utilGetAllNodes(entityIDs, context.graph());
-              var points = nodes.map(function(n) { return projection(n.loc); });
+          if (showDebug) {
+              var debugEnter = debug.enter()
+                  .append('div')
+                  .attr('class', 'tile-label-debug');
 
-              if (points.length === 1) {  // degenerate case
-                  _pivot = points[0];
-              } else if (points.length === 2) {
-                  _pivot = geoVecInterp(points[0], points[1], 0.5);
-              } else {
-                  _pivot = d3_polygonCentroid(d3_polygonHull(points));
-              }
-              _prevAngle = undefined;
-          }
+              debugEnter
+                  .append('div')
+                  .attr('class', 'tile-label-debug-coord');
+
+              debugEnter
+                  .append('div')
+                  .attr('class', 'tile-label-debug-vintage');
 
+              debug = debug.merge(debugEnter);
 
-          var currMouse = context.mouse();
-          var currAngle = Math.atan2(currMouse[1] - _pivot[1], currMouse[0] - _pivot[0]);
+              debug
+                  .style(transformProp, debugTransform);
 
-          if (typeof _prevAngle === 'undefined') _prevAngle = currAngle;
-          var delta = currAngle - _prevAngle;
+              debug
+                  .selectAll('.tile-label-debug-coord')
+                  .text(function(d) { return d[2] + ' / ' + d[0] + ' / ' + d[1]; });
 
-          fn(actionRotate(entityIDs, _pivot, delta, projection), annotation);
+              debug
+                  .selectAll('.tile-label-debug-vintage')
+                  .each(function(d) {
+                      var span = select(this);
+                      var center = context.projection.invert(tileCenter(d));
+                      _source.getMetadata(center, d, function(err, result) {
+                          span.text((result && result.vintage && result.vintage.range) ||
+                              t('info_panels.background.vintage') + ': ' + t('info_panels.background.unknown')
+                          );
+                      });
+                  });
+          }
 
-          _prevTransform = currTransform;
-          _prevAngle = currAngle;
-          _prevGraph = context.graph();
       }
 
 
-      function finish() {
-          event.stopPropagation();
-          context.enter(modeSelect(context, entityIDs));
-      }
+      background.projection = function(_) {
+          if (!arguments.length) return _projection;
+          _projection = _;
+          return background;
+      };
 
 
-      function cancel() {
-          context.pop();
-          context.enter(modeSelect(context, entityIDs));
-      }
+      background.dimensions = function(_) {
+          if (!arguments.length) return tiler.size();
+          tiler.size(_);
+          return background;
+      };
 
 
-      function undone() {
-          context.enter(modeBrowse(context));
-      }
+      background.source = function(_) {
+          if (!arguments.length) return _source;
+          _source = _;
+          _tileSize = _source.tileSize;
+          _cache = {};
+          tiler.tileSize(_source.tileSize).zoomExtent(_source.zoomExtent);
+          return background;
+      };
 
 
-      mode.enter = function() {
-          behaviors.forEach(context.install);
+      return background;
+  }
 
-          context.surface()
-              .on('mousemove.rotate', doRotate)
-              .on('click.rotate', finish);
+  function rendererBackground(context) {
+      var dispatch$1 = dispatch('change');
+      var detected = utilDetect();
+      var baseLayer = rendererTileLayer(context).projection(context.projection);
+      var _isValid = true;
+      var _overlayLayers = [];
+      var _backgroundSources = [];
+      var _brightness = 1;
+      var _contrast = 1;
+      var _saturation = 1;
+      var _sharpness = 1;
 
-          context.history()
-              .on('undone.rotate', undone);
 
-          keybinding
-              .on('⎋', cancel)
-              .on('↩', finish);
+      function background(selection) {
+          // If we are displaying an Esri basemap at high zoom,
+          // check its tilemap to see how high the zoom can go
+          if (context.map().zoom() > 18) {
+              var basemap = baseLayer.source();
+              if (basemap && /^EsriWorldImagery/.test(basemap.id)) {
+                  var center = context.map().center();
+                  basemap.fetchTilemap(center);
+              }
+          }
+
+          // Is the imagery valid here? - #4827
+          var sources = background.sources(context.map().extent());
+          var wasValid = _isValid;
+          _isValid = !!sources
+              .filter(function(d) { return d === baseLayer.source(); }).length;
+
+          if (wasValid !== _isValid) {      // change in valid status
+              background.updateImagery();
+          }
 
-          select(document)
-              .call(keybinding);
-      };
 
+          var baseFilter = '';
+          if (detected.cssfilters) {
+              if (_brightness !== 1) {
+                  baseFilter += 'brightness(' + _brightness + ')';
+              }
+              if (_contrast !== 1) {
+                  baseFilter += 'contrast(' + _contrast + ')';
+              }
+              if (_saturation !== 1) {
+                  baseFilter += 'saturate(' + _saturation + ')';
+              }
+              if (_sharpness < 1) {  // gaussian blur
+                  var blur = interpolateNumber(0.5, 5)(1 - _sharpness);
+                  baseFilter += 'blur(' + blur + 'px)';
+              }
+          }
 
-      mode.exit = function() {
-          behaviors.forEach(context.uninstall);
+          var base = selection.selectAll('.layer-background')
+              .data([0]);
 
-          context.surface()
-              .on('mousemove.rotate', null)
-              .on('click.rotate', null);
+          base = base.enter()
+              .insert('div', '.layer-data')
+              .attr('class', 'layer layer-background')
+              .merge(base);
 
-          context.history()
-              .on('undone.rotate', null);
+          if (detected.cssfilters) {
+              base.style('filter', baseFilter || null);
+          } else {
+              base.style('opacity', _brightness);
+          }
 
-          select(document)
-              .call(keybinding.unbind);
-      };
 
+          var imagery = base.selectAll('.layer-imagery')
+              .data([0]);
 
-      mode.selectedIDs = function() {
-          if (!arguments.length) return entityIDs;
-          // no assign
-          return mode;
-      };
+          imagery.enter()
+              .append('div')
+              .attr('class', 'layer layer-imagery')
+              .merge(imagery)
+              .call(baseLayer);
 
 
-      return mode;
-  }
+          var maskFilter = '';
+          var mixBlendMode = '';
+          if (detected.cssfilters && _sharpness > 1) {  // apply unsharp mask
+              mixBlendMode = 'overlay';
+              maskFilter = 'saturate(0) blur(3px) invert(1)';
 
-  var _isSaving = false;
+              var contrast = _sharpness - 1;
+              maskFilter += ' contrast(' + contrast + ')';
 
+              var brightness = interpolateNumber(1, 0.85)(_sharpness - 1);
+              maskFilter += ' brightness(' + brightness + ')';
+          }
 
-  function modeSave$$1(context) {
-      var mode = { id: 'save' };
-      var keybinding = utilKeybinding('modeSave');
+          var mask = base.selectAll('.layer-unsharp-mask')
+              .data(detected.cssfilters && _sharpness > 1 ? [0] : []);
 
-      var loading = uiLoading(context)
-          .message(t('save.uploading'))
-          .blocking(true);
+          mask.exit()
+              .remove();
 
-      var commit = uiCommit(context)
-          .on('cancel', cancel)
-          .on('save', save);
+          mask.enter()
+              .append('div')
+              .attr('class', 'layer layer-mask layer-unsharp-mask')
+              .merge(mask)
+              .call(baseLayer)
+              .style('filter', maskFilter || null)
+              .style('mix-blend-mode', mixBlendMode || null);
 
-      var _toCheck = [];
-      var _toLoad = [];
-      var _loaded = {};
-      var _toLoadCount = 0;
-      var _toLoadTotal = 0;
 
-      var _conflicts = [];
-      var _errors = [];
-      var _origChanges;
-      var _location;
+          var overlays = selection.selectAll('.layer-overlay')
+              .data(_overlayLayers, function(d) { return d.source().name(); });
 
+          overlays.exit()
+              .remove();
 
-      function cancel(selectedID) {
-          if (selectedID) {
-              context.enter(modeSelect(context, [selectedID]));
-          } else {
-              context.enter(modeBrowse(context));
-          }
+          overlays.enter()
+              .insert('div', '.layer-data')
+              .attr('class', 'layer layer-overlay')
+              .merge(overlays)
+              .each(function(layer) { select(this).call(layer); });
       }
 
 
-      function save(changeset, tryAgain, checkConflicts) {
-          // Guard against accidentally entering save code twice - #4641
-          if (_isSaving && !tryAgain) {
-              return;
-          }
+      background.updateImagery = function() {
+          var b = baseLayer.source();
+          if (context.inIntro() || !b) return;
 
-          var osm = context.connection();
-          if (!osm) {
-              cancel();
-              return;
-          }
+          var o = _overlayLayers
+              .filter(function (d) { return !d.source().isLocatorOverlay() && !d.source().isHidden(); })
+              .map(function (d) { return d.source().id; })
+              .join(',');
 
-          // If user somehow got logged out mid-save, try to reauthenticate..
-          // This can happen if they were logged in from before, but the tokens are no longer valid.
-          if (!osm.authenticated()) {
-              osm.authenticate(function(err) {
-                  if (err) {
-                      cancel();   // quit save mode..
-                  } else {
-                      save(changeset, tryAgain, checkConflicts);  // continue where we left off..
-                  }
-              });
-              return;
-          }
+          var meters = geoOffsetToMeters(b.offset());
+          var epsilon = 0.01;
+          var x = +meters[0].toFixed(2);
+          var y = +meters[1].toFixed(2);
+          var q = utilStringQs(window.location.hash.substring(1));
 
-          if (!_isSaving) {
-              keybindingOff();
-              context.container().call(loading);  // block input
-              _isSaving = true;
+          var id = b.id;
+          if (id === 'custom') {
+              id = 'custom:' + b.template();
           }
 
-          var history = context.history();
-          var localGraph = context.graph();
-          var remoteGraph = coreGraph$$1(history.base(), true);
-
-          _conflicts = [];
-          _errors = [];
-
-          // Store original changes, in case user wants to download them as an .osc file
-          _origChanges = history.changes(actionDiscardTags(history.difference()));
-
-          // First time, `history.perform` a no-op action.
-          // Any conflict resolutions will be done as `history.replace`
-          if (!tryAgain) {
-              history.perform(actionNoop());
+          if (id) {
+              q.background = id;
+          } else {
+              delete q.background;
           }
 
-          // Attempt a fast upload.. If there are conflicts, re-enter with `checkConflicts = true`
-          if (!checkConflicts) {
-              upload(changeset);
-
-          // Do the full (slow) conflict check..
+          if (o) {
+              q.overlays = o;
           } else {
-              var modified = filter(history.difference().summary(), { changeType: 'modified' });
-              _toCheck = map$3(map$3(modified, 'entity'), 'id');
-              _toLoad = withChildNodes(_toCheck, localGraph);
-              _loaded = {};
-              _toLoadCount = 0;
-              _toLoadTotal = _toLoad.length;
-
-              if (_toCheck.length) {
-                  showProgress(_toLoadCount, _toLoadTotal);
-                  _toLoad.forEach(function(id) { _loaded[id] = false; });
-                  osm.loadMultiple(_toLoad, loaded);
-              } else {
-                  upload(changeset);
-              }
+              delete q.overlays;
           }
 
-          return;
-
-
-          function withChildNodes(ids, graph) {
-              return uniq(reduce(ids, function(result, id) {
-                  var entity = graph.entity(id);
-                  if (entity.type === 'way') {
-                      try {
-                          var children = graph.childNodes(entity);
-                          result.push.apply(result, map$3(filter(children, 'version'), 'id'));
-                      } catch (err) {
-                          /* eslint-disable no-console */
-                          if (typeof console !== 'undefined') console.error(err);
-                          /* eslint-enable no-console */
-                      }
-                  }
-                  return result;
-              }, clone(ids)));
+          if (Math.abs(x) > epsilon || Math.abs(y) > epsilon) {
+              q.offset = x + ',' + y;
+          } else {
+              delete q.offset;
           }
 
+          if (!window.mocha) {
+              window.location.replace('#' + utilQsString(q, true));
+          }
 
-          // Reload modified entities into an alternate graph and check for conflicts..
-          function loaded(err, result) {
-              if (_errors.length) return;
-
-              if (err) {
-                  _errors.push({
-                      msg: err.message || err.responseText,
-                      details: [ t('save.status_code', { code: err.status }) ]
-                  });
-                  showErrors();
-
-              } else {
-                  var loadMore = [];
-
-                  result.data.forEach(function(entity) {
-                      remoteGraph.replace(entity);
-                      _loaded[entity.id] = true;
-                      _toLoad = without(_toLoad, entity.id);
-
-                      if (!entity.visible) return;
-
-                      // Because loadMultiple doesn't download /full like loadEntity,
-                      // need to also load children that aren't already being checked..
-                      var i, id;
-                      if (entity.type === 'way') {
-                          for (i = 0; i < entity.nodes.length; i++) {
-                              id = entity.nodes[i];
-                              if (_loaded[id] === undefined) {
-                                  _loaded[id] = false;
-                                  loadMore.push(id);
-                              }
-                          }
-                      } else if (entity.type === 'relation' && entity.isMultipolygon()) {
-                          for (i = 0; i < entity.members.length; i++) {
-                              id = entity.members[i].id;
-                              if (_loaded[id] === undefined) {
-                                  _loaded[id] = false;
-                                  loadMore.push(id);
-                              }
-                          }
-                      }
-                  });
+          var imageryUsed = [];
 
-                  _toLoadCount += result.data.length;
-                  _toLoadTotal += loadMore.length;
-                  showProgress(_toLoadCount, _toLoadTotal);
+          var current = b.imageryUsed();
+          if (current && _isValid) {
+              imageryUsed.push(current);
+          }
 
-                  if (loadMore.length) {
-                      _toLoad.push.apply(_toLoad, loadMore);
-                      osm.loadMultiple(loadMore, loaded);
-                  }
+          _overlayLayers
+              .filter(function (d) { return !d.source().isLocatorOverlay() && !d.source().isHidden(); })
+              .forEach(function (d) { imageryUsed.push(d.source().imageryUsed()); });
 
-                  if (!_toLoad.length) {
-                      detectConflicts();
-                  }
-              }
+          var data = context.layers().layer('data');
+          if (data && data.enabled() && data.hasData()) {
+              imageryUsed.push(data.getSrc());
           }
 
+          var streetside = context.layers().layer('streetside');
+          if (streetside && streetside.enabled()) {
+              imageryUsed.push('Bing Streetside');
+          }
 
-          function detectConflicts() {
-              function choice(id, text, action) {
-                  return { id: id, text: text, action: function() { history.replace(action); } };
-              }
-              function formatUser(d) {
-                  return '<a href="' + osm.userURL(d) + '" target="_blank">' + d + '</a>';
-              }
-              function entityName(entity) {
-                  return utilDisplayName(entity) || (utilDisplayType(entity.id) + ' ' + entity.id);
-              }
+          var mapillary_images = context.layers().layer('mapillary-images');
+          if (mapillary_images && mapillary_images.enabled()) {
+              imageryUsed.push('Mapillary Images');
+          }
 
-              function sameVersions(local$$1, remote) {
-                  if (local$$1.version !== remote.version) return false;
+          var mapillary_signs = context.layers().layer('mapillary-signs');
+          if (mapillary_signs && mapillary_signs.enabled()) {
+              imageryUsed.push('Mapillary Signs');
+          }
 
-                  if (local$$1.type === 'way') {
-                      var children = union(local$$1.nodes, remote.nodes);
-                      for (var i = 0; i < children.length; i++) {
-                          var a = localGraph.hasEntity(children[i]);
-                          var b = remoteGraph.hasEntity(children[i]);
-                          if (a && b && a.version !== b.version) return false;
-                      }
-                  }
+          var openstreetcam_images = context.layers().layer('openstreetcam-images');
+          if (openstreetcam_images && openstreetcam_images.enabled()) {
+              imageryUsed.push('OpenStreetCam Images');
+          }
 
-                  return true;
-              }
+          context.history().imageryUsed(imageryUsed);
+      };
 
-              _toCheck.forEach(function(id) {
-                  var local$$1 = localGraph.entity(id);
-                  var remote = remoteGraph.entity(id);
 
-                  if (sameVersions(local$$1, remote)) return;
+      background.sources = function(extent) {
+          if (!data.imagery || !data.imagery.query) return [];   // called before init()?
 
-                  var action = actionMergeRemoteChanges;
-                  var merge = action(id, localGraph, remoteGraph, formatUser);
+          var matchIDs = {};
+          var matchImagery = data.imagery.query.bbox(extent.rectangle(), true) || [];
+          matchImagery.forEach(function(d) { matchIDs[d.id] = true; });
 
-                  history.replace(merge);
+          return _backgroundSources.filter(function(source) {
+              return matchIDs[source.id] || !source.polygon;   // no polygon = worldwide
+          });
+      };
 
-                  var mergeConflicts = merge.conflicts();
-                  if (!mergeConflicts.length) return;  // merged safely
 
-                  var forceLocal = action(id, localGraph, remoteGraph).withOption('force_local');
-                  var forceRemote = action(id, localGraph, remoteGraph).withOption('force_remote');
-                  var keepMine = t('save.conflict.' + (remote.visible ? 'keep_local' : 'restore'));
-                  var keepTheirs = t('save.conflict.' + (remote.visible ? 'keep_remote' : 'delete'));
+      background.dimensions = function(d) {
+          if (!d) return;
+          baseLayer.dimensions(d);
 
-                  _conflicts.push({
-                      id: id,
-                      name: entityName(local$$1),
-                      details: mergeConflicts,
-                      chosen: 1,
-                      choices: [
-                          choice(id, keepMine, forceLocal),
-                          choice(id, keepTheirs, forceRemote)
-                      ]
-                  });
-              });
+          _overlayLayers.forEach(function(layer) {
+              layer.dimensions(d);
+          });
+      };
 
-              upload(changeset);
-          }
-      }
 
+      background.baseLayerSource = function(d) {
+          if (!arguments.length) return baseLayer.source();
 
-      function upload(changeset) {
+          // test source against OSM imagery blacklists..
           var osm = context.connection();
-          if (!osm) {
-              _errors.push({ msg: 'No OSM Service' });
-          }
-
-          if (_conflicts.length) {
-              _conflicts.sort(function(a, b) { return b.id.localeCompare(a.id); });
-              showConflicts(changeset);
+          if (!osm) return background;
 
-          } else if (_errors.length) {
-              showErrors();
+          var blacklists = context.connection().imageryBlacklists();
+          var template = d.template();
+          var fail = false;
+          var tested = 0;
+          var regex;
 
-          } else {
-              var history = context.history();
-              var changes = history.changes(actionDiscardTags(history.difference()));
-              if (changes.modified.length || changes.created.length || changes.deleted.length) {
-                  loadLocation();  // so it is ready when we display the save screen
-                  osm.putChangeset(changeset, changes, uploadCallback);
-              } else {        // changes were insignificant or reverted by user
-                  select('.inspector-wrap *').remove();
-                  loading.close();
-                  _isSaving = false;
-                  context.flush();
-                  cancel();
+          for (var i = 0; i < blacklists.length; i++) {
+              try {
+                  regex = new RegExp(blacklists[i]);
+                  fail = regex.test(template);
+                  tested++;
+                  if (fail) break;
+              } catch (e) {
+                  /* noop */
               }
           }
-      }
-
-
-      function uploadCallback(err, changeset) {
-          if (err) {
-              if (err.status === 409) {          // 409 Conflict
-                  save(changeset, true, true);   // tryAgain = true, checkConflicts = true
-              } else {
-                  _errors.push({
-                      msg: err.message || err.responseText,
-                      details: [ t('save.status_code', { code: err.status }) ]
-                  });
-                  showErrors();
-              }
 
-          } else {
-              context.history().clearSaved();
-              success(changeset);
-              // Add delay to allow for postgres replication #1646 #2678
-              window.setTimeout(function() {
-                  select('.inspector-wrap *').remove();
-                  loading.close();
-                  _isSaving = false;
-                  context.flush();
-              }, 2500);
+          // ensure at least one test was run.
+          if (!tested) {
+              regex = new RegExp('.*\.google(apis)?\..*/(vt|kh)[\?/].*([xyz]=.*){3}.*');
+              fail = regex.test(template);
           }
-      }
 
+          baseLayer.source(!fail ? d : background.findSource('none'));
+          dispatch$1.call('change');
+          background.updateImagery();
+          return background;
+      };
 
-      function showProgress(num, total) {
-          var modal = context.container().select('.loading-modal .modal-section');
-          var progress = modal.selectAll('.progress')
-              .data([0]);
-
-          // enter/update
-          progress.enter()
-              .append('div')
-              .attr('class', 'progress')
-              .merge(progress)
-              .text(t('save.conflict_progress', { num: num, total: total }));
-      }
 
+      background.findSource = function(id) {
+          return find$1(_backgroundSources, function(d) {
+              return d.id && d.id === id;
+          });
+      };
 
-      function showConflicts(changeset) {
-          var history = context.history();
-          var selection$$1 = context.container()
-              .select('#sidebar')
-              .append('div')
-              .attr('class','sidebar-component');
 
-          loading.close();
-          _isSaving = false;
+      background.bing = function() {
+          background.baseLayerSource(background.findSource('Bing'));
+      };
 
-          var ui = uiConflicts(context)
-              .conflictList(_conflicts)
-              .origChanges(_origChanges)
-              .on('cancel', function() {
-                  history.pop();
-                  selection$$1.remove();
-                  keybindingOn();
-              })
-              .on('save', function() {
-                  for (var i = 0; i < _conflicts.length; i++) {
-                      if (_conflicts[i].chosen === 1) {  // user chose "keep theirs"
-                          var entity = context.hasEntity(_conflicts[i].id);
-                          if (entity && entity.type === 'way') {
-                              var children = uniq(entity.nodes);
-                              for (var j = 0; j < children.length; j++) {
-                                  history.replace(actionRevert(children[j]));
-                              }
-                          }
-                          history.replace(actionRevert(_conflicts[i].id));
-                      }
-                  }
 
-                  selection$$1.remove();
-                  save(changeset, true, false);  // tryAgain = true, checkConflicts = false
-              });
+      background.showsLayer = function(d) {
+          return d.id === baseLayer.source().id ||
+              _overlayLayers.some(function(layer) { return d.id === layer.source().id; });
+      };
 
-          selection$$1.call(ui);
-      }
 
+      background.overlayLayerSources = function() {
+          return _overlayLayers.map(function (l) { return l.source(); });
+      };
 
-      function showErrors() {
-          keybindingOn();
-          context.history().pop();
-          loading.close();
-          _isSaving = false;
 
-          var selection$$1 = uiConfirm(context.container());
-          selection$$1
-              .select('.modal-section.header')
-              .append('h3')
-              .text(t('save.error'));
+      background.toggleOverlayLayer = function(d) {
+          var layer;
+          for (var i = 0; i < _overlayLayers.length; i++) {
+              layer = _overlayLayers[i];
+              if (layer.source() === d) {
+                  _overlayLayers.splice(i, 1);
+                  dispatch$1.call('change');
+                  background.updateImagery();
+                  return;
+              }
+          }
 
-          addErrors(selection$$1, _errors);
-          selection$$1.okButton();
-      }
+          layer = rendererTileLayer(context)
+              .source(d)
+              .projection(context.projection)
+              .dimensions(baseLayer.dimensions()
+          );
 
+          _overlayLayers.push(layer);
+          dispatch$1.call('change');
+          background.updateImagery();
+      };
 
-      function addErrors(selection$$1, data) {
-          var message = selection$$1
-              .select('.modal-section.message-text');
 
-          var items = message
-              .selectAll('.error-container')
-              .data(data);
+      background.nudge = function(d, zoom) {
+          baseLayer.source().nudge(d, zoom);
+          dispatch$1.call('change');
+          background.updateImagery();
+          return background;
+      };
 
-          var enter = items.enter()
-              .append('div')
-              .attr('class', 'error-container');
 
-          enter
-              .append('a')
-              .attr('class', 'error-description')
-              .attr('href', '#')
-              .classed('hide-toggle', true)
-              .text(function(d) { return d.msg || t('save.unknown_error_details'); })
-              .on('click', function() {
-                  event.preventDefault();
+      background.offset = function(d) {
+          if (!arguments.length) return baseLayer.source().offset();
+          baseLayer.source().offset(d);
+          dispatch$1.call('change');
+          background.updateImagery();
+          return background;
+      };
 
-                  var error = select(this);
-                  var detail = select(this.nextElementSibling);
-                  var exp = error.classed('expanded');
 
-                  detail.style('display', exp ? 'none' : 'block');
-                  error.classed('expanded', !exp);
-              });
+      background.brightness = function(d) {
+          if (!arguments.length) return _brightness;
+          _brightness = d;
+          if (context.mode()) dispatch$1.call('change');
+          return background;
+      };
 
-          var details = enter
-              .append('div')
-              .attr('class', 'error-detail-container')
-              .style('display', 'none');
 
-          details
-              .append('ul')
-              .attr('class', 'error-detail-list')
-              .selectAll('li')
-              .data(function(d) { return d.details || []; })
-              .enter()
-              .append('li')
-              .attr('class', 'error-detail-item')
-              .text(function(d) { return d; });
+      background.contrast = function(d) {
+          if (!arguments.length) return _contrast;
+          _contrast = d;
+          if (context.mode()) dispatch$1.call('change');
+          return background;
+      };
 
-          items.exit()
-              .remove();
-      }
 
+      background.saturation = function(d) {
+          if (!arguments.length) return _saturation;
+          _saturation = d;
+          if (context.mode()) dispatch$1.call('change');
+          return background;
+      };
 
-      function success(changeset) {
-          commit.reset();
 
-          var ui = uiSuccess$$1(context)
-              .changeset(changeset)
-              .location(_location)
-              .on('cancel', function() { context.ui().sidebar.hide(); });
+      background.sharpness = function(d) {
+          if (!arguments.length) return _sharpness;
+          _sharpness = d;
+          if (context.mode()) dispatch$1.call('change');
+          return background;
+      };
 
-          context.enter(modeBrowse(context).sidebar(ui));
-      }
 
+      background.init = function() {
+          function parseMap(qmap) {
+              if (!qmap) return false;
+              var args = qmap.split('/').map(Number);
+              if (args.length < 3 || args.some(isNaN)) return false;
+              return geoExtent([args[2], args[1]]);
+          }
 
-      function keybindingOn() {
-          select(document)
-              .call(keybinding.on('⎋', cancel, true));
-      }
+          var q = utilStringQs(window.location.hash.substring(1));
+          var requested = q.background || q.layer;
+          var extent = parseMap(q.map);
+          var first;
+          var best;
 
 
-      function keybindingOff() {
-          select(document)
-              .call(keybinding.unbind);
-      }
+          data.imagery = data.imagery || [];
+          data.imagery.features = {};
 
+          // build efficient index and querying for data.imagery
+          var features = data.imagery.map(function(source) {
+              if (!source.polygon) return null;
 
-      // Reverse geocode current map location so we can display a message on
-      // the success screen like "Thank you for editing around city, state."
-      function loadLocation() {
-          _location = null;
-          if (!services.geocoder) return;
+              // Add an extra array nest to each element in `source.polygon`
+              // so the rings are not treated as a bunch of holes:
+              // what we have: [ [[outer],[hole],[hole]] ]
+              // what we want: [ [[outer]],[[outer]],[[outer]] ]
+              var rings = source.polygon.map(function(ring) { return [ring]; });
 
-          services.geocoder.reverse(context.map().center(), function(err, result) {
-              if (err || !result || !result.address) return;
+              var feature = {
+                  type: 'Feature',
+                  properties: { id: source.id },
+                  geometry: { type: 'MultiPolygon', coordinates: rings }
+              };
 
-              var parts = [];
-              var addr = result.address;
-              var city = addr && (addr.town || addr.city || addr.county);
-              if (city) parts.push(city);
-              var region = addr && (addr.state || addr.country);
-              if (region) parts.push(region);
+              data.imagery.features[source.id] = feature;
+              return feature;
 
-              _location = parts.join(', ');
+          }).filter(Boolean);
+
+          data.imagery.query = whichPolygon_1({
+              type: 'FeatureCollection',
+              features: features
           });
-      }
 
 
-      mode.enter = function() {
-          // Show sidebar
-          context.ui().sidebar.expand();
+          // Add all the available imagery sources
+          _backgroundSources = data.imagery.map(function(source) {
+              if (source.type === 'bing') {
+                  return rendererBackgroundSource.Bing(source, dispatch$1);
+              } else if (/^EsriWorldImagery/.test(source.id)) {
+                  return rendererBackgroundSource.Esri(source);
+              } else {
+                  return rendererBackgroundSource(source);
+              }
+          });
 
-          function done() {
-              context.ui().sidebar.show(commit);
-          }
+          first = _backgroundSources.length && _backgroundSources[0];
 
-          keybindingOn();
+          // Add 'None'
+          _backgroundSources.unshift(rendererBackgroundSource.None());
 
-          context.container().selectAll('#content')
-              .attr('class', 'inactive');
+          // Add 'Custom'
+          var template = context.storage('background-custom-template') || '';
+          var custom = rendererBackgroundSource.Custom(template);
+          _backgroundSources.unshift(custom);
 
-          var osm = context.connection();
-          if (!osm) {
-              cancel();
-              return;
-          }
 
-          if (osm.authenticated()) {
-              done();
+          // Decide which background layer to display
+          if (!requested && extent) {
+              best = find$1(this.sources(extent), function(s) { return s.best(); });
+          }
+          if (requested && requested.indexOf('custom:') === 0) {
+              template = requested.replace(/^custom:/, '');
+              background.baseLayerSource(custom.template(template));
+              context.storage('background-custom-template', template);
           } else {
-              osm.authenticate(function(err) {
-                  if (err) {
-                      cancel();
-                  } else {
-                      done();
-                  }
-              });
+              background.baseLayerSource(
+                  background.findSource(requested) ||
+                  best ||
+                  background.findSource(context.storage('background-last-used')) ||
+                  background.findSource('Bing') ||
+                  first ||
+                  background.findSource('none')
+              );
           }
-      };
 
+          var locator = find$1(_backgroundSources, function(d) {
+              return d.overlay && d.default;
+          });
 
-      mode.exit = function() {
-          _isSaving = false;
+          if (locator) {
+              background.toggleOverlayLayer(locator);
+          }
 
-          keybindingOff();
+          var overlays = (q.overlays || '').split(',');
+          overlays.forEach(function(overlay) {
+              overlay = background.findSource(overlay);
+              if (overlay) {
+                  background.toggleOverlayLayer(overlay);
+              }
+          });
 
-          context.container().selectAll('#content')
-              .attr('class', 'active');
+          if (q.gpx) {
+              var gpx = context.layers().layer('data');
+              if (gpx) {
+                  gpx.url(q.gpx, '.gpx');
+              }
+          }
 
-          context.ui().sidebar.hide();
+          if (q.offset) {
+              var offset = q.offset.replace(/;/g, ',').split(',').map(function(n) {
+                  return !isNaN(n) && n;
+              });
+
+              if (offset.length === 2) {
+                  background.offset(geoMetersToOffset(offset));
+              }
+          }
       };
 
-      return mode;
-  }
 
-  var _relatedParent;
+      return utilRebind(background, dispatch$1, 'on');
+  }
 
+  function rendererFeatures(context) {
+      var traffic_roads = {
+          'motorway': true,
+          'motorway_link': true,
+          'trunk': true,
+          'trunk_link': true,
+          'primary': true,
+          'primary_link': true,
+          'secondary': true,
+          'secondary_link': true,
+          'tertiary': true,
+          'tertiary_link': true,
+          'residential': true,
+          'unclassified': true,
+          'living_street': true
+      };
 
-  function modeSelect(context, selectedIDs) {
-      var mode = {
-          id: 'select',
-          button: 'browse'
+      var service_roads = {
+          'service': true,
+          'road': true,
+          'track': true
       };
 
-      var keybinding = utilKeybinding('select');
-      var timeout = null;
-      var behaviors = [
-          behaviorCopy(context),
-          behaviorPaste(context),
-          behaviorBreathe(context),
-          behaviorHover(context),
-          behaviorSelect(context),
-          behaviorLasso(context),
-          modeDragNode$$1(context).restoreSelectedIDs(selectedIDs).behavior,
-          modeDragNote$$1(context).behavior
-      ];
-      var editMenu;
-      var newFeature = false;
-      var suppressMenu = true;
-      var follow = false;
+      var paths = {
+          'path': true,
+          'footway': true,
+          'cycleway': true,
+          'bridleway': true,
+          'steps': true,
+          'pedestrian': true,
+          'corridor': true
+      };
 
+      var past_futures = {
+          'proposed': true,
+          'construction': true,
+          'abandoned': true,
+          'dismantled': true,
+          'disused': true,
+          'razed': true,
+          'demolished': true,
+          'obliterated': true
+      };
 
-      var wrap = context.container()
-          .select('.inspector-wrap');
+      var dispatch$1 = dispatch('change', 'redraw');
+      var _cullFactor = 1;
+      var _cache = {};
+      var _features = {};
+      var _stats = {};
+      var _keys = [];
+      var _hidden = [];
+      var _forceVisible = {};
 
 
-      function singular() {
-          if (selectedIDs.length === 1) {
-              return context.hasEntity(selectedIDs[0]);
+      function update() {
+          if (!window.mocha) {
+              var q = utilStringQs(window.location.hash.substring(1));
+              var disabled = features.disabled();
+              if (disabled.length) {
+                  q.disable_features = disabled.join(',');
+              } else {
+                  delete q.disable_features;
+              }
+              window.location.replace('#' + utilQsString(q, true));
+              context.storage('disabled-features', disabled.join(','));
           }
+          _hidden = features.hidden();
+          dispatch$1.call('change');
+          dispatch$1.call('redraw');
       }
 
 
-      function checkSelectedIDs() {
-          var ids = [];
-          if (Array.isArray(selectedIDs)) {
-              ids = selectedIDs.filter(function(id) {
-                  return context.hasEntity(id);
-              });
-          }
+      function defineFeature(k, filter, max) {
+          var isEnabled = true;
 
-          if (ids.length) {
-              selectedIDs = ids;
-          } else {
-              context.enter(modeBrowse(context));
-          }
-          return !!ids.length;
+          _keys.push(k);
+          _features[k] = {
+              filter: filter,
+              enabled: isEnabled,   // whether the user wants it enabled..
+              count: 0,
+              currentMax: (max || Infinity),
+              defaultMax: (max || Infinity),
+              enable: function() { this.enabled = true; this.currentMax = this.defaultMax; },
+              disable: function() { this.enabled = false; this.currentMax = 0; },
+              hidden: function() {
+                  return !context.editable() ||
+                      (this.count === 0 && !this.enabled) ||
+                      this.count > this.currentMax * _cullFactor;
+              },
+              autoHidden: function() { return this.hidden() && this.currentMax > 0; }
+          };
       }
 
 
-      // find the common parent ways for nextVertex, previousVertex
-      function commonParents() {
-          var graph = context.graph();
-          var commonParents = [];
+      defineFeature('points', function isPoint(tags, geometry) {
+          return geometry === 'point';
+      }, 200);
 
-          for (var i = 0; i < selectedIDs.length; i++) {
-              var entity = context.hasEntity(selectedIDs[i]);
-              if (!entity || entity.geometry(graph) !== 'vertex') {
-                  return [];  // selection includes some not vertexes
-              }
+      defineFeature('traffic_roads', function isTrafficRoad(tags) {
+          return traffic_roads[tags.highway];
+      });
 
-              var currParents = map$3(graph.parentWays(entity), 'id');
-              if (!commonParents.length) {
-                  commonParents = currParents;
-                  continue;
-              }
+      defineFeature('service_roads', function isServiceRoad(tags) {
+          return service_roads[tags.highway];
+      });
 
-              commonParents = intersection(commonParents, currParents);
-              if (!commonParents.length) {
-                  return [];
-              }
-          }
+      defineFeature('paths', function isPath(tags) {
+          return paths[tags.highway];
+      });
 
-          return commonParents;
-      }
+      defineFeature('buildings', function isBuilding(tags) {
+          return (
+              !!tags['building:part'] ||
+              (!!tags.building && tags.building !== 'no') ||
+              tags.parking === 'multi-storey' ||
+              tags.parking === 'sheds' ||
+              tags.parking === 'carports' ||
+              tags.parking === 'garage_boxes'
+          );
+      }, 250);
 
+      defineFeature('landuse', function isLanduse(tags, geometry) {
+          return geometry === 'area' &&
+              !_features.buildings.filter(tags) &&
+              !_features.water.filter(tags);
+      });
 
-      function singularParent() {
-          var parents = commonParents();
-          if (!parents || parents.length === 0) {
-              _relatedParent = null;
-              return null;
-          }
+      defineFeature('boundaries', function isBoundary(tags) {
+          return (
+              !!tags.boundary
+          ) && !(
+              traffic_roads[tags.highway] ||
+              service_roads[tags.highway] ||
+              paths[tags.highway]
+          );
+      });
 
-          // relatedParent is used when we visit a vertex with multiple
-          // parents, and we want to remember which parent line we started on.
+      defineFeature('water', function isWater(tags) {
+          return (
+              !!tags.waterway ||
+              tags.natural === 'water' ||
+              tags.natural === 'coastline' ||
+              tags.natural === 'bay' ||
+              tags.landuse === 'pond' ||
+              tags.landuse === 'basin' ||
+              tags.landuse === 'reservoir' ||
+              tags.landuse === 'salt_pond'
+          );
+      });
 
-          if (parents.length === 1) {
-              _relatedParent = parents[0];  // remember this parent for later
-              return _relatedParent;
-          }
+      defineFeature('rail', function isRail(tags) {
+          return (
+              !!tags.railway ||
+              tags.landuse === 'railway'
+          ) && !(
+              traffic_roads[tags.highway] ||
+              service_roads[tags.highway] ||
+              paths[tags.highway]
+          );
+      });
 
-          if (parents.indexOf(_relatedParent) !== -1) {
-              return _relatedParent;   // prefer the previously seen parent
-          }
+      defineFeature('power', function isPower(tags) {
+          return !!tags.power;
+      });
 
-          return parents[0];
-      }
+      // contains a past/future tag, but not in active use as a road/path/cycleway/etc..
+      defineFeature('past_future', function isPastFuture(tags) {
+          if (
+              traffic_roads[tags.highway] ||
+              service_roads[tags.highway] ||
+              paths[tags.highway]
+          ) { return false; }
 
+          var strings = Object.keys(tags);
 
-      function closeMenu() {
-          if (editMenu) {
-              context.surface().call(editMenu.close);
+          for (var i = 0; i < strings.length; i++) {
+              var s = strings[i];
+              if (past_futures[s] || past_futures[tags[s]]) { return true; }
           }
-      }
+          return false;
+      });
 
+      // Lines or areas that don't match another feature filter.
+      // IMPORTANT: The 'others' feature must be the last one defined,
+      //   so that code in getMatches can skip this test if `hasMatch = true`
+      defineFeature('others', function isOther(tags, geometry) {
+          return (geometry === 'line' || geometry === 'area');
+      });
 
-      function positionMenu() {
-          if (!editMenu) { return; }
 
-          var entity = singular();
-          if (entity && context.geometry(entity.id) === 'relation') {
-              suppressMenu = true;
-          } else {
-              var point$$1 = context.mouse();
-              var viewport = geoExtent$$1(context.projection.clipExtent()).polygon();
+      function features() {}
 
-              if (point$$1 && geoPointInPolygon(point$$1, viewport)) {
-                  editMenu.center(point$$1);
-              } else {
-                  suppressMenu = true;
-              }
-          }
-      }
 
+      features.features = function() {
+          return _features;
+      };
 
-      function showMenu() {
-          closeMenu();
-          if (editMenu) {
-              context.surface().call(editMenu);
-          }
-      }
 
+      features.keys = function() {
+          return _keys;
+      };
 
-      function toggleMenu() {
-          // deprecation warning - Radial Menu to be removed in iD v3
-          if (select('.edit-menu, .radial-menu').empty()) {
-              positionMenu();
-              showMenu();
-          } else {
-              closeMenu();
+
+      features.enabled = function(k) {
+          if (!arguments.length) {
+              return _keys.filter(function(k) { return _features[k].enabled; });
           }
-      }
+          return _features[k] && _features[k].enabled;
+      };
 
 
-      mode.selectedIDs = function() {
-          return selectedIDs;
+      features.disabled = function(k) {
+          if (!arguments.length) {
+              return _keys.filter(function(k) { return !_features[k].enabled; });
+          }
+          return _features[k] && !_features[k].enabled;
       };
 
 
-      mode.zoomToSelected = function() {
-          var entity = singular();
-          if (entity) {
-              context.map().zoomToEase(entity);
+      features.hidden = function(k) {
+          if (!arguments.length) {
+              return _keys.filter(function(k) { return _features[k].hidden(); });
           }
+          return _features[k] && _features[k].hidden();
       };
 
 
-      mode.reselect = function() {
-          if (!checkSelectedIDs()) return;
-
-          var surfaceNode = context.surface().node();
-          if (surfaceNode.focus) {   // FF doesn't support it
-              surfaceNode.focus();
+      features.autoHidden = function(k) {
+          if (!arguments.length) {
+              return _keys.filter(function(k) { return _features[k].autoHidden(); });
           }
+          return _features[k] && _features[k].autoHidden();
+      };
 
-          positionMenu();
-          if (!suppressMenu) {
-              showMenu();
+
+      features.enable = function(k) {
+          if (_features[k] && !_features[k].enabled) {
+              _features[k].enable();
+              update();
           }
       };
 
 
-      mode.newFeature = function(_) {
-          if (!arguments.length) return newFeature;
-          newFeature = _;
-          return mode;
+      features.disable = function(k) {
+          if (_features[k] && _features[k].enabled) {
+              _features[k].disable();
+              update();
+          }
       };
 
 
-      mode.suppressMenu = function(_) {
-          if (!arguments.length) return suppressMenu;
-          suppressMenu = _;
-          return mode;
+      features.toggle = function(k) {
+          if (_features[k]) {
+              (function(f) { return f.enabled ? f.disable() : f.enable(); }(_features[k]));
+              update();
+          }
       };
 
 
-      mode.follow = function(_) {
-          if (!arguments.length) return follow;
-          follow = _;
-          return mode;
+      features.resetStats = function() {
+          for (var i = 0; i < _keys.length; i++) {
+              _features[_keys[i]].count = 0;
+          }
+          dispatch$1.call('change');
       };
 
 
-      mode.enter = function() {
-          if (!checkSelectedIDs()) return;
-
-          var operations = without(values$1(Operations), operationDelete)
-              .map(function(o) { return o(selectedIDs, context); })
-              .filter(function(o) { return o.available(); });
+      features.gatherStats = function(d, resolver, dimensions) {
+          var needsRedraw = false;
+          var type = groupBy(d, function(ent) { return ent.type; });
+          var entities = [].concat(type.relation || [], type.way || [], type.node || []);
+          var currHidden, geometry, matches, i, j;
 
-          // deprecation warning - Radial Menu to be removed in iD v3
-          var isRadialMenu = context.storage('edit-menu-style') === 'radial';
-          if (isRadialMenu) {
-              operations = operations.slice(0,7);
-              operations.unshift(operationDelete(selectedIDs, context));
-          } else {
-              operations.push(operationDelete(selectedIDs, context));
+          for (i = 0; i < _keys.length; i++) {
+              _features[_keys[i]].count = 0;
           }
 
-          operations.forEach(function(operation) {
-              if (operation.behavior) {
-                  behaviors.push(operation.behavior);
+          // adjust the threshold for point/building culling based on viewport size..
+          // a _cullFactor of 1 corresponds to a 1000x1000px viewport..
+          _cullFactor = dimensions[0] * dimensions[1] / 1000000;
+
+          for (i = 0; i < entities.length; i++) {
+              geometry = entities[i].geometry(resolver);
+              matches = Object.keys(features.getMatches(entities[i], resolver, geometry));
+              for (j = 0; j < matches.length; j++) {
+                  _features[matches[j]].count++;
               }
-          });
+          }
 
-          behaviors.forEach(context.install);
+          currHidden = features.hidden();
+          if (currHidden !== _hidden) {
+              _hidden = currHidden;
+              needsRedraw = true;
+              dispatch$1.call('change');
+          }
 
-          keybinding
-              .on(t('inspector.zoom_to.key'), mode.zoomToSelected)
-              .on(['[', 'pgup'], previousVertex)
-              .on([']', 'pgdown'], nextVertex)
-              .on(['{', uiCmd('⌘['), 'home'], firstVertex)
-              .on(['}', uiCmd('⌘]'), 'end'], lastVertex)
-              .on(['\\', 'pause'], nextParent)
-              .on('⎋', esc, true)
-              .on('space', toggleMenu);
+          return needsRedraw;
+      };
 
-          select(document)
-              .call(keybinding);
 
+      features.stats = function() {
+          for (var i = 0; i < _keys.length; i++) {
+              _stats[_keys[i]] = _features[_keys[i]].count;
+          }
 
-          // deprecation warning - Radial Menu to be removed in iD v3
-          editMenu = isRadialMenu
-              ? uiRadialMenu(context, operations)
-              : uiEditMenu(context, operations);
+          return _stats;
+      };
 
-          context.ui().sidebar
-              .select(singular() ? singular().id : null, newFeature);
 
-          context.history()
-              .on('undone.select', update)
-              .on('redone.select', update);
+      features.clear = function(d) {
+          for (var i = 0; i < d.length; i++) {
+              features.clearEntity(d[i]);
+          }
+      };
 
-          context.map()
-              .on('move.select', closeMenu)
-              .on('drawn.select', selectElements);
 
-          context.surface()
-              .on('dblclick.select', dblclick);
+      features.clearEntity = function(entity) {
+          delete _cache[osmEntity.key(entity)];
+      };
 
 
-          selectElements();
+      features.reset = function() {
+          _cache = {};
+      };
 
-          if (selectedIDs.length > 1) {
-              var entities = uiSelectionList(context, selectedIDs);
-              context.ui().sidebar.show(entities);
-          }
+      // only certain relations are worth checking
+      function relationShouldBeChecked(relation) {
+          // multipolygon features have `area` geometry and aren't checked here
+          return relation.tags.type === 'boundary';
+      }
 
-          if (follow) {
-              var extent = geoExtent$$1();
-              var graph = context.graph();
-              selectedIDs.forEach(function(id) {
-                  var entity = context.entity(id);
-                  extent._extend(entity.extent(graph));
-              });
+      features.getMatches = function(entity, resolver, geometry) {
+          if (geometry === 'vertex' ||
+              (geometry === 'relation' && !relationShouldBeChecked(entity))) return {};
 
-              var loc = extent.center();
-              context.map().centerEase(loc);
-          } else if (singular() && singular().type === 'way') {
-              context.map().pan([0,0]);  // full redraw, to adjust z-sorting #2914
+          var ent = osmEntity.key(entity);
+          if (!_cache[ent]) {
+              _cache[ent] = {};
           }
 
-          timeout = window.setTimeout(function() {
-              positionMenu();
-              if (!suppressMenu) {
-                  showMenu();
-              }
-          }, 270);  /* after any centerEase completes */
+          if (!_cache[ent].matches) {
+              var matches = {};
+              var hasMatch = false;
 
+              for (var i = 0; i < _keys.length; i++) {
+                  if (_keys[i] === 'others') {
+                      if (hasMatch) continue;
 
-          function update() {
-              closeMenu();
-              checkSelectedIDs();
-          }
+                      // If an entity...
+                      //   1. is a way that hasn't matched other 'interesting' feature rules,
+                      if (entity.type === 'way') {
+                          var parents = features.getParents(entity, resolver, geometry);
 
+                          //   2a. belongs only to a single multipolygon relation
+                          if ((parents.length === 1 && parents[0].isMultipolygon()) ||
+                              // 2b. or belongs only to boundary relations
+                              (parents.length > 0 && parents.every(function(parent) { return parent.tags.type === 'boundary'; }))) {
+
+                              // ...then match whatever feature rules the parent relation has matched.
+                              // see #2548, #2887
+                              //
+                              // IMPORTANT:
+                              // For this to work, getMatches must be called on relations before ways.
+                              //
+                              var pkey = osmEntity.key(parents[0]);
+                              if (_cache[pkey] && _cache[pkey].matches) {
+                                  matches = clone(_cache[pkey].matches);
+                                  continue;
+                              }
+                          }
+                      }
+                  }
 
-          function dblclick() {
-              var target = select(event.target);
+                  if (_features[_keys[i]].filter(entity.tags, geometry)) {
+                      matches[_keys[i]] = hasMatch = true;
+                  }
+              }
+              _cache[ent].matches = matches;
+          }
 
-              var datum = target.datum();
-              var entity = datum && datum.properties && datum.properties.entity;
-              if (!entity) return;
+          return _cache[ent].matches;
+      };
 
-              if (entity instanceof osmWay && target.classed('target')) {
-                  var choice = geoChooseEdge(context.childNodes(entity), context.mouse(), context.projection);
-                  var prev = entity.nodes[choice.index - 1];
-                  var next = entity.nodes[choice.index];
 
-                  context.perform(
-                      actionAddMidpoint({loc: choice.loc, edge: [prev, next]}, osmNode()),
-                      t('operations.add.annotation.vertex')
-                  );
+      features.getParents = function(entity, resolver, geometry) {
+          if (geometry === 'point') return [];
 
-                  event.preventDefault();
-                  event.stopPropagation();
+          var ent = osmEntity.key(entity);
+          if (!_cache[ent]) {
+              _cache[ent] = {};
+          }
 
-              } else if (entity.type === 'midpoint') {
-                  context.perform(
-                      actionAddMidpoint({loc: entity.loc, edge: entity.edge}, osmNode()),
-                      t('operations.add.annotation.vertex'));
+          if (!_cache[ent].parents) {
+              var parents = [];
+              if (geometry === 'vertex') {
+                  parents = resolver.parentWays(entity);
+              } else {   // 'line', 'area', 'relation'
+                  parents = resolver.parentRelations(entity);
+              }
+              _cache[ent].parents = parents;
+          }
+          return _cache[ent].parents;
+      };
 
-                  event.preventDefault();
-                  event.stopPropagation();
+
+      features.isHiddenPreset = function(preset, geometry) {
+          if (!_hidden.length) return false;
+          if (!preset.tags) return false;
+          for (var i = 0; i < _hidden.length; i++) {
+              if (_features[_hidden[i]].filter(preset.setTags({}, geometry), geometry)) {
+                  return _hidden[i];
               }
           }
+          return false;
+      };
 
 
-          function selectElements(drawn) {
-              if (!checkSelectedIDs()) return;
+      features.isHiddenFeature = function(entity, resolver, geometry) {
+          if (!_hidden.length) return false;
+          if (!entity.version) return false;
 
-              var surface = context.surface();
-              var entity = singular();
+          var matches = features.getMatches(entity, resolver, geometry);
 
-              if (entity && context.geometry(entity.id) === 'relation') {
-                  suppressMenu = true;
-                  return;
-              }
+          for (var i = 0; i < _hidden.length; i++) {
+              if (matches[_hidden[i]]) return true;
+          }
+          return false;
+      };
 
-              surface.selectAll('.related')
-                  .classed('related', false);
 
-              singularParent();
-              if (_relatedParent) {
-                  surface.selectAll(utilEntitySelector([_relatedParent]))
-                      .classed('related', true);
-              }
+      features.isHiddenChild = function(entity, resolver, geometry) {
+          if (!_hidden.length) return false;
+          if (!entity.version || geometry === 'point') return false;
 
-              var selection$$1 = context.surface()
-                  .selectAll(utilEntityOrMemberSelector(selectedIDs, context.graph()));
+          var parents = features.getParents(entity, resolver, geometry);
+          if (!parents.length) return false;
 
-              if (selection$$1.empty()) {
-                  // Return to browse mode if selected DOM elements have
-                  // disappeared because the user moved them out of view..
-                  var source = event && event.type === 'zoom' && event.sourceEvent;
-                  if (drawn && source && (source.type === 'mousemove' || source.type === 'touchmove')) {
-                      context.enter(modeBrowse(context));
-                  }
-              } else {
-                  selection$$1
-                      .classed('selected', true);
+          for (var i = 0; i < parents.length; i++) {
+              if (!features.isHidden(parents[i], resolver, parents[i].geometry(resolver))) {
+                  return false;
               }
           }
+          return true;
+      };
 
 
-          function esc() {
-              if (select('.combobox').size()) return;
-              context.enter(modeBrowse(context));
+      features.hasHiddenConnections = function(entity, resolver) {
+          if (!_hidden.length) return false;
+          var childNodes, connections;
+
+          if (entity.type === 'midpoint') {
+              childNodes = [resolver.entity(entity.edge[0]), resolver.entity(entity.edge[1])];
+              connections = [];
+          } else {
+              childNodes = entity.nodes ? resolver.childNodes(entity) : [];
+              connections = features.getParents(entity, resolver, entity.geometry(resolver));
           }
 
+          // gather ways connected to child nodes..
+          connections = reduce(childNodes, function(result, e) {
+              return resolver.isShared(e) ? union(result, resolver.parentWays(e)) : result;
+          }, connections);
 
-          function firstVertex() {
-              event.preventDefault();
-              var entity = singular();
-              var parent = singularParent();
-              var way;
+          return connections.length ? some(connections, function(e) {
+              return features.isHidden(e, resolver, e.geometry(resolver));
+          }) : false;
+      };
 
-              if (entity && entity.type === 'way') {
-                  way = entity;
-              } else if (parent) {
-                  way = context.entity(parent);
-              }
 
-              if (way) {
-                  context.enter(
-                      modeSelect(context, [way.first()]).follow(true)
-                  );
-              }
-          }
+      features.isHidden = function(entity, resolver, geometry) {
+          if (!_hidden.length) return false;
+          if (!entity.version) return false;
+          if (_forceVisible[entity.id]) return false;
 
+          var fn = (geometry === 'vertex' ? features.isHiddenChild : features.isHiddenFeature);
+          return fn(entity, resolver, geometry);
+      };
 
-          function lastVertex() {
-              event.preventDefault();
-              var entity = singular();
-              var parent = singularParent();
-              var way;
 
-              if (entity && entity.type === 'way') {
-                  way = entity;
-              } else if (parent) {
-                  way = context.entity(parent);
-              }
+      features.filter = function(d, resolver) {
+          if (!_hidden.length) return d;
 
-              if (way) {
-                  context.enter(
-                      modeSelect(context, [way.last()]).follow(true)
-                  );
+          var result = [];
+          for (var i = 0; i < d.length; i++) {
+              var entity = d[i];
+              if (!features.isHidden(entity, resolver, entity.geometry(resolver))) {
+                  result.push(entity);
               }
           }
+          return result;
+      };
 
 
-          function previousVertex() {
-              event.preventDefault();
-              var parent = singularParent();
-              if (!parent) return;
+      features.forceVisible = function(entityIDs) {
+          if (!arguments.length) return Object.keys(_forceVisible);
+          _forceVisible = {};
+          for (var i = 0; i < entityIDs.length; i++) {
+              _forceVisible[entityIDs[i]] = true;
+          }
+          return features;
+      };
 
-              var way = context.entity(parent);
-              var length = way.nodes.length;
-              var curr = way.nodes.indexOf(selectedIDs[0]);
-              var index = -1;
 
-              if (curr > 0) {
-                  index = curr - 1;
-              } else if (way.isClosed()) {
-                  index = length - 2;
-              }
+      features.init = function() {
+          var storage = context.storage('disabled-features');
+          if (storage) {
+              var storageDisabled = storage.replace(/;/g, ',').split(',');
+              storageDisabled.forEach(features.disable);
+          }
 
-              if (index !== -1) {
-                  context.enter(
-                      modeSelect(context, [way.nodes[index]]).follow(true)
-                  );
-              }
+          var q = utilStringQs(window.location.hash.substring(1));
+          if (q.disable_features) {
+              var hashDisabled = q.disable_features.replace(/;/g, ',').split(',');
+              hashDisabled.forEach(features.disable);
           }
+      };
 
+      return utilRebind(features, dispatch$1, 'on');
+  }
 
-          function nextVertex() {
-              event.preventDefault();
-              var parent = singularParent();
-              if (!parent) return;
+  function utilBindOnce(target, type, listener, capture) {
+      var typeOnce = type + '.once';
+      function one() {
+          target.on(typeOnce, null);
+          listener.apply(this, arguments);
+      }
+      target.on(typeOnce, one, capture);
+      return this;
+  }
 
-              var way = context.entity(parent);
-              var length = way.nodes.length;
-              var curr = way.nodes.indexOf(selectedIDs[0]);
-              var index = -1;
+  // constants
+  var TILESIZE = 256;
+  var kMin = geoZoomToScale(2, TILESIZE);
+  var kMax = geoZoomToScale(24, TILESIZE);
 
-              if (curr < length - 1) {
-                  index = curr + 1;
-              } else if (way.isClosed()) {
-                  index = 0;
-              }
+  function clamp(num, min, max) {
+      return Math.max(min, Math.min(num, max));
+  }
 
-              if (index !== -1) {
-                  context.enter(
-                      modeSelect(context, [way.nodes[index]]).follow(true)
-                  );
-              }
-          }
 
+  function rendererMap(context) {
+      var dispatch$1 = dispatch('move', 'drawn');
+      var projection = context.projection;
+      var curtainProjection = context.curtainProjection;
+      var drawLayers = svgLayers(projection, context);
+      var drawPoints = svgPoints(projection, context);
+      var drawVertices = svgVertices(projection, context);
+      var drawLines = svgLines(projection, context);
+      var drawAreas = svgAreas(projection, context);
+      var drawMidpoints = svgMidpoints(projection, context);
+      var drawLabels = svgLabels(projection, context);
 
-          function nextParent() {
-              event.preventDefault();
-              var parents = uniq(commonParents());
-              if (!parents || parents.length < 2) return;
+      var _selection = select(null);
+      var supersurface = select(null);
+      var wrapper = select(null);
+      var surface = select(null);
 
-              var index = parents.indexOf(_relatedParent);
-              if (index < 0 || index > parents.length - 2) {
-                  _relatedParent = parents[0];
-              } else {
-                  _relatedParent = parents[index + 1];
-              }
+      var _dimensions = [1, 1];
+      var _dblClickEnabled = true;
+      var _redrawEnabled = true;
+      var _gestureTransformStart;
+      var _transformStart = projection.transform();
+      var _transformLast;
+      var _isTransformed = false;
+      var _minzoom = 0;
+      var _getMouseCoords;
+      var _mouseEvent;
 
-              var surface = context.surface();
-              surface.selectAll('.related')
-                  .classed('related', false);
+      var zoom = d3_zoom()
+          .scaleExtent([kMin, kMax])
+          .interpolate(interpolate)
+          .filter(zoomEventFilter)
+          .on('zoom', zoomPan);
 
-              if (_relatedParent) {
-                  surface.selectAll(utilEntitySelector([_relatedParent]))
-                      .classed('related', true);
-              }
-          }
-      };
+      var scheduleRedraw = throttle(redraw, 750);
+      // var isRedrawScheduled = false;
+      // var pendingRedrawCall;
+      // function scheduleRedraw() {
+      //     // Only schedule the redraw if one has not already been set.
+      //     if (isRedrawScheduled) return;
+      //     isRedrawScheduled = true;
+      //     var that = this;
+      //     var args = arguments;
+      //     pendingRedrawCall = window.requestIdleCallback(function () {
+      //         // Reset the boolean so future redraws can be set.
+      //         isRedrawScheduled = false;
+      //         redraw.apply(that, args);
+      //     }, { timeout: 1400 });
+      // }
 
+      function cancelPendingRedraw() {
+          scheduleRedraw.cancel();
+          // isRedrawScheduled = false;
+          // window.cancelIdleCallback(pendingRedrawCall);
+      }
 
-      mode.exit = function() {
-          if (timeout) window.clearTimeout(timeout);
 
-          behaviors.forEach(context.uninstall);
+      function map(selection) {
+          _selection = selection;
 
-          select(document)
-              .call(keybinding.unbind);
+          context
+              .on('change.map', immediateRedraw);
 
-          closeMenu();
-          editMenu = undefined;
+          var osm = context.connection();
+          if (osm) {
+              osm.on('change.map', immediateRedraw);
+          }
 
           context.history()
-              .on('undone.select', null)
-              .on('redone.select', null);
+              .on('change.map', immediateRedraw)
+              .on('undone.map redone.map', function(stack) {
+                  var mode = context.mode().id;
+                  if (mode !== 'browse' && mode !== 'select') return;
 
-          var surface = context.surface();
+                  var followSelected = false;
+                  if (Array.isArray(stack.selectedIDs)) {
+                      followSelected = (stack.selectedIDs.length === 1 && stack.selectedIDs[0][0] === 'n');
+                      context.enter(
+                          modeSelect(context, stack.selectedIDs).follow(followSelected)
+                      );
+                  }
+                  if (!followSelected && stack.transform) {
+                      map.transformEase(stack.transform);
+                  }
+              });
 
-          surface
-              .on('dblclick.select', null);
+          context.background()
+              .on('change.map', immediateRedraw);
 
-          surface
-              .selectAll('.selected')
-              .classed('selected', false);
+          context.features()
+              .on('redraw.map', immediateRedraw);
 
-          surface
-              .selectAll('.related')
-              .classed('related', false);
+          drawLayers
+              .on('change.map', function() {
+                  context.background().updateImagery();
+                  immediateRedraw();
+              });
 
-          context.map().on('drawn.select', null);
-          context.ui().sidebar.hide();
-      };
+          selection
+              .on('dblclick.map', dblClick)
+              .call(zoom)
+              .call(zoom.transform, projection.transform());
 
+          supersurface = selection.append('div')
+              .attr('id', 'supersurface')
+              .call(utilSetTransform, 0, 0);
 
-      return mode;
-  }
+          // Need a wrapper div because Opera can't cope with an absolutely positioned
+          // SVG element: http://bl.ocks.org/jfirebaugh/6fbfbd922552bf776c16
+          wrapper = supersurface
+              .append('div')
+              .attr('class', 'layer layer-data');
 
-  function modeSelectData$$1(context, selectedDatum) {
-      var mode = {
-          id: 'select-data',
-          button: 'browse'
-      };
+          map.surface = surface = wrapper
+              .call(drawLayers)
+              .selectAll('.surface')
+              .attr('id', 'surface');
 
-      var keybinding = utilKeybinding('select-data');
-      var dataEditor = uiDataEditor$$1(context);
+          surface
+              .call(drawLabels.observe)
+              .on('gesturestart.surface', function() {
+                  _gestureTransformStart = projection.transform();
+              })
+              .on('gesturechange.surface', gestureChange)
+              .on('mousedown.zoom', function() {
+                  if (event.button === 2) {
+                      event.stopPropagation();
+                  }
+              }, true)
+              .on('mouseup.zoom', function() {
+                  if (resetTransform()) {
+                      immediateRedraw();
+                  }
+              })
+              .on('mousemove.map', function() {
+                  _mouseEvent = event;
+              })
+              .on('mouseover.vertices', function() {
+                  if (map.editable() && !_isTransformed) {
+                      var hover = event.target.__data__;
+                      surface.call(drawVertices.drawHover, context.graph(), hover, map.extent());
+                      dispatch$1.call('drawn', this, { full: false });
+                  }
+              })
+              .on('mouseout.vertices', function() {
+                  if (map.editable() && !_isTransformed) {
+                      var hover = event.relatedTarget && event.relatedTarget.__data__;
+                      surface.call(drawVertices.drawHover, context.graph(), hover, map.extent());
+                      dispatch$1.call('drawn', this, { full: false });
+                  }
+              });
+
+          supersurface
+              .call(context.background());
+
+          context.on('enter.map',  function() {
+              if (map.editable() && !_isTransformed) {
+                  // redraw immediately any objects affected by a change in selectedIDs.
+                  var graph = context.graph();
+                  var selectedAndParents = {};
+                  context.selectedIDs().forEach(function(id) {
+                      var entity = graph.hasEntity(id);
+                      if (entity) {
+                          selectedAndParents[entity.id] = entity;
+                          if (entity.type === 'node') {
+                              graph.parentWays(entity).forEach(function(parent) {
+                                  selectedAndParents[parent.id] = parent;
+                              });
+                          }
+                      }
+                  });
+                  var data = values$1(selectedAndParents);
+                  var filter = function(d) { return d.id in selectedAndParents; };
 
-      var behaviors = [
-          behaviorBreathe(context),
-          behaviorHover(context),
-          behaviorSelect(context),
-          behaviorLasso(context),
-          modeDragNode$$1(context).behavior,
-          modeDragNote$$1(context).behavior
-      ];
+                  data = context.features().filter(data, graph);
 
+                  surface
+                      .call(drawVertices.drawSelected, graph, map.extent())
+                      .call(drawLines, graph, data, filter)
+                      .call(drawAreas, graph, data, filter)
+                      .call(drawMidpoints, graph, data, filter, map.trimmedExtent());
 
-      // class the data as selected, or return to browse mode if the data is gone
-      function selectData(drawn) {
-          var selection$$1 = context.surface().selectAll('.layer-mapdata .data' + selectedDatum.__featurehash__);
+                  dispatch$1.call('drawn', this, { full: false });
 
-          if (selection$$1.empty()) {
-              // Return to browse mode if selected DOM elements have
-              // disappeared because the user moved them out of view..
-              var source = event && event.type === 'zoom' && event.sourceEvent;
-              if (drawn && source && (source.type === 'mousemove' || source.type === 'touchmove')) {
-                  context.enter(modeBrowse(context));
+                  // redraw everything else later
+                  scheduleRedraw();
               }
-          } else {
-              selection$$1.classed('selected', true);
-          }
-      }
-
+          });
 
-      function esc() {
-          if (select('.combobox').size()) return;
-          context.enter(modeBrowse(context));
+          map.dimensions(utilGetDimensions(selection));
       }
 
 
-      mode.zoomToSelected = function() {
-          var extent = geoExtent$$1(d3_geoBounds(selectedDatum));
-          context.map().centerZoomEase(extent.center(), context.map().trimmedExtentZoom(extent));
-      };
-
-
-      mode.enter = function() {
-          behaviors.forEach(context.install);
-
-          keybinding
-              .on(t('inspector.zoom_to.key'), mode.zoomToSelected)
-              .on('⎋', esc, true);
-
-          select(document)
-              .call(keybinding);
+      function zoomEventFilter() {
+          // Fix for #2151, (see also d3/d3-zoom#60, d3/d3-brush#18)
+          // Intercept `mousedown` and check if there is an orphaned zoom gesture.
+          // This can happen if a previous `mousedown` occurred without a `mouseup`.
+          // If we detect this, dispatch `mouseup` to complete the orphaned gesture,
+          // so that d3-zoom won't stop propagation of new `mousedown` events.
+          if (event.type === 'mousedown') {
+              var hasOrphan = false;
+              var listeners = window.__on;
+              for (var i = 0; i < listeners.length; i++) {
+                  var listener = listeners[i];
+                  if (listener.name === 'zoom' && listener.type === 'mouseup') {
+                      hasOrphan = true;
+                      break;
+                  }
+              }
+              if (hasOrphan) {
+                  var event$1 = window.CustomEvent;
+                  if (event$1) {
+                      event$1 = new event$1('mouseup');
+                  } else {
+                      event$1 = window.document.createEvent('Event');
+                      event$1.initEvent('mouseup', false, false);
+                  }
+                  // Event needs to be dispatched with an event.view property.
+                  event$1.view = window;
+                  window.dispatchEvent(event$1);
+              }
+          }
 
-          selectData();
+          return event.button !== 2;   // ignore right clicks
+      }
 
-          var sidebar = context.ui().sidebar;
-          sidebar.show(dataEditor.datum(selectedDatum));
 
-          // expand the sidebar, avoid obscuring the data if needed
-          var extent = geoExtent$$1(d3_geoBounds(selectedDatum));
-          sidebar.expand(sidebar.intersects(extent));
+      function pxCenter() {
+          return [_dimensions[0] / 2, _dimensions[1] / 2];
+      }
 
-          context.map()
-              .on('drawn.select-data', selectData);
-      };
 
+      function drawVector(difference, extent) {
+          var mode = context.mode();
+          var graph = context.graph();
+          var features = context.features();
+          var all = context.intersects(map.extent());
+          var fullRedraw = false;
+          var data;
+          var filter;
 
-      mode.exit = function() {
-          behaviors.forEach(context.uninstall);
+          if (difference) {
+              var complete = difference.complete(map.extent());
+              data = compact(values$1(complete));
+              filter = function(d) { return d.id in complete; };
+              features.clear(data);
 
-          select(document)
-              .call(keybinding.unbind);
+          } else {
+              // force a full redraw if gatherStats detects that a feature
+              // should be auto-hidden (e.g. points or buildings)..
+              if (features.gatherStats(all, graph, _dimensions)) {
+                  extent = undefined;
+              }
 
-          context.surface()
-              .selectAll('.layer-mapdata .selected')
-              .classed('selected hover', false);
+              if (extent) {
+                  data = context.intersects(map.extent().intersection(extent));
+                  var set = set$2(map$3(data, 'id'));
+                  filter = function(d) { return set.has(d.id); };
 
-          context.map()
-              .on('drawn.select-data', null);
+              } else {
+                  data = all;
+                  fullRedraw = true;
+                  filter = utilFunctor(true);
+              }
+          }
 
-          context.ui().sidebar
-              .hide();
-      };
+          data = features.filter(data, graph);
 
+          if (mode && mode.id === 'select') {
+              // update selected vertices - the user might have just double-clicked a way,
+              // creating a new vertex, triggering a partial redraw without a mode change
+              surface.call(drawVertices.drawSelected, graph, map.extent());
+          }
 
-      return mode;
-  }
+          surface
+              .call(drawVertices, graph, data, filter, map.extent(), fullRedraw)
+              .call(drawLines, graph, data, filter)
+              .call(drawAreas, graph, data, filter)
+              .call(drawMidpoints, graph, data, filter, map.trimmedExtent())
+              .call(drawLabels, graph, data, filter, _dimensions, fullRedraw)
+              .call(drawPoints, graph, data, filter);
 
-  function modeSelectError$$1(context, selectedErrorID) {
-      var mode = {
-          id: 'select-error',
-          button: 'browse'
-      };
+          dispatch$1.call('drawn', this, {full: true});
+      }
 
-      var keepRight = services.keepRight;
-      var keybinding = utilKeybinding('select-error');
-      var keepRightEditor = uiKeepRightEditor$$1(context)
-          .on('change', function() {
-              context.map().pan([0,0]);  // trigger a redraw
-              var error = checkSelectedID();
-              if (!error) return;
-              context.ui().sidebar
-                  .show(keepRightEditor.error(error));
-          });
 
-      var behaviors = [
-          behaviorBreathe(context),
-          behaviorHover(context),
-          behaviorSelect(context),
-          behaviorLasso(context),
-          modeDragNode$$1(context).behavior,
-          modeDragNote$$1(context).behavior
-      ];
+      function editOff() {
+          context.features().resetStats();
+          surface.selectAll('.layer-osm *').remove();
+          surface.selectAll('.layer-touch:not(.markers) *').remove();
 
+          var allowed = {
+              'browse': true,
+              'save': true,
+              'select-note': true,
+              'select-data': true,
+              'select-error': true
+          };
 
-      function checkSelectedID() {
-          if (!keepRight) return;
-          var error = keepRight.getError(selectedErrorID);
-          if (!error) {
+          var mode = context.mode();
+          if (mode && !allowed[mode.id]) {
               context.enter(modeBrowse(context));
           }
-          return error;
+
+          dispatch$1.call('drawn', this, {full: true});
       }
 
 
-      mode.zoomToSelected = function() {
-          if (!keepRight) return;
-          var error = keepRight.getError(selectedErrorID);
-          if (error) {
-              context.map().centerZoomEase(error.loc, 20);
+      function dblClick() {
+          if (!_dblClickEnabled) {
+              event.preventDefault();
+              event.stopImmediatePropagation();
           }
-      };
+      }
 
 
-      mode.enter = function() {
-          var error = checkSelectedID();
-          if (!error) return;
+      function gestureChange() {
+          // Remap Safari gesture events to wheel events - #5492
+          // We want these disabled most places, but enabled for zoom/unzoom on map surface
+          // https://developer.mozilla.org/en-US/docs/Web/API/GestureEvent
+          var e = event;
+          e.preventDefault();
 
-          behaviors.forEach(context.install);
-          keybinding
-              .on(t('inspector.zoom_to.key'), mode.zoomToSelected)
-              .on('⎋', esc, true);
+          var props = {
+              deltaMode: 0,    // dummy values to ignore in zoomPan
+              deltaY: 1,       // dummy values to ignore in zoomPan
+              clientX: e.clientX,
+              clientY: e.clientY,
+              screenX: e.screenX,
+              screenY: e.screenY,
+              x: e.x,
+              y: e.y
+          };
 
-          select(document)
-              .call(keybinding);
+          var e2 = new WheelEvent('wheel', props);
+          e2._scale = e.scale;         // preserve the original scale
+          e2._rotation = e.rotation;   // preserve the original rotation
 
-          selectError();
+          _selection.node().dispatchEvent(e2);
+      }
 
-          var sidebar = context.ui().sidebar;
-          sidebar.show(keepRightEditor.error(error));
 
-          context.map()
-              .on('drawn.select-error', selectError);
+      function zoomPan(manualEvent) {
+          var event$1 = (manualEvent || event);
+          var source = event$1.sourceEvent;
+          var eventTransform = event$1.transform;
+          var x = eventTransform.x;
+          var y = eventTransform.y;
+          var k = eventTransform.k;
 
+          if (_transformStart.x === x &&
+              _transformStart.y === y &&
+              _transformStart.k === k) {
+              return;  // no change
+          }
 
-          // class the error as selected, or return to browse mode if the error is gone
-          function selectError(drawn) {
-              if (!checkSelectedID()) return;
+          // Special handling of 'wheel' events:
+          // They might be triggered by the user scrolling the mouse wheel,
+          // or 2-finger pinch/zoom gestures, the transform may need adjustment.
+          if (source && source.type === 'wheel') {
+              var detected = utilDetect();
+              var dX = source.deltaX;
+              var dY = source.deltaY;
+              var x2 = x;
+              var y2 = y;
+              var k2 = k;
+              var t0, p0, p1;
 
-              var selection$$1 = context.surface()
-                  .selectAll('.kr_error-' + selectedErrorID);
+              // Normalize mousewheel scroll speed (Firefox) - #3029
+              // If wheel delta is provided in LINE units, recalculate it in PIXEL units
+              // We are essentially redoing the calculations that occur here:
+              //   https://github.com/d3/d3-zoom/blob/78563a8348aa4133b07cac92e2595c2227ca7cd7/src/zoom.js#L203
+              // See this for more info:
+              //   https://github.com/basilfx/normalize-wheel/blob/master/src/normalizeWheel.js
+              if (source.deltaMode === 1 /* LINE */) {
+                  // Convert from lines to pixels, more if the user is scrolling fast.
+                  // (I made up the exp function to roughly match Firefox to what Chrome does)
+                  // These numbers should be floats, because integers are treated as pan gesture below.
+                  var lines = Math.abs(source.deltaY);
+                  var sign = (source.deltaY > 0) ? 1 : -1;
+                  dY = sign * clamp(
+                      Math.exp((lines - 1) * 0.75) * 4.000244140625,
+                      4.000244140625,    // min
+                      350.000244140625   // max
+                  );
 
-              if (selection$$1.empty()) {
-                  // Return to browse mode if selected DOM elements have
-                  // disappeared because the user moved them out of view..
-                  var source = event && event.type === 'zoom' && event.sourceEvent;
-                  if (drawn && source && (source.type === 'mousemove' || source.type === 'touchmove')) {
-                      context.enter(modeBrowse(context));
+                  // On Firefox Windows and Linux we always get +/- the scroll line amount (default 3)
+                  // There doesn't seem to be any scroll accelleration.
+                  // This multiplier increases the speed a little bit - #5512
+                  if (detected.os !== 'mac') {
+                      dY *= 5;
                   }
 
-              } else {
-                  selection$$1
-                      .classed('selected', true);
-
-                  context.selectedErrorID(selectedErrorID);
-              }
-          }
-
-          function esc() {
-              if (select('.combobox').size()) return;
-              context.enter(modeBrowse(context));
-          }
-      };
+                  // recalculate x2,y2,k2
+                  t0 = _isTransformed ? _transformLast : _transformStart;
+                  p0 = _getMouseCoords(source);
+                  p1 = t0.invert(p0);
+                  k2 = t0.k * Math.pow(2, -dY / 500);
+                  x2 = p0[0] - p1[0] * k2;
+                  y2 = p0[1] - p1[1] * k2;
 
+              // 2 finger map pinch zooming (Safari) - #5492
+              // These are fake `wheel` events we made from Safari `gesturechange` events..
+              } else if (source._scale) {
+                  // recalculate x2,y2,k2
+                  t0 = _gestureTransformStart;
+                  p0 = _getMouseCoords(source);
+                  p1 = t0.invert(p0);
+                  k2 = t0.k * source._scale;
+                  x2 = p0[0] - p1[0] * k2;
+                  y2 = p0[1] - p1[1] * k2;
 
-      mode.exit = function() {
-          behaviors.forEach(context.uninstall);
+              // 2 finger map pinch zooming (all browsers except Safari) - #5492
+              // Pinch zooming via the `wheel` event will always have:
+              // - `ctrlKey = true`
+              // - `deltaY` is not round integer pixels (ignore `deltaX`)
+              } else if (source.ctrlKey && !isInteger(dY)) {
+                  dY *= 6;   // slightly scale up whatever the browser gave us
 
-          select(document)
-              .call(keybinding.unbind);
+                  // recalculate x2,y2,k2
+                  t0 = _isTransformed ? _transformLast : _transformStart;
+                  p0 = _getMouseCoords(source);
+                  p1 = t0.invert(p0);
+                  k2 = t0.k * Math.pow(2, -dY / 500);
+                  x2 = p0[0] - p1[0] * k2;
+                  y2 = p0[1] - p1[1] * k2;
 
-          context.surface()
-              .selectAll('.kr_error.selected')
-              .classed('selected hover', false);
+              // Trackpad scroll zooming with shift or alt/option key down
+              } else if ((source.altKey || source.shiftKey) && isInteger(dY)) {
+                  // recalculate x2,y2,k2
+                  t0 = _isTransformed ? _transformLast : _transformStart;
+                  p0 = _getMouseCoords(source);
+                  p1 = t0.invert(p0);
+                  k2 = t0.k * Math.pow(2, -dY / 500);
+                  x2 = p0[0] - p1[0] * k2;
+                  y2 = p0[1] - p1[1] * k2;
 
-          context.map()
-              .on('drawn.select-error', null);
+              // 2 finger map panning (Mac only, all browsers) - #5492, #5512
+              // Panning via the `wheel` event will always have:
+              // - `ctrlKey = false`
+              // - `deltaX`,`deltaY` are round integer pixels
+              } else if (detected.os === 'mac' && !source.ctrlKey && isInteger(dX) && isInteger(dY)) {
+                  p1 = projection.translate();
+                  x2 = p1[0] - dX;
+                  y2 = p1[1] - dY;
+                  k2 = projection.scale();
+              }
 
-          context.ui().sidebar
-              .hide();
+              // something changed - replace the event transform
+              if (x2 !== x || y2 !== y || k2 !== k) {
+                  x = x2;
+                  y = y2;
+                  k = k2;
+                  eventTransform = identity$7.translate(x2, y2).scale(k2);
+                  _selection.node().__zoom = eventTransform;
+              }
 
-          context.selectedErrorID(null);
-      };
+          }
 
+          if (geoScaleToZoom(k, TILESIZE) < _minzoom) {
+              surface.interrupt();
+              uiFlash().text(t('cannot_zoom'))();
+              setCenterZoom(map.center(), context.minEditableZoom(), 0, true);
+              scheduleRedraw();
+              dispatch$1.call('move', this, map);
+              return;
+          }
 
-      return mode;
-  }
+          projection.transform(eventTransform);
 
-  function modeSelectNote$$1(context, selectedNoteID) {
-      var mode = {
-          id: 'select-note',
-          button: 'browse'
-      };
+          var scale = k / _transformStart.k;
+          var tX = (x / scale - _transformStart.x) * scale;
+          var tY = (y / scale - _transformStart.y) * scale;
 
-      var osm = services.osm;
-      var keybinding = utilKeybinding('select-note');
-      var noteEditor = uiNoteEditor$$1(context)
-          .on('change', function() {
-              context.map().pan([0,0]);  // trigger a redraw
-              var note = checkSelectedID();
-              if (!note) return;
-              context.ui().sidebar
-                  .show(noteEditor.note(note));
-          });
+          if (context.inIntro()) {
+              curtainProjection.transform({
+                  x: x - tX,
+                  y: y - tY,
+                  k: k
+              });
+          }
 
-      var behaviors = [
-          behaviorBreathe(context),
-          behaviorHover(context),
-          behaviorSelect(context),
-          behaviorLasso(context),
-          modeDragNode$$1(context).behavior,
-          modeDragNote$$1(context).behavior
-      ];
+          if (source) {
+              _mouseEvent = event$1;
+          }
+          _isTransformed = true;
+          _transformLast = eventTransform;
+          utilSetTransform(supersurface, tX, tY, scale);
+          scheduleRedraw();
 
-      var newFeature = false;
+          dispatch$1.call('move', this, map);
 
 
-      function checkSelectedID() {
-          if (!osm) return;
-          var note = osm.getNote(selectedNoteID);
-          if (!note) {
-              context.enter(modeBrowse(context));
+          function isInteger(val) {
+              return typeof val === 'number' && isFinite(val) && Math.floor(val) === val;
           }
-          return note;
       }
 
 
-      // class the note as selected, or return to browse mode if the note is gone
-      function selectNote(drawn) {
-          if (!checkSelectedID()) return;
-
-          var selection$$1 = context.surface().selectAll('.layer-notes .note-' + selectedNoteID);
-
-          if (selection$$1.empty()) {
-              // Return to browse mode if selected DOM elements have
-              // disappeared because the user moved them out of view..
-              var source = event && event.type === 'zoom' && event.sourceEvent;
-              if (drawn && source && (source.type === 'mousemove' || source.type === 'touchmove')) {
-                  context.enter(modeBrowse(context));
-              }
-
-          } else {
-              selection$$1
-                  .classed('selected', true);
+      function resetTransform() {
+          if (!_isTransformed) return false;
 
-              context.selectedNoteID(selectedNoteID);
+          // deprecation warning - Radial Menu to be removed in iD v3
+          surface.selectAll('.edit-menu, .radial-menu').interrupt().remove();
+          utilSetTransform(supersurface, 0, 0);
+          _isTransformed = false;
+          if (context.inIntro()) {
+              curtainProjection.transform(projection.transform());
           }
+          return true;
       }
 
 
-      function esc() {
-          if (select('.combobox').size()) return;
-          context.enter(modeBrowse(context));
-      }
+      function redraw(difference, extent) {
+          if (surface.empty() || !_redrawEnabled) return;
 
+          // If we are in the middle of a zoom/pan, we can't do differenced redraws.
+          // It would result in artifacts where differenced entities are redrawn with
+          // one transform and unchanged entities with another.
+          if (resetTransform()) {
+              difference = extent = undefined;
+          }
 
-      mode.zoomToSelected = function() {
-          if (!osm) return;
-          var note = osm.getNote(selectedNoteID);
-          if (note) {
-              context.map().centerZoomEase(note.loc, 20);
+          var zoom = map.zoom();
+          var z = String(~~zoom);
+
+          if (surface.attr('data-zoom') !== z) {
+              surface.attr('data-zoom', z);
           }
-      };
 
+          // class surface as `lowzoom` around z17-z18.5 (based on latitude)
+          var lat = map.center()[1];
+          var lowzoom = linear$2()
+              .domain([-60, 0, 60])
+              .range([17, 18.5, 17])
+              .clamp(true);
 
-      mode.newFeature = function(val) {
-          if (!arguments.length) return newFeature;
-          newFeature = val;
-          return mode;
-      };
+          surface
+              .classed('low-zoom', zoom <= lowzoom(lat));
 
 
-      mode.enter = function() {
-          var note = checkSelectedID();
-          if (!note) return;
+          if (!difference) {
+              supersurface.call(context.background());
+          }
 
-          behaviors.forEach(context.install);
+          wrapper
+              .call(drawLayers);
 
-          keybinding
-              .on(t('inspector.zoom_to.key'), mode.zoomToSelected)
-              .on('⎋', esc, true);
+          // OSM
+          if (map.editable()) {
+              context.loadTiles(projection);
+              drawVector(difference, extent);
+          } else {
+              editOff();
+          }
 
-          select(document)
-              .call(keybinding);
+          _transformStart = projection.transform();
 
-          selectNote();
+          return map;
+      }
 
-          var sidebar = context.ui().sidebar;
-          sidebar.show(noteEditor.note(note));
 
-          // expand the sidebar, avoid obscuring the note if needed
-          sidebar.expand(sidebar.intersects(note.extent()));
 
-          context.map()
-              .on('drawn.select', selectNote);
+      var immediateRedraw = function(difference, extent) {
+          if (!difference && !extent) cancelPendingRedraw();
+          redraw(difference, extent);
       };
 
 
-      mode.exit = function() {
-          behaviors.forEach(context.uninstall);
+      map.mouse = function() {
+          var event$1 = _mouseEvent || event;
+          if (event$1) {
+              var s;
+              while ((s = event$1.sourceEvent)) { event$1 = s; }
+              return _getMouseCoords(event$1);
+          }
+          return null;
+      };
 
-          select(document)
-              .call(keybinding.unbind);
 
-          context.surface()
-              .selectAll('.layer-notes .selected')
-              .classed('selected hover', false);
+      // returns Lng/Lat
+      map.mouseCoordinates = function() {
+          var coord = map.mouse() || pxCenter();
+          return projection.invert(coord);
+      };
 
-          context.map()
-              .on('drawn.select', null);
 
-          context.ui().sidebar
-              .hide();
+      map.dblclickEnable = function(val) {
+          if (!arguments.length) return _dblClickEnabled;
+          _dblClickEnabled = val;
+          return map;
+      };
+
 
-          context.selectedNoteID(null);
+      map.redrawEnable = function(val) {
+          if (!arguments.length) return _redrawEnabled;
+          _redrawEnabled = val;
+          return map;
       };
 
 
-      return mode;
-  }
-
-  var _keepRightEnabled = false;
-  var _keepRightService;
+      map.isTransformed = function() {
+          return _isTransformed;
+      };
 
 
-  function svgKeepRight$$1(projection, context, dispatch) {
-      var throttledRedraw = throttle(function () { dispatch.call('change'); }, 1000);
-      var minZoom = 12;
-      var touchLayer = select(null);
-      var drawLayer = select(null);
-      var _keepRightVisible = false;
+      function setTransform(t2, duration, force) {
+          var t = projection.transform();
+          if (!force && t2.k === t.k && t2.x === t.x && t2.y === t.y) return false;
 
+          if (duration) {
+              _selection
+                  .transition()
+                  .duration(duration)
+                  .on('start', function() { map.startEase(); })
+                  .call(zoom.transform, identity$7.translate(t2.x, t2.y).scale(t2.k));
+          } else {
+              projection.transform(t2);
+              _transformStart = t2;
+              _selection.call(zoom.transform, _transformStart);
+          }
 
-      function markerPath(selection$$1, klass) {
-          selection$$1
-              .attr('class', klass)
-              .attr('transform', 'translate(-4, -24)')
-              .attr('d', 'M11.6,6.2H7.1l1.4-5.1C8.6,0.6,8.1,0,7.5,0H2.2C1.7,0,1.3,0.3,1.3,0.8L0,10.2c-0.1,0.6,0.4,1.1,0.9,1.1h4.6l-1.8,7.6C3.6,19.4,4.1,20,4.7,20c0.3,0,0.6-0.2,0.8-0.5l6.9-11.9C12.7,7,12.3,6.2,11.6,6.2z');
+          return true;
       }
 
 
-      // Loosely-coupled keepRight service for fetching errors.
-      function getService() {
-          if (services.keepRight && !_keepRightService) {
-              _keepRightService = services.keepRight;
-              _keepRightService.on('loaded', throttledRedraw);
-          } else if (!services.keepRight && _keepRightService) {
-              _keepRightService = null;
-          }
+      function setCenterZoom(loc2, z2, duration, force) {
+          var c = map.center();
+          var z = map.zoom();
+          if (loc2[0] === c[0] && loc2[1] === c[1] && z2 === z && !force) return false;
 
-          return _keepRightService;
-      }
+          var proj = geoRawMercator().transform(projection.transform());  // copy projection
 
+          var k2 = clamp(geoZoomToScale(z2, TILESIZE), kMin, kMax);
+          proj.scale(k2);
 
-      // Show the errors
-      function editOn() {
-          if (!_keepRightVisible) {
-              _keepRightVisible = true;
-              drawLayer
-                  .style('display', 'block');
-          }
-      }
+          var t = proj.translate();
+          var point = proj(loc2);
 
+          var center = pxCenter();
+          t[0] += center[0] - point[0];
+          t[1] += center[1] - point[1];
 
-      // Immediately remove the errors and their touch targets
-      function editOff() {
-          if (_keepRightVisible) {
-              _keepRightVisible = false;
-              drawLayer
-                  .style('display', 'none');
-              drawLayer.selectAll('.kr_error')
-                  .remove();
-              touchLayer.selectAll('.kr_error')
-                  .remove();
-          }
+          return setTransform(identity$7.translate(t[0], t[1]).scale(k2), duration, force);
       }
 
 
-      // Enable the layer.  This shows the errors and transitions them to visible.
-      function layerOn() {
-          editOn();
-
-          drawLayer
-              .style('opacity', 0)
-              .transition()
-              .duration(250)
-              .style('opacity', 1)
-              .on('end interrupt', function () {
-                  dispatch.call('change');
-              });
-      }
+      map.pan = function(delta, duration) {
+          var t = projection.translate();
+          var k = projection.scale();
 
+          t[0] += delta[0];
+          t[1] += delta[1];
 
-      // Disable the layer.  This transitions the layer invisible and then hides the errors.
-      function layerOff() {
-          throttledRedraw.cancel();
-          drawLayer.interrupt();
-          touchLayer.selectAll('.kr_error')
-              .remove();
+          if (duration) {
+              _selection
+                  .transition()
+                  .duration(duration)
+                  .on('start', function() { map.startEase(); })
+                  .call(zoom.transform, identity$7.translate(t[0], t[1]).scale(k));
+          } else {
+              projection.translate(t);
+              _transformStart = projection.transform();
+              _selection.call(zoom.transform, _transformStart);
+              dispatch$1.call('move', this, map);
+              immediateRedraw();
+          }
 
-          drawLayer
-              .transition()
-              .duration(250)
-              .style('opacity', 0)
-              .on('end interrupt', function () {
-                  editOff();
-                  dispatch.call('change');
-              });
-      }
+          return map;
+      };
 
 
-      // Update the error markers
-      function updateMarkers() {
-          if (!_keepRightVisible || !_keepRightEnabled) return;
+      map.dimensions = function(val) {
+          if (!arguments.length) return _dimensions;
 
-          var service = getService();
-          var selectedID = context.selectedErrorID();
-          var data = (service ? service.getErrors(projection) : []);
-          var getTransform = svgPointTransform(projection);
+          _dimensions = val;
+          drawLayers.dimensions(_dimensions);
+          context.background().dimensions(_dimensions);
+          projection.clipExtent([[0, 0], _dimensions]);
+          _getMouseCoords = utilFastMouse(supersurface.node());
 
-          // Draw markers..
-          var markers = drawLayer.selectAll('.kr_error')
-              .data(data, function(d) { return d.id; });
+          scheduleRedraw();
+          return map;
+      };
 
-          // exit
-          markers.exit()
-              .remove();
 
-          // enter
-          var markersEnter = markers.enter()
-              .append('g')
-              .attr('class', function(d) {
-                  return 'kr_error kr_error-' + d.id + ' kr_error_type_' + d.parent_error_type; }
-              );
+      function zoomIn(delta) {
+          setCenterZoom(map.center(), ~~map.zoom() + delta, 250, true);
+      }
 
-          markersEnter
-              .append('ellipse')
-              .attr('cx', 0.5)
-              .attr('cy', 1)
-              .attr('rx', 6.5)
-              .attr('ry', 3)
-              .attr('class', 'stroke');
+      function zoomOut(delta) {
+          setCenterZoom(map.center(), ~~map.zoom() - delta, 250, true);
+      }
 
-          markersEnter
-              .append('path')
-              .call(markerPath, 'shadow');
+      map.zoomIn = function() { zoomIn(1); };
+      map.zoomInFurther = function() { zoomIn(4); };
 
-          markersEnter
-              .append('use')
-              .attr('class', 'kr_error-fill')
-              .attr('width', '20px')
-              .attr('height', '20px')
-              .attr('x', '-8px')
-              .attr('y', '-22px')
-              .attr('xlink:href', '#iD-icon-bolt');
+      map.zoomOut = function() { zoomOut(1); };
+      map.zoomOutFurther = function() { zoomOut(4); };
 
-          // update
-          markers
-              .merge(markersEnter)
-              .sort(sortY)
-              .classed('selected', function(d) { return d.id === selectedID; })
-              .attr('transform', getTransform);
 
+      map.center = function(loc2) {
+          if (!arguments.length) {
+              return projection.invert(pxCenter());
+          }
 
-          // Draw targets..
-          if (touchLayer.empty()) return;
-          var fillClass = context.getDebug('target') ? 'pink ' : 'nocolor ';
+          if (setCenterZoom(loc2, map.zoom())) {
+              dispatch$1.call('move', this, map);
+          }
 
-          var targets = touchLayer.selectAll('.kr_error')
-              .data(data, function(d) { return d.id; });
+          scheduleRedraw();
+          return map;
+      };
 
-          // exit
-          targets.exit()
-              .remove();
 
-          // enter/update
-          targets.enter()
-              .append('rect')
-              .attr('width', '20px')
-              .attr('height', '20px')
-              .attr('x', '-8px')
-              .attr('y', '-22px')
-              .merge(targets)
-              .sort(sortY)
-              .attr('class', function(d) {
-                  return 'kr_error target kr_error-' + d.id + ' ' + fillClass;
-              })
-              .attr('transform', getTransform);
+      map.zoom = function(z2) {
+          if (!arguments.length) {
+              return Math.max(geoScaleToZoom(projection.scale(), TILESIZE), 0);
+          }
 
+          if (z2 < _minzoom) {
+              surface.interrupt();
+              uiFlash().text(t('cannot_zoom'))();
+              z2 = context.minEditableZoom();
+          }
 
-          function sortY(a, b) {
-              return (a.id === selectedID) ? 1
-                  : (b.id === selectedID) ? -1
-                  : (a.severity === 'error' && b.severity !== 'error') ? 1
-                  : (b.severity === 'error' && a.severity !== 'error') ? -1
-                  : b.loc[1] - a.loc[1];
+          if (setCenterZoom(map.center(), z2)) {
+              dispatch$1.call('move', this, map);
           }
-      }
 
+          scheduleRedraw();
+          return map;
+      };
 
-      // Draw the keepRight layer and schedule loading errors and updating markers.
-      function drawKeepRight(selection$$1) {
-          var service = getService();
 
-          var surface = context.surface();
-          if (surface && !surface.empty()) {
-              touchLayer = surface.selectAll('.data-layer.touch .layer-touch.markers');
+      map.centerZoom = function(loc2, z2) {
+          if (setCenterZoom(loc2, z2)) {
+              dispatch$1.call('move', this, map);
           }
 
-          drawLayer = selection$$1.selectAll('.layer-keepRight')
-              .data(service ? [0] : []);
+          scheduleRedraw();
+          return map;
+      };
 
-          drawLayer.exit()
-              .remove();
 
-          drawLayer = drawLayer.enter()
-              .append('g')
-              .attr('class', 'layer-keepRight')
-              .style('display', _keepRightEnabled ? 'block' : 'none')
-              .merge(drawLayer);
+      map.zoomTo = function(entity) {
+          var extent = entity.extent(context.graph());
+          if (!isFinite(extent.area())) return map;
 
-          if (_keepRightEnabled) {
-              if (service && ~~context.map().zoom() >= minZoom) {
-                  editOn();
-                  service.loadErrors(projection);
-                  updateMarkers();
-              } else {
-                  editOff();
-              }
-          }
-      }
+          var z2 = clamp(map.trimmedExtentZoom(extent), context.minEditableZoom(), 20);
+          return map.centerZoom(extent.center(), z2);
+      };
 
 
-      // Toggles the layer on and off
-      drawKeepRight.enabled = function(val) {
-          if (!arguments.length) return _keepRightEnabled;
+      map.centerEase = function(loc2, duration) {
+          duration = duration || 250;
+          setCenterZoom(loc2, map.zoom(), duration);
+          return map;
+      };
 
-          _keepRightEnabled = val;
-          if (_keepRightEnabled) {
-              layerOn();
-          } else {
-              layerOff();
-              if (context.selectedErrorID()) {
-                  context.enter(modeBrowse(context));
-              }
-          }
 
-          dispatch.call('change');
-          return this;
+      map.zoomEase = function(z2, duration) {
+          duration = duration || 250;
+          setCenterZoom(map.center(), z2, duration, false);
+          return map;
       };
 
 
-      drawKeepRight.supported = function() {
-          return !!getService();
+      map.centerZoomEase = function(loc2, z2, duration) {
+          duration = duration || 250;
+          setCenterZoom(loc2, z2, duration, false);
+          return map;
       };
 
 
-      return drawKeepRight;
-  }
+      map.transformEase = function(t2, duration) {
+          duration = duration || 250;
+          setTransform(t2, duration, false);
+          return map;
+      };
 
-  // Touch targets control which other vertices we can drag a vertex onto.
-  //
-  // - the activeID - nope
-  // - 1 away (adjacent) to the activeID - yes (vertices will be merged)
-  // - 2 away from the activeID - nope (would create a self intersecting segment)
-  // - all others on a linear way - yes
-  // - all others on a closed way - nope (would create a self intersecting polygon)
-  //
-  // returns
-  // 0 = active vertex - no touch/connect
-  // 1 = passive vertex - yes touch/connect
-  // 2 = adjacent vertex - yes but pay attention segmenting a line here
-  //
-  function svgPassiveVertex(node, graph, activeID) {
-      if (!activeID) return 1;
-      if (activeID === node.id) return 0;
 
-      var parents = graph.parentWays(node);
+      map.zoomToEase = function(entity, duration) {
+          var extent = entity.extent(context.graph());
+          if (!isFinite(extent.area())) return map;
 
-      for (var i = 0; i < parents.length; i++) {
-          var nodes = parents[i].nodes;
-          var isClosed = parents[i].isClosed();
-          for (var j = 0; j < nodes.length; j++) {   // find this vertex, look nearby
-              if (nodes[j] === node.id) {
-                  var ix1 = j - 2;
-                  var ix2 = j - 1;
-                  var ix3 = j + 1;
-                  var ix4 = j + 2;
+          var z2 = clamp(map.trimmedExtentZoom(extent), context.minEditableZoom(), 20);
+          return map.centerZoomEase(extent.center(), z2, duration);
+      };
 
-                  if (isClosed) {  // wraparound if needed
-                      var max = nodes.length - 1;
-                      if (ix1 < 0)   ix1 = max + ix1;
-                      if (ix2 < 0)   ix2 = max + ix2;
-                      if (ix3 > max) ix3 = ix3 - max;
-                      if (ix4 > max) ix4 = ix4 - max;
-                  }
 
-                  if (nodes[ix1] === activeID) return 0;        // no - prevent self intersect
-                  else if (nodes[ix2] === activeID) return 2;   // ok - adjacent
-                  else if (nodes[ix3] === activeID) return 2;   // ok - adjacent
-                  else if (nodes[ix4] === activeID) return 0;   // no - prevent self intersect
-                  else if (isClosed && nodes.indexOf(activeID) !== -1) return 0;  // no - prevent self intersect
-              }
-          }
-      }
+      map.startEase = function() {
+          utilBindOnce(surface, 'mousedown.ease', function() {
+              map.cancelEase();
+          });
+          return map;
+      };
 
-      return 1;   // ok
-  }
 
+      map.cancelEase = function() {
+          _selection.interrupt();
+          return map;
+      };
 
-  function svgMarkerSegments(projection$$1, graph, dt,
-                                    shouldReverse,
-                                    bothDirections) {
-      return function(entity) {
-          var i = 0;
-          var offset = dt;
-          var segments = [];
-          var clip = d3_geoIdentity().clipExtent(projection$$1.clipExtent()).stream;
-          var coordinates = graph.childNodes(entity).map(function(n) { return n.loc; });
-          var a, b;
 
-          if (shouldReverse(entity)) {
-              coordinates.reverse();
+      map.extent = function(val) {
+          if (!arguments.length) {
+              return new geoExtent(
+                  projection.invert([0, _dimensions[1]]),
+                  projection.invert([_dimensions[0], 0])
+              );
+          } else {
+              var extent = geoExtent(val);
+              map.centerZoom(extent.center(), map.extentZoom(extent));
           }
+      };
 
-          geoStream({
-              type: 'LineString',
-              coordinates: coordinates
-          }, projection$$1.stream(clip({
-              lineStart: function() {},
-              lineEnd: function() { a = null; },
-              point: function(x, y) {
-                  b = [x, y];
 
-                  if (a) {
-                      var span = geoVecLength(a, b) - offset;
+      map.trimmedExtent = function(val) {
+          if (!arguments.length) {
+              var headerY = 60;
+              var footerY = 30;
+              var pad = 10;
+              return new geoExtent(
+                  projection.invert([pad, _dimensions[1] - footerY - pad]),
+                  projection.invert([_dimensions[0] - pad, headerY + pad])
+              );
+          } else {
+              var extent = geoExtent(val);
+              map.centerZoom(extent.center(), map.trimmedExtentZoom(extent));
+          }
+      };
 
-                      if (span >= 0) {
-                          var heading = geoVecAngle(a, b);
-                          var dx = dt * Math.cos(heading);
-                          var dy = dt * Math.sin(heading);
-                          var p = [
-                              a[0] + offset * Math.cos(heading),
-                              a[1] + offset * Math.sin(heading)
-                          ];
 
-                          // gather coordinates
-                          var coord = [a, p];
-                          for (span -= dt; span >= 0; span -= dt) {
-                              p = geoVecAdd(p, [dx, dy]);
-                              coord.push(p);
-                          }
-                          coord.push(b);
+      function calcExtentZoom(extent, dim) {
+          var tl = projection([extent[0][0], extent[1][1]]);
+          var br = projection([extent[1][0], extent[0][1]]);
 
-                          // generate svg paths
-                          var segment = '';
-                          var j;
+          // Calculate maximum zoom that fits extent
+          var hFactor = (br[0] - tl[0]) / dim[0];
+          var vFactor = (br[1] - tl[1]) / dim[1];
+          var hZoomDiff = Math.log(Math.abs(hFactor)) / Math.LN2;
+          var vZoomDiff = Math.log(Math.abs(vFactor)) / Math.LN2;
+          var newZoom = map.zoom() - Math.max(hZoomDiff, vZoomDiff);
 
-                          for (j = 0; j < coord.length; j++) {
-                              segment += (j === 0 ? 'M' : 'L') + coord[j][0] + ',' + coord[j][1];
-                          }
-                          segments.push({ id: entity.id, index: i++, d: segment });
+          return newZoom;
+      }
 
-                          if (bothDirections(entity)) {
-                              segment = '';
-                              for (j = coord.length - 1; j >= 0; j--) {
-                                  segment += (j === coord.length - 1 ? 'M' : 'L') + coord[j][0] + ',' + coord[j][1];
-                              }
-                              segments.push({ id: entity.id, index: i++, d: segment });
-                          }
-                      }
 
-                      offset = -span;
-                  }
+      map.extentZoom = function(val) {
+          return calcExtentZoom(geoExtent(val), _dimensions);
+      };
 
-                  a = b;
-              }
-          })));
 
-          return segments;
+      map.trimmedExtentZoom = function(val) {
+          var trimY = 120;
+          var trimX = 40;
+          var trimmed = [_dimensions[0] - trimX, _dimensions[1] - trimY];
+          return calcExtentZoom(geoExtent(val), trimmed);
       };
-  }
 
 
-  function svgPath(projection$$1, graph, isArea) {
+      map.editable = function() {
+          var osmLayer = surface.selectAll('.data-layer.osm');
+          if (!osmLayer.empty() && osmLayer.classed('disabled')) return false;
 
-      // Explanation of magic numbers:
-      // "padding" here allows space for strokes to extend beyond the viewport,
-      // so that the stroke isn't drawn along the edge of the viewport when
-      // the shape is clipped.
-      //
-      // When drawing lines, pad viewport by 5px.
-      // When drawing areas, pad viewport by 65px in each direction to allow
-      // for 60px area fill stroke (see ".fill-partial path.fill" css rule)
+          return map.zoom() >= context.minEditableZoom();
+      };
 
-      var cache = {};
-      var padding = isArea ? 65 : 5;
-      var viewport = projection$$1.clipExtent();
-      var paddedExtent = [
-          [viewport[0][0] - padding, viewport[0][1] - padding],
-          [viewport[1][0] + padding, viewport[1][1] + padding]
-      ];
-      var clip = d3_geoIdentity().clipExtent(paddedExtent).stream;
-      var project = projection$$1.stream;
-      var path = d3_geoPath()
-          .projection({stream: function(output) { return project(clip(output)); }});
 
-      var svgpath = function(entity) {
-          if (entity.id in cache) {
-              return cache[entity.id];
-          } else {
-              return cache[entity.id] = path(entity.asGeoJSON(graph));
-          }
+      map.notesEditable = function() {
+          var noteLayer = surface.selectAll('.data-layer.notes');
+          if (!noteLayer.empty() && noteLayer.classed('disabled')) return false;
+
+          return map.zoom() >= context.minEditableZoom();
       };
 
-      svgpath.geojson = function(d) {
-          if (d.__featurehash__ !== undefined) {
-              if (d.__featurehash__ in cache) {
-                  return cache[d.__featurehash__];
-              } else {
-                  return cache[d.__featurehash__] = path(d);
-              }
-          } else {
-              return path(d);
-          }
+
+      map.minzoom = function(val) {
+          if (!arguments.length) return _minzoom;
+          _minzoom = val;
+          return map;
       };
 
-      return svgpath;
+
+      map.layers = drawLayers;
+
+
+      return utilRebind(map, dispatch$1, 'on');
   }
 
+  function uiMapInMap(context) {
+
+      function map_in_map(selection) {
+          var backgroundLayer = rendererTileLayer(context);
+          var overlayLayers = {};
+          var projection = geoRawMercator();
+          var dataLayer = svgData(projection, context).showLabels(false);
+          var debugLayer = svgDebug(projection, context);
+          var zoom = d3_zoom()
+              .scaleExtent([geoZoomToScale(0.5), geoZoomToScale(24)])
+              .on('start', zoomStarted)
+              .on('zoom', zoomed)
+              .on('end', zoomEnded);
+          var isTransformed = false;
+          var isHidden = true;
+          var skipEvents = false;
+          var gesture = null;
+          var zDiff = 6;    // by default, minimap renders at (main zoom - 6)
+          var wrap = select(null);
+          var tiles = select(null);
+          var viewport = select(null);
+          var tStart;    // transform at start of gesture
+          var tCurr;     // transform at most recent event
+          var timeoutId;
+
 
-  function svgPointTransform(projection$$1) {
-      var svgpoint = function(entity) {
-          // http://jsperf.com/short-array-join
-          var pt = projection$$1(entity.loc);
-          return 'translate(' + pt[0] + ',' + pt[1] + ')';
-      };
+          function zoomStarted() {
+              if (skipEvents) return;
+              tStart = tCurr = projection.transform();
+              gesture = null;
+          }
 
-      svgpoint.geojson = function(d) {
-          return svgpoint(d.properties.entity);
-      };
 
-      return svgpoint;
-  }
+          function zoomed() {
+              if (skipEvents) return;
 
+              var x = event.transform.x;
+              var y = event.transform.y;
+              var k = event.transform.k;
+              var isZooming = (k !== tStart.k);
+              var isPanning = (x !== tStart.x || y !== tStart.y);
 
-  function svgRelationMemberTags(graph) {
-      return function(entity) {
-          var tags = entity.tags;
-          graph.parentRelations(entity).forEach(function(relation) {
-              var type = relation.tags.type;
-              if (type === 'multipolygon' || type === 'boundary') {
-                  tags = assignIn({}, relation.tags, tags);
+              if (!isZooming && !isPanning) {
+                  return;  // no change
               }
-          });
-          return tags;
-      };
-  }
-
-
-  function svgSegmentWay(way, graph, activeID) {
-      // When there is no activeID, we can memoize this expensive computation
-      if (activeID === undefined) {
-          return graph.transient(way, 'waySegments', getWaySegments);
-      } else {
-          return getWaySegments();
-      }
 
-      function getWaySegments() {
-          var isActiveWay = (way.nodes.indexOf(activeID) !== -1);
-          var features = { passive: [], active: [] };
-          var start = {};
-          var end = {};
-          var node, type;
+              // lock in either zooming or panning, don't allow both in minimap.
+              if (!gesture) {
+                  gesture = isZooming ? 'zoom' : 'pan';
+              }
 
-          for (var i = 0; i < way.nodes.length; i++) {
-              node = graph.entity(way.nodes[i]);
-              type = svgPassiveVertex(node, graph, activeID);
-              end = { node: node, type: type };
+              var tMini = projection.transform();
+              var tX, tY, scale;
 
-              if (start.type !== undefined) {
-                  if (start.node.id === activeID || end.node.id === activeID) ; else if (isActiveWay && (start.type === 2 || end.type === 2)) {   // one adjacent vertex
-                      pushActive(start, end, i);
-                  } else if (start.type === 0 && end.type === 0) {   // both active vertices
-                      pushActive(start, end, i);
-                  } else {
-                      pushPassive(start, end, i);
-                  }
+              if (gesture === 'zoom') {
+                  var dMini = utilGetDimensions(wrap);
+                  var cMini = geoVecScale(dMini, 0.5);
+                  scale = k / tMini.k;
+                  tX = (cMini[0] / scale - cMini[0]) * scale;
+                  tY = (cMini[1] / scale - cMini[1]) * scale;
+              } else {
+                  k = tMini.k;
+                  scale = 1;
+                  tX = x - tMini.x;
+                  tY = y - tMini.y;
               }
 
-              start = end;
-          }
+              utilSetTransform(tiles, tX, tY, scale);
+              utilSetTransform(viewport, 0, 0, scale);
+              isTransformed = true;
+              tCurr = identity$7.translate(x, y).scale(k);
 
-          return features;
+              var zMain = geoScaleToZoom(context.projection.scale());
+              var zMini = geoScaleToZoom(k);
 
-          function pushActive(start, end, index) {
-              features.active.push({
-                  type: 'Feature',
-                  id: way.id + '-' + index + '-nope',
-                  properties: {
-                      nope: true,
-                      target: true,
-                      entity: way,
-                      nodes: [start.node, end.node],
-                      index: index
-                  },
-                  geometry: {
-                      type: 'LineString',
-                      coordinates: [start.node.loc, end.node.loc]
-                  }
-              });
-          }
+              zDiff = zMain - zMini;
 
-          function pushPassive(start, end, index) {
-              features.passive.push({
-                  type: 'Feature',
-                  id: way.id + '-' + index,
-                  properties: {
-                      target: true,
-                      entity: way,
-                      nodes: [start.node, end.node],
-                      index: index
-                  },
-                  geometry: {
-                      type: 'LineString',
-                      coordinates: [start.node.loc, end.node.loc]
-                  }
-              });
+              queueRedraw();
           }
-      }
-  }
 
-  function svgGeolocate(projection) {
-      var layer = select(null);
-      var _position;
 
+          function zoomEnded() {
+              if (skipEvents) return;
+              if (gesture !== 'pan') return;
 
-      function init() {
-          if (svgGeolocate.initialized) return;  // run once
-          svgGeolocate.enabled = false;
-          svgGeolocate.initialized = true;
-      }
+              updateProjection();
+              gesture = null;
+              var dMini = utilGetDimensions(wrap);
+              var cMini = geoVecScale(dMini, 0.5);
+              context.map().center(projection.invert(cMini));   // recenter main map..
+          }
 
-      function showLayer() {
-          layer.style('display', 'block');
-      }
 
+          function updateProjection() {
+              var loc = context.map().center();
+              var dMini = utilGetDimensions(wrap);
+              var cMini = geoVecScale(dMini, 0.5);
+              var tMain = context.projection.transform();
+              var zMain = geoScaleToZoom(tMain.k);
+              var zMini = Math.max(zMain - zDiff, 0.5);
+              var kMini = geoZoomToScale(zMini);
 
-      function hideLayer() {
-          layer
-              .transition()
-              .duration(250)
-              .style('opacity', 0);
-      }
+              projection
+                  .translate([tMain.x, tMain.y])
+                  .scale(kMini);
 
-      function layerOn() {
-          layer
-              .style('opacity', 0)
-              .transition()
-              .duration(250)
-              .style('opacity', 1);
+              var point = projection(loc);
+              var mouse = (gesture === 'pan') ? geoVecSubtract([tCurr.x, tCurr.y], [tStart.x, tStart.y]) : [0, 0];
+              var xMini = cMini[0] - point[0] + tMain.x + mouse[0];
+              var yMini = cMini[1] - point[1] + tMain.y + mouse[1];
 
-      }
+              projection
+                  .translate([xMini, yMini])
+                  .clipExtent([[0, 0], dMini]);
 
-      function layerOff() {
-          layer.style('display', 'none');
-      }
+              tCurr = projection.transform();
 
-      function transform(d) {
-          return svgPointTransform(projection)(d);
-      }
+              if (isTransformed) {
+                  utilSetTransform(tiles, 0, 0);
+                  utilSetTransform(viewport, 0, 0);
+                  isTransformed = false;
+              }
 
-      function accuracy(accuracy, loc) { // converts accuracy to pixels...
-          var degreesRadius = geoMetersToLat(accuracy),
-              tangentLoc = [loc[0], loc[1] + degreesRadius],
-              projectedTangent = projection(tangentLoc),
-              projectedLoc = projection([loc[0], loc[1]]);
+              zoom
+                  .scaleExtent([geoZoomToScale(0.5), geoZoomToScale(zMain - 3)]);
 
-          // southern most point will have higher pixel value...
-         return Math.round(projectedLoc[1] - projectedTangent[1]).toString();
-      }
+              skipEvents = true;
+              wrap.call(zoom.transform, tCurr);
+              skipEvents = false;
+          }
 
-      function update() {
-          var geolocation = { loc: [_position.coords.longitude, _position.coords.latitude] };
 
-          var groups = layer.selectAll('.geolocations').selectAll('.geolocation')
-              .data([geolocation]);
+          function redraw() {
+              clearTimeout(timeoutId);
+              if (isHidden) return;
 
-          groups.exit()
-              .remove();
+              updateProjection();
 
-          var pointsEnter = groups.enter()
-              .append('g')
-              .attr('class', 'geolocation');
+              var dMini = utilGetDimensions(wrap);
+              var zMini = geoScaleToZoom(projection.scale());
 
-          pointsEnter
-              .append('circle')
-              .attr('id', 'geolocate-radius')
-              .attr('dx', '0')
-              .attr('dy', '0')
-              .attr('fill', 'rgb(15,128,225)')
-              .attr('fill-opacity', '0.3')
-              .attr('r', '0');
+              // setup tile container
+              tiles = wrap
+                  .selectAll('.map-in-map-tiles')
+                  .data([0]);
 
-          pointsEnter
-              .append('circle')
-              .attr('dx', '0')
-              .attr('dy', '0')
-              .attr('fill', 'rgb(15,128,225)')
-              .attr('stroke', 'white')
-              .attr('stroke-width', '1.5')
-              .attr('r', '6');
+              tiles = tiles.enter()
+                  .append('div')
+                  .attr('class', 'map-in-map-tiles')
+                  .merge(tiles);
 
-          groups.merge(pointsEnter)
-              .attr('transform', transform);
+              // redraw background
+              backgroundLayer
+                  .source(context.background().baseLayerSource())
+                  .projection(projection)
+                  .dimensions(dMini);
 
-          select('#geolocate-radius').attr('r', accuracy(_position.coords.accuracy, geolocation.loc));
-      }
+              var background = tiles
+                  .selectAll('.map-in-map-background')
+                  .data([0]);
 
-      function drawLocation(selection$$1) {
-          var enabled = svgGeolocate.enabled;
+              background.enter()
+                  .append('div')
+                  .attr('class', 'map-in-map-background')
+                  .merge(background)
+                  .call(backgroundLayer);
 
-          layer = selection$$1.selectAll('.layer-geolocate')
-              .data([0]);
 
-          layer.exit()
-              .remove();
+              // redraw overlay
+              var overlaySources = context.background().overlayLayerSources();
+              var activeOverlayLayers = [];
+              for (var i = 0; i < overlaySources.length; i++) {
+                  if (overlaySources[i].validZoom(zMini)) {
+                      if (!overlayLayers[i]) overlayLayers[i] = rendererTileLayer(context);
+                      activeOverlayLayers.push(overlayLayers[i]
+                          .source(overlaySources[i])
+                          .projection(projection)
+                          .dimensions(dMini));
+                  }
+              }
 
-          var layerEnter = layer.enter()
-              .append('g')
-              .attr('class', 'layer-geolocate')
-              .style('display', enabled ? 'block' : 'none');
+              var overlay = tiles
+                  .selectAll('.map-in-map-overlay')
+                  .data([0]);
 
-          layerEnter
-              .append('g')
-              .attr('class', 'geolocations');
+              overlay = overlay.enter()
+                  .append('div')
+                  .attr('class', 'map-in-map-overlay')
+                  .merge(overlay);
 
-          layer = layerEnter
-              .merge(layer);
 
-          if (enabled) {
-              update();
-          } else {
-              layerOff();
-          }
-      }
+              var overlays = overlay
+                  .selectAll('div')
+                  .data(activeOverlayLayers, function(d) { return d.source().name(); });
 
-      drawLocation.enabled = function (position, enabled) {
-          if (!arguments.length) return svgGeolocate.enabled;
-          _position = position;
-          svgGeolocate.enabled = enabled;
-          if (svgGeolocate.enabled) {
-              showLayer();
-              layerOn();
-          } else {
-              hideLayer();
-          }
-          return this;
-      };
+              overlays.exit()
+                  .remove();
 
-      init();
-      return drawLocation;
-  }
+              overlays = overlays.enter()
+                  .append('div')
+                  .merge(overlays)
+                  .each(function(layer) { select(this).call(layer); });
 
-  function svgLabels(projection$$1, context) {
-      var path = d3_geoPath(projection$$1);
-      var detected = utilDetect();
-      var baselineHack = (detected.ie || detected.browser.toLowerCase() === 'edge');
-      var _rdrawn = rbush_1();
-      var _rskipped = rbush_1();
-      var _textWidthCache = {};
-      var _entitybboxes = {};
 
-      // Listed from highest to lowest priority
-      var labelStack = [
-          ['line', 'aeroway', '*', 12],
-          ['line', 'highway', 'motorway', 12],
-          ['line', 'highway', 'trunk', 12],
-          ['line', 'highway', 'primary', 12],
-          ['line', 'highway', 'secondary', 12],
-          ['line', 'highway', 'tertiary', 12],
-          ['line', 'highway', '*', 12],
-          ['line', 'railway', '*', 12],
-          ['line', 'waterway', '*', 12],
-          ['area', 'aeroway', '*', 12],
-          ['area', 'amenity', '*', 12],
-          ['area', 'building', '*', 12],
-          ['area', 'historic', '*', 12],
-          ['area', 'leisure', '*', 12],
-          ['area', 'man_made', '*', 12],
-          ['area', 'natural', '*', 12],
-          ['area', 'shop', '*', 12],
-          ['area', 'tourism', '*', 12],
-          ['area', 'camp_site', '*', 12],
-          ['point', 'aeroway', '*', 10],
-          ['point', 'amenity', '*', 10],
-          ['point', 'building', '*', 10],
-          ['point', 'historic', '*', 10],
-          ['point', 'leisure', '*', 10],
-          ['point', 'man_made', '*', 10],
-          ['point', 'natural', '*', 10],
-          ['point', 'shop', '*', 10],
-          ['point', 'tourism', '*', 10],
-          ['point', 'camp_site', '*', 10],
-          ['line', 'name', '*', 12],
-          ['area', 'name', '*', 12],
-          ['point', 'name', '*', 10]
-      ];
+              var dataLayers = tiles
+                  .selectAll('.map-in-map-data')
+                  .data([0]);
 
+              dataLayers.exit()
+                  .remove();
 
-      function blacklisted(preset) {
-          var noIcons = ['building', 'landuse', 'natural'];
-          return some(noIcons, function(s) {
-              return preset.id.indexOf(s) >= 0;
-          });
-      }
+              dataLayers = dataLayers.enter()
+                  .append('svg')
+                  .attr('class', 'map-in-map-data')
+                  .merge(dataLayers)
+                  .call(dataLayer)
+                  .call(debugLayer);
 
 
-      function get(array, prop) {
-          return function(d, i) { return array[i][prop]; };
-      }
+              // redraw viewport bounding box
+              if (gesture !== 'pan') {
+                  var getPath = d3_geoPath(projection);
+                  var bbox = { type: 'Polygon', coordinates: [context.map().extent().polygon()] };
 
+                  viewport = wrap.selectAll('.map-in-map-viewport')
+                      .data([0]);
 
-      function textWidth(text, size, elem) {
-          var c = _textWidthCache[size];
-          if (!c) c = _textWidthCache[size] = {};
+                  viewport = viewport.enter()
+                      .append('svg')
+                      .attr('class', 'map-in-map-viewport')
+                      .merge(viewport);
 
-          if (c[text]) {
-              return c[text];
 
-          } else if (elem) {
-              c[text] = elem.getComputedTextLength();
-              return c[text];
+                  var path = viewport.selectAll('.map-in-map-bbox')
+                      .data([bbox]);
 
-          } else {
-              var str = encodeURIComponent(text).match(/%[CDEFcdef]/g);
-              if (str === null) {
-                  return size / 3 * 2 * text.length;
-              } else {
-                  return size / 3 * (2 * text.length + str.length);
+                  path.enter()
+                      .append('path')
+                      .attr('class', 'map-in-map-bbox')
+                      .merge(path)
+                      .attr('d', getPath)
+                      .classed('thick', function(d) { return getPath.area(d) < 30; });
               }
           }
-      }
-
 
-      function drawLinePaths(selection, entities, filter, classes, labels) {
-          var paths = selection.selectAll('path')
-              .filter(filter)
-              .data(entities, osmEntity$$1.key);
 
-          // exit
-          paths.exit()
-              .remove();
+          function queueRedraw() {
+              clearTimeout(timeoutId);
+              timeoutId = setTimeout(function() { redraw(); }, 750);
+          }
 
-          // enter/update
-          paths.enter()
-              .append('path')
-              .style('stroke-width', get(labels, 'font-size'))
-              .attr('id', function(d) { return 'labelpath-' + d.id; })
-              .attr('class', classes)
-              .merge(paths)
-              .attr('d', get(labels, 'lineString'));
-      }
 
+          function toggle() {
+              if (event) event.preventDefault();
 
-      function drawLineLabels(selection, entities, filter, classes, labels) {
-          var texts = selection.selectAll('text.' + classes)
-              .filter(filter)
-              .data(entities, osmEntity$$1.key);
+              isHidden = !isHidden;
 
-          // exit
-          texts.exit()
-              .remove();
+              select('.minimap-toggle-item')
+                  .classed('active', !isHidden)
+                  .select('input')
+                  .property('checked', !isHidden);
 
-          // enter
-          texts.enter()
-              .append('text')
-              .attr('class', function(d, i) { return classes + ' ' + labels[i].classes + ' ' + d.id; })
-              .attr('dy', baselineHack ? '0.35em' : null)
-              .append('textPath')
-              .attr('class', 'textpath');
+              if (isHidden) {
+                  wrap
+                      .style('display', 'block')
+                      .style('opacity', '1')
+                      .transition()
+                      .duration(200)
+                      .style('opacity', '0')
+                      .on('end', function() {
+                          selection.selectAll('.map-in-map')
+                              .style('display', 'none');
+                      });
+              } else {
+                  wrap
+                      .style('display', 'block')
+                      .style('opacity', '0')
+                      .transition()
+                      .duration(200)
+                      .style('opacity', '1')
+                      .on('end', function() {
+                          redraw();
+                      });
+              }
+          }
 
-          // update
-          selection.selectAll('text.' + classes).selectAll('.textpath')
-              .filter(filter)
-              .data(entities, osmEntity$$1.key)
-              .attr('startOffset', '50%')
-              .attr('xlink:href', function(d) { return '#labelpath-' + d.id; })
-              .text(utilDisplayNameForPath);
-      }
 
+          uiMapInMap.toggle = toggle;
 
-      function drawPointLabels(selection, entities, filter, classes, labels) {
-          var texts = selection.selectAll('text.' + classes)
-              .filter(filter)
-              .data(entities, osmEntity$$1.key);
+          wrap = selection.selectAll('.map-in-map')
+              .data([0]);
 
-          // exit
-          texts.exit()
-              .remove();
+          wrap = wrap.enter()
+              .append('div')
+              .attr('class', 'map-in-map')
+              .style('display', (isHidden ? 'none' : 'block'))
+              .call(zoom)
+              .on('dblclick.zoom', null)
+              .merge(wrap);
 
-          // enter/update
-          texts.enter()
-              .append('text')
-              .attr('class', function(d, i) {
-                  return classes + ' ' + labels[i].classes + ' ' + d.id;
-              })
-              .merge(texts)
-              .attr('x', get(labels, 'x'))
-              .attr('y', get(labels, 'y'))
-              .style('text-anchor', get(labels, 'textAnchor'))
-              .text(utilDisplayName)
-              .each(function(d, i) {
-                  textWidth(utilDisplayName(d), labels[i].height, this);
+          context.map()
+              .on('drawn.map-in-map', function(drawn) {
+                  if (drawn.full === true) {
+                      redraw();
+                  }
               });
-      }
-
 
-      function drawAreaLabels(selection, entities, filter, classes, labels) {
-          entities = entities.filter(hasText);
-          labels = labels.filter(hasText);
-          drawPointLabels(selection, entities, filter, classes, labels);
+          redraw();
 
-          function hasText(d, i) {
-              return labels[i].hasOwnProperty('x') && labels[i].hasOwnProperty('y');
-          }
+          context.keybinding()
+              .on(t('background.minimap.key'), toggle);
       }
 
+      return map_in_map;
+  }
+
+  function uiSettingsCustomBackground(context) {
+      var dispatch$1 = dispatch('change');
 
-      function drawAreaIcons(selection, entities, filter, classes, labels) {
-          var icons = selection.selectAll('use.' + classes)
-              .filter(filter)
-              .data(entities, osmEntity$$1.key);
+      function render(selection) {
+          var _origSettings = {
+              template: context.storage('background-custom-template')
+          };
+          var _currSettings = cloneDeep(_origSettings);
+          var example = 'https://{switch:a,b,c}.tile.openstreetmap.org/{zoom}/{x}/{y}.png';
+          var modal = uiConfirm(selection).okButton();
 
-          // exit
-          icons.exit()
-              .remove();
+          modal
+              .classed('settings-modal settings-custom-background', true);
 
-          // enter/update
-          icons.enter()
-              .append('use')
-              .attr('class', 'icon ' + classes)
-              .attr('width', '17px')
-              .attr('height', '17px')
-              .merge(icons)
-              .attr('transform', get(labels, 'transform'))
-              .attr('xlink:href', function(d) {
-                  var preset = context.presets().match(d, context.graph());
-                  var picon = preset && preset.icon;
+          modal.select('.modal-section.header')
+              .append('h3')
+              .text(t('settings.custom_background.header'));
 
-                  if (!picon) {
-                      return '';
-                  } else {
-                      var isMaki = /^maki-/.test(picon);
-                      return '#' + picon + (isMaki ? '-15' : '');
-                  }
-              });
-      }
 
+          var textSection = modal.select('.modal-section.message-text');
 
-      function drawCollisionBoxes(selection, rtree, which) {
-          var classes = 'debug ' + which + ' ' + (which === 'debug-skipped' ? 'orange' : 'yellow');
+          textSection
+              .append('pre')
+              .attr('class', 'instructions-template')
+              .text(t('settings.custom_background.instructions', { example: example }));
 
-          var gj = [];
-          if (context.getDebug('collision')) {
-              gj = rtree.all().map(function(d) {
-                  return { type: 'Polygon', coordinates: [[
-                      [d.minX, d.minY],
-                      [d.maxX, d.minY],
-                      [d.maxX, d.maxY],
-                      [d.minX, d.maxY],
-                      [d.minX, d.minY]
-                  ]]};
-              });
-          }
+          textSection
+              .append('textarea')
+              .attr('class', 'field-template')
+              .attr('placeholder', t('settings.custom_background.template.placeholder'))
+              .call(utilNoAuto)
+              .property('value', _currSettings.template);
 
-          var boxes = selection.selectAll('.' + which)
-              .data(gj);
 
-          // exit
-          boxes.exit()
-              .remove();
+          // insert a cancel button
+          var buttonSection = modal.select('.modal-section.buttons');
 
-          // enter/update
-          boxes.enter()
-              .append('path')
-              .attr('class', classes)
-              .merge(boxes)
-              .attr('d', d3_geoPath());
-      }
+          buttonSection
+              .insert('button', '.ok-button')
+              .attr('class', 'button cancel-button secondary-action')
+              .text(t('confirm.cancel'));
 
 
-      function drawLabels(selection, graph, entities, filter, dimensions, fullRedraw) {
-          var wireframe = context.surface().classed('fill-wireframe');
-          var zoom = geoScaleToZoom(projection$$1.scale());
+          buttonSection.select('.cancel-button')
+              .on('click.cancel', clickCancel);
 
-          var labelable = [];
-          var renderNodeAs = {};
-          var i, j, k, entity, geometry;
+          buttonSection.select('.ok-button')
+              .attr('disabled', isSaveDisabled)
+              .on('click.save', clickSave);
 
-          for (i = 0; i < labelStack.length; i++) {
-              labelable.push([]);
+
+          function isSaveDisabled() {
+              return null;
           }
 
-          if (fullRedraw) {
-              _rdrawn.clear();
-              _rskipped.clear();
-              _entitybboxes = {};
 
-          } else {
-              for (i = 0; i < entities.length; i++) {
-                  entity = entities[i];
-                  var toRemove = []
-                      .concat(_entitybboxes[entity.id] || [])
-                      .concat(_entitybboxes[entity.id + 'I'] || []);
+          // restore the original template
+          function clickCancel() {
+              textSection.select('.field-template').property('value', _origSettings.template);
+              context.storage('background-custom-template', _origSettings.template);
+              this.blur();
+              modal.close();
+          }
 
-                  for (j = 0; j < toRemove.length; j++) {
-                      _rdrawn.remove(toRemove[j]);
-                      _rskipped.remove(toRemove[j]);
-                  }
-              }
+          // accept the current template
+          function clickSave() {
+              _currSettings.template = textSection.select('.field-template').property('value');
+              context.storage('background-custom-template', _currSettings.template);
+              this.blur();
+              modal.close();
+              dispatch$1.call('change', this, _currSettings);
           }
+      }
 
-          // Loop through all the entities to do some preprocessing
-          for (i = 0; i < entities.length; i++) {
-              entity = entities[i];
-              geometry = entity.geometry(graph);
+      return utilRebind(render, dispatch$1, 'on');
+  }
 
-              // Insert collision boxes around interesting points/vertices
-              if (geometry === 'point' || (geometry === 'vertex' && isInterestingVertex(entity))) {
-                  var hasDirections = entity.directions(graph, projection$$1).length;
-                  var markerPadding;
+  function uiBackground(context) {
+      var key = t('background.key');
 
-                  if (!wireframe && geometry === 'point' && !(zoom >= 18 && hasDirections)) {
-                      renderNodeAs[entity.id] = 'point';
-                      markerPadding = 20;   // extra y for marker height
-                  } else {
-                      renderNodeAs[entity.id] = 'vertex';
-                      markerPadding = 0;
-                  }
+      var _pane = select(null), _toggleButton = select(null);
 
-                  var coord = projection$$1(entity.loc);
-                  var nodePadding = 10;
-                  var bbox = {
-                      minX: coord[0] - nodePadding,
-                      minY: coord[1] - nodePadding - markerPadding,
-                      maxX: coord[0] + nodePadding,
-                      maxY: coord[1] + nodePadding
-                  };
+      var _customSource = context.background().findSource('custom');
+      var _previousBackground = context.background().findSource(context.storage('background-last-used-toggle'));
+      var _shown = false;
 
-                  doInsert(bbox, entity.id + 'P');
-              }
+      var _backgroundList = select(null);
+      var _overlayList = select(null);
+      var _displayOptionsContainer = select(null);
+      var _offsetContainer = select(null);
 
-              // From here on, treat vertices like points
-              if (geometry === 'vertex') {
-                  geometry = 'point';
-              }
+      var backgroundDisplayOptions = uiBackgroundDisplayOptions(context);
+      var backgroundOffset = uiBackgroundOffset(context);
 
-              // Determine which entities are label-able
-              var preset = geometry === 'area' && context.presets().match(entity, graph);
-              var icon = preset && !blacklisted(preset) && preset.icon;
+      var settingsCustomBackground = uiSettingsCustomBackground(context)
+          .on('change', customChanged);
 
-              if (!icon && !utilDisplayName(entity))
-                  continue;
 
-              for (k = 0; k < labelStack.length; k++) {
-                  var matchGeom = labelStack[k][0];
-                  var matchKey = labelStack[k][1];
-                  var matchVal = labelStack[k][2];
-                  var hasVal = entity.tags[matchKey];
+      function setTooltips(selection) {
+          selection.each(function(d, i, nodes) {
+              var item = select(this).select('label');
+              var span = item.select('span');
+              var placement = (i < nodes.length / 2) ? 'bottom' : 'top';
+              var description = d.description();
+              var isOverflowing = (span.property('clientWidth') !== span.property('scrollWidth'));
 
-                  if (geometry === matchGeom && hasVal && (matchVal === '*' || matchVal === hasVal)) {
-                      labelable[k].push(entity);
-                      break;
-                  }
+              item.call(tooltip().destroyAny);
+
+              if (d === _previousBackground) {
+                  item.call(tooltip()
+                      .placement(placement)
+                      .html(true)
+                      .title(function() {
+                          var tip = '<div>' + t('background.switch') + '</div>';
+                          return uiTooltipHtml(tip, uiCmd('⌘' + key));
+                      })
+                  );
+              } else if (description || isOverflowing) {
+                  item.call(tooltip()
+                      .placement(placement)
+                      .title(description || d.name())
+                  );
               }
-          }
+          });
+      }
 
-          var positions = {
-              point: [],
-              line: [],
-              area: []
-          };
 
-          var labelled = {
-              point: [],
-              line: [],
-              area: []
-          };
+      function updateLayerSelections(selection) {
+          function active(d) {
+              return context.background().showsLayer(d);
+          }
 
-          // Try and find a valid label for labellable entities
-          for (k = 0; k < labelable.length; k++) {
-              var fontSize = labelStack[k][3];
+          selection.selectAll('li')
+              .classed('active', active)
+              .classed('switch', function(d) { return d === _previousBackground; })
+              .call(setTooltips)
+              .selectAll('input')
+              .property('checked', active);
+      }
 
-              for (i = 0; i < labelable[k].length; i++) {
-                  entity = labelable[k][i];
-                  geometry = entity.geometry(graph);
 
-                  var getName = (geometry === 'line') ? utilDisplayNameForPath : utilDisplayName;
-                  var name = getName(entity);
-                  var width = name && textWidth(name, fontSize);
-                  var p = null;
+      function chooseBackground(d) {
+          if (d.id === 'custom' && !d.template()) {
+              return editCustom();
+          }
 
-                  if (geometry === 'point' || geometry === 'vertex') {
-                      // no point or vertex labels in wireframe mode
-                      // no vertex labels at low zooms (vertices have no icons)
-                      if (wireframe) continue;
-                      var renderAs = renderNodeAs[entity.id];
-                      if (renderAs === 'vertex' && zoom < 17) continue;
+          event.preventDefault();
+          _previousBackground = context.background().baseLayerSource();
+          context.storage('background-last-used-toggle', _previousBackground.id);
+          context.storage('background-last-used', d.id);
+          context.background().baseLayerSource(d);
+          _backgroundList.call(updateLayerSelections);
+          document.activeElement.blur();
+      }
 
-                      p = getPointLabel(entity, width, fontSize, renderAs);
 
-                  } else if (geometry === 'line') {
-                      p = getLineLabel(entity, width, fontSize);
+      function customChanged(d) {
+          if (d && d.template) {
+              _customSource.template(d.template);
+              chooseBackground(_customSource);
+          } else {
+              _customSource.template('');
+              chooseBackground(context.background().findSource('none'));
+          }
+      }
 
-                  } else if (geometry === 'area') {
-                      p = getAreaLabel(entity, width, fontSize);
-                  }
 
-                  if (p) {
-                      if (geometry === 'vertex') { geometry = 'point'; }  // treat vertex like point
-                      p.classes = geometry + ' tag-' + labelStack[k][1];
-                      positions[geometry].push(p);
-                      labelled[geometry].push(entity);
-                  }
-              }
-          }
+      function editCustom() {
+          event.preventDefault();
+          context.container()
+              .call(settingsCustomBackground);
+      }
 
 
-          function isInterestingVertex(entity) {
-              var selectedIDs = context.selectedIDs();
+      function chooseOverlay(d) {
+          event.preventDefault();
+          context.background().toggleOverlayLayer(d);
+          _overlayList.call(updateLayerSelections);
+          document.activeElement.blur();
+      }
 
-              return entity.hasInterestingTags() ||
-                  entity.isEndpoint(graph) ||
-                  entity.isConnected(graph) ||
-                  selectedIDs.indexOf(entity.id) !== -1 ||
-                  some(graph.parentWays(entity), function(parent) {
-                      return selectedIDs.indexOf(parent.id) !== -1;
-                  });
-          }
 
+      function drawListItems(layerList, type, change, filter) {
+          var sources = context.background()
+              .sources(context.map().extent())
+              .filter(filter);
 
-          function getPointLabel(entity, width, height, geometry) {
-              var y = (geometry === 'point' ? -12 : 0);
-              var pointOffsets = {
-                  ltr: [15, y, 'start'],
-                  rtl: [-15, y, 'end']
-              };
+          var layerLinks = layerList.selectAll('li')
+              .data(sources, function(d) { return d.name(); });
 
-              var coord = projection$$1(entity.loc);
-              var textPadding = 2;
-              var offset = pointOffsets[textDirection];
-              var p = {
-                  height: height,
-                  width: width,
-                  x: coord[0] + offset[0],
-                  y: coord[1] + offset[1],
-                  textAnchor: offset[2]
-              };
+          layerLinks.exit()
+              .remove();
 
-              // insert a collision box for the text label..
-              var bbox;
-              if (textDirection === 'rtl') {
-                  bbox = {
-                      minX: p.x - width - textPadding,
-                      minY: p.y - (height / 2) - textPadding,
-                      maxX: p.x + textPadding,
-                      maxY: p.y + (height / 2) + textPadding
-                  };
-              } else {
-                  bbox = {
-                      minX: p.x - textPadding,
-                      minY: p.y - (height / 2) - textPadding,
-                      maxX: p.x + width + textPadding,
-                      maxY: p.y + (height / 2) + textPadding
-                  };
-              }
+          var enter = layerLinks.enter()
+              .append('li')
+              .classed('layer-custom', function(d) { return d.id === 'custom'; })
+              .classed('best', function(d) { return d.best(); });
 
-              if (tryInsert([bbox], entity.id, true)) {
-                  return p;
-              }
-          }
+          enter.filter(function(d) { return d.id === 'custom'; })
+              .append('button')
+              .attr('class', 'layer-browse')
+              .call(tooltip()
+                  .title(t('settings.custom_background.tooltip'))
+                  .placement((textDirection === 'rtl') ? 'right' : 'left')
+              )
+              .on('click', editCustom)
+              .call(svgIcon('#iD-icon-more'));
 
+          enter.filter(function(d) { return d.best(); })
+              .append('div')
+              .attr('class', 'best')
+              .call(tooltip()
+                  .title(t('background.best_imagery'))
+                  .placement((textDirection === 'rtl') ? 'right' : 'left')
+              )
+              .append('span')
+              .html('&#9733;');
 
-          function getLineLabel(entity, width, height) {
-              var viewport = geoExtent$$1(context.projection.clipExtent()).polygon();
-              var points = map$3(graph.childNodes(entity), 'loc').map(projection$$1);
-              var length = geoPathLength(points);
+          var label = enter
+              .append('label');
 
-              if (length < width + 20) return;
+          label
+              .append('input')
+              .attr('type', type)
+              .attr('name', 'layers')
+              .on('change', change);
 
-              // todo: properly clip points to viewport
+          label
+              .append('span')
+              .text(function(d) { return d.name(); });
 
-              // % along the line to attempt to place the label
-              var lineOffsets = [50, 45, 55, 40, 60, 35, 65, 30, 70,
-                                 25, 75, 20, 80, 15, 95, 10, 90, 5, 95];
-              var padding = 3;
 
-              for (var i = 0; i < lineOffsets.length; i++) {
-                  var offset = lineOffsets[i];
-                  var middle = offset / 100 * length;
-                  var start = middle - width / 2;
+          layerList.selectAll('li')
+              .sort(sortSources)
+              .style('display', layerList.selectAll('li').data().length > 0 ? 'block' : 'none');
 
-                  if (start < 0 || start + width > length) continue;
+          layerList
+              .call(updateLayerSelections);
 
-                  // generate subpath and ignore paths that are invalid or don't cross viewport.
-                  var sub = subpath(points, start, start + width);
-                  if (!sub || !geoPolygonIntersectsPolygon(viewport, sub, true)) {
-                      continue;
-                  }
 
-                  var isReverse = reverse(sub);
-                  if (isReverse) {
-                      sub = sub.reverse();
-                  }
+          function sortSources(a, b) {
+              return a.best() && !b.best() ? -1
+                  : b.best() && !a.best() ? 1
+                  : d3_descending(a.area(), b.area()) || ascending(a.name(), b.name()) || 0;
+          }
+      }
 
-                  var bboxes = [];
-                  var boxsize = (height + 2) / 2;
 
-                  for (var j = 0; j < sub.length - 1; j++) {
-                      var a = sub[j];
-                      var b = sub[j + 1];
+      function renderBackgroundList(selection) {
 
-                      // split up the text into small collision boxes
-                      var num = Math.max(1, Math.floor(geoVecLength(a, b) / boxsize / 2));
+          // the background list
+          var container = selection.selectAll('.layer-background-list')
+              .data([0]);
 
-                      for (var box = 0; box < num; box++) {
-                          var p = geoVecInterp(a, b, box / num);
-                          var x0 = p[0] - boxsize - padding;
-                          var y0 = p[1] - boxsize - padding;
-                          var x1 = p[0] + boxsize + padding;
-                          var y1 = p[1] + boxsize + padding;
+          _backgroundList = container.enter()
+              .append('ul')
+              .attr('class', 'layer-list layer-background-list')
+              .attr('dir', 'auto')
+              .merge(container);
 
-                          bboxes.push({
-                              minX: Math.min(x0, x1),
-                              minY: Math.min(y0, y1),
-                              maxX: Math.max(x0, x1),
-                              maxY: Math.max(y0, y1)
-                          });
-                      }
-                  }
 
-                  if (tryInsert(bboxes, entity.id, false)) {   // accept this one
-                      return {
-                          'font-size': height + 2,
-                          lineString: lineString(sub),
-                          startOffset: offset + '%'
-                      };
-                  }
-              }
+          // add minimap toggle below list
+          var minimapEnter = selection.selectAll('.minimap-toggle-list')
+              .data([0])
+              .enter()
+              .append('ul')
+              .attr('class', 'layer-list minimap-toggle-list')
+              .append('li')
+              .attr('class', 'minimap-toggle-item');
 
-              function reverse(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 minimapLabelEnter = minimapEnter
+              .append('label')
+              .call(tooltip()
+                  .html(true)
+                  .title(uiTooltipHtml(t('background.minimap.tooltip'), t('background.minimap.key')))
+                  .placement('top')
+              );
 
-              function lineString(points) {
-                  return 'M' + points.join('L');
-              }
+          minimapLabelEnter
+              .append('input')
+              .attr('type', 'checkbox')
+              .on('change', function() {
+                  event.preventDefault();
+                  uiMapInMap.toggle();
+              });
 
-              function subpath(points, from, to) {
-                  var sofar = 0;
-                  var start, end, i0, i1;
+          minimapLabelEnter
+              .append('span')
+              .text(t('background.minimap.description'));
 
-                  for (var i = 0; i < points.length - 1; i++) {
-                      var a = points[i];
-                      var b = points[i + 1];
-                      var current = geoVecLength(a, b);
-                      var portion;
-                      if (!start && sofar + current >= from) {
-                          portion = (from - sofar) / current;
-                          start = [
-                              a[0] + portion * (b[0] - a[0]),
-                              a[1] + portion * (b[1] - a[1])
-                          ];
-                          i0 = i + 1;
-                      }
-                      if (!end && sofar + current >= to) {
-                          portion = (to - sofar) / current;
-                          end = [
-                              a[0] + portion * (b[0] - a[0]),
-                              a[1] + portion * (b[1] - a[1])
-                          ];
-                          i1 = i + 1;
-                      }
-                      sofar += current;
-                  }
 
-                  var result = points.slice(i0, i1);
-                  result.unshift(start);
-                  result.push(end);
-                  return result;
-              }
-          }
+          // "Info / Report a Problem" link
+          selection.selectAll('.imagery-faq')
+              .data([0])
+              .enter()
+              .append('div')
+              .attr('class', 'imagery-faq')
+              .append('a')
+              .attr('target', '_blank')
+              .attr('tabindex', -1)
+              .call(svgIcon('#iD-icon-out-link', 'inline'))
+              .attr('href', 'https://github.com/openstreetmap/iD/blob/master/FAQ.md#how-can-i-report-an-issue-with-background-imagery')
+              .append('span')
+              .text(t('background.imagery_source_faq'));
 
+          updateBackgroundList();
+      }
 
-          function getAreaLabel(entity, width, height) {
-              var centroid = path.centroid(entity.asGeoJSON(graph, true));
-              var extent = entity.extent(graph);
-              var areaWidth = projection$$1(extent[1])[0] - projection$$1(extent[0])[0];
 
-              if (isNaN(centroid[0]) || areaWidth < 20) return;
+      function renderOverlayList(selection) {
+          var container = selection.selectAll('.layer-overlay-list')
+              .data([0]);
 
-              var preset = context.presets().match(entity, context.graph());
-              var picon = preset && preset.icon;
-              var iconSize = 17;
-              var padding = 2;
-              var p = {};
+          _overlayList = container.enter()
+              .append('ul')
+              .attr('class', 'layer-list layer-overlay-list')
+              .attr('dir', 'auto')
+              .merge(container);
 
-              if (picon) {  // icon and label..
-                  if (addIcon()) {
-                      addLabel(iconSize + padding);
-                      return p;
-                  }
-              } else {   // label only..
-                  if (addLabel(0)) {
-                      return p;
-                  }
-              }
+          updateOverlayList();
+      }
 
+      function updateBackgroundList() {
+          _backgroundList
+              .call(drawListItems, 'radio', chooseBackground, function(d) { return !d.isHidden() && !d.overlay; });
+      }
 
-              function addIcon() {
-                  var iconX = centroid[0] - (iconSize / 2);
-                  var iconY = centroid[1] - (iconSize / 2);
-                  var bbox = {
-                      minX: iconX,
-                      minY: iconY,
-                      maxX: iconX + iconSize,
-                      maxY: iconY + iconSize
-                  };
+      function updateOverlayList() {
+          _overlayList
+              .call(drawListItems, 'checkbox', chooseOverlay, function(d) { return !d.isHidden() && d.overlay; });
+      }
 
-                  if (tryInsert([bbox], entity.id + 'I', true)) {
-                      p.transform = 'translate(' + iconX + ',' + iconY + ')';
-                      return true;
-                  }
-                  return false;
-              }
 
-              function addLabel(yOffset) {
-                  if (width && areaWidth >= width + 20) {
-                      var labelX = centroid[0];
-                      var labelY = centroid[1] + yOffset;
-                      var bbox = {
-                          minX: labelX - (width / 2) - padding,
-                          minY: labelY - (height / 2) - padding,
-                          maxX: labelX + (width / 2) + padding,
-                          maxY: labelY + (height / 2) + padding
-                      };
+      function update() {
 
-                      if (tryInsert([bbox], entity.id, true)) {
-                          p.x = labelX;
-                          p.y = labelY;
-                          p.textAnchor = 'middle';
-                          p.height = height;
-                          return true;
-                      }
-                  }
-                  return false;
-              }
+          if (!_pane.select('.disclosure-wrap-background_list').classed('hide')) {
+              updateBackgroundList();
           }
 
+          if (!_pane.select('.disclosure-wrap-overlay_list').classed('hide')) {
+              updateOverlayList();
+          }
 
-          // force insert a singular bounding box
-          // singular box only, no array, id better be unique
-          function doInsert(bbox, id) {
-              bbox.id = id;
+          _displayOptionsContainer
+              .call(backgroundDisplayOptions);
 
-              var oldbox = _entitybboxes[id];
-              if (oldbox) {
-                  _rdrawn.remove(oldbox);
-              }
-              _entitybboxes[id] = bbox;
-              _rdrawn.insert(bbox);
+          _offsetContainer
+              .call(backgroundOffset);
+      }
+
+
+      function quickSwitch() {
+          if (event) {
+              event.stopImmediatePropagation();
+              event.preventDefault();
+          }
+          if (_previousBackground) {
+              chooseBackground(_previousBackground);
           }
+      }
 
+      var paneTooltip = tooltip()
+          .placement((textDirection === 'rtl') ? 'right' : 'left')
+          .html(true)
+          .title(uiTooltipHtml(t('background.description'), key));
 
-          function tryInsert(bboxes, id, saveSkipped) {
-              var skipped = false;
+      uiBackground.togglePane = function() {
+          if (event) event.preventDefault();
+          paneTooltip.hide(_toggleButton);
+          uiBackground.setVisible(!_toggleButton.classed('active'));
+      };
 
-              for (var i = 0; i < bboxes.length; i++) {
-                  var bbox = bboxes[i];
-                  bbox.id = id;
+      uiBackground.hidePane = function() {
+          uiBackground.setVisible(false);
+      };
 
-                  // Check that label is visible
-                  if (bbox.minX < 0 || bbox.minY < 0 || bbox.maxX > dimensions[0] || bbox.maxY > dimensions[1]) {
-                      skipped = true;
-                      break;
-                  }
-                  if (_rdrawn.collides(bbox)) {
-                      skipped = true;
-                      break;
-                  }
-              }
+      uiBackground.setVisible = function(show) {
+          if (show !== _shown) {
+              _toggleButton.classed('active', show);
+              _shown = show;
 
-              _entitybboxes[id] = bboxes;
+              if (show) {
+                  uiHelp.hidePane();
+                  uiIssues.hidePane();
+                  uiMapData.hidePane();
+                  update();
+
+                  _pane
+                      .style('display', 'block')
+                      .style('right', '-300px')
+                      .transition()
+                      .duration(200)
+                      .style('right', '0px');
 
-              if (skipped) {
-                  if (saveSkipped) {
-                      _rskipped.load(bboxes);
-                  }
               } else {
-                  _rdrawn.load(bboxes);
+                  _pane
+                      .style('display', 'block')
+                      .style('right', '0px')
+                      .transition()
+                      .duration(200)
+                      .style('right', '-300px')
+                      .on('end', function() {
+                          select(this).style('display', 'none');
+                      });
               }
-
-              return !skipped;
           }
+      };
 
+      uiBackground.renderToggleButton = function(selection) {
 
-          var layer = selection.selectAll('.layer-osm.labels');
-          layer.selectAll('.labels-group')
-              .data(['halo', 'label', 'debug'])
-              .enter()
-              .append('g')
-              .attr('class', function(d) { return 'labels-group ' + d; });
+          _toggleButton = selection
+              .append('button')
+              .attr('tabindex', -1)
+              .on('click', uiBackground.togglePane)
+              .call(svgIcon('#iD-icon-layers', 'light'))
+              .call(paneTooltip);
+      };
 
-          var halo = layer.selectAll('.labels-group.halo');
-          var label = layer.selectAll('.labels-group.label');
-          var debug = layer.selectAll('.labels-group.debug');
+      uiBackground.renderPane = function(selection) {
 
-          // points
-          drawPointLabels(label, labelled.point, filter, 'pointlabel', positions.point);
-          drawPointLabels(halo, labelled.point, filter, 'pointlabel-halo', positions.point);
+          _pane = selection
+              .append('div')
+              .attr('class', 'fillL map-pane background-pane hide');
 
-          // lines
-          drawLinePaths(layer, labelled.line, filter, '', positions.line);
-          drawLineLabels(label, labelled.line, filter, 'linelabel', positions.line);
-          drawLineLabels(halo, labelled.line, filter, 'linelabel-halo', positions.line);
 
-          // areas
-          drawAreaLabels(label, labelled.area, filter, 'arealabel', positions.area);
-          drawAreaLabels(halo, labelled.area, filter, 'arealabel-halo', positions.area);
-          drawAreaIcons(label, labelled.area, filter, 'areaicon', positions.area);
-          drawAreaIcons(halo, labelled.area, filter, 'areaicon-halo', positions.area);
+          var heading = _pane
+              .append('div')
+              .attr('class', 'pane-heading');
 
-          // debug
-          drawCollisionBoxes(debug, _rskipped, 'debug-skipped');
-          drawCollisionBoxes(debug, _rdrawn, 'debug-drawn');
+          heading
+              .append('h2')
+              .text(t('background.title'));
 
-          layer.call(filterLabels);
-      }
+          heading
+              .append('button')
+              .on('click', uiBackground.hidePane)
+              .call(svgIcon('#iD-icon-close'));
 
 
-      function filterLabels(selection) {
-          var drawLayer = selection.selectAll('.layer-osm.labels');
-          var layers = drawLayer.selectAll('.labels-group.halo, .labels-group.label');
+          var content = _pane
+              .append('div')
+              .attr('class', 'pane-content');
 
-          layers.selectAll('.nolabel')
-              .classed('nolabel', false);
+          // background list
+          content
+              .append('div')
+              .attr('class', 'background-background-list-container')
+              .call(uiDisclosure(context, 'background_list', true)
+                  .title(t('background.backgrounds'))
+                  .content(renderBackgroundList)
+              );
 
-          var mouse = context.mouse();
-          var graph = context.graph();
-          var selectedIDs = context.selectedIDs();
-          var ids = [];
-          var pad, bbox;
+          // overlay list
+          content
+              .append('div')
+              .attr('class', 'background-overlay-list-container')
+              .call(uiDisclosure(context, 'overlay_list', true)
+                  .title(t('background.overlays'))
+                  .content(renderOverlayList)
+              );
 
-          // hide labels near the mouse
-          if (mouse) {
-              pad = 20;
-              bbox = { minX: mouse[0] - pad, minY: mouse[1] - pad, maxX: mouse[0] + pad, maxY: mouse[1] + pad };
-              ids.push.apply(ids, map$3(_rdrawn.search(bbox), 'id'));
-          }
+          // display options
+          _displayOptionsContainer = content
+              .append('div')
+              .attr('class', 'background-display-options');
 
-          // hide labels on selected nodes (they look weird when dragging / haloed)
-          for (var i = 0; i < selectedIDs.length; i++) {
-              var entity = graph.hasEntity(selectedIDs[i]);
-              if (entity && entity.type === 'node') {
-                  ids.push(selectedIDs[i]);
-              }
-          }
+          // offset controls
+          _offsetContainer = content
+              .append('div')
+              .attr('class', 'background-offset');
 
-          layers.selectAll(utilEntitySelector(ids))
-              .classed('nolabel', true);
 
+          // add listeners
+          context.map()
+              .on('move.background-update', debounce(utilCallWhenIdle(update), 1000));
 
-          // draw the mouse bbox if debugging is on..
-          var debug = selection.selectAll('.labels-group.debug');
-          var gj = [];
-          if (context.getDebug('collision')) {
-              gj = bbox ? [{
-                  type: 'Polygon',
-                  coordinates: [[
-                      [bbox.minX, bbox.minY],
-                      [bbox.maxX, bbox.minY],
-                      [bbox.maxX, bbox.maxY],
-                      [bbox.minX, bbox.maxY],
-                      [bbox.minX, bbox.minY]
-                  ]]
-              }] : [];
-          }
+          context.background()
+              .on('change.background-update', update);
 
-          var box = debug.selectAll('.debug-mouse')
-              .data(gj);
 
-          // exit
-          box.exit()
-              .remove();
+          update();
 
-          // enter/update
-          box.enter()
-              .append('path')
-              .attr('class', 'debug debug-mouse yellow')
-              .merge(box)
-              .attr('d', d3_geoPath());
-      }
+          context.keybinding()
+              .on(key, uiBackground.togglePane)
+              .on(uiCmd('⌘' + key), quickSwitch);
+      };
 
+      return uiBackground;
+  }
 
-      var throttleFilterLabels = throttle(utilCallWhenIdle(filterLabels), 100);
+  function uiContributors(context) {
+      var osm = context.connection(),
+          debouncedUpdate = debounce(function() { update(); }, 1000),
+          limit = 4,
+          hidden = false,
+          wrap = select(null);
 
 
-      drawLabels.observe = function(selection) {
-          var listener = function() { throttleFilterLabels(selection); };
-          selection.on('mousemove.hidelabels', listener);
-          context.on('enter.hidelabels', listener);
-      };
+      function update() {
+          if (!osm) return;
 
+          var users = {},
+              entities = context.intersects(context.map().extent());
 
-      drawLabels.off = function(selection) {
-          throttleFilterLabels.cancel();
-          selection.on('mousemove.hidelabels', null);
-          context.on('enter.hidelabels', null);
-      };
+          entities.forEach(function(entity) {
+              if (entity && entity.user) users[entity.user] = true;
+          });
 
+          var u = Object.keys(users),
+              subset = u.slice(0, u.length > limit ? limit - 1 : limit);
 
-      return drawLabels;
-  }
+          wrap.html('')
+              .call(svgIcon('#iD-icon-nearby', 'pre-text light'));
 
-  function svgStreetside$$1(projection, context, dispatch) {
-      var throttledRedraw = throttle(function () { dispatch.call('change'); }, 1000);
-      var minZoom = 14;
-      var minMarkerZoom = 16;
-      var minViewfieldZoom = 18;
-      var layer = select(null);
-      var _viewerYaw = 0;
-      var _selectedSequence = null;
-      var _hoveredBubble = null;
-      var _streetside;
+          var userList = select(document.createElement('span'));
 
-      /**
-       * init().
-       */
-      function init() {
-          if (svgStreetside$$1.initialized) return;  // run once
-          svgStreetside$$1.enabled = false;
-          svgStreetside$$1.initialized = true;
-      }
+          userList.selectAll()
+              .data(subset)
+              .enter()
+              .append('a')
+              .attr('class', 'user-link')
+              .attr('href', function(d) { return osm.userURL(d); })
+              .attr('target', '_blank')
+              .attr('tabindex', -1)
+              .text(String);
 
-      /**
-       * getService().
-       */
-      function getService() {
-          if (services.streetside && !_streetside) {
-              _streetside = services.streetside;
-              _streetside.event
-                  .on('viewerChanged', viewerChanged)
-                  .on('loadedBubbles', throttledRedraw);
-          } else if (!services.streetside && _streetside) {
-              _streetside = null;
+          if (u.length > limit) {
+              var count = select(document.createElement('span'));
+
+              count.append('a')
+                  .attr('target', '_blank')
+                  .attr('tabindex', -1)
+                  .attr('href', function() {
+                      return osm.changesetsURL(context.map().center(), context.map().zoom());
+                  })
+                  .text(u.length - limit + 1);
+
+              wrap.append('span')
+                  .html(t('contributors.truncated_list', { users: userList.html(), count: count.html() }));
+
+          } else {
+              wrap.append('span')
+                  .html(t('contributors.list', { users: userList.html() }));
           }
 
-          return _streetside;
+          if (!u.length) {
+              hidden = true;
+              wrap
+                  .transition()
+                  .style('opacity', 0);
+
+          } else if (hidden) {
+              wrap
+                  .transition()
+                  .style('opacity', 1);
+          }
       }
 
-      /**
-       * showLayer().
-       */
-      function showLayer() {
-          var service = getService();
-          if (!service) return;
 
-          service.loadViewer(context);
-          editOn();
+      return function(selection) {
+          if (!osm) return;
+          wrap = selection;
+          update();
 
-          layer
-              .style('opacity', 0)
-              .transition()
-              .duration(250)
-              .style('opacity', 1)
-              .on('end', function () { dispatch.call('change'); });
-      }
+          osm.on('loaded.contributors', debouncedUpdate);
+          context.map().on('move.contributors', debouncedUpdate);
+      };
+  }
 
-      /**
-       * hideLayer().
-       */
-      function hideLayer() {
-          var service = getService();
-          if (service) {
-              service.hideViewer();
-          }
+  function uiFeatureInfo(context) {
+      function update(selection) {
+          var features = context.features(),
+              stats = features.stats(),
+              count = 0,
+              hiddenList = compact(map$3(features.hidden(), function(k) {
+                  if (stats[k]) {
+                      count += stats[k];
+                      return String(stats[k]) + ' ' + t('feature.' + k + '.description');
+                  }
+              }));
 
-          throttledRedraw.cancel();
+          selection.html('');
 
-          layer
-              .transition()
-              .duration(250)
-              .style('opacity', 0)
-              .on('end', editOff);
-      }
+          if (hiddenList.length) {
+              var tooltipBehavior = tooltip()
+                  .placement('top')
+                  .html(true)
+                  .title(function() {
+                      return uiTooltipHtml(hiddenList.join('<br/>'));
+                  });
 
-      /**
-       * editOn().
-       */
-      function editOn() {
-          layer.style('display', 'block');
-      }
+              var warning = selection.append('a')
+                  .attr('href', '#')
+                  .attr('tabindex', -1)
+                  .html(t('feature_info.hidden_warning', { count: count }))
+                  .call(tooltipBehavior)
+                  .on('click', function() {
+                      tooltipBehavior.hide(warning);
+                      // open map data panel?
+                      event.preventDefault();
+                  });
+          }
 
-      /**
-       * editOff().
-       */
-      function editOff() {
-          layer.selectAll('.viewfield-group').remove();
-          layer.style('display', 'none');
+          selection
+              .classed('hide', !hiddenList.length);
       }
 
-      /**
-       * click() Handles 'bubble' point click event.
-       */
-      function click(d) {
-          var service = getService();
-          if (!service) return;
 
-          // try to preserve the viewer rotation when staying on the same sequence
-          if (d.sequenceKey !== _selectedSequence) {
-              _viewerYaw = 0;  // reset
-          }
-          _selectedSequence = d.sequenceKey;
+      return function(selection) {
+          update(selection);
 
-          service
-              .selectImage(d)
-              .then(function(r) {
-                  if (r.status === 'ok'){
-                      service.showViewer(_viewerYaw);
-                  }
-              });
+          context.features().on('change.feature_info', function() {
+              update(selection);
+          });
+      };
+  }
 
+  function uiFullScreen(context) {
+      var element = context.container().node();
+      // var button = d3_select(null);
 
-          context.map().centerEase(d.loc);
-      }
 
-      /**
-       * mouseover().
-       */
-      function mouseover(d) {
-          var service = getService();
-          _hoveredBubble = d;
-          if (service) service.setStyles(d, true);
+      function getFullScreenFn() {
+          if (element.requestFullscreen) {
+              return element.requestFullscreen;
+          } else if (element.msRequestFullscreen) {
+              return element.msRequestFullscreen;
+          } else if (element.mozRequestFullScreen) {
+              return element.mozRequestFullScreen;
+          } else if (element.webkitRequestFullscreen) {
+              return element.webkitRequestFullscreen;
+          }
       }
 
-      /**
-       * mouseout().
-       */
-      function mouseout() {
-          var service = getService();
-          _hoveredBubble = null;
-          if (service) service.setStyles(null, true);
-      }
 
-      /**
-       * transform().
-       */
-      function transform(d) {
-          var t = svgPointTransform(projection)(d);
-          var rot = d.ca + _viewerYaw;
-          if (rot) {
-              t += ' rotate(' + Math.floor(rot) + ',0,0)';
+      function getExitFullScreenFn() {
+          if (document.exitFullscreen) {
+              return document.exitFullscreen;
+          } else if (document.msExitFullscreen) {
+              return document.msExitFullscreen;
+          } else if (document.mozCancelFullScreen) {
+              return document.mozCancelFullScreen;
+          } else if (document.webkitExitFullscreen) {
+              return document.webkitExitFullscreen;
           }
-          return t;
       }
 
 
-      function viewerChanged() {
-          var service = getService();
-          if (!service) return;
+      function isFullScreen() {
+          return document.fullscreenElement ||
+              document.mozFullScreenElement ||
+              document.webkitFullscreenElement ||
+              document.msFullscreenElement;
+      }
+
+
+      function isSupported() {
+          return !!getFullScreenFn();
+      }
 
-          var viewer = service.viewer();
-          if (!viewer) return;
 
-          // update viewfield rotation
-          _viewerYaw = viewer.getYaw();
+      function fullScreen() {
+          event.preventDefault();
+          if (!isFullScreen()) {
+              // button.classed('active', true);
+              getFullScreenFn().apply(element);
+          } else {
+              // button.classed('active', false);
+              getExitFullScreenFn().apply(document);
+          }
+      }
 
-          // avoid updating if the map is currently transformed
-          // e.g. during drags or easing.
-          if (context.map().isTransformed()) return;
 
-          layer.selectAll('.viewfield-group.selected')
-              .attr('transform', transform);
-      }
+      return function() { // selection) {
+          if (!isSupported()) return;
 
+          // button = selection.append('button')
+          //     .attr('title', t('full_screen'))
+          //     .attr('tabindex', -1)
+          //     .on('click', fullScreen)
+          //     .call(tooltip);
 
-      /**
-       * update().
-       */
-      function update() {
-          var viewer = select('#photoviewer');
-          var selected = viewer.empty() ? undefined : viewer.datum();
-          var z = ~~context.map().zoom();
-          var showMarkers = (z >= minMarkerZoom);
-          var showViewfields = (z >= minViewfieldZoom);
-          var service = getService();
+          // button.append('span')
+          //     .attr('class', 'icon full-screen');
 
-          var sequences = (service ? service.sequences(projection) : []);
-          var bubbles = (service && showMarkers ? service.bubbles(projection) : []);
+          var detected = utilDetect();
+          var keys = (detected.os === 'mac' ? [uiCmd('⌃⌘F'), 'f11'] : ['f11']);
+          context.keybinding().on(keys, fullScreen);
+      };
+  }
 
-          var traces = layer.selectAll('.sequences').selectAll('.sequence')
-              .data(sequences, function(d) { return d.properties.key; });
+  function uiLoading(context) {
+      var _modalSelection = select(null);
+      var _message = '';
+      var _blocking = false;
 
-          // exit
-          traces.exit()
-              .remove();
 
-          // enter/update
-          traces = traces.enter()
-              .append('path')
-              .attr('class', 'sequence')
-              .merge(traces)
-              .attr('d', svgPath(projection).geojson);
+      var loading = function(selection) {
+          _modalSelection = uiModal(selection, _blocking);
 
+          var loadertext = _modalSelection.select('.content')
+              .classed('loading-modal', true)
+              .append('div')
+              .attr('class', 'modal-section fillL');
 
-          var groups = layer.selectAll('.markers').selectAll('.viewfield-group')
-              .data(bubbles, function(d) {
-                  // force reenter once bubbles are attached to a sequence
-                  return d.key + (d.sequenceKey ? 'v1' : 'v0');
-              });
+          loadertext
+              .append('img')
+              .attr('class', 'loader')
+              .attr('src', context.imagePath('loader-white.gif'));
 
-          // exit
-          groups.exit()
-              .remove();
+          loadertext
+              .append('h3')
+              .text(_message);
 
-          // enter
-          var groupsEnter = groups.enter()
-              .append('g')
-              .attr('class', 'viewfield-group')
-              .on('mouseover', mouseover)
-              .on('mouseout', mouseout)
-              .on('click', click);
+          _modalSelection.select('button.close')
+              .attr('class', 'hide');
 
-          groupsEnter
-              .append('g')
-              .attr('class', 'viewfield-scale');
+          return loading;
+      };
 
-          // update
-          var markers = groups
-              .merge(groupsEnter)
-              .sort(function(a, b) {
-                  return (a === selected) ? 1
-                      : (b === selected) ? -1
-                      : b.loc[1] - a.loc[1];
-              })
-              .attr('transform', transform)
-              .select('.viewfield-scale');
 
+      loading.message = function(_) {
+          if (!arguments.length) return _message;
+          _message = _;
+          return loading;
+      };
 
-          markers.selectAll('circle')
-              .data([0])
-              .enter()
-              .append('circle')
-              .attr('dx', '0')
-              .attr('dy', '0')
-              .attr('r', '6');
 
-          var viewfields = markers.selectAll('.viewfield')
-              .data(showViewfields ? [0] : []);
+      loading.blocking = function(_) {
+          if (!arguments.length) return _blocking;
+          _blocking = _;
+          return loading;
+      };
 
-          viewfields.exit()
-              .remove();
 
-          // viewfields may or may not be drawn...
-          // but if they are, draw below the circles
-          viewfields.enter()
-              .insert('path', 'circle')
-              .attr('class', 'viewfield')
-              .attr('transform', 'scale(1.5,1.5),translate(-8, -13)')
-              .attr('d', viewfieldPath);
+      loading.close = function() {
+          _modalSelection.remove();
+      };
 
 
-          if (service) {
-              service.setStyles(_hoveredBubble, true);
-          }
+      return loading;
+  }
 
+  function uiGeolocate(context) {
+      var geoOptions = { enableHighAccuracy: false, timeout: 6000 /* 6sec */ };
+      var locating = uiLoading(context).message(t('geolocate.locating')).blocking(true);
+      var layer = context.layers().layer('geolocate');
+      var _position;
+      var _extent;
+      var _timeoutID;
 
-          function viewfieldPath() {
-              var d = this.parentNode.__data__;
-              if (d.pano) {
-                  return 'M 8,13 m -10,0 a 10,10 0 1,0 20,0 a 10,10 0 1,0 -20,0';
+
+      function click() {
+          if (context.inIntro()) return;
+          context.enter(modeBrowse(context));
+          if (!layer.enabled()) {
+              if (!_position) {
+                  context.container().call(locating);
+                  navigator.geolocation.getCurrentPosition(success, error, geoOptions);
               } else {
-                  return 'M 6,9 C 8,8.4 8,8.4 10,9 L 16,-2 C 12,-5 4,-5 0,-2 z';
+                  zoomTo();
               }
+          } else {
+              layer.enabled(null, false);
           }
-
+          // This timeout ensures that we still call finish() even if
+          // the user declines to share their location in Firefox
+          _timeoutID = setTimeout(finish, 10000 /* 10sec */ );
       }
 
-      /**
-       * drawImages()
-       * drawImages is the method that is returned (and that runs) everytime 'svgStreetside()' is called.
-       * 'svgStreetside()' is called from index.js
-       */
-      function drawImages(selection$$1) {
-          var enabled = svgStreetside$$1.enabled;
-          var service = getService();
-
-          layer = selection$$1.selectAll('.layer-streetside-images')
-              .data(service ? [0] : []);
+      function zoomTo() {
+          var map = context.map();
+          layer.enabled(_position, true);
+          map.centerZoomEase(_extent.center(), Math.min(20, map.extentZoom(_extent)));
+      }
 
-          layer.exit()
-              .remove();
 
-          var layerEnter = layer.enter()
-              .append('g')
-              .attr('class', 'layer-streetside-images')
-              .style('display', enabled ? 'block' : 'none');
+      function success(geolocation) {
+          _position = geolocation;
+          var coords = _position.coords;
+          _extent = geoExtent([coords.longitude, coords.latitude]).padByMeters(coords.accuracy);
+          zoomTo();
+          finish();
+      }
 
-          layerEnter
-              .append('g')
-              .attr('class', 'sequences');
 
-          layerEnter
-              .append('g')
-              .attr('class', 'markers');
+      function error() {
+          finish();
+      }
 
-          layer = layerEnter
-              .merge(layer);
 
-          if (enabled) {
-              if (service && ~~context.map().zoom() >= minZoom) {
-                  editOn();
-                  update();
-                  service.loadBubbles(projection);
-              } else {
-                  editOff();
-              }
-          }
+      function finish() {
+          locating.close();  // unblock ui
+          if (_timeoutID) { clearTimeout(_timeoutID); }
+          _timeoutID = undefined;
       }
 
 
-      /**
-       * drawImages.enabled().
-       */
-      drawImages.enabled = function(_) {
-          if (!arguments.length) return svgStreetside$$1.enabled;
-          svgStreetside$$1.enabled = _;
-          if (svgStreetside$$1.enabled) {
-              showLayer();
-          } else {
-              hideLayer();
-          }
-          dispatch.call('change');
-          return this;
-      };
+      return function(selection) {
+          if (!navigator.geolocation) return;
 
-      /**
-       * drawImages.supported().
-       */
-      drawImages.supported = function() {
-          return !!getService();
+          selection
+              .append('button')
+              .attr('tabindex', -1)
+              .attr('title', t('geolocate.title'))
+              .on('click', click)
+              .call(svgIcon('#iD-icon-geolocate', 'light'))
+              .call(tooltip()
+                  .placement((textDirection === 'rtl') ? 'right' : 'left'));
       };
+  }
 
-      init();
+  function uiPanelBackground(context) {
+      var background = context.background();
+      var currSourceName = null;
+      var metadata = {};
+      var metadataKeys = [
+          'zoom', 'vintage', 'source', 'description', 'resolution', 'accuracy'
+      ];
 
-      return drawImages;
-  }
+      var debouncedRedraw = debounce(redraw, 250);
 
-  function svgMapillaryImages$$1(projection, context, dispatch) {
-      var throttledRedraw = throttle(function () { dispatch.call('change'); }, 1000);
-      var minZoom = 12;
-      var minMarkerZoom = 16;
-      var minViewfieldZoom = 18;
-      var layer = select(null);
-      var _mapillary;
-      var viewerCompassAngle;
+      function redraw(selection) {
+          var source = background.baseLayerSource();
+          var isDG = (source.id.match(/^DigitalGlobe/i) !== null);
 
+          if (currSourceName !== source.name()) {
+              currSourceName = source.name();
+              metadata = {};
+          }
 
-      function init() {
-          if (svgMapillaryImages$$1.initialized) return;  // run once
-          svgMapillaryImages$$1.enabled = false;
-          svgMapillaryImages$$1.initialized = true;
-      }
+          selection.html('');
 
+          var list = selection
+              .append('ul')
+              .attr('class', 'background-info');
 
-      function getService() {
-          if (services.mapillary && !_mapillary) {
-              _mapillary = services.mapillary;
-              _mapillary.event.on('loadedImages', throttledRedraw);
-              _mapillary.event.on('bearingChanged', function(e) {
-                  viewerCompassAngle = e;
+          list
+              .append('li')
+              .text(currSourceName);
 
-                  // avoid updating if the map is currently transformed
-                  // e.g. during drags or easing.
-                  if (context.map().isTransformed()) return;
+          metadataKeys.forEach(function(k) {
+              // DigitalGlobe vintage is available in raster layers for now.
+              if (isDG && k === 'vintage') return;
 
-                  layer.selectAll('.viewfield-group.selected')
-                      .filter(function(d) {
-                          return d.pano;
-                      })
-                      .attr('transform', transform);
+              list
+                  .append('li')
+                  .attr('class', 'background-info-list-' + k)
+                  .classed('hide', !metadata[k])
+                  .text(t('info_panels.background.' + k) + ':')
+                  .append('span')
+                  .attr('class', 'background-info-span-' + k)
+                  .text(metadata[k]);
+          });
+
+          debouncedGetMetadata(selection);
+
+          var toggleTiles = context.getDebug('tile') ? 'hide_tiles' : 'show_tiles';
+
+          selection
+              .append('a')
+              .text(t('info_panels.background.' + toggleTiles))
+              .attr('href', '#')
+              .attr('class', 'button button-toggle-tiles')
+              .on('click', function() {
+                  event.preventDefault();
+                  context.setDebug('tile', !context.getDebug('tile'));
+                  selection.call(redraw);
               });
-          } else if (!services.mapillary && _mapillary) {
-              _mapillary = null;
+
+          if (isDG) {
+              var key = source.id + '-vintage';
+              var sourceVintage = context.background().findSource(key);
+              var showsVintage = context.background().showsLayer(sourceVintage);
+              var toggleVintage = showsVintage ? 'hide_vintage' : 'show_vintage';
+              selection
+                  .append('a')
+                  .text(t('info_panels.background.' + toggleVintage))
+                  .attr('href', '#')
+                  .attr('class', 'button button-toggle-vintage')
+                  .on('click', function() {
+                      event.preventDefault();
+                      context.background().toggleOverlayLayer(sourceVintage);
+                      selection.call(redraw);
+                  });
           }
 
-          return _mapillary;
+          // disable if necessary
+          ['DigitalGlobe-Premium', 'DigitalGlobe-Standard'].forEach(function(layerId) {
+              if (source.id !== layerId) {
+                  var key = layerId + '-vintage';
+                  var sourceVintage = context.background().findSource(key);
+                  if (context.background().showsLayer(sourceVintage)) {
+                      context.background().toggleOverlayLayer(sourceVintage);
+                  }
+              }
+          });
       }
 
 
-      function showLayer() {
-          var service = getService();
-          if (!service) return;
+      var debouncedGetMetadata = debounce(getMetadata, 250);
 
-          service.loadViewer(context);
-          editOn();
+      function getMetadata(selection) {
+          var tile = select('.layer-background img.tile-center');   // tile near viewport center
+          if (tile.empty()) return;
 
-          layer
-              .style('opacity', 0)
-              .transition()
-              .duration(250)
-              .style('opacity', 1)
-              .on('end', function () { dispatch.call('change'); });
-      }
+          var sourceName = currSourceName,
+              d = tile.datum(),
+              zoom = (d && d.length >= 3 && d[2]) || Math.floor(context.map().zoom()),
+              center = context.map().center();
 
+          // update zoom
+          metadata.zoom = String(zoom);
+          selection.selectAll('.background-info-list-zoom')
+              .classed('hide', false)
+              .selectAll('.background-info-span-zoom')
+              .text(metadata.zoom);
 
-      function hideLayer() {
-          var service = getService();
-          if (service) {
-              service.hideViewer();
-          }
+          if (!d || !d.length >= 3) return;
 
-          throttledRedraw.cancel();
+          background.baseLayerSource().getMetadata(center, d, function(err, result) {
+              if (err || currSourceName !== sourceName) return;
 
-          layer
-              .transition()
-              .duration(250)
-              .style('opacity', 0)
-              .on('end', editOff);
+              // update vintage
+              var vintage = result.vintage;
+              metadata.vintage = (vintage && vintage.range) || t('info_panels.background.unknown');
+              selection.selectAll('.background-info-list-vintage')
+                  .classed('hide', false)
+                  .selectAll('.background-info-span-vintage')
+                  .text(metadata.vintage);
+
+              // update other metdata
+              without(metadataKeys, 'zoom', 'vintage')
+                  .forEach(function(k) {
+                      var val = result[k];
+                      metadata[k] = val;
+                      selection.selectAll('.background-info-list-' + k)
+                          .classed('hide', !val)
+                          .selectAll('.background-info-span-' + k)
+                          .text(val);
+                  });
+          });
       }
 
 
-      function editOn() {
-          layer.style('display', 'block');
-      }
+      var panel = function(selection) {
+          selection.call(redraw);
 
+          context.map()
+              .on('drawn.info-background', function() {
+                  selection.call(debouncedRedraw);
+              })
+              .on('move.info-background', function() {
+                  selection.call(debouncedGetMetadata);
+              });
 
-      function editOff() {
-          layer.selectAll('.viewfield-group').remove();
-          layer.style('display', 'none');
-      }
+      };
 
+      panel.off = function() {
+          context.map()
+              .on('drawn.info-background', null)
+              .on('move.info-background', null);
+      };
 
-      function click(d) {
-          var service = getService();
-          if (!service) return;
+      panel.id = 'background';
+      panel.title = t('info_panels.background.title');
+      panel.key = t('info_panels.background.key');
 
-          service
-              .selectImage(d)
-              .updateViewer(d.key, context)
-              .showViewer();
 
-          context.map().centerEase(d.loc);
-      }
+      return panel;
+  }
 
+  function uiPanelHistory(context) {
+      var osm;
 
-      function mouseover(d) {
-          var service = getService();
-          if (service) service.setStyles(d);
+      function displayTimestamp(timestamp) {
+          if (!timestamp) return t('info_panels.history.unknown');
+          var detected = utilDetect();
+          var options = {
+              day: 'numeric', month: 'short', year: 'numeric',
+              hour: 'numeric', minute: 'numeric', second: 'numeric'
+          };
+          var d = new Date(timestamp);
+          if (isNaN(d.getTime())) return t('info_panels.history.unknown');
+          return d.toLocaleString(detected.locale, options);
       }
 
 
-      function mouseout() {
-          var service = getService();
-          if (service) service.setStyles(null);
-      }
+      function displayUser(selection, userName) {
+          if (!userName) {
+              selection
+                  .append('span')
+                  .text(t('info_panels.history.unknown'));
+              return;
+          }
+
+          selection
+              .append('span')
+              .attr('class', 'user-name')
+              .text(userName);
 
+          var links = selection
+              .append('div')
+              .attr('class', 'links');
 
-      function transform(d) {
-          var t = svgPointTransform(projection)(d);
-          if (d.pano && isNumber(viewerCompassAngle)) {
-              t += ' rotate(' + Math.floor(viewerCompassAngle) + ',0,0)';
-          } else if (d.ca) {
-              t += ' rotate(' + Math.floor(d.ca) + ',0,0)';
+          if (osm) {
+              links
+                  .append('a')
+                  .attr('class', 'user-osm-link')
+                  .attr('href', osm.userURL(userName))
+                  .attr('target', '_blank')
+                  .attr('tabindex', -1)
+                  .text('OSM');
           }
-          return t;
+
+          links
+              .append('a')
+              .attr('class', 'user-hdyc-link')
+              .attr('href', 'https://hdyc.neis-one.org/?' + userName)
+              .attr('target', '_blank')
+              .attr('tabindex', -1)
+              .text('HDYC');
       }
 
 
-      function update() {
-          var viewer = select('#photoviewer');
-          var selected = viewer.empty() ? undefined : viewer.datum();
+      function displayChangeset(selection, changeset) {
+          if (!changeset) {
+              selection
+                  .append('span')
+                  .text(t('info_panels.history.unknown'));
+              return;
+          }
 
-          var z = ~~context.map().zoom();
-          var showMarkers = (z >= minMarkerZoom);
-          var showViewfields = (z >= minViewfieldZoom);
+          selection
+              .append('span')
+              .attr('class', 'changeset-id')
+              .text(changeset);
+
+          var links = selection
+              .append('div')
+              .attr('class', 'links');
 
-          var service = getService();
-          var sequences = (service ? service.sequences(projection) : []);
-          var images = (service && showMarkers ? service.images(projection) : []);
+          if (osm) {
+              links
+                  .append('a')
+                  .attr('class', 'changeset-osm-link')
+                  .attr('href', osm.changesetURL(changeset))
+                  .attr('target', '_blank')
+                  .attr('tabindex', -1)
+                  .text('OSM');
+          }
 
-          var traces = layer.selectAll('.sequences').selectAll('.sequence')
-              .data(sequences, function(d) { return d.properties.key; });
+          links
+              .append('a')
+              .attr('class', 'changeset-osmcha-link')
+              .attr('href', 'https://osmcha.mapbox.com/changesets/' + changeset)
+              .attr('target', '_blank')
+              .attr('tabindex', -1)
+              .text('OSMCha');
+      }
 
-          // exit
-          traces.exit()
-              .remove();
 
-          // enter/update
-          traces = traces.enter()
-              .append('path')
-              .attr('class', 'sequence')
-              .merge(traces)
-              .attr('d', svgPath(projection).geojson);
+      function redraw(selection) {
+          var selectedNoteID = context.selectedNoteID();
+          osm = context.connection();
 
+          var selected, note, entity;
+          if (selectedNoteID && osm) {       // selected 1 note
+              selected = [ t('note.note') + ' ' + selectedNoteID ];
+              note = osm.getNote(selectedNoteID);
+          } else {                           // selected 1..n entities
+              selected = filter(context.selectedIDs(), function(e) { return context.hasEntity(e); });
+              if (selected.length) {
+                  entity = context.entity(selected[0]);
+              }
+          }
 
-          var groups = layer.selectAll('.markers').selectAll('.viewfield-group')
-              .data(images, function(d) { return d.key; });
+          var singular = selected.length === 1 ? selected[0] : null;
 
-          // exit
-          groups.exit()
-              .remove();
+          selection.html('');
 
-          // enter
-          var groupsEnter = groups.enter()
-              .append('g')
-              .attr('class', 'viewfield-group')
-              .on('mouseover', mouseover)
-              .on('mouseout', mouseout)
-              .on('click', click);
+          selection
+              .append('h4')
+              .attr('class', 'history-heading')
+              .text(singular || t('info_panels.history.selected', { n: selected.length }));
 
-          groupsEnter
-              .append('g')
-              .attr('class', 'viewfield-scale');
+          if (!singular) return;
 
-          // update
-          var markers = groups
-              .merge(groupsEnter)
-              .sort(function(a, b) {
-                  return (a === selected) ? 1
-                      : (b === selected) ? -1
-                      : b.loc[1] - a.loc[1];  // sort Y
-              })
-              .attr('transform', transform)
-              .select('.viewfield-scale');
+          if (entity) {
+              selection.call(redrawEntity, entity);
+          } else if (note) {
+              selection.call(redrawNote, note);
+          }
+      }
 
 
-          markers.selectAll('circle')
-              .data([0])
-              .enter()
-              .append('circle')
-              .attr('dx', '0')
-              .attr('dy', '0')
-              .attr('r', '6');
+      function redrawNote(selection, note) {
+          if (!note || note.isNew()) {
+              selection
+                  .append('div')
+                  .text(t('info_panels.history.note_no_history'));
+              return;
+          }
 
-          var viewfields = markers.selectAll('.viewfield')
-              .data(showViewfields ? [0] : []);
+          var list = selection
+              .append('ul');
 
-          viewfields.exit()
-              .remove();
+          list
+              .append('li')
+              .text(t('info_panels.history.note_comments') + ':')
+              .append('span')
+              .text(note.comments.length);
 
-          viewfields.enter()               // viewfields may or may not be drawn...
-              .insert('path', 'circle')    // but if they are, draw below the circles
-              .attr('class', 'viewfield')
-              .classed('pano', function() { return this.parentNode.__data__.pano; })
-              .attr('transform', 'scale(1.5,1.5),translate(-8, -13)')
-              .attr('d', viewfieldPath);
+          if (note.comments.length) {
+              list
+                  .append('li')
+                  .text(t('info_panels.history.note_created_date') + ':')
+                  .append('span')
+                  .text(displayTimestamp(note.comments[0].date));
 
-          function viewfieldPath() {
-              var d = this.parentNode.__data__;
-              if (d.pano) {
-                  return 'M 8,13 m -10,0 a 10,10 0 1,0 20,0 a 10,10 0 1,0 -20,0';
-              } else {
-                  return 'M 6,9 C 8,8.4 8,8.4 10,9 L 16,-2 C 12,-5 4,-5 0,-2 z';
-              }
+              list
+                  .append('li')
+                  .text(t('info_panels.history.note_created_user') + ':')
+                  .call(displayUser, note.comments[0].user);
           }
-      }
 
+          if (osm) {
+              selection
+                  .append('a')
+                  .attr('class', 'view-history-on-osm')
+                  .attr('target', '_blank')
+                  .attr('tabindex', -1)
+                  .attr('href', osm.noteURL(note))
+                  .call(svgIcon('#iD-icon-out-link', 'inline'))
+                  .append('span')
+                  .text(t('info_panels.history.note_link_text'));
+          }
+      }
 
-      function drawImages(selection$$1) {
-          var enabled = svgMapillaryImages$$1.enabled;
-          var service = getService();
 
-          layer = selection$$1.selectAll('.layer-mapillary-images')
-              .data(service ? [0] : []);
+      function redrawEntity(selection, entity) {
+          if (!entity || entity.isNew()) {
+              selection
+                  .append('div')
+                  .text(t('info_panels.history.no_history'));
+              return;
+          }
 
-          layer.exit()
-              .remove();
+          var list = selection
+              .append('ul');
 
-          var layerEnter = layer.enter()
-              .append('g')
-              .attr('class', 'layer-mapillary-images')
-              .style('display', enabled ? 'block' : 'none');
+          list
+              .append('li')
+              .text(t('info_panels.history.version') + ':')
+              .append('span')
+              .text(entity.version);
 
-          layerEnter
-              .append('g')
-              .attr('class', 'sequences');
+          list
+              .append('li')
+              .text(t('info_panels.history.last_edit') + ':')
+              .append('span')
+              .text(displayTimestamp(entity.timestamp));
 
-          layerEnter
-              .append('g')
-              .attr('class', 'markers');
+          list
+              .append('li')
+              .text(t('info_panels.history.edited_by') + ':')
+              .call(displayUser, entity.user);
 
-          layer = layerEnter
-              .merge(layer);
+          list
+              .append('li')
+              .text(t('info_panels.history.changeset') + ':')
+              .call(displayChangeset, entity.changeset);
 
-          if (enabled) {
-              if (service && ~~context.map().zoom() >= minZoom) {
-                  editOn();
-                  update();
-                  service.loadImages(projection);
-              } else {
-                  editOff();
-              }
+          if (osm) {
+              selection
+                  .append('a')
+                  .attr('class', 'view-history-on-osm')
+                  .attr('target', '_blank')
+                  .attr('tabindex', -1)
+                  .attr('href', osm.historyURL(entity))
+                  .call(svgIcon('#iD-icon-out-link', 'inline'))
+                  .append('span')
+                  .text(t('info_panels.history.link_text'));
           }
       }
 
 
-      drawImages.enabled = function(_) {
-          if (!arguments.length) return svgMapillaryImages$$1.enabled;
-          svgMapillaryImages$$1.enabled = _;
-          if (svgMapillaryImages$$1.enabled) {
-              showLayer();
-          } else {
-              hideLayer();
-          }
-          dispatch.call('change');
-          return this;
-      };
+      var panel = function(selection) {
+          selection.call(redraw);
 
+          context.map()
+              .on('drawn.info-history', function() {
+                  selection.call(redraw);
+              });
 
-      drawImages.supported = function() {
-          return !!getService();
+          context
+              .on('enter.info-history', function() {
+                  selection.call(redraw);
+              });
       };
 
+      panel.off = function() {
+          context.map().on('drawn.info-history', null);
+          context.on('enter.info-history', null);
+      };
 
-      init();
-      return drawImages;
-  }
+      panel.id = 'history';
+      panel.title = t('info_panels.history.title');
+      panel.key = t('info_panels.history.key');
 
-  function svgMapillarySigns$$1(projection, context, dispatch) {
-      var throttledRedraw = throttle(function () { dispatch.call('change'); }, 1000);
-      var minZoom = 12;
-      var layer = select(null);
-      var _mapillary;
 
+      return panel;
+  }
 
-      function init() {
-          if (svgMapillarySigns$$1.initialized) return;  // run once
-          svgMapillarySigns$$1.enabled = false;
-          svgMapillarySigns$$1.initialized = true;
-      }
+  var OSM_PRECISION = 7;
+  var locale$2 = utilDetect().locale;
 
+  /**
+   * Returns a localized representation of the given length measurement.
+   *
+   * @param {Number} m area in meters
+   * @param {Boolean} isImperial true for U.S. customary units; false for metric
+   */
+  function displayLength(m, isImperial) {
+      var d = m * (isImperial ? 3.28084 : 1);
+      var unit;
 
-      function getService() {
-          if (services.mapillary && !_mapillary) {
-              _mapillary = services.mapillary;
-              _mapillary.event.on('loadedSigns', throttledRedraw);
-          } else if (!services.mapillary && _mapillary) {
-              _mapillary = null;
+      if (isImperial) {
+          if (d >= 5280) {
+              d /= 5280;
+              unit = 'miles';
+          } else {
+              unit = 'feet';
+          }
+      } else {
+          if (d >= 1000) {
+              d /= 1000;
+              unit = 'kilometers';
+          } else {
+              unit = 'meters';
           }
-          return _mapillary;
       }
 
+      return t('units.' + unit, {
+          quantity: d.toLocaleString(locale$2, {
+              maximumSignificantDigits: 4
+          })
+      });
+  }
 
-      function showLayer() {
-          var service = getService();
-          if (!service) return;
-
-          service.loadViewer(context);
-          editOn();
-      }
+  /**
+   * Returns a localized representation of the given area measurement.
+   *
+   * @param {Number} m2 area in square meters
+   * @param {Boolean} isImperial true for U.S. customary units; false for metric
+   */
+  function displayArea(m2, isImperial) {
+      var d = m2 * (isImperial ? 10.7639111056 : 1);
+      var d1, d2, area;
+      var unit1 = '';
+      var unit2 = '';
 
+      if (isImperial) {
+          if (d >= 6969600) { // > 0.25mi² show mi²
+              d1 = d / 27878400;
+              unit1 = 'square_miles';
+          } else {
+              d1 = d;
+              unit1 = 'square_feet';
+          }
 
-      function hideLayer() {
-          throttledRedraw.cancel();
-          editOff();
-      }
+          if (d > 4356 && d < 43560000) { // 0.1 - 1000 acres
+              d2 = d / 43560;
+              unit2 = 'acres';
+          }
 
+      } else {
+          if (d >= 250000) { // > 0.25km² show km²
+              d1 = d / 1000000;
+              unit1 = 'square_kilometers';
+          } else {
+              d1 = d;
+              unit1 = 'square_meters';
+          }
 
-      function editOn() {
-          layer.style('display', 'block');
+          if (d > 1000 && d < 10000000) { // 0.1 - 1000 hectares
+              d2 = d / 10000;
+              unit2 = 'hectares';
+          }
       }
 
+      area = t('units.' + unit1, {
+          quantity: d1.toLocaleString(locale$2, {
+              maximumSignificantDigits: 4
+          })
+      });
 
-      function editOff() {
-          layer.selectAll('.icon-sign').remove();
-          layer.style('display', 'none');
+      if (d2) {
+          return t('units.area_pair', {
+              area1: area,
+              area2: t('units.' + unit2, {
+                  quantity: d2.toLocaleString(locale$2, {
+                      maximumSignificantDigits: 2
+                  })
+              })
+          });
+      } else {
+          return area;
       }
+  }
 
+  function wrap(x, min, max) {
+      var d = max - min;
+      return ((x - min) % d + d) % d + min;
+  }
 
-      function click(d) {
-          var service = getService();
-          if (!service) return;
-
-          context.map().centerEase(d.loc);
+  function clamp$1(x, min, max) {
+      return Math.max(min, Math.min(x, max));
+  }
 
-          var selected = service.getSelectedImage();
-          var selectedImageKey = selected && selected.key;
-          var imageKey;
+  function displayCoordinate(deg, pos, neg) {
+      var min = (Math.abs(deg) - Math.floor(Math.abs(deg))) * 60;
+      var sec = (min - Math.floor(min)) * 60;
+      var displayDegrees = t('units.arcdegrees', {
+          quantity: Math.floor(Math.abs(deg)).toLocaleString(locale$2)
+      });
+      var displayCoordinate;
 
-          // Pick one of the images the sign was detected in,
-          // preference given to an image already selected.
-          d.detections.forEach(function(detection) {
-              if (!imageKey || selectedImageKey === detection.image_key) {
-                  imageKey = detection.image_key;
-              }
+      if (Math.floor(sec) > 0) {
+          displayCoordinate = displayDegrees +
+              t('units.arcminutes', {
+                  quantity: Math.floor(min).toLocaleString(locale$2)
+              }) +
+              t('units.arcseconds', {
+                  quantity: Math.round(sec).toLocaleString(locale$2)
+              });
+      } else if (Math.floor(min) > 0) {
+          displayCoordinate = displayDegrees +
+              t('units.arcminutes', {
+                  quantity: Math.round(min).toLocaleString(locale$2)
+              });
+      } else {
+          displayCoordinate = t('units.arcdegrees', {
+              quantity: Math.round(Math.abs(deg)).toLocaleString(locale$2)
           });
+      }
 
-          service
-              .selectImage(null, imageKey)
-              .updateViewer(imageKey, context)
-              .showViewer();
+      if (deg === 0) {
+          return displayCoordinate;
+      } else {
+          return t('units.coordinate', {
+              coordinate: displayCoordinate,
+              direction: t('units.' + (deg > 0 ? pos : neg))
+          });
       }
+  }
 
+  /**
+   * Returns given coordinate pair in degree-minute-second format.
+   *
+   * @param {Array<Number>} coord longitude and latitude
+   */
+  function dmsCoordinatePair(coord) {
+      return t('units.coordinate_pair', {
+          latitude: displayCoordinate(clamp$1(coord[1], -90, 90), 'north', 'south'),
+          longitude: displayCoordinate(wrap(coord[0], -180, 180), 'east', 'west')
+      });
+  }
 
-      function update() {
-          var service = getService();
-          var data = (service ? service.signs(projection) : []);
-          var viewer = select('#photoviewer');
-          var selected = viewer.empty() ? undefined : viewer.datum();
-          var selectedImageKey = selected && selected.key;
-          var transform = svgPointTransform(projection);
+  /**
+   * Returns the given coordinate pair in decimal format.
+   * note: unlocalized to avoid comma ambiguity - see #4765
+   *
+   * @param {Array<Number>} coord longitude and latitude
+   */
+  function decimalCoordinatePair(coord) {
+      return t('units.coordinate_pair', {
+          latitude: clamp$1(coord[1], -90, 90).toFixed(OSM_PRECISION),
+          longitude: wrap(coord[0], -180, 180).toFixed(OSM_PRECISION)
+      });
+  }
 
-          var signs = layer.selectAll('.icon-sign')
-              .data(data, function(d) { return d.key; });
+  function uiPanelLocation(context) {
+      var currLocation = '';
 
-          // exit
-          signs.exit()
-              .remove();
 
-          // enter
-          var enter = signs.enter()
-              .append('use')
-              .attr('class', 'icon-sign')
-              .attr('width', '24px')
-              .attr('height', '24px')
-              .attr('x', '-12px')
-              .attr('y', '-12px')
-              .attr('xlink:href', function(d) { return '#' + d.value; })
-              .classed('selected', function(d) {
-                  return some(d.detections, function(detection) {
-                      return detection.image_key === selectedImageKey;
-                  });
-              })
-              .on('click', click);
+      function redraw(selection) {
+          selection.html('');
 
-          // update
-          signs
-              .merge(enter)
-              .sort(function(a, b) {
-                  return (a === selected) ? 1
-                      : (b === selected) ? -1
-                      : b.loc[1] - a.loc[1];  // sort Y
-              })
-              .attr('transform', transform);
-      }
+          var list = selection
+              .append('ul');
 
+          // Mouse coordinates
+          var coord = context.map().mouseCoordinates();
+          if (coord.some(isNaN)) {
+              coord = context.map().center();
+          }
 
-      function drawSigns(selection$$1) {
-          var enabled = svgMapillarySigns$$1.enabled;
-          var service = getService();
+          list
+              .append('li')
+              .text(dmsCoordinatePair(coord))
+              .append('li')
+              .text(decimalCoordinatePair(coord));
 
-          layer = selection$$1.selectAll('.layer-mapillary-signs')
-              .data(service ? [0] : []);
+          // Location Info
+          selection
+              .append('div')
+              .attr('class', 'location-info')
+              .text(currLocation || ' ');
 
-          layer.exit()
-              .remove();
+          debouncedGetLocation(selection, coord);
+      }
 
-          layer = layer.enter()
-              .append('g')
-              .attr('class', 'layer-mapillary-signs')
-              .style('display', enabled ? 'block' : 'none')
-              .merge(layer);
 
-          if (enabled) {
-              if (service && ~~context.map().zoom() >= minZoom) {
-                  editOn();
-                  update();
-                  service.loadSigns(context, projection);
-              } else {
-                  editOff();
-              }
+      var debouncedGetLocation = debounce(getLocation, 250);
+      function getLocation(selection, coord) {
+          if (!services.geocoder) {
+              currLocation = t('info_panels.location.unknown_location');
+              selection.selectAll('.location-info')
+                  .text(currLocation);
+          } else {
+              services.geocoder.reverse(coord, function(err, result) {
+                  currLocation = result ? result.display_name : t('info_panels.location.unknown_location');
+                  selection.selectAll('.location-info')
+                      .text(currLocation);
+              });
           }
       }
 
 
-      drawSigns.enabled = function(_) {
-          if (!arguments.length) return svgMapillarySigns$$1.enabled;
-          svgMapillarySigns$$1.enabled = _;
-          if (svgMapillarySigns$$1.enabled) {
-              showLayer();
-          } else {
-              hideLayer();
-          }
-          dispatch.call('change');
-          return this;
-      };
+      var panel = function(selection) {
+          selection.call(redraw);
 
+          context.surface()
+              .on('mousemove.info-location', function() {
+                  selection.call(redraw);
+              });
+      };
 
-      drawSigns.supported = function() {
-          return !!getService();
+      panel.off = function() {
+          context.surface()
+              .on('mousemove.info-location', null);
       };
 
+      panel.id = 'location';
+      panel.title = t('info_panels.location.title');
+      panel.key = t('info_panels.location.key');
 
-      init();
-      return drawSigns;
+
+      return panel;
   }
 
-  function svgOpenstreetcamImages$$1(projection, context, dispatch) {
-      var throttledRedraw = throttle(function () { dispatch.call('change'); }, 1000);
-      var minZoom = 12;
-      var minMarkerZoom = 16;
-      var minViewfieldZoom = 18;
-      var layer = select(null);
-      var _openstreetcam;
+  function uiPanelMeasurement(context) {
+      var locale = utilDetect().locale,
+          isImperial = (locale.toLowerCase() === 'en-us');
 
 
-      function init() {
-          if (svgOpenstreetcamImages$$1.initialized) return;  // run once
-          svgOpenstreetcamImages$$1.enabled = false;
-          svgOpenstreetcamImages$$1.initialized = true;
+      function radiansToMeters(r) {
+          // using WGS84 authalic radius (6371007.1809 m)
+          return r * 6371007.1809;
+      }
+
+      function steradiansToSqmeters(r) {
+          // http://gis.stackexchange.com/a/124857/40446
+          return r / (4 * Math.PI) * 510065621724000;
       }
 
 
-      function getService() {
-          if (services.openstreetcam && !_openstreetcam) {
-              _openstreetcam = services.openstreetcam;
-              _openstreetcam.event.on('loadedImages', throttledRedraw);
-          } else if (!services.openstreetcam && _openstreetcam) {
-              _openstreetcam = null;
+      function toLineString(feature) {
+          if (feature.type === 'LineString') return feature;
+
+          var result = { type: 'LineString', coordinates: [] };
+          if (feature.type === 'Polygon') {
+              result.coordinates = feature.coordinates[0];
+          } else if (feature.type === 'MultiPolygon') {
+              result.coordinates = feature.coordinates[0][0];
           }
 
-          return _openstreetcam;
+          return result;
       }
 
 
-      function showLayer() {
-          var service = getService();
-          if (!service) return;
+      function nodeCount(feature) {
+        if (feature.type === 'LineString') return feature.coordinates.length;
+        if (feature.type === 'Polygon') return feature.coordinates[0].length - 1;
+      }
 
-          service.loadViewer(context);
-          editOn();
 
-          layer
-              .style('opacity', 0)
-              .transition()
-              .duration(250)
-              .style('opacity', 1)
-              .on('end', function () { dispatch.call('change'); });
-      }
+      function redraw(selection) {
+          var resolver = context.graph();
+          var selectedNoteID = context.selectedNoteID();
+          var osm = services.osm;
 
+          var selected, center, entity, note, geometry;
 
-      function hideLayer() {
-          var service = getService();
-          if (service) {
-              service.hideViewer();
+          if (selectedNoteID && osm) {       // selected 1 note
+              selected = [ t('note.note') + ' ' + selectedNoteID ];
+              note = osm.getNote(selectedNoteID);
+              center = note.loc;
+              geometry = 'note';
+
+          } else {                           // selected 1..n entities
+              var extent = geoExtent();
+              selected = filter(context.selectedIDs(), function(e) { return context.hasEntity(e); });
+              if (selected.length) {
+                  for (var i = 0; i < selected.length; i++) {
+                      entity = context.entity(selected[i]);
+                      extent._extend(entity.extent(resolver));
+                  }
+                  center = extent.center();
+                  geometry = entity.geometry(resolver);
+              }
           }
 
-          throttledRedraw.cancel();
+          var singular = selected.length === 1 ? selected[0] : null;
 
-          layer
-              .transition()
-              .duration(250)
-              .style('opacity', 0)
-              .on('end', editOff);
-      }
+          selection.html('');
 
+          selection
+              .append('h4')
+              .attr('class', 'measurement-heading')
+              .text(singular || t('info_panels.measurement.selected', { n: selected.length.toLocaleString(locale) }));
 
-      function editOn() {
-          layer.style('display', 'block');
-      }
+          if (!selected.length) return;
 
 
-      function editOff() {
-          layer.selectAll('.viewfield-group').remove();
-          layer.style('display', 'none');
-      }
+          var list = selection
+              .append('ul');
+          var coordItem;
 
+          // multiple selected features, just display extent center..
+          if (!singular) {
+              coordItem = list
+                  .append('li')
+                  .text(t('info_panels.measurement.center') + ':');
+              coordItem.append('span')
+                  .text(dmsCoordinatePair(center));
+              coordItem.append('span')
+                  .text(decimalCoordinatePair(center));
+              return;
+          }
 
-      function click(d) {
-          var service = getService();
-          if (!service) return;
+          // single selected feature, display details..
+          if (geometry === 'line' || geometry === 'area') {
+              var closed = (entity.type === 'relation') || (entity.isClosed() && !entity.isDegenerate());
+              var feature = entity.asGeoJSON(resolver);
+              var length = radiansToMeters(length$1(toLineString(feature)));
+              var lengthLabel = t('info_panels.measurement.' + (closed ? 'perimeter' : 'length'));
+              var centroid = d3_geoCentroid(feature);
 
-          service
-              .selectImage(d)
-              .updateViewer(d)
-              .showViewer();
+              list
+                  .append('li')
+                  .text(t('info_panels.measurement.geometry') + ':')
+                  .append('span')
+                  .text(
+                      closed ? t('info_panels.measurement.closed_' + geometry) : t('geometry.' + geometry)
+                  );
 
-          context.map().centerEase(d.loc);
-      }
+              if (entity.type !== 'relation') {
+                  list
+                      .append('li')
+                      .text(t('info_panels.measurement.node_count') + ':')
+                      .append('span')
+                      .text(nodeCount(feature).toLocaleString(locale));
+              }
 
+              if (closed) {
+                  var area = steradiansToSqmeters(entity.area(resolver));
+                  list
+                      .append('li')
+                      .text(t('info_panels.measurement.area') + ':')
+                      .append('span')
+                      .text(displayArea(area, isImperial));
+              }
 
-      function mouseover(d) {
-          var service = getService();
-          if (service) service.setStyles(d);
-      }
 
+              list
+                  .append('li')
+                  .text(lengthLabel + ':')
+                  .append('span')
+                  .text(displayLength(length, isImperial));
 
-      function mouseout() {
-          var service = getService();
-          if (service) service.setStyles(null);
-      }
+              coordItem = list
+                  .append('li')
+                  .text(t('info_panels.measurement.centroid') + ':');
+              coordItem.append('span')
+                  .text(dmsCoordinatePair(centroid));
+              coordItem.append('span')
+                  .text(decimalCoordinatePair(centroid));
 
+              var toggle  = isImperial ? 'imperial' : 'metric';
 
-      function transform(d) {
-          var t = svgPointTransform(projection)(d);
-          if (d.ca) {
-              t += ' rotate(' + Math.floor(d.ca) + ',0,0)';
+              selection
+                  .append('a')
+                  .text(t('info_panels.measurement.' + toggle))
+                  .attr('href', '#')
+                  .attr('class', 'button button-toggle-units')
+                  .on('click', function() {
+                      event.preventDefault();
+                      isImperial = !isImperial;
+                      selection.call(redraw);
+                  });
+
+          } else {
+              var centerLabel = t('info_panels.measurement.' +
+                  (note || entity.type === 'node' ? 'location' : 'center'));
+
+              list
+                  .append('li')
+                  .text(t('info_panels.measurement.geometry') + ':')
+                  .append('span')
+                  .text(t('geometry.' + geometry));
+
+              coordItem = list
+                  .append('li')
+                  .text(centerLabel + ':');
+              coordItem.append('span')
+                  .text(dmsCoordinatePair(center));
+              coordItem.append('span')
+                  .text(decimalCoordinatePair(center));
           }
-          return t;
       }
 
 
-      function update() {
-          var viewer = select('#photoviewer');
-          var selected = viewer.empty() ? undefined : viewer.datum();
+      var panel = function(selection) {
+          selection.call(redraw);
 
-          var z = ~~context.map().zoom();
-          var showMarkers = (z >= minMarkerZoom);
-          var showViewfields = (z >= minViewfieldZoom);
+          context.map()
+              .on('drawn.info-measurement', function() {
+                  selection.call(redraw);
+              });
 
-          var service = getService();
-          var sequences = (service ? service.sequences(projection) : []);
-          var images = (service && showMarkers ? service.images(projection) : []);
+          context
+              .on('enter.info-measurement', function() {
+                  selection.call(redraw);
+              });
+      };
 
-          var traces = layer.selectAll('.sequences').selectAll('.sequence')
-              .data(sequences, function(d) { return d.properties.key; });
+      panel.off = function() {
+          context.map().on('drawn.info-measurement', null);
+          context.on('enter.info-measurement', null);
+      };
 
-          // exit
-          traces.exit()
-              .remove();
+      panel.id = 'measurement';
+      panel.title = t('info_panels.measurement.title');
+      panel.key = t('info_panels.measurement.key');
 
-          // enter/update
-          traces = traces.enter()
-              .append('path')
-              .attr('class', 'sequence')
-              .merge(traces)
-              .attr('d', svgPath(projection).geojson);
 
+      return panel;
+  }
 
-          var groups = layer.selectAll('.markers').selectAll('.viewfield-group')
-              .data(images, function(d) { return d.key; });
+  var uiInfoPanels = {
+      background: uiPanelBackground,
+      history: uiPanelHistory,
+      location: uiPanelLocation,
+      measurement: uiPanelMeasurement,
+  };
 
-          // exit
-          groups.exit()
-              .remove();
+  function uiInfo(context) {
+      var ids = Object.keys(uiInfoPanels);
+      var wasActive = ['measurement'];
+      var panels = {};
+      var active = {};
 
-          // enter
-          var groupsEnter = groups.enter()
-              .append('g')
-              .attr('class', 'viewfield-group')
-              .on('mouseover', mouseover)
-              .on('mouseout', mouseout)
-              .on('click', click);
+      // create panels
+      ids.forEach(function(k) {
+          if (!panels[k]) {
+              panels[k] = uiInfoPanels[k](context);
+              active[k] = false;
+          }
+      });
 
-          groupsEnter
-              .append('g')
-              .attr('class', 'viewfield-scale');
 
-          // update
-          var markers = groups
-              .merge(groupsEnter)
-              .sort(function(a, b) {
-                  return (a === selected) ? 1
-                      : (b === selected) ? -1
-                      : b.loc[1] - a.loc[1];  // sort Y
-              })
-              .attr('transform', transform)
-              .select('.viewfield-scale');
+      function info(selection) {
 
+          function redraw() {
+              var activeids = ids.filter(function(k) { return active[k]; }).sort();
 
-          markers.selectAll('circle')
-              .data([0])
-              .enter()
-              .append('circle')
-              .attr('dx', '0')
-              .attr('dy', '0')
-              .attr('r', '6');
+              var containers = infoPanels.selectAll('.panel-container')
+                  .data(activeids, function(k) { return k; });
 
-          var viewfields = markers.selectAll('.viewfield')
-              .data(showViewfields ? [0] : []);
+              containers.exit()
+                  .style('opacity', 1)
+                  .transition()
+                  .duration(200)
+                  .style('opacity', 0)
+                  .on('end', function(d) {
+                      select(this)
+                          .call(panels[d].off)
+                          .remove();
+                  });
 
-          viewfields.exit()
-              .remove();
+              var enter = containers.enter()
+                  .append('div')
+                  .attr('class', function(d) { return 'fillD2 panel-container panel-container-' + d; });
 
-          viewfields.enter()               // viewfields may or may not be drawn...
-              .insert('path', 'circle')    // but if they are, draw below the circles
-              .attr('class', 'viewfield')
-              .attr('transform', 'scale(1.5,1.5),translate(-8, -13)')
-              .attr('d', 'M 6,9 C 8,8.4 8,8.4 10,9 L 16,-2 C 12,-5 4,-5 0,-2 z');
-      }
+              enter
+                  .style('opacity', 0)
+                  .transition()
+                  .duration(200)
+                  .style('opacity', 1);
 
+              var title = enter
+                  .append('div')
+                  .attr('class', 'panel-title fillD2');
 
-      function drawImages(selection$$1) {
-          var enabled = svgOpenstreetcamImages$$1.enabled,
-              service = getService();
+              title
+                  .append('h3')
+                  .text(function(d) { return panels[d].title; });
 
-          layer = selection$$1.selectAll('.layer-openstreetcam-images')
-              .data(service ? [0] : []);
+              title
+                  .append('button')
+                  .attr('class', 'close')
+                  .on('click', function (d) { toggle(d); })
+                  .call(svgIcon('#iD-icon-close'));
 
-          layer.exit()
-              .remove();
+              enter
+                  .append('div')
+                  .attr('class', function(d) { return 'panel-content panel-content-' + d; });
 
-          var layerEnter = layer.enter()
-              .append('g')
-              .attr('class', 'layer-openstreetcam-images')
-              .style('display', enabled ? 'block' : 'none');
 
-          layerEnter
-              .append('g')
-              .attr('class', 'sequences');
+              // redraw the panels
+              infoPanels.selectAll('.panel-content')
+                  .each(function(d) {
+                      select(this).call(panels[d]);
+                  });
+          }
 
-          layerEnter
-              .append('g')
-              .attr('class', 'markers');
 
-          layer = layerEnter
-              .merge(layer);
+          function toggle(which) {
+              if (event) {
+                  event.stopImmediatePropagation();
+                  event.preventDefault();
+              }
 
-          if (enabled) {
-              if (service && ~~context.map().zoom() >= minZoom) {
-                  editOn();
-                  update();
-                  service.loadImages(projection);
-              } else {
-                  editOff();
+              var activeids = ids.filter(function(k) { return active[k]; });
+
+              if (which) {  // toggle one
+                  active[which] = !active[which];
+                  if (activeids.length === 1 && activeids[0] === which) {  // none active anymore
+                      wasActive = [which];
+                  }
+              } else {      // toggle all
+                  if (activeids.length) {
+                      wasActive = activeids;
+                      activeids.forEach(function(k) { active[k] = false; });
+                  } else {
+                      wasActive.forEach(function(k) { active[k] = true; });
+                  }
               }
+
+              redraw();
           }
-      }
 
 
-      drawImages.enabled = function(_) {
-          if (!arguments.length) return svgOpenstreetcamImages$$1.enabled;
-          svgOpenstreetcamImages$$1.enabled = _;
-          if (svgOpenstreetcamImages$$1.enabled) {
-              showLayer();
-          } else {
-              hideLayer();
-          }
-          dispatch.call('change');
-          return this;
-      };
+          var infoPanels = selection.selectAll('.info-panels')
+              .data([0]);
 
+          infoPanels = infoPanels.enter()
+              .append('div')
+              .attr('class', 'info-panels')
+              .merge(infoPanels);
 
-      drawImages.supported = function() {
-          return !!getService();
-      };
+          redraw();
 
+          context.keybinding()
+              .on(uiCmd('⌘' + t('info_panels.key')), toggle);
 
-      init();
-      return drawImages;
-  }
+          ids.forEach(function(k) {
+              var key = t('info_panels.' + k + '.key', { default: null });
+              if (!key) return;
+              context.keybinding()
+                  .on(uiCmd('⌘⇧' + key), function() { toggle(k); });
+          });
+      }
 
-  function svgOsm(projection, context, dispatch) {
-      var enabled = true;
+      return info;
+  }
 
+  function uiModes(context) {
+      var modes = [
+          modeAddPoint(context),
+          modeAddLine(context),
+          modeAddArea(context),
+          modeAddNote(context)
+      ];
 
-      function drawOsm(selection) {
-          selection.selectAll('.layer-osm')
-              .data(['covered', 'areas', 'lines', 'points', 'labels'])
-              .enter()
-              .append('g')
-              .attr('class', function(d) { return 'layer-osm ' + d; });
 
-          selection.selectAll('.layer-osm.points').selectAll('.points-group')
-              .data(['points', 'midpoints', 'vertices', 'turns'])
-              .enter()
-              .append('g')
-              .attr('class', function(d) { return 'points-group ' + d; });
+      function enabled(d) {
+          if (d.id === 'add-note') {
+              return notesEnabled() && notesEditable();
+          } else {
+              return osmEditable();
+          }
       }
 
+      function osmEditable() {
+          var mode = context.mode();
+          return context.editable() && mode && mode.id !== 'save';
+      }
 
-      function showLayer() {
-          var layer = context.surface().selectAll('.data-layer.osm');
-          layer.interrupt();
+      function notesEnabled() {
+          var noteLayer = context.layers().layer('notes');
+          return noteLayer && noteLayer.enabled();
+      }
 
-          layer
-              .classed('disabled', false)
-              .style('opacity', 0)
-              .transition()
-              .duration(250)
-              .style('opacity', 1)
-              .on('end interrupt', function () {
-                  dispatch.call('change');
-              });
+      function notesEditable() {
+          var mode = context.mode();
+          return context.map().notesEditable() && mode && mode.id !== 'save';
       }
 
 
-      function hideLayer() {
-          var layer = context.surface().selectAll('.data-layer.osm');
-          layer.interrupt();
+      return function(selection) {
+          context
+              .on('enter.editor', function(entered) {
+                  selection.selectAll('button.add-button')
+                      .classed('active', function(mode) { return entered.button === mode.button; });
+                  context.container()
+                      .classed('mode-' + entered.id, true);
+              });
 
-          layer
-              .transition()
-              .duration(250)
-              .style('opacity', 0)
-              .on('end interrupt', function () {
-                  layer.classed('disabled', true);
-                  dispatch.call('change');
+          context
+              .on('exit.editor', function(exited) {
+                  context.container()
+                      .classed('mode-' + exited.id, false);
               });
-      }
 
+          modes.forEach(function(mode) {
+              context.keybinding().on(mode.key, function() {
+                  if (!enabled(mode)) return;
 
-      drawOsm.enabled = function(_) {
-          if (!arguments.length) return enabled;
-          enabled = _;
+                  if (mode.id === context.mode().id) {
+                      context.enter(modeBrowse(context));
+                  } else {
+                      context.enter(mode);
+                  }
+              });
+          });
 
-          if (enabled) {
-              showLayer();
-          } else {
-              hideLayer();
-          }
 
-          dispatch.call('change');
-          return this;
-      };
+          var debouncedUpdate = debounce(update, 500, { leading: true, trailing: true });
 
+          context.map()
+              .on('move.modes', debouncedUpdate)
+              .on('drawn.modes', debouncedUpdate);
 
-      return drawOsm;
-  }
+          context
+              .on('enter.modes', update);
 
-  var _notesEnabled = false;
-  var _osmService;
+          update();
 
 
-  function svgNotes$$1(projection, context, dispatch$$1) {
-      if (!dispatch$$1) { dispatch$$1 = dispatch('change'); }
-      var throttledRedraw = throttle(function () { dispatch$$1.call('change'); }, 1000);
-      var minZoom = 12;
-      var touchLayer = select(null);
-      var drawLayer = select(null);
-      var _notesVisible = false;
+          function update() {
+              var showNotes = notesEnabled();
+              var data = showNotes ? modes : modes.slice(0, 3);
 
+              var buttons = selection.selectAll('button.add-button')
+                  .data(data, function(d) { return d.id; });
 
-      function markerPath(selection$$1, klass) {
-          selection$$1
-              .attr('class', klass)
-              .attr('transform', 'translate(-8, -22)')
-              .attr('d', 'm17.5,0l-15,0c-1.37,0 -2.5,1.12 -2.5,2.5l0,11.25c0,1.37 1.12,2.5 2.5,2.5l3.75,0l0,3.28c0,0.38 0.43,0.6 0.75,0.37l4.87,-3.65l5.62,0c1.37,0 2.5,-1.12 2.5,-2.5l0,-11.25c0,-1.37 -1.12,-2.5 -2.5,-2.5z');
-      }
+              // exit
+              buttons.exit()
+                  .remove();
 
+              // enter
+              var buttonsEnter = buttons.enter()
+                  .append('button')
+                  .attr('tabindex', -1)
+                  .attr('class', function(d) { return d.id + ' add-button'; })
+                  .on('click.mode-buttons', function(d) {
+                      if (!enabled(d)) return;
 
-      // Loosely-coupled osm service for fetching notes.
-      function getService() {
-          if (services.osm && !_osmService) {
-              _osmService = services.osm;
-              _osmService.on('loadedNotes', throttledRedraw);
-          } else if (!services.osm && _osmService) {
-              _osmService = null;
-          }
+                      // When drawing, ignore accidental clicks on mode buttons - #4042
+                      var currMode = context.mode().id;
+                      if (/^draw/.test(currMode)) return;
 
-          return _osmService;
-      }
+                      if (d.id === currMode) {
+                          context.enter(modeBrowse(context));
+                      } else {
+                          context.enter(d);
+                      }
+                  })
+                  .call(tooltip()
+                      .placement('bottom')
+                      .html(true)
+                      .title(function(d) { return uiTooltipHtml(d.description, d.key); })
+                  );
 
+              buttonsEnter
+                  .each(function(d) {
+                      select(this)
+                          .call(svgIcon('#iD-icon-' + d.button));
+                  });
 
-      // Show the notes
-      function editOn() {
-          if (!_notesVisible) {
-              _notesVisible = true;
-              drawLayer
-                  .style('display', 'block');
-          }
-      }
+              buttonsEnter
+                  .append('span')
+                  .attr('class', 'label')
+                  .text(function(mode) { return mode.title; });
 
+              // if we are adding/removing the buttons, check if toolbar has overflowed
+              if (buttons.enter().size() || buttons.exit().size()) {
+                  context.ui().checkOverflow('#bar', true);
+              }
 
-      // Immediately remove the notes and their touch targets
-      function editOff() {
-          if (_notesVisible) {
-              _notesVisible = false;
-              drawLayer
-                  .style('display', 'none');
-              drawLayer.selectAll('.note')
-                  .remove();
-              touchLayer.selectAll('.note')
-                  .remove();
+              // update
+              buttons = buttons
+                  .merge(buttonsEnter)
+                  .classed('disabled', function(d) { return !enabled(d); });
           }
-      }
+      };
+  }
 
+  function uiNotice(context) {
 
-      // Enable the layer.  This shows the notes and transitions them to visible.
-      function layerOn() {
-          editOn();
+      return function(selection) {
+          var div = selection
+              .append('div')
+              .attr('class', 'notice');
 
-          drawLayer
-              .style('opacity', 0)
-              .transition()
-              .duration(250)
-              .style('opacity', 1)
-              .on('end interrupt', function () {
-                  dispatch$$1.call('change');
+          var button = div
+              .append('button')
+              .attr('class', 'zoom-to notice fillD')
+              .on('click', function() {
+                  context.map().zoomEase(context.minEditableZoom());
+              })
+              .on('wheel', function() {   // let wheel events pass through #4482
+                  var e2 = new WheelEvent(event.type, event);
+                  context.surface().node().dispatchEvent(e2);
               });
-      }
 
+          button
+              .call(svgIcon('#iD-icon-plus', 'pre-text'))
+              .append('span')
+              .attr('class', 'label')
+              .text(t('zoom_in_edit'));
 
-      // Disable the layer.  This transitions the layer invisible and then hides the notes.
-      function layerOff() {
-          throttledRedraw.cancel();
-          drawLayer.interrupt();
-          touchLayer.selectAll('.note')
-              .remove();
 
-          drawLayer
-              .transition()
-              .duration(250)
-              .style('opacity', 0)
-              .on('end interrupt', function () {
-                  editOff();
-                  dispatch$$1.call('change');
-              });
-      }
+          function disableTooHigh() {
+              var canEdit = context.map().zoom() >= context.minEditableZoom();
+              div.style('display', canEdit ? 'none' : 'block');
+          }
 
+          context.map()
+              .on('move.notice', debounce(disableTooHigh, 500));
 
-      // Update the note markers
-      function updateMarkers() {
-          if (!_notesVisible || !_notesEnabled) return;
+          disableTooHigh();
+      };
+  }
 
-          var service = getService();
-          var selectedID = context.selectedNoteID();
-          var data = (service ? service.notes(projection) : []);
-          var getTransform = svgPointTransform(projection);
+  function uiPhotoviewer(context) {
 
-          // Draw markers..
-          var notes = drawLayer.selectAll('.note')
-              .data(data, function(d) { return d.status + d.id; });
+      var dispatch$1 = dispatch('resize');
 
-          // exit
-          notes.exit()
-              .remove();
+      function photoviewer(selection) {
+          selection
+              .append('button')
+              .attr('class', 'thumb-hide')
+              .on('click', function () {
+                  if (services.streetside) { services.streetside.hideViewer(); }
+                  if (services.mapillary) { services.mapillary.hideViewer(); }
+                  if (services.openstreetcam) { services.openstreetcam.hideViewer(); }
+              })
+              .append('div')
+              .call(svgIcon('#iD-icon-close'));
 
-          // enter
-          var notesEnter = notes.enter()
-              .append('g')
-              .attr('class', function(d) { return 'note note-' + d.id + ' ' + d.status; })
-              .classed('new', function(d) { return d.id < 0; });
+          selection
+              .append('button')
+              .attr('class', 'resize-handle-xy')
+              .on(
+                  'mousedown',
+                  buildResizeListener(selection, 'resize', dispatch$1, { resizeOnX: true, resizeOnY: true })
+              );
 
-          notesEnter
-              .append('ellipse')
-              .attr('cx', 0.5)
-              .attr('cy', 1)
-              .attr('rx', 6.5)
-              .attr('ry', 3)
-              .attr('class', 'stroke');
+          selection
+              .append('button')
+              .attr('class', 'resize-handle-x')
+              .on(
+                  'mousedown',
+                  buildResizeListener(selection, 'resize', dispatch$1, { resizeOnX: true })
+              );
 
-          notesEnter
-              .append('path')
-              .call(markerPath, 'shadow');
+          selection
+              .append('button')
+              .attr('class', 'resize-handle-y')
+              .on(
+                  'mousedown',
+                  buildResizeListener(selection, 'resize', dispatch$1, { resizeOnY: true })
+              );
 
-          notesEnter
-              .append('use')
-              .attr('class', 'note-fill')
-              .attr('width', '20px')
-              .attr('height', '20px')
-              .attr('x', '-8px')
-              .attr('y', '-22px')
-              .attr('xlink:href', '#iD-icon-note');
 
-          notesEnter.selectAll('.note-annotation')
-              .data(function(d) { return [d]; })
-              .enter()
-              .append('use')
-              .attr('class', 'note-annotation')
-              .attr('width', '10px')
-              .attr('height', '10px')
-              .attr('x', '-3px')
-              .attr('y', '-19px')
-              .attr('xlink:href', function(d) {
-                  return '#iD-icon-' + (d.id < 0 ? 'plus' : (d.status === 'open' ? 'close' : 'apply'));
-              });
+          function buildResizeListener(target, eventName, dispatch, options) {
+              var resizeOnX = !!options.resizeOnX;
+              var resizeOnY = !!options.resizeOnY;
+              var minHeight = options.minHeight || 240;
+              var minWidth = options.minWidth || 320;
+              var startX;
+              var startY;
+              var startWidth;
+              var startHeight;
 
-          // update
-          notes
-              .merge(notesEnter)
-              .sort(sortY)
-              .classed('selected', function(d) {
-                  var mode = context.mode();
-                  var isMoving = mode && mode.id === 'drag-note';  // no shadows when dragging
-                  return !isMoving && d.id === selectedID;
-              })
-              .attr('transform', getTransform);
+              function startResize() {
+                  var mapSize = context.map().dimensions();
 
+                  if (resizeOnX) {
+                      var maxWidth = mapSize[0];
+                      var newWidth = clamp((startWidth + event.clientX - startX), minWidth, maxWidth);
+                      target.style('width', newWidth + 'px');
+                  }
 
-          // Draw targets..
-          if (touchLayer.empty()) return;
-          var fillClass = context.getDebug('target') ? 'pink ' : 'nocolor ';
+                  if (resizeOnY) {
+                      var maxHeight = mapSize[1] - 90;  // preserve space at top/bottom of map
+                      var newHeight = clamp((startHeight + startY - event.clientY), minHeight, maxHeight);
+                      target.style('height', newHeight + 'px');
+                  }
 
-          var targets = touchLayer.selectAll('.note')
-              .data(data, function(d) { return d.id; });
+                  dispatch.call(eventName, target, utilGetDimensions(target, true));
+              }
 
-          // exit
-          targets.exit()
-              .remove();
+              function clamp(num, min, max) {
+                  return Math.max(min, Math.min(num, max));
+              }
 
-          // enter/update
-          targets.enter()
-              .append('rect')
-              .attr('width', '20px')
-              .attr('height', '20px')
-              .attr('x', '-8px')
-              .attr('y', '-22px')
-              .merge(targets)
-              .sort(sortY)
-              .attr('class', function(d) {
-                  var newClass = (d.id < 0 ? 'new' : '');
-                  return 'note target note-' + d.id + ' ' + fillClass + newClass;
-              })
-              .attr('transform', getTransform);
+              function stopResize() {
+                  select(window)
+                      .on('.' + eventName, null);
+              }
 
+              return function initResize() {
+                  startX = event.clientX;
+                  startY = event.clientY;
+                  startWidth = target.node().getBoundingClientRect().width;
+                  startHeight = target.node().getBoundingClientRect().height;
 
-          function sortY(a, b) {
-              return (a.id === selectedID) ? 1 : (b.id === selectedID) ? -1 : b.loc[1] - a.loc[1];
+                  select(window)
+                      .on('mousemove.' + eventName, startResize, false)
+                      .on('mouseup.' + eventName, stopResize, false);
+              };
           }
       }
 
+      photoviewer.onMapResize = function() {
+          var photoviewer = select('#photoviewer');
+          var content = select('#content');
+          var mapDimensions = utilGetDimensions(content, true);
+          // shrink photo viewer if it is too big
+          // (-90 preserves space at top and bottom of map used by menus)
+          var photoDimensions = utilGetDimensions(photoviewer, true);
+          if (photoDimensions[0] > mapDimensions[0] || photoDimensions[1] > (mapDimensions[1] - 90)) {
+              var setPhotoDimensions = [
+                  Math.min(photoDimensions[0], mapDimensions[0]),
+                  Math.min(photoDimensions[1], mapDimensions[1] - 90),
+              ];
 
-      // Draw the notes layer and schedule loading notes and updating markers.
-      function drawNotes(selection$$1) {
-          var service = getService();
+              photoviewer
+                  .style('width', setPhotoDimensions[0] + 'px')
+                  .style('height', setPhotoDimensions[1] + 'px');
 
-          var surface = context.surface();
-          if (surface && !surface.empty()) {
-              touchLayer = surface.selectAll('.data-layer.touch .layer-touch.markers');
+              dispatch$1.call('resize', photoviewer, setPhotoDimensions);
           }
+      };
 
-          drawLayer = selection$$1.selectAll('.layer-notes')
-              .data(service ? [0] : []);
-
-          drawLayer.exit()
-              .remove();
-
-          drawLayer = drawLayer.enter()
-              .append('g')
-              .attr('class', 'layer-notes')
-              .style('display', _notesEnabled ? 'block' : 'none')
-              .merge(drawLayer);
+      return utilRebind(photoviewer, dispatch$1, 'on');
+  }
 
-          if (_notesEnabled) {
-              if (service && ~~context.map().zoom() >= minZoom) {
-                  editOn();
-                  service.loadNotes(projection);
-                  updateMarkers();
-              } else {
-                  editOff();
-              }
-          }
-      }
+  function uiRestore(context) {
 
+      return function(selection) {
+          if (!context.history().lock() || !context.history().restorableChanges())
+              return;
 
-      // Toggles the layer on and off
-      drawNotes.enabled = function(val) {
-          if (!arguments.length) return _notesEnabled;
+          var modalSelection = uiModal(selection, true);
 
-          _notesEnabled = val;
-          if (_notesEnabled) {
-              layerOn();
-          } else {
-              layerOff();
-              if (context.selectedNoteID()) {
-                  context.enter(modeBrowse(context));
-              }
-          }
+          modalSelection.select('.modal')
+              .attr('class', 'modal fillL col6');
 
-          dispatch$$1.call('change');
-          return this;
-      };
+          var introModal = modalSelection.select('.content');
 
+          introModal
+              .attr('class','cf');
 
-      return drawNotes;
-  }
+          introModal
+              .append('div')
+              .attr('class', 'modal-section')
+              .append('h3')
+              .text(t('restore.heading'));
 
-  function svgTouch() {
+          introModal
+              .append('div')
+              .attr('class','modal-section')
+              .append('p')
+              .text(t('restore.description'));
 
-      function drawTouch(selection) {
-          selection.selectAll('.layer-touch')
-              .data(['areas', 'lines', 'points', 'turns', 'markers'])
-              .enter()
-              .append('g')
-              .attr('class', function(d) { return 'layer-touch ' + d; });
-      }
+          var buttonWrap = introModal
+              .append('div')
+              .attr('class', 'modal-actions cf');
 
-      return drawTouch;
-  }
+          var restore = buttonWrap
+              .append('button')
+              .attr('class', 'restore col6')
+              .on('click', function() {
+                  context.history().restore();
+                  modalSelection.remove();
+              });
 
-  function svgLayers(projection, context) {
-      var dispatch$$1 = dispatch('change');
-      var svg = select(null);
-      var layers = [
-          { id: 'osm', layer: svgOsm(projection, context, dispatch$$1) },
-          { id: 'notes', layer: svgNotes$$1(projection, context, dispatch$$1) },
-          { id: 'data', layer: svgData$$1(projection, context, dispatch$$1) },
-          { id: 'keepRight', layer: svgKeepRight$$1(projection, context, dispatch$$1) },
-          { id: 'streetside', layer: svgStreetside$$1(projection, context, dispatch$$1)},
-          { id: 'mapillary-images', layer: svgMapillaryImages$$1(projection, context, dispatch$$1) },
-          { id: 'mapillary-signs',  layer: svgMapillarySigns$$1(projection, context, dispatch$$1) },
-          { id: 'openstreetcam-images', layer: svgOpenstreetcamImages$$1(projection, context, dispatch$$1) },
-          { id: 'debug', layer: svgDebug$$1(projection, context, dispatch$$1) },
-          { id: 'geolocate', layer: svgGeolocate(projection, context, dispatch$$1) },
-          { id: 'touch', layer: svgTouch(projection, context, dispatch$$1) }
-      ];
+          restore
+              .append('svg')
+              .attr('class', 'logo logo-restore')
+              .append('use')
+              .attr('xlink:href', '#iD-logo-restore');
 
+          restore
+              .append('div')
+              .text(t('restore.restore'));
 
-      function drawLayers(selection$$1) {
-          svg = selection$$1.selectAll('.surface')
-              .data([0]);
+          var reset = buttonWrap
+              .append('button')
+              .attr('class', 'reset col6')
+              .on('click', function() {
+                  context.history().clearSaved();
+                  modalSelection.remove();
+              });
 
-          svg = svg.enter()
+          reset
               .append('svg')
-              .attr('class', 'surface')
-              .merge(svg);
-
-          var defs = svg.selectAll('.surface-defs')
-              .data([0]);
-
-          defs.enter()
-              .append('defs')
-              .attr('class', 'surface-defs');
+              .attr('class', 'logo logo-reset')
+              .append('use')
+              .attr('xlink:href', '#iD-logo-reset');
 
-          var groups = svg.selectAll('.data-layer')
-              .data(layers);
+          reset
+              .append('div')
+              .text(t('restore.reset'));
 
-          groups.exit()
-              .remove();
+          restore.node().focus();
+      };
+  }
 
-          groups.enter()
-              .append('g')
-              .attr('class', function(d) { return 'data-layer ' + d.id; })
-              .merge(groups)
-              .each(function(d) { select(this).call(d.layer); });
-      }
+  function uiSave(context) {
+      var history = context.history();
+      var key = uiCmd('⌘S');
+      var _numChanges = 0;
 
 
-      drawLayers.all = function() {
-          return layers;
-      };
+      return function(selection) {
 
 
-      drawLayers.layer = function(id) {
-          var obj = find$1(layers, function(o) {return o.id === id;});
-          return obj && obj.layer;
-      };
+          function isSaving() {
+              var mode = context.mode();
+              return mode && mode.id === 'save';
+          }
 
 
-      drawLayers.only = function(what) {
-          var arr = [].concat(what);
-          drawLayers.remove(difference(map$3(layers, 'id'), arr));
-          return this;
-      };
+          function isDisabled() {
+              return _numChanges === 0 || isSaving();
+          }
 
 
-      drawLayers.remove = function(what) {
-          var arr = [].concat(what);
-          arr.forEach(function(id) {
-              layers = reject(layers, function(o) {return o.id === id;});
-          });
-          dispatch$$1.call('change');
-          return this;
-      };
+          function save() {
+              event.preventDefault();
+              if (!context.inIntro() && !isSaving() && history.hasChanges()) {
+                  context.enter(modeSave(context));
+              }
+          }
 
 
-      drawLayers.add = function(what) {
-          var arr = [].concat(what);
-          arr.forEach(function(obj) {
-              if ('id' in obj && 'layer' in obj) {
-                  layers.push(obj);
+          function bgColor() {
+              var step;
+              if (_numChanges === 0) {
+                  return null;
+              } else if (_numChanges <= 50) {
+                  step = _numChanges / 50;
+                  return interpolateRgb('#fff', '#ff8')(step);  // white -> yellow
+              } else {
+                  step = Math.min((_numChanges - 50) / 50, 1.0);
+                  return interpolateRgb('#ff8', '#f88')(step);  // yellow -> red
               }
-          });
-          dispatch$$1.call('change');
-          return this;
-      };
+          }
 
 
-      drawLayers.dimensions = function(_) {
-          if (!arguments.length) return utilGetDimensions(svg);
-          utilSetDimensions(svg, _);
-          return this;
-      };
+          function updateCount() {
+              var val = history.difference().summary().length;
+              if (val === _numChanges) return;
+              _numChanges = val;
 
+              tooltipBehavior
+                  .title(uiTooltipHtml(
+                      t(_numChanges > 0 ? 'save.help' : 'save.no_changes'), key)
+                  );
 
-      return utilRebind(drawLayers, dispatch$$1, 'on');
-  }
+              button
+                  .classed('disabled', isDisabled())
+                  .style('background', bgColor(_numChanges));
 
-  function svgLines$$1(projection, context) {
-      var detected = utilDetect();
+              button.select('span.count')
+                  .text(_numChanges);
+          }
 
-      var highway_stack = {
-          motorway: 0,
-          motorway_link: 1,
-          trunk: 2,
-          trunk_link: 3,
-          primary: 4,
-          primary_link: 5,
-          secondary: 6,
-          tertiary: 7,
-          unclassified: 8,
-          residential: 9,
-          service: 10,
-          footway: 11
-      };
 
+          var tooltipBehavior = tooltip()
+              .placement('bottom')
+              .html(true)
+              .title(uiTooltipHtml(t('save.no_changes'), key));
 
-      function drawTargets(selection, graph, entities, filter$$1) {
-          var targetClass = context.getDebug('target') ? 'pink ' : 'nocolor ';
-          var nopeClass = context.getDebug('target') ? 'red ' : 'nocolor ';
-          var getPath = svgPath(projection).geojson;
-          var activeID = context.activeID();
+          var button = selection
+              .append('button')
+              .attr('class', 'save disabled')
+              .attr('tabindex', -1)
+              .on('click', save)
+              .call(tooltipBehavior);
 
-          // The targets and nopes will be MultiLineString sub-segments of the ways
-          var data = { targets: [], nopes: [] };
+          button
+              .call(svgIcon('#iD-icon-save'));
 
-          entities.forEach(function(way) {
-              var features = svgSegmentWay(way, graph, activeID);
-              data.targets.push.apply(data.targets, features.passive);
-              data.nopes.push.apply(data.nopes, features.active);
-          });
+          button
+              .append('span')
+              .attr('class', 'label')
+              .text(t('save.title'));
 
+          button
+              .append('span')
+              .attr('class', 'count')
+              .text('0');
 
-          // Targets allow hover and vertex snapping
-          var targetData = data.targets.filter(getPath);
-          var targets = selection.selectAll('.line.target-allowed')
-              .filter(function(d) { return filter$$1(d.properties.entity); })
-              .data(targetData, function key(d) { return d.id; });
+          updateCount();
 
-          // exit
-          targets.exit()
-              .remove();
 
-          // enter/update
-          targets.enter()
-              .append('path')
-              .merge(targets)
-              .attr('d', getPath)
-              .attr('class', function(d) { return 'way line target target-allowed ' + targetClass + d.id; });
+          context.keybinding()
+              .on(key, save, true);
 
+          context.history()
+              .on('change.save', updateCount);
 
-          // NOPE
-          var nopeData = data.nopes.filter(getPath);
-          var nopes = selection.selectAll('.line.target-nope')
-              .filter(function(d) { return filter$$1(d.properties.entity); })
-              .data(nopeData, function key(d) { return d.id; });
+          context
+              .on('enter.save', function() {
+                  button
+                      .classed('disabled', isDisabled());
 
-          // exit
-          nopes.exit()
-              .remove();
+                  if (isSaving()) {
+                      button.call(tooltipBehavior.hide);
+                  }
+              });
+      };
+  }
 
-          // enter/update
-          nopes.enter()
-              .append('path')
-              .merge(nopes)
-              .attr('d', getPath)
-              .attr('class', function(d) { return 'way line target target-nope ' + nopeClass + d.id; });
-      }
+  function uiScale(context) {
+      var projection = context.projection,
+          isImperial = (utilDetect().locale.toLowerCase() === 'en-us'),
+          maxLength = 180,
+          tickHeight = 8;
 
 
-      function drawLines(selection, graph, entities, filter$$1) {
+      function scaleDefs(loc1, loc2) {
+          var lat = (loc2[1] + loc1[1]) / 2,
+              conversion = (isImperial ? 3.28084 : 1),
+              dist = geoLonToMeters(loc2[0] - loc1[0], lat) * conversion,
+              scale = { dist: 0, px: 0, text: '' },
+              buckets, i, val, dLon;
 
-          function waystack(a, b) {
-              var selected = context.selectedIDs();
-              var scoreA = selected.indexOf(a.id) !== -1 ? 20 : 0;
-              var scoreB = selected.indexOf(b.id) !== -1 ? 20 : 0;
+          if (isImperial) {
+              buckets = [5280000, 528000, 52800, 5280, 500, 50, 5, 1];
+          } else {
+              buckets = [5000000, 500000, 50000, 5000, 500, 50, 5, 1];
+          }
 
-              if (a.tags.highway) { scoreA -= highway_stack[a.tags.highway]; }
-              if (b.tags.highway) { scoreB -= highway_stack[b.tags.highway]; }
-              return scoreA - scoreB;
+          // determine a user-friendly endpoint for the scale
+          for (i = 0; i < buckets.length; i++) {
+              val = buckets[i];
+              if (dist >= val) {
+                  scale.dist = Math.floor(dist / val) * val;
+                  break;
+              } else {
+                  scale.dist = +dist.toFixed(2);
+              }
           }
 
+          dLon = geoMetersToLon(scale.dist / conversion, lat);
+          scale.px = Math.round(projection([loc1[0] + dLon, loc1[1]])[0]);
 
-          function drawLineGroup(selection, klass, isSelected) {
-              // Note: Don't add `.selected` class in draw modes
-              var mode = context.mode();
-              var isDrawing = mode && /^draw/.test(mode.id);
-              var selectedClass = (!isDrawing && isSelected) ? 'selected ' : '';
+          scale.text = displayLength(scale.dist / conversion, isImperial);
 
-              var lines = selection
-                  .selectAll('path')
-                  .filter(filter$$1)
-                  .data(getPathData(isSelected), osmEntity$$1.key);
+          return scale;
+      }
 
-              lines.exit()
-                  .remove();
 
-              // Optimization: Call expensive TagClasses only on enter selection. This
-              // works because osmEntity.key is defined to include the entity v attribute.
-              lines.enter()
-                  .append('path')
-                  .attr('class', function(d) {
-                      var oldMPClass = oldMultiPolygonOuters[d.id] ? 'old-multipolygon ' : '';
-                      return 'way line ' + klass + ' ' + selectedClass + oldMPClass + d.id;
-                  })
-                  .call(svgTagClasses())
-                  .merge(lines)
-                  .sort(waystack)
-                  .attr('d', getPath)
-                  .call(svgTagClasses().tags(svgRelationMemberTags(graph)));
+      function update(selection) {
+          // choose loc1, loc2 along bottom of viewport (near where the scale will be drawn)
+          var dims = context.map().dimensions(),
+              loc1 = projection.invert([0, dims[1]]),
+              loc2 = projection.invert([maxLength, dims[1]]),
+              scale = scaleDefs(loc1, loc2);
 
-              return selection;
-          }
+          selection.select('#scale-path')
+              .attr('d', 'M0.5,0.5v' + tickHeight + 'h' + scale.px + 'v-' + tickHeight);
 
+          selection.select('#scale-textgroup')
+              .attr('transform', 'translate(' + (scale.px + 8) + ',' + tickHeight + ')');
 
-          function getPathData(isSelected) {
-              return function() {
-                  var layer = this.parentNode.__data__;
-                  var data = pathdata[layer] || [];
-                  return data.filter(function(d) {
-                      if (isSelected)
-                          return context.selectedIDs().indexOf(d.id) !== -1;
-                      else
-                          return context.selectedIDs().indexOf(d.id) === -1;
-                  });
-              };
+          selection.select('#scale-text')
+              .text(scale.text);
+      }
+
+
+      return function(selection) {
+          function switchUnits() {
+              isImperial = !isImperial;
+              selection.call(update);
           }
 
-          function addMarkers(layergroup, pathclass, groupclass, groupdata, marker) {
-              var markergroup = layergroup
-                  .selectAll('g.' + groupclass)
-                  .data([pathclass]);
+          var scalegroup = selection.append('svg')
+              .attr('id', 'scale')
+              .on('click', switchUnits)
+              .append('g')
+              .attr('transform', 'translate(10,11)');
 
-              markergroup = markergroup.enter()
-                  .append('g')
-                  .attr('class', groupclass)
-                  .merge(markergroup);
+          scalegroup
+              .append('path')
+              .attr('id', 'scale-path');
 
-              var markers = markergroup
-                  .selectAll('path')
-                  .filter(filter$$1)
-                  .data(
-                      function data() { return groupdata[this.parentNode.__data__] || []; },
-                      function key(d) { return [d.id, d.index]; }
-                  );
+          scalegroup
+              .append('g')
+              .attr('id', 'scale-textgroup')
+              .append('text')
+              .attr('id', 'scale-text');
 
-              markers.exit()
-                  .remove();
+          selection.call(update);
 
-              markers = markers.enter()
-                  .append('path')
-                  .attr('class', pathclass)
-                  .attr('marker-mid', marker)
-                  .merge(markers)
-                  .attr('d', function(d) { return d.d; });
+          context.map().on('move.scale', function() {
+              update(selection);
+          });
+      };
+  }
 
-              if (detected.ie) {
-                  markers.each(function() { this.parentNode.insertBefore(this, this); });
-              }
-          }
+  function uiSidebar(context) {
+      var inspector = uiInspector(context);
+      var dataEditor = uiDataEditor(context);
+      var noteEditor = uiNoteEditor(context);
+      var improveOsmEditor = uiImproveOsmEditor(context);
+      var keepRightEditor = uiKeepRightEditor(context);
+      var _current;
+      var _wasData = false;
+      var _wasNote = false;
+      var _wasQAError = false;
 
 
-          var getPath = svgPath(projection, graph);
-          var ways = [];
-          var pathdata = {};
-          var onewaydata = {};
-          var sideddata = {};
-          var oldMultiPolygonOuters = {};
+      function sidebar(selection) {
+          var container = select('#id-container');
+          var minWidth = 280;
+          var sidebarWidth;
+          var containerWidth;
+          var dragOffset;
 
-          for (var i = 0; i < entities.length; i++) {
-              var entity = entities[i];
-              var outer = osmSimpleMultipolygonOuterMember(entity, graph);
-              if (outer) {
-                  ways.push(entity.mergeTags(outer.tags));
-                  oldMultiPolygonOuters[outer.id] = true;
-              } else if (entity.geometry(graph) === 'line') {
-                  ways.push(entity);
-              }
-          }
+          var resizer = selection
+              .append('div')
+              .attr('id', 'sidebar-resizer');
 
-          ways = ways.filter(getPath);
-          pathdata = groupBy(ways, function(way) { return way.layer(); });
+          // Set the initial width constraints
+          selection
+              .style('min-width', minWidth + 'px')
+              .style('max-width', '400px')
+              .style('width', '33.3333%');
 
-          forOwn(pathdata, function(v, k) {
-              var onewayArr = filter(v, function(d) { return d.isOneWay(); });
-              var onewaySegments = svgMarkerSegments(
-                  projection, graph, 35,
-                  function shouldReverse(entity) { return entity.tags.oneway === '-1'; },
-                  function bothDirections(entity) {
-                      return entity.tags.oneway === 'reversible' || entity.tags.oneway === 'alternating';
-                  }
-              );
-              onewaydata[k] = flatten(map$3(onewayArr, onewaySegments));
+          resizer.call(d3_drag()
+              .container(container.node())
+              .on('start', function() {
+                  // offset from edge of sidebar-resizer
+                  dragOffset = event.sourceEvent.offsetX - 1;
 
-              var sidedArr = filter(v, function(d) { return d.isSided(); });
-              var sidedSegments = svgMarkerSegments(
-                  projection, graph, 30,
-                  function shouldReverse() { return false; },
-                  function bothDirections() { return false; }
-              );
-              sideddata[k] = flatten(map$3(sidedArr, sidedSegments));
-          });
+                  sidebarWidth = selection.node().getBoundingClientRect().width;
+                  containerWidth = container.node().getBoundingClientRect().width;
+                  var widthPct = (sidebarWidth / containerWidth) * 100;
+                  selection
+                      .style('width', widthPct + '%')    // lock in current width
+                      .style('max-width', '85%');        // but allow larger widths
 
+                  resizer.classed('dragging', true);
+              })
+              .on('drag', function() {
+                  var isRTL = (textDirection === 'rtl');
+                  var scaleX = isRTL ? 0 : 1;
+                  var xMarginProperty = isRTL ? 'margin-right' : 'margin-left';
 
-          var covered = selection.selectAll('.layer-osm.covered');     // under areas
-          var uncovered = selection.selectAll('.layer-osm.lines');     // over areas
-          var touchLayer = selection.selectAll('.layer-touch.lines');
+                  var x = event.x - dragOffset;
+                  sidebarWidth = isRTL ? containerWidth - x : x;
 
-          // Draw lines..
-          [covered, uncovered].forEach(function(selection) {
-              var range$$1 = (selection === covered ? range(-10,0) : range(0,11));
-              var layergroup = selection
-                  .selectAll('g.layergroup')
-                  .data(range$$1);
+                  var isCollapsed = selection.classed('collapsed');
+                  var shouldCollapse = sidebarWidth < minWidth;
 
-              layergroup = layergroup.enter()
-                  .append('g')
-                  .attr('class', function(d) { return 'layergroup layer' + String(d); })
-                  .merge(layergroup);
+                  selection.classed('collapsed', shouldCollapse);
 
-              layergroup
-                  .selectAll('g.linegroup')
-                  .data(['shadow', 'casing', 'stroke', 'shadow-highlighted', 'casing-highlighted', 'stroke-highlighted'])
-                  .enter()
-                  .append('g')
-                  .attr('class', function(d) { return 'linegroup line-' + d; });
+                  if (shouldCollapse) {
+                      if (!isCollapsed) {
+                          selection
+                              .style(xMarginProperty, '-400px')
+                              .style('width', '400px');
 
-              layergroup.selectAll('g.line-shadow')
-                  .call(drawLineGroup, 'shadow', false);
-              layergroup.selectAll('g.line-casing')
-                  .call(drawLineGroup, 'casing', false);
-              layergroup.selectAll('g.line-stroke')
-                  .call(drawLineGroup, 'stroke', false);
+                          context.ui().onResize([(sidebarWidth - event.dx) * scaleX, 0]);
+                      }
 
-              layergroup.selectAll('g.line-shadow-highlighted')
-                  .call(drawLineGroup, 'shadow', true);
-              layergroup.selectAll('g.line-casing-highlighted')
-                  .call(drawLineGroup, 'casing', true);
-              layergroup.selectAll('g.line-stroke-highlighted')
-                  .call(drawLineGroup, 'stroke', true);
+                  } else {
+                      var widthPct = (sidebarWidth / containerWidth) * 100;
+                      selection
+                          .style(xMarginProperty, null)
+                          .style('width', widthPct + '%');
 
-              addMarkers(layergroup, 'oneway', 'onewaygroup', onewaydata, 'url(#oneway-marker)');
-              addMarkers(layergroup, 'sided', 'sidedgroup', sideddata,
-                  function marker(d) {
-                      var category = graph.entity(d.id).sidednessIdentifier();
-                      return 'url(#sided-marker-' + category + ')';
+                      if (isCollapsed) {
+                          context.ui().onResize([-sidebarWidth * scaleX, 0]);
+                      } else {
+                          context.ui().onResize([-event.dx * scaleX, 0]);
+                      }
                   }
-              );
-          });
+              })
+              .on('end', function() {
+                  resizer.classed('dragging', false);
+              })
+          );
 
-          // Draw touch targets..
-          touchLayer
-              .call(drawTargets, graph, ways, filter$$1);
-      }
+          var featureListWrap = selection
+              .append('div')
+              .attr('class', 'feature-list-pane')
+              .call(uiFeatureList(context));
 
+          var inspectorWrap = selection
+              .append('div')
+              .attr('class', 'inspector-hidden inspector-wrap fr');
 
-      return drawLines;
-  }
 
-  function svgMidpoints$$1(projection, context) {
-      var targetRadius = 8;
+          function hover(datum) {
+              if (datum && datum.__featurehash__) {   // hovering on data
+                  _wasData = true;
+                  sidebar
+                      .show(dataEditor.datum(datum));
 
-      function drawTargets(selection, graph, entities, filter) {
-          var fillClass = context.getDebug('target') ? 'pink ' : 'nocolor ';
-          var getTransform = svgPointTransform(projection).geojson;
+                  selection.selectAll('.sidebar-component')
+                      .classed('inspector-hover', true);
 
-          var data = entities.map(function(midpoint) {
-              return {
-                  type: 'Feature',
-                  id: midpoint.id,
-                  properties: {
-                      target: true,
-                      entity: midpoint
-                  },
-                  geometry: {
-                      type: 'Point',
-                      coordinates: midpoint.loc
-                  }
-              };
-          });
+              } else if (datum instanceof osmNote) {
+                  if (context.mode().id === 'drag-note') return;
+                  _wasNote = true;
 
-          var targets = selection.selectAll('.midpoint.target')
-              .filter(function(d) { return filter(d.properties.entity); })
-              .data(data, function key(d) { return d.id; });
+                  var osm = services.osm;
+                  if (osm) {
+                      datum = osm.getNote(datum.id);   // marker may contain stale data - get latest
+                  }
 
-          // exit
-          targets.exit()
-              .remove();
+                  sidebar
+                      .show(noteEditor.note(datum));
 
-          // enter/update
-          targets.enter()
-              .append('circle')
-              .attr('r', targetRadius)
-              .merge(targets)
-              .attr('class', function(d) { return 'node midpoint target ' + fillClass + d.id; })
-              .attr('transform', getTransform);
-      }
+                  selection.selectAll('.sidebar-component')
+                      .classed('inspector-hover', true);
 
+              } else if (datum instanceof qaError) {
+                  _wasQAError = true;
 
-      function drawMidpoints(selection, graph, entities, filter, extent) {
-          var drawLayer = selection.selectAll('.layer-osm.points .points-group.midpoints');
-          var touchLayer = selection.selectAll('.layer-touch.points');
+                  var errService = services[datum.service];
+                  if (errService) {
+                      // marker may contain stale data - get latest
+                      datum = errService.getError(datum.id);
+                  }
 
-          var mode = context.mode();
-          if (mode && mode.id !== 'select') {
-              drawLayer.selectAll('.midpoint').remove();
-              touchLayer.selectAll('.midpoint.target').remove();
-              return;
-          }
+                  // Temporary solution while only two services
+                  var errEditor = (datum.service === 'keepRight') ? keepRightEditor : improveOsmEditor;
 
-          var poly = extent.polygon();
-          var midpoints = {};
+                  d3_selectAll('.qa_error.' + datum.service)
+                      .classed('hover', function(d) { return d.id === datum.id; });
 
-          for (var i = 0; i < entities.length; i++) {
-              var entity = entities[i];
+                  sidebar
+                      .show(errEditor.error(datum));
 
-              if (entity.type !== 'way') continue;
-              if (!filter(entity)) continue;
-              if (context.selectedIDs().indexOf(entity.id) < 0) continue;
+                  selection.selectAll('.sidebar-component')
+                      .classed('inspector-hover', true);
 
-              var nodes = graph.childNodes(entity);
-              for (var j = 0; j < nodes.length - 1; j++) {
-                  var a = nodes[j];
-                  var b = nodes[j + 1];
-                  var id = [a.id, b.id].sort().join('-');
+              } else if (!_current && (datum instanceof osmEntity)) {
+                  featureListWrap
+                      .classed('inspector-hidden', true);
 
-                  if (midpoints[id]) {
-                      midpoints[id].parents.push(entity);
-                  } else if (geoVecLength(projection(a.loc), projection(b.loc)) > 40) {
-                      var point = geoVecInterp(a.loc, b.loc, 0.5);
-                      var loc = null;
+                  inspectorWrap
+                      .classed('inspector-hidden', false)
+                      .classed('inspector-hover', true);
 
-                      if (extent.intersects(point)) {
-                          loc = point;
-                      } else {
-                          for (var k = 0; k < 4; k++) {
-                              point = geoLineIntersection([a.loc, b.loc], [poly[k], poly[k + 1]]);
-                              if (point &&
-                                  geoVecLength(projection(a.loc), projection(point)) > 20 &&
-                                  geoVecLength(projection(b.loc), projection(point)) > 20)
-                              {
-                                  loc = point;
-                                  break;
-                              }
-                          }
-                      }
+                  if (inspector.entityID() !== datum.id || inspector.state() !== 'hover') {
+                      inspector
+                          .state('hover')
+                          .entityID(datum.id);
 
-                      if (loc) {
-                          midpoints[id] = {
-                              type: 'midpoint',
-                              id: id,
-                              loc: loc,
-                              edge: [a.id, b.id],
-                              parents: [entity]
-                          };
-                      }
+                      inspectorWrap
+                          .call(inspector);
                   }
-              }
-          }
-
 
-          function midpointFilter(d) {
-              if (midpoints[d.id])
-                  return true;
+              } else if (!_current) {
+                  featureListWrap
+                      .classed('inspector-hidden', false);
+                  inspectorWrap
+                      .classed('inspector-hidden', true);
+                  inspector
+                      .state('hide');
 
-              for (var i = 0; i < d.parents.length; i++) {
-                  if (filter(d.parents[i])) {
-                      return true;
-                  }
+              } else if (_wasData || _wasNote || _wasQAError) {
+                  _wasNote = false;
+                  _wasData = false;
+                  _wasQAError = false;
+                  d3_selectAll('.note').classed('hover', false);
+                  d3_selectAll('.qa_error').classed('hover', false);
+                  sidebar.hide();
               }
-
-              return false;
           }
 
+          sidebar.hover = throttle(hover, 200);
 
-          var groups = drawLayer.selectAll('.midpoint')
-              .filter(midpointFilter)
-              .data(values$1(midpoints), function(d) { return d.id; });
 
-          groups.exit()
-              .remove();
+          sidebar.intersects = function(extent) {
+              var rect = selection.node().getBoundingClientRect();
+              return extent.intersects([
+                  context.projection.invert([0, rect.height]),
+                  context.projection.invert([rect.width, 0])
+              ]);
+          };
 
-          var enter = groups.enter()
-              .insert('g', ':first-child')
-              .attr('class', 'midpoint');
 
-          enter
-              .append('polygon')
-              .attr('points', '-6,8 10,0 -6,-8')
-              .attr('class', 'shadow');
+          sidebar.select = function(id, newFeature) {
+              sidebar.hide();
 
-          enter
-              .append('polygon')
-              .attr('points', '-3,4 5,0 -3,-4')
-              .attr('class', 'fill');
+              if (id) {
+                  var entity = context.entity(id);
+                  // uncollapse the sidebar
+                  if (selection.classed('collapsed')) {
+                      var extent = entity.extent(context.graph());
+                      sidebar.expand(sidebar.intersects(extent));
+                  }
 
-          groups = groups
-              .merge(enter)
-              .attr('transform', function(d) {
-                  var translate = svgPointTransform(projection);
-                  var a = graph.entity(d.edge[0]);
-                  var b = graph.entity(d.edge[1]);
-                  var angle = geoAngle(a, b, projection) * (180 / Math.PI);
-                  return translate(d) + ' rotate(' + angle + ')';
-              })
-              .call(svgTagClasses().tags(
-                  function(d) { return d.parents[0].tags; }
-              ));
+                  featureListWrap
+                      .classed('inspector-hidden', true);
 
-          // Propagate data bindings.
-          groups.select('polygon.shadow');
-          groups.select('polygon.fill');
+                  inspectorWrap
+                      .classed('inspector-hidden', false)
+                      .classed('inspector-hover', false);
 
+                  if (inspector.entityID() !== id || inspector.state() !== 'select') {
+                      inspector
+                          .state('select')
+                          .entityID(id)
+                          .newFeature(newFeature);
 
-          // Draw touch targets..
-          touchLayer
-              .call(drawTargets, graph, values$1(midpoints), midpointFilter);
-      }
+                      inspectorWrap
+                          .call(inspector, newFeature);
+                  }
 
-      return drawMidpoints;
-  }
+                  sidebar.showPresetList = function() {
+                      inspector.showList(context.presets().match(entity, context.graph()));
+                  };
 
-  function svgPoints$$1(projection, context) {
+              } else {
+                  inspector
+                      .state('hide');
+              }
+          };
 
-      function markerPath(selection, klass) {
-          selection
-              .attr('class', klass)
-              .attr('transform', 'translate(-8, -23)')
-              .attr('d', 'M 17,8 C 17,13 11,21 8.5,23.5 C 6,21 0,13 0,8 C 0,4 4,-0.5 8.5,-0.5 C 13,-0.5 17,4 17,8 z');
-      }
 
-      function sortY(a, b) {
-          return b.loc[1] - a.loc[1];
-      }
+          sidebar.show = function(component, element) {
+              featureListWrap
+                  .classed('inspector-hidden', true);
+              inspectorWrap
+                  .classed('inspector-hidden', true);
 
+              if (_current) _current.remove();
+              _current = selection
+                  .append('div')
+                  .attr('class', 'sidebar-component')
+                  .call(component, element);
+          };
 
-      // Avoid exit/enter if we're just moving stuff around.
-      // The node will get a new version but we only need to run the update selection.
-      function fastEntityKey(d) {
-          var mode = context.mode();
-          var isMoving = mode && /^(add|draw|drag|move|rotate)/.test(mode.id);
-          return isMoving ? d.id : osmEntity$$1.key(d);
-      }
 
+          sidebar.hide = function() {
+              featureListWrap
+                  .classed('inspector-hidden', false);
+              inspectorWrap
+                  .classed('inspector-hidden', true);
 
-      function drawTargets(selection, graph, entities, filter) {
-          var fillClass = context.getDebug('target') ? 'pink ' : 'nocolor ';
-          var getTransform = svgPointTransform(projection).geojson;
-          var activeID = context.activeID();
-          var data = [];
+              if (_current) _current.remove();
+              _current = null;
+          };
 
-          entities.forEach(function(node) {
-              if (activeID === node.id) return;   // draw no target on the activeID
 
-              data.push({
-                  type: 'Feature',
-                  id: node.id,
-                  properties: {
-                      target: true,
-                      entity: node
-                  },
-                  geometry: node.asGeoJSON()
-              });
-          });
+          sidebar.expand = function(moveMap) {
+              if (selection.classed('collapsed')) {
+                  sidebar.toggle(moveMap);
+              }
+          };
 
-          var targets = selection.selectAll('.point.target')
-              .filter(function(d) { return filter(d.properties.entity); })
-              .data(data, function key(d) { return d.id; });
 
-          // exit
-          targets.exit()
-              .remove();
+          sidebar.collapse = function(moveMap) {
+              if (!selection.classed('collapsed')) {
+                  sidebar.toggle(moveMap);
+              }
+          };
 
-          // enter/update
-          targets.enter()
-              .append('rect')
-              .attr('x', -10)
-              .attr('y', -26)
-              .attr('width', 20)
-              .attr('height', 30)
-              .merge(targets)
-              .attr('class', function(d) { return 'node point target ' + fillClass + d.id; })
-              .attr('transform', getTransform);
-      }
 
+          sidebar.toggle = function(moveMap) {
+              var e = event;
+              if (e && e.sourceEvent) {
+                  e.sourceEvent.preventDefault();
+              } else if (e) {
+                  e.preventDefault();
+              }
 
-      function drawPoints(selection, graph, entities, filter) {
-          var wireframe = context.surface().classed('fill-wireframe');
-          var zoom = geoScaleToZoom(projection.scale());
+              // Don't allow sidebar to toggle when the user is in the walkthrough.
+              if (context.inIntro()) return;
 
-          // Points with a direction will render as vertices at higher zooms..
-          function renderAsPoint(entity) {
-              return entity.geometry(graph) === 'point' &&
-                  !(zoom >= 18 && entity.directions(graph, projection).length);
-          }
+              var isCollapsed = selection.classed('collapsed');
+              var isCollapsing = !isCollapsed;
+              var isRTL = (textDirection === 'rtl');
+              var scaleX = isRTL ? 0 : 1;
+              var xMarginProperty = isRTL ? 'margin-right' : 'margin-left';
 
-          // All points will render as vertices in wireframe mode too..
-          var points = wireframe ? [] : entities.filter(renderAsPoint);
-          points.sort(sortY);
+              sidebarWidth = selection.node().getBoundingClientRect().width;
 
+              // switch from % to px
+              selection.style('width', sidebarWidth + 'px');
 
-          var drawLayer = selection.selectAll('.layer-osm.points .points-group.points');
-          var touchLayer = selection.selectAll('.layer-touch.points');
+              var startMargin, endMargin, lastMargin;
+              if (isCollapsing) {
+                  startMargin = lastMargin = 0;
+                  endMargin = -sidebarWidth;
+              } else {
+                  startMargin = lastMargin = -sidebarWidth;
+                  endMargin = 0;
+              }
 
-          // Draw points..
-          var groups = drawLayer.selectAll('g.point')
-              .filter(filter)
-              .data(points, fastEntityKey);
+              selection.transition()
+                  .style(xMarginProperty, endMargin + 'px')
+                  .tween('panner', function() {
+                      var i = interpolateNumber(startMargin, endMargin);
+                      return function(t) {
+                          var dx = lastMargin - Math.round(i(t));
+                          lastMargin = lastMargin - dx;
+                          context.ui().onResize(moveMap ? undefined : [dx * scaleX, 0]);
+                      };
+                  })
+                  .on('end', function() {
+                      selection.classed('collapsed', isCollapsing);
 
-          groups.exit()
-              .remove();
+                      // switch back from px to %
+                      if (!isCollapsing) {
+                          var containerWidth = container.node().getBoundingClientRect().width;
+                          var widthPct = (sidebarWidth / containerWidth) * 100;
+                          selection
+                              .style(xMarginProperty, null)
+                              .style('width', widthPct + '%');
+                      }
+                  });
+          };
 
-          var enter = groups.enter()
-              .append('g')
-              .attr('class', function(d) { return 'node point ' + d.id; })
-              .order();
+          // toggle the sidebar collapse when double-clicking the resizer
+          resizer.on('dblclick', sidebar.toggle);
+      }
 
-          enter
-              .append('path')
-              .call(markerPath, 'shadow');
+      sidebar.showPresetList = function() {};
+      sidebar.hover = function() {};
+      sidebar.hover.cancel = function() {};
+      sidebar.intersects = function() {};
+      sidebar.select = function() {};
+      sidebar.show = function() {};
+      sidebar.hide = function() {};
+      sidebar.expand = function() {};
+      sidebar.collapse = function() {};
+      sidebar.toggle = function() {};
 
-          enter
-              .append('ellipse')
-              .attr('cx', 0.5)
-              .attr('cy', 1)
-              .attr('rx', 6.5)
-              .attr('ry', 3)
-              .attr('class', 'stroke');
+      return sidebar;
+  }
 
-          enter
-              .append('path')
-              .call(markerPath, 'stroke');
+  function uiSpinner(context) {
+      var osm = context.connection();
 
-          enter
-              .append('use')
-              .attr('transform', 'translate(-5, -19)')
-              .attr('class', 'icon')
-              .attr('width', '11px')
-              .attr('height', '11px');
 
-          groups = groups
-              .merge(enter)
-              .attr('transform', svgPointTransform(projection))
-              .call(svgTagClasses());
+      return function(selection) {
+          var img = selection
+              .append('img')
+              .attr('src', context.imagePath('loader-black.gif'))
+              .style('opacity', 0);
 
-          // Selecting the following implicitly
-          // sets the data (point entity) on the element
-          groups.select('.shadow');
-          groups.select('.stroke');
-          groups.select('.icon')
-              .attr('xlink:href', function(entity) {
-                  var preset = context.presets().match(entity, graph);
-                  var picon = preset && preset.icon;
+          if (osm) {
+              osm
+                  .on('loading.spinner', function() {
+                      img.transition()
+                          .style('opacity', 1);
+                  })
+                  .on('loaded.spinner', function() {
+                      img.transition()
+                          .style('opacity', 0);
+                  });
+          }
+      };
+  }
 
-                  if (!picon) {
-                      return '';
-                  } else {
-                      var isMaki = /^maki-/.test(picon);
-                      return '#' + picon + (isMaki ? '-11' : '');
-                  }
-              });
+  function uiSplash(context) {
 
+      return function(selection) {
+          if (context.storage('sawSplash'))
+               return;
 
-          // Draw touch targets..
-          touchLayer
-              .call(drawTargets, graph, points, filter);
-      }
+          context.storage('sawSplash', true);
 
+          var modalSelection = uiModal(selection);
 
-      return drawPoints;
-  }
+          modalSelection.select('.modal')
+              .attr('class', 'modal-splash modal col6');
 
-  function svgTagClasses() {
-      var primaries = [
-          'building', 'highway', 'railway', 'waterway', 'aeroway',
-          'motorway', 'boundary', 'power', 'amenity', 'natural', 'landuse',
-          'leisure', 'military', 'place', 'man_made', 'route', 'attraction'
-      ];
-      var statuses = [
-          'proposed', 'construction', 'disused', 'abandoned', 'dismantled',
-          'razed', 'demolished', 'obliterated', 'intermittent'
-      ];
-      var secondaries = [
-          'oneway', 'bridge', 'tunnel', 'embankment', 'cutting', 'barrier',
-          'surface', 'tracktype', 'footway', 'crossing', 'service', 'sport',
-          'public_transport', 'location', 'parking'
-      ];
-      var _tags = function(entity) { return entity.tags; };
+          var introModal = modalSelection.select('.content')
+              .append('div')
+              .attr('class', 'fillL');
 
+          introModal
+              .append('div')
+              .attr('class','modal-section cf')
+              .append('h3').text(t('splash.welcome'));
 
-      var tagClasses = function(selection$$1) {
-          selection$$1.each(function tagClassesEach(entity) {
-              var value = this.className;
-              var primary, status;
+          introModal
+              .append('div')
+              .attr('class','modal-section')
+              .append('p')
+              .html(t('splash.text', {
+                  version: context.version,
+                  website: '<a href="http://ideditor.com/">ideditor.com</a>',
+                  github: '<a href="https://github.com/openstreetmap/iD">github.com</a>'
+              }));
 
-              if (value.baseVal !== undefined) {
-                  value = value.baseVal;
-              }
+          var buttonWrap = introModal
+              .append('div')
+              .attr('class', 'modal-actions cf');
 
-              var t = _tags(entity);
-              var isMultiPolygon = (t.type === 'multipolygon');
-              var shouldRenderLineAsArea = isMultiPolygon && !entity.hasInterestingTags();
+          var walkthrough = buttonWrap
+              .append('button')
+              .attr('class', 'walkthrough col6')
+              .on('click', function() {
+                  context.container().call(uiIntro(context));
+                  modalSelection.close();
+              });
 
-              var i, k, v;
+          walkthrough
+              .append('svg')
+              .attr('class', 'logo logo-walkthrough')
+              .append('use')
+              .attr('xlink:href', '#iD-logo-walkthrough');
 
-              // preserve base classes (nothing with `tag-`)
-              var classes = value.trim().split(/\s+/)
-                  .filter(function(klass) {
-                      return klass.length && !/^tag-/.test(klass);
-                  })
-                  .map(function(klass) {  // style multipolygon inner/outers as areas not lines
-                      return (klass === 'line' && shouldRenderLineAsArea) ? 'area' : klass;
-                  });
+          walkthrough
+              .append('div')
+              .text(t('splash.walkthrough'));
 
+          var startEditing = buttonWrap
+              .append('button')
+              .attr('class', 'start-editing col6')
+              .on('click', modalSelection.close);
 
-              // pick at most one primary classification tag..
-              for (i = 0; i < primaries.length; i++) {
-                  k = primaries[i];
-                  v = t[k];
-                  if (!v || v === 'no') continue;
+          startEditing
+              .append('svg')
+              .attr('class', 'logo logo-features')
+              .append('use')
+              .attr('xlink:href', '#iD-logo-features');
 
-                  primary = k;
-                  if (statuses.indexOf(v) !== -1) {   // e.g. `railway=abandoned`
-                      status = v;
-                      classes.push('tag-' + k);
-                  } else {
-                      classes.push('tag-' + k);
-                      classes.push('tag-' + k + '-' + v);
-                  }
+          startEditing
+              .append('div')
+              .text(t('splash.start'));
 
-                  break;
-              }
 
-              // add at most one status tag, only if relates to primary tag..
-              if (!status) {
-                  for (i = 0; i < statuses.length; i++) {
-                      k = statuses[i];
-                      v = t[k];
-                      if (!v || v === 'no') continue;
+          modalSelection.select('button.close')
+              .attr('class','hide');
 
-                      if (v === 'yes') {   // e.g. `railway=rail + abandoned=yes`
-                          status = k;
-                      }
-                      else if (primary && primary === v) {  // e.g. `railway=rail + abandoned=railway`
-                          status = k;
-                      } else if (!primary && primaries.indexOf(v) !== -1) {  // e.g. `abandoned=railway`
-                          status = k;
-                          primary = v;
-                          classes.push('tag-' + v);
-                      }  // else ignore e.g.  `highway=path + abandoned=railway`
-
-                      if (status) break;
-                  }
-              }
+      };
+  }
 
-              if (status) {
-                  classes.push('tag-status');
-                  classes.push('tag-status-' + status);
-              }
+  function uiStatus(context) {
+      var osm = context.connection();
 
-              // add any secondary tags
-              for (i = 0; i < secondaries.length; i++) {
-                  k = secondaries[i];
-                  v = t[k];
-                  if (!v || v === 'no') continue;
-                  classes.push('tag-' + k);
-                  classes.push('tag-' + k + '-' + v);
-              }
 
-              // For highways, look for surface tagging..
-              if (primary === 'highway' || primary === 'aeroway') {
-                  var paved = (t.highway !== 'track');
-                  for (k in t) {
-                      v = t[k];
-                      if (k in osmPavedTags) {
-                          paved = !!osmPavedTags[k][v];
-                          break;
+      return function(selection) {
+          if (!osm) return;
+
+          function update() {
+              osm.status(function(err, apiStatus) {
+                  selection.html('');
+
+                  if (err) {
+                      if (apiStatus === 'connectionSwitched') {
+                          // if the connection was just switched, we can't rely on
+                          // the status (we're getting the status of the previous api)
+                          return;
+
+                      } else if (apiStatus === 'rateLimited') {
+                          selection
+                              .text(t('status.rateLimit'))
+                              .append('a')
+                              .attr('class', 'api-status-login')
+                              .attr('target', '_blank')
+                              .call(svgIcon('#iD-icon-out-link', 'inline'))
+                              .append('span')
+                              .text(t('login'))
+                              .on('click.login', function() {
+                                  event.preventDefault();
+                                  osm.authenticate();
+                              });
+                      } else {
+                          // eslint-disable-next-line no-warning-comments
+                          // TODO: nice messages for different error types
+                          selection.text(t('status.error'));
                       }
-                  }
-                  if (!paved) {
-                      classes.push('tag-unpaved');
-                  }
-              }
 
+                  } else if (apiStatus === 'readonly') {
+                      selection.text(t('status.readonly'));
+                  } else if (apiStatus === 'offline') {
+                      selection.text(t('status.offline'));
+                  }
 
-              var computed = classes.join(' ').trim();
-              if (computed !== value) {
-                  select(this).attr('class', computed);
-              }
-          });
-      };
+                  selection.attr('class', 'api-status ' + (err ? 'error' : apiStatus));
+              });
+          }
 
+          osm.on('change', function() { update(selection); });
 
-      tagClasses.tags = function(val) {
-          if (!arguments.length) return _tags;
-          _tags = val;
-          return tagClasses;
+          window.setInterval(update, 90000);
+          update(selection);
       };
-
-      return tagClasses;
   }
 
-  function svgTurns(projection, context) {
+  function uiUndoRedo(context) {
+      var commands = [{
+          id: 'undo',
+          cmd: uiCmd('⌘Z'),
+          action: function() { if (editable()) context.undo(); },
+          annotation: function() { return context.history().undoAnnotation(); }
+      }, {
+          id: 'redo',
+          cmd: uiCmd('⌘⇧Z'),
+          action: function() { if (editable()) context.redo(); },
+          annotation: function() { return context.history().redoAnnotation(); }
+      }];
 
-      function icon(turn) {
-          var u = turn.u ? '-u' : '';
-          if (turn.no) return '#iD-turn-no' + u;
-          if (turn.only) return '#iD-turn-only' + u;
-          return '#iD-turn-yes' + u;
+
+      function editable() {
+          var mode = context.mode();
+          return context.editable() && mode && mode.id !== 'save';
       }
 
-      function drawTurns(selection, graph, turns) {
 
-          function turnTransform(d) {
-              var pxRadius = 50;
-              var toWay = graph.entity(d.to.way);
-              var toPoints = graph.childNodes(toWay)
-                  .map(function (n) { return n.loc; })
-                  .map(projection);
-              var toLength = geoPathLength(toPoints);
-              var mid = toLength / 2;    // midpoint of destination way
+      return function(selection) {
+          var tooltipBehavior = tooltip()
+              .placement('bottom')
+              .html(true)
+              .title(function (d) {
+                  return uiTooltipHtml(d.annotation() ?
+                      t(d.id + '.tooltip', {action: d.annotation()}) :
+                      t(d.id + '.nothing'), d.cmd);
+              });
 
-              var toNode = graph.entity(d.to.node);
-              var toVertex = graph.entity(d.to.vertex);
-              var a = geoAngle(toVertex, toNode, projection);
-              var o = projection(toVertex.loc);
-              var r = d.u ? 0                  // u-turn: no radius
-                  : !toWay.__via ? pxRadius    // leaf way: put marker at pxRadius
-                  : Math.min(mid, pxRadius);   // via way: prefer pxRadius, fallback to mid for very short ways
+          var buttons = selection.selectAll('button')
+              .data(commands)
+              .enter()
+              .append('button')
+              .attr('class', function(d) { return 'disabled ' + d.id + '-button'; })
+              .on('click', function(d) { return d.action(); })
+              .call(tooltipBehavior);
 
-              return 'translate(' + (r * Math.cos(a) + o[0]) + ',' + (r * Math.sin(a) + o[1]) + ') ' +
-                  'rotate(' + a * 180 / Math.PI + ')';
-          }
+          buttons.each(function(d) {
+              var iconName = d.id;
+              if (textDirection === 'rtl') {
+                  if (iconName === 'undo') {
+                      iconName = 'redo';
+                  } else if (iconName === 'redo') {
+                      iconName = 'undo';
+                  }
+              }
+              select(this)
+                  .call(svgIcon('#iD-icon-' + iconName));
+          });
 
+          context.keybinding()
+              .on(commands[0].cmd, function() { event.preventDefault(); commands[0].action(); })
+              .on(commands[1].cmd, function() { event.preventDefault(); commands[1].action(); });
 
-          var drawLayer = selection.selectAll('.layer-osm.points .points-group.turns');
-          var touchLayer = selection.selectAll('.layer-touch.turns');
 
-          // Draw turns..
-          var groups = drawLayer.selectAll('g.turn')
-              .data(turns, function(d) { return d.key; });
+          var debouncedUpdate = debounce(update, 500, { leading: true, trailing: true });
+
+          context.map()
+              .on('move.undo_redo', debouncedUpdate)
+              .on('drawn.undo_redo', debouncedUpdate);
+
+          context.history()
+              .on('change.undo_redo', update);
 
-          // exit
-          groups.exit()
-              .remove();
+          context
+              .on('enter.undo_redo', update);
 
-          // enter
-          var groupsEnter = groups.enter()
-              .append('g')
-              .attr('class', function(d) { return 'turn ' + d.key; });
 
-          var turnsEnter = groupsEnter
-              .filter(function(d) { return !d.u; });
+          function update() {
+              buttons
+                  .property('disabled', !editable())
+                  .classed('disabled', function(d) { return !d.annotation(); })
+                  .each(function() {
+                      var selection = select(this);
+                      if (selection.property('tooltipVisible')) {
+                          selection.call(tooltipBehavior.show);
+                      }
+                  });
+          }
+      };
+  }
 
-          turnsEnter.append('rect')
-              .attr('transform', 'translate(-22, -12)')
-              .attr('width', '44')
-              .attr('height', '24');
+  // these are module variables so they are preserved through a ui.restart()
+  var sawVersion = null;
+  var isNewVersion = false;
+  var isNewUser = false;
 
-          turnsEnter.append('use')
-              .attr('transform', 'translate(-22, -12)')
-              .attr('width', '44')
-              .attr('height', '24');
 
-          var uEnter = groupsEnter
-              .filter(function(d) { return d.u; });
+  function uiVersion(context) {
 
-          uEnter.append('circle')
-              .attr('r', '16');
+      var currVersion = context.version;
+      var matchedVersion = currVersion.match(/\d+\.\d+\.\d+.*/);
 
-          uEnter.append('use')
-              .attr('transform', 'translate(-16, -16)')
-              .attr('width', '32')
-              .attr('height', '32');
+      if (sawVersion === null && matchedVersion !== null) {
+          isNewVersion = (context.storage('sawVersion') !== currVersion);
+          isNewUser = !context.storage('sawSplash');
+          context.storage('sawVersion', currVersion);
+          sawVersion = currVersion;
+      }
 
-          // update
-          groups = groups
-              .merge(groupsEnter)
-              .attr('opacity', function(d) { return d.direct === false ? '0.7' : null; })
-              .attr('transform', turnTransform);
+      return function(selection) {
+          selection
+              .append('a')
+              .attr('target', '_blank')
+              .attr('tabindex', -1)
+              .attr('href', 'https://github.com/openstreetmap/iD')
+              .text(currVersion);
 
-          groups.select('use')
-              .attr('xlink:href', icon);
+          // only show new version indicator to users that have used iD before
+          if (isNewVersion && !isNewUser) {
+              selection
+                  .append('div')
+                  .attr('class', 'badge')
+                  .append('a')
+                  .attr('target', '_blank')
+                  .attr('tabindex', -1)
+                  .attr('href', 'https://github.com/openstreetmap/iD/blob/master/CHANGELOG.md#whats-new')
+                  .call(svgIcon('#maki-gift-11'))
+                  .call(tooltip()
+                      .title(t('version.whats_new', { version: currVersion }))
+                      .placement('top')
+                  );
+          }
+      };
+  }
 
-          groups.select('rect');      // propagate bound data
-          groups.select('circle');    // propagate bound data
+  function uiZoom(context) {
+      var zooms = [{
+          id: 'zoom-in',
+          icon: 'plus',
+          title: t('zoom.in'),
+          action: context.zoomIn,
+          key: '+'
+      }, {
+          id: 'zoom-out',
+          icon: 'minus',
+          title: t('zoom.out'),
+          action: context.zoomOut,
+          key: '-'
+      }];
 
 
-          // Draw touch targets..
-          var fillClass = context.getDebug('target') ? 'pink ' : 'nocolor ';
-          groups = touchLayer.selectAll('g.turn')
-              .data(turns, function(d) { return d.key; });
+      function zoomIn() {
+          event.preventDefault();
+          context.zoomIn();
+      }
 
-          // exit
-          groups.exit()
-              .remove();
 
-          // enter
-          groupsEnter = groups.enter()
-              .append('g')
-              .attr('class', function(d) { return 'turn ' + d.key; });
+      function zoomOut() {
+          event.preventDefault();
+          context.zoomOut();
+      }
 
-          turnsEnter = groupsEnter
-              .filter(function(d) { return !d.u; });
 
-          turnsEnter.append('rect')
-              .attr('class', 'target ' + fillClass)
-              .attr('transform', 'translate(-22, -12)')
-              .attr('width', '44')
-              .attr('height', '24');
+      function zoomInFurther() {
+          event.preventDefault();
+          context.zoomInFurther();
+      }
 
-          uEnter = groupsEnter
-              .filter(function(d) { return d.u; });
 
-          uEnter.append('circle')
-              .attr('class', 'target ' + fillClass)
-              .attr('r', '16');
+      function zoomOutFurther() {
+          event.preventDefault();
+          context.zoomOutFurther();
+      }
 
-          // update
-          groups = groups
-              .merge(groupsEnter)
-              .attr('transform', turnTransform);
 
-          groups.select('rect');      // propagate bound data
-          groups.select('circle');    // propagate bound data
+      return function(selection) {
+          var button = selection.selectAll('button')
+              .data(zooms)
+              .enter()
+              .append('button')
+              .attr('tabindex', -1)
+              .attr('class', function(d) { return d.id; })
+              .on('click.editor', function(d) { d.action(); })
+              .call(tooltip()
+                  .placement((textDirection === 'rtl') ? 'right' : 'left')
+                  .html(true)
+                  .title(function(d) {
+                      return uiTooltipHtml(d.title, d.key);
+                  })
+              );
 
+          button.each(function(d) {
+              select(this)
+                  .call(svgIcon('#iD-icon-' + d.icon, 'light'));
+          });
 
-          return this;
-      }
+          ['plus', 'ffplus', '=', 'ffequals'].forEach(function(key) {
+              context.keybinding().on([key], zoomIn);
+              context.keybinding().on([uiCmd('⌘' + key)], zoomInFurther);
+          });
 
-      return drawTurns;
+          ['_', '-', 'ffminus', 'dash'].forEach(function(key) {
+              context.keybinding().on([key], zoomOut);
+              context.keybinding().on([uiCmd('⌘' + key)], zoomOutFurther);
+          });
+      };
   }
 
-  function svgVertices$$1(projection, context) {
-      var radiuses = {
-          //       z16-, z17,   z18+,  w/icon
-          shadow: [6,    7.5,   7.5,   12],
-          stroke: [2.5,  3.5,   3.5,   8],
-          fill:   [1,    1.5,   1.5,   1.5]
-      };
+  function uiInit(context) {
+      var _initCounter = 0;
+      var _initCallback;
+      var _needWidth = {};
 
-      var _currHoverTarget;
-      var _currPersistent = {};
-      var _currHover = {};
-      var _prevHover = {};
-      var _currSelected = {};
-      var _prevSelected = {};
-      var _radii = {};
 
+      function render(container) {
+          container
+              .attr('dir', textDirection);
 
-      function sortY(a, b) {
-          return b.loc[1] - a.loc[1];
-      }
+          var map = context.map();
 
-      // Avoid exit/enter if we're just moving stuff around.
-      // The node will get a new version but we only need to run the update selection.
-      function fastEntityKey(d) {
-          var mode = context.mode();
-          var isMoving = mode && /^(add|draw|drag|move|rotate)/.test(mode.id);
-          return isMoving ? d.id : osmEntity$$1.key(d);
-      }
+          container
+              .append('svg')
+              .attr('id', 'defs')
+              .call(svgDefs(context));
 
+          container
+              .append('div')
+              .attr('id', 'sidebar')
+              .call(ui.sidebar);
 
-      function draw(selection$$1, graph, vertices, sets, filter) {
-          sets = sets || { selected: {}, important: {}, hovered: {} };
+          var content = container
+              .append('div')
+              .attr('id', 'content')
+              .attr('class', 'active');
 
-          var icons = {};
-          var directions = {};
-          var wireframe = context.surface().classed('fill-wireframe');
-          var zoom = geoScaleToZoom(projection.scale());
-          var z = (zoom < 17 ? 0 : zoom < 18 ? 1 : 2);
-          var activeID = context.activeID();
+          // Top toolbar
+          var bar = content
+              .append('div')
+              .attr('id', 'bar')
+              .attr('class', 'fillD');
 
+          content
+              .append('div')
+              .attr('id', 'map')
+              .attr('dir', 'ltr')
+              .call(map);
 
-          function getIcon(d) {
-              // always check latest entity, as fastEntityKey avoids enter/exit now
-              var entity = graph.entity(d.id);
-              if (entity.id in icons) return icons[entity.id];
+          // Leading area button group (Sidebar toggle)
+          var leadingArea = bar
+              .append('div')
+              .attr('class', 'tool-group leading-area');
 
-              icons[entity.id] =
-                  entity.hasInterestingTags() &&
-                  context.presets().match(entity, graph).icon;
+          var sidebarButton = leadingArea
+              .append('div')
+              .append('button')
+              .attr('class', 'sidebar-toggle')
+              .attr('tabindex', -1)
+              .on('click', ui.sidebar.toggle)
+              .call(tooltip()
+                  .placement('bottom')
+                  .html(true)
+                  .title(uiTooltipHtml(t('sidebar.tooltip'), t('sidebar.key')))
+              );
 
-              return icons[entity.id];
-          }
+          var iconSuffix = textDirection === 'rtl' ? 'right' : 'left';
+          sidebarButton
+              .call(svgIcon('#iD-icon-sidebar-' + iconSuffix));
 
+          leadingArea
+              .append('div')
+              .attr('class', 'full-screen bar-group')
+              .call(uiFullScreen(context));
 
-          // memoize directions results, return false for empty arrays (for use in filter)
-          function getDirections(entity) {
-              if (entity.id in directions) return directions[entity.id];
 
-              var angles = entity.directions(graph, projection);
-              directions[entity.id] = angles.length ? angles : false;
-              return angles;
-          }
+          // Center area button group (Point/Line/Area/Note mode buttons)
+          bar
+              .append('div')
+              .attr('class', 'tool-group center-area')
+              .append('div')
+              .attr('class', 'modes joined')
+              .call(uiModes(context), bar);
 
 
-          function updateAttributes(selection$$1) {
-              ['shadow', 'stroke', 'fill'].forEach(function(klass) {
-                  var rads = radiuses[klass];
-                  selection$$1.selectAll('.' + klass)
-                      .each(function(entity) {
-                          var i = z && getIcon(entity);
-                          var r = rads[i ? 3 : z];
+          // Trailing area button group (Undo/Redo save buttons)
+          var trailingArea = bar
+              .append('div')
+              .attr('class', 'tool-group trailing-area');
 
-                          // slightly increase the size of unconnected endpoints #3775
-                          if (entity.id !== activeID && entity.isEndpoint(graph) && !entity.isConnected(graph)) {
-                              r += 1.5;
-                          }
+          trailingArea
+              .append('div')
+              .attr('class', 'joined')
+              .call(uiUndoRedo(context));
 
-                          if (klass === 'shadow') {   // remember this value, so we don't need to
-                              _radii[entity.id] = r;  // recompute it when we draw the touch targets
-                          }
+          trailingArea
+              .append('div')
+              .attr('class', 'save-wrap')
+              .call(uiSave(context));
 
-                          select(this)
-                              .attr('r', r)
-                              .attr('visibility', (i && klass === 'fill') ? 'hidden' : null);
-                      });
-              });
-          }
 
-          vertices.sort(sortY);
+          // For now, just put spinner at the end of the #bar
+          bar
+              .append('div')
+              .attr('class', 'spinner')
+              .call(uiSpinner(context));
 
-          var groups = selection$$1.selectAll('g.vertex')
-              .filter(filter)
-              .data(vertices, fastEntityKey);
 
-          // exit
-          groups.exit()
-              .remove();
+          // Map controls (appended to #bar, but absolutely positioned)
+          var controls = content
+              .append('div')
+              .attr('class', 'map-controls');
 
-          // enter
-          var enter = groups.enter()
-              .append('g')
-              .attr('class', function(d) { return 'node vertex ' + d.id; })
-              .order();
+          controls
+              .append('div')
+              .attr('class', 'map-control zoombuttons')
+              .call(uiZoom(context));
 
-          enter
-              .append('circle')
-              .attr('class', 'shadow');
+          controls
+              .append('div')
+              .attr('class', 'map-control geolocate-control')
+              .call(uiGeolocate(context));
 
-          enter
-              .append('circle')
-              .attr('class', 'stroke');
+          var background = uiBackground(context);
+          controls
+              .append('div')
+              .attr('class', 'map-control background-control')
+              .call(background.renderToggleButton);
+          content.call(background.renderPane);
 
-          // Vertices with tags get a fill.
-          enter.filter(function(d) { return d.hasInterestingTags(); })
-              .append('circle')
-              .attr('class', 'fill');
+          var mapData = uiMapData(context);
+          controls
+              .append('div')
+              .attr('class', 'map-control map-data-control')
+              .call(mapData.renderToggleButton);
+          content.call(mapData.renderPane);
 
-          // update
-          groups = groups
-              .merge(enter)
-              .attr('transform', svgPointTransform(projection))
-              .classed('sibling', function(d) { return d.id in sets.selected; })
-              .classed('shared', function(d) { return graph.isShared(d); })
-              .classed('endpoint', function(d) { return d.isEndpoint(graph); })
-              .call(updateAttributes);
+          var issues = uiIssues(context);
+          controls
+              .append('div')
+              .attr('class', 'map-control map-issues-control')
+              .call(issues.renderToggleButton);
+          content.call(issues.renderPane);
 
+          var help = uiHelp(context);
+          controls
+              .append('div')
+              .attr('class', 'map-control help-control')
+              .call(help.renderToggleButton);
+          content.call(help.renderPane);
 
-          // Vertices with icons get a `use`.
-          var iconUse = groups
-              .selectAll('.icon')
-              .data(function data(d) { return zoom >= 17 && getIcon(d) ? [d] : []; }, fastEntityKey);
 
-          // exit
-          iconUse.exit()
-              .remove();
+          // Add attribution and footer
+          var about = content
+              .append('div')
+              .attr('id', 'about');
 
-          // enter
-          iconUse.enter()
-              .append('use')
-              .attr('class', 'icon')
-              .attr('width', '11px')
-              .attr('height', '11px')
-              .attr('transform', 'translate(-5.5, -5.5)')
-              .attr('xlink:href', function(d) {
-                  var picon = getIcon(d);
-                  var isMaki = /^maki-/.test(picon);
-                  return '#' + picon + (isMaki ? '-11' : '');
-              });
+          about
+              .append('div')
+              .attr('id', 'attrib')
+              .attr('dir', 'ltr')
+              .call(uiAttribution(context));
 
+          about
+              .append('div')
+              .attr('class', 'api-status')
+              .call(uiStatus(context));
 
-          // Vertices with directions get viewfields
-          var dgroups = groups
-              .selectAll('.viewfieldgroup')
-              .data(function data(d) { return zoom >= 18 && getDirections(d) ? [d] : []; }, fastEntityKey);
 
-          // exit
-          dgroups.exit()
-              .remove();
+          var footer = about
+              .append('div')
+              .attr('id', 'footer')
+              .attr('class', 'fillD');
 
-          // enter/update
-          dgroups = dgroups.enter()
-              .insert('g', '.shadow')
-              .attr('class', 'viewfieldgroup')
-              .merge(dgroups);
+          footer
+              .append('div')
+              .attr('id', 'flash-wrap')
+              .attr('class', 'footer-hide');
 
-          var viewfields = dgroups.selectAll('.viewfield')
-              .data(getDirections, function key(d) { return osmEntity$$1.key(d); });
+          var footerWrap = footer
+              .append('div')
+              .attr('id', 'footer-wrap')
+              .attr('class', 'footer-show');
 
-          // exit
-          viewfields.exit()
-              .remove();
+          footerWrap
+              .append('div')
+              .attr('id', 'scale-block')
+              .call(uiScale(context));
 
-          // enter/update
-          viewfields.enter()
-              .append('path')
-              .attr('class', 'viewfield')
-              .attr('d', 'M0,0H0')
-              .merge(viewfields)
-              .attr('marker-start', 'url(#viewfield-marker' + (wireframe ? '-wireframe' : '') + ')')
-              .attr('transform', function(d) { return 'rotate(' + d + ')'; });
-      }
+          var aboutList = footerWrap
+              .append('div')
+              .attr('id', 'info-block')
+              .append('ul')
+              .attr('id', 'about-list');
 
+          if (!context.embed()) {
+              aboutList
+                  .call(uiAccount(context));
+          }
 
-      function drawTargets(selection$$1, graph, entities, filter) {
-          var targetClass = context.getDebug('target') ? 'pink ' : 'nocolor ';
-          var nopeClass = context.getDebug('target') ? 'red ' : 'nocolor ';
-          var getTransform = svgPointTransform(projection).geojson;
-          var activeID = context.activeID();
-          var data = { targets: [], nopes: [] };
+          aboutList
+              .append('li')
+              .attr('class', 'version')
+              .call(uiVersion(context));
 
-          entities.forEach(function(node) {
-              if (activeID === node.id) return;   // draw no target on the activeID
+          var issueLinks = aboutList
+              .append('li');
 
-              var vertexType = svgPassiveVertex(node, graph, activeID);
-              if (vertexType !== 0) {     // passive or adjacent - allow to connect
-                  data.targets.push({
-                      type: 'Feature',
-                      id: node.id,
-                      properties: {
-                          target: true,
-                          entity: node
-                      },
-                      geometry: node.asGeoJSON()
-                  });
-              } else {
-                  data.nopes.push({
-                      type: 'Feature',
-                      id: node.id + '-nope',
-                      properties: {
-                          nope: true,
-                          target: true,
-                          entity: node
-                      },
-                      geometry: node.asGeoJSON()
-                  });
-              }
-          });
+          issueLinks
+              .append('a')
+              .attr('target', '_blank')
+              .attr('tabindex', -1)
+              .attr('href', 'https://github.com/openstreetmap/iD/issues')
+              .call(svgIcon('#iD-icon-bug', 'light'))
+              .call(tooltip().title(t('report_a_bug')).placement('top'));
+
+          issueLinks
+              .append('a')
+              .attr('target', '_blank')
+              .attr('tabindex', -1)
+              .attr('href', 'https://github.com/openstreetmap/iD/blob/master/CONTRIBUTING.md#translating')
+              .call(svgIcon('#iD-icon-translate', 'light'))
+              .call(tooltip().title(t('help_translate')).placement('top'));
 
+          aboutList
+              .append('li')
+              .attr('class', 'feature-warning')
+              .attr('tabindex', -1)
+              .call(uiFeatureInfo(context));
 
-          // Targets allow hover and vertex snapping
-          var targets = selection$$1.selectAll('.vertex.target-allowed')
-              .filter(function(d) { return filter(d.properties.entity); })
-              .data(data.targets, function key(d) { return d.id; });
+          aboutList
+              .append('li')
+              .attr('class', 'user-list')
+              .attr('tabindex', -1)
+              .call(uiContributors(context));
+
+
+          // Setup map dimensions and move map to initial center/zoom.
+          // This should happen after #content and toolbars exist.
+          ui.onResize();
 
-          // exit
-          targets.exit()
-              .remove();
+          var hash = behaviorHash(context);
+          hash();
+          if (!hash.hadHash) {
+              map.centerZoom([0, 0], 2);
+          }
 
-          // enter/update
-          targets.enter()
-              .append('circle')
-              .attr('r', function(d) { return (_radii[d.id] || radiuses.shadow[3]); })
-              .merge(targets)
-              .attr('class', function(d) { return 'node vertex target target-allowed ' + targetClass + d.id; })
-              .attr('transform', getTransform);
 
+          // Add absolutely-positioned elements that sit on top of the map
+          // This should happen after the map is ready (center/zoom)
+          content
+              .call(uiMapInMap(context))
+              .call(uiInfo(context))
+              .call(uiNotice(context));
 
-          // NOPE
-          var nopes = selection$$1.selectAll('.vertex.target-nope')
-              .filter(function(d) { return filter(d.properties.entity); })
-              .data(data.nopes, function key(d) { return d.id; });
+          content
+              .append('div')
+              .attr('id', 'photoviewer')
+              .classed('al', true)       // 'al'=left,  'ar'=right
+              .classed('hide', true)
+              .call(ui.photoviewer);
 
-          // exit
-          nopes.exit()
-              .remove();
 
-          // enter/update
-          nopes.enter()
-              .append('circle')
-              .attr('r', function(d) { return (_radii[d.properties.entity.id] || radiuses.shadow[3]); })
-              .merge(nopes)
-              .attr('class', function(d) { return 'node vertex target target-nope ' + nopeClass + d.id; })
-              .attr('transform', getTransform);
-      }
+          // Bind events
+          window.onbeforeunload = function() {
+              return context.save();
+          };
+          window.onunload = function() {
+              context.history().unlock();
+          };
 
+          select(window)
+              .on('gesturestart.editor', eventCancel)
+              .on('gesturechange.editor', eventCancel)
+              .on('gestureend.editor', eventCancel)
+              .on('resize.editor', ui.onResize);
 
-      // Points can also render as vertices:
-      // 1. in wireframe mode or
-      // 2. at higher zooms if they have a direction
-      function renderAsVertex(entity, graph, wireframe, zoom) {
-          var geometry = entity.geometry(graph);
-          return geometry === 'vertex' || (geometry === 'point' && (
-              wireframe || (zoom >= 18 && entity.directions(graph, projection).length)
-          ));
-      }
 
+          var panPixels = 80;
+          context.keybinding()
+              .on('⌫', function() { event.preventDefault(); })
+              .on([t('sidebar.key'), '`', '²'], ui.sidebar.toggle)   // #5663 - common QWERTY, AZERTY
+              .on('←', pan([panPixels, 0]))
+              .on('↑', pan([0, panPixels]))
+              .on('→', pan([-panPixels, 0]))
+              .on('↓', pan([0, -panPixels]))
+              .on(['⇧←', uiCmd('⌘←')], pan([map.dimensions()[0], 0]))
+              .on(['⇧↑', uiCmd('⌘↑')], pan([0, map.dimensions()[1]]))
+              .on(['⇧→', uiCmd('⌘→')], pan([-map.dimensions()[0], 0]))
+              .on(['⇧↓', uiCmd('⌘↓')], pan([0, -map.dimensions()[1]]));
 
-      function getSiblingAndChildVertices(ids, graph, wireframe, zoom) {
-          var results = {};
+          context.enter(modeBrowse(context));
 
-          function addChildVertices(entity) {
-              var geometry = entity.geometry(graph);
-              if (!context.features().isHiddenFeature(entity, graph, geometry)) {
-                  var i;
-                  if (entity.type === 'way') {
-                      for (i = 0; i < entity.nodes.length; i++) {
-                          var child = graph.hasEntity(entity.nodes[i]);
-                          if (child) {
-                              addChildVertices(child);
-                          }
-                      }
-                  } else if (entity.type === 'relation') {
-                      for (i = 0; i < entity.members.length; i++) {
-                          var member = graph.hasEntity(entity.members[i].id);
-                          if (member) {
-                              addChildVertices(member);
-                          }
-                      }
-                  } else if (renderAsVertex(entity, graph, wireframe, zoom)) {
-                      results[entity.id] = entity;
-                  }
+          if (!_initCounter++) {
+              if (!hash.startWalkthrough) {
+                  context.container()
+                      .call(uiSplash(context))
+                      .call(uiRestore(context));
               }
-          }
 
-          ids.forEach(function(id) {
-              var entity = graph.hasEntity(id);
-              if (!entity) return;
+              context.container()
+                  .call(uiShortcuts(context));
+          }
 
-              if (entity.type === 'node') {
-                  if (renderAsVertex(entity, graph, wireframe, zoom)) {
-                      results[entity.id] = entity;
-                      graph.parentWays(entity).forEach(function(entity) {
-                          addChildVertices(entity);
-                      });
-                  }
-              } else {  // way, relation
-                  addChildVertices(entity);
-              }
-          });
+          var osm = context.connection();
+          var auth = uiLoading(context).message(t('loading_auth')).blocking(true);
 
-          return results;
-      }
+          if (osm && auth) {
+              osm
+                  .on('authLoading.ui', function() {
+                      context.container()
+                          .call(auth);
+                  })
+                  .on('authDone.ui', function() {
+                      auth.close();
+                  });
+          }
 
+          _initCounter++;
 
-      function drawVertices(selection$$1, graph, entities, filter, extent, fullRedraw) {
-          var wireframe = context.surface().classed('fill-wireframe');
-          var zoom = geoScaleToZoom(projection.scale());
-          var mode = context.mode();
-          var isMoving = mode && /^(add|draw|drag|move|rotate)/.test(mode.id);
+          if (hash.startWalkthrough) {
+              hash.startWalkthrough = false;
+              context.container().call(uiIntro(context));
+          }
 
-          var drawLayer = selection$$1.selectAll('.layer-osm.points .points-group.vertices');
-          var touchLayer = selection$$1.selectAll('.layer-touch.points');
 
-          if (fullRedraw) {
-              _currPersistent = {};
-              _radii = {};
+          function pan(d) {
+              return function() {
+                  if (select('.combobox').size()) return;
+                  event.preventDefault();
+                  context.pan(d, 100);
+              };
           }
 
-          // Collect important vertices from the `entities` list..
-          // (during a paritial redraw, it will not contain everything)
-          for (var i = 0; i < entities.length; i++) {
-              var entity = entities[i];
-              var geometry = entity.geometry(graph);
-              var keep = false;
+          function eventCancel() {
+              event.preventDefault();
+          }
+      }
 
-              // a point that looks like a vertex..
-              if ((geometry === 'point') && renderAsVertex(entity, graph, wireframe, zoom)) {
-                  _currPersistent[entity.id] = entity;
-                  keep = true;
 
-              // a vertex of some importance..
-              } else if (geometry === 'vertex' &&
-                  (entity.hasInterestingTags() || entity.isEndpoint(graph) || entity.isConnected(graph))) {
-                  _currPersistent[entity.id] = entity;
-                  keep = true;
+      function ui(node, callback) {
+          _initCallback = callback;
+          var container = select(node);
+          context.container(container);
+          context.loadLocale(function(err) {
+              if (!err) {
+                  render(container);
+              }
+              if (callback) {
+                  callback(err);
               }
+          });
+      }
 
-              // whatever this is, it's not a persistent vertex..
-              if (!keep && !fullRedraw) {
-                  delete _currPersistent[entity.id];
+
+      ui.restart = function(arg) {
+          context.keybinding().clear();
+          context.locale(arg);
+          context.loadLocale(function(err) {
+              if (!err) {
+                  context.container().selectAll('*').remove();
+                  render(context.container());
+                  if (_initCallback) _initCallback();
               }
-          }
+          });
+      };
 
-          // 3 sets of vertices to consider:
-          var sets = {
-              persistent: _currPersistent,  // persistent = important vertices (render always)
-              selected: _currSelected,      // selected + siblings of selected (render always)
-              hovered: _currHover           // hovered + siblings of hovered (render only in draw modes)
-          };
 
-          var all = assign({}, (isMoving ? _currHover : {}), _currSelected, _currPersistent);
+      ui.sidebar = uiSidebar(context);
 
-          // Draw the vertices..
-          // The filter function controls the scope of what objects d3 will touch (exit/enter/update)
-          // Adjust the filter function to expand the scope beyond whatever entities were passed in.
-          var filterRendered = function(d) {
-              return d.id in _currPersistent || d.id in _currSelected || d.id in _currHover || filter(d);
-          };
-          drawLayer
-              .call(draw, graph, currentVisible(all), sets, filterRendered);
+      ui.photoviewer = uiPhotoviewer(context);
 
-          // Draw touch targets..
-          // When drawing, render all targets (not just those affected by a partial redraw)
-          var filterTouch = function(d) {
-              return isMoving ? true : filterRendered(d);
-          };
-          touchLayer
-              .call(drawTargets, graph, currentVisible(all), filterTouch);
+      ui.onResize = function(withPan) {
+          var map = context.map();
 
+          // Recalc dimensions of map and sidebar.. (`true` = force recalc)
+          // This will call `getBoundingClientRect` and trigger reflow,
+          //  but the values will be cached for later use.
+          var mapDimensions = utilGetDimensions(select('#content'), true);
+          utilGetDimensions(select('#sidebar'), true);
 
-          function currentVisible(which) {
-              return Object.keys(which)
-                  .map(graph.hasEntity, graph)     // the current version of this entity
-                  .filter(function (entity) { return entity && entity.intersects(extent, graph); });
+          if (withPan !== undefined) {
+              map.redrawEnable(false);
+              map.pan(withPan);
+              map.redrawEnable(true);
           }
-      }
+          map.dimensions(mapDimensions);
 
+          ui.photoviewer.onMapResize();
 
-      // partial redraw - only update the selected items..
-      drawVertices.drawSelected = function(selection$$1, graph, extent) {
-          var wireframe = context.surface().classed('fill-wireframe');
-          var zoom = geoScaleToZoom(projection.scale());
+          // check if header or footer have overflowed
+          ui.checkOverflow('#bar');
+          ui.checkOverflow('#footer');
 
-          _prevSelected = _currSelected || {};
-          _currSelected = getSiblingAndChildVertices(context.selectedIDs(), graph, wireframe, zoom);
+          // Use outdated code so it works on Explorer
+          var resizeWindowEvent = document.createEvent('Event');
 
-          // note that drawVertices will add `_currSelected` automatically if needed..
-          var filter = function(d) { return d.id in _prevSelected; };
-          drawVertices(selection$$1, graph, values$1(_prevSelected), filter, extent, false);
+          resizeWindowEvent.initEvent('resizeWindow', true, true);
+
+          document.dispatchEvent(resizeWindowEvent);
       };
 
 
-      // partial redraw - only update the hovered items..
-      drawVertices.drawHover = function(selection$$1, graph, target, extent) {
-          if (target === _currHoverTarget) return;  // continue only if something changed
+      // Call checkOverflow when resizing or whenever the contents change.
+      ui.checkOverflow = function(selector, reset) {
+          if (reset) {
+              delete _needWidth[selector];
+          }
 
-          var wireframe = context.surface().classed('fill-wireframe');
-          var zoom = geoScaleToZoom(projection.scale());
+          var element = select(selector);
+          var scrollWidth = element.property('scrollWidth');
+          var clientWidth = element.property('clientWidth');
+          var needed = _needWidth[selector] || scrollWidth;
 
-          _prevHover = _currHover || {};
-          _currHoverTarget = target;
-          var entity = target && target.properties && target.properties.entity;
+          if (scrollWidth > clientWidth) {    // overflow happening
+              element.classed('narrow', true);
+              if (!_needWidth[selector]) {
+                  _needWidth[selector] = scrollWidth;
+              }
 
-          if (entity) {
-              _currHover = getSiblingAndChildVertices([entity.id], graph, wireframe, zoom);
-          } else {
-              _currHover = {};
+          } else if (scrollWidth >= needed) {
+              element.classed('narrow', false);
           }
-
-          // note that drawVertices will add `_currHover` automatically if needed..
-          var filter = function(d) { return d.id in _prevHover; };
-          drawVertices(selection$$1, graph, values$1(_prevHover), filter, extent, false);
       };
 
-      return drawVertices;
-  }
-
-  /* global Mapillary:false */
-
 
-  var apibase = 'https://a.mapillary.com/v3/';
-  var viewercss = 'mapillary-js/mapillary.min.css';
-  var viewerjs = 'mapillary-js/mapillary.min.js';
-  var clientId = 'NzNRM2otQkR2SHJzaXJmNmdQWVQ0dzo1ZWYyMmYwNjdmNDdlNmVi';
-  var maxResults = 1000;
-  var tileZoom = 14;
-  var tiler$1 = utilTiler().zoomExtent([tileZoom, tileZoom]).skipNullIsland(true);
-  var dispatch$2 = dispatch('loadedImages', 'loadedSigns', 'bearingChanged');
-  var _mlyFallback = false;
-  var _mlyCache;
-  var _mlyClicks;
-  var _mlySelectedImage;
-  var _mlyViewer;
+      return ui;
+  }
 
+  function uiChangesetEditor(context) {
+      var dispatch$1 = dispatch('change');
+      var formFields = uiFormFields(context);
+      var commentCombo = uiCombobox(context, 'comment').caseSensitive(true);
+      var _fieldsArr;
+      var _tags;
+      var _changesetID;
 
-  function abortRequest$1(i) {
-      i.abort();
-  }
 
+      function changesetEditor(selection) {
+          render(selection);
+      }
 
-  function maxPageAtZoom(z) {
-      if (z < 15)   return 2;
-      if (z === 15) return 5;
-      if (z === 16) return 10;
-      if (z === 17) return 20;
-      if (z === 18) return 40;
-      if (z > 18)   return 80;
-  }
 
+      function render(selection) {
+          var initial = false;
 
-  function loadTiles(which, url, projection) {
-      var currZoom = Math.floor(geoScaleToZoom(projection.scale()));
-      var tiles = tiler$1.getTiles(projection);
+          if (!_fieldsArr) {
+              initial = true;
+              var presets = context.presets();
 
-      // abort inflight requests that are no longer needed
-      var cache = _mlyCache[which];
-      forEach(cache.inflight, function(v, k) {
-          var wanted = find$1(tiles, function(tile) { return k.indexOf(tile.id + ',') === 0; });
+              _fieldsArr = [
+                  uiField(context, presets.field('comment'), null, { show: true, revert: false }),
+                  uiField(context, presets.field('source'), null, { show: false, revert: false }),
+                  uiField(context, presets.field('hashtags'), null, { show: false, revert: false }),
+              ];
 
-          if (!wanted) {
-              abortRequest$1(v);
-              delete cache.inflight[k];
+              _fieldsArr.forEach(function(field) {
+                  field
+                      .on('change', function(t, onInput) {
+                          dispatch$1.call('change', field, t, onInput);
+                      });
+              });
           }
-      });
 
-      tiles.forEach(function(tile) {
-          loadNextTilePage(which, currZoom, url, tile);
-      });
-  }
+          _fieldsArr.forEach(function(field) {
+              field
+                  .tags(_tags);
+          });
 
 
-  function loadNextTilePage(which, currZoom, url, tile) {
-      var cache = _mlyCache[which];
-      var rect = tile.extent.rectangle();
-      var maxPages = maxPageAtZoom(currZoom);
-      var nextPage = cache.nextPage[tile.id] || 0;
-      var 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(','),
-          });
+          selection
+              .call(formFields.fieldsArr(_fieldsArr));
 
-      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;
-                  }
-              }
-              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;
+          if (initial) {
+              var commentField = selection.select('#preset-input-comment');
+              var commentNode = commentField.node();
 
-              var features = data.features.map(function(feature) {
-                  var loc = feature.geometry.coordinates;
-                  var d;
+              if (commentNode) {
+                  commentNode.focus();
+                  commentNode.select();
+              }
 
-                  // An image (shown as a green dot on the map) is a single street photo with extra
-                  // information such as location, camera angle (CA), camera model, and so on.
-                  // Each image feature is a GeoJSON Point
-                  if (which === 'images') {
-                      d = {
-                          loc: loc,
-                          key: feature.properties.key,
-                          ca: feature.properties.ca,
-                          captured_at: feature.properties.captured_at,
-                          captured_by: feature.properties.username,
-                          pano: feature.properties.pano
-                      };
+              // trigger a 'blur' event so that comment field can be cleaned
+              // and checked for hashtags, even if retrieved from localstorage
+              utilTriggerEvent(commentField, 'blur');
 
-                      cache.forImageKey[d.key] = d;     // cache imageKey -> image
+              var osm = context.connection();
+              if (osm) {
+                  osm.userChangesets(function (err, changesets) {
+                      if (err) return;
 
-                  // Mapillary organizes images as sequences. A sequence of images are continuously captured
-                  // by a user at a give time. Sequences are shown on the map as green lines.
-                  // Each sequence feature is a GeoJSON LineString
-                  } else if (which === 'sequences') {
-                      var sequenceKey = feature.properties.key;
-                      cache.lineString[sequenceKey] = feature;           // cache sequenceKey -> lineString
-                      feature.properties.coordinateProperties.image_keys.forEach(function(imageKey) {
-                          cache.forImageKey[imageKey] = sequenceKey;     // cache imageKey -> sequenceKey
+                      var comments = changesets.map(function(changeset) {
+                          return {
+                              title: changeset.tags.comment,
+                              value: changeset.tags.comment
+                          };
                       });
-                      return false;    // because no `d` data worth loading into an rbush
-
-                  // An image detection is a semantic pixel area on an image. The area could indicate
-                  // sky, trees, sidewalk in the image. A detection can be a polygon, a bounding box, or a point.
-                  // Each image_detection feature is a GeoJSON Point (located where the image was taken)
-                  } else if (which === 'image_detections') {
-                      d = {
-                          key: feature.properties.key,
-                          image_key: feature.properties.image_key,
-                          value: feature.properties.value,
-                          package: feature.properties.package,
-                          shape: feature.properties.shape
-                      };
 
-                      // cache imageKey -> image_detections
-                      if (!cache.forImageKey[d.image_key]) {
-                          cache.forImageKey[d.image_key] = [];
-                      }
-                      cache.forImageKey[d.image_key].push(d);
-                      return false;    // because no `d` data worth loading into an rbush
+                      commentField
+                          .call(commentCombo
+                              .data(uniqBy(comments, 'title'))
+                          );
+                  });
+              }
+          }
 
+          // Add warning if comment mentions Google
+          var hasGoogle = _tags.comment.match(/google/i);
+          var commentWarning = selection.select('.form-field-comment').selectAll('.comment-warning')
+              .data(hasGoogle ? [0] : []);
 
-                  // A map feature is a real world object that can be shown on a map. It could be any object
-                  // recognized from images, manually added in images, or added on the map.
-                  // Each map feature is a GeoJSON Point (located where the feature is)
-                  } else if (which === 'map_features') {
-                      d = {
-                          loc: loc,
-                          key: feature.properties.key,
-                          value: feature.properties.value,
-                          package: feature.properties.package,
-                          detections: feature.properties.detections
-                      };
-                  }
+          commentWarning.exit()
+              .transition()
+              .duration(200)
+              .style('opacity', 0)
+              .remove();
 
-                  return {
-                      minX: loc[0], minY: loc[1], maxX: loc[0], maxY: loc[1], data: d
-                  };
+          var commentEnter = commentWarning.enter()
+              .insert('div', '.tag-reference-body')
+              .attr('class', 'field-warning comment-warning')
+              .style('opacity', 0);
 
-              }).filter(Boolean);
+          commentEnter
+              .append('a')
+              .attr('target', '_blank')
+              .attr('tabindex', -1)
+              .call(svgIcon('#iD-icon-alert', 'inline'))
+              .attr('href', t('commit.google_warning_link'))
+              .append('span')
+              .text(t('commit.google_warning'));
 
-              if (cache.rtree && features) {
-                  cache.rtree.load(features);
-              }
+          commentEnter
+              .transition()
+              .duration(200)
+              .style('opacity', 1);
+      }
 
-              if (which === 'images' || which === 'sequences') {
-                  dispatch$2.call('loadedImages');
-              } else if (which === 'map_features') {
-                  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
-              }
-          });
-  }
+      changesetEditor.tags = function(_) {
+          if (!arguments.length) return _tags;
+          _tags = _;
+          // Don't reset _fieldsArr here.
+          return changesetEditor;
+      };
 
-  // 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;
-      }, {});
-  }
 
+      changesetEditor.changesetID = function(_) {
+          if (!arguments.length) return _changesetID;
+          if (_changesetID === _) return changesetEditor;
+          _changesetID = _;
+          _fieldsArr = null;
+          return changesetEditor;
+      };
 
-  // partition viewport into higher zoom tiles
-  function partitionViewport(projection) {
-      var z = geoScaleToZoom(projection.scale());
-      var z2 = (Math.ceil(z * 2) / 2) + 2.5;   // round to next 0.5 and add 2.5
-      var tiler = utilTiler().zoomExtent([z2, z2]);
 
-      return tiler.getTiles(projection)
-          .map(function(tile) { return tile.extent; });
+      return utilRebind(changesetEditor, dispatch$1, 'on');
   }
 
+  // This code assumes that the combobox values will not have duplicate entries.
+  // It is keyed on the `value` of the entry. Data should be an array of objects like:
+  //   [{
+  //       value:  'display text',  // required
+  //       title:  'hover text'     // optional
+  //   }, ...]
 
-  // no more than `limit` results per partition.
-  function searchLimited(limit, projection, rtree) {
-      limit = limit || 5;
+  var _comboHideTimerID;
 
-      return partitionViewport(projection)
-          .reduce(function(result, extent) {
-              var found = rtree.search(extent.bbox())
-                  .slice(0, limit)
-                  .map(function(d) { return d.data; });
+  function uiCombobox(context, klass) {
+      var dispatch$1 = dispatch('accept', 'cancel');
+      var container = context.container();
 
-              return (found.length ? result.concat(found) : result);
-          }, []);
-  }
+      var _suggestions = [];
+      var _data = [];
+      var _fetched = {};
+      var _selected = null;
+      var _canAutocomplete = true;
+      var _caseSensitive = false;
+      var _cancelFetch = false;
+      var _minItems = 2;
+      var _tDown = 0;
 
+      var _fetcher = function(val, cb) {
+          cb(_data.filter(function(d) {
+              return d.value
+                  .toString()
+                  .toLowerCase()
+                  .indexOf(val.toLowerCase()) !== -1;
+          }));
+      };
 
+      var combobox = function(input, attachTo) {
+          if (!input || input.empty()) return;
 
-  var serviceMapillary = {
+          input
+              .classed('combobox-input', true)
+              .on('focus.combo-input', focus)
+              .on('blur.combo-input', blur)
+              .on('keydown.combo-input', keydown)
+              .on('keyup.combo-input', keyup)
+              .on('input.combo-input', change)
+              .on('mousedown.combo-input', mousedown)
+              .each(function() {
+                  var parent = this.parentNode;
+                  var sibling = this.nextSibling;
 
-      init: function() {
-          if (!_mlyCache) {
-              this.reset();
-          }
+                  select(parent).selectAll('.combobox-caret')
+                      .filter(function(d) { return d === input.node(); })
+                      .data([input.node()])
+                      .enter()
+                      .insert('div', function() { return sibling; })
+                      .attr('class', 'combobox-caret')
+                      .on('mousedown.combo-caret', function() {
+                          event.preventDefault(); // don't steal focus from input
+                          input.node().focus(); // focus the input as if it was clicked
+                          mousedown();
+                      })
+                      .on('mouseup.combo-caret', function() {
+                          event.preventDefault(); // don't steal focus from input
+                          mouseup();
+                      });
+              });
 
-          this.event = utilRebind(this, dispatch$2, 'on');
-      },
 
-      reset: function() {
-          var cache = _mlyCache;
+          function mousedown() {
+              if (event.button !== 0) return;    // left click only
+              _tDown = +new Date();
 
-          if (cache) {
-              if (cache.images && cache.images.inflight) {
-                  forEach(cache.images.inflight, abortRequest$1);
-              }
-              if (cache.image_detections && cache.image_detections.inflight) {
-                  forEach(cache.image_detections.inflight, abortRequest$1);
-              }
-              if (cache.map_features && cache.map_features.inflight) {
-                  forEach(cache.map_features.inflight, abortRequest$1);
-              }
-              if (cache.sequences && cache.sequences.inflight) {
-                  forEach(cache.sequences.inflight, abortRequest$1);
+              // clear selection
+              var start = input.property('selectionStart');
+              var end = input.property('selectionEnd');
+              if (start !== end) {
+                  var val = utilGetSetValue(input);
+                  input.node().setSelectionRange(val.length, val.length);
+                  return;
               }
+
+              input.on('mouseup.combo-input', mouseup);
           }
 
-          _mlyCache = {
-              images: { inflight: {}, loaded: {}, nextPage: {}, nextURL: {}, rtree: rbush_1(), forImageKey: {} },
-              image_detections: { inflight: {}, loaded: {}, nextPage: {}, nextURL: {}, forImageKey: {} },
-              map_features: { inflight: {}, loaded: {}, nextPage: {}, nextURL: {}, rtree: rbush_1() },
-              sequences: { inflight: {}, loaded: {}, nextPage: {}, nextURL: {}, rtree: rbush_1(), forImageKey: {}, lineString: {} }
-          };
 
-          _mlySelectedImage = null;
-          _mlyClicks = [];
-      },
+          function mouseup() {
+              input.on('mouseup.combo-input', null);
+              if (event.button !== 0) return;    // left click only
+              if (input.node() !== document.activeElement) return;   // exit if this input is not focused
 
+              var start = input.property('selectionStart');
+              var end = input.property('selectionEnd');
+              if (start !== end) return;  // exit if user is selecting
 
-      images: function(projection) {
-          var limit = 5;
-          return searchLimited(limit, projection, _mlyCache.images.rtree);
-      },
+              // not showing or showing for a different field - try to show it.
+              var combo = container.selectAll('.combobox');
+              if (combo.empty() || combo.datum() !== input.node()) {
+                  var tOrig = _tDown;
+                  window.setTimeout(function() {
+                      if (tOrig !== _tDown) return;   // exit if user double clicked
+                      fetch('', function() {
+                          show();
+                          render();
+                      });
+                  }, 250);
 
+              } else {
+                  hide();
+              }
+          }
 
-      signs: function(projection) {
-          var limit = 5;
-          return searchLimited(limit, projection, _mlyCache.map_features.rtree);
-      },
 
+          function focus() {
+              fetch('');   // prefetch values (may warm taginfo cache)
+          }
 
-      sequences: function(projection) {
-          var viewport = projection.clipExtent();
-          var min = [viewport[0][0], viewport[1][1]];
-          var max = [viewport[1][0], viewport[0][1]];
-          var bbox = geoExtent$$1(projection.invert(min), projection.invert(max)).bbox();
-          var sequenceKeys = {};
 
-          // all sequences for images in viewport
-          _mlyCache.images.rtree.search(bbox)
-              .forEach(function(d) {
-                  var sequenceKey = _mlyCache.sequences.forImageKey[d.data.key];
-                  if (sequenceKey) {
-                      sequenceKeys[sequenceKey] = true;
-                  }
-              });
+          function blur() {
+              _comboHideTimerID = window.setTimeout(hide, 75);
+          }
 
-          // Return lineStrings for the sequences
-          return Object.keys(sequenceKeys).map(function(sequenceKey) {
-              return _mlyCache.sequences.lineString[sequenceKey];
-          });
-      },
 
+          function show() {
+              hide();   // remove any existing
 
-      signsSupported: function() {
-          return true;
-      },
+              container
+                  .insert('div', ':first-child')
+                  .datum(input.node())
+                  .attr('class', 'combobox' + (klass ? ' combobox-' + klass : ''))
+                  .style('position', 'absolute')
+                  .style('display', 'block')
+                  .style('left', '0px')
+                  .on('mousedown.combo-container', function () {
+                      // prevent moving focus out of the input field
+                      event.preventDefault();
+                  });
 
+              select('body')
+                  .on('scroll.combo-scroll', render, true);
+          }
 
-      loadImages: function(projection) {
-          loadTiles('images', apibase + 'images?', projection);
-          loadTiles('sequences', apibase + 'sequences?', projection);
-      },
 
+          function hide() {
+              if (_comboHideTimerID) {
+                  window.clearTimeout(_comboHideTimerID);
+                  _comboHideTimerID = undefined;
+              }
 
-      loadSigns: function(context, projection) {
-          // if we are looking at signs, we'll actually need to fetch images too
-          loadTiles('images', apibase + 'images?', projection);
-          loadTiles('map_features', apibase + 'map_features?layers=trafficsigns&min_nbr_image_detections=1&', projection);
-          loadTiles('image_detections', apibase + 'image_detections?layers=trafficsigns&', projection);
-      },
+              container.selectAll('.combobox')
+                  .remove();
 
+              select('body')
+                  .on('scroll.combo-scroll', null);
+          }
 
-      loadViewer: function(context) {
-          // add mly-wrapper
-          var wrap = select('#photoviewer').selectAll('.mly-wrapper')
-              .data([0]);
 
-          wrap.enter()
-              .append('div')
-              .attr('id', 'mly')
-              .attr('class', 'photo-wrapper mly-wrapper')
-              .classed('hide', true);
+          function keydown() {
+              var shown = !container.selectAll('.combobox').empty();
+              var tagName = input.node() ? input.node().tagName.toLowerCase() : '';
 
-          // load mapillary-viewercss
-          select('head').selectAll('#mapillary-viewercss')
-              .data([0])
-              .enter()
-              .append('link')
-              .attr('id', 'mapillary-viewercss')
-              .attr('rel', 'stylesheet')
-              .attr('href', context.asset(viewercss));
+              switch (event.keyCode) {
+                  case 8:   // ⌫ Backspace
+                  case 46:  // ⌦ Delete
+                      event.stopPropagation();
+                      _selected = null;
+                      render();
+                      input.on('input.combo-input', function() {
+                          var start = input.property('selectionStart');
+                          input.node().setSelectionRange(start, start);
+                          input.on('input.combo-input', change);
+                      });
+                      break;
 
-          // load mapillary-viewerjs
-          select('head').selectAll('#mapillary-viewerjs')
-              .data([0])
-              .enter()
-              .append('script')
-              .attr('id', 'mapillary-viewerjs')
-              .attr('src', context.asset(viewerjs));
+                  case 9:   // ⇥ Tab
+                      accept();
+                      break;
 
-          // load mapillary signs sprite
-          var defs = context.container().select('defs');
-          defs.call(svgDefs(context).addSprites, ['mapillary-sprite']);
+                  case 13:  // ↩ Return
+                      event.preventDefault();
+                      event.stopPropagation();
+                      break;
 
-          // Register viewer resize handler
-          context.ui().photoviewer.on('resize', function() {
-              if (_mlyViewer) {
-                  _mlyViewer.resize();
-              }
-          });
-      },
+                  case 38:  // ↑ Up arrow
+                      if (tagName === 'textarea' && !shown) return;
+                      event.preventDefault();
+                      if (tagName === 'input' && !shown) {
+                          show();
+                      }
+                      nav(-1);
+                      break;
 
+                  case 40:  // ↓ Down arrow
+                      if (tagName === 'textarea' && !shown) return;
+                      event.preventDefault();
+                      if (tagName === 'input' && !shown) {
+                          show();
+                      }
+                      nav(+1);
+                      break;
+              }
+          }
 
-      showViewer: function() {
-          var wrap = select('#photoviewer')
-              .classed('hide', false);
 
-          var isHidden = wrap.selectAll('.photo-wrapper.mly-wrapper.hide').size();
+          function keyup() {
+              switch (event.keyCode) {
+                  case 27:  // ⎋ Escape
+                      cancel();
+                      break;
 
-          if (isHidden && _mlyViewer) {
-              wrap
-                  .selectAll('.photo-wrapper:not(.mly-wrapper)')
-                  .classed('hide', true);
+                  case 13:  // ↩ Return
+                      accept();
+                      break;
+              }
+          }
 
-              wrap
-                  .selectAll('.photo-wrapper.mly-wrapper')
-                  .classed('hide', false);
 
-              _mlyViewer.resize();
-          }
+          // Called whenever the input value is changed (e.g. on typing)
+          function change() {
+              fetch(value(), function() {
+                  _selected = null;
+                  var val = input.property('value');
 
-          return this;
-      },
+                  if (_suggestions.length) {
+                      if (input.property('selectionEnd') === val.length) {
+                          _selected = tryAutocomplete();
+                      }
 
+                      if (!_selected) {
+                          _selected = val;
+                      }
+                  }
 
-      hideViewer: function() {
-          _mlySelectedImage = null;
+                  if (val.length) {
+                      var combo = container.selectAll('.combobox');
+                      if (combo.empty()) {
+                          show();
+                      }
+                  } else {
+                      hide();
+                  }
 
-          if (!_mlyFallback && _mlyViewer) {
-              _mlyViewer.getComponent('sequence').stop();
+                  render();
+              });
           }
 
-          var viewer = select('#photoviewer');
-          if (!viewer.empty()) viewer.datum(null);
 
-          viewer
-              .classed('hide', true)
-              .selectAll('.photo-wrapper')
-              .classed('hide', true);
+          // Called when the user presses up/down arrows to navigate the list
+          function nav(dir) {
+              if (_suggestions.length) {
+                  // try to determine previously selected index..
+                  var index = -1;
+                  for (var i = 0; i < _suggestions.length; i++) {
+                      if (_selected && _suggestions[i].value === _selected) {
+                          index = i;
+                          break;
+                      }
+                  }
 
-          d3_selectAll('.viewfield-group, .sequence, .icon-sign')
-              .classed('selected', false);
+                  // pick new _selected
+                  index = Math.max(Math.min(index + dir, _suggestions.length - 1), 0);
+                  _selected = _suggestions[index].value;
+                  input.property('value', _selected);
+              }
 
-          return this.setStyles(null, true);
-      },
+              render();
+              ensureVisible();
+          }
 
 
-      parsePagination: parsePagination,
+          function ensureVisible() {
+              var combo = container.selectAll('.combobox');
+              if (combo.empty()) return;
 
+              var containerRect = container.node().getBoundingClientRect();
+              var comboRect = combo.node().getBoundingClientRect();
 
-      updateViewer: function(imageKey, context) {
-          if (!imageKey) return this;
+              if (comboRect.bottom > containerRect.bottom) {
+                  var node = attachTo ? attachTo.node() : input.node();
+                  node.scrollIntoView({ behavior: 'instant', block: 'center' });
+                  render();
+              }
 
-          if (!_mlyViewer) {
-              this.initViewer(imageKey, context);
-          } else {
-              _mlyViewer.moveToKey(imageKey)
-                  .catch(function(e) { console.error('mly3', e); });  // eslint-disable-line no-console
+              // https://stackoverflow.com/questions/11039885/scrollintoview-causing-the-whole-page-to-move
+              var selected = combo.selectAll('.combobox-option.selected').node();
+              if (selected) {
+                  selected.scrollIntoView({ behavior: 'smooth', block: 'nearest' });
+              }
           }
 
-          return this;
-      },
-
 
-      initViewer: function(imageKey, context) {
-          var that = this;
-          if (window.Mapillary && imageKey) {
-              var opts = {
-                  baseImageSize: 320,
-                  component: {
-                      cover: false,
-                      keyboard: false,
-                      tag: true
-                  }
-              };
+          function value() {
+              var value = input.property('value');
+              var start = input.property('selectionStart');
+              var end = input.property('selectionEnd');
 
-              // Disable components requiring WebGL support
-              if (!Mapillary.isSupported() && Mapillary.isFallbackSupported()) {
-                  _mlyFallback = true;
-                  opts.component = {
-                      cover: false,
-                      direction: false,
-                      imagePlane: false,
-                      keyboard: false,
-                      mouse: false,
-                      sequence: false,
-                      tag: false,
-                      image: true,        // fallback
-                      navigation: true    // fallback
-                  };
+              if (start && end) {
+                  value = value.substring(0, start);
               }
 
-              _mlyViewer = new Mapillary.Viewer('mly', clientId, null, opts);
-              _mlyViewer.on('nodechanged', nodeChanged);
-              _mlyViewer.on('bearingchanged', bearingChanged);
-              _mlyViewer.moveToKey(imageKey)
-                  .catch(function(e) { console.error('mly3', e); });  // eslint-disable-line no-console
+              return value;
           }
 
-          // nodeChanged: called after the viewer has changed images and is ready.
-          //
-          // There is some logic here to batch up clicks into a _mlyClicks array
-          // because the user might click on a lot of markers quickly and nodechanged
-          // may be called out of order asychronously.
-          //
-          // Clicks are added to the array in `selectedImage` and removed here.
-          //
-          function nodeChanged(node) {
-              if (!_mlyFallback) {
-                  _mlyViewer.getComponent('tag').removeAll();  // remove previous detections
-              }
 
-              var clicks = _mlyClicks;
-              var index = clicks.indexOf(node.key);
-              var selectedKey = _mlySelectedImage && _mlySelectedImage.key;
+          function fetch(v, cb) {
+              _cancelFetch = false;
 
-              if (index > -1) {              // `nodechanged` initiated from clicking on a marker..
-                  clicks.splice(index, 1);   // remove the click
-                  // If `node.key` matches the current _mlySelectedImage, call `selectImage()`
-                  // one more time to update the detections and attribution..
-                  if (node.key === selectedKey) {
-                      that.selectImage(_mlySelectedImage, node.key, true);
+              _fetcher.call(input, v, function(results) {
+                  // already chose a value, don't overwrite or autocomplete it
+                  if (_cancelFetch) return;
+
+                  _suggestions = results;
+                  results.forEach(function(d) { _fetched[d.value] = d; });
+
+                  if (cb) {
+                      cb();
                   }
-              } else {             // `nodechanged` initiated from the Mapillary viewer controls..
-                  var loc = node.computedLatLon ? [node.computedLatLon.lon, node.computedLatLon.lat] : [node.latLon.lon, node.latLon.lat];
-                  context.map().centerEase(loc);
-                  that.selectImage(undefined, node.key, true);
-              }
+              });
           }
 
-          function bearingChanged(e) {
-              dispatch$2.call('bearingChanged', undefined, e);
-          }
-      },
 
+          function tryAutocomplete() {
+              if (!_canAutocomplete) return;
 
-      // Pass the image datum itself in `d` or the `imageKey` string.
-      // This allows images to be selected from places that dont have access
-      // to the full image datum (like the street signs layer or the js viewer)
-      selectImage: function(d, imageKey, fromViewer) {
-          if (!d && imageKey) {
-              // If the user clicked on something that's not an image marker, we
-              // might get in here.. Cache lookup can fail, e.g. if the user
-              // clicked a streetsign, but images are loading slowly asynchronously.
-              // We'll try to carry on anyway if there is no datum.  There just
-              // might be a delay before user sees detections, captured_at, etc.
-              d = _mlyCache.images.forImageKey[imageKey];
-          }
+              var val = _caseSensitive ? value() : value().toLowerCase();
+              if (!val) return;
 
-          _mlySelectedImage = d;
-          var viewer = select('#photoviewer');
-          if (!viewer.empty()) viewer.datum(d);
+              // Don't autocomplete if user is typing a number - #4935
+              if (!isNaN(parseFloat(val)) && isFinite(val)) return;
 
-          imageKey = (d && d.key) || imageKey;
-          if (!fromViewer && imageKey) {
-              _mlyClicks.push(imageKey);
-          }
+              var bestIndex = -1;
+              for (var i = 0; i < _suggestions.length; i++) {
+                  var suggestion = _suggestions[i].value;
+                  var compare = _caseSensitive ? suggestion : suggestion.toLowerCase();
 
-          this.setStyles(null, true);
+                  // if search string matches suggestion exactly, pick it..
+                  if (compare === val) {
+                      bestIndex = i;
+                      break;
 
-          // if signs signs are shown, highlight the ones that appear in this image
-          d3_selectAll('.layer-mapillary-signs .icon-sign')
-              .classed('selected', function(d) {
-                  return some(d.detections, function(detection) {
-                      return detection.image_key === imageKey;
-                  });
-              });
+                  // otherwise lock in the first result that starts with the search string..
+                  } else if (bestIndex === -1 && compare.indexOf(val) === 0) {
+                      bestIndex = i;
+                  }
+              }
 
-          if (d) {
-              this.updateDetections(d);
+              if (bestIndex !== -1) {
+                  var bestVal = _suggestions[bestIndex].value;
+                  input.property('value', bestVal);
+                  input.node().setSelectionRange(val.length, bestVal.length);
+                  return bestVal;
+              }
           }
 
-          return this;
-      },
 
+          function render() {
+              if (_suggestions.length < _minItems || document.activeElement !== input.node()) {
+                  hide();
+                  return;
+              }
 
-      getSelectedImage: function() {
-          return _mlySelectedImage;
-      },
+              var shown = !container.selectAll('.combobox').empty();
+              if (!shown) return;
 
+              var combo = container.selectAll('.combobox');
+              var options = combo.selectAll('.combobox-option')
+                  .data(_suggestions, function(d) { return d.value; });
 
-      getSequenceKeyForImage: function(d) {
-          var imageKey = d && d.key;
-          return imageKey && _mlyCache.sequences.forImageKey[imageKey];
-      },
+              options.exit()
+                  .remove();
 
+              // enter/update
+              options.enter()
+                  .append('a')
+                  .attr('class', 'combobox-option')
+                  .attr('title', function(d) { return d.title; })
+                  .text(function(d) { return d.display || d.value; })
+                  .merge(options)
+                  .classed('selected', function(d) { return d.value === _selected; })
+                  .on('click.combo-option', accept)
+                  .order();
 
-      setStyles: function(hovered, reset) {
-          if (reset) {  // reset all layers
-              d3_selectAll('.viewfield-group')
-                  .classed('highlighted', false)
-                  .classed('hovered', false)
-                  .classed('selected', false);
+              var node = attachTo ? attachTo.node() : input.node();
+              var rect = node.getBoundingClientRect();
 
-              d3_selectAll('.sequence')
-                  .classed('highlighted', false)
-                  .classed('selected', false);
+              combo
+                  .style('left', (rect.left + 5) + 'px')
+                  .style('width', (rect.width - 10) + 'px')
+                  .style('top', rect.height + rect.top + 'px');
           }
 
-          var hoveredImageKey = hovered && hovered.key;
-          var hoveredSequenceKey = this.getSequenceKeyForImage(hovered);
-          var hoveredLineString = hoveredSequenceKey && _mlyCache.sequences.lineString[hoveredSequenceKey];
-          var hoveredImageKeys = (hoveredLineString && hoveredLineString.properties.coordinateProperties.image_keys) || [];
 
-          var viewer = select('#photoviewer');
-          var selected = viewer.empty() ? undefined : viewer.datum();
-          var selectedImageKey = selected && selected.key;
-          var selectedSequenceKey = this.getSequenceKeyForImage(selected);
-          var selectedLineString = selectedSequenceKey && _mlyCache.sequences.lineString[selectedSequenceKey];
-          var selectedImageKeys = (selectedLineString && selectedLineString.properties.coordinateProperties.image_keys) || [];
+          // Dispatches an 'accept' event
+          // Then hides the combobox.
+          function accept(d) {
+              _cancelFetch = true;
+              var thiz = input.node();
 
-          // highlight sibling viewfields on either the selected or the hovered sequences
-          var highlightedImageKeys = union(hoveredImageKeys, selectedImageKeys);
+              if (d) {   // user clicked on a suggestion
+                  utilGetSetValue(input, d.value);    // replace field contents
+                  utilTriggerEvent(input, 'change');
+              }
 
-          d3_selectAll('.layer-mapillary-images .viewfield-group')
-              .classed('highlighted', function(d) { return highlightedImageKeys.indexOf(d.key) !== -1; })
-              .classed('hovered', function(d) { return d.key === hoveredImageKey; })
-              .classed('selected', function(d) { return d.key === selectedImageKey; });
+              // clear (and keep) selection
+              var val = utilGetSetValue(input);
+              thiz.setSelectionRange(val.length, val.length);
 
-          d3_selectAll('.layer-mapillary-images .sequence')
-              .classed('highlighted', function(d) { return d.properties.key === hoveredSequenceKey; })
-              .classed('selected', function(d) { return d.properties.key === selectedSequenceKey; });
+              d = _fetched[val];
+              dispatch$1.call('accept', thiz, d, val);
+              hide();
+          }
 
-          // update viewfields if needed
-          d3_selectAll('.viewfield-group .viewfield')
-              .attr('d', viewfieldPath);
 
-          function viewfieldPath() {
-              var d = this.parentNode.__data__;
-              if (d.pano && d.key !== selectedImageKey) {
-                  return 'M 8,13 m -10,0 a 10,10 0 1,0 20,0 a 10,10 0 1,0 -20,0';
-              } else {
-                  return 'M 6,9 C 8,8.4 8,8.4 10,9 L 16,-2 C 12,-5 4,-5 0,-2 z';
-              }
-          }
+          // Dispatches an 'cancel' event
+          // Then hides the combobox.
+          function cancel() {
+              _cancelFetch = true;
+              var thiz = input.node();
 
-          return this;
-      },
+              // clear (and remove) selection, and replace field contents
+              var val = utilGetSetValue(input);
+              var start = input.property('selectionStart');
+              var end = input.property('selectionEnd');
+              val = val.slice(0, start) + val.slice(end);
+              utilGetSetValue(input, val);
+              thiz.setSelectionRange(val.length, val.length);
 
+              dispatch$1.call('cancel', thiz);
+              hide();
+          }
 
-      updateDetections: function(d) {
-          if (!_mlyViewer || _mlyFallback) return;
+      };
 
-          var imageKey = d && d.key;
-          if (!imageKey) return;
 
-          var detections = _mlyCache.image_detections.forImageKey[imageKey] || [];
-          detections.forEach(function(data) {
-              var tag = makeTag(data);
-              if (tag) {
-                  var tagComponent = _mlyViewer.getComponent('tag');
-                  tagComponent.add([tag]);
-              }
-          });
+      combobox.canAutocomplete = function(val) {
+          if (!arguments.length) return _canAutocomplete;
+          _canAutocomplete = val;
+          return combobox;
+      };
 
-          function makeTag(data) {
-              var valueParts = data.value.split('--');
-              if (valueParts.length !== 3) return;
+      combobox.caseSensitive = function(val) {
+          if (!arguments.length) return _caseSensitive;
+          _caseSensitive = val;
+          return combobox;
+      };
 
-              var text = valueParts[1].replace(/-/g, ' ');
-              var tag;
+      combobox.data = function(val) {
+          if (!arguments.length) return _data;
+          _data = val;
+          return combobox;
+      };
 
-              // Currently only two shapes <Polygon|Point>
-              if (data.shape.type === 'Polygon') {
-                  var polygonGeometry = new Mapillary
-                      .TagComponent
-                      .PolygonGeometry(data.shape.coordinates[0]);
+      combobox.fetcher = function(val) {
+          if (!arguments.length) return _fetcher;
+          _fetcher = val;
+          return combobox;
+      };
 
-                  tag = new Mapillary.TagComponent.OutlineTag(
-                      data.key,
-                      polygonGeometry,
-                      {
-                          text: text,
-                          textColor: 0xffff00,
-                          lineColor: 0xffff00,
-                          lineWidth: 2,
-                          fillColor: 0xffff00,
-                          fillOpacity: 0.3,
-                      }
-                  );
+      combobox.minItems = function(val) {
+          if (!arguments.length) return _minItems;
+          _minItems = val;
+          return combobox;
+      };
 
-              } else if (data.shape.type === 'Point') {
-                  var pointGeometry = new Mapillary
-                      .TagComponent
-                      .PointGeometry(data.shape.coordinates[0]);
 
-                  tag = new Mapillary.TagComponent.SpotTag(
-                      data.key,
-                      pointGeometry,
-                      {
-                          text: text,
-                          color: 0xffff00,
-                          textColor: 0xffff00
-                      }
-                  );
-              }
+      return utilRebind(combobox, dispatch$1, 'on');
+  }
 
-              return tag;
-          }
-      },
 
+  uiCombobox.off = function(input) {
+      input
+          .on('focus.combo-input', null)
+          .on('blur.combo-input', null)
+          .on('keydown.combo-input', null)
+          .on('keyup.combo-input', null)
+          .on('input.combo-input', null)
+          .on('mousedown.combo-input', null)
+          .on('mouseup.combo-input', null);
 
-      cache: function() {
-          return _mlyCache;
-      }
 
+      select('body')
+          .on('scroll.combo-scroll', null);
   };
 
   /**
-   * Performs a partial deep comparison between `object` and `source` to
-   * determine if `object` contains equivalent property values.
-   *
-   * **Note:** This method is equivalent to `_.matches` when `source` is
-   * partially applied.
-   *
-   * Partial comparisons will match empty array and empty object `source`
-   * values against any array or object value, respectively. See `_.isEqual`
-   * for a list of supported value comparisons.
+   * This method is like `_.union` except that it accepts `iteratee` which is
+   * invoked for each element of each `arrays` to generate the criterion by
+   * which uniqueness is computed. Result values are chosen from the first
+   * array in which the value occurs. The iteratee is invoked with one argument:
+   * (value).
    *
    * @static
    * @memberOf _
-   * @since 3.0.0
-   * @category Lang
-   * @param {Object} object The object to inspect.
-   * @param {Object} source The object of property values to match.
-   * @returns {boolean} Returns `true` if `object` is a match, else `false`.
+   * @since 4.0.0
+   * @category Array
+   * @param {...Array} [arrays] The arrays to inspect.
+   * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
+   * @returns {Array} Returns the new array of combined values.
    * @example
    *
-   * var object = { 'a': 1, 'b': 2 };
-   *
-   * _.isMatch(object, { 'b': 2 });
-   * // => true
+   * _.unionBy([2.1], [1.2, 2.3], Math.floor);
+   * // => [2.1, 1.2]
    *
-   * _.isMatch(object, { 'b': 1 });
-   * // => false
+   * // The `_.property` iteratee shorthand.
+   * _.unionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');
+   * // => [{ 'x': 1 }, { 'x': 2 }]
    */
-  function isMatch(object, source) {
-    return object === source || baseIsMatch(object, source, getMatchData(source));
-  }
+  var unionBy = baseRest(function(arrays) {
+    var iteratee = last(arrays);
+    if (isArrayLikeObject(iteratee)) {
+      iteratee = undefined;
+    }
+    return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), baseIteratee(iteratee, 2));
+  });
 
-  var buildRuleChecks = function() {
-      return {
-          equals: function (equals) {
-              return function(tags) {
-                  return isMatch(tags, equals);
-              };
-          },
-          notEquals: function (notEquals) {
-              return function(tags) {
-                  return !isMatch(tags, notEquals);
-              };
-          },
-          absence: function(absence) {
-              return function(tags) {
-                  return Object.keys(tags).indexOf(absence) === -1;
-              };
-          },
-          presence: function(presence) {
-              return function(tags) {
-                  return Object.keys(tags).indexOf(presence) > -1;
-              };
-          },
-          greaterThan: function(greaterThan) {
-              var key = Object.keys(greaterThan)[0];
-              var value = greaterThan[key];
+  function uiCommitChanges(context) {
+      var detected = utilDetect();
+      var _entityID;
 
-              return function(tags) {
-                  return tags[key] > value;
-              };
-          },
-          greaterThanEqual: function(greaterThanEqual) {
-              var key = Object.keys(greaterThanEqual)[0];
-              var value = greaterThanEqual[key];
 
-              return function(tags) {
-                  return tags[key] >= value;
-              };
-          },
-          lessThan: function(lessThan) {
-              var key = Object.keys(lessThan)[0];
-              var value = lessThan[key];
+      function commitChanges(selection) {
+          var history = context.history();
+          var summary = history.difference().summary();
 
-              return function(tags) {
-                  return tags[key] < value;
-              };
-          },
-          lessThanEqual: function(lessThanEqual) {
-              var key = Object.keys(lessThanEqual)[0];
-              var value = lessThanEqual[key];
+          var container = selection.selectAll('.modal-section.commit-section')
+              .data([0]);
 
-              return function(tags) {
-                  return tags[key] <= value;
-              };
-          },
-          positiveRegex: function(positiveRegex) {
-              var tagKey = Object.keys(positiveRegex)[0];
-              var expression = positiveRegex[tagKey].join('|');
-              var regex = new RegExp(expression);
+          var containerEnter = container.enter()
+              .append('div')
+              .attr('class', 'commit-section modal-section fillL2');
 
-              return function(tags) {
-                  return regex.test(tags[tagKey]);
-              };
-          },
-          negativeRegex: function(negativeRegex) {
-              var tagKey = Object.keys(negativeRegex)[0];
-              var expression = negativeRegex[tagKey].join('|');
-              var regex = new RegExp(expression);
+          containerEnter
+              .append('h3')
+              .text(t('commit.changes', { count: summary.length }));
 
-              return function(tags) {
-                  return !regex.test(tags[tagKey]);
-              };
-          }
-      };
-  };
+          containerEnter
+              .append('ul')
+              .attr('class', 'changeset-list');
 
-  var buildLineKeys = function() {
-      return {
-          highway: {
-              rest_area: true,
-              services: true
-          },
-          railway: {
-              roundhouse: true,
-              station: true,
-              traverser: true,
-              turntable: true,
-              wash: true
-          }
-      };
-  };
+          container = containerEnter
+              .merge(container);
 
-  var serviceMapRules = {
-      init: function(areaKeys) {
-          this._ruleChecks  = buildRuleChecks();
-          this._validationRules = [];
-          this._areaKeys = areaKeys;
-          this._lineKeys = buildLineKeys();
-      },
-      // list of rules only relevant to tag checks...
-      filterRuleChecks: function(selector) {
-          var _ruleChecks = this._ruleChecks;
-          return reduce(Object.keys(selector), function(rules, key) {
-              if (['geometry', 'error', 'warning'].indexOf(key) === -1) {
-                  rules.push(_ruleChecks[key](selector[key]));
-              }
-              return rules;
-          }, []);
-      },
-      // builds tagMap from mapcss-parse selector object...
-      buildTagMap: function(selector) {
-          var getRegexValues = function(regexes) {
-              return regexes.map(function(regex) {
-                  return regex.replace(/\$|\^/g, '');
+
+          var items = container.select('ul').selectAll('li')
+              .data(summary);
+
+          var itemsEnter = items.enter()
+              .append('li')
+              .attr('class', 'change-item');
+
+          itemsEnter
+              .each(function(d) {
+                  select(this)
+                      .call(svgIcon('#iD-icon-' + d.entity.geometry(d.graph), 'pre-text ' + d.changeType));
               });
-          };
 
-          var selectorKeys = Object.keys(selector);
-          var tagMap = reduce(selectorKeys, function (expectedTags, key) {
-              var values;
-              var isRegex = /regex/gi.test(key);
-              var isEqual = /equals/gi.test(key);
+          itemsEnter
+              .append('span')
+              .attr('class', 'change-type')
+              .text(function(d) { return t('commit.' + d.changeType) + ' '; });
 
-              if (isRegex || isEqual) {
-                  Object.keys(selector[key]).forEach(function(selectorKey) {
-                      values = isEqual ? [selector[key][selectorKey]] : getRegexValues(selector[key][selectorKey]);
+          itemsEnter
+              .append('strong')
+              .attr('class', 'entity-type')
+              .text(function(d) {
+                  var matched = context.presets().match(d.entity, d.graph);
+                  return (matched && matched.name()) || utilDisplayType(d.entity.id);
+              });
 
-                      if (expectedTags.hasOwnProperty(selectorKey)) {
-                          values = values.concat(expectedTags[selectorKey]);
-                      }
+          itemsEnter
+              .append('span')
+              .attr('class', 'entity-name')
+              .text(function(d) {
+                  var name = utilDisplayName(d.entity) || '',
+                      string = '';
+                  if (name !== '') {
+                      string += ':';
+                  }
+                  return string += ' ' + name;
+              });
 
-                      expectedTags[selectorKey] = values;
-                  });
+          itemsEnter
+              .style('opacity', 0)
+              .transition()
+              .style('opacity', 1);
 
-              } else if (/(greater|less)Than(Equal)?|presence/g.test(key)) {
-                  var tagKey = /presence/.test(key) ? selector[key] : Object.keys(selector[key])[0];
+          items = itemsEnter
+              .merge(items);
 
-                  values = [selector[key][tagKey]];
+          items
+              .on('mouseover', mouseover)
+              .on('mouseout', mouseout)
+              .on('click', click);
 
-                  if (expectedTags.hasOwnProperty(tagKey)) {
-                      values = values.concat(expectedTags[tagKey]);
-                  }
 
-                  expectedTags[tagKey] = values;
-              }
+          // Download changeset link
+          var changeset = new osmChangeset().update({ id: undefined });
+          var changes = history.changes(actionDiscardTags(history.difference()));
 
-              return expectedTags;
-          }, {});
+          delete changeset.id;  // Export without chnageset_id
 
-          return tagMap;
-      },
-      // inspired by osmWay#isArea()
-      inferGeometry: function(tagMap) {
-          var _lineKeys = this._lineKeys;
-          var _areaKeys = this._areaKeys;
+          var data = JXON.stringify(changeset.osmChangeJXON(changes));
+          var blob = new Blob([data], {type: 'text/xml;charset=utf-8;'});
+          var fileName = 'changes.osc';
 
-          var isAreaKeyBlackList = function(key) {
-              return intersection(tagMap[key], Object.keys(_areaKeys[key])).length > 0;
-          };
-          var isLineKeysWhiteList = function(key) {
-              return intersection(tagMap[key], Object.keys(_lineKeys[key])).length > 0;
-          };
+          var linkEnter = container.selectAll('.download-changes')
+              .data([0])
+              .enter()
+              .append('a')
+              .attr('class', 'download-changes');
 
-          if (tagMap.hasOwnProperty('area')) {
-              if (tagMap.area.indexOf('yes') > -1) {
-                  return 'area';
-              }
-              if (tagMap.area.indexOf('no') > -1) {
-                  return 'line';
-              }
+          if (detected.download) {      // All except IE11 and Edge
+              linkEnter                 // download the data as a file
+                  .attr('href', window.URL.createObjectURL(blob))
+                  .attr('download', fileName);
+
+          } else {                      // IE11 and Edge
+              linkEnter                 // open data uri in a new tab
+                  .attr('target', '_blank')
+                  .on('click.download', function() {
+                      navigator.msSaveBlob(blob, fileName);
+                  });
           }
 
-          for (var key in tagMap) {
-              if (key in _areaKeys && !isAreaKeyBlackList(key)) {
-                  return 'area';
-              }
-              if (key in _lineKeys && isLineKeysWhiteList(key)) {
-                  return 'area';
+          linkEnter
+              .call(svgIcon('#iD-icon-load', 'inline'))
+              .append('span')
+              .text(t('commit.download_changes'));
+
+
+          function mouseover(d) {
+              if (d.entity) {
+                  context.surface().selectAll(
+                      utilEntityOrMemberSelector([d.entity.id], context.graph())
+                  ).classed('hover', true);
               }
           }
 
-          return 'line';
-      },
-      // adds from mapcss-parse selector check...
-      addRule: function(selector) {
-          var rule = {
-              // checks relevant to mapcss-selector
-              checks: this.filterRuleChecks(selector),
-              // true if all conditions for a tag error are true..
-              matches: function(entity) {
-                  return every(this.checks, function(check) {
-                      return check(entity.tags);
-                  });
-              },
-              // borrowed from Way#isArea()
-              inferredGeometry: this.inferGeometry(this.buildTagMap(selector), this._areaKeys),
-              geometryMatches: function(entity, graph) {
-                  if (entity.type === 'node' || entity.type === 'relation') {
-                      return selector.geometry === entity.type;
-                  } else if (entity.type === 'way') {
-                      return this.inferredGeometry === entity.geometry(graph);
-                  }
-              },
-              // when geometries match and tag matches are present, return a warning...
-              findWarnings: function (entity, graph, warnings) {
-                  if (this.geometryMatches(entity, graph) && this.matches(entity)) {
-                      var type = Object.keys(selector).indexOf('error') > -1 ? 'error' : 'warning';
-                      warnings.push({
-                          severity: type,
-                          message: selector[type],
-                          entity: entity
-                      });
-                  }
+
+          function mouseout() {
+              context.surface().selectAll('.hover')
+                  .classed('hover', false);
+          }
+
+
+          function click(change) {
+              if (change.changeType === 'deleted') {
+                  _entityID = null;
+              } else {
+                  var entity = change.entity;
+                  _entityID = change.entity.id;
+                  context.map().zoomToEase(entity);
+                  context.surface().selectAll(utilEntityOrMemberSelector([_entityID], context.graph()))
+                      .classed('hover', true);
               }
-          };
-          this._validationRules.push(rule);
-      },
-      clearRules: function() { this._validationRules = []; },
-      // returns validationRules...
-      validationRules: function() { return this._validationRules; },
-      // returns ruleChecks
-      ruleChecks: function() { return this._ruleChecks; }
-  };
+          }
+      }
 
-  var apibase$1 = 'https://nominatim.openstreetmap.org/',
-      inflight = {},
-      nominatimCache;
 
+      commitChanges.entityID = function(_) {
+          if (!arguments.length) return _entityID;
+          _entityID = _;
+          return commitChanges;
+      };
 
-  var serviceNominatim = {
 
-      init: function() {
-          inflight = {};
-          nominatimCache = rbush_1();
-      },
+      return commitChanges;
+  }
 
-      reset: function() {
-          forEach(inflight, function(req) { req.abort(); });
-          inflight = {};
-          nominatimCache = rbush_1();
-      },
+  function uiCommitWarnings(context) {
+
+      function commitWarnings(selection) {
 
+          var issues = context.validator().getIssues();
 
-      countryCode: function (location, callback) {
-          this.reverse(location, function(err, result) {
-              if (err) {
-                  return callback(err);
-              } else if (result.address) {
-                  return callback(null, result.address.country_code);
+          issues = reduce(issues, function(issues, val) {
+              var severity = val.severity;
+              if (issues.hasOwnProperty(severity)) {
+                  issues[severity].push(val);
               } else {
-                  return callback('Unable to geocode', null);
+                  issues[severity] = [val];
               }
-          });
-      },
+              return issues;
+          }, {});
 
+          forEach(issues, function(instances, severity) {
+              instances = uniqBy(instances, function(val) {
+                  return val.entity || (val.id + '_' + val.message.replace(/\s+/g,''));
+              });
+              var section = severity + '-section';
+              var instanceItem = severity + '-item';
 
-      reverse: function (location, callback) {
-          var cached = nominatimCache.search(
-              { minX: location[0], minY: location[1], maxX: location[0], maxY: location[1] }
-          );
+              var container = selection.selectAll('.' + section)
+                  .data(instances.length ? [0] : []);
 
-          if (cached.length > 0) {
-              return callback(null, cached[0].data);
-          }
+              container.exit()
+                  .remove();
 
-          var params = { zoom: 13, format: 'json', addressdetails: 1, lat: location[1], lon: location[0] };
-          var url = apibase$1 + 'reverse?' + utilQsString(params);
-          if (inflight[url]) return;
+              var containerEnter = container.enter()
+                  .append('div')
+                  .attr('class', 'modal-section ' + section + ' fillL2');
 
-          inflight[url] = d3_json(url, function(err, result) {
-              delete inflight[url];
+              containerEnter
+                  .append('h3')
+                  .text(severity === 'warning' ? t('commit.warnings') : t('commit.errors'));
 
-              if (err) {
-                  return callback(err);
-              } else if (result && result.error) {
-                  return callback(result.error);
-              }
+              containerEnter
+                  .append('ul')
+                  .attr('class', 'changeset-list');
 
-              var extent = geoExtent$$1(location).padByMeters(200);
-              nominatimCache.insert(assign(extent.bbox(), {data: result}));
+              container = containerEnter
+                  .merge(container);
 
-              callback(null, result);
-          });
-      },
 
+              var items = container.select('ul').selectAll('li')
+                  .data(instances);
 
-      search: function (val, callback) {
-          var searchVal = encodeURIComponent(val);
-          var url = apibase$1 + 'search/' + searchVal + '?limit=10&format=json';
-          if (inflight[url]) return;
+              items.exit()
+                  .remove();
 
-          inflight[url] = d3_json(url, function(err, result) {
-              delete inflight[url];
-              callback(err, result);
-          });
-      }
+              var itemsEnter = items.enter()
+                  .append('li')
+                  .attr('class', instanceItem);
 
-  };
+              itemsEnter
+                  .call(svgIcon('#iD-icon-alert', 'pre-text'));
 
-  var apibase$2 = 'https://openstreetcam.org';
-  var maxResults$1 = 1000;
-  var tileZoom$1 = 14;
-  var tiler$2 = utilTiler().zoomExtent([tileZoom$1, tileZoom$1]).skipNullIsland(true);
-  var dispatch$3 = dispatch('loadedImages');
-  var imgZoom = d3_zoom()
-      .extent([[0, 0], [320, 240]])
-      .translateExtent([[0, 0], [320, 240]])
-      .scaleExtent([1, 15])
-      .on('zoom', zoomPan);
-  var _oscCache;
-  var _oscSelectedImage;
+              itemsEnter
+                  .append('strong')
+                  .text(function(d) { return d.message; });
 
+              itemsEnter.filter(function(d) { return d.tooltip; })
+                  .call(tooltip()
+                      .title(function(d) { return d.tooltip; })
+                      .placement('top')
+                  );
 
-  function abortRequest$2(i) {
-      i.abort();
-  }
+              items = itemsEnter
+                  .merge(items);
 
 
-  function maxPageAtZoom$1(z) {
-      if (z < 15)   return 2;
-      if (z === 15) return 5;
-      if (z === 16) return 10;
-      if (z === 17) return 20;
-      if (z === 18) return 40;
-      if (z > 18)   return 80;
-  }
+              items
+                  .on('mouseover', mouseover)
+                  .on('mouseout', mouseout)
+                  .on('click', warningClick);
 
+              function mouseover(d) {
+                  if (d.entities) {
+                      context.surface().selectAll(
+                          utilEntityOrMemberSelector(
+                              map$3(d.entities, function(e) { return e.id; }),
+                              context.graph()
+                          )
+                      ).classed('hover', true);
+                  }
+              }
 
-  function loadTiles$1(which, url, projection) {
-      var currZoom = Math.floor(geoScaleToZoom(projection.scale()));
-      var tiles = tiler$2.getTiles(projection);
+              function mouseout() {
+                  context.surface().selectAll('.hover')
+                      .classed('hover', false);
+              }
 
-      // abort inflight requests that are no longer needed
-      var cache = _oscCache[which];
-      forEach(cache.inflight, function(v, k) {
-          var wanted = find$1(tiles, function(tile) { return k.indexOf(tile.id + ',') === 0; });
+              function warningClick(d) {
+                  if (d.entities && d.entities.length > 0) {
+                      context.map().zoomTo(d.entities[0]);
+                      context.enter(modeSelect(
+                          context,
+                          map$3(d.entities, function(e) { return e.id; })
+                      ));
+                  }
+              }
+          });
+      }
 
-          if (!wanted) {
-              abortRequest$2(v);
-              delete cache.inflight[k];
-          }
-      });
 
-      tiles.forEach(function(tile) {
-          loadNextTilePage$1(which, currZoom, url, tile);
-      });
+      return commitWarnings;
   }
 
+  function uiRawTagEditor(context) {
+      var taginfo = services.taginfo;
+      var dispatch$1 = dispatch('change');
+      var _readOnlyTags = [];
+      var _orderedKeys = [];
+      var _showBlank = false;
+      var _updatePreference = true;
+      var _expanded = false;
+      var _pendingChange = null;
+      var _state;
+      var _preset;
+      var _tags;
+      var _entityID;
 
-  function loadNextTilePage$1(which, currZoom, url, tile) {
-      var cache = _oscCache[which];
-      var bbox = tile.extent.bbox();
-      var maxPages = maxPageAtZoom$1(currZoom);
-      var nextPage = cache.nextPage[tile.id] || 1;
-      var params = utilQsString({
-          ipp: maxResults$1,
-          page: nextPage,
-          // client_id: clientId,
-          bbTopLeft: [bbox.maxY, bbox.minX].join(','),
-          bbBottomRight: [bbox.minY, bbox.maxX].join(',')
-      }, true);
 
-      if (nextPage > maxPages) return;
+      function rawTagEditor(selection) {
+          var count = Object.keys(_tags).filter(function(d) { return d; }).length;
 
-      var id = tile.id + ',' + String(nextPage);
-      if (cache.loaded[id] || cache.inflight[id]) return;
+          var disclosure = uiDisclosure(context, 'raw_tag_editor', false)
+              .title(t('inspector.all_tags') + ' (' + count + ')')
+              .on('toggled', toggled)
+              .updatePreference(_updatePreference)
+              .content(content);
 
-      cache.inflight[id] = request(url)
-          .mimeType('application/json')
-          .header('Content-type', 'application/x-www-form-urlencoded')
-          .response(function(xhr) { return JSON.parse(xhr.responseText); })
-          .post(params, function(err, data) {
-              cache.loaded[id] = true;
-              delete cache.inflight[id];
-              if (err || !data.currentPageItems || !data.currentPageItems.length) return;
+          // Sometimes we want to force the raw_tag_editor to be opened/closed..
+          // When undefined, uiDisclosure will use the user's stored preference.
+          if (_expanded !== undefined) {
+              disclosure.expanded(_expanded);
+          }
 
-              function localeDateString(s) {
-                  if (!s) return null;
-                  var detected = utilDetect();
-                  var options = { day: 'numeric', month: 'short', year: 'numeric' };
-                  var d = new Date(s);
-                  if (isNaN(d.getTime())) return null;
-                  return d.toLocaleDateString(detected.locale, options);
+          selection.call(disclosure);
+
+          function toggled(expanded) {
+              _expanded = expanded;
+              if (expanded) {
+                  selection.node().parentNode.scrollTop += 200;
               }
+          }
+      }
 
-              var features = data.currentPageItems.map(function(item) {
-                  var loc = [+item.lng, +item.lat];
-                  var d;
 
-                  if (which === 'images') {
-                      d = {
-                          loc: loc,
-                          key: item.id,
-                          ca: +item.heading,
-                          captured_at: localeDateString(item.shot_date || item.date_added),
-                          captured_by: item.username,
-                          imagePath: item.lth_name,
-                          sequence_id: item.sequence_id,
-                          sequence_index: +item.sequence_index
-                      };
+      function content(wrap) {
+          var rowData = [];
+          var seen = {};
+          var allKeys = Object.keys(_tags);
+          var i, k;
+
+          // When switching to a different entity or changing the state (hover/select)
+          // we reorder the keys.  Otherwise leave them as the user entered - #5857
+          if (!_orderedKeys.length) {
+              _orderedKeys = allKeys.sort();
+          }
+
+          // push ordered keys first
+          for (i = 0; i < _orderedKeys.length; i++) {
+              k = _orderedKeys[i];
+              if (_tags[k] === undefined) continue;   // e.g. tag was removed
+              seen[k] = true;
+              rowData.push({ key: k, value: _tags[k] });
+          }
+          // push unknown keys after - these are tags the user added
+          for (i = 0; i < allKeys.length; i++) {
+              k = allKeys[i];
+              if (seen[k]) continue;
+              rowData.push({ key: k, value: _tags[k] });
+          }
+          // push blank row last, if necessary
+          if (!rowData.length || _showBlank) {
+              _showBlank = false;
+              rowData.push({ key: '', value: '' });
+          }
 
-                      // cache sequence info
-                      var seq = _oscCache.sequences[d.sequence_id];
-                      if (!seq) {
-                          seq = { rotation: 0, images: [] };
-                          _oscCache.sequences[d.sequence_id] = seq;
-                      }
-                      seq.images[d.sequence_index] = d;
-                  }
+          // List of tags
+          var list = wrap.selectAll('.tag-list')
+              .data([0]);
 
-                  return {
-                      minX: loc[0], minY: loc[1], maxX: loc[0], maxY: loc[1], data: d
-                  };
-              });
+          list = list.enter()
+              .append('ul')
+              .attr('class', 'tag-list')
+              .merge(list);
 
-              cache.rtree.load(features);
 
-              if (which === 'images') {
-                  dispatch$3.call('loadedImages');
-              }
+          // Container for the Add button
+          var addRowEnter = wrap.selectAll('.add-row')
+              .data([0])
+              .enter()
+              .append('div')
+              .attr('class', 'add-row');
 
-              if (data.currentPageItems.length === maxResults$1) {  // more pages to load
-                  cache.nextPage[tile.id] = nextPage + 1;
-                  loadNextTilePage$1(which, currZoom, url, tile);
-              } else {
-                  cache.nextPage[tile.id] = Infinity;     // no more pages to load
-              }
-          });
-  }
+          addRowEnter
+              .append('button')
+              .attr('class', 'add-tag')
+              .call(svgIcon('#iD-icon-plus', 'light'))
+              .on('click', addTag);
 
+          addRowEnter
+              .append('div')
+              .attr('class', 'space-value');   // preserve space
 
-  // partition viewport into higher zoom tiles
-  function partitionViewport$1(projection) {
-      var z = geoScaleToZoom(projection.scale());
-      var z2 = (Math.ceil(z * 2) / 2) + 2.5;   // round to next 0.5 and add 2.5
-      var tiler = utilTiler().zoomExtent([z2, z2]);
+          addRowEnter
+              .append('div')
+              .attr('class', 'space-buttons');  // preserve space
 
-      return tiler.getTiles(projection)
-          .map(function(tile) { return tile.extent; });
-  }
 
+          // Tag list items
+          var items = list.selectAll('.tag-row')
+              .data(rowData, function(d) { return d.key; });
 
-  // no more than `limit` results per partition.
-  function searchLimited$1(limit, projection, rtree) {
-      limit = limit || 5;
+          items.exit()
+              .each(unbind)
+              .remove();
 
-      return partitionViewport$1(projection)
-          .reduce(function(result, extent) {
-              var found = rtree.search(extent.bbox())
-                  .slice(0, limit)
-                  .map(function(d) { return d.data; });
 
-              return (found.length ? result.concat(found) : result);
-          }, []);
-  }
+          // Enter
+          var itemsEnter = items.enter()
+              .append('li')
+              .attr('class', 'tag-row')
+              .classed('readonly', isReadOnly);
 
+          var innerWrap = itemsEnter.append('div')
+              .attr('class', 'inner-wrap');
 
-  function zoomPan() {
-      var t = event.transform;
-      select('#photoviewer .osc-image-wrap')
-          .call(utilSetTransform, t.x, t.y, t.k);
-  }
+          innerWrap
+              .append('div')
+              .attr('class', 'key-wrap')
+              .append('input')
+              .property('type', 'text')
+              .attr('class', 'key')
+              .attr('maxlength', 255)
+              .call(utilNoAuto)
+              .on('blur', keyChange)
+              .on('change', keyChange);
+
+          innerWrap
+              .append('div')
+              .attr('class', 'value-wrap')
+              .append('input')
+              .property('type', 'text')
+              .attr('class', 'value')
+              .attr('maxlength', 255)
+              .call(utilNoAuto)
+              .on('blur', valueChange)
+              .on('change', valueChange)
+              .on('keydown.push-more', pushMore);
 
+          innerWrap
+              .append('button')
+              .attr('tabindex', -1)
+              .attr('class', 'form-field-button remove')
+              .attr('title', t('icons.remove'))
+              .call(svgIcon('#iD-operation-delete'));
 
-  var serviceOpenstreetcam = {
 
-      init: function() {
-          if (!_oscCache) {
-              this.reset();
-          }
+          // Update
+          items = items
+              .merge(itemsEnter)
+              .order();
 
-          this.event = utilRebind(this, dispatch$3, 'on');
-      },
+          items
+              .each(function(d) {
+                  var row = select(this);
+                  var key = row.select('input.key');      // propagate bound data
+                  var value = row.select('input.value');  // propagate bound data
 
-      reset: function() {
-          var cache = _oscCache;
+                  if (_entityID && taginfo && _state !== 'hover') {
+                      bindTypeahead(key, value);
+                  }
 
-          if (cache) {
-              if (cache.images && cache.images.inflight) {
-                  forEach(cache.images.inflight, abortRequest$2);
-              }
-          }
+                  var isRelation = (_entityID && context.entity(_entityID).type === 'relation');
+                  var reference;
 
-          _oscCache = {
-              images: { inflight: {}, loaded: {}, nextPage: {}, rtree: rbush_1() },
-              sequences: {}
-          };
+                  if (isRelation && d.key === 'type') {
+                      reference = uiTagReference({ rtype: d.value }, context);
+                  } else {
+                      reference = uiTagReference({ key: d.key, value: d.value }, context);
+                  }
 
-          _oscSelectedImage = null;
-      },
+                  if (_state === 'hover') {
+                      reference.showing(false);
+                  }
 
+                  row.select('.inner-wrap')      // propagate bound data
+                      .call(reference.button);
 
-      images: function(projection) {
-          var limit = 5;
-          return searchLimited$1(limit, projection, _oscCache.images.rtree);
-      },
+                  row.call(reference.body);
 
+                  row.select('button.remove');   // propagate bound data
+              });
 
-      sequences: function(projection) {
-          var viewport = projection.clipExtent();
-          var min = [viewport[0][0], viewport[1][1]];
-          var max = [viewport[1][0], viewport[0][1]];
-          var bbox = geoExtent$$1(projection.invert(min), projection.invert(max)).bbox();
-          var sequenceKeys = {};
+          items.selectAll('input.key')
+              .attr('title', function(d) { return d.key; })
+              .call(utilGetSetValue, function(d) { return d.key; })
+              .property('disabled', isReadOnly);
 
-          // all sequences for images in viewport
-          _oscCache.images.rtree.search(bbox)
-              .forEach(function(d) { sequenceKeys[d.data.sequence_id] = true; });
+          items.selectAll('input.value')
+              .attr('title', function(d) { return d.value; })
+              .call(utilGetSetValue, function(d) { return d.value; })
+              .property('disabled', isReadOnly);
 
-          // make linestrings from those sequences
-          var lineStrings = [];
-          Object.keys(sequenceKeys)
-              .forEach(function(sequenceKey) {
-                  var seq = _oscCache.sequences[sequenceKey];
-                  var images = seq && seq.images;
-                  if (images) {
-                      lineStrings.push({
-                          type: 'LineString',
-                          coordinates: images.map(function (d) { return d.loc; }).filter(Boolean),
-                          properties: { key: sequenceKey }
-                      });
+          items.selectAll('button.remove')
+              .on('mousedown', removeTag);  // 'click' fires too late - #5878
+
+
+
+          function isReadOnly(d) {
+              for (var i = 0; i < _readOnlyTags.length; i++) {
+                  if (d.key.match(_readOnlyTags[i]) !== null) {
+                      return true;
                   }
-              });
-          return lineStrings;
-      },
+              }
+              return false;
+          }
 
 
-      loadImages: function(projection) {
-          var url = apibase$2 + '/1.0/list/nearby-photos/';
-          loadTiles$1('images', url, projection);
-      },
+          function pushMore() {
+              if (event.keyCode === 9 && !event.shiftKey &&
+                  list.selectAll('li:last-child input.value').node() === this) {
+                  addTag();
+              }
+          }
 
 
-      loadViewer: function(context) {
-          var that = this;
+          function bindTypeahead(key, value) {
+              if (isReadOnly(key.datum())) return;
 
-          // add osc-wrapper
-          var wrap = select('#photoviewer').selectAll('.osc-wrapper')
-              .data([0]);
+              var geometry = context.geometry(_entityID);
+
+              key.call(uiCombobox(context, 'tag-key')
+                  .fetcher(function(value, callback) {
+                      taginfo.keys({
+                          debounce: true,
+                          geometry: geometry,
+                          query: value
+                      }, function(err, data) {
+                          if (!err) {
+                              var filtered = data.filter(function(d) {
+                                  return _tags[d.value] === undefined;
+                              });
+                              callback(sort(value, filtered));
+                          }
+                      });
+                  }));
+
+              value.call(uiCombobox(context, 'tag-value')
+                  .fetcher(function(value, callback) {
+                      taginfo.values({
+                          debounce: true,
+                          key: utilGetSetValue(key),
+                          geometry: geometry,
+                          query: value
+                      }, function(err, data) {
+                          if (!err) callback(sort(value, data));
+                      });
+                  }));
 
-          var wrapEnter = wrap.enter()
-              .append('div')
-              .attr('class', 'photo-wrapper osc-wrapper')
-              .classed('hide', true)
-              .call(imgZoom)
-              .on('dblclick.zoom', null);
 
-          wrapEnter
-              .append('div')
-              .attr('class', 'photo-attribution fillD');
+              function sort(value, data) {
+                  var sameletter = [];
+                  var other = [];
+                  for (var i = 0; i < data.length; i++) {
+                      if (data[i].value.substring(0, value.length) === value) {
+                          sameletter.push(data[i]);
+                      } else {
+                          other.push(data[i]);
+                      }
+                  }
+                  return sameletter.concat(other);
+              }
+          }
 
-          var controlsEnter = wrapEnter
-              .append('div')
-              .attr('class', 'photo-controls-wrap')
-              .append('div')
-              .attr('class', 'photo-controls');
 
-          controlsEnter
-              .append('button')
-              .on('click.back', step(-1))
-              .text('◄');
+          function unbind() {
+              var row = select(this);
 
-          controlsEnter
-              .append('button')
-              .on('click.rotate-ccw', rotate(-90))
-              .text('⤿');
+              row.selectAll('input.key')
+                  .call(uiCombobox.off);
 
-          controlsEnter
-              .append('button')
-              .on('click.rotate-cw', rotate(90))
-              .text('⤾');
+              row.selectAll('input.value')
+                  .call(uiCombobox.off);
+          }
 
-          controlsEnter
-              .append('button')
-              .on('click.forward', step(1))
-              .text('►');
 
-          wrapEnter
-              .append('div')
-              .attr('class', 'osc-image-wrap');
+          function keyChange(d) {
+              var kOld = d.key;
+              var kNew = this.value.trim();
+              var row = this.parentNode.parentNode;
+              var inputVal = select(row).selectAll('input.value');
+              var vNew = utilGetSetValue(inputVal);
+
+              // if the key looks like "key=value", split them up - #5024
+              if (kNew.indexOf('=') !== -1) {
+                  var parts = kNew
+                      .split('=')
+                      .map(function(str) { return str.trim(); })
+                      .filter(Boolean);
+
+                  if (parts.length === 2) {
+                      kNew = parts[0];
+                      vNew = parts[1];
+                  }
+              }
 
+              // allow no change if the key should be readonly
+              if (isReadOnly({ key: kNew })) {
+                  this.value = kOld;
+                  return;
+              }
 
-          // Register viewer resize handler
-          context.ui().photoviewer.on('resize', function(dimensions) {
-              imgZoom = d3_zoom()
-                  .extent([[0, 0], dimensions])
-                  .translateExtent([[0, 0], dimensions])
-                  .scaleExtent([1, 15])
-                  .on('zoom', zoomPan);
-          });
+              // switch focus if key is already in use
+              if (kNew && kNew !== kOld) {
+                  if (_tags[kNew] !== undefined) {      // new key is already in use
+                      this.value = kOld;                // reset the key
+                      list.selectAll('input.value')
+                          .each(function(d) {
+                              if (d.key === kNew) {     // send focus to that other value combo instead
+                                  var input = select(this).node();
+                                  input.focus();
+                                  input.select();
+                              }
+                          });
+                      return;
+                  }
+              }
 
+              _pendingChange  = _pendingChange || {};
+              if (kOld) {
+                  _pendingChange[kOld] = undefined;
+              }
+              _pendingChange[kNew] = vNew;
 
-          function rotate(deg) {
-              return function() {
-                  if (!_oscSelectedImage) return;
-                  var sequenceKey = _oscSelectedImage.sequence_id;
-                  var sequence = _oscCache.sequences[sequenceKey];
-                  if (!sequence) return;
+              d.key = kNew;    // update datum to avoid exit/enter on tag update
+              d.value = vNew;
 
-                  var r = sequence.rotation || 0;
-                  r += deg;
+              this.value = kNew;
+              utilGetSetValue(inputVal, vNew);
 
-                  if (r > 180) r -= 360;
-                  if (r < -180) r += 360;
-                  sequence.rotation = r;
+              scheduleChange();
+          }
 
-                  var wrap = select('#photoviewer .osc-wrapper');
 
-                  wrap
-                      .transition()
-                      .duration(100)
-                      .call(imgZoom.transform, identity$7);
+          function valueChange(d) {
+              if (isReadOnly(d)) return;
 
-                  wrap.selectAll('.osc-image')
-                      .transition()
-                      .duration(100)
-                      .style('transform', 'rotate(' + r + 'deg)');
-              };
+              _pendingChange  = _pendingChange || {};
+              _pendingChange[d.key] = this.value;
+              scheduleChange();
           }
 
-          function step(stepBy) {
-              return function() {
-                  if (!_oscSelectedImage) return;
-                  var sequenceKey = _oscSelectedImage.sequence_id;
-                  var sequence = _oscCache.sequences[sequenceKey];
-                  if (!sequence) return;
 
-                  var nextIndex = _oscSelectedImage.sequence_index + stepBy;
-                  var nextImage = sequence.images[nextIndex];
-                  if (!nextImage) return;
+          function removeTag(d) {
+              if (isReadOnly(d)) return;
 
-                  context.map().centerEase(nextImage.loc);
+              if (d.key === '') {    // removing the blank row
+                  _showBlank = false;
+                  content(wrap);
+              } else {
+                  _pendingChange  = _pendingChange || {};
+                  _pendingChange[d.key] = undefined;
+                  scheduleChange();
+              }
+          }
 
-                  that
-                      .selectImage(nextImage)
-                      .updateViewer(nextImage);
-              };
+
+          function addTag() {
+              // Delay render in case this click is blurring an edited combo.
+              // Without the setTimeout, the `content` render would wipe out the pending tag change.
+              window.setTimeout(function() {
+                  _showBlank = true;
+                  content(wrap);
+                  list.selectAll('li:last-child input.key').node().focus();
+              }, 20);
           }
-      },
 
 
-      showViewer: function() {
-          var viewer = select('#photoviewer')
-              .classed('hide', false);
+          function scheduleChange() {
+              // Delay change in case this change is blurring an edited combo. - #5878
+              window.setTimeout(function() {
+                  dispatch$1.call('change', this, _pendingChange);
+                  _pendingChange = null;
+              }, 10);
+          }
 
-          var isHidden = viewer.selectAll('.photo-wrapper.osc-wrapper.hide').size();
+      }
 
-          if (isHidden) {
-              viewer
-                  .selectAll('.photo-wrapper:not(.osc-wrapper)')
-                  .classed('hide', true);
 
-              viewer
-                  .selectAll('.photo-wrapper.osc-wrapper')
-                  .classed('hide', false);
+      rawTagEditor.state = function(val) {
+          if (!arguments.length) return _state;
+          if (_state !== val) {
+              _orderedKeys = [];
+              _state = val;
           }
-
-          return this;
-      },
+          return rawTagEditor;
+      };
 
 
-      hideViewer: function() {
-          _oscSelectedImage = null;
+      rawTagEditor.preset = function(val) {
+          if (!arguments.length) return _preset;
+          _preset = val;
+          if (_preset.isFallback()) {
+              _expanded = true;
+              _updatePreference = false;
+          } else {
+              _expanded = undefined;
+              _updatePreference = true;
+          }
+          return rawTagEditor;
+      };
 
-          var viewer = select('#photoviewer');
-          if (!viewer.empty()) viewer.datum(null);
 
-          viewer
-              .classed('hide', true)
-              .selectAll('.photo-wrapper')
-              .classed('hide', true);
+      rawTagEditor.tags = function(val) {
+          if (!arguments.length) return _tags;
+          _tags = val;
+          return rawTagEditor;
+      };
 
-          d3_selectAll('.viewfield-group, .sequence, .icon-sign')
-              .classed('selected', false);
 
-          return this.setStyles(null, true);
-      },
+      rawTagEditor.entityID = function(val) {
+          if (!arguments.length) return _entityID;
+          if (_entityID !== val) {
+              _orderedKeys = [];
+              _entityID = val;
+          }
+          return rawTagEditor;
+      };
 
 
-      updateViewer: function(d) {
-          var wrap = select('#photoviewer .osc-wrapper');
-          var imageWrap = wrap.selectAll('.osc-image-wrap');
-          var attribution = wrap.selectAll('.photo-attribution').html('');
+      rawTagEditor.expanded = function(val) {
+          if (!arguments.length) return _expanded;
+          _expanded = val;
+          _updatePreference = false;
+          return rawTagEditor;
+      };
 
-          wrap
-              .transition()
-              .duration(100)
-              .call(imgZoom.transform, identity$7);
 
-          imageWrap
-              .selectAll('.osc-image')
-              .remove();
+      rawTagEditor.readOnlyTags = function(val) {
+          if (!arguments.length) return _readOnlyTags;
+          _readOnlyTags = val;
+          return rawTagEditor;
+      };
 
-          if (d) {
-              var sequence = _oscCache.sequences[d.sequence_id];
-              var r = (sequence && sequence.rotation) || 0;
 
-              imageWrap
-                  .append('img')
-                  .attr('class', 'osc-image')
-                  .attr('src', apibase$2 + '/' + d.imagePath)
-                  .style('transform', 'rotate(' + r + 'deg)');
+      return utilRebind(rawTagEditor, dispatch$1, 'on');
+  }
 
-              if (d.captured_by) {
-                  attribution
-                      .append('a')
-                      .attr('class', 'captured_by')
-                      .attr('target', '_blank')
-                      .attr('href', 'https://openstreetcam.org/user/' + encodeURIComponent(d.captured_by))
-                      .text('@' + d.captured_by);
+  var _changeset$1;
+  var readOnlyTags = [
+      /^changesets_count$/,
+      /^created_by$/,
+      /^ideditor:/,
+      /^imagery_used$/,
+      /^host$/,
+      /^locale$/
+  ];
 
-                  attribution
-                      .append('span')
-                      .text('|');
-              }
+  // treat most punctuation (except -, _, +, &) as hashtag delimiters - #4398
+  // from https://stackoverflow.com/a/25575009
+  var hashtagRegex = /(#[^\u2000-\u206F\u2E00-\u2E7F\s\\'!"#$%()*,.\/:;<=>?@\[\]^`{|}~]+)/g;
 
-              if (d.captured_at) {
-                  attribution
-                      .append('span')
-                      .attr('class', 'captured_at')
-                      .text(d.captured_at);
 
-                  attribution
-                      .append('span')
-                      .text('|');
-              }
+  function uiCommit(context) {
+      var dispatch$1 = dispatch('cancel', 'save');
+      var _userDetails;
+      var _selection;
 
-              attribution
-                  .append('a')
-                  .attr('class', 'image-link')
-                  .attr('target', '_blank')
-                  .attr('href', 'https://openstreetcam.org/details/' + d.sequence_id + '/' + d.sequence_index)
-                  .text('openstreetcam.org');
-          }
-          return this;
-      },
+      var changesetEditor = uiChangesetEditor(context)
+          .on('change', changeTags);
+      var rawTagEditor = uiRawTagEditor(context)
+          .on('change', changeTags);
+      var commitChanges = uiCommitChanges(context);
+      var commitWarnings = uiCommitWarnings(context);
 
 
-      selectImage: function(d) {
-          _oscSelectedImage = d;
-          var viewer = select('#photoviewer');
-          if (!viewer.empty()) viewer.datum(d);
+      function commit(selection) {
+          _selection = selection;
 
-          this.setStyles(null, true);
+          var osm = context.connection();
+          if (!osm) return;
 
-          d3_selectAll('.icon-sign')
-              .classed('selected', false);
+          // expire stored comment, hashtags, source after cutoff datetime - #3947 #4899
+          var commentDate = +context.storage('commentDate') || 0;
+          var currDate = Date.now();
+          var cutoff = 2 * 86400 * 1000;   // 2 days
+          if (commentDate > currDate || currDate - commentDate > cutoff) {
+              context.storage('comment', null);
+              context.storage('hashtags', null);
+              context.storage('source', null);
+          }
 
-          return this;
-      },
+          var tags;
+          // Initialize changeset if one does not exist yet.
+          // Also pull values from local storage.
+          if (!_changeset$1) {
+              var detected = utilDetect();
+              tags = {
+                  comment: context.storage('comment') || '',
+                  created_by: ('iD ' + context.version).substr(0, 255),
+                  host: detected.host.substr(0, 255),
+                  locale: detected.locale.substr(0, 255)
+              };
 
+              // call findHashtags initially - this will remove stored
+              // hashtags if any hashtags are found in the comment - #4304
+              findHashtags(tags, true);
 
-      getSelectedImage: function() {
-          return _oscSelectedImage;
-      },
+              var hashtags = context.storage('hashtags');
+              if (hashtags) {
+                  tags.hashtags = hashtags;
+              }
 
+              var source = context.storage('source');
+              if (source) {
+                  tags.source = source;
+              }
 
-      getSequenceKeyForImage: function(d) {
-          return d && d.sequence_id;
-      },
+              _changeset$1 = new osmChangeset({ tags: tags });
+          }
 
+          tags = clone(_changeset$1.tags);
 
-      setStyles: function(hovered, reset) {
-          if (reset) {  // reset all layers
-              d3_selectAll('.viewfield-group')
-                  .classed('highlighted', false)
-                  .classed('hovered', false)
-                  .classed('selected', false);
+          // assign tags for imagery used
+          var imageryUsed = context.history().imageryUsed().join(';').substr(0, 255);
+          tags.imagery_used = imageryUsed || 'None';
 
-              d3_selectAll('.sequence')
-                  .classed('highlighted', false)
-                  .classed('selected', false);
+          // assign tags for closed issues and notes
+          var osmClosed = osm.getClosedIDs();
+          if (osmClosed.length) {
+              tags['closed:note'] = osmClosed.join(';').substr(0, 255);
+          }
+          if (services.keepRight) {
+              var krClosed = services.keepRight.getClosedIDs();
+              if (krClosed.length) {
+                  tags['closed:keepright'] = krClosed.join(';').substr(0, 255);
+              }
+          }
+          if (services.improveOSM) {
+              var iOsmClosed = services.improveOSM.getClosedIDs();
+              if (iOsmClosed.length) {
+                  tags['closed:improveosm'] = iOsmClosed.join(';').substr(0, 255);
+              }
           }
 
-          var hoveredImageKey = hovered && hovered.key;
-          var hoveredSequenceKey = this.getSequenceKeyForImage(hovered);
-          var hoveredSequence = hoveredSequenceKey && _oscCache.sequences[hoveredSequenceKey];
-          var hoveredImageKeys = (hoveredSequence && hoveredSequence.images.map(function (d) { return d.key; })) || [];
+          _changeset$1 = _changeset$1.update({ tags: tags });
 
-          var viewer = select('#photoviewer');
-          var selected = viewer.empty() ? undefined : viewer.datum();
-          var selectedImageKey = selected && selected.key;
-          var selectedSequenceKey = this.getSequenceKeyForImage(selected);
-          var selectedSequence = selectedSequenceKey && _oscCache.sequences[selectedSequenceKey];
-          var selectedImageKeys = (selectedSequence && selectedSequence.images.map(function (d) { return d.key; })) || [];
+          var header = selection.selectAll('.header')
+              .data([0]);
 
-          // highlight sibling viewfields on either the selected or the hovered sequences
-          var highlightedImageKeys = union(hoveredImageKeys, selectedImageKeys);
+          var headerTitle = header.enter()
+              .append('div')
+              .attr('class', 'header fillL header-container');
 
-          d3_selectAll('.layer-openstreetcam-images .viewfield-group')
-              .classed('highlighted', function(d) { return highlightedImageKeys.indexOf(d.key) !== -1; })
-              .classed('hovered', function(d) { return d.key === hoveredImageKey; })
-              .classed('selected', function(d) { return d.key === selectedImageKey; });
+          headerTitle
+              .append('div')
+              .attr('class', 'header-block header-block-outer');
 
-          d3_selectAll('.layer-openstreetcam-images .sequence')
-              .classed('highlighted', function(d) { return d.properties.key === hoveredSequenceKey; })
-              .classed('selected', function(d) { return d.properties.key === selectedSequenceKey; });
+          headerTitle
+              .append('div')
+              .attr('class', 'header-block')
+              .append('h3')
+              .text(t('commit.title'));
 
-          // update viewfields if needed
-          d3_selectAll('.viewfield-group .viewfield')
-              .attr('d', viewfieldPath);
+          headerTitle
+              .append('div')
+              .attr('class', 'header-block header-block-outer header-block-close')
+              .append('button')
+              .attr('class', 'close')
+              .on('click', function() { context.enter(modeBrowse(context)); })
+              .call(svgIcon('#iD-icon-close'));
 
-          function viewfieldPath() {
-              var d = this.parentNode.__data__;
-              if (d.pano && d.key !== selectedImageKey) {
-                  return 'M 8,13 m -10,0 a 10,10 0 1,0 20,0 a 10,10 0 1,0 -20,0';
-              } else {
-                  return 'M 6,9 C 8,8.4 8,8.4 10,9 L 16,-2 C 12,-5 4,-5 0,-2 z';
-              }
-          }
+          var body = selection.selectAll('.body')
+              .data([0]);
 
-          return this;
-      },
+          body = body.enter()
+              .append('div')
+              .attr('class', 'body')
+              .merge(body);
 
 
-      cache: function() {
-          return _oscCache;
-      }
+          // Changeset Section
+          var changesetSection = body.selectAll('.changeset-editor')
+              .data([0]);
 
-  };
+          changesetSection = changesetSection.enter()
+              .append('div')
+              .attr('class', 'modal-section changeset-editor')
+              .merge(changesetSection);
 
-  /* Built-in method references for those with the same name as other `lodash` methods. */
-  var nativeCeil = Math.ceil,
-      nativeMax$4 = Math.max;
+          changesetSection
+              .call(changesetEditor
+                  .changesetID(_changeset$1.id)
+                  .tags(tags)
+              );
 
-  /**
-   * Creates an array of elements split into groups the length of `size`.
-   * If `array` can't be split evenly, the final chunk will be the remaining
-   * elements.
-   *
-   * @static
-   * @memberOf _
-   * @since 3.0.0
-   * @category Array
-   * @param {Array} array The array to process.
-   * @param {number} [size=1] The length of each chunk
-   * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
-   * @returns {Array} Returns the new array of chunks.
-   * @example
-   *
-   * _.chunk(['a', 'b', 'c', 'd'], 2);
-   * // => [['a', 'b'], ['c', 'd']]
-   *
-   * _.chunk(['a', 'b', 'c', 'd'], 3);
-   * // => [['a', 'b', 'c'], ['d']]
-   */
-  function chunk(array, size, guard) {
-    if ((guard ? isIterateeCall(array, size, guard) : size === undefined)) {
-      size = 1;
-    } else {
-      size = nativeMax$4(toInteger(size), 0);
-    }
-    var length = array == null ? 0 : array.length;
-    if (!length || size < 1) {
-      return [];
-    }
-    var index = 0,
-        resIndex = 0,
-        result = Array(nativeCeil(length / size));
 
-    while (index < length) {
-      result[resIndex++] = baseSlice(array, index, (index += size));
-    }
-    return result;
-  }
+          // Warnings
+          body.call(commitWarnings);
 
-  var hashes = createCommonjsModule(function (module, exports) {
-  /**
-   * jshashes - https://github.com/h2non/jshashes
-   * Released under the "New BSD" license
-   *
-   * Algorithms specification:
-   *
-   * MD5 - http://www.ietf.org/rfc/rfc1321.txt
-   * RIPEMD-160 - http://homes.esat.kuleuven.be/~bosselae/ripemd160.html
-   * SHA1   - http://csrc.nist.gov/publications/fips/fips180-4/fips-180-4.pdf
-   * SHA256 - http://csrc.nist.gov/publications/fips/fips180-4/fips-180-4.pdf
-   * SHA512 - http://csrc.nist.gov/publications/fips/fips180-4/fips-180-4.pdf
-   * HMAC - http://www.ietf.org/rfc/rfc2104.txt
-   */
-  (function() {
-    var Hashes;
 
-    function utf8Encode(str) {
-      var x, y, output = '',
-        i = -1,
-        l;
+          // Upload Explanation
+          var saveSection = body.selectAll('.save-section')
+              .data([0]);
 
-      if (str && str.length) {
-        l = str.length;
-        while ((i += 1) < l) {
-          /* Decode utf-16 surrogate pairs */
-          x = str.charCodeAt(i);
-          y = i + 1 < l ? str.charCodeAt(i + 1) : 0;
-          if (0xD800 <= x && x <= 0xDBFF && 0xDC00 <= y && y <= 0xDFFF) {
-            x = 0x10000 + ((x & 0x03FF) << 10) + (y & 0x03FF);
-            i += 1;
-          }
-          /* Encode output as utf-8 */
-          if (x <= 0x7F) {
-            output += String.fromCharCode(x);
-          } else if (x <= 0x7FF) {
-            output += String.fromCharCode(0xC0 | ((x >>> 6) & 0x1F),
-              0x80 | (x & 0x3F));
-          } else if (x <= 0xFFFF) {
-            output += String.fromCharCode(0xE0 | ((x >>> 12) & 0x0F),
-              0x80 | ((x >>> 6) & 0x3F),
-              0x80 | (x & 0x3F));
-          } else if (x <= 0x1FFFFF) {
-            output += String.fromCharCode(0xF0 | ((x >>> 18) & 0x07),
-              0x80 | ((x >>> 12) & 0x3F),
-              0x80 | ((x >>> 6) & 0x3F),
-              0x80 | (x & 0x3F));
-          }
-        }
-      }
-      return output;
-    }
+          saveSection = saveSection.enter()
+              .append('div')
+              .attr('class','modal-section save-section fillL cf')
+              .merge(saveSection);
+
+          var prose = saveSection.selectAll('.commit-info')
+              .data([0]);
 
-    function utf8Decode(str) {
-      var i, ac, c1, c2, c3, arr = [],
-        l;
-      i = ac = c1 = c2 = c3 = 0;
+          prose = prose.enter()
+              .append('p')
+              .attr('class', 'commit-info')
+              .text(t('commit.upload_explanation'))
+              .merge(prose);
 
-      if (str && str.length) {
-        l = str.length;
-        str += '';
+          osm.userDetails(function(err, user) {
+              if (err) return;
 
-        while (i < l) {
-          c1 = str.charCodeAt(i);
-          ac += 1;
-          if (c1 < 128) {
-            arr[ac] = String.fromCharCode(c1);
-            i += 1;
-          } else if (c1 > 191 && c1 < 224) {
-            c2 = str.charCodeAt(i + 1);
-            arr[ac] = String.fromCharCode(((c1 & 31) << 6) | (c2 & 63));
-            i += 2;
-          } else {
-            c2 = str.charCodeAt(i + 1);
-            c3 = str.charCodeAt(i + 2);
-            arr[ac] = String.fromCharCode(((c1 & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));
-            i += 3;
-          }
-        }
-      }
-      return arr.join('');
-    }
+              var userLink = select(document.createElement('div'));
 
-    /**
-     * Add integers, wrapping at 2^32. This uses 16-bit operations internally
-     * to work around bugs in some JS interpreters.
-     */
+              _userDetails = user;
 
-    function safe_add(x, y) {
-      var lsw = (x & 0xFFFF) + (y & 0xFFFF),
-        msw = (x >> 16) + (y >> 16) + (lsw >> 16);
-      return (msw << 16) | (lsw & 0xFFFF);
-    }
+              if (user.image_url) {
+                  userLink
+                      .append('img')
+                      .attr('src', user.image_url)
+                      .attr('class', 'icon pre-text user-icon');
+              }
 
-    /**
-     * Bitwise rotate a 32-bit number to the left.
-     */
+              userLink
+                  .append('a')
+                  .attr('class', 'user-info')
+                  .text(user.display_name)
+                  .attr('href', osm.userURL(user.display_name))
+                  .attr('tabindex', -1)
+                  .attr('target', '_blank');
 
-    function bit_rol(num, cnt) {
-      return (num << cnt) | (num >>> (32 - cnt));
-    }
+              prose
+                  .html(t('commit.upload_explanation_with_user', { user: userLink.html() }));
+          });
 
-    /**
-     * Convert a raw string to a hex string
-     */
 
-    function rstr2hex(input, hexcase) {
-      var hex_tab = hexcase ? '0123456789ABCDEF' : '0123456789abcdef',
-        output = '',
-        x, i = 0,
-        l = input.length;
-      for (; i < l; i += 1) {
-        x = input.charCodeAt(i);
-        output += hex_tab.charAt((x >>> 4) & 0x0F) + hex_tab.charAt(x & 0x0F);
-      }
-      return output;
-    }
+          // Request Review
+          var requestReview = saveSection.selectAll('.request-review')
+              .data([0]);
 
-    /**
-     * Convert an array of big-endian words to a string
-     */
+          // Enter
+          var requestReviewEnter = requestReview.enter()
+              .append('div')
+              .attr('class', 'request-review');
 
-    function binb2rstr(input) {
-      var i, l = input.length * 32,
-        output = '';
-      for (i = 0; i < l; i += 8) {
-        output += String.fromCharCode((input[i >> 5] >>> (24 - i % 32)) & 0xFF);
-      }
-      return output;
-    }
+          var labelEnter = requestReviewEnter
+              .append('label')
+              .attr('for', 'commit-input-request-review');
 
-    /**
-     * Convert an array of little-endian words to a string
-     */
+          labelEnter
+              .append('input')
+              .attr('type', 'checkbox')
+              .attr('id', 'commit-input-request-review');
 
-    function binl2rstr(input) {
-      var i, l = input.length * 32,
-        output = '';
-      for (i = 0; i < l; i += 8) {
-        output += String.fromCharCode((input[i >> 5] >>> (i % 32)) & 0xFF);
-      }
-      return output;
-    }
+          labelEnter
+              .append('span')
+              .text(t('commit.request_review'));
 
-    /**
-     * Convert a raw string to an array of little-endian words
-     * Characters >255 have their high-byte silently ignored.
-     */
+          // Update
+          requestReview = requestReview
+              .merge(requestReviewEnter);
 
-    function rstr2binl(input) {
-      var i, l = input.length * 8,
-        output = Array(input.length >> 2),
-        lo = output.length;
-      for (i = 0; i < lo; i += 1) {
-        output[i] = 0;
-      }
-      for (i = 0; i < l; i += 8) {
-        output[i >> 5] |= (input.charCodeAt(i / 8) & 0xFF) << (i % 32);
-      }
-      return output;
-    }
+          var requestReviewInput = requestReview.selectAll('input')
+              .property('checked', isReviewRequested(_changeset$1.tags))
+              .on('change', toggleRequestReview);
 
-    /**
-     * Convert a raw string to an array of big-endian words
-     * Characters >255 have their high-byte silently ignored.
-     */
 
-    function rstr2binb(input) {
-      var i, l = input.length * 8,
-        output = Array(input.length >> 2),
-        lo = output.length;
-      for (i = 0; i < lo; i += 1) {
-        output[i] = 0;
-      }
-      for (i = 0; i < l; i += 8) {
-        output[i >> 5] |= (input.charCodeAt(i / 8) & 0xFF) << (24 - i % 32);
-      }
-      return output;
-    }
+          // Buttons
+          var buttonSection = saveSection.selectAll('.buttons')
+              .data([0]);
 
-    /**
-     * Convert a raw string to an arbitrary string encoding
-     */
+          // enter
+          var buttonEnter = buttonSection.enter()
+              .append('div')
+              .attr('class', 'buttons fillL cf');
 
-    function rstr2any(input, encoding) {
-      var divisor = encoding.length,
-        remainders = Array(),
-        i, q, x, ld, quotient, dividend, output, full_length;
+          buttonEnter
+              .append('button')
+              .attr('class', 'secondary-action button cancel-button')
+              .append('span')
+              .attr('class', 'label')
+              .text(t('commit.cancel'));
 
-      /* Convert to an array of 16-bit big-endian values, forming the dividend */
-      dividend = Array(Math.ceil(input.length / 2));
-      ld = dividend.length;
-      for (i = 0; i < ld; i += 1) {
-        dividend[i] = (input.charCodeAt(i * 2) << 8) | input.charCodeAt(i * 2 + 1);
-      }
+          var uploadButton = buttonEnter
+              .append('button')
+              .attr('class', 'action button save-button');
 
-      /**
-       * Repeatedly perform a long division. The binary array forms the dividend,
-       * the length of the encoding is the divisor. Once computed, the quotient
-       * forms the dividend for the next step. We stop when the dividend is zerHashes.
-       * All remainders are stored for later use.
-       */
-      while (dividend.length > 0) {
-        quotient = Array();
-        x = 0;
-        for (i = 0; i < dividend.length; i += 1) {
-          x = (x << 16) + dividend[i];
-          q = Math.floor(x / divisor);
-          x -= q * divisor;
-          if (quotient.length > 0 || q > 0) {
-            quotient[quotient.length] = q;
-          }
-        }
-        remainders[remainders.length] = x;
-        dividend = quotient;
-      }
+          uploadButton.append('span')
+              .attr('class', 'label')
+              .text(t('commit.save'));
 
-      /* Convert the remainders to the output string */
-      output = '';
-      for (i = remainders.length - 1; i >= 0; i--) {
-        output += encoding.charAt(remainders[i]);
-      }
+          var uploadBlockerTooltipText = getUploadBlockerMessage();
 
-      /* Append leading zero equivalents */
-      full_length = Math.ceil(input.length * 8 / (Math.log(encoding.length) / Math.log(2)));
-      for (i = output.length; i < full_length; i += 1) {
-        output = encoding[0] + output;
-      }
-      return output;
-    }
+          // update
+          buttonSection = buttonSection
+              .merge(buttonEnter);
 
-    /**
-     * Convert a raw string to a base-64 string
-     */
+          buttonSection.selectAll('.cancel-button')
+              .on('click.cancel', function() {
+                  var selectedID = commitChanges.entityID();
+                  dispatch$1.call('cancel', this, selectedID);
+              });
 
-    function rstr2b64(input, b64pad) {
-      var tab = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/',
-        output = '',
-        len = input.length,
-        i, j, triplet;
-      b64pad = b64pad || '=';
-      for (i = 0; i < len; i += 3) {
-        triplet = (input.charCodeAt(i) << 16) | (i + 1 < len ? input.charCodeAt(i + 1) << 8 : 0) | (i + 2 < len ? input.charCodeAt(i + 2) : 0);
-        for (j = 0; j < 4; j += 1) {
-          if (i * 8 + j * 6 > input.length * 8) {
-            output += b64pad;
-          } else {
-            output += tab.charAt((triplet >>> 6 * (3 - j)) & 0x3F);
+          buttonSection.selectAll('.save-button')
+              .classed('disabled', uploadBlockerTooltipText !== null)
+              .on('click.save', function() {
+                  if (!select(this).classed('disabled')) {
+                      this.blur();    // avoid keeping focus on the button - #4641
+                      dispatch$1.call('save', this, _changeset$1);
+                  }
+              });
+
+          // remove any existing tooltip
+          tooltip().destroyAny(buttonSection.selectAll('.save-button'));
+
+          if (uploadBlockerTooltipText) {
+              buttonSection.selectAll('.save-button')
+                  .call(tooltip().title(uploadBlockerTooltipText).placement('top'));
           }
-        }
-      }
-      return output;
-    }
 
-    Hashes = {
-      /**
-       * @property {String} version
-       * @readonly
-       */
-      VERSION: '1.0.6',
-      /**
-       * @member Hashes
-       * @class Base64
-       * @constructor
-       */
-      Base64: function() {
-        // private properties
-        var tab = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/',
-          pad = '=', // default pad according with the RFC standard
-          utf8 = true; // by default enable UTF-8 support encoding
+          // Raw Tag Editor
+          var tagSection = body.selectAll('.tag-section.raw-tag-editor')
+              .data([0]);
 
-        // public method for encoding
-        this.encode = function(input) {
-          var i, j, triplet,
-            output = '',
-            len = input.length;
+          tagSection = tagSection.enter()
+              .append('div')
+              .attr('class', 'modal-section tag-section raw-tag-editor')
+              .merge(tagSection);
 
-          pad = pad || '=';
-          input = (utf8) ? utf8Encode(input) : input;
+          var expanded = !tagSection.selectAll('a.hide-toggle.expanded').empty();
+          tagSection
+              .call(rawTagEditor
+                  .expanded(expanded)
+                  .readOnlyTags(readOnlyTags)
+                  .tags(clone(_changeset$1.tags))
+              );
 
-          for (i = 0; i < len; i += 3) {
-            triplet = (input.charCodeAt(i) << 16) | (i + 1 < len ? input.charCodeAt(i + 1) << 8 : 0) | (i + 2 < len ? input.charCodeAt(i + 2) : 0);
-            for (j = 0; j < 4; j += 1) {
-              if (i * 8 + j * 6 > len * 8) {
-                output += pad;
-              } else {
-                output += tab.charAt((triplet >>> 6 * (3 - j)) & 0x3F);
-              }
-            }
-          }
-          return output;
-        };
 
-        // public method for decoding
-        this.decode = function(input) {
-          // var b64 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';
-          var i, o1, o2, o3, h1, h2, h3, h4, bits, ac,
-            dec = '',
-            arr = [];
-          if (!input) {
-            return input;
-          }
+          // Change summary
+          body.call(commitChanges);
 
-          i = ac = 0;
-          input = input.replace(new RegExp('\\' + pad, 'gi'), ''); // use '='
-          //input += '';
 
-          do { // unpack four hexets into three octets using index points in b64
-            h1 = tab.indexOf(input.charAt(i += 1));
-            h2 = tab.indexOf(input.charAt(i += 1));
-            h3 = tab.indexOf(input.charAt(i += 1));
-            h4 = tab.indexOf(input.charAt(i += 1));
+          function toggleRequestReview() {
+              var rr = requestReviewInput.property('checked');
+              updateChangeset({ review_requested: (rr ? 'yes' : undefined) });
 
-            bits = h1 << 18 | h2 << 12 | h3 << 6 | h4;
+              var expanded = !tagSection.selectAll('a.hide-toggle.expanded').empty();
+              tagSection
+                  .call(rawTagEditor
+                      .expanded(expanded)
+                      .readOnlyTags(readOnlyTags)
+                      .tags(clone(_changeset$1.tags))
+                  );
+          }
+      }
 
-            o1 = bits >> 16 & 0xff;
-            o2 = bits >> 8 & 0xff;
-            o3 = bits & 0xff;
-            ac += 1;
 
-            if (h3 === 64) {
-              arr[ac] = String.fromCharCode(o1);
-            } else if (h4 === 64) {
-              arr[ac] = String.fromCharCode(o1, o2);
-            } else {
-              arr[ac] = String.fromCharCode(o1, o2, o3);
-            }
-          } while (i < input.length);
+      function getUploadBlockerMessage() {
+          var errorCount = context.validator().getErrors().length;
+          if (errorCount > 0) {
+              return t('commit.outstanding_errors_message', { count: errorCount });
 
-          dec = arr.join('');
-          dec = (utf8) ? utf8Decode(dec) : dec;
+          } else {
+              var n = select('#preset-input-comment').node();
+              var hasChangesetComment = n && n.value.length > 0;
+              if (!hasChangesetComment) {
+                  return t('commit.comment_needed_message');
+              }
+          }
+          return null;
+      }
 
-          return dec;
-        };
 
-        // set custom pad string
-        this.setPad = function(str) {
-          pad = str || pad;
-          return this;
-        };
-        // set custom tab string characters
-        this.setTab = function(str) {
-          tab = str || tab;
-          return this;
-        };
-        this.setUTF8 = function(bool) {
-          if (typeof bool === 'boolean') {
-            utf8 = bool;
+      function changeTags(changed, onInput) {
+          if (changed.hasOwnProperty('comment')) {
+              if (changed.comment === undefined) {
+                  changed.comment = '';
+              }
+              if (!onInput) {
+                  context.storage('comment', changed.comment);
+                  context.storage('commentDate', Date.now());
+              }
+          }
+          if (changed.hasOwnProperty('source')) {
+              if (changed.source === undefined) {
+                  context.storage('source', null);
+              } else if (!onInput) {
+                  context.storage('source', changed.source);
+                  context.storage('commentDate', Date.now());
+              }
           }
-          return this;
-        };
-      },
 
-      /**
-       * CRC-32 calculation
-       * @member Hashes
-       * @method CRC32
-       * @static
-       * @param {String} str Input String
-       * @return {String}
-       */
-      CRC32: function(str) {
-        var crc = 0,
-          x = 0,
-          y = 0,
-          table, i, iTop;
-        str = utf8Encode(str);
+          updateChangeset(changed, onInput);
 
-        table = [
-          '00000000 77073096 EE0E612C 990951BA 076DC419 706AF48F E963A535 9E6495A3 0EDB8832 ',
-          '79DCB8A4 E0D5E91E 97D2D988 09B64C2B 7EB17CBD E7B82D07 90BF1D91 1DB71064 6AB020F2 F3B97148 ',
-          '84BE41DE 1ADAD47D 6DDDE4EB F4D4B551 83D385C7 136C9856 646BA8C0 FD62F97A 8A65C9EC 14015C4F ',
-          '63066CD9 FA0F3D63 8D080DF5 3B6E20C8 4C69105E D56041E4 A2677172 3C03E4D1 4B04D447 D20D85FD ',
-          'A50AB56B 35B5A8FA 42B2986C DBBBC9D6 ACBCF940 32D86CE3 45DF5C75 DCD60DCF ABD13D59 26D930AC ',
-          '51DE003A C8D75180 BFD06116 21B4F4B5 56B3C423 CFBA9599 B8BDA50F 2802B89E 5F058808 C60CD9B2 ',
-          'B10BE924 2F6F7C87 58684C11 C1611DAB B6662D3D 76DC4190 01DB7106 98D220BC EFD5102A 71B18589 ',
-          '06B6B51F 9FBFE4A5 E8B8D433 7807C9A2 0F00F934 9609A88E E10E9818 7F6A0DBB 086D3D2D 91646C97 ',
-          'E6635C01 6B6B51F4 1C6C6162 856530D8 F262004E 6C0695ED 1B01A57B 8208F4C1 F50FC457 65B0D9C6 ',
-          '12B7E950 8BBEB8EA FCB9887C 62DD1DDF 15DA2D49 8CD37CF3 FBD44C65 4DB26158 3AB551CE A3BC0074 ',
-          'D4BB30E2 4ADFA541 3DD895D7 A4D1C46D D3D6F4FB 4369E96A 346ED9FC AD678846 DA60B8D0 44042D73 ',
-          '33031DE5 AA0A4C5F DD0D7CC9 5005713C 270241AA BE0B1010 C90C2086 5768B525 206F85B3 B966D409 ',
-          'CE61E49F 5EDEF90E 29D9C998 B0D09822 C7D7A8B4 59B33D17 2EB40D81 B7BD5C3B C0BA6CAD EDB88320 ',
-          '9ABFB3B6 03B6E20C 74B1D29A EAD54739 9DD277AF 04DB2615 73DC1683 E3630B12 94643B84 0D6D6A3E ',
-          '7A6A5AA8 E40ECF0B 9309FF9D 0A00AE27 7D079EB1 F00F9344 8708A3D2 1E01F268 6906C2FE F762575D ',
-          '806567CB 196C3671 6E6B06E7 FED41B76 89D32BE0 10DA7A5A 67DD4ACC F9B9DF6F 8EBEEFF9 17B7BE43 ',
-          '60B08ED5 D6D6A3E8 A1D1937E 38D8C2C4 4FDFF252 D1BB67F1 A6BC5767 3FB506DD 48B2364B D80D2BDA ',
-          'AF0A1B4C 36034AF6 41047A60 DF60EFC3 A867DF55 316E8EEF 4669BE79 CB61B38C BC66831A 256FD2A0 ',
-          '5268E236 CC0C7795 BB0B4703 220216B9 5505262F C5BA3BBE B2BD0B28 2BB45A92 5CB36A04 C2D7FFA7 ',
-          'B5D0CF31 2CD99E8B 5BDEAE1D 9B64C2B0 EC63F226 756AA39C 026D930A 9C0906A9 EB0E363F 72076785 ',
-          '05005713 95BF4A82 E2B87A14 7BB12BAE 0CB61B38 92D28E9B E5D5BE0D 7CDCEFB7 0BDBDF21 86D3D2D4 ',
-          'F1D4E242 68DDB3F8 1FDA836E 81BE16CD F6B9265B 6FB077E1 18B74777 88085AE6 FF0F6A70 66063BCA ',
-          '11010B5C 8F659EFF F862AE69 616BFFD3 166CCF45 A00AE278 D70DD2EE 4E048354 3903B3C2 A7672661 ',
-          'D06016F7 4969474D 3E6E77DB AED16A4A D9D65ADC 40DF0B66 37D83BF0 A9BCAE53 DEBB9EC5 47B2CF7F ',
-          '30B5FFE9 BDBDF21C CABAC28A 53B39330 24B4A3A6 BAD03605 CDD70693 54DE5729 23D967BF B3667A2E ',
-          'C4614AB8 5D681B02 2A6F2B94 B40BBE37 C30C8EA1 5A05DF1B 2D02EF8D'
-        ].join('');
+          if (_selection) {
+              _selection.call(commit);
+          }
+      }
 
-        crc = crc ^ (-1);
-        for (i = 0, iTop = str.length; i < iTop; i += 1) {
-          y = (crc ^ str.charCodeAt(i)) & 0xFF;
-          x = '0x' + table.substr(y * 9, 8);
-          crc = (crc >>> 8) ^ x;
-        }
-        // always return a positive number (that's what >>> 0 does)
-        return (crc ^ (-1)) >>> 0;
-      },
-      /**
-       * @member Hashes
-       * @class MD5
-       * @constructor
-       * @param {Object} [config]
-       *
-       * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
-       * Digest Algorithm, as defined in RFC 1321.
-       * Version 2.2 Copyright (C) Paul Johnston 1999 - 2009
-       * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
-       * See <http://pajhome.org.uk/crypt/md5> for more infHashes.
-       */
-      MD5: function(options) {
-        /**
-         * Private config properties. You may need to tweak these to be compatible with
-         * the server-side, but the defaults work in most cases.
-         * See {@link Hashes.MD5#method-setUpperCase} and {@link Hashes.SHA1#method-setUpperCase}
-         */
-        var hexcase = (options && typeof options.uppercase === 'boolean') ? options.uppercase : false, // hexadecimal output case format. false - lowercase; true - uppercase
-          b64pad = (options && typeof options.pad === 'string') ? options.pad : '=', // base-64 pad character. Defaults to '=' for strict RFC compliance
-          utf8 = (options && typeof options.utf8 === 'boolean') ? options.utf8 : true; // enable/disable utf8 encoding
 
-        // privileged (public) methods
-        this.hex = function(s) {
-          return rstr2hex(rstr(s, utf8), hexcase);
-        };
-        this.b64 = function(s) {
-          return rstr2b64(rstr(s), b64pad);
-        };
-        this.any = function(s, e) {
-          return rstr2any(rstr(s, utf8), e);
-        };
-        this.raw = function(s) {
-          return rstr(s, utf8);
-        };
-        this.hex_hmac = function(k, d) {
-          return rstr2hex(rstr_hmac(k, d), hexcase);
-        };
-        this.b64_hmac = function(k, d) {
-          return rstr2b64(rstr_hmac(k, d), b64pad);
-        };
-        this.any_hmac = function(k, d, e) {
-          return rstr2any(rstr_hmac(k, d), e);
-        };
-        /**
-         * Perform a simple self-test to see if the VM is working
-         * @return {String} Hexadecimal hash sample
-         */
-        this.vm_test = function() {
-          return hex('abc').toLowerCase() === '900150983cd24fb0d6963f7d28e17f72';
-        };
-        /**
-         * Enable/disable uppercase hexadecimal returned string
-         * @param {Boolean}
-         * @return {Object} this
-         */
-        this.setUpperCase = function(a) {
-          if (typeof a === 'boolean') {
-            hexcase = a;
+      function findHashtags(tags, commentOnly) {
+          var inComment = commentTags();
+          var inHashTags = hashTags();
+
+          if (inComment !== null) {                    // when hashtags are detected in comment...
+              context.storage('hashtags', null);       // always remove stored hashtags - #4304
+              if (commentOnly) { inHashTags = null; }  // optionally override hashtags field
+          }
+          return unionBy(inComment, inHashTags, function (s) {
+              return s.toLowerCase();
+          });
+
+          // Extract hashtags from `comment`
+          function commentTags() {
+              return tags.comment
+                  .replace(/http\S*/g, '')  // drop anything that looks like a URL - #4289
+                  .match(hashtagRegex);
           }
-          return this;
-        };
-        /**
-         * Defines a base64 pad string
-         * @param {String} Pad
-         * @return {Object} this
-         */
-        this.setPad = function(a) {
-          b64pad = a || b64pad;
-          return this;
-        };
-        /**
-         * Defines a base64 pad string
-         * @param {Boolean}
-         * @return {Object} [this]
-         */
-        this.setUTF8 = function(a) {
-          if (typeof a === 'boolean') {
-            utf8 = a;
+
+          // Extract and clean hashtags from `hashtags`
+          function hashTags() {
+              var t = tags.hashtags || '';
+              return t
+                  .split(/[,;\s]+/)
+                  .map(function (s) {
+                      if (s[0] !== '#') { s = '#' + s; }    // prepend '#'
+                      var matched = s.match(hashtagRegex);
+                      return matched && matched[0];
+                  }).filter(Boolean);                       // exclude falsey
           }
-          return this;
-        };
+      }
 
-        // private methods
 
-        /**
-         * Calculate the MD5 of a raw string
-         */
+      function isReviewRequested(tags) {
+          var rr = tags.review_requested;
+          if (rr === undefined) return false;
+          rr = rr.trim().toLowerCase();
+          return !(rr === '' || rr === 'no');
+      }
 
-        function rstr(s) {
-          s = (utf8) ? utf8Encode(s) : s;
-          return binl2rstr(binl(rstr2binl(s), s.length * 8));
-        }
 
-        /**
-         * Calculate the HMAC-MD5, of a key and some data (raw strings)
-         */
+      function updateChangeset(changed, onInput) {
+          var tags = clone(_changeset$1.tags);
 
-        function rstr_hmac(key, data) {
-          var bkey, ipad, opad, hash, i;
+          forEach(changed, function(v, k) {
+              k = k.trim().substr(0, 255);
+              if (readOnlyTags.indexOf(k) !== -1) return;
 
-          key = (utf8) ? utf8Encode(key) : key;
-          data = (utf8) ? utf8Encode(data) : data;
-          bkey = rstr2binl(key);
-          if (bkey.length > 16) {
-            bkey = binl(bkey, key.length * 8);
+              if (k !== '' && v !== undefined) {
+                  if (onInput) {
+                      tags[k] = v;
+                  } else {
+                      tags[k] = v.trim().substr(0, 255);
+                  }
+              } else {
+                  delete tags[k];
+              }
+          });
+
+          if (!onInput) {
+              // when changing the comment, override hashtags with any found in comment.
+              var commentOnly = changed.hasOwnProperty('comment') && (changed.comment !== '');
+              var arr = findHashtags(tags, commentOnly);
+              if (arr.length) {
+                  tags.hashtags = arr.join(';').substr(0, 255);
+                  context.storage('hashtags', tags.hashtags);
+              } else {
+                  delete tags.hashtags;
+                  context.storage('hashtags', null);
+              }
           }
 
-          ipad = Array(16), opad = Array(16);
-          for (i = 0; i < 16; i += 1) {
-            ipad[i] = bkey[i] ^ 0x36363636;
-            opad[i] = bkey[i] ^ 0x5C5C5C5C;
+          // always update userdetails, just in case user reauthenticates as someone else
+          if (_userDetails && _userDetails.changesets_count !== undefined) {
+              var changesetsCount = parseInt(_userDetails.changesets_count, 10) + 1;  // #4283
+              tags.changesets_count = String(changesetsCount);
+
+              // first 100 edits - new user
+              if (changesetsCount <= 100) {
+                  var s;
+                  s = context.storage('walkthrough_completed');
+                  if (s) {
+                      tags['ideditor:walkthrough_completed'] = s;
+                  }
+
+                  s = context.storage('walkthrough_progress');
+                  if (s) {
+                      tags['ideditor:walkthrough_progress'] = s;
+                  }
+
+                  s = context.storage('walkthrough_started');
+                  if (s) {
+                      tags['ideditor:walkthrough_started'] = s;
+                  }
+              }
+          } else {
+              delete tags.changesets_count;
           }
-          hash = binl(ipad.concat(rstr2binl(data)), 512 + data.length * 8);
-          return binl2rstr(binl(opad.concat(hash), 512 + 128));
-        }
 
-        /**
-         * Calculate the MD5 of an array of little-endian words, and a bit length.
-         */
+          if (!isEqual(_changeset$1.tags, tags)) {
+              _changeset$1 = _changeset$1.update({ tags: tags });
+          }
+      }
 
-        function binl(x, len) {
-          var i, olda, oldb, oldc, oldd,
-            a = 1732584193,
-            b = -271733879,
-            c = -1732584194,
-            d = 271733878;
 
-          /* append padding */
-          x[len >> 5] |= 0x80 << ((len) % 32);
-          x[(((len + 64) >>> 9) << 4) + 14] = len;
+      commit.reset = function() {
+          _changeset$1 = null;
+      };
 
-          for (i = 0; i < x.length; i += 16) {
-            olda = a;
-            oldb = b;
-            oldc = c;
-            oldd = d;
 
-            a = md5_ff(a, b, c, d, x[i + 0], 7, -680876936);
-            d = md5_ff(d, a, b, c, x[i + 1], 12, -389564586);
-            c = md5_ff(c, d, a, b, x[i + 2], 17, 606105819);
-            b = md5_ff(b, c, d, a, x[i + 3], 22, -1044525330);
-            a = md5_ff(a, b, c, d, x[i + 4], 7, -176418897);
-            d = md5_ff(d, a, b, c, x[i + 5], 12, 1200080426);
-            c = md5_ff(c, d, a, b, x[i + 6], 17, -1473231341);
-            b = md5_ff(b, c, d, a, x[i + 7], 22, -45705983);
-            a = md5_ff(a, b, c, d, x[i + 8], 7, 1770035416);
-            d = md5_ff(d, a, b, c, x[i + 9], 12, -1958414417);
-            c = md5_ff(c, d, a, b, x[i + 10], 17, -42063);
-            b = md5_ff(b, c, d, a, x[i + 11], 22, -1990404162);
-            a = md5_ff(a, b, c, d, x[i + 12], 7, 1804603682);
-            d = md5_ff(d, a, b, c, x[i + 13], 12, -40341101);
-            c = md5_ff(c, d, a, b, x[i + 14], 17, -1502002290);
-            b = md5_ff(b, c, d, a, x[i + 15], 22, 1236535329);
+      return utilRebind(commit, dispatch$1, 'on');
+  }
 
-            a = md5_gg(a, b, c, d, x[i + 1], 5, -165796510);
-            d = md5_gg(d, a, b, c, x[i + 6], 9, -1069501632);
-            c = md5_gg(c, d, a, b, x[i + 11], 14, 643717713);
-            b = md5_gg(b, c, d, a, x[i + 0], 20, -373897302);
-            a = md5_gg(a, b, c, d, x[i + 5], 5, -701558691);
-            d = md5_gg(d, a, b, c, x[i + 10], 9, 38016083);
-            c = md5_gg(c, d, a, b, x[i + 15], 14, -660478335);
-            b = md5_gg(b, c, d, a, x[i + 4], 20, -405537848);
-            a = md5_gg(a, b, c, d, x[i + 9], 5, 568446438);
-            d = md5_gg(d, a, b, c, x[i + 14], 9, -1019803690);
-            c = md5_gg(c, d, a, b, x[i + 3], 14, -187363961);
-            b = md5_gg(b, c, d, a, x[i + 8], 20, 1163531501);
-            a = md5_gg(a, b, c, d, x[i + 13], 5, -1444681467);
-            d = md5_gg(d, a, b, c, x[i + 2], 9, -51403784);
-            c = md5_gg(c, d, a, b, x[i + 7], 14, 1735328473);
-            b = md5_gg(b, c, d, a, x[i + 12], 20, -1926607734);
+  function uiConflicts(context) {
+      var dispatch$1 = dispatch('cancel', 'save');
+      var keybinding = utilKeybinding('conflicts');
+      var _origChanges;
+      var _conflictList;
 
-            a = md5_hh(a, b, c, d, x[i + 5], 4, -378558);
-            d = md5_hh(d, a, b, c, x[i + 8], 11, -2022574463);
-            c = md5_hh(c, d, a, b, x[i + 11], 16, 1839030562);
-            b = md5_hh(b, c, d, a, x[i + 14], 23, -35309556);
-            a = md5_hh(a, b, c, d, x[i + 1], 4, -1530992060);
-            d = md5_hh(d, a, b, c, x[i + 4], 11, 1272893353);
-            c = md5_hh(c, d, a, b, x[i + 7], 16, -155497632);
-            b = md5_hh(b, c, d, a, x[i + 10], 23, -1094730640);
-            a = md5_hh(a, b, c, d, x[i + 13], 4, 681279174);
-            d = md5_hh(d, a, b, c, x[i + 0], 11, -358537222);
-            c = md5_hh(c, d, a, b, x[i + 3], 16, -722521979);
-            b = md5_hh(b, c, d, a, x[i + 6], 23, 76029189);
-            a = md5_hh(a, b, c, d, x[i + 9], 4, -640364487);
-            d = md5_hh(d, a, b, c, x[i + 12], 11, -421815835);
-            c = md5_hh(c, d, a, b, x[i + 15], 16, 530742520);
-            b = md5_hh(b, c, d, a, x[i + 2], 23, -995338651);
 
-            a = md5_ii(a, b, c, d, x[i + 0], 6, -198630844);
-            d = md5_ii(d, a, b, c, x[i + 7], 10, 1126891415);
-            c = md5_ii(c, d, a, b, x[i + 14], 15, -1416354905);
-            b = md5_ii(b, c, d, a, x[i + 5], 21, -57434055);
-            a = md5_ii(a, b, c, d, x[i + 12], 6, 1700485571);
-            d = md5_ii(d, a, b, c, x[i + 3], 10, -1894986606);
-            c = md5_ii(c, d, a, b, x[i + 10], 15, -1051523);
-            b = md5_ii(b, c, d, a, x[i + 1], 21, -2054922799);
-            a = md5_ii(a, b, c, d, x[i + 8], 6, 1873313359);
-            d = md5_ii(d, a, b, c, x[i + 15], 10, -30611744);
-            c = md5_ii(c, d, a, b, x[i + 6], 15, -1560198380);
-            b = md5_ii(b, c, d, a, x[i + 13], 21, 1309151649);
-            a = md5_ii(a, b, c, d, x[i + 4], 6, -145523070);
-            d = md5_ii(d, a, b, c, x[i + 11], 10, -1120210379);
-            c = md5_ii(c, d, a, b, x[i + 2], 15, 718787259);
-            b = md5_ii(b, c, d, a, x[i + 9], 21, -343485551);
+      function keybindingOn() {
+          select(document)
+              .call(keybinding.on('⎋', cancel, true));
+      }
 
-            a = safe_add(a, olda);
-            b = safe_add(b, oldb);
-            c = safe_add(c, oldc);
-            d = safe_add(d, oldd);
-          }
-          return Array(a, b, c, d);
-        }
+      function keybindingOff() {
+          select(document)
+              .call(keybinding.unbind);
+      }
 
-        /**
-         * These functions implement the four basic operations the algorithm uses.
-         */
+      function tryAgain() {
+          keybindingOff();
+          dispatch$1.call('save');
+      }
 
-        function md5_cmn(q, a, b, x, s, t) {
-          return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s), b);
-        }
+      function cancel() {
+          keybindingOff();
+          dispatch$1.call('cancel');
+      }
 
-        function md5_ff(a, b, c, d, x, s, t) {
-          return md5_cmn((b & c) | ((~b) & d), a, b, x, s, t);
-        }
 
-        function md5_gg(a, b, c, d, x, s, t) {
-          return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t);
-        }
+      function conflicts(selection) {
+          keybindingOn();
 
-        function md5_hh(a, b, c, d, x, s, t) {
-          return md5_cmn(b ^ c ^ d, a, b, x, s, t);
-        }
+          var headerEnter = selection.selectAll('.header')
+              .data([0])
+              .enter()
+              .append('div')
+              .attr('class', 'header fillL');
 
-        function md5_ii(a, b, c, d, x, s, t) {
-          return md5_cmn(c ^ (b | (~d)), a, b, x, s, t);
-        }
-      },
-      /**
-       * @member Hashes
-       * @class Hashes.SHA1
-       * @param {Object} [config]
-       * @constructor
-       *
-       * A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined in FIPS 180-1
-       * Version 2.2 Copyright Paul Johnston 2000 - 2009.
-       * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
-       * See http://pajhome.org.uk/crypt/md5 for details.
-       */
-      SHA1: function(options) {
-        /**
-         * Private config properties. You may need to tweak these to be compatible with
-         * the server-side, but the defaults work in most cases.
-         * See {@link Hashes.MD5#method-setUpperCase} and {@link Hashes.SHA1#method-setUpperCase}
-         */
-        var hexcase = (options && typeof options.uppercase === 'boolean') ? options.uppercase : false, // hexadecimal output case format. false - lowercase; true - uppercase
-          b64pad = (options && typeof options.pad === 'string') ? options.pad : '=', // base-64 pad character. Defaults to '=' for strict RFC compliance
-          utf8 = (options && typeof options.utf8 === 'boolean') ? options.utf8 : true; // enable/disable utf8 encoding
+          headerEnter
+              .append('button')
+              .attr('class', 'fr')
+              .on('click', cancel)
+              .call(svgIcon('#iD-icon-close'));
 
-        // public methods
-        this.hex = function(s) {
-          return rstr2hex(rstr(s, utf8), hexcase);
-        };
-        this.b64 = function(s) {
-          return rstr2b64(rstr(s, utf8), b64pad);
-        };
-        this.any = function(s, e) {
-          return rstr2any(rstr(s, utf8), e);
-        };
-        this.raw = function(s) {
-          return rstr(s, utf8);
-        };
-        this.hex_hmac = function(k, d) {
-          return rstr2hex(rstr_hmac(k, d));
-        };
-        this.b64_hmac = function(k, d) {
-          return rstr2b64(rstr_hmac(k, d), b64pad);
-        };
-        this.any_hmac = function(k, d, e) {
-          return rstr2any(rstr_hmac(k, d), e);
-        };
-        /**
-         * Perform a simple self-test to see if the VM is working
-         * @return {String} Hexadecimal hash sample
-         * @public
-         */
-        this.vm_test = function() {
-          return hex('abc').toLowerCase() === '900150983cd24fb0d6963f7d28e17f72';
-        };
-        /**
-         * @description Enable/disable uppercase hexadecimal returned string
-         * @param {boolean}
-         * @return {Object} this
-         * @public
-         */
-        this.setUpperCase = function(a) {
-          if (typeof a === 'boolean') {
-            hexcase = a;
-          }
-          return this;
-        };
-        /**
-         * @description Defines a base64 pad string
-         * @param {string} Pad
-         * @return {Object} this
-         * @public
-         */
-        this.setPad = function(a) {
-          b64pad = a || b64pad;
-          return this;
-        };
-        /**
-         * @description Defines a base64 pad string
-         * @param {boolean}
-         * @return {Object} this
-         * @public
-         */
-        this.setUTF8 = function(a) {
-          if (typeof a === 'boolean') {
-            utf8 = a;
-          }
-          return this;
-        };
+          headerEnter
+              .append('h3')
+              .text(t('save.conflict.header'));
 
-        // private methods
+          var bodyEnter = selection.selectAll('.body')
+              .data([0])
+              .enter()
+              .append('div')
+              .attr('class', 'body fillL');
 
-        /**
-         * Calculate the SHA-512 of a raw string
-         */
+          var conflictsHelpEnter = bodyEnter
+              .append('div')
+              .attr('class', 'conflicts-help')
+              .text(t('save.conflict.help'));
 
-        function rstr(s) {
-          s = (utf8) ? utf8Encode(s) : s;
-          return binb2rstr(binb(rstr2binb(s), s.length * 8));
-        }
 
-        /**
-         * Calculate the HMAC-SHA1 of a key and some data (raw strings)
-         */
+          // Download changes link
+          var detected = utilDetect();
+          var changeset = new osmChangeset();
 
-        function rstr_hmac(key, data) {
-          var bkey, ipad, opad, i, hash;
-          key = (utf8) ? utf8Encode(key) : key;
-          data = (utf8) ? utf8Encode(data) : data;
-          bkey = rstr2binb(key);
+          delete changeset.id;  // Export without changeset_id
 
-          if (bkey.length > 16) {
-            bkey = binb(bkey, key.length * 8);
+          var data = JXON.stringify(changeset.osmChangeJXON(_origChanges));
+          var blob = new Blob([data], { type: 'text/xml;charset=utf-8;' });
+          var fileName = 'changes.osc';
+
+          var linkEnter = conflictsHelpEnter.selectAll('.download-changes')
+              .append('a')
+              .attr('class', 'download-changes');
+
+          if (detected.download) {      // All except IE11 and Edge
+              linkEnter                 // download the data as a file
+                  .attr('href', window.URL.createObjectURL(blob))
+                  .attr('download', fileName);
+
+          } else {                      // IE11 and Edge
+              linkEnter                 // open data uri in a new tab
+                  .attr('target', '_blank')
+                  .on('click.download', function() {
+                      navigator.msSaveBlob(blob, fileName);
+                  });
           }
-          ipad = Array(16), opad = Array(16);
-          for (i = 0; i < 16; i += 1) {
-            ipad[i] = bkey[i] ^ 0x36363636;
-            opad[i] = bkey[i] ^ 0x5C5C5C5C;
+
+          linkEnter
+              .call(svgIcon('#iD-icon-load', 'inline'))
+              .append('span')
+              .text(t('save.conflict.download_changes'));
+
+
+          bodyEnter
+              .append('div')
+              .attr('class', 'conflict-container fillL3')
+              .call(showConflict, 0);
+
+          bodyEnter
+              .append('div')
+              .attr('class', 'conflicts-done')
+              .attr('opacity', 0)
+              .style('display', 'none')
+              .text(t('save.conflict.done'));
+
+          var buttonsEnter = bodyEnter
+              .append('div')
+              .attr('class','buttons col12 joined conflicts-buttons');
+
+          buttonsEnter
+              .append('button')
+              .attr('disabled', _conflictList.length > 1)
+              .attr('class', 'action conflicts-button col6')
+              .text(t('save.title'))
+              .on('click.try_again', tryAgain);
+
+          buttonsEnter
+              .append('button')
+              .attr('class', 'secondary-action conflicts-button col6')
+              .text(t('confirm.cancel'))
+              .on('click.cancel', cancel);
+      }
+
+
+      function showConflict(selection, index) {
+          index = utilWrap(index, _conflictList.length);
+
+          var parent = select(selection.node().parentNode);
+
+          // enable save button if this is the last conflict being reviewed..
+          if (index === _conflictList.length - 1) {
+              window.setTimeout(function() {
+                  parent.select('.conflicts-button')
+                      .attr('disabled', null);
+
+                  parent.select('.conflicts-done')
+                      .transition()
+                      .attr('opacity', 1)
+                      .style('display', 'block');
+              }, 250);
           }
-          hash = binb(ipad.concat(rstr2binb(data)), 512 + data.length * 8);
-          return binb2rstr(binb(opad.concat(hash), 512 + 160));
-        }
 
-        /**
-         * Calculate the SHA-1 of an array of big-endian words, and a bit length
-         */
+          var conflict = selection
+              .selectAll('.conflict')
+              .data([_conflictList[index]]);
+
+          conflict.exit()
+              .remove();
+
+          var conflictEnter = conflict.enter()
+              .append('div')
+              .attr('class', 'conflict');
+
+          conflictEnter
+              .append('h4')
+              .attr('class', 'conflict-count')
+              .text(t('save.conflict.count', { num: index + 1, total: _conflictList.length }));
+
+          conflictEnter
+              .append('a')
+              .attr('class', 'conflict-description')
+              .attr('href', '#')
+              .text(function(d) { return d.name; })
+              .on('click', function(d) {
+                  event.preventDefault();
+                  zoomToEntity(d.id);
+              });
+
+          var details = conflictEnter
+              .append('div')
+              .attr('class', 'conflict-detail-container');
+
+          details
+              .append('ul')
+              .attr('class', 'conflict-detail-list')
+              .selectAll('li')
+              .data(function(d) { return d.details || []; })
+              .enter()
+              .append('li')
+              .attr('class', 'conflict-detail-item')
+              .html(function(d) { return d; });
+
+          details
+              .append('div')
+              .attr('class', 'conflict-choices')
+              .call(addChoices);
+
+          details
+              .append('div')
+              .attr('class', 'conflict-nav-buttons joined cf')
+              .selectAll('button')
+              .data(['previous', 'next'])
+              .enter()
+              .append('button')
+              .text(function(d) { return t('save.conflict.' + d); })
+              .attr('class', 'conflict-nav-button action col6')
+              .attr('disabled', function(d, i) {
+                  return (i === 0 && index === 0) ||
+                      (i === 1 && index === _conflictList.length - 1) || null;
+              })
+              .on('click', function(d, i) {
+                  event.preventDefault();
+
+                  var container = parent.selectAll('.conflict-container');
+                  var sign = (i === 0 ? -1 : 1);
 
-        function binb(x, len) {
-          var i, j, t, olda, oldb, oldc, oldd, olde,
-            w = Array(80),
-            a = 1732584193,
-            b = -271733879,
-            c = -1732584194,
-            d = 271733878,
-            e = -1009589776;
+                  container
+                      .selectAll('.conflict')
+                      .remove();
 
-          /* append padding */
-          x[len >> 5] |= 0x80 << (24 - len % 32);
-          x[((len + 64 >> 9) << 4) + 15] = len;
+                  container
+                      .call(showConflict, index + sign);
+              });
 
-          for (i = 0; i < x.length; i += 16) {
-            olda = a;
-            oldb = b;
-            oldc = c;
-            oldd = d;
-            olde = e;
+      }
 
-            for (j = 0; j < 80; j += 1) {
-              if (j < 16) {
-                w[j] = x[i + j];
-              } else {
-                w[j] = bit_rol(w[j - 3] ^ w[j - 8] ^ w[j - 14] ^ w[j - 16], 1);
-              }
-              t = safe_add(safe_add(bit_rol(a, 5), sha1_ft(j, b, c, d)),
-                safe_add(safe_add(e, w[j]), sha1_kt(j)));
-              e = d;
-              d = c;
-              c = bit_rol(b, 30);
-              b = a;
-              a = t;
-            }
 
-            a = safe_add(a, olda);
-            b = safe_add(b, oldb);
-            c = safe_add(c, oldc);
-            d = safe_add(d, oldd);
-            e = safe_add(e, olde);
-          }
-          return Array(a, b, c, d, e);
-        }
+      function addChoices(selection) {
+          var choices = selection
+              .append('ul')
+              .attr('class', 'layer-list')
+              .selectAll('li')
+              .data(function(d) { return d.choices || []; });
 
-        /**
-         * Perform the appropriate triplet combination function for the current
-         * iteration
-         */
+          // enter
+          var choicesEnter = choices.enter()
+              .append('li')
+              .attr('class', 'layer');
 
-        function sha1_ft(t, b, c, d) {
-          if (t < 20) {
-            return (b & c) | ((~b) & d);
-          }
-          if (t < 40) {
-            return b ^ c ^ d;
-          }
-          if (t < 60) {
-            return (b & c) | (b & d) | (c & d);
-          }
-          return b ^ c ^ d;
-        }
+          var labelEnter = choicesEnter
+              .append('label');
 
-        /**
-         * Determine the appropriate additive constant for the current iteration
-         */
+          labelEnter
+              .append('input')
+              .attr('type', 'radio')
+              .attr('name', function(d) { return d.id; })
+              .on('change', function(d, i) {
+                  var ul = this.parentNode.parentNode.parentNode;
+                  ul.__data__.chosen = i;
+                  choose(ul, d);
+              });
 
-        function sha1_kt(t) {
-          return (t < 20) ? 1518500249 : (t < 40) ? 1859775393 :
-            (t < 60) ? -1894007588 : -899497514;
-        }
-      },
-      /**
-       * @class Hashes.SHA256
-       * @param {config}
-       *
-       * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined in FIPS 180-2
-       * Version 2.2 Copyright Angel Marin, Paul Johnston 2000 - 2009.
-       * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
-       * See http://pajhome.org.uk/crypt/md5 for details.
-       * Also http://anmar.eu.org/projects/jssha2/
-       */
-      SHA256: function(options) {
-        /**
-         * Private properties configuration variables. You may need to tweak these to be compatible with
-         * the server-side, but the defaults work in most cases.
-         * @see this.setUpperCase() method
-         * @see this.setPad() method
-         */
-        var hexcase = (options && typeof options.uppercase === 'boolean') ? options.uppercase : false, // hexadecimal output case format. false - lowercase; true - uppercase  */
-          b64pad = (options && typeof options.pad === 'string') ? options.pad : '=',
-          /* base-64 pad character. Default '=' for strict RFC compliance   */
-          utf8 = (options && typeof options.utf8 === 'boolean') ? options.utf8 : true,
-          /* enable/disable utf8 encoding */
-          sha256_K;
+          labelEnter
+              .append('span')
+              .text(function(d) { return d.text; });
 
-        /* privileged (public) methods */
-        this.hex = function(s) {
-          return rstr2hex(rstr(s, utf8));
-        };
-        this.b64 = function(s) {
-          return rstr2b64(rstr(s, utf8), b64pad);
-        };
-        this.any = function(s, e) {
-          return rstr2any(rstr(s, utf8), e);
-        };
-        this.raw = function(s) {
-          return rstr(s, utf8);
-        };
-        this.hex_hmac = function(k, d) {
-          return rstr2hex(rstr_hmac(k, d));
-        };
-        this.b64_hmac = function(k, d) {
-          return rstr2b64(rstr_hmac(k, d), b64pad);
-        };
-        this.any_hmac = function(k, d, e) {
-          return rstr2any(rstr_hmac(k, d), e);
-        };
-        /**
-         * Perform a simple self-test to see if the VM is working
-         * @return {String} Hexadecimal hash sample
-         * @public
-         */
-        this.vm_test = function() {
-          return hex('abc').toLowerCase() === '900150983cd24fb0d6963f7d28e17f72';
-        };
-        /**
-         * Enable/disable uppercase hexadecimal returned string
-         * @param {boolean}
-         * @return {Object} this
-         * @public
-         */
-        this.setUpperCase = function(a) {
-          if (typeof a === 'boolean') {
-            hexcase = a;
-          }
-          return this;
-        };
-        /**
-         * @description Defines a base64 pad string
-         * @param {string} Pad
-         * @return {Object} this
-         * @public
-         */
-        this.setPad = function(a) {
-          b64pad = a || b64pad;
-          return this;
-        };
-        /**
-         * Defines a base64 pad string
-         * @param {boolean}
-         * @return {Object} this
-         * @public
-         */
-        this.setUTF8 = function(a) {
-          if (typeof a === 'boolean') {
-            utf8 = a;
-          }
-          return this;
-        };
+          // update
+          choicesEnter
+              .merge(choices)
+              .each(function(d, i) {
+                  var ul = this.parentNode;
+                  if (ul.__data__.chosen === i) {
+                      choose(ul, d);
+                  }
+              });
+      }
 
-        // private methods
 
-        /**
-         * Calculate the SHA-512 of a raw string
-         */
+      function choose(ul, datum) {
+          if (event) event.preventDefault();
 
-        function rstr(s, utf8) {
-          s = (utf8) ? utf8Encode(s) : s;
-          return binb2rstr(binb(rstr2binb(s), s.length * 8));
-        }
+          select(ul)
+              .selectAll('li')
+              .classed('active', function(d) { return d === datum; })
+              .selectAll('input')
+              .property('checked', function(d) { return d === datum; });
 
-        /**
-         * Calculate the HMAC-sha256 of a key and some data (raw strings)
-         */
+          var extent = geoExtent();
+          var entity;
 
-        function rstr_hmac(key, data) {
-          key = (utf8) ? utf8Encode(key) : key;
-          data = (utf8) ? utf8Encode(data) : data;
-          var hash, i = 0,
-            bkey = rstr2binb(key),
-            ipad = Array(16),
-            opad = Array(16);
+          entity = context.graph().hasEntity(datum.id);
+          if (entity) extent._extend(entity.extent(context.graph()));
 
-          if (bkey.length > 16) {
-            bkey = binb(bkey, key.length * 8);
-          }
+          datum.action();
 
-          for (; i < 16; i += 1) {
-            ipad[i] = bkey[i] ^ 0x36363636;
-            opad[i] = bkey[i] ^ 0x5C5C5C5C;
-          }
+          entity = context.graph().hasEntity(datum.id);
+          if (entity) extent._extend(entity.extent(context.graph()));
 
-          hash = binb(ipad.concat(rstr2binb(data)), 512 + data.length * 8);
-          return binb2rstr(binb(opad.concat(hash), 512 + 256));
-        }
+          zoomToEntity(datum.id, extent);
+      }
 
-        /*
-         * Main sha256 function, with its support functions
-         */
 
-        function sha256_S(X, n) {
-          return (X >>> n) | (X << (32 - n));
-        }
+      function zoomToEntity(id, extent) {
+          context.surface().selectAll('.hover')
+              .classed('hover', false);
 
-        function sha256_R(X, n) {
-          return (X >>> n);
-        }
+          var entity = context.graph().hasEntity(id);
+          if (entity) {
+              if (extent) {
+                  context.map().trimmedExtent(extent);
+              } else {
+                  context.map().zoomToEase(entity);
+              }
+              context.surface().selectAll(utilEntityOrMemberSelector([entity.id], context.graph()))
+                  .classed('hover', true);
+          }
+      }
 
-        function sha256_Ch(x, y, z) {
-          return ((x & y) ^ ((~x) & z));
-        }
 
-        function sha256_Maj(x, y, z) {
-          return ((x & y) ^ (x & z) ^ (y & z));
-        }
+      // The conflict list should be an array of objects like:
+      // {
+      //     id: id,
+      //     name: entityName(local),
+      //     details: merge.conflicts(),
+      //     chosen: 1,
+      //     choices: [
+      //         choice(id, keepMine, forceLocal),
+      //         choice(id, keepTheirs, forceRemote)
+      //     ]
+      // }
+      conflicts.conflictList = function(_) {
+          if (!arguments.length) return _conflictList;
+          _conflictList = _;
+          return conflicts;
+      };
 
-        function sha256_Sigma0256(x) {
-          return (sha256_S(x, 2) ^ sha256_S(x, 13) ^ sha256_S(x, 22));
-        }
 
-        function sha256_Sigma1256(x) {
-          return (sha256_S(x, 6) ^ sha256_S(x, 11) ^ sha256_S(x, 25));
-        }
+      conflicts.origChanges = function(_) {
+          if (!arguments.length) return _origChanges;
+          _origChanges = _;
+          return conflicts;
+      };
 
-        function sha256_Gamma0256(x) {
-          return (sha256_S(x, 7) ^ sha256_S(x, 18) ^ sha256_R(x, 3));
-        }
 
-        function sha256_Gamma1256(x) {
-          return (sha256_S(x, 17) ^ sha256_S(x, 19) ^ sha256_R(x, 10));
-        }
+      return utilRebind(conflicts, dispatch$1, 'on');
+  }
 
-        sha256_K = [
-          1116352408, 1899447441, -1245643825, -373957723, 961987163, 1508970993, -1841331548, -1424204075, -670586216, 310598401, 607225278, 1426881987,
-          1925078388, -2132889090, -1680079193, -1046744716, -459576895, -272742522,
-          264347078, 604807628, 770255983, 1249150122, 1555081692, 1996064986, -1740746414, -1473132947, -1341970488, -1084653625, -958395405, -710438585,
-          113926993, 338241895, 666307205, 773529912, 1294757372, 1396182291,
-          1695183700, 1986661051, -2117940946, -1838011259, -1564481375, -1474664885, -1035236496, -949202525, -778901479, -694614492, -200395387, 275423344,
-          430227734, 506948616, 659060556, 883997877, 958139571, 1322822218,
-          1537002063, 1747873779, 1955562222, 2024104815, -2067236844, -1933114872, -1866530822, -1538233109, -1090935817, -965641998
-        ];
+  function uiDataEditor(context) {
+      var dataHeader = uiDataHeader();
+      var quickLinks = uiQuickLinks();
+      var rawTagEditor = uiRawTagEditor(context);
+      var _datum;
 
-        function binb(m, l) {
-          var HASH = [1779033703, -1150833019, 1013904242, -1521486534,
-            1359893119, -1694144372, 528734635, 1541459225
-          ];
-          var W = new Array(64);
-          var a, b, c, d, e, f, g, h;
-          var i, j, T1, T2;
 
-          /* append padding */
-          m[l >> 5] |= 0x80 << (24 - l % 32);
-          m[((l + 64 >> 9) << 4) + 15] = l;
+      function dataEditor(selection) {
+          // quick links
+          var choices = [{
+              id: 'zoom_to',
+              label: 'inspector.zoom_to.title',
+              tooltip: function() {
+                  return uiTooltipHtml(t('inspector.zoom_to.tooltip_data'), t('inspector.zoom_to.key'));
+              },
+              click: function zoomTo() {
+                  context.mode().zoomToSelected();
+              }
+          }];
 
-          for (i = 0; i < m.length; i += 16) {
-            a = HASH[0];
-            b = HASH[1];
-            c = HASH[2];
-            d = HASH[3];
-            e = HASH[4];
-            f = HASH[5];
-            g = HASH[6];
-            h = HASH[7];
 
-            for (j = 0; j < 64; j += 1) {
-              if (j < 16) {
-                W[j] = m[j + i];
-              } else {
-                W[j] = safe_add(safe_add(safe_add(sha256_Gamma1256(W[j - 2]), W[j - 7]),
-                  sha256_Gamma0256(W[j - 15])), W[j - 16]);
-              }
+          var header = selection.selectAll('.header')
+              .data([0]);
 
-              T1 = safe_add(safe_add(safe_add(safe_add(h, sha256_Sigma1256(e)), sha256_Ch(e, f, g)),
-                sha256_K[j]), W[j]);
-              T2 = safe_add(sha256_Sigma0256(a), sha256_Maj(a, b, c));
-              h = g;
-              g = f;
-              f = e;
-              e = safe_add(d, T1);
-              d = c;
-              c = b;
-              b = a;
-              a = safe_add(T1, T2);
-            }
+          var headerEnter = header.enter()
+              .append('div')
+              .attr('class', 'header fillL');
 
-            HASH[0] = safe_add(a, HASH[0]);
-            HASH[1] = safe_add(b, HASH[1]);
-            HASH[2] = safe_add(c, HASH[2]);
-            HASH[3] = safe_add(d, HASH[3]);
-            HASH[4] = safe_add(e, HASH[4]);
-            HASH[5] = safe_add(f, HASH[5]);
-            HASH[6] = safe_add(g, HASH[6]);
-            HASH[7] = safe_add(h, HASH[7]);
-          }
-          return HASH;
-        }
+          headerEnter
+              .append('button')
+              .attr('class', 'fr data-editor-close')
+              .on('click', function() {
+                  context.enter(modeBrowse(context));
+              })
+              .call(svgIcon('#iD-icon-close'));
 
-      },
+          headerEnter
+              .append('h3')
+              .text(t('map_data.title'));
 
-      /**
-       * @class Hashes.SHA512
-       * @param {config}
-       *
-       * A JavaScript implementation of the Secure Hash Algorithm, SHA-512, as defined in FIPS 180-2
-       * Version 2.2 Copyright Anonymous Contributor, Paul Johnston 2000 - 2009.
-       * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
-       * See http://pajhome.org.uk/crypt/md5 for details.
-       */
-      SHA512: function(options) {
-        /**
-         * Private properties configuration variables. You may need to tweak these to be compatible with
-         * the server-side, but the defaults work in most cases.
-         * @see this.setUpperCase() method
-         * @see this.setPad() method
-         */
-        var hexcase = (options && typeof options.uppercase === 'boolean') ? options.uppercase : false,
-          /* hexadecimal output case format. false - lowercase; true - uppercase  */
-          b64pad = (options && typeof options.pad === 'string') ? options.pad : '=',
-          /* base-64 pad character. Default '=' for strict RFC compliance   */
-          utf8 = (options && typeof options.utf8 === 'boolean') ? options.utf8 : true,
-          /* enable/disable utf8 encoding */
-          sha512_k;
 
-        /* privileged (public) methods */
-        this.hex = function(s) {
-          return rstr2hex(rstr(s));
-        };
-        this.b64 = function(s) {
-          return rstr2b64(rstr(s), b64pad);
-        };
-        this.any = function(s, e) {
-          return rstr2any(rstr(s), e);
-        };
-        this.raw = function(s) {
-          return rstr(s, utf8);
-        };
-        this.hex_hmac = function(k, d) {
-          return rstr2hex(rstr_hmac(k, d));
-        };
-        this.b64_hmac = function(k, d) {
-          return rstr2b64(rstr_hmac(k, d), b64pad);
-        };
-        this.any_hmac = function(k, d, e) {
-          return rstr2any(rstr_hmac(k, d), e);
-        };
-        /**
-         * Perform a simple self-test to see if the VM is working
-         * @return {String} Hexadecimal hash sample
-         * @public
-         */
-        this.vm_test = function() {
-          return hex('abc').toLowerCase() === '900150983cd24fb0d6963f7d28e17f72';
-        };
-        /**
-         * @description Enable/disable uppercase hexadecimal returned string
-         * @param {boolean}
-         * @return {Object} this
-         * @public
-         */
-        this.setUpperCase = function(a) {
-          if (typeof a === 'boolean') {
-            hexcase = a;
-          }
-          return this;
-        };
-        /**
-         * @description Defines a base64 pad string
-         * @param {string} Pad
-         * @return {Object} this
-         * @public
-         */
-        this.setPad = function(a) {
-          b64pad = a || b64pad;
-          return this;
-        };
-        /**
-         * @description Defines a base64 pad string
-         * @param {boolean}
-         * @return {Object} this
-         * @public
-         */
-        this.setUTF8 = function(a) {
-          if (typeof a === 'boolean') {
-            utf8 = a;
-          }
-          return this;
-        };
+          var body = selection.selectAll('.body')
+              .data([0]);
 
-        /* private methods */
+          body = body.enter()
+              .append('div')
+              .attr('class', 'body')
+              .merge(body);
 
-        /**
-         * Calculate the SHA-512 of a raw string
-         */
+          var editor = body.selectAll('.data-editor')
+              .data([0]);
 
-        function rstr(s) {
-          s = (utf8) ? utf8Encode(s) : s;
-          return binb2rstr(binb(rstr2binb(s), s.length * 8));
-        }
-        /*
-         * Calculate the HMAC-SHA-512 of a key and some data (raw strings)
-         */
+          editor.enter()
+              .append('div')
+              .attr('class', 'modal-section data-editor')
+              .merge(editor)
+              .call(dataHeader.datum(_datum))
+              .call(quickLinks.choices(choices));
 
-        function rstr_hmac(key, data) {
-          key = (utf8) ? utf8Encode(key) : key;
-          data = (utf8) ? utf8Encode(data) : data;
+          var rte = body.selectAll('.raw-tag-editor')
+              .data([0]);
+
+          rte.enter()
+              .append('div')
+              .attr('class', 'raw-tag-editor inspector-inner data-editor')
+              .merge(rte)
+              .call(rawTagEditor
+                  .expanded(true)
+                  .readOnlyTags([/./])
+                  .tags((_datum && _datum.properties) || {})
+                  .state('hover')
+              );
+      }
 
-          var hash, i = 0,
-            bkey = rstr2binb(key),
-            ipad = Array(32),
-            opad = Array(32);
 
-          if (bkey.length > 32) {
-            bkey = binb(bkey, key.length * 8);
-          }
+      dataEditor.datum = function(val) {
+          if (!arguments.length) return _datum;
+          _datum = val;
+          return this;
+      };
 
-          for (; i < 32; i += 1) {
-            ipad[i] = bkey[i] ^ 0x36363636;
-            opad[i] = bkey[i] ^ 0x5C5C5C5C;
-          }
 
-          hash = binb(ipad.concat(rstr2binb(data)), 1024 + data.length * 8);
-          return binb2rstr(binb(opad.concat(hash), 1024 + 512));
-        }
+      return dataEditor;
+  }
 
-        /**
-         * Calculate the SHA-512 of an array of big-endian dwords, and a bit length
-         */
+  function uiDataHeader() {
+      var _datum;
 
-        function binb(x, len) {
-          var j, i, l,
-            W = new Array(80),
-            hash = new Array(16),
-            //Initial hash values
-            H = [
-              new int64(0x6a09e667, -205731576),
-              new int64(-1150833019, -2067093701),
-              new int64(0x3c6ef372, -23791573),
-              new int64(-1521486534, 0x5f1d36f1),
-              new int64(0x510e527f, -1377402159),
-              new int64(-1694144372, 0x2b3e6c1f),
-              new int64(0x1f83d9ab, -79577749),
-              new int64(0x5be0cd19, 0x137e2179)
-            ],
-            T1 = new int64(0, 0),
-            T2 = new int64(0, 0),
-            a = new int64(0, 0),
-            b = new int64(0, 0),
-            c = new int64(0, 0),
-            d = new int64(0, 0),
-            e = new int64(0, 0),
-            f = new int64(0, 0),
-            g = new int64(0, 0),
-            h = new int64(0, 0),
-            //Temporary variables not specified by the document
-            s0 = new int64(0, 0),
-            s1 = new int64(0, 0),
-            Ch = new int64(0, 0),
-            Maj = new int64(0, 0),
-            r1 = new int64(0, 0),
-            r2 = new int64(0, 0),
-            r3 = new int64(0, 0);
 
-          if (sha512_k === undefined) {
-            //SHA512 constants
-            sha512_k = [
-              new int64(0x428a2f98, -685199838), new int64(0x71374491, 0x23ef65cd),
-              new int64(-1245643825, -330482897), new int64(-373957723, -2121671748),
-              new int64(0x3956c25b, -213338824), new int64(0x59f111f1, -1241133031),
-              new int64(-1841331548, -1357295717), new int64(-1424204075, -630357736),
-              new int64(-670586216, -1560083902), new int64(0x12835b01, 0x45706fbe),
-              new int64(0x243185be, 0x4ee4b28c), new int64(0x550c7dc3, -704662302),
-              new int64(0x72be5d74, -226784913), new int64(-2132889090, 0x3b1696b1),
-              new int64(-1680079193, 0x25c71235), new int64(-1046744716, -815192428),
-              new int64(-459576895, -1628353838), new int64(-272742522, 0x384f25e3),
-              new int64(0xfc19dc6, -1953704523), new int64(0x240ca1cc, 0x77ac9c65),
-              new int64(0x2de92c6f, 0x592b0275), new int64(0x4a7484aa, 0x6ea6e483),
-              new int64(0x5cb0a9dc, -1119749164), new int64(0x76f988da, -2096016459),
-              new int64(-1740746414, -295247957), new int64(-1473132947, 0x2db43210),
-              new int64(-1341970488, -1728372417), new int64(-1084653625, -1091629340),
-              new int64(-958395405, 0x3da88fc2), new int64(-710438585, -1828018395),
-              new int64(0x6ca6351, -536640913), new int64(0x14292967, 0xa0e6e70),
-              new int64(0x27b70a85, 0x46d22ffc), new int64(0x2e1b2138, 0x5c26c926),
-              new int64(0x4d2c6dfc, 0x5ac42aed), new int64(0x53380d13, -1651133473),
-              new int64(0x650a7354, -1951439906), new int64(0x766a0abb, 0x3c77b2a8),
-              new int64(-2117940946, 0x47edaee6), new int64(-1838011259, 0x1482353b),
-              new int64(-1564481375, 0x4cf10364), new int64(-1474664885, -1136513023),
-              new int64(-1035236496, -789014639), new int64(-949202525, 0x654be30),
-              new int64(-778901479, -688958952), new int64(-694614492, 0x5565a910),
-              new int64(-200395387, 0x5771202a), new int64(0x106aa070, 0x32bbd1b8),
-              new int64(0x19a4c116, -1194143544), new int64(0x1e376c08, 0x5141ab53),
-              new int64(0x2748774c, -544281703), new int64(0x34b0bcb5, -509917016),
-              new int64(0x391c0cb3, -976659869), new int64(0x4ed8aa4a, -482243893),
-              new int64(0x5b9cca4f, 0x7763e373), new int64(0x682e6ff3, -692930397),
-              new int64(0x748f82ee, 0x5defb2fc), new int64(0x78a5636f, 0x43172f60),
-              new int64(-2067236844, -1578062990), new int64(-1933114872, 0x1a6439ec),
-              new int64(-1866530822, 0x23631e28), new int64(-1538233109, -561857047),
-              new int64(-1090935817, -1295615723), new int64(-965641998, -479046869),
-              new int64(-903397682, -366583396), new int64(-779700025, 0x21c0c207),
-              new int64(-354779690, -840897762), new int64(-176337025, -294727304),
-              new int64(0x6f067aa, 0x72176fba), new int64(0xa637dc5, -1563912026),
-              new int64(0x113f9804, -1090974290), new int64(0x1b710b35, 0x131c471b),
-              new int64(0x28db77f5, 0x23047d84), new int64(0x32caab7b, 0x40c72493),
-              new int64(0x3c9ebe0a, 0x15c9bebc), new int64(0x431d67c4, -1676669620),
-              new int64(0x4cc5d4be, -885112138), new int64(0x597f299c, -60457430),
-              new int64(0x5fcb6fab, 0x3ad6faec), new int64(0x6c44198c, 0x4a475817)
-            ];
-          }
+      function dataHeader(selection) {
+          var header = selection.selectAll('.data-header')
+              .data(
+                  (_datum ? [_datum] : []),
+                  function(d) { return d.__featurehash__; }
+              );
 
-          for (i = 0; i < 80; i += 1) {
-            W[i] = new int64(0, 0);
-          }
+          header.exit()
+              .remove();
 
-          // append padding to the source string. The format is described in the FIPS.
-          x[len >> 5] |= 0x80 << (24 - (len & 0x1f));
-          x[((len + 128 >> 10) << 5) + 31] = len;
-          l = x.length;
-          for (i = 0; i < l; i += 32) { //32 dwords is the block size
-            int64copy(a, H[0]);
-            int64copy(b, H[1]);
-            int64copy(c, H[2]);
-            int64copy(d, H[3]);
-            int64copy(e, H[4]);
-            int64copy(f, H[5]);
-            int64copy(g, H[6]);
-            int64copy(h, H[7]);
+          var headerEnter = header.enter()
+              .append('div')
+              .attr('class', 'data-header');
 
-            for (j = 0; j < 16; j += 1) {
-              W[j].h = x[i + 2 * j];
-              W[j].l = x[i + 2 * j + 1];
-            }
+          var iconEnter = headerEnter
+              .append('div')
+              .attr('class', 'data-header-icon');
 
-            for (j = 16; j < 80; j += 1) {
-              //sigma1
-              int64rrot(r1, W[j - 2], 19);
-              int64revrrot(r2, W[j - 2], 29);
-              int64shr(r3, W[j - 2], 6);
-              s1.l = r1.l ^ r2.l ^ r3.l;
-              s1.h = r1.h ^ r2.h ^ r3.h;
-              //sigma0
-              int64rrot(r1, W[j - 15], 1);
-              int64rrot(r2, W[j - 15], 8);
-              int64shr(r3, W[j - 15], 7);
-              s0.l = r1.l ^ r2.l ^ r3.l;
-              s0.h = r1.h ^ r2.h ^ r3.h;
+          iconEnter
+              .append('div')
+              .attr('class', 'preset-icon-28')
+              .call(svgIcon('#iD-icon-data', 'note-fill'));
 
-              int64add4(W[j], s1, W[j - 7], s0, W[j - 16]);
-            }
+          headerEnter
+              .append('div')
+              .attr('class', 'data-header-label')
+              .text(t('map_data.layers.custom.title'));
+      }
 
-            for (j = 0; j < 80; j += 1) {
-              //Ch
-              Ch.l = (e.l & f.l) ^ (~e.l & g.l);
-              Ch.h = (e.h & f.h) ^ (~e.h & g.h);
 
-              //Sigma1
-              int64rrot(r1, e, 14);
-              int64rrot(r2, e, 18);
-              int64revrrot(r3, e, 9);
-              s1.l = r1.l ^ r2.l ^ r3.l;
-              s1.h = r1.h ^ r2.h ^ r3.h;
+      dataHeader.datum = function(val) {
+          if (!arguments.length) return _datum;
+          _datum = val;
+          return this;
+      };
 
-              //Sigma0
-              int64rrot(r1, a, 28);
-              int64revrrot(r2, a, 2);
-              int64revrrot(r3, a, 7);
-              s0.l = r1.l ^ r2.l ^ r3.l;
-              s0.h = r1.h ^ r2.h ^ r3.h;
 
-              //Maj
-              Maj.l = (a.l & b.l) ^ (a.l & c.l) ^ (b.l & c.l);
-              Maj.h = (a.h & b.h) ^ (a.h & c.h) ^ (b.h & c.h);
+      return dataHeader;
+  }
 
-              int64add5(T1, h, s1, Ch, sha512_k[j], W[j]);
-              int64add(T2, s0, Maj);
+  function uiEditMenu(context, operations) {
+      var menu;
+      var center = [0, 0];
+      var offset = [0, 0];
+      var tooltip;
 
-              int64copy(h, g);
-              int64copy(g, f);
-              int64copy(f, e);
-              int64add(e, d, T1);
-              int64copy(d, c);
-              int64copy(c, b);
-              int64copy(b, a);
-              int64add(a, T1, T2);
-            }
-            int64add(H[0], H[0], a);
-            int64add(H[1], H[1], b);
-            int64add(H[2], H[2], c);
-            int64add(H[3], H[3], d);
-            int64add(H[4], H[4], e);
-            int64add(H[5], H[5], f);
-            int64add(H[6], H[6], g);
-            int64add(H[7], H[7], h);
-          }
+      var p = 8;               // top padding
+      var m = 4;               // top margin
+      var h = 15;              // height of icon
+      var vpBottomMargin = 45; // viewport bottom margin
+      var vpSideMargin = 35;   // viewport side margin
+      var buttonWidth = 44;
+      var buttonHeight = (2 * p + h);
+      var menuWidth = buttonWidth;
+      var menuHeight = (2 * m) + operations.length * buttonHeight;
+      var menuSideMargin = 10;
+      var tooltipWidth = 200;
+      var tooltipHeight = 200;  // a reasonable guess, real height depends on tooltip contents
 
-          //represent the hash as an array of 32-bit dwords
-          for (i = 0; i < 8; i += 1) {
-            hash[2 * i] = H[i].h;
-            hash[2 * i + 1] = H[i].l;
-          }
-          return hash;
-        }
 
-        //A constructor for 64-bit numbers
+      var editMenu = function (selection) {
+          if (!operations.length) return;
 
-        function int64(h, l) {
-          this.h = h;
-          this.l = l;
-          //this.toString = int64toString;
-        }
+          selection.node().parentNode.focus();
 
-        //Copies src into dst, assuming both are 64-bit numbers
+          var isRTL = textDirection === 'rtl';
+          var viewport = context.surfaceRect();
 
-        function int64copy(dst, src) {
-          dst.h = src.h;
-          dst.l = src.l;
-        }
+          if (!isRTL && (center[0] + menuSideMargin + menuWidth) > (viewport.width - vpSideMargin)) {
+              // menu is going left-to-right and near right viewport edge, go left instead
+              isRTL = true;
+          } else if (isRTL && (center[0] - menuSideMargin - menuWidth) < vpSideMargin) {
+              // menu is going right-to-left and near left viewport edge, go right instead
+              isRTL = false;
+          }
 
-        //Right-rotates a 64-bit number by shift
-        //Won't handle cases of shift>=32
-        //The function revrrot() is for that
+          offset[0] = (isRTL ? -1 * (menuSideMargin + menuWidth) : menuSideMargin);
 
-        function int64rrot(dst, x, shift) {
-          dst.l = (x.l >>> shift) | (x.h << (32 - shift));
-          dst.h = (x.h >>> shift) | (x.l << (32 - shift));
-        }
+          if (center[1] + menuHeight > (viewport.height - vpBottomMargin)) {
+              // menu is near bottom viewport edge, shift upwards
+              offset[1] = -1 * (center[1] + menuHeight - viewport.height + vpBottomMargin);
+          }
 
-        //Reverses the dwords of the source and then rotates right by shift.
-        //This is equivalent to rotation by 32+shift
+          var origin = [ center[0] + offset[0], center[1] + offset[1] ];
 
-        function int64revrrot(dst, x, shift) {
-          dst.l = (x.h >>> shift) | (x.l << (32 - shift));
-          dst.h = (x.l >>> shift) | (x.h << (32 - shift));
-        }
+          menu = selection
+              .append('g')
+              .attr('class', 'edit-menu')
+              .attr('transform', 'translate(' + origin + ')')
+              .attr('opacity', 0);
 
-        //Bitwise-shifts right a 64-bit number by shift
-        //Won't handle shift>=32, but it's never needed in SHA512
+          menu
+              .transition()
+              .attr('opacity', 1);
 
-        function int64shr(dst, x, shift) {
-          dst.l = (x.l >>> shift) | (x.h << (32 - shift));
-          dst.h = (x.h >>> shift);
-        }
+          menu
+              .append('rect')
+              .attr('class', 'edit-menu-background')
+              .attr('x', 4)
+              .attr('rx', 4)
+              .attr('ry', 4)
+              .attr('width', menuWidth)
+              .attr('height', menuHeight)
+              .attr('stroke-linecap', 'round');
 
-        //Adds two 64-bit numbers
-        //Like the original implementation, does not rely on 32-bit operations
 
-        function int64add(dst, x, y) {
-          var w0 = (x.l & 0xffff) + (y.l & 0xffff);
-          var w1 = (x.l >>> 16) + (y.l >>> 16) + (w0 >>> 16);
-          var w2 = (x.h & 0xffff) + (y.h & 0xffff) + (w1 >>> 16);
-          var w3 = (x.h >>> 16) + (y.h >>> 16) + (w2 >>> 16);
-          dst.l = (w0 & 0xffff) | (w1 << 16);
-          dst.h = (w2 & 0xffff) | (w3 << 16);
-        }
+          var button = menu.selectAll('.edit-menu-item')
+              .data(operations)
+              .enter()
+              .append('g')
+              .attr('class', function (d) { return 'edit-menu-item edit-menu-item-' + d.id; })
+              .classed('disabled', function (d) { return d.disabled(); })
+              .attr('transform', function (d, i) {
+                  return 'translate(' + geoVecFloor([
+                      0,
+                      m + i * buttonHeight
+                  ]).join(',') + ')';
+              });
 
-        //Same, except with 4 addends. Works faster than adding them one by one.
+          button
+              .append('rect')
+              .attr('x', 4)
+              .attr('width', buttonWidth)
+              .attr('height', buttonHeight)
+              .on('click', click)
+              .on('mousedown', mousedown)
+              .on('mouseover', mouseover)
+              .on('mouseout', mouseout);
 
-        function int64add4(dst, a, b, c, d) {
-          var w0 = (a.l & 0xffff) + (b.l & 0xffff) + (c.l & 0xffff) + (d.l & 0xffff);
-          var w1 = (a.l >>> 16) + (b.l >>> 16) + (c.l >>> 16) + (d.l >>> 16) + (w0 >>> 16);
-          var w2 = (a.h & 0xffff) + (b.h & 0xffff) + (c.h & 0xffff) + (d.h & 0xffff) + (w1 >>> 16);
-          var w3 = (a.h >>> 16) + (b.h >>> 16) + (c.h >>> 16) + (d.h >>> 16) + (w2 >>> 16);
-          dst.l = (w0 & 0xffff) | (w1 << 16);
-          dst.h = (w2 & 0xffff) | (w3 << 16);
-        }
+          button
+              .append('use')
+              .attr('width', '20')
+              .attr('height', '20')
+              .attr('transform', function () { return 'translate(' + [2 * p, 5] + ')'; })
+              .attr('xlink:href', function (d) { return '#iD-operation-' + d.id; });
 
-        //Same, except with 5 addends
+          tooltip = select('#id-container')
+              .append('div')
+              .attr('class', 'tooltip-inner edit-menu-tooltip');
 
-        function int64add5(dst, a, b, c, d, e) {
-          var w0 = (a.l & 0xffff) + (b.l & 0xffff) + (c.l & 0xffff) + (d.l & 0xffff) + (e.l & 0xffff),
-            w1 = (a.l >>> 16) + (b.l >>> 16) + (c.l >>> 16) + (d.l >>> 16) + (e.l >>> 16) + (w0 >>> 16),
-            w2 = (a.h & 0xffff) + (b.h & 0xffff) + (c.h & 0xffff) + (d.h & 0xffff) + (e.h & 0xffff) + (w1 >>> 16),
-            w3 = (a.h >>> 16) + (b.h >>> 16) + (c.h >>> 16) + (d.h >>> 16) + (e.h >>> 16) + (w2 >>> 16);
-          dst.l = (w0 & 0xffff) | (w1 << 16);
-          dst.h = (w2 & 0xffff) | (w3 << 16);
-        }
-      },
-      /**
-       * @class Hashes.RMD160
-       * @constructor
-       * @param {Object} [config]
-       *
-       * A JavaScript implementation of the RIPEMD-160 Algorithm
-       * Version 2.2 Copyright Jeremy Lin, Paul Johnston 2000 - 2009.
-       * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
-       * See http://pajhome.org.uk/crypt/md5 for details.
-       * Also http://www.ocf.berkeley.edu/~jjlin/jsotp/
-       */
-      RMD160: function(options) {
-        /**
-         * Private properties configuration variables. You may need to tweak these to be compatible with
-         * the server-side, but the defaults work in most cases.
-         * @see this.setUpperCase() method
-         * @see this.setPad() method
-         */
-        var hexcase = (options && typeof options.uppercase === 'boolean') ? options.uppercase : false,
-          /* hexadecimal output case format. false - lowercase; true - uppercase  */
-          b64pad = (options && typeof options.pad === 'string') ? options.pa : '=',
-          /* base-64 pad character. Default '=' for strict RFC compliance   */
-          utf8 = (options && typeof options.utf8 === 'boolean') ? options.utf8 : true,
-          /* enable/disable utf8 encoding */
-          rmd160_r1 = [
-            0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
-            7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,
-            3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,
-            1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,
-            4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13
-          ],
-          rmd160_r2 = [
-            5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,
-            6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,
-            15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,
-            8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,
-            12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11
-          ],
-          rmd160_s1 = [
-            11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,
-            7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,
-            11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,
-            11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,
-            9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6
-          ],
-          rmd160_s2 = [
-            8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,
-            9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,
-            9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,
-            15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,
-            8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11
-          ];
 
-        /* privileged (public) methods */
-        this.hex = function(s) {
-          return rstr2hex(rstr(s, utf8));
-        };
-        this.b64 = function(s) {
-          return rstr2b64(rstr(s, utf8), b64pad);
-        };
-        this.any = function(s, e) {
-          return rstr2any(rstr(s, utf8), e);
-        };
-        this.raw = function(s) {
-          return rstr(s, utf8);
-        };
-        this.hex_hmac = function(k, d) {
-          return rstr2hex(rstr_hmac(k, d));
-        };
-        this.b64_hmac = function(k, d) {
-          return rstr2b64(rstr_hmac(k, d), b64pad);
-        };
-        this.any_hmac = function(k, d, e) {
-          return rstr2any(rstr_hmac(k, d), e);
-        };
-        /**
-         * Perform a simple self-test to see if the VM is working
-         * @return {String} Hexadecimal hash sample
-         * @public
-         */
-        this.vm_test = function() {
-          return hex('abc').toLowerCase() === '900150983cd24fb0d6963f7d28e17f72';
-        };
-        /**
-         * @description Enable/disable uppercase hexadecimal returned string
-         * @param {boolean}
-         * @return {Object} this
-         * @public
-         */
-        this.setUpperCase = function(a) {
-          if (typeof a === 'boolean') {
-            hexcase = a;
-          }
-          return this;
-        };
-        /**
-         * @description Defines a base64 pad string
-         * @param {string} Pad
-         * @return {Object} this
-         * @public
-         */
-        this.setPad = function(a) {
-          if (typeof a !== 'undefined') {
-            b64pad = a;
-          }
-          return this;
-        };
-        /**
-         * @description Defines a base64 pad string
-         * @param {boolean}
-         * @return {Object} this
-         * @public
-         */
-        this.setUTF8 = function(a) {
-          if (typeof a === 'boolean') {
-            utf8 = a;
+          function click(operation) {
+              event.stopPropagation();
+              if (operation.disabled()) return;
+              operation();
+              editMenu.close();
           }
-          return this;
-        };
-
-        /* private methods */
 
-        /**
-         * Calculate the rmd160 of a raw string
-         */
+          function mousedown() {
+              event.stopPropagation();  // https://github.com/openstreetmap/iD/issues/1869
+          }
 
-        function rstr(s) {
-          s = (utf8) ? utf8Encode(s) : s;
-          return binl2rstr(binl(rstr2binl(s), s.length * 8));
-        }
+          function mouseover(d, i) {
+              var tipX, tipY;
 
-        /**
-         * Calculate the HMAC-rmd160 of a key and some data (raw strings)
-         */
+              if (!isRTL) {
+                  tipX = viewport.left + origin[0] + menuSideMargin + menuWidth;
+              } else {
+                  tipX = viewport.left + origin[0] - 4 - tooltipWidth;
+              }
 
-        function rstr_hmac(key, data) {
-          key = (utf8) ? utf8Encode(key) : key;
-          data = (utf8) ? utf8Encode(data) : data;
-          var i, hash,
-            bkey = rstr2binl(key),
-            ipad = Array(16),
-            opad = Array(16);
+              if (tipX + tooltipWidth > viewport.right) {
+                  // tip is going left-to-right and near right viewport edge, go left instead
+                  tipX = viewport.left + origin[0] - 4 - tooltipWidth;
+              } else if (tipX < viewport.left) {
+                  // tip is going right-to-left and near left viewport edge, go right instead
+                  tipX = viewport.left + origin[0] + menuSideMargin + menuWidth;
+              }
 
-          if (bkey.length > 16) {
-            bkey = binl(bkey, key.length * 8);
+              tipY = viewport.top + origin[1] + (i * buttonHeight);
+              if (tipY + tooltipHeight > viewport.bottom) {
+                  // tip is near bottom viewport edge, shift upwards
+                  tipY -= tipY + tooltipHeight - viewport.bottom;
+              }
+
+              tooltip
+                  .style('left', tipX + 'px')
+                  .style('top', tipY + 'px')
+                  .style('display', 'block')
+                  .html(uiTooltipHtml(d.tooltip(), d.keys[0], d.title));
           }
 
-          for (i = 0; i < 16; i += 1) {
-            ipad[i] = bkey[i] ^ 0x36363636;
-            opad[i] = bkey[i] ^ 0x5C5C5C5C;
+          function mouseout() {
+              tooltip.style('display', 'none');
           }
-          hash = binl(ipad.concat(rstr2binl(data)), 512 + data.length * 8);
-          return binl2rstr(binl(opad.concat(hash), 512 + 160));
-        }
+      };
 
-        /**
-         * Convert an array of little-endian words to a string
-         */
 
-        function binl2rstr(input) {
-          var i, output = '',
-            l = input.length * 32;
-          for (i = 0; i < l; i += 8) {
-            output += String.fromCharCode((input[i >> 5] >>> (i % 32)) & 0xFF);
+      editMenu.close = function () {
+          if (menu) {
+              menu
+                  .style('pointer-events', 'none')
+                  .transition()
+                  .attr('opacity', 0)
+                  .remove();
           }
-          return output;
-        }
-
-        /**
-         * Calculate the RIPE-MD160 of an array of little-endian words, and a bit length.
-         */
 
-        function binl(x, len) {
-          var T, j, i, l,
-            h0 = 0x67452301,
-            h1 = 0xefcdab89,
-            h2 = 0x98badcfe,
-            h3 = 0x10325476,
-            h4 = 0xc3d2e1f0,
-            A1, B1, C1, D1, E1,
-            A2, B2, C2, D2, E2;
+          if (tooltip) {
+              tooltip.remove();
+          }
+      };
 
-          /* append padding */
-          x[len >> 5] |= 0x80 << (len % 32);
-          x[(((len + 64) >>> 9) << 4) + 14] = len;
-          l = x.length;
 
-          for (i = 0; i < l; i += 16) {
-            A1 = A2 = h0;
-            B1 = B2 = h1;
-            C1 = C2 = h2;
-            D1 = D2 = h3;
-            E1 = E2 = h4;
-            for (j = 0; j <= 79; j += 1) {
-              T = safe_add(A1, rmd160_f(j, B1, C1, D1));
-              T = safe_add(T, x[i + rmd160_r1[j]]);
-              T = safe_add(T, rmd160_K1(j));
-              T = safe_add(bit_rol(T, rmd160_s1[j]), E1);
-              A1 = E1;
-              E1 = D1;
-              D1 = bit_rol(C1, 10);
-              C1 = B1;
-              B1 = T;
-              T = safe_add(A2, rmd160_f(79 - j, B2, C2, D2));
-              T = safe_add(T, x[i + rmd160_r2[j]]);
-              T = safe_add(T, rmd160_K2(j));
-              T = safe_add(bit_rol(T, rmd160_s2[j]), E2);
-              A2 = E2;
-              E2 = D2;
-              D2 = bit_rol(C2, 10);
-              C2 = B2;
-              B2 = T;
-            }
+      editMenu.center = function (_) {
+          if (!arguments.length) return center;
+          center = _;
+          return editMenu;
+      };
 
-            T = safe_add(h1, safe_add(C1, D2));
-            h1 = safe_add(h2, safe_add(D1, E2));
-            h2 = safe_add(h3, safe_add(E1, A2));
-            h3 = safe_add(h4, safe_add(A1, B2));
-            h4 = safe_add(h0, safe_add(B1, C2));
-            h0 = T;
-          }
-          return [h0, h1, h2, h3, h4];
-        }
 
-        // specific algorithm methods
+      return editMenu;
+  }
 
-        function rmd160_f(j, x, y, z) {
-          return (0 <= j && j <= 15) ? (x ^ y ^ z) :
-            (16 <= j && j <= 31) ? (x & y) | (~x & z) :
-            (32 <= j && j <= 47) ? (x | ~y) ^ z :
-            (48 <= j && j <= 63) ? (x & z) | (y & ~z) :
-            (64 <= j && j <= 79) ? x ^ (y | ~z) :
-            'rmd160_f: j out of range';
-        }
+  function uiPresetIcon() {
+      var preset, geometry;
 
-        function rmd160_K1(j) {
-          return (0 <= j && j <= 15) ? 0x00000000 :
-            (16 <= j && j <= 31) ? 0x5a827999 :
-            (32 <= j && j <= 47) ? 0x6ed9eba1 :
-            (48 <= j && j <= 63) ? 0x8f1bbcdc :
-            (64 <= j && j <= 79) ? 0xa953fd4e :
-            'rmd160_K1: j out of range';
-        }
 
-        function rmd160_K2(j) {
-          return (0 <= j && j <= 15) ? 0x50a28be6 :
-            (16 <= j && j <= 31) ? 0x5c4dd124 :
-            (32 <= j && j <= 47) ? 0x6d703ef3 :
-            (48 <= j && j <= 63) ? 0x7a6d76e9 :
-            (64 <= j && j <= 79) ? 0x00000000 :
-            'rmd160_K2: j out of range';
-        }
+      function presetIcon(selection) {
+          selection.each(render);
       }
-    };
 
-    // exposes Hashes
-    (function(window, undefined) {
-      var freeExports = false;
-      {
-        freeExports = exports;
-        if (exports && typeof commonjsGlobal === 'object' && commonjsGlobal && commonjsGlobal === commonjsGlobal.global) {
-          window = commonjsGlobal;
-        }
-      }
 
-      if (typeof undefined === 'function' && typeof undefined.amd === 'object' && undefined.amd) {
-        // define as an anonymous module, so, through path mapping, it can be aliased
-        undefined(function() {
-          return Hashes;
-        });
-      } else if (freeExports) {
-        // in Node.js or RingoJS v0.8.0+
-        if (module && module.exports === freeExports) {
-          module.exports = Hashes;
-        }
-        // in Narwhal or RingoJS v0.7.0-
-        else {
-          freeExports.Hashes = Hashes;
-        }
-      } else {
-        // in a browser or Rhino
-        window.Hashes = Hashes;
+      function getIcon(p, geom) {
+          if (p.icon)
+              return p.icon;
+          else if (geom === 'line')
+              return 'iD-other-line';
+          else if (geom === 'vertex')
+              return p.isFallback() ? '' : 'temaki-vertex';
+          else
+              return 'maki-marker-stroked';
       }
-    }(this));
-  }()); // IIFE
-  });
-
-  var immutable = extend$2;
 
-  var hasOwnProperty$g = Object.prototype.hasOwnProperty;
-
-  function extend$2() {
-      var target = {};
 
-      for (var i = 0; i < arguments.length; i++) {
-          var source = arguments[i];
+      function render() {
+          var selection = select(this);
+          var p = preset.apply(this, arguments);
+          var geom = geometry.apply(this, arguments);
+          var picon = getIcon(p, geom);
+          var isMaki = /^maki-/.test(picon);
+          var isTemaki = /^temaki-/.test(picon);
+          var isFa = /^fa[srb]-/.test(picon);
+          var isPOI = isMaki || isTemaki || isFa;
+          var isCategory = !p.setTags;
+          var drawLine = geom === 'line' && !isCategory;
+          var isFramed = (geom === 'area' || drawLine || geom === 'vertex');
 
-          for (var key in source) {
-              if (hasOwnProperty$g.call(source, key)) {
-                  target[key] = source[key];
+          var tags = !isCategory ? p.setTags({}, geom) : {};
+          for (var k in tags) {
+              if (tags[k] === '*') {
+                  tags[k] = 'yes';
               }
           }
-      }
+          var tagClasses = svgTagClasses().getClassesString(tags, '');
 
-      return target
-  }
-
-  var sha1 = new hashes.SHA1();
+          var fill = selection.selectAll('.preset-icon-fill')
+              .data([0]);
 
-  var ohauth = {};
+          fill = fill.enter()
+              .append('div')
+              .merge(fill);
 
-  ohauth.qsString = function(obj) {
-      return Object.keys(obj).sort().map(function(key) {
-          return ohauth.percentEncode(key) + '=' +
-              ohauth.percentEncode(obj[key]);
-      }).join('&');
-  };
+          fill
+              .attr('class', function() {
+                  return 'preset-icon-fill preset-icon-fill-' + geom + ' ' + tagClasses;
+              });
 
-  ohauth.stringQs = function(str) {
-      return str.split('&').filter(function (pair) {
-          return pair !== '';
-      }).reduce(function(obj, pair){
-          var parts = pair.split('=');
-          obj[decodeURIComponent(parts[0])] = (null === parts[1]) ?
-              '' : decodeURIComponent(parts[1]);
-          return obj;
-      }, {});
-  };
+          var line = selection.selectAll('.preset-icon-line')
+              .data(drawLine ? [0] : []);
 
-  ohauth.rawxhr = function(method, url, data, headers, callback) {
-      var xhr = new XMLHttpRequest(),
-          twoHundred = /^20\d$/;
-      xhr.onreadystatechange = function() {
-          if (4 === xhr.readyState && 0 !== xhr.status) {
-              if (twoHundred.test(xhr.status)) callback(null, xhr);
-              else return callback(xhr, null);
-          }
-      };
-      xhr.onerror = function(e) { return callback(e, null); };
-      xhr.open(method, url, true);
-      for (var h in headers) xhr.setRequestHeader(h, headers[h]);
-      xhr.send(data);
-      return xhr;
-  };
+          line.exit()
+              .remove();
 
-  ohauth.xhr = function(method, url, auth, data, options, callback) {
-      var headers = (options && options.header) || {
-          'Content-Type': 'application/x-www-form-urlencoded'
-      };
-      headers.Authorization = 'OAuth ' + ohauth.authHeader(auth);
-      return ohauth.rawxhr(method, url, data, headers, callback);
-  };
+          // draw the line parametrically
+          var w = 60, h = 60, y = 43, l = 36, r = 2.5;
+          var x1 = (w - l)/2, x2 = x1 + l;
 
-  ohauth.nonce = function() {
-      for (var o = ''; o.length < 6;) {
-          o += '0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZabcdefghiklmnopqrstuvwxyz'[Math.floor(Math.random() * 61)];
-      }
-      return o;
-  };
+          var lineEnter = line.enter()
+              .append('svg')
+              .attr('class', 'preset-icon-line')
+              .attr('width', w)
+              .attr('height', h)
+              .attr('viewBox', '0 0 ' + w + ' ' + h);
+
+          lineEnter.append('path')
+              .attr('d', 'M' + x1 + ' ' + y + ' L' + x2 + ' ' + y)
+              .attr('class', 'line casing');
+          lineEnter.append('path')
+              .attr('d', 'M' + x1 + ' ' + y + ' L' + x2 + ' ' + y)
+              .attr('class', 'line stroke');
+          lineEnter.append('circle')
+              .attr('class', 'vertex')
+              .attr('cx', x1 - 1)
+              .attr('cy', y)
+              .attr('r', r);
+          lineEnter.append('circle')
+              .attr('class', 'vertex')
+              .attr('cx', x2 + 1)
+              .attr('cy', y)
+              .attr('r', r);
+
+          line = lineEnter.merge(line);
+
+          line.selectAll('path.stroke')
+              .attr('class', 'line stroke ' + tagClasses);
+          line.selectAll('path.casing')
+              .attr('class', 'line casing ' + tagClasses);
+
+
+          var areaFrame = selection.selectAll('.preset-icon-frame')
+              .data((geom === 'area') ? [0] : []);
 
-  ohauth.authHeader = function(obj) {
-      return Object.keys(obj).sort().map(function(key) {
-          return encodeURIComponent(key) + '="' + encodeURIComponent(obj[key]) + '"';
-      }).join(', ');
-  };
+          areaFrame.exit()
+              .remove();
 
-  ohauth.timestamp = function() { return ~~((+new Date()) / 1000); };
+          areaFrame = areaFrame.enter()
+              .append('div')
+              .attr('class', 'preset-icon-frame')
+              .call(svgIcon('#iD-preset-icon-frame'));
 
-  ohauth.percentEncode = function(s) {
-      return encodeURIComponent(s)
-          .replace(/\!/g, '%21').replace(/\'/g, '%27')
-          .replace(/\*/g, '%2A').replace(/\(/g, '%28').replace(/\)/g, '%29');
-  };
 
-  ohauth.baseString = function(method, url, params) {
-      if (params.oauth_signature) delete params.oauth_signature;
-      return [
-          method,
-          ohauth.percentEncode(url),
-          ohauth.percentEncode(ohauth.qsString(params))].join('&');
-  };
+          var icon = selection.selectAll('.preset-icon')
+              .data([0]);
 
-  ohauth.signature = function(oauth_secret, token_secret, baseString) {
-      return sha1.b64_hmac(
-          ohauth.percentEncode(oauth_secret) + '&' +
-          ohauth.percentEncode(token_secret),
-          baseString);
-  };
+          icon = icon.enter()
+              .append('div')
+              .attr('class', 'preset-icon')
+              .call(svgIcon(''))
+              .merge(icon);
 
-  /**
-   * Takes an options object for configuration (consumer_key,
-   * consumer_secret, version, signature_method, token, token_secret)
-   * and returns a function that generates the Authorization header
-   * for given data.
-   *
-   * The returned function takes these parameters:
-   * - method: GET/POST/...
-   * - uri: full URI with protocol, port, path and query string
-   * - extra_params: any extra parameters (that are passed in the POST data),
-   *   can be an object or a from-urlencoded string.
-   *
-   * Returned function returns full OAuth header with "OAuth" string in it.
-   */
+          icon
+              .attr('class', 'preset-icon ' + geom + '-geom ' + 'preset-icon-' +
+                  (isPOI ? (isFramed ? '24' : '28') : (isFramed ? '44' : '60'))
+              );
 
-  ohauth.headerGenerator = function(options) {
-      options = options || {};
-      var consumer_key = options.consumer_key || '',
-          consumer_secret = options.consumer_secret || '',
-          signature_method = options.signature_method || 'HMAC-SHA1',
-          version = options.version || '1.0',
-          token = options.token || '',
-          token_secret = options.token_secret || '';
+          icon.selectAll('svg')
+              .attr('class', function() {
+                  return 'icon ' + picon + ' ' + (isPOI && geom !== 'line'  ? '' : tagClasses);
+              });
 
-      return function(method, uri, extra_params) {
-          method = method.toUpperCase();
-          if (typeof extra_params === 'string' && extra_params.length > 0) {
-              extra_params = ohauth.stringQs(extra_params);
-          }
+          icon.selectAll('use')
+              .attr('href', '#' + picon + (isMaki ? '-15' : ''));
+      }
 
-          var uri_parts = uri.split('?', 2),
-          base_uri = uri_parts[0];
 
-          var query_params = uri_parts.length === 2 ?
-              ohauth.stringQs(uri_parts[1]) : {};
+      presetIcon.preset = function(val) {
+          if (!arguments.length) return preset;
+          preset = utilFunctor(val);
+          return presetIcon;
+      };
 
-          var oauth_params = {
-              oauth_consumer_key: consumer_key,
-              oauth_signature_method: signature_method,
-              oauth_version: version,
-              oauth_timestamp: ohauth.timestamp(),
-              oauth_nonce: ohauth.nonce()
-          };
 
-          if (token) oauth_params.oauth_token = token;
+      presetIcon.geometry = function(val) {
+          if (!arguments.length) return geometry;
+          geometry = utilFunctor(val);
+          return presetIcon;
+      };
 
-          var all_params = immutable({}, oauth_params, query_params, extra_params),
-              base_str = ohauth.baseString(method, base_uri, all_params);
+      return presetIcon;
+  }
 
-          oauth_params.oauth_signature = ohauth.signature(consumer_secret, token_secret, base_str);
+  function uiQuickLinks() {
+      var _choices = [];
 
-          return 'OAuth ' + ohauth.authHeader(oauth_params);
-      };
-  };
 
-  var ohauth_1 = ohauth;
+      function quickLinks(selection) {
+          var container = selection.selectAll('.quick-links')
+              .data([0]);
 
-  var resolveUrl = createCommonjsModule(function (module, exports) {
-  // Copyright 2014 Simon Lydell
-  // X11 (“MIT”) Licensed. (See LICENSE.)
+          container = container.enter()
+              .append('div')
+              .attr('class', 'quick-links')
+              .merge(container);
 
-  void (function(root, factory) {
-    {
-      module.exports = factory();
-    }
-  }(commonjsGlobal, function() {
+          var items = container.selectAll('.quick-link')
+              .data(_choices, function(d) { return d.id; });
 
-    function resolveUrl(/* ...urls */) {
-      var numUrls = arguments.length;
+          items.exit()
+              .remove();
 
-      if (numUrls === 0) {
-        throw new Error("resolveUrl requires at least one argument; got none.")
+          items.enter()
+              .append('a')
+              .attr('class', function(d) { return 'quick-link quick-link-' + d.id; })
+              .attr('href', '#')
+              .text(function(d) { return t(d.label); })
+              .each(function(d) {
+                  if (typeof d.tooltip !== 'function') return;
+                  select(this)
+                      .call(tooltip().html(true).title(d.tooltip).placement('bottom'));
+              })
+              .on('click', function(d) {
+                  if (typeof d.click !== 'function') return;
+                  event.preventDefault();
+                  d.click(d);
+              });
       }
 
-      var base = document.createElement("base");
-      base.href = arguments[0];
 
-      if (numUrls === 1) {
-        return base.href
+      //  val should be an array of choices like:
+      //    [{
+      //       id: 'link-id',
+      //       label: 'translation.key',
+      //       tooltip: function(d),
+      //       click: function(d)
+      //    }, ..]
+      quickLinks.choices = function(val) {
+          if (!arguments.length) return _choices;
+          _choices = val;
+          return quickLinks;
+      };
+
+
+      return quickLinks;
+  }
+
+  function uiRawMemberEditor(context) {
+      var taginfo = services.taginfo;
+      var _entityID;
+
+      function downloadMember(d) {
+          event.preventDefault();
+
+          // display the loading indicator
+          select(this.parentNode).classed('tag-reference-loading', true);
+          context.loadEntity(d.id);
       }
 
-      var head = document.getElementsByTagName("head")[0];
-      head.insertBefore(base, head.firstChild);
+      function zoomToMember(d) {
+          event.preventDefault();
 
-      var a = document.createElement("a");
-      var resolved;
+          var entity = context.entity(d.id);
+          context.map().zoomTo(entity);
 
-      for (var index = 1; index < numUrls; index++) {
-        a.href = arguments[index];
-        resolved = a.href;
-        base.href = resolved;
+          // highlight the feature in case it wasn't previously on-screen
+          utilHighlightEntities([d.id], true, context);
       }
 
-      head.removeChild(base);
 
-      return resolved
-    }
+      function selectMember(d) {
+          event.preventDefault();
 
-    return resolveUrl
+          // remove the hover-highlight styling
+          utilHighlightEntities([d.id], false, context);
 
-  }));
-  });
+          var entity = context.entity(d.id);
+          var mapExtent = context.map().extent();
+          if (!entity.intersects(mapExtent, context.graph())) {
+              // zoom to the entity if its extent is not visible now
+              context.map().zoomToEase(entity);
+          }
 
-  var assign$1 = make_assign();
-  var create$2 = make_create();
-  var trim = make_trim();
-  var Global = (typeof window !== 'undefined' ? window : commonjsGlobal);
+          context.enter(modeSelect(context, [d.id]));
+      }
 
-  var util = {
-       assign: assign$1,
-       create: create$2,
-       trim: trim,
-       bind: bind,
-       slice: slice$7,
-       each: each,
-       map: map$4,
-       pluck: pluck,
-       isList: isList,
-       isFunction: isFunction$1,
-       isObject: isObject$1,
-       Global: Global
-  };
 
-  function make_assign() {
-       if (Object.assign) {
-               return Object.assign
-       } else {
-               return function shimAssign(obj, props1, props2, etc) {
-                       for (var i = 1; i < arguments.length; i++) {
-                               each(Object(arguments[i]), function(val, key) {
-                                       obj[key] = val;
-                               });
-                       }                       
-                       return obj
-               }
-       }
-  }
+      function changeRole(d) {
+          var oldRole = d.role;
+          var newRole = select(this).property('value');
 
-  function make_create() {
-       if (Object.create) {
-               return function create(obj, assignProps1, assignProps2, etc) {
-                       var assignArgsList = slice$7(arguments, 1);
-                       return assign$1.apply(this, [Object.create(obj)].concat(assignArgsList))
-               }
-       } else {
-               function F() {} // eslint-disable-line no-inner-declarations
-               return function create(obj, assignProps1, assignProps2, etc) {
-                       var assignArgsList = slice$7(arguments, 1);
-                       F.prototype = obj;
-                       return assign$1.apply(this, [new F()].concat(assignArgsList))
-               }
-       }
-  }
+          if (oldRole !== newRole) {
+              var member = { id: d.id, type: d.type, role: newRole };
+              context.perform(
+                  actionChangeMember(d.relation.id, member, d.index),
+                  t('operations.change_role.annotation')
+              );
+          }
+      }
+
+
+      function deleteMember(d) {
+          context.perform(
+              actionDeleteMember(d.relation.id, d.index),
+              t('operations.delete_member.annotation')
+          );
 
-  function make_trim() {
-       if (String.prototype.trim) {
-               return function trim(str) {
-                       return String.prototype.trim.call(str)
-               }
-       } else {
-               return function trim(str) {
-                       return str.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, '')
-               }
-       }
-  }
+          if (!context.hasEntity(d.relation.id)) {
+              context.enter(modeBrowse(context));
+          }
 
-  function bind(obj, fn) {
-       return function() {
-               return fn.apply(obj, Array.prototype.slice.call(arguments, 0))
-       }
-  }
+          utilHighlightEntities([d.id], false, context);
+      }
 
-  function slice$7(arr, index) {
-       return Array.prototype.slice.call(arr, index || 0)
-  }
 
-  function each(obj, fn) {
-       pluck(obj, function(val, key) {
-               fn(val, key);
-               return false
-       });
-  }
+      function rawMemberEditor(selection) {
+          var entity = context.entity(_entityID);
+          var memberships = [];
 
-  function map$4(obj, fn) {
-       var res = (isList(obj) ? [] : {});
-       pluck(obj, function(v, k) {
-               res[k] = fn(v, k);
-               return false
-       });
-       return res
-  }
+          entity.members.slice(0, 1000).forEach(function(member, index) {
+              memberships.push({
+                  index: index,
+                  id: member.id,
+                  type: member.type,
+                  role: member.role,
+                  relation: entity,
+                  member: context.hasEntity(member.id)
+              });
+          });
 
-  function pluck(obj, fn) {
-       if (isList(obj)) {
-               for (var i=0; i<obj.length; i++) {
-                       if (fn(obj[i], i)) {
-                               return obj[i]
-                       }
-               }
-       } else {
-               for (var key in obj) {
-                       if (obj.hasOwnProperty(key)) {
-                               if (fn(obj[key], key)) {
-                                       return obj[key]
-                               }
-                       }
-               }
-       }
-  }
+          var gt = entity.members.length > 1000 ? '>' : '';
+          selection.call(uiDisclosure(context, 'raw_member_editor', true)
+              .title(t('inspector.all_members') + ' (' + gt + memberships.length + ')')
+              .expanded(true)
+              .updatePreference(false)
+              .on('toggled', function(expanded) {
+                  if (expanded) {
+                      selection.node().parentNode.scrollTop += 200;
+                  }
+              })
+              .content(content)
+          );
 
-  function isList(val) {
-       return (val != null && typeof val != 'function' && typeof val.length == 'number')
-  }
 
-  function isFunction$1(val) {
-       return val && {}.toString.call(val) === '[object Function]'
-  }
+          function content(selection) {
+              var list = selection.selectAll('.member-list')
+                  .data([0]);
 
-  function isObject$1(val) {
-       return val && {}.toString.call(val) === '[object Object]'
-  }
+              list = list.enter()
+                  .append('ul')
+                  .attr('class', 'member-list')
+                  .merge(list);
 
-  var slice$8 = util.slice;
-  var pluck$1 = util.pluck;
-  var each$1 = util.each;
-  var bind$1 = util.bind;
-  var create$3 = util.create;
-  var isList$1 = util.isList;
-  var isFunction$2 = util.isFunction;
-  var isObject$2 = util.isObject;
 
-  var storeEngine = {
-       createStore: createStore
-  };
+              var items = list.selectAll('li')
+                  .data(memberships, function(d) {
+                      return osmEntity.key(d.relation) + ',' + d.index + ',' +
+                          (d.member ? osmEntity.key(d.member) : 'incomplete');
+                  });
 
-  var storeAPI = {
-       version: '2.0.12',
-       enabled: false,
-       
-       // get returns the value of the given key. If that value
-       // is undefined, it returns optionalDefaultValue instead.
-       get: function(key, optionalDefaultValue) {
-               var data = this.storage.read(this._namespacePrefix + key);
-               return this._deserialize(data, optionalDefaultValue)
-       },
+              items.exit()
+                  .each(unbind)
+                  .remove();
 
-       // set will store the given value at key and returns value.
-       // Calling set with value === undefined is equivalent to calling remove.
-       set: function(key, value) {
-               if (value === undefined) {
-                       return this.remove(key)
-               }
-               this.storage.write(this._namespacePrefix + key, this._serialize(value));
-               return value
-       },
+              var itemsEnter = items.enter()
+                  .append('li')
+                  .attr('class', 'member-row form-field')
+                  .classed('member-incomplete', function(d) { return !d.member; });
 
-       // remove deletes the key and value stored at the given key.
-       remove: function(key) {
-               this.storage.remove(this._namespacePrefix + key);
-       },
+              itemsEnter
+                  .each(function(d) {
+                      var item = select(this);
 
-       // each will call the given callback once for each key-value pair
-       // in this store.
-       each: function(callback) {
-               var self = this;
-               this.storage.each(function(val, namespacedKey) {
-                       callback.call(self, self._deserialize(val), (namespacedKey || '').replace(self._namespaceRegexp, ''));
-               });
-       },
+                      var label = item
+                          .append('label')
+                          .attr('class', 'form-field-label');
 
-       // clearAll will remove all the stored key-value pairs in this store.
-       clearAll: function() {
-               this.storage.clearAll();
-       },
+                      if (d.member) {
+                          // highlight the member feature in the map while hovering on the list item
+                          item
+                              .on('mouseover', function() {
+                                  utilHighlightEntities([d.id], true, context);
+                              })
+                              .on('mouseout', function() {
+                                  utilHighlightEntities([d.id], false, context);
+                              });
 
-       // additional functionality that can't live in plugins
-       // ---------------------------------------------------
+                          var labelLink = label
+                              .append('span')
+                              .attr('class', 'label-text')
+                              .append('a')
+                              .attr('href', '#')
+                              .on('click', selectMember);
 
-       // hasNamespace returns true if this store instance has the given namespace.
-       hasNamespace: function(namespace) {
-               return (this._namespacePrefix == '__storejs_'+namespace+'_')
-       },
+                          labelLink
+                              .append('span')
+                              .attr('class', 'member-entity-type')
+                              .text(function(d) {
+                                  var matched = context.presets().match(d.member, context.graph());
+                                  return (matched && matched.name()) || utilDisplayType(d.member.id);
+                              });
 
-       // createStore creates a store.js instance with the first
-       // functioning storage in the list of storage candidates,
-       // and applies the the given mixins to the instance.
-       createStore: function() {
-               return createStore.apply(this, arguments)
-       },
-       
-       addPlugin: function(plugin) {
-               this._addPlugin(plugin);
-       },
-       
-       namespace: function(namespace) {
-               return createStore(this.storage, this.plugins, namespace)
-       }
-  };
+                          labelLink
+                              .append('span')
+                              .attr('class', 'member-entity-name')
+                              .text(function(d) { return utilDisplayName(d.member); });
 
-  function _warn() {
-       var _console = (typeof console == 'undefined' ? null : console);
-       if (!_console) { return }
-       var fn = (_console.warn ? _console.warn : _console.log);
-       fn.apply(_console, arguments);
-  }
+                          label
+                              .append('button')
+                              .attr('class', 'member-zoom')
+                              .attr('title', t('icons.zoom_to'))
+                              .attr('tabindex', -1)
+                              .call(svgIcon('#iD-icon-geolocate'))
+                              .on('click', zoomToMember);
 
-  function createStore(storages, plugins, namespace) {
-       if (!namespace) {
-               namespace = '';
-       }
-       if (storages && !isList$1(storages)) {
-               storages = [storages];
-       }
-       if (plugins && !isList$1(plugins)) {
-               plugins = [plugins];
-       }
+                      } else {
+                          var labelText = label
+                              .append('span')
+                              .attr('class', 'label-text');
 
-       var namespacePrefix = (namespace ? '__storejs_'+namespace+'_' : '');
-       var namespaceRegexp = (namespace ? new RegExp('^'+namespacePrefix) : null);
-       var legalNamespaces = /^[a-zA-Z0-9_\-]*$/; // alpha-numeric + underscore and dash
-       if (!legalNamespaces.test(namespace)) {
-               throw new Error('store.js namespaces can only have alphanumerics + underscores and dashes')
-       }
-       
-       var _privateStoreProps = {
-               _namespacePrefix: namespacePrefix,
-               _namespaceRegexp: namespaceRegexp,
+                          labelText
+                              .append('span')
+                              .attr('class', 'member-entity-type')
+                              .text(t('inspector.' + d.type, { id: d.id }));
 
-               _testStorage: function(storage) {
-                       try {
-                               var testStr = '__storejs__test__';
-                               storage.write(testStr, testStr);
-                               var ok = (storage.read(testStr) === testStr);
-                               storage.remove(testStr);
-                               return ok
-                       } catch(e) {
-                               return false
-                       }
-               },
+                          labelText
+                              .append('span')
+                              .attr('class', 'member-entity-name')
+                              .text(t('inspector.incomplete', { id: d.id }));
 
-               _assignPluginFnProp: function(pluginFnProp, propName) {
-                       var oldFn = this[propName];
-                       this[propName] = function pluginFn() {
-                               var args = slice$8(arguments, 0);
-                               var self = this;
+                          label
+                              .append('button')
+                              .attr('class', 'member-download')
+                              .attr('title', t('icons.download'))
+                              .attr('tabindex', -1)
+                              .call(svgIcon('#iD-icon-load'))
+                              .on('click', downloadMember);
+                      }
+                  });
 
-                               // super_fn calls the old function which was overwritten by
-                               // this mixin.
-                               function super_fn() {
-                                       if (!oldFn) { return }
-                                       each$1(arguments, function(arg, i) {
-                                               args[i] = arg;
-                                       });
-                                       return oldFn.apply(self, args)
-                               }
+              var wrapEnter = itemsEnter
+                  .append('div')
+                  .attr('class', 'form-field-input-wrap form-field-input-member');
 
-                               // Give mixing function access to super_fn by prefixing all mixin function
-                               // arguments with super_fn.
-                               var newFnArgs = [super_fn].concat(args);
+              wrapEnter
+                  .append('input')
+                  .attr('class', 'member-role')
+                  .property('type', 'text')
+                  .attr('maxlength', 255)
+                  .attr('placeholder', t('inspector.role'))
+                  .call(utilNoAuto);
 
-                               return pluginFnProp.apply(self, newFnArgs)
-                       };
-               },
+              wrapEnter
+                  .append('button')
+                  .attr('tabindex', -1)
+                  .attr('title', t('icons.remove'))
+                  .attr('class', 'remove form-field-button member-delete')
+                  .call(svgIcon('#iD-operation-delete'));
 
-               _serialize: function(obj) {
-                       return JSON.stringify(obj)
-               },
+              if (taginfo) {
+                  wrapEnter.each(bindTypeahead);
+              }
 
-               _deserialize: function(strVal, defaultVal) {
-                       if (!strVal) { return defaultVal }
-                       // It is possible that a raw string value has been previously stored
-                       // in a storage without using store.js, meaning it will be a raw
-                       // string value instead of a JSON serialized string. By defaulting
-                       // to the raw string value in case of a JSON parse error, we allow
-                       // for past stored values to be forwards-compatible with store.js
-                       var val = '';
-                       try { val = JSON.parse(strVal); }
-                       catch(e) { val = strVal; }
 
-                       return (val !== undefined ? val : defaultVal)
-               },
-               
-               _addStorage: function(storage) {
-                       if (this.enabled) { return }
-                       if (this._testStorage(storage)) {
-                               this.storage = storage;
-                               this.enabled = true;
-                       }
-               },
+              // update
+              items = items
+                  .merge(itemsEnter);
 
-               _addPlugin: function(plugin) {
-                       var self = this;
+              items.select('input.member-role')
+                  .property('value', function(d) { return d.role; })
+                  .on('blur', changeRole)
+                  .on('change', changeRole);
 
-                       // If the plugin is an array, then add all plugins in the array.
-                       // This allows for a plugin to depend on other plugins.
-                       if (isList$1(plugin)) {
-                               each$1(plugin, function(plugin) {
-                                       self._addPlugin(plugin);
-                               });
-                               return
-                       }
+              items.select('button.member-delete')
+                  .on('click', deleteMember);
 
-                       // Keep track of all plugins we've seen so far, so that we
-                       // don't add any of them twice.
-                       var seenPlugin = pluck$1(this.plugins, function(seenPlugin) {
-                               return (plugin === seenPlugin)
-                       });
-                       if (seenPlugin) {
-                               return
-                       }
-                       this.plugins.push(plugin);
 
-                       // Check that the plugin is properly formed
-                       if (!isFunction$2(plugin)) {
-                               throw new Error('Plugins must be function values that return objects')
-                       }
 
-                       var pluginProperties = plugin.call(this);
-                       if (!isObject$2(pluginProperties)) {
-                               throw new Error('Plugins must return an object of function properties')
-                       }
+              function bindTypeahead(d) {
+                  var row = select(this);
+                  var role = row.selectAll('input.member-role');
+                  var origValue = role.property('value');
 
-                       // Add the plugin function properties to this store instance.
-                       each$1(pluginProperties, function(pluginFnProp, propName) {
-                               if (!isFunction$2(pluginFnProp)) {
-                                       throw new Error('Bad plugin property: '+propName+' from plugin '+plugin.name+'. Plugins should only return functions.')
-                               }
-                               self._assignPluginFnProp(pluginFnProp, propName);
-                       });
-               },
-               
-               // Put deprecated properties in the private API, so as to not expose it to accidential
-               // discovery through inspection of the store object.
-               
-               // Deprecated: addStorage
-               addStorage: function(storage) {
-                       _warn('store.addStorage(storage) is deprecated. Use createStore([storages])');
-                       this._addStorage(storage);
-               }
-       };
+                  function sort(value, data) {
+                      var sameletter = [];
+                      var other = [];
+                      for (var i = 0; i < data.length; i++) {
+                          if (data[i].value.substring(0, value.length) === value) {
+                              sameletter.push(data[i]);
+                          } else {
+                              other.push(data[i]);
+                          }
+                      }
+                      return sameletter.concat(other);
+                  }
 
-       var store = create$3(_privateStoreProps, storeAPI, {
-               plugins: []
-       });
-       store.raw = {};
-       each$1(store, function(prop, propName) {
-               if (isFunction$2(prop)) {
-                       store.raw[propName] = bind$1(store, prop);                      
-               }
-       });
-       each$1(storages, function(storage) {
-               store._addStorage(storage);
-       });
-       each$1(plugins, function(plugin) {
-               store._addPlugin(plugin);
-       });
-       return store
-  }
+                  role.call(uiCombobox(context, 'member-role')
+                      .fetcher(function(role, callback) {
+                          // The `geometry` param is used in the `taginfo.js` interface for
+                          // filtering results, as a key into the `tag_members_fractions`
+                          // object.  If we don't know the geometry because the member is
+                          // not yet downloaded, it's ok to guess based on type.
+                          var geometry;
+                          if (d.member) {
+                              geometry = context.geometry(d.member.id);
+                          } else if (d.type === 'relation') {
+                              geometry = 'relation';
+                          } else if (d.type === 'way') {
+                              geometry = 'line';
+                          } else {
+                              geometry = 'point';
+                          }
 
-  var Global$1 = util.Global;
+                          var rtype = entity.tags.type;
+                          taginfo.roles({
+                              debounce: true,
+                              rtype: rtype || '',
+                              geometry: geometry,
+                              query: role
+                          }, function(err, data) {
+                              if (!err) callback(sort(role, data));
+                          });
+                      })
+                      .on('cancel', function() {
+                          role.property('value', origValue);
+                      })
+                  );
+              }
 
-  var localStorage_1 = {
-       name: 'localStorage',
-       read: read,
-       write: write,
-       each: each$2,
-       remove: remove$3,
-       clearAll: clearAll,
-  };
 
-  function localStorage$1() {
-       return Global$1.localStorage
-  }
+              function unbind() {
+                  var row = select(this);
 
-  function read(key) {
-       return localStorage$1().getItem(key)
-  }
+                  row.selectAll('input.member-role')
+                      .call(uiCombobox.off);
+              }
+          }
+      }
 
-  function write(key, data) {
-       return localStorage$1().setItem(key, data)
-  }
 
-  function each$2(fn) {
-       for (var i = localStorage$1().length - 1; i >= 0; i--) {
-               var key = localStorage$1().key(i);
-               fn(read(key), key);
-       }
-  }
+      rawMemberEditor.entityID = function(val) {
+          if (!arguments.length) return _entityID;
+          _entityID = val;
+          return rawMemberEditor;
+      };
 
-  function remove$3(key) {
-       return localStorage$1().removeItem(key)
-  }
 
-  function clearAll() {
-       return localStorage$1().clear()
+      return rawMemberEditor;
   }
 
-  // oldFF-globalStorage provides storage for Firefox
-  // versions 6 and 7, where no localStorage, etc
-  // is available.
+  function uiRawMembershipEditor(context) {
+      var taginfo = services.taginfo;
+      var nearbyCombo = uiCombobox(context, 'parent-relation')
+          .minItems(1)
+          .fetcher(fetchNearbyRelations);
+      var _inChange = false;
+      var _entityID;
+      var _showBlank;
 
 
-  var Global$2 = util.Global;
+      function selectRelation(d) {
+          event.preventDefault();
 
-  var oldFFGlobalStorage = {
-       name: 'oldFF-globalStorage',
-       read: read$1,
-       write: write$1,
-       each: each$3,
-       remove: remove$4,
-       clearAll: clearAll$1,
-  };
+          // remove the hover-highlight styling
+          utilHighlightEntities([d.relation.id], false, context);
+
+          context.enter(modeSelect(context, [d.relation.id]));
+      }
 
-  var globalStorage = Global$2.globalStorage;
 
-  function read$1(key) {
-       return globalStorage[key]
-  }
+      function changeRole(d) {
+          if (d === 0) return;    // called on newrow (shoudn't happen)
+          if (_inChange) return;  // avoid accidental recursive call #5731
 
-  function write$1(key, data) {
-       globalStorage[key] = data;
-  }
+          var oldRole = d.member.role;
+          var newRole = select(this).property('value');
 
-  function each$3(fn) {
-       for (var i = globalStorage.length - 1; i >= 0; i--) {
-               var key = globalStorage.key(i);
-               fn(globalStorage[key], key);
-       }
-  }
+          if (oldRole !== newRole) {
+              _inChange = true;
+              context.perform(
+                  actionChangeMember(d.relation.id, assignIn({}, d.member, { role: newRole }), d.index),
+                  t('operations.change_role.annotation')
+              );
+          }
+          _inChange = false;
+      }
 
-  function remove$4(key) {
-       return globalStorage.removeItem(key)
-  }
 
-  function clearAll$1() {
-       each$3(function(key, _) {
-               delete globalStorage[key];
-       });
-  }
+      function addMembership(d, role) {
+          this.blur();           // avoid keeping focus on the button
+          _showBlank = false;
 
-  // oldIE-userDataStorage provides storage for Internet Explorer
-  // versions 6 and 7, where no localStorage, sessionStorage, etc
-  // is available.
+          var member = { id: _entityID, type: context.entity(_entityID).type, role: role };
 
+          if (d.relation) {
+              context.perform(
+                  actionAddMember(d.relation.id, member),
+                  t('operations.add_member.annotation')
+              );
 
-  var Global$3 = util.Global;
+          } else {
+              var relation = osmRelation();
+              context.perform(
+                  actionAddEntity(relation),
+                  actionAddMember(relation.id, member),
+                  t('operations.add.annotation.relation')
+              );
 
-  var oldIEUserDataStorage = {
-       name: 'oldIE-userDataStorage',
-       write: write$2,
-       read: read$2,
-       each: each$4,
-       remove: remove$5,
-       clearAll: clearAll$2,
-  };
+              context.enter(modeSelect(context, [relation.id]).newFeature(true));
+          }
+      }
 
-  var storageName = 'storejs';
-  var doc = Global$3.document;
-  var _withStorageEl = _makeIEStorageElFunction();
-  var disable = (Global$3.navigator ? Global$3.navigator.userAgent : '').match(/ (MSIE 8|MSIE 9|MSIE 10)\./); // MSIE 9.x, MSIE 10.x
 
-  function write$2(unfixedKey, data) {
-       if (disable) { return }
-       var fixedKey = fixKey(unfixedKey);
-       _withStorageEl(function(storageEl) {
-               storageEl.setAttribute(fixedKey, data);
-               storageEl.save(storageName);
-       });
-  }
+      function deleteMembership(d) {
+          this.blur();           // avoid keeping focus on the button
+          if (d === 0) return;   // called on newrow (shoudn't happen)
 
-  function read$2(unfixedKey) {
-       if (disable) { return }
-       var fixedKey = fixKey(unfixedKey);
-       var res = null;
-       _withStorageEl(function(storageEl) {
-               res = storageEl.getAttribute(fixedKey);
-       });
-       return res
-  }
+          context.perform(
+              actionDeleteMember(d.relation.id, d.index),
+              t('operations.delete_member.annotation')
+          );
+      }
 
-  function each$4(callback) {
-       _withStorageEl(function(storageEl) {
-               var attributes = storageEl.XMLDocument.documentElement.attributes;
-               for (var i=attributes.length-1; i>=0; i--) {
-                       var attr = attributes[i];
-                       callback(storageEl.getAttribute(attr.name), attr.name);
-               }
-       });
-  }
 
-  function remove$5(unfixedKey) {
-       var fixedKey = fixKey(unfixedKey);
-       _withStorageEl(function(storageEl) {
-               storageEl.removeAttribute(fixedKey);
-               storageEl.save(storageName);
-       });
-  }
+      function fetchNearbyRelations(q, callback) {
+          var newRelation = { relation: null, value: t('inspector.new_relation') };
+          var result = [];
+          var graph = context.graph();
 
-  function clearAll$2() {
-       _withStorageEl(function(storageEl) {
-               var attributes = storageEl.XMLDocument.documentElement.attributes;
-               storageEl.load(storageName);
-               for (var i=attributes.length-1; i>=0; i--) {
-                       storageEl.removeAttribute(attributes[i].name);
-               }
-               storageEl.save(storageName);
-       });
-  }
+          context.intersects(context.extent()).forEach(function(entity) {
+              if (entity.type !== 'relation' || entity.id === _entityID) return;
 
-  // Helpers
-  //////////
+              var matched = context.presets().match(entity, graph);
+              var presetName = (matched && matched.name()) || t('inspector.relation');
+              var entityName = utilDisplayName(entity) || '';
 
-  // In IE7, keys cannot start with a digit or contain certain chars.
-  // See https://github.com/marcuswestin/store.js/issues/40
-  // See https://github.com/marcuswestin/store.js/issues/83
-  var forbiddenCharsRegex = new RegExp("[!\"#$%&'()*+,/\\\\:;<=>?@[\\]^`{|}~]", "g");
-  function fixKey(key) {
-       return key.replace(/^\d/, '___$&').replace(forbiddenCharsRegex, '___')
-  }
+              var value = presetName + ' ' + entityName;
+              if (q && value.toLowerCase().indexOf(q.toLowerCase()) === -1) return;
 
-  function _makeIEStorageElFunction() {
-       if (!doc || !doc.documentElement || !doc.documentElement.addBehavior) {
-               return null
-       }
-       var scriptTag = 'script',
-               storageOwner,
-               storageContainer,
-               storageEl;
+              result.push({ relation: entity, value: value });
+          });
 
-       // Since #userData storage applies only to specific paths, we need to
-       // somehow link our data to a specific path.  We choose /favicon.ico
-       // as a pretty safe option, since all browsers already make a request to
-       // this URL anyway and being a 404 will not hurt us here.  We wrap an
-       // iframe pointing to the favicon in an ActiveXObject(htmlfile) object
-       // (see: http://msdn.microsoft.com/en-us/library/aa752574(v=VS.85).aspx)
-       // since the iframe access rules appear to allow direct access and
-       // manipulation of the document element, even for a 404 page.  This
-       // document can be used instead of the current document (which would
-       // have been limited to the current path) to perform #userData storage.
-       try {
-               /* global ActiveXObject */
-               storageContainer = new ActiveXObject('htmlfile');
-               storageContainer.open();
-               storageContainer.write('<'+scriptTag+'>document.w=window</'+scriptTag+'><iframe src="/favicon.ico"></iframe>');
-               storageContainer.close();
-               storageOwner = storageContainer.w.frames[0].document;
-               storageEl = storageOwner.createElement('div');
-       } catch(e) {
-               // somehow ActiveXObject instantiation failed (perhaps some special
-               // security settings or otherwse), fall back to per-path storage
-               storageEl = doc.createElement('div');
-               storageOwner = doc.body;
-       }
+          result.sort(function(a, b) {
+              return osmRelation.creationOrder(a.relation, b.relation);
+          });
 
-       return function(storeFunction) {
-               var args = [].slice.call(arguments, 0);
-               args.unshift(storageEl);
-               // See http://msdn.microsoft.com/en-us/library/ms531081(v=VS.85).aspx
-               // and http://msdn.microsoft.com/en-us/library/ms531424(v=VS.85).aspx
-               storageOwner.appendChild(storageEl);
-               storageEl.addBehavior('#default#userData');
-               storageEl.load(storageName);
-               storeFunction.apply(this, args);
-               storageOwner.removeChild(storageEl);
-               return
-       }
-  }
+          // Dedupe identical names by appending relation id - see #2891
+          var dupeGroups = filter(
+              groupBy(result, 'value'),
+              function(v) { return v.length > 1; }
+          );
 
-  // cookieStorage is useful Safari private browser mode, where localStorage
-  // doesn't work but cookies do. This implementation is adopted from
-  // https://developer.mozilla.org/en-US/docs/Web/API/Storage/LocalStorage
+          dupeGroups.forEach(function(group) {
+              group.forEach(function(obj) {
+                  obj.value += ' ' + obj.relation.id;
+              });
+          });
 
+          result.forEach(function(obj) {
+              obj.title = obj.value;
+          });
 
-  var Global$4 = util.Global;
-  var trim$1 = util.trim;
+          result.unshift(newRelation);
+          callback(result);
+      }
 
-  var cookieStorage = {
-       name: 'cookieStorage',
-       read: read$3,
-       write: write$3,
-       each: each$5,
-       remove: remove$6,
-       clearAll: clearAll$3,
-  };
 
-  var doc$1 = Global$4.document;
+      function rawMembershipEditor(selection) {
+          var entity = context.entity(_entityID);
+          var parents = context.graph().parentRelations(entity);
+          var memberships = [];
 
-  function read$3(key) {
-       if (!key || !_has(key)) { return null }
-       var regexpStr = "(?:^|.*;\\s*)" +
-               escape(key).replace(/[\-\.\+\*]/g, "\\$&") +
-               "\\s*\\=\\s*((?:[^;](?!;))*[^;]?).*";
-       return unescape(doc$1.cookie.replace(new RegExp(regexpStr), "$1"))
-  }
+          parents.slice(0, 1000).forEach(function(relation) {
+              relation.members.forEach(function(member, index) {
+                  if (member.id === entity.id) {
+                      memberships.push({ relation: relation, member: member, index: index });
+                  }
+              });
+          });
 
-  function each$5(callback) {
-       var cookies = doc$1.cookie.split(/; ?/g);
-       for (var i = cookies.length - 1; i >= 0; i--) {
-               if (!trim$1(cookies[i])) {
-                       continue
-               }
-               var kvp = cookies[i].split('=');
-               var key = unescape(kvp[0]);
-               var val = unescape(kvp[1]);
-               callback(val, key);
-       }
-  }
+          var gt = parents.length > 1000 ? '>' : '';
+          selection.call(uiDisclosure(context, 'raw_membership_editor', true)
+              .title(t('inspector.all_relations') + ' (' + gt + memberships.length + ')')
+              .expanded(true)
+              .updatePreference(false)
+              .on('toggled', function(expanded) {
+                  if (expanded) { selection.node().parentNode.scrollTop += 200; }
+              })
+              .content(content)
+          );
 
-  function write$3(key, data) {
-       if(!key) { return }
-       doc$1.cookie = escape(key) + "=" + escape(data) + "; expires=Tue, 19 Jan 2038 03:14:07 GMT; path=/";
-  }
 
-  function remove$6(key) {
-       if (!key || !_has(key)) {
-               return
-       }
-       doc$1.cookie = escape(key) + "=; expires=Thu, 01 Jan 1970 00:00:00 GMT; path=/";
-  }
+          function content(selection) {
+              var list = selection.selectAll('.member-list')
+                  .data([0]);
 
-  function clearAll$3() {
-       each$5(function(_, key) {
-               remove$6(key);
-       });
-  }
+              list = list.enter()
+                  .append('ul')
+                  .attr('class', 'member-list')
+                  .merge(list);
 
-  function _has(key) {
-       return (new RegExp("(?:^|;\\s*)" + escape(key).replace(/[\-\.\+\*]/g, "\\$&") + "\\s*\\=")).test(doc$1.cookie)
-  }
 
-  var Global$5 = util.Global;
+              var items = list.selectAll('li.member-row-normal')
+                  .data(memberships, function(d) {
+                      return osmEntity.key(d.relation) + ',' + d.index;
+                  });
 
-  var sessionStorage_1 = {
-       name: 'sessionStorage',
-       read: read$4,
-       write: write$4,
-       each: each$6,
-       remove: remove$7,
-       clearAll: clearAll$4
-  };
+              items.exit()
+                  .each(unbind)
+                  .remove();
 
-  function sessionStorage() {
-       return Global$5.sessionStorage
-  }
+              // Enter
+              var itemsEnter = items.enter()
+                  .append('li')
+                  .attr('class', 'member-row member-row-normal form-field');
 
-  function read$4(key) {
-       return sessionStorage().getItem(key)
-  }
+              itemsEnter.each(function(d){
+                  // highlight the relation in the map while hovering on the list item
+                  select(this)
+                      .on('mouseover', function() {
+                          utilHighlightEntities([d.relation.id], true, context);
+                      })
+                      .on('mouseout', function() {
+                          utilHighlightEntities([d.relation.id], false, context);
+                      });
+              });
 
-  function write$4(key, data) {
-       return sessionStorage().setItem(key, data)
-  }
+              var labelEnter = itemsEnter
+                  .append('label')
+                  .attr('class', 'form-field-label')
+                  .append('span')
+                  .attr('class', 'label-text')
+                  .append('a')
+                  .attr('href', '#')
+                  .on('click', selectRelation);
 
-  function each$6(fn) {
-       for (var i = sessionStorage().length - 1; i >= 0; i--) {
-               var key = sessionStorage().key(i);
-               fn(read$4(key), key);
-       }
-  }
+              labelEnter
+                  .append('span')
+                  .attr('class', 'member-entity-type')
+                  .text(function(d) {
+                      var matched = context.presets().match(d.relation, context.graph());
+                      return (matched && matched.name()) || t('inspector.relation');
+                  });
 
-  function remove$7(key) {
-       return sessionStorage().removeItem(key)
-  }
+              labelEnter
+                  .append('span')
+                  .attr('class', 'member-entity-name')
+                  .text(function(d) { return utilDisplayName(d.relation); });
 
-  function clearAll$4() {
-       return sessionStorage().clear()
-  }
+              var wrapEnter = itemsEnter
+                  .append('div')
+                  .attr('class', 'form-field-input-wrap form-field-input-member');
 
-  // memoryStorage is a useful last fallback to ensure that the store
-  // is functions (meaning store.get(), store.set(), etc will all function).
-  // However, stored values will not persist when the browser navigates to
-  // a new page or reloads the current page.
+              wrapEnter
+                  .append('input')
+                  .attr('class', 'member-role')
+                  .property('type', 'text')
+                  .attr('maxlength', 255)
+                  .attr('placeholder', t('inspector.role'))
+                  .call(utilNoAuto)
+                  .property('value', function(d) { return d.member.role; })
+                  .on('blur', changeRole)
+                  .on('change', changeRole);
 
-  var memoryStorage_1 = {
-       name: 'memoryStorage',
-       read: read$5,
-       write: write$5,
-       each: each$7,
-       remove: remove$8,
-       clearAll: clearAll$5,
-  };
+              wrapEnter
+                  .append('button')
+                  .attr('tabindex', -1)
+                  .attr('class', 'remove form-field-button member-delete')
+                  .call(svgIcon('#iD-operation-delete'))
+                  .on('click', deleteMembership);
 
-  var memoryStorage = {};
+              if (taginfo) {
+                  wrapEnter.each(bindTypeahead);
+              }
 
-  function read$5(key) {
-       return memoryStorage[key]
-  }
 
-  function write$5(key, data) {
-       memoryStorage[key] = data;
-  }
+              var newMembership = list.selectAll('.member-row-new')
+                  .data(_showBlank ? [0] : []);
 
-  function each$7(callback) {
-       for (var key in memoryStorage) {
-               if (memoryStorage.hasOwnProperty(key)) {
-                       callback(memoryStorage[key], key);
-               }
-       }
-  }
+              // Exit
+              newMembership.exit()
+                  .remove();
 
-  function remove$8(key) {
-       delete memoryStorage[key];
-  }
+              // Enter
+              var newMembershipEnter = newMembership.enter()
+                  .append('li')
+                  .attr('class', 'member-row member-row-new form-field');
 
-  function clearAll$5(key) {
-       memoryStorage = {};
-  }
+              newMembershipEnter
+                  .append('label')
+                  .attr('class', 'form-field-label')
+                  .append('input')
+                  .attr('placeholder', t('inspector.choose_relation'))
+                  .attr('type', 'text')
+                  .attr('class', 'member-entity-input')
+                  .call(utilNoAuto);
 
-  var all = [
-       // Listed in order of usage preference
-       localStorage_1,
-       oldFFGlobalStorage,
-       oldIEUserDataStorage,
-       cookieStorage,
-       sessionStorage_1,
-       memoryStorage_1
-  ];
+              var newWrapEnter = newMembershipEnter
+                  .append('div')
+                  .attr('class', 'form-field-input-wrap form-field-input-member');
 
-  /* eslint-disable */
+              newWrapEnter
+                  .append('input')
+                  .attr('class', 'member-role')
+                  .property('type', 'text')
+                  .attr('maxlength', 255)
+                  .attr('placeholder', t('inspector.role'))
+                  .call(utilNoAuto);
 
-  //  json2.js
-  //  2016-10-28
-  //  Public Domain.
-  //  NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK.
-  //  See http://www.JSON.org/js.html
-  //  This code should be minified before deployment.
-  //  See http://javascript.crockford.com/jsmin.html
+              newWrapEnter
+                  .append('button')
+                  .attr('tabindex', -1)
+                  .attr('class', 'remove form-field-button member-delete')
+                  .call(svgIcon('#iD-operation-delete'))
+                  .on('click', function() {
+                      list.selectAll('.member-row-new')
+                          .remove();
+                  });
 
-  //  USE YOUR OWN COPY. IT IS EXTREMELY UNWISE TO LOAD CODE FROM SERVERS YOU DO
-  //  NOT CONTROL.
+              // Update
+              newMembership = newMembership
+                  .merge(newMembershipEnter);
 
-  //  This file creates a global JSON object containing two methods: stringify
-  //  and parse. This file provides the ES5 JSON capability to ES3 systems.
-  //  If a project might run on IE8 or earlier, then this file should be included.
-  //  This file does nothing on ES5 systems.
+              newMembership.selectAll('.member-entity-input')
+                  .on('blur', cancelEntity)   // if it wasn't accepted normally, cancel it
+                  .call(nearbyCombo
+                      .on('accept', acceptEntity)
+                      .on('cancel', cancelEntity)
+                  );
 
-  //      JSON.stringify(value, replacer, space)
-  //          value       any JavaScript value, usually an object or array.
-  //          replacer    an optional parameter that determines how object
-  //                      values are stringified for objects. It can be a
-  //                      function or an array of strings.
-  //          space       an optional parameter that specifies the indentation
-  //                      of nested structures. If it is omitted, the text will
-  //                      be packed without extra whitespace. If it is a number,
-  //                      it will specify the number of spaces to indent at each
-  //                      level. If it is a string (such as "\t" or "&nbsp;"),
-  //                      it contains the characters used to indent at each level.
-  //          This method produces a JSON text from a JavaScript value.
-  //          When an object value is found, if the object contains a toJSON
-  //          method, its toJSON method will be called and the result will be
-  //          stringified. A toJSON method does not serialize: it returns the
-  //          value represented by the name/value pair that should be serialized,
-  //          or undefined if nothing should be serialized. The toJSON method
-  //          will be passed the key associated with the value, and this will be
-  //          bound to the value.
 
-  //          For example, this would serialize Dates as ISO strings.
+              // Container for the Add button
+              var addRow = selection.selectAll('.add-row')
+                  .data([0]);
 
-  //              Date.prototype.toJSON = function (key) {
-  //                  function f(n) {
-  //                      // Format integers to have at least two digits.
-  //                      return (n < 10)
-  //                          ? "0" + n
-  //                          : n;
-  //                  }
-  //                  return this.getUTCFullYear()   + "-" +
-  //                       f(this.getUTCMonth() + 1) + "-" +
-  //                       f(this.getUTCDate())      + "T" +
-  //                       f(this.getUTCHours())     + ":" +
-  //                       f(this.getUTCMinutes())   + ":" +
-  //                       f(this.getUTCSeconds())   + "Z";
-  //              };
+              // enter
+              var addRowEnter = addRow.enter()
+                  .append('div')
+                  .attr('class', 'add-row');
+
+              addRowEnter
+                  .append('button')
+                  .attr('class', 'add-relation')
+                  .call(svgIcon('#iD-icon-plus', 'light'));
 
-  //          You can provide an optional replacer method. It will be passed the
-  //          key and value of each member, with this bound to the containing
-  //          object. The value that is returned from your method will be
-  //          serialized. If your method returns undefined, then the member will
-  //          be excluded from the serialization.
+              addRowEnter
+                  .append('div')
+                  .attr('class', 'space-value');   // preserve space
 
-  //          If the replacer parameter is an array of strings, then it will be
-  //          used to select the members to be serialized. It filters the results
-  //          such that only members with keys listed in the replacer array are
-  //          stringified.
+              addRowEnter
+                  .append('div')
+                  .attr('class', 'space-buttons');  // preserve space
 
-  //          Values that do not have JSON representations, such as undefined or
-  //          functions, will not be serialized. Such values in objects will be
-  //          dropped; in arrays they will be replaced with null. You can use
-  //          a replacer function to replace those with JSON values.
+              // update
+              addRow = addRow
+                  .merge(addRowEnter);
 
-  //          JSON.stringify(undefined) returns undefined.
+              addRow.select('.add-relation')
+                  .on('click', function() {
+                      _showBlank = true;
+                      content(selection);
+                      list.selectAll('.member-entity-input').node().focus();
+                  });
 
-  //          The optional space parameter produces a stringification of the
-  //          value that is filled with line breaks and indentation to make it
-  //          easier to read.
 
-  //          If the space parameter is a non-empty string, then that string will
-  //          be used for indentation. If the space parameter is a number, then
-  //          the indentation will be that many spaces.
+              function acceptEntity(d) {
+                  if (!d) {
+                      cancelEntity();
+                      return;
+                  }
+                  var role = list.selectAll('.member-row-new .member-role').property('value');
+                  addMembership(d, role);
+              }
 
-  //          Example:
 
-  //          text = JSON.stringify(["e", {pluribus: "unum"}]);
-  //          // text is '["e",{"pluribus":"unum"}]'
+              function cancelEntity() {
+                  var input = newMembership.selectAll('.member-entity-input');
+                  input.property('value', '');
+              }
 
-  //          text = JSON.stringify(["e", {pluribus: "unum"}], null, "\t");
-  //          // text is '[\n\t"e",\n\t{\n\t\t"pluribus": "unum"\n\t}\n]'
 
-  //          text = JSON.stringify([new Date()], function (key, value) {
-  //              return this[key] instanceof Date
-  //                  ? "Date(" + this[key] + ")"
-  //                  : value;
-  //          });
-  //          // text is '["Date(---current time---)"]'
+              function bindTypeahead(d) {
+                  var row = select(this);
+                  var role = row.selectAll('input.member-role');
+                  var origValue = role.property('value');
 
-  //      JSON.parse(text, reviver)
-  //          This method parses a JSON text to produce an object or array.
-  //          It can throw a SyntaxError exception.
+                  function sort(value, data) {
+                      var sameletter = [];
+                      var other = [];
+                      for (var i = 0; i < data.length; i++) {
+                          if (data[i].value.substring(0, value.length) === value) {
+                              sameletter.push(data[i]);
+                          } else {
+                              other.push(data[i]);
+                          }
+                      }
+                      return sameletter.concat(other);
+                  }
 
-  //          The optional reviver parameter is a function that can filter and
-  //          transform the results. It receives each of the keys and values,
-  //          and its return value is used instead of the original value.
-  //          If it returns what it received, then the structure is not modified.
-  //          If it returns undefined then the member is deleted.
+                  role.call(uiCombobox(context, 'member-role')
+                      .fetcher(function(role, callback) {
+                          var rtype = d.relation.tags.type;
+                          taginfo.roles({
+                              debounce: true,
+                              rtype: rtype || '',
+                              geometry: context.geometry(_entityID),
+                              query: role
+                          }, function(err, data) {
+                              if (!err) callback(sort(role, data));
+                          });
+                      })
+                      .on('cancel', function() {
+                          role.property('value', origValue);
+                      })
+                  );
+              }
 
-  //          Example:
 
-  //          // Parse the text. Values that look like ISO date strings will
-  //          // be converted to Date objects.
+              function unbind() {
+                  var row = select(this);
 
-  //          myData = JSON.parse(text, function (key, value) {
-  //              var a;
-  //              if (typeof value === "string") {
-  //                  a =
-  //   /^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2}(?:\.\d*)?)Z$/.exec(value);
-  //                  if (a) {
-  //                      return new Date(Date.UTC(+a[1], +a[2] - 1, +a[3], +a[4],
-  //                          +a[5], +a[6]));
-  //                  }
-  //              }
-  //              return value;
-  //          });
+                  row.selectAll('input.member-role')
+                      .call(uiCombobox.off);
+              }
+          }
+      }
 
-  //          myData = JSON.parse('["Date(09/09/2001)"]', function (key, value) {
-  //              var d;
-  //              if (typeof value === "string" &&
-  //                      value.slice(0, 5) === "Date(" &&
-  //                      value.slice(-1) === ")") {
-  //                  d = new Date(value.slice(5, -1));
-  //                  if (d) {
-  //                      return d;
-  //                  }
-  //              }
-  //              return value;
-  //          });
 
-  //  This is a reference implementation. You are free to copy, modify, or
-  //  redistribute.
+      rawMembershipEditor.entityID = function(val) {
+          if (!arguments.length) return _entityID;
+          _entityID = val;
+          _showBlank = false;
+          return rawMembershipEditor;
+      };
 
-  /*jslint
-      eval, for, this
-  */
 
-  /*property
-      JSON, apply, call, charCodeAt, getUTCDate, getUTCFullYear, getUTCHours,
-      getUTCMinutes, getUTCMonth, getUTCSeconds, hasOwnProperty, join,
-      lastIndex, length, parse, prototype, push, replace, slice, stringify,
-      test, toJSON, toString, valueOf
-  */
+      return rawMembershipEditor;
+  }
 
+  // Pass `which` object of the form:
+  // {
+  //   key: 'string',     // required
+  //   value: 'string'    // optional
+  // }
+  //   -or-
+  // {
+  //   rtype: 'string'    // relation type  (e.g. 'multipolygon')
+  // }
+  //   -or-
+  // {
+  //   qid: 'string'      // brand wikidata  (e.g. 'Q37158')
+  // }
+  //
+  function uiTagReference(what) {
+      var wikibase = what.qid ? services.wikidata : services.osmWikibase;
+      var tagReference = {};
 
-  // Create a JSON object only if one does not already exist. We create the
-  // methods in a closure to avoid creating global variables.
+      var _button = select(null);
+      var _body = select(null);
+      var _loaded;
+      var _showing;
 
-  if (typeof JSON !== "object") {
-      JSON = {};
-  }
 
-  (function () {
+      function load() {
+          if (!wikibase) return;
 
-      var rx_one = /^[\],:{}\s]*$/;
-      var rx_two = /\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g;
-      var rx_three = /"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g;
-      var rx_four = /(?:^|:|,)(?:\s*\[)+/g;
-      var rx_escapable = /[\\"\u0000-\u001f\u007f-\u009f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g;
-      var rx_dangerous = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g;
+          _button
+              .classed('tag-reference-loading', true);
 
-      function f(n) {
-          // Format integers to have at least two digits.
-          return n < 10
-              ? "0" + n
-              : n;
+          wikibase.getDocs(what, gotDocs);
       }
 
-      function this_value() {
-          return this.valueOf();
-      }
 
-      if (typeof Date.prototype.toJSON !== "function") {
+      function gotDocs(err, docs) {
+          _body.html('');
 
-          Date.prototype.toJSON = function () {
+          if (!docs || !docs.title) {
+              _body
+                  .append('p')
+                  .attr('class', 'tag-reference-description')
+                  .text(t('inspector.no_documentation_key'));
+              done();
+              return;
+          }
 
-              return isFinite(this.valueOf())
-                  ? this.getUTCFullYear() + "-" +
-                          f(this.getUTCMonth() + 1) + "-" +
-                          f(this.getUTCDate()) + "T" +
-                          f(this.getUTCHours()) + ":" +
-                          f(this.getUTCMinutes()) + ":" +
-                          f(this.getUTCSeconds()) + "Z"
-                  : null;
-          };
+          if (docs.imageURL) {
+              _body
+                  .append('img')
+                  .attr('class', 'tag-reference-wiki-image')
+                  .attr('src', docs.imageURL)
+                  .on('load', function() { done(); })
+                  .on('error', function() { select(this).remove(); done(); });
+          } else {
+              done();
+          }
 
-          Boolean.prototype.toJSON = this_value;
-          Number.prototype.toJSON = this_value;
-          String.prototype.toJSON = this_value;
+          _body
+              .append('p')
+              .attr('class', 'tag-reference-description')
+              .text(docs.description || t('inspector.no_documentation_key'))
+              .append('a')
+              .attr('class', 'tag-reference-edit')
+              .attr('target', '_blank')
+              .attr('tabindex', -1)
+              .attr('title', t('inspector.edit_reference'))
+              .attr('href', docs.editURL)
+              .call(svgIcon('#iD-icon-edit', 'inline'));
+
+          if (docs.wiki) {
+              _body
+                .append('a')
+                .attr('class', 'tag-reference-link')
+                .attr('target', '_blank')
+                .attr('tabindex', -1)
+                .attr('href', docs.wiki.url)
+                .call(svgIcon('#iD-icon-out-link', 'inline'))
+                .append('span')
+                .text(t(docs.wiki.text));
+          }
+
+          // Add link to info about "good changeset comments" - #2923
+          if (what.key === 'comment') {
+              _body
+                  .append('a')
+                  .attr('class', 'tag-reference-comment-link')
+                  .attr('target', '_blank')
+                  .attr('tabindex', -1)
+                  .call(svgIcon('#iD-icon-out-link', 'inline'))
+                  .attr('href', t('commit.about_changeset_comments_link'))
+                  .append('span')
+                  .text(t('commit.about_changeset_comments'));
+          }
       }
 
-      var gap;
-      var indent;
-      var meta;
-      var rep;
 
+      function done() {
+          _loaded = true;
 
-      function quote(string) {
+          _button
+              .classed('tag-reference-loading', false);
 
-  // If the string contains no control characters, no quote characters, and no
-  // backslash characters, then we can safely slap some quotes around it.
-  // Otherwise we must also replace the offending characters with safe escape
-  // sequences.
+          _body
+              .classed('expanded', true)
+              .transition()
+              .duration(200)
+              .style('max-height', '200px')
+              .style('opacity', '1');
 
-          rx_escapable.lastIndex = 0;
-          return rx_escapable.test(string)
-              ? "\"" + string.replace(rx_escapable, function (a) {
-                  var c = meta[a];
-                  return typeof c === "string"
-                      ? c
-                      : "\\u" + ("0000" + a.charCodeAt(0).toString(16)).slice(-4);
-              }) + "\""
-              : "\"" + string + "\"";
+          _showing = true;
       }
 
 
-      function str(key, holder) {
+      function hide() {
+          _body
+              .transition()
+              .duration(200)
+              .style('max-height', '0px')
+              .style('opacity', '0')
+              .on('end', function () {
+                  _body.classed('expanded', false);
+              });
 
-  // Produce a string from holder[key].
+          _showing = false;
+      }
 
-          var i;          // The loop counter.
-          var k;          // The member key.
-          var v;          // The member value.
-          var length;
-          var mind = gap;
-          var partial;
-          var value = holder[key];
 
-  // If the value has a toJSON method, call it to obtain a replacement value.
+      tagReference.button = function(selection) {
+          _button = selection.selectAll('.tag-reference-button')
+              .data([0]);
 
-          if (value && typeof value === "object" &&
-                  typeof value.toJSON === "function") {
-              value = value.toJSON(key);
-          }
+          _button = _button.enter()
+              .append('button')
+              .attr('class', 'tag-reference-button')
+              .attr('title', t('icons.information'))
+              .attr('tabindex', -1)
+              .call(svgIcon('#iD-icon-inspect'))
+              .merge(_button);
 
-  // If we were called with a replacer function, then call the replacer to
-  // obtain a replacement value.
+          _button
+              .on('click', function () {
+                  event.stopPropagation();
+                  event.preventDefault();
+                  this.blur();    // avoid keeping focus on the button - #4641
+                  if (_showing) {
+                      hide();
+                  } else if (_loaded) {
+                      done();
+                  } else {
+                      load();
+                  }
+              });
+      };
 
-          if (typeof rep === "function") {
-              value = rep.call(holder, key, value);
-          }
 
-  // What happens next depends on the value's type.
+      tagReference.body = function(selection) {
+          var itemID = what.qid || what.rtype || (what.key + '-' + what.value);
+          _body = selection.selectAll('.tag-reference-body')
+              .data([itemID], function(d) { return d; });
 
-          switch (typeof value) {
-          case "string":
-              return quote(value);
+          _body.exit()
+              .remove();
 
-          case "number":
+          _body = _body.enter()
+              .append('div')
+              .attr('class', 'tag-reference-body')
+              .style('max-height', '0')
+              .style('opacity', '0')
+              .merge(_body);
 
-  // JSON numbers must be finite. Encode non-finite numbers as null.
+          if (_showing === false) {
+              hide();
+          }
+      };
 
-              return isFinite(value)
-                  ? String(value)
-                  : "null";
 
-          case "boolean":
-          case "null":
+      tagReference.showing = function(val) {
+          if (!arguments.length) return _showing;
+          _showing = val;
+          return tagReference;
+      };
 
-  // If the value is a boolean or null, convert it to a string. Note:
-  // typeof null does not produce "null". The case is included here in
-  // the remote chance that this gets fixed someday.
 
-              return String(value);
+      return tagReference;
+  }
 
-  // If the type is "object", we might be dealing with an object or an array or
-  // null.
+  // This currently only works with the 'restrictions' field
+  // It borrows some code from uiHelp
 
-          case "object":
+  function uiFieldHelp(context, fieldName) {
+      var fieldHelp = {};
+      var _inspector = select(null);
+      var _wrap = select(null);
+      var _body = select(null);
 
-  // Due to a specification blunder in ECMAScript, typeof null is "object",
-  // so watch out for that case.
+      var fieldHelpKeys = {
+          restrictions: [
+              ['about',[
+                  'about',
+                  'from_via_to',
+                  'maxdist',
+                  'maxvia'
+              ]],
+              ['inspecting',[
+                  'about',
+                  'from_shadow',
+                  'allow_shadow',
+                  'restrict_shadow',
+                  'only_shadow',
+                  'restricted',
+                  'only'
+              ]],
+              ['modifying',[
+                  'about',
+                  'indicators',
+                  'allow_turn',
+                  'restrict_turn',
+                  'only_turn'
+              ]],
+              ['tips',[
+                  'simple',
+                  'simple_example',
+                  'indirect',
+                  'indirect_example',
+                  'indirect_noedit'
+              ]]
+          ]
+      };
 
-              if (!value) {
-                  return "null";
-              }
+      var fieldHelpHeadings = {};
 
-  // Make an array to hold the partial results of stringifying this object value.
+      var replacements = {
+          distField: t('restriction.controls.distance'),
+          viaField: t('restriction.controls.via'),
+          fromShadow: icon('#iD-turn-shadow', 'pre-text shadow from'),
+          allowShadow: icon('#iD-turn-shadow', 'pre-text shadow allow'),
+          restrictShadow: icon('#iD-turn-shadow', 'pre-text shadow restrict'),
+          onlyShadow: icon('#iD-turn-shadow', 'pre-text shadow only'),
+          allowTurn: icon('#iD-turn-yes', 'pre-text turn'),
+          restrictTurn: icon('#iD-turn-no', 'pre-text turn'),
+          onlyTurn: icon('#iD-turn-only', 'pre-text turn')
+      };
 
-              gap += indent;
-              partial = [];
 
-  // Is the value an array?
+      // For each section, squash all the texts into a single markdown document
+      var docs = fieldHelpKeys[fieldName].map(function(key) {
+          var helpkey = 'help.field.' + fieldName + '.' + key[0];
+          var text = key[1].reduce(function(all, part) {
+              var subkey = helpkey + '.' + part;
+              var depth = fieldHelpHeadings[subkey];                     // is this subkey a heading?
+              var hhh = depth ? Array(depth + 1).join('#') + ' ' : '';   // if so, prepend with some ##'s
+              return all + hhh + t(subkey, replacements) + '\n\n';
+          }, '');
 
-              if (Object.prototype.toString.apply(value) === "[object Array]") {
+          return {
+              key: helpkey,
+              title: t(helpkey + '.title'),
+              html: marked(text.trim())
+          };
+      });
 
-  // The value is an array. Stringify every element. Use null as a placeholder
-  // for non-JSON values.
 
-                  length = value.length;
-                  for (i = 0; i < length; i += 1) {
-                      partial[i] = str(i, value) || "null";
-                  }
+      function show() {
+          updatePosition();
 
-  // Join all of the elements together, separated with commas, and wrap them in
-  // brackets.
+          _body
+              .classed('hide', false)
+              .style('opacity', '0')
+              .transition()
+              .duration(200)
+              .style('opacity', '1');
+      }
 
-                  v = partial.length === 0
-                      ? "[]"
-                      : gap
-                          ? "[\n" + gap + partial.join(",\n" + gap) + "\n" + mind + "]"
-                          : "[" + partial.join(",") + "]";
-                  gap = mind;
-                  return v;
-              }
 
-  // If the replacer is an array, use it to select the members to be stringified.
+      function hide() {
+          _body
+              .classed('hide', true)
+              .transition()
+              .duration(200)
+              .style('opacity', '0')
+              .on('end', function () {
+                  _body.classed('hide', true);
+              });
+      }
 
-              if (rep && typeof rep === "object") {
-                  length = rep.length;
-                  for (i = 0; i < length; i += 1) {
-                      if (typeof rep[i] === "string") {
-                          k = rep[i];
-                          v = str(k, value);
-                          if (v) {
-                              partial.push(quote(k) + (
-                                  gap
-                                      ? ": "
-                                      : ":"
-                              ) + v);
-                          }
-                      }
-                  }
-              } else {
 
-  // Otherwise, iterate through all of the keys in the object.
+      function clickHelp(index) {
+          var d = docs[index];
+          var tkeys = fieldHelpKeys[fieldName][index][1];
 
-                  for (k in value) {
-                      if (Object.prototype.hasOwnProperty.call(value, k)) {
-                          v = str(k, value);
-                          if (v) {
-                              partial.push(quote(k) + (
-                                  gap
-                                      ? ": "
-                                      : ":"
-                              ) + v);
-                          }
-                      }
-                  }
-              }
+          _body.selectAll('.field-help-nav-item')
+              .classed('active', function(d, i) { return i === index; });
 
-  // Join all of the member texts together, separated with commas,
-  // and wrap them in braces.
+          var content = _body.selectAll('.field-help-content')
+              .html(d.html);
 
-              v = partial.length === 0
-                  ? "{}"
-                  : gap
-                      ? "{\n" + gap + partial.join(",\n" + gap) + "\n" + mind + "}"
-                      : "{" + partial.join(",") + "}";
-              gap = mind;
-              return v;
+          // class the paragraphs so we can find and style them
+          content.selectAll('p')
+              .attr('class', function(d, i) { return tkeys[i]; });
+
+          // insert special content for certain help sections
+          if (d.key === 'help.field.restrictions.inspecting') {
+              content
+                  .insert('img', 'p.from_shadow')
+                  .attr('class', 'field-help-image cf')
+                  .attr('src', context.imagePath('tr_inspect.gif'));
+
+          } else if (d.key === 'help.field.restrictions.modifying') {
+              content
+                  .insert('img', 'p.allow_turn')
+                  .attr('class', 'field-help-image cf')
+                  .attr('src', context.imagePath('tr_modify.gif'));
           }
       }
 
-  // If the JSON object does not yet have a stringify method, give it one.
 
-      if (typeof JSON.stringify !== "function") {
-          meta = {    // table of character substitutions
-              "\b": "\\b",
-              "\t": "\\t",
-              "\n": "\\n",
-              "\f": "\\f",
-              "\r": "\\r",
-              "\"": "\\\"",
-              "\\": "\\\\"
-          };
-          JSON.stringify = function (value, replacer, space) {
+      fieldHelp.button = function(selection) {
+          if (_body.empty()) return;
 
-  // The stringify method takes a value and an optional replacer, and an optional
-  // space parameter, and returns a JSON text. The replacer can be a function
-  // that can replace values, or an array of strings that will select the keys.
-  // A default replacer method can be provided. Use of the space parameter can
-  // produce text that is more easily readable.
+          var button = selection.selectAll('.field-help-button')
+              .data([0]);
 
-              var i;
-              gap = "";
-              indent = "";
+          // enter/update
+          button.enter()
+              .append('button')
+              .attr('class', 'field-help-button')
+              .attr('tabindex', -1)
+              .call(svgIcon('#iD-icon-help'))
+              .merge(button)
+              .on('click', function () {
+                  event.stopPropagation();
+                  event.preventDefault();
+                  if (_body.classed('hide')) {
+                      show();
+                  } else {
+                      hide();
+                  }
+              });
+      };
 
-  // If the space parameter is a number, make an indent string containing that
-  // many spaces.
 
-              if (typeof space === "number") {
-                  for (i = 0; i < space; i += 1) {
-                      indent += " ";
-                  }
+      function updatePosition() {
+          var wrap = _wrap.node();
+          var inspector = _inspector.node();
+          var wRect = wrap.getBoundingClientRect();
+          var iRect = inspector.getBoundingClientRect();
 
-  // If the space parameter is a string, it will be used as the indent string.
+          _body
+              .style('top', wRect.top + inspector.scrollTop - iRect.top + 'px');
+      }
 
-              } else if (typeof space === "string") {
-                  indent = space;
-              }
 
-  // If there is a replacer, it must be a function or an array.
-  // Otherwise, throw an error.
+      fieldHelp.body = function(selection) {
+          // This control expects the field to have a form-field-input-wrap div
+          _wrap = selection.selectAll('.form-field-input-wrap');
+          if (_wrap.empty()) return;
 
-              rep = replacer;
-              if (replacer && typeof replacer !== "function" &&
-                      (typeof replacer !== "object" ||
-                      typeof replacer.length !== "number")) {
-                  throw new Error("JSON.stringify");
-              }
+          // absolute position relative to the inspector, so it "floats" above the fields
+          _inspector = select('#sidebar .entity-editor-pane .inspector-body');
+          if (_inspector.empty()) return;
 
-  // Make a fake root object containing our value under the key of "".
-  // Return the result of stringifying the value.
+          _body = _inspector.selectAll('.field-help-body')
+              .data([0]);
 
-              return str("", {"": value});
-          };
-      }
+          var enter = _body.enter()
+              .append('div')
+              .attr('class', 'field-help-body hide');   // initially hidden
 
+          var titleEnter = enter
+              .append('div')
+              .attr('class', 'field-help-title cf');
 
-  // If the JSON object does not yet have a parse method, give it one.
+          titleEnter
+              .append('h2')
+              .attr('class', ((textDirection === 'rtl') ? 'fr' : 'fl'))
+              .text(t('help.field.' + fieldName + '.title'));
 
-      if (typeof JSON.parse !== "function") {
-          JSON.parse = function (text, reviver) {
+          titleEnter
+              .append('button')
+              .attr('class', 'fr close')
+              .on('click', function() {
+                  event.stopPropagation();
+                  event.preventDefault();
+                  hide();
+              })
+              .call(svgIcon('#iD-icon-close'));
 
-  // The parse method takes a text and an optional reviver function, and returns
-  // a JavaScript value if the text is a valid JSON text.
+          var navEnter = enter
+              .append('div')
+              .attr('class', 'field-help-nav cf');
 
-              var j;
+          var titles = docs.map(function(d) { return d.title; });
+          navEnter.selectAll('.field-help-nav-item')
+              .data(titles)
+              .enter()
+              .append('div')
+              .attr('class', 'field-help-nav-item')
+              .text(function(d) { return d; })
+              .on('click', function(d, i) {
+                  event.stopPropagation();
+                  event.preventDefault();
+                  clickHelp(i);
+              });
 
-              function walk(holder, key) {
+          enter
+              .append('div')
+              .attr('class', 'field-help-content');
 
-  // The walk method is used to recursively walk the resulting structure so
-  // that modifications can be made.
+          _body = _body
+              .merge(enter);
 
-                  var k;
-                  var v;
-                  var value = holder[key];
-                  if (value && typeof value === "object") {
-                      for (k in value) {
-                          if (Object.prototype.hasOwnProperty.call(value, k)) {
-                              v = walk(value, k);
-                              if (v !== undefined) {
-                                  value[k] = v;
-                              } else {
-                                  delete value[k];
-                              }
-                          }
-                      }
-                  }
-                  return reviver.call(holder, key, value);
-              }
+          clickHelp(0);
+      };
 
 
-  // Parsing happens in four stages. In the first stage, we replace certain
-  // Unicode characters with escape sequences. JavaScript handles many characters
-  // incorrectly, either silently deleting them, or treating them as line endings.
+      return fieldHelp;
+  }
 
-              text = String(text);
-              rx_dangerous.lastIndex = 0;
-              if (rx_dangerous.test(text)) {
-                  text = text.replace(rx_dangerous, function (a) {
-                      return "\\u" +
-                              ("0000" + a.charCodeAt(0).toString(16)).slice(-4);
-                  });
-              }
+  function uiFieldCheck(field, context) {
+      var dispatch$1 = dispatch('change');
+      var options = field.strings && field.strings.options;
+      var values = [];
+      var texts = [];
 
-  // In the second stage, we run the text against regular expressions that look
-  // for non-JSON patterns. We are especially concerned with "()" and "new"
-  // because they can cause invocation, and "=" because it can cause mutation.
-  // But just to be safe, we want to reject all unexpected forms.
+      var input = select(null);
+      var text = select(null);
+      var label = select(null);
+      var reverser = select(null);
 
-  // We split the second stage into 4 regexp operations in order to work around
-  // crippling inefficiencies in IE's and Safari's regexp engines. First we
-  // replace the JSON backslash pairs with "@" (a non-JSON character). Second, we
-  // replace all simple value tokens with "]" characters. Third, we delete all
-  // open brackets that follow a colon or comma or that begin the text. Finally,
-  // we look to see that the remaining characters are only whitespace or "]" or
-  // "," or ":" or "{" or "}". If that is so, then the text is safe for eval.
+      var _impliedYes;
+      var _entityID;
+      var _value;
 
-              if (
-                  rx_one.test(
-                      text
-                          .replace(rx_two, "@")
-                          .replace(rx_three, "]")
-                          .replace(rx_four, "")
-                  )
-              ) {
 
-  // In the third stage we use the eval function to compile the text into a
-  // JavaScript structure. The "{" operator is subject to a syntactic ambiguity
-  // in JavaScript: it can begin a block or an object literal. We wrap the text
-  // in parens to eliminate the ambiguity.
+      if (options) {
+          for (var k in options) {
+              values.push(k === 'undefined' ? undefined : k);
+              texts.push(field.t('options.' + k, { 'default': options[k] }));
+          }
+      } else {
+          values = [undefined, 'yes'];
+          texts = [t('inspector.unknown'), t('inspector.check.yes')];
+          if (field.type !== 'defaultCheck') {
+              values.push('no');
+              texts.push(t('inspector.check.no'));
+          }
+      }
 
-                  j = eval("(" + text + ")");
 
-  // In the optional fourth stage, we recursively walk the new structure, passing
-  // each name/value pair to a reviver function for possible transformation.
+      // Checks tags to see whether an undefined value is "Assumed to be Yes"
+      function checkImpliedYes() {
+          _impliedYes = (field.id === 'oneway_yes');
 
-                  return (typeof reviver === "function")
-                      ? walk({"": j}, "")
-                      : j;
+          // hack: pretend `oneway` field is a `oneway_yes` field
+          // where implied oneway tag exists (e.g. `junction=roundabout`) #2220, #1841
+          if (field.id === 'oneway') {
+              var entity = context.entity(_entityID);
+              for (var key in entity.tags) {
+                  if (key in osmOneWayTags && (entity.tags[key] in osmOneWayTags[key])) {
+                      _impliedYes = true;
+                      texts[0] = t('presets.fields.oneway_yes.options.undefined');
+                      break;
+                  }
               }
+          }
+      }
 
-  // If the text is not JSON parseable, then a SyntaxError is thrown.
 
-              throw new SyntaxError("JSON.parse");
-          };
+      function reverserHidden() {
+          if (!select('div.inspector-hover').empty()) return true;
+          return !(_value === 'yes' || (_impliedYes && !_value));
       }
-  }());
 
-  var json2 = json2Plugin;
-
-  function json2Plugin() {
-       
-       return {}
-  }
 
-  var plugins = [json2];
+      function reverserSetText(selection) {
+          var entity = context.hasEntity(_entityID);
+          if (reverserHidden() || !entity) return selection;
 
-  var store_legacy = storeEngine.createStore(all, plugins);
+          var first = entity.first();
+          var last = entity.isClosed() ? entity.nodes[entity.nodes.length - 2] : entity.last();
+          var pseudoDirection = first < last;
+          var icon = pseudoDirection ? '#iD-icon-forward' : '#iD-icon-backward';
 
-  // # osm-auth
-  //
-  // This code is only compatible with IE10+ because the [XDomainRequest](http://bit.ly/LfO7xo)
-  // object, IE<10's idea of [CORS](http://en.wikipedia.org/wiki/Cross-origin_resource_sharing),
-  // does not support custom headers, which this uses everywhere.
-  var osmAuth = function(o) {
+          selection.selectAll('.reverser-span')
+              .text(t('inspector.check.reverser'))
+              .call(svgIcon(icon, 'inline'));
 
-      var oauth = {};
+          return selection;
+      }
 
-      // authenticated users will also have a request token secret, but it's
-      // not used in transactions with the server
-      oauth.authenticated = function() {
-          return !!(token('oauth_token') && token('oauth_token_secret'));
-      };
 
-      oauth.logout = function() {
-          token('oauth_token', '');
-          token('oauth_token_secret', '');
-          token('oauth_request_token_secret', '');
-          return oauth;
-      };
+      var check = function(selection) {
+          checkImpliedYes();
 
-      // TODO: detect lack of click event
-      oauth.authenticate = function(callback) {
-          if (oauth.authenticated()) return callback();
+          label = selection.selectAll('.form-field-input-wrap')
+              .data([0]);
 
-          oauth.logout();
+          var enter = label.enter()
+              .append('label')
+              .attr('class', 'form-field-input-wrap form-field-input-check');
 
-          // ## Getting a request token
-          var params = timenonce(getAuth(o)),
-              url = o.url + '/oauth/request_token';
+          enter
+              .append('input')
+              .property('indeterminate', field.type !== 'defaultCheck')
+              .attr('type', 'checkbox')
+              .attr('id', 'preset-input-' + field.safeid);
 
-          params.oauth_signature = ohauth_1.signature(
-              o.oauth_secret, '',
-              ohauth_1.baseString('POST', url, params));
+          enter
+              .append('span')
+              .text(texts[0])
+              .attr('class', 'value');
 
-          if (!o.singlepage) {
-              // Create a 600x550 popup window in the center of the screen
-              var w = 600, h = 550,
-                  settings = [
-                      ['width', w], ['height', h],
-                      ['left', screen.width / 2 - w / 2],
-                      ['top', screen.height / 2 - h / 2]].map(function(x) {
-                          return x.join('=');
-                      }).join(','),
-                  popup = window.open('about:blank', 'oauth_window', settings);
+          if (field.type === 'onewayCheck') {
+              enter
+                  .append('a')
+                  .attr('id', 'preset-input-' + field.safeid + '-reverser')
+                  .attr('class', 'reverser button' + (reverserHidden() ? ' hide' : ''))
+                  .attr('href', '#')
+                  .append('span')
+                  .attr('class', 'reverser-span');
           }
 
-          // Request a request token. When this is complete, the popup
-          // window is redirected to OSM's authorization page.
-          ohauth_1.xhr('POST', url, params, null, {}, reqTokenDone);
-          o.loading();
+          label = label.merge(enter);
+          input = label.selectAll('input');
+          text = label.selectAll('span.value');
 
-          function reqTokenDone(err, xhr) {
-              o.done();
-              if (err) return callback(err);
-              var resp = ohauth_1.stringQs(xhr.response);
-              token('oauth_request_token_secret', resp.oauth_token_secret);
-              var authorize_url = o.url + '/oauth/authorize?' + ohauth_1.qsString({
-                  oauth_token: resp.oauth_token,
-                  oauth_callback: resolveUrl(o.landing)
-              });
+          input
+              .on('click', function() {
+                  event.stopPropagation();
+                  var t = {};
+                  t[field.key] = values[(values.indexOf(_value) + 1) % values.length];
 
-              if (o.singlepage) {
-                  location.href = authorize_url;
-              } else {
-                  popup.location = authorize_url;
-              }
-          }
+                  // Don't cycle through `alternating` or `reversible` states - #4970
+                  // (They are supported as translated strings, but should not toggle with clicks)
+                  if (t[field.key] === 'reversible' || t[field.key] === 'alternating') {
+                      t[field.key] = values[0];
+                  }
 
-          // Called by a function in a landing page, in the popup window. The
-          // window closes itself.
-          window.authComplete = function(token) {
-              var oauth_token = ohauth_1.stringQs(token.split('?')[1]);
-              get_access_token(oauth_token.oauth_token);
-              delete window.authComplete;
-          };
+                  dispatch$1.call('change', this, t);
+              });
 
-          // ## Getting an request token
-          //
-          // At this point we have an `oauth_token`, brought in from a function
-          // call on a landing page popup.
-          function get_access_token(oauth_token) {
-              var url = o.url + '/oauth/access_token',
-                  params = timenonce(getAuth(o)),
-                  request_token_secret = token('oauth_request_token_secret');
-              params.oauth_token = oauth_token;
-              params.oauth_signature = ohauth_1.signature(
-                  o.oauth_secret,
-                  request_token_secret,
-                  ohauth_1.baseString('POST', url, params));
+          if (field.type === 'onewayCheck') {
+              reverser = label.selectAll('.reverser');
 
-              // ## Getting an access token
-              //
-              // The final token required for authentication. At this point
-              // we have a `request token secret`
-              ohauth_1.xhr('POST', url, params, null, {}, accessTokenDone);
-              o.loading();
+              reverser
+                  .call(reverserSetText)
+                  .on('click', function() {
+                      event.preventDefault();
+                      event.stopPropagation();
+                      context.perform(
+                          actionReverse(_entityID),
+                          t('operations.reverse.annotation')
+                      );
+                      select(this)
+                          .call(reverserSetText);
+                  });
           }
+      };
 
-          function accessTokenDone(err, xhr) {
-              o.done();
-              if (err) return callback(err);
-              var access_token = ohauth_1.stringQs(xhr.response);
-              token('oauth_token', access_token.oauth_token);
-              token('oauth_token_secret', access_token.oauth_token_secret);
-              callback(null, oauth);
-          }
+
+      check.entity = function(_) {
+          if (!arguments.length) return context.hasEntity(_entityID);
+          _entityID = _.id;
+          return check;
       };
 
-      oauth.bootstrapToken = function(oauth_token, callback) {
-          // ## Getting an request token
-          // At this point we have an `oauth_token`, brought in from a function
-          // call on a landing page popup.
-          function get_access_token(oauth_token) {
-              var url = o.url + '/oauth/access_token',
-                  params = timenonce(getAuth(o)),
-                  request_token_secret = token('oauth_request_token_secret');
-              params.oauth_token = oauth_token;
-              params.oauth_signature = ohauth_1.signature(
-                  o.oauth_secret,
-                  request_token_secret,
-                  ohauth_1.baseString('POST', url, params));
 
-              // ## Getting an access token
-              // The final token required for authentication. At this point
-              // we have a `request token secret`
-              ohauth_1.xhr('POST', url, params, null, {}, accessTokenDone);
-              o.loading();
+      check.tags = function(tags) {
+
+          function isChecked(val) {
+              return val !== 'no' && val !== '' && val !== undefined && val !== null;
           }
 
-          function accessTokenDone(err, xhr) {
-              o.done();
-              if (err) return callback(err);
-              var access_token = ohauth_1.stringQs(xhr.response);
-              token('oauth_token', access_token.oauth_token);
-              token('oauth_token_secret', access_token.oauth_token_secret);
-              callback(null, oauth);
+          function textFor(val) {
+              if (val === '') val = undefined;
+              var index = values.indexOf(val);
+              return (index !== -1 ? texts[index] : ('"' + val + '"'));
           }
 
-          get_access_token(oauth_token);
-      };
+          checkImpliedYes();
+          _value = tags[field.key] && tags[field.key].toLowerCase();
 
-      // # xhr
-      //
-      // A single XMLHttpRequest wrapper that does authenticated calls if the
-      // user has logged in.
-      oauth.xhr = function(options, callback) {
-          if (!oauth.authenticated()) {
-              if (o.auto) {
-                  return oauth.authenticate(run);
-              } else {
-                  callback('not authenticated', null);
-                  return;
-              }
-          } else {
-              return run();
+          if (field.type === 'onewayCheck' && (_value === '1' || _value === '-1')) {
+              _value = 'yes';
           }
 
-          function run() {
-              var params = timenonce(getAuth(o)),
-                  oauth_token_secret = token('oauth_token_secret'),
-                  url = (options.prefix !== false) ? o.url + options.path : options.path,
-                  url_parts = url.replace(/#.*$/, '').split('?', 2),
-                  base_url = url_parts[0],
-                  query = (url_parts.length === 2) ? url_parts[1] : '';
-
-              // https://tools.ietf.org/html/rfc5849#section-3.4.1.3.1
-              if ((!options.options || !options.options.header ||
-                  options.options.header['Content-Type'] === 'application/x-www-form-urlencoded') &&
-                  options.content) {
-                  params = immutable(params, ohauth_1.stringQs(options.content));
-              }
+          input
+              .property('indeterminate', field.type !== 'defaultCheck' && !_value)
+              .property('checked', isChecked(_value));
 
-              params.oauth_token = token('oauth_token');
-              params.oauth_signature = ohauth_1.signature(
-                  o.oauth_secret,
-                  oauth_token_secret,
-                  ohauth_1.baseString(options.method, base_url, immutable(params, ohauth_1.stringQs(query)))
-              );
+          text
+              .text(textFor(_value));
 
-              return ohauth_1.xhr(options.method, url, params, options.content, options.options, done);
-          }
+          label
+              .classed('set', !!_value);
 
-          function done(err, xhr) {
-              if (err) return callback(err);
-              else if (xhr.responseXML) return callback(err, xhr.responseXML);
-              else return callback(err, xhr.response);
+          if (field.type === 'onewayCheck') {
+              reverser
+                  .classed('hide', reverserHidden())
+                  .call(reverserSetText);
           }
       };
 
-      // pre-authorize this object, if we can just get a token and token_secret
-      // from the start
-      oauth.preauth = function(c) {
-          if (!c) return;
-          if (c.oauth_token) token('oauth_token', c.oauth_token);
-          if (c.oauth_token_secret) token('oauth_token_secret', c.oauth_token_secret);
-          return oauth;
+
+      check.focus = function() {
+          input.node().focus();
       };
 
-      oauth.options = function(_) {
-          if (!arguments.length) return o;
+      return utilRebind(check, dispatch$1, 'on');
+  }
+
+  /** Used for built-in method references. */
+  var arrayProto$1 = Array.prototype;
+
+  /** Built-in value references. */
+  var splice$1 = arrayProto$1.splice;
+
+  /**
+   * The base implementation of `_.pullAt` without support for individual
+   * indexes or capturing the removed elements.
+   *
+   * @private
+   * @param {Array} array The array to modify.
+   * @param {number[]} indexes The indexes of elements to remove.
+   * @returns {Array} Returns `array`.
+   */
+  function basePullAt(array, indexes) {
+    var length = array ? indexes.length : 0,
+        lastIndex = length - 1;
+
+    while (length--) {
+      var index = indexes[length];
+      if (length == lastIndex || index !== previous) {
+        var previous = index;
+        if (isIndex(index)) {
+          splice$1.call(array, index, 1);
+        } else {
+          baseUnset(array, index);
+        }
+      }
+    }
+    return array;
+  }
 
-          o = _;
-          o.url = o.url || 'https://www.openstreetmap.org';
-          o.landing = o.landing || 'land.html';
-          o.singlepage = o.singlepage || false;
+  /**
+   * Removes all elements from `array` that `predicate` returns truthy for
+   * and returns an array of the removed elements. The predicate is invoked
+   * with three arguments: (value, index, array).
+   *
+   * **Note:** Unlike `_.filter`, this method mutates `array`. Use `_.pull`
+   * to pull elements from an array by value.
+   *
+   * @static
+   * @memberOf _
+   * @since 2.0.0
+   * @category Array
+   * @param {Array} array The array to modify.
+   * @param {Function} [predicate=_.identity] The function invoked per iteration.
+   * @returns {Array} Returns the new array of removed elements.
+   * @example
+   *
+   * var array = [1, 2, 3, 4];
+   * var evens = _.remove(array, function(n) {
+   *   return n % 2 == 0;
+   * });
+   *
+   * console.log(array);
+   * // => [1, 3]
+   *
+   * console.log(evens);
+   * // => [2, 4]
+   */
+  function remove$8(array, predicate) {
+    var result = [];
+    if (!(array && array.length)) {
+      return result;
+    }
+    var index = -1,
+        indexes = [],
+        length = array.length;
 
-          // Optional loading and loading-done functions for nice UI feedback.
-          // by default, no-ops
-          o.loading = o.loading || function() {};
-          o.done = o.done || function() {};
+    predicate = baseIteratee(predicate, 3);
+    while (++index < length) {
+      var value = array[index];
+      if (predicate(value, index, array)) {
+        result.push(value);
+        indexes.push(index);
+      }
+    }
+    basePullAt(array, indexes);
+    return result;
+  }
 
-          return oauth.preauth(o);
-      };
+  function uiFieldCombo(field, context) {
+      var dispatch$1 = dispatch('change');
+      var nominatim = services.geocoder;
+      var taginfo = services.taginfo;
+      var isMulti = (field.type === 'multiCombo');
+      var isNetwork = (field.type === 'networkCombo');
+      var isSemi = (field.type === 'semiCombo');
+      var optstrings = field.strings && field.strings.options;
+      var optarray = field.options;
+      var snake_case = (field.snake_case || (field.snake_case === undefined));
+      var caseSensitive = field.caseSensitive;
+      var combobox = uiCombobox(context, 'combo-' + field.safeid)
+          .caseSensitive(caseSensitive)
+          .minItems(isMulti || isSemi ? 1 : 2);
+      var container = select(null);
+      var inputWrap = select(null);
+      var input = select(null);
+      var _comboData = [];
+      var _multiData = [];
+      var _entity;
+      var _country;
 
-      // 'stamp' an authentication object from `getAuth()`
-      // with a [nonce](http://en.wikipedia.org/wiki/Cryptographic_nonce)
-      // and timestamp
-      function timenonce(o) {
-          o.oauth_timestamp = ohauth_1.timestamp();
-          o.oauth_nonce = ohauth_1.nonce();
-          return o;
+      // ensure multiCombo field.key ends with a ':'
+      if (isMulti && /[^:]$/.test(field.key)) {
+          field.key += ':';
       }
 
-      // get/set tokens. These are prefixed with the base URL so that `osm-auth`
-      // can be used with multiple APIs and the keys in `localStorage`
-      // will not clash
-      var token;
 
-      if (store_legacy.enabled) {
-          token = function (x, y) {
-              if (arguments.length === 1) return store_legacy.get(o.url + x);
-              else if (arguments.length === 2) return store_legacy.set(o.url + x, y);
-          };
-      } else {
-          var storage = {};
-          token = function (x, y) {
-              if (arguments.length === 1) return storage[o.url + x];
-              else if (arguments.length === 2) return storage[o.url + x] = y;
-          };
+      function snake(s) {
+          return s.replace(/\s+/g, '_');
       }
 
-      // Get an authentication object. If you just add and remove properties
-      // from a single object, you'll need to use `delete` to make sure that
-      // it doesn't contain undesired properties for authentication
-      function getAuth(o) {
-          return {
-              oauth_consumer_key: o.oauth_consumer_key,
-              oauth_signature_method: 'HMAC-SHA1'
-          };
+      function unsnake(s) {
+          return s.replace(/_+/g, ' ');
       }
 
-      // potentially pre-authorize
-      oauth.options(o);
+      function clean(s) {
+          return s.split(';')
+              .map(function(s) { return s.trim(); })
+              .join(';');
+      }
 
-      return oauth;
-  };
 
-  var tiler$3 = utilTiler();
-  var dispatch$4 = dispatch('authLoading', 'authDone', 'change', 'loading', 'loaded', 'loadedNotes');
-  var urlroot = 'https://www.openstreetmap.org';
-  var oauth = osmAuth({
-      url: urlroot,
-      oauth_consumer_key: '5A043yRSEugj4DJ5TljuapfnrflWDte8jTOcWLlT',
-      oauth_secret: 'aB3jKq1TRsCOUrfOIZ6oQMEDmv2ptV76PA54NGLL',
-      loading: authLoading,
-      done: authDone
-  });
+      // returns the tag value for a display value
+      // (for multiCombo, dval should be the key suffix, not the entire key)
+      function tagValue(dval) {
+          dval = clean(dval || '');
 
-  var _blacklists = ['.*\.google(apis)?\..*/(vt|kh)[\?/].*([xyz]=.*){3}.*'];
-  var _tileCache = { loaded: {}, inflight: {}, seen: {} };
-  var _noteCache = { loaded: {}, inflight: {}, inflightPost: {}, note: {}, closed: {}, rtree: rbush_1() };
-  var _userCache = { toLoad: {}, user: {} };
-  var _changeset$1 = {};
+          if (optstrings) {
+              var found = find$1(_comboData, function(o) {
+                  return o.key && clean(o.value) === dval;
+              });
+              if (found) {
+                  return found.key;
+              }
+          }
 
-  var _connectionID = 1;
-  var _tileZoom = 16;
-  var _noteZoom = 12;
-  var _rateLimitError;
-  var _userChangesets;
-  var _userDetails;
-  var _off;
+          if (field.type === 'typeCombo' && !dval) {
+              return 'yes';
+          }
 
+          return (snake_case ? snake(dval) : dval) || undefined;
+      }
 
-  function authLoading() {
-      dispatch$4.call('authLoading');
-  }
 
+      // returns the display value for a tag value
+      // (for multiCombo, tval should be the key suffix, not the entire key)
+      function displayValue(tval) {
+          tval = tval || '';
 
-  function authDone() {
-      dispatch$4.call('authDone');
-  }
+          if (optstrings) {
+              var found = find$1(_comboData, function(o) { return o.key === tval && o.value; });
+              if (found) {
+                  return found.value;
+              }
+          }
 
+          if (field.type === 'typeCombo' && tval.toLowerCase() === 'yes') {
+              return '';
+          }
 
-  function abortRequest$3(i) {
-      if (i) {
-          i.abort();
+          return snake_case ? unsnake(tval) : tval;
       }
-  }
 
 
-  function abortUnwantedRequests$1(cache, tiles) {
-      forEach(cache.inflight, function(v, k) {
-          var wanted = find$1(tiles, function(tile) { return k === tile.id; });
-          if (!wanted) {
-              abortRequest$3(v);
-              delete cache.inflight[k];
-          }
-      });
-  }
+      function objectDifference(a, b) {
+          return reject(a, function(d1) {
+              return some(b, function(d2) { return d1.value === d2.value; });
+          });
+      }
 
 
-  function getLoc(attrs) {
-      var lon = attrs.lon && attrs.lon.value;
-      var lat = attrs.lat && attrs.lat.value;
-      return [parseFloat(lon), parseFloat(lat)];
-  }
+      function initCombo(selection, attachTo) {
+          if (optstrings) {
+              selection.attr('readonly', 'readonly');
+              selection.call(combobox, attachTo);
+              setStaticValues(setPlaceholder);
 
+          } else if (optarray) {
+              selection.call(combobox, attachTo);
+              setStaticValues(setPlaceholder);
 
-  function getNodes(obj) {
-      var elems = obj.getElementsByTagName('nd');
-      var nodes = new Array(elems.length);
-      for (var i = 0, l = elems.length; i < l; i++) {
-          nodes[i] = 'n' + elems[i].attributes.ref.value;
+          } else if (taginfo) {
+              selection.call(combobox.fetcher(setTaginfoValues), attachTo);
+              setTaginfoValues('', setPlaceholder);
+          }
       }
-      return nodes;
-  }
 
 
-  function getTags(obj) {
-      var elems = obj.getElementsByTagName('tag');
-      var tags = {};
-      for (var i = 0, l = elems.length; i < l; i++) {
-          var attrs = elems[i].attributes;
-          tags[attrs.k.value] = attrs.v.value;
-      }
+      function setStaticValues(callback) {
+          if (!(optstrings || optarray)) return;
 
-      return tags;
-  }
+          if (optstrings) {
+              _comboData = Object.keys(optstrings).map(function(k) {
+                  var v = field.t('options.' + k, { 'default': optstrings[k] });
+                  return {
+                      key: k,
+                      value: v,
+                      title: v
+                  };
+              });
 
+          } else if (optarray) {
+              _comboData = optarray.map(function(k) {
+                  var v = snake_case ? unsnake(k) : k;
+                  return {
+                      key: k,
+                      value: v,
+                      title: v
+                  };
+              });
+          }
 
-  function getMembers(obj) {
-      var elems = obj.getElementsByTagName('member');
-      var members = new Array(elems.length);
-      for (var i = 0, l = elems.length; i < l; i++) {
-          var attrs = elems[i].attributes;
-          members[i] = {
-              id: attrs.type.value[0] + attrs.ref.value,
-              type: attrs.type.value,
-              role: attrs.role.value
-          };
+          combobox.data(objectDifference(_comboData, _multiData));
+          if (callback) callback(_comboData);
       }
-      return members;
-  }
 
 
-  function getVisible(attrs) {
-      return (!attrs.visible || attrs.visible.value !== 'false');
-  }
+      function setTaginfoValues(q, callback) {
+          var fn = isMulti ? 'multikeys' : 'values';
+          var query = (isMulti ? field.key : '') + q;
+          var hasCountryPrefix = isNetwork && _country && _country.indexOf(q.toLowerCase()) === 0;
+          if (hasCountryPrefix) {
+              query = _country + ':';
+          }
 
+          var params = {
+              debounce: (q !== ''),
+              key: field.key,
+              query: query
+          };
 
-  function parseComments(comments) {
-      var parsedComments = [];
+          if (_entity) {
+              params.geometry = context.geometry(_entity.id);
+          }
 
-      // for each comment
-      for (var i = 0; i < comments.length; i++) {
-          var comment = comments[i];
-          if (comment.nodeName === 'comment') {
-              var childNodes = comment.childNodes;
-              var parsedComment = {};
+          taginfo[fn](params, function(err, data) {
+              if (err) return;
+              if (hasCountryPrefix) {
+                  data = filter(data, function(d) {
+                      return d.value.toLowerCase().indexOf(_country + ':') === 0;
+                  });
+              }
 
-              for (var j = 0; j < childNodes.length; j++) {
-                  var node = childNodes[j];
-                  var nodeName = node.nodeName;
-                  if (nodeName === '#text') continue;
-                  parsedComment[nodeName] = node.textContent;
+              // hide the caret if there are no suggestions
+              container.classed('empty-combobox', data.length === 0);
 
-                  if (nodeName === 'uid') {
-                      var uid = node.textContent;
-                      if (uid && !_userCache.user[uid]) {
-                          _userCache.toLoad[uid] = true;
-                      }
-                  }
-              }
+              _comboData = map$3(data, function(d) {
+                  var k = d.value;
+                  if (isMulti) k = k.replace(field.key, '');
+                  var v = snake_case ? unsnake(k) : k;
+                  return {
+                      key: k,
+                      value: v,
+                      title: isMulti ? v : d.title
+                  };
+              });
 
-              if (parsedComment) {
-                  parsedComments.push(parsedComment);
-              }
-          }
+              _comboData = objectDifference(_comboData, _multiData);
+              if (callback) callback(_comboData);
+          });
       }
-      return parsedComments;
-  }
 
 
-  function encodeNoteRtree(note) {
-      return {
-          minX: note.loc[0],
-          minY: note.loc[1],
-          maxX: note.loc[0],
-          maxY: note.loc[1],
-          data: note
-      };
-  }
+      function setPlaceholder(d) {
+          var ph;
 
+          if (isMulti || isSemi) {
+              ph = field.placeholder() || t('inspector.add');
+          } else {
+              var vals = map$3(d, 'value').filter(function(s) { return s.length < 20; }),
+                  placeholders = vals.length > 1 ? vals : map$3(d, 'key');
+              ph = field.placeholder() || placeholders.slice(0, 3).join(', ');
+          }
 
-  var parsers = {
-      node: function nodeData(obj, uid) {
-          var attrs = obj.attributes;
-          return new osmNode({
-              id: uid,
-              visible: getVisible(attrs),
-              version: attrs.version.value,
-              changeset: attrs.changeset && attrs.changeset.value,
-              timestamp: attrs.timestamp && attrs.timestamp.value,
-              user: attrs.user && attrs.user.value,
-              uid: attrs.uid && attrs.uid.value,
-              loc: getLoc(attrs),
-              tags: getTags(obj)
-          });
-      },
+          if (!/(…|\.\.\.)$/.test(ph)) {
+              ph += '…';
+          }
 
-      way: function wayData(obj, uid) {
-          var attrs = obj.attributes;
-          return new osmWay({
-              id: uid,
-              visible: getVisible(attrs),
-              version: attrs.version.value,
-              changeset: attrs.changeset && attrs.changeset.value,
-              timestamp: attrs.timestamp && attrs.timestamp.value,
-              user: attrs.user && attrs.user.value,
-              uid: attrs.uid && attrs.uid.value,
-              tags: getTags(obj),
-              nodes: getNodes(obj),
-          });
-      },
+          container.selectAll('input')
+              .attr('placeholder', ph);
+      }
 
-      relation: function relationData(obj, uid) {
-          var attrs = obj.attributes;
-          return new osmRelation({
-              id: uid,
-              visible: getVisible(attrs),
-              version: attrs.version.value,
-              changeset: attrs.changeset && attrs.changeset.value,
-              timestamp: attrs.timestamp && attrs.timestamp.value,
-              user: attrs.user && attrs.user.value,
-              uid: attrs.uid && attrs.uid.value,
-              tags: getTags(obj),
-              members: getMembers(obj)
-          });
-      },
 
-      note: function parseNote(obj, uid) {
-          var attrs = obj.attributes;
-          var childNodes = obj.childNodes;
-          var props = {};
+      function change() {
+          var val = tagValue(utilGetSetValue(input));
+          var t = {};
 
-          props.id = uid;
-          props.loc = getLoc(attrs);
+          if (isMulti || isSemi) {
+              if (!val) return;
+              container.classed('active', false);
+              utilGetSetValue(input, '');
 
-          // if notes are coincident, move them apart slightly
-          var coincident = false;
-          var epsilon = 0.00001;
-          do {
-              if (coincident) {
-                  props.loc = geoVecAdd(props.loc, [epsilon, epsilon]);
+              if (isMulti) {
+                  var key = field.key + val;
+                  if (_entity) {
+                      // don't set a multicombo value to 'yes' if it already has a non-'no' value
+                      // e.g. `language:de=main`
+                      var old = _entity.tags[key] || '';
+                      if (old && old.toLowerCase() !== 'no') return;
+                  }
+                  field.keys.push(key);
+                  t[key] = 'yes';
+
+              } else if (isSemi) {
+                  var arr = _multiData.map(function(d) { return d.key; });
+                  arr.push(val);
+                  t[field.key] = compact(uniq(arr)).join(';');
               }
-              var bbox = geoExtent$$1(props.loc).bbox();
-              coincident = _noteCache.rtree.search(bbox).length;
-          } while (coincident);
 
-          // parse note contents
-          for (var i = 0; i < childNodes.length; i++) {
-              var node = childNodes[i];
-              var nodeName = node.nodeName;
-              if (nodeName === '#text') continue;
+              window.setTimeout(function() { input.node().focus(); }, 10);
 
-              // if the element is comments, parse the comments
-              if (nodeName === 'comments') {
-                  props[nodeName] = parseComments(node.childNodes);
-              } else {
-                  props[nodeName] = node.textContent;
-              }
+          } else {
+              t[field.key] = val;
           }
 
-          var note = new osmNote(props);
-          var item = encodeNoteRtree(note);
-          _noteCache.note[note.id] = note;
-          _noteCache.rtree.insert(item);
-
-          return note;
-      },
+          dispatch$1.call('change', this, t);
+      }
 
-      user: function parseUser(obj, uid) {
-          var attrs = obj.attributes;
-          var user = {
-              id: uid,
-              display_name: attrs.display_name && attrs.display_name.value,
-              account_created: attrs.account_created && attrs.account_created.value,
-              changesets_count: 0
-          };
 
-          var img = obj.getElementsByTagName('img');
-          if (img && img[0] && img[0].getAttribute('href')) {
-              user.image_url = img[0].getAttribute('href');
+      function removeMultikey(d) {
+          event.stopPropagation();
+          var t = {};
+          if (isMulti) {
+              t[d.key] = undefined;
+          } else if (isSemi) {
+              remove$8(_multiData, function(md) { return md.key === d.key; });
+              var arr = _multiData.map(function(md) { return md.key; });
+              arr = compact(uniq(arr));
+              t[field.key] = arr.length ? arr.join(';') : undefined;
           }
+          dispatch$1.call('change', this, t);
+      }
 
-          var changesets = obj.getElementsByTagName('changesets');
-          if (changesets && changesets[0] && changesets[0].getAttribute('count')) {
-              user.changesets_count = changesets[0].getAttribute('count');
-          }
 
-          _userCache.user[uid] = user;
-          delete _userCache.toLoad[uid];
-          return user;
-      }
-  };
+      function combo(selection) {
+          container = selection.selectAll('.form-field-input-wrap')
+              .data([0]);
 
+          var type = (isMulti || isSemi) ? 'multicombo': 'combo';
+          container = container.enter()
+              .append('div')
+              .attr('class', 'form-field-input-wrap form-field-input-' + type)
+              .merge(container);
 
-  function parseXML(xml$$1, callback, options) {
-      options = assignIn({ skipSeen: true }, options);
-      if (!xml$$1 || !xml$$1.childNodes) {
-          return callback({ message: 'No XML', status: -1 });
-      }
+          if (isMulti || isSemi) {
+              container = container.selectAll('.chiplist')
+                  .data([0]);
 
-      var root = xml$$1.childNodes[0];
-      var children = root.childNodes;
-      utilIdleWorker(children, parseChild, done);
+              var listClass = 'chiplist';
 
+              // Use a separate line for each value in the Destinations field
+              // to mimic highway exit signs
+              if (field.id === 'destination_oneway') {
+                  listClass += ' full-line-chips';
+              }
 
-      function done(results) {
-          callback(null, results);
-      }
+              container = container.enter()
+                  .append('ul')
+                  .attr('class', listClass)
+                  .on('click', function() {
+                      window.setTimeout(function() { input.node().focus(); }, 10);
+                  })
+                  .merge(container);
 
-      function parseChild(child) {
-          var parser = parsers[child.nodeName];
-          if (!parser) return null;
 
-          var uid;
-          if (child.nodeName === 'user') {
-              uid = child.attributes.id.value;
-              if (options.skipSeen && _userCache.user[uid]) {
-                  delete _userCache.toLoad[uid];
-                  return null;
-              }
+              inputWrap = container.selectAll('.input-wrap')
+                  .data([0]);
 
-          } else if (child.nodeName === 'note') {
-              uid = child.getElementsByTagName('id')[0].textContent;
+              inputWrap = inputWrap.enter()
+                  .append('li')
+                  .attr('class', 'input-wrap')
+                  .merge(inputWrap);
 
+              input = inputWrap.selectAll('input')
+                  .data([0]);
           } else {
-              uid = osmEntity$$1.id.fromOSM(child.nodeName, child.attributes.id.value);
-              if (options.skipSeen) {
-                  if (_tileCache.seen[uid]) return null;  // avoid reparsing a "seen" entity
-                  _tileCache.seen[uid] = true;
-              }
+              input = container.selectAll('input')
+                  .data([0]);
           }
 
-          return parser(child, uid);
-      }
-  }
-
-
-  // replace or remove note from rtree
-  function updateRtree$1(item, replace) {
-      _noteCache.rtree.remove(item, function isEql(a, b) { return a.data.id === b.data.id; });
+          input = input.enter()
+              .append('input')
+              .attr('type', 'text')
+              .attr('id', 'preset-input-' + field.safeid)
+              .call(utilNoAuto)
+              .call(initCombo, selection)
+              .merge(input);
 
-      if (replace) {
-          _noteCache.rtree.insert(item);
-      }
-  }
+          if (isNetwork && nominatim && _entity) {
+              var center = _entity.extent(context.graph()).center();
+              nominatim.countryCode(center, function (err, code) {
+                  _country = code;
+              });
+          }
 
+          input
+              .on('change', change)
+              .on('blur', change);
 
-  function wrapcb(thisArg, callback, cid) {
-      return function(err, result) {
-          if (err) {
-              // 400 Bad Request, 401 Unauthorized, 403 Forbidden..
-              if (err.status === 400 || err.status === 401 || err.status === 403) {
-                  thisArg.logout();
-              }
-              return callback.call(thisArg, err);
+          input
+              .on('keydown.field', function() {
+                  switch (event.keyCode) {
+                      case 13: // ↩ Return
+                          input.node().blur(); // blurring also enters the value
+                          event.stopPropagation();
+                          break;
+                  }
+              });
 
-          } else if (thisArg.getConnectionId() !== cid) {
-              return callback.call(thisArg, { message: 'Connection Switched', status: -1 });
+          if (isMulti || isSemi) {
+              combobox
+                  .on('accept', function() {
+                      input.node().blur();
+                      input.node().focus();
+                  });
 
-          } else {
-              return callback.call(thisArg, err, result);
+              input
+                  .on('focus', function() { container.classed('active', true); });
           }
-      };
-  }
+      }
 
 
-  var serviceOsm = {
+      combo.tags = function(tags) {
+          if (isMulti || isSemi) {
+              _multiData = [];
 
-      init: function() {
-          utilRebind(this, dispatch$4, 'on');
-      },
+              if (isMulti) {
+                  // Build _multiData array containing keys already set..
+                  for (var k in tags) {
+                      if (k.indexOf(field.key) !== 0) continue;
+                      var v = (tags[k] || '').toLowerCase();
+                      if (v === '' || v === 'no') continue;
 
+                      var suffix = k.substring(field.key.length);
+                      _multiData.push({
+                          key: k,
+                          value: displayValue(suffix)
+                      });
+                  }
 
-      reset: function() {
-          _connectionID++;
-          _userChangesets = undefined;
-          _userDetails = undefined;
-          _rateLimitError = undefined;
+                  // Set keys for form-field modified (needed for undo and reset buttons)..
+                  field.keys = map$3(_multiData, 'key');
 
-          forEach(_tileCache.inflight, abortRequest$3);
-          forEach(_noteCache.inflight, abortRequest$3);
-          forEach(_noteCache.inflightPost, abortRequest$3);
-          if (_changeset$1.inflight) abortRequest$3(_changeset$1.inflight);
+              } else if (isSemi) {
+                  var arr = compact(uniq((tags[field.key] || '').split(';')));
+                  _multiData = arr.map(function(k) {
+                      return {
+                          key: k,
+                          value: displayValue(k)
+                      };
+                  });
+              }
 
-          _tileCache = { loaded: {}, inflight: {}, seen: {} };
-          _noteCache = { loaded: {}, inflight: {}, inflightPost: {}, note: {}, closed: {}, rtree: rbush_1() };
-          _userCache = { toLoad: {}, user: {} };
-          _changeset$1 = {};
+              // Exclude existing multikeys from combo options..
+              var available = objectDifference(_comboData, _multiData);
+              combobox.data(available);
 
-          return this;
-      },
+              // Hide 'Add' button if this field uses fixed set of
+              // translateable optstrings and they're all currently used..
+              container.selectAll('.combobox-input, .combobox-caret')
+                  .classed('hide', optstrings && !available.length);
 
 
-      getConnectionId: function() {
-          return _connectionID;
-      },
+              // Render chips
+              var chips = container.selectAll('.chips')
+                  .data(_multiData);
 
+              chips.exit()
+                  .remove();
 
-      changesetURL: function(changesetID) {
-          return urlroot + '/changeset/' + changesetID;
-      },
+              var enter = chips.enter()
+                  .insert('li', '.input-wrap')
+                  .attr('class', 'chips');
 
+              enter.append('span');
+              enter.append('a');
 
-      changesetsURL: function(center, zoom) {
-          var precision = Math.max(0, Math.ceil(Math.log(zoom) / Math.LN2));
-          return urlroot + '/history#map=' +
-              Math.floor(zoom) + '/' +
-              center[1].toFixed(precision) + '/' +
-              center[0].toFixed(precision);
-      },
+              chips = chips.merge(enter);
 
+              chips.select('span')
+                  .text(function(d) { return d.value; });
 
-      entityURL: function(entity) {
-          return urlroot + '/' + entity.type + '/' + entity.osmId();
-      },
+              chips.select('a')
+                  .on('click', removeMultikey)
+                  .attr('class', 'remove')
+                  .text('×');
 
+          } else {
+              utilGetSetValue(input, displayValue(tags[field.key]));
+          }
+      };
 
-      historyURL: function(entity) {
-          return urlroot + '/' + entity.type + '/' + entity.osmId() + '/history';
-      },
 
+      combo.focus = function() {
+          input.node().focus();
+      };
 
-      userURL: function(username) {
-          return urlroot + '/user/' + username;
-      },
 
+      combo.entity = function(val) {
+          if (!arguments.length) return _entity;
+          _entity = val;
+          return combo;
+      };
 
-      noteURL: function(note) {
-          return urlroot + '/note/' + note.id;
-      },
 
+      return utilRebind(combo, dispatch$1, 'on');
+  }
 
-      noteReportURL: function(note) {
-          return urlroot + '/reports/new?reportable_type=Note&reportable_id=' + note.id;
-      },
+  function uiFieldText(field, context) {
+      var dispatch$1 = dispatch('change');
+      var nominatim = services.geocoder;
+      var input = select(null);
+      var _entity;
+      var _brandTip;
 
+      if (field.id === 'brand') {
+          _brandTip = tooltip()
+              .title(t('inspector.lock.suggestion', { label: field.label }))
+              .placement('bottom');
+      }
 
-      // Generic method to load data from the OSM API
-      // Can handle either auth or unauth calls.
-      loadFromAPI: function(path, callback, options) {
-          options = assignIn({ skipSeen: true }, options);
-          var that = this;
-          var cid = _connectionID;
 
-          function done(err, xml$$1) {
-              if (that.getConnectionId() !== cid) {
-                  if (callback) callback({ message: 'Connection Switched', status: -1 });
-                  return;
-              }
+      function i(selection) {
+          var preset = _entity && context.presets().match(_entity, context.graph());
+          var isSuggestion = preset && preset.suggestion && field.id === 'brand';
 
-              var isAuthenticated = that.authenticated();
+          var wrap = selection.selectAll('.form-field-input-wrap')
+              .data([0]);
 
-              // 400 Bad Request, 401 Unauthorized, 403 Forbidden
-              // Logout and retry the request..
-              if (isAuthenticated && err && (err.status === 400 || err.status === 401 || err.status === 403)) {
-                  that.logout();
-                  that.loadFromAPI(path, callback, options);
+          wrap = wrap.enter()
+              .append('div')
+              .attr('class', 'form-field-input-wrap form-field-input-' + field.type)
+              .merge(wrap);
 
-              // else, no retry..
-              } else {
-                  // 509 Bandwidth Limit Exceeded, 429 Too Many Requests
-                  // Set the rateLimitError flag and trigger a warning..
-                  if (!isAuthenticated && !_rateLimitError && err &&
-                          (err.status === 509 || err.status === 429)) {
-                      _rateLimitError = err;
-                      dispatch$4.call('change');
-                  }
+          var fieldID = 'preset-input-' + field.safeid;
 
-                  if (callback) {
-                      if (err) {
-                          return callback(err);
-                      } else {
-                          return parseXML(xml$$1, callback, options);
-                      }
-                  }
-              }
-          }
+          input = wrap.selectAll('input')
+              .data([0]);
 
-          if (this.authenticated()) {
-              return oauth.xhr({ method: 'GET', path: path }, done);
-          } else {
-              var url = urlroot + path;
-              return d3_xml(url).get(done);
-          }
-      },
+          input = input.enter()
+              .append('input')
+              .attr('type', field.type)
+              .attr('id', fieldID)
+              .attr('placeholder', field.placeholder() || t('inspector.unknown'))
+              .classed(field.type, true)
+              .call(utilNoAuto)
+              .merge(input);
 
+          input
+              .classed('disabled', !!isSuggestion)
+              .attr('readonly', isSuggestion || null)
+              .on('input', change(true))
+              .on('blur', change())
+              .on('change', change());
 
-      // Load a single entity by id (ways and relations use the `/full` call)
-      // GET /api/0.6/node/#id
-      // GET /api/0.6/[way|relation]/#id/full
-      loadEntity: function(id, callback) {
-          var type = osmEntity$$1.id.type(id);
-          var osmID = osmEntity$$1.id.toOSM(id);
-          var options = { skipSeen: false };
 
-          this.loadFromAPI(
-              '/api/0.6/' + type + '/' + osmID + (type !== 'node' ? '/full' : ''),
-              function(err, entities) {
-                  if (callback) callback(err, { data: entities });
-              },
-              options
-          );
-      },
+          if (field.type === 'tel' && nominatim && _entity) {
+              var center = _entity.extent(context.graph()).center();
+              nominatim.countryCode(center, function (err, countryCode) {
+                  if (err || !dataPhoneFormats[countryCode]) return;
+                  wrap.selectAll('#' + fieldID)
+                      .attr('placeholder', dataPhoneFormats[countryCode]);
+              });
+
+          } else if (field.type === 'number') {
+              var rtl = (textDirection === 'rtl');
 
+              input.attr('type', 'text');
 
-      // Load a single entity with a specific version
-      // GET /api/0.6/[node|way|relation]/#id/#version
-      loadEntityVersion: function(id, version, callback) {
-          var type = osmEntity$$1.id.type(id);
-          var osmID = osmEntity$$1.id.toOSM(id);
-          var options = { skipSeen: false };
+              var buttons = wrap.selectAll('.increment, .decrement')
+                  .data(rtl ? [1, -1] : [-1, 1]);
 
-          this.loadFromAPI(
-              '/api/0.6/' + type + '/' + osmID + '/' + version,
-              function(err, entities) {
-                  if (callback) callback(err, { data: entities });
-              },
-              options
-          );
-      },
+              buttons.enter()
+                  .append('button')
+                  .attr('tabindex', -1)
+                  .attr('class', function(d) {
+                      var which = (d === 1 ? 'increment' : 'decrement');
+                      return 'form-field-button ' + which;
+                  })
+                  .merge(buttons)
+                  .on('click', function(d) {
+                      event.preventDefault();
+                      var raw_vals = input.node().value || '0';
+                      var vals = raw_vals.split(';');
+                      vals = vals.map(function(v) {
+                          var num = parseFloat(v.trim(), 10);
+                          return isFinite(num) ? clamped(num + d) : v.trim();
+                      });
+                      input.node().value = vals.join(';');
+                      change()();
+                  });
 
+          } else if (preset && field.id === 'brand') {
+              var pTag = preset.id.split('/', 2);
+              var pKey = pTag[0];
+              if (isSuggestion) {
+                  // A "suggestion" preset (brand name)
+                  // Put suggestion keys in `field.keys` so delete button can remove them all.
+                  field.keys = Object.keys(preset.removeTags)
+                      .filter(function(k) { return k !== pKey && k !== 'name'; });
+              }
 
-      // Load multiple entities in chunks
-      // (note: callback may be called multiple times)
-      // GET /api/0.6/[nodes|ways|relations]?#parameters
-      loadMultiple: function(ids, callback) {
-          var that = this;
+              wrap.call(isSuggestion ? _brandTip : _brandTip.destroy);
+          }
+      }
 
-          forEach(groupBy(uniq(ids), osmEntity$$1.id.type), function(v, k) {
-              var type = k + 's';
-              var osmIDs = map$3(v, osmEntity$$1.id.toOSM);
-              var options = { skipSeen: false };
 
-              forEach(chunk(osmIDs, 150), function(arr) {
-                  that.loadFromAPI(
-                      '/api/0.6/' + type + '?' + type + '=' + arr.join(),
-                      function(err, entities) {
-                          if (callback) callback(err, { data: entities });
-                      },
-                      options
-                  );
-              });
-          });
-      },
+      // clamp number to min/max
+      function clamped(num) {
+          if (field.minValue !== undefined) {
+              num = Math.max(num, field.minValue);
+          }
+          if (field.maxValue !== undefined) {
+              num = Math.min(num, field.maxValue);
+          }
+          return num;
+      }
 
 
-      // Create, upload, and close a changeset
-      // PUT /api/0.6/changeset/create
-      // POST /api/0.6/changeset/#id/upload
-      // PUT /api/0.6/changeset/#id/close
-      putChangeset: function(changeset, changes, callback) {
-          var cid = _connectionID;
+      function change(onInput) {
+          return function() {
+              var t = {};
+              var val = utilGetSetValue(input).trim() || undefined;
 
-          if (_changeset$1.inflight) {
-              return callback({ message: 'Changeset already inflight', status: -2 }, changeset);
+              if (!onInput) {
+                  if (field.type === 'number' && val !== undefined) {
+                      var vals = val.split(';');
+                      vals = vals.map(function(v) {
+                          var num = parseFloat(v.trim(), 10);
+                          return isFinite(num) ? clamped(num) : v.trim();
+                      });
+                      val = vals.join(';');
+                  }
+                  utilGetSetValue(input, val || '');
+              }
+              t[field.key] = val;
+              dispatch$1.call('change', this, t, onInput);
+          };
+      }
 
-          } else if (_changeset$1.open) {   // reuse existing open changeset..
-              return createdChangeset.call(this, null, _changeset$1.open);
 
-          } else {   // Open a new changeset..
-              var options = {
-                  method: 'PUT',
-                  path: '/api/0.6/changeset/create',
-                  options: { header: { 'Content-Type': 'text/xml' } },
-                  content: JXON.stringify(changeset.asJXON())
-              };
-              _changeset$1.inflight = oauth.xhr(
-                  options,
-                  wrapcb(this, createdChangeset, cid)
-              );
-          }
+      i.entity = function(val) {
+          if (!arguments.length) return _entity;
+          _entity = val;
+          return i;
+      };
 
 
-          function createdChangeset(err, changesetID) {
-              _changeset$1.inflight = null;
-              if (err) { return callback(err, changeset); }
+      i.tags = function(tags) {
+          utilGetSetValue(input, tags[field.key] || '');
+      };
 
-              _changeset$1.open = changesetID;
-              changeset = changeset.update({ id: changesetID });
 
-              // Upload the changeset..
-              var options = {
-                  method: 'POST',
-                  path: '/api/0.6/changeset/' + changesetID + '/upload',
-                  options: { header: { 'Content-Type': 'text/xml' } },
-                  content: JXON.stringify(changeset.osmChangeJXON(changes))
-              };
-              _changeset$1.inflight = oauth.xhr(
-                  options,
-                  wrapcb(this, uploadedChangeset, cid)
-              );
-          }
+      i.focus = function() {
+          var node = input.node();
+          if (node) node.focus();
+      };
 
+      return utilRebind(i, dispatch$1, 'on');
+  }
 
-          function uploadedChangeset(err) {
-              _changeset$1.inflight = null;
-              if (err) return callback(err, changeset);
+  function uiFieldAccess(field, context) {
+      var dispatch$1 = dispatch('change');
+      var items = select(null);
 
-              // Upload was successful, safe to call the callback.
-              // Add delay to allow for postgres replication #1646 #2678
-              window.setTimeout(function() { callback(null, changeset); }, 2500);
-              _changeset$1.open = null;
+      function access(selection) {
+          var wrap = selection.selectAll('.form-field-input-wrap')
+              .data([0]);
 
-              // At this point, we don't really care if the connection was switched..
-              // Only try to close the changeset if we're still talking to the same server.
-              if (this.getConnectionId() === cid) {
-                  // Still attempt to close changeset, but ignore response because #2667
-                  oauth.xhr({
-                      method: 'PUT',
-                      path: '/api/0.6/changeset/' + changeset.id + '/close',
-                      options: { header: { 'Content-Type': 'text/xml' } }
-                  }, function() { return true; });
-              }
-          }
-      },
+          wrap = wrap.enter()
+              .append('div')
+              .attr('class', 'form-field-input-wrap form-field-input-' + field.type)
+              .merge(wrap);
 
+          var list = wrap.selectAll('ul')
+              .data([0]);
 
-      // Load multiple users in chunks
-      // (note: callback may be called multiple times)
-      // GET /api/0.6/users?users=#id1,#id2,...,#idn
-      loadUsers: function(uids, callback) {
-          var toLoad = [];
-          var cached = [];
+          list = list.enter()
+              .append('ul')
+              .attr('class', 'labeled-inputs')
+              .merge(list);
 
-          uniq(uids).forEach(function(uid) {
-              if (_userCache.user[uid]) {
-                  delete _userCache.toLoad[uid];
-                  cached.push(_userCache.user[uid]);
-              } else {
-                  toLoad.push(uid);
-              }
-          });
 
-          if (cached.length || !this.authenticated()) {
-              callback(undefined, cached);
-              if (!this.authenticated()) return;  // require auth
-          }
+          items = list.selectAll('li')
+              .data(field.keys);
 
-          chunk(toLoad, 150).forEach(function(arr) {
-              oauth.xhr(
-                  { method: 'GET', path: '/api/0.6/users?users=' + arr.join() },
-                  wrapcb(this, done, _connectionID)
-              );
-          }.bind(this));
+          // Enter
+          var enter = items.enter()
+              .append('li')
+              .attr('class', function(d) { return 'preset-access-' + d; });
 
-          function done(err, xml$$1) {
-              if (err) { return callback(err); }
+          enter
+              .append('span')
+              .attr('class', 'label preset-label-access')
+              .attr('for', function(d) { return 'preset-input-access-' + d; })
+              .text(function(d) { return field.t('types.' + d); });
 
-              var options = { skipSeen: true };
-              return parseXML(xml$$1, function(err, results) {
-                  if (err) {
-                      return callback(err);
-                  } else {
-                      return callback(undefined, results);
-                  }
-              }, options);
-          }
-      },
+          enter
+              .append('div')
+              .attr('class', 'preset-input-access-wrap')
+              .append('input')
+              .attr('type', 'text')
+              .attr('class', 'preset-input-access')
+              .attr('id', function(d) { return 'preset-input-access-' + d; })
+              .call(utilNoAuto)
+              .each(function(d) {
+                  select(this)
+                      .call(uiCombobox(context, 'access-' + d)
+                          .data(access.options(d))
+                      );
+              });
 
 
-      // Load a given user by id
-      // GET /api/0.6/user/#id
-      loadUser: function(uid, callback) {
-          if (_userCache.user[uid] || !this.authenticated()) {   // require auth
-              delete _userCache.toLoad[uid];
-              return callback(undefined, _userCache.user[uid]);
-          }
+          // Update
+          items = items.merge(enter);
 
-          oauth.xhr(
-              { method: 'GET', path: '/api/0.6/user/' + uid },
-              wrapcb(this, done, _connectionID)
-          );
+          wrap.selectAll('.preset-input-access')
+              .on('change', change)
+              .on('blur', change);
+      }
 
-          function done(err, xml$$1) {
-              if (err) { return callback(err); }
 
-              var options = { skipSeen: true };
-              return parseXML(xml$$1, function(err, results) {
-                  if (err) {
-                      return callback(err);
-                  } else {
-                      return callback(undefined, results[0]);
-                  }
-              }, options);
-          }
-      },
+      function change(d) {
+          var tag = {};
+          tag[d] = utilGetSetValue(select(this)) || undefined;
+          dispatch$1.call('change', this, tag);
+      }
 
 
-      // Load the details of the logged-in user
-      // GET /api/0.6/user/details
-      userDetails: function(callback) {
-          if (_userDetails) {    // retrieve cached
-              return callback(undefined, _userDetails);
+      access.options = function(type) {
+          var options = ['no', 'permissive', 'private', 'permit', 'destination'];
+
+          if (type !== 'access') {
+              options.unshift('yes');
+              options.push('designated');
+
+              if (type === 'bicycle') {
+                  options.push('dismount');
+              }
           }
 
-          oauth.xhr(
-              { method: 'GET', path: '/api/0.6/user/details' },
-              wrapcb(this, done, _connectionID)
-          );
+          return options.map(function(option) {
+              return {
+                  title: field.t('options.' + option + '.description'),
+                  value: option
+              };
+          });
+      };
 
-          function done(err, xml$$1) {
-              if (err) { return callback(err); }
 
-              var options = { skipSeen: false };
-              return parseXML(xml$$1, function(err, results) {
-                  if (err) {
-                      return callback(err);
-                  } else {
-                      _userDetails = results[0];
-                      return callback(undefined, _userDetails);
-                  }
-              }, options);
+      var placeholders = {
+          footway: {
+              foot: 'designated',
+              motor_vehicle: 'no'
+          },
+          steps: {
+              foot: 'yes',
+              motor_vehicle: 'no',
+              bicycle: 'no',
+              horse: 'no'
+          },
+          pedestrian: {
+              foot: 'yes',
+              motor_vehicle: 'no'
+          },
+          cycleway: {
+              motor_vehicle: 'no',
+              bicycle: 'designated'
+          },
+          bridleway: {
+              motor_vehicle: 'no',
+              horse: 'designated'
+          },
+          path: {
+              foot: 'yes',
+              motor_vehicle: 'no',
+              bicycle: 'yes',
+              horse: 'yes'
+          },
+          motorway: {
+              foot: 'no',
+              motor_vehicle: 'yes',
+              bicycle: 'no',
+              horse: 'no'
+          },
+          trunk: {
+              motor_vehicle: 'yes'
+          },
+          primary: {
+              foot: 'yes',
+              motor_vehicle: 'yes',
+              bicycle: 'yes',
+              horse: 'yes'
+          },
+          secondary: {
+              foot: 'yes',
+              motor_vehicle: 'yes',
+              bicycle: 'yes',
+              horse: 'yes'
+          },
+          tertiary: {
+              foot: 'yes',
+              motor_vehicle: 'yes',
+              bicycle: 'yes',
+              horse: 'yes'
+          },
+          residential: {
+              foot: 'yes',
+              motor_vehicle: 'yes',
+              bicycle: 'yes',
+              horse: 'yes'
+          },
+          unclassified: {
+              foot: 'yes',
+              motor_vehicle: 'yes',
+              bicycle: 'yes',
+              horse: 'yes'
+          },
+          service: {
+              foot: 'yes',
+              motor_vehicle: 'yes',
+              bicycle: 'yes',
+              horse: 'yes'
+          },
+          motorway_link: {
+              foot: 'no',
+              motor_vehicle: 'yes',
+              bicycle: 'no',
+              horse: 'no'
+          },
+          trunk_link: {
+              motor_vehicle: 'yes'
+          },
+          primary_link: {
+              foot: 'yes',
+              motor_vehicle: 'yes',
+              bicycle: 'yes',
+              horse: 'yes'
+          },
+          secondary_link: {
+              foot: 'yes',
+              motor_vehicle: 'yes',
+              bicycle: 'yes',
+              horse: 'yes'
+          },
+          tertiary_link: {
+              foot: 'yes',
+              motor_vehicle: 'yes',
+              bicycle: 'yes',
+              horse: 'yes'
           }
-      },
+      };
 
 
-      // Load previous changesets for the logged in user
-      // GET /api/0.6/changesets?user=#id
-      userChangesets: function(callback) {
-          if (_userChangesets) {    // retrieve cached
-              return callback(undefined, _userChangesets);
-          }
+      access.tags = function(tags) {
+          utilGetSetValue(items.selectAll('.preset-input-access'),
+              function(d) { return tags[d] || ''; })
+              .attr('placeholder', function() {
+                  return tags.access ? tags.access : field.placeholder();
+              });
 
-          this.userDetails(
-              wrapcb(this, gotDetails, _connectionID)
-          );
+          items.selectAll('#preset-input-access-access')
+              .attr('placeholder', 'yes');
 
+          var which = tags.highway;
+          if (!placeholders[which]) return;
 
-          function gotDetails(err, user) {
-              if (err) { return callback(err); }
+          var keys = Object.keys(placeholders[which]);
+          keys.forEach(function(k) {
+              var v = placeholders[which][k];
+              items.selectAll('#preset-input-access-' + k)
+                  .attr('placeholder', tags.access || v);
+          });
+      };
 
-              oauth.xhr(
-                  { method: 'GET', path: '/api/0.6/changesets?user=' + user.id },
-                  wrapcb(this, done, _connectionID)
-              );
-          }
 
-          function done(err, xml$$1) {
-              if (err) { return callback(err); }
+      access.focus = function() {
+          items.selectAll('.preset-input-access')
+              .node().focus();
+      };
 
-              _userChangesets = Array.prototype.map.call(
-                  xml$$1.getElementsByTagName('changeset'),
-                  function (changeset) { return { tags: getTags(changeset) }; }
-              ).filter(function (changeset) {
-                  var comment = changeset.tags.comment;
-                  return comment && comment !== '';
-              });
 
-              return callback(undefined, _userChangesets);
-          }
-      },
+      return utilRebind(access, dispatch$1, 'on');
+  }
 
+  function uiFieldAddress(field, context) {
+      var dispatch$1 = dispatch('init', 'change');
+      var nominatim = services.geocoder;
+      var wrap = select(null);
+      var _isInitialized = false;
+      var _entity;
 
-      // Fetch the status of the OSM API
-      // GET /api/capabilities
-      status: function(callback) {
-          d3_xml(urlroot + '/api/capabilities').get(
-              wrapcb(this, done, _connectionID)
-          );
+      function getNearStreets() {
+          var extent = _entity.extent(context.graph());
+          var l = extent.center();
+          var box = geoExtent(l).padByMeters(200);
 
-          function done(err, xml$$1) {
-              if (err) { return callback(err); }
+          var streets = context.intersects(box)
+              .filter(isAddressable)
+              .map(function(d) {
+                  var loc = context.projection([
+                      (extent[0][0] + extent[1][0]) / 2,
+                      (extent[0][1] + extent[1][1]) / 2
+                  ]);
+                  var choice = geoChooseEdge(context.childNodes(d), loc, context.projection);
 
-              // update blacklists
-              var elements = xml$$1.getElementsByTagName('blacklist');
-              var regexes = [];
-              for (var i = 0; i < elements.length; i++) {
-                  var regex = elements[i].getAttribute('regex');  // needs unencode?
-                  if (regex) {
-                      regexes.push(regex);
-                  }
-              }
-              if (regexes.length) {
-                  _blacklists = regexes;
-              }
+                  return {
+                      title: d.tags.name,
+                      value: d.tags.name,
+                      dist: choice.distance
+                  };
+              })
+              .sort(function(a, b) {
+                  return a.dist - b.dist;
+              });
 
-              if (_rateLimitError) {
-                  return callback(_rateLimitError, 'rateLimited');
-              } else {
-                  var apiStatus = xml$$1.getElementsByTagName('status');
-                  var val = apiStatus[0].getAttribute('api');
-                  return callback(undefined, val);
-              }
+          return uniqBy(streets, 'value');
+
+          function isAddressable(d) {
+              return d.tags.highway && d.tags.name && d.type === 'way';
           }
-      },
+      }
 
 
-      // Load data (entities) from the API in tiles
-      // GET /api/0.6/map?bbox=
-      loadTiles: function(projection, callback) {
-          if (_off) return;
+      function getNearCities() {
+          var extent = _entity.extent(context.graph());
+          var l = extent.center();
+          var box = geoExtent(l).padByMeters(200);
 
-          var that = this;
-          var path = '/api/0.6/map?bbox=';
+          var cities = context.intersects(box)
+              .filter(isAddressable)
+              .map(function(d) {
+                  return {
+                      title: d.tags['addr:city'] || d.tags.name,
+                      value: d.tags['addr:city'] || d.tags.name,
+                      dist: geoSphericalDistance(d.extent(context.graph()).center(), l)
+                  };
+              })
+              .sort(function(a, b) {
+                  return a.dist - b.dist;
+              });
 
-          // determine the needed tiles to cover the view
-          var tiles = tiler$3.zoomExtent([_tileZoom, _tileZoom]).getTiles(projection);
+          return uniqBy(cities, 'value');
 
-          // abort inflight requests that are no longer needed
-          var hadRequests = !isEmpty(_tileCache.inflight);
-          abortUnwantedRequests$1(_tileCache, tiles);
-          if (hadRequests && isEmpty(_tileCache.inflight)) {
-              dispatch$4.call('loaded');    // stop the spinner
-          }
 
-          // issue new requests..
-          tiles.forEach(function(tile) {
-              if (_tileCache.loaded[tile.id] || _tileCache.inflight[tile.id]) return;
-              if (isEmpty(_tileCache.inflight)) {
-                  dispatch$4.call('loading');   // start the spinner
+          function isAddressable(d) {
+              if (d.tags.name) {
+                  if (d.tags.admin_level === '8' && d.tags.boundary === 'administrative')
+                      return true;
+                  if (d.tags.border_type === 'city')
+                      return true;
+                  if (d.tags.place === 'city' || d.tags.place === 'town' || d.tags.place === 'village')
+                      return true;
               }
 
-              var options = { skipSeen: true };
-              _tileCache.inflight[tile.id] = that.loadFromAPI(
-                  path + tile.extent.toParam(),
-                  function(err, parsed) {
-                      delete _tileCache.inflight[tile.id];
-                      if (!err) {
-                          _tileCache.loaded[tile.id] = true;
-                      }
-                      if (callback) {
-                          callback(err, assignIn({ data: parsed }, tile));
-                      }
-                      if (isEmpty(_tileCache.inflight)) {
-                          dispatch$4.call('loaded');     // stop the spinner
-                      }
-                  },
-                  options
-              );
-          });
-      },
+              if (d.tags['addr:city'])
+                  return true;
 
+              return false;
+          }
+      }
 
-      // Load notes from the API in tiles
-      // GET /api/0.6/notes?bbox=
-      loadNotes: function(projection, noteOptions) {
-          noteOptions = assignIn({ limit: 10000, closed: 7 }, noteOptions);
-          if (_off) return;
+      function getNearValues(key) {
+          var extent = _entity.extent(context.graph());
+          var l = extent.center();
+          var box = geoExtent(l).padByMeters(200);
 
-          var that = this;
-          var path = '/api/0.6/notes?limit=' + noteOptions.limit + '&closed=' + noteOptions.closed + '&bbox=';
-          var throttleLoadUsers = throttle(function() {
-              var uids = Object.keys(_userCache.toLoad);
-              if (!uids.length) return;
-              that.loadUsers(uids, function() {});  // eagerly load user details
-          }, 750);
+          var results = context.intersects(box)
+              .filter(function hasTag(d) { return d.id !== _entity.id && d.tags[key]; })
+              .map(function(d) {
+                  return {
+                      title: d.tags[key],
+                      value: d.tags[key],
+                      dist: geoSphericalDistance(d.extent(context.graph()).center(), l)
+                  };
+              })
+              .sort(function(a, b) {
+                  return a.dist - b.dist;
+              });
 
-          // determine the needed tiles to cover the view
-          var tiles = tiler$3.zoomExtent([_noteZoom, _noteZoom]).getTiles(projection);
+          return uniqBy(results, 'value');
+      }
 
-          // abort inflight requests that are no longer needed
-          abortUnwantedRequests$1(_noteCache, tiles);
 
-          // issue new requests..
-          tiles.forEach(function(tile) {
-              if (_noteCache.loaded[tile.id] || _noteCache.inflight[tile.id]) return;
+      function countryCallback(err, countryCode) {
+          if (err) return;
 
-              var options = { skipSeen: false };
-              _noteCache.inflight[tile.id] = that.loadFromAPI(
-                  path + tile.extent.toParam(),
-                  function(err) {
-                      delete _noteCache.inflight[tile.id];
-                      if (!err) {
-                          _noteCache.loaded[tile.id] = true;
-                      }
-                      throttleLoadUsers();
-                      dispatch$4.call('loadedNotes');
-                  },
-                  options
-              );
-          });
-      },
+          var addressFormat = find$1(dataAddressFormats, function (a) {
+              return a && a.countryCodes && includes(a.countryCodes, countryCode.toLowerCase());
+          }) || dataAddressFormats[0];
 
+          var dropdowns = addressFormat.dropdowns || [
+              'city', 'county', 'country', 'district', 'hamlet',
+              'neighbourhood', 'place', 'postcode', 'province',
+              'quarter', 'state', 'street', 'subdistrict', 'suburb'
+          ];
 
-      // Create a note
-      // POST /api/0.6/notes?params
-      postNoteCreate: function(note, callback) {
-          if (!this.authenticated()) {
-              return callback({ message: 'Not Authenticated', status: -3 }, note);
-          }
-          if (_noteCache.inflightPost[note.id]) {
-              return callback({ message: 'Note update already inflight', status: -2 }, note);
+          var widths = addressFormat.widths || {
+              housenumber: 1/3, street: 2/3,
+              city: 2/3, state: 1/4, postcode: 1/3
+          };
+
+          function row(r) {
+              // Normalize widths.
+              var total = reduce(r, function(sum, key) {
+                  return sum + (widths[key] || 0.5);
+              }, 0);
+
+              return r.map(function(key) {
+                  return {
+                      id: key,
+                      width: (widths[key] || 0.5) / total
+                  };
+              });
           }
 
-          if (!note.loc[0] || !note.loc[1] || !note.newComment) return; // location & description required
+          wrap.selectAll('.addr-row')
+              .data(addressFormat.format)
+              .enter()
+              .append('div')
+              .attr('class', 'addr-row')
+              .selectAll('input')
+              .data(row)
+              .enter()
+              .append('input')
+              .property('type', 'text')
+              .attr('placeholder', function (d) {
+                  var localkey = d.id + '!' + countryCode.toLowerCase();
+                  var tkey = field.strings.placeholders[localkey] ? localkey : d.id;
+                  return field.t('placeholders.' + tkey);
+              })
+              .attr('class', function (d) { return 'addr-' + d.id; })
+              .call(utilNoAuto)
+              .each(addDropdown)
+              .style('width', function (d) { return d.width * 100 + '%'; });
 
-          var comment = note.newComment;
-          if (note.newCategory && note.newCategory !== 'None') { comment += ' #' + note.newCategory; }
 
-          var path = '/api/0.6/notes?' + utilQsString({ lon: note.loc[0], lat: note.loc[1], text: comment });
+          function addDropdown(d) {
+              if (dropdowns.indexOf(d.id) === -1) return;  // not a dropdown
 
-          _noteCache.inflightPost[note.id] = oauth.xhr(
-              { method: 'POST', path: path },
-              wrapcb(this, done, _connectionID)
-          );
+              var nearValues = (d.id === 'street') ? getNearStreets
+                  : (d.id === 'city') ? getNearCities
+                  : getNearValues;
 
+              select(this)
+                  .call(uiCombobox(context, 'address-' + d.id)
+                      .minItems(1)
+                      .caseSensitive(true)
+                      .fetcher(function(value, callback) {
+                          callback(nearValues('addr:' + d.id));
+                      })
+                  );
+          }
 
-          function done(err, xml$$1) {
-              delete _noteCache.inflightPost[note.id];
-              if (err) { return callback(err); }
+          wrap.selectAll('input')
+              .on('blur', change())
+              .on('change', change());
 
-              // we get the updated note back, remove from caches and reparse..
-              this.removeNote(note);
+          wrap.selectAll('input:not(.combobox-input)')
+              .on('input', change(true));
 
-              var options = { skipSeen: false };
-              return parseXML(xml$$1, function(err, results) {
-                  if (err) {
-                      return callback(err);
-                  } else {
-                      return callback(undefined, results[0]);
-                  }
-              }, options);
-          }
-      },
+          dispatch$1.call('init');
+          _isInitialized = true;
+      }
 
 
-      // Update a note
-      // POST /api/0.6/notes/#id/comment?text=comment
-      // POST /api/0.6/notes/#id/close?text=comment
-      // POST /api/0.6/notes/#id/reopen?text=comment
-      postNoteUpdate: function(note, newStatus, callback) {
-          if (!this.authenticated()) {
-              return callback({ message: 'Not Authenticated', status: -3 }, note);
-          }
-          if (_noteCache.inflightPost[note.id]) {
-              return callback({ message: 'Note update already inflight', status: -2 }, note);
-          }
+      function address(selection) {
+          _isInitialized = false;
 
-          var action;
-          if (note.status !== 'closed' && newStatus === 'closed') {
-              action = 'close';
-          } else if (note.status !== 'open' && newStatus === 'open') {
-              action = 'reopen';
-          } else {
-              action = 'comment';
-              if (!note.newComment) return; // when commenting, comment required
-          }
+          wrap = selection.selectAll('.form-field-input-wrap')
+              .data([0]);
 
-          var path = '/api/0.6/notes/' + note.id + '/' + action;
-          if (note.newComment) {
-              path += '?' + utilQsString({ text: note.newComment });
-          }
+          wrap = wrap.enter()
+              .append('div')
+              .attr('class', 'form-field-input-wrap form-field-input-' + field.type)
+              .merge(wrap);
 
-          _noteCache.inflightPost[note.id] = oauth.xhr(
-              { method: 'POST', path: path },
-              wrapcb(this, done, _connectionID)
-          );
+          if (nominatim && _entity) {
+              var center = _entity.extent(context.graph()).center();
+              nominatim.countryCode(center, countryCallback);
+          }
+      }
 
 
-          function done(err, xml$$1) {
-              delete _noteCache.inflightPost[note.id];
-              if (err) { return callback(err); }
+      function change(onInput) {
+          return function() {
+              var tags = {};
 
-              // we get the updated note back, remove from caches and reparse..
-              this.removeNote(note);
+              wrap.selectAll('input')
+                  .each(function (field) {
+                      tags['addr:' + field.id] = this.value || undefined;
+                  });
 
-              // update closed note cache - used to populate `closed:note` changeset tag
-              if (action === 'close') {
-                  _noteCache.closed[note.id] = true;
-              } else if (action === 'reopen') {
-                  delete _noteCache.closed[note.id];
-              }
+              dispatch$1.call('change', this, tags, onInput);
+          };
+      }
 
-              var options = { skipSeen: false };
-              return parseXML(xml$$1, function(err, results) {
-                  if (err) {
-                      return callback(err);
-                  } else {
-                      return callback(undefined, results[0]);
-                  }
-              }, options);
-          }
-      },
 
+      function updateTags(tags) {
+          utilGetSetValue(wrap.selectAll('input'), function (field) {
+              return tags['addr:' + field.id] || '';
+          });
+      }
 
-      switch: function(options) {
-          urlroot = options.urlroot;
 
-          oauth.options(assignIn({
-              url: urlroot,
-              loading: authLoading,
-              done: authDone
-          }, options));
+      address.entity = function(val) {
+          if (!arguments.length) return _entity;
+          _entity = val;
+          return address;
+      };
 
-          this.reset();
-          this.userChangesets(function() {});  // eagerly load user details/changesets
-          dispatch$4.call('change');
-          return this;
-      },
 
+      address.tags = function(tags) {
+          if (_isInitialized) {
+              updateTags(tags);
+          } else {
+              dispatch$1.on('init', function () {
+                  dispatch$1.on('init', null);
+                  updateTags(tags);
+              });
+          }
+      };
 
-      toggle: function(_) {
-          _off = !_;
-          return this;
-      },
 
+      address.focus = function() {
+          var node = wrap.selectAll('input').node();
+          if (node) node.focus();
+      };
 
-      isChangesetInflight: function() {
-          return !!_changeset$1.inflight;
-      },
 
+      return utilRebind(address, dispatch$1, 'on');
+  }
 
-      // get/set cached data
-      // This is used to save/restore the state when entering/exiting the walkthrough
-      // Also used for testing purposes.
-      caches: function(obj) {
-          if (!arguments.length) {
-              return {
-                  tile: cloneDeep(_tileCache),
-                  note: cloneDeep(_noteCache),
-                  user: cloneDeep(_userCache)
-              };
-          }
+  function uiFieldCycleway(field, context) {
+      var dispatch$1 = dispatch('change');
+      var items = select(null);
+      var wrap = select(null);
 
-          // access caches directly for testing (e.g., loading notes rtree)
-          if (obj === 'get') {
-              return {
-                  tile: _tileCache,
-                  note: _noteCache,
-                  user: _userCache
-              };
-          }
+      function cycleway(selection) {
 
-          if (obj.tile) {
-              _tileCache = obj.tile;
-              _tileCache.inflight = {};
-          }
-          if (obj.note) {
-              _noteCache = obj.note;
-              _noteCache.inflight = {};
-              _noteCache.inflightPost = {};
-          }
-          if (obj.user) {
-              _userCache = obj.user;
+          function stripcolon(s) {
+              return s.replace(':', '');
           }
 
-          return this;
-      },
 
+          wrap = selection.selectAll('.form-field-input-wrap')
+              .data([0]);
 
-      logout: function() {
-          _userChangesets = undefined;
-          _userDetails = undefined;
-          oauth.logout();
-          dispatch$4.call('change');
-          return this;
-      },
+          wrap = wrap.enter()
+              .append('div')
+              .attr('class', 'form-field-input-wrap form-field-input-' + field.type)
+              .merge(wrap);
 
 
-      authenticated: function() {
-          return oauth.authenticated();
-      },
+          var div = wrap.selectAll('ul')
+              .data([0]);
 
+          div = div.enter()
+              .append('ul')
+              .attr('class', 'labeled-inputs')
+              .merge(div);
 
-      authenticate: function(callback) {
-          var that = this;
-          var cid = _connectionID;
-          _userChangesets = undefined;
-          _userDetails = undefined;
+          var keys = ['cycleway:left', 'cycleway:right'];
 
-          function done(err, res) {
-              if (err) {
-                  if (callback) callback(err);
-                  return;
-              }
-              if (that.getConnectionId() !== cid) {
-                  if (callback) callback({ message: 'Connection Switched', status: -1 });
-                  return;
-              }
-              _rateLimitError = undefined;
-              dispatch$4.call('change');
-              if (callback) callback(err, res);
-              that.userChangesets(function() {});  // eagerly load user details/changesets
-          }
+          items = div.selectAll('li')
+              .data(keys);
 
-          return oauth.authenticate(done);
-      },
+          var enter = items.enter()
+              .append('li')
+              .attr('class', function(d) { return 'preset-cycleway-' + stripcolon(d); });
 
+          enter
+              .append('span')
+              .attr('class', 'label preset-label-cycleway')
+              .attr('for', function(d) { return 'preset-input-cycleway-' + stripcolon(d); })
+              .text(function(d) { return field.t('types.' + d); });
 
-      imageryBlacklists: function() {
-          return _blacklists;
-      },
+          enter
+              .append('div')
+              .attr('class', 'preset-input-cycleway-wrap')
+              .append('input')
+              .attr('type', 'text')
+              .attr('class', function(d) { return 'preset-input-cycleway preset-input-' + stripcolon(d); })
+              .call(utilNoAuto)
+              .each(function(d) {
+                  select(this)
+                      .call(uiCombobox(context, 'cycleway-' + stripcolon(d))
+                          .data(cycleway.options(d))
+                      );
+              });
 
 
-      tileZoom: function(_) {
-          if (!arguments.length) return _tileZoom;
-          _tileZoom = _;
-          return this;
-      },
+          // Update
+          wrap.selectAll('.preset-input-cycleway')
+              .on('change', change)
+              .on('blur', change);
+      }
 
 
-      // get all cached notes covering the viewport
-      notes: function(projection) {
-          var viewport = projection.clipExtent();
-          var min = [viewport[0][0], viewport[1][1]];
-          var max = [viewport[1][0], viewport[0][1]];
-          var bbox = geoExtent$$1(projection.invert(min), projection.invert(max)).bbox();
+      function change() {
+          var left = utilGetSetValue(select('.preset-input-cyclewayleft'));
+          var right = utilGetSetValue(select('.preset-input-cyclewayright'));
+          var tag = {};
 
-          return _noteCache.rtree.search(bbox)
-              .map(function(d) { return d.data; });
-      },
+          if (left === 'none' || left === '') { left = undefined; }
+          if (right === 'none' || right === '') { right = undefined; }
 
+          // Always set both left and right as changing one can affect the other
+          tag = {
+              cycleway: undefined,
+              'cycleway:left': left,
+              'cycleway:right': right
+          };
 
-      // get a single note from the cache
-      getNote: function(id) {
-          return _noteCache.note[id];
-      },
+          // If the left and right tags match, use the cycleway tag to tag both
+          // sides the same way
+          if (left === right) {
+              tag = {
+                  cycleway: left,
+                  'cycleway:left': undefined,
+                  'cycleway:right': undefined
+              };
+          }
 
+          dispatch$1.call('change', this, tag);
+      }
 
-      // remove a single note from the cache
-      removeNote: function(note) {
-          if (!(note instanceof osmNote) || !note.id) return;
 
-          delete _noteCache.note[note.id];
-          updateRtree$1(encodeNoteRtree(note), false);  // false = remove
-      },
+      cycleway.options = function() {
+          return Object.keys(field.strings.options).map(function(option) {
+              return {
+                  title: field.t('options.' + option + '.description'),
+                  value: option
+              };
+          });
+      };
 
 
-      // replace a single note in the cache
-      replaceNote: function(note) {
-          if (!(note instanceof osmNote) || !note.id) return;
+      cycleway.tags = function(tags) {
+          utilGetSetValue(items.selectAll('.preset-input-cycleway'), function(d) {
+                  // If cycleway is set, always return that
+                  if (tags.cycleway) {
+                      return tags.cycleway;
+                  }
+                  return tags[d] || '';
+              })
+              .attr('placeholder', field.placeholder());
+      };
 
-          _noteCache.note[note.id] = note;
-          updateRtree$1(encodeNoteRtree(note), true);  // true = replace
-          return note;
-      },
 
+      cycleway.focus = function() {
+          var node = wrap.selectAll('input').node();
+          if (node) node.focus();
+      };
 
-      // Get an array of note IDs closed during this session.
-      // Used to populate `closed:note` changeset tag
-      getClosedIDs: function() {
-          return Object.keys(_noteCache.closed).sort();
-      }
 
-  };
+      return utilRebind(cycleway, dispatch$1, 'on');
+  }
 
-  var apibase$3 = 'https://wiki.openstreetmap.org/w/api.php';
-  var _inflight = {};
-  var _wikibaseCache = {};
-  var _localeIDs = { en: false };
+  function uiFieldLanes(field, context) {
+      var dispatch$1 = dispatch('change');
+      var LANE_WIDTH = 40;
+      var LANE_HEIGHT = 200;
+      var _entityID;
 
+      function lanes(selection) {
+          var lanesData = context.entity(_entityID).lanes();
 
-  var debouncedRequest = debounce(request$1, 500, { leading: false });
+          if (!select('.inspector-wrap.inspector-hidden').empty() || !selection.node().parentNode) {
+              selection.call(lanes.off);
+              return;
+          }
 
-  function request$1(url, callback) {
-      if (_inflight[url]) return;
+          var wrap = selection.selectAll('.form-field-input-wrap')
+              .data([0]);
 
-      _inflight[url] = d3_json(url, function (err, data) {
-          delete _inflight[url];
-          callback(err, data);
-      });
-  }
+          wrap = wrap.enter()
+              .append('div')
+              .attr('class', 'form-field-input-wrap form-field-input-' + field.type)
+              .merge(wrap);
 
+          var surface =  wrap.selectAll('.surface')
+              .data([0]);
 
-  /**
-   * Get the best string value from the descriptions/labels result
-   * Note that if mediawiki doesn't recognize language code, it will return all values.
-   * In that case, fallback to use English.
-   * @param values object - either descriptions or labels
-   * @param langCode String
-   * @returns localized string
-   */
-  function localizedToString(values, langCode) {
-      if (values) {
-          values = values[langCode] || values.en;
-      }
-      return values ? values.value : '';
-  }
+          var d = utilGetDimensions(wrap);
+          var freeSpace = d[0] - lanesData.lanes.length * LANE_WIDTH * 1.5 + LANE_WIDTH * 0.5;
 
+          surface = surface.enter()
+              .append('svg')
+              .attr('width', d[0])
+              .attr('height', 300)
+              .attr('class', 'surface')
+              .merge(surface);
 
-  var serviceOsmWikibase = {
 
-      init: function() {
-          _inflight = {};
-          _wikibaseCache = {};
-          _localeIDs = {};
-      },
+          var lanesSelection = surface.selectAll('.lanes')
+              .data([0]);
 
+          lanesSelection = lanesSelection.enter()
+              .append('g')
+              .attr('class', 'lanes')
+              .merge(lanesSelection);
 
-      reset: function() {
-          forEach(_inflight, function(req) { req.abort(); });
-          _inflight = {};
-      },
+          lanesSelection
+              .attr('transform', function () {
+                  return 'translate(' + (freeSpace / 2) + ', 0)';
+              });
 
 
-      /**
-       * Get the best value for the property, or undefined if not found
-       * @param entity object from wikibase
-       * @param property string e.g. 'P4' for image
-       * @param langCode string e.g. 'fr' for French
-       */
-      claimToValue: function(entity, property, langCode) {
-          if (!entity.claims[property]) return undefined;
-          var locale = _localeIDs[langCode];
-          var preferredPick, localePick;
-          forEach(entity.claims[property], function(stmt) {
-              // If exists, use value limited to the needed language (has a qualifier P26 = locale)
-              // Or if not found, use the first value with the "preferred" rank
-              if (!preferredPick && stmt.rank === 'preferred') {
-                  preferredPick = stmt;
-              }
-              if (locale && stmt.qualifiers && stmt.qualifiers.P26 &&
-                  stmt.qualifiers.P26[0].datavalue.value.id === locale
-              ) {
-                  localePick = stmt;
-              }
-          });
-          var result = localePick || preferredPick;
+          var lane = lanesSelection.selectAll('.lane')
+             .data(lanesData.lanes);
 
-          if (result) {
-              var datavalue = result.mainsnak.datavalue;
-              return datavalue.type === 'wikibase-entityid' ? datavalue.value.id : datavalue.value;
-          } else {
-              return undefined;
-          }
-      },
+          lane.exit()
+              .remove();
 
+          var enter = lane.enter()
+              .append('g')
+              .attr('class', 'lane');
 
-      /**
-       * Convert monolingual property into a key-value object (language -> value)
-       * @param entity object from wikibase
-       * @param property string e.g. 'P31' for monolingual wiki page title
-       */
-      monolingualClaimToValueObj: function(entity, property) {
-          if (!entity || !entity.claims[property]) return undefined;
-          return entity.claims[property].reduce(function(acc, obj) {
-              var value = obj.mainsnak.datavalue.value;
-              acc[value.language] = value.text;
-              return acc;
-          }, {});
-      },
+          enter
+              .append('g')
+              .append('rect')
+              .attr('y', 50)
+              .attr('width', LANE_WIDTH)
+              .attr('height', LANE_HEIGHT);
+
+          enter
+              .append('g')
+              .attr('class', 'forward')
+              .append('text')
+              .attr('y', 40)
+              .attr('x', 14)
+              .text('▲');
 
+          enter
+              .append('g')
+              .attr('class', 'bothways')
+              .append('text')
+              .attr('y', 40)
+              .attr('x', 14)
+              .text('▲▼');
 
-      toSitelink: function(key, value) {
-          var result = value ? 'Tag:' + key + '=' + value : 'Key:' + key;
-          return result.replace(/_/g, ' ').trim();
-      },
+          enter
+              .append('g')
+              .attr('class', 'backward')
+              .append('text')
+              .attr('y', 40)
+              .attr('x', 14)
+              .text('▼');
 
 
-      getEntity: function(params, callback) {
-          var doRequest = params.debounce ? debouncedRequest : request$1;
-          var self = this;
-          var titles = [];
-          var result = {};
-          var keySitelink = this.toSitelink(params.key);
-          var tagSitelink = params.value ? this.toSitelink(params.key, params.value) : false;
-          var localeSitelink;
+          lane = lane
+              .merge(enter);
 
-          if (params.langCode && _localeIDs[params.langCode] === undefined) {
-              // If this is the first time we are asking about this locale,
-              // fetch corresponding entity (if it exists), and cache it.
-              // If there is no such entry, cache `false` value to avoid re-requesting it.
-              localeSitelink = ('Locale:' + params.langCode).replace(/_/g, ' ').trim();
-              titles.push(localeSitelink);
-          }
+          lane
+              .attr('transform', function(d) {
+                  return 'translate(' + (LANE_WIDTH * d.index * 1.5) + ', 0)';
+              });
 
-          if (_wikibaseCache[keySitelink]) {
-              result.key = _wikibaseCache[keySitelink];
-          } else {
-              titles.push(keySitelink);
-          }
+          lane.select('.forward')
+              .style('visibility', function(d) {
+                  return d.direction === 'forward' ? 'visible' : 'hidden';
+              });
 
-          if (tagSitelink) {
-              if (_wikibaseCache[tagSitelink]) {
-                  result.tag = _wikibaseCache[tagSitelink];
-              } else {
-                  titles.push(tagSitelink);
-              }
-          }
+          lane.select('.bothways')
+              .style('visibility', function(d) {
+                  return d.direction === 'bothways' ? 'visible' : 'hidden';
+              });
 
-          if (!titles.length) {
-              // Nothing to do, we already had everything in the cache
-              return callback(null, result);
-          }
+          lane.select('.backward')
+              .style('visibility', function(d) {
+                  return d.direction === 'backward' ? 'visible' : 'hidden';
+              });
+      }
 
-          // Requesting just the user language code
-          // If backend recognizes the code, it will perform proper fallbacks,
-          // and the result will contain the requested code. If not, all values are returned:
-          // {"zh-tw":{"value":"...","language":"zh-tw","source-language":"zh-hant"}
-          // {"pt-br":{"value":"...","language":"pt","for-language":"pt-br"}}
-          var obj = {
-              action: 'wbgetentities',
-              sites: 'wiki',
-              titles: titles.join('|'),
-              languages: params.langCode,
-              languagefallback: 1,
-              origin: '*',
-              format: 'json',
-              // There is an MW Wikibase API bug https://phabricator.wikimedia.org/T212069
-              // We shouldn't use v1 until it gets fixed, but should switch to it afterwards
-              // formatversion: 2,
-          };
 
-          var url = apibase$3 + '?' + utilQsString(obj);
-          doRequest(url, function(err, d) {
-              if (err) {
-                  callback(err);
-              } else if (!d.success || d.error) {
-                  callback(d.error.messages.map(function(v) { return v.html['*']; }).join('<br>'));
-              } else {
-                  var localeID = false;
-                  forEach(d.entities, function(res) {
-                      if (res.missing !== '') {
-                          var title = res.sitelinks.wiki.title;
-                          // Simplify access to the localized values
-                          res.description = localizedToString(res.descriptions, params.langCode);
-                          res.label = localizedToString(res.labels, params.langCode);
-                          if (title === keySitelink) {
-                              _wikibaseCache[keySitelink] = res;
-                              result.key = res;
-                          } else if (title === tagSitelink) {
-                              _wikibaseCache[tagSitelink] = res;
-                              result.tag = res;
-                          } else if (title === localeSitelink) {
-                              localeID = res.id;
-                          } else {
-                              console.log('Unexpected title ' + title);  // eslint-disable-line no-console
-                          }
-                      }
-                  });
+      lanes.entity = function(val) {
+          if (!_entityID || _entityID !== val.id) {
+              _entityID = val.id;
+          }
+      };
 
-                  if (localeSitelink) {
-                      // If locale ID is not found, store false to prevent repeated queries
-                      self.addLocale(params.langCode, localeID);
-                  }
+      lanes.tags = function() {};
+      lanes.focus = function() {};
+      lanes.off = function() {};
 
-                  callback(null, result);
-              }
-          });
-      },
+      return utilRebind(lanes, dispatch$1, 'on');
+  }
 
+  function uiFieldLocalized(field, context) {
+      var dispatch$1 = dispatch('change', 'input');
+      var wikipedia = services.wikipedia;
+      var input = select(null);
+      var localizedInputs = select(null);
 
-      addLocale: function(langCode, qid) {
-          // Makes it easier to unit test
-          _localeIDs[langCode] = qid;
-      },
+      var allSuggestions = context.presets().collection.filter(function(p) {
+          return p.suggestion === true;
+      });
 
-      apibase: function(val) {
-          if (!arguments.length) return apibase$3;
-          apibase$3 = val;
-          return this;
-      }
+      // reuse these combos
+      var langCombo = uiCombobox(context, 'localized-lang')
+          .fetcher(fetchLanguages)
+          .minItems(0);
 
-  };
+      var brandCombo = uiCombobox(context, 'localized-brand')
+          .canAutocomplete(false)
+          .minItems(1);
 
-  var jsonpCache = {};
-  window.jsonpCache = jsonpCache;
+      var _selection = select(null);
+      var _multilingual = [];
+      var _isLocked = false;
+      var _brandTip = tooltip()
+          .title(t('inspector.lock.suggestion', { label: field.label }))
+          .placement('bottom');
+      var _buttonTip = tooltip()
+          .title(t('translate.translate'))
+          .placement('left');
+      var _wikiTitles;
+      var _entity;
 
-  function jsonpRequest(url, callback) {
-      var request = {
-          abort: function() {}
-      };
 
-      if (window.JSONP_FIX) {
-          if (window.JSONP_DELAY === 0) {
-              callback(window.JSONP_FIX);
-          } else {
-              var t = window.setTimeout(function() {
-                  callback(window.JSONP_FIX);
-              }, window.JSONP_DELAY || 0);
+      function calcLocked() {
+          if (!_entity) {    // the original entity
+              _isLocked = false;
+              return;
+          }
 
-              request.abort = function() { window.clearTimeout(t); };
+          var latest = context.hasEntity(_entity.id);
+          if (!latest) {    // get current entity, possibly edited
+              _isLocked = false;
+              return;
           }
 
-          return request;
-      }
+          var hasOriginalName = (latest.tags.name && latest.tags.name === _entity.tags.name);
+          var hasWikidata = latest.tags.wikidata;
+          var preset = context.presets().match(latest, context.graph());
+          var isSuggestion = preset && preset.suggestion;
+          var showsBrand = preset && preset.fields
+              .filter(function(d) { return d.id === 'brand'; }).length;
 
-      function rand() {
-          var chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
-          var c = '';
-          var i = -1;
-          while (++i < 15) c += chars.charAt(Math.floor(Math.random() * 52));
-          return c;
+          _isLocked = !!(field.id === 'name' && hasOriginalName &&
+              (hasWikidata || (isSuggestion && !showsBrand)));
       }
 
-      function create$$1(url) {
-          var e = url.match(/callback=(\w+)/);
-          var c = e ? e[1] : rand();
 
-          jsonpCache[c] = function(data) {
-              if (jsonpCache[c]) {
-                  callback(data);
+      function calcMultilingual(tags) {
+          _multilingual = [];
+          for (var k in tags) {
+              var m = k.match(/^(.*):([a-zA-Z_-]+)$/);
+              if (m && m[1] === field.key && m[2]) {
+                  _multilingual.push({ lang: m[2], value: tags[k] });
               }
-              finalize();
-          };
-
-          function finalize() {
-              delete jsonpCache[c];
-              script.remove();
           }
-
-          request.abort = finalize;
-          return 'jsonpCache.' + c;
+          _multilingual.reverse();
       }
 
-      var cb = create$$1(url);
-
-      var script = select('head')
-          .append('script')
-          .attr('type', 'text/javascript')
-          .attr('src', url.replace(/(\{|%7B)callback(\}|%7D)/, cb));
 
-      return request;
-  }
+      function localized(selection) {
+          _selection = selection;
+          calcLocked();
+          var entity = _entity && context.hasEntity(_entity.id);  // get latest
+          var preset = entity && context.presets().match(entity, context.graph());
 
-  var q = createCommonjsModule(function (module, exports) {
-  // vim:ts=4:sts=4:sw=4:
-  /*!
-   *
-   * Copyright 2009-2017 Kris Kowal under the terms of the MIT
-   * license found at https://github.com/kriskowal/q/blob/v1/LICENSE
-   *
-   * With parts by Tyler Close
-   * Copyright 2007-2009 Tyler Close under the terms of the MIT X license found
-   * at http://www.opensource.org/licenses/mit-license.html
-   * Forked at ref_send.js version: 2009-05-11
-   *
-   * With parts by Mark Miller
-   * Copyright (C) 2011 Google Inc.
-   *
-   * Licensed under the Apache License, Version 2.0 (the "License");
-   * you may not use this file except in compliance with the License.
-   * You may obtain a copy of the License at
-   *
-   * http://www.apache.org/licenses/LICENSE-2.0
-   *
-   * Unless required by applicable law or agreed to in writing, software
-   * distributed under the License is distributed on an "AS IS" BASIS,
-   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   * See the License for the specific language governing permissions and
-   * limitations under the License.
-   *
-   */
+          var wrap = selection.selectAll('.form-field-input-wrap')
+              .data([0]);
 
-  (function (definition) {
+          // enter/update
+          wrap = wrap.enter()
+              .append('div')
+              .attr('class', 'form-field-input-wrap form-field-input-' + field.type)
+              .merge(wrap)
+              .call(_isLocked ? _brandTip : _brandTip.destroy);
 
-      // This file will function properly as a <script> tag, or a module
-      // using CommonJS and NodeJS or RequireJS module formats.  In
-      // Common/Node/RequireJS, the module exports the Q API and when
-      // executed as a simple <script>, it creates a Q global instead.
 
-      // Montage Require
-      if (typeof bootstrap === "function") {
-          bootstrap("promise", definition);
+          input = wrap.selectAll('.localized-main')
+              .data([0]);
 
-      // CommonJS
-      } else {
-          module.exports = definition();
+          // enter/update
+          input = input.enter()
+              .append('input')
+              .attr('type', 'text')
+              .attr('id', 'preset-input-' + field.safeid)
+              .attr('class', 'localized-main')
+              .attr('placeholder', field.placeholder())
+              .call(utilNoAuto)
+              .merge(input);
 
-      // RequireJS
-      }
+          if (preset && field.id === 'name') {
+              var pTag = preset.id.split('/', 2);
+              var pKey = pTag[0];
+              var pValue = pTag[1];
 
-  })(function () {
+              if (preset.suggestion) {
+                  // A "suggestion" preset (brand name)
+                  // Put suggestion keys in `field.keys` so delete button can remove them all.
+                  field.keys = Object.keys(preset.removeTags)
+                      .filter(function(k) { return k !== pKey; });
 
-  var hasStacks = false;
-  try {
-      throw new Error();
-  } catch (e) {
-      hasStacks = !!e.stack;
-  }
+              } else {
+                  // Not a suggestion preset - Add a suggestions dropdown if it makes sense to.
+                  // This code attempts to determine if the matched preset is the
+                  // kind of preset that even can benefit from name suggestions..
+                  // - true = shops, cafes, hotels, etc. (also generic and fallback presets)
+                  // - false = churches, parks, hospitals, etc. (things not in the index)
+                  var isFallback = preset.isFallback();
+                  var goodSuggestions = allSuggestions.filter(function(s) {
+                      if (isFallback) return true;
+                      var sTag = s.id.split('/', 2);
+                      var sKey = sTag[0];
+                      var sValue = sTag[1];
+                      return pKey === sKey && (!pValue || pValue === sValue);
+                  });
 
-  // All code after this point will be filtered from stack traces reported
-  // by Q.
-  var qStartingLine = captureLine();
-  var qFileName;
+                  // Show the suggestions.. If the user picks one, change the tags..
+                  if (allSuggestions.length && goodSuggestions.length) {
+                      input
+                          .on('blur.localized', checkBrandOnBlur)
+                          .call(brandCombo
+                              .fetcher(fetchBrandNames(preset, allSuggestions))
+                              .on('accept', acceptBrand)
+                              .on('cancel', cancelBrand)
+                          );
+                  }
+              }
+          }
 
-  // shims
+          input
+              .classed('disabled', !!_isLocked)
+              .attr('readonly', _isLocked || null)
+              .on('input', change(true))
+              .on('blur', change())
+              .on('change', change());
 
-  // used for fallback in "allResolved"
-  var noop = function () {};
 
-  // Use the fastest possible means to execute a task in a future turn
-  // of the event loop.
-  var nextTick =(function () {
-      // linked list of tasks (single, with head node)
-      var head = {task: void 0, next: null};
-      var tail = head;
-      var flushing = false;
-      var requestTick = void 0;
-      var isNodeJS = false;
-      // queue for late tasks, used by unhandled rejection tracking
-      var laterQueue = [];
+          var translateButton = wrap.selectAll('.localized-add')
+              .data([0]);
 
-      function flush() {
-          /* jshint loopfunc: true */
-          var task, domain;
+          translateButton = translateButton.enter()
+              .append('button')
+              .attr('class', 'localized-add form-field-button')
+              .attr('tabindex', -1)
+              .call(svgIcon('#iD-icon-plus'))
+              .merge(translateButton);
 
-          while (head.next) {
-              head = head.next;
-              task = head.task;
-              head.task = void 0;
-              domain = head.domain;
+          translateButton
+              .classed('disabled', !!_isLocked)
+              .call(_isLocked ? _buttonTip.destroy : _buttonTip)
+              .on('click', addNew);
 
-              if (domain) {
-                  head.domain = void 0;
-                  domain.enter();
-              }
-              runSingle(task, domain);
 
+          if (entity && !_multilingual.length) {
+              calcMultilingual(entity.tags);
           }
-          while (laterQueue.length) {
-              task = laterQueue.pop();
-              runSingle(task);
-          }
-          flushing = false;
-      }
-      // runs a single function in the async queue
-      function runSingle(task, domain) {
-          try {
-              task();
 
-          } catch (e) {
-              if (isNodeJS) {
-                  // In node, uncaught exceptions are considered fatal errors.
-                  // Re-throw them synchronously to interrupt flushing!
+          localizedInputs = selection.selectAll('.localized-multilingual')
+              .data([0]);
 
-                  // Ensure continuation if the uncaught exception is suppressed
-                  // listening "uncaughtException" events (as domains does).
-                  // Continue in next event to avoid tick recursion.
-                  if (domain) {
-                      domain.exit();
-                  }
-                  setTimeout(flush, 0);
-                  if (domain) {
-                      domain.enter();
-                  }
+          localizedInputs = localizedInputs.enter()
+              .append('div')
+              .attr('class', 'localized-multilingual')
+              .merge(localizedInputs);
 
-                  throw e;
+          localizedInputs
+              .call(renderMultilingual);
 
+          localizedInputs.selectAll('button, input')
+              .classed('disabled', !!_isLocked)
+              .attr('readonly', _isLocked || null);
+
+
+          // We are not guaranteed to get an `accept` or `cancel` when blurring the field.
+          // (This can happen if the user actives the combo, arrows down, and then clicks off to blur)
+          // So compare the current field value against the suggestions one last time.
+          function checkBrandOnBlur() {
+              var latest = context.hasEntity(_entity.id);
+              if (!latest) return;   // deleting the entity blurred the field?
+
+              var preset = context.presets().match(latest, context.graph());
+              if (preset && preset.suggestion) return;   // already accepted
+
+              // note: here we are testing against "decorated" names, i.e. 'Starbucks – Cafe'
+              var name = utilGetSetValue(input).trim();
+              var matched = allSuggestions.filter(function(s) { return name === s.name(); });
+
+              if (matched.length === 1) {
+                  acceptBrand({ suggestion: matched[0] });
               } else {
-                  // In browsers, uncaught exceptions are not fatal.
-                  // Re-throw them asynchronously to avoid slow-downs.
-                  setTimeout(function () {
-                      throw e;
-                  }, 0);
+                  cancelBrand();
               }
           }
 
-          if (domain) {
-              domain.exit();
-          }
-      }
 
-      nextTick = function (task) {
-          tail = tail.next = {
-              task: task,
-              domain: isNodeJS && process.domain,
-              next: null
-          };
+          function acceptBrand(d) {
+              if (!d) {
+                  cancelBrand();
+                  return;
+              }
 
-          if (!flushing) {
-              flushing = true;
-              requestTick();
+              var entity = context.entity(_entity.id);  // get latest
+              var tags = entity.tags;
+              var geometry = entity.geometry(context.graph());
+              var removed = preset.unsetTags(tags, geometry);
+              for (var k in tags) {
+                  tags[k] = removed[k];  // set removed tags to `undefined`
+              }
+              tags = d.suggestion.setTags(tags, geometry);
+              utilGetSetValue(input, tags.name);
+              dispatch$1.call('change', this, tags);
           }
-      };
-
-      if (typeof process === "object" &&
-          process.toString() === "[object process]" && process.nextTick) {
-          // Ensure Q is in a real Node environment, with a `process.nextTick`.
-          // To see through fake Node environments:
-          // * Mocha test runner - exposes a `process` global without a `nextTick`
-          // * Browserify - exposes a `process.nexTick` function that uses
-          //   `setTimeout`. In this case `setImmediate` is preferred because
-          //    it is faster. Browserify's `process.toString()` yields
-          //   "[object Object]", while in a real Node environment
-          //   `process.toString()` yields "[object process]".
-          isNodeJS = true;
 
-          requestTick = function () {
-              process.nextTick(flush);
-          };
 
-      } else if (typeof setImmediate === "function") {
-          // In IE10, Node.js 0.9+, or https://github.com/NobleJS/setImmediate
-          if (typeof window !== "undefined") {
-              requestTick = setImmediate.bind(window, flush);
-          } else {
-              requestTick = function () {
-                  setImmediate(flush);
-              };
+          // user hit escape, clean whatever preset name appears after the last ' – '
+          function cancelBrand() {
+              var name = utilGetSetValue(input);
+              var clean = cleanName(name);
+              if (clean !== name) {
+                  utilGetSetValue(input, clean);
+                  dispatch$1.call('change', this, { name: clean });
+              }
           }
 
-      } else if (typeof MessageChannel !== "undefined") {
-          // modern browsers
-          // http://www.nonblocking.io/2011/06/windownexttick.html
-          var channel = new MessageChannel();
-          // At least Safari Version 6.0.5 (8536.30.1) intermittently cannot create
-          // working message ports the first time a page loads.
-          channel.port1.onmessage = function () {
-              requestTick = requestPortTick;
-              channel.port1.onmessage = flush;
-              flush();
-          };
-          var requestPortTick = function () {
-              // Opera requires us to provide a message payload, regardless of
-              // whether we use it.
-              channel.port2.postMessage(0);
-          };
-          requestTick = function () {
-              setTimeout(flush, 0);
-              requestPortTick();
-          };
-
-      } else {
-          // old browsers
-          requestTick = function () {
-              setTimeout(flush, 0);
-          };
-      }
-      // runs a task after all other tasks have been run
-      // this is useful for unhandled rejection tracking that needs to happen
-      // after all `then`d tasks have been run.
-      nextTick.runAfter = function (task) {
-          laterQueue.push(task);
-          if (!flushing) {
-              flushing = true;
-              requestTick();
+          // Remove whatever is after the last ' – '
+          // NOTE: split/join on en-dash, not a hypen (to avoid conflict with fr - nl names in Brussels etc)
+          function cleanName(name) {
+              var parts = name.split(' – ');
+              if (parts.length > 1) {
+                  parts.pop();
+                  name = parts.join(' – ');
+              }
+              return name;
           }
-      };
-      return nextTick;
-  })();
 
-  // Attempt to make generics safe in the face of downstream
-  // modifications.
-  // There is no situation where this is necessary.
-  // If you need a security guarantee, these primordials need to be
-  // deeply frozen anyway, and if you don’t need a security guarantee,
-  // this is just plain paranoid.
-  // However, this **might** have the nice side-effect of reducing the size of
-  // the minified code by reducing x.call() to merely x()
-  // See Mark Miller’s explanation of what this does.
-  // http://wiki.ecmascript.org/doku.php?id=conventions:safe_meta_programming
-  var call = Function.call;
-  function uncurryThis(f) {
-      return function () {
-          return call.apply(f, arguments);
-      };
-  }
-  // This is equivalent, but slower:
-  // uncurryThis = Function_bind.bind(Function_bind.call);
-  // http://jsperf.com/uncurrythis
 
-  var array_slice = uncurryThis(Array.prototype.slice);
+          function fetchBrandNames(preset, suggestions) {
+              var pTag = preset.id.split('/', 2);
+              var pKey = pTag[0];
+              var pValue = pTag[1];
 
-  var array_reduce = uncurryThis(
-      Array.prototype.reduce || function (callback, basis) {
-          var index = 0,
-              length = this.length;
-          // concerning the initial value, if one is not provided
-          if (arguments.length === 1) {
-              // seek to the first value in the array, accounting
-              // for the possibility that is is a sparse array
-              do {
-                  if (index in this) {
-                      basis = this[index++];
-                      break;
-                  }
-                  if (++index >= length) {
-                      throw new TypeError();
+              return function(value, callback) {
+                  var results = [];
+                  if (value && value.length > 2) {
+                      for (var i = 0; i < suggestions.length; i++) {
+                          var s = suggestions[i];
+                          var sTag = s.id.split('/', 2);
+                          var sKey = sTag[0];
+                          var sValue = sTag[1];
+                          var name = s.name();
+                          var dist = utilEditDistance(value, name.substring(0, value.length));
+                          var matchesPreset = (pKey === sKey && (!pValue || pValue === sValue));
+
+                          if (dist < 1 || (matchesPreset && dist < 3)) {
+                              var obj = {
+                                  title: name,
+                                  value: name,
+                                  suggestion: s,
+                                  dist: dist + (matchesPreset ? 0 : 1)  // penalize if not matched preset
+                              };
+                              results.push(obj);
+                          }
+                      }
+                      results.sort(function(a, b) { return a.dist - b.dist; });
                   }
-              } while (1);
-          }
-          // reduce
-          for (; index < length; index++) {
-              // account for the possibility that the array is sparse
-              if (index in this) {
-                  basis = callback(basis, this[index], index);
-              }
+                  results = results.slice(0, 10);
+                  callback(results);
+              };
           }
-          return basis;
-      }
-  );
 
-  var array_indexOf = uncurryThis(
-      Array.prototype.indexOf || function (value) {
-          // not a very good shim, but good enough for our one use of it
-          for (var i = 0; i < this.length; i++) {
-              if (this[i] === value) {
-                  return i;
+
+          function addNew() {
+              event.preventDefault();
+              if (_isLocked) return;
+
+              var defaultLang = utilDetect().locale.toLowerCase().split('-')[0];
+              var langExists = find$1(_multilingual, function(datum) { return datum.lang === defaultLang;});
+              var isLangEn = defaultLang.indexOf('en') > -1;
+              if (isLangEn || langExists) {
+                  defaultLang = '';
               }
+              _multilingual.push({ lang: defaultLang, value: '' });
+
+              localizedInputs
+                  .call(renderMultilingual);
+          }
+
+
+          function change(onInput) {
+              return function() {
+                  if (_isLocked) {
+                      event.preventDefault();
+                      return;
+                  }
+                  var t = {};
+                  t[field.key] = utilGetSetValue(select(this)) || undefined;
+                  dispatch$1.call('change', this, t, onInput);
+              };
           }
-          return -1;
       }
-  );
 
-  var array_map = uncurryThis(
-      Array.prototype.map || function (callback, thisp) {
-          var self = this;
-          var collect = [];
-          array_reduce(self, function (undefined, value, index) {
-              collect.push(callback.call(thisp, value, index, self));
-          }, void 0);
-          return collect;
+
+      function key(lang) {
+          return field.key + ':' + lang;
       }
-  );
 
-  var object_create = Object.create || function (prototype) {
-      function Type() { }
-      Type.prototype = prototype;
-      return new Type();
-  };
 
-  var object_defineProperty = Object.defineProperty || function (obj, prop, descriptor) {
-      obj[prop] = descriptor.value;
-      return obj;
-  };
+      function changeLang(d) {
+          var lang = utilGetSetValue(select(this));
+          var t = {};
+          var language = find$1(wikipedia$2, function(d) {
+              return d[0].toLowerCase() === lang.toLowerCase() ||
+                  d[1].toLowerCase() === lang.toLowerCase();
+          });
 
-  var object_hasOwnProperty = uncurryThis(Object.prototype.hasOwnProperty);
+          if (language) lang = language[2];
 
-  var object_keys = Object.keys || function (object) {
-      var keys = [];
-      for (var key in object) {
-          if (object_hasOwnProperty(object, key)) {
-              keys.push(key);
+          if (d.lang && d.lang !== lang) {
+              t[key(d.lang)] = undefined;
+          }
+
+          var value = utilGetSetValue(select(this.parentNode)
+              .selectAll('.localized-value'));
+
+          if (lang && value) {
+              t[key(lang)] = value;
+          } else if (lang && _wikiTitles && _wikiTitles[d.lang]) {
+              t[key(lang)] = _wikiTitles[d.lang];
           }
+
+          d.lang = lang;
+          dispatch$1.call('change', this, t);
       }
-      return keys;
-  };
 
-  var object_toString = uncurryThis(Object.prototype.toString);
 
-  function isObject(value) {
-      return value === Object(value);
-  }
+      function changeValue(d) {
+          if (!d.lang) return;
+          var t = {};
+          t[key(d.lang)] = utilGetSetValue(select(this)) || undefined;
+          dispatch$1.call('change', this, t);
+      }
 
-  // generator related shims
 
-  // FIXME: Remove this function once ES6 generators are in SpiderMonkey.
-  function isStopIteration(exception) {
-      return (
-          object_toString(exception) === "[object StopIteration]" ||
-          exception instanceof QReturnValue
-      );
-  }
+      function fetchLanguages(value, cb) {
+          var v = value.toLowerCase();
 
-  // FIXME: Remove this helper and Q.return once ES6 generators are in
-  // SpiderMonkey.
-  var QReturnValue;
-  if (typeof ReturnValue !== "undefined") {
-      QReturnValue = ReturnValue;
-  } else {
-      QReturnValue = function (value) {
-          this.value = value;
-      };
-  }
+          cb(wikipedia$2.filter(function(d) {
+              return d[0].toLowerCase().indexOf(v) >= 0 ||
+              d[1].toLowerCase().indexOf(v) >= 0 ||
+              d[2].toLowerCase().indexOf(v) >= 0;
+          }).map(function(d) {
+              return { value: d[1] };
+          }));
+      }
 
-  // long stack traces
 
-  var STACK_JUMP_SEPARATOR = "From previous event:";
+      function renderMultilingual(selection) {
+          var wraps = selection.selectAll('div.entry')
+              .data(_multilingual, function(d) { return d.lang; });
 
-  function makeStackTraceLong(error, promise) {
-      // If possible, transform the error stack trace by removing Node and Q
-      // cruft, then concatenating with the stack trace of `promise`. See #57.
-      if (hasStacks &&
-          promise.stack &&
-          typeof error === "object" &&
-          error !== null &&
-          error.stack
-      ) {
-          var stacks = [];
-          for (var p = promise; !!p; p = p.source) {
-              if (p.stack && (!error.__minimumStackCounter__ || error.__minimumStackCounter__ > p.stackCounter)) {
-                  object_defineProperty(error, "__minimumStackCounter__", {value: p.stackCounter, configurable: true});
-                  stacks.unshift(p.stack);
-              }
-          }
-          stacks.unshift(error.stack);
+          wraps.exit()
+              .transition()
+              .duration(200)
+              .style('max-height', '0px')
+              .style('opacity', '0')
+              .style('top', '-10px')
+              .remove();
 
-          var concatedStacks = stacks.join("\n" + STACK_JUMP_SEPARATOR + "\n");
-          var stack = filterStackString(concatedStacks);
-          object_defineProperty(error, "stack", {value: stack, configurable: true});
-      }
-  }
+          var innerWrap = wraps.enter()
+              .insert('div', ':first-child');
 
-  function filterStackString(stackString) {
-      var lines = stackString.split("\n");
-      var desiredLines = [];
-      for (var i = 0; i < lines.length; ++i) {
-          var line = lines[i];
+          innerWrap
+              .attr('class', 'entry')
+              .each(function() {
+                  var wrap = select(this);
 
-          if (!isInternalFrame(line) && !isNodeFrame(line) && line) {
-              desiredLines.push(line);
-          }
-      }
-      return desiredLines.join("\n");
-  }
+                  var label = wrap
+                      .append('label')
+                      .attr('class', 'form-field-label');
 
-  function isNodeFrame(stackLine) {
-      return stackLine.indexOf("(module.js:") !== -1 ||
-             stackLine.indexOf("(node.js:") !== -1;
-  }
+                  label
+                      .append('span')
+                      .attr('class', 'label-text')
+                      .text(t('translate.localized_translation_label'));
 
-  function getFileNameAndLineNumber(stackLine) {
-      // Named functions: "at functionName (filename:lineNumber:columnNumber)"
-      // In IE10 function name can have spaces ("Anonymous function") O_o
-      var attempt1 = /at .+ \((.+):(\d+):(?:\d+)\)$/.exec(stackLine);
-      if (attempt1) {
-          return [attempt1[1], Number(attempt1[2])];
-      }
+                  label
+                      .append('button')
+                      .attr('class', 'remove-icon-multilingual')
+                      .on('click', function(d){
+                          if (_isLocked) return;
+                          event.preventDefault();
+                          var t = {};
+                          t[key(d.lang)] = undefined;
+                          dispatch$1.call('change', this, t);
+                          select(this.parentNode.parentNode.parentNode)
+                              .style('top', '0')
+                              .style('max-height', '240px')
+                              .transition()
+                              .style('opacity', '0')
+                              .style('max-height', '0px')
+                              .remove();
+                      })
+                      .call(svgIcon('#iD-operation-delete'));
 
-      // Anonymous functions: "at filename:lineNumber:columnNumber"
-      var attempt2 = /at ([^ ]+):(\d+):(?:\d+)$/.exec(stackLine);
-      if (attempt2) {
-          return [attempt2[1], Number(attempt2[2])];
-      }
+                  wrap
+                      .append('input')
+                      .attr('class', 'localized-lang')
+                      .attr('type', 'text')
+                      .attr('placeholder', t('translate.localized_translation_language'))
+                      .on('blur', changeLang)
+                      .on('change', changeLang)
+                      .call(langCombo);
 
-      // Firefox style: "function@filename:lineNumber or @filename:lineNumber"
-      var attempt3 = /.*@(.+):(\d+)$/.exec(stackLine);
-      if (attempt3) {
-          return [attempt3[1], Number(attempt3[2])];
-      }
-  }
+                  wrap
+                      .append('input')
+                      .attr('type', 'text')
+                      .attr('placeholder', t('translate.localized_translation_name'))
+                      .attr('class', 'localized-value')
+                      .on('blur', changeValue)
+                      .on('change', changeValue);
+              });
 
-  function isInternalFrame(stackLine) {
-      var fileNameAndLineNumber = getFileNameAndLineNumber(stackLine);
+          innerWrap
+              .style('margin-top', '0px')
+              .style('max-height', '0px')
+              .style('opacity', '0')
+              .transition()
+              .duration(200)
+              .style('margin-top', '10px')
+              .style('max-height', '240px')
+              .style('opacity', '1')
+              .on('end', function() {
+                  select(this)
+                      .style('max-height', '')
+                      .style('overflow', 'visible');
+              });
 
-      if (!fileNameAndLineNumber) {
-          return false;
-      }
 
-      var fileName = fileNameAndLineNumber[0];
-      var lineNumber = fileNameAndLineNumber[1];
+          var entry = selection.selectAll('.entry');
 
-      return fileName === qFileName &&
-          lineNumber >= qStartingLine &&
-          lineNumber <= qEndingLine;
-  }
+          utilGetSetValue(entry.select('.localized-lang'), function(d) {
+              var lang = find$1(wikipedia$2, function(lang) { return lang[2] === d.lang; });
+              return lang ? lang[1] : d.lang;
+          });
 
-  // discover own file name and line number range for filtering stack
-  // traces
-  function captureLine() {
-      if (!hasStacks) {
-          return;
+          utilGetSetValue(entry.select('.localized-value'),
+              function(d) { return d.value; });
       }
 
-      try {
-          throw new Error();
-      } catch (e) {
-          var lines = e.stack.split("\n");
-          var firstLine = lines[0].indexOf("@") > 0 ? lines[1] : lines[2];
-          var fileNameAndLineNumber = getFileNameAndLineNumber(firstLine);
-          if (!fileNameAndLineNumber) {
-              return;
+
+      localized.tags = function(tags) {
+          // Fetch translations from wikipedia
+          if (tags.wikipedia && !_wikiTitles) {
+              _wikiTitles = {};
+              var wm = tags.wikipedia.match(/([^:]+):(.+)/);
+              if (wm && wm[0] && wm[1]) {
+                  wikipedia.translations(wm[1], wm[2], function(d) { _wikiTitles = d; });
+              }
           }
 
-          qFileName = fileNameAndLineNumber[0];
-          return fileNameAndLineNumber[1];
-      }
-  }
+          utilGetSetValue(input, tags[field.key] || '');
 
-  function deprecate(callback, name, alternative) {
-      return function () {
-          if (typeof console !== "undefined" &&
-              typeof console.warn === "function") {
-              console.warn(name + " is deprecated, use " + alternative +
-                           " instead.", new Error("").stack);
-          }
-          return callback.apply(callback, arguments);
+          calcMultilingual(tags);
+
+          _selection
+              .call(localized);
       };
-  }
 
-  // end of shims
-  // beginning of real work
 
-  /**
-   * Constructs a promise for an immediate reference, passes promises through, or
-   * coerces promises from different systems.
-   * @param value immediate reference or promise
-   */
-  function Q(value) {
-      // If the object is already a Promise, return it directly.  This enables
-      // the resolve function to both be used to created references from objects,
-      // but to tolerably coerce non-promises to promises.
-      if (value instanceof Promise) {
-          return value;
-      }
+      localized.focus = function() {
+          input.node().focus();
+      };
 
-      // assimilate thenables
-      if (isPromiseAlike(value)) {
-          return coerce(value);
-      } else {
-          return fulfill(value);
-      }
+
+      localized.entity = function(val) {
+          if (!arguments.length) return _entity;
+          _entity = val;
+          _multilingual = [];
+          return localized;
+      };
+
+      return utilRebind(localized, dispatch$1, 'on');
   }
-  Q.resolve = Q;
 
-  /**
-   * Performs a task in a future turn of the event loop.
-   * @param {Function} task
-   */
-  Q.nextTick = nextTick;
+  function uiFieldMaxspeed(field, context) {
+      var dispatch$1 = dispatch('change');
+      var unitInput = select(null);
+      var input = select(null);
+      var _entity;
+      var _isImperial;
 
-  /**
-   * Controls whether or not long stack traces will be on
-   */
-  Q.longStackSupport = false;
+      var speedCombo = uiCombobox(context, 'maxspeed');
+      var unitCombo = uiCombobox(context, 'maxspeed-unit')
+              .data(['km/h', 'mph'].map(comboValues));
 
-  /**
-   * The counter is used to determine the stopping point for building
-   * long stack traces. In makeStackTraceLong we walk backwards through
-   * the linked list of promises, only stacks which were created before
-   * the rejection are concatenated.
-   */
-  var longStackCounter = 1;
+      var metricValues = [20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120];
+      var imperialValues = [5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80];
 
-  // enable long stacks if Q_DEBUG is set
-  if (typeof process === "object" && process && process.env && process.env.Q_DEBUG) {
-      Q.longStackSupport = true;
-  }
 
-  /**
-   * Constructs a {promise, resolve, reject} object.
-   *
-   * `resolve` is a callback to invoke with a more resolved value for the
-   * promise. To fulfill the promise, invoke `resolve` with any value that is
-   * not a thenable. To reject the promise, invoke `resolve` with a rejected
-   * thenable, or invoke `reject` with the reason directly. To resolve the
-   * promise to another thenable, thus putting it in the same state, invoke
-   * `resolve` with that other thenable.
-   */
-  Q.defer = defer;
-  function defer() {
-      // if "messages" is an "Array", that indicates that the promise has not yet
-      // been resolved.  If it is "undefined", it has been resolved.  Each
-      // element of the messages array is itself an array of complete arguments to
-      // forward to the resolved promise.  We coerce the resolution value to a
-      // promise using the `resolve` function because it handles both fully
-      // non-thenable values and other thenables gracefully.
-      var messages = [], progressListeners = [], resolvedPromise;
+      function maxspeed(selection) {
 
-      var deferred = object_create(defer.prototype);
-      var promise = object_create(Promise.prototype);
+          var wrap = selection.selectAll('.form-field-input-wrap')
+              .data([0]);
 
-      promise.promiseDispatch = function (resolve, op, operands) {
-          var args = array_slice(arguments);
-          if (messages) {
-              messages.push(args);
-              if (op === "when" && operands[1]) { // progress operand
-                  progressListeners.push(operands[1]);
-              }
+          wrap = wrap.enter()
+              .append('div')
+              .attr('class', 'form-field-input-wrap form-field-input-' + field.type)
+              .merge(wrap);
+
+
+          input = wrap.selectAll('#preset-input-' + field.safeid)
+              .data([0]);
+
+          input = input.enter()
+              .append('input')
+              .attr('type', 'text')
+              .attr('id', 'preset-input-' + field.safeid)
+              .attr('placeholder', field.placeholder())
+              .call(utilNoAuto)
+              .call(speedCombo)
+              .merge(input);
+
+          input
+              .on('change', change)
+              .on('blur', change);
+
+          var loc;
+          if (_entity.type === 'node') {
+              loc = _entity.loc;
           } else {
-              Q.nextTick(function () {
-                  resolvedPromise.promiseDispatch.apply(resolvedPromise, args);
-              });
+              var childNodes = context.graph().childNodes(context.entity(_entity.id));
+              loc = childNodes[~~(childNodes.length/2)].loc;
           }
-      };
 
-      // XXX deprecated
-      promise.valueOf = function () {
-          if (messages) {
-              return promise;
-          }
-          var nearerValue = nearer(resolvedPromise);
-          if (isPromise(nearerValue)) {
-              resolvedPromise = nearerValue; // shorten chain
-          }
-          return nearerValue;
-      };
+          _isImperial = some(dataImperial.features, function(f) {
+              return some(f.geometry.coordinates, function(d) {
+                  return geoPointInPolygon(loc, d);
+              });
+          });
 
-      promise.inspect = function () {
-          if (!resolvedPromise) {
-              return { state: "pending" };
-          }
-          return resolvedPromise.inspect();
-      };
+          unitInput = wrap.selectAll('input.maxspeed-unit')
+              .data([0]);
 
-      if (Q.longStackSupport && hasStacks) {
-          try {
-              throw new Error();
-          } catch (e) {
-              // NOTE: don't try to use `Error.captureStackTrace` or transfer the
-              // accessor around; that causes memory leaks as per GH-111. Just
-              // reify the stack trace as a string ASAP.
-              //
-              // At the same time, cut off the first line; it's always just
-              // "[object Promise]\n", as per the `toString`.
-              promise.stack = e.stack.substring(e.stack.indexOf("\n") + 1);
-              promise.stackCounter = longStackCounter++;
-          }
-      }
+          unitInput = unitInput.enter()
+              .append('input')
+              .attr('type', 'text')
+              .attr('class', 'maxspeed-unit')
+              .call(unitCombo)
+              .merge(unitInput);
 
-      // NOTE: we do the checks for `resolvedPromise` in each method, instead of
-      // consolidating them into `become`, since otherwise we'd create new
-      // promises with the lines `become(whatever(value))`. See e.g. GH-252.
+          unitInput
+              .on('blur', changeUnits)
+              .on('change', changeUnits);
 
-      function become(newPromise) {
-          resolvedPromise = newPromise;
 
-          if (Q.longStackSupport && hasStacks) {
-              // Only hold a reference to the new promise if long stacks
-              // are enabled to reduce memory usage
-              promise.source = newPromise;
+          function changeUnits() {
+              _isImperial = utilGetSetValue(unitInput) === 'mph';
+              utilGetSetValue(unitInput, _isImperial ? 'mph' : 'km/h');
+              setSuggestions();
+              change();
           }
+      }
 
-          array_reduce(messages, function (undefined, message) {
-              Q.nextTick(function () {
-                  newPromise.promiseDispatch.apply(newPromise, message);
-              });
-          }, void 0);
 
-          messages = void 0;
-          progressListeners = void 0;
+      function setSuggestions() {
+          speedCombo.data((_isImperial ? imperialValues : metricValues).map(comboValues));
+          utilGetSetValue(unitInput, _isImperial ? 'mph' : 'km/h');
       }
 
-      deferred.promise = promise;
-      deferred.resolve = function (value) {
-          if (resolvedPromise) {
-              return;
-          }
 
-          become(Q(value));
-      };
+      function comboValues(d) {
+          return {
+              value: d.toString(),
+              title: d.toString()
+          };
+      }
 
-      deferred.fulfill = function (value) {
-          if (resolvedPromise) {
-              return;
+
+      function change() {
+          var tag = {};
+          var value = utilGetSetValue(input);
+
+          if (!value) {
+              tag[field.key] = undefined;
+          } else if (isNaN(value) || !_isImperial) {
+              tag[field.key] = value;
+          } else {
+              tag[field.key] = value + ' mph';
           }
 
-          become(fulfill(value));
-      };
-      deferred.reject = function (reason) {
-          if (resolvedPromise) {
-              return;
+          dispatch$1.call('change', this, tag);
+      }
+
+
+      maxspeed.tags = function(tags) {
+          var value = tags[field.key];
+
+          if (value && value.indexOf('mph') >= 0) {
+              value = parseInt(value, 10);
+              _isImperial = true;
+          } else if (value) {
+              _isImperial = false;
           }
 
-          become(reject(reason));
+          setSuggestions();
+          utilGetSetValue(input, value || '');
       };
-      deferred.notify = function (progress) {
-          if (resolvedPromise) {
-              return;
-          }
 
-          array_reduce(progressListeners, function (undefined, progressListener) {
-              Q.nextTick(function () {
-                  progressListener(progress);
-              });
-          }, void 0);
+
+      maxspeed.focus = function() {
+          input.node().focus();
       };
 
-      return deferred;
-  }
 
-  /**
-   * Creates a Node-style callback that will resolve or reject the deferred
-   * promise.
-   * @returns a nodeback
-   */
-  defer.prototype.makeNodeResolver = function () {
-      var self = this;
-      return function (error, value) {
-          if (error) {
-              self.reject(error);
-          } else if (arguments.length > 2) {
-              self.resolve(array_slice(arguments, 1));
-          } else {
-              self.resolve(value);
-          }
+      maxspeed.entity = function(val) {
+          _entity = val;
       };
-  };
+
+
+      return utilRebind(maxspeed, dispatch$1, 'on');
+  }
 
   /**
-   * @param resolver {Function} a function that returns nothing and accepts
-   * the resolve, reject, and notify functions for a deferred.
-   * @returns a promise that may be resolved with the given resolve and reject
-   * functions, or rejected by a thrown exception in resolver
+   * This function is like `baseIndexOf` except that it accepts a comparator.
+   *
+   * @private
+   * @param {Array} array The array to inspect.
+   * @param {*} value The value to search for.
+   * @param {number} fromIndex The index to search from.
+   * @param {Function} comparator The comparator invoked per element.
+   * @returns {number} Returns the index of the matched value, else `-1`.
    */
-  Q.Promise = promise; // ES6
-  Q.promise = promise;
-  function promise(resolver) {
-      if (typeof resolver !== "function") {
-          throw new TypeError("resolver must be a function.");
-      }
-      var deferred = defer();
-      try {
-          resolver(deferred.resolve, deferred.reject, deferred.notify);
-      } catch (reason) {
-          deferred.reject(reason);
+  function baseIndexOfWith(array, value, fromIndex, comparator) {
+    var index = fromIndex - 1,
+        length = array.length;
+
+    while (++index < length) {
+      if (comparator(array[index], value)) {
+        return index;
       }
-      return deferred.promise;
+    }
+    return -1;
   }
 
-  promise.race = race; // ES6
-  promise.all = all; // ES6
-  promise.reject = reject; // ES6
-  promise.resolve = Q; // ES6
-
-  // XXX experimental.  This method is a way to denote that a local value is
-  // serializable and should be immediately dispatched to a remote upon request,
-  // instead of passing a reference.
-  Q.passByCopy = function (object) {
-      //freeze(object);
-      //passByCopies.set(object, true);
-      return object;
-  };
+  /** Used for built-in method references. */
+  var arrayProto$2 = Array.prototype;
 
-  Promise.prototype.passByCopy = function () {
-      //freeze(object);
-      //passByCopies.set(object, true);
-      return this;
-  };
+  /** Built-in value references. */
+  var splice$2 = arrayProto$2.splice;
 
   /**
-   * If two promises eventually fulfill to the same value, promises that value,
-   * but otherwise rejects.
-   * @param x {Any*}
-   * @param y {Any*}
-   * @returns {Any*} a promise for x and y if they are the same, but a rejection
-   * otherwise.
+   * The base implementation of `_.pullAllBy` without support for iteratee
+   * shorthands.
    *
+   * @private
+   * @param {Array} array The array to modify.
+   * @param {Array} values The values to remove.
+   * @param {Function} [iteratee] The iteratee invoked per element.
+   * @param {Function} [comparator] The comparator invoked per element.
+   * @returns {Array} Returns `array`.
    */
-  Q.join = function (x, y) {
-      return Q(x).join(y);
-  };
+  function basePullAll(array, values, iteratee, comparator) {
+    var indexOf = comparator ? baseIndexOfWith : baseIndexOf,
+        index = -1,
+        length = values.length,
+        seen = array;
 
-  Promise.prototype.join = function (that) {
-      return Q([this, that]).spread(function (x, y) {
-          if (x === y) {
-              // TODO: "===" should be Object.is or equiv
-              return x;
-          } else {
-              throw new Error("Q can't join: not the same: " + x + " " + y);
-          }
-      });
-  };
+    if (array === values) {
+      values = copyArray(values);
+    }
+    if (iteratee) {
+      seen = arrayMap(array, baseUnary(iteratee));
+    }
+    while (++index < length) {
+      var fromIndex = 0,
+          value = values[index],
+          computed = iteratee ? iteratee(value) : value;
+
+      while ((fromIndex = indexOf(seen, computed, fromIndex, comparator)) > -1) {
+        if (seen !== array) {
+          splice$2.call(seen, fromIndex, 1);
+        }
+        splice$2.call(array, fromIndex, 1);
+      }
+    }
+    return array;
+  }
 
   /**
-   * Returns a promise for the first of an array of promises to become settled.
-   * @param answers {Array[Any*]} promises to race
-   * @returns {Any*} the first promise to be settled
+   * This method is like `_.pull` except that it accepts an array of values to remove.
+   *
+   * **Note:** Unlike `_.difference`, this method mutates `array`.
+   *
+   * @static
+   * @memberOf _
+   * @since 4.0.0
+   * @category Array
+   * @param {Array} array The array to modify.
+   * @param {Array} values The values to remove.
+   * @returns {Array} Returns `array`.
+   * @example
+   *
+   * var array = ['a', 'b', 'c', 'a', 'b', 'c'];
+   *
+   * _.pullAll(array, ['a', 'c']);
+   * console.log(array);
+   * // => ['b', 'b']
    */
-  Q.race = race;
-  function race(answerPs) {
-      return promise(function (resolve, reject) {
-          // Switch to this once we can assume at least ES5
-          // answerPs.forEach(function (answerP) {
-          //     Q(answerP).then(resolve, reject);
-          // });
-          // Use this in the meantime
-          for (var i = 0, len = answerPs.length; i < len; i++) {
-              Q(answerPs[i]).then(resolve, reject);
-          }
-      });
+  function pullAll(array, values) {
+    return (array && array.length && values && values.length)
+      ? basePullAll(array, values)
+      : array;
   }
 
-  Promise.prototype.race = function () {
-      return this.then(Q.race);
-  };
-
   /**
-   * Constructs a Promise with a promise descriptor object and optional fallback
-   * function.  The descriptor contains methods like when(rejected), get(name),
-   * set(name, value), post(name, args), and delete(name), which all
-   * return either a value, a promise for a value, or a rejection.  The fallback
-   * accepts the operation name, a resolver, and any further arguments that would
-   * have been forwarded to the appropriate method above had a method been
-   * provided with the proper name.  The API makes no guarantees about the nature
-   * of the returned object, apart from that it is usable whereever promises are
-   * bought and sold.
+   * Removes all given values from `array` using
+   * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
+   * for equality comparisons.
+   *
+   * **Note:** Unlike `_.without`, this method mutates `array`. Use `_.remove`
+   * to remove elements from an array by predicate.
+   *
+   * @static
+   * @memberOf _
+   * @since 2.0.0
+   * @category Array
+   * @param {Array} array The array to modify.
+   * @param {...*} [values] The values to remove.
+   * @returns {Array} Returns `array`.
+   * @example
+   *
+   * var array = ['a', 'b', 'c', 'a', 'b', 'c'];
+   *
+   * _.pull(array, 'a', 'c');
+   * console.log(array);
+   * // => ['b', 'b']
    */
-  Q.makePromise = Promise;
-  function Promise(descriptor, fallback, inspect) {
-      if (fallback === void 0) {
-          fallback = function (op) {
-              return reject(new Error(
-                  "Promise does not support operation: " + op
-              ));
-          };
-      }
-      if (inspect === void 0) {
-          inspect = function () {
-              return {state: "unknown"};
-          };
-      }
+  var pull = baseRest(pullAll);
 
-      var promise = object_create(Promise.prototype);
+  function uiFieldRadio(field, context) {
+      var dispatch$1 = dispatch('change');
+      var placeholder = select(null);
+      var wrap = select(null);
+      var labels = select(null);
+      var radios = select(null);
+      var radioData = clone(field.options || field.keys);
+      var typeField;
+      var layerField;
+      var _oldType = {};
+      var _entity;
 
-      promise.promiseDispatch = function (resolve, op, args) {
-          var result;
-          try {
-              if (descriptor[op]) {
-                  result = descriptor[op].apply(promise, args);
-              } else {
-                  result = fallback.call(promise, op, args);
-              }
-          } catch (exception) {
-              result = reject(exception);
-          }
-          if (resolve) {
-              resolve(result);
-          }
-      };
 
-      promise.inspect = inspect;
+      function selectedKey() {
+          var node = wrap.selectAll('.form-field-input-radio label.active input');
+          return !node.empty() && node.datum();
+      }
 
-      // XXX deprecated `valueOf` and `exception` support
-      if (inspect) {
-          var inspected = inspect();
-          if (inspected.state === "rejected") {
-              promise.exception = inspected.reason;
-          }
 
-          promise.valueOf = function () {
-              var inspected = inspect();
-              if (inspected.state === "pending" ||
-                  inspected.state === "rejected") {
-                  return promise;
-              }
-              return inspected.value;
-          };
-      }
+      function radio(selection) {
+          selection.classed('preset-radio', true);
 
-      return promise;
-  }
+          wrap = selection.selectAll('.form-field-input-wrap')
+              .data([0]);
 
-  Promise.prototype.toString = function () {
-      return "[object Promise]";
-  };
+          var enter = wrap.enter()
+              .append('div')
+              .attr('class', 'form-field-input-wrap form-field-input-radio');
 
-  Promise.prototype.then = function (fulfilled, rejected, progressed) {
-      var self = this;
-      var deferred = defer();
-      var done = false;   // ensure the untrusted promise makes at most a
-                          // single call to one of the callbacks
+          enter
+              .append('span')
+              .attr('class', 'placeholder');
 
-      function _fulfilled(value) {
-          try {
-              return typeof fulfilled === "function" ? fulfilled(value) : value;
-          } catch (exception) {
-              return reject(exception);
-          }
-      }
+          wrap = wrap
+              .merge(enter);
 
-      function _rejected(exception) {
-          if (typeof rejected === "function") {
-              makeStackTraceLong(exception, self);
-              try {
-                  return rejected(exception);
-              } catch (newException) {
-                  return reject(newException);
-              }
-          }
-          return reject(exception);
-      }
 
-      function _progressed(value) {
-          return typeof progressed === "function" ? progressed(value) : value;
-      }
+          placeholder = wrap.selectAll('.placeholder');
 
-      Q.nextTick(function () {
-          self.promiseDispatch(function (value) {
-              if (done) {
-                  return;
-              }
-              done = true;
+          labels = wrap.selectAll('label')
+              .data(radioData);
 
-              deferred.resolve(_fulfilled(value));
-          }, "when", [function (exception) {
-              if (done) {
-                  return;
-              }
-              done = true;
+          enter = labels.enter()
+              .append('label');
 
-              deferred.resolve(_rejected(exception));
-          }]);
-      });
+          enter
+              .append('input')
+              .attr('type', 'radio')
+              .attr('name', field.id)
+              .attr('value', function(d) { return field.t('options.' + d, { 'default': d }); })
+              .attr('checked', false);
 
-      // Progress propagator need to be attached in the current tick.
-      self.promiseDispatch(void 0, "when", [void 0, function (value) {
-          var newValue;
-          var threw = false;
-          try {
-              newValue = _progressed(value);
-          } catch (e) {
-              threw = true;
-              if (Q.onerror) {
-                  Q.onerror(e);
-              } else {
-                  throw e;
-              }
-          }
+          enter
+              .append('span')
+              .text(function(d) { return field.t('options.' + d, { 'default': d }); });
 
-          if (!threw) {
-              deferred.notify(newValue);
-          }
-      }]);
+          labels = labels
+              .merge(enter);
 
-      return deferred.promise;
-  };
+          radios = labels.selectAll('input')
+              .on('change', changeRadio);
 
-  Q.tap = function (promise, callback) {
-      return Q(promise).tap(callback);
-  };
+      }
 
-  /**
-   * Works almost like "finally", but not called for rejections.
-   * Original resolution value is passed through callback unaffected.
-   * Callback may return a promise that will be awaited for.
-   * @param {Function} callback
-   * @returns {Q.Promise}
-   * @example
-   * doSomething()
-   *   .then(...)
-   *   .tap(console.log)
-   *   .then(...);
-   */
-  Promise.prototype.tap = function (callback) {
-      callback = Q(callback);
 
-      return this.then(function (value) {
-          return callback.fcall(value).thenResolve(value);
-      });
-  };
+      function structureExtras(selection, tags) {
+          var selected = selectedKey();
+          var type = context.presets().field(selected);
+          var layer = context.presets().field('layer');
+          var showLayer = (selected === 'bridge' || selected === 'tunnel');
 
-  /**
-   * Registers an observer on a promise.
-   *
-   * Guarantees:
-   *
-   * 1. that fulfilled and rejected will be called only once.
-   * 2. that either the fulfilled callback or the rejected callback will be
-   *    called, but not both.
-   * 3. that fulfilled and rejected will not be called in this turn.
-   *
-   * @param value      promise or immediate reference to observe
-   * @param fulfilled  function to be called with the fulfilled value
-   * @param rejected   function to be called with the rejection exception
-   * @param progressed function to be called on any progress notifications
-   * @return promise for the return value from the invoked callback
-   */
-  Q.when = when;
-  function when(value, fulfilled, rejected, progressed) {
-      return Q(value).then(fulfilled, rejected, progressed);
-  }
 
-  Promise.prototype.thenResolve = function (value) {
-      return this.then(function () { return value; });
-  };
+          var extrasWrap = selection.selectAll('.structure-extras-wrap')
+              .data(selected ? [0] : []);
 
-  Q.thenResolve = function (promise, value) {
-      return Q(promise).thenResolve(value);
-  };
+          extrasWrap.exit()
+              .remove();
 
-  Promise.prototype.thenReject = function (reason) {
-      return this.then(function () { throw reason; });
-  };
+          extrasWrap = extrasWrap.enter()
+              .append('div')
+              .attr('class', 'structure-extras-wrap')
+              .merge(extrasWrap);
 
-  Q.thenReject = function (promise, reason) {
-      return Q(promise).thenReject(reason);
-  };
+          var list = extrasWrap.selectAll('ul')
+              .data([0]);
 
-  /**
-   * If an object is not a promise, it is as "near" as possible.
-   * If a promise is rejected, it is as "near" as possible too.
-   * If it’s a fulfilled promise, the fulfillment value is nearer.
-   * If it’s a deferred promise and the deferred has been resolved, the
-   * resolution is "nearer".
-   * @param object
-   * @returns most resolved (nearest) form of the object
-   */
+          list = list.enter()
+              .append('ul')
+              .attr('class', 'labeled-inputs')
+              .merge(list);
 
-  // XXX should we re-do this?
-  Q.nearer = nearer;
-  function nearer(value) {
-      if (isPromise(value)) {
-          var inspected = value.inspect();
-          if (inspected.state === "fulfilled") {
-              return inspected.value;
+
+          // Type
+          if (type) {
+              if (!typeField || typeField.id !== selected) {
+                  typeField = uiField(context, type, _entity, { wrap: false })
+                      .on('change', changeType);
+              }
+              typeField.tags(tags);
+          } else {
+              typeField = null;
           }
-      }
-      return value;
-  }
 
-  /**
-   * @returns whether the given object is a promise.
-   * Otherwise it is a fulfilled value.
-   */
-  Q.isPromise = isPromise;
-  function isPromise(object) {
-      return object instanceof Promise;
-  }
+          var typeItem = list.selectAll('.structure-type-item')
+              .data(typeField ? [typeField] : [], function(d) { return d.id; });
 
-  Q.isPromiseAlike = isPromiseAlike;
-  function isPromiseAlike(object) {
-      return isObject(object) && typeof object.then === "function";
-  }
+          // Exit
+          typeItem.exit()
+              .remove();
 
-  /**
-   * @returns whether the given object is a pending promise, meaning not
-   * fulfilled or rejected.
-   */
-  Q.isPending = isPending;
-  function isPending(object) {
-      return isPromise(object) && object.inspect().state === "pending";
-  }
+          // Enter
+          var typeEnter = typeItem.enter()
+              .insert('li', ':first-child')
+              .attr('class', 'structure-type-item');
+
+          typeEnter
+              .append('span')
+              .attr('class', 'label structure-label-type')
+              .attr('for', 'preset-input-' + selected)
+              .text(t('inspector.radio.structure.type'));
+
+          typeEnter
+              .append('div')
+              .attr('class', 'structure-input-type-wrap');
+
+          // Update
+          typeItem = typeItem
+              .merge(typeEnter);
 
-  Promise.prototype.isPending = function () {
-      return this.inspect().state === "pending";
-  };
+          if (typeField) {
+              typeItem.selectAll('.structure-input-type-wrap')
+                  .call(typeField.render);
+          }
 
-  /**
-   * @returns whether the given object is a value or fulfilled
-   * promise.
-   */
-  Q.isFulfilled = isFulfilled;
-  function isFulfilled(object) {
-      return !isPromise(object) || object.inspect().state === "fulfilled";
-  }
 
-  Promise.prototype.isFulfilled = function () {
-      return this.inspect().state === "fulfilled";
-  };
+          // Layer
+          if (layer && showLayer) {
+              if (!layerField) {
+                  layerField = uiField(context, layer, _entity, { wrap: false })
+                      .on('change', changeLayer);
+              }
+              layerField.tags(tags);
+              field.keys = union(field.keys, ['layer']);
+          } else {
+              layerField = null;
+              pull(field.keys, 'layer');
+          }
 
-  /**
-   * @returns whether the given object is a rejected promise.
-   */
-  Q.isRejected = isRejected;
-  function isRejected(object) {
-      return isPromise(object) && object.inspect().state === "rejected";
-  }
+          var layerItem = list.selectAll('.structure-layer-item')
+              .data(layerField ? [layerField] : []);
 
-  Promise.prototype.isRejected = function () {
-      return this.inspect().state === "rejected";
-  };
+          // Exit
+          layerItem.exit()
+              .remove();
 
-  //// BEGIN UNHANDLED REJECTION TRACKING
+          // Enter
+          var layerEnter = layerItem.enter()
+              .append('li')
+              .attr('class', 'structure-layer-item');
 
-  // This promise library consumes exceptions thrown in handlers so they can be
-  // handled by a subsequent promise.  The exceptions get added to this array when
-  // they are created, and removed when they are handled.  Note that in ES6 or
-  // shimmed environments, this would naturally be a `Set`.
-  var unhandledReasons = [];
-  var unhandledRejections = [];
-  var reportedUnhandledRejections = [];
-  var trackUnhandledRejections = true;
+          layerEnter
+              .append('span')
+              .attr('class', 'label structure-label-layer')
+              .attr('for', 'preset-input-layer')
+              .text(t('inspector.radio.structure.layer'));
 
-  function resetUnhandledRejections() {
-      unhandledReasons.length = 0;
-      unhandledRejections.length = 0;
+          layerEnter
+              .append('div')
+              .attr('class', 'structure-input-layer-wrap');
 
-      if (!trackUnhandledRejections) {
-          trackUnhandledRejections = true;
-      }
-  }
+          // Update
+          layerItem = layerItem
+              .merge(layerEnter);
 
-  function trackRejection(promise, reason) {
-      if (!trackUnhandledRejections) {
-          return;
+          if (layerField) {
+              layerItem.selectAll('.structure-input-layer-wrap')
+                  .call(layerField.render);
+          }
       }
-      if (typeof process === "object" && typeof process.emit === "function") {
-          Q.nextTick.runAfter(function () {
-              if (array_indexOf(unhandledRejections, promise) !== -1) {
-                  process.emit("unhandledRejection", reason, promise);
-                  reportedUnhandledRejections.push(promise);
+
+
+      function changeType(t, onInput) {
+          var key = selectedKey();
+          if (!key) return;
+
+          var val = t[key];
+          if (val !== 'no') {
+              _oldType[key] = val;
+          }
+
+          if (field.type === 'structureRadio') {
+              // remove layer if it should not be set
+              if (val === 'no' ||
+                  (key !== 'bridge' && key !== 'tunnel') ||
+                  (key === 'tunnel' && val === 'building_passage')) {
+                  t.layer = undefined;
               }
-          });
-      }
+              // add layer if it should be set
+              if (t.layer === undefined) {
+                  if (key === 'bridge' && val !== 'no') {
+                      t.layer = '1';
+                  }
+                  if (key === 'tunnel' && val !== 'no' && val !== 'building_passage') {
+                      t.layer = '-1';
+                  }
+              }
+           }
 
-      unhandledRejections.push(promise);
-      if (reason && typeof reason.stack !== "undefined") {
-          unhandledReasons.push(reason.stack);
-      } else {
-          unhandledReasons.push("(no stack) " + reason);
+          dispatch$1.call('change', this, t, onInput);
       }
-  }
 
-  function untrackRejection(promise) {
-      if (!trackUnhandledRejections) {
-          return;
-      }
 
-      var at = array_indexOf(unhandledRejections, promise);
-      if (at !== -1) {
-          if (typeof process === "object" && typeof process.emit === "function") {
-              Q.nextTick.runAfter(function () {
-                  var atReport = array_indexOf(reportedUnhandledRejections, promise);
-                  if (atReport !== -1) {
-                      process.emit("rejectionHandled", unhandledReasons[at], promise);
-                      reportedUnhandledRejections.splice(atReport, 1);
-                  }
-              });
+      function changeLayer(t, onInput) {
+          if (t.layer === '0') {
+              t.layer = undefined;
           }
-          unhandledRejections.splice(at, 1);
-          unhandledReasons.splice(at, 1);
+          dispatch$1.call('change', this, t, onInput);
       }
-  }
 
-  Q.resetUnhandledRejections = resetUnhandledRejections;
 
-  Q.getUnhandledReasons = function () {
-      // Make a copy so that consumers can't interfere with our internal state.
-      return unhandledReasons.slice();
-  };
+      function changeRadio() {
+          var t = {};
+          var activeKey;
 
-  Q.stopUnhandledRejectionTracking = function () {
-      resetUnhandledRejections();
-      trackUnhandledRejections = false;
-  };
+          if (field.key) {
+              t[field.key] = undefined;
+          }
 
-  resetUnhandledRejections();
+          radios.each(function(d) {
+              var active = select(this).property('checked');
+              if (active) activeKey = d;
 
-  //// END UNHANDLED REJECTION TRACKING
+              if (field.key) {
+                  if (active) t[field.key] = d;
+              } else {
+                  var val = _oldType[activeKey] || 'yes';
+                  t[d] = active ? val : undefined;
+              }
+          });
 
-  /**
-   * Constructs a rejected promise.
-   * @param reason value describing the failure
-   */
-  Q.reject = reject;
-  function reject(reason) {
-      var rejection = Promise({
-          "when": function (rejected) {
-              // note that the error has been handled
-              if (rejected) {
-                  untrackRejection(this);
+          if (field.type === 'structureRadio') {
+              if (activeKey === 'bridge') {
+                  t.layer = '1';
+              } else if (activeKey === 'tunnel' && t.tunnel !== 'building_passage') {
+                  t.layer = '-1';
+              } else {
+                  t.layer = undefined;
               }
-              return rejected ? rejected(reason) : this;
           }
-      }, function fallback() {
-          return this;
-      }, function inspect() {
-          return { state: "rejected", reason: reason };
-      });
 
-      // Note that the reason has not been handled.
-      trackRejection(rejection, reason);
+          dispatch$1.call('change', this, t);
+      }
 
-      return rejection;
-  }
 
-  /**
-   * Constructs a fulfilled promise for an immediate reference.
-   * @param value immediate reference
-   */
-  Q.fulfill = fulfill;
-  function fulfill(value) {
-      return Promise({
-          "when": function () {
-              return value;
-          },
-          "get": function (name) {
-              return value[name];
-          },
-          "set": function (name, rhs) {
-              value[name] = rhs;
-          },
-          "delete": function (name) {
-              delete value[name];
-          },
-          "post": function (name, args) {
-              // Mark Miller proposes that post with no name should apply a
-              // promised function.
-              if (name === null || name === void 0) {
-                  return value.apply(void 0, args);
+      radio.tags = function(tags) {
+          function checked(d) {
+              if (field.key) {
+                  return tags[field.key] === d;
               } else {
-                  return value[name].apply(value, args);
+                  return !!(tags[d] && tags[d].toLowerCase() !== 'no');
               }
-          },
-          "apply": function (thisp, args) {
-              return value.apply(thisp, args);
-          },
-          "keys": function () {
-              return object_keys(value);
           }
-      }, void 0, function inspect() {
-          return { state: "fulfilled", value: value };
-      });
-  }
 
-  /**
-   * Converts thenables to Q promises.
-   * @param promise thenable promise
-   * @returns a Q promise
-   */
-  function coerce(promise) {
-      var deferred = defer();
-      Q.nextTick(function () {
-          try {
-              promise.then(deferred.resolve, deferred.reject, deferred.notify);
-          } catch (exception) {
-              deferred.reject(exception);
+          labels.classed('active', checked);
+          radios.property('checked', checked);
+
+          var selection = radios.filter(function() { return this.checked; });
+
+          if (selection.empty()) {
+              placeholder.text(t('inspector.none'));
+          } else {
+              placeholder.text(selection.attr('value'));
+              _oldType[selection.datum()] = tags[selection.datum()];
           }
-      });
-      return deferred.promise;
-  }
 
-  /**
-   * Annotates an object such that it will never be
-   * transferred away from this process over any promise
-   * communication channel.
-   * @param object
-   * @returns promise a wrapping of that object that
-   * additionally responds to the "isDef" message
-   * without a rejection.
-   */
-  Q.master = master;
-  function master(object) {
-      return Promise({
-          "isDef": function () {}
-      }, function fallback(op, args) {
-          return dispatch(object, op, args);
-      }, function () {
-          return Q(object).inspect();
-      });
-  }
+          if (field.type === 'structureRadio') {
+              // For waterways without a tunnel tag, set 'culvert' as
+              // the _oldType to default to if the user picks 'tunnel'
+              if (!!tags.waterway && !_oldType.tunnel) {
+                  _oldType.tunnel = 'culvert';
+              }
 
-  /**
-   * Spreads the values of a promised array of arguments into the
-   * fulfillment callback.
-   * @param fulfilled callback that receives variadic arguments from the
-   * promised array
-   * @param rejected callback that receives the exception if the promise
-   * is rejected.
-   * @returns a promise for the return value or thrown exception of
-   * either callback.
-   */
-  Q.spread = spread;
-  function spread(value, fulfilled, rejected) {
-      return Q(value).spread(fulfilled, rejected);
-  }
+              wrap.call(structureExtras, tags);
+          }
+      };
 
-  Promise.prototype.spread = function (fulfilled, rejected) {
-      return this.all().then(function (array) {
-          return fulfilled.apply(void 0, array);
-      }, rejected);
-  };
 
-  /**
-   * The async function is a decorator for generator functions, turning
-   * them into asynchronous generators.  Although generators are only part
-   * of the newest ECMAScript 6 drafts, this code does not cause syntax
-   * errors in older engines.  This code should continue to work and will
-   * in fact improve over time as the language improves.
-   *
-   * ES6 generators are currently part of V8 version 3.19 with the
-   * --harmony-generators runtime flag enabled.  SpiderMonkey has had them
-   * for longer, but under an older Python-inspired form.  This function
-   * works on both kinds of generators.
-   *
-   * Decorates a generator function such that:
-   *  - it may yield promises
-   *  - execution will continue when that promise is fulfilled
-   *  - the value of the yield expression will be the fulfilled value
-   *  - it returns a promise for the return value (when the generator
-   *    stops iterating)
-   *  - the decorated function returns a promise for the return value
-   *    of the generator or the first rejected promise among those
-   *    yielded.
-   *  - if an error is thrown in the generator, it propagates through
-   *    every following yield until it is caught, or until it escapes
-   *    the generator function altogether, and is translated into a
-   *    rejection for the promise returned by the decorated generator.
-   */
-  Q.async = async;
-  function async(makeGenerator) {
-      return function () {
-          // when verb is "send", arg is a value
-          // when verb is "throw", arg is an exception
-          function continuer(verb, arg) {
-              var result;
+      radio.focus = function() {
+          radios.node().focus();
+      };
 
-              // Until V8 3.19 / Chromium 29 is released, SpiderMonkey is the only
-              // engine that has a deployed base of browsers that support generators.
-              // However, SM's generators use the Python-inspired semantics of
-              // outdated ES6 drafts.  We would like to support ES6, but we'd also
-              // like to make it possible to use generators in deployed browsers, so
-              // we also support Python-style generators.  At some point we can remove
-              // this block.
 
-              if (typeof StopIteration === "undefined") {
-                  // ES6 Generators
-                  try {
-                      result = generator[verb](arg);
-                  } catch (exception) {
-                      return reject(exception);
-                  }
-                  if (result.done) {
-                      return Q(result.value);
-                  } else {
-                      return when(result.value, callback, errback);
-                  }
-              } else {
-                  // SpiderMonkey Generators
-                  // FIXME: Remove this case when SM does ES6 generators.
-                  try {
-                      result = generator[verb](arg);
-                  } catch (exception) {
-                      if (isStopIteration(exception)) {
-                          return Q(exception.value);
-                      } else {
-                          return reject(exception);
-                      }
-                  }
-                  return when(result, callback, errback);
-              }
-          }
-          var generator = makeGenerator.apply(this, arguments);
-          var callback = continuer.bind(continuer, "next");
-          var errback = continuer.bind(continuer, "throw");
-          return callback();
+      radio.entity = function(val) {
+          if (!arguments.length) return _entity;
+          _entity = val;
+          _oldType = {};
+          return radio;
       };
-  }
 
-  /**
-   * The spawn function is a small wrapper around async that immediately
-   * calls the generator and also ends the promise chain, so that any
-   * unhandled errors are thrown instead of forwarded to the error
-   * handler. This is useful because it's extremely common to run
-   * generators at the top-level to work with libraries.
-   */
-  Q.spawn = spawn;
-  function spawn(makeGenerator) {
-      Q.done(Q.async(makeGenerator)());
-  }
 
-  // FIXME: Remove this interface once ES6 generators are in SpiderMonkey.
-  /**
-   * Throws a ReturnValue exception to stop an asynchronous generator.
-   *
-   * This interface is a stop-gap measure to support generator return
-   * values in older Firefox/SpiderMonkey.  In browsers that support ES6
-   * generators like Chromium 29, just use "return" in your generator
-   * functions.
-   *
-   * @param value the return value for the surrounding generator
-   * @throws ReturnValue exception with the value.
-   * @example
-   * // ES6 style
-   * Q.async(function* () {
-   *      var foo = yield getFooPromise();
-   *      var bar = yield getBarPromise();
-   *      return foo + bar;
-   * })
-   * // Older SpiderMonkey style
-   * Q.async(function () {
-   *      var foo = yield getFooPromise();
-   *      var bar = yield getBarPromise();
-   *      Q.return(foo + bar);
-   * })
-   */
-  Q["return"] = _return;
-  function _return(value) {
-      throw new QReturnValue(value);
+      return utilRebind(radio, dispatch$1, 'on');
   }
 
-  /**
-   * The promised function decorator ensures that any promise arguments
-   * are settled and passed as values (`this` is also settled and passed
-   * as a value).  It will also ensure that the result of a function is
-   * always a promise.
-   *
-   * @example
-   * var add = Q.promised(function (a, b) {
-   *     return a + b;
-   * });
-   * add(Q(a), Q(B));
-   *
-   * @param {function} callback The function to decorate
-   * @returns {function} a function that has been decorated.
-   */
-  Q.promised = promised;
-  function promised(callback) {
-      return function () {
-          return spread([this, all(arguments)], function (self, args) {
-              return callback.apply(self, args);
-          });
-      };
-  }
+  function uiFieldRestrictions(field, context) {
+      var dispatch$1 = dispatch('change');
+      var breathe = behaviorBreathe(context);
+      var storedViaWay = context.storage('turn-restriction-via-way');
+      var storedDistance = context.storage('turn-restriction-distance');
 
-  /**
-   * sends a message to a value in a future turn
-   * @param object* the recipient
-   * @param op the name of the message operation, e.g., "when",
-   * @param args further arguments to be forwarded to the operation
-   * @returns result {Promise} a promise for the result of the operation
-   */
-  Q.dispatch = dispatch;
-  function dispatch(object, op, args) {
-      return Q(object).dispatch(op, args);
-  }
+      var _maxViaWay = storedViaWay !== null ? (+storedViaWay) : 1;
+      var _maxDistance = storedDistance ? (+storedDistance) : 30;
+      var _initialized = false;
+      var _parent = select(null);       // the entire field
+      var _container = select(null);    // just the map
+      var _oldTurns;
+      var _graph;
+      var _vertexID;
+      var _intersection;
+      var _fromWayID;
 
-  Promise.prototype.dispatch = function (op, args) {
-      var self = this;
-      var deferred = defer();
-      Q.nextTick(function () {
-          self.promiseDispatch(deferred.resolve, op, args);
-      });
-      return deferred.promise;
-  };
+      var _lastXPos;
+
+
+      function restrictions(selection) {
+          _parent = selection;
+
+          // try to reuse the intersection, but always rebuild it if the graph has changed
+          if (_vertexID && (context.graph() !== _graph || !_intersection)) {
+              _graph = context.graph();
+              _intersection = osmIntersection(_graph, _vertexID, _maxDistance);
+          }
+
+          // It's possible for there to be no actual intersection here.
+          // for example, a vertex of two `highway=path`
+          // In this case, hide the field.
+          var isOK = (
+              _intersection &&
+              _intersection.vertices.length &&           // has vertices
+              _intersection.vertices                     // has the vertex that the user selected
+                  .filter(function(vertex) { return vertex.id === _vertexID; }).length &&
+              _intersection.ways.length > 2 &&           // has more than 2 ways
+              _intersection.ways                         // has more than 1 TO way
+                  .filter(function(way) { return way.__to; }).length > 1
+          );
+
+          // Also hide in the case where
+          select(selection.node().parentNode).classed('hide', !isOK);
+
+          // if form field is hidden or has detached from dom, clean up.
+          if (!isOK ||
+              !select('.inspector-wrap.inspector-hidden').empty() ||
+              !selection.node().parentNode ||
+              !selection.node().parentNode.parentNode) {
+              selection.call(restrictions.off);
+              return;
+          }
+
+
+          var wrap = selection.selectAll('.form-field-input-wrap')
+              .data([0]);
+
+          wrap = wrap.enter()
+              .append('div')
+              .attr('class', 'form-field-input-wrap form-field-input-' + field.type)
+              .merge(wrap);
+
+          var container = wrap.selectAll('.restriction-container')
+              .data([0]);
+
+          // enter
+          var containerEnter = container.enter()
+              .append('div')
+              .attr('class', 'restriction-container');
+
+          containerEnter
+              .append('div')
+              .attr('class', 'restriction-help');
 
-  /**
-   * Gets the value of a property in a future turn.
-   * @param object    promise or immediate reference for target object
-   * @param name      name of property to get
-   * @return promise for the property value
-   */
-  Q.get = function (object, key) {
-      return Q(object).dispatch("get", [key]);
-  };
+          // update
+          _container = containerEnter
+              .merge(container)
+              .call(renderViewer);
 
-  Promise.prototype.get = function (key) {
-      return this.dispatch("get", [key]);
-  };
+          var controls = wrap.selectAll('.restriction-controls')
+              .data([0]);
 
-  /**
-   * Sets the value of a property in a future turn.
-   * @param object    promise or immediate reference for object object
-   * @param name      name of property to set
-   * @param value     new value of property
-   * @return promise for the return value
-   */
-  Q.set = function (object, key, value) {
-      return Q(object).dispatch("set", [key, value]);
-  };
+          // enter/update
+          controls.enter()
+              .append('div')
+              .attr('class', 'restriction-controls-container')
+              .append('div')
+              .attr('class', 'restriction-controls')
+              .merge(controls)
+              .call(renderControls);
+      }
 
-  Promise.prototype.set = function (key, value) {
-      return this.dispatch("set", [key, value]);
-  };
 
-  /**
-   * Deletes a property in a future turn.
-   * @param object    promise or immediate reference for target object
-   * @param name      name of property to delete
-   * @return promise for the return value
-   */
-  Q.del = // XXX legacy
-  Q["delete"] = function (object, key) {
-      return Q(object).dispatch("delete", [key]);
-  };
+      function renderControls(selection) {
+          var distControl = selection.selectAll('.restriction-distance')
+              .data([0]);
 
-  Promise.prototype.del = // XXX legacy
-  Promise.prototype["delete"] = function (key) {
-      return this.dispatch("delete", [key]);
-  };
+          distControl.exit()
+              .remove();
 
-  /**
-   * Invokes a method in a future turn.
-   * @param object    promise or immediate reference for target object
-   * @param name      name of method to invoke
-   * @param value     a value to post, typically an array of
-   *                  invocation arguments for promises that
-   *                  are ultimately backed with `resolve` values,
-   *                  as opposed to those backed with URLs
-   *                  wherein the posted value can be any
-   *                  JSON serializable object.
-   * @return promise for the return value
-   */
-  // bound locally because it is used by other methods
-  Q.mapply = // XXX As proposed by "Redsandro"
-  Q.post = function (object, name, args) {
-      return Q(object).dispatch("post", [name, args]);
-  };
+          var distControlEnter = distControl.enter()
+              .append('div')
+              .attr('class', 'restriction-control restriction-distance');
 
-  Promise.prototype.mapply = // XXX As proposed by "Redsandro"
-  Promise.prototype.post = function (name, args) {
-      return this.dispatch("post", [name, args]);
-  };
+          distControlEnter
+              .append('span')
+              .attr('class', 'restriction-control-label restriction-distance-label')
+              .text(t('restriction.controls.distance') + ':');
 
-  /**
-   * Invokes a method in a future turn.
-   * @param object    promise or immediate reference for target object
-   * @param name      name of method to invoke
-   * @param ...args   array of invocation arguments
-   * @return promise for the return value
-   */
-  Q.send = // XXX Mark Miller's proposed parlance
-  Q.mcall = // XXX As proposed by "Redsandro"
-  Q.invoke = function (object, name /*...args*/) {
-      return Q(object).dispatch("post", [name, array_slice(arguments, 2)]);
-  };
+          distControlEnter
+              .append('input')
+              .attr('class', 'restriction-distance-input')
+              .attr('type', 'range')
+              .attr('min', '20')
+              .attr('max', '50')
+              .attr('step', '5');
 
-  Promise.prototype.send = // XXX Mark Miller's proposed parlance
-  Promise.prototype.mcall = // XXX As proposed by "Redsandro"
-  Promise.prototype.invoke = function (name /*...args*/) {
-      return this.dispatch("post", [name, array_slice(arguments, 1)]);
-  };
+          distControlEnter
+              .append('span')
+              .attr('class', 'restriction-distance-text');
 
-  /**
-   * Applies the promised function in a future turn.
-   * @param object    promise or immediate reference for target function
-   * @param args      array of application arguments
-   */
-  Q.fapply = function (object, args) {
-      return Q(object).dispatch("apply", [void 0, args]);
-  };
+          // update
+          selection.selectAll('.restriction-distance-input')
+              .property('value', _maxDistance)
+              .on('input', function() {
+                  var val = select(this).property('value');
+                  _maxDistance = +val;
+                  _intersection = null;
+                  _container.selectAll('.layer-osm .layer-turns *').remove();
+                  context.storage('turn-restriction-distance', _maxDistance);
+                  _parent.call(restrictions);
+              });
 
-  Promise.prototype.fapply = function (args) {
-      return this.dispatch("apply", [void 0, args]);
-  };
+          selection.selectAll('.restriction-distance-text')
+              .text(displayMaxDistance(_maxDistance));
 
-  /**
-   * Calls the promised function in a future turn.
-   * @param object    promise or immediate reference for target function
-   * @param ...args   array of application arguments
-   */
-  Q["try"] =
-  Q.fcall = function (object /* ...args*/) {
-      return Q(object).dispatch("apply", [void 0, array_slice(arguments, 1)]);
-  };
 
-  Promise.prototype.fcall = function (/*...args*/) {
-      return this.dispatch("apply", [void 0, array_slice(arguments)]);
-  };
+          var viaControl = selection.selectAll('.restriction-via-way')
+              .data([0]);
 
-  /**
-   * Binds the promised function, transforming return values into a fulfilled
-   * promise and thrown errors into a rejected one.
-   * @param object    promise or immediate reference for target function
-   * @param ...args   array of application arguments
-   */
-  Q.fbind = function (object /*...args*/) {
-      var promise = Q(object);
-      var args = array_slice(arguments, 1);
-      return function fbound() {
-          return promise.dispatch("apply", [
-              this,
-              args.concat(array_slice(arguments))
-          ]);
-      };
-  };
-  Promise.prototype.fbind = function (/*...args*/) {
-      var promise = this;
-      var args = array_slice(arguments);
-      return function fbound() {
-          return promise.dispatch("apply", [
-              this,
-              args.concat(array_slice(arguments))
-          ]);
-      };
-  };
+          viaControl.exit()
+              .remove();
 
-  /**
-   * Requests the names of the owned properties of a promised
-   * object in a future turn.
-   * @param object    promise or immediate reference for target object
-   * @return promise for the keys of the eventually settled object
-   */
-  Q.keys = function (object) {
-      return Q(object).dispatch("keys", []);
-  };
+          var viaControlEnter = viaControl.enter()
+              .append('div')
+              .attr('class', 'restriction-control restriction-via-way');
 
-  Promise.prototype.keys = function () {
-      return this.dispatch("keys", []);
-  };
+          viaControlEnter
+              .append('span')
+              .attr('class', 'restriction-control-label restriction-via-way-label')
+              .text(t('restriction.controls.via') + ':');
 
-  /**
-   * Turns an array of promises into a promise for an array.  If any of
-   * the promises gets rejected, the whole array is rejected immediately.
-   * @param {Array*} an array (or promise for an array) of values (or
-   * promises for values)
-   * @returns a promise for an array of the corresponding values
-   */
-  // By Mark Miller
-  // http://wiki.ecmascript.org/doku.php?id=strawman:concurrency&rev=1308776521#allfulfilled
-  Q.all = all;
-  function all(promises) {
-      return when(promises, function (promises) {
-          var pendingCount = 0;
-          var deferred = defer();
-          array_reduce(promises, function (undefined, promise, index) {
-              var snapshot;
-              if (
-                  isPromise(promise) &&
-                  (snapshot = promise.inspect()).state === "fulfilled"
-              ) {
-                  promises[index] = snapshot.value;
-              } else {
-                  ++pendingCount;
-                  when(
-                      promise,
-                      function (value) {
-                          promises[index] = value;
-                          if (--pendingCount === 0) {
-                              deferred.resolve(promises);
-                          }
-                      },
-                      deferred.reject,
-                      function (progress) {
-                          deferred.notify({ index: index, value: progress });
-                      }
-                  );
-              }
-          }, void 0);
-          if (pendingCount === 0) {
-              deferred.resolve(promises);
-          }
-          return deferred.promise;
-      });
-  }
+          viaControlEnter
+              .append('input')
+              .attr('class', 'restriction-via-way-input')
+              .attr('type', 'range')
+              .attr('min', '0')
+              .attr('max', '2')
+              .attr('step', '1');
 
-  Promise.prototype.all = function () {
-      return all(this);
-  };
+          viaControlEnter
+              .append('span')
+              .attr('class', 'restriction-via-way-text');
 
-  /**
-   * Returns the first resolved promise of an array. Prior rejected promises are
-   * ignored.  Rejects only if all promises are rejected.
-   * @param {Array*} an array containing values or promises for values
-   * @returns a promise fulfilled with the value of the first resolved promise,
-   * or a rejected promise if all promises are rejected.
-   */
-  Q.any = any;
+          // update
+          selection.selectAll('.restriction-via-way-input')
+              .property('value', _maxViaWay)
+              .on('input', function() {
+                  var val = select(this).property('value');
+                  _maxViaWay = +val;
+                  _container.selectAll('.layer-osm .layer-turns *').remove();
+                  context.storage('turn-restriction-via-way', _maxViaWay);
+                  _parent.call(restrictions);
+              });
 
-  function any(promises) {
-      if (promises.length === 0) {
-          return Q.resolve();
+          selection.selectAll('.restriction-via-way-text')
+              .text(displayMaxVia(_maxViaWay));
       }
 
-      var deferred = Q.defer();
-      var pendingCount = 0;
-      array_reduce(promises, function (prev, current, index) {
-          var promise = promises[index];
 
-          pendingCount++;
+      function renderViewer(selection) {
+          if (!_intersection) return;
 
-          when(promise, onFulfilled, onRejected, onProgress);
-          function onFulfilled(result) {
-              deferred.resolve(result);
-          }
-          function onRejected(err) {
-              pendingCount--;
-              if (pendingCount === 0) {
-                  var rejection = err || new Error("" + err);
+          var vgraph = _intersection.graph;
+          var filter = utilFunctor(true);
+          var projection = geoRawMercator();
 
-                  rejection.message = ("Q can't get fulfillment value from any promise, all " +
-                      "promises were rejected. Last error message: " + rejection.message);
+          // Reflow warning: `utilGetDimensions` calls `getBoundingClientRect`
+          // Instead of asking the restriction-container for its dimensions,
+          //  we can ask the #sidebar, which can have its dimensions cached.
+          // width: calc as sidebar - padding
+          // height: hardcoded (from `80_app.css`)
+          // var d = utilGetDimensions(selection);
+          var sdims = utilGetDimensions(select('#sidebar'));
+          var d = [ sdims[0] - 50, 370 ];
+          var c = geoVecScale(d, 0.5);
+          var z = 22;
 
-                  deferred.reject(rejection);
-              }
+          projection.scale(geoZoomToScale(z));
+
+          // Calculate extent of all key vertices
+          var extent = geoExtent();
+          for (var i = 0; i < _intersection.vertices.length; i++) {
+              extent._extend(_intersection.vertices[i].extent());
           }
-          function onProgress(progress) {
-              deferred.notify({
-                  index: index,
-                  value: progress
-              });
+
+          // If this is a large intersection, adjust zoom to fit extent
+          if (_intersection.vertices.length > 1) {
+              var padding = 180;   // in z22 pixels
+              var tl = projection([extent[0][0], extent[1][1]]);
+              var br = projection([extent[1][0], extent[0][1]]);
+              var hFactor = (br[0] - tl[0]) / (d[0] - padding);
+              var vFactor = (br[1] - tl[1]) / (d[1] - padding);
+              var hZoomDiff = Math.log(Math.abs(hFactor)) / Math.LN2;
+              var vZoomDiff = Math.log(Math.abs(vFactor)) / Math.LN2;
+              z = z - Math.max(hZoomDiff, vZoomDiff);
+              projection.scale(geoZoomToScale(z));
           }
-      }, undefined);
 
-      return deferred.promise;
-  }
+          var padTop = 35;   // reserve top space for hint text
+          var extentCenter = projection(extent.center());
+          extentCenter[1] = extentCenter[1] - padTop;
 
-  Promise.prototype.any = function () {
-      return any(this);
-  };
+          projection
+              .translate(geoVecSubtract(c, extentCenter))
+              .clipExtent([[0, 0], d]);
 
-  /**
-   * Waits for all promises to be settled, either fulfilled or
-   * rejected.  This is distinct from `all` since that would stop
-   * waiting at the first rejection.  The promise returned by
-   * `allResolved` will never be rejected.
-   * @param promises a promise for an array (or an array) of promises
-   * (or values)
-   * @return a promise for an array of promises
-   */
-  Q.allResolved = deprecate(allResolved, "allResolved", "allSettled");
-  function allResolved(promises) {
-      return when(promises, function (promises) {
-          promises = array_map(promises, Q);
-          return when(all(array_map(promises, function (promise) {
-              return when(promise, noop, noop);
-          })), function () {
-              return promises;
-          });
-      });
-  }
+          var drawLayers = svgLayers(projection, context).only(['osm','touch']).dimensions(d);
+          var drawVertices = svgVertices(projection, context);
+          var drawLines = svgLines(projection, context);
+          var drawTurns = svgTurns(projection, context);
 
-  Promise.prototype.allResolved = function () {
-      return allResolved(this);
-  };
+          var firstTime = selection.selectAll('.surface').empty();
 
-  /**
-   * @see Promise#allSettled
-   */
-  Q.allSettled = allSettled;
-  function allSettled(promises) {
-      return Q(promises).allSettled();
-  }
+          selection
+              .call(drawLayers);
 
-  /**
-   * Turns an array of promises into a promise for an array of their states (as
-   * returned by `inspect`) when they have all settled.
-   * @param {Array[Any*]} values an array (or promise for an array) of values (or
-   * promises for values)
-   * @returns {Array[State]} an array of states for the respective values.
-   */
-  Promise.prototype.allSettled = function () {
-      return this.then(function (promises) {
-          return all(array_map(promises, function (promise) {
-              promise = Q(promise);
-              function regardless() {
-                  return promise.inspect();
-              }
-              return promise.then(regardless, regardless);
-          }));
-      });
-  };
+          var surface = selection.selectAll('.surface')
+              .classed('tr', true);
 
-  /**
-   * Captures the failure of a promise, giving an oportunity to recover
-   * with a callback.  If the given promise is fulfilled, the returned
-   * promise is fulfilled.
-   * @param {Any*} promise for something
-   * @param {Function} callback to fulfill the returned promise if the
-   * given promise is rejected
-   * @returns a promise for the return value of the callback
-   */
-  Q.fail = // XXX legacy
-  Q["catch"] = function (object, rejected) {
-      return Q(object).then(void 0, rejected);
-  };
+          if (firstTime) {
+              _initialized = true;
 
-  Promise.prototype.fail = // XXX legacy
-  Promise.prototype["catch"] = function (rejected) {
-      return this.then(void 0, rejected);
-  };
+              surface
+                  .call(breathe);
+          }
 
-  /**
-   * Attaches a listener that can respond to progress notifications from a
-   * promise's originating deferred. This listener receives the exact arguments
-   * passed to ``deferred.notify``.
-   * @param {Any*} promise for something
-   * @param {Function} callback to receive any progress notifications
-   * @returns the given promise, unchanged
-   */
-  Q.progress = progress;
-  function progress(object, progressed) {
-      return Q(object).then(void 0, void 0, progressed);
-  }
+          // This can happen if we've lowered the detail while a FROM way
+          // is selected, and that way is no longer part of the intersection.
+          if (_fromWayID && !vgraph.hasEntity(_fromWayID)) {
+              _fromWayID = null;
+              _oldTurns = null;
+          }
 
-  Promise.prototype.progress = function (progressed) {
-      return this.then(void 0, void 0, progressed);
-  };
+          surface
+              .call(utilSetDimensions, d)
+              .call(drawVertices, vgraph, _intersection.vertices, filter, extent, z)
+              .call(drawLines, vgraph, _intersection.ways, filter)
+              .call(drawTurns, vgraph, _intersection.turns(_fromWayID, _maxViaWay));
 
-  /**
-   * Provides an opportunity to observe the settling of a promise,
-   * regardless of whether the promise is fulfilled or rejected.  Forwards
-   * the resolution to the returned promise when the callback is done.
-   * The callback can return a promise to defer completion.
-   * @param {Any*} promise
-   * @param {Function} callback to observe the resolution of the given
-   * promise, takes no arguments.
-   * @returns a promise for the resolution of the given promise when
-   * ``fin`` is done.
-   */
-  Q.fin = // XXX legacy
-  Q["finally"] = function (object, callback) {
-      return Q(object)["finally"](callback);
-  };
+          surface
+              .on('click.restrictions', click)
+              .on('mouseover.restrictions', mouseover);
 
-  Promise.prototype.fin = // XXX legacy
-  Promise.prototype["finally"] = function (callback) {
-      if (!callback || typeof callback.apply !== "function") {
-          throw new Error("Q can't apply finally callback");
-      }
-      callback = Q(callback);
-      return this.then(function (value) {
-          return callback.fcall().then(function () {
-              return value;
-          });
-      }, function (reason) {
-          // TODO attempt to recycle the rejection with "this".
-          return callback.fcall().then(function () {
-              throw reason;
-          });
-      });
-  };
+          surface
+              .selectAll('.selected')
+              .classed('selected', false);
 
-  /**
-   * Terminates a chain of promises, forcing rejections to be
-   * thrown as exceptions.
-   * @param {Any*} promise at the end of a chain of promises
-   * @returns nothing
-   */
-  Q.done = function (object, fulfilled, rejected, progress) {
-      return Q(object).done(fulfilled, rejected, progress);
-  };
+          surface
+              .selectAll('.related')
+              .classed('related', false);
 
-  Promise.prototype.done = function (fulfilled, rejected, progress) {
-      var onUnhandledError = function (error) {
-          // forward to a future turn so that ``when``
-          // does not catch it and turn it into a rejection.
-          Q.nextTick(function () {
-              makeStackTraceLong(error, promise);
-              if (Q.onerror) {
-                  Q.onerror(error);
-              } else {
-                  throw error;
-              }
-          });
-      };
+          if (_fromWayID) {
+              var way = vgraph.entity(_fromWayID);
+              surface
+                  .selectAll('.' + _fromWayID)
+                  .classed('selected', true)
+                  .classed('related', true);
+          }
+
+          document.addEventListener('resizeWindow', function () {
+              utilSetDimensions(_container, null);
+              redraw(1);
+          }, false);
 
-      // Avoid unnecessary `nextTick`ing via an unnecessary `when`.
-      var promise = fulfilled || rejected || progress ?
-          this.then(fulfilled, rejected, progress) :
-          this;
+          updateHints(null);
 
-      if (typeof process === "object" && process && process.domain) {
-          onUnhandledError = process.domain.bind(onUnhandledError);
-      }
 
-      promise.then(void 0, onUnhandledError);
-  };
+          function click() {
+              surface
+                  .call(breathe.off)
+                  .call(breathe);
 
-  /**
-   * Causes a promise to be rejected if it does not get fulfilled before
-   * some milliseconds time out.
-   * @param {Any*} promise
-   * @param {Number} milliseconds timeout
-   * @param {Any*} custom error message or Error object (optional)
-   * @returns a promise for the resolution of the given promise if it is
-   * fulfilled before the timeout, otherwise rejected.
-   */
-  Q.timeout = function (object, ms, error) {
-      return Q(object).timeout(ms, error);
-  };
+              var datum = event.target.__data__;
+              var entity = datum && datum.properties && datum.properties.entity;
+              if (entity) {
+                  datum = entity;
+              }
 
-  Promise.prototype.timeout = function (ms, error) {
-      var deferred = defer();
-      var timeoutId = setTimeout(function () {
-          if (!error || "string" === typeof error) {
-              error = new Error(error || "Timed out after " + ms + " ms");
-              error.code = "ETIMEDOUT";
-          }
-          deferred.reject(error);
-      }, ms);
+              if (datum instanceof osmWay && (datum.__from || datum.__via)) {
+                  _fromWayID = datum.id;
+                  _oldTurns = null;
+                  redraw();
 
-      this.then(function (value) {
-          clearTimeout(timeoutId);
-          deferred.resolve(value);
-      }, function (exception) {
-          clearTimeout(timeoutId);
-          deferred.reject(exception);
-      }, deferred.notify);
+              } else if (datum instanceof osmTurn) {
+                  var actions, extraActions, turns, i;
+                  var restrictionType = osmInferRestriction(vgraph, datum, projection);
 
-      return deferred.promise;
-  };
+                  if (datum.restrictionID && !datum.direct) {
+                      return;
 
-  /**
-   * Returns a promise for the given value (or promised value), some
-   * milliseconds after it resolved. Passes rejections immediately.
-   * @param {Any*} promise
-   * @param {Number} milliseconds
-   * @returns a promise for the resolution of the given promise after milliseconds
-   * time has elapsed since the resolution of the given promise.
-   * If the given promise rejects, that is passed immediately.
-   */
-  Q.delay = function (object, timeout) {
-      if (timeout === void 0) {
-          timeout = object;
-          object = void 0;
-      }
-      return Q(object).delay(timeout);
-  };
+                  } else if (datum.restrictionID && !datum.only) {    // NO -> ONLY
+                      var seen = {};
+                      var datumOnly = cloneDeep(datum);
+                      datumOnly.only = true;
+                      restrictionType = restrictionType.replace(/^no/, 'only');
 
-  Promise.prototype.delay = function (timeout) {
-      return this.then(function (value) {
-          var deferred = defer();
-          setTimeout(function () {
-              deferred.resolve(value);
-          }, timeout);
-          return deferred.promise;
-      });
-  };
+                      // Adding an ONLY restriction should destroy all other direct restrictions from the FROM towards the VIA.
+                      // We will remember them in _oldTurns, and restore them if the user clicks again.
+                      turns = _intersection.turns(_fromWayID, 2);
+                      extraActions = [];
+                      _oldTurns = [];
+                      for (i = 0; i < turns.length; i++) {
+                          var turn = turns[i];
+                          if (seen[turn.restrictionID]) continue;  // avoid deleting the turn twice (#4968, #4928)
 
-  /**
-   * Passes a continuation to a Node function, which is called with the given
-   * arguments provided as an array, and returns a promise.
-   *
-   *      Q.nfapply(FS.readFile, [__filename])
-   *      .then(function (content) {
-   *      })
-   *
-   */
-  Q.nfapply = function (callback, args) {
-      return Q(callback).nfapply(args);
-  };
+                          if (turn.direct && turn.path[1] === datum.path[1]) {
+                              seen[turns[i].restrictionID] = true;
+                              turn.restrictionType = osmInferRestriction(vgraph, turn, projection);
+                              _oldTurns.push(turn);
+                              extraActions.push(actionUnrestrictTurn(turn));
+                          }
+                      }
 
-  Promise.prototype.nfapply = function (args) {
-      var deferred = defer();
-      var nodeArgs = array_slice(args);
-      nodeArgs.push(deferred.makeNodeResolver());
-      this.fapply(nodeArgs).fail(deferred.reject);
-      return deferred.promise;
-  };
+                      actions = _intersection.actions.concat(extraActions, [
+                          actionRestrictTurn(datumOnly, restrictionType),
+                          t('operations.restriction.annotation.create')
+                      ]);
 
-  /**
-   * Passes a continuation to a Node function, which is called with the given
-   * arguments provided individually, and returns a promise.
-   * @example
-   * Q.nfcall(FS.readFile, __filename)
-   * .then(function (content) {
-   * })
-   *
-   */
-  Q.nfcall = function (callback /*...args*/) {
-      var args = array_slice(arguments, 1);
-      return Q(callback).nfapply(args);
-  };
+                  } else if (datum.restrictionID) {   // ONLY -> Allowed
+                      // Restore whatever restrictions we might have destroyed by cycling thru the ONLY state.
+                      // This relies on the assumption that the intersection was already split up when we
+                      // performed the previous action (NO -> ONLY), so the IDs in _oldTurns shouldn't have changed.
+                      turns = _oldTurns || [];
+                      extraActions = [];
+                      for (i = 0; i < turns.length; i++) {
+                          if (turns[i].key !== datum.key) {
+                              extraActions.push(actionRestrictTurn(turns[i], turns[i].restrictionType));
+                          }
+                      }
+                      _oldTurns = null;
 
-  Promise.prototype.nfcall = function (/*...args*/) {
-      var nodeArgs = array_slice(arguments);
-      var deferred = defer();
-      nodeArgs.push(deferred.makeNodeResolver());
-      this.fapply(nodeArgs).fail(deferred.reject);
-      return deferred.promise;
-  };
+                      actions = _intersection.actions.concat(extraActions, [
+                          actionUnrestrictTurn(datum),
+                          t('operations.restriction.annotation.delete')
+                      ]);
 
-  /**
-   * Wraps a NodeJS continuation passing function and returns an equivalent
-   * version that returns a promise.
-   * @example
-   * Q.nfbind(FS.readFile, __filename)("utf-8")
-   * .then(console.log)
-   * .done()
-   */
-  Q.nfbind =
-  Q.denodeify = function (callback /*...args*/) {
-      if (callback === undefined) {
-          throw new Error("Q can't wrap an undefined function");
-      }
-      var baseArgs = array_slice(arguments, 1);
-      return function () {
-          var nodeArgs = baseArgs.concat(array_slice(arguments));
-          var deferred = defer();
-          nodeArgs.push(deferred.makeNodeResolver());
-          Q(callback).fapply(nodeArgs).fail(deferred.reject);
-          return deferred.promise;
-      };
-  };
+                  } else {    // Allowed -> NO
+                      actions = _intersection.actions.concat([
+                          actionRestrictTurn(datum, restrictionType),
+                          t('operations.restriction.annotation.create')
+                      ]);
+                  }
 
-  Promise.prototype.nfbind =
-  Promise.prototype.denodeify = function (/*...args*/) {
-      var args = array_slice(arguments);
-      args.unshift(this);
-      return Q.denodeify.apply(void 0, args);
-  };
+                  context.perform.apply(context, actions);
 
-  Q.nbind = function (callback, thisp /*...args*/) {
-      var baseArgs = array_slice(arguments, 2);
-      return function () {
-          var nodeArgs = baseArgs.concat(array_slice(arguments));
-          var deferred = defer();
-          nodeArgs.push(deferred.makeNodeResolver());
-          function bound() {
-              return callback.apply(thisp, arguments);
+                  // At this point the datum will be changed, but will have same key..
+                  // Refresh it and update the help..
+                  var s = surface.selectAll('.' + datum.key);
+                  datum = s.empty() ? null : s.datum();
+                  updateHints(datum);
+
+              } else {
+                  _fromWayID = null;
+                  _oldTurns = null;
+                  redraw();
+              }
           }
-          Q(bound).fapply(nodeArgs).fail(deferred.reject);
-          return deferred.promise;
-      };
-  };
 
-  Promise.prototype.nbind = function (/*thisp, ...args*/) {
-      var args = array_slice(arguments, 0);
-      args.unshift(this);
-      return Q.nbind.apply(void 0, args);
-  };
 
-  /**
-   * Calls a method of a Node-style object that accepts a Node-style
-   * callback with a given array of arguments, plus a provided callback.
-   * @param object an object that has the named method
-   * @param {String} name name of the method of object
-   * @param {Array} args arguments to pass to the method; the callback
-   * will be provided by Q and appended to these arguments.
-   * @returns a promise for the value or error
-   */
-  Q.nmapply = // XXX As proposed by "Redsandro"
-  Q.npost = function (object, name, args) {
-      return Q(object).npost(name, args);
-  };
+          function mouseover() {
+              var datum = event.target.__data__;
+              updateHints(datum);
+          }
 
-  Promise.prototype.nmapply = // XXX As proposed by "Redsandro"
-  Promise.prototype.npost = function (name, args) {
-      var nodeArgs = array_slice(args || []);
-      var deferred = defer();
-      nodeArgs.push(deferred.makeNodeResolver());
-      this.dispatch("post", [name, nodeArgs]).fail(deferred.reject);
-      return deferred.promise;
-  };
+          _lastXPos = _lastXPos || sdims[0];
 
-  /**
-   * Calls a method of a Node-style object that accepts a Node-style
-   * callback, forwarding the given variadic arguments, plus a provided
-   * callback argument.
-   * @param object an object that has the named method
-   * @param {String} name name of the method of object
-   * @param ...args arguments to pass to the method; the callback will
-   * be provided by Q and appended to these arguments.
-   * @returns a promise for the value or error
-   */
-  Q.nsend = // XXX Based on Mark Miller's proposed "send"
-  Q.nmcall = // XXX Based on "Redsandro's" proposal
-  Q.ninvoke = function (object, name /*...args*/) {
-      var nodeArgs = array_slice(arguments, 2);
-      var deferred = defer();
-      nodeArgs.push(deferred.makeNodeResolver());
-      Q(object).dispatch("post", [name, nodeArgs]).fail(deferred.reject);
-      return deferred.promise;
-  };
+          function redraw(minChange) {
+              var xPos = -1;
 
-  Promise.prototype.nsend = // XXX Based on Mark Miller's proposed "send"
-  Promise.prototype.nmcall = // XXX Based on "Redsandro's" proposal
-  Promise.prototype.ninvoke = function (name /*...args*/) {
-      var nodeArgs = array_slice(arguments, 1);
-      var deferred = defer();
-      nodeArgs.push(deferred.makeNodeResolver());
-      this.dispatch("post", [name, nodeArgs]).fail(deferred.reject);
-      return deferred.promise;
-  };
+              if (minChange) {
+                  xPos = utilGetDimensions(select('#sidebar'))[0];
+              }
 
-  /**
-   * If a function would like to support both Node continuation-passing-style and
-   * promise-returning-style, it can end its internal promise chain with
-   * `nodeify(nodeback)`, forwarding the optional nodeback argument.  If the user
-   * elects to use a nodeback, the result will be sent there.  If they do not
-   * pass a nodeback, they will receive the result promise.
-   * @param object a result (or a promise for a result)
-   * @param {Function} nodeback a Node.js-style callback
-   * @returns either the promise or nothing
-   */
-  Q.nodeify = nodeify;
-  function nodeify(object, nodeback) {
-      return Q(object).nodeify(nodeback);
-  }
+              if (!minChange || (minChange && Math.abs(xPos - _lastXPos) >= minChange)) {
+                  if (context.hasEntity(_vertexID)) {
+                      _lastXPos = xPos;
+                      _container.call(renderViewer);
+                  }
+              }
+          }
 
-  Promise.prototype.nodeify = function (nodeback) {
-      if (nodeback) {
-          this.then(function (value) {
-              Q.nextTick(function () {
-                  nodeback(null, value);
-              });
-          }, function (error) {
-              Q.nextTick(function () {
-                  nodeback(error);
-              });
-          });
-      } else {
-          return this;
-      }
-  };
 
-  Q.noConflict = function() {
-      throw new Error("Q.noConflict only works when Q is used as a global");
-  };
+          function highlightPathsFrom(wayID) {
+              surface.selectAll('.related')
+                  .classed('related', false)
+                  .classed('allow', false)
+                  .classed('restrict', false)
+                  .classed('only', false);
 
-  // All code before this point will be filtered from stack traces.
-  var qEndingLine = captureLine();
+              surface.selectAll('.' + wayID)
+                  .classed('related', true);
 
-  return Q;
+              if (wayID) {
+                  var turns = _intersection.turns(wayID, _maxViaWay);
+                  for (var i = 0; i < turns.length; i++) {
+                      var turn = turns[i];
+                      var ids = [turn.to.way];
+                      var klass = (turn.no ? 'restrict' : (turn.only ? 'only' : 'allow'));
 
-  });
-  });
+                      if (turn.only || turns.length === 1) {
+                          if (turn.via.ways) {
+                              ids = ids.concat(turn.via.ways);
+                          }
+                      } else if (turn.to.way === wayID) {
+                          continue;
+                      }
 
-  var bubbleApi = 'https://dev.virtualearth.net/mapcontrol/HumanScaleServices/GetBubbles.ashx?';
-  var streetsideImagesApi = 'https://t.ssl.ak.tiles.virtualearth.net/tiles/';
-  var bubbleAppKey = 'AuftgJsO0Xs8Ts4M1xZUQJQXJNsvmh3IV8DkNieCiy3tCwCUMq76-WpkrBtNAuEm';
-  var pannellumViewerCSS = 'pannellum-streetside/pannellum.css';
-  var pannellumViewerJS = 'pannellum-streetside/pannellum.js';
-  var maxResults$2 = 2000;
-  var tileZoom$2 = 16.5;
-  var tiler$4 = utilTiler().zoomExtent([tileZoom$2, tileZoom$2]).skipNullIsland(true);
-  var dispatch$5 = dispatch('loadedBubbles', 'viewerChanged');
-  var minHfov = 10;         // zoom in degrees:  20, 10, 5
-  var maxHfov = 90;         // zoom out degrees
-  var defaultHfov = 45;
+                      surface.selectAll(utilEntitySelector(ids))
+                          .classed('related', true)
+                          .classed('allow', (klass === 'allow'))
+                          .classed('restrict', (klass === 'restrict'))
+                          .classed('only', (klass === 'only'));
+                  }
+              }
+          }
 
-  var _hires = false;
-  var _resolution = 512;    // higher numbers are slower - 512, 1024, 2048, 4096
-  var _currScene = 0;
-  var _ssCache;
-  var _pannellumViewer;
-  var _sceneOptions;
-  var _dataUrlArray = [];
 
+          function updateHints(datum) {
+              var help = _container.selectAll('.restriction-help').html('');
 
-  /**
-   * abortRequest().
-   */
-  function abortRequest$4(i) {
-      i.abort();
-  }
+              var placeholders = {};
+              ['from', 'via', 'to'].forEach(function(k) {
+                  placeholders[k] = '<span class="qualifier">' + t('restriction.help.' + k) + '</span>';
+              });
 
+              var entity = datum && datum.properties && datum.properties.entity;
+              if (entity) {
+                  datum = entity;
+              }
 
-  /**
-   * localeTimeStamp().
-   */
-  function localeTimestamp(s) {
-      if (!s) return null;
-      var detected = utilDetect();
-      var options = { day: 'numeric', month: 'short', year: 'numeric' };
-      var d = new Date(s);
-      if (isNaN(d.getTime())) return null;
-      return d.toLocaleString(detected.locale, options);
-  }
+              if (_fromWayID) {
+                  way = vgraph.entity(_fromWayID);
+                  surface
+                      .selectAll('.' + _fromWayID)
+                      .classed('selected', true)
+                      .classed('related', true);
+              }
 
+              // Hovering a way
+              if (datum instanceof osmWay && datum.__from) {
+                  way = datum;
 
-  /**
-   * loadTiles() wraps the process of generating tiles and then fetching image points for each tile.
-   */
-  function loadTiles$2(which, url, projection, margin) {
-      var tiles = tiler$4.margin(margin).getTiles(projection);
+                  highlightPathsFrom(_fromWayID ? null : way.id);
+                  surface.selectAll('.' + way.id)
+                      .classed('related', true);
 
-      // abort inflight requests that are no longer needed
-      var cache = _ssCache[which];
-      forEach(cache.inflight, function(v, k) {
-          var wanted = find$1(tiles, function(tile) { return k.indexOf(tile.id + ',') === 0; });
+                  var clickSelect = (!_fromWayID || _fromWayID !== way.id);
+                  help
+                      .append('div')      // "Click to select FROM {fromName}." / "FROM {fromName}"
+                      .html(t('restriction.help.' + (clickSelect ? 'select_from_name' : 'from_name'), {
+                          from: placeholders.from,
+                          fromName: displayName(way.id, vgraph)
+                      }));
 
-          if (!wanted) {
-              abortRequest$4(v);
-              delete cache.inflight[k];
-          }
-      });
 
-      tiles.forEach(function (tile) {
-         loadNextTilePage$2(which, url, tile);
-      });
-  }
+              // Hovering a turn arrow
+              } else if (datum instanceof osmTurn) {
+                  var restrictionType = osmInferRestriction(vgraph, datum, projection);
+                  var turnType = restrictionType.replace(/^(only|no)\_/, '');
+                  var indirect = (datum.direct === false ? t('restriction.help.indirect') : '');
+                  var klass, turnText, nextText;
 
-  /**
-   * loadNextTilePage() load data for the next tile page in line.
-   */
-  function loadNextTilePage$2(which, url, tile) {
-      var cache = _ssCache[which];
-      var nextPage = cache.nextPage[tile.id] || 0;
-      var id = tile.id + ',' + String(nextPage);
-      if (cache.loaded[id] || cache.inflight[id]) return;
+                  if (datum.no) {
+                      klass = 'restrict';
+                      turnText = t('restriction.help.turn.no_' + turnType, { indirect: indirect });
+                      nextText = t('restriction.help.turn.only_' + turnType, { indirect: '' });
+                  } else if (datum.only) {
+                      klass = 'only';
+                      turnText = t('restriction.help.turn.only_' + turnType, { indirect: indirect });
+                      nextText = t('restriction.help.turn.allowed_' + turnType, { indirect: '' });
+                  } else {
+                      klass = 'allow';
+                      turnText = t('restriction.help.turn.allowed_' + turnType, { indirect: indirect });
+                      nextText = t('restriction.help.turn.no_' + turnType, { indirect: '' });
+                  }
 
-      cache.inflight[id] = getBubbles(url, tile, function(bubbles) {
-          cache.loaded[id] = true;
-          delete cache.inflight[id];
-          if (!bubbles) return;
+                  help
+                      .append('div')      // "NO Right Turn (indirect)"
+                      .attr('class', 'qualifier ' + klass)
+                      .text(turnText);
 
-          // [].shift() removes the first element, some statistics info, not a bubble point
-          bubbles.shift();
+                  help
+                      .append('div')      // "FROM {fromName} TO {toName}"
+                      .html(t('restriction.help.from_name_to_name', {
+                          from: placeholders.from,
+                          fromName: displayName(datum.from.way, vgraph),
+                          to: placeholders.to,
+                          toName: displayName(datum.to.way, vgraph)
+                      }));
 
-          var features = bubbles.map(function(bubble) {
-              if (cache.points[bubble.id]) return null;  // skip duplicates
+                  if (datum.via.ways && datum.via.ways.length) {
+                      var names = [];
+                      for (var i = 0; i < datum.via.ways.length; i++) {
+                          var prev = names[names.length - 1];
+                          var curr = displayName(datum.via.ways[i], vgraph);
+                          if (!prev || curr !== prev)   // collapse identical names
+                              names.push(curr);
+                      }
 
-              var loc = [bubble.lo, bubble.la];
-              var d = {
-                  loc: loc,
-                  key: bubble.id,
-                  ca: bubble.he,
-                  captured_at: bubble.cd,
-                  captured_by: 'microsoft',
-                  // nbn: bubble.nbn,
-                  // pbn: bubble.pbn,
-                  // ad: bubble.ad,
-                  // rn: bubble.rn,
-                  pr: bubble.pr,  // previous
-                  ne: bubble.ne,  // next
-                  pano: true,
-                  sequenceKey: null
-              };
+                      help
+                          .append('div')      // "VIA {viaNames}"
+                          .html(t('restriction.help.via_names', {
+                              via: placeholders.via,
+                              viaNames: names.join(', ')
+                          }));
+                  }
 
-              cache.points[bubble.id] = d;
+                  if (!indirect) {
+                      help
+                          .append('div')      // Click for "No Right Turn"
+                          .text(t('restriction.help.toggle', { turn: nextText.trim() }));
+                  }
 
-              // a sequence starts here
-              if (bubble.pr === undefined) {
-                  cache.leaders.push(bubble.id);
-              }
+                  highlightPathsFrom(null);
+                  var alongIDs = datum.path.slice();
+                  surface.selectAll(utilEntitySelector(alongIDs))
+                      .classed('related', true)
+                      .classed('allow', (klass === 'allow'))
+                      .classed('restrict', (klass === 'restrict'))
+                      .classed('only', (klass === 'only'));
 
-              return {
-                  minX: loc[0], minY: loc[1], maxX: loc[0], maxY: loc[1], data: d
-              };
 
-          }).filter(Boolean);
+              // Hovering empty surface
+              } else {
+                  highlightPathsFrom(null);
+                  if (_fromWayID) {
+                      help
+                          .append('div')      // "FROM {fromName}"
+                          .html(t('restriction.help.from_name', {
+                              from: placeholders.from,
+                              fromName: displayName(_fromWayID, vgraph)
+                          }));
 
-          cache.rtree.load(features);
+                  } else {
+                      help
+                          .append('div')      // "Click to select a FROM segment."
+                          .html(t('restriction.help.select_from', {
+                              from: placeholders.from
+                          }));
+                  }
+              }
+          }
+      }
 
-          connectSequences();
 
-          if (which === 'bubbles') {
-              dispatch$5.call('loadedBubbles');
+      function displayMaxDistance(maxDist) {
+          var isImperial = (utilDetect().locale.toLowerCase() === 'en-us');
+          var opts;
+
+          if (isImperial) {
+              var distToFeet = {   // imprecise conversion for prettier display
+                  20: 70, 25: 85, 30: 100, 35: 115, 40: 130, 45: 145, 50: 160
+              }[maxDist];
+              opts = { distance: t('units.feet', { quantity: distToFeet }) };
+          } else {
+              opts = { distance: t('units.meters', { quantity: maxDist }) };
           }
-      });
-  }
 
+          return t('restriction.controls.distance_up_to', opts);
+      }
 
-  // call this sometimes to connect the bubbles into sequences
-  function connectSequences() {
-      var cache = _ssCache.bubbles;
-      var keepLeaders = [];
 
-      for (var i = 0; i < cache.leaders.length; i++) {
-          var bubble = cache.points[cache.leaders[i]];
-          var seen = {};
+      function displayMaxVia(maxVia) {
+          return maxVia === 0 ? t('restriction.controls.via_node_only')
+              : maxVia === 1 ? t('restriction.controls.via_up_to_one')
+              : t('restriction.controls.via_up_to_two');
+      }
 
-          // try to make a sequence.. use the key of the leader bubble.
-          var sequence = { key: bubble.key, bubbles: [] };
-          var complete = false;
 
-          do {
-              sequence.bubbles.push(bubble);
-              seen[bubble.key] = true;
+      function displayName(entityID, graph) {
+          var entity = graph.entity(entityID);
+          var name = utilDisplayName(entity) || '';
+          var matched = context.presets().match(entity, graph);
+          var type = (matched && matched.name()) || utilDisplayType(entity.id);
+          return name || type;
+      }
 
-              if (bubble.ne === undefined) {
-                  complete = true;
-              } else {
-                  bubble = cache.points[bubble.ne];  // advance to next
-              }
-          } while (bubble && !seen[bubble.key] && !complete);
 
+      restrictions.entity = function(_) {
+          _intersection = null;
+          _fromWayID = null;
+          _oldTurns = null;
+          _vertexID = _.id;
+      };
 
-          if (complete) {
-              _ssCache.sequences[sequence.key] = sequence;
 
-              // assign bubbles to the sequence
-              for (var j = 0; j < sequence.bubbles.length; j++) {
-                  sequence.bubbles[j].sequenceKey = sequence.key;
-              }
+      restrictions.tags = function() {};
+      restrictions.focus = function() {};
 
-              // create a GeoJSON LineString
-              sequence.geojson = {
-                  type: 'LineString',
-                  properties: { key: sequence.key },
-                  coordinates: sequence.bubbles.map(function (d) { return d.loc; })
-              };
 
-          } else {
-              keepLeaders.push(cache.leaders[i]);
-          }
-      }
+      restrictions.off = function(selection) {
+          if (!_initialized) return;
 
-      // couldn't complete these, save for later
-      cache.leaders = keepLeaders;
-  }
+          selection.selectAll('.surface')
+              .call(breathe.off)
+              .on('click.restrictions', null)
+              .on('mouseover.restrictions', null);
 
-  /**
-   * getBubbles() handles the request to the server for a tile extent of 'bubbles' (streetside image locations).
-   */
-  function getBubbles(url, tile, callback) {
-      var rect = tile.extent.rectangle();
-      var urlForRequest = url + utilQsString({
-          n: rect[3],
-          s: rect[1],
-          e: rect[2],
-          w: rect[0],
-          c: maxResults$2,
-          appkey: bubbleAppKey,
-          jsCallback: '{callback}'
-      });
+          select(window)
+              .on('resize.restrictions', null);
+      };
 
-      return jsonpRequest(urlForRequest, function (data) {
-          if (!data || data.error) {
-              callback(null);
-          } else {
-              callback(data);
-          }
-      });
+
+      return utilRebind(restrictions, dispatch$1, 'on');
   }
 
+  function uiFieldTextarea(field) {
+      var dispatch$1 = dispatch('change');
+      var input = select(null);
 
-  // partition viewport into higher zoom tiles
-  function partitionViewport$2(projection) {
-      var z = geoScaleToZoom(projection.scale());
-      var z2 = (Math.ceil(z * 2) / 2) + 2.5;   // round to next 0.5 and add 2.5
-      var tiler = utilTiler().zoomExtent([z2, z2]);
 
-      return tiler.getTiles(projection)
-          .map(function(tile) { return tile.extent; });
-  }
+      function textarea(selection) {
+          var wrap = selection.selectAll('.form-field-input-wrap')
+              .data([0]);
 
+          wrap = wrap.enter()
+              .append('div')
+              .attr('class', 'form-field-input-wrap form-field-input-' + field.type)
+              .merge(wrap);
 
-  // no more than `limit` results per partition.
-  function searchLimited$2(limit, projection, rtree) {
-      limit = limit || 5;
+          input = wrap.selectAll('textarea')
+              .data([0]);
 
-      return partitionViewport$2(projection)
-          .reduce(function(result, extent) {
-              var found = rtree.search(extent.bbox())
-                  .slice(0, limit)
-                  .map(function(d) { return d.data; });
+          input = input.enter()
+              .append('textarea')
+              .attr('id', 'preset-input-' + field.safeid)
+              .attr('placeholder', field.placeholder() || t('inspector.unknown'))
+              .attr('maxlength', 255)
+              .call(utilNoAuto)
+              .on('input', change(true))
+              .on('blur', change())
+              .on('change', change())
+              .merge(input);
+      }
 
-              return (found.length ? result.concat(found) : result);
-          }, []);
-  }
 
+      function change(onInput) {
+          return function() {
+              var t = {};
+              t[field.key] = utilGetSetValue(input) || undefined;
+              dispatch$1.call('change', this, t, onInput);
+          };
+      }
 
-  /**
-   * getImage()
-   */
-  function getImage(imgInfo) {
-      var response = q.defer();
-      var img = new Image();
 
-      img.onload = function() {
-          var canvas = document.getElementById('canvas' + imgInfo.face);
-          var ctx = canvas.getContext('2d');
-          ctx.drawImage(img, imgInfo.x, imgInfo.y);
-          response.resolve({imgInfo:imgInfo, status: 'ok'});
+      textarea.tags = function(tags) {
+          utilGetSetValue(input, tags[field.key] || '');
       };
-      img.onerror = function() {
-          response.resolve({data: imgInfo, status: 'error'});
+
+
+      textarea.focus = function() {
+          input.node().focus();
       };
-      img.setAttribute('crossorigin', '');
-      img.src = imgInfo.url;
 
-      return response.promise;
+
+      return utilRebind(textarea, dispatch$1, 'on');
   }
 
+  function uiFieldWikidata(field) {
+      var wikidata = services.wikidata;
+      var dispatch$1 = dispatch('change');
+      var link = select(null);
+      var title = select(null);
+      var _wikiURL = '';
 
-  /**
-   * loadCanvas()
-   */
-  function loadCanvas(imgInfoGroup) {
-      var response = q.defer();
-      var getImagePromises = imgInfoGroup.map(function(imgInfo) {
-          return getImage(imgInfo);
-      });
 
-      q.all(getImagePromises).then(function(data) {
-          var canvas = document.getElementById('canvas' + data[0].imgInfo.face);
-          switch (data[0].imgInfo.face) {
-              case '01':
-                  _dataUrlArray[0] = canvas.toDataURL('image/jpeg', 1.0);
-                  break;
-              case '02':
-                  _dataUrlArray[1] = canvas.toDataURL('image/jpeg', 1.0);
-                  break;
-              case '03':
-                  _dataUrlArray[2] = canvas.toDataURL('image/jpeg', 1.0);
-                  break;
-              case '10':
-                  _dataUrlArray[3] = canvas.toDataURL('image/jpeg', 1.0);
-                  break;
-              case '11':
-                  _dataUrlArray[4] = canvas.toDataURL('image/jpeg', 1.0);
-                  break;
-              case '12':
-                  _dataUrlArray[5] = canvas.toDataURL('image/jpeg', 1.0);
-                  break;
-          }
-          response.resolve({status:'loadCanvas for face ' + data[0].imgInfo.face + 'ok'});
-      });
+      function wiki(selection) {
 
-      return response.promise;
-  }
+          var wrap = selection.selectAll('.form-field-input-wrap')
+              .data([0]);
 
+          wrap = wrap.enter()
+              .append('div')
+              .attr('class', 'form-field-input-wrap form-field-input-' + field.type)
+              .merge(wrap);
 
-  function setupCanvas(selection$$1, reset) {
-      if (reset) {
-          selection$$1.selectAll('#divForCanvasWork')
-              .remove();
-      }
 
-      // Add the Streetside working canvases. These are used for 'stitching', or combining,
-      // multiple images for each of the six faces, before passing to the Pannellum control as DataUrls
-      selection$$1.selectAll('#divForCanvasWork')
-          .data([0])
-          .enter()
-          .append('div')
-          .attr('id', 'divForCanvasWork')
-          .attr('display', 'none')
-          .selectAll('canvas')
-          .data(['canvas01', 'canvas02', 'canvas03', 'canvas10', 'canvas11', 'canvas12'])
-          .enter()
-          .append('canvas')
-          .attr('id', function(d) { return d; })
-          .attr('width', _resolution)
-          .attr('height', _resolution);
-  }
+          var list = wrap.selectAll('ul')
+              .data([0]);
 
+          list = list.enter()
+              .append('ul')
+              .attr('class', 'labeled-inputs')
+              .merge(list);
 
-  /**
-   * processFaces()
-   */
-  function processFaces(imgFaceInfoGroups) {
-      var response = q.defer();
-      var loadCanvasPromises = imgFaceInfoGroups.map(function(faceImgGroup) {
-          return loadCanvas(faceImgGroup);
-      });
+          var wikidataProperties = ['identifier', 'label', 'description'];
 
-      q.all(loadCanvasPromises).then(function() {
-          response.resolve({status: 'processFaces done'});
-      });
+          var items = list.selectAll('li')
+              .data(wikidataProperties);
 
-      return response.promise;
-  }
+          // Enter
+          var enter = items.enter()
+              .append('li')
+              .attr('class', function(d) { return 'preset-wikidata-' + d; });
 
+          enter
+              .append('span')
+              .attr('class', 'label')
+              .attr('for', function(d) { return 'preset-input-wikidata-' + d; })
+              .text(function(d) { return t('wikidata.' + d); });
 
+          var inputWrap = enter
+              .append('div')
+              .attr('class', 'input-wrap');
 
-  function qkToXY(qk) {
-      var x = 0;
-      var y = 0;
-      var scale = 256;
-      for (var i = qk.length; i > 0; i--) {
-          var key = qk[i-1];
-          x += (+(key === '1' || key === '3')) * scale;
-          y += (+(key === '2' || key === '3')) * scale;
-          scale *= 2;
-      }
-      return [x, y];
-  }
+          inputWrap
+              .append('input')
+              .attr('type', 'text')
+              .attr('class', 'preset-input-wikidata')
+              .attr('id', function(d) { return 'preset-input-wikidata-' + d; });
 
 
-  function getQuadKeys() {
-      var dim = _resolution / 256;
-      var quadKeys;
+          title = wrap.select('.preset-wikidata-identifier input')
+              .call(utilNoAuto)
+              .merge(title);
 
-      if (dim === 16) {
-          quadKeys = [
-              '0000','0001','0010','0011','0100','0101','0110','0111',  '1000','1001','1010','1011','1100','1101','1110','1111',
-              '0002','0003','0012','0013','0102','0103','0112','0113',  '1002','1003','1012','1013','1102','1103','1112','1113',
-              '0020','0021','0030','0031','0120','0121','0130','0131',  '1020','1021','1030','1031','1120','1121','1130','1131',
-              '0022','0023','0032','0033','0122','0123','0132','0133',  '1022','1023','1032','1033','1122','1123','1132','1133',
-              '0200','0201','0210','0211','0300','0301','0310','0311',  '1200','1201','1210','1211','1300','1301','1310','1311',
-              '0202','0203','0212','0213','0302','0303','0312','0313',  '1202','1203','1212','1213','1302','1303','1312','1313',
-              '0220','0221','0230','0231','0320','0321','0330','0331',  '1220','1221','1230','1231','1320','1321','1330','1331',
-              '0222','0223','0232','0233','0322','0323','0332','0333',  '1222','1223','1232','1233','1322','1323','1332','1333',
+          title
+              .on('blur', blur)
+              .on('change', change);
 
-              '2000','2001','2010','2011','2100','2101','2110','2111',  '3000','3001','3010','3011','3100','3101','3110','3111',
-              '2002','2003','2012','2013','2102','2103','2112','2113',  '3002','3003','3012','3013','3102','3103','3112','3113',
-              '2020','2021','2030','2031','2120','2121','2130','2131',  '3020','3021','3030','3031','3120','3121','3130','3131',
-              '2022','2023','2032','2033','2122','2123','2132','2133',  '3022','3023','3032','3033','3122','3123','3132','3133',
-              '2200','2201','2210','2211','2300','2301','2310','2311',  '3200','3201','3210','3211','3300','3301','3310','3311',
-              '2202','2203','2212','2213','2302','2303','2312','2313',  '3202','3203','3212','3213','3302','3303','3312','3313',
-              '2220','2221','2230','2231','2320','2321','2330','2331',  '3220','3221','3230','3231','3320','3321','3330','3331',
-              '2222','2223','2232','2233','2322','2323','2332','2333',  '3222','3223','3232','3233','3322','3323','3332','3333'
-          ];
+          var idItem = wrap.select('.preset-wikidata-identifier');
 
-      } else if (dim === 8) {
-          quadKeys = [
-              '000','001','010','011',  '100','101','110','111',
-              '002','003','012','013',  '102','103','112','113',
-              '020','021','030','031',  '120','121','130','131',
-              '022','023','032','033',  '122','123','132','133',
+          idItem.select('button')
+              .remove();
 
-              '200','201','210','211',  '300','301','310','311',
-              '202','203','212','213',  '302','303','312','313',
-              '220','221','230','231',  '320','321','330','331',
-              '222','223','232','233',  '322','323','332','333'
-          ];
+          link = idItem
+              .append('button')
+              .attr('class', 'form-field-button wiki-link')
+              .attr('title', t('icons.open_wikidata'))
+              .attr('tabindex', -1)
+              .call(svgIcon('#iD-icon-out-link'))
+              .merge(link);
 
-      } else if (dim === 4) {
-          quadKeys = [
-              '00','01',  '10','11',
-              '02','03',  '12','13',
+          link
+              .on('click', function() {
+                  event.preventDefault();
+                  if (_wikiURL) window.open(_wikiURL, '_blank');
+              });
 
-              '20','21',  '30','31',
-              '22','23',  '32','33'
-          ];
+          var readOnlyItems = wrap.selectAll('li:not(.preset-wikidata-identifier)');
 
-      } else {  // dim === 2
-          quadKeys = [
-              '0', '1',
-              '2', '3'
-          ];
+          readOnlyItems.select('input')
+              .classed('disabled', 'true')
+              .attr('readonly', 'true');
+
+          readOnlyItems.select('button')
+              .remove();
+
+          readOnlyItems.append('button')
+              .attr('class', 'form-field-button wiki-link')
+              .attr('title', t('icons.copy'))
+              .attr('tabindex', -1)
+              .call(svgIcon('#iD-operation-copy'))
+              .on('click', function() {
+                  event.preventDefault();
+                  select(this.parentNode)
+                      .select('input')
+                      .node()
+                      .select();
+                  document.execCommand('copy');
+              });
       }
 
-      return quadKeys;
-  }
 
+      function blur() {
+          change();
+      }
 
 
-  var serviceStreetside = {
-      /**
-       * init() initialize streetside.
-       */
-      init: function () {
-          if (!_ssCache) {
-              this.reset();
-          }
+      function change() {
+          var syncTags = {
+              wikidata: utilGetSetValue(title)
+          };
+          dispatch$1.call('change', this, syncTags);
+      }
 
-          this.event = utilRebind(this, dispatch$5, 'on');
-      },
 
-      /**
-       * reset() reset the cache.
-       */
-      reset: function () {
-          var cache = _ssCache;
+      wiki.tags = function(tags) {
+          var value = tags[field.key] || '';
+          utilGetSetValue(title, value);
 
-          if (cache) {
-              if (cache.bubbles && cache.bubbles.inflight) {
-                  forEach(cache.bubbles.inflight, abortRequest$4);
-              }
+          if (!/^Q[0-9]*$/.test(value)) {   // not a proper QID
+              unrecognized();
+              return;
           }
 
-          _ssCache = {
-              bubbles: { inflight: {}, loaded: {}, nextPage: {}, rtree: rbush_1(), points: {}, leaders: [] },
-              sequences: {}
-          };
-      },
+          // QID value in correct format
+          _wikiURL = 'https://wikidata.org/wiki/' + value;
+          wikidata.entityByQID(value, function(err, entity) {
+              if (err) {
+                  unrecognized();
+                  return;
+              }
 
-      /**
-       * bubbles()
-       */
-      bubbles: function (projection) {
-          var limit = 5;
-          return searchLimited$2(limit, projection, _ssCache.bubbles.rtree);
-      },
+              var label = '';
+              var description = '';
 
+              if (entity.labels && Object.keys(entity.labels).length > 0) {
+                  label = entity.labels[Object.keys(entity.labels)[0]].value;
+              }
+              if (entity.descriptions && Object.keys(entity.descriptions).length > 0) {
+                  description = entity.descriptions[Object.keys(entity.descriptions)[0]].value;
+              }
 
-      sequences: function(projection) {
-          var viewport = projection.clipExtent();
-          var min = [viewport[0][0], viewport[1][1]];
-          var max = [viewport[1][0], viewport[0][1]];
-          var bbox = geoExtent$$1(projection.invert(min), projection.invert(max)).bbox();
-          var seen = {};
-          var results = [];
+              select('.preset-wikidata-label')
+                  .style('display', function(){
+                      return label.length > 0 ? 'flex' : 'none';
+                  })
+                  .select('input')
+                  .attr('value', label);
 
-          // all sequences for bubbles in viewport
-          _ssCache.bubbles.rtree.search(bbox)
-              .forEach(function(d) {
-                  var key = d.data.sequenceKey;
-                  if (key && !seen[key]) {
-                      seen[key] = true;
-                      results.push(_ssCache.sequences[key].geojson);
-                  }
-              });
+              select('.preset-wikidata-description')
+                  .style('display', function(){
+                      return description.length > 0 ? 'flex' : 'none';
+                  })
+                  .select('input')
+                  .attr('value', description);
+          });
 
-          return results;
-      },
 
+          // not a proper QID
+          function unrecognized() {
+              select('.preset-wikidata-label')
+                  .style('display', 'none');
+              select('.preset-wikidata-description')
+                  .style('display', 'none');
 
-      /**
-       * loadBubbles()
-       */
-      loadBubbles: function (projection, margin) {
-          // by default: request 2 nearby tiles so we can connect sequences.
-          if (margin === undefined) margin = 2;
+              if (value && value !== '') {
+                  _wikiURL = 'https://wikidata.org/wiki/Special:Search?search=' + value;
+              } else {
+                  _wikiURL = '';
+              }
+          }
+      };
 
-          loadTiles$2('bubbles', bubbleApi, projection, margin);
-      },
 
+      wiki.focus = function() {
+          title.node().focus();
+      };
 
-      viewer: function() {
-          return _pannellumViewer;
-      },
 
+      return utilRebind(wiki, dispatch$1, 'on');
+  }
 
-      initViewer: function () {
-          if (!window.pannellum) return;
-          if (_pannellumViewer) return;
+  function uiFieldWikipedia(field, context) {
+      var dispatch$1 = dispatch('change');
+      var wikipedia = services.wikipedia;
+      var wikidata = services.wikidata;
+      var lang = select(null);
+      var title = select(null);
+      var _wikiURL = '';
+      var _entity;
 
-          var sceneID = ++_currScene + '';
-          var options = {
-              'default': { firstScene: sceneID },
-              scenes: {}
-          };
-          options.scenes[sceneID] = _sceneOptions;
+      var langCombo = uiCombobox(context, 'wikipedia-lang')
+          .fetcher(function(value, cb) {
+              var v = value.toLowerCase();
 
-          _pannellumViewer = window.pannellum.viewer('viewer-streetside', options);
+              cb(wikipedia$2.filter(function(d) {
+                  return d[0].toLowerCase().indexOf(v) >= 0 ||
+                      d[1].toLowerCase().indexOf(v) >= 0 ||
+                      d[2].toLowerCase().indexOf(v) >= 0;
+              }).map(function(d) {
+                  return { value: d[1] };
+              }));
+          });
 
-          _pannellumViewer
-              .on('mousedown', function() {
-                  select(window).on('mousemove.pannellum', function() {
-                      dispatch$5.call('viewerChanged');
-                  });
-              })
-              .on('mouseup', function() {
-                  select(window).on('mousemove.pannellum', null);
-                  // continue dispatching events for a few seconds, in case viewer has inertia.
-                  var t$$1 = timer(function(elapsed) {
-                      dispatch$5.call('viewerChanged');
-                      if (elapsed > 2000) {
-                          t$$1.stop();
-                      }
-                  });
-              });
-      },
+      var titleCombo = uiCombobox(context, 'wikipedia-title')
+          .fetcher(function(value, cb) {
+              if (!value && _entity) {
+                  value = context.entity(_entity.id).tags.name || '';
+              }
 
+              var searchfn = value.length > 7 ? wikipedia.search : wikipedia.suggestions;
+              searchfn(language()[2], value, function(query, data) {
+                  cb(data.map(function(d) {
+                      return { value: d };
+                  }));
+              });
+          });
 
-      /**
-       * loadViewer() create the streeside viewer.
-       */
-      loadViewer: function (context) {
-          var that = this;
 
-          // create ms-wrapper, a photo wrapper class
-          var wrap = select('#photoviewer').selectAll('.ms-wrapper')
+      function wiki(selection) {
+          var wrap = selection.selectAll('.form-field-input-wrap')
               .data([0]);
 
-          // inject ms-wrapper into the photoviewer div
-          // (used by all to house each custom photo viewer)
-          var wrapEnter = wrap.enter()
+          wrap = wrap.enter()
               .append('div')
-              .attr('id', 'ms')
-              .attr('class', 'photo-wrapper ms-wrapper')
-              .classed('hide', true);
+              .attr('class', 'form-field-input-wrap form-field-input-' + field.type)
+              .merge(wrap);
 
-          // inject div to support streetside viewer (pannellum) and attribution line
-          wrapEnter
-              .append('div')
-              .attr('id', 'viewer-streetside')
-              .append('div')
-              .attr('class', 'photo-attribution fillD');
 
-          var controlsEnter = wrapEnter
-              .append('div')
-              .attr('class', 'photo-controls-wrap')
-              .append('div')
-              .attr('class', 'photo-controls');
+          var langRow = wrap.selectAll('.wiki-lang-container')
+              .data([0]);
 
-          controlsEnter
-              .append('button')
-              .on('click.back', step(-1))
-              .text('◄');
+          langRow = langRow.enter()
+              .append('div')
+              .attr('class', 'wiki-lang-container')
+              .merge(langRow);
 
-          controlsEnter
-              .append('button')
-              .on('click.forward', step(1))
-              .text('►');
 
+          lang = langRow.selectAll('input.wiki-lang')
+              .data([0]);
 
-          // create working canvas for stitching together images
-          wrap = wrap
-              .merge(wrapEnter)
-              .call(setupCanvas, true);
+          lang = lang.enter()
+              .append('input')
+              .attr('type', 'text')
+              .attr('class', 'wiki-lang')
+              .attr('placeholder', t('translate.localized_translation_language'))
+              .call(utilNoAuto)
+              .call(langCombo)
+              .merge(lang);
 
-          // load streetside pannellum viewer css
-          select('head').selectAll('#streetside-viewercss')
-              .data([0])
-              .enter()
-              .append('link')
-              .attr('id', 'streetside-viewercss')
-              .attr('rel', 'stylesheet')
-              .attr('href', context.asset(pannellumViewerCSS));
+          utilGetSetValue(lang, language()[1]);
 
-          // load streetside pannellum viewer js
-          select('head').selectAll('#streetside-viewerjs')
-              .data([0])
-              .enter()
-              .append('script')
-              .attr('id', 'streetside-viewerjs')
-              .attr('src', context.asset(pannellumViewerJS));
+          lang
+              .on('blur', changeLang)
+              .on('change', changeLang);
 
 
-          // Register viewer resize handler
-          context.ui().photoviewer.on('resize', function() {
-              if (_pannellumViewer) {
-                  _pannellumViewer.resize();
-              }
-          });
+          var titleRow = wrap.selectAll('.wiki-title-container')
+              .data([0]);
 
+          titleRow = titleRow.enter()
+              .append('div')
+              .attr('class', 'wiki-title-container')
+              .merge(titleRow);
 
-          function step(stepBy) {
-              return function() {
-                  var viewer = select('#photoviewer');
-                  var selected = viewer.empty() ? undefined : viewer.datum();
-                  if (!selected) return;
+          title = titleRow.selectAll('input.wiki-title')
+              .data([0]);
 
-                  var nextID = (stepBy === 1 ? selected.ne : selected.pr);
-                  var yaw = _pannellumViewer.getYaw();
-                  var ca = selected.ca + yaw;
-                  var origin = selected.loc;
+          title = title.enter()
+              .append('input')
+              .attr('type', 'text')
+              .attr('class', 'wiki-title')
+              .attr('id', 'preset-input-' + field.safeid)
+              .call(utilNoAuto)
+              .call(titleCombo)
+              .merge(title);
 
-                  // construct a search trapezoid pointing out from current bubble
-                  var meters = 35;
-                  var p1 = [
-                      origin[0] + geoMetersToLon(meters / 5, origin[1]),
-                      origin[1]
-                  ];
-                  var p2 = [
-                      origin[0] + geoMetersToLon(meters / 2, origin[1]),
-                      origin[1] + geoMetersToLat(meters)
-                  ];
-                  var p3 = [
-                      origin[0] - geoMetersToLon(meters / 2, origin[1]),
-                      origin[1] + geoMetersToLat(meters)
-                  ];
-                  var p4 = [
-                      origin[0] - geoMetersToLon(meters / 5, origin[1]),
-                      origin[1]
-                  ];
+          title
+              .on('blur', blur)
+              .on('change', change);
 
-                  var poly = [p1, p2, p3, p4, p1];
 
-                  // rotate it to face forward/backward
-                  var angle = (stepBy === 1 ? ca : ca + 180) * (Math.PI / 180);
-                  poly = geoRotate(poly, -angle, origin);
+          var link = titleRow.selectAll('.wiki-link')
+              .data([0]);
 
-                  var extent = poly.reduce(function(extent, point$$1) {
-                      return extent.extend(geoExtent$$1(point$$1));
-                  }, geoExtent$$1());
+          link = link.enter()
+              .append('button')
+              .attr('class', 'form-field-button wiki-link')
+              .attr('tabindex', -1)
+              .call(svgIcon('#iD-icon-out-link'))
+              .merge(link);
 
-                  // find nearest other bubble in the search polygon
-                  var minDist = Infinity;
-                  _ssCache.bubbles.rtree.search(extent.bbox())
-                      .forEach(function(d) {
-                          if (d.data.key === selected.key) return;
-                          if (!geoPointInPolygon(d.data.loc, poly)) return;
+          link
+              .on('click', function() {
+                  event.preventDefault();
+                  if (_wikiURL) window.open(_wikiURL, '_blank');
+              });
+      }
 
-                          var dist = geoVecLength(d.data.loc, selected.loc);
-                          var theta = selected.ca - d.data.ca;
-                          var minTheta = Math.min(Math.abs(theta), 360 - Math.abs(theta));
-                          if (minTheta > 20) {
-                              dist += 5;  // penalize distance if camera angles don't match
-                          }
 
-                          if (dist < minDist) {
-                              nextID = d.data.key;
-                              minDist = dist;
-                          }
-                      });
+      function language() {
+          var value = utilGetSetValue(lang).toLowerCase();
+          var locale = utilDetect().locale.toLowerCase();
+          var localeLanguage;
+          return find$1(wikipedia$2, function(d) {
+              if (d[2] === locale) localeLanguage = d;
+              return d[0].toLowerCase() === value ||
+                  d[1].toLowerCase() === value ||
+                  d[2] === value;
+          }) || localeLanguage || ['English', 'English', 'en'];
+      }
 
-                  var nextBubble = nextID && _ssCache.bubbles.points[nextID];
-                  if (!nextBubble) return;
 
-                  context.map().centerEase(nextBubble.loc);
+      function changeLang() {
+          utilGetSetValue(lang, language()[1]);
+          change(true);
+      }
 
-                  that.selectImage(nextBubble)
-                      .then(function(r) {
-                          if (r.status === 'ok') {
-                              _sceneOptions.yaw = yaw;
-                              that.showViewer();
-                          }
-                      });
-              };
-          }
-      },
 
-      /**
-       * showViewer()
-       */
-      showViewer: function (yaw) {
-          if (!_sceneOptions) return;
+      function blur() {
+          change(true);
+      }
 
-          if (yaw !== undefined) {
-              _sceneOptions.yaw = yaw;
-          }
 
-          if (!_pannellumViewer) {
-              this.initViewer();
-          } else {
-              // make a new scene
-              var sceneID = ++_currScene + '';
-              _pannellumViewer
-                  .addScene(sceneID, _sceneOptions)
-                  .loadScene(sceneID);
+      function change(skipWikidata) {
+          var value = utilGetSetValue(title);
+          var m = value.match(/https?:\/\/([-a-z]+)\.wikipedia\.org\/(?:wiki|\1-[-a-z]+)\/([^#]+)(?:#(.+))?/);
+          var l = m && find$1(wikipedia$2, function(d) { return m[1] === d[2]; });
+          var syncTags = {};
 
-              // remove previous scene
-              if (_currScene > 2) {
-                  sceneID = (_currScene - 1) + '';
-                  _pannellumViewer
-                      .removeScene(sceneID);
+          if (l) {
+              // Normalize title http://www.mediawiki.org/wiki/API:Query#Title_normalization
+              value = decodeURIComponent(m[2]).replace(/_/g, ' ');
+              if (m[3]) {
+                  var anchor;
+                  try {
+                      // Best-effort `anchordecode:` implementation
+                      anchor = decodeURIComponent(m[3].replace(/\.([0-9A-F]{2})/g, '%$1'));
+                  } catch (e) {
+                      anchor = decodeURIComponent(m[3]);
+                  }
+                  value += '#' + anchor.replace(/_/g, ' ');
               }
+              value = value.slice(0, 1).toUpperCase() + value.slice(1);
+              utilGetSetValue(lang, l[1]);
+              utilGetSetValue(title, value);
           }
 
-          var wrap = select('#photoviewer')
-              .classed('hide', false);
-
-          var isHidden = wrap.selectAll('.photo-wrapper.ms-wrapper.hide').size();
-
-          if (isHidden) {
-              wrap
-                  .selectAll('.photo-wrapper:not(.ms-wrapper)')
-                  .classed('hide', true);
-
-              wrap
-                  .selectAll('.photo-wrapper.ms-wrapper')
-                  .classed('hide', false);
+          if (value) {
+              syncTags.wikipedia = language()[2] + ':' + value;
+          } else {
+              syncTags.wikipedia = undefined;
+              syncTags.wikidata = undefined;
           }
 
-          return this;
-      },
-
-      /**
-       * hideViewer()
-       */
-      hideViewer: function () {
-          var viewer = select('#photoviewer');
-          if (!viewer.empty()) viewer.datum(null);
+          dispatch$1.call('change', this, syncTags);
 
-          viewer
-              .classed('hide', true)
-              .selectAll('.photo-wrapper')
-              .classed('hide', true);
 
-          d3_selectAll('.viewfield-group, .sequence, .icon-sign')
-              .classed('selected', false);
+          if (skipWikidata || !value || !language()[2]) return;
 
-          return this.setStyles(null, true);
-      },
+          // attempt asynchronous update of wikidata tag..
+          var initGraph = context.graph();
+          var initEntityID = _entity.id;
 
-      /**
-       * selectImage().
-       */
-      selectImage: function (d) {
-          var response = q.defer();
-          var that = this;
+          wikidata.itemsByTitle(language()[2], value, function(err, data) {
+              if (err) return;
 
-          var viewer = select('#photoviewer');
-          if (!viewer.empty()) viewer.datum(d);
+              // If graph has changed, we can't apply this update.
+              if (context.graph() !== initGraph) return;
 
-          this.setStyles(null, true);
+              if (!data || !Object.keys(data).length) return;
 
-          var wrap = select('#photoviewer .ms-wrapper');
-          var attribution = wrap.selectAll('.photo-attribution').html('');
+              var qids = Object.keys(data);
+              var value = qids && find$1(qids, function(id) { return id.match(/^Q\d+$/); });
+              var currTags = clone(context.entity(initEntityID).tags);
 
-          wrap.selectAll('.pnlm-load-box')   // display "loading.."
-              .style('display', 'block');
+              currTags.wikidata = value;
 
-          if (!d) {
-              response.resolve({status: 'ok'});
-              return response.promise;
-          }
+              // Coalesce the update of wikidata tag into the previous tag change
+              context.overwrite(
+                  actionChangeTags(initEntityID, currTags),
+                  context.history().undoAnnotation()
+              );
 
-          var line1 = attribution
-              .append('div')
-              .attr('class', 'attribution-row');
+              // do not dispatch.call('change') here, because entity_editor
+              // changeTags() is not intended to be called asynchronously
+          });
+      }
 
-          // Add hires checkbox
-          var label = line1
-              .append('label')
-              .attr('class', 'streetside-hires');
 
-          label
-              .append('input')
-              .attr('type', 'checkbox')
-              .attr('id', 'streetside-hires-input')
-              .property('checked', _hires)
-              .on('click', function() {
-                  event.stopPropagation();
+      wiki.tags = function(tags) {
+          var value = tags[field.key] || '';
+          var m = value.match(/([^:]+):([^#]+)(?:#(.+))?/);
+          var l = m && find$1(wikipedia$2, function(d) { return m[1] === d[2]; });
+          var anchor = m && m[3];
 
-                  _hires = !_hires;
-                  _resolution = _hires ? 1024 : 512;
-                  wrap.call(setupCanvas, true);
+          // value in correct format
+          if (l) {
+              utilGetSetValue(lang, l[1]);
+              utilGetSetValue(title, m[2] + (anchor ? ('#' + anchor) : ''));
+              if (anchor) {
+                  try {
+                      // Best-effort `anchorencode:` implementation
+                      anchor = encodeURIComponent(anchor.replace(/ /g, '_')).replace(/%/g, '.');
+                  } catch (e) {
+                      anchor = anchor.replace(/ /g, '_');
+                  }
+              }
+              _wikiURL = 'https://' + m[1] + '.wikipedia.org/wiki/' +
+                  m[2].replace(/ /g, '_') + (anchor ? ('#' + anchor) : '');
 
-                  var viewstate = {
-                      yaw: _pannellumViewer.getYaw(),
-                      pitch: _pannellumViewer.getPitch(),
-                      hfov: _pannellumViewer.getHfov()
-                  };
+          // unrecognized value format
+          } else {
+              utilGetSetValue(title, value);
+              if (value && value !== '') {
+                  utilGetSetValue(lang, '');
+                  _wikiURL = 'https://en.wikipedia.org/wiki/Special:Search?search=' + value;
+              } else {
+                  _wikiURL = '';
+              }
+          }
+      };
 
-                  that.selectImage(d)
-                      .then(function(r) {
-                          if (r.status === 'ok') {
-                              _sceneOptions = assignIn(_sceneOptions, viewstate);
-                              that.showViewer();
-                          }
-                      });
-              });
 
-          label
-              .append('span')
-              .text(t('streetside.hires'));
+      wiki.entity = function(val) {
+          if (!arguments.length) return _entity;
+          _entity = val;
+          return wiki;
+      };
 
 
-          var captureInfo = line1
-              .append('div')
-              .attr('class', 'attribution-capture-info');
+      wiki.focus = function() {
+          title.node().focus();
+      };
 
-          // Add capture date
-          if (d.captured_by) {
-              var yyyy = (new Date()).getFullYear();
 
-              captureInfo
-                  .append('a')
-                  .attr('class', 'captured_by')
-                  .attr('target', '_blank')
-                  .attr('href', 'https://www.microsoft.com/en-us/maps/streetside')
-                  .text('©' + yyyy + ' Microsoft');
+      return utilRebind(wiki, dispatch$1, 'on');
+  }
 
-              captureInfo
-                  .append('span')
-                  .text('|');
-          }
+  var uiFields = {
+      access: uiFieldAccess,
+      address: uiFieldAddress,
+      check: uiFieldCheck,
+      combo: uiFieldCombo,
+      cycleway: uiFieldCycleway,
+      defaultCheck: uiFieldCheck,
+      email: uiFieldText,
+      lanes: uiFieldLanes,
+      localized: uiFieldLocalized,
+      maxspeed: uiFieldMaxspeed,
+      multiCombo: uiFieldCombo,
+      networkCombo: uiFieldCombo,
+      number: uiFieldText,
+      onewayCheck: uiFieldCheck,
+      radio: uiFieldRadio,
+      restrictions: uiFieldRestrictions,
+      semiCombo: uiFieldCombo,
+      structureRadio: uiFieldRadio,
+      tel: uiFieldText,
+      text: uiFieldText,
+      textarea: uiFieldTextarea,
+      typeCombo: uiFieldCombo,
+      url: uiFieldText,
+      wikidata: uiFieldWikidata,
+      wikipedia: uiFieldWikipedia
+  };
 
-          if (d.captured_at) {
-              captureInfo
-                  .append('span')
-                  .attr('class', 'captured_at')
-                  .text(localeTimestamp(d.captured_at));
-          }
+  function uiField(context, presetField, entity, options) {
+      options = assignIn({
+          show: true,
+          wrap: true,
+          remove: true,
+          revert: true,
+          info: true
+      }, options);
 
-          // Add image links
-          var line2 = attribution
-              .append('div')
-              .attr('class', 'attribution-row');
+      var dispatch$1 = dispatch('change');
+      var field = clone(presetField);
+      var _show = options.show;
+      var _state = '';
+      var _tags = {};
 
-          line2
-              .append('a')
-              .attr('class', 'image-view-link')
-              .attr('target', '_blank')
-              .attr('href', 'https://www.bing.com/maps?cp=' + d.loc[1] + '~' + d.loc[0] +
-                  '&lvl=17&dir=' + d.ca + '&style=x&v=2&sV=1')
-              .text(t('streetside.view_on_bing'));
+      field.keys = field.keys || [field.key];
 
-          line2
-              .append('a')
-              .attr('class', 'image-report-link')
-              .attr('target', '_blank')
-              .attr('href', 'https://www.bing.com/maps/privacyreport/streetsideprivacyreport?bubbleid=' + encodeURIComponent(d.key) +
-                  '&focus=photo&lat=' + d.loc[1] + '&lng=' + d.loc[0] + '&z=17')
-              .text(t('streetside.report'));
+      // only create the fields that are actually being shown
+      if (_show && !field.impl) {
+          createField();
+      }
 
+      // Creates the field.. This is done lazily,
+      // once we know that the field will be shown.
+      function createField() {
+          field.impl = uiFields[field.type](field, context)
+              .on('change', function(t, onInput) {
+                  dispatch$1.call('change', field, t, onInput);
+              });
 
-          var bubbleIdQuadKey = d.key.toString(4);
-          var paddingNeeded = 16 - bubbleIdQuadKey.length;
-          for (var i = 0; i < paddingNeeded; i++) {
-              bubbleIdQuadKey = '0' + bubbleIdQuadKey;
+          if (entity) {
+              field.entityID = entity.id;
+              // if this field cares about the entity, pass it along
+              if (field.impl.entity) {
+                  field.impl.entity(entity);
+              }
           }
-          var imgUrlPrefix = streetsideImagesApi + 'hs' + bubbleIdQuadKey;
-          var imgUrlSuffix = '.jpg?g=6338&n=z';
+      }
 
-          // Cubemap face code order matters here: front=01, right=02, back=03, left=10, up=11, down=12
-          var faceKeys = ['01','02','03','10','11','12'];
 
-          // Map images to cube faces
-          var quadKeys = getQuadKeys();
-          var faces = faceKeys.map(function(faceKey) {
-              return quadKeys.map(function(quadKey) {
-                  var xy = qkToXY(quadKey);
-                  return {
-                      face: faceKey,
-                      url: imgUrlPrefix + faceKey + quadKey + imgUrlSuffix,
-                      x: xy[0],
-                      y: xy[1]
-                  };
-              });
+      function isModified() {
+          if (!entity) return false;
+          var original = context.graph().base().entities[entity.id];
+          return some(field.keys, function(key) {
+              return original ? _tags[key] !== original.tags[key] : _tags[key];
           });
+      }
 
-          processFaces(faces).then(function() {
-              _sceneOptions = {
-                  showFullscreenCtrl: false,
-                  autoLoad: true,
-                  compass: true,
-                  northOffset: d.ca,
-                  yaw: 0,
-                  minHfov: minHfov,
-                  maxHfov: maxHfov,
-                  hfov: defaultHfov,
-                  type: 'cubemap',
-                  cubeMap: [
-                      _dataUrlArray[0],
-                      _dataUrlArray[1],
-                      _dataUrlArray[2],
-                      _dataUrlArray[3],
-                      _dataUrlArray[4],
-                      _dataUrlArray[5]
-                  ]
-              };
-              response.resolve({status: 'ok'});
+
+      function isPresent() {
+          return some(field.keys, function(key) {
+              if (field.type === 'multiCombo') {
+                  for (var tagKey in _tags) {
+                      if (tagKey.indexOf(key) === 0) {
+                          return true;
+                      }
+                  }
+                  return false;
+              }
+              return _tags[key] !== undefined;
           });
+      }
 
-          return response.promise;
-      },
 
+      function revert(d) {
+          event.stopPropagation();
+          event.preventDefault();
+          if (!entity) return false;
 
-      getSequenceKeyForBubble: function(d) {
-          return d && d.sequenceKey;
-      },
+          var original = context.graph().base().entities[entity.id];
+          var t = {};
+          d.keys.forEach(function(key) {
+              t[key] = original ? original.tags[key] : undefined;
+          });
 
+          dispatch$1.call('change', d, t);
+      }
 
-      /**
-       * setStyles().
-       */
-      setStyles: function (hovered, reset) {
-          if (reset) {  // reset all layers
-              d3_selectAll('.viewfield-group')
-                  .classed('highlighted', false)
-                  .classed('hovered', false)
-                  .classed('selected', false);
 
-              d3_selectAll('.sequence')
-                  .classed('highlighted', false)
-                  .classed('selected', false);
-          }
+      function remove(d) {
+          event.stopPropagation();
+          event.preventDefault();
 
-          var hoveredBubbleKey = hovered && hovered.key;
-          var hoveredSequenceKey = this.getSequenceKeyForBubble(hovered);
-          var hoveredSequence = hoveredSequenceKey && _ssCache.sequences[hoveredSequenceKey];
-          var hoveredBubbleKeys =  (hoveredSequence && hoveredSequence.bubbles.map(function (d) { return d.key; })) || [];
+          var t = {};
+          d.keys.forEach(function(key) {
+              t[key] = undefined;
+          });
 
-          var viewer = select('#photoviewer');
-          var selected = viewer.empty() ? undefined : viewer.datum();
-          var selectedBubbleKey = selected && selected.key;
-          var selectedSequenceKey = this.getSequenceKeyForBubble(selected);
-          var selectedSequence = selectedSequenceKey && _ssCache.sequences[selectedSequenceKey];
-          var selectedBubbleKeys = (selectedSequence && selectedSequence.bubbles.map(function (d) { return d.key; })) || [];
+          dispatch$1.call('change', d, t);
+      }
 
-          // highlight sibling viewfields on either the selected or the hovered sequences
-          var highlightedBubbleKeys = union(hoveredBubbleKeys, selectedBubbleKeys);
 
-          d3_selectAll('.layer-streetside-images .viewfield-group')
-              .classed('highlighted', function (d) { return highlightedBubbleKeys.indexOf(d.key) !== -1; })
-              .classed('hovered', function (d) { return d.key === hoveredBubbleKey; })
-              .classed('selected', function (d) { return d.key === selectedBubbleKey; });
+      field.render = function(selection) {
+          var container = selection.selectAll('.form-field')
+              .data([field]);
 
-          d3_selectAll('.layer-streetside-images .sequence')
-              .classed('highlighted', function (d) { return d.properties.key === hoveredSequenceKey; })
-              .classed('selected', function (d) { return d.properties.key === selectedSequenceKey; });
+          // Enter
+          var enter = container.enter()
+              .append('div')
+              .attr('class', function(d) { return 'form-field form-field-' + d.safeid; })
+              .classed('nowrap', !options.wrap);
 
-          // update viewfields if needed
-          d3_selectAll('.viewfield-group .viewfield')
-              .attr('d', viewfieldPath);
+          if (options.wrap) {
+              var label = enter
+                  .append('label')
+                  .attr('class', 'form-field-label')
+                  .attr('for', function(d) { return 'preset-input-' + d.safeid; });
 
-          function viewfieldPath() {
-              var d = this.parentNode.__data__;
-              if (d.pano && d.key !== selectedBubbleKey) {
-                  return 'M 8,13 m -10,0 a 10,10 0 1,0 20,0 a 10,10 0 1,0 -20,0';
-              } else {
-                  return 'M 6,9 C 8,8.4 8,8.4 10,9 L 16,-2 C 12,-5 4,-5 0,-2 z';
+              label
+                  .append('span')
+                  .attr('class', 'label-text')
+                  .text(function(d) { return d.label(); });
+
+              if (options.remove) {
+                  label
+                      .append('button')
+                      .attr('class', 'remove-icon')
+                      .attr('title', t('icons.remove'))
+                      .attr('tabindex', -1)
+                      .call(svgIcon('#iD-operation-delete'));
               }
-          }
 
-          return this;
-      },
+              if (options.revert) {
+                  label
+                      .append('button')
+                      .attr('class', 'modified-icon')
+                      .attr('title', t('icons.undo'))
+                      .attr('tabindex', -1)
+                      .call(svgIcon((textDirection === 'rtl') ? '#iD-icon-redo' : '#iD-icon-undo'));
+              }
+          }
 
-      /**
-       * cache().
-       */
-      cache: function () {
-          return _ssCache;
-      }
-  };
 
-  var apibase$4 = 'https://taginfo.openstreetmap.org/api/4/';
-  var _inflight$1 = {};
-  var _popularKeys = {};
-  var _taginfoCache = {};
+          // Update
+          container = container
+              .merge(enter);
 
-  var tag_sorts = {
-      point: 'count_nodes',
-      vertex: 'count_nodes',
-      area: 'count_ways',
-      line: 'count_ways'
-  };
-  var tag_sort_members = {
-      point: 'count_node_members',
-      vertex: 'count_node_members',
-      area: 'count_way_members',
-      line: 'count_way_members',
-      relation: 'count_relation_members'
-  };
-  var tag_filters = {
-      point: 'nodes',
-      vertex: 'nodes',
-      area: 'ways',
-      line: 'ways'
-  };
-  var tag_members_fractions = {
-      point: 'count_node_members_fraction',
-      vertex: 'count_node_members_fraction',
-      area: 'count_way_members_fraction',
-      line: 'count_way_members_fraction',
-      relation: 'count_relation_members_fraction'
-  };
+          container.select('.form-field-label > .remove-icon')  // propagate bound data
+              .on('click', remove);
 
+          container.select('.form-field-label > .modified-icon')  // propagate bound data
+              .on('click', revert);
 
-  function sets(params, n, o) {
-      if (params.geometry && o[params.geometry]) {
-          params[n] = o[params.geometry];
-      }
-      return params;
-  }
+          container
+              .classed('modified', isModified())
+              .classed('present', isPresent())
+              .each(function(d) {
+                  if (!d.impl) {
+                      createField();
+                  }
 
+                  var reference, help;
 
-  function setFilter(params) {
-      return sets(params, 'filter', tag_filters);
-  }
+                  // instantiate field help
+                  if (options.wrap && field.type === 'restrictions') {
+                      help = uiFieldHelp(context, 'restrictions');
+                  }
 
+                  // instantiate tag reference
+                  if (options.wrap && options.info) {
+                      var referenceKey = d.key;
+                      if (d.type === 'multiCombo') {   // lookup key without the trailing ':'
+                          referenceKey = referenceKey.replace(/:$/, '');
+                      }
 
-  function setSort(params) {
-      return sets(params, 'sortname', tag_sorts);
-  }
+                      reference = uiTagReference(d.reference || { key: referenceKey }, context);
+                      if (_state === 'hover') {
+                          reference.showing(false);
+                      }
+                  }
 
+                  select(this)
+                      .call(d.impl);
 
-  function setSortMembers(params) {
-      return sets(params, 'sortname', tag_sort_members);
-  }
+                  // add field help components
+                  if (help) {
+                      select(this)
+                          .call(help.body)
+                          .select('.form-field-label')
+                          .call(help.button);
+                  }
 
+                  // add tag reference components
+                  if (reference) {
+                      select(this)
+                          .call(reference.body)
+                          .select('.form-field-label')
+                          .call(reference.button);
+                  }
 
-  function clean(params) {
-      return omit(params, ['geometry', 'debounce']);
-  }
+                  d.impl.tags(_tags);
+              });
+      };
 
 
-  function filterKeys(type) {
-      var count_type = type ? 'count_' + type : 'count_all';
-      return function(d) {
-          return parseFloat(d[count_type]) > 2500 || d.in_wiki;
+      field.state = function(val) {
+          if (!arguments.length) return _state;
+          _state = val;
+          return field;
       };
-  }
 
 
-  function filterMultikeys(prefix) {
-      return function(d) {
-          // d.key begins with prefix, and d.key contains no additional ':'s
-          var re = new RegExp('^' + prefix + '(.*)$');
-          var matches = d.key.match(re) || [];
-          return (matches.length === 2 && matches[1].indexOf(':') === -1);
+      field.tags = function(val) {
+          if (!arguments.length) return _tags;
+          _tags = val;
+          return field;
       };
-  }
 
 
-  function filterValues(allowUpperCase) {
-      return function(d) {
-          if (d.value.match(/[;,]/) !== null) return false;  // exclude some punctuation
-          if (!allowUpperCase && d.value.match(/[A-Z*]/) !== null) return false;  // exclude uppercase letters
-          return parseFloat(d.fraction) > 0.0;
+      field.show = function() {
+          _show = true;
+          if (!field.impl) {
+              createField();
+          }
+          if (field.default && field.key && _tags[field.key] !== field.default) {
+              var t = {};
+              t[field.key] = field.default;
+              dispatch$1.call('change', this, t);
+          }
       };
-  }
 
 
-  function filterRoles(geometry) {
-      return function(d) {
-          if (d.role === '') return false; // exclude empty role
-          if (d.role.match(/[A-Z*;,]/) !== null) return false;  // exclude uppercase letters and some punctuation
-          return parseFloat(d[tag_members_fractions[geometry]]) > 0.0;
+      // A shown field has a visible UI, a non-shown field is in the 'Add field' dropdown
+      field.isShown = function() {
+          return _show || isPresent();
       };
-  }
 
 
-  function valKey(d) {
-      return {
-          value: d.key,
-          title: d.key
-      };
-  }
+      // An allowed field can appear in the UI or in the 'Add field' dropdown.
+      // A non-allowed field is hidden from the user altogether
+      field.isAllowed = function() {
+          if (!entity || isPresent()) return true;   // a field with a value should always display
+
+          var latest = context.hasEntity(entity.id);   // check the most current copy of the entity
+          if (!latest) return true;
 
+          var require = field.prerequisiteTag;
+          if (require && require.key) {
+              var value = latest.tags[require.key];
+              if (!value) return false;
 
-  function valKeyDescription(d) {
-      return {
-          value: d.value,
-          title: d.description || d.value
+              if (require.valueNot) {
+                  return require.valueNot !== value;
+              }
+              if (require.value) {
+                  return require.value === value;
+              }
+              return true;
+          }
+          return true;
       };
-  }
 
 
-  function roleKey(d) {
-      return {
-          value: d.role,
-          title: d.role
+      field.focus = function() {
+          if (field.impl) {
+              field.impl.focus();
+          }
       };
-  }
 
 
-  // sort keys with ':' lower than keys without ':'
-  function sortKeys(a, b) {
-      return (a.key.indexOf(':') === -1 && b.key.indexOf(':') !== -1) ? -1
-          : (a.key.indexOf(':') !== -1 && b.key.indexOf(':') === -1) ? 1
-          : 0;
+      return utilRebind(field, dispatch$1, 'on');
   }
 
+  function uiFormFields(context) {
+      var moreCombo = uiCombobox(context, 'more-fields').minItems(1);
+      var _fieldsArr = [];
+      var _state = '';
+      var _klass = '';
 
-  var debouncedRequest$1 = debounce(request$2, 300, { leading: false });
 
-  function request$2(url, params, exactMatch, callback, loaded) {
-      if (_inflight$1[url]) return;
+      function formFields(selection) {
+          var allowedFields = _fieldsArr.filter(function(field) { return field.isAllowed(); });
+          var shown = allowedFields.filter(function(field) { return field.isShown(); });
+          var notShown = allowedFields.filter(function(field) { return !field.isShown(); });
 
-      if (checkCache(url, params, exactMatch, callback)) return;
+          var container = selection.selectAll('.form-fields-container')
+              .data([0]);
 
-      _inflight$1[url] = d3_json(url, function (err, data) {
-          delete _inflight$1[url];
-          loaded(err, data);
-      });
-  }
+          container = container.enter()
+              .append('div')
+              .attr('class', 'form-fields-container ' + (_klass || ''))
+              .merge(container);
 
 
-  function checkCache(url, params, exactMatch, callback) {
-      var rp = params.rp || 25;
-      var testQuery = params.query || '';
-      var testUrl = url;
+          var fields = container.selectAll('.wrap-form-field')
+              .data(shown, function(d) { return d.id + (d.entityID || ''); });
 
-      do {
-          var hit = _taginfoCache[testUrl];
+          fields.exit()
+              .remove();
 
-          // exact match, or shorter match yielding fewer than max results (rp)
-          if (hit && (url === testUrl || hit.length < rp)) {
-              callback(null, hit);
-              return true;
-          }
+          // Enter
+          var enter = fields.enter()
+              .append('div')
+              .attr('class', function(d) { return 'wrap-form-field wrap-form-field-' + d.safeid; });
 
-          // don't try to shorten the query
-          if (exactMatch || !testQuery.length) return false;
+          // Update
+          fields = fields
+              .merge(enter);
 
-          // do shorten the query to see if we already have a cached result
-          // that has returned fewer than max results (rp)
-          testQuery = testQuery.slice(0, -1);
-          testUrl = url.replace(/&query=(.*?)&/, '&query=' + testQuery + '&');
-      } while (testQuery.length >= 0);
+          fields
+              .order()
+              .each(function(d) {
+                  select(this)
+                      .call(d.render);
+              });
 
-      return false;
-  }
+
+          notShown = notShown.map(function(field) {
+              return {
+                  title: field.label(),
+                  value: field.label(),
+                  field: field
+              };
+          });
 
 
-  var serviceTaginfo = {
+          var more = selection.selectAll('.more-fields')
+              .data((_state === 'hover' || notShown.length === 0) ? [] : [0]);
 
-      init: function() {
-          _inflight$1 = {};
-          _taginfoCache = {};
-          _popularKeys = {
-              postal_code: true   // #5377
-          };
+          more.exit()
+              .remove();
 
-          // Fetch popular keys.  We'll exclude these from `values`
-          // lookups because they stress taginfo, and they aren't likely
-          // to yield meaningful autocomplete results.. see #3955
-          var params = {
-              rp: 100,
-              sortname: 'values_all',
-              sortorder: 'desc',
-              page: 1,
-              debounce: false,
-              lang: currentLocale
-          };
-          this.keys(params, function(err, data) {
-              if (err) return;
-              data.forEach(function(d) {
-                  if (d.value === 'opening_hours') return;  // exception
-                  _popularKeys[d.value] = true;
-              });
-          });
-      },
+          more = more.enter()
+              .append('div')
+              .attr('class', 'more-fields')
+              .append('label')
+              .text(t('inspector.add_fields'))
+              .merge(more);
 
 
-      reset: function() {
-          forEach(_inflight$1, function(req) { req.abort(); });
-          _inflight$1 = {};
-      },
+          var input = more.selectAll('.value')
+              .data([0]);
 
+          input.exit()
+              .remove();
 
-      keys: function(params, callback) {
-          var doRequest = params.debounce ? debouncedRequest$1 : request$2;
-          params = clean(setSort(params));
-          params = assignIn({
-              rp: 10,
-              sortname: 'count_all',
-              sortorder: 'desc',
-              page: 1,
-              lang: currentLocale
-          }, params);
+          input = input.enter()
+              .append('input')
+              .attr('class', 'value')
+              .attr('type', 'text')
+              .call(utilNoAuto)
+              .merge(input);
+
+          input
+              .call(utilGetSetValue, '')
+              .attr('placeholder', function() {
+                  var placeholder = [];
+                  for (var field in notShown) {
+                      placeholder.push(notShown[field].title);
+                  }
+                  return placeholder.slice(0,3).join(', ') + ((placeholder.length > 3) ? '…' : '');
+              })
+              .call(moreCombo
+                  .data(notShown)
+                  .on('accept', function (d) {
+                      if (!d) return;  // user entered something that was not matched
+                      var field = d.field;
+                      field.show();
+                      selection.call(formFields);  // rerender
+                      if (field.type !== 'semiCombo' && field.type !== 'multiCombo') {
+                          field.focus();
+                      }
+                  })
+              );
+      }
 
-          var url = apibase$4 + 'keys/all?' + utilQsString(params);
-          doRequest(url, params, false, callback, function(err, d) {
-              if (err) {
-                  callback(err);
-              } else {
-                  var f = filterKeys(params.filter);
-                  var result = d.data.filter(f).sort(sortKeys).map(valKey);
-                  _taginfoCache[url] = result;
-                  callback(null, result);
-              }
-          });
-      },
 
+      formFields.fieldsArr = function(val) {
+          if (!arguments.length) return _fieldsArr;
+          _fieldsArr = val || [];
+          return formFields;
+      };
 
-      multikeys: function(params, callback) {
-          var doRequest = params.debounce ? debouncedRequest$1 : request$2;
-          params = clean(setSort(params));
-          params = assignIn({
-              rp: 25,
-              sortname: 'count_all',
-              sortorder: 'desc',
-              page: 1,
-              lang: currentLocale
-          }, params);
+      formFields.state = function(val) {
+          if (!arguments.length) return _state;
+          _state = val;
+          return formFields;
+      };
 
-          var prefix = params.query;
-          var url = apibase$4 + 'keys/all?' + utilQsString(params);
-          doRequest(url, params, true, callback, function(err, d) {
-              if (err) {
-                  callback(err);
-              } else {
-                  var f = filterMultikeys(prefix);
-                  var result = d.data.filter(f).map(valKey);
-                  _taginfoCache[url] = result;
-                  callback(null, result);
-              }
-          });
-      },
+      formFields.klass = function(val) {
+          if (!arguments.length) return _klass;
+          _klass = val;
+          return formFields;
+      };
 
 
-      values: function(params, callback) {
-          // Exclude popular keys from values lookups.. see #3955
-          var key = params.key;
-          if (key && _popularKeys[key]) {
-              callback(null, []);
-              return;
-          }
+      return formFields;
+  }
 
-          var doRequest = params.debounce ? debouncedRequest$1 : request$2;
-          params = clean(setSort(setFilter(params)));
-          params = assignIn({
-              rp: 25,
-              sortname: 'count_all',
-              sortorder: 'desc',
-              page: 1,
-              lang: currentLocale
-          }, params);
+  function uiPresetEditor(context) {
+      var dispatch$1 = dispatch('change');
+      var formFields = uiFormFields(context);
+      var _state;
+      var _fieldsArr;
+      var _preset;
+      var _tags;
+      var _entityID;
 
-          var url = apibase$4 + 'key/values?' + utilQsString(params);
-          doRequest(url, params, false, callback, function(err, d) {
-              if (err) {
-                  callback(err);
-              } else {
-                  // In most cases we prefer taginfo value results with lowercase letters.
-                  // A few OSM keys expect values to contain uppercase values (see #3377).
-                  // This is not an exhaustive list (e.g. `name` also has uppercase values)
-                  // but these are the fields where taginfo value lookup is most useful.
-                  var re = /network|taxon|genus|species|brand|grape_variety|royal_cypher|listed_status|booth|rating|stars|:output|_hours|_times/;
-                  var allowUpperCase = (params.key.match(re) !== null);
-                  var f = filterValues(allowUpperCase);
 
-                  var result = d.data.filter(f).map(valKeyDescription);
-                  _taginfoCache[url] = result;
-                  callback(null, result);
-              }
-          });
-      },
+      function presetEditor(selection) {
+          selection.call(uiDisclosure(context, 'preset_fields', true)
+              .title(t('inspector.all_fields'))
+              .content(render)
+          );
+      }
 
 
-      roles: function(params, callback) {
-          var doRequest = params.debounce ? debouncedRequest$1 : request$2;
-          var geometry = params.geometry;
-          params = clean(setSortMembers(params));
-          params = assignIn({
-              rp: 25,
-              sortname: 'count_all_members',
-              sortorder: 'desc',
-              page: 1,
-              lang: currentLocale
-          }, params);
+      function render(selection) {
+          if (!_fieldsArr) {
+              var entity = context.entity(_entityID);
+              var geometry = context.geometry(_entityID);
+              var presets = context.presets();
 
-          var url = apibase$4 + 'relation/roles?' + utilQsString(params);
-          doRequest(url, params, true, callback, function(err, d) {
-              if (err) {
-                  callback(err);
-              } else {
-                  var f = filterRoles(geometry);
-                  var result = d.data.filter(f).map(roleKey);
-                  _taginfoCache[url] = result;
-                  callback(null, result);
+              _fieldsArr = [];
+
+              _preset.fields.forEach(function(field) {
+                  if (field.matchGeometry(geometry)) {
+                      _fieldsArr.push(
+                          uiField(context, field, entity)
+                      );
+                  }
+              });
+
+              if (entity.isHighwayIntersection(context.graph()) && presets.field('restrictions')) {
+                  _fieldsArr.push(
+                      uiField(context, presets.field('restrictions'), entity)
+                  );
               }
-          });
-      },
 
+              var additionalFields = union(_preset.moreFields, presets.universal());
+              additionalFields.sort(function(field1, field2) {
+                  return field1.label() > field2.label();
+              });
 
-      docs: function(params, callback) {
-          var doRequest = params.debounce ? debouncedRequest$1 : request$2;
-          params = clean(setSort(params));
+              additionalFields.forEach(function(field) {
+                  if (_preset.fields.indexOf(field) === -1) {
+                      _fieldsArr.push(
+                          uiField(context, field, entity, { show: false })
+                      );
+                  }
+              });
 
-          var path = 'key/wiki_pages?';
-          if (params.value) {
-              path = 'tag/wiki_pages?';
-          } else if (params.rtype) {
-              path = 'relation/wiki_pages?';
+              _fieldsArr.forEach(function(field) {
+                  field
+                      .on('change', function(t, onInput) {
+                          dispatch$1.call('change', field, t, onInput);
+                      });
+              });
           }
 
-          var url = apibase$4 + path + utilQsString(params);
-          doRequest(url, params, true, callback, function(err, d) {
-              if (err) {
-                  callback(err);
-              } else {
-                  _taginfoCache[url] = d.data;
-                  callback(null, d.data);
-              }
+          _fieldsArr.forEach(function(field) {
+              field
+                  .state(_state)
+                  .tags(_tags);
           });
-      },
 
 
-      apibase: function(_) {
-          if (!arguments.length) return apibase$4;
-          apibase$4 = _;
-          return this;
-      }
+          selection
+              .call(formFields
+                  .fieldsArr(_fieldsArr)
+                  .state(_state)
+                  .klass('inspector-inner fillL3')
+              );
 
-  };
 
-  var helpers = createCommonjsModule(function (module, exports) {
-  Object.defineProperty(exports, "__esModule", { value: true });
-  /**
-   * @module helpers
-   */
-  /**
-   * Earth Radius used with the Harvesine formula and approximates using a spherical (non-ellipsoid) Earth.
-   *
-   * @memberof helpers
-   * @type {number}
-   */
-  exports.earthRadius = 6371008.8;
-  /**
-   * Unit of measurement factors using a spherical (non-ellipsoid) earth radius.
-   *
-   * @memberof helpers
-   * @type {Object}
-   */
-  exports.factors = {
-      centimeters: exports.earthRadius * 100,
-      centimetres: exports.earthRadius * 100,
-      degrees: exports.earthRadius / 111325,
-      feet: exports.earthRadius * 3.28084,
-      inches: exports.earthRadius * 39.370,
-      kilometers: exports.earthRadius / 1000,
-      kilometres: exports.earthRadius / 1000,
-      meters: exports.earthRadius,
-      metres: exports.earthRadius,
-      miles: exports.earthRadius / 1609.344,
-      millimeters: exports.earthRadius * 1000,
-      millimetres: exports.earthRadius * 1000,
-      nauticalmiles: exports.earthRadius / 1852,
-      radians: 1,
-      yards: exports.earthRadius / 1.0936,
-  };
-  /**
-   * Units of measurement factors based on 1 meter.
-   *
-   * @memberof helpers
-   * @type {Object}
-   */
-  exports.unitsFactors = {
-      centimeters: 100,
-      centimetres: 100,
-      degrees: 1 / 111325,
-      feet: 3.28084,
-      inches: 39.370,
-      kilometers: 1 / 1000,
-      kilometres: 1 / 1000,
-      meters: 1,
-      metres: 1,
-      miles: 1 / 1609.344,
-      millimeters: 1000,
-      millimetres: 1000,
-      nauticalmiles: 1 / 1852,
-      radians: 1 / exports.earthRadius,
-      yards: 1 / 1.0936,
-  };
-  /**
-   * Area of measurement factors based on 1 square meter.
-   *
-   * @memberof helpers
-   * @type {Object}
-   */
-  exports.areaFactors = {
-      acres: 0.000247105,
-      centimeters: 10000,
-      centimetres: 10000,
-      feet: 10.763910417,
-      inches: 1550.003100006,
-      kilometers: 0.000001,
-      kilometres: 0.000001,
-      meters: 1,
-      metres: 1,
-      miles: 3.86e-7,
-      millimeters: 1000000,
-      millimetres: 1000000,
-      yards: 1.195990046,
-  };
-  /**
-   * Wraps a GeoJSON {@link Geometry} in a GeoJSON {@link Feature}.
-   *
-   * @name feature
-   * @param {Geometry} geometry input geometry
-   * @param {Object} [properties={}] an Object of key-value pairs to add as properties
-   * @param {Object} [options={}] Optional Parameters
-   * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature
-   * @param {string|number} [options.id] Identifier associated with the Feature
-   * @returns {Feature} a GeoJSON Feature
-   * @example
-   * var geometry = {
-   *   "type": "Point",
-   *   "coordinates": [110, 50]
-   * };
-   *
-   * var feature = turf.feature(geometry);
-   *
-   * //=feature
-   */
-  function feature(geom, properties, options) {
-      if (options === void 0) { options = {}; }
-      var feat = { type: "Feature" };
-      if (options.id === 0 || options.id) {
-          feat.id = options.id;
-      }
-      if (options.bbox) {
-          feat.bbox = options.bbox;
-      }
-      feat.properties = properties || {};
-      feat.geometry = geom;
-      return feat;
-  }
-  exports.feature = feature;
-  /**
-   * Creates a GeoJSON {@link Geometry} from a Geometry string type & coordinates.
-   * For GeometryCollection type use `helpers.geometryCollection`
-   *
-   * @name geometry
-   * @param {string} type Geometry Type
-   * @param {Array<any>} coordinates Coordinates
-   * @param {Object} [options={}] Optional Parameters
-   * @returns {Geometry} a GeoJSON Geometry
-   * @example
-   * var type = "Point";
-   * var coordinates = [110, 50];
-   * var geometry = turf.geometry(type, coordinates);
-   * // => geometry
-   */
-  function geometry(type, coordinates, options) {
-      if (options === void 0) { options = {}; }
-      switch (type) {
-          case "Point": return point(coordinates).geometry;
-          case "LineString": return lineString(coordinates).geometry;
-          case "Polygon": return polygon(coordinates).geometry;
-          case "MultiPoint": return multiPoint(coordinates).geometry;
-          case "MultiLineString": return multiLineString(coordinates).geometry;
-          case "MultiPolygon": return multiPolygon(coordinates).geometry;
-          default: throw new Error(type + " is invalid");
-      }
-  }
-  exports.geometry = geometry;
-  /**
-   * Creates a {@link Point} {@link Feature} from a Position.
-   *
-   * @name point
-   * @param {Array<number>} coordinates longitude, latitude position (each in decimal degrees)
-   * @param {Object} [properties={}] an Object of key-value pairs to add as properties
-   * @param {Object} [options={}] Optional Parameters
-   * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature
-   * @param {string|number} [options.id] Identifier associated with the Feature
-   * @returns {Feature<Point>} a Point feature
-   * @example
-   * var point = turf.point([-75.343, 39.984]);
-   *
-   * //=point
-   */
-  function point(coordinates, properties, options) {
-      if (options === void 0) { options = {}; }
-      var geom = {
-          type: "Point",
-          coordinates: coordinates,
-      };
-      return feature(geom, properties, options);
-  }
-  exports.point = point;
-  /**
-   * Creates a {@link Point} {@link FeatureCollection} from an Array of Point coordinates.
-   *
-   * @name points
-   * @param {Array<Array<number>>} coordinates an array of Points
-   * @param {Object} [properties={}] Translate these properties to each Feature
-   * @param {Object} [options={}] Optional Parameters
-   * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north]
-   * associated with the FeatureCollection
-   * @param {string|number} [options.id] Identifier associated with the FeatureCollection
-   * @returns {FeatureCollection<Point>} Point Feature
-   * @example
-   * var points = turf.points([
-   *   [-75, 39],
-   *   [-80, 45],
-   *   [-78, 50]
-   * ]);
-   *
-   * //=points
-   */
-  function points(coordinates, properties, options) {
-      if (options === void 0) { options = {}; }
-      return featureCollection(coordinates.map(function (coords) {
-          return point(coords, properties);
-      }), options);
-  }
-  exports.points = points;
-  /**
-   * Creates a {@link Polygon} {@link Feature} from an Array of LinearRings.
-   *
-   * @name polygon
-   * @param {Array<Array<Array<number>>>} coordinates an array of LinearRings
-   * @param {Object} [properties={}] an Object of key-value pairs to add as properties
-   * @param {Object} [options={}] Optional Parameters
-   * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature
-   * @param {string|number} [options.id] Identifier associated with the Feature
-   * @returns {Feature<Polygon>} Polygon Feature
-   * @example
-   * var polygon = turf.polygon([[[-5, 52], [-4, 56], [-2, 51], [-7, 54], [-5, 52]]], { name: 'poly1' });
-   *
-   * //=polygon
-   */
-  function polygon(coordinates, properties, options) {
-      if (options === void 0) { options = {}; }
-      for (var _i = 0, coordinates_1 = coordinates; _i < coordinates_1.length; _i++) {
-          var ring = coordinates_1[_i];
-          if (ring.length < 4) {
-              throw new Error("Each LinearRing of a Polygon must have 4 or more Positions.");
-          }
-          for (var j = 0; j < ring[ring.length - 1].length; j++) {
-              // Check if first point of Polygon contains two numbers
-              if (ring[ring.length - 1][j] !== ring[0][j]) {
-                  throw new Error("First and last Position are not equivalent.");
-              }
-          }
-      }
-      var geom = {
-          type: "Polygon",
-          coordinates: coordinates,
-      };
-      return feature(geom, properties, options);
-  }
-  exports.polygon = polygon;
-  /**
-   * Creates a {@link Polygon} {@link FeatureCollection} from an Array of Polygon coordinates.
-   *
-   * @name polygons
-   * @param {Array<Array<Array<Array<number>>>>} coordinates an array of Polygon coordinates
-   * @param {Object} [properties={}] an Object of key-value pairs to add as properties
-   * @param {Object} [options={}] Optional Parameters
-   * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature
-   * @param {string|number} [options.id] Identifier associated with the FeatureCollection
-   * @returns {FeatureCollection<Polygon>} Polygon FeatureCollection
-   * @example
-   * var polygons = turf.polygons([
-   *   [[[-5, 52], [-4, 56], [-2, 51], [-7, 54], [-5, 52]]],
-   *   [[[-15, 42], [-14, 46], [-12, 41], [-17, 44], [-15, 42]]],
-   * ]);
-   *
-   * //=polygons
-   */
-  function polygons(coordinates, properties, options) {
-      if (options === void 0) { options = {}; }
-      return featureCollection(coordinates.map(function (coords) {
-          return polygon(coords, properties);
-      }), options);
-  }
-  exports.polygons = polygons;
-  /**
-   * Creates a {@link LineString} {@link Feature} from an Array of Positions.
-   *
-   * @name lineString
-   * @param {Array<Array<number>>} coordinates an array of Positions
-   * @param {Object} [properties={}] an Object of key-value pairs to add as properties
-   * @param {Object} [options={}] Optional Parameters
-   * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature
-   * @param {string|number} [options.id] Identifier associated with the Feature
-   * @returns {Feature<LineString>} LineString Feature
-   * @example
-   * var linestring1 = turf.lineString([[-24, 63], [-23, 60], [-25, 65], [-20, 69]], {name: 'line 1'});
-   * var linestring2 = turf.lineString([[-14, 43], [-13, 40], [-15, 45], [-10, 49]], {name: 'line 2'});
-   *
-   * //=linestring1
-   * //=linestring2
-   */
-  function lineString(coordinates, properties, options) {
-      if (options === void 0) { options = {}; }
-      if (coordinates.length < 2) {
-          throw new Error("coordinates must be an array of two or more positions");
-      }
-      var geom = {
-          type: "LineString",
-          coordinates: coordinates,
-      };
-      return feature(geom, properties, options);
-  }
-  exports.lineString = lineString;
-  /**
-   * Creates a {@link LineString} {@link FeatureCollection} from an Array of LineString coordinates.
-   *
-   * @name lineStrings
-   * @param {Array<Array<Array<number>>>} coordinates an array of LinearRings
-   * @param {Object} [properties={}] an Object of key-value pairs to add as properties
-   * @param {Object} [options={}] Optional Parameters
-   * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north]
-   * associated with the FeatureCollection
-   * @param {string|number} [options.id] Identifier associated with the FeatureCollection
-   * @returns {FeatureCollection<LineString>} LineString FeatureCollection
-   * @example
-   * var linestrings = turf.lineStrings([
-   *   [[-24, 63], [-23, 60], [-25, 65], [-20, 69]],
-   *   [[-14, 43], [-13, 40], [-15, 45], [-10, 49]]
-   * ]);
-   *
-   * //=linestrings
-   */
-  function lineStrings(coordinates, properties, options) {
-      if (options === void 0) { options = {}; }
-      return featureCollection(coordinates.map(function (coords) {
-          return lineString(coords, properties);
-      }), options);
-  }
-  exports.lineStrings = lineStrings;
-  /**
-   * Takes one or more {@link Feature|Features} and creates a {@link FeatureCollection}.
-   *
-   * @name featureCollection
-   * @param {Feature[]} features input features
-   * @param {Object} [options={}] Optional Parameters
-   * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature
-   * @param {string|number} [options.id] Identifier associated with the Feature
-   * @returns {FeatureCollection} FeatureCollection of Features
-   * @example
-   * var locationA = turf.point([-75.343, 39.984], {name: 'Location A'});
-   * var locationB = turf.point([-75.833, 39.284], {name: 'Location B'});
-   * var locationC = turf.point([-75.534, 39.123], {name: 'Location C'});
-   *
-   * var collection = turf.featureCollection([
-   *   locationA,
-   *   locationB,
-   *   locationC
-   * ]);
-   *
-   * //=collection
-   */
-  function featureCollection(features, options) {
-      if (options === void 0) { options = {}; }
-      var fc = { type: "FeatureCollection" };
-      if (options.id) {
-          fc.id = options.id;
-      }
-      if (options.bbox) {
-          fc.bbox = options.bbox;
+          selection.selectAll('.wrap-form-field input')
+              .on('keydown', function() {
+                  // if user presses enter, and combobox is not active, accept edits..
+                  if (event.keyCode === 13 && select('.combobox').empty()) {
+                      context.enter(modeBrowse(context));
+                  }
+              });
       }
-      fc.features = features;
-      return fc;
-  }
-  exports.featureCollection = featureCollection;
-  /**
-   * Creates a {@link Feature<MultiLineString>} based on a
-   * coordinate array. Properties can be added optionally.
-   *
-   * @name multiLineString
-   * @param {Array<Array<Array<number>>>} coordinates an array of LineStrings
-   * @param {Object} [properties={}] an Object of key-value pairs to add as properties
-   * @param {Object} [options={}] Optional Parameters
-   * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature
-   * @param {string|number} [options.id] Identifier associated with the Feature
-   * @returns {Feature<MultiLineString>} a MultiLineString feature
-   * @throws {Error} if no coordinates are passed
-   * @example
-   * var multiLine = turf.multiLineString([[[0,0],[10,10]]]);
-   *
-   * //=multiLine
-   */
-  function multiLineString(coordinates, properties, options) {
-      if (options === void 0) { options = {}; }
-      var geom = {
-          type: "MultiLineString",
-          coordinates: coordinates,
+
+
+      presetEditor.preset = function(val) {
+          if (!arguments.length) return _preset;
+          if (_preset && _preset.id === val.id) return presetEditor;
+          _preset = val;
+          _fieldsArr = null;
+          return presetEditor;
       };
-      return feature(geom, properties, options);
-  }
-  exports.multiLineString = multiLineString;
-  /**
-   * Creates a {@link Feature<MultiPoint>} based on a
-   * coordinate array. Properties can be added optionally.
-   *
-   * @name multiPoint
-   * @param {Array<Array<number>>} coordinates an array of Positions
-   * @param {Object} [properties={}] an Object of key-value pairs to add as properties
-   * @param {Object} [options={}] Optional Parameters
-   * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature
-   * @param {string|number} [options.id] Identifier associated with the Feature
-   * @returns {Feature<MultiPoint>} a MultiPoint feature
-   * @throws {Error} if no coordinates are passed
-   * @example
-   * var multiPt = turf.multiPoint([[0,0],[10,10]]);
-   *
-   * //=multiPt
-   */
-  function multiPoint(coordinates, properties, options) {
-      if (options === void 0) { options = {}; }
-      var geom = {
-          type: "MultiPoint",
-          coordinates: coordinates,
+
+
+      presetEditor.state = function(val) {
+          if (!arguments.length) return _state;
+          _state = val;
+          return presetEditor;
       };
-      return feature(geom, properties, options);
-  }
-  exports.multiPoint = multiPoint;
-  /**
-   * Creates a {@link Feature<MultiPolygon>} based on a
-   * coordinate array. Properties can be added optionally.
-   *
-   * @name multiPolygon
-   * @param {Array<Array<Array<Array<number>>>>} coordinates an array of Polygons
-   * @param {Object} [properties={}] an Object of key-value pairs to add as properties
-   * @param {Object} [options={}] Optional Parameters
-   * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature
-   * @param {string|number} [options.id] Identifier associated with the Feature
-   * @returns {Feature<MultiPolygon>} a multipolygon feature
-   * @throws {Error} if no coordinates are passed
-   * @example
-   * var multiPoly = turf.multiPolygon([[[[0,0],[0,10],[10,10],[10,0],[0,0]]]]);
-   *
-   * //=multiPoly
-   *
-   */
-  function multiPolygon(coordinates, properties, options) {
-      if (options === void 0) { options = {}; }
-      var geom = {
-          type: "MultiPolygon",
-          coordinates: coordinates,
+
+
+      presetEditor.tags = function(val) {
+          if (!arguments.length) return _tags;
+          _tags = val;
+          // Don't reset _fieldsArr here.
+          return presetEditor;
       };
-      return feature(geom, properties, options);
-  }
-  exports.multiPolygon = multiPolygon;
-  /**
-   * Creates a {@link Feature<GeometryCollection>} based on a
-   * coordinate array. Properties can be added optionally.
-   *
-   * @name geometryCollection
-   * @param {Array<Geometry>} geometries an array of GeoJSON Geometries
-   * @param {Object} [properties={}] an Object of key-value pairs to add as properties
-   * @param {Object} [options={}] Optional Parameters
-   * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature
-   * @param {string|number} [options.id] Identifier associated with the Feature
-   * @returns {Feature<GeometryCollection>} a GeoJSON GeometryCollection Feature
-   * @example
-   * var pt = turf.geometry("Point", [100, 0]);
-   * var line = turf.geometry("LineString", [[101, 0], [102, 1]]);
-   * var collection = turf.geometryCollection([pt, line]);
-   *
-   * // => collection
-   */
-  function geometryCollection(geometries, properties, options) {
-      if (options === void 0) { options = {}; }
-      var geom = {
-          type: "GeometryCollection",
-          geometries: geometries,
+
+
+      presetEditor.entityID = function(val) {
+          if (!arguments.length) return _entityID;
+          if (_entityID === val) return presetEditor;
+          _entityID = val;
+          _fieldsArr = null;
+          return presetEditor;
       };
-      return feature(geom, properties, options);
-  }
-  exports.geometryCollection = geometryCollection;
-  /**
-   * Round number to precision
-   *
-   * @param {number} num Number
-   * @param {number} [precision=0] Precision
-   * @returns {number} rounded number
-   * @example
-   * turf.round(120.4321)
-   * //=120
-   *
-   * turf.round(120.4321, 2)
-   * //=120.43
-   */
-  function round(num, precision) {
-      if (precision === void 0) { precision = 0; }
-      if (precision && !(precision >= 0)) {
-          throw new Error("precision must be a positive number");
-      }
-      var multiplier = Math.pow(10, precision || 0);
-      return Math.round(num * multiplier) / multiplier;
-  }
-  exports.round = round;
-  /**
-   * Convert a distance measurement (assuming a spherical Earth) from radians to a more friendly unit.
-   * Valid units: miles, nauticalmiles, inches, yards, meters, metres, kilometers, centimeters, feet
-   *
-   * @name radiansToLength
-   * @param {number} radians in radians across the sphere
-   * @param {string} [units="kilometers"] can be degrees, radians, miles, or kilometers inches, yards, metres,
-   * meters, kilometres, kilometers.
-   * @returns {number} distance
-   */
-  function radiansToLength(radians, units) {
-      if (units === void 0) { units = "kilometers"; }
-      var factor = exports.factors[units];
-      if (!factor) {
-          throw new Error(units + " units is invalid");
-      }
-      return radians * factor;
-  }
-  exports.radiansToLength = radiansToLength;
-  /**
-   * Convert a distance measurement (assuming a spherical Earth) from a real-world unit into radians
-   * Valid units: miles, nauticalmiles, inches, yards, meters, metres, kilometers, centimeters, feet
-   *
-   * @name lengthToRadians
-   * @param {number} distance in real units
-   * @param {string} [units="kilometers"] can be degrees, radians, miles, or kilometers inches, yards, metres,
-   * meters, kilometres, kilometers.
-   * @returns {number} radians
-   */
-  function lengthToRadians(distance, units) {
-      if (units === void 0) { units = "kilometers"; }
-      var factor = exports.factors[units];
-      if (!factor) {
-          throw new Error(units + " units is invalid");
-      }
-      return distance / factor;
-  }
-  exports.lengthToRadians = lengthToRadians;
-  /**
-   * Convert a distance measurement (assuming a spherical Earth) from a real-world unit into degrees
-   * Valid units: miles, nauticalmiles, inches, yards, meters, metres, centimeters, kilometres, feet
-   *
-   * @name lengthToDegrees
-   * @param {number} distance in real units
-   * @param {string} [units="kilometers"] can be degrees, radians, miles, or kilometers inches, yards, metres,
-   * meters, kilometres, kilometers.
-   * @returns {number} degrees
-   */
-  function lengthToDegrees(distance, units) {
-      return radiansToDegrees(lengthToRadians(distance, units));
-  }
-  exports.lengthToDegrees = lengthToDegrees;
-  /**
-   * Converts any bearing angle from the north line direction (positive clockwise)
-   * and returns an angle between 0-360 degrees (positive clockwise), 0 being the north line
-   *
-   * @name bearingToAzimuth
-   * @param {number} bearing angle, between -180 and +180 degrees
-   * @returns {number} angle between 0 and 360 degrees
-   */
-  function bearingToAzimuth(bearing) {
-      var angle = bearing % 360;
-      if (angle < 0) {
-          angle += 360;
-      }
-      return angle;
-  }
-  exports.bearingToAzimuth = bearingToAzimuth;
-  /**
-   * Converts an angle in radians to degrees
-   *
-   * @name radiansToDegrees
-   * @param {number} radians angle in radians
-   * @returns {number} degrees between 0 and 360 degrees
-   */
-  function radiansToDegrees(radians) {
-      var degrees = radians % (2 * Math.PI);
-      return degrees * 180 / Math.PI;
-  }
-  exports.radiansToDegrees = radiansToDegrees;
-  /**
-   * Converts an angle in degrees to radians
-   *
-   * @name degreesToRadians
-   * @param {number} degrees angle between 0 and 360 degrees
-   * @returns {number} angle in radians
-   */
-  function degreesToRadians(degrees) {
-      var radians = degrees % 360;
-      return radians * Math.PI / 180;
-  }
-  exports.degreesToRadians = degreesToRadians;
-  /**
-   * Converts a length to the requested unit.
-   * Valid units: miles, nauticalmiles, inches, yards, meters, metres, kilometers, centimeters, feet
-   *
-   * @param {number} length to be converted
-   * @param {Units} [originalUnit="kilometers"] of the length
-   * @param {Units} [finalUnit="kilometers"] returned unit
-   * @returns {number} the converted length
-   */
-  function convertLength(length, originalUnit, finalUnit) {
-      if (originalUnit === void 0) { originalUnit = "kilometers"; }
-      if (finalUnit === void 0) { finalUnit = "kilometers"; }
-      if (!(length >= 0)) {
-          throw new Error("length must be a positive number");
-      }
-      return radiansToLength(lengthToRadians(length, originalUnit), finalUnit);
+
+
+      return utilRebind(presetEditor, dispatch$1, 'on');
   }
-  exports.convertLength = convertLength;
-  /**
-   * Converts a area to the requested unit.
-   * Valid units: kilometers, kilometres, meters, metres, centimetres, millimeters, acres, miles, yards, feet, inches
-   * @param {number} area to be converted
-   * @param {Units} [originalUnit="meters"] of the distance
-   * @param {Units} [finalUnit="kilometers"] returned unit
-   * @returns {number} the converted distance
-   */
-  function convertArea(area, originalUnit, finalUnit) {
-      if (originalUnit === void 0) { originalUnit = "meters"; }
-      if (finalUnit === void 0) { finalUnit = "kilometers"; }
-      if (!(area >= 0)) {
-          throw new Error("area must be a positive number");
+
+  function uiEntityIssues(context) {
+      var _selection = select(null);
+      var _expandedIssueID;
+      var _entityID;
+
+      // Listen for validation reload even though the entity editor is reloaded on
+      // every graph change since the graph change event may happen before the issue
+      // cache is refreshed
+      context.validator().on('reload.entity_issues', function() {
+
+           _selection.selectAll('.disclosure-wrap-entity_issues')
+               .call(render);
+
+          update();
+      });
+
+
+      function entityIssues(selection) {
+          _selection = selection;
+
+          selection
+              .call(uiDisclosure(context, 'entity_issues', true)
+                  .content(render)
+              );
+
+          update();
       }
-      var startFactor = exports.areaFactors[originalUnit];
-      if (!startFactor) {
-          throw new Error("invalid original units");
+
+
+      function update() {
+          var issues = context.validator().getIssuesForEntityWithID(_entityID);
+
+          _selection
+              .classed('hide', issues.length === 0);
+
+          _selection.selectAll('.hide-toggle-entity_issues span')
+              .text(t('issues.list_title', { count: issues.length }));
       }
-      var finalFactor = exports.areaFactors[finalUnit];
-      if (!finalFactor) {
-          throw new Error("invalid final units");
+
+
+      function render(selection) {
+          var issues = context.validator().getIssuesForEntityWithID(_entityID);
+          _expandedIssueID = issues.length > 0 ? issues[0].id() : null;
+
+          var items = selection.selectAll('.issue')
+              .data(issues, function(d) { return d.id(); });
+
+          // Exit
+          items.exit()
+              .remove();
+
+          // Enter
+          var itemsEnter = items.enter()
+              .append('div')
+              .attr('class', function(d) { return 'issue severity-' + d.severity; })
+              .call(tooltip()
+                  .html(true)
+                  .title(function(d) { return uiTooltipHtml(d.tooltip); })
+                  .placement('top')
+              )
+              .on('mouseover.highlight', function(d) {
+                  // don't hover-highlight the selected entity
+                  var ids = d.entities.filter(function(e) { return e.id !== _entityID; })
+                      .map(function(e) { return e.id; });
+                  utilHighlightEntities(ids, true, context);
+              })
+              .on('mouseout.highlight', function(d) {
+                  var ids = d.entities.filter(function(e) { return e.id !== _entityID; })
+                      .map(function(e) { return e.id; });
+                  utilHighlightEntities(ids, false, context);
+              });
+
+          var messagesEnter = itemsEnter
+              .append('button')
+              .attr('class', 'message')
+              .on('click', function(d) {
+
+                  _expandedIssueID = d.id();   // expand only the clicked item
+                  selection.selectAll('.issue')
+                      .classed('expanded', function(d) { return d.id() === _expandedIssueID; });
+
+                  var extent = d.extent(context.graph());
+                  if (extent) {
+                      var view = context.map().trimmedExtent();
+                      var zoom = context.map().zoom();
+                      if (!view.contains(extent) || zoom < 19) {
+                          context.map().centerZoomEase(extent.center(), Math.max(zoom, 19));
+                      }
+                  }
+              });
+
+          messagesEnter
+              .append('span')
+              .attr('class', 'issue-icon')
+              .call(svgIcon('', 'pre-text'));
+
+          messagesEnter
+              .append('strong')
+              .attr('class', 'issue-text');
+
+          itemsEnter
+              .append('ul')
+              .attr('class', 'issue-fix-list');
+
+
+          // Update
+          items = items
+              .merge(itemsEnter)
+              .classed('expanded', function(d) { return d.id() === _expandedIssueID; });
+
+          items.select('.issue-icon svg use')     // propagate bound data
+              .attr('href', function(d) {
+                  return '#iD-icon-' + (d.severity === 'warning' ? 'alert' : 'error');
+              });
+
+          items.select('.issue-text')     // propagate bound data
+              .text(function(d) { return d.message; });
+
+
+          // fixes
+          var fixLists = items.selectAll('.issue-fix-list');
+
+          var fixes = fixLists.selectAll('.issue-fix-item')
+              .data(function(d) { return d.fixes; })
+              .enter()
+              .append('li')
+              .attr('class', function(d) {
+                  return 'issue-fix-item ' + (d.onClick ? 'actionable' : '');
+              })
+              .append('button')
+              .on('click', function(d) {
+                  if (d.onClick) {
+                      utilHighlightEntities(d.entityIds, false, context);
+                      d.onClick();
+                  }
+              })
+              .on('mouseover.highlight', function(d) {
+                  utilHighlightEntities(d.entityIds, true, context);
+              })
+              .on('mouseout.highlight', function(d) {
+                  utilHighlightEntities(d.entityIds, false, context);
+              });
+
+          fixes.append('span')
+              .attr('class', 'fix-icon')
+              .each(function(d) {
+                  var iconName = d.icon || 'iD-icon-wrench';
+                  if (iconName.startsWith('maki')) {
+                      iconName += '-15';
+                  }
+                  select(this).call(svgIcon('#' + iconName, 'pre-text'));
+              });
+
+          fixes.append('span')
+              .text(function(d) { return d.title; });
       }
-      return (area / startFactor) * finalFactor;
-  }
-  exports.convertArea = convertArea;
-  /**
-   * isNumber
-   *
-   * @param {*} num Number to validate
-   * @returns {boolean} true/false
-   * @example
-   * turf.isNumber(123)
-   * //=true
-   * turf.isNumber('foo')
-   * //=false
-   */
-  function isNumber(num) {
-      return !isNaN(num) && num !== null && !Array.isArray(num) && !/^\s*$/.test(num);
-  }
-  exports.isNumber = isNumber;
-  /**
-   * isObject
-   *
-   * @param {*} input variable to validate
-   * @returns {boolean} true/false
-   * @example
-   * turf.isObject({elevation: 10})
-   * //=true
-   * turf.isObject('foo')
-   * //=false
-   */
-  function isObject(input) {
-      return (!!input) && (input.constructor === Object);
+
+
+      entityIssues.entityID = function(val) {
+          if (!arguments.length) return _entityID;
+          if (_entityID !== val) {
+              _entityID = val;
+              _expandedIssueID = null;
+          }
+          return entityIssues;
+      };
+
+
+      return entityIssues;
   }
-  exports.isObject = isObject;
-  /**
-   * Validate BBox
-   *
-   * @private
-   * @param {Array<number>} bbox BBox to validate
-   * @returns {void}
-   * @throws Error if BBox is not valid
-   * @example
-   * validateBBox([-180, -40, 110, 50])
-   * //=OK
-   * validateBBox([-180, -40])
-   * //=Error
-   * validateBBox('Foo')
-   * //=Error
-   * validateBBox(5)
-   * //=Error
-   * validateBBox(null)
-   * //=Error
-   * validateBBox(undefined)
-   * //=Error
-   */
-  function validateBBox(bbox) {
-      if (!bbox) {
-          throw new Error("bbox is required");
-      }
-      if (!Array.isArray(bbox)) {
-          throw new Error("bbox must be an Array");
-      }
-      if (bbox.length !== 4 && bbox.length !== 6) {
-          throw new Error("bbox must be an Array of 4 or 6 numbers");
-      }
-      bbox.forEach(function (num) {
-          if (!isNumber(num)) {
-              throw new Error("bbox must only contain numbers");
+
+  function uiEntityEditor(context) {
+      var dispatch$1 = dispatch('choose');
+      var _state = 'select';
+      var _coalesceChanges = false;
+      var _modified = false;
+      var _base;
+      var _entityID;
+      var _activePreset;
+      var _tagReference;
+
+      var entityIssues = uiEntityIssues(context);
+      var quickLinks = uiQuickLinks();
+      var presetEditor = uiPresetEditor(context).on('change', changeTags);
+      var rawTagEditor = uiRawTagEditor(context).on('change', changeTags);
+      var rawMemberEditor = uiRawMemberEditor(context);
+      var rawMembershipEditor = uiRawMembershipEditor(context);
+
+      function entityEditor(selection) {
+          var entity = context.entity(_entityID);
+          var tags = clone(entity.tags);
+
+          // Header
+          var header = selection.selectAll('.header')
+              .data([0]);
+
+          // Enter
+          var headerEnter = header.enter()
+              .append('div')
+              .attr('class', 'header fillL cf');
+
+          headerEnter
+              .append('button')
+              .attr('class', 'fl preset-reset preset-choose')
+              .call(svgIcon((textDirection === 'rtl') ? '#iD-icon-forward' : '#iD-icon-backward'));
+
+          headerEnter
+              .append('button')
+              .attr('class', 'fr preset-close')
+              .on('click', function() { context.enter(modeBrowse(context)); })
+              .call(svgIcon(_modified ? '#iD-icon-apply' : '#iD-icon-close'));
+
+          headerEnter
+              .append('h3')
+              .text(t('inspector.edit'));
+
+          // Update
+          header = header
+              .merge(headerEnter);
+
+          header.selectAll('.preset-reset')
+              .on('click', function() {
+                  dispatch$1.call('choose', this, _activePreset);
+              });
+
+
+          // Body
+          var body = selection.selectAll('.inspector-body')
+              .data([0]);
+
+          // Enter
+          var bodyEnter = body.enter()
+              .append('div')
+              .attr('class', 'inspector-body');
+
+          bodyEnter
+              .append('div')
+              .attr('class', 'preset-list-item inspector-inner')
+              .append('div')
+              .attr('class', 'preset-list-button-wrap')
+              .append('button')
+              .attr('class', 'preset-list-button preset-reset')
+              .call(tooltip().title(t('inspector.back_tooltip')).placement('bottom'))
+              .append('div')
+              .attr('class', 'label')
+              .append('div')
+              .attr('class', 'label-inner');
+
+          bodyEnter
+              .append('div')
+              .attr('class', 'preset-quick-links');
+
+          bodyEnter
+              .append('div')
+              .attr('class', 'entity-issues');
+
+          bodyEnter
+              .append('div')
+              .attr('class', 'preset-editor');
+
+          bodyEnter
+              .append('div')
+              .attr('class', 'raw-tag-editor inspector-inner');
+
+          bodyEnter
+              .append('div')
+              .attr('class', 'raw-member-editor inspector-inner');
+
+          bodyEnter
+              .append('div')
+              .attr('class', 'raw-membership-editor inspector-inner');
+
+          bodyEnter
+              .append('input')
+              .attr('type', 'text')
+              .attr('class', 'key-trap');
+
+
+          // Update
+          body = body
+              .merge(bodyEnter);
+
+          // update header
+          if (_tagReference) {
+              body.selectAll('.preset-list-button-wrap')
+                  .call(_tagReference.button);
+
+              body.selectAll('.preset-list-item')
+                  .call(_tagReference.body);
           }
-      });
-  }
-  exports.validateBBox = validateBBox;
-  /**
-   * Validate Id
-   *
-   * @private
-   * @param {string|number} id Id to validate
-   * @returns {void}
-   * @throws Error if Id is not valid
-   * @example
-   * validateId([-180, -40, 110, 50])
-   * //=Error
-   * validateId([-180, -40])
-   * //=Error
-   * validateId('Foo')
-   * //=OK
-   * validateId(5)
-   * //=OK
-   * validateId(null)
-   * //=Error
-   * validateId(undefined)
-   * //=Error
-   */
-  function validateId(id) {
-      if (!id) {
-          throw new Error("id is required");
-      }
-      if (["string", "number"].indexOf(typeof id) === -1) {
-          throw new Error("id must be a number or a string");
-      }
-  }
-  exports.validateId = validateId;
-  // Deprecated methods
-  function radians2degrees() {
-      throw new Error("method has been renamed to `radiansToDegrees`");
-  }
-  exports.radians2degrees = radians2degrees;
-  function degrees2radians() {
-      throw new Error("method has been renamed to `degreesToRadians`");
-  }
-  exports.degrees2radians = degrees2radians;
-  function distanceToDegrees() {
-      throw new Error("method has been renamed to `lengthToDegrees`");
-  }
-  exports.distanceToDegrees = distanceToDegrees;
-  function distanceToRadians() {
-      throw new Error("method has been renamed to `lengthToRadians`");
-  }
-  exports.distanceToRadians = distanceToRadians;
-  function radiansToDistance() {
-      throw new Error("method has been renamed to `radiansToLength`");
-  }
-  exports.radiansToDistance = radiansToDistance;
-  function bearingToAngle() {
-      throw new Error("method has been renamed to `bearingToAzimuth`");
-  }
-  exports.bearingToAngle = bearingToAngle;
-  function convertDistance() {
-      throw new Error("method has been renamed to `convertLength`");
-  }
-  exports.convertDistance = convertDistance;
-  });
 
-  unwrapExports(helpers);
-  var helpers_1 = helpers.earthRadius;
-  var helpers_2 = helpers.factors;
-  var helpers_3 = helpers.unitsFactors;
-  var helpers_4 = helpers.areaFactors;
-  var helpers_5 = helpers.feature;
-  var helpers_6 = helpers.geometry;
-  var helpers_7 = helpers.point;
-  var helpers_8 = helpers.points;
-  var helpers_9 = helpers.polygon;
-  var helpers_10 = helpers.polygons;
-  var helpers_11 = helpers.lineString;
-  var helpers_12 = helpers.lineStrings;
-  var helpers_13 = helpers.featureCollection;
-  var helpers_14 = helpers.multiLineString;
-  var helpers_15 = helpers.multiPoint;
-  var helpers_16 = helpers.multiPolygon;
-  var helpers_17 = helpers.geometryCollection;
-  var helpers_18 = helpers.round;
-  var helpers_19 = helpers.radiansToLength;
-  var helpers_20 = helpers.lengthToRadians;
-  var helpers_21 = helpers.lengthToDegrees;
-  var helpers_22 = helpers.bearingToAzimuth;
-  var helpers_23 = helpers.radiansToDegrees;
-  var helpers_24 = helpers.degreesToRadians;
-  var helpers_25 = helpers.convertLength;
-  var helpers_26 = helpers.convertArea;
-  var helpers_27 = helpers.isNumber;
-  var helpers_28 = helpers.isObject;
-  var helpers_29 = helpers.validateBBox;
-  var helpers_30 = helpers.validateId;
-  var helpers_31 = helpers.radians2degrees;
-  var helpers_32 = helpers.degrees2radians;
-  var helpers_33 = helpers.distanceToDegrees;
-  var helpers_34 = helpers.distanceToRadians;
-  var helpers_35 = helpers.radiansToDistance;
-  var helpers_36 = helpers.bearingToAngle;
-  var helpers_37 = helpers.convertDistance;
+          body.selectAll('.preset-reset')
+              .on('click', function() {
+                  dispatch$1.call('choose', this, _activePreset);
+              });
 
-  var invariant = createCommonjsModule(function (module, exports) {
-  Object.defineProperty(exports, "__esModule", { value: true });
+          body.select('.preset-list-item button')
+              .call(uiPresetIcon()
+                  .geometry(context.geometry(_entityID))
+                  .preset(_activePreset)
+              );
 
-  /**
-   * Unwrap a coordinate from a Point Feature, Geometry or a single coordinate.
-   *
-   * @name getCoord
-   * @param {Array<number>|Geometry<Point>|Feature<Point>} coord GeoJSON Point or an Array of numbers
-   * @returns {Array<number>} coordinates
-   * @example
-   * var pt = turf.point([10, 10]);
-   *
-   * var coord = turf.getCoord(pt);
-   * //= [10, 10]
-   */
-  function getCoord(coord) {
-      if (!coord) {
-          throw new Error("coord is required");
-      }
-      if (!Array.isArray(coord)) {
-          if (coord.type === "Feature" && coord.geometry !== null && coord.geometry.type === "Point") {
-              return coord.geometry.coordinates;
+          // NOTE: split on en-dash, not a hypen (to avoid conflict with hyphenated names)
+          var label = body.select('.label-inner');
+          var nameparts = label.selectAll('.namepart')
+              .data(_activePreset.name().split(' – '), function(d) { return d; });
+
+          nameparts.exit()
+              .remove();
+
+          nameparts
+              .enter()
+              .append('div')
+              .attr('class', 'namepart')
+              .text(function(d) { return d; });
+
+          // update quick links
+          var choices = [{
+              id: 'zoom_to',
+              label: 'inspector.zoom_to.title',
+              tooltip: function() {
+                  return uiTooltipHtml(t('inspector.zoom_to.tooltip_feature'), t('inspector.zoom_to.key'));
+              },
+              click: function zoomTo() {
+                  context.mode().zoomToSelected();
+              }
+          }];
+
+          body.select('.preset-quick-links')
+              .call(quickLinks.choices(choices));
+
+
+          // update editor sections
+          body.select('.entity-issues')
+              .call(entityIssues
+                  .entityID(_entityID)
+              );
+
+          body.select('.preset-editor')
+              .call(presetEditor
+                  .preset(_activePreset)
+                  .entityID(_entityID)
+                  .tags(tags)
+                  .state(_state)
+              );
+
+          body.select('.raw-tag-editor')
+              .call(rawTagEditor
+                  .preset(_activePreset)
+                  .entityID(_entityID)
+                  .tags(tags)
+                  .state(_state)
+              );
+
+          if (entity.type === 'relation') {
+              body.select('.raw-member-editor')
+                  .style('display', 'block')
+                  .call(rawMemberEditor
+                      .entityID(_entityID)
+                  );
+          } else {
+              body.select('.raw-member-editor')
+                  .style('display', 'none');
           }
-          if (coord.type === "Point") {
-              return coord.coordinates;
+
+          body.select('.raw-membership-editor')
+              .call(rawMembershipEditor
+                  .entityID(_entityID)
+              );
+
+          body.select('.key-trap')
+              .on('keydown.key-trap', function() {
+                  // On tabbing, send focus back to the first field on the inspector-body
+                  // (probably the `name` field) #4159
+                  if (event.keyCode === 9 && !event.shiftKey) {
+                      event.preventDefault();
+                      body.select('input').node().focus();
+                  }
+              });
+
+          context.history()
+              .on('change.entity-editor', historyChanged);
+
+
+          function historyChanged() {
+              if (_state === 'hide') return;
+
+              var entity = context.hasEntity(_entityID);
+              var graph = context.graph();
+              if (!entity) return;
+
+              var match = context.presets().match(entity, graph);
+              var activePreset = entityEditor.preset();
+              var weakPreset = activePreset && isEmpty(activePreset.addTags);
+
+              // A "weak" preset doesn't set any tags. (e.g. "Address")
+              // Don't replace a weak preset with a fallback preset (e.g. "Point")
+              if (!(weakPreset && match.isFallback())) {
+                  entityEditor.preset(match);
+              }
+              entityEditor.modified(_base !== graph);
+              entityEditor(selection);
           }
       }
-      if (Array.isArray(coord) && coord.length >= 2 && !Array.isArray(coord[0]) && !Array.isArray(coord[1])) {
-          return coord;
-      }
-      throw new Error("coord must be GeoJSON Point or an Array of numbers");
-  }
-  exports.getCoord = getCoord;
-  /**
-   * Unwrap coordinates from a Feature, Geometry Object or an Array
-   *
-   * @name getCoords
-   * @param {Array<any>|Geometry|Feature} coords Feature, Geometry Object or an Array
-   * @returns {Array<any>} coordinates
-   * @example
-   * var poly = turf.polygon([[[119.32, -8.7], [119.55, -8.69], [119.51, -8.54], [119.32, -8.7]]]);
-   *
-   * var coords = turf.getCoords(poly);
-   * //= [[[119.32, -8.7], [119.55, -8.69], [119.51, -8.54], [119.32, -8.7]]]
-   */
-  function getCoords(coords) {
-      if (Array.isArray(coords)) {
-          return coords;
-      }
-      // Feature
-      if (coords.type === "Feature") {
-          if (coords.geometry !== null) {
-              return coords.geometry.coordinates;
+
+
+      // Tag changes that fire on input can all get coalesced into a single
+      // history operation when the user leaves the field.  #2342
+      function changeTags(changed, onInput) {
+          var entity = context.entity(_entityID);
+          var annotation = t('operations.change_tags.annotation');
+          var tags = clone(entity.tags);
+
+          for (var k in changed) {
+              if (!k) continue;
+              var v = changed[k];
+              if (v !== undefined || tags.hasOwnProperty(k)) {
+                  tags[k] = v;
+              }
           }
-      }
-      else {
-          // Geometry
-          if (coords.coordinates) {
-              return coords.coordinates;
+
+          if (!onInput) {
+              tags = utilCleanTags(tags);
+          }
+
+          if (!isEqual(entity.tags, tags)) {
+              if (_coalesceChanges) {
+                  context.overwrite(actionChangeTags(_entityID, tags), annotation);
+              } else {
+                  context.perform(actionChangeTags(_entityID, tags), annotation);
+                  _coalesceChanges = !!onInput;
+              }
           }
       }
-      throw new Error("coords must be GeoJSON Feature, Geometry Object or an Array");
-  }
-  exports.getCoords = getCoords;
-  /**
-   * Checks if coordinates contains a number
-   *
-   * @name containsNumber
-   * @param {Array<any>} coordinates GeoJSON Coordinates
-   * @returns {boolean} true if Array contains a number
-   */
-  function containsNumber(coordinates) {
-      if (coordinates.length > 1 && helpers.isNumber(coordinates[0]) && helpers.isNumber(coordinates[1])) {
-          return true;
-      }
-      if (Array.isArray(coordinates[0]) && coordinates[0].length) {
-          return containsNumber(coordinates[0]);
-      }
-      throw new Error("coordinates must only contain numbers");
-  }
-  exports.containsNumber = containsNumber;
-  /**
-   * Enforce expectations about types of GeoJSON objects for Turf.
-   *
-   * @name geojsonType
-   * @param {GeoJSON} value any GeoJSON object
-   * @param {string} type expected GeoJSON type
-   * @param {string} name name of calling function
-   * @throws {Error} if value is not the expected type.
-   */
-  function geojsonType(value, type, name) {
-      if (!type || !name) {
-          throw new Error("type and name required");
-      }
-      if (!value || value.type !== type) {
-          throw new Error("Invalid input to " + name + ": must be a " + type + ", given " + value.type);
-      }
-  }
-  exports.geojsonType = geojsonType;
-  /**
-   * Enforce expectations about types of {@link Feature} inputs for Turf.
-   * Internally this uses {@link geojsonType} to judge geometry types.
-   *
-   * @name featureOf
-   * @param {Feature} feature a feature with an expected geometry type
-   * @param {string} type expected GeoJSON type
-   * @param {string} name name of calling function
-   * @throws {Error} error if value is not the expected type.
-   */
-  function featureOf(feature, type, name) {
-      if (!feature) {
-          throw new Error("No feature passed");
-      }
-      if (!name) {
-          throw new Error(".featureOf() requires a name");
-      }
-      if (!feature || feature.type !== "Feature" || !feature.geometry) {
-          throw new Error("Invalid input to " + name + ", Feature with geometry required");
-      }
-      if (!feature.geometry || feature.geometry.type !== type) {
-          throw new Error("Invalid input to " + name + ": must be a " + type + ", given " + feature.geometry.type);
-      }
-  }
-  exports.featureOf = featureOf;
-  /**
-   * Enforce expectations about types of {@link FeatureCollection} inputs for Turf.
-   * Internally this uses {@link geojsonType} to judge geometry types.
-   *
-   * @name collectionOf
-   * @param {FeatureCollection} featureCollection a FeatureCollection for which features will be judged
-   * @param {string} type expected GeoJSON type
-   * @param {string} name name of calling function
-   * @throws {Error} if value is not the expected type.
-   */
-  function collectionOf(featureCollection, type, name) {
-      if (!featureCollection) {
-          throw new Error("No featureCollection passed");
-      }
-      if (!name) {
-          throw new Error(".collectionOf() requires a name");
-      }
-      if (!featureCollection || featureCollection.type !== "FeatureCollection") {
-          throw new Error("Invalid input to " + name + ", FeatureCollection required");
-      }
-      for (var _i = 0, _a = featureCollection.features; _i < _a.length; _i++) {
-          var feature = _a[_i];
-          if (!feature || feature.type !== "Feature" || !feature.geometry) {
-              throw new Error("Invalid input to " + name + ", Feature with geometry required");
+
+
+      entityEditor.modified = function(val) {
+          if (!arguments.length) return _modified;
+          _modified = val;
+          d3_selectAll('button.preset-close use')
+              .attr('xlink:href', (_modified ? '#iD-icon-apply' : '#iD-icon-close'));
+          return entityEditor;
+      };
+
+
+      entityEditor.state = function(val) {
+          if (!arguments.length) return _state;
+          _state = val;
+          return entityEditor;
+      };
+
+
+      entityEditor.entityID = function(val) {
+          if (!arguments.length) return _entityID;
+          _entityID = val;
+          _base = context.graph();
+          _coalesceChanges = false;
+
+          // reset the scroll to the top of the inspector
+          var body = d3_selectAll('.entity-editor-pane .inspector-body');
+          if (!body.empty()) {
+              body.node().scrollTop = 0;
           }
-          if (!feature.geometry || feature.geometry.type !== type) {
-              throw new Error("Invalid input to " + name + ": must be a " + type + ", given " + feature.geometry.type);
+
+          var presetMatch = context.presets().match(context.entity(_entityID), _base);
+
+          return entityEditor
+              .preset(presetMatch)
+              .modified(false);
+      };
+
+
+      entityEditor.preset = function(val) {
+          if (!arguments.length) return _activePreset;
+          if (val !== _activePreset) {
+              _activePreset = val;
+              _tagReference = uiTagReference(_activePreset.reference(context.geometry(_entityID)), context)
+                  .showing(false);
           }
-      }
+          return entityEditor;
+      };
+
+
+      return utilRebind(entityEditor, dispatch$1, 'on');
   }
-  exports.collectionOf = collectionOf;
-  /**
-   * Get Geometry from Feature or Geometry Object
-   *
-   * @param {Feature|Geometry} geojson GeoJSON Feature or Geometry Object
-   * @returns {Geometry|null} GeoJSON Geometry Object
-   * @throws {Error} if geojson is not a Feature or Geometry Object
-   * @example
-   * var point = {
-   *   "type": "Feature",
-   *   "properties": {},
-   *   "geometry": {
-   *     "type": "Point",
-   *     "coordinates": [110, 40]
-   *   }
-   * }
-   * var geom = turf.getGeom(point)
-   * //={"type": "Point", "coordinates": [110, 40]}
-   */
-  function getGeom(geojson) {
-      if (geojson.type === "Feature") {
-          return geojson.geometry;
-      }
-      return geojson;
+
+  var pair_1 = pair$1;
+
+  function search(x, dims, r) {
+    if (!dims) dims = 'NSEW';
+    if (typeof x !== 'string') return { val: null, regex: r };
+
+    r = r || /[\s\,]*([NSEW])?\s*([\-|\—|\―]?[0-9.]+)°?\s*(?:([0-9.]+)['’′‘]\s*)?(?:([0-9.]+)(?:''|"|”|″)\s*)?([NSEW])?/gi;
+
+    var m = r.exec(x);
+    if (!m) return { val: null, regex: r };
+
+    var dim = m[1] || m[5];
+    if (dim && dims.indexOf(dim) === -1) return { val: null, regex: r };
+
+    return {
+      val: (((m[2]) ? parseFloat(m[2]) : 0) +
+            ((m[3] ? parseFloat(m[3]) / 60 : 0)) +
+            ((m[4] ? parseFloat(m[4]) / 3600 : 0))) *
+            ((dim === 'S' || dim === 'W') ? -1 : 1),
+      regex: r,
+      raw: m[0],
+      dim: dim
+    };
   }
-  exports.getGeom = getGeom;
-  /**
-   * Get GeoJSON object's type, Geometry type is prioritize.
-   *
-   * @param {GeoJSON} geojson GeoJSON object
-   * @param {string} [name="geojson"] name of the variable to display in error message
-   * @returns {string} GeoJSON type
-   * @example
-   * var point = {
-   *   "type": "Feature",
-   *   "properties": {},
-   *   "geometry": {
-   *     "type": "Point",
-   *     "coordinates": [110, 40]
-   *   }
-   * }
-   * var geom = turf.getType(point)
-   * //="Point"
-   */
-  function getType(geojson, name) {
-      if (geojson.type === "FeatureCollection") {
-          return "FeatureCollection";
-      }
-      if (geojson.type === "GeometryCollection") {
-          return "GeometryCollection";
-      }
-      if (geojson.type === "Feature" && geojson.geometry !== null) {
-          return geojson.geometry.type;
-      }
-      return geojson.type;
+
+  function pair$1(x, dims) {
+    x = x.trim();
+    var one = search(x, dims);
+    if (one.val === null) return null;
+    var two = search(x, dims, one.regex);
+    if (two.val === null) return null;
+    // null if one/two are not contiguous.
+    if (one.raw + two.raw !== x) return null;
+    if (one.dim) {
+      return swapdim(one.val, two.val, one.dim);
+    } else {
+      return [one.val, two.val];
+    }
   }
-  exports.getType = getType;
-  });
 
-  unwrapExports(invariant);
-  var invariant_1 = invariant.getCoord;
-  var invariant_2 = invariant.getCoords;
-  var invariant_3 = invariant.containsNumber;
-  var invariant_4 = invariant.geojsonType;
-  var invariant_5 = invariant.featureOf;
-  var invariant_6 = invariant.collectionOf;
-  var invariant_7 = invariant.getGeom;
-  var invariant_8 = invariant.getType;
+  function swapdim(a, b, dim) {
+    if (dim === 'N' || dim === 'S') return [a, b];
+    if (dim === 'W' || dim === 'E') return [b, a];
+  }
 
-  var lineclip_1$1 = lineclip$1;
-  var default_1$1 = lineclip$1;
+  function uiFeatureList(context) {
+      var _geocodeResults;
 
-  lineclip$1.polyline = lineclip$1;
-  lineclip$1.polygon = polygonclip$1;
 
+      function featureList(selection) {
+          var header = selection
+              .append('div')
+              .attr('class', 'header fillL cf');
 
-  // Cohen-Sutherland line clippign algorithm, adapted to efficiently
-  // handle polylines rather than just segments
+          header
+              .append('h3')
+              .text(t('inspector.feature_list'));
 
-  function lineclip$1(points, bbox, result) {
+          var searchWrap = selection
+              .append('div')
+              .attr('class', 'search-header');
 
-      var len = points.length,
-          codeA = bitCode$1(points[0], bbox),
-          part = [],
-          i, a, b, codeB, lastCode;
+          var search = searchWrap
+              .append('input')
+              .attr('placeholder', t('inspector.search'))
+              .attr('type', 'search')
+              .call(utilNoAuto)
+              .on('keypress', keypress)
+              .on('keydown', keydown)
+              .on('input', inputevent);
 
-      if (!result) result = [];
+          searchWrap
+              .call(svgIcon('#iD-icon-search', 'pre-text'));
 
-      for (i = 1; i < len; i++) {
-          a = points[i - 1];
-          b = points[i];
-          codeB = lastCode = bitCode$1(b, bbox);
+          var listWrap = selection
+              .append('div')
+              .attr('class', 'inspector-body');
 
-          while (true) {
+          var list = listWrap
+              .append('div')
+              .attr('class', 'feature-list cf');
 
-              if (!(codeA | codeB)) { // accept
-                  part.push(a);
+          context
+              .on('exit.feature-list', clearSearch);
+          context.map()
+              .on('drawn.feature-list', mapDrawn);
 
-                  if (codeB !== lastCode) { // segment went outside
-                      part.push(b);
+          context.keybinding()
+              .on(uiCmd('⌘F'), focusSearch);
 
-                      if (i < len - 1) { // start a new line
-                          result.push(part);
-                          part = [];
-                      }
-                  } else if (i === len - 1) {
-                      part.push(b);
-                  }
-                  break;
 
-              } else if (codeA & codeB) { // trivial reject
-                  break;
+          function focusSearch() {
+              var mode = context.mode() && context.mode().id;
+              if (mode !== 'browse') return;
 
-              } else if (codeA) { // a outside, intersect with clip edge
-                  a = intersect$2(a, b, codeA, bbox);
-                  codeA = bitCode$1(a, bbox);
+              event.preventDefault();
+              search.node().focus();
+          }
 
-              } else { // b outside
-                  b = intersect$2(a, b, codeB, bbox);
-                  codeB = bitCode$1(b, bbox);
+
+          function keydown() {
+              if (event.keyCode === 27) {  // escape
+                  search.node().blur();
               }
           }
 
-          codeA = lastCode;
-      }
 
-      if (part.length) result.push(part);
+          function keypress() {
+              var q = search.property('value'),
+                  items = list.selectAll('.feature-list-item');
+              if (event.keyCode === 13 && q.length && items.size()) {  // return
+                  click(items.datum());
+              }
+          }
 
-      return result;
-  }
 
-  // Sutherland-Hodgeman polygon clipping algorithm
+          function inputevent() {
+              _geocodeResults = undefined;
+              drawList();
+          }
 
-  function polygonclip$1(points, bbox) {
 
-      var result, edge, prev, prevInside, i, p, inside;
+          function clearSearch() {
+              search.property('value', '');
+              drawList();
+          }
 
-      // clip against each side of the clip rectangle
-      for (edge = 1; edge <= 8; edge *= 2) {
-          result = [];
-          prev = points[points.length - 1];
-          prevInside = !(bitCode$1(prev, bbox) & edge);
 
-          for (i = 0; i < points.length; i++) {
-              p = points[i];
-              inside = !(bitCode$1(p, bbox) & edge);
+          function mapDrawn(e) {
+              if (e.full) {
+                  drawList();
+              }
+          }
 
-              // if segment goes through the clip window, add an intersection
-              if (inside !== prevInside) result.push(intersect$2(prev, p, edge, bbox));
 
-              if (inside) result.push(p); // add a point if it's inside
+          function features() {
+              var entities = {};
+              var result = [];
+              var graph = context.graph();
+              var q = search.property('value').toLowerCase();
 
-              prev = p;
-              prevInside = inside;
-          }
+              if (!q) return result;
 
-          points = result;
+              var idMatch = q.match(/^([nwr])([0-9]+)$/);
 
-          if (!points.length) break;
-      }
+              if (idMatch) {
+                  result.push({
+                      id: idMatch[0],
+                      geometry: idMatch[1] === 'n' ? 'point' : idMatch[1] === 'w' ? 'line' : 'relation',
+                      type: idMatch[1] === 'n' ? t('inspector.node') : idMatch[1] === 'w' ? t('inspector.way') : t('inspector.relation'),
+                      name: idMatch[2]
+                  });
+              }
 
-      return result;
-  }
+              var locationMatch = pair_1(q.toUpperCase()) || q.match(/^(-?\d+\.?\d*)\s+(-?\d+\.?\d*)$/);
 
-  // intersect a segment against one of the 4 lines that make up the bbox
+              if (locationMatch) {
+                  var loc = [parseFloat(locationMatch[0]), parseFloat(locationMatch[1])];
+                  result.push({
+                      id: -1,
+                      geometry: 'point',
+                      type: t('inspector.location'),
+                      name: dmsCoordinatePair([loc[1], loc[0]]),
+                      location: loc
+                  });
+              }
 
-  function intersect$2(a, b, edge, bbox) {
-      return edge & 8 ? [a[0] + (b[0] - a[0]) * (bbox[3] - a[1]) / (b[1] - a[1]), bbox[3]] : // top
-             edge & 4 ? [a[0] + (b[0] - a[0]) * (bbox[1] - a[1]) / (b[1] - a[1]), bbox[1]] : // bottom
-             edge & 2 ? [bbox[2], a[1] + (b[1] - a[1]) * (bbox[2] - a[0]) / (b[0] - a[0])] : // right
-             edge & 1 ? [bbox[0], a[1] + (b[1] - a[1]) * (bbox[0] - a[0]) / (b[0] - a[0])] : // left
-             null;
-  }
+              function addEntity(entity) {
+                  if (entity.id in entities || result.length > 200)
+                      return;
 
-  // bit code reflects the point position relative to the bbox:
+                  entities[entity.id] = true;
 
-  //         left  mid  right
-  //    top  1001  1000  1010
-  //    mid  0001  0000  0010
-  // bottom  0101  0100  0110
+                  var name = utilDisplayName(entity) || '';
+                  if (name.toLowerCase().indexOf(q) >= 0) {
+                      var matched = context.presets().match(entity, graph);
+                      var type = (matched && matched.name()) || utilDisplayType(entity.id);
 
-  function bitCode$1(p, bbox) {
-      var code = 0;
+                      result.push({
+                          id: entity.id,
+                          entity: entity,
+                          geometry: context.geometry(entity.id),
+                          type: type,
+                          name: name
+                      });
+                  }
 
-      if (p[0] < bbox[0]) code |= 1; // left
-      else if (p[0] > bbox[2]) code |= 2; // right
+                  graph.parentRelations(entity).forEach(function(parent) {
+                      addEntity(parent);
+                  });
+              }
 
-      if (p[1] < bbox[1]) code |= 4; // bottom
-      else if (p[1] > bbox[3]) code |= 8; // top
+              var visible = context.surface().selectAll('.point, .line, .area').nodes();
+              for (var i = 0; i < visible.length && result.length <= 200; i++) {
+                  var datum = visible[i].__data__;
+                  var entity = datum && datum.properties && datum.properties.entity;
+                  if (entity) { addEntity(entity); }
+              }
 
-      return code;
-  }
-  lineclip_1$1.default = default_1$1;
+              (_geocodeResults || []).forEach(function(d) {
+                  if (d.osm_type && d.osm_id) {    // some results may be missing these - #1890
 
-  var bboxClip_1 = createCommonjsModule(function (module, exports) {
-  var __importStar = (commonjsGlobal && commonjsGlobal.__importStar) || function (mod) {
-      if (mod && mod.__esModule) return mod;
-      var result = {};
-      if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
-      result["default"] = mod;
-      return result;
-  };
-  Object.defineProperty(exports, "__esModule", { value: true });
+                      // Make a temporary osmEntity so we can preset match
+                      // and better localize the search result - #4725
+                      var id = osmEntity.id.fromOSM(d.osm_type, d.osm_id);
+                      var tags = {};
+                      tags[d.class] = d.type;
 
+                      var attrs = { id: id, type: d.osm_type, tags: tags };
+                      if (d.osm_type === 'way') {   // for ways, add some fake closed nodes
+                          attrs.nodes = ['a','a'];  // so that geometry area is possible
+                      }
 
-  var lineclip = __importStar(lineclip_1$1);
-  /**
-   * Takes a {@link Feature} and a bbox and clips the feature to the bbox using
-   * [lineclip](https://github.com/mapbox/lineclip).
-   * May result in degenerate edges when clipping Polygons.
-   *
-   * @name bboxClip
-   * @param {Feature<LineString|MultiLineString|Polygon|MultiPolygon>} feature feature to clip to the bbox
-   * @param {BBox} bbox extent in [minX, minY, maxX, maxY] order
-   * @returns {Feature<LineString|MultiLineString|Polygon|MultiPolygon>} clipped Feature
-   * @example
-   * var bbox = [0, 0, 10, 10];
-   * var poly = turf.polygon([[[2, 2], [8, 4], [12, 8], [3, 7], [2, 2]]]);
-   *
-   * var clipped = turf.bboxClip(poly, bbox);
-   *
-   * //addToMap
-   * var addToMap = [bbox, poly, clipped]
-   */
-  function bboxClip(feature, bbox) {
-      var geom = invariant.getGeom(feature);
-      var type = geom.type;
-      var properties = feature.type === "Feature" ? feature.properties : {};
-      var coords = geom.coordinates;
-      switch (type) {
-          case "LineString":
-          case "MultiLineString":
-              var lines_1 = [];
-              if (type === "LineString") {
-                  coords = [coords];
-              }
-              coords.forEach(function (line) {
-                  lineclip.polyline(line, bbox, lines_1);
+                      var tempEntity = osmEntity(attrs);
+                      var tempGraph = coreGraph([tempEntity]);
+                      var matched = context.presets().match(tempEntity, tempGraph);
+                      var type = (matched && matched.name()) || utilDisplayType(id);
+
+                      result.push({
+                          id: tempEntity.id,
+                          geometry: tempEntity.geometry(tempGraph),
+                          type: type,
+                          name: d.display_name,
+                          extent: new geoExtent(
+                              [parseFloat(d.boundingbox[3]), parseFloat(d.boundingbox[0])],
+                              [parseFloat(d.boundingbox[2]), parseFloat(d.boundingbox[1])])
+                      });
+                  }
               });
-              if (lines_1.length === 1) {
-                  return helpers.lineString(lines_1[0], properties);
+
+              return result;
+          }
+
+
+          function drawList() {
+              var value = search.property('value');
+              var results = features();
+
+              list.classed('filtered', value.length);
+
+              var noResultsWorldwide = _geocodeResults && _geocodeResults.length === 0;
+
+              var resultsIndicator = list.selectAll('.no-results-item')
+                  .data([0])
+                  .enter()
+                  .append('button')
+                  .property('disabled', true)
+                  .attr('class', 'no-results-item')
+                  .call(svgIcon('#iD-icon-alert', 'pre-text'));
+
+              resultsIndicator.append('span')
+                  .attr('class', 'entity-name');
+
+              list.selectAll('.no-results-item .entity-name')
+                  .text(noResultsWorldwide ? t('geocoder.no_results_worldwide') : t('geocoder.no_results_visible'));
+
+              if (services.geocoder) {
+                list.selectAll('.geocode-item')
+                    .data([0])
+                    .enter()
+                    .append('button')
+                    .attr('class', 'geocode-item')
+                    .on('click', geocoderSearch)
+                    .append('div')
+                    .attr('class', 'label')
+                    .append('span')
+                    .attr('class', 'entity-name')
+                    .text(t('geocoder.search'));
               }
-              return helpers.multiLineString(lines_1, properties);
-          case "Polygon":
-              return helpers.polygon(clipPolygon(coords, bbox), properties);
-          case "MultiPolygon":
-              return helpers.multiPolygon(coords.map(function (poly) {
-                  return clipPolygon(poly, bbox);
-              }), properties);
-          default:
-              throw new Error("geometry " + type + " not supported");
-      }
-  }
-  exports.default = bboxClip;
-  function clipPolygon(rings, bbox) {
-      var outRings = [];
-      for (var _i = 0, rings_1 = rings; _i < rings_1.length; _i++) {
-          var ring = rings_1[_i];
-          var clipped = lineclip.polygon(ring, bbox);
-          if (clipped.length > 0) {
-              if (clipped[0][0] !== clipped[clipped.length - 1][0] || clipped[0][1] !== clipped[clipped.length - 1][1]) {
-                  clipped.push(clipped[0]);
+
+              list.selectAll('.no-results-item')
+                  .style('display', (value.length && !results.length) ? 'block' : 'none');
+
+              list.selectAll('.geocode-item')
+                  .style('display', (value && _geocodeResults === undefined) ? 'block' : 'none');
+
+              list.selectAll('.feature-list-item')
+                  .data([-1])
+                  .remove();
+
+              var items = list.selectAll('.feature-list-item')
+                  .data(results, function(d) { return d.id; });
+
+              var enter = items.enter()
+                  .insert('button', '.geocode-item')
+                  .attr('class', 'feature-list-item')
+                  .on('mouseover', mouseover)
+                  .on('mouseout', mouseout)
+                  .on('click', click);
+
+              var label = enter
+                  .append('div')
+                  .attr('class', 'label');
+
+              label
+                  .each(function(d) {
+                      select(this)
+                          .call(svgIcon('#iD-icon-' + d.geometry, 'pre-text'));
+                  });
+
+              label
+                  .append('span')
+                  .attr('class', 'entity-type')
+                  .text(function(d) { return d.type; });
+
+              label
+                  .append('span')
+                  .attr('class', 'entity-name')
+                  .text(function(d) { return d.name; });
+
+              enter
+                  .style('opacity', 0)
+                  .transition()
+                  .style('opacity', 1);
+
+              items.order();
+
+              items.exit()
+                  .remove();
+          }
+
+
+          function mouseover(d) {
+              if (d.id === -1) return;
+
+              context.surface().selectAll(utilEntityOrMemberSelector([d.id], context.graph()))
+                  .classed('hover', true);
+          }
+
+
+          function mouseout() {
+              context.surface().selectAll('.hover')
+                  .classed('hover', false);
+          }
+
+
+          function click(d) {
+              event.preventDefault();
+              if (d.location) {
+                  context.map().centerZoomEase([d.location[1], d.location[0]], 19);
               }
-              if (clipped.length >= 4) {
-                  outRings.push(clipped);
+              else if (d.entity) {
+                  if (d.entity.type === 'node') {
+                      context.map().center(d.entity.loc);
+                  } else if (d.entity.type === 'way') {
+                      var center = context.projection(context.map().center());
+                      var edge = geoChooseEdge(context.childNodes(d.entity), center, context.projection);
+                      context.map().center(edge.loc);
+                  }
+                  context.enter(modeSelect(context, [d.entity.id]));
+              } else {
+                  context.zoomToEntity(d.id);
               }
           }
+
+
+          function geocoderSearch() {
+              services.geocoder.search(search.property('value'), function (err, resp) {
+                  _geocodeResults = resp || [];
+                  drawList();
+              });
+          }
       }
-      return outRings;
+
+
+      return featureList;
   }
-  });
 
-  var turf_bboxClip = unwrapExports(bboxClip_1);
+  var _flashTimer;
 
-  var martinez_umd = createCommonjsModule(function (module, exports) {
-  /**
-   * martinez v0.5.0
-   * Martinez polygon clipping algorithm, does boolean operation on polygons (multipolygons, polygons with holes etc): intersection, union, difference, xor
-   *
-   * @author Alex Milevski <info@w8r.name>
-   * @license MIT
-   * @preserve
-   */
 
-  (function (global, factory) {
-    factory(exports);
-  }(commonjsGlobal, (function (exports) {
-    function DEFAULT_COMPARE (a, b) { return a > b ? 1 : a < b ? -1 : 0; }
+  function uiFlash() {
+      var _duration = 2000;
+      var _iconName = '#iD-icon-no';
+      var _iconClass = 'disabled';
+      var _text = '';
+      var _textClass;
+
+
+      function flash() {
+          if (_flashTimer) {
+              _flashTimer.stop();
+          }
+
+          select('#footer-wrap')
+              .attr('class', 'footer-hide');
+          select('#flash-wrap')
+              .attr('class', 'footer-show');
+
+          var content = select('#flash-wrap').selectAll('.flash-content')
+              .data([0]);
+
+          // Enter
+          var contentEnter = content.enter()
+              .append('div')
+              .attr('class', 'flash-content');
 
-    var SplayTree = function SplayTree(compare, noDuplicates) {
-      if ( compare === void 0 ) compare = DEFAULT_COMPARE;
-      if ( noDuplicates === void 0 ) noDuplicates = false;
+          var iconEnter = contentEnter
+              .append('svg')
+              .attr('class', 'flash-icon')
+              .append('g')
+              .attr('transform', 'translate(10,10)');
 
-      this._compare = compare;
-      this._root = null;
-      this._size = 0;
-      this._noDuplicates = !!noDuplicates;
-    };
+          iconEnter
+              .append('circle')
+              .attr('r', 9);
 
-    var prototypeAccessors = { size: { configurable: true } };
+          iconEnter
+              .append('use')
+              .attr('transform', 'translate(-7,-7)')
+              .attr('width', '14')
+              .attr('height', '14');
 
+          contentEnter
+              .append('div')
+              .attr('class', 'flash-text');
 
-    SplayTree.prototype.rotateLeft = function rotateLeft (x) {
-      var y = x.right;
-      if (y) {
-        x.right = y.left;
-        if (y.left) { y.left.parent = x; }
-        y.parent = x.parent;
-      }
 
-      if (!x.parent)              { this._root = y; }
-      else if (x === x.parent.left) { x.parent.left = y; }
-      else                        { x.parent.right = y; }
-      if (y) { y.left = x; }
-      x.parent = y;
-    };
+          // Update
+          content = content
+              .merge(contentEnter);
 
+          content
+              .selectAll('.flash-icon')
+              .attr('class', 'flash-icon ' + (_iconClass || ''));
 
-    SplayTree.prototype.rotateRight = function rotateRight (x) {
-      var y = x.left;
-      if (y) {
-        x.left = y.right;
-        if (y.right) { y.right.parent = x; }
-        y.parent = x.parent;
-      }
+          content
+              .selectAll('.flash-icon use')
+              .attr('xlink:href', _iconName);
 
-      if (!x.parent)             { this._root = y; }
-      else if(x === x.parent.left) { x.parent.left = y; }
-      else                       { x.parent.right = y; }
-      if (y) { y.right = x; }
-      x.parent = y;
-    };
+          content
+              .selectAll('.flash-text')
+              .attr('class', 'flash-text ' + (_textClass || ''))
+              .text(_text);
 
 
-    SplayTree.prototype._splay = function _splay (x) {
-        var this$1 = this;
+          _flashTimer = timeout$1(function() {
+              _flashTimer = null;
+              select('#footer-wrap')
+                  .attr('class', 'footer-show');
+              select('#flash-wrap')
+                  .attr('class', 'footer-hide');
+          }, _duration);
 
-      while (x.parent) {
-        var p = x.parent;
-        if (!p.parent) {
-          if (p.left === x) { this$1.rotateRight(p); }
-          else            { this$1.rotateLeft(p); }
-        } else if (p.left === x && p.parent.left === p) {
-          this$1.rotateRight(p.parent);
-          this$1.rotateRight(p);
-        } else if (p.right === x && p.parent.right === p) {
-          this$1.rotateLeft(p.parent);
-          this$1.rotateLeft(p);
-        } else if (p.left === x && p.parent.right === p) {
-          this$1.rotateRight(p);
-          this$1.rotateLeft(p);
-        } else {
-          this$1.rotateLeft(p);
-          this$1.rotateRight(p);
-        }
+          return content;
       }
-    };
 
 
-    SplayTree.prototype.splay = function splay (x) {
-        var this$1 = this;
+      flash.duration = function(_) {
+          if (!arguments.length) return _duration;
+          _duration = _;
+          return flash;
+      };
 
-      var p, gp, ggp, l, r;
+      flash.text = function(_) {
+          if (!arguments.length) return _text;
+          _text = _;
+          return flash;
+      };
 
-      while (x.parent) {
-        p = x.parent;
-        gp = p.parent;
+      flash.textClass = function(_) {
+          if (!arguments.length) return _textClass;
+          _textClass = _;
+          return flash;
+      };
 
-        if (gp && gp.parent) {
-          ggp = gp.parent;
-          if (ggp.left === gp) { ggp.left= x; }
-          else               { ggp.right = x; }
-          x.parent = ggp;
-        } else {
-          x.parent = null;
-          this$1._root = x;
-        }
+      flash.iconName = function(_) {
+          if (!arguments.length) return _iconName;
+          _iconName = _;
+          return flash;
+      };
 
-        l = x.left; r = x.right;
+      flash.iconClass = function(_) {
+          if (!arguments.length) return _iconClass;
+          _iconClass = _;
+          return flash;
+      };
 
-        if (x === p.left) { // left
-          if (gp) {
-            if (gp.left === p) {
-              /* zig-zig */
-              if (p.right) {
-                gp.left = p.right;
-                gp.left.parent = gp;
-              } else { gp.left = null; }
+      return flash;
+  }
 
-              p.right = gp;
-              gp.parent = p;
-            } else {
-              /* zig-zag */
-              if (l) {
-                gp.right = l;
-                l.parent = gp;
-              } else { gp.right = null; }
+  function uiImproveOsmComments() {
+      var _error;
 
-              x.left  = gp;
-              gp.parent = x;
-            }
-          }
-          if (r) {
-            p.left = r;
-            r.parent = p;
-          } else { p.left = null; }
 
-          x.right= p;
-          p.parent = x;
-        } else { // right
-          if (gp) {
-            if (gp.right === p) {
-              /* zig-zig */
-              if (p.left) {
-                gp.right = p.left;
-                gp.right.parent = gp;
-              } else { gp.right = null; }
+      function errorComments(selection) {
+          // make the div immediately so it appears above the buttons
+          var comments = selection.selectAll('.comments-container')
+              .data([0]);
 
-              p.left = gp;
-              gp.parent = p;
-            } else {
-              /* zig-zag */
-              if (r) {
-                gp.left = r;
-                r.parent = gp;
-              } else { gp.left = null; }
+          comments = comments.enter()
+              .append('div')
+              .attr('class', 'comments-container')
+              .merge(comments);
 
-              x.right = gp;
-              gp.parent = x;
-            }
-          }
-          if (l) {
-            p.right = l;
-            l.parent = p;
-          } else { p.right = null; }
+          // must retrieve comments from API before they can be displayed
+          services.improveOSM.getComments(_error, function(err, d) {
+              if (!d.comments) { return; } // nothing to do here
 
-          x.left = p;
-          p.parent = x;
-        }
-      }
-    };
+              var commentEnter = comments.selectAll('.comment')
+                  .data(d.comments)
+                  .enter()
+                  .append('div')
+                  .attr('class', 'comment');
 
+              commentEnter
+                  .append('div')
+                  .attr('class', 'comment-avatar')
+                  .call(svgIcon('#iD-icon-avatar', 'comment-avatar-icon'));
 
-    SplayTree.prototype.replace = function replace (u, v) {
-      if (!u.parent) { this._root = v; }
-      else if (u === u.parent.left) { u.parent.left = v; }
-      else { u.parent.right = v; }
-      if (v) { v.parent = u.parent; }
-    };
+              var mainEnter = commentEnter
+                  .append('div')
+                  .attr('class', 'comment-main');
 
+              var metadataEnter = mainEnter
+                  .append('div')
+                  .attr('class', 'comment-metadata');
 
-    SplayTree.prototype.minNode = function minNode (u) {
-        if ( u === void 0 ) u = this._root;
+              metadataEnter
+                  .append('div')
+                  .attr('class', 'comment-author')
+                  .each(function(d) {
+                      var selection = select(this);
+                      var osm = services.osm;
+                      if (osm && d.username) {
+                          selection = selection
+                              .append('a')
+                              .attr('class', 'comment-author-link')
+                              .attr('href', osm.userURL(d.username))
+                              .attr('tabindex', -1)
+                              .attr('target', '_blank');
+                      }
+                      selection
+                          .text(function(d) { return d.username; });
+                  });
 
-      if (u) { while (u.left) { u = u.left; } }
-      return u;
-    };
+              metadataEnter
+                  .append('div')
+                  .attr('class', 'comment-date')
+                  .text(function(d) {
+                      return t('note.status.commented', { when: localeDateString(d.timestamp) });
+                  });
 
+              mainEnter
+                  .append('div')
+                  .attr('class', 'comment-text')
+                  .append('p')
+                  .text(function(d) { return d.text; });
+          });
+      }
 
-    SplayTree.prototype.maxNode = function maxNode (u) {
-        if ( u === void 0 ) u = this._root;
+      function localeDateString(s) {
+          if (!s) return null;
+          var detected = utilDetect();
+          var options = { day: 'numeric', month: 'short', year: 'numeric' };
+          var d = new Date(s * 1000); // timestamp is served in seconds, date takes ms
+          if (isNaN(d.getTime())) return null;
+          return d.toLocaleDateString(detected.locale, options);
+      }
 
-      if (u) { while (u.right) { u = u.right; } }
-      return u;
-    };
+      errorComments.error = function(val) {
+          if (!arguments.length) return _error;
+          _error = val;
+          return errorComments;
+      };
 
+      return errorComments;
+  }
 
-    SplayTree.prototype.insert = function insert (key, data) {
-      var z = this._root;
-      var p = null;
-      var comp = this._compare;
-      var cmp;
+  function uiImproveOsmDetails(context) {
+      var _error;
 
-      if (this._noDuplicates) {
-        while (z) {
-          p = z;
-          cmp = comp(z.key, key);
-          if (cmp === 0) { return; }
-          else if (comp(z.key, key) < 0) { z = z.right; }
-          else { z = z.left; }
-        }
-      } else {
-        while (z) {
-          p = z;
-          if (comp(z.key, key) < 0) { z = z.right; }
-          else { z = z.left; }
-        }
-      }
 
-      z = { key: key, data: data, left: null, right: null, parent: p };
+      function errorDetail(d) {
+          var unknown = t('inspector.unknown');
 
-      if (!p)                        { this._root = z; }
-      else if (comp(p.key, z.key) < 0) { p.right = z; }
-      else                           { p.left= z; }
+          if (!d) return unknown;
 
-      this.splay(z);
-      this._size++;
-      return z;
-    };
+          if (d.desc) return d.desc;
 
+          var errorType = d.error_key;
+          var et = en.QA.improveOSM.error_types[errorType];
 
-    SplayTree.prototype.find = function find (key) {
-      var z  = this._root;
-      var comp = this._compare;
-      while (z) {
-        var cmp = comp(z.key, key);
-        if    (cmp < 0) { z = z.right; }
-        else if (cmp > 0) { z = z.left; }
-        else            { return z; }
-      }
-      return null;
-    };
+          var detail;
+          if (et && et.description) {
+              detail = t('QA.improveOSM.error_types.' + errorType + '.description', d.replacements);
+          } else {
+              detail = unknown;
+          }
 
-    /**
-     * Whether the tree contains a node with the given key
-     * @param{Key} key
-     * @return {boolean} true/false
-     */
-    SplayTree.prototype.contains = function contains (key) {
-      var node     = this._root;
-      var comparator = this._compare;
-      while (node){
-        var cmp = comparator(key, node.key);
-        if    (cmp === 0) { return true; }
-        else if (cmp < 0) { node = node.left; }
-        else              { node = node.right; }
+          return detail;
       }
 
-      return false;
-    };
 
+      function improveOsmDetails(selection) {
+          var details = selection.selectAll('.error-details')
+              .data(
+                  (_error ? [_error] : []),
+                  function(d) { return d.id + '-' + (d.status || 0); }
+              );
 
-    SplayTree.prototype.remove = function remove (key) {
-      var z = this.find(key);
+          details.exit()
+              .remove();
 
-      if (!z) { return false; }
+          var detailsEnter = details.enter()
+              .append('div')
+              .attr('class', 'error-details error-details-container');
 
-      this.splay(z);
 
-      if (!z.left) { this.replace(z, z.right); }
-      else if (!z.right) { this.replace(z, z.left); }
-      else {
-        var y = this.minNode(z.right);
-        if (y.parent !== z) {
-          this.replace(y, y.right);
-          y.right = z.right;
-          y.right.parent = y;
-        }
-        this.replace(z, y);
-        y.left = z.left;
-        y.left.parent = y;
-      }
+          // description
+          var descriptionEnter = detailsEnter
+              .append('div')
+              .attr('class', 'error-details-description');
 
-      this._size--;
-      return true;
-    };
+          descriptionEnter
+              .append('h4')
+              .text(function() { return t('QA.keepRight.detail_description'); });
 
+          descriptionEnter
+              .append('div')
+              .attr('class', 'error-details-description-text')
+              .html(errorDetail);
 
-    SplayTree.prototype.removeNode = function removeNode (z) {
-      if (!z) { return false; }
+          // If there are entity links in the error message..
+          var relatedEntities = [];
+          descriptionEnter.selectAll('.error_entity_link, .error_object_link')
+              .each(function() {
+                  var link = select(this);
+                  var isObjectLink = link.classed('error_object_link');
+                  var entityID = isObjectLink ?
+                      (utilEntityRoot(_error.object_type) + _error.object_id)
+                      : this.textContent;
+                  var entity = context.hasEntity(entityID);
 
-      this.splay(z);
+                  relatedEntities.push(entityID);
 
-      if (!z.left) { this.replace(z, z.right); }
-      else if (!z.right) { this.replace(z, z.left); }
-      else {
-        var y = this.minNode(z.right);
-        if (y.parent !== z) {
-          this.replace(y, y.right);
-          y.right = z.right;
-          y.right.parent = y;
-        }
-        this.replace(z, y);
-        y.left = z.left;
-        y.left.parent = y;
-      }
+                  // Add click handler
+                  link
+                      .on('mouseover', function() {
+                          context.surface().selectAll(utilEntityOrMemberSelector([entityID], context.graph()))
+                              .classed('hover', true);
+                      })
+                      .on('mouseout', function() {
+                          context.surface().selectAll('.hover')
+                              .classed('hover', false);
+                      })
+                      .on('click', function() {
+                          event.preventDefault();
+                          var osmlayer = context.layers().layer('osm');
+                          if (!osmlayer.enabled()) {
+                              osmlayer.enabled(true);
+                          }
 
-      this._size--;
-      return true;
-    };
+                          context.map().centerZoom(_error.loc, 20);
 
+                          if (entity) {
+                              context.enter(modeSelect(context, [entityID]));
+                          } else {
+                              context.loadEntity(entityID, function() {
+                                  context.enter(modeSelect(context, [entityID]));
+                              });
+                          }
+                      });
 
-    SplayTree.prototype.erase = function erase (key) {
-      var z = this.find(key);
-      if (!z) { return; }
+                  // Replace with friendly name if possible
+                  // (The entity may not yet be loaded into the graph)
+                  if (entity) {
+                      var name = utilDisplayName(entity);  // try to use common name
 
-      this.splay(z);
+                      if (!name && !isObjectLink) {
+                          var preset = context.presets().match(entity, context.graph());
+                          name = preset && !preset.isFallback() && preset.name();  // fallback to preset name
+                      }
 
-      var s = z.left;
-      var t = z.right;
+                      if (name) {
+                          this.innerText = name;
+                      }
+                  }
+              });
 
-      var sMax = null;
-      if (s) {
-        s.parent = null;
-        sMax = this.maxNode(s);
-        this.splay(sMax);
-        this._root = sMax;
-      }
-      if (t) {
-        if (s) { sMax.right = t; }
-        else { this._root = t; }
-        t.parent = sMax;
+          // Don't hide entities related to this error - #5880
+          context.features().forceVisible(relatedEntities);
       }
 
-      this._size--;
-    };
 
-    /**
-     * Removes and returns the node with smallest key
-     * @return {?Node}
-     */
-    SplayTree.prototype.pop = function pop () {
-      var node = this._root, returnValue = null;
-      if (node) {
-        while (node.left) { node = node.left; }
-        returnValue = { key: node.key, data: node.data };
-        this.remove(node.key);
-      }
-      return returnValue;
-    };
+      improveOsmDetails.error = function(val) {
+          if (!arguments.length) return _error;
+          _error = val;
+          return improveOsmDetails;
+      };
 
 
-    /* eslint-disable class-methods-use-this */
+      return improveOsmDetails;
+  }
 
-    /**
-     * Successor node
-     * @param{Node} node
-     * @return {?Node}
-     */
-    SplayTree.prototype.next = function next (node) {
-      var successor = node;
-      if (successor) {
-        if (successor.right) {
-          successor = successor.right;
-          while (successor && successor.left) { successor = successor.left; }
-        } else {
-          successor = node.parent;
-          while (successor && successor.right === node) {
-            node = successor; successor = successor.parent;
-          }
-        }
-      }
-      return successor;
-    };
+  function uiImproveOsmEditor(context) {
+      var dispatch$1 = dispatch('change');
+      var errorDetails = uiImproveOsmDetails(context);
+      var errorComments = uiImproveOsmComments(context);
+      var errorHeader = uiImproveOsmHeader(context);
+      var quickLinks = uiQuickLinks();
 
+      var _error;
 
-    /**
-     * Predecessor node
-     * @param{Node} node
-     * @return {?Node}
-     */
-    SplayTree.prototype.prev = function prev (node) {
-      var predecessor = node;
-      if (predecessor) {
-        if (predecessor.left) {
-          predecessor = predecessor.left;
-          while (predecessor && predecessor.right) { predecessor = predecessor.right; }
-        } else {
-          predecessor = node.parent;
-          while (predecessor && predecessor.left === node) {
-            node = predecessor;
-            predecessor = predecessor.parent;
-          }
-        }
-      }
-      return predecessor;
-    };
-    /* eslint-enable class-methods-use-this */
 
+      function improveOsmEditor(selection) {
+          // quick links
+          var choices = [{
+              id: 'zoom_to',
+              label: 'inspector.zoom_to.title',
+              tooltip: function() {
+                  return uiTooltipHtml(t('inspector.zoom_to.tooltip_issue'), t('inspector.zoom_to.key'));
+              },
+              click: function zoomTo() {
+                  context.mode().zoomToSelected();
+              }
+          }];
+
+
+          var header = selection.selectAll('.header')
+              .data([0]);
+
+          var headerEnter = header.enter()
+              .append('div')
+              .attr('class', 'header fillL');
 
-    /**
-     * @param{forEachCallback} callback
-     * @return {SplayTree}
-     */
-    SplayTree.prototype.forEach = function forEach (callback) {
-      var current = this._root;
-      var s = [], done = false, i = 0;
+          headerEnter
+              .append('button')
+              .attr('class', 'fr error-editor-close')
+              .on('click', function() {
+                  context.enter(modeBrowse(context));
+              })
+              .call(svgIcon('#iD-icon-close'));
 
-      while (!done) {
-        // Reach the left most Node of the current Node
-        if (current) {
-          // Place pointer to a tree node on the stack
-          // before traversing the node's left subtree
-          s.push(current);
-          current = current.left;
-        } else {
-          // BackTrack from the empty subtree and visit the Node
-          // at the top of the stack; however, if the stack is
-          // empty you are done
-          if (s.length > 0) {
-            current = s.pop();
-            callback(current, i++);
+          headerEnter
+              .append('h3')
+              .text(t('QA.improveOSM.title'));
 
-            // We have visited the node and its left
-            // subtree. Now, it's right subtree's turn
-            current = current.right;
-          } else { done = true; }
-        }
-      }
-      return this;
-    };
 
+          var body = selection.selectAll('.body')
+              .data([0]);
 
-    /**
-     * Walk key range from `low` to `high`. Stops if `fn` returns a value.
-     * @param{Key}    low
-     * @param{Key}    high
-     * @param{Function} fn
-     * @param{*?}     ctx
-     * @return {SplayTree}
-     */
-    SplayTree.prototype.range = function range (low, high, fn, ctx) {
-        var this$1 = this;
+          body = body.enter()
+              .append('div')
+              .attr('class', 'body')
+              .merge(body);
 
-      var Q = [];
-      var compare = this._compare;
-      var node = this._root, cmp;
+          var editor = body.selectAll('.error-editor')
+              .data([0]);
 
-      while (Q.length !== 0 || node) {
-        if (node) {
-          Q.push(node);
-          node = node.left;
-        } else {
-          node = Q.pop();
-          cmp = compare(node.key, high);
-          if (cmp > 0) {
-            break;
-          } else if (compare(node.key, low) >= 0) {
-            if (fn.call(ctx, node)) { return this$1; } // stop if smth is returned
-          }
-          node = node.right;
-        }
+          editor.enter()
+              .append('div')
+              .attr('class', 'modal-section error-editor')
+              .merge(editor)
+              .call(errorHeader.error(_error))
+              .call(quickLinks.choices(choices))
+              .call(errorDetails.error(_error))
+              .call(errorComments.error(_error))
+              .call(improveOsmSaveSection);
       }
-      return this;
-    };
 
-    /**
-     * Returns all keys in order
-     * @return {Array<Key>}
-     */
-    SplayTree.prototype.keys = function keys () {
-      var current = this._root;
-      var s = [], r = [], done = false;
+      function improveOsmSaveSection(selection) {
+          var isSelected = (_error && _error.id === context.selectedErrorID());
+          var isShown = (_error && (isSelected || _error.newComment || _error.comment));
+          var saveSection = selection.selectAll('.error-save')
+              .data(
+                  (isShown ? [_error] : []),
+                  function(d) { return d.id + '-' + (d.status || 0); }
+              );
 
-      while (!done) {
-        if (current) {
-          s.push(current);
-          current = current.left;
-        } else {
-          if (s.length > 0) {
-            current = s.pop();
-            r.push(current.key);
-            current = current.right;
-          } else { done = true; }
-        }
-      }
-      return r;
-    };
+          // exit
+          saveSection.exit()
+              .remove();
 
+          // enter
+          var saveSectionEnter = saveSection.enter()
+              .append('div')
+              .attr('class', 'error-save save-section cf');
 
-    /**
-     * Returns `data` fields of all nodes in order.
-     * @return {Array<Value>}
-     */
-    SplayTree.prototype.values = function values () {
-      var current = this._root;
-      var s = [], r = [], done = false;
+          saveSectionEnter
+              .append('h4')
+              .attr('class', '.error-save-header')
+              .text(t('note.newComment'));
 
-      while (!done) {
-        if (current) {
-          s.push(current);
-          current = current.left;
-        } else {
-          if (s.length > 0) {
-            current = s.pop();
-            r.push(current.data);
-            current = current.right;
-          } else { done = true; }
-        }
-      }
-      return r;
-    };
+          saveSectionEnter
+              .append('textarea')
+              .attr('class', 'new-comment-input')
+              .attr('placeholder', t('QA.keepRight.comment_placeholder'))
+              .attr('maxlength', 1000)
+              .property('value', function(d) { return d.newComment; })
+              .call(utilNoAuto)
+              .on('input', changeInput)
+              .on('blur', changeInput);
 
+          // update
+          saveSection = saveSectionEnter
+              .merge(saveSection)
+              .call(errorSaveButtons);
 
-    /**
-     * Returns node at given index
-     * @param{number} index
-     * @return {?Node}
-     */
-    SplayTree.prototype.at = function at (index) {
-      // removed after a consideration, more misleading than useful
-      // index = index % this.size;
-      // if (index < 0) index = this.size - index;
+          function changeInput() {
+              var input = select(this);
+              var val = input.property('value').trim();
 
-      var current = this._root;
-      var s = [], done = false, i = 0;
+              if (val === '') {
+                  val = undefined;
+              }
 
-      while (!done) {
-        if (current) {
-          s.push(current);
-          current = current.left;
-        } else {
-          if (s.length > 0) {
-            current = s.pop();
-            if (i === index) { return current; }
-            i++;
-            current = current.right;
-          } else { done = true; }
-        }
-      }
-      return null;
-    };
+              // store the unsaved comment with the error itself
+              _error = _error.update({ newComment: val });
 
-    /**
-     * Bulk-load items. Both array have to be same size
-     * @param{Array<Key>}  keys
-     * @param{Array<Value>}[values]
-     * @param{Boolean}     [presort=false] Pre-sort keys and values, using
-     *                                       tree's comparator. Sorting is done
-     *                                       in-place
-     * @return {AVLTree}
-     */
-    SplayTree.prototype.load = function load (keys, values, presort) {
-        if ( keys === void 0 ) keys = [];
-        if ( values === void 0 ) values = [];
-        if ( presort === void 0 ) presort = false;
+              var errorService = services.improveOSM;
+              if (errorService) {
+                  errorService.replaceError(_error);
+              }
 
-      if (this._size !== 0) { throw new Error('bulk-load: tree is not empty'); }
-      var size = keys.length;
-      if (presort) { sort(keys, values, 0, size - 1, this._compare); }
-      this._root = loadRecursive(null, keys, values, 0, size);
-      this._size = size;
-      return this;
-    };
+              saveSection
+                  .call(errorSaveButtons);
+          }
+      }
 
+      function errorSaveButtons(selection) {
+          var isSelected = (_error && _error.id === context.selectedErrorID());
+          var buttonSection = selection.selectAll('.buttons')
+              .data((isSelected ? [_error] : []), function(d) { return d.status + d.id; });
 
-    SplayTree.prototype.min = function min () {
-      var node = this.minNode(this._root);
-      if (node) { return node.key; }
-      else    { return null; }
-    };
+          // exit
+          buttonSection.exit()
+              .remove();
 
+          // enter
+          var buttonEnter = buttonSection.enter()
+              .append('div')
+              .attr('class', 'buttons');
 
-    SplayTree.prototype.max = function max () {
-      var node = this.maxNode(this._root);
-      if (node) { return node.key; }
-      else    { return null; }
-    };
+          buttonEnter
+              .append('button')
+              .attr('class', 'button comment-button action')
+              .text(t('QA.keepRight.save_comment'));
 
-    SplayTree.prototype.isEmpty = function isEmpty () { return this._root === null; };
-    prototypeAccessors.size.get = function () { return this._size; };
+          buttonEnter
+              .append('button')
+              .attr('class', 'button close-button action');
 
+          buttonEnter
+              .append('button')
+              .attr('class', 'button ignore-button action');
 
-    /**
-     * Create a tree and load it with items
-     * @param{Array<Key>}        keys
-     * @param{Array<Value>?}      [values]
 
-     * @param{Function?}          [comparator]
-     * @param{Boolean?}           [presort=false] Pre-sort keys and values, using
-     *                                             tree's comparator. Sorting is done
-     *                                             in-place
-     * @param{Boolean?}           [noDuplicates=false] Allow duplicates
-     * @return {SplayTree}
-     */
-    SplayTree.createTree = function createTree (keys, values, comparator, presort, noDuplicates) {
-      return new SplayTree(comparator, noDuplicates).load(keys, values, presort);
-    };
+          // update
+          buttonSection = buttonSection
+              .merge(buttonEnter);
 
-    Object.defineProperties( SplayTree.prototype, prototypeAccessors );
+          buttonSection.select('.comment-button')
+              .attr('disabled', function(d) {
+                  return d.newComment === undefined ? true : null;
+              })
+              .on('click.comment', function(d) {
+                  this.blur();    // avoid keeping focus on the button - #4641
+                  var errorService = services.improveOSM;
+                  if (errorService) {
+                      errorService.postUpdate(d, function(err, error) {
+                          dispatch$1.call('change', error);
+                      });
+                  }
+              });
 
+          buttonSection.select('.close-button')
+              .text(function(d) {
+                  var andComment = (d.newComment !== undefined ? '_comment' : '');
+                  return t('QA.keepRight.close' + andComment);
+              })
+              .on('click.close', function(d) {
+                  this.blur();    // avoid keeping focus on the button - #4641
+                  var errorService = services.improveOSM;
+                  if (errorService) {
+                      d.newStatus = 'SOLVED';
+                      errorService.postUpdate(d, function(err, error) {
+                          dispatch$1.call('change', error);
+                      });
+                  }
+              });
 
-    function loadRecursive (parent, keys, values, start, end) {
-      var size = end - start;
-      if (size > 0) {
-        var middle = start + Math.floor(size / 2);
-        var key    = keys[middle];
-        var data   = values[middle];
-        var node   = { key: key, data: data, parent: parent };
-        node.left    = loadRecursive(node, keys, values, start, middle);
-        node.right   = loadRecursive(node, keys, values, middle + 1, end);
-        return node;
+          buttonSection.select('.ignore-button')
+              .text(function(d) {
+                  var andComment = (d.newComment !== undefined ? '_comment' : '');
+                  return t('QA.keepRight.ignore' + andComment);
+              })
+              .on('click.ignore', function(d) {
+                  this.blur();    // avoid keeping focus on the button - #4641
+                  var errorService = services.improveOSM;
+                  if (errorService) {
+                      d.newStatus = 'INVALID';
+                      errorService.postUpdate(d, function(err, error) {
+                          dispatch$1.call('change', error);
+                      });
+                  }
+              });
       }
-      return null;
-    }
 
+      improveOsmEditor.error = function(val) {
+          if (!arguments.length) return _error;
+          _error = val;
+          return improveOsmEditor;
+      };
 
-    function sort(keys, values, left, right, compare) {
-      if (left >= right) { return; }
 
-      var pivot = keys[(left + right) >> 1];
-      var i = left - 1;
-      var j = right + 1;
+      return utilRebind(improveOsmEditor, dispatch$1, 'on');
+  }
 
-      while (true) {
-        do { i++; } while (compare(keys[i], pivot) < 0);
-        do { j--; } while (compare(keys[j], pivot) > 0);
-        if (i >= j) { break; }
+  function uiImproveOsmHeader() {
+      var _error;
 
-        var tmp = keys[i];
-        keys[i] = keys[j];
-        keys[j] = tmp;
 
-        tmp = values[i];
-        values[i] = values[j];
-        values[j] = tmp;
+      function errorTitle(d) {
+          var unknown = t('inspector.unknown');
+
+          if (!d) return unknown;
+          var errorType = d.error_key;
+          var et = en.QA.improveOSM.error_types[errorType];
+
+          if (et && et.title) {
+              return t('QA.improveOSM.error_types.' + errorType + '.title');
+          } else {
+              return unknown;
+          }
       }
 
-      sort(keys, values,  left,     j, compare);
-      sort(keys, values, j + 1, right, compare);
-    }
 
-    var NORMAL               = 0;
-    var NON_CONTRIBUTING     = 1;
-    var SAME_TRANSITION      = 2;
-    var DIFFERENT_TRANSITION = 3;
+      function improveOsmHeader(selection) {
+          var header = selection.selectAll('.error-header')
+              .data(
+                  (_error ? [_error] : []),
+                  function(d) { return d.id + '-' + (d.status || 0); }
+              );
 
-    var INTERSECTION = 0;
-    var UNION        = 1;
-    var DIFFERENCE   = 2;
-    var XOR          = 3;
+          header.exit()
+              .remove();
 
-    /**
-     * @param  {SweepEvent} event
-     * @param  {SweepEvent} prev
-     * @param  {Operation} operation
-     */
-    function computeFields (event, prev, operation) {
-      // compute inOut and otherInOut fields
-      if (prev === null) {
-        event.inOut      = false;
-        event.otherInOut = true;
+          var headerEnter = header.enter()
+              .append('div')
+              .attr('class', 'error-header');
 
-      // previous line segment in sweepline belongs to the same polygon
-      } else {
-        if (event.isSubject === prev.isSubject) {
-          event.inOut      = !prev.inOut;
-          event.otherInOut = prev.otherInOut;
+          var iconEnter = headerEnter
+              .append('div')
+              .attr('class', 'error-header-icon')
+              .classed('new', function(d) { return d.id < 0; });
 
-        // previous line segment in sweepline belongs to the clipping polygon
-        } else {
-          event.inOut      = !prev.otherInOut;
-          event.otherInOut = prev.isVertical() ? !prev.inOut : prev.inOut;
-        }
+          var svgEnter = iconEnter
+              .append('svg')
+              .attr('width', '20px')
+              .attr('height', '30px')
+              .attr('viewbox', '0 0 20 30')
+              .attr('class', function(d) {
+                  return [
+                      'preset-icon-28',
+                      'qa_error',
+                      d.service,
+                      'error_id-' + d.id,
+                      'error_type-' + d.error_type,
+                      'category-' + d.category
+                  ].join(' ');
+              });
 
-        // compute prevInResult field
-        if (prev) {
-          event.prevInResult = (!inResult(prev, operation) || prev.isVertical())
-            ? prev.prevInResult : prev;
-        }
-      }
+          svgEnter
+              .append('polygon')
+              .attr('fill', 'currentColor')
+              .attr('class', 'qa_error-fill')
+              .attr('points', '16,3 4,3 1,6 1,17 4,20 7,20 10,27 13,20 16,20 19,17.033 19,6');
 
-      // check if the line segment belongs to the Boolean operation
-      event.inResult = inResult(event, operation);
-    }
+          svgEnter
+              .append('use')
+              .attr('class', 'icon-annotation')
+              .attr('width', '11px')
+              .attr('height', '11px')
+              .attr('transform', 'translate(4.5, 7)')
+              .attr('xlink:href', function(d) {
+                  var picon = d.icon;
 
+                  if (!picon) {
+                      return '';
+                  } else {
+                      var isMaki = /^maki-/.test(picon);
+                      return '#' + picon + (isMaki ? '-11' : '');
+                  }
+              });
 
-    /* eslint-disable indent */
-    function inResult(event, operation) {
-      switch (event.type) {
-        case NORMAL:
-          switch (operation) {
-            case INTERSECTION:
-              return !event.otherInOut;
-            case UNION:
-              return event.otherInOut;
-            case DIFFERENCE:
-              // return (event.isSubject && !event.otherInOut) ||
-              //         (!event.isSubject && event.otherInOut);
-              return (event.isSubject && event.otherInOut) ||
-                      (!event.isSubject && !event.otherInOut);
-            case XOR:
-              return true;
-          }
-          break;
-        case SAME_TRANSITION:
-          return operation === INTERSECTION || operation === UNION;
-        case DIFFERENT_TRANSITION:
-          return operation === DIFFERENCE;
-        case NON_CONTRIBUTING:
-          return false;
+          headerEnter
+              .append('div')
+              .attr('class', 'error-header-label')
+              .text(errorTitle);
       }
-      return false;
-    }
-    /* eslint-enable indent */
 
-    var SweepEvent = function SweepEvent (point, left, otherEvent, isSubject, edgeType) {
 
-      /**
-       * Is left endpoint?
-       * @type {Boolean}
-       */
-      this.left = left;
+      improveOsmHeader.error = function(val) {
+          if (!arguments.length) return _error;
+          _error = val;
+          return improveOsmHeader;
+      };
 
-      /**
-       * @type {Array.<Number>}
-       */
-      this.point = point;
 
-      /**
-       * Other edge reference
-       * @type {SweepEvent}
-       */
-      this.otherEvent = otherEvent;
+      return improveOsmHeader;
+  }
 
-      /**
-       * Belongs to source or clipping polygon
-       * @type {Boolean}
-       */
-      this.isSubject = isSubject;
+  function uiPresetList(context) {
+      var dispatch$1 = dispatch('choose');
+      var _entityID;
+      var _currentPreset;
+      var _autofocus = false;
 
-      /**
-       * Edge contribution type
-       * @type {Number}
-       */
-      this.type = edgeType || NORMAL;
 
+      function presetList(selection) {
+          var entity = context.entity(_entityID);
+          var geometry = context.geometry(_entityID);
 
-      /**
-       * In-out transition for the sweepline crossing polygon
-       * @type {Boolean}
-       */
-      this.inOut = false;
+          // Treat entities on addr:interpolation lines as points, not vertices (#3241)
+          if (geometry === 'vertex' && entity.isOnAddressLine(context.graph())) {
+              geometry = 'point';
+          }
 
+          var presets = context.presets().matchGeometry(geometry);
 
-      /**
-       * @type {Boolean}
-       */
-      this.otherInOut = false;
+          selection.html('');
 
-      /**
-       * Previous event in result?
-       * @type {SweepEvent}
-       */
-      this.prevInResult = null;
+          var messagewrap = selection
+              .append('div')
+              .attr('class', 'header fillL');
 
-      /**
-       * Does event belong to result?
-       * @type {Boolean}
-       */
-      this.inResult = false;
+          var message = messagewrap
+              .append('h3')
+              .text(t('inspector.choose'));
+
+          messagewrap
+              .append('button')
+              .attr('class', 'preset-choose')
+              .on('click', function() { dispatch$1.call('choose', this, _currentPreset); })
+              .call(svgIcon((textDirection === 'rtl') ? '#iD-icon-backward' : '#iD-icon-forward'));
+
+          function initialKeydown() {
+              // hack to let delete shortcut work when search is autofocused
+              if (search.property('value').length === 0 &&
+                  (event.keyCode === utilKeybinding.keyCodes['⌫'] ||
+                   event.keyCode === utilKeybinding.keyCodes['⌦'])) {
+                  event.preventDefault();
+                  event.stopPropagation();
+                  operationDelete([_entityID], context)();
+
+              // hack to let undo work when search is autofocused
+              } else if (search.property('value').length === 0 &&
+                  (event.ctrlKey || event.metaKey) &&
+                  event.keyCode === utilKeybinding.keyCodes.z) {
+                  event.preventDefault();
+                  event.stopPropagation();
+                  context.undo();
+              } else if (!event.ctrlKey && !event.metaKey) {
+                  // don't check for delete/undo hack on future keydown events
+                  select(this).on('keydown', keydown);
+                  keydown.call(this);
+              }
+          }
 
+          function keydown() {
+              // down arrow
+              if (event.keyCode === utilKeybinding.keyCodes['↓'] &&
+                  // if insertion point is at the end of the string
+                  search.node().selectionStart === search.property('value').length) {
+                  event.preventDefault();
+                  event.stopPropagation();
+                  // move focus to the first item in the preset list
+                  var buttons = list.selectAll('.preset-list-button');
+                  if (!buttons.empty()) buttons.nodes()[0].focus();
+              }
+          }
 
-      // connection step
+          function keypress() {
+              // enter
+              var value = search.property('value');
+              if (event.keyCode === 13 && value.length) {
+                  list.selectAll('.preset-list-item:first-child').datum().choose();
+              }
+          }
 
-      /**
-       * @type {Boolean}
-       */
-      this.resultInOut = false;
+          function inputevent() {
+              var value = search.property('value');
+              list.classed('filtered', value.length);
+              if (value.length) {
+                  var results = presets.search(value, geometry);
+                  message.text(t('inspector.results', {
+                      n: results.collection.length,
+                      search: value
+                  }));
+                  list.call(drawList, results);
+              } else {
+                  list.call(drawList, context.presets().defaults(geometry, 36));
+                  message.text(t('inspector.choose'));
+              }
+          }
 
-      this.isExteriorRing = true;
-    };
+          var searchWrap = selection
+              .append('div')
+              .attr('class', 'search-header');
 
+          var search = searchWrap
+              .append('input')
+              .attr('class', 'preset-search-input')
+              .attr('placeholder', t('inspector.search'))
+              .attr('type', 'search')
+              .call(utilNoAuto)
+              .on('keydown', initialKeydown)
+              .on('keypress', keypress)
+              .on('input', inputevent);
 
-    /**
-     * @param{Array.<Number>}p
-     * @return {Boolean}
-     */
-    SweepEvent.prototype.isBelow = function isBelow (p) {
-      var p0 = this.point, p1 = this.otherEvent.point;
-      return this.left
-        ? (p0[0] - p[0]) * (p1[1] - p[1]) - (p1[0] - p[0]) * (p0[1] - p[1]) > 0
-        // signedArea(this.point, this.otherEvent.point, p) > 0 :
-        : (p1[0] - p[0]) * (p0[1] - p[1]) - (p0[0] - p[0]) * (p1[1] - p[1]) > 0;
-        //signedArea(this.otherEvent.point, this.point, p) > 0;
-    };
+          searchWrap
+              .call(svgIcon('#iD-icon-search', 'pre-text'));
 
+          if (_autofocus) {
+              search.node().focus();
+          }
 
-    /**
-     * @param{Array.<Number>}p
-     * @return {Boolean}
-     */
-    SweepEvent.prototype.isAbove = function isAbove (p) {
-      return !this.isBelow(p);
-    };
+          var listWrap = selection
+              .append('div')
+              .attr('class', 'inspector-body');
 
+          var list = listWrap
+              .append('div')
+              .attr('class', 'preset-list fillL cf')
+              .call(drawList, context.presets().defaults(geometry, 36));
 
-    /**
-     * @return {Boolean}
-     */
-    SweepEvent.prototype.isVertical = function isVertical () {
-      return this.point[0] === this.otherEvent.point[0];
-    };
+          context.features().on('change.preset-list', updateForFeatureHiddenState);
+      }
 
 
-    SweepEvent.prototype.clone = function clone () {
-      var copy = new SweepEvent(
-        this.point, this.left, this.otherEvent, this.isSubject, this.type);
+      function drawList(list, presets) {
+          var collection = presets.collection.reduce(function(collection, preset) {
+              if (preset.members) {
+                  collection.push(CategoryItem(preset));
+              } else if (preset.visible()) {
+                  collection.push(PresetItem(preset));
+              }
+              return collection;
+          }, []);
 
-      copy.inResult     = this.inResult;
-      copy.prevInResult = this.prevInResult;
-      copy.isExteriorRing = this.isExteriorRing;
-      copy.inOut        = this.inOut;
-      copy.otherInOut   = this.otherInOut;
+          var items = list.selectAll('.preset-list-item')
+              .data(collection, function(d) { return d.preset.id; });
 
-      return copy;
-    };
+          items.order();
 
-    function equals(p1, p2) {
-      if (p1[0] === p2[0]) {
-        if (p1[1] === p2[1]) {
-          return true;
-        } else {
-          return false;
-        }
-      }
-      return false;
-    }
+          items.exit()
+              .remove();
 
-    // const EPSILON = 1e-9;
-    // const abs = Math.abs;
-    // TODO https://github.com/w8r/martinez/issues/6#issuecomment-262847164
-    // Precision problem.
-    //
-    // module.exports = function equals(p1, p2) {
-    //   return abs(p1[0] - p2[0]) <= EPSILON && abs(p1[1] - p2[1]) <= EPSILON;
-    // };
+          items.enter()
+              .append('div')
+              .attr('class', function(item) { return 'preset-list-item preset-' + item.preset.id.replace('/', '-'); })
+              .classed('current', function(item) { return item.preset === _currentPreset; })
+              .each(function(item) { select(this).call(item); })
+              .style('opacity', 0)
+              .transition()
+              .style('opacity', 1);
 
-    /**
-     * Signed area of the triangle (p0, p1, p2)
-     * @param  {Array.<Number>} p0
-     * @param  {Array.<Number>} p1
-     * @param  {Array.<Number>} p2
-     * @return {Number}
-     */
-    function signedArea(p0, p1, p2) {
-      return (p0[0] - p2[0]) * (p1[1] - p2[1]) - (p1[0] - p2[0]) * (p0[1] - p2[1]);
-    }
+          updateForFeatureHiddenState();
+      }
 
-    /**
-     * @param  {SweepEvent} e1
-     * @param  {SweepEvent} e2
-     * @return {Number}
-     */
-    function compareEvents(e1, e2) {
-      var p1 = e1.point;
-      var p2 = e2.point;
+      function itemKeydown(){
+          // the actively focused item
+          var item = select(this.closest('.preset-list-item'));
+          var parentItem = select(item.node().parentElement.closest('.preset-list-item'));
 
-      // Different x-coordinate
-      if (p1[0] > p2[0]) { return 1; }
-      if (p1[0] < p2[0]) { return -1; }
+          // arrow down, move focus to the next, lower item
+          if (event.keyCode === utilKeybinding.keyCodes['↓']) {
+              event.preventDefault();
+              event.stopPropagation();
+              // the next item in the list at the same level
+              var nextItem = select(item.node().nextElementSibling);
+              // if there is no next item in this list
+              if (nextItem.empty()) {
+                  // if there is a parent item
+                  if (!parentItem.empty()) {
+                      // the item is the last item of a sublist,
+                      // select the next item at the parent level
+                      nextItem = select(parentItem.node().nextElementSibling);
+                  }
+              // if the focused item is expanded
+              } else if (select(this).classed('expanded')) {
+                  // select the first subitem instead
+                  nextItem = item.select('.subgrid .preset-list-item:first-child');
+              }
+              if (!nextItem.empty()) {
+                  // focus on the next item
+                  nextItem.select('.preset-list-button').node().focus();
+              }
 
-      // Different points, but same x-coordinate
-      // Event with lower y-coordinate is processed first
-      if (p1[1] !== p2[1]) { return p1[1] > p2[1] ? 1 : -1; }
+          // arrow up, move focus to the previous, higher item
+          } else if (event.keyCode === utilKeybinding.keyCodes['↑']) {
+              event.preventDefault();
+              event.stopPropagation();
+              // the previous item in the list at the same level
+              var previousItem = select(item.node().previousElementSibling);
 
-      return specialCases(e1, e2, p1, p2);
-    }
+              // if there is no previous item in this list
+              if (previousItem.empty()) {
+                  // if there is a parent item
+                  if (!parentItem.empty()) {
+                      // the item is the first subitem of a sublist select the parent item
+                      previousItem = parentItem;
+                  }
+              // if the previous item is expanded
+              } else if (previousItem.select('.preset-list-button').classed('expanded')) {
+                  // select the last subitem of the sublist of the previous item
+                  previousItem = previousItem.select('.subgrid .preset-list-item:last-child');
+              }
 
+              if (!previousItem.empty()) {
+                  // focus on the previous item
+                  previousItem.select('.preset-list-button').node().focus();
+              } else {
+                  // the focus is at the top of the list, move focus back to the search field
+                  var search = select(this.closest('.preset-list-pane')).select('.preset-search-input');
+                  search.node().focus();
+              }
 
-    /* eslint-disable no-unused-vars */
-    function specialCases(e1, e2, p1, p2) {
-      // Same coordinates, but one is a left endpoint and the other is
-      // a right endpoint. The right endpoint is processed first
-      if (e1.left !== e2.left)
-        { return e1.left ? 1 : -1; }
+          // arrow left, move focus to the parent item if there is one
+          } else if (event.keyCode === utilKeybinding.keyCodes[(textDirection === 'rtl') ? '→' : '←']) {
+              event.preventDefault();
+              event.stopPropagation();
+              // if there is a parent item, focus on the parent item
+              if (!parentItem.empty()) {
+                  parentItem.select('.preset-list-button').node().focus();
+              }
 
-      // const p2 = e1.otherEvent.point, p3 = e2.otherEvent.point;
-      // const sa = (p1[0] - p3[0]) * (p2[1] - p3[1]) - (p2[0] - p3[0]) * (p1[1] - p3[1])
-      // Same coordinates, both events
-      // are left endpoints or right endpoints.
-      // not collinear
-      if (signedArea(p1, e1.otherEvent.point, e2.otherEvent.point) !== 0) {
-        // the event associate to the bottom segment is processed first
-        return (!e1.isBelow(e2.otherEvent.point)) ? 1 : -1;
+          // arrow right, choose this item
+          } else if (event.keyCode === utilKeybinding.keyCodes[(textDirection === 'rtl') ? '←' : '→']) {
+              event.preventDefault();
+              event.stopPropagation();
+              item.datum().choose.call(select(this).node());
+          }
       }
 
-      return (!e1.isSubject && e2.isSubject) ? 1 : -1;
-    }
-    /* eslint-enable no-unused-vars */
-
-    /**
-     * @param  {SweepEvent} se
-     * @param  {Array.<Number>} p
-     * @param  {Queue} queue
-     * @return {Queue}
-     */
-    function divideSegment(se, p, queue)  {
-      var r = new SweepEvent(p, false, se,            se.isSubject);
-      var l = new SweepEvent(p, true,  se.otherEvent, se.isSubject);
-
-      /* eslint-disable no-console */
-      if (equals(se.point, se.otherEvent.point)) {
 
-        console.warn('what is that, a collapsed segment?', se);
-      }
-      /* eslint-enable no-console */
+      function CategoryItem(preset) {
+          var box, sublist, shown = false;
 
-      r.contourId = l.contourId = se.contourId;
+          function item(selection) {
+              var wrap = selection.append('div')
+                  .attr('class', 'preset-list-button-wrap category');
 
-      // avoid a rounding error. The left event would be processed after the right event
-      if (compareEvents(l, se.otherEvent) > 0) {
-        se.otherEvent.left = true;
-        l.left = false;
-      }
+              function click() {
+                  var isExpanded = select(this).classed('expanded');
+                  var iconName = isExpanded ?
+                      (textDirection === 'rtl' ? '#iD-icon-backward' : '#iD-icon-forward') : '#iD-icon-down';
+                  select(this)
+                      .classed('expanded', !isExpanded);
+                  select(this).selectAll('div.label-inner svg.icon use')
+                      .attr('href', iconName);
+                  item.choose();
+              }
 
-      // avoid a rounding error. The left event would be processed after the right event
-      // if (compareEvents(se, r) > 0) {}
+              var button = wrap
+                  .append('button')
+                  .attr('class', 'preset-list-button')
+                  .classed('expanded', false)
+                  .call(uiPresetIcon()
+                      .geometry(context.geometry(_entityID))
+                      .preset(preset))
+                  .on('click', click)
+                  .on('keydown', function() {
+                      // right arrow, expand the focused item
+                      if (event.keyCode === utilKeybinding.keyCodes[(textDirection === 'rtl') ? '←' : '→']) {
+                          event.preventDefault();
+                          event.stopPropagation();
+                          // if the item isn't expanded
+                          if (!select(this).classed('expanded')) {
+                              // toggle expansion (expand the item)
+                              click.call(this);
+                          }
+                      // left arrow, collapse the focused item
+                      } else if (event.keyCode === utilKeybinding.keyCodes[(textDirection === 'rtl') ? '→' : '←']) {
+                          event.preventDefault();
+                          event.stopPropagation();
+                          // if the item is expanded
+                          if (select(this).classed('expanded')) {
+                              // toggle expansion (collapse the item)
+                              click.call(this);
+                          }
+                      } else {
+                          itemKeydown.call(this);
+                      }
+                  });
 
-      se.otherEvent.otherEvent = l;
-      se.otherEvent = r;
+              var label = button
+                  .append('div')
+                  .attr('class', 'label')
+                  .append('div')
+                  .attr('class', 'label-inner');
 
-      queue.push(l);
-      queue.push(r);
+              label
+                  .append('div')
+                  .attr('class', 'namepart')
+                  .call(svgIcon((textDirection === 'rtl' ? '#iD-icon-backward' : '#iD-icon-forward'), 'inline'))
+                  .append('span')
+                  .html(function() { return preset.name() + '&hellip;'; });
 
-      return queue;
-    }
+              box = selection.append('div')
+                  .attr('class', 'subgrid')
+                  .style('max-height', '0px')
+                  .style('opacity', 0);
 
-    //const EPS = 1e-9;
+              box.append('div')
+                  .attr('class', 'arrow');
 
-    /**
-     * Finds the magnitude of the cross product of two vectors (if we pretend
-     * they're in three dimensions)
-     *
-     * @param {Object} a First vector
-     * @param {Object} b Second vector
-     * @private
-     * @returns {Number} The magnitude of the cross product
-     */
-    function crossProduct(a, b) {
-      return (a[0] * b[1]) - (a[1] * b[0]);
-    }
+              sublist = box.append('div')
+                  .attr('class', 'preset-list fillL3');
+          }
 
-    /**
-     * Finds the dot product of two vectors.
-     *
-     * @param {Object} a First vector
-     * @param {Object} b Second vector
-     * @private
-     * @returns {Number} The dot product
-     */
-    function dotProduct(a, b) {
-      return (a[0] * b[0]) + (a[1] * b[1]);
-    }
 
-    /**
-     * Finds the intersection (if any) between two line segments a and b, given the
-     * line segments' end points a1, a2 and b1, b2.
-     *
-     * This algorithm is based on Schneider and Eberly.
-     * http://www.cimec.org.ar/~ncalvo/Schneider_Eberly.pdf
-     * Page 244.
-     *
-     * @param {Array.<Number>} a1 point of first line
-     * @param {Array.<Number>} a2 point of first line
-     * @param {Array.<Number>} b1 point of second line
-     * @param {Array.<Number>} b2 point of second line
-     * @param {Boolean=}       noEndpointTouch whether to skip single touchpoints
-     *                                         (meaning connected segments) as
-     *                                         intersections
-     * @returns {Array.<Array.<Number>>|Null} If the lines intersect, the point of
-     * intersection. If they overlap, the two end points of the overlapping segment.
-     * Otherwise, null.
-     */
-    function intersection (a1, a2, b1, b2, noEndpointTouch) {
-      // The algorithm expects our lines in the form P + sd, where P is a point,
-      // s is on the interval [0, 1], and d is a vector.
-      // We are passed two points. P can be the first point of each pair. The
-      // vector, then, could be thought of as the distance (in x and y components)
-      // from the first point to the second point.
-      // So first, let's make our vectors:
-      var va = [a2[0] - a1[0], a2[1] - a1[1]];
-      var vb = [b2[0] - b1[0], b2[1] - b1[1]];
-      // We also define a function to convert back to regular point form:
+          item.choose = function() {
+              if (!box || !sublist) return;
 
-      /* eslint-disable arrow-body-style */
+              if (shown) {
+                  shown = false;
+                  box.transition()
+                      .duration(200)
+                      .style('opacity', '0')
+                      .style('max-height', '0px')
+                      .style('padding-bottom', '0px');
+              } else {
+                  shown = true;
+                  sublist.call(drawList, preset.members);
+                  box.transition()
+                      .duration(200)
+                      .style('opacity', '1')
+                      .style('max-height', 200 + preset.members.collection.length * 190 + 'px')
+                      .style('padding-bottom', '10px');
+              }
+          };
 
-      function toPoint(p, s, d) {
-        return [
-          p[0] + s * d[0],
-          p[1] + s * d[1]
-        ];
+          item.preset = preset;
+          return item;
       }
 
-      /* eslint-enable arrow-body-style */
 
-      // The rest is pretty much a straight port of the algorithm.
-      var e = [b1[0] - a1[0], b1[1] - a1[1]];
-      var kross    = crossProduct(va, vb);
-      var sqrKross = kross * kross;
-      var sqrLenA  = dotProduct(va, va);
-      //const sqrLenB  = dotProduct(vb, vb);
+      function PresetItem(preset) {
+          function item(selection) {
+              var wrap = selection.append('div')
+                  .attr('class', 'preset-list-button-wrap');
 
-      // Check for line intersection. This works because of the properties of the
-      // cross product -- specifically, two vectors are parallel if and only if the
-      // cross product is the 0 vector. The full calculation involves relative error
-      // to account for possible very small line segments. See Schneider & Eberly
-      // for details.
-      if (sqrKross > 0/* EPS * sqrLenB * sqLenA */) {
-        // If they're not parallel, then (because these are line segments) they
-        // still might not actually intersect. This code checks that the
-        // intersection point of the lines is actually on both line segments.
-        var s = crossProduct(e, vb) / kross;
-        if (s < 0 || s > 1) {
-          // not on line segment a
-          return null;
-        }
-        var t = crossProduct(e, va) / kross;
-        if (t < 0 || t > 1) {
-          // not on line segment b
-          return null;
-        }
-        if (s === 0 || s === 1) {
-          // on an endpoint of line segment a
-          return noEndpointTouch ? null : [toPoint(a1, s, va)];
-        }
-        if (t === 0 || t === 1) {
-          // on an endpoint of line segment b
-          return noEndpointTouch ? null : [toPoint(b1, t, vb)];
-        }
-        return [toPoint(a1, s, va)];
-      }
+              var button = wrap.append('button')
+                  .attr('class', 'preset-list-button')
+                  .call(uiPresetIcon()
+                      .geometry(context.geometry(_entityID))
+                      .preset(preset))
+                  .on('click', item.choose)
+                  .on('keydown', itemKeydown);
 
-      // If we've reached this point, then the lines are either parallel or the
-      // same, but the segments could overlap partially or fully, or not at all.
-      // So we need to find the overlap, if any. To do that, we can use e, which is
-      // the (vector) difference between the two initial points. If this is parallel
-      // with the line itself, then the two lines are the same line, and there will
-      // be overlap.
-      //const sqrLenE = dotProduct(e, e);
-      kross = crossProduct(e, va);
-      sqrKross = kross * kross;
+              var label = button
+                  .append('div')
+                  .attr('class', 'label')
+                  .append('div')
+                  .attr('class', 'label-inner');
 
-      if (sqrKross > 0 /* EPS * sqLenB * sqLenE */) {
-      // Lines are just parallel, not the same. No overlap.
-        return null;
-      }
+              // NOTE: split/join on en-dash, not a hypen (to avoid conflict with fr - nl names in Brussels etc)
+              label.selectAll('.namepart')
+                  .data(preset.name().split(' – '))
+                  .enter()
+                  .append('div')
+                  .attr('class', 'namepart')
+                  .text(function(d) { return d; });
 
-      var sa = dotProduct(va, e) / sqrLenA;
-      var sb = sa + dotProduct(va, vb) / sqrLenA;
-      var smin = Math.min(sa, sb);
-      var smax = Math.max(sa, sb);
+              wrap.call(item.reference.button);
+              selection.call(item.reference.body);
+          }
 
-      // this is, essentially, the FindIntersection acting on floats from
-      // Schneider & Eberly, just inlined into this function.
-      if (smin <= 1 && smax >= 0) {
+          item.choose = function() {
+              if (select(this).classed('disabled')) return;
 
-        // overlap on an end point
-        if (smin === 1) {
-          return noEndpointTouch ? null : [toPoint(a1, smin > 0 ? smin : 0, va)];
-        }
+              context.presets().choose(preset);
+              context.perform(
+                  actionChangePreset(_entityID, _currentPreset, preset),
+                  t('operations.change_tags.annotation')
+              );
 
-        if (smax === 0) {
-          return noEndpointTouch ? null : [toPoint(a1, smax < 1 ? smax : 1, va)];
-        }
+              dispatch$1.call('choose', this, preset);
+          };
+
+          item.help = function() {
+              event.stopPropagation();
+              item.reference.toggle();
+          };
 
-        if (noEndpointTouch && smin === 0 && smax === 1) { return null; }
+          item.preset = preset;
+          item.reference = uiTagReference(preset.reference(context.geometry(_entityID)), context);
 
-        // There's overlap on a segment -- two points of intersection. Return both.
-        return [
-          toPoint(a1, smin > 0 ? smin : 0, va),
-          toPoint(a1, smax < 1 ? smax : 1, va)
-        ];
+          return item;
       }
 
-      return null;
-    }
+      function updateForFeatureHiddenState() {
 
-    /**
-     * @param  {SweepEvent} se1
-     * @param  {SweepEvent} se2
-     * @param  {Queue}      queue
-     * @return {Number}
-     */
-    function possibleIntersection (se1, se2, queue) {
-      // that disallows self-intersecting polygons,
-      // did cost us half a day, so I'll leave it
-      // out of respect
-      // if (se1.isSubject === se2.isSubject) return;
-      var inter = intersection(
-        se1.point, se1.otherEvent.point,
-        se2.point, se2.otherEvent.point
-      );
+          if (!context.hasEntity(_entityID)) return;
 
-      var nintersections = inter ? inter.length : 0;
-      if (nintersections === 0) { return 0; } // no intersection
+          var geometry = context.geometry(_entityID);
 
-      // the line segments intersect at an endpoint of both line segments
-      if ((nintersections === 1) &&
-          (equals(se1.point, se2.point) ||
-           equals(se1.otherEvent.point, se2.otherEvent.point))) {
-        return 0;
-      }
+          var button = d3_selectAll('.preset-list .preset-list-button');
 
-      if (nintersections === 2 && se1.isSubject === se2.isSubject) {
-        // if(se1.contourId === se2.contourId){
-        // console.warn('Edges of the same polygon overlap',
-        //   se1.point, se1.otherEvent.point, se2.point, se2.otherEvent.point);
-        // }
-        //throw new Error('Edges of the same polygon overlap');
-        return 0;
-      }
+          // remove existing tooltips
+          button.call(tooltip().destroyAny);
 
-      // The line segments associated to se1 and se2 intersect
-      if (nintersections === 1) {
+          button.each(function(item, index) {
 
-        // if the intersection point is not an endpoint of se1
-        if (!equals(se1.point, inter[0]) && !equals(se1.otherEvent.point, inter[0])) {
-          divideSegment(se1, inter[0], queue);
-        }
+              var hiddenPresetFeaturesId = context.features().isHiddenPreset(item.preset, geometry);
+              var isHiddenPreset = !!hiddenPresetFeaturesId && item.preset !== _currentPreset;
 
-        // if the intersection point is not an endpoint of se2
-        if (!equals(se2.point, inter[0]) && !equals(se2.otherEvent.point, inter[0])) {
-          divideSegment(se2, inter[0], queue);
-        }
-        return 1;
+              select(this)
+                  .classed('disabled', isHiddenPreset);
+
+              if (isHiddenPreset) {
+                  var isAutoHidden = context.features().autoHidden(hiddenPresetFeaturesId);
+                  var tooltipIdSuffix = isAutoHidden ? 'zoom' : 'manual';
+                  var tooltipObj = { features: t('feature.' + hiddenPresetFeaturesId + '.description') };
+                  select(this).call(tooltip()
+                      .title(t('inspector.hidden_preset.' + tooltipIdSuffix, tooltipObj))
+                      .placement(index < 2 ? 'bottom' : 'top')
+                  );
+              }
+          });
       }
 
-      // The line segments associated to se1 and se2 overlap
-      var events        = [];
-      var leftCoincide  = false;
-      var rightCoincide = false;
-
-      if (equals(se1.point, se2.point)) {
-        leftCoincide = true; // linked
-      } else if (compareEvents(se1, se2) === 1) {
-        events.push(se2, se1);
-      } else {
-        events.push(se1, se2);
-      }
+      presetList.autofocus = function(val) {
+          if (!arguments.length) return _autofocus;
+          _autofocus = val;
+          return presetList;
+      };
 
-      if (equals(se1.otherEvent.point, se2.otherEvent.point)) {
-        rightCoincide = true;
-      } else if (compareEvents(se1.otherEvent, se2.otherEvent) === 1) {
-        events.push(se2.otherEvent, se1.otherEvent);
-      } else {
-        events.push(se1.otherEvent, se2.otherEvent);
-      }
 
-      if ((leftCoincide && rightCoincide) || leftCoincide) {
-        // both line segments are equal or share the left endpoint
-        se2.type = NON_CONTRIBUTING;
-        se1.type = (se2.inOut === se1.inOut)
-          ? SAME_TRANSITION : DIFFERENT_TRANSITION;
+      presetList.entityID = function(val) {
+          if (!arguments.length) return _entityID;
+          _entityID = val;
+          presetList.preset(context.presets().match(context.entity(_entityID), context.graph()));
+          return presetList;
+      };
 
-        if (leftCoincide && !rightCoincide) {
-          // honestly no idea, but changing events selection from [2, 1]
-          // to [0, 1] fixes the overlapping self-intersecting polygons issue
-          divideSegment(events[1].otherEvent, events[0].point, queue);
-        }
-        return 2;
-      }
 
-      // the line segments share the right endpoint
-      if (rightCoincide) {
-        divideSegment(events[0], events[1].point, queue);
-        return 3;
-      }
+      presetList.preset = function(val) {
+          if (!arguments.length) return _currentPreset;
+          _currentPreset = val;
+          return presetList;
+      };
 
-      // no line segment includes totally the other one
-      if (events[0] !== events[3].otherEvent) {
-        divideSegment(events[0], events[1].point, queue);
-        divideSegment(events[1], events[2].point, queue);
-        return 3;
-      }
 
-      // one line segment includes the other one
-      divideSegment(events[0], events[1].point, queue);
-      divideSegment(events[3].otherEvent, events[2].point, queue);
+      return utilRebind(presetList, dispatch$1, 'on');
+  }
 
-      return 3;
-    }
+  function uiViewOnOSM(context) {
+      var _what;   // an osmEntity or osmNote
 
-    /**
-     * @param  {SweepEvent} le1
-     * @param  {SweepEvent} le2
-     * @return {Number}
-     */
-    function compareSegments(le1, le2) {
-      if (le1 === le2) { return 0; }
 
-      // Segments are not collinear
-      if (signedArea(le1.point, le1.otherEvent.point, le2.point) !== 0 ||
-        signedArea(le1.point, le1.otherEvent.point, le2.otherEvent.point) !== 0) {
+      function viewOnOSM(selection) {
+          var url;
+          if (_what instanceof osmEntity) {
+              url = context.connection().entityURL(_what);
+          } else if (_what instanceof osmNote) {
+              url = context.connection().noteURL(_what);
+          }
 
-        // If they share their left endpoint use the right endpoint to sort
-        if (equals(le1.point, le2.point)) { return le1.isBelow(le2.otherEvent.point) ? -1 : 1; }
+          var data = ((!_what || _what.isNew()) ? [] : [_what]);
+          var link = selection.selectAll('.view-on-osm')
+              .data(data, function(d) { return d.id; });
 
-        // Different left endpoint: use the left endpoint to sort
-        if (le1.point[0] === le2.point[0]) { return le1.point[1] < le2.point[1] ? -1 : 1; }
+          // exit
+          link.exit()
+              .remove();
 
-        // has the line segment associated to e1 been inserted
-        // into S after the line segment associated to e2 ?
-        if (compareEvents(le1, le2) === 1) { return le2.isAbove(le1.point) ? -1 : 1; }
+          // enter
+          var linkEnter = link.enter()
+              .append('a')
+              .attr('class', 'view-on-osm')
+              .attr('target', '_blank')
+              .attr('href', url)
+              .call(svgIcon('#iD-icon-out-link', 'inline'));
 
-        // The line segment associated to e2 has been inserted
-        // into S after the line segment associated to e1
-        return le1.isBelow(le2.point) ? -1 : 1;
+          linkEnter
+              .append('span')
+              .text(t('inspector.view_on_osm'));
       }
 
-      if (le1.isSubject === le2.isSubject) { // same polygon
-        var p1 = le1.point, p2 = le2.point;
-        if (p1[0] === p2[0] && p1[1] === p2[1]/*equals(le1.point, le2.point)*/) {
-          p1 = le1.otherEvent.point; p2 = le2.otherEvent.point;
-          if (p1[0] === p2[0] && p1[1] === p2[1]) { return 0; }
-          else { return le1.contourId > le2.contourId ? 1 : -1; }
-        }
-      } else { // Segments are collinear, but belong to separate polygons
-        return le1.isSubject ? -1 : 1;
-      }
 
-      return compareEvents(le1, le2) === 1 ? 1 : -1;
-    }
+      viewOnOSM.what = function(_) {
+          if (!arguments.length) return _what;
+          _what = _;
+          return viewOnOSM;
+      };
 
-    function subdivide(eventQueue, subject, clipping, sbbox, cbbox, operation) {
-      var sweepLine = new SplayTree(compareSegments);
-      var sortedEvents = [];
+      return viewOnOSM;
+  }
 
-      var rightbound = Math.min(sbbox[2], cbbox[2]);
+  function uiInspector(context) {
+      var presetList = uiPresetList(context);
+      var entityEditor = uiEntityEditor(context);
+      var wrap = select(null),
+          presetPane = select(null),
+          editorPane = select(null);
+      var _state = 'select';
+      var _entityID;
+      var _newFeature = false;
 
-      var prev, next, begin;
 
-      while (eventQueue.length !== 0) {
-        var event = eventQueue.pop();
-        sortedEvents.push(event);
+      function inspector(selection, newFeature) {
+          presetList
+              .entityID(_entityID)
+              .autofocus(_newFeature)
+              .on('choose', inspector.setPreset);
 
-        // optimization by bboxes for intersection and difference goes here
-        if ((operation === INTERSECTION && event.point[0] > rightbound) ||
-            (operation === DIFFERENCE   && event.point[0] > sbbox[2])) {
-          break;
-        }
+          entityEditor
+              .state(_state)
+              .entityID(_entityID)
+              .on('choose', inspector.showList);
 
-        if (event.left) {
-          next  = prev = sweepLine.insert(event);
-          begin = sweepLine.minNode();
+          wrap = selection.selectAll('.panewrap')
+              .data([0]);
 
-          if (prev !== begin) { prev = sweepLine.prev(prev); }
-          else                { prev = null; }
+          var enter = wrap.enter()
+              .append('div')
+              .attr('class', 'panewrap');
 
-          next = sweepLine.next(next);
+          enter
+              .append('div')
+              .attr('class', 'preset-list-pane pane');
 
-          var prevEvent = prev ? prev.key : null;
-          var prevprevEvent = (void 0);
-          computeFields(event, prevEvent, operation);
-          if (next) {
-            if (possibleIntersection(event, next.key, eventQueue) === 2) {
-              computeFields(event, prevEvent, operation);
-              computeFields(event, next.key, operation);
-            }
-          }
+          enter
+              .append('div')
+              .attr('class', 'entity-editor-pane pane');
 
-          if (prev) {
-            if (possibleIntersection(prev.key, event, eventQueue) === 2) {
-              var prevprev = prev;
-              if (prevprev !== begin) { prevprev = sweepLine.prev(prevprev); }
-              else                    { prevprev = null; }
+          wrap = wrap.merge(enter);
+          presetPane = wrap.selectAll('.preset-list-pane');
+          editorPane = wrap.selectAll('.entity-editor-pane');
 
-              prevprevEvent = prevprev ? prevprev.key : null;
-              computeFields(prevEvent, prevprevEvent, operation);
-              computeFields(event,     prevEvent,     operation);
-            }
-          }
-        } else {
-          event = event.otherEvent;
-          next = prev = sweepLine.find(event);
+          var entity = context.entity(_entityID);
 
-          if (prev && next) {
+          var isTaglessOrIntersectionVertex = entity.geometry(context.graph()) === 'vertex' &&
+              (!entity.hasNonGeometryTags() && !entity.isHighwayIntersection(context.graph()));
+          // start with the preset list if the feature is new or is an uninteresting vertex
+          var showPresetList = newFeature || isTaglessOrIntersectionVertex;
 
-            if (prev !== begin) { prev = sweepLine.prev(prev); }
-            else                { prev = null; }
+          if (showPresetList) {
+              wrap.style('right', '-100%');
+              presetPane.call(presetList);
+          } else {
+              wrap.style('right', '0%');
+              editorPane.call(entityEditor);
+          }
 
-            next = sweepLine.next(next);
-            sweepLine.remove(event);
+          var footer = selection.selectAll('.footer')
+              .data([0]);
 
-            if (next && prev) {
-              possibleIntersection(prev.key, next.key, eventQueue);
-            }
-          }
-        }
-      }
-      return sortedEvents;
-    }
+          footer = footer.enter()
+              .append('div')
+              .attr('class', 'footer')
+              .merge(footer);
 
-    /**
-     * @param  {Array.<SweepEvent>} sortedEvents
-     * @return {Array.<SweepEvent>}
-     */
-    function orderEvents(sortedEvents) {
-      var event, i, len, tmp;
-      var resultEvents = [];
-      for (i = 0, len = sortedEvents.length; i < len; i++) {
-        event = sortedEvents[i];
-        if ((event.left && event.inResult) ||
-          (!event.left && event.otherEvent.inResult)) {
-          resultEvents.push(event);
-        }
-      }
-      // Due to overlapping edges the resultEvents array can be not wholly sorted
-      var sorted = false;
-      while (!sorted) {
-        sorted = true;
-        for (i = 0, len = resultEvents.length; i < len; i++) {
-          if ((i + 1) < len &&
-            compareEvents(resultEvents[i], resultEvents[i + 1]) === 1) {
-            tmp = resultEvents[i];
-            resultEvents[i] = resultEvents[i + 1];
-            resultEvents[i + 1] = tmp;
-            sorted = false;
-          }
-        }
+          footer
+              .call(uiViewOnOSM(context)
+                  .what(context.hasEntity(_entityID))
+              );
       }
 
+      inspector.showList = function(preset) {
+          wrap.transition()
+              .styleTween('right', function() { return interpolate('0%', '-100%'); });
 
-      for (i = 0, len = resultEvents.length; i < len; i++) {
-        event = resultEvents[i];
-        event.pos = i;
-      }
+          presetPane
+              .call(presetList.preset(preset).autofocus(true));
+      };
 
-      // imagine, the right event is found in the beginning of the queue,
-      // when his left counterpart is not marked yet
-      for (i = 0, len = resultEvents.length; i < len; i++) {
-        event = resultEvents[i];
-        if (!event.left) {
-          tmp = event.pos;
-          event.pos = event.otherEvent.pos;
-          event.otherEvent.pos = tmp;
-        }
-      }
+      inspector.setPreset = function(preset) {
 
-      return resultEvents;
-    }
+          // upon setting multipolygon, go to the area preset list instead of the editor
+          if (preset.id === 'type/multipolygon') {
+              presetPane
+                  .call(presetList.preset(preset).autofocus(true));
 
+          } else {
+              wrap.transition()
+                  .styleTween('right', function() { return interpolate('-100%', '0%'); });
 
-    /**
-     * @param  {Number} pos
-     * @param  {Array.<SweepEvent>} resultEvents
-     * @param  {Object>}    processed
-     * @return {Number}
-     */
-    function nextPos(pos, resultEvents, processed, origIndex) {
-      var p, p1;
-      var newPos = pos + 1;
-      var length = resultEvents.length;
+              editorPane
+                  .call(entityEditor.preset(preset));
+          }
 
-      p  = resultEvents[pos].point;
+      };
 
-      if (newPos < length)
-        { p1 = resultEvents[newPos].point; }
+      inspector.state = function(val) {
+          if (!arguments.length) return _state;
+          _state = val;
+          entityEditor.state(_state);
 
+          // remove any old field help overlay that might have gotten attached to the inspector
+          d3_selectAll('.field-help-body').remove();
 
-      // while in range and not the current one by value
-      while (newPos < length && p1[0] === p[0] && p1[1] === p[1]) {
-        if (!processed[newPos]) {
-          return newPos;
-        } else   {
-          newPos++;
-        }
-        p1 = resultEvents[newPos].point;
-      }
+          return inspector;
+      };
 
-      newPos = pos - 1;
 
-      while (processed[newPos] && newPos >= origIndex) {
-        newPos--;
-      }
-      return newPos;
-    }
+      inspector.entityID = function(val) {
+          if (!arguments.length) return _entityID;
+          _entityID = val;
+          return inspector;
+      };
 
 
-    /**
-     * @param  {Array.<SweepEvent>} sortedEvents
-     * @return {Array.<*>} polygons
-     */
-    function connectEdges(sortedEvents, operation) {
-      var i, len;
-      var resultEvents = orderEvents(sortedEvents);
+      inspector.newFeature = function(val) {
+          if (!arguments.length) return _newFeature;
+          _newFeature = val;
+          return inspector;
+      };
 
-      // "false"-filled array
-      var processed = {};
-      var result = [];
-      var event;
 
-      for (i = 0, len = resultEvents.length; i < len; i++) {
-        if (processed[i]) { continue; }
-        var contour = [[]];
+      return inspector;
+  }
 
-        if (!resultEvents[i].isExteriorRing) {
-          if (operation === DIFFERENCE && !resultEvents[i].isSubject && result.length === 0) {
-            result.push(contour);
-          } else if (result.length === 0) {
-            result.push([[contour]]);
-          } else {
-            result[result.length - 1].push(contour[0]);
-          }
-        } else if (operation === DIFFERENCE && !resultEvents[i].isSubject && result.length > 1) {
-          result[result.length - 1].push(contour[0]);
-        } else {
-          result.push(contour);
-        }
+  function uiKeepRightDetails(context) {
+      var _error;
 
-        var ringId = result.length - 1;
-        var pos = i;
 
-        var initial = resultEvents[i].point;
-        contour[0].push(initial);
+      function errorDetail(d) {
+          var unknown = t('inspector.unknown');
 
-        while (pos >= i) {
-          event = resultEvents[pos];
-          processed[pos] = true;
+          if (!d) return unknown;
+          var errorType = d.error_type;
+          var parentErrorType = d.parent_error_type;
 
-          if (event.left) {
-            event.resultInOut = false;
-            event.contourId   = ringId;
+          var et = en.QA.keepRight.errorTypes[errorType];
+          var pt = en.QA.keepRight.errorTypes[parentErrorType];
+
+          var detail;
+          if (et && et.description) {
+              detail = t('QA.keepRight.errorTypes.' + errorType + '.description', d.replacements);
+          } else if (pt && pt.description) {
+              detail = t('QA.keepRight.errorTypes.' + parentErrorType + '.description', d.replacements);
           } else {
-            event.otherEvent.resultInOut = true;
-            event.otherEvent.contourId   = ringId;
+              detail = unknown;
           }
 
-          pos = event.pos;
-          processed[pos] = true;
-          contour[0].push(resultEvents[pos].point);
-          pos = nextPos(pos, resultEvents, processed, i);
-        }
+          return detail;
+      }
 
-        pos = pos === -1 ? i : pos;
 
-        event = resultEvents[pos];
-        processed[pos] = processed[event.pos] = true;
-        event.otherEvent.resultInOut = true;
-        event.otherEvent.contourId   = ringId;
-      }
+      function keepRightDetails(selection) {
+          var details = selection.selectAll('.error-details')
+              .data(
+                  (_error ? [_error] : []),
+                  function(d) { return d.id + '-' + (d.status || 0); }
+              );
 
-      // Handle if the result is a polygon (eg not multipoly)
-      // Commented it again, let's see what do we mean by that
-      // if (result.length === 1) result = result[0];
-      return result;
-    }
+          details.exit()
+              .remove();
 
-    var tinyqueue = TinyQueue;
-    var default_1 = TinyQueue;
+          var detailsEnter = details.enter()
+              .append('div')
+              .attr('class', 'error-details error-details-container');
 
-    function TinyQueue(data, compare) {
-        var this$1 = this;
 
-        if (!(this instanceof TinyQueue)) { return new TinyQueue(data, compare); }
+          // description
+          var descriptionEnter = detailsEnter
+              .append('div')
+              .attr('class', 'error-details-description');
 
-        this.data = data || [];
-        this.length = this.data.length;
-        this.compare = compare || defaultCompare;
+          descriptionEnter
+              .append('h4')
+              .text(function() { return t('QA.keepRight.detail_description'); });
 
-        if (this.length > 0) {
-            for (var i = (this.length >> 1) - 1; i >= 0; i--) { this$1._down(i); }
-        }
-    }
+          descriptionEnter
+              .append('div')
+              .attr('class', 'error-details-description-text')
+              .html(errorDetail);
 
-    function defaultCompare(a, b) {
-        return a < b ? -1 : a > b ? 1 : 0;
-    }
+          // If there are entity links in the error message..
+          var relatedEntities = [];
+          descriptionEnter.selectAll('.error_entity_link, .error_object_link')
+              .each(function() {
+                  var link = select(this);
+                  var isObjectLink = link.classed('error_object_link');
+                  var entityID = isObjectLink ?
+                      (utilEntityRoot(_error.object_type) + _error.object_id)
+                      : this.textContent;
+                  var entity = context.hasEntity(entityID);
 
-    TinyQueue.prototype = {
+                  relatedEntities.push(entityID);
+
+                  // Add click handler
+                  link
+                      .on('mouseover', function() {
+                          context.surface().selectAll(utilEntityOrMemberSelector([entityID], context.graph()))
+                              .classed('hover', true);
+                      })
+                      .on('mouseout', function() {
+                          context.surface().selectAll('.hover')
+                              .classed('hover', false);
+                      })
+                      .on('click', function() {
+                          event.preventDefault();
+                          var osmlayer = context.layers().layer('osm');
+                          if (!osmlayer.enabled()) {
+                              osmlayer.enabled(true);
+                          }
 
-        push: function (item) {
-            this.data.push(item);
-            this.length++;
-            this._up(this.length - 1);
-        },
+                          context.map().centerZoomEase(_error.loc, 20);
 
-        pop: function () {
-            if (this.length === 0) { return undefined; }
+                          if (entity) {
+                              context.enter(modeSelect(context, [entityID]));
+                          } else {
+                              context.loadEntity(entityID, function() {
+                                  context.enter(modeSelect(context, [entityID]));
+                              });
+                          }
+                      });
 
-            var top = this.data[0];
-            this.length--;
+                  // Replace with friendly name if possible
+                  // (The entity may not yet be loaded into the graph)
+                  if (entity) {
+                      var name = utilDisplayName(entity);  // try to use common name
 
-            if (this.length > 0) {
-                this.data[0] = this.data[this.length];
-                this._down(0);
-            }
-            this.data.pop();
+                      if (!name && !isObjectLink) {
+                          var preset = context.presets().match(entity, context.graph());
+                          name = preset && !preset.isFallback() && preset.name();  // fallback to preset name
+                      }
 
-            return top;
-        },
+                      if (name) {
+                          this.innerText = name;
+                      }
+                  }
+              });
 
-        peek: function () {
-            return this.data[0];
-        },
+          // Don't hide entities related to this error - #5880
+          context.features().forceVisible(relatedEntities);
+      }
 
-        _up: function (pos) {
-            var data = this.data;
-            var compare = this.compare;
-            var item = data[pos];
 
-            while (pos > 0) {
-                var parent = (pos - 1) >> 1;
-                var current = data[parent];
-                if (compare(item, current) >= 0) { break; }
-                data[pos] = current;
-                pos = parent;
-            }
+      keepRightDetails.error = function(val) {
+          if (!arguments.length) return _error;
+          _error = val;
+          return keepRightDetails;
+      };
 
-            data[pos] = item;
-        },
 
-        _down: function (pos) {
-            var this$1 = this;
+      return keepRightDetails;
+  }
 
-            var data = this.data;
-            var compare = this.compare;
-            var halfLength = this.length >> 1;
-            var item = data[pos];
+  function uiKeepRightEditor(context) {
+      var dispatch$1 = dispatch('change');
+      var keepRightDetails = uiKeepRightDetails(context);
+      var keepRightHeader = uiKeepRightHeader(context);
+      var quickLinks = uiQuickLinks();
 
-            while (pos < halfLength) {
-                var left = (pos << 1) + 1;
-                var right = left + 1;
-                var best = data[left];
+      var _error;
 
-                if (right < this$1.length && compare(data[right], best) < 0) {
-                    left = right;
-                    best = data[right];
-                }
-                if (compare(best, item) >= 0) { break; }
 
-                data[pos] = best;
-                pos = left;
-            }
+      function keepRightEditor(selection) {
+          // quick links
+          var choices = [{
+              id: 'zoom_to',
+              label: 'inspector.zoom_to.title',
+              tooltip: function() {
+                  return uiTooltipHtml(t('inspector.zoom_to.tooltip_issue'), t('inspector.zoom_to.key'));
+              },
+              click: function zoomTo() {
+                  context.mode().zoomToSelected();
+              }
+          }];
 
-            data[pos] = item;
-        }
-    };
-    tinyqueue.default = default_1;
 
-    var max = Math.max;
-    var min = Math.min;
+          var header = selection.selectAll('.header')
+              .data([0]);
 
-    var contourId = 0;
+          var headerEnter = header.enter()
+              .append('div')
+              .attr('class', 'header fillL');
 
+          headerEnter
+              .append('button')
+              .attr('class', 'fr error-editor-close')
+              .on('click', function() {
+                  context.enter(modeBrowse(context));
+              })
+              .call(svgIcon('#iD-icon-close'));
 
-    function processPolygon(contourOrHole, isSubject, depth, Q, bbox, isExteriorRing) {
-      var i, len, s1, s2, e1, e2;
-      for (i = 0, len = contourOrHole.length - 1; i < len; i++) {
-        s1 = contourOrHole[i];
-        s2 = contourOrHole[i + 1];
-        e1 = new SweepEvent(s1, false, undefined, isSubject);
-        e2 = new SweepEvent(s2, false, e1,        isSubject);
-        e1.otherEvent = e2;
+          headerEnter
+              .append('h3')
+              .text(t('QA.keepRight.title'));
 
-        if (s1[0] === s2[0] && s1[1] === s2[1]) {
-          continue; // skip collapsed edges, or it breaks
-        }
 
-        e1.contourId = e2.contourId = depth;
-        if (!isExteriorRing) {
-          e1.isExteriorRing = false;
-          e2.isExteriorRing = false;
-        }
-        if (compareEvents(e1, e2) > 0) {
-          e2.left = true;
-        } else {
-          e1.left = true;
-        }
+          var body = selection.selectAll('.body')
+              .data([0]);
 
-        var x = s1[0], y = s1[1];
-        bbox[0] = min(bbox[0], x);
-        bbox[1] = min(bbox[1], y);
-        bbox[2] = max(bbox[2], x);
-        bbox[3] = max(bbox[3], y);
+          body = body.enter()
+              .append('div')
+              .attr('class', 'body')
+              .merge(body);
 
-        // Pushing it so the queue is sorted from left to right,
-        // with object on the left having the highest priority.
-        Q.push(e1);
-        Q.push(e2);
-      }
-    }
+          var editor = body.selectAll('.error-editor')
+              .data([0]);
 
+          editor.enter()
+              .append('div')
+              .attr('class', 'modal-section error-editor')
+              .merge(editor)
+              .call(keepRightHeader.error(_error))
+              .call(quickLinks.choices(choices))
+              .call(keepRightDetails.error(_error))
+              .call(keepRightSaveSection);
 
-    function fillQueue(subject, clipping, sbbox, cbbox, operation) {
-      var eventQueue = new tinyqueue(null, compareEvents);
-      var polygonSet, isExteriorRing, i, ii, j, jj; //, k, kk;
 
-      for (i = 0, ii = subject.length; i < ii; i++) {
-        polygonSet = subject[i];
-        for (j = 0, jj = polygonSet.length; j < jj; j++) {
-          isExteriorRing = j === 0;
-          if (isExteriorRing) { contourId++; }
-          processPolygon(polygonSet[j], true, contourId, eventQueue, sbbox, isExteriorRing);
-        }
-      }
+          var footer = selection.selectAll('.footer')
+              .data([0]);
 
-      for (i = 0, ii = clipping.length; i < ii; i++) {
-        polygonSet = clipping[i];
-        for (j = 0, jj = polygonSet.length; j < jj; j++) {
-          isExteriorRing = j === 0;
-          if (operation === DIFFERENCE) { isExteriorRing = false; }
-          if (isExteriorRing) { contourId++; }
-          processPolygon(polygonSet[j], false, contourId, eventQueue, cbbox, isExteriorRing);
-        }
+          footer.enter()
+              .append('div')
+              .attr('class', 'footer')
+              .merge(footer)
+              .call(uiViewOnKeepRight(context).what(_error));
       }
 
-      return eventQueue;
-    }
 
-    var EMPTY = [];
+      function keepRightSaveSection(selection) {
+          var isSelected = (_error && _error.id === context.selectedErrorID());
+          var isShown = (_error && (isSelected || _error.newComment || _error.comment));
+          var saveSection = selection.selectAll('.error-save')
+              .data(
+                  (isShown ? [_error] : []),
+                  function(d) { return d.id + '-' + (d.status || 0); }
+              );
 
+          // exit
+          saveSection.exit()
+              .remove();
 
-    function trivialOperation(subject, clipping, operation) {
-      var result = null;
-      if (subject.length * clipping.length === 0) {
-        if        (operation === INTERSECTION) {
-          result = EMPTY;
-        } else if (operation === DIFFERENCE) {
-          result = subject;
-        } else if (operation === UNION ||
-                   operation === XOR) {
-          result = (subject.length === 0) ? clipping : subject;
-        }
-      }
-      return result;
-    }
+          // enter
+          var saveSectionEnter = saveSection.enter()
+              .append('div')
+              .attr('class', 'error-save save-section cf');
 
+          saveSectionEnter
+              .append('h4')
+              .attr('class', '.error-save-header')
+              .text(t('QA.keepRight.comment'));
 
-    function compareBBoxes(subject, clipping, sbbox, cbbox, operation) {
-      var result = null;
-      if (sbbox[0] > cbbox[2] ||
-          cbbox[0] > sbbox[2] ||
-          sbbox[1] > cbbox[3] ||
-          cbbox[1] > sbbox[3]) {
-        if        (operation === INTERSECTION) {
-          result = EMPTY;
-        } else if (operation === DIFFERENCE) {
-          result = subject;
-        } else if (operation === UNION ||
-                   operation === XOR) {
-          result = subject.concat(clipping);
-        }
-      }
-      return result;
-    }
+          saveSectionEnter
+              .append('textarea')
+              .attr('class', 'new-comment-input')
+              .attr('placeholder', t('QA.keepRight.comment_placeholder'))
+              .attr('maxlength', 1000)
+              .property('value', function(d) { return d.newComment || d.comment; })
+              .call(utilNoAuto)
+              .on('input', changeInput)
+              .on('blur', changeInput);
 
+          // update
+          saveSection = saveSectionEnter
+              .merge(saveSection)
+              .call(keepRightSaveButtons);
 
-    function boolean(subject, clipping, operation) {
-      if (typeof subject[0][0][0] === 'number') {
-        subject = [subject];
-      }
-      if (typeof clipping[0][0][0] === 'number') {
-        clipping = [clipping];
-      }
-      var trivial = trivialOperation(subject, clipping, operation);
-      if (trivial) {
-        return trivial === EMPTY ? null : trivial;
-      }
-      var sbbox = [Infinity, Infinity, -Infinity, -Infinity];
-      var cbbox = [Infinity, Infinity, -Infinity, -Infinity];
 
-      //console.time('fill queue');
-      var eventQueue = fillQueue(subject, clipping, sbbox, cbbox, operation);
-      //console.timeEnd('fill queue');
+          function changeInput() {
+              var input = select(this);
+              var val = input.property('value').trim();
 
-      trivial = compareBBoxes(subject, clipping, sbbox, cbbox, operation);
-      if (trivial) {
-        return trivial === EMPTY ? null : trivial;
-      }
-      //console.time('subdivide edges');
-      var sortedEvents = subdivide(eventQueue, subject, clipping, sbbox, cbbox, operation);
-      //console.timeEnd('subdivide edges');
+              if (val === _error.comment) {
+                  val = undefined;
+              }
 
-      //console.time('connect vertices');
-      var result = connectEdges(sortedEvents, operation);
-      //console.timeEnd('connect vertices');
-      return result;
-    }
+              // store the unsaved comment with the error itself
+              _error = _error.update({ newComment: val });
 
-    function union (subject, clipping) {
-      return boolean(subject, clipping, UNION);
-    }
+              var keepRight = services.keepRight;
+              if (keepRight) {
+                  keepRight.replaceError(_error);  // update keepright cache
+              }
 
-    function diff (subject, clipping) {
-      return boolean(subject, clipping, DIFFERENCE);
-    }
+              saveSection
+                  .call(keepRightSaveButtons);
+          }
+      }
 
-    function xor (subject, clipping){
-      return boolean(subject, clipping, XOR);
-    }
 
-    function intersection$1 (subject, clipping) {
-      return boolean(subject, clipping, INTERSECTION);
-    }
+      function keepRightSaveButtons(selection) {
+          var isSelected = (_error && _error.id === context.selectedErrorID());
+          var buttonSection = selection.selectAll('.buttons')
+              .data((isSelected ? [_error] : []), function(d) { return d.status + d.id; });
 
-    /**
-     * @enum {Number}
-     */
-    var operations = { UNION: UNION, DIFFERENCE: DIFFERENCE, INTERSECTION: INTERSECTION, XOR: XOR };
+          // exit
+          buttonSection.exit()
+              .remove();
 
-    exports.union = union;
-    exports.diff = diff;
-    exports.xor = xor;
-    exports.intersection = intersection$1;
-    exports.operations = operations;
+          // enter
+          var buttonEnter = buttonSection.enter()
+              .append('div')
+              .attr('class', 'buttons');
 
-    Object.defineProperty(exports, '__esModule', { value: true });
+          buttonEnter
+              .append('button')
+              .attr('class', 'button comment-button action')
+              .text(t('QA.keepRight.save_comment'));
 
-  })));
+          buttonEnter
+              .append('button')
+              .attr('class', 'button close-button action');
 
-  });
+          buttonEnter
+              .append('button')
+              .attr('class', 'button ignore-button action');
 
-  var martinez = unwrapExports(martinez_umd);
 
-  var read$6 = function (buffer, offset, isLE, mLen, nBytes) {
-    var e, m;
-    var eLen = (nBytes * 8) - mLen - 1;
-    var eMax = (1 << eLen) - 1;
-    var eBias = eMax >> 1;
-    var nBits = -7;
-    var i = isLE ? (nBytes - 1) : 0;
-    var d = isLE ? -1 : 1;
-    var s = buffer[offset + i];
+          // update
+          buttonSection = buttonSection
+              .merge(buttonEnter);
 
-    i += d;
+          buttonSection.select('.comment-button')   // select and propagate data
+              .attr('disabled', function(d) {
+                  return d.newComment === undefined ? true : null;
+              })
+              .on('click.comment', function(d) {
+                  this.blur();    // avoid keeping focus on the button - #4641
+                  var keepRight = services.keepRight;
+                  if (keepRight) {
+                      keepRight.postKeepRightUpdate(d, function(err, error) {
+                          dispatch$1.call('change', error);
+                      });
+                  }
+              });
 
-    e = s & ((1 << (-nBits)) - 1);
-    s >>= (-nBits);
-    nBits += eLen;
-    for (; nBits > 0; e = (e * 256) + buffer[offset + i], i += d, nBits -= 8) {}
+          buttonSection.select('.close-button')   // select and propagate data
+              .text(function(d) {
+                  var andComment = (d.newComment !== undefined ? '_comment' : '');
+                  return t('QA.keepRight.close' + andComment);
+              })
+              .on('click.close', function(d) {
+                  this.blur();    // avoid keeping focus on the button - #4641
+                  var keepRight = services.keepRight;
+                  if (keepRight) {
+                      d.state = 'ignore_t';   // ignore temporarily (error fixed)
+                      keepRight.postKeepRightUpdate(d, function(err, error) {
+                          dispatch$1.call('change', error);
+                      });
+                  }
+              });
 
-    m = e & ((1 << (-nBits)) - 1);
-    e >>= (-nBits);
-    nBits += mLen;
-    for (; nBits > 0; m = (m * 256) + buffer[offset + i], i += d, nBits -= 8) {}
+          buttonSection.select('.ignore-button')   // select and propagate data
+              .text(function(d) {
+                  var andComment = (d.newComment !== undefined ? '_comment' : '');
+                  return t('QA.keepRight.ignore' + andComment);
+              })
+              .on('click.ignore', function(d) {
+                  this.blur();    // avoid keeping focus on the button - #4641
+                  var keepRight = services.keepRight;
+                  if (keepRight) {
+                      d.state = 'ignore';   // ignore permanently (false positive)
+                      keepRight.postKeepRightUpdate(d, function(err, error) {
+                          dispatch$1.call('change', error);
+                      });
+                  }
+              });
+      }
 
-    if (e === 0) {
-      e = 1 - eBias;
-    } else if (e === eMax) {
-      return m ? NaN : ((s ? -1 : 1) * Infinity)
-    } else {
-      m = m + Math.pow(2, mLen);
-      e = e - eBias;
-    }
-    return (s ? -1 : 1) * m * Math.pow(2, e - mLen)
-  };
 
-  var write$6 = function (buffer, value, offset, isLE, mLen, nBytes) {
-    var e, m, c;
-    var eLen = (nBytes * 8) - mLen - 1;
-    var eMax = (1 << eLen) - 1;
-    var eBias = eMax >> 1;
-    var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0);
-    var i = isLE ? 0 : (nBytes - 1);
-    var d = isLE ? 1 : -1;
-    var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0;
+      keepRightEditor.error = function(val) {
+          if (!arguments.length) return _error;
+          _error = val;
+          return keepRightEditor;
+      };
 
-    value = Math.abs(value);
 
-    if (isNaN(value) || value === Infinity) {
-      m = isNaN(value) ? 1 : 0;
-      e = eMax;
-    } else {
-      e = Math.floor(Math.log(value) / Math.LN2);
-      if (value * (c = Math.pow(2, -e)) < 1) {
-        e--;
-        c *= 2;
-      }
-      if (e + eBias >= 1) {
-        value += rt / c;
-      } else {
-        value += rt * Math.pow(2, 1 - eBias);
-      }
-      if (value * c >= 2) {
-        e++;
-        c /= 2;
-      }
+      return utilRebind(keepRightEditor, dispatch$1, 'on');
+  }
 
-      if (e + eBias >= eMax) {
-        m = 0;
-        e = eMax;
-      } else if (e + eBias >= 1) {
-        m = ((value * c) - 1) * Math.pow(2, mLen);
-        e = e + eBias;
-      } else {
-        m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen);
-        e = 0;
-      }
-    }
+  function uiKeepRightHeader() {
+      var _error;
 
-    for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}
 
-    e = (e << mLen) | m;
-    eLen += mLen;
-    for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}
+      function errorTitle(d) {
+          var unknown = t('inspector.unknown');
 
-    buffer[offset + i - d] |= s * 128;
-  };
+          if (!d) return unknown;
+          var errorType = d.error_type;
+          var parentErrorType = d.parent_error_type;
 
-  var ieee754 = {
-       read: read$6,
-       write: write$6
-  };
+          var et = en.QA.keepRight.errorTypes[errorType];
+          var pt = en.QA.keepRight.errorTypes[parentErrorType];
 
-  var pbf = Pbf;
+          if (et && et.title) {
+              return t('QA.keepRight.errorTypes.' + errorType + '.title');
+          } else if (pt && pt.title) {
+              return t('QA.keepRight.errorTypes.' + parentErrorType + '.title');
+          } else {
+              return unknown;
+          }
+      }
 
 
+      function keepRightHeader(selection) {
+          var header = selection.selectAll('.error-header')
+              .data(
+                  (_error ? [_error] : []),
+                  function(d) { return d.id + '-' + (d.status || 0); }
+              );
 
-  function Pbf(buf) {
-      this.buf = ArrayBuffer.isView && ArrayBuffer.isView(buf) ? buf : new Uint8Array(buf || 0);
-      this.pos = 0;
-      this.type = 0;
-      this.length = this.buf.length;
-  }
+          header.exit()
+              .remove();
 
-  Pbf.Varint  = 0; // varint: int32, int64, uint32, uint64, sint32, sint64, bool, enum
-  Pbf.Fixed64 = 1; // 64-bit: double, fixed64, sfixed64
-  Pbf.Bytes   = 2; // length-delimited: string, bytes, embedded messages, packed repeated fields
-  Pbf.Fixed32 = 5; // 32-bit: float, fixed32, sfixed32
+          var headerEnter = header.enter()
+              .append('div')
+              .attr('class', 'error-header');
 
-  var SHIFT_LEFT_32 = (1 << 16) * (1 << 16),
-      SHIFT_RIGHT_32 = 1 / SHIFT_LEFT_32;
+          var iconEnter = headerEnter
+              .append('div')
+              .attr('class', 'error-header-icon')
+              .classed('new', function(d) { return d.id < 0; });
 
-  Pbf.prototype = {
+          iconEnter
+              .append('div')
+              .attr('class', function(d) {
+                  return 'preset-icon-28 qa_error ' + d.service + ' error_id-' + d.id + ' error_type-' + d.parent_error_type;
+              })
+              .call(svgIcon('#iD-icon-bolt', 'qa_error-fill'));
 
-      destroy: function() {
-          this.buf = null;
-      },
+          headerEnter
+              .append('div')
+              .attr('class', 'error-header-label')
+              .text(errorTitle);
+      }
 
-      // === READING =================================================================
 
-      readFields: function(readField, result, end) {
-          end = end || this.length;
+      keepRightHeader.error = function(val) {
+          if (!arguments.length) return _error;
+          _error = val;
+          return keepRightHeader;
+      };
 
-          while (this.pos < end) {
-              var val = this.readVarint(),
-                  tag = val >> 3,
-                  startPos = this.pos;
 
-              this.type = val & 0x7;
-              readField(tag, result, this);
+      return keepRightHeader;
+  }
 
-              if (this.pos === startPos) this.skip(val);
-          }
-          return result;
-      },
+  function uiLasso(context) {
+      var group, polygon;
 
-      readMessage: function(readField, result) {
-          return this.readFields(readField, result, this.readVarint() + this.pos);
-      },
+      lasso.coordinates = [];
 
-      readFixed32: function() {
-          var val = readUInt32(this.buf, this.pos);
-          this.pos += 4;
-          return val;
-      },
+      function lasso(selection) {
+          context.container()
+              .classed('lasso', true);
 
-      readSFixed32: function() {
-          var val = readInt32(this.buf, this.pos);
-          this.pos += 4;
-          return val;
-      },
+          group = selection
+              .append('g')
+              .attr('class', 'lasso hide');
 
-      // 64-bit int handling is based on github.com/dpw/node-buffer-more-ints (MIT-licensed)
+          polygon = group
+              .append('path')
+              .attr('class', 'lasso-path');
 
-      readFixed64: function() {
-          var val = readUInt32(this.buf, this.pos) + readUInt32(this.buf, this.pos + 4) * SHIFT_LEFT_32;
-          this.pos += 8;
-          return val;
-      },
+          group
+              .call(uiToggle(true));
+      }
 
-      readSFixed64: function() {
-          var val = readUInt32(this.buf, this.pos) + readInt32(this.buf, this.pos + 4) * SHIFT_LEFT_32;
-          this.pos += 8;
-          return val;
-      },
 
-      readFloat: function() {
-          var val = ieee754.read(this.buf, this.pos, true, 23, 4);
-          this.pos += 4;
-          return val;
-      },
+      function draw() {
+          if (polygon) {
+              polygon.data([lasso.coordinates])
+                  .attr('d', function(d) { return 'M' + d.join(' L') + ' Z'; });
+          }
+      }
 
-      readDouble: function() {
-          var val = ieee754.read(this.buf, this.pos, true, 52, 8);
-          this.pos += 8;
-          return val;
-      },
 
-      readVarint: function(isSigned) {
-          var buf = this.buf,
-              val, b;
+      lasso.extent = function () {
+          return lasso.coordinates.reduce(function(extent, point) {
+              return extent.extend(geoExtent(point));
+          }, geoExtent());
+      };
 
-          b = buf[this.pos++]; val  =  b & 0x7f;        if (b < 0x80) return val;
-          b = buf[this.pos++]; val |= (b & 0x7f) << 7;  if (b < 0x80) return val;
-          b = buf[this.pos++]; val |= (b & 0x7f) << 14; if (b < 0x80) return val;
-          b = buf[this.pos++]; val |= (b & 0x7f) << 21; if (b < 0x80) return val;
-          b = buf[this.pos];   val |= (b & 0x0f) << 28;
 
-          return readVarintRemainder(val, isSigned, this);
-      },
+      lasso.p = function(_) {
+          if (!arguments.length) return lasso;
+          lasso.coordinates.push(_);
+          draw();
+          return lasso;
+      };
 
-      readVarint64: function() { // for compatibility with v2.0.1
-          return this.readVarint(true);
-      },
 
-      readSVarint: function() {
-          var num = this.readVarint();
-          return num % 2 === 1 ? (num + 1) / -2 : num / 2; // zigzag encoding
-      },
+      lasso.close = function() {
+          if (group) {
+              group.call(uiToggle(false, function() {
+                  select(this).remove();
+              }));
+          }
+          context.container().classed('lasso', false);
+      };
 
-      readBoolean: function() {
-          return Boolean(this.readVarint());
-      },
 
-      readString: function() {
-          var end = this.readVarint() + this.pos,
-              str = readUtf8(this.buf, this.pos, end);
-          this.pos = end;
-          return str;
-      },
+      return lasso;
+  }
 
-      readBytes: function() {
-          var end = this.readVarint() + this.pos,
-              buffer = this.buf.subarray(this.pos, end);
-          this.pos = end;
-          return buffer;
-      },
+  function uiNoteComments() {
+      var _note;
 
-      // verbose for performance reasons; doesn't affect gzipped size
 
-      readPackedVarint: function(arr, isSigned) {
-          var end = readPackedEnd(this);
-          arr = arr || [];
-          while (this.pos < end) arr.push(this.readVarint(isSigned));
-          return arr;
-      },
-      readPackedSVarint: function(arr) {
-          var end = readPackedEnd(this);
-          arr = arr || [];
-          while (this.pos < end) arr.push(this.readSVarint());
-          return arr;
-      },
-      readPackedBoolean: function(arr) {
-          var end = readPackedEnd(this);
-          arr = arr || [];
-          while (this.pos < end) arr.push(this.readBoolean());
-          return arr;
-      },
-      readPackedFloat: function(arr) {
-          var end = readPackedEnd(this);
-          arr = arr || [];
-          while (this.pos < end) arr.push(this.readFloat());
-          return arr;
-      },
-      readPackedDouble: function(arr) {
-          var end = readPackedEnd(this);
-          arr = arr || [];
-          while (this.pos < end) arr.push(this.readDouble());
-          return arr;
-      },
-      readPackedFixed32: function(arr) {
-          var end = readPackedEnd(this);
-          arr = arr || [];
-          while (this.pos < end) arr.push(this.readFixed32());
-          return arr;
-      },
-      readPackedSFixed32: function(arr) {
-          var end = readPackedEnd(this);
-          arr = arr || [];
-          while (this.pos < end) arr.push(this.readSFixed32());
-          return arr;
-      },
-      readPackedFixed64: function(arr) {
-          var end = readPackedEnd(this);
-          arr = arr || [];
-          while (this.pos < end) arr.push(this.readFixed64());
-          return arr;
-      },
-      readPackedSFixed64: function(arr) {
-          var end = readPackedEnd(this);
-          arr = arr || [];
-          while (this.pos < end) arr.push(this.readSFixed64());
-          return arr;
-      },
+      function noteComments(selection) {
+          if (_note.isNew()) return; // don't draw .comments-container
 
-      skip: function(val) {
-          var type = val & 0x7;
-          if (type === Pbf.Varint) while (this.buf[this.pos++] > 0x7f) {}
-          else if (type === Pbf.Bytes) this.pos = this.readVarint() + this.pos;
-          else if (type === Pbf.Fixed32) this.pos += 4;
-          else if (type === Pbf.Fixed64) this.pos += 8;
-          else throw new Error('Unimplemented type: ' + type);
-      },
+          var comments = selection.selectAll('.comments-container')
+              .data([0]);
 
-      // === WRITING =================================================================
+          comments = comments.enter()
+              .append('div')
+              .attr('class', 'comments-container')
+              .merge(comments);
 
-      writeTag: function(tag, type) {
-          this.writeVarint((tag << 3) | type);
-      },
+          var commentEnter = comments.selectAll('.comment')
+              .data(_note.comments)
+              .enter()
+              .append('div')
+              .attr('class', 'comment');
 
-      realloc: function(min) {
-          var length = this.length || 16;
+          commentEnter
+              .append('div')
+              .attr('class', function(d) { return 'comment-avatar user-' + d.uid; })
+              .call(svgIcon('#iD-icon-avatar', 'comment-avatar-icon'));
 
-          while (length < this.pos + min) length *= 2;
+          var mainEnter = commentEnter
+              .append('div')
+              .attr('class', 'comment-main');
 
-          if (length !== this.length) {
-              var buf = new Uint8Array(length);
-              buf.set(this.buf);
-              this.buf = buf;
-              this.length = length;
-          }
-      },
+          var metadataEnter = mainEnter
+              .append('div')
+              .attr('class', 'comment-metadata');
 
-      finish: function() {
-          this.length = this.pos;
-          this.pos = 0;
-          return this.buf.subarray(0, this.length);
-      },
+          metadataEnter
+              .append('div')
+              .attr('class', 'comment-author')
+              .each(function(d) {
+                  var selection = select(this);
+                  var osm = services.osm;
+                  if (osm && d.user) {
+                      selection = selection
+                          .append('a')
+                          .attr('class', 'comment-author-link')
+                          .attr('href', osm.userURL(d.user))
+                          .attr('tabindex', -1)
+                          .attr('target', '_blank');
+                  }
+                  selection
+                      .text(function(d) { return d.user || t('note.anonymous'); });
+              });
 
-      writeFixed32: function(val) {
-          this.realloc(4);
-          writeInt32(this.buf, val, this.pos);
-          this.pos += 4;
-      },
+          metadataEnter
+              .append('div')
+              .attr('class', 'comment-date')
+              .text(function(d) {
+                  return t('note.status.' + d.action, { when: localeDateString(d.date) });
+              });
 
-      writeSFixed32: function(val) {
-          this.realloc(4);
-          writeInt32(this.buf, val, this.pos);
-          this.pos += 4;
-      },
+          mainEnter
+              .append('div')
+              .attr('class', 'comment-text')
+              .html(function(d) { return d.html; });
 
-      writeFixed64: function(val) {
-          this.realloc(8);
-          writeInt32(this.buf, val & -1, this.pos);
-          writeInt32(this.buf, Math.floor(val * SHIFT_RIGHT_32), this.pos + 4);
-          this.pos += 8;
-      },
+          comments
+              .call(replaceAvatars);
+      }
 
-      writeSFixed64: function(val) {
-          this.realloc(8);
-          writeInt32(this.buf, val & -1, this.pos);
-          writeInt32(this.buf, Math.floor(val * SHIFT_RIGHT_32), this.pos + 4);
-          this.pos += 8;
-      },
 
-      writeVarint: function(val) {
-          val = +val || 0;
+      function replaceAvatars(selection) {
+          var osm = services.osm;
+          if (!osm) return;
 
-          if (val > 0xfffffff || val < 0) {
-              writeBigVarint(val, this);
-              return;
-          }
+          var uids = {};  // gather uids in the comment thread
+          _note.comments.forEach(function(d) {
+              if (d.uid) uids[d.uid] = true;
+          });
 
-          this.realloc(4);
+          Object.keys(uids).forEach(function(uid) {
+              osm.loadUser(uid, function(err, user) {
+                  if (!user || !user.image_url) return;
 
-          this.buf[this.pos++] =           val & 0x7f  | (val > 0x7f ? 0x80 : 0); if (val <= 0x7f) return;
-          this.buf[this.pos++] = ((val >>>= 7) & 0x7f) | (val > 0x7f ? 0x80 : 0); if (val <= 0x7f) return;
-          this.buf[this.pos++] = ((val >>>= 7) & 0x7f) | (val > 0x7f ? 0x80 : 0); if (val <= 0x7f) return;
-          this.buf[this.pos++] =   (val >>> 7) & 0x7f;
-      },
+                  selection.selectAll('.comment-avatar.user-' + uid)
+                      .html('')
+                      .append('img')
+                      .attr('class', 'icon comment-avatar-icon')
+                      .attr('src', user.image_url)
+                      .attr('alt', user.display_name);
+              });
+          });
+      }
 
-      writeSVarint: function(val) {
-          this.writeVarint(val < 0 ? -val * 2 - 1 : val * 2);
-      },
 
-      writeBoolean: function(val) {
-          this.writeVarint(Boolean(val));
-      },
+      function localeDateString(s) {
+          if (!s) return null;
+          var detected = utilDetect();
+          var options = { day: 'numeric', month: 'short', year: 'numeric' };
+          s = s.replace(/-/g, '/'); // fix browser-specific Date() issues
+          var d = new Date(s);
+          if (isNaN(d.getTime())) return null;
+          return d.toLocaleDateString(detected.locale, options);
+      }
 
-      writeString: function(str) {
-          str = String(str);
-          this.realloc(str.length * 4);
 
-          this.pos++; // reserve 1 byte for short string length
+      noteComments.note = function(val) {
+          if (!arguments.length) return _note;
+          _note = val;
+          return noteComments;
+      };
 
-          var startPos = this.pos;
-          // write the string directly to the buffer and see how much was written
-          this.pos = writeUtf8(this.buf, str, this.pos);
-          var len = this.pos - startPos;
 
-          if (len >= 0x80) makeRoomForExtraLength(startPos, len, this);
+      return noteComments;
+  }
 
-          // finally, write the message length in the reserved place and restore the position
-          this.pos = startPos - 1;
-          this.writeVarint(len);
-          this.pos += len;
-      },
+  function uiNoteEditor(context) {
+      var dispatch$1 = dispatch('change');
+      var quickLinks = uiQuickLinks();
+      var noteComments = uiNoteComments();
+      var noteHeader = uiNoteHeader();
 
-      writeFloat: function(val) {
-          this.realloc(4);
-          ieee754.write(this.buf, val, this.pos, true, 23, 4);
-          this.pos += 4;
-      },
+      // var formFields = uiFormFields(context);
 
-      writeDouble: function(val) {
-          this.realloc(8);
-          ieee754.write(this.buf, val, this.pos, true, 52, 8);
-          this.pos += 8;
-      },
+      var _note;
+      // var _fieldsArr;
 
-      writeBytes: function(buffer) {
-          var len = buffer.length;
-          this.writeVarint(len);
-          this.realloc(len);
-          for (var i = 0; i < len; i++) this.buf[this.pos++] = buffer[i];
-      },
 
-      writeRawMessage: function(fn, obj) {
-          this.pos++; // reserve 1 byte for short message length
+      function noteEditor(selection) {
+          // quick links
+          var choices = [{
+              id: 'zoom_to',
+              label: 'inspector.zoom_to.title',
+              tooltip: function() {
+                  return uiTooltipHtml(t('inspector.zoom_to.tooltip_note'), t('inspector.zoom_to.key'));
+              },
+              click: function zoomTo() {
+                  context.mode().zoomToSelected();
+              }
+          }];
 
-          // write the message directly to the buffer and see how much was written
-          var startPos = this.pos;
-          fn(obj, this);
-          var len = this.pos - startPos;
 
-          if (len >= 0x80) makeRoomForExtraLength(startPos, len, this);
+          var header = selection.selectAll('.header')
+              .data([0]);
 
-          // finally, write the message length in the reserved place and restore the position
-          this.pos = startPos - 1;
-          this.writeVarint(len);
-          this.pos += len;
-      },
+          var headerEnter = header.enter()
+              .append('div')
+              .attr('class', 'header fillL');
 
-      writeMessage: function(tag, fn, obj) {
-          this.writeTag(tag, Pbf.Bytes);
-          this.writeRawMessage(fn, obj);
-      },
+          headerEnter
+              .append('button')
+              .attr('class', 'fr note-editor-close')
+              .on('click', function() {
+                  context.enter(modeBrowse(context));
+              })
+              .call(svgIcon('#iD-icon-close'));
 
-      writePackedVarint:   function(tag, arr) { this.writeMessage(tag, writePackedVarint, arr);   },
-      writePackedSVarint:  function(tag, arr) { this.writeMessage(tag, writePackedSVarint, arr);  },
-      writePackedBoolean:  function(tag, arr) { this.writeMessage(tag, writePackedBoolean, arr);  },
-      writePackedFloat:    function(tag, arr) { this.writeMessage(tag, writePackedFloat, arr);    },
-      writePackedDouble:   function(tag, arr) { this.writeMessage(tag, writePackedDouble, arr);   },
-      writePackedFixed32:  function(tag, arr) { this.writeMessage(tag, writePackedFixed32, arr);  },
-      writePackedSFixed32: function(tag, arr) { this.writeMessage(tag, writePackedSFixed32, arr); },
-      writePackedFixed64:  function(tag, arr) { this.writeMessage(tag, writePackedFixed64, arr);  },
-      writePackedSFixed64: function(tag, arr) { this.writeMessage(tag, writePackedSFixed64, arr); },
+          headerEnter
+              .append('h3')
+              .text(t('note.title'));
 
-      writeBytesField: function(tag, buffer) {
-          this.writeTag(tag, Pbf.Bytes);
-          this.writeBytes(buffer);
-      },
-      writeFixed32Field: function(tag, val) {
-          this.writeTag(tag, Pbf.Fixed32);
-          this.writeFixed32(val);
-      },
-      writeSFixed32Field: function(tag, val) {
-          this.writeTag(tag, Pbf.Fixed32);
-          this.writeSFixed32(val);
-      },
-      writeFixed64Field: function(tag, val) {
-          this.writeTag(tag, Pbf.Fixed64);
-          this.writeFixed64(val);
-      },
-      writeSFixed64Field: function(tag, val) {
-          this.writeTag(tag, Pbf.Fixed64);
-          this.writeSFixed64(val);
-      },
-      writeVarintField: function(tag, val) {
-          this.writeTag(tag, Pbf.Varint);
-          this.writeVarint(val);
-      },
-      writeSVarintField: function(tag, val) {
-          this.writeTag(tag, Pbf.Varint);
-          this.writeSVarint(val);
-      },
-      writeStringField: function(tag, str) {
-          this.writeTag(tag, Pbf.Bytes);
-          this.writeString(str);
-      },
-      writeFloatField: function(tag, val) {
-          this.writeTag(tag, Pbf.Fixed32);
-          this.writeFloat(val);
-      },
-      writeDoubleField: function(tag, val) {
-          this.writeTag(tag, Pbf.Fixed64);
-          this.writeDouble(val);
-      },
-      writeBooleanField: function(tag, val) {
-          this.writeVarintField(tag, Boolean(val));
-      }
-  };
 
-  function readVarintRemainder(l, s, p) {
-      var buf = p.buf,
-          h, b;
+          var body = selection.selectAll('.body')
+              .data([0]);
 
-      b = buf[p.pos++]; h  = (b & 0x70) >> 4;  if (b < 0x80) return toNum(l, h, s);
-      b = buf[p.pos++]; h |= (b & 0x7f) << 3;  if (b < 0x80) return toNum(l, h, s);
-      b = buf[p.pos++]; h |= (b & 0x7f) << 10; if (b < 0x80) return toNum(l, h, s);
-      b = buf[p.pos++]; h |= (b & 0x7f) << 17; if (b < 0x80) return toNum(l, h, s);
-      b = buf[p.pos++]; h |= (b & 0x7f) << 24; if (b < 0x80) return toNum(l, h, s);
-      b = buf[p.pos++]; h |= (b & 0x01) << 31; if (b < 0x80) return toNum(l, h, s);
+          body = body.enter()
+              .append('div')
+              .attr('class', 'body')
+              .merge(body);
 
-      throw new Error('Expected varint not more than 10 bytes');
-  }
+          var editor = body.selectAll('.note-editor')
+              .data([0]);
 
-  function readPackedEnd(pbf) {
-      return pbf.type === Pbf.Bytes ?
-          pbf.readVarint() + pbf.pos : pbf.pos + 1;
-  }
+          editor.enter()
+              .append('div')
+              .attr('class', 'modal-section note-editor')
+              .merge(editor)
+              .call(noteHeader.note(_note))
+              .call(quickLinks.choices(choices))
+              .call(noteComments.note(_note))
+              .call(noteSaveSection);
 
-  function toNum(low, high, isSigned) {
-      if (isSigned) {
-          return high * 0x100000000 + (low >>> 0);
-      }
 
-      return ((high >>> 0) * 0x100000000) + (low >>> 0);
-  }
+          var footer = selection.selectAll('.footer')
+              .data([0]);
 
-  function writeBigVarint(val, pbf) {
-      var low, high;
+          footer.enter()
+              .append('div')
+              .attr('class', 'footer')
+              .merge(footer)
+              .call(uiViewOnOSM(context).what(_note))
+              .call(uiNoteReport(context).note(_note));
 
-      if (val >= 0) {
-          low  = (val % 0x100000000) | 0;
-          high = (val / 0x100000000) | 0;
-      } else {
-          low  = ~(-val % 0x100000000);
-          high = ~(-val / 0x100000000);
 
-          if (low ^ 0xffffffff) {
-              low = (low + 1) | 0;
-          } else {
-              low = 0;
-              high = (high + 1) | 0;
+          // rerender the note editor on any auth change
+          var osm = services.osm;
+          if (osm) {
+              osm.on('change.note-save', function() {
+                  selection.call(noteEditor);
+              });
           }
       }
 
-      if (val >= 0x10000000000000000 || val < -0x10000000000000000) {
-          throw new Error('Given varint doesn\'t fit into 10 bytes');
-      }
 
-      pbf.realloc(10);
+      function noteSaveSection(selection) {
+          var isSelected = (_note && _note.id === context.selectedNoteID());
+          var noteSave = selection.selectAll('.note-save')
+              .data((isSelected ? [_note] : []), function(d) { return d.status + d.id; });
 
-      writeBigVarintLow(low, high, pbf);
-      writeBigVarintHigh(high, pbf);
-  }
+          // exit
+          noteSave.exit()
+              .remove();
 
-  function writeBigVarintLow(low, high, pbf) {
-      pbf.buf[pbf.pos++] = low & 0x7f | 0x80; low >>>= 7;
-      pbf.buf[pbf.pos++] = low & 0x7f | 0x80; low >>>= 7;
-      pbf.buf[pbf.pos++] = low & 0x7f | 0x80; low >>>= 7;
-      pbf.buf[pbf.pos++] = low & 0x7f | 0x80; low >>>= 7;
-      pbf.buf[pbf.pos]   = low & 0x7f;
-  }
+          // enter
+          var noteSaveEnter = noteSave.enter()
+              .append('div')
+              .attr('class', 'note-save save-section cf');
 
-  function writeBigVarintHigh(high, pbf) {
-      var lsb = (high & 0x07) << 4;
+          // // if new note, show categories to pick from
+          // if (_note.isNew()) {
+          //     var presets = context.presets();
 
-      pbf.buf[pbf.pos++] |= lsb         | ((high >>>= 3) ? 0x80 : 0); if (!high) return;
-      pbf.buf[pbf.pos++]  = high & 0x7f | ((high >>>= 7) ? 0x80 : 0); if (!high) return;
-      pbf.buf[pbf.pos++]  = high & 0x7f | ((high >>>= 7) ? 0x80 : 0); if (!high) return;
-      pbf.buf[pbf.pos++]  = high & 0x7f | ((high >>>= 7) ? 0x80 : 0); if (!high) return;
-      pbf.buf[pbf.pos++]  = high & 0x7f | ((high >>>= 7) ? 0x80 : 0); if (!high) return;
-      pbf.buf[pbf.pos++]  = high & 0x7f;
-  }
+          //     // NOTE: this key isn't a age and therefore there is no documentation (yet)
+          //     _fieldsArr = [
+          //         uiField(context, presets.field('category'), null, { show: true, revert: false }),
+          //     ];
 
-  function makeRoomForExtraLength(startPos, len, pbf) {
-      var extraLen =
-          len <= 0x3fff ? 1 :
-          len <= 0x1fffff ? 2 :
-          len <= 0xfffffff ? 3 : Math.ceil(Math.log(len) / (Math.LN2 * 7));
+          //     _fieldsArr.forEach(function(field) {
+          //         field
+          //             .on('change', changeCategory);
+          //     });
 
-      // if 1 byte isn't enough for encoding message length, shift the data to the right
-      pbf.realloc(extraLen);
-      for (var i = pbf.pos - 1; i >= startPos; i--) pbf.buf[i + extraLen] = pbf.buf[i];
-  }
+          //     noteSaveEnter
+          //         .append('div')
+          //         .attr('class', 'note-category')
+          //         .call(formFields.fieldsArr(_fieldsArr));
+          // }
 
-  function writePackedVarint(arr, pbf)   { for (var i = 0; i < arr.length; i++) pbf.writeVarint(arr[i]);   }
-  function writePackedSVarint(arr, pbf)  { for (var i = 0; i < arr.length; i++) pbf.writeSVarint(arr[i]);  }
-  function writePackedFloat(arr, pbf)    { for (var i = 0; i < arr.length; i++) pbf.writeFloat(arr[i]);    }
-  function writePackedDouble(arr, pbf)   { for (var i = 0; i < arr.length; i++) pbf.writeDouble(arr[i]);   }
-  function writePackedBoolean(arr, pbf)  { for (var i = 0; i < arr.length; i++) pbf.writeBoolean(arr[i]);  }
-  function writePackedFixed32(arr, pbf)  { for (var i = 0; i < arr.length; i++) pbf.writeFixed32(arr[i]);  }
-  function writePackedSFixed32(arr, pbf) { for (var i = 0; i < arr.length; i++) pbf.writeSFixed32(arr[i]); }
-  function writePackedFixed64(arr, pbf)  { for (var i = 0; i < arr.length; i++) pbf.writeFixed64(arr[i]);  }
-  function writePackedSFixed64(arr, pbf) { for (var i = 0; i < arr.length; i++) pbf.writeSFixed64(arr[i]); }
+          // function changeCategory() {
+          //     // NOTE: perhaps there is a better way to get value
+          //     var val = d3_select('input[name=\'category\']:checked').property('__data__') || undefined;
 
-  // Buffer code below from https://github.com/feross/buffer, MIT-licensed
+          //     // store the unsaved category with the note itself
+          //     _note = _note.update({ newCategory: val });
+          //     var osm = services.osm;
+          //     if (osm) {
+          //         osm.replaceNote(_note);  // update note cache
+          //     }
+          //     noteSave
+          //         .call(noteSaveButtons);
+          // }
 
-  function readUInt32(buf, pos) {
-      return ((buf[pos]) |
-          (buf[pos + 1] << 8) |
-          (buf[pos + 2] << 16)) +
-          (buf[pos + 3] * 0x1000000);
-  }
+          noteSaveEnter
+              .append('h4')
+              .attr('class', '.note-save-header')
+              .text(function() {
+                  return _note.isNew() ? t('note.newDescription') : t('note.newComment');
+              });
 
-  function writeInt32(buf, val, pos) {
-      buf[pos] = val;
-      buf[pos + 1] = (val >>> 8);
-      buf[pos + 2] = (val >>> 16);
-      buf[pos + 3] = (val >>> 24);
-  }
+          noteSaveEnter
+              .append('textarea')
+              .attr('class', 'new-comment-input')
+              .attr('placeholder', t('note.inputPlaceholder'))
+              .attr('maxlength', 1000)
+              .property('value', function(d) { return d.newComment; })
+              .call(utilNoAuto)
+              .on('keydown.note-input', keydown)
+              .on('input.note-input', changeInput)
+              .on('blur.note-input', changeInput);
 
-  function readInt32(buf, pos) {
-      return ((buf[pos]) |
-          (buf[pos + 1] << 8) |
-          (buf[pos + 2] << 16)) +
-          (buf[pos + 3] << 24);
-  }
+          // update
+          noteSave = noteSaveEnter
+              .merge(noteSave)
+              .call(userDetails)
+              .call(noteSaveButtons);
 
-  function readUtf8(buf, pos, end) {
-      var str = '';
-      var i = pos;
 
-      while (i < end) {
-          var b0 = buf[i];
-          var c = null; // codepoint
-          var bytesPerSequence =
-              b0 > 0xEF ? 4 :
-              b0 > 0xDF ? 3 :
-              b0 > 0xBF ? 2 : 1;
+          // fast submit if user presses cmd+enter
+          function keydown() {
+              if (!(event.keyCode === 13 && event.metaKey)) return;
 
-          if (i + bytesPerSequence > end) break;
+              var osm = services.osm;
+              if (!osm) return;
 
-          var b1, b2, b3;
+              var hasAuth = osm.authenticated();
+              if (!hasAuth) return;
 
-          if (bytesPerSequence === 1) {
-              if (b0 < 0x80) {
-                  c = b0;
-              }
-          } else if (bytesPerSequence === 2) {
-              b1 = buf[i + 1];
-              if ((b1 & 0xC0) === 0x80) {
-                  c = (b0 & 0x1F) << 0x6 | (b1 & 0x3F);
-                  if (c <= 0x7F) {
-                      c = null;
-                  }
-              }
-          } else if (bytesPerSequence === 3) {
-              b1 = buf[i + 1];
-              b2 = buf[i + 2];
-              if ((b1 & 0xC0) === 0x80 && (b2 & 0xC0) === 0x80) {
-                  c = (b0 & 0xF) << 0xC | (b1 & 0x3F) << 0x6 | (b2 & 0x3F);
-                  if (c <= 0x7FF || (c >= 0xD800 && c <= 0xDFFF)) {
-                      c = null;
-                  }
-              }
-          } else if (bytesPerSequence === 4) {
-              b1 = buf[i + 1];
-              b2 = buf[i + 2];
-              b3 = buf[i + 3];
-              if ((b1 & 0xC0) === 0x80 && (b2 & 0xC0) === 0x80 && (b3 & 0xC0) === 0x80) {
-                  c = (b0 & 0xF) << 0x12 | (b1 & 0x3F) << 0xC | (b2 & 0x3F) << 0x6 | (b3 & 0x3F);
-                  if (c <= 0xFFFF || c >= 0x110000) {
-                      c = null;
-                  }
-              }
-          }
+              if (!_note.newComment) return;
 
-          if (c === null) {
-              c = 0xFFFD;
-              bytesPerSequence = 1;
+              event.preventDefault();
 
-          } else if (c > 0xFFFF) {
-              c -= 0x10000;
-              str += String.fromCharCode(c >>> 10 & 0x3FF | 0xD800);
-              c = 0xDC00 | c & 0x3FF;
+              select(this)
+                  .on('keydown.note-input', null);
+
+              // focus on button and submit
+              window.setTimeout(function() {
+                  if (_note.isNew()) {
+                      noteSave.selectAll('.save-button').node().focus();
+                      clickSave(_note);
+                  } else  {
+                      noteSave.selectAll('.comment-button').node().focus();
+                      clickComment(_note);
+                  }
+              }, 10);
           }
 
-          str += String.fromCharCode(c);
-          i += bytesPerSequence;
-      }
 
-      return str;
-  }
+          function changeInput() {
+              var input = select(this);
+              var val = input.property('value').trim() || undefined;
 
-  function writeUtf8(buf, str, pos) {
-      for (var i = 0, c, lead; i < str.length; i++) {
-          c = str.charCodeAt(i); // code point
+              // store the unsaved comment with the note itself
+              _note = _note.update({ newComment: val });
 
-          if (c > 0xD7FF && c < 0xE000) {
-              if (lead) {
-                  if (c < 0xDC00) {
-                      buf[pos++] = 0xEF;
-                      buf[pos++] = 0xBF;
-                      buf[pos++] = 0xBD;
-                      lead = c;
-                      continue;
-                  } else {
-                      c = lead - 0xD800 << 10 | c - 0xDC00 | 0x10000;
-                      lead = null;
-                  }
-              } else {
-                  if (c > 0xDBFF || (i + 1 === str.length)) {
-                      buf[pos++] = 0xEF;
-                      buf[pos++] = 0xBF;
-                      buf[pos++] = 0xBD;
-                  } else {
-                      lead = c;
-                  }
-                  continue;
+              var osm = services.osm;
+              if (osm) {
+                  osm.replaceNote(_note);  // update note cache
               }
-          } else if (lead) {
-              buf[pos++] = 0xEF;
-              buf[pos++] = 0xBF;
-              buf[pos++] = 0xBD;
-              lead = null;
-          }
 
-          if (c < 0x80) {
-              buf[pos++] = c;
-          } else {
-              if (c < 0x800) {
-                  buf[pos++] = c >> 0x6 | 0xC0;
-              } else {
-                  if (c < 0x10000) {
-                      buf[pos++] = c >> 0xC | 0xE0;
-                  } else {
-                      buf[pos++] = c >> 0x12 | 0xF0;
-                      buf[pos++] = c >> 0xC & 0x3F | 0x80;
-                  }
-                  buf[pos++] = c >> 0x6 & 0x3F | 0x80;
-              }
-              buf[pos++] = c & 0x3F | 0x80;
+              noteSave
+                  .call(noteSaveButtons);
           }
       }
-      return pos;
-  }
 
-  var pointGeometry = Point;
 
-  /**
-   * A standalone point geometry with useful accessor, comparison, and
-   * modification methods.
-   *
-   * @class Point
-   * @param {Number} x the x-coordinate. this could be longitude or screen
-   * pixels, or any other sort of unit.
-   * @param {Number} y the y-coordinate. this could be latitude or screen
-   * pixels, or any other sort of unit.
-   * @example
-   * var point = new Point(-77, 38);
-   */
-  function Point(x, y) {
-      this.x = x;
-      this.y = y;
-  }
+      function userDetails(selection) {
+          var detailSection = selection.selectAll('.detail-section')
+              .data([0]);
 
-  Point.prototype = {
+          detailSection = detailSection.enter()
+              .append('div')
+              .attr('class', 'detail-section')
+              .merge(detailSection);
 
-      /**
-       * Clone this point, returning a new point that can be modified
-       * without affecting the old one.
-       * @return {Point} the clone
-       */
-      clone: function() { return new Point(this.x, this.y); },
+          var osm = services.osm;
+          if (!osm) return;
 
-      /**
-       * Add this point's x & y coordinates to another point,
-       * yielding a new point.
-       * @param {Point} p the other point
-       * @return {Point} output point
-       */
-      add:     function(p) { return this.clone()._add(p); },
+          // Add warning if user is not logged in
+          var hasAuth = osm.authenticated();
+          var authWarning = detailSection.selectAll('.auth-warning')
+              .data(hasAuth ? [] : [0]);
 
-      /**
-       * Subtract this point's x & y coordinates to from point,
-       * yielding a new point.
-       * @param {Point} p the other point
-       * @return {Point} output point
-       */
-      sub:     function(p) { return this.clone()._sub(p); },
+          authWarning.exit()
+              .transition()
+              .duration(200)
+              .style('opacity', 0)
+              .remove();
 
-      /**
-       * Multiply this point's x & y coordinates by point,
-       * yielding a new point.
-       * @param {Point} p the other point
-       * @return {Point} output point
-       */
-      multByPoint:    function(p) { return this.clone()._multByPoint(p); },
+          var authEnter = authWarning.enter()
+              .insert('div', '.tag-reference-body')
+              .attr('class', 'field-warning auth-warning')
+              .style('opacity', 0);
 
-      /**
-       * Divide this point's x & y coordinates by point,
-       * yielding a new point.
-       * @param {Point} p the other point
-       * @return {Point} output point
-       */
-      divByPoint:     function(p) { return this.clone()._divByPoint(p); },
+          authEnter
+              .call(svgIcon('#iD-icon-alert', 'inline'));
 
-      /**
-       * Multiply this point's x & y coordinates by a factor,
-       * yielding a new point.
-       * @param {Point} k factor
-       * @return {Point} output point
-       */
-      mult:    function(k) { return this.clone()._mult(k); },
+          authEnter
+              .append('span')
+              .text(t('note.login'));
 
-      /**
-       * Divide this point's x & y coordinates by a factor,
-       * yielding a new point.
-       * @param {Point} k factor
-       * @return {Point} output point
-       */
-      div:     function(k) { return this.clone()._div(k); },
+          authEnter
+              .append('a')
+              .attr('target', '_blank')
+              .call(svgIcon('#iD-icon-out-link', 'inline'))
+              .append('span')
+              .text(t('login'))
+              .on('click.note-login', function() {
+                  event.preventDefault();
+                  osm.authenticate();
+              });
 
-      /**
-       * Rotate this point around the 0, 0 origin by an angle a,
-       * given in radians
-       * @param {Number} a angle to rotate around, in radians
-       * @return {Point} output point
-       */
-      rotate:  function(a) { return this.clone()._rotate(a); },
+          authEnter
+              .transition()
+              .duration(200)
+              .style('opacity', 1);
 
-      /**
-       * Rotate this point around p point by an angle a,
-       * given in radians
-       * @param {Number} a angle to rotate around, in radians
-       * @param {Point} p Point to rotate around
-       * @return {Point} output point
-       */
-      rotateAround:  function(a,p) { return this.clone()._rotateAround(a,p); },
 
-      /**
-       * Multiply this point by a 4x1 transformation matrix
-       * @param {Array<Number>} m transformation matrix
-       * @return {Point} output point
-       */
-      matMult: function(m) { return this.clone()._matMult(m); },
+          var prose = detailSection.selectAll('.note-save-prose')
+              .data(hasAuth ? [0] : []);
 
-      /**
-       * Calculate this point but as a unit vector from 0, 0, meaning
-       * that the distance from the resulting point to the 0, 0
-       * coordinate will be equal to 1 and the angle from the resulting
-       * point to the 0, 0 coordinate will be the same as before.
-       * @return {Point} unit vector point
-       */
-      unit:    function() { return this.clone()._unit(); },
+          prose.exit()
+              .remove();
 
-      /**
-       * Compute a perpendicular point, where the new y coordinate
-       * is the old x coordinate and the new x coordinate is the old y
-       * coordinate multiplied by -1
-       * @return {Point} perpendicular point
-       */
-      perp:    function() { return this.clone()._perp(); },
+          prose = prose.enter()
+              .append('p')
+              .attr('class', 'note-save-prose')
+              .text(t('note.upload_explanation'))
+              .merge(prose);
 
-      /**
-       * Return a version of this point with the x & y coordinates
-       * rounded to integers.
-       * @return {Point} rounded point
-       */
-      round:   function() { return this.clone()._round(); },
+          osm.userDetails(function(err, user) {
+              if (err) return;
 
-      /**
-       * Return the magitude of this point: this is the Euclidean
-       * distance from the 0, 0 coordinate to this point's x and y
-       * coordinates.
-       * @return {Number} magnitude
-       */
-      mag: function() {
-          return Math.sqrt(this.x * this.x + this.y * this.y);
-      },
+              var userLink = select(document.createElement('div'));
 
-      /**
-       * Judge whether this point is equal to another point, returning
-       * true or false.
-       * @param {Point} other the other point
-       * @return {boolean} whether the points are equal
-       */
-      equals: function(other) {
-          return this.x === other.x &&
-                 this.y === other.y;
-      },
+              if (user.image_url) {
+                  userLink
+                      .append('img')
+                      .attr('src', user.image_url)
+                      .attr('class', 'icon pre-text user-icon');
+              }
 
-      /**
-       * Calculate the distance from this point to another point
-       * @param {Point} p the other point
-       * @return {Number} distance
-       */
-      dist: function(p) {
-          return Math.sqrt(this.distSqr(p));
-      },
+              userLink
+                  .append('a')
+                  .attr('class', 'user-info')
+                  .text(user.display_name)
+                  .attr('href', osm.userURL(user.display_name))
+                  .attr('tabindex', -1)
+                  .attr('target', '_blank');
 
-      /**
-       * Calculate the distance from this point to another point,
-       * without the square root step. Useful if you're comparing
-       * relative distances.
-       * @param {Point} p the other point
-       * @return {Number} distance
-       */
-      distSqr: function(p) {
-          var dx = p.x - this.x,
-              dy = p.y - this.y;
-          return dx * dx + dy * dy;
-      },
+              prose
+                  .html(t('note.upload_explanation_with_user', { user: userLink.html() }));
+          });
+      }
 
-      /**
-       * Get the angle from the 0, 0 coordinate to this point, in radians
-       * coordinates.
-       * @return {Number} angle
-       */
-      angle: function() {
-          return Math.atan2(this.y, this.x);
-      },
 
-      /**
-       * Get the angle from this point to another point, in radians
-       * @param {Point} b the other point
-       * @return {Number} angle
-       */
-      angleTo: function(b) {
-          return Math.atan2(this.y - b.y, this.x - b.x);
-      },
+      function noteSaveButtons(selection) {
+          var osm = services.osm;
+          var hasAuth = osm && osm.authenticated();
+
+          var isSelected = (_note && _note.id === context.selectedNoteID());
+          var buttonSection = selection.selectAll('.buttons')
+              .data((isSelected ? [_note] : []), function(d) { return d.status + d.id; });
+
+          // exit
+          buttonSection.exit()
+              .remove();
+
+          // enter
+          var buttonEnter = buttonSection.enter()
+              .append('div')
+              .attr('class', 'buttons');
+
+          if (_note.isNew()) {
+              buttonEnter
+                  .append('button')
+                  .attr('class', 'button cancel-button secondary-action')
+                  .text(t('confirm.cancel'));
+
+              buttonEnter
+                  .append('button')
+                  .attr('class', 'button save-button action')
+                  .text(t('note.save'));
 
-      /**
-       * Get the angle between this point and another point, in radians
-       * @param {Point} b the other point
-       * @return {Number} angle
-       */
-      angleWith: function(b) {
-          return this.angleWithSep(b.x, b.y);
-      },
+          } else {
+              buttonEnter
+                  .append('button')
+                  .attr('class', 'button status-button action');
 
-      /*
-       * Find the angle of the two vectors, solving the formula for
-       * the cross product a x b = |a||b|sin(θ) for θ.
-       * @param {Number} x the x-coordinate
-       * @param {Number} y the y-coordinate
-       * @return {Number} the angle in radians
-       */
-      angleWithSep: function(x, y) {
-          return Math.atan2(
-              this.x * y - this.y * x,
-              this.x * x + this.y * y);
-      },
+              buttonEnter
+                  .append('button')
+                  .attr('class', 'button comment-button action')
+                  .text(t('note.comment'));
+          }
 
-      _matMult: function(m) {
-          var x = m[0] * this.x + m[1] * this.y,
-              y = m[2] * this.x + m[3] * this.y;
-          this.x = x;
-          this.y = y;
-          return this;
-      },
 
-      _add: function(p) {
-          this.x += p.x;
-          this.y += p.y;
-          return this;
-      },
+          // update
+          buttonSection = buttonSection
+              .merge(buttonEnter);
 
-      _sub: function(p) {
-          this.x -= p.x;
-          this.y -= p.y;
-          return this;
-      },
+          buttonSection.select('.cancel-button')   // select and propagate data
+              .on('click.cancel', clickCancel);
 
-      _mult: function(k) {
-          this.x *= k;
-          this.y *= k;
-          return this;
-      },
+          buttonSection.select('.save-button')     // select and propagate data
+              .attr('disabled', isSaveDisabled)
+              .on('click.save', clickSave);
 
-      _div: function(k) {
-          this.x /= k;
-          this.y /= k;
-          return this;
-      },
+          buttonSection.select('.status-button')   // select and propagate data
+              .attr('disabled', (hasAuth ? null : true))
+              .text(function(d) {
+                  var action = (d.status === 'open' ? 'close' : 'open');
+                  var andComment = (d.newComment ? '_comment' : '');
+                  return t('note.' + action + andComment);
+              })
+              .on('click.status', clickStatus);
 
-      _multByPoint: function(p) {
-          this.x *= p.x;
-          this.y *= p.y;
-          return this;
-      },
+          buttonSection.select('.comment-button')   // select and propagate data
+              .attr('disabled', isSaveDisabled)
+              .on('click.comment', clickComment);
 
-      _divByPoint: function(p) {
-          this.x /= p.x;
-          this.y /= p.y;
-          return this;
-      },
 
-      _unit: function() {
-          this._div(this.mag());
-          return this;
-      },
+          function isSaveDisabled(d) {
+              return (hasAuth && d.status === 'open' && d.newComment) ? null : true;
+          }
+      }
 
-      _perp: function() {
-          var y = this.y;
-          this.y = this.x;
-          this.x = -y;
-          return this;
-      },
 
-      _rotate: function(angle) {
-          var cos = Math.cos(angle),
-              sin = Math.sin(angle),
-              x = cos * this.x - sin * this.y,
-              y = sin * this.x + cos * this.y;
-          this.x = x;
-          this.y = y;
-          return this;
-      },
 
-      _rotateAround: function(angle, p) {
-          var cos = Math.cos(angle),
-              sin = Math.sin(angle),
-              x = p.x + cos * (this.x - p.x) - sin * (this.y - p.y),
-              y = p.y + sin * (this.x - p.x) + cos * (this.y - p.y);
-          this.x = x;
-          this.y = y;
-          return this;
-      },
+      function clickCancel(d) {
+          this.blur();    // avoid keeping focus on the button - #4641
+          var osm = services.osm;
+          if (osm) {
+              osm.removeNote(d);
+          }
+          context.enter(modeBrowse(context));
+          dispatch$1.call('change');
+      }
 
-      _round: function() {
-          this.x = Math.round(this.x);
-          this.y = Math.round(this.y);
-          return this;
+
+      function clickSave(d) {
+          this.blur();    // avoid keeping focus on the button - #4641
+          var osm = services.osm;
+          if (osm) {
+              osm.postNoteCreate(d, function(err, note) {
+                  dispatch$1.call('change', note);
+              });
+          }
       }
-  };
 
-  /**
-   * Construct a point from an array if necessary, otherwise if the input
-   * is already a Point, or an unknown type, return it unchanged
-   * @param {Array<Number>|Point|*} a any kind of input value
-   * @return {Point} constructed point, or passed-through value.
-   * @example
-   * // this
-   * var point = Point.convert([0, 1]);
-   * // is equivalent to
-   * var point = new Point(0, 1);
-   */
-  Point.convert = function (a) {
-      if (a instanceof Point) {
-          return a;
+
+      function clickStatus(d) {
+          this.blur();    // avoid keeping focus on the button - #4641
+          var osm = services.osm;
+          if (osm) {
+              var setStatus = (d.status === 'open' ? 'closed' : 'open');
+              osm.postNoteUpdate(d, setStatus, function(err, note) {
+                  dispatch$1.call('change', note);
+              });
+          }
       }
-      if (Array.isArray(a)) {
-          return new Point(a[0], a[1]);
+
+      function clickComment(d) {
+          this.blur();    // avoid keeping focus on the button - #4641
+          var osm = services.osm;
+          if (osm) {
+              osm.postNoteUpdate(d, d.status, function(err, note) {
+                  dispatch$1.call('change', note);
+              });
+          }
       }
-      return a;
-  };
 
-  var vectortilefeature = VectorTileFeature;
 
-  function VectorTileFeature(pbf, end, extent, keys, values) {
-      // Public
-      this.properties = {};
-      this.extent = extent;
-      this.type = 0;
+      noteEditor.note = function(val) {
+          if (!arguments.length) return _note;
+          _note = val;
+          return noteEditor;
+      };
 
-      // Private
-      this._pbf = pbf;
-      this._geometry = -1;
-      this._keys = keys;
-      this._values = values;
 
-      pbf.readFields(readFeature, this, end);
+      return utilRebind(noteEditor, dispatch$1, 'on');
   }
 
-  function readFeature(tag, feature, pbf) {
-      if (tag == 1) feature.id = pbf.readVarint();
-      else if (tag == 2) readTag(pbf, feature);
-      else if (tag == 3) feature.type = pbf.readVarint();
-      else if (tag == 4) feature._geometry = pbf.pos;
-  }
+  function uiNoteHeader() {
+      var _note;
 
-  function readTag(pbf, feature) {
-      var end = pbf.readVarint() + pbf.pos;
 
-      while (pbf.pos < end) {
-          var key = feature._keys[pbf.readVarint()],
-              value = feature._values[pbf.readVarint()];
-          feature.properties[key] = value;
-      }
-  }
+      function noteHeader(selection) {
+          var header = selection.selectAll('.note-header')
+              .data(
+                  (_note ? [_note] : []),
+                  function(d) { return d.status + d.id; }
+              );
 
-  VectorTileFeature.types = ['Unknown', 'Point', 'LineString', 'Polygon'];
+          header.exit()
+              .remove();
 
-  VectorTileFeature.prototype.loadGeometry = function() {
-      var pbf = this._pbf;
-      pbf.pos = this._geometry;
+          var headerEnter = header.enter()
+              .append('div')
+              .attr('class', 'note-header');
 
-      var end = pbf.readVarint() + pbf.pos,
-          cmd = 1,
-          length = 0,
-          x = 0,
-          y = 0,
-          lines = [],
-          line;
+          var iconEnter = headerEnter
+              .append('div')
+              .attr('class', function(d) { return 'note-header-icon ' + d.status; })
+              .classed('new', function(d) { return d.id < 0; });
 
-      while (pbf.pos < end) {
-          if (length <= 0) {
-              var cmdLen = pbf.readVarint();
-              cmd = cmdLen & 0x7;
-              length = cmdLen >> 3;
-          }
+          iconEnter
+              .append('div')
+              .attr('class', 'preset-icon-28')
+              .call(svgIcon('#iD-icon-note', 'note-fill'));
 
-          length--;
+          iconEnter.each(function(d) {
+              var statusIcon = '#iD-icon-' + (d.id < 0 ? 'plus' : (d.status === 'open' ? 'close' : 'apply'));
+              iconEnter
+                  .append('div')
+                  .attr('class', 'note-icon-annotation')
+                  .call(svgIcon(statusIcon, 'icon-annotation'));
+          });
 
-          if (cmd === 1 || cmd === 2) {
-              x += pbf.readSVarint();
-              y += pbf.readSVarint();
+          headerEnter
+              .append('div')
+              .attr('class', 'note-header-label')
+              .text(function(d) {
+                  if (_note.isNew()) { return t('note.new'); }
+                  return t('note.note') + ' ' + d.id + ' ' +
+                      (d.status === 'closed' ? t('note.closed') : '');
+              });
+      }
 
-              if (cmd === 1) { // moveTo
-                  if (line) lines.push(line);
-                  line = [];
-              }
 
-              line.push(new pointGeometry(x, y));
+      noteHeader.note = function(val) {
+          if (!arguments.length) return _note;
+          _note = val;
+          return noteHeader;
+      };
 
-          } else if (cmd === 7) {
 
-              // Workaround for https://github.com/mapbox/mapnik-vector-tile/issues/90
-              if (line) {
-                  line.push(line[0].clone()); // closePolygon
-              }
+      return noteHeader;
+  }
 
-          } else {
-              throw new Error('unknown command ' + cmd);
-          }
-      }
+  function uiNoteReport() {
+      var _note;
 
-      if (line) lines.push(line);
+      function noteReport(selection) {
+          var url;
+          if (services.osm && (_note instanceof osmNote) && (!_note.isNew())) {
+              url = services.osm.noteReportURL(_note);
+          }
 
-      return lines;
-  };
+          var link = selection.selectAll('.note-report')
+              .data(url ? [url] : []);
 
-  VectorTileFeature.prototype.bbox = function() {
-      var pbf = this._pbf;
-      pbf.pos = this._geometry;
+          // exit
+          link.exit()
+              .remove();
 
-      var end = pbf.readVarint() + pbf.pos,
-          cmd = 1,
-          length = 0,
-          x = 0,
-          y = 0,
-          x1 = Infinity,
-          x2 = -Infinity,
-          y1 = Infinity,
-          y2 = -Infinity;
+          // enter
+          var linkEnter = link.enter()
+              .append('a')
+              .attr('class', 'note-report')
+              .attr('target', '_blank')
+              .attr('href', function(d) { return d; })
+              .call(svgIcon('#iD-icon-out-link', 'inline'));
 
-      while (pbf.pos < end) {
-          if (length <= 0) {
-              var cmdLen = pbf.readVarint();
-              cmd = cmdLen & 0x7;
-              length = cmdLen >> 3;
-          }
+          linkEnter
+              .append('span')
+              .text(t('note.report'));
+      }
 
-          length--;
 
-          if (cmd === 1 || cmd === 2) {
-              x += pbf.readSVarint();
-              y += pbf.readSVarint();
-              if (x < x1) x1 = x;
-              if (x > x2) x2 = x;
-              if (y < y1) y1 = y;
-              if (y > y2) y2 = y;
+      noteReport.note = function(val) {
+          if (!arguments.length) return _note;
+          _note = val;
+          return noteReport;
+      };
 
-          } else if (cmd !== 7) {
-              throw new Error('unknown command ' + cmd);
-          }
-      }
+      return noteReport;
+  }
 
-      return [x1, y1, x2, y2];
-  };
+  function uiRadialMenu(context, operations) {
+      var menu;
+      var center = [0, 0];
+      var tooltip;
 
-  VectorTileFeature.prototype.toGeoJSON = function(x, y, z) {
-      var size = this.extent * Math.pow(2, z),
-          x0 = this.extent * x,
-          y0 = this.extent * y,
-          coords = this.loadGeometry(),
-          type = VectorTileFeature.types[this.type],
-          i, j;
 
-      function project(line) {
-          for (var j = 0; j < line.length; j++) {
-              var p = line[j], y2 = 180 - (p.y + y0) * 360 / size;
-              line[j] = [
-                  (p.x + x0) * 360 / size - 180,
-                  360 / Math.PI * Math.atan(Math.exp(y2 * Math.PI / 180)) - 90
-              ];
-          }
-      }
+      var radialMenu = function(selection) {
+          if (!operations.length) return;
 
-      switch (this.type) {
-      case 1:
-          var points = [];
-          for (i = 0; i < coords.length; i++) {
-              points[i] = coords[i][0];
-          }
-          coords = points;
-          project(coords);
-          break;
+          selection.node().parentNode.focus();
 
-      case 2:
-          for (i = 0; i < coords.length; i++) {
-              project(coords[i]);
+          function click(operation) {
+              event.stopPropagation();
+              if (operation.disabled()) return;
+              operation();
+              radialMenu.close();
           }
-          break;
 
-      case 3:
-          coords = classifyRings(coords);
-          for (i = 0; i < coords.length; i++) {
-              for (j = 0; j < coords[i].length; j++) {
-                  project(coords[i][j]);
-              }
-          }
-          break;
-      }
+          menu = selection
+              .append('g')
+              .attr('class', 'radial-menu')
+              .attr('transform', 'translate(' + center + ')')
+              .attr('opacity', 0);
 
-      if (coords.length === 1) {
-          coords = coords[0];
-      } else {
-          type = 'Multi' + type;
-      }
+          menu
+              .transition()
+              .attr('opacity', 1);
 
-      var result = {
-          type: "Feature",
-          geometry: {
-              type: type,
-              coordinates: coords
-          },
-          properties: this.properties
-      };
+          var r = 50;
+          var a = Math.PI / 4;
+          var a0 = -Math.PI / 4;
+          var a1 = a0 + (operations.length - 1) * a;
 
-      if ('id' in this) {
-          result.id = this.id;
-      }
+          menu
+              .append('path')
+              .attr('class', 'radial-menu-background')
+              .attr('d', 'M' + r * Math.sin(a0) + ',' +
+                               r * Math.cos(a0) +
+                        ' A' + r + ',' + r + ' 0 ' + (operations.length > 5 ? '1' : '0') + ',0 ' +
+                               (r * Math.sin(a1) + 1e-3) + ',' +
+                               (r * Math.cos(a1) + 1e-3)) // Force positive-length path (#1305)
+              .attr('stroke-width', 50)
+              .attr('stroke-linecap', 'round');
 
-      return result;
-  };
+          var button = menu.selectAll()
+              .data(operations)
+              .enter()
+              .append('g')
+              .attr('class', function(d) { return 'radial-menu-item radial-menu-item-' + d.id; })
+              .classed('disabled', function(d) { return d.disabled(); })
+              .attr('transform', function(d, i) {
+                  return 'translate(' + geoVecFloor([
+                          r * Math.sin(a0 + i * a),
+                          r * Math.cos(a0 + i * a)]).join(',') + ')';
+              });
 
-  // classifies an array of rings into polygons with outer rings and holes
+          button
+              .append('circle')
+              .attr('r', 15)
+              .on('click', click)
+              .on('mousedown', mousedown)
+              .on('mouseover', mouseover)
+              .on('mouseout', mouseout);
 
-  function classifyRings(rings) {
-      var len = rings.length;
+          button
+              .append('use')
+              .attr('transform', 'translate(-10,-10)')
+              .attr('width', '20')
+              .attr('height', '20')
+              .attr('xlink:href', function(d) { return '#iD-operation-' + d.id; });
 
-      if (len <= 1) return [rings];
+          tooltip = select(document.body)
+              .append('div')
+              .attr('class', 'tooltip-inner radial-menu-tooltip');
 
-      var polygons = [],
-          polygon,
-          ccw;
+          function mousedown() {
+              event.stopPropagation(); // https://github.com/openstreetmap/iD/issues/1869
+          }
 
-      for (var i = 0; i < len; i++) {
-          var area = signedArea(rings[i]);
-          if (area === 0) continue;
+          function mouseover(d, i) {
+              var rect = context.surfaceRect();
+              var angle = a0 + i * a;
+              var top = rect.top + (r + 25) * Math.cos(angle) + center[1] + 'px';
+              var left = rect.left + (r + 25) * Math.sin(angle) + center[0] + 'px';
+              var bottom = rect.height - (r + 25) * Math.cos(angle) - center[1] + 'px';
+              var right = rect.width - (r + 25) * Math.sin(angle) - center[0] + 'px';
 
-          if (ccw === undefined) ccw = area < 0;
+              tooltip
+                  .style('top', null)
+                  .style('left', null)
+                  .style('bottom', null)
+                  .style('right', null)
+                  .style('display', 'block')
+                  .html(uiTooltipHtml(d.tooltip(), d.keys[0]));
 
-          if (ccw === area < 0) {
-              if (polygon) polygons.push(polygon);
-              polygon = [rings[i]];
+              if (i === 0) {
+                  tooltip
+                      .style('right', right)
+                      .style('top', top);
+              } else if (i >= 4) {
+                  tooltip
+                      .style('left', left)
+                      .style('bottom', bottom);
+              } else {
+                  tooltip
+                      .style('left', left)
+                      .style('top', top);
+              }
+          }
 
-          } else {
-              polygon.push(rings[i]);
+          function mouseout() {
+              tooltip.style('display', 'none');
           }
-      }
-      if (polygon) polygons.push(polygon);
+      };
 
-      return polygons;
-  }
 
-  function signedArea(ring) {
-      var sum = 0;
-      for (var i = 0, len = ring.length, j = len - 1, p1, p2; i < len; j = i++) {
-          p1 = ring[i];
-          p2 = ring[j];
-          sum += (p2.x - p1.x) * (p1.y + p2.y);
-      }
-      return sum;
-  }
+      radialMenu.close = function() {
+          if (menu) {
+              menu
+                  .style('pointer-events', 'none')
+                  .transition()
+                  .attr('opacity', 0)
+                  .remove();
+          }
 
-  var vectortilelayer = VectorTileLayer;
+          if (tooltip) {
+              tooltip.remove();
+          }
+      };
 
-  function VectorTileLayer(pbf, end) {
-      // Public
-      this.version = 1;
-      this.name = null;
-      this.extent = 4096;
-      this.length = 0;
 
-      // Private
-      this._pbf = pbf;
-      this._keys = [];
-      this._values = [];
-      this._features = [];
+      radialMenu.center = function(_) {
+          if (!arguments.length) return center;
+          center = _;
+          return radialMenu;
+      };
 
-      pbf.readFields(readLayer, this, end);
 
-      this.length = this._features.length;
+      return radialMenu;
   }
 
-  function readLayer(tag, layer, pbf) {
-      if (tag === 15) layer.version = pbf.readVarint();
-      else if (tag === 1) layer.name = pbf.readString();
-      else if (tag === 5) layer.extent = pbf.readVarint();
-      else if (tag === 2) layer._features.push(pbf.pos);
-      else if (tag === 3) layer._keys.push(pbf.readString());
-      else if (tag === 4) layer._values.push(readValueMessage(pbf));
-  }
+  function uiSelectionList(context, selectedIDs) {
 
-  function readValueMessage(pbf) {
-      var value = null,
-          end = pbf.readVarint() + pbf.pos;
+      function selectEntity(entity) {
+          context.enter(modeSelect(context, [entity.id]));
+      }
 
-      while (pbf.pos < end) {
-          var tag = pbf.readVarint() >> 3;
 
-          value = tag === 1 ? pbf.readString() :
-              tag === 2 ? pbf.readFloat() :
-              tag === 3 ? pbf.readDouble() :
-              tag === 4 ? pbf.readVarint64() :
-              tag === 5 ? pbf.readVarint() :
-              tag === 6 ? pbf.readSVarint() :
-              tag === 7 ? pbf.readBoolean() : null;
+      function deselectEntity(entity) {
+          event.stopPropagation();
+          var index = selectedIDs.indexOf(entity.id);
+          if (index > -1) {
+              selectedIDs.splice(index, 1);
+          }
+          context.enter(modeSelect(context, selectedIDs));
       }
 
-      return value;
-  }
 
-  // return feature `i` from this layer as a `VectorTileFeature`
-  VectorTileLayer.prototype.feature = function(i) {
-      if (i < 0 || i >= this._features.length) throw new Error('feature index out of bounds');
+      function selectionList(selection) {
+          selection.classed('selection-list-pane', true);
 
-      this._pbf.pos = this._features[i];
+          var header = selection
+              .append('div')
+              .attr('class', 'header fillL cf');
 
-      var end = this._pbf.readVarint() + this._pbf.pos;
-      return new vectortilefeature(this._pbf, end, this.extent, this._keys, this._values);
-  };
+          header
+              .append('h3')
+              .text(t('inspector.multiselect'));
 
-  var vectortile = VectorTile;
+          var listWrap = selection
+              .append('div')
+              .attr('class', 'inspector-body');
 
-  function VectorTile(pbf, end) {
-      this.layers = pbf.readFields(readTile, {}, end);
-  }
+          var list = listWrap
+              .append('div')
+              .attr('class', 'feature-list cf');
 
-  function readTile(tag, layers, pbf) {
-      if (tag === 3) {
-          var layer = new vectortilelayer(pbf, pbf.readVarint() + pbf.pos);
-          if (layer.length) layers[layer.name] = layer;
-      }
-  }
+          context.history().on('change.selection-list', drawList);
+          drawList();
 
-  var VectorTile$1 = vectortile;
-  var VectorTileFeature$1 = vectortilefeature;
-  var VectorTileLayer$1 = vectortilelayer;
 
-  var vectorTile = {
-       VectorTile: VectorTile$1,
-       VectorTileFeature: VectorTileFeature$1,
-       VectorTileLayer: VectorTileLayer$1
-  };
+          function drawList() {
+              var entities = selectedIDs
+                  .map(function(id) { return context.hasEntity(id); })
+                  .filter(function(entity) { return entity; });
 
-  var tiler$5 = utilTiler().tileSize(512).margin(1);
-  var dispatch$6 = dispatch('loadedData');
-  var _vtCache;
+              var items = list.selectAll('.feature-list-item')
+                  .data(entities, osmEntity.key);
 
+              items.exit()
+                  .remove();
 
-  function abortRequest$5(i) {
-      i.abort();
-  }
+              // Enter
+              var enter = items.enter()
+                  .append('div')
+                  .attr('class', 'feature-list-item')
+                  .on('click', selectEntity);
 
+              enter
+                  .each(function(d) {
+                      select(this).on('mouseover', function() {
+                          utilHighlightEntities([d.id], true, context);
+                      });
+                      select(this).on('mouseout', function() {
+                          utilHighlightEntities([d.id], false, context);
+                      });
+                  });
 
-  function vtToGeoJSON(data, tile, mergeCache) {
-      var vectorTile$$1 = new vectorTile.VectorTile(new pbf(data.response));
-      var layers = Object.keys(vectorTile$$1.layers);
-      if (!Array.isArray(layers)) { layers = [layers]; }
+              var label = enter
+                  .append('button')
+                  .attr('class', 'label');
 
-      var features = [];
-      layers.forEach(function(layerID) {
-          var layer = vectorTile$$1.layers[layerID];
-          if (layer) {
-              for (var i = 0; i < layer.length; i++) {
-                  var feature = layer.feature(i).toGeoJSON(tile.xyz[0], tile.xyz[1], tile.xyz[2]);
-                  var geometry = feature.geometry;
+              enter
+                  .append('button')
+                  .attr('class', 'close')
+                  .on('click', deselectEntity)
+                  .call(svgIcon('#iD-icon-close'));
 
-                  // Treat all Polygons as MultiPolygons
-                  if (geometry.type === 'Polygon') {
-                      geometry.type = 'MultiPolygon';
-                      geometry.coordinates = [geometry.coordinates];
-                  }
+              label
+                  .append('span')
+                  .attr('class', 'entity-geom-icon')
+                  .call(svgIcon('', 'pre-text'));
 
-                  // Clip to tile bounds
-                  if (geometry.type === 'MultiPolygon') {
-                      var isClipped = false;
-                      var featureClip = turf_bboxClip(feature, tile.extent.rectangle());
-                      if (!isEqual(feature.geometry, featureClip.geometry)) {
-                          // feature = featureClip;
-                          isClipped = true;
-                      }
-                      if (!feature.geometry.coordinates.length) continue;   // not actually on this tile
-                      if (!feature.geometry.coordinates[0].length) continue;   // not actually on this tile
-                  }
+              label
+                  .append('span')
+                  .attr('class', 'entity-type');
 
-                  // Generate some unique IDs and add some metadata
-                  var featurehash = utilHashcode(fastJsonStableStringify(feature));
-                  var propertyhash = utilHashcode(fastJsonStableStringify(feature.properties || {}));
-                  feature.__layerID__ = layerID.replace(/[^_a-zA-Z0-9\-]/g, '_');
-                  feature.__featurehash__ = featurehash;
-                  feature.__propertyhash__ = propertyhash;
-                  features.push(feature);
+              label
+                  .append('span')
+                  .attr('class', 'entity-name');
 
-                  // Clipped Polygons at same zoom with identical properties can get merged
-                  if (isClipped && geometry.type === 'MultiPolygon') {
-                      var merged = mergeCache[propertyhash];
-                      if (merged && merged.length) {
-                          var other = merged[0];
-                          var coords = martinez.union(
-                              feature.geometry.coordinates, other.geometry.coordinates
-                          );
+              // Update
+              items = items.merge(enter);
 
-                          if (!coords || !coords.length) {
-                              continue;  // something failed in martinez union
-                          }
+              items.selectAll('.entity-geom-icon use')
+                  .attr('href', function() {
+                      var entity = this.parentNode.parentNode.__data__;
+                      return '#iD-icon-' + context.geometry(entity.id);
+                  });
 
-                          merged.push(feature);
-                          for (var j = 0; j < merged.length; j++) {      // all these features get...
-                              merged[j].geometry.coordinates = coords;   // same coords
-                              merged[j].__featurehash__ = featurehash;   // same hash, so deduplication works
-                          }
-                      } else {
-                          mergeCache[propertyhash] = [feature];
-                      }
-                  }
-              }
+              items.selectAll('.entity-type')
+                  .text(function(entity) { return context.presets().match(entity, context.graph()).name(); });
+
+              items.selectAll('.entity-name')
+                  .text(function(entity) { return utilDisplayName(entity); });
           }
-      });
+      }
 
-      return features;
+      return selectionList;
   }
 
+  function uiSourceSwitch(context) {
+      var keys;
 
-  function loadTile(source, tile) {
-      if (source.loaded[tile.id] || source.inflight[tile.id]) return;
-
-      var url = source.template
-          .replace('{x}', tile.xyz[0])
-          .replace('{y}', tile.xyz[1])
-          // TMS-flipped y coordinate
-          .replace(/\{[t-]y\}/, Math.pow(2, tile.xyz[2]) - tile.xyz[1] - 1)
-          .replace(/\{z(oom)?\}/, tile.xyz[2])
-          .replace(/\{switch:([^}]+)\}/, function(s, r) {
-              var subdomains = r.split(',');
-              return subdomains[(tile.xyz[0] + tile.xyz[1]) % subdomains.length];
-          });
-
-      source.inflight[tile.id] = request(url)
-          .responseType('arraybuffer')
-          .get(function(err, data) {
-              source.loaded[tile.id] = [];
-              delete source.inflight[tile.id];
-              if (err || !data) return;
 
-              var z = tile.xyz[2];
-              if (!source.canMerge[z]) {
-                  source.canMerge[z] = {};  // initialize mergeCache
-              }
+      function click() {
+          event.preventDefault();
 
-              source.loaded[tile.id] = vtToGeoJSON(data, tile, source.canMerge[z]);
-              dispatch$6.call('loadedData');
-          });
-  }
+          var osm = context.connection();
+          if (!osm) return;
 
+          if (context.inIntro()) return;
 
-  var serviceVectorTile = {
+          if (context.history().hasChanges() &&
+              !window.confirm(t('source_switch.lose_changes'))) return;
 
-      init: function() {
-          if (!_vtCache) {
-              this.reset();
-          }
+          var isLive = select(this)
+              .classed('live');
 
-          this.event = utilRebind(this, dispatch$6, 'on');
-      },
+          isLive = !isLive;
+          context.enter(modeBrowse(context));
+          context.history().clearSaved();          // remove saved history
+          context.flush();                         // remove stored data
 
+          select(this)
+              .text(isLive ? t('source_switch.live') : t('source_switch.dev'))
+              .classed('live', isLive);
 
-      reset: function() {
-          for (var sourceID in _vtCache) {
-              var source = _vtCache[sourceID];
-              if (source && source.inflight) {
-                  forEach(source.inflight, abortRequest$5);
-              }
-          }
+          osm.switch(isLive ? keys[0] : keys[1]);  // switch connection (warning: dispatches 'change' event)
+      }
 
-          _vtCache = {};
-      },
+      var sourceSwitch = function(selection) {
+          selection
+              .append('a')
+              .attr('href', '#')
+              .text(t('source_switch.live'))
+              .classed('live', true)
+              .attr('tabindex', -1)
+              .on('click', click);
+      };
 
 
-      addSource: function(sourceID, template) {
-          _vtCache[sourceID] = { template: template, inflight: {}, loaded: {}, canMerge: {} };
-          return _vtCache[sourceID];
-      },
+      sourceSwitch.keys = function(_) {
+          if (!arguments.length) return keys;
+          keys = _;
+          return sourceSwitch;
+      };
 
 
-      data: function(sourceID, projection) {
-          var source = _vtCache[sourceID];
-          if (!source) return [];
+      return sourceSwitch;
+  }
 
-          var tiles = tiler$5.getTiles(projection);
-          var seen = {};
-          var results = [];
+  function uiSuccess(context) {
+      var MAXEVENTS = 2;
 
-          for (var i = 0; i < tiles.length; i++) {
-              var features = source.loaded[tiles[i].id];
-              if (!features || !features.length) continue;
+      // All else being equal, rank more "social" communities higher
+      // (anything not in this list receives no adjustment)
+      var COMMUNITYRANK = {
+          'meetup': +5,
+          'slack': +4,
+          'facebook': +3,
+          'reddit': +2,
+          'forum': -2,
+          'mailinglist': -3,
+          'irc': -4
+      };
 
-              for (var j = 0; j < features.length; j++) {
-                  var feature = features[j];
-                  var hash = feature.__featurehash__;
-                  if (seen[hash]) continue;
-                  seen[hash] = true;
+      var detected = utilDetect();
+      var dispatch$1 = dispatch('cancel');
+      var _changeset;
+      var _location;
 
-                  // return a shallow clone, because the hash may change
-                  // later if this feature gets merged with another
-                  results.push(clone(feature));
-              }
-          }
 
-          return results;
-      },
+      // string-to-date parsing in JavaScript is weird
+      function parseEventDate(when) {
+          if (!when) return;
 
+          var raw = when.trim();
+          if (!raw) return;
 
-      loadTiles: function(sourceID, template, projection) {
-          var source = _vtCache[sourceID];
-          if (!source) {
-              source = this.addSource(sourceID, template);
+          if (!/Z$/.test(raw)) {    // if no trailing 'Z', add one
+              raw += 'Z';           // this forces date to be parsed as a UTC date
           }
 
-          var tiles = tiler$5.getTiles(projection);
+          var parsed = new Date(raw);
+          return new Date(parsed.toUTCString().substr(0, 25));  // convert to local timezone
+      }
 
-          // abort inflight requests that are no longer needed
-          forEach(source.inflight, function(v, k) {
-              var wanted = find$1(tiles, function(tile) { return k === tile.id; });
 
-              if (!wanted) {
-                  abortRequest$5(v);
-                  delete source.inflight[k];
-              }
-          });
+      function success(selection) {
+          var header = selection
+              .append('div')
+              .attr('class', 'header fillL');
 
-          tiles.forEach(function(tile) {
-              loadTile(source, tile);
-          });
-      },
+          header
+              .append('button')
+              .attr('class', 'fr')
+              .on('click', function() { dispatch$1.call('cancel'); })
+              .call(svgIcon('#iD-icon-close'));
 
+          header
+              .append('h3')
+              .text(t('success.just_edited'));
 
-      cache: function() {
-          return _vtCache;
-      }
+          var body = selection
+              .append('div')
+              .attr('class', 'body save-success fillL');
 
-  };
+          var summary = body
+              .append('div')
+              .attr('class', 'save-summary');
 
-  var endpoint = 'https://www.wikidata.org/w/api.php?';
-  var _wikidataCache = {};
+          summary
+              .append('h3')
+              .text(t('success.thank_you' + (_location ? '_location' : ''), { where: _location }));
 
-  var serviceWikidata = {
+          summary
+              .append('p')
+              .text(t('success.help_html'))
+              .append('a')
+              .attr('class', 'link-out')
+              .attr('target', '_blank')
+              .attr('tabindex', -1)
+              .attr('href', t('success.help_link_url'))
+              .call(svgIcon('#iD-icon-out-link', 'inline'))
+              .append('span')
+              .text(t('success.help_link_text'));
 
-      init: function() {},
+          var osm = context.connection();
+          if (!osm) return;
 
-      reset: function() {
-          _wikidataCache = {};
-      },
+          var changesetURL = osm.changesetURL(_changeset.id);
 
+          var table = summary
+              .append('table')
+              .attr('class', 'summary-table');
 
-      // Given a Wikipedia language and article title, return an array of
-      // corresponding Wikidata entities.
-      itemsByTitle: function(lang, title, callback) {
-          if (!title) {
-              callback('', {});
-              return;
-          }
+          var row = table
+              .append('tr')
+              .attr('class', 'summary-row');
 
-          lang = lang || 'en';
+          row
+              .append('td')
+              .attr('class', 'cell-icon summary-icon')
+              .append('a')
+              .attr('target', '_blank')
+              .attr('href', changesetURL)
+              .append('svg')
+              .attr('class', 'logo-small')
+              .append('use')
+              .attr('xlink:href', '#iD-logo-osm');
 
-          d3_json(endpoint + utilQsString({
-              action: 'wbgetentities',
-              format: 'json',
-              formatversion: 2,
-              sites: lang.replace(/-/g, '_') + 'wiki',
-              titles: title,
-              languages: 'en', // shrink response by filtering to one language
-              origin: '*'
-          }), function(err, data) {
-              if (err || !data || data.error) {
-                  callback('', {});
-              } else {
-                  callback(title, data.entities || {});
-              }
-          });
-      },
+          var summaryDetail = row
+              .append('td')
+              .attr('class', 'cell-detail summary-detail');
 
+          summaryDetail
+              .append('a')
+              .attr('class', 'cell-detail summary-view-on-osm')
+              .attr('target', '_blank')
+              .attr('href', changesetURL)
+              .text(t('success.view_on_osm'));
 
-      entityByQID: function(qid, callback) {
-          if (!qid) {
-              callback('', {});
-              return;
-          }
-          if (_wikidataCache[qid]) {
-              callback('', _wikidataCache[qid]);
-              return;
-          }
+          summaryDetail
+              .append('div')
+              .text(t('success.changeset_id', { changeset_id: _changeset.id }));
 
-          var langs = uniq([
-              currentLocale.toLowerCase(),
-              currentLocale.split('-', 2)[0].toLowerCase(),
-              'en'
-          ]);
 
-          d3_json(endpoint + utilQsString({
-              action: 'wbgetentities',
-              format: 'json',
-              formatversion: 2,
-              ids: qid,
-              props: /*sitelinks|*/'labels|descriptions',
-              //sitefilter: lang + 'wiki',
-              languages: langs.join('|'),
-              languagefallback: 1,
-              origin: '*'
-          }), function(err, data) {
-              if (err || !data || data.error) {
-                  callback('', {});
-              } else {
-                  _wikidataCache[qid] = data.entities[qid];
-                  callback(qid, data.entities[qid] || {});
-              }
+          // Gather community polygon IDs intersecting the map..
+          var matchFeatures = data.community.query(context.map().center(), true) || [];
+          var matchIDs = matchFeatures.map(function(feature) { return feature.id; });
+
+          // Gather community resources that are either global or match a polygon.
+          var matchResources = filter(data.community.resources, function(v) {
+              return !v.featureId || matchIDs.indexOf(v.featureId) !== -1;
           });
-      }
 
-  };
+          if (matchResources.length) {
+              // sort by size ascending, then by community rank
+              matchResources.sort(function(a, b) {
+                  var aSize = Infinity;
+                  var bSize = Infinity;
+                  var aRank = COMMUNITYRANK[a.type] || 0;
+                  var bRank = COMMUNITYRANK[b.type] || 0;
+
+                  if (a.featureId) {
+                      aSize = data.community.features[a.featureId].properties.area;
+                  }
+                  if (b.featureId) {
+                      bSize = data.community.features[b.featureId].properties.area;
+                  }
 
-  var endpoint$1 = 'https://en.wikipedia.org/w/api.php?';
+                  return aSize < bSize ? -1 : aSize > bSize ? 1 : bRank - aRank;
+              });
 
-  var serviceWikipedia = {
+              body
+                  .call(showCommunityLinks, matchResources);
+          }
+      }
 
-      init: function() {},
-      reset: function() {},
 
+      function showCommunityLinks(selection, matchResources) {
+          var communityLinks = selection
+              .append('div')
+              .attr('class', 'save-communityLinks');
 
-      search: function(lang, query, callback) {
-          if (!query) {
-              callback('', []);
-              return;
-          }
+          communityLinks
+              .append('h3')
+              .text(t('success.like_osm'));
 
-          lang = lang || 'en';
-          d3_json(endpoint$1.replace('en', lang) +
-              utilQsString({
-                  action: 'query',
-                  list: 'search',
-                  srlimit: '10',
-                  srinfo: 'suggestion',
-                  format: 'json',
-                  origin: '*',
-                  srsearch: query
-              }), function(err, data) {
-                  if (err || !data || !data.query || !data.query.search || data.error) {
-                      callback('', []);
-                  } else {
-                      var results = data.query.search.map(function(d) { return d.title; });
-                      callback(query, results);
-                  }
-              }
-          );
-      },
+          var table = communityLinks
+              .append('table')
+              .attr('class', 'community-table');
 
+          var row = table.selectAll('.community-row')
+              .data(matchResources);
 
-      suggestions: function(lang, query, callback) {
-          if (!query) {
-              callback('', []);
-              return;
-          }
+          var rowEnter = row.enter()
+              .append('tr')
+              .attr('class', 'community-row');
 
-          lang = lang || 'en';
-          d3_json(endpoint$1.replace('en', lang) +
-              utilQsString({
-                  action: 'opensearch',
-                  namespace: 0,
-                  suggest: '',
-                  format: 'json',
-                  origin: '*',
-                  search: query
-              }), function(err, data) {
-                  if (err || !data || data.error) {
-                      callback('', []);
-                  } else {
-                      callback(data[0], data[1] || []);
-                  }
-              }
-          );
-      },
+          rowEnter
+              .append('td')
+              .attr('class', 'cell-icon community-icon')
+              .append('a')
+              .attr('target', '_blank')
+              .attr('href', function(d) { return d.url; })
+              .append('svg')
+              .attr('class', 'logo-small')
+              .append('use')
+              .attr('xlink:href', function(d) { return '#community-' + d.type; });
 
+          var communityDetail = rowEnter
+              .append('td')
+              .attr('class', 'cell-detail community-detail');
 
-      translations: function(lang, title, callback) {
-          if (!title) {
-              callback({});
-              return;
-          }
+          communityDetail
+              .each(showCommunityDetails);
 
-          d3_json(endpoint$1.replace('en', lang) +
-              utilQsString({
-                  action: 'query',
-                  prop: 'langlinks',
-                  format: 'json',
-                  origin: '*',
-                  lllimit: 500,
-                  titles: title
-              }), function(err, data) {
-                  if (err || !data || !data.query || !data.query.pages || data.error) {
-                      callback({});
-                  } else {
-                      var list = data.query.pages[Object.keys(data.query.pages)[0]],
-                          translations = {};
-                      if (list && list.langlinks) {
-                          list.langlinks.forEach(function(d) {
-                              translations[d.lang] = d['*'];
-                          });
-                      }
-                      callback(translations);
-                  }
-              }
-          );
+          communityLinks
+              .append('div')
+              .attr('class', 'community-missing')
+              .text(t('success.missing'))
+              .append('a')
+              .attr('class', 'link-out')
+              .attr('target', '_blank')
+              .attr('tabindex', -1)
+              .call(svgIcon('#iD-icon-out-link', 'inline'))
+              .attr('href', 'https://github.com/osmlab/osm-community-index/issues')
+              .append('span')
+              .text(t('success.tell_us'));
       }
 
-  };
 
-  var services = {
-      geocoder: serviceNominatim,
-      keepRight: serviceKeepRight,
-      mapillary: serviceMapillary,
-      openstreetcam: serviceOpenstreetcam,
-      osm: serviceOsm,
-      osmWikibase: serviceOsmWikibase,
-      maprules: serviceMapRules,
-      streetside: serviceStreetside,
-      taginfo: serviceTaginfo,
-      vectorTile: serviceVectorTile,
-      wikidata: serviceWikidata,
-      wikipedia: serviceWikipedia
-  };
+      function showCommunityDetails(d) {
+          var selection = select(this);
+          var communityID = d.id;
+          var replacements = {
+              url: linkify(d.url),
+              signupUrl: linkify(d.signupUrl || d.url)
+          };
 
-  function validationMapCSSChecks() {
-      var validation = function(changes, graph) {
-          if (!services.maprules) return [];
+          selection
+              .append('div')
+              .attr('class', 'community-name')
+              .append('a')
+              .attr('target', '_blank')
+              .attr('href', d.url)
+              .text(t('community.' + d.id + '.name'));
 
-          var rules = services.maprules.validationRules();
-          var warnings = [];
-          var createdModified = ['created', 'modified'];
+          var descriptionHTML = t('community.' + d.id + '.description', replacements);
 
-          for (var i = 0; i < rules.length; i++) {
-              var rule = rules[i];
-              for (var j = 0; j < createdModified.length; j++) {
-                  var type = createdModified[j];
-                  var entities = changes[type];
-                  for (var k = 0; k < entities.length; k++) {
-                      rule.findWarnings(entities[k], graph, warnings);
-                  }
-              }
+          if (d.type === 'reddit') {   // linkify subreddits  #4997
+              descriptionHTML = descriptionHTML
+                  .replace(/(\/r\/\w*\/*)/i, function(match) { return linkify(d.url, match); });
           }
 
-          return warnings;
-      };
+          selection
+              .append('div')
+              .attr('class', 'community-description')
+              .html(descriptionHTML);
 
+          if (d.extendedDescription || (d.languageCodes && d.languageCodes.length)) {
+              selection
+                  .append('div')
+                  .call(uiDisclosure(context, 'community-more-' + d.id, false)
+                      .expanded(false)
+                      .updatePreference(false)
+                      .title(t('success.more'))
+                      .content(showMore)
+                  );
+          }
 
-      return validation;
-  }
+          var nextEvents = (d.events || [])
+              .map(function(event) {
+                  event.date = parseEventDate(event.when);
+                  return event;
+              })
+              .filter(function(event) {               // date is valid and future (or today)
+                  var t = event.date.getTime();
+                  var now = (new Date()).setHours(0,0,0,0);
+                  return !isNaN(t) && t >= now;
+              })
+              .sort(function(a, b) {                  // sort by date ascending
+                  return a.date < b.date ? -1 : a.date > b.date ? 1 : 0;
+              })
+              .slice(0, MAXEVENTS);                   // limit number of events shown
 
-  function validationMissingTag() {
+          if (nextEvents.length) {
+              selection
+                  .append('div')
+                  .call(uiDisclosure(context, 'community-events-' + d.id, false)
+                      .expanded(false)
+                      .updatePreference(false)
+                      .title(t('success.events'))
+                      .content(showNextEvents)
+                  )
+                  .select('.hide-toggle')
+                  .append('span')
+                  .attr('class', 'badge-text')
+                  .text(nextEvents.length);
+          }
 
-      // Slightly stricter check than Entity#isUsed (#3091)
-      function hasTags(entity, graph) {
-          return without(Object.keys(entity.tags), 'area', 'name').length > 0 ||
-              graph.parentRelations(entity).length > 0;
-      }
 
-      var validation = function(changes, graph) {
-          var types = ['point', 'line', 'area', 'relation'];
-          var warnings = [];
+          function showMore(selection) {
+              var more = selection
+                  .append('div')
+                  .attr('class', 'community-more');
 
-          for (var i = 0; i < changes.created.length; i++) {
-              var change = changes.created[i];
-              var geometry = change.geometry(graph);
+              if (d.extendedDescription) {
+                  more
+                      .append('div')
+                      .attr('class', 'community-extended-description')
+                      .html(t('community.' + d.id + '.extendedDescription', replacements));
+              }
 
-              if (types.indexOf(geometry) !== -1 && !hasTags(change, graph)) {
-                  warnings.push({
-                      id: 'missing_tag',
-                      message: t('validations.untagged_' + geometry),
-                      tooltip: t('validations.untagged_' + geometry + '_tooltip'),
-                      entity: change
-                  });
+              if (d.languageCodes && d.languageCodes.length) {
+                  more
+                      .append('div')
+                      .attr('class', 'community-languages')
+                      .text(t('success.languages', { languages: d.languageCodes.join(', ') }));
               }
           }
 
-          return warnings;
-      };
 
+          function showNextEvents(selection) {
+              var events = selection
+                  .append('div')
+                  .attr('class', 'community-events');
 
-      return validation;
-  }
+              var item = events.selectAll('.community-event')
+                  .data(nextEvents);
 
-  function validationOldMultipolygon() {
+              var itemEnter = item.enter()
+                  .append('div')
+                  .attr('class', 'community-event');
 
-      return function validation(changes, graph) {
-          var warnings = [];
-          for (var i = 0; i < changes.created.length; i++) {
-              var entity = changes.created[i];
-              var parent = osmIsSimpleMultipolygonOuterMember(entity, graph);
-              if (parent) {
-                  warnings.push({
-                      id: 'old_multipolygon',
-                      message: t('validations.old_multipolygon'),
-                      tooltip: t('validations.old_multipolygon_tooltip'),
-                      entity: parent
+              itemEnter
+                  .append('div')
+                  .attr('class', 'community-event-name')
+                  .append('a')
+                  .attr('target', '_blank')
+                  .attr('href', function(d) { return d.url; })
+                  .text(function(d) {
+                      var name = d.name;
+                      if (d.i18n && d.id) {
+                          name = t('community.' + communityID + '.events.' + d.id + '.name', { default: name });
+                      }
+                      return name;
                   });
-              }
-          }
-          return warnings;
-      };
-  }
 
-  // https://github.com/openstreetmap/josm/blob/mirror/src/org/
-  // openstreetmap/josm/data/validation/tests/UnclosedWays.java#L80
-  function validationTagSuggestsArea() {
+              itemEnter
+                  .append('div')
+                  .attr('class', 'community-event-when')
+                  .text(function(d) {
+                      var options = {
+                          weekday: 'short', day: 'numeric', month: 'short', year: 'numeric'
+                      };
+                      if (d.date.getHours() || d.date.getMinutes()) {   // include time if it has one
+                          options.hour = 'numeric';
+                          options.minute = 'numeric';
+                      }
+                      return d.date.toLocaleString(detected.locale, options);
+                  });
 
-      function tagSuggestsArea(tags) {
-          if (isEmpty(tags)) return false;
+              itemEnter
+                  .append('div')
+                  .attr('class', 'community-event-where')
+                  .text(function(d) {
+                      var where = d.where;
+                      if (d.i18n && d.id) {
+                          where = t('community.' + communityID + '.events.' + d.id + '.where', { default: where });
+                      }
+                      return where;
+                  });
 
-          var presence = ['landuse', 'amenities', 'tourism', 'shop'];
-          for (var i = 0; i < presence.length; i++) {
-              if (tags[presence[i]] !== undefined) {
-                  if (presence[i] === 'tourism' && tags[presence[i]] === 'artwork') {
-                      continue;   // exception for tourism=artwork - #5206
-                  } else {
-                      return presence[i] + '=' + tags[presence[i]];
-                  }
-              }
+              itemEnter
+                  .append('div')
+                  .attr('class', 'community-event-description')
+                  .text(function(d) {
+                      var description = d.description;
+                      if (d.i18n && d.id) {
+                          description = t('community.' + communityID + '.events.' + d.id + '.description', { default: description });
+                      }
+                      return description;
+                  });
           }
 
-          if (tags.building && tags.building === 'yes') return 'building=yes';
+
+          function linkify(url, text) {
+              text = text || url;
+              return '<a target="_blank" href="' + url + '">' + text + '</a>';
+          }
       }
 
 
-      var validation = function(changes, graph) {
-          var warnings = [];
-          for (var i = 0; i < changes.created.length; i++) {
-              var change = changes.created[i];
-              var geometry = change.geometry(graph);
-              var suggestion = (geometry === 'line' ? tagSuggestsArea(change.tags) : undefined);
+      success.changeset = function(_) {
+          if (!arguments.length) return _changeset;
+          _changeset = _;
+          return success;
+      };
 
-              if (suggestion) {
-                  warnings.push({
-                      id: 'tag_suggests_area',
-                      message: t('validations.tag_suggests_area', { tag: suggestion }),
-                      entity: change
-                  });
-              }
-          }
 
-          return warnings;
+      success.location = function(_) {
+          if (!arguments.length) return _location;
+          _location = _;
+          return success;
       };
 
 
-      return validation;
+      return utilRebind(success, dispatch$1, 'on');
   }
 
+  function uiViewOnKeepRight() {
+      var _error;   // a keepright error
 
 
-  var Validations = /*#__PURE__*/Object.freeze({
-    validationDeprecatedTag: validationDeprecatedTag,
-    validationDisconnectedHighway: validationDisconnectedHighway,
-    validationGenericName: validationGenericName,
-    validationManyDeletions: validationManyDeletions,
-    validationMapCSSChecks: validationMapCSSChecks,
-    validationMissingTag: validationMissingTag,
-    validationOldMultipolygon: validationOldMultipolygon,
-    validationTagSuggestsArea: validationTagSuggestsArea
-  });
+      function viewOnKeepRight(selection) {
+          var url;
+          if (services.keepRight && (_error instanceof qaError)) {
+              url = services.keepRight.errorURL(_error);
+          }
+
+          var link = selection.selectAll('.view-on-keepRight')
+              .data(url ? [url] : []);
+
+          // exit
+          link.exit()
+              .remove();
+
+          // enter
+          var linkEnter = link.enter()
+              .append('a')
+              .attr('class', 'view-on-keepRight')
+              .attr('target', '_blank')
+              .attr('href', function(d) { return d; })
+              .call(svgIcon('#iD-icon-out-link', 'inline'));
+
+          linkEnter
+              .append('span')
+              .text(t('inspector.view_on_keepRight'));
+      }
+
+
+      viewOnKeepRight.what = function(val) {
+          if (!arguments.length) return _error;
+          _error = val;
+          return viewOnKeepRight;
+      };
+
+      return viewOnKeepRight;
+  }
 
   function coreHistory(context) {
-      var dispatch$$1 = dispatch('change', 'undone', 'redone');
+      var dispatch$1 = dispatch('change', 'annotatedChange', 'merge', 'restore', 'undone', 'redone');
       var lock = utilSessionMutex('lock');
       var duration = 150;
       var _imageryUsed = [];
       function _perform(args, t) {
           var previous = _stack[_index].graph;
           _stack = _stack.slice(0, _index + 1);
-          _stack.push(_act(args, t));
+          var actionResult = _act(args, t);
+          _stack.push(actionResult);
           _index++;
-          return change(previous);
+          return change(previous, actionResult.annotation);
       }
 
 
       function _replace(args, t) {
           var previous = _stack[_index].graph;
           // assert(_index == _stack.length - 1)
-          _stack[_index] = _act(args, t);
-          return change(previous);
+          var actionResult = _act(args, t);
+          _stack[_index] = actionResult;
+          return change(previous, actionResult.annotation);
       }
 
 
               _stack.pop();
           }
           _stack = _stack.slice(0, _index + 1);
-          _stack.push(_act(args, t));
+          var actionResult = _act(args, t);
+          _stack.push(actionResult);
           _index++;
-          return change(previous);
+          return change(previous, actionResult.annotation);
       }
 
 
-      // determine diffrence and dispatch a change event
-      function change(previous) {
-          var difference$$1 = coreDifference(previous, history.graph());
-          dispatch$$1.call('change', this, difference$$1);
-          return difference$$1;
+      // determine difference and dispatch a change event
+      function change(previous, isAnnotated) {
+          var difference = coreDifference(previous, history.graph());
+          dispatch$1.call('change', this, difference);
+          if (isAnnotated) {
+              // actions like dragging a node can fire lots of changes,
+              // so use 'annotatedChange' to listen for grouped undo/redo changes
+              dispatch$1.call('annotatedChange', this, difference);
+          }
+          return difference;
       }
 
 
           },
 
 
+          tree: function() {
+              return _tree;
+          },
+
+
           base: function() {
               return _stack[0].graph;
           },
               _stack[0].graph.rebase(entities, map$3(_stack, 'graph'), false);
               _tree.rebase(entities, false);
 
-              dispatch$$1.call('change', this, undefined, extent);
+              dispatch$1.call('change', this, undefined, extent);
+              dispatch$1.call('merge', this, entities);
           },
 
 
                   if (_stack[_index].annotation) break;
               }
 
-              dispatch$$1.call('undone', this, _stack[_index]);
-              return change(previous);
+              dispatch$1.call('undone', this, _stack[_index]);
+              return change(previous, true);
           },
 
 
                   tryIndex++;
                   if (_stack[tryIndex].annotation) {
                       _index = tryIndex;
-                      dispatch$$1.call('redone', this, _stack[_index]);
+                      dispatch$1.call('redone', this, _stack[_index]);
                       break;
                   }
               }
 
-              return change(previous);
+              return change(previous, true);
           },
 
 
                   head = action(head);
               }
 
-              var difference$$1 = coreDifference(base, head);
+              var difference = coreDifference(base, head);
 
               return {
-                  modified: difference$$1.modified(),
-                  created: difference$$1.created(),
-                  deleted: difference$$1.deleted()
+                  modified: difference.modified(),
+                  created: difference.created(),
+                  deleted: difference.deleted()
               };
           },
 
 
-          validate: function(changes) {
-              return flatten(map$3(Validations, function(fn) {
-                  return fn()(changes, _stack[_index].graph);
-              }));
-          },
-
-
           hasChanges: function() {
               return this.difference().length() > 0;
           },
                   _stack = cloneDeep(_checkpoints[key].stack);
                   _index = _checkpoints[key].index;
               } else {
-                  _stack = [{graph: coreGraph$$1()}];
+                  _stack = [{graph: coreGraph()}];
                   _index = 0;
                   _tree = coreTree(_stack[0].graph);
                   _checkpoints = {};
               }
-              dispatch$$1.call('change');
+              dispatch$1.call('change');
               return history;
           },
 
 
                   forEach(i.graph.entities, function(entity, id) {
                       if (entity) {
-                          var key = osmEntity$$1.key(entity);
+                          var key = osmEntity.key(entity);
                           allEntities[key] = entity;
                           modified.push(key);
                       } else {
                   entities: values$1(allEntities),
                   baseEntities: values$1(baseEntities),
                   stack: s,
-                  nextIDs: osmEntity$$1.id.next,
+                  nextIDs: osmEntity.id.next,
                   index: _index
               });
           },
               var h = JSON.parse(json);
               var loadComplete = true;
 
-              osmEntity$$1.id.next = h.nextIDs;
+              osmEntity.id.next = h.nextIDs;
               _index = h.index;
 
               if (h.version === 2 || h.version === 3) {
                   var allEntities = {};
 
                   h.entities.forEach(function(entity) {
-                      allEntities[osmEntity$$1.key(entity)] = osmEntity$$1(entity);
+                      allEntities[osmEntity.key(entity)] = osmEntity(entity);
                   });
 
                   if (h.version === 3) {
                       // This merges originals for changed entities into the base of
                       // the _stack even if the current _stack doesn't have them (for
                       // example when iD has been restarted in a different region)
-                      var baseEntities = h.baseEntities.map(function(d) { return osmEntity$$1(d); });
+                      var baseEntities = h.baseEntities.map(function(d) { return osmEntity(d); });
                       _stack[0].graph.rebase(baseEntities, map$3(_stack, 'graph'), true);
                       _tree.rebase(baseEntities, true);
 
                                   if (err || isEmpty(missing)) {
                                       loading.close();
                                       context.redrawEnable(true);
-                                      dispatch$$1.call('change');
+                                      dispatch$1.call('change');
+                                      dispatch$1.call('restore', this);
                                   }
                               };
 
                       }
 
                       return {
-                          graph: coreGraph$$1(_stack[0].graph).load(entities),
+                          graph: coreGraph(_stack[0].graph).load(entities),
                           annotation: d.annotation,
                           imageryUsed: d.imageryUsed,
                           transform: d.transform,
 
                       for (var i in d.entities) {
                           var entity = d.entities[i];
-                          entities[i] = entity === 'undefined' ? undefined : osmEntity$$1(entity);
+                          entities[i] = entity === 'undefined' ? undefined : osmEntity(entity);
                       }
 
-                      d.graph = coreGraph$$1(_stack[0].graph).load(entities);
+                      d.graph = coreGraph(_stack[0].graph).load(entities);
                       return d;
                   });
               }
               }
 
               if (loadComplete) {
-                  dispatch$$1.call('change');
+                  dispatch$1.call('change');
+                  dispatch$1.call('restore', this);
               }
 
               return history;
 
       history.reset();
 
-      return utilRebind(history, dispatch$$1, 'on');
+      return utilRebind(history, dispatch$1, 'on');
   }
 
   /** Used to store function metadata. */
 
   function presetCollection(collection) {
       var maxSearchResults = 50;
-      var maxSuggestionResults = 10;
 
       var presets = {
 
           search: function(value, geometry) {
               if (!value) return this;
 
+              value = value.toLowerCase();
+
+              // match at name beginning or just after a space (e.g. "office" -> match "Law Office")
               function leading(a) {
                   var index = a.indexOf(value);
                   return index === 0 || a[index - 1] === ' ';
               }
 
-              function suggestionName(name) {
-                  var nameArray = name.split(' - ');
-                  if (nameArray.length > 1) {
-                      name = nameArray.slice(0, nameArray.length - 1).join(' - ');
-                  }
-                  return name.toLowerCase();
+              // match at name beginning only
+              function leadingStrict(a) {
+                  var index = a.indexOf(value);
+                  return index === 0;
               }
 
+              function sortNames(a, b) {
+                  var aCompare = (a.suggestion ? a.originalName : a.name()).toLowerCase();
+                  var bCompare = (b.suggestion ? b.originalName : b.name()).toLowerCase();
 
-              value = value.toLowerCase();
+                  // priority if search string matches preset name exactly - #4325
+                  if (value === aCompare) return -1;
+                  if (value === bCompare) return 1;
+
+                  // priority for higher matchScore
+                  var i = b.originalScore - a.originalScore;
+                  if (i !== 0) return i;
+
+                  // priority if search string appears earlier in preset name
+                  i = aCompare.indexOf(value) - bCompare.indexOf(value);
+                  if (i !== 0) return i;
+
+                  // priority for shorter preset names
+                  return aCompare.length - bCompare.length;
+              }
 
-              var searchable = filter(this.collection, function(a) {
+
+              var searchable = this.collection.filter(function(a) {
                   return a.searchable !== false && a.suggestion !== true;
               });
-              var suggestions = filter(this.collection, function(a) {
+              var suggestions = this.collection.filter(function(a) {
                   return a.suggestion === true;
               });
 
-
               // matches value to preset.name
-              var leading_name = filter(searchable, function(a) {
+              var leading_name = searchable
+                  .filter(function(a) {
                       return leading(a.name().toLowerCase());
-                  }).sort(function(a, b) {
-                      var aCompare = a.name().toLowerCase();
-                      var bCompare = b.name().toLowerCase();
-                      var i;
-
-                      // priority if search string matches preset name exactly - #4325
-                      if (value === aCompare) return -1;
-                      if (value === bCompare) return 1;
-
-                      // priority for higher matchScore
-                      i = b.originalScore - a.originalScore;
-                      if (i !== 0) return i;
-
-                      // priority if search string appears earlier in preset name
-                      i = aCompare.indexOf(value) - bCompare.indexOf(value);
-                      if (i !== 0) return i;
-
-                      // priority for shorter preset names
-                      return a.name().length - b.name().length;
-                  });
+                  }).sort(sortNames);
 
               // matches value to preset.terms values
-              var leading_terms = filter(searchable, function(a) {
-                  return some(a.terms() || [], leading);
-              });
+              var leading_terms = searchable
+                  .filter(function(a) {
+                      return some(a.terms() || [], leading);
+                  });
 
               // matches value to preset.tags values
-              var leading_tag_values = filter(searchable, function(a) {
-                  return some(without(values$1(a.tags || {}), '*'), leading);
-              });
+              var leading_tag_values = searchable
+                  .filter(function(a) {
+                      return some(without(values$1(a.tags || {}), '*'), leading);
+                  });
 
+              var leading_suggestions = suggestions
+                  .filter(function(a) {
+                      return leadingStrict(a.originalName.toLowerCase());
+                  }).sort(sortNames);
 
               // finds close matches to value in preset.name
               var similar_name = searchable
                   });
 
               // finds close matches to value in preset.terms
-              var similar_terms = filter(searchable, function(a) {
+              var similar_terms = searchable
+                  .filter(function(a) {
                       return some(a.terms() || [], function(b) {
                           return utilEditDistance(value, b) + Math.min(value.length - b.length, 0) < 3;
                       });
                   });
 
-              var leading_suggestions = filter(suggestions, function(a) {
-                      return leading(suggestionName(a.name()));
-                  }).sort(function(a, b) {
-                      a = suggestionName(a.name());
-                      b = suggestionName(b.name());
-                      var i = a.indexOf(value) - b.indexOf(value);
-                      if (i === 0) return a.length - b.length;
-                      else return i;
-                  });
-
-              var similar_suggestions = suggestions.map(function(a) {
-                      return { preset: a, dist: utilEditDistance(value, suggestionName(a.name())) };
+              var similar_suggestions = suggestions
+                  .map(function(a) {
+                      return { preset: a, dist: utilEditDistance(value, a.originalName.toLowerCase()) };
                   }).filter(function(a) {
-                      return a.dist + Math.min(value.length - suggestionName(a.preset.name()).length, 0) < 1;
+                      return a.dist + Math.min(value.length - a.preset.originalName.length, 0) < 1;
                   }).sort(function(a, b) {
                       return a.dist - b.dist;
                   }).map(function(a) {
               var other = presets.item(geometry);
 
               var results = leading_name.concat(
+                  leading_suggestions,
                   leading_terms,
                   leading_tag_values,
-                  leading_suggestions.slice(0, maxSuggestionResults + 5),
                   similar_name,
-                  similar_terms,
-                  similar_suggestions.slice(0, maxSuggestionResults)
+                  similar_suggestions,
+                  similar_terms
               ).slice(0, maxSearchResults - 1);
 
               return presetCollection(uniq(results.concat(other)));
 
           // Skip `fields` for the keys which define the preset.
           // These are usually `typeCombo` fields like `shop=*`
-          function withoutKeyFields(fieldID) {
+          function shouldInheritFieldWithID(fieldID) {
               var f = fields[fieldID];
               if (f.key) {
-                  return preset.tags[f.key] === undefined;
+                  if (preset.tags[f.key] !== undefined &&
+                      // inherit anyway if multiple values are allowed
+                      f.type !== 'multiCombo' && f.type !== 'semiCombo') {
+                      return false;
+                  }
               }
               return true;
           }
               var inheritFieldIDs = inheritPreset[prop] || [];
 
               if (prop === 'fields') {
-                  inheritFieldIDs = inheritFieldIDs.filter(withoutKeyFields);
+                  inheritFieldIDs = inheritFieldIDs.filter(shouldInheritFieldWithID);
               }
 
               return inheritFieldIDs;
           var tags = preset.tags;
           var score = 0;
 
-          for (var t$$1 in tags) {
-              if (entity.tags[t$$1] === tags[t$$1]) {
+          for (var t in tags) {
+              if (entity.tags[t] === tags[t]) {
                   score += preset.originalScore;
-              } else if (tags[t$$1] === '*' && t$$1 in entity.tags) {
+              } else if (tags[t] === '*' && t in entity.tags) {
                   score += preset.originalScore / 2;
               } else {
                   return -1;
       };
 
 
-      var origName = preset.name || '';
+      preset.originalName = preset.name || '';
+
+
       preset.name = function() {
           if (preset.suggestion) {
               var path = id.split('/');
               path.pop();  // remove brand name
               // NOTE: insert an en-dash, not a hypen (to avoid conflict with fr - nl names in Brussels etc)
-              return origName + ' – ' + t('presets.presets.' + path.join('/') + '.name');
+              return preset.originalName + ' – ' + t('presets.presets.' + path.join('/') + '.name');
           }
-          return preset.t('name', { 'default': origName });
+          return preset.t('name', { 'default': preset.originalName });
       };
 
-      var origTerms = (preset.terms || []).join();
+
+      preset.originalTerms = (preset.terms || []).join();
+
+
       preset.terms = function() {
-          return preset.t('terms', { 'default': origTerms }).toLowerCase().trim().split(/\s*,+\s*/);
+          return preset.t('terms', { 'default': preset.originalTerms }).toLowerCase().trim().split(/\s*,+\s*/);
       };
 
 
 
       var reference = preset.reference || {};
       preset.reference = function(geometry) {
-          var key = reference.key || Object.keys(omit(preset.tags, 'name'))[0],
-              value = reference.value || preset.tags[key];
+          // Lookup documentation on Wikidata...
+          var qid = preset.tags.wikidata || preset.tags['brand:wikidata'] || preset.tags['operator:wikidata'];
+          if (qid) {
+              return { qid: qid };
+          }
+
+          // Lookup documentation on OSM Wikibase...
+          var key = reference.key || Object.keys(omit(preset.tags, 'name'))[0];
+          var value = reference.value || preset.tags[key];
 
           if (geometry === 'relation' && key === 'type') {
               if (value in preset.tags) {
               for (var k in entity.tags) {
                   // If any part of an address is present,
                   // allow fallback to "Address" preset - #4353
-                  if (k.match(/^addr:/) !== null && geometryMatches['addr:*']) {
+                  if (/^addr:/.test(k) && geometryMatches['addr:*']) {
                       address = geometryMatches['addr:*'][0];
                   }
 
                           match = keyMatches[i];
                       }
                   }
+                  
               }
 
               if (address && (!match || match.isFallback())) {
           });
       };
 
+      all.allowsVertex = function(entity, resolver) {
+          if (entity.type !== 'node') return false;
+          if (isEmpty(entity.tags)) return true;
+          return resolver.transient(entity, 'vertexMatch', function() {
+              var vertexPresets = _index.vertex;
+              var match;
+
+              if (entity.isOnAddressLine(resolver)) {
+                  match = true;
+              } else {
+                  for (var k in entity.tags) {
+                      var keyMatches = vertexPresets[k];
+                      if (!keyMatches) continue;
+                      for (var i = 0; i < keyMatches.length; i++) {
+                          var preset =  keyMatches[i];
+                          if (preset.searchable !== false) {
+                              if (preset.matchScore(entity) > -1) {
+                                  match = preset;
+                                  break;
+                              }
+                          }
+                      }
+
+                      if (!match && /^addr:/.test(k) && vertexPresets['addr:*']) {
+                          match = true;
+                      }
+
+                      if (match) break;
+
+                  }
+              }
+
+              return match;
+          });
+      };
+
 
       // Because of the open nature of tagging, iD will never have a complete
       // list of tags used in OSM, so we want it to have logic like "assume
 
   function coreContext() {
       var context = {};
-      context.version = '2.13.1';
+      context.version = '2.14.0';
 
       // create a special translation that contains the keys in place of the strings
       var tkeys = cloneDeep(en);
       addTranslation('en', en);
       setLocale('en');
 
-      var dispatch$$1 = dispatch('enter', 'exit', 'change');
+      var dispatch$1 = dispatch('enter', 'exit', 'change');
 
       // https://github.com/openstreetmap/iD/issues/772
       // http://mathiasbynens.be/notes/localstorage-pattern#comment-9
 
 
       /* Straight accessors. Avoid using these if you can. */
-      var connection, history;
+      var connection, history, validator;
       context.connection = function() { return connection; };
       context.history = function() { return history; };
-
+      context.validator = function() { return validator; };
 
       /* Connection */
       context.preauth = function(options) {
       context.enter = function(newMode) {
           if (mode) {
               mode.exit();
-              dispatch$$1.call('exit', this, mode);
+              dispatch$1.call('exit', this, mode);
           }
 
           mode = newMode;
           mode.enter();
-          dispatch$$1.call('enter', this, mode);
+          dispatch$1.call('enter', this, mode);
       };
 
       context.selectedIDs = function() {
       context.setDebug = function(flag, val) {
           if (arguments.length === 1) val = true;
           debugFlags[flag] = val;
-          dispatch$$1.call('change');
+          dispatch$1.call('change');
           return context;
       };
       context.getDebug = function(flag) {
       }
 
       history = coreHistory(context);
+
       context.graph = history.graph;
       context.changes = history.changes;
       context.intersects = history.intersects;
 
+      validator = coreValidator(context);
+
+      // run validation upon restoring from page reload
+      history.on('restore', function() {
+          validator.validate();
+      });
+      // re-run validation upon a significant graph change
+      history.on('annotatedChange', function(difference) {
+          if (difference) {
+              validator.validate();
+          }
+      });
+      // re-run validation upon merging fetched data
+      history.on('merge', function(entities) {
+          if (entities && entities.length > 0) {
+              validator.validate();
+          }
+      });
+
       // Debounce save, since it's a synchronous localStorage write,
       // and history changes can happen frequently (e.g. when dragging).
       context.debouncedSave = debounce(context.save, 350);
           var maprules = utilStringQs(window.location.hash).maprules;
           d3_json(maprules, function (err, mapcss) {
               if (err) return;
-              services.maprules.init(context.presets().areaKeys());
+              services.maprules.init();
               forEach(mapcss, function(mapcssSelector) {
                   return services.maprules.addRule(mapcssSelector);
               });
           areaKeys = presets.areaKeys();
       }
 
-      return utilRebind(context, dispatch$$1, 'on');
+      return utilRebind(context, dispatch$1, 'on');
   }
 
   function osmWay() {
   }
 
 
-  osmEntity$$1.way = osmWay;
+  osmEntity.way = osmWay;
 
-  osmWay.prototype = Object.create(osmEntity$$1.prototype);
+  osmWay.prototype = Object.create(osmEntity.prototype);
 
 
   assignIn(osmWay.prototype, {
       copy: function(resolver, copies) {
           if (copies[this.id]) return copies[this.id];
 
-          var copy = osmEntity$$1.prototype.copy.call(this, resolver, copies);
+          var copy = osmEntity.prototype.copy.call(this, resolver, copies);
 
           var nodes = this.nodes.map(function(id) {
               return resolver.entity(id).copy(resolver, copies).id;
 
       extent: function(resolver) {
           return resolver.transient(this, 'extent', function() {
-              var extent = geoExtent$$1();
+              var extent = geoExtent();
               for (var i = 0; i < this.nodes.length; i++) {
                   var node = resolver.hasEntity(this.nodes[i]);
                   if (node) {
           return true;
       },
 
+      // returns an objects with the tag that implies this is an area, if any
+      tagSuggestingArea: function() {
+
+          if (this.tags.area === 'yes') return { area: 'yes' };
+          if (this.tags.area === 'no') return null;
 
-      isArea: function() {
           // `highway` and `railway` are typically linear features, but there
           // are a few exceptions that should be treated as areas, even in the
           // absence of a proper `area=yes` or `areaKeys` tag.. see #4194
                   wash: true
               }
           };
-
-          if (this.tags.area === 'yes')
-              return true;
-          if (!this.isClosed() || this.tags.area === 'no')
-              return false;
+          var returnTags = {};
           for (var key in this.tags) {
               if (key in areaKeys && !(this.tags[key] in areaKeys[key])) {
-                  return true;
+                  returnTags[key] = this.tags[key];
+                  return returnTags;
               }
               if (key in lineKeys && this.tags[key] in lineKeys[key]) {
-                  return true;
+                  returnTags[key] = this.tags[key];
+                  return returnTags;
               }
           }
-          return false;
+          return null;
+      },
+
+      isArea: function() {
+
+          if (this.tags.area === 'yes')
+              return true;
+          if (!this.isClosed() || this.tags.area === 'no')
+              return false;
+          return this.tagSuggestingArea() !== null;
       },
 
 
                   '@id': this.osmId(),
                   '@version': this.version || 0,
                   nd: map$3(this.nodes, function(id) {
-                      return { keyAttributes: { ref: osmEntity$$1.id.toOSM(id) } };
+                      return { keyAttributes: { ref: osmEntity.id.toOSM(id) } };
                   }),
                   tag: map$3(this.tags, function(v, k) {
                       return { keyAttributes: { k: k, v: v } };
       return i === 0 || node !== arr[i - 1];
   }
 
+  // "Old" multipolyons, previously known as "simple" multipolygons, are as follows:
+  //
+  // 1. Relation tagged with `type=multipolygon` and no interesting tags.
+  // 2. One and only one member with the `outer` role. Must be a way with interesting tags.
+  // 3. No members without a role.
+  //
+  // Old multipolygons are no longer recommended but are still rendered as areas by iD.
+
+  function osmOldMultipolygonOuterMemberOfRelation(entity, graph) {
+      if (entity.type !== 'relation' ||
+          !entity.isMultipolygon()
+          || Object.keys(entity.tags).filter(osmIsInterestingTag).length > 1) {
+          return false;
+      }
+
+      var outerMember;
+      for (var memberIndex in entity.members) {
+          var member = entity.members[memberIndex];
+          if (!member.role) return false;
+          if (member.role === 'outer') {
+              if (outerMember) return false;
+              if (member.type !== 'way') return false;
+              if (!graph.hasEntity(member.id)) return false;
+
+              outerMember = graph.entity(member.id);
+
+              if (Object.keys(outerMember.tags).filter(osmIsInterestingTag).length === 0) {
+                  return false;
+              }
+          }
+      }
+
+      return outerMember;
+  }
+
   // For fixing up rendering of multipolygons with tags on the outer member.
   // https://github.com/openstreetmap/iD/issues/613
-  function osmIsSimpleMultipolygonOuterMember(entity, graph) {
+  function osmIsOldMultipolygonOuterMember(entity, graph) {
       if (entity.type !== 'way' || Object.keys(entity.tags).filter(osmIsInterestingTag).length === 0)
           return false;
 
   }
 
 
-  function osmSimpleMultipolygonOuterMember(entity, graph) {
+  function osmOldMultipolygonOuterMember(entity, graph) {
       if (entity.type !== 'way')
           return false;
 
   }
 
 
-  osmEntity$$1.relation = osmRelation;
+  osmEntity.relation = osmRelation;
 
-  osmRelation.prototype = Object.create(osmEntity$$1.prototype);
+  osmRelation.prototype = Object.create(osmEntity.prototype);
 
 
   osmRelation.creationOrder = function(a, b) {
-      var aId = parseInt(osmEntity$$1.id.toOSM(a.id), 10);
-      var bId = parseInt(osmEntity$$1.id.toOSM(b.id), 10);
+      var aId = parseInt(osmEntity.id.toOSM(a.id), 10);
+      var bId = parseInt(osmEntity.id.toOSM(b.id), 10);
 
       if (aId < 0 || bId < 0) return aId - bId;
       return bId - aId;
       copy: function(resolver, copies) {
           if (copies[this.id]) return copies[this.id];
 
-          var copy = osmEntity$$1.prototype.copy.call(this, resolver, copies);
+          var copy = osmEntity.prototype.copy.call(this, resolver, copies);
 
           var members = this.members.map(function(member) {
               return assignIn({}, member, { id: resolver.entity(member.id).copy(resolver, copies).id });
 
       extent: function(resolver, memo) {
           return resolver.transient(this, 'extent', function() {
-              if (memo && memo[this.id]) return geoExtent$$1();
+              if (memo && memo[this.id]) return geoExtent();
               memo = memo || {};
               memo[this.id] = true;
 
-              var extent = geoExtent$$1();
+              var extent = geoExtent();
               for (var i = 0; i < this.members.length; i++) {
                   var member = resolver.hasEntity(this.members[i].id);
                   if (member) {
                           keyAttributes: {
                               type: member.type,
                               role: member.role,
-                              ref: osmEntity$$1.id.toOSM(member.id)
+                              ref: osmEntity.id.toOSM(member.id)
                           }
                       };
                   }),
       }
   });
 
+  var services$1 = {improveOSM:{errorTypes:{ow:{icon:"fas-long-arrow-alt-right",category:"routing"},"mr-both":{icon:"maki-car",category:"geometry"},"mr-parking":{icon:"maki-parking",category:"geometry"},"mr-path":{icon:"maki-shoe",category:"geometry"},"mr-road":{icon:"maki-car",category:"geometry"},tr:{icon:"temaki-junction",category:"routing"}}},keepRight:{errorTypes:{}}};
+
+  function qaError() {
+      if (!(this instanceof qaError)) {
+          return (new qaError()).initialize(arguments);
+      } else if (arguments.length) {
+          this.initialize(arguments);
+      }
+  }
+
+  // Generic handling for services without nice IDs
+  qaError.id = function() {
+      return qaError.id.next--;
+  };
+
+  qaError.id.next = -1;
+
+  assignIn(qaError.prototype, {
+      type: 'qaError',
+
+      // All errors need a position
+      loc: [0, 0],
+
+      // These should be passed in, used to retrieve from qa_errors.json
+      service: '',
+      error_type: '',
+
+      initialize: function(sources) {
+          for (var i = 0; i < sources.length; ++i) {
+              var source = sources[i];
+              for (var prop in source) {
+                  if (Object.prototype.hasOwnProperty.call(source, prop)) {
+                      if (source[prop] === undefined) {
+                          delete this[prop];
+                      } else {
+                          this[prop] = source[prop];
+                      }
+                  }
+              }
+          }
+
+          // Extract common error information from data
+          if (this.service && this.error_type) {
+              var serviceInfo = services$1[this.service];
+
+              if (serviceInfo) {
+                  var errInfo = serviceInfo.errorTypes[this.error_type];
+
+                  if (errInfo) {
+                      this.icon = errInfo.icon;
+                      this.category = errInfo.category;
+                  }
+              }
+          }
+
+          // All errors must have an ID for selection
+          if (!this.id) {
+              this.id = qaError.id() + '';  // as string
+          }
+
+          return this;
+      },
+
+      update: function(attrs) {
+          return qaError(this, attrs); // {v: 1 + (this.v || 0)}
+      }
+  });
+
   function osmTurn(turn) {
       if (!(this instanceof osmTurn)) {
           return new osmTurn(turn);
 
   function osmIntersection(graph, startVertexId, maxDistance) {
       maxDistance = maxDistance || 30;    // in meters
-      var vgraph = coreGraph$$1();           // virtual graph
+      var vgraph = coreGraph();           // virtual graph
       var i, j, k;
 
 
 
 
       // STEP 4:  Split ways on key vertices
-      var origCount = osmEntity$$1.id.next.way;
+      var origCount = osmEntity.id.next.way;
       vertices.forEach(function(v) {
           // This is an odd way to do it, but we need to find all the ways that
           // will be split here, then split them one at a time to ensure that these
       //     these actions later if the user decides to create a turn restriction
       //  2. Avoids churning way ids just by hovering over a vertex
       //     and displaying the turn restriction editor
-      osmEntity$$1.id.next.way = origCount;
+      osmEntity.id.next.way = origCount;
 
 
       // STEP 5:  Update arrays to point to vgraph entities
                   ]);
 
                   // choose a nearnode to use as the original
-                  var min$$1 = Infinity;
+                  var min = Infinity;
                   for (var nodeId in nearNodes) {
                       var nearAngle = nearNodes[nodeId],
                           dist = Math.abs(nearAngle - angle);
-                      if (dist < min$$1) {
-                          dist = min$$1;
+                      if (dist < min) {
+                          dist = min;
                           origNode = origNodes[nodeId];
                       }
                   }
       };
   }
 
-  function actionDeprecateTags(entityId) {
-
-      return function(graph) {
-          var entity = graph.entity(entityId),
-              newtags = clone(entity.tags),
-              change = false,
-              rule;
-
-          // This handles dataDeprecated tags with a single condition
-          for (var i = 0; i < dataDeprecated.length; i++) {
-
-              rule = dataDeprecated[i];
-              var match = toPairs(rule.old)[0],
-                  replacements = rule.replace ? toPairs(rule.replace) : null;
-
-              if (entity.tags[match[0]] && match[1] === '*') {
-
-                  var value = entity.tags[match[0]];
-                  if (replacements && !newtags[replacements[0][0]]) {
-                      newtags[replacements[0][0]] = value;
-                  }
-                  delete newtags[match[0]];
-                  change = true;
-
-              } else if (entity.tags[match[0]] === match[1]) {
-                  newtags = assign({}, rule.replace || {}, omit(newtags, match[0]));
-                  change = true;
-              }
-          }
-
-          if (change) {
-              return graph.replace(entity.update({tags: newtags}));
-          } else {
-              return graph;
-          }
-      };
-  }
-
   function actionDiscardTags(difference) {
 
       return function(graph) {
           if (joined.length > 1)
               return 'not_adjacent';
 
+          // Loop through all combinations of path-pairs to check potential intersections
+          //  between all pairs
+          for (var i = 0; i < ids.length-1; i++) {
+              for (var j = i+1; j < ids.length; j++) {
+                  var path1 = graph.childNodes(graph.entity(ids[i])).map(function(e) {
+                      return e.loc;
+                  });
+                  var path2 = graph.childNodes(graph.entity(ids[j])).map(function(e) {
+                      return e.loc;
+                  });
+                  var intersections = geoPathIntersections(path1, path2);
+
+                  // Check if intersections are just nodes lying on top of each other/the line,
+                  //  as opposed to crossing it
+                  if (intersection(
+                          joined[0].nodes.map(function(n) { return n.loc.toString(); }),
+                          intersections.map(function(n) { return n.toString(); })
+                      ).length !== intersections.length) return 'paths_intersect';
+              }
+          }
+
           var nodeIds = joined[0].nodes.map(function(n) { return n.id; }).slice(1, -1);
           var relation;
           var tags = {};
   // 1. move all the nodes to a common location
   // 2. `actionConnect` them
 
-  function actionMergeNodes(nodeIDs) {
+  function actionMergeNodes(nodeIDs, loc) {
 
       // If there is a single "interesting" node, use that as the location.
       // Otherwise return the average location of all the nodes.
 
       var action = function(graph) {
           if (nodeIDs.length < 2) return graph;
-          var toLoc = chooseLoc(graph);
+          var toLoc = loc;
+          if (!toLoc) {
+              toLoc = chooseLoc(graph);
+          }
 
           for (var i = 0; i < nodeIDs.length; i++) {
               var node = graph.entity(nodeIDs[i]);
-              graph = graph.replace(node.move(toLoc));
+              if (node.loc !== toLoc) {
+                  graph = graph.replace(node.move(toLoc));
+              }
           }
 
           return actionConnect(nodeIDs)(graph);
                   updates.replacements.push(remote);
 
               } else if (_option === 'force_local' && local) {
-                  target = osmEntity$$1(local);
+                  target = osmEntity(local);
                   if (remote) {
                       target = target.update({ version: remote.version });
                   }
                   updates.replacements.push(target);
 
               } else if (_option === 'safe' && local && remote && local.version !== remote.version) {
-                  target = osmEntity$$1(local, { version: remote.version });
+                  target = osmEntity(local, { version: remote.version });
                   if (remote.visible) {
                       target = mergeLocation(remote, target);
                   } else {
           var base = graph.base().entities[id];
           var local = localGraph.entity(id);
           var remote = remoteGraph.entity(id);
-          var target = osmEntity$$1(local, { version: remote.version });
+          var target = osmEntity(local, { version: remote.version });
 
           // delete/undelete
           if (!remote.visible) {
       //              |
       //              e
       //
-      function unZorroIntersection(intersection$$1, graph) {
-          var vertex = graph.entity(intersection$$1.nodeId);
-          var way1 = graph.entity(intersection$$1.movedId);
-          var way2 = graph.entity(intersection$$1.unmovedId);
-          var isEP1 = intersection$$1.movedIsEP;
-          var isEP2 = intersection$$1.unmovedIsEP;
+      function unZorroIntersection(intersection, graph) {
+          var vertex = graph.entity(intersection.nodeId);
+          var way1 = graph.entity(intersection.movedId);
+          var way2 = graph.entity(intersection.unmovedId);
+          var isEP1 = intersection.movedIsEP;
+          var isEP2 = intersection.unmovedIsEP;
 
           // don't move the vertex if it is the endpoint of both ways.
           if (isEP1 && isEP2) return graph;
           var nodesA;
           var nodesB;
           var isArea = wayA.isArea();
-          var isOuter = osmIsSimpleMultipolygonOuterMember(wayA, graph);
+          var isOuter = osmIsOldMultipolygonOuterMember(wayA, graph);
 
           if (wayA.isClosed()) {
               var nodes = wayA.nodes.slice(0, -1);
                   angle = Math.atan2(c2[1] - c1[1], c2[0] - c1[0]),
                   poly = geoRotate(hull, -angle, centroid),
                   extent = poly.reduce(function(extent, point) {
-                          return extent.extend(geoExtent$$1(point));
-                      }, geoExtent$$1()),
+                          return extent.extend(geoExtent(point));
+                      }, geoExtent()),
                   area = extent.area();
 
               if (area < minArea) {
     Connection: Connection,
     debug: debug,
     d3: index$3,
+    coreValidator: coreValidator,
     Context: coreContext,
     setAreaKeys: setAreaKeys,
+    get areaKeys () { return areaKeys; },
     Difference: coreDifference,
-    Graph: coreGraph$$1,
+    Graph: coreGraph,
     History: coreHistory,
     Tree: coreTree,
     geoCross: geoVecCross,
     geoInterp: geoVecInterp,
     geoRoundCoordinates: geoVecFloor,
     geoEuclideanDistance: geoVecLength,
-    Entity: osmEntity$$1,
+    Entity: osmEntity,
     Node: osmNode,
     Relation: osmRelation,
     Way: osmWay,
     actionDeleteNode: actionDeleteNode,
     actionDeleteRelation: actionDeleteRelation,
     actionDeleteWay: actionDeleteWay,
-    actionDeprecateTags: actionDeprecateTags,
     actionDiscardTags: actionDiscardTags,
     actionDisconnect: actionDisconnect,
     actionJoin: actionJoin,
     behaviorTail: behaviorTail,
     coreContext: coreContext,
     coreDifference: coreDifference,
-    coreGraph: coreGraph$$1,
+    coreGraph: coreGraph,
     coreHistory: coreHistory,
     coreTree: coreTree,
     data: data,
     dataImperial: dataImperial,
     dataDriveLeft: dataDriveLeft,
     dataEn: en,
-    geoExtent: geoExtent$$1,
+    geoExtent: geoExtent,
     geoLatToMeters: geoLatToMeters,
     geoLonToMeters: geoLonToMeters,
     geoMetersToLat: geoMetersToLat,
     geoMetersToOffset: geoMetersToOffset,
     geoOffsetToMeters: geoOffsetToMeters,
     geoScaleToZoom: geoScaleToZoom,
+    geoSphericalClosestNode: geoSphericalClosestNode,
     geoSphericalDistance: geoSphericalDistance,
     geoZoomToScale: geoZoomToScale,
     geoAngle: geoAngle,
     geoVecLength: geoVecLength,
     geoVecSubtract: geoVecSubtract,
     geoVecScale: geoVecScale,
-    modeAddArea: modeAddArea$$1,
-    modeAddLine: modeAddLine$$1,
-    modeAddPoint: modeAddPoint$$1,
-    modeAddNote: modeAddNote$$1,
+    modeAddArea: modeAddArea,
+    modeAddLine: modeAddLine,
+    modeAddPoint: modeAddPoint,
+    modeAddNote: modeAddNote,
     modeBrowse: modeBrowse,
-    modeDragNode: modeDragNode$$1,
-    modeDragNote: modeDragNote$$1,
+    modeDragNode: modeDragNode,
+    modeDragNote: modeDragNote,
     modeDrawArea: modeDrawArea,
     modeDrawLine: modeDrawLine,
-    modeMove: modeMove$$1,
-    modeRotate: modeRotate$$1,
-    modeSave: modeSave$$1,
+    modeMove: modeMove,
+    modeRotate: modeRotate,
+    modeSave: modeSave,
     modeSelect: modeSelect,
-    modeSelectData: modeSelectData$$1,
-    modeSelectError: modeSelectError$$1,
-    modeSelectNote: modeSelectNote$$1,
+    modeSelectData: modeSelectData,
+    modeSelectError: modeSelectError,
+    modeSelectNote: modeSelectNote,
     operationCircularize: operationCircularize,
     operationContinue: operationContinue,
     operationDelete: operationDelete,
     operationStraighten: operationStraighten,
     operationDetachNode: operationDetachNode,
     osmChangeset: osmChangeset,
-    osmEntity: osmEntity$$1,
-    krError: krError,
+    osmEntity: osmEntity,
     osmNode: osmNode,
     osmNote: osmNote,
     osmRelation: osmRelation,
     osmWay: osmWay,
+    qaError: qaError,
     osmIntersection: osmIntersection,
     osmTurn: osmTurn,
     osmInferRestriction: osmInferRestriction,
     osmLanes: osmLanes,
-    osmIsSimpleMultipolygonOuterMember: osmIsSimpleMultipolygonOuterMember,
-    osmSimpleMultipolygonOuterMember: osmSimpleMultipolygonOuterMember,
+    osmOldMultipolygonOuterMemberOfRelation: osmOldMultipolygonOuterMemberOfRelation,
+    osmIsOldMultipolygonOuterMember: osmIsOldMultipolygonOuterMember,
+    osmOldMultipolygonOuterMember: osmOldMultipolygonOuterMember,
     osmJoinWays: osmJoinWays,
     osmOneWayTags: osmOneWayTags,
     osmPavedTags: osmPavedTags,
     rendererTileLayer: rendererTileLayer,
     services: services,
     serviceKeepRight: serviceKeepRight,
+    serviceImproveOSM: serviceImproveOSM,
     serviceMapillary: serviceMapillary,
     serviceMapRules: serviceMapRules,
     serviceNominatim: serviceNominatim,
     serviceVectorTile: serviceVectorTile,
     serviceWikidata: serviceWikidata,
     serviceWikipedia: serviceWikipedia,
-    svgAreas: svgAreas$$1,
-    svgData: svgData$$1,
-    svgDebug: svgDebug$$1,
+    svgAreas: svgAreas,
+    svgData: svgData,
+    svgDebug: svgDebug,
     svgDefs: svgDefs,
-    svgKeepRight: svgKeepRight$$1,
+    svgKeepRight: svgKeepRight,
     svgIcon: svgIcon,
     svgGeolocate: svgGeolocate,
     svgLabels: svgLabels,
     svgLayers: svgLayers,
-    svgLines: svgLines$$1,
-    svgMapillaryImages: svgMapillaryImages$$1,
-    svgMapillarySigns: svgMapillarySigns$$1,
-    svgMidpoints: svgMidpoints$$1,
-    svgNotes: svgNotes$$1,
+    svgLines: svgLines,
+    svgMapillaryImages: svgMapillaryImages,
+    svgMapillarySigns: svgMapillarySigns,
+    svgMidpoints: svgMidpoints,
+    svgNotes: svgNotes,
     svgMarkerSegments: svgMarkerSegments,
-    svgOpenstreetcamImages: svgOpenstreetcamImages$$1,
+    svgOpenstreetcamImages: svgOpenstreetcamImages,
     svgOsm: svgOsm,
     svgPassiveVertex: svgPassiveVertex,
     svgPath: svgPath,
     svgPointTransform: svgPointTransform,
-    svgPoints: svgPoints$$1,
+    svgPoints: svgPoints,
     svgRelationMemberTags: svgRelationMemberTags,
     svgSegmentWay: svgSegmentWay,
-    svgStreetside: svgStreetside$$1,
+    svgStreetside: svgStreetside,
     svgTagClasses: svgTagClasses,
     svgTouch: svgTouch,
     svgTurns: svgTurns,
-    svgVertices: svgVertices$$1,
+    svgVertices: svgVertices,
     uiFields: uiFields,
     uiFieldDefaultCheck: uiFieldCheck,
     uiFieldOnewayCheck: uiFieldCheck,
     uiBackground: uiBackground,
     uiBackgroundDisplayOptions: uiBackgroundDisplayOptions,
     uiBackgroundOffset: uiBackgroundOffset,
-    uiChangesetEditor: uiChangesetEditor$$1,
+    uiChangesetEditor: uiChangesetEditor,
     uiCmd: uiCmd,
     uiCombobox: uiCombobox,
     uiCommit: uiCommit,
     uiConflicts: uiConflicts,
     uiContributors: uiContributors,
     uiCurtain: uiCurtain,
-    uiDataEditor: uiDataEditor$$1,
+    uiDataEditor: uiDataEditor,
     uiDataHeader: uiDataHeader,
     uiDisclosure: uiDisclosure,
     uiEditMenu: uiEditMenu,
     uiField: uiField,
     uiFieldHelp: uiFieldHelp,
     uiFlash: uiFlash,
-    uiFormFields: uiFormFields$$1,
+    uiFormFields: uiFormFields,
     uiFullScreen: uiFullScreen,
     uiGeolocate: uiGeolocate,
     uiHelp: uiHelp,
+    uiImproveOsmComments: uiImproveOsmComments,
+    uiImproveOsmDetails: uiImproveOsmDetails,
+    uiImproveOsmEditor: uiImproveOsmEditor,
+    uiImproveOsmHeader: uiImproveOsmHeader,
     uiInfo: uiInfo,
     uiInspector: uiInspector,
     uiKeepRightDetails: uiKeepRightDetails,
-    uiKeepRightEditor: uiKeepRightEditor$$1,
+    uiKeepRightEditor: uiKeepRightEditor,
     uiKeepRightHeader: uiKeepRightHeader,
     uiLasso: uiLasso,
     uiLoading: uiLoading,
     uiModes: uiModes,
     uiNotice: uiNotice,
     uiNoteComments: uiNoteComments,
-    uiNoteEditor: uiNoteEditor$$1,
+    uiNoteEditor: uiNoteEditor,
     uiNoteHeader: uiNoteHeader,
     uiNoteReport: uiNoteReport,
     uiPresetEditor: uiPresetEditor,
     uiPresetList: uiPresetList,
     uiQuickLinks: uiQuickLinks,
     uiRadialMenu: uiRadialMenu,
-    uiRawMemberEditor: uiRawMemberEditor$$1,
-    uiRawMembershipEditor: uiRawMembershipEditor$$1,
-    uiRawTagEditor: uiRawTagEditor$$1,
+    uiRawMemberEditor: uiRawMemberEditor,
+    uiRawMembershipEditor: uiRawMembershipEditor,
+    uiRawTagEditor: uiRawTagEditor,
     uiRestore: uiRestore,
     uiSave: uiSave,
     uiScale: uiScale,
     uiSelectionList: uiSelectionList,
-    uiSidebar: uiSidebar$$1,
+    uiSidebar: uiSidebar,
     uiSourceSwitch: uiSourceSwitch,
     uiSpinner: uiSpinner,
     uiSplash: uiSplash,
     uiStatus: uiStatus,
-    uiSuccess: uiSuccess$$1,
+    uiSuccess: uiSuccess,
     uiTagReference: uiTagReference,
     uiToggle: uiToggle,
     uiTooltipHtml: uiTooltipHtml,
     utilDisplayName: utilDisplayName,
     utilDisplayNameForPath: utilDisplayNameForPath,
     utilDisplayType: utilDisplayType,
+    utilDisplayLabel: utilDisplayLabel,
     utilEntityRoot: utilEntityRoot,
     utilEditDistance: utilEditDistance,
     utilEntitySelector: utilEntitySelector,
     utilGetPrototypeOf: utilGetPrototypeOf,
     utilGetSetValue: utilGetSetValue,
     utilHashcode: utilHashcode,
-    utilHighlightEntity: utilHighlightEntity,
+    utilHighlightEntities: utilHighlightEntities,
     utilIdleWorker: utilIdleWorker,
     utilKeybinding: utilKeybinding,
     utilNoAuto: utilNoAuto,
     utilPrefixCSSProperty: utilPrefixCSSProperty,
     utilPrefixDOMProperty: utilPrefixDOMProperty,
+    utilPreset: utilPreset,
     utilQsString: utilQsString,
     utilRebind: utilRebind,
     utilSetTransform: utilSetTransform,
     utilTiler: utilTiler,
     utilTriggerEvent: utilTriggerEvent,
     utilWrap: utilWrap,
+    validationAlmostJunction: validationAlmostJunction,
+    validationCrossingWays: validationCrossingWays,
     validationDeprecatedTag: validationDeprecatedTag,
-    validationDisconnectedHighway: validationDisconnectedHighway,
+    validationDisconnectedWay: validationDisconnectedWay,
     validationGenericName: validationGenericName,
     validationManyDeletions: validationManyDeletions,
-    validationMapCSSChecks: validationMapCSSChecks,
+    validationMaprules: validationMaprules,
     validationMissingTag: validationMissingTag,
     validationOldMultipolygon: validationOldMultipolygon,
     validationTagSuggestsArea: validationTagSuggestsArea
index 85c8f9e4b69efd0ec6e1a64c0571b314784a0744..3367201b8e00f307e8413b714d4cf2610db38ff9 100644 (file)
@@ -1 +1 @@
-<?xml version="1.0" encoding="utf-8"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><symbol class="aasvg-inline--fa aafa-ambulance aafa-w-20" viewBox="0 0 640 512" id="fas-ambulance" xmlns="http://www.w3.org/2000/svg"><path fill="currentColor" d="M624 352h-16V243.9c0-12.7-5.1-24.9-14.1-33.9L494 110.1c-9-9-21.2-14.1-33.9-14.1H416V48c0-26.5-21.5-48-48-48H48C21.5 0 0 21.5 0 48v320c0 26.5 21.5 48 48 48h16c0 53 43 96 96 96s96-43 96-96h128c0 53 43 96 96 96s96-43 96-96h48c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zM160 464c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48zm144-248c0 4.4-3.6 8-8 8h-56v56c0 4.4-3.6 8-8 8h-48c-4.4 0-8-3.6-8-8v-56h-56c-4.4 0-8-3.6-8-8v-48c0-4.4 3.6-8 8-8h56v-56c0-4.4 3.6-8 8-8h48c4.4 0 8 3.6 8 8v56h56c4.4 0 8 3.6 8 8v48zm176 248c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48zm80-208H416V144h44.1l99.9 99.9V256z"/></symbol><symbol class="absvg-inline--fa abfa-archway abfa-w-18" viewBox="0 0 576 512" id="fas-archway" xmlns="http://www.w3.org/2000/svg"><path fill="currentColor" d="M560 448h-16V96H32v352H16.02c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16H176c8.84 0 16-7.16 16-16V320c0-53.02 42.98-96 96-96s96 42.98 96 96l.02 160v16c0 8.84 7.16 16 16 16H560c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zm0-448H16C7.16 0 0 7.16 0 16v32c0 8.84 7.16 16 16 16h544c8.84 0 16-7.16 16-16V16c0-8.84-7.16-16-16-16z"/></symbol><symbol class="acsvg-inline--fa acfa-balance-scale acfa-w-20" viewBox="0 0 640 512" id="fas-balance-scale" xmlns="http://www.w3.org/2000/svg"><path fill="currentColor" d="M256 336h-.02c0-16.18 1.34-8.73-85.05-181.51-17.65-35.29-68.19-35.36-85.87 0C-2.06 328.75.02 320.33.02 336H0c0 44.18 57.31 80 128 80s128-35.82 128-80zM128 176l72 144H56l72-144zm511.98 160c0-16.18 1.34-8.73-85.05-181.51-17.65-35.29-68.19-35.36-85.87 0-87.12 174.26-85.04 165.84-85.04 181.51H384c0 44.18 57.31 80 128 80s128-35.82 128-80h-.02zM440 320l72-144 72 144H440zm88 128H352V153.25c23.51-10.29 41.16-31.48 46.39-57.25H528c8.84 0 16-7.16 16-16V48c0-8.84-7.16-16-16-16H383.64C369.04 12.68 346.09 0 320 0s-49.04 12.68-63.64 32H112c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h129.61c5.23 25.76 22.87 46.96 46.39 57.25V448H112c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h416c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16z"/></symbol><symbol class="adsvg-inline--fa adfa-bell adfa-w-14" viewBox="0 0 448 512" id="fas-bell" xmlns="http://www.w3.org/2000/svg"><path fill="currentColor" d="M224 512c35.32 0 63.97-28.65 63.97-64H160.03c0 35.35 28.65 64 63.97 64zm215.39-149.71c-19.32-20.76-55.47-51.99-55.47-154.29 0-77.7-54.48-139.9-127.94-155.16V32c0-17.67-14.32-32-31.98-32s-31.98 14.33-31.98 32v20.84C118.56 68.1 64.08 130.3 64.08 208c0 102.3-36.15 133.53-55.47 154.29-6 6.45-8.66 14.16-8.61 21.71.11 16.4 12.98 32 32.1 32h383.8c19.12 0 32-15.6 32.1-32 .05-7.55-2.61-15.27-8.61-21.71z"/></symbol><symbol class="aesvg-inline--fa aefa-blender aefa-w-16" viewBox="0 0 512 512" id="fas-blender" xmlns="http://www.w3.org/2000/svg"><path fill="currentColor" d="M416 384H160c-35.35 0-64 28.65-64 64v32c0 17.67 14.33 32 32 32h320c17.67 0 32-14.33 32-32v-32c0-35.35-28.65-64-64-64zm-128 96c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm40-416h166.54L512 0H48C21.49 0 0 21.49 0 48v160c0 26.51 21.49 48 48 48h103.27l8.73 96h256l17.46-64H328c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h114.18l17.46-64H328c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h140.36l17.46-64H328c-4.42 0-8-3.58-8-8V72c0-4.42 3.58-8 8-8zM64 192V64h69.82l11.64 128H64z"/></symbol><symbol class="afsvg-inline--fa affa-box affa-w-16" viewBox="0 0 512 512" id="fas-box" xmlns="http://www.w3.org/2000/svg"><path fill="currentColor" d="M509.5 184.6L458.9 32.8C452.4 13.2 434.1 0 413.4 0H272v192h238.7c-.4-2.5-.4-5-1.2-7.4zM240 0H98.6c-20.7 0-39 13.2-45.5 32.8L2.5 184.6c-.8 2.4-.8 4.9-1.2 7.4H240V0zM0 224v240c0 26.5 21.5 48 48 48h416c26.5 0 48-21.5 48-48V224H0z"/></symbol><symbol class="agsvg-inline--fa agfa-charging-station agfa-w-18" viewBox="0 0 576 512" id="fas-charging-station" xmlns="http://www.w3.org/2000/svg"><path fill="currentColor" d="M336 448H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h320c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zm208-320V80c0-8.84-7.16-16-16-16s-16 7.16-16 16v48h-32V80c0-8.84-7.16-16-16-16s-16 7.16-16 16v48h-16c-8.84 0-16 7.16-16 16v32c0 35.76 23.62 65.69 56 75.93v118.49c0 13.95-9.5 26.92-23.26 29.19C431.22 402.5 416 388.99 416 372v-28c0-48.6-39.4-88-88-88h-8V64c0-35.35-28.65-64-64-64H96C60.65 0 32 28.65 32 64v352h288V304h8c22.09 0 40 17.91 40 40v24.61c0 39.67 28.92 75.16 68.41 79.01C481.71 452.05 520 416.41 520 372V251.93c32.38-10.24 56-40.17 56-75.93v-32c0-8.84-7.16-16-16-16h-16zm-283.91 47.76l-93.7 139c-2.2 3.33-6.21 5.24-10.39 5.24-7.67 0-13.47-6.28-11.67-12.92L167.35 224H108c-7.25 0-12.85-5.59-11.89-11.89l16-107C112.9 99.9 117.98 96 124 96h68c7.88 0 13.62 6.54 11.6 13.21L192 160h57.7c9.24 0 15.01 8.78 10.39 15.76z"/></symbol><symbol class="ahsvg-inline--fa ahfa-couch ahfa-w-20" viewBox="0 0 640 512" id="fas-couch" xmlns="http://www.w3.org/2000/svg"><path fill="currentColor" d="M160 224v64h320v-64c0-35.3 28.7-64 64-64h32c0-53-43-96-96-96H160c-53 0-96 43-96 96h32c35.3 0 64 28.7 64 64zm416-32h-32c-17.7 0-32 14.3-32 32v96H128v-96c0-17.7-14.3-32-32-32H64c-35.3 0-64 28.7-64 64 0 23.6 13 44 32 55.1V432c0 8.8 7.2 16 16 16h64c8.8 0 16-7.2 16-16v-16h384v16c0 8.8 7.2 16 16 16h64c8.8 0 16-7.2 16-16V311.1c19-11.1 32-31.5 32-55.1 0-35.3-28.7-64-64-64z"/></symbol><symbol class="aisvg-inline--fa aifa-drumstick-bite aifa-w-16" viewBox="0 0 512 512" id="fas-drumstick-bite" xmlns="http://www.w3.org/2000/svg"><path fill="currentColor" d="M462.79 49.57c-66.14-66.09-173.36-66.09-239.5 0C187.81 85.02 160.12 128 160.12 192v85.83l-40.62 40.59c-9.7 9.69-24.04 11.07-36.78 5.98-21.72-8.68-47.42-4.29-65.02 13.29-23.61 23.59-23.61 61.84 0 85.43 15.28 15.27 36.53 19.58 56.14 15.09-4.5 19.6-.18 40.83 15.1 56.1 23.61 23.59 61.88 23.59 85.49 0 17.6-17.58 21.99-43.26 13.31-64.97-5.09-12.73-3.72-27.05 5.99-36.75L234.35 352h85.89c23.2 0 43.57-3.72 61.89-10.03-39.64-43.89-39.83-110.23 1.05-151.07 34.38-34.36 86.76-39.46 128.74-16.8 1.3-44.93-14.81-90.25-49.13-124.53z"/></symbol><symbol class="ajsvg-inline--fa ajfa-dumbbell ajfa-w-20" viewBox="0 0 640 512" id="fas-dumbbell" xmlns="http://www.w3.org/2000/svg"><path fill="currentColor" d="M104 96H56c-13.3 0-24 10.7-24 24v104H8c-4.4 0-8 3.6-8 8v48c0 4.4 3.6 8 8 8h24v104c0 13.3 10.7 24 24 24h48c13.3 0 24-10.7 24-24V120c0-13.3-10.7-24-24-24zm528 128h-24V120c0-13.3-10.7-24-24-24h-48c-13.3 0-24 10.7-24 24v272c0 13.3 10.7 24 24 24h48c13.3 0 24-10.7 24-24V288h24c4.4 0 8-3.6 8-8v-48c0-4.4-3.6-8-8-8zM456 32h-48c-13.3 0-24 10.7-24 24v168H256V56c0-13.3-10.7-24-24-24h-48c-13.3 0-24 10.7-24 24v400c0 13.3 10.7 24 24 24h48c13.3 0 24-10.7 24-24V288h128v168c0 13.3 10.7 24 24 24h48c13.3 0 24-10.7 24-24V56c0-13.3-10.7-24-24-24z"/></symbol><symbol class="aksvg-inline--fa akfa-fire-extinguisher akfa-w-14" viewBox="0 0 448 512" id="fas-fire-extinguisher" xmlns="http://www.w3.org/2000/svg"><path fill="currentColor" d="M434.027 26.329l-168 28C254.693 56.218 256 67.8 256 72h-58.332C208.353 36.108 181.446 0 144 0c-39.435 0-66.368 39.676-52.228 76.203-52.039 13.051-75.381 54.213-90.049 90.884-4.923 12.307 1.063 26.274 13.37 31.197 12.317 4.926 26.279-1.075 31.196-13.37C75.058 112.99 106.964 120 168 120v27.076c-41.543 10.862-72 49.235-72 94.129V488c0 13.255 10.745 24 24 24h144c13.255 0 24-10.745 24-24V240c0-44.731-30.596-82.312-72-92.97V120h40c0 2.974-1.703 15.716 10.027 17.671l168 28C441.342 166.89 448 161.25 448 153.834V38.166c0-7.416-6.658-13.056-13.973-11.837zM144 72c-8.822 0-16-7.178-16-16s7.178-16 16-16 16 7.178 16 16-7.178 16-16 16z"/></symbol><symbol class="alsvg-inline--fa alfa-fish alfa-w-18" viewBox="0 0 576 512" id="fas-fish" xmlns="http://www.w3.org/2000/svg"><path fill="currentColor" d="M327.1 96c-89.97 0-168.54 54.77-212.27 101.63L27.5 131.58c-12.13-9.18-30.24.6-27.14 14.66L24.54 256 .35 365.77c-3.1 14.06 15.01 23.83 27.14 14.66l87.33-66.05C158.55 361.23 237.13 416 327.1 416 464.56 416 576 288 576 256S464.56 96 327.1 96zm87.43 184c-13.25 0-24-10.75-24-24 0-13.26 10.75-24 24-24 13.26 0 24 10.74 24 24 0 13.25-10.75 24-24 24z"/></symbol><symbol class="amsvg-inline--fa amfa-key amfa-w-16" viewBox="0 0 512 512" id="fas-key" xmlns="http://www.w3.org/2000/svg"><path fill="currentColor" d="M512 176.001C512 273.203 433.202 352 336 352c-11.22 0-22.19-1.062-32.827-3.069l-24.012 27.014A23.999 23.999 0 0 1 261.223 384H224v40c0 13.255-10.745 24-24 24h-40v40c0 13.255-10.745 24-24 24H24c-13.255 0-24-10.745-24-24v-78.059c0-6.365 2.529-12.47 7.029-16.971l161.802-161.802C163.108 213.814 160 195.271 160 176 160 78.798 238.797.001 335.999 0 433.488-.001 512 78.511 512 176.001zM336 128c0 26.51 21.49 48 48 48s48-21.49 48-48-21.49-48-48-48-48 21.49-48 48z"/></symbol><symbol class="ansvg-inline--fa anfa-life-ring anfa-w-16" viewBox="0 0 512 512" id="fas-life-ring" xmlns="http://www.w3.org/2000/svg"><path fill="currentColor" d="M256 8C119.033 8 8 119.033 8 256s111.033 248 248 248 248-111.033 248-248S392.967 8 256 8zm173.696 119.559l-63.399 63.399c-10.987-18.559-26.67-34.252-45.255-45.255l63.399-63.399a218.396 218.396 0 0 1 45.255 45.255zM256 352c-53.019 0-96-42.981-96-96s42.981-96 96-96 96 42.981 96 96-42.981 96-96 96zM127.559 82.304l63.399 63.399c-18.559 10.987-34.252 26.67-45.255 45.255l-63.399-63.399a218.372 218.372 0 0 1 45.255-45.255zM82.304 384.441l63.399-63.399c10.987 18.559 26.67 34.252 45.255 45.255l-63.399 63.399a218.396 218.396 0 0 1-45.255-45.255zm302.137 45.255l-63.399-63.399c18.559-10.987 34.252-26.67 45.255-45.255l63.399 63.399a218.403 218.403 0 0 1-45.255 45.255z"/></symbol><symbol class="aosvg-inline--fa aofa-medkit aofa-w-16" viewBox="0 0 512 512" id="fas-medkit" xmlns="http://www.w3.org/2000/svg"><path fill="currentColor" d="M96 480h320V128h-32V80c0-26.51-21.49-48-48-48H176c-26.51 0-48 21.49-48 48v48H96v352zm96-384h128v32H192V96zm320 80v256c0 26.51-21.49 48-48 48h-16V128h16c26.51 0 48 21.49 48 48zM64 480H48c-26.51 0-48-21.49-48-48V176c0-26.51 21.49-48 48-48h16v352zm288-208v32c0 8.837-7.163 16-16 16h-48v48c0 8.837-7.163 16-16 16h-32c-8.837 0-16-7.163-16-16v-48h-48c-8.837 0-16-7.163-16-16v-32c0-8.837 7.163-16 16-16h48v-48c0-8.837 7.163-16 16-16h32c8.837 0 16 7.163 16 16v48h48c8.837 0 16 7.163 16 16z"/></symbol><symbol class="apsvg-inline--fa apfa-motorcycle apfa-w-20" viewBox="0 0 640 512" id="fas-motorcycle" xmlns="http://www.w3.org/2000/svg"><path fill="currentColor" d="M512.949 192.003c-14.862-.108-29.14 2.322-42.434 6.874L437.589 144H520c13.255 0 24-10.745 24-24V88c0-13.255-10.745-24-24-24h-45.311a24 24 0 0 0-17.839 7.945l-37.496 41.663-22.774-37.956A24 24 0 0 0 376 64h-80c-8.837 0-16 7.163-16 16v16c0 8.837 7.163 16 16 16h66.411l19.2 32H227.904c-17.727-23.073-44.924-40-99.904-40H72.54c-13.455 0-24.791 11.011-24.536 24.464C48.252 141.505 58.9 152 72 152h56c24.504 0 38.686 10.919 47.787 24.769l-11.291 20.529c-13.006-3.865-26.871-5.736-41.251-5.21C55.857 194.549 1.565 249.605.034 317.021-1.603 389.076 56.317 448 128 448c59.642 0 109.744-40.794 123.953-96h84.236c13.673 0 24.589-11.421 23.976-25.077-2.118-47.12 17.522-93.665 56.185-125.026l12.485 20.808c-27.646 23.654-45.097 58.88-44.831 98.179.47 69.556 57.203 126.452 126.758 127.11 71.629.678 129.839-57.487 129.234-129.099-.588-69.591-57.455-126.386-127.047-126.892zM128 400c-44.112 0-80-35.888-80-80s35.888-80 80-80c4.242 0 8.405.341 12.469.982L98.97 316.434C90.187 332.407 101.762 352 120 352h81.297c-12.37 28.225-40.56 48-73.297 48zm388.351-.116C470.272 402.337 432 365.554 432 320c0-21.363 8.434-40.781 22.125-55.144l49.412 82.352c4.546 7.577 14.375 10.034 21.952 5.488l13.72-8.232c7.577-4.546 10.034-14.375 5.488-21.952l-48.556-80.927A80.005 80.005 0 0 1 512 240c45.554 0 82.338 38.273 79.884 84.352-2.16 40.558-34.974 73.372-75.533 75.532z"/></symbol><symbol class="aqsvg-inline--fa aqfa-paint-roller aqfa-w-16" viewBox="0 0 512 512" id="fas-paint-roller" xmlns="http://www.w3.org/2000/svg"><path fill="currentColor" d="M416 128V32c0-17.67-14.33-32-32-32H32C14.33 0 0 14.33 0 32v96c0 17.67 14.33 32 32 32h352c17.67 0 32-14.33 32-32zm32-64v128c0 17.67-14.33 32-32 32H256c-35.35 0-64 28.65-64 64v32c-17.67 0-32 14.33-32 32v128c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32V352c0-17.67-14.33-32-32-32v-32h160c53.02 0 96-42.98 96-96v-64c0-35.35-28.65-64-64-64z"/></symbol><symbol class="arsvg-inline--fa arfa-people-carry arfa-w-20" viewBox="0 0 640 512" id="fas-people-carry" xmlns="http://www.w3.org/2000/svg"><path fill="currentColor" d="M128 96c26.5 0 48-21.5 48-48S154.5 0 128 0 80 21.5 80 48s21.5 48 48 48zm384 0c26.5 0 48-21.5 48-48S538.5 0 512 0s-48 21.5-48 48 21.5 48 48 48zm125.7 372.1l-44-110-41.1 46.4-2 18.2 27.7 69.2c5 12.5 17 20.1 29.7 20.1 4 0 8-.7 11.9-2.3 16.4-6.6 24.4-25.2 17.8-41.6zm-34.2-209.8L585 178.1c-4.6-20-18.6-36.8-37.5-44.9-18.5-8-39-6.7-56.1 3.3-22.7 13.4-39.7 34.5-48.1 59.4L432 229.8 416 240v-96c0-8.8-7.2-16-16-16H240c-8.8 0-16 7.2-16 16v96l-16.1-10.2-11.3-33.9c-8.3-25-25.4-46-48.1-59.4-17.2-10-37.6-11.3-56.1-3.3-18.9 8.1-32.9 24.9-37.5 44.9l-18.4 80.2c-4.6 20 .7 41.2 14.4 56.7l67.2 75.9 10.1 92.6C130 499.8 143.8 512 160 512c1.2 0 2.3-.1 3.5-.2 17.6-1.9 30.2-17.7 28.3-35.3l-10.1-92.8c-1.5-13-6.9-25.1-15.6-35l-43.3-49 17.6-70.3 6.8 20.4c4.1 12.5 11.9 23.4 24.5 32.6l51.1 32.5c4.6 2.9 12.1 4.6 17.2 5h160c5.1-.4 12.6-2.1 17.2-5l51.1-32.5c12.6-9.2 20.4-20 24.5-32.6l6.8-20.4 17.6 70.3-43.3 49c-8.7 9.9-14.1 22-15.6 35l-10.1 92.8c-1.9 17.6 10.8 33.4 28.3 35.3 1.2.1 2.3.2 3.5.2 16.1 0 30-12.1 31.8-28.5l10.1-92.6 67.2-75.9c13.6-15.5 19-36.7 14.4-56.7zM46.3 358.1l-44 110c-6.6 16.4 1.4 35 17.8 41.6 16.8 6.6 35.1-1.7 41.6-17.8l27.7-69.2-2-18.2-41.1-46.4z"/></symbol><symbol class="assvg-inline--fa asfa-plane-departure asfa-w-20" viewBox="0 0 640 512" id="fas-plane-departure" xmlns="http://www.w3.org/2000/svg"><path fill="currentColor" d="M624 448H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h608c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zM80.55 341.27c6.28 6.84 15.1 10.72 24.33 10.71l130.54-.18a65.62 65.62 0 0 0 29.64-7.12l290.96-147.65c26.74-13.57 50.71-32.94 67.02-58.31 18.31-28.48 20.3-49.09 13.07-63.65-7.21-14.57-24.74-25.27-58.25-27.45-29.85-1.94-59.54 5.92-86.28 19.48l-98.51 49.99-218.7-82.06a17.799 17.799 0 0 0-18-1.11L90.62 67.29c-10.67 5.41-13.25 19.65-5.17 28.53l156.22 98.1-103.21 52.38-72.35-36.47a17.804 17.804 0 0 0-16.07.02L9.91 230.22c-10.44 5.3-13.19 19.12-5.57 28.08l76.21 82.97z"/></symbol><symbol class="atsvg-inline--fa atfa-skating atfa-w-14" viewBox="0 0 448 512" id="fas-skating" xmlns="http://www.w3.org/2000/svg"><path fill="currentColor" d="M400 0c-26.5 0-48 21.5-48 48s21.5 48 48 48 48-21.5 48-48-21.5-48-48-48zm0 448c-8.8 0-16 7.2-16 16s-7.2 16-16 16h-96c-8.8 0-16 7.2-16 16s7.2 16 16 16h96c26.5 0 48-21.5 48-48 0-8.8-7.2-16-16-16zm-282.2 8.6c-6.2 6.2-16.4 6.3-22.6 0l-67.9-67.9c-6.2-6.2-16.4-6.2-22.6 0s-6.2 16.4 0 22.6l67.9 67.9c9.4 9.4 21.7 14 34 14s24.6-4.7 33.9-14c6.2-6.2 6.2-16.4 0-22.6s-16.4-6.3-22.7 0zm56.1-179.8l-93.7 93.7c-12.5 12.5-12.5 32.8 0 45.2 6.2 6.2 14.4 9.4 22.6 9.4s16.4-3.1 22.6-9.4l91.9-91.9-30.2-30.2c-5-5-9.4-10.7-13.2-16.8zM128 160h105.5l-20.1 17.2c-13.5 11.5-21.6 28.4-22.3 46.1-.7 17.8 6.1 35.2 18.7 47.7l78.2 78.2V432c0 17.7 14.3 32 32 32s32-14.3 32-32v-89.4c0-12.6-5.1-25-14.1-33.9l-61-61c.5-.4 1.2-.6 1.7-1.1l82.3-82.3c11.5-11.5 14.9-28.6 8.7-43.6-6.2-15-20.7-24.7-37-24.7H128c-17.7 0-32 14.3-32 32s14.3 32 32 32z"/></symbol><symbol class="ausvg-inline--fa aufa-skiing aufa-w-16" viewBox="0 0 512 512" id="fas-skiing" xmlns="http://www.w3.org/2000/svg"><path fill="currentColor" d="M432 96c26.5 0 48-21.5 48-48S458.5 0 432 0s-48 21.5-48 48 21.5 48 48 48zm73 356.1c-9.4-9.4-24.6-9.4-33.9 0-12.1 12.1-30.5 15.4-45.1 8.7l-135.8-70.2 49.2-73.8c12.7-19 10.2-44.5-6-60.6L293 215.7l-107-53.1c-2.9 19.9 3.4 40 17.7 54.4l75.1 75.2-45.9 68.8L35 258.7c-11.7-6-26.2-1.5-32.3 10.3-6.1 11.8-1.5 26.3 10.3 32.3l391.9 202.5c11.9 5.5 24.5 8.1 37.1 8.1 23.2 0 46-9 63-26 9.3-9.3 9.3-24.5 0-33.8zM120 91.6l-11.5 22.5c14.4 7.3 31.2 4.9 42.8-4.8l47.2 23.4c-.1.1-.1.2-.2.3l114.5 56.8 32.4-13 6.4 19.1c4 12.1 12.6 22 24 27.7l58.1 29c15.9 7.9 35 1.5 42.9-14.3 7.9-15.8 1.5-35-14.3-42.9l-52.1-26.1-17.1-51.2c-8.1-24.2-40.9-56.6-84.5-39.2l-81.2 32.5-62.5-31c.3-14.5-7.2-28.6-20.9-35.6l-11.1 21.7h-.2l-34.4-7c-1.8-.4-3.7.2-5 1.7-1.9 2.2-1.7 5.5.5 7.4l26.2 23z"/></symbol><symbol class="avsvg-inline--fa avfa-skiing-nordic avfa-w-18" viewBox="0 0 576 512" id="fas-skiing-nordic" xmlns="http://www.w3.org/2000/svg"><path fill="currentColor" d="M336 96c26.5 0 48-21.5 48-48S362.5 0 336 0s-48 21.5-48 48 21.5 48 48 48zm216 320c-13.2 0-24 10.7-24 24 0 13.2-10.8 24-24 24h-69.5L460 285.6c11.7-4.7 20.1-16.2 20.1-29.6 0-17.7-14.3-32-32-32h-44L378 170.8c-12.5-25.5-35.5-44.2-61.8-50.9L245 98.7c-28.3-6.8-57.8-.5-80.8 17.1l-39.7 30.4c-14 10.7-16.7 30.8-5.9 44.9.7.9 1.7 1.3 2.4 2.1L66.9 464H24c-13.2 0-24 10.7-24 24s10.8 24 24 24h480c39.7 0 72-32.3 72-72 0-13.2-10.8-24-24-24zm-260.5 48h-96.9l43.1-91-22-13c-12.1-7.2-21.9-16.9-29.5-27.8L123.7 464H99.5l52.3-261.4c4.1-1 8.1-2.9 11.7-5.6l39.7-30.4c7.7-5.9 17.4-8 25.3-6.1l14.7 4.4-37.5 87.4c-12.6 29.5-1.3 64 26.3 80.3l85 50.2-25.5 81.2zm110.6 0h-43.6l23.6-75.5c5.9-20.8-2.9-43.1-21.6-54.4L299.3 298l31.3-78.3 20.3 41.4c8 16.3 24.9 26.9 43.1 26.9h33.3l-25.2 176z"/></symbol><symbol class="awsvg-inline--fa awfa-sleigh awfa-w-20" viewBox="0 0 640 512" id="fas-sleigh" xmlns="http://www.w3.org/2000/svg"><path fill="currentColor" d="M612.7 350.7l-9.3-7.4c-6.9-5.5-17-4.4-22.5 2.5l-10 12.5c-5.5 6.9-4.4 17 2.5 22.5l9.3 7.4c5.9 4.7 9.2 11.7 9.2 19.2 0 13.6-11 24.6-24.6 24.6H48c-8.8 0-16 7.2-16 16v16c0 8.8 7.2 16 16 16h516c39 0 73.7-29.3 75.9-68.3 1.4-23.8-8.7-46.3-27.2-61zM32 224c0 59.6 40.9 109.2 96 123.5V400h64v-48h192v48h64v-48c53 0 96-43 96-96v-96c17.7 0 32-14.3 32-32s-14.3-32-32-32h-96v64c0 35.3-28.7 64-64 64h-20.7c-65.8 0-125.9-37.2-155.3-96-29.4-58.8-89.6-96-155.3-96H32C14.3 32 0 46.3 0 64s14.3 32 32 32v128z"/></symbol><symbol class="axsvg-inline--fa axfa-smoking axfa-w-20" viewBox="0 0 640 512" id="fas-smoking" xmlns="http://www.w3.org/2000/svg"><path fill="currentColor" d="M632 352h-48c-4.4 0-8 3.6-8 8v144c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8V360c0-4.4-3.6-8-8-8zM553.3 87.1c-5.7-3.8-9.3-10-9.3-16.8V8c0-4.4-3.6-8-8-8h-48c-4.4 0-8 3.6-8 8v62.3c0 22 10.2 43.4 28.6 55.4 42.2 27.3 67.4 73.8 67.4 124V280c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8v-30.3c0-65.5-32.4-126.2-86.7-162.6zM432 352H48c-26.5 0-48 21.5-48 48v64c0 26.5 21.5 48 48 48h384c8.8 0 16-7.2 16-16V368c0-8.8-7.2-16-16-16zm-32 112H224v-64h176v64zm87.7-322.4C463.8 125 448 99.3 448 70.3V8c0-4.4-3.6-8-8-8h-48c-4.4 0-8 3.6-8 8v66.4c0 43.7 24.6 81.6 60.3 106.7 22.4 15.7 35.7 41.2 35.7 68.6V280c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8v-30.3c0-43.3-21-83.4-56.3-108.1zM536 352h-48c-4.4 0-8 3.6-8 8v144c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8V360c0-4.4-3.6-8-8-8z"/></symbol><symbol class="aysvg-inline--fa ayfa-snowboarding ayfa-w-16" viewBox="0 0 512 512" id="fas-snowboarding" xmlns="http://www.w3.org/2000/svg"><path fill="currentColor" d="M432 96c26.5 0 48-21.5 48-48S458.5 0 432 0s-48 21.5-48 48 21.5 48 48 48zm28.8 153.6c5.8 4.3 12.5 6.4 19.2 6.4 9.7 0 19.3-4.4 25.6-12.8 10.6-14.1 7.8-34.2-6.4-44.8l-111.4-83.5c-13.8-10.3-29.1-18.4-45.4-23.8l-63.7-21.2-26.1-52.1C244.7 2 225.5-4.4 209.7 3.5c-15.8 7.9-22.2 27.1-14.3 42.9l29.1 58.1c5.7 11.4 15.6 19.9 27.7 24l16.4 5.5-41.2 20.6c-21.8 10.9-35.4 32.8-35.4 57.2v53.1l-74.1 24.7c-16.8 5.6-25.8 23.7-20.2 40.5 1.7 5.2 4.9 9.4 8.7 12.9l-38.7-14.1c-9.7-3.5-17.4-10.6-21.8-20-5.6-12-19.9-17.2-31.9-11.6s-17.2 19.9-11.6 31.9c9.8 21 27.1 36.9 48.9 44.8l364.8 132.7c9.7 3.5 19.7 5.3 29.7 5.3 12.5 0 24.9-2.7 36.5-8.2 12-5.6 17.2-19.9 11.6-31.9S474 454.7 462 460.3c-9.3 4.4-19.8 4.8-29.5 1.3l-90.8-33.1c8.7-4.1 15.6-11.8 17.8-21.9l21.9-102c3.9-18.2-3.2-37.2-18.1-48.4l-52-39 66-30.5 83.5 62.9zm-144.4 51.7l-19.7 92c-1.5 7.1-.1 13.9 2.8 20l-169.4-61.6c2.7-.2 5.4-.4 8-1.3l85-28.4c19.6-6.5 32.8-24.8 32.8-45.5V256l60.5 45.3z"/></symbol><symbol class="azsvg-inline--fa azfa-solar-panel azfa-w-20" viewBox="0 0 640 512" id="fas-solar-panel" xmlns="http://www.w3.org/2000/svg"><path fill="currentColor" d="M431.98 448.01l-47.97.05V416h-128v32.21l-47.98.05c-8.82.01-15.97 7.16-15.98 15.99l-.05 31.73c-.01 8.85 7.17 16.03 16.02 16.02l223.96-.26c8.82-.01 15.97-7.16 15.98-15.98l.04-31.73c.01-8.85-7.17-16.03-16.02-16.02zM585.2 26.74C582.58 11.31 568.99 0 553.06 0H86.93C71 0 57.41 11.31 54.79 26.74-3.32 369.16.04 348.08.03 352c-.03 17.32 14.29 32 32.6 32h574.74c18.23 0 32.51-14.56 32.59-31.79.02-4.08 3.35 16.95-54.76-325.47zM259.83 64h120.33l9.77 96H250.06l9.77-96zm-75.17 256H71.09L90.1 208h105.97l-11.41 112zm16.29-160H98.24l16.29-96h96.19l-9.77 96zm32.82 160l11.4-112h149.65l11.4 112H233.77zm195.5-256h96.19l16.29 96H439.04l-9.77-96zm26.06 256l-11.4-112H549.9l19.01 112H455.33z"/></symbol><symbol class="basvg-inline--fa bafa-taxi bafa-w-16" viewBox="0 0 512 512" id="fas-taxi" xmlns="http://www.w3.org/2000/svg"><path fill="currentColor" d="M462 241.64l-22-84.84c-9.6-35.2-41.6-60.8-76.8-60.8H352V64c0-17.67-14.33-32-32-32H192c-17.67 0-32 14.33-32 32v32h-11.2c-35.2 0-67.2 25.6-76.8 60.8l-22 84.84C21.41 248.04 0 273.47 0 304v48c0 23.63 12.95 44.04 32 55.12V448c0 17.67 14.33 32 32 32h32c17.67 0 32-14.33 32-32v-32h256v32c0 17.67 14.33 32 32 32h32c17.67 0 32-14.33 32-32v-40.88c19.05-11.09 32-31.5 32-55.12v-48c0-30.53-21.41-55.96-50-62.36zM96 352c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm20.55-112l17.2-66.36c2.23-8.16 9.59-13.64 15.06-13.64h214.4c5.47 0 12.83 5.48 14.85 12.86L395.45 240h-278.9zM416 352c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32z"/></symbol><symbol class="bbsvg-inline--fa bbfa-thermometer-three-quarters bbfa-w-8" viewBox="0 0 256 512" id="fas-thermometer-three-quarters" xmlns="http://www.w3.org/2000/svg"><path fill="currentColor" d="M192 384c0 35.346-28.654 64-64 64-35.346 0-64-28.654-64-64 0-23.685 12.876-44.349 32-55.417V160c0-17.673 14.327-32 32-32s32 14.327 32 32v168.583c19.124 11.068 32 31.732 32 55.417zm32-84.653c19.912 22.563 32 52.194 32 84.653 0 70.696-57.303 128-128 128-.299 0-.609-.001-.909-.003C56.789 511.509-.357 453.636.002 383.333.166 351.135 12.225 321.755 32 299.347V96c0-53.019 42.981-96 96-96s96 42.981 96 96v203.347zM208 384c0-34.339-19.37-52.19-32-66.502V96c0-26.467-21.533-48-48-48S80 69.533 80 96v221.498c-12.732 14.428-31.825 32.1-31.999 66.08-.224 43.876 35.563 80.116 79.423 80.42L128 464c44.112 0 80-35.888 80-80z"/></symbol><symbol class="bcsvg-inline--fa bcfa-volume-up bcfa-w-18" viewBox="0 0 576 512" id="fas-volume-up" xmlns="http://www.w3.org/2000/svg"><path fill="currentColor" d="M215.03 71.05L126.06 160H24c-13.26 0-24 10.74-24 24v144c0 13.25 10.74 24 24 24h102.06l88.97 88.95c15.03 15.03 40.97 4.47 40.97-16.97V88.02c0-21.46-25.96-31.98-40.97-16.97zm233.32-51.08c-11.17-7.33-26.18-4.24-33.51 6.95-7.34 11.17-4.22 26.18 6.95 33.51 66.27 43.49 105.82 116.6 105.82 195.58 0 78.98-39.55 152.09-105.82 195.58-11.17 7.32-14.29 22.34-6.95 33.5 7.04 10.71 21.93 14.56 33.51 6.95C528.27 439.58 576 351.33 576 256S528.27 72.43 448.35 19.97zM480 256c0-63.53-32.06-121.94-85.77-156.24-11.19-7.14-26.03-3.82-33.12 7.46s-3.78 26.21 7.41 33.36C408.27 165.97 432 209.11 432 256s-23.73 90.03-63.48 115.42c-11.19 7.14-14.5 22.07-7.41 33.36 6.51 10.36 21.12 15.14 33.12 7.46C447.94 377.94 480 319.54 480 256zm-141.77-76.87c-11.58-6.33-26.19-2.16-32.61 9.45-6.39 11.61-2.16 26.2 9.45 32.61C327.98 228.28 336 241.63 336 256c0 14.38-8.02 27.72-20.92 34.81-11.61 6.41-15.84 21-9.45 32.61 6.43 11.66 21.05 15.8 32.61 9.45 28.23-15.55 45.77-45 45.77-76.88s-17.54-61.32-45.78-76.86z"/></symbol><symbol class="bdsvg-inline--fa bdfa-warehouse bdfa-w-20" viewBox="0 0 640 512" id="fas-warehouse" xmlns="http://www.w3.org/2000/svg"><path fill="currentColor" d="M504 352H136.4c-4.4 0-8 3.6-8 8l-.1 48c0 4.4 3.6 8 8 8H504c4.4 0 8-3.6 8-8v-48c0-4.4-3.6-8-8-8zm0 96H136.1c-4.4 0-8 3.6-8 8l-.1 48c0 4.4 3.6 8 8 8h368c4.4 0 8-3.6 8-8v-48c0-4.4-3.6-8-8-8zm0-192H136.6c-4.4 0-8 3.6-8 8l-.1 48c0 4.4 3.6 8 8 8H504c4.4 0 8-3.6 8-8v-48c0-4.4-3.6-8-8-8zm106.5-139L338.4 3.7a48.15 48.15 0 0 0-36.9 0L29.5 117C11.7 124.5 0 141.9 0 161.3V504c0 4.4 3.6 8 8 8h80c4.4 0 8-3.6 8-8V256c0-17.6 14.6-32 32.6-32h382.8c18 0 32.6 14.4 32.6 32v248c0 4.4 3.6 8 8 8h80c4.4 0 8-3.6 8-8V161.3c0-19.4-11.7-36.8-29.5-44.3z"/></symbol><symbol class="besvg-inline--fa befa-wifi befa-w-20" viewBox="0 0 640 512" id="fas-wifi" xmlns="http://www.w3.org/2000/svg"><path fill="currentColor" d="M634.91 154.88C457.74-8.99 182.19-8.93 5.09 154.88c-6.66 6.16-6.79 16.59-.35 22.98l34.24 33.97c6.14 6.1 16.02 6.23 22.4.38 145.92-133.68 371.3-133.71 517.25 0 6.38 5.85 16.26 5.71 22.4-.38l34.24-33.97c6.43-6.39 6.3-16.82-.36-22.98zM320 352c-35.35 0-64 28.65-64 64s28.65 64 64 64 64-28.65 64-64-28.65-64-64-64zm202.67-83.59c-115.26-101.93-290.21-101.82-405.34 0-6.9 6.1-7.12 16.69-.57 23.15l34.44 33.99c6 5.92 15.66 6.32 22.05.8 83.95-72.57 209.74-72.41 293.49 0 6.39 5.52 16.05 5.13 22.05-.8l34.44-33.99c6.56-6.46 6.33-17.06-.56-23.15z"/></symbol></svg>
\ No newline at end of file
+<?xml version="1.0" encoding="utf-8"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><symbol class="aasvg-inline--fa aafa-ambulance aafa-w-20" viewBox="0 0 640 512" id="fas-ambulance" xmlns="http://www.w3.org/2000/svg"><path fill="currentColor" d="M624 352h-16V243.9c0-12.7-5.1-24.9-14.1-33.9L494 110.1c-9-9-21.2-14.1-33.9-14.1H416V48c0-26.5-21.5-48-48-48H48C21.5 0 0 21.5 0 48v320c0 26.5 21.5 48 48 48h16c0 53 43 96 96 96s96-43 96-96h128c0 53 43 96 96 96s96-43 96-96h48c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zM160 464c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48zm144-248c0 4.4-3.6 8-8 8h-56v56c0 4.4-3.6 8-8 8h-48c-4.4 0-8-3.6-8-8v-56h-56c-4.4 0-8-3.6-8-8v-48c0-4.4 3.6-8 8-8h56v-56c0-4.4 3.6-8 8-8h48c4.4 0 8 3.6 8 8v56h56c4.4 0 8 3.6 8 8v48zm176 248c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48zm80-208H416V144h44.1l99.9 99.9V256z"/></symbol><symbol class="absvg-inline--fa abfa-archway abfa-w-18" viewBox="0 0 576 512" id="fas-archway" xmlns="http://www.w3.org/2000/svg"><path fill="currentColor" d="M560 448h-16V96H32v352H16.02c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16H176c8.84 0 16-7.16 16-16V320c0-53.02 42.98-96 96-96s96 42.98 96 96l.02 160v16c0 8.84 7.16 16 16 16H560c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zm0-448H16C7.16 0 0 7.16 0 16v32c0 8.84 7.16 16 16 16h544c8.84 0 16-7.16 16-16V16c0-8.84-7.16-16-16-16z"/></symbol><symbol class="acsvg-inline--fa acfa-bacon acfa-w-18" viewBox="0 0 576 512" id="fas-bacon" xmlns="http://www.w3.org/2000/svg"><path fill="currentColor" d="M218.92 336.39c34.89-34.89 44.2-59.7 54.05-86 10.61-28.29 21.59-57.54 61.37-97.34s69.05-50.77 97.35-61.38c23.88-9 46.64-17.68 76.79-45.37L470.81 8.91a31 31 0 0 0-40.18-2.83c-13.64 10.1-25.15 14.39-41 20.3C247 79.52 209.26 191.29 200.65 214.1c-29.75 78.83-89.55 94.68-98.72 98.09-24.86 9.26-54.73 20.38-91.07 50.36C-3 374-3.63 395 9.07 407.61l35.76 35.51C80 410.52 107 400.15 133 390.39c26.27-9.84 51.06-19.12 85.92-54zm348-232l-35.75-35.51c-35.19 32.63-62.18 43-88.25 52.79-26.26 9.85-51.06 19.16-85.95 54s-44.19 59.69-54 86C292.33 290 281.34 319.22 241.55 359s-69 50.73-97.3 61.32c-23.86 9-46.61 17.66-76.72 45.33l37.68 37.43a31 31 0 0 0 40.18 2.82c13.6-10.06 25.09-14.34 40.94-20.24 142.2-53 180-164.1 188.94-187.69C405 219.18 464.8 203.3 474 199.86c24.87-9.27 54.74-20.4 91.11-50.41 13.89-11.4 14.52-32.45 1.82-45.05z"/></symbol><symbol class="adsvg-inline--fa adfa-balance-scale adfa-w-20" viewBox="0 0 640 512" id="fas-balance-scale" xmlns="http://www.w3.org/2000/svg"><path fill="currentColor" d="M256 336h-.02c0-16.18 1.34-8.73-85.05-181.51-17.65-35.29-68.19-35.36-85.87 0C-2.06 328.75.02 320.33.02 336H0c0 44.18 57.31 80 128 80s128-35.82 128-80zM128 176l72 144H56l72-144zm511.98 160c0-16.18 1.34-8.73-85.05-181.51-17.65-35.29-68.19-35.36-85.87 0-87.12 174.26-85.04 165.84-85.04 181.51H384c0 44.18 57.31 80 128 80s128-35.82 128-80h-.02zM440 320l72-144 72 144H440zm88 128H352V153.25c23.51-10.29 41.16-31.48 46.39-57.25H528c8.84 0 16-7.16 16-16V48c0-8.84-7.16-16-16-16H383.64C369.04 12.68 346.09 0 320 0s-49.04 12.68-63.64 32H112c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h129.61c5.23 25.76 22.87 46.96 46.39 57.25V448H112c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h416c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16z"/></symbol><symbol class="aesvg-inline--fa aefa-bell aefa-w-14" viewBox="0 0 448 512" id="fas-bell" xmlns="http://www.w3.org/2000/svg"><path fill="currentColor" d="M224 512c35.32 0 63.97-28.65 63.97-64H160.03c0 35.35 28.65 64 63.97 64zm215.39-149.71c-19.32-20.76-55.47-51.99-55.47-154.29 0-77.7-54.48-139.9-127.94-155.16V32c0-17.67-14.32-32-31.98-32s-31.98 14.33-31.98 32v20.84C118.56 68.1 64.08 130.3 64.08 208c0 102.3-36.15 133.53-55.47 154.29-6 6.45-8.66 14.16-8.61 21.71.11 16.4 12.98 32 32.1 32h383.8c19.12 0 32-15.6 32.1-32 .05-7.55-2.61-15.27-8.61-21.71z"/></symbol><symbol class="afsvg-inline--fa affa-blender affa-w-16" viewBox="0 0 512 512" id="fas-blender" xmlns="http://www.w3.org/2000/svg"><path fill="currentColor" d="M416 384H160c-35.35 0-64 28.65-64 64v32c0 17.67 14.33 32 32 32h320c17.67 0 32-14.33 32-32v-32c0-35.35-28.65-64-64-64zm-128 96c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm40-416h166.54L512 0H48C21.49 0 0 21.49 0 48v160c0 26.51 21.49 48 48 48h103.27l8.73 96h256l17.46-64H328c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h114.18l17.46-64H328c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h140.36l17.46-64H328c-4.42 0-8-3.58-8-8V72c0-4.42 3.58-8 8-8zM64 192V64h69.82l11.64 128H64z"/></symbol><symbol class="agsvg-inline--fa agfa-box agfa-w-16" viewBox="0 0 512 512" id="fas-box" xmlns="http://www.w3.org/2000/svg"><path fill="currentColor" d="M509.5 184.6L458.9 32.8C452.4 13.2 434.1 0 413.4 0H272v192h238.7c-.4-2.5-.4-5-1.2-7.4zM240 0H98.6c-20.7 0-39 13.2-45.5 32.8L2.5 184.6c-.8 2.4-.8 4.9-1.2 7.4H240V0zM0 224v240c0 26.5 21.5 48 48 48h416c26.5 0 48-21.5 48-48V224H0z"/></symbol><symbol class="ahsvg-inline--fa ahfa-charging-station ahfa-w-18" viewBox="0 0 576 512" id="fas-charging-station" xmlns="http://www.w3.org/2000/svg"><path fill="currentColor" d="M336 448H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h320c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zm208-320V80c0-8.84-7.16-16-16-16s-16 7.16-16 16v48h-32V80c0-8.84-7.16-16-16-16s-16 7.16-16 16v48h-16c-8.84 0-16 7.16-16 16v32c0 35.76 23.62 65.69 56 75.93v118.49c0 13.95-9.5 26.92-23.26 29.19C431.22 402.5 416 388.99 416 372v-28c0-48.6-39.4-88-88-88h-8V64c0-35.35-28.65-64-64-64H96C60.65 0 32 28.65 32 64v352h288V304h8c22.09 0 40 17.91 40 40v24.61c0 39.67 28.92 75.16 68.41 79.01C481.71 452.05 520 416.41 520 372V251.93c32.38-10.24 56-40.17 56-75.93v-32c0-8.84-7.16-16-16-16h-16zm-283.91 47.76l-93.7 139c-2.2 3.33-6.21 5.24-10.39 5.24-7.67 0-13.47-6.28-11.67-12.92L167.35 224H108c-7.25 0-12.85-5.59-11.89-11.89l16-107C112.9 99.9 117.98 96 124 96h68c7.88 0 13.62 6.54 11.6 13.21L192 160h57.7c9.24 0 15.01 8.78 10.39 15.76z"/></symbol><symbol class="aisvg-inline--fa aifa-cheese aifa-w-16" viewBox="0 0 512 512" id="fas-cheese" xmlns="http://www.w3.org/2000/svg"><path fill="currentColor" d="M0 288v160a32 32 0 0 0 32 32h448a32 32 0 0 0 32-32V288zM299.83 32a32 32 0 0 0-21.13 7L0 256h512c0-119.89-94-217.8-212.17-224z"/></symbol><symbol class="ajsvg-inline--fa ajfa-chess-knight ajfa-w-12" viewBox="0 0 384 512" id="fas-chess-knight" xmlns="http://www.w3.org/2000/svg"><path fill="currentColor" d="M352 224v224H32v-46.557c0-30.302 17.12-58.003 44.223-71.554l57.243-28.622A48 48 0 0 0 160 258.334V208l-22.127 11.063a23.996 23.996 0 0 0-12.55 15.645l-11.835 47.338a12 12 0 0 1-7.185 8.231l-29.601 11.84a11.998 11.998 0 0 1-9.33-.176L7.126 275.167A12 12 0 0 1 0 264.201v-158.26c0-6.365 2.529-12.47 7.03-16.971L16 80 1.789 51.578A16.937 16.937 0 0 1 0 44c0-6.627 5.373-12 12-12h148c106.039 0 192 85.961 192 192zm20 240H12c-6.627 0-12 5.373-12 12v24c0 6.627 5.373 12 12 12h360c6.627 0 12-5.373 12-12v-24c0-6.627-5.373-12-12-12zM52 128c-11.046 0-20 8.954-20 20s8.954 20 20 20 20-8.954 20-20-8.954-20-20-20z"/></symbol><symbol class="aksvg-inline--fa akfa-couch akfa-w-20" viewBox="0 0 640 512" id="fas-couch" xmlns="http://www.w3.org/2000/svg"><path fill="currentColor" d="M160 224v64h320v-64c0-35.3 28.7-64 64-64h32c0-53-43-96-96-96H160c-53 0-96 43-96 96h32c35.3 0 64 28.7 64 64zm416-32h-32c-17.7 0-32 14.3-32 32v96H128v-96c0-17.7-14.3-32-32-32H64c-35.3 0-64 28.7-64 64 0 23.6 13 44 32 55.1V432c0 8.8 7.2 16 16 16h64c8.8 0 16-7.2 16-16v-16h384v16c0 8.8 7.2 16 16 16h64c8.8 0 16-7.2 16-16V311.1c19-11.1 32-31.5 32-55.1 0-35.3-28.7-64-64-64z"/></symbol><symbol class="alsvg-inline--fa alfa-drumstick-bite alfa-w-16" viewBox="0 0 512 512" id="fas-drumstick-bite" xmlns="http://www.w3.org/2000/svg"><path fill="currentColor" d="M462.8 49.57a169.44 169.44 0 0 0-239.5 0C187.82 85 160.13 128 160.13 192v85.83l-40.62 40.59c-9.7 9.69-24 11.07-36.78 6a60.33 60.33 0 0 0-65 98.72C33 438.39 54.24 442.7 73.85 438.21c-4.5 19.6-.18 40.83 15.1 56.1a60.35 60.35 0 0 0 98.8-65c-5.09-12.73-3.72-27 6-36.75L234.36 352h85.89a187.87 187.87 0 0 0 61.89-10c-39.64-43.89-39.83-110.23 1.05-151.07 34.38-34.36 86.76-39.46 128.74-16.8 1.3-44.96-14.81-90.28-49.13-124.56z"/></symbol><symbol class="amsvg-inline--fa amfa-dumbbell amfa-w-20" viewBox="0 0 640 512" id="fas-dumbbell" xmlns="http://www.w3.org/2000/svg"><path fill="currentColor" d="M104 96H56c-13.3 0-24 10.7-24 24v104H8c-4.4 0-8 3.6-8 8v48c0 4.4 3.6 8 8 8h24v104c0 13.3 10.7 24 24 24h48c13.3 0 24-10.7 24-24V120c0-13.3-10.7-24-24-24zm528 128h-24V120c0-13.3-10.7-24-24-24h-48c-13.3 0-24 10.7-24 24v272c0 13.3 10.7 24 24 24h48c13.3 0 24-10.7 24-24V288h24c4.4 0 8-3.6 8-8v-48c0-4.4-3.6-8-8-8zM456 32h-48c-13.3 0-24 10.7-24 24v168H256V56c0-13.3-10.7-24-24-24h-48c-13.3 0-24 10.7-24 24v400c0 13.3 10.7 24 24 24h48c13.3 0 24-10.7 24-24V288h128v168c0 13.3 10.7 24 24 24h48c13.3 0 24-10.7 24-24V56c0-13.3-10.7-24-24-24z"/></symbol><symbol class="ansvg-inline--fa anfa-fire-extinguisher anfa-w-14" viewBox="0 0 448 512" id="fas-fire-extinguisher" xmlns="http://www.w3.org/2000/svg"><path fill="currentColor" d="M434.027 26.329l-168 28C254.693 56.218 256 67.8 256 72h-58.332C208.353 36.108 181.446 0 144 0c-39.435 0-66.368 39.676-52.228 76.203-52.039 13.051-75.381 54.213-90.049 90.884-4.923 12.307 1.063 26.274 13.37 31.197 12.317 4.926 26.279-1.075 31.196-13.37C75.058 112.99 106.964 120 168 120v27.076c-41.543 10.862-72 49.235-72 94.129V488c0 13.255 10.745 24 24 24h144c13.255 0 24-10.745 24-24V240c0-44.731-30.596-82.312-72-92.97V120h40c0 2.974-1.703 15.716 10.027 17.671l168 28C441.342 166.89 448 161.25 448 153.834V38.166c0-7.416-6.658-13.056-13.973-11.837zM144 72c-8.822 0-16-7.178-16-16s7.178-16 16-16 16 7.178 16 16-7.178 16-16 16z"/></symbol><symbol class="aosvg-inline--fa aofa-fish aofa-w-18" viewBox="0 0 576 512" id="fas-fish" xmlns="http://www.w3.org/2000/svg"><path fill="currentColor" d="M327.1 96c-89.97 0-168.54 54.77-212.27 101.63L27.5 131.58c-12.13-9.18-30.24.6-27.14 14.66L24.54 256 .35 365.77c-3.1 14.06 15.01 23.83 27.14 14.66l87.33-66.05C158.55 361.23 237.13 416 327.1 416 464.56 416 576 288 576 256S464.56 96 327.1 96zm87.43 184c-13.25 0-24-10.75-24-24 0-13.26 10.75-24 24-24 13.26 0 24 10.74 24 24 0 13.25-10.75 24-24 24z"/></symbol><symbol class="apsvg-inline--fa apfa-handshake apfa-w-20" viewBox="0 0 640 512" id="fas-handshake" xmlns="http://www.w3.org/2000/svg"><path fill="currentColor" d="M434.7 64h-85.9c-8 0-15.7 3-21.6 8.4l-98.3 90c-.1.1-.2.3-.3.4-16.6 15.6-16.3 40.5-2.1 56 12.7 13.9 39.4 17.6 56.1 2.7.1-.1.3-.1.4-.2l79.9-73.2c6.5-5.9 16.7-5.5 22.6 1 6 6.5 5.5 16.6-1 22.6l-26.1 23.9L504 313.8c2.9 2.4 5.5 5 7.9 7.7V128l-54.6-54.6c-5.9-6-14.1-9.4-22.6-9.4zM544 128.2v223.9c0 17.7 14.3 32 32 32h64V128.2h-96zm48 223.9c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16zM0 384h64c17.7 0 32-14.3 32-32V128.2H0V384zm48-63.9c8.8 0 16 7.2 16 16s-7.2 16-16 16-16-7.2-16-16c0-8.9 7.2-16 16-16zm435.9 18.6L334.6 217.5l-30 27.5c-29.7 27.1-75.2 24.5-101.7-4.4-26.9-29.4-24.8-74.9 4.4-101.7L289.1 64h-83.8c-8.5 0-16.6 3.4-22.6 9.4L128 128v223.9h18.3l90.5 81.9c27.4 22.3 67.7 18.1 90-9.3l.2-.2 17.9 15.5c15.9 13 39.4 10.5 52.3-5.4l31.4-38.6 5.4 4.4c13.7 11.1 33.9 9.1 45-4.7l9.5-11.7c11.2-13.8 9.1-33.9-4.6-45.1z"/></symbol><symbol class="aqsvg-inline--fa aqfa-key aqfa-w-16" viewBox="0 0 512 512" id="fas-key" xmlns="http://www.w3.org/2000/svg"><path fill="currentColor" d="M512 176.001C512 273.203 433.202 352 336 352c-11.22 0-22.19-1.062-32.827-3.069l-24.012 27.014A23.999 23.999 0 0 1 261.223 384H224v40c0 13.255-10.745 24-24 24h-40v40c0 13.255-10.745 24-24 24H24c-13.255 0-24-10.745-24-24v-78.059c0-6.365 2.529-12.47 7.029-16.971l161.802-161.802C163.108 213.814 160 195.271 160 176 160 78.798 238.797.001 335.999 0 433.488-.001 512 78.511 512 176.001zM336 128c0 26.51 21.49 48 48 48s48-21.49 48-48-21.49-48-48-48-48 21.49-48 48z"/></symbol><symbol class="arsvg-inline--fa arfa-life-ring arfa-w-16" viewBox="0 0 512 512" id="fas-life-ring" xmlns="http://www.w3.org/2000/svg"><path fill="currentColor" d="M256 8C119.033 8 8 119.033 8 256s111.033 248 248 248 248-111.033 248-248S392.967 8 256 8zm173.696 119.559l-63.399 63.399c-10.987-18.559-26.67-34.252-45.255-45.255l63.399-63.399a218.396 218.396 0 0 1 45.255 45.255zM256 352c-53.019 0-96-42.981-96-96s42.981-96 96-96 96 42.981 96 96-42.981 96-96 96zM127.559 82.304l63.399 63.399c-18.559 10.987-34.252 26.67-45.255 45.255l-63.399-63.399a218.372 218.372 0 0 1 45.255-45.255zM82.304 384.441l63.399-63.399c10.987 18.559 26.67 34.252 45.255 45.255l-63.399 63.399a218.396 218.396 0 0 1-45.255-45.255zm302.137 45.255l-63.399-63.399c18.559-10.987 34.252-26.67 45.255-45.255l63.399 63.399a218.403 218.403 0 0 1-45.255 45.255z"/></symbol><symbol class="assvg-inline--fa asfa-long-arrow-alt-right asfa-w-14" viewBox="0 0 448 512" id="fas-long-arrow-alt-right" xmlns="http://www.w3.org/2000/svg"><path fill="currentColor" d="M313.941 216H12c-6.627 0-12 5.373-12 12v56c0 6.627 5.373 12 12 12h301.941v46.059c0 21.382 25.851 32.09 40.971 16.971l86.059-86.059c9.373-9.373 9.373-24.569 0-33.941l-86.059-86.059c-15.119-15.119-40.971-4.411-40.971 16.971V216z"/></symbol><symbol class="atsvg-inline--fa atfa-medkit atfa-w-16" viewBox="0 0 512 512" id="fas-medkit" xmlns="http://www.w3.org/2000/svg"><path fill="currentColor" d="M96 480h320V128h-32V80c0-26.51-21.49-48-48-48H176c-26.51 0-48 21.49-48 48v48H96v352zm96-384h128v32H192V96zm320 80v256c0 26.51-21.49 48-48 48h-16V128h16c26.51 0 48 21.49 48 48zM64 480H48c-26.51 0-48-21.49-48-48V176c0-26.51 21.49-48 48-48h16v352zm288-208v32c0 8.837-7.163 16-16 16h-48v48c0 8.837-7.163 16-16 16h-32c-8.837 0-16-7.163-16-16v-48h-48c-8.837 0-16-7.163-16-16v-32c0-8.837 7.163-16 16-16h48v-48c0-8.837 7.163-16 16-16h32c8.837 0 16 7.163 16 16v48h48c8.837 0 16 7.163 16 16z"/></symbol><symbol class="ausvg-inline--fa aufa-motorcycle aufa-w-20" viewBox="0 0 640 512" id="fas-motorcycle" xmlns="http://www.w3.org/2000/svg"><path fill="currentColor" d="M512.9 192c-14.9-.1-29.1 2.3-42.4 6.9L437.6 144H520c13.3 0 24-10.7 24-24V88c0-13.3-10.7-24-24-24h-45.3c-6.8 0-13.3 2.9-17.8 7.9l-37.5 41.7-22.8-38C392.2 68.4 384.4 64 376 64h-80c-8.8 0-16 7.2-16 16v16c0 8.8 7.2 16 16 16h66.4l19.2 32H227.9c-17.7-23.1-44.9-40-99.9-40H72.5C59 104 47.7 115 48 128.5c.2 13 10.9 23.5 24 23.5h56c24.5 0 38.7 10.9 47.8 24.8l-11.3 20.5c-13-3.9-26.9-5.7-41.3-5.2C55.9 194.5 1.6 249.6 0 317c-1.6 72.1 56.3 131 128 131 59.6 0 109.7-40.8 124-96h84.2c13.7 0 24.6-11.4 24-25.1-2.1-47.1 17.5-93.7 56.2-125l12.5 20.8c-27.6 23.7-45.1 58.9-44.8 98.2.5 69.6 57.2 126.5 126.8 127.1 71.6.7 129.8-57.5 129.2-129.1-.7-69.6-57.6-126.4-127.2-126.9zM128 400c-44.1 0-80-35.9-80-80s35.9-80 80-80c4.2 0 8.4.3 12.5 1L99 316.4c-8.8 16 2.8 35.6 21 35.6h81.3c-12.4 28.2-40.6 48-73.3 48zm463.9-75.6c-2.2 40.6-35 73.4-75.5 75.5-46.1 2.5-84.4-34.3-84.4-79.9 0-21.4 8.4-40.8 22.1-55.1l49.4 82.4c4.5 7.6 14.4 10 22 5.5l13.7-8.2c7.6-4.5 10-14.4 5.5-22l-48.6-80.9c5.2-1.1 10.5-1.6 15.9-1.6 45.6-.1 82.3 38.2 79.9 84.3z"/></symbol><symbol class="avsvg-inline--fa avfa-paint-roller avfa-w-16" viewBox="0 0 512 512" id="fas-paint-roller" xmlns="http://www.w3.org/2000/svg"><path fill="currentColor" d="M416 128V32c0-17.67-14.33-32-32-32H32C14.33 0 0 14.33 0 32v96c0 17.67 14.33 32 32 32h352c17.67 0 32-14.33 32-32zm32-64v128c0 17.67-14.33 32-32 32H256c-35.35 0-64 28.65-64 64v32c-17.67 0-32 14.33-32 32v128c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32V352c0-17.67-14.33-32-32-32v-32h160c53.02 0 96-42.98 96-96v-64c0-35.35-28.65-64-64-64z"/></symbol><symbol class="awsvg-inline--fa awfa-people-carry awfa-w-20" viewBox="0 0 640 512" id="fas-people-carry" xmlns="http://www.w3.org/2000/svg"><path fill="currentColor" d="M128 96c26.5 0 48-21.5 48-48S154.5 0 128 0 80 21.5 80 48s21.5 48 48 48zm384 0c26.5 0 48-21.5 48-48S538.5 0 512 0s-48 21.5-48 48 21.5 48 48 48zm125.7 372.1l-44-110-41.1 46.4-2 18.2 27.7 69.2c5 12.5 17 20.1 29.7 20.1 4 0 8-.7 11.9-2.3 16.4-6.6 24.4-25.2 17.8-41.6zm-34.2-209.8L585 178.1c-4.6-20-18.6-36.8-37.5-44.9-18.5-8-39-6.7-56.1 3.3-22.7 13.4-39.7 34.5-48.1 59.4L432 229.8 416 240v-96c0-8.8-7.2-16-16-16H240c-8.8 0-16 7.2-16 16v96l-16.1-10.2-11.3-33.9c-8.3-25-25.4-46-48.1-59.4-17.2-10-37.6-11.3-56.1-3.3-18.9 8.1-32.9 24.9-37.5 44.9l-18.4 80.2c-4.6 20 .7 41.2 14.4 56.7l67.2 75.9 10.1 92.6C130 499.8 143.8 512 160 512c1.2 0 2.3-.1 3.5-.2 17.6-1.9 30.2-17.7 28.3-35.3l-10.1-92.8c-1.5-13-6.9-25.1-15.6-35l-43.3-49 17.6-70.3 6.8 20.4c4.1 12.5 11.9 23.4 24.5 32.6l51.1 32.5c4.6 2.9 12.1 4.6 17.2 5h160c5.1-.4 12.6-2.1 17.2-5l51.1-32.5c12.6-9.2 20.4-20 24.5-32.6l6.8-20.4 17.6 70.3-43.3 49c-8.7 9.9-14.1 22-15.6 35l-10.1 92.8c-1.9 17.6 10.8 33.4 28.3 35.3 1.2.1 2.3.2 3.5.2 16.1 0 30-12.1 31.8-28.5l10.1-92.6 67.2-75.9c13.6-15.5 19-36.7 14.4-56.7zM46.3 358.1l-44 110c-6.6 16.4 1.4 35 17.8 41.6 16.8 6.6 35.1-1.7 41.6-17.8l27.7-69.2-2-18.2-41.1-46.4z"/></symbol><symbol class="axsvg-inline--fa axfa-pepper-hot axfa-w-16" viewBox="0 0 512 512" id="fas-pepper-hot" xmlns="http://www.w3.org/2000/svg"><path fill="currentColor" d="M330.67 263.12V173.4l-52.75-24.22C219.44 218.76 197.58 400 56 400a56 56 0 0 0 0 112c212.64 0 370.65-122.87 419.18-210.34l-37.05-38.54zm131.09-128.37C493.92 74.91 477.18 26.48 458.62 3a8 8 0 0 0-11.93-.59l-22.9 23a8.06 8.06 0 0 0-.89 10.23c6.86 10.36 17.05 35.1-1.4 72.32A142.85 142.85 0 0 0 364.34 96c-28 0-54 8.54-76.34 22.59l74.67 34.29v78.24h89.09L506.44 288c3.26-12.62 5.56-25.63 5.56-39.31a154 154 0 0 0-50.24-113.94z"/></symbol><symbol class="aysvg-inline--fa ayfa-plane-departure ayfa-w-20" viewBox="0 0 640 512" id="fas-plane-departure" xmlns="http://www.w3.org/2000/svg"><path fill="currentColor" d="M624 448H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h608c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zM80.55 341.27c6.28 6.84 15.1 10.72 24.33 10.71l130.54-.18a65.62 65.62 0 0 0 29.64-7.12l290.96-147.65c26.74-13.57 50.71-32.94 67.02-58.31 18.31-28.48 20.3-49.09 13.07-63.65-7.21-14.57-24.74-25.27-58.25-27.45-29.85-1.94-59.54 5.92-86.28 19.48l-98.51 49.99-218.7-82.06a17.799 17.799 0 0 0-18-1.11L90.62 67.29c-10.67 5.41-13.25 19.65-5.17 28.53l156.22 98.1-103.21 52.38-72.35-36.47a17.804 17.804 0 0 0-16.07.02L9.91 230.22c-10.44 5.3-13.19 19.12-5.57 28.08l76.21 82.97z"/></symbol><symbol class="azsvg-inline--fa azfa-print azfa-w-16" viewBox="0 0 512 512" id="fas-print" xmlns="http://www.w3.org/2000/svg"><path fill="currentColor" d="M448 192V77.25c0-8.49-3.37-16.62-9.37-22.63L393.37 9.37c-6-6-14.14-9.37-22.63-9.37H96C78.33 0 64 14.33 64 32v160c-35.35 0-64 28.65-64 64v112c0 8.84 7.16 16 16 16h48v96c0 17.67 14.33 32 32 32h320c17.67 0 32-14.33 32-32v-96h48c8.84 0 16-7.16 16-16V256c0-35.35-28.65-64-64-64zm-64 256H128v-96h256v96zm0-224H128V64h192v48c0 8.84 7.16 16 16 16h48v96zm48 72c-13.25 0-24-10.75-24-24 0-13.26 10.75-24 24-24s24 10.74 24 24c0 13.25-10.75 24-24 24z"/></symbol><symbol class="basvg-inline--fa bafa-skating bafa-w-14" viewBox="0 0 448 512" id="fas-skating" xmlns="http://www.w3.org/2000/svg"><path fill="currentColor" d="M400 0c-26.5 0-48 21.5-48 48s21.5 48 48 48 48-21.5 48-48-21.5-48-48-48zm0 448c-8.8 0-16 7.2-16 16s-7.2 16-16 16h-96c-8.8 0-16 7.2-16 16s7.2 16 16 16h96c26.5 0 48-21.5 48-48 0-8.8-7.2-16-16-16zm-282.2 8.6c-6.2 6.2-16.4 6.3-22.6 0l-67.9-67.9c-6.2-6.2-16.4-6.2-22.6 0s-6.2 16.4 0 22.6l67.9 67.9c9.4 9.4 21.7 14 34 14s24.6-4.7 33.9-14c6.2-6.2 6.2-16.4 0-22.6s-16.4-6.3-22.7 0zm56.1-179.8l-93.7 93.7c-12.5 12.5-12.5 32.8 0 45.2 6.2 6.2 14.4 9.4 22.6 9.4s16.4-3.1 22.6-9.4l91.9-91.9-30.2-30.2c-5-5-9.4-10.7-13.2-16.8zM128 160h105.5l-20.1 17.2c-13.5 11.5-21.6 28.4-22.3 46.1-.7 17.8 6.1 35.2 18.7 47.7l78.2 78.2V432c0 17.7 14.3 32 32 32s32-14.3 32-32v-89.4c0-12.6-5.1-25-14.1-33.9l-61-61c.5-.4 1.2-.6 1.7-1.1l82.3-82.3c11.5-11.5 14.9-28.6 8.7-43.6-6.2-15-20.7-24.7-37-24.7H128c-17.7 0-32 14.3-32 32s14.3 32 32 32z"/></symbol><symbol class="bbsvg-inline--fa bbfa-skiing bbfa-w-16" viewBox="0 0 512 512" id="fas-skiing" xmlns="http://www.w3.org/2000/svg"><path fill="currentColor" d="M432 96c26.5 0 48-21.5 48-48S458.5 0 432 0s-48 21.5-48 48 21.5 48 48 48zm73 356.1c-9.4-9.4-24.6-9.4-33.9 0-12.1 12.1-30.5 15.4-45.1 8.7l-135.8-70.2 49.2-73.8c12.7-19 10.2-44.5-6-60.6L293 215.7l-107-53.1c-2.9 19.9 3.4 40 17.7 54.4l75.1 75.2-45.9 68.8L35 258.7c-11.7-6-26.2-1.5-32.3 10.3-6.1 11.8-1.5 26.3 10.3 32.3l391.9 202.5c11.9 5.5 24.5 8.1 37.1 8.1 23.2 0 46-9 63-26 9.3-9.3 9.3-24.5 0-33.8zM120 91.6l-11.5 22.5c14.4 7.3 31.2 4.9 42.8-4.8l47.2 23.4c-.1.1-.1.2-.2.3l114.5 56.8 32.4-13 6.4 19.1c4 12.1 12.6 22 24 27.7l58.1 29c15.9 7.9 35 1.5 42.9-14.3 7.9-15.8 1.5-35-14.3-42.9l-52.1-26.1-17.1-51.2c-8.1-24.2-40.9-56.6-84.5-39.2l-81.2 32.5-62.5-31c.3-14.5-7.2-28.6-20.9-35.6l-11.1 21.7h-.2l-34.4-7c-1.8-.4-3.7.2-5 1.7-1.9 2.2-1.7 5.5.5 7.4l26.2 23z"/></symbol><symbol class="bcsvg-inline--fa bcfa-skiing-nordic bcfa-w-18" viewBox="0 0 576 512" id="fas-skiing-nordic" xmlns="http://www.w3.org/2000/svg"><path fill="currentColor" d="M336 96c26.5 0 48-21.5 48-48S362.5 0 336 0s-48 21.5-48 48 21.5 48 48 48zm216 320c-13.2 0-24 10.7-24 24 0 13.2-10.8 24-24 24h-69.5L460 285.6c11.7-4.7 20.1-16.2 20.1-29.6 0-17.7-14.3-32-32-32h-44L378 170.8c-12.5-25.5-35.5-44.2-61.8-50.9L245 98.7c-28.3-6.8-57.8-.5-80.8 17.1l-39.7 30.4c-14 10.7-16.7 30.8-5.9 44.9.7.9 1.7 1.3 2.4 2.1L66.9 464H24c-13.2 0-24 10.7-24 24s10.8 24 24 24h480c39.7 0 72-32.3 72-72 0-13.2-10.8-24-24-24zm-260.5 48h-96.9l43.1-91-22-13c-12.1-7.2-21.9-16.9-29.5-27.8L123.7 464H99.5l52.3-261.4c4.1-1 8.1-2.9 11.7-5.6l39.7-30.4c7.7-5.9 17.4-8 25.3-6.1l14.7 4.4-37.5 87.4c-12.6 29.5-1.3 64 26.3 80.3l85 50.2-25.5 81.2zm110.6 0h-43.6l23.6-75.5c5.9-20.8-2.9-43.1-21.6-54.4L299.3 298l31.3-78.3 20.3 41.4c8 16.3 24.9 26.9 43.1 26.9h33.3l-25.2 176z"/></symbol><symbol class="bdsvg-inline--fa bdfa-sleigh bdfa-w-20" viewBox="0 0 640 512" id="fas-sleigh" xmlns="http://www.w3.org/2000/svg"><path fill="currentColor" d="M612.7 350.7l-9.3-7.4c-6.9-5.5-17-4.4-22.5 2.5l-10 12.5c-5.5 6.9-4.4 17 2.5 22.5l9.3 7.4c5.9 4.7 9.2 11.7 9.2 19.2 0 13.6-11 24.6-24.6 24.6H48c-8.8 0-16 7.2-16 16v16c0 8.8 7.2 16 16 16h516c39 0 73.7-29.3 75.9-68.3 1.4-23.8-8.7-46.3-27.2-61zM32 224c0 59.6 40.9 109.2 96 123.5V400h64v-48h192v48h64v-48c53 0 96-43 96-96v-96c17.7 0 32-14.3 32-32s-14.3-32-32-32h-96v64c0 35.3-28.7 64-64 64h-20.7c-65.8 0-125.9-37.2-155.3-96-29.4-58.8-89.6-96-155.3-96H32C14.3 32 0 46.3 0 64s14.3 32 32 32v128z"/></symbol><symbol class="besvg-inline--fa befa-smoking befa-w-20" viewBox="0 0 640 512" id="fas-smoking" xmlns="http://www.w3.org/2000/svg"><path fill="currentColor" d="M632 352h-48c-4.4 0-8 3.6-8 8v144c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8V360c0-4.4-3.6-8-8-8zM553.3 87.1c-5.7-3.8-9.3-10-9.3-16.8V8c0-4.4-3.6-8-8-8h-48c-4.4 0-8 3.6-8 8v62.3c0 22 10.2 43.4 28.6 55.4 42.2 27.3 67.4 73.8 67.4 124V280c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8v-30.3c0-65.5-32.4-126.2-86.7-162.6zM432 352H48c-26.5 0-48 21.5-48 48v64c0 26.5 21.5 48 48 48h384c8.8 0 16-7.2 16-16V368c0-8.8-7.2-16-16-16zm-32 112H224v-64h176v64zm87.7-322.4C463.8 125 448 99.3 448 70.3V8c0-4.4-3.6-8-8-8h-48c-4.4 0-8 3.6-8 8v66.4c0 43.7 24.6 81.6 60.3 106.7 22.4 15.7 35.7 41.2 35.7 68.6V280c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8v-30.3c0-43.3-21-83.4-56.3-108.1zM536 352h-48c-4.4 0-8 3.6-8 8v144c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8V360c0-4.4-3.6-8-8-8z"/></symbol><symbol class="bfsvg-inline--fa bffa-snowboarding bffa-w-16" viewBox="0 0 512 512" id="fas-snowboarding" xmlns="http://www.w3.org/2000/svg"><path fill="currentColor" d="M432 96c26.5 0 48-21.5 48-48S458.5 0 432 0s-48 21.5-48 48 21.5 48 48 48zm28.8 153.6c5.8 4.3 12.5 6.4 19.2 6.4 9.7 0 19.3-4.4 25.6-12.8 10.6-14.1 7.8-34.2-6.4-44.8l-111.4-83.5c-13.8-10.3-29.1-18.4-45.4-23.8l-63.7-21.2-26.1-52.1C244.7 2 225.5-4.4 209.7 3.5c-15.8 7.9-22.2 27.1-14.3 42.9l29.1 58.1c5.7 11.4 15.6 19.9 27.7 24l16.4 5.5-41.2 20.6c-21.8 10.9-35.4 32.8-35.4 57.2v53.1l-74.1 24.7c-16.8 5.6-25.8 23.7-20.2 40.5 1.7 5.2 4.9 9.4 8.7 12.9l-38.7-14.1c-9.7-3.5-17.4-10.6-21.8-20-5.6-12-19.9-17.2-31.9-11.6s-17.2 19.9-11.6 31.9c9.8 21 27.1 36.9 48.9 44.8l364.8 132.7c9.7 3.5 19.7 5.3 29.7 5.3 12.5 0 24.9-2.7 36.5-8.2 12-5.6 17.2-19.9 11.6-31.9S474 454.7 462 460.3c-9.3 4.4-19.8 4.8-29.5 1.3l-90.8-33.1c8.7-4.1 15.6-11.8 17.8-21.9l21.9-102c3.9-18.2-3.2-37.2-18.1-48.4l-52-39 66-30.5 83.5 62.9zm-144.4 51.7l-19.7 92c-1.5 7.1-.1 13.9 2.8 20l-169.4-61.6c2.7-.2 5.4-.4 8-1.3l85-28.4c19.6-6.5 32.8-24.8 32.8-45.5V256l60.5 45.3z"/></symbol><symbol class="bgsvg-inline--fa bgfa-solar-panel bgfa-w-20" viewBox="0 0 640 512" id="fas-solar-panel" xmlns="http://www.w3.org/2000/svg"><path fill="currentColor" d="M431.98 448.01l-47.97.05V416h-128v32.21l-47.98.05c-8.82.01-15.97 7.16-15.98 15.99l-.05 31.73c-.01 8.85 7.17 16.03 16.02 16.02l223.96-.26c8.82-.01 15.97-7.16 15.98-15.98l.04-31.73c.01-8.85-7.17-16.03-16.02-16.02zM585.2 26.74C582.58 11.31 568.99 0 553.06 0H86.93C71 0 57.41 11.31 54.79 26.74-3.32 369.16.04 348.08.03 352c-.03 17.32 14.29 32 32.6 32h574.74c18.23 0 32.51-14.56 32.59-31.79.02-4.08 3.35 16.95-54.76-325.47zM259.83 64h120.33l9.77 96H250.06l9.77-96zm-75.17 256H71.09L90.1 208h105.97l-11.41 112zm16.29-160H98.24l16.29-96h96.19l-9.77 96zm32.82 160l11.4-112h149.65l11.4 112H233.77zm195.5-256h96.19l16.29 96H439.04l-9.77-96zm26.06 256l-11.4-112H549.9l19.01 112H455.33z"/></symbol><symbol class="bhsvg-inline--fa bhfa-taxi bhfa-w-16" viewBox="0 0 512 512" id="fas-taxi" xmlns="http://www.w3.org/2000/svg"><path fill="currentColor" d="M462 241.64l-22-84.84c-9.6-35.2-41.6-60.8-76.8-60.8H352V64c0-17.67-14.33-32-32-32H192c-17.67 0-32 14.33-32 32v32h-11.2c-35.2 0-67.2 25.6-76.8 60.8l-22 84.84C21.41 248.04 0 273.47 0 304v48c0 23.63 12.95 44.04 32 55.12V448c0 17.67 14.33 32 32 32h32c17.67 0 32-14.33 32-32v-32h256v32c0 17.67 14.33 32 32 32h32c17.67 0 32-14.33 32-32v-40.88c19.05-11.09 32-31.5 32-55.12v-48c0-30.53-21.41-55.96-50-62.36zM96 352c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm20.55-112l17.2-66.36c2.23-8.16 9.59-13.64 15.06-13.64h214.4c5.47 0 12.83 5.48 14.85 12.86L395.45 240h-278.9zM416 352c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32z"/></symbol><symbol class="bisvg-inline--fa bifa-thermometer-three-quarters bifa-w-8" viewBox="0 0 256 512" id="fas-thermometer-three-quarters" xmlns="http://www.w3.org/2000/svg"><path fill="currentColor" d="M192 384c0 35.346-28.654 64-64 64-35.346 0-64-28.654-64-64 0-23.685 12.876-44.349 32-55.417V160c0-17.673 14.327-32 32-32s32 14.327 32 32v168.583c19.124 11.068 32 31.732 32 55.417zm32-84.653c19.912 22.563 32 52.194 32 84.653 0 70.696-57.303 128-128 128-.299 0-.609-.001-.909-.003C56.789 511.509-.357 453.636.002 383.333.166 351.135 12.225 321.755 32 299.347V96c0-53.019 42.981-96 96-96s96 42.981 96 96v203.347zM208 384c0-34.339-19.37-52.19-32-66.502V96c0-26.467-21.533-48-48-48S80 69.533 80 96v221.498c-12.732 14.428-31.825 32.1-31.999 66.08-.224 43.876 35.563 80.116 79.423 80.42L128 464c44.112 0 80-35.888 80-80z"/></symbol><symbol class="bjsvg-inline--fa bjfa-volume-up bjfa-w-18" viewBox="0 0 576 512" id="fas-volume-up" xmlns="http://www.w3.org/2000/svg"><path fill="currentColor" d="M215.03 71.05L126.06 160H24c-13.26 0-24 10.74-24 24v144c0 13.25 10.74 24 24 24h102.06l88.97 88.95c15.03 15.03 40.97 4.47 40.97-16.97V88.02c0-21.46-25.96-31.98-40.97-16.97zm233.32-51.08c-11.17-7.33-26.18-4.24-33.51 6.95-7.34 11.17-4.22 26.18 6.95 33.51 66.27 43.49 105.82 116.6 105.82 195.58 0 78.98-39.55 152.09-105.82 195.58-11.17 7.32-14.29 22.34-6.95 33.5 7.04 10.71 21.93 14.56 33.51 6.95C528.27 439.58 576 351.33 576 256S528.27 72.43 448.35 19.97zM480 256c0-63.53-32.06-121.94-85.77-156.24-11.19-7.14-26.03-3.82-33.12 7.46s-3.78 26.21 7.41 33.36C408.27 165.97 432 209.11 432 256s-23.73 90.03-63.48 115.42c-11.19 7.14-14.5 22.07-7.41 33.36 6.51 10.36 21.12 15.14 33.12 7.46C447.94 377.94 480 319.54 480 256zm-141.77-76.87c-11.58-6.33-26.19-2.16-32.61 9.45-6.39 11.61-2.16 26.2 9.45 32.61C327.98 228.28 336 241.63 336 256c0 14.38-8.02 27.72-20.92 34.81-11.61 6.41-15.84 21-9.45 32.61 6.43 11.66 21.05 15.8 32.61 9.45 28.23-15.55 45.77-45 45.77-76.88s-17.54-61.32-45.78-76.86z"/></symbol><symbol class="bksvg-inline--fa bkfa-warehouse bkfa-w-20" viewBox="0 0 640 512" id="fas-warehouse" xmlns="http://www.w3.org/2000/svg"><path fill="currentColor" d="M504 352H136.4c-4.4 0-8 3.6-8 8l-.1 48c0 4.4 3.6 8 8 8H504c4.4 0 8-3.6 8-8v-48c0-4.4-3.6-8-8-8zm0 96H136.1c-4.4 0-8 3.6-8 8l-.1 48c0 4.4 3.6 8 8 8h368c4.4 0 8-3.6 8-8v-48c0-4.4-3.6-8-8-8zm0-192H136.6c-4.4 0-8 3.6-8 8l-.1 48c0 4.4 3.6 8 8 8H504c4.4 0 8-3.6 8-8v-48c0-4.4-3.6-8-8-8zm106.5-139L338.4 3.7a48.15 48.15 0 0 0-36.9 0L29.5 117C11.7 124.5 0 141.9 0 161.3V504c0 4.4 3.6 8 8 8h80c4.4 0 8-3.6 8-8V256c0-17.6 14.6-32 32.6-32h382.8c18 0 32.6 14.4 32.6 32v248c0 4.4 3.6 8 8 8h80c4.4 0 8-3.6 8-8V161.3c0-19.4-11.7-36.8-29.5-44.3z"/></symbol><symbol class="blsvg-inline--fa blfa-wifi blfa-w-20" viewBox="0 0 640 512" id="fas-wifi" xmlns="http://www.w3.org/2000/svg"><path fill="currentColor" d="M634.91 154.88C457.74-8.99 182.19-8.93 5.09 154.88c-6.66 6.16-6.79 16.59-.35 22.98l34.24 33.97c6.14 6.1 16.02 6.23 22.4.38 145.92-133.68 371.3-133.71 517.25 0 6.38 5.85 16.26 5.71 22.4-.38l34.24-33.97c6.43-6.39 6.3-16.82-.36-22.98zM320 352c-35.35 0-64 28.65-64 64s28.65 64 64 64 64-28.65 64-64-28.65-64-64-64zm202.67-83.59c-115.26-101.93-290.21-101.82-405.34 0-6.9 6.1-7.12 16.69-.57 23.15l34.44 33.99c6 5.92 15.66 6.32 22.05.8 83.95-72.57 209.74-72.41 293.49 0 6.39 5.52 16.05 5.13 22.05-.8l34.44-33.99c6.56-6.46 6.33-17.06-.56-23.15z"/></symbol></svg>
\ No newline at end of file
index 4982dfbbe5466aa4dbd766e40a4905a6e7ba0969..21f4498793dee9c754ad74edb41ac2debbea032e 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 60 60" id="iD-boundary" xmlns="http://www.w3.org/2000/svg"><path d="M30.5 51.5l-11-11 21-21 11 11z" fill="#58A9ED"/><path d="M19.5 40.5l-11-11 21-21 11 11z" fill="#8CD05F"/><path d="M20 41l10.5-10.5L41 20" fill="#FFF"/><path d="M20 41l10.5-10.5L41 20" stroke="#444" stroke-dasharray="2,1" fill="none"/><path d="M23 40a3 3 0 1 1-6 0 3 3 0 0 1 6 0z" fill="#444"/><path d="M22 40a2 2 0 1 1-3.999.001A2 2 0 0 1 22 40z" fill="#FFF"/><path d="M43 20a3 3 0 1 1-6 0 3 3 0 0 1 6 0z" fill="#444"/><path d="M42 20a2 2 0 1 1-3.999.001A2 2 0 0 1 42 20z" fill="#FFF"/><path d="M33 30a3 3 0 1 1-6 0 3 3 0 0 1 6 0z" fill="#444"/><path d="M32 30a2 2 0 1 1-3.999.001A2 2 0 0 1 32 30z" fill="#FFF"/></symbol><symbol viewBox="0 0 60 60" id="iD-category-path" xmlns="http://www.w3.org/2000/svg"><path d="M22 41l3-11 3-11h4l3 11 3 11z" fill="currentColor"/></symbol><symbol viewBox="0 0 60 60" id="iD-category-rail" xmlns="http://www.w3.org/2000/svg"><path d="M23.5 18L22 19l-.469 2H18.25c-.554 0-.866.463-1 1L17 23c-.134.537.446 1 1 1h24c.554 0 1.134-.463 1-1l-.25-1c-.134-.537-.446-1-1-1h-2.781l-.469-2-1.5-1-1 1 .469 2H24.031l.469-2-1-1zm-2 4a.5.5 0 1 1 0 1 .5.5 0 0 1 0-1zm17 0a.5.5 0 1 1 0 1 .5.5 0 0 1 0-1zm-17.938 3l-.468 2H17.25c-.554 0-.866.463-1 1L16 29c-.134.537.446 1 1 1h26c.554 0 1.134-.463 1-1l-.25-1c-.134-.537-.446-1-1-1h-2.344l-.468-2h-2.5l.468 2H22.594l.468-2h-2.5zm-.062 3a.5.5 0 1 1 0 1 .5.5 0 0 1 0-1zm19 0a.5.5 0 1 1 0 1 .5.5 0 0 1 0-1zm-20.344 3l-.468 2H16.25c-.554 0-.866.463-1 1L15 35c-.134.537.446 1 1 1h28c.554 0 1.134-.463 1-1l-.25-1c-.134-.537-.446-1-1-1h-1.938l-.468-2h-2.5l.468 2H21.188l.468-2h-2.5zm.344 3a.5.5 0 1 1 0 1 .5.5 0 0 1 0-1zm21 0a.5.5 0 1 1 0 1 .5.5 0 0 1 0-1zm-22.781 3L17 40l1.5 1 1-1 .719-3h-2.5zm22.562 0L41 40l1 1 1.5-1-.719-3h-2.5z" fill="#989898"/></symbol><symbol viewBox="0 0 60 60" id="iD-category-roads" xmlns="http://www.w3.org/2000/svg"><path d="M22.5 20l-2.875 6H18l-1 1v2h1.406L18 30v6l1 1h5l2 1h8l2-1h5l1-1v-6l-.406-1H43v-2l-1-1h-1.625L37.5 20zm1 3h13l1.5 4-1 1H23l-1-1zM21 31h3l1 2v1h-4l-1-1v-1zm15 0h3l1 1v1l-1 1h-4v-1zm-17 7v2l1 1h3l1-1v-2zm17 0v2l1 1h3l1-1v-2z" fill="#989898"/></symbol><symbol viewBox="0 0 60 60" id="iD-category-utility" xmlns="http://www.w3.org/2000/svg"><svg y="7"><path d="M20 10v1h2v-1h-2zm4 0v1h2v-1h-2zm10 0v1h2v-1h-2zm4 0v1h2v-1h-2zm-17.688 5c-.665 3.533-3.045 5.5-5.312 5.5h-1v1h1a5.462 5.462 0 0 0 3-.906v.906h1c2.879 0 5.615-2.478 6.312-6.5h-1c-.665 3.533-3.045 5.5-5.312 5.5h-.875c1.561-1.08 2.76-2.991 3.187-5.5h-1zm14.376 0c.697 4.022 3.433 6.5 6.312 6.5h1v-.906a5.462 5.462 0 0 0 3 .906h1v-1h-1c-2.267 0-4.647-1.967-5.312-5.5h-1c.427 2.509 1.626 4.42 3.187 5.5H41c-2.267 0-4.647-1.967-5.312-5.5h-1z" fill="#989898"/><path d="M28 10v2h-9v2h9v22h4V14h9v-2h-9v-2h-4z" fill="#989898"/></svg></symbol><symbol viewBox="0 0 60 60" id="iD-category-water" xmlns="http://www.w3.org/2000/svg"><path d="M16.762 41s-.537-1.846-.345-2.75c.221-1.047 1.654-2.75 1.654-2.75s1.434-1.703 1.655-2.75c.191-.904-.345-2.75-.345-2.75s-.537-1.846-.345-2.75c.221-1.047 1.654-2.75 1.654-2.75s1.434-1.703 1.655-2.75C22.536 20.846 22 19 22 19h16.5s1.433 1.703 1.655 2.75c.191.904-.346 2.75-.346 2.75s-.536 1.846-.345 2.75c.222 1.047 1.655 2.75 1.655 2.75s1.433 1.703 1.655 2.75c.191.904-.346 2.75-.346 2.75s-.536 1.846-.345 2.75c.222 1.047 1.655 2.75 1.655 2.75z" fill="currentColor"/><path d="M17.966 32.759c-.215.8-.821 1.333-1.354 1.19-.534-.143-.792-.908-.578-1.708.214-.8.821-1.333 1.354-1.19.534.143.792.908.578 1.708zm1.833-10.009c.552-.957.418-2.068-.299-2.482-.717-.414-1.747.025-2.299.982-.552.957-.418 2.068.299 2.482.717.414 1.747-.025 2.299-.982zm21.623 3.958c-.214-.8.045-1.565.578-1.708.533-.143 1.14.39 1.354 1.19.215.8-.044 1.565-.578 1.708-.533.143-1.139-.39-1.354-1.19zm2.877 11.042c-.552-.957-.418-2.068.299-2.482.718-.414 1.747.025 2.299.982.552.957.419 2.068-.299 2.482-.717.414-1.747-.025-2.299-.982z" fill="currentColor" opacity=".5"/></symbol><symbol viewBox="0 0 60 60" id="iD-ferry-line" xmlns="http://www.w3.org/2000/svg"><path d="M25.666 26.974a5.991 5.991 0 0 1 3.695 1.339l.519.459h.1l.619-.559a5.773 5.773 0 0 1 6.871-.36l4.514-8.868-2.996-1.997v-7.09a3.077 3.077 0 0 0-2.996-2.897h-.999a1.878 1.878 0 0 0-1.997-1.997h-5.992a1.877 1.877 0 0 0-1.997 1.997h-.999a3.077 3.077 0 0 0-2.996 2.897v7.09l-2.996 1.997 4.494 9.048a5.853 5.853 0 0 1 3.156-1.059zM23.009 9.898a.938.938 0 0 1 .976-.9l.023.001h11.984a.94.94 0 0 1 .999.998v5.992L30 11.995l-6.991 3.894V9.898zm19.973 21.071v1.997a2.001 2.001 0 0 0-1.358.679 4.294 4.294 0 0 1-1.997 1.199 3.815 3.815 0 0 1-3.535-.739l-.779-.699a1.557 1.557 0 0 0-2.197 0c-.28.239-.54.499-.839.739a3.836 3.836 0 0 1-4.953-.14l-.779-.699c-.572-.5-1.426-.5-1.998 0-.379.3-.719.639-1.098.939a3.816 3.816 0 0 1-4.694-.12l-.619-.539a1.878 1.878 0 0 0-1.118-.62v-1.997a2.51 2.51 0 0 1 1.497.28c.556.344 1.084.731 1.578 1.158.41.447 1.028.637 1.618.499a1.85 1.85 0 0 0 .619-.319c.32-.24.58-.519.899-.779a3.835 3.835 0 0 1 4.894 0c.319.26.619.559.938.819.572.5 1.426.5 1.998 0 .319-.26.619-.559.938-.819a3.836 3.836 0 0 1 4.914 0c.299.26.579.539.878.779.572.5 1.426.5 1.998 0l.938-.819a3.577 3.577 0 0 1 2.257-.799zM49.5 39a2.5 2.5 0 1 1 0 5c-.907.004-1.373-.402-1.971-1H12.471c-.493.678-1.174.92-1.971 1a2.5 2.5 0 1 1 0-5c.907-.004 1.373.402 1.971 1h35.058c.493-.678 1.174-.92 1.971-1z" fill="currentColor"/><path d="M16 41v1h-3.05l.05-.5-.05-.5H16zm11 0h-5v1h5v-1zm11 0h-5v1h5v-1zm9.05 0H44v1h3.05l-.05-.5.05-.5z" fill="inherit"/><path d="M51 41.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 51 41.5zM12 41.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 12 41.5z" fill="#FFF"/></symbol><symbol viewBox="0 0 200 80" id="iD-graphic-areas" xmlns="http://www.w3.org/2000/svg"><path d="M0 0h200v80H0z" fill="#FFF"/><path d="M128.955 27.415c-2.429 6.206-16.526 10.008-31.484 8.491-14.958-1.516-25.111-7.777-22.676-13.982 2.434-6.203 16.529-10.003 31.483-8.487 14.953 1.516 25.106 7.774 22.677 13.978z" fill="#7092FF"/><path d="M53 36L18 46v-6l35-10zM54 30.5v6L83 51v-6L54 30.5z" fill="#A9A9A9"/><path d="M173.5 28c-1.229 0-2.228.893-2.438 2.062A2.5 2.5 0 0 0 168 32.5c0 .639.23 1.214.625 1.656A2.514 2.514 0 0 0 167 36.5c0 1.381 1 2.5 2.5 2.5h.5l2 3.5v1.437c-1.479-.431-2.886-.88-4-1.437-5-2.5-9.434-6.983-15-7.5-6.041-.561-11.667 3.333-17.5 5-5.833 1.667-16.939 1.959-17.5 8l30 15 35-10c.326-3.505-3.708-6.987-8-8.219V42.5l2-3.5h.719C179 39.014 180 37.805 180 36.5c0-1.07-.68-1.987-1.625-2.344A2.46 2.46 0 0 0 179 32.5a2.5 2.5 0 0 0-3.062-2.438c-.21-1.169-1.209-2.062-2.438-2.062zM172 39h3l-1 2h-1z" fill="#8CD05F"/><path d="M18.5 46.5l30 15v-6l-30-15z" fill="#C1C1C1"/><path d="M18.5 46.5l30 15v-6l-30-15z" stroke="#FFF" stroke-width="2" fill="none"/><path d="M83.5 51.5l-35 10v-6l35-10z" fill="#C1C1C1"/><path d="M83.5 51.5l-35 10v-6l35-10z" stroke="#FFF" stroke-width="2" fill="none"/><path d="M18 46l30 15v-6L18 40zM83 51L48 61v-6l35-10z" fill="#A9A9A9"/><path d="M107 17s2.636 3.529 5.438 3.969C107.96 20.816 107 19 107 19s-.96 1.816-5.438 1.969C104.364 20.529 107 17 107 17zM93 19s2.636 3.529 5.438 3.969C93.96 22.816 93 21 93 21s-.96 1.816-5.438 1.969C90.364 22.529 93 19 93 19zM103 24s2.636 3.529 5.438 3.969C103.96 27.816 103 26 103 26s-.96 1.816-5.438 1.969C100.364 27.529 103 24 103 24z" fill="#FFF"/></symbol><symbol viewBox="0 0 200 80" id="iD-graphic-buildings" xmlns="http://www.w3.org/2000/svg"><path d="M0 0h200v80H0z" fill="#FFF"/><path d="M20 58.544l24.051 10.127V47.152L20 37.025z" fill="#E16E5F"/><path d="M70 57.911l-25.949 10.76V47.152l13.291-12.025L70 37.025z" fill="#9F655C"/><path d="M20 37.025L34.557 25l22.785 10.127-13.291 12.025L20 37.025z" fill="#695757"/><path d="M70 37.025L34.557 25l22.785 10.127" fill="#4B4442"/><g fill="#695757"><path d="M29.494 62.342v-6.329l4.43 1.898v6.329l-4.43-1.898zM37.089 65.506v-6.329l4.43 1.899v6.329l-4.43-1.899zM21.899 59.177v-6.329l4.43 1.899v6.329l-4.43-1.899zM37.089 54.114v-6.329l4.43 1.899v6.329l-4.43-1.899zM29.494 50.949V44.62l4.43 1.899v6.329l-4.43-1.899zM21.899 47.785v-6.329l4.43 1.898v6.33l-4.43-1.899z"/></g><g fill="#554646"><path d="M52.278 64.873v-6.329l-4.43 1.899v6.329l4.43-1.899zM52.278 53.481v-6.329l-4.43 1.899v6.329l4.43-1.899zM59.873 61.709V55.38l-4.43 1.898v6.33l4.43-1.899zM59.873 50.316v-6.329l-4.43 1.899v6.329l4.43-1.899zM67.468 58.544v-6.329l-4.43 1.899v6.329l4.43-1.899zM67.468 47.152v-6.329l-4.43 1.899v6.329l4.43-1.899z"/></g><g><path d="M75.5 36.544l24.051 10.127V25.152L75.5 15.025z" fill="#E16E5F"/><path d="M125.5 35.911l-25.949 10.76V25.152l13.291-12.025 12.658 1.898z" fill="#9F655C"/><path d="M75.5 15.025L90.057 3l22.785 10.127-13.291 12.025L75.5 15.025z" fill="#695757"/><path d="M125.5 15.025L90.057 3l22.785 10.127" fill="#4B4442"/><g fill="#695757"><path d="M84.994 40.342v-6.329l4.43 1.898v6.329l-4.43-1.898zM92.589 43.506v-6.329l4.43 1.899v6.329l-4.43-1.899zM77.399 37.177v-6.329l4.43 1.899v6.329l-4.43-1.899zM92.589 32.114v-6.329l4.43 1.899v6.329l-4.43-1.899zM84.994 28.949V22.62l4.43 1.899v6.329l-4.43-1.899zM77.399 25.785v-6.329l4.43 1.898v6.33l-4.43-1.899z"/></g><g fill="#554646"><path d="M107.778 42.873v-6.329l-4.43 1.899v6.329l4.43-1.899zM107.778 31.481v-6.329l-4.43 1.899v6.329l4.43-1.899zM115.373 39.709V33.38l-4.43 1.898v6.33l4.43-1.899zM115.373 28.316v-6.329l-4.43 1.899v6.329l4.43-1.899zM122.968 36.544v-6.329l-4.43 1.899v6.329l4.43-1.899zM122.968 25.152v-6.329l-4.43 1.899v6.329l4.43-1.899z"/></g></g><g><path d="M130.5 58.544l24.051 10.127V47.152L130.5 37.025z" fill="#E16E5F"/><path d="M180.5 57.911l-25.949 10.76V47.152l13.291-12.025 12.658 1.898z" fill="#9F655C"/><path d="M130.5 37.025L145.057 25l22.785 10.127-13.291 12.025L130.5 37.025z" fill="#695757"/><path d="M180.5 37.025L145.057 25l22.785 10.127" fill="#4B4442"/><g fill="#695757"><path d="M139.994 62.342v-6.329l4.43 1.898v6.329l-4.43-1.898zM147.589 65.506v-6.329l4.43 1.899v6.329l-4.43-1.899zM132.399 59.177v-6.329l4.43 1.899v6.329l-4.43-1.899zM147.589 54.114v-6.329l4.43 1.899v6.329l-4.43-1.899zM139.994 50.949V44.62l4.43 1.899v6.329l-4.43-1.899zM132.399 47.785v-6.329l4.43 1.898v6.33l-4.43-1.899z"/></g><g fill="#554646"><path d="M162.778 64.873v-6.329l-4.43 1.899v6.329l4.43-1.899zM162.778 53.481v-6.329l-4.43 1.899v6.329l4.43-1.899zM170.373 61.709V55.38l-4.43 1.898v6.33l4.43-1.899zM170.373 50.316v-6.329l-4.43 1.899v6.329l4.43-1.899zM177.968 58.544v-6.329l-4.43 1.899v6.329l4.43-1.899zM177.968 47.152v-6.329l-4.43 1.899v6.329l4.43-1.899z"/></g></g></symbol><symbol viewBox="0 0 200 80" id="iD-graphic-lines" xmlns="http://www.w3.org/2000/svg"><path d="M0 0h200v80H0z" fill="#FFF"/><path d="M140 50h40v3h-40zM146.762 46s-.536-1.846-.345-2.75c.221-1.047 1.654-2.75 1.654-2.75s1.434-1.703 1.655-2.75c.191-.904-.345-2.75-.345-2.75s-.536-1.846-.345-2.75c.221-1.047 1.654-2.75 1.654-2.75s1.434-1.703 1.655-2.75C152.536 25.846 152 24 152 24h16.5s1.433 1.703 1.655 2.75c.191.904-.345 2.75-.345 2.75s-.537 1.846-.346 2.75c.222 1.047 1.655 2.75 1.655 2.75s1.433 1.703 1.655 2.75c.191.904-.345 2.75-.345 2.75s-.537 1.846-.346 2.75c.222 1.047 1.655 2.75 1.655 2.75z" fill="#60D4DE"/><path d="M147.966 37.759c-.214.8-.821 1.333-1.354 1.19-.534-.143-.792-.908-.578-1.708.214-.8.821-1.333 1.354-1.19.534.143.792.908.578 1.708zM149.799 27.75c-.552.957-1.582 1.396-2.299.982-.717-.414-.851-1.525-.299-2.482.552-.957 1.582-1.396 2.299-.982.717.414.851 1.525.299 2.482zM171.422 31.708c.215.8.821 1.333 1.354 1.19.534-.143.793-.908.578-1.708-.214-.8-.821-1.333-1.354-1.19-.533.143-.792.908-.578 1.708zM174.299 42.75c.552.957 1.582 1.396 2.299.982.718-.414.851-1.525.299-2.482-.552-.957-1.581-1.396-2.299-.982-.717.414-.851 1.525-.299 2.482z" fill="#60D4DE" opacity=".5"/><path d="M182 51.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0z" fill="#60D4DE"/><path d="M181 51.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 181 51.5z" fill="#FFF"/><path d="M143 51.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0z" fill="#60D4DE"/><path d="M142 51.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 142 51.5z" fill="#FFF"/><g><path d="M93.5 23L92 24l-.469 2H88.25c-.554 0-.866.463-1 1L87 28c-.134.537.446 1 1 1h24c.554 0 1.134-.463 1-1l-.25-1c-.134-.537-.446-1-1-1h-2.781l-.469-2-1.5-1-1 1 .469 2H94.031l.469-2-1-1zm-2 4a.5.5 0 1 1 0 1 .5.5 0 0 1 0-1zm17 0a.5.5 0 1 1 0 1 .5.5 0 0 1 0-1zm-17.938 3l-.468 2H87.25c-.554 0-.866.463-1 1L86 34c-.134.537.446 1 1 1h26c.554 0 1.134-.463 1-1l-.25-1c-.134-.537-.446-1-1-1h-2.344l-.468-2h-2.5l.468 2H92.594l.468-2h-2.5zm-.062 3a.5.5 0 1 1 0 1 .5.5 0 0 1 0-1zm19 0a.5.5 0 1 1 0 1 .5.5 0 0 1 0-1zm-20.344 3l-.468 2H86.25c-.554 0-.866.463-1 1L85 40c-.134.537.446 1 1 1h28c.554 0 1.134-.463 1-1l-.25-1c-.134-.537-.446-1-1-1h-1.938l-.468-2h-2.5l.468 2H91.188l.468-2h-2.5zm.344 3a.5.5 0 1 1 0 1 .5.5 0 0 1 0-1zm21 0a.5.5 0 1 1 0 1 .5.5 0 0 1 0-1zm-22.781 3L87 45l1.5 1 1-1 .719-3h-2.5zm22.562 0l.719 3 1 1 1.5-1-.719-3h-2.5zM80 50h40v3H80z" fill="#A9A9A9"/><path d="M114 51h5v1h-5zM103 51h5v1h-5zM92 51h5v1h-5zM81 51h5v1h-5z" fill="#FFF"/><path d="M122 51.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0z" fill="#A9A9A9"/><path d="M121 51.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 121 51.5z" fill="#FFF"/><path d="M83 51.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0z" fill="#A9A9A9"/><path d="M82 51.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 82 51.5z" fill="#FFF"/></g><g><path d="M32.5 25l-2.875 6H28l-1 1v2h1.406L28 35v6l1 1h5l2 1h8l2-1h5l1-1v-6l-.406-1H53v-2l-1-1h-1.625L47.5 25zm1 3h13l1.5 4-1 1H33l-1-1zM31 36h3l1 2v1h-4l-1-1v-1zm15 0h3l1 1v1l-1 1h-4v-1zm-17 7v2l1 1h3l1-1v-2zm17 0v2l1 1h3l1-1v-2z" fill="#A9A9A9"/><path d="M21 51h38v1H21z" fill="#7092FF"/><path d="M20.5 50a2.5 2.5 0 1 0 0 5h39a2.5 2.5 0 1 0 0-5z" fill="#A9A9A9"/><path d="M22.5 51c.31.416.5.941.5 1.5s-.19 1.084-.5 1.5h35c-.31-.416-.5-.941-.5-1.5s.19-1.084.5-1.5h-35zM22 52.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 22 52.5zM61 52.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 61 52.5z" fill="#FFF"/></g></symbol><symbol viewBox="0 0 200 80" id="iD-graphic-points" xmlns="http://www.w3.org/2000/svg"><path d="M0 0h200v80H0z" fill="#FFF"/><path d="M170 31c-8.284 0-15 6.716-15 15 0 8.284 15 21 15 21s15-12.716 15-21-6.716-15-15-15zM100 31c-8.284 0-15 6.716-15 15 0 8.284 15 21 15 21s15-12.716 15-21-6.716-15-15-15zM30 31c-8.284 0-15 6.716-15 15 0 8.284 15 21 15 21s15-12.716 15-21-6.716-15-15-15zM135 11c-8.284 0-15 6.716-15 15 0 8.284 15 21 15 21s15-12.716 15-21-6.716-15-15-15zM65 11c-8.284 0-15 6.716-15 15 0 8.284 15 21 15 21s15-12.716 15-21-6.716-15-15-15z" fill="#7092FF"/><path d="M162 38c-.471 0-1 .5-1 1v7c0 2.216 1 5 5 5 .359 0 .686-.017 1-.062V48h-4s.5-2 3-2c.5 0 .697.075 1 .188V44c0-.916.365-1.682 1-2 1-.5 1.404-.298 2 0l1 .5V39c0-.5-.529-1-1-1-1 0-2 1-4 1s-3-1-4-1zm1.75 3.5a1.25 1.25 0 1 1 0 2.5 1.25 1.25 0 0 1 0-2.5zM169 43c-.471 0-1 .5-1 1v7c0 2.216 1 5 5 5s5-2.784 5-5v-7c0-.5-.529-1-1-1-1 0-2 1-4 1s-3-1-4-1zm1.75 3.5a1.25 1.25 0 1 1 0 2.5 1.25 1.25 0 0 1 0-2.5zm4.5 0a1.25 1.25 0 1 1 0 2.5 1.25 1.25 0 0 1 0-2.5zM170 52h6s-.5 2-3 2-3-2-3-2zM98 38c-3 0-6 1.5-6 4v2h17v-2c0-2.5-3-4-6-4zm.5 1a.499.499 0 1 1 0 1 .499.499 0 1 1 0-1zm4 0a.499.499 0 1 1 0 1 .499.499 0 1 1 0-1zm-6 2a.499.499 0 1 1 0 1 .499.499 0 1 1 0-1zm4 0a.499.499 0 1 1 0 1 .499.499 0 1 1 0-1zm4 0a.499.499 0 1 1 0 1 .499.499 0 1 1 0-1zM92 45c-.5 0-1 .5-1 1s.5 1 1 1h17c.5 0 1-.5 1-1s-.5-1-1-1zm0 3v1c0 1 1 2 2 2h13c1 0 2-1 2-2v-1zM24 36c-.554 0-1 .446-1 1v16c0 .5.5 1 1 1h9c.5 0 1-.5 1-1v-5h.5c.5 0 .5.5.5.5v2c0 1 .5 1.5 1.5 1.5s1.5-.5 1.5-1.5V45c0-1-2-2-2-3v-3h-1l-1-1v-1c0-.554-.446-1-1-1zm1 2h7v4h-7zm9 3h1v1.5c0 1 2 2 2 3v5c0 .5-.5.5-.5.5s-.5 0-.5-.5V48c0-.5-.5-1-1-1h-1zM134 18c-.554 0-1 .446-1 1v4h-4c-.554 0-1 .446-1 1v3c0 .554.446 1 1 1h4v4c0 .554.446 1 1 1h3c.554 0 1-.446 1-1v-4h4c.554 0 1-.446 1-1v-3c0-.554-.446-1-1-1h-4v-4c0-.554-.446-1-1-1zM59 18c-.554 0-1 .446-1 1v9c0 .554.446 1 1 1h11c.554 0 1-.446 1-1v-1h.5c.5 0 .5-.5.5-.5V26h1c1 0 2-1 2-2v-3c0-.5-.5-1-1-1h-3v-1c0-.554-.446-1-1-1zm12 3h2.5c.5 0 .5.5.5.5V24c0 .5-.5 1-1 1h-2zm-15 9l1 1 1 1h13l1-1 1-1z" fill="#FFF"/></symbol><symbol viewBox="0 0 60 60" id="iD-highway-bridleway" xmlns="http://www.w3.org/2000/svg"><path d="M29.5 6a2.5 2.5 0 1 0 0 5 2.5 2.5 0 0 0 0-5zM43 9.156L40 13l-4.281 5H33l-1-.344V13c0-.554-.446-1-1-1h-3c-.554 0-1 .446-1 1v4h-6l-4 4-1 6h2l1-2 1-3 1-1.344v3.5L19 28.5V34c0 1 0 2 1.5 2s1.5-1 1.5-2v-5.5l1.156-2.5H25v2.5l2.5 6c.251.935.905 1.5 1.75 1.5.809 0 1.096-.876.75-2l-2-5.5v-2.312L31 27h4v7c0 .5 0 2 1.5 2s1.5-1.5 1.5-2v-7l5-9h2l2 1 1-1v-2l-4-3h-1zM27 18h3l3 3v4l-1 1-1-1v-3l-4-3zM49.5 39a2.5 2.5 0 1 1 0 5c-.907.004-1.373-.402-1.971-1H12.471c-.493.678-1.174.92-1.971 1a2.5 2.5 0 1 1 0-5c.907-.004 1.373.402 1.971 1h35.058c.493-.678 1.174-.92 1.971-1z" fill="currentColor"/><path d="M16 41v1h-3.05l.05-.5-.05-.5H16zm11 0h-5v1h5v-1zm11 0h-5v1h5v-1zm9.05 0H44v1h3.05l-.05-.5.05-.5z" fill="inherit"/><path d="M51 41.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 51 41.5zM12 41.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 12 41.5z" fill="#FFF"/></symbol><symbol viewBox="0 0 60 60" id="iD-highway-bus-guideway" xmlns="http://www.w3.org/2000/svg"><path d="M49.5 39a2.5 2.5 0 1 1 0 5c-.93.002-1.387-.416-2-1.029V43h-35v-.029c-.504.692-1.184.947-2 1.029a2.5 2.5 0 1 1 0-5c.93-.002 1.387.416 2 1.029V40h35v.029c.504-.693 1.184-.947 2-1.029z" fill="inherit"/><path d="M47.05 41l-.05.5.05.5h-34.1l.05-.5-.05-.5h34.1z" fill="currentColor"/><path d="M51 41.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 51 41.5zM12 41.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 12 41.5z" fill="#FFF"/><path d="M24 11c-2.273 0-5 1.239-5 4.577V31s0 1.667 1.667 1.667v1.666s0 1.667 1.666 1.667C24 36 24 34.333 24 34.333v-1.666h11.667v1.666s0 1.667 1.666 1.667C39 36 39 34.333 39 34.333v-1.666s1.667 0 1.667-1.667V15.577c0-3.409-2.06-4.577-4.333-4.577H24zm.417 2.5H35.25a.416.416 0 1 1 0 .833H24.417a.416.416 0 1 1 0-.833zM22.333 16h15C39 16 39 17.611 39 17.611v5.056s0 1.666-1.667 1.666h-15c-1.666 0-1.666-1.666-1.666-1.666v-5s0-1.667 1.666-1.667zm0 11.667A1.666 1.666 0 1 1 22.334 31a1.666 1.666 0 0 1-.001-3.333zm15 0A1.666 1.666 0 1 1 37.334 31a1.666 1.666 0 0 1-.001-3.333zM44 33v1.5l5 1.875h4zM16 33v1.5l-5 1.875H7z" fill="#989898"/></symbol><symbol viewBox="0 0 60 60" id="iD-highway-construction" xmlns="http://www.w3.org/2000/svg"><path d="M10.5 39a2.5 2.5 0 1 0 0 5h39a2.5 2.5 0 1 0 0-5z" fill="currentColor"/><path d="M16.5 39.5v4h-3v-4h3zm6 0h-3v4h3v-4zm6 0h-3v4h3v-4zm6 0h-3v4h3v-4zm6 0h-3v4h3v-4zm6 0h-3v4h3v-4z" fill="inherit"/><path d="M12 41.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 12 41.5zM51 41.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 51 41.5z" fill="#fff"/><path d="M42.071 11.858H17.929a2.194 2.194 0 0 0-2.195 2.194v13.169c0 1.212.983 2.195 2.195 2.195h2.195v5.487a1.097 1.097 0 1 0 2.194 0v-1.098h15.364v1.098a1.097 1.097 0 1 0 2.194 0v-5.487h2.195a2.195 2.195 0 0 0 2.195-2.195V14.052a2.194 2.194 0 0 0-2.195-2.194zm0 2.194v4.39l-4.389-4.39zm-7.681 0l7.681 7.682v5.487L28.903 14.052zm-8.78 13.169l-7.681-7.682v-5.487l13.168 13.169zm-7.681 0v-4.39l4.389 4.39zm19.753 4.389H22.318v-2.194h15.364zm-.455-4.389H34.39L21.221 14.052h4.389l13.169 13.169z" fill="currentColor"/></symbol><symbol viewBox="0 0 60 60" id="iD-highway-cycleway" xmlns="http://www.w3.org/2000/svg"><path d="M23.594 14v2h.844L25 19h-2.5L17 29v1l1 1h11l7.563-9.469L40.5 30H42v-1l-6-13h3v-1l-1-1h-4v2l1.406 3h-8.343l-.563-3h2.094v-1l-1-1h-4zm-.094 7h2l2 8H19l4.5-8zm4 0h7L29 27.5 27.5 21zm-9 2a6.5 6.5 0 1 0 6 9h-2.25a4.473 4.473 0 0 1-3.75 2 4.5 4.5 0 0 1-4.5-4.5c0-2.324 1.77-4.199 4.031-4.438l1.125-2.031A6.463 6.463 0 0 0 18.5 23zm21.844 0l.937 2.094C43.392 25.466 45 27.283 45 29.5a4.5 4.5 0 0 1-9 0c0-1.374.623-2.581 1.594-3.406l-.875-1.875A6.492 6.492 0 0 0 34 29.5a6.5 6.5 0 1 0 6.5-6.5h-.156zm-17.657 1.531l-1 1.781c.467.467.805 1.054 1.032 1.688h2.093a6.522 6.522 0 0 0-2.125-3.469zM49.5 39a2.5 2.5 0 1 1 0 5c-.907.004-1.373-.402-1.971-1H12.471c-.493.678-1.174.92-1.971 1a2.5 2.5 0 1 1 0-5c.907-.004 1.373.402 1.971 1h35.058c.493-.678 1.174-.92 1.971-1z" fill="currentColor"/><path d="M16 41v1h-3.05l.05-.5-.05-.5H16zm11 0h-5v1h5v-1zm11 0h-5v1h5v-1zm9.05 0H44v1h3.05l-.05-.5.05-.5z" fill="inherit"/><path d="M51 41.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 51 41.5zM12 41.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 12 41.5z" fill="#FFF"/></symbol><symbol viewBox="0 0 60 60" id="iD-highway-footway" xmlns="http://www.w3.org/2000/svg"><path d="M32 14.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0zM27 18h1.5l8.5 6.5V26h-1l-5-3.875V26l2 4 2 5-1 1h-1l-2-5-4-6v-4.656L24.5 22.5l-2 3.5H21v-1l1.5-3 4.5-4zm.844 10.406L25.531 36H24.5l-1-1 2.813-8.438zM49.5 39a2.5 2.5 0 1 1 0 5c-.907.004-1.373-.402-1.971-1H12.471c-.493.678-1.174.92-1.971 1a2.5 2.5 0 1 1 0-5c.907-.004 1.373.402 1.971 1h35.058c.493-.678 1.174-.92 1.971-1z" fill="currentColor"/><path d="M16 41v1h-3.05l.05-.5-.05-.5H16zm11 0h-5v1h5v-1zm11 0h-5v1h5v-1zm9.05 0H44v1h3.05l-.05-.5.05-.5z" fill="inherit"/><path d="M51 41.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 51 41.5zM12 41.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 12 41.5z" fill="#FFF"/></symbol><symbol viewBox="0 0 60 60" id="iD-highway-living-street" xmlns="http://www.w3.org/2000/svg"><path d="M22.5 15l-2.875 6H18l-1 1v2h1.406L18 25v6l1 1h5l2 1h8l2-1h5l1-1v-6l-.406-1H43v-2l-1-1h-1.625L37.5 15zm1 3h13l1.5 4-1 1H23l-1-1zM21 26h3l1 2v1h-4l-1-1v-1zm15 0h3l1 1v1l-1 1h-4v-1zm-17 7v2l1 1h3l1-1v-2zm17 0v2l1 1h3l1-1v-2zM16 32.625v1.5L11 36H7z" fill="#989898"/><path d="M18 12l-4 1.5v17.875L7 34V21.625l3-1.125v-4l-1 .375-2 .75V7z" fill="#B5B5B5"/><path d="M50 9l-1 1v2l1 1h2l1-1v-2l-1-1zm-1 5l-1 1-5 5h2.5l2.5-2.5V29h1l1-1v-6h2.188L53 26h4l1-1v-1h-3.406L54 21v-6l-1-1zm-4.5 11a1.5 1.5 0 1 0 .001 3.001A1.5 1.5 0 0 0 44.5 25zM44 32.625v1.5L49 36h4z" fill="#989898"/><path d="M49.5 39a2.5 2.5 0 1 1 0 5c-.93.002-1.387-.416-2-1.029V43h-35v-.029c-.504.692-1.184.947-2 1.029a2.5 2.5 0 1 1 0-5c.93-.002 1.387.417 2 1.029V40h35v.029c.504-.693 1.184-.947 2-1.029z" fill="inherit"/><path d="M47.05 41l-.05.5.05.5h-34.1l.05-.5-.05-.5h34.1z" fill="currentColor"/><path d="M51 41.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 51 41.5zM12 41.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 12 41.5z" fill="#FFF"/></symbol><symbol viewBox="0 0 60 60" id="iD-highway-motorway" xmlns="http://www.w3.org/2000/svg"><path d="M10.5 39a2.5 2.5 0 1 0 0 5h39a2.5 2.5 0 1 0 0-5z" fill="inherit"/><path d="M12.5 40c.31.416.5.941.5 1.5s-.19 1.084-.5 1.5h35c-.31-.416-.5-.941-.5-1.5s.19-1.084.5-1.5h-35z" fill="currentColor"/><path d="M12 41.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 12 41.5zM51 41.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 51 41.5z" fill="#FFF"/><path d="M13 14L8 36h8.5l3-22H13zm8 0l-2.5 22H27l1-22h-7zm11 0l1 22h7.5L38 14h-6zm7.5 0l3 22H52l-5.5-22h-7z" fill="#444"/><path d="M42.75 20L42 16h2.875l.75 4zM38 33l-.5-4h-3l.5 4zm-26.5 0l.5-4h3l-.5 4zm11.75-13l.312-4h2.876l-.313 4z" fill="currentColor"/></symbol><symbol viewBox="0 0 60 60" id="iD-highway-motorway-link" xmlns="http://www.w3.org/2000/svg"><defs><linearGradient id="asa" gradientUnits="userSpaceOnUse" x1="-660.5" y1="157.987" x2="-662" y2="152.362" gradientTransform="translate(701 -132.362)"><stop offset="0" stop-color="#444"/><stop offset="1" stop-color="#B5B5B5"/></linearGradient></defs><path d="M34 14l-9 22h11l1.156-7.625C35.72 27.032 34 25.193 34 24v-2l3.906 1.5 1.438-9.5H34z" fill="#B5B5B5"/><path d="M42 36v-4c0-4.452-8-5.828-8-10 0-3 .375-8 .375-8h5S39 17.996 39 20c0 2 8.595 4.072 10 8l2 8z" fill="url(#asa)"/><path d="M19 36l11.359-22H25L8 36z" fill="#B5B5B5"/><path d="M32.5 33l1.25-4h-3l-1.25 4zm-10-12l2-3.5h3l-2 3.5z" fill="currentColor"/><g><path d="M10.5 39a2.5 2.5 0 1 0 0 5h39a2.5 2.5 0 1 0 0-5h-39zm2 1h35c-.31.416-.5.941-.5 1.5s.19 1.084.5 1.5h-35c.31-.416.5-.941.5-1.5s-.19-1.084-.5-1.5z" fill="inherit" opacity=".5"/><path d="M12.5 40c.31.416.5.941.5 1.5s-.19 1.084-.5 1.5h35c-.31-.416-.5-.941-.5-1.5s.19-1.084.5-1.5h-35z" fill="currentColor" opacity=".5"/><path d="M12 41.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 12 41.5zM51 41.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 51 41.5z" fill="#FFF"/><path d="M27 39a2.515 2.515 0 0 0-2.5 2.5c0 1.369 1.131 2.5 2.5 2.5 1.485.542 3.651 2.959 5.344 5.781l3 5c.003.004.028-.004.031 0A2.482 2.482 0 0 0 37.5 56c1.369 0 2.5-1.131 2.5-2.5 0-.466-.148-.906-.375-1.281l.031-.031-3-5c-2.081-3.469-4.89-6.094-7.844-7.375C28.354 39.32 27.717 39 27 39z" fill="inherit"/><path d="M29.469 41.312c.005.064.031.124.031.188 0 .934-.53 1.753-1.301 2.181 1.782 1.072 4.024 3.952 5.02 5.569l1.968 3.281A2.534 2.534 0 0 1 37.5 51c.096 0 .188.02.281.031l-2-3.312c-1.715-2.859-4.149-5.404-6.312-6.407zM37.5 53c-.288 0-.5.212-.5.5 0 .097.02.176.062.25l.844-.5c-.086-.138-.222-.25-.406-.25z" fill="currentColor"/><path d="M39 53.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 39 53.5zM28.5 41.5a1.5 1.5 0 1 1-3.001-.001 1.5 1.5 0 0 1 3.001.001z" fill="#FFF"/></g></symbol><symbol viewBox="0 0 60 60" id="iD-highway-path" xmlns="http://www.w3.org/2000/svg"><path d="M49.5 39a2.5 2.5 0 1 1 0 5c-.907.004-1.373-.402-1.971-1H12.471c-.493.678-1.174.92-1.971 1a2.5 2.5 0 1 1 0-5c.907-.004 1.373.402 1.971 1h35.058c.493-.678 1.174-.92 1.971-1z" fill="currentColor"/><path d="M16 41v1h-3.05l.05-.5-.05-.5H16zm11 0h-5v1h5v-1zm11 0h-5v1h5v-1zm9.05 0H44v1h3.05l-.05-.5.05-.5z" fill="inherit"/><path d="M51 41.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 51 41.5zM12 41.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 12 41.5z" fill="#FFF"/><path d="M22 36l3-11 3-11h4l3 11 3 11z" fill="currentColor"/></symbol><symbol viewBox="0 0 60 60" id="iD-highway-primary" xmlns="http://www.w3.org/2000/svg"><path d="M10.5 39a2.5 2.5 0 1 0 0 5h39a2.5 2.5 0 1 0 0-5z" fill="inherit"/><path d="M12.5 40c.31.416.5.941.5 1.5s-.19 1.084-.5 1.5h35c-.31-.416-.5-.941-.5-1.5s.19-1.084.5-1.5h-35z" fill="currentColor"/><path d="M12 41.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 12 41.5zM51 41.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 51 41.5z" fill="#FFF"/><path d="M17 14l-4 22h7l.281-2h1.938L22 36h7l.5-22h-5l-.344 3h-1.562L23 14h-6zm13.5 0l.5 22h7l-.219-2h1.938L40 36h7l-4.5-22H37l.406 3h-1.562l-.344-3h-5zm-8.031 4h1.562l-.312 3h-1.688l.438-3zm13.5 0h1.562l.438 3h-1.688l-.312-3zm-14.063 4h1.688l-.344 3H21.5l.406-3zm14.5 0h1.688l.406 3h-1.75l-.344-3zm-15.031 4h1.75l-.344 3h-1.812l.406-3zm15.5 0h1.75l.406 3h-1.812l-.344-3zm-16.063 4h1.876l-.344 3h-1.938l.406-3zm16.5 0h1.876l.406 3h-1.938l-.344-3z" fill="#444"/><path d="M19 33l.5-4h-3l-.5 4zm23-13l-.75-4h-2.875l.75 4zm-6 13l-.5-4h-3l.5 4zM25.25 20l.312-4h2.876l-.313 4z" fill="currentColor"/></symbol><symbol viewBox="0 0 60 60" id="iD-highway-primary-link" xmlns="http://www.w3.org/2000/svg"><defs><linearGradient id="ava" gradientUnits="userSpaceOnUse" x1="-780.5" y1="157.987" x2="-782" y2="152.362" gradientTransform="translate(820 -132.362)"><stop offset="0" stop-color="#444"/><stop offset="1" stop-color="#B5B5B5"/></linearGradient></defs><path d="M26 14L11 36h11l.844-2h1.968L24 36h11l1.156-7.625C34.72 27.032 33 25.193 33 24v-2l3.906 1.5 1.438-9.5H33l-1.219 3h-1.719l1.282-3H26zm3.656 4h1.719l-1.25 3h-1.75l1.281-3zm-1.719 4h1.782L28.5 25h-1.813l1.25-3zm-1.687 4h1.844l-1.219 3h-1.906l1.281-3zm-1.688 4h1.907l-1.25 3h-1.938l1.281-3z" fill="#B5B5B5"/><path d="M31.5 33l1.25-4h-3l-1.25 4zm-8-12l2-3.5h3l-2 3.5z" fill="currentColor"/><path d="M41 36v-4c0-4.452-8-5.828-8-10 0-3 .375-8 .375-8h5S38 17.996 38 20c0 2 8.595 4.072 10 8l2 8z" fill="url(#ava)"/><g><path d="M10.5 39a2.5 2.5 0 1 0 0 5h39a2.5 2.5 0 1 0 0-5h-39zm2 1h35c-.31.416-.5.941-.5 1.5s.19 1.084.5 1.5h-35c.31-.416.5-.941.5-1.5s-.19-1.084-.5-1.5z" fill="inherit" opacity=".5"/><path d="M12.5 40c.31.416.5.941.5 1.5s-.19 1.084-.5 1.5h35c-.31-.416-.5-.941-.5-1.5s.19-1.084.5-1.5h-35z" fill="currentColor" opacity=".5"/><path d="M12 41.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 12 41.5zM51 41.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 51 41.5z" fill="#FFF"/><path d="M27 39a2.515 2.515 0 0 0-2.5 2.5c0 1.369 1.131 2.5 2.5 2.5 1.485.542 3.651 2.959 5.344 5.781l3 5c.003.004.028-.004.031 0A2.482 2.482 0 0 0 37.5 56c1.369 0 2.5-1.131 2.5-2.5 0-.466-.148-.906-.375-1.281l.031-.031-3-5c-2.081-3.469-4.89-6.094-7.844-7.375C28.354 39.32 27.717 39 27 39z" fill="inherit"/><path d="M29.469 41.312c.005.064.031.124.031.188 0 .934-.53 1.753-1.301 2.181 1.782 1.072 4.024 3.952 5.02 5.569l1.968 3.281A2.534 2.534 0 0 1 37.5 51c.096 0 .188.02.281.031l-2-3.312c-1.715-2.859-4.149-5.404-6.312-6.407zM37.5 53c-.288 0-.5.212-.5.5 0 .097.02.176.062.25l.844-.5c-.086-.138-.222-.25-.406-.25z" fill="currentColor"/><path d="M39 53.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 39 53.5zM28.5 41.5a1.5 1.5 0 1 1-3.001-.001 1.5 1.5 0 0 1 3.001.001z" fill="#FFF"/></g></symbol><symbol viewBox="0 0 60 60" id="iD-highway-residential" xmlns="http://www.w3.org/2000/svg"><path d="M22.5 15l-2.875 6H18l-1 1v2h1.406L18 25v6l1 1h5l2 1h8l2-1h5l1-1v-6l-.406-1H43v-2l-1-1h-1.625L37.5 15zm1 3h13l1.5 4-1 1H23l-1-1zM21 26h3l1 2v1h-4l-1-1v-1zm15 0h3l1 1v1l-1 1h-4v-1zm-17 7v2l1 1h3l1-1v-2zm17 0v2l1 1h3l1-1v-2z" fill="#989898"/><path d="M42 12l4 1.5v17.875L53 34V21.625L50 20.5v-4l1 .375 2 .75V7zM44 32.625v1.5L49 36h4zM16 32.625v1.5L11 36H7zM18 12l-4 1.5v17.875L7 34V21.625l3-1.125v-4l-1 .375-2 .75V7z" fill="#B5B5B5"/><path d="M10.5 39a2.5 2.5 0 1 0 0 5h39a2.5 2.5 0 1 0 0-5z" fill="inherit"/><path d="M12.5 40c.31.416.5.941.5 1.5s-.19 1.084-.5 1.5h35c-.31-.416-.5-.941-.5-1.5s.19-1.084.5-1.5h-35z" fill="currentColor"/><path d="M12 41.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 12 41.5zM51 41.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 51 41.5z" fill="#FFF"/></symbol><symbol viewBox="0 0 60 60" id="iD-highway-road" xmlns="http://www.w3.org/2000/svg"><path d="M49.5 39a2.5 2.5 0 1 1 0 5c-.93.002-1.387-.416-2-1.029V43h-35v-.029c-.504.692-1.184.947-2 1.029a2.5 2.5 0 1 1 0-5c.93-.002 1.387.417 2 1.029V40h35v.029c.504-.693 1.184-.947 2-1.029z" fill="inherit"/><path d="M47.05 41l-.05.5.05.5h-34.1l.05-.5-.05-.5h34.1z" fill="currentColor"/><path d="M51 41.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 51 41.5zM12 41.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 12 41.5z" fill="#FFF"/><path d="M22.375 36l3-11 3-11h4l3 11 3 11z" fill="#989898"/></symbol><symbol viewBox="0 0 60 60" id="iD-highway-secondary" xmlns="http://www.w3.org/2000/svg"><path d="M10.5 39a2.5 2.5 0 1 0 0 5h39a2.5 2.5 0 1 0 0-5z" fill="inherit"/><path d="M12.5 40c.31.416.5.941.5 1.5s-.19 1.084-.5 1.5h35c-.31-.416-.5-.941-.5-1.5s.19-1.084.5-1.5h-35z" fill="currentColor"/><path d="M12 41.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 12 41.5zM51 41.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 51 41.5z" fill="#FFF"/><path d="M22 14l-4 22h11l.5-22H22zm8.5 0l.5 22h11l-4.5-22h-7z" fill="#444"/><path d="M35 33l-.5-4h3l.5 4zM23.25 20l.312-4h2.876l-.313 4z" fill="currentColor"/></symbol><symbol viewBox="0 0 60 60" id="iD-highway-secondary-link" xmlns="http://www.w3.org/2000/svg"><defs><linearGradient id="aza" gradientUnits="userSpaceOnUse" x1="-840.5" y1="157.987" x2="-842" y2="152.362" gradientTransform="translate(874 -132.362)"><stop offset="0" stop-color="#444"/><stop offset="1" stop-color="#B5B5B5"/></linearGradient></defs><path d="M27 14l-9 22h11l1.156-7.625C28.72 27.032 27 25.193 27 24v-2l3.906 1.5 1.438-9.5H27z" fill="#B5B5B5"/><path d="M25.5 33l1.25-4h-3l-1.25 4z" fill="currentColor"/><path d="M35 36v-4c0-4.452-8-5.828-8-10 0-3 .375-8 .375-8h5S32 17.996 32 20c0 2 8.595 4.072 10 8l2 8z" fill="url(#aza)"/><g><path d="M10.5 39a2.5 2.5 0 1 0 0 5h39a2.5 2.5 0 1 0 0-5h-39zm2 1h35c-.31.416-.5.941-.5 1.5s.19 1.084.5 1.5h-35c.31-.416.5-.941.5-1.5s-.19-1.084-.5-1.5z" fill="inherit" opacity=".5"/><path d="M12.5 40c.31.416.5.941.5 1.5s-.19 1.084-.5 1.5h35c-.31-.416-.5-.941-.5-1.5s.19-1.084.5-1.5h-35z" fill="currentColor" opacity=".5"/><path d="M12 41.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 12 41.5zM51 41.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 51 41.5z" fill="#FFF"/><path d="M27 39a2.515 2.515 0 0 0-2.5 2.5c0 1.369 1.131 2.5 2.5 2.5 1.485.542 3.65 2.959 5.344 5.781l3 5c.003.004.028-.004.031 0A2.482 2.482 0 0 0 37.5 56c1.369 0 2.5-1.131 2.5-2.5 0-.466-.148-.906-.375-1.281l.031-.031-3-5c-2.081-3.469-4.89-6.094-7.844-7.375C28.354 39.32 27.717 39 27 39z" fill="inherit"/><path d="M29.469 41.312c.005.064.031.124.031.188 0 .934-.53 1.753-1.301 2.181 1.782 1.072 4.024 3.952 5.02 5.569l1.968 3.281A2.534 2.534 0 0 1 37.5 51c.096 0 .188.02.281.031l-2-3.312c-1.715-2.859-4.149-5.404-6.312-6.407zM37.5 53c-.288 0-.5.212-.5.5 0 .097.02.176.063.25l.843-.5c-.086-.138-.222-.25-.406-.25z" fill="currentColor"/><path d="M39 53.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 39 53.5zM28.5 41.5a1.5 1.5 0 1 1-3.001-.001 1.5 1.5 0 0 1 3.001.001z" fill="#FFF"/></g></symbol><symbol viewBox="0 0 60 60" id="iD-highway-service" xmlns="http://www.w3.org/2000/svg"><path d="M49.5 39a2.5 2.5 0 1 1 0 5c-.93.002-1.387-.416-2-1.029V43h-35v-.029c-.504.692-1.184.947-2 1.029a2.5 2.5 0 1 1 0-5c.93-.002 1.387.416 2 1.029V40h35v.029c.504-.693 1.184-.947 2-1.029z" fill="inherit"/><path d="M47.05 41l-.05.5.05.5h-34.1l.05-.5-.05-.5h34.1z" fill="currentColor"/><path d="M51 41.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 51 41.5zM12 41.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 12 41.5z" fill="#FFF"/><path d="M22.5 15l-2.875 6H18l-1 1v2h1.406L18 25v6l1 1h5l2 1h8l2-1h5l1-1v-6l-.406-1H43v-2l-1-1h-1.625L37.5 15zm1 3h13l1.5 4-1 1H23l-1-1zM21 26h3l1 2v1h-4l-1-1v-1zm15 0h3l1 1v1l-1 1h-4v-1zm-17 7v2l1 1h3l1-1v-2zm17 0v2l1 1h3l1-1v-2zM44 32.625v1.5L49 36h4zM16 32.625v1.5L11 36H7z" fill="#989898"/></symbol><symbol viewBox="0 0 60 60" id="iD-highway-steps" xmlns="http://www.w3.org/2000/svg"><path d="M27 14v2l-1 2v2l-1 2v2l-1 2v2l-1 2v2l-1 2v2h16v-2l-1-2v-2l-1-2v-2l-1-2v-2l-1-2v-2l-1-2v-2h-6z" fill="currentColor" opacity=".496"/><path d="M23 32v-2h14v2zm15 4v-2H22v2zm-2-8v-2H24v2zm-1-4v-2H25v2zm-1-4v-2h-8v2zm-1-4v-2h-6v2zM49.5 39a2.5 2.5 0 1 1 0 5c-.907.004-1.373-.402-1.971-1H12.471c-.493.678-1.174.92-1.971 1a2.5 2.5 0 1 1 0-5c.907-.004 1.373.402 1.971 1h35.058c.493-.678 1.174-.92 1.971-1z" fill="currentColor"/><path d="M43 41h3v1h-3zm-10 1h3v-1h-3zm-10 0h3v-1h-3zm-10 0h3v-1h-3zm5 0h3v-1h-3zm10 0h3v-1h-3zm10 0h3v-1h-3z" fill="inherit"/><path d="M51 41.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 51 41.5zM12 41.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 12 41.5z" fill="#FFF"/></symbol><symbol viewBox="0 0 60 60" id="iD-highway-tertiary" xmlns="http://www.w3.org/2000/svg"><path d="M10.5 39a2.5 2.5 0 1 0 0 5h39a2.5 2.5 0 1 0 0-5z" fill="inherit"/><path d="M12.5 40c.31.416.5.941.5 1.5s-.19 1.084-.5 1.5h35c-.31-.416-.5-.941-.5-1.5s.19-1.084.5-1.5h-35z" fill="currentColor"/><path d="M12 41.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 12 41.5zM51 41.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 51 41.5z" fill="#FFF"/><path d="M22 14l-4 22h11l.031-2h1.938L31 36h11l-4.5-22h-7l.062 3h-1.125l.063-3H22zm7.406 4h1.188l.062 3h-1.312l.062-3zm-.093 4h1.375l.062 3h-1.5l.063-3zm-.094 4h1.562l.063 3h-1.688l.063-3zm-.094 4h1.75l.063 3h-1.875l.062-3z" fill="#444"/><path d="M35 33l-.5-4h3l.5 4zM23.25 20l.312-4h2.876l-.313 4z" fill="currentColor"/></symbol><symbol viewBox="0 0 60 60" id="iD-highway-tertiary-link" xmlns="http://www.w3.org/2000/svg"><defs><linearGradient id="bda" gradientUnits="userSpaceOnUse" x1="-900.5" y1="157.987" x2="-902" y2="152.362" gradientTransform="translate(934 -132.362)"><stop offset="0" stop-color="#444"/><stop offset="1" stop-color="#B5B5B5"/></linearGradient></defs><path d="M27 14l-1.219 3h-1.719l-.406 1h1.719l-1.25 3h-1.75l-.438 1h1.782L22.5 25h-1.813l-.437 1h1.844l-1.219 3h-1.906l-.407 1h1.907l-1.25 3h-1.938l-.437 1h1.968L18 36h11l1.156-7.625C28.72 27.032 27 25.193 27 24v-2l3.906 1.5 1.438-9.5H27z" fill="#B5B5B5"/><path d="M25.5 33l1.25-4h-3l-1.25 4z" fill="currentColor"/><path d="M35 36v-4c0-4.452-8-5.828-8-10 0-3 .375-8 .375-8h5S32 17.996 32 20c0 2 8.595 4.072 10 8l2 8z" fill="url(#bda)"/><path d="M10.5 39a2.5 2.5 0 1 0 0 5h39a2.5 2.5 0 1 0 0-5h-39zm2 1h35c-.31.416-.5.941-.5 1.5s.19 1.084.5 1.5h-35c.31-.416.5-.941.5-1.5s-.19-1.084-.5-1.5z" fill="inherit" opacity=".5"/><path d="M12.5 40c.31.416.5.941.5 1.5s-.19 1.084-.5 1.5h35c-.31-.416-.5-.941-.5-1.5s.19-1.084.5-1.5h-35z" fill="currentColor" opacity=".5"/><path d="M12 41.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 12 41.5zM51 41.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 51 41.5z" fill="#FFF"/><path d="M27 39a2.515 2.515 0 0 0-2.5 2.5c0 1.369 1.131 2.5 2.5 2.5 1.485.542 3.65 2.959 5.344 5.781l3 5c.003.004.028-.004.031 0A2.482 2.482 0 0 0 37.5 56c1.369 0 2.5-1.131 2.5-2.5 0-.466-.148-.906-.375-1.281l.031-.031-3-5c-2.254-3.766-5.288-6.347-8.645-7.963A2.391 2.391 0 0 0 27 39z" fill="inherit"/><path d="M29.469 41.312c.005.064.031.124.031.188 0 .934-.53 1.753-1.301 2.181 1.782 1.072 4.024 3.952 5.02 5.569l1.968 3.281A2.534 2.534 0 0 1 37.5 51c.096 0 .188.02.281.031l-2-3.312c-1.715-2.859-4.149-5.404-6.312-6.407zM37.5 53c-.288 0-.5.212-.5.5 0 .097.02.176.063.25l.843-.5c-.086-.138-.222-.25-.406-.25z" fill="currentColor"/><path d="M39 53.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 39 53.5zM28.5 41.5a1.5 1.5 0 1 1-3.001-.001 1.5 1.5 0 0 1 3.001.001z" fill="#FFF"/></symbol><symbol viewBox="0 0 60 60" id="iD-highway-track" xmlns="http://www.w3.org/2000/svg"><path d="M49.5 39a2.5 2.5 0 1 1 0 5c-.93.002-1.387-.416-2-1.029V43h-35v-.029c-.504.692-1.184.947-2 1.029a2.5 2.5 0 1 1 0-5c.93-.002 1.387.417 2 1.029V40h35v.029c.504-.693 1.184-.947 2-1.029z" fill="inherit"/><path d="M47.05 41l-.05.5.05.5h-34.1l.05-.5-.05-.5h34.1z" fill="currentColor"/><path d="M13.5 40v1H16v-1zm4.5 0v1h3v-1zm5 0v1h3v-1zm5 0v1h3v-1zm5 0v1h3v-1zm5 0v1h3v-1zm5 0v1h3v-1zm-29.5 2v1H16v-1zm4.5 0v1h3v-1zm5 0v1h3v-1zm5 0v1h3v-1zm5 0v1h3v-1zm5 0v1h3v-1zm5 0v1h3v-1z" fill="currentColor" opacity=".503"/><path d="M51 41.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 51 41.5zM12 41.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 12 41.5z" fill="#FFF"/><path d="M27 14l-6 22h6.5L29 14h-2zm4 0l1.5 22H39l-6-22h-2zM43 29v3.25l1 .375V29h-1zm-2 1v2.5l1 .375V30h-1zm6 0v3.75l.656.25H48v-4h-1zm-2 1v3l1 .375V31h-1zm4 1v3.5l1 .375V32h-1zM17 29v3.25l-1 .375V29h1zm2 1v2.5l-1 .375V30h1zm-6 0v3.75l-.656.25H12v-4h1zm2 1v3l-1 .375V31h1zm-4 1v3.5l-1 .375V32h1z" fill="#989898"/></symbol><symbol viewBox="0 0 60 60" id="iD-highway-trunk" xmlns="http://www.w3.org/2000/svg"><path d="M10.5 39a2.5 2.5 0 1 0 0 5h39a2.5 2.5 0 1 0 0-5z" fill="inherit"/><path d="M12.5 40c.31.416.5.941.5 1.5s-.19 1.084-.5 1.5h35c-.31-.416-.5-.941-.5-1.5s.19-1.084.5-1.5h-35z" fill="currentColor"/><path d="M12 41.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 12 41.5zM51 41.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 51 41.5z" fill="#FFF"/><path d="M15 14l-5 22h7.5l3-22H15zm7 0l-2.5 22H29l.5-22H22zm8.5 0l.5 22h9l-2.5-22h-7zm8.5 0l3 22h8l-5.5-22H39z" fill="#444"/><path d="M41.75 20L41 16h2.875l.75 4zM37 33l-.5-4h-3l.5 4zm-23.5 0l.5-4h3l-.5 4zm9.75-13l.312-4h2.876l-.313 4z" fill="currentColor"/></symbol><symbol viewBox="0 0 60 60" id="iD-highway-trunk-link" xmlns="http://www.w3.org/2000/svg"><defs><linearGradient id="bga" gradientUnits="userSpaceOnUse" x1="-720.5" y1="157.987" x2="-722" y2="152.362" gradientTransform="translate(760 -132.362)"><stop offset="0" stop-color="#444"/><stop offset="1" stop-color="#B5B5B5"/></linearGradient></defs><path d="M33 14l-9 22h11l1.156-7.625C34.72 27.032 33 25.193 33 24v-2l3.906 1.5 1.438-9.5H33zM22 36l9.359-22H26L11 36z" fill="#B5B5B5"/><path d="M31.5 33l1.25-4h-3l-1.25 4zm-8-12l2-3.5h3l-2 3.5z" fill="currentColor"/><path d="M41 36v-4c0-4.452-8-5.828-8-10 0-3 .375-8 .375-8h5S38 17.996 38 20c0 2 8.595 4.072 10 8l2 8z" fill="url(#bga)"/><g><path d="M10.5 39a2.5 2.5 0 1 0 0 5h39a2.5 2.5 0 1 0 0-5h-39zm2 1h35c-.31.416-.5.941-.5 1.5s.19 1.084.5 1.5h-35c.31-.416.5-.941.5-1.5s-.19-1.084-.5-1.5z" fill="inherit" opacity=".5"/><path d="M12.5 40c.31.416.5.941.5 1.5s-.19 1.084-.5 1.5h35c-.31-.416-.5-.941-.5-1.5s.19-1.084.5-1.5h-35z" fill="currentColor" opacity=".5"/><path d="M12 41.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 12 41.5zM51 41.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 51 41.5z" fill="#FFF"/><path d="M27 39a2.515 2.515 0 0 0-2.5 2.5c0 1.369 1.131 2.5 2.5 2.5 1.485.542 3.651 2.959 5.344 5.781l3 5c.003.004.028-.004.031 0A2.482 2.482 0 0 0 37.5 56c1.369 0 2.5-1.131 2.5-2.5 0-.466-.148-.906-.375-1.281l.031-.031-3-5c-2.081-3.469-4.89-6.094-7.844-7.375C28.354 39.32 27.717 39 27 39z" fill="inherit"/><path d="M29.469 41.312c.005.064.031.124.031.188 0 .934-.53 1.753-1.301 2.181 1.782 1.072 4.024 3.952 5.02 5.569l1.968 3.281A2.534 2.534 0 0 1 37.5 51c.096 0 .188.02.281.031l-2-3.312c-1.715-2.859-4.149-5.404-6.312-6.407zM37.5 53c-.288 0-.5.212-.5.5 0 .097.02.176.062.25l.844-.5c-.086-.138-.222-.25-.406-.25z" fill="currentColor"/><path d="M39 53.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 39 53.5zM28.5 41.5a1.5 1.5 0 1 1-3.001-.001 1.5 1.5 0 0 1 3.001.001z" fill="#FFF"/></g></symbol><symbol viewBox="0 0 60 60" id="iD-highway-unclassified" xmlns="http://www.w3.org/2000/svg"><path d="M10.5 39a2.5 2.5 0 1 0 0 5h39a2.5 2.5 0 1 0 0-5z" fill="inherit"/><path d="M12.5 40c.31.416.5.941.5 1.5s-.19 1.084-.5 1.5h35c-.31-.416-.5-.941-.5-1.5s.19-1.084.5-1.5h-35z" fill="currentColor"/><path d="M12 41.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 12 41.5zM51 41.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 51 41.5z" fill="#FFF"/><path d="M22.5 15l-2.875 6H18l-1 1v2h1.406L18 25v6l1 1h5l2 1h8l2-1h5l1-1v-6l-.406-1H43v-2l-1-1h-1.625L37.5 15zm1 3h13l1.5 4-1 1H23l-1-1zM21 26h3l1 2v1h-4l-1-1v-1zm15 0h3l1 1v1l-1 1h-4v-1zm-17 7v2l1 1h3l1-1v-2zm17 0v2l1 1h3l1-1v-2z" fill="#989898"/></symbol><symbol viewBox="0 0 20 20" id="iD-icon-alert" xmlns="http://www.w3.org/2000/svg"><path d="M10.937 13.886a.324.324 0 0 0-.076-.22.264.264 0 0 0-.21-.086h-1.3a.292.292 0 0 0-.297.306v1.221c0 .088.029.159.089.211.06.052.128.078.208.078h1.3c.196 0 .293-.097.286-.289zm-.362-1.086c.078 0 .147-.03.207-.087a.281.281 0 0 0 .088-.203l.127-5.253a.27.27 0 0 0-.09-.202.279.279 0 0 0-.207-.087H9.298a.287.287 0 0 0-.295.289l.103 5.253c0 .077.029.144.088.203a.286.286 0 0 0 .206.087zm-.584-9.3c.185 0 .344.059.477.177.134.121.245.253.335.404l6.501 11.043c.058.088.104.182.14.284a.946.946 0 0 1 .056.328c0 .272-.108.468-.321.585a1.38 1.38 0 0 1-.685.179H3.504c-.242 0-.469-.059-.685-.179-.213-.117-.319-.313-.319-.585 0-.109.018-.219.049-.323.036-.105.083-.201.145-.289L9.181 4.081c.09-.151.2-.283.332-.404a.695.695 0 0 1 .478-.177" fill="currentColor"/></symbol><symbol viewBox="0 0 20 20" id="iD-icon-apply" xmlns="http://www.w3.org/2000/svg"><path d="M16.671 3.946c.499.311.754 1.144.383 1.727l-7 11.014a1.248 1.248 0 0 1-1.938.213l-4-4.005a1.25 1.25 0 1 1 1.768-1.77l2.898 2.902s5.672-8.945 6.163-9.697c.492-.753 1.227-.696 1.726-.384z" fill="currentColor"/></symbol><symbol viewBox="0 0 20 20" id="iD-icon-area" xmlns="http://www.w3.org/2000/svg"><path d="M6.5 6.5h7v7h-7v-7z" fill="currentColor" fill-opacity=".253"/><path d="M5.5 3A2.5 2.5 0 0 0 3 5.5c0 .958.543 1.788 1.333 2.208v4.584A2.502 2.502 0 0 0 3 14.5 2.5 2.5 0 0 0 5.5 17c.958 0 1.788-.543 2.208-1.333h4.584c.42.79 1.25 1.333 2.208 1.333a2.5 2.5 0 0 0 2.5-2.5c0-.958-.543-1.788-1.333-2.208V7.708A2.502 2.502 0 0 0 17 5.5 2.5 2.5 0 0 0 14.5 3c-.969 0-1.804.558-2.219 1.365l-.062-.032H7.708A2.502 2.502 0 0 0 5.5 3zm0 1.5a1 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-2zM7.708 6.667h4.584c.234.441.6.807 1.041 1.041v4.584c-.441.234-.807.6-1.041 1.041H7.708a2.523 2.523 0 0 0-1.041-1.041V7.708c.441-.234.807-.6 1.041-1.041zM5.5 13.5a1 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" fill="currentColor"/></symbol><symbol viewBox="0 0 20 20" id="iD-icon-avatar" xmlns="http://www.w3.org/2000/svg"><path d="M9.5 3C8 3 7 5 7 6v2c0 1 1 2.154 1 2.154V11l-1.692.385c-1.455.33-2.026 1.236-2.154 2.769L4 16h12l-.154-1.846c-.128-1.533-.7-2.439-2.154-2.769L12 11v-.846S13 9 13 8V6c0-1-1-3-2.5-3z" fill="currentColor"/></symbol><symbol viewBox="0 0 20 20" id="iD-icon-backward" xmlns="http://www.w3.org/2000/svg"><path d="M12.87 4c1.103.079.691-.113 1.329.353.449.49.389 1.228-.136 1.648l-5.892 4.721 5.892 4.722c.525.42.585 1.158.136 1.648a1.31 1.31 0 0 1-1.762.127l-7-5.609a1.12 1.12 0 0 1 0-1.775l7-5.609L12.87 4z" fill="currentColor"/></symbol><symbol viewBox="0 0 20 20" id="iD-icon-bolt" xmlns="http://www.w3.org/2000/svg"><path stroke="inherit" stroke-width="inherit" fill="currentColor" d="M15 6.5h-4.2l1.3-4.7c.1-.5-.4-1-.9-1h-5c-.4-.1-.8.2-.8.7l-1.2 8.7c-.1.6.4 1 .8 1h4.3l-1.7 7.1c-.1.5.4 1 .9 1 .3 0 .6-.2.7-.5l6.4-11c.4-.6 0-1.3-.6-1.3z"/></symbol><symbol viewBox="0 0 20 20" id="iD-icon-bug" xmlns="http://www.w3.org/2000/svg"><path d="M6 3v1l2 2.406V8h4V6.406L14 4V3h-1l-2 2H9L7 3H6zm1 6l-1 1H3l-1 1 1 1h3v1l-2 1-1 1v1h1l2-1 2 2h4l2-2 2 1h1v-1l-1-1-2-1v-1h3l1-1-1-1h-3l-1-1H7z" fill="currentColor"/></symbol><symbol viewBox="0 0 20 20" id="iD-icon-close" xmlns="http://www.w3.org/2000/svg"><path d="M16.634 3.892c.394.424.488 1.278 0 1.765l-4.616 4.606 4.616 4.607a1.247 1.247 0 0 1 0 1.765 1.252 1.252 0 0 1-1.768 0l-4.616-4.607-4.616 4.606a1.251 1.251 0 0 1-1.768.001 1.247 1.247 0 0 1 0-1.765l4.616-4.607-4.616-4.606c-.488-.487-.417-1.356 0-1.764.417-.409 1.291-.424 1.768-.001.477.424 4.616 4.608 4.616 4.608s4.079-4.023 4.616-4.608c.537-.584 1.273-.458 1.768 0z" fill="currentColor"/></symbol><symbol viewBox="0 0 20 20" id="iD-icon-collapse-screen" xmlns="http://www.w3.org/2000/svg"><path d="M9.357 10.404l-.359-.334-.411-.07-1.662.066-2.758.111a1 1 0 1 0 .08 1.998l1.496-.06-3.377 3.117A1.25 1.25 0 0 0 4.134 17l3.377-3.117-.06 1.496a1 1 0 1 0 1.998.079l.088-2.209.089-2.21c-.073-.462.014-.249-.269-.635zm.912-1.415c-.283-.386-.196-.173-.269-.635l.088-2.209.089-2.21a1 1 0 1 1 1.998.08l-.06 1.496 3.117-3.145A1.25 1.25 0 0 1 17 4.134l-3.117 3.144 1.496-.06a1 1 0 0 1 .079 1.999l-2.757.11-1.662.066-.412-.07-.358-.334z" fill="currentColor"/></symbol><symbol viewBox="0 0 20 20" id="iD-icon-data" xmlns="http://www.w3.org/2000/svg"><path d="M9 2L8 3v1.594L3.594 9H2l-1 1v2l1 1h2l1-1v-1.594L9.406 6H11l1-1V3l-1-1zm2 11v2l1 1h2l1-1v-2l-1-1h-2zm0-4l1 1h2l1-1h2l1 1v2l-1 1v2l1 1v2l-1 1h-2l-1-1h-2l-1 1H9l-1-1v-2l1-1v-2l-1-1v-2l1-1z" fill="currentColor"/></symbol><symbol viewBox="0 0 20 20" id="iD-icon-down" xmlns="http://www.w3.org/2000/svg"><path d="M10 14.999c.453.015.695-.094.949-.336.254-.243 5.25-5.855 6-6.692a1.159 1.159 0 0 0-.136-1.685 1.29 1.29 0 0 0-1.762.13c-3.684 4.108-4.368 4.82-5.051 5.583-4.301-4.797-4.301-4.747-5.051-5.583a1.29 1.29 0 0 0-1.762-.13 1.159 1.159 0 0 0-.136 1.685c5.25 5.855 5.715 6.371 6 6.692.261.226.496.32.949.336z" fill="currentColor"/></symbol><symbol viewBox="0 0 20 20" id="iD-icon-edit" xmlns="http://www.w3.org/2000/svg"><path d="M15.264 3.139l-2.002-1.146c-.505-.292-1.171-.148-1.493.318l-.802 1.15 3.836 2.202.823-1.053c.292-.578.141-1.181-.368-1.471h.006zM4.171 13.32l3.831 2.191 6.236-9.044-3.81-2.19-6.257 9.044v-.001zm-.585 2.782L3.5 18.158l2-.965 1.857-.894-3.696-2.115-.078 1.917.003.001z" fill="currentColor"/></symbol><symbol viewBox="0 0 20 20" id="iD-icon-forward" xmlns="http://www.w3.org/2000/svg"><path d="M6.63 4c-1.103.079-.691-.113-1.329.353a1.117 1.117 0 0 0 .136 1.648l5.892 4.721-5.892 4.722a1.117 1.117 0 0 0-.136 1.648 1.31 1.31 0 0 0 1.762.127l7-5.609a1.12 1.12 0 0 0 0-1.775l-7-5.609L6.63 4z" fill="currentColor"/></symbol><symbol viewBox="0 0 20 20" id="iD-icon-full-screen" xmlns="http://www.w3.org/2000/svg"><path d="M2.269 2.404l.358-.334.412-.07 1.662.066 2.757.111a1 1 0 1 1-.079 1.998l-1.496-.06L9 7.232A1.25 1.25 0 0 1 7.232 9L4.115 5.883l.06 1.496a1 1 0 1 1-1.998.079l-.089-2.209L2 3.039c.073-.462-.014-.249.269-.635zm15.722 0c.283.386.195.173.269.635l-.089 2.21-.088 2.209a1 1 0 1 1-1.998-.079l.059-1.496L12.768 9A1.25 1.25 0 0 1 11 7.232l3.377-3.117-1.496.06a1 1 0 1 1-.08-1.998l2.758-.111L17.221 2l.411.07.359.334zM2.269 17.856c-.283-.387-.196-.174-.269-.636l.088-2.209.089-2.21a1 1 0 1 1 1.998.08l-.06 1.496 3.117-3.145A1.25 1.25 0 0 1 9 13l-3.117 3.144 1.496-.06a1 1 0 0 1 .079 1.999l-2.757.11-1.662.067-.412-.071-.358-.333zm15.722 0c.283-.387.195-.174.269-.636l-.089-2.209-.088-2.21a1 1 0 1 0-1.998.08l.059 1.496L12.768 11A1.25 1.25 0 0 0 11 12.768l3.377 3.376-1.496-.06a1 1 0 0 0-.08 1.999l2.758.11 1.662.067.411-.071.359-.333z" fill="currentColor"/></symbol><symbol viewBox="0 0 20 20" id="iD-icon-geolocate" xmlns="http://www.w3.org/2000/svg"><path d="M14.947 3.743c.678 0 1.435.793 1.213 1.721l-4.4 11c-.511 1.278-2.41.912-2.41-.464v-6H4c-1.413 0-1.741-1.977-.403-2.433 0 0 10.672-3.824 11.35-3.824z" fill="currentColor"/></symbol><symbol viewBox="0 0 20 20" id="iD-icon-help" xmlns="http://www.w3.org/2000/svg"><path d="M16.5 1l1 1v14l-1 1V2H5l-.5 1h11v15l-1 1H3V3l1-2h12.5zm-6.1 12.844H8.202V16H10.4v-2.156zM9.35 5.766q-.77 0-1.393.259t-1.064.721q-.441.462-.686 1.092-.245.63-.259 1.386h2.058q0-.378.084-.707.084-.329.259-.574.175-.245.448-.392.273-.147.651-.147.56 0 .875.308.315.308.315.952.014.378-.133.63-.147.252-.385.462-.238.21-.518.42t-.532.497q-.252.287-.441.693-.189.406-.231 1.008v.63h1.89v-.532q.056-.42.273-.7.217-.28.497-.497.28-.217.595-.434.315-.217.574-.525.259-.308.434-.742t.175-1.106q0-.406-.175-.875t-.581-.875q-.406-.406-1.071-.679-.665-.273-1.659-.273z" fill="currentColor"/></symbol><symbol viewBox="0 0 20 20" id="iD-icon-inspect" xmlns="http://www.w3.org/2000/svg"><path d="M10.452 3q.563 0 .963.4.399.4.399.971 0 .563-.399.962-.4.4-.972.4-.562 0-.962-.4-.4-.399-.4-.962 0-.571.4-.971t.971-.4zM8 15.744v-.729q.993-.036 1.147-.123s.145-.102.198-.493c.18-1.008.211-3.337.017-4.983a1.51 1.51 0 0 0-.11-.628q-.109-.119-.593-.137L8 8.625v-.677q2.118-.158 3.489-.747l.22.176q-.123 1.679-.123 4.887 0 1.854.061 2.241.044.272.163.351.119.08 1.156.159v.729q-1.591-.053-2.461-.053-.466 0-2.505.053z" fill="currentColor"/></symbol><symbol viewBox="0 0 20 20" id="iD-icon-layers" xmlns="http://www.w3.org/2000/svg"><path d="M9.5 3L3 6v1l6.5 3h1L17 7V6l-6.5-3h-1zM4.094 9.5L3 10v1l6.5 3h1l6.5-3v-1l-1.094-.5L10.5 12h-1L4.094 9.5zm0 4L3 14v1l6.5 3h1l6.5-3v-1l-1.094-.5L10.5 16h-1l-5.406-2.5z" fill="currentColor"/></symbol><symbol viewBox="0 0 20 20" id="iD-icon-line" xmlns="http://www.w3.org/2000/svg"><path d="M14.558 3a2.442 2.442 0 0 0-2.442 2.442c0 .246.045.478.112.702l-6.084 6.084a2.432 2.432 0 0 0-.702-.112 2.442 2.442 0 1 0 2.442 2.442c0-.246-.045-.478-.112-.702l6.084-6.084c.224.067.456.112.702.112a2.442 2.442 0 0 0 0-4.884zm0 1.465a.976.976 0 1 1 .001 1.953.976.976 0 0 1-.001-1.953zm-9.116 9.116a.978.978 0 1 1-.001 1.955.978.978 0 0 1 .001-1.955z" fill="currentColor"/></symbol><symbol viewBox="0 0 20 20" id="iD-icon-load" xmlns="http://www.w3.org/2000/svg"><path d="M16 8.606c.69 0 1.25.553 1.25 1.235v5.925c0 .681-.56 1.234-1.25 1.234H4c-.69 0-1.25-.553-1.25-1.234V9.841c0-.682.56-1.235 1.25-1.235s1.25.553 1.25 1.235v4.69h9.5v-4.69c0-.682.56-1.235 1.25-1.235z" fill="currentColor"/><path d="M10.009 12.498c.391.031.688-.249.688-.249s2.66-2.704 3.051-3.198c.34-.429.35-1.02-.056-1.388a1.015 1.015 0 0 0-1.415.056l-1.017 1.08V3.228A1.24 1.24 0 0 0 10.009 2a1.24 1.24 0 0 0-1.252 1.228v5.571l-1.016-1.08a1.015 1.015 0 0 0-1.415-.056.961.961 0 0 0-.057 1.388c.58.587 3.067 3.198 3.067 3.198s.282.218.673.249z" fill="currentColor"/></symbol><symbol viewBox="0 0 20 20" id="iD-icon-minus" xmlns="http://www.w3.org/2000/svg"><path d="M15 8.75a1.25 1.25 0 0 1 0 2.5H5a1.25 1.25 0 0 1 0-2.5h10z" fill="currentColor"/></symbol><symbol viewBox="0 0 20 20" id="iD-icon-more" xmlns="http://www.w3.org/2000/svg"><path d="M16 12a2 2 0 1 1-.001-3.999A2 2 0 0 1 16 12zm-6 0a2 2 0 1 0 .001-3.999A2 2 0 0 0 10 12zm-6 0a2 2 0 1 0 .001-3.999A2 2 0 0 0 4 12z" fill="currentColor"/></symbol><symbol viewBox="0 0 20 20" id="iD-icon-nearby" xmlns="http://www.w3.org/2000/svg"><defs><clipPath id="ceb"><path d="M9.5 4C12.543 4 15 6.457 15 9.5S12.543 15 9.5 15A5.493 5.493 0 0 1 4 9.5C4 6.457 6.457 4 9.5 4z"/></clipPath><clipPath id="cea"><path d="M9.5 4C12.543 4 15 6.457 15 9.5S12.543 15 9.5 15A5.493 5.493 0 0 1 4 9.5C4 6.457 6.457 4 9.5 4z"/></clipPath></defs><image xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAsAAAALCAYAAACprHcmAAAAAXNSR0IArs4c6QAAAQhJREFUGBlNkUluhTAQRL8nxgUSZ4AVV8m1cpucjMAOMdrm97M+UZBacrurqouy6rrux3uvz/M01HEcZts2d13Xt5ztuq72mVnnXFRKvfhijC8BaelvEVAC1iGER0gDDlrrKGUgMNz33coRsOEsAobtNs/zIIpKQNEYEyEA+JCc2HDSGzC2KArPepSE6Muy9DTjOFbTNJWimIDcmb7vv7Isi9ip69o3TXMMw/ArM8VqLPzZEGU831jAUlVVV9u22zzPJWr0CDFPnvlBUsGS2Lggobosi4Mg9yqBYVlro1gJFKRPdBoCiUAQTEjRAXgKomxinmIkd2zSp0dhxb+6UZaPOJUkxcMk8BvNntGWzlp0zgAAAABJRU5ErkJggg==" preserveAspectRatio="none" x="4" y="4" width="11" height="11" clip-path="url(#cea)"/><g clip-path="url(#ceb)"><path d="M15 9.5A5.5 5.5 0 0 1 9.5 15V9.5zM9.5 16V9.5L14 14zm0-6.5V15A5.5 5.5 0 0 1 4 9.5zm0 0V4A5.5 5.5 0 0 0 4 9.5zm-6.688 0L5.5 14l4-4.5zM9.5 3v6.5L5 5z" fill="#1A1A1A" opacity=".2"/></g><path d="M9 4h1v6H9zm.5-1A6.508 6.508 0 0 0 3 9.5C3 13.084 5.916 16 9.5 16S16 13.084 16 9.5 13.084 3 9.5 3zm0-1a7.5 7.5 0 1 1 0 15 7.5 7.5 0 0 1 0-15z" fill="#1A1A1A"/></symbol><symbol viewBox="0 0 20 20" id="iD-icon-no" xmlns="http://www.w3.org/2000/svg"><path d="M10 2a8 8 0 1 0 0 16 8 8 0 0 0 0-16zm0 2.065A5.935 5.935 0 0 1 15.935 10a5.91 5.91 0 0 1-1.08 3.403L6.597 5.145A5.91 5.91 0 0 1 10 4.065zM5.145 6.597l8.258 8.258A5.91 5.91 0 0 1 10 15.935 5.935 5.935 0 0 1 4.065 10a5.91 5.91 0 0 1 1.08-3.403z" fill="currentColor"/></symbol><symbol viewBox="-20 -20 552 552" id="iD-icon-note" xmlns="http://www.w3.org/2000/svg"><path stroke="inherit" stroke-width="inherit" fill="currentColor" d="M448 0H64C28.7 0 0 28.7 0 64v288c0 35.3 28.7 64 64 64h96v84c0 9.8 11.2 15.5 19.1 9.7L304 416h144c35.3 0 64-28.7 64-64V64c0-35.3-28.7-64-64-64z"/></symbol><symbol viewBox="0 0 20 20" id="iD-icon-out-link" xmlns="http://www.w3.org/2000/svg"><path d="M10.13 3.582s-.064.302-.089.577c-.025.274-.07.977-.008 1.337.062.361.146.616.146.616H4.932a.373.373 0 0 0-.282.117.374.374 0 0 0-.12.287v7.308c0 .116.035.202.118.284.084.084.171.12.284.12h8.522a.385.385 0 0 0 .292-.123.361.361 0 0 0 .12-.281v-3.7l.802.606c.177.134.371.24.581.318.216.078.435.121.662.127l.485.014v2.635c0 .402-.081.786-.243 1.148a3.077 3.077 0 0 1-1.553 1.55 2.812 2.812 0 0 1-1.146.236H4.932c-.399 0-.783-.078-1.146-.236a2.94 2.94 0 0 1-.93-.636 3.141 3.141 0 0 1-.62-.921A2.82 2.82 0 0 1 2 13.824V6.516c0-.4.078-.782.235-1.147.156-.357.364-.665.625-.927.261-.261.572-.469.926-.622a2.818 2.818 0 0 1 1.146-.238h5.198zm6.526 0h-4.565a.964.964 0 0 0-.673.271.885.885 0 0 0-.276.729l-.003.634c.001.26.091.496.269.678a.929.929 0 0 0 .683.281h.927l-5.253 5.268a.902.902 0 0 0-.276.684.96.96 0 0 0 .273.668l.627.635a.974.974 0 0 0 .686.275.933.933 0 0 0 .674-.272l5.266-5.252v.92a.943.943 0 0 0 .959.95h.682c.217.024.465-.069.66-.258a.942.942 0 0 0 .292-.692V4.534c0-.25-.099-.48-.279-.663a.921.921 0 0 0-.673-.289z" fill="currentColor"/></symbol><symbol viewBox="0 0 20 20" id="iD-icon-plus" xmlns="http://www.w3.org/2000/svg"><path d="M10 3.75c.69 0 1.25.56 1.25 1.25v3.75H15a1.25 1.25 0 0 1 0 2.5h-3.75V15a1.25 1.25 0 0 1-2.5 0v-3.75H5a1.25 1.25 0 0 1 0-2.5h3.75V5c0-.69.56-1.25 1.25-1.25z" fill="currentColor"/></symbol><symbol viewBox="0 0 20 20" id="iD-icon-point" xmlns="http://www.w3.org/2000/svg"><path d="M10 3C6.686 3 4 5.612 4 8.833 4 12.055 10 17 10 17s6-4.945 6-8.167C16 5.612 13.314 3 10 3zm.187 3.5c1.326 0 2.4 1.045 2.4 2.333 0 1.289-1.074 2.334-2.4 2.334-1.325 0-2.4-1.045-2.4-2.334 0-1.288 1.075-2.333 2.4-2.333z" fill="currentColor"/></symbol><symbol viewBox="0 0 20 20" id="iD-icon-redo" xmlns="http://www.w3.org/2000/svg"><path d="M12.928 3.208c.254.225 2.844 2.625 3.25 3a1 1 0 0 1 0 1.469l-3.25 3a1 1 0 1 1-1.356-1.469l1.089-1.006c-1.302.017-1.708.017-3.075.231-2.044.428-3.086 1.333-3.086 3.01 0 1.97 1.091 2.842 3.376 3.141 3.117.096 3.209.095 3.374.095a1.25 1.25 0 1 1 0 2.5c-1.97.027-2.762.007-3.698-.116C6.16 16.619 4 14.892 4 11.443c0-3.076 1.999-4.814 5.074-5.457 0 0 1.895-.283 3.569-.287-.333-.349-.721-.662-1.071-1.022-.422-.432-.446-.954-.057-1.413.306-.36 1.105-.329 1.413-.056z" fill="currentColor"/></symbol><symbol viewBox="0 0 20 20" id="iD-icon-relation" xmlns="http://www.w3.org/2000/svg"><path d="M14.5 3a2.5 2.5 0 1 1 0 5c-1.011-.03-1.849-.571-2.24-1.5H8.029l3.998 3.748c.625-.263.3-.18.973-.248a2.5 2.5 0 1 1-2.5 2.5c.061-.605-.015-.348.169-.784L6.5 7.808v4.451c.99.334 1.403 1.275 1.5 2.241a2.5 2.5 0 1 1-5 0c.03-1.011.571-1.849 1.5-2.24V7.74C3.51 7.407 3.097 6.465 3 5.5A2.5 2.5 0 0 1 5.5 3c1.011.03 1.85.571 2.24 1.5h4.52c.333-.99 1.275-1.403 2.24-1.5zm-9 10.5a1 1 0 1 0 0 2 1 1 0 0 0 0-2zm7.5-2a1 1 0 1 0 0 2 1 1 0 0 0 0-2zm-7.5-7a1 1 0 1 0 0 2 1 1 0 0 0 0-2zm9 0a1 1 0 1 0 0 2 1 1 0 0 0 0-2z" fill="currentColor"/></symbol><symbol viewBox="0 0 20 20" id="iD-icon-save" xmlns="http://www.w3.org/2000/svg"><path d="M16 8.606c.69 0 1.25.553 1.25 1.235v5.925c0 .681-.56 1.234-1.25 1.234H4c-.69 0-1.25-.553-1.25-1.234V9.841c0-.682.56-1.235 1.25-1.235s1.25.553 1.25 1.235v4.69h9.5v-4.69c0-.682.56-1.235 1.25-1.235z" fill="currentColor"/><path d="M10.009 2.002c.391-.031.688.249.688.249s2.66 2.704 3.051 3.198c.34.429.35 1.02-.056 1.388a1.015 1.015 0 0 1-1.415-.056l-1.017-1.08v5.571a1.24 1.24 0 0 1-1.251 1.228 1.24 1.24 0 0 1-1.252-1.228V5.701l-1.016 1.08a1.015 1.015 0 0 1-1.415.056.961.961 0 0 1-.057-1.388c.58-.587 3.067-3.198 3.067-3.198s.282-.218.673-.249z" fill="currentColor"/></symbol><symbol viewBox="0 0 20 20" id="iD-icon-search" xmlns="http://www.w3.org/2000/svg"><path d="M8.66 2.75a5.91 5.91 0 0 1 5.909 5.91c-.192 1.908-.134 1.73-.958 3.183l3.273 3.273a1.25 1.25 0 0 1-1.768 1.768l-3.273-3.273c-1.546.668-1.732.934-3.183.958-3.06.052-5.91-2.646-5.91-5.909a5.91 5.91 0 0 1 5.91-5.91zm0 2.5a3.41 3.41 0 1 0 0 6.82 3.41 3.41 0 0 0 0-6.82z" fill="currentColor"/></symbol><symbol viewBox="0 0 20 20" id="iD-icon-sidebar-left" xmlns="http://www.w3.org/2000/svg"><g fill="none" fill-rule="evenodd"><rect stroke="currentColor" x=".5" y="3.5" width="19" height="13" rx="2"/><path fill="currentColor" d="M2 5h5v10H2z"/></g></symbol><symbol viewBox="0 0 20 20" id="iD-icon-sidebar-right" xmlns="http://www.w3.org/2000/svg"><g fill="none" fill-rule="evenodd"><rect stroke="currentColor" x=".5" y="3.5" width="19" height="13" rx="2"/><path fill="currentColor" d="M13 5h5v10h-5z"/></g></symbol><symbol viewBox="0 0 20 20" id="iD-icon-translate" xmlns="http://www.w3.org/2000/svg"><path d="M14.429 2.256c.25-.004.431.128.433.392l.009 1.628c2.098-.297 2.664-.377 2.701-.384.237-.041.42.029.478.296l.172.898c.051.239-.037.465-.303.51l-3.035.524.01 1.431c1.992-.003 3.664.853 4.518 2.674.778 2.131-.357 4.804-2.732 6.44-.164.113-.412.123-.569-.066l-.572-.699a.38.38 0 0 1 .082-.553c1.222-.915 2.923-3.073 2.084-4.723-.952 2.339-2.776 4.028-5.355 4.011-1.434-.175-2.362-1.199-2.362-2.728 0-1.056.43-2.111 1.18-2.899.539-.59 1.257-.955 2.004-1.205l-.024-1.382-2.404.415c-.228.039-.414-.08-.459-.292a156.61 156.61 0 0 0-.191-1.08c-.056-.257.121-.393.34-.43l2.684-.464-.027-1.907c-.005-.237.164-.389.394-.392l.944-.014zm-1.223 7.33c-1.128.617-1.449 1.674-1.445 2.321.005.624.218 1.034.65 1.088.638.007.353.044.859-.069l-.064-3.34zm1.697-.39l-.032 2.877c1.223-.589 1.879-2.495 1.63-2.577-.501-.215-.89-.274-1.598-.3zM5.301 7.603l1.003 3.64H4.297l1.004-3.64zm.897-2.306H4.403a.428.428 0 0 0-.417.306L.769 15.763c-.066.211.06.396.296.396H2.66c.172 0 .296-.086.344-.244l.873-2.876h2.847l.874 2.877c.048.157.171.243.344.243h1.595c.236 0 .362-.186.296-.396L6.615 5.603c-.21-.298-.07-.196-.417-.306z" fill="currentColor"/></symbol><symbol viewBox="0 0 20 20" id="iD-icon-undo" xmlns="http://www.w3.org/2000/svg"><path d="M7.572 3.208c-.254.225-2.844 2.625-3.25 3a1 1 0 0 0 0 1.469l3.25 3a1 1 0 1 0 1.356-1.469L7.839 8.202c1.302.017 1.708.017 3.075.231C12.958 8.861 14 9.766 14 11.443c0 1.97-1.091 2.842-3.376 3.141-3.117.096-3.209.095-3.374.095a1.25 1.25 0 1 0 0 2.5c1.97.027 2.761.007 3.698-.116 3.392-.444 5.552-2.171 5.552-5.62 0-3.076-1.999-4.814-5.074-5.457 0 0-1.895-.283-3.569-.287.333-.349.721-.662 1.071-1.022.422-.432.446-.954.057-1.413-.306-.36-1.105-.329-1.413-.056z" fill="currentColor"/></symbol><symbol viewBox="0 0 20 20" id="iD-icon-up" xmlns="http://www.w3.org/2000/svg"><path d="M10 6c.453-.016.695.093.949.336.254.242 5.25 5.855 6 6.691a1.158 1.158 0 0 1-.136 1.685 1.29 1.29 0 0 1-1.762-.129C11.367 10.474 10.683 9.763 10 9c-4.301 4.797-4.301 4.746-5.051 5.583a1.29 1.29 0 0 1-1.762.129 1.158 1.158 0 0 1-.136-1.685c5.25-5.855 5.715-6.371 6-6.691.261-.227.496-.32.949-.336z" fill="currentColor"/></symbol><symbol viewBox="0 0 20 20" id="iD-icon-vertex" xmlns="http://www.w3.org/2000/svg"><path d="M10 7a3 3 0 1 1 0 6 3 3 0 0 1 0-6zm0 1.8a1.2 1.2 0 1 0 0 2.4 1.2 1.2 0 0 0 0-2.4z" fill="currentColor"/></symbol><symbol viewBox="0 0 100 100" id="iD-logo-features" xmlns="http://www.w3.org/2000/svg"><path d="M67.531 11c-8.284 0-15 6.716-15 15 0 8.284 15 21 15 21s15-12.716 15-21-6.715-15-15-15zM68 20a6 6 0 1 1 0 12 6 6 0 0 1 0-12zM83.5 48a7.5 7.5 0 0 0-7.5 7.5c0 .756.136 1.468.344 2.156L57.656 76.344c-.688-.208-1.4-.344-2.156-.344a7.5 7.5 0 1 0 7.5 7.5c0-.756-.136-1.468-.344-2.156l18.688-18.688c.688.208 1.4.344 2.156.344a7.5 7.5 0 0 0 0-15zm0 4.5a3 3 0 1 1 0 6 3 3 0 0 1 0-6zm-28 28a3 3 0 1 1 0 6 3 3 0 0 1 0-6zM16.5 33A7.5 7.5 0 0 0 9 40.5c0 2.873 1.628 5.365 4 6.625v13.75c-2.372 1.26-4 3.752-4 6.625a7.5 7.5 0 0 0 7.5 7.5c2.873 0 5.365-1.628 6.625-4h13.75c1.26 2.372 3.752 4 6.625 4a7.5 7.5 0 0 0 7.5-7.5c0-2.873-1.628-5.365-4-6.625v-13.75c2.372-1.26 4-3.752 4-6.625a7.5 7.5 0 0 0-7.5-7.5c-2.908 0-5.412 1.675-6.656 4.094L36.656 37H23.125c-1.26-2.372-3.752-4-6.625-4zm0 4.5a3 3 0 1 1 0 6 3 3 0 0 1 0-6zm27 0a3 3 0 1 1 0 6 3 3 0 0 1 0-6zM23.125 44h13.75A7.59 7.59 0 0 0 40 47.125v13.75A7.59 7.59 0 0 0 36.875 64h-13.75A7.59 7.59 0 0 0 20 60.875v-13.75A7.59 7.59 0 0 0 23.125 44zM16.5 64.5a3 3 0 1 1 0 6 3 3 0 0 1 0-6zm27 0a3 3 0 1 1 0 6 3 3 0 0 1 0-6z" fill="currentColor"/></symbol><symbol viewBox="0 0 100 100" id="iD-logo-osm" xmlns="http://www.w3.org/2000/svg"><path d="M4 5l7.813 20.5L4 46l7.813 20.531L4 87.031l4.813 1.844 26.031-26.063 4.687.719 5.688-5.687c-3.349-3.88-5.88-8.512-7.25-13.625l2.687-2.157a31.357 31.357 0 0 1-.718-6.593c0-11.278 6.012-21.192 15-26.688L45.031 5 24.5 12.813 4 5zm67.094 4.313c-14.36 0-26 11.64-26 25.999 0 14.36 11.64 26 26 26 14.359 0 26-11.64 26-26 0-14.359-11.641-25.999-26-25.999zm20.062 50.156c-5.421 4.518-12.38 7.25-19.968 7.25-2.258 0-4.471-.261-6.594-.719l-2.156 2.656c-4.856-1.301-9.307-3.589-13.063-6.687L43.5 67.844l.719 4.344-21.813 21.843 2.094.813 20.531-7.813 20.5 7.813 20.5-7.813 7.813-20.5-2.688-7.062z" fill="currentColor"/></symbol><symbol viewBox="0 0 100 100" id="iD-logo-reset" xmlns="http://www.w3.org/2000/svg"><path d="M20 17l-3 3v5l25 25-25 25v5l3 3h5l25-25 25 25h5l3-3v-5L58 50l25-25v-5l-3-3h-5L50 42 25 17h-5z" fill="currentColor"/></symbol><symbol viewBox="0 0 100 100" id="iD-logo-restore" xmlns="http://www.w3.org/2000/svg"><path d="M50 11l-2 2v5.063C29.66 19.114 15 34.406 15 53c0 19.271 15.729 35 35 35s35-15.729 35-35c0-11.666-5.767-22.037-14.594-28.406l-7.187 7.187C70.301 36.179 75 43.999 75 53c0 13.866-11.134 25-25 25S25 66.866 25 53a24.91 24.91 0 0 1 23-24.906V33l2 2h3l12-12-12-12h-3z" fill="currentColor"/></symbol><symbol viewBox="0 0 100 100" id="iD-logo-walkthrough" xmlns="http://www.w3.org/2000/svg"><path d="M5 8v74.656L27.5 93 50 83l22.5 10L95 82.656V8L72.5 18 50 8 27.5 18 5 8zm57.406 23.594L68 37.188l5.594-5.594 2.462 3.162L70.812 40l5.594 5.594-3.162 2.462L68 42.812l-5.594 5.594-3.087-2.975L65.188 40l-5.594-5.594zM37.219 43.906c3.029.265 6.039 1.325 8.375 3.313L42.688 50c-1.698-1.267-3.776-1.938-5.875-2.125l.406-3.969zm-4.844.375c.234 1.256 1.333 2.866 1.281 3.813-1.979 1.001-3.282 2.996-4.406 4.75l-3.149-2.517c1.596-2.427 3.51-4.892 6.274-6.046zm33.469 6.281l3.687 1.594c-.855 2.635-2.059 5.2-3.875 7.313l-2.781-2.907c1.38-1.775 2.315-3.857 2.969-6zm-17.219.094c1.53 2.213 2.46 4.763 3.844 7.063L48.875 59.5c-1.262-2.168-2.153-4.558-3.594-6.625l3.344-2.219zm-24.75 3.813l3.438 2.031c-.947 2.154-1.829 4.383-2.532 6.594l-3.668-1.662c.791-2.367 1.69-4.708 2.762-6.963zm36.25 4.625l1.6 3.681c-2.719 1.522-6.257 2.083-9.131.663l2.168-3.412c1.769.544 3.846.007 5.363-.932z" fill="currentColor"/></symbol><symbol viewBox="0 0 60 60" id="iD-multipolygon" xmlns="http://www.w3.org/2000/svg"><path d="M21 21h18v18H21z" fill="#FFF"/><path d="M21 21h18v18H21z" stroke="#AAA" stroke-dasharray="2,1" fill="none"/><path d="M42 20.5a3.5 3.5 0 1 1-7 0 3.5 3.5 0 0 1 7 0z" opacity=".2"/><path d="M41 20.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0z" fill="#FFF"/><path d="M24 38.5a3.5 3.5 0 1 1-7 0 3.5 3.5 0 0 1 7 0z" opacity=".2"/><path d="M23 38.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0z" fill="#FFF"/><path d="M24 20.5a3.5 3.5 0 1 1-7 0 3.5 3.5 0 0 1 7 0z" opacity=".2"/><path d="M23 20.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0z" fill="#FFF"/><path d="M42 38.5a3.5 3.5 0 1 1-7 0 3.5 3.5 0 0 1 7 0z" opacity=".2"/><path d="M41 38.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0z" fill="#FFF"/></symbol><symbol viewBox="0 0 20 20" id="iD-operation-circularize" xmlns="http://www.w3.org/2000/svg"><path d="M7.026 2.563c-1.329.531-2.444 1.419-3.312 2.531.071.018.15.009.219.031.52.169.941.49 1.281.875A6.16 6.16 0 0 1 7.37 4.375a2.953 2.953 0 0 1-.375-1.406c0-.14.012-.271.031-.406zm5.938 0c.019.135.031.266.031.406 0 .509-.147.984-.375 1.406A6.16 6.16 0 0 1 14.776 6c.34-.385.761-.706 1.282-.875.067-.022.146-.039.218-.062a7.967 7.967 0 0 0-3.312-2.5zM2.026 10.781a7.993 7.993 0 0 0 1.344 3.688c.054-.096.122-.191.188-.281.298-.411.69-.723 1.125-.938a6.262 6.262 0 0 1-.844-2.437 3.026 3.026 0 0 1-1.781-.032c-.009-.003-.023.003-.032 0zm15.907 0a3.021 3.021 0 0 1-1.782.031 6.276 6.276 0 0 1-.843 2.438c.438.204.821.519 1.125.938.065.09.133.185.187.281a7.993 7.993 0 0 0 1.344-3.688c-.009.003-.022-.003-.031 0zm-8.938 5.344a2.983 2.983 0 0 1-.562 1.594c-.027.037-.066.058-.094.093.54.116 1.082.188 1.656.188.574 0 1.116-.072 1.656-.188-.028-.035-.066-.056-.093-.093a2.976 2.976 0 0 1-.563-1.594 6.095 6.095 0 0 1-1 .094c-.345 0-.671-.041-1-.094z" fill="currentColor"/><path d="M9.995.956a2 2 0 1 0-.001 3.999A2 2 0 0 0 9.995.956zm-7.156 5a2.009 2.009 0 0 1 2.062 2.625A2.009 2.009 0 0 1 2.37 9.862a2.01 2.01 0 0 1-1.281-2.531 2.024 2.024 0 0 1 1.75-1.375zm13.937 0a2.01 2.01 0 0 1 .844 3.906 2.01 2.01 0 0 1-2.531-1.281A2.01 2.01 0 0 1 16.37 6.05a2.11 2.11 0 0 1 .406-.094zm-10.718 8a2.05 2.05 0 0 1 1.125.375 2.022 2.022 0 0 1 .437 2.812 2.021 2.021 0 0 1-2.812.438 2.022 2.022 0 0 1-.438-2.813 1.988 1.988 0 0 1 1.688-.812zm7.875 0a1.988 1.988 0 0 1 1.687.812 2.023 2.023 0 0 1-.437 2.813 2.022 2.022 0 0 1-2.813-.438 2.021 2.021 0 0 1 .438-2.812c.335-.243.74-.362 1.125-.375z" fill="inherit"/></symbol><symbol viewBox="0 0 20 20" id="iD-operation-continue" xmlns="http://www.w3.org/2000/svg"><path d="M14 4a6 6 0 1 0 0 12 6 6 0 0 0 0-12zm-1 2h2v3h3v2h-3v3h-2v-3h-3V9h3V6zM5 9v2h2V9H5z" fill="currentColor"/><path d="M2 8a2 2 0 1 0-.001 3.999A2 2 0 0 0 2 8z" fill="inherit"/></symbol><symbol viewBox="0 0 20 20" id="iD-operation-copy" xmlns="http://www.w3.org/2000/svg"><path d="M16 7a1 1 0 0 1 1 1v8a1 1 0 0 1-1 1H8a1 1 0 0 1-1-1V8a1 1 0 0 1 1-1h8zm-1 2H9v6h6V9z" fill="inherit"/><path d="M11 1a1 1 0 0 1 1 1v4h-2V3H4v6h2v2H3a1 1 0 0 1-1-1V2a1 1 0 0 1 1-1h8z" fill="inherit"/></symbol><symbol viewBox="0 0 20 20" id="iD-operation-delete" xmlns="http://www.w3.org/2000/svg"><path d="M12.156 14.787c0 .091.035.167.102.228.067.06.154.09.257.09h.36c.098 0 .182-.03.251-.086a.285.285 0 0 0 .108-.232v-5.29a.31.31 0 0 0-.108-.237.348.348 0 0 0-.251-.101h-.36a.348.348 0 0 0-.251.101.31.31 0 0 0-.108.237zm-1.619-5.29a.307.307 0 0 0-.104-.237.363.363 0 0 0-.253-.101h-.36a.324.324 0 0 0-.244.101.33.33 0 0 0-.096.237v5.29c0 .091.031.167.093.228.061.06.142.09.247.09h.36c.096 0 .18-.03.253-.086a.282.282 0 0 0 .104-.232zM8.672 4.964a91.81 91.81 0 0 1 2.676 0c0-.069.005-.135.019-.202a.533.533 0 0 0 0-.187v-.128a2.849 2.849 0 0 0-.682-.095 27.3 27.3 0 0 0-1.374 0 2.8 2.8 0 0 0-.676.095v.128c0 .057.002.122.01.191.006.07.015.135.027.198m-.828 4.533a.316.316 0 0 0-.106-.237.356.356 0 0 0-.253-.101h-.358c-.1 0-.18.034-.244.101a.323.323 0 0 0-.098.237v5.29a.3.3 0 0 0 .098.228.34.34 0 0 0 .244.09h.358c.098 0 .182-.03.253-.086a.29.29 0 0 0 .106-.232zm2.161-1.312c.791-.011 1.581-.029 2.372-.05a27.15 27.15 0 0 0 2.374-.173v7.212c0 .361-.136.674-.405.934a1.364 1.364 0 0 1-.985.392H6.639c-.386 0-.718-.128-.999-.389a1.223 1.223 0 0 1-.416-.937V7.962c.753.094 1.502.153 2.243.182a61.66 61.66 0 0 0 2.244.041zM16 6.076v.594c-.227.115-.603.207-1.131.28a22.34 22.34 0 0 1-1.706.162c-.609.04-1.203.062-1.779.065-.576.006-1.035.009-1.379.009-.338 0-.797-.003-1.379-.009a29.745 29.745 0 0 1-1.791-.065 24.075 24.075 0 0 1-1.694-.158c-.522-.07-.895-.164-1.122-.284A2.139 2.139 0 0 1 4 6.371v-.607c0-.102.006-.207.019-.311.152-.077.371-.148.653-.202.281-.053.58-.098.899-.133.319-.034.634-.059.943-.077.312-.016.552-.032.723-.043-.05-.47-.014-.837.105-1.104.121-.262.302-.46.548-.588.244-.13.545-.214.905-.252.359-.036.76-.054 1.21-.054.338 0 .672.007 1.006.025.335.018.632.078.897.175.264.102.473.259.63.471.156.213.235.513.235.904v.207c0 .07-.008.142-.017.216.176.011.418.027.724.043.307.018.622.043.945.077.321.035.626.08.912.133.29.054.511.125.663.202z" fill="inherit"/></symbol><symbol viewBox="0 0 20 20" id="iD-operation-detach-node" xmlns="http://www.w3.org/2000/svg"><path d="M9.414 4.929v1.414l1.414 1.414-1.547 1.548c.295.142.596.33.84.574.252.251.432.536.574.84l1.548-1.547 1.414 1.414h1.414V4.929z" fill="currentColor"/><path d="M8 9.987a2 2 0 1 0 0 4 2 2 0 0 0 0-4z" fill="inherit"/></symbol><symbol viewBox="0 0 20 20" id="iD-operation-disconnect" xmlns="http://www.w3.org/2000/svg"><path d="M4 6l-4 4 4 4 1-1v-2h2.188A2.912 2.912 0 0 1 7 10c0-.345.08-.691.188-1H5V7L4 6zm12 0l-1 1v2h-2.188c.108.309.188.655.188 1 0 .356-.074.684-.188 1H15v2l1 1 4-4-4-4z" fill="currentColor"/><path d="M10 7.987a2 2 0 1 0 0 4 2 2 0 0 0 0-4z" fill="inherit"/></symbol><symbol viewBox="0 0 20 20" id="iD-operation-layers" xmlns="http://www.w3.org/2000/svg"><path d="M16.87 16v-2h-14v2h14zm.13-5H3V9h14v2zm0-5H3V4h14v2z" fill="inherit"/></symbol><symbol viewBox="0 0 20 20" id="iD-operation-merge" xmlns="http://www.w3.org/2000/svg"><path d="M16.143 8.488c.236 0 .438.084.606.25a.825.825 0 0 1 .251.605v1.314a.822.822 0 0 1-.251.605.825.825 0 0 1-.606.251h-4.63v4.613c0 .25-.084.457-.25.623a.83.83 0 0 1-.607.251H9.344a.83.83 0 0 1-.607-.251.818.818 0 0 1-.25-.606v-4.63H3.876a.858.858 0 0 1-.625-.241.816.816 0 0 1-.251-.615V9.343c0-.236.084-.438.251-.605a.826.826 0 0 1 .606-.25h4.63V3.876c0-.25.08-.457.24-.625A.831.831 0 0 1 9.344 3h1.312c.236 0 .44.086.607.251.166.168.25.37.25.606v4.631z" fill="inherit"/></symbol><symbol viewBox="0 0 20 20" id="iD-operation-move" xmlns="http://www.w3.org/2000/svg"><path d="M10 1L7 4l1 1h1v2h2V5h1l1-1-3-3zM4 7l1 1v1h2v2H5v1l-1 1-3-3 3-3zm12 0l3 3-3 3-1-1v-1h-2V9h2V8l1-1zm-7 6h2v2h1l1 1-3 3-3-3 1-1h1v-2z" fill="currentColor"/><path d="M10 8a2 2 0 1 0-.001 3.999A2 2 0 0 0 10 8z" fill="inherit"/></symbol><symbol viewBox="0 0 20 20" id="iD-operation-orthogonalize" xmlns="http://www.w3.org/2000/svg"><path d="M7 15h6v2H7zm-4-2h2V7H3zm12 0h2V7h-2zM7 5h6V3H7z" fill="currentColor"/><path d="M4 2a2 2 0 1 0-.001 3.999A2 2 0 0 0 4 2zm0 12a2 2 0 1 1 .001 3.999A2 2 0 0 1 4 14zm12 0a2 2 0 1 1 .001 3.999A2 2 0 0 1 16 14zm0-12a2 2 0 1 1 .001 3.999A2 2 0 0 1 16 2z" fill="inherit"/></symbol><symbol viewBox="0 0 20 20" id="iD-operation-paste" xmlns="http://www.w3.org/2000/svg"><path d="M12 11a.5.5 0 0 1 .5.5v1h1a.5.5 0 0 1 0 1h-1v1a.5.5 0 0 1-1 0v-1h-1a.5.5 0 0 1 0-1h1v-1a.5.5 0 0 1 .5-.5z" fill="inherit"/><path d="M16 8a1 1 0 0 1 1 1v8a1 1 0 0 1-1 1H8a1 1 0 0 1-1-1V9a1 1 0 0 1 1-1h8zm-1 2H9v6h6v-6z" fill="inherit"/><path d="M8.5 1.5c.76.154.443-.022.966.5H12a1 1 0 0 1 1 1v4h-2V4H9.466c-.523.523-.206.347-.966.5h-2c-.76-.153-.443.023-.966-.5H4v10h2v2H3a1 1 0 0 1-1-1V3a1 1 0 0 1 1-1h2.534c.523-.523.206-.346.966-.5h2z" fill="inherit"/></symbol><symbol viewBox="0 0 20 20" id="iD-operation-reflect-long" xmlns="http://www.w3.org/2000/svg"><path d="M9 18h2V2H9v16z" fill="currentColor"/><path d="M13 14V6h5v2h-3v6M5 14V8H2V6h5v8" fill="inherit"/></symbol><symbol viewBox="0 0 20 20" id="iD-operation-reflect-short" xmlns="http://www.w3.org/2000/svg"><path d="M9 14h2V5H9v9z" fill="currentColor"/><path d="M7 7H0v5h2V9h5m6 0h5v3h2V7h-7" fill="inherit"/></symbol><symbol viewBox="0 0 20 20" id="iD-operation-reverse" xmlns="http://www.w3.org/2000/svg"><path d="M8 5l-4 5 4 5h2v-1l-3.5-4L10 6V5H8zm6 0h2v1l-3.5 4 3.5 4v1h-2l-4-5 4-5z" fill="inherit"/></symbol><symbol viewBox="0 0 20 20" id="iD-operation-rotate" xmlns="http://www.w3.org/2000/svg"><path d="M10 1L9 2v1.062A8 8 0 1 0 18 11a7.95 7.95 0 0 0-2.875-6.125l-1.406 1.406A5.986 5.986 0 0 1 16 11a6 6 0 1 1-12 0 5.982 5.982 0 0 1 5-5.906V6l1 1 3-3-3-3z" fill="currentColor"/><path d="M10 9a2 2 0 1 0-.001 3.999A2 2 0 0 0 10 9z" fill="inherit"/></symbol><symbol viewBox="0 0 20 20" id="iD-operation-simplify" xmlns="http://www.w3.org/2000/svg"><path d="M9 7.5V11H8l-1 1 3 3 3-3-1-1h-1V9.5c-1.7-.85-2-2-2-2z" fill="currentColor"/><path d="M8 2c-1.333 0-2.219.781-2.719 1.281-.5.5-.614.719-1.281.719H3v2h1c1.333 0 2.219-.781 2.719-1.281C7.219 4.219 7.333 4 8 4c.167 0 .206.009.406.25.201.241.438.688.688 1.188.25.5.513 1.053.937 1.562.425.509 1.136 1 1.969 1 1.333 0 2.219-.781 2.719-1.281.5-.5.614-.719 1.281-.719h1V4h-1c-1.333 0-2.219.781-2.719 1.281-.5.5-.614.719-1.281.719-.167 0-.206-.009-.406-.25-.201-.241-.438-.688-.688-1.188-.25-.5-.513-1.053-.937-1.562C9.544 2.491 8.833 2 8 2zM3 16h14v2H3v-2z" fill="inherit"/></symbol><symbol viewBox="0 0 20 20" id="iD-operation-smooth" xmlns="http://www.w3.org/2000/svg"><path d="M9 5v3H8L7 9l3 3 3-3-1-1h-1V5H9z" fill="currentColor"/><path d="M12 18c1.333 0 2.219-.781 2.719-1.281.5-.5.614-.719 1.281-.719h1v-2h-1c-1.333 0-2.219.781-2.719 1.281-.5.5-.614.719-1.281.719-.167 0-.206-.009-.406-.25-.201-.241-.438-.688-.688-1.188-.25-.5-.513-1.053-.937-1.562-.425-.509-1.136-1-1.969-1-1.333 0-2.219.781-2.719 1.281-.5.5-.614.719-1.281.719H3v2h1c1.333 0 2.219-.781 2.719-1.281.5-.5.614-.719 1.281-.719.167 0 .206.009.406.25.201.241.438.688.688 1.188.25.5.513 1.053.937 1.562.425.509 1.136 1 1.969 1zm5-14H3V2h14v2z" fill="inherit"/></symbol><symbol viewBox="0 0 20 20" id="iD-operation-split" xmlns="http://www.w3.org/2000/svg"><path d="M4 5C3 5 2 6 2 7v2h3l2 1-2 1H2v2c0 1 1 2 2 2h1c2 0 2.487-.974 3-2l1-2 9-5s0-1-2-1L8.969 8.906 8 7c-.494-.988-1-2-3-2zm0 1h2l1 2H3V7c0-1.013 1-1 1-1zm8.094 4.719l-2 1L16 15c2 0 2-1 2-1zM3 12h4l-1 2H4s-1 0-1-1z" fill="inherit"/></symbol><symbol viewBox="0 0 20 20" id="iD-operation-straighten" xmlns="http://www.w3.org/2000/svg"><path d="M5 9h2v2H5zm8 2h2V9h-2z" fill="currentColor"/><path d="M2 8a2 2 0 1 0-.001 3.999A2 2 0 0 0 2 8zm8 0a2 2 0 1 1 .001 3.999A2 2 0 0 1 10 8zm8 0a2 2 0 1 1 .001 3.999A2 2 0 0 1 18 8z" fill="inherit"/></symbol><symbol viewBox="0 0 60 60" id="iD-other-line" xmlns="http://www.w3.org/2000/svg"><path d="M49.5 39a2.5 2.5 0 1 1 0 5c-.93.002-1.387-.416-2-1.029V43h-35v-.029c-.504.692-1.184.947-2 1.029a2.5 2.5 0 1 1 0-5c.93-.002 1.387.416 2 1.029V40h35v.029c.504-.693 1.184-.947 2-1.029z" fill="inherit"/><path d="M47.05 41l-.05.5.05.5h-34.1l.05-.5-.05-.5h34.1z" fill="currentColor"/><path d="M51 41.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 51 41.5zM12 41.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 12 41.5z" fill="#FFF"/><path d="M22.375 36l3-11 3-11h4l3 11 3 11z" fill="#989898"/></symbol><symbol viewBox="0 0 60 60" id="iD-pipeline-line" xmlns="http://www.w3.org/2000/svg"><path d="M16.5 15c-1.381 0-2.5 2.239-2.5 5s1.119 5 2.5 5H27V15H16.5zM31 15v10h14.5V15H31z" fill="#B5B5B5"/><path d="M48 20c0 2.761-1.119 5-2.5 5S43 22.761 43 20s1.119-5 2.5-5 2.5 2.239 2.5 5z" fill="#989898"/><path d="M28 12v14l-2 10h2l1.594-8h4.812L36 36h2l-2-10h-6V12h-2zm6 0v2h2v-2h-2zm-12 3c-1 0-2.5 2.239-2.5 5s1.5 5 2.5 5h2c-1.381 0-3-2.239-3-5s1.619-5 3-5h-2zm15 0c-1 0-2.5 2.239-2.5 5s1.5 5 2.5 5h2c-1.381 0-3-2.239-3-5s1.619-5 3-5h-2zm8.5 0c-1.381 0-2.5 2.239-2.5 5s1.119 5 2.5 5 2.5-2.239 2.5-5-1.119-5-2.5-5z" fill="#989898"/><path d="M49.5 39a2.5 2.5 0 1 1 0 5c-1.424-.07-1.944-.793-2.45-2h-34.1c-.359 1.231-1.197 1.874-2.45 2a2.5 2.5 0 1 1 0-5c1.424.069 1.943.793 2.45 2h34.1c.359-1.232 1.197-1.874 2.45-2z" fill="currentColor"/><path d="M51 41.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 51 41.5zM12 41.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 12 41.5z" fill="#FFF"/></symbol><symbol viewBox="0 0 60 60" id="iD-piste-line" xmlns="http://www.w3.org/2000/svg"><path d="M41.768 20.834a2.417 2.417 0 1 1-4.834 0 2.417 2.417 0 0 1 4.834 0zm-2.063 11.908a.402.402 0 0 0-.531-.178 4.334 4.334 0 0 1-3.674.403l-10.2-5.108 4.383-2.191v-4.834l2.417 1.208v4.834l2.417 1.209 2.417-1.209-2.417-1.208v-7.251L29.683 16l-2.417 1.208v7.251l-4.383 2.192-4.302-2.143a.404.404 0 0 0-.355.725l16.919 8.459a3.814 3.814 0 0 0 1.612.306 6.175 6.175 0 0 0 2.771-.709.403.403 0 0 0 .181-.54l-.004-.007zM49.5 39a2.5 2.5 0 1 1 0 5c-.907.004-1.373-.402-1.971-1H12.471c-.493.678-1.174.92-1.971 1a2.5 2.5 0 1 1 0-5c.907-.004 1.373.402 1.971 1h35.058c.493-.678 1.174-.92 1.971-1z" fill="currentColor"/><path d="M16 41v1h-3.05l.05-.5-.05-.5H16zm11 0h-5v1h5v-1zm11 0h-5v1h5v-1zm9.05 0H44v1h3.05l-.05-.5.05-.5z" fill="inherit"/><path d="M51 41.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 51 41.5zM12 41.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 12 41.5z" fill="#FFF"/></symbol><symbol viewBox="0 0 60 60" id="iD-power-line" xmlns="http://www.w3.org/2000/svg"><path d="M49.5 39a2.5 2.5 0 1 1 0 5c-1.425-.07-1.943-.793-2.45-2h-34.1c-.359 1.232-1.197 1.874-2.45 2a2.5 2.5 0 1 1 0-5c1.424.069 1.943.793 2.45 2h34.1c.359-1.232 1.197-1.874 2.45-2z" fill="currentColor"/><path d="M51 41.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 51 41.5zM12 41.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 12 41.5z" fill="#FFF"/><path d="M20 10v1h2v-1h-2zm4 0v1h2v-1h-2zm10 0v1h2v-1h-2zm4 0v1h2v-1h-2zm-17.688 5c-.665 3.533-3.045 5.5-5.312 5.5h-1v1h1a5.462 5.462 0 0 0 3-.906v.906h1c2.879 0 5.615-2.478 6.312-6.5h-1c-.665 3.533-3.045 5.5-5.312 5.5h-.875c1.561-1.08 2.76-2.991 3.187-5.5h-1zm14.376 0c.697 4.022 3.433 6.5 6.312 6.5h1v-.906a5.462 5.462 0 0 0 3 .906h1v-1h-1c-2.267 0-4.647-1.967-5.312-5.5h-1c.427 2.509 1.626 4.42 3.187 5.5H41c-2.267 0-4.647-1.967-5.312-5.5h-1z" fill="#989898"/><path d="M28 10v2h-9v2h9v22h4V14h9v-2h-9v-2h-4z" fill="#B5B5B5"/></symbol><symbol viewBox="0 0 45 45" id="iD-preset-icon-frame" xmlns="http://www.w3.org/2000/svg"><path d="M7 3.5a3.5 3.5 0 1 1-7 0 3.5 3.5 0 0 1 7 0zM3.5 23.999a1.5 1.5 0 1 1-.006-2.998 1.5 1.5 0 0 1 .006 2.998zM7 41.5a3.5 3.5 0 1 1-7 0 3.5 3.5 0 0 1 7 0zM24 41.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 24 41.5zM45 41.5a3.5 3.5 0 1 1-7 0 3.5 3.5 0 0 1 7 0zM41.5 23.999a1.5 1.5 0 1 1 .001-3 1.5 1.5 0 0 1-.001 3zM45 3.5a3.5 3.5 0 1 1-7 0 3.5 3.5 0 0 1 7 0zM24 3.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 24 3.5z" opacity=".2"/><path d="M6 3.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0z" fill="#FFF"/><path d="M3.5 22a.5.5 0 0 1 0 1 .5.5 0 0 1 0-1z" fill="#FFF" opacity=".5"/><path d="M6 41.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0z" fill="#FFF"/><path d="M23 41.5a.5.5 0 0 1-1 0 .5.5 0 0 1 1 0z" fill="#FFF" opacity=".5"/><path d="M44 41.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0z" fill="#FFF"/><path d="M41.5 22a.5.5 0 0 1 0 1 .5.5 0 0 1 0-1z" fill="#FFF" opacity=".5"/><path d="M44 3.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0z" fill="#FFF"/><path d="M23 3.5a.5.5 0 0 1-1 0 .5.5 0 0 1 1 0z" fill="#FFF" opacity=".5"/></symbol><symbol viewBox="0 0 60 60" id="iD-railway-abandoned" xmlns="http://www.w3.org/2000/svg"><g fill="#989898"><path d="M36.044 23.685l-1.449.118.729 1.197h7.427c.554 0 1.134-.463 1-1l-.25-1c-.134-.537-.446-1-1-1h-2.344l-.469-2h-2.5l.469 2h-2.826l.179.248 1.034 1.437zM39.25 23a.5.5 0 1 1 0 1 .5.5 0 0 1 0-1zM33.846 19h7.904c.554 0 1.134-.463 1-1l-.25-1c-.134-.537-.446-1-1-1h-2.781l-.469-2-1.5-1-1 1 .469 2h-4.013l1.313 2.403.327.597zm4.404-2a.5.5 0 1 1 0 1 .5.5 0 0 1 0-1zM27.666 16h-3.885l.469-2-1-1-1.5 1-.469 2H18c-.554 0-.866.463-1 1l-.25 1c-.134.537.446 1 1 1h8.277l.347-.635L27.666 16zm-6.416 2a.5.5 0 1 1 0-1 .5.5 0 0 1 0 1zM20.936 28l.472-2h-2.501l-.469 2H16c-.554 0-.866.463-1 1l-.25 1c-.134.537.446 1 1 1h6.911l1.59-3h-3.315zm-1.686 2a.5.5 0 1 1 0-1 .5.5 0 0 1 0 1zM40.031 32l.719 3 1 1 1.5-1-.719-3zM23.848 23.647l1.036-1.438.15-.209h-2.691l.472-2h-2.502l-.469 2H17c-.554 0-.866.463-1 1l-.25 1c-.134.537.446 1 1 1h7.798l.749-1.235-1.449-.118zM20.25 24a.5.5 0 1 1 0-1 .5.5 0 0 1 0 1zM44.749 30l-.25-1c-.134-.537-.446-1-1-1h-1.938l-.469-2h-2.5l.469 2h-3.436l1.588 3h6.536c.554 0 1.134-.463 1-1zm-4.499 0a.5.5 0 1 1 0-1 .5.5 0 0 1 0 1zM16.75 35l1.5 1 1-1 .719-3h-2.5z"/></g><path d="M30.803 31.655l5.643.031-.363-.686-1.588-3-.817-1.543 1.298-.106L34.154 25l-1.256-2.064 1.3-.106L33.6 22l-2.162-3-.009-.012 1.213-.107L31.066 16l-1.107-2.027-.026.122v-.158L28.806 16l-1.553 2.844 1.212.106-.036.05-2.162 3-.571.792 1.297.105L25.716 25l-.797 1.313 1.298.107L25.38 28l-1.588 3-.344.649 2.273-.031-.003.009 3.47.019V36.023h1.625l-.008-3.365-.001-.502z" fill="#555"/><path d="M49.5 38.937a2.5 2.5 0 1 1 0 5c-.907.004-1.373-.402-1.971-1H12.471c-.493.678-1.174.92-1.971 1a2.5 2.5 0 1 1 0-5c.907-.004 1.373.402 1.971 1h35.058c.493-.678 1.174-.92 1.971-1z" fill="currentColor"/><path d="M16 40.937v1h-3.05l.05-.5-.05-.5H16zm11 0h-5v1h5v-1zm11 0h-5v1h5v-1zm9.05 0H44v1h3.05l-.05-.5.05-.5z" fill="inherit"/><path d="M51 41.437a1.5 1.5 0 1 1-3.001-.001 1.5 1.5 0 0 1 3.001.001zM12 41.437a1.5 1.5 0 1 1-3.001-.001 1.5 1.5 0 0 1 3.001.001z" fill="#FFF"/></symbol><symbol viewBox="0 0 60 60" id="iD-railway-disused" xmlns="http://www.w3.org/2000/svg"><g fill="#989898"><path d="M17.001 35l1.5 1 1-1 .719-3h-2.5zM40.282 32l.719 3 1 1 1.5-1-.719-3zM21.187 28l.472-2h-2.501l-.469 2h-2.438c-.554 0-.866.463-1 1l-.25 1c-.134.537.446 1 1 1h11.79c-.313-1.031-.775-2.081-1.457-3h-5.147zm-1.686 2a.5.5 0 1 1 0-1 .5.5 0 0 1 0 1zM17.001 25h26c.554 0 1.134-.463 1-1l-.25-1c-.134-.537-.446-1-1-1h-2.344l-.469-2h-2.5l.469 2H22.594l.472-2h-2.502l-.469 2h-2.844c-.554 0-.866.463-1 1l-.25 1c-.134.537.446 1 1 1zm22.5-2a.5.5 0 1 1 0 1 .5.5 0 0 1 0-1zm-19 0a.5.5 0 1 1 0 1 .5.5 0 0 1 0-1zM18.001 19h24c.554 0 1.134-.463 1-1l-.25-1c-.134-.537-.446-1-1-1H38.97l-.469-2-1.5-1-1 1 .469 2H24.032l.469-2-1-1-1.5 1-.469 2h-3.281c-.554 0-.866.463-1 1l-.25 1c-.134.537.446 1 1 1zm20.5-2a.5.5 0 1 1 0 1 .5.5 0 0 1 0-1zm-17 0a.5.5 0 1 1 0 1 .5.5 0 0 1 0-1zM45 30l-.25-1c-.134-.537-.446-1-1-1h-1.938l-.469-2h-2.5l.469 2h-4.244l-.315.285c-1.087.982-1.675 1.941-2.01 2.715h11.258c.553 0 1.133-.463.999-1zm-4.499 0a.5.5 0 1 1 0-1 .5.5 0 0 1 0 1z"/></g><path d="M49.501 39a2.5 2.5 0 1 1 0 5c-.906.004-1.372-.402-1.971-1H12.469c-.492.678-1.174.92-1.971 1a2.5 2.5 0 0 1 0-5c.908-.004 1.374.402 1.971 1H47.53c.492-.678 1.174-.92 1.971-1z" fill="currentColor"/><path d="M16.001 41v1h-3.05l.05-.5-.05-.5h3.05zm11 0h-5v1h5v-1zm11 0h-5v1h5v-1zm9.05 0h-3.05v1h3.05l-.05-.5.05-.5z" fill="inherit"/><path d="M51.001 41.5A1.5 1.5 0 1 1 48 41.499 1.5 1.5 0 0 1 51 41.5zM12.001 41.5A1.5 1.5 0 1 1 9 41.499 1.5 1.5 0 0 1 12 41.5z" fill="#FFF"/><g fill="#555"><path d="M24.407 31.625c3.038 3.078 2.378 4.385 2.378 4.385s.211.039 1.669.039c.119-3.129-2.293-3.861-4.047-4.424zM30.979 36.031c.046-2.014-.264-3.628-.749-4.922-.491-1.309-1.162-2.282-1.833-3-1.276-1.365-2.546-1.8-2.546-1.8a7.946 7.946 0 0 1 1.55 1.8c.612.952 1.035 1.99 1.321 3 .732 2.581.603 4.935.603 4.935s.572-.013 1.654-.013zM33.557 28c-1.804.807-2.44 2.824-2.44 2.824l.047.176.437 1.64s-.001-.664.373-1.64c.321-.84.927-1.912 2.053-3 .083-.08.161-.16.25-.24a3.58 3.58 0 0 0-.72.24zM32.019 36.038l1.58-.009s-.23-2.368 1.996-4.326c-1.734.498-3.385 2.08-3.576 4.335z"/></g></symbol><symbol viewBox="0 0 60 60" id="iD-railway-light-rail" xmlns="http://www.w3.org/2000/svg"><path d="M49.5 39a2.5 2.5 0 1 1 0 5c-.907.004-1.373-.402-1.971-1H12.471c-.493.678-1.174.92-1.971 1a2.5 2.5 0 1 1 0-5c.907-.004 1.373.402 1.971 1h35.058c.493-.678 1.174-.92 1.971-1z" fill="currentColor"/><path d="M16 41v1h-3.05l.05-.5-.05-.5H16zm11 0h-5v1h5v-1zm11 0h-5v1h5v-1zm9.05 0H44v1h3.05l-.05-.5.05-.5z" fill="inherit"/><path d="M51 41.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 51 41.5zM12 41.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 12 41.5z" fill="#FFF"/><g fill="#989898"><path d="M22.5 32h3.333L25 33.488h10L34.167 32H37.5l2.5 4.464h-3.333l-.834-1.488H24.167l-.834 1.488H20L22.5 32zM25.111 10L19 15.727v13.364L21.444 31h17.111L41 29.091V15.727L34.889 10h-9.778zm0 .955h9.778v1.909h-9.778v-1.909zm-2.444 4.772h14.666l1.222.955V20.5H21.444v-3.818l1.223-.955zm-1.223 9.546h3.667l2.444 1.909v.954h-4.888l-1.223-.954v-1.909zm13.445 0h3.666v1.909l-1.222.954h-4.889v-.954l2.445-1.909zM25 6v1h4v2h2V7h4V6z"/></g></symbol><symbol viewBox="0 0 60 60" id="iD-railway-monorail" xmlns="http://www.w3.org/2000/svg"><path d="M49.667 39a2.5 2.5 0 0 1 0 5c-.907.004-1.373-.402-1.971-1H12.637c-.492.678-1.173.92-1.97 1a2.5 2.5 0 1 1 0-5c.906-.004 1.372.402 1.97 1h35.059c.492-.678 1.173-.92 1.971-1z" fill="currentColor"/><path d="M16.167 41v1h-3.051l.051-.5-.051-.5h3.051zm11 0h-5v1h5v-1zm11 0h-5v1h5v-1zm9.05 0h-3.05v1h3.05l-.05-.5.05-.5z" fill="inherit"/><path d="M51 41.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 51 41.5zM12 41.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 12 41.5z" fill="#FFF"/><path d="M23 31l-2-2V16l5-6h8l5 6v13l-2 2h-3v3h-2v-2l-1-1h-2l-1 1v2h-2v-3h-3zm14-7h-4l-1 2v1h4l1-1v-2zm-10 0h-4v2l1 1h4v-1l-1-2zm9-8H24l-1 1v4h14v-4l-1-1zm-2-5h-8v2h8v-2z" fill="#989898"/><path d="M31 32v3h2v1h-6v-1h2v-3h2z" fill="#B5B5B5"/></symbol><symbol viewBox="0 0 60 60" id="iD-railway-rail" xmlns="http://www.w3.org/2000/svg"><path d="M49.5 39a2.5 2.5 0 1 1 0 5c-.907.004-1.373-.402-1.971-1H12.471c-.493.678-1.174.92-1.971 1a2.5 2.5 0 1 1 0-5c.907-.004 1.373.402 1.971 1h35.058c.493-.678 1.174-.92 1.971-1z" fill="currentColor"/><path d="M16 41v1h-3.05l.05-.5-.05-.5H16zm11 0h-5v1h5v-1zm11 0h-5v1h5v-1zm9.05 0H44v1h3.05l-.05-.5.05-.5z" fill="inherit"/><path d="M51 41.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 51 41.5zM12 41.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 12 41.5z" fill="#FFF"/><path d="M23.5 13L22 14l-.469 2H18.25c-.554 0-.866.463-1 1L17 18c-.134.537.446 1 1 1h24c.554 0 1.134-.463 1-1l-.25-1c-.134-.537-.446-1-1-1h-2.781l-.469-2-1.5-1-1 1 .469 2H24.031l.469-2-1-1zm-2 4a.5.5 0 1 1 0 1 .5.5 0 0 1 0-1zm17 0a.5.5 0 1 1 0 1 .5.5 0 0 1 0-1zm-17.938 3l-.468 2H17.25c-.554 0-.866.463-1 1L16 24c-.134.537.446 1 1 1h26c.554 0 1.134-.463 1-1l-.25-1c-.134-.537-.446-1-1-1h-2.344l-.468-2h-2.5l.468 2H22.594l.468-2h-2.5zm-.062 3a.5.5 0 1 1 0 1 .5.5 0 0 1 0-1zm19 0a.5.5 0 1 1 0 1 .5.5 0 0 1 0-1zm-20.344 3l-.468 2H16.25c-.554 0-.866.463-1 1L15 30c-.134.537.446 1 1 1h28c.554 0 1.134-.463 1-1l-.25-1c-.134-.537-.446-1-1-1h-1.938l-.468-2h-2.5l.468 2H21.188l.468-2h-2.5zm.344 3a.5.5 0 1 1 0 1 .5.5 0 0 1 0-1zm21 0a.5.5 0 1 1 0 1 .5.5 0 0 1 0-1zm-22.781 3L17 35l1.5 1 1-1 .719-3h-2.5zm22.562 0L41 35l1 1 1.5-1-.719-3h-2.5z" fill="#989898"/></symbol><symbol viewBox="0 0 60 60" id="iD-railway-subway" xmlns="http://www.w3.org/2000/svg"><path d="M49.5 39a2.5 2.5 0 1 1 0 5c-.907.004-1.373-.402-1.971-1H12.471c-.493.678-1.174.92-1.971 1a2.5 2.5 0 1 1 0-5c.907-.004 1.373.402 1.971 1h35.058c.492-.678 1.174-.92 1.971-1z" fill="currentColor"/><path d="M16 41v1h-3.051l.051-.5-.051-.5H16zm11 0h-5v1h5v-1zm11 0h-5v1h5v-1zm9.05 0H44v1h3.05l-.05-.5.05-.5z" fill="inherit"/><path d="M51 41.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 51 41.5zM12 41.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 12 41.5z" fill="#FFF"/><path d="M22.5 32h3.333L25 33.488h10L34.167 32H37.5l2.5 4.464h-3.333l-.834-1.488H24.167l-.834 1.488H20L22.5 32zM25 9l-6 5.739v14.348L21 31h18l2-1.913V14.739L35 9H25zm1 1.913h8v1.913h-8v-1.913zm-4 3.826h16l1 .957v3.826l-3 1.913H24l-3-1.913v-3.826l1-.957zm-1 10.522h3l2 1.913v.956h-4l-1-.956v-1.913zm15 0h3v1.913l-1 .956h-4v-.956l2-1.913z" fill="#989898"/><path d="M23 4c-5 0-9 3-9 9v20l3-1V13c0-4 3-6 6-6h14c3 0 6 2 6 6v19l3 1V13c0-6-4.068-8.178-9-9h-8z" fill="#B5B5B5"/></symbol><symbol viewBox="0 0 60 60" id="iD-railway-tram" xmlns="http://www.w3.org/2000/svg"><path d="M49.5 39a2.5 2.5 0 1 1 0 5c-.907.004-1.373-.402-1.971-1H12.471c-.493.678-1.174.92-1.971 1a2.5 2.5 0 1 1 0-5c.907-.004 1.373.402 1.971 1h35.058c.493-.678 1.174-.92 1.971-1z"/><path d="M16 41v1h-3.05l.05-.5-.05-.5H16zm11 0h-5v1h5v-1zm11 0h-5v1h5v-1zm9.05 0H44v1h3.05l-.05-.5.05-.5z" fill="#AAA"/><path d="M51 41.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 51 41.5zM12 41.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 12 41.5z" fill="#FFF"/><g fill="#989898"><path d="M34 33l1.5 4H38l-1.5-4zM25.469 33L24 37h-2.5l1.469-4zM26.444 10L22 16v14l1.778 2h12.444L38 30V16l-4.444-6h-7.112zm0 1h7.112v2h-7.112v-2zm-1.777 5H35.333l.889 1v4H23.778v-4l.889-1zm-.889 10h2.666l1.778 2v1h-3.555l-.889-1v-2zm9.778 0h2.666v2l-.889 1h-3.555v-1l1.778-2zM25 6v1h4v2h2V7h4V6z"/></g></symbol><symbol viewBox="0 0 60 60" id="iD-relation" xmlns="http://www.w3.org/2000/svg"><path d="M26.906 20c.054.323.094.662.094 1 0 .338-.04.677-.094 1h8.188A4.916 4.916 0 0 1 35 21c0-.345.027-.675.094-1h-8.188zm-1.031 4.437a6.038 6.038 0 0 1-1.406 1.438l7.375 7.344a5.214 5.214 0 0 1 1.406-1.407l-7.375-7.375zM20 26.906v8.188A4.916 4.916 0 0 1 21 35c.345 0 .675.027 1 .094v-8.188A6.106 6.106 0 0 1 21 27c-.338 0-.677-.04-1-.094z" fill="#CCC"/><path d="M40 17a4 4 0 1 1 0 8 4 4 0 0 1 0-8z" fill="#70372F"/><path d="M40 18a3 3 0 1 1 0 6 3 3 0 0 1 0-6z" fill="#E06D5F"/><path d="M40 20a1 1 0 1 1 0 2 1 1 0 0 1 0-2z" fill="#FFF"/><path d="M25 40a4 4 0 1 1-8 0 4 4 0 0 1 8 0z" fill="#2C5476"/><path d="M24 40a3 3 0 1 1-6 0 3 3 0 0 1 6 0z" fill="#58A9ED"/><path d="M22 40a1 1 0 1 1-2 0 1 1 0 0 1 2 0z" fill="#FFF"/><g><path d="M40 36a4 4 0 1 1-8 0 4 4 0 0 1 8 0z" fill="#46682F"/><path d="M39 36a3 3 0 1 1-6 0 3 3 0 0 1 6 0z" fill="#8CD05F"/><path d="M37 36a1 1 0 1 1-2 0 1 1 0 0 1 2 0z" fill="#FFF"/></g><g><path d="M26 21a5 5 0 1 1-10.001-.001A5 5 0 0 1 26 21z" fill="#444"/><path d="M25 21a4 4 0 1 1-8 0 4 4 0 0 1 8 0z" fill="#CCC"/><path d="M23 21a2 2 0 1 1-3.999.001A2 2 0 0 1 23 21z" fill="#FFF"/></g></symbol><symbol viewBox="0 0 60 60" id="iD-restriction" xmlns="http://www.w3.org/2000/svg"><path d="M30 14.5c-8.56 0-15.5 6.94-15.5 15.5 0 8.56 6.94 15.5 15.5 15.5 8.56 0 15.5-6.94 15.5-15.5 0-8.56-6.94-15.5-15.5-15.5zm0 4c6.351 0 11.5 5.149 11.5 11.5 0 2.454-.784 4.726-2.094 6.594l-16-16A11.454 11.454 0 0 1 30 18.5zm-9.406 4.906l16 16A11.454 11.454 0 0 1 30 41.5c-6.351 0-11.5-5.149-11.5-11.5 0-2.454.784-4.726 2.094-6.594z" fill="#E06D5F"/></symbol><symbol viewBox="0 0 60 60" id="iD-restriction-no-left-turn" xmlns="http://www.w3.org/2000/svg"><path d="M20 17l-10 9 10 9v-6h5.5L20 23.5V17zm6.531 6L38 34.469V31l-2-4-2-2-4-2h-3.469zM32 35.5v5.312c1.354-.282 2.611-.854 3.75-1.562L32 35.5z" fill="#989898"/><path d="M30 15c-3.388 0-6.49 1.14-9 3.031v5.063l16.375 16.375-.5.343A11.937 11.937 0 0 1 30 42c-4.473 0-8.374-2.459-10.438-6.094l-4.437-3.968C16.076 39.309 22.368 45 30 45c8.29 0 15-6.71 15-15s-6.71-15-15-15zm0 3c6.621 0 12 5.379 12 12 0 2.561-.822 4.928-2.188 6.875l-.343.469L22.625 20.5l.5-.344A11.919 11.919 0 0 1 30 18z" fill="#E06D5F"/></symbol><symbol viewBox="0 0 60 60" id="iD-restriction-no-right-turn" xmlns="http://www.w3.org/2000/svg"><path d="M39 17v6H29l-1.656.812L32.531 29H39v6l10-9zm-15.75 9.75L23 27l-2 3v6.312a11 11 0 0 0 6 4.282V31l.25-.25z" fill="#989898"/><path d="M30 15c-8.29 0-15 6.71-15 15s6.71 15 15 15c7.973 0 14.482-6.213 14.969-14.062l-3.813 3.437c-.353.893-.8 1.726-1.343 2.5l-.344.469-16.406-16.406-.438-.438.5-.344A11.919 11.919 0 0 1 30 18c3.08 0 5.874 1.183 8 3.094v-3.75C35.681 15.874 32.952 15 30 15zm-9.469 7.625l.407.406 16 16 .437.438-.5.343A11.937 11.937 0 0 1 30 42c-6.621 0-12-5.379-12-12 0-2.561.822-4.959 2.188-6.906z" fill="#E06D5F"/></symbol><symbol viewBox="0 0 60 60" id="iD-restriction-no-straight-on" xmlns="http://www.w3.org/2000/svg"><path d="M30 15l-9 10h7.531L33 29.469V25h6l-9-10zm-3 15.5v10.094c.953.269 1.96.406 3 .406a9.89 9.89 0 0 0 3-.469V36.5l-6-6z" fill="#989898"/><path d="M28.469 15.063C20.901 15.83 15 22.228 15 30c0 8.29 6.71 15 15 15s15-6.71 15-15c0-7.814-5.966-14.227-13.594-14.937l3.688 4.093C39.163 21.078 42 25.206 42 30c0 2.561-.822 4.928-2.188 6.875l-.343.469-.407-.406L28.125 26H23.906l13.032 13.031.437.438-.5.343A11.937 11.937 0 0 1 30 42c-6.621 0-12-5.379-12-12 0-2.561.822-4.959 2.188-6.906l.343-.469.407.406.25.25 2-2.219-.126-.124-.437-.438.5-.344a11.838 11.838 0 0 1 1.781-1.031l3.688-4.062c-.041.003-.084-.005-.125 0z" fill="#E06D5F"/></symbol><symbol viewBox="0 0 60 60" id="iD-restriction-no-u-turn" xmlns="http://www.w3.org/2000/svg"><path d="M29 22l-2.312 1.156L31.531 28H35l2 2v6h-6l9 10 9-10h-6v-6l-1.281-2.594L41 26l-2-2-4-2zm-6.156 4.344L21 30v6.312c1.343 1.913 3.267 3.408 5.531 4.157L27 40v-9.5z" fill="#989898"/><path d="M30 15c-8.29 0-15 6.71-15 15s6.71 15 15 15c2.307 0 4.486-.54 6.437-1.469l-2.125-2.375c-1.337.523-2.79.844-4.312.844-6.622 0-12-5.379-12-12 0-2.561.822-4.959 2.187-6.906l.344-.469.406.406L32.906 35H36v-1.125L23.062 20.938l-.437-.438.5-.344A11.919 11.919 0 0 1 30 18c4.385 0 8.219 2.359 10.312 5.875l1.5 1.531L44 29.75V35h.125c.552-1.564.875-3.246.875-5 0-8.29-6.71-15-15-15z" fill="#E06D5F"/></symbol><symbol viewBox="0 0 60 60" id="iD-restriction-only-left-turn" xmlns="http://www.w3.org/2000/svg"><path d="M30 14c-8.837 0-16 7.163-16 16s7.163 16 16 16 16-7.163 16-16-7.163-16-16-16zm-2 4v6h6l2 1 3 3 1 2v4.562a10.982 10.982 0 0 1-6 5.657V32l-2-2h-4v6l-6.969-6.281L18 27l10-9z" fill="#58A9ED"/></symbol><symbol viewBox="0 0 60 60" id="iD-restriction-only-right-turn" xmlns="http://www.w3.org/2000/svg"><path d="M30 14c-8.837 0-16 7.163-16 16s7.163 16 16 16 16-7.163 16-16-7.163-16-16-16zm2 4l10 9-3.031 2.719L32 36v-6h-4l-2 2v8.219a10.982 10.982 0 0 1-6-5.657V30l1-2 3-3 2-1h6v-6z" fill="#58A9ED"/></symbol><symbol viewBox="0 0 60 60" id="iD-restriction-only-straight-on" xmlns="http://www.w3.org/2000/svg"><path d="M30 14c-8.837 0-16 7.163-16 16s7.163 16 16 16 16-7.163 16-16-7.163-16-16-16zm0 4l9 10h-6v12.531A9.89 9.89 0 0 1 30 41a11.03 11.03 0 0 1-3-.406V28h-6l9-10z" fill="#58A9ED"/></symbol><symbol viewBox="0 0 60 60" id="iD-restriction-only-u-turn" xmlns="http://www.w3.org/2000/svg"><path d="M46 30c0-8.837-7.163-16-16-16s-16 7.163-16 16 7.163 16 16 16 16-7.163 16-16zm-3 1.5l-6.949 10.373L28.5 31.5h4.865v-4.998l-1.935-1.807h-3.618L25.5 27v12c-2.5 0-5.171-1.983-5.171-5 0-3-.088-6.13 0-8.128.171-3.872 6.244-6.452 6.244-6.452s3.148-.547 5.783.017c3.136.563 6.195 4.515 6.156 6.435.039 3.08 0 5.628 0 5.628H43z" fill="#58A9ED"/></symbol><symbol viewBox="0 0 60 60" id="iD-route" xmlns="http://www.w3.org/2000/svg"><path d="M36.969 32.469l-2.938 4.062-11-8 2.938-4.062z" fill="#46682F"/><path d="M34.125 32.406l2.75 4.188 12-8-2.75-4.188z" fill="#70372F"/><path d="M11.125 32.419l2.75 4.156 12-8-2.75-4.156z" fill="#2C5476"/><path d="M36.375 33.281l-1.75 2.438-11-8 1.75-2.438z" fill="#8CD05F"/><path d="M34.656 33.25l1.688 2.5 12-8-1.688-2.5z" fill="#E06D5F"/><path d="M11.656 33.263l1.688 2.5 12-8-1.688-2.5z" fill="#58A9ED"/><path d="M50 26.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0z" fill="#70372F"/><path d="M15 34.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0z" fill="#2C5476"/><path d="M27 26.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0z" fill="#395E53"/><path d="M38 34.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0z" fill="#5B502F"/><path d="M49 26.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 49 26.5zM37 34.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 37 34.5zM26 26.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 26 26.5zM14 34.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 14 34.5z" fill="#FFF"/></symbol><symbol viewBox="0 0 60 60" id="iD-route-bicycle" xmlns="http://www.w3.org/2000/svg"><path d="M36.969 45.469l-2.938 4.062-11-8 2.938-4.062z" fill="#46682F"/><path d="M34.125 45.406l2.75 4.188 12-8-2.75-4.188z" fill="#70372F"/><path d="M11.125 45.419l2.75 4.156 12-8-2.75-4.156z" fill="#2C5476"/><path d="M36.375 46.281l-1.75 2.438-11-8 1.75-2.438z" fill="#8CD05F"/><path d="M34.656 46.25l1.688 2.5 12-8-1.688-2.5z" fill="#E06D5F"/><path d="M11.656 46.263l1.688 2.5 12-8-1.688-2.5z" fill="#58A9ED"/><path d="M50 39.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0z" fill="#70372F"/><path d="M15 47.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0z" fill="#2C5476"/><path d="M27 39.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0z" fill="#395E53"/><path d="M38 47.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0z" fill="#5B502F"/><path d="M49 39.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 49 39.5zM37 47.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 37 47.5zM26 39.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 26 39.5zM14 47.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 14 47.5z" fill="#FFF"/><path d="M22.589 11v2h.844l.562 3h-2.5l-5.5 10v1l1 1h11l7.563-9.469L39.495 27h1.5v-1l-6-13h3v-1l-1-1h-4v2l1.406 3h-8.343l-.563-3h2.094v-1l-1-1h-4zm-.094 7h2l2 8h-8.5l4.5-8zm4 0h7l-5.5 6.5-1.5-6.5zm-9 2a6.5 6.5 0 1 0 6 9h-2.25a4.473 4.473 0 0 1-3.75 2 4.5 4.5 0 0 1-4.5-4.5c0-2.324 1.77-4.199 4.031-4.438l1.125-2.031a6.45 6.45 0 0 0-.656-.031zm21.844 0l.937 2.094c2.111.372 3.719 2.189 3.719 4.406a4.5 4.5 0 0 1-9 0c0-1.374.623-2.581 1.594-3.406l-.875-1.875A6.495 6.495 0 0 0 39.495 33a6.5 6.5 0 1 0 0-13h-.156zm-17.656 1.531l-1 1.781c.466.467.805 1.054 1.031 1.688h2.094a6.535 6.535 0 0 0-2.125-3.469z" fill="currentColor"/></symbol><symbol viewBox="0 0 60 60" id="iD-route-bus" xmlns="http://www.w3.org/2000/svg"><path d="M36.969 45.469l-2.938 4.062-11-8 2.938-4.062z" fill="#46682F"/><path d="M34.125 45.406l2.75 4.188 12-8-2.75-4.188z" fill="#70372F"/><path d="M11.125 45.419l2.75 4.156 12-8-2.75-4.156z" fill="#2C5476"/><path d="M36.375 46.281l-1.75 2.438-11-8 1.75-2.438z" fill="#8CD05F"/><path d="M34.656 46.25l1.688 2.5 12-8-1.688-2.5z" fill="#E06D5F"/><path d="M11.656 46.263l1.688 2.5 12-8-1.688-2.5z" fill="#58A9ED"/><path d="M50 39.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0z" fill="#70372F"/><path d="M15 47.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0z" fill="#2C5476"/><path d="M27 39.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0z" fill="#395E53"/><path d="M38 47.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0z" fill="#5B502F"/><path d="M49 39.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 49 39.5zM37 47.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 37 47.5zM26 39.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 26 39.5zM14 47.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 14 47.5z" fill="#FFF"/><path d="M24.167 8c-2.273 0-5 1.239-5 4.577V28s0 1.667 1.666 1.667v1.666S20.833 33 22.5 33s1.667-1.667 1.667-1.667v-1.666h11.666v1.666S35.833 33 37.5 33s1.667-1.667 1.667-1.667v-1.666s1.666 0 1.666-1.667V12.577c0-3.409-2.06-4.577-4.332-4.577H24.167zm.416 2.5h10.834a.416.416 0 1 1 0 .833H24.583a.414.414 0 0 1-.416-.416c0-.231.185-.417.416-.417zM22.5 13h15c1.667 0 1.667 1.611 1.667 1.611v5.056s0 1.666-1.667 1.666h-15c-1.667 0-1.667-1.666-1.667-1.666v-5S20.833 13 22.5 13zm0 11.667a1.667 1.667 0 1 1 0 3.334 1.667 1.667 0 0 1 0-3.334zm15 0a1.667 1.667 0 1 1 0 3.334 1.667 1.667 0 0 1 0-3.334z" fill="#989898"/></symbol><symbol viewBox="0 0 60 60" id="iD-route-detour" xmlns="http://www.w3.org/2000/svg"><path d="M36.969 45.469l-2.938 4.062-11-8 2.938-4.062z" fill="#46682F"/><path d="M34.125 45.406l2.75 4.188 12-8-2.75-4.188z" fill="#70372F"/><path d="M11.125 45.419l2.75 4.156 12-8-2.75-4.156z" fill="#2C5476"/><path d="M36.375 46.281l-1.75 2.438-11-8 1.75-2.438z" fill="#8CD05F"/><path d="M34.656 46.25l1.688 2.5 12-8-1.688-2.5z" fill="#E06D5F"/><path d="M11.656 46.263l1.688 2.5 12-8-1.688-2.5z" fill="#58A9ED"/><path d="M50 39.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0z" fill="#70372F"/><path d="M15 47.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0z" fill="#2C5476"/><path d="M27 39.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0z" fill="#395E53"/><path d="M38 47.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0z" fill="#5B502F"/><path d="M49 39.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 49 39.5zM37 47.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 37 47.5zM26 39.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 26 39.5zM14 47.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 14 47.5z" fill="#FFF"/><path d="M17 14l-2 2v15l2 2h28l2-2V16l-2-2H17" fill="#FC6C14"/><path d="M34 19.5l5 4-5 4V25H23v-3h11"/><path d="M17 16.013v15h28v-15H17zm1 1h26v13H18v-13z"/></symbol><symbol viewBox="0 0 60 60" id="iD-route-ferry" xmlns="http://www.w3.org/2000/svg"><path d="M36.969 45.469l-2.938 4.062-11-8 2.938-4.062z" fill="#46682F"/><path d="M34.125 45.406l2.75 4.188 12-8-2.75-4.188z" fill="#70372F"/><path d="M11.125 45.419l2.75 4.156 12-8-2.75-4.156z" fill="#2C5476"/><path d="M36.375 46.281l-1.75 2.438-11-8 1.75-2.438z" fill="#8CD05F"/><path d="M34.656 46.25l1.688 2.5 12-8-1.688-2.5z" fill="#E06D5F"/><path d="M11.656 46.263l1.688 2.5 12-8-1.688-2.5z" fill="#58A9ED"/><path d="M50 39.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0z" fill="#70372F"/><path d="M15 47.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0z" fill="#2C5476"/><path d="M27 39.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0z" fill="#395E53"/><path d="M38 47.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0z" fill="#5B502F"/><path d="M49 39.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 49 39.5zM37 47.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 37 47.5zM26 39.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 26 39.5zM14 47.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 14 47.5z" fill="#FFF"/><path d="M25.666 26.974a5.991 5.991 0 0 1 3.695 1.339l.519.459h.1l.619-.559a5.773 5.773 0 0 1 6.871-.36l4.514-8.868-2.996-1.997v-7.09a3.077 3.077 0 0 0-2.996-2.897h-.999a1.878 1.878 0 0 0-1.997-1.997h-5.992a1.877 1.877 0 0 0-1.997 1.997h-.999a3.077 3.077 0 0 0-2.996 2.897v7.09l-2.996 1.997 4.494 9.048a5.855 5.855 0 0 1 3.156-1.059zM23.009 9.898a.938.938 0 0 1 .999-.899h11.984a.94.94 0 0 1 .999.998v5.992L30 11.995l-6.991 3.894V9.898zm19.973 21.071v1.997a2.001 2.001 0 0 0-1.358.679 4.294 4.294 0 0 1-1.997 1.199 3.815 3.815 0 0 1-3.535-.739l-.779-.699a1.557 1.557 0 0 0-2.197 0c-.28.239-.539.499-.839.739a3.836 3.836 0 0 1-4.953-.14l-.779-.699c-.572-.5-1.426-.5-1.998 0-.379.3-.719.639-1.098.939a3.816 3.816 0 0 1-4.694-.12l-.619-.539a1.878 1.878 0 0 0-1.118-.62v-1.997a2.515 2.515 0 0 1 1.498.28c.555.344 1.083.731 1.577 1.158.41.447 1.028.637 1.618.499a1.85 1.85 0 0 0 .619-.319c.32-.24.58-.519.899-.779a3.835 3.835 0 0 1 4.894 0c.319.26.619.559.938.819.572.5 1.426.5 1.998 0 .319-.26.619-.559.938-.819a3.836 3.836 0 0 1 4.914 0c.299.26.579.539.878.779.573.5 1.426.5 1.998 0l.939-.819a3.573 3.573 0 0 1 2.256-.799z" fill="currentColor"/></symbol><symbol viewBox="0 0 60 60" id="iD-route-foot" xmlns="http://www.w3.org/2000/svg"><path d="M36.969 45.469l-2.938 4.062-11-8 2.938-4.062z" fill="#46682F"/><path d="M34.125 45.406l2.75 4.188 12-8-2.75-4.188z" fill="#70372F"/><path d="M11 45.419l2.75 4.156 12-8L23 37.419z" fill="#2C5476"/><path d="M36.375 46.281l-1.75 2.438-11-8 1.75-2.438z" fill="#8CD05F"/><path d="M34.656 46.25l1.688 2.5 12-8-1.688-2.5z" fill="#E06D5F"/><path d="M11.656 46.263l1.688 2.5 12-8-1.688-2.5z" fill="#58A9ED"/><path d="M50 39.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0z" fill="#70372F"/><path d="M15 47.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0z" fill="#2C5476"/><path d="M27 39.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0z" fill="#395E53"/><path d="M38 47.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0z" fill="#5B502F"/><path d="M49 39.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 49 39.5zM37 47.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 37 47.5zM26 39.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 26 39.5zM14 47.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 14 47.5z" fill="#FFF"/><path d="M32 12.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0zM27 16h1.5l8.5 6.5V24h-1l-5-3.875V24l2 4 2 5-1 1h-1l-2-5-4-6v-4.656L24.5 20.5l-2 3.5H21v-1l1.5-3 4.5-4zm.844 10.406L25.531 34H24.5l-1-1 2.812-8.438z" fill="currentColor"/></symbol><symbol viewBox="0 0 60 60" id="iD-route-horse" xmlns="http://www.w3.org/2000/svg"><path d="M36.969 45.469l-2.938 4.062-11-8 2.938-4.062z" fill="#46682F"/><path d="M34.125 45.406l2.75 4.188 12-8-2.75-4.188z" fill="#70372F"/><path d="M11.125 45.419l2.75 4.156 12-8-2.75-4.156z" fill="#2C5476"/><path d="M36.375 46.281l-1.75 2.438-11-8 1.75-2.438z" fill="#8CD05F"/><path d="M34.656 46.25l1.688 2.5 12-8-1.688-2.5z" fill="#E06D5F"/><path d="M11.656 46.263l1.688 2.5 12-8-1.688-2.5z" fill="#58A9ED"/><path d="M50 39.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0z" fill="#70372F"/><path d="M15 47.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0z" fill="#2C5476"/><path d="M27 39.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0z" fill="#395E53"/><path d="M38 47.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0z" fill="#5B502F"/><path d="M49 39.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 49 39.5zM37 47.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 37 47.5zM26 39.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 26 39.5zM14 47.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 14 47.5z" fill="#FFF"/><path d="M27.5 5a2.5 2.5 0 1 0 0 5 2.5 2.5 0 0 0 0-5zM41 8.156L38 12l-4.281 5H31l-1-.344V12c0-.554-.446-1-1-1h-3c-.554 0-1 .446-1 1v4h-6l-4 4-1 6h2l1-2 1-3 1-1.344v3.5L17 27.5V33c0 1 0 2 1.5 2s1.5-1 1.5-2v-5.5l1.156-2.5H23v2.5l2.5 6c.251.935.905 1.5 1.75 1.5.809 0 1.096-.876.75-2l-2-5.5v-2.312L29 26h4v7c0 .5 0 2 1.5 2s1.5-1.5 1.5-2v-7l5-9h2l2 1 1-1v-2l-4-3h-1zM25 17h3l3 3v4l-1 1-1-1v-3l-4-3z" fill="currentColor"/></symbol><symbol viewBox="0 0 60 60" id="iD-route-light-rail" xmlns="http://www.w3.org/2000/svg"><path d="M36.969 45.469l-2.938 4.062-11-8 2.938-4.062z" fill="#46682F"/><path d="M34.125 45.406l2.75 4.188 12-8-2.75-4.188z" fill="#70372F"/><path d="M11.125 45.419l2.75 4.156 12-8-2.75-4.156z" fill="#2C5476"/><path d="M36.375 46.281l-1.75 2.438-11-8 1.75-2.438z" fill="#8CD05F"/><path d="M34.656 46.25l1.688 2.5 12-8-1.688-2.5z" fill="#E06D5F"/><path d="M11.656 46.263l1.688 2.5 12-8-1.688-2.5z" fill="#58A9ED"/><path d="M50 39.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0z" fill="#70372F"/><path d="M15 47.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0z" fill="#2C5476"/><path d="M27 39.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0z" fill="#395E53"/><path d="M38 47.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0z" fill="#5B502F"/><path d="M49 39.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 49 39.5zM37 47.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 37 47.5zM26 39.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 26 39.5zM14 47.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 14 47.5z" fill="#FFF"/><g fill="#989898"><path d="M22.5 31h3.333L25 32.488h10L34.167 31H37.5l2.5 4.464h-3.333l-.834-1.488H24.167l-.834 1.488H20L22.5 31zM25.111 9L19 14.727v13.364L21.444 30h17.112L41 28.091V14.727L34.889 9h-9.778zm0 .955h9.778v1.909h-9.778V9.955zm-2.444 4.772h14.666l1.223.955V19.5H21.444v-3.818l1.223-.955zm-1.223 9.546h3.667l2.445 1.909v.954h-4.889l-1.223-.954v-1.909zm13.445 0h3.667v1.909l-1.223.954h-4.889v-.954l2.445-1.909zM25 5v1h4v2h2V6h4V5z"/></g></symbol><symbol viewBox="0 0 60 60" id="iD-route-line" xmlns="http://www.w3.org/2000/svg"><path d="M36.969 45.469l-2.938 4.062-11-8 2.938-4.062z" fill="#46682F"/><path d="M34.125 45.406l2.75 4.188 12-8-2.75-4.188z" fill="#70372F"/><path d="M11.125 45.419l2.75 4.156 12-8-2.75-4.156z" fill="#2C5476"/><path d="M36.375 46.281l-1.75 2.438-11-8 1.75-2.438z" fill="#8CD05F"/><path d="M34.656 46.25l1.688 2.5 12-8-1.688-2.5z" fill="#E06D5F"/><path d="M11.656 46.263l1.688 2.5 12-8-1.688-2.5z" fill="#58A9ED"/><path d="M50 39.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0z" fill="#70372F"/><path d="M15 47.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0z" fill="#2C5476"/><path d="M27 39.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0z" fill="#395E53"/><path d="M38 47.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0z" fill="#5B502F"/><path d="M49 39.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 49 39.5zM37 47.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 37 47.5zM26 39.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 26 39.5zM14 47.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 14 47.5z" fill="#FFF"/><path d="M22 31l3-11 3-11h4l3 11 3 11z" fill="#989898"/></symbol><symbol viewBox="0 0 60 60" id="iD-route-master" xmlns="http://www.w3.org/2000/svg"><path d="M36.969 45.469l-2.938 4.062-11-8 2.938-4.062z" fill="#46682F"/><path d="M34.125 45.406l2.75 4.188 12-8-2.75-4.188z" fill="#70372F"/><path d="M11.125 45.419l2.75 4.156 12-8-2.75-4.156z" fill="#2C5476"/><path d="M36.375 46.281l-1.75 2.438-11-8 1.75-2.438z" fill="#8CD05F"/><path d="M34.656 46.25l1.688 2.5 12-8-1.688-2.5z" fill="#E06D5F"/><path d="M11.656 46.263l1.688 2.5 12-8-1.688-2.5z" fill="#58A9ED"/><path d="M50 39.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0z" fill="#70372F"/><path d="M15 47.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0z" fill="#2C5476"/><path d="M27 39.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0z" fill="#395E53"/><path d="M38 47.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0z" fill="#5B502F"/><path d="M49 39.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 49 39.5zM37 47.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 37 47.5zM26 39.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 26 39.5zM14 47.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 14 47.5z" fill="#FFF"/><g><path d="M36.969 31.469l-2.938 4.062-11-8 2.938-4.062z" fill="#46682F"/><path d="M34.125 31.406l2.75 4.188 12-8-2.75-4.188z" fill="#70372F"/><path d="M11.125 31.419l2.75 4.156 12-8-2.75-4.156z" fill="#2C5476"/><path d="M36.375 32.281l-1.75 2.438-11-8 1.75-2.438z" fill="#8CD05F"/><path d="M34.656 32.25l1.688 2.5 12-8-1.688-2.5z" fill="#E06D5F"/><path d="M11.656 32.263l1.688 2.5 12-8-1.688-2.5z" fill="#58A9ED"/><path d="M50 25.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0z" fill="#70372F"/><path d="M15 33.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0z" fill="#2C5476"/><path d="M27 25.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0z" fill="#395E53"/><path d="M38 33.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0z" fill="#5B502F"/><path d="M49 25.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 49 25.5zM37 33.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 37 33.5zM26 25.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 26 25.5zM14 33.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 14 33.5z" fill="#FFF"/></g><g><path d="M36.969 17.469l-2.938 4.062-11-8 2.938-4.062z" fill="#46682F"/><path d="M34.125 17.406l2.75 4.188 12-8-2.75-4.188z" fill="#70372F"/><path d="M11.125 17.419l2.75 4.156 12-8-2.75-4.156z" fill="#2C5476"/><path d="M36.375 18.281l-1.75 2.438-11-8 1.75-2.438z" fill="#8CD05F"/><path d="M34.656 18.25l1.688 2.5 12-8-1.688-2.5z" fill="#E06D5F"/><path d="M11.656 18.263l1.688 2.5 12-8-1.688-2.5z" fill="#58A9ED"/><path d="M50 11.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0z" fill="#70372F"/><path d="M15 19.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0z" fill="#2C5476"/><path d="M27 11.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0z" fill="#395E53"/><path d="M38 19.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0z" fill="#5B502F"/><path d="M49 11.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 49 11.5zM37 19.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 37 19.5zM26 11.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 26 11.5zM14 19.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 14 19.5z" fill="#FFF"/></g></symbol><symbol viewBox="0 0 60 60" id="iD-route-pipeline" xmlns="http://www.w3.org/2000/svg"><path d="M36.969 45.469l-2.938 4.062-11-8 2.938-4.062z" fill="#46682F"/><path d="M34.125 45.406l2.75 4.188 12-8-2.75-4.188z" fill="#70372F"/><path d="M11.125 45.419l2.75 4.156 12-8-2.75-4.156z" fill="#2C5476"/><path d="M36.375 46.281l-1.75 2.438-11-8 1.75-2.438z" fill="#8CD05F"/><path d="M34.656 46.25l1.688 2.5 12-8-1.688-2.5z" fill="#E06D5F"/><path d="M11.656 46.263l1.688 2.5 12-8-1.688-2.5z" fill="#58A9ED"/><path d="M50 39.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0z" fill="#70372F"/><path d="M15 47.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0z" fill="#2C5476"/><path d="M27 39.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0z" fill="#395E53"/><path d="M38 47.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0z" fill="#5B502F"/><path d="M49 39.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 49 39.5zM37 47.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 37 47.5zM26 39.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 26 39.5zM14 47.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 14 47.5z" fill="#FFF"/><g><path d="M15.5 13c-1.381 0-2.5 2.239-2.5 5s1.119 5 2.5 5H26V13H15.5zM30 13v10h14.5V13H30z" fill="#B5B5B5"/><path d="M47 18c0 2.761-1.119 5-2.5 5S42 20.761 42 18s1.119-5 2.5-5 2.5 2.239 2.5 5z" fill="#989898"/><path d="M27 10v14l-2 10h2l1.594-8h4.812L35 34h2l-2-10h-6V10h-2zm6 0v2h2v-2h-2zm-12 3c-1 0-2.5 2.239-2.5 5s1.5 5 2.5 5h2c-1.381 0-3-2.239-3-5s1.619-5 3-5h-2zm15 0c-1 0-2.5 2.239-2.5 5s1.5 5 2.5 5h2c-1.381 0-3-2.239-3-5s1.619-5 3-5h-2zm8.5 0c-1.381 0-2.5 2.239-2.5 5s1.119 5 2.5 5 2.5-2.239 2.5-5-1.119-5-2.5-5z" fill="#989898"/></g></symbol><symbol viewBox="0 0 60 60" id="iD-route-piste" xmlns="http://www.w3.org/2000/svg"><path d="M36.969 45.469l-2.938 4.062-11-8 2.938-4.062z" fill="#46682F"/><path d="M34.125 45.406l2.75 4.188 12-8-2.75-4.188z" fill="#70372F"/><path d="M11.125 45.419l2.75 4.156 12-8-2.75-4.156z" fill="#2C5476"/><path d="M36.375 46.281l-1.75 2.438-11-8 1.75-2.438z" fill="#8CD05F"/><path d="M34.656 46.25l1.688 2.5 12-8-1.688-2.5z" fill="#E06D5F"/><path d="M11.656 46.263l1.688 2.5 12-8-1.688-2.5z" fill="#58A9ED"/><path d="M50 39.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0z" fill="#70372F"/><path d="M15 47.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0z" fill="#2C5476"/><path d="M27 39.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0z" fill="#395E53"/><path d="M38 47.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0z" fill="#5B502F"/><path d="M49 39.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 49 39.5zM37 47.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 37 47.5zM26 39.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 26 39.5zM14 47.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 14 47.5z" fill="#FFF"/><path d="M41.884 18.834a2.417 2.417 0 1 1-4.834 0 2.417 2.417 0 0 1 4.834 0zm-2.062 11.908a.404.404 0 0 0-.532-.178 4.333 4.333 0 0 1-3.674.403l-10.2-5.108 4.383-2.191v-4.834l2.417 1.209v4.833l2.417 1.209 2.417-1.209-2.417-1.208v-7.251L29.799 14l-2.417 1.209v7.251l-4.383 2.191-4.302-2.143a.404.404 0 1 0-.354.725l16.919 8.459a3.822 3.822 0 0 0 1.611.307 6.198 6.198 0 0 0 2.771-.709.404.404 0 0 0 .182-.541l-.004-.007z" fill="currentColor"/></symbol><symbol viewBox="0 0 60 60" id="iD-route-power" xmlns="http://www.w3.org/2000/svg"><path d="M36.969 45.469l-2.938 4.062-11-8 2.938-4.062z" fill="#46682F"/><path d="M34.125 45.406l2.75 4.188 12-8-2.75-4.188z" fill="#70372F"/><path d="M11.125 45.419l2.75 4.156 12-8-2.75-4.156z" fill="#2C5476"/><path d="M36.375 46.281l-1.75 2.438-11-8 1.75-2.438z" fill="#8CD05F"/><path d="M34.656 46.25l1.688 2.5 12-8-1.688-2.5z" fill="#E06D5F"/><path d="M11.656 46.263l1.688 2.5 12-8-1.688-2.5z" fill="#58A9ED"/><path d="M50 39.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0z" fill="#70372F"/><path d="M15 47.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0z" fill="#2C5476"/><path d="M27 39.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0z" fill="#395E53"/><path d="M38 47.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0z" fill="#5B502F"/><path d="M49 39.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 49 39.5zM37 47.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 37 47.5zM26 39.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 26 39.5zM14 47.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 14 47.5z" fill="#FFF"/><path d="M20 8v1h2V8h-2zm4 0v1h2V8h-2zm10 0v1h2V8h-2zm4 0v1h2V8h-2zm-17.688 5c-.665 3.533-3.045 5.5-5.312 5.5h-1v1h1a5.462 5.462 0 0 0 3-.906v.906h1c2.879 0 5.615-2.478 6.312-6.5h-1c-.665 3.533-3.045 5.5-5.312 5.5h-.875c1.561-1.08 2.76-2.991 3.187-5.5h-1zm14.376 0c.697 4.022 3.433 6.5 6.312 6.5h1v-.906a5.462 5.462 0 0 0 3 .906h1v-1h-1c-2.267 0-4.647-1.967-5.312-5.5h-1c.427 2.509 1.626 4.42 3.187 5.5H41c-2.267 0-4.647-1.967-5.312-5.5h-1z" fill="#989898"/><path d="M28 8v2h-9v2h9v22h4V12h9v-2h-9V8h-4z" fill="#B5B5B5"/></symbol><symbol viewBox="0 0 60 60" id="iD-route-road" xmlns="http://www.w3.org/2000/svg"><path d="M36.969 45.469l-2.938 4.062-11-8 2.938-4.062z" fill="#46682F"/><path d="M34.125 45.406l2.75 4.188 12-8-2.75-4.188z" fill="#70372F"/><path d="M11.125 45.419l2.75 4.156 12-8-2.75-4.156z" fill="#2C5476"/><path d="M36.375 46.281l-1.75 2.438-11-8 1.75-2.438z" fill="#8CD05F"/><path d="M34.656 46.25l1.688 2.5 12-8-1.688-2.5z" fill="#E06D5F"/><path d="M11.656 46.263l1.688 2.5 12-8-1.688-2.5z" fill="#58A9ED"/><path d="M50 39.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0z" fill="#70372F"/><path d="M15 47.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0z" fill="#2C5476"/><path d="M27 39.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0z" fill="#395E53"/><path d="M38 47.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0z" fill="#5B502F"/><path d="M49 39.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 49 39.5zM37 47.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 37 47.5zM26 39.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 26 39.5zM14 47.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 14 47.5z" fill="#FFF"/><path d="M22.5 12l-2.875 6H18l-1 1v2h1.406L18 22v6l1 1h5l2 1h8l2-1h5l1-1v-6l-.406-1H43v-2l-1-1h-1.625L37.5 12zm1 3h13l1.5 4-1 1H23l-1-1zM21 23h3l1 2v1h-4l-1-1v-1zm15 0h3l1 1v1l-1 1h-4v-1zm-17 7v2l1 1h3l1-1v-2zm17 0v2l1 1h3l1-1v-2z" fill="#989898"/></symbol><symbol viewBox="0 0 60 60" id="iD-route-subway" xmlns="http://www.w3.org/2000/svg"><path d="M36.969 45.469l-2.938 4.062-11-8 2.938-4.062z" fill="#46682F"/><path d="M34.125 45.406l2.75 4.188 12-8-2.75-4.188z" fill="#70372F"/><path d="M11.125 45.419l2.75 4.156 12-8-2.75-4.156z" fill="#2C5476"/><path d="M36.375 46.281l-1.75 2.438-11-8 1.75-2.438z" fill="#8CD05F"/><path d="M34.656 46.25l1.688 2.5 12-8-1.688-2.5z" fill="#E06D5F"/><path d="M11.656 46.263l1.688 2.5 12-8-1.688-2.5z" fill="#58A9ED"/><path d="M50 39.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0z" fill="#70372F"/><path d="M15 47.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0z" fill="#2C5476"/><path d="M27 39.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0z" fill="#395E53"/><path d="M38 47.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0z" fill="#5B502F"/><path d="M49 39.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 49 39.5zM37 47.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 37 47.5zM26 39.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 26 39.5zM14 47.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 14 47.5z" fill="#FFF"/><g><path d="M22.5 31h3.333L25 32.488h10L34.167 31H37.5l2.5 4.464h-3.333l-.834-1.488H24.167l-.834 1.488H20L22.5 31zM25 8l-6 5.739v14.348L21 30h18l2-1.913V13.739L35 8H25zm1 1.913h8v1.913h-8V9.913zm-4 3.826h16l1 .957v3.826l-3 1.913H24l-3-1.913v-3.826l1-.957zm-1 10.522h3l2 1.913v.957h-4l-1-.957v-1.913zm15 0h3v1.913l-1 .957h-4v-.957l2-1.913z" fill="#989898"/><path d="M23 3c-5 0-9 3-9 9v20l3-1V12c0-4 3-6 6-6h14c3 0 6 2 6 6v19l3 1V12c0-6-4.068-8.178-9-9h-8z" fill="#B5B5B5"/></g></symbol><symbol viewBox="0 0 60 60" id="iD-route-train" xmlns="http://www.w3.org/2000/svg"><path d="M36.969 45.469l-2.938 4.062-11-8 2.938-4.062z" fill="#46682F"/><path d="M34.125 45.406l2.75 4.188 12-8-2.75-4.188z" fill="#70372F"/><path d="M11.125 45.419l2.75 4.156 12-8-2.75-4.156z" fill="#2C5476"/><path d="M36.375 46.281l-1.75 2.438-11-8 1.75-2.438z" fill="#8CD05F"/><path d="M34.656 46.25l1.688 2.5 12-8-1.688-2.5z" fill="#E06D5F"/><path d="M11.656 46.263l1.688 2.5 12-8-1.688-2.5z" fill="#58A9ED"/><path d="M50 39.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0z" fill="#70372F"/><path d="M15 47.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0z" fill="#2C5476"/><path d="M27 39.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0z" fill="#395E53"/><path d="M38 47.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0z" fill="#5B502F"/><path d="M49 39.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 49 39.5zM37 47.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 37 47.5zM26 39.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 26 39.5zM14 47.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 14 47.5z" fill="#FFF"/><path d="M23.5 11L22 12l-.469 2H18.25c-.554 0-.866.463-1 1L17 16c-.134.537.446 1 1 1h24c.554 0 1.134-.463 1-1l-.25-1c-.134-.537-.446-1-1-1h-2.781l-.469-2-1.5-1-1 1 .469 2H24.031l.469-2-1-1zm-2 4a.5.5 0 1 1 0 1 .5.5 0 0 1 0-1zm17 0a.5.5 0 1 1 0 1 .5.5 0 0 1 0-1zm-17.938 3l-.468 2H17.25c-.554 0-.866.463-1 1L16 22c-.134.537.446 1 1 1h26c.554 0 1.134-.463 1-1l-.25-1c-.134-.537-.446-1-1-1h-2.344l-.468-2h-2.5l.468 2H22.594l.468-2h-2.5zm-.062 3a.5.5 0 1 1 0 1 .5.5 0 0 1 0-1zm19 0a.5.5 0 1 1 0 1 .5.5 0 0 1 0-1zm-20.344 3l-.468 2H16.25c-.554 0-.866.463-1 1L15 28c-.134.537.446 1 1 1h28c.554 0 1.134-.463 1-1l-.25-1c-.134-.537-.446-1-1-1h-1.938l-.468-2h-2.5l.468 2H21.188l.468-2h-2.5zm.344 3a.5.5 0 1 1 0 1 .5.5 0 0 1 0-1zm21 0a.5.5 0 1 1 0 1 .5.5 0 0 1 0-1zm-22.781 3L17 33l1.5 1 1-1 .719-3h-2.5zm22.562 0L41 33l1 1 1.5-1-.719-3h-2.5z" fill="#989898"/></symbol><symbol viewBox="0 0 60 60" id="iD-route-tram" xmlns="http://www.w3.org/2000/svg"><path d="M35.969 47.469l-2.938 4.062-11-8 2.938-4.062z" fill="#46682F"/><path d="M33.125 47.406l2.75 4.188 12-8-2.75-4.188z" fill="#70372F"/><path d="M10.125 47.419l2.75 4.156 12-8-2.75-4.156z" fill="#2C5476"/><path d="M35.375 48.281l-1.75 2.438-11-8 1.75-2.438z" fill="#8CD05F"/><path d="M33.656 48.25l1.688 2.5 12-8-1.688-2.5z" fill="#E06D5F"/><path d="M10.656 48.263l1.688 2.5 12-8-1.688-2.5z" fill="#58A9ED"/><path d="M49 41.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0z" fill="#70372F"/><path d="M14 49.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0z" fill="#2C5476"/><path d="M26 41.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0z" fill="#395E53"/><path d="M37 49.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0z" fill="#5B502F"/><path d="M48 41.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 48 41.5zM36 49.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 36 49.5zM25 41.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 25 41.5zM13 49.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 13 49.5z" fill="#FFF"/><g><path d="M34.031 34L35 36l1 1 1.5-1-.969-2zM23.5 34l-.969 2-1 1-1.5-1L21 34zM25 11l-5 6v14l2 2h14l2-2V17l-5-6h-8zm0 1h8v2h-8v-2zm-2 5h12l1 1v4H22v-4l1-1zm-1 10h3l2 2v1h-4l-1-1v-2zm11 0h3v2l-1 1h-4v-1l2-2z" fill="#989898"/><path d="M24 7v1h4v2h2V8h4V7z" fill="#B5B5B5"/></g></symbol><symbol viewBox="0 0 60 60" id="iD-route-water" xmlns="http://www.w3.org/2000/svg"><path d="M36.969 45.469l-2.938 4.062-11-8 2.938-4.062z" fill="#46682F"/><path d="M34.125 45.406l2.75 4.188 12-8-2.75-4.188z" fill="#70372F"/><path d="M11.125 45.419l2.75 4.156 12-8-2.75-4.156z" fill="#2C5476"/><path d="M36.375 46.281l-1.75 2.438-11-8 1.75-2.438z" fill="#8CD05F"/><path d="M34.656 46.25l1.688 2.5 12-8-1.688-2.5z" fill="#E06D5F"/><path d="M11.656 46.263l1.688 2.5 12-8-1.688-2.5z" fill="#58A9ED"/><path d="M50 39.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0z" fill="#70372F"/><path d="M15 47.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0z" fill="#2C5476"/><path d="M27 39.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0z" fill="#395E53"/><path d="M38 47.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0z" fill="#5B502F"/><path d="M49 39.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 49 39.5zM37 47.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 37 47.5zM26 39.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 26 39.5zM14 47.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 14 47.5z" fill="#FFF"/><path d="M18.007 23.759c-.214.8-.82 1.333-1.354 1.19-.533-.143-.792-.908-.578-1.708.215-.8.821-1.333 1.355-1.19.533.143.792.908.577 1.708zM19.84 13.75c.553-.957.419-2.068-.299-2.482-.717-.414-1.746.025-2.299.982-.552.957-.418 2.068.299 2.482.718.414 1.747-.025 2.299-.982zm21.624 3.958c-.215-.8.044-1.565.577-1.708.534-.143 1.14.39 1.355 1.19.214.8-.045 1.565-.578 1.708-.534.143-1.14-.39-1.354-1.19zM44.34 28.75c-.552-.957-.418-2.068.299-2.482.718-.414 1.747.025 2.299.982.553.957.419 2.068-.299 2.482-.717.414-1.746-.025-2.299-.982z" fill="currentColor" opacity=".5"/><path d="M16.803 32s-.536-1.846-.345-2.75c.221-1.047 1.655-2.75 1.655-2.75s1.433-1.703 1.654-2.75c.192-.904-.345-2.75-.345-2.75s-.536-1.846-.345-2.75c.221-1.047 1.655-2.75 1.655-2.75s1.433-1.703 1.654-2.75c.192-.904-.345-2.75-.345-2.75h16.5s1.434 1.703 1.655 2.75c.191.904-.345 2.75-.345 2.75s-.537 1.846-.345 2.75C39.727 19.297 41.16 21 41.16 21s1.434 1.703 1.655 2.75c.191.904-.345 2.75-.345 2.75s-.537 1.846-.345 2.75c.221 1.047 1.654 2.75 1.654 2.75z" fill="currentColor"/></symbol><symbol viewBox="0 0 44 24" id="iD-turn-no" xmlns="http://www.w3.org/2000/svg"><path d="M44 12c0-2-1.15-3.29-2-4L33.581.969c-1.512-1.28-4.003-1.179-5.406.219l-1 1A4.048 4.048 0 0 0 25.987 5h-4.375c-2.187-2.987-5.671-5-9.625-5C5.407 0 0 5.42 0 12s5.407 12 11.987 12c3.969 0 7.471-1.993 9.656-5h4.344c0 1.055.438 2.102 1.188 2.844l1 1c1.403 1.397 3.894 1.498 5.406.218L42 16c.921-.772 2-2 2-4z" opacity=".5"/><path d="M40 12l-9.013-8-1 1v4H19.393c-1.192-2.92-4.057-5-7.406-5C7.569 4 4 7.582 4 12s3.569 8 7.987 8a8.006 8.006 0 0 0 7.438-5h10.562v4l1 1z" fill="#E06D5F"/><path d="M14 8v8l-1 1h-2l-1-1V8l1-1h2z" opacity=".5"/></symbol><symbol viewBox="0 0 32 32" id="iD-turn-no-u" xmlns="http://www.w3.org/2000/svg"><path d="M0 16C0 7.211 7.211 0 16 0s16 7.211 16 16-7.211 16-16 16S0 24.789 0 16z" opacity=".5"/><path d="M4 16C4 9.373 9.373 4 16 4s12 5.373 12 12-5.373 12-12 12S4 22.627 4 16z" fill="#E06D5F"/><path d="M9.138 20.5l5-5 2-2 4-4h1l1 1v1l-4 4-2 2-5 5h-1l-1-1v-1zm.875-6.5l1-2 1-1 2-1H18.2l-2.781 2.781L15.2 13h-1.187l-1 1v1.188l-2.594 2.593-.406-.781v-3zm4.031 7l2.781-2.781.188-.219 1.594-1.562 3.406 3.062-5 4.5v-3h-2.969z" opacity=".5"/></symbol><symbol viewBox="0 0 44 24" id="iD-turn-only" xmlns="http://www.w3.org/2000/svg"><path d="M44 12c0-2-1.15-3.29-2-4L33.581.969c-1.512-1.28-4.003-1.179-5.406.219l-1 1A4.048 4.048 0 0 0 25.987 5h-4.375c-2.187-2.987-5.671-5-9.625-5C5.407 0 0 5.42 0 12s5.407 12 11.987 12c3.969 0 7.471-1.993 9.656-5h4.344c0 1.055.438 2.102 1.188 2.844l1 1c1.403 1.397 3.894 1.498 5.406.218L42 16c.921-.772 2-2 2-4z" opacity=".5"/><path d="M40 12l-9.013-8-1 1v4H19.393c-1.192-2.92-4.057-5-7.406-5C7.569 4 4 7.582 4 12s3.569 8 7.987 8a8.006 8.006 0 0 0 7.438-5h10.562v4l1 1z" fill="#7092FF"/><path d="M14.997 12.015a3 3 0 1 1-6 0 3 3 0 0 1 6 0z" opacity=".5"/></symbol><symbol viewBox="0 0 32 32" id="iD-turn-only-u" xmlns="http://www.w3.org/2000/svg"><path d="M16 0C7.211 0 0 7.211 0 16s7.211 16 16 16 16-7.211 16-16S24.789 0 16 0z" opacity=".5"/><path d="M4 16C4 9.373 9.373 4 16 4s12 5.373 12 12-5.373 12-12 12S4 22.627 4 16z" fill="#7092FF"/><path d="M17 24v-3h-3l-2-1-1-1-1-2v-3l1-2 1-1 2-1h5l1 1v1l-1 1h-5l-1 1v3l1 1h3v-3l5 4.5z" opacity=".5"/></symbol><symbol viewBox="0 0 37 11" id="iD-turn-shadow" xmlns="http://www.w3.org/2000/svg"><path d="M31.5 0a5.5 5.5 0 0 1 0 11h-26a5.5 5.5 0 1 1 0-11h26z" fill="currentColor"/><path d="M6 6h26" stroke="#000" stroke-width="3" stroke-linecap="round" fill="none"/><path d="M6 6h26" stroke="#FFF" stroke-width="2" stroke-linecap="round" fill="none"/><path d="M7.5 5.5a2 2 0 1 1-3.999.001A2 2 0 0 1 7.5 5.5z"/><path d="M7 5.5a1.5 1.5 0 1 1-3 0 1.5 1.5 0 0 1 3 0z" fill="#BBB"/><path d="M33.5 5.5a2 2 0 1 1-3.999.001A2 2 0 0 1 33.5 5.5z"/><path d="M33 5.5a1.5 1.5 0 1 1-3 0 1.5 1.5 0 0 1 3 0z" fill="#BBB"/></symbol><symbol viewBox="0 0 44 24" id="iD-turn-yes" xmlns="http://www.w3.org/2000/svg"><path d="M44 12c0-2-1.15-3.29-2-4L33.581.969c-1.512-1.28-4.003-1.179-5.406.219l-1 1A4.048 4.048 0 0 0 25.987 5h-4.375c-2.187-2.987-5.671-5-9.625-5C5.407 0 0 5.42 0 12s5.407 12 11.987 12c3.969 0 7.471-1.993 9.656-5h4.344c0 1.055.438 2.102 1.188 2.844l1 1c1.403 1.397 3.894 1.498 5.406.218L42 16c.921-.772 2-2 2-4z" opacity=".5"/><path d="M40 12l-9.013-8-1 1v4H19.393c-1.192-2.92-4.057-5-7.406-5C7.569 4 4 7.582 4 12s3.569 8 7.987 8a8.006 8.006 0 0 0 7.438-5h10.562v4l1 1z" fill="#8CD05F"/><path d="M14.997 12.015a3 3 0 1 1-6 0 3 3 0 0 1 6 0z" opacity=".5"/></symbol><symbol viewBox="0 0 32 32" id="iD-turn-yes-u" xmlns="http://www.w3.org/2000/svg"><path d="M16 0C7.211 0 0 7.211 0 16s7.211 16 16 16 16-7.211 16-16S24.789 0 16 0z" opacity=".5"/><path d="M4 16C4 9.373 9.373 4 16 4s12 5.373 12 12-5.373 12-12 12S4 22.627 4 16z" fill="#8CD05F"/><path d="M17 24v-3h-3l-2-1-1-1-1-2v-3l1-2 1-1 2-1h5l1 1v1l-1 1h-5l-1 1v3l1 1h3v-3l5 4.5z" opacity=".5"/></symbol><symbol viewBox="0 0 60 60" id="iD-walkthrough-mouse" xmlns="http://www.w3.org/2000/svg"><path d="M29.5 12v15H41c0-10-4-15-11.5-15z" fill="currentColor"/><path d="M29.5 12v15H18c0-10 5-15 11.5-15z" fill="inherit"/><path d="M29.5 11C36.404 11 42 16.596 42 23.5v18C42 48.404 36.404 54 29.5 54S17 48.404 17 41.5v-18C17 16.596 22.596 11 29.5 11zM19 28v13.5C19 47.299 23.701 52 29.5 52S40 47.299 40 41.5V28H19zm11.573-14.946l-.073-.004V26H40v-2.5c-.177-5.881-3.925-9.324-9.427-10.446zM19 26h9.5V13.05c-5.512.765-9.221 4.921-9.5 10.45V26z" fill="#000001"/></symbol><symbol viewBox="0 0 60 60" id="iD-waterway-canal" xmlns="http://www.w3.org/2000/svg"><path d="M49.5 39a2.5 2.5 0 1 1 0 5c-1.241-.056-1.887-.661-2.346-1.75H12.846c-.337 1.114-1.239 1.638-2.346 1.75a2.5 2.5 0 1 1 0-5c1.241.056 1.887.661 2.346 1.75h34.308c.337-1.114 1.239-1.639 2.346-1.75zM22 14s.535 1.846.344 2.75c-.222 1.047-1.656 2.75-1.656 2.75s-1.435 1.703-1.657 2.75c-.191.904.344 2.75.344 2.75s.535 1.846.344 2.75c-.222 1.047-1.656 2.75-1.656 2.75s-1.435 1.703-1.657 2.75c-.191.904.344 2.75.344 2.75h27s-1.435-1.703-1.656-2.75c-.191-.904.344-2.75.344-2.75s.534-1.846.343-2.75C42.56 26.703 41.125 25 41.125 25s-1.435-1.703-1.656-2.75c-.191-.904.344-2.75.344-2.75s.534-1.846.343-2.75C39.935 15.703 38.5 14 38.5 14zm6 2h4l2 2 2 12-4 2h-4l-4-2 2-12zm4.2 8l.8 4h-6l.8-4zm-.6-3l.4 2h-4l.4-2zm-.6-3l.4 2h-2.8l.4-2z" fill="currentColor"/><path d="M24 30h12l-4 2h-4z" fill="currentColor" opacity=".601"/><path d="M51 41.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 51 41.5zM12 41.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 12 41.5z" fill="#FFF"/></symbol><symbol viewBox="0 0 60 60" id="iD-waterway-ditch" xmlns="http://www.w3.org/2000/svg"><path d="M49.5 39a2.5 2.5 0 1 1 0 5c-1.241-.056-1.887-.661-2.346-1.75H12.846c-.337 1.114-1.239 1.638-2.346 1.75a2.5 2.5 0 1 1 0-5c1.241.056 1.887.661 2.346 1.75h34.308c.337-1.114 1.239-1.639 2.346-1.75zM24.762 36L29 14h2.5l4.238 22z" fill="currentColor"/><path d="M26 14l-4.25 22h2L28 14h-2zm6.5 0l4.25 22h2L34.5 14h-2z" fill="#B5B5B5"/><path d="M51 41.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 51 41.5zM12 41.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 12 41.5z" fill="#FFF"/></symbol><symbol viewBox="0 0 60 60" id="iD-waterway-river" xmlns="http://www.w3.org/2000/svg"><path d="M49.5 39a2.5 2.5 0 1 1 0 5c-.907.004-1.373-.402-1.971-1H12.471c-.493.678-1.174.92-1.971 1a2.5 2.5 0 1 1 0-5c.907-.004 1.373.402 1.971 1h35.058c.493-.678 1.174-.92 1.971-1zM16.762 36s-.536-1.846-.345-2.75c.221-1.047 1.654-2.75 1.654-2.75s1.434-1.703 1.655-2.75c.191-.904-.345-2.75-.345-2.75s-.536-1.846-.345-2.75c.221-1.047 1.655-2.75 1.655-2.75s1.433-1.703 1.654-2.75C22.536 15.846 22 14 22 14h16.5s1.433 1.703 1.655 2.75c.191.904-.345 2.75-.345 2.75s-.537 1.846-.346 2.75c.222 1.047 1.655 2.75 1.655 2.75s1.434 1.703 1.655 2.75c.191.904-.345 2.75-.345 2.75s-.537 1.846-.346 2.75c.222 1.047 1.655 2.75 1.655 2.75z" fill="currentColor"/><path d="M17.966 27.759c-.214.8-.821 1.333-1.354 1.19-.534-.143-.792-.908-.578-1.708.214-.8.821-1.333 1.354-1.19.534.143.792.908.578 1.708zm1.833-10.009c.552-.957.418-2.068-.299-2.482-.717-.414-1.747.025-2.299.982-.552.957-.418 2.068.299 2.482.717.414 1.747-.025 2.299-.982zm21.623 3.958c-.214-.8.045-1.565.578-1.708.534-.143 1.14.39 1.354 1.19.215.8-.044 1.565-.577 1.708-.534.143-1.14-.39-1.355-1.19zm2.877 11.042c-.552-.957-.418-2.068.299-2.482.718-.414 1.747.025 2.299.982.552.957.419 2.068-.299 2.482-.717.414-1.747-.025-2.299-.982z" fill="currentColor" opacity=".5"/><path d="M51 41.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 51 41.5zM12 41.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 12 41.5z" fill="#FFF"/></symbol><symbol viewBox="0 0 60 60" id="iD-waterway-stream" xmlns="http://www.w3.org/2000/svg"><path d="M49.5 39a2.5 2.5 0 1 1 0 5c-1.241-.056-1.887-.661-2.346-1.75H12.846c-.337 1.114-1.239 1.638-2.346 1.75a2.5 2.5 0 1 1 0-5c1.241.056 1.887.661 2.346 1.75h34.308c.337-1.114 1.239-1.639 2.346-1.75zM22.762 36s-.536-1.846-.345-2.75c.221-1.047 1.654-2.75 1.654-2.75s1.434-1.703 1.655-2.75c.191-.904-.345-2.75-.345-2.75s-.536-1.846-.345-2.75c.221-1.047 1.655-2.75 1.655-2.75s1.433-1.703 1.654-2.75C28.536 15.846 28 14 28 14h4.5s1.433 1.703 1.655 2.75c.191.904-.345 2.75-.345 2.75s-.537 1.846-.346 2.75c.222 1.047 1.655 2.75 1.655 2.75s1.434 1.703 1.655 2.75c.191.904-.345 2.75-.345 2.75s-.537 1.846-.346 2.75c.222 1.047 1.655 2.75 1.655 2.75z" fill="currentColor"/><path d="M23.966 27.759c-.214.8-.821 1.333-1.354 1.19-.534-.143-.792-.908-.578-1.708.214-.8.821-1.333 1.354-1.19.534.143.792.908.578 1.708zm1.833-10.009c.552-.957.418-2.068-.299-2.482-.717-.414-1.747.025-2.299.982-.552.957-.418 2.068.299 2.482.717.414 1.747-.025 2.299-.982zm9.623 3.958c-.214-.8.045-1.565.578-1.708.534-.143 1.14.39 1.354 1.19.215.8-.044 1.565-.577 1.708-.534.143-1.14-.39-1.355-1.19zm2.877 11.042c-.552-.957-.418-2.068.299-2.482.718-.414 1.747.025 2.299.982.552.957.419 2.068-.299 2.482-.717.414-1.747-.025-2.299-.982z" fill="currentColor" opacity=".5"/><path d="M51 41.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 51 41.5zM12 41.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 12 41.5z" fill="#FFF"/></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 60 60" id="iD-boundary" xmlns="http://www.w3.org/2000/svg"><path d="M30.5 51.5l-11-11 21-21 11 11z" fill="#58A9ED"/><path d="M19.5 40.5l-11-11 21-21 11 11z" fill="#8CD05F"/><path d="M20 41l10.5-10.5L41 20" fill="#FFF"/><path d="M20 41l10.5-10.5L41 20" stroke="#444" stroke-dasharray="2,1" fill="none"/><path d="M23 40a3 3 0 1 1-6 0 3 3 0 0 1 6 0z" fill="#444"/><path d="M22 40a2 2 0 1 1-3.999.001A2 2 0 0 1 22 40z" fill="#FFF"/><path d="M43 20a3 3 0 1 1-6 0 3 3 0 0 1 6 0z" fill="#444"/><path d="M42 20a2 2 0 1 1-3.999.001A2 2 0 0 1 42 20z" fill="#FFF"/><path d="M33 30a3 3 0 1 1-6 0 3 3 0 0 1 6 0z" fill="#444"/><path d="M32 30a2 2 0 1 1-3.999.001A2 2 0 0 1 32 30z" fill="#FFF"/></symbol><symbol viewBox="0 0 60 60" id="iD-category-path" xmlns="http://www.w3.org/2000/svg"><path d="M22 41l3-11 3-11h4l3 11 3 11z" fill="currentColor"/></symbol><symbol viewBox="0 0 60 60" id="iD-category-rail" xmlns="http://www.w3.org/2000/svg"><path d="M23.5 18L22 19l-.469 2H18.25c-.554 0-.866.463-1 1L17 23c-.134.537.446 1 1 1h24c.554 0 1.134-.463 1-1l-.25-1c-.134-.537-.446-1-1-1h-2.781l-.469-2-1.5-1-1 1 .469 2H24.031l.469-2-1-1zm-2 4a.5.5 0 1 1 0 1 .5.5 0 0 1 0-1zm17 0a.5.5 0 1 1 0 1 .5.5 0 0 1 0-1zm-17.938 3l-.468 2H17.25c-.554 0-.866.463-1 1L16 29c-.134.537.446 1 1 1h26c.554 0 1.134-.463 1-1l-.25-1c-.134-.537-.446-1-1-1h-2.344l-.468-2h-2.5l.468 2H22.594l.468-2h-2.5zm-.062 3a.5.5 0 1 1 0 1 .5.5 0 0 1 0-1zm19 0a.5.5 0 1 1 0 1 .5.5 0 0 1 0-1zm-20.344 3l-.468 2H16.25c-.554 0-.866.463-1 1L15 35c-.134.537.446 1 1 1h28c.554 0 1.134-.463 1-1l-.25-1c-.134-.537-.446-1-1-1h-1.938l-.468-2h-2.5l.468 2H21.188l.468-2h-2.5zm.344 3a.5.5 0 1 1 0 1 .5.5 0 0 1 0-1zm21 0a.5.5 0 1 1 0 1 .5.5 0 0 1 0-1zm-22.781 3L17 40l1.5 1 1-1 .719-3h-2.5zm22.562 0L41 40l1 1 1.5-1-.719-3h-2.5z" fill="#989898"/></symbol><symbol viewBox="0 0 60 60" id="iD-category-roads" xmlns="http://www.w3.org/2000/svg"><path d="M22.5 20l-2.875 6H18l-1 1v2h1.406L18 30v6l1 1h5l2 1h8l2-1h5l1-1v-6l-.406-1H43v-2l-1-1h-1.625L37.5 20zm1 3h13l1.5 4-1 1H23l-1-1zM21 31h3l1 2v1h-4l-1-1v-1zm15 0h3l1 1v1l-1 1h-4v-1zm-17 7v2l1 1h3l1-1v-2zm17 0v2l1 1h3l1-1v-2z" fill="#989898"/></symbol><symbol viewBox="0 0 60 60" id="iD-category-utility" xmlns="http://www.w3.org/2000/svg"><svg y="7"><path d="M20 10v1h2v-1h-2zm4 0v1h2v-1h-2zm10 0v1h2v-1h-2zm4 0v1h2v-1h-2zm-17.688 5c-.665 3.533-3.045 5.5-5.312 5.5h-1v1h1a5.462 5.462 0 0 0 3-.906v.906h1c2.879 0 5.615-2.478 6.312-6.5h-1c-.665 3.533-3.045 5.5-5.312 5.5h-.875c1.561-1.08 2.76-2.991 3.187-5.5h-1zm14.376 0c.697 4.022 3.433 6.5 6.312 6.5h1v-.906a5.462 5.462 0 0 0 3 .906h1v-1h-1c-2.267 0-4.647-1.967-5.312-5.5h-1c.427 2.509 1.626 4.42 3.187 5.5H41c-2.267 0-4.647-1.967-5.312-5.5h-1z" fill="#989898"/><path d="M28 10v2h-9v2h9v22h4V14h9v-2h-9v-2h-4z" fill="#989898"/></svg></symbol><symbol viewBox="0 0 60 60" id="iD-category-water" xmlns="http://www.w3.org/2000/svg"><path d="M16.762 41s-.537-1.846-.345-2.75c.221-1.047 1.654-2.75 1.654-2.75s1.434-1.703 1.655-2.75c.191-.904-.345-2.75-.345-2.75s-.537-1.846-.345-2.75c.221-1.047 1.654-2.75 1.654-2.75s1.434-1.703 1.655-2.75C22.536 20.846 22 19 22 19h16.5s1.433 1.703 1.655 2.75c.191.904-.346 2.75-.346 2.75s-.536 1.846-.345 2.75c.222 1.047 1.655 2.75 1.655 2.75s1.433 1.703 1.655 2.75c.191.904-.346 2.75-.346 2.75s-.536 1.846-.345 2.75c.222 1.047 1.655 2.75 1.655 2.75z" fill="currentColor"/><path d="M17.966 32.759c-.215.8-.821 1.333-1.354 1.19-.534-.143-.792-.908-.578-1.708.214-.8.821-1.333 1.354-1.19.534.143.792.908.578 1.708zm1.833-10.009c.552-.957.418-2.068-.299-2.482-.717-.414-1.747.025-2.299.982-.552.957-.418 2.068.299 2.482.717.414 1.747-.025 2.299-.982zm21.623 3.958c-.214-.8.045-1.565.578-1.708.533-.143 1.14.39 1.354 1.19.215.8-.044 1.565-.578 1.708-.533.143-1.139-.39-1.354-1.19zm2.877 11.042c-.552-.957-.418-2.068.299-2.482.718-.414 1.747.025 2.299.982.552.957.419 2.068-.299 2.482-.717.414-1.747-.025-2.299-.982z" fill="currentColor" opacity=".5"/></symbol><symbol viewBox="0 0 200 80" id="iD-graphic-areas" xmlns="http://www.w3.org/2000/svg"><path d="M0 0h200v80H0z" fill="#FFF"/><path d="M128.955 27.415c-2.429 6.206-16.526 10.008-31.484 8.491-14.958-1.516-25.111-7.777-22.676-13.982 2.434-6.203 16.529-10.003 31.483-8.487 14.953 1.516 25.106 7.774 22.677 13.978z" fill="#7092FF"/><path d="M53 36L18 46v-6l35-10zM54 30.5v6L83 51v-6L54 30.5z" fill="#A9A9A9"/><path d="M173.5 28c-1.229 0-2.228.893-2.438 2.062A2.5 2.5 0 0 0 168 32.5c0 .639.23 1.214.625 1.656A2.514 2.514 0 0 0 167 36.5c0 1.381 1 2.5 2.5 2.5h.5l2 3.5v1.437c-1.479-.431-2.886-.88-4-1.437-5-2.5-9.434-6.983-15-7.5-6.041-.561-11.667 3.333-17.5 5-5.833 1.667-16.939 1.959-17.5 8l30 15 35-10c.326-3.505-3.708-6.987-8-8.219V42.5l2-3.5h.719C179 39.014 180 37.805 180 36.5c0-1.07-.68-1.987-1.625-2.344A2.46 2.46 0 0 0 179 32.5a2.5 2.5 0 0 0-3.062-2.438c-.21-1.169-1.209-2.062-2.438-2.062zM172 39h3l-1 2h-1z" fill="#8CD05F"/><path d="M18.5 46.5l30 15v-6l-30-15z" fill="#C1C1C1"/><path d="M18.5 46.5l30 15v-6l-30-15z" stroke="#FFF" stroke-width="2" fill="none"/><path d="M83.5 51.5l-35 10v-6l35-10z" fill="#C1C1C1"/><path d="M83.5 51.5l-35 10v-6l35-10z" stroke="#FFF" stroke-width="2" fill="none"/><path d="M18 46l30 15v-6L18 40zM83 51L48 61v-6l35-10z" fill="#A9A9A9"/><path d="M107 17s2.636 3.529 5.438 3.969C107.96 20.816 107 19 107 19s-.96 1.816-5.438 1.969C104.364 20.529 107 17 107 17zM93 19s2.636 3.529 5.438 3.969C93.96 22.816 93 21 93 21s-.96 1.816-5.438 1.969C90.364 22.529 93 19 93 19zM103 24s2.636 3.529 5.438 3.969C103.96 27.816 103 26 103 26s-.96 1.816-5.438 1.969C100.364 27.529 103 24 103 24z" fill="#FFF"/></symbol><symbol viewBox="0 0 200 80" id="iD-graphic-buildings" xmlns="http://www.w3.org/2000/svg"><path d="M0 0h200v80H0z" fill="#FFF"/><path d="M20 58.544l24.051 10.127V47.152L20 37.025z" fill="#E16E5F"/><path d="M70 57.911l-25.949 10.76V47.152l13.291-12.025L70 37.025z" fill="#9F655C"/><path d="M20 37.025L34.557 25l22.785 10.127-13.291 12.025L20 37.025z" fill="#695757"/><path d="M70 37.025L34.557 25l22.785 10.127" fill="#4B4442"/><g fill="#695757"><path d="M29.494 62.342v-6.329l4.43 1.898v6.329l-4.43-1.898zM37.089 65.506v-6.329l4.43 1.899v6.329l-4.43-1.899zM21.899 59.177v-6.329l4.43 1.899v6.329l-4.43-1.899zM37.089 54.114v-6.329l4.43 1.899v6.329l-4.43-1.899zM29.494 50.949V44.62l4.43 1.899v6.329l-4.43-1.899zM21.899 47.785v-6.329l4.43 1.898v6.33l-4.43-1.899z"/></g><g fill="#554646"><path d="M52.278 64.873v-6.329l-4.43 1.899v6.329l4.43-1.899zM52.278 53.481v-6.329l-4.43 1.899v6.329l4.43-1.899zM59.873 61.709V55.38l-4.43 1.898v6.33l4.43-1.899zM59.873 50.316v-6.329l-4.43 1.899v6.329l4.43-1.899zM67.468 58.544v-6.329l-4.43 1.899v6.329l4.43-1.899zM67.468 47.152v-6.329l-4.43 1.899v6.329l4.43-1.899z"/></g><g><path d="M75.5 36.544l24.051 10.127V25.152L75.5 15.025z" fill="#E16E5F"/><path d="M125.5 35.911l-25.949 10.76V25.152l13.291-12.025 12.658 1.898z" fill="#9F655C"/><path d="M75.5 15.025L90.057 3l22.785 10.127-13.291 12.025L75.5 15.025z" fill="#695757"/><path d="M125.5 15.025L90.057 3l22.785 10.127" fill="#4B4442"/><g fill="#695757"><path d="M84.994 40.342v-6.329l4.43 1.898v6.329l-4.43-1.898zM92.589 43.506v-6.329l4.43 1.899v6.329l-4.43-1.899zM77.399 37.177v-6.329l4.43 1.899v6.329l-4.43-1.899zM92.589 32.114v-6.329l4.43 1.899v6.329l-4.43-1.899zM84.994 28.949V22.62l4.43 1.899v6.329l-4.43-1.899zM77.399 25.785v-6.329l4.43 1.898v6.33l-4.43-1.899z"/></g><g fill="#554646"><path d="M107.778 42.873v-6.329l-4.43 1.899v6.329l4.43-1.899zM107.778 31.481v-6.329l-4.43 1.899v6.329l4.43-1.899zM115.373 39.709V33.38l-4.43 1.898v6.33l4.43-1.899zM115.373 28.316v-6.329l-4.43 1.899v6.329l4.43-1.899zM122.968 36.544v-6.329l-4.43 1.899v6.329l4.43-1.899zM122.968 25.152v-6.329l-4.43 1.899v6.329l4.43-1.899z"/></g></g><g><path d="M130.5 58.544l24.051 10.127V47.152L130.5 37.025z" fill="#E16E5F"/><path d="M180.5 57.911l-25.949 10.76V47.152l13.291-12.025 12.658 1.898z" fill="#9F655C"/><path d="M130.5 37.025L145.057 25l22.785 10.127-13.291 12.025L130.5 37.025z" fill="#695757"/><path d="M180.5 37.025L145.057 25l22.785 10.127" fill="#4B4442"/><g fill="#695757"><path d="M139.994 62.342v-6.329l4.43 1.898v6.329l-4.43-1.898zM147.589 65.506v-6.329l4.43 1.899v6.329l-4.43-1.899zM132.399 59.177v-6.329l4.43 1.899v6.329l-4.43-1.899zM147.589 54.114v-6.329l4.43 1.899v6.329l-4.43-1.899zM139.994 50.949V44.62l4.43 1.899v6.329l-4.43-1.899zM132.399 47.785v-6.329l4.43 1.898v6.33l-4.43-1.899z"/></g><g fill="#554646"><path d="M162.778 64.873v-6.329l-4.43 1.899v6.329l4.43-1.899zM162.778 53.481v-6.329l-4.43 1.899v6.329l4.43-1.899zM170.373 61.709V55.38l-4.43 1.898v6.33l4.43-1.899zM170.373 50.316v-6.329l-4.43 1.899v6.329l4.43-1.899zM177.968 58.544v-6.329l-4.43 1.899v6.329l4.43-1.899zM177.968 47.152v-6.329l-4.43 1.899v6.329l4.43-1.899z"/></g></g></symbol><symbol viewBox="0 0 200 80" id="iD-graphic-lines" xmlns="http://www.w3.org/2000/svg"><path d="M0 0h200v80H0z" fill="#FFF"/><path d="M140 50h40v3h-40zM146.762 46s-.536-1.846-.345-2.75c.221-1.047 1.654-2.75 1.654-2.75s1.434-1.703 1.655-2.75c.191-.904-.345-2.75-.345-2.75s-.536-1.846-.345-2.75c.221-1.047 1.654-2.75 1.654-2.75s1.434-1.703 1.655-2.75C152.536 25.846 152 24 152 24h16.5s1.433 1.703 1.655 2.75c.191.904-.345 2.75-.345 2.75s-.537 1.846-.346 2.75c.222 1.047 1.655 2.75 1.655 2.75s1.433 1.703 1.655 2.75c.191.904-.345 2.75-.345 2.75s-.537 1.846-.346 2.75c.222 1.047 1.655 2.75 1.655 2.75z" fill="#60D4DE"/><path d="M147.966 37.759c-.214.8-.821 1.333-1.354 1.19-.534-.143-.792-.908-.578-1.708.214-.8.821-1.333 1.354-1.19.534.143.792.908.578 1.708zM149.799 27.75c-.552.957-1.582 1.396-2.299.982-.717-.414-.851-1.525-.299-2.482.552-.957 1.582-1.396 2.299-.982.717.414.851 1.525.299 2.482zM171.422 31.708c.215.8.821 1.333 1.354 1.19.534-.143.793-.908.578-1.708-.214-.8-.821-1.333-1.354-1.19-.533.143-.792.908-.578 1.708zM174.299 42.75c.552.957 1.582 1.396 2.299.982.718-.414.851-1.525.299-2.482-.552-.957-1.581-1.396-2.299-.982-.717.414-.851 1.525-.299 2.482z" fill="#60D4DE" opacity=".5"/><path d="M182 51.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0z" fill="#60D4DE"/><path d="M181 51.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 181 51.5z" fill="#FFF"/><path d="M143 51.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0z" fill="#60D4DE"/><path d="M142 51.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 142 51.5z" fill="#FFF"/><g><path d="M93.5 23L92 24l-.469 2H88.25c-.554 0-.866.463-1 1L87 28c-.134.537.446 1 1 1h24c.554 0 1.134-.463 1-1l-.25-1c-.134-.537-.446-1-1-1h-2.781l-.469-2-1.5-1-1 1 .469 2H94.031l.469-2-1-1zm-2 4a.5.5 0 1 1 0 1 .5.5 0 0 1 0-1zm17 0a.5.5 0 1 1 0 1 .5.5 0 0 1 0-1zm-17.938 3l-.468 2H87.25c-.554 0-.866.463-1 1L86 34c-.134.537.446 1 1 1h26c.554 0 1.134-.463 1-1l-.25-1c-.134-.537-.446-1-1-1h-2.344l-.468-2h-2.5l.468 2H92.594l.468-2h-2.5zm-.062 3a.5.5 0 1 1 0 1 .5.5 0 0 1 0-1zm19 0a.5.5 0 1 1 0 1 .5.5 0 0 1 0-1zm-20.344 3l-.468 2H86.25c-.554 0-.866.463-1 1L85 40c-.134.537.446 1 1 1h28c.554 0 1.134-.463 1-1l-.25-1c-.134-.537-.446-1-1-1h-1.938l-.468-2h-2.5l.468 2H91.188l.468-2h-2.5zm.344 3a.5.5 0 1 1 0 1 .5.5 0 0 1 0-1zm21 0a.5.5 0 1 1 0 1 .5.5 0 0 1 0-1zm-22.781 3L87 45l1.5 1 1-1 .719-3h-2.5zm22.562 0l.719 3 1 1 1.5-1-.719-3h-2.5zM80 50h40v3H80z" fill="#A9A9A9"/><path d="M114 51h5v1h-5zM103 51h5v1h-5zM92 51h5v1h-5zM81 51h5v1h-5z" fill="#FFF"/><path d="M122 51.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0z" fill="#A9A9A9"/><path d="M121 51.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 121 51.5z" fill="#FFF"/><path d="M83 51.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0z" fill="#A9A9A9"/><path d="M82 51.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 82 51.5z" fill="#FFF"/></g><g><path d="M32.5 25l-2.875 6H28l-1 1v2h1.406L28 35v6l1 1h5l2 1h8l2-1h5l1-1v-6l-.406-1H53v-2l-1-1h-1.625L47.5 25zm1 3h13l1.5 4-1 1H33l-1-1zM31 36h3l1 2v1h-4l-1-1v-1zm15 0h3l1 1v1l-1 1h-4v-1zm-17 7v2l1 1h3l1-1v-2zm17 0v2l1 1h3l1-1v-2z" fill="#A9A9A9"/><path d="M21 51h38v1H21z" fill="#7092FF"/><path d="M20.5 50a2.5 2.5 0 1 0 0 5h39a2.5 2.5 0 1 0 0-5z" fill="#A9A9A9"/><path d="M22.5 51c.31.416.5.941.5 1.5s-.19 1.084-.5 1.5h35c-.31-.416-.5-.941-.5-1.5s.19-1.084.5-1.5h-35zM22 52.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 22 52.5zM61 52.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 61 52.5z" fill="#FFF"/></g></symbol><symbol viewBox="0 0 200 80" id="iD-graphic-points" xmlns="http://www.w3.org/2000/svg"><path d="M0 0h200v80H0z" fill="#FFF"/><path d="M170 31c-8.284 0-15 6.716-15 15 0 8.284 15 21 15 21s15-12.716 15-21-6.716-15-15-15zM100 31c-8.284 0-15 6.716-15 15 0 8.284 15 21 15 21s15-12.716 15-21-6.716-15-15-15zM30 31c-8.284 0-15 6.716-15 15 0 8.284 15 21 15 21s15-12.716 15-21-6.716-15-15-15zM135 11c-8.284 0-15 6.716-15 15 0 8.284 15 21 15 21s15-12.716 15-21-6.716-15-15-15zM65 11c-8.284 0-15 6.716-15 15 0 8.284 15 21 15 21s15-12.716 15-21-6.716-15-15-15z" fill="#7092FF"/><path d="M162 38c-.471 0-1 .5-1 1v7c0 2.216 1 5 5 5 .359 0 .686-.017 1-.062V48h-4s.5-2 3-2c.5 0 .697.075 1 .188V44c0-.916.365-1.682 1-2 1-.5 1.404-.298 2 0l1 .5V39c0-.5-.529-1-1-1-1 0-2 1-4 1s-3-1-4-1zm1.75 3.5a1.25 1.25 0 1 1 0 2.5 1.25 1.25 0 0 1 0-2.5zM169 43c-.471 0-1 .5-1 1v7c0 2.216 1 5 5 5s5-2.784 5-5v-7c0-.5-.529-1-1-1-1 0-2 1-4 1s-3-1-4-1zm1.75 3.5a1.25 1.25 0 1 1 0 2.5 1.25 1.25 0 0 1 0-2.5zm4.5 0a1.25 1.25 0 1 1 0 2.5 1.25 1.25 0 0 1 0-2.5zM170 52h6s-.5 2-3 2-3-2-3-2zM98 38c-3 0-6 1.5-6 4v2h17v-2c0-2.5-3-4-6-4zm.5 1a.499.499 0 1 1 0 1 .499.499 0 1 1 0-1zm4 0a.499.499 0 1 1 0 1 .499.499 0 1 1 0-1zm-6 2a.499.499 0 1 1 0 1 .499.499 0 1 1 0-1zm4 0a.499.499 0 1 1 0 1 .499.499 0 1 1 0-1zm4 0a.499.499 0 1 1 0 1 .499.499 0 1 1 0-1zM92 45c-.5 0-1 .5-1 1s.5 1 1 1h17c.5 0 1-.5 1-1s-.5-1-1-1zm0 3v1c0 1 1 2 2 2h13c1 0 2-1 2-2v-1zM24 36c-.554 0-1 .446-1 1v16c0 .5.5 1 1 1h9c.5 0 1-.5 1-1v-5h.5c.5 0 .5.5.5.5v2c0 1 .5 1.5 1.5 1.5s1.5-.5 1.5-1.5V45c0-1-2-2-2-3v-3h-1l-1-1v-1c0-.554-.446-1-1-1zm1 2h7v4h-7zm9 3h1v1.5c0 1 2 2 2 3v5c0 .5-.5.5-.5.5s-.5 0-.5-.5V48c0-.5-.5-1-1-1h-1zM134 18c-.554 0-1 .446-1 1v4h-4c-.554 0-1 .446-1 1v3c0 .554.446 1 1 1h4v4c0 .554.446 1 1 1h3c.554 0 1-.446 1-1v-4h4c.554 0 1-.446 1-1v-3c0-.554-.446-1-1-1h-4v-4c0-.554-.446-1-1-1zM59 18c-.554 0-1 .446-1 1v9c0 .554.446 1 1 1h11c.554 0 1-.446 1-1v-1h.5c.5 0 .5-.5.5-.5V26h1c1 0 2-1 2-2v-3c0-.5-.5-1-1-1h-3v-1c0-.554-.446-1-1-1zm12 3h2.5c.5 0 .5.5.5.5V24c0 .5-.5 1-1 1h-2zm-15 9l1 1 1 1h13l1-1 1-1z" fill="#FFF"/></symbol><symbol viewBox="5 0 50 50" id="iD-highway-living-street" xmlns="http://www.w3.org/2000/svg"><path d="M22.5 15l-2.875 6H18l-1 1v2h1.406L18 25v6l1 1h5l2 1h8l2-1h5l1-1v-6l-.406-1H43v-2l-1-1h-1.625L37.5 15zm1 3h13l1.5 4-1 1H23l-1-1zM21 26h3l1 2v1h-4l-1-1v-1zm15 0h3l1 1v1l-1 1h-4v-1zm-17 7v2l1 1h3l1-1v-2zm17 0v2l1 1h3l1-1v-2zM16 32.625v1.5L11 36H7z" fill="#989898"/><path d="M18 12l-4 1.5v17.875L7 34V21.625l3-1.125v-4l-1 .375-2 .75V7z" fill="#B5B5B5"/><path d="M50 9l-1 1v2l1 1h2l1-1v-2l-1-1zm-1 5l-1 1-5 5h2.5l2.5-2.5V29h1l1-1v-6h2.188L53 26h4l1-1v-1h-3.406L54 21v-6l-1-1zm-4.5 11a1.5 1.5 0 1 0 .001 3.001A1.5 1.5 0 0 0 44.5 25zM44 32.625v1.5L49 36h4z" fill="#989898"/></symbol><symbol viewBox="5 0 50 50" id="iD-highway-motorway" xmlns="http://www.w3.org/2000/svg"><path d="M13 14L8 36h8.5l3-22H13zm8 0l-2.5 22H27l1-22h-7zm11 0l1 22h7.5L38 14h-6zm7.5 0l3 22H52l-5.5-22h-7z" fill="#444"/><path d="M42.75 20L42 16h2.875l.75 4zM38 33l-.5-4h-3l.5 4zm-26.5 0l.5-4h3l-.5 4zm11.75-13l.312-4h2.876l-.313 4z" fill="currentColor"/></symbol><symbol viewBox="5 0 50 50" id="iD-highway-motorway-link" xmlns="http://www.w3.org/2000/svg"><defs><linearGradient id="ama" gradientUnits="userSpaceOnUse" x1="-660.5" y1="157.987" x2="-662" y2="152.362" gradientTransform="translate(701 -132.362)"><stop offset="0" stop-color="#444"/><stop offset="1" stop-color="#B5B5B5"/></linearGradient></defs><path d="M34 14l-9 22h11l1.156-7.625C35.72 27.032 34 25.193 34 24v-2l3.906 1.5 1.438-9.5H34z" fill="#B5B5B5"/><path d="M42 36v-4c0-4.452-8-5.828-8-10 0-3 .375-8 .375-8h5S39 17.996 39 20c0 2 8.595 4.072 10 8l2 8z" fill="url(#ama)"/><path d="M19 36l11.359-22H25L8 36z" fill="#B5B5B5"/><path d="M32.5 33l1.25-4h-3l-1.25 4zm-10-12l2-3.5h3l-2 3.5z" fill="currentColor"/></symbol><symbol viewBox="5 0 50 50" id="iD-highway-primary" xmlns="http://www.w3.org/2000/svg"><path d="M17 14l-4 22h7l.281-2h1.938L22 36h7l.5-22h-5l-.344 3h-1.562L23 14h-6zm13.5 0l.5 22h7l-.219-2h1.938L40 36h7l-4.5-22H37l.406 3h-1.562l-.344-3h-5zm-8.031 4h1.562l-.312 3h-1.688l.438-3zm13.5 0h1.562l.438 3h-1.688l-.312-3zm-14.063 4h1.688l-.344 3H21.5l.406-3zm14.5 0h1.688l.406 3h-1.75l-.344-3zm-15.031 4h1.75l-.344 3h-1.812l.406-3zm15.5 0h1.75l.406 3h-1.812l-.344-3zm-16.063 4h1.876l-.344 3h-1.938l.406-3zm16.5 0h1.876l.406 3h-1.938l-.344-3z" fill="#444"/><path d="M19 33l.5-4h-3l-.5 4zm23-13l-.75-4h-2.875l.75 4zm-6 13l-.5-4h-3l.5 4zM25.25 20l.312-4h2.876l-.313 4z" fill="currentColor"/></symbol><symbol viewBox="5 0 50 50" id="iD-highway-primary-link" xmlns="http://www.w3.org/2000/svg"><defs><linearGradient id="aoa" gradientUnits="userSpaceOnUse" x1="-780.5" y1="157.987" x2="-782" y2="152.362" gradientTransform="translate(820 -132.362)"><stop offset="0" stop-color="#444"/><stop offset="1" stop-color="#B5B5B5"/></linearGradient></defs><path d="M26 14L11 36h11l.844-2h1.968L24 36h11l1.156-7.625C34.72 27.032 33 25.193 33 24v-2l3.906 1.5 1.438-9.5H33l-1.219 3h-1.719l1.282-3H26zm3.656 4h1.719l-1.25 3h-1.75l1.281-3zm-1.719 4h1.782L28.5 25h-1.813l1.25-3zm-1.687 4h1.844l-1.219 3h-1.906l1.281-3zm-1.688 4h1.907l-1.25 3h-1.938l1.281-3z" fill="#B5B5B5"/><path d="M31.5 33l1.25-4h-3l-1.25 4zm-8-12l2-3.5h3l-2 3.5z" fill="currentColor"/><path d="M41 36v-4c0-4.452-8-5.828-8-10 0-3 .375-8 .375-8h5S38 17.996 38 20c0 2 8.595 4.072 10 8l2 8z" fill="url(#aoa)"/></symbol><symbol viewBox="5 0 50 50" id="iD-highway-residential" xmlns="http://www.w3.org/2000/svg"><path d="M22.5 15l-2.875 6H18l-1 1v2h1.406L18 25v6l1 1h5l2 1h8l2-1h5l1-1v-6l-.406-1H43v-2l-1-1h-1.625L37.5 15zm1 3h13l1.5 4-1 1H23l-1-1zM21 26h3l1 2v1h-4l-1-1v-1zm15 0h3l1 1v1l-1 1h-4v-1zm-17 7v2l1 1h3l1-1v-2zm17 0v2l1 1h3l1-1v-2z" fill="#989898"/><path d="M42 12l4 1.5v17.875L53 34V21.625L50 20.5v-4l1 .375 2 .75V7zM44 32.625v1.5L49 36h4zM16 32.625v1.5L11 36H7zM18 12l-4 1.5v17.875L7 34V21.625l3-1.125v-4l-1 .375-2 .75V7z" fill="#B5B5B5"/></symbol><symbol viewBox="5 0 50 50" id="iD-highway-secondary" xmlns="http://www.w3.org/2000/svg"><path d="M22 14l-4 22h11l.5-22H22zm8.5 0l.5 22h11l-4.5-22h-7z" fill="#444"/><path d="M35 33l-.5-4h3l.5 4zM23.25 20l.312-4h2.876l-.313 4z" fill="currentColor"/></symbol><symbol viewBox="5 0 50 50" id="iD-highway-secondary-link" xmlns="http://www.w3.org/2000/svg"><defs><linearGradient id="ara" gradientUnits="userSpaceOnUse" x1="-840.5" y1="157.987" x2="-842" y2="152.362" gradientTransform="translate(874 -132.362)"><stop offset="0" stop-color="#444"/><stop offset="1" stop-color="#B5B5B5"/></linearGradient></defs><path d="M27 14l-9 22h11l1.156-7.625C28.72 27.032 27 25.193 27 24v-2l3.906 1.5 1.438-9.5H27z" fill="#B5B5B5"/><path d="M25.5 33l1.25-4h-3l-1.25 4z" fill="currentColor"/><path d="M35 36v-4c0-4.452-8-5.828-8-10 0-3 .375-8 .375-8h5S32 17.996 32 20c0 2 8.595 4.072 10 8l2 8z" fill="url(#ara)"/></symbol><symbol viewBox="5 0 50 50" id="iD-highway-service" xmlns="http://www.w3.org/2000/svg"><path d="M22.5 15l-2.875 6H18l-1 1v2h1.406L18 25v6l1 1h5l2 1h8l2-1h5l1-1v-6l-.406-1H43v-2l-1-1h-1.625L37.5 15zm1 3h13l1.5 4-1 1H23l-1-1zM21 26h3l1 2v1h-4l-1-1v-1zm15 0h3l1 1v1l-1 1h-4v-1zm-17 7v2l1 1h3l1-1v-2zm17 0v2l1 1h3l1-1v-2zM44 32.625v1.5L49 36h4zM16 32.625v1.5L11 36H7z" fill="#989898"/></symbol><symbol viewBox="5 0 50 50" id="iD-highway-steps" xmlns="http://www.w3.org/2000/svg"><path d="M27 14v2l-1 2v2l-1 2v2l-1 2v2l-1 2v2l-1 2v2h16v-2l-1-2v-2l-1-2v-2l-1-2v-2l-1-2v-2l-1-2v-2h-6z" fill="currentColor" opacity=".496"/><path d="M23 32v-2h14v2zm15 4v-2H22v2zm-2-8v-2H24v2zm-1-4v-2H25v2zm-1-4v-2h-8v2zm-1-4v-2h-6v2z" fill="currentColor"/></symbol><symbol viewBox="5 0 50 50" id="iD-highway-tertiary" xmlns="http://www.w3.org/2000/svg"><path d="M22 14l-4 22h11l.031-2h1.938L31 36h11l-4.5-22h-7l.062 3h-1.125l.063-3H22zm7.406 4h1.188l.062 3h-1.312l.062-3zm-.093 4h1.375l.062 3h-1.5l.063-3zm-.094 4h1.562l.063 3h-1.688l.063-3zm-.094 4h1.75l.063 3h-1.875l.062-3z" fill="#444"/><path d="M35 33l-.5-4h3l.5 4zM23.25 20l.312-4h2.876l-.313 4z" fill="currentColor"/></symbol><symbol viewBox="5 0 50 50" id="iD-highway-tertiary-link" xmlns="http://www.w3.org/2000/svg"><defs><linearGradient id="ava" gradientUnits="userSpaceOnUse" x1="-900.5" y1="157.987" x2="-902" y2="152.362" gradientTransform="translate(934 -132.362)"><stop offset="0" stop-color="#444"/><stop offset="1" stop-color="#B5B5B5"/></linearGradient></defs><path d="M27 14l-1.219 3h-1.719l-.406 1h1.719l-1.25 3h-1.75l-.438 1h1.782L22.5 25h-1.813l-.437 1h1.844l-1.219 3h-1.906l-.407 1h1.907l-1.25 3h-1.938l-.437 1h1.968L18 36h11l1.156-7.625C28.72 27.032 27 25.193 27 24v-2l3.906 1.5 1.438-9.5H27z" fill="#B5B5B5"/><path d="M25.5 33l1.25-4h-3l-1.25 4z" fill="currentColor"/><path d="M35 36v-4c0-4.452-8-5.828-8-10 0-3 .375-8 .375-8h5S32 17.996 32 20c0 2 8.595 4.072 10 8l2 8z" fill="url(#ava)"/></symbol><symbol viewBox="5 0 50 50" id="iD-highway-track" xmlns="http://www.w3.org/2000/svg"><path d="M27 14l-6 22h6.5L29 14h-2zm4 0l1.5 22H39l-6-22h-2zM43 29v3.25l1 .375V29h-1zm-2 1v2.5l1 .375V30h-1zm6 0v3.75l.656.25H48v-4h-1zm-2 1v3l1 .375V31h-1zm4 1v3.5l1 .375V32h-1zM17 29v3.25l-1 .375V29h1zm2 1v2.5l-1 .375V30h1zm-6 0v3.75l-.656.25H12v-4h1zm2 1v3l-1 .375V31h1zm-4 1v3.5l-1 .375V32h1z" fill="#989898"/></symbol><symbol viewBox="5 0 50 50" id="iD-highway-trunk" xmlns="http://www.w3.org/2000/svg"><path d="M15 14l-5 22h7.5l3-22H15zm7 0l-2.5 22H29l.5-22H22zm8.5 0l.5 22h9l-2.5-22h-7zm8.5 0l3 22h8l-5.5-22H39z" fill="#444"/><path d="M41.75 20L41 16h2.875l.75 4zM37 33l-.5-4h-3l.5 4zm-23.5 0l.5-4h3l-.5 4zm9.75-13l.312-4h2.876l-.313 4z" fill="currentColor"/></symbol><symbol viewBox="5 0 50 50" id="iD-highway-trunk-link" xmlns="http://www.w3.org/2000/svg"><defs><linearGradient id="aya" gradientUnits="userSpaceOnUse" x1="-720.5" y1="157.987" x2="-722" y2="152.362" gradientTransform="translate(760 -132.362)"><stop offset="0" stop-color="#444"/><stop offset="1" stop-color="#B5B5B5"/></linearGradient></defs><path d="M33 14l-9 22h11l1.156-7.625C34.72 27.032 33 25.193 33 24v-2l3.906 1.5 1.438-9.5H33zM22 36l9.359-22H26L11 36z" fill="#B5B5B5"/><path d="M31.5 33l1.25-4h-3l-1.25 4zm-8-12l2-3.5h3l-2 3.5z" fill="currentColor"/><path d="M41 36v-4c0-4.452-8-5.828-8-10 0-3 .375-8 .375-8h5S38 17.996 38 20c0 2 8.595 4.072 10 8l2 8z" fill="url(#aya)"/></symbol><symbol viewBox="5 0 50 50" id="iD-highway-unclassified" xmlns="http://www.w3.org/2000/svg"><path d="M22.5 15l-2.875 6H18l-1 1v2h1.406L18 25v6l1 1h5l2 1h8l2-1h5l1-1v-6l-.406-1H43v-2l-1-1h-1.625L37.5 15zm1 3h13l1.5 4-1 1H23l-1-1zM21 26h3l1 2v1h-4l-1-1v-1zm15 0h3l1 1v1l-1 1h-4v-1zm-17 7v2l1 1h3l1-1v-2zm17 0v2l1 1h3l1-1v-2z" fill="#989898"/></symbol><symbol viewBox="0 0 20 20" id="iD-icon-abutment" xmlns="http://www.w3.org/2000/svg"><path d="M12.785 8.67a3.087 3.087 0 0 1-4.115 4.115L3.455 18 2 16.545l5.215-5.215a3.087 3.087 0 0 1 4.115-4.115L16.545 2 18 3.455 12.785 8.67zM7.91 6.455A4.122 4.122 0 0 0 6.455 7.91L2 3.455 3.455 2 7.91 6.455zm1 4.636a1.543 1.543 0 1 0 2.18-2.182 1.543 1.543 0 0 0-2.18 2.182z" fill="currentColor"/></symbol><symbol viewBox="0 0 20 20" id="iD-icon-alert" xmlns="http://www.w3.org/2000/svg"><path d="M10.937 13.886a.324.324 0 0 0-.076-.22.264.264 0 0 0-.21-.086h-1.3a.292.292 0 0 0-.297.306v1.221c0 .088.029.159.089.211.06.052.128.078.208.078h1.3c.196 0 .293-.097.286-.289zm-.362-1.086c.078 0 .147-.03.207-.087a.281.281 0 0 0 .088-.203l.127-5.253a.27.27 0 0 0-.09-.202.279.279 0 0 0-.207-.087H9.298a.287.287 0 0 0-.295.289l.103 5.253c0 .077.029.144.088.203a.286.286 0 0 0 .206.087zm-.584-9.3c.185 0 .344.059.477.177.134.121.245.253.335.404l6.501 11.043c.058.088.104.182.14.284a.946.946 0 0 1 .056.328c0 .272-.108.468-.321.585a1.38 1.38 0 0 1-.685.179H3.504c-.242 0-.469-.059-.685-.179-.213-.117-.319-.313-.319-.585 0-.109.018-.219.049-.323.036-.105.083-.201.145-.289L9.181 4.081c.09-.151.2-.283.332-.404a.695.695 0 0 1 .478-.177" fill="currentColor"/></symbol><symbol viewBox="0 0 20 20" id="iD-icon-apply" xmlns="http://www.w3.org/2000/svg"><path d="M16.671 3.946c.499.311.754 1.144.383 1.727l-7 11.014a1.248 1.248 0 0 1-1.938.213l-4-4.005a1.25 1.25 0 1 1 1.768-1.77l2.898 2.902s5.672-8.945 6.163-9.697c.492-.753 1.227-.696 1.726-.384z" fill="currentColor"/></symbol><symbol viewBox="0 0 20 20" id="iD-icon-area" xmlns="http://www.w3.org/2000/svg"><path d="M6.5 6.5h7v7h-7v-7z" fill="currentColor" fill-opacity=".253"/><path d="M5.5 3A2.5 2.5 0 0 0 3 5.5c0 .958.543 1.788 1.333 2.208v4.584A2.502 2.502 0 0 0 3 14.5 2.5 2.5 0 0 0 5.5 17c.958 0 1.788-.543 2.208-1.333h4.584c.42.79 1.25 1.333 2.208 1.333a2.5 2.5 0 0 0 2.5-2.5c0-.958-.543-1.788-1.333-2.208V7.708A2.502 2.502 0 0 0 17 5.5 2.5 2.5 0 0 0 14.5 3c-.969 0-1.804.558-2.219 1.365l-.062-.032H7.708A2.502 2.502 0 0 0 5.5 3zm0 1.5a1 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-2zM7.708 6.667h4.584c.234.441.6.807 1.041 1.041v4.584c-.441.234-.807.6-1.041 1.041H7.708a2.523 2.523 0 0 0-1.041-1.041V7.708c.441-.234.807-.6 1.041-1.041zM5.5 13.5a1 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" fill="currentColor"/></symbol><symbol viewBox="0 0 20 20" id="iD-icon-avatar" xmlns="http://www.w3.org/2000/svg"><path d="M9.5 3C8 3 7 5 7 6v2c0 1 1 2.154 1 2.154V11l-1.692.385c-1.455.33-2.026 1.236-2.154 2.769L4 16h12l-.154-1.846c-.128-1.533-.7-2.439-2.154-2.769L12 11v-.846S13 9 13 8V6c0-1-1-3-2.5-3z" fill="currentColor"/></symbol><symbol viewBox="0 0 20 20" id="iD-icon-backward" xmlns="http://www.w3.org/2000/svg"><path d="M12.87 4c1.103.079.691-.113 1.329.353.449.49.389 1.228-.136 1.648l-5.892 4.721 5.892 4.722c.525.42.585 1.158.136 1.648a1.31 1.31 0 0 1-1.762.127l-7-5.609a1.12 1.12 0 0 1 0-1.775l7-5.609L12.87 4z" fill="currentColor"/></symbol><symbol viewBox="0 0 20 20" id="iD-icon-bolt" xmlns="http://www.w3.org/2000/svg"><path stroke="inherit" stroke-width="inherit" fill="currentColor" d="M15 6.5h-4.2l1.3-4.7c.1-.5-.4-1-.9-1h-5c-.4-.1-.8.2-.8.7l-1.2 8.7c-.1.6.4 1 .8 1h4.3l-1.7 7.1c-.1.5.4 1 .9 1 .3 0 .6-.2.7-.5l6.4-11c.4-.6 0-1.3-.6-1.3z"/></symbol><symbol viewBox="0 0 20 20" id="iD-icon-bug" xmlns="http://www.w3.org/2000/svg"><path d="M6 3v1l2 2.406V8h4V6.406L14 4V3h-1l-2 2H9L7 3H6zm1 6l-1 1H3l-1 1 1 1h3v1l-2 1-1 1v1h1l2-1 2 2h4l2-2 2 1h1v-1l-1-1-2-1v-1h3l1-1-1-1h-3l-1-1H7z" fill="currentColor"/></symbol><symbol viewBox="0 0 20 20" id="iD-icon-close" xmlns="http://www.w3.org/2000/svg"><path d="M16.634 3.892c.394.424.488 1.278 0 1.765l-4.616 4.606 4.616 4.607a1.247 1.247 0 0 1 0 1.765 1.252 1.252 0 0 1-1.768 0l-4.616-4.607-4.616 4.606a1.251 1.251 0 0 1-1.768.001 1.247 1.247 0 0 1 0-1.765l4.616-4.607-4.616-4.606c-.488-.487-.417-1.356 0-1.764.417-.409 1.291-.424 1.768-.001.477.424 4.616 4.608 4.616 4.608s4.079-4.023 4.616-4.608c.537-.584 1.273-.458 1.768 0z" fill="currentColor"/></symbol><symbol viewBox="0 0 20 20" id="iD-icon-collapse-screen" xmlns="http://www.w3.org/2000/svg"><path d="M9.357 10.404l-.359-.334-.411-.07-1.662.066-2.758.111a1 1 0 1 0 .08 1.998l1.496-.06-3.377 3.117A1.25 1.25 0 0 0 4.134 17l3.377-3.117-.06 1.496a1 1 0 1 0 1.998.079l.088-2.209.089-2.21c-.073-.462.014-.249-.269-.635zm.912-1.415c-.283-.386-.196-.173-.269-.635l.088-2.209.089-2.21a1 1 0 1 1 1.998.08l-.06 1.496 3.117-3.145A1.25 1.25 0 0 1 17 4.134l-3.117 3.144 1.496-.06a1 1 0 0 1 .079 1.999l-2.757.11-1.662.066-.412-.07-.358-.334z" fill="currentColor"/></symbol><symbol viewBox="0 0 20 20" id="iD-icon-crossing" xmlns="http://www.w3.org/2000/svg"><path d="M12.785 8.67a3.087 3.087 0 0 1-4.115 4.115L3.455 18 2 16.545l5.215-5.215a3.087 3.087 0 0 1 4.115-4.115L16.545 2 18 3.455 12.785 8.67zM7.91 6.455A4.122 4.122 0 0 0 6.455 7.91L2 3.455 3.455 2 7.91 6.455zm5.635 5.635L18 16.545 16.545 18l-4.455-4.455a4.122 4.122 0 0 0 1.455-1.455zm-4.636-1a1.543 1.543 0 1 0 2.182-2.18 1.543 1.543 0 0 0-2.182 2.18z" fill="currentColor"/></symbol><symbol viewBox="0 0 20 20" id="iD-icon-data" xmlns="http://www.w3.org/2000/svg"><path d="M9 2L8 3v1.594L3.594 9H2l-1 1v2l1 1h2l1-1v-1.594L9.406 6H11l1-1V3l-1-1zm2 11v2l1 1h2l1-1v-2l-1-1h-2zm0-4l1 1h2l1-1h2l1 1v2l-1 1v2l1 1v2l-1 1h-2l-1-1h-2l-1 1H9l-1-1v-2l1-1v-2l-1-1v-2l1-1z" fill="currentColor"/></symbol><symbol viewBox="0 0 20 20" id="iD-icon-down" xmlns="http://www.w3.org/2000/svg"><path d="M10 14.999c.453.015.695-.094.949-.336.254-.243 5.25-5.855 6-6.692a1.159 1.159 0 0 0-.136-1.685 1.29 1.29 0 0 0-1.762.13c-3.684 4.108-4.368 4.82-5.051 5.583-4.301-4.797-4.301-4.747-5.051-5.583a1.29 1.29 0 0 0-1.762-.13 1.159 1.159 0 0 0-.136 1.685c5.25 5.855 5.715 6.371 6 6.692.261.226.496.32.949.336z" fill="currentColor"/></symbol><symbol viewBox="0 0 20 20" id="iD-icon-edit" xmlns="http://www.w3.org/2000/svg"><path d="M15.264 3.139l-2.002-1.146c-.505-.292-1.171-.148-1.493.318l-.802 1.15 3.836 2.202.823-1.053c.292-.578.141-1.181-.368-1.471h.006zM4.171 13.32l3.831 2.191 6.236-9.044-3.81-2.19-6.257 9.044v-.001zm-.585 2.782L3.5 18.158l2-.965 1.857-.894-3.696-2.115-.078 1.917.003.001z" fill="currentColor"/></symbol><symbol viewBox="0 0 20 20" id="iD-icon-error" xmlns="http://www.w3.org/2000/svg"><path d="M6.893 2.5h6.214L17.5 6.893v6.214L13.107 17.5H6.893L2.5 13.107V6.893L6.893 2.5zm4.04 10.416a.324.324 0 0 0-.076-.22.264.264 0 0 0-.21-.086h-1.3a.292.292 0 0 0-.297.306v1.221c0 .088.029.159.089.211.06.052.128.078.208.078h1.3c.196 0 .293-.097.286-.289v-1.221zm-.361-1.084c.078 0 .147-.03.207-.087a.281.281 0 0 0 .088-.203l.127-5.253a.27.27 0 0 0-.09-.202.279.279 0 0 0-.207-.087H9.295A.287.287 0 0 0 9 6.289l.103 5.253c0 .077.029.144.088.203a.286.286 0 0 0 .206.087h1.175z" fill="currentColor"/></symbol><symbol viewBox="0 0 20 20" id="iD-icon-forward" xmlns="http://www.w3.org/2000/svg"><path d="M6.63 4c-1.103.079-.691-.113-1.329.353a1.117 1.117 0 0 0 .136 1.648l5.892 4.721-5.892 4.722a1.117 1.117 0 0 0-.136 1.648 1.31 1.31 0 0 0 1.762.127l7-5.609a1.12 1.12 0 0 0 0-1.775l-7-5.609L6.63 4z" fill="currentColor"/></symbol><symbol viewBox="0 0 20 20" id="iD-icon-full-screen" xmlns="http://www.w3.org/2000/svg"><path d="M2.269 2.404l.358-.334.412-.07 1.662.066 2.757.111a1 1 0 1 1-.079 1.998l-1.496-.06L9 7.232A1.25 1.25 0 0 1 7.232 9L4.115 5.883l.06 1.496a1 1 0 1 1-1.998.079l-.089-2.209L2 3.039c.073-.462-.014-.249.269-.635zm15.722 0c.283.386.195.173.269.635l-.089 2.21-.088 2.209a1 1 0 1 1-1.998-.079l.059-1.496L12.768 9A1.25 1.25 0 0 1 11 7.232l3.377-3.117-1.496.06a1 1 0 1 1-.08-1.998l2.758-.111L17.221 2l.411.07.359.334zM2.269 17.856c-.283-.387-.196-.174-.269-.636l.088-2.209.089-2.21a1 1 0 1 1 1.998.08l-.06 1.496 3.117-3.145A1.25 1.25 0 0 1 9 13l-3.117 3.144 1.496-.06a1 1 0 0 1 .079 1.999l-2.757.11-1.662.067-.412-.071-.358-.333zm15.722 0c.283-.387.195-.174.269-.636l-.089-2.209-.088-2.21a1 1 0 1 0-1.998.08l.059 1.496L12.768 11A1.25 1.25 0 0 0 11 12.768l3.377 3.376-1.496-.06a1 1 0 0 0-.08 1.999l2.758.11 1.662.067.411-.071.359-.333z" fill="currentColor"/></symbol><symbol viewBox="0 0 20 20" id="iD-icon-geolocate" xmlns="http://www.w3.org/2000/svg"><path d="M14.947 3.743c.678 0 1.435.793 1.213 1.721l-4.4 11c-.511 1.278-2.41.912-2.41-.464v-6H4c-1.413 0-1.741-1.977-.403-2.433 0 0 10.672-3.824 11.35-3.824z" fill="currentColor"/></symbol><symbol viewBox="0 0 20 20" id="iD-icon-help" xmlns="http://www.w3.org/2000/svg"><path d="M16.5 1l1 1v14l-1 1V2H5l-.5 1h11v15l-1 1H3V3l1-2h12.5zm-6.1 12.844H8.202V16H10.4v-2.156zM9.35 5.766q-.77 0-1.393.259t-1.064.721q-.441.462-.686 1.092-.245.63-.259 1.386h2.058q0-.378.084-.707.084-.329.259-.574.175-.245.448-.392.273-.147.651-.147.56 0 .875.308.315.308.315.952.014.378-.133.63-.147.252-.385.462-.238.21-.518.42t-.532.497q-.252.287-.441.693-.189.406-.231 1.008v.63h1.89v-.532q.056-.42.273-.7.217-.28.497-.497.28-.217.595-.434.315-.217.574-.525.259-.308.434-.742t.175-1.106q0-.406-.175-.875t-.581-.875q-.406-.406-1.071-.679-.665-.273-1.659-.273z" fill="currentColor"/></symbol><symbol viewBox="0 0 20 20" id="iD-icon-inspect" xmlns="http://www.w3.org/2000/svg"><path d="M10.452 3q.563 0 .963.4.399.4.399.971 0 .563-.399.962-.4.4-.972.4-.562 0-.962-.4-.4-.399-.4-.962 0-.571.4-.971t.971-.4zM8 15.744v-.729q.993-.036 1.147-.123s.145-.102.198-.493c.18-1.008.211-3.337.017-4.983a1.51 1.51 0 0 0-.11-.628q-.109-.119-.593-.137L8 8.625v-.677q2.118-.158 3.489-.747l.22.176q-.123 1.679-.123 4.887 0 1.854.061 2.241.044.272.163.351.119.08 1.156.159v.729q-1.591-.053-2.461-.053-.466 0-2.505.053z" fill="currentColor"/></symbol><symbol viewBox="0 0 20 20" id="iD-icon-layers" xmlns="http://www.w3.org/2000/svg"><path d="M9.5 3L3 6v1l6.5 3h1L17 7V6l-6.5-3h-1zM4.094 9.5L3 10v1l6.5 3h1l6.5-3v-1l-1.094-.5L10.5 12h-1L4.094 9.5zm0 4L3 14v1l6.5 3h1l6.5-3v-1l-1.094-.5L10.5 16h-1l-5.406-2.5z" fill="currentColor"/></symbol><symbol viewBox="0 0 20 20" id="iD-icon-line" xmlns="http://www.w3.org/2000/svg"><path d="M14.558 3a2.442 2.442 0 0 0-2.442 2.442c0 .246.045.478.112.702l-6.084 6.084a2.432 2.432 0 0 0-.702-.112 2.442 2.442 0 1 0 2.442 2.442c0-.246-.045-.478-.112-.702l6.084-6.084c.224.067.456.112.702.112a2.442 2.442 0 0 0 0-4.884zm0 1.465a.976.976 0 1 1 .001 1.953.976.976 0 0 1-.001-1.953zm-9.116 9.116a.978.978 0 1 1-.001 1.955.978.978 0 0 1 .001-1.955z" fill="currentColor"/></symbol><symbol viewBox="0 0 20 20" id="iD-icon-load" xmlns="http://www.w3.org/2000/svg"><path d="M16 8.606c.69 0 1.25.553 1.25 1.235v5.925c0 .681-.56 1.234-1.25 1.234H4c-.69 0-1.25-.553-1.25-1.234V9.841c0-.682.56-1.235 1.25-1.235s1.25.553 1.25 1.235v4.69h9.5v-4.69c0-.682.56-1.235 1.25-1.235z" fill="currentColor"/><path d="M10.009 12.498c.391.031.688-.249.688-.249s2.66-2.704 3.051-3.198c.34-.429.35-1.02-.056-1.388a1.015 1.015 0 0 0-1.415.056l-1.017 1.08V3.228A1.24 1.24 0 0 0 10.009 2a1.24 1.24 0 0 0-1.252 1.228v5.571l-1.016-1.08a1.015 1.015 0 0 0-1.415-.056.961.961 0 0 0-.057 1.388c.58.587 3.067 3.198 3.067 3.198s.282.218.673.249z" fill="currentColor"/></symbol><symbol viewBox="0 0 20 20" id="iD-icon-minus" xmlns="http://www.w3.org/2000/svg"><path d="M15 8.75a1.25 1.25 0 0 1 0 2.5H5a1.25 1.25 0 0 1 0-2.5h10z" fill="currentColor"/></symbol><symbol viewBox="0 0 20 20" id="iD-icon-more" xmlns="http://www.w3.org/2000/svg"><path d="M16 12a2 2 0 1 1-.001-3.999A2 2 0 0 1 16 12zm-6 0a2 2 0 1 0 .001-3.999A2 2 0 0 0 10 12zm-6 0a2 2 0 1 0 .001-3.999A2 2 0 0 0 4 12z" fill="currentColor"/></symbol><symbol viewBox="0 0 20 20" id="iD-icon-nearby" xmlns="http://www.w3.org/2000/svg"><defs><clipPath id="bzb"><path d="M9.5 4C12.543 4 15 6.457 15 9.5S12.543 15 9.5 15A5.493 5.493 0 0 1 4 9.5C4 6.457 6.457 4 9.5 4z"/></clipPath><clipPath id="bza"><path d="M9.5 4C12.543 4 15 6.457 15 9.5S12.543 15 9.5 15A5.493 5.493 0 0 1 4 9.5C4 6.457 6.457 4 9.5 4z"/></clipPath></defs><image xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAsAAAALCAYAAACprHcmAAAAAXNSR0IArs4c6QAAAQhJREFUGBlNkUluhTAQRL8nxgUSZ4AVV8m1cpucjMAOMdrm97M+UZBacrurqouy6rrux3uvz/M01HEcZts2d13Xt5ztuq72mVnnXFRKvfhijC8BaelvEVAC1iGER0gDDlrrKGUgMNz33coRsOEsAobtNs/zIIpKQNEYEyEA+JCc2HDSGzC2KArPepSE6Muy9DTjOFbTNJWimIDcmb7vv7Isi9ip69o3TXMMw/ArM8VqLPzZEGU831jAUlVVV9u22zzPJWr0CDFPnvlBUsGS2Lggobosi4Mg9yqBYVlro1gJFKRPdBoCiUAQTEjRAXgKomxinmIkd2zSp0dhxb+6UZaPOJUkxcMk8BvNntGWzlp0zgAAAABJRU5ErkJggg==" preserveAspectRatio="none" x="4" y="4" width="11" height="11" clip-path="url(#bza)"/><g clip-path="url(#bzb)"><path d="M15 9.5A5.5 5.5 0 0 1 9.5 15V9.5zM9.5 16V9.5L14 14zm0-6.5V15A5.5 5.5 0 0 1 4 9.5zm0 0V4A5.5 5.5 0 0 0 4 9.5zm-6.688 0L5.5 14l4-4.5zM9.5 3v6.5L5 5z" fill="#1A1A1A" opacity=".2"/></g><path d="M9 4h1v6H9zm.5-1A6.508 6.508 0 0 0 3 9.5C3 13.084 5.916 16 9.5 16S16 13.084 16 9.5 13.084 3 9.5 3zm0-1a7.5 7.5 0 1 1 0 15 7.5 7.5 0 0 1 0-15z" fill="#1A1A1A"/></symbol><symbol viewBox="0 0 20 20" id="iD-icon-no" xmlns="http://www.w3.org/2000/svg"><path d="M10 2a8 8 0 1 0 0 16 8 8 0 0 0 0-16zm0 2.065A5.935 5.935 0 0 1 15.935 10a5.91 5.91 0 0 1-1.08 3.403L6.597 5.145A5.91 5.91 0 0 1 10 4.065zM5.145 6.597l8.258 8.258A5.91 5.91 0 0 1 10 15.935 5.935 5.935 0 0 1 4.065 10a5.91 5.91 0 0 1 1.08-3.403z" fill="currentColor"/></symbol><symbol viewBox="-20 -20 552 552" id="iD-icon-note" xmlns="http://www.w3.org/2000/svg"><path stroke="inherit" stroke-width="inherit" fill="currentColor" d="M448 0H64C28.7 0 0 28.7 0 64v288c0 35.3 28.7 64 64 64h96v84c0 9.8 11.2 15.5 19.1 9.7L304 416h144c35.3 0 64-28.7 64-64V64c0-35.3-28.7-64-64-64z"/></symbol><symbol viewBox="0 0 20 20" id="iD-icon-out-link" xmlns="http://www.w3.org/2000/svg"><path d="M10.13 3.582s-.064.302-.089.577c-.025.274-.07.977-.008 1.337.062.361.146.616.146.616H4.932a.373.373 0 0 0-.282.117.374.374 0 0 0-.12.287v7.308c0 .116.035.202.118.284.084.084.171.12.284.12h8.522a.385.385 0 0 0 .292-.123.361.361 0 0 0 .12-.281v-3.7l.802.606c.177.134.371.24.581.318.216.078.435.121.662.127l.485.014v2.635c0 .402-.081.786-.243 1.148a3.077 3.077 0 0 1-1.553 1.55 2.812 2.812 0 0 1-1.146.236H4.932c-.399 0-.783-.078-1.146-.236a2.94 2.94 0 0 1-.93-.636 3.141 3.141 0 0 1-.62-.921A2.82 2.82 0 0 1 2 13.824V6.516c0-.4.078-.782.235-1.147.156-.357.364-.665.625-.927.261-.261.572-.469.926-.622a2.818 2.818 0 0 1 1.146-.238h5.198zm6.526 0h-4.565a.964.964 0 0 0-.673.271.885.885 0 0 0-.276.729l-.003.634c.001.26.091.496.269.678a.929.929 0 0 0 .683.281h.927l-5.253 5.268a.902.902 0 0 0-.276.684.96.96 0 0 0 .273.668l.627.635a.974.974 0 0 0 .686.275.933.933 0 0 0 .674-.272l5.266-5.252v.92a.943.943 0 0 0 .959.95h.682c.217.024.465-.069.66-.258a.942.942 0 0 0 .292-.692V4.534c0-.25-.099-.48-.279-.663a.921.921 0 0 0-.673-.289z" fill="currentColor"/></symbol><symbol viewBox="0 0 20 20" id="iD-icon-plus" xmlns="http://www.w3.org/2000/svg"><path d="M10 3.75c.69 0 1.25.56 1.25 1.25v3.75H15a1.25 1.25 0 0 1 0 2.5h-3.75V15a1.25 1.25 0 0 1-2.5 0v-3.75H5a1.25 1.25 0 0 1 0-2.5h3.75V5c0-.69.56-1.25 1.25-1.25z" fill="currentColor"/></symbol><symbol viewBox="0 0 20 20" id="iD-icon-point" xmlns="http://www.w3.org/2000/svg"><path d="M10 3C6.686 3 4 5.612 4 8.833 4 12.055 10 17 10 17s6-4.945 6-8.167C16 5.612 13.314 3 10 3zm.187 3.5c1.326 0 2.4 1.045 2.4 2.333 0 1.289-1.074 2.334-2.4 2.334-1.325 0-2.4-1.045-2.4-2.334 0-1.288 1.075-2.333 2.4-2.333z" fill="currentColor"/></symbol><symbol viewBox="0 0 20 20" id="iD-icon-redo" xmlns="http://www.w3.org/2000/svg"><path d="M12.928 3.208c.254.225 2.844 2.625 3.25 3a1 1 0 0 1 0 1.469l-3.25 3a1 1 0 1 1-1.356-1.469l1.089-1.006c-1.302.017-1.708.017-3.075.231-2.044.428-3.086 1.333-3.086 3.01 0 1.97 1.091 2.842 3.376 3.141 3.117.096 3.209.095 3.374.095a1.25 1.25 0 1 1 0 2.5c-1.97.027-2.762.007-3.698-.116C6.16 16.619 4 14.892 4 11.443c0-3.076 1.999-4.814 5.074-5.457 0 0 1.895-.283 3.569-.287-.333-.349-.721-.662-1.071-1.022-.422-.432-.446-.954-.057-1.413.306-.36 1.105-.329 1.413-.056z" fill="currentColor"/></symbol><symbol viewBox="0 0 20 20" id="iD-icon-relation" xmlns="http://www.w3.org/2000/svg"><path d="M14.5 3a2.5 2.5 0 1 1 0 5c-1.011-.03-1.849-.571-2.24-1.5H8.029l3.998 3.748c.625-.263.3-.18.973-.248a2.5 2.5 0 1 1-2.5 2.5c.061-.605-.015-.348.169-.784L6.5 7.808v4.451c.99.334 1.403 1.275 1.5 2.241a2.5 2.5 0 1 1-5 0c.03-1.011.571-1.849 1.5-2.24V7.74C3.51 7.407 3.097 6.465 3 5.5A2.5 2.5 0 0 1 5.5 3c1.011.03 1.85.571 2.24 1.5h4.52c.333-.99 1.275-1.403 2.24-1.5zm-9 10.5a1 1 0 1 0 0 2 1 1 0 0 0 0-2zm7.5-2a1 1 0 1 0 0 2 1 1 0 0 0 0-2zm-7.5-7a1 1 0 1 0 0 2 1 1 0 0 0 0-2zm9 0a1 1 0 1 0 0 2 1 1 0 0 0 0-2z" fill="currentColor"/></symbol><symbol viewBox="0 0 20 20" id="iD-icon-save" xmlns="http://www.w3.org/2000/svg"><path d="M16 8.606c.69 0 1.25.553 1.25 1.235v5.925c0 .681-.56 1.234-1.25 1.234H4c-.69 0-1.25-.553-1.25-1.234V9.841c0-.682.56-1.235 1.25-1.235s1.25.553 1.25 1.235v4.69h9.5v-4.69c0-.682.56-1.235 1.25-1.235z" fill="currentColor"/><path d="M10.009 2.002c.391-.031.688.249.688.249s2.66 2.704 3.051 3.198c.34.429.35 1.02-.056 1.388a1.015 1.015 0 0 1-1.415-.056l-1.017-1.08v5.571a1.24 1.24 0 0 1-1.251 1.228 1.24 1.24 0 0 1-1.252-1.228V5.701l-1.016 1.08a1.015 1.015 0 0 1-1.415.056.961.961 0 0 1-.057-1.388c.58-.587 3.067-3.198 3.067-3.198s.282-.218.673-.249z" fill="currentColor"/></symbol><symbol viewBox="0 0 20 20" id="iD-icon-search" xmlns="http://www.w3.org/2000/svg"><path d="M8.66 2.75a5.91 5.91 0 0 1 5.909 5.91c-.192 1.908-.134 1.73-.958 3.183l3.273 3.273a1.25 1.25 0 0 1-1.768 1.768l-3.273-3.273c-1.546.668-1.732.934-3.183.958-3.06.052-5.91-2.646-5.91-5.909a5.91 5.91 0 0 1 5.91-5.91zm0 2.5a3.41 3.41 0 1 0 0 6.82 3.41 3.41 0 0 0 0-6.82z" fill="currentColor"/></symbol><symbol viewBox="0 0 20 20" id="iD-icon-sidebar-left" xmlns="http://www.w3.org/2000/svg"><g fill="none" fill-rule="evenodd"><rect stroke="currentColor" x=".5" y="3.5" width="19" height="13" rx="2"/><path fill="currentColor" d="M2 5h5v10H2z"/></g></symbol><symbol viewBox="0 0 20 20" id="iD-icon-sidebar-right" xmlns="http://www.w3.org/2000/svg"><g fill="none" fill-rule="evenodd"><rect stroke="currentColor" x=".5" y="3.5" width="19" height="13" rx="2"/><path fill="currentColor" d="M13 5h5v10h-5z"/></g></symbol><symbol viewBox="0 0 20 20" id="iD-icon-translate" xmlns="http://www.w3.org/2000/svg"><path d="M14.429 2.256c.25-.004.431.128.433.392l.009 1.628c2.098-.297 2.664-.377 2.701-.384.237-.041.42.029.478.296l.172.898c.051.239-.037.465-.303.51l-3.035.524.01 1.431c1.992-.003 3.664.853 4.518 2.674.778 2.131-.357 4.804-2.732 6.44-.164.113-.412.123-.569-.066l-.572-.699a.38.38 0 0 1 .082-.553c1.222-.915 2.923-3.073 2.084-4.723-.952 2.339-2.776 4.028-5.355 4.011-1.434-.175-2.362-1.199-2.362-2.728 0-1.056.43-2.111 1.18-2.899.539-.59 1.257-.955 2.004-1.205l-.024-1.382-2.404.415c-.228.039-.414-.08-.459-.292a156.61 156.61 0 0 0-.191-1.08c-.056-.257.121-.393.34-.43l2.684-.464-.027-1.907c-.005-.237.164-.389.394-.392l.944-.014zm-1.223 7.33c-1.128.617-1.449 1.674-1.445 2.321.005.624.218 1.034.65 1.088.638.007.353.044.859-.069l-.064-3.34zm1.697-.39l-.032 2.877c1.223-.589 1.879-2.495 1.63-2.577-.501-.215-.89-.274-1.598-.3zM5.301 7.603l1.003 3.64H4.297l1.004-3.64zm.897-2.306H4.403a.428.428 0 0 0-.417.306L.769 15.763c-.066.211.06.396.296.396H2.66c.172 0 .296-.086.344-.244l.873-2.876h2.847l.874 2.877c.048.157.171.243.344.243h1.595c.236 0 .362-.186.296-.396L6.615 5.603c-.21-.298-.07-.196-.417-.306z" fill="currentColor"/></symbol><symbol viewBox="0 0 20 20" id="iD-icon-undo" xmlns="http://www.w3.org/2000/svg"><path d="M7.572 3.208c-.254.225-2.844 2.625-3.25 3a1 1 0 0 0 0 1.469l3.25 3a1 1 0 1 0 1.356-1.469L7.839 8.202c1.302.017 1.708.017 3.075.231C12.958 8.861 14 9.766 14 11.443c0 1.97-1.091 2.842-3.376 3.141-3.117.096-3.209.095-3.374.095a1.25 1.25 0 1 0 0 2.5c1.97.027 2.761.007 3.698-.116 3.392-.444 5.552-2.171 5.552-5.62 0-3.076-1.999-4.814-5.074-5.457 0 0-1.895-.283-3.569-.287.333-.349.721-.662 1.071-1.022.422-.432.446-.954.057-1.413-.306-.36-1.105-.329-1.413-.056z" fill="currentColor"/></symbol><symbol viewBox="0 0 20 20" id="iD-icon-up" xmlns="http://www.w3.org/2000/svg"><path d="M10 6c.453-.016.695.093.949.336.254.242 5.25 5.855 6 6.691a1.158 1.158 0 0 1-.136 1.685 1.29 1.29 0 0 1-1.762-.129C11.367 10.474 10.683 9.763 10 9c-4.301 4.797-4.301 4.746-5.051 5.583a1.29 1.29 0 0 1-1.762.129 1.158 1.158 0 0 1-.136-1.685c5.25-5.855 5.715-6.371 6-6.691.261-.227.496-.32.949-.336z" fill="currentColor"/></symbol><symbol viewBox="0 0 20 20" id="iD-icon-vertex" xmlns="http://www.w3.org/2000/svg"><path d="M10 7a3 3 0 1 1 0 6 3 3 0 0 1 0-6zm0 1.8a1.2 1.2 0 1 0 0 2.4 1.2 1.2 0 0 0 0-2.4z" fill="currentColor"/></symbol><symbol viewBox="0 0 20 20" id="iD-icon-wrench" xmlns="http://www.w3.org/2000/svg"><path d="M10.688 7.426a3.5 3.5 0 0 1 6.272-3.022l-2.853.713v2l2.985.747a3.5 3.5 0 0 1-4.283 1.684l-4.834 4.834a2.5 2.5 0 1 1-2.121-2.121l4.834-4.835zm-4.48 8.016a1 1 0 1 0-1.415-1.414 1 1 0 0 0 1.414 1.414z" fill="currentColor"/></symbol><symbol viewBox="0 0 100 100" id="iD-logo-features" xmlns="http://www.w3.org/2000/svg"><path d="M67.531 11c-8.284 0-15 6.716-15 15 0 8.284 15 21 15 21s15-12.716 15-21-6.715-15-15-15zM68 20a6 6 0 1 1 0 12 6 6 0 0 1 0-12zM83.5 48a7.5 7.5 0 0 0-7.5 7.5c0 .756.136 1.468.344 2.156L57.656 76.344c-.688-.208-1.4-.344-2.156-.344a7.5 7.5 0 1 0 7.5 7.5c0-.756-.136-1.468-.344-2.156l18.688-18.688c.688.208 1.4.344 2.156.344a7.5 7.5 0 0 0 0-15zm0 4.5a3 3 0 1 1 0 6 3 3 0 0 1 0-6zm-28 28a3 3 0 1 1 0 6 3 3 0 0 1 0-6zM16.5 33A7.5 7.5 0 0 0 9 40.5c0 2.873 1.628 5.365 4 6.625v13.75c-2.372 1.26-4 3.752-4 6.625a7.5 7.5 0 0 0 7.5 7.5c2.873 0 5.365-1.628 6.625-4h13.75c1.26 2.372 3.752 4 6.625 4a7.5 7.5 0 0 0 7.5-7.5c0-2.873-1.628-5.365-4-6.625v-13.75c2.372-1.26 4-3.752 4-6.625a7.5 7.5 0 0 0-7.5-7.5c-2.908 0-5.412 1.675-6.656 4.094L36.656 37H23.125c-1.26-2.372-3.752-4-6.625-4zm0 4.5a3 3 0 1 1 0 6 3 3 0 0 1 0-6zm27 0a3 3 0 1 1 0 6 3 3 0 0 1 0-6zM23.125 44h13.75A7.59 7.59 0 0 0 40 47.125v13.75A7.59 7.59 0 0 0 36.875 64h-13.75A7.59 7.59 0 0 0 20 60.875v-13.75A7.59 7.59 0 0 0 23.125 44zM16.5 64.5a3 3 0 1 1 0 6 3 3 0 0 1 0-6zm27 0a3 3 0 1 1 0 6 3 3 0 0 1 0-6z" fill="currentColor"/></symbol><symbol viewBox="0 0 100 100" id="iD-logo-osm" xmlns="http://www.w3.org/2000/svg"><path d="M4 5l7.813 20.5L4 46l7.813 20.531L4 87.031l4.813 1.844 26.031-26.063 4.687.719 5.688-5.687c-3.349-3.88-5.88-8.512-7.25-13.625l2.687-2.157a31.357 31.357 0 0 1-.718-6.593c0-11.278 6.012-21.192 15-26.688L45.031 5 24.5 12.813 4 5zm67.094 4.313c-14.36 0-26 11.64-26 25.999 0 14.36 11.64 26 26 26 14.359 0 26-11.64 26-26 0-14.359-11.641-25.999-26-25.999zm20.062 50.156c-5.421 4.518-12.38 7.25-19.968 7.25-2.258 0-4.471-.261-6.594-.719l-2.156 2.656c-4.856-1.301-9.307-3.589-13.063-6.687L43.5 67.844l.719 4.344-21.813 21.843 2.094.813 20.531-7.813 20.5 7.813 20.5-7.813 7.813-20.5-2.688-7.062z" fill="currentColor"/></symbol><symbol viewBox="0 0 100 100" id="iD-logo-reset" xmlns="http://www.w3.org/2000/svg"><path d="M20 17l-3 3v5l25 25-25 25v5l3 3h5l25-25 25 25h5l3-3v-5L58 50l25-25v-5l-3-3h-5L50 42 25 17h-5z" fill="currentColor"/></symbol><symbol viewBox="0 0 100 100" id="iD-logo-restore" xmlns="http://www.w3.org/2000/svg"><path d="M50 11l-2 2v5.063C29.66 19.114 15 34.406 15 53c0 19.271 15.729 35 35 35s35-15.729 35-35c0-11.666-5.767-22.037-14.594-28.406l-7.187 7.187C70.301 36.179 75 43.999 75 53c0 13.866-11.134 25-25 25S25 66.866 25 53a24.91 24.91 0 0 1 23-24.906V33l2 2h3l12-12-12-12h-3z" fill="currentColor"/></symbol><symbol viewBox="0 0 100 100" id="iD-logo-walkthrough" xmlns="http://www.w3.org/2000/svg"><path d="M5 8v74.656L27.5 93 50 83l22.5 10L95 82.656V8L72.5 18 50 8 27.5 18 5 8zm57.406 23.594L68 37.188l5.594-5.594 2.462 3.162L70.812 40l5.594 5.594-3.162 2.462L68 42.812l-5.594 5.594-3.087-2.975L65.188 40l-5.594-5.594zM37.219 43.906c3.029.265 6.039 1.325 8.375 3.313L42.688 50c-1.698-1.267-3.776-1.938-5.875-2.125l.406-3.969zm-4.844.375c.234 1.256 1.333 2.866 1.281 3.813-1.979 1.001-3.282 2.996-4.406 4.75l-3.149-2.517c1.596-2.427 3.51-4.892 6.274-6.046zm33.469 6.281l3.687 1.594c-.855 2.635-2.059 5.2-3.875 7.313l-2.781-2.907c1.38-1.775 2.315-3.857 2.969-6zm-17.219.094c1.53 2.213 2.46 4.763 3.844 7.063L48.875 59.5c-1.262-2.168-2.153-4.558-3.594-6.625l3.344-2.219zm-24.75 3.813l3.438 2.031c-.947 2.154-1.829 4.383-2.532 6.594l-3.668-1.662c.791-2.367 1.69-4.708 2.762-6.963zm36.25 4.625l1.6 3.681c-2.719 1.522-6.257 2.083-9.131.663l2.168-3.412c1.769.544 3.846.007 5.363-.932z" fill="currentColor"/></symbol><symbol viewBox="0 0 60 60" id="iD-multipolygon" xmlns="http://www.w3.org/2000/svg"><path d="M21 21h18v18H21z" fill="#FFF"/><path d="M21 21h18v18H21z" stroke="#AAA" stroke-dasharray="2,1" fill="none"/><path d="M42 20.5a3.5 3.5 0 1 1-7 0 3.5 3.5 0 0 1 7 0z" opacity=".2"/><path d="M41 20.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0z" fill="#FFF"/><path d="M24 38.5a3.5 3.5 0 1 1-7 0 3.5 3.5 0 0 1 7 0z" opacity=".2"/><path d="M23 38.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0z" fill="#FFF"/><path d="M24 20.5a3.5 3.5 0 1 1-7 0 3.5 3.5 0 0 1 7 0z" opacity=".2"/><path d="M23 20.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0z" fill="#FFF"/><path d="M42 38.5a3.5 3.5 0 1 1-7 0 3.5 3.5 0 0 1 7 0z" opacity=".2"/><path d="M41 38.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0z" fill="#FFF"/></symbol><symbol viewBox="0 0 20 20" id="iD-operation-circularize" xmlns="http://www.w3.org/2000/svg"><path d="M7.026 2.563c-1.329.531-2.444 1.419-3.312 2.531.071.018.15.009.219.031.52.169.941.49 1.281.875A6.16 6.16 0 0 1 7.37 4.375a2.953 2.953 0 0 1-.375-1.406c0-.14.012-.271.031-.406zm5.938 0c.019.135.031.266.031.406 0 .509-.147.984-.375 1.406A6.16 6.16 0 0 1 14.776 6c.34-.385.761-.706 1.282-.875.067-.022.146-.039.218-.062a7.967 7.967 0 0 0-3.312-2.5zM2.026 10.781a7.993 7.993 0 0 0 1.344 3.688c.054-.096.122-.191.188-.281.298-.411.69-.723 1.125-.938a6.262 6.262 0 0 1-.844-2.437 3.026 3.026 0 0 1-1.781-.032c-.009-.003-.023.003-.032 0zm15.907 0a3.021 3.021 0 0 1-1.782.031 6.276 6.276 0 0 1-.843 2.438c.438.204.821.519 1.125.938.065.09.133.185.187.281a7.993 7.993 0 0 0 1.344-3.688c-.009.003-.022-.003-.031 0zm-8.938 5.344a2.983 2.983 0 0 1-.562 1.594c-.027.037-.066.058-.094.093.54.116 1.082.188 1.656.188.574 0 1.116-.072 1.656-.188-.028-.035-.066-.056-.093-.093a2.976 2.976 0 0 1-.563-1.594 6.095 6.095 0 0 1-1 .094c-.345 0-.671-.041-1-.094z" fill="currentColor"/><path d="M9.995.956a2 2 0 1 0-.001 3.999A2 2 0 0 0 9.995.956zm-7.156 5a2.009 2.009 0 0 1 2.062 2.625A2.009 2.009 0 0 1 2.37 9.862a2.01 2.01 0 0 1-1.281-2.531 2.024 2.024 0 0 1 1.75-1.375zm13.937 0a2.01 2.01 0 0 1 .844 3.906 2.01 2.01 0 0 1-2.531-1.281A2.01 2.01 0 0 1 16.37 6.05a2.11 2.11 0 0 1 .406-.094zm-10.718 8a2.05 2.05 0 0 1 1.125.375 2.022 2.022 0 0 1 .437 2.812 2.021 2.021 0 0 1-2.812.438 2.022 2.022 0 0 1-.438-2.813 1.988 1.988 0 0 1 1.688-.812zm7.875 0a1.988 1.988 0 0 1 1.687.812 2.023 2.023 0 0 1-.437 2.813 2.022 2.022 0 0 1-2.813-.438 2.021 2.021 0 0 1 .438-2.812c.335-.243.74-.362 1.125-.375z" fill="inherit"/></symbol><symbol viewBox="0 0 20 20" id="iD-operation-continue" xmlns="http://www.w3.org/2000/svg"><path d="M14 4a6 6 0 1 0 0 12 6 6 0 0 0 0-12zm-1 2h2v3h3v2h-3v3h-2v-3h-3V9h3V6zM5 9v2h2V9H5z" fill="currentColor"/><path d="M2 8a2 2 0 1 0-.001 3.999A2 2 0 0 0 2 8z" fill="inherit"/></symbol><symbol viewBox="0 0 20 20" id="iD-operation-continue-left" xmlns="http://www.w3.org/2000/svg"><path d="M6 4a6 6 0 1 1 0 12A6 6 0 0 1 6 4zm1 2H5v3H2v2h3v3h2v-3h3V9H7V6zm8 3v2h-2V9h2zm3-1a2 2 0 1 1 .001 3.999A2 2 0 0 1 18 8z" fill="inherit"/></symbol><symbol viewBox="0 0 20 20" id="iD-operation-copy" xmlns="http://www.w3.org/2000/svg"><path d="M16 7a1 1 0 0 1 1 1v8a1 1 0 0 1-1 1H8a1 1 0 0 1-1-1V8a1 1 0 0 1 1-1h8zm-1 2H9v6h6V9z" fill="inherit"/><path d="M11 1a1 1 0 0 1 1 1v4h-2V3H4v6h2v2H3a1 1 0 0 1-1-1V2a1 1 0 0 1 1-1h8z" fill="inherit"/></symbol><symbol viewBox="0 0 20 20" id="iD-operation-delete" xmlns="http://www.w3.org/2000/svg"><path d="M12.156 14.787c0 .091.035.167.102.228.067.06.154.09.257.09h.36c.098 0 .182-.03.251-.086a.285.285 0 0 0 .108-.232v-5.29a.31.31 0 0 0-.108-.237.348.348 0 0 0-.251-.101h-.36a.348.348 0 0 0-.251.101.31.31 0 0 0-.108.237zm-1.619-5.29a.307.307 0 0 0-.104-.237.363.363 0 0 0-.253-.101h-.36a.324.324 0 0 0-.244.101.33.33 0 0 0-.096.237v5.29c0 .091.031.167.093.228.061.06.142.09.247.09h.36c.096 0 .18-.03.253-.086a.282.282 0 0 0 .104-.232zM8.672 4.964a91.81 91.81 0 0 1 2.676 0c0-.069.005-.135.019-.202a.533.533 0 0 0 0-.187v-.128a2.849 2.849 0 0 0-.682-.095 27.3 27.3 0 0 0-1.374 0 2.8 2.8 0 0 0-.676.095v.128c0 .057.002.122.01.191.006.07.015.135.027.198m-.828 4.533a.316.316 0 0 0-.106-.237.356.356 0 0 0-.253-.101h-.358c-.1 0-.18.034-.244.101a.323.323 0 0 0-.098.237v5.29a.3.3 0 0 0 .098.228.34.34 0 0 0 .244.09h.358c.098 0 .182-.03.253-.086a.29.29 0 0 0 .106-.232zm2.161-1.312c.791-.011 1.581-.029 2.372-.05a27.15 27.15 0 0 0 2.374-.173v7.212c0 .361-.136.674-.405.934a1.364 1.364 0 0 1-.985.392H6.639c-.386 0-.718-.128-.999-.389a1.223 1.223 0 0 1-.416-.937V7.962c.753.094 1.502.153 2.243.182a61.66 61.66 0 0 0 2.244.041zM16 6.076v.594c-.227.115-.603.207-1.131.28a22.34 22.34 0 0 1-1.706.162c-.609.04-1.203.062-1.779.065-.576.006-1.035.009-1.379.009-.338 0-.797-.003-1.379-.009a29.745 29.745 0 0 1-1.791-.065 24.075 24.075 0 0 1-1.694-.158c-.522-.07-.895-.164-1.122-.284A2.139 2.139 0 0 1 4 6.371v-.607c0-.102.006-.207.019-.311.152-.077.371-.148.653-.202.281-.053.58-.098.899-.133.319-.034.634-.059.943-.077.312-.016.552-.032.723-.043-.05-.47-.014-.837.105-1.104.121-.262.302-.46.548-.588.244-.13.545-.214.905-.252.359-.036.76-.054 1.21-.054.338 0 .672.007 1.006.025.335.018.632.078.897.175.264.102.473.259.63.471.156.213.235.513.235.904v.207c0 .07-.008.142-.017.216.176.011.418.027.724.043.307.018.622.043.945.077.321.035.626.08.912.133.29.054.511.125.663.202z" fill="inherit"/></symbol><symbol viewBox="0 0 20 20" id="iD-operation-detach-node" xmlns="http://www.w3.org/2000/svg"><path d="M9.414 4.929v1.414l1.414 1.414-1.547 1.548c.295.142.596.33.84.574.252.251.432.536.574.84l1.548-1.547 1.414 1.414h1.414V4.929z" fill="currentColor"/><path d="M8 9.987a2 2 0 1 0 0 4 2 2 0 0 0 0-4z" fill="inherit"/></symbol><symbol viewBox="0 0 20 20" id="iD-operation-disconnect" xmlns="http://www.w3.org/2000/svg"><path d="M4 6l-4 4 4 4 1-1v-2h2.188A2.912 2.912 0 0 1 7 10c0-.345.08-.691.188-1H5V7L4 6zm12 0l-1 1v2h-2.188c.108.309.188.655.188 1 0 .356-.074.684-.188 1H15v2l1 1 4-4-4-4z" fill="currentColor"/><path d="M10 7.987a2 2 0 1 0 0 4 2 2 0 0 0 0-4z" fill="inherit"/></symbol><symbol viewBox="0 0 20 20" id="iD-operation-layers" xmlns="http://www.w3.org/2000/svg"><path d="M16.87 16v-2h-14v2h14zm.13-5H3V9h14v2zm0-5H3V4h14v2z" fill="inherit"/></symbol><symbol viewBox="0 0 20 20" id="iD-operation-merge" xmlns="http://www.w3.org/2000/svg"><path d="M16.143 8.488c.236 0 .438.084.606.25a.825.825 0 0 1 .251.605v1.314a.822.822 0 0 1-.251.605.825.825 0 0 1-.606.251h-4.63v4.613c0 .25-.084.457-.25.623a.83.83 0 0 1-.607.251H9.344a.83.83 0 0 1-.607-.251.818.818 0 0 1-.25-.606v-4.63H3.876a.858.858 0 0 1-.625-.241.816.816 0 0 1-.251-.615V9.343c0-.236.084-.438.251-.605a.826.826 0 0 1 .606-.25h4.63V3.876c0-.25.08-.457.24-.625A.831.831 0 0 1 9.344 3h1.312c.236 0 .44.086.607.251.166.168.25.37.25.606v4.631z" fill="inherit"/></symbol><symbol viewBox="0 0 20 20" id="iD-operation-move" xmlns="http://www.w3.org/2000/svg"><path d="M10 1L7 4l1 1h1v2h2V5h1l1-1-3-3zM4 7l1 1v1h2v2H5v1l-1 1-3-3 3-3zm12 0l3 3-3 3-1-1v-1h-2V9h2V8l1-1zm-7 6h2v2h1l1 1-3 3-3-3 1-1h1v-2z" fill="currentColor"/><path d="M10 8a2 2 0 1 0-.001 3.999A2 2 0 0 0 10 8z" fill="inherit"/></symbol><symbol viewBox="0 0 20 20" id="iD-operation-orthogonalize" xmlns="http://www.w3.org/2000/svg"><path d="M7 15h6v2H7zm-4-2h2V7H3zm12 0h2V7h-2zM7 5h6V3H7z" fill="currentColor"/><path d="M4 2a2 2 0 1 0-.001 3.999A2 2 0 0 0 4 2zm0 12a2 2 0 1 1 .001 3.999A2 2 0 0 1 4 14zm12 0a2 2 0 1 1 .001 3.999A2 2 0 0 1 16 14zm0-12a2 2 0 1 1 .001 3.999A2 2 0 0 1 16 2z" fill="inherit"/></symbol><symbol viewBox="0 0 20 20" id="iD-operation-paste" xmlns="http://www.w3.org/2000/svg"><path d="M12 11a.5.5 0 0 1 .5.5v1h1a.5.5 0 0 1 0 1h-1v1a.5.5 0 0 1-1 0v-1h-1a.5.5 0 0 1 0-1h1v-1a.5.5 0 0 1 .5-.5z" fill="inherit"/><path d="M16 8a1 1 0 0 1 1 1v8a1 1 0 0 1-1 1H8a1 1 0 0 1-1-1V9a1 1 0 0 1 1-1h8zm-1 2H9v6h6v-6z" fill="inherit"/><path d="M8.5 1.5c.76.154.443-.022.966.5H12a1 1 0 0 1 1 1v4h-2V4H9.466c-.523.523-.206.347-.966.5h-2c-.76-.153-.443.023-.966-.5H4v10h2v2H3a1 1 0 0 1-1-1V3a1 1 0 0 1 1-1h2.534c.523-.523.206-.346.966-.5h2z" fill="inherit"/></symbol><symbol viewBox="0 0 20 20" id="iD-operation-reflect-long" xmlns="http://www.w3.org/2000/svg"><path d="M9 18h2V2H9v16z" fill="currentColor"/><path d="M13 14V6h5v2h-3v6M5 14V8H2V6h5v8" fill="inherit"/></symbol><symbol viewBox="0 0 20 20" id="iD-operation-reflect-short" xmlns="http://www.w3.org/2000/svg"><path d="M9 14h2V5H9v9z" fill="currentColor"/><path d="M7 7H0v5h2V9h5m6 0h5v3h2V7h-7" fill="inherit"/></symbol><symbol viewBox="0 0 20 20" id="iD-operation-reverse" xmlns="http://www.w3.org/2000/svg"><path d="M8 5l-4 5 4 5h2v-1l-3.5-4L10 6V5H8zm6 0h2v1l-3.5 4 3.5 4v1h-2l-4-5 4-5z" fill="inherit"/></symbol><symbol viewBox="0 0 20 20" id="iD-operation-rotate" xmlns="http://www.w3.org/2000/svg"><path d="M10 1L9 2v1.062A8 8 0 1 0 18 11a7.95 7.95 0 0 0-2.875-6.125l-1.406 1.406A5.986 5.986 0 0 1 16 11a6 6 0 1 1-12 0 5.982 5.982 0 0 1 5-5.906V6l1 1 3-3-3-3z" fill="currentColor"/><path d="M10 9a2 2 0 1 0-.001 3.999A2 2 0 0 0 10 9z" fill="inherit"/></symbol><symbol viewBox="0 0 20 20" id="iD-operation-simplify" xmlns="http://www.w3.org/2000/svg"><path d="M9 7.5V11H8l-1 1 3 3 3-3-1-1h-1V9.5c-1.7-.85-2-2-2-2z" fill="currentColor"/><path d="M8 2c-1.333 0-2.219.781-2.719 1.281-.5.5-.614.719-1.281.719H3v2h1c1.333 0 2.219-.781 2.719-1.281C7.219 4.219 7.333 4 8 4c.167 0 .206.009.406.25.201.241.438.688.688 1.188.25.5.513 1.053.937 1.562.425.509 1.136 1 1.969 1 1.333 0 2.219-.781 2.719-1.281.5-.5.614-.719 1.281-.719h1V4h-1c-1.333 0-2.219.781-2.719 1.281-.5.5-.614.719-1.281.719-.167 0-.206-.009-.406-.25-.201-.241-.438-.688-.688-1.188-.25-.5-.513-1.053-.937-1.562C9.544 2.491 8.833 2 8 2zM3 16h14v2H3v-2z" fill="inherit"/></symbol><symbol viewBox="0 0 20 20" id="iD-operation-smooth" xmlns="http://www.w3.org/2000/svg"><path d="M9 5v3H8L7 9l3 3 3-3-1-1h-1V5H9z" fill="currentColor"/><path d="M12 18c1.333 0 2.219-.781 2.719-1.281.5-.5.614-.719 1.281-.719h1v-2h-1c-1.333 0-2.219.781-2.719 1.281-.5.5-.614.719-1.281.719-.167 0-.206-.009-.406-.25-.201-.241-.438-.688-.688-1.188-.25-.5-.513-1.053-.937-1.562-.425-.509-1.136-1-1.969-1-1.333 0-2.219.781-2.719 1.281-.5.5-.614.719-1.281.719H3v2h1c1.333 0 2.219-.781 2.719-1.281.5-.5.614-.719 1.281-.719.167 0 .206.009.406.25.201.241.438.688.688 1.188.25.5.513 1.053.937 1.562.425.509 1.136 1 1.969 1zm5-14H3V2h14v2z" fill="inherit"/></symbol><symbol viewBox="0 0 20 20" id="iD-operation-split" xmlns="http://www.w3.org/2000/svg"><path d="M4 5C3 5 2 6 2 7v2h3l2 1-2 1H2v2c0 1 1 2 2 2h1c2 0 2.487-.974 3-2l1-2 9-5s0-1-2-1L8.969 8.906 8 7c-.494-.988-1-2-3-2zm0 1h2l1 2H3V7c0-1.013 1-1 1-1zm8.094 4.719l-2 1L16 15c2 0 2-1 2-1zM3 12h4l-1 2H4s-1 0-1-1z" fill="inherit"/></symbol><symbol viewBox="0 0 20 20" id="iD-operation-straighten" xmlns="http://www.w3.org/2000/svg"><path d="M5 9h2v2H5zm8 2h2V9h-2z" fill="currentColor"/><path d="M2 8a2 2 0 1 0-.001 3.999A2 2 0 0 0 2 8zm8 0a2 2 0 1 1 .001 3.999A2 2 0 0 1 10 8zm8 0a2 2 0 1 1 .001 3.999A2 2 0 0 1 18 8z" fill="inherit"/></symbol><symbol viewBox="5 0 50 50" id="iD-other-line" xmlns="http://www.w3.org/2000/svg"><path d="M22.375 36l3-11 3-11h4l3 11 3 11z" fill="currentColor"/></symbol><symbol viewBox="5 0 50 50" id="iD-pipeline-line" xmlns="http://www.w3.org/2000/svg"><path d="M16.5 15c-1.381 0-2.5 2.239-2.5 5s1.119 5 2.5 5H27V15H16.5zM31 15v10h14.5V15H31z" fill="#B5B5B5"/><path d="M48 20c0 2.761-1.119 5-2.5 5S43 22.761 43 20s1.119-5 2.5-5 2.5 2.239 2.5 5z" fill="#989898"/><path d="M28 12v14l-2 10h2l1.594-8h4.812L36 36h2l-2-10h-6V12h-2zm6 0v2h2v-2h-2zm-12 3c-1 0-2.5 2.239-2.5 5s1.5 5 2.5 5h2c-1.381 0-3-2.239-3-5s1.619-5 3-5h-2zm15 0c-1 0-2.5 2.239-2.5 5s1.5 5 2.5 5h2c-1.381 0-3-2.239-3-5s1.619-5 3-5h-2zm8.5 0c-1.381 0-2.5 2.239-2.5 5s1.119 5 2.5 5 2.5-2.239 2.5-5-1.119-5-2.5-5z" fill="#989898"/></symbol><symbol viewBox="5 0 50 50" id="iD-power-line" xmlns="http://www.w3.org/2000/svg"><path d="M20 10v1h2v-1h-2zm4 0v1h2v-1h-2zm10 0v1h2v-1h-2zm4 0v1h2v-1h-2zm-17.688 5c-.665 3.533-3.045 5.5-5.312 5.5h-1v1h1a5.462 5.462 0 0 0 3-.906v.906h1c2.879 0 5.615-2.478 6.312-6.5h-1c-.665 3.533-3.045 5.5-5.312 5.5h-.875c1.561-1.08 2.76-2.991 3.187-5.5h-1zm14.376 0c.697 4.022 3.433 6.5 6.312 6.5h1v-.906a5.462 5.462 0 0 0 3 .906h1v-1h-1c-2.267 0-4.647-1.967-5.312-5.5h-1c.427 2.509 1.626 4.42 3.187 5.5H41c-2.267 0-4.647-1.967-5.312-5.5h-1z" fill="#989898"/><path d="M28 10v2h-9v2h9v22h4V14h9v-2h-9v-2h-4z" fill="#B5B5B5"/></symbol><symbol viewBox="0 0 45 45" id="iD-preset-icon-frame" xmlns="http://www.w3.org/2000/svg"><path d="M7 3.5a3.5 3.5 0 1 1-7 0 3.5 3.5 0 0 1 7 0zM3.5 23.999a1.5 1.5 0 1 1-.006-2.998 1.5 1.5 0 0 1 .006 2.998zM7 41.5a3.5 3.5 0 1 1-7 0 3.5 3.5 0 0 1 7 0zM24 41.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 24 41.5zM45 41.5a3.5 3.5 0 1 1-7 0 3.5 3.5 0 0 1 7 0zM41.5 23.999a1.5 1.5 0 1 1 .001-3 1.5 1.5 0 0 1-.001 3zM45 3.5a3.5 3.5 0 1 1-7 0 3.5 3.5 0 0 1 7 0zM24 3.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 24 3.5z" opacity=".2"/><path d="M6 3.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0z" fill="#FFF"/><path d="M3.5 22a.5.5 0 0 1 0 1 .5.5 0 0 1 0-1z" fill="#FFF" opacity=".5"/><path d="M6 41.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0z" fill="#FFF"/><path d="M23 41.5a.5.5 0 0 1-1 0 .5.5 0 0 1 1 0z" fill="#FFF" opacity=".5"/><path d="M44 41.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0z" fill="#FFF"/><path d="M41.5 22a.5.5 0 0 1 0 1 .5.5 0 0 1 0-1z" fill="#FFF" opacity=".5"/><path d="M44 3.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0z" fill="#FFF"/><path d="M23 3.5a.5.5 0 0 1-1 0 .5.5 0 0 1 1 0z" fill="#FFF" opacity=".5"/></symbol><symbol viewBox="5 0 50 50" id="iD-railway-abandoned" xmlns="http://www.w3.org/2000/svg"><g fill="#989898"><path d="M36.044 23.685l-1.449.118.729 1.197h7.427c.554 0 1.134-.463 1-1l-.25-1c-.134-.537-.446-1-1-1h-2.344l-.469-2h-2.5l.469 2h-2.826l.179.248 1.034 1.437zM39.25 23a.5.5 0 1 1 0 1 .5.5 0 0 1 0-1zM33.846 19h7.904c.554 0 1.134-.463 1-1l-.25-1c-.134-.537-.446-1-1-1h-2.781l-.469-2-1.5-1-1 1 .469 2h-4.013l1.313 2.403.327.597zm4.404-2a.5.5 0 1 1 0 1 .5.5 0 0 1 0-1zM27.666 16h-3.885l.469-2-1-1-1.5 1-.469 2H18c-.554 0-.866.463-1 1l-.25 1c-.134.537.446 1 1 1h8.277l.347-.635L27.666 16zm-6.416 2a.5.5 0 1 1 0-1 .5.5 0 0 1 0 1zM20.936 28l.472-2h-2.501l-.469 2H16c-.554 0-.866.463-1 1l-.25 1c-.134.537.446 1 1 1h6.911l1.59-3h-3.315zm-1.686 2a.5.5 0 1 1 0-1 .5.5 0 0 1 0 1zM40.031 32l.719 3 1 1 1.5-1-.719-3zM23.848 23.647l1.036-1.438.15-.209h-2.691l.472-2h-2.502l-.469 2H17c-.554 0-.866.463-1 1l-.25 1c-.134.537.446 1 1 1h7.798l.749-1.235-1.449-.118zM20.25 24a.5.5 0 1 1 0-1 .5.5 0 0 1 0 1zM44.749 30l-.25-1c-.134-.537-.446-1-1-1h-1.938l-.469-2h-2.5l.469 2h-3.436l1.588 3h6.536c.554 0 1.134-.463 1-1zm-4.499 0a.5.5 0 1 1 0-1 .5.5 0 0 1 0 1zM16.75 35l1.5 1 1-1 .719-3h-2.5z"/></g><path d="M30.803 31.655l5.643.031-.363-.686-1.588-3-.817-1.543 1.298-.106L34.154 25l-1.256-2.064 1.3-.106L33.6 22l-2.162-3-.009-.012 1.213-.107L31.066 16l-1.107-2.027-.026.122v-.158L28.806 16l-1.553 2.844 1.212.106-.036.05-2.162 3-.571.792 1.297.105L25.716 25l-.797 1.313 1.298.107L25.38 28l-1.588 3-.344.649 2.273-.031-.003.009 3.47.019V36.023h1.625l-.008-3.365-.001-.502z" fill="#555"/></symbol><symbol viewBox="5 0 50 50" id="iD-railway-disused" xmlns="http://www.w3.org/2000/svg"><g fill="#989898"><path d="M17.001 35l1.5 1 1-1 .719-3h-2.5zM40.282 32l.719 3 1 1 1.5-1-.719-3zM21.187 28l.472-2h-2.501l-.469 2h-2.438c-.554 0-.866.463-1 1l-.25 1c-.134.537.446 1 1 1h11.79c-.313-1.031-.775-2.081-1.457-3h-5.147zm-1.686 2a.5.5 0 1 1 0-1 .5.5 0 0 1 0 1zM17.001 25h26c.554 0 1.134-.463 1-1l-.25-1c-.134-.537-.446-1-1-1h-2.344l-.469-2h-2.5l.469 2H22.594l.472-2h-2.502l-.469 2h-2.844c-.554 0-.866.463-1 1l-.25 1c-.134.537.446 1 1 1zm22.5-2a.5.5 0 1 1 0 1 .5.5 0 0 1 0-1zm-19 0a.5.5 0 1 1 0 1 .5.5 0 0 1 0-1zM18.001 19h24c.554 0 1.134-.463 1-1l-.25-1c-.134-.537-.446-1-1-1H38.97l-.469-2-1.5-1-1 1 .469 2H24.032l.469-2-1-1-1.5 1-.469 2h-3.281c-.554 0-.866.463-1 1l-.25 1c-.134.537.446 1 1 1zm20.5-2a.5.5 0 1 1 0 1 .5.5 0 0 1 0-1zm-17 0a.5.5 0 1 1 0 1 .5.5 0 0 1 0-1zM45 30l-.25-1c-.134-.537-.446-1-1-1h-1.938l-.469-2h-2.5l.469 2h-4.244l-.315.285c-1.087.982-1.675 1.941-2.01 2.715h11.258c.553 0 1.133-.463.999-1zm-4.499 0a.5.5 0 1 1 0-1 .5.5 0 0 1 0 1z"/></g><g fill="#555"><path d="M24.407 31.625c3.038 3.078 2.378 4.385 2.378 4.385s.211.039 1.669.039c.119-3.129-2.293-3.861-4.047-4.424zM30.979 36.031c.046-2.014-.264-3.628-.749-4.922-.491-1.309-1.162-2.282-1.833-3-1.276-1.365-2.546-1.8-2.546-1.8a7.946 7.946 0 0 1 1.55 1.8c.612.952 1.035 1.99 1.321 3 .732 2.581.603 4.935.603 4.935s.572-.013 1.654-.013zM33.557 28c-1.804.807-2.44 2.824-2.44 2.824l.047.176.437 1.64s-.001-.664.373-1.64c.321-.84.927-1.912 2.053-3 .083-.08.161-.16.25-.24a3.58 3.58 0 0 0-.72.24zM32.019 36.038l1.58-.009s-.23-2.368 1.996-4.326c-1.734.498-3.385 2.08-3.576 4.335z"/></g></symbol><symbol viewBox="5 0 50 50" id="iD-railway-rail" xmlns="http://www.w3.org/2000/svg"><path d="M23.5 13L22 14l-.469 2H18.25c-.554 0-.866.463-1 1L17 18c-.134.537.446 1 1 1h24c.554 0 1.134-.463 1-1l-.25-1c-.134-.537-.446-1-1-1h-2.781l-.469-2-1.5-1-1 1 .469 2H24.031l.469-2-1-1zm-2 4a.5.5 0 1 1 0 1 .5.5 0 0 1 0-1zm17 0a.5.5 0 1 1 0 1 .5.5 0 0 1 0-1zm-17.938 3l-.468 2H17.25c-.554 0-.866.463-1 1L16 24c-.134.537.446 1 1 1h26c.554 0 1.134-.463 1-1l-.25-1c-.134-.537-.446-1-1-1h-2.344l-.468-2h-2.5l.468 2H22.594l.468-2h-2.5zm-.062 3a.5.5 0 1 1 0 1 .5.5 0 0 1 0-1zm19 0a.5.5 0 1 1 0 1 .5.5 0 0 1 0-1zm-20.344 3l-.468 2H16.25c-.554 0-.866.463-1 1L15 30c-.134.537.446 1 1 1h28c.554 0 1.134-.463 1-1l-.25-1c-.134-.537-.446-1-1-1h-1.938l-.468-2h-2.5l.468 2H21.188l.468-2h-2.5zm.344 3a.5.5 0 1 1 0 1 .5.5 0 0 1 0-1zm21 0a.5.5 0 1 1 0 1 .5.5 0 0 1 0-1zm-22.781 3L17 35l1.5 1 1-1 .719-3h-2.5zm22.562 0L41 35l1 1 1.5-1-.719-3h-2.5z" fill="#989898"/></symbol><symbol viewBox="0 0 60 60" id="iD-relation" xmlns="http://www.w3.org/2000/svg"><path d="M26.906 20c.054.323.094.662.094 1 0 .338-.04.677-.094 1h8.188A4.916 4.916 0 0 1 35 21c0-.345.027-.675.094-1h-8.188zm-1.031 4.437a6.038 6.038 0 0 1-1.406 1.438l7.375 7.344a5.214 5.214 0 0 1 1.406-1.407l-7.375-7.375zM20 26.906v8.188A4.916 4.916 0 0 1 21 35c.345 0 .675.027 1 .094v-8.188A6.106 6.106 0 0 1 21 27c-.338 0-.677-.04-1-.094z" fill="#CCC"/><path d="M40 17a4 4 0 1 1 0 8 4 4 0 0 1 0-8z" fill="#70372F"/><path d="M40 18a3 3 0 1 1 0 6 3 3 0 0 1 0-6z" fill="#E06D5F"/><path d="M40 20a1 1 0 1 1 0 2 1 1 0 0 1 0-2z" fill="#FFF"/><path d="M25 40a4 4 0 1 1-8 0 4 4 0 0 1 8 0z" fill="#2C5476"/><path d="M24 40a3 3 0 1 1-6 0 3 3 0 0 1 6 0z" fill="#58A9ED"/><path d="M22 40a1 1 0 1 1-2 0 1 1 0 0 1 2 0z" fill="#FFF"/><g><path d="M40 36a4 4 0 1 1-8 0 4 4 0 0 1 8 0z" fill="#46682F"/><path d="M39 36a3 3 0 1 1-6 0 3 3 0 0 1 6 0z" fill="#8CD05F"/><path d="M37 36a1 1 0 1 1-2 0 1 1 0 0 1 2 0z" fill="#FFF"/></g><g><path d="M26 21a5 5 0 1 1-10.001-.001A5 5 0 0 1 26 21z" fill="#444"/><path d="M25 21a4 4 0 1 1-8 0 4 4 0 0 1 8 0z" fill="#CCC"/><path d="M23 21a2 2 0 1 1-3.999.001A2 2 0 0 1 23 21z" fill="#FFF"/></g></symbol><symbol viewBox="0 0 60 60" id="iD-restriction" xmlns="http://www.w3.org/2000/svg"><path d="M30 14.5c-8.56 0-15.5 6.94-15.5 15.5 0 8.56 6.94 15.5 15.5 15.5 8.56 0 15.5-6.94 15.5-15.5 0-8.56-6.94-15.5-15.5-15.5zm0 4c6.351 0 11.5 5.149 11.5 11.5 0 2.454-.784 4.726-2.094 6.594l-16-16A11.454 11.454 0 0 1 30 18.5zm-9.406 4.906l16 16A11.454 11.454 0 0 1 30 41.5c-6.351 0-11.5-5.149-11.5-11.5 0-2.454.784-4.726 2.094-6.594z" fill="#E06D5F"/></symbol><symbol viewBox="0 0 60 60" id="iD-restriction-no-left-turn" xmlns="http://www.w3.org/2000/svg"><path d="M20 17l-10 9 10 9v-6h5.5L20 23.5V17zm6.531 6L38 34.469V31l-2-4-2-2-4-2h-3.469zM32 35.5v5.312c1.354-.282 2.611-.854 3.75-1.562L32 35.5z" fill="#989898"/><path d="M30 15c-3.388 0-6.49 1.14-9 3.031v5.063l16.375 16.375-.5.343A11.937 11.937 0 0 1 30 42c-4.473 0-8.374-2.459-10.438-6.094l-4.437-3.968C16.076 39.309 22.368 45 30 45c8.29 0 15-6.71 15-15s-6.71-15-15-15zm0 3c6.621 0 12 5.379 12 12 0 2.561-.822 4.928-2.188 6.875l-.343.469L22.625 20.5l.5-.344A11.919 11.919 0 0 1 30 18z" fill="#E06D5F"/></symbol><symbol viewBox="0 0 60 60" id="iD-restriction-no-right-turn" xmlns="http://www.w3.org/2000/svg"><path d="M39 17v6H29l-1.656.812L32.531 29H39v6l10-9zm-15.75 9.75L23 27l-2 3v6.312a11 11 0 0 0 6 4.282V31l.25-.25z" fill="#989898"/><path d="M30 15c-8.29 0-15 6.71-15 15s6.71 15 15 15c7.973 0 14.482-6.213 14.969-14.062l-3.813 3.437c-.353.893-.8 1.726-1.343 2.5l-.344.469-16.406-16.406-.438-.438.5-.344A11.919 11.919 0 0 1 30 18c3.08 0 5.874 1.183 8 3.094v-3.75C35.681 15.874 32.952 15 30 15zm-9.469 7.625l.407.406 16 16 .437.438-.5.343A11.937 11.937 0 0 1 30 42c-6.621 0-12-5.379-12-12 0-2.561.822-4.959 2.188-6.906z" fill="#E06D5F"/></symbol><symbol viewBox="0 0 60 60" id="iD-restriction-no-straight-on" xmlns="http://www.w3.org/2000/svg"><path d="M30 15l-9 10h7.531L33 29.469V25h6l-9-10zm-3 15.5v10.094c.953.269 1.96.406 3 .406a9.89 9.89 0 0 0 3-.469V36.5l-6-6z" fill="#989898"/><path d="M28.469 15.063C20.901 15.83 15 22.228 15 30c0 8.29 6.71 15 15 15s15-6.71 15-15c0-7.814-5.966-14.227-13.594-14.937l3.688 4.093C39.163 21.078 42 25.206 42 30c0 2.561-.822 4.928-2.188 6.875l-.343.469-.407-.406L28.125 26H23.906l13.032 13.031.437.438-.5.343A11.937 11.937 0 0 1 30 42c-6.621 0-12-5.379-12-12 0-2.561.822-4.959 2.188-6.906l.343-.469.407.406.25.25 2-2.219-.126-.124-.437-.438.5-.344a11.838 11.838 0 0 1 1.781-1.031l3.688-4.062c-.041.003-.084-.005-.125 0z" fill="#E06D5F"/></symbol><symbol viewBox="0 0 60 60" id="iD-restriction-no-u-turn" xmlns="http://www.w3.org/2000/svg"><path d="M29 22l-2.312 1.156L31.531 28H35l2 2v6h-6l9 10 9-10h-6v-6l-1.281-2.594L41 26l-2-2-4-2zm-6.156 4.344L21 30v6.312c1.343 1.913 3.267 3.408 5.531 4.157L27 40v-9.5z" fill="#989898"/><path d="M30 15c-8.29 0-15 6.71-15 15s6.71 15 15 15c2.307 0 4.486-.54 6.437-1.469l-2.125-2.375c-1.337.523-2.79.844-4.312.844-6.622 0-12-5.379-12-12 0-2.561.822-4.959 2.187-6.906l.344-.469.406.406L32.906 35H36v-1.125L23.062 20.938l-.437-.438.5-.344A11.919 11.919 0 0 1 30 18c4.385 0 8.219 2.359 10.312 5.875l1.5 1.531L44 29.75V35h.125c.552-1.564.875-3.246.875-5 0-8.29-6.71-15-15-15z" fill="#E06D5F"/></symbol><symbol viewBox="0 0 60 60" id="iD-restriction-only-left-turn" xmlns="http://www.w3.org/2000/svg"><path d="M30 14c-8.837 0-16 7.163-16 16s7.163 16 16 16 16-7.163 16-16-7.163-16-16-16zm-2 4v6h6l2 1 3 3 1 2v4.562a10.982 10.982 0 0 1-6 5.657V32l-2-2h-4v6l-6.969-6.281L18 27l10-9z" fill="#58A9ED"/></symbol><symbol viewBox="0 0 60 60" id="iD-restriction-only-right-turn" xmlns="http://www.w3.org/2000/svg"><path d="M30 14c-8.837 0-16 7.163-16 16s7.163 16 16 16 16-7.163 16-16-7.163-16-16-16zm2 4l10 9-3.031 2.719L32 36v-6h-4l-2 2v8.219a10.982 10.982 0 0 1-6-5.657V30l1-2 3-3 2-1h6v-6z" fill="#58A9ED"/></symbol><symbol viewBox="0 0 60 60" id="iD-restriction-only-straight-on" xmlns="http://www.w3.org/2000/svg"><path d="M30 14c-8.837 0-16 7.163-16 16s7.163 16 16 16 16-7.163 16-16-7.163-16-16-16zm0 4l9 10h-6v12.531A9.89 9.89 0 0 1 30 41a11.03 11.03 0 0 1-3-.406V28h-6l9-10z" fill="#58A9ED"/></symbol><symbol viewBox="0 0 60 60" id="iD-restriction-only-u-turn" xmlns="http://www.w3.org/2000/svg"><path d="M46 30c0-8.837-7.163-16-16-16s-16 7.163-16 16 7.163 16 16 16 16-7.163 16-16zm-3 1.5l-6.949 10.373L28.5 31.5h4.865v-4.998l-1.935-1.807h-3.618L25.5 27v12c-2.5 0-5.171-1.983-5.171-5 0-3-.088-6.13 0-8.128.171-3.872 6.244-6.452 6.244-6.452s3.148-.547 5.783.017c3.136.563 6.195 4.515 6.156 6.435.039 3.08 0 5.628 0 5.628H43z" fill="#58A9ED"/></symbol><symbol viewBox="0 0 60 60" id="iD-route" xmlns="http://www.w3.org/2000/svg"><path d="M36.969 32.469l-2.938 4.062-11-8 2.938-4.062z" fill="#46682F"/><path d="M34.125 32.406l2.75 4.188 12-8-2.75-4.188z" fill="#70372F"/><path d="M11.125 32.419l2.75 4.156 12-8-2.75-4.156z" fill="#2C5476"/><path d="M36.375 33.281l-1.75 2.438-11-8 1.75-2.438z" fill="#8CD05F"/><path d="M34.656 33.25l1.688 2.5 12-8-1.688-2.5z" fill="#E06D5F"/><path d="M11.656 33.263l1.688 2.5 12-8-1.688-2.5z" fill="#58A9ED"/><path d="M50 26.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0z" fill="#70372F"/><path d="M15 34.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0z" fill="#2C5476"/><path d="M27 26.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0z" fill="#395E53"/><path d="M38 34.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0z" fill="#5B502F"/><path d="M49 26.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 49 26.5zM37 34.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 37 34.5zM26 26.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 26 26.5zM14 34.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 14 34.5z" fill="#FFF"/></symbol><symbol viewBox="0 0 60 60" id="iD-route-bicycle" xmlns="http://www.w3.org/2000/svg"><path d="M36.969 45.469l-2.938 4.062-11-8 2.938-4.062z" fill="#46682F"/><path d="M34.125 45.406l2.75 4.188 12-8-2.75-4.188z" fill="#70372F"/><path d="M11.125 45.419l2.75 4.156 12-8-2.75-4.156z" fill="#2C5476"/><path d="M36.375 46.281l-1.75 2.438-11-8 1.75-2.438z" fill="#8CD05F"/><path d="M34.656 46.25l1.688 2.5 12-8-1.688-2.5z" fill="#E06D5F"/><path d="M11.656 46.263l1.688 2.5 12-8-1.688-2.5z" fill="#58A9ED"/><path d="M50 39.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0z" fill="#70372F"/><path d="M15 47.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0z" fill="#2C5476"/><path d="M27 39.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0z" fill="#395E53"/><path d="M38 47.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0z" fill="#5B502F"/><path d="M49 39.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 49 39.5zM37 47.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 37 47.5zM26 39.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 26 39.5zM14 47.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 14 47.5z" fill="#FFF"/><path d="M22.589 11v2h.844l.562 3h-2.5l-5.5 10v1l1 1h11l7.563-9.469L39.495 27h1.5v-1l-6-13h3v-1l-1-1h-4v2l1.406 3h-8.343l-.563-3h2.094v-1l-1-1h-4zm-.094 7h2l2 8h-8.5l4.5-8zm4 0h7l-5.5 6.5-1.5-6.5zm-9 2a6.5 6.5 0 1 0 6 9h-2.25a4.473 4.473 0 0 1-3.75 2 4.5 4.5 0 0 1-4.5-4.5c0-2.324 1.77-4.199 4.031-4.438l1.125-2.031a6.45 6.45 0 0 0-.656-.031zm21.844 0l.937 2.094c2.111.372 3.719 2.189 3.719 4.406a4.5 4.5 0 0 1-9 0c0-1.374.623-2.581 1.594-3.406l-.875-1.875A6.495 6.495 0 0 0 39.495 33a6.5 6.5 0 1 0 0-13h-.156zm-17.656 1.531l-1 1.781c.466.467.805 1.054 1.031 1.688h2.094a6.535 6.535 0 0 0-2.125-3.469z" fill="currentColor"/></symbol><symbol viewBox="0 0 60 60" id="iD-route-bus" xmlns="http://www.w3.org/2000/svg"><path d="M36.969 45.469l-2.938 4.062-11-8 2.938-4.062z" fill="#46682F"/><path d="M34.125 45.406l2.75 4.188 12-8-2.75-4.188z" fill="#70372F"/><path d="M11.125 45.419l2.75 4.156 12-8-2.75-4.156z" fill="#2C5476"/><path d="M36.375 46.281l-1.75 2.438-11-8 1.75-2.438z" fill="#8CD05F"/><path d="M34.656 46.25l1.688 2.5 12-8-1.688-2.5z" fill="#E06D5F"/><path d="M11.656 46.263l1.688 2.5 12-8-1.688-2.5z" fill="#58A9ED"/><path d="M50 39.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0z" fill="#70372F"/><path d="M15 47.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0z" fill="#2C5476"/><path d="M27 39.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0z" fill="#395E53"/><path d="M38 47.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0z" fill="#5B502F"/><path d="M49 39.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 49 39.5zM37 47.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 37 47.5zM26 39.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 26 39.5zM14 47.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 14 47.5z" fill="#FFF"/><path d="M24.167 8c-2.273 0-5 1.239-5 4.577V28s0 1.667 1.666 1.667v1.666S20.833 33 22.5 33s1.667-1.667 1.667-1.667v-1.666h11.666v1.666S35.833 33 37.5 33s1.667-1.667 1.667-1.667v-1.666s1.666 0 1.666-1.667V12.577c0-3.409-2.06-4.577-4.332-4.577H24.167zm.416 2.5h10.834a.416.416 0 1 1 0 .833H24.583a.414.414 0 0 1-.416-.416c0-.231.185-.417.416-.417zM22.5 13h15c1.667 0 1.667 1.611 1.667 1.611v5.056s0 1.666-1.667 1.666h-15c-1.667 0-1.667-1.666-1.667-1.666v-5S20.833 13 22.5 13zm0 11.667a1.667 1.667 0 1 1 0 3.334 1.667 1.667 0 0 1 0-3.334zm15 0a1.667 1.667 0 1 1 0 3.334 1.667 1.667 0 0 1 0-3.334z" fill="#989898"/></symbol><symbol viewBox="0 0 60 60" id="iD-route-detour" xmlns="http://www.w3.org/2000/svg"><path d="M36.969 45.469l-2.938 4.062-11-8 2.938-4.062z" fill="#46682F"/><path d="M34.125 45.406l2.75 4.188 12-8-2.75-4.188z" fill="#70372F"/><path d="M11.125 45.419l2.75 4.156 12-8-2.75-4.156z" fill="#2C5476"/><path d="M36.375 46.281l-1.75 2.438-11-8 1.75-2.438z" fill="#8CD05F"/><path d="M34.656 46.25l1.688 2.5 12-8-1.688-2.5z" fill="#E06D5F"/><path d="M11.656 46.263l1.688 2.5 12-8-1.688-2.5z" fill="#58A9ED"/><path d="M50 39.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0z" fill="#70372F"/><path d="M15 47.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0z" fill="#2C5476"/><path d="M27 39.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0z" fill="#395E53"/><path d="M38 47.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0z" fill="#5B502F"/><path d="M49 39.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 49 39.5zM37 47.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 37 47.5zM26 39.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 26 39.5zM14 47.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 14 47.5z" fill="#FFF"/><path d="M17 14l-2 2v15l2 2h28l2-2V16l-2-2H17" fill="#FC6C14"/><path d="M34 19.5l5 4-5 4V25H23v-3h11"/><path d="M17 16.013v15h28v-15H17zm1 1h26v13H18v-13z"/></symbol><symbol viewBox="0 0 60 60" id="iD-route-ferry" xmlns="http://www.w3.org/2000/svg"><path d="M36.969 45.469l-2.938 4.062-11-8 2.938-4.062z" fill="#46682F"/><path d="M34.125 45.406l2.75 4.188 12-8-2.75-4.188z" fill="#70372F"/><path d="M11.125 45.419l2.75 4.156 12-8-2.75-4.156z" fill="#2C5476"/><path d="M36.375 46.281l-1.75 2.438-11-8 1.75-2.438z" fill="#8CD05F"/><path d="M34.656 46.25l1.688 2.5 12-8-1.688-2.5z" fill="#E06D5F"/><path d="M11.656 46.263l1.688 2.5 12-8-1.688-2.5z" fill="#58A9ED"/><path d="M50 39.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0z" fill="#70372F"/><path d="M15 47.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0z" fill="#2C5476"/><path d="M27 39.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0z" fill="#395E53"/><path d="M38 47.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0z" fill="#5B502F"/><path d="M49 39.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 49 39.5zM37 47.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 37 47.5zM26 39.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 26 39.5zM14 47.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 14 47.5z" fill="#FFF"/><path d="M25.666 26.974a5.991 5.991 0 0 1 3.695 1.339l.519.459h.1l.619-.559a5.773 5.773 0 0 1 6.871-.36l4.514-8.868-2.996-1.997v-7.09a3.077 3.077 0 0 0-2.996-2.897h-.999a1.878 1.878 0 0 0-1.997-1.997h-5.992a1.877 1.877 0 0 0-1.997 1.997h-.999a3.077 3.077 0 0 0-2.996 2.897v7.09l-2.996 1.997 4.494 9.048a5.855 5.855 0 0 1 3.156-1.059zM23.009 9.898a.938.938 0 0 1 .999-.899h11.984a.94.94 0 0 1 .999.998v5.992L30 11.995l-6.991 3.894V9.898zm19.973 21.071v1.997a2.001 2.001 0 0 0-1.358.679 4.294 4.294 0 0 1-1.997 1.199 3.815 3.815 0 0 1-3.535-.739l-.779-.699a1.557 1.557 0 0 0-2.197 0c-.28.239-.539.499-.839.739a3.836 3.836 0 0 1-4.953-.14l-.779-.699c-.572-.5-1.426-.5-1.998 0-.379.3-.719.639-1.098.939a3.816 3.816 0 0 1-4.694-.12l-.619-.539a1.878 1.878 0 0 0-1.118-.62v-1.997a2.515 2.515 0 0 1 1.498.28c.555.344 1.083.731 1.577 1.158.41.447 1.028.637 1.618.499a1.85 1.85 0 0 0 .619-.319c.32-.24.58-.519.899-.779a3.835 3.835 0 0 1 4.894 0c.319.26.619.559.938.819.572.5 1.426.5 1.998 0 .319-.26.619-.559.938-.819a3.836 3.836 0 0 1 4.914 0c.299.26.579.539.878.779.573.5 1.426.5 1.998 0l.939-.819a3.573 3.573 0 0 1 2.256-.799z" fill="currentColor"/></symbol><symbol viewBox="0 0 60 60" id="iD-route-foot" xmlns="http://www.w3.org/2000/svg"><path d="M36.969 45.469l-2.938 4.062-11-8 2.938-4.062z" fill="#46682F"/><path d="M34.125 45.406l2.75 4.188 12-8-2.75-4.188z" fill="#70372F"/><path d="M11 45.419l2.75 4.156 12-8L23 37.419z" fill="#2C5476"/><path d="M36.375 46.281l-1.75 2.438-11-8 1.75-2.438z" fill="#8CD05F"/><path d="M34.656 46.25l1.688 2.5 12-8-1.688-2.5z" fill="#E06D5F"/><path d="M11.656 46.263l1.688 2.5 12-8-1.688-2.5z" fill="#58A9ED"/><path d="M50 39.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0z" fill="#70372F"/><path d="M15 47.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0z" fill="#2C5476"/><path d="M27 39.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0z" fill="#395E53"/><path d="M38 47.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0z" fill="#5B502F"/><path d="M49 39.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 49 39.5zM37 47.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 37 47.5zM26 39.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 26 39.5zM14 47.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 14 47.5z" fill="#FFF"/><path d="M32 12.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0zM27 16h1.5l8.5 6.5V24h-1l-5-3.875V24l2 4 2 5-1 1h-1l-2-5-4-6v-4.656L24.5 20.5l-2 3.5H21v-1l1.5-3 4.5-4zm.844 10.406L25.531 34H24.5l-1-1 2.812-8.438z" fill="currentColor"/></symbol><symbol viewBox="0 0 60 60" id="iD-route-horse" xmlns="http://www.w3.org/2000/svg"><path d="M36.969 45.469l-2.938 4.062-11-8 2.938-4.062z" fill="#46682F"/><path d="M34.125 45.406l2.75 4.188 12-8-2.75-4.188z" fill="#70372F"/><path d="M11.125 45.419l2.75 4.156 12-8-2.75-4.156z" fill="#2C5476"/><path d="M36.375 46.281l-1.75 2.438-11-8 1.75-2.438z" fill="#8CD05F"/><path d="M34.656 46.25l1.688 2.5 12-8-1.688-2.5z" fill="#E06D5F"/><path d="M11.656 46.263l1.688 2.5 12-8-1.688-2.5z" fill="#58A9ED"/><path d="M50 39.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0z" fill="#70372F"/><path d="M15 47.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0z" fill="#2C5476"/><path d="M27 39.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0z" fill="#395E53"/><path d="M38 47.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0z" fill="#5B502F"/><path d="M49 39.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 49 39.5zM37 47.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 37 47.5zM26 39.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 26 39.5zM14 47.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 14 47.5z" fill="#FFF"/><path d="M27.5 5a2.5 2.5 0 1 0 0 5 2.5 2.5 0 0 0 0-5zM41 8.156L38 12l-4.281 5H31l-1-.344V12c0-.554-.446-1-1-1h-3c-.554 0-1 .446-1 1v4h-6l-4 4-1 6h2l1-2 1-3 1-1.344v3.5L17 27.5V33c0 1 0 2 1.5 2s1.5-1 1.5-2v-5.5l1.156-2.5H23v2.5l2.5 6c.251.935.905 1.5 1.75 1.5.809 0 1.096-.876.75-2l-2-5.5v-2.312L29 26h4v7c0 .5 0 2 1.5 2s1.5-1.5 1.5-2v-7l5-9h2l2 1 1-1v-2l-4-3h-1zM25 17h3l3 3v4l-1 1-1-1v-3l-4-3z" fill="currentColor"/></symbol><symbol viewBox="0 0 60 60" id="iD-route-light-rail" xmlns="http://www.w3.org/2000/svg"><path d="M36.969 45.469l-2.938 4.062-11-8 2.938-4.062z" fill="#46682F"/><path d="M34.125 45.406l2.75 4.188 12-8-2.75-4.188z" fill="#70372F"/><path d="M11.125 45.419l2.75 4.156 12-8-2.75-4.156z" fill="#2C5476"/><path d="M36.375 46.281l-1.75 2.438-11-8 1.75-2.438z" fill="#8CD05F"/><path d="M34.656 46.25l1.688 2.5 12-8-1.688-2.5z" fill="#E06D5F"/><path d="M11.656 46.263l1.688 2.5 12-8-1.688-2.5z" fill="#58A9ED"/><path d="M50 39.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0z" fill="#70372F"/><path d="M15 47.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0z" fill="#2C5476"/><path d="M27 39.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0z" fill="#395E53"/><path d="M38 47.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0z" fill="#5B502F"/><path d="M49 39.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 49 39.5zM37 47.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 37 47.5zM26 39.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 26 39.5zM14 47.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 14 47.5z" fill="#FFF"/><g fill="#989898"><path d="M22.5 31h3.333L25 32.488h10L34.167 31H37.5l2.5 4.464h-3.333l-.834-1.488H24.167l-.834 1.488H20L22.5 31zM25.111 9L19 14.727v13.364L21.444 30h17.112L41 28.091V14.727L34.889 9h-9.778zm0 .955h9.778v1.909h-9.778V9.955zm-2.444 4.772h14.666l1.223.955V19.5H21.444v-3.818l1.223-.955zm-1.223 9.546h3.667l2.445 1.909v.954h-4.889l-1.223-.954v-1.909zm13.445 0h3.667v1.909l-1.223.954h-4.889v-.954l2.445-1.909zM25 5v1h4v2h2V6h4V5z"/></g></symbol><symbol viewBox="0 0 60 60" id="iD-route-line" xmlns="http://www.w3.org/2000/svg"><path d="M36.969 45.469l-2.938 4.062-11-8 2.938-4.062z" fill="#46682F"/><path d="M34.125 45.406l2.75 4.188 12-8-2.75-4.188z" fill="#70372F"/><path d="M11.125 45.419l2.75 4.156 12-8-2.75-4.156z" fill="#2C5476"/><path d="M36.375 46.281l-1.75 2.438-11-8 1.75-2.438z" fill="#8CD05F"/><path d="M34.656 46.25l1.688 2.5 12-8-1.688-2.5z" fill="#E06D5F"/><path d="M11.656 46.263l1.688 2.5 12-8-1.688-2.5z" fill="#58A9ED"/><path d="M50 39.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0z" fill="#70372F"/><path d="M15 47.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0z" fill="#2C5476"/><path d="M27 39.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0z" fill="#395E53"/><path d="M38 47.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0z" fill="#5B502F"/><path d="M49 39.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 49 39.5zM37 47.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 37 47.5zM26 39.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 26 39.5zM14 47.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 14 47.5z" fill="#FFF"/><path d="M22 31l3-11 3-11h4l3 11 3 11z" fill="#989898"/></symbol><symbol viewBox="0 0 60 60" id="iD-route-master" xmlns="http://www.w3.org/2000/svg"><path d="M36.969 45.469l-2.938 4.062-11-8 2.938-4.062z" fill="#46682F"/><path d="M34.125 45.406l2.75 4.188 12-8-2.75-4.188z" fill="#70372F"/><path d="M11.125 45.419l2.75 4.156 12-8-2.75-4.156z" fill="#2C5476"/><path d="M36.375 46.281l-1.75 2.438-11-8 1.75-2.438z" fill="#8CD05F"/><path d="M34.656 46.25l1.688 2.5 12-8-1.688-2.5z" fill="#E06D5F"/><path d="M11.656 46.263l1.688 2.5 12-8-1.688-2.5z" fill="#58A9ED"/><path d="M50 39.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0z" fill="#70372F"/><path d="M15 47.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0z" fill="#2C5476"/><path d="M27 39.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0z" fill="#395E53"/><path d="M38 47.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0z" fill="#5B502F"/><path d="M49 39.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 49 39.5zM37 47.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 37 47.5zM26 39.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 26 39.5zM14 47.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 14 47.5z" fill="#FFF"/><g><path d="M36.969 31.469l-2.938 4.062-11-8 2.938-4.062z" fill="#46682F"/><path d="M34.125 31.406l2.75 4.188 12-8-2.75-4.188z" fill="#70372F"/><path d="M11.125 31.419l2.75 4.156 12-8-2.75-4.156z" fill="#2C5476"/><path d="M36.375 32.281l-1.75 2.438-11-8 1.75-2.438z" fill="#8CD05F"/><path d="M34.656 32.25l1.688 2.5 12-8-1.688-2.5z" fill="#E06D5F"/><path d="M11.656 32.263l1.688 2.5 12-8-1.688-2.5z" fill="#58A9ED"/><path d="M50 25.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0z" fill="#70372F"/><path d="M15 33.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0z" fill="#2C5476"/><path d="M27 25.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0z" fill="#395E53"/><path d="M38 33.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0z" fill="#5B502F"/><path d="M49 25.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 49 25.5zM37 33.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 37 33.5zM26 25.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 26 25.5zM14 33.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 14 33.5z" fill="#FFF"/></g><g><path d="M36.969 17.469l-2.938 4.062-11-8 2.938-4.062z" fill="#46682F"/><path d="M34.125 17.406l2.75 4.188 12-8-2.75-4.188z" fill="#70372F"/><path d="M11.125 17.419l2.75 4.156 12-8-2.75-4.156z" fill="#2C5476"/><path d="M36.375 18.281l-1.75 2.438-11-8 1.75-2.438z" fill="#8CD05F"/><path d="M34.656 18.25l1.688 2.5 12-8-1.688-2.5z" fill="#E06D5F"/><path d="M11.656 18.263l1.688 2.5 12-8-1.688-2.5z" fill="#58A9ED"/><path d="M50 11.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0z" fill="#70372F"/><path d="M15 19.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0z" fill="#2C5476"/><path d="M27 11.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0z" fill="#395E53"/><path d="M38 19.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0z" fill="#5B502F"/><path d="M49 11.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 49 11.5zM37 19.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 37 19.5zM26 11.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 26 11.5zM14 19.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 14 19.5z" fill="#FFF"/></g></symbol><symbol viewBox="0 0 60 60" id="iD-route-pipeline" xmlns="http://www.w3.org/2000/svg"><path d="M36.969 45.469l-2.938 4.062-11-8 2.938-4.062z" fill="#46682F"/><path d="M34.125 45.406l2.75 4.188 12-8-2.75-4.188z" fill="#70372F"/><path d="M11.125 45.419l2.75 4.156 12-8-2.75-4.156z" fill="#2C5476"/><path d="M36.375 46.281l-1.75 2.438-11-8 1.75-2.438z" fill="#8CD05F"/><path d="M34.656 46.25l1.688 2.5 12-8-1.688-2.5z" fill="#E06D5F"/><path d="M11.656 46.263l1.688 2.5 12-8-1.688-2.5z" fill="#58A9ED"/><path d="M50 39.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0z" fill="#70372F"/><path d="M15 47.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0z" fill="#2C5476"/><path d="M27 39.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0z" fill="#395E53"/><path d="M38 47.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0z" fill="#5B502F"/><path d="M49 39.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 49 39.5zM37 47.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 37 47.5zM26 39.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 26 39.5zM14 47.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 14 47.5z" fill="#FFF"/><g><path d="M15.5 13c-1.381 0-2.5 2.239-2.5 5s1.119 5 2.5 5H26V13H15.5zM30 13v10h14.5V13H30z" fill="#B5B5B5"/><path d="M47 18c0 2.761-1.119 5-2.5 5S42 20.761 42 18s1.119-5 2.5-5 2.5 2.239 2.5 5z" fill="#989898"/><path d="M27 10v14l-2 10h2l1.594-8h4.812L35 34h2l-2-10h-6V10h-2zm6 0v2h2v-2h-2zm-12 3c-1 0-2.5 2.239-2.5 5s1.5 5 2.5 5h2c-1.381 0-3-2.239-3-5s1.619-5 3-5h-2zm15 0c-1 0-2.5 2.239-2.5 5s1.5 5 2.5 5h2c-1.381 0-3-2.239-3-5s1.619-5 3-5h-2zm8.5 0c-1.381 0-2.5 2.239-2.5 5s1.119 5 2.5 5 2.5-2.239 2.5-5-1.119-5-2.5-5z" fill="#989898"/></g></symbol><symbol viewBox="0 0 60 60" id="iD-route-piste" xmlns="http://www.w3.org/2000/svg"><path d="M36.969 45.469l-2.938 4.062-11-8 2.938-4.062z" fill="#46682F"/><path d="M34.125 45.406l2.75 4.188 12-8-2.75-4.188z" fill="#70372F"/><path d="M11.125 45.419l2.75 4.156 12-8-2.75-4.156z" fill="#2C5476"/><path d="M36.375 46.281l-1.75 2.438-11-8 1.75-2.438z" fill="#8CD05F"/><path d="M34.656 46.25l1.688 2.5 12-8-1.688-2.5z" fill="#E06D5F"/><path d="M11.656 46.263l1.688 2.5 12-8-1.688-2.5z" fill="#58A9ED"/><path d="M50 39.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0z" fill="#70372F"/><path d="M15 47.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0z" fill="#2C5476"/><path d="M27 39.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0z" fill="#395E53"/><path d="M38 47.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0z" fill="#5B502F"/><path d="M49 39.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 49 39.5zM37 47.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 37 47.5zM26 39.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 26 39.5zM14 47.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 14 47.5z" fill="#FFF"/><path d="M41.884 18.834a2.417 2.417 0 1 1-4.834 0 2.417 2.417 0 0 1 4.834 0zm-2.062 11.908a.404.404 0 0 0-.532-.178 4.333 4.333 0 0 1-3.674.403l-10.2-5.108 4.383-2.191v-4.834l2.417 1.209v4.833l2.417 1.209 2.417-1.209-2.417-1.208v-7.251L29.799 14l-2.417 1.209v7.251l-4.383 2.191-4.302-2.143a.404.404 0 1 0-.354.725l16.919 8.459a3.822 3.822 0 0 0 1.611.307 6.198 6.198 0 0 0 2.771-.709.404.404 0 0 0 .182-.541l-.004-.007z" fill="currentColor"/></symbol><symbol viewBox="0 0 60 60" id="iD-route-power" xmlns="http://www.w3.org/2000/svg"><path d="M36.969 45.469l-2.938 4.062-11-8 2.938-4.062z" fill="#46682F"/><path d="M34.125 45.406l2.75 4.188 12-8-2.75-4.188z" fill="#70372F"/><path d="M11.125 45.419l2.75 4.156 12-8-2.75-4.156z" fill="#2C5476"/><path d="M36.375 46.281l-1.75 2.438-11-8 1.75-2.438z" fill="#8CD05F"/><path d="M34.656 46.25l1.688 2.5 12-8-1.688-2.5z" fill="#E06D5F"/><path d="M11.656 46.263l1.688 2.5 12-8-1.688-2.5z" fill="#58A9ED"/><path d="M50 39.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0z" fill="#70372F"/><path d="M15 47.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0z" fill="#2C5476"/><path d="M27 39.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0z" fill="#395E53"/><path d="M38 47.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0z" fill="#5B502F"/><path d="M49 39.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 49 39.5zM37 47.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 37 47.5zM26 39.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 26 39.5zM14 47.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 14 47.5z" fill="#FFF"/><path d="M20 8v1h2V8h-2zm4 0v1h2V8h-2zm10 0v1h2V8h-2zm4 0v1h2V8h-2zm-17.688 5c-.665 3.533-3.045 5.5-5.312 5.5h-1v1h1a5.462 5.462 0 0 0 3-.906v.906h1c2.879 0 5.615-2.478 6.312-6.5h-1c-.665 3.533-3.045 5.5-5.312 5.5h-.875c1.561-1.08 2.76-2.991 3.187-5.5h-1zm14.376 0c.697 4.022 3.433 6.5 6.312 6.5h1v-.906a5.462 5.462 0 0 0 3 .906h1v-1h-1c-2.267 0-4.647-1.967-5.312-5.5h-1c.427 2.509 1.626 4.42 3.187 5.5H41c-2.267 0-4.647-1.967-5.312-5.5h-1z" fill="#989898"/><path d="M28 8v2h-9v2h9v22h4V12h9v-2h-9V8h-4z" fill="#B5B5B5"/></symbol><symbol viewBox="0 0 60 60" id="iD-route-road" xmlns="http://www.w3.org/2000/svg"><path d="M36.969 45.469l-2.938 4.062-11-8 2.938-4.062z" fill="#46682F"/><path d="M34.125 45.406l2.75 4.188 12-8-2.75-4.188z" fill="#70372F"/><path d="M11.125 45.419l2.75 4.156 12-8-2.75-4.156z" fill="#2C5476"/><path d="M36.375 46.281l-1.75 2.438-11-8 1.75-2.438z" fill="#8CD05F"/><path d="M34.656 46.25l1.688 2.5 12-8-1.688-2.5z" fill="#E06D5F"/><path d="M11.656 46.263l1.688 2.5 12-8-1.688-2.5z" fill="#58A9ED"/><path d="M50 39.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0z" fill="#70372F"/><path d="M15 47.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0z" fill="#2C5476"/><path d="M27 39.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0z" fill="#395E53"/><path d="M38 47.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0z" fill="#5B502F"/><path d="M49 39.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 49 39.5zM37 47.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 37 47.5zM26 39.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 26 39.5zM14 47.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 14 47.5z" fill="#FFF"/><path d="M22.5 12l-2.875 6H18l-1 1v2h1.406L18 22v6l1 1h5l2 1h8l2-1h5l1-1v-6l-.406-1H43v-2l-1-1h-1.625L37.5 12zm1 3h13l1.5 4-1 1H23l-1-1zM21 23h3l1 2v1h-4l-1-1v-1zm15 0h3l1 1v1l-1 1h-4v-1zm-17 7v2l1 1h3l1-1v-2zm17 0v2l1 1h3l1-1v-2z" fill="#989898"/></symbol><symbol viewBox="0 0 60 60" id="iD-route-subway" xmlns="http://www.w3.org/2000/svg"><path d="M36.969 45.469l-2.938 4.062-11-8 2.938-4.062z" fill="#46682F"/><path d="M34.125 45.406l2.75 4.188 12-8-2.75-4.188z" fill="#70372F"/><path d="M11.125 45.419l2.75 4.156 12-8-2.75-4.156z" fill="#2C5476"/><path d="M36.375 46.281l-1.75 2.438-11-8 1.75-2.438z" fill="#8CD05F"/><path d="M34.656 46.25l1.688 2.5 12-8-1.688-2.5z" fill="#E06D5F"/><path d="M11.656 46.263l1.688 2.5 12-8-1.688-2.5z" fill="#58A9ED"/><path d="M50 39.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0z" fill="#70372F"/><path d="M15 47.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0z" fill="#2C5476"/><path d="M27 39.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0z" fill="#395E53"/><path d="M38 47.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0z" fill="#5B502F"/><path d="M49 39.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 49 39.5zM37 47.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 37 47.5zM26 39.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 26 39.5zM14 47.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 14 47.5z" fill="#FFF"/><g><path d="M22.5 31h3.333L25 32.488h10L34.167 31H37.5l2.5 4.464h-3.333l-.834-1.488H24.167l-.834 1.488H20L22.5 31zM25 8l-6 5.739v14.348L21 30h18l2-1.913V13.739L35 8H25zm1 1.913h8v1.913h-8V9.913zm-4 3.826h16l1 .957v3.826l-3 1.913H24l-3-1.913v-3.826l1-.957zm-1 10.522h3l2 1.913v.957h-4l-1-.957v-1.913zm15 0h3v1.913l-1 .957h-4v-.957l2-1.913z" fill="#989898"/><path d="M23 3c-5 0-9 3-9 9v20l3-1V12c0-4 3-6 6-6h14c3 0 6 2 6 6v19l3 1V12c0-6-4.068-8.178-9-9h-8z" fill="#B5B5B5"/></g></symbol><symbol viewBox="0 0 60 60" id="iD-route-train" xmlns="http://www.w3.org/2000/svg"><path d="M36.969 45.469l-2.938 4.062-11-8 2.938-4.062z" fill="#46682F"/><path d="M34.125 45.406l2.75 4.188 12-8-2.75-4.188z" fill="#70372F"/><path d="M11.125 45.419l2.75 4.156 12-8-2.75-4.156z" fill="#2C5476"/><path d="M36.375 46.281l-1.75 2.438-11-8 1.75-2.438z" fill="#8CD05F"/><path d="M34.656 46.25l1.688 2.5 12-8-1.688-2.5z" fill="#E06D5F"/><path d="M11.656 46.263l1.688 2.5 12-8-1.688-2.5z" fill="#58A9ED"/><path d="M50 39.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0z" fill="#70372F"/><path d="M15 47.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0z" fill="#2C5476"/><path d="M27 39.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0z" fill="#395E53"/><path d="M38 47.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0z" fill="#5B502F"/><path d="M49 39.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 49 39.5zM37 47.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 37 47.5zM26 39.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 26 39.5zM14 47.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 14 47.5z" fill="#FFF"/><path d="M23.5 11L22 12l-.469 2H18.25c-.554 0-.866.463-1 1L17 16c-.134.537.446 1 1 1h24c.554 0 1.134-.463 1-1l-.25-1c-.134-.537-.446-1-1-1h-2.781l-.469-2-1.5-1-1 1 .469 2H24.031l.469-2-1-1zm-2 4a.5.5 0 1 1 0 1 .5.5 0 0 1 0-1zm17 0a.5.5 0 1 1 0 1 .5.5 0 0 1 0-1zm-17.938 3l-.468 2H17.25c-.554 0-.866.463-1 1L16 22c-.134.537.446 1 1 1h26c.554 0 1.134-.463 1-1l-.25-1c-.134-.537-.446-1-1-1h-2.344l-.468-2h-2.5l.468 2H22.594l.468-2h-2.5zm-.062 3a.5.5 0 1 1 0 1 .5.5 0 0 1 0-1zm19 0a.5.5 0 1 1 0 1 .5.5 0 0 1 0-1zm-20.344 3l-.468 2H16.25c-.554 0-.866.463-1 1L15 28c-.134.537.446 1 1 1h28c.554 0 1.134-.463 1-1l-.25-1c-.134-.537-.446-1-1-1h-1.938l-.468-2h-2.5l.468 2H21.188l.468-2h-2.5zm.344 3a.5.5 0 1 1 0 1 .5.5 0 0 1 0-1zm21 0a.5.5 0 1 1 0 1 .5.5 0 0 1 0-1zm-22.781 3L17 33l1.5 1 1-1 .719-3h-2.5zm22.562 0L41 33l1 1 1.5-1-.719-3h-2.5z" fill="#989898"/></symbol><symbol viewBox="0 0 60 60" id="iD-route-tram" xmlns="http://www.w3.org/2000/svg"><path d="M35.969 47.469l-2.938 4.062-11-8 2.938-4.062z" fill="#46682F"/><path d="M33.125 47.406l2.75 4.188 12-8-2.75-4.188z" fill="#70372F"/><path d="M10.125 47.419l2.75 4.156 12-8-2.75-4.156z" fill="#2C5476"/><path d="M35.375 48.281l-1.75 2.438-11-8 1.75-2.438z" fill="#8CD05F"/><path d="M33.656 48.25l1.688 2.5 12-8-1.688-2.5z" fill="#E06D5F"/><path d="M10.656 48.263l1.688 2.5 12-8-1.688-2.5z" fill="#58A9ED"/><path d="M49 41.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0z" fill="#70372F"/><path d="M14 49.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0z" fill="#2C5476"/><path d="M26 41.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0z" fill="#395E53"/><path d="M37 49.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0z" fill="#5B502F"/><path d="M48 41.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 48 41.5zM36 49.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 36 49.5zM25 41.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 25 41.5zM13 49.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 13 49.5z" fill="#FFF"/><g><path d="M34.031 34L35 36l1 1 1.5-1-.969-2zM23.5 34l-.969 2-1 1-1.5-1L21 34zM25 11l-5 6v14l2 2h14l2-2V17l-5-6h-8zm0 1h8v2h-8v-2zm-2 5h12l1 1v4H22v-4l1-1zm-1 10h3l2 2v1h-4l-1-1v-2zm11 0h3v2l-1 1h-4v-1l2-2z" fill="#989898"/><path d="M24 7v1h4v2h2V8h4V7z" fill="#B5B5B5"/></g></symbol><symbol viewBox="0 0 60 60" id="iD-route-water" xmlns="http://www.w3.org/2000/svg"><path d="M36.969 45.469l-2.938 4.062-11-8 2.938-4.062z" fill="#46682F"/><path d="M34.125 45.406l2.75 4.188 12-8-2.75-4.188z" fill="#70372F"/><path d="M11.125 45.419l2.75 4.156 12-8-2.75-4.156z" fill="#2C5476"/><path d="M36.375 46.281l-1.75 2.438-11-8 1.75-2.438z" fill="#8CD05F"/><path d="M34.656 46.25l1.688 2.5 12-8-1.688-2.5z" fill="#E06D5F"/><path d="M11.656 46.263l1.688 2.5 12-8-1.688-2.5z" fill="#58A9ED"/><path d="M50 39.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0z" fill="#70372F"/><path d="M15 47.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0z" fill="#2C5476"/><path d="M27 39.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0z" fill="#395E53"/><path d="M38 47.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0z" fill="#5B502F"/><path d="M49 39.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 49 39.5zM37 47.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 37 47.5zM26 39.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 26 39.5zM14 47.5a1.5 1.5 0 1 1-3.001-.001A1.5 1.5 0 0 1 14 47.5z" fill="#FFF"/><path d="M18.007 23.759c-.214.8-.82 1.333-1.354 1.19-.533-.143-.792-.908-.578-1.708.215-.8.821-1.333 1.355-1.19.533.143.792.908.577 1.708zM19.84 13.75c.553-.957.419-2.068-.299-2.482-.717-.414-1.746.025-2.299.982-.552.957-.418 2.068.299 2.482.718.414 1.747-.025 2.299-.982zm21.624 3.958c-.215-.8.044-1.565.577-1.708.534-.143 1.14.39 1.355 1.19.214.8-.045 1.565-.578 1.708-.534.143-1.14-.39-1.354-1.19zM44.34 28.75c-.552-.957-.418-2.068.299-2.482.718-.414 1.747.025 2.299.982.553.957.419 2.068-.299 2.482-.717.414-1.746-.025-2.299-.982z" fill="currentColor" opacity=".5"/><path d="M16.803 32s-.536-1.846-.345-2.75c.221-1.047 1.655-2.75 1.655-2.75s1.433-1.703 1.654-2.75c.192-.904-.345-2.75-.345-2.75s-.536-1.846-.345-2.75c.221-1.047 1.655-2.75 1.655-2.75s1.433-1.703 1.654-2.75c.192-.904-.345-2.75-.345-2.75h16.5s1.434 1.703 1.655 2.75c.191.904-.345 2.75-.345 2.75s-.537 1.846-.345 2.75C39.727 19.297 41.16 21 41.16 21s1.434 1.703 1.655 2.75c.191.904-.345 2.75-.345 2.75s-.537 1.846-.345 2.75c.221 1.047 1.654 2.75 1.654 2.75z" fill="currentColor"/></symbol><symbol viewBox="0 0 44 24" id="iD-turn-no" xmlns="http://www.w3.org/2000/svg"><path d="M44 12c0-2-1.15-3.29-2-4L33.581.969c-1.512-1.28-4.003-1.179-5.406.219l-1 1A4.048 4.048 0 0 0 25.987 5h-4.375c-2.187-2.987-5.671-5-9.625-5C5.407 0 0 5.42 0 12s5.407 12 11.987 12c3.969 0 7.471-1.993 9.656-5h4.344c0 1.055.438 2.102 1.188 2.844l1 1c1.403 1.397 3.894 1.498 5.406.218L42 16c.921-.772 2-2 2-4z" opacity=".5"/><path d="M40 12l-9.013-8-1 1v4H19.393c-1.192-2.92-4.057-5-7.406-5C7.569 4 4 7.582 4 12s3.569 8 7.987 8a8.006 8.006 0 0 0 7.438-5h10.562v4l1 1z" fill="#E06D5F"/><path d="M14 8v8l-1 1h-2l-1-1V8l1-1h2z" opacity=".5"/></symbol><symbol viewBox="0 0 32 32" id="iD-turn-no-u" xmlns="http://www.w3.org/2000/svg"><path d="M0 16C0 7.211 7.211 0 16 0s16 7.211 16 16-7.211 16-16 16S0 24.789 0 16z" opacity=".5"/><path d="M4 16C4 9.373 9.373 4 16 4s12 5.373 12 12-5.373 12-12 12S4 22.627 4 16z" fill="#E06D5F"/><path d="M9.138 20.5l5-5 2-2 4-4h1l1 1v1l-4 4-2 2-5 5h-1l-1-1v-1zm.875-6.5l1-2 1-1 2-1H18.2l-2.781 2.781L15.2 13h-1.187l-1 1v1.188l-2.594 2.593-.406-.781v-3zm4.031 7l2.781-2.781.188-.219 1.594-1.562 3.406 3.062-5 4.5v-3h-2.969z" opacity=".5"/></symbol><symbol viewBox="0 0 44 24" id="iD-turn-only" xmlns="http://www.w3.org/2000/svg"><path d="M44 12c0-2-1.15-3.29-2-4L33.581.969c-1.512-1.28-4.003-1.179-5.406.219l-1 1A4.048 4.048 0 0 0 25.987 5h-4.375c-2.187-2.987-5.671-5-9.625-5C5.407 0 0 5.42 0 12s5.407 12 11.987 12c3.969 0 7.471-1.993 9.656-5h4.344c0 1.055.438 2.102 1.188 2.844l1 1c1.403 1.397 3.894 1.498 5.406.218L42 16c.921-.772 2-2 2-4z" opacity=".5"/><path d="M40 12l-9.013-8-1 1v4H19.393c-1.192-2.92-4.057-5-7.406-5C7.569 4 4 7.582 4 12s3.569 8 7.987 8a8.006 8.006 0 0 0 7.438-5h10.562v4l1 1z" fill="#7092FF"/><path d="M14.997 12.015a3 3 0 1 1-6 0 3 3 0 0 1 6 0z" opacity=".5"/></symbol><symbol viewBox="0 0 32 32" id="iD-turn-only-u" xmlns="http://www.w3.org/2000/svg"><path d="M16 0C7.211 0 0 7.211 0 16s7.211 16 16 16 16-7.211 16-16S24.789 0 16 0z" opacity=".5"/><path d="M4 16C4 9.373 9.373 4 16 4s12 5.373 12 12-5.373 12-12 12S4 22.627 4 16z" fill="#7092FF"/><path d="M17 24v-3h-3l-2-1-1-1-1-2v-3l1-2 1-1 2-1h5l1 1v1l-1 1h-5l-1 1v3l1 1h3v-3l5 4.5z" opacity=".5"/></symbol><symbol viewBox="0 0 37 11" id="iD-turn-shadow" xmlns="http://www.w3.org/2000/svg"><path d="M31.5 0a5.5 5.5 0 0 1 0 11h-26a5.5 5.5 0 1 1 0-11h26z" fill="currentColor"/><path d="M6 6h26" stroke="#000" stroke-width="3" stroke-linecap="round" fill="none"/><path d="M6 6h26" stroke="#FFF" stroke-width="2" stroke-linecap="round" fill="none"/><path d="M7.5 5.5a2 2 0 1 1-3.999.001A2 2 0 0 1 7.5 5.5z"/><path d="M7 5.5a1.5 1.5 0 1 1-3 0 1.5 1.5 0 0 1 3 0z" fill="#BBB"/><path d="M33.5 5.5a2 2 0 1 1-3.999.001A2 2 0 0 1 33.5 5.5z"/><path d="M33 5.5a1.5 1.5 0 1 1-3 0 1.5 1.5 0 0 1 3 0z" fill="#BBB"/></symbol><symbol viewBox="0 0 44 24" id="iD-turn-yes" xmlns="http://www.w3.org/2000/svg"><path d="M44 12c0-2-1.15-3.29-2-4L33.581.969c-1.512-1.28-4.003-1.179-5.406.219l-1 1A4.048 4.048 0 0 0 25.987 5h-4.375c-2.187-2.987-5.671-5-9.625-5C5.407 0 0 5.42 0 12s5.407 12 11.987 12c3.969 0 7.471-1.993 9.656-5h4.344c0 1.055.438 2.102 1.188 2.844l1 1c1.403 1.397 3.894 1.498 5.406.218L42 16c.921-.772 2-2 2-4z" opacity=".5"/><path d="M40 12l-9.013-8-1 1v4H19.393c-1.192-2.92-4.057-5-7.406-5C7.569 4 4 7.582 4 12s3.569 8 7.987 8a8.006 8.006 0 0 0 7.438-5h10.562v4l1 1z" fill="#8CD05F"/><path d="M14.997 12.015a3 3 0 1 1-6 0 3 3 0 0 1 6 0z" opacity=".5"/></symbol><symbol viewBox="0 0 32 32" id="iD-turn-yes-u" xmlns="http://www.w3.org/2000/svg"><path d="M16 0C7.211 0 0 7.211 0 16s7.211 16 16 16 16-7.211 16-16S24.789 0 16 0z" opacity=".5"/><path d="M4 16C4 9.373 9.373 4 16 4s12 5.373 12 12-5.373 12-12 12S4 22.627 4 16z" fill="#8CD05F"/><path d="M17 24v-3h-3l-2-1-1-1-1-2v-3l1-2 1-1 2-1h5l1 1v1l-1 1h-5l-1 1v3l1 1h3v-3l5 4.5z" opacity=".5"/></symbol><symbol viewBox="0 0 60 60" id="iD-walkthrough-mouse" xmlns="http://www.w3.org/2000/svg"><path d="M29.5 12v15H41c0-10-4-15-11.5-15z" fill="currentColor"/><path d="M29.5 12v15H18c0-10 5-15 11.5-15z" fill="inherit"/><path d="M29.5 11C36.404 11 42 16.596 42 23.5v18C42 48.404 36.404 54 29.5 54S17 48.404 17 41.5v-18C17 16.596 22.596 11 29.5 11zM19 28v13.5C19 47.299 23.701 52 29.5 52S40 47.299 40 41.5V28H19zm11.573-14.946l-.073-.004V26H40v-2.5c-.177-5.881-3.925-9.324-9.427-10.446zM19 26h9.5V13.05c-5.512.765-9.221 4.921-9.5 10.45V26z" fill="#000001"/></symbol><symbol viewBox="5 0 50 50" id="iD-waterway-canal" xmlns="http://www.w3.org/2000/svg"><path d="M22 14s.535 1.846.344 2.75c-.222 1.047-1.656 2.75-1.656 2.75s-1.435 1.703-1.657 2.75c-.191.904.344 2.75.344 2.75s.535 1.846.344 2.75c-.222 1.047-1.656 2.75-1.656 2.75s-1.435 1.703-1.657 2.75c-.191.904.344 2.75.344 2.75h27s-1.435-1.703-1.656-2.75c-.191-.904.344-2.75.344-2.75s.534-1.846.343-2.75C42.56 26.703 41.125 25 41.125 25s-1.435-1.703-1.656-2.75c-.191-.904.344-2.75.344-2.75s.534-1.846.343-2.75C39.935 15.703 38.5 14 38.5 14zm6 2h4l2 2 2 12-4 2h-4l-4-2 2-12zm4.2 8l.8 4h-6l.8-4zm-.6-3l.4 2h-4l.4-2zm-.6-3l.4 2h-2.8l.4-2z" fill="currentColor"/></symbol><symbol viewBox="5 0 50 50" id="iD-waterway-ditch" xmlns="http://www.w3.org/2000/svg"><path d="M24.762 36L29 14h2.5l4.238 22z" fill="currentColor"/><path d="M26 14l-4.25 22h2L28 14h-2zm6.5 0l4.25 22h2L34.5 14h-2z" fill="#B5B5B5"/></symbol><symbol viewBox="5 0 50 50" id="iD-waterway-river" xmlns="http://www.w3.org/2000/svg"><path d="M16.762 36s-.536-1.846-.345-2.75c.221-1.047 1.654-2.75 1.654-2.75s1.434-1.703 1.655-2.75c.191-.904-.345-2.75-.345-2.75s-.536-1.846-.345-2.75c.221-1.047 1.655-2.75 1.655-2.75s1.433-1.703 1.654-2.75C22.536 15.846 22 14 22 14h16.5s1.433 1.703 1.655 2.75c.191.904-.345 2.75-.345 2.75s-.537 1.846-.346 2.75c.222 1.047 1.655 2.75 1.655 2.75s1.434 1.703 1.655 2.75c.191.904-.345 2.75-.345 2.75s-.537 1.846-.346 2.75c.222 1.047 1.655 2.75 1.655 2.75z" fill="currentColor"/><path d="M17.966 27.759c-.214.8-.821 1.333-1.354 1.19-.534-.143-.792-.908-.578-1.708.214-.8.821-1.333 1.354-1.19.534.143.792.908.578 1.708zm1.833-10.009c.552-.957.418-2.068-.299-2.482-.717-.414-1.747.025-2.299.982-.552.957-.418 2.068.299 2.482.717.414 1.747-.025 2.299-.982zm21.623 3.958c-.214-.8.045-1.565.578-1.708.534-.143 1.14.39 1.354 1.19.215.8-.044 1.565-.577 1.708-.534.143-1.14-.39-1.355-1.19zm2.877 11.042c-.552-.957-.418-2.068.299-2.482.718-.414 1.747.025 2.299.982.552.957.419 2.068-.299 2.482-.717.414-1.747-.025-2.299-.982z" fill="currentColor" opacity=".5"/></symbol><symbol viewBox="5 0 50 50" id="iD-waterway-stream" xmlns="http://www.w3.org/2000/svg"><path d="M22.762 36s-.536-1.846-.345-2.75c.221-1.047 1.654-2.75 1.654-2.75s1.434-1.703 1.655-2.75c.191-.904-.345-2.75-.345-2.75s-.536-1.846-.345-2.75c.221-1.047 1.655-2.75 1.655-2.75s1.433-1.703 1.654-2.75C28.536 15.846 28 14 28 14h4.5s1.433 1.703 1.655 2.75c.191.904-.345 2.75-.345 2.75s-.537 1.846-.346 2.75c.222 1.047 1.655 2.75 1.655 2.75s1.434 1.703 1.655 2.75c.191.904-.345 2.75-.345 2.75s-.537 1.846-.346 2.75c.222 1.047 1.655 2.75 1.655 2.75z" fill="currentColor"/><path d="M23.966 27.759c-.214.8-.821 1.333-1.354 1.19-.534-.143-.792-.908-.578-1.708.214-.8.821-1.333 1.354-1.19.534.143.792.908.578 1.708zm1.833-10.009c.552-.957.418-2.068-.299-2.482-.717-.414-1.747.025-2.299.982-.552.957-.418 2.068.299 2.482.717.414 1.747-.025 2.299-.982zm9.623 3.958c-.214-.8.045-1.565.578-1.708.534-.143 1.14.39 1.354 1.19.215.8-.044 1.565-.577 1.708-.534.143-1.14-.39-1.355-1.19zm2.877 11.042c-.552-.957-.418-2.068.299-2.482.718-.414 1.747.025 2.299.982.552.957.419 2.068-.299 2.482-.717.414-1.747-.025-2.299-.982z" fill="currentColor" opacity=".5"/></symbol></svg>
\ No newline at end of file
index a729e989e2f0953269f5c06a51b206c57eabd1be..dadf5a39323ca9617af97bd197a4a6b5c2689e6f 100644 (file)
             "title": "Wys waar ek is"
         },
         "inspector": {
-            "no_documentation_combination": "Daar is geen dokumentasie beskikbaar vir hierdie kenmerk kombinasie nie",
-            "no_documentation_key": "Daar is geen dokumentasie beskikbaar vir hierdie sleutel nie",
             "show_more": "Wys meer",
             "view_on_osm": "Kyk daarna op openstreetmap.org",
             "choose": "Kies funksie tipe",
             "results": "{n} resultate vir {search}",
-            "reference": "Kyk daarna op OpenStreetMap Wiki",
             "remove": "Verwyder"
         },
         "background": {
             "on_wiki": "{tag} op wiki.osm.org",
             "used_with": "gebruik met {type}"
         },
-        "validations": {
-            "untagged_point": "Punt sonder eienskappe",
-            "untagged_line": "Lyn het geen kenmerk",
-            "untagged_area": "Area het geen kenmerk",
-            "tag_suggests_area": "Die kenmerk {tag} is geoormerk vir 'n area nie vir 'n lyn nie.",
-            "deprecated_tags": "Vervalde kenmerke: {tags}"
-        },
         "cannot_zoom": "Kan nie verder uitzoom in die huidige mode nie.",
         "help": {
             "title": "Help"
                     "label": "Tipe"
                 },
                 "website": {
-                    "label": "Webwerf",
-                    "placeholder": "http://voorbeeld.co.za/"
+                    "label": "Webwerf"
                 },
                 "wetland": {
                     "label": "Tipe"
index ec7ba391266ad9c6fde207f36b47a18e0b52af21..43e4e07568620bc75a953ccc4ec5fd247b9f2f41 100644 (file)
             "title": "أظهر مكاني"
         },
         "inspector": {
-            "no_documentation_combination": "لا توجد وثائق متاحة لهذه المجموعة من العلامات",
-            "no_documentation_key": "لا توجد وثائق متاحة لهذه الكلمة",
             "view_on_osm": "openstreetmap.org شاهد على",
             "choose": "حدد نوع الميزة",
-            "results": "{n} نتائج {search}",
-            "reference": "OpenStreetMap شاهد على ويكي"
+            "results": "{n} نتائج {search}"
         },
         "background": {
             "title": "الخلفية",
index d560b3857197db2cc3338039339bfa7848220db2..a713f50f41a7a615240885c548c2c28f132b3e9a 100644 (file)
@@ -50,7 +50,7 @@
                     "point": "تم إضافة نقطة.",
                     "vertex": "تم إضافة نقطة إلى طريق.",
                     "relation": "تم إضافة علاقة.",
-                    "note": "تÙ\85 Ø¥Ø¶Ø§Ù\81Ø© ملاحظة."
+                    "note": "Ø£Ù\8fضÙ\8aÙ\81ت ملاحظة."
                 }
             },
             "start": {
@@ -60,7 +60,7 @@
                 }
             },
             "continue": {
-                "key": "Ù\85",
+                "key": "Ù\83",
                 "title": "إكمال",
                 "description": "إكمال هذا الخط.",
                 "not_eligible": "لا يوجد خط يمكن إكماله هنا.",
         },
         "restriction": {
             "controls": {
-                "distance": "مسافة",
-                "distance_up_to": "يصل إلى {distance}"
+                "distance": "المسافة",
+                "distance_up_to": "تصل إلى {distance}",
+                "via": "عبر",
+                "via_node_only": "العُقدة فقط",
+                "via_up_to_one": "حتى طريق واحد",
+                "via_up_to_two": "حتى طريقان"
             },
             "help": {
+                "indirect": "(غير مباشر)",
+                "turn": {
+                    "no_left_turn": "ممنوع الانعطاف لليسار {indirect}",
+                    "no_right_turn": "ممنوع الانعطاف لليمين {indirect}",
+                    "no_u_turn": "ممنوع الدوران للخلف {indirect}",
+                    "no_straight_on": "ممنوع الاستمرار إلى الأمام {indirect}",
+                    "only_left_turn": "انعطاف لليسار فقط {indirect}",
+                    "only_right_turn": "انعطاف لليمين فقط {indirect}",
+                    "only_u_turn": "دوران للخلف فقط {indirect}",
+                    "only_straight_on": "فقط الاستمرار إلى الأمام {indirect}",
+                    "allowed_left_turn": "مسموح بالانعطاف لليسار {indirect}",
+                    "allowed_right_turn": "مسموح بالانعطاف لليمين {indirect}",
+                    "allowed_u_turn": "مسموح بالدوران للخلف {indirect}",
+                    "allowed_straight_on": "مسموح بالاستمرار للأمام {indirect}"
+                },
                 "from": "من",
-                "to": "إلى"
+                "via": "عبر",
+                "to": "إلى",
+                "from_name": "{from} {fromName}",
+                "from_name_to_name": "{from} {fromName} {to} {toName}",
+                "via_names": "{via} {viaNames}",
+                "select_from": "انقر للاختيار {from} الأجزاء",
+                "select_from_name": "انقر للاختيار {from} {fromName}",
+                "toggle": "انقر لـ \"{turn}\""
             }
         },
         "undo": {
         },
         "inspector": {
             "zoom_to": {
+                "key": "ك",
                 "title": "تكبير إلى ذلك"
             },
-            "no_documentation_combination": "لا يوجد توثيقا لهذا الجمع من الوسوم",
-            "no_documentation_key": "لا يوجد توثيق لهذا المفتاح",
             "show_more": "عرض المزيد",
             "view_on_osm": "عرض على openstreetmap.org",
+            "view_on_keepRight": "عرض على keepright.at",
             "all_fields": "كل الحقول",
             "all_tags": "كل الوسوم",
             "all_members": "كل اﻷعضاء",
             "role": "القاعدة",
             "choose": "اختر نوع العنصر",
             "results": "{n} نتيجة لـ {search}",
-            "reference": "العرض على ويكي OpenStreetMap",
+            "edit_reference": "تعديل/ترجمة",
+            "wiki_reference": "عرض الوثائق",
+            "wiki_en_reference": "عرض الوثائق بالإنجليزية",
             "back_tooltip": "تغيير العنصر",
             "remove": "إزالة",
             "search": "بحث",
             "minimap": {
                 "description": "عرض خريطة مصغّرة",
                 "tooltip": "عرض الخريطة من بعيد للمساعدة في تحديد المنطقة المعروضة حاليا.",
-                "key": "/"
+                "key": "\\"
             },
             "fix_misalignment": "ضبط إزاحة الصور",
             "offset": "اسحب أي مكان في المنطقة الرمادية أدناه لضبط إزاحة الصورة، أو أدخل قيم الإزاحة بالمتر."
                 "tooltip": "خطوط الكهرباء، محطات الطاقة، محطات توليد الكهرباء، الخ"
             },
             "past_future": {
-                "description": "ماضي/مستقبل",
                 "tooltip": "مقترح، مبني، مهجور، مهدوم، الخ"
             },
             "others": {
-                "description": "أخرى",
+                "description": "عÙ\86اصر Ø£Ø®Ø±Ù\89",
                 "tooltip": "كل شيء آخر"
             }
         },
             "wireframe": {
                 "description": "بدون ملء (خطوط رفيعة)",
                 "tooltip": "تفعيل نمط الخطوط الرفيعة يجعل من السهل عليك رؤية الخلفية بوضوح تام.",
-                "key": "Ø®"
+                "key": "ر"
             },
             "partial": {
                 "description": "ملء جزئي",
             "on_wiki": "{tag} في wiki.osm.org",
             "used_with": "يُستخدم مع {type}"
         },
-        "validations": {
-            "disconnected_highway": "طريق سريع غير متصل",
-            "disconnected_highway_tooltip": "يجب وصل الطرق بالطرق الآخرى أو بمداخل الأبنية.",
-            "untagged_point": "نقطة غير موسومة",
-            "untagged_point_tooltip": "اختر نوع العنصر الذي يصف هذه النقطة.",
-            "untagged_line": "خط غير موسوم",
-            "untagged_line_tooltip": "اختر نوع العنصر الذي يصف هذا الخط.",
-            "untagged_area": "منطقة غير موسومة",
-            "untagged_area_tooltip": "اختر نوع العنصر التي يصف هذه المساحة.",
-            "untagged_relation": "علاقة غير موسومة",
-            "untagged_relation_tooltip": "اختر نوع العنصر الذي يصف ما هية هذه العلاقة.",
-            "many_deletions": "لقد قمت بحذف {n} من العناصر:  {p} من النقاط, {l} من الخطوط, {a} من المساحات, {r} من العلاقات.\nهل أنت متأكد من رغبتك في فعل ذلك؟. سيؤدي ذلك إلى حذفها من الخريطة التي يراها الجميع على openstreetmap.org.",
-            "tag_suggests_area": "الوسم {tag} يقترح بأن الخط يجب أن يكون منطقة، ولكنها حاليا ليست منطقة",
-            "deprecated_tags": "وسوم مهجورة: {tags}"
-        },
         "zoom": {
             "in": "تكبير",
             "out": "تصغير"
                 "title": "المساحات",
                 "intro": "يمكن أن ُتستخدم *المساحات* لعرض الحدود لبعض العناصر كالبحيرات، والمباني، والمناطق السكنية. المساحات يجب أن تتبع حافة العنصر الذي يمثلها، على سبيل المثلال حول قاعدة المبنى.",
                 "point_or_area_h": "نقاط أو مساحات؟",
-                "point_or_area": "يُمكن تمثيل الكثير من العناصر كنقاط أو مساحات. ولكن ينبغي رسم الحدود الخارجية للأبنية والمنشآت كمساحات قدر الإمكان. وضع النقاط داخل مساحة المبنى لتمثيل الشركات والمكاتب والعناصر الأخرى المتواجدة داخل هذا المبنى، ",
+                "point_or_area": "يُمكن تمثيل الكثير من العناصر كنقاط أو مساحات. ولكن ينبغي رسم الحدود الخارجية للأبنية والمنشآت كمساحات قدر الإمكان. ويمكن وضع النقاط داخل مساحة المبنى لتمثيل الشركات والمكاتب والعناصر الأخرى المتواجدة داخل هذا المبنى.",
                 "add_area_h": "إضافة المساحات",
-                "add_area_command": "لإضافة مساحة، انقر على زرّ {area} **مساحة** في شريط الأدوات أعلى الخريطة، أو اضغط مفتاح الاختصار `3` على لوحة المفاتيح. وسيؤدي ذلك لتغيير مؤشر الفأرة لرمز الصليب.",
+                "add_area_command": "لإضافة مساحة، انقر على زرّ {area} **مساحة** في شريط الأدوات أعلى الخريطة، أو اضغط مفتاح الاختصار `3` على لوحة المفاتيح. وسيؤدي ذلك لتغيير رمز مؤشر الفأرة إلى رمز الصليب.",
                 "add_area_draw": "بعد ذلك، ضع مؤشر الفأرة في أحد أركان العنصر المراد رسمه ثم انقر بزرّ الفأرة الأيسر {leftclick} أو اضغط مفتاح المسافة `Space` على لوحة المفاتيح لتبدأ بوضع النقاط المكونة للحواف الخارجية من المساحة. واستمر بوضع المزيد من النقاط عن طريق النقر الأيسر بالفأرة أو الضغط على المسافة `Space`. كما يمكنك تكبير وتصغير وسحب الخريطة أثناء الرسم لتتمكن من إضافة المزيد من التفاصيل.",
                 "add_area_finish": "لإنهاء رسم مساحة، اضغط على مفتاح الإدخال `{return}` أو انقر مرة أخرى على أول نقطة أو آخر نقطة مكونة للرسم.",
                 "square_area_h": "تربيع الأركان",
                 "relation_types_h": "أنواع العلاقات",
                 "multipolygon_h": "المضلعات المتداخلة",
                 "multipolygon": "علاقة *المضلع المتداخل* هي عبارة عن مجموعة مكونة من واحد أو أكثر من العناصر *الخارجية* مع واحد أو أكثر من العناصر الداخلية. فالعناصر الخارجية تعبّر عن الحواف الخارجية من المضلع المتداخل، والعناصر الداخلية تعبّر عن المساحات والفجوات داخل المضلع المتداخل.",
-                "multipolygon_create": "Ù\84Ø¥Ù\86شاء Ù\85ضÙ\84ع Ù\85تداخÙ\84Ø\8c Ø¹Ù\84Ù\89 Ø³Ø¨Ù\8aÙ\84 Ø§Ù\84Ù\85ثاÙ\84 Ù\85بÙ\86Ù\89 Ø¨Ù\87 Ù\81جÙ\88Ø© Ø¨Ø¯Ø§Ø®Ù\84Ù\87Ø\8c Ø§Ø±Ø³Ù\85 Ø§Ù\84Ø­Ù\88اÙ\81 Ø§Ù\84خارجÙ\8aØ© Ù\84Ù\84Ù\85بÙ\86Ù\89 Ù\83Ù\85ساحة Ù\88اÙ\84Ø­Ù\88اÙ\81 Ø§Ù\84داخÙ\84Ù\8aØ© Ù\83خط Ø£Ù\88 Ù\85ساحة Ø£Ø®Ø±Ù\89. Ø«Ù\85 Ø§Ø¶ØºØ· `{shift}`+{leftclick} Ù\88حدد Ù\83Ù\84ا Ø§Ù\84عÙ\86صرÙ\8aÙ\86Ø\8c Ø«Ù\85 Ø§Ø¶ØºØ·  {rightclick} لعرض قائمة التحرير، واختر أمر  {merge} **دمج**",
+                "multipolygon_create": "Ù\84Ø¥Ù\86شاء Ù\85ضÙ\84ع Ù\85تداخÙ\84Ø\8c Ø¹Ù\84Ù\89 Ø³Ø¨Ù\8aÙ\84 Ø§Ù\84Ù\85ثاÙ\84 Ù\85بÙ\86Ù\89 Ø¨Ù\87 Ù\81جÙ\88Ø© Ø¨Ø¯Ø§Ø®Ù\84Ù\87Ø\8c Ø§Ø±Ø³Ù\85 Ø§Ù\84Ø­Ù\88اÙ\81 Ø§Ù\84خارجÙ\8aØ© Ù\84Ù\84Ù\85بÙ\86Ù\89 Ù\83Ù\85ساحة Ù\88اÙ\84Ø­Ù\88اÙ\81 Ø§Ù\84داخÙ\84Ù\8aØ© Ù\83خط Ø£Ù\88 Ù\85ساحة Ø£Ø®Ø±Ù\89. Ø«Ù\85 Ø§Ø¶ØºØ· `{shift}`+{leftclick} Ù\86Ù\82رة Ù\8aسرÙ\89 Ù\88حدد Ù\83Ù\84ا Ø§Ù\84عÙ\86صرÙ\8aÙ\86Ø\8c Ø«Ù\85 Ø§Ù\86Ù\82ر  {rightclick} Ù\86Ù\82رة Ù\8aÙ\85Ù\86Ù\89 لعرض قائمة التحرير، واختر أمر  {merge} **دمج**",
                 "multipolygon_merge": "دمج عدة خطوط أو مساحات سيعمل على إنشاء علاقة مضلع متداخل جديدة مع اعتبار أن المساحات المختارة عبارة عن أعضاء. وسيقوم محرر iD بتميير العنصر الداخلي من الخارجي آليا، بناء على أي العناصر متواجدة داخل العناصر الأخرى.",
                 "turn_restriction_h": "قيود الإنعطاف",
-                "boundary_h": "الحدود"
+                "turn_restriction": "علاقة *قيود المنعطفات* هي عبارة عن مجموعة من أجزاء الطريق المتعددة المتقاطعة مع بعضها البعض. قيود الانعطاف تحتوي على *\"من\"* الطريق، و*\"عبر\"* عقدة التقاطع أو الطرق، و*\"إلى\"* الطريق.",
+                "turn_restriction_field": "لتعديل قيود الانعطاف، اختر عُقدة تقاطع وهي النقطة التي يلتقي فيها طريقان أو أكثر. سيعرض لك مُحرر العناصر حقل خاص بـ\"قيود الانعطاف\" يحتوي على نموذج واضح للتقاطع.",
+                "turn_restriction_editing": "في حقل \"قيود الانعطاف\"، انقر لاختيار طريق \"من\"، لمعرفة ما إذا كان الانعطاف مسموحا أو محظورا \"إلى\" أي من الطرق التي يؤدي إليها.\nيمكنك النقر على أيقونات الانعطاف للتبديل بين وضع السماح والحظر، وسيعمل محرر iD على إنشاء العلاقات آليا وتعيين قواعد \"من\"، و\"عبر\"، و\"إلى\" بناءً على اختياراتك.",
+                "route_h": "المسارات",
+                "route": "علاقة *المسار* هي عبارة عن مجموعة من عناصر الخطوط التي تكون مع بعضها شبكة من الخطوط أو الطرق، مثل مسار الحافلة، أو مسار القطار أو مسار الطريق السريع.",
+                "route_add": "لإضافة عنصر إلى علاقة مسار، اختر العنصر ثم مرر لأسفل في محرر العناصر حتى تصل لقسم \"جميع العلاقات\"، ثم انقر على زرّ الإضافة {plus} لإضافة هذا العنصر إلى أقرب علاقة موجودة أو إلى علاقة جديدة.",
+                "boundary_h": "الحدود",
+                "boundary": "علاقة *الحدود* هي عبارة عن مجموعة من عناصر الخطوط التي تكون مع بعضها حدودا إدارية لمساحة أو منطقة ما.",
+                "boundary_add": "لإضافة عنصر إلى علاقة الحدود، اختر العنصر ثم مرر لأسفل في محرر العناصر حتى تصل لقسم \"جميع العلاقات\"، ثم انقر على زرّ الإضافة {plus} لإضافة هذا العنصر إلى أقرب علاقة موجودة أو إلى علاقة جديدة."
             },
             "notes": {
                 "title": "الملاحظات",
                 "offset_change": "انقر على الأسهم الصغيرة لضبط إزاحة الصورة بقيمة صغيرة عند كل نقرة، أو ضع مؤشر الفأرة على المستطيل الرمادي واضغط بزر الفأرة الأيسر {leftclick} مع الاستمرار على الضغطة، ثم اسحب لتحريك صورة الخلفية إلى الإزاحة المطلوبة."
             },
             "streetlevel": {
-                "title": "صور مستوى الشارع"
+                "title": "صور مستوى الشارع",
+                "using_h": "استخدام صور مستوى الشارع"
             },
             "gps": {
                 "title": "تتبعات الجي بي إس",
                 "category-building": {
                     "name": "عناصر المباني"
                 },
-                "category-golf": {
-                    "name": "عناصر الغولف"
-                },
                 "category-landuse": {
                     "name": "عناصر الأراضي"
                 },
                 "category-route": {
                     "name": "عناصر المسارات"
                 },
+                "category-utility": {
+                    "name": "عناصر الخدمات"
+                },
                 "category-water-area": {
                     "name": "عناصر المياه"
                 },
                         "underground": "تحت الأرض"
                     }
                 },
-                "passenger_information_display": {
-                    "label": "شاشة معلومات المسافرين"
-                },
                 "payment_multi": {
                     "label": "طرق الدفع"
                 },
                 "recycling_accepts": {
                     "label": "يقبل"
                 },
+                "recycling_type": {
+                    "label": "النوع"
+                },
                 "ref": {
                     "label": "الرمز المرجعي"
                 },
                 "restrictions": {
                     "label": "قيود المنعطفات"
                 },
+                "roof/colour": {
+                    "label": "لون السقف"
+                },
                 "rooms": {
                     "label": "الغرف"
                 },
                 "route_master": {
                     "label": "النوع"
                 },
+                "sanitary_dump_station": {
+                    "label": "صرف المرحاض"
+                },
+                "scuba_diving": {
+                    "label": "الخدمات"
+                },
                 "seamark/beacon_lateral/colour": {
                     "label": "اللون",
                     "options": {
                         "yellow": "أصفر"
                     }
                 },
+                "seasonal": {
+                    "label": "موسمي"
+                },
                 "seats": {
                     "label": "المقاعد",
                     "placeholder": "2, 4, 6..."
                 },
                 "second_hand": {
+                    "label": "بيع المستعمل",
                     "options": {
                         "no": "لا",
                         "only": "فقط",
                 "surface": {
                     "label": "سطح"
                 },
+                "surveillance": {
+                    "label": "نوع المراقبة"
+                },
                 "surveillance/type": {
                     "label": "نوع المراقبة",
                     "options": {
                     "label": "النوع"
                 },
                 "website": {
-                    "label": "صفحة الويب",
-                    "placeholder": "http://example.com/"
+                    "label": "صفحة الويب"
                 },
                 "wetland": {
                     "label": "النوع"
                     "terms": "هواء مضغوط"
                 },
                 "amenity/courthouse": {
-                    "name": "دار العدل",
-                    "terms": "مجمع المحاكم, دار العدل, دار القضاء"
+                    "name": "محكمة",
+                    "terms": "مجمع محاكم, دار عدل, دار قضاء"
                 },
                 "amenity/coworking_space": {
                     "name": "مساحة عمل مشتركة"
                     "name": "روضة أطفال",
                     "terms": "روضة أطفال"
                 },
+                "amenity/language_school": {
+                    "name": "مدرسة لغات"
+                },
                 "amenity/library": {
                     "name": "مكتبة",
                     "terms": "مكتبة"
                 },
                 "amenity/marketplace": {
-                    "name": "سوق",
+                    "name": "محل تسوق",
                     "terms": "سوق ,سوق تجارية, ساحة السوق"
                 },
                 "amenity/motorcycle_parking": {
                     "name": "مدخل ومخرج جراج وقوف",
                     "terms": "مدخل, مخرج"
                 },
+                "amenity/parking_space": {
+                    "name": "موقف سيارات"
+                },
                 "amenity/payment_centre": {
                     "name": "مركز دفع نقود"
                 },
                     "name": "معبد بوذي",
                     "terms": "معبد بوذي"
                 },
+                "amenity/place_of_worship/christian": {
+                    "name": "كنيسية مسيحية"
+                },
+                "amenity/place_of_worship/hindu": {
+                    "name": "معبد هندوسي"
+                },
+                "amenity/place_of_worship/jewish": {
+                    "name": "كنيس يهودي"
+                },
+                "amenity/place_of_worship/muslim": {
+                    "name": "مسجد",
+                    "terms": "مسجد,جامع,مصلى,صلاة,مسلم,مسلمين"
+                },
+                "amenity/place_of_worship/shinto": {
+                    "name": "ضريح شنتو"
+                },
+                "amenity/place_of_worship/sikh": {
+                    "name": "معبد السيخ"
+                },
+                "amenity/place_of_worship/taoist": {
+                    "name": "معبد طاوي"
+                },
                 "amenity/planetarium": {
                     "name": "قبة فلكية",
                     "terms": "قبة فلكية، قبة سماوية، بلانتاريوم"
                     "name": "حانة",
                     "terms": "مشرب, حانة, خمارة"
                 },
+                "amenity/public_bath": {
+                    "name": "حمام عام"
+                },
+                "amenity/public_bookcase": {
+                    "name": "خزانة كتب عامة"
+                },
                 "amenity/ranger_station": {
                     "name": "محطة الحراسة",
                     "terms": "محطة الحراسة"
                 },
+                "amenity/recycling": {
+                    "name": "إعادة التدوير"
+                },
                 "amenity/recycling_centre": {
                     "name": "مركز إعادة تدوير",
                     "terms": "مركز إعادة تدوير"
                 },
+                "amenity/recycling_container": {
+                    "name": "حاوية إعادة التدوير"
+                },
                 "amenity/register_office": {
                     "name": "مكتب السجل المدني"
                 },
                     "name": "مطعم",
                     "terms": "مطعم"
                 },
+                "amenity/restaurant/american": {
+                    "name": "مطعم امريكي"
+                },
+                "amenity/restaurant/asian": {
+                    "name": "مطعم آسيوي"
+                },
+                "amenity/restaurant/chinese": {
+                    "name": "مطعم صيني"
+                },
+                "amenity/restaurant/french": {
+                    "name": "مطعم فرنسي"
+                },
+                "amenity/restaurant/german": {
+                    "name": "مطعم ألماني"
+                },
+                "amenity/restaurant/greek": {
+                    "name": "مطعم يوناني"
+                },
+                "amenity/restaurant/indian": {
+                    "name": "مطعم هندي"
+                },
+                "amenity/restaurant/italian": {
+                    "name": "مطعم إيطالي"
+                },
+                "amenity/restaurant/japanese": {
+                    "name": "مطعم ياباني"
+                },
+                "amenity/restaurant/mexican": {
+                    "name": "مطعم مكسيكي"
+                },
+                "amenity/restaurant/noodle": {
+                    "name": "مطعم مكرونة"
+                },
+                "amenity/restaurant/pizza": {
+                    "name": "مطعم بيتزا"
+                },
+                "amenity/restaurant/seafood": {
+                    "name": "مطعم مأكولات بحرية"
+                },
+                "amenity/restaurant/steakhouse": {
+                    "name": "بيت شرائح اللحم"
+                },
+                "amenity/restaurant/sushi": {
+                    "name": "مطعم سوشي"
+                },
+                "amenity/restaurant/thai": {
+                    "name": "مطعم تايلاندي"
+                },
+                "amenity/restaurant/turkish": {
+                    "name": "مطعم تركي"
+                },
+                "amenity/restaurant/vietnamese": {
+                    "name": "مطعم فيتنامي"
+                },
                 "amenity/school": {
                     "name": "أرض مدرسة",
                     "terms": "مدرسة"
                     "name": "مأوى",
                     "terms": "مأوى, ملجأ, ملاذ, سقيفة, وقاء"
                 },
+                "amenity/shower": {
+                    "name": "دش استحمام"
+                },
+                "amenity/smoking_area": {
+                    "name": "منطقة مخصصة للتدخين"
+                },
                 "amenity/social_facility": {
                     "name": "مؤسسة اجتماعية",
                     "terms": "مؤسسة اجتماعية"
                     "name": "مسرح",
                     "terms": "مسرح"
                 },
+                "amenity/theatre/type/amphi": {
+                    "name": "مسرح روماني"
+                },
                 "amenity/toilets": {
                     "name": "دورات مياه",
                     "terms": "دورات مياه, مراحيض"
                     "name": "أرض جامعة",
                     "terms": "أرض جامعة, حرم جامعي"
                 },
+                "amenity/vehicle_inspection": {
+                    "name": "فحص مركبات"
+                },
                 "amenity/vending_machine": {
                     "name": "آلة بيع",
                     "terms": "آلة بيع"
                 },
                 "amenity/vending_machine/cigarettes": {
-                    "name": "Ø¢Ù\84Ø© Ø¨Ù\8aع Ø§Ù\84سجائر",
+                    "name": "آلة بيع سجائر",
                     "terms": "سجائر"
                 },
                 "amenity/vending_machine/coffee": {
-                    "name": "آلة بيع القهوة",
+                    "name": "آلة بيع قهوة",
                     "terms": "قهوة"
                 },
+                "amenity/vending_machine/condoms": {
+                    "name": "آلة بيع واقي ذكري"
+                },
                 "amenity/vending_machine/drinks": {
-                    "name": "آلة بيع المشروبات",
+                    "name": "آلة بيع مشروبات",
                     "terms": "مشروبات"
                 },
+                "amenity/vending_machine/electronics": {
+                    "name": "آلة بيع إلكترونيات"
+                },
+                "amenity/vending_machine/food": {
+                    "name": "آلة بيع مواد غذائية"
+                },
+                "amenity/vending_machine/fuel": {
+                    "name": "مضخة وقود",
+                    "terms": "وقود,غاز,بترول,جاز,سولار"
+                },
+                "amenity/vending_machine/ice_cream": {
+                    "name": "آلة بيع آيس كريم"
+                },
                 "amenity/vending_machine/news_papers": {
-                    "name": "Ø¢Ù\84Ø© Ø¨Ù\8aع Ø§Ù\84جرائد"
+                    "name": "آلة بيع جرائد"
                 },
                 "amenity/vending_machine/newspapers": {
-                    "name": "Ø¢Ù\84Ø© Ø¨Ù\8aع Ø§Ù\84جرائد",
+                    "name": "آلة بيع جرائد",
                     "terms": "جرائد"
                 },
                 "amenity/vending_machine/parking_tickets": {
                     "terms": "ماكينة تذاكر"
                 },
                 "amenity/veterinary": {
-                    "name": "بيطري",
+                    "name": "طبÙ\8aب Ø¨Ù\8aطرÙ\8a",
                     "terms": "بيطري، طبيب حيوانات"
                 },
                 "amenity/waste_basket": {
                     "name": "سلة مهملات",
-                    "terms": "سلة المهملات,سلة القمامة"
+                    "terms": "سلة المهملات,سلة القمامة,قمامة,مهملات"
+                },
+                "amenity/waste_disposal": {
+                    "name": "صندوق قمامة قابل للنقل"
+                },
+                "amenity/waste_transfer_station": {
+                    "name": "محطة نقل النفايات",
+                    "terms": "نفايات,قمامة,مهملات"
                 },
                 "amenity/watering_place": {
                     "name": "مكان شرب للحيوانات"
                 },
                 "building/church": {
                     "name": "مبنى كنيسة",
-                    "terms": "كنيسةمعبد"
+                    "terms": "كنيسة,معبد"
                 },
                 "building/college": {
                     "name": "مبنى كلية",
-                    "terms": "كليةجامعة"
+                    "terms": "كلية,جامعة"
                 },
                 "building/commercial": {
                     "name": "مبني تجاري",
                 },
                 "building/construction": {
                     "name": "مبنى تحت الإنشاء",
-                    "terms": "تحت الانشاء;"
+                    "terms": "تحت الانشاء,"
                 },
                 "building/detached": {
                     "name": "منزل منفصل",
                 "building/entrance": {
                     "name": "مدخل ومخرج"
                 },
+                "building/farm": {
+                    "name": "بيت ريفي",
+                    "terms": "ريف,مزرعة,زرع"
+                },
+                "building/farm_auxiliary": {
+                    "name": "مبنى مزرعة",
+                    "terms": "مزرعة,ريف,"
+                },
                 "building/garage": {
                     "name": "جراج",
                     "terms": "مَرْأب , كراج, تصليح سيارات"
                     "name": "صف منازل",
                     "terms": "صف منازل"
                 },
-                "building/train_station": {
-                    "name": "محطة قطار"
-                },
                 "building/transportation": {
                     "name": "مبنى للنقل العام",
                     "terms": "مبنى للنقل العام"
                     "terms": "مزرعة عنب"
                 },
                 "leisure": {
-                    "name": "الترفيه",
-                    "terms": "الترفيه"
+                    "name": "الترفيه"
                 },
                 "leisure/beach_resort": {
                     "name": "منتجع الشاطئ",
                     "name": "ملعب كرة قدم أمريكية",
                     "terms": "ملعب كرة قدم أمريكية"
                 },
+                "leisure/pitch/badminton": {
+                    "name": "تنس الريشة",
+                    "terms": "تنس,كرة,ريشة"
+                },
                 "leisure/pitch/basketball": {
                     "name": "ملعب كرة السلة",
                     "terms": "ملعب كرة السلة"
                     "name": "حلبة ركوب خيل",
                     "terms": "حلبة; ساحة; حلبة ركوب; ساحة ركوب; خيل; ركوب خيل"
                 },
+                "leisure/pitch/netball": {
+                    "name": "كرة السلة",
+                    "terms": "تنس,كرة,سلة,شبكة"
+                },
                 "leisure/pitch/rugby_league": {
                     "name": "ملعب اتحاد الرغبي",
                     "terms": "ملعب اتحاد الرغبي، رجبي"
                     "terms": "طريق"
                 },
                 "man_made": {
-                    "name": "مباني صناعية",
-                    "terms": "مباني صناعية"
+                    "name": "مباني صناعية"
                 },
                 "man_made/adit": {
                     "name": "مدخل منجم",
                     "terms": "مصنع"
                 },
                 "natural": {
-                    "name": "طبيعي",
-                    "terms": "طبيعي"
+                    "name": "طبيعي"
                 },
                 "natural/bare_rock": {
                     "name": "صخور عارية",
                 "power": {
                     "name": "الطاقة"
                 },
+                "power/cable/underground": {
+                    "name": "كابل كهرباء تحت الأرض"
+                },
                 "power/generator": {
                     "name": "مولد طاقة",
-                    "terms": "مولد الطاقة"
+                    "terms": "مولد الطاقة,طاقة,كهرباء,مولد كهرباء"
+                },
+                "power/generator/method/photovoltaic": {
+                    "name": "لوحة شمسية",
+                    "terms": "لوحات شمسية,طاقة شمسية,طاقة,شمس"
+                },
+                "power/generator/source/nuclear": {
+                    "name": "مفاعل نووي",
+                    "terms": "نووي,مفاعل,طاقة,كهرباء"
+                },
+                "power/generator/source/wind": {
+                    "name": "توربينة رياح",
+                    "terms": "رياح,توليد كهرباء,كهرباء,توربينات,توربينة,توربين,طاقة"
                 },
                 "power/line": {
                     "name": "خط الطاقة",
                     "terms": "محطة توليد الكهرباء، الطاقة الكهربائية"
                 },
                 "power/pole": {
-                    "name": "برج Ù\83Ù\87ربائÙ\8a",
-                    "terms": "برج Ù\83Ù\87ربائÙ\8a"
+                    "name": "برج Ù\83Ù\87رباء",
+                    "terms": "برج Ù\83Ù\87رباء"
                 },
                 "power/sub_station": {
                     "name": "محطة فرعية"
                     "terms": "محطة فرعية"
                 },
                 "power/switch": {
-                    "name": "معدة وصل وفصل",
-                    "terms": "معدة وصل وفصل"
+                    "name": "مفتاح وصل وفصل",
+                    "terms": "معدة وصل وفصل,مفتاح,فصل,وصل"
                 },
                 "power/tower": {
                     "name": "برج عالي الجهد",
                     "name": "محول كهربائي",
                     "terms": "محول الكهربائي"
                 },
-                "public_transport/linear_platform_bus": {
-                    "name": "موقف حافلات",
-                    "terms": "موقف حافلات"
+                "public_transport/platform": {
+                    "name": "محطة/موقف عبور"
+                },
+                "public_transport/platform_aerialway": {
+                    "name": "محطة/موقف طريق جوي"
+                },
+                "public_transport/platform_bus": {
+                    "name": "محطة/موقف حافلة"
+                },
+                "public_transport/platform_ferry": {
+                    "name": "محطة/موقف عبّارة"
+                },
+                "public_transport/platform_light_rail": {
+                    "name": "محطة/موقف سكة حديد خفيفة"
+                },
+                "public_transport/platform_monorail": {
+                    "name": "محطة/موقف سكة حديد أحادية"
                 },
-                "public_transport/linear_platform_train": {
-                    "name": "رصيف سكة حديد",
-                    "terms": "رصيف سكة حديد"
+                "public_transport/platform_subway": {
+                    "name": "محطة/موقف مترو أنفاق"
                 },
                 "public_transport/platform_train": {
-                    "name": "رصيف سكة حديد",
-                    "terms": "رصيف سكة حديد"
+                    "name": "محطة/موقف قطار",
+                    "terms": "رصيف سكة حديد,قطار"
+                },
+                "public_transport/platform_tram": {
+                    "name": "محطة/موقف ترام"
+                },
+                "public_transport/platform_trolleybus": {
+                    "name": "محطة/موقف حافلة كهربائية"
+                },
+                "public_transport/station": {
+                    "name": "محطة عبور (ترانزيت)"
                 },
                 "public_transport/station_aerialway": {
                     "name": "محطة النقل بالكابلات",
                     "name": "محطة الحافلات",
                     "terms": "محطة الحافلات"
                 },
+                "public_transport/station_ferry": {
+                    "name": "محطة عبّارة"
+                },
+                "public_transport/station_light_rail": {
+                    "name": "محطة سكة حديد خفيفة"
+                },
+                "public_transport/station_monorail": {
+                    "name": "محطة سكة حديد أحادية"
+                },
                 "public_transport/station_subway": {
                     "name": "محطة مترو",
                     "terms": "محطة مترو"
                 },
                 "public_transport/station_train": {
-                    "name": "محطة القطار",
+                    "name": "محطة قطار",
                     "terms": "محطة القطار"
                 },
+                "public_transport/station_tram": {
+                    "name": "محطة ترام"
+                },
+                "public_transport/station_trolleybus": {
+                    "name": "محطة حافلة كهربائية"
+                },
+                "public_transport/stop_area": {
+                    "name": "منطقة موقف عبور (ترانزيت)"
+                },
+                "public_transport/stop_position": {
+                    "name": "موقع موقف العبور"
+                },
+                "public_transport/stop_position_aerialway": {
+                    "name": "موقع وقوف طريق جوي"
+                },
+                "public_transport/stop_position_bus": {
+                    "name": "موقع وقوف حافلات"
+                },
+                "public_transport/stop_position_ferry": {
+                    "name": "موقع وقوف عبّارات"
+                },
+                "public_transport/stop_position_light_rail": {
+                    "name": "موقع وقوف سكك حديد خفيفة"
+                },
+                "public_transport/stop_position_monorail": {
+                    "name": "موقع وقوف سكك حديد أحادية"
+                },
+                "public_transport/stop_position_subway": {
+                    "name": "موقع وقوف مترو أنفاق"
+                },
+                "public_transport/stop_position_train": {
+                    "name": "موقف وقوف قطارات"
+                },
+                "public_transport/stop_position_tram": {
+                    "name": "موقع وقوف ترام"
+                },
+                "public_transport/stop_position_trolleybus": {
+                    "name": "موقع وقوف حافلات كهربائية"
+                },
                 "railway": {
                     "name": "سكة حديد"
                 },
                     "terms": "سكة حديد مهجورة"
                 },
                 "railway/buffer_stop": {
-                    "name": "مصد",
-                    "terms": "مصد"
+                    "name": "مصد قطارات",
+                    "terms": "مصد,قطار"
                 },
                 "railway/crossing": {
                     "name": "معبر سكة حديد (مسار)",
-                    "terms": "معبر سكة حديد; معبر"
+                    "terms": "معبر سكة حديد; معبر,مزلقان"
                 },
                 "railway/disused": {
                     "name": "سكة حديدة مهجورة",
                     "name": "مدخل مترو الأنفاق",
                     "terms": "مدخل مترو الأنفاق"
                 },
+                "railway/switch": {
+                    "name": "مفتاح تحويل سكك حديد"
+                },
+                "railway/train_wash": {
+                    "name": "غسيل قطارات"
+                },
                 "railway/tram": {
                     "name": "ترام",
-                    "terms": "ترام"
+                    "terms": "ترام,قطار,مترو,سكك حديد"
                 },
                 "railway/tram_stop": {
                     "name": "موقف ترام"
                     "name": "مسار عبّارة",
                     "terms": "مسار عبّارة, مسار سفن"
                 },
+                "seamark": {
+                    "name": "علامة بحرية"
+                },
                 "shop": {
                     "name": "متجر",
                     "terms": "محل. متجر, دكان"
                     "name": "متجر مستلزمات مزارع"
                 },
                 "shop/alcohol": {
-                    "name": "محل خمور",
-                    "terms": "محل خمور"
+                    "name": "متجر خمور",
+                    "terms": "محل خمور,خمور,متجر خمور"
+                },
+                "shop/anime": {
+                    "name": "متجر أفلام رسوم متحركة"
+                },
+                "shop/antiques": {
+                    "name": "متجر تحف وأنتيكات"
                 },
                 "shop/appliance": {
                     "name": "متجر الأجهزة المنزلية",
                     "name": "محل تجميل",
                     "terms": "محل تجميل"
                 },
+                "shop/beauty/nails": {
+                    "name": "صالون أظافر"
+                },
+                "shop/beauty/tanning": {
+                    "name": "صالون تسمير"
+                },
+                "shop/bed": {
+                    "name": "متجر مراتب ولوازم الفراش"
+                },
                 "shop/beverages": {
                     "name": "محل مشروبات",
                     "terms": "محل مشروبات"
                     "name": "متجر دراجات هوائية",
                     "terms": "محل دراجات هوائية; متجر دراجات; محل دراجات; بائع دراجات"
                 },
+                "shop/bookmaker": {
+                    "name": "مكتب رهانات"
+                },
                 "shop/books": {
                     "name": "متجر كتب",
                     "terms": "مكتبة، كتب"
                     "name": "متجر سجاد",
                     "terms": "متجر سجاد; زرابي"
                 },
+                "shop/charity": {
+                    "name": "متجر خيري"
+                },
                 "shop/cheese": {
                     "name": "متجر أجبان",
                     "terms": "متجر أجبان"
                 },
+                "shop/chemist": {
+                    "name": "متجر أدوات تجميل مستحضرات نظافة"
+                },
                 "shop/chocolate": {
                     "name": "متجر شوكولاتة"
                 },
                     "name": "محل افعلها بنفسك",
                     "terms": "محل افعلها بنفسك"
                 },
+                "shop/dry_cleaning": {
+                    "name": "تنظيف جاف"
+                },
+                "shop/e-cigarette": {
+                    "name": "متجر سجائر إلكترونية"
+                },
                 "shop/electronics": {
                     "name": "محل إلكترونيات",
                     "terms": "محل إلكترونيات"
                     "name": "المنتج",
                     "terms": "المنتج"
                 },
+                "shop/fashion": {
+                    "name": "متجر موضة"
+                },
                 "shop/fishmonger": {
                     "name": "محل بيع أسماك"
                 },
                     "name": "حلاق",
                     "terms": "حلاق, مصفف الشعر"
                 },
+                "shop/hairdresser_supply": {
+                    "name": "متجر مستلزمات حلاقين"
+                },
                 "shop/hardware": {
                     "name": "محل أجهزة",
                     "terms": "محل بيع عتاد"
                 },
+                "shop/health_food": {
+                    "name": "متجر أغذية صحية"
+                },
                 "shop/hearing_aids": {
-                    "name": "Ù\85تجر Ø§Ù\84سÙ\85اعات Ø§Ù\84أذÙ\86 Ø§Ù\84طبÙ\8aØ©",
+                    "name": "متجر سماعات الأذن الطبية",
                     "terms": "سماعات الأذن الطبية; معينات سمعية; أجهزة تقوية السمع; مساعدات السمع"
                 },
                 "shop/herbalist": {
                     "name": "كشك",
                     "terms": "كشك"
                 },
+                "shop/kitchen": {
+                    "name": "متجر تصميم مطابخ"
+                },
                 "shop/laundry": {
                     "name": "محل غسيل ملابس",
                     "terms": "غسيل ملابس"
                     "name": "محل أقفال",
                     "terms": "صانع اﻷقفال، أقفال، حداد،"
                 },
+                "shop/lottery": {
+                    "name": "متجر اليانصيب"
+                },
                 "shop/mall": {
                     "name": "مركز تسوق مول",
                     "terms": "مركز تسوق, مول"
                     "name": "محل بيع هواتف",
                     "terms": "محل بيع هواتف"
                 },
+                "shop/money_lender": {
+                    "name": "مقرض المال"
+                },
                 "shop/motorcycle": {
                     "name": "بائع دراجات نارية",
                     "terms": "وكالة دراجات هوائية; توكيل; بائع; توكيل دراجات; بائع دراجات; بيع دراجات; بيع"
                 },
+                "shop/motorcycle_repair": {
+                    "name": "ورشة تصليح الدراجات النارية"
+                },
                 "shop/music": {
-                    "name": "Ù\85Ø­Ù\84 بيع موسيقى",
+                    "name": "Ù\85تجر بيع موسيقى",
                     "terms": "محل بيع الموسيقى"
                 },
                 "shop/musical_instrument": {
-                    "name": "Ù\85Ø­Ù\84 Ø¨Ù\8aع Ø§Ù\84Ø¢Ù\84ات Ø§Ù\84موسيقية",
+                    "name": "Ù\85تجر Ø¢Ù\84ات موسيقية",
                     "terms": "محل بيع الآلات الموسيقية"
                 },
                 "shop/newsagent": {
                     "terms": "متجر المكملات الغذائية، مكملات غذائية"
                 },
                 "shop/optician": {
-                    "name": "Ù\85Ø­Ù\84 Ø¨Ù\8aع نظارات",
+                    "name": "Ù\85تجر نظارات",
                     "terms": "محل بيع نظارات"
                 },
                 "shop/organic": {
-                    "name": "Ù\85Ø­Ù\84 Ø¨Ù\8aع المنتجات العضوية",
+                    "name": "Ù\85تجر المنتجات العضوية",
                     "terms": "منتجات عضوية"
                 },
                 "shop/outdoor": {
                     "terms": "متجر ملابس ومعدات الأنشطة في الهواء الطلق"
                 },
                 "shop/paint": {
-                    "name": "Ù\85تجر Ø§Ù\84طلاء",
+                    "name": "Ù\85تجر Ø¯Ù\87اÙ\86ات Ù\88طلاء",
                     "terms": "طلاء"
                 },
+                "shop/party": {
+                    "name": "متجر مستلزمات حفلات"
+                },
                 "shop/pastry": {
-                    "name": "Ù\85تجر Ø§Ù\84Ø­Ù\84Ù\88Ù\8aات",
+                    "name": "متجر حلويات",
                     "terms": "متجر الحلويات"
                 },
+                "shop/pawnbroker": {
+                    "name": "متجر رهن"
+                },
                 "shop/perfumery": {
                     "name": "متجر العطور",
                     "terms": "عطور"
                     "name": "متجر المكونات الإلكترونية",
                     "terms": "متجر المكونات الإلكترونية"
                 },
+                "shop/religion": {
+                    "name": "متجر ديني",
+                    "terms": "دين,متجر,"
+                },
+                "shop/scuba_diving": {
+                    "name": "متجر غوص تحت الماء"
+                },
                 "shop/seafood": {
-                    "name": "Ù\85سÙ\85Ù\83Ø© / Ù\85تجر Ø§Ù\84Ù\85Ø£Ù\83Ù\88Ù\84ات Ø§Ù\84بحرية",
-                    "terms": "مأكولات بحرية، مسمكة ، سمك"
+                    "name": "Ù\85تجر Ù\85Ø£Ù\83Ù\88Ù\84ات بحرية",
+                    "terms": "مأكولات بحرية, مسمكة, سمك"
                 },
                 "shop/second_hand": {
                     "name": "محل لبيع البضائع المستعملة",
                     "terms": "محل لبيع البضائع المستعملة"
                 },
+                "shop/sewing": {
+                    "name": "متجر مستلزمات خياطة",
+                    "terms": "خياطة,ترزي,خياط,"
+                },
                 "shop/shoes": {
-                    "name": "Ù\85Ø­Ù\84 Ø¨Ù\8aع أحذية",
-                    "terms": "محل بيع أحذية"
+                    "name": "Ù\85تجر أحذية",
+                    "terms": "محل بيع أحذية,حذاء,احذية"
                 },
                 "shop/sports": {
-                    "name": "Ù\85Ø­Ù\84 Ø¨Ù\8aع أدوات رياضية",
+                    "name": "Ù\85تجر أدوات رياضية",
                     "terms": "محل بيع أدوات رياضية"
                 },
                 "shop/stationery": {
-                    "name": "Ù\85Ø­Ù\84 Ø¨Ù\8aع أدوات مكتبية",
-                    "terms": "محل بيع أدوات مكتبية"
+                    "name": "Ù\85تجر أدوات مكتبية",
+                    "terms": "محل بيع أدوات مكتبية,قرطاسية,مكتبة"
                 },
                 "shop/supermarket": {
                     "name": "سوبر ماركت",
                 },
                 "shop/tailor": {
                     "name": "خياط",
-                    "terms": "خياط"
+                    "terms": "خياط,ترزي"
                 },
                 "shop/tea": {
                     "name": "محل بيع الشاي",
                     "name": "متجر نبيذ"
                 },
                 "tourism": {
-                    "name": "سياحي",
-                    "terms": "سياحة"
+                    "name": "سياحي"
                 },
                 "tourism/alpine_hut": {
                     "name": "كوخ جبلي",
                     "name": "لا يوجد منعطفات",
                     "terms": "لا يوجد منعطفات"
                 },
+                "type/restriction/only_u_turn": {
+                    "name": "دوران للخلف فقط"
+                },
                 "type/route": {
                     "name": "مسار",
                     "terms": "مسار"
         "community": {
             "cape-coast-youthmappers": {
                 "description": "تابعنا على تويتر: {url}"
+            },
+            "osm-gh-twitter": {
+                "description": "تابعنا على تويتر: {url}"
+            },
+            "osm-india-github": {
+                "description": "شارك معنا في البرمجة: {url}"
+            },
+            "osm-india-telegram": {
+                "description": "انضم إلى عائلتنا: {url}"
+            },
+            "osm-india-youtube": {
+                "description": "اشترك في قناتنا: {url}"
+            },
+            "OSM-India-Puducherry-Facebook": {
+                "name": "حركة العتاد والبرمجيات الحرة - فيسبوك"
             }
         }
     }
index fedc4be4b940d20a2843dcde487c066b46335a9b..d60290e8347589843e4c660ec4837df6e124c70f 100644 (file)
             "locating": "Llocalizando, aguarda..."
         },
         "inspector": {
-            "no_documentation_combination": "Nun hai documentación disponible pa esta combinación d'etiquetes",
-            "no_documentation_key": "Nun hai documentación disponible pa esta clave",
             "show_more": "Ver más",
             "view_on_osm": "Ver en openstreetmap.org",
             "all_fields": "Tolos campos",
             "role": "Rol",
             "choose": "Seleicione un tipu de carauterística",
             "results": "{n} resultaos pa {search}",
-            "reference": "Ver na Wiki d'OpenStreetMap",
             "back_tooltip": "Camudar carauterística",
             "remove": "Desaniciar",
             "search": "Guetar",
                 "tooltip": "Llinies eléctriques, plantes de xeneración, subestaciones, etc."
             },
             "past_future": {
-                "description": "Pasao/Futuru",
                 "tooltip": "Propuesto, en construcción, abandonao, valtao, etc."
             },
             "others": {
-                "description": "Otros",
                 "tooltip": "Tolo demás"
             }
         },
             "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.",
-            "old_multipolygon": "Etiquetes de multipolígonu na vía esterior",
-            "untagged_point": "Puntu ensin etiquetar",
-            "untagged_line": "Llinia ensin etiquetar",
-            "untagged_area": "Área ensin etiquetar",
-            "tag_suggests_area": "La etiqueta {tag} suxer que la llinia tendría de ser un área, pero nun ye un area",
-            "deprecated_tags": "Etiquetes anticuaes: {tags}"
-        },
         "zoom": {
             "in": "Averar",
             "out": "Alloñar"
                 "category-building": {
                     "name": "Elementos d'edificiu"
                 },
-                "category-golf": {
-                    "name": "Elementos de golf"
-                },
                 "category-landuse": {
                     "name": "Elementos d'usu del terrén"
                 },
                     "label": "Tipu"
                 },
                 "website": {
-                    "label": "Sitiu web",
-                    "placeholder": "http://un.exemplu.ast/"
+                    "label": "Sitiu web"
                 },
                 "wetland": {
                     "label": "Tipu"
                 "building/terrace": {
                     "name": "Filera de cases"
                 },
-                "building/train_station": {
-                    "name": "Estación de tren"
-                },
                 "building/university": {
                     "name": "Edificiu universitariu"
                 },
                 "golf/hole": {
                     "name": "Furacu de golf"
                 },
-                "golf/lateral_water_hazard_area": {
-                    "name": "Llagu d'agua llateral en golf"
-                },
-                "golf/lateral_water_hazard_line": {
-                    "name": "Llagu d'agua llateral en golf"
-                },
                 "golf/rough": {
                     "name": "Rough de golf"
                 },
                 "golf/tee": {
                     "name": "Salida de percorríu"
                 },
-                "golf/water_hazard_area": {
-                    "name": "Llagu de golf"
-                },
-                "golf/water_hazard_line": {
-                    "name": "Llagu de golf"
-                },
                 "healthcare": {
                     "name": "Instalación sanitaria"
                 },
                 "power/transformer": {
                     "name": "Tresformador"
                 },
-                "public_transport/linear_platform": {
-                    "name": "Andén / Parada de tresporte"
-                },
-                "public_transport/linear_platform_aerialway": {
-                    "name": "Andén / Parada de remonte"
-                },
-                "public_transport/linear_platform_bus": {
-                    "name": "Andén / Parada d'autobús"
-                },
-                "public_transport/linear_platform_ferry": {
-                    "name": "Andén / Parada de ferry"
-                },
-                "public_transport/linear_platform_light_rail": {
-                    "name": "Andén / Parada de tren llixeru"
-                },
-                "public_transport/linear_platform_monorail": {
-                    "name": "Andén / Parada de monocarril"
-                },
-                "public_transport/linear_platform_subway": {
-                    "name": "Andén / Parada de metro"
-                },
-                "public_transport/linear_platform_train": {
-                    "name": "Andén / Parada de tren"
-                },
-                "public_transport/linear_platform_tram": {
-                    "name": "Andén / Parada de tranvía"
-                },
-                "public_transport/linear_platform_trolleybus": {
-                    "name": "Andén / Parada de trolebús"
-                },
                 "public_transport/platform": {
                     "name": "Andén / Parada de tresporte"
                 },
index c41b7f9dc8bbe0f2a2a4d739c58d27c0373a9a6f..637e43b29d1aeb049d97cc51699e02a304b0f937 100644 (file)
             "locating": "Зареждане, моля изчакайте..."
         },
         "inspector": {
-            "no_documentation_combination": "Няма налична документация за тази комбинация от тагове",
-            "no_documentation_key": "Няма налична документация за този ключ",
             "show_more": "Покажи още",
             "view_on_osm": "Вижте на openstreetmap.org",
             "all_fields": "Всички полета",
             "role": "Роля",
             "choose": "Изберете вид обект",
             "results": "{n} резултата за {search}",
-            "reference": "Вижте в OpenStreetMap Wiki",
             "back_tooltip": "Смяна на обект",
             "remove": "Премахнете",
             "search": "Търсене",
                 "tooltip": "Електропроводи , Електроцентрали, Подстанции, и т.н."
             },
             "past_future": {
-                "description": "Минал/Бъдещ",
                 "tooltip": "Проектни, В строеж, Изоставени, Разрушени, и др."
             },
             "others": {
-                "description": "Други",
                 "tooltip": "Всичко Друго"
             }
         },
             "on_wiki": "{tag} в wiki.osm.org",
             "used_with": "използва се с {type}"
         },
-        "validations": {
-            "disconnected_highway": "Прекъснат път",
-            "disconnected_highway_tooltip": "Пътищата трябва да бъдат свързани с други пътища или входове на сгради.",
-            "old_multipolygon": "Тагове за мултиполигон на външен път",
-            "old_multipolygon_tooltip": "Този вид мултиполигон е отхвърлен. Моля, сложете таговете на самия мултиполигон вместо на външния му път. ",
-            "untagged_point": "Точка без тагове.",
-            "untagged_point_tooltip": "Изберете типът обект който описва каква е тази точка.",
-            "untagged_line": "Линия без таг",
-            "untagged_line_tooltip": "Изберете типът обект който описва каква е тази линия.",
-            "untagged_area": "Площен обект без таг",
-            "untagged_area_tooltip": "Изберете типът обект който описва каква е тази площ.",
-            "untagged_relation": "Релация без тагове",
-            "untagged_relation_tooltip": "Изберете типът обект, който описва каква е тази релация.",
-            "many_deletions": "Изтривате {n} обекта: {p} възела, {l} линии, {a} площи, {r} релации. Сигурни ли сте, че искате да направите това? Това ще ги изтрие от картата, която всеки вижда на openstreetmap.org.",
-            "tag_suggests_area": "Тагът {tag} предполага линията да е площен обект, но тя не е",
-            "deprecated_tags": "Отхвърлени тагове: {tags}"
-        },
         "zoom": {
             "in": "Навътре",
             "out": "Навън"
                     "label": "Вид"
                 },
                 "website": {
-                    "label": "Уебсайт",
-                    "placeholder": "http://example.com/"
+                    "label": "Уебсайт"
                 },
                 "wetland": {
                     "label": "Вид"
index b7c5772e7dae77109d6d80212ef9c5835d4b420d..937da8afd3b85e1185b2d52710df8a2e52c4bbdc 100644 (file)
             "title": "অামার অবস্থানটি দেখান"
         },
         "inspector": {
-            "no_documentation_combination": "এই ট্যাগ সমবায় এর জন্য কোন বিবরন নেই",
-            "no_documentation_key": "এই টীকাটির জন্য কোন বিবরন নেই",
             "show_more": "অারো দেখান",
             "view_on_osm": "openstreetmap.org-এ দেখুন",
             "all_tags": "সমস্ত ট্যাগ",
             "role": "ভূমিকা",
             "choose": "বৈশিষ্ট্যের প্রকার নির্বাচন করুন",
             "results": "{search}-এর জন্য {n}-টি ফলাফল ",
-            "reference": "openstreetmap.org-এর উইকি-তে দেখুন",
             "back_tooltip": "বৈশিষ্ট্য পরিবর্তন করুন",
             "remove": "অপসারণ",
             "search": "কিছু খুঁজুন",
                 }
             }
         },
-        "feature": {
-            "others": {
-                "description": "অন্যান্য"
-            }
-        },
         "restore": {
             "heading": "অাপনার কিছু পরিবর্তন সংরক্ষণ করা বাকি অাছে",
             "description": "আপনি কি আগের সম্পাদনা সময়কালের অসংরক্ষিত পরিবর্তনসমূহ পুনরূদ্ধার করতে চান?"
             "on_wiki": "wiki.osm.org-এ {tag}",
             "used_with": "{type}-এর সাথে ব্যবহার করা হয়"
         },
-        "validations": {
-            "untagged_point": "ট্যাগবিহীন বিন্দু",
-            "untagged_line": "ট্যাগবিহীন রেখা",
-            "untagged_area": "ট্যাগবিহীন এলাকা",
-            "tag_suggests_area": "{tag} ট্যাগটি অনুসারে রেখাটি এলাকা হবে, কিন্তু নয়।",
-            "deprecated_tags": "পুরোন ও অব্যবহৃত ট্যাগ: {tags}"
-        },
         "cannot_zoom": "বর্তমান মোডে আরও জুম আউট করা যাবে না।",
         "help": {
             "title": "সাহায্য"
                     "label": "ধরন"
                 },
                 "website": {
-                    "label": "ওয়েবসাইট",
-                    "placeholder": "http://example.com/"
+                    "label": "ওয়েবসাইট"
                 },
                 "wetland": {
                     "label": "ধরন"
index 873c1602d5559d6b6513360bde5f00504e729c18..63dcd17a87d46ce83e36f05a0aead1fed9e0a856 100644 (file)
             "title": "Pokazati moju lokaciju"
         },
         "inspector": {
-            "no_documentation_combination": "Nema dostupne dokumentacije za ovu kombinaciju oznaka",
-            "no_documentation_key": "Nema dostupne dokumentacije za ovaj ključ",
             "show_more": "Prikazati više",
             "view_on_osm": "Pogledajte na stranici openstreetmap.org",
             "all_tags": "Sve oznake",
             "role": "Uloga",
             "choose": "Odaberite tip svojstva",
             "results": "{search} dala {n} rezultata",
-            "reference": "Pogledajte na stranici OpenStreetMap Wiki",
             "back_tooltip": "Promijeniti značajku",
             "remove": "Uklonite",
             "search": "Pretraga",
             "on_wiki": "{tag} na wiki.osm.org",
             "used_with": "Korišteno sa {type}"
         },
-        "validations": {
-            "untagged_point": "Neoznačena tačka",
-            "untagged_line": "Neoznačena linija",
-            "untagged_area": "Neoznačeno područje",
-            "tag_suggests_area": "Oznaka {tag} ukazuje da bi linija trebala biti područje, ali nije područje",
-            "deprecated_tags": "Zastarjele oznake: {tags}"
-        },
         "cannot_zoom": "Ne može se umanjiti više u trenutnom načinu.",
         "help": {
             "title": "Pomoć"
                     "label": "Vrsta"
                 },
                 "website": {
-                    "label": "Internet stranica",
-                    "placeholder": "http://primjer.com/"
+                    "label": "Internet stranica"
                 },
                 "wetland": {
                     "label": "Vrsta"
                     "terms": "vinograd,uzgoj grožđa"
                 },
                 "leisure": {
-                    "name": "Rekreacija",
-                    "terms": "rekreacija,razonoda"
+                    "name": "Rekreacija"
                 },
                 "leisure/common": {
                     "name": "Uobičajeno",
                     "terms": "linija"
                 },
                 "man_made": {
-                    "name": "Napravljeno ljudskom rukom",
-                    "terms": "napravljeno ljudskom rukom,umjetno,vještačko"
+                    "name": "Napravljeno ljudskom rukom"
                 },
                 "man_made/breakwater": {
                     "name": "Lukobran",
                     "terms": "vodosnadbjevanje,snadbjevanje vodom"
                 },
                 "natural": {
-                    "name": "Prirodno područje",
-                    "terms": "prirodno područje"
+                    "name": "Prirodno područje"
                 },
                 "natural/bay": {
                     "name": "Zaliv",
                     "terms": "videoklub,videoteka"
                 },
                 "tourism": {
-                    "name": "Turizam",
-                    "terms": "turizam,putovanja"
+                    "name": "Turizam"
                 },
                 "tourism/alpine_hut": {
                     "name": "Planinski dom",
index ce1b8baba9837f39d14b25ff08409ea3700e5695..6dfbbdea21693a45297c6492cb44260fbaa191d4 100644 (file)
             "locating": "Localitzant, espereu si us plau..."
         },
         "inspector": {
-            "no_documentation_combination": "No hi ha documentació per a aquesta combinació d'etiquetes",
-            "no_documentation_key": "No hi ha documentació per a aquesta clau",
             "show_more": "Mostra'n més",
             "view_on_osm": "Mostra-ho a openstreetmap.org",
             "all_fields": "Tots els camps",
             "role": "Rol",
             "choose": "Seleccioneu el tipus d'objecte",
             "results": "{n} resultats per {search}",
-            "reference": "Mostra-ho al wiki de l'OpenStreetMap",
             "back_tooltip": "Modifica l'objecte",
             "remove": "Eliminar",
             "search": "Cercar",
                 "tooltip": "Línies elèctriques, centrals, subestacions, etc."
             },
             "past_future": {
-                "description": "Passat/futur",
                 "tooltip": "Proposat, en construcció, abandonat, enderrocat, etc."
             },
             "others": {
-                "description": "Altres",
                 "tooltip": "Tota la resta"
             }
         },
             "on_wiki": "{tag} a wiki.osm.org",
             "used_with": "utilitzat amb {type}"
         },
-        "validations": {
-            "disconnected_highway": "Via desconnectada",
-            "disconnected_highway_tooltip": "Les vies haurien de connectar altres vies o entrades d'edificis.",
-            "old_multipolygon": "Etiqueta Multipoligon en ",
-            "old_multipolygon_tooltip": "Aquest estil de polígon és en desús. Assigneu les etiquetes al multipolígon pare en comptes d'a la via exterior.",
-            "untagged_point": "Punt sense etiquetar",
-            "untagged_point_tooltip": "Seleccioneu un tipus d'objecte que descrigui el que és aquest punt.",
-            "untagged_line": "Línia sense etiquetar",
-            "untagged_line_tooltip": "Seleccioneu un tipus d'objecte que descrigui el que és aquesta línia.",
-            "untagged_area": "Àrea sense etiquetar",
-            "untagged_area_tooltip": "Seleccioneu un tipus d'objecte que descrigui el que és aquesta àrea.",
-            "untagged_relation": "Relació sense etiquetar",
-            "untagged_relation_tooltip": "Seleccioneu un tipus d'objecte que descrigui com és aquesta relació.",
-            "many_deletions": "Estàs eliminant  {n} característiques:{n} funcions, {l} línies, {a} àrees, {r} relacions. Segur que ho vols fer? Això les eliminarà del mapa que tothom veu a openstreetmap.org",
-            "tag_suggests_area": "L'etiqueta {tag} suggereix que la línia hauria de ser una àrea, però no és una àrea",
-            "deprecated_tags": "Etiquetes obsoletes : {tags}"
-        },
         "zoom": {
             "in": "Apropa't",
             "out": "Allunya't"
                 "category-building": {
                     "name": "Tipus d'edificis"
                 },
-                "category-golf": {
-                    "name": "Elements de golf"
-                },
                 "category-landuse": {
                     "name": "Ús del terreny"
                 },
                     "label": "Tipus"
                 },
                 "website": {
-                    "label": "Lloc web",
-                    "placeholder": "http://exemple.com/"
+                    "label": "Lloc web"
                 },
                 "wetland": {
                     "label": "Tipus"
                 "building/terrace": {
                     "name": "Cases unifamiliars"
                 },
-                "building/train_station": {
-                    "name": "Estació de ferrocarril"
-                },
                 "building/transportation": {
                     "name": "Edifici per a transports"
                 },
                 "golf/hole": {
                     "name": "Forat"
                 },
-                "golf/lateral_water_hazard_area": {
-                    "name": "Obstacle d'aigua lateral"
-                },
-                "golf/lateral_water_hazard_line": {
-                    "name": "Obstacle d'aigua lateral"
-                },
                 "golf/rough": {
                     "name": "Rough"
                 },
                 "golf/tee": {
                     "name": "Àrea inicial"
                 },
-                "golf/water_hazard_area": {
-                    "name": "Obstacle d'aigua"
-                },
-                "golf/water_hazard_line": {
-                    "name": "Obstacle d'aigua"
-                },
                 "healthcare/alternative/chiropractic": {
                     "name": "Quiropràctic"
                 },
                     "terms": "Vinyar, Vinyal, Vinyet, Vinya"
                 },
                 "leisure": {
-                    "name": "Esbarjo",
-                    "terms": "Lleure,Temps lliure"
+                    "name": "Esbarjo"
                 },
                 "leisure/adult_gaming_centre": {
                     "name": "Centre d'oci adult"
                     "terms": "Línia"
                 },
                 "man_made": {
-                    "name": "Fet per l'home",
-                    "terms": "Fet per la mà de l'home"
+                    "name": "Fet per l'home"
                 },
                 "man_made/adit": {
                     "name": "Entrada"
                     "name": "Transformador",
                     "terms": "Transformador"
                 },
-                "public_transport/linear_platform_bus": {
-                    "name": "Plataforma de parada bus"
-                },
                 "public_transport/station_bus": {
                     "name": "Estació d'autobusos"
                 },
                     "terms": "Celler, Licoreria"
                 },
                 "tourism": {
-                    "name": "Turisme",
-                    "terms": "Turisme, Visita"
+                    "name": "Turisme"
                 },
                 "tourism/alpine_hut": {
                     "name": "Refugi de muntanya"
index a38163f8cb85d0b128fb943420ff0176f349b706..1a02f88f0e41197437cfd1a000ecb27e8b7c4a78 100644 (file)
             },
             "rail": {
                 "tooltip": "ڕێگەی ئاسنین"
-            },
-            "past_future": {
-                "description": "ڕابردوو/داهاتوو"
-            },
-            "others": {
-                "description": "هی تر"
             }
         },
         "settings": {
                 "building/residential": {
                     "name": "باڵەخانەی نیشتەجێبوون"
                 },
-                "building/train_station": {
-                    "name": "وێسگەی شەمەندەفەر"
-                },
                 "club": {
                     "name": "یانە"
                 },
index 021d93fada956abb945efb82da7777f3a12128f9..80cd46dca1cec39efd1a9d1689fe31f057010c82 100644 (file)
                 "restriction": "Tyto prvky nelze sloučit, protože by poškodily relaci \"{relation}\".",
                 "relation": "Tyto prvky nelze sloučit protože jsou součástí různých rolí v relaci.",
                 "incomplete_relation": "Tyto prvky nelze spojit, protože jsou stažené jen částečně.",
-                "conflicting_tags": "Prvky nelze spojit, protože některé z jejich vlastností kolidují."
+                "conflicting_tags": "Prvky nelze spojit, protože některé z jejich vlastností kolidují.",
+                "paths_intersect": "Prvky nelze spojit v jeden, protože výsledná cesta by křížila sama sebe."
             },
             "move": {
                 "title": "Posunout",
                 "tooltip_data": "Zazoomovat mapu a označit tato data.",
                 "tooltip_issue": "Zazoomovat mapu a označit tento problém."
             },
-            "no_documentation_combination": "K této kombinaci vlastností není k dispozici dokumentace",
-            "no_documentation_key": "K tomuto klíči není k dispozici dokumentace",
             "show_more": "Zobrazit víc",
             "view_on_osm": "Zobrazit na openstreetmap.org",
             "view_on_keepRight": "Zobrazit na keepright.at",
             "role": "Role",
             "choose": "Zvolte typ prvku",
             "results": "{search} nalezeno {n} krát",
-            "reference": "Zobrazit na Wiki OpenStreetMap",
-            "edit_reference": "Upravit nebo přeložit popisek",
+            "no_documentation_key": "Dokumentace není k dispozici.",
+            "edit_reference": "editovat / přeložit",
             "wiki_reference": "Zobrazit dokumentaci",
             "wiki_en_reference": "Zobrazit dokumentaci v angličtině",
             "back_tooltip": "Změnit prvek",
                     "tooltip": "Automaticky odhalený problém z keepright.at",
                     "title": "Problémy z KeepRight"
                 },
+                "improveOSM": {
+                    "tooltip": "Chybějící data byla automaticky detekována pomocí improveosm.org"
+                },
                 "custom": {
                     "tooltip": "Pro aktivaci přetáhněte datový soubor na tuto stránku, nebo klikněte na tlačítko",
                     "title": "Vlastní data",
                 "tooltip": "Elektrická vedení, elektrárny, transformátory atd."
             },
             "past_future": {
-                "description": "Minulost a budoucnost",
                 "tooltip": "Objekty v návrhu, výstavbě, opuštěné, stržené objekty atd."
             },
             "others": {
-                "description": "Další",
                 "tooltip": "Všechno ostatní"
             }
         },
             "on_wiki": "{tag} na wiki.osm.org",
             "used_with": "užito s {type}"
         },
-        "validations": {
-            "disconnected_highway": "Nepřipojená cesta",
-            "disconnected_highway_tooltip": "Cesty by měly být připojeny k dalším cestám nebo vstupům budov.",
-            "generic_name": "Možné obecné jméno",
-            "generic_name_tooltip": "Tento prvek má asi obecné jméno \"{name}\". Do pole name prosíme zadávejte jen oficiálni název, nikoliv obecná slova.",
-            "old_multipolygon": "Na vnější linii se nachází tag multipolygon",
-            "old_multipolygon_tooltip": "Takto se multipolygon již nedělá. Prosím přiřaďte tagy relaci multipolygon, nikoliv vnější cestě.",
-            "untagged_point": "Neoznačený bod",
-            "untagged_point_tooltip": "Zvolte typ vlastnosti popisující, co je tento bod zač.",
-            "untagged_line": "Neoznačená linie",
-            "untagged_line_tooltip": "Zvolte typ vlastnosti popisující, co je tato linie zač.",
-            "untagged_area": "Neoznačená plocha",
-            "untagged_area_tooltip": "Zvolte typ vlastnosti popisující, co je tato plocha zač.",
-            "untagged_relation": "Neoznačená relace",
-            "untagged_relation_tooltip": "Vyber typ prvku, který popisuje, čím je tato relace",
-            "many_deletions": "Pokoušíte se smazat {n} prvků: {p} bodů, {l} linií, {a} ploch, {r} relací. Opravdu to chcete provést? Odstranilo by je to z globální mapy na openstreetmap.org.",
-            "tag_suggests_area": "Vlastnost {tag} obvykle označuje plochu, ale zvolený prvek není plocha",
-            "deprecated_tags": "Zastaralé vlastnosti: {tag}"
-        },
         "zoom": {
             "in": "Přibližte",
             "out": "Oddalte"
         "cannot_zoom": "Aktuální nastavení nedovoluje větší zvětšení.",
         "full_screen": "Na celou obrazovku",
         "QA": {
+            "improveOSM": {
+                "geometry_types": {
+                    "parking": "parkoviště"
+                },
+                "error_types": {
+                    "mr": {
+                        "description_alt": "Data 3.strany naznačují, že by zde mohlo být nezmapováno {geometry_type}."
+                    },
+                    "tr": {
+                        "title": "Chybějící omezení odbočení",
+                        "description": "{num_passed} z {num_trips} nahraných záznamů (směrem {travel_direction}) odbočují z {from_way} na {to_way} na {junction}. Může zde chybět omezení odbočení \"{turn_restriction}\"."
+                    }
+                }
+            },
             "keepRight": {
                 "title": "Problém KeepRight",
                 "detail_title": "Problém",
                     "this_boundary": "tato hranice",
                     "this_turn_restriction": "toto omezení odbočení",
                     "this_roundabout": "tento kruhový objezd",
+                    "this_mini_roundabout": "tento malý kruhový objezd",
                     "this_track": "tato stezka",
                     "this_feature": "tento prvek",
                     "highway": "silnice",
                 }
             }
         },
+        "issues": {
+            "key": "I",
+            "no_issues": {
+                "message": "Všechno vypadá dobře",
+                "info": "Veškeré problémy se při úpravě zobrazují"
+            },
+            "almost_junction": {
+                "highway-highway": {
+                    "tip": "Protínající dálnice by měly sdílet vrchol spojení."
+                }
+            },
+            "crossing_ways": {
+                "building-building": {
+                    "tip": "Budovy by se neměly protínat, s výjimkou různých vrstev."
+                },
+                "building-railway": {
+                    "tip": "Železniční křížení by měly využívat mosty nebo tunely."
+                },
+                "building-waterway": {
+                    "tip": "Vodní přechody by měly používat tunely nebo různé vrstvy."
+                },
+                "highway-highway": {
+                    "tip": "Při křížení dálnic by se měly používat mosty, tunely nebo křižovatky."
+                },
+                "highway-railway": {
+                    "tip": "Dálnice, které kříží železnice, by měly používat mosty, tunely nebo železniční přejezdy."
+                },
+                "highway-waterway": {
+                    "tip": "Dálnice protínající vodní cesty by měly používat mosty, tunely nebo brod."
+                },
+                "railway-waterway": {
+                    "tip": "Železnice křížená vodními cestami by měla používat mosty nebo tunely."
+                },
+                "waterway-waterway": {
+                    "tip": "Křížení vodních cest by mělo být spojeno nebo používat tunely."
+                },
+                "tunnel-tunnel": {
+                    "tip": "Křížení tunelů by mělo používat různé vrstvy."
+                },
+                "tunnel-tunnel_connectable": {
+                    "tip": "Křížení tunelů by měly být připojeny, nebo používat různé vrstvy."
+                },
+                "bridge-bridge": {
+                    "tip": "Přejezdové mosty by měly používat různé vrstvy."
+                },
+                "bridge-bridge_connectable": {
+                    "tip": "Křížené mosty by měly být připojeny nebo používat různé vrstvy."
+                }
+            },
+            "deprecated_tag": {
+                "tip": "Některé značky se časem stávají zastaralými a měly by být nahrazeny."
+            },
+            "disconnected_way": {
+                "highway": {
+                    "tip": "Dálnice by se měly připojovat k jiným dálnicím nebo vstupům do budov."
+                }
+            },
+            "generic_name": {
+                "tip": "Názvy by měly být skutečné názvy prvků na místě."
+            },
+            "many_deletions": {
+                "tip": "Pouze nadbytečné nebo neexistující prvky by měly být odstraněny."
+            },
+            "old_multipolygon": {
+                "tip": "Multipolygony by měly být označeny jejich vztahem, nikoli jejich vnější linií."
+            },
+            "tag_suggests_area": {
+                "tip": "Oblasti musí mít připojené koncové body."
+            },
+            "fix": {
+                "connect_almost_junction": {
+                    "annotation": "Připojeny velmi blízké prvky."
+                },
+                "connect_endpoints": {
+                    "title": "Připojte konce"
+                },
+                "continue_from_end": {
+                    "title": "Pokračujte v kreslení od konce"
+                },
+                "remove_generic_name": {
+                    "annotation": "Odstraněno obecné jméno."
+                }
+            }
+        },
         "intro": {
             "done": "hotovo",
             "ok": "OK",
                 "category-building": {
                     "name": "Budovy"
                 },
-                "category-golf": {
+                "category-golf-area": {
+                    "name": "Golf"
+                },
+                "category-golf-line": {
                     "name": "Golf"
                 },
                 "category-landuse": {
                 "animal_shelter": {
                     "label": "Pro zvířata"
                 },
+                "architect": {
+                    "label": "Architekt"
+                },
                 "area/highway": {
                     "label": "Typ"
                 },
                 "junction/ref_oneway": {
                     "label": "Číslo křižovatky"
                 },
+                "junction_line": {
+                    "label": "Křižovatka",
+                    "options": {
+                        "roundabout": "Kruhový objezd"
+                    }
+                },
                 "kerb": {
                     "label": "Obrubník"
                 },
                         "underground": "Podzemní"
                     }
                 },
-                "passenger_information_display": {
-                    "label": "Zobrazení informací pro cestující"
-                },
                 "payment_multi": {
                     "label": "Platební možnosti"
                 },
                     },
                     "placeholder": "Horská turistika, vysokohorská turistika..."
                 },
+                "salt": {
+                    "label": "Sůl"
+                },
                 "sanitary_dump_station": {
                     "label": "Výlevka pro WC"
                 },
                     "label": "Typ"
                 },
                 "website": {
-                    "label": "Webová stránka",
-                    "placeholder": "http://example.com/"
+                    "label": "Webová stránka"
                 },
                 "wetland": {
                     "label": "Typ"
                 "amenity/fast_food/kebab": {
                     "name": "Kebab rychlé občerstvení"
                 },
+                "amenity/fast_food/mexican": {
+                    "name": "Mexické rychlé občerstvení"
+                },
                 "amenity/fast_food/pizza": {
                     "name": "Pizza rychlé občerstvení"
                 },
                 "amenity/pharmacy": {
                     "name": "Okénko/přepážka lékárny"
                 },
+                "amenity/photo_booth": {
+                    "name": "Foto budka"
+                },
                 "amenity/place_of_worship": {
                     "name": "Chrám",
                     "terms": "křesťanský,křesťanství,kostel,kostelík,chrám,bazilika,katedrála,kaple,kaplička,chrám páně,rotunda,farnost,diecéze,mešita,minaret,synagoga,pagoda,stúpa,oratorium,modlitebna,náboženský,náboženská,náboženské,sakrální,svatyně"
                     "name": "Řada řadových domů",
                     "terms": "řadový dům,řadové domy,řadovka,řadovky"
                 },
-                "building/train_station": {
-                    "name": "Železniční stanice"
-                },
                 "building/transportation": {
                     "name": "Dopravní budova"
                 },
                     "name": "Pískový bunker",
                     "terms": "pískový bunker,písková překážka,písečná překážka,bunker,hazard"
                 },
+                "golf/driving_range": {
+                    "name": "Dojezd"
+                },
                 "golf/fairway": {
                     "name": "Fairway",
                     "terms": "fairway,nízká tráva"
                     "name": "Dráha do jamky",
                     "terms": "jamka,dráha od odpaliště,dráha do jamkoviště,dráha"
                 },
-                "golf/lateral_water_hazard_area": {
-                    "name": "Podélná vodní překážka",
-                    "terms": "voda,podélná voda,podélná překážka,červená voda"
-                },
-                "golf/lateral_water_hazard_line": {
-                    "name": "Podélná vodní překážka",
-                    "terms": "voda,podélná voda,podélná překážka,červená voda"
+                "golf/path": {
+                    "name": "Golfová pěší stezka"
                 },
                 "golf/rough": {
                     "name": "Rough",
                     "name": "Odpaliště",
                     "terms": "odpaliště,tee,týčko,tee box"
                 },
-                "golf/water_hazard_area": {
-                    "name": "Vodní překážka",
-                    "terms": "voda,příčná voda,příčná překážka,žlutá voda"
-                },
-                "golf/water_hazard_line": {
-                    "name": "Vodní překážka",
-                    "terms": "voda,příčná voda,příčná překážka,žlutá voda"
-                },
                 "healthcare": {
                     "name": "Zdravotní zařízení"
                 },
                     "terms": "křižovatka,křížení,odbočka,kruhový objezd"
                 },
                 "landuse": {
-                    "name": "Využití krajiny",
-                    "terms": "využití území,využití,les,louka,hora,pole"
+                    "name": "Využití krajiny"
                 },
                 "landuse/allotments": {
                     "name": "Zahrádky",
                     "terms": "vinice,vinohrad,hrozny,víno"
                 },
                 "leisure": {
-                    "name": "Volný čas",
-                    "terms": "oddech,volno,volná chvíle,odpočinek,volný čas"
+                    "name": "Volný čas"
                 },
                 "leisure/adult_gaming_centre": {
                     "name": "Herna (hrací automaty)",
                     "name": "Stůl na piknik",
                     "terms": "stůl na piknik,stůl,piknik,piknikový stůl,lavička"
                 },
+                "leisure/picnic_table/chess": {
+                    "name": "Šachový stůl"
+                },
                 "leisure/pitch": {
                     "name": "Hřiště",
                     "terms": "sportovní kurt,hřiště,dvorec,kurt,stadion"
                     "terms": "čára,cesta,trať,kanál,trasa"
                 },
                 "man_made": {
-                    "name": "Umělý objekt",
-                    "terms": "lidský výtvor,artefakt,konstrukce,dílo,stavba,objekt,mechanizmus"
+                    "name": "Umělý objekt"
                 },
                 "man_made/adit": {
                     "name": "Štola",
                     "name": "Věž",
                     "terms": "věž,sloup,stožár,bašta,pevnost,hrad"
                 },
+                "man_made/tower/bell_tower": {
+                    "name": "Zvonice"
+                },
                 "man_made/tower/communication": {
                     "name": "Komunikační věž"
                 },
+                "man_made/tower/minaret": {
+                    "name": "Minaret"
+                },
                 "man_made/tower/observation": {
                     "name": "Vyhlídková věž"
                 },
                     "name": "Telekomunikační šachta"
                 },
                 "natural": {
-                    "name": "Přírodní objekt",
-                    "terms": "příroda,přírodní,naturální,přirozený"
+                    "name": "Přírodní objekt"
                 },
                 "natural/bare_rock": {
                     "name": "Plochy jednolité skály",
                     "name": "Transformátor",
                     "terms": "transformátor,transformátorová stanice,elektrická stanice,adaptér"
                 },
-                "public_transport/linear_platform": {
-                    "name": "Nástupiště"
-                },
-                "public_transport/linear_platform_aerialway": {
-                    "name": "Nástupiště lanovky"
-                },
-                "public_transport/linear_platform_bus": {
-                    "name": "Nástupiště autobusu"
-                },
-                "public_transport/linear_platform_ferry": {
-                    "name": "Nástupiště trajektu / přívozu"
-                },
-                "public_transport/linear_platform_light_rail": {
-                    "name": "Nástupiště lehké dráhy"
-                },
-                "public_transport/linear_platform_monorail": {
-                    "name": "Nástupiště jednokolejky"
-                },
-                "public_transport/linear_platform_subway": {
-                    "name": "Nástupiště metra"
-                },
-                "public_transport/linear_platform_train": {
-                    "name": "Nástupiště vlaku"
-                },
-                "public_transport/linear_platform_tram": {
-                    "name": "Nástupiště tramvaje"
-                },
-                "public_transport/linear_platform_trolleybus": {
-                    "name": "Nástupiště trolejbusu"
-                },
                 "public_transport/platform": {
                     "name": "Nástupiště"
                 },
                     "terms": "vinotéka,víno,vinárna,vinařství,vino"
                 },
                 "tourism": {
-                    "name": "Turismus",
-                    "terms": "turismus,turistika,cestování,cestovní ruch,turistický ruch"
+                    "name": "Turismus"
                 },
                 "tourism/alpine_hut": {
                     "name": "Horská chata",
                 "attribution": {
                     "text": "Podmínky použití a zpětná vazba"
                 },
-                "description": "Hranice snímků and data pořízení. Popisky se objevují od zoomu 13 a více."
+                "description": "Hranice snímků and data pořízení. Popisky se objevují od zoomu 13 a více.",
+                "name": "Prémiové snímky DigitalGlobe Vintage"
             },
             "DigitalGlobe-Standard": {
                 "attribution": {
                 "attribution": {
                     "text": "Podmínky použití a zpětná vazba"
                 },
-                "description": "Hranice snímků and data pořízení. Popisky se objevují od zoomu 13 a více."
+                "description": "Hranice snímků and data pořízení. Popisky se objevují od zoomu 13 a více.",
+                "name": "Standardní snímky DigitalGlobe Vintage"
             },
             "EsriWorldImagery": {
                 "attribution": {
                 "description": "Vylepšete OpenStreetMap v Indii",
                 "extendedDescription": "Mapujete v Indii? Máte otázky, chcete se zde spojit s komunitou? Připojte se k nám na adrese {url}. Všichni jsou vítáni!"
             },
+            "osm-india-forum": {
+                "name": "OpenStreetMap India forum"
+            },
+            "osm-india-github": {
+                "name": "OpenStreetMap India GitHub"
+            },
+            "osm-india-telegram": {
+                "name": "OpenStreetMap India Telegram"
+            },
             "OSM-india-twitter": {
                 "name": "Twitter OpenStreetMap Indie",
                 "description": "Zrovna jsme vytweetli: {url}"
             },
+            "osm-india-website": {
+                "name": "OpenStreetMap India"
+            },
+            "osm-india-wiki": {
+                "name": "OpenStreetMap Wikiproject India",
+                "description": "Vše, co potřebujete vědět o mapování v Indii: {url}"
+            },
+            "osm-india-youtube": {
+                "name": "OpenStreetMap India Youtube"
+            },
             "OSM-IDN-facebook": {
                 "name": "OpenStreetMap Indonésie",
                 "description": "Vylepšete OpenStreetMap v Indonésii",
                 "extendedDescription": "Mapujete v Indonésii? Máte otázky, chcete se zde spojit s komunitou? Připojte se k nám na adrese {Url}. Všichni jsou vítáni!"
             },
+            "osm-iran-forum": {
+                "description": "OpenStreetMap Iran web forum"
+            },
+            "osm-iran-telegram": {
+                "name": "OpenStreetMap Iran Telegram"
+            },
             "OSM-japan-facebook": {
                 "name": "Japonská komunita OpenStreetMap",
                 "description": "Mapovači a uživatelé OpenStreetMap v Japonsku"
                 "description": "Vylepšete OpenStreetMap v Nepálu",
                 "extendedDescription": "Mapujete v Nepálu? Máte otázky, chcete se zde spojit s komunitou? Připojte se k nám na adrese {Url}. Všichni jsou vítáni!"
             },
+            "OSM-Asia-mailinglist": {
+                "name": "OpenStreetMap Asia Mailinglist"
+            },
+            "OSM-south-korea-telegram": {
+                "name": "OSM South Korea Telegram"
+            },
+            "OSM-sri-lanka-facebook": {
+                "name": "OpenStreetMap Sri Lanka"
+            },
             "OSM-TW-facebook": {
                 "name": "Tchajwanská komunita OpenStreetMap"
             },
index 9591d973379741f609aa7f7c0a30e88992775428..4a825f2bb3398811c89557249a467bc5bb89fdcf 100644 (file)
@@ -94,9 +94,6 @@
                 "category-building": {
                     "name": "Nodweddion Adeilad"
                 },
-                "category-golf": {
-                    "name": "Nodweddion Golff"
-                },
                 "category-landuse": {
                     "name": "Nodweddion Defnydd Tir"
                 },
index de1c8d25aca6c6dfbdb6d688f7b1a9c66a6f9f3f..d6299db5f8dc471b3db569cbff3787239ea812a6 100644 (file)
                 "tooltip_data": "Centrer kortet på og zoom ind til dette data.",
                 "tooltip_issue": "Centrer kortet på og zoom ind til dette problem."
             },
-            "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",
             "show_more": "Vis mere",
             "view_on_osm": "Se på openstreetmap.org",
             "view_on_keepRight": "Vis på keepright.at",
             "role": "Rolle",
             "choose": "Vælg objekttype",
             "results": "{n} resultater for {search}",
-            "reference": "Se på OpenStreetMap-Wiki",
-            "edit_reference": "Rediger eller oversæt beskrivelse",
             "wiki_reference": "Vis dokumentation",
             "wiki_en_reference": "Vis dokumentation på engelsk",
             "back_tooltip": "Ændr objekt",
                 "tooltip": "Højspændingsmaster, kraftværker, transformatorstationer, osv."
             },
             "past_future": {
-                "description": "Fortid/fremtid",
                 "tooltip": "Planlagt, under konstruktion, forladt, nedrevet, osv."
             },
             "others": {
-                "description": "Andet",
                 "tooltip": "Alt andet"
             }
         },
             "on_wiki": "{tag} på wiki.osm.org",
             "used_with": "brugt med {type}"
         },
-        "validations": {
-            "disconnected_highway": "Ej forbundet vejsegment",
-            "disconnected_highway_tooltip": "Veje skal forbindes til andre veje eller indgange til bygninger.",
-            "generic_name": "Muligt generaliseret navn",
-            "generic_name_tooltip": "Dette kortobjekt lader til at have et generaliseret navn \"{name}\". Brug kun navne-feltet til kortobjektets specifikke og officielle navn.",
-            "old_multipolygon": "Multipolygon har tags på den ydre vej",
-            "old_multipolygon_tooltip": "Denne måde at tagge multipolygoner på er ikke længere understøttet. Vær venlig at tilføje tags på multipolygonen hvori den ydre vej indgår, i stedet for på selve vejen.",
-            "untagged_point": "Punkt uden tags",
-            "untagged_point_tooltip": "Vælg en objekttype der beskriver hvad dette punkt er.",
-            "untagged_line": "Linje uden tags",
-            "untagged_line_tooltip": "Vælg en objekttype der beskriver hvad slags linje dette er.",
-            "untagged_area": "Område uden tags",
-            "untagged_area_tooltip": "Vælg en objekttype der beskriver hvad slags område dette er.",
-            "untagged_relation": "Ej tagget relation",
-            "untagged_relation_tooltip": "Vælg en objekttype der beskriver hvilken slags relation dette er.",
-            "many_deletions": "Du sletter {n} kortobjekter: {p} noder, {l} linjer, {a} områder, {r} relationer. Er du sikker på at du vil gøre dette? Dette vil slette dem fra kortet som alle andre ser på openstreetmap.org.",
-            "tag_suggests_area": "Tagget {tag} antyder at linjen skulle være et område, men den er ikke et område",
-            "deprecated_tags": "Frarådede tags: {tags}"
-        },
         "zoom": {
             "in": "Zoom ind",
             "out": "Zoom ud"
                 "category-building": {
                     "name": "Bygningsegenskaber"
                 },
-                "category-golf": {
-                    "name": "Golfegenskaber"
-                },
                 "category-landuse": {
                     "name": "Arealanvendelsesegenskaber"
                 },
                     "label": "Type"
                 },
                 "website": {
-                    "label": "Websted",
-                    "placeholder": "http://example.com/"
+                    "label": "Websted"
                 },
                 "wetland": {
                     "label": "Type"
                 },
                 "barrier/gate": {
                     "name": "Led/låge",
-                    "terms": "Led, Låge, Havelåge"
+                    "terms": "Led, Låge, Havelåge, port, åbning, indgang, udgang"
                 },
                 "barrier/hedge": {
                     "name": "Læhegn/hæk",
                     "terms": "Læhegn, Hæk"
                 },
                 "barrier/kissing_gate": {
-                    "name": "Dyrefoldsport",
-                    "terms": "Dyrefoldsport"
+                    "name": "Dyrefoldslåge",
+                    "terms": "Dyrefoldsport, låge,dyr,fold,dyrefold"
                 },
                 "barrier/lift_gate": {
                     "name": "Løftebom",
                     "name": "Rækkehuse",
                     "terms": "Rækkehuse"
                 },
-                "building/train_station": {
-                    "name": "Togstation"
-                },
                 "building/university": {
                     "name": "Universitetsbygning",
                     "terms": "Universitetsbygning"
                     "name": "Golfhul",
                     "terms": "Golfhul"
                 },
-                "golf/lateral_water_hazard_area": {
-                    "name": "Golfvandhul",
-                    "terms": "Golfvandhul"
-                },
-                "golf/lateral_water_hazard_line": {
-                    "name": "Golfvandhul",
-                    "terms": "Golfvandhul"
-                },
                 "golf/rough": {
                     "name": "Rough",
                     "terms": "Rough, Højt græs"
                     "name": "Tee Box",
                     "terms": "Tee Box"
                 },
-                "golf/water_hazard_area": {
-                    "name": "Golfvandbunker",
-                    "terms": "Golfvandbunker"
-                },
-                "golf/water_hazard_line": {
-                    "name": "Golfvandbunker",
-                    "terms": "Golfvandbunker"
-                },
                 "healthcare": {
                     "name": "Sundhedsfacilitet",
                     "terms": "sundhed, klinik, sygdom, kirurgi"
                     "terms": "Vejfletning, Gadefletning"
                 },
                 "landuse": {
-                    "name": "Arealanvendelse",
-                    "terms": "Arealanvendelse"
+                    "name": "Arealanvendelse"
                 },
                 "landuse/allotments": {
                     "name": "Kolonihave",
                     "terms": "Vingård, Vinmark"
                 },
                 "leisure": {
-                    "name": "Fritids",
-                    "terms": "Fritid"
+                    "name": "Fritids"
                 },
                 "leisure/adult_gaming_centre": {
                     "name": "Voksen spillecenter",
                     "terms": "Linje"
                 },
                 "man_made": {
-                    "name": "Menneskeskabt",
-                    "terms": "Menneskeskabt"
+                    "name": "Menneskeskabt"
                 },
                 "man_made/adit": {
                     "name": "Mineindgang",
                     "terms": "storm,regn,afløb"
                 },
                 "natural": {
-                    "name": "Naturlig",
-                    "terms": "Naturlig"
+                    "name": "Naturlig"
                 },
                 "natural/bare_rock": {
                     "name": "Klippe",
                     "terms": "Vinforretning, Vinbutik, Vinhandler"
                 },
                 "tourism": {
-                    "name": "Turisme",
-                    "terms": "Turisme"
+                    "name": "Turisme"
                 },
                 "tourism/alpine_hut": {
                     "name": "Bjerghytte",
                     "name": "Kunstværk",
                     "terms": "Skulptur, Statue, Vægmaleri"
                 },
+                "tourism/artwork/sculpture": {
+                    "name": "Skulptur",
+                    "terms": "statue,figur,udskæring,kunst,buste"
+                },
                 "tourism/attraction": {
                     "name": "Turistattraktion",
                     "terms": "Turistattraktion, Seværdighed"
index b2faba99c0d6204e82aae5c4e8b65848d2c1f6cf..3b915a746fb61ce4b26a865976280fd2b4c144e0 100644 (file)
                 "restriction": "Diese Objekte können nicht vereinigt werden, weil damit eine \"{relation}\" Relation beschädigt werden würde.",
                 "relation": "Diese Objekte können nicht vereinigt werden, weil sich Ihre Relations-Rollen widersprechen.",
                 "incomplete_relation": "Diese Objekte können nicht vereinigt werden, weil mindestens eines noch nicht vollständig heruntergeladen wurde.",
-                "conflicting_tags": "Diese Objekte können nicht vereinigt werden, weil es Eigenschaften mit widersprechenden Werten gibt."
+                "conflicting_tags": "Diese Objekte können nicht vereinigt werden, weil es Eigenschaften mit widersprechenden Werten gibt.",
+                "paths_intersect": "Diese Objekte können nicht vereinigt werden, weil sich der entstehende Weg selbst kreuzen würde."
             },
             "move": {
                 "title": "Verschieben",
                     "multiple": "Diese Objekte können nicht verschoben werden, weil sie nicht vollständig heruntergeladen wurden."
                 },
                 "too_large": {
-                    "single": "Dieses Objekt kann nicht bewegt werden, weil momentan nicht genug davon sichtbar ist.",
-                    "multiple": "Diese Objekte können nicht bewegt werden, weil momentan nicht genug davon sichtbar ist."
+                    "single": "Dieses Objekt kann nicht verschoben werden, weil momentan nicht genug davon sichtbar ist.",
+                    "multiple": "Diese Objekte können nicht verschoben werden, weil momentan nicht genug davon sichtbar ist."
                 },
                 "connected_to_hidden": {
                     "single": "Dieses Objekt kann nicht verschoben werden, weil es mit einem versteckten Objekt verbunden ist.",
             "modified": "Geändert",
             "deleted": "Gelöscht",
             "created": "Erstellt",
+            "outstanding_errors_message": "Bitte zuerst alle Fehler bereinigen, {count} verbleibend.",
+            "comment_needed_message": "Bitte zuerst einen Änderungssatz-Kommentar hinzufügen.",
             "about_changeset_comments": "Über Änderungssatz-Kommentare",
             "about_changeset_comments_link": "//wiki.openstreetmap.org/wiki/DE:Good_changeset_comments",
             "google_warning": "Du hast Google in diesem Kommentar erwähnt: Vergiss bitte nicht, dass das Kopieren von Google Maps streng verboten ist.",
                 "key": "Z",
                 "title": "Zoome dorthin",
                 "tooltip_feature": "Zentriere die Karte und zoome zu diesem Objekt.",
-                "tooltip_note": "Zentriere die Karte und zoome zu dieser Notiz.",
+                "tooltip_note": "Zentriere die Karte und zoome zu diesem Hinweis.",
                 "tooltip_data": "Zentriere die Karte und zoome zu diesen Daten.",
                 "tooltip_issue": "Zentriere die Karte und zoome zu diesem Problem."
             },
-            "no_documentation_combination": "Für diese Eigenschaftenkombination ist keine Dokumentation verfügbar.",
-            "no_documentation_key": "Für dieses Schlüsselwort ist keine Dokumentation verfügbar.",
             "show_more": "Mehr zeigen",
             "view_on_osm": "Auf openstreetmap.org ansehen",
             "view_on_keepRight": "Auf keepright.at ansehen",
             "role": "Rolle",
             "choose": "Objekttyp auswählen",
             "results": "{n} Ergebnisse für {search}",
-            "reference": "Im OpenStreetMap-Wiki ansehen",
-            "edit_reference": "Beschreibung bearbeiten oder übersetzen",
+            "no_documentation_key": "Dazu ist keine Dokumentation verfügbar.",
+            "edit_reference": "bearbeite/übersetze",
             "wiki_reference": "Dokumentation ansehen",
             "wiki_en_reference": "Dokumentation auf Englisch ansehen",
+            "hidden_preset": {
+                "manual": "{features} sind versteckt, Schalte sie beim Kartendaten-Feld ein.",
+                "zoom": "{features} sind versteckt. Zoome hinein um sie zu sehen."
+            },
             "back_tooltip": "Objekt ändern",
             "remove": "Entfernen",
             "search": "Suchen",
                     "title": "OpenStreetMap Hinweise"
                 },
                 "keepRight": {
-                    "tooltip": "Automatisch gefundene Kartenprobleme von keepright.at",
+                    "tooltip": "Automatisch gemeldte Kartenprobleme von keepright.at",
                     "title": "KeepRight Probleme"
                 },
+                "improveOSM": {
+                    "tooltip": "Fehlende Daten automatisch gemeldet von improveosm.org",
+                    "title": "ImproveOSM Probleme"
+                },
                 "custom": {
                     "tooltip": "Ziehe ein Datenfile per Drag & Drop auf die Seite oder  klicke den Knopf zum Einstellen",
                     "title": "Benutzerdefinierte Kartendaten",
                 "tooltip": "Stromleitungen, Kraftwerke, Umspannwerke usw."
             },
             "past_future": {
-                "description": "Vergangen/Zukünftig",
+                "description": "Voriges/Nächstes Objekt",
                 "tooltip": "Geplant, in Bau, aufgegeben, abgerissen usw."
             },
             "others": {
-                "description": "Andere",
+                "description": "Andere Objekte",
                 "tooltip": "Alles andere"
             }
         },
             "conflict_progress": "Konflikte prüfen: {num} von {total}",
             "unsaved_changes": "Ungesicherte Änderungen vorhanden",
             "conflict": {
-                "header": "Bearbeitungskonflikte auflösen",
+                "header": "Bearbeitungskonflikte bereinigen",
                 "count": "Konflikt {num} von {total}",
                 "previous": "< Vorheriger",
                 "next": "Nächster >",
                 "restore": "Wiederherstellen",
                 "delete": "Gelöscht lassen",
                 "download_changes": "oder osmChange File herunterladen",
-                "done": "Alle Konflikte aufgelöst!",
+                "done": "Alle Konflikte bereinigt!",
                 "help": "Ein anderer Benutzer hat einige der gleichen Objekte geändert, die du geändert hast.\nKlicke unten auf jedes Objekt für weitere Details über den Konflikt und wähle aus,\nob deine Änderungen oder die Änderungen des anderen Benutzers behalten werden sollen.\n"
             }
         },
             "on_wiki": "{tag} auf wiki.osm.org",
             "used_with": "benutzt mit {type}"
         },
-        "validations": {
-            "disconnected_highway": "Nicht verbundene Straße",
-            "disconnected_highway_tooltip": "Wege sollen mit anderen Wegen oder Gebäudeeingängen verbunden sein.",
-            "generic_name": "Möglicher generischer Name",
-            "generic_name_tooltip": "Dieses Objekt scheint einen generischen Namen \"{name}\" zu habe. Bitte den offiziellen Namen nur in der Eigenschaft „name“ eintragen.",
-            "old_multipolygon": "Äußere Fläche des Multipolygons hat Eigenschaften",
-            "old_multipolygon_tooltip": "Dieser Multipolygonstil ist veraltet. Bitte trage die Eigenschaften beim übergeordneten Multipolygon und nicht bei der äußeren Fläche ein.",
-            "untagged_point": "Punkt ohne Eigenschaft",
-            "untagged_point_tooltip": "Wähle einen Objekttyp aus, der diesen Punkt beschreibt.",
-            "untagged_line": "Linie ohne Eigenschaft",
-            "untagged_line_tooltip": "Wähle einen Objekttyp aus, der diese Linie beschreibt.",
-            "untagged_area": "Fläche ohne Eigenschaft",
-            "untagged_area_tooltip": "Wähle einen Objekttyp aus, der diese Fläche beschreibt.",
-            "untagged_relation": "Relation ohne Eigenschaft",
-            "untagged_relation_tooltip": "Wähle einen Objekttyp aus, der diese Relation beschreibt.",
-            "many_deletions": "Du willst {n} Objekte löschen: {p} Knoten, {l} Linien, {a} Flächen und {r} Relationen. Bist du sicher, dass du das möchtest? Damit werden alle diese Objekte aus der Karte entfernt, die alle Anderen auf openstreetmap.org sehen.",
-            "tag_suggests_area": "Die Eigenschaft {tag} legt nahe, dass die Linie eine Fläche sein sollte, es ist aber keine Fläche",
-            "deprecated_tags": "Veraltete Eigenschaften: {tags}"
-        },
         "zoom": {
             "in": "Hineinzoomen",
             "out": "Herauszoomen"
         "cannot_zoom": "Du kannst im aktuellen Modus nicht weiter herauszoomen.",
         "full_screen": "Vollbildmodus ein-/ausschalten",
         "QA": {
+            "improveOSM": {
+                "title": "ImproveOSM Meldungen",
+                "geometry_types": {
+                    "path": "Wege",
+                    "parking": "Parken",
+                    "road": "Straßen",
+                    "both": "Straßen und Parken"
+                },
+                "directions": {
+                    "east": "Ost",
+                    "north": "Nord",
+                    "northeast": "Nordost",
+                    "northwest": "Nordwest",
+                    "south": "Süd",
+                    "southeast": "Südost",
+                    "southwest": "Südwest",
+                    "west": "West"
+                },
+                "error_types": {
+                    "ow": {
+                        "title": "Fehlende Einbahn",
+                        "description": "Entland diesem Abschnitt von {highway} führen {percentage}% der {num_trips} aufgezeichneten Fahrten von {from_node} nach {to_node}. Eine Einbahn (Eigenschaft \"oneway\") könnte fehlen."
+                    },
+                    "mr": {
+                        "title": "Fehlende Geometrie",
+                        "description": "{num_trips} aufgezeichnete Fahrten in dieser Gegend weisen darauf hin, dass hier ein {geometry_type} fehlt.",
+                        "description_alt": "Daten von Dritten legen nahe, dass {geometry_type} hier fehlen könnte."
+                    },
+                    "tr": {
+                        "title": "Fehlende Abbiegebeschränkung",
+                        "description": "{num_passed} von {num_trips} aufgezeichneten Fahrten (Richtung {travel_direction}) biegen an {junction} von {from_way} nach {to_way} ab. Eine Abbiegebeschränkung \"{turn_restriction}\" könnte hier fehlen."
+                    }
+                }
+            },
             "keepRight": {
                 "title": "KeepRight Fehler",
                 "detail_title": "Fehler",
                     },
                     "190": {
                         "title": "Kreuzung nicht verbundener Wege",
-                        "description": "{var1} schneidet {var2} {var3}, aber es gibt keinen Kreuzungspunkt, keine Brücke und keinen Tunnel."
+                        "description": "{var1} kreuzt {var2} {var3}, aber es gibt keinen Kreuzungspunkt, keine Brücke und keinen Tunnel."
                     },
                     "200": {
                         "title": "Überlagerte Wege.",
                     },
                     "300": {
                         "title": "Eigenschaft „maxspeed“ fehlt",
-                        "description": "{var1} fehlt die Eigenschaft \"maxspeed\", ob es eine eine Autobahn, Schnellstraße oder eine andere hochrangige Straße ist."
+                        "description": "{var1} fehlt die Eigenschaft \"maxspeed\" und ist eine Autobahn, Schnellstraße oder eine andere hochrangige Straße."
                     },
                     "310": {
                         "title": "Kreisverkehrs-Problem",
                     },
                     "313": {
                         "title": "Kreisverkehr schwach verbunden",
-                        "description": "{var1} hat nur {var2} andere Straße(n) Verbunden, Kreisverkehre haben üblicherweise 3 oder mehr."
+                        "description": "{var1} ist nur mit {var2} andere Straße(n) verbunden, Kreisverkehre haben üblicherweise 3 oder mehr verbundene Straßen."
                     },
                     "320": {
                         "title": "Ungeeignete Anschluss-Verbindung",
                 "select_right_click": "{rightclick} Rechtsklicke auf ein Objekt um das *Bearbeitungs-Menü* zu sehen, welches dir die verfügbaren Befehle wie Drehen, Bewegen oder Löschen zeigt.",
                 "multiselect_h": "Mehrfachauswahl",
                 "multiselect_shift_click": "`{shift}`+{leftclick} Klicken kann mehrere Objekte gemeinsam auswählen. Damit können diese leicht gemeinsam verschoben, gedreht oder gelöscht werden.",
-                "multiselect_lasso": "Eine andere Möglichkeit mehrere Objekte gemeinsam auszuwählen ist die `{shift}` Taste zu halten, dann die {leftclick} linke Maustaste festzuhalten und mit der Maus ein Auswahl-Lasso um die Objekte zu ziehen. Alle Punkte innerhalb des Lasso werden ausgewählt.",
+                "multiselect_lasso": "Eine andere Möglichkeit mehrere Objekte gemeinsam auszuwählen ist die `{shift}` Taste zu halten, dann die {leftclick} linke Maustaste festzuhalten und mit der Maus ein Auswahl-Lasso um die Objekte zu zeichnen. Alle Punkte innerhalb des Lasso werden ausgewählt.",
                 "undo_redo_h": "Rückgängig & Wiederherstellen",
                 "undo_redo": "Deine Bearbeitungen werden lokal in deinem Web Browser gespeichert bis du diese auf dem OpenStreetMap Server speicherst. Du kannst Bearbeitungen durch Klicken des {undo} **Rückgängig** Knopf rückgängig machen und durch Klicken des {redo} **Wiederherstellen** Knopf wiederherstellen.",
                 "save_h": "Speichern",
             },
             "qa": {
                 "title": "Qualitätssicherung",
-                "intro": "*Qualitäts-Sicherung* (QS) Werkzeuge können unpassende Eigeschaften, nicht verbundene Straßen und andere Probleme mit OpenStreetMap finden, die dann von Mappern verbessern werden können. Um solche QS-Probleme zu sehen klicke den {data} **Kartendaten*-Feld um eine spezielle QS-Ebene einzuschalten.",
+                "intro": "Werkzeuge zur *Qualitätssicherung* (QS) können unpassende Eigeschaften, nicht verbundene Straßen und andere Probleme mit OpenStreetMap finden, die dann von Mappern verbessern werden können. Um solche QS-Probleme zu sehen klicke das {data} **Kartendaten**-Feld um eine spezielle QS-Ebene einzuschalten.",
                 "tools_h": "Werkzeuge",
-                "tools": "Die folgenden Werkzeuge werden aktuell unterstützt: [KeepRight](https://www.keepright.at/). iD wird [Osmose](https://osmose.openstreetmap.fr/), [ImproveOSM](https://improveosm.org/en/) und weitere Qualitätssicherungs-Werkzeuge in Zukunft unterstützen.",
+                "tools": "Die folgenden Werkzeuge werden aktuell unterstützt:  [KeepRight](https://www.keepright.at/) und [ImproveOSM](https://improveosm.org/en/). iD wird [Osmose](https://osmose.openstreetmap.fr/) und weitere QS-Werkzeuge in Zukunft unterstützen.",
                 "issues_h": "Problembehandlung",
-                "issues": "QS-Probleme werden ähnlich wie Notizen bearbeitet. Klicke auf einen Marker um die Details in der Seitenleiste zu sehen. Jedes QS-Werkzeug hat seine eigenen Möglichkeiten, aber generell kannst du Probleme kommentieren und/oder schließen."
+                "issues": "QS-Probleme werden ähnlich wie Hinweise bearbeitet. Klicke auf einen Marker um die Details in der Seitenleiste zu sehen. Jedes QS-Werkzeug hat seine eigenen Möglichkeiten, aber generell kannst du Probleme kommentieren und/oder schließen."
             },
             "field": {
                 "restrictions": {
                         "title": "Informationen",
                         "about": "Dieses Feld erlaubt es Abbiegebeschränkungen zu prüfen und zu ändern. Es zeigt ein Modell der ausgewählten Kreuzung mit den angrenzenden Straßen.",
                         "from_via_to": "Eine Abbiegebeschränkung beinhaltet immer: einen  **VON Weg**, einen **Nach Weg** und entweder einen **VIA Knoten** oder einen oder mehrere **VIA Wege**.",
-                        "maxdist": "Die \"{distField}\" Schieberegler bestimmen, wie weit nach angrenzenden Straßen gesucht wird.",
+                        "maxdist": "Die \"{distField}\" Schieberegler bestimmen, wie weit nach verbundenen Straßen gesucht wird.",
                         "maxvia": "Die \"{viaField}\" Schieberegler bestimmen, wie viele Zwischenwege in die Suche einbezogen werden. (Tipp: Einfacher ist besser)"
                     },
                     "inspecting": {
                 }
             }
         },
+        "issues": {
+            "title": "Problem",
+            "key": "P",
+            "list_title": "Probleme ({count})",
+            "errors": {
+                "list_title": "Fehler ({count})"
+            },
+            "warnings": {
+                "list_title": "Warnungen ({count})"
+            },
+            "no_issues": {
+                "message": "Alles sieht gut aus",
+                "info": "Probleme werden während des Bearbeiten hier angezeigt"
+            },
+            "almost_junction": {
+                "message": "{feature} ist sehr nahe zu {feature2}, aber nicht verbunden",
+                "highway-highway": {
+                    "tip": "Kreuzende Straßen benötigen einen Kreuzungsknoten."
+                }
+            },
+            "crossing_ways": {
+                "message": "{feature} kreuzt {feature2}",
+                "building-building": {
+                    "tip": "Gebäude sollen sich nicht überschneiden, ausgenommen bei verschiedenen Ebenen"
+                },
+                "building-highway": {
+                    "tip": "Straßen die Gebäude kreuzen sollten Brücken, Tunnel, Abdeckungen oder Einfahrten benutzen."
+                },
+                "building-railway": {
+                    "tip": "Eisenbahnen die Gebäude kreuzen sollten Brücken oder Tunnel benutzen."
+                },
+                "building-waterway": {
+                    "tip": "Wasserwege die Gebäude kreuzen sollten Tunnel oder verschiedene Ebenen benutzen."
+                },
+                "highway-highway": {
+                    "tip": "Kreuzende Straßen sollten Brücken, Tunnel oder Kreuzungen benutzen."
+                },
+                "highway-railway": {
+                    "tip": "Straßen die Eisenbahnen kreuzen sollten Brücken, Tunnel oder Bahnübergänge benutzen."
+                },
+                "highway-waterway": {
+                    "tip": "Straßen die Wasserwege kreuzen sollten Brücken, Tunnel oder Furten benutzen."
+                },
+                "railway-railway": {
+                    "tip": "Kreuzende Eisenbahnen sollten verbunden sein oder Brücken oder Tunnel benutzen."
+                },
+                "railway-waterway": {
+                    "tip": "Eisenbahnen die Wasserwege kreuzen sollten Brücken oder Tunnel benutzen."
+                },
+                "waterway-waterway": {
+                    "tip": "Kreuzende Wasserwege sollten verbunden sein oder Tunnel benutzen."
+                },
+                "tunnel-tunnel": {
+                    "tip": "Kreuzende Tunnel sollten verschiedene Ebenen benutzen."
+                },
+                "tunnel-tunnel_connectable": {
+                    "tip": "Kreuzende Tunnel sollten verbunden sein oder verschiedene Ebenen benutzen."
+                },
+                "bridge-bridge": {
+                    "tip": "Kreuzende Brücken sollten verschiedene Ebenen benutzen."
+                },
+                "bridge-bridge_connectable": {
+                    "tip": "Kreuzende Brücken sollten verbunden sein oder verschiedene Ebenen benutzen."
+                },
+                "indoor-indoor": {
+                    "tip": "Kreuzende Objekte in Gebäuden sollten verschiedene Stockwerke benutzen."
+                },
+                "indoor-indoor_connectable": {
+                    "tip": "Kreuzende Objekte in Gebäuden sollten verbunden sein oder verschiedene Stockwerke benutzen."
+                }
+            },
+            "deprecated_tag": {
+                "single": {
+                    "message": "{feature} hat die veraltete Eigenschaft \"{tag}\""
+                },
+                "combination": {
+                    "message": "{feature} hat die veraltete Eigenschaftskombination \"{tag}\""
+                },
+                "tip": "Manche Eigenschaften werden im Laufe der Zeit veraltet und sollten ausgetauscht werden."
+            },
+            "disconnected_way": {
+                "highway": {
+                    "message": "{highway} ist nicht mit anderen Straßen oder Wegen verbunden",
+                    "tip": "Wege sollten mit anderen Wegen oder mit Gebäude-Eingängen verbunden sein."
+                }
+            },
+            "generic_name": {
+                "message": "{feature} hat den generischen Namen \"{name}\"",
+                "tip": "Name sollten tatsächlich Objekte vor Ort bezeichnen."
+            },
+            "many_deletions": {
+                "points-lines-areas": {
+                    "message": "Lösche {n} Objekte: {p} Punkte, {l} Linien und {a} Flächen"
+                },
+                "points-lines-areas-relations": {
+                    "message": "Lösche {n} Objekte: {p} Punkte, {l} Linien, {a} Flächen und {r} Relationen"
+                },
+                "tip": "Nur mehrfach erfasst oder in der realen Welt nicht vorhandene Objekte sollten gelöscht werden."
+            },
+            "missing_tag": {
+                "any": {
+                    "message": "{feature} hat keine Eigenschaften"
+                },
+                "descriptive": {
+                    "message": "{feature} hat keine beschreibenden Eigenschaften"
+                },
+                "specific": {
+                    "message": "{feature} fehlt die \"{tag}\" Eigenschaft"
+                },
+                "tip": "Objekte brauchen Eigenschaften die beschreiben was sie sind."
+            },
+            "old_multipolygon": {
+                "message": "{multipolygon} hat unpassende Eigenschaften",
+                "tip": "Multipolygone sollten Eigenschaften in der Relation und nicht an der äußeren Fläche haben."
+            },
+            "tag_suggests_area": {
+                "message": "{feature} sollte eine geschlossene Fläche mit der Eigenschaft \"{tag}\" sein",
+                "tip": "Flächen müssen verbundene Endpunkte haben"
+            },
+            "fix": {
+                "connect_almost_junction": {
+                    "annotation": "Sehr nahe Objekte verbunden."
+                },
+                "connect_crossing_features": {
+                    "annotation": "Kreuzende Objekte verbunden."
+                },
+                "connect_endpoints": {
+                    "title": "Enden verbunden",
+                    "annotation": "Endpunkte eines Weges verbunden."
+                },
+                "connect_features": {
+                    "title": "Objekte verbinden"
+                },
+                "continue_from_start": {
+                    "title": "Zeichnen am Anfang fortsetzen"
+                },
+                "continue_from_end": {
+                    "title": "Zeichnen am Ende fortsetzen"
+                },
+                "delete_feature": {
+                    "title": "Lösche dieses Objekt"
+                },
+                "move_tags": {
+                    "title": "Verschiebe die Eigenschaften",
+                    "annotation": "Eigenschaften verschoben"
+                },
+                "remove_deprecated_tag": {
+                    "annotation": "Veraltete Eigenschaft entfernt."
+                },
+                "remove_deprecated_tag_combo": {
+                    "annotation": "Veraltete Eigenschaftskombination entfernt."
+                },
+                "remove_generic_name": {
+                    "title": "Namen entfernt",
+                    "annotation": "Generischer Name entfernt"
+                },
+                "remove_tag": {
+                    "title": "Entferne die Eigenschaft",
+                    "annotation": "Eigenschaft entfernt"
+                },
+                "remove_tags": {
+                    "title": "Entferne die Eigenschaften"
+                },
+                "reposition_features": {
+                    "title": "Objekt neu positionieren"
+                },
+                "select_preset": {
+                    "title": "Wähle einen Objekttyp"
+                },
+                "tag_as_disconnected": {
+                    "title": "Erfasse als \"getrennt\".",
+                    "annotation": "Sehr nahe Objekte wurden als \"getrennt\" erfasst."
+                },
+                "upgrade_tag": {
+                    "title": "Aktualisiere die Eigenschaft",
+                    "annotation": "Veraltete Eigenschaft aktualisiert."
+                },
+                "upgrade_tag_combo": {
+                    "title": "Aktualisiere die Eigenschaften",
+                    "annotation": "Veraltete Eigenschaftskombination aktualisiert."
+                },
+                "use_bridge_or_tunnel": {
+                    "title": "Benutze eine Brücke oder einen Tunnel"
+                },
+                "use_different_layers": {
+                    "title": "Benutzer verschiede Ebenen"
+                },
+                "use_different_levels": {
+                    "title": "Benutze verschiedene Stockwerke"
+                },
+                "use_tunnel": {
+                    "title": "Benutze einen Tunnel"
+                }
+            }
+        },
         "intro": {
             "done": "Fertig",
             "ok": "OK",
                 "rightclick_building": "**Rechtsklicke auf das gerade erzeugte Gebäude um es auszuwählen und zeige das Bearbeitungs-Menü.**",
                 "square_building": "Das gerade gezeichnete Haus sieht besser aus, wenn es perfekt rechtwinklige Ecken hat. **Klicke auf den {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äudes auf die richtige Stelle gerückt sind? Lass uns einen weiteren nützlichen Trick lernen.",
+                "done_square": "Siehst du, wie die Ecken des Gebäudes auf die richtige Stelle verschoben wurden? Lass uns einen weiteren nützlichen Trick lernen.",
                 "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": "Keine Sorge, 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 Tanks 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.**",
                 "category-building": {
                     "name": "Gebäude"
                 },
-                "category-golf": {
-                    "name": "Golfplatz"
+                "category-golf-area": {
+                    "name": "Golf Objekte"
+                },
+                "category-golf-line": {
+                    "name": "Golf Objekte"
                 },
                 "category-landuse": {
                     "name": "Flächennutzung"
                 "denotation": {
                     "label": "Vorgesehene Verwendung"
                 },
+                "departures_board": {
+                    "label": "Abfahrtstafel",
+                    "options": {
+                        "no": "Keines",
+                        "realtime": "Echtzeit",
+                        "timetable": "Fahrplan",
+                        "yes": "Ja"
+                    }
+                },
                 "description": {
                     "label": "Beschreibung"
                 },
                 "junction/ref_oneway": {
                     "label": "Nummer der Ausfahrt"
                 },
+                "junction_line": {
+                    "label": "Kreuzung",
+                    "options": {
+                        "circular": "Kreisverkehr ohne Vorrang",
+                        "jughandle": "Anschlussstelle/Kreuzung",
+                        "roundabout": "Kreisverkehr"
+                    }
+                },
                 "kerb": {
                     "label": "Bordstein"
                 },
                         "underground": "Tiefgarage"
                     }
                 },
-                "passenger_information_display": {
-                    "label": "Fahrgastinformationssystem (Abfahrtsmonitor)"
-                },
                 "payment_multi": {
                     "label": "Zahlungsarten"
                 },
                     },
                     "placeholder": "Bergwandern, alpines Bergwandern..."
                 },
+                "salt": {
+                    "label": "Salz"
+                },
                 "sanitary_dump_station": {
                     "label": "Toilettenentsorgungsanlage"
                 },
                     },
                     "placeholder": "Ja, Nein, Nur Takeaway …"
                 },
+                "tidal": {
+                    "label": "Gezeiten"
+                },
                 "to": {
                     "label": "Nach"
                 },
                 },
                 "website": {
                     "label": "Webseite",
-                    "placeholder": "http://example.com/"
+                    "placeholder": "https://example.com"
                 },
                 "wetland": {
                     "label": "Typ"
                     "name": "Uhr",
                     "terms": "Uhr, Turmuhr, Kirchenuhr"
                 },
+                "amenity/clock/sundial": {
+                    "name": "Sonnenuhr",
+                    "terms": "Sonneuhr,"
+                },
                 "amenity/college": {
                     "name": "Hochschulgelände",
                     "terms": "Schulgelände,Collegegelände,Universitätsgelände"
                     "name": "Kebab Fast Food",
                     "terms": "Kebab Fast Food, Kebapstand, Kebap Takeaway"
                 },
+                "amenity/fast_food/mexican": {
+                    "name": "Mexikanisches Fast Food",
+                    "terms": "Mexikanisches Fast Food"
+                },
                 "amenity/fast_food/pizza": {
                     "name": "Pizza Fast Food",
                     "terms": "Pizza Fast Food, Pizza Takeaway"
                     "name": "Apotheke",
                     "terms": "Apotheke"
                 },
+                "amenity/photo_booth": {
+                    "name": "Fotoautomat",
+                    "terms": "Fotoautomat, Photoautomat, Fotokabine, Photokabine, Fotobox, Photobox, Passbildautomat"
+                },
                 "amenity/place_of_worship": {
                     "name": "Andachtsstätte",
                     "terms": "Abtei,Basilika,geweihter Ort,Kathedrale,Altarraum,Kantorei,Kapelle,Kirche,Kirchgemeinde,Gotteshaus,Gebetshaus,Dom,Moschee,Oratorium,Heiligtum,Sacellum,Schrein,Synagoge,Tabernakel,Tempel"
                     "name": "Bunker (Golf)",
                     "terms": "Bunker, Sandbunker, Sand-Hindernis, Golfbunker"
                 },
+                "golf/cartpath": {
+                    "name": "Golfwagenweg",
+                    "terms": "Golfwagenweg"
+                },
+                "golf/cartpath_service": {
+                    "name": "Golfwagenweg / Zufahrtsweg",
+                    "terms": "Golfwagenweg / Zufahrtsweg"
+                },
+                "golf/driving_range": {
+                    "name": "Golf Driving Range",
+                    "terms": "Golf Driving Range"
+                },
                 "golf/fairway": {
                     "name": "Fairway",
                     "terms": "Golf-Fairway"
                     "name": "Loch",
                     "terms": "Loch"
                 },
-                "golf/lateral_water_hazard_area": {
-                    "name": "seitliche Wasserhindernissfläche",
-                    "terms": "seitliche Wasserhindernissfläche, seitliches Seehinderniss, seitliches Teichhinderniss"
-                },
-                "golf/lateral_water_hazard_line": {
+                "golf/lateral_water_hazard": {
                     "name": "seitliches Wasserhinderniss",
-                    "terms": "seitliches Wasserhinderniss, seitliches Bachhinderniss"
+                    "terms": "seitliches Wasserhinderniss"
+                },
+                "golf/path": {
+                    "name": "Golfplatz-Fußweg",
+                    "terms": "Golfplatz-Fußweg"
                 },
                 "golf/rough": {
                     "name": "Rough",
                     "name": "Abschlag",
                     "terms": "Abschlag"
                 },
-                "golf/water_hazard_area": {
-                    "name": "frontale Wasserhindernissfläche",
-                    "terms": "frontale Wasserhindernissfläche, frontales Seehinderniss, frontales Teichhinderniss"
-                },
-                "golf/water_hazard_line": {
-                    "name": "frontales Wasserhinderniss",
-                    "terms": "frontales Wasserhinderniss, frontales Seehinderniss, frontales Teichhinderniss"
+                "golf/water_hazard": {
+                    "name": "Wasserhinderniss",
+                    "terms": "Wasserhinderniss"
                 },
                 "healthcare": {
                     "name": "Gesundheitseinrichtung",
                     "terms": "Unbekannter Straßentyp, Unbekannte Straße, Straße unbekannter Klassifikation, Straßentyp unbekannt"
                 },
                 "highway/secondary": {
-                    "name": "Landstraße",
+                    "name": "Landesstraße",
                     "terms": "Hauptstraße, Landstraße, Landesstraße, Nebenstraße"
                 },
                 "highway/secondary_link": {
-                    "name": "Landstraßenanschluss",
+                    "name": "Landesstraßenanschluss",
                     "terms": "Landstraßenanschluss, Hauptstraßenanschluss, Hauptstraßenauffahrt, Hauptstraßenabfahrt, Landesstraßenanschluss, Landesstraßenauffahrt, Landesstraßenabfahrt, Auffahrt, Abfahrt"
                 },
                 "highway/service": {
                     "terms": "Kreuzung, Abzweigung, Anschlussstelle, Knotenpunkt, Straßenknotenpunkt"
                 },
                 "landuse": {
-                    "name": "Flächennutzung",
-                    "terms": "Flächennutzung, Raumnutzung, Bodennutzung, Landnutzung"
+                    "name": "Flächennutzung"
                 },
                 "landuse/allotments": {
                     "name": "Kleingartenanlage",
                     "terms": "Weinberg, Weinanbau, Wengert"
                 },
                 "leisure": {
-                    "name": "Freizeit",
-                    "terms": "Freizeit, Erholung"
+                    "name": "Freizeit"
                 },
                 "leisure/adult_gaming_centre": {
                     "name": "Spielothek für Erwachsene",
                     "name": "Picknicktisch",
                     "terms": "Jausentisch, Picknicktisch"
                 },
+                "leisure/picnic_table/chess": {
+                    "name": "Schachtisch",
+                    "terms": "Schachtisch"
+                },
                 "leisure/pitch": {
                     "name": "Sportplatz",
                     "terms": "Sportplatz, Sportfeld, Spielfeld"
                     "name": "Sportzentrum / -komplex",
                     "terms": "Sportzentrum,Sporthalle,Sportplatz,Sportcomplex"
                 },
+                "leisure/sports_centre/climbing": {
+                    "name": "Kletterhalle",
+                    "terms": "Kletterhalle"
+                },
                 "leisure/sports_centre/swimming": {
                     "name": "Badeanstalt",
                     "terms": "Badeanstalt, Schwimmbad, Hallenbad"
                     "terms": "Linie"
                 },
                 "man_made": {
-                    "name": "Bauten",
-                    "terms": "künstlich, Bauwerk"
+                    "name": "Bauten"
                 },
                 "man_made/adit": {
                     "name": "Bergwerk - Stolleneingang",
                     "name": "Turm",
                     "terms": "Turm"
                 },
+                "man_made/tower/bell_tower": {
+                    "name": "Glockenturm",
+                    "terms": "Glockenturm, Kirchturm"
+                },
                 "man_made/tower/communication": {
                     "name": "Kommunikationsturm",
                     "terms": "Antenne, Mobilfunkmast, verankerter Mast, Mobilfunkturm, Radiofunkmast, Radiofunkturm, Fersehfunkmast, Fernsehfunkturm"
                 },
+                "man_made/tower/minaret": {
+                    "name": "Minarett",
+                    "terms": "Minarett"
+                },
                 "man_made/tower/observation": {
                     "name": "Beobachtungsturm",
                     "terms": "Beobachtungsturm, Feuerwehrturm"
                     "terms": "Telekommunikationskabel-Wartungszugang"
                 },
                 "natural": {
-                    "name": "Natur",
-                    "terms": "natürlich"
+                    "name": "Natur"
                 },
                 "natural/bare_rock": {
                     "name": "Felsgestein",
                     "name": "Transformator",
                     "terms": "Transformator, Umspannwerk"
                 },
-                "public_transport/linear_platform": {
-                    "name": "Haltestelle (Wartebereich)",
-                    "terms": "Haltestelle (Wartebereich), Wartebereich einer Haltestelle"
-                },
-                "public_transport/linear_platform_aerialway": {
-                    "name": "Seilbahn-Haltestelle (Wartebereich)",
-                    "terms": "Seilbahn-Haltestelle (Wartebereich), Wartebereich einer Seilbahn-Haltestelle"
-                },
-                "public_transport/linear_platform_bus": {
-                    "name": "Bushaltestelle (Wartebereich)",
-                    "terms": "Bushaltestelle (Wartebereich), Wartebereich einer Bushaltestelle"
-                },
-                "public_transport/linear_platform_ferry": {
-                    "name": "Fähranleger (Wartebereich)",
-                    "terms": "Fähranleger (Wartebereich), Wartebereich eines Fähranlegers"
-                },
-                "public_transport/linear_platform_light_rail": {
-                    "name": "Stadtbahnhaltestelle (Wartebereich)",
-                    "terms": "Stadtbahnhaltestelle (Wartebereich), Wartebereich einer Stadtbahnhaltestelle"
-                },
-                "public_transport/linear_platform_monorail": {
-                    "name": "Einschienenbahn-Bahnsteig (Wartebereich )",
-                    "terms": "Einschienenbahnhaltestelle (Wartebereich), Wartebereich einer Einschienenbahnhaltestelle"
-                },
-                "public_transport/linear_platform_subway": {
-                    "name": "U-Bahn-Bahnsteig (Wartebereich)",
-                    "terms": "U-Bahnhaltestelle (Wartebereich), Wartebereich einer U-Bahnhaltestelle"
-                },
-                "public_transport/linear_platform_train": {
-                    "name": "Bahnsteig (Wartebereich Eisenbahn)",
-                    "terms": "Bahnsteig (Wartebereich), Eisenbahnhaltestelle (Wartebereich), Wartebereich einer Eisenbahnhaltestelle"
-                },
-                "public_transport/linear_platform_tram": {
-                    "name": "Straßenbahnhaltestelle (Wartebereich)",
-                    "terms": "Straßenbahnhaltestelle (Wartebereich), Trambahnhaltestelle (Wartebereich), Wartebereich einer Straßenbahnhaltestelle, Wartebereich einer Trambahnhaltestelle"
-                },
-                "public_transport/linear_platform_trolleybus": {
-                    "name": "Oberleitungsbushaltestelle (Wartebereich)",
-                    "terms": "Oberleitungsbushaltestelle (Wartebereich), Wartebereich einer Oberleitungsbushaltestelle"
-                },
                 "public_transport/platform": {
                     "name": "Haltestelle (Wartebereich)",
                     "terms": "Haltestelle (Wartebereich), Wartebereich einer Haltestelle"
                     "terms": "Weinladen, Weinhandlung, Weinhaus, Enothek"
                 },
                 "tourism": {
-                    "name": "Tourismus",
-                    "terms": "Fremdenverkehr, Tourimus"
+                    "name": "Tourismus"
                 },
                 "tourism/alpine_hut": {
                     "name": "Schutzhütte",
                     "terms": "Verwaltungsgrenze"
                 },
                 "type/enforcement": {
-                    "name": "Verkehrsverstöße",
-                    "terms": "Verkehrsverstöße, Verkehrsverstoß-Dokumentations-Gerät"
+                    "name": "Überwachung",
+                    "terms": "Überwachung, Verkehrsverstoß-Dokumentations-Gerät"
                 },
                 "type/multipolygon": {
                     "name": "Multipolygon"
index 202cca0373a86e154703f4a02569e30295d0973f..f736fe4a0eea40f13346768cb11989e8cbf6181b 100644 (file)
         "browser_notice": "Αυτός ο επεξεργαστής λειτουργεί σε Firefox, Chrome, Safari, Opera και Internet Explorer 11 και άνω. Παρακαλούμε αναβαθμίστε τον φυλλομετρητή σας ή επεξεργαστείτε τον χάρτη με το Potlatch 2.",
         "translate": {
             "translate": "Μεταφράστε",
+            "localized_translation_label": "Πολύγλωσσο Όνομα",
             "localized_translation_language": "Επιλογή γλώσσας",
             "localized_translation_name": "Όνομα"
         },
             "cancel": "Ακύρωση",
             "changes": "{count} Αλλαγές",
             "download_changes": "Κατεβάστε το αρχείο osmChange",
+            "errors": "Σφάλματα",
             "warnings": "Προειδοποιήσεις",
             "modified": "Τροποποιήθηκε",
             "deleted": "Διαγράφηκε",
                 "unknown": "Άγνωστο",
                 "link_text": "Ιστορικό στο openstreetmap.org",
                 "note_comments": "Σχόλια",
+                "note_created_date": "Ημερομηνία Δημιουργίας",
+                "note_created_user": "Δημιουργήθηκε από",
                 "note_link_text": "Σημείωση στο openstreetmap.org"
             },
             "location": {
             "locating": "Εντοπισμός, παρακαλώ περιμένετε..."
         },
         "inspector": {
-            "no_documentation_combination": "Δεν υπάρχει διαθέσιμη τεκμηρίωση για αυτόν τον συνδυασμό ετικετών",
-            "no_documentation_key": "Δεν υπάρχει διαθέσιμη τεκμηρίωση για αυτό το κλειδί",
+            "zoom_to": {
+                "title": "Εστίαση σε "
+            },
             "show_more": "Εμφάνιση Περισσότερων",
             "view_on_osm": "Προβολή στο openstreetmap.org",
             "all_fields": "Όλα τα πεδία",
             "role": "Ρόλος",
             "choose": "Επιλογή τύπου χαρακτηριστικού",
             "results": "{n} αποτελέσματα για {search}",
-            "reference": "Προβολή στο Wiki του OpenStreetMap",
             "back_tooltip": "Αλλαγή χαρακτηριστικού",
             "remove": "Αφαίρεση",
             "search": "Αναζήτηση",
                 "tooltip": "Γραμμές Μεταφοράς Ρεύματος, Μονάδες Ηλεκτροπαραγωγής, Υποσταθμοί, κτλ."
             },
             "past_future": {
-                "description": "Παρελθόν/Μέλλον",
                 "tooltip": "Προτεινόμενο, Υπό Κατασκευή, Εγκαταλειμμένο, Κατεδαφισμένο, κλπ."
             },
             "others": {
-                "description": "Άλλα",
+                "description": "Άλλα Χαρακτηριστικά",
                 "tooltip": "Όλα τα υπόλοιπα"
             }
         },
             "on_wiki": "{tag} στο wiki.osm.org",
             "used_with": "χρησιμοποιείται με {type}"
         },
-        "validations": {
-            "disconnected_highway": "Αποσυνδεδεμένη οδός",
-            "disconnected_highway_tooltip": "Οι δρόμοι θα πρέπει να συνδέονται με άλλους δρόμους ή με εισόδους κτιρίων.",
-            "untagged_point": "Σημείο χωρίς ετικέτα",
-            "untagged_point_tooltip": "Επιλέξτε ένα τύπο χαρακτηριστικού που περιγράφει τι είναι αυτό το σημείο.",
-            "untagged_line": "Γραμμή χωρίς ετικέτα",
-            "untagged_line_tooltip": "Επιλέξτε ένα τύπο χαρακτηριστικού που περιγράφει τι είναι αυτή η γραμμή.",
-            "untagged_area": "Περιοχή χωρίς ετικέτα",
-            "untagged_area_tooltip": "Επιλέξτε ένα τύπο χαρακτηριστικού που περιγράφει τι είναι αυτή η περιοχή.",
-            "untagged_relation_tooltip": "Επιλέξτε ένα τύπο χαρακτηριστικού που περιγράφει τι είναι αυτή η σχέση.",
-            "many_deletions": "Διαγράφετε {n} χαρακτηριστικά: {p} κόμβους, {l} γραμμές, {a} περιοχές, {r} σχέσεις. Είστε βέβαιοι ότι θέλετε να το κάνετε αυτό; Αυτό θα τα διαγράψει από το χάρτη που βλέπουν όλοι οι άλλοι στο openstreetmap.org.",
-            "tag_suggests_area": "Η ετικέτα {tag} προτείνει ότι η γραμμή πρέπει να είναι περιοχή, αλλά δεν είναι περιοχή",
-            "deprecated_tags": "Παρωχημένες ετικέτες: {tags}"
-        },
         "zoom": {
             "in": "Μεγέθυνση",
             "out": "Απομάκρυνση"
                 "category-building": {
                     "name": "Χαρακτηριστικά Κτηρίου"
                 },
-                "category-golf": {
-                    "name": "Στοιχεία Γκολφ"
-                },
                 "category-landuse": {
                     "name": "Χαρακτηρισμός Χρήσης Γης"
                 },
                 "animal_shelter": {
                     "label": "Για Ζώα"
                 },
+                "architect": {
+                    "label": "Αρχιτέκτονας"
+                },
                 "area/highway": {
                     "label": "Είδος"
                 },
                 "junction/ref_oneway": {
                     "label": "Αριθμός Κόμβου"
                 },
+                "junction_line": {
+                    "label": "Κόμβος",
+                    "options": {
+                        "circular": "Κυκλική Κυκλοφορία",
+                        "roundabout": "Κυκλική Πορεία"
+                    }
+                },
                 "kerb": {
                     "label": "Κράσπεδο"
                 },
                         "underground": "Υπόγειο"
                     }
                 },
-                "passenger_information_display": {
-                    "label": "Οθόνη Ενημέρωσης Επιβατών"
-                },
                 "payment_multi": {
                     "label": "Τρόποι Πληρωμής"
                 },
                 "piste/difficulty": {
                     "label": "Δυσκολία",
                     "options": {
+                        "easy": "Εύκολο",
+                        "expert": "Έμπειρο",
+                        "extreme": "Ακραίο",
+                        "intermediate": "Μέτριο",
                         "novice": "Αρχάριο"
                     },
                     "placeholder": "Εύκολος, Μέσο, Ανώτερο"
                         "classic": "Κλασικό"
                     }
                 },
+                "piste/grooming_downhill": {
+                    "options": {
+                        "classic": "Κλασσική"
+                    }
+                },
+                "piste/grooming_nordic": {
+                    "options": {
+                        "classic": "Κλασσική"
+                    }
+                },
                 "piste/type": {
                     "label": "Τύπος",
                     "options": {
+                        "downhill": "Κατηφορικό",
                         "hike": "Πεζοπορία",
+                        "ice_skate": "Παγοπέδιλο",
+                        "nordic": "Σκανδιναβικό",
                         "playground": "Παιδική Χαρά",
                         "snow_park": "Πάρκο Χιονιού"
                     }
                     "label": "Είδος"
                 },
                 "railway/position": {
-                    "label": "Χιλιομετρικό Σημείο"
+                    "label": "Χιλιομετρικό Σημείο",
+                    "placeholder": "Απόσταση μέχρι δεκαδικού (123.4)"
                 },
                 "railway/signal/direction": {
                     "label": "Κατεύθυνση",
                     "label": "Αριθμός Δρομολογίου"
                 },
                 "ref_runway": {
-                    "label": "Αριθμός Αεροδιαδρόμου"
+                    "label": "Αριθμός Αεροδιαδρόμου",
+                    "placeholder": "π.χ. 01L/19R"
                 },
                 "ref_stop_position": {
                     "label": "Αριθμός Στάσης"
                 "restrictions": {
                     "label": "Απαγορεύσεις Στροφών"
                 },
+                "roof/colour": {
+                    "label": "Χρώμα Οροφής"
+                },
                 "rooms": {
                     "label": "Δωμάτια"
                 },
                     },
                     "placeholder": "Ορειβασία, Αλπική Πεζοπορία..."
                 },
+                "salt": {
+                    "label": "Αλάτι"
+                },
                 "sanitary_dump_station": {
                     "label": "Διαθέσιμη Τουαλέτα"
                 },
                 "scuba_diving": {
                     "label": "Υπηρεσίες"
                 },
+                "seamark/beacon_isolated_danger/shape": {
+                    "label": "Σχήμα"
+                },
                 "seamark/beacon_lateral/category": {
                     "label": "Κατηγορία",
                     "options": {
                 "seamark/buoy_lateral/category": {
                     "label": "Κατηγορία",
                     "options": {
-                        "starboard": "Δεξιά πλευρά πλοίου"
+                        "channel_left": "Αριστερό Κανάλι",
+                        "channel_right": "Δεξί Κανάλι",
+                        "danger_left": "Κίνδυνος Αριστερά ",
+                        "danger_right": "Κίνδυνος Δεξιά",
+                        "port": "Είσοδος",
+                        "preferred_channel_port": "Προτιμώμενο Κανάλι Εισόδου",
+                        "starboard": "Δεξιά πλευρά πλοίου",
+                        "waterway_left": "Αριστερός Υδατόδρομος",
+                        "waterway_right": "Δεξιός Υδατόδρομος"
                     }
                 },
                 "seamark/buoy_lateral/colour": {
                     "label": "Σχήμα"
                 },
                 "seamark/buoy_lateral/system": {
-                    "label": "Σύστημα"
+                    "label": "Σύστημα",
+                    "options": {
+                        "cevni": "CEVNI",
+                        "iala-a": "IALA A",
+                        "iala-b": "IALA B",
+                        "other": "Άλλο"
+                    }
+                },
+                "seamark/mooring/category": {
+                    "label": "Κατηγορία"
+                },
+                "seamark/type": {
+                    "label": "Σημαδούρα"
+                },
+                "seamark/wreck/category": {
+                    "label": "Κατηγορία"
                 },
                 "seasonal": {
                     "label": "Εποχιακή"
                 },
                 "seats": {
-                    "label": "Καθίσματα"
+                    "label": "Καθίσματα",
+                    "placeholder": "2, 4, 6..."
                 },
                 "second_hand": {
                     "label": "Πώληση Μεταχειρισμένων",
                     "label": "Σκοπός"
                 },
                 "siren/type": {
+                    "label": "Τύπος",
                     "options": {
                         "electronic": "Ηλεκτρονική",
                         "other": "Άλλο",
                     "label": "Πινακίδα Κίνησης"
                 },
                 "traffic_sign/direction": {
+                    "label": "Κατεύθυνση",
                     "options": {
-                        "both": "Και οι δύο / 'Ολα"
+                        "backward": "Προς το πίσω",
+                        "both": "Και οι δύο / 'Ολα",
+                        "forward": "Προς τα εμπρός"
                     }
                 },
                 "traffic_signals": {
                 "transformer": {
                     "label": "Είδος",
                     "options": {
+                        "auto": "Αυτομετατροπή",
                         "auxiliary": "Βοηθητικό",
                         "converter": "Μετατροπέας",
                         "distribution": "Διανομή",
                 },
                 "website": {
                     "label": "Ιστοσελίδα",
-                    "placeholder": "http://example.com/"
+                    "placeholder": "https://example.com"
                 },
                 "wetland": {
                     "label": "Είδος"
                 "width": {
                     "label": "Πλάτος (Μέτρα)"
                 },
+                "wikidata": {
+                    "label": "Wikidata"
+                },
                 "wikipedia": {
                     "label": "Βικιπαίδεια"
                 },
+                "windings": {
+                    "placeholder": "1, 2, 3..."
+                },
                 "windings/configuration": {
                     "options": {
                         "delta": "Δέλτα",
                 "amenity": {
                     "name": "Υποδομή"
                 },
+                "amenity/animal_boarding": {
+                    "name": "Επιθεώρηση Ζώων"
+                },
+                "amenity/animal_breeding": {
+                    "name": "Εκτροφείο"
+                },
                 "amenity/animal_shelter": {
                     "name": "Καταφύγιο Ζώων"
                 },
                     "name": "Ενοικιαζόμενα Ποδηλάτα",
                     "terms": "Κοινόχρηστα Ποδήλατα, Ενοικίαση Ποδηλάτων"
                 },
+                "amenity/bicycle_repair_station": {
+                    "name": "Πάγκος Επισκευής Ποδηλάτων"
+                },
                 "amenity/boat_rental": {
                     "name": "Ενοικίαση Σκαφών"
                 },
                 "amenity/fast_food/kebab": {
                     "name": "Ταχυφαγίο με Κεμπάπ"
                 },
+                "amenity/fast_food/mexican": {
+                    "name": "Μεξικανικό Ταχυφαγείο"
+                },
                 "amenity/fast_food/pizza": {
                     "name": "Ταχυφαγίο με Πίτσα"
                 },
                     "name": "Αγορά",
                     "terms": "Αγορά, Λαϊκή, λαική, παζάρι"
                 },
+                "amenity/monastery": {
+                    "name": "Ιερά Μονή"
+                },
                 "amenity/money_transfer": {
                     "name": "Ανταλλακτήρια Συναλλάγματος"
                 },
                 "amenity/pharmacy": {
                     "name": "Πάγκος Φαρμακείου"
                 },
+                "amenity/photo_booth": {
+                    "name": "Φωτογραφικός Θάλαμος"
+                },
                 "amenity/place_of_worship": {
                     "name": "Χώρος Λατρείας",
                     "terms": "Τόπος λατρείας, Ναός, ιερός ναός, μοναστήρι, ιερά μονή, προσκύνημα, οίκος προσευχής"
                 "amenity/place_of_worship/muslim": {
                     "name": "Τζαμί"
                 },
+                "amenity/place_of_worship/shinto": {
+                    "name": "Σιντοϊστικό Ιερό"
+                },
+                "amenity/place_of_worship/sikh": {
+                    "name": "Ναός των Σιχ"
+                },
+                "amenity/place_of_worship/taoist": {
+                    "name": "Ναός των Ταοϊστών"
+                },
                 "amenity/planetarium": {
                     "name": "Πλανητάριο",
                     "terms": "Πλανητάριο"
                     "name": "Δημόσια Ανταλλακτική Βιβλιοθήκη",
                     "terms": "Δημόσια βιβλιοθήκη"
                 },
+                "amenity/ranger_station": {
+                    "name": "Σταθμός Δασοφυλάκων"
+                },
                 "amenity/recycling": {
                     "name": "Ανακύκλωση"
                 },
                     "name": "Χώρος Σχολείου",
                     "terms": "σχολείο, δημοτικό, γυμνάσιο, λύκειο"
                 },
+                "amenity/scrapyard": {
+                    "name": "Μάντρα"
+                },
                 "amenity/shelter": {
                     "name": "Στέγαστρο"
                 },
                 "amenity/shelter/picnic_shelter": {
                     "name": "Περίπτερο για Πικνικ"
                 },
+                "amenity/shelter/public_transport": {
+                    "name": "Καταφύγιο Διαμετακόμισης"
+                },
                 "amenity/shower": {
                     "name": "Ντουζιέρα"
                 },
                 "amenity/vending_machine/newspapers": {
                     "name": "Αυτόματος Πωλητής Τύπου"
                 },
+                "amenity/vending_machine/parcel_pickup": {
+                    "name": "Ντουλάπι Παραληφθέντων Δεμάτων"
+                },
                 "amenity/vending_machine/parking_tickets": {
                     "name": "Αυτόματος πωλητής εισιτηρίων στάθμευσης"
                 },
                     "name": "Αυτόματος πωλητής εισιτηρίων ΜΜΜ",
                     "terms": "Εισιτήρια λεωφορείου, εισιτήρια μετρό, εισιτήρια τραμ, εισιτήρια τρόλεϊ"
                 },
+                "amenity/vending_machine/stamps": {
+                    "name": "Γραμματοκιβώτιο"
+                },
                 "amenity/vending_machine/sweets": {
                     "name": "Αυτόματος Πωλητής Σνακ"
                 },
                     "name": "Κάδος απορριμμάτων",
                     "terms": "Κάδος σκουπιδιών"
                 },
+                "amenity/waste_transfer_station": {
+                    "name": "Σταθμός Μεταφοράς Απορριμμάτων"
+                },
                 "amenity/watering_place": {
                     "name": "Ποτίστρα Ζώων"
                 },
                 "attraction": {
                     "name": "Αξιοθέατο"
                 },
+                "attraction/amusement_ride": {
+                    "name": "Ψυχαγωγική Βόλτα"
+                },
                 "attraction/animal": {
                     "name": "Ζώο"
                 },
+                "attraction/big_wheel": {
+                    "name": "Μεγάλη Ρόδα"
+                },
                 "attraction/bumper_car": {
                     "name": "Συγκρουόμενα"
                 },
+                "attraction/bungee_jumping": {
+                    "name": "Bungee Jumping"
+                },
+                "attraction/carousel": {
+                    "name": "Carousel"
+                },
                 "attraction/drop_tower": {
                     "name": "Πύργος Πτώσης"
                 },
                 "attraction/river_rafting": {
                     "name": "Κατάβαση Ποταμού με Φουσκωτή Βάρκα"
                 },
+                "attraction/roller_coaster": {
+                    "name": "Roller Coaster"
+                },
+                "attraction/summer_toboggan": {
+                    "name": "Καλοκαιρινό Έλκυθρο"
+                },
                 "attraction/train": {
                     "name": "Τουριστικό Τρένο"
                 },
                 "barrier/border_control": {
                     "name": "Συνοριακός Έλεγχος"
                 },
+                "barrier/cattle_grid": {
+                    "name": "Σχάρα"
+                },
                 "barrier/city_wall": {
                     "name": "Τείχη Πόλης",
                     "terms": "Τείχος Πόλης"
                     "name": "Φράκτης",
                     "terms": "Φράκτης"
                 },
+                "barrier/fence/railing": {
+                    "name": "Κιγκλίδωμα"
+                },
                 "barrier/gate": {
                     "name": "Πύλη",
                     "terms": "Πύλη, πόρτα, θύρα"
                 },
+                "barrier/guard_rail": {
+                    "name": "Σιδηροδρομικός Φράχτης"
+                },
                 "barrier/hedge": {
                     "name": "Περίφραξη",
                     "terms": "Φράκτης από θάμνους, μπορντούρα"
                 "barrier/kerb/lowered": {
                     "name": "Χαμηλωμένο Κράσπεδο"
                 },
+                "barrier/kissing_gate": {
+                    "name": "Πόρτα Παγίδευσης"
+                },
                 "barrier/lift_gate": {
                     "name": "Ανυψούμενη Πύλη",
                     "terms": "Μπάρα, Αναρτούμενη πύλη"
                     "name": "Διοικητικό Όριο",
                     "terms": "Διοικητικό Όριο, Σύνορο"
                 },
+                "bridge/support": {
+                    "name": "Υποστύλωμα Γέφυρας"
+                },
+                "bridge/support/pier": {
+                    "name": "Βάθρο Γέφυρας"
+                },
                 "building": {
                     "name": "Κτίριο",
                     "terms": "Κτήριο, κτίσμα"
                     "name": "Αποθήκη αγροκτήματος",
                     "terms": "Σιταποθήκη, Αχυρώνας"
                 },
+                "building/boathouse": {
+                    "name": "Πλωτό Κτήριο"
+                },
                 "building/bungalow": {
                     "name": "Μπανγκαλόου"
                 },
+                "building/bunker": {
+                    "name": "Καταφύγιο"
+                },
                 "building/cabin": {
                     "name": "Καμπίνα"
                 },
                     "name": "Κτίριο Εκκλησίας",
                     "terms": "Εκκλησία, Κτίριο Εκκλησίας"
                 },
+                "building/civic": {
+                    "name": "Δημοτικό Κτίριο"
+                },
                 "building/college": {
                     "name": "Κτίριο Κολλεγίου",
                     "terms": "Κολλέγιο, Κτίριο Κολλεγίου"
                     "name": "Κτίριο Υπό Κατασκευή",
                     "terms": "Κτήριο Υπό Κατασκευή, οικοδομή"
                 },
+                "building/detached": {
+                    "name": "Μονοκατοικία"
+                },
                 "building/dormitory": {
                     "name": "Φοιτητική Εστία",
                     "terms": "Κοιτώνας"
                 "building/entrance": {
                     "name": "Είσοδος/Έξοδος"
                 },
+                "building/farm": {
+                    "name": "Αγροτική Κατοικία"
+                },
+                "building/farm_auxiliary": {
+                    "name": "Αγροτικό Κτίριο"
+                },
                 "building/garage": {
                     "name": "Γκαράζ",
                     "terms": "Γκαράζ"
                 "building/garages": {
                     "name": "Γκαράζ"
                 },
+                "building/grandstand": {
+                    "name": "Εξέδρα"
+                },
                 "building/greenhouse": {
                     "name": "Θερμοκήπιο"
                 },
                 "building/mosque": {
                     "name": "Κτίριο Μιναρέ"
                 },
+                "building/pavilion": {
+                    "name": "Περίπτερο"
+                },
                 "building/public": {
                     "name": "Δημόσιο Κτίριο",
                     "terms": "Δημόσιο Κτήριο"
                 "building/roof": {
                     "name": "Στέγη"
                 },
+                "building/ruins": {
+                    "name": "Ερείπια Κτιρίου"
+                },
                 "building/school": {
                     "name": "Κτίριο Σχολείου",
                     "terms": "Κτήριο Σχολείου"
                 },
+                "building/semidetached_house": {
+                    "name": "Ημιυπαίθριο σπίτι"
+                },
+                "building/service": {
+                    "name": "Κτίριο Υπηρεσιών"
+                },
+                "building/shed": {
+                    "name": "Υπόστεγο"
+                },
                 "building/stable": {
                     "name": "Στάβλος"
                 },
+                "building/stadium": {
+                    "name": "Στάδιο"
+                },
+                "building/static_caravan": {
+                    "name": "Λυόμενο"
+                },
+                "building/temple": {
+                    "name": "Ναός"
+                },
                 "building/terrace": {
                     "name": "Ενωμένα Ομοιόμορφα Σπίτια"
                 },
                 "building/train_station": {
-                    "name": "Σταθμός Τρένου"
+                    "name": "Κτίριο Σιδηροδρομικού Σταθμού"
+                },
+                "building/transportation": {
+                    "name": "Κτίριο Μεταφορών"
                 },
                 "building/university": {
                     "name": "Κτίριο Πανεπιστημίου",
                 "building/warehouse": {
                     "name": "Αποθήκη"
                 },
+                "camp_site/camp_pitch": {
+                    "name": "Χώρος Στρατοπέδευσης"
+                },
+                "circular": {
+                    "name": "Κυκλική Κυκλοφορία"
+                },
                 "club": {
                     "name": "Λέσχη"
                 },
                     "name": "Ξυλουργείο",
                     "terms": "μαραγκός, ξυλουργός"
                 },
+                "craft/carpet_layer": {
+                    "name": "Στρώμα Χαλιού"
+                },
+                "craft/caterer": {
+                    "name": "Τροφοδότης"
+                },
+                "craft/chimney_sweeper": {
+                    "name": "Καπνοδοχοκαθαριστής"
+                },
                 "craft/clockmaker": {
                     "name": "Ωρολογοποιός",
                     "terms": "ρολογάς"
                 "craft/confectionery": {
                     "name": "Ζαχαροπλαστείο"
                 },
+                "craft/distillery": {
+                    "name": "Οινοπνευματοποιείο"
+                },
                 "craft/dressmaker": {
                     "name": "Ενδυματολόγος",
                     "terms": "μοδίστρα, μόδιστρος, ράφτης, ράπτης, σχεδιάστρια μόδας, σχεδιαστής μόδας, μοντελίστ, ενδυματοποιός, ρούχα, φορέματα"
                     "name": "Υαλουργία",
                     "terms": "Υαλουργός, τζαμάς, τζάμια, βιτρό, γυάλινα αντικείμενα, παράθυρα, υαλογραφία"
                 },
+                "craft/handicraft": {
+                    "name": "Χειροτεχνία"
+                },
                 "craft/hvac": {
                     "name": "HVAC"
                 },
+                "craft/insulator": {
+                    "name": "Απομονωτήρας"
+                },
                 "craft/jeweler": {
                     "name": "Κοσμηματοπώλης"
                 },
+                "craft/key_cutter": {
+                    "name": "Πένσα Διαμόρφωσης Κλειδιών"
+                },
                 "craft/locksmith": {
                     "name": "Κλειδαράς"
                 },
                 "craft/photographic_laboratory": {
                     "name": "Φωτογραφικό Εργαστήριο"
                 },
+                "craft/plasterer": {
+                    "name": "Σοβατζής"
+                },
                 "craft/plumber": {
                     "name": "Υδραυλικός"
                 },
                 "craft/pottery": {
                     "name": "Αγγειοπλάστης"
                 },
+                "craft/rigger": {
+                    "name": "Εξαρτύων"
+                },
+                "craft/roofer": {
+                    "name": "Στεγαστής"
+                },
+                "craft/saddler": {
+                    "name": "Σαμαράς"
+                },
+                "craft/sailmaker": {
+                    "name": "Επισκευαστής Πλοίων"
+                },
                 "craft/sawmill": {
                     "name": "Πριονιστήριο"
                 },
                 "craft/scaffolder": {
                     "name": "Κατασκευαστής σκαλωσιών"
                 },
+                "craft/sculptor": {
+                    "name": "Γλύπτης"
+                },
                 "craft/shoemaker": {
                     "name": "Τσαγκάρης",
                     "terms": "παπουτσής,υποδηματοποιός"
                 "craft/tailor": {
                     "name": "Ραφτική"
                 },
+                "craft/tiler": {
+                    "name": "Κεραμιδωτής"
+                },
                 "craft/tinsmith": {
                     "name": "Λευκοσιδηρουργός"
                 },
+                "craft/upholsterer": {
+                    "name": "Ταπετσιέρης"
+                },
                 "craft/watchmaker": {
                     "name": "Ωρολογοποιός",
                     "terms": "ωρολογοποιός, ρολογάς"
                 "emergency/defibrillator": {
                     "name": "Απινιδωτής"
                 },
+                "emergency/designated": {
+                    "name": "Καθορισμένη Επείγουσα Πρόσβαση"
+                },
+                "emergency/destination": {
+                    "name": "Προορισμός Επείγουσας Πρόσβασης"
+                },
+                "emergency/fire_alarm": {
+                    "name": "Πυροσβεστικός Συναγερμός"
+                },
                 "emergency/fire_extinguisher": {
                     "name": "Πυροσβεστήρας"
                 },
                 "emergency/first_aid_kit": {
                     "name": "Κουτί Πρώτων Βοηθειών"
                 },
+                "emergency/life_ring": {
+                    "name": "Σωσίβιο"
+                },
+                "emergency/lifeguard": {
+                    "name": "Ναυαγοσώστης"
+                },
                 "emergency/no": {
                     "name": "Πρόσβαση Εκτάκτου Ανάγκης Όχι"
                 },
+                "emergency/official": {
+                    "name": "Επίσημη Πρόσβαση Εκτάκτου Ανάγκης"
+                },
                 "emergency/phone": {
                     "name": "Τηλέφωνο Ανάγκης",
                     "terms": "Τηλέφωνο επειγόντων, Τηλέφωνο ανάγκης, 112"
                 },
+                "emergency/private": {
+                    "name": "Ιδιωτική Πρόσβαση Εκτάκτου Ανάγκης"
+                },
+                "emergency/siren": {
+                    "name": "Σειρήνα"
+                },
+                "emergency/water_tank": {
+                    "name": "Δεξαμενή Νερού Εκτάκτου Ανάγκης"
+                },
                 "emergency/yes": {
                     "name": "Πρόσβαση Εκτάκτου Ανάγκης Ναι"
                 },
                 "golf/bunker": {
                     "name": "Αμμοπαγίδα"
                 },
+                "golf/cartpath": {
+                    "name": "Δρομάκι Οχημάτων του Golf"
+                },
+                "golf/cartpath_service": {
+                    "name": "Δρομάκι Οχημάτων του Golf"
+                },
+                "golf/driving_range": {
+                    "name": "Χώρος Εξάσκησης του Golf"
+                },
+                "golf/fairway": {
+                    "name": "Πίστα του Golf"
+                },
+                "golf/green": {
+                    "name": "Διάδρομος του Golf"
+                },
                 "golf/hole": {
                     "name": "Τρύπα Γηπέδου Γκολφ",
                     "terms": "Τρύπα Γηπέδου Γκολφ"
                 },
+                "golf/lateral_water_hazard": {
+                    "name": "Λιμνούλα σε γήπεδο Golf"
+                },
+                "golf/path": {
+                    "name": "Μονοπάτι του Golf"
+                },
+                "golf/rough": {
+                    "name": "Σκληρό"
+                },
+                "healthcare/alternative/chiropractic": {
+                    "name": "Χειροπράκτορας"
+                },
+                "healthcare/audiologist": {
+                    "name": "Ωτορινολαρυγγολόγος"
+                },
                 "healthcare/birthing_center": {
                     "name": "Μαιευτήριο"
                 },
                 "healthcare/blood_donation": {
                     "name": "Κέντρο Αιμοδοσίας"
                 },
+                "healthcare/hospice": {
+                    "name": "Ξενώνας Ασθενών"
+                },
+                "healthcare/laboratory": {
+                    "name": "Ιατρικό Εργαστήριο"
+                },
+                "healthcare/midwife": {
+                    "name": "Μαία"
+                },
+                "healthcare/occupational_therapist": {
+                    "name": "Εργοθεραπευτής"
+                },
                 "healthcare/optometrist": {
                     "name": "Οφθαλμίατρος"
                 },
                 "healthcare/physiotherapist": {
                     "name": "Φυσιοθεραπευτής"
                 },
+                "healthcare/podiatrist": {
+                    "name": "Ποδίατρος"
+                },
                 "healthcare/psychotherapist": {
                     "name": "Ψυχίατρος"
                 },
+                "healthcare/rehabilitation": {
+                    "name": "Κέντρο Αποκατάστασης"
+                },
                 "healthcare/speech_therapist": {
                     "name": "Λογοθεραπευτής"
                 },
                 "highway/bridleway": {
                     "name": "Διαδρομή Ιππασίας"
                 },
+                "highway/bus_guideway": {
+                    "name": "Λεωφορειόδρομος"
+                },
                 "highway/bus_stop": {
                     "name": "Στάση / Πλατφόρμα Λεωφορείου"
                 },
                     "name": "Μονοπάτι Αποκλειστικά για Πεζοπορία",
                     "terms": "Μονοπάτι, Διαδρομή πεζού, πεζοδρόμιο, πεζόδρομος, βόλτα"
                 },
+                "highway/footway/conveying": {
+                    "name": "Κυλιόμενος Διάδρομος"
+                },
                 "highway/footway/marked": {
                     "name": "Διάβαση Πεζών / Ζέβρα"
                 },
                 "highway/footway/zebra-raised": {
                     "name": "Διάβαση Πεζών (Υπερυψωμένη)"
                 },
+                "highway/give_way": {
+                    "name": "Σήμανση Παραχώρησης Προτεραιότητας"
+                },
                 "highway/living_street": {
                     "name": "Οδός Ήπιας Κυκλοφορίας"
                 },
                 "highway/motorway_link": {
                     "name": "Σύνδεση Αυτοκινητόδρομου"
                 },
+                "highway/passing_place": {
+                    "name": "Πέρασμα"
+                },
                 "highway/path": {
                     "name": "Μονοπάτι",
                     "terms": "Διαδρομή, μονοπάτι"
                 "highway/primary_link": {
                     "name": "Σύνδεση Πρωτεύοντος / Εθνικού Δρόμου"
                 },
+                "highway/raceway": {
+                    "name": "Αγωνιστική Πίστα (Μηχανοκίνησης)"
+                },
                 "highway/residential": {
-                    "name": "Î\9fικιÏ\83Ï\84ικÏ\8cÏ\82 Î\94Ï\81Ï\8cμοÏ\82",
+                    "name": "Î\94Ï\81Ï\8cμοÏ\82 Ï\83ε ÎºÎ±Ï\84οικημένη Ï\80εÏ\81ιοÏ\87ή",
                     "terms": "Αστική οδός, Τοπική οδός, Οδός εντός αστικού ιστού"
                 },
                 "highway/rest_area": {
                     "name": "Δρομάκι",
                     "terms": "Δρομάκι, Στενό, στενάκι, σοκάκι"
                 },
+                "highway/service/drive-through": {
+                    "name": "Drive-Through"
+                },
                 "highway/service/driveway": {
                     "name": "Διάδρομος"
                 },
                     "name": "Διάδρομος Στάθμευσης",
                     "terms": "Λωρίδα χώρου στάθμευσης"
                 },
+                "highway/services": {
+                    "name": "Περιοχή Παροχής Υπηρεσιών"
+                },
                 "highway/speed_camera": {
                     "name": "Κάμερα Ορίου Ταχύτητας",
                     "terms": "Κάμερα Ορίου Ταχύτητας, Κάμερα επιτήρησης/ελέγχου Ορίου Ταχύτητας,"
                     "name": "Σκαλοπάτια",
                     "terms": "Σκαλιά, Σκαλοπάτια, σκάλα, σκάλες"
                 },
+                "highway/steps/conveying": {
+                    "name": "Κινούμενη Σκάλα"
+                },
                 "highway/stop": {
                     "name": "Σήμα Στοπ"
                 },
                 "highway/trunk_link": {
                     "name": "Σύνδεση Λεωφόρου"
                 },
+                "highway/turning_circle": {
+                    "name": "Κυκλική Στροφή"
+                },
+                "highway/turning_loop": {
+                    "name": "Βρόχος Αναστροφής (Νησίδα)"
+                },
                 "highway/unclassified": {
-                    "name": "Î\91Ï\84αξινÏ\8cμηÏ\84οÏ\82 Î\94Ï\81Ï\8cμοÏ\82"
+                    "name": "Î\94Ï\81Ï\8cμοÏ\82 Ï\83ε Î¼Î· ÎºÎ±Ï\84οικημένη Ï\80εÏ\81ιοÏ\87ή"
                 },
                 "historic": {
                     "name": "Ιστορική τοποθεσία",
                 "historic/wreck": {
                     "name": "Ναυάγιο"
                 },
+                "internet_access/wlan": {
+                    "name": "Wi-Fi Hotspot"
+                },
                 "junction": {
                     "name": "Κόμβος"
                 },
                 "landuse/basin": {
                     "name": "Κανάλι Αποστράγγισης"
                 },
+                "landuse/brownfield": {
+                    "name": "Εγκαταλελειμμένη Έκταση"
+                },
                 "landuse/cemetery": {
                     "name": "Κοιμητήριο",
                     "terms": "Νεκροταφείο"
                     "name": "Αγροτεμάχιο",
                     "terms": "Χωράφι, Αγρός, Καλλιεργήσιμη Έκταση"
                 },
+                "landuse/forest": {
+                    "name": "Διαχειριζόμενο Δάσος"
+                },
+                "landuse/garages": {
+                    "name": "Χρήση ως Γκαράζ"
+                },
                 "landuse/grass": {
                     "name": "Γρασίδι",
                     "terms": "Γρασίδι, Χορτάρι, γκαζόν"
                 },
+                "landuse/greenfield": {
+                    "name": "Λιβάδι"
+                },
+                "landuse/greenhouse_horticulture": {
+                    "name": "Κτίριο Θερμοκηπίου"
+                },
                 "landuse/harbour": {
                     "name": "Λιμάνι"
                 },
                     "name": "Στρατώνας",
                     "terms": "Στρατώνας"
                 },
+                "landuse/military/bunker": {
+                    "name": "Στρατιωτικό Καταφύγιο"
+                },
                 "landuse/military/checkpoint": {
                     "name": "Σημείο ελέγχου",
                     "terms": "Σημείο ελέγχου"
                     "name": "Τόποθεσία Πυρηνικών Δοκιμών",
                     "terms": "Τόποθεσία Πυρηνικών Δοκιμών, Τόποθεσία Ρίψης Πυρηνικών Όπλων"
                 },
+                "landuse/military/obstacle_course": {
+                    "name": "Εμπόδιο Διαδρομής"
+                },
+                "landuse/military/office": {
+                    "name": "Στρατολογία"
+                },
                 "landuse/military/range": {
                     "name": "Στρατιωτικό Πεδίο Βολής",
                     "terms": "Στρατιωτικό Πεδίο Βολής"
                     "name": "Φυτώριο",
                     "terms": "Φυτώριο, Έκταση καλλιεργήσιμη με δένδρύλια - καλλωπιστικα φυτά"
                 },
+                "landuse/pond": {
+                    "name": "Λιμνούλα"
+                },
                 "landuse/quarry": {
                     "name": "Λατομείο",
                     "terms": "Λατομείο, Νταμάρι"
                 },
+                "landuse/railway": {
+                    "name": "Σιδηροδρομικός Διάδρομος"
+                },
                 "landuse/recreation_ground": {
                     "name": "Έκταση με χώρους Αναψυχής/ Δραστηριοτήτων",
                     "terms": "Έκταση με χώρους Αναψυχής/ Δραστηριοτήτων, Χώρος Αναψυχής"
                 "landuse/religious": {
                     "name": "Ιερός Χώρος"
                 },
+                "landuse/reservoir": {
+                    "name": "Δεξαμενή"
+                },
                 "landuse/residential": {
                     "name": "Οικιστική Περιοχή",
                     "terms": "Οικιστική Περιοχή, Περιοχή κυρίως Κατοικιών"
                 },
+                "landuse/residential/apartments": {
+                    "name": "Συγκρότημα Διαμερισμάτων"
+                },
                 "landuse/retail": {
                     "name": "Περιοχή Καταστημάτων",
                     "terms": "Περιοχή καταστημάτων πώλησης ειδών, Περιοχή καταστημάτων εμπορίου λιανικής/ χονδρικής"
                     "terms": "Αμπέλι, Αμπελώνας"
                 },
                 "leisure": {
-                    "name": "Αναψυχή",
-                    "terms": "Αναψυχή"
+                    "name": "Αναψυχή"
+                },
+                "leisure/adult_gaming_centre": {
+                    "name": "Κέντρο Παιχνιδιών Ενηλίκων"
+                },
+                "leisure/amusement_arcade": {
+                    "name": "Αίθουσα Ψυχαγωγίας"
+                },
+                "leisure/bandstand": {
+                    "name": "Εξέδρα Συναυλιών"
+                },
+                "leisure/beach_resort": {
+                    "name": "Παραθαλάσσιο Θέρετρο"
+                },
+                "leisure/bird_hide": {
+                    "name": "Κρυψώνα Κυνηγών Πτηνών"
+                },
+                "leisure/bleachers": {
+                    "name": "Εξέδρα Χωρίς Σκεπή"
+                },
+                "leisure/bowling_alley": {
+                    "name": "Αίθουσα Bowling"
                 },
                 "leisure/common": {
                     "name": "Κοινό"
                 },
+                "leisure/dance": {
+                    "name": "Αίθουσα Xορού"
+                },
+                "leisure/dancing_school": {
+                    "name": "Σχολή Χωρού"
+                },
                 "leisure/dog_park": {
                     "name": "Πάρκο Σκύλων",
                     "terms": "Πάρκο σκύλων"
                 },
+                "leisure/firepit": {
+                    "name": "Εστία Φωτιάς"
+                },
+                "leisure/fishing": {
+                    "name": "Χώρος Αλιείας"
+                },
                 "leisure/fitness_centre": {
                     "name": "Γυμναστήριο"
                 },
                     "name": "Υπαίθριο Γυμναστήριο",
                     "terms": "Υπαίθριο Γυμναστήριο, Χώρος Εξωτερικού Γυμναστηρίου και Οργάνων Γυμναστικής"
                 },
+                "leisure/fitness_station/balance_beam": {
+                    "name": "Δοκός Ισορροπίας"
+                },
+                "leisure/fitness_station/box": {
+                    "name": "Κουτί Εξάσκησης"
+                },
+                "leisure/fitness_station/horizontal_bar": {
+                    "name": "Οριζόντια Μπάρα Εξάσκησης"
+                },
+                "leisure/fitness_station/horizontal_ladder": {
+                    "name": "Μονόζυγο"
+                },
+                "leisure/fitness_station/hyperextension": {
+                    "name": "Σταθμός Εκγύμνασης Υπερέκτασης"
+                },
+                "leisure/fitness_station/parallel_bars": {
+                    "name": "Παράλληλες Δοκοί"
+                },
+                "leisure/fitness_station/push-up": {
+                    "name": "Όργανο Κάμψεων"
+                },
+                "leisure/fitness_station/rings": {
+                    "name": "Κρίκοι Γυμναστικής"
+                },
+                "leisure/fitness_station/sign": {
+                    "name": "Πινακίδα Οδηγιών Εκγύμνασης"
+                },
+                "leisure/fitness_station/sit-up": {
+                    "name": "Όργανο Οριζόντιας Εκγύμνασης"
+                },
+                "leisure/fitness_station/stairs": {
+                    "name": "Κλίμακα Εκγύμνασης"
+                },
                 "leisure/garden": {
                     "name": "Κήπος",
                     "terms": "Κήπος"
                     "name": "Γήπεδο Γκολφ",
                     "terms": "Γήπεδο γκολφ"
                 },
+                "leisure/hackerspace": {
+                    "name": "Χώρος Συζήτησης Εργασιών"
+                },
+                "leisure/horse_riding": {
+                    "name": "Χώροι Ιπποστασίου"
+                },
                 "leisure/ice_rink": {
                     "name": "Παγοδρόμιο"
                 },
                 "leisure/nature_reserve": {
                     "name": "Προστατευόμενος Βιότοπος"
                 },
+                "leisure/outdoor_seating": {
+                    "name": "Υπαίθριο Καθιστικό"
+                },
                 "leisure/park": {
                     "name": "Πάρκο",
                     "terms": "Πάρκο, πλατεία, εσπλανάδα, πράσινο, κήπος, δάσος, χώρος αναψυχής"
                     "name": "Τραπέζι Πικ Νικ",
                     "terms": "Τραπέζι Πικνίκ, πάγκος πικνίκ"
                 },
+                "leisure/picnic_table/chess": {
+                    "name": "Τράπεζα για Σκάκι"
+                },
                 "leisure/pitch": {
                     "name": "Γήπεδο",
                     "terms": "Γήπεδο"
                 "leisure/pitch/australian_football": {
                     "name": "Γήπεδο Αυστραλιανού Ποδοσφαίρου"
                 },
+                "leisure/pitch/badminton": {
+                    "name": "Γήπεδο Badminton"
+                },
+                "leisure/pitch/baseball": {
+                    "name": "Γήπεδο Baseball"
+                },
                 "leisure/pitch/basketball": {
                     "name": "Γήπεδο Μπάσκετ",
                     "terms": "Γήπεδο μπάσκετ, Γήπεδο καλαθοσφαίρισης"
                 "leisure/pitch/beachvolleyball": {
                     "name": "Γήπεδο Beach Volleyball"
                 },
+                "leisure/pitch/cricket": {
+                    "name": "Γήπεδο Cricket"
+                },
+                "leisure/pitch/equestrian": {
+                    "name": "Αίθουσα Ιππασίας"
+                },
+                "leisure/pitch/netball": {
+                    "name": "Γήπεδο Netball"
+                },
                 "leisure/pitch/rugby_league": {
                     "name": "Γήπεδο Ράγκπι",
                     "terms": "Γήπεδο Ράγκπι"
                 },
+                "leisure/pitch/rugby_union": {
+                    "name": "Γήπεδο Rugby"
+                },
+                "leisure/pitch/skateboard": {
+                    "name": "Πίστα Skate"
+                },
                 "leisure/pitch/soccer": {
                     "name": "Γήπεδο Ποδοσφαίρου",
                     "terms": "Γήπεδο ποδοσφαίρου"
                 },
+                "leisure/pitch/softball": {
+                    "name": "Γήπεδο Softball"
+                },
                 "leisure/pitch/table_tennis": {
                     "name": "Τραπέζι Πινγκ Πονγκ",
                     "terms": "Τραπέζι Πινγκ Πονγκ"
                 "leisure/resort": {
                     "name": "Θέρετρο"
                 },
+                "leisure/sauna": {
+                    "name": "Σάουνα"
+                },
                 "leisure/slipway": {
                     "name": "Γλίστρα",
                     "terms": "Γλίστρα, Νεωλκείο"
                     "name": "Αθλητικό Κέντρο/ Συγκρότημα",
                     "terms": "Αθλητικό Κέντρο/ Συγκρότημα"
                 },
+                "leisure/sports_centre/climbing": {
+                    "name": "Γυμναστήριο Αναρρίχησης"
+                },
+                "leisure/sports_centre/swimming": {
+                    "name": "Εγκαταστάσεις Αθλητικής Πισίνας"
+                },
                 "leisure/stadium": {
                     "name": "Στάδιο",
                     "terms": "Στάδιο"
                     "name": "Πισίνα",
                     "terms": "Πισίνα, Δεξαμενή κολύμβησης, κολυμβητήριο"
                 },
+                "leisure/track": {
+                    "name": "Αγωνιστική Πίστα (Για Μη Μηχανοκίνηση)"
+                },
+                "leisure/track/horse_racing": {
+                    "name": "Αγωνιστική Πίστα (Αγώνες Ιππασίας)"
+                },
+                "leisure/track/running": {
+                    "name": "Αγωνιστική Πίστα (Τρέξιμο)"
+                },
+                "leisure/water_park": {
+                    "name": "Νεροτσουλήθρες"
+                },
                 "line": {
                     "name": "Γραμμή",
                     "terms": "Γραμμή"
                 },
                 "man_made": {
-                    "name": "Ανθρώπινες Κατασκευές",
-                    "terms": "Ανθρώπινη κατασκευή"
+                    "name": "Ανθρώπινες Κατασκευές"
                 },
                 "man_made/adit": {
                     "name": "Ενηλίκων"
                     "name": "Γέφυρα",
                     "terms": "Γέφυρα, Γεφύρι"
                 },
+                "man_made/bunker_silo": {
+                    "name": "Σιλό"
+                },
                 "man_made/chimney": {
                     "name": "Καμινάδα",
                     "terms": "Υψικάμινος"
                 },
+                "man_made/clearcut": {
+                    "name": "Αποψιλωμένο Δάσος"
+                },
+                "man_made/crane": {
+                    "name": "Γερανός"
+                },
+                "man_made/cutline": {
+                    "name": "Όριο"
+                },
                 "man_made/embankment": {
                     "name": "Ανάχωμα"
                 },
                     "name": "Ιστός σημαίας",
                     "terms": "Κοντάρι σημαίας, σημαιάκι"
                 },
+                "man_made/gasometer": {
+                    "name": "Αεριόμετρο"
+                },
+                "man_made/groyne": {
+                    "name": "Φράγμα"
+                },
                 "man_made/lighthouse": {
                     "name": "Φάρος",
                     "terms": "Φάρος"
                 },
+                "man_made/mast": {
+                    "name": "Ιστός"
+                },
+                "man_made/mast/communication": {
+                    "name": "Ιστός Τηλεπικοινωνιών"
+                },
                 "man_made/mast/communication/mobile_phone": {
                     "name": "Ιστός Κινητής Τηλεφωνίας"
                 },
                 "man_made/mast/communication/television": {
                     "name": "Ιστός Τηλεοπτικής Εκπομπής"
                 },
+                "man_made/monitoring_station": {
+                    "name": "Σταθμός Παρακολούθησης"
+                },
+                "man_made/observatory": {
+                    "name": "Παρατηρητήριο"
+                },
                 "man_made/petroleum_well": {
                     "name": "Πετρελαιοπηγή",
                     "terms": "Πηγή πετρελαίου"
                 "man_made/surveillance": {
                     "name": "Επιτήρηση"
                 },
+                "man_made/surveillance/camera": {
+                    "name": "Κάμερα Επιτήρησης"
+                },
                 "man_made/survey_point": {
                     "name": "Σημείο Επισκόπησης",
                     "terms": "Σημείο παρακολούθησης, Σημείο επισκόπησης, Σημείο έρευνας, παρατηρητήριο"
                     "name": "Πύργος",
                     "terms": "Πύργος"
                 },
+                "man_made/tower/bell_tower": {
+                    "name": "Καμπαναριό"
+                },
+                "man_made/tower/communication": {
+                    "name": "Πύργος Τηλεπικοινωνιών"
+                },
+                "man_made/tower/minaret": {
+                    "name": "Μιναρές"
+                },
+                "man_made/tower/observation": {
+                    "name": "Πύργος Παρατήρησης "
+                },
                 "man_made/wastewater_plant": {
                     "name": "Βιολογικός Καθαρισμός",
                     "terms": "Εγκατάσταση Επεξεργασίας Λυμάτων"
                     "name": "Εργοστάσιο",
                     "terms": "Εργοστάσιο, Φάμπρικα"
                 },
+                "manhole": {
+                    "name": "Ανθρωποθυρίδα"
+                },
+                "manhole/drain": {
+                    "name": "Αποστραγγιστήρας"
+                },
+                "manhole/telecom": {
+                    "name": "Τηλεπικοινωνιακό Φρεάτιο"
+                },
                 "natural": {
-                    "name": "Φυσικό",
-                    "terms": "Φύση, Φυσικό"
+                    "name": "Φυσικό"
                 },
                 "natural/bare_rock": {
                     "name": "Γυμνός Βράχος"
                     "name": "Ακτογραμμή",
                     "terms": "Ακτογραμμή"
                 },
+                "natural/fell": {
+                    "name": "Σώριασμα"
+                },
                 "natural/glacier": {
                     "name": "Παγετώνας",
                     "terms": "Παγετώνας"
                     "name": "Θαμνότοπος",
                     "terms": "Λόγγος, Χέρσο, Ακαλλιέργητο"
                 },
+                "natural/mud": {
+                    "name": "Λάσπη"
+                },
                 "natural/peak": {
                     "name": "Κορυφή",
                     "terms": "Κορφή"
                 },
+                "natural/reef": {
+                    "name": "Υφαλος"
+                },
+                "natural/ridge": {
+                    "name": "Κορυφογραμμή"
+                },
                 "natural/saddle": {
                     "name": "Διάσελο",
                     "terms": "Αυχένας"
                     "name": "Νερό",
                     "terms": "Νερό"
                 },
+                "natural/water/basin": {
+                    "name": "Λεκανοπέδιο"
+                },
                 "natural/water/canal": {
                     "name": "Κανάλι"
                 },
                 "natural/water/river": {
                     "name": "Ποτάμι"
                 },
+                "natural/water/stream": {
+                    "name": "Ρέμα"
+                },
                 "natural/wetland": {
                     "name": "Έλος",
                     "terms": "Υγρότοπος"
                     "name": "Γραφείο",
                     "terms": "Γραφείο"
                 },
+                "office/accountant": {
+                    "name": "Λογιστικό Γραφείο"
+                },
                 "office/administrative": {
                     "name": "Διοικητικό γραφείο"
                 },
+                "office/adoption_agency": {
+                    "name": "Οργανισμός Υιοθεσίας"
+                },
+                "office/advertising_agency": {
+                    "name": "Διαφημιστική"
+                },
+                "office/architect": {
+                    "name": "Αρχιτεκτονικό Γραφείο"
+                },
+                "office/association": {
+                    "name": "Μη Κερδοσκοπικό Γραφείο"
+                },
+                "office/charity": {
+                    "name": "Γραφείο Φιλανθρωπίας"
+                },
+                "office/company": {
+                    "name": "Εταιρικό Γραφείο"
+                },
+                "office/coworking": {
+                    "name": "Χώρος Συνεργασίας"
+                },
                 "office/educational_institution": {
                     "name": "Εκπαιδευτικό Ίδρυμα"
                 },
                     "name": "Γραφείο Ευρέσεως Εργασίας",
                     "terms": "Γραφείο Εύρεσης Εργασίας"
                 },
+                "office/energy_supplier": {
+                    "name": "Γραφείο Προμηθειών Ενέργειας"
+                },
                 "office/estate_agent": {
                     "name": "Κτηματομεσιτικό Γραφείο",
                     "terms": "μεσιτικό γραφείο, μεσίτης"
                 },
+                "office/financial": {
+                    "name": "Γραφείο Οικονομικών"
+                },
+                "office/forestry": {
+                    "name": "Γραφείο Δασοκομίας"
+                },
+                "office/foundation": {
+                    "name": "Γραφείο Ιδρύματος"
+                },
                 "office/government": {
                     "name": "Κυβερνητικό Γραφείο",
                     "terms": "Γραφείο κυβέρνησης, πολιτικό γραφείο"
                 "office/government/register_office": {
                     "name": "Μητρώο"
                 },
+                "office/government/tax": {
+                    "name": "Φορολογικό Γραφείο"
+                },
+                "office/guide": {
+                    "name": "Ταξιδιωτικό Γραφείο"
+                },
                 "office/insurance": {
                     "name": "Ασφαλιστικό Γραφείο",
                     "terms": "ασφαλιστικό πρακτορείο, ασφαλιστής, ασφάλειες"
                 },
+                "office/it": {
+                    "name": "Γραφείο Πληροφοριών Τεχνολογίας "
+                },
                 "office/lawyer": {
                     "name": "Δικηγορικό Γραφείο",
                     "terms": "νομικό γραφείο"
                 },
+                "office/lawyer/notary": {
+                    "name": "Γραφείο Συμβολαιογράφων"
+                },
+                "office/moving_company": {
+                    "name": "Γραφείο Εταιρείας Μετακομίσεων"
+                },
                 "office/newspaper": {
                     "name": "Γραφεία Εφημερίδας"
                 },
                 "office/ngo": {
                     "name": "Γραφείο ΜΚΟ"
                 },
+                "office/notary": {
+                    "name": "Γραφείο Συμβολαιογράφων"
+                },
                 "office/physician": {
                     "name": "Ιατρός"
                 },
                     "name": "Πολιτικό Κόμμα",
                     "terms": "πολιτικό γραφείο, γραφείο κόμματος"
                 },
+                "office/private_investigator": {
+                    "name": "Γραφείο Ιδιωτικού Ερευνητή"
+                },
+                "office/religion": {
+                    "name": "Γραφείο Θρησκείας"
+                },
                 "office/research": {
                     "name": "Γραφείο Ερευνών"
                 },
+                "office/surveyor": {
+                    "name": "Γραφείο Επιθεωρητών"
+                },
+                "office/tax_advisor": {
+                    "name": "Γραφείο Φορολογικού Συμβούλου"
+                },
                 "office/telecommunication": {
                     "name": "Γραφείο Τηλεπικοινωνιών"
                 },
+                "office/therapist": {
+                    "name": "Γραφείο Θεραπευτών"
+                },
                 "office/travel_agent": {
                     "name": "Ταξιδιωτικό Γραφείο"
                 },
                 "office/water_utility": {
                     "name": "Γραφείο Εκμετάλλευσης Νερού"
                 },
+                "piste/downhill": {
+                    "name": "Κατηφορική Πίστα / Πίστα Σκι"
+                },
+                "piste/downhill/halfpipe": {
+                    "name": "Πίστα με Κλίσεις"
+                },
+                "piste/hike": {
+                    "name": "Χιονοδρομικό ή Χειμερινό Μονοπάτι Πεζοπορίας"
+                },
+                "piste/piste": {
+                    "name": "Διαδρομές Χειμερινών Αθλημάτων"
+                },
                 "place": {
                     "name": "Τόπος"
                 },
                     "name": "Μετασχηματιστής",
                     "terms": "Μετασχηματιστής"
                 },
+                "public_transport/station": {
+                    "name": "Σταθμός Μετεπιβίβασης"
+                },
+                "public_transport/station_bus": {
+                    "name": "Σταθμός / Τέρμα Λεωφορείου"
+                },
+                "public_transport/station_ferry": {
+                    "name": "Πορθμείο Φέρι Μπωτ"
+                },
+                "public_transport/station_subway": {
+                    "name": "Σταθμός Υπόγειου Σιδηρόδρομου / Μετρό"
+                },
+                "public_transport/station_train": {
+                    "name": "Σιδηροδρομικός Σταθμός"
+                },
+                "public_transport/station_tram": {
+                    "name": "Σταθμός Τραμ"
+                },
+                "public_transport/station_trolleybus": {
+                    "name": "Σταθμός / Τέρμα Τρόλλευ"
+                },
+                "public_transport/stop_position_aerialway": {
+                    "name": "Χώρος Στάθμευσης Αεροσκαφών"
+                },
+                "public_transport/stop_position_bus": {
+                    "name": "Χώρος Στάθμευσης Λεωφορείου"
+                },
+                "public_transport/stop_position_ferry": {
+                    "name": "Χώρος Στάθμευσης Φέρι Μπωτ"
+                },
+                "public_transport/stop_position_subway": {
+                    "name": "Χώρος Στάθμευσης Υπόγειου Σιδηρόδρομου"
+                },
+                "public_transport/stop_position_train": {
+                    "name": "Χώρος Στάθμευσης Τρένου"
+                },
+                "public_transport/stop_position_tram": {
+                    "name": "Χώρος Στάθμευσης Τραμ"
+                },
+                "public_transport/stop_position_trolleybus": {
+                    "name": "Χώρος Στάθμευσης Τρόλλευ"
+                },
                 "railway": {
                     "name": "Σιδηροδρομικός Διάδρομος"
                 },
                 "railway/abandoned": {
-                    "name": "Εγκαταλελειμμένη Σιδηροδρομική Γραμμή",
-                    "terms": "Εγκαταλελειμμένος σιδηρόδρομος"
+                    "name": "Αποξηλωμένη Σιδηροδρομική Γραμμή"
+                },
+                "railway/buffer_stop": {
+                    "name": "Ταμπονιέρα"
                 },
                 "railway/crossing": {
                     "name": "Ισόπεδη Σιδηροδρομική Διάβαση (με Μονοπάτι)"
                 },
+                "railway/derail": {
+                    "name": "Σιδηροδρομικός Εκτροχιαστής"
+                },
                 "railway/disused": {
                     "name": "Σιδηροτροχιά εκτός Χρήσης"
                 },
+                "railway/funicular": {
+                    "name": "Τελεφερίκ"
+                },
                 "railway/level_crossing": {
                     "name": "Ισόπεδη Σιδηροδρομική Διάβαση (Οχημάτων)"
                 },
+                "railway/milestone": {
+                    "name": "Σιδηροδρομικό Χιλιομετρικό Σημείο"
+                },
+                "railway/miniature": {
+                    "name": "Μινιατούρα Σιδηρόδρομου"
+                },
                 "railway/narrow_gauge": {
                     "name": "Σιδηροτροχιά Στενού Εύρους"
                 },
+                "railway/platform": {
+                    "name": "Σιδηροδρομική Στάση / Πλατφόρμα"
+                },
                 "railway/rail": {
                     "name": "Σιδηροδρομική Γραμμή",
                     "terms": "Σιδηροτροχιά, Ράγα"
                 },
+                "railway/signal": {
+                    "name": "Σιδηροδρομικό Σήμα"
+                },
+                "railway/station": {
+                    "name": "Σιδηροδρομικός Σταθμός"
+                },
                 "railway/subway": {
                     "name": "Μετρό",
                     "terms": "Μετρό, Υπόγειος Σιδηρόδρομος"
                     "name": "Είσοδος Μετρό",
                     "terms": "Είσοδος Μετρό, Είσοδος υπόγειου σιδηρόδρομου"
                 },
+                "railway/switch": {
+                    "name": "Σιδηροδρομικό Ψαλίδι"
+                },
                 "railway/tram": {
                     "name": "Τραμ",
                     "terms": "Τραμ"
                 },
+                "railway/tram_stop": {
+                    "name": "Θέση Στάσης Τραμ"
+                },
                 "relation": {
                     "name": "Σχέση",
                     "terms": "Σχέση, Συσχέτιση"
                     "name": "Διαδρομή Πορθμείου",
                     "terms": "Δρομολόγιο Πορθμείου"
                 },
+                "seamark/beacon_isolated_danger": {
+                    "name": "Φάρος Κινδύνου"
+                },
+                "seamark/beacon_lateral": {
+                    "name": "Φάρος Καναλιού"
+                },
+                "seamark/buoy_lateral": {
+                    "name": "Σημαδούρα Καναλιού"
+                },
+                "seamark/buoy_lateral/green": {
+                    "name": "Πράσινη Σημαδούρα"
+                },
+                "seamark/buoy_lateral/red": {
+                    "name": "Κόκκινη Σημαδούρα"
+                },
+                "seamark/mooring": {
+                    "name": "Προσόρμιση"
+                },
                 "shop": {
                     "name": "Κατάστημα",
                     "terms": "Κατάστημα, μαγαζί"
                 },
+                "shop/agrarian": {
+                    "name": "Προμήθειες Φάρμας"
+                },
                 "shop/alcohol": {
                     "name": "Κάβα Ποτών",
                     "terms": "Κατάστημα ποτών, Κάβα"
                     "name": "Παλαιοπωλείο",
                     "terms": "αντικερί, παλιατζίδικο, αντίκες"
                 },
+                "shop/appliance": {
+                    "name": "Κατάστημα Συσκευών"
+                },
                 "shop/baby_goods": {
                     "name": "Κατάστημα Βρεφικών Ειδών"
                 },
                 "shop/beauty": {
                     "name": "Κατάστημα Ομορφιάς"
                 },
+                "shop/beauty/nails": {
+                    "name": "Σαλόνι Νυχιών"
+                },
+                "shop/beauty/tanning": {
+                    "name": "Σαλόνι Μαυρίσματος"
+                },
                 "shop/bed": {
                     "name": "Κατάστημα κρεβατιών/στρωμάτων",
                     "terms": "κατάστημα στρωμάτων/κρεβατιών, κατάστημα κρεββατιών"
                     "name": "Κρεοπωλείο",
                     "terms": "Κρεοπωλείο, Χασάπικο"
                 },
+                "shop/candles": {
+                    "name": "Κατάστημα Κεριών"
+                },
                 "shop/car": {
                     "name": "Εμπορία Αυτοκινήτων"
                 },
                     "name": "Παντοπωλείο",
                     "terms": "Ψιλικατζίδικο, Παντοπωλείο, μίνι μάρκετ"
                 },
+                "shop/copyshop": {
+                    "name": "Κατάστημα Φωτοτυπιών"
+                },
                 "shop/cosmetics": {
                     "name": "Κατάστημα καλλυντικών",
                     "terms": "κρέμες, σαπούνια, σαμπουάν, αφρόλουτρα, γαλακτώματα, μακιγιάζ, βαφές μαλλιών"
                 },
+                "shop/country_store": {
+                    "name": "Είδη Εξοχής"
+                },
+                "shop/craft": {
+                    "name": "Καταστήματα Τεχνών και Χειροτεχνίας"
+                },
+                "shop/curtain": {
+                    "name": "Είδη Κουρτίνας"
+                },
                 "shop/dairy": {
                     "name": "Γαλακτοπωλείο",
                     "terms": "τυριά, γιαούρτια, γάλατα, κρέμες"
                     "name": "Μαγαζί ερωτικών ειδών",
                     "terms": "Sex shop, σεξ σοπ, ερωτικά βοηθήματα"
                 },
+                "shop/fabric": {
+                    "name": "Πωλήσεις Υφασμάτων"
+                },
+                "shop/farm": {
+                    "name": "Πάγκος Παραγωγής"
+                },
+                "shop/fashion": {
+                    "name": "Κατάστημα Μόδας"
+                },
+                "shop/fireplace": {
+                    "name": "Είδη Τζακιού"
+                },
+                "shop/fishing": {
+                    "name": "Είδη Αλιείας"
+                },
                 "shop/fishmonger": {
                     "name": "Ψαράδικο"
                 },
                     "name": "Ανθοπωλείο",
                     "terms": "Ανθοπωλείο"
                 },
+                "shop/frozen_food": {
+                    "name": "Κατεψυγμένα Τρόφιμα"
+                },
+                "shop/fuel": {
+                    "name": "Κατάστημα Καυσίμων"
+                },
                 "shop/funeral_directors": {
                     "name": "Γραφείο Τελετών",
                     "terms": "Γραφείο κηδειών"
                 },
+                "shop/furnace": {
+                    "name": "Κατάστημα Κλιβάνων"
+                },
                 "shop/furniture": {
                     "name": "Κατάστημα Επίπλων"
                 },
                     "name": "Κέντρο Κήπου",
                     "terms": "Φυτώριο"
                 },
+                "shop/gas": {
+                    "name": "Κατάστημα Εμφιαλωμένων Αερίων"
+                },
                 "shop/gift": {
                     "name": "Κατάστημα Δώρων",
                     "terms": "Είδη δώρων"
                     "name": "Κομμωτήριο",
                     "terms": "Κωμωτήριο, νύχια, μανικιούρ, πεντικιούρ"
                 },
+                "shop/hairdresser_supply": {
+                    "name": "Εξοπλισμός Κομμωτηρίου"
+                },
                 "shop/hardware": {
                     "name": "Χρωματοπωλείο",
                     "terms": "Κατάστημα τεχνικού εξοπλισμού, Σιδηροπωλείο, υδραυλικά, χρώματα, σιδηρικά"
                 },
+                "shop/health_food": {
+                    "name": "Είδη Υγιεινής Διατροφής"
+                },
                 "shop/hearing_aids": {
                     "name": "Κατάστημα ακουστικών βαρηκοΐας",
                     "terms": "κατάστημα ακουστικών βοηθημάτων"
                 },
+                "shop/herbalist": {
+                    "name": "Βοτανολόγος"
+                },
                 "shop/hifi": {
                     "name": "Κατάστημα Hifi"
                 },
+                "shop/houseware": {
+                    "name": "Είδη Οικιακής Χρήσης"
+                },
+                "shop/hunting": {
+                    "name": "Είδη Κυνηγιού"
+                },
+                "shop/interior_decoration": {
+                    "name": "Διακοσμητές Εσωτερικών Χώρων"
+                },
                 "shop/jewelry": {
                     "name": "Κοσμηματοπωλείο",
                     "terms": "Χρυσοχοείο, Κοσμηματοπώλης, Κοσμηματοπωλείο"
                 },
+                "shop/kiosk": {
+                    "name": "Περίπτερο"
+                },
                 "shop/laundry": {
                     "name": "Καθαριστήριο",
                     "terms": "Πλυντήριο"
                 },
+                "shop/leather": {
+                    "name": "Κατάστημα με Δερμάτινα"
+                },
                 "shop/locksmith": {
                     "name": "Κλειδαράς"
                 },
                     "name": "Εμπορικό Κέντρο",
                     "terms": "Εμπορικό κέντρο, mall"
                 },
+                "shop/massage": {
+                    "name": "Κατάστημα Μασάζ"
+                },
+                "shop/medical_supply": {
+                    "name": "Κατάστημα Προμήθειας Ιατρικών Ειδών"
+                },
                 "shop/mobile_phone": {
                     "name": "Κατάστημα Κινητής Τηλεφωνίας",
                     "terms": "Κατάστημα κινητών τηλεφώνων"
                 },
+                "shop/money_lender": {
+                    "name": "Τοκογλύφος"
+                },
                 "shop/motorcycle": {
                     "name": "Εμπόριο Μοτοσυκλετών",
                     "terms": "Αντιπροσωπεία Μοτοσυκλετών"
                 },
+                "shop/motorcycle_repair": {
+                    "name": "Συνεργείο Μοτοσυκλετών"
+                },
                 "shop/music": {
                     "name": "Κατάστημα Μουσικής",
                     "terms": "Κατάστημα μουσικής, Δισκοπωλείο"
                     "name": "Πρακτορείο τύπου",
                     "terms": "κέντρο τύπου, εφημερίδες, περιοδικά"
                 },
+                "shop/nutrition_supplements": {
+                    "name": "Κατάστημα με Συμπληρώματα Διατροφής"
+                },
                 "shop/optician": {
                     "name": "Οπτικός",
                     "terms": "Οπτικός"
                 "shop/organic": {
                     "name": "Κατάστημα βιολογικών προϊόντων"
                 },
+                "shop/outdoor": {
+                    "name": "Κατάστημα με Είδη Εξοπλισμού Υπαίθρου"
+                },
                 "shop/paint": {
                     "name": "Χρωματοπωλείο"
                 },
+                "shop/party": {
+                    "name": "Κατάστημα Προμηθειών για Πάρτυ"
+                },
+                "shop/pastry": {
+                    "name": "Ζαχαροπλαστείο"
+                },
+                "shop/pawnbroker": {
+                    "name": "Ενεχυροδανειστήριο"
+                },
                 "shop/perfumery": {
                     "name": "Κατάστημα Αρωμάτων"
                 },
                     "name": "Κατάστημα Κατοικίδιων",
                     "terms": "Κατάστημα κατοικιδίων, πετ σοπ"
                 },
+                "shop/pet_grooming": {
+                    "name": "Κατάστημα Καλλωπισμού Κατοικίδιων"
+                },
                 "shop/photo": {
                     "name": "Φωτογραφείο",
                     "terms": "φωτογράφος"
                 },
+                "shop/pyrotechnics": {
+                    "name": "Κατάστημα Πυροτεχνημάτων"
+                },
                 "shop/radiotechnics": {
                     "name": "Μαγαζί Ηλεκτρονικών Εξαρτημάτων"
                 },
+                "shop/religion": {
+                    "name": "Κατάστημα Θρησκευτικών Ειδών"
+                },
                 "shop/seafood": {
                     "name": "Κατάστημα Θαλασσινών",
                     "terms": "θαλασσινά, ψάρια, ψαράδικο, ιχθυοπωλείο"
                 },
+                "shop/sewing": {
+                    "name": "Κατάστημα Προμηθειών για Ράψιμο"
+                },
                 "shop/shoes": {
                     "name": "Κατάστημα Υπόδησης",
                     "terms": "Κατάστημα υποδημάτων, κατάστημα παπουτσιών"
                     "name": "Κατάστημα Γραφικής Ύλης",
                     "terms": "Κατάστημα χαρτικών, κατάστημα γραφικής ύλης, βιβλιοπωλείο, βιβλιοχαρτοπωλείο"
                 },
+                "shop/storage_rental": {
+                    "name": "Ενοικιαζόμενος Χώρος Αποθήκευσης"
+                },
                 "shop/supermarket": {
                     "name": "Supermarket",
                     "terms": "Σούπερ μάρκετ, Υπεραγορά"
                     "name": "Τεϊοπωλείο",
                     "terms": "τσάι, τειοπωλείο, τεϊοποτείο, χαμομήλι, ροφήματα"
                 },
+                "shop/ticket": {
+                    "name": "Εκδοτήριο Εισιτηρίων"
+                },
+                "shop/tiles": {
+                    "name": "Κατάστημα Πλακιδίων"
+                },
                 "shop/tobacco": {
                     "name": "Κατάστημα Ειδών Καπνού"
                 },
                     "name": "Κατάστημα Παιχνιδιών",
                     "terms": "Κατάστημα παιχνιδιών"
                 },
+                "shop/trade": {
+                    "name": "Εμπορικό Κατάστημα"
+                },
                 "shop/travel_agency": {
                     "name": "Ταξιδιωτικό Γραφείο",
                     "terms": "Ταξιδιωτικό πρακτορείο, Γραφείο ταξιδίων"
                     "name": "Βουλκανιζατέρ",
                     "terms": "Βουλκανιζατέρ, Κατάστημα ελαστικών, λάστιχα, ζάντες"
                 },
+                "shop/vacant": {
+                    "name": "Κενό Κατάστημα"
+                },
                 "shop/vacuum_cleaner": {
                     "name": "Κατάστημα Ηλεκτρικών Σκουπών"
                 },
                 "shop/watches": {
                     "name": "Κατάστημα Ρολογιών"
                 },
+                "shop/water": {
+                    "name": "Κατάστημα Πόσης Νερού"
+                },
+                "shop/water_sports": {
+                    "name": "Κατάστημα Ειδών Θαλάσσιων Σπορ / Κολύμβησης"
+                },
                 "shop/weapons": {
                     "name": "Κατάστημα Οπλισμού"
                 },
+                "shop/wholesale": {
+                    "name": "Κατάστημα Χονδρικής"
+                },
                 "shop/window_blind": {
                     "name": "Κατάστημα σκιάστρων παραθύρου",
                     "terms": "Κατάστημα σκιάστρων παραθύρου, κατάστημα ρολών παραθύρου, γρίλιες"
                     "name": "Κάβα Κρασιών"
                 },
                 "tourism": {
-                    "name": "Τουρισμός",
-                    "terms": "Τουρισμός"
+                    "name": "Τουρισμός"
                 },
                 "tourism/alpine_hut": {
+                    "name": "Αλπική Καλύβα",
                     "terms": "Αλπική καλύβα, Αλπικό καταφύγιο"
                 },
+                "tourism/apartment": {
+                    "name": "Ξενώνας / Διαμέρισμα"
+                },
                 "tourism/aquarium": {
                     "name": "Ενυδρείο"
                 },
                     "name": "Έργο τέχνης",
                     "terms": "Έργο τέχνης"
                 },
+                "tourism/artwork/mural": {
+                    "name": "Τοιχογραφία"
+                },
+                "tourism/artwork/sculpture": {
+                    "name": "Γλυπτό"
+                },
+                "tourism/artwork/statue": {
+                    "name": "Άγαλμα"
+                },
                 "tourism/attraction": {
                     "name": "Τ",
                     "terms": "Τουριστικό Αξιοθέατο"
                 },
+                "tourism/camp_site": {
+                    "name": "Χώρος Κατασκήνωσης"
+                },
                 "tourism/caravan_site": {
                     "name": "Πάρκο τροχόσπιτων",
                     "terms": "Πάρκο τροχόσπιτων"
                 },
+                "tourism/chalet": {
+                    "name": "Εξοχική Κατοικία"
+                },
+                "tourism/gallery": {
+                    "name": "Γκαλερί Τέχνης"
+                },
                 "tourism/guest_house": {
                     "name": "Ξενώνας",
                     "terms": "Ξενώνας"
                     "name": "Πληροφορίες",
                     "terms": "Πληροφορίες"
                 },
+                "tourism/information/board": {
+                    "name": "Πίνακας Πληροφοριών"
+                },
+                "tourism/information/guidepost": {
+                    "name": "Οδηγός"
+                },
                 "tourism/information/map": {
                     "name": "Χάρτης"
                 },
+                "tourism/information/office": {
+                    "name": "Γραφείο Τουριστικών Πληροφοριών"
+                },
                 "tourism/motel": {
                     "name": "Μοτέλ",
                     "terms": "Πανδοχείο, Χάνι"
                     "name": "Πάρκο Ψυχαγωγίας",
                     "terms": "Θεματικό πάρκο, Λούνα παρκ"
                 },
+                "tourism/trail_riding_station": {
+                    "name": "Σταθμός Ιππασίας"
+                },
                 "tourism/viewpoint": {
                     "name": "Σημείο θέασης",
                     "terms": "Σημείο θέασης"
                 },
+                "tourism/wilderness_hut": {
+                    "name": "Ερημική Καλύβα"
+                },
                 "tourism/zoo": {
                     "name": "Ζωολογικός Κήπος",
                     "terms": "Ζωολογικός κήπος"
                 },
+                "traffic_calming": {
+                    "name": "Ελάφρυνση Κυκλοφορίας"
+                },
                 "traffic_calming/bump": {
                     "name": "Σαμαράκι",
                     "terms": "Μειωτής Ταχύτητας"
                 },
+                "traffic_calming/chicane": {
+                    "name": "Διαμόρφωση Οδού για Ήπια Κυκλοφορία"
+                },
+                "traffic_calming/choker": {
+                    "name": "Στένωση Οδού για Ήπια Κυκλοφορία"
+                },
+                "traffic_calming/cushion": {
+                    "name": "Σαμαράκι"
+                },
+                "traffic_calming/dip": {
+                    "name": "Βαθούλωμα"
+                },
+                "traffic_calming/hump": {
+                    "name": "Σαμαράκι"
+                },
+                "traffic_calming/island": {
+                    "name": "Νησίδα Κυκλοφορίας"
+                },
+                "traffic_calming/rumble_strip": {
+                    "name": "Λωρίδα Ρουμπούλ"
+                },
+                "traffic_calming/table": {
+                    "name": "Σαμαράκι"
+                },
+                "traffic_sign": {
+                    "name": "Σήμανση Κυκλοφορίας"
+                },
+                "traffic_sign/city_limit": {
+                    "name": "Σήμανση Ορίου Πόλης"
+                },
+                "traffic_sign/city_limit_vertex": {
+                    "name": "Σήμανση Ορίου Πόλης"
+                },
+                "traffic_sign/maxspeed": {
+                    "name": "Πινακίδα Ορίου Ταχύτητας"
+                },
+                "traffic_sign/maxspeed_vertex": {
+                    "name": "Πινακίδα Ορίου Ταχύτητας"
+                },
+                "traffic_sign_vertex": {
+                    "name": "Πινακίδα Κυκλοφορίας"
+                },
                 "type/boundary": {
                     "name": "Όριο",
                     "terms": "Όριο, Σύνορο"
                     "name": "Διοικητικό Όριο",
                     "terms": "Διοικητικό όριο, Σύνορο"
                 },
+                "type/enforcement": {
+                    "name": "Επιβολή"
+                },
                 "type/multipolygon": {
                     "name": "Πολύ-Πολύγωνο"
                 },
                 "type/restriction/no_u_turn": {
                     "name": "Όχι Αναστροφή"
                 },
+                "type/restriction/only_left_turn": {
+                    "name": "Μόνο Αριστερή Στροφή"
+                },
+                "type/restriction/only_right_turn": {
+                    "name": "Μόνο Δεξιά Στροφή"
+                },
+                "type/restriction/only_straight_on": {
+                    "name": "Μόνο Ευθεία"
+                },
+                "type/restriction/only_u_turn": {
+                    "name": "Μόνο Επιτόπια Στροφη"
+                },
                 "type/route": {
                     "name": "Δρομολόγιο",
                     "terms": "Δρομολόγιο, Διαδρομή"
                 "type/route/hiking": {
                     "name": "Διαδρομή Ορεινής Ανάβασης"
                 },
+                "type/route/horse": {
+                    "name": "Διαδρομή Ιππασίας"
+                },
                 "type/route/pipeline": {
                     "name": "Διαδρομή Σωλήνωσης"
                 },
                     "name": "Πορεία Δρόμου",
                     "terms": "Οδική διαδρομή, Οδικό δρομολόγιο"
                 },
+                "type/route/subway": {
+                    "name": "Υπόγεια Διαδρομή"
+                },
                 "type/route/train": {
                     "name": "Γραμμή Τραίνων"
                 },
                 "type/route/tram": {
                     "name": "Διαδρομή Τραμ"
                 },
+                "type/site": {
+                    "name": "Χώρος"
+                },
                 "vertex": {
                     "name": "Άλλο",
                     "terms": "Άλλο"
                 "waterway": {
                     "name": "Διαδρομή νερού"
                 },
+                "waterway/boatyard": {
+                    "name": "Ναυπηγείο"
+                },
                 "waterway/canal": {
                     "name": "Πλωτό Κανάλι",
                     "terms": "Κανάλι"
                 "waterway/fuel": {
                     "name": "Πρατήριο Καυσίμων Λιμένα"
                 },
+                "waterway/milestone": {
+                    "name": "Χιλιομετρικό Σημείο Υδατόδρομου"
+                },
                 "waterway/river": {
                     "name": "Ποταμός",
                     "terms": "Ποτάμι"
                     "name": "Ρέμα",
                     "terms": "Ρέμα"
                 },
+                "waterway/stream_intermittent": {
+                    "name": "Διαλείπουσα Ροή"
+                },
+                "waterway/water_point": {
+                    "name": "Θαλάσσιο Πόσιμο Νερό"
+                },
                 "waterway/waterfall": {
                     "name": "Καταράκτες"
                 },
index cd98df14ccc95e94bc35296f62196d0f9e10659d..183b2019883e879a0e0e9846aa850579ff6baa1e 100644 (file)
             "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",
             "show_more": "Show More",
             "view_on_osm": "View on openstreetmap.org",
             "all_fields": "All fields",
             "role": "Role",
             "choose": "Select feature type",
             "results": "{n} results for {search}",
-            "reference": "View on OpenStreetMap Wiki",
             "back_tooltip": "Change feature",
             "remove": "Remove",
             "search": "Search",
                 "tooltip": "Power Lines, Power Plants, Substations, etc."
             },
             "past_future": {
-                "description": "Past/Future",
                 "tooltip": "Proposed, Construction, Abandoned, Demolished, etc."
             },
             "others": {
-                "description": "Others",
                 "tooltip": "Everything Else"
             }
         },
             "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: {p} nodes, {l} lines, {a} areas, {r} relations. 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"
                 "category-building": {
                     "name": "Building Features"
                 },
-                "category-golf": {
-                    "name": "Golf Features"
-                },
                 "category-landuse": {
                     "name": "Land Use Features"
                 },
                     "label": "Type"
                 },
                 "website": {
-                    "label": "Website",
-                    "placeholder": "http://example.com/"
+                    "label": "Website"
                 },
                 "wetland": {
                     "label": "Type"
                 "building/terrace": {
                     "name": "Terraced houses"
                 },
-                "building/train_station": {
-                    "name": "Train Station"
-                },
                 "building/transportation": {
                     "name": "Transportation Building"
                 },
                 "golf/hole": {
                     "name": "Golf Hole"
                 },
-                "golf/lateral_water_hazard_area": {
-                    "name": "Lateral Water Hazard"
-                },
-                "golf/lateral_water_hazard_line": {
-                    "name": "Lateral Water Hazard"
-                },
                 "golf/rough": {
                     "name": "Rough"
                 },
                 "golf/tee": {
                     "name": "Tee Box"
                 },
-                "golf/water_hazard_area": {
-                    "name": "Water Hazard"
-                },
-                "golf/water_hazard_line": {
-                    "name": "Water Hazard"
-                },
                 "healthcare": {
                     "name": "Healthcare Facility"
                 },
                 "power/transformer": {
                     "name": "Transformer"
                 },
-                "public_transport/linear_platform": {
-                    "name": "Transit Stop / Platform"
-                },
-                "public_transport/linear_platform_aerialway": {
-                    "name": "Aerialway Stop / Platform"
-                },
-                "public_transport/linear_platform_bus": {
-                    "name": "Bus Stop / Platform"
-                },
-                "public_transport/linear_platform_ferry": {
-                    "name": "Ferry Stop / Platform"
-                },
-                "public_transport/linear_platform_light_rail": {
-                    "name": "Light Rail Stop / Platform"
-                },
-                "public_transport/linear_platform_monorail": {
-                    "name": "Monorail Stop / Platform"
-                },
-                "public_transport/linear_platform_subway": {
-                    "name": "Subway Stop / Platform"
-                },
-                "public_transport/linear_platform_train": {
-                    "name": "Train Stop / Platform"
-                },
-                "public_transport/linear_platform_tram": {
-                    "name": "Tram Stop / Platform"
-                },
-                "public_transport/linear_platform_trolleybus": {
-                    "name": "Trolleybus Stop / Platform"
-                },
                 "public_transport/platform": {
                     "name": "Transit Stop / Platform"
                 },
index f7b55af3a89a3ba90031a9d82fda9a3e33b23cda..9aca0b2957ed3ebb91a99af0b6f0ae5b4b29e374 100644 (file)
                 "restriction": "These features can't be merged because it would damage a \"{relation}\" relation.",
                 "relation": "These features can't be merged because they have conflicting relation roles.",
                 "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."
+                "conflicting_tags": "These features can't be merged because some of their tags have conflicting values.",
+                "paths_intersect": "These features can't be merged because the resulting path would intersect itself."
             },
             "move": {
                 "title": "Move",
             "modified": "Modified",
             "deleted": "Deleted",
             "created": "Created",
+            "outstanding_errors_message": "Please resolve all errors first. {count} remaining.",
+            "comment_needed_message": "Please add a changeset comment first.",
             "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.",
                 "tooltip_data": "Center and zoom the map to focus on this data.",
                 "tooltip_issue": "Center and zoom the map to focus on this issue."
             },
-            "no_documentation_combination": "There is no documentation available for this tag combination",
-            "no_documentation_key": "There is no documentation available for this key",
             "show_more": "Show More",
             "view_on_osm": "View on openstreetmap.org",
             "view_on_keepRight": "View on keepright.at",
             "role": "Role",
             "choose": "Select feature type",
             "results": "{n} results for {search}",
-            "reference": "View on OpenStreetMap Wiki",
-            "edit_reference": "Edit or translate description",
+            "no_documentation_key": "There is no documentation available.",
+            "edit_reference": "edit/translate",
             "wiki_reference": "View documentation",
             "wiki_en_reference": "View documentation in English",
+            "hidden_preset": {
+                "manual": "{features} are hidden. Enable them in the Map Data pane.",
+                "zoom": "{features} are hidden. Zoom in to enable them."
+            },
             "back_tooltip": "Change feature",
             "remove": "Remove",
             "search": "Search",
                     "tooltip": "Automatically detected map issues from keepright.at",
                     "title": "KeepRight Issues"
                 },
+                "improveOSM": {
+                    "tooltip": "Missing data automatically detected by improveosm.org",
+                    "title": "ImproveOSM Issues"
+                },
                 "custom": {
                     "tooltip": "Drag and drop a data file onto the page, or click the button to setup",
                     "title": "Custom Map Data",
                 "tooltip": "Power Lines, Power Plants, Substations, etc."
             },
             "past_future": {
-                "description": "Past/Future",
+                "description": "Past/Future Features",
                 "tooltip": "Proposed, Construction, Abandoned, Demolished, etc."
             },
             "others": {
-                "description": "Others",
+                "description": "Other Features",
                 "tooltip": "Everything Else"
             }
         },
             "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.",
-            "generic_name": "Possible generic name",
-            "generic_name_tooltip": "This feature seems to have a generic name \"{name}\". Please only use the name field to record the official name of a feature.",
-            "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: {p} nodes, {l} lines, {a} areas, {r} relations. 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",
         "QA": {
+            "improveOSM": {
+                "title": "ImproveOSM Detection",
+                "geometry_types": {
+                    "path": "paths",
+                    "parking": "parking",
+                    "road": "roads",
+                    "both": "roads and parking"
+                },
+                "directions": {
+                    "east": "east",
+                    "north": "north",
+                    "northeast": "northeast",
+                    "northwest": "northwest",
+                    "south": "south",
+                    "southeast": "southeast",
+                    "southwest": "southwest",
+                    "west": "west"
+                },
+                "error_types": {
+                    "ow": {
+                        "title": "Missing One-way",
+                        "description": "Along this section of {highway}, {percentage}% of {num_trips} recorded trips travel from {from_node} to {to_node}. There may be missing a \"oneway\" tag."
+                    },
+                    "mr": {
+                        "title": "Missing Geometry",
+                        "description": "{num_trips} recorded trips in this area suggest there may be unmapped {geometry_type} here.",
+                        "description_alt": "Data from a 3rd party suggests there may be unmapped {geometry_type} here."
+                    },
+                    "tr": {
+                        "title": "Missing Turn Restriction",
+                        "description": "{num_passed} of {num_trips} recorded trips (travelling {travel_direction}) make a turn from {from_way} to {to_way} at {junction}. There may be a missing \"{turn_restriction}\" restriction."
+                    }
+                }
+            },
             "keepRight": {
                 "title": "KeepRight Error",
                 "detail_title": "Error",
                 "title": "Quality Assurance",
                 "intro": "*Quality Assurance* (Q/A) tools can find improper tags, disconnected roads, and other issues with OpenStreetMap, which mappers can then fix. To view existing Q/A issues, click the {data} **Map data** panel to enable a specific Q/A layer.",
                 "tools_h": "Tools",
-                "tools": "The following tools are currently supported: [KeepRight](https://www.keepright.at/). Expect iD to support [Osmose](https://osmose.openstreetmap.fr/), [ImproveOSM](https://improveosm.org/en/), and more Q/A tools in the future.",
+                "tools": "The following tools are currently supported: [KeepRight](https://www.keepright.at/) and [ImproveOSM](https://improveosm.org/en/). Expect iD to support [Osmose](https://osmose.openstreetmap.fr/) and more Q/A tools in the future.",
                 "issues_h": "Handling Issues",
                 "issues": "Handling Q/A issues is similar to handling notes. Click on a marker to view the issue details in the sidebar. Each tool has its own capabilities, but generally you can comment and/or close an issue."
             },
                 }
             }
         },
+        "issues": {
+            "title": "Issues",
+            "key": "I",
+            "list_title": "Issues ({count})",
+            "errors": {
+                "list_title": "Errors ({count})"
+            },
+            "warnings": {
+                "list_title": "Warnings ({count})"
+            },
+            "no_issues": {
+                "message": "Everything looks fine",
+                "info": "Any issues will show up here as you edit"
+            },
+            "almost_junction": {
+                "message": "{feature} is very close but not connected to {feature2}",
+                "highway-highway": {
+                    "tip": "Intersecting highways should share a junction vertex."
+                }
+            },
+            "crossing_ways": {
+                "message": "{feature} crosses {feature2}",
+                "building-building": {
+                    "tip": "Buildings should not intersect except on different layers."
+                },
+                "building-highway": {
+                    "tip": "Highways crossing buildings should use bridges, tunnels, coverings, or entrances."
+                },
+                "building-railway": {
+                    "tip": "Railways crossing buildings should use bridges or tunnels."
+                },
+                "building-waterway": {
+                    "tip": "Waterways crossing buildings should use tunnels or different layers."
+                },
+                "highway-highway": {
+                    "tip": "Crossing highways should use bridges, tunnels, or intersections."
+                },
+                "highway-railway": {
+                    "tip": "Highways crossing railways should use bridges, tunnels, or level crossings."
+                },
+                "highway-waterway": {
+                    "tip": "Highways crossing waterways should use bridges, tunnels, or fords."
+                },
+                "railway-railway": {
+                    "tip": "Crossing railways should be connected or use bridges or tunnels."
+                },
+                "railway-waterway": {
+                    "tip": "Railways crossing waterways should use bridges or tunnels."
+                },
+                "waterway-waterway": {
+                    "tip": "Crossing waterways should be connected or use tunnels."
+                },
+                "tunnel-tunnel": {
+                    "tip": "Crossing tunnels should use different layers."
+                },
+                "tunnel-tunnel_connectable": {
+                    "tip": "Crossing tunnels should be connected or use different layers."
+                },
+                "bridge-bridge": {
+                    "tip": "Crossing bridges should use different layers."
+                },
+                "bridge-bridge_connectable": {
+                    "tip": "Crossing bridges should be connected or use different layers."
+                },
+                "indoor-indoor": {
+                    "tip": "Crossing indoor features should use different levels."
+                },
+                "indoor-indoor_connectable": {
+                    "tip": "Crossing indoor features should be connected or use different levels."
+                }
+            },
+            "deprecated_tag": {
+                "single": {
+                    "message": "{feature} has the outdated tag \"{tag}\""
+                },
+                "combination": {
+                    "message": "{feature} has an outdated tag combination: {tags}"
+                },
+                "tip": "Some tags become deprecated over time and should be replaced."
+            },
+            "disconnected_way": {
+                "highway": {
+                    "message": "{highway} is disconnected from other roads and paths",
+                    "tip": "Highways should connect to other highways or building entrances."
+                }
+            },
+            "generic_name": {
+                "message": "{feature} has the generic name \"{name}\"",
+                "tip": "Names should be the actual, on-the-ground names of features."
+            },
+            "many_deletions": {
+                "points-lines-areas": {
+                    "message": "Deleting {n} features: {p} points, {l} lines, and {a} areas"
+                },
+                "points-lines-areas-relations": {
+                    "message": "Deleting {n} features: {p} points, {l} lines, {a} areas, and {r} relations"
+                },
+                "tip": "Only redundant or nonexistent features should be deleted."
+            },
+            "missing_tag": {
+                "any": {
+                    "message": "{feature} has no tags"
+                },
+                "descriptive": {
+                    "message": "{feature} has no descriptive tags"
+                },
+                "specific": {
+                    "message": "{feature} has no \"{tag}\" tag"
+                },
+                "tip": "Features must have tags that define what they are."
+            },
+            "old_multipolygon": {
+                "message": "{multipolygon} has misplaced tags",
+                "tip": "Multipolygons should be tagged on their relation, not their outer way."
+            },
+            "tag_suggests_area": {
+                "message": "{feature} should be a closed area based on the tag \"{tag}\"",
+                "tip": "Areas must have connected endpoints."
+            },
+            "fix": {
+                "connect_almost_junction": {
+                    "annotation": "Connected very close features."
+                },
+                "connect_crossing_features": {
+                    "annotation": "Connected crossing features."
+                },
+                "connect_endpoints": {
+                    "title": "Connect the ends",
+                    "annotation": "Connected the endpoints of a way."
+                },
+                "connect_features": {
+                    "title": "Connect the features"
+                },
+                "continue_from_start": {
+                    "title": "Continue drawing from start"
+                },
+                "continue_from_end": {
+                    "title": "Continue drawing from end"
+                },
+                "delete_feature": {
+                    "title": "Delete this feature"
+                },
+                "move_tags": {
+                    "title": "Move the tags",
+                    "annotation": "Moved tags."
+                },
+                "remove_deprecated_tag": {
+                    "annotation": "Removed an old tag."
+                },
+                "remove_deprecated_tag_combo": {
+                    "annotation": "Removed an old tag combination."
+                },
+                "remove_generic_name": {
+                    "title": "Remove the name",
+                    "annotation": "Removed a generic name."
+                },
+                "remove_tag": {
+                    "title": "Remove the tag",
+                    "annotation": "Removed tag."
+                },
+                "remove_tags": {
+                    "title": "Remove the tags"
+                },
+                "reposition_features": {
+                    "title": "Reposition the features"
+                },
+                "select_preset": {
+                    "title": "Select a feature type"
+                },
+                "tag_as_disconnected": {
+                    "title": "Tag as disconnected",
+                    "annotation": "Tagged very close features as disconnected."
+                },
+                "upgrade_tag": {
+                    "title": "Upgrade the tag",
+                    "annotation": "Upgraded an old tag."
+                },
+                "upgrade_tag_combo": {
+                    "title": "Upgrade the tags",
+                    "annotation": "Upgraded an old tag combination."
+                },
+                "use_bridge_or_tunnel": {
+                    "title": "Use a bridge or tunnel"
+                },
+                "use_different_layers": {
+                    "title": "Use different layers"
+                },
+                "use_different_levels": {
+                    "title": "Use different levels"
+                },
+                "use_tunnel": {
+                    "title": "Use a tunnel"
+                }
+            }
+        },
         "intro": {
             "done": "done",
             "ok": "OK",
                 "category-building": {
                     "name": "Building Features"
                 },
-                "category-golf": {
+                "category-golf-area": {
+                    "name": "Golf Features"
+                },
+                "category-golf-line": {
                     "name": "Golf Features"
                 },
                 "category-landuse": {
                 "denotation": {
                     "label": "Denotation"
                 },
+                "departures_board": {
+                    "label": "Departures Board",
+                    "options": {
+                        "yes": "Yes",
+                        "timetable": "Timetable",
+                        "realtime": "Realtime",
+                        "no": "None"
+                    }
+                },
                 "description": {
                     "label": "Description"
                 },
                 "internet_access/ssid": {
                     "label": "SSID (Network Name)"
                 },
+                "junction_line": {
+                    "label": "Junction",
+                    "options": {
+                        "roundabout": "Roundabout",
+                        "circular": "Traffic Circle",
+                        "jughandle": "Jughandle"
+                    }
+                },
                 "junction/ref_oneway": {
                     "label": "Junction Number"
                 },
                         "lane": "Roadside Lane"
                     }
                 },
-                "passenger_information_display": {
-                    "label": "Passenger information display"
-                },
                 "payment_multi": {
                     "label": "Payment Types"
                 },
                         "difficult_alpine_hiking": "T6: Difficult Alpine Hiking"
                     }
                 },
+                "salt": {
+                    "label": "Salt"
+                },
                 "sanitary_dump_station": {
                     "label": "Toilet Disposal"
                 },
                         "only": "Takeaway Only"
                     }
                 },
+                "tidal": {
+                    "label": "Tidal"
+                },
                 "to": {
                     "label": "To"
                 },
                 },
                 "website": {
                     "label": "Website",
-                    "placeholder": "http://example.com/"
+                    "placeholder": "https://example.com"
                 },
                 "wetland": {
                     "label": "Type"
             "presets": {
                 "aerialway": {
                     "name": "Aerialway",
-                    "terms": "ski lift,funifor,funitel"
+                    "terms": ""
                 },
                 "aeroway": {
                     "name": "Aeroway",
                     "name": "Highway",
                     "terms": ""
                 },
+                "landuse": {
+                    "name": "Land Use",
+                    "terms": ""
+                },
+                "leisure": {
+                    "name": "Leisure",
+                    "terms": ""
+                },
+                "man_made": {
+                    "name": "Man Made",
+                    "terms": ""
+                },
+                "natural": {
+                    "name": "Natural",
+                    "terms": ""
+                },
                 "place": {
                     "name": "Place",
                     "terms": ""
                     "name": "Seamark",
                     "terms": ""
                 },
+                "tourism": {
+                    "name": "Tourism",
+                    "terms": ""
+                },
                 "waterway": {
                     "name": "Waterway",
                     "terms": ""
                     "name": "Clock",
                     "terms": ""
                 },
+                "amenity/clock/sundial": {
+                    "name": "Sundial",
+                    "terms": "gnomon,shadow"
+                },
                 "amenity/college": {
                     "name": "College Grounds",
                     "terms": "university,undergraduate school"
                     "name": "Kebab Fast Food",
                     "terms": "bar,breakfast,cafe,café,canteen,dine,dining,dinner,drive-in,eat,grill,lunch,table"
                 },
+                "amenity/fast_food/mexican": {
+                    "name": "Mexican Fast Food",
+                    "terms": "breakfast,dine,dining,dinner,drive-in,eat,grill,lunch,table,tacos,burritos,enchiladas,fajitas,nachos,tortillas,salsa,tamales,quesadillas"
+                },
                 "amenity/fast_food/pizza": {
                     "name": "Pizza Fast Food",
                     "terms": "dine,dining,dinner,drive-in,eat,lunch,table,deep dish,thin crust,slice"
                     "name": "Pharmacy Counter",
                     "terms": "apothecary,drug store,drugstore,med*,prescription"
                 },
+                "amenity/photo_booth": {
+                    "name": "Photo Booth",
+                    "terms": "photobooth,photo,booth,kiosk,camera"
+                },
                 "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"
                     "terms": ""
                 },
                 "building/train_station": {
-                    "name": "Train Station",
+                    "name": "Train Station Building",
                     "terms": ""
                 },
                 "building/apartments": {
                     "name": "Sand Trap",
                     "terms": "hazard,bunker"
                 },
+                "golf/cartpath_service": {
+                    "name": "Golf Cartpath / Service Road",
+                    "terms": ""
+                },
+                "golf/cartpath": {
+                    "name": "Golf Cartpath",
+                    "terms": ""
+                },
+                "golf/driving_range": {
+                    "name": "Driving Range",
+                    "terms": ""
+                },
                 "golf/fairway": {
                     "name": "Fairway",
                     "terms": ""
                     "name": "Golf Hole",
                     "terms": ""
                 },
-                "golf/lateral_water_hazard_area": {
+                "golf/lateral_water_hazard": {
                     "name": "Lateral Water Hazard",
                     "terms": ""
                 },
-                "golf/lateral_water_hazard_line": {
-                    "name": "Lateral Water Hazard",
+                "golf/path": {
+                    "name": "Golf Walking Path",
                     "terms": ""
                 },
                 "golf/rough": {
                     "name": "Tee Box",
                     "terms": "teeing ground"
                 },
-                "golf/water_hazard_area": {
-                    "name": "Water Hazard",
-                    "terms": ""
-                },
-                "golf/water_hazard_line": {
+                "golf/water_hazard": {
                     "name": "Water Hazard",
                     "terms": ""
                 },
                     "name": "Junction",
                     "terms": ""
                 },
-                "landuse": {
-                    "name": "Land Use",
-                    "terms": ""
-                },
                 "landuse/basin": {
                     "name": "Basin",
                     "terms": ""
                     "name": "Vineyard",
                     "terms": "grape,wine"
                 },
-                "leisure": {
-                    "name": "Leisure",
-                    "terms": ""
-                },
                 "leisure/adult_gaming_centre": {
                     "name": "Adult Gaming Center",
                     "terms": "gambling,slot machine"
                     "name": "Picnic Table",
                     "terms": "bench"
                 },
+                "leisure/picnic_table/chess": {
+                    "name": "Chess Table",
+                    "terms": "bench,chess board,checkerboard,checkers,chequerboard,game table"
+                },
                 "leisure/pitch": {
                     "name": "Sport Pitch",
                     "terms": "field"
                     "name": "Sports Center / Complex",
                     "terms": ""
                 },
+                "leisure/sports_centre/climbing": {
+                    "name": "Climbing Gym",
+                    "terms": "abseiling,artificial climbing wall,belaying,bouldering,rock climbing facility,indoor rock wall,rappeling,rock gym,ropes"
+                },
                 "leisure/sports_centre/swimming": {
                     "name": "Swimming Pool Facility",
                     "terms": "dive,water"
                     "name": "Line",
                     "terms": ""
                 },
-                "man_made": {
-                    "name": "Man Made",
-                    "terms": ""
-                },
                 "man_made/adit": {
                     "name": "Adit",
                     "terms": "entrance,underground,mine,cave"
                     "name": "Tower",
                     "terms": ""
                 },
+                "man_made/tower/bell_tower": {
+                    "name": "Bell Tower",
+                    "terms": "belfry,bell gable,campanile,church tower,klockstapel"
+                },
                 "man_made/tower/communication": {
                     "name": "Communication Tower",
                     "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/tower/minaret": {
+                    "name": "Minaret",
+                    "terms": "Islam,mosque,Muezzin,Muslim"
+                },
                 "man_made/tower/observation": {
                     "name": "Observation Tower",
                     "terms": "lookout tower,fire tower"
                     "name": "Telecom Manhole",
                     "terms": "cover,phone,hole,telecom,telephone,bt"
                 },
-                "natural": {
-                    "name": "Natural",
-                    "terms": ""
-                },
                 "natural/bare_rock": {
                     "name": "Bare Rock",
                     "terms": "rock"
                     "name": "Transformer",
                     "terms": ""
                 },
-                "public_transport/linear_platform_aerialway": {
-                    "name": "Aerialway Stop / Platform",
-                    "terms": "aerialway,cable car,platform,public transit,public transportation,transit,transportation"
-                },
-                "public_transport/linear_platform_bus": {
-                    "name": "Bus Stop / Platform",
-                    "terms": "bus,platform,public transit,public transportation,transit,transportation"
-                },
-                "public_transport/linear_platform_ferry": {
-                    "name": "Ferry Stop / Platform",
-                    "terms": "boat,dock,ferry,pier,platform,public transit,public transportation,transit,transportation"
-                },
-                "public_transport/linear_platform_light_rail": {
-                    "name": "Light Rail Stop / Platform",
-                    "terms": "electric,light rail,platform,public transit,public transportation,rail,track,tram,trolley,transit,transportation"
-                },
-                "public_transport/linear_platform_monorail": {
-                    "name": "Monorail Stop / Platform",
-                    "terms": "monorail,platform,public transit,public transportation,rail,transit,transportation"
-                },
-                "public_transport/linear_platform_subway": {
-                    "name": "Subway Stop / Platform",
-                    "terms": "metro,platform,public transit,public transportation,rail,subway,track,transit,transportation,underground"
-                },
-                "public_transport/linear_platform_train": {
-                    "name": "Train Stop / Platform",
-                    "terms": "platform,public transit,public transportation,rail,track,train,transit,transportation"
-                },
-                "public_transport/linear_platform_tram": {
-                    "name": "Tram Stop / Platform",
-                    "terms": "electric,light rail,platform,public transit,public transportation,rail,streetcar,track,tram,trolley,transit,transportation"
-                },
-                "public_transport/linear_platform_trolleybus": {
-                    "name": "Trolleybus Stop / Platform",
-                    "terms": "bus,electric,platform,public transit,public transportation,streetcar,trackless,tram,trolley,transit,transportation"
-                },
-                "public_transport/linear_platform": {
-                    "name": "Transit Stop / Platform",
-                    "terms": "platform,public transit,public transportation,transit,transportation"
-                },
                 "public_transport/platform_aerialway": {
                     "name": "Aerialway Stop / Platform",
                     "terms": "aerialway,cable car,platform,public transit,public transportation,transit,transportation"
                 },
                 "shop/bakery": {
                     "name": "Bakery",
-                    "terms": ""
+                    "terms": "bread,cakes,rolls"
                 },
                 "shop/bathroom_furnishing": {
                     "name": "Bathroom Furnishing Store",
                 },
                 "shop/beverages": {
                     "name": "Beverage Store",
-                    "terms": ""
+                    "terms": "drinks"
                 },
                 "shop/bicycle": {
                     "name": "Bicycle Shop",
-                    "terms": "bike,repair"
+                    "terms": "bike,repair,tricycle,unicycle"
                 },
                 "shop/bookmaker": {
                     "name": "Bookmaker",
-                    "terms": "betting"
+                    "terms": "betting,bookie"
                 },
                 "shop/books": {
                     "name": "Book Store",
                 },
                 "shop/butcher": {
                     "name": "Butcher",
-                    "terms": "meat"
+                    "terms": "chicken,beef,lamb,meat,pork"
                 },
                 "shop/candles": {
                     "name": "Candle Shop",
-                    "terms": ""
+                    "terms": "wax"
                 },
                 "shop/car_parts": {
                     "name": "Car Parts Store",
-                    "terms": "auto"
+                    "terms": "automobile,automotive"
                 },
                 "shop/car_repair": {
                     "name": "Car Repair Shop",
-                    "terms": "auto,garage,service"
+                    "terms": "automobile,automotive,garage,service"
                 },
                 "shop/car": {
                     "name": "Car Dealership",
-                    "terms": "auto"
+                    "terms": "automobile,automotive"
                 },
                 "shop/caravan": {
                     "name": "RV Dealership",
-                    "terms": "auto"
+                    "terms": "auto,camper,recreational vehicle"
                 },
                 "shop/carpet": {
                     "name": "Carpet Store",
                 },
                 "shop/chocolate": {
                     "name": "Chocolate Store",
-                    "terms": ""
+                    "terms": "cocoa"
                 },
                 "shop/clothes": {
                     "name": "Clothing Store",
                 },
                 "shop/computer": {
                     "name": "Computer Store",
-                    "terms": ""
+                    "terms": "desktop,laptop,hardware,operating system,software"
                 },
                 "shop/confectionery": {
                     "name": "Candy Store",
                 },
                 "shop/copyshop": {
                     "name": "Copy Store",
-                    "terms": ""
+                    "terms": "print,scan"
                 },
                 "shop/cosmetics": {
                     "name": "Cosmetics Store",
-                    "terms": ""
+                    "terms": "make-up,makeup"
                 },
                 "shop/country_store": {
                     "name": "Country Store",
                 },
                 "shop/e-cigarette": {
                     "name": "E-Cigarette Shop",
-                    "terms": "electronic,vapor"
+                    "terms": "electronic,vape,vaping,vapor"
                 },
                 "shop/electronics": {
                     "name": "Electronics Store",
                 },
                 "shop/fishing": {
                     "name": "Fishing Shop",
-                    "terms": ""
+                    "terms": "bait,fishing line,flies,fly,lure,reel,rod,tackle"
                 },
                 "shop/florist": {
                     "name": "Florist",
                 },
                 "shop/greengrocer": {
                     "name": "Greengrocer",
-                    "terms": "fruit,vegetable"
+                    "terms": "fruit,produce,vegetable"
                 },
                 "shop/hairdresser_supply": {
                     "name": "Hairdresser Supply Store",
                 },
                 "shop/hifi": {
                     "name": "Hifi Store",
-                    "terms": "stereo,video"
+                    "terms": "audio,hi-fi,high fidelity,stereo,video"
                 },
                 "shop/houseware": {
                     "name": "Houseware Store",
                 },
                 "shop/hunting": {
                     "name": "Hunting Shop",
-                    "terms": ""
+                    "terms": "arrows,bows,bullets,crossbows,rifles,traps"
                 },
                 "shop/interior_decoration": {
                     "name": "Interior Decoration Store",
                 },
                 "shop/jewelry": {
                     "name": "Jeweler",
-                    "terms": "diamond,gem,ring"
+                    "terms": "bracelet,diamond,earrings,gem,necklace,pins,ring"
                 },
                 "shop/kiosk": {
                     "name": "Kiosk",
                 },
                 "shop/kitchen": {
                     "name": "Kitchen Design Store",
-                    "terms": ""
+                    "terms": "cabinets,countertops,sinks"
                 },
                 "shop/laundry": {
                     "name": "Laundry",
                 },
                 "shop/music": {
                     "name": "Music Store",
-                    "terms": "CD,vinyl"
+                    "terms": "tape casettes,CDs,compact discs,vinyl records"
                 },
                 "shop/musical_instrument": {
                     "name": "Musical Instrument Store",
                 },
                 "shop/pet_grooming": {
                     "name": "Pet Grooming Store",
-                    "terms": "dog"
+                    "terms": "cat,dog"
                 },
                 "shop/pet": {
                     "name": "Pet Store",
                 },
                 "shop/radiotechnics": {
                     "name": "Radio/Electronic Component Store",
-                    "terms": ""
+                    "terms": "antenna,transistor"
                 },
                 "shop/religion": {
                     "name": "Religious Store",
                 },
                 "shop/shoes": {
                     "name": "Shoe Store",
-                    "terms": ""
+                    "terms": "boots,cleats,clogs,heels,loafers,oxfords,sneakers"
                 },
                 "shop/sports": {
                     "name": "Sporting Goods Store",
-                    "terms": ""
+                    "terms": "athletics"
                 },
                 "shop/stationery": {
                     "name": "Stationery Store",
                 },
                 "shop/storage_rental": {
                     "name": "Storage Rental",
-                    "terms": ""
+                    "terms": "garages"
                 },
                 "shop/supermarket": {
                     "name": "Supermarket",
                 },
                 "shop/tattoo": {
                     "name": "Tattoo Parlor",
-                    "terms": ""
+                    "terms": "ink"
                 },
                 "shop/tea": {
                     "name": "Tea Store",
                 },
                 "shop/ticket": {
                     "name": "Ticket Seller",
-                    "terms": ""
+                    "terms": "box office"
                 },
                 "shop/tiles": {
                     "name": "Tile Shop",
                 },
                 "shop/tobacco": {
                     "name": "Tobacco Shop",
-                    "terms": ""
+                    "terms": "cigarettes,cigars"
                 },
                 "shop/toys": {
                     "name": "Toy Store",
-                    "terms": ""
+                    "terms": "games"
                 },
                 "shop/trade": {
                     "name": "Trade Shop",
                 },
                 "shop/video": {
                     "name": "Video Store",
-                    "terms": "DVD"
+                    "terms": "DVD,VHS,video casette"
                 },
                 "shop/watches": {
                     "name": "Watches Shop",
                     "name": "Wine Shop",
                     "terms": ""
                 },
-                "tourism": {
-                    "name": "Tourism",
-                    "terms": ""
-                },
                 "tourism/alpine_hut": {
                     "name": "Alpine Hut",
                     "terms": "climbing hut"
index ede3eabb75615fe938e64a5ba34e750610477849..bc9bee37e4e6a20908451c7cf73ae4106989f2fa 100644 (file)
                 "restriction": "Ĉi tiuj elementoj ne povas esti kunfanditaj, ĉar tio ĉi detruus la rilaton “{relation}”.",
                 "relation": "Ĉi tiuj elementoj ne povas esti kunfanditaj, ĉar ili havas konfliktajn rolojn de rilatoj.",
                 "incomplete_relation": "Ĉi tiuj objektoj ne povas esti kunfanditaj, ĉar almenaŭ unu ne estas elŝutita tute.",
-                "conflicting_tags": "Ĉi tiuj objektoj ne povas esti kunfanditaj, ĉar iuj el iliaj etikedoj havas konfliktajn valorojn."
+                "conflicting_tags": "Ĉi tiuj objektoj ne povas esti kunfanditaj, ĉar iuj el iliaj etikedoj havas konfliktajn valorojn.",
+                "paths_intersect": "Tiuj ĉi objektoj ne povas esti kunfanditaj, ĉar la rezulta linio mem-intersekcus."
             },
             "move": {
                 "title": "Movi",
             "modified": "Ŝanĝita",
             "deleted": "Forigita",
             "created": "Kreita",
+            "outstanding_errors_message": "Unue bonvolu solvi ĉiujn problemojn. Pliaj problemoj: {count}.",
+            "comment_needed_message": "Unue aldonu komenton por ŝanĝaro.",
             "about_changeset_comments": "Pri ŝanĝaraj komentoj",
             "google_warning": "Vi menciis Google en ĉi tiu komento: memoru ke kopiado de datumoj el Google Maps estas absolute malpermesata.",
             "google_warning_link": "https://www.openstreetmap.org/copyright/eo"
                 "tooltip_data": "Centrigi kaj pligrandigi la mapon por koncentriĝi sur tiu ĉi datumo.",
                 "tooltip_issue": "Centrigi kaj pligrandigi la mapon por koncentriĝi sur tiu ĉi problemo."
             },
-            "no_documentation_combination": "Estas neniu disponebla dokumentaro pri ĉi tiu kombino de etikedoj",
-            "no_documentation_key": "Estas neniu disponebla dokumentaro pri ĉi tiu ŝlosilo",
             "show_more": "Montri pli",
             "view_on_osm": "Montri ĉe openstreetmap.org",
             "view_on_keepRight": "Montri ĉe keepright.at",
             "role": "Rolo",
             "choose": "Elektu specon de objekto",
             "results": "{n} rezultoj por {search}",
-            "reference": "Montri ĉe OpenStreetMap-vikio",
-            "edit_reference": "Redakti aŭ traduki priskribon",
+            "no_documentation_key": "Estas neniu disponebla dokumentaro.",
+            "edit_reference": "redakti/traduki",
             "wiki_reference": "Montri dokumentaron",
             "wiki_en_reference": "Montri dokumenteron en la angla",
+            "hidden_preset": {
+                "manual": "{features} estas kaŝitaj. Vi povas aktivigi ilin per la panelo de map-datumoj.",
+                "zoom": "{features} estas kaŝitaj. Pligrandigu por vidigi ilin."
+            },
             "back_tooltip": "Ŝanĝi objekton",
             "remove": "Forigi",
             "search": "Serĉi",
                     "tooltip": "Aŭtomate trovitajn map-erarojn el keepright.at",
                     "title": "KeepRight-eraroj"
                 },
+                "improveOSM": {
+                    "tooltip": "Mankantaj datumoj aŭtomate trovitaj de ImproveOSM.org",
+                    "title": "ImproveOSM-eraroj"
+                },
                 "custom": {
                     "tooltip": "Ŝovu kaj demetu datum-dosieron sur la paĝon, aŭ klaku la butonon por agordi",
                     "title": "Propraj map-datumoj",
                 "tooltip": "Elektraj kondukiloj, elektrocentraloj, elektrosubcentraloj, ktp."
             },
             "past_future": {
-                "description": "Malestantaj",
+                "description": "Malestantaj objektoj",
                 "tooltip": "Proponitaj, dum konstruado, forlasitaj, ruinigitaj, ktp."
             },
             "others": {
-                "description": "Aliaj",
+                "description": "Aliaj objektoj",
                 "tooltip": "Ĉiuj aliaj"
             }
         },
             "on_wiki": "{tag} en OSM-vikio",
             "used_with": "uzata kun {type}"
         },
-        "validations": {
-            "disconnected_highway": "Nekonektita vojo",
-            "disconnected_highway_tooltip": "Vojoj devas esti konektitaj al aliaj vojoj aŭ enirejoj de konstruaĵoj",
-            "generic_name": "Ebla misuzo de etikedo “nomo”",
-            "generic_name_tooltip": "Ŝajnas, ke tiu ĉi objekto havas nomon “{name}”, kiu priskribas ĝian specon. Uzu la kampon “nomo” nur por enigi oficialan nomon por la objekto.",
-            "old_multipolygon": "Etikedoj de plurangularoj sur ekstera linio",
-            "old_multipolygon_tooltip": "Ĉi tiu stilo de plurangularoj estas evitinda. Bonvolu atribui etikedojn al patra plurangularo anstataŭ al ekstera linio.",
-            "untagged_point": "Senetikeda punkto",
-            "untagged_point_tooltip": "Elektu specon de objekto, kiu priskribas ĉi tiun punkton.",
-            "untagged_line": "Senetikeda linio",
-            "untagged_line_tooltip": "Elektu specon de objekto, kiu priskribas ĉi tiun linion.",
-            "untagged_area": "Senetikeda areo",
-            "untagged_area_tooltip": "Elektu specon de objekto, kiu priskribas ĉi tiun areon.",
-            "untagged_relation": "Senetikeda rilato",
-            "untagged_relation_tooltip": "Elektu specon de objekto, kiu priskribas ĉi tiun rilaton.",
-            "many_deletions": "Vi forigas {n} elementojn: {p} nodo(j)n, {l} linio(j)n, {a} areo(j)n kaj {r} rilato(j)n.  Ĉu vi certe volas fari tion. Tio ĉi forigos ilin el la mapo, kiun ĉiuj vidas ĉe openstreetmap.org.",
-            "tag_suggests_area": "La etikedo {tag} indikas, ke linio estu areo, sed ĝi ne estas areo",
-            "deprecated_tags": "Evitindaj etikedoj: {tags}"
-        },
         "zoom": {
             "in": "Pligrandigi",
             "out": "Malgrandigi"
         "cannot_zoom": "Ne povas plie plibonigi en nuna reĝimo.",
         "full_screen": "Baskuligi plenekranon",
         "QA": {
+            "improveOSM": {
+                "title": "Trovita de ImproveOSM",
+                "geometry_types": {
+                    "path": "vojeto(j)",
+                    "parking": "parkumejo",
+                    "road": "vojo(j)",
+                    "both": "vojo(j) kaj parkumejo"
+                },
+                "directions": {
+                    "east": "orienten",
+                    "north": "norden",
+                    "northeast": "nord-orienten",
+                    "northwest": "nord-okcidenten",
+                    "south": "suden",
+                    "southeast": "sud-orienten",
+                    "southwest": "sud-okcidenten",
+                    "west": "okcidenten"
+                },
+                "error_types": {
+                    "ow": {
+                        "title": "Mankanta etikedo “unudirekta”",
+                        "description": "Laŭlonge de tiu ĉi sekcio de  {highway}, {percentage}% da {num_trips} registritaj spuroj kondukis el {from_node} al {to_node}. Eble mankas la etikedo “oneway” (unidirekta)."
+                    },
+                    "mr": {
+                        "title": "Mankanta geometrio",
+                        "description": "{num_trips} registritaj spuroj en tiu ĉi areo indikas, ke tie povas esti iu(j) nemapigita(j) {geometry_type}.",
+                        "description_alt": "Datumoj de ekstera servo indikas, ke tie povas esti iu(j) nemapigita(j) {geometry_type}."
+                    },
+                    "tr": {
+                        "title": "Mankanta turna limigo",
+                        "description": "{num_passed} el {num_trips} registritaj spuroj (direktantaj {travel_direction}) ĉe {junction} turniĝas el {from_way} al {to_way}. Eble mankas turna limigo “{turn_restriction}”."
+                    }
+                }
+            },
             "keepRight": {
                 "title": "KeepRight-eraro",
                 "detail_title": "Eraro",
                     },
                     "110": {
                         "title": "Interesejo sen nomo",
-                        "description": "{var1} }estas etikedita kiel “{var2}”, do ĝi devas havi etikedon de nomo."
+                        "description": "{var1} estas etikedita kiel “{var2}”, do ĝi devas havi etikedon de nomo."
                     },
                     "120": {
                         "title": "Linio sen nodoj",
                 "title": "Certigo pri kvalito",
                 "intro": "Iloj por certigo pri kvalito povas trovi malĝustajn etikedojn, nekonektitajn vojojn kaj aliajn problemojn pri OpenStreetMap, kiuj mapigistoj povas ripari. Por vidigi ekzistajn problemojn pri kvalito, klaku la panelon {data} **map-datumoj** por vidigi specifan tavolon de problemoj pri kvalito.",
                 "tools_h": "Iloj",
-                "tools": "La jena ilo estas nuntempe subtenata: KeepRight](https://www.keepright.at/). Esperu al iD subteni estontece [Osmose](https://osmose.openstreetmap.fr/), [ImproveOSM](https://improveosm.org/) kaj pliajn ilojn.",
+                "tools": "La jenaj iloj estas nuntempe disponeblaj: [KeepRight](https://www.keepright.at/) kaj [ImproveOSM](https://improveosm.org/). Esperu al iD subteni estontece [Osmose](https://osmose.openstreetmap.fr/) kaj pliajn ilojn.",
                 "issues_h": "Pritrakti problemojn",
                 "issues": "Pritrakti problemojn pri kvalito estas simila al pritrakti rimarkojn. Klaku la markon por vidigi detalojn pri la problemo sur la flankbreto. Ĉiu ilo karakterizas per siaj propraj kapabloj, sed ĝenerale vi povas komenti aŭ fermi problemon."
             },
                 }
             }
         },
+        "issues": {
+            "title": "Problemoj",
+            "key": "I",
+            "list_title": "Problemoj ({count})",
+            "errors": {
+                "list_title": "Eraroj ({count})"
+            },
+            "warnings": {
+                "list_title": "Avertoj ({count})"
+            },
+            "no_issues": {
+                "message": "Ĉio ŝajnas ĝuste",
+                "info": "Ĉiaj problemoj montriĝos tie ĉi dum mapigado."
+            },
+            "almost_junction": {
+                "message": "{feature} estas tre proksima – sed ne kunigita – al {feature2}",
+                "highway-highway": {
+                    "tip": "Intersekcantaj vojoj ĉiam kunhavigu verticon de vojkruciĝo."
+                }
+            },
+            "crossing_ways": {
+                "message": "{feature} intersekciĝas kun {feature2}",
+                "building-building": {
+                    "tip": "Konturoj de konstruaĵoj ne intersekciĝu, escepte se sur malsamaj tavoloj."
+                },
+                "building-highway": {
+                    "tip": "Vojoj intersekcantaj kun konstruaĵoj estu pontoj, tuneloj, tegmentoj aŭ enirejoj."
+                },
+                "building-railway": {
+                    "tip": "Fervojoj intersekcantaj kun konstruaĵoj estu pontoj aŭ tuneloj."
+                },
+                "building-waterway": {
+                    "tip": "Akvofluoj intersekcantaj kun konstruaĵoj uzu tunelojn aŭ malsamajn tavolojn."
+                },
+                "highway-highway": {
+                    "tip": "Intersekciĝantaj vojoj estu pontoj, tuneloj aŭ vojkruciĝoj."
+                },
+                "highway-railway": {
+                    "tip": "Vojoj intersekcantaj fervojoj estu pontoj, tuneloj aŭ traknivelaj pasejoj."
+                },
+                "highway-waterway": {
+                    "tip": "Vojoj intersekcantaj akvofluoj estu pontoj, tuneloj aŭ travadejoj."
+                },
+                "railway-railway": {
+                    "tip": "Intersekciĝantaj fervojoj estu konektitaj, aŭ estu pontoj aŭ tuneloj."
+                },
+                "railway-waterway": {
+                    "tip": "Fervojoj intersekcantaj akvofluoj estu pontoj aŭ tuneloj."
+                },
+                "waterway-waterway": {
+                    "tip": "Intersekciĝantaj akvofluoj estu konektitaj, aŭ estu tuneloj."
+                },
+                "tunnel-tunnel": {
+                    "tip": "Intersekciĝantaj tuneloj estu sur malsamaj tavoloj."
+                },
+                "tunnel-tunnel_connectable": {
+                    "tip": "Intersekciĝantaj tuneloj estu konektitaj, aŭ estu sur malsamaj tavoloj."
+                },
+                "bridge-bridge": {
+                    "tip": "Intersekciĝantaj pontoj estu sur malsamaj tavoloj."
+                },
+                "bridge-bridge_connectable": {
+                    "tip": "Intersekciĝantaj pontoj estu konektitaj, aŭ estu sur malsamaj tavoloj."
+                }
+            },
+            "deprecated_tag": {
+                "single": {
+                    "message": "{feature} havas evitindan etikedon “{tag}”"
+                },
+                "combination": {
+                    "message": "{feature} havas evitindan kombinaĵon de etikedoj: {tags}"
+                },
+                "tip": "Iuj etikedoj kun la tempo iĝas evitindaj kaj estu anstataŭigitaj."
+            },
+            "disconnected_way": {
+                "highway": {
+                    "message": "{highway} estas malkonektita al aliaj vojoj",
+                    "tip": "Vojoj estu konektitaj al aliaj vojoj aŭ al enirejoj de konstruaĵoj."
+                }
+            },
+            "generic_name": {
+                "message": "{feature} eble misuzas la etikedon “nomo”: “{name}”",
+                "tip": "Nomoj estu aktualaj, videblaj de tero nomoj de objektoj."
+            },
+            "many_deletions": {
+                "points-lines-areas": {
+                    "message": "Forigante {n} objektoj: {p} punktojn, {l} liniojn kaj {a} areojn"
+                },
+                "points-lines-areas-relations": {
+                    "message": "Forigante {n} objektojn: {p} punktojn, {l} liniojn, {a} areojn kaj {r} rilatojn"
+                },
+                "tip": "Forigu nur superfluajn aŭ neekzistantajn objektojn."
+            },
+            "missing_tag": {
+                "any": {
+                    "message": "{feature} havas neniun etikedon"
+                },
+                "descriptive": {
+                    "message": "{feature} havas neniun etikedon, kiu ĝin priskribus"
+                },
+                "specific": {
+                    "message": "{feature} ne havas etikedon “{tag}”"
+                },
+                "tip": "Objektoj havu etikedojn, kiuj ilin priskribas."
+            },
+            "old_multipolygon": {
+                "message": "{multipolygon} estas misetikedita",
+                "tip": "Plurangularoj estu etikeditaj sur la rilato, ne sur ekstera linio."
+            },
+            "tag_suggests_area": {
+                "message": "{feature} estu fermita linio surbaze de la etikedo “{tag}”",
+                "tip": "Areoj havu konektitajn finpunktojn."
+            },
+            "fix": {
+                "connect_almost_junction": {
+                    "annotation": "Konektis tre proksimajn objektojn."
+                },
+                "connect_crossing_features": {
+                    "annotation": "Konektis intersekciĝantajn objektojn."
+                },
+                "connect_endpoints": {
+                    "title": "Konekti finpunktojn",
+                    "annotation": "Konektis finpunktojn de linio."
+                },
+                "connect_features": {
+                    "title": "Konekti objektojn"
+                },
+                "continue_from_start": {
+                    "title": "Pluigi desegni de komencpunkto"
+                },
+                "continue_from_end": {
+                    "title": "Pluigi desegni de finpunkto"
+                },
+                "delete_feature": {
+                    "title": "Forigi tiun ĉi objekton"
+                },
+                "move_tags": {
+                    "title": "Movi etikedojn",
+                    "annotation": "Movis etikedojn."
+                },
+                "remove_generic_name": {
+                    "title": "Forigi nomon",
+                    "annotation": "Forigis misuzitan etikedon “nomo”."
+                },
+                "remove_tag": {
+                    "title": "Forigi etikedon",
+                    "annotation": "Forigis etikedon."
+                },
+                "reposition_features": {
+                    "title": "Movi objektojn"
+                },
+                "select_preset": {
+                    "title": "Elekti tipon de objekto"
+                },
+                "tag_as_disconnected": {
+                    "title": "Marki kiel nekonektitan",
+                    "annotation": "Markis tre proksimajn objektojn kiel nekonektitajn."
+                },
+                "upgrade_tag": {
+                    "annotation": "Anstataŭigis malnovan evitindan etikedon."
+                },
+                "upgrade_tag_combo": {
+                    "annotation": "Anstataŭigis malnovan evitindan kombinaĵon de etikedoj."
+                }
+            }
+        },
         "intro": {
             "done": "farita",
             "ok": "Bone",
                 "category-building": {
                     "name": "Konstruaĵoj"
                 },
-                "category-golf": {
+                "category-golf-area": {
+                    "name": "Golfludejo"
+                },
+                "category-golf-line": {
                     "name": "Golfludejo"
                 },
                 "category-landuse": {
                         "underground": "Subtera"
                     }
                 },
-                "passenger_information_display": {
-                    "label": "Elektronika tabulo de forveturoj"
-                },
                 "payment_multi": {
                     "label": "Pagmanieroj"
                 },
                     },
                     "placeholder": "Montara piedirado, alt-montara piedirado"
                 },
+                "salt": {
+                    "label": "Sala"
+                },
                 "sanitary_dump_station": {
                     "label": "Forigado de fekaĵoj"
                 },
                     },
                     "placeholder": "Jes, ne, nur elportado"
                 },
+                "tidal": {
+                    "label": "Superakvata"
+                },
                 "to": {
                     "label": "Al"
                 },
                 },
                 "website": {
                     "label": "Retejo",
-                    "placeholder": "http://ekzemplo.com/"
+                    "placeholder": "https://example.com"
                 },
                 "wetland": {
                     "label": "Speco"
                 },
                 "amenity/casino": {
                     "name": "Monludejo",
-                    "terms": "kazino,vetludejo,hazardludejo"
+                    "terms": "kazino,vetludejo,hazardludejo,enĵeta maŝino,unubraka bandito"
                 },
                 "amenity/charging_station": {
                     "name": "Ŝargostacio",
                     "name": "Horloĝo",
                     "terms": "horlogho,horlogxo,tempmezurilo"
                 },
+                "amenity/clock/sundial": {
+                    "name": "Sunhorloĝo",
+                    "terms": "horloĝo suna"
+                },
                 "amenity/college": {
                     "name": "Tereno de postmezgrada lernejo (ISCED 4)",
                     "terms": "kolegio,mezlernejo,mezgrada lernejo,studejo"
                     "name": "Rapidmanĝejo (kebabo)",
                     "terms": "kebabo,kebap,doner,giros"
                 },
+                "amenity/fast_food/mexican": {
+                    "name": "Rapidmanĝejo (meksika kuirarto)",
+                    "terms": "meksika kuirarto,latina kuirarto,gvakamolo,barbacoa,burrito,ĉiŭaŭa,kokbeko,tako,tomale,tortiljo,faĥito,teksasa manĝaĵo"
+                },
                 "amenity/fast_food/pizza": {
                     "name": "Picejo (rapidmanĝejo)",
                     "terms": "pico,pizza"
                     "name": "Envicaj domoj",
                     "terms": "envica domo,ŝtondomo,brikdomo,envicdomo,vica domo,sekvenca domo"
                 },
-                "building/train_station": {
-                    "name": "Stacio fervoja"
-                },
                 "building/transportation": {
                     "name": "Transporta konstruaĵo",
                     "terms": "aŭtobusstacio,stacio,stacidomo,busstacio,flughaveno.haveno"
                     "name": "Sabla malhelpaĵo",
                     "terms": "bunkro,sablejo"
                 },
+                "golf/cartpath": {
+                    "name": "Vojo golfveturila",
+                    "terms": "golfveturilo,golfĉaro,golfcharo,golfcxaro"
+                },
+                "golf/cartpath_service": {
+                    "name": "Vojo golfveturila / alira",
+                    "terms": "golfveturilo,golfĉaro,golfcharo,golfcxaro"
+                },
+                "golf/driving_range": {
+                    "name": "Sving-ekzercejo (Driving Range)",
+                    "terms": "ekzercejo,driving range"
+                },
                 "golf/fairway": {
                     "name": "Ĉefa vojo (Fairway)",
                     "terms": "razeno"
                     "name": "Truo",
                     "terms": "truo"
                 },
-                "golf/lateral_water_hazard_area": {
+                "golf/lateral_water_hazard": {
                     "name": "Fronta akva malhelpaĵo (rivereto)",
-                    "terms": "Lateral Water Hazard"
+                    "terms": "akva malhelpaĵo,rivereto"
                 },
-                "golf/lateral_water_hazard_line": {
-                    "name": "Fronta akva malhelpaĵo (rivereto)",
-                    "terms": "Lateral Water Hazard"
+                "golf/path": {
+                    "name": "Vojeto golfludeja",
+                    "terms": "golfludeja vojeto"
                 },
                 "golf/rough": {
                     "name": "Densaĵo (Rough)",
                     "name": "Startejo (Tee Box)",
                     "terms": "starto"
                 },
-                "golf/water_hazard_area": {
-                    "name": "Akva malhelpaĵo",
-                    "terms": "water hazard"
-                },
-                "golf/water_hazard_line": {
+                "golf/water_hazard": {
                     "name": "Akva malhelpaĵo",
-                    "terms": "water hazard"
+                    "terms": "akva malhelpaĵo"
                 },
                 "healthcare": {
                     "name": "Sen-servejo",
                     "terms": "vojkrucigho,vojkrucigxo,vojnodo,kruciĝo,krucigo"
                 },
                 "landuse": {
-                    "name": "Utilkampo",
-                    "terms": "utila kampo"
+                    "name": "Utilkampo"
                 },
                 "landuse/allotments": {
                     "name": "Familiaj ĝardenoj",
                     "terms": "vinberĝardeno,vinberghardeno,vinbergxardeno,vinejo,vinberejo,vitejo"
                 },
                 "leisure": {
-                    "name": "Ripozejo",
-                    "terms": "ripozado,libertempo"
+                    "name": "Ripozejo"
                 },
                 "leisure/adult_gaming_centre": {
-                    "name": "Hazardludejo",
+                    "name": "Hazardludejo (enĵet-maŝinoj)",
                     "terms": "kazino,vetludejo,monludejo,vetaŭtomato"
                 },
                 "leisure/amusement_arcade": {
                     "name": "Piknika tablo",
                     "terms": "pikniktablo"
                 },
+                "leisure/picnic_table/chess": {
+                    "name": "Tablo ŝakluda",
+                    "terms": "ŝakludejo,sxakludejo,shakludejo"
+                },
                 "leisure/pitch": {
                     "name": "Ludkampo",
                     "terms": "ludokampo,ludejo,areno"
                     "name": "Sporta centro",
                     "terms": "sportejo,sportcentro,sportocentro"
                 },
+                "leisure/sports_centre/climbing": {
+                    "name": "Sporta centro (grimpado)",
+                    "terms": "grimpado,grimpejo"
+                },
                 "leisure/sports_centre/swimming": {
                     "name": "Naĝejo (tuta sportejo)",
                     "terms": "naghejo,nagxejo,baseno,banejo"
                     "terms": "linio"
                 },
                 "man_made": {
-                    "name": "Artefarita objekto",
-                    "terms": "homkreaĵo,homfaraĵo"
+                    "name": "Artefarita objekto"
                 },
                 "man_made/adit": {
                     "name": "Mineja koridoro",
                     "name": "Turo",
                     "terms": "turo"
                 },
+                "man_made/tower/bell_tower": {
+                    "name": "Sonoril-turo",
+                    "terms": "sonorilturo,sonorilejo"
+                },
                 "man_made/tower/communication": {
                     "name": "Turo telekomunikada",
                     "terms": "komunikada turo,anteno"
                 },
+                "man_made/tower/minaret": {
+                    "name": "Minareto",
+                    "terms": "moskeo"
+                },
                 "man_made/tower/observation": {
                     "name": "Turo observada",
                     "terms": "observturo,vidturo"
                     "terms": "stratkanalo,kabloj,subteraj kabloj,telefonaj kabloj"
                 },
                 "natural": {
-                    "name": "Natura objekto",
-                    "terms": "naturo"
+                    "name": "Natura objekto"
                 },
                 "natural/bare_rock": {
                     "name": "Roko (areo)",
                     "name": "Transformilo",
                     "terms": "transformatoro,elektrotransformilo"
                 },
-                "public_transport/linear_platform": {
-                    "name": "Haltejo publik-transporta (atendejo)",
-                    "terms": "perono,haltejo,stacio,kajo,atendejo"
-                },
-                "public_transport/linear_platform_aerialway": {
-                    "name": "Haltejo kablovoja (atendejo)",
-                    "terms": "kablovoja stacio,telfero"
-                },
-                "public_transport/linear_platform_bus": {
-                    "name": "Haltejo aŭtobusa (atendejo)",
-                    "terms": "aŭtobushaltejo,stacio,pereno,atendejo"
-                },
-                "public_transport/linear_platform_ferry": {
-                    "name": "Haltejo prama (atendejo)",
-                    "terms": "pramstacio,haveno"
-                },
-                "public_transport/linear_platform_light_rail": {
-                    "name": "Haltejo de malpeza fervojo (atendejo)",
-                    "terms": "malpeza fervojo,trajno malpeza,stacio,perono"
-                },
-                "public_transport/linear_platform_monorail": {
-                    "name": "Haltejo de unurela fervojo (atendejo)",
-                    "terms": "perono,kajo,unurela fervojo"
-                },
-                "public_transport/linear_platform_subway": {
-                    "name": "Haltejo metroa (atendejo)",
-                    "terms": "metroa haltejo,metrostacio,subtera vagonaro"
-                },
-                "public_transport/linear_platform_train": {
-                    "name": "Haltejo fervoja (atendejo)",
-                    "terms": "fervoja stacio,perono,fervoja haltejo"
-                },
-                "public_transport/linear_platform_tram": {
-                    "name": "Haltejo trama (atendejo)",
-                    "terms": "tramhaltejo"
-                },
-                "public_transport/linear_platform_trolleybus": {
-                    "name": "Haltejo trolebusa (atendejo)",
-                    "terms": "trolebushaltejo,troleo"
-                },
                 "public_transport/platform": {
                     "name": "Haltejo publik-transporta (atendejo)",
                     "terms": "perono,haltejo,stacio,kajo,atendejo"
                     "terms": "vinvendejo,vinovendejo,vindejo,alkoholaĵoj"
                 },
                 "tourism": {
-                    "name": "Turismo",
-                    "terms": "turismo"
+                    "name": "Turismo"
                 },
                 "tourism/alpine_hut": {
                     "name": "Montara rifuĝejo",
index f115d2ef3fbe0cf1ade91937c1cf25f84ca1a1af..f6a28502d0daa21e7f40bb1d91b6b151297d667c 100644 (file)
                 "restriction": "Estos elementos no pueden combinarse porque dañaría una relación \"{relación}\".",
                 "relation": "Estos elementos no pueden combinarse porque tienen roles de relación con conflicto.",
                 "incomplete_relation": "Estos elementos no se pueden combinar porque al menos uno no ha sido descargado por completo.",
-                "conflicting_tags": "Estos elementos no se pueden combinar porque algunas de sus etiquetas tienen conflictos en sus valores."
+                "conflicting_tags": "Estos elementos no se pueden combinar porque algunas de sus etiquetas tienen conflictos en sus valores.",
+                "paths_intersect": "Estos elementos no se pueden combinar porque la ruta resultante se intersecaría."
             },
             "move": {
                 "title": "Mover",
             "modified": "Modificado",
             "deleted": "Eliminado",
             "created": "Creado",
+            "outstanding_errors_message": "Resuelva todos los errores primero. Quedan {count}.",
+            "comment_needed_message": "Agregue un comentario del conjunto de cambios primero.",
             "about_changeset_comments": "Acerca de los comentarios del conjuntos de cambios",
             "about_changeset_comments_link": "//wiki.openstreetmap.org/wiki/ES:Good_changeset_comments",
             "google_warning": "Usted mencionó Google en este comentario: recuerde que copiar desde Google Maps está estrictamente prohibido.",
                 "tooltip_data": "Centre y amplíe el mapa para enfocarse en este dato.",
                 "tooltip_issue": "Centre y amplíe el mapa para enfocarse en este problema."
             },
-            "no_documentation_combination": "No hay documentación disponible para esta combinación de etiquetas",
-            "no_documentation_key": "No hay documentación disponible para esta etiqueta",
             "show_more": "Ver más",
             "view_on_osm": "Ver en openstreetmap.org",
             "view_on_keepRight": "Ver en keepright.at",
             "role": "Rol",
             "choose": "Selecciona tipo de elemento",
             "results": "{n} resultados para {search}",
-            "reference": "Ver más información en la wiki de OpenStreetMap",
-            "edit_reference": "Editar o traducir descripción",
+            "no_documentation_key": "No hay documentación disponible.",
+            "edit_reference": "editar / traducir",
             "wiki_reference": "Ver documentación",
             "wiki_en_reference": "Ver documentación en inglés",
+            "hidden_preset": {
+                "manual": "{features} están ocultos. Habilítelos en el panel Datos de mapa.",
+                "zoom": "{features} están ocultos. Acercar para habilitarlos."
+            },
             "back_tooltip": "Cambiar tipo de elemento",
             "remove": "Quitar",
             "search": "Buscar",
                     "tooltip": "Problemas del mapa detectados automáticamente desde keepright.at",
                     "title": "Problemas de KeepRight"
                 },
+                "improveOSM": {
+                    "tooltip": "Los datos faltantes son detectados automáticamente por improveosm.org",
+                    "title": "Problemas de ImproveOSM"
+                },
                 "custom": {
                     "tooltip": "Arrastre y suelte un archivo de datos en la página, o haga clic en el botón para configurar",
                     "title": "Datos de mapa personalizado",
                 "tooltip": "Líneas eléctricas, plantas de energía, subestaciones, etc."
             },
             "past_future": {
-                "description": "Pasado/Futuro",
+                "description": "Elementos Pasado/Futuro",
                 "tooltip": "Proyectado, construido, abandonado, demolido, etc."
             },
             "others": {
-                "description": "Otros",
+                "description": "Otros elementos",
                 "tooltip": "Todo lo demás"
             }
         },
             "on_wiki": "{tag} en wiki.osm.org",
             "used_with": "usado con {type}"
         },
-        "validations": {
-            "disconnected_highway": "Carretera desconectada",
-            "disconnected_highway_tooltip": "Las vías deben estar conectadas a otras vías o entradas de edificios.",
-            "generic_name": "Posible nombre genérico",
-            "generic_name_tooltip": "Este elemento parece tener un nombre genérico \"{name}\". Utilice solo el campo de nombre para registrar el nombre oficial de un elemento.",
-            "old_multipolygon": "Etiquetas multipolígono en la vía externa",
-            "old_multipolygon_tooltip": "Este estilo de multipolígono está obsoleto. Asigne las etiquetas al multipolígono padre en lugar de la vía externa.",
-            "untagged_point": "Punto sin etiquetar",
-            "untagged_point_tooltip": "Seleccione un tipo de elemento que describa lo que es este punto.",
-            "untagged_line": "Línea sin etiquetar",
-            "untagged_line_tooltip": "Seleccione un tipo de elemento que describa lo que es esta línea.",
-            "untagged_area": "Área sin etiquetar",
-            "untagged_area_tooltip": "Seleccione un tipo de elemento que describa lo que es esta área.",
-            "untagged_relation": "Relación no etiquetada",
-            "untagged_relation_tooltip": "Seleccione un tipo de elemento que describa qué es esta relación.",
-            "many_deletions": "Está eliminando {n} elementos: {p} nodos, {l} líneas, {a} áreas, {r} relaciones. ¿Seguro que quiere hacer esto? Esto los borrará del mapa que todo el mundo ven en openstreetmap.org.",
-            "tag_suggests_area": "La etiqueta {tag} sugiere que esta línea debería ser una área, pero no es un área",
-            "deprecated_tags": "Etiquetas obsoletas: {tags}"
-        },
         "zoom": {
             "in": "Acercar",
             "out": "Alejar"
         "cannot_zoom": "No se puede alejar más la imagen en el modo actual.",
         "full_screen": "Alternar pantalla completa",
         "QA": {
+            "improveOSM": {
+                "title": "Detección de ImproveOSM",
+                "geometry_types": {
+                    "path": "senderos",
+                    "parking": "estacionamiento",
+                    "road": "vías",
+                    "both": "vías y estacionamiento"
+                },
+                "directions": {
+                    "east": "este",
+                    "north": "norte",
+                    "northeast": "noreste",
+                    "northwest": "noroeste",
+                    "south": "sur",
+                    "southeast": "sureste",
+                    "southwest": "suroeste",
+                    "west": "oeste"
+                },
+                "error_types": {
+                    "ow": {
+                        "title": "Falta sentido único",
+                        "description": "A lo largo de esta sección de {highway}, {percentage}% de {num_trips} viajes registrados viajan de {from_node} a {to_node}. Puede que falte una etiqueta de \"oneway\" (sentido único)."
+                    },
+                    "mr": {
+                        "title": "Falta geometría",
+                        "description": "{num_trips} viajes registrados en esta área sugieren que puede haber un {geometry_type} sin mapear aquí.",
+                        "description_alt": "Los datos de un tercero sugieren que puede haber un {geometry_type} sin mapear aquí."
+                    },
+                    "tr": {
+                        "title": "Falta la restricción de giro",
+                        "description": "{num_passed} de {num_trips} viajes registrados (viajando hacia el {travel_direction}) hacen un giro desde {from_way} a {to_way} en {junction}. Puede que falte una restricción \"turn_restriction}\"."
+                    }
+                }
+            },
             "keepRight": {
                 "title": "Errores de KeepRight",
                 "detail_title": "Error",
                         "description": "No se puede escapar de {var1} porque todas las vías que llevan a él son de un solo sentido."
                     },
                     "50": {
-                        "title": "Casi unión",
+                        "title": "Casi cruce",
                         "description": "{var1} está muy cerca pero no está conectado a la vía {var2}."
                     },
                     "60": {
                         "description": "A {var1} le falta una etiqueta \"type\"."
                     },
                     "190": {
-                        "title": "Intersección sin unión",
+                        "title": "Intersección sin cruce",
                         "description": "{var1} se intersecta con la {var2} {var3} pero no hay un nodo de unión, puente o túnel."
                     },
                     "200": {
                     },
                     "230": {
                         "title": "Conflicto de capas",
-                        "description": "{var1} es una unión de vías en diferentes capas."
+                        "description": "{var1} es un cruce de vías en diferentes capas."
                     },
                     "231": {
-                        "description": "{var1} es una unión de vías en diferentes capas: {var2}.",
+                        "description": "{var1} es un cruce de vías en diferentes capas: {var2}.",
                         "layer": "(capa: {layer})"
                     },
                     "232": {
                 "multipolygon_merge": "Combinar varias líneas o áreas creará una nueva relación multipolígono con todas las áreas seleccionadas como miembros. iD elegirá los roles internos y externos de forma automática, en función de los elementos que se encuentran dentro de otros elementos.",
                 "turn_restriction_h": "Restricciones de giro",
                 "turn_restriction": "Una relación de *restricción de giro* es un grupo de varios segmentos de camino en una intersección. Las restricciones de giro constan de un camino *desde*, nodo o carreteras *vía*, y un camino *hasta*.",
-                "turn_restriction_field": "Para editar restricciones de giro, seleccione un nodo de unión donde dos o más caminos se crucen. El editor de elementos mostrará un campo especial \"Restricciones de giro\" que contiene un modelo de intersección.",
+                "turn_restriction_field": "Para editar restricciones de giro, seleccione un nodo de cruce donde dos o más caminos se encuentren. El editor de elementos mostrará un campo especial \"Restricciones de giro\" que contiene un modelo de intersección.",
                 "turn_restriction_editing": "En el campo \"Restricciones de giro\", haga clic para seleccionar un camino \"desde\", y vea si los giros están permitidos o restringidos a cualquiera de las carreteras \"hasta\". Puede hacer clic en los iconos de giro para alternar entre permitido y restringido. iD creará relaciones automáticamente y establecerá los desde, vía y roles según sus elecciones.",
                 "route_h": "Rutas",
                 "route": "Una relación *Ruta* es un grupo de una o más elementos de línea que juntas forman una red de rutas, como una ruta de autobús, una ruta de tren o una ruta de carretera.",
                 "title": "Control de calidad",
                 "intro": "Las herramientas de *control de calidad* (Q/A) pueden encontrar etiquetas inadecuadas, carreteras desconectadas y otros problemas con OpenStreetMap, que los mapeadores pueden solucionar. Para ver los problemas de Q/A existentes, haga clic en el panel {data} **Datos de mapa** para habilitar una capa Q/A específica.",
                 "tools_h": "Herramientas",
-                "tools": "Las siguientes herramientas son compatibles actualmente: [KeepRight] (https://www.keepright.at/). Espere que iD sea compatible con [Osmose](https://osmose.openstreetmap.fr/), [ImproveOSM](https://improveosm.org/en/), y más herramientas de Q/A en el futuro.",
+                "tools": "Las siguientes herramientas son actualmente compatibles: [KeepRight](https://www.keepright.at/) e [ImproveOSM] (https://improveosm.org/en/). Espere que iD sea compatible con [Osmose] (https://osmose.openstreetmap.fr/) y más herramientas de Q/A en el futuro.",
                 "issues_h": "Manejo de problemas",
                 "issues": "El manejo de los problemas de Q/A es similar al manejo de notas. Haga clic en un marcador para ver los detalles del problema en la barra lateral. Cada herramienta tiene sus propias capacidades, pero generalmente puede comentar y/o cerrar un problema."
             },
                 }
             }
         },
+        "issues": {
+            "title": "Problemas",
+            "key": "P",
+            "list_title": "Problemas ({count})",
+            "errors": {
+                "list_title": "Errores ({count})"
+            },
+            "warnings": {
+                "list_title": "Advertencias ({count})"
+            },
+            "no_issues": {
+                "message": "Todo se ve bien",
+                "info": "Cualquier problema se mostrará aquí mientras edita"
+            },
+            "almost_junction": {
+                "message": "{feature} está muy cerca pero no está conectado a {feature2}",
+                "highway-highway": {
+                    "tip": "Intersección de carreteras debe compartir un vértice de cruce."
+                }
+            },
+            "crossing_ways": {
+                "message": "{feature} cruza {feature2}",
+                "building-building": {
+                    "tip": "Los edificios no deben cruzarse, excepto en capas diferentes."
+                },
+                "building-highway": {
+                    "tip": "Carreteras que cruzan edificios deben usar puentes, túneles, cubierta o entradas."
+                },
+                "building-railway": {
+                    "tip": "Ferrocarriles que cruzan edificios deben usar puentes o túneles."
+                },
+                "building-waterway": {
+                    "tip": "Vías fluviales que cruzan edificios deben usar túneles o capas diferentes."
+                },
+                "highway-highway": {
+                    "tip": "Carreteras que se cruzan deben usar puentes, túneles o intersecciones."
+                },
+                "highway-railway": {
+                    "tip": "Carreteras que cruzan ferrocarriles deben usar puentes, túneles o pasos a nivel."
+                },
+                "highway-waterway": {
+                    "tip": "Carreteras que cruzan las vías fluviales deben usar puentes, túneles o vados."
+                },
+                "railway-railway": {
+                    "tip": "Ferrocarriles que se cruzan deben estar conectados o usar puentes o túneles."
+                },
+                "railway-waterway": {
+                    "tip": "Ferrocarriles que cruzan vías fluviales deben utilizar puentes o túneles."
+                },
+                "waterway-waterway": {
+                    "tip": "Vías fluviales que se cruzan debe estar conectadas o usar túneles."
+                },
+                "tunnel-tunnel": {
+                    "tip": "Túneles que se cruzan deben utilizar capas diferentes."
+                },
+                "tunnel-tunnel_connectable": {
+                    "tip": "Túneles que se cruzan deben estar conectados o utilizar capas diferentes."
+                },
+                "bridge-bridge": {
+                    "tip": "Puentes que se cruzan deben utilizar diferentes capas."
+                },
+                "bridge-bridge_connectable": {
+                    "tip": "Puentes que se cruzan deben estar conectados o usar diferentes capas."
+                },
+                "indoor-indoor": {
+                    "tip": "Los elementos de interiores que se crucen deben utilizar diferentes niveles."
+                },
+                "indoor-indoor_connectable": {
+                    "tip": "Los elementos de interiores que se crucen deben estar conectados o utilizar diferentes niveles."
+                }
+            },
+            "deprecated_tag": {
+                "single": {
+                    "message": "{feature} tiene la etiqueta obsoleta \"{tag}\""
+                },
+                "combination": {
+                    "message": "{feature} tiene una combinación de etiquetas obsoleta: {tags}"
+                },
+                "tip": "Algunas etiquetas se vuelven obsoletas con el tiempo y deben reemplazarse."
+            },
+            "disconnected_way": {
+                "highway": {
+                    "message": "{highway} está desconectada de otras carreteras y senderos",
+                    "tip": "Carreteras deben conectarse a otras carreteras o entradas de edificios."
+                }
+            },
+            "generic_name": {
+                "message": "{feature} tiene el nombre genérico \"{name}\"",
+                "tip": "Los nombres deben ser los actuales y reales."
+            },
+            "many_deletions": {
+                "points-lines-areas": {
+                    "message": "Eliminar {n} elementos: {p} puntos, {l} líneas y {a} áreas"
+                },
+                "points-lines-areas-relations": {
+                    "message": "Eliminar {n} elementos: {p} puntos, {l} líneas, {a} áreas y {r} relaciones"
+                },
+                "tip": "Solo se debe eliminar los elementos redundantes o inexistentes."
+            },
+            "missing_tag": {
+                "any": {
+                    "message": "{feature} no tiene etiquetas"
+                },
+                "descriptive": {
+                    "message": "{feature} no tiene etiquetas descriptivas"
+                },
+                "specific": {
+                    "message": "{feature} no tiene etiqueta \"{tag}\""
+                },
+                "tip": "Los elementos deben tener etiquetas que definan lo que son."
+            },
+            "old_multipolygon": {
+                "message": "{multipolygon} tiene etiquetas mal ubicadas",
+                "tip": "Los multipolígonos deben estar etiquetados en su relación, no en su forma externa."
+            },
+            "tag_suggests_area": {
+                "message": "{feature} debe ser un área cerrada basada en la etiqueta \"{tag}\"",
+                "tip": "Las áreas deben tener puntos finales conectados."
+            },
+            "fix": {
+                "connect_almost_junction": {
+                    "annotation": "Conectados los elementos muy cercanos."
+                },
+                "connect_crossing_features": {
+                    "annotation": "Conectados los elementos que se cruzan."
+                },
+                "connect_endpoints": {
+                    "title": "Conectar los extremos",
+                    "annotation": "Conectados los extremos de una vía."
+                },
+                "connect_features": {
+                    "title": "Conectar los elementos"
+                },
+                "continue_from_start": {
+                    "title": "Continuar dibujando desde el inicio"
+                },
+                "continue_from_end": {
+                    "title": "Continuar dibujando desde el final"
+                },
+                "delete_feature": {
+                    "title": "Eliminar este elemento"
+                },
+                "move_tags": {
+                    "title": "Mover las etiquetas",
+                    "annotation": "Etiquetas movidas."
+                },
+                "remove_generic_name": {
+                    "title": "Quitar el nombre",
+                    "annotation": "Se eliminó un nombre genérico."
+                },
+                "remove_tag": {
+                    "title": "Quitar la etiqueta",
+                    "annotation": "Etiqueta eliminada."
+                },
+                "reposition_features": {
+                    "title": "Reposicionar los elementos"
+                },
+                "select_preset": {
+                    "title": "Seleccionar un tipo de elemento"
+                },
+                "tag_as_disconnected": {
+                    "title": "Etiquetar como desconectado",
+                    "annotation": "Etiquetado elementos muy cercanos como desconectados."
+                },
+                "upgrade_tag": {
+                    "annotation": "Se actualizó una etiqueta vieja."
+                },
+                "upgrade_tag_combo": {
+                    "annotation": "Se ha actualizado una combinación de etiquetas antiguas."
+                },
+                "use_bridge_or_tunnel": {
+                    "title": "Use un puente o túnel"
+                },
+                "use_different_layers": {
+                    "title": "Use capas diferentes"
+                },
+                "use_different_levels": {
+                    "title": "Use niveles diferentes"
+                },
+                "use_tunnel": {
+                    "title": "Use un túnel"
+                }
+            }
+        },
         "intro": {
             "done": "listo",
             "ok": "Aceptar",
                 "category-building": {
                     "name": "Elementos de edificio"
                 },
-                "category-golf": {
-                    "name": "Elementos de golf"
+                "category-golf-area": {
+                    "name": "Elementos de Golf"
+                },
+                "category-golf-line": {
+                    "name": "Elementos de Golf"
                 },
                 "category-landuse": {
                     "name": "Elementos de uso de suelo"
                     "label": "SSID (nombre de red)"
                 },
                 "junction/ref_oneway": {
-                    "label": "Número de empalme"
+                    "label": "Número de cruce"
+                },
+                "junction_line": {
+                    "label": "Cruce",
+                    "options": {
+                        "circular": "Círculo de tráfico",
+                        "jughandle": "Cambio de sentido a distinto nivel",
+                        "roundabout": "Rotonda"
+                    }
                 },
                 "kerb": {
                     "label": "Bordillo/Cordón"
                         "underground": "Subterráneo"
                     }
                 },
-                "passenger_information_display": {
-                    "label": "Pantalla de información del pasajero"
-                },
                 "payment_multi": {
                     "label": "Formas de pago"
                 },
                     "placeholder": "1-18"
                 },
                 "ref_highway_junction": {
-                    "label": "Número de intersección"
+                    "label": "Número de cruce"
                 },
                 "ref_platform": {
                     "label": "Número de plataforma"
                     },
                     "placeholder": "Caminata de montaña, caminata alpina..."
                 },
+                "salt": {
+                    "label": "Sal"
+                },
                 "sanitary_dump_station": {
                     "label": "Desecho del inodoro"
                 },
                     },
                     "placeholder": "Si, no, sólo para llevar..."
                 },
+                "tidal": {
+                    "label": "De marea"
+                },
                 "to": {
                     "label": "Hasta"
                 },
                 },
                 "website": {
                     "label": "Sitio web",
-                    "placeholder": "http://ejemplo.com/"
+                    "placeholder": "https://ejemplo.com/"
                 },
                 "wetland": {
                     "label": "Tipo"
                     "name": "Reloj",
                     "terms": "cronómetro"
                 },
+                "amenity/clock/sundial": {
+                    "name": "Reloj de sol",
+                    "terms": "gnomon, sombra, sol, solar"
+                },
                 "amenity/college": {
                     "name": "Terreno de centro educativo superior no universitario",
                     "terms": "formación profesional, escuela profesional, educación terciaria, post-bachillerato, ciclo formativo de grado superior, FP, conservatorio, Terciario, superior, no universitario, terreno, área, area, suelo, instituto"
                     "name": "Comida rápida de kebab",
                     "terms": "desayuno, cena, comedor, cena, comer, parrilla, almuerzo, mesa, café, cafe, cantina"
                 },
+                "amenity/fast_food/mexican": {
+                    "name": "Comida rápida mexicana",
+                    "terms": "desayuno, cena, comedor, cena, comer, parrilla, almuerzo, mesa, tacos, burritos, enchiladas, fajitas, nachos, tortillas, salsa, tamales, quesadillas"
+                },
                 "amenity/fast_food/pizza": {
                     "name": "Comida rápida de pizza",
                     "terms": "desayuno, cena, comedor, cena, comer, parrilla, almuerzo, mesa, café, cafe, porción"
                     "name": "Farmacia",
                     "terms": "farmacia,botica, laboratorio, apoteca, herbolario, medicamentos, remedios"
                 },
+                "amenity/photo_booth": {
+                    "name": "Cabina de fotos",
+                    "terms": "foto, stand, quiosco, cámara"
+                },
                 "amenity/place_of_worship": {
                     "name": "Lugar de adoración",
                     "terms": "abadía, basílica, bethel, catedral, coro, capilla, capilla, iglesia, casa de Dios, casa de oración, iglesia de culto, misión, mezquita, oratorio, parroquia, sacellum, santuario, santuario, sinagoga, tabernáculo, templo,oración, adoración, religión"
                     "terms": "Casas adosadas, casa pareada, viviendas en hilera, Bloques de casas"
                 },
                 "building/train_station": {
-                    "name": "Estación de ferrocarril"
+                    "name": "Edificio de la estación de tren"
                 },
                 "building/transportation": {
                     "name": "Edificio de transporte público",
                     "name": "Búnker de arena",
                     "terms": "Recolector de arena, búnker, bunker, Trampa de arena, sand"
                 },
+                "golf/cartpath": {
+                    "name": "Sendero del carrito de golf",
+                    "terms": "Carrito, carro, golf, sendero"
+                },
+                "golf/cartpath_service": {
+                    "name": "Sendero del carrito de golf / Vía de servicio",
+                    "terms": "Carrito, carro, golf, sendero"
+                },
+                "golf/driving_range": {
+                    "name": "Driving range",
+                    "terms": "práctica, área, area, golf"
+                },
                 "golf/fairway": {
                     "name": "Fairway",
                     "terms": "canalizo, calle, fairway"
                     "name": "Hoyo de golf",
                     "terms": "Hoyo de golf, hoyo, hole"
                 },
-                "golf/lateral_water_hazard_area": {
-                    "name": "Obstáculo de agua lateral",
-                    "terms": "obstáculo, agua, golf"
+                "golf/lateral_water_hazard": {
+                    "name": "Obstáculo lateral de agua",
+                    "terms": "obstáculo, riesgo, peligro, agua, lateral, golf"
                 },
-                "golf/lateral_water_hazard_line": {
-                    "name": "Obstáculo de agua lateral",
-                    "terms": "obstáculo, agua, golf"
+                "golf/path": {
+                    "name": "Sendero de golf",
+                    "terms": "sendero, golf, caminar"
                 },
                 "golf/rough": {
                     "name": "Rough",
                     "name": "Lugar de salida Tee",
                     "terms": "Tee, Tee Box, Zona del tee, lugar de salida"
                 },
-                "golf/water_hazard_area": {
-                    "name": "Obstáculo de agua",
-                    "terms": "obstáculo, agua, golf"
-                },
-                "golf/water_hazard_line": {
+                "golf/water_hazard": {
                     "name": "Obstáculo de agua",
-                    "terms": "obstáculo, agua, golf"
+                    "terms": "Obstáculo, agua, golf"
                 },
                 "healthcare": {
                     "name": "Asistencia sanitaria",
                     "terms": "autopista, autovía, vía rápida"
                 },
                 "highway/motorway_junction": {
-                    "name": "Salida de autopista",
+                    "name": "Cruce de autopista / Salida",
                     "terms": "enlace, cruce de autopista, salida de autopista"
                 },
                 "highway/motorway_link": {
                     "terms": "wi-fi,wifi,hotspot,punto de acceso, router"
                 },
                 "junction": {
-                    "name": "Intersección vial",
+                    "name": "Cruce",
                     "terms": "cruce, intersección, empalme, nudo, unión, intersección vial, crucero"
                 },
                 "landuse": {
-                    "name": "Uso de suelo",
-                    "terms": "uso de suelo, uso de la tierra, uso de tierras, explotación del suelo, utilización del suelo, uso del terreno, utilización del terreno, ocupación del suelo"
+                    "name": "Uso de suelo"
                 },
                 "landuse/allotments": {
                     "name": "Huerto comunitario",
                     "terms": "viña, viñedo, majuelo, parral"
                 },
                 "leisure": {
-                    "name": "Ocio",
-                    "terms": "zona, diversión, entretenimiento, pasatiempo, distracción, recreo, ocio, esparcimiento, tiempo libre"
+                    "name": "Ocio"
                 },
                 "leisure/adult_gaming_centre": {
                     "name": "Centro de juegos para adultos",
                     "name": "Mesa de picnic",
                     "terms": "mesa de picnic, mesa de parque"
                 },
+                "leisure/picnic_table/chess": {
+                    "name": "Tabla de ajedrez",
+                    "terms": "banco, tablero de ajedrez, ajedrez, damas, tablero de damas, mesa de juego"
+                },
                 "leisure/pitch": {
                     "name": "Cancha de juego",
                     "terms": "cancha, frontón, campo, pista, polideportivo, terreno de juego, juego, deporte"
                     "name": "Complejo deportivo",
                     "terms": "centro de deporte, complejo deportivo, polideportivo, deporte, ejercicio"
                 },
+                "leisure/sports_centre/climbing": {
+                    "name": "Gimnasio de escalada",
+                    "terms": "rappel, muro de escalada artificial, instalación de escalada en roca, muro interior de roca, gimnasio de roca, cuerdas, escalada"
+                },
                 "leisure/sports_centre/swimming": {
                     "name": "Natatorio",
                     "terms": "Natatorio, piscina, pileta, alberca"
                     "terms": "línea, linea"
                 },
                 "man_made": {
-                    "name": "Estructura artificial creada por el hombre",
-                    "terms": "estructura, construcción, artificial, hecho, creado, construido, hombre"
+                    "name": "Estructura artificial creada por el hombre"
                 },
                 "man_made/adit": {
                     "name": "Socavón",
                     "name": "Torre",
                     "terms": "torre, mástil, edificio, estructura alta"
                 },
+                "man_made/tower/bell_tower": {
+                    "name": "Campanario",
+                    "terms": "campanario, torre de la iglesia, campana"
+                },
                 "man_made/tower/communication": {
                     "name": "Torre de comunicación",
                     "terms": "antena, torre de transmisión, torre de telefonía celular, torre de telefonía móvil, mástil de comunicación, torre de comunicación, torre adaptada, torre de telefonía móvil, mástil de radio, torre de radio, torre de televisión, mástil de transmisión, torre de transmisión, torre de televisión"
                 },
+                "man_made/tower/minaret": {
+                    "name": "Alminar",
+                    "terms": "Islam, Mezquita, Muezzin, Musulmana, alminar, minarete"
+                },
                 "man_made/tower/observation": {
                     "name": "Torre de observación",
                     "terms": "torre de vigilancia, torre de fuego"
                     "terms": "telecomunicaciones, teléfono, pozo, boca de inspección, pozo de registro, abertura, boca de acceso"
                 },
                 "natural": {
-                    "name": "Natural",
-                    "terms": "natural, naturaleza, geológica, cubierta terrestre, vegetación"
+                    "name": "Natural"
                 },
                 "natural/bare_rock": {
                     "name": "Roca desnuda",
                     "name": "Transformador de energía",
                     "terms": "Transformador, transformador de potencia, transformador eléctrico, transformador de energía"
                 },
-                "public_transport/linear_platform": {
-                    "name": "Parada / Plataforma de transporte público",
-                    "terms": "plataforma, transporte público, transporte publico, tránsito, transporte"
-                },
-                "public_transport/linear_platform_aerialway": {
-                    "name": "Parada / Plataforma aérea",
-                    "terms": "vía aérea, teleférico, plataforma, transporte público, transporte publico, tránsito, transporte"
-                },
-                "public_transport/linear_platform_bus": {
-                    "name": "Parada / Plataforma de bus",
-                    "terms": "bus, autobús, autobus, plataforma, transporte público, transporte publico, tránsito, transporte"
-                },
-                "public_transport/linear_platform_ferry": {
-                    "name": "Parada / Plataforma de ferry",
-                    "terms": "barco, muelle, ferry, buque, transbordador, plataforma, tránsito, transporte público, transporte publico, tránsito, transporte"
-                },
-                "public_transport/linear_platform_light_rail": {
-                    "name": "Parada / Plataforma de tren ligero",
-                    "terms": "tren ligero, eléctrico, plataforma, transporte público, transporte publico, ferrocarril, vía, tranvía, trole, tránsito, transporte"
-                },
-                "public_transport/linear_platform_monorail": {
-                    "name": "Parada / Plataforma de monorraíl",
-                    "terms": "monorriel, plataforma, transporte público, transporte publico, ferrocarril, tránsito, transporte"
-                },
-                "public_transport/linear_platform_subway": {
-                    "name": "Parada / Plataforma de metro",
-                    "terms": "metro, plataforma, transporte público, transporte publico, ferrocarril, subte, vía, tránsito, transporte, subterráneo, subterraneo"
-                },
-                "public_transport/linear_platform_train": {
-                    "name": "Parada / Plataforma de tren",
-                    "terms": "plataforma, transporte público, transporte publico, ferrocarril, vía, tren, tránsito, transporte"
-                },
-                "public_transport/linear_platform_tram": {
-                    "name": "Parada / Plataforma de tranvía",
-                    "terms": "eléctrico, ligero, plataforma, transporte público, transporte publico, ferrocarril, tranvía, vía, tranvia, trole, tránsito, transporte"
-                },
-                "public_transport/linear_platform_trolleybus": {
-                    "name": "Parada / Plataforma de trolebús",
-                    "terms": "autobús, bus, eléctrico, plataforma, transporte público, transporte publico, tranvía,tranvia, trolebús, trolebus, tránsito, transporte"
-                },
                 "public_transport/platform": {
                     "name": "Parada / Plataforma de transporte público",
                     "terms": "plataforma, transporte público, transporte publico, tránsito, transporte"
                     "terms": "vinatería, vinos, espirituosos, licorería, bebidas, establecimiento de vinos"
                 },
                 "tourism": {
-                    "name": "Turismo",
-                    "terms": "turismo"
+                    "name": "Turismo"
                 },
                 "tourism/alpine_hut": {
                     "name": "Refugio de montaña",
index e1f86767dafe1514bec3dc77cd54f22e20475178..b083c25cf64aa3be63decff048d20c4689d21155 100644 (file)
                 "tooltip_data": "Tsentreeri ja suumi kaarti, et keskenduda sellele andmele.",
                 "tooltip_issue": "Tsentreeri ja suumi kaarti, et keskenduda sellele veale."
             },
-            "no_documentation_combination": "Selle sildi kohta puudub dokumentatsioon",
-            "no_documentation_key": "Selle objektiliigi kohta puudub informatsioon",
             "show_more": "Näita rohkem",
             "view_on_osm": "Vaata asukohas openstreetmap.org",
             "view_on_keepRight": "Vaata lehel keepright.at",
             "role": "Roll",
             "choose": "Vali objekti liik",
             "results": "{n} tulemust otsingule {search}",
-            "reference": "Vaata OpenStreetMapi vikis",
             "back_tooltip": "Muuda objekti",
             "remove": "Eemalda",
             "search": "Otsi",
                 "tooltip": "Elektriliinid, eletrijaamad, alajaamad.."
             },
             "past_future": {
-                "description": "Minevik/Tulevik",
                 "tooltip": "Planeeritud, ehitamisel, mahajäetud, lammutatud.."
             },
             "others": {
-                "description": "Muu",
                 "tooltip": "Kõik ülejäänud"
             }
         },
             "on_wiki": "{tag} wiki.osm.org-is",
             "used_with": "kasutatakse koos liigiga {type}"
         },
-        "validations": {
-            "disconnected_highway": "Lahtiühendatud tee",
-            "disconnected_highway_tooltip": "Teed peaksid olema ühendatud teiste teede või hoonete sissepääsudega.",
-            "untagged_point": "Sildistamata punkt",
-            "untagged_line": "Sildistamata joon",
-            "untagged_area": "Sildistamata ala",
-            "untagged_relation": "Sildistamata relatsioon",
-            "tag_suggests_area": "Silt {tag} viitab, et joon peaks olema ala, kuid see pole ala.",
-            "deprecated_tags": "Iganenud sildid: {tags}"
-        },
         "zoom": {
             "in": "Suurenda",
             "out": "Vähenda"
             },
             "notes": {
                 "title": "Märked"
-            },
-            "qa": {
-                "tools": "Hetkel on toetatud järgmised tööriistad: [KeepRight](https://www.keepright.at/). Lähitulevikus on iD redaktorile oodata [Osmose](https://osmose.openstreetmap.fr/), [ImproveOSM](https://improveosm.org/en/) ja teiste kvaliteedi tagamise tööriistade tuge."
             }
         },
         "intro": {
                 "category-building": {
                     "name": "Hooned"
                 },
-                "category-golf": {
-                    "name": "Golf"
-                },
                 "category-landuse": {
                     "name": "Maakasutus"
                 },
                     "label": "Veebikaamera URL",
                     "placeholder": "http://näidis.ee"
                 },
+                "conveying": {
+                    "options": {
+                        "reversible": "Muutsuunaga"
+                    }
+                },
                 "country": {
                     "label": "Riik"
                 },
                     "options": {
                         "alternating": "Vahelduv",
                         "no": "Ei",
-                        "reversible": "Ümberpööratav",
+                        "reversible": "Muutsuunaga",
                         "undefined": "Eeldatavasti mitte",
                         "yes": "Jah"
                     }
                     "options": {
                         "alternating": "Vahelduv",
                         "no": "Ei",
-                        "reversible": "Ümberpööratav",
+                        "reversible": "Muutsuunaga",
                         "undefined": "Eeldatavasti Jah",
                         "yes": "Jah"
                     }
                     "label": "Tüüp"
                 },
                 "website": {
-                    "label": "Veebileht",
-                    "placeholder": "http://näidis24.ee/"
+                    "label": "Veebileht"
                 },
                 "wetland": {
                     "label": "Tüüp"
                 "building/terrace": {
                     "name": "Terrassmaja"
                 },
-                "building/train_station": {
-                    "name": "Raudteejaam"
-                },
                 "building/transportation": {
                     "name": "Transpordihoone"
                 },
                     "name": "Joon"
                 },
                 "man_made": {
-                    "name": "Inimtehtud",
-                    "terms": "Tehislik, Tehis"
+                    "name": "Inimtehtud"
                 },
                 "man_made/adit": {
                     "name": "Stoll",
                     "terms": "Vabrik"
                 },
                 "natural": {
-                    "name": "Looduslik",
-                    "terms": "loomulik, naturaalne"
+                    "name": "Looduslik"
                 },
                 "natural/bare_rock": {
                     "name": "Paljand",
index 6d85a714e4b8bcd7d525dae5dad785196b83285b..677220d1b19f7dda8365a4eb949ae22cf10a0874 100644 (file)
                 "category-building": {
                     "name": "Eraikuntzaren ezaugarriak"
                 },
-                "category-golf": {
-                    "name": "Golf-aren ezaugarriak"
-                },
                 "category-landuse": {
                     "name": "Lurraren erabilera ezaugarriak"
                 },
                         "underground": "Lur azpiko"
                     }
                 },
-                "passenger_information_display": {
-                    "label": "Bidaiarientzako informazio pantaila"
-                },
                 "payment_multi": {
                     "label": "Ordaintzeko Moduak"
                 },
                     "label": "Mota"
                 },
                 "website": {
-                    "label": "Webgune",
-                    "placeholder": "http://example.com/"
+                    "label": "Webgune"
                 },
                 "wetland": {
                     "label": "Mota"
                 "building/stable": {
                     "name": "Ukuilu"
                 },
-                "building/train_station": {
-                    "name": "Tren geltoki"
-                },
                 "club": {
                     "name": "Klub"
                 },
index 8332deb7d6c570a7de3be4c586c248a990d9a7b4..d036374ac89d50fc06a8fcb8138056df731f6422 100644 (file)
                 "restriction": "این عارضه‌ها را نمی‌توان ادغام کرد، زیرا به یک رابطهٔ «{relation}» آسیب می‌زند.",
                 "relation": "این عارضه‌ها را نمی‌توانید ادغام کنید، زیرا نقش‌های آن‌ها در رابطه، با هم تداخل دارد.",
                 "incomplete_relation": "این عارضه‌ها را نمی‌توان ادغام کرد زیرا حداقل یکی از آن‌ها کامل دانلود نشده است.",
-                "conflicting_tags": "این عارضه‌ها را نمی‌توان ادغام کرد زیرا مقدار بعضی از تگ‌های آن‌ها با هم تداخل دارد."
+                "conflicting_tags": "این عارضه‌ها را نمی‌توان ادغام کرد زیرا مقدار بعضی از تگ‌های آن‌ها با هم تداخل دارد.",
+                "paths_intersect": "این عارضه‌ها را نمی‌توان ادغام کرد زیرا شکل نهایی خودش را قطع خواهد کرد."
             },
             "move": {
                 "title": "جابه‌جایی",
             "modified": "اصلاح",
             "deleted": "حذف",
             "created": "ایجاد",
+            "outstanding_errors_message": "لطفاً ابتدا همهٔ خطاها را اصلاح کنید. {count} مورد مانده.",
+            "comment_needed_message": "لطفاً ابتدا توضیحی برای بستهٔ تغییرات خود بنویسید.",
             "about_changeset_comments": "دربارهٔ توضیح تغییرات",
             "about_changeset_comments_link": "//wiki.openstreetmap.org/wiki/Fa:Good_changeset_comments",
             "google_warning": "شما در توضیحات خود از گوگل نام بردید. لطفا توجه داشته باشید که کپی کردن از نقشه‌های گوگل، ممنوع است.",
                 "tooltip_data": "این داده‌ها را در مرکز قرار بده و روی آن بزرگنمایی کن.",
                 "tooltip_issue": "این مسئله را در مرکز قرار بده و روی آن بزرگنمایی کن."
             },
-            "no_documentation_combination": "برای این ترکیب تگ‌ها مستنداتی موجود نیست",
-            "no_documentation_key": "برای این کلید مستنداتی موجود نیست",
             "show_more": "نمایش بیشتر",
             "view_on_osm": "نمایش در openstreetmap.org",
             "view_on_keepRight": "نمایش در keepright.at",
             "role": "نقش",
             "choose": "انتخاب نوع عارضه",
             "results": "{n} نتیجه برای {search}",
-            "reference": "نمایش در ویکی  OpenStreetMap",
-            "edit_reference": "تÙ\88ضÛ\8cحات Ø±Ø§ Ù\88Û\8cراÛ\8cØ´ Û\8cا ØªØ±Ø¬Ù\85Ù\87 Ú©Ù\86Û\8cد",
+            "no_documentation_key": "مستنداتی موجود نیست.",
+            "edit_reference": "اصÙ\84اح/ترجÙ\85Ù\87",
             "wiki_reference": "مشاهده مستندات",
             "wiki_en_reference": "مشاهده مستندات به زبان انگلیسی",
+            "hidden_preset": {
+                "manual": "{features} مخفی هستند. آن‌ها را از طریق کادر «داده‌های نقشه» فعال کنید.",
+                "zoom": "{features} مخفی هستند. بزرگنمایی کنید تا فعال شوند."
+            },
             "back_tooltip": "تغییر عارضه",
             "remove": "پاک کردن",
             "search": "جستجو",
                     "tooltip": "مسائلی که keepright.at به‌طور خودکار در نقشه کشف کرده است.",
                     "title": "مسائل KeepRight"
                 },
+                "improveOSM": {
+                    "tooltip": "کمبودهایی که improveosm.org به‌طور خودکار در داده‌ها کشف کرده است",
+                    "title": "مسائل ImproveOSM"
+                },
                 "custom": {
                     "tooltip": "یک فایل اطلاعاتی را به داخل صفحه بکشید و رها کنید یا برای تنظیم روی دکمه کلیک کنید",
                     "title": "دادهٔ سفارشی برای نقشه",
                 "tooltip": "جاده‌های خدماتی، راه‌های پارکینگ، ردها و غیره."
             },
             "paths": {
-                "description": "راهچه",
+                "description": "راهچه‌ها",
                 "tooltip": "پیاده‌روها، راه‌های پیاده، مسیرهای دوچرخه‌سواری و غیره."
             },
             "buildings": {
                 "tooltip": "خطوط برق، نیروگاه‌ها، ایستگاه‌های فرعی و غیره."
             },
             "past_future": {
-                "description": "گذشته/آینده",
+                "description": "عارضه‌های گذشته/آینده",
                 "tooltip": "پیشنهادشده، در حال ساخت، رهاشده، تخریب‌شده و غیره."
             },
             "others": {
-                "description": "سایر",
+                "description": "سایر عارضه‌ها",
                 "tooltip": "هر چیز دیگر"
             }
         },
             "on_wiki": "{tag} در wiki.osm.org",
             "used_with": "با  {type} استفاده شده"
         },
-        "validations": {
-            "disconnected_highway": "معبر غیرمتصل",
-            "disconnected_highway_tooltip": "جاده‌ها باید به سایر جاده‌ها یا ورودی ساختمان‌ها متصل شوند.",
-            "generic_name": "احتمالاً از نام کلی استفاده شده",
-            "generic_name_tooltip": "به‌نظر می‌رسد این عارضه یک نام کلی دارد: «{name}». لطفاً از فیلد نام فقط برای ثبت نام رسمی یک عارضه استفاده کنید.",
-            "old_multipolygon": "تگ‌های Multipolygon روی راه outer ",
-            "old_multipolygon_tooltip": "این سبک از Multipolygon منسوخ شده. لطفاً به‌جای راه outer، تگ‌ها را به Multipolygon مادر بدهید.",
-            "untagged_point": "نقطهٔ بی‌تگ",
-            "untagged_point_tooltip": "یکی از انواع عارضه‌ها را انتخاب کنید تا چیستی این نقطه مشخص شود.",
-            "untagged_line": "خط بی‌تگ",
-            "untagged_line_tooltip": "یکی از انواع عارضه‌ها را انتخاب کنید تا چیستی این خط مشخص شود.",
-            "untagged_area": "محدودهٔ بی‌تگ",
-            "untagged_area_tooltip": "یکی از انواع عارضه‌ها را انتخاب کنید تا چیستی این محدوده مشخص شود.",
-            "untagged_relation": "رابطهٔ بی‌تگ",
-            "untagged_relation_tooltip": "یکی از انواع عارضه‌ها را انتخاب کنید تا چیستی این رابطه مشخص شود.",
-            "many_deletions": "شما دارید {n} عارضه را حذف می‌کنید: {p} گره، {l} خط، {a} محدوده و {r} رابطه. آیا از انجام این کار مطمئن هستید؟ با این کار آن‌ها از روی نقشهٔ openstreetmap.org که همه استفاده می‌کنند حذف می‌شوند.",
-            "tag_suggests_area": "تگ {tag} پیشنهاد می‌کند که خط باید محدوده باشد، اما یک محدوده نیست",
-            "deprecated_tags": "تگ‌های منسوخ: {tags}"
-        },
         "zoom": {
             "in": "بزرگ‌نمایی",
             "out": "کوچک‌نمایی"
         "cannot_zoom": "در حالت فعلی بیش از این نمیتوان کوچک نمایی کرد.",
         "full_screen": "تعویض صفحه‌نمایش کامل",
         "QA": {
+            "improveOSM": {
+                "title": "تشخیص ImproveOSM",
+                "geometry_types": {
+                    "path": "راهچه‌ها",
+                    "parking": "پارکینگ",
+                    "road": "جاده‌ها",
+                    "both": "جاده‌ها و پارکینگ"
+                },
+                "directions": {
+                    "east": "شرق",
+                    "north": "شمال",
+                    "northeast": "شمال شرقی",
+                    "northwest": "شمال غربی",
+                    "south": "جنوب",
+                    "southeast": "جنوب شرقی",
+                    "southwest": "جنوب غربی",
+                    "west": "غرب"
+                },
+                "error_types": {
+                    "ow": {
+                        "title": "کمبود یکطرفه",
+                        "description": "در امتداد این تکه از {highway}‏، {percentage}% از {num_trips} سفرِ ثبت‌شده، از {from_node} به {to_node} بوده. به‌نظر می‌رسد تگ oneway فراموش شده."
+                    },
+                    "mr": {
+                        "title": "کمبود رسم",
+                        "description": "بر اساس {num_trips} سفر ثبت‌شده در این منطقه، به‌نظر می‌رسد رسم {geometry_type} در این محدوده انجام نشده.",
+                        "description_alt": "از بررسی داده‌های شخص ثالث بر می‌آید که در این محدوده {geometry_type} نقشه‌کشی نشده."
+                    },
+                    "tr": {
+                        "title": "کمبود محدودیت گردش",
+                        "description": "در {num_passed} سفر از {num_trips} سفر ثبت‌شده (به‌سمت {travel_direction}) در {junction} از {from_way} به {to_way} گردش انجام شده. به‌نظر می‌رسد یک محدودیت {turn_restriction} نیاز باشد."
+                    }
+                }
+            },
             "keepRight": {
                 "title": "خطای KeepRight",
                 "detail_title": "خطا",
             "save": "ذخیره‌سازی یادداشت",
             "login": "برای تغییردادن این یادداشت یا نظردادن روی آن باید وارد شوید.",
             "upload_explanation": "پیام‌های شما به‌طور عمومی در معرض دید همهٔ کاربران اوپن‌استریت‌مپ قرار می‌گیرد.",
-            "upload_explanation_with_user": "Ù¾Û\8cاÙ\85â\80\8cÙ\87اÛ\8c Ø´Ù\85ا ØªØ­Øª نام {user} به‌طور عمومی در معرض دید همهٔ کاربران اوپن‌استریت‌مپ قرار می‌گیرد."
+            "upload_explanation_with_user": "Ù¾Û\8cاÙ\85â\80\8cÙ\87اÛ\8c Ø´Ù\85ا Ø¨Ø§ نام {user} به‌طور عمومی در معرض دید همهٔ کاربران اوپن‌استریت‌مپ قرار می‌گیرد."
         },
         "help": {
             "title": "راهنمایی",
                 "title": "تضمین کیفیت",
                 "intro": "به‌کمک ابزارهای *تضمین کیفیت* یا *Quality Assurance* (Q/A)‎ می‌توانیم تگ‌های نادرست، جاده‌های غیرمتصل و سایر مشکلات موجود در اوپن‌استریت‌مپ را پیدا کنیم و نقشه‌کش‌ها در صورت نیاز آن‌ها را اصلاح می‌کنند. برای دیدن مشکلاتی که هنوز حل نشده، روی دکمهٔ **داده‌های نقشه** {data} کلیک کنید و یکی از لایه‌های تضمین کیفیت را فعال کنید.",
                 "tools_h": "ابزارها",
-                "tools": "در حال حاضر ویرایشگر iD از این ابزارها پشتیبانی می‌کند:  [KeepRight](https://www.keepright.at/). به‌مرور از [Osmose](https://osmose.openstreetmap.fr/)،‏ [ImproveOSM](https://improveosm.org/en/) و سایر ابزارهای تضمین کیفیت نیز پشتیبانی خواهد شد.",
+                "tools": "در حال حاضر ویرایشگر iD از این ابزارها پشتیبانی می‌کند:  [KeepRight](https://www.keepright.at/) و [ImproveOSM](https://improveosm.org/en/). به‌مرور از [Osmose](https://osmose.openstreetmap.fr/) و سایر ابزارهای تضمین کیفیت نیز پشتیبانی خواهد شد.",
                 "issues_h": "کارکردن با مسائل",
                 "issues": "کارکردن با مسئله‌های تضمین کیفیت مثل کارکردن با یادداشت‌هاست. روی یکی از نشانه‌گذارهای نقشه کلیک کنید تا جزئیات مسئله را در کادر کنار صفحه ببینید. هر کدام از ابزارها امکانات خودشان را دارند، اما به‌طور کلی می‌توانید روی یک مسئله پیام بگذارید یا آن را ببندید. "
             },
                 }
             }
         },
+        "issues": {
+            "title": "مسئله‌ها",
+            "key": "I",
+            "list_title": "مسئله‌ها ({count})",
+            "errors": {
+                "list_title": "خطاها ({count})"
+            },
+            "warnings": {
+                "list_title": "هشدارها ({count})"
+            },
+            "no_issues": {
+                "message": "همه‌چیز خوب است",
+                "info": "همزمان با ویرایش شما، اگر مسئله‌ای را تشخیص دهیم اینجا اعلام می‌کنیم"
+            },
+            "almost_junction": {
+                "message": "{feature} خیلی به {feature2} نزدیک است اما به آن متصل نیست",
+                "highway-highway": {
+                    "tip": "معابر باید در تقاطع یک نقطهٔ مشترک داشته باشند."
+                }
+            },
+            "crossing_ways": {
+                "message": "{feature} از {feature2} می‌گذرد",
+                "building-building": {
+                    "tip": "ساختمان‌ها نباید اشتراک داشته باشند، مگر اینکه در لایه‌های مختلف باشند."
+                },
+                "building-highway": {
+                    "tip": "معابری که از ساختمان‌ها می‌گذرند باید پل (bridge)، تونل (tunnel)، سرپوشیدگی (covering) یا (ورودی) entrance داشته باشند."
+                },
+                "building-railway": {
+                    "tip": "ریل‌هایی که از ساختمان‌ها می‌گذرند باید پل یا تونل داشته باشند."
+                },
+                "building-waterway": {
+                    "tip": "راه‌های آبی که از ساختمان‌ها می‌گذرند باید تونل داشته باشند یا در لایهٔ مجزا باشند."
+                },
+                "highway-highway": {
+                    "tip": "معابری که از هم می‌گذرند باید پل، تونل یا تقاطع داشته باشند."
+                },
+                "highway-railway": {
+                    "tip": "معابری که از ریل‌ها می‌گذرند باید پل، تونل یا تقاطع با راه‌آهن (level crossing) داشته باشند."
+                },
+                "highway-waterway": {
+                    "tip": "معابری که از راه‌های آبی می‌گذرند باید پل، تونل یا گدار(ford) داشته باشند."
+                },
+                "railway-railway": {
+                    "tip": "ریل‌هایی که از هم می‌گذرند باید متصل باشند یا اینکه پل یا تونل داشته باشند."
+                },
+                "railway-waterway": {
+                    "tip": "ریل‌هایی که از راه‌های آبی می‌گذرند باید پل یا تونل داشته باشند."
+                },
+                "waterway-waterway": {
+                    "tip": "راه‌های آبی که از هم می‌گذرند باید متصل باشند یا اینکه تونل داشته باشند."
+                },
+                "tunnel-tunnel": {
+                    "tip": "تونل‌هایی که از هم می‌گذرند باید لایه‌های مجزا داشته باشند."
+                },
+                "tunnel-tunnel_connectable": {
+                    "tip": "تونل‌هایی که از هم می‌گذرند باید متصل باشند یا لایه‌های مجزا داشته باشند."
+                },
+                "bridge-bridge": {
+                    "tip": "پل‌هایی که از هم می‌گذرند باید لایه‌های مجزا داشته باشند."
+                },
+                "bridge-bridge_connectable": {
+                    "tip": "پل‌هایی که از هم می‌گذرند باید متصل باشند یا لایه‌های مجزا داشته باشند."
+                }
+            },
+            "deprecated_tag": {
+                "single": {
+                    "message": "{feature} دارای تگ منسوخ «{tag}» است"
+                },
+                "combination": {
+                    "message": "{feature} دارای یک ترکیب منسوخ از تگ‌هاست: {tags}"
+                },
+                "tip": "برخی تگ‌ها به‌مرور زمان منسوخ شده‌اند و باید جایگزین شوند."
+            },
+            "disconnected_way": {
+                "highway": {
+                    "message": "{highway} به سایر جاده‌ها و راه‌ها وصل نیست.",
+                    "tip": "معابر باید به سایر معابر یا ورودی ساختمان‌ها وصل شوند."
+                }
+            },
+            "generic_name": {
+                "message": "{feature} دارای نام عمومی «{name}» است",
+                "tip": "نام باید واقعی باشد و همانی باشد که در عمل به‌کار رفته."
+            },
+            "many_deletions": {
+                "points-lines-areas": {
+                    "message": "حذف {n} عارضه: {p} نقطه، {l} خط و {a} محدوده"
+                },
+                "points-lines-areas-relations": {
+                    "message": "حذف {n} عارضه: {p} نقطه، {l} خط، {a} محدوده و {r} رابطه"
+                },
+                "tip": "فقط عارضه‌های زائد یا ناموجود باید حذف شوند."
+            },
+            "missing_tag": {
+                "any": {
+                    "message": "{feature} هیچ تگی ندارد"
+                },
+                "descriptive": {
+                    "message": "{feature} هیچ تگ توصیف‌کننده‌ای ندارد"
+                },
+                "specific": {
+                    "message": "{feature} تگ {tag} ندارد"
+                },
+                "tip": "عارضه‌ها باید تگ‌هایی داشته باشند که چیستی آن‌ها را تعریف کند."
+            },
+            "old_multipolygon": {
+                "message": "تگ‌های {multipolygon} در جای درست به‌کار نرفته.",
+                "tip": "تگ مربوط به چندچندضلعی‌ها (Multipolygons) باید روی رابطه بیاید نه روی راه بیرونی (outer)."
+            },
+            "tag_suggests_area": {
+                "message": "{feature} باید یک محدودهٔ بسته باشد زیرا دارای تگ {tag} است.",
+                "tip": "نقاط ابتدا و انتهای محدوده‌ها باید به هم وصل باشد."
+            },
+            "fix": {
+                "connect_almost_junction": {
+                    "annotation": "عارضه‌های خیلی نزدیک متصل شدند."
+                },
+                "connect_crossing_features": {
+                    "annotation": "عارضه‌های گذرنده از هم، متصل شدند."
+                },
+                "connect_endpoints": {
+                    "title": "نقاط انتهایی را متصل کنید",
+                    "annotation": "نقاط انتهایی یک راه به هم وصل شدند."
+                },
+                "connect_features": {
+                    "title": "عارضه‌ها را متصل کنید"
+                },
+                "continue_from_start": {
+                    "title": "رسم را از نقطهٔ ابتدایی ادامه دهید"
+                },
+                "continue_from_end": {
+                    "title": "رسم را از نقطهٔ انتهایی ادامه دهید"
+                },
+                "delete_feature": {
+                    "title": "این عارضه را حذف کنید"
+                },
+                "move_tags": {
+                    "title": "تگ‌ها را جابه‌جا کنید",
+                    "annotation": "تگ‌ها جابه‌جا شد."
+                },
+                "remove_generic_name": {
+                    "title": "نام را حذف کنید",
+                    "annotation": "یک نام عمومی حذف شد."
+                },
+                "remove_tag": {
+                    "title": "تگ را حذف کنید",
+                    "annotation": "تگ حذف شد."
+                },
+                "reposition_features": {
+                    "title": "جای عارضه‌ها را تنظیم کنید"
+                },
+                "select_preset": {
+                    "title": "یکی از انواع عارضه‌ها را انتخاب کنید"
+                },
+                "tag_as_disconnected": {
+                    "title": "به‌عنوان غیرمتصل تگ‌گذاری کنید",
+                    "annotation": "عارضه‌هایی که خیلی به هم نزدیک بودند به‌عنوان غیرمتصل تگ‌گذاری شدند."
+                },
+                "upgrade_tag": {
+                    "annotation": "یک تگ قدیمی ارتقا یافت."
+                },
+                "upgrade_tag_combo": {
+                    "annotation": "یک ترکیب قدیمی از تگ‌ها ارتقا یافت."
+                }
+            }
+        },
         "intro": {
             "done": "انجام شده",
             "ok": "خب",
                 "category-building": {
                     "name": "عارضه‌های ساختمانی"
                 },
-                "category-golf": {
+                "category-golf-area": {
+                    "name": "عارضه‌های گلف"
+                },
+                "category-golf-line": {
                     "name": "عارضه‌های گلف"
                 },
                 "category-landuse": {
                 },
                 "website": {
                     "label": "وب سايت",
-                    "placeholder": "http://example.com/"
+                    "placeholder": "https://example.com"
                 },
                 "wetland": {
                     "label": "نوع"
                     "terms": "ترمینال فرودگاه"
                 },
                 "amenity": {
-                    "name": "اماکن رفاهی"
+                    "name": "مکان رفاهی"
                 },
                 "amenity/animal_breeding": {
                     "name": "امکانات پرورش حیوانات"
                 "amenity/fast_food/kebab": {
                     "name": "کبابی"
                 },
+                "amenity/fast_food/mexican": {
+                    "name": "فست‌فود مکزیکی"
+                },
                 "amenity/fast_food/pizza": {
                     "name": "پیتزا",
                     "terms": "فست فود, حاضری"
                     "terms": "کافه‌ی اینترنت, کافینت, اینترنت"
                 },
                 "amenity/kindergarten": {
-                    "name": "محوطه پیش دبستانی / مهدکودک"
+                    "name": "محوطه پیش دبستانی / مهدکودک",
+                    "terms": "پیش دبستانی، مهد کودک، مدرسه، کودکستان"
                 },
                 "amenity/language_school": {
                     "name": "آموزشگاه زبان",
-                    "terms": "زبانکده"
+                    "terms": "زبانکده، آکادمی موسیقی، مدرسه موسیقی"
                 },
                 "amenity/library": {
                     "name": "کتابخانه"
                     "terms": "موتورسیکلت"
                 },
                 "amenity/music_school": {
-                    "name": "آموزشگاه موسیقی"
+                    "name": "آموزشگاه موسیقی",
+                    "terms": "مدرسه موسیقی، آکادمی موسیقی"
                 },
                 "amenity/nightclub": {
                     "name": "کلوپ شبانه"
                     "name": "دفع توالت RV"
                 },
                 "amenity/school": {
-                    "name": "محیط مدرسه"
+                    "name": "محیط مدرسه",
+                    "terms": "آکادمی، دبیرستان، مدرسه، راهنمایی، دبستان، پیش دانشگاهی، ابتدایی"
                 },
                 "amenity/shelter": {
                     "name": "پناهگاه",
                     "name": "ساختمان صنعتی"
                 },
                 "building/kindergarten": {
-                    "name": "پیش دبستانی /ساختمان کودکستان"
+                    "name": "ساختمان پیش دبستانی / کودکستان",
+                    "terms": "پیش دبستانی، مهد کودک، مدرسه، کودکستان"
                 },
                 "building/mosque": {
                     "name": "ساختمان مسجد"
                     "name": "خرابه های ساختمان"
                 },
                 "building/school": {
-                    "name": "ساختمان مدرسه"
+                    "name": "ساختمان مدرسه",
+                    "terms": "آکادمی، دبیرستان، مدرسه، راهنمایی، دبستان، پیش دانشگاهی، ابتدایی"
                 },
                 "building/semidetached_house": {
                     "name": "خانه شبه ویلایی"
                 "building/terrace": {
                     "name": "خانه های ردیفی"
                 },
-                "building/train_station": {
-                    "name": "ایستگاه قطار"
-                },
                 "building/university": {
                     "name": "ساختمان دانشگاه"
                 },
                 "golf/hole": {
                     "name": "سوراخ گلف"
                 },
-                "golf/lateral_water_hazard_area": {
-                    "name": "خطر آب های کناری"
-                },
-                "golf/lateral_water_hazard_line": {
-                    "name": "خطر آب های کناری"
-                },
                 "golf/rough": {
                     "name": "منطقه زمخت"
                 },
                 "golf/tee": {
                     "name": "Tee Box"
                 },
-                "golf/water_hazard_area": {
-                    "name": "خطر آب"
-                },
-                "golf/water_hazard_line": {
-                    "name": "خطر آب"
-                },
                 "healthcare/audiologist": {
                     "name": "شنوایی سنجی"
                 },
                     "terms": "تالار رقص"
                 },
                 "leisure/dancing_school": {
-                    "name": "مدرسه رقص"
+                    "name": "مدرسه رقص",
+                    "terms": "رقص"
                 },
                 "leisure/dog_park": {
                     "name": "پارک سگ"
                 "leisure/picnic_table": {
                     "name": "میز پیکنیک"
                 },
+                "leisure/picnic_table/chess": {
+                    "name": "میز شطرنج",
+                    "terms": "شطرنج، میز، نیمکت، تخته بازی، بازی تخته‌ای، بازی رومیزی"
+                },
                 "leisure/pitch": {
                     "name": "زمین ورزشی"
                 },
                     "name": "چوب"
                 },
                 "office": {
-                    "name": "ادارÙ\87",
-                    "terms": "دÙ\81تر"
+                    "name": "دÙ\81تر",
+                    "terms": "ادارÙ\87"
                 },
                 "office/accountant": {
-                    "name": "دفتر حسابدار"
+                    "name": "دفتر حسابدار",
+                    "terms": "حسابدار"
                 },
                 "office/administrative": {
-                    "name": "دÙ\81تر حکومتی"
+                    "name": "ادارÙ\87 حکومتی"
                 },
                 "office/advertising_agency": {
                     "name": "کانون تبلیغاتی",
                 "power/transformer": {
                     "name": "مبدل برق"
                 },
-                "public_transport/linear_platform_bus": {
-                    "name": "ایستگاه اتوبوس"
-                },
                 "public_transport/station_monorail": {
                     "name": "ایستگاه مونوریل"
                 },
                     "terms": "دوچرخه, تعمیر"
                 },
                 "shop/bookmaker": {
-                    "name": "صحافی"
+                    "name": "دلال شرط‌بندی",
+                    "terms": "قماربازی, شرطبندی"
                 },
                 "shop/books": {
                     "name": "کتاب‌فروشی",
                     "name": "فروشگاه شراب"
                 },
                 "tourism": {
-                    "name": "گردشگری",
-                    "terms": "توریستی, توریست, گردشگر, توریزم, دیدنی ها, جاذبه گردشگری"
+                    "name": "گردشگری"
                 },
                 "tourism/alpine_hut": {
                     "name": "کلبه آلپ"
index 252113fec4dd526734415ce9fe9b5e2157d71028..f8fbdbc54406b96b2559d92b1a4f4ddbcdee646c 100644 (file)
         "inspector": {
             "zoom_to": {
                 "key": "Z",
-                "title": "Zoomaa tähän",
-                "tooltip_feature": "Keskitä ja zoomaa kartta tarkentaaksesi tähän ominaisuuteen.",
-                "tooltip_note": "Keskitä ja zoomaa kartta tarkentaaksesi tähän huomautukseen.",
-                "tooltip_data": "Keskitä ja zoomaa kartta tarkentaaksesi tähän dataan.",
-                "tooltip_issue": "Keskitä ja zoomaa kartta tarkentaaksesi tähän virheeseen."
-            },
-            "no_documentation_combination": "Tälle ominaisuustiedolle ei löydy käyttöohjeita tai -suosituksia.",
-            "no_documentation_key": "Tälle avaimelle ei löydy käyttöohjeita tai -suosituksia",
+                "title": "Lähennä tähän",
+                "tooltip_feature": "Keskitä ja lähennä kartta tähän kohteeseen.",
+                "tooltip_note": "Keskitä ja lähennä kartta tähän huomautukseen.",
+                "tooltip_data": "Keskitä ja lähennä kartta tähän aineistoon.",
+                "tooltip_issue": "Keskitä ja lähennä kartta thän karttailmoitukseen."
+            },
             "show_more": "Näytä lisää",
             "view_on_osm": "Näytä openstreetmap.org-sivustolla",
-            "view_on_keepRight": "Tarkastele sivustolla KeepRight.at",
+            "view_on_keepRight": "Tarkastele KeepRight.at-sivustolla",
             "all_fields": "Kaikki kentät",
             "all_tags": "Kaikki ominaisuustiedot",
             "all_members": "Kaikki jäsenet",
             "role": "Rooli",
             "choose": "Valitse ominaisuustyyppi",
             "results": "{n} hakutulosta haulle {search}",
-            "reference": "Näytä OpenStreetMapin Wikissä",
-            "edit_reference": "Muokka tai käännä kuvaus",
-            "wiki_reference": "Näytä dokumentointi",
-            "wiki_en_reference": "Näytä dokumentointi englanniksi",
+            "wiki_reference": "Näytä ohjeistus",
+            "wiki_en_reference": "Näytä englanninkielinen ohjeistus",
             "back_tooltip": "Vaihda ominaisuustyyppi",
             "remove": "Poista",
             "search": "Hae",
                     "title": "OpenStreetMapin karttailmoitukset"
                 },
                 "keepRight": {
-                    "tooltip": "Tunnistettiin automaattisesti ongelmia kartalla sivustolta KeepRight.at",
-                    "title": "KeepRight Ongelmat"
+                    "tooltip": "Koneellisesti tunnistettuja karttaongelmia KeepRight.at-sivustolta",
+                    "title": "KeepRight-ilmoitukset"
                 },
                 "custom": {
                     "tooltip": "Vedä ja pudota datatiedosto sivulle, tai klikkaa näppäintä asettaaksesi",
                     "title": "Räätälöidyt karttatiedot",
-                    "zoom": "Zoomaa dataan"
+                    "zoom": "Lähennä aineistoon"
                 }
             },
             "fill_area": "Alueen taustatäyttö",
                 "tooltip": "Voimalinjat, muuntajat, sähköasemat,  voimalaitokset jne."
             },
             "past_future": {
-                "description": "Mennyt/tuleva",
                 "tooltip": "Suunnitteilla, rakenteilla, hylätty, purettu jne."
             },
             "others": {
-                "description": "Muut",
                 "tooltip": "Kaikki muu"
             }
         },
             "on_wiki": "{tag} palvelussa wiki.osm.org",
             "used_with": "käytetään tyypin {type} kanssa"
         },
-        "validations": {
-            "disconnected_highway": "Erota valtatie",
-            "disconnected_highway_tooltip": "Tie tulisi yhdistää toiseen tiehen tai rakennuksen sisäänkäyntiin",
-            "generic_name": "Mahdollinen yleisnimi",
-            "generic_name_tooltip": "Tämä ominaisuus näyttää sisältävän yleisnimen \"{name}\". Ole hyvä ja käytä ainoastaan nimitietoa tallentaaksesi ominaisuuden virallisen nimen.",
-            "old_multipolygon": "Monikulmioiden ominaisuustiedot ulkoviivalla",
-            "old_multipolygon_tooltip": "Tämänkaltainen monikulmiotyyppi on vanhentunut. Merkitse ominaisuustiedot päämonikulmioon ulkoviivan sijasta.",
-            "untagged_point": "Ominaisuustiedoton piste",
-            "untagged_point_tooltip": "Valitse ominaisuustyyppi, joka kuvaa tämän pisteen tarkoitusta.",
-            "untagged_line": "Ominaisuustiedoton viiva",
-            "untagged_line_tooltip": "Valitse ominaisuustyyppi, joka kuvaa tämän viivan tarkoitusta.",
-            "untagged_area": "Ominaisuustiedoton alue",
-            "untagged_area_tooltip": "Valitse ominaisuustyyppi, joka kuvaa tämän alueen tarkoitusta.",
-            "untagged_relation": "Ominaisuustiedoton relaatio",
-            "untagged_relation_tooltip": "Valitse relaation mukainen karttakohde",
-            "many_deletions": "Olet poistamassa {n} karttakohdetta: {p} pistettä, {l} viivaa, {a} aluetta ja {r} relaatiota. Haluatko varmasti poistaa ne kaikkien julkisesti käyttämältä OpenStreetMap.org-kartalta?",
-            "tag_suggests_area": "Ominaisuustiedon {tag} mukaan viiva on alue, vaikka se ei sitä ole.",
-            "deprecated_tags": "Vanhentuneet ominaisuustiedot: {tags}"
-        },
         "zoom": {
             "in": "Lähennä",
             "out": "Loitonna"
         "cannot_zoom": "Nykyisessä tilassa ei voi loitontaa enempää.",
         "full_screen": "Koko näytön tila",
         "QA": {
+            "improveOSM": {
+                "directions": {
+                    "east": "itä",
+                    "north": "pohjoinen",
+                    "northeast": "koillinen",
+                    "northwest": "luode",
+                    "south": "etelä",
+                    "southeast": "kaakko",
+                    "southwest": "lounas",
+                    "west": "länsi"
+                }
+            },
             "keepRight": {
-                "title": "KeepRight virhe",
+                "title": "KeepRight-virhe",
                 "detail_title": "Virhe",
                 "detail_description": "Kuvaus",
                 "comment": "Kommentti",
                 "with_selected": {
                     "title": "Kohde valittuna",
                     "edit_menu": "Näytä/piilota toimintovalikko",
-                    "zoom_to": "Zoomaa valittuun ominaisuuteen"
+                    "zoom_to": "Lähennä valittuun kohteeseen"
                 },
                 "vertex_selected": {
                     "title": "Piste valittuna",
                 "category-building": {
                     "name": "Rakennukset"
                 },
-                "category-golf": {
-                    "name": "Golf-kentät"
-                },
                 "category-landuse": {
                     "name": "Maankäyttö"
                 },
                     "name": "Luonto"
                 },
                 "category-path": {
-                    "name": "Jalankulun ja pyöräilyn väylät"
+                    "name": "Kävely- ja pyörätiet"
                 },
                 "category-rail": {
                     "name": "Rautatiet"
                 "animal_shelter": {
                     "label": "Eläimille"
                 },
+                "architect": {
+                    "label": "Arkkitehti"
+                },
                 "area/highway": {
                     "label": "Tyyppi"
                 },
                 "atm": {
                     "label": "Pankkiautomaatti"
                 },
+                "attraction": {
+                    "label": "Tyyppi"
+                },
                 "backrest": {
                     "label": "Selkänoja"
                 },
                 "barrier": {
                     "label": "Tyyppi"
                 },
+                "basin": {
+                    "label": "Tyyppi"
+                },
                 "bath/open_air": {
                     "label": "Ulkoilma"
                 },
                 "building": {
                     "label": "Rakennus"
                 },
+                "building/material": {
+                    "label": "Materiaali"
+                },
                 "building_area": {
                     "label": "Rakennus"
                 },
                 "castle_type": {
                     "label": "Tyyppi"
                 },
+                "check_date": {
+                    "label": "Tarkistettu viimeksi"
+                },
                 "clothes": {
                     "label": "Vaatteet"
                 },
                 "collection_times": {
                     "label": "Tyhjennysajat"
                 },
+                "colour": {
+                    "label": "väri"
+                },
                 "comment": {
                     "label": "Muutoskokoelman kommentti",
                     "placeholder": "Kuvaile karttaan tehtyjä muutoksia (pakollinen)"
                 "content": {
                     "label": "Sisältö"
                 },
+                "conveying": {
+                    "label": "Liikkeen suunta",
+                    "options": {
+                        "backward": "taaksepäin",
+                        "forward": "eteenpäin"
+                    }
+                },
                 "country": {
                     "label": "Maa"
                 },
+                "couplings": {
+                    "placeholder": "1, 2, 3..."
+                },
                 "covered": {
                     "label": "Katos"
                 },
                 "diaper": {
                     "label": "Vaipanvaihtomahdollisuus"
                 },
+                "diet_multi": {
+                    "label": "ruokavalio"
+                },
                 "direction": {
                     "label": "Suunta (asteina myötäpäivään)",
                     "placeholder": "45, 90, 180, 270"
                         "forward": "Eteenpäin"
                     }
                 },
+                "dispensing": {
+                    "label": "reseptilääkkeet"
+                },
                 "display": {
                     "label": "Näyttö"
                 },
                 "dock": {
                     "label": "Tyyppi"
                 },
+                "dog": {
+                    "label": "Koirat",
+                    "options": {
+                        "no": "Ei sallittu",
+                        "yes": "Sallittu"
+                    }
+                },
                 "drive_through": {
                     "label": "Autokaista"
                 },
                 "fixme": {
                     "label": "Virheenkorjauspyyntö"
                 },
+                "flag/type": {
+                    "label": "Lipun tyyppi"
+                },
                 "ford": {
                     "label": "Tyyppi",
                     "placeholder": "Oletus"
                 "historic/civilization": {
                     "label": "Historiallinen kulttuuri"
                 },
+                "historic/wreck/date_sunk": {
+                    "label": "Uppoamispäivä"
+                },
                 "hoops": {
                     "label": "Koritelineet",
                     "placeholder": "1, 2, 4..."
                 "internet_access/ssid": {
                     "label": "SSID-verkkonimi"
                 },
+                "junction/ref_oneway": {
+                    "label": "Liittymän numero "
+                },
                 "kerb": {
                     "label": "Reunakiveyksen muoto"
                 },
                 "location": {
                     "label": "Sijainti"
                 },
+                "location_pool": {
+                    "label": "Sijainti",
+                    "options": {
+                        "indoor": "Sisätila",
+                        "outdoor": "Ulkotila",
+                        "roof": "Katolla"
+                    }
+                },
                 "man_made": {
                     "label": "Tyyppi"
                 },
                 "memorial": {
                     "label": "Tyyppi"
                 },
+                "minspeed": {
+                    "label": "Alhaisin sallittu nopeus",
+                    "placeholder": "20, 30, 40..."
+                },
                 "mtb/scale": {
                     "label": "Maastopyöräilyn haastavuus",
                     "options": {
                         "yes": "Kyllä"
                     }
                 },
+                "oneway/bicycle": {
+                    "label": "Yksisuuntaisuus (pyöräily)"
+                },
                 "oneway_yes": {
                     "label": "Yksisuuntaisuus",
                     "options": {
                         "yes": "Kyllä"
                     }
                 },
+                "opening_date": {
+                    "label": "Uudelleenavaamispäivä"
+                },
                 "opening_hours": {
                     "label": "Aukioloajat"
                 },
                         "skating": "Vapaa hiihtotyyli"
                     }
                 },
+                "piste/grooming_nordic": {
+                    "options": {
+                        "classic": "Perinteinen",
+                        "classic+skating": "Perinteinen ja luistelu",
+                        "skating": "Luistelu"
+                    }
+                },
                 "piste/type": {
                     "label": "Tyyppi",
                     "options": {
                 "recycling_accepts": {
                     "label": "Keräysastiat"
                 },
+                "recycling_type": {
+                    "options": {
+                        "centre": "Kierrätysasema",
+                        "container": "Keräysastia"
+                    }
+                },
                 "ref/isil": {
                     "label": "ISIL-tunnus"
                 },
                 "restrictions": {
                     "label": "Kääntymisrajoitukset"
                 },
+                "roof/colour": {
+                    "label": "Katon väri"
+                },
                 "rooms": {
                     "label": "Huoneet"
                 },
                     },
                     "placeholder": "Vuoristopatikointi, alppipatikointi..."
                 },
+                "salt": {
+                    "label": "suola"
+                },
                 "sanitary_dump_station": {
                     "label": "Tyhjennystekniikka"
                 },
+                "scuba_diving": {
+                    "label": "Palvelut"
+                },
+                "seamark/beacon_lateral/colour": {
+                    "label": "Väri",
+                    "options": {
+                        "green": "Vihreä",
+                        "grey": "Harmaa",
+                        "red": "Punainen"
+                    }
+                },
                 "seamark/type": {
                     "label": "Merimerkintä"
                 },
                     "label": "Palvelut"
                 },
                 "service_rail": {
-                    "label": "Käyttötarkoitus",
+                    "label": "Ratatyyppi",
                     "options": {
                         "crossover": "Raiteenvaihtoraide",
                         "siding": "Ohitusraide",
                 "surveillance/zone": {
                     "label": "Valvontavyöhyke"
                 },
+                "survey/date": {
+                    "label": "Tarkistettu viimeksi"
+                },
                 "switch": {
                     "label": "Tyyppi",
                     "options": {
                     }
                 },
                 "toll": {
-                    "label": "Tulli"
+                    "label": "Tiemaksu"
                 },
                 "tomb": {
                     "label": "Tyyppi"
                 },
                 "usage_rail": {
                     "options": {
-                        "industrial": "Teollinen",
-                        "main": "Tärkein",
+                        "branch": "Sivurata",
+                        "industrial": "Teollisuus",
+                        "main": "Päärata",
                         "military": "Armeija",
-                        "test": "Testi",
+                        "test": "Koeajo",
                         "tourism": "Turismi"
                     }
                 },
                     "label": "Tyyppi"
                 },
                 "website": {
-                    "label": "Verkkosivusto",
-                    "placeholder": "http://www.esimerkki.fi/"
+                    "label": "Verkkosivusto"
                 },
                 "wetland": {
                     "label": "Tyyppi"
                     "name": "Buddhalaistemppeli",
                     "terms": "buddhalainen, stupa, pagoda, luostari, zendo, dojo, meditaatio"
                 },
+                "amenity/place_of_worship/christian": {
+                    "name": "Kristinusko, kirkko"
+                },
                 "amenity/place_of_worship/hindu": {
                     "name": "Hindutemppeli",
                     "terms": "hindulaisuus, hindut, hindu, temppeli, uskonto, uskonnollinen, rukoilu, intia, jooga"
                 },
+                "amenity/place_of_worship/jewish": {
+                    "name": "Juutalaisuus, synagoga"
+                },
+                "amenity/place_of_worship/muslim": {
+                    "name": "Islam, moskeija"
+                },
                 "amenity/place_of_worship/shinto": {
                     "name": "Šintolainen pyhäkkö",
                     "terms": "Šintopyhäkkö, pyhättö, shintolainen, japanilainen, kami, asuinpaikka, jumala, henki, torii, honden, shinden, haiden, heiden, seremonia, uhrihalli"
                 "amenity/ranger_station": {
                     "name": "Metsävartiosto"
                 },
+                "amenity/recycling": {
+                    "name": "Kierrätys"
+                },
                 "amenity/recycling_centre": {
                     "name": "Kierrätyskeskus"
                 },
                     "name": "Katos",
                     "terms": "katos, katettu, kota, kotus, korsu, laavu, maja, koppi, suoja, tauko, taukopaikka, taukokatos, piknik, picnic, retki, lepo, lepääminen, pukukoppi, pukeutuminen, bussi, linja-auto, kalliolippa"
                 },
+                "amenity/shelter/gazebo": {
+                    "name": "huvimaja"
+                },
                 "amenity/shelter/lean_to": {
                     "name": "Sääsuoja",
                     "terms": "katos, kate, sää, suojus, suoja, keli, sade, sateen"
                 "amenity/shelter/picnic_shelter": {
                     "name": "Piknikkatos"
                 },
+                "amenity/shelter/public_transport": {
+                    "name": "pysäkkikatos"
+                },
                 "amenity/shower": {
                     "name": "Suihku"
                 },
                 "amenity/university": {
                     "name": "Yliopistoalue"
                 },
+                "amenity/vehicle_inspection": {
+                    "name": "Katsastusasema"
+                },
                 "amenity/vending_machine": {
                     "name": "Myyntiautomaatti",
                     "terms": "automaatti, myyntiautomaatti, jakeluautomaatti, palautusautomaatti, pullonpalautus"
                 "amenity/vending_machine/newspapers": {
                     "name": "Lehtiautomaatti"
                 },
+                "amenity/vending_machine/parcel_pickup": {
+                    "name": "Postin noutoautomaatti"
+                },
+                "amenity/vending_machine/parcel_pickup_dropoff": {
+                    "name": "Postin nouto/jättöautomaatti"
+                },
                 "amenity/vending_machine/parking_tickets": {
                     "name": "Pysäköintimaksuautomaatti",
                     "terms": "parkkiautomaatti, automaatti, maksu, maksaa, maksaminen, pysäköinti, parkki, parkkimaksu, pysäköintimaksu"
                     "name": "Tien päällyste",
                     "terms": "pinnoite, pinta"
                 },
+                "attraction": {
+                    "name": "Nähtävyys"
+                },
                 "attraction/amusement_ride": {
                     "name": "Huvipuistolaite",
                     "terms": "huvipuisto, elämyspuisto, laite, härveli, vuoristorata, karuselli, vimpain, vitkutin, huvilaite"
                 "barrier/fence": {
                     "name": "Aita"
                 },
+                "barrier/fence/railing": {
+                    "name": "Kaide"
+                },
                 "barrier/gate": {
                     "name": "Portti",
                     "terms": "puomi, ovi"
                 "building/terrace": {
                     "name": "Rivitalo"
                 },
-                "building/train_station": {
-                    "name": "Rautatieasema"
-                },
                 "building/transportation": {
                     "name": "Terminaalirakennus"
                 },
                 "golf/hole": {
                     "name": "Golf-reikä"
                 },
-                "golf/lateral_water_hazard_area": {
-                    "name": "Sivuvesieste"
-                },
-                "golf/lateral_water_hazard_line": {
-                    "name": "Sivuvesieste"
-                },
                 "golf/rough": {
                     "name": "Karheikko",
                     "terms": "karheikko, raffi, golf"
                     "name": "Tiiauspaikka",
                     "terms": "tiiauspaikka, golf, lyöntipaikka, lähtöalue, lyöntialue, tiiausalue"
                 },
-                "golf/water_hazard_area": {
-                    "name": "Vesieste"
-                },
-                "golf/water_hazard_line": {
-                    "name": "Vesieste"
-                },
                 "healthcare": {
                     "name": "Terveyspalvelu"
                 },
                 "highway/bus_stop": {
                     "name": "Linja-autopysäkki/-laituri"
                 },
+                "highway/construction": {
+                    "name": "Suljettu väylä",
+                    "terms": "tie, väylä, katu, polku, reitti, pyörätie, jalkakäytävä, suljettu, työmaa, kiinni, rakennustyömaa, rakenteilla, kesken, suunnitteilla"
+                },
                 "highway/corridor": {
                     "name": "Sisäkäytävä",
                     "terms": "katettu, katos, käytävä, sisällä, sisätila, sisätiloissa"
                     "name": "Hissi"
                 },
                 "highway/footway": {
-                    "name": "Jalankulkutie",
-                    "terms": "Polku"
+                    "name": "Kävelytie",
+                    "terms": "jalankulkija, kävelijä, kävely, jalankulku, polku, reitti, väylä, tie"
                 },
                 "highway/footway/sidewalk": {
                     "name": "Jalkakäytävä"
                     "name": "Viiva"
                 },
                 "man_made": {
-                    "name": "Ihmisen tekemä",
-                    "terms": "keinotekoinen"
+                    "name": "Ihmisen tekemä"
                 },
                 "man_made/adit": {
                     "name": "Vaakasuoran tunnelin suuaukko"
                 "power/transformer": {
                     "name": "Muuntaja"
                 },
-                "public_transport/linear_platform_aerialway": {
-                    "name": "Ilmaradan pysäkki/laituri",
-                    "terms": "ilmarata, köysirata, gondoli, hissi, laituri, pysäkki, alue"
-                },
-                "public_transport/linear_platform_bus": {
-                    "name": "Linja-autopysäkki/-laituri",
-                    "terms": "linja-autopysäkki, bussipysäkki, pysäkki, pysähdyspaikka, odotuspaikka, linja-auto, bussi, dösis, dösäri, levennys, pysäkkimerkki, katos, pikavuoro, linja-autolaituri, bussilaituri, laituri, joukkoliikenne"
-                },
-                "public_transport/linear_platform_ferry": {
-                    "name": "Laivapaikka/-matkustajalaituri"
-                },
-                "public_transport/linear_platform_light_rail": {
-                    "name": "Pikaraitiotiepysäkki/-laituri"
-                },
-                "public_transport/linear_platform_monorail": {
-                    "name": "Monorailpysäkki/-laituri"
-                },
-                "public_transport/linear_platform_subway": {
-                    "name": "Metrolaituri"
-                },
-                "public_transport/linear_platform_train": {
-                    "name": "Rautatielaituri",
-                    "terms": "juna, rautatie, laituri, rata, raide, asema, pysäkki"
-                },
-                "public_transport/linear_platform_tram": {
-                    "name": "Katuraitiotiepysäkki/-laituri"
-                },
-                "public_transport/linear_platform_trolleybus": {
-                    "name": "Johdinautopysäkki/-laituri"
+                "public_transport/platform": {
+                    "name": "Joukkoliikennepysäkki/-laituri"
                 },
                 "public_transport/platform_aerialway": {
                     "name": "Ilmaradan pysäkki/laituri",
                 "public_transport/station_trolleybus": {
                     "name": "Johdinautoasema/-terminaali"
                 },
+                "public_transport/stop_area": {
+                    "name": "Joukkoliikennealue"
+                },
+                "public_transport/stop_position": {
+                    "name": "Joukkoliikenteen pysähtymiskohta"
+                },
                 "public_transport/stop_position_aerialway": {
                     "name": "Ilmaradan vaunun pysähtymiskohta",
                     "terms": "ilmarata, köysirata, gondoli, hissi, asema, pysäkki, yläasema, ala-asema"
                     "name": "Pysäytyspuskuri"
                 },
                 "railway/crossing": {
-                    "name": "Jalankulun ja pyöräilyn tasoristeys",
+                    "name": "Kävelyn ja pyöräilyn tasoristeys",
                     "terms": "tasoristeys, ylityspaikka, rautatie, radanylitys, jalankulku, pyöräily, jalan, pyörällä, pyörä, polkupyörä, polkupyörien, polkupyörän, pyörien, pyörän, suojatie"
                 },
                 "railway/disused": {
index 264ab19a8b9ee983a90cfb08627992f198a5289a..6f72badeed45d6cfbb90beea8c1c7806d57249e8 100644 (file)
                 "restriction": "Ces éléments ne peuvent être fusionnés car cela endommagerait une relation « {relation} ».",
                 "relation": "Ces éléments ne peuvent être fusionnés car leurs rôles sont incompatibles dans une relation.",
                 "incomplete_relation": "Ces éléments ne peuvent pas être fusionnés parce qu'au moins l'un d'entre eux n'a pas été complètement téléchargé.",
-                "conflicting_tags": "Ces éléments ne peuvent être fusionnés car certains de leurs attributs ont des valeurs conflictuelles."
+                "conflicting_tags": "Ces éléments ne peuvent être fusionnés car certains de leurs attributs ont des valeurs conflictuelles.",
+                "paths_intersect": "Ces éléments ne peuvent être fusionnés car le chemin qui en résulterait se croiserait lui-même."
             },
             "move": {
                 "title": "Déplacer",
             "modified": "Modifié",
             "deleted": "Supprimé",
             "created": "Créé",
+            "outstanding_errors_message": "Résolvez d'abord toutes les erreurs. Il en reste {count}.",
+            "comment_needed_message": "Ajoutez d'abord un commentaire pour le groupe de modifications.",
             "about_changeset_comments": "À propos des commentaires de groupe de modifications",
             "about_changeset_comments_link": "//wiki.openstreetmap.org/wiki/FR:Bons_commentaires_de_groupe_de_modifications",
             "google_warning": "Vous avez mentionné Google dans ce commentaire : rappelez-vous que copier depuis Google Maps est strictement interdit.",
                 "tooltip_data": "Centrer et zoomer la carte sur cette donnée.",
                 "tooltip_issue": "Centrer et zoomer la carte sur ce problème."
             },
-            "no_documentation_combination": "Aucune documentation n'est disponible pour cette combinaison d'étiquettes",
-            "no_documentation_key": "Aucune documentation n'est disponible pour cette clé",
             "show_more": "Plus d'informations",
             "view_on_osm": "Consulter sur openstreetmap.org",
             "view_on_keepRight": "Voir sur keepright.at",
             "role": "Rôle",
             "choose": "Que souhaitez-vous ajouter ?",
             "results": "{n} résultats pour {search}",
-            "reference": "Consulter sur le Wiki d'OpenStreetMap",
-            "edit_reference": "Éditer ou traduire la description",
+            "no_documentation_key": "Aucune documentation disponible.",
+            "edit_reference": "modifier ou traduire",
             "wiki_reference": "Voir la documentation",
             "wiki_en_reference": "Voir la documentation en anglais",
+            "hidden_preset": {
+                "manual": "{features} sont cachés. Activez-les dans le panneau de données de carte.",
+                "zoom": "{features} sont cachés. Zoomez pour les afficher."
+            },
             "back_tooltip": "Changer l'objet",
             "remove": "Supprimer",
             "search": "Rechercher",
                     "tooltip": "Problèmes détectés automatiquement par keepright.at",
                     "title": "Problèmes KeepRight"
                 },
+                "improveOSM": {
+                    "tooltip": "Données manquantes automatiquement détectées par improveosm.org",
+                    "title": "Problèmes ImproveOSM"
+                },
                 "custom": {
                     "tooltip": "Faîtes glisser-déposer un fichier de données sur la page, ou cliquez sur le bouton pour les paramétrer",
                     "title": "Données de carte personnalisées",
                 "tooltip": "Lignes électriques, Centrales électriques, Postes électriques, etc."
             },
             "past_future": {
-                "description": "Passé/Futur",
+                "description": "Éléments passés et futurs",
                 "tooltip": "Proposé, Construction, Abandonné, Démoli, etc."
             },
             "others": {
-                "description": "Autres",
+                "description": "Autres éléments",
                 "tooltip": "Autres"
             }
         },
             "on_wiki": "{tag} sur wiki.osm.org",
             "used_with": "Utilisé avec {type}"
         },
-        "validations": {
-            "disconnected_highway": "Route déconnectée",
-            "disconnected_highway_tooltip": "Les routes doivent être connectées à d'autres routes ou à des entrées de bâtiment.",
-            "generic_name": "Nom générique possible",
-            "generic_name_tooltip": "Cet élément a le nom générique « {name} ». N'utilisez le champ nom que pour enregistrer le nom officiel de l'élément.",
-            "old_multipolygon": "Un polygone extérieur porte les attributs du multipolygone",
-            "old_multipolygon_tooltip": "Ce modèle de multipolygone est déprécié. Veuillez retirer les attributs du polygone extérieur (membre) et les placer sur le multipolygone lui-même (parent). ",
-            "untagged_point": "Point sans attribut",
-            "untagged_point_tooltip": "Sélectionnez un type d'élément pour décrire ce point.",
-            "untagged_line": "Ligne sans aucun attribut",
-            "untagged_line_tooltip": "Sélectionnez un type d'élément pour décrire cette ligne.",
-            "untagged_area": "Polygone sans aucun attribut",
-            "untagged_area_tooltip": "Sélectionnez un type d'élément pour décrire cette surface.",
-            "untagged_relation": "Relation sans attributs",
-            "untagged_relation_tooltip": "Sélectionnez un type d’entité décrivant ce qu’est cette relation.",
-            "many_deletions": "Vous êtes en train de supprimer {n} éléments : {p} nœuds, {l} lignes, {a} polygones et {r} relations. En êtes-vous sûr ? Ils seront supprimés de la carte que tout le monde voit sur openstreetmap.org.",
-            "tag_suggests_area": "Cet attribut {tag} suppose que cette ligne devrait être un polygone, or ce n'est pas le cas",
-            "deprecated_tags": "Attributs obsolètes : {tags}"
-        },
         "zoom": {
             "in": "Zoomer",
             "out": "Dézoomer"
         "cannot_zoom": "Impossible de zoomer plus en arrière dans ce mode.",
         "full_screen": "Afficher/cacher le plein écran",
         "QA": {
+            "improveOSM": {
+                "title": "Détections ImproveOSM",
+                "geometry_types": {
+                    "path": "chemins",
+                    "parking": "parking",
+                    "road": "routes",
+                    "both": "routes et parking"
+                },
+                "directions": {
+                    "east": "est",
+                    "north": "nord",
+                    "northeast": "nord-est",
+                    "northwest": "nord-ouest",
+                    "south": "sud",
+                    "southeast": "sud-est",
+                    "southwest": "sud-ouest",
+                    "west": "ouest"
+                },
+                "error_types": {
+                    "ow": {
+                        "title": "Sens unique manquant",
+                        "description": "Le long de cette section de {highway}, {percentage} % des {num_trips} trajets enregistrés vont de {from_node} à {to_node}. Il se pourrait qu'il manque un attribut de sens-unique."
+                    },
+                    "mr": {
+                        "title": "Géométrie manquante",
+                        "description": "{num_trips} trajets enregistrés dans cette région suggèrent qu'il y a des {geometry_type} ici.",
+                        "description_alt": "Des données d'une source tierce suggèrent qu'il y a des {geometry_type} non cartographiés ici."
+                    },
+                    "tr": {
+                        "title": "Interdiction de tourner manquante",
+                        "description": "{num_passed} des {num_trips} trajets enregistrés (vers {travel_direction}) ont tourné de {from_way} vers {to_way} au niveau de {junction}. Il pourrait y avoir une interdiction de tourner « {turn_restriction} » manquante."
+                    }
+                }
+            },
             "keepRight": {
                 "title": "Erreur KeepRight",
                 "detail_title": "Erreur",
                 "title": "Assurance qualité",
                 "intro": "*Les outils d'assurance qualité* (Q/A) peuvent trouver des attributs incorrects, des chemins déconnectés et d'autres problèmes dans OpenStreetMap que vous pouvez ensuite corriger. Pour visualiser les problèmes de qualité existants, cliquez sur le panneau {data} **Données de carte** pour activer une couche Q/A spécifique.",
                 "tools_h": "Outils",
-                "tools": "Les outils suivants sont actuellement supportés : [KeepRight](https://www.keepright.at/). Attendez-vous à ce qu'iD supporte [Osmose](https://osmose.openstreetmap.fr/), [ImproveOSM](https://improveosm.org/fr/) et bien plus d'outils Q/A dans le futur.",
+                "tools": "Les outils suivants sont actuellement supportés : [KeepRight](https://www.keepright.at/) et [ImproveOSM](https://improveosm.org/fr/). Attendez-vous à ce qu'iD supporte [Osmose](https://osmose.openstreetmap.fr/) et bien plus d'outils de Q/A dans le futur.",
                 "issues_h": "Gérer les problèmes",
                 "issues": "La gestion des problème de Q/A est similaire à celle des notes. Cliquez sur un marqueur pour afficher les détails du problème sur la barre latérale. Chaque outil a ses propres fonctionnalités, mais généralement vous pouvez commenter ou fermer un problème."
             },
                 }
             }
         },
+        "issues": {
+            "title": "Problèmes",
+            "key": "I",
+            "list_title": "Problèmes ({count})",
+            "errors": {
+                "list_title": "Erreurs ({count})"
+            },
+            "warnings": {
+                "list_title": "Avertissements ({count})"
+            },
+            "no_issues": {
+                "message": "Tout a l'air correct",
+                "info": "Les problèmes seront affichés ici pendant que vous modifiez la carte"
+            },
+            "almost_junction": {
+                "message": "{feature} est très proche mais n'est pas connecté à {feature2}",
+                "highway-highway": {
+                    "tip": "Les routes qui se croisent devraient partager un point de jonction"
+                }
+            },
+            "crossing_ways": {
+                "message": "{feature} croise {feature2}",
+                "building-building": {
+                    "tip": "Les bâtiments ne devraient pas se recouper, sauf sur des couches différentes."
+                },
+                "building-highway": {
+                    "tip": "Les routes qui croisent des bâtiments devraient utiliser des ponts, des tunnels, des couvertures ou des entrées."
+                },
+                "building-railway": {
+                    "tip": "Les voies de chemin de fer qui croisent des bâtiments devraient utiliser des ponts ou des tunnels."
+                },
+                "building-waterway": {
+                    "tip": "Les cours d'eau qui croisent des bâtiments devraient utiliser des tunnels ou d'autres couches."
+                },
+                "highway-highway": {
+                    "tip": "Les routes qui se croisent devraient utiliser des ponts, des tunnels ou des intersections."
+                },
+                "highway-railway": {
+                    "tip": "Les routes qui croisent des voies de chemin de fer devraient utiliser des ponts, des tunnels ou des passages à niveau."
+                },
+                "highway-waterway": {
+                    "tip": "Les routes qui croisent des cours d'eau devraient utiliser des ponts, des tunnels ou des gués."
+                },
+                "railway-railway": {
+                    "tip": "Les voies de chemin de fer qui se croisent devrait être connectées ou utiliser les ponts ou des tunnels."
+                },
+                "railway-waterway": {
+                    "tip": "Les voies de chemin de fer qui croisent des cours d'eau devraient utiliser des ponts ou des tunnels."
+                },
+                "waterway-waterway": {
+                    "tip": "Les cours d'eau qui se croisent devraient être connecter ou utiliser des tunnels."
+                },
+                "tunnel-tunnel": {
+                    "tip": "Les tunnels qui se croisent devraient utiliser des couches différentes."
+                },
+                "tunnel-tunnel_connectable": {
+                    "tip": "Les tunnels qui se croisent devraient être connectés ou utiliser des couches différentes."
+                },
+                "bridge-bridge": {
+                    "tip": "Les ponts qui se croisent devraient utiliser des couches différentes."
+                },
+                "bridge-bridge_connectable": {
+                    "tip": "Les ponts qui se croisent devraient être connectés ou utiliser des couches différentes."
+                },
+                "indoor-indoor": {
+                    "tip": "Les éléments intérieurs se croisant doivent utiliser des niveaux différents."
+                },
+                "indoor-indoor_connectable": {
+                    "tip": "Les éléments intérieurs se croisant devraient être connectés ou utiliser des niveaux différents"
+                }
+            },
+            "deprecated_tag": {
+                "single": {
+                    "message": "{feature} utilise l'attribut obsolète « {tag} »"
+                },
+                "combination": {
+                    "message": "{feature} utilise une combinaison d'attributs obsolète : {tags}"
+                },
+                "tip": "Certains attributs deviennent obsolètes avec le temps et devraient être remplacés."
+            },
+            "disconnected_way": {
+                "highway": {
+                    "message": "{highway} est déconnectée des autres routes et chemins",
+                    "tip": "Les routes devraient être connectées à d'autres routes ou à des entrées de bâtiments."
+                }
+            },
+            "generic_name": {
+                "message": "{feature} possède le nom générique « {name} »",
+                "tip": "Les noms devraient être le nom réel de l'élément sur le terrain."
+            },
+            "many_deletions": {
+                "points-lines-areas": {
+                    "message": "Suppression de {n} éléments : {p} points, {l} lignes et {a} polygones"
+                },
+                "points-lines-areas-relations": {
+                    "message": "Suppression de {n} éléments : {p} points, {l} lignes, {a} polygones et {r} relations"
+                },
+                "tip": "Seuls les éléments redondants ou inexistants devraient être supprimés."
+            },
+            "missing_tag": {
+                "any": {
+                    "message": "{feature} n'a pas d'attribut"
+                },
+                "descriptive": {
+                    "message": "{feature} n'a aucun attribut descriptif"
+                },
+                "specific": {
+                    "message": "{feature} n'a pas d'attribut « {tag} »"
+                },
+                "tip": "Les éléments doivent avoir un attribut qui définit ce qu'ils sont."
+            },
+            "old_multipolygon": {
+                "message": "{multipolygon} a des attributs mal placés",
+                "tip": "Les attributs des multipolygones devraient se trouver sur leur relation, pas sur leur ligne extérieure."
+            },
+            "tag_suggests_area": {
+                "message": "{feature} devrait être un polygone fermé d'après l'attribut « {tag} »",
+                "tip": "Les polygones doivent avoir deux points connectés."
+            },
+            "fix": {
+                "connect_almost_junction": {
+                    "annotation": "Éléments très proches et connectés."
+                },
+                "connect_crossing_features": {
+                    "annotation": "Éléments connectés et se croisant."
+                },
+                "connect_endpoints": {
+                    "title": "Connecter le bout",
+                    "annotation": "Bouts de la ligne connectés."
+                },
+                "connect_features": {
+                    "title": "Connecter les éléments"
+                },
+                "continue_from_start": {
+                    "title": "Continuer le dessin du début"
+                },
+                "continue_from_end": {
+                    "title": "Continuer le dessin de la fin"
+                },
+                "delete_feature": {
+                    "title": "Supprimer cet élément"
+                },
+                "move_tags": {
+                    "title": "Déplacer les attributs",
+                    "annotation": "Attributs déplacés."
+                },
+                "remove_deprecated_tag": {
+                    "annotation": "Ancien attribut supprimé."
+                },
+                "remove_deprecated_tag_combo": {
+                    "annotation": "Ancienne combinaison d'attributs supprimée."
+                },
+                "remove_generic_name": {
+                    "title": "Supprimer le nom",
+                    "annotation": "Nom générique supprimé."
+                },
+                "remove_tag": {
+                    "title": "Supprimer l'attribut",
+                    "annotation": "Attribut supprimé."
+                },
+                "reposition_features": {
+                    "title": "Repositionner l'élément"
+                },
+                "select_preset": {
+                    "title": "Choisir un type d'élément"
+                },
+                "tag_as_disconnected": {
+                    "title": "Indiquer qu'ils sont déconnectés",
+                    "annotation": "Éléments très proches cartographiés comme étant déconnectés."
+                },
+                "upgrade_tag": {
+                    "annotation": "Ancien attribut mis à jour."
+                },
+                "upgrade_tag_combo": {
+                    "annotation": "Ancienne combinaison d'attributs mise à jour."
+                }
+            }
+        },
         "intro": {
             "done": "fait",
             "ok": "OK",
                 "category-building": {
                     "name": "Types de bâtiments"
                 },
-                "category-golf": {
-                    "name": "Éléments de terrain de golf"
+                "category-golf-area": {
+                    "name": "Éléments de golfs"
+                },
+                "category-golf-line": {
+                    "name": "Éléments de golfs"
                 },
                 "category-landuse": {
                     "name": "Types d'occupation des sols"
                 "junction/ref_oneway": {
                     "label": "Identifiant de l'embranchement"
                 },
+                "junction_line": {
+                    "label": "Jonction routière",
+                    "options": {
+                        "circular": "Rond-point",
+                        "jughandle": "Jughandle (bretelle pour tourner)",
+                        "roundabout": "Rond-point"
+                    }
+                },
                 "kerb": {
                     "label": "Aménagement de trottoir, Abaissement (bateau)"
                 },
                         "underground": "Souterrain"
                     }
                 },
-                "passenger_information_display": {
-                    "label": "Affichage d'informations aux voyageurs"
-                },
                 "payment_multi": {
                     "label": "Types de paiement"
                 },
                     },
                     "placeholder": "Randonnée de montagne, randonnée alpine…"
                 },
+                "salt": {
+                    "label": "Salé"
+                },
                 "sanitary_dump_station": {
                     "label": "Station de vidange sanitaire"
                 },
                     },
                     "placeholder": "Oui, non, à emporter seulement…"
                 },
+                "tidal": {
+                    "label": "Sous l'influence de la marée"
+                },
                 "to": {
                     "label": "Vers"
                 },
                 },
                 "website": {
                     "label": "Site Web",
-                    "placeholder": "https://exemple.fr/"
+                    "placeholder": "https://exemple.com"
                 },
                 "wetland": {
                     "label": "Type"
                 },
                 "aerialway/cable_car": {
                     "name": "Téléphérique",
-                    "terms": "téléphérique, telepherique, téléférique, teleferique, télécabine, telecabine, remontée mécanique, nacelle, cabine, bulle, cable car"
+                    "terms": "téléphérique, telepherique, téléférique, teleferique, télécabine, telecabine, remontée mécanique, nacelle, cabine, bulle, cable car, remontées mécaniques,remontée mécaniques,tire-fesses,télé-siège,télésiège"
                 },
                 "aerialway/chair_lift": {
                     "name": "Télésiège",
-                    "terms": "télésiège, telesiege, remontée mécanique, remontee mecanique, chair lift"
+                    "terms": "télésiège, telesiege, remontée mécanique, remontee mecanique, chair lift, remontées mécaniques, remontée mécaniques"
                 },
                 "aerialway/drag_lift": {
                     "name": "Téléski",
                     "terms": "Terminal"
                 },
                 "allotments/plot": {
-                    "name": "Parcelle dans un jardin familial"
+                    "name": "Parcelle dans un jardin familial",
+                    "terms": "parcelle,jardin"
                 },
                 "amenity": {
                     "name": "Équipement"
                     "terms": "Café, bar, salon de thé, pub, brasserie, restaurant, cafe"
                 },
                 "amenity/car_pooling": {
-                    "name": "Covoiturage"
+                    "name": "Covoiturage",
+                    "terms": "covoiturage"
                 },
                 "amenity/car_rental": {
                     "name": "Location de voiture",
                     "name": "Horloge",
                     "terms": "Horloge publique, pendule, heure, cadran solaire, clock"
                 },
+                "amenity/clock/sundial": {
+                    "name": "Cadran solaire",
+                    "terms": "cadran, solaire, horloge, gnomon, ombre, heure"
+                },
                 "amenity/college": {
                     "name": "Enseignement supérieur (non universitaire) - institution ou campus",
                     "terms": "enseignement supérieur non universitaire, enseignement supérieur, non universitaire, école supérieure, grande école, établissement d'enseignement supérieur, post-bac, post bac, institut, haute école, cegep, cégep, etablissement d'enseignement superieur, enseignement superieur, ecole superieure, grande ecole, école, ecole, college, amenity college, université, university"
                     "name": "Kebab",
                     "terms": "kebab,grec,kébab,sandwich,kebap,doner,döner"
                 },
+                "amenity/fast_food/mexican": {
+                    "name": "Fast food mexicain",
+                    "terms": "fast-food,tacos,burritos"
+                },
                 "amenity/fast_food/pizza": {
                     "name": "Pizzeria",
                     "terms": "pizzeria,pizza"
                     "terms": "école maternelle, école enfantine, jardin d'enfants, école primaire, école, écoliers,  petite section, moyenne section, grande section, PS-MS-GS, kindergarten, crèche, halte-garderie"
                 },
                 "amenity/language_school": {
-                    "name": "École de langues"
+                    "name": "École de langues",
+                    "terms": "école de langues,langues étrangères"
                 },
                 "amenity/library": {
                     "name": "Bibliothèque",
                     "terms": "Bibliothèque, Médiathèque"
                 },
                 "amenity/love_hotel": {
-                    "name": "Love hôtel"
+                    "name": "Love hôtel",
+                    "terms": "love hôtel"
                 },
                 "amenity/marketplace": {
                     "name": "Marché",
                     "terms": "Marché, Place de marché"
                 },
                 "amenity/monastery": {
-                    "name": "Terrain de monastère"
+                    "name": "Terrain de monastère",
+                    "terms": "monastère,abbaye,basilique,cathédrale,chapelle,église"
                 },
                 "amenity/money_transfer": {
                     "name": "Transfert d'argent",
                     "name": "Pharmacie",
                     "terms": "pharmacie"
                 },
+                "amenity/photo_booth": {
+                    "name": "Photomaton",
+                    "terms": "photomaton,caméra,identité,cabine photographique"
+                },
                 "amenity/place_of_worship": {
                     "name": "Lieu de culte",
                     "terms": "Édifice religieux"
                     "terms": "église,abbaye,basilique,chapelle,cathédrale,chrétien,catholique,lieu de culte"
                 },
                 "amenity/place_of_worship/hindu": {
-                    "name": "Temple hindou"
+                    "name": "Temple hindou",
+                    "terms": "temple,religion,hindou,monastère"
                 },
                 "amenity/place_of_worship/jewish": {
                     "name": "Synagogue",
                     "terms": "mosquée,lieu de culte,musulman,islam"
                 },
                 "amenity/place_of_worship/shinto": {
-                    "name": "Shintoïste"
+                    "name": "Sanctuaire shintoïste",
+                    "terms": "temple,religion,shinto,monastère,sanctuaire"
                 },
                 "amenity/place_of_worship/sikh": {
-                    "name": "Temple Sikh"
+                    "name": "Temple Sikh",
+                    "terms": "temple,religion,sikh,monastère"
                 },
                 "amenity/place_of_worship/taoist": {
-                    "name": "Temple Taoïste"
+                    "name": "Temple Taoïste",
+                    "terms": "temple,religion,taoïste,monastère"
                 },
                 "amenity/planetarium": {
                     "name": "Planétarium",
                     "terms": "Abri"
                 },
                 "amenity/shelter/gazebo": {
-                    "name": "Gazébo"
+                    "name": "Gazébo",
+                    "terms": "gazébo"
                 },
                 "amenity/shelter/lean_to": {
                     "name": "Appentis",
                     "terms": "arrêt de bus,attente,abris"
                 },
                 "amenity/shower": {
-                    "name": "Douche"
+                    "name": "Douche",
+                    "terms": "douche"
                 },
                 "amenity/smoking_area": {
-                    "name": "Zone fumeur"
+                    "name": "Zone fumeur",
+                    "terms": "zone fumeur,cigarette,fumer"
                 },
                 "amenity/social_facility": {
                     "name": "Établissement de services sociaux",
                     "terms": "distributeur de boissons, distributeur à boissons, boissons, distributeur automatique de boissons, machine à boissons, machine à café, vente automatique de boissons, vente de boissons, vente boissons, eau, café, thé, soda, jus de fruit, vending machine drinks, drinks"
                 },
                 "amenity/vending_machine/electronics": {
-                    "name": "Distributeur de matériel éléctronique"
+                    "name": "Distributeur de matériel éléctronique",
+                    "terms": "matériel électronique,câbles,écouteurs,téléphone,tablette"
                 },
                 "amenity/vending_machine/elongated_coin": {
-                    "name": "Distributeur de pièces"
+                    "name": "Distributeur de pièces",
+                    "terms": "pièces,souvenir,commémoration"
                 },
                 "amenity/vending_machine/excrement_bags": {
                     "name": "Distributeur de sacs pour excréments d'animaux",
                     "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/stamps": {
-                    "name": "Distributeur de timbres"
+                    "name": "Distributeur de timbres",
+                    "terms": "timbres,courrier,enveloppe,lettre"
                 },
                 "amenity/vending_machine/sweets": {
                     "name": "Distributeur de snacks",
                     "terms": "Vétérinaire"
                 },
                 "amenity/waste/dog_excrement": {
-                    "name": "Bac à excrément de chien"
+                    "name": "Bac à excrément de chien",
+                    "terms": "bac à excrément de chien,poubelle,déchets,crottes,chien"
                 },
                 "amenity/waste_basket": {
                     "name": "Poubelle pour piétons",
                     "name": "Attraction touristique"
                 },
                 "attraction/amusement_ride": {
-                    "name": "Manège"
+                    "name": "Manège",
+                    "terms": "manège,attraction,parc d'attraction"
                 },
                 "attraction/animal": {
-                    "name": "Animal"
+                    "name": "Animal",
+                    "terms": "animal,animaux,cage,lion,tigre,ours,zoo,parc zoologique,parc animalier"
                 },
                 "attraction/big_wheel": {
-                    "name": "Grande Roue"
+                    "name": "Grande Roue",
+                    "terms": "grande roue,roue,attraction,parc d'attraction"
                 },
                 "attraction/bumper_car": {
-                    "name": "Auto tamponeuse"
+                    "name": "Auto tamponeuse",
+                    "terms": "auto tamponneuse,attraction,parc d'attraction"
                 },
                 "attraction/bungee_jumping": {
-                    "name": "Saut à l'élastique"
+                    "name": "Saut à l'élastique",
+                    "terms": "saut à l'élastique,attraction,parc d'attraction"
                 },
                 "attraction/carousel": {
                     "name": "Carrousel",
-                    "terms": "Carrousel, Manège"
+                    "terms": "Carrousel, Manège,attraction,parc d'attraction"
                 },
                 "attraction/dark_ride": {
-                    "name": "Parcours scénique"
+                    "name": "Parcours scénique",
+                    "terms": "parcours scénique,train fantôme,attraction,parc d'attraction"
                 },
                 "attraction/drop_tower": {
-                    "name": "Tour de chute"
+                    "name": "Tour de chute",
+                    "terms": "tour de chute,attraction,parc d'attraction"
                 },
                 "attraction/maze": {
                     "name": "Labyrinthe",
-                    "terms": "Labyrinthe"
+                    "terms": "Labyrinthe,attraction,parc d'attraction"
                 },
                 "attraction/pirate_ship": {
-                    "name": "Bateau pirate"
+                    "name": "Bateau pirate",
+                    "terms": "bateau pirate,attraction,parc d'attraction"
                 },
                 "attraction/river_rafting": {
-                    "name": "Rafting"
+                    "name": "Rafting",
+                    "terms": "rafting,bateau,canoë,kayak"
                 },
                 "attraction/roller_coaster": {
-                    "name": "Montagnes Russes"
+                    "name": "Montagnes russes",
+                    "terms": "montagnes russes,attraction,parc d'attraction"
                 },
                 "attraction/summer_toboggan": {
                     "name": "Luge d'été",
                     "terms": "luge d'été,toboggan d'été"
                 },
                 "attraction/train": {
-                    "name": "Train touristique"
+                    "name": "Train touristique",
+                    "terms": "train touristique,petit train"
                 },
                 "attraction/water_slide": {
-                    "name": "Toboggan Aquatique"
+                    "name": "Toboggan aquatique",
+                    "terms": "toboggan aquatique"
                 },
                 "barrier": {
                     "name": "Barrière physique",
                     "terms": "grange, hangar agricole, bâtiment agricole, stockage, grenier, abri, remise, étable, ferme, barn"
                 },
                 "building/boathouse": {
-                    "name": "Hangar à bateaux"
+                    "name": "Hangar à bateaux",
+                    "terms": "hangar à bateaux,bateaux"
                 },
                 "building/bungalow": {
-                    "name": "Bungalow"
+                    "name": "Bungalow",
+                    "terms": "bungalow"
                 },
                 "building/bunker": {
                     "name": "Bunker"
                     "terms": "Église, église, eglise, bâtiment religieux, lieu de culte, édifice religieux,\néglise catholique, église primatiale, basilique, église basilique, collégiale, église collégiale, église décanale, paroisses, église paroissiale, abbatiale, église abbatiale, église priorale,\néglise orthodoxe, métropole, catholicon, katholikon, kyriakon,\nchristianisme, catholicisme, orthodoxie, chrétienne, chrétiens, catholique, orthodoxe, prêtre, religion, clergé, prière, messe, church"
                 },
                 "building/civic": {
-                    "name": "Équipement public"
+                    "name": "Équipement public",
+                    "terms": "équipement public,bâtiment"
                 },
                 "building/college": {
                     "name": "Enseignement supérieur (non universitaire) - bâtiment",
                     "name": "Entrée/Sortie"
                 },
                 "building/farm": {
-                    "name": "Corps de ferme"
+                    "name": "Corps de ferme",
+                    "terms": "corps de ferme,ferme"
                 },
                 "building/farm_auxiliary": {
-                    "name": "Bâtiment de ferme"
+                    "name": "Bâtiment de ferme",
+                    "terms": "bâtiment de ferme,ferme"
                 },
                 "building/garage": {
                     "name": "Garage privé",
                     "terms": "garages, bloc de garages, boxes, box, hangar, parcages, parkings, voitures, parc de stationnement couvert"
                 },
                 "building/grandstand": {
-                    "name": "Tribune"
+                    "name": "Tribune",
+                    "terms": "tribune,gradins,stands,bancs"
                 },
                 "building/greenhouse": {
                     "name": "Serre",
                     "terms": "école maternelle, école enfantine, jardin d'enfants, école primaire, école, écoliers,  petite section, moyenne section, grande section, PS-MS-GS, kindergarten, crèche, halte-garderie"
                 },
                 "building/mosque": {
-                    "name": "Mosquée - Bâtiment"
+                    "name": "Mosquée - Bâtiment",
+                    "terms": "mosquée,bâtiment,religion"
                 },
                 "building/pavilion": {
                     "name": "Pavillon",
                     "terms": "Voûte, Toit ouvert, Marché couvert"
                 },
                 "building/ruins": {
-                    "name": "Bâtiment en ruine"
+                    "name": "Bâtiment en ruine",
+                    "terms": "bâtiment en ruine,ruine"
                 },
                 "building/school": {
                     "name": "Bâtiment scolaire - élémentaire ou secondaire",
                     "terms": "maison jumelée, maison jumelle, maison mitoyenne, maison avec mur mitoyen, pavillon mitoyen, maisons jumelées, maisons jumelles, maisons mitoyennes, maisons avec mur mitoyen, pavillons mitoyens, building semidetached house, semidetached house, semi detached house"
                 },
                 "building/service": {
-                    "name": "Bâtiment de services"
+                    "name": "Bâtiment de services",
+                    "terms": "bâtiment de services,batiment de services,services"
                 },
                 "building/shed": {
                     "name": "Cabanon",
                     "terms": "Mobil home statique"
                 },
                 "building/temple": {
-                    "name": "Temple"
+                    "name": "Temple",
+                    "terms": "temple,religion"
                 },
                 "building/terrace": {
                     "name": "Rangée de maisons",
                     "name": "Gare ferroviaire"
                 },
                 "building/transportation": {
-                    "name": "Bâtiment pour transports publics"
+                    "name": "Bâtiment pour transports publics",
+                    "terms": "bâtiment pour transports publics,transports publics"
                 },
                 "building/university": {
                     "name": "Université - bâtiment universitaire",
                     "terms": "Confisier, confiseur, fabricant de bonbons"
                 },
                 "craft/distillery": {
-                    "name": "Distillerie"
+                    "name": "Distillerie",
+                    "terms": "distillerie,alcool,boisson,bière,bourbon,brandy,gin,liqueur"
                 },
                 "craft/dressmaker": {
                     "name": "Couturier",
                 },
                 "emergency/fire_hydrant": {
                     "name": "Borne incendie",
-                    "terms": "Borne incendie, borne-fontaine, borne fontaine, bouche d'incendie"
+                    "terms": "Borne incendie, borne-fontaine, borne fontaine, bouche d'incendie, poteau incendie, hydrant, fire hydrant"
                 },
                 "emergency/first_aid_kit": {
                     "name": "Kit de premiers secours",
                     "terms": "bandage, pansement, premiers secours, kit médical, kit d'urgence, trousse de secours, trousse d'urgence"
                 },
                 "emergency/life_ring": {
-                    "name": "Bouée de Sauvetage"
+                    "name": "Bouée de Sauvetage",
+                    "terms": "bouée de sauvetage"
                 },
                 "emergency/lifeguard": {
                     "name": "sauveteur",
                     "terms": "raid aérien, tempête, tornade, avertissement"
                 },
                 "emergency/water_tank": {
-                    "name": "Réservoir d'eau de secours"
+                    "name": "Réservoir d'eau de secours",
+                    "terms": "réservoir d'eau de secours,secours,urgence,reservoir"
                 },
                 "emergency/yes": {
                     "name": "Accessible aux services d'urgences"
                     "name": "Bunker (golf)",
                     "terms": "Bunker, Fosse de sable, bunker de fairway"
                 },
+                "golf/cartpath": {
+                    "name": "chemin pour charriot de golf",
+                    "terms": "charriot,golf,chemin,parcours de golf,terrain de golf"
+                },
+                "golf/cartpath_service": {
+                    "name": "voie de service pour charriot de golf",
+                    "terms": "charriot,golf,chemin,parcours de golf,terrain de golf"
+                },
+                "golf/driving_range": {
+                    "name": "Terrain de pratique",
+                    "terms": "pratique,swing,golf,parcours de golf,terrain de golf,practice"
+                },
                 "golf/fairway": {
                     "name": "Fairway",
                     "terms": "Fairway"
                     "name": "Trou de golf",
                     "terms": "Trou de golf"
                 },
-                "golf/lateral_water_hazard_area": {
+                "golf/lateral_water_hazard": {
                     "name": "Obstacle d'eau latéral",
-                    "terms": "zone d'eau latéral"
+                    "terms": "terrain de golf,obstacle d'eau,zone d'eau"
                 },
-                "golf/lateral_water_hazard_line": {
-                    "name": "Obstacle d'eau latéral",
-                    "terms": "ligne d'eau latéral"
+                "golf/path": {
+                    "name": "Chemin de terrain de golf",
+                    "terms": "terrain de golf,parcours de golf,chemin"
                 },
                 "golf/rough": {
                     "name": "Hautes herbes (golf)",
                     "name": "Départ",
                     "terms": "Tertre de départ"
                 },
-                "golf/water_hazard_area": {
+                "golf/water_hazard": {
                     "name": "Obstacle d'eau",
-                    "terms": "zone d'eau"
-                },
-                "golf/water_hazard_line": {
-                    "name": "Obstacle d'eau",
-                    "terms": "ligne d'eau"
+                    "terms": "terrain de golf,obstacle d'eau,zone d'eau"
                 },
                 "healthcare": {
                     "name": "Établissement de soins de santé",
                     "terms": "Piste cavalière, Sentier à chevaux, Sentier pour chevaux"
                 },
                 "highway/bus_guideway": {
-                    "name": "Voie de bus guidés"
+                    "name": "Voie de bus guidés",
+                    "terms": "voie de bus guidés"
                 },
                 "highway/bus_stop": {
                     "name": "Arrêt de bus"
                     "terms": "Zone de rencontre"
                 },
                 "highway/milestone": {
-                    "name": "Borne kilométrique"
+                    "name": "Borne kilométrique",
+                    "terms": "borne kilométrique"
                 },
                 "highway/mini_roundabout": {
                     "name": "Mini carrefour giratoire",
                     "terms": "Jonction routière, Jonction, Carrefour, Intersection routière,  Intersection"
                 },
                 "landuse": {
-                    "name": "Utilisation du sol",
-                    "terms": "Type d'utilisation du sol, terrain"
+                    "name": "Utilisation du sol"
                 },
                 "landuse/allotments": {
                     "name": "Jardins familiaux",
                     "terms": "exploitation forestière,forêt,arbres,rondins"
                 },
                 "landuse/garages": {
-                    "name": "Terrain pour garages"
+                    "name": "Terrain pour garages",
+                    "terms": "terrain pour garages,garages"
                 },
                 "landuse/grass": {
                     "name": "Herbe",
                     "terms": "Terrain vierge"
                 },
                 "landuse/greenhouse_horticulture": {
-                    "name": "Serre d'horticulture"
+                    "name": "Serre d'horticulture",
+                    "terms": "serre d'horticulture,fleurs,horticulture"
                 },
                 "landuse/harbour": {
                     "name": "Port / Havre",
                     "terms": "Vignes"
                 },
                 "leisure": {
-                    "name": "Loisirs",
-                    "terms": "Loisir"
+                    "name": "Loisirs"
                 },
                 "leisure/adult_gaming_centre": {
                     "name": "Jeux pour adultes",
                     "terms": "Jeux pour adultes"
                 },
                 "leisure/amusement_arcade": {
-                    "name": "Salle de jeux"
+                    "name": "Salle de jeux",
+                    "terms": "salle de jeux,arcade,jeux vidéos,simulateurs de course,pinball"
                 },
                 "leisure/bandstand": {
-                    "name": "Kiosque à musique"
+                    "name": "Kiosque à musique",
+                    "terms": "kioske à musique,kiosque à musique"
                 },
                 "leisure/beach_resort": {
                     "name": "Station balnéaire",
                     "terms": "Observatoire d'oiseaux"
                 },
                 "leisure/bleachers": {
-                    "name": "Gradins"
+                    "name": "Gradins",
+                    "terms": "gradins,bancs,sport,stand"
                 },
                 "leisure/bowling_alley": {
                     "name": "Bowling",
                     "terms": "piste de danse,salle de bal,dancing"
                 },
                 "leisure/dancing_school": {
-                    "name": "École de dance"
+                    "name": "École de dance",
+                    "terms": "école de dance,swing,tango,valse,dance"
                 },
                 "leisure/dog_park": {
                     "name": "Parc canin",
                     "terms": "Barres parallèles"
                 },
                 "leisure/fitness_station/push-up": {
-                    "name": "Équipement pour pompes inclinées en extérieur"
+                    "name": "Équipement pour pompes inclinées en extérieur",
+                    "terms": "pompes inclinées,équipement,fitness,exercice"
                 },
                 "leisure/fitness_station/rings": {
                     "name": "Anneaux de gymnastique ",
-                    "terms": "Anneaux de gymnastique"
+                    "terms": "Anneaux de gymnastique,gymnastique"
                 },
                 "leisure/fitness_station/sign": {
                     "name": "Panneau d'instruction d'un exercice",
-                    "terms": "Panneau d'instruction d'un exercice"
+                    "terms": "Panneau d'instruction d'un exercice,exercice,instructions,fitness"
                 },
                 "leisure/fitness_station/sit-up": {
-                    "name": "Équipement pour abdominaux en extérieur"
+                    "name": "Équipement pour abdominaux en extérieur",
+                    "terms": "abdos,exercices,équipement sportif,abdominaux,fitness"
                 },
                 "leisure/fitness_station/stairs": {
                     "name": "Escalier d'exercices",
                     "terms": "Zone protégée"
                 },
                 "leisure/outdoor_seating": {
-                    "name": "Aire des places en terrasse"
+                    "name": "Aire des places en terrasse",
+                    "terms": "places en terrase,terrasse,beer garden,biergarten,restaurant,bar"
                 },
                 "leisure/park": {
                     "name": "Parc",
                     "name": "Table de pique-nique",
                     "terms": "Table de pique-nique"
                 },
+                "leisure/picnic_table/chess": {
+                    "name": "Échiquier",
+                    "terms": "table d'échecs,échecs,échiquier,bancs,table de jeu,jeu"
+                },
                 "leisure/pitch": {
                     "name": "Terrain de sport",
                     "terms": "Terrain de sport"
                     "name": "Centre sportif",
                     "terms": "complexe sportif,salle de sport"
                 },
+                "leisure/sports_centre/climbing": {
+                    "name": "Salle d'escalade",
+                    "terms": "escalade,salle,mur,prises,block,bloque"
+                },
                 "leisure/sports_centre/swimming": {
                     "name": "Centre aquatique",
                     "terms": "Piscine,Stade nautique,Stade aquatique"
                     "terms": "Ligne"
                 },
                 "man_made": {
-                    "name": "Édifices",
-                    "terms": "Créé par l'homme"
+                    "name": "Édifices"
                 },
                 "man_made/adit": {
                     "name": "Entrée de mine",
                     "terms": "Cheminée"
                 },
                 "man_made/clearcut": {
-                    "name": "Coupe rase forestière"
+                    "name": "Coupe rase forestière",
+                    "terms": "coupe rase forestière,bucheron,bois,arbres coupés,forêt"
                 },
                 "man_made/crane": {
                     "name": "Grue",
                     "name": "Tour",
                     "terms": "Tour"
                 },
+                "man_made/tower/bell_tower": {
+                    "name": "Clocher",
+                    "terms": "clocher,tour,église,beffroi"
+                },
                 "man_made/tower/communication": {
                     "name": "Tour de communication",
                     "terms": "tour de télécommunication,diffusion,antenne,téléphone portable,téléphone cellulaire,gsm,tour,radio,mât de transmission,pylône de transmission"
                 },
+                "man_made/tower/minaret": {
+                    "name": "Minaret",
+                    "terms": "minaret,islam,mosquée,muezzin,tour"
+                },
                 "man_made/tower/observation": {
                     "name": "Tour d'observation",
                     "terms": "tour d'observation,mirador"
                     "terms": "Usine d'eau potable"
                 },
                 "man_made/watermill": {
-                    "name": "Moulin à eau"
+                    "name": "Moulin à eau",
+                    "terms": "moulin à eau,eau,roue"
                 },
                 "man_made/windmill": {
-                    "name": "Moulin à vent"
+                    "name": "Moulin à vent",
+                    "terms": "moulin à vent,vent"
                 },
                 "man_made/works": {
                     "name": "Usine",
                     "terms": "Usine"
                 },
                 "manhole": {
-                    "name": "Bouche d'égout"
+                    "name": "Bouche d'égout",
+                    "terms": "bouche d'égout,égout,télécommunication,plaque"
                 },
                 "manhole/drain": {
-                    "name": "Collecteur d'eaux pluviales"
+                    "name": "Collecteur d'eaux pluviales",
+                    "terms": "collecteur d'eaux pluviales,pluies,égouts,tempête,débordement"
                 },
                 "manhole/telecom": {
                     "name": "Puits de télécommunication",
                     "terms": "couvert,puits,trou,télécom,téléphone"
                 },
                 "natural": {
-                    "name": "Nature",
-                    "terms": "Nature"
+                    "name": "Nature"
                 },
                 "natural/bare_rock": {
                     "name": "Zone Rocheuse",
                     "name": "Eau",
                     "terms": "Eau"
                 },
+                "natural/water/basin": {
+                    "name": "Bassin",
+                    "terms": "bassin,eau,plan d'eau"
+                },
                 "natural/water/canal": {
                     "name": "Canal",
                     "terms": "canal"
                     "name": "Transformateur",
                     "terms": "Transformateur"
                 },
-                "public_transport/linear_platform": {
-                    "name": "Quai de transport en commun"
-                },
-                "public_transport/linear_platform_aerialway": {
-                    "name": "Quai pour remontée mécanique"
-                },
-                "public_transport/linear_platform_bus": {
-                    "name": "Arrêt de bus"
-                },
-                "public_transport/linear_platform_ferry": {
-                    "name": "Quai pour ferry"
-                },
-                "public_transport/linear_platform_light_rail": {
-                    "name": "Station de métro léger"
-                },
-                "public_transport/linear_platform_monorail": {
-                    "name": "Quai de monorail"
-                },
-                "public_transport/linear_platform_subway": {
-                    "name": "Quai de métro"
-                },
-                "public_transport/linear_platform_train": {
-                    "name": "Quai de gare ferroviaire"
-                },
-                "public_transport/linear_platform_tram": {
-                    "name": "Quai pour tramway"
-                },
-                "public_transport/linear_platform_trolleybus": {
-                    "name": "Quai pour trolleys"
-                },
                 "public_transport/platform": {
-                    "name": "Quai de transport en commun"
+                    "name": "Quai de transport en commun",
+                    "terms": "gare de transports en commun,station de transports en commun,quai de transports en commun,gare,stop,arrêt,station,attente voyageur,transports en commun"
                 },
                 "public_transport/platform_aerialway": {
-                    "name": "Quai pour remontée mécanique"
+                    "name": "Quai pour remontée mécanique",
+                    "terms": "gare de remontées mécaniques,station de remontées mécaniques,quai de remontées mécaniques,gare,stop,arrêt,station,attente voyageur,remontées mécaniques,remontée mécaniques,tire-fesses,télé-siège,télésiège,téléphérique,télécabine"
                 },
                 "public_transport/platform_bus": {
-                    "name": "Arrêt de bus"
+                    "name": "Arrêt de bus",
+                    "terms": "gare de bus,station de bus,quai de bus,gare,stop,arrêt,station,attente voyageur,bus,car"
                 },
                 "public_transport/platform_ferry": {
-                    "name": "Quai pour ferry"
+                    "name": "Quai pour ferry",
+                    "terms": "gare de ferry,station de ferry,quai de ferry,gare,stop,arrêt,station,attente voyageur,ferry,bateau"
                 },
                 "public_transport/platform_light_rail": {
-                    "name": "Station de métro léger"
+                    "name": "Station de métro léger",
+                    "terms": "gare de métro léger,station de métro léger,quai de métro léger,gare,stop,arrêt,station,attente voyageur,métro léger"
                 },
                 "public_transport/platform_monorail": {
-                    "name": "Quai de monorail"
+                    "name": "Quai de monorail",
+                    "terms": "gare de monorail,station de monorail,quai de monorail,gare,stop,arrêt,station,attente voyageur,monorail"
                 },
                 "public_transport/platform_subway": {
-                    "name": "Quai de métro"
+                    "name": "Quai de métro",
+                    "terms": "gare de métro,station de métro,quai de métro,gare,stop,arrêt,station,attente voyageur,métro"
                 },
                 "public_transport/platform_train": {
-                    "name": "Quai de gare ferroviaire"
+                    "name": "Quai de gare ferroviaire",
+                    "terms": "gare ferroviaire,station ferroviaire,quai ferroviaire,quai de train,gare,stop,arrêt,station,attente voyageur,train"
                 },
                 "public_transport/platform_tram": {
-                    "name": "Quai pour tramway"
+                    "name": "Quai pour tramway",
+                    "terms": "gare de tramway,station de tramway,quai de tramway,gare,stop,arrêt,station,attente voyageur,tramway"
                 },
                 "public_transport/platform_trolleybus": {
-                    "name": "Quai pour trolleys"
+                    "name": "Quai pour trolleys",
+                    "terms": "gare de trolleys,station de trolleys,quai de trolley,gare,stop,arrêt,station,attente voyageur,trolleys"
                 },
                 "public_transport/station": {
-                    "name": "Station"
+                    "name": "Station",
+                    "terms": "gare,stop,arrêt,station"
                 },
                 "public_transport/station_aerialway": {
-                    "name": "Gare de remontée mécanique"
+                    "name": "Gare de remontée mécanique",
+                    "terms": "gare de remontées mécaniques,station de remontées mécaniques,gare,stop,arrêt,station,remontées mécaniques,remontée mécanique,tire-fesse,télésiège,télé-siège,téléphérique"
                 },
                 "public_transport/station_bus": {
-                    "name": "Gare routière"
+                    "name": "Gare routière",
+                    "terms": "gare routière,station routière,gare,stop,arrêt,station,bus"
                 },
                 "public_transport/station_ferry": {
-                    "name": "Terminal ferry"
+                    "name": "Terminal ferry",
+                    "terms": "terminal de ferry,gare de ferry,station de ferry,gare,stop,arrêt,station,bateau,ferry"
                 },
                 "public_transport/station_light_rail": {
-                    "name": "Station de tramway léger"
+                    "name": "Station de tramway léger",
+                    "terms": "gare de tramway,station de tramway,gare,stop,arrêt,station,train-tram,tramway léger"
                 },
                 "public_transport/station_monorail": {
-                    "name": "Station de monorail"
+                    "name": "Station de monorail",
+                    "terms": "gare de monorail,station de monorail,gare,stop,arrêt,station,monorail"
                 },
                 "public_transport/station_subway": {
-                    "name": "Station de métro"
+                    "name": "Station de métro",
+                    "terms": "gare de métro,station de métro,gare,stop,arrêt,station,métro"
                 },
                 "public_transport/station_train": {
-                    "name": "Gare ferroviaire"
+                    "name": "Gare ferroviaire",
+                    "terms": "gare ferroviaire,station ferroviaire,gare,stop,arrêt,station,train"
                 },
                 "public_transport/station_train_halt": {
-                    "name": "Gare ferroviaire (arrêt à la demande)"
+                    "name": "Gare ferroviaire (arrêt à la demande)",
+                    "terms": "gare ferroviaire,station ferorviaire,gare,stop,arrêt,station,train"
                 },
                 "public_transport/station_tram": {
-                    "name": "Station de tramway"
+                    "name": "Station de tramway",
+                    "terms": "gare de tramway,station de tramway,gare,stop,arrêt,station,train"
                 },
                 "public_transport/station_trolleybus": {
-                    "name": "Gare de trolleys"
+                    "name": "Gare de trolleys",
+                    "terms": "gare de trolleys,station de trolleys,gare,stop,arrêt,station,trolley"
                 },
                 "public_transport/stop_area": {
-                    "name": "Zone d'arrêt"
+                    "name": "Zone d'arrêt",
+                    "terms": "zone d'arrêt,arrêt,stop"
                 },
                 "public_transport/stop_position": {
-                    "name": "Emplacement d'arrêt"
+                    "name": "Emplacement d'arrêt",
+                    "terms": "emplacement d'arrêt,arrêt,stop"
                 },
                 "public_transport/stop_position_aerialway": {
-                    "name": "Emplacement où s'arrête la remontée mécanique"
+                    "name": "Emplacement où s'arrête la remontée mécanique",
+                    "terms": "emplacement où s'arrête la remontée mécanique,arrêt de remontée mécanique,stop de remontée mécanique,remontée mécanique,remontées mécaniques"
                 },
                 "public_transport/stop_position_bus": {
-                    "name": "Emplacement où s'arrête le bus"
+                    "name": "Emplacement où s'arrête le bus",
+                    "terms": "emplacement où s'arrête le bus,arrêt de bus,stop de bus,bus,car"
                 },
                 "public_transport/stop_position_ferry": {
-                    "name": "Emplacement où s'arrête le ferry"
+                    "name": "Emplacement où s'arrête le ferry",
+                    "terms": "emplacement où s'arrête le ferry,arrêt de ferry,stop de ferry,ferry,bateau"
                 },
                 "public_transport/stop_position_light_rail": {
-                    "name": "Emplacement où s'arrête le train-tram"
+                    "name": "Emplacement où s'arrête le train-tram",
+                    "terms": "emplacement où s'arrête le train-tram,arrêt de train-tram,stop de train-tram,train-tram,tramway léger"
                 },
                 "public_transport/stop_position_monorail": {
-                    "name": "Emplacement où s'arrête le monorail"
+                    "name": "Emplacement où s'arrête le monorail",
+                    "terms": "emplacement où s'arrête le monorail,arrêt de monorail,stop de monorail,monorail"
                 },
                 "public_transport/stop_position_subway": {
-                    "name": "Emplacement où s'arrête le métro"
+                    "name": "Emplacement où s'arrête le métro",
+                    "terms": "emplacement où s'arrête le métro,arrêt de métro,stop de métro,métro"
                 },
                 "public_transport/stop_position_train": {
-                    "name": "Emplacement où s'arrête le train"
+                    "name": "Emplacement où s'arrête le train",
+                    "terms": "emplacement où s'arrête le train,arrêt de train,stop de train,train"
                 },
                 "public_transport/stop_position_tram": {
-                    "name": "Emplacement où s'arrête le tramway"
+                    "name": "Emplacement où s'arrête le tramway",
+                    "terms": "emplacement où s'arrête le tramway,arrêt de tramway,stop de tramway,tramway"
                 },
                 "public_transport/stop_position_trolleybus": {
-                    "name": "Emplacement où s'arrête le trolley"
+                    "name": "Emplacement où s'arrête le trolley",
+                    "terms": "emplacement où s'arrête le trolley,arrêt de trolley,stop de trolley,trolley"
                 },
                 "railway": {
                     "name": "Ferroviaire"
                     "terms": "Voie ferrée abandonnée"
                 },
                 "railway/buffer_stop": {
-                    "name": "Butoir"
+                    "name": "Butoir",
+                    "terms": "butoir,stop,arrêt"
                 },
                 "railway/crossing": {
                     "name": "Passage à niveau (piétons)",
                     "terms": "Passage à niveau (chemin)"
                 },
                 "railway/derail": {
-                    "name": "Dérailleur Ferroviaire"
+                    "name": "Dérailleur Ferroviaire",
+                    "terms": "dérailleur ferroviaire"
                 },
                 "railway/disused": {
                     "name": "Voie ferrée désaffectée",
                     "terms": "Métro léger"
                 },
                 "railway/milestone": {
-                    "name": "Borne kilométrique ferroviaire"
+                    "name": "Borne kilométrique ferroviaire",
+                    "terms": "borne kilométrique ferroviaire"
                 },
                 "railway/miniature": {
-                    "name": "Train miniature à passagers"
+                    "name": "Train miniature à passagers",
+                    "terms": "train miniature,mini train"
                 },
                 "railway/monorail": {
                     "name": "Monorail",
                     "terms": "Rail"
                 },
                 "railway/signal": {
-                    "name": "Feux tricolores Ferroviaire"
+                    "name": "Feux tricolores ferroviaires",
+                    "terms": "feux tricolores ferroviaires,signalisation ferroviaire"
                 },
                 "railway/station": {
                     "name": "Gare ferroviaire"
                     "terms": "Entrée de métro, Bouche de métro"
                 },
                 "railway/switch": {
-                    "name": "Commutateur Ferroviaire"
+                    "name": "Commutateur Ferroviaire",
+                    "terms": "commutateur ferroviaire"
                 },
                 "railway/train_wash": {
-                    "name": "Lavage de Train"
+                    "name": "Lavage de Train",
+                    "terms": "lavage de train,nettoyage de train"
                 },
                 "railway/tram": {
                     "name": "Tramway",
                     "terms": "Magasin,Boutique"
                 },
                 "shop/agrarian": {
-                    "name": "Magasin de produits de la ferme"
+                    "name": "Magasin d'agriculture",
+                    "terms": "magasin de produit de la ferme,machines,pesticides,graines,engins agricoles"
                 },
                 "shop/alcohol": {
                     "name": "Magasin de vente d'alcool",
                     "terms": "Quincaillerie"
                 },
                 "shop/health_food": {
-                    "name": "Magasin d'alimentation de santé"
+                    "name": "Magasin d'alimentation de santé",
+                    "terms": "magasin d'alimentation de santé,vitamines"
                 },
                 "shop/hearing_aids": {
                     "name": "Audioprothésiste",
                     "terms": "Armurerie"
                 },
                 "shop/wholesale": {
-                    "name": "Commerce de gros"
+                    "name": "Commerce de gros",
+                    "terms": "commerce de gros,gros,lot,entrepôt"
                 },
                 "shop/window_blind": {
                     "name": "Magasin de vente de stores",
                     "terms": "Caviste,  Bar à vins"
                 },
                 "tourism": {
-                    "name": "Tourisme",
-                    "terms": "Tourisme"
+                    "name": "Tourisme"
                 },
                 "tourism/alpine_hut": {
                     "name": "Refuge de montagne",
                     "terms": "Parc à thème, parc d'attractions"
                 },
                 "tourism/trail_riding_station": {
-                    "name": "Station équestre"
+                    "name": "Station équestre",
+                    "terms": "station équestre,station de randonnée équestre,randonnée équestre"
                 },
                 "tourism/viewpoint": {
                     "name": "Point de vue",
                     "terms": "Station-service nautique, nautisme, bateaux, essence"
                 },
                 "waterway/milestone": {
-                    "name": "Borne kilométrique fluviale"
+                    "name": "Borne kilométrique fluviale",
+                    "terms": "borne kilométrique fluviale"
                 },
                 "waterway/river": {
                     "name": "Rivière",
index ecefa4af58fcb97d1a5f400faeeceddf275367e7..99c301d8a09dda589ebe663efca47b2ce5684112 100644 (file)
             },
             "add_point": {
                 "title": "Punto",
-                "description": "Engadir restaurantes, monumentos, caixas do correo ou outros puntos ao mapa.",
+                "description": "Engadir restaurantes, monumentos, caixas do correo ou outros puntos ó mapa.",
                 "tail": "Fai clic no mapa pra engadires un punto."
             },
             "add_note": {
                 "title": "Nota",
-                "description": "Atopaches un erro? Faillo saber a outros mapeadores.",
+                "description": "Atopaches un erro? Faillo saber a outros cartógrafos.",
                 "tail": "Fai clic no mapa para engadir unha nota."
             },
             "browse": {
                 "relation": "Isto non pode ser desconectado porque liga os membros dunha relación."
             },
             "merge": {
-                "title": "Unir.",
-                "description": "Unir estes elementos.",
+                "title": "Combinar",
+                "description": "Combinar estes elementos.",
                 "key": "C",
-                "annotation": "Unidos {n} elementos.",
-                "not_eligible": "Estes elementos non se poden unir.",
-                "not_adjacent": "Estes elementos non se poden unir porque os seus extremos non están ligados.",
-                "restriction": "Estes elementos non se poden unir porque se danaría a relación \"{relation}\".",
+                "annotation": "Combinados {n} elementos.",
+                "not_eligible": "Estes elementos non se poden combinar.",
+                "not_adjacent": "Estes elementos non se poden combinar porque os seus extremos non están ligados.",
+                "restriction": "Estes elementos non se poden combinar porque se danaría a relación \"{relation}\".",
                 "relation": "Estes elementos non se poden combinar porque teñen roles de relación contraditorios.",
-                "incomplete_relation": "Estes elementos non se poden unir porque cando menos un deles non se baixou de xeito completo.",
-                "conflicting_tags": "Estes elementos non se poden unir porque algunhas das súas etiquetas teñen valores contraditorios."
+                "incomplete_relation": "Estes elementos non se poden combinar porque cando menos un deles non se baixou de xeito completo.",
+                "conflicting_tags": "Estes elementos non se poden combinar porque algunhas das súas etiquetas teñen valores contraditorios.",
+                "paths_intersect": "Estes elementos non se poden combinar porque o camiño resultante se cruzaría consigo mesmo."
             },
             "move": {
                 "title": "Mover",
             },
             "reflect": {
                 "title": {
-                    "long": "Reflectir ao longo",
-                    "short": "Reflectir ao curto"
+                    "long": "Reflectir no eixo longo",
+                    "short": "Reflectir no eixo curto"
                 },
                 "description": {
                     "long": {
                 },
                 "annotation": {
                     "long": {
-                        "single": "Reflectido un elemento ao través do eixo lonxitudinal.",
+                        "single": "Reflectido un elemento a través do seu eixo longo.",
                         "multiple": "Reflectidos múltiples elementos a través dos eixos lonxitudinais."
                     },
                     "short": {
-                        "single": "Reflectido o elemento ao través do eixo curto.",
+                        "single": "Reflectido o elemento a través do seu eixo curto.",
                         "multiple": "Reflectidos múltiples elementos a través dos seus eixos curtos."
                     }
                 },
                 }
             },
             "rotate": {
-                "title": "Rotar.",
+                "title": "Rotar",
                 "description": {
                     "single": "Rotar este elemento ao redor do seu punto central.",
                     "multiple": "Rotar estes elementos ao redor dos seus puntos centrais."
             "modified": "Modificado",
             "deleted": "Eliminado",
             "created": "Creado",
+            "outstanding_errors_message": "Por favor, resolve tódolos erros primeiro. {count} restantes.",
+            "comment_needed_message": "Por favor, engade un comentario no conxunto de mudanzas primeiro.",
             "about_changeset_comments": "Acerca dos comentarios dos conxuntos de mudanzas",
             "about_changeset_comments_link": "//wiki.openstreetmap.org/wiki/Good_changeset_comments",
             "google_warning": "Mencionaches Google neste comentario: lembra que a copia de Google Maps está estrictamente prohibida.",
                 "tooltip_data": "Centra e achega o mapa para focalizarse neste dato.",
                 "tooltip_issue": "Centra e achega o mapa para focalizarse neste problema."
             },
-            "no_documentation_combination": "Non hai ningunha documentación dispoñíbel para esta combinación de etiquetas",
-            "no_documentation_key": "Non hai ningunha documentación dispoñíbel para esta clave",
             "show_more": "Amosar máis",
             "view_on_osm": "Ollar no openstreetmap.org",
             "view_on_keepRight": "Ollar no keepright.at",
             "role": "Rol",
             "choose": "Escolle o tipo de elemento",
             "results": "{n} resultados para {search}",
-            "reference": "Ollar na wiki do OpenStreetMap",
-            "edit_reference": "Editar ou traducir descrición",
+            "no_documentation_key": "Non hai ningunha documentación dispoñíbel.",
+            "edit_reference": "editar/traducir",
             "wiki_reference": "Ollar documentación",
             "wiki_en_reference": "Ollar documentación en inglés",
+            "hidden_preset": {
+                "manual": "{features} están agochados. Amósaos na lapela dos Datos do mapa.",
+                "zoom": "{features} están agochados. Achégate para amosalos."
+            },
             "back_tooltip": "Mudar tipo de elemento",
             "remove": "Eliminar",
             "search": "Procurar",
             "layers": {
                 "osm": {
                     "tooltip": "Datos do mapa do OpenStreetMap",
-                    "title": "Datos OpenStreetMap"
+                    "title": "Datos do OpenStreetMap"
                 },
                 "notes": {
-                    "tooltip": "Datos das notas de OpenStreetMap",
-                    "title": "Notas de OpenStreetMap"
+                    "tooltip": "Datos das notas do OpenStreetMap",
+                    "title": "Notas do OpenStreetMap"
                 },
                 "keepRight": {
                     "tooltip": "Problemas do mapa detectados de xeito automático dende o keepright.at",
                     "title": "Problemas do KeepRight"
                 },
+                "improveOSM": {
+                    "tooltip": "Datos que fallan detectados de xeito automático polo improveosm.org",
+                    "title": "Problemas do ImproveOSM"
+                },
                 "custom": {
                     "tooltip": "Arrastre e solta un ficheiro de datos na páxina, ou prema no botón pra configuralo",
                     "title": "Datos do mapa persoalizados",
                 }
             },
             "fill_area": "Enche-las áreas",
-            "map_features": "Características do mapa",
-            "autohidden": "Xa que se amosarían moitas na pantalla, hai características que se agocharon de xeito automático. Podes facer unha ampliación para editares calquera delas.",
-            "osmhidden": "Estas características agocháronse automaticamente porque a capa OpenStreetMap está agochada."
+            "map_features": "Elementos do mapa",
+            "autohidden": "Xa que se amosarían moitos na pantalla, estes elementos agocháronse de xeito automático. Podes achegarte para editalos.",
+            "osmhidden": "Estes elementos agocháronse de xeito automático porque a capa do OpenStreetMap está agochada."
         },
         "feature": {
             "points": {
                 "tooltip": "Liñas de tensión, central eléctrica, subestacións, etc."
             },
             "past_future": {
-                "description": "Estado da obra",
+                "description": "Elementos pasados/futuros",
                 "tooltip": "Proposta, en construción, abandoada, en demolición, etc."
             },
             "others": {
-                "description": "Outros",
+                "description": "Outros elementos",
                 "tooltip": "Todo o demais"
             }
         },
                 "tooltip": "Editar os datos dunha capa persoalizada",
                 "header": "Axustes de datos dos mapas persoalizados",
                 "file": {
-                    "instructions": "Elixe un ficheiro de datos local. As extensións suportadas son:\n.gpx, .kml, .geojson, .json",
+                    "instructions": "Escolle un ficheiro de datos local. As extensións suportadas son:\n.gpx, .kml, .geojson, .json",
                     "label": "Procura de arquivos"
                 },
                 "or": "ou",
                 "previous": "< Anterior",
                 "next": "Seguinte >",
                 "keep_local": "Manter a miña",
-                "keep_remote": "Usar a súa",
+                "keep_remote": "Empregar o seu",
                 "restore": "Recuperar",
                 "delete": "Deixar eliminadas",
                 "download_changes": "Ou baixar o ficheiro osmChange.",
                 "done": "Resolvéronse todos os conflitos.",
-                "help": "Outro usuario mudou algunhas das mesmas características que ti mudaches.\nPreme en cada recurso de embaixo para veres máis detalles sobre o conflito, e escolle se queres mantelas\nas túas mudanzas ou as mudanzas do outro usuario.\n"
+                "help": "Outro usuario mudou algúns dos mesmos elementos que ti mudaches.\nPreme en cada elemento para ollar máis detalles sobre o conflito, e escolle se desexas mantelo\nas túas mudanzas ou as mudanzas do outro usuario.\n"
             }
         },
         "merge_remote_changes": {
         "tag_reference": {
             "description": "Descrición",
             "on_wiki": "{tag} en wiki.openstreetmap.org/wiki/Gl:Main_Page",
-            "used_with": "usado con {type}"
-        },
-        "validations": {
-            "disconnected_highway": "Estrada desconectada",
-            "disconnected_highway_tooltip": "As estradas deben conectarse a outras estradas ou ás entradas dos edificios.",
-            "generic_name": "Posíbel nome xenérico",
-            "generic_name_tooltip": "Este elemento semella ter un nome xenérico \"{name}\". Emprega só o campo do nome para rexistra-lo nome oficial dun elemento.",
-            "old_multipolygon": "Etiquetas multipolígono na vía exterior",
-            "old_multipolygon_tooltip": "Este estilo de multipolígono está obsoleto. Por favor, asígnalle as etiquetas ao multipolígono pai en vez da vía exterior.",
-            "untagged_point": "Punto sen etiquetar",
-            "untagged_point_tooltip": "Escolle un tipo de elemento que describa o que é este punto.",
-            "untagged_line": "Liña sen etiquetar",
-            "untagged_line_tooltip": "Escolle un tipo de elemento que describa o que é esta liña.",
-            "untagged_area": "Área sen etiquetar",
-            "untagged_area_tooltip": "Escolle un tipo de elemento que describa o que é esta área.",
-            "untagged_relation": "Relación sen etiquetar",
-            "untagged_relation_tooltip": "Escolle un tipo de elemento que describa o que é esta relación.",
-            "many_deletions": "Estás a eliminar {n} elementos: {p} nós, {l} liñas, {a} áreas e {r} relacións. Estás na certeza de que desexas facelo? Esta acción eliminaraos do mapa e ninguén os verá no openstreetmap.org.",
-            "tag_suggests_area": "A etiqueta {tag} suxire que a liña debería ser unha área, pero non é unha área.",
-            "deprecated_tags": "Etiquetas obsoletas: {tags}"
+            "used_with": "empregado con {type}"
         },
         "zoom": {
             "in": "Achegar",
         "cannot_zoom": "Non se pode afastar máis no modo actual.",
         "full_screen": "Pasar a pantalla completa",
         "QA": {
+            "improveOSM": {
+                "title": "Detección do ImproveOSM",
+                "geometry_types": {
+                    "path": "camiños",
+                    "parking": "aparcadoiro",
+                    "road": "estradas",
+                    "both": "estradas e aparcadoiro"
+                },
+                "directions": {
+                    "east": "leste",
+                    "north": "norte",
+                    "northeast": "nordés",
+                    "northwest": "noroeste",
+                    "south": "sur",
+                    "southeast": "sueste",
+                    "southwest": "suroeste",
+                    "west": "oeste"
+                },
+                "error_types": {
+                    "ow": {
+                        "title": "Falla vía dun só sentido",
+                        "description": "Ó longo deste treito de {highway}, o {percentage}% das {num_trips} viaxes rexistradas viaxan de {from_node} cara {to_node}. Seica falle unha etiqueta dun só sentido \"oneway\"."
+                    },
+                    "mr": {
+                        "title": "Falla a xeometría",
+                        "description": "{num_trips} as viaxes rexistradas nesta área suxiren que pode haber un {geometry_type} sen cartografar aquí.",
+                        "description_alt": "Os datos de terceiros suxiren que pode haber un {geometry_type} sen cartografar aquí."
+                    },
+                    "tr": {
+                        "title": "Falla a restrición de xiro",
+                        "description": "{num_passed} de {num_trips} viaxes rexistradas (viaxando cara o {travel_direction}) fan un xiro dende {from_way} cara {to_way} en {junction}. Seica falle unha restrición \"{turn_restriction}\"."
+                    }
+                }
+            },
             "keepRight": {
                 "title": "Erros do KeepRight",
                 "detail_title": "Erro",
                     },
                     "280": {
                         "title": "Problema do límite",
-                        "description": "Hai un problema non especificado con este límite."
+                        "description": "Hai un erro non especificado con este límite."
                     },
                     "281": {
                         "title": "Falla o nome do límite",
         },
         "note": {
             "note": "Nota",
-            "title": "Editar nota",
+            "title": "Editar nota",
             "anonymous": "anónimo",
             "closed": "(Pechada)",
             "commentTitle": "Comentarios",
             "newComment": "Novo comentario",
             "inputPlaceholder": "Inserir un comentario para compartir con outros usuarios.",
             "close": "Pechar a nota",
-            "open": "Volver a abrir a nota",
+            "open": "Volver abrir a nota",
             "comment": "Comentar",
             "close_comment": "Pechar e comentar",
             "open_comment": "Volver a abrir e comentar",
             "report": "Informar dun problema",
             "new": "Nova nota",
             "newDescription": "Describe o problema.",
-            "save": "Gardar nota",
-            "login": "Debes acceder para poderes facer mudanzas ou comentarios nesta nota.",
+            "save": "Gardar nota",
+            "login": "Tes que iniciar a sesión para poderes facer mudanzas ou comentarios nesta nota.",
             "upload_explanation": "Os seus comentarios serán públicos e visíbeis para calquera usuario do OpenStreetMap.",
             "upload_explanation_with_user": "Os seus comentarios coma {user} serán públicos e visíbeis para tódolos usuarios do OpenStreetMap."
         },
                 "navigation_h": "Navegación",
                 "navigation_drag": "Pode arrastra-lo mapa premendo e mantendo premido o {leftclick} botón esquerdo do rato e movendo o rato. Tamén se pode emprega-las teclas de frecha `↓`, `↑`, `←`, `→` do teclado.",
                 "navigation_zoom": "Pode achegar ou afastar xirando a roda do rato ou o panel táctil, ou premendo nos botóns {plus} / {minus} á beira do mapa. Tamén se pode emprega-las teclas `+`, `-` do teclado.",
-                "features_h": "Características do mapa",
-                "features": "Empregamos a palabra *elementos* para describi-las cousas que aparecen no mapa, coma estradas, construcións ou puntos de interese. Calquera cousa do mundo real pode cartografarse coma un elemento no OpenStreetMap. Os elementos do mapa represéntanse empregando *puntos*, *liñas* ou *áreas*."
+                "features_h": "Elementos do mapa",
+                "features": "Empregamos a palabra *elementos* para describi-las cousas que aparecen no mapa, coma estradas, construcións ou puntos de interese. Calquera cousa do mundo real pode cartografarse coma un elemento no OpenStreetMap. Os elementos do mapa represéntanse empregando *puntos*, *liñas* ou *áreas*.",
+                "nodes_ways": "No OpenStreetMap, ós puntos ás veces chámaselles *nós*, e as liñas e áreas *vías* ou camiños."
             },
             "editing": {
                 "title": "Editar e gardar",
             },
             "lines": {
                 "title": "Liñas",
-                "intro": "As *liñas* empréganse para representar características tales coma estradas, ferrocarrís e ríos. As liñas teñen que debuxarse no centro do elemento que representan.",
+                "intro": "As *liñas* empréganse para representar elementos tales coma estradas, ferrocarrís e ríos. As liñas teñen que debuxarse no centro do elemento que representan.",
                 "add_line_h": "Engadindo liñas",
                 "add_line": "Para engadir unha liña, prema no botón {line} **Liña** na barra das ferramentas enriba do mapa, ou prema a tecla de método abreviado `2`. Isto trocará o cursor do rato nun símbolo dunha cruz.",
                 "add_line_draw": "Deseguido, poña o cursor do rato onde debe comeza-la liña e {leftclick} faga clic co botón esquerdo do rato ou prema `Espazo` para comezar a poñer nós ó longo da liña. Prosegue poñendo máis nós faciendo clic ou premendo `Espazo`. Mentres debuxa, pode achegar ou arrastra-lo mapa para engadir máis detalles.",
                 "add_note": "Para engadir unha nova nota, prema no botón {note} **Nota** na barra das ferramentas enriba do mapa, ou prema na tecla de atallo `4`. Isto trocará o cursor do rato cara un símbolo dunha cruz. Para poñe-la nova nota no mapa, poña o cursor do rato onde debe ir a nota, despois faga clic co {leftclick} botón esquerdo do rato ou prema `Espazo`.",
                 "move_note": "Só pódense move-las notas novas. Para mover unha nota, poña o cursor do rato sobre a nova nota, despois prema e manteña premido o {leftclick} botón esquerdo do rato mentres arrastra a nota cara á súa nova localización.",
                 "update_note_h": "Peche, volve abrir e comenta",
-                "update_note": "Unha nota existente pódese actualizar pechándoa, voltando a abrila o engadíndolle un comentario. Pechar unha nota indica que o problema foi resolto. A reapertura dunha nota indica que o problema orixinal non está resolto.",
-                "save_note_h": "Gardar notas",
+                "update_note": "Unha nota existente pódese actualizar pechándoa, voltando a abrila o engadíndolle un comentario. Pechar unha nota indica que o erro foi resolto. A reapertura dunha nota indica que o erro orixinal non está resolto.",
+                "save_note_h": "Gardar as notas",
                 "save_note": "Debe garda-las edicións de notas de xeito individual premendo nos botóns que se atopan debaixo dos comentarios da nota. As edicións de nota **non** se inclúen nos conxuntos de mudanzas que se soben ó OpenStreetMap."
             },
             "imagery": {
                 "choosing": "Para ollar que fontes de imaxes están dispoñíbeis para editar, prema no botón {layers} **Axustes do fondo** no costado do mapa.",
                 "sources": "De xeito predeterminado, escóllese a capa de satélite [Bing Maps](https://www.bing.com/maps/) coma imaxe do fondo. Dependendo de onde esté editando, outras fontes de imaxes estarán dispoñíbeis. Algunhas poden ser máis recentes ou ter unha resolución máis alta, polo que sempre é útil verificar que capa é a mellor para empregar coma referenza do cartografado.",
                 "offsets_h": "Axusta-lo desprazamento das imaxes",
-                "offset": "As imaxes ás veces están lixeiramente desprazadas con respecto ós datos precisos do mapa. Se olla unha grande cantidade de estradas ou edificios desprazados das imaxes do fondo, pode ser que as imaxes sexan incorrectas, polo que non as mova para que coincidan co fondo. No seu lugar, pode axusta-lo fondo para que coincida cos datos existentes ó expandi-la lapela \"Axustar desprazamento das imaxes\" na beira de embaixo da lapela dos Axustes do fondo."
+                "offset": "As imaxes ás veces están lixeiramente desprazadas con respecto ós datos precisos do mapa. Se olla unha grande cantidade de estradas ou edificios desprazados das imaxes do fondo, pode ser que as imaxes sexan incorrectas, polo que non as mova para que coincidan co fondo. No seu lugar, pode axusta-lo fondo para que coincida cos datos existentes ó expandi-la lapela \"Axustar desprazamento das imaxes\" na beira de embaixo da lapela dos Axustes do fondo.",
+                "offset_change": "Prema nos triángulos pequenos para axusta-lo desprazamento das imaxes en pequenos intervalos, ou manteña premido o {leftclick} botón esquerdo do rato e arrastre dentro do cadrado gris para escorrega-las imaxes cara a aliñación."
             },
             "streetlevel": {
                 "title": "Imaxes ó nivel da rúa",
             },
             "gps": {
                 "title": "Pistas de GPS",
-                "intro": "As pistas do GPS recompiladas son unha valiosa fonte de datos para o OpenStreetMap. Este editor admite ficheiros * .gpx *, * .geojson * e * .kml* na súa computadora local. Pode recompilar pistas do GPS cun teléfono móbil intelixente, reloxo deportivo ou outro aparello GPS.",
-                "survey": "Para obter información sobre de que xeito facer un relevamento con GPS, lea [Cartografado cun teléfono móbil intelixente, GPS ou papeis](http://learnosm.org/en/mobile-mapping/).",
-                "using_h": "Usando as pistas de GPS",
+                "intro": "As pistas do GPS recollidas son unha valiosa fonte de datos para o OpenStreetMap. Este editor admite ficheiros * .gpx *, * .geojson * e * .kml* na túa computadora local. Podes recompilar pistas de GPS cun teléfono móbil intelixente, reloxo deportivo ou outros aparellos GPS.",
+                "survey": "Para obter información sobre de que xeito facer unha revisión con GPS, le [Cartografado cun teléfono móbil intelixente, GPS ou papeis](http://learnosm.org/en/mobile-mapping/).",
+                "using_h": "Empregando as pistas de GPS",
                 "using": "Para empregar unha pista do GPS para o cartografado, arrastre e solte o ficheiro dos datos no editor de mapas. Se o recoñece, debuxarao no mapa coma unha liña violeta brilante. Prema na lapela {data} **Datos do mapa** na beira do mapa para habilitar, deshabilitar ou achega-los seus datos do GPS.",
                 "tracing": "A pista do GPS non se envía ó OpenStreetMap; a mellor maneira de empregala é debuxar no mapa empregándoa coma unha guía para os novos elementos que engada.",
                 "upload": "Tamén pode [baixa-los datos do GPS ó OpenStreetMap](https://www.openstreetmap.org/trace/create) para que os empreguen outros usuarios."
             },
             "qa": {
                 "title": "Control de calidade",
-                "intro": "As ferramentas de *control de calidade* (Q/A) poden atopar etiquetas inadecuadas, estradas desconectadas e outros problemas con OpenStreetMap que poderán arranxar os cartógrafos. Para olla-los problemas das Q/A existentes, prema no taboleiro {data} **Datos do mapa** para habilitares unha capa específica das Q/A.",
+                "intro": "As ferramentas de *control de calidade* (Q/A) poden atopar etiquetas non axeitadas, estradas desconectadas e outros problemas co OpenStreetMap que poderán arranxar os cartógrafos. Para olla-los problemas das ferramentas de *control de calidade* (Q/A) existentes, preme no taboleiro {data} **Datos do mapa** para habilitares unha capa específica das ferramentas.",
                 "tools_h": "Ferramentas",
-                "tools": "As seguintes ferramentas son compatíbeis actualmente: [KeepRight](https://www.keepright.at/). Agarda que o iD sexa compatíbel co [Osmose](https://osmose.openstreetmap.fr/), [ImproveOSM](https://improveosm.org/en/), e máis ferramentas das Q/A no futuro.",
+                "tools": "As ferramentas que son actualmente compatíbeis son: O [KeepRight] (https://www.keepright.at/) e o [ImproveOSM] (https://improveosm.org/en/). Agarda a que o iD sexa compatíbel co [Osmose] (https://osmose.openstreetmap.fr/) e máis ferramentas de *control de calidade* (Q/A) e rastrexo de erros no futuro.",
                 "issues_h": "Manexo de problemas",
-                "issues": "O manexo dos problemas das Q/A é semellante ó manexo de notas. Prema nun marcador para ver na lapela lateral os detalles do problema. Cada ferramenta ten as súas propias capacidades, pero xeralmente pode comentar e/ou pechar un problema."
+                "issues": "O manexo dos problemas das ferramentas de *control de calidade* (Q/A) é semellante ó manexo de notas. Preme nunha marcaxe para ollar na lapela lateral os detalles do problema. Cada ferramenta ten as súas propias capacidades, pero xeralmente podes comentar e/ou pechar un problema."
             },
             "field": {
                 "restrictions": {
                     },
                     "tips": {
                         "title": "Consellos",
-                        "simple": "**Intenta usar restricións simples en lugar de restricións máis complexas.**",
+                        "simple": "**Tenta empregar restricións sinxelas no canto de restricións máis complexas.**",
                         "simple_example": "Por exemplo, se podes estableceres o elemento intermedio sinxelamente cun nó, evita facelo cunha vía.",
                         "indirect": "**Algunhas restricións amosan o texto \"(indirecta)\" e aparecen cunha cor máis feble.**",
                         "indirect_example": "Estas restricións existen debido a outra restrición cercana. Por exemplo, unha restrición de \"Obrigatorio seguir recto\" creará indirectamente restricións de \"Prohibido xirar\" para tódalas demais rotas do cruzamento.",
                 }
             }
         },
+        "issues": {
+            "title": "Problemas",
+            "key": "P",
+            "list_title": "Problemas ({count})",
+            "errors": {
+                "list_title": "Erros ({count})"
+            },
+            "warnings": {
+                "list_title": "Avisos ({count})"
+            },
+            "no_issues": {
+                "message": "Todo vese ben",
+                "info": "Calquera problema amosarase aquí mentres editas"
+            },
+            "almost_junction": {
+                "message": "{feature} está moi preto pero non está conectado a {feature2}",
+                "highway-highway": {
+                    "tip": "O cruzamento de estradas ten que compartillar un vértice de unión."
+                }
+            },
+            "crossing_ways": {
+                "message": "{feature} cruza {feature2}",
+                "building-building": {
+                    "tip": "Os edificios non teñen que cruzarse, agás que estean en capas diferentes."
+                },
+                "building-highway": {
+                    "tip": "As estradas que cruzan edificios teñen que empregar pontes, túneis, revestimentos (coberturas) ou entradas."
+                },
+                "building-railway": {
+                    "tip": "As vías de ferrocarrís que cruzan edificios teñen que empregar pontes o túneis."
+                },
+                "building-waterway": {
+                    "tip": "As canles fluviais que cruzan edificios teñen que empregar túneis ou estar en capas diferentes."
+                },
+                "highway-highway": {
+                    "tip": "Ó cruzar estradas tense que empregar pontes, túneis ou cruzamentos."
+                },
+                "highway-railway": {
+                    "tip": "As estradas que cruzan vías de ferrocarrís teñen que empregar pontes, túneis ou pasos a nivel."
+                },
+                "highway-waterway": {
+                    "tip": "As estradas que cruzan canles fluviais teñen que empregar pontes, túneis ou vaos."
+                },
+                "railway-railway": {
+                    "tip": "As vías de ferrocarrís que cruzan teñen que estar conectadas ou empregar pontes o túneis."
+                },
+                "railway-waterway": {
+                    "tip": "As vías de ferrocarrís que cruzan canles fluviais teñen que empregar pontes o túneis."
+                },
+                "waterway-waterway": {
+                    "tip": "O cruzamento de canles fluviais ten que estar conectado ou empregar túneis."
+                },
+                "tunnel-tunnel": {
+                    "tip": "Os túneis que se cruzan teñen que empregar diferentes capas."
+                },
+                "tunnel-tunnel_connectable": {
+                    "tip": "Os túneis que se cruzan teñen que estar conectados ou empregar capas diferentes."
+                },
+                "bridge-bridge": {
+                    "tip": "As pontes que se cruzan teñen que empregar diferentes capas."
+                },
+                "bridge-bridge_connectable": {
+                    "tip": "As pontes que se cruzan teñen que estar conectadas ou empregar diferentes capas."
+                },
+                "indoor-indoor": {
+                    "tip": "Os elementos de interiores que se crucen teñen que empregar diferentes niveis."
+                },
+                "indoor-indoor_connectable": {
+                    "tip": "Os elementos de interiores que se crucen teñen que estar conectados ou empregar diferentes niveis."
+                }
+            },
+            "deprecated_tag": {
+                "single": {
+                    "message": "{feature} ten a etiqueta obsoleta \"{tag}\""
+                },
+                "combination": {
+                    "message": "{feature} ten unha combinación de etiquetas obsoletas: {tags}"
+                },
+                "tip": "Algunhas etiquetas vóltanse obsoletas co tempo e teñen que substituírse."
+            },
+            "disconnected_way": {
+                "highway": {
+                    "message": "{highway} está desconectada doutras estradas e camiños",
+                    "tip": "As estradas teñen que conectarse a outras estradas ou a entradas de edificios."
+                }
+            },
+            "generic_name": {
+                "message": "{feature} ten o nome xenérico \"{name}\"",
+                "tip": "Os nomes teñen que ser os nomes actuais e reais dos elementos."
+            },
+            "many_deletions": {
+                "points-lines-areas": {
+                    "message": "Estanse a eliminar {n} elementos: {p} puntos, {l} liñas e {a} áreas"
+                },
+                "points-lines-areas-relations": {
+                    "message": "Estanse a eliminar {n} elementos: {p} puntos, {l} liñas, {a} áreas e {r} relacións"
+                },
+                "tip": "Só se teñen que eliminar os elementos redundantes ou non existentes."
+            },
+            "missing_tag": {
+                "any": {
+                    "message": "{feature} non ten etiquetas"
+                },
+                "descriptive": {
+                    "message": "{feature} non ten etiquetas descritivas"
+                },
+                "specific": {
+                    "message": "{feature} non ten a etiqueta \"{tag}\""
+                },
+                "tip": "Os elementos teñen que ter etiquetas que definan o que son."
+            },
+            "old_multipolygon": {
+                "message": "{multipolygon} ten etiquetas mal dispostas",
+                "tip": "Os multipolígonos teñen que estar etiquetados na súa relación, non na súa vía externa (no 'outer')."
+            },
+            "tag_suggests_area": {
+                "message": "{feature} ten que ser unha área pechada baseada na etiqueta \"{tag}\"",
+                "tip": "As áreas teñen que ter os derradeiros puntos conectados."
+            },
+            "fix": {
+                "connect_almost_junction": {
+                    "annotation": "Elementos conectados moi preto."
+                },
+                "connect_crossing_features": {
+                    "annotation": "Elementos conectados cruzados."
+                },
+                "connect_endpoints": {
+                    "title": "Conectar os derradeiros puntos",
+                    "annotation": "Conectados os derradeiros puntos dunha vía."
+                },
+                "connect_features": {
+                    "title": "Conectar os elementos"
+                },
+                "continue_from_start": {
+                    "title": "Continuar a debuxar dende o comezo"
+                },
+                "continue_from_end": {
+                    "title": "Continuar a debuxar dende o remate"
+                },
+                "delete_feature": {
+                    "title": "Eliminar este elemento"
+                },
+                "move_tags": {
+                    "title": "Mover as etiquetas",
+                    "annotation": "Movéronse as etiquetas."
+                },
+                "remove_generic_name": {
+                    "title": "Eliminar o nome",
+                    "annotation": "Eliminouse un nome xenérico."
+                },
+                "remove_tag": {
+                    "title": "Eliminar a etiqueta",
+                    "annotation": "Eliminouse a etiqueta."
+                },
+                "reposition_features": {
+                    "title": "Reposicionar os elementos"
+                },
+                "select_preset": {
+                    "title": "Escoller un tipo de elemento"
+                },
+                "tag_as_disconnected": {
+                    "title": "Etiquetar coma desconectado",
+                    "annotation": "Etiquetados elementos moi pretos coma desconectados."
+                },
+                "upgrade_tag": {
+                    "annotation": "Actualizouse unha etiqueta vella."
+                },
+                "upgrade_tag_combo": {
+                    "annotation": "Actualizouse unha combinación de etiquetas vellas."
+                },
+                "use_bridge_or_tunnel": {
+                    "title": "Emprega unha ponte ou túnel"
+                },
+                "use_different_layers": {
+                    "title": "Emprega capas diferentes"
+                },
+                "use_different_levels": {
+                    "title": "Emprega niveis diferentes"
+                },
+                "use_tunnel": {
+                    "title": "Emprega un túnel"
+                }
+            }
+        },
         "intro": {
             "done": "feito",
             "ok": "Feito",
                 "fields_townhall": "A parte media do editor de elementos contén *campos* que amosan os atributos do elemento, tales coma o nome e enderezo.",
                 "close_townhall": "** Pecha o editor de recursos premendo Esc ou no botón {button} situado no canto superior **.",
                 "search_street": "Podes procurar elementos na presente vista, ou de maneira mundial. **Procura \"{name}\".**",
-                "choose_street": "**Elixe {name} na listaxe para seleccionalo.**",
+                "choose_street": "**Escolle {name} da listaxe para seleccionalo.**",
                 "selected_street": "Meu! {name} está agora seleccionado.",
                 "editor_street": "Os campos amosados nunha rúa son diferentes dos campos que se amosaron para o concello. {br}Para esta rúa seleccionada, o editor de elementos amosa campos coma ''{field1}\" e \"{field2}\".  **Peche o editor de elementos premendo Esc ou premendo o botón {button}.**",
                 "play": "Tenta mover o mapa e facer clic sobre outros elementos para ver que tipo de cousas podemos engadir a OpenStreetMap. **Cando esteas preparado para continuar co próximo capítulo fai clic en \"{next}\".**"
                 "update": "Imos cubrir algúns detalles sobre esta cafetaría. Podes muda-lo seu nome, engadir o tipo de cociña, ou engadir un enderezo. **Muda-la información do café.**",
                 "update_close": "**Cando remates de actualizar o café, pulsa escape, enter, ou fai clic no botón  {button}  para pechar o editor de elementos.**",
                 "rightclick": "Podes facer clic co botón dereito en calquera elemento para ve-lo *menú de edición*, o cal amosa unha listaxe de operacións de edición dispoñíbeis. **Fai clic co botón dereito para seleccionares o punto que creaches e amosa-lo menú de edición.**",
-                "delete": "Está ben eliminar elementos que non existen no mundo real.{br}Eliminando un elemento do OpenStreetMap desbótao do mapa que todos usan, polo tanto debes estar na certeza de que un elemento realmente non existe denantes de eliminalo. **Preme no botón {button} para elimina-lo punto.**",
+                "delete": "Está ben eliminar elementos que non existen no mundo real.{br}Eliminando un elemento do OpenStreetMap desbótao do mapa que todos empregan, polo tanto debes estar na certeza de que un elemento realmente non existe denantes de eliminalo. **Preme no botón {button} para elimina-lo punto.**",
                 "undo": "Sempre podes desfacer calquera modificación mentres non gardes as túas edicións en OpenStreetMap. **Fai clic no botón {button} para anula-la eliminación e voltar a te-lo punto.**",
                 "play": "Agora que xa sabes como crear e editar puntos, tenta crear uns poucos puntos máis para practicar! **Canto esteas preparado para continuar co novo capítulo, fai clic en '{next}'.**"
             },
             "areas": {
                 "title": "Áreas",
-                "add_playground": "As *áreas* son usadas para amosar límites de elementos tales como lagoas, edificios e zonas residenciais.{br}Tamén poden ser empregadas para cartografar con maior detalle moitos dos elementos que normalmente cartografarías como puntos. **Fai clic no botón {button} Área para engadir unha nova área.**",
+                "add_playground": "As *áreas* son empregadas para amosar límites de elementos tales como lagoas, edificios e zonas residenciais.{br}Tamén poden ser empregadas para cartografar con maior detalle moitos dos elementos que normalmente cartografarías como puntos. **Fai clic no botón {button} Área para engadir unha nova área.**",
                 "start_playground": "Engadamos este parque infantil ó mapa debuxando unha área. As áreas debúxanse colocando *nós* ó longo do bordo exterior do elemento. **Fai clic ou preme a barra de espazo para poñer un nó inicial nunha das esquinas do parque infantil.**",
                 "continue_playground": "Prosegue debuxando a área colocando máis nós ó longo do bordo do parque infantil. Está ben conectar a área cos camiños peonís existentes.{br}Consello: podes manter premida a tecra '{alt}' para evitar que os nós se conecten nos elementos próximos. **Prosegue a debuxa-la área do parque infantil.**",
                 "finish_playground": "Remata a área premendo enter, ou facendo clic outra vez no derradeiro ou no primeiro nó. **Remata de debuxa-la área para o parque infantil.**",
                 "search_playground": "**Procura '{preset}'.**",
-                "choose_playground": "**Elixe {preset} da listaxe.**",
+                "choose_playground": "**Escolle {preset} da listaxe.**",
                 "add_field": "Este parque infantil non ten un nome oficial, polo que non imos engadir ren na cela do Nome.{br}En cambio engadiremos detalles adicionais sobre o parque infantil no campo Descrición. **Abre a listaxe Engadir Campo.**",
-                "choose_field": "**Elixe {field} da listaxe.**",
+                "choose_field": "**Escolle {field} da listaxe.**",
                 "retry_add_field": "Non elixiches o campo {field}. Volve tentalo.",
                 "describe_playground": "**Engade unha descrición; despois fai clic no botón {button} para pechar o editor de elementos.**",
                 "play": "Vas ben! Tenta debuxar unhas poucas áreas, e mira que outros tipos de elementos de áreas podes engadir en OpenStreetMap. **Cando esteas preparado para continuar co próximo capítulo, fai clic en \"{next}\".**"
             },
             "buildings": {
                 "title": "Edificios",
-                "add_building": "OpenStreetMap é a maior e máis ampla base de datos mundial de edificios.{br} Podes axudar a aumentar esta base de datos trazando edificios que non están aínda cartografados. **Preme no botón {button} Área para engadir nova área.**",
+                "add_building": "O OpenStreetMap é a maior e máis ampla base de datos mundial de edificios.{br} Podes axudar a facer máis grande esta base de datos trazando edificios que non están aínda cartografados. **Preme no botón de Área {button} para engadir unha nova área.**",
                 "start_building": "Imos engadir esta casa ó mapa, trazando a súa contorna. {br}Os edificios deberán seren trazados ó redor da súa pegada ca maior precisión posíbel. **Fai clic ou preme a barra de espazo para poñer un nó inicial nun dos cantos do edificio. **",
                 "continue_building": "Prosegue editando máis nós para trazares o perímetro do edificio. Lembra que podes facer zoom se queres engadir máis detalles.{br}Remata o edificio premendo enter ou facendo clic outra vez no primeiro ou derradeiro nó. **Remata de traza-lo edificio.**",
-                "retry_building": "Semella que tivo algúns problemas poñendo os nós nas esquinas do edificio. Probe de novo!",
-                "choose_category_building": "**Elixe {category} na listaxe.**",
-                "choose_preset_house": "Hai moitos diferentes tipos de edificios, pero este está claro que é unha casa.{br}Se ti non estás seguro do tipo, está ben elixir simplemente o tipo xenérico Edificio. **Elixe o tipo {preset}.**",
+                "retry_building": "Semella que tiveches algúns problemas poñendo os nós nas esquinas do edificio. Téntao de novo!",
+                "choose_category_building": "**Escolle {category} da listaxe.**",
+                "choose_preset_house": "Hai moitos diferentes tipos de edificios, pero este estamos na certeza de que é unha casa.{br}Se ti non estás seguro do tipo, está ben elixir sinxelamente o tipo xenérico 'Edificio'. **Escolle o tipo {preset}.**",
                 "close": "**Pulsa escape ou fai clic no botón {button} para pechar o editor de elementos.**",
                 "rightclick_building": "**Fai clic co botón dereito para seleccionar o edificio que creaches e amosar o menú de edición.**",
                 "square_building": "A casa que engadiches verase mellor se ten as esquinas formando perfectos ángulos rectos. **Prema sobre o botón {button} para encadra-la forma do edificio.**",
                 "start_tank": "Non te preocupes, non tes que debuxar un círculo perfecto. Sinxelamente debuxa unha área dentro do depósito que toque o seu bordo. **Clic ou preme a barra de espazo para colocares un nó inicial sobre o bordo do depósito.**",
                 "continue_tank": "Engade uns poucos nós ó redor da forma. O círculo será xerado por fóra dos nós que debuxes.{br}Remata a área premendo enter, ou facendo clic outra vez no primeiro ou derradeiro nó. **Remata de debuxa-lo recinto.**",
                 "search_tank": "**Procura '{preset}'.**",
-                "choose_tank": "**Elixe {preset} da listaxe.**",
+                "choose_tank": "**Escolle {preset} da listaxe.**",
                 "rightclick_tank": "**Fai clic co botón dereito para seleccionares o tanque de almacenamento que creaches e amosar o menú de edición.**",
                 "circle_tank": "**Prema no botón {button} para converter o tanque nun círculo.**",
                 "retry_circle": "Non premiches no botón Redondear. Volve tentalo.",
                 "esc": "Esc",
                 "home": "Inicio",
                 "option": "Opción",
-                "pause": "Pausa",
+                "pause": "Deter",
                 "pgdn": "PáxAd",
                 "pgup": "PáxAt",
                 "return": "Retorno",
                 "title": "Ferramentas",
                 "info": {
                     "title": "Información",
-                    "all": "Alternar tódolos paneis de información",
+                    "all": "Alternar tódalas lapelas de información",
                     "background": "Alternar lapela do fondo",
                     "history": "Alternar lapela do historial",
                     "location": "Alternar lapela da ubicación",
                 "category-building": {
                     "name": "Características de edificio"
                 },
-                "category-golf": {
-                    "name": "Características do campo de golf"
-                },
                 "category-landuse": {
                     "name": "Usos da terra"
                 },
                 "animal_shelter": {
                     "label": "Para Animais"
                 },
+                "architect": {
+                    "label": "Arquitecto"
+                },
                 "area/highway": {
                     "label": "Tipo"
                 },
                 "crane/type": {
                     "label": "Tipo de guindastre",
                     "options": {
-                        "floor-mounted_crane": "Guindastre fixa ó chan",
+                        "floor-mounted_crane": "Guindastre fixo ó chan",
                         "portal_crane": "Guindastre portal",
                         "travel_lift": "Ascensor de viaxe"
                     }
                         "underground": "Subterráneo"
                     }
                 },
-                "passenger_information_display": {
-                    "label": "Pantalla de información do pasaxeiro"
-                },
                 "payment_multi": {
                     "label": "Tipos de pagamento"
                 },
                 "restrictions": {
                     "label": "Restricións de xiro"
                 },
+                "roof/colour": {
+                    "label": "Cor do tellado"
+                },
                 "rooms": {
                     "label": "Habitacións"
                 },
                     },
                     "placeholder": "Sendeirismo de montaña, sendeirismo alpino"
                 },
+                "salt": {
+                    "label": "Salgado"
+                },
                 "sanitary_dump_station": {
                     "label": "Área de desaugue para caravanas"
                 },
                     },
                     "placeholder": "Si, Non, Para Levar Só..."
                 },
+                "tidal": {
+                    "label": "Entre mareas"
+                },
                 "to": {
                     "label": "Até"
                 },
                     "label": "Tipo"
                 },
                 "website": {
-                    "label": "Sitio web",
-                    "placeholder": "http://exemplo.gal/"
+                    "label": "Sitio web"
                 },
                 "wetland": {
                     "label": "Tipo"
                     "name": "Reloxo",
                     "terms": "reloxo, hora, tempo"
                 },
+                "amenity/clock/sundial": {
+                    "name": "Reloxo de sol",
+                    "terms": "reloxo, sol, gnomon, sombra"
+                },
                 "amenity/college": {
                     "name": "Zona de educación superior",
                     "terms": "universidade, educación superior, facultade, colexio, escola, instituto"
                 "area/highway": {
                     "name": "Superficie da estrada"
                 },
+                "attraction": {
+                    "name": "Atracción"
+                },
                 "attraction/amusement_ride": {
                     "name": "Atracción",
                     "terms": "atracción, parque de atraccións"
                     "name": "Porta",
                     "terms": "porta, entrada, cancela, cancelo, acceso"
                 },
+                "barrier/guard_rail": {
+                    "name": "Gardarraíl",
+                    "terms": "gardarraíl, quitamedos, barreira"
+                },
                 "barrier/hedge": {
                     "name": "Sebe",
                     "terms": "cobertura, sebe, liña de arbustos"
                     "name": "Ringleira de casas",
                     "terms": "casas en fila, fila de casas, ringleira de casas, casas adosadas, vivendas adosadas"
                 },
-                "building/train_station": {
-                    "name": "Estación de tren"
-                },
                 "building/university": {
                     "name": "Edificio universitario",
                     "terms": "universidade, facultade, escola, colexio"
                     "terms": "fiestras, ventás, xanelas"
                 },
                 "craft/winery": {
-                    "name": "Lagar",
+                    "name": "Adega de viños",
                     "terms": "lagar, adega, prensa, lagareta, viño, uva"
                 },
                 "embankment": {
                 "golf/hole": {
                     "name": "Burato de Golf"
                 },
-                "golf/lateral_water_hazard_area": {
-                    "name": "Risco de Auga Lateral"
-                },
-                "golf/lateral_water_hazard_line": {
-                    "name": "Risco de Auga Lateral"
-                },
                 "golf/rough": {
                     "name": "Duro"
                 },
                 "golf/tee": {
                     "name": "Caixa de Te"
                 },
-                "golf/water_hazard_area": {
-                    "name": "Obstáculo de Auga"
-                },
-                "golf/water_hazard_line": {
-                    "name": "Obstáculo de Auga"
-                },
                 "healthcare/blood_donation": {
                     "name": "Doación de sangue"
                 },
                 "highway/steps": {
                     "name": "Escadas"
                 },
+                "highway/steps/conveying": {
+                    "name": "Escadas mecánicas",
+                    "terms": "escadas mecánicas, escaleira mecánica"
+                },
                 "highway/stop": {
                     "name": "Sinal de Stop"
                 },
                     "terms": "intersección, cruzamento, cruce, incorporación"
                 },
                 "landuse": {
-                    "name": "Uso da terra",
-                    "terms": "uso da terra, uso do chan"
+                    "name": "Uso da terra"
                 },
                 "landuse/allotments": {
                     "name": "Xardín comunitario",
                     "terms": "céspede, herba"
                 },
                 "landuse/greenfield": {
-                    "name": "Soar urbanizábel"
+                    "name": "Soar urbanizábel",
+                    "terms": "soar, terreo, campo, urbanizábel, construír, construción"
                 },
                 "landuse/harbour": {
                     "name": "Peirao",
                 "man_made/chimney": {
                     "name": "Cheminea"
                 },
+                "man_made/crane": {
+                    "name": "Guindastre",
+                    "terms": "guindastre, grúa, grua, elevadora, cabria, cabrestante, trucha, pluma"
+                },
                 "man_made/cutline": {
                     "name": "Corta lumes",
                     "terms": "cortalumes, cortafuegos"
                 "power/transformer": {
                     "name": "Transformador"
                 },
-                "public_transport/linear_platform": {
-                    "name": "Parada/plataforma de autobús"
-                },
-                "public_transport/linear_platform_bus": {
-                    "name": "Parada/plataforma de autobús"
-                },
-                "public_transport/linear_platform_subway": {
-                    "name": "Parada/plataforma de metro"
-                },
-                "public_transport/linear_platform_train": {
-                    "name": "Parada/plataforma de tren"
-                },
-                "public_transport/linear_platform_tram": {
-                    "name": "Parada/plataforma de tranvía"
-                },
                 "public_transport/platform": {
                     "name": "Parada/plataforma de transporte público"
                 },
                     "name": "Tenda de cortinas"
                 },
                 "shop/dairy": {
-                    "name": "Tenda de lácteos"
+                    "name": "Tenda de produtos frescos",
+                    "terms": "produtos frescos, frescos, produtos, leite, lácteos, leitária, queixaría, central leiteira"
                 },
                 "shop/deli": {
                     "name": "Delicatessen"
                     "name": "Fervenza"
                 },
                 "waterway/weir": {
-                    "name": "Presa"
+                    "name": "Vaira",
+                    "terms": "vaira, presa, represa, encalco, encoro, vertedoiro, hidráulico, aliviadoiro hidráulico, dique, pequena represa"
                 }
             }
         },
                 "attribution": {
                     "text": "Termos e opinións"
                 },
+                "description": "DigitalGlobe-Premium é un mosaico composto do mapa base de DigitalGlobe con algunhas rexións cubertas con +Vivid ou con imaxes personalizadas á área de interese, resolución de 50cm ou mellor e actualizado de forma máis frecuente con actualizacións continuas.",
                 "name": "Imaxes do DigitalGlobe Premium"
             },
             "DigitalGlobe-Premium-vintage": {
                 "attribution": {
                     "text": "Termos e opinións"
                 },
+                "description": "DigitalGlobe-Standard é un revisado conxunto de imaxes que cobren o 86% da superficie terrestre, cunha resolución entre 30 e 60cm onde estea dispoñible, e con imaxes de Landsat no resto das zonas. A antigüidade media é de 2,31 anos, con algunhas áreas actualizadas dúas veces por ano.",
                 "name": "Imaxes do DigitalGlobe Standard"
             },
             "DigitalGlobe-Standard-vintage": {
                 "name": "Imaxes numéricas PICC do SPW(allonie)"
             },
             "US-TIGER-Roads-2014": {
+                "description": "No nivel de achegamento de 16 ou máis, datos do mapa de dominio público dende o US Census. En achegamentos máis baixos, só hai mudanzas dende o 2006 agás as mudanzas xa engadidas no OpenStreetMap",
                 "name": "Estradas do TIGER 2014"
             },
             "US-TIGER-Roads-2017": {
                 "attribution": {
                     "text": "basemap.at"
                 },
-                "description": "Mapa base de Austria, baseado nos datos gubernamentais.",
+                "description": "Mapa base de Austria, baseado nos datos gobernamentais.",
                 "name": "basemap.at"
             },
             "basemap.at-orthofoto": {
                 "attribution": {
                     "text": "Xapón GSI"
                 },
+                "description": "Imaxes aéreas do Xapón GSI. Non está ortorrectificado de xeito completo, pero é un chisco máis recente e/ou está cuberto de xeito diferente que as ortoimaxes do GSI.",
                 "name": "Imaxes aéreas do Xapón GSI"
             },
             "gsi.go.jp_std_map": {
                 "attribution": {
                     "text": "© contribuíntes do OpenStreetMap"
                 },
-                "description": "Trazas públicas GPS subidas a OpenStreetMap.",
-                "name": "Trazas GPS de OpenStreetMap"
+                "description": "Pistas GPS públicas subidas ó OpenStreetMap.",
+                "name": "Pistas GPS do OpenStreetMap"
             },
             "osm-mapnik-black_and_white": {
                 "attribution": {
             },
             "OSM-Reddit": {
                 "name": "OpenStreetMap no Reddit",
-                "description": "/r/openstreetmap/ é un bo sitio para aprender máis sobre OpenStreetMap. Pregúntanos calquera cousa!"
+                "description": "/r/openstreetmap/ é un bo sitio para aprender máis sobre OpenStreetMap. Pregúntanos calquera cousa!"
             },
             "OSM-Telegram": {
                 "name": "Telegram do OpenStreetMap",
index 5859c546cff8ba337dbb3e6c342a8fdddee1662f..897c5e3742877aa47af0d9cf42b99f34dc84d4d7 100644 (file)
                 "tooltip": "રેલ્વે"
             },
             "others": {
-                "description": "અન્યો",
                 "tooltip": "બીજું બધું"
             }
         },
index 4cac1210d5eb99a9b247d2db07f7db7d0a675d6a..ae9fc505b67ea3300d3e8dea17f916ab32d4c39b 100644 (file)
@@ -5,9 +5,9 @@
             "information": "מידע",
             "remove": "הסרה",
             "undo": "ביטול",
-            "zoom_to": "התקרבות",
+            "zoom_to": "התקרבות אל",
             "copy": "עותק",
-            "open_wikidata": "פת×\97 ×\91wikidata.org"
+            "open_wikidata": "פת×\99×\97×\94 ×\91Ö¾wikidata.org"
         },
         "modes": {
             "add_area": {
             "connect": {
                 "annotation": {
                     "from_vertex": {
-                        "to_point": "×\9e×\97×\95×\91ר לנקודה.",
-                        "to_vertex": "×\97×\99×\91×\95ר ×\93ר×\9a ×\9c×\90×\97ר",
-                        "to_line": "×\97×\99×\91×\95ר ×\9cק×\95",
-                        "to_area": "×\97×\99×\91×\95ר ×\9cש×\98×\97",
-                        "to_adjacent_vertex": "×\97×\99×\91×\95ר × ×§×\95×\93×\95ת ×\9c×\93ר×\9a",
-                        "to_sibling_vertex": "×\93ר×\9a ×\9e×\97×\95×\91ר ×\9cעצ×\9e×\95"
+                        "to_point": "×\93ר×\9a ×\97×\95×\91ר×\94 לנקודה.",
+                        "to_vertex": "×\97×\95×\91ר×\94 ×\93ר×\9a ×\9c×\90×\97רת.",
+                        "to_line": "×\97×\95×\91ר×\94 ×\93ר×\9a ×\9cק×\95.",
+                        "to_area": "×\97×\95×\91ר×\94 ×\93ר×\9a ×\9cש×\98×\97.",
+                        "to_adjacent_vertex": "×\9e×\95×\96×\92×\95 × ×§×\95×\93×\95ת ×¡×\9e×\95×\9b×\95ת ×\9c×\93ר×\9a.",
+                        "to_sibling_vertex": "×\93ר×\9a ×\97×\95×\91ר×\94 ×\9cעצ×\9e×\94."
                     },
                     "from_point": {
-                        "to_point": "×\97×\99×\91×\95ר ×§×\95 ×\9c×\90×\97ר",
-                        "to_vertex": "×\97×\99×\91×\95ר × ×§×\95×\93×\94 ×\9cנק×\95×\93×\94 ×¢×\9c ×\93ר×\9a",
-                        "to_line": "×\97×\99×\91×\95ר × ×§×\95×\93×\94 ×\9cק×\95",
-                        "to_area": "×\97×\91×\95ר ×§×\95 ×\9cש×\98×\97"
+                        "to_point": "נק×\95×\93×\94 ×\9e×\95×\96×\92×\94 ×\9c×\90×\97רת.",
+                        "to_vertex": "×\9e×\95×\96×\92×\94 × ×§×\95×\93×\94 ×¢×\9d × ×§×\95×\93×\94 ×\91×\93ר×\9a.",
+                        "to_line": "×\94×\95×¢×\91ר×\94 × ×§×\95×\93×\94 ×\9cק×\95.",
+                        "to_area": "×\94×\95×¢×\91ר×\94 × ×§×\95×\93×\94 ×\9cש×\98×\97."
                     }
                 },
                 "relation": "לא ניתן לחבר תכונות אלה כיוון שיש להן תפקידים סותרים ביחס.",
                 "restriction": "לא ניתן למזג תכונות אלו כיוון שהמיזוג יפגע ביחס „{relation}”.",
                 "relation": "לא ניתן למזג תכונות אלו כיוון שיש להן תפקידים סותרים ביחס.",
                 "incomplete_relation": "אי אפשר למזג את התכונות האלו כיוון שלפחות אחת מהן לא התקבלה לחלוטין.",
-                "conflicting_tags": "אי אפשר למזג את התכונות האלה כיוון שלחלק מהתגיות שלהן יש ערכים סותרים."
+                "conflicting_tags": "אי אפשר למזג את התכונות האלה כיוון שלחלק מהתגיות שלהן יש ערכים סותרים.",
+                "paths_intersect": "לא ניתן למזג את התכונות האלו כיוון שהנתיב שייווצר יחתוך את עצמו."
             },
             "move": {
                 "title": "העברה",
         "report_a_bug": "דיווח על תקלה",
         "help_translate": "עזרה בתרגום",
         "sidebar": {
-            "key": "  ",
+            "key": "`",
             "tooltip": "פתיחה/סגירה של חלונית צד."
         },
         "feature_info": {
             "modified": "השתנה",
             "deleted": "נמחק",
             "created": "נוצר",
+            "outstanding_errors_message": "נא לפתור את כל השגיאות קודם. נותרו {count}.",
+            "comment_needed_message": "נא להוסיף הערות לערכת שינויים תחילה.",
             "about_changeset_comments": "על הערות לערכות שינויים",
             "about_changeset_comments_link": "//wiki.openstreetmap.org/wiki/Good_changeset_comments",
             "google_warning": "ציינת את Google בהערה הזאת: כדאי לזכור כי העתקה ממפות Google אסורה בתכלית האיסור.",
                 "tooltip_data": "יש למרכז ולהתקרב למפה כדי להתמקד על הנתונים האלה.",
                 "tooltip_issue": "יש למרכז ולהתקרב למפה כדי להתמקד על התקלה הזו."
             },
-            "no_documentation_combination": "אין תיעוד זמין לצירוף תגיות זה",
-            "no_documentation_key": "אין תיעוד זמין למפתח זה",
             "show_more": "הצגת עוד",
             "view_on_osm": "הצגה ב־openstreetmap.org",
             "view_on_keepRight": "הצגה ב־keepright.at",
             "role": "תפקיד",
             "choose": "בחירת סוג תכונה",
             "results": "{n} תוצאות לחיפוש {search}",
-            "reference": "הצגה בוויקי של OpenStreetMap",
-            "edit_reference": "עריכה או תרגום התיאור",
+            "no_documentation_key": "אין תיעוד זמין",
+            "edit_reference": "עריכה/תרגום",
             "wiki_reference": "הצגת התיעוד",
             "wiki_en_reference": "הצגת התיעוד באנגלית",
+            "hidden_preset": {
+                "manual": "{features} מוסתרות. נא להפעיל אותן בחלונית נתוני המפה.",
+                "zoom": "{features} מוסתרות. יש להתקרב כדי להפעיל אותן."
+            },
             "back_tooltip": "שינוי תכונה",
             "remove": "הסרה",
             "search": "חיפוש",
             "location": "מיקום",
             "add_fields": "הוספת שדה:",
             "lock": {
-                "suggestion": "ה \"{label}\" הוא ערך נעול כי יש תג Wikidata. אתה יכול למחוק או לערוך את התג ב\"All tags\" "
+                "suggestion": "השדה „{label}” נעול כי יש תג ויקינתונים. ניתן למחוק או לערוך את התגים תחת הסעיף „כל התגיות”."
             }
         },
         "background": {
                     "tooltip": "התגלו תקלות מפה אוטומטית דרך keepright.at",
                     "title": "תקלות KeepRight"
                 },
+                "improveOSM": {
+                    "tooltip": "הנתונים החסרים זוהו אוטומטית על ידי improveosm.org",
+                    "title": "תקלות ב־ImproveOSM"
+                },
                 "custom": {
                     "tooltip": "ניתן לגרור ולהשליך קובץ נתונים לעמוד או ללחוץ על הכפתור כדי להגדיר",
                     "title": "נתוני מפה בהתאמה אישית",
                 "tooltip": "קווי חשמל, תחנות תת־קרקעיות, מפעלי אנרגיה וכו׳"
             },
             "past_future": {
-                "description": "עבר/עתיד",
+                "description": "ת×\9b×\95× ×\95ת ×¢×\91ר/עת×\99×\93",
                 "tooltip": "מקומות מוצעים, בבנייה, נטושים, הרוסים וכו׳"
             },
             "others": {
-                "description": "×\90×\97ר×\99×\9d",
+                "description": "ת×\9b×\95× ×\95ת ×\90×\97ר×\95ת",
                 "tooltip": "כל השאר"
             }
         },
             "on_wiki": "{tag} ב־wiki.osm.org",
             "used_with": "בשימוש עם {type}"
         },
-        "validations": {
-            "disconnected_highway": "דרך ראשית מנותקת",
-            "disconnected_highway_tooltip": "דרכים אמורות להיות מחוברות לדרכים אחרות או לכניסות לבניינים.",
-            "generic_name": "שם גנרי אפשרי",
-            "generic_name_tooltip": "נראה כי לתכונה זו יש שם גנרי „{name}”. נא להשתמש בשדה השם כדי לתעד את השם הרשמי של התכונה.",
-            "old_multipolygon": "תגיות מסוג רב־מצולע בדרך החיצונית",
-            "old_multipolygon_tooltip": "השימוש בסגנון רב־מצולע זה הופסק. נא להקצות את התג לרב־מצולע ההורה במקום לדרך החיצונית.",
-            "untagged_point": "נקודה ללא תיוג",
-            "untagged_point_tooltip": "נא לבחור בסוג תכונה שמתאר מה הנקודה הזו.",
-            "untagged_line": "קו ללא תיוג",
-            "untagged_line_tooltip": "נא לבחור בסוג תכונה שמתאר מה הקו הזה.",
-            "untagged_area": "שטח ללא תיוג",
-            "untagged_area_tooltip": "נא לבחור בסוג תכונה שמתאר מה השטח הזה.",
-            "untagged_relation": "יחס בלתי מתויג",
-            "untagged_relation_tooltip": "נא לבחור סוג תכונה שמתארת מה היחס הזה.",
-            "many_deletions": "פעולה זו תוביל למחיקת {n} תכונות: {p} מפרקים, {l} קווים, {a} שטחים, {r} קשרים. להמשיך בפעולה? כמו כן, הם יימחקו מהמפה שכולם רואים בכתובת openstreetmap.org.",
-            "tag_suggests_area": "התגית {tag} רומזת שהקו אמור להיות שטח, אך זה לא שטח",
-            "deprecated_tags": "תגיות שנזנחו: {tags}"
-        },
         "zoom": {
             "in": "התקרבות",
             "out": "התרחקות"
         "cannot_zoom": "לא ניתן להתקרב יותר במצב הנוכחי.",
         "full_screen": "החלפת מצב מסך מלא",
         "QA": {
+            "improveOSM": {
+                "title": "איתור עם ImproveOSM",
+                "geometry_types": {
+                    "path": "נתיבים",
+                    "parking": "חנייה",
+                    "road": "דרכים",
+                    "both": "דרכים וחנייה"
+                },
+                "directions": {
+                    "east": "מזרח",
+                    "north": "צפון",
+                    "northeast": "צפון מזרח",
+                    "northwest": "צפון מערב",
+                    "south": "דרום",
+                    "southeast": "דרום מזרח",
+                    "southwest": "דרום מערב",
+                    "west": "מערב"
+                },
+                "error_types": {
+                    "ow": {
+                        "title": "חד־סטרי חסר"
+                    },
+                    "mr": {
+                        "title": "צורה חסרה",
+                        "description": "{num_trips} טיולים שהוקלטו בשטח הזה מרמזים שיתכן שיש כאן {geometry_type} שלא מופה.",
+                        "description_alt": "נתונים מגוף צד־שלישי מרמזים שייתכן שיש כאן {geometry_type} שלא מופה."
+                    },
+                    "tr": {
+                        "title": "הגבלת פנייה חסרה"
+                    }
+                }
+            },
             "keepRight": {
                 "title": "שגיאת KeepRight",
                 "detail_title": "שגיאה",
                 "close_comment": "סגירה והוספת תגובה",
                 "ignore_comment": "התעלמות והוספת תגובה",
                 "error_parts": {
+                    "this_node": "המפרק הזה",
+                    "this_way": "הדרך הזאת",
+                    "this_relation": "היחס הזה",
+                    "this_oneway": "הדרך החד־סטרית הזאת",
+                    "this_highway": "הדרך המהירה הזאת",
+                    "this_railway": "מסילת הרכבת הזאת",
+                    "this_waterway": "הדרך הימית הזאת",
+                    "this_cycleway": "מסלול האופניים הזה",
+                    "this_cycleway_footpath": "דרך האופניים/הולכי הרגל הזאת",
+                    "this_riverbank": "גדת הנהר הזאת",
+                    "this_crossing": "המעבר הזה",
+                    "this_railway_crossing": "מעבר מסילת הרכבת הזה",
+                    "this_bridge": "הגשר הזה",
+                    "this_tunnel": "המנהרה הזו",
+                    "this_boundary": "הגבול הזה",
+                    "this_turn_restriction": "מגבלת פנייה זו",
+                    "this_roundabout": "מעגל התנועה הזה",
+                    "this_mini_roundabout": "הכיכר המזערית הזאת",
+                    "this_track": "מסלול",
+                    "this_feature": "התכונה הזאת",
                     "highway": "כביש בין־עירוני",
                     "railway": "מסילת רכבת",
                     "waterway": "נתיב מים",
+                    "cycleway": "דרך אופניים",
+                    "cycleway_footpath": "דרך אופניים/הולכי רגל",
                     "riverbank": "גדות נהר",
                     "place_of_worship": "בית תפילה",
                     "pub": "פאב",
                     "cafe": "בית קפה",
                     "fast_food": "מזון מהיר",
                     "fuel": "דלק",
+                    "from": "מוצא",
+                    "to": "יעד",
                     "left_hand": "מצד שמאל",
                     "right_hand": "מצד ימין"
                 },
                 "errorTypes": {
+                    "20": {
+                        "title": "מספר מפרקים באותה הנקודה",
+                        "description": "יש יותר ממפרק אחד בנקודה הזאת. מזהי המפרקים: {var1}."
+                    },
+                    "30": {
+                        "title": "שטח לא סגור",
+                        "description": "{var1} מתויג בתגית „{var2}” ואמור להיות לולאה סגורה."
+                    },
+                    "40": {
+                        "title": "חד־סטרי בלתי אפשרי",
+                        "description": "המפרק הראשון {var1} מתוך {var2} לא מחובר לאף דרך אחרת."
+                    },
+                    "41": {
+                        "description": "המפרק האחרון {var1} מתוך {var2} לא מחובר לאף דרך אחרת."
+                    },
+                    "42": {
+                        "description": "אין לך אפשרות להגיע אל {var1} כיוון שכל הדרכים שמגיעות משם הן חד־סטריות."
+                    },
+                    "43": {
+                        "description": "אין לך אפשרות לברוח מ־{var1} כיוון שכל הדרכים שמובילות לשם הן חד־סטריות."
+                    },
+                    "50": {
+                        "title": "כמעט צומת",
+                        "description": "{var1} הוא מאוד קרוב אך אינו מחובר לדרך {var2}."
+                    },
+                    "60": {
+                        "title": "תגית שאינה בשימוש עוד",
+                        "description": "ב־{var1} נעשה שימוש בתגית שהשימוש בה הופסק „{var2}”. נא להשתמש ב־„{var3}” במקום."
+                    },
+                    "70": {
+                        "title": "תגית חסרה",
+                        "description": "ל־{var1} יש תגית חסרה: „{var2}”."
+                    },
+                    "71": {
+                        "description": "ל־{var1} אין תגיות."
+                    },
+                    "74": {
+                        "description": "ל־{var1} יש תגית ריקה: „{var2}”."
+                    },
+                    "75": {
+                        "description": "{var} נושא את השם „{var2}” אך אין לו אף תגית אחרת."
+                    },
+                    "90": {
+                        "title": "דרך לכלי רכב ממונעים ללא תגית ref (הפניה)"
+                    },
+                    "100": {
+                        "title": "מקום סגידה ללא דת",
+                        "description": "{var1} מתויג כמקום של סגידה ולכן נדרשת התגית religion (דת)."
+                    },
+                    "110": {
+                        "title": "נקודת עניין ללא שם",
+                        "description": "{var1} מתויג בתור „{var2}” ולכן נדרשת תגית name (שם)."
+                    },
+                    "120": {
+                        "title": "דרך ללא מפרקים",
+                        "description": "ל־{var1} יש רק מפרק אחד."
+                    },
                     "130": {
                         "title": "דרך מנותקת",
                         "description": "{var1} אינה מחוברת לשאר המפה."
                     },
+                    "150": {
+                        "title": "חציית מסילת רכבת ללא תגית",
+                        "description": "{var1} של דרך מהירה ומסילת רכבת אמור להיות מתויג בתור „railway=crossing” או „railway=level_crossing”."
+                    },
+                    "160": {
+                        "title": "סתירת שכבת מסילת רכבת",
+                        "description": "ישנן דרכים בשכבות אחרות (למשל: מנהרה או גשר) שנפגשות ב־{var1}."
+                    },
+                    "170": {
+                        "title": "פריט שמתויג ב־FIXME",
+                        "description": "{var1} נושא את התגית FIXME‏: {var2}"
+                    },
                     "180": {
                         "title": "יחס ללא סוג",
                         "description": "ל־{var1} חסרה תגית „סוג” (type)."
                     },
                     "190": {
-                        "title": "מפגש ללא צומת"
+                        "title": "מפגש ללא צומת",
+                        "description": "{var1} נפגש עם {var2} {var3} אך אין בנקודה הזאת מפרק של צומת, גשר או מנהרה."
+                    },
+                    "200": {
+                        "title": "דרכים חופפות",
+                        "description": "{var1} חופף על גבי {var2} {var3}."
+                    },
+                    "210": {
+                        "title": "דרך שפוגשת את עצמה",
+                        "description": "קיימת תקלה בלתי מוגדרת עם דרכים שפוגשות את עצמן."
+                    },
+                    "211": {
+                        "description": "{var1} מכיל יותר ממפרק אחד מספר פעמים. המפרקים הם {var2}. יתכן שמדובר בתקלה וגם יתכן שלא."
+                    },
+                    "212": {
+                        "description": "ל־{var1} יש רק שני מפרקים שונים והוא מכיל אחד מהם יותר מפעם אחת."
+                    },
+                    "220": {
+                        "title": "תגית עם איות שגוי",
+                        "description": "{var1} מתויג בתור „{var2}” כאשר „{var3}” נראה כמו „{var4}”."
+                    },
+                    "221": {
+                        "description": "ל־{var1} יש תגית חשודה „{var2}”."
+                    },
+                    "230": {
+                        "title": "סתירת שכבות",
+                        "description": "{var1} הוא צומת של דרכים בשכבות שונות."
+                    },
+                    "231": {
+                        "description": "{var1} הוא צומת של דרכים בשכבות שונות: {var2}.",
+                        "layer": "(שכבה: {layer})"
+                    },
+                    "232": {
+                        "description": "{var1} מתויג ב־„layer={var2}”. זאת לא אמורה להיות שגיאה אבל זה נראה מוזר."
+                    },
+                    "280": {
+                        "title": "תקלת גבול",
+                        "description": "יש תקלה בלתי מוגדרת עם הגבול הזה."
+                    },
+                    "281": {
+                        "title": "לגבול אין שם",
+                        "description": "ל־{var1} אין שם."
+                    },
+                    "282": {
+                        "title": "לגבול חסרה דרגה ניהולית",
+                        "description": "לגבול של {var1} אין ערך מספרי נכון עבור admin_level. לא לערבב בין דרגים ניהוליים (למשל: „6;7”). עליך תמיד לתייג את רמת ה־admin_level הנמוכה ביותר לכל הגבולות."
+                    },
+                    "283": {
+                        "title": "הגבול הוא לא לולאה סגורה",
+                        "description": "הגבול של {var1} אינו לולאה סגורה."
+                    },
+                    "284": {
+                        "title": "הגבול מקוטע",
+                        "description": "הגבול של {var1} נקטע כאן."
+                    },
+                    "285": {
+                        "title": "ה־admin_level של הגבול גבוה מדי"
+                    },
+                    "290": {
+                        "title": "תקלת מגבלה",
+                        "description": "קיימת תקלה בלתי מוגדרת עם המגבלה הזאת."
+                    },
+                    "291": {
+                        "title": "למגבלה חסר סוג",
+                        "description": "ל־{var1} יש סוג מגבלה לא ידוע."
+                    },
+                    "292": {
+                        "title": "למגבלה חסרה דרך „מוצא”",
+                        "description": "ל־{var1} יש {var2} חברים מסוג „מוצא”, אמור להיות רק 1."
+                    },
+                    "293": {
+                        "title": "למגבלה חסרה דרך „יעד”",
+                        "description": "ל־{var1} יש {var2} חברים מסוג „יעד”, אמור להיות רק 1."
+                    },
+                    "294": {
+                        "title": "ההגבלה „מוצא” או „יעד” אינה דרך"
+                    },
+                    "296": {
+                        "title": "זווית מגבלה חריגה"
+                    },
+                    "297": {
+                        "title": "כיוון שגוי של דרך „יעד”",
+                        "description": "ל־{var1} אין התאמה לכיוון של דרך ה־„יעד” {var2}."
                     },
                     "312": {
                         "title": "כיוון הכיכר שגוי",
                         "title": "חיבור הכיכר תלוש מעט",
                         "description": "ל־{var1} יש רק {var2} דרכים אחרות מחוברות. לכיכרות יש בדרך כלל 3 או יותר."
                     },
+                    "370": {
+                        "title": "רווחים כפולים",
+                        "including_the_name": "(לרבות השם {name})"
+                    },
+                    "380": {
+                        "title": "שימוש בלתי פיזי בתגית ספורט"
+                    },
+                    "390": {
+                        "title": "סוג המסלול חסר",
+                        "description": "ל־{var1} אין תגית tracktype (סוג מסלול)."
+                    },
+                    "400": {
+                        "title": "תקלת צורה",
+                        "description": "יש תקלה בלתי מוגדרת עם הצורה שכאן."
+                    },
                     "401": {
                         "title": "חסרה הגבלת פנייה",
                         "description": "הדרכים {var1} ו{var2} מצטרפות בזווית חדה מאוד בנקודה הזו ואין תגית חד־כיווניות או הגבלת פנייה שמונעת פנייה ביניהן."
                 "navigation_drag": "ניתן לגרור את המפה על ידי לחיצה והחזקה של {leftclick} כפתור העכבר השמאלי והזזת העכבר. ניתן גם להשתמש במקשי החצים `↑`, `↓`,  `→` , `←` במקלדת שלך.",
                 "navigation_zoom": "ניתן להתקרב או להתרחק על ידי גלילת העכבר או משטח המעקב, לחלופין, על ידי לחיצה על הכפתורים {plus} / {minus} שבצד המפה. ניתן גם להשתמש במקשים ‚+’ או ‚-’ שבמקלדת שלך.",
                 "features_h": "תכונות המפה",
-                "features": "אנו משתמשים במילה *תכונות* כדי לתאר דברים שמופיעים על המפה. כל דבר בעולם האמתי ניתן למפות כתכונה ב־OpenStreetMap. תכונות מפה מיוצגות במפה באמצעות *נקודות*, *קווים* או *שטחים*."
+                "features": "אנו משתמשים במילה *תכונות* כדי לתאר דברים שמופיעים על המפה. כל דבר בעולם האמתי ניתן למפות כתכונה ב־OpenStreetMap. תכונות מפה מיוצגות במפה באמצעות *נקודות*, *קווים* או *שטחים*.",
+                "nodes_ways": "ב־OpenStreetMap, נקודות לעתים נקראות *מפרקים* וקווים או שטחים נעתים נקראים *דרכים*."
             },
             "editing": {
                 "title": "עריכה ושמירה",
             },
             "qa": {
                 "title": "אבטחת איכות",
-                "tools_h": "כלים"
+                "tools_h": "כלים",
+                "issues_h": "טיפול בתקלות"
             },
             "field": {
                 "restrictions": {
                 }
             }
         },
+        "issues": {
+            "title": "תקלות",
+            "key": "I",
+            "list_title": "תקלות ({count})",
+            "errors": {
+                "list_title": "שגיאות ({count})"
+            },
+            "warnings": {
+                "list_title": "אזהרות ({count})"
+            },
+            "no_issues": {
+                "message": "הכול נראה טוב",
+                "info": "תקלות כלשהן שתצוצנה תופענה כאן בזמן העריכה"
+            },
+            "almost_junction": {
+                "message": "{feature} קרוב מאוד אך לא מחובר אל {feature2}"
+            },
+            "fix": {
+                "move_tags": {
+                    "title": "העברת התגיות",
+                    "annotation": "תגיות הועברו."
+                },
+                "remove_generic_name": {
+                    "title": "הסרת השם",
+                    "annotation": "השם הגנרי הוסר."
+                },
+                "remove_tag": {
+                    "title": "הסרת התגית",
+                    "annotation": "תגית הוסרה."
+                },
+                "reposition_features": {
+                    "title": "מיקום התכונות מחדש"
+                },
+                "select_preset": {
+                    "title": "בחירת סוג תכונה"
+                },
+                "tag_as_disconnected": {
+                    "title": "תיוג כבלתי מחובר"
+                },
+                "upgrade_tag": {
+                    "annotation": "שודרגה תגית ישנה."
+                },
+                "upgrade_tag_combo": {
+                    "annotation": "שילוב של תגיות ישנות שודרג."
+                },
+                "use_bridge_or_tunnel": {
+                    "title": "שימוש בגשר או במנהרה"
+                },
+                "use_different_layers": {
+                    "title": "שימוש בשכבות שונות"
+                },
+                "use_tunnel": {
+                    "title": "שימוש במנהרה"
+                }
+            }
+        },
         "intro": {
             "done": "סיום",
             "ok": "אישור",
                 },
                 "with_selected": {
                     "title": "לאחר בחירת התכונה",
-                    "edit_menu": "החלפת תצוגה של תפריט עריכה"
+                    "edit_menu": "החלפת תצוגה של תפריט עריכה",
+                    "zoom_to": "התמקדות בתכונה הנבחרת"
                 },
                 "vertex_selected": {
                     "title": "עם מפרק שנבחר",
                 "category-building": {
                     "name": "מאפייני בניינים"
                 },
-                "category-golf": {
-                    "name": "מאפייני גולף"
+                "category-golf-area": {
+                    "name": "תכונות גולף"
+                },
+                "category-golf-line": {
+                    "name": "תכונות גולף"
                 },
                 "category-landuse": {
                     "name": "מאפייני קרקע"
                             "title": "פרטי"
                         },
                         "yes": {
-                            "description": "הכניסה מותרת לפי חוק",
+                            "description": "הכניסה מותרת לפי חוק, מקום ציבורי",
                             "title": "מותר"
                         }
                     },
                 "animal_shelter": {
                     "label": "לחיות"
                 },
+                "architect": {
+                    "label": "ארכיטקטורה"
+                },
                 "area/highway": {
                     "label": "סוג"
                 },
                 "junction/ref_oneway": {
                     "label": "מספר צומת"
                 },
+                "junction_line": {
+                    "label": "צומת",
+                    "options": {
+                        "circular": "מעגל תנועה",
+                        "jughandle": "ידית קנקן",
+                        "roundabout": "כיכר"
+                    }
+                },
                 "kerb": {
                     "label": "שפת מדרכה"
                 },
                         "underground": "תת־קרקעי"
                     }
                 },
-                "passenger_information_display": {
-                    "label": "תצוגת נתוני נוסעים"
-                },
                 "payment_multi": {
                     "label": "צורות תשלום"
                 },
                 "restrictions": {
                     "label": "הגבלות פנייה"
                 },
+                "roof/colour": {
+                    "label": "צבע הגג"
+                },
                 "rooms": {
                     "label": "חדרים"
                 },
                     },
                     "placeholder": "טיול הרים, טיול אלפים"
                 },
+                "salt": {
+                    "label": "מלח"
+                },
                 "sanitary_dump_station": {
                     "label": "תחנת סילוק"
                 },
                     },
                     "placeholder": "יש, אין, איסוף עצמי בלבד…"
                 },
+                "tidal": {
+                    "label": "לפי גאות ושפל"
+                },
                 "to": {
                     "label": "יעד"
                 },
                 },
                 "website": {
                     "label": "אתר",
-                    "placeholder": "http://example.com/‎"
+                    "placeholder": "https://example.com"
                 },
                 "wetland": {
                     "label": "סוג"
                     "name": "שעון",
                     "terms": "שעון"
                 },
+                "amenity/clock/sundial": {
+                    "name": "שעון שמש",
+                    "terms": "שעה;שעון;זמן;צל;שמש"
+                },
                 "amenity/college": {
                     "name": "גן המכללה",
                     "terms": "גן המכללה"
                     "terms": "פאסט פוד"
                 },
                 "amenity/fast_food/burger": {
-                    "name": "מזון מהיר המבורגר"
+                    "name": "מזון מהיר המבורגר",
+                    "terms": "מזון מהיר,אוכל מהיר,ג׳אנק,ג'אנק,ג׳אנד פוד,ג'אנק פוד,המבורגר,המבורגריה"
                 },
                 "amenity/fast_food/chicken": {
-                    "name": "מזון מהיר עוף"
+                    "name": "מזון מהיר עוף",
+                    "terms": "מזון מהיר,אוכל מהיר,ג׳אנק,ג'אנק,ג׳אנד פוד,ג'אנק פוד,המבורגר,המבורגריה,עוף,צ׳יקן,צ'יקן,עוף,פאסט פוד"
                 },
                 "amenity/fast_food/fish_and_chips": {
                     "name": "מזון מהיר פיש אנד צ׳יפס",
                     "name": "מזון מהיר קבב",
                     "terms": "שווארמה,קבב,שיפודים,על האש,מנגל,בשרים"
                 },
+                "amenity/fast_food/mexican": {
+                    "name": "מזון מהיר מקסיקני"
+                },
                 "amenity/fast_food/pizza": {
                     "name": "מזון מהיר פיצה",
                     "terms": "פיצה,איטלקי,גבינה,עגבניות,קראסט,חתיכה"
                     "terms": "גני מנזר,שטחי מנזר"
                 },
                 "amenity/money_transfer": {
-                    "name": "תחנת העברת כספים"
+                    "name": "תחנת העברת כספים",
+                    "terms": "צ׳יינג׳,צ'יינג',חלפנות כספים,חלפן,המרת מטבע"
                 },
                 "amenity/motorcycle_parking": {
                     "name": "חניית אופנועים",
                     "terms": "אזור חניה"
                 },
                 "amenity/payment_centre": {
-                    "name": "מרכז תשלום"
+                    "name": "מרכז תשלום",
+                    "terms": "נקודת תשלום,עמדת תשלום,דלפק תשלום"
                 },
                 "amenity/payment_terminal": {
                     "name": "מסוף תשלום"
                 "amenity/pharmacy": {
                     "name": "דלפק בית מרקחת"
                 },
+                "amenity/photo_booth": {
+                    "name": "תא צילום"
+                },
                 "amenity/place_of_worship": {
                     "name": "בית תפילה",
                     "terms": "בית תפילה"
                     "name": "מסעדה מקסיקנית"
                 },
                 "amenity/restaurant/noodle": {
-                    "name": "מסעדת אטריות"
+                    "name": "מסעדת אטריות",
+                    "terms": "ראמן;ספגטי;אטריות"
                 },
                 "amenity/restaurant/pizza": {
-                    "name": "מסעדת פיצה"
+                    "name": "מסעדת פיצה",
+                    "terms": "פיצריה;איטלקי"
                 },
                 "amenity/restaurant/seafood": {
                     "name": "מסעדת פרות ים"
                     "name": "בית סטייק"
                 },
                 "amenity/restaurant/sushi": {
-                    "name": "מסעדת סושי"
+                    "name": "מסעדת סושי",
+                    "terms": "סושיה"
                 },
                 "amenity/restaurant/thai": {
                     "name": "מסעדה תאילנדית"
                     "terms": "בתים בשורות"
                 },
                 "building/train_station": {
-                    "name": "תחנת רכבת"
+                    "name": "×\9e×\91× ×\94 ×ª×\97נת ×¨×\9b×\91ת"
                 },
                 "building/transportation": {
                     "name": "מבנה תחבורה",
                     "name": "מכשול חול",
                     "terms": "מכשול חול"
                 },
+                "golf/cartpath": {
+                    "name": "מסלול לרכבי גולף"
+                },
+                "golf/cartpath_service": {
+                    "name": "מסלול לרכבי גולף / כביש שירות"
+                },
+                "golf/driving_range": {
+                    "name": "מטווח אימונים",
+                    "terms": "דרייבינג ריינג׳;דרייבינג ריינג';מטווח חבטות;מטווח אימונים לטווח בינוני;מטווח אימונים לטווח קצר;מגרש גולף"
+                },
                 "golf/fairway": {
                     "name": "אזור פתוח בגולף",
                     "terms": "אזור פתוח בגולף"
                     "name": "גומת גולף",
                     "terms": "חור גולף"
                 },
-                "golf/lateral_water_hazard_area": {
-                    "name": "מכשול מים",
-                    "terms": "מכשול מים"
+                "golf/lateral_water_hazard": {
+                    "name": "מכשול מים צדדי"
                 },
-                "golf/lateral_water_hazard_line": {
-                    "name": "מכשול מים צדדי",
-                    "terms": "מכשול מים צדי"
+                "golf/path": {
+                    "name": "נתיב הליכה לגולף"
                 },
                 "golf/rough": {
                     "name": "שטח קשה בגולף",
                     "name": "עמדת חביטה בגולף",
                     "terms": "עמדת חביטה בגולף"
                 },
-                "golf/water_hazard_area": {
-                    "name": "מכשול מים",
-                    "terms": "מכשול מים"
-                },
-                "golf/water_hazard_line": {
-                    "name": "מכשול מים",
-                    "terms": "מכשול מים"
+                "golf/water_hazard": {
+                    "name": "מכשול מים"
                 },
                 "healthcare": {
                     "name": "מוסד טיפול בריאותי",
                     "terms": "צומת"
                 },
                 "landuse": {
-                    "name": "שימוש בקרקע",
-                    "terms": "קרקע בשימוש"
+                    "name": "שימוש בקרקע"
                 },
                 "landuse/allotments": {
                     "name": "גינה קהילתית",
                     "terms": "כרם"
                 },
                 "leisure": {
-                    "name": "אזור פנאי",
-                    "terms": "אזור פנאי"
+                    "name": "אזור פנאי"
                 },
                 "leisure/adult_gaming_centre": {
                     "name": "מרכז בידור למבוגרים",
                     "name": "שולחן פיקניק",
                     "terms": "שולחן פיקניק"
                 },
+                "leisure/picnic_table/chess": {
+                    "name": "שולחן שח",
+                    "terms": "שח מט;שחמט"
+                },
                 "leisure/pitch": {
                     "name": "מגרש ספורט",
                     "terms": "צגרש,כדורגל,כדורסל,טניס"
                     "name": "מרכז ספורט",
                     "terms": "מרכז ספורט"
                 },
+                "leisure/sports_centre/climbing": {
+                    "name": "קיר טיפוס",
+                    "terms": "חדר כושר לטיפוס,חדר כושר,כושר"
+                },
                 "leisure/sports_centre/swimming": {
                     "name": "בריכות שחייה",
                     "terms": "בריכות שחייה"
                     "terms": "קו"
                 },
                 "man_made": {
-                    "name": "מעשה ידי אדם",
-                    "terms": "מעשה ידי אדם"
+                    "name": "מעשה ידי אדם"
                 },
                 "man_made/adit": {
                     "name": "פתח גישה",
                     "terms": "מקטע חיץ,הפרדה"
                 },
                 "man_made/embankment": {
-                    "name": "סוללה"
+                    "name": "סוללה",
+                    "terms": "סוללה;הגבהה;עפר;הפרדה;חוצץ;חצץ"
                 },
                 "man_made/flagpole": {
                     "name": "עמוד דגל",
                     "name": "מגדל",
                     "terms": "מגדל"
                 },
+                "man_made/tower/bell_tower": {
+                    "name": "מגדל פעמון",
+                    "terms": "פעמון,תפילה"
+                },
                 "man_made/tower/communication": {
-                    "name": "מגדל תקשורת"
+                    "name": "מגדל תקשורת",
+                    "terms": "שידור,אנטנה,תשדורת,תקשורת,רדיו,תורן שידור,תורן תקשורת,תורן שידור,עמוד"
+                },
+                "man_made/tower/minaret": {
+                    "name": "צריח מסגד",
+                    "terms": "אסלאם,איסלאם,מוסלמים,מסגד,מינרט,מינארט"
                 },
                 "man_made/tower/observation": {
                     "name": "מגדל תצפית"
                     "terms": "בור טלקום"
                 },
                 "natural": {
-                    "name": "מאפייני טבע",
-                    "terms": "מאפייני טבע"
+                    "name": "מאפייני טבע"
                 },
                 "natural/bare_rock": {
                     "name": "סלע חשוף",
                     "name": "מים",
                     "terms": "מים"
                 },
+                "natural/water/basin": {
+                    "name": "אגן"
+                },
                 "natural/water/canal": {
                     "name": "תעלת מים"
                 },
                     "name": "שנאי",
                     "terms": "שנאי"
                 },
-                "public_transport/linear_platform": {
-                    "name": "תחנת / רציף תחבורה ציבורית",
-                    "terms": "רציף / תחנת תחבורה ציבורית"
-                },
-                "public_transport/linear_platform_aerialway": {
-                    "name": "תחנה / רציף של תחבורת כבל",
-                    "terms": "תחנת רכבל,רציף רכבל,רציף / תחנה של תחבורת כבל"
-                },
-                "public_transport/linear_platform_bus": {
-                    "name": "תחנת / רציף אוטובוס",
-                    "terms": "רציף / תחנת אוטובוס"
-                },
-                "public_transport/linear_platform_ferry": {
-                    "name": "תחנת / רציף מעבורת",
-                    "terms": "רציף / תחנת מעבורת"
-                },
-                "public_transport/linear_platform_light_rail": {
-                    "name": "תחנת / רציף רכבת קלה",
-                    "terms": "רציף / תחנת רכבת קלה"
-                },
-                "public_transport/linear_platform_monorail": {
-                    "name": "תחנת / רציף מונורייל",
-                    "terms": "רציף / תחנת מונורייל"
-                },
-                "public_transport/linear_platform_subway": {
-                    "name": "תחנת / רציף רכבת תחתית",
-                    "terms": "רציף / תחנת רכבת תחתית"
-                },
-                "public_transport/linear_platform_train": {
-                    "name": "תחנת / רציף רכבת",
-                    "terms": "רציף / תחנת רכבת"
-                },
-                "public_transport/linear_platform_tram": {
-                    "name": "תחנת / רציף חשמלית",
-                    "terms": "רציף / תחנת טראם,רציף / תחנת חשמלית,תחנת / רציף טראם"
-                },
-                "public_transport/linear_platform_trolleybus": {
-                    "name": "תחנת / רציף טרוליבוס",
-                    "terms": "רציף / תחנת טרוליבוס"
-                },
                 "public_transport/platform": {
                     "name": "תחנת / רציף תחבורה ציבורית",
                     "terms": "רציף / תחנת תחבורה ציבורית"
                     "terms": "מוסך"
                 },
                 "shop/caravan": {
-                    "name": "סוכנות קרוואנים"
+                    "name": "סוכנות קרוואנים",
+                    "terms": "רכב,מכונית,נגרר,אוטו"
                 },
                 "shop/carpet": {
                     "name": "חנות שטיחים",
                     "terms": "חנות יינות"
                 },
                 "tourism": {
-                    "name": "תיירות",
-                    "terms": "תיירות"
+                    "name": "תיירות"
                 },
                 "tourism/alpine_hut": {
                     "name": "בקטה הררית",
                 "attribution": {
                     "text": "GSI יפן"
                 },
+                "description": "צילומי אוויר של GSI יפן. לא מיושר אבל מעט חדש יותר ו/או מכוסה בצורה קצת שונה מצילומי GSI מיושרים.",
                 "name": "צילומי אוויר של GSI יפן"
             },
             "gsi.go.jp_std_map": {
             },
             "osm-india-telegram": {
                 "name": "OpenStreetMap הודו טלגרם",
-                "description": "תצ×\98רף ×\9c×\9eשפ×\97תנ×\95 {url}"
+                "description": "×\9e×\95×\96×\9e× ×\99×\9d ×\9c×\9eשפ×\97×\94: {url}"
             },
             "OSM-india-twitter": {
                 "name": "הטוויטר של OpenStreetMap הודו",
             },
             "osm-india-youtube": {
                 "name": "OpenStreetMap הודו יוטוב",
-                "description": "תצ×\98רף ×\9cער×\95×¥ ×©×\9c× ×\95 ×\91 {url}"
+                "description": "×\9e×\95×\96×\9e× ×\99×\9d ×\9cער×\95×¥ ×©×\9c× ×\95: {url}"
             },
             "OSM-India-Puducherry-Facebook": {
                 "name": "תנועת החומרה והתכנה החופשית - פייסבוק",
                 "description": "שיפור OpenStreetMap באינדונזיה",
                 "extendedDescription": "מעניין אותך מיפוי באינדונזיה? יש לך שאלות? אולי ליצור קשר עם הקהילה המקומית? ניתן להצטרף אלינו ב־{Url}. כולם מוזמנים!"
             },
+            "osm-iran-aparat": {
+                "name": "ה־Aparat של OpenStreetMap איראן",
+                "description": "מוזמנים לערוץ שלנו בכתובת {url}",
+                "extendedDescription": "משאב טוב של סרטונים על כל מה שקשור ב־OpenStreetMap. בעיקר בפרסית."
+            },
+            "osm-iran-forum": {
+                "name": "הפורום המקוון של OpenStreetMap איראן",
+                "description": "הפורום המקוון של OpenStreetMap איראן",
+                "extendedDescription": "פורום מקוון למשתמשי OpenStreetMap באיראן. אפשר לשאול שאלות ולדון עם אחרים באופן חופשי!"
+            },
+            "osm-iran-telegram": {
+                "name": "הטלגרם של OpenStreetMap איראן",
+                "description": "מזמינים אותך להצטרף לערוץ הטלגרם שלנו בכתובת {url}. יש לנו גם קבוצת על של משתמשי OSM רבים שמתעניינים באיראן. ניתן למצוא את הקישור אליה בביוגרפיה של הערוץ."
+            },
             "OSM-japan-facebook": {
                 "name": "קהילת OpenStreetMap יפן",
                 "description": "ממפים ומשתמשים OpenStreetMap ביפן"
             },
             "osm-asia-telegram": {
                 "name": "OSM אסיה טלגרם",
-                "description": "תצ×\98רף ×\9c×\9eשפ×\97תנ×\95 {url}"
+                "description": "×\9e×\95×\96×\9e× ×\99×\9d ×\9c×\9eשפ×\97×\94: {url}"
             },
             "OSM-PH-facebook": {
                 "name": "הפייסבוק של OpenStreetMap PH (הפיליפינים)",
                 "description": "Talk-is היא קבוצת הדיוור הרשמית של קהילת OSM האיסלנדית"
             },
             "is-twitter": {
+                "name": "OSM איסלנד בטוויטר",
                 "description": "הטוויטר של OpenStreetMap באיסלנד"
             },
             "it-facebook": {
                 "name": "קבוצת הדיוור של OpenStreetMap נורווגיה",
                 "description": "קבוצת דיוור לממפי, משתמשי, מפתחי וחובבי OpenStreetMap בנורווגיה"
             },
+            "no-telegram": {
+                "name": "‎@OSM_no בטלגרם",
+                "description": "הטלגרם של OpenStreetMap נורבגיה"
+            },
             "OSM-PL-facebook-group": {
                 "name": "קבוצת הפייסבוק של OpenStreetMap פולין",
                 "description": "קבוצה של ממפים ומשתמשים ב־OpenStreetMap בפולין"
index 8d1d7642190f5f7ffed24c2d018211188df1e355..881d53615f3f6bde46b7a977e5e77aa3a1d04342 100644 (file)
                 "category-building": {
                     "name": "इमारत विशॆषता"
                 },
-                "category-golf": {
-                    "name": "गोल्फ विशॆषता"
-                },
                 "category-landuse": {
                     "name": "भूमि उपयोग विशॆषता"
                 },
index bdf8b9078d7a6b3739444d1a0758a8307216b24e..147384e10ac518e28606d50aee84ef5584b97086 100644 (file)
             "locating": "Lociram, molim pričekaj..."
         },
         "inspector": {
-            "no_documentation_combination": "Ne postoji dokumentacija za ovu kombinaciju oznaka",
-            "no_documentation_key": "Ne postoji dokumentacija za ovaj ključ.",
             "show_more": "Prikaži više",
             "view_on_osm": "Pogledaj na openstreetmap.org",
             "all_fields": "Sva polja",
             "role": "Uloga",
             "choose": "Odaberi vrstu elementa",
             "results": "{n} rezultata za {search}",
-            "reference": "Pogledaj na OpenStreetMap Wiki",
             "back_tooltip": "Promijeni element karte",
             "remove": "Ukloni",
             "search": "Pretraži",
                 "tooltip": "Dalekovodi, elektrane, trafostanice, itd."
             },
             "past_future": {
-                "description": "Prošlost/Budućnost",
                 "tooltip": "U planu, u izgradnji, napušteno, srušeno, itd."
             },
             "others": {
-                "description": "Ostali",
                 "tooltip": "Sve ostalo"
             }
         },
             "on_wiki": "{tag} na wiki.osm.org",
             "used_with": "koristi se sa {type}"
         },
-        "validations": {
-            "disconnected_highway": "Cesta je razdvojena",
-            "disconnected_highway_tooltip": "Prometnice bi trebale biti spojene na druge prometnice ili na ulaz u zgradu.",
-            "old_multipolygon": "Oznake multipoligona na vanjskom putu",
-            "old_multipolygon_tooltip": "Ovaj stil multipoligona je zastario. Molim dodijeli oznake na roditeljski multipoligon umjesto na vanjski put.",
-            "untagged_point": "Neoznačena točka",
-            "untagged_point_tooltip": "Odaberi element karte koji opisuje što ova točka predstavlja.",
-            "untagged_line": "Neoznačena linija",
-            "untagged_line_tooltip": "Odaberi element karte koji opisuje što ova linija predstavlja.",
-            "untagged_area": "Neoznačeno područje",
-            "untagged_area_tooltip": "Odaberi element karte koji opisuje što ovo područje predstavlja.",
-            "untagged_relation": "Neoznačena relacija",
-            "untagged_relation_tooltip": "Odaberi element karte koji opisuje što ova relacija predstavlja.",
-            "many_deletions": "Brišeš {n} elemenata: {p} točaka, {l} linija, {a} područja, {r} relacija. Jesi li siguran/na da želiš to učiniti? Time ćeš obrisati elemente sa karte koju svi vide na openstreetmap.org.",
-            "tag_suggests_area": "Oznaka {tag} ukazuje da bi linija trebala biti područje, ali nije područje",
-            "deprecated_tags": "Zastarjele oznake: {tags}"
-        },
         "zoom": {
             "in": "Približi",
             "out": "Udalji"
                 "category-building": {
                     "name": "Vrste građevina"
                 },
-                "category-golf": {
-                    "name": "Elementi golf igrališta"
-                },
                 "category-landuse": {
                     "name": "Načini korištenja zemljišta"
                 },
                     "label": "Vrsta"
                 },
                 "website": {
-                    "label": "Web stranica",
-                    "placeholder": "http://primjer.hr/"
+                    "label": "Web stranica"
                 },
                 "wetland": {
                     "label": "Vrsta"
                 "building/terrace": {
                     "name": "Kuće u nizu"
                 },
-                "building/train_station": {
-                    "name": "Željeznički kolodvor"
-                },
                 "building/university": {
                     "name": "Zgrada sveučilišta"
                 },
                     "terms": "linija,crta"
                 },
                 "man_made": {
-                    "name": "Ljudske tvorevine",
-                    "terms": "ljudske tvorevine,napravio čovjek,umjetno,ljudska tvorevina u okolišu"
+                    "name": "Ljudske tvorevine"
                 },
                 "man_made/adit": {
                     "name": "Položeni ulaz u rudnik"
                     "terms": "vodocrpilište,vodovod,vodovodna instalacija,vađenje pitke vode"
                 },
                 "natural": {
-                    "name": "Prirodno",
-                    "terms": "prirodno,prirodne,prirodan,prirodni,prirodno,šuma,močvara,drvored,drvo,krš,blato,pijesak,livada,pašnjak,prirodni elementi"
+                    "name": "Prirodno"
                 },
                 "natural/bare_rock": {
                     "name": "Goli kamen"
                     "name": "Prodavaonica vina"
                 },
                 "tourism": {
-                    "name": "Turizam",
-                    "terms": "turizam,seoski turizam"
+                    "name": "Turizam"
                 },
                 "tourism/alpine_hut": {
                     "name": "Planinarski dom",
index 0fb8e83f20a4f5f4d7ce048c5ad0acad8afc8cb4..558906acfe394d8c4b7fe0ac3a21febf915a200d 100644 (file)
                 "restriction": "Az elemek nem egyesíthetőek, mert ez megsértene egy „{relation}” kapcsolatot.",
                 "relation": "Az elemek nem egyesíthetőek, mert néhány kapcsolati szerep ütközik.",
                 "incomplete_relation": "Nem sikerült az egyesítés, mert legalább egy elem nincs teljesen letöltve.",
-                "conflicting_tags": "Az elemek nem egyesíthetőek, mert néhány címke értéke ütközik."
+                "conflicting_tags": "Az elemek nem egyesíthetőek, mert néhány címke értéke ütközik.",
+                "paths_intersect": "Az elemek nem egyesíthetőek, mert az így létrejövő útvonal metszené önmagát."
             },
             "move": {
                 "title": "Mozgatás",
                 "tooltip_data": "Térkép fókuszálása erre az adatra.",
                 "tooltip_issue": "Térkép fókuszálása erre a problémára."
             },
-            "no_documentation_combination": "Ehhez a címkekombinációhoz nem érhető el dokumentáció",
-            "no_documentation_key": "Ehhez a kulcshoz nem érhető el dokumentáció",
             "show_more": "Mutass többet",
             "view_on_osm": "Megtekintés openstreetmap.org-on",
             "view_on_keepRight": "Megtekintés a keepright.at-en",
             "role": "Szerep",
             "choose": "Jelölj ki egy elemtípust",
             "results": "{n} találat {search} keresésre",
-            "reference": "Megtekintés az OpenStreetMap Wikiben",
-            "edit_reference": "Leírás szerkesztése vagy fordítása",
+            "edit_reference": "szerkesztés/fordítás",
             "wiki_reference": "Dokumentáció megtekintése",
             "wiki_en_reference": "Dokumentáció megtekintése angolul",
             "back_tooltip": "Elem megváltoztatása",
                     "tooltip": "Automatikusan észlelt térkép problémák a keepright.at-ről",
                     "title": "KeepRight problémák"
                 },
+                "improveOSM": {
+                    "tooltip": "Az improveosm.org által automatikusan észlelt hiányzó adat",
+                    "title": "ImproveOSM problémák"
+                },
                 "custom": {
                     "tooltip": "Húzz egy adatfájlt az oldalra, vagy kattints a gombra a beállításhoz",
                     "title": "Egyedi térképadat",
                 "tooltip": "Távvezetékek, erőművek, alállomások, stb."
             },
             "past_future": {
-                "description": "Múlt/Jövő",
                 "tooltip": "Tervezett, építés alatt, elhagyott, elbontott, stb."
             },
             "others": {
-                "description": "Egyebek",
                 "tooltip": "Minden más"
             }
         },
             "on_wiki": "{tag} a wiki.osm.org-on",
             "used_with": "a következővel használva: {type}"
         },
-        "validations": {
-            "disconnected_highway": "Szétválasztott út",
-            "disconnected_highway_tooltip": "Az utakat össze kell kötni más utakkal vagy épület bejáratokkal.",
-            "generic_name": "Lehetséges általános név",
-            "generic_name_tooltip": "Úgy tűnik, ennek az elemnek egy általános neve van: „{name}”. Kérjük, hogy a név mezőt csak az elem hivatalos nevének rögzítésére használd.",
-            "old_multipolygon": "Multipoligon-címkék vannak a külső vonalon",
-            "old_multipolygon_tooltip": "Ez a multipoligon-stílus elavult. A külső vonal helyett a szülő multipoligonhoz kapcsold a címkéket.",
-            "untagged_point": "Címkézetlen pont",
-            "untagged_point_tooltip": "Jelöld ki azt az elemtípust, amely leírja, hogy mi ez a pont.",
-            "untagged_line": "Címkézetlen vonal",
-            "untagged_line_tooltip": "Jelöld ki azt az elemtípust, amely leírja, hogy mi ez a vonal.",
-            "untagged_area": "Címkézetlen terület",
-            "untagged_area_tooltip": "Jelöld ki azt az elemtípust, amely leírja, hogy mi ez a terület.",
-            "untagged_relation": "Címkézetlen kapcsolat",
-            "untagged_relation_tooltip": "Jelölj ki egy elemtípust, amely leírja, hogy mi ez a kapcsolat.",
-            "many_deletions": "{n} elem: {p} pont, {l} vonal, {a} terület és {r} kapcsolat törlésére készülsz. Biztosan ezt szeretnéd? Ez törli őket arról a térképről, amelyet mindenki más is lát az openstreetmap.org oldalon.",
-            "tag_suggests_area": "A(z) {tag} címke alapján a vonal terület kéne legyen, de ez nem terület",
-            "deprecated_tags": "Elavult címkék: {tags}"
-        },
         "zoom": {
             "in": "Nagyítás",
             "out": "Kicsinyítés"
         "cannot_zoom": "Nem lehet jobban távolítani ebben a módban.",
         "full_screen": "Váltás teljes képernyőre",
         "QA": {
+            "improveOSM": {
+                "geometry_types": {
+                    "path": "gyalogutak",
+                    "parking": "parkolók",
+                    "road": "utak",
+                    "both": "utak és parkolók"
+                },
+                "directions": {
+                    "east": "kelet",
+                    "north": "észak",
+                    "northeast": "északkelet",
+                    "northwest": "északnyugat",
+                    "south": "dél",
+                    "southeast": "délkelet",
+                    "southwest": "délnyugat",
+                    "west": "nyugat"
+                },
+                "error_types": {
+                    "ow": {
+                        "title": "Hiányzó egyirányú jelölés",
+                        "description": "{highway} ezen szakaszán rögzített {num_trips} utazás {percentage} százaléka innen: {from_node} ide: {to_node} tart. Valószínűleg hiányzik az „egyirányú” címke."
+                    },
+                    "mr": {
+                        "title": "Hiányzó geometria",
+                        "description": "Az ezen a területen rögzített {num_trips} utazás alapján itt valószínűleg feltérképezetlen {geometry_type} vannak."
+                    }
+                }
+            },
             "keepRight": {
                 "title": "KeepRight hiba",
                 "detail_title": "Hiba",
                 "category-building": {
                     "name": "Épületek"
                 },
-                "category-golf": {
-                    "name": "Golfpályaelemek"
-                },
                 "category-landuse": {
                     "name": "Területhasználati módok"
                 },
                         "underground": "Földalatti"
                     }
                 },
-                "passenger_information_display": {
-                    "label": "Utasinformációs kijelző"
-                },
                 "payment_multi": {
                     "label": "Fizetési típusok"
                 },
                     "label": "Típus"
                 },
                 "website": {
-                    "label": "Weboldal",
-                    "placeholder": "http://example.com/"
+                    "label": "Weboldal"
                 },
                 "wetland": {
                     "label": "Típus"
                     "name": "Sorház",
                     "terms": "házsor"
                 },
-                "building/train_station": {
-                    "name": "Vasútállomás-épület"
-                },
                 "building/transportation": {
                     "name": "Közlekedési épület"
                 },
                     "name": "Golflyuk",
                     "terms": "Golflyuk"
                 },
-                "golf/lateral_water_hazard_area": {
-                    "name": "Keresztirányú vízakadály",
-                    "terms": "keresztirányú vízi akadály, oldalirányú vízi akadály, oldalirányú vízakadály"
-                },
-                "golf/lateral_water_hazard_line": {
-                    "name": "Keresztirányú vízakadály",
-                    "terms": "keresztirányú vízi akadály, oldalirányú vízi akadály, oldalirányú vízakadály"
-                },
                 "golf/rough": {
                     "name": "Rough - vágatlan fűves rész",
                     "terms": "Rough -  vágatlan fűves rész"
                     "name": "Tee box - Elütőhely",
                     "terms": "Tee box - Elütőhely"
                 },
-                "golf/water_hazard_area": {
-                    "name": "Vízakadály",
-                    "terms": "vízi akadály"
-                },
-                "golf/water_hazard_line": {
-                    "name": "Vízakadály",
-                    "terms": "vízi akadály"
-                },
                 "healthcare": {
                     "name": "Egészségügyi létesítmény",
                     "terms": "klinika, orvos, betegség, egészség, intézet, műtét, wellness"
                     "terms": "Elágazás, útkereszteződés, csomópont"
                 },
                 "landuse": {
-                    "name": "Területhasználat",
-                    "terms": "föld,terület,használat,funkció"
+                    "name": "Területhasználat"
                 },
                 "landuse/allotments": {
                     "name": "Közösségi kert",
                     "terms": "szőlőskert, szőlőültetvény"
                 },
                 "leisure": {
-                    "name": "Szabadidő",
-                    "terms": "szabadidő"
+                    "name": "Szabadidő"
                 },
                 "leisure/adult_gaming_centre": {
                     "name": "Felnőtt játékközpont",
                     "terms": "Vonal"
                 },
                 "man_made": {
-                    "name": "Építmények",
-                    "terms": "Ember alkotta"
+                    "name": "Építmények"
                 },
                 "man_made/adit": {
                     "name": "Bányatárna (vízszintes)",
                     "terms": "akna, szekrény, távközlés"
                 },
                 "natural": {
-                    "name": "Természet",
-                    "terms": "Természet"
+                    "name": "Természet"
                 },
                 "natural/bare_rock": {
                     "name": "Csupasz szikla",
                     "name": "Transzformátor",
                     "terms": "transzformátor, trafó, áramátalakító"
                 },
-                "public_transport/linear_platform_bus": {
-                    "name": "Buszmegálló peron"
-                },
                 "public_transport/platform_ferry": {
                     "name": "Kompmegállo peron"
                 },
                     "terms": "borászat, italbolt, borkereskedés"
                 },
                 "tourism": {
-                    "name": "Turizmus",
-                    "terms": "Idegenforgalom"
+                    "name": "Turizmus"
                 },
                 "tourism/alpine_hut": {
                     "name": "Menedékház",
index 4f744043e433cf77d72f460a57e7c49eb89b832e..6b6a3e59f0787657652eb473085c5a7cbdb9bd45 100644 (file)
             "title": "Ցոյց տալ իմ տեղադրութիւնը"
         },
         "inspector": {
-            "no_documentation_combination": "Պիտակների այս խմբի համար ձեռնարկ չկայ։",
-            "no_documentation_key": "Այս բանալու համար ձեռնարկ չկայ",
             "show_more": "Ցուցադրել աւելին",
             "view_on_osm": "Դիտել openstreetmap.org ֊ում",
             "all_tags": "Բոլոր պիտակները",
             "role": "Դեր",
             "choose": "Ընտրել յատկութեան տեսակը",
             "results": "{n} արդիւնք {search} ֊ի համար",
-            "reference": "Դիտել OpenStreetMap Wiki ֊ում",
             "back_tooltip": "Փոխել յատկութիւնը",
             "remove": "Հեռացնել",
             "search": "Փնտրել",
                 "tooltip": "Էլեկտրական Գծեր, Էլեկտրակայաններ, եւ այլն։"
             },
             "past_future": {
-                "description": "Անցեալ/Ապագայ",
                 "tooltip": "Առաջարկուած, Շինարարութիւն, Լքուած, Քանդուած, եւ այլն։"
             },
             "others": {
-                "description": "Այլ",
                 "tooltip": "Մնացած Ամէնը"
             }
         },
             "on_wiki": "{tag} wiki.osm.org ֊ում",
             "used_with": "օգտագործւում է {type} ֊ի հետ"
         },
-        "validations": {
-            "untagged_point": "Չպիտակուած կէտ",
-            "untagged_point_tooltip": "Ընտրիր յատկութիւն, որ բնորոշում է այս գիծը։",
-            "untagged_line": "Չպիտակուած գիծ",
-            "untagged_line_tooltip": "Ընտրիր յատկութեան տիպը, որ բնորոշում է այս գիծը։",
-            "untagged_area": "Չպիտակուած տիրոյթ",
-            "untagged_area_tooltip": "Ընտրիր յատկութեան տիպը, որ բնորոշում է այս տիրոյթը",
-            "tag_suggests_area": "{tag} պիտակը ենթադրում է, որ գիծը պէտք է լինի տիրոյթ, բայց այն տիրոյթ չէ",
-            "deprecated_tags": "Հնացած պիտակներ՝ {tags}"
-        },
         "cannot_zoom": "Այս ռեժիմում հնարաւոր չէ աւելի փոքրացնել։",
         "full_screen": "Դարձնել լիաէկրան",
         "mapillary": {
                 "category-building": {
                     "name": "Շինութեան Յատկութիւններ"
                 },
-                "category-golf": {
-                    "name": "Ծովածոցի յատկութիւններ"
-                },
                 "category-landuse": {
                     "name": "Տիրոյթի օգտագործման յատկութիւններ"
                 },
index 45558be55b6cc10716452c7450c6972f39ba3099..cb0e1e949c18e7832fa801d8b08e1be268647810 100644 (file)
             "locating": "Sedang mencari, mohon tunggu..."
         },
         "inspector": {
-            "no_documentation_combination": "Tidak ada dokumentasi yang tersedia untuk kombinasi tag ini",
-            "no_documentation_key": "Tidak ada dokumentasi tersedia untuk kunci ini",
             "show_more": "Tampilkan Lainnya",
             "view_on_osm": "Lihat di openstreetmap.org",
             "all_fields": "Semua wilayah",
             "role": "Aturan",
             "choose": "Pilih Tipe Fitur",
             "results": "{n} hasil untuk {search}",
-            "reference": "Lihat di OpenStreetMap Wiki",
             "back_tooltip": "Ubah Fitur",
             "remove": "Buang",
             "search": "Cari",
                 "tooltip": "Jalur Listrik, Pembangkit Listrik, Gardu, dsb."
             },
             "past_future": {
-                "description": "Masa Lalu/Akan Datang",
                 "tooltip": "Diajukan, Dibangun, Ditinggalkan, Diruntuhkan, dsb."
             },
             "others": {
-                "description": "Lainnya",
                 "tooltip": "Selain yang disebutkan"
             }
         },
             "on_wiki": "{tag} di wiki.osm.org",
             "used_with": "digunakan dengan {type}"
         },
-        "validations": {
-            "untagged_point": "Titik tanpa tag",
-            "untagged_point_tooltip": "Pilih tipe fitur yang menjelaskan apa identitas poin ini.",
-            "untagged_line": "Garis tanpa tag",
-            "untagged_line_tooltip": "Pilih tipe fitur yang menjelaskan apa identitas garis ini.",
-            "untagged_area": "Area tanpa tag",
-            "untagged_area_tooltip": "Pilih tipe fitur yang menjelaskan apa identitas area ini.",
-            "tag_suggests_area": "Penanda {tag} menyarankan garis sebaiknya dalam bentuk area, tapi ini bukan sebuah area",
-            "deprecated_tags": "Tag sudah tidak dipergunakan: {tags}"
-        },
         "cannot_zoom": "Tidak bisa memperbesar tampilan lebih jauh dengan mode ini.",
         "full_screen": "Tombol Layar Penuh",
         "mapillary": {
                     "label": "Tipe"
                 },
                 "website": {
-                    "label": "Website",
-                    "placeholder": "http://example.com/"
+                    "label": "Website"
                 },
                 "wetland": {
                     "label": "Tipe"
                 "building/stable": {
                     "name": "Kandang Kuda"
                 },
-                "building/train_station": {
-                    "name": "Stasiun Kereta"
-                },
                 "building/university": {
                     "name": "Bangunan Universitas",
                     "terms": "Universitas, Kampus"
                     "terms": "Pertigaan, Perempatan"
                 },
                 "landuse": {
-                    "name": "Guna Lahan",
-                    "terms": "Guna Lahan"
+                    "name": "Guna Lahan"
                 },
                 "landuse/basin": {
                     "name": "Cekungan"
                     "terms": "Garis"
                 },
                 "man_made": {
-                    "name": "Buatan manusia",
-                    "terms": "Buatan Manusia"
+                    "name": "Buatan manusia"
                 },
                 "man_made/breakwater": {
                     "name": "Pemecah Gelombang",
                     "terms": "Alkohol, Minum, Minuman Beralkohol"
                 },
                 "tourism": {
-                    "name": "Pariwisata",
-                    "terms": "Wisata, Turisme"
+                    "name": "Pariwisata"
                 },
                 "tourism/artwork": {
                     "name": "Karya Seni"
index cb8230a50585b7b59c01733a4cf8a42568d76a04..ac660e27b03b9d5386191723b237fe5db414f22a 100644 (file)
                 "restriction": "Það er ekki hægt að sameina þessi atriði því það myndi skemma \"{relation}\" vensl.",
                 "relation": "Það er ekki hægt að sameina þessi atriði því þau eru með gagnstæð venslahlutverk.",
                 "incomplete_relation": "Það er ekki hægt að sameina þessi atriði því ekki er búið að hlaða inn að fullu a.m.k. einu þeirra.",
-                "conflicting_tags": "Það er ekki hægt að sameina þessi atriði því sum merki þeirra eru ekki með samstæð gildi."
+                "conflicting_tags": "Það er ekki hægt að sameina þessi atriði því sum merki þeirra eru ekki með samstæð gildi.",
+                "paths_intersect": "Það er ekki hægt að sameina þessi atriði því niðurstöðuferillinn myndi skera sjálfan sig."
             },
             "move": {
                 "title": "Færa",
             "cancel": "Hætta við",
             "changes": "{count} breytingar",
             "download_changes": "Sækja osmChange-skrá",
+            "errors": "Villur",
             "warnings": "Aðvaranir",
             "modified": "Breytt",
             "deleted": "Eytt",
             "locating": "Staðset, bíddu aðeins..."
         },
         "inspector": {
-            "no_documentation_combination": "Það eru ekki til nein hjálparskjöl fyrir þessar samsettu merkingar",
-            "no_documentation_key": "Það eru ekki til nein hjálparskjöl fyrir þennan efnislykil",
+            "zoom_to": {
+                "key": "Z",
+                "title": "Renna að þessu",
+                "tooltip_feature": "Miðja og renna að þessari fitju á kortinu.",
+                "tooltip_note": "Miðja og renna að þessum minnispunkti á kortinu.",
+                "tooltip_data": "Miðja og renna að þessum gögnum á kortinu.",
+                "tooltip_issue": "Miðja og renna að þessu vandamáli á kortinu."
+            },
             "show_more": "Sýna meira",
             "view_on_osm": "Skoða á openstreetmap.org",
+            "view_on_keepRight": "Skoða á keepright.at",
             "all_fields": "Öll gagnasvið",
             "all_tags": "Öll merki",
             "all_members": "Allir meðlimir",
             "role": "Hlutverk",
             "choose": "Veldu gerð eiginda",
             "results": "{n} niðurstöður fyrir {leit}",
-            "reference": "Skoða á OpenStreetMap Wiki",
+            "edit_reference": "breyta/þýða",
+            "wiki_reference": "Skoða hjálp/leiðbeiningar",
+            "wiki_en_reference": "Skoða leiðbeiningar á ensku",
             "back_tooltip": "Breyta eigindum",
             "remove": "Fjarlægja",
             "search": "Leita",
                     "tooltip": "Gögn minnispunkts frá OpenStreetMap",
                     "title": "OpenStreetMap minnispunktar"
                 },
+                "keepRight": {
+                    "tooltip": "Vandamál sem greind voru sjálfvirkt hjá keepright.at",
+                    "title": "KeepRight-vandamál"
+                },
+                "improveOSM": {
+                    "tooltip": "improveosm.org greindi sjálfvirkt að gögn vantar",
+                    "title": "ImproveOSM-vandamál"
+                },
                 "custom": {
                     "tooltip": "Dragðu og slepptu gagnaskrá á síðuna eða smelltu áhnappinn til að setja upp",
                     "title": "Sérsniðin kortagögn",
         "feature": {
             "points": {
                 "description": "Punktar",
-                "tooltip": "Áhugaverðir staðir"
+                "tooltip": "Merkisstaðir"
             },
             "traffic_roads": {
                 "description": "Umferðargötur",
                 "tooltip": "Raflínur, Orkuver, Tengivirki, o.s.frv."
             },
             "past_future": {
-                "description": "Eldra/Framtíð",
                 "tooltip": "Tillaga,  í byggingu, í eyði, niðurrif oþh"
             },
             "others": {
-                "description": "Annað",
                 "tooltip": "Allt annað"
             }
         },
             "on_wiki": "{tag} á wiki.osm.org",
             "used_with": "notað með {type}"
         },
-        "validations": {
-            "disconnected_highway": "Aftengdur þjóðvegur",
-            "disconnected_highway_tooltip": "Vegir ættu að vera tengdir í aðra vegi eða í innaganga í byggingar.",
-            "old_multipolygon": "Fjölhyrningamerki á ytri leið",
-            "old_multipolygon_tooltip": "Þessi stíll fjölhyrnings er úreltur. Úthlutaðu merkjunum á yfirfjölhyrninginn (parent) í stað ytri ferilsins.",
-            "untagged_point": "Ómerktur punktur",
-            "untagged_point_tooltip": "Veldu tegund eiginda sem lýsir því hvað þessi punktur er.",
-            "untagged_line": "Ómerkt lína",
-            "untagged_line_tooltip": "Veldu tegund eiginda sem lýsir því hvað þessi lína er.",
-            "untagged_area": "Ómerkt svæði",
-            "untagged_area_tooltip": "Veldu tegund eiginda sem lýsir því hvað þetta svæði er.",
-            "untagged_relation": "Ómerkt vensl",
-            "untagged_relation_tooltip": "Veldu tegund eiginda sem lýsir því hvað þessi vensl standa fyrir.",
-            "many_deletions": "Þú ert að eyða {n} fitjum: {p} hnútar, {l} línur, {a} svæði, {r} vensl. Ertu viss um að þú viljir gera þetta? Þetta mun eyða þeim af kortinu sem allir nota á openstreetmap.org.",
-            "tag_suggests_area": "Merkingin {tag} þýðir að línan ætti að vera svæði, en hún er ekki svæði",
-            "deprecated_tags": "Úrelt merki: {tags}"
-        },
         "zoom": {
             "in": "Renna að",
             "out": "Renna frá"
         },
         "cannot_zoom": "Get ekki rennt lengra frá í núverandi ham.",
         "full_screen": "Víxla skjáfylli af/á",
+        "QA": {
+            "improveOSM": {
+                "title": "ImproveOSM-greining",
+                "geometry_types": {
+                    "path": "slóðir",
+                    "parking": "bílastæði",
+                    "road": "vegir",
+                    "both": "vegir og bílastæði"
+                },
+                "directions": {
+                    "east": "austur",
+                    "north": "norður",
+                    "northeast": "norðaustur",
+                    "northwest": "norðvestur",
+                    "south": "suður",
+                    "southeast": "suðaustur",
+                    "southwest": "suðvestur",
+                    "west": "vestur"
+                },
+                "error_types": {
+                    "ow": {
+                        "title": "Einstefnu vantar"
+                    },
+                    "tr": {
+                        "title": "Takmörkun á beygju vantar"
+                    }
+                }
+            },
+            "keepRight": {
+                "title": "KeepRight-villa",
+                "detail_title": "Villa",
+                "detail_description": "Lýsing",
+                "comment": "Athugasemd",
+                "comment_placeholder": "Settu inn athugasemd sem deilt er með öðrum notendum.",
+                "close": "Loka (villa lagfærð)",
+                "ignore": "Hunsa (ekki villa)",
+                "save_comment": "Vista athugasemd",
+                "close_comment": "Loka og gera athugasemd",
+                "ignore_comment": "Hunsa og gera athugasemd",
+                "error_parts": {
+                    "this_node": "þessi hnútur",
+                    "this_way": "þessi leið",
+                    "this_relation": "þessi vensl",
+                    "this_oneway": "þessi einstefna",
+                    "this_highway": "þessi þjóðvegur",
+                    "this_railway": "þessir lestarteinar",
+                    "this_waterway": "þessi siglingaleið",
+                    "this_cycleway": "þessi hjólaleið",
+                    "this_cycleway_footpath": "þessi hjólaleið/gönguleið",
+                    "this_riverbank": "þessi árbakki",
+                    "this_crossing": "þessi þverun",
+                    "this_railway_crossing": "þessi þverun járnbrautar",
+                    "this_bridge": "þessi brú",
+                    "this_tunnel": "þessi göng",
+                    "this_boundary": "þessi svæðamörk",
+                    "this_turn_restriction": "þessi takmörkun á beygju",
+                    "this_roundabout": "þetta hringtorg",
+                    "this_mini_roundabout": "þetta smáhringtorg",
+                    "this_track": "þessi slóð",
+                    "this_feature": "þessi fitja",
+                    "highway": "þjóðvegur",
+                    "railway": "lestarteinar",
+                    "waterway": "siglingaleið",
+                    "cycleway": "hjólaleið",
+                    "cycleway_footpath": "hjólaleið/gönguleið",
+                    "riverbank": "árbakki",
+                    "place_of_worship": "tilbeiðslustaður",
+                    "pub": "krá",
+                    "restaurant": "veitingahús",
+                    "school": "skóli",
+                    "university": "háskóli",
+                    "hospital": "sjúkrahús",
+                    "library": "bókasafn",
+                    "theatre": "leikhús",
+                    "courthouse": "dómhús",
+                    "bank": "banki",
+                    "cinema": "kvikmyndahús",
+                    "pharmacy": "lyfjaverslun",
+                    "cafe": "kaffihús",
+                    "fast_food": "skyndibitastaður",
+                    "fuel": "eldsneyti",
+                    "from": "frá",
+                    "to": "til",
+                    "left_hand": "vinstri-handar",
+                    "right_hand": "hægri-handar"
+                },
+                "errorTypes": {
+                    "20": {
+                        "title": "Margir hnútar á sama stað"
+                    },
+                    "30": {
+                        "title": "Ólokað svæði"
+                    },
+                    "40": {
+                        "title": "Ómöguleg einstefna"
+                    },
+                    "50": {
+                        "title": "Næstum tenging"
+                    },
+                    "60": {
+                        "title": "Úrelt merki"
+                    },
+                    "70": {
+                        "title": "Merki vantar"
+                    },
+                    "100": {
+                        "title": "Tilbeiðslustaður án skilgreindra trúarbragða"
+                    },
+                    "110": {
+                        "title": "Merkisstaðir án nafns"
+                    },
+                    "130": {
+                        "title": "Aftengd leið"
+                    },
+                    "150": {
+                        "title": "Þverun járnbrautar án merkis"
+                    },
+                    "210": {
+                        "description": "Það er óskilgreint vandamál með skaraðar leiðir."
+                    },
+                    "220": {
+                        "title": "Rangt stafsett merki"
+                    },
+                    "230": {
+                        "title": "Árekstur á milli laga"
+                    },
+                    "231": {
+                        "layer": "(lag: {layer})"
+                    },
+                    "270": {
+                        "title": "Óvenjuleg hraðbrautarmót"
+                    },
+                    "280": {
+                        "title": "Vandamál með svæðamörk",
+                        "description": "Það er óskilgreint vandamál með þessi svæðamörk."
+                    },
+                    "281": {
+                        "title": "Svæðamörk vantar heiti",
+                        "description": "{var1} hefur ekkert heiti."
+                    },
+                    "284": {
+                        "title": "Svæðamörk eru slitin"
+                    },
+                    "290": {
+                        "title": "Vandamál með takmörkun",
+                        "description": "Það er óskilgreint vandamál með þessa takmörkun."
+                    },
+                    "300": {
+                        "title": "Vantar hámarkshraða"
+                    },
+                    "310": {
+                        "title": "Vandamál með hringtorg",
+                        "description": "Það er óskilgreint vandamál með þetta hringtorg."
+                    },
+                    "311": {
+                        "title": "Hringtorg er ekki lokuð lykkja"
+                    },
+                    "312": {
+                        "title": "Röng stefna hringtorgs"
+                    },
+                    "350": {
+                        "title": "Gallað brúarmerki"
+                    },
+                    "370": {
+                        "title": "Tvíteknir staðir"
+                    },
+                    "401": {
+                        "title": "Takmörkun á beygju vantar"
+                    },
+                    "402": {
+                        "title": "Ómögulegt horn",
+                        "description": "{var1} beygir hér í mjög krappt horn."
+                    },
+                    "410": {
+                        "title": "Vandamál með vefsvæði"
+                    }
+                }
+            }
+        },
         "streetside": {
             "tooltip": "Ljósmyndir í götuhæð frá Microsoft",
             "title": "Ljósmyndaþekja (Bing Streetside)",
                 "navigation_drag": "Þú getur dregið til kortið með því að ýta á og halda niðri {leftclick} vinstri músarhnappnum og færa síðan til músarbendilinn. Þú getur líka notað `↓`, `↑`, `←`, `→` örvalyklana á lyklaborðinu þínu.",
                 "navigation_zoom": "Þú getur rennt inn eða út á kortinu með því að skruna með músarhjólinu eða snertiplatta, eða með því að smella á {plus} / {minus} hnappana við hlið kortsins. Þú getur líka notað `+`, `-` lyklana á lyklaborðinu þínu.",
                 "features_h": "Fitjur á korti",
-                "features": "Við notum orðin *fitjur* og *eigindi* til að lýsa atriðum sem birtast á kortinu, svo sem vegum, byggingum eða áhugaverðum stöðum. Hvað sem er í raunheimi er hægt að tákna með fitjum/eigindum í OpenStreetMap. Fitjur á korti eru birtar með því að nota *punkta*, *línur*, eða *svæði*."
+                "features": "Við notum orðin *fitjur* og *eigindi* til að lýsa atriðum sem birtast á kortinu, svo sem vegum, byggingum eða áhugaverðum stöðum. Hvað sem er í raunheimi er hægt að tákna með fitjum/eigindum í OpenStreetMap. Fitjur á korti eru birtar með því að nota *punkta*, *línur*, eða *svæði*.",
+                "nodes_ways": "Í OpenStreetMap eru punktar stundum kallaðir *hnútar*, eins eru línur og svæði stundum kölluð *leiðir*."
             },
             "editing": {
                 "title": "Breytingar og vistun",
                 "choosing": "Til að sjá hvaða myndabankar eru tiltækir til að nota við vinnsluna, smelltu á hnappinn {layers} **Bakgrunnsstillingar** við hlið kortsins.",
                 "sources": "Sjálfgefið er [Bing Maps](https://www.bing.com/maps/) gervihnattalag valið sem bakgrunnsmynd. Það fer eftir því hvar þú ert að vinna hvort aðrir myndabankar séu tiltækir. Sumir þeirra gætu verið með nýrri myndir eða í betri upplausn, þannig að það getur borgað sig að athuga hvaða myndalag sé best til að nota sem viðmiðun í kortagerðinni.",
                 "offsets_h": "Laga hliðrun mynda",
-                "offset": "Mynsednið er einstaka sinnum örlítið hliðrað miðað við nákvæm kortagögnin. Ef þú sérð að margar byggingar og vegir liggja til hliðar við það sem sést á bakgrunnsmyndunum, þá gæti verið að myndirnar séu ekki rétt stilltar og þá ættir þú alls ekki að færa til fitjurnar svo þær passi við bakgrunninn. Í staðinn geturðu lagað bakgrunninn þannig að hann passi sem best við fyrirliggjandi gögn með því að fara í \"Laga hliðrun mynda\" neðst í bakgrunnsstillingaspjaldinu."
+                "offset": "Myndefni er einstaka sinnum örlítið hliðrað miðað við nákvæm kortagögnin. Ef þú sérð að margar byggingar og vegir liggja til hliðar við það sem sést á bakgrunnsmyndunum, þá gæti verið að myndirnar séu ekki rétt stilltar og þá ættir þú alls ekki að færa til fitjurnar svo þær passi við bakgrunninn. Í staðinn geturðu lagað bakgrunninn þannig að hann passi sem best við fyrirliggjandi gögn með því að fara í \"Laga hliðrun mynda\" neðst í bakgrunnsstillingaspjaldinu.",
+                "offset_change": "Smelltu á litlu þríhyrningana til að laga hliðrun mynda í litlum þrepum, eða haltu niðri {leftclick} vinstri músarhnappnum og dragðu til innan í gráa ferhyrningnum til að renna myndinni á réttan stað."
             },
             "streetlevel": {
                 "title": "Ljósmyndir í götuhæð",
                 "tracing": "GPS-ferillinn er ekki sendur til OpenStreetMap - besta leiðin til að nota hann er við teikningu á kortið, nota hann til stuðnungs við fitjur eða eigindi sem þú setur inn.",
                 "upload": "Þú getur líka [sent GPS-gögnin þín inn á OpenStreetMap](https://www.openstreetmap.org/trace/create) svo að aðrir notendur geti stuðst við þau."
             },
+            "qa": {
+                "title": "Gæðastýring",
+                "intro": "Verkfæri *Gæðastjórnunar* (Q/A) geta fundið gölluð merki, ótengda vegi og önnur vandamál í OpenStreetMap, sem kortagerðarfólk getur þá lagað. Til að skoða fyrirliggjandi Q/A vandamál, smelltu á spjaldið {data} **Kortagögn** til að virkja tiltekið Q/A-lag.",
+                "tools_h": "Verkfæri",
+                "tools": "Eftirfarandi verkfæri eru studd um þessar mundir: [KeepRight](https://www.keepright.at/) og [ImproveOSM](https://improveosm.org/en/). Stefnt er að því að iD styðji [Osmose](https://osmose.openstreetmap.fr/) og fleiri Q/A-verkfæri í framtíðinni.",
+                "issues_h": "Meðhöndlun vandamála"
+            },
             "field": {
                 "restrictions": {
                     "title": "Hjálp fyrir takmarkanir á beygjum",
                 },
                 "with_selected": {
                     "title": "Með fitju valda",
-                    "edit_menu": "Víxla breytingavalmynd af/á"
+                    "edit_menu": "Víxla breytingavalmynd af/á",
+                    "zoom_to": "Renna að valinni fitju"
                 },
                 "vertex_selected": {
                     "title": "Með valinn hnút",
                 "category-building": {
                     "name": "Byggingafitjur"
                 },
-                "category-golf": {
-                    "name": "Fitjur fyrir golf"
-                },
                 "category-landuse": {
                     "name": "Fitjur fyrir landnotkun"
                 },
                         "underground": "Neðanjarðar"
                     }
                 },
-                "passenger_information_display": {
-                    "label": "Upplýsingaskjár fyrir farþega"
-                },
                 "payment_multi": {
                     "label": "Greiðslumátar"
                 },
                     "label": "Tegund"
                 },
                 "website": {
-                    "label": "Vefsvæði",
-                    "placeholder": "http://daemi.is/"
+                    "label": "Vefsvæði"
                 },
                 "wetland": {
                     "label": "Tegund"
                 "building/terrace": {
                     "name": "Raðhús"
                 },
-                "building/train_station": {
-                    "name": "Lestarstöð"
-                },
                 "building/transportation": {
                     "name": "Samgöngubygging"
                 },
                 "golf/hole": {
                     "name": "Golfhola"
                 },
-                "golf/lateral_water_hazard_area": {
-                    "name": "Vatnsgryfja til hliðar"
-                },
-                "golf/lateral_water_hazard_line": {
-                    "name": "Vatnsgryfja til hliðar"
-                },
                 "golf/rough": {
                     "name": "Kargi"
                 },
                 "golf/tee": {
                     "name": "Teigur"
                 },
-                "golf/water_hazard_area": {
-                    "name": "Vatnsgryfja"
-                },
-                "golf/water_hazard_line": {
-                    "name": "Vatnsgryfja"
-                },
                 "healthcare": {
                     "name": "Heilsugæsluaðstaða"
                 },
                 "power/transformer": {
                     "name": "Straumbreytir"
                 },
-                "public_transport/linear_platform": {
-                    "name": "Biðstöð / Biðsvæði",
-                    "terms": "almenningssamgöngur,strætó,samgöngur,stoppistöð"
-                },
-                "public_transport/linear_platform_aerialway": {
-                    "name": "Lyftustöð / Biðsvæði"
-                },
-                "public_transport/linear_platform_bus": {
-                    "name": "Strætóstoppistöð / Biðsvæði"
-                },
-                "public_transport/linear_platform_ferry": {
-                    "name": "Ferjustöð / Biðsvæði"
-                },
-                "public_transport/linear_platform_light_rail": {
-                    "name": "Léttlestarstoppistöð / Biðsvæði"
-                },
-                "public_transport/linear_platform_monorail": {
-                    "name": "Einteinungsstoppistöð / Biðsvæði"
-                },
-                "public_transport/linear_platform_subway": {
-                    "name": "Neðanjarðarlestarpallur"
-                },
-                "public_transport/linear_platform_train": {
-                    "name": "Lestarpallur"
-                },
-                "public_transport/linear_platform_tram": {
-                    "name": "Sporvagnastoppistöð / Biðsvæði"
-                },
-                "public_transport/linear_platform_trolleybus": {
-                    "name": "Strætóstoppistöð / Biðsvæði"
-                },
                 "public_transport/platform": {
                     "name": "Biðstöð / Biðsvæði",
                     "terms": "almenningssamgöngur,strætó,samgöngur,stoppistöð"
                 "description": "Japan GSI uppréttar ortho loftmyndir. Venjulega betra en Bing, en dálítið eldra.",
                 "name": "Japan GSI uppréttar ortho loftmyndir"
             },
+            "gsi.go.jp_airphoto": {
+                "attribution": {
+                    "text": "GSI Japan"
+                },
+                "description": "Japan GSI airphoto loftmyndefni. Ekki að fullu uppréttað, en eilítið nýrri og/eða með annarri þekju en uppréttu GSI loftmyndirnar.",
+                "name": "Japan GSI airphoto loftmyndir"
+            },
             "gsi.go.jp_std_map": {
                 "attribution": {
                     "text": "GSI Japan"
index 509dac5c1af4146155376360fc4656a815afaba0..95aace9ae6fd827b0d5b82048f945d1a8ca43097 100644 (file)
                 "restriction": "Questi elementi non possono essere uniti perché ciò danneggerebbe la relazione “{relation}”.",
                 "relation": "Questi elementi non possono essere uniti perché hanno dei ruoli di relazione tra loro in conflitto.",
                 "incomplete_relation": "Questi elementi non posso essere uniti perché almeno uno di loro non è stato completamente scaricato.",
-                "conflicting_tags": "Questi elementi non possono essere uniti perché alcuni dei loro tag sono in conflitto tra loro."
+                "conflicting_tags": "Questi elementi non possono essere uniti perché alcuni dei loro tag sono in conflitto tra loro.",
+                "paths_intersect": "Queste strade non possono essere unite perché il percorso risultante intersecherebbe se stesso."
             },
             "move": {
                 "title": "Muovi",
             "modified": "Modificati",
             "deleted": "Cancellati",
             "created": "Creati",
+            "outstanding_errors_message": "Per favore, risolvi tutti gli errori. [count] rimanenti.",
+            "comment_needed_message": "Per favore aggiungi un commento al gruppo di modifiche.",
             "about_changeset_comments": "Info sui Commenti al gruppo di modifiche",
             "about_changeset_comments_link": "//wiki.openstreetmap.org/wiki/Good_changeset_comments",
             "google_warning": "In questo commento hai nominato Google: ricorda sempre che copiare da Google Maps è severamente proibito.",
                 "tooltip_data": "Centra e ingrandisci la mappa per focalizzare su questi dati.",
                 "tooltip_issue": "Centra e ingrandisci la mappa per focalizzare su questo problema."
             },
-            "no_documentation_combination": "Non c'è documentazione per questa combinazione di tag",
-            "no_documentation_key": "Non c'è documentazione per questa chiave",
             "show_more": "Mostra di più",
             "view_on_osm": "Vedi su openstreetmap.org",
             "view_on_keepRight": "Vedi su keepright.at",
             "role": "Ruolo",
             "choose": "Seleziona il tipo di caratteristica",
             "results": "{n} risultati per {search}",
-            "reference": "Vedi sulla Wiki di OpenStreetMap →",
-            "edit_reference": "Modifica o traduci la descrizione",
+            "no_documentation_key": "Nessuna documentazione disponibile",
+            "edit_reference": "modifica/traduci",
             "wiki_reference": "Vedi la documentazione",
             "wiki_en_reference": "Vedi la documentazione in inglese",
+            "hidden_preset": {
+                "manual": "{elementi} sono nascosti. Abilitale nel pannello Dati della mappa.",
+                "zoom": "{elementi} sono nascosti. Ingrandisci per abilitarle."
+            },
             "back_tooltip": "Cambia elemento",
             "remove": "Rimuovere",
             "search": "Cerca",
                     "tooltip": "Problemi della mappa rilevati automaticamente da keepright.at",
                     "title": "Problemi KeepRight"
                 },
+                "improveOSM": {
+                    "tooltip": "Dati mancanti rilevati automaticamente da improveosm.org",
+                    "title": "Problemi ImproveOSM"
+                },
                 "custom": {
                     "tooltip": "Trascina un file dati sulla pagina oppure clicca il pulsante per impostarlo.",
                     "title": "Dati della mappa personalizzati",
                 "tooltip": "Linee elettriche, centrali, sottostazioni, ecc."
             },
             "past_future": {
-                "description": "Elementi passati o futuri",
+                "description": "Funzioni passate/future",
                 "tooltip": "Proposti, in costruzione, abbandonati, demoliti, ecc."
             },
             "others": {
-                "description": "Altri",
+                "description": "Altre funzioni",
                 "tooltip": "Tutto il resto"
             }
         },
             "on_wiki": "{tag} su wiki.osm.org",
             "used_with": "usato con {type}"
         },
-        "validations": {
-            "disconnected_highway": "Percorso scollegato",
-            "disconnected_highway_tooltip": "I percorsi dovrebbero essere connessi ad altri percorsi o all'ingresso di un edificio.",
-            "generic_name": "Possibile nome generico",
-            "generic_name_tooltip": "Questo elemento sembra un nome generico \"{name}\". Per favore usa il campo name per inserire il nome ufficiale dell'elemento.",
-            "old_multipolygon": "Etichette di multipoligono su percorso esterno",
-            "old_multipolygon_tooltip": "Questo modo di mappare un multipoligono è sconsigliato. Assegnare le etichette alla relazione multipoligono piuttosto che al percorso esterno.",
-            "untagged_point": "Punto senta tag",
-            "untagged_point_tooltip": "Seleziona un tipo di elemento che descriva cos'è questo punto.",
-            "untagged_line": "Linea senza tag",
-            "untagged_line_tooltip": "Seleziona un tipo di elemento che descriva cos'è questa linea.",
-            "untagged_area": "Area senza tag",
-            "untagged_area_tooltip": "Seleziona un tipo di elemento che descriva cos'è quest'area.",
-            "untagged_relation": "Relazione senza tag",
-            "untagged_relation_tooltip": "Seleziona un tipo di elemento che descriva di che relazione si tratta.",
-            "many_deletions": "Stai cancellando {n} elementi: {p} nodi, {l} linee, {a} aree, {r} relazioni. Sei sicuro di volerlo fare? Questo cancellerà gli elementi dalla mappa che può vedere chiunque su openstreetmap.org.",
-            "tag_suggests_area": "Il tag {tag} fa pensare che la linea sia un'area, ma non rappresenta un'area",
-            "deprecated_tags": "Tag deprecati: {tags}"
-        },
         "zoom": {
             "in": "Ingrandisci",
             "out": "Rimpicciolisci"
         "cannot_zoom": "Impossibile rimpicciolire ulteriormente nella modalità attuale.",
         "full_screen": "Passa a schermo intero",
         "QA": {
+            "improveOSM": {
+                "title": "Rilevamento ImproveOSM",
+                "geometry_types": {
+                    "path": "percorsi",
+                    "parking": "parcheggio",
+                    "road": "strade",
+                    "both": "strade e parcheggio"
+                },
+                "directions": {
+                    "east": "est",
+                    "north": "nord",
+                    "northeast": "nordest",
+                    "northwest": "nordovest",
+                    "south": "sud",
+                    "southeast": "sudest",
+                    "southwest": "sudovest",
+                    "west": "ovest"
+                },
+                "error_types": {
+                    "ow": {
+                        "title": "Senso unico mancante"
+                    }
+                }
+            },
             "keepRight": {
                 "title": "Errore KeepRight",
                 "detail_title": "Errore",
                     "75": {
                         "description": "{var1} ha il nome \"{var2}\" ma nessun altro tag."
                     },
+                    "90": {
+                        "title": "Autostrada senza etichetta \"ref\"",
+                        "description": "{var1} é etichettata come autostrada, serve quindi aggiungere i tag \"ref\", \"nat_ref\", o \"int_ref\"."
+                    },
                     "100": {
                         "title": "Luogo di culto senza religion"
                     },
                         "description": "Manca il tag \"type\" a {var1}."
                     },
                     "190": {
-                        "title": "Intersezione senza incrocio"
+                        "title": "Intersezione senza incrocio",
+                        "description": "{var1} interseca la {var2} {var3}, manca però un nodo di connessione, un ponte, o un tunnel."
                     },
                     "200": {
                         "title": "Percorsi sovrapposti"
             },
             "qa": {
                 "title": "Controllo qualità.",
-                "tools_h": "Strumenti",
-                "tools": "Sono supportati i seguenti strumenti:: [KeepRight](https://www.keepright.at/). Probabilmente in futuro iD supporterà [Osmose](https://osmose.openstreetmap.fr/), [ImproveOSM](https://improveosm.org/en/) e altri strumenti per il mantenimento della qualità in futuro."
+                "tools_h": "Strumenti"
             },
             "field": {
                 "restrictions": {
                 "category-building": {
                     "name": "Caratteristiche degli Edifici"
                 },
-                "category-golf": {
-                    "name": "Caratteristiche del Golf"
-                },
                 "category-landuse": {
                     "name": "Caratteristiche degli Utilizzi del terreno"
                 },
                         "underground": "Sotterraneo"
                     }
                 },
-                "passenger_information_display": {
-                    "label": "Display arrivi/partenze"
-                },
                 "payment_multi": {
                     "label": "Tipologie di pagamento"
                 },
                     "label": "Tipo"
                 },
                 "website": {
-                    "label": "Sito web",
-                    "placeholder": "http://example.com/"
+                    "label": "Sito web"
                 },
                 "wetland": {
                     "label": "Tipo"
                     "name": "Stazione / Terminal dei battelli"
                 },
                 "amenity/fire_station": {
-                    "name": "Caserma dei pompieri",
+                    "name": "Caserma dei vigili del fuoco",
                     "terms": "Stazione dei Vigili del fuoco"
                 },
                 "amenity/food_court": {
                     "name": "Villette a schiera",
                     "terms": "villette,fila di case"
                 },
-                "building/train_station": {
-                    "name": "Stazione ferroviaria"
-                },
                 "building/transportation": {
                     "name": "Stazione (mezzi di trasporto)"
                 },
                     "name": "Buca del golf",
                     "terms": "buca,golf"
                 },
-                "golf/lateral_water_hazard_area": {
-                    "name": "Laghetto laterale",
-                    "terms": "Laghetto laterale"
-                },
-                "golf/lateral_water_hazard_line": {
-                    "name": "Laghetto laterale",
-                    "terms": "Laghetto Laterale"
-                },
                 "golf/rough": {
                     "name": "Irregolare, grezzo",
                     "terms": "Erba alta,Rough"
                     "name": "Tee di Partenza",
                     "terms": "Piazzola di partenza"
                 },
-                "golf/water_hazard_area": {
-                    "name": "Laghetto",
-                    "terms": "Laghetto"
-                },
-                "golf/water_hazard_line": {
-                    "name": "Laghetto",
-                    "terms": "Laghetto"
-                },
                 "healthcare": {
                     "name": "Clinica",
                     "terms": "clinica,ospedale,clinica ospedaliera,dottori,studio dottori,medicina,aiuto medico,guardia medica,centro igiene mentale,pediatra,medico,oftalmologo,dentista,ginecologo,andrologo,geriatra,medico dello sport"
                     "terms": "svincolo,uscita"
                 },
                 "landuse": {
-                    "name": "Utilizzi del terreno",
-                    "terms": "uso del suolo,suolo,terreno,uso,utilizzo,destinazione"
+                    "name": "Utilizzi del terreno"
                 },
                 "landuse/allotments": {
                     "name": "Orti in concessione",
                     "terms": "Vigna"
                 },
                 "leisure": {
-                    "name": "Svago",
-                    "terms": "Svago"
+                    "name": "Svago"
                 },
                 "leisure/adult_gaming_centre": {
                     "name": "Sala da gioco",
                     "terms": "Linea"
                 },
                 "man_made": {
-                    "name": "Costruzioni civili",
-                    "terms": "Artificiale"
+                    "name": "Costruzioni civili"
                 },
                 "man_made/adit": {
                     "name": "Cunicolo",
                     "name": "Tombino per telecominicazioni"
                 },
                 "natural": {
-                    "name": "Naturale",
-                    "terms": "Elemento naturale"
+                    "name": "Naturale"
                 },
                 "natural/bare_rock": {
                     "name": "Roccia",
                     "name": "Trasformatore",
                     "terms": "Trasformatore"
                 },
-                "public_transport/linear_platform": {
-                    "name": "Fermata / Banchina del trasporto pubblico"
-                },
-                "public_transport/linear_platform_aerialway": {
-                    "name": "Fermata / banchina del trasporto a fune"
-                },
-                "public_transport/linear_platform_bus": {
-                    "name": "Fermata / banchina dell'autobus"
-                },
-                "public_transport/linear_platform_ferry": {
-                    "name": "Fermata / banchina del traghetto"
-                },
-                "public_transport/linear_platform_light_rail": {
-                    "name": "Fermata / banchina della metropolitana di superficie"
-                },
-                "public_transport/linear_platform_monorail": {
-                    "name": "Fermata / banchina della monorotaia"
-                },
-                "public_transport/linear_platform_subway": {
-                    "name": "Fermata / banchina della metropolitana"
-                },
-                "public_transport/linear_platform_train": {
-                    "name": "Fermata / banchina del treno"
-                },
-                "public_transport/linear_platform_tram": {
-                    "name": "Fermata / banchina del tram"
-                },
-                "public_transport/linear_platform_trolleybus": {
-                    "name": "Fermata / Banchina del filobus"
-                },
                 "public_transport/platform": {
                     "name": "Fermata / Banchina del trasporto pubblico"
                 },
                     "terms": "vino,negozio di vini"
                 },
                 "tourism": {
-                    "name": "Turismo",
-                    "terms": "turismo,attrazione,turistica,interesse,turisti,escursionismo,viaggio,gita"
+                    "name": "Turismo"
                 },
                 "tourism/alpine_hut": {
                     "name": "Rifugio",
                 "description": "Ortofoto di GSI Giappone. In genere migliori di Bing ma un po’ più vecchie.",
                 "name": "Ortofoto di GSI Giappone"
             },
+            "gsi.go.jp_airphoto": {
+                "attribution": {
+                    "text": "GSI del Giappone"
+                },
+                "description": "Immagini aeree GSI del Giappone. Non del tutto orto-rettificate ma un po’ più recenti e/o con copertura differente delle orto-immagini GSI.",
+                "name": "Immagini aeree GSI del Giappone"
+            },
             "gsi.go.jp_std_map": {
                 "attribution": {
                     "text": "GSI Giappone"
index f464d46d62af0e23c23441700c2c3ac7c41e38e0..93f05d297a668621b68080bfbc83a27e8749fd39 100644 (file)
                 "restriction": "\"{relation}\" リレーションを壊してしまうため、これらの地物はマージできません。",
                 "relation": "リレーションのロールが競合しているため、地物をマージできません",
                 "incomplete_relation": "地物全体がダウンロードされていないため、マージさせることができません。",
-                "conflicting_tags": "タグの値が競合しているため、地物をマージできません"
+                "conflicting_tags": "タグの値が競合しているため、地物をマージできません",
+                "paths_intersect": "経路を自己交差することになるため、この地物はマージできません。"
             },
             "move": {
                 "title": "移動",
             "modified": "変更した地物",
             "deleted": "削除した地物",
             "created": "作成した地物",
+            "outstanding_errors_message": "まず全てのエラーを解決してください。{count} 件残っています。",
+            "comment_needed_message": "まず変更セットのコメントを追加してください。",
             "about_changeset_comments": "変更セットの良いコメントについて",
             "about_changeset_comments_link": "//wiki.openstreetmap.org/wiki/Good_changeset_comments",
             "google_warning": "コメントの中で Google に触れていますが、 Google マップからのコピーは絶対に禁止です。",
                 "tooltip_data": "マップを中央寄せ・ズームしてこのデータにフォーカス。",
                 "tooltip_issue": "マップを中央寄せ・ズームしてこの課題にフォーカス。"
             },
-            "no_documentation_combination": "このタグの組み合わせに関する解説はありません",
-            "no_documentation_key": "このキーに対する解説はありません",
             "show_more": "次を表示",
             "view_on_osm": "openstreetmap.orgで確認",
             "view_on_keepRight": "keepright.at 上で閲覧",
             "role": "役割",
             "choose": "地物の種類を選択",
             "results": "検索結果{n}件: {search}",
-            "reference": "OpenStreetMap WIkiで確認",
-            "edit_reference": "説明を編集または翻訳",
+            "no_documentation_key": "利用できる文書はありません。",
+            "edit_reference": "編集/翻訳",
             "wiki_reference": "ドキュメントを見る",
             "wiki_en_reference": "ドキュメントを英語で見る",
+            "hidden_preset": {
+                "manual": "{features} が非表示となっています。地図データ設定ペインで有効化してください。",
+                "zoom": "{features} が非表示となっています。ズームインして有効化してください。"
+            },
             "back_tooltip": "地物の編集",
             "remove": "削除",
             "search": "検索",
                     "tooltip": "マップの課題をkeepright.at から自動的に検知しました",
                     "title": "KeepRight の改善提案"
                 },
+                "improveOSM": {
+                    "tooltip": "improveosm.org が自動的に検知した設定漏れデータ",
+                    "title": "ImproveOSM の改善提案"
+                },
                 "custom": {
                     "tooltip": "ページ上にデータファイルをドラッグ&ドロップするか、画面右側のボタンをクリックして設定してください",
                     "title": "カスタム地図データ",
                 "tooltip": "電線、高圧線、発電所、変電所など"
             },
             "past_future": {
-                "description": "廃棄消失/建設予定地",
+                "description": "過去/未来の地物",
                 "tooltip": "予定地、建設中、廃業、撤去済など"
             },
             "others": {
-                "description": "その他",
+                "description": "その他の地物",
                 "tooltip": "すべて"
             }
         },
             "on_wiki": "{tag}: wiki.osm.org ",
             "used_with": "さらに詳しく:  {type}"
         },
-        "validations": {
-            "disconnected_highway": "切断された道路",
-            "disconnected_highway_tooltip": "道路は他の道路か建物の入口に接続させてください。",
-            "generic_name": "普通名詞の可能性",
-            "generic_name_tooltip": "この地物には一般的な普通名詞の \"{name}\"タグが付いているようです。name タグには地物の公式な固有名詞だけを付けてください。(訳注:畑、神社、建物といった固有名詞ではないカテゴリやグループ名、あるいはOSM上にメモするための名前らしきものなどはname タグには入れてはいけません。固有の名前がわからない場合にはname タグは付けません。)",
-            "old_multipolygon": "outerのウェイ上のマルチポリゴンタグ",
-            "old_multipolygon_tooltip": "このスタイルのマルチポリゴンは非推奨となっています。outerのウェイの代わりに親のマルチポリゴンにタグを割り当ててください。",
-            "untagged_point": "タグなしポイント",
-            "untagged_point_tooltip": "この点が表す地物の種類を選択してください。",
-            "untagged_line": "ラインにタグが付与されていません",
-            "untagged_line_tooltip": "この直線が表す地物の種類を選択してください。",
-            "untagged_area": "エリアにタグが付与されていません",
-            "untagged_area_tooltip": "このエリアが表す地物の種類を選択してください。",
-            "untagged_relation": "タグの無いリレーション",
-            "untagged_relation_tooltip": "このリレーションを表す地物の種別を選んでください。",
-            "many_deletions": "あなたは計{n}件の地物を削除しようとしています:{p}ノード, {l}ライン, {a}エリア, {r}リレーション。本当に削除しますか?この操作でみんながopenstreetmap.org上で見ているマップから削除されます。",
-            "tag_suggests_area": "ラインに {tag} タグが付与されています。エリアで描かれるべきです",
-            "deprecated_tags": "タグの重複: {tags}"
-        },
         "zoom": {
             "in": "ズームイン",
             "out": "ズームアウト"
         "cannot_zoom": "現在のモードでは、これ以上ズームアウトできません。",
         "full_screen": "フルスクリーンにする",
         "QA": {
+            "improveOSM": {
+                "title": "ImproveOSM 検知内容",
+                "geometry_types": {
+                    "path": "歩道・小道",
+                    "parking": "駐車場",
+                    "road": "道路",
+                    "both": "道路と駐車場"
+                },
+                "directions": {
+                    "east": "東",
+                    "north": "北",
+                    "northeast": "北東",
+                    "northwest": "北西",
+                    "south": "南",
+                    "southeast": "南東",
+                    "southwest": "南西",
+                    "west": "西"
+                },
+                "error_types": {
+                    "ow": {
+                        "title": "一方通行が未設定",
+                        "description": "{highway} のこの区間では、{num_trips} 件の通行記録のうち、{percentage} %が{from_node} から{to_node} に向かっています。「一方通行」タグが漏れている可能性があります。"
+                    },
+                    "mr": {
+                        "title": "ジオメトリが未設定",
+                        "description": "このエリアで記録された{num_trips}件の通行記録は、ここにマッピングされていない{geometry_type} がある可能性を示しています。",
+                        "description_alt": "サードパーティのデータが、ここにマッピングされていない{geometry_type} がある可能性を示しています。"
+                    },
+                    "tr": {
+                        "title": "進行方向制限が未設定",
+                        "description": "{num_trips} 件の記録された通行({travel_direction}方面への移動)のうち{num_passed} 件が、{from_way} から{to_way} へ{junction}で方向転換しています。「{turn_restriction}」の制限が未設定である可能性があります。"
+                    }
+                }
+            },
             "keepRight": {
                 "title": "KeepRight の指摘内容",
                 "detail_title": "エラー",
                     },
                     "130": {
                         "title": "未接続のウェイ(浮島)",
-                        "description": "{var1} はマップの他のオブジェクトに接続していません。(訳注:(対処例)大きめの白い丸である未接続の終端ノードをドラッグして相手先のウェイに接続するか、終端ノード上でショートカットキー\"A\"を押すか、右クリックして(+)延長アイコンをクリックしてウェイを延ばして接続します。正しく接続されると丸は小さめのグレイに変化します。)"
+                        "description": "{var1} はマップの他のオブジェクトに接続していません。(訳注:(対処例)大きめの白い丸である未接続の終端ノードをドラッグして相手先のウェイに接続するか、終端ノード上でショートカットキー\"A\"を押すか、右クリックして(+)延長アイコンをクリックしてウェイを延ばして接続します。正しく接続されると丸は小さめのグレイに変化します。エリアで描いたペデストリアンも他の歩道や道路に接続します)"
                     },
                     "150": {
                         "title": "タグの無い鉄道踏切",
                     },
                     "312": {
                         "title": "ラウンドアバウトの方向誤り",
-                        "description": "{var1} が {var2} 通行の国にある場合、その向き先は誤った方向に向かっています。"
+                        "description": "{var1} が {var2} 通行の国にある場合、進行方向が誤っています。(訳注:日本は左側通行)"
                     },
                     "313": {
                         "title": "ラウンドアバウトの接続が弱い",
                 "title": "品質改善",
                 "intro": "*品質改善* (Q/A) 用のツールはOpenStreetMap内の不適切なタグ、接続されていない道路、その他の課題などを見つけ出し、マッパーはそれを見て修正することができます。Q/A の課題にどのようなものがあるか見てみる場合は、 {data} **地図データ設定** パネルをクリックして、専用の Q/A レイヤを有効化してください。(訳注:見つけ出された課題はあくまで機械的にピックアップされたものであり、必ずしもエラーではない場合があります。現地の状態やタグ付けの知識があまり無い場合にはくれぐれも注意してください。まずは地元や自分でマッピングした内容の修正から始めると良いでしょう。)",
                 "tools_h": "ツール",
-                "tools": "現在は次のツールがサポートされています: [KeepRight](https://www.keepright.at/)。iD は将来 [Osmose](https://osmose.openstreetmap.fr/), [ImproveOSM](https://improveosm.org/en/), その他の Q/A ツールもサポートしたいと考えています。",
+                "tools": "現在は次のツールがサポートされています: [KeepRight](https://www.keepright.at/)及び[ImproveOSM](https://improveosm.org/en/)。iD は将来 [Osmose](https://osmose.openstreetmap.fr/), その他の Q/A ツールもサポートしたいと考えています。",
                 "issues_h": "課題の扱い方",
                 "issues": "Q/A の課題の扱い方はメモと似ています。マーカーをクリックすると、サードバー内で課題の詳細を見ることができます。各ツールにはそれぞれにできることがありますが、たいていコメントを付けたり課題をクローズしたりすることができます。"
             },
                 }
             }
         },
+        "issues": {
+            "title": "改善提案",
+            "key": "I",
+            "list_title": "改善提案 ({count})",
+            "errors": {
+                "list_title": "エラー ({count})"
+            },
+            "warnings": {
+                "list_title": "警告 ({count})"
+            },
+            "no_issues": {
+                "message": "改善提案はありません",
+                "info": "ここには編集操作中に改善提案が表示されます"
+            },
+            "almost_junction": {
+                "message": "{feature} は{feature2} のすぐ近くにありますが接続されていません",
+                "highway-highway": {
+                    "tip": "交差する道路は頂点ノードを共有すべきです"
+                }
+            },
+            "crossing_ways": {
+                "message": "{feature} は{feature2} と重なっています",
+                "building-building": {
+                    "tip": "建物は別レイヤである場合を除いて、交差すべきではありません。"
+                },
+                "building-highway": {
+                    "tip": "建物と重なる道路は橋、トンネル、遮蔽物、入口のいずれかのタグを使うべきです。"
+                },
+                "building-railway": {
+                    "tip": "建物と重なる鉄道は橋かトンネルのタグを使うべきです。"
+                },
+                "building-waterway": {
+                    "tip": "建物と重なる水路はトンネルのタグか別のレイヤを使うべきです。"
+                },
+                "highway-highway": {
+                    "tip": "重なっている道路は橋、トンネル、交差点のいずれかのタグを使うべきです。"
+                },
+                "highway-railway": {
+                    "tip": "鉄道と重なる道路は橋、トンネル、踏切のいずれかのタグを使うべきです。"
+                },
+                "highway-waterway": {
+                    "tip": "水路と重なる道路は橋、トンネル、洗い越し(ford)のいずれかのタグを使うべきです。"
+                },
+                "railway-railway": {
+                    "tip": "重なっている鉄道は接続するか、橋やトンネルのタグを使うべきです。"
+                },
+                "railway-waterway": {
+                    "tip": "水路と重なる鉄道は橋やトンネルのタグを使うべきです。"
+                },
+                "waterway-waterway": {
+                    "tip": "重なっている水路は接続するかトンネルのタグを使うべきです。"
+                },
+                "tunnel-tunnel": {
+                    "tip": "重なっているトンネルは別のレイヤを使うべきです。"
+                },
+                "tunnel-tunnel_connectable": {
+                    "tip": "重なっているトンネルは接続するか、別のレイヤを使うべきです。"
+                },
+                "bridge-bridge": {
+                    "tip": "重なっている橋は別のレイヤを使うべきです。"
+                },
+                "bridge-bridge_connectable": {
+                    "tip": "重なっている橋は接続するか、別のレイヤを使うべきです。"
+                },
+                "indoor-indoor": {
+                    "tip": "重なっているインドアの地物は別のレイヤを使うべきです。"
+                },
+                "indoor-indoor_connectable": {
+                    "tip": "重なっているインドアの地物は別の階と接続するか、接続せずに別の階を使用するべきです。"
+                }
+            },
+            "deprecated_tag": {
+                "single": {
+                    "message": "{feature} には旧式のタグ\"{tag}\" があります"
+                },
+                "combination": {
+                    "message": "{feature} には旧式のタグの組み合わせがあります: {tags}"
+                },
+                "tip": "非推奨となったタグがあるので置き換えるべきです。"
+            },
+            "disconnected_way": {
+                "highway": {
+                    "message": "{highway} は他の道路や小道と切り離されています",
+                    "tip": "道路は他の道路か建物の入口に接続してください。"
+                }
+            },
+            "generic_name": {
+                "message": "{feature} には一般名詞\"{name}\" が付けられています",
+                "tip": "名前は実際の、現地にある地物の名前であるべきです。"
+            },
+            "many_deletions": {
+                "points-lines-areas": {
+                    "message": "{n} 件の地物を削除します: {p} 件のポイント, {l} 件のライン, {a} 件のエリア"
+                },
+                "points-lines-areas-relations": {
+                    "message": "{n} 件の地物を削除します: {p} 件のポイント, {l} 件のライン, {a} 件のエリア, {r} 件のリレーション"
+                },
+                "tip": "冗長あるいは存在しない地物だけを削除すべきです。"
+            },
+            "missing_tag": {
+                "any": {
+                    "message": "{feature} にはタグがありません"
+                },
+                "descriptive": {
+                    "message": "{feature} が何であるのかを示すタグがありません"
+                },
+                "specific": {
+                    "message": "{feature} には\"{tag}\" タグがありません"
+                },
+                "tip": "地物にはタグを付けてそれが何であるかを定義しなければなりません"
+            },
+            "old_multipolygon": {
+                "message": "{multipolygon} には間違ったタグがあります",
+                "tip": "マルチポリゴンはリレーションにタグ付けすべきで、アウターウェイにではありません。"
+            },
+            "tag_suggests_area": {
+                "message": "{feature} は\"{tag}\" タグに基づくクローズドエリアであるべきです",
+                "tip": "エリアは終端を接続しなければなりません。"
+            },
+            "fix": {
+                "connect_almost_junction": {
+                    "annotation": "近接した地物を接続しました。"
+                },
+                "connect_crossing_features": {
+                    "annotation": "重なっている地物を接続しました。"
+                },
+                "connect_endpoints": {
+                    "title": "終端を接続する",
+                    "annotation": "ウェイの終端を接続しました。"
+                },
+                "connect_features": {
+                    "title": "地物を接続する"
+                },
+                "continue_from_start": {
+                    "title": "開始点から延長する"
+                },
+                "continue_from_end": {
+                    "title": "終了点から延長する"
+                },
+                "delete_feature": {
+                    "title": "この地物を削除する(よく分からないものは安易に削除しないこと)"
+                },
+                "move_tags": {
+                    "title": "タグを移動する",
+                    "annotation": "タグを移動しました。"
+                },
+                "remove_generic_name": {
+                    "title": "名前を削除する",
+                    "annotation": "一般名詞を削除しました。"
+                },
+                "remove_tag": {
+                    "title": "タグを削除する",
+                    "annotation": "タグを削除しました。"
+                },
+                "reposition_features": {
+                    "title": "地物を配置し直す(手動で編集してください)"
+                },
+                "select_preset": {
+                    "title": "地物の種類を選んでタグを付ける"
+                },
+                "tag_as_disconnected": {
+                    "title": "未接続(行き止まり)のタグを付ける",
+                    "annotation": "近接している地物に未接続(行き止まり)のタグを付けました。"
+                },
+                "upgrade_tag": {
+                    "annotation": "古いタグをアップグレードしました。"
+                },
+                "upgrade_tag_combo": {
+                    "annotation": "古いタグの組み合わせをアップグレードしました。"
+                },
+                "use_bridge_or_tunnel": {
+                    "title": "橋かトンネルを使用してください"
+                },
+                "use_different_layers": {
+                    "title": "別のレイヤを使ってください"
+                },
+                "use_different_levels": {
+                    "title": "別の階を使ってください"
+                },
+                "use_tunnel": {
+                    "title": "トンネルを使ってください"
+                }
+            }
+        },
         "intro": {
             "done": "完了",
             "ok": "OK",
                 "category-building": {
                     "name": "建物の地物"
                 },
-                "category-golf": {
+                "category-golf-area": {
+                    "name": "ゴルフの地物"
+                },
+                "category-golf-line": {
                     "name": "ゴルフの地物"
                 },
                 "category-landuse": {
                 "junction/ref_oneway": {
                     "label": "ジャンクション番号"
                 },
+                "junction_line": {
+                    "label": "ジャンクション",
+                    "options": {
+                        "circular": "ロータリー交差点(優先権なし)",
+                        "jughandle": "連絡用ランプ",
+                        "roundabout": "ラウンドアバウト(優先権あり)"
+                    }
+                },
                 "kerb": {
                     "label": "縁石の詳細"
                 },
                         "underground": "地下"
                     }
                 },
-                "passenger_information_display": {
-                    "label": "乗客向け情報掲示板"
-                },
                 "payment_multi": {
                     "label": "支払の種類"
                 },
                     },
                     "placeholder": "山岳ハイキング, 高地登山…"
                 },
+                "salt": {
+                    "label": "塩分"
+                },
                 "sanitary_dump_station": {
                     "label": "汚物廃棄所の場所"
                 },
                     },
                     "placeholder": "可、不可、持ち帰りのみ"
                 },
+                "tidal": {
+                    "label": "潮間帯"
+                },
                 "to": {
                     "label": "To"
                 },
                 },
                 "website": {
                     "label": "ウェブサイト",
-                    "placeholder": "http://example.com/"
+                    "placeholder": "https://example.com"
                 },
                 "wetland": {
                     "label": "種類"
                     "name": "時計",
                     "terms": "時計, クロック, 公園, 駅前, 広場"
                 },
+                "amenity/clock/sundial": {
+                    "name": "日時計",
+                    "terms": "日時計, 時計"
+                },
                 "amenity/college": {
                     "name": "短大・高専・専門学校(代表点または敷地)",
                     "terms": "キャンパス, 短大, 高専, 専門学校, , 教育, 学校"
                     "name": "ファストフード・ケバブ",
                     "terms": "ファストフード, ケバブ, シシケバブ, 飲食店, 食事, 食べる, 料理, ランチ"
                 },
+                "amenity/fast_food/mexican": {
+                    "name": "ファストフード・メキシコ料理",
+                    "terms": "食事, ランチ, 食べる, 料理, 飲食店, ファストフード・メキシコ料理, メキシカン"
+                },
                 "amenity/fast_food/pizza": {
                     "name": "ファストフード・ピザ",
                     "terms": "ファストフード, ピザ, 飲食店, 食事, 食べる, 料理, ピッツァ, ランチ"
                     "name": "薬局・ドラッグストア",
                     "terms": "薬局, ドラッグストア, 薬品店, 医療, 薬, 薬屋, くすり屋, 調剤, 調剤薬局, 処方箋, 健康, 薬店"
                 },
+                "amenity/photo_booth": {
+                    "name": "証明写真機",
+                    "terms": "証明写真機, 証明写真撮影機,証明写真ボックス, コンビニ証明写真, 自販機, 写真"
+                },
                 "amenity/place_of_worship": {
                     "name": "宗教施設全般",
                     "terms": "礼拝所, 祈りの場所, 参拝所, 寺社, 神社, 信仰, 宗教, 宗教施設"
                     "name": "サンドトラップ",
                     "terms": "サンドトラップ, バンカー, ゴルフ"
                 },
+                "golf/cartpath": {
+                    "name": "ゴルフカート用の道",
+                    "terms": "ゴルフカート用の道, ゴルフ, ゴルフカート, ゴルフ場"
+                },
+                "golf/cartpath_service": {
+                    "name": "ゴルフカート用の道・側道",
+                    "terms": "ゴルフカート用の道・側道, ゴルフ, ゴルフカート, ゴルフ場"
+                },
+                "golf/driving_range": {
+                    "name": "打ちっぱなし",
+                    "terms": "打ちっぱなし, ゴルフ, ゴルフ練習場, ゴルフ場, スポーツ, 打ちっ放し"
+                },
                 "golf/fairway": {
                     "name": "フェアウェイ",
                     "terms": "フェアウェー, フェアウェイ, ゴルフ"
                     "name": "ゴルフホール",
                     "terms": "ホール, ゴルフ"
                 },
-                "golf/lateral_water_hazard_area": {
+                "golf/lateral_water_hazard": {
                     "name": "ラテラルウォーターハザード",
-                    "terms": "池ポチャ, ウォーターハザード, ゴルフ"
+                    "terms": "ラテラルウォーターハザード, ゴルフ"
                 },
-                "golf/lateral_water_hazard_line": {
-                    "name": "ã\83©ã\83\86ã\83©ã\83«ã\82¦ã\82©ã\83¼ã\82¿ã\83¼ã\83\8fã\82¶ã\83¼ã\83\89",
-                    "terms": "池ポチャ, ウォーターハザード, ゴルフ"
+                "golf/path": {
+                    "name": "ã\82´ã\83«ã\83\95å ´ã\81®æ­©è¡\8cè·¯",
+                    "terms": "ゴルフ場の歩行路, ゴルフ, ゴルフ場"
                 },
                 "golf/rough": {
                     "name": "ラフ",
                     "name": "ティー",
                     "terms": "ティー, ゴルフ"
                 },
-                "golf/water_hazard_area": {
-                    "name": "ウォーターハザード",
-                    "terms": "池ポチャ, ウォーターハザード, ゴルフ"
-                },
-                "golf/water_hazard_line": {
+                "golf/water_hazard": {
                     "name": "ウォーターハザード",
-                    "terms": "池ポチャ, ウォーターハザード, ゴルフ"
+                    "terms": "池ポチャ, ウォーターハザード, ゴルフ, ゴルフ場"
                 },
                 "healthcare": {
                     "name": "医療",
                     "terms": "交差点"
                 },
                 "landuse": {
-                    "name": "土地利用",
-                    "terms": "土地利用"
+                    "name": "土地利用"
                 },
                 "landuse/allotments": {
                     "name": "市民農園",
                     "terms": "ぶどう畑, 果樹園, 森林, 樹木, 植物, ブドウ, 農業"
                 },
                 "leisure": {
-                    "name": "レジャー施設全般",
-                    "terms": "レジャー, 娯楽"
+                    "name": "レジャー施設全般"
                 },
                 "leisure/adult_gaming_centre": {
                     "name": "遊技場(成人向け)",
                     "name": "ピクニックテーブル",
                     "terms": "ピクニックテーブル, アウトドア"
                 },
+                "leisure/picnic_table/chess": {
+                    "name": "チェス台",
+                    "terms": "チェス台, チェステーブル, チェス卓, ゲーム"
+                },
                 "leisure/pitch": {
                     "name": "スポーツ競技場",
                     "terms": "スポーツ競技場, 運動場, 競技場, グラウンド, 校庭, 競技, 練習"
                     "name": "スポーツセンター/複合施設",
                     "terms": "スポーツセンター, 複合施設, 運動, 競技, トレーニング, 練習, 訓練, 体操"
                 },
+                "leisure/sports_centre/climbing": {
+                    "name": "クライミングジム",
+                    "terms": "クライミングジム, クライミング, スポーツ, ボルダリング"
+                },
                 "leisure/sports_centre/swimming": {
                     "name": "遊泳プール(屋内)",
                     "terms": "遊泳プール, プール, 水泳場, スポーツ, 運動, 競技, スポーツセンター, 屋内プール, 娯楽, 水浴び, 水遊び, 競泳"
                     "terms": "線, ライン"
                 },
                 "man_made": {
-                    "name": "人工物",
-                    "terms": "人工物, 建造物"
+                    "name": "人工物"
                 },
                 "man_made/adit": {
                     "name": "坑口",
                     "name": "塔",
                     "terms": "塔, タワー"
                 },
+                "man_made/tower/bell_tower": {
+                    "name": "鐘楼",
+                    "terms": "鐘楼, 鐘, 釣鐘, 釣り鐘"
+                },
                 "man_made/tower/communication": {
                     "name": "塔(通信)",
                     "terms": "塔(通信), 通信塔, 塔, タワー"
                 },
+                "man_made/tower/minaret": {
+                    "name": "ミナレット",
+                    "terms": "ミナレット, イスラム"
+                },
                 "man_made/tower/observation": {
                     "name": "塔(観察)",
                     "terms": "塔(観察), 観察塔, 調査塔, タワー, 火の見やぐら, 火の見櫓"
                     "terms": "電話線用マンホール"
                 },
                 "natural": {
-                    "name": "自然",
-                    "terms": "自然"
+                    "name": "自然"
                 },
                 "natural/bare_rock": {
                     "name": "岩場",
                     "name": "水域",
                     "terms": "水域"
                 },
+                "natural/water/basin": {
+                    "name": "遊水地",
+                    "terms": "遊水地, 遊水池, 集水地域, 水, 貯水池"
+                },
                 "natural/water/canal": {
                     "name": "運河",
                     "terms": "運河, 水路, 河川, 川"
                     "name": "変圧器",
                     "terms": "変圧器"
                 },
-                "public_transport/linear_platform": {
-                    "name": "交通機関のプラットホーム/のりば",
-                    "terms": "プラットホーム, 待合所, 乗り場, ホーム, 駅, 乗降所, 停車場, 停留所, のりば"
-                },
-                "public_transport/linear_platform_aerialway": {
-                    "name": "ロープウェイのりば/プラットホーム",
-                    "terms": "ロープウェイ, チェアリフト, 牽引リフト, スキーリフト, リフト, のりば, ホーム, プラットホーム, 索道駅, 駅"
-                },
-                "public_transport/linear_platform_bus": {
-                    "name": "バスのりば/プラットホーム",
-                    "terms": "バス停, バス乗り場, バスのりば, バス, BRT, バスターミナル, バスステーション, バスストップ, BS, のりば, ホーム, プラットホーム, 停留所, 駅"
-                },
-                "public_transport/linear_platform_ferry": {
-                    "name": "旅客船のりば/プラットホーム",
-                    "terms": "フェリー乗り場, フェリー, 港, 船着場, 船, 客船, 旅客船, フェリーターミナル, 舟, 連絡船, 渡し船, 渡船, のりば, ホーム, プラットホーム"
-                },
-                "public_transport/linear_platform_light_rail": {
-                    "name": "ライトレールのりば/プラットホーム",
-                    "terms": "ライトレール乗り場, ライトレール, LRT, 路面電車, トラム, 駅, 停留所, 電停, 停車場, 乗降所, のりば, ホーム, プラットホーム"
-                },
-                "public_transport/linear_platform_monorail": {
-                    "name": "モノレールのりば/プラットホーム",
-                    "terms": "モノレール乗り場, モノレール, 駅, 停車場, 停留場, のりば, ホーム, プラットホーム"
-                },
-                "public_transport/linear_platform_subway": {
-                    "name": "地下鉄のりば/プラットホーム",
-                    "terms": "地下鉄乗り場, 地下鉄, のりば, ホーム, プラットホーム, 駅, メトロ, 地下駅, 地下鉄駅, 停車場, 停留場"
-                },
-                "public_transport/linear_platform_train": {
-                    "name": "鉄道のりば/プラットホーム",
-                    "terms": "鉄道乗り場, 鉄道, 列車, 電車, のりば, ホーム, プラットホーム, 駅, 停車場, 停留場"
-                },
-                "public_transport/linear_platform_tram": {
-                    "name": "路面電車のりば/プラットホーム",
-                    "terms": "トラム乗り場, トラム, 路面電車, LRT, ライトレール, 市電, ちんちん電車, チンチン電車, のりば, ホーム, プラットホーム, 駅, 電停, 停留場, 停車場, 乗降所"
-                },
-                "public_transport/linear_platform_trolleybus": {
-                    "name": "トロリーバスのりば/プラットホーム",
-                    "terms": "トロリーバス乗り場, トロリーバス, のりば, ホーム, プラットホーム, バス停, バス乗り場, バスのりば, バス, バスターミナル, バスステーション, バスストップ, BS, のりば, ホーム, プラットホーム, 停留所"
-                },
                 "public_transport/platform": {
                     "name": "交通機関(全般)の乗り場/プラットホーム",
                     "terms": "プラットホーム, 待合所, 乗り場, ホーム, 駅, 乗降所, 停車場, 停留所, 電停, のりば"
                     "terms": "ワイン店, 酒屋, 食品, アルコール, 嗜好品, 飲み物"
                 },
                 "tourism": {
-                    "name": "観光",
-                    "terms": "旅行, 観光"
+                    "name": "観光"
                 },
                 "tourism/alpine_hut": {
                     "name": "山小屋",
             },
             "gsi.go.jp": {
                 "attribution": {
-                    "text": "国土地理院"
+                    "text": "国土地理院 オルソ"
                 },
                 "description": "最大ズームレベル17。歪みは補正(オルソ化)済みであり、概してBingより位置精度が高く国内では最も安定して利用可能な画像だが、Bingよりやや古い場合がある。",
                 "name": "国土地理院 電子国土基本図(オルソ画像)"
             },
             "gsi.go.jp_airphoto": {
                 "attribution": {
-                    "text": "国土地理院"
+                    "text": "国土地理院 簡易空中写真"
                 },
                 "description": "航空レーザー測量点検用写真をつなぎ合わせたもので、地理院オルソ画像とは撮影時期やカバー範囲が少し異なる部分もあるため、オルソ画像の代替として有用な場合がある。",
                 "name": "国土地理院 簡易空中写真"
             },
             "gsi.go.jp_std_map": {
                 "attribution": {
-                    "text": "国土地理院"
+                    "text": "国土地理院 標準地図"
                 },
                 "description": "ズームレベル5~18の日本全国とその周辺地域をカバー。地図画像なのでトレースしやすく、概してBingより位置精度が高いが、やや古い場合がある。",
                 "name": "国土地理院 標準地図"
index d0e1ba1bb4de23444b597bd7c76672fcf40dacc4..7ec259a548d20d062c28229a100ed62fa483f68b 100644 (file)
             "locating": "ಪತ್ತೆ ಹಚ್ಚುತ್ತಿದೆ. ದವವಿತ್ತು ಸ್ವಲ್ಪ ಸಮಯ ಕಾಯಿರಿ. "
         },
         "inspector": {
-            "no_documentation_combination": "ಈ ಗುರುತುಪಟ್ಟಿ ಸಂಯೋಜನೆ ಬಗ್ಗೆ ಯಾವುದೇ ಮಾಹಿತಿ ಅಥವಾ ದಾಖಲೆ ಇಲ್ಲ.  ",
-            "no_documentation_key": "ಈ ಕೀ ಬಗ್ಗೆ ಯಾವುದೇ ಮಾಹಿತಿ ಅಥವಾ ದಾಖಲೆ ಇಲ್ಲ.  ",
             "show_more": "‍ಇನ್ನೂ ತೋರಿಸು",
             "view_on_osm": "ಓಪನ್ ಸ್ಟ್ರೀಟ್ ಮ್ಯಾಪ್.ಆರ್ಗ್ ನಲ್ಲಿ ನೋಡಿ. ",
             "all_fields": "ಎಲ್ಲ ವರ್ಗಗಳು. ",
             "role": "ಪಾತ್ರ",
             "choose": "ವಸ್ತು ಪ್ರಕಾರವನ್ನ ಆಯ್ಕೆಮಾಡಿ  ",
             "results": "{n} ಫಲಿತಾಂಶಗಳು {search} ",
-            "reference": "ಓಪನ್ಸ್ಟ್ರೀಟ್ಮ್ಯಾಪ್ ವಿಕಿ ನಲ್ಲಿ ನೋಡಿ.",
             "back_tooltip": "ಲಕ್ಷಣವನ್ನು ಬದಲಿಸು",
             "remove": "ತೆಗೆದುಹಾಕು",
             "search": "ಹುಡುಕು",
                 "tooltip": "ವಿದ್ಯುತ್ ಸಂಪರ್ಕಗಳು, ವಿದ್ಯುತ್ ಉತ್ಪಾದನಾ ಘಟಕಗಳು, ಉಪಕೇಂದ್ರಗಳು ಇತ್ಯಾದಿ"
             },
             "past_future": {
-                "description": "ಭೌತ / ಭವಿಷ್ಯ",
                 "tooltip": "ಪ್ರ‍ಸ್ತಾವಿಸಿದ, ನಿರ್ಮಾ‍ಣ ಹಂತದ, ಕೈಬಿಟ್ಟ, ಕೆಡವ‍ಲಾದ ಇತ್ಯಾದಿ"
             },
             "others": {
-                "description": "ಇತರೆ",
                 "tooltip": "ಇನ್ನಿತರೆ"
             }
         },
             "on_wiki": "{tag} wiki.osm.org ನಲ್ಲಿ",
             "used_with": "{ಮಾದರಿ} ಜೊತೆಗೆ ಬಳಸಿ. "
         },
-        "validations": {
-            "disconnected_highway": "ಸಂಪರ್ಕ ಕಡಿತಗೊಂಡಿರುವ ಹೆದ್ದಾರಿ  ",
-            "untagged_point": "ಹೆಸರುಪಟ್ಟಿಯಿಲ್ಲದ ಚುಕ್ಕೆ. ",
-            "untagged_line": "ಹೆಸರುಪಟ್ಟಿಯಿಲ್ಲದ ಗೆರೆ. ",
-            "untagged_area": "ಹೆಸರುಪಟ್ಟಿಯಿಲ್ಲದ ಕ್ಷೇತ್ರ.",
-            "untagged_relation": "ಟ್ಯಾಗ್ ಮಾಡಲಾಗದ ಸಂಬಂಧ",
-            "deprecated_tags": "‍ಉಪಯೋಗಿಸದ ಗುರುತುಪಟ್ಟಿಗಳು: {tags}"
-        },
         "full_screen": "‍ಪೂರ್ಣ ಪರದೆಗೆ ಹಿಂದಿರುಗು",
         "mapillary_images": {
             "tooltip": "ರಸ್ತೆ ಮಟ್ಟದ ಚಿತ್ರಗಳು ಮ್ಯಾಪಿಲರೀ ಇಂದ ",
                 "category-building": {
                     "name": "‍ಕಟ್ಟಡ ‍ವೈಶಿಷ್ಟ್ಯಗಳು"
                 },
-                "category-golf": {
-                    "name": "ಗಾಲ್ಫ್ ವೈಶಿಷ್ಟ್ಯಗಳು‍‍‍"
-                },
                 "category-landuse": {
                     "name": "ಭೂಮಿಯ  ವೈಶಿಷ್ಟ್ಯಗಳು‍‍"
                 },
                     "label": "ವಿಧ"
                 },
                 "website": {
-                    "label": "ಜಾಲತಾಣ",
-                    "placeholder": "http://example.com/"
+                    "label": "ಜಾಲತಾಣ"
                 },
                 "wetland": {
                     "label": "ವಿಧ"
                 "building/terrace": {
                     "name": "ಸಾಲು ಮನೆಗಳು"
                 },
-                "building/train_station": {
-                    "name": "ರೈಲ್ವೆ ನಿಲ್ದಾಣ"
-                },
                 "building/university": {
                     "name": "ವಿಶ್ವವಿದ್ಯಾಲಯ ಕಟ್ಟಡ"
                 },
index c9fee0d7dfbbb3fe0ed9ec2d3d8bfded49553553..3029acfba778c93d23e5a6ad64ba7349f8c3d19a 100644 (file)
                         "to_point": "점에 길을 연결했습니다.",
                         "to_vertex": "다른 곳에 길을 연결했습니다.",
                         "to_line": "선에 길을 연결했습니다.",
-                        "to_area": "지역에 길을 연결했습니다."
+                        "to_area": "지역에 길을 연결했습니다.",
+                        "to_adjacent_vertex": "길의 인접한 점을 병합했습니다.",
+                        "to_sibling_vertex": "길을 자기 자신에게 연결했습니다."
                     }
                 },
                 "relation": "이 지물은 일부 역할 관계의 값이 상반되어 연결할 수 없습니다.",
         "restriction": {
             "controls": {
                 "distance": "거리",
+                "distance_up_to": "최대 {distance}",
                 "via": "경유",
-                "via_node_only": "노드 전용"
+                "via_node_only": "노드 전용",
+                "via_up_to_one": "최대 1개",
+                "via_up_to_two": "최대 2개"
             },
             "help": {
                 "turn": {
                 "from": "에서",
                 "via": "경유",
                 "to": "방면",
-                "from_name": "{fromName} {from}",
-                "from_name_to_name": "{fromName} {from} {toName} {to}",
+                "from_name": "{fromName}{from}",
+                "from_name_to_name": "{fromName}{from} {toName}{to}",
                 "via_names": "{viaNames} {via}",
-                "select_from": "{from} 분절을 선택하려면 클릭하세요.",
-                "select_from_name": "{from} {fromName}을(를) 선택하려면 클릭하십시요"
+                "select_from": "시작 분절을 선택하려면 클릭하세요",
+                "select_from_name": "{fromName}에서 시작하려면 클릭하세요",
+                "toggle": "클릭해서 {turn} 설정"
             }
         },
         "undo": {
             "title": "오픈스트리트맵에 올리기",
             "upload_explanation": "올린 변경사항은 오픈스트리트맵 자료를 사용하는 모든 지도에 보여집니다.",
             "upload_explanation_with_user": "{user} 사용자로 올린 변경사항은 오픈스트리트맵 자료를 사용하는 모든 지도에 보여집니다.",
-            "request_review": "ë\88\84êµ°ê°\80ê°\80 ì \9c ì\88\98ì \95ì\9d\84 ë³´길 원합니다.",
+            "request_review": "ë\88\84êµ°ê°\80ê°\80 ì \9c ì\88\98ì \95ì\9d\84 ë¦¬ë·°í\95\98길 원합니다.",
             "save": "올리기",
             "cancel": "취소",
             "changes": "{count}번 바뀜",
             "locating": "위치 확인 중, 기다려주세요..."
         },
         "inspector": {
-            "no_documentation_combination": "이 태그 조합에 사용할 수 있는 설명문이 없습니다",
-            "no_documentation_key": "이 키에 사용할 수 있는 설명문이 없습니다",
             "show_more": "더 보기",
             "view_on_osm": "openstreetmap.org에서 보기",
             "view_on_keepRight": "keepright.at에서 보기",
             "role": "역할",
             "choose": "지물 유형 선택",
             "results": "{search}에 대한 결과 {n}개",
-            "reference": "오픈스트리트맵 위키에서 보기",
-            "edit_reference": "설명 편집 또는 번역하기",
             "wiki_reference": "문서 보기",
             "wiki_en_reference": "영어 문서 보기",
             "back_tooltip": "지물 바꾸기",
                     "tooltip": "keepright.at에서 자동으로 감지한 지도 문제점",
                     "title": "KeepRight 문제점"
                 },
+                "improveOSM": {
+                    "tooltip": "improveosm.org에서 자동으로 감지한 누락된 데이터",
+                    "title": "ImproveOSM 문제점"
+                },
                 "custom": {
                     "tooltip": "페이지에 데이터 파일을 끌어놓거나 버튼을 눌러 시작하세요",
                     "title": "사용자 지정 지도 데이터",
                 "tooltip": "송전선, 발전소, 변전소 등"
             },
             "past_future": {
-                "description": "과거/미래",
                 "tooltip": "제안, 건설, 버림, 철거 등"
             },
             "others": {
-                "description": "기타",
                 "tooltip": "그 밖의 모두"
             }
         },
             "help_link_text": "자세한 정보",
             "help_link_url": "https://wiki.openstreetmap.org/wiki/Ko:FAQ#.EB.82.98.EB.8A.94_.EC.A7.80.EB.8F.84.EC.97.90_.EC.95.BD.EA.B0.84.EC.9D.98_.EB.B3.80.EA.B2.BD.EC.9D.84_.EA.B0.80.ED.96.88.EB.8B.A4._.EB.82.B4.EA.B0.80_.EC.96.B4.EB.96.BB.EA.B2.8C_.EB.82.98.EC.9D.98_.EB.B3.80.EA.B2.BD.EC.82.AC.ED.95.AD.EC.9D.84_.EB.B3.BC_.EC.88.98_.EC.9E.88.EB.82.98.EC.9A.94.3F",
             "view_on_osm": "OSM에서 변경점 보기",
-            "changeset_id": "당신의 바뀜기록 번호: {changeset_id}",
+            "changeset_id": "당신의 바뀜집합 번호: {changeset_id}",
             "like_osm": "OpenStreetMap을 좋아하시나요? 다른 사람들과 만나세요:",
             "more": "더 보기",
+            "events": "이벤트",
             "languages": "언어: {languages}",
             "missing": "목록에 무언가 빠졌나요?",
             "tell_us": "말해주세요!"
             "on_wiki": "wiki.osm.org에 있는 {tag}",
             "used_with": "{type}로 사용됨"
         },
-        "validations": {
-            "disconnected_highway": "도로가 연결되어 있지 않음",
-            "disconnected_highway_tooltip": "도로는 다른 도로나 건물 입구와 연결되어야 합니다.",
-            "old_multipolygon": "바깥 쪽의 다중 다각형 태그",
-            "old_multipolygon_tooltip": "이 스타일의 다중면은 더이상 사용되지 않습니다. 바깥쪽 대신에 부모 다중면을 배치해 주세요 ",
-            "untagged_point": "태그되지 않은 점",
-            "untagged_point_tooltip": "이 점이 무엇인지 설명하는 지물 유형을 선택하세요.",
-            "untagged_line": "태그되지 않은 선",
-            "untagged_line_tooltip": "이 선이 무엇인지 설명하는 지물 유형을 선택하세요.",
-            "untagged_area": "태그되지 않은 공간",
-            "untagged_area_tooltip": "이 공간을 설명하는 지물 유형을 선택하세요.",
-            "untagged_relation": "태그되지 않은 관계",
-            "untagged_relation_tooltip": "이 관계가 무엇인지 설명하는 지물 유형을 선택하세요.",
-            "many_deletions": "개체 {n}개: 노드 {p}개, 선 {l}개, 지역 {a}개, 관계 {r}개를 삭제하고 있습니다. 이를 수행하겠습니까? 다른 사람이 openstreetmap.org에서 보는 지도에서 삭제됩니다.",
-            "tag_suggests_area": "{tag} 태그의 제안 선은 공간이여야 하지만 태그는 공간이 아닙니다",
-            "deprecated_tags": "사용되지 않는 태그: {tags}"
-        },
         "zoom": {
             "in": "확대",
             "out": "축소"
                 "close": "닫기(오류 수정됨)",
                 "ignore": "무시(오류가 아님)",
                 "save_comment": "댓글 저장",
+                "close_comment": "닫고 댓글 추가",
+                "ignore_comment": "무시하고 댓글 추가",
                 "error_parts": {
                     "this_node": "이 노드",
                     "this_way": "이 길",
                     "this_relation": "이 관계",
+                    "this_oneway": "이 일방통행로",
                     "this_highway": "이 도로",
                     "this_railway": "이 철도",
                     "this_waterway": "이 수로",
                         "title": "겹친 길",
                         "description": "{var1}은(는) {var2} {var3}과(와) 겹칩니다."
                     },
+                    "210": {
+                        "title": "스스로 교차하는 길"
+                    },
                     "211": {
                         "description": "{var1}은(는) 하나의 노드를 여러 번 포함합니다. 해당하는 노드는 {var2}입니다. 이는 오류일 수도 아닐 수도 있습니다."
                     },
                     "about": {
                         "title": "정보"
                     },
+                    "inspecting": {
+                        "title": "조사하기"
+                    },
+                    "modifying": {
+                        "title": "편집하기"
+                    },
                     "tips": {
                         "title": "정보"
                     }
                 "zoom": "마우스 휠이나 트랙 패드로 스크롤하거나 {plus} / {minus} 버튼을 이요하여 확대하거나 축소할 수 있습니다. **지도를 확대하세요!**",
                 "features": "우리는 *지물*이라는 단어를 사용하여 지도에 나타나는 것을 설명합니다. 현실 세계의 모든 것을 OpenStreetMap을 이용하여 매핑할 수 있습니다.",
                 "points_lines_areas": "지물은 *점, 선, 공간*을 대표하는 단어입니다.",
-                "nodes_ways": "OpenStreetMapì\97\90ì\84\9c, ì \90ì\9d\80 ë\95\8cë\96\84ë¡\9c *ë\85¸ë\93\9c\9d¼ê³  ë¶\88리며, ì\84 ê³¼ ê³µê°\84ì\9d\80 ë\95\8cë\95\8cë¡\9c *길*이라고 불립니다.",
+                "nodes_ways": "OpenStreetMapì\97\90ì\84\9c, ì \90ì\9d\80 ë\95\8cë\95\8cë¡\9c *ë\85¸ë\93\9c\9d¼ê³  ë¶\88리며, ì\84 ê³¼ ê³µê°\84ì\9d\80 *길*이라고 불립니다.",
                 "click_townhall": "지도에 있는 모든 지물은 클릭하여 선택할 수 있습니다. **선택하려면 점을 클릭하세요.**",
                 "selected_townhall": "좋습니다! 이제 포인트가 선택되었습니다. 선택된 점은 pulsing glow로 그려집니다.",
                 "editor_townhall": "지물이 선택되었을 때, *지물 편집기*가 지도 옆에 표시됩니다.",
                 "category-building": {
                     "name": "건물형 지물"
                 },
-                "category-golf": {
-                    "name": "골프형 지물"
+                "category-golf-area": {
+                    "name": "골프 지물"
+                },
+                "category-golf-line": {
+                    "name": "골프 지물"
                 },
                 "category-landuse": {
                     "name": "토지 이용 지물"
                 "building": {
                     "label": "건물"
                 },
+                "building/material": {
+                    "label": "재질"
+                },
                 "building_area": {
                     "label": "건물"
                 },
                 "diaper": {
                     "label": "기저귀 교환대 이용 가능"
                 },
+                "diet_multi": {
+                    "label": "식성"
+                },
                 "direction": {
                     "label": "방향(시계 방향 각도)",
                     "placeholder": "45, 90, 180, 270"
                 "frequency_electrified": {
                     "label": "동작 주파수"
                 },
+                "from": {
+                    "label": "출발점"
+                },
                 "fuel": {
                     "label": "주유소"
                 },
                         "underground": "지하"
                     }
                 },
-                "passenger_information_display": {
-                    "label": "버스정보시스템"
-                },
                 "payment_multi": {
                     "label": "결제 종류"
                 },
                     },
                     "placeholder": "등산, 알파인 하이킹..."
                 },
+                "salt": {
+                    "label": "염분"
+                },
                 "sanitary_dump_station": {
                     "label": "화장실 처리장"
                 },
                     "label": "목적"
                 },
                 "siren/type": {
-                    "label": "유형"
+                    "label": "유형",
+                    "options": {
+                        "electronic": "전자식",
+                        "other": "기타",
+                        "pneumatic": "유압식"
+                    }
                 },
                 "site": {
                     "label": "유형"
                     },
                     "placeholder": "예, 아니오, 테이크 아웃만..."
                 },
+                "tidal": {
+                    "label": "조수"
+                },
+                "to": {
+                    "label": "종착점"
+                },
                 "toilets/disposal": {
                     "label": "처리장",
                     "options": {
                 },
                 "website": {
                     "label": "웹사이트",
-                    "placeholder": "http://example.com/"
+                    "placeholder": "https://example.com"
                 },
                 "wetland": {
                     "label": "유형"
                     "terms": "비스트로,커피,차"
                 },
                 "amenity/car_pooling": {
-                    "name": "카풀"
+                    "name": "카풀",
+                    "terms": "카풀,차량 공유"
                 },
                 "amenity/car_rental": {
                     "name": "자동차 대여",
                     "name": "시계방",
                     "terms": "시계방"
                 },
+                "amenity/clock/sundial": {
+                    "name": "해시계",
+                    "terms": "해시계"
+                },
                 "amenity/college": {
                     "name": "전문대학 부지",
                     "terms": "직업전문학교 부지"
                 },
                 "amenity/crematorium": {
                     "name": "화장장",
-                    "terms": "화장장"
+                    "terms": "화장장,화장터,장례"
                 },
                 "amenity/dentist": {
                     "name": "치과 의원",
                 "amenity/fast_food/kebab": {
                     "name": "케밥 패스트푸드"
                 },
+                "amenity/fast_food/mexican": {
+                    "name": "멕시코 패스트푸드"
+                },
                 "amenity/fast_food/pizza": {
                     "name": "피자 패스트푸드"
                 },
                 },
                 "amenity/studio": {
                     "name": "스튜디오",
-                    "terms": "스튜디오, 촬영장"
+                    "terms": "스튜디오,촬영장"
                 },
                 "amenity/swimming_pool": {
                     "name": "수영장"
                 },
                 "building/greenhouse": {
                     "name": "온실",
-                    "terms": "비닐 하우스"
+                    "terms": "비닐하우스"
                 },
                 "building/hospital": {
                     "name": "병원 건물",
                     "name": "연립주택",
                     "terms": "테라스 하우스"
                 },
-                "building/train_station": {
-                    "name": "기차역"
-                },
                 "building/transportation": {
                     "name": "대중교통 건물"
                 },
                 "emergency/destination": {
                     "name": "비상시 접근 도착지"
                 },
+                "emergency/fire_alarm": {
+                    "name": "화재경보기"
+                },
                 "emergency/fire_extinguisher": {
                     "name": "소화기"
                 },
                     "name": "민간 비상시 접근지"
                 },
                 "emergency/siren": {
-                    "name": "사이렌"
+                    "name": "사이렌",
+                    "terms": "사이렌,경고"
                 },
                 "emergency/water_tank": {
                     "name": "비상 물탱크"
                 },
                 "golf/bunker": {
                     "name": "벙커",
-                    "terms": "모ë\9e\98 í\95¨ì \95샌드 트랩"
+                    "terms": "ë²\99커,샌드 트랩"
                 },
                 "golf/fairway": {
                     "name": "페어웨이",
                     "name": "골프 홀",
                     "terms": "골프 구멍"
                 },
-                "golf/lateral_water_hazard_area": {
-                    "name": "래터럴 워터 해저드",
-                    "terms": "래터럴 워터 해저드"
-                },
-                "golf/lateral_water_hazard_line": {
-                    "name": "래터럴 워터 해저드",
-                    "terms": "래터럴 워터 해저드"
+                "golf/lateral_water_hazard": {
+                    "name": "래터럴 워터 해저드"
                 },
                 "golf/rough": {
                     "name": "러프",
                     "name": "티 박스",
                     "terms": "티 박스"
                 },
-                "golf/water_hazard_area": {
-                    "name": "워터 해저드",
-                    "terms": "워터 해저드"
-                },
-                "golf/water_hazard_line": {
-                    "name": "워터 해저드",
-                    "terms": "워터 해저드"
+                "golf/water_hazard": {
+                    "name": "워터 해저드"
                 },
                 "healthcare": {
                     "name": "의료 시설",
                     "terms": "삼거리,사거리,오거리"
                 },
                 "landuse": {
-                    "name": "토지 이용",
-                    "terms": "토지 이용"
+                    "name": "토지 이용"
                 },
                 "landuse/allotments": {
                     "name": "텃밭",
                     "terms": "포도원,포도주,와인"
                 },
                 "leisure": {
-                    "name": "여가",
-                    "terms": "레저,레져"
+                    "name": "여가"
                 },
                 "leisure/adult_gaming_centre": {
                     "name": "성인용 게임방",
                     "name": "미식축구 경기장",
                     "terms": "미식 축구장"
                 },
+                "leisure/pitch/australian_football": {
+                    "name": "오스트레일리아식 축구장"
+                },
                 "leisure/pitch/badminton": {
                     "name": "배드민턴 코트"
                 },
                     "terms": "선"
                 },
                 "man_made": {
-                    "name": "인공물",
-                    "terms": "인공물"
+                    "name": "인공물"
                 },
                 "man_made/adit": {
                     "name": "수평갱",
                     "name": "탑",
                     "terms": "타워"
                 },
+                "man_made/tower/bell_tower": {
+                    "name": "종탑"
+                },
                 "man_made/tower/communication": {
                     "name": "통신 탑"
                 },
+                "man_made/tower/minaret": {
+                    "name": "미너렛"
+                },
                 "man_made/tower/observation": {
                     "name": "관측 탑"
                 },
                     "terms": "뚜껑,전화,구멍,텔레콤"
                 },
                 "natural": {
-                    "name": "자연",
-                    "terms": "자연"
+                    "name": "자연"
                 },
                 "natural/bare_rock": {
                     "name": "노출된 암반",
                     "name": "연구 사무소",
                     "terms": "연구 사무실"
                 },
+                "office/surveyor": {
+                    "name": "측량기사 사무실"
+                },
                 "office/tax_advisor": {
                     "name": "세무사 사무소",
                     "terms": "세금,조세"
                     "name": "변압 시설",
                     "terms": "변압 시설"
                 },
-                "public_transport/linear_platform": {
-                    "name": "대중교통 정거장 / 승강장",
-                    "terms": "플랫폼,대중교통"
-                },
-                "public_transport/linear_platform_aerialway": {
-                    "name": "삭도 정거장 / 승강장",
-                    "terms": "가공삭도,공중삭도,로프웨이,케이블카,플랫폼,대중교통"
-                },
-                "public_transport/linear_platform_bus": {
-                    "name": "버스 정류장",
-                    "terms": "버스,정류소,정거장,대중교통"
-                },
-                "public_transport/linear_platform_ferry": {
-                    "name": "페리 정거장 / 승강장",
-                    "terms": "배,보트,부두,페리,잔교,플랫폼,대중교통"
-                },
-                "public_transport/linear_platform_light_rail": {
-                    "name": "경전철 정거장 / 승강장",
-                    "terms": "전기,경전철,라이트 레일,플랫폼,대중교통,철도,선로,트롤리"
-                },
-                "public_transport/linear_platform_monorail": {
-                    "name": "모노레일 정거장 / 승강장",
-                    "terms": "모노레일,플랫폼,대중교통,철도"
-                },
-                "public_transport/linear_platform_subway": {
-                    "name": "지하철 정거장 / 승강장",
-                    "terms": "지하철,플랫폼,대중교통,철도,선로,지하"
-                },
-                "public_transport/linear_platform_train": {
-                    "name": "기차 정거장 / 승강장",
-                    "terms": "플랫폼,대중교통,철도,선로,기차"
-                },
-                "public_transport/linear_platform_tram": {
-                    "name": "전차 정거장 / 승강장",
-                    "terms": "전기,플랫폼,대중교통,철도,선로,전차,트롤리"
-                },
-                "public_transport/linear_platform_trolleybus": {
-                    "name": "트롤리버스 정류장",
-                    "terms": "버스,전기,정류소,정거장,대중교통,무궤도,전차,트롤리"
-                },
                 "public_transport/platform": {
                     "name": "대중교통 정거장 / 승강장",
                     "terms": "플랫폼,대중교통"
                     "terms": "포도주 가게"
                 },
                 "tourism": {
-                    "name": "관광",
-                    "terms": "관광 여행"
+                    "name": "관광"
                 },
                 "tourism/alpine_hut": {
                     "name": "고산장"
index b77a37580f0d92a90f82c069ff3c9c2ca330225b..5389e379b906d32694ae10a9a7a77823b2123034 100644 (file)
                         "to_area": "Taškas perkeltas į plotą."
                     }
                 },
-                "relation": "Šie geoobjektai negali būti sujungti, nes jie turi konfliktuojančias ryšio roles."
+                "relation": "Šie geoobjektai negali būti sujungti, nes jie turi konfliktuojančias ryšio roles.",
+                "restriction": "Šių objektų sujungti negalima, nes tai pažeis ryšį „{relation}“."
             },
             "disconnect": {
                 "title": "Atskirti",
                 "annotation": "Sulieti {n} objektai.",
                 "not_eligible": "Šie geoobjektai negali būti sulieti.",
                 "not_adjacent": "Šių objektų negalima sulieti, nes jų pabaigos taškai nėra sujungti.",
+                "restriction": "Šių objektų sulieti negalima, nes tai pažeis ryšį „{relation}“.",
                 "incomplete_relation": "Šie objektai negali būti sujungti, nes ne visi pilnai atsiųsti.",
                 "conflicting_tags": "Šių objektų negalima sulieti, nes kai kurios iš jų žymų turi nesuderinamas reikšmes."
             },
             "locating": "Ieškoma, prašome palaukti..."
         },
         "inspector": {
-            "no_documentation_combination": "Nėra šios žymos ar žymų kombinacijos aprašymo",
-            "no_documentation_key": "Šis raktas neturi dokumentacijos",
             "show_more": "Rodyti daugiau",
             "view_on_osm": "Žiūrėti svetainėje openstreetmap.org",
             "all_fields": "Visi laukai",
             "role": "Rolė",
             "choose": "Parinkite geoobjekto tipą",
             "results": "{n} paieškos {search} rezultatai",
-            "reference": "Žiūrėti OpenStreetMap Wikyje",
             "back_tooltip": "Keisti objektą",
             "remove": "Pašalinti",
             "search": "Ieškoti",
                 "tooltip": "Elektros linijos, jėgainės, pastotės ir pan."
             },
             "past_future": {
-                "description": "Praeitis/Ateitis",
                 "tooltip": "Siūloma, statoma, apleista, nugriauta ir pan."
             },
             "others": {
-                "description": "Kita",
                 "tooltip": "Visa kita"
             }
         },
             "on_wiki": "{tag} svetainėje wiki.osm.org",
             "used_with": "naudojama su {type}"
         },
-        "validations": {
-            "disconnected_highway": "Neprijungtas kelias",
-            "disconnected_highway_tooltip": "Keliai turi būti prijungti prie kitų kelių arba pastatų įėjimų.",
-            "old_multipolygon": "Multipoligono žymės išorinėje linijoje",
-            "untagged_point": "Taškas be žymų",
-            "untagged_point_tooltip": "Pasirinkite objekto tipą, kuris apibūdina, koks tai taškas yra.",
-            "untagged_line": "Linija be žymų",
-            "untagged_line_tooltip": "Pasirinkite objekto tipą, kuris apibūdina, kokia tai linija yra.",
-            "untagged_area": "Plotas be žymų",
-            "untagged_area_tooltip": "Pasirinkite objekto tipą, kuris apibūdina, koks tai plotas yra.",
-            "untagged_relation": "Ryšys be žymų",
-            "untagged_relation_tooltip": "Parinkite objekto tipą, aprašantį kas yra šis ryšys.",
-            "tag_suggests_area": "Žyma {tag} rodo, kad linija turėtų būti plotas, bet ji nėra plotas",
-            "deprecated_tags": "Pasenusios žymos: {tags}"
-        },
         "zoom": {
             "in": "Priartinti",
             "out": "Atitolinti"
                 "category-building": {
                     "name": "Pastatų objektai"
                 },
-                "category-golf": {
-                    "name": "Golfo objektai"
-                },
                 "category-landuse": {
                     "name": "Žemėnaudos objektai"
                 },
                     "label": "Tipas"
                 },
                 "website": {
-                    "label": "Interneto svetainė",
-                    "placeholder": "http://pavyzdys.lt/"
+                    "label": "Interneto svetainė"
                 },
                 "wetland": {
                     "label": "Tipas"
                     "terms": "prekyvietė,turgus,turgelis"
                 },
                 "amenity/motorcycle_parking": {
-                    "name": "Motociklų parkavimas",
+                    "name": "Motociklų stovėjimo aikštelė",
                     "terms": "Motociklų stovėjimo aikštelė"
                 },
                 "amenity/music_school": {
                     "name": "Naktinis klubas",
                     "terms": "klubas,naktinis klubas"
                 },
+                "amenity/parking": {
+                    "name": "Automobilių stovėjimo aikštelė"
+                },
                 "amenity/parking_space": {
                     "name": "Stovėjimo vieta"
                 },
                 "building/temple": {
                     "name": "Šventyklos pastatas"
                 },
-                "building/train_station": {
-                    "name": "Traukinių stotis"
-                },
                 "building/university": {
                     "name": "Universiteto pastatas",
                     "terms": "universiteto pastatas,universitetas"
                     "terms": "gyvenamoji zona,miegamoji zona"
                 },
                 "landuse/retail": {
-                    "name": "Gelžkelio zona",
-                    "terms": "geležinkelio zona,gelžkelio zona"
+                    "name": "Prekybos zona",
+                    "terms": "prekybos zona"
                 },
                 "landuse/vineyard": {
                     "name": "Vynuogynas",
                     "terms": "vynuogynas"
                 },
                 "leisure": {
-                    "name": "Laisvalaikis",
-                    "terms": "laisvalaikis"
+                    "name": "Laisvalaikis"
                 },
                 "leisure/adult_gaming_centre": {
                     "name": "Suaugusiųjų lošimų vieta"
                     "name": "Linija"
                 },
                 "man_made": {
-                    "name": "Žmogaus sukurtas",
-                    "terms": "Žmogaus sukurtas"
+                    "name": "Žmogaus sukurtas"
                 },
                 "man_made/antenna": {
                     "name": "Antena"
index cdcdb7108407a49c6f40833d84cdfa42c226a8e3..81a64644113565144753575a419d2328a6c32d8c 100644 (file)
             "locating": "Nosakām atrašanās vietu, uzgaidiet..."
         },
         "inspector": {
-            "no_documentation_combination": "Šai apzīmējumu kombinācijai nav piejama dokumentācija",
-            "no_documentation_key": "Šai vērtībai nav piejama dokumentācija",
             "show_more": "Rādīt vairāk",
             "view_on_osm": "Apskatīt openstreetmap.org",
             "all_fields": "Visi lauki",
             "role": "Loma",
             "choose": "Izvēlieties objekta tipu",
             "results": "Atrasti {n} rezultāti meklējot {search}",
-            "reference": "Skatīt OpenStreetMap wiki →",
             "back_tooltip": "Mainīt objektu",
             "remove": "Noņemt ",
             "search": "Meklēt",
             "on_wiki": "{tag} wiki.osm.org",
             "used_with": "izmantots kopā ar {type}"
         },
-        "validations": {
-            "disconnected_highway": "Nepievienots ceļš",
-            "untagged_line": "Neapzīmēta līnija",
-            "untagged_line_tooltip": "Izvēlies tipu, kas vislabāk izskaidro šo līniju.",
-            "untagged_area": "Neapzīmēts apgabals",
-            "many_deletions": "Jūs dzēšat {n} objektus: {p} mezglus, {l} līnijas, {a} apgabalus, {r} relācijas.. Vai tiešām vēlaties to darīt? Tie tiks izdzēsti no kartes, ko visi var aplūkt openstreetmap.org.",
-            "tag_suggests_area": "Apzīmējums {tag} parasti tiek lietots apgabaliem, bet objekts nav apgabals",
-            "deprecated_tags": "Novecojuši apzīmējumi: {tags}"
-        },
         "zoom": {
             "in": "Pietuvināt",
             "out": "Attālināt"
                 "category-building": {
                     "name": "Ēku veidi"
                 },
-                "category-golf": {
-                    "name": "Golfa Objekti"
-                },
                 "category-landuse": {
                     "name": "Zemes Izmantojuma Objekti"
                 },
                         "underground": "Apakšzemes"
                     }
                 },
-                "passenger_information_display": {
-                    "label": "Pasažieru informācijas displejs"
-                },
                 "payment_multi": {
                     "label": "Maksājumu veidi"
                 },
                     "label": "Tips"
                 },
                 "website": {
-                    "label": "Interneta lapa",
-                    "placeholder": "http://example.com/"
+                    "label": "Interneta lapa"
                 },
                 "wetland": {
                     "label": "Tips"
                     "name": "Rindumājas",
                     "terms": "rindu mājas,mājas"
                 },
-                "building/train_station": {
-                    "name": "Vilcienu Stacija"
-                },
                 "building/university": {
                     "name": "Universitātes Ēka"
                 },
                 "power/transformer": {
                     "name": "Transformators"
                 },
-                "public_transport/linear_platform_bus": {
-                    "name": "Autobusu pietura / platforma"
-                },
-                "public_transport/linear_platform_ferry": {
-                    "name": "Prāmja pietura / Platforma"
-                },
-                "public_transport/linear_platform_subway": {
-                    "name": "Metro pietura / platforma"
-                },
-                "public_transport/linear_platform_train": {
-                    "name": "Vilciena Pietura / Platforma"
-                },
-                "public_transport/linear_platform_trolleybus": {
-                    "name": "Trolejbusu pietura / platforma"
-                },
                 "public_transport/platform_bus": {
                     "name": "Autobusu pietura / platforma"
                 },
index ad504570125150377ef4d0adaff07972c1abe36c..be21af7c78a89fe0936132946841ebe2629710a9 100644 (file)
             "locating": "Andraso fa mbola mamantatra ny toerana..."
         },
         "inspector": {
-            "no_documentation_combination": "Tsy misy tahirin-kevitra fantatra momba an'ity fitambarana tag  ity",
-            "no_documentation_key": "Tsy misy tahirin-kevitra fantatra momba ity clé ity",
             "show_more": "Hampiseho Misimisy Kokoa",
             "view_on_osm": "Hijery ao amin'ny openstreetmap.org",
             "all_fields": "Ny saha rehetra",
             "role": "Anjara asa",
             "choose": "Safidio ny karazan'ny singa",
             "results": "Vokatra {n} hoan'ny {search}",
-            "reference": "Hijery ao amin'ny OpenStreetMap Wiki",
             "back_tooltip": "Hanova ny singa",
             "remove": "Hanala",
             "search": "Hikaroka",
                 "tooltip": "Fitarihana Herinaratra, Toeram-pamokarana Herinaratra, Tobin-herinaratra, sns."
             },
             "past_future": {
-                "description": "Lasa/Ho avy",
                 "tooltip": "Andalam-pangatahana, Fanamboarana, Tsy Miasa Intsony, Rava, sns."
             },
             "others": {
-                "description": "Hafa",
                 "tooltip": "Izay Zavatra Hafa Rehetra"
             }
         },
             "on_wiki": "{tag} ao amin'ny wiki.osm.org",
             "used_with": "ampiasaina miaraka amin'ny {type}"
         },
-        "validations": {
-            "disconnected_highway": "Nanasaraka ny làlana",
-            "disconnected_highway_tooltip": "Ny làlana dia tokony hifandray amin'ny làlana hafa na amin'ny fidirana amina trano.",
-            "untagged_point": "Teboka tsy misy tag",
-            "untagged_point_tooltip": "Safidio izay karana singa mahalaza hoe inona ito teboka ito.",
-            "untagged_line": "Tsipika tsy misy tag",
-            "untagged_line_tooltip": "Safidio izay karazana singa mahalaza hoe inona ito tsipika ito.",
-            "untagged_area": "Faritra tsy misy tag",
-            "untagged_area_tooltip": "Safidio izay karana singa mahalaza hoe inona ito faritra ito.",
-            "untagged_relation": "Relation tsy misy tag",
-            "untagged_relation_tooltip": "Safidio izay karana singa mahalaza hoe inona ito relation ito.",
-            "many_deletions": "Eo am-pamafana singa {n} ianao: teboka {p}, tsipika {l}, faritra {a}, relations {r}. Azonao antoka ve izay ataonao? Ity dia hamafa azy ireo tao amin'ny sarintany izay hitan'ny olon-drehetra ao amin'ny openstreetmap.org.",
-            "deprecated_tags": "Tags tsy fampiasa intsony: {tags}"
-        },
         "zoom": {
             "in": "Hanakaiky",
             "out": "Hanalavitra"
index 6e2791edcb7dc8e1b58d003ccf952f99ca8a85d2..cd36a4dd31fd2441337985e7d91e0a4270588db4 100644 (file)
             "locating": "Ве пронаоѓам. Почекајте..."
         },
         "inspector": {
-            "no_documentation_combination": "Нема документација за овој сплет на ознаки",
-            "no_documentation_key": "Нема документација за овој клуч",
             "show_more": "Повеќе",
             "view_on_osm": "Погл. на openstreetmap.org",
             "all_fields": "Сите полиња",
             "role": "Улога",
             "choose": "Изберете вид елемент",
             "results": "{n} ставки од пребарувањето на {search}",
-            "reference": "Погл. на викито на OpenStreetMap ",
             "back_tooltip": "Измени елемент",
             "remove": "Отстрани",
             "search": "Пребарај",
                 "tooltip": "Електрични водови, електрани, трафостаници и тн."
             },
             "past_future": {
-                "description": "Минато/иднина",
                 "tooltip": "Предложено, во изградба, напуштено, урнато и тн."
             },
             "others": {
-                "description": "Други",
                 "tooltip": "Сето останато"
             }
         },
             "on_wiki": "{tag} на wiki.osm.org",
             "used_with": "се користи со {type}"
         },
-        "validations": {
-            "untagged_point": "Неозначена точка",
-            "untagged_point_tooltip": "Изберете вид на елемент што опишува каква точка е ова.",
-            "untagged_line": "Неозначена линија",
-            "untagged_line_tooltip": "Изберете вид на елемент што опишува каква линија е ова.",
-            "untagged_area": "Неозначено подрачје",
-            "untagged_area_tooltip": "Изберете вид на елемент што опишува какво подрачје е ова.",
-            "tag_suggests_area": "Ознаката {tag} укажува дека линијата треба да е подрачје, но не е.",
-            "deprecated_tags": "Застарени ознаки: {tags}"
-        },
         "cannot_zoom": "Не можам повеќе да приближувам во тековниот режим.",
         "full_screen": "Полн екран",
         "mapillary_images": {
                 "category-building": {
                     "name": "Елементи за градби"
                 },
-                "category-golf": {
-                    "name": "Елементи за голф"
-                },
                 "category-landuse": {
                     "name": "Елементи за видови земјиште"
                 },
                     "label": "Вид"
                 },
                 "website": {
-                    "label": "Мрежно место",
-                    "placeholder": "http://example.com/"
+                    "label": "Мрежно место"
                 },
                 "wetland": {
                     "label": "Вид"
                 "building/terrace": {
                     "name": "Нанижани куќи"
                 },
-                "building/train_station": {
-                    "name": "Железничка станица"
-                },
                 "building/university": {
                     "name": "Универзитет"
                 },
                 "golf/hole": {
                     "name": "Дупка за голф"
                 },
-                "golf/lateral_water_hazard_area": {
-                    "name": "Странична водена препрека"
-                },
-                "golf/lateral_water_hazard_line": {
-                    "name": "Странична водена препрека"
-                },
                 "golf/rough": {
                     "name": "Нерамно поле"
                 },
                 "golf/tee": {
                     "name": "Почетна рамнинка"
                 },
-                "golf/water_hazard_area": {
-                    "name": "Водена препрека"
-                },
-                "golf/water_hazard_line": {
-                    "name": "Водена препрека"
-                },
                 "healthcare/blood_donation": {
                     "name": "Крводарителски центар"
                 },
index 4af987f9e8d3549e84d40adf36f6765b19d4bec0..6d3a1cd80e9b5070436062716c847a99a17fdc00 100644 (file)
             "locating": "Menentukan tempat, sila tunggu..."
         },
         "inspector": {
-            "no_documentation_combination": "Tiada dokumentasi yang tersedia untuk kombinasi penanda ini",
-            "no_documentation_key": "Tiada dokumentasi yang tersedia untuk kunci ini",
             "show_more": "Tunjukkan Lagi",
             "view_on_osm": "Lihat pada openstreetmap.org",
             "all_fields": "Semua tempat kosong",
             "role": "Peranan",
             "choose": "Pilih jenis ciri",
             "results": "{n} keputusan untuk {search}",
-            "reference": "Lihat Wiki OpenStreetMap",
             "back_tooltip": "Tukar ciri",
             "remove": "Keluarkan",
             "search": "Gelintar",
                 "tooltip": "Talian-talian Elektrik, Loji-loji Kuasa, Pencawang-pencawang, dll."
             },
             "past_future": {
-                "description": "Garis Masa",
                 "tooltip": "Cadangan, Pembinaan, Terabai, Diruntuhkan, dll."
             },
             "others": {
-                "description": "Lain-lain",
                 "tooltip": "Yang Lain-lain"
             }
         },
             "on_wiki": "{tag} pada wiki.osm.org",
             "used_with": "digunakan dengan {type}"
         },
-        "validations": {
-            "disconnected_highway": "Jalan raya terputus",
-            "disconnected_highway_tooltip": "Jalan raya sepatutnya dihubungkan dengan jalan lain atau pintu masuk bangunan.",
-            "old_multipolygon": "Penanda multipoligon cara luaran",
-            "old_multipolygon_tooltip": "Gaya multipoligon ini tidak digunakan lagi. Sila berikan penanda pada multipoligon induk dan bukannya pada cara luaran.",
-            "untagged_point": "Titik tanpa tag",
-            "untagged_point_tooltip": "Pilih jenis ciri yang menggambarkan titik ini.",
-            "untagged_line": "Garis tanpa tag",
-            "untagged_line_tooltip": "Pilih jenis ciri yang menggambarkan garis ini.",
-            "untagged_area": "Kawasan tanpa tag",
-            "untagged_area_tooltip": "Pilih jenis ciri yang menggambarkan kawasan ini.",
-            "untagged_relation": "Hubungan tanpa tag",
-            "untagged_relation_tooltip": "Pilih jenis ciri yang menggambarkan hubungan ini.",
-            "tag_suggests_area": "Tanda {tag} mencadangkan garis sepatutnya menjadi kawasan, tetapi ianya bukan kawasan",
-            "deprecated_tags": "Tag-tag yang telah lapuk: {tags}"
-        },
         "zoom": {
             "in": "Zum dekat",
             "out": "Zum jauh"
                 "category-building": {
                     "name": "Ciri-ciri Bangunan"
                 },
-                "category-golf": {
-                    "name": "Ciri-ciri Golf"
-                },
                 "category-landuse": {
                     "name": "Ciri-ciri Guna Tanah"
                 },
                     "label": "Jenis"
                 },
                 "website": {
-                    "label": "Tapak Web",
-                    "placeholder": "http://contoh.com/"
+                    "label": "Tapak Web"
                 },
                 "wetland": {
                     "label": "Jenis"
                 "building/stable": {
                     "name": "Kandang Kuda"
                 },
-                "building/train_station": {
-                    "name": "Stesen Kereta Api"
-                },
                 "building/university": {
                     "name": "Bangunan Universiti"
                 },
                 "power/transformer": {
                     "name": "Transformer"
                 },
-                "public_transport/linear_platform_bus": {
-                    "name": "Hentian Bas / Platform"
-                },
-                "public_transport/linear_platform_ferry": {
-                    "name": "Hentian Feri / Platform"
-                },
-                "public_transport/linear_platform_light_rail": {
-                    "name": "Hentian Rel Ringan / Platform"
-                },
-                "public_transport/linear_platform_monorail": {
-                    "name": "Hentian Monorel / Platform"
-                },
-                "public_transport/linear_platform_subway": {
-                    "name": "Hentian Laluan Bawah Tanah / Platform"
-                },
-                "public_transport/linear_platform_train": {
-                    "name": "Hentian Kereta Api / Platform"
-                },
-                "public_transport/linear_platform_tram": {
-                    "name": "Hentian Tram / Platform"
-                },
-                "public_transport/linear_platform_trolleybus": {
-                    "name": "Hentian Bas Troli / Platform"
-                },
                 "public_transport/platform": {
                     "name": "Hentian Transit"
                 },
index 4dc34193788770e3c4670bb301307dbd7cb93c52..e4d11ea7b71d4cb198f8acd8ec7ae79ebb5cfc84 100644 (file)
                 "tooltip_data": "Centreer en zoom in om te focussen op deze data.",
                 "tooltip_issue": "Centreer en zoom in om te focussen op dit probleem."
             },
-            "no_documentation_combination": "Er is geen documentatie beschikbaar voor deze tag",
-            "no_documentation_key": "Er is geen documentatie beschikbaar voor deze sleutel",
             "show_more": "Toon meer",
-            "view_on_osm": "Toon op openstreetmap.org",
+            "view_on_osm": "Bekijk op openstreetmap.org",
             "view_on_keepRight": "Bekijk op keepright.at",
             "all_fields": "Alle eigenschappen",
             "all_tags": "Alle tags",
             "role": "Rol",
             "choose": "Selecteer objecttype",
             "results": "{n} resultaten voor {search}",
-            "reference": "Bekijk op de OpenStreetMap Wiki",
+            "wiki_reference": "Bekijk documentatie",
+            "wiki_en_reference": "Bekijk documentatie in het Engels",
             "back_tooltip": "Wijzig object",
             "remove": "Verwijder",
             "search": "Zoeken",
                 "tooltip": "Elektriciteitskabels, energiecentrales, transformatorstations …"
             },
             "past_future": {
-                "description": "Verleden/Toekomst",
                 "tooltip": "Voorgesteld, onder constructie, verwaarloosd, afgebroken …"
             },
             "others": {
-                "description": "Andere",
                 "tooltip": "Al de rest"
             }
         },
             "on_wiki": "{tag} op wiki.osm.org",
             "used_with": "gebruikt met {type}"
         },
-        "validations": {
-            "disconnected_highway": "Niet-aangesloten weg",
-            "disconnected_highway_tooltip": "Wegen moeten verbonden worden met andere wegen of met ingangen van gebouwen.",
-            "generic_name": "Mogelijke generieke naam",
-            "generic_name_tooltip": "Dit object ljkt een generkieke naam \"{name}\" te hebben. Gelieve alleen het naamveld te gebruiken om de officiele naam van een object in te vullen.",
-            "old_multipolygon": "Multipolygoontags op buitenste lijn",
-            "old_multipolygon_tooltip": "Deze stijl van multipolygonen is afgevoerd. Zet de tags op de multipolygoon in plaats van op de buitenste lijn.",
-            "untagged_point": "Punt zonder tags",
-            "untagged_point_tooltip": "Kies een objecttype dat beschrijft wat dit punt is.",
-            "untagged_line": "Lijn zonder tags",
-            "untagged_line_tooltip": "Selecteer een objecttype dat beschrijft wat deze lijn is.",
-            "untagged_area": "Vlak zonder tags",
-            "untagged_area_tooltip": "Selecteer een objecttype dat beschrijft wat dit vlak is.",
-            "untagged_relation": "Relatie zonder tags",
-            "untagged_relation_tooltip": "Selecteer een objecttype dat beschrijft wat deze relatie is.",
-            "many_deletions": "Je verwijdert {n} objecten: {p} (knoop)punten, {l} lijnen, {a} vlakken en {r} relaties. Weet je zeker dat je dit wil doen? Dit zal ze verwijderen van de kaart die iedereen ziet op openstreetmap.org.",
-            "tag_suggests_area": "De tag {tag} suggereert dat de lijn een vlak is, maar het is geen vlak",
-            "deprecated_tags": "Afgeschafte tags: {tags}"
-        },
         "zoom": {
             "in": "Zoom in",
             "out": "Zoom uit"
                 "close_comment": "Sluit en voeg commentarieer toe",
                 "ignore_comment": "Negeer en voeg commentaar toe",
                 "error_parts": {
+                    "this_node": "Dit knooppunt",
+                    "this_way": "deze weg",
+                    "this_relation": "deze relatie",
+                    "this_oneway": "deze eenrichtingsweg",
+                    "this_highway": "deze snelweg",
+                    "this_railway": "deze spoorbaan",
+                    "this_waterway": "deze waterweg",
+                    "this_cycleway": "dit fietspad",
+                    "this_cycleway_footpath": "dit fiets- of voetpad",
+                    "this_riverbank": "deze rivierbedding",
+                    "this_crossing": "deze kruising",
+                    "this_railway_crossing": "deze spoorovergang",
+                    "this_bridge": "deze brug",
+                    "this_tunnel": "deze tunnel",
+                    "this_boundary": "deze grens",
+                    "this_turn_restriction": "deze afslagbeperking",
+                    "this_roundabout": "deze rotonde",
+                    "this_mini_roundabout": "deze minirotonde",
+                    "this_track": "dit pad",
+                    "this_feature": "deze feature",
+                    "highway": "snelweg",
+                    "railway": "spoorbaan",
+                    "waterway": "waterweg",
+                    "cycleway": "fietspad",
+                    "cycleway_footpath": "fiets- of voetpad",
+                    "riverbank": "riverbedding",
                     "place_of_worship": "Gebedshuis",
                     "pub": "kroeg",
                     "restaurant": "restaurant",
                         "description": "{var1} heeft beperkingstype \"{var2}\", maar de hoek is {var3} graden. Wellicht is het beperkingstype niet geschikt?"
                     },
                     "297": {
+                        "title": "Verkeerde richting van weg \"naar\"",
                         "description": "{var1} komt niet overeen met de richting van de \"naar\" weg {var2}."
                     },
                     "298": {
                 "category-building": {
                     "name": "Gebouwobjecten"
                 },
-                "category-golf": {
+                "category-golf-area": {
+                    "name": "Golfobjecten"
+                },
+                "category-golf-line": {
                     "name": "Golfobjecten"
                 },
                 "category-landuse": {
                 "animal_shelter": {
                     "label": "Voor dieren"
                 },
+                "architect": {
+                    "label": "Architect"
+                },
                 "area/highway": {
                     "label": "Type"
                 },
                 "atm": {
                     "label": "Bankautomaat"
                 },
+                "attraction": {
+                    "label": "Type"
+                },
                 "backrest": {
                     "label": "Rugleuning"
                 },
                         "onsen": "Japanse onsen"
                     }
                 },
+                "beauty": {
+                    "label": "Schoonheidsspecialist"
+                },
                 "bench": {
                     "label": "Zitbank"
                 },
                 "building": {
                     "label": "Gebouw"
                 },
+                "building/material": {
+                    "label": "Materiaal"
+                },
                 "building_area": {
                     "label": "Gebouw"
                 },
                 "design": {
                     "label": "Ontwerp"
                 },
+                "destination/ref_oneway": {
+                    "label": "Bestemmingwegnummers"
+                },
+                "destination/symbol_oneway": {
+                    "label": "Bestemmingsymbolen"
+                },
+                "destination_oneway": {
+                    "label": "Bestemmingen"
+                },
                 "devices": {
                     "label": "Aantal apparaten",
                     "placeholder": "1, 2, 3 …"
                 "dock": {
                     "label": "Type"
                 },
+                "dog": {
+                    "label": "Honden",
+                    "options": {
+                        "leashed": "Alleen aangelijnd",
+                        "no": "Niet toegestaan",
+                        "yes": "Toegestaan"
+                    }
+                },
                 "drive_through": {
                     "label": "Drive-Through"
                 },
                 "frequency": {
                     "label": "Frequentie"
                 },
+                "frequency_electrified": {
+                    "label": "Zendfrequentie"
+                },
                 "from": {
                     "label": "Van"
                 },
                 "internet_access/ssid": {
                     "label": "SSID (netwerknaam)"
                 },
+                "junction/ref_oneway": {
+                    "label": "Kruisingnummer"
+                },
+                "junction_line": {
+                    "label": "Kruising",
+                    "options": {
+                        "roundabout": "Rotonde"
+                    }
+                },
                 "kerb": {
                     "label": "Stoeprand"
                 },
                 "memorial": {
                     "label": "Type"
                 },
+                "minspeed": {
+                    "label": "Minimale snelheidslimiet",
+                    "placeholder": "20, 30, 40 ..."
+                },
                 "monitoring_multi": {
                     "label": "Gemeten waarden"
                 },
                         "0": "Gemakkelijkst (witte cirkel)",
                         "1": "Makkelijk (groene cirkel)",
                         "2": "Gemiddeld (blauw vierkant)",
-                        "3": "Moeilijk (Zwarte diamand)",
-                        "4": "Extreem moeilijk (dubbele zwarte diamand)"
+                        "3": "Moeilijk (zwarte ruit)",
+                        "4": "Extreem moeilijk (dubbele zwarte ruit)"
                     },
                     "placeholder": "Makkelijk, Gemiddeld, Moeilijk …"
                 },
                         "yes": "Ja"
                     }
                 },
+                "oneway/bicycle": {
+                    "label": "Eenrichtingsverkeer (fietsen)"
+                },
                 "oneway_yes": {
                     "label": "Eenrichtingsverkeer",
                     "options": {
                         "underground": "Ondergronds"
                     }
                 },
-                "passenger_information_display": {
-                    "label": "Doorkomsttijdenscherm"
-                },
                 "payment_multi": {
                     "label": "Betalingsmiddelen"
                 },
                 "restrictions": {
                     "label": "Afslagbeperkingen"
                 },
+                "roof/colour": {
+                    "label": "Kleur dak"
+                },
                 "rooms": {
                     "label": "Aantal kamers"
                 },
                     },
                     "placeholder": "Ja, Nee, Alleen afhaal …"
                 },
+                "tidal": {
+                    "label": "Getijden"
+                },
                 "to": {
                     "label": "Naar"
                 },
                 "voltage/tertiary": {
                     "label": "Tertiaire spanning"
                 },
+                "voltage_electrified": {
+                    "label": "Spanning"
+                },
                 "wall": {
                     "label": "Type"
                 },
                 },
                 "website": {
                     "label": "Website",
-                    "placeholder": "http://example.com/"
+                    "placeholder": "https://example.com"
                 },
                 "wetland": {
                     "label": "Type"
                     "name": "Klok",
                     "terms": "uurwerk,horloge,uur,tijd"
                 },
+                "amenity/clock/sundial": {
+                    "name": "Zonnewijzer"
+                },
                 "amenity/college": {
                     "name": "Campus van beroepsschool",
                     "terms": "bso,buo,buso,vmbo,speciaal onderwijs,bijzonder onderwijs,onderwijs,middelbaar,secundair onderwijs"
                 "amenity/fast_food/kebab": {
                     "name": "Kebabfastfoodzaak"
                 },
+                "amenity/fast_food/mexican": {
+                    "name": "Mexicaanse fastfoodzaak"
+                },
                 "amenity/fast_food/pizza": {
                     "name": "Pizzafastfoodzaak"
                 },
                 "amenity/pharmacy": {
                     "name": "Apotheek"
                 },
+                "amenity/photo_booth": {
+                    "name": "Pasfotohokje"
+                },
                 "amenity/place_of_worship": {
                     "name": "Gebedshuis",
                     "terms": "godshuis,kerk,moskee"
                     "name": "Wegdek",
                     "terms": "rand van weg,gebied,wegoppervlak"
                 },
+                "attraction": {
+                    "name": "Attractie"
+                },
                 "attraction/amusement_ride": {
                     "name": "Standaard pretparkattractie",
                     "terms": "achtbaan,rit,plezierrit,kermisattractie"
                     "terms": "rijtjeshuizen,huis,woningen,woonsten,woongebied,gebouw"
                 },
                 "building/train_station": {
-                    "name": "Treinstation"
+                    "name": "Treinstationgebouw"
                 },
                 "building/transportation": {
                     "name": "Openbaarvervoersgebouw"
                     "name": "Club",
                     "terms": "vereniging"
                 },
+                "club/sport": {
+                    "name": "Sportclub"
+                },
                 "craft": {
                     "name": "Vakmanschap",
                     "terms": "stiel,kunde,handwerk"
                     "name": "Golf Hole",
                     "terms": "gat,doel"
                 },
-                "golf/lateral_water_hazard_area": {
-                    "name": "Zijdelingse waterpartij (golf)",
-                    "terms": "golf,water"
-                },
-                "golf/lateral_water_hazard_line": {
-                    "name": "Zijdelingse waterpartij (golf)",
-                    "terms": "golf,water"
-                },
                 "golf/rough": {
                     "name": "Rough",
                     "terms": "golf"
                     "name": "Tee-Box",
                     "terms": "golf"
                 },
-                "golf/water_hazard_area": {
-                    "name": "Waterpartij (golf)",
-                    "terms": "golf,water"
-                },
-                "golf/water_hazard_line": {
-                    "name": "Waterpartij (golf)",
-                    "terms": "golf,water"
-                },
                 "healthcare": {
                     "name": "Gezondheidszorg-faciliteit",
                     "terms": "medische faciliteit"
                     "terms": "kruising,toegangspunt,afslag,oprit,rotonde"
                 },
                 "landuse": {
-                    "name": "Landgebruik",
-                    "terms": "landindeling,doel"
+                    "name": "Landgebruik"
                 },
                 "landuse/allotments": {
                     "name": "Volkstuin",
                     "name": "Boerenerf",
                     "terms": "boerderij,hoeve,landbouw,hofstee"
                 },
+                "landuse/forest": {
+                    "name": "Beheerd bos"
+                },
                 "landuse/garages": {
                     "name": "Garages (privéstalling voor voertuigen)",
                     "terms": "autogarage"
                     "name": "Plantenkwekerij",
                     "terms": "tuinderij,tuin"
                 },
+                "landuse/pond": {
+                    "name": "Vijver"
+                },
                 "landuse/quarry": {
                     "name": "Groeve",
                     "terms": "steengroeve,mijn,openluchtmijn,dagbouw"
                 "landuse/religious": {
                     "name": "Religieus gebied"
                 },
+                "landuse/reservoir": {
+                    "name": "Reservoir"
+                },
                 "landuse/residential": {
                     "name": "Woongebied",
                     "terms": "huizen,residentieel,wonen,woonwijk"
                     "terms": "wijngaard"
                 },
                 "leisure": {
-                    "name": "Vrije tijd",
-                    "terms": "recreatie"
+                    "name": "Vrije tijd"
                 },
                 "leisure/adult_gaming_centre": {
                     "name": "Speelzaal (met kansspelmachines)",
                     "name": "Picknicktafel",
                     "terms": "tafel,bank,zitbank"
                 },
+                "leisure/picnic_table/chess": {
+                    "name": "Schaaktafel"
+                },
                 "leisure/pitch": {
                     "name": "Sportveld",
                     "terms": "sportterrein"
                     "name": "Sportcentrum of -complex",
                     "terms": "sportcentrum,sportcomplex,bloso"
                 },
+                "leisure/sports_centre/climbing": {
+                    "name": "Klimhal"
+                },
                 "leisure/sports_centre/swimming": {
                     "name": "Zwembadfaciliteit",
                     "terms": "zwemmen,waterbad,duiken"
                     "terms": "anders,overige,iets anders,algemeen"
                 },
                 "man_made": {
-                    "name": "Aangelegd",
-                    "terms": "menselijk"
+                    "name": "Aangelegd"
                 },
                 "man_made/adit": {
                     "name": "Horizontale mijn- of grotingang",
                 "man_made/tower": {
                     "name": "Toren"
                 },
+                "man_made/tower/bell_tower": {
+                    "name": "Klokkentoren"
+                },
                 "man_made/tower/communication": {
                     "name": "Communicatietoren"
                 },
+                "man_made/tower/minaret": {
+                    "name": "Minaret"
+                },
                 "man_made/tower/observation": {
                     "name": "Observatietoren"
                 },
                 "natural/water": {
                     "name": "Water"
                 },
+                "natural/water/basin": {
+                    "name": "Basin"
+                },
+                "natural/water/canal": {
+                    "name": "Kanaal"
+                },
                 "natural/water/lake": {
                     "name": "Meer",
                     "terms": "ven"
                     "name": "Reservoir",
                     "terms": "waterbekken,bekken,waterreservoir"
                 },
+                "natural/water/river": {
+                    "name": "Rivier"
+                },
+                "natural/water/stream": {
+                    "name": "Stroom"
+                },
                 "natural/wetland": {
                     "name": "Moeras of drassig gebied",
                     "terms": "drasland,moerassen en waterrijke gebieden,drassig gebied"
                     "name": "Transformator",
                     "terms": "trafo,omvormer"
                 },
-                "public_transport/linear_platform": {
-                    "name": "Perron voor openbaar vervoer"
-                },
-                "public_transport/linear_platform_aerialway": {
-                    "name": "Kabelbaanperron"
-                },
-                "public_transport/linear_platform_bus": {
-                    "name": "Busperron"
-                },
-                "public_transport/linear_platform_ferry": {
-                    "name": "Kaai voor veerboot",
-                    "terms": "ferrykaai,ferryperron,veerbootkaai,veerbootperron,kaai voor ferry"
-                },
-                "public_transport/linear_platform_light_rail": {
-                    "name": "Lightrailperron",
-                    "terms": "lichtspoorperron,tramtreinperron,sneltramperron,lichtgewichttreinperron,spoorwegperron"
-                },
-                "public_transport/linear_platform_monorail": {
-                    "name": "Monorailperron",
-                    "terms": "spoorwegperron,monorailplatform"
-                },
-                "public_transport/linear_platform_subway": {
-                    "name": "Metroperron",
-                    "terms": "spoorwegperron,tramplatform"
-                },
-                "public_transport/linear_platform_train": {
-                    "name": "Treinperron",
-                    "terms": "spoorwegperron,treinplatform"
-                },
-                "public_transport/linear_platform_tram": {
-                    "name": "Tramperron",
-                    "terms": "spoorwegperron,tramplatform"
-                },
-                "public_transport/linear_platform_trolleybus": {
-                    "name": "Trolleybusperron"
-                },
                 "public_transport/platform": {
                     "name": "Openbaarvervoershalte"
                 },
                     "name": "Autogarage (herstel)",
                     "terms": "garage,autohersteller"
                 },
+                "shop/caravan": {
+                    "name": "Caravandealer"
+                },
                 "shop/carpet": {
                     "name": "Tapijtwinkel",
                     "terms": "vloerbedekkingswinkel,vloerbedekkingsspeciaalzaak"
                     "name": "Kaderwinkel",
                     "terms": "schilderijen,kunst,kadrering"
                 },
+                "shop/frozen_food": {
+                    "name": "Ingevroren voedsel"
+                },
                 "shop/funeral_directors": {
                     "name": "Begrafenisondernemer",
                     "terms": "rouwcentrum"
                     "terms": "wijnwinkel,wijnproeverij,wijnzaak,wijnerij"
                 },
                 "tourism": {
-                    "name": "Toerisme",
-                    "terms": "cultuur"
+                    "name": "Toerisme"
                 },
                 "tourism/alpine_hut": {
                     "name": "Berghut"
                 "attribution": {
                     "text": "GSI Japan"
                 },
-                "description": "Japan GSI orthofoto. Gewoonlijk beter dan bing, maar iets ouder.",
+                "description": "Japan GSI orthofoto. Gewoonlijk beter dan Bing, maar iets ouder.",
                 "name": "Japan GSI orthofoto"
             },
+            "gsi.go.jp_airphoto": {
+                "attribution": {
+                    "text": "GSI Japan"
+                },
+                "description": "Japan GSI luchtfoto. Niet volledig orthogerectificeerd, maar voor een deel nieuwer en/of ander bereik dan GSI orthofoto.",
+                "name": "Japan GSI luchtfoto"
+            },
             "gsi.go.jp_std_map": {
                 "attribution": {
                     "text": "GSI Japan"
index 6699c8e8f71f95672b6f1bd9d74408b235043147..0f997b60dd110d31fa6ea5e3bf025e7021ef058a 100644 (file)
             "locating": "Finner sted, vennligst vent..."
         },
         "inspector": {
-            "no_documentation_combination": "Det finnes ingen dokumentasjon for denne tag-kombinasjonen",
-            "no_documentation_key": "Det finnes ingen dokumentasjon tilgjengelig for denne nøkkelen",
             "show_more": "Vis mer",
             "view_on_osm": "Se på openstreetmap.org",
             "all_fields": "Alle felter",
             "role": "Rolle",
             "choose": "Velg egenskapstype",
             "results": "{n} resultater for {search}",
-            "reference": "Les mer på OpenStreetMap Wiki",
             "back_tooltip": "Endre kartegenskap",
             "remove": "Fjern",
             "search": "Søk",
                 "tooltip": "Kraftlinjer, kraftverk osv."
             },
             "others": {
-                "description": "Andre",
                 "tooltip": "Alt annet"
             }
         },
             "on_wiki": "{tag} på wiki.osm.org",
             "used_with": "brukes med {type}"
         },
-        "validations": {
-            "disconnected_highway": "Koblet fra vei",
-            "disconnected_highway_tooltip": "Veier burde være koblet til andre veier eller til inngangen til bygninger.",
-            "untagged_point": "Utagget punkt",
-            "untagged_point_tooltip": "Velg en kartegenskaptype som beskriver hva dette punktet er.",
-            "untagged_line": "Utagget linje",
-            "untagged_line_tooltip": "Velg en kartegenskaptype som beskriver hva denne linjen er.",
-            "untagged_area": "Utagget område",
-            "untagged_area_tooltip": "Velg en kartegenskaptype som beskriver hva dette område er.",
-            "untagged_relation": "Utagget relasjon",
-            "untagged_relation_tooltip": "Velg en kartegenskaptype som beskriver hva denne relasjonen er.",
-            "tag_suggests_area": "Taggen {tag} anbefaler at linje bør være et areal, men dette er ikke et areal",
-            "deprecated_tags": "Utgående tagger: {tags}"
-        },
         "zoom": {
             "in": "Zoom inn",
             "out": "Zoom ut"
                 "category-building": {
                     "name": "Bygingsrelatert"
                 },
-                "category-golf": {
-                    "name": "Golfrelatert"
-                },
                 "category-landuse": {
                     "name": "Arealbrukrelaterte egenskaper"
                 },
                     "label": "Type"
                 },
                 "website": {
-                    "label": "Nettside",
-                    "placeholder": "http://example.com/"
+                    "label": "Nettside"
                 },
                 "wetland": {
                     "label": "Type"
                 "building/stable": {
                     "name": "Stall"
                 },
-                "building/train_station": {
-                    "name": "Togstasjon"
-                },
                 "building/university": {
                     "name": "Universitetsbygning"
                 },
index 832fd12cbc9b557b18604a755fc402698a65e1c8..16822bf802577b12e41ff8d8f91564bec9455dd6 100644 (file)
         "inspector": {
             "zoom_to": {
                 "key": "Z",
-                "title": "Przybliż do tego",
+                "title": "Przybliż ten problem",
                 "tooltip_feature": "Wyśrodkuj i przybliż mapę na ten obiekt.",
                 "tooltip_note": "Wyśrodkuj i przybliż mapę na ten węzeł",
                 "tooltip_data": "Wyśrodkuj i przybliż mapę na ten obiekt.",
                 "tooltip_issue": "Wyśrodkuj i przybliż mapę na ten problem"
             },
-            "no_documentation_combination": "Nie ma dokumentacji dla tej kombinacji znaczników",
-            "no_documentation_key": "Nie ma dokumentacji dla tego klucza",
             "show_more": "Wyświetl więcej",
             "view_on_osm": "Wyświetl na openstreetmap.org",
             "view_on_keepRight": "Wyświetl w keepright.at",
             "role": "Rola",
             "choose": "Wybierz rodzaj obiektu",
             "results": "{n} wyników dla {search}",
-            "reference": "Wyświetl na Wiki OpenStreetMap",
-            "edit_reference": "Edytuj lub tłumacz opis",
+            "edit_reference": "edytuj/tłumacz",
             "wiki_reference": "Przegląd dokumentacji",
             "wiki_en_reference": "Przegląd dokumentacji w języku angielskim",
             "back_tooltip": "Zmień rodzaj obiektu",
                 "tooltip": "Linie energetyczne, elektrownie, podstacje etc."
             },
             "past_future": {
-                "description": "Przeszłość/przyszłość",
                 "tooltip": "Obiekty projektowane, w czasie budowy, opuszczone, wyburzone etc."
             },
             "others": {
-                "description": "Inne",
                 "tooltip": "Wszystko pozostałe"
             }
         },
             "on_wiki": "{tag} na wiki.osm.org",
             "used_with": "używany z {type}"
         },
-        "validations": {
-            "disconnected_highway": "Droga odłączona od siatki innych dróg",
-            "disconnected_highway_tooltip": "Drogi powinny być połączone z innymi drogami lub wejściami do budynków. ",
-            "generic_name": "Prawdopodobieństwo nadania zbyt ogólnej nazwy",
-            "generic_name_tooltip": "Zdaje się, że ten obiekt ma zbyt ogólną nazwę: \"{name}\". Proszę zmień nazwę tego obiektu na oficjalną nazwę.",
-            "old_multipolygon": "Znaczniki multipoligonu na linii zewnętrznej",
-            "old_multipolygon_tooltip": "Ten sposób oznaczania multipoligonu jest przestarzały. Znaczniki powinny być zapisane w relacji, a nie na zewnętrznej linii.",
-            "untagged_point": "Pusty punkt - brak znaczników",
-            "untagged_point_tooltip": "Wybierz typ obiektu, który opisuje czym jest ten punkt.",
-            "untagged_line": "Pusta linia - brak znaczników",
-            "untagged_line_tooltip": "Wybierz typ obiektu, który opisuje czym jest ta linia.",
-            "untagged_area": "Nieoznaczony obszar",
-            "untagged_area_tooltip": "Wybierz typ obiektu, który opisuje czym jest ten obszar.",
-            "untagged_relation": "Pusta relacja - brak znaczników",
-            "untagged_relation_tooltip": "Wybierz rodzaj obiektu, który opisuje, czym jest ta relacja.",
-            "many_deletions": "Usuwasz {n} obiekty/obiektów: {p} węzłów, {l} linii, {a} obszarów, {r} relacji. Na pewno chcesz to zrobić? To spowoduje, że znikną one z mapy, którą wszyscy widzą na openstreetmap.org.",
-            "tag_suggests_area": "Znacznik {tag} sugeruje, że linia powinna być obszarem, ale nim nie jest.",
-            "deprecated_tags": "Przestarzałe znaczniki: {tags}"
-        },
         "zoom": {
             "in": "Przybliż",
             "out": "Oddal"
                 "ignore_comment": "Ignoruj i zostaw komentarz",
                 "error_parts": {
                     "this_node": "ten węzeł",
-                    "this_way": "ta ścieżka",
+                    "this_way": "ta droga",
                     "this_relation": "ta relacja",
                     "this_oneway": "ta droga jednokierunkowa",
                     "this_highway": "ta droga",
                     "this_turn_restriction": "ten zakaz zawracania",
                     "this_roundabout": "te rondo",
                     "this_track": "ta ścieżka",
+                    "this_feature": "Ten obiekt",
                     "highway": "droga",
                     "railway": "kolej",
                     "waterway": "szlak wodny",
                     },
                     "50": {
                         "title": "Blisko położone węzły",
-                        "description": "{var1} jest bardzo blisko ścieżki {var2}, ale nie jest połączony"
+                        "description": "{var1} jest bardzo blisko drogi {var2}, ale nie jest z nią połączona"
                     },
                     "60": {
-                        "title": "Przestarzały tag"
+                        "title": "Przestarzały tag",
+                        "description": "{var1} używa przestarzałego tagu \"{var2}\". Proszę zastąp go tagiem \"{var3}\""
                     },
                     "70": {
-                        "title": "Brakujący tag"
+                        "title": "Brakujący tag",
+                        "description": "{var1} posiada pusty tag: \"{var2}\"."
                     },
                     "71": {
                         "description": "{var1} nie posiada tagu"
                     },
+                    "72": {
+                        "description": "{var1} nie jest związany z żadną drogą oraz nie posiada żadnego tagu."
+                    },
+                    "74": {
+                        "description": "{var1} posiada pusty tag: \"{var2}\"."
+                    },
+                    "100": {
+                        "description": "{var1} jest oznaczony jako miejsce kultu i w związku z tym należy przypisać religię."
+                    },
+                    "110": {
+                        "description": "{var1} jest oznaczony jako \"{var2}\" i w związku z tym należy nadać mu nazwę."
+                    },
                     "170": {
                         "title": "obiekty oznaczone FIXME",
                         "description": "{var1} posiada tag FIXME: {var2}"
                         "description": "{var1} przecina się z {var2} {var3}, ale brakuje węzła, mostu lub tunelu."
                     },
                     "360": {
+                        "title": "Brakująca lokalna nazwa",
                         "description": "Byłoby miło jeśli {var1} posiadał lokalną nazwę w różnych językach. W tym celu utwórz tag \"name:XX=YYY\", gdzie XX to skrót języka np. \"en\" lub \"de\", a YYY to nazwa w danym języku"
                     },
+                    "390": {
+                        "title": "Brakujący rodzaj drogi",
+                        "description": "{var1} nie posiada przypisanego rodzaju spoistości drogi (tag \"tracktype\")"
+                    },
                     "400": {
                         "title": "Problem z geometrią"
                     },
                         "description": "{var1} zakręca pod bardzo ostrym kątem tutaj."
                     },
                     "410": {
-                        "title": "Problem z stroną www"
+                        "title": "Problem z stroną www",
+                        "description": "Istnieje nieokreślony problem z witryną kontaktową lub adresem URL."
+                    },
+                    "411": {
+                        "description": "{var1} może posiadać przestarzały adres URL: {var2}\nHTTP zwraca kod: {var3}."
+                    },
+                    "412": {
+                        "description": "{var1} może posiadać przestarzały adres URL: {var2} zawierający podejrzany tekst \"{var3}\"."
+                    },
+                    "413": {
+                        "description": "{var1} może posiadać przestarzały URL: {var2} nie zawiera słów kluczowych \"{var3}\"."
                     }
                 }
             }
                 "upload": "Możesz także wysłać [swój ślad GPS na serwery OpenStreetMap](https://www.openstreetmap.org/trace/create), pozwalając tym samym innym użytkownikom na korzystanie z niego."
             },
             "qa": {
-                "tools": "Aktualnie wspierane narzędzia: [KeepRight](https://www.keepright.at/). Oczekujące na wsparcie: [Osmose](https://osmose.openstreetmap.fr/), [ImproveOSM](https://improveosm.org/en/) oraz planowane więcej narzędzi typu \"Pytanie/Odpowiedź\"",
                 "issues": "Obsługa problemów Q/A jest podobna do obsługi notatek. Kliknij na znaczek, aby wyświetlić szczegóły problemu na pasku bocznym. Każde narzędzie ma swoje własne możliwości, ale zazwyczaj można je komentować i/lub zamykać."
             },
             "field": {
                 "category-building": {
                     "name": "Budynki"
                 },
-                "category-golf": {
-                    "name": "Golf"
-                },
                 "category-landuse": {
                     "name": "Zagospodarowanie terenu"
                 },
                         "underground": "Podziemny"
                     }
                 },
-                "passenger_information_display": {
-                    "label": "System informacji pasażerskiej"
-                },
                 "payment_multi": {
                     "label": "Rodzaje płatności"
                 },
                     "label": "Typ"
                 },
                 "website": {
-                    "label": "Strona WWW",
-                    "placeholder": "http://example.com/"
+                    "label": "Strona WWW"
                 },
                 "wetland": {
                     "label": "Rodzaj"
                     "name": "Świątynia hinduistyczna",
                     "terms": "świątynia hinduistyczna"
                 },
+                "amenity/place_of_worship/jewish": {
+                    "name": "Synagoga (czynna)",
+                    "terms": "synagoga"
+                },
+                "amenity/place_of_worship/muslim": {
+                    "name": "Meczet (czynny)",
+                    "terms": "meczet"
+                },
                 "amenity/place_of_worship/shinto": {
                     "name": "Sanktuarium shintoistyczne",
                     "terms": "jinja, sanktuarium shintoistyczne"
                     "name": "Domki szeregowe",
                     "terms": "szeregówki"
                 },
-                "building/train_station": {
-                    "name": "Budynek dworca kolejowego"
-                },
                 "building/transportation": {
                     "name": "Budynek stacji",
                     "terms": "transport,dworzec,stacja"
                     "name": "dołek na polu golfowym ",
                     "terms": "dołek golfowy"
                 },
-                "golf/lateral_water_hazard_area": {
-                    "name": "Przeszkoda wodna boczna",
-                    "terms": "przeszkoda wodna boczna"
-                },
-                "golf/lateral_water_hazard_line": {
-                    "name": "Przeszkoda wodna boczna",
-                    "terms": "przeszkoda wodna boczna"
-                },
                 "golf/rough": {
                     "name": "Rough",
                     "terms": "rough"
                     "name": "Rzutnia",
                     "terms": "tee box"
                 },
-                "golf/water_hazard_area": {
-                    "name": "Przeszkoda wodna",
-                    "terms": "przeszkoda wodna"
-                },
-                "golf/water_hazard_line": {
-                    "name": "Przeszkoda wodna",
-                    "terms": "przeszkoda wodna"
-                },
                 "healthcare": {
                     "name": "Placówka służby zdrowia",
                     "terms": "placówka służby zdrowia"
                     "terms": "krzyżówka"
                 },
                 "landuse": {
-                    "name": "Zagospodarowanie terenu",
-                    "terms": "użytkowanie terenu"
+                    "name": "Zagospodarowanie terenu"
                 },
                 "landuse/allotments": {
                     "name": "Ogródki działkowe",
                     "name": "Teren z zabudowaniami rolniczymi",
                     "terms": "podwórze gospodarskie"
                 },
+                "landuse/forest": {
+                    "name": "Las",
+                    "terms": "las,puszcza"
+                },
                 "landuse/garages": {
                     "name": "Teren z garażami",
                     "terms": "garaże,garażowisko,obszar garaży,wiaty"
                     "terms": "winnica"
                 },
                 "leisure": {
-                    "name": "Rozrywka i wypoczynek",
-                    "terms": "wypoczynek, czas wolny, gry, zabawy"
+                    "name": "Rozrywka i wypoczynek"
                 },
                 "leisure/adult_gaming_centre": {
                     "name": "Salon gier hazardowych",
                     "terms": "Linia, lina"
                 },
                 "man_made": {
-                    "name": "Obiekty sztuczne",
-                    "terms": "obiekty stworzone przez człowieka"
+                    "name": "Obiekty sztuczne"
                 },
                 "man_made/adit": {
                     "name": "Sztolnia",
                     "terms": "studzienka telekomunikacyjna"
                 },
                 "natural": {
-                    "name": "Natura",
-                    "terms": "Przyroda"
+                    "name": "Natura"
                 },
                 "natural/bare_rock": {
                     "name": "Skała Macierzysta",
                     "name": "Zbiornik retencyjny",
                     "terms": "Zbiornik wodny, zbiornik"
                 },
+                "natural/water/river": {
+                    "name": "Obszar rzeki",
+                    "terms": "obszar rzeki"
+                },
                 "natural/wetland": {
                     "name": "Bagno",
                     "terms": "bagna, bagno, mokradło, mokradła"
                     "name": "Transformator",
                     "terms": "transformator"
                 },
-                "public_transport/linear_platform": {
-                    "name": "Przystanek / Peron",
-                    "terms": "peron,przystanek,transport publiczny,transport,przewozy"
-                },
-                "public_transport/linear_platform_aerialway": {
-                    "name": "Przystanek / Peron wyciągu",
-                    "terms": "przystanek wyciągu,peron,przystanek,wyciąg,kolejka linowa,transport publiczny,transport,przewozy"
-                },
-                "public_transport/linear_platform_bus": {
-                    "name": "Przystanek autobusowy / platforma",
-                    "terms": "przystanek autobusowy,peron,przystanek,autobus,transport publiczny,transport,przewozy"
-                },
-                "public_transport/linear_platform_ferry": {
-                    "name": "Przystanek / Peron promu",
-                    "terms": "przystanek promu,peron,przystanek,prom,łódź,łódka,dok,port,nabrzeże,pomost,transport publiczny,transport,przewozy"
-                },
-                "public_transport/linear_platform_light_rail": {
-                    "name": "Przystanek / Peron kolei miejskiej",
-                    "terms": "peron kolei miejskiej,peron,przystanek,kolej miejska,kolej elektryczna,tory,szyny,tramwaj,wagon,transport publiczny,transport,przewozy"
-                },
-                "public_transport/linear_platform_monorail": {
-                    "name": "Przystanek / Peron kolei jednoszynowej",
-                    "terms": "peron kolei jednoszynowej,peron,przystanek,kolej jednoszynowa,tory,szyny,transport publiczny,transport,przewozy"
-                },
-                "public_transport/linear_platform_subway": {
-                    "name": "Przystanek / Peron metra",
-                    "terms": "peron metra,peron,przystanek,metro,tor,szyna,transport publiczny,transport,przewozy"
-                },
-                "public_transport/linear_platform_train": {
-                    "name": "Przystanek / Peron kolejowy",
-                    "terms": "peron kolejowy,peron,przystanek,kolej,tory,szyny,pociąg,transport publiczny,transport,przewozy"
-                },
-                "public_transport/linear_platform_tram": {
-                    "name": "Przystanek tramwajowy",
-                    "terms": "przystanek tramwajowy"
-                },
-                "public_transport/linear_platform_trolleybus": {
-                    "name": "Przystanek / Peron trolejbusowy",
-                    "terms": "przystanek trolejbusowy,peron,przystanek,trolejbus,autobus,tramwaj,elektryczny,transport publiczny,transport,przewozy"
-                },
                 "public_transport/platform": {
                     "name": "Przystanek / Peron",
                     "terms": "przystanek,peron,transport publiczny,transport,przewozy"
                     "terms": "Winiarnia"
                 },
                 "tourism": {
-                    "name": "Turystyka",
-                    "terms": "Turystyka"
+                    "name": "Turystyka"
                 },
                 "tourism/alpine_hut": {
                     "name": "Chata górska",
index 3b65345752c825ba26c83ef95be410cb6c6ac83f..097737c597fc9454afd70d51775abc6e2c17c581 100644 (file)
                 "restriction": "Esses recursos não podem ser mesclados porque isso danificaria uma relação \"{relation}\".",
                 "relation": "Esses recursos não podem ser mesclados porque possuem funções de relação conflitantes.",
                 "incomplete_relation": "Estes elementos não podem ser mesclados porque pelo menos um deles não foi transferido completamente.",
-                "conflicting_tags": "Estes elementos não podem ser mesclados porque algumas de suas etiquetas têm valores conflitantes."
+                "conflicting_tags": "Estes elementos não podem ser mesclados porque algumas de suas etiquetas têm valores conflitantes.",
+                "paths_intersect": "Esses recursos não podem ser mesclados porque o caminho resultante se interceptaria."
             },
             "move": {
                 "title": "Mover",
             "modified": "Modificado",
             "deleted": "Excluído",
             "created": "Criado",
+            "outstanding_errors_message": "Por favor, resolva todos os erros primeiro. {count} restantes.",
+            "comment_needed_message": "Por favor, adicione primeiro um comentário ao conjunto de alterações.",
             "about_changeset_comments": "Sobre comentários do conjunto de alterações",
             "about_changeset_comments_link": "//wiki.openstreetmap.org/wiki/Good_changeset_comments",
             "google_warning": "Você mencionou o Google  neste comentário: lembre-se que a cópia do Google Maps é estritamente proibida.",
                 "tooltip_data": "Centralize e amplie o mapa para focar nestes dados.",
                 "tooltip_issue": "Centralize e amplie o mapa para focar este problema."
             },
-            "no_documentation_combination": "Não há documentação disponível para esta combinação de etiquetas",
-            "no_documentation_key": "Não há documentação disponível para esta chave",
             "show_more": "Mostrar Mais",
             "view_on_osm": "Ver no openstreetmap.org",
             "view_on_keepRight": "Ver no keepright.at",
             "role": "Papel",
             "choose": "Selecione o tipo de elemento",
             "results": "{n} resultado(s) para {search}",
-            "reference": "Ver no wiki do OpenStreetMap",
-            "edit_reference": "Editar ou traduzir a descrição",
+            "no_documentation_key": "Não há documentação disponível.",
+            "edit_reference": "editar/traduzir",
             "wiki_reference": "Ver documentação",
             "wiki_en_reference": "Ver documentação em inglês",
+            "hidden_preset": {
+                "manual": "{features} estão escondidos. Ative-os no painel Dados do mapa.",
+                "zoom": "{features} estão escondidos. Aumente o zoom para ativá-los."
+            },
             "back_tooltip": "Alterar elemento",
             "remove": "Remover",
             "search": "Procurar",
                     "tooltip": "Detectou automaticamente os erros de mapeamento do keepright.at",
                     "title": "Erros do KeepRight"
                 },
+                "improveOSM": {
+                    "tooltip": "Dados perdidos detectados automaticamente por improveosm.org",
+                    "title": "Problemas ImproveOSM"
+                },
                 "custom": {
                     "tooltip": "Arraste e solte um arquivo de dados na página ou clique no botão para configurar",
                     "title": "Dados de mapa personalizados",
                 "tooltip": "Linhas de Transmissão, Usinas Elétricas, Subestações etc."
             },
             "past_future": {
-                "description": "Passado/Futuro",
+                "description": "Recursos passados/futuros",
                 "tooltip": "Propostas, Construído, Abandonado, Demolido etc."
             },
             "others": {
-                "description": "Outros",
+                "description": "Outras características",
                 "tooltip": "Outras coisas"
             }
         },
             "on_wiki": "{tag} em wiki.osm.org",
             "used_with": "usado com {type}"
         },
-        "validations": {
-            "disconnected_highway": "Estrada desconectada",
-            "disconnected_highway_tooltip": "Estradas devem estar conectadas a outras estradas ou entradas de prédios.",
-            "generic_name": "Possível nome genérico",
-            "generic_name_tooltip": "Este recurso parece ter um nome genérico \"{name}\". Por favor, use o campo de nome apenas para registrar o nome oficial de um elemento.",
-            "old_multipolygon": "Etiquetas de multipolígono na borda exterior",
-            "old_multipolygon_tooltip": "Esta forma de mapear um multipolígono está obsoleta é desencorajada. Por favor, insira as etiquetas na relação-mãe do multipolígono e não em sua borda exterior.",
-            "untagged_point": "Ponto sem etiquetas",
-            "untagged_point_tooltip": "Selecionar um tipo de elemento que descreva o que este ponto é.",
-            "untagged_line": "Linha sem etiquetas",
-            "untagged_line_tooltip": "Selecionar um tipo de elemento que descreva o que esta linha é.",
-            "untagged_area": "Área sem etiquetas",
-            "untagged_area_tooltip": "Selecionar um tipo de elemento que descreva o que esta área é.",
-            "untagged_relation": "Relação sem etiquetas",
-            "untagged_relation_tooltip": "Selecionar um tipo de elemento que descreva o que esta relação é.",
-            "many_deletions": "Você está apagando {n} feições: {p} nós, {l} linhas, {a} áreas, {r} relações. Você ter certeza que quer executar esta ação? Ela irá apagar estes elementos para todas as pessoas que acessam o openstreetmap.org.",
-            "tag_suggests_area": "A etiqueta {tag} sugere que seja utilizada numa área, mas essa linha não é uma área",
-            "deprecated_tags": "Etiquetas obsoletas: {tags}"
-        },
         "zoom": {
             "in": "Aproximar o zoom",
             "out": "Afastar o zoom"
         "cannot_zoom": "Não é possível afastar mais no modo atual.",
         "full_screen": "Alterar para Tela Cheia",
         "QA": {
+            "improveOSM": {
+                "title": "Detecção do ImproveOSM",
+                "geometry_types": {
+                    "path": "caminhos",
+                    "parking": "estacionamento",
+                    "road": "estradas",
+                    "both": "estradas e estacionamento"
+                },
+                "directions": {
+                    "east": "leste",
+                    "north": "norte",
+                    "northeast": "nordeste",
+                    "northwest": "noroeste",
+                    "south": "sul",
+                    "southeast": "sudeste",
+                    "southwest": "sudoeste",
+                    "west": "oeste"
+                },
+                "error_types": {
+                    "ow": {
+                        "title": "Falta de sentido",
+                        "description": "Ao longo desta seção de {highway}, {percentage}% de viagens {num_trips} gravadas viajam de {from_node} para {to_node}. Pode estar faltando uma etiqueta \"oneway\"."
+                    },
+                    "mr": {
+                        "title": "Geometria ausente",
+                        "description": "Viagens  {num_trips} gravadas nesta área sugerem que pode haver desmapeamento {geometry_type} aqui.",
+                        "description_alt": "Os dados de terceiros sugerem que pode haver {geometry_type} não mapeado aqui."
+                    },
+                    "tr": {
+                        "title": "Restrição de sentido ausente",
+                        "description": "{num_passed} de viagens {num_trips}  gravadas  (viajando {travel_direction}) fazer uma curva de {from_way} para {to_way} na {junction}. Pode haver uma restrição \"{turn_restriction}\" em falta."
+                    }
+                }
+            },
             "keepRight": {
                 "title": "Erro no KeepRight",
                 "detail_title": "Erro",
                 "title": "Verificação de qualidade",
                 "intro": "* Verificação de qualidade * (Q/A) ferramentas de terceiros que ajudam a melhorar a qualidade dos dados do OSM. Eles listam automaticamente erros, conflitos e problemas detectados com os dados, que os mapeadores podem então corrigir. Para ver os problemas existentes em Q/A, clique no painel {data} **Dados do mapa** para ativar uma camada Q/A específica.",
                 "tools_h": "Ferramentas",
-                "tools": "As seguintes ferramentas são suportadas atualmente: [KeepRight](https://www.keepright.at/). Espere que o iD suporte [Osmose](https://osmose.openstreetmap.fr/), [ImproveOSM](https://improveosm.org/en/), e mais ferramentas Q/A no futuro.",
+                "tools": "As seguintes ferramentas são suportadas atualmente: [KeepRight](https://www.keepright.at/) e  [ImproveOSM](https://improveosm.org/en/). Espere que o iD suporte [Osmose](https://osmose.openstreetmap.fr/) e mais ferramentas Q/A no futuro.",
                 "issues_h": "Problemas de manuseio",
                 "issues": "Lidar com questões Q/A é semelhante ao tratamento de notas. Clique em um marcador para ver os detalhes do problema na barra lateral. Cada ferramenta tem seus próprios recursos, mas geralmente você pode comentar e/ou fechar um problema."
             },
                 }
             }
         },
+        "issues": {
+            "title": "Problemas",
+            "key": "I",
+            "list_title": "({count}) problemas",
+            "errors": {
+                "list_title": "({count}) erros"
+            },
+            "warnings": {
+                "list_title": "({count}) avisos"
+            },
+            "no_issues": {
+                "message": "Tudo parece bem",
+                "info": "Quaisquer problemas aparecerão aqui conforme você edita"
+            },
+            "almost_junction": {
+                "message": "{feature} é muito próximo, mas não está conectado a {feature2}",
+                "highway-highway": {
+                    "tip": "Estradas com interseção devem compartilhar um vértice de junção."
+                }
+            },
+            "crossing_ways": {
+                "message": "{feature} cruza {feature2}",
+                "building-building": {
+                    "tip": "Os edifícios não devem se cruzar, exceto em camadas diferentes."
+                },
+                "building-highway": {
+                    "tip": "Rodovias que cruzam edifícios devem usar pontes, túneis, coberturas ou entradas."
+                },
+                "building-railway": {
+                    "tip": "Estradas de ferro que cruzam edifícios devem usar pontes ou túneis."
+                },
+                "building-waterway": {
+                    "tip": "Os canais que atravessam edifícios devem usar túneis ou camadas diferentes."
+                },
+                "highway-highway": {
+                    "tip": "As rodovias de travessia devem usar pontes, túneis ou cruzamentos."
+                },
+                "highway-railway": {
+                    "tip": "Rodovias que cruzam ferrovias devem usar pontes, túneis ou passagens de nível."
+                },
+                "highway-waterway": {
+                    "tip": "Rodovias que atravessam cursos de água devem usar pontes, túneis ou vaus."
+                },
+                "railway-railway": {
+                    "tip": "Ferrovias de cruzamento devem ser conectadas ou usar pontes ou túneis."
+                },
+                "railway-waterway": {
+                    "tip": "Estradas de ferro que cruzam cursos de água devem usar pontes ou túneis."
+                },
+                "waterway-waterway": {
+                    "tip": "Os canais de travessia devem estar conectados ou usar túneis."
+                },
+                "tunnel-tunnel": {
+                    "tip": "Túneis cruzados devem usar diferentes camadas."
+                },
+                "tunnel-tunnel_connectable": {
+                    "tip": "Os túneis de cruzamento devem ser conectados ou usar camadas diferentes."
+                },
+                "bridge-bridge": {
+                    "tip": "Pontes de cruzamento devem usar camadas diferentes."
+                },
+                "bridge-bridge_connectable": {
+                    "tip": "As pontes de cruzamento devem ser conectadas ou usar camadas diferentes."
+                },
+                "indoor-indoor": {
+                    "tip": "Os recursos internos de cruzamento devem usar níveis diferentes."
+                },
+                "indoor-indoor_connectable": {
+                    "tip": "Os recursos internos de cruzamento devem estar conectados ou usar níveis diferentes."
+                }
+            },
+            "deprecated_tag": {
+                "single": {
+                    "message": "{feature} tem a etiqueta desatualizada \"{tag}\""
+                },
+                "combination": {
+                    "message": "{feature} tem uma combinação de etiqueta desatualizada: {tags}"
+                },
+                "tip": "Algumas etiquetas se tornam obsoletas com o tempo e devem ser substituídas."
+            },
+            "disconnected_way": {
+                "highway": {
+                    "message": "{highway} está desconectado de outras estradas e caminhos",
+                    "tip": "As rodovias devem se conectar a outras rodovias ou entradas de prédios."
+                }
+            },
+            "generic_name": {
+                "message": "{feature} tem o nome genérico \"{name}\"",
+                "tip": "Os nomes devem ser os nomes reais dos recursos."
+            },
+            "many_deletions": {
+                "points-lines-areas": {
+                    "message": "Excluindo {n} recursos: {p} pontos, {l} linhas e {a} áreas"
+                },
+                "points-lines-areas-relations": {
+                    "message": "Excluindo {n} recursos: {p} pontos, {l} linhas, {a} áreas e {r} relações"
+                },
+                "tip": "Somente recursos redundantes ou inexistentes devem ser excluídos."
+            },
+            "missing_tag": {
+                "any": {
+                    "message": "{feature} não tem etiquetas."
+                },
+                "descriptive": {
+                    "message": "{feature} não tem etiquetas descritivas"
+                },
+                "specific": {
+                    "message": "{feature} não tem etiqueta \"{tag}\""
+                },
+                "tip": "Os recursos devem ter etiquetas que definem o que são."
+            },
+            "old_multipolygon": {
+                "message": "{multipolygon} tem etiquetas perdidas",
+                "tip": "Multipolígonos devem ser marcados em sua relação, não em seu caminho externo."
+            },
+            "tag_suggests_area": {
+                "message": "{feature} deve ser uma área fechada com base na etiqueta \"{tag}\"",
+                "tip": "As áreas devem ter terminais conectados."
+            },
+            "fix": {
+                "connect_almost_junction": {
+                    "annotation": "Conectado recursos muito próximos."
+                },
+                "connect_crossing_features": {
+                    "annotation": "Recursos de travessia conectados."
+                },
+                "connect_endpoints": {
+                    "title": "Conectar as extremidades",
+                    "annotation": "Conectado os pontos finais de um caminho."
+                },
+                "connect_features": {
+                    "title": "Conecte os recursos"
+                },
+                "continue_from_start": {
+                    "title": "Continue desenhando desde o início"
+                },
+                "continue_from_end": {
+                    "title": "Continue a desenhar a partir da extremidade"
+                },
+                "delete_feature": {
+                    "title": "Excluir este recurso"
+                },
+                "move_tags": {
+                    "title": "Mover etiquetas",
+                    "annotation": "Movido etiquetas"
+                },
+                "remove_generic_name": {
+                    "title": "Remova o nome",
+                    "annotation": "Removido nome genérico"
+                },
+                "remove_tag": {
+                    "title": "Remova etiqueta",
+                    "annotation": "Removido etiqueta."
+                },
+                "reposition_features": {
+                    "title": "Reposicione os recursos"
+                },
+                "select_preset": {
+                    "title": "Selecione um tipo de recurso"
+                },
+                "tag_as_disconnected": {
+                    "title": "Etiqueta está desconectada",
+                    "annotation": "Marcou recursos muito próximos como desconectados."
+                },
+                "upgrade_tag": {
+                    "annotation": "Atualizado essa etiqueta."
+                },
+                "upgrade_tag_combo": {
+                    "annotation": "Atualizou uma combinação antiga de etiquetas."
+                },
+                "use_bridge_or_tunnel": {
+                    "title": "Use uma ponte ou túnel"
+                },
+                "use_different_layers": {
+                    "title": "Use camadas diferentes"
+                },
+                "use_different_levels": {
+                    "title": "Use níveis diferentes"
+                },
+                "use_tunnel": {
+                    "title": "Use um túnel"
+                }
+            }
+        },
         "intro": {
             "done": "feito",
             "ok": "OK",
                 "category-building": {
                     "name": "Tipos de Edificações"
                 },
-                "category-golf": {
+                "category-golf-area": {
+                    "name": "Elementos de Golf"
+                },
+                "category-golf-line": {
                     "name": "Elementos de Golf"
                 },
                 "category-landuse": {
                 "animal_shelter": {
                     "label": "Para Animais"
                 },
+                "architect": {
+                    "label": "Arquiteto"
+                },
                 "area/highway": {
                     "label": "Tipo"
                 },
                 "junction/ref_oneway": {
                     "label": "Número do entroncamento"
                 },
+                "junction_line": {
+                    "label": "Entroncamento",
+                    "options": {
+                        "circular": "Junção Circular",
+                        "jughandle": "Jughandle",
+                        "roundabout": "Rotatória"
+                    }
+                },
                 "kerb": {
                     "label": "Meio-fio"
                 },
                         "underground": "Subterrâneo"
                     }
                 },
-                "passenger_information_display": {
-                    "label": "Painel de informações"
-                },
                 "payment_multi": {
                     "label": "Tipos de Pagamento"
                 },
                 "restrictions": {
                     "label": "Restrições de curva"
                 },
+                "roof/colour": {
+                    "label": "Cor do telhado"
+                },
                 "rooms": {
                     "label": "Número de quartos ou apartamentos"
                 },
                     },
                     "placeholder": "Caminhada de montanha, caminhada alpina"
                 },
+                "salt": {
+                    "label": "Sal"
+                },
                 "sanitary_dump_station": {
                     "label": "Ponto de Descarga de Dejetos"
                 },
                     },
                     "placeholder": "Sim, Não, Só para Viagem..."
                 },
+                "tidal": {
+                    "label": "Maré"
+                },
                 "to": {
                     "label": "Para"
                 },
                 },
                 "website": {
                     "label": "Página da Internet",
-                    "placeholder": "http://exemplo.com.br/"
+                    "placeholder": "https://exemplo.com"
                 },
                 "wetland": {
                     "label": "Tipo"
                     "name": "Relógio",
                     "terms": "Relógio"
                 },
+                "amenity/clock/sundial": {
+                    "name": "Relógio de sol",
+                    "terms": "Relógio de sol"
+                },
                 "amenity/college": {
                     "name": "Escola técnica",
                     "terms": "Colégio técnico, Ensino profissionalizante, Educação profissional"
                     "terms": "fast food, lanchonete, lanches, Lancheria, comida rápida"
                 },
                 "amenity/fast_food/burger": {
-                    "name": "Comida de Hambúrguer Rápido",
-                    "terms": "Comida de Hambúrguer rápido"
+                    "name": "Hamburgueria",
+                    "terms": "lanchonete, fast food, comida rápida, hambúrguer, restaurante, lanche"
                 },
                 "amenity/fast_food/chicken": {
-                    "name": "Comida de Frango Rápido",
-                    "terms": "Comida de Frango Rápido"
+                    "name": "Frango Frito",
+                    "terms": "frango, lanchonete, comida rápida, fast food, chicken fry"
                 },
                 "amenity/fast_food/fish_and_chips": {
-                    "name": "Comida de Peixe e Batatas fritas Rápido",
-                    "terms": "Comida de Peixe e Batatas fritas Rápido"
+                    "name": "Peixe e Batatas Fritas",
+                    "terms": "lanchonete, comida rápida, fast food, restaurante, alimentação, peixe, fritas,"
                 },
                 "amenity/fast_food/kebab": {
-                    "name": "Comida de Churrasquinho Rápido",
-                    "terms": "Comida de Churrasquinho Rápido"
+                    "name": "Kebab",
+                    "terms": "lanchonete, comida rápida, fast food, restaurante, alimentação, kebab, shawarma, falafel, comida árabe, árabe"
+                },
+                "amenity/fast_food/mexican": {
+                    "name": "Fast Food Mexicano",
+                    "terms": "Fast Food Mexicano"
                 },
                 "amenity/fast_food/pizza": {
-                    "name": "Comida de Pizza Rápida",
-                    "terms": "Comida de Pizza Rápida"
+                    "name": "Pizzaria Delivery",
+                    "terms": "lanchonete, comida rápida, fast food, alimentação, pizza, delivery"
                 },
                 "amenity/fast_food/sandwich": {
-                    "name": "Comida de Sanduíche rápido",
-                    "terms": "Comida de Sanduíche rápido"
+                    "name": "Sanduicheria",
+                    "terms": "lanchonete, comida rápida, fast food, restaurante, alimentação, sanduíche natural, sandwich natural,"
                 },
                 "amenity/ferry_terminal": {
                     "name": "Terminal de Ferry Boat / Balsa"
                 },
                 "amenity/food_court": {
                     "name": "Praça de Alimentação",
-                    "terms": "praça de alimentação, área de alimentação, comida, alimentação"
+                    "terms": "praça de alimentação, área de alimentação, comida, alimentação, restaurantes, lanchonete, comida rápida, fast food"
                 },
                 "amenity/fountain": {
                     "name": "Chafariz",
                     "name": "Farmácia",
                     "terms": "Contador de Farmácia"
                 },
+                "amenity/photo_booth": {
+                    "name": "Cabine de foto",
+                    "terms": "Cabine de foto"
+                },
                 "amenity/place_of_worship": {
                     "name": "Local de Prática Religiosa",
                     "terms": "Local de Culto, Lugar de Adoração, Abadia, Basílica, Betel, Catedral, Mor, Capela, Igreja, Aprisco, Casa de Deus, Casa de oração, Casa de adoração, Mesquita, Oratório, Paróquia, Santuário, Sinagoga, Tabernáculo, Templo"
                 },
                 "amenity/pub": {
                     "name": "Bar / Boteco",
-                    "terms": "Pub, botequim, boteco, buteco, bar, butequim, chopperia, choperia,"
+                    "terms": "pub, botequim, boteco, buteco, bar, botequim, butequim, chopperia, choperia"
                 },
                 "amenity/public_bath": {
                     "name": "Banho Público",
                 },
                 "amenity/restaurant/asian": {
                     "name": "Restaurante Asiático",
-                    "terms": "Restaurante Asiático"
+                    "terms": "Asiático, comida asiática, restaurante, ásia"
                 },
                 "amenity/restaurant/chinese": {
-                    "name": "Restaurante Chines",
-                    "terms": "Restaurante Chines"
+                    "name": "Restaurante Chinês",
+                    "terms": "comida chinesa, yakisoba, lamen,"
                 },
                 "amenity/restaurant/french": {
                     "name": "Restaurante Francês",
-                    "terms": "Restaurante Francês"
+                    "terms": "Restaurante Francês, comida francesa, frança, comida mediterrânea, restaurante mediterrâneo"
                 },
                 "amenity/restaurant/german": {
                     "name": "Restaurante Alemão",
-                    "terms": "Restaurante Alemão"
+                    "terms": "Comida Alemã, alemanha, restaurante, salsicha, cerveja"
                 },
                 "amenity/restaurant/greek": {
                     "name": "Restaurante Grego",
-                    "terms": "Restaurante Grego"
+                    "terms": "comida grega, comida mediterrânea, restaurante mediterrâneo"
                 },
                 "amenity/restaurant/indian": {
                     "name": "Restaurante Indiano",
-                    "terms": "Restaurante Indiano"
+                    "terms": "comida Indiana, índia, restaurante asiático, comida asiática,"
                 },
                 "amenity/restaurant/italian": {
                     "name": "Restaurante Italiano",
-                    "terms": "Restaurante italiano"
+                    "terms": "Restaurante italiano, comida italiana, macarrão, pasta, pizza"
                 },
                 "amenity/restaurant/japanese": {
                     "name": "Restaurante Japonês",
-                    "terms": "Restaurante Japonês"
+                    "terms": "comida Japonesa, sushi, temaki, teriaki,"
                 },
                 "amenity/restaurant/mexican": {
                     "name": "Restaurante Mexicano",
-                    "terms": "Restaurante Mexicano"
+                    "terms": "comida Mexicana, tex-mex, nachos, guacamole, tortillas"
                 },
                 "amenity/restaurant/noodle": {
-                    "name": "Restaurante de macarrão",
-                    "terms": "Restaurante de macarrão"
+                    "name": "Restaurante de Lámen",
+                    "terms": "ramen, lamen, noodle,"
                 },
                 "amenity/restaurant/pizza": {
-                    "name": "Restaurante de pizza",
-                    "terms": "Restaurante de pizza"
+                    "name": "Pizzaria",
+                    "terms": "restaurante, alimentação, pizza, comida italiana"
                 },
                 "amenity/restaurant/seafood": {
                     "name": "Restaurante de frutos do mar",
-                    "terms": "Restaurante de frutos do mar"
+                    "terms": "pescados, alimentação, frutos do mar, peixes"
                 },
                 "amenity/restaurant/steakhouse": {
                     "name": "Churrascaria",
                 },
                 "amenity/restaurant/sushi": {
                     "name": "Restaurante de sushi",
-                    "terms": "Restaurante de sushi"
+                    "terms": "sushi, sashimi, comida japonesa, restaurante, alimentação, comida asiática, restaurante asiático, restaurante japonês"
                 },
                 "amenity/restaurant/thai": {
                     "name": "Restaurante Tailandês",
-                    "terms": "Restaurante Tailandês"
+                    "terms": "tailândia, comida tailandesa, comida asiática, restaurante asiático"
                 },
                 "amenity/restaurant/turkish": {
-                    "name": "Restaurante turco",
-                    "terms": "Restaurante turco"
+                    "name": "Restaurante Turco",
+                    "terms": "Restaurante, turquia, comida turca, kebab, falafel, shawarma, homus, tahine"
                 },
                 "amenity/restaurant/vietnamese": {
-                    "name": "Restaurante vietnamita",
-                    "terms": "Restaurante vietnamita"
+                    "name": "Restaurante Vietnamita",
+                    "terms": "Restaurante, vietnã, restaurante asiático, comida asiática, alimentação,"
                 },
                 "amenity/sanitary_dump_station": {
                     "name": "Ponto de Descarga de Dejetos (para trailers)",
                     "terms": "Fileira de Casas"
                 },
                 "building/train_station": {
-                    "name": "Estação Ferroviária"
+                    "name": "Edifício de estação de trem"
                 },
                 "building/transportation": {
                     "name": "Edifício de transporte",
                     "name": "Banco de Areia",
                     "terms": "Bunker, Banco de Areia, Banca de Areia, Poça de Areia, Obstáculo de Areia"
                 },
+                "golf/cartpath": {
+                    "name": "Carrinho de golfe",
+                    "terms": "Carrinho de golfe"
+                },
+                "golf/cartpath_service": {
+                    "name": "Carrinho de golfe / Estrada de serviço",
+                    "terms": "Carrinho de golfe / Estrada de serviço"
+                },
+                "golf/driving_range": {
+                    "name": "Driving Range",
+                    "terms": "Carrinho de golfe / Estrada de serviço"
+                },
                 "golf/fairway": {
                     "name": "Fairway",
                     "terms": "Fairway, Percurso Intermediário"
                     "name": "Buraco",
                     "terms": "Golfe, Golf, Buraco de Golf"
                 },
-                "golf/lateral_water_hazard_area": {
+                "golf/lateral_water_hazard": {
                     "name": "Obstáculo de Água Lateral",
                     "terms": "Água Lateral, golfe, Perigo de água lateral"
                 },
-                "golf/lateral_water_hazard_line": {
-                    "name": "Obstáculo de Água Lateral",
-                    "terms": "Água Lateral, golfe, Perigo de água lateral"
+                "golf/path": {
+                    "name": "Caminho de golfe",
+                    "terms": "Caminho de golfe"
                 },
                 "golf/rough": {
                     "name": "Rough",
                     "name": "Tee Box",
                     "terms": "Tee Box"
                 },
-                "golf/water_hazard_area": {
+                "golf/water_hazard": {
                     "name": "Obstáculo de Água",
                     "terms": "Perigo de Água, Água, Lago"
                 },
-                "golf/water_hazard_line": {
-                    "name": "Obstáculo de Água",
-                    "terms": "Lago, água, perigo de água, golfe"
-                },
                 "healthcare": {
                     "name": "Assistência Médica",
                     "terms": "posto de saúde, Unidade de Pronto Atendimento, Unidade Básica de Saúde, enfermaria, clínica, doutor, consultório médico, serviços médicos, serviço médico, serviço de saúde, atendimento médico, médico, médica, saúde, hospital, dentista, fisioterapia"
                     "terms": "Encruzilhada, Junção"
                 },
                 "landuse": {
-                    "name": "Uso da terra",
-                    "terms": "Uso do Solo, Ocupação da Terra, Ordenamento Territorial, Exploração da Terra, Utilização da Terra, uso de terreno"
+                    "name": "Uso da terra"
                 },
                 "landuse/allotments": {
                     "name": "Horta Urbana",
                     "terms": "Vinha, Vinhedo, Plantação de uvas, Parreiras"
                 },
                 "leisure": {
-                    "name": "Área de Lazer",
-                    "terms": "Lazer, Diversão, Recreação, área de recreação, recreativa, parque, praça,"
+                    "name": "Área de Lazer"
                 },
                 "leisure/adult_gaming_centre": {
                     "name": "Centro de Jogos para Adultos",
                     "name": "Mesa de piquenique",
                     "terms": "mesa de piquenique, picnic, pique-nique"
                 },
+                "leisure/picnic_table/chess": {
+                    "name": "Tabuleiro de xadrez",
+                    "terms": "Tabuleiro de xadrez"
+                },
                 "leisure/pitch": {
                     "name": "Quadra ou Campo Esportivo",
                     "terms": "Campo de Esportes, Campo Esportivo, Quadra Esportiva, ginásio, estádio"
                     "name": "Centro Esportivo / Clube",
                     "terms": "centro de esportes, complexo esportivo, centro desportivo, complexo desportivo"
                 },
+                "leisure/sports_centre/climbing": {
+                    "name": "Academia de escalada",
+                    "terms": "Academia de escalada"
+                },
                 "leisure/sports_centre/swimming": {
                     "name": "Academia de Natação",
                     "terms": "natação, nado, esportes aquáticos, desportos aquáticos, piscina, centro de natação"
                     "terms": "Linha"
                 },
                 "man_made": {
-                    "name": "Construção Humana",
-                    "terms": "construção humana, artificial"
+                    "name": "Construção Humana"
                 },
                 "man_made/adit": {
                     "name": "Ádito de Mineração",
                     "name": "Torre",
                     "terms": "Torre"
                 },
+                "man_made/tower/bell_tower": {
+                    "name": "Campanário",
+                    "terms": "Campanário , Torre sineira"
+                },
                 "man_made/tower/communication": {
                     "name": "Torre de comunicação",
                     "terms": "Torre de comunicação"
                 },
+                "man_made/tower/minaret": {
+                    "name": "Minarete",
+                    "terms": "Minarete"
+                },
                 "man_made/tower/observation": {
                     "name": "Torre de Observação",
                     "terms": "torre de observação, observação, ponto de observação, torre de incêndio, incêndio florestal"
                     "terms": "poço de inspeção de telefone"
                 },
                 "natural": {
-                    "name": "Natural",
-                    "terms": "Natural"
+                    "name": "Natural"
                 },
                 "natural/bare_rock": {
                     "name": "Leito Rochoso",
                     "name": "Água",
                     "terms": "Água"
                 },
+                "natural/water/basin": {
+                    "name": "Bacia",
+                    "terms": "Bacia"
+                },
                 "natural/water/canal": {
                     "name": "Canal",
                     "terms": "Canal"
                     "name": "Transformador",
                     "terms": "transformador, energia elétrica, eletricidade"
                 },
-                "public_transport/linear_platform": {
-                    "name": "Parada de Transporte / Plataforma",
-                    "terms": "Parada de Trânsito / Plataforma"
-                },
-                "public_transport/linear_platform_aerialway": {
-                    "name": "Parada / Plataforma Aérea",
-                    "terms": "Parada / Plataforma Aérea"
-                },
-                "public_transport/linear_platform_bus": {
-                    "name": "Parada de Ônibus / Plataforma",
-                    "terms": "ônibus, ponto de ônibus, transporte público, plataforma, trânsito"
-                },
-                "public_transport/linear_platform_ferry": {
-                    "name": "Parada de Balsa / Plataforma",
-                    "terms": "Parada de balsa / Plataforma"
-                },
-                "public_transport/linear_platform_light_rail": {
-                    "name": "Parada de VLT / Plataforma",
-                    "terms": "veículo leve sobre trilhos, VLT, bonde, transporte público, trânsito, transporte, coletivo"
-                },
-                "public_transport/linear_platform_monorail": {
-                    "name": "Parada de Monotrilho / Plataforma",
-                    "terms": "monotrilho, monocarrilho, trilho, trem, transporte público, trânsito, transporte"
-                },
-                "public_transport/linear_platform_subway": {
-                    "name": "Parada de metrô / Plataforma",
-                    "terms": "metrô, plataforma, transporte público, trânsito, trilhos"
-                },
-                "public_transport/linear_platform_train": {
-                    "name": "Parada de trem / Plataforma",
-                    "terms": "trem, estação, trilhos, transporte público, trânsito, transporte"
-                },
-                "public_transport/linear_platform_tram": {
-                    "name": "Parada de Bonde / Plataforma",
-                    "terms": "ponto de bonde, eléctrico, tram, vlt, veículo sobre trilhos, transporte público, transporte coletivo, trânsito, trólebus, trolleybus"
-                },
-                "public_transport/linear_platform_trolleybus": {
-                    "name": "Parada de Trólebus / Plataforma",
-                    "terms": "parada de trolleybus, ponto de trólebus, trólei, tróleibus, trolleybus, bonde, tram, elétrico, trânsito, transporte público, transporte, coletivo"
-                },
                 "public_transport/platform": {
                     "name": "Parada de Transporte / Plataforma",
                     "terms": "Parada de Trânsito / Plataforma"
                     "terms": "Vinícola, Adega"
                 },
                 "tourism": {
-                    "name": "Turismo",
-                    "terms": "Turismo"
+                    "name": "Turismo"
                 },
                 "tourism/alpine_hut": {
                     "name": "Abrigo de Montanha",
index c2c82f5d24a30915cd4a7074d046946781cf34de..d8539786271b9e961b7bfbf29cf86c717dda95e0 100644 (file)
                 "restriction": "Estes elementos não podem ser unidos porque iriam danificar a relação \"{relation}\".",
                 "relation": "Estes elementos não podem ser unidos porque têm funções de relação em conflito.",
                 "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."
+                "conflicting_tags": "Estes elementos não podem ser combinados porque algumas das suas etiquetas entram em conflito.",
+                "paths_intersect": "Estes elementos não podem ser unidos porque o caminho resultante se interceptaria."
             },
             "move": {
                 "title": "Mover",
             "modified": "Alterado",
             "deleted": "Eliminado",
             "created": "Criado",
+            "outstanding_errors_message": "Por favor remova primeiro os erros. {count} restantes.",
+            "comment_needed_message": "Por favor adicione primeiro um resumo das alterações que fez.",
             "about_changeset_comments": "Sobre comentários de alterações",
             "about_changeset_comments_link": "//wiki.openstreetmap.org/wiki/Good_changeset_comments",
             "google_warning": "Mencionou o Google no seu comentário: lembre-se que copiar do Google Mapas é expressamente proibido.",
                 "tooltip_data": "Centrar e aproximar o mapa nestes dados.",
                 "tooltip_issue": "Centrar e aproximar o mapa neste problema."
             },
-            "no_documentation_combination": "Não existe documentação disponível para esta combinação de etiqueta",
-            "no_documentation_key": "Não existe documentação disponível para esta chave",
             "show_more": "Mostrar Mais",
             "view_on_osm": "Ver no openstreetmap.org",
             "view_on_keepRight": "Ver em keepright.at",
             "role": "Função",
             "choose": "Selecionar tipo de elemento",
             "results": "{n} resultados para {search}",
-            "reference": "Ver na Wiki do OpenStreetMap",
-            "edit_reference": "Editar ou traduzir descrição",
+            "no_documentation_key": "Não há documentação disponível",
+            "edit_reference": "editar/traduzir",
             "wiki_reference": "Ver documentação",
             "wiki_en_reference": "Ver documentação em inglês",
+            "hidden_preset": {
+                "manual": "{features} estão ocultos. Ative-os no painel Dados técnicos do mapa.",
+                "zoom": "{features} estão ocultos. Aproxime a visualização para os mostrar."
+            },
             "back_tooltip": "Alterar elemento",
             "remove": "Remover",
             "search": "Pesquisar",
                     "tooltip": "Deteção automática dos problemas do mapa de keepright.at",
                     "title": "Problemas do KeepRight"
                 },
+                "improveOSM": {
+                    "tooltip": "Dados em falta detetados automaticamente pelo improveosm.org",
+                    "title": "Problemas ImproveOSM"
+                },
                 "custom": {
                     "tooltip": "Arraste e solte um ficheiro de dados na página ou clique no botão para configurar",
                     "title": "Dados do mapa personalizados",
                 "tooltip": "Linhas de Transmissão, Centrais Elétricas, Subestações, etc."
             },
             "past_future": {
-                "description": "Passado/Futuro",
+                "description": "Elementos passado / futuro",
                 "tooltip": "Proposto, Em construção, Abandonado, Demolido, etc."
             },
             "others": {
-                "description": "Outros",
+                "description": "Outros elementos",
                 "tooltip": "Tudo o Resto"
             }
         },
             "on_wiki": "{tag} em wiki.osm.org",
             "used_with": "usado com {type}"
         },
-        "validations": {
-            "disconnected_highway": "Estrada desconectada",
-            "disconnected_highway_tooltip": "As estradas devem estar conectadas a outras estradas ou entradas de edifícios.",
-            "generic_name": "Possível nome genérico",
-            "generic_name_tooltip": "Este elemento parece ter um nome genérico \"{name}\". Por favor use apenas o campo de nome para indicar o nome oficial de um elemento.",
-            "old_multipolygon": "Etiquetas de multi-polígono na linha exterior",
-            "old_multipolygon_tooltip": "Este tipo de multi-polígono está em desuso. Por favor mude as etiquetas da linha exterior para o multi-polígono.",
-            "untagged_point": "Ponto sem etiquetas",
-            "untagged_point_tooltip": "Escolha um elemento que indique o que este ponto representa.",
-            "untagged_line": "Linha sem etiquetas",
-            "untagged_line_tooltip": "Escolha um elemento que indique o que esta linha representa.",
-            "untagged_area": "Área sem etiquetas",
-            "untagged_area_tooltip": "Escolha um elemento que indique o que esta área representa.",
-            "untagged_relation": "Relação sem etiquetas",
-            "untagged_relation_tooltip": "Selecione um tipo de elemento que descreva o que é esta relação.",
-            "many_deletions": "Está a eliminar {n} elementos: {p} nós, {l} linhas, {a} áreas, {r} relações. Tem a certeza que quer fazer isto? Isto irá eliminá-las do mapa que qualquer pessoa pode ver em openstreetmap.org.",
-            "tag_suggests_area": "A etiqueta {tag} é normalmente usada em áreas e não linhas.",
-            "deprecated_tags": "Etiquetas obsoletas: {tags}"
-        },
         "zoom": {
             "in": "Aproximar",
             "out": "Afastar"
         "cannot_zoom": "Não é possível afastar mais no modo atual.",
         "full_screen": "Edição em ecrã inteiro.",
         "QA": {
+            "improveOSM": {
+                "title": "Deteção ImproveOSM",
+                "geometry_types": {
+                    "path": "caminhos",
+                    "parking": "parque de estacionamento",
+                    "road": "estradas",
+                    "both": "estradas e estacionamento"
+                },
+                "directions": {
+                    "east": "este",
+                    "north": "norte",
+                    "northeast": "nordeste",
+                    "northwest": "noroeste",
+                    "south": "sul",
+                    "southeast": "sudeste",
+                    "southwest": "sudoeste",
+                    "west": "oeste"
+                },
+                "error_types": {
+                    "ow": {
+                        "title": "Falta sentido único",
+                        "description": "Ao longo desta secção de {highway}, {percentage}% de {num_trips} viagens gravadas vão de {from_node} para {to_node}. Pode estar a faltar a etiqueta \"oneway\" para indicar que é de sentido único."
+                    },
+                    "mr": {
+                        "title": "Geometria em falta",
+                        "description": "{num_trips} viagens gravadas nesta área sugerem que pode haver aqui uma {geometry_type} por mapear.",
+                        "description_alt": "Os dados de terceiros sugerem que pode haver {geometry_type} por cartografar aqui,"
+                    },
+                    "tr": {
+                        "title": "Restrição de viragem em falta",
+                        "description": "{num_passed} de {num_trips} viagens gravadas (que vêm de {travel_direction}) fazem uma viragem de {from_way} para {to_way} em {junction}. Pode faltar aqui uma restrição do tipo \"{turn_restriction}\"."
+                    }
+                }
+            },
             "keepRight": {
                 "title": "Erro KeepRight",
                 "detail_title": "Erro",
                         "description": "Existe um problema não especificado com o website ou o URL de contacto."
                     },
                     "411": {
-                        "description": "{var1} pode ter um URL desatualizado: {var2} devolveo o código de estado HTTP {var3}."
+                        "description": "{var1} pode ter um URL desatualizado: {var2} devolveu o código de estado HTTP {var3}."
                     },
                     "412": {
                         "description": "{var1} pode ter um URL desatualizado: {var2} contém o texto suspeito \"{var3}\"."
                 "intro": "Os trilhos GPS são uma fonte da dados importante para o OpenStreetMap. Este editor suporta ficheiros *.gpx*, *.geojson* e *.kml* que estejam no seu computador. Pode criar trilhos GPS utilizando o seu telemóvel, relógios desportivos ou outros aparelhos GPS.",
                 "survey": "Para mais informações de como deve efetuar um levantamento no terreno, leia [Como mapear com um telemóvel, GPS ou papéis](http://learnosm.org/en/mobile-mapping/).",
                 "using_h": "Utilizando trilhos GPS",
-                "using": "Para utilizar um rasto GPS para mapear, arraste-o e coloque o ficheiro no editor do mapa do seu browser. Se for reconhecido, será desenhado no mapa como uma linha com uma cor de roxo claro. Clique em {data} **Dados do mapa** no painel lateral ao mapa para ativar, desativar ou aproximar para a sua informação GPS.",
-                "tracing": "O rasto GPS não é enviado para o OpenStreetMap, a melhor maneira para utilizá-lo é desenhar no mapa e utilizando-o como guia para os novos elementos que adicionar.",
+                "using": "Para utilizar um trilho GPS para mapear, arraste-o e largue-oo no editor do mapa. Se for reconhecido, será desenhado no mapa como uma linha com uma cor de roxo claro. Clique em {data} **Dados do mapa** no painel lateral ao mapa para ativar, desativar ou aproximar a sua informação GPS.",
+                "tracing": "O trilho GPS não é enviado para o OpenStreetMap, a melhor maneira de utilizá-lo é desenhar no mapa e este servir de guia para os novos elementos que adicionar.",
                 "upload": "Pode também [enviar os seus dados GPS para o OpenStreetMap](https://www.openstreetmap.org/trace/create) para que outros possam utilizá-los para mapear."
             },
             "qa": {
                 "title": "Controlo de Qualidade",
                 "intro": "*Controlo de Qualidade* (Q/A) - as ferramentas podem detetar etiquetas erradas, estradas desligadas e outros problemas com o OpenStreetMap, os quais os mapeadores podem corrigir. Para ver os problemas de existentes, clique no painel {data} **Dados do Mapa** para ativar uma camada específica de Controlo de Qualidade.",
                 "tools_h": "Ferramentas",
-                "tools": "As seguintes ferramentas são suportadas: [KeepRight](https://www.keepright.at/index.php?lang=pt_BR). No futuro o iD irá suportar [Osmose](https://osmose.openstreetmap.fr/), [ImproveOSM](https://improveosm.org/en/) e outras ferramentas.",
+                "tools": "As seguintes ferramentas são suportadas neste momento: [KeepRight](https://www.keepright.at/index.php?lang=pt_BR e [ImproveOSM](https://improveosm.org/en/). No futuro o iD irá suportar o [Osmose](https://osmose.openstreetmap.fr/) e outras ferramentas.\n        ",
                 "issues_h": "Gerir Problemas",
                 "issues": "Gerir os problemas de Controlo de Qualidade é similar ao gerir notas/erros reportados. Clique num marcador para ver os detalhes do problema no painel lateral. Cada ferramenta tem as suas próprias capacidades, mas geralmente, se quiser, pode comentar e/ou fechar um problema."
             },
                 }
             }
         },
+        "issues": {
+            "title": "Problemas",
+            "key": "P",
+            "list_title": "Problemas ({count})",
+            "errors": {
+                "list_title": "Erros ({count})"
+            },
+            "warnings": {
+                "list_title": "Avisos ({count})"
+            },
+            "no_issues": {
+                "message": "Parece que está tudo bem",
+                "info": "Se existir algum problema, ele aparecerá aqui à medida que edita"
+            },
+            "almost_junction": {
+                "message": "{feature} está muito perto mas não está ligada a {feature2}",
+                "highway-highway": {
+                    "tip": "As rodovias que se intersetam devem ter um vértice comum na interseção."
+                }
+            },
+            "crossing_ways": {
+                "message": "{feature} cruza com {feature2}",
+                "building-building": {
+                    "tip": "Os edifícios não se devem intersetar a não ser que estejam em níveis diferentes."
+                },
+                "building-highway": {
+                    "tip": "As rodovias que cruzem com edifícios devem ser pontes, túneis, coberturas ou entradas."
+                },
+                "building-railway": {
+                    "tip": "As ferrovias que cruzem com edifícios devem ser pontes ou túneis."
+                },
+                "building-waterway": {
+                    "tip": "As hidrovias que cruzem com edifícios devem ser túneis ou estar em níveis diferentes."
+                },
+                "highway-highway": {
+                    "tip": "As hidrovias que se cruzem devem usar pontes, túneis ou pontos de interseção."
+                },
+                "highway-railway": {
+                    "tip": "As rodovias que cruzem com ferrovias devem usar pontes, túneis ou passagens de nível."
+                },
+                "highway-waterway": {
+                    "tip": "As rodovias que cruzem com hidrovias devem usar pontes, túneis ou vaus."
+                },
+                "railway-railway": {
+                    "tip": "As ferrovias que se cruzem devem ser conectadas ou usar pontes ou túneis."
+                },
+                "railway-waterway": {
+                    "tip": "As ferrovias que cruzem com hidrovias devem usar pontes ou túneis."
+                },
+                "waterway-waterway": {
+                    "tip": "As hidrovias devem estar conectadas ou usar túneis."
+                },
+                "tunnel-tunnel": {
+                    "tip": "Os túneis que se cruzem devem usar níveis diferentes."
+                },
+                "tunnel-tunnel_connectable": {
+                    "tip": "Os túneis que se cruzem devem ser conectados ou usar níveis diferentes."
+                },
+                "bridge-bridge": {
+                    "tip": "pontes que se cruzem devem usar níveis diferentes."
+                },
+                "bridge-bridge_connectable": {
+                    "tip": "As pontes que se cruzem devem-se conectar ou usar níveis diferentes."
+                }
+            },
+            "deprecated_tag": {
+                "single": {
+                    "message": "{feature} tem a etiqueta \"{tag}\" que foi descontinuada"
+                },
+                "combination": {
+                    "message": "{feature} tem uma combinação de etiquetas descontinuadas: {tags}"
+                },
+                "tip": "Algumas etiquetas tornam-se descontinuadas ao longo do tempo e devem ser substituídas."
+            },
+            "disconnected_way": {
+                "highway": {
+                    "message": "{highway} está desconectada de outras estradas e caminhos",
+                    "tip": "As rodovias devem estar conectadas a outras rodovias ou entradas de edifícios."
+                }
+            },
+            "generic_name": {
+                "message": "{feature} tem o nome genérico \"{name}\"",
+                "tip": "Os nomes devem ser os atuais e como aparecem no terreno."
+            },
+            "many_deletions": {
+                "points-lines-areas": {
+                    "message": "A eliminar {n} elementos: {p} pontos, {l} linhas e {a} áreas"
+                },
+                "points-lines-areas-relations": {
+                    "message": "A eliminar {n} elementos: {p} pontos, {l} linhas, {a} áreas e {r} relações"
+                },
+                "tip": "Apenas devem ser eliminados elementos redundantes ou não existentes no terreno."
+            },
+            "missing_tag": {
+                "any": {
+                    "message": "{feature} não tem etiquetas"
+                },
+                "descriptive": {
+                    "message": "{feature} não tem etiquetas descritivas"
+                },
+                "specific": {
+                    "message": "{feature} não tem a etiqueta \"{tag}\""
+                },
+                "tip": "Os elementos devem ter etiquetas que definam o que são."
+            },
+            "old_multipolygon": {
+                "message": "{multipolygon} tem etiquetas colocadas no elemento errado",
+                "tip": "Os multi-polígonos devem ser etiquetados na sua relação e não na linha exterior."
+            },
+            "tag_suggests_area": {
+                "message": "{feature} deve ser uma área fechada, de acordo com a chave \"{tag}\"",
+                "tip": "As áreas devem ter pontos dos extremos ligados."
+            },
+            "fix": {
+                "connect_almost_junction": {
+                    "annotation": "Elementos muito próximos conectados."
+                },
+                "connect_crossing_features": {
+                    "annotation": "Elementos que se cruzavam conectados."
+                },
+                "connect_endpoints": {
+                    "title": "Conectar as extremidades",
+                    "annotation": "Extremidades de uma linha conectadas."
+                },
+                "connect_features": {
+                    "title": "Conectar os elementos"
+                },
+                "continue_from_start": {
+                    "title": "Continuar a desenhar do início"
+                },
+                "continue_from_end": {
+                    "title": "Continuar a desenhar do fim"
+                },
+                "delete_feature": {
+                    "title": "Eliminar esta etiqueta"
+                },
+                "move_tags": {
+                    "title": "Mover as etiquetas",
+                    "annotation": "Etiquetas movidas."
+                },
+                "remove_generic_name": {
+                    "title": "Remover o nome",
+                    "annotation": "Nome genérico removido."
+                },
+                "remove_tag": {
+                    "title": "Remover a etiqueta.",
+                    "annotation": "Etiqueta removida."
+                },
+                "reposition_features": {
+                    "title": "Reposicionar os elementos"
+                },
+                "select_preset": {
+                    "title": "Selecionar um tipo de elemento"
+                },
+                "tag_as_disconnected": {
+                    "title": "Etiquetar como desconectados",
+                    "annotation": "Elementos muito próximos etiquetados."
+                },
+                "upgrade_tag": {
+                    "annotation": "Etiqueta antiga atualizada."
+                },
+                "upgrade_tag_combo": {
+                    "annotation": "Combinação de etiquetas atualizadas."
+                }
+            }
+        },
         "intro": {
             "done": "feito",
             "ok": "OK",
                 "category-building": {
                     "name": "Elementos de edifícios"
                 },
-                "category-golf": {
-                    "name": "Elementos de Golfe"
+                "category-golf-area": {
+                    "name": "Elementos de golfe"
+                },
+                "category-golf-line": {
+                    "name": "Elementos de golfe"
                 },
                 "category-landuse": {
                     "name": "Elementos de uso do solo"
                 },
                 "category-natural-area": {
-                    "name": "Elementos Naturais"
+                    "name": "Elementos naturais"
                 },
                 "category-natural-line": {
-                    "name": "Elementos Naturais"
+                    "name": "Elementos naturais"
                 },
                 "category-natural-point": {
-                    "name": "Elementos Naturais"
+                    "name": "Elementos naturais"
                 },
                 "category-path": {
                     "name": "Elementos de caminhos"
                         "bicycle": "Bicicletas",
                         "foot": "Peões",
                         "horse": "Cavalos",
-                        "motor_vehicle": "Veículos Motorizados"
+                        "motor_vehicle": "Veículos motorizados"
                     }
                 },
                 "access_simple": {
                         "block_number!jp": "Bloco nº",
                         "city": "Localidade",
                         "city!jp": "Cidade/Vila/Aldeia/Tokyo Special Ward",
-                        "city!vn": "Cidade/Vila",
+                        "city!vn": "Cidade / vila",
                         "conscriptionnumber": "123",
                         "country": "País",
                         "county": "Condado",
                         "hamlet": "Aldeia",
                         "housename": "Nome da habitação",
                         "housenumber": "123",
-                        "housenumber!jp": "Nº Edifício / Loteamento",
+                        "housenumber!jp": "Nº edifício ou lote",
                         "neighbourhood": "Bairro",
                         "neighbourhood!jp": "Chōme/Aza/Koaza",
                         "place": "Local / lugar",
                         "subdistrict!vn": "Ward/Commune/Townlet",
                         "suburb": "Subúrbio ",
                         "suburb!jp": "Ward",
-                        "unit": "Bloco/Lote"
+                        "unit": "Bloco / lote"
                     }
                 },
                 "admin_level": {
-                    "label": "Nível Administrativo"
+                    "label": "Nível administrativo"
                 },
                 "aerialway": {
                     "label": "Tipo"
                     "label": "Aquecimento"
                 },
                 "aerialway/occupancy": {
-                    "label": "Lotação Máxima",
+                    "label": "Lotação máxima",
                     "placeholder": "2, 4, 8...."
                 },
                 "aerialway/summer/access": {
                     "label": "Tipo"
                 },
                 "animal_boarding": {
-                    "label": "Para Animais"
+                    "label": "Para animais"
                 },
                 "animal_breeding": {
-                    "label": "Para Animais"
+                    "label": "Para animais"
                 },
                 "animal_shelter": {
-                    "label": "Para Animais"
+                    "label": "Para animais"
                 },
                 "architect": {
                     "label": "Arquiteto"
                     "label": "Tipo"
                 },
                 "atm": {
-                    "label": "Terminal Bancário"
+                    "label": "Terminal bancário"
                 },
                 "attraction": {
                     "label": "Tipo"
                     "label": "Tipo"
                 },
                 "bath/open_air": {
-                    "label": "Ao Ar Livre"
+                    "label": "Ao ar livre"
                 },
                 "bath/sand_bath": {
-                    "label": "Banho de Areia"
+                    "label": "Banho de areia"
                 },
                 "bath/type": {
                     "label": "Especialidade",
                     "options": {
-                        "foot_bath": "Banhos de Pés",
-                        "hot_spring": "Fonte Termal",
-                        "onsen": "Águas Termais Japonesas / Onsen"
+                        "foot_bath": "Banhos de pés",
+                        "hot_spring": "Fonte termal",
+                        "onsen": "Águas termais japonesas / onsen"
                     }
                 },
                 "beauty": {
-                    "label": "Especialidade de Beleza"
+                    "label": "Especialidade de beleza"
                 },
                 "bench": {
                     "label": "Banco (objeto de sentar)"
                     "placeholder": "1, 2, 3..."
                 },
                 "camera/direction": {
-                    "label": "Direção (Graus no sentido dos ponteiros do relógio)",
+                    "label": "Direção (graus no sentido dos ponteiros do relógio)",
                     "placeholder": "45, 90, 180, 270"
                 },
                 "camera/mount": {
                 "camera/type": {
                     "label": "Tipo de câmara",
                     "options": {
-                        "dome": "Teto / Domo",
+                        "dome": "Teto / domo",
                         "fixed": "Fixa",
                         "panning": "Móvel"
                     }
                     "label": "Tipo"
                 },
                 "check_date": {
-                    "label": "Última Verificação no Terreno"
+                    "label": "Última verificação no local"
                 },
                 "clothes": {
                     "label": "Roupas"
                     "placeholder": "Breve descrição das suas alterações (obrigatório)"
                 },
                 "communication_multi": {
-                    "label": "Tipos de Comunicações"
+                    "label": "Tipos de comunicações"
                 },
                 "construction": {
                     "label": "Tipo"
                     "label": "Tipo"
                 },
                 "crane/type": {
-                    "label": "Tipo de Grua",
+                    "label": "Tipo de grua",
                     "options": {
-                        "floor-mounted_crane": "Grua Fixa ao Solo",
-                        "portal_crane": "Grua de Ponte Rolante",
-                        "travel_lift": "Grua de Elevação de Embarcações"
+                        "floor-mounted_crane": "Grua fixa ao solo",
+                        "portal_crane": "Grua de ponte rolante",
+                        "travel_lift": "Grua de elevação de embarcações"
                     }
                 },
                 "crop": {
                     }
                 },
                 "dance/style": {
-                    "label": "Estilos de Dança"
+                    "label": "Estilos de dança"
                 },
                 "date": {
                     "label": "Data"
                     "label": "Direção",
                     "options": {
                         "backward": "Para trás",
-                        "both": "Ambos / Todos",
+                        "both": "Ambos / todos",
                         "forward": "Para a frente"
                     }
                 },
                 "dispensing": {
-                    "label": "Medicamentos Sujeitos a Receita Médica"
+                    "label": "Medicamentos sujeitos a receita médica"
                 },
                 "display": {
                     "label": "Mostrador"
                     }
                 },
                 "drive_through": {
-                    "label": "serviço ao volante (sem sair do veiculo)"
+                    "label": "Serviço ao volante (sem sair do veículo)"
                 },
                 "duration": {
                     "label": "Duração",
                     "options": {
                         "contact_line": "Catenária (linha aérea)",
                         "no": "Não",
-                        "rail": "Carril Eletrificado",
+                        "rail": "Carril eletrificado",
                         "yes": "Sim (não especificado)"
                     },
-                    "placeholder": "Catenária, Carril Eletrificado..."
+                    "placeholder": "Catenária, carril eletrificado..."
                 },
                 "elevation": {
                     "label": "Altitude (metros)"
                     "label": "Lareira"
                 },
                 "fitness_station": {
-                    "label": "Tipo de Equipamento"
+                    "label": "Tipo de equipamento"
                 },
                 "fixme": {
                     "label": "Corrigir"
                     "placeholder": "Padrão"
                 },
                 "frequency": {
-                    "label": "Frequência Operacional"
+                    "label": "Frequência de operação"
                 },
                 "frequency_electrified": {
-                    "label": "Frequência de Operação"
+                    "label": "Frequência de operação"
                 },
                 "from": {
                     "label": "De"
                     "label": "Método"
                 },
                 "generator/output/electricity": {
-                    "label": "Potência de Saída",
+                    "label": "Potência de saída",
                     "placeholder": "50 MW, 100 MW, 200 MW..."
                 },
                 "generator/source": {
                     "label": "Tipo"
                 },
                 "grape_variety": {
-                    "label": "Variedades de Castas"
+                    "label": "Variedades de castas"
                 },
                 "handicap": {
                     "label": "Handicap",
                     "label": "Tipo"
                 },
                 "historic/civilization": {
-                    "label": "Civilização Histórica"
+                    "label": "Civilização histórica"
                 },
                 "historic/wreck/date_sunk": {
                     "label": "Data de afundamento"
                 },
                 "historic/wreck/visible_at_high_tide": {
-                    "label": "Visível na Maré Cheia"
+                    "label": "Visível na maré cheia"
                 },
                 "historic/wreck/visible_at_low_tide": {
-                    "label": "Visível na Maré Baixa"
+                    "label": "Visível na maré baixa"
                 },
                 "hoops": {
                     "label": "Cestos",
                 "horse_scale": {
                     "label": "Dificuldade de cavalgada",
                     "options": {
-                        "common": "Fácil: Sem problemas ou dificuldades. (padrão)",
-                        "critical": "Limite: Passível apenas para cavaleiros experientes e cavalos. Principais obstáculos. As pontes devem ser examinadas com cuidado.",
-                        "dangerous": "Perigoso: Passível apenas para cavaleiros e cavalos experientes e apenas quando o tempo estiver bom. Desmontar.",
-                        "demanding": "Use com cautela: Passagem irregular, passagens difíceis ocasionais.",
-                        "difficult": "Difícil: Caminho estreito e exposto. Pode conter obstáculos para passar por cima e passagens estreitas",
-                        "impossible": "Intransitável: Caminho ou ponte não passível para cavalos. Suporte insuficiente, obstáculos como escadas. Perigo de vida."
+                        "common": "Fácil: sem problemas ou dificuldades. (padrão)",
+                        "critical": "Limite: transponível apenas para cavaleiros experientes e cavalos. Grandes obstáculos. As pontes devem ser examinadas com cuidado.",
+                        "dangerous": "Perigoso: transponível apenas para cavaleiros e cavalos experientes e apenas quando o tempo estiver bom. Desmontar.",
+                        "demanding": "Use com cautela: passagem irregular, passagens ocasionais difíceis.",
+                        "difficult": "Difícil: caminho estreito e exposto. Pode ter obstáculos para passar por cima e passagens estreitas.",
+                        "impossible": "Intransponível: caminho ou ponte não transponível para cavalos. Suporte insuficiente, obstáculos como escadas. Perigo de vida."
                     },
                     "placeholder": "Difícil, perigoso..."
                 },
                     }
                 },
                 "internet_access/fee": {
-                    "label": "Taxa de acesso à internet"
+                    "label": "Taxa de acesso à Internet"
                 },
                 "internet_access/ssid": {
                     "label": "SSID (Nome da rede)"
                 "junction/ref_oneway": {
                     "label": "Número da saída"
                 },
+                "junction_line": {
+                    "label": "Cruzamento",
+                    "options": {
+                        "roundabout": "Rotunda"
+                    }
+                },
                 "kerb": {
                     "label": "Lancil"
                 },
                     "placeholder": "50, 90, 100, 120..."
                 },
                 "maxspeed/advisory": {
-                    "label": "Limite de Velocidade Recomendado",
+                    "label": "Limite de velocidade recomendado",
                     "placeholder": "40, 50, 60..."
                 },
                 "maxstay": {
                     "label": "Tempo máximo"
                 },
                 "maxweight": {
-                    "label": "Peso Máximo"
+                    "label": "Peso máximo"
                 },
                 "memorial": {
                     "label": "Tipo"
                         "ncn": "Nacional",
                         "rcn": "Regional"
                     },
-                    "placeholder": "Local, Regional, Nacional, Internacional"
+                    "placeholder": "Local, regional, nacional, internacional"
                 },
                 "network_foot": {
                     "label": "Tipo de rede",
                         "nwn": "Nacional",
                         "rwn": "Regional"
                     },
-                    "placeholder": "Local, Regional, Nacional, Internacional"
+                    "placeholder": "Local, regional, nacional, internacional"
                 },
                 "network_horse": {
                     "label": "Tipo de rede",
                         "nhn": "Nacional",
                         "rhn": "Regional"
                     },
-                    "placeholder": "Local, Regional, Nacional, Internacional"
+                    "placeholder": "Local, regional, nacional, internacional"
                 },
                 "network_road": {
                     "label": "Rede"
                     }
                 },
                 "opening_date": {
-                    "label": "Horário de Abertura Esperado"
+                    "label": "Horário de abertura esperado"
                 },
                 "opening_hours": {
                     "label": "Horário de funcionamento"
                         "underground": "Subterrâneo"
                     }
                 },
-                "passenger_information_display": {
-                    "label": "Painel de informação ao passageiro"
-                },
                 "payment_multi": {
                     "label": "Tipos de pagamentos"
                 },
                         "intermediate": "Intermediário (quadrado azul)",
                         "novice": "Novato (instrutivo)"
                     },
-                    "placeholder": "Fácil, Intermediário, Avançado ..."
+                    "placeholder": "Fácil, intermediário, avançado..."
                 },
                 "piste/difficulty_nordic": {
                     "label": "Dificuldade",
                         "intermediate": "Intermediário - secção íngreme",
                         "novice": "Novato - Plano, nenhum esforço necessário"
                     },
-                    "placeholder": "Fácil, Intermediário, Avançado ..."
+                    "placeholder": "Fácil, intermediário, avançado..."
                 },
                 "piste/difficulty_skitour": {
                     "label": "Dificuldade",
                         "intermediate": "Intermediário - ZS: 35-40° de inclinação",
                         "novice": "Novato - L: <30° de inclinação"
                     },
-                    "placeholder": "Easy, Intermediate, Advanced..."
+                    "placeholder": "Fácil, intermediário, avançado..."
                 },
                 "piste/grooming": {
                     "label": "Niveladora de neve",
                         "classic": "Clássico",
                         "classic+skating": "Clássico e patinagem ",
                         "mogul": "Estilo livre",
-                        "scooter": "Scooter / Mota de neve",
+                        "scooter": "Scooter / mota de neve",
                         "skating": "Patinagem "
                     }
                 },
                 "piste/grooming_downhill": {
-                    "label": "Aliciamento",
+                    "label": "Preparação",
                     "options": {
-                        "backcountry": "Hinterlândia - sem aliciamento",
+                        "backcountry": "Backcountry - não preparado",
                         "classic": "Clássico",
                         "mogul": "Mogul"
                     }
                 },
                 "piste/grooming_hike": {
-                    "label": "Aliciamento",
+                    "label": "Preparação",
                     "options": {
-                        "backcountry": "Hinterlândia - Raquete de neve",
+                        "backcountry": "Backcountry - Raquete de neve",
                         "classic": "Classic - Caminhada de inverno"
                     }
                 },
                 "piste/grooming_nordic": {
-                    "label": "Higiene",
+                    "label": "Preparação",
                     "options": {
-                        "backcountry": "Hinterlândia, sem higiene",
+                        "backcountry": "Backcountry, não preparado",
                         "classic": "Clássico",
-                        "classic+skating": "Clássico e Patinagem",
-                        "scooter": "Scooter/Motoneve",
+                        "classic+skating": "Clássico e patinagem",
+                        "scooter": "Scooter / mota de neve",
                         "skating": "Patinagem"
                     }
                 },
                         "connection": "Conexão",
                         "downhill": "Downhill",
                         "hike": "Passeio",
-                        "ice_skate": "Patinagem no Gelo",
+                        "ice_skate": "Patinagem no gelo",
                         "nordic": "Esqui nórdico",
                         "playground": "Parque infantil",
                         "skitour": "Esqui turístico",
                     "label": "Planta"
                 },
                 "plant/output/electricity": {
-                    "label": "Potência de Saída",
+                    "label": "Potência de saída",
                     "placeholder": "500 MW, 1000 MW, 2000 MW..."
                 },
                 "playground/baby": {
-                    "label": "Assentos para Bebés"
+                    "label": "Assentos para bebés"
                 },
                 "playground/max_age": {
-                    "label": "Idade Máxima"
+                    "label": "Idade máxima"
                 },
                 "playground/min_age": {
-                    "label": "Idade Mínima"
+                    "label": "Idade mínima"
                 },
                 "population": {
                     "label": "População"
                     "label": "Tipo"
                 },
                 "power_supply": {
-                    "label": "Fonte de Energia"
+                    "label": "Fonte de energia"
                 },
                 "produce": {
                     "label": "produz"
                     "label": "Direção",
                     "options": {
                         "backward": "Para trás",
-                        "both": "Ambos / Todos",
+                        "both": "Ambos / todos",
                         "forward": "Para a frente"
                     }
                 },
                 "rating": {
-                    "label": "Potência Nominal"
+                    "label": "Potência nominal"
                 },
                 "recycling_accepts": {
                     "label": "Aceita"
                         "centre": "Centro",
                         "container": "Contentor"
                     },
-                    "placeholder": "Contentor, Centro"
+                    "placeholder": "Contentor, centro"
                 },
                 "ref": {
-                    "label": "Código de Referência"
+                    "label": "Código de referência"
                 },
                 "ref/isil": {
                     "label": "Código ISIL"
                 },
                 "ref_aeroway_gate": {
-                    "label": "Número da Porta"
+                    "label": "Número da porta"
                 },
                 "ref_golf_hole": {
                     "label": "Número do buraco",
                     "label": "Número da rota"
                 },
                 "ref_runway": {
-                    "label": "Número da Pista",
+                    "label": "Número da pista",
                     "placeholder": "por ex. 01L/19R"
                 },
                 "ref_stop_position": {
                     "label": "Número da paragem"
                 },
                 "ref_taxiway": {
-                    "label": "Nome da Pista de Circulação",
+                    "label": "Nome da pista de circulação",
                     "placeholder": "por exemplo: A5"
                 },
                 "relation": {
                         "hiking": "T1: Caminhada normal",
                         "mountain_hiking": "T2: Caminhada de montanha"
                     },
-                    "placeholder": "Caminhada de montanha, Caminhada alpina..."
+                    "placeholder": "Caminhada de montanha, caminhada alpina..."
+                },
+                "salt": {
+                    "label": "Sal"
                 },
                 "sanitary_dump_station": {
                     "label": "Estação de despejo de esgotos"
                 "seamark/beacon_lateral/category": {
                     "label": "Categoria",
                     "options": {
-                        "danger_left": "Perigo à Esquerda",
-                        "danger_right": "Perigo à DIreita",
+                        "danger_left": "Perigo à esquerda",
+                        "danger_right": "Perigo à direita",
                         "port": "Porto",
                         "starboard": "Estibordo",
                         "waterway_left": "Linha de água esquerda",
                     "label": "Cor",
                     "options": {
                         "green": "Verde",
-                        "green;red;green": "Verde-Vermelho-Verde",
-                        "green;white;green;white": "Verde-Branco-Verde-Branco",
+                        "green;red;green": "Verde-vermelho-verde",
+                        "green;white;green;white": "Verde-branco-verde-branco",
                         "red": "Vermelho",
-                        "red;green;red": "Vermelho-Verde-Vermelho",
-                        "red;white;red;white": "Vermelho-Branco-Vermelho-Branco",
+                        "red;green;red": "Vermelho-verde-vermelho",
+                        "red;white;red;white": "Vermelho-branco-vermelho-branco",
                         "white": "Branco",
                         "yellow": "Amarelo"
                     }
                     "label": "Vende usado",
                     "options": {
                         "no": "Não",
-                        "only": "",
+                        "only": "Apenas",
                         "yes": "Sim"
                     },
-                    "placeholder": "Sim, Não, Só"
+                    "placeholder": "Sim, não, apenas"
                 },
                 "service": {
                     "label": "Tipo"
                     }
                 },
                 "service_times": {
-                    "label": "Horário de Abertura"
+                    "label": "Horário de abertura"
                 },
                 "shelter": {
                     "label": "Abrigo"
                         "excellent": "Excelente: skates, patins em linha, etc.",
                         "good": "Muito boa: bicicletas de corrida, carros desportivos etc.",
                         "horrible": "Muito má: bicicletas de montanha, carros todo-o-terreno, etc.",
-                        "impassable": "Intransitável / Veículos sem rodas",
+                        "impassable": "Intransitável para veículos",
                         "intermediate": "Boa: bicicletas de cidade, cadeira de rodas, scooters, etc.",
                         "very_bad": "Má: carroças, SUVs, etc.",
                         "very_horrible": "Péssima: tratores, moto-quatros, etc."
                     },
-                    "placeholder": "Excelente, Boa, Má..."
+                    "placeholder": "Excelente: rodas finas, rodas, fora-de-estrada..."
                 },
                 "social_facility": {
                     "label": "Tipo"
                 },
                 "social_facility_for": {
-                    "label": "Público-Alvo"
+                    "label": "Público-alvo"
                 },
                 "source": {
                     "label": "Fontes"
                     "label": "Estrelas"
                 },
                 "start_date": {
-                    "label": "Data de Início"
+                    "label": "Data de início"
                 },
                 "step_count": {
-                    "label": "Número de Degraus"
+                    "label": "Número de degraus"
                 },
                 "stop": {
                     "label": "Tipo de stop",
                     "label": "Tipo",
                     "options": {
                         "circuit_breaker": "Disjuntor",
-                        "disconnector": "Chave Seccionadora",
-                        "earthing": "Ligação à Terra",
+                        "disconnector": "Chave seccionadora / faca",
+                        "earthing": "Ligação à terra",
                         "mechanical": "Mecânico"
                     }
                 },
                     "label": "Pavimento tátil para invisuais"
                 },
                 "takeaway": {
-                    "label": "Levar para fora (Take Away)",
+                    "label": "Levar para fora (take away)",
                     "options": {
                         "no": "Não",
-                        "only": "Apenas levar para fora (Take Away)",
+                        "only": "Apenas levar para fora (take away)",
                         "yes": "Sim"
                     },
-                    "placeholder": "Sim, Não, Apenas Take Away..."
+                    "placeholder": "Sim, não, apenas take away..."
+                },
+                "tidal": {
+                    "label": "Maré"
                 },
                 "to": {
                     "label": "Para"
                         "bucket": "Balde",
                         "chemical": "Químico ",
                         "flush": "Descarga de água",
-                        "pitlatrine": "Fosso / Latrina"
+                        "pitlatrine": "Fosso / latrina"
                     }
                 },
                 "toll": {
                         "grade2": "2 - Sobretudo sólida: cascalho ou pedras misturadas com algum material macio",
                         "grade3": "3 - Intermédia, mistura de materiais sólidos e macios",
                         "grade4": "4 - Sobretudo macia: terra, erva ou areia misturadas com algum material sólido",
-                        "grade5": "5 - Macia: Terra, erva ou areia"
+                        "grade5": "5 - Macia: terra, erva ou areia"
                     },
                     "placeholder": "Sólido, intermédio, macio..."
                 },
                     "label": "Direção",
                     "options": {
                         "backward": "Para trás",
-                        "both": "Ambos / Tudo",
+                        "both": "Ambos / tudo",
                         "forward": "Para a frente"
                     }
                 },
                     "label": "Direção",
                     "options": {
                         "backward": "Para trás",
-                        "both": "Ambos / Todos",
+                        "both": "Ambos / todos",
                         "forward": "Para a frente"
                     }
                 },
                 "transformer": {
                     "label": "Tipo",
                     "options": {
-                        "auto": "Autotransformador",
+                        "auto": "Auto-transformador",
                         "auxiliary": "Auxiliar",
                         "converter": "Conversor",
                         "distribution": "Distribuição",
                         "generator": "Gerador",
-                        "phase_angle_regulator": "Regulador de Ã\82ngulo de Fase",
+                        "phase_angle_regulator": "Regulador de Ã¢ngulo de fase",
                         "traction": "Tração",
                         "yes": "Desconhecido"
                     }
                     "placeholder": "Padrão"
                 },
                 "usage_rail": {
-                    "label": "Tipo de Utilização",
+                    "label": "Tipo de utilização",
                     "options": {
                         "branch": "Ramo",
                         "industrial": "Industrial",
                     }
                 },
                 "vending": {
-                    "label": "Tipos de Produtos"
+                    "label": "Tipos de produtos"
                 },
                 "visibility": {
                     "label": "Visibilidade",
                     }
                 },
                 "volcano/status": {
-                    "label": "Estado do Vulcão",
+                    "label": "Estado do vulcão",
                     "options": {
                         "active": "Ativo",
                         "dormant": "Adormecido",
                     }
                 },
                 "volcano/type": {
-                    "label": "Tipo de Vulcão",
+                    "label": "Tipo de vulcão",
                     "options": {
                         "scoria": "Escória",
                         "shield": "Vulcão-escudo",
                     "label": "Voltagem"
                 },
                 "voltage/primary": {
-                    "label": "Voltagem Primária"
+                    "label": "Voltagem primária"
                 },
                 "voltage/secondary": {
-                    "label": "Voltagem Secundária"
+                    "label": "Voltagem secundária"
                 },
                 "voltage/tertiary": {
-                    "label": "Voltagem Terciária"
+                    "label": "Voltagem terciária"
                 },
                 "voltage_electrified": {
                     "label": "Voltagem"
                     "label": "Tipo"
                 },
                 "water_point": {
-                    "label": "Ponto de Ã\81gua (para abastecer Caravanas / Barcos)"
+                    "label": "Ponto de Ã¡gua (para abastecer caravanas / barcos)"
                 },
                 "water_source": {
                     "label": "Fonte de água"
                 },
                 "website": {
                     "label": "Sítio oficial",
-                    "placeholder": "http://www.exemplo.org/"
+                    "placeholder": "https://exemplo.com"
                 },
                 "wetland": {
                     "label": "Tipo"
                 },
                 "wheelchair": {
-                    "label": "Acesso cadeira rodas"
+                    "label": "Acesso cadeira rodas"
                 },
                 "wholesale": {
                     "label": "Grossista"
                     "placeholder": "1, 2, 3..."
                 },
                 "windings/configuration": {
-                    "label": "Configuração do Enrolamento",
+                    "label": "Configuração do enrolamento",
                     "options": {
                         "delta": "Delta",
                         "leblanc": "Leblanc",
                         "open": "Aberto",
-                        "open-delta": "Delta Aberto",
+                        "open-delta": "Delta aberto",
                         "scott": "Scott",
                         "star": "Estrela / Y",
-                        "zigzag": "Zigue Zague"
+                        "zigzag": "Ziguezague"
                     }
                 }
             },
             "presets": {
                 "address": {
                     "name": "Morada",
-                    "terms": "Endereço, morada"
+                    "terms": "endereço, morada, endereçamento, código postal, localização"
                 },
                 "advertising/billboard": {
                     "name": "Outdoor",
                     "terms": "Gondola"
                 },
                 "aerialway/goods": {
-                    "name": "Teleférico de Mercadorias",
+                    "name": "Teleférico de mercadorias",
                     "terms": "teleférico de mercadorias"
                 },
                 "aerialway/magic_carpet": {
-                    "name": "Corredor de subida para esquis",
-                    "terms": "Magic Carpet Lift"
+                    "name": "Passadeira rolante",
+                    "terms": "magic carpet lift, carpete mágica, tapete mágico, passadeira rolante"
                 },
                 "aerialway/mixed_lift": {
-                    "name": "Teleférico Híbrido",
+                    "name": "Teleférico híbrido",
                     "terms": "teleférico híbrido"
                 },
                 "aerialway/platter": {
                     "terms": "Aerialway Pylon, pilar"
                 },
                 "aerialway/rope_tow": {
-                    "name": "Ascenção com Corda de Reboque ",
+                    "name": "Ascensão com corda de reboque ",
                     "terms": "Rope Tow Lift"
                 },
                 "aerialway/station": {
                     "name": "Via aérea"
                 },
                 "aeroway/aerodrome": {
-                    "name": "Aeroporto / Aeródromo",
+                    "name": "Aeroporto / aeródromo",
                     "terms": "Avião, aeródromo"
                 },
                 "aeroway/apron": {
                     "terms": "Hangar, Abrigo de Aviões"
                 },
                 "aeroway/helipad": {
-                    "name": "Heliporto / Heliponto",
+                    "name": "Heliporto / heliponto",
                     "terms": "Helicóptero"
                 },
                 "aeroway/runway": {
                     "terms": "Rolar, Faixa de Rolagem, Taxiway"
                 },
                 "aeroway/terminal": {
-                    "name": "Terminal de Aeroporto",
+                    "name": "Terminal de aeroporto",
                     "terms": "terminal, área de passageiros, terminal aeroportuário, terminal de passageiros, aerogare de passageiros, aerogare"
                 },
                 "allotments/plot": {
                     "name": "Infraestrutura"
                 },
                 "amenity/animal_boarding": {
-                    "name": "Hotel para Animais",
+                    "name": "Hotel para animais",
                     "terms": "hospedagem, cão, cães, gato, gatos, hotel para animais, animais de estimação"
                 },
                 "amenity/animal_breeding": {
                     "name": "Instalação para reprodução de animais ",
-                    "terms": "Animal Breeding, criador de animais, criador, criação, reprodução"
+                    "terms": "animal breeding, criador de animais, criador, criação, reprodução, reproduzir, criar, touro, toiro, gato, gatos, cão, cães, cavalo, cavalos, cachorro, cachorrinho, gatinho, animal doméstico, animais domésticos"
                 },
                 "amenity/animal_shelter": {
-                    "name": "Abrigo para Animais (canil, gatil...)",
+                    "name": "Abrigo para animais (canil, gatil...)",
                     "terms": "canil, gatil, abandonado, abandonados, abrigo, abandono, animais, animal"
                 },
                 "amenity/arts_centre": {
                     "name": "Centro artístico",
-                    "terms": "Galeria, atelier, Centro de Artes"
+                    "terms": "galeria, atelier, centro de artes, centro artístico, artes, arte"
                 },
                 "amenity/atm": {
-                    "name": "Terminal Bancário",
+                    "name": "Terminal bancário",
                     "terms": "multibanco, caixa multibanco, caixa de multibanco, MB, caixa de MB, caixa eletrônico, caixa automático, multicaixa, terminal bancário, terminal, ATM"
                 },
                 "amenity/bank": {
                 },
                 "amenity/bar": {
                     "name": "Bar",
-                    "terms": "Bar, Bares, Bebidas, Alcool"
+                    "terms": "bar, bares, drinqueria"
                 },
                 "amenity/bbq": {
                     "name": "Churrasco",
                     "terms": "Aluguer de Bicicletas, Área de Aluguer de Bicicletas, Zona de Aluguer de Bicicletas"
                 },
                 "amenity/bicycle_repair_station": {
-                    "name": "Ponto de reparação de bicicletas self-service",
-                    "terms": "Bicycle Repair Tool Station"
+                    "name": "Ponto de reparação de bicicletas auto-serviço",
+                    "terms": "bicycle repair tool station, self-service, auto-serviço, reparar, reparação de bicicletas, bicicleta"
                 },
                 "amenity/biergarten": {
                     "name": "Jardim da cerveja (biergarten)",
                 },
                 "amenity/boat_rental": {
                     "name": "Aluguer de barcos",
-                    "terms": "Boat Rental"
+                    "terms": "boat rental, aluguer de barcos, aluguer, locação, barco, barcos, aluga, aluga-se"
                 },
                 "amenity/bureau_de_change": {
                     "name": "Agência de câmbio",
-                    "terms": "Currency Exchange, Troca de Dinheiro, Câmbio"
+                    "terms": "currency exchange, troca de dinheiro, câmbio, cambiar, cambista, dinheiro"
                 },
                 "amenity/bus_station": {
-                    "name": "Estação autocarro / Terminal"
+                    "name": "Estação / terminal de autocarros"
                 },
                 "amenity/cafe": {
                     "name": "Café",
-                    "terms": "Chá, Loja de Café, Cafetaria"
+                    "terms": "chá, café, cafetaria, cafeteria"
                 },
                 "amenity/car_pooling": {
                     "name": "Boleia partilhada",
                 },
                 "amenity/car_wash": {
                     "name": "Lavagem de veículos",
-                    "terms": "Lavagem, Lavagem Automática, Mangueira, Limpeza"
+                    "terms": "lavagem, lavagem automática, mangueira, limpeza, lavar"
                 },
                 "amenity/casino": {
                     "name": "Casino",
-                    "terms": "Casino, Jogo"
+                    "terms": "casino, cassino, cazino, jogo, jogos, roleta, póquer, jogar"
                 },
                 "amenity/charging_station": {
                     "name": "Posto de carregamento para veículos elétricos",
-                    "terms": "Charging Station, Estação de recarga, Energia, Bateria"
+                    "terms": "charging station, estação de recarga, energia, bateria, recarregar, recaregar, recarregagem"
                 },
                 "amenity/childcare": {
-                    "name": "Berçário / Creche",
+                    "name": "Berçário / creche",
                     "terms": "Nursery/Childcare, cuidados Infantis"
                 },
                 "amenity/cinema": {
                     "name": "Cinema",
-                    "terms": "Filme, filmes"
+                    "terms": "filme, filmes, cinema"
                 },
                 "amenity/clinic": {
-                    "name": "Clínica  / Unidade de Saúde / Posto Médico",
+                    "name": "Clínica  / unidade de saúde / posto médico",
                     "terms": "Clinic, Clínica, Centro de Saúde, Unidade de Saúde, Posto Médico, Posto de Saúde, Unidade de Saúde Familiar, USF, Agrupamento de Centros de Saúde, ASF, Unidade Local de Saúde, Unidade Básica de Saúde, UBS"
                 },
                 "amenity/clinic/abortion": {
-                    "name": "Clínica de Aborto",
+                    "name": "Clínica de interrupção da gravidez",
                     "terms": "aborto, abortar, interrupção da gravidez, clínica"
                 },
                 "amenity/clinic/fertility": {
-                    "name": "Clínica de Fertilidade",
+                    "name": "Clínica de fertilização",
                     "terms": "fertilidade, infertilidade, infértil, inseminação, inseminar, inceminação, inceminar"
                 },
                 "amenity/clock": {
                     "name": "Relógio",
-                    "terms": "Clock"
+                    "terms": "clock, relógio, horas, tempo"
+                },
+                "amenity/clock/sundial": {
+                    "name": "Relógio de sol",
+                    "terms": "relógio de sol, relógio, sol, solar, relógio solar, relógios solares"
                 },
                 "amenity/college": {
                     "name": "Colégio",
                     "terms": "Community Center, Espaço Social"
                 },
                 "amenity/compressed_air": {
-                    "name": "Máquina de ar Comprimido",
+                    "name": "Máquina de ar comprimido",
                     "terms": "Compressed Air, Pneumática, Pneus, Encher"
                 },
                 "amenity/courthouse": {
                     "terms": "Casa da Justiça, Justiça"
                 },
                 "amenity/coworking_space": {
-                    "name": "Espaço de Trabalho Compartilhado"
+                    "name": "Espaço de trabalho compartilhado"
                 },
                 "amenity/crematorium": {
                     "name": "Crematório",
-                    "terms": "Crematorium"
+                    "terms": "crematorium, cremação, cremar, crematório, cremado"
                 },
                 "amenity/dentist": {
                     "name": "Dentista",
                 },
                 "amenity/drinking_water": {
                     "name": "Água potável",
-                    "terms": "Fonte de Água, Água Potável, Bebedouro"
+                    "terms": "fonte de água, água potável, água, bebedouro, bebedoiro, fontanário, fontenário, beber"
                 },
                 "amenity/driving_school": {
-                    "name": "Escola de Condução",
-                    "terms": "Escolas de Condução, Autoescola, Centro de Formação de Condutores"
+                    "name": "Escola de condução",
+                    "terms": "escolas de condução, autoescola, centro de formação de condutores, tirar a carta, carta de condução, escola, condução"
                 },
                 "amenity/embassy": {
                     "name": "Embaixada",
                 },
                 "amenity/fast_food": {
                     "name": "Comida rápida",
-                    "terms": "Comida Instantânea, Comida de plástico, Fast Food"
+                    "terms": "comida instantânea, comida de plástico, fast food, fast-food, lanchonete, lancheria, snack-bar, snackbar, snack bar, snak bar, snak-bar, restaurante de fast food, restaurante de comida rápida, restaurante de serviço rápido, restaurante, sanduíche, sanduixe, sanduiche, sande, sandes, casa de sandes, casa das sandes, McDonald's, mac donalds, macdonalds, mc donalds, mcdonalds, Burger King, Subway, rulote, rolote, farturas"
                 },
                 "amenity/fast_food/burger": {
                     "name": "Hamburgueria",
-                    "terms": "fast food, burguer, hamburguer"
+                    "terms": "fast food, burguer, hamburguer, amburguer, amburger, hamburger"
                 },
                 "amenity/fast_food/chicken": {
                     "name": "Comida rápida de frango",
                     "name": "Kebab",
                     "terms": "fast food, kebab"
                 },
+                "amenity/fast_food/mexican": {
+                    "name": "Comida rápida mexicana",
+                    "terms": "mexican fast food, mexican, restaurante mexicano, cozinha mexicana, comida mexicana, mexicano, mexicana, mechicano, mechicana, fast food, taco, burrito, enchilada, fajita, nacho, tortillas, tortilha, salsa, tamales, quesa"
+                },
                 "amenity/fast_food/pizza": {
                     "name": "Pizzaria ",
                     "terms": "fast food, pizza, piza"
                 },
                 "amenity/fast_food/sandwich": {
                     "name": "Sanduicheria",
-                    "terms": "sandwich, fast food, sanduiche"
+                    "terms": "sandwich, fast food, sanduiche, sande, sandes, sanduixe, sanduíxe, sanduíche"
                 },
                 "amenity/ferry_terminal": {
-                    "name": "Estação de ferry / Terminal"
+                    "name": "Estação / terminal de ferry"
                 },
                 "amenity/fire_station": {
                     "name": "Quartel de bombeiros",
                 },
                 "amenity/ice_cream": {
                     "name": "Geladaria",
-                    "terms": "Ice Cream Shop, Gelataria, Sorveteira"
+                    "terms": "ice cream shop, geladaria, gelataria, sorveteira, sorveteria, loja de sorvete, sorvete, gelado, gelados"
                 },
                 "amenity/internet_cafe": {
-                    "name": "Internet Cafe",
-                    "terms": "Cyber café"
+                    "name": "Cibercafé",
+                    "terms": "cyber café, cyber cafe, cyber-café, cyber-cafe, ciber café, ciber cafe, ciber-café, ciber-cafe, cybercafe, cibercafe, cibercafé, cybercafé, internet café, internet cafe, internet, acesso à internet, wi-fi"
                 },
                 "amenity/kindergarten": {
-                    "name": "Jardim Infantil / Infantário",
-                    "terms": "Preschool/Kindergarten Grounds, Pré-Escola, Pré Escola"
+                    "name": "Jardim infantil / infantário",
+                    "terms": "preschool, kindergarten, grounds, pré-escola, pré escola, creche, jardim de infância, jardim-de-infância, jardim infantil, pré-escola, pré-escolar, infantário"
                 },
                 "amenity/language_school": {
                     "name": "Escola de línguas",
                     "terms": "Motel"
                 },
                 "amenity/marketplace": {
-                    "name": "Mercado / Feira",
+                    "name": "Mercado / feira",
                     "terms": "Bazar, Minimercado"
                 },
                 "amenity/monastery": {
-                    "name": "Jardins do mosteiro",
-                    "terms": "Jardins do mosteiro, mosteiro"
+                    "name": "Mosteiro",
+                    "terms": "mosteiro, monastério, monge, monges, freira, freiras, congregação"
                 },
                 "amenity/money_transfer": {
                     "name": "Estação de transferência de dinheiro",
                     "terms": "Garagem de estacionamento de vários níveis, silo"
                 },
                 "amenity/parking_entrance": {
-                    "name": "Entrada / Saída de estacionamento",
-                    "terms": "Entrada para estacionamento em garagem/Saída, Entrada, Saída, Estacionamento, Estacionar"
+                    "name": "Entrada / saída de estacionamento",
+                    "terms": "entrada para estacionamento, entrada, saída, estacionamento, estacionar, subterrâneo, parque de estacionamento"
                 },
                 "amenity/parking_space": {
                     "name": "Lugar de estacionamento",
                     "name": "Farmácia",
                     "terms": "farmácia, farmacêutico, medicamento"
                 },
+                "amenity/photo_booth": {
+                    "name": "Cabine de fotografia instantânea",
+                    "terms": "Cabine de fotografia instantânea"
+                },
                 "amenity/place_of_worship": {
                     "name": "Local de oração",
                     "terms": "Abadia, Basílica, Casa de Adoração, Casa de Deus, Catedral, Capela, Capelinha, Centro Espiritual, Santuário, Templo"
                     "terms": "Estupa, Vihara, Mosteiro, Templo, Pagode, Zendo, Dojo, Budista, Budistas, Budismo"
                 },
                 "amenity/place_of_worship/christian": {
-                    "name": "Igreja Cristã",
+                    "name": "Igreja cristã",
                     "terms": "cristã, cristão, cristianismo"
                 },
                 "amenity/place_of_worship/hindu": {
-                    "name": "Templo Hindu",
+                    "name": "Templo hindu",
                     "terms": "templo, hindu, hinduísmo, hinduismo, hinduísta, hinduista"
                 },
                 "amenity/place_of_worship/jewish": {
-                    "name": "Sinagoga Judaica",
+                    "name": "Sinagoga judaica",
                     "terms": "judaica, judaico, judaísmo"
                 },
                 "amenity/place_of_worship/muslim": {
-                    "name": "Mesquita Islâmica",
+                    "name": "Mesquita islâmica",
                     "terms": "islão, islamismo, islã"
                 },
                 "amenity/place_of_worship/shinto": {
                     "terms": "Templo xintoísta, santuário xintoísta, xintoísta, xintoista, xintoísmo, xintoismo, templo"
                 },
                 "amenity/place_of_worship/sikh": {
-                    "name": "Templo Sikh",
+                    "name": "Templo sikh",
                     "terms": "gurdwara, sikhismo, siquismo , sikh, templo"
                 },
                 "amenity/place_of_worship/taoist": {
-                    "name": "Templo Taoista",
+                    "name": "Templo taoista",
                     "terms": "taoismo, tauismo, daoismo, templo"
                 },
                 "amenity/planetarium": {
                 },
                 "amenity/prison": {
                     "name": "Prisão",
-                    "terms": "Prison Grounds"
+                    "terms": "prison, prisão, prisional, presidiário, estabelecimento prisional"
                 },
                 "amenity/pub": {
-                    "name": "Taberna / Tasca",
-                    "terms": "Pub, Taverna, Petiscos, Petisqueira,  Locanda, Tasco, Tasca"
+                    "name": "Taberna / tasca",
+                    "terms": "pub, taverna, taberna, petiscos, petisqueira, locanda, tasco, tasca, tasquinha, boteco, buteco, botequim, chopperia, choperia"
                 },
                 "amenity/public_bath": {
-                    "name": "Banho Público",
+                    "name": "Banho público",
                     "terms": "banhos públicos"
                 },
                 "amenity/public_bookcase": {
                     "name": "Reciclagem"
                 },
                 "amenity/recycling_centre": {
-                    "name": "Centro de Reciclagem",
-                    "terms": "Centro de Reciclagem, Ecocentro, Eco-centro, Eco centro"
+                    "name": "Centro de reciclagem",
+                    "terms": "centro de reciclagem, ecocentro, eco-centro, eco centro, reciclagem, reciclar, recicla, centro"
                 },
                 "amenity/recycling_container": {
                     "name": "Contentor de reciclagem",
                     "terms": "Ecoponto, ilhas ecológicas, contentor, reciclar, reciclagem, papelão, pilhão, oleão, vidrão, embalão"
                 },
                 "amenity/register_office": {
-                    "name": "Conservatória do Registo Civil"
+                    "name": "Conservatória do registo civil"
                 },
                 "amenity/restaurant": {
                     "name": "Restaurante",
-                    "terms": "Bar, Cafetaria, Café, Cantina, Almoço, Jantar, Cozinha, Restaurante, Pizzaria, Culinária, Gastronomia, Restauração"
+                    "terms": "cantina, almoço, jantar, cozinha, restaurante, culinária, gastronomia, restauração"
                 },
                 "amenity/restaurant/american": {
                     "name": "Restaurante americano",
-                    "terms": "Restaurante de comida americana"
+                    "terms": "restaurante de comida americana, restaurante, comida americana, cozinha americana, restaurante americano, americano, americana"
                 },
                 "amenity/restaurant/asian": {
                     "name": "Restaurante asiático",
-                    "terms": "Restaurante de comida asiática"
+                    "terms": "restaurante de comida asiática, restaurante, comida asiática, cozinha asiática, restaurante asiático, asiático, asiática, aziática, aziático"
                 },
                 "amenity/restaurant/chinese": {
                     "name": "Restaurante chinês",
-                    "terms": "Restaurante de comida chinesa"
+                    "terms": "restaurante de comida chinesa, comida chinesa, comida chineza, chinesa, chineza, xinesa. xineza, restaurante xinês, restaurante chinês"
                 },
                 "amenity/restaurant/french": {
                     "name": "Restaurante francês",
-                    "terms": "Restaurante de comida francesa"
+                    "terms": "restaurante de comida francesa, restaurante, comida francesa, francesa, francês, restaurante francês, cozinha francesa, francês"
                 },
                 "amenity/restaurant/german": {
                     "name": "Restaurante alemão",
-                    "terms": "Restaurante de comida alemã"
+                    "terms": "restaurante de comida alemã, restaurante, comida alemã, alemã, restaurante alemão, cozinha alemã, aleão"
                 },
                 "amenity/restaurant/greek": {
                     "name": "Restaurante grego",
-                    "terms": "Restaurante de comida grega"
+                    "terms": "restaurante de comida grega, restaurante, comida grega, grega, restaurante grego, cozinha grega, grego"
                 },
                 "amenity/restaurant/indian": {
                     "name": "Restaurante indiano",
-                    "terms": "Restaurante de comida indiana"
+                    "terms": "restaurante de comida indiana, restaurante, comida indiana, restaurante indiano, indiano, indiana, cozinha indiana"
                 },
                 "amenity/restaurant/italian": {
                     "name": "Restaurante italiano",
-                    "terms": "Restaurante de comida italiana"
+                    "terms": "restaurante de comida italiana, restaurante, restaurante italiano, cozinha italiana, italiana, italiano"
                 },
                 "amenity/restaurant/japanese": {
                     "name": "Restaurante japonês",
-                    "terms": "Restaurante de comida japonesa"
+                    "terms": "restaurante de comida japonesa, restaurante japonês, cozinha japonesa, comida japonesa, japonês, japonesa, japoneza, japonez"
                 },
                 "amenity/restaurant/mexican": {
                     "name": "Restaurante mexicano",
-                    "terms": "Restaurante de comida mexicana"
+                    "terms": "Restaurante de comida mexicana, comida mexicana, cozinha mexicana, restaurante mexicano, mexicano, mexicana, mechicano, mechicana"
                 },
                 "amenity/restaurant/noodle": {
                     "name": "Restaurante de noodle",
                     "terms": "pizza, piza, pizzas, pizas"
                 },
                 "amenity/restaurant/seafood": {
-                    "name": "Restaurante de Marisco",
+                    "name": "Restaurante de marisco",
                     "terms": "marisqueira, marisco, peixe, restaurante"
                 },
                 "amenity/restaurant/steakhouse": {
                 },
                 "amenity/restaurant/thai": {
                     "name": "Restaurante tailandês",
-                    "terms": "Restaurante de comida tailandesa"
+                    "terms": "Restaurante de comida tailandesa, comida tailandesa, restaurante tailandês, cozinha tailandesa, tailandês, tailandesa, tailandez, tailandeza"
                 },
                 "amenity/restaurant/turkish": {
                     "name": "Restaurante turco",
-                    "terms": "Restaurante de comida turca"
+                    "terms": "Restaurante de comida turca, comida turca, restaurante turco, cozinha turca, turco, turca"
                 },
                 "amenity/restaurant/vietnamese": {
                     "name": "Restaurante vietnamita",
-                    "terms": "Restaurante de comida vietnamita"
+                    "terms": "Restaurante de comida vietnamita, comida vietnamita, restaurante vietnamita, cozinha vietnamita, vietname, vietnamita"
                 },
                 "amenity/sanitary_dump_station": {
                     "name": "Escoamento sanitário de autocaravana",
                     "terms": "Shower, chuveiro público, shuveiro, xuveiro, chubeiro, xubeiro, shubeiro, banho"
                 },
                 "amenity/smoking_area": {
-                    "name": "Área para Fumadores",
+                    "name": "Área para fumadores",
                     "terms": "fumadores, fumar"
                 },
                 "amenity/social_facility": {
                     "terms": "Homeless Shelter, Casa para os Sem-Abrigo, Casa Pública, Sem-Abrigo"
                 },
                 "amenity/social_facility/nursing_home": {
-                    "name": "Lar de Idosos (com cuidado médico)",
+                    "name": "Lar de idosos (com cuidado médico)",
                     "terms": "lar de terceira idade, terceira idade, lar"
                 },
                 "amenity/studio": {
                     "terms": "university grounds, universidade, faculdade, escola superior, centro universitário, politécnico, instituto politécnico, instituto, instituto universitário, colégio, academia, escola"
                 },
                 "amenity/vehicle_inspection": {
-                    "name": "Centro de Inspeção de Veículos",
-                    "terms": "inspeção, veículos, CIV, ITV"
+                    "name": "Centro de inspeção de veículos",
+                    "terms": "inspeção, veículos, CIV, ITV, IPO, inspecionar, verificar, verificação"
                 },
                 "amenity/vending_machine": {
-                    "name": "Máquina de Venda Automática",
+                    "name": "Máquina de venda automática",
                     "terms": "máquina, tabaco, bebidas, bilhetes, venda automática"
                 },
                 "amenity/vending_machine/cigarettes": {
                 },
                 "amenity/vending_machine/coffee": {
                     "name": "Máquina de venda de café",
-                    "terms": "Máquina de café automática"
+                    "terms": "máquina de café automática, café"
                 },
                 "amenity/vending_machine/condoms": {
                     "name": "Dispensador de preservativos ",
                 },
                 "amenity/vending_machine/excrement_bags": {
                     "name": "Dispensador de sacos para dejetos",
-                    "terms": "Excrement Bag Vending Machine"
+                    "terms": "excrement, excrementos, cocó, dejetos, saco, sacos"
                 },
                 "amenity/vending_machine/feminine_hygiene": {
-                    "name": "Máquina de Venda de Produtos de Higiene Feminina",
+                    "name": "Máquina de venda de produtos de higiene feminina",
                     "terms": "Higiene Feminina"
                 },
                 "amenity/vending_machine/food": {
                     "name": "Máquina de venda automática de jornais"
                 },
                 "amenity/vending_machine/newspapers": {
-                    "name": "Máquina de venda automática de jornais ",
-                    "terms": "jornais, revistas, máquina"
+                    "name": "Máquina de venda automática de jornais",
+                    "terms": "jornais, jornal, revista, revistas, máquina de venda"
                 },
                 "amenity/vending_machine/parcel_pickup": {
                     "name": "Armários automáticos de coleta",
                 },
                 "amenity/vending_machine/stamps": {
                     "name": "Máquina de venda automática de fundos",
-                    "terms": "Máquina de venda automática de selos"
+                    "terms": "máquina de venda automática de selos, selo, selos, correios, franquia"
                 },
                 "amenity/vending_machine/sweets": {
                     "name": "Máquina de snacks",
                     "terms": "rv drinking water, água, caravana, autocaravana, trailer, motocasa, caravana, auto-caravana, caravanismo, rulote, rolote, motorhome"
                 },
                 "amenity/watering_place": {
-                    "name": "Bebedouro para Animais ",
+                    "name": "Bebedouro para animais ",
                     "terms": "água, bebedouro, bebedoiro, pia, tanque, animais, beber"
                 },
                 "area": {
                     "terms": "Espaço, Extensão, Zona"
                 },
                 "area/highway": {
-                    "name": "Superfície da Estrada",
+                    "name": "Superfície da estrada",
                     "terms": "tipo de piso, piso, superfície estrada, tipo superfície,"
                 },
                 "attraction": {
                     "name": "Atração turística"
                 },
                 "attraction/amusement_ride": {
-                    "name": "Atração de Parque de Diversões",
+                    "name": "Atração de parque de diversões",
                     "terms": "atração, parque de diversões, montanha russa, camicase, ranger, kamikase, navio pirata, carrossel, carrosel, carrocel, carroceís, carroséis, carrosséis, carrinhos de choque, cestas"
                 },
                 "attraction/animal": {
                     "terms": "animal, animais, zoológico, leão, tigre, urso"
                 },
                 "attraction/big_wheel": {
-                    "name": "Roda Gigante",
+                    "name": "Roda gigante",
                     "terms": "Ferris wheel, Big Wheel, roda-gigante, roda panorâmica, roda"
                 },
                 "attraction/bumper_car": {
-                    "name": "Carrinhos de Choque",
-                    "terms": "carro de choque, carrinhos de batida, carrinho de choque"
+                    "name": "Carrinhos de choque",
+                    "terms": "carro de choque, carros de choque, carrinhos de batida, carrinho de choque, carrinhos de choque, carro de xoque, carros de xoque, carrinho de xoque, carrinhos de xoque"
                 },
                 "attraction/bungee_jumping": {
                     "name": "Bungee Jumping",
                     "terms": "Carousel, carrosel, carosel, carossel, carroséis, carrosséis, carrocéis,  trivoli, maxambomba"
                 },
                 "attraction/dark_ride": {
-                    "name": "Comboio Fantasma",
+                    "name": "Comboio fantasma",
                     "terms": "Dark Ride, escuro, susto, sustos, fantasmagórico"
                 },
                 "attraction/drop_tower": {
-                    "name": "Torre de Queda Livre",
+                    "name": "Torre de queda livre",
                     "terms": "Drop Towe, torre de caída, cair, caída, base jump,"
                 },
                 "attraction/maze": {
                     "terms": "Labirinto"
                 },
                 "attraction/pirate_ship": {
-                    "name": "Barco Pirata",
+                    "name": "Barco pirata",
                     "terms": "Pirate Ship, barco, pirata, corsário"
                 },
                 "attraction/river_rafting": {
                     "terms": "canoagem águas bravas, águas bravas,"
                 },
                 "attraction/roller_coaster": {
-                    "name": "Montanha Russa ",
+                    "name": "Montanha russa ",
                     "terms": "montanhas-russas, montanhas russas, montanha russa"
                 },
                 "attraction/summer_toboggan": {
                     "terms": "Escorrega de verão"
                 },
                 "attraction/train": {
-                    "name": "Comboio Turístico",
-                    "terms": "locomotiva turística, comboios turísticos, turístico, comboio"
+                    "name": "Comboio turístico",
+                    "terms": "locomotiva turística, comboios turísticos, turístico, comboio, mini-comboio mini comboio, mini-comboio"
                 },
                 "attraction/water_slide": {
-                    "name": "Escorrega de Ã\81gua",
+                    "name": "Escorrega de Ã¡gua",
                     "terms": "tobogan, toboágua, escorregador, escorrega"
                 },
                 "barrier": {
                     "terms": "Bicicleta"
                 },
                 "barrier/ditch": {
-                    "name": "Fosso / Vala / Trincheira (seca)",
+                    "name": "Fosso / vala / trincheira (seca)",
                     "terms": "Trench"
                 },
                 "barrier/entrance": {
                     "terms": "Balaustrada"
                 },
                 "barrier/gate": {
-                    "name": "Cancela / Portão",
+                    "name": "Cancela / portão",
                     "terms": "Grade"
                 },
                 "barrier/guard_rail": {
                     "terms": "meio-fio, guia, lancil"
                 },
                 "barrier/kerb/flush": {
-                    "name": "Lancil rampa",
+                    "name": "Lancil de rampa",
                     "terms": "abaixamento da calçada, calçada abaixada, rebordo abaixado, rampa, plano inclinado, carrinho, rebaixamento, afloramento"
                 },
                 "barrier/kerb/lowered": {
                 },
                 "building": {
                     "name": "Edifício",
-                    "terms": "Edifício, Prédio"
+                    "terms": "edifício, prédio, moradia, residência, casa, habitação, edificação, edificado, arranha céu, arranha-céu"
                 },
                 "building/apartments": {
                     "name": "Edifício de apartamentos",
-                    "terms": "Edifício residencial, apartamento"
+                    "terms": "edifício, apartamento, prédio, moradia, residência, casa, habitação, habitações, edificação, edificado, arranha céu, arranha-céu"
                 },
                 "building/barn": {
                     "name": "Celeiro",
                 },
                 "building/bungalow": {
                     "name": "Bangalô",
-                    "terms": "Bangaló"
+                    "terms": "bungalow, bangaló, bangalô, bangalou, bangalu"
                 },
                 "building/bunker": {
                     "name": "Búnquer"
                 },
                 "building/cathedral": {
                     "name": "Edifício de catedral",
-                    "terms": "Cathedral Building"
+                    "terms": "cathedral, catedral, sé, templo, cristão, concatedral, co-catedral"
                 },
                 "building/chapel": {
                     "name": "Edifício de capela",
-                    "terms": "Chapel Building"
+                    "terms": "chapel, capela, capelinha, ermida"
                 },
                 "building/church": {
                     "name": "Edifício de igreja",
-                    "terms": "Church Building, Igreija"
+                    "terms": "church, igreija, igreja, templo, cristão"
                 },
                 "building/civic": {
                     "name": "Edifício cívico",
                 },
                 "building/commercial": {
                     "name": "Edifício de comercial",
-                    "terms": "Prédio Comercial, Edifício Comercial"
+                    "terms": "prédio comercial, edifício comercial, comércio, negócios, escritórios"
                 },
                 "building/construction": {
                     "name": "Edifício em construção",
-                    "terms": "Building Under Construction, Edifício sob Construção"
+                    "terms": "nuilding under construction, edifício sob construção, em construção, construção, construir, construindo, edificar"
                 },
                 "building/detached": {
                     "name": "Casa isolada",
                     "terms": "Dormitory, Repousada, Albergue"
                 },
                 "building/entrance": {
-                    "name": "Entrada / Saída"
+                    "name": "Entrada / saída"
                 },
                 "building/farm": {
                     "name": "Casa de quinta",
                 },
                 "building/farm_auxiliary": {
                     "name": "Edifício agrícola",
-                    "terms": "Edifício do campo"
+                    "terms": "edifício do campo, agrícola, agricultura, quinta"
                 },
                 "building/garage": {
                     "name": "Garagem",
                 },
                 "building/hospital": {
                     "name": "Edifício hospitalar",
-                    "terms": "Hospital Building, Hospital"
+                    "terms": "hospital building, hospital"
                 },
                 "building/hotel": {
                     "name": "Edifício hoteleiro",
-                    "terms": "Hotel Building"
+                    "terms": "hotel, alojamento, complexo hoteleiro, hoteleiro, hotéis"
                 },
                 "building/house": {
                     "name": "Casa",
                     "terms": "Barraca"
                 },
                 "building/industrial": {
-                    "name": "Edifício Industrial",
-                    "terms": "Indústria, Industria, Manufactura, Fábrica, Fabrico"
+                    "name": "Edifício industrial",
+                    "terms": "indústria, industria, manufactura, fábrica, fabrico, indiustrial, fabril, pavilhão"
                 },
                 "building/kindergarten": {
                     "name": "Edifício de jardim infantil / infantário",
-                    "terms": "Preschool/Kindergarten Building"
+                    "terms": "preschool, kindergarten, grounds, pré-escola, pré escola, creche, jardim\n de infância, jardim-de-infância, jardim infantil, pré-escola, \npré-escolar, infantário, edifício"
                 },
                 "building/mosque": {
-                    "name": "Edifício Mesquita",
+                    "name": "Edifício mesquita",
                     "terms": "mosque, mesquita, templo, árabe"
                 },
                 "building/pavilion": {
                     "terms": "School Building, Pavilhão Escolar, Escola"
                 },
                 "building/semidetached_house": {
-                    "name": "Casa Semi-isolada",
+                    "name": "Casa semi-isolada",
                     "terms": "Semi-Detached House"
                 },
                 "building/service": {
                     "terms": "Stable, Cavalo, Cavalos, Cavalariça, Cavalariças"
                 },
                 "building/stadium": {
-                    "name": "Edifício do Estádio",
-                    "terms": "Edifício do arena"
+                    "name": "Edifício do estádio",
+                    "terms": "estádio, arena"
                 },
                 "building/static_caravan": {
                     "name": "Casa pré-fabricada",
                 },
                 "building/temple": {
                     "name": "Edifício de templo",
-                    "terms": "Edifício do templo"
+                    "terms": "edifício, templo"
                 },
                 "building/terrace": {
                     "name": "Casas geminadas",
                     "terms": "Row Houses, Terraced house, Terraços"
                 },
                 "building/train_station": {
-                    "name": "Estação de comboios"
+                    "name": "Edifício de estação de comboios"
                 },
                 "building/transportation": {
                     "name": "Edifício de transporte",
-                    "terms": "Transportation Building"
+                    "terms": "transportation building, transporte, logística"
                 },
                 "building/university": {
                     "name": "Edifício universitário",
                     "terms": "club, clube, aeromodelismo, radioamador, filatelia, xadrez, astronomia, automobilismo, associação, fã-clube, fã, templo maçônico, maçonaria, maçom, caça, motociclismo, moto clube, nudismo, fotografia, escoteiro, escotismo, hobby, futebol, desporto, atletismo, ginástica, basquetebol, voleibol, ténis, natação"
                 },
                 "club/sport": {
-                    "name": "Clube Desportivo",
+                    "name": "Clube desportivo",
                     "terms": "sports club, sporting club, athletics club, sports society, sports association, clube, desportivo, clube de desporto, desporto, futebol, clube de futebol, futebol clube, club, football, esporte"
                 },
                 "craft": {
                     "terms": "Caterer, Catering, Cattering, Comida, comida ao domicílio"
                 },
                 "craft/chimney_sweeper": {
-                    "name": "Limpa-Chaminés",
+                    "name": "Limpa-chaminés",
                     "terms": "chaminé, limpador de chaminés, limpar chaminés"
                 },
                 "craft/clockmaker": {
                     "terms": "Handicraft, Artesã"
                 },
                 "craft/hvac": {
-                    "name": "Técnico de Aquecimento e Ventilação",
+                    "name": "Técnico de aquecimento e ventilação",
                     "terms": "HVAC, Aquecimento, Ventilação, Ar Condicionado, Aquecedor, Aquecedores, Aquecer"
                 },
                 "craft/insulator": {
                     "terms": "Sawmill, Serraria, Lenhador, Madeira"
                 },
                 "craft/scaffolder": {
-                    "name": "Montador de Andaimes",
+                    "name": "Montador de andaimes",
                     "terms": "Scaffolder, Colocador de Andaimes, Andaimes"
                 },
                 "craft/sculptor": {
                     "name": "Alfaiate"
                 },
                 "craft/tiler": {
-                    "name": "Colocador de Azulejos / Pedras",
+                    "name": "Colocador de azulejos / pedras",
                     "terms": "Tiler"
                 },
                 "craft/tinsmith": {
                     "terms": "Watchmaker, Relógio, Relojoaria"
                 },
                 "craft/window_construction": {
-                    "name": "Construção de Janelas",
+                    "name": "Construção de janelas",
                     "terms": "Window Construction, Janela"
                 },
                 "craft/winery": {
                     "terms": "bandagem, curativo, primeiros socorros, kit médico, kit de emergência, kit de primeiros socorros, kit de emergência"
                 },
                 "emergency/life_ring": {
-                    "name": "Boia de Salvamento",
+                    "name": "Bóia de salvamento",
                     "terms": "bóia, salvamento, salva vidas, salva-vidas"
                 },
                 "emergency/lifeguard": {
                     "name": "Banco de areia",
                     "terms": "Sand Trap"
                 },
+                "golf/cartpath": {
+                    "name": "Caminho para carrinhos de golfe",
+                    "terms": "carrinho de golfe, carrinhos de golfe"
+                },
+                "golf/cartpath_service": {
+                    "name": "Caminho para carrinhos de golfe / estrada de serviço",
+                    "terms": "carrinho de golfe, carrinhos de golfe, estrada de serviço"
+                },
+                "golf/driving_range": {
+                    "name": "Campo de treino",
+                    "terms": "driving range, campo de treino de golfe, campo de golfe, golfe, treinar golfe"
+                },
                 "golf/fairway": {
                     "name": "Fairway",
                     "terms": "Fairway"
                     "name": "Buraco de golfe",
                     "terms": "Golf Hole"
                 },
-                "golf/lateral_water_hazard_area": {
-                    "name": "Perigo de água lateral",
-                    "terms": "Lateral Water Hazard"
+                "golf/lateral_water_hazard": {
+                    "name": "Obstáculo de água lateral",
+                    "terms": "lateral water hazard, obstáculo, golfe"
                 },
-                "golf/lateral_water_hazard_line": {
-                    "name": "Perigo de água lateral",
-                    "terms": "Lateral Water Hazard"
+                "golf/path": {
+                    "name": "Caminho pedonal de golfe",
+                    "terms": "golf walking path, caminho pedonal de golfe, campo de golfe, golfe"
                 },
                 "golf/rough": {
                     "name": "Rough",
                     "name": "Tee",
                     "terms": "Tee Box"
                 },
-                "golf/water_hazard_area": {
+                "golf/water_hazard": {
                     "name": "Perigo de água",
-                    "terms": "Water Hazard"
-                },
-                "golf/water_hazard_line": {
-                    "name": "Perigo de água",
-                    "terms": "Water Hazard"
+                    "terms": "water hazard, campo de golfe, golfe"
                 },
                 "healthcare": {
-                    "name": "Instalações de Saúde",
+                    "name": "Instalações de saúde",
                     "terms": "saúde, cuidados médicos, medicina, cuidados de saúde, clínica,"
                 },
                 "healthcare/alternative": {
-                    "name": "Medicina Alternativa",
+                    "name": "Medicina alternativa",
                     "terms": "alternativa, terapia alternativa, acupuntura, aromaterapia, auriculoterapia, cromoterapia, fitoterapia, homeopatia, magnetoterapia, quiropraxia"
                 },
                 "healthcare/alternative/chiropractic": {
                     "terms": "fonoaudiologia, fonoaudiólogo, terapia da fala, audiologia, fono-audiologia, fono-audiólogo"
                 },
                 "healthcare/birthing_center": {
-                    "name": "Centro de Nascimentos (não maternidade)",
+                    "name": "Centro de nascimentos (não maternidade)",
                     "terms": "nascer, nascimento, obstetra, obstetrícia"
                 },
                 "healthcare/blood_donation": {
                     "terms": "Centro de Doação de Sangue, doação de sangue, transfusão de sangue, blood donor center"
                 },
                 "healthcare/hospice": {
-                    "name": "Unidade de Cuidados Paliativos",
+                    "name": "Unidade de cuidados paliativos",
                     "terms": "hospice, cuidados paliativos, paliativos"
                 },
                 "healthcare/laboratory": {
                     "terms": "obstetriz, obstetrícia, parteira, parteiro, ostetra"
                 },
                 "healthcare/occupational_therapist": {
-                    "name": "Terapeuta Ocupacional",
+                    "name": "Terapeuta ocupacional",
                     "terms": "Occupational Therapist, terapeuta,  ocupacional"
                 },
                 "healthcare/optometrist": {
                     "terms": "psicoterapia"
                 },
                 "healthcare/rehabilitation": {
-                    "name": "Unidade de Reabilitação",
+                    "name": "Unidade de reabilitação",
                     "terms": "reabilitação, reabilitar"
                 },
                 "healthcare/speech_therapist": {
-                    "name": "Terapeuta da Fala",
+                    "name": "Terapeuta da fala",
                     "terms": "fonoaudiologia, terapia da fala,  audiologia"
                 },
                 "highway": {
                     "terms": "Autocarro guiado, guia"
                 },
                 "highway/bus_stop": {
-                    "name": "Paragem de autocarro / Plataforma"
+                    "name": "Paragem de autocarro / plataforma"
                 },
                 "highway/construction": {
-                    "name": "Estrada Fechada",
-                    "terms": "fechada, interdita,interdito,obras"
+                    "name": "Estrada fechada",
+                    "terms": "fechada, interdita, interdito, obras, fechado, encerrada, encerrado"
                 },
                 "highway/corridor": {
                     "name": "Corredor interior",
                 },
                 "highway/footway": {
                     "name": "Caminho pedonal",
-                    "terms": "Andar, Caminho, Estrada, Pé, Pedestre, Percurso, Rua, Ruela, Trajectória, Trilha, Trilho, Via, Viela, Caminho Pedonal, beco, vereda,"
+                    "terms": "andar, caminho, estrada, pé, pedestre, percurso, rua, ruela, trajectória, trilha, trilho, via, viela, caminho pedonal, beco, vereda, pedonal"
                 },
                 "highway/footway/conveying": {
-                    "name": "Passarela em movimento",
-                    "terms": "esteira"
+                    "name": "Tapete rolante",
+                    "terms": "esteira rolante, passadeira rolante, esteira, escadas rolantes, escada rolante"
                 },
                 "highway/footway/marked": {
-                    "name": "Faixa de pedestres marcada",
-                    "terms": "Passadeira"
+                    "name": "Passadeira marcada",
+                    "terms": "passadeira, zebra, passagem"
                 },
                 "highway/footway/marked-raised": {
-                    "name": "Faixa de pedestres marcada (levantada)",
-                    "terms": "Passadeira (levantada)"
+                    "name": "Passadeira marcada (levantada)",
+                    "terms": "passadeira, lomba, passadeira-lomba, passadeira elevada"
                 },
                 "highway/footway/sidewalk": {
                     "name": "Passeio",
-                    "terms": "calçada"
+                    "terms": "calçada, passeios, bermas, berma"
                 },
                 "highway/footway/unmarked": {
-                    "name": "Cruzamento não marcado",
-                    "terms": "passagem de pedestres não marcada"
+                    "name": "Atravessamento não marcado",
+                    "terms": "passagem de pedestres não marcada, passadeira, passagem"
                 },
                 "highway/footway/unmarked-raised": {
-                    "name": "Cruzamento não marcado (levantado)",
-                    "terms": "passagem de pedestres não marcada (elevada)"
+                    "name": "Atravessamento não marcado (levantado)",
+                    "terms": "passagem de pedestres não marcada, passagem, atravessamento, passadeira, lomba"
                 },
                 "highway/footway/zebra": {
-                    "name": "Faixa de pedestres marcada"
+                    "name": "Passadeira marcada"
                 },
                 "highway/footway/zebra-raised": {
-                    "name": "Faixa de pedestres marcada (levantada)"
+                    "name": "faixa de pedestres marcada, passadeira, atravessamento, passagem"
                 },
                 "highway/give_way": {
                     "name": "Sinal de cedência de passagem",
                     "terms": "Zona de Peões"
                 },
                 "highway/milestone": {
-                    "name": "Marcos Quilométrico",
+                    "name": "Marco quilométrico",
                     "terms": "marco, quilómetro, kilómetro, kilométrico, marcação, demarcação, hectométrico, hectométrica, quilométrico, quilométrica, miriamétrica, miriamétrico"
                 },
                 "highway/mini_roundabout": {
                     "name": "Mini-rotunda",
-                    "terms": "Mini-Rotunda, Minirotunda, Rotunda Pintada"
+                    "terms": "mini-rotunda, minirotunda, rotunda rintada, rotunda, rotatória"
                 },
                 "highway/motorway": {
                     "name": "Autoestrada",
-                    "terms": "Auto-Estrada, Auto Estrada"
+                    "terms": "auto-estrada, auto estrada"
                 },
                 "highway/motorway_junction": {
                     "name": "Saída de autoestrada",
                 },
                 "highway/motorway_link": {
                     "name": "Ligação a uma autoestrada",
-                    "terms": "Ligação Autoestrada, Entrada Autoestrada, Saída Autoestrada"
+                    "terms": "ligação a autoestrada, entrada de autoestrada, saída de autoestrada, saída"
                 },
                 "highway/passing_place": {
                     "name": "Lugar de passagem",
                     "terms": "Trilha, Caminho, vereda (com pavimento em terra), vereda"
                 },
                 "highway/pedestrian_area": {
-                    "name": "Área Pedonal",
+                    "name": "Área pedonal",
                     "terms": "praça, largo, alameda"
                 },
                 "highway/pedestrian_line": {
                     "terms": "Rodovia de Serviço"
                 },
                 "highway/service/alley": {
-                    "name": "Viela / Traseiras",
+                    "name": "Viela / traseiras",
                     "terms": "Traseiras, beco (com acesso para carros), estrada estreita, caminho estreito, beco estreito, viela,"
                 },
                 "highway/service/drive-through": {
                     "terms": "Service Area, Posto de Serviço"
                 },
                 "highway/speed_camera": {
-                    "name": "Radar de Controlo de Velocidade",
+                    "name": "Radar de controlo de velocidade",
                     "terms": "radar, controlo de velocidade"
                 },
                 "highway/steps": {
                 },
                 "highway/traffic_mirror": {
                     "name": "Espelho rodoviário",
-                    "terms": "espelho, espelho vertical,"
+                    "terms": "mirror, espelho, espelho vertical"
                 },
                 "highway/traffic_signals": {
                     "name": "Semáforos",
                     "terms": "Cruz ao Ar Livre, Cruz"
                 },
                 "historic/wayside_shrine": {
-                    "name": "Alminhas / Nicho / Capelinha",
-                    "terms": "Alminhas, Nicho, Capelinha"
+                    "name": "Alminhas / nicho / capelinha",
+                    "terms": "alminhas, nicho, capelinha"
                 },
                 "historic/wreck": {
                     "name": "Naufrágio",
-                    "terms": "naufrágio, esteira, casco"
+                    "terms": "naufrágio, esteira, casco, barco, naufragado, encalhado, encalhada, encalhou"
                 },
                 "internet_access/wlan": {
                     "name": "Ponto de acesso Wi-Fi",
                     "terms": "junction, cruzam, cruzar, interseção, intersecção"
                 },
                 "landuse": {
-                    "name": "Uso do Solo",
-                    "terms": "Land Use"
+                    "name": "Uso do solo"
                 },
                 "landuse/allotments": {
-                    "name": "Horta Urbana",
+                    "name": "Horta urbana",
                     "terms": "Community Garden, Horta Comunitária, Horta Urbana"
                 },
                 "landuse/aquaculture": {
                     "name": "Campo agrícola"
                 },
                 "landuse/farmland": {
-                    "name": "Campo agrícola",
+                    "name": "campo agrícola, campo, agricultura, cultura, cultivo, cultivar",
                     "terms": "Farm, Pasto, campo"
                 },
                 "landuse/farmyard": {
                     "terms": "Fazenda, Casa de Campo, Celeiro, pátio"
                 },
                 "landuse/forest": {
-                    "name": "Floresta Gerida",
+                    "name": "Floresta gerida",
                     "terms": "managed forest, floresta gerida, floresta, gerida, gestão, gestão da floresta, sustentabilidade, sustentável, floresta sustentável"
                 },
                 "landuse/garages": {
                     "terms": "loteamento, terreno para obras, terreno para construção"
                 },
                 "landuse/greenhouse_horticulture": {
-                    "name": "Estufa Horticultura",
-                    "terms": "estufa"
+                    "name": "Estufa hortícola",
+                    "terms": "estufa, hortícola, hortícula, horticultura, horticoltura, ortícola, ortícula, orticultura, orticoltura"
                 },
                 "landuse/harbour": {
-                    "name": "Porto Marítimo",
+                    "name": "Porto marítimo",
                     "terms": "porto, abra, refúgio, abrigo, porto seguro, porto-seguro, porto abrigado, ancoradouro"
                 },
                 "landuse/industrial": {
                     "terms": "Military, Exército, Marinha, Forças Especiais, Força Aérea, Forças Armadas, Militar, Quartel"
                 },
                 "landuse/military/airfield": {
-                    "name": "Base Aérea Militar",
-                    "terms": "base aérea, aeródromo militar, aeroporto militar, base da força aérea"
+                    "name": "Base aérea militar",
+                    "terms": "base aérea, aeródromo militar, aeroporto militar, base da força aérea, força aérea, militar"
                 },
                 "landuse/military/barracks": {
                     "name": "Caserna",
                     "terms": "caserna, dormitório militar"
                 },
                 "landuse/military/bunker": {
-                    "name": "Búnquer Militar",
+                    "name": "Búnquer militar",
                     "terms": "casamata, búnquer, bunker, bunker militar"
                 },
                 "landuse/military/checkpoint": {
-                    "name": "Posto de Controlo Militar",
+                    "name": "Posto de controlo militar",
                     "terms": "ponto de controlo militar, posto de controlo, ponto de controlo"
                 },
                 "landuse/military/danger_area": {
-                    "name": "Área Perigosa",
-                    "terms": "área perigosa"
+                    "name": "Área perigosa",
+                    "terms": "área perigosa, perigo, perigosa, perigoso, interdito, interdição"
                 },
                 "landuse/military/naval_base": {
-                    "name": "Base Naval Militar",
+                    "name": "Base naval militar",
                     "terms": "base naval, porto militar, porto marítimo militar, porto de guerra, estação naval, ponto de apoio naval, arsenal"
                 },
                 "landuse/military/nuclear_explosion_site": {
-                    "name": "Local de Teste de Armas Nucleares",
+                    "name": "Local de teste de armas nucleares",
                     "terms": "local de teste de arma nuclear, teste nuclear, testes nucleares"
                 },
                 "landuse/military/obstacle_course": {
-                    "name": "Percurso Militar com Obstáculos:",
-                    "terms": "percurso militar de obstáculos, percurso militar, percurso de obstáculos militar"
+                    "name": "Percurso militar com obstáculos",
+                    "terms": "percurso militar de obstáculos, percurso militar, percurso de obstáculos militar, obstáculo, militar, treino militar, treino"
                 },
                 "landuse/military/office": {
-                    "name": "Escritório Militar",
+                    "name": "Escritório militar",
                     "terms": "escritórios militares, centro de recrutamento militar, centro de inspeção militar, centro de inspecção militar, centro de inspeção, centro de inspecção"
                 },
                 "landuse/military/range": {
-                    "name": "Carreira de Tiro Militar",
+                    "name": "Carreira de tiro militar",
                     "terms": "campo de tiro militar, campo de tiros, carreira de tiros"
                 },
                 "landuse/military/training_area": {
-                    "name": "Local de Testes Militares",
+                    "name": "Local de testes militares",
                     "terms": "local de ensaio militar, ensaios militares, local de testes militar, local de treino"
                 },
                 "landuse/orchard": {
                 },
                 "landuse/plant_nursery": {
                     "name": "Viveiro de plantas",
-                    "terms": "Plant Nursery"
+                    "terms": "plant nursery, viveiros, viveiro, viveirista, plantas, venda de plantas, árvores, arbustos, flores"
                 },
                 "landuse/pond": {
                     "name": "Lagoa"
                     "terms": "Canteira, Quarry"
                 },
                 "landuse/railway": {
-                    "name": "Área Ferroviária",
+                    "name": "Área ferroviária",
                     "terms": "área ferroviária, zona ferroviária"
                 },
                 "landuse/recreation_ground": {
                     "terms": "Vinhas, Vinhedo, Vinhão, Vineyard, Uvas, Uva"
                 },
                 "leisure": {
-                    "name": "Lazer",
-                    "terms": "Lazer, Diversão, Leisure"
+                    "name": "Lazer"
                 },
                 "leisure/adult_gaming_centre": {
                     "name": "Centro de jogos para adultos",
                     "terms": "Centro de férias na praia"
                 },
                 "leisure/bird_hide": {
-                    "name": "Abrigo de passaros",
-                    "terms": "Bird Hide"
+                    "name": "Observatório de aves",
+                    "terms": "bird hide, observatório de aves, posto de observação, observação de aves, observação, aves"
                 },
                 "leisure/bleachers": {
                     "name": "Arquibancada",
-                    "terms": "arquibancada, estrado, tablado, tribuna de orador"
+                    "terms": "arquibancada, estrado, tablado, bancada, tribuna"
                 },
                 "leisure/bowling_alley": {
-                    "name": "Pista de Bowling",
+                    "name": "Pista de bólingue",
                     "terms": "Bowling Alley, Bowling, Boulingue, Bólingue, boliche"
                 },
                 "leisure/common": {
                     "terms": "Dance Hall"
                 },
                 "leisure/dancing_school": {
-                    "name": "Escola de Dança",
+                    "name": "Escola de dança",
                     "terms": "dança, dançar, bailado, bailarina, bailarino"
                 },
                 "leisure/dog_park": {
                     "terms": "Parque para Cães, Dog Park"
                 },
                 "leisure/firepit": {
-                    "name": "Local para Fogueiras",
+                    "name": "Local para fogueiras",
                     "terms": "Firepit, Fogo controlado, Chama, Brasa, Fogueira"
                 },
                 "leisure/fishing": {
                     "terms": "local de pesca, área de pesca"
                 },
                 "leisure/fitness_centre": {
-                    "name": "Academia Desportiva/Ginásio",
+                    "name": "Academia desportiva / ginásio",
                     "terms": "Academia Esportiva, Academia Desportiva, Academia, Ginásio, Health Club, Fitness, Musculação"
                 },
                 "leisure/fitness_centre/yoga": {
-                    "name": "Casa De Yoga",
-                    "terms": "Casa De Ioga, Yoga Studio"
+                    "name": "Estúdio de ioga",
+                    "terms": "casa de ioga, yoga studio, ioga, yoga, salão de ioga, sessão de ioga, sessões de ioga"
                 },
                 "leisure/fitness_station": {
-                    "name": "Equipamento de Exercícios ao Ar Livre",
+                    "name": "Equipamento de exercícios ao ar livre",
                     "terms": "Máquinas de exercícios, Máquina de execício, Exercício ao ar livre, Exercícios ao ar livre, Ginástica, Equipamento de exercícios"
                 },
                 "leisure/fitness_station/balance_beam": {
-                    "name": "Trave de Equilíbrio",
+                    "name": "Trave de equilíbrio",
                     "terms": "trave, equilíbrio, barra, balanço"
                 },
                 "leisure/fitness_station/box": {
-                    "name": "Caixa de Exercícios",
+                    "name": "Caixa de exercícios",
                     "terms": "exercício, caixa"
                 },
                 "leisure/fitness_station/horizontal_bar": {
-                    "name": "Barra Fixa Horizontal",
+                    "name": "Barra fixa horizontal",
                     "terms": "barra, horizontal"
                 },
                 "leisure/fitness_station/horizontal_ladder": {
-                    "name": "Escada Horizontal",
+                    "name": "Escada horizontal",
                     "terms": "exercício, barra"
                 },
                 "leisure/fitness_station/hyperextension": {
-                    "name": "Dispositivo de Extensões",
+                    "name": "Dispositivo de extensões",
                     "terms": "Extensões"
                 },
                 "leisure/fitness_station/parallel_bars": {
-                    "name": "Barras Paralelas",
+                    "name": "Barras paralelas",
                     "terms": "barras, paralelas"
                 },
                 "leisure/fitness_station/push-up": {
-                    "name": "Barra de Flexões",
+                    "name": "Barra de flexões",
                     "terms": "Flexões, Flexão, Extensão"
                 },
                 "leisure/fitness_station/rings": {
-                    "name": "Argolas de Exercício",
+                    "name": "Argolas de exercício",
                     "terms": "Argolas"
                 },
                 "leisure/fitness_station/sign": {
-                    "name": "Placa de Instruções de Exercício",
+                    "name": "Placa de instruções de exercício",
                     "terms": "exercício, sinal, instruções"
                 },
                 "leisure/fitness_station/sit-up": {
-                    "name": "Dispositivo para Abdominais",
+                    "name": "Dispositivo para abdominais",
                     "terms": "Abdominais"
                 },
                 "leisure/fitness_station/stairs": {
-                    "name": "Escadas de Exercício",
+                    "name": "Escadas de exercício",
                     "terms": "Escadas"
                 },
                 "leisure/garden": {
                     "terms": "Campo de Golf, Golf, Golf Course"
                 },
                 "leisure/hackerspace": {
-                    "name": "Clube de Hackers",
+                    "name": "Clube de hackers",
                     "terms": "Hacker, Hackers, hackspace"
                 },
                 "leisure/horse_riding": {
-                    "name": "Arena de Hipismo",
+                    "name": "Arena de hipismo",
                     "terms": "Horseback Riding Facility, Arena de Equitação"
                 },
                 "leisure/ice_rink": {
                 },
                 "leisure/miniature_golf": {
                     "name": "Minigolfe",
-                    "terms": "Miniature Gold"
+                    "terms": "miniature golf, golfe, mini-golfe, mini golfe, golfe miniatura"
                 },
                 "leisure/nature_reserve": {
                     "name": "Reserva natural",
                     "name": "Mesa de piquenique",
                     "terms": "Picnic Table, Mesa de Merenda, Convescote, Piquenique pique-nique, Pik-nik, piknik"
                 },
+                "leisure/picnic_table/chess": {
+                    "name": "Mesa de xadrez",
+                    "terms": "mesa de xadrez, meza de xadrez, tabuleiro de xadrez, xadrez, xadres, chadrez, chadres, xadrês, jogo de xadrez, jogo de tabuleiro"
+                },
                 "leisure/pitch": {
                     "name": "Campo de desporto",
                     "terms": "Campo de Desportos, Quadra Desportiva, Sport Pitch"
                     "terms": "Vólei, campo, praia, voleibol, volley"
                 },
                 "leisure/pitch/boules": {
-                    "name": "Campo de Boules/Boccia"
+                    "name": "Campo de boules / boccia",
+                    "terms": "boules, bocce, bocia, bócia, bóssia, bósia, boles, bossia, bosia"
                 },
                 "leisure/pitch/bowls": {
                     "name": "Campo de boccia",
                     "terms": "Bowling Green"
                 },
                 "leisure/pitch/cricket": {
-                    "name": "Campo de Críquete",
+                    "name": "Campo de críquete",
                     "terms": "campo de críquete, campo de cricket, campo de jogos de críquete, campo de jogos de cricket"
                 },
                 "leisure/pitch/equestrian": {
-                    "name": "Pista de Equitação",
+                    "name": "Pista de equitação",
                     "terms": "Riding Arena, pista, equitação, hipismo, cavalos"
                 },
                 "leisure/pitch/netball": {
-                    "name": "Terreno de Netbol",
-                    "terms": "netball, terreno de netbol, terreno, quadra, pátio"
+                    "name": "Campo de netbol",
+                    "terms": "netball, terreno de netbol, netbol, netbola, campo"
                 },
                 "leisure/pitch/rugby_league": {
                     "name": "Campo de rugby de 13",
                 },
                 "leisure/pitch/softball": {
                     "name": "Campo de softbol",
-                    "terms": "campo de softbol, softbol"
+                    "terms": "campo de softbol, softbol, softball"
                 },
                 "leisure/pitch/table_tennis": {
-                    "name": "Mesa de Pingue-Pongue",
+                    "name": "Mesa de pingue-pongue",
                     "terms": "pingue-pongue, pingue pongue, ténis de mesa"
                 },
                 "leisure/pitch/tennis": {
                     "terms": "Infantil, Escorrega, Baloiço, Escorregas, Baloiços"
                 },
                 "leisure/resort": {
-                    "name": "Restort",
-                    "terms": "Resort, resorte, centro de férias, estação turística, estância turística ou hotel de lazer"
+                    "name": "Estância turística / resorte",
+                    "terms": "resort, resorte, centro de férias, estação turística, estância turística, hotel de lazer, estância"
                 },
                 "leisure/sauna": {
                     "name": "Sauna",
                     "terms": "Slipway"
                 },
                 "leisure/sports_centre": {
-                    "name": "Centro Desportivo / Complexo Desportivo",
+                    "name": "Centro desportivo / complexo desportivo",
                     "terms": "Centro Desportivo, Complexo Desportivo, Cidade Desportiva, Centro de Desporto, Centro de Desportos"
                 },
+                "leisure/sports_centre/climbing": {
+                    "name": "Academia de escalada"
+                },
                 "leisure/sports_centre/swimming": {
-                    "name": "Academia de Natação",
+                    "name": "Academia de natação",
                     "terms": "Piscina, Natação, Aquática, Centro Aquático, Saltos ornamentais, Esportes Aquáticos, Polo aquático"
                 },
                 "leisure/stadium": {
                 },
                 "leisure/swimming_pool": {
                     "name": "Piscina",
-                    "terms": "Piscina, Swimming Pool"
+                    "terms": "piscina, swimming pool, pixinha, pichina, pischina, pisxina, nadar, natação"
                 },
                 "leisure/track": {
                     "name": "Pista de corridas (não motorizados) ",
                     "terms": "Pista (corrida)"
                 },
                 "leisure/water_park": {
-                    "name": "Parque Aquático",
+                    "name": "Parque aquático",
                     "terms": "Piscina, Parque de diversões, Lazer, Diversão,"
                 },
                 "line": {
                     "terms": "Linha, Line"
                 },
                 "man_made": {
-                    "name": "Estrutura artificial",
-                    "terms": "Construção Humana, Obra Humana, Man Made"
+                    "name": "Estrutura artificial"
                 },
                 "man_made/adit": {
                     "name": "Galeria de acesso a mina",
                     "terms": "Bridge, Viaduto"
                 },
                 "man_made/bunker_silo": {
-                    "name": "Silo Bunker",
+                    "name": "Silo búnquer",
                     "terms": "Silo-corredor, funil"
                 },
                 "man_made/chimney": {
                     "terms": "guindaste, gindaste, guindastre, gindastre"
                 },
                 "man_made/cutline": {
-                    "name": "Aceiro / Linha corta-fogo",
+                    "name": "Aceiro / linha corta-fogo",
                     "terms": "Cut line, Corta Fogo, incêndio, incêndios"
                 },
                 "man_made/embankment": {
                 },
                 "man_made/gasometer": {
                     "name": "Gasómetro",
-                    "terms": "Gasometer"
+                    "terms": "Gasometer, gasômetro, gás, gáz, gas, gaz, depósito"
                 },
                 "man_made/groyne": {
                     "name": "Espigão marítimo",
                     "terms": "Oil Well"
                 },
                 "man_made/pier": {
-                    "name": "Pontão / Atracadouro",
+                    "name": "Pontão / atracadouro",
                     "terms": "Pier, Porto, Doca"
                 },
                 "man_made/pipeline": {
-                    "name": "Gasoduto / Oleoduto",
-                    "terms": "Tubo, Pipeline"
+                    "name": "Gasoduto / oleoduto",
+                    "terms": "tubo, tubos, pipeline, tubagem, gasoduto, oleoduto, canalização"
                 },
                 "man_made/pumping_station": {
                     "name": "Estação de bombeamento",
                     "terms": "Silo"
                 },
                 "man_made/storage_tank": {
-                    "name": "Depósito de Armazenamento",
-                    "terms": "Storage Tank"
+                    "name": "Depósito de armazenamento",
+                    "terms": "storage tank, depósito, armazenagem, tanque"
                 },
                 "man_made/surveillance": {
-                    "name": "Câmara de Vigilância",
-                    "terms": "Surveillance, CCTV"
+                    "name": "Vigilância",
+                    "terms": "surveillance, CCTV, vigilância, câmara, câmera, filmar"
                 },
                 "man_made/surveillance/camera": {
-                    "name": "Câmara de segurança",
-                    "terms": "câmara, vigilância, vigilância por vídeo, reconhecimento, placa, registo, verbalização"
+                    "name": "Câmara de vigilância",
+                    "terms": "câmara, vigilância, vigilância por vídeo, reconhecimento, placa, registo, verbalização, câmera, vigilância, segurança, câmara de segurança, CCTV, filmar, filmagem"
                 },
                 "man_made/survey_point": {
-                    "name": "Vértice geodésico / Talefe",
+                    "name": "Vértice geodésico / talefe",
                     "terms": "Survey Point"
                 },
                 "man_made/tower": {
                     "name": "Torre",
                     "terms": "Torre, Alto, Tower"
                 },
+                "man_made/tower/bell_tower": {
+                    "name": "Torre de sino",
+                    "terms": "torre de sino, torre sineira, torre, sino, sinos, sineira, carrilhões, carrilhão, campanário, torre de igreja"
+                },
                 "man_made/tower/communication": {
                     "name": "Torre de comunicação",
                     "terms": "torre de telecomunicações, radiodifusão, antena, telefone celular, telefone móvel, torre, rádio, mastro de transmissão, pilão de transmissão"
                 },
+                "man_made/tower/minaret": {
+                    "name": "Minarete",
+                    "terms": "minarete, minaretes, torre, mesquita, almádena, alminar"
+                },
                 "man_made/tower/observation": {
                     "name": "Torre de observação",
                     "terms": "torre de observação, torre de vigia"
                     "terms": "Sumidouro, sarjeta, vala, valeta, tempestade, chuva, inundação, pluviais, escoamento, drenagem"
                 },
                 "manhole/telecom": {
-                    "name": "Poço de Visita de Telecomunicações",
+                    "name": "Poço de visita de telecomunicações",
                     "terms": "Telecom Manhole, poço de visita, telecomunicações"
                 },
                 "natural": {
-                    "name": "Natural",
-                    "terms": "Natural"
+                    "name": "Natural"
                 },
                 "natural/bare_rock": {
-                    "name": "Zona Rochosa",
+                    "name": "Zona rochosa",
                     "terms": "zonas rochosas, rocha matriz, rocha-mãe"
                 },
                 "natural/bay": {
                     "terms": "Terra molhada"
                 },
                 "natural/peak": {
-                    "name": "Pico / Cume",
+                    "name": "Pico / cume",
                     "terms": "Peak, Montanha, Pináculo"
                 },
                 "natural/reef": {
                     "terms": "barreira, barreira, coral, oceano, mar profundo, recife, recife, oceano, rocha, coral"
                 },
                 "natural/ridge": {
-                    "name": "Cumeeira / Cume",
+                    "name": "Cumeeira / cume",
                     "terms": "cumieira, cumeira, cume, cumeada, tergo"
                 },
                 "natural/saddle": {
                     "name": "Escritório da administração local"
                 },
                 "office/adoption_agency": {
-                    "name": "Agência de Adoção",
+                    "name": "Agência de adoção",
                     "terms": "adoção, adopção, adotar, adoptar"
                 },
                 "office/advertising_agency": {
-                    "name": "Agência de Publicidade",
+                    "name": "Agência de publicidade",
                     "terms": "publicidade, anúncio"
                 },
                 "office/architect": {
                     "terms": "arquitecto, arquitecta, arquiteta, arquitectura, arquitetura"
                 },
                 "office/association": {
-                    "name": "Organização Sem Fins Lucrativos",
+                    "name": "Organização sem fins lucrativos",
                     "terms": "ONG"
                 },
                 "office/charity": {
-                    "name": "Instituição de Caridade",
+                    "name": "Instituição de caridade",
                     "terms": "Caridade, Filantropia, Solidariedade"
                 },
                 "office/company": {
                     "terms": "escritório, empresa"
                 },
                 "office/coworking": {
-                    "name": "Escritórios Cooperativos",
+                    "name": "Escritórios cooperativos",
                     "terms": "Escritórios Partilhados, Trabalho Cooperativo, Coworking, Co-working, Espaço de Trabalho Compartilhado"
                 },
                 "office/educational_institution": {
-                    "name": "Instituição de Ensino",
+                    "name": "Instituição de ensino",
                     "terms": "Educacional Institution, Escola, Instituição Educacional, Educação, Educacional"
                 },
                 "office/employment_agency": {
-                    "name": "Agência de Emprego",
+                    "name": "Agência de emprego",
                     "terms": "Employment Agency, Agência de Emprego, Emprego"
                 },
                 "office/energy_supplier": {
-                    "name": "Fornecedor de Energia",
+                    "name": "Fornecedor de energia",
                     "terms": "Eletricidade, Gás, Botijas de Gás, Combustível"
                 },
                 "office/estate_agent": {
                     "terms": "Financial Office, Posto de Finanças, Balcão de Finanças, Repartição. IRS, IRC, impostos, taxas"
                 },
                 "office/forestry": {
-                    "name": "Posto Florestal",
+                    "name": "Posto florestal",
                     "terms": "Guarda Florestal"
                 },
                 "office/foundation": {
                     "terms": "Government Office, Governo, Estado, Finanças, Segurança Social, DGV, Instituto de Emprego, Centro de Emprego, Direcção-Geral, Direção-Geral, Loja do Cidadão"
                 },
                 "office/government/register_office": {
-                    "name": "Conservatória do Registo Civil",
+                    "name": "Conservatória do registo civil",
                     "terms": "Register Office, Conservatória, Registo Civil, Registo, Nascimento, Casamento, Óbito, Divórcio, Conservatória dos Registos Centrais, estado civil,"
                 },
                 "office/government/tax": {
                     "terms": "Direção de Finanças, Repartição de Finanças, Direção das Finanças, Repartição das Finanças"
                 },
                 "office/guide": {
-                    "name": "Guia Turístico",
+                    "name": "Guia turístico",
                     "terms": "Guia"
                 },
                 "office/insurance": {
                     "terms": "Insurance Office, Seguros, Seguro"
                 },
                 "office/it": {
-                    "name": "Escritório de Tecnologia da Informação",
+                    "name": "Escritório de tecnologia da informação",
                     "terms": "IT, tecnologias, software, programa"
                 },
                 "office/lawyer": {
                     "name": "Notário"
                 },
                 "office/moving_company": {
-                    "name": "Empresa de Mudanças",
-                    "terms": "Mudanças, Transportadora"
+                    "name": "Empresa de mudanças",
+                    "terms": "mudanças, transportadora, logística"
                 },
                 "office/newspaper": {
-                    "name": "Sede/Filial de Jornal",
+                    "name": "Sede / filial de jornal",
                     "terms": "jornal"
                 },
                 "office/ngo": {
                     "name": "Médico especialista"
                 },
                 "office/political_party": {
-                    "name": "Sede/filial de partido político",
+                    "name": "Sede / filial de partido político",
                     "terms": "Political Party, Partido, Partidos, sede partido, sede partidária, política, sede política,"
                 },
                 "office/private_investigator": {
-                    "name": "Detetive Privado",
+                    "name": "Detetive privado",
                     "terms": "Detetive, Detetive Particular"
                 },
                 "office/quango": {
                     "terms": "Research Office, Escritório de Investigação, Centro de Pesquisa"
                 },
                 "office/surveyor": {
-                    "name": "Empresa de Agrimensura",
+                    "name": "Empresa de agrimensura",
                     "terms": "agrimessor, agrimessura, medição, medições, levantamento, terreno"
                 },
                 "office/tax_advisor": {
-                    "name": "Escritório de Assessor Fiscal",
+                    "name": "Escritório de assessor fiscal",
                     "terms": "Assessoria Fiscal, Acessoria Fiscal, Acecoria Fiscal, Açessoria Fiscal, Açecoria Fiscal, Açesoria Fiscal, Acessor Fiscal, Acecor Fiscal, Açessor Fiscal, Açecor Fiscal, Açesor Fiscal"
                 },
                 "office/telecommunication": {
                     "name": "Agência de viagens"
                 },
                 "office/water_utility": {
-                    "name": "Fornecedor de Ã\81gua",
+                    "name": "Fornecedor de Ã¡gua",
                     "terms": "Água, Companhia de Água, Cooperativa de Água"
                 },
                 "piste/downhill": {
                     "name": "Local"
                 },
                 "place/city": {
-                    "name": "Capital de Distrito",
+                    "name": "Capital de distrito",
                     "terms": "City, Cidade, Capital, Distrito"
                 },
                 "place/city_block": {
                     "terms": "zona"
                 },
                 "place/square": {
-                    "name": "Praça / Praceta / Largo / Terreiro",
+                    "name": "Praça / praceta / largo / terreiro",
                     "terms": "Square, Praceta, Largo, Terreiro"
                 },
                 "place/suburb": {
                     "terms": "periferia, subúrbio, bairro, quarteirão, margem, limite"
                 },
                 "place/town": {
-                    "name": "Cidade / Vila",
+                    "name": "Cidade / vila",
                     "terms": "Town, Conselho, Concelho, Cidade, Vila"
                 },
                 "place/village": {
                     "terms": "Village, Freguesia, Freguezia, Cidade, Vila, Aldeia"
                 },
                 "playground/balance_beam": {
-                    "name": "Barra de Equilíbrio",
+                    "name": "Barra de equilíbrio",
                     "terms": "Equilíbrio, Balanço, Equilibrismo, Trave"
                 },
                 "playground/basket_spinner": {
-                    "name": "Cesto Rotativo",
+                    "name": "Cesto rotativo",
                     "terms": "Cesto, Rotativo, Cesta"
                 },
                 "playground/basket_swing": {
-                    "name": "Baloiço de Cesto",
+                    "name": "Baloiço de cesto",
                     "terms": "Cesto, Cesta, Baloiço"
                 },
                 "playground/climbing_frame": {
-                    "name": "Estrutura de Trepar",
+                    "name": "Estrutura de trepar",
                     "terms": "trepa-trepa, gaiola gínica, trepar"
                 },
                 "playground/cushion": {
-                    "name": "Colchão Insuflável",
+                    "name": "Colchão insuflável",
                     "terms": "Insuflável"
                 },
                 "playground/horizontal_bar": {
-                    "name": "Barra Fixa Horizontal",
+                    "name": "Barra fixa horizontal",
                     "terms": "Barra Horizontal"
                 },
                 "playground/rocker": {
                     "terms": "Mola"
                 },
                 "playground/roundabout": {
-                    "name": "Gira-Gira",
+                    "name": "Gira-gira",
                     "terms": "Girar"
                 },
                 "playground/sandpit": {
-                    "name": "Caixa de Areia",
+                    "name": "Caixa de areia",
                     "terms": "Areia"
                 },
                 "playground/seesaw": {
                     "terms": "escorregador, escorregão, escorrego"
                 },
                 "playground/structure": {
-                    "name": "Estrutura de Diversão",
+                    "name": "Estrutura de diversão",
                     "terms": "Estrutura, Jogo, Equipamento"
                 },
                 "playground/swing": {
                     "terms": "balanço"
                 },
                 "playground/zipwire": {
-                    "name": "Corda Suspensa",
+                    "name": "Corda suspensa",
                     "terms": "corda, suspenso"
                 },
                 "point": {
                     "terms": "Minor Power Line, Linha de Transmissão Menor, Linha de Energia Menor"
                 },
                 "power/plant": {
-                    "name": "Área da Central de Energia",
+                    "name": "Área da central de energia",
                     "terms": "solo da central de energia, zona da central, solo da central, área da central"
                 },
                 "power/pole": {
                     "name": "Transformador de distribuição",
                     "terms": "Transformador"
                 },
-                "public_transport/linear_platform": {
-                    "name": "Paragem / Plataforma",
-                    "terms": "plataforma, paragem, transporte público"
-                },
-                "public_transport/linear_platform_aerialway": {
-                    "name": "Paragem aérea / Plataforma"
-                },
-                "public_transport/linear_platform_bus": {
-                    "name": "Paragem de autocarro / plataforma",
-                    "terms": "paragem, terminal, autocarro, bus stop, bus, abrigo, carreira, camionete, camioneta, ônibus, machimbombo, toca-toca, otocarro, microlete"
-                },
-                "public_transport/linear_platform_ferry": {
-                    "name": "Paragem de Ferry / Plataforma",
-                    "terms": "Ferry, Plataforma de Ferry"
-                },
-                "public_transport/linear_platform_light_rail": {
-                    "name": "Paragem de comboio ligeiro / Plataforma",
-                    "terms": "plataforma, paragem, metropolitano ligeiro"
-                },
-                "public_transport/linear_platform_monorail": {
-                    "name": "Paragem de monocarril / Paragem",
-                    "terms": "plataforma, paragem, monocarril, mono-carril, monorail"
-                },
-                "public_transport/linear_platform_subway": {
-                    "name": "Paragem de metro / Plataforma",
-                    "terms": "paragem de metro, metro, metropolitano, paragem"
-                },
-                "public_transport/linear_platform_train": {
-                    "name": "Paragem de Comboio / Plataforma",
-                    "terms": "Paragem de Comboio, Plataforma de Comboio"
-                },
-                "public_transport/linear_platform_tram": {
-                    "name": "Paragem de elétrico / Plataforma",
-                    "terms": "paragem de elétrico, paragem, elétrico, eléctrico"
-                },
-                "public_transport/linear_platform_trolleybus": {
-                    "name": "Paragem de tróleibus / Plataforma",
-                    "terms": "paragem, plataforma, trolleybus, tróleibus, trólebus, tróleicarro, trólei"
-                },
                 "public_transport/platform": {
-                    "name": "Paragem / Plataforma",
+                    "name": "Paragem / plataforma",
                     "terms": "plataforma, paragem, transporte público"
                 },
                 "public_transport/platform_aerialway": {
-                    "name": "Paragem aérea / Plataforma"
+                    "name": "Paragem aérea / plataforma"
                 },
                 "public_transport/platform_bus": {
-                    "name": "Paragem de autocarro / Plataforma",
+                    "name": "Paragem de autocarro / plataforma",
                     "terms": "paragem, autocarro, machimbombo, toca-toca, otocarro, microlete, camionete, camioneta, carreira"
                 },
                 "public_transport/platform_ferry": {
-                    "name": "Paragem de Ferry / Plataforma",
+                    "name": "Paragem de ferry / plataforma",
                     "terms": "Ferry, Plataforma de Ferry"
                 },
                 "public_transport/platform_light_rail": {
-                    "name": "Paragem de comboio ligeiro / Plataforma",
+                    "name": "Paragem de comboio ligeiro / plataforma",
                     "terms": "plataforma, paragem, metropolitano ligeiro"
                 },
                 "public_transport/platform_monorail": {
-                    "name": "Paragem de monocarril / Plataforma",
+                    "name": "Paragem de monocarril / plataforma",
                     "terms": "plataforma, paragem, monocarril, mono-carril, monorail"
                 },
                 "public_transport/platform_subway": {
-                    "name": "Paragem de metro / Plataforma",
+                    "name": "Paragem de metro / plataforma",
                     "terms": "paragem de metro, metro, metropolitano, paragem"
                 },
                 "public_transport/platform_train": {
-                    "name": "Paragem de Comboio / Plataforma",
+                    "name": "Paragem de comboio / plataforma",
                     "terms": "Paragem de Comboio, Plataforma de Comboio"
                 },
                 "public_transport/platform_tram": {
-                    "name": "Paragem de elétrico / Plataforma",
+                    "name": "Paragem de elétrico / plataforma",
                     "terms": "plataforma, paragem, eléctrico, elétrico"
                 },
                 "public_transport/platform_trolleybus": {
-                    "name": "Paragem de tróleibus / Plataforma",
+                    "name": "Paragem de tróleibus / plataforma",
                     "terms": "paragem, plataforma, trolleybus, tróleibus, trólebus, tróleicarro, trólei"
                 },
                 "public_transport/station": {
                     "name": "Estação aérea"
                 },
                 "public_transport/station_bus": {
-                    "name": "Estação rodoviária / Terminal",
+                    "name": "Estação / terminal rodoviário",
                     "terms": "terminal, rodoviário, rodoviária, estação, paragem, autocarro, carreira, camionete, camioneta, ônibus, machimbombo, toca-toca, otocarro, microlete"
                 },
                 "public_transport/station_ferry": {
-                    "name": "Estação de Ferry / Terminal",
-                    "terms": "Ferry, Terminal de Ferry"
+                    "name": "Estação / terminal de ferry",
+                    "terms": "ferry, terminal de ferry, estação de ferry, estação, terminal"
                 },
                 "public_transport/station_light_rail": {
                     "name": "Estação de comboio ligeiro"
                     "terms": "estação de metro, estação, ferrovia, ferroviária, metro, metrô, metropolitano"
                 },
                 "public_transport/station_train": {
-                    "name": "Estação de Comboios",
-                    "terms": "Estação Ferroviária, Estação dos Caminhos de Ferro"
+                    "name": "Estação de comboios",
+                    "terms": "estação ferroviária, estação dos caminhos de ferro, estação, caminhos de ferro, ferrovia"
                 },
                 "public_transport/station_train_halt": {
-                    "name": "Apeadeiro Ferroviário",
-                    "terms": "Apeadeiro, Paragem de Comboio"
+                    "name": "Apeadeiro ferroviário",
+                    "terms": "apeadeiro, paragem de comboio, paragem"
                 },
                 "public_transport/station_tram": {
                     "name": "Estação de elétrico",
                     "terms": "paragem, autocarro, carreira, camionete, camioneta, ônibus, machimbombo, toca-toca, otocarro, microlete"
                 },
                 "public_transport/stop_position_ferry": {
-                    "name": "Localização de Paragem do Ferry",
+                    "name": "Localização de paragem do ferry",
                     "terms": "Ferry, Paragem do Ferry"
                 },
                 "public_transport/stop_position_light_rail": {
                     "name": "Local de paragem de metro"
                 },
                 "public_transport/stop_position_train": {
-                    "name": "Localização de Paragem do Comboio",
+                    "name": "Localização de paragem do comboio",
                     "terms": "Comboio, Paragem do Comboio"
                 },
                 "public_transport/stop_position_tram": {
                     "terms": "Carris Abandonados, Linha de Carris Abandonados"
                 },
                 "railway/buffer_stop": {
-                    "name": "Pára-choques Ferroviário",
+                    "name": "Pára-choques ferroviário",
                     "terms": "Buffer Stop, pára-choque, para-choque, Para-choque de via"
                 },
                 "railway/crossing": {
                     "terms": "Railway Crossing, passagem de nível"
                 },
                 "railway/derail": {
-                    "name": "Descarrilador Ferroviário",
+                    "name": "Descarrilador ferroviário",
                     "terms": "Railway Derailer. descarrilador, descarrilar"
                 },
                 "railway/disused": {
                     "terms": "Railway Crossing (Road)"
                 },
                 "railway/light_rail": {
-                    "name": "Metro Ligeiro",
+                    "name": "Metro ligeiro",
                     "terms": "Metrô leve, metro ligeiro, metropolitano de superfície, veículo leve sobre trilhos, comboio ligeiro"
                 },
                 "railway/milestone": {
-                    "name": "Marco Quilométrico Ferroviário",
+                    "name": "Marco quilométrico ferroviário",
                     "terms": "Railway Milestone, marco quilométrico"
                 },
                 "railway/miniature": {
                     "terms": "Narrow Gauge Rail, Bitola Estreita, Via Métrica, Bitola Métrica"
                 },
                 "railway/platform": {
-                    "name": "Paragem de comboio / Plataforma"
+                    "name": "Paragem de comboio / plataforma"
                 },
                 "railway/rail": {
                     "name": "Ferrovia",
                     "terms": "Rail, Linha Férrea, Caminho de ferro, Caminhos de ferro, Carril, Carris, via férrea, estrada-de-ferro, ferrovia"
                 },
                 "railway/signal": {
-                    "name": "Sinal Ferroviário",
+                    "name": "Sinal ferroviário",
                     "terms": "Railway Signal, semáforo ferroviário, semáforo, sinalização, sinal"
                 },
                 "railway/station": {
                     "terms": "Entrada do Metro, Metro, Metropolitano, Subterrâneo"
                 },
                 "railway/switch": {
-                    "name": "Agulha de Ferrovia",
+                    "name": "Agulha de ferrovia",
                     "terms": "Railway Switch, Switch, aparelho de mudança de via, AMV, agulha, agulheta"
                 },
                 "railway/train_wash": {
-                    "name": "Lavagem de Comboios",
+                    "name": "Lavagem de comboios",
                     "terms": "Train Wash, lavadora de comboios, lavadora, lavagem"
                 },
                 "railway/tram": {
                 },
                 "relation": {
                     "name": "Relação",
-                    "terms": "Relação"
+                    "terms": "relation, relação, relações"
                 },
                 "roundabout": {
                     "name": "Rotunda"
                 },
                 "route/ferry": {
                     "name": "Rota de barca / ferry",
-                    "terms": "Rota do Ferry"
+                    "terms": "rota do ferry, rota, ferry, percurso, viagem"
                 },
                 "seamark": {
                     "name": "Seamark"
                     "terms": "Antiques Shop, Antiguidade, Antiguidades, Antigo, Relíquia, Relíquias"
                 },
                 "shop/appliance": {
-                    "name": "Loja de Electrodomésticos",
+                    "name": "Loja de eletrodomésticos",
                     "terms": "eletrodoméstico, electrodoméstico, frigorífico, máquina"
                 },
                 "shop/art": {
-                    "name": "Loja de Artes",
+                    "name": "Loja de artes",
                     "terms": "Artesanato, Decoração, Objetos artísticos, Objetos decorativos, Quadros, Pintura,"
                 },
                 "shop/baby_goods": {
                     "terms": "Car Repair Shop, Oficina, Reparação, Reparações, Automóvel, Automóveis"
                 },
                 "shop/caravan": {
-                    "name": "Vendedor de Caravanas",
+                    "name": "Vendedor de caravanas",
                     "terms": "trailer, motocasa, caravana, auto-caravana, autocaravana, caravanismo, rulote, rolote, motorhome, concessionário, concessionária"
                 },
                 "shop/carpet": {
                     "terms": "Candy Store, Loja de Gomas, Bolos, Doces"
                 },
                 "shop/convenience": {
-                    "name": "Mini-mercado / Loja de conveniência",
+                    "name": "Mini-mercado / loja de conveniência",
                     "terms": "Pequena loja, Loja de esquina, Compras, Loja, Alimentar, Alimentos, Loja de posto de combustível, Minimercado, Mini Mercado"
                 },
                 "shop/copyshop": {
                     "terms": "Dry Cleaner, Lavar a seco, Lavar-a-seco, seco"
                 },
                 "shop/e-cigarette": {
-                    "name": "Loja de Cigarros Eletrónicos",
+                    "name": "Loja de cigarros eletrónicos",
                     "terms": "E-Cigarette, E-Cigarro, E-Cig, Cigarro Eletrónico, Cigarro Eletrônico"
                 },
                 "shop/electronics": {
                     "terms": "Eletrónica de consumo, Aspirador, televisão, máquina de lavar, frigorífico, Eletrodoméstico, Eletro-doméstico"
                 },
                 "shop/erotic": {
-                    "name": "Sex Shop",
+                    "name": "Sex shop",
                     "terms": "Erotic Store, Artigos Eróticos, Erótico, Eróticos, Sex"
                 },
                 "shop/fabric": {
                     "terms": "comida congelada, congelado, congelados, congelada, comida, alimento"
                 },
                 "shop/fuel": {
-                    "name": "Loja de Combustíveis",
+                    "name": "Loja de combustíveis",
                     "terms": "combustível,querosene,butano,propano"
                 },
                 "shop/funeral_directors": {
                     "terms": "Garden Center, Flores, Artigos para jardinagem, Jardinagem, Jardinajem"
                 },
                 "shop/gas": {
-                    "name": "Loja de Botijas de Gás",
+                    "name": "Loja de botijas de gás",
                     "terms": "gás, botija, propano, gpl, bilha, redutor, garrafa, recarga, fogão"
                 },
                 "shop/gift": {
                 },
                 "shop/hairdresser": {
                     "name": "Cabeleireiro(a)",
-                    "terms": "Hairdresser, cabeleireira, cabeleireiro, Salão, Barbeiro, Barbearia, Cabelo, Corte"
+                    "terms": "hairdresser, cabeleireira, cabeleireiro, salão, barbeiro, barbearia, cabelo, corte"
                 },
                 "shop/hairdresser_supply": {
                     "name": "Loja de suprimentos de cabeleireiro",
                 },
                 "shop/pet": {
                     "name": "Loja de animais",
-                    "terms": "Loja de Animais"
+                    "terms": "loja de animais, animais, animal, cães, gatos, peixes"
                 },
                 "shop/pet_grooming": {
                     "name": "Loja de cuidados com animais de estimação",
-                    "terms": "Loja de cuidados com animais de estimação"
+                    "terms": "Loja de cuidados com animais de estimação, animais, animal, gato, gatos, cão, cães, peixe, peixes"
                 },
                 "shop/photo": {
                     "name": "Loja de fotografia",
                 },
                 "shop/second_hand": {
                     "name": "Loja de produtos em segunda mão",
-                    "terms": "Consignment/Thrift Store, Loja de Consignação, 2ª mão, usados, usado"
+                    "terms": "consignment, thrift store, loja de consignação, 2ª mão, usados, usado, segunda mão, consignação"
                 },
                 "shop/sewing": {
-                    "name": "Loja de suprimentos de costura",
-                    "terms": "Loja de suplementos de costura"
+                    "name": "Retroseria",
+                    "terms": "Loja de suplementos de costura, costura, retroseria, retrosaria, retrozeria, retrozaria, retrozeiro, retroseiro, retrozeira, retroseira, linhas,croché, agulhas, costurar"
                 },
                 "shop/shoes": {
                     "name": "Sapataria",
                     "terms": "Stationery Store, Loja de Material de Escritório"
                 },
                 "shop/storage_rental": {
-                    "name": "Aluguer de Armazéns",
+                    "name": "Aluguer de armazéns",
                     "terms": "Estoque, Armazenamento, Depósito, Armazém"
                 },
                 "shop/supermarket": {
-                    "name": "Supermercado / Hipermercado",
+                    "name": "Supermercado / hipermercado",
                     "terms": "Hiper-mercado, Hiper mercado, Super-mercado, Super mercado, Compras, Loja, Alimentar, Alimentos"
                 },
                 "shop/tailor": {
                     "terms": "Ticket Seller, Bilheteria, Bilhete, Ingresso"
                 },
                 "shop/tiles": {
-                    "name": "Loja de Tijoleiras",
+                    "name": "Loja de tijoleiras",
                     "terms": "Tijoleira, Azulejo, Ladrilho"
                 },
                 "shop/tobacco": {
                 },
                 "shop/toys": {
                     "name": "Loja de brinquedos",
-                    "terms": "Loja de Brinquedos"
+                    "terms": "brinquedos, toys, brincar"
                 },
                 "shop/trade": {
                     "name": "Loja de materiais de construção civil",
                     "terms": "espingardaria, Loja de Armas, Caça"
                 },
                 "shop/wholesale": {
-                    "name": "Loja Grossista",
+                    "name": "Loja grossista",
                     "terms": "grossista, atacado, revendedor, revenda"
                 },
                 "shop/window_blind": {
                     "terms": "wine shop, loja de licor, bebidas alcoolicas, bebidas, alcool, álcool, vinho, vinhos, garrafeira, branco, tinto, rosé, champanhe, xampanhe"
                 },
                 "tourism": {
-                    "name": "Turismo",
-                    "terms": "hotelaria"
+                    "name": "Turismo"
                 },
                 "tourism/alpine_hut": {
                     "name": "Albergue de montanha",
                     "terms": "ponto turístico, turismo, atração turística, atração, atracção"
                 },
                 "tourism/camp_site": {
-                    "name": "Parque de Campismo",
+                    "name": "Parque de campismo",
                     "terms": "acampamento, parque, campismo, campistas, acampar"
                 },
                 "tourism/caravan_site": {
-                    "name": "Parque de Caravanas",
+                    "name": "Parque de caravanas",
                     "terms": "RV Park, caravanas, caravana"
                 },
                 "tourism/chalet": {
-                    "name": "Chalé / Casa de férias",
+                    "name": "Chalé / casa de férias",
                     "terms": "Chalet"
                 },
                 "tourism/gallery": {
                     "terms": "Centro Cultural, Galeria, Exposição, Arte"
                 },
                 "tourism/guest_house": {
-                    "name": "Hospedagem Domiciliar/Casa de Hóspedes",
+                    "name": "Hospedagem domiciliar / casa de hóspedes",
                     "terms": "casa de hóspedes, Cama e Pequeno Almoço, Cama e Peq. Almoço, Cama e Almoço, albergaria, hospedaria, pensão"
                 },
                 "tourism/hostel": {
-                    "name": "Pousada / Hostel",
-                    "terms": "Hostel"
+                    "name": "Pousada / hostel",
+                    "terms": "hostel, ostel, hospedaria, ospedaria, pousada, pousadas, pousada da juventude, pousadas da juventude"
                 },
                 "tourism/hotel": {
                     "name": "Hotel",
                     "terms": "Informação, Turismo, guia"
                 },
                 "tourism/information/board": {
-                    "name": "Placar de Informação",
+                    "name": "Placar de informação",
                     "terms": "painel de informação, placa de informação, informação, informações, painel, placar, placard, placa, painel informativo"
                 },
                 "tourism/information/guidepost": {
                     "terms": "Esquema, planta, carta"
                 },
                 "tourism/information/office": {
-                    "name": "Posto de Turismo",
+                    "name": "Posto de turismo",
                     "terms": "Posto de Turismo, Posto Turístico, Posto de Informação, Posto de Informações"
                 },
                 "tourism/motel": {
                     "terms": "Lugar de Merendas"
                 },
                 "tourism/theme_park": {
-                    "name": "Parque de Diversões/Temático",
+                    "name": "Parque de diversões / temático",
                     "terms": "Theme Park, Parque, Diversão, Temático, Parque temático"
                 },
                 "tourism/trail_riding_station": {
                     "terms": "Vista, ponto de vista, mirante, paisagem,"
                 },
                 "tourism/wilderness_hut": {
-                    "name": "Abrigo Remoto",
+                    "name": "Abrigo remoto",
                     "terms": "Cabana, Abrigo de montanha, cabana de montanha"
                 },
                 "tourism/zoo": {
                     "terms": "pequena lomba"
                 },
                 "traffic_calming/chicane": {
-                    "name": "Gincana de Tráfego",
+                    "name": "Gincana de tráfego",
                     "terms": "gincana, medidas acalmia de tráfego, acalmia de tráfego"
                 },
                 "traffic_calming/choker": {
-                    "name": "Estreitamento da Via",
+                    "name": "Estreitamento da via",
                     "terms": "estreita, estreitamento"
                 },
                 "traffic_calming/cushion": {
-                    "name": "Lomba de Almofada",
+                    "name": "Lomba de almofada",
                     "terms": "lomba tipo almofada"
                 },
                 "traffic_calming/dip": {
                     "terms": "Lomba, grande lomba"
                 },
                 "traffic_calming/island": {
-                    "name": "Ilha Rodoviária",
+                    "name": "Ilha rodoviária",
                     "terms": "ilha de estrada, ilha na estrada, ilha central"
                 },
                 "traffic_calming/rumble_strip": {
                     "terms": "Rumble Strip, banda cromática"
                 },
                 "traffic_calming/table": {
-                    "name": "Lomba Comprida (+3m)",
+                    "name": "Lomba comprida (+3m)",
                     "terms": "lomba, table, mesa"
                 },
                 "traffic_sign": {
                     "terms": "frente, viragem, virar, sentido obrigatório"
                 },
                 "type/restriction/only_u_turn": {
-                    "name": "Apenas meia volta",
-                    "terms": "Apenas meia volta"
+                    "name": "Apenas inversão de marcha",
+                    "terms": "apenas meia-volta, meia volta, meia-volta, inversão, inversão do sentido de marcha, inversão de marcha"
                 },
                 "type/route": {
                     "name": "Rota",
                     "terms": "Site"
                 },
                 "type/waterway": {
-                    "name": "Curso de Ã\81gua",
+                    "name": "Curso de Ã¡gua",
                     "terms": "Hidrovia, Curso, Rio, Canal, levada, ribeiro, ribeira, córrego, área inundável, inundável, inundada, bacia, hidrologia, hídrica,"
                 },
                 "vertex": {
                     "terms": "Dam, Usina, Hidrelétrica, Hidroelétrica, Hidro-elétrica, Hidro elétrica"
                 },
                 "waterway/ditch": {
-                    "name": "Fosso / Vala / Trincheira",
+                    "name": "Fosso / vala / trincheira",
                     "terms": "Vala, Trincheira, Represa"
                 },
                 "waterway/dock": {
                     "terms": "Corga, Corgo, Córrego, Curso de Água, Fio de Água, Grota, Regato, Rego, Riacho, Riachinho, Ribeira, Ribeiro"
                 },
                 "waterway/stream_intermittent": {
-                    "name": "Ribeiro Intermitente",
+                    "name": "Ribeiro intermitente",
                     "terms": "Corga, Corgo, Córrego, Curso de Água, Fio de Água, Grota, Regato, Rego, Riacho, Riachinho, Ribeira, Ribeiro, intermitente, sazonal"
                 },
                 "waterway/water_point": {
                     "terms": "água potável barcos, água embarcação, água potável marina,"
                 },
                 "waterway/waterfall": {
-                    "name": "Queda de Ã\81gua",
+                    "name": "Queda de Ã¡gua",
                     "terms": "queda-de-águia, queda-d'água, cascata, salto, catarata, cachoeira, catadupa"
                 },
                 "waterway/weir": {
index 3eedb58d1669cafdd5eabffa50c9918e3e604db9..1a953f43a460cd2a64b284ad0c60ba2f4d7e2444 100644 (file)
             "locating": "Localizare, te rugăm să aștepți..."
         },
         "inspector": {
-            "no_documentation_combination": "Nu este documentație disponibilă pentru combinația de tag-uri (cuvinte cheie)",
-            "no_documentation_key": "Nu este documentație pentru această cheie.",
             "show_more": "Arată mai mult",
             "view_on_osm": "Vezi pe openstreetmap.org",
             "all_fields": "Toate câmpurile",
             "role": "Rol",
             "choose": "Selectează tip de obiect",
             "results": "{n} rezultate pentru {search}",
-            "reference": "Vezi pe OpenStreetMap Wiki",
             "back_tooltip": "Schimbă trăsătură",
             "remove": "Şterge",
             "search": "Caută",
                 "description": "Căi Ferate",
                 "tooltip": "Căi Ferate"
             },
-            "past_future": {
-                "description": "Trecut/Viitor"
-            },
             "others": {
-                "description": "Altele",
                 "tooltip": "Orice Altceva"
             }
         },
             "on_wiki": "{tag} pe wiki.osm.org",
             "used_with": "folosit cu {type}"
         },
-        "validations": {
-            "disconnected_highway": "Drum deconectat",
-            "untagged_point": "Punct neetichetat",
-            "untagged_line": "Linie fară tag-uri (cuvinte cheie)",
-            "untagged_area": "Suprafața fară tag-uri",
-            "untagged_relation": "Relație fără taguri",
-            "tag_suggests_area": "Tag-ul {tag} sugerează că linia trebuie sa fie o suprafață, dar nu e.",
-            "deprecated_tags": "Tag-uri învechite: {tags}"
-        },
         "mapillary": {
             "view_on_mapillary": "Vezi această imagine pe Mapillary"
         },
                 "category-building": {
                     "name": "Clădiri"
                 },
-                "category-golf": {
-                    "name": "Golfuri"
-                },
                 "category-landuse": {
                     "name": "Utilizări de Teren"
                 },
                     "label": "Tip"
                 },
                 "website": {
-                    "label": "Website",
-                    "placeholder": "http://example.com/"
+                    "label": "Website"
                 },
                 "wetland": {
                     "label": "Tip"
                 "building/terrace": {
                     "name": "Case în Rând"
                 },
-                "building/train_station": {
-                    "name": "Gară"
-                },
                 "building/university": {
                     "name": "Universitate"
                 },
index e9faa21ff0069c99f705dfb6165d002205379ee8..53edf238231308d2f8e8bf115b9f82964f3dd209 100644 (file)
             "zoom_to": {
                 "key": "Z"
             },
-            "no_documentation_combination": "Для этой комбинации ключа и значения нет описания",
-            "no_documentation_key": "Для этого ключа нет описания",
             "show_more": "Ещё",
             "view_on_osm": "Посмотреть на openstreetmap.org",
             "all_fields": "Все поля",
             "role": "Роль",
             "choose": "Что это за объект?",
             "results": "{n} результатов для {search}",
-            "reference": "Посмотреть в OpenStreetMap Wiki",
             "back_tooltip": "Изменить объект",
             "remove": "Удалить",
             "search": "Поиск",
                 "tooltip": "Линии электропередач, электростанции, подстанции и т.д."
             },
             "past_future": {
-                "description": "Бывшие/Будущие",
                 "tooltip": "Проекты, строительство, заброшенные, разрушенные объекты и т.д."
             },
             "others": {
-                "description": "Другое",
                 "tooltip": "Всё остальное"
             }
         },
             "on_wiki": "{tag} в wiki.osm.org",
             "used_with": "ставится на {type}"
         },
-        "validations": {
-            "disconnected_highway": "Несоединенные дороги",
-            "disconnected_highway_tooltip": "Дороги должны быть соединены с другими дорогами или с входами в здания.",
-            "old_multipolygon": "Теги мультиполигона на внешнем контуре",
-            "old_multipolygon_tooltip": "Такой вид мультиполигона устарел. Пожалуйста, назначьте теги отношению, а не внешнему контуру.",
-            "untagged_point": "Точка без тегов",
-            "untagged_point_tooltip": "Выберите тип объекта, который описывает, чем является эта точка.",
-            "untagged_line": "Линия без тегов",
-            "untagged_line_tooltip": "Выберите тип объекта, который описывает, чем является эта линия.",
-            "untagged_area": "Полигон без тегов",
-            "untagged_area_tooltip": "Выберите тип объекта, который описывает, чем является этот полигон.",
-            "untagged_relation": "Отношение без тегов",
-            "untagged_relation_tooltip": "Выберите тип объекта, который описывает, чем является это отношение.",
-            "many_deletions": "Вы удаялете {n} объектов: {p} точек, {l} линий, {a} полигонов, {r} отошений. Вы уверены, что хотите сделать это? Это приведёт к удалению их с карты, которые все видят на openstreetmap.org.",
-            "tag_suggests_area": "Тег {tag} обычно ставится на полигоны, но это не полигон",
-            "deprecated_tags": "Теги устарели: {tags}"
-        },
         "zoom": {
             "in": "Приблизить",
             "out": "Отдалить"
                 "category-building": {
                     "name": "Здания"
                 },
-                "category-golf": {
-                    "name": "Гольф-объекты"
-                },
                 "category-landuse": {
                     "name": "Объекты землепользования"
                 },
                         "underground": "Подземная"
                     }
                 },
-                "passenger_information_display": {
-                    "label": "Табло прибытия/отправления"
-                },
                 "payment_multi": {
                     "label": "Способы оплаты"
                 },
                     "label": "Тип"
                 },
                 "website": {
-                    "label": "Веб-сайт",
-                    "placeholder": "http://example.com/"
+                    "label": "Веб-сайт"
                 },
                 "wetland": {
                     "label": "Тип"
                     "name": "Ряд из примыкающих домов",
                     "terms": "рядный дом"
                 },
-                "building/train_station": {
-                    "name": "Железнодорожный вокзал"
-                },
                 "building/transportation": {
                     "name": "Здание транспортного терминала/вокзал"
                 },
                     "name": "Лунка",
                     "terms": "Лунка для гольфа"
                 },
-                "golf/lateral_water_hazard_area": {
-                    "name": "Водная преграда сбоку"
-                },
-                "golf/lateral_water_hazard_line": {
-                    "name": "Водная преграда сбоку"
-                },
                 "golf/rough": {
                     "name": "Раф",
                     "terms": "Неровная площадка, Высокая трава"
                     "name": "Стартовая площадка",
                     "terms": "Стартовая площадка, Стартовая зона"
                 },
-                "golf/water_hazard_area": {
-                    "name": "Водная преграда"
-                },
-                "golf/water_hazard_line": {
-                    "name": "Водная преграда"
-                },
                 "healthcare": {
                     "name": "Медицинские учреждения"
                 },
                     "terms": "виноградник"
                 },
                 "leisure": {
-                    "name": "Место отдыха",
-                    "terms": "Территории для отдыха"
+                    "name": "Место отдыха"
                 },
                 "leisure/adult_gaming_centre": {
                     "name": "Игровые автоматы (азартные, на деньги)"
                     "terms": "Линия"
                 },
                 "man_made": {
-                    "name": "Рукотворное",
-                    "terms": "рукотворное"
+                    "name": "Рукотворное"
                 },
                 "man_made/adit": {
                     "name": "Штольня",
                     "name": "Люк к телекоммуникационным сетям"
                 },
                 "natural": {
-                    "name": "Природа",
-                    "terms": "Природные объекты"
+                    "name": "Природа"
                 },
                 "natural/bare_rock": {
                     "name": "Голые скалы"
                     "name": "Отдельный трансформатор",
                     "terms": "трансформатор"
                 },
-                "public_transport/linear_platform": {
-                    "name": "Платформа",
-                    "terms": "платформа, место ожидания транспорта, общественный транспорт"
-                },
-                "public_transport/linear_platform_aerialway": {
-                    "name": "Платформа канатной дороги"
-                },
-                "public_transport/linear_platform_bus": {
-                    "name": "Автобусная платформа"
-                },
-                "public_transport/linear_platform_ferry": {
-                    "name": "Пристань для парома",
-                    "terms": "пристань, причал, пирс, паром, платформа, общественный транспорт"
-                },
-                "public_transport/linear_platform_light_rail": {
-                    "name": "Платформа легкорельсового транспорта"
-                },
-                "public_transport/linear_platform_monorail": {
-                    "name": "Платформа монорельса"
-                },
-                "public_transport/linear_platform_subway": {
-                    "name": "Платформа метро"
-                },
-                "public_transport/linear_platform_train": {
-                    "name": "Железнодорожная платформа"
-                },
-                "public_transport/linear_platform_tram": {
-                    "name": "Трамвайная платформа"
-                },
-                "public_transport/linear_platform_trolleybus": {
-                    "name": "Троллейбусная платформа"
-                },
                 "public_transport/platform": {
                     "name": "Платформа"
                 },
                     "terms": "вино, вина"
                 },
                 "tourism": {
-                    "name": "Туризм",
-                    "terms": "Туризм, Отдых, Путешествия"
+                    "name": "Туризм"
                 },
                 "tourism/alpine_hut": {
                     "name": "Горный приют",
index 3486124f822a246e2866e217a03bcd2d8777fbca..e4daa1e537b83df7907f75413ae97ba32cb8a900 100644 (file)
             "title": "මගේ ස්ථානය පෙන්වන්න"
         },
         "inspector": {
-            "no_documentation_combination": "මෙම සටහන් පත සදහා විස්තරක් අඩන්ගු නොවේ",
-            "no_documentation_key": "මෙම යතුර සදහා විස්තරයක් නොමැත",
             "show_more": "තව පෙන්වන්න",
             "view_on_osm": "openstreetmap.org හි පෙන්වන්න",
             "all_tags": "සියලු සටහන්පත්",
             "role": "භූමිකාව",
             "choose": "ලක්ෂණයෙහි වර්ගය තෝරන්න",
             "results": "{search} සෙවුම සදහා ප්‍රතිපල {n} ඇත",
-            "reference": "OpenStreetMap Wiki හි පෙන්නවන්න",
             "back_tooltip": "ලක්ෂණ වෙනස් කරන්න",
             "remove": "ඉවත් කරන්න",
             "search": "සොයන්න",
                 "tooltip": "විදුලි සැපයුම්, බලාගාර, උප බලාගාර ආදී"
             },
             "past_future": {
-                "description": "අතීත/අනාගත",
                 "tooltip": "යෝජිත, ඉදිකෙරිමින් පවතින ,අතහැර දැමු , විනාශකරන ලද , ආදී"
             },
             "others": {
-                "description": "වෙනත්",
                 "tooltip": "හැම දෙයක්ම"
             }
         },
             "on_wiki": "on wiki.osm.org මත {tag} ",
             "used_with": "{type} බවිත කර ඇත"
         },
-        "validations": {
-            "untagged_point": "සටහනක් නොයෙදූ ලක්ෂයක්",
-            "untagged_line": "සටහනක් නොයෙදූ රේකාවක්",
-            "untagged_area": "සටහනක් නොයෙදූ ප්‍රදේශයක්",
-            "deprecated_tags": "{tags} : බාවිතයෙන් ඉවත් කර ඇත"
-        },
         "help": {
             "title": "සහය"
         },
index 5f1c5cce0ccf847c3ff810f96503e5423f689c41..df2c3d8bb66e121955bb466b2395408461562b7e 100644 (file)
             "locating": "Lokalizuje sa. Prosím, čakajte..."
         },
         "inspector": {
-            "no_documentation_combination": "Pre túto kombináciu označenia nie je dostupná dokumentácia",
-            "no_documentation_key": "Pre toto označenie nie je dostupná dokumentácia",
             "show_more": "Zobraziť viac",
             "view_on_osm": "Zobraziť na openstreetmap.org",
             "all_fields": "Všetky polia",
             "role": "Rola",
             "choose": "Zvoľte typ objektu",
             "results": "{n} výsledkov pre {search}",
-            "reference": "Zobraziť na Wiki OpenStreetMap",
             "back_tooltip": "Zmeň typ objektu",
             "remove": "Odstráň",
             "search": "Hľadaj",
                 "tooltip": "Elektrické vedenia, elektrárne, transformátory, atď."
             },
             "past_future": {
-                "description": "Bývalý/Budúci objekt",
                 "tooltip": "Navrhovaný, vo výstavbe, opustený, zbúraný, atď."
             },
             "others": {
-                "description": "Iné objekty",
                 "tooltip": "Všetko ostané"
             }
         },
             "on_wiki": "{tag} na wiki.osm.org",
             "used_with": "použité s {type}"
         },
-        "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_line_tooltip": "Vyberte typ objektu, ktorý popisuje, čo je táto línia.",
-            "untagged_area": "Neoznačená plocha",
-            "untagged_area_tooltip": "Vyberte typ objektu, ktorý popisuje, čo je táto plocha.",
-            "untagged_relation": "Neoznačená relácia",
-            "untagged_relation_tooltip": "Vyberte typ objektu, ktorý popisuje, čo je táto relácia.",
-            "tag_suggests_area": "Označenie {tag} predpokladá, že objekt by mal byť plochou a nie čiarou.",
-            "deprecated_tags": "Neschválené označenie: {tags}"
-        },
         "cannot_zoom": "V tomto móde nemožno viac oddialiť.",
         "full_screen": "Prepni na plnú obrazovku",
         "mapillary_images": {
                 "category-building": {
                     "name": "Objekty budov"
                 },
-                "category-golf": {
-                    "name": "Golfové objekty"
-                },
                 "category-landuse": {
                     "name": "Objekty využitia územia"
                 },
                     "label": "Typ"
                 },
                 "website": {
-                    "label": "Internetová stránka",
-                    "placeholder": "http://adresa.sk/"
+                    "label": "Internetová stránka"
                 },
                 "wetland": {
                     "label": "Typ"
                     "name": "Radová zástavba",
                     "terms": "radova zastavba,radovka"
                 },
-                "building/train_station": {
-                    "name": "Železničná stanica"
-                },
                 "building/university": {
                     "name": "Univerzitná budova",
                     "terms": "univerzitna budova,univerzita"
                     "terms": "krizovatka"
                 },
                 "landuse": {
-                    "name": "Využitie územia",
-                    "terms": "vuzitie uzemia, vyuzitie pody, využitie pôdy, krajina"
+                    "name": "Využitie územia"
                 },
                 "landuse/allotments": {
                     "name": "Komunitná záhrada",
                     "terms": "vinice,vinohrad,hrozno,víno,vino"
                 },
                 "leisure": {
-                    "name": "Oddych",
-                    "terms": "relax,volny cas,voľný čas"
+                    "name": "Oddych"
                 },
                 "leisure/adult_gaming_centre": {
                     "name": "Výherné automaty",
                     "terms": "ciara,cesta,trat,kanal,trasa,trať,trat"
                 },
                 "man_made": {
-                    "name": "Ľudský výtvor",
-                    "terms": "ludsky vytvor,artefakt,konštrukcia,konstrukcia,dielo,stavba,objekt,mechanizmus"
+                    "name": "Ľudský výtvor"
                 },
                 "man_made/adit": {
                     "name": "Štôlňa",
                     "terms": "závod,zavod,továreň,tovaren"
                 },
                 "natural": {
-                    "name": "Prírodné",
-                    "terms": "prirodne,prirodny,príroda,priroda"
+                    "name": "Prírodné"
                 },
                 "natural/bay": {
                     "name": "Zátoka",
                     "terms": "vinaren,vinoteka,vínotéka,vino,víno"
                 },
                 "tourism": {
-                    "name": "Turizmus",
-                    "terms": "turizmus,turistika,turisticke,turistické,hotel,motel,chata,muzeum,múzeum,atrakcia,zoo,park"
+                    "name": "Turizmus"
                 },
                 "tourism/alpine_hut": {
                     "name": "Vysokohorská chata",
index db83638b776d6194de66ff935fcce76a47c2ac6f..ba28500cb9a6148c55b1df8abc62f30683388686 100644 (file)
             "locating": "Poteka določevanje trenutne točke ..."
         },
         "inspector": {
-            "no_documentation_combination": "Za to kombinacijo oznak v dokumentaciji ni opisa",
-            "no_documentation_key": "Za ta ključ v dokumentaciji ni opisa",
             "show_more": "Pokaži več",
             "view_on_osm": "Odpri na openstreetmap.org",
             "all_fields": "Vsa polja",
             "role": "Vloga",
             "choose": "Izberite vrsto predmeta",
             "results": "{n} zadetkov iskanja {search}",
-            "reference": "Pokaži OSM Wiki",
             "back_tooltip": "Spremeni predmet",
             "remove": "Odstrani",
             "search": "Poišči",
                 "tooltip": "Električni daljnovodi, elektrarne, transformatorske postaje ..."
             },
             "past_future": {
-                "description": "Preteklo/Prihodnje",
                 "tooltip": "V načrtovanju, gradbišče, zapuščeno, zrušeno ..."
             },
             "others": {
-                "description": "Drugo",
                 "tooltip": "Vse ostalo"
             }
         },
             "on_wiki": "{tag} na wiki.osm.org",
             "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_tooltip": "Izberite vrsto predmeta, , ki ga ponazarja točko na zemljevidu.",
-            "untagged_line": "Črta je brez oznak",
-            "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.",
-            "tag_suggests_area": "Oznaka {tag} nakazuje, da črta opisovati območje, vendar pa ni sklenjena",
-            "deprecated_tags": "Zastarele oznake: {tags}"
-        },
         "zoom": {
             "in": "Približaj",
             "out": "Oddalji"
                 "category-building": {
                     "name": "Vrste zgradbe"
                 },
-                "category-golf": {
-                    "name": "Igrišča za golf"
-                },
                 "category-landuse": {
                     "name": "Vrsta zemljišča"
                 },
                     "label": "Vrsta"
                 },
                 "website": {
-                    "label": "Spletno mesto",
-                    "placeholder": "http://example.com/"
+                    "label": "Spletno mesto"
                 },
                 "wetland": {
                     "label": "Vrsta"
                     "name": "Vrstne hiše",
                     "terms": "vrstna hiša"
                 },
-                "building/train_station": {
-                    "name": "Želežniška postaja"
-                },
                 "building/university": {
                     "name": "Univerzitetna stavba",
                     "terms": "univerza,višja šola,kolidž,akademija"
                     "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"
                     "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": {
                     "name": "Zdravstvo",
                     "terms": "zdravilstvo,zdravljenje,zdravje,bolezen,operacija,klinika,zdravnik"
                     "terms": "zidanica"
                 },
                 "leisure": {
-                    "name": "Prosti čas",
-                    "terms": "rekreacija,turizem"
+                    "name": "Prosti čas"
                 },
                 "leisure/adult_gaming_centre": {
                     "name": "Igralnica za odrasle",
                     "terms": "linija,daljica,lomljenka"
                 },
                 "man_made": {
-                    "name": "Antropogena konstrukcija",
-                    "terms": "druge konstrukcije"
+                    "name": "Antropogena konstrukcija"
                 },
                 "man_made/adit": {
                     "name": "Vodoravni rudniški rov ",
                     "name": "Odtočni kanal"
                 },
                 "natural": {
-                    "name": "Naravna prvina",
-                    "terms": "naravno"
+                    "name": "Naravna prvina"
                 },
                 "natural/bare_rock": {
                     "name": "Skalovje",
                     "terms": "kletarstvo,vinska klet,vinotoč"
                 },
                 "tourism": {
-                    "name": "Turizem",
-                    "terms": "turistične storitve"
+                    "name": "Turizem"
                 },
                 "tourism/alpine_hut": {
                     "name": "Planinska koča",
index c7f58ae547f0f69d5f4cb7808f8aa480decffd7b..25f2a11b61c2475b4832d92d6570ec4795192502 100644 (file)
             "all_tags": "Dhammaan taxanbayaasha",
             "all_relations": "Dhammaan xiriirada",
             "choose": "Dooro nooca tilmaamaha",
-            "reference": "Ka eeg Wiki OpenStreetMap",
             "search": "Raadi",
             "feature_list": "Tilmaamaha Waydiimaha",
             "edit": "Tifaftir tilmaamaha",
                 "power/line": {
                     "name": "Khadka Korantada"
                 },
-                "public_transport/linear_platform_bus": {
-                    "name": "Boostaajo"
-                },
                 "public_transport/platform_bus": {
                     "name": "Boostaajo"
                 },
index a9b55f110f70b6a18e8f1f56c820da77e29fae0f..502e5f0a47f7393aea4dccfbbb5ab8321e93d400 100644 (file)
             "title": "Shfaq Vendndodhjen Time"
         },
         "inspector": {
-            "no_documentation_combination": "Nuk ka dokumentim disponueshëm për këtë kombinin etiketave",
-            "no_documentation_key": "Nuk ka dokumentim disponueshëm për këte çelës",
             "show_more": "Paraqit më tepër",
             "view_on_osm": "Shiko në openstreetmap.org",
             "all_fields": "Të gjithë fushat",
             "role": "Rol",
             "choose": "Zgjidhni llojën e tiparit",
             "results": "{n} rezultate për {search}",
-            "reference": "Shiko në OpenStreetMap Wiki",
             "back_tooltip": "Ndrysho tiparin",
             "remove": "Hiq",
             "search": "Kërko",
                 "tooltip": "Hekurudhat"
             },
             "others": {
-                "description": "Të tjera",
                 "tooltip": "Çdo gjë tjetër"
             }
         },
             "on_wiki": "{tag} në wiki.osm.org",
             "used_with": "përdorur me {type}"
         },
-        "validations": {
-            "disconnected_highway": "Hekurudhë e shkëputur",
-            "disconnected_highway_tooltip": "Rrugët duhet të lidhen me rrugë të tjera ose me hyrjet e ndërtesave.",
-            "untagged_point": "Pikë e paetiketuar",
-            "untagged_point_tooltip": "Përgjidhni një karakteristikë që përshkruan çfarë është kjo pikë.",
-            "untagged_line": "Vijë e paetiketuar",
-            "untagged_line_tooltip": "Përgjidhni një karakteristikë që përshkruan çfarë është kjo vijë.",
-            "untagged_area": "Sipërfaqe e paetiketuar",
-            "untagged_area_tooltip": "Përgjidhni një karakteristikë që përshkruan çfarë është kjo sipërfaqe.",
-            "untagged_relation": "Lidhje e paetiketuar",
-            "untagged_relation_tooltip": "Përzgjidhni një karakteristikë që përshkruan se çfarë është kjo lidhje.",
-            "many_deletions": "Ju po fshini {n} karakteristika: {p} nyje, {l} vija, {a} sipërfaqe, {r} lidhje. Jeni të sigurtë që doni ta baëni këtë? Kjo do fshihet nga harta që çdo përdorues shikon në openstreetmap.org.",
-            "tag_suggests_area": "Etiketa {tag} sugjeron se vija duhet të jetë sipërfaqe, por nuk është e tillë."
-        },
         "zoom": {
             "in": "Zmadhoni",
             "out": "Zvogëloni"
index 5207fe58df05540a6ca5bb16b833716b61277691..ccfe6536184bbc7e0b35b44b21f032a3354d1282 100644 (file)
             "locating": "Одређивање положаја, молимо сачекајте..."
         },
         "inspector": {
-            "no_documentation_combination": "Не постоји доступна документација за ову комбинацију ознака",
-            "no_documentation_key": "Не постоји доступна документација за овај кључ",
             "show_more": "Прикажи још",
             "view_on_osm": "Прикажи на openstreetmap.org",
             "all_fields": "Сва поља",
             "role": "Улога",
             "choose": "Изаберите тип обележја",
             "results": "{n} резултата за {search}",
-            "reference": "Прикажи на Опенстреетмап викију",
             "back_tooltip": "Измените објекат",
             "remove": "Уклони",
             "search": "Претрага",
                 "tooltip": "Далеководи, електране, трафо-станице итд"
             },
             "past_future": {
-                "description": "Прошло/будуће",
                 "tooltip": "Предложено, изграђено, напуштено, срушено итд."
             },
             "others": {
-                "description": "Остало",
                 "tooltip": "Све остало"
             }
         },
             "on_wiki": "{tag} на wiki.osm.org",
             "used_with": "користи се са {type}"
         },
-        "validations": {
-            "disconnected_highway": "Раздвојен ауто-пут",
-            "disconnected_highway_tooltip": "Путеви би требало да буду повезани са другим путевима или улазима у зграду.",
-            "untagged_point": "Неозначени чвор",
-            "untagged_point_tooltip": "Изаберите врсту обележја која описује шта овај чвор представља.",
-            "untagged_line": "Неозначена путања",
-            "untagged_line_tooltip": "Изаберите врсту обележја која описује шта ова линија представља.",
-            "untagged_area": "Неозначена област",
-            "untagged_area_tooltip": "Изаберите врсту обележја која описује шта ова област представља.",
-            "untagged_relation": "Неозначени однос",
-            "untagged_relation_tooltip": "Изаберите врсту обележја која описује шта овај однос представља.",
-            "tag_suggests_area": "Ознака {ознака} указује да би линија требало да буде област, али није област",
-            "deprecated_tags": "Застареле ознаке: {tags}"
-        },
         "cannot_zoom": "Не можете даље умањивати у тренутном режиму.",
         "full_screen": "Укључи / искључи приказ на целом екрану",
         "streetside": {
                 "category-building": {
                     "name": "Грађевине"
                 },
-                "category-golf": {
-                    "name": "Голф терени"
-                },
                 "category-landuse": {
                     "name": "Намене земљишта"
                 },
                     "label": "Врста"
                 },
                 "website": {
-                    "label": "Сајт",
-                    "placeholder": "http://primer.com/"
+                    "label": "Сајт"
                 },
                 "wetland": {
                     "label": "Врста"
                 "building/terrace": {
                     "name": "Куће у низу"
                 },
-                "building/train_station": {
-                    "name": "Железничка станица"
-                },
                 "building/university": {
                     "name": "Универзитетска зграда"
                 },
                     "name": "Раскршће"
                 },
                 "landuse": {
-                    "name": "Намена земљишта",
-                    "terms": "намена земљишта,коришћење земљишта,употреба земљишта"
+                    "name": "Намена земљишта"
                 },
                 "landuse/basin": {
                     "name": "Слив"
index a3277aec4265f172eae6dc19e2555f334c6f0e53..3d7e84c791f2591656d3a109212652442248d763 100644 (file)
                 "restriction": "Dessa objekt kan inte sammanfogas då det kommer att skada en relation av typen \"{relation}\".",
                 "relation": "Dessa objekt kan inte sammanfogas då de har motstridiga relationsroller.",
                 "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."
+                "conflicting_tags": "Dessa objekt kan inte sammanfogas då några av dess taggar har motstridiga värden.",
+                "paths_intersect": "Dessa objekt kan inte sammanfogas då den resulterande vägen skulle korsa sig själv. "
             },
             "move": {
                 "title": "Flytta",
             "modified": "Ändrat",
             "deleted": "Raderat",
             "created": "Skapat",
+            "outstanding_errors_message": "Rätta till alla fel först. {count} återstår.",
+            "comment_needed_message": "Ange en ändringskommentar först.",
             "about_changeset_comments": "Om ändringskommentarer",
             "about_changeset_comments_link": "//wiki.openstreetmap.org/wiki/Good_changeset_comments",
             "google_warning": "Du nämnde Google i kommentaren: kom ihåg att det är strängt förbjudet att kopiera från Google Maps",
                 "tooltip_data": "Centrera och zooma kartan för att fokusera på denna data.",
                 "tooltip_issue": "Centrera och zooma kartan för att fokusera på detta problem."
             },
-            "no_documentation_combination": "Det finns ingen dokumentation för denna tagg-kombination",
-            "no_documentation_key": "Det finns ingen dokumentation för denna nyckel.",
             "show_more": "Visa mer",
             "view_on_osm": "Visa på openstreetmap.org",
             "view_on_keepRight": "Visa på keepright.at",
             "role": "Roll",
             "choose": "Välj typ av objekt",
             "results": "{n} sökresult för {search}",
-            "reference": "Visa på OpenStreetmaps wiki",
-            "edit_reference": "Ã\84ndra eller Ã¶versätt beskrivning",
+            "no_documentation_key": "Det finns inget dokumentation tillgänglig.",
+            "edit_reference": "ändra/översätt",
             "wiki_reference": "Visa dokumentation",
             "wiki_en_reference": "Visa dokumentation på engelska",
+            "hidden_preset": {
+                "manual": "{features} är dolda. Aktivera dem i panelen Kartdata.",
+                "zoom": "{features} är dolda. Zooma in för att aktivera dem. "
+            },
             "back_tooltip": "Ändra objekt",
             "remove": "Ta bort",
             "search": "Sök",
                     "tooltip": "Hittar automatiskt problem på kartan via keepright.at",
                     "title": "KeepRight-problem"
                 },
+                "improveOSM": {
+                    "tooltip": "Saknad data automatiskt detekterat av improveosm.org",
+                    "title": "ImproveOSM-problem"
+                },
                 "custom": {
                     "tooltip": "Drag och släpp en datafil på sidan, eller klicka på knappen för att ställa in",
                     "title": "Anpassad kartdata",
                 "tooltip": "Kraftledningar, kraftverk, fördelningsstation m.m."
             },
             "past_future": {
-                "description": "Då- och framtid",
+                "description": "Objekt för då- och framtid",
                 "tooltip": "Föreslaget, under uppbyggnad, övergivet, rivet m.m."
             },
             "others": {
-                "description": "Annat",
+                "description": "Andra objekt",
                 "tooltip": "Allt annat"
             }
         },
             "on_wiki": "{tag} på wiki.osm.org",
             "used_with": "används med {type}"
         },
-        "validations": {
-            "disconnected_highway": "Ej ansluten väg",
-            "disconnected_highway_tooltip": "Vägar bör vara anslutna till andra vägar eller entréer i byggnader.",
-            "generic_name": "Möjlig generiskt namn",
-            "generic_name_tooltip": "Detta objekt verk ha ett generiskt namn \"{name}\". Använd bara namn-fältet för att spara det officiella namnet för ett objekt.",
-            "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_point": "Otaggad punkt",
-            "untagged_point_tooltip": "Välj en typ som beskriver vad denna punkt är.",
-            "untagged_line": "Otaggad linje",
-            "untagged_line_tooltip": "Välj en typ som beskriver vad denna linje är.",
-            "untagged_area": "Otaggat område",
-            "untagged_area_tooltip": "Välj en typ som beskriver vad detta område är.",
-            "untagged_relation": "Otaggad relation",
-            "untagged_relation_tooltip": "Välj en typ som beskriver vad denna relation är.",
-            "many_deletions": "Du håller på att radera {n} objekt: {p} noder, {l} linjer, {a} områden, {r} relationer Är du helt säker på att du vill göra detta? Detta raderar 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": "Föråldrade taggar: {tags}"
-        },
         "zoom": {
             "in": "Zooma in",
             "out": "Zooma ut"
         "cannot_zoom": "Går ej att zooma ut ytterligare i nuvarande läge. ",
         "full_screen": "Växla fullskärm",
         "QA": {
+            "improveOSM": {
+                "title": "ImproveOSM-upptäckt",
+                "geometry_types": {
+                    "path": "spår",
+                    "parking": "parkering",
+                    "road": "vägar",
+                    "both": "vägar och parkering"
+                },
+                "directions": {
+                    "east": "öst",
+                    "north": "norr",
+                    "northeast": "nordöst",
+                    "northwest": "nordväst",
+                    "south": "syd",
+                    "southeast": "sydöst",
+                    "southwest": "sydväst",
+                    "west": "väst"
+                },
+                "error_types": {
+                    "ow": {
+                        "title": "Saknad enkelriktning",
+                        "description": "Längs denna sektion av {highway} går {percentage} % av {num_trips} inspelade resor från {from_node} till {to_node}. Det kan saknas en \"oneway\"-tagg."
+                    },
+                    "mr": {
+                        "title": "Saknar geometri",
+                        "description": "{num_trips} inspelade resor i detta område tyder på att det kan saknas ett okarterat objekt av typen {geometry_type} här.",
+                        "description_alt": "Data från tredje part tyder på att det kan finnas ej kartlagd {geometry_type} här. "
+                    },
+                    "tr": {
+                        "title": "Saknar svängrestriktion ",
+                        "description": "{num_passed} av {num_trips} inspelade restor (åt {travel_direction}) gör en sväng från {from_way} till {to_way} vid {junction}. Det kan saknas en svängrestriktion av typen \"{turn_restriction}\"."
+                    }
+                }
+            },
             "keepRight": {
                 "title": "KeepRight-fel",
                 "detail_title": "Fel",
                 "title": "Kvalitetssäkring",
                 "intro": "\"Kvalitetssäkringsverktyg\" (Q/A=Quality Assurance) kan hitta olämpliga taggar, icke anslutna vägar och andra typer av problem på OpenStreetMap, som kartläggare sedan kan rätta till.  För att visa existerande Q/A-problem, klicka på panelen {data} **Kartdata** för att aktivera ett specifikt Q/A-lager.",
                 "tools_h": "Verktyg",
-                "tools": "Följande verktyg stöds för tillfället: [KeepRight](https://www.keepright.at/). Du kan förvänta dig att iD i framtiden kommer att stödja bl.a. följande Q/A-verktyg: [Osmose](https://osmose.openstreetmap.fr/), [ImproveOSM](https://improveosm.org/en/).",
+                "tools": "Följande verktyg stöds för tillfället: [KeepRight](https://www.keepright.at/) och [ImproveOSM](https://improveosm.org/en/). Du kan förvänta dig att iD kommer att stödja [Osmose](https://osmose.openstreetmap.fr/) och andra Q/A-verktygen i framtiden.",
                 "issues_h": "Hantera problem",
                 "issues": "Hanteringen av Q/A-problem liknar hanteringen av anteckningar. Klicka på en markör för att se detaljer om problemet i sidopanelen. Varje verktyg har sina egna möjligheter, men generellt kan du kommentera och/eller stänga ett problem."
             },
                 }
             }
         },
+        "issues": {
+            "title": "Problem",
+            "key": "P",
+            "list_title": "Problem ({count})",
+            "errors": {
+                "list_title": "Fel ({count})"
+            },
+            "warnings": {
+                "list_title": "Varningar ({count})"
+            },
+            "no_issues": {
+                "message": "Allt ser bra ut",
+                "info": "Alla problem kommer att visas här medan du redigerar"
+            },
+            "almost_junction": {
+                "message": "{feature} är väldigt nära men inte ansluten till {feature2}",
+                "highway-highway": {
+                    "tip": "Korsande vägar bör ha en gemensam korsningspunkt."
+                }
+            },
+            "crossing_ways": {
+                "message": "{feature} korsar {feature2}",
+                "building-building": {
+                    "tip": "Byggnader bör inte överlappas förutom på olika lager. "
+                },
+                "building-highway": {
+                    "tip": "Vägar som korsar byggnader bör vara broar, tunnlar, övertäckta eller ingångar. "
+                },
+                "building-railway": {
+                    "tip": "Järnvägar som korsar byggnader bör vara broar eller tunnlar."
+                },
+                "building-waterway": {
+                    "tip": "Vattenvägar som korsar byggnader bör vara tunnlar eller vara på andra lager. "
+                },
+                "highway-highway": {
+                    "tip": "Korsande vägar bör vara broar, tunnlar eller korsningar. "
+                },
+                "highway-railway": {
+                    "tip": "Vägar som korsar järnvägar bör vara broar, tunnlar eller plankorsningar."
+                },
+                "highway-waterway": {
+                    "tip": "Vägar som korsar vattenvägar bör använda broar, tunnlar eller vadställen."
+                },
+                "railway-railway": {
+                    "tip": "Korsande järnvägar bör vara sammankopplade eller använda broar eller tunnlar."
+                },
+                "railway-waterway": {
+                    "tip": "Järnvägar som korsar vattenvägar bör vara broar eller tunnlar."
+                },
+                "waterway-waterway": {
+                    "tip": "Korsande vattenvägar bör vara sammankopplade eller använda tunnlar."
+                },
+                "tunnel-tunnel": {
+                    "tip": "Korsande tunnlar bör använda olika lager."
+                },
+                "tunnel-tunnel_connectable": {
+                    "tip": "Korsande tunnlar bör vara sammankopplade eller vara på olika lager."
+                },
+                "bridge-bridge": {
+                    "tip": "Korsande byggnader bör vara på olika lager."
+                },
+                "bridge-bridge_connectable": {
+                    "tip": "Korsande broar bör vara sammankopplade eller vara på olika lager."
+                },
+                "indoor-indoor": {
+                    "tip": "Korsande inomhusobjekt bör vara på olika våningar."
+                },
+                "indoor-indoor_connectable": {
+                    "tip": "Korsande inomhusobjekt bör vara sammankopplade eller vara på olika våningar."
+                }
+            },
+            "deprecated_tag": {
+                "single": {
+                    "message": "{feature} har den föråldrade taggen \"{tag}\""
+                },
+                "combination": {
+                    "message": "{feature} har en föråldrad kombination av taggar: {tags}"
+                },
+                "tip": "Vissa taggar har med tiden blivit föråldrade, och bör bytas ut."
+            },
+            "disconnected_way": {
+                "highway": {
+                    "message": "{highway} är ej ansluten med andra vägar eller stigar",
+                    "tip": "Vägar bör vara anslutna till andra vägar eller entréer i byggnader."
+                }
+            },
+            "generic_name": {
+                "message": "{feature} har det generella namnet \"{name}\"",
+                "tip": "Namn bör vara de faktiska namnen som används i verkligheten för objekten."
+            },
+            "many_deletions": {
+                "points-lines-areas": {
+                    "message": "Raderar {n} objekt: {p} punkter, {l} linjer och {a} områden"
+                },
+                "points-lines-areas-relations": {
+                    "message": "Raderar {n} objekt: {p} punkter, {l} linjer, {a} områden och {r} relationer"
+                },
+                "tip": "Endast överflödiga eller icke existerande objekt bör raderas."
+            },
+            "missing_tag": {
+                "any": {
+                    "message": "{feature} har inga taggar"
+                },
+                "descriptive": {
+                    "message": "{feature} har inga beskrivande taggar"
+                },
+                "specific": {
+                    "message": "{feature} har ingen tagg av typen \"{tag}\""
+                },
+                "tip": "Objekt måste ha taggar som definierar vad de är"
+            },
+            "old_multipolygon": {
+                "message": "{multipolygon} har felstavade taggar",
+                "tip": "Multipolygoner bör vara taggade i sina relationer, inte i de omslutande vägarna."
+            },
+            "tag_suggests_area": {
+                "message": "{feature} bör vara ett stängt område baserat på taggen \"{tag}\"",
+                "tip": "Områden måste ha sammankopplade ändpunkter."
+            },
+            "fix": {
+                "connect_almost_junction": {
+                    "annotation": "Har kopplat samman närliggande objekt."
+                },
+                "connect_crossing_features": {
+                    "annotation": "Har kopplat samman korsande objekt."
+                },
+                "connect_endpoints": {
+                    "title": "Koppla samman ändarna",
+                    "annotation": "Har kopplat samman ändarna på en väg."
+                },
+                "connect_features": {
+                    "title": "Koppla samman objekten"
+                },
+                "continue_from_start": {
+                    "title": "Fortsätt rita från start"
+                },
+                "continue_from_end": {
+                    "title": "Fortsätt rita från slutet"
+                },
+                "delete_feature": {
+                    "title": "Radera detta objekt"
+                },
+                "move_tags": {
+                    "title": "Flytta taggen",
+                    "annotation": "Flyttade taggar."
+                },
+                "remove_generic_name": {
+                    "title": "Radera namnet",
+                    "annotation": "Raderat ett generellt namn."
+                },
+                "remove_tag": {
+                    "title": "Ta bort taggen",
+                    "annotation": "Ta bort tagg."
+                },
+                "reposition_features": {
+                    "title": "Flytta objekten"
+                },
+                "select_preset": {
+                    "title": "Välj en objekttyp"
+                },
+                "tag_as_disconnected": {
+                    "title": "Tagga som okopplad",
+                    "annotation": "Har taggat ett objekt nära som okopplat. "
+                },
+                "upgrade_tag": {
+                    "annotation": "Har uppgraderat en gammal tagg."
+                },
+                "upgrade_tag_combo": {
+                    "annotation": "Har uppgraderat en gammal tagg-kombination."
+                },
+                "use_bridge_or_tunnel": {
+                    "title": "Använd en bro eller tunnel"
+                },
+                "use_different_layers": {
+                    "title": "Använd olika lager"
+                },
+                "use_different_levels": {
+                    "title": "Använd olika våningar"
+                },
+                "use_tunnel": {
+                    "title": "Använd en tunnel"
+                }
+            }
+        },
         "intro": {
             "done": "klar",
             "ok": "OK",
                 "category-building": {
                     "name": "Byggnad"
                 },
-                "category-golf": {
-                    "name": "Golf"
+                "category-golf-area": {
+                    "name": "Golfobjekt"
+                },
+                "category-golf-line": {
+                    "name": "Golfobjekt"
                 },
                 "category-landuse": {
                     "name": "Landanvändning"
                 "junction/ref_oneway": {
                     "label": "Avfartsnummer"
                 },
+                "junction_line": {
+                    "label": "Korsning",
+                    "options": {
+                        "circular": "Trafikcirkel",
+                        "jughandle": "Spansk sväng",
+                        "roundabout": "Cirkulationsplats"
+                    }
+                },
                 "kerb": {
                     "label": "Trottoarkant"
                 },
                         "underground": "Underjordisk"
                     }
                 },
-                "passenger_information_display": {
-                    "label": "Passagerarinformationssystem"
-                },
                 "payment_multi": {
                     "label": "Betalningssätt"
                 },
                     },
                     "placeholder": "Bergsvandring, alpin vandring"
                 },
+                "salt": {
+                    "label": "Salt"
+                },
                 "sanitary_dump_station": {
                     "label": "Latrintömning "
                 },
                     },
                     "placeholder": "Ja, nej, enbart hämtmat"
                 },
+                "tidal": {
+                    "label": "Tidvatten"
+                },
                 "to": {
                     "label": "Till"
                 },
                 },
                 "website": {
                     "label": "Webbsida",
-                    "placeholder": "http://exempel.se/"
+                    "placeholder": "https://exampel.se"
                 },
                 "wetland": {
                     "label": "Typ"
                     "name": "Klocka",
                     "terms": "Klocka, ur, urtavla, kyrkklocka, tidur, solur, väggur, väggklocka"
                 },
+                "amenity/clock/sundial": {
+                    "name": "Solur",
+                    "terms": "Solur, solklocka, skugga, skuggklocka, soltid, Gnomon, solvisare"
+                },
                 "amenity/college": {
                     "name": "Collegeområde",
                     "terms": "Gymnasium, gymnasie, college, vidareutbildning, gymnasiumområde, gymnasieområde"
                     "name": "Snabbmat – Kebab",
                     "terms": "Snabbmat, skräpmat, gatuköksmat, bukfylla, junk-food, gatukök, restaurang, takeaway, hämtmat, drive-in, mat, äta, grill, lunch, kebab"
                 },
+                "amenity/fast_food/mexican": {
+                    "name": "Snabbmat – Mexikanskt",
+                    "terms": "Snabbmat, skräpmat, gatuköksmat, bukfylla, junk-food, gatukök, restaurang, takeaway, hämtmat, drive-in, mat, äta, grill, lunch, mexikanskt, mexico"
+                },
                 "amenity/fast_food/pizza": {
                     "name": "Snabbmat – Pizza",
                     "terms": "Snabbmat, skräpmat, gatuköksmat, bukfylla, junk-food, gatukök, restaurang, takeaway, hämtmat, drive-in, mat, äta, grill, lunch, pizza, pizzeria, pan pizza,"
                     "terms": "Terrasshus"
                 },
                 "building/train_station": {
-                    "name": "Järnvägsstation"
+                    "name": "Tågstationsbyggnad"
                 },
                 "building/transportation": {
                     "name": "Byggnad för kollektivtrafik",
                     "name": "Bunker",
                     "terms": "Bunker, sandfälla, sandgrop, sandhål, hinder, golf"
                 },
+                "golf/cartpath": {
+                    "name": "Väg för golfbil",
+                    "terms": "golf, golfbana, Väg för golfbil, golfbil, gångväg, golfgångväg, stig, gång"
+                },
+                "golf/cartpath_service": {
+                    "name": "Väg för golfbil / Serviceväg",
+                    "terms": "golf, golfbana, Väg för golfbil, golfbil, gångväg, golfgångväg, stig, gång, underhållsväg, serviceväg"
+                },
+                "golf/driving_range": {
+                    "name": "Driving Range",
+                    "terms": "golf, golfövning, driver, övning, Driving Range, drivingrange, driverang"
+                },
                 "golf/fairway": {
                     "name": "Fairway",
                     "terms": "Fairway, golf"
                     "name": "Golfhål",
                     "terms": "Golfhål, hål, golf"
                 },
-                "golf/lateral_water_hazard_area": {
-                    "name": "Oändligt vattenhinder/sidovattenhinder",
-                    "terms": "Oändligt vattenhinder,sidovattenhinder, golf, vattenhinder, out of bounds"
+                "golf/lateral_water_hazard": {
+                    "name": "Sidovattenhinder",
+                    "terms": "Golf, golfbana, golfhinder, Sidovattenhinder, vattenhinder, vattenhål, dam, sjö, dike"
                 },
-                "golf/lateral_water_hazard_line": {
-                    "name": "Oändligt vattenhinder/sidovattenhinder",
-                    "terms": "Oändligt vattenhinder,sidovattenhinder, golf, vattenhinder, out of bounds"
+                "golf/path": {
+                    "name": "Gångväg på golfbana",
+                    "terms": "Gångväg på golfbana, golf, golfbana, golfgångväg, stig, gång, gångväg"
                 },
                 "golf/rough": {
                     "name": "Ruff",
                     "name": "Tee",
                     "terms": "Tee, utslagsplats, golf"
                 },
-                "golf/water_hazard_area": {
-                    "name": "Vattenhinde",
-                    "terms": "Vattenhinde, golf"
-                },
-                "golf/water_hazard_line": {
+                "golf/water_hazard": {
                     "name": "Vattenhinde",
-                    "terms": "Vattenhinde, golf"
+                    "terms": "Vattenhinde, golf, golfbana, vattenhål, dam, sjö, dike"
                 },
                 "healthcare": {
                     "name": "Hälsovård",
                     "terms": "korsning, vägkorsningar, övergångsställe, järnvägskorsning, rondell, cirkulationsplats, trafiksignal, stoppskylt, stoppsignal, vägkors, trafikplats, trafikkorsning, gatukorsning"
                 },
                 "landuse": {
-                    "name": "Markanvändning",
-                    "terms": "Markanvändning, landanvändning, användningsområde"
+                    "name": "Markanvändning"
                 },
                 "landuse/allotments": {
                     "name": "Koloniområde",
                     "terms": "Vingård, château, vin, vinodling, vinframställning, vinfält, vineri, druvor, vindruvor"
                 },
                 "leisure": {
-                    "name": "Fritid",
-                    "terms": "Nöje, fritid, ledighet, förströelse, tidsfördriv"
+                    "name": "Fritid"
                 },
                 "leisure/adult_gaming_centre": {
                     "name": "Center för vuxenspel",
                     "name": "Picknickbord",
                     "terms": "Picknickbord, bord, Picknick, matbord, utflyktsbord, utebord, bänk"
                 },
+                "leisure/picnic_table/chess": {
+                    "name": "Schackbord",
+                    "terms": "bänk, schackbräda, Schackbord, Schackspelare, spelbord, shack"
+                },
                 "leisure/pitch": {
                     "name": "Idrottsplats",
                     "terms": "Idrottsplats,  idrottsplan, plan,  idrottsanläggning, arena, stadion, sportplats, fällt"
                     "name": "Sportcenter / -anläggning",
                     "terms": "Sportcenter, sportanläggning, gym, idrottsanläggning, idrottsplats, sportpalats, simhall, motion, träningsanläggning, idrottshall, träning, sporthall, idrottsplan, fitnes"
                 },
+                "leisure/sports_centre/climbing": {
+                    "name": "Klättergym",
+                    "terms": "Klättergym, klättringsgym, Firning, repellering, konstgjord klättervägg, klättervägg, bouldering, bergsklättring, bergsvägg, rep, topprep, topprepsklättring, klättring, repklättring"
+                },
                 "leisure/sports_centre/swimming": {
                     "name": "Badanläggning",
                     "terms": "Badanläggning, badhall, simhall, simbassäng, bassäng, swimmingpool, pool, simning, badhus, motionssim, tävlingssim"
                     "terms": "Linje, streck, sträcka, utsträckning"
                 },
                 "man_made": {
-                    "name": "Människoskapad",
-                    "terms": "Människoskapat, konstgjort, onaturlig, syntetisk, artificiell"
+                    "name": "Människoskapad"
                 },
                 "man_made/adit": {
                     "name": "Horisontell gruvgång (Stoll)",
                     "name": "Torn",
                     "terms": "torn, radiotorn"
                 },
+                "man_made/tower/bell_tower": {
+                    "name": "Klocktorn",
+                    "terms": "Klocktorn, Klockgavel, klockstapel, kyrktorn, Klockstapel, kyrkklocka, klockspel, kampanil"
+                },
                 "man_made/tower/communication": {
                     "name": "Kommunikationstorn",
                     "terms": "radiomast, radiotorn, mast, antenn, mobilmast, mobilantenn, radioantenn, sändartorn, mobiltelefon, radiomast, TV-torn, TV-mast, radiosändning, kommunikationsmast, kommunikationstorn, transmissionsmast, överföringstorn, överföringsmast"
                 },
+                "man_made/tower/minaret": {
+                    "name": "Minaret",
+                    "terms": "Minaret, minâra, bönetorn, islam, muslim, moské, muezzin, böneutropare, Muaddhin"
+                },
                 "man_made/tower/observation": {
                     "name": "Utkikstorn",
                     "terms": "Utkikstorn, utsiktstorn, observationstorn, utsiktspost, observationspost, brandtorn"
                     "terms": "Manhålslucka för telekom, gatubrunn, brunn, telekom, telefoni, manhålslucka, Brunnslock, manlucka, manhål, tele, tele-brunn"
                 },
                 "natural": {
-                    "name": "Naturlig",
-                    "terms": "Naturligt, naturlig, natur, skyddsområde, naturanvändning, geologi"
+                    "name": "Naturlig"
                 },
                 "natural/bare_rock": {
                     "name": "Kala klippor ",
                     "name": "Vatten",
                     "terms": "vatten, vattensamling, sjö, damm, reservoar, göl, tjärn"
                 },
+                "natural/water/basin": {
+                    "name": "Avrinningsområde",
+                    "terms": "avrinning, avrinningsområde, bassäng, infiltration, infiltrering, dagvatten, dagvattenbassäng"
+                },
                 "natural/water/canal": {
                     "name": "Kanal",
                     "terms": "Kanal, vattenväg, vattenled, ränna, segelränna, farled, vattendrag, å"
                     "name": "Transformator",
                     "terms": "Transformator, nätstation, elomvandling"
                 },
-                "public_transport/linear_platform": {
-                    "name": "Hållplats / Plattform för kollektivtrafik",
-                    "terms": "Hållplats, Plattform, kollektivtrafik, linjetrafik, transport"
-                },
-                "public_transport/linear_platform_aerialway": {
-                    "name": "Hållplats / Plattform för linbana",
-                    "terms": "linbana, aerialway, Linbanehållplats, linbaneplattform, linbaneterminal, linbanestopp, hållplats, plattform, terminal, stopp, kollektivtrafik, linjetrafik, transit, transport"
-                },
-                "public_transport/linear_platform_bus": {
-                    "name": "Bussplattform",
-                    "terms": "buss, plattform, kollektivtrafik, transport, transit, hållplats, busshållplats, bussplattform, linjetrafik"
-                },
-                "public_transport/linear_platform_ferry": {
-                    "name": "Stop / plattform för färja",
-                    "terms": "färjeplattform, plattform, stopp, båtstopp, färjestopp, båthållplats, Färjeterminal, terminal, färja, båtterminal, båthållplats, Färjehållplats, Färjestation, båt, brygga, pir, kollektivtrafik, linjetrafik, station, transit, transport"
-                },
-                "public_transport/linear_platform_light_rail": {
-                    "name": "Hållplats för snabbspårväg / stadsbana",
-                    "terms": "Spårvägshållplats, hållplats, spårvagnsplattform, plattform, spårvagn, spårväg, spårvagnsterminal, terminal, järnväg, kollektivtrafik, kollektivtrafik, vagn, transit, transport, snabbspårväg, stadsbana, light rail, spår, järnväg"
-                },
-                "public_transport/linear_platform_monorail": {
-                    "name": "Stopp / plattform för monorail",
-                    "terms": "monorailstopp, monorailplattform, stopp, plattform, monorail, plattform, kollektivtrafik, linjetrafik, enskensbana, balkbana, räls, spår, transport"
-                },
-                "public_transport/linear_platform_subway": {
-                    "name": "Tunnelbanestopp / -plattform",
-                    "terms": "Tunnelbanestopp, Tunnelbaneplattform, tunnelbana, metro, plattform, kollektivtrafik, järnväg, spår, transport, tunnelbana, underjordisk"
-                },
-                "public_transport/linear_platform_train": {
-                    "name": "Järnvägsstopp / -perrong",
-                    "terms": "Tågstopp, Perrong, järnvägsperrong, plattform, järnvägsplattform, järnväg, tåg, stopp, kollektivtrafik, linjetrafik, spår, transit, transport"
-                },
-                "public_transport/linear_platform_tram": {
-                    "name": "Spårvagnshållplats / -plattform",
-                    "terms": "Spårvägshållplats, spårvagnshållplats, hållplats, spårvagnsplattform, plattform, spårvagn, spårväg, spårvagnsterminal, terminal, järnväg, kollektivtrafik, kollektivtrafik, vagn, transit, transport"
-                },
-                "public_transport/linear_platform_trolleybus": {
-                    "name": "Busshållplats / plattform för trådbuss",
-                    "terms": "Busshållplats, bussplattform, plattform, trådbuss, hållplats, buss, kollektivtrafik, spårlös, spårvagn, vagn, transit, transport"
-                },
                 "public_transport/platform": {
                     "name": "Stopp / Plattform för kollektivtrafik",
                     "terms": "Plattform, väntplats, påstigningsplats, avsats, perrong"
                     "terms": "Vinaffär, systembolaget, systemet, vin, vinförsäljning"
                 },
                 "tourism": {
-                    "name": "Turism",
-                    "terms": "Turism, sevärdhet, turistattraktion, turistmagnat"
+                    "name": "Turism"
                 },
                 "tourism/alpine_hut": {
                     "name": "Fjällstation",
index 22f1e6cd5ce1e05795b5dd077a7ca935bcb59b76..81b88577f38a47d6cd5ca5222092b0c497d0c155 100644 (file)
             },
             "rail": {
                 "tooltip": "இரயில்வே"
-            },
-            "past_future": {
-                "description": "கடந்த கால / எதிர்கால"
-            },
-            "others": {
-                "description": "பிற"
             }
         },
         "area_fill": {
         "tag_reference": {
             "description": "விளக்கம்"
         },
-        "validations": {
-            "untagged_area": "குறிக்கப்படாதப் பகுதி",
-            "untagged_relation": "குறிக்கப்படாதத் தொடர்பு"
-        },
         "note": {
             "note": "குறிப்பு",
             "commentTitle": "பின்னூட்டங்கள்",
                 "category-building": {
                     "name": "கட்டிடம் அம்சங்கள்"
                 },
-                "category-golf": {
-                    "name": "குழிப்பந்தாட்ட அம்சங்கள்"
-                },
                 "category-landuse": {
                     "name": "காணிப் பயன்பாட்டு அம்சங்கள்"
                 },
                     "label": "வகை"
                 },
                 "website": {
-                    "label": "இணையதளம்",
-                    "placeholder": "http://example.com/"
+                    "label": "இணையதளம்"
                 },
                 "wetland": {
                     "label": "வகை"
                 "building/temple": {
                     "name": "கோயில் கட்டிடம்"
                 },
-                "building/train_station": {
-                    "name": "தொடருந்து நிலையம்"
-                },
                 "building/transportation": {
                     "name": "போக்குவரத்துக் கட்டிடம்"
                 },
                 "power/tower": {
                     "name": "அதிக-மின்னழுத்தக் கோபுரம்"
                 },
-                "public_transport/linear_platform_bus": {
-                    "name": "பேருந்து நிறுத்தம் / தடம்"
-                },
-                "public_transport/linear_platform_light_rail": {
-                    "name": "இலகு இரயில் நிறுத்தம் / நடைமேடை"
-                },
-                "public_transport/linear_platform_train": {
-                    "name": "இரயில் நிறுத்தம் / தடம்"
-                },
                 "public_transport/platform_bus": {
                     "name": "பேருந்து நிறுத்தம்  / தடம்"
                 },
index dffcfb95b9124e73868d66005af9862025236d66..64a700f9b701b5f306231d98f276158699358ee8 100644 (file)
             "title": "నా ప్రాంతాన్ని చూపించు"
         },
         "inspector": {
-            "no_documentation_combination": "ఈ ట్యాగ్ కాంబినేషన్ కి సంబంధించి ఎటువంటి సమాధానము లేదు",
-            "no_documentation_key": "ఈ కీకి సంబంధించి ఎటువంటి సమాధానము లేదు",
             "show_more": "మరింత చూపించు",
             "view_on_osm": "openstreetmap.org లో చూడండి",
             "all_tags": "అన్ని ట్యాగులు",
             "role": "పాత్ర",
             "choose": "విశేష రకాన్ని ఎంచుకోండి",
             "results": "{search} కి {n} ఫలితాలు",
-            "reference": "OpenStreetMap వికీలో చూడండి",
             "back_tooltip": "విశేషం మార్పు",
             "remove": "తొలగించు",
             "search": "వెతుకు",
             },
             "rail": {
                 "tooltip": "రైల్వేలు"
-            },
-            "others": {
-                "description": "ఇతరాలు"
             }
         },
         "restore": {
index d35707056187fa78b92caac8475610d355b64cec..de29a6929c5ee85bf9f439ae7c3c2744fbbbf203 100644 (file)
                 "category-building": {
                     "name": "คุณลักษณะอาคาร"
                 },
-                "category-golf": {
-                    "name": "คุณลักษณะกอล์ฟ"
-                },
                 "category-landuse": {
                     "name": "คุณลักษณะที่ดิน"
                 },
index ee3ab50975addfc9e166aa913d1b21126e6dd275..a18411c34a0346649fb177a9aa1bf7f3560d1cd9 100644 (file)
             "locating": "Hinahanap ang lokasyon, mangyaring maghintay..."
         },
         "inspector": {
-            "no_documentation_combination": "Walang documentation para sa kumbinasyon ng mga tag na ginamit",
-            "no_documentation_key": "Walang \"documentation\" na magagamit para sa \"key\" na ito.",
             "show_more": "Higit pang detalye",
             "view_on_osm": "Tingnan sa openstreetmap.org",
             "all_tags": "Lahat ng tags",
             "role": "Kasapi",
             "choose": "Pumili ng uri ng \"features\"",
             "results": "{n} mga resulta para sa {search}",
-            "reference": "Tingnan sa OpenStreetMap Wiki",
             "back_tooltip": "Baguhin ang \"feature\"",
             "remove": "Alisin",
             "search": "Mag-search",
                 "description": "Mga tampok na pang enerhiya",
                 "tooltip": "Mga linya ng kuryente, Mga planta ng kuryente, Mga substasyono, etc."
             },
-            "past_future": {
-                "description": "Nakaraan/Kinabukasan"
-            },
             "others": {
-                "description": "Iba pa",
                 "tooltip": "Lahat ng iba pa"
             }
         },
             "on_wiki": "{tag} sa wiki.osm.org",
             "used_with": "Kabilang sa gingamait ang {type}"
         },
-        "validations": {
-            "disconnected_highway": "Hindi nakakabit na highway",
-            "untagged_point": "Walang tag na punto o tuldok",
-            "untagged_point_tooltip": "Pumili ng uri ng tampok na naglalarawan kung ano ang puntong ito.",
-            "untagged_line": "Walang tag na linya",
-            "untagged_line_tooltip": "Pumili ng uri ng tampok na naglalarawan kung ano ang linyang ito.",
-            "untagged_area": "Walang tag na area o poligon",
-            "untagged_area_tooltip": "Pumili ng uri ng tampok na naglalarawan kung ano ang poligong ito.",
-            "tag_suggests_area": "Ang tag na {tag} ay kalimitang para sa mga area o poligon sublait ito ay nasa linya lamang.",
-            "deprecated_tags": "Hindi na ginagamit na \"tag\": {tags}"
-        },
         "cannot_zoom": "Hindi na pwedeng mag-zoom out sa kasalukuyang \"mode\".",
         "full_screen": "I-fullscreen",
         "help": {
                 "category-building": {
                     "name": "Tampok ng gusali"
                 },
-                "category-golf": {
-                    "name": "Mga tampok para sa Golf"
-                },
                 "category-landuse": {
                     "name": "Mga tampok para sa gagamiting lupa"
                 },
index a099028ca69b840d9627d77ee23c278d2e1f8ff0..dc7f4cc9f31259076e78bc465cc14555e71db661 100644 (file)
             "locating": "Buluyor, lütfen bekle..."
         },
         "inspector": {
-            "no_documentation_combination": "Bu etiket için detaylı doküman bulunmamaktadır",
-            "no_documentation_key": "Bu etiket türü için detaylı doküman bulunmamaktadır",
             "show_more": "Daha Fazla Göster",
             "view_on_osm": "OpenStreetMap.org sayfasında bak",
             "view_on_keepRight": "keepright.at sitesinde görüntüle",
             "role": "Görev",
             "choose": "Nesne türünü seç",
             "results": "{search} için {n} adet sonuç ",
-            "reference": "OpenStreetMap Wiki'de bak",
             "back_tooltip": "Türü değiştir",
             "remove": "Kaldır",
             "search": "Ara",
                 "tooltip": "Enerji Nakil Hatları, Enerji Santralleri, Trafolar vb."
             },
             "past_future": {
-                "description": "Geçmiş/Gelecek",
                 "tooltip": "Planlanmış, Yapım Aşamasında, Terk Edilmiş, Yıkılmış v.b."
             },
             "others": {
-                "description": "Diğerleri",
                 "tooltip": "Geriye Kalanlar"
             }
         },
             "on_wiki": "wiki.osm.org sitesinde {tag} ",
             "used_with": "{type} ile birlikte kullanılır"
         },
-        "validations": {
-            "disconnected_highway": "Kopuk yol",
-            "disconnected_highway_tooltip": "Yollar, başka yollara veya bina girişlerine bağlı olmalıdır.",
-            "old_multipolygon": "Dış yolda çoklu poligon etiketleri",
-            "old_multipolygon_tooltip": "Bu çoklu poligon stili yenisiyle değiştirilecektir. Lütfen etiketleri dış taraf yerine ana çoklu poligonla ilişkilendiriniz. ",
-            "untagged_point": "Etiketlenmemiş nokta",
-            "untagged_point_tooltip": "Bu noktanın ne olduğunu belirten bir tür seç.",
-            "untagged_line": "Etiketlenmemiş çizgi",
-            "untagged_line_tooltip": "Bu çizginin ne olduğunu belirten bir tür seç.",
-            "untagged_area": "Etiketlenmemiş alan",
-            "untagged_area_tooltip": "Bu alanın ne olduğunu belirten bir tür seç.",
-            "untagged_relation": "Etiketlenmemiş Küme",
-            "untagged_relation_tooltip": "Bu kümeyi tanımlayan bir tür seç",
-            "tag_suggests_area": "{tag} etiketi buranın alan olmasını ima ediyor, ama burası alan değil.",
-            "deprecated_tags": "Kullanımdan kaldırılmış etiketler: {tags}"
-        },
         "zoom": {
             "in": "Yakınlaştır",
             "out": "Uzaklaştır"
                 "category-building": {
                     "name": "Bina"
                 },
-                "category-golf": {
-                    "name": "Golf"
-                },
                 "category-landuse": {
                     "name": "Arazi"
                 },
                     "label": "Tür"
                 },
                 "website": {
-                    "label": "Web Sitesi",
-                    "placeholder": "http://ornek.com/"
+                    "label": "Web Sitesi"
                 },
                 "wetland": {
                     "label": "Tür"
                     "name": "Sıra Evler",
                     "terms": "Sıra Evler"
                 },
-                "building/train_station": {
-                    "name": "Tren İstasyonu"
-                },
                 "building/transportation": {
                     "name": "Terminal",
                     "terms": "Terminal"
                     "name": "Delik",
                     "terms": "Delik"
                 },
-                "golf/lateral_water_hazard_area": {
-                    "name": "Yanda Su Alanı",
-                    "terms": "Yanda Su Alanı"
-                },
-                "golf/lateral_water_hazard_line": {
-                    "name": "Yanda Su Hattı",
-                    "terms": "Yanda Su Hattı"
-                },
                 "golf/rough": {
                     "name": "Sert",
                     "terms": "Sert"
                     "name": "Başlama Yeri",
                     "terms": "Başlama Yeri"
                 },
-                "golf/water_hazard_area": {
-                    "name": "Su Alanı",
-                    "terms": "Su Alanı"
-                },
-                "golf/water_hazard_line": {
-                    "name": "Su Hattı",
-                    "terms": "Su Hattı"
-                },
                 "healthcare": {
                     "name": "Sağlık Merkezi",
                     "terms": "Sağlık Merkezi"
                     "terms": "Kavşak, Yol Ayrımı"
                 },
                 "landuse": {
-                    "name": "Arazi Kullanımı",
-                    "terms": "Arazi Kullanımı, Toprak Kullanımı"
+                    "name": "Arazi Kullanımı"
                 },
                 "landuse/allotments": {
                     "name": "Hobi Bahçesi",
                     "terms": "Üzüm Bağı, Bağ"
                 },
                 "leisure": {
-                    "name": "Eğlence",
-                    "terms": "Eğlence, Eğlenme, Dinlenme"
+                    "name": "Eğlence"
                 },
                 "leisure/adult_gaming_centre": {
                     "name": "Yetişkin Oyun Merkezi",
                     "terms": "Çizgi"
                 },
                 "man_made": {
-                    "name": "Yapay",
-                    "terms": "Yapay, İnsan Yapımı"
+                    "name": "Yapay"
                 },
                 "man_made/adit": {
                     "name": "Tünel Girişi",
                     "name": "Rogar"
                 },
                 "natural": {
-                    "name": "Doğal",
-                    "terms": "Doğal, Tabii"
+                    "name": "Doğal"
                 },
                 "natural/bare_rock": {
                     "name": "Kayalık Bölge",
                     "name": "Transformatör",
                     "terms": "Transformatör"
                 },
-                "public_transport/linear_platform": {
-                    "name": "Toplu Taşıma Durağı",
-                    "terms": "Toplu Taşıma Yolcu İndirme/Bindirme Platformu"
-                },
-                "public_transport/linear_platform_aerialway": {
-                    "name": "Havayolu Durağı",
-                    "terms": "Havayolu ile Taşıma Yolcu İndirme/Bindirme Platformu"
-                },
-                "public_transport/linear_platform_bus": {
-                    "name": "Otobüs Durağı",
-                    "terms": "Durak, Otobüs Yolcu İndirme/Bindirme Platformu"
-                },
-                "public_transport/linear_platform_ferry": {
-                    "name": "Feribot Terminali",
-                    "terms": "Feribot Yolcu İndirme/Bindirme Platformu"
-                },
-                "public_transport/linear_platform_light_rail": {
-                    "name": "Raybüs Durağı",
-                    "terms": "Raybüs, Hafif Raylı Taşıt Yolcu İndirme/Bindirme Platformu"
-                },
-                "public_transport/linear_platform_monorail": {
-                    "name": "Tek Raylı Tren İstasyonu",
-                    "terms": "Tek Raylı Tren Yolcu İndirme/Bindirme Platformu"
-                },
-                "public_transport/linear_platform_subway": {
-                    "name": "Metro Durağı",
-                    "terms": "Metro Yolcu İndirme/Bindirme Platformu"
-                },
-                "public_transport/linear_platform_train": {
-                    "name": "Tren Durağı",
-                    "terms": "Tren Yolcu İndirme/Bindirme Platformu"
-                },
-                "public_transport/linear_platform_tram": {
-                    "name": "Tramvay Durağı",
-                    "terms": "Tramvay Yolcu İndirme/Bindirme Platformu"
-                },
-                "public_transport/linear_platform_trolleybus": {
-                    "name": "Troleybüs Durağı",
-                    "terms": "Troleybüs, Raysız Tramvay Yolcu İndirme/Bindirme Platformu"
-                },
                 "public_transport/platform": {
                     "name": "Toplu Taşıma Durağı",
                     "terms": "Toplu Taşıma Yolcu İndirme/Bindirme Platformu"
                     "terms": "Şarap Mağazası"
                 },
                 "tourism": {
-                    "name": "Turizm",
-                    "terms": "Turizm"
+                    "name": "Turizm"
                 },
                 "tourism/alpine_hut": {
                     "name": "Dağ Evi",
index d7fde8b8ee851c8aaead985e554353a32586e989..331c92a554bb23306a1f6a4e5a46c608be513bf1 100644 (file)
                 "restriction": "Ці об’єкти не можуть бути об’єднані, це може пошкодити звʼязок \"{relation}\".",
                 "relation": "Ці об’єкти не можуть бути об’єднані, вони мають ролі, що конфліктують друг з другом.",
                 "incomplete_relation": "Ці об’єкти не можуть бути об’єднані, принаймні один з них завантажений не повністю.",
-                "conflicting_tags": "Ці обʼєкти не можуть бути обʼєднані, бо вони мають теґи, значення яких не збігаються."
+                "conflicting_tags": "Ці обʼєкти не можуть бути обʼєднані, бо вони мають теґи, значення яких не збігаються.",
+                "paths_intersect": "Ці об'єкти не можуть бути об'єднані, бо утворена лінія буде перетинати сама себе."
             },
             "move": {
                 "title": "Пересунути",
                 "tooltip_data": "Масштабувати мапу, щоб показати ці дані.",
                 "tooltip_issue": "Масштабувати мапу, щоб показати цю ваду."
             },
-            "no_documentation_combination": "Для цієї комбінації теґів немає документації",
-            "no_documentation_key": "Для цього теґа немає документації",
             "show_more": "Ще",
             "view_on_osm": "Подивитись на openstreetmap.org",
             "view_on_keepRight": "Подивитись на keepright.at",
             "role": "Роль",
             "choose": "Виберіть тип об’єкта",
             "results": "знайдено {n} об’єктів за запитом {search}",
-            "reference": "Подивитись на OpenStreetMap Wiki",
-            "edit_reference": "Ð\92ипÑ\80авиÑ\82и/пеÑ\80еклаÑ\81Ñ\82и Ð¾Ð¿Ð¸Ñ\81",
+            "no_documentation_key": "Документація відсутня.",
+            "edit_reference": "випÑ\80авиÑ\82и/пеÑ\80еклаÑ\81Ñ\82и",
             "wiki_reference": "Переглянути документацію",
             "wiki_en_reference": "Переглянути документацію англійською",
+            "hidden_preset": {
+                "manual": "{features} приховані. Увімкніть їх на панелі \"Дані мапи\".",
+                "zoom": "{features} приховані. Наблизьтесь щоб показати їх."
+            },
             "back_tooltip": "Змінити об’єкт",
             "remove": "Вилучити",
             "search": "Пошук",
                     "tooltip": "Автоматично виявлені вади мапи від keepright.at",
                     "title": "KeepRight - Вади"
                 },
+                "improveOSM": {
+                    "tooltip": "Відсутні дані, знайдені автоматично improveosm.org",
+                    "title": "ImproveOSM Вади"
+                },
                 "custom": {
                     "tooltip": "Перетягніть файл даних на сторінку або клацніть на кнопку для налаштувань",
                     "title": "Власні дані мапи",
                 "tooltip": "Проекти, будівництво, покинуті, зруйновані об’єкти й т.д."
             },
             "others": {
-                "description": "Інше",
+                "description": "Інші об'єкти",
                 "tooltip": "Все інше"
             }
         },
             "on_wiki": "{tag} на wiki.osm.org",
             "used_with": "використовується з {type}"
         },
-        "validations": {
-            "disconnected_highway": "Не зʼєднані шляхи",
-            "disconnected_highway_tooltip": "Шляхи повинні бути приєднані до інших доріг або до входів в будинки.",
-            "generic_name": "Можливо універсальна назва",
-            "generic_name_tooltip": "Цей об'єкт, схоже, має загальну назву – \"{name}\". Будь ласка, використовуйте поле Назва для зазначення офіційної назви цього об'єкта.",
-            "old_multipolygon": "Теґи мультиполігона на зовнішньому контурі",
-            "old_multipolygon_tooltip": "Цей вид мультиполігонів визнаний застарілим. Будь ласка, додавайте теґи безпосередньо мультиполігону, а його членам, які утворюють зовнішній контур.",
-            "untagged_point": "Точка без теґів",
-            "untagged_point_tooltip": "Виберіть тип об’єкта, що відповідає цій точці.",
-            "untagged_line": "Лінія без теґів",
-            "untagged_line_tooltip": "Виберіть тип об’єкта, що відповідає цій лінії.",
-            "untagged_area": "Полігон без  теґів",
-            "untagged_area_tooltip": "Виберіть тип об’єкта, що відповідає цьому полігону.",
-            "untagged_relation": "Звʼязок без теґів",
-            "untagged_relation_tooltip": "Оберіть тип об’єкту, що описує чим є звʼязок.",
-            "many_deletions": "Ви збираєтесь вилучити {n} об’єкт(ів): {p} точок, {l} ліній, {a} полігонів, {r} зв'язків.  Ви дійсно бажаєте це зробити? Таке вилучення призведе до їх зникнення з мапи openstreetmap.org.",
-            "tag_suggests_area": "Теґ {tag} зазвичай ставиться на полігони, але об’єкт не є полігоном",
-            "deprecated_tags": "Застарілі теґи: {tags}"
-        },
         "zoom": {
             "in": "Наблизитись",
             "out": "Віддалитись"
         "cannot_zoom": "Не можливо зменшити масштаб в поточному режимі.",
         "full_screen": "Розвернути на весь екран",
         "QA": {
+            "improveOSM": {
+                "title": "ImproveOSM Знахідки",
+                "geometry_types": {
+                    "path": "шляхи",
+                    "parking": "стоянки",
+                    "road": "дороги",
+                    "both": "дороги та стоянки"
+                },
+                "directions": {
+                    "east": "схід",
+                    "north": "північ",
+                    "northeast": "північний схід",
+                    "northwest": "північний захід",
+                    "south": "південь",
+                    "southeast": "південний схід",
+                    "southwest": "південний захід",
+                    "west": "захід"
+                },
+                "error_types": {
+                    "ow": {
+                        "title": "Відсутній односторонній рух",
+                        "description": "Вздовж цього відрізку {highway}, {percentage}% з {num_trips} записаних подорожей рухались від {from_node} до {to_node}. Можливо тут має бути теґ \"oneway\"."
+                    },
+                    "mr": {
+                        "title": "Відсутня геометрія",
+                        "description": "{num_trips} записаних подорожей на цій території підказують, зо тут може бути незамаплений {geometry_type}.",
+                        "description_alt": "Дані зі сторонніх джерел підказують, що тут може бути {geometry_type}."
+                    },
+                    "tr": {
+                        "title": "Відсутні заборони маневрів",
+                        "description": "{num_passed} з {num_trips} записаних подорожей (що прямували на {travel_direction}) зробили поворот з {from_way} до {to_way} на {junction}. Можливо тут відсутня заборона маневру \"{turn_restriction}\"."
+                    }
+                }
+            },
             "keepRight": {
                 "title": "KeepRight - Помилки",
                 "detail_title": "Помилки",
                 "navigation_drag": "Ви можете рухати мапу натиснувши {leftclick} ліву кнопку миші. Також ви можете скористатись стрілками  `↓`, `↑`, `←`, `→` на вашій клавіатурі.",
                 "navigation_zoom": "Ви можете наближати та віддаляти мапу за допомоги коліщатка миші або трекапда, або клацаючи на {plus} / {minus} кнопки збоку на мапі. Ви також можете натискати клавіші `+`, `-` на клавіатурі.",
                 "features_h": "Об'єкти мапи",
-                "features": "Ми використовуємо слово *об'єкт*, коли говоримо про речі, що з'являються на мапі, наприклад, дороги, будівлі або визначні місця. Будь-що, що є в реальному світі може бути додане як об'єкт в OpenStreetMap. Об'єкти можуть бути представлені *точками*, *лініями* або *полігонами*."
+                "features": "Ми використовуємо слово *об'єкт*, коли говоримо про речі, що з'являються на мапі, наприклад, дороги, будівлі або визначні місця. Будь-що, що є в реальному світі може бути додане як об'єкт в OpenStreetMap. Об'єкти можуть бути представлені *точками*, *лініями* або *полігонами*.",
+                "nodes_ways": "В OpenStreetMap, точки іноді називаються *node*, а лінії та полігони – *way*."
             },
             "editing": {
                 "title": "Редагування та Збереження",
                 "choosing": "Щоб дізнатись які фонові зображення навні для редагування, клацніть кнопку {layers} **Налаштування тла** збоку на мапі.",
                 "sources": "Типово, як фоновий шар використовуються супутникові знімки від [Bing Maps](https://www.bing.com/maps/). В залежності від місцевості де ви вносите зміни, можуть бути наявні інші фонові зображення. Деякі з них можуть мати кращу роздільну здатність та бути новішими ніж інші, тож завжди корисно перевірити який з шарів є найбільш актуальним та краще підходить для мапінгу.",
                 "offsets_h": "Налаштування зсуву тла",
-                "offset": "Фонові зображення можуть іноді не збігатись з точно доданими даними. Якщо ви бачите що дороги, будівлі зміщені щодо їх положення на фоновому зображенні, це може означати, що щось не так з зображенням, тож їх не треба пересувати на нове місце. Замість цього ви можете підлаштувати положення тла, так щоб воно збігалось із даними. Для цього розгорніть розділ \"Налаштування зсуву тла\" в нижній частині панелі Налаштування тла."
+                "offset": "Фонові зображення можуть іноді не збігатись з точно доданими даними. Якщо ви бачите що дороги, будівлі зміщені щодо їх положення на фоновому зображенні, це може означати, що щось не так з зображенням, тож їх не треба пересувати на нове місце. Замість цього ви можете підлаштувати положення тла, так щоб воно збігалось із даними. Для цього розгорніть розділ \"Налаштування зсуву тла\" в нижній частині панелі Налаштування тла.",
+                "offset_change": "Натискайте на маленькі стрілки для поступового налаштування зсуву тла, або натисніть ліву кнопку миші та потягніть сірий прямокутник для налаштування положення тла."
             },
             "streetlevel": {
                 "title": "Знімки з вулиць",
                 "title": "Перевірка якості",
                 "intro": "* Quality Assurance* (Q/A) – інструменти, що допомагають виявити помилки в теґах, нез'єднані дороги та проблеми з даними, які мапери потім можуть виправити. Щоб переглянути виявлені вади Q/A, натисніть панель {data} **Дані мапи**, щоб увімкнути певний шар Q/A.",
                 "tools_h": "Інструменти",
-                "tools": "Наразі підтримується: [KeepRight](https://www.keepright.at/). Очікується що iD буде підтримувати [Osmose](https://osmose.openstreetmap.fr/), [ImproveOSM](https://improveosm.org/en/) та інші інструменти Q/A в майбутньому.",
+                "tools": "Наразі підтримується: [KeepRight](https://www.keepright.at/) та [ImproveOSM](https://improveosm.org/en/). Очікується що iD буде підтримувати [Osmose](https://osmose.openstreetmap.fr/)  та інші інструменти Q/A в майбутньому.",
                 "issues_h": "Розв'язання вад",
                 "issues": "Розв'язання вад Q/A схоже з процесом розгляду нотаток. При натисканні на наявну ваду Q/A на бічній панелі з'являються відомості про її тип та пошкоджені елементи. Кожен інструмент має свої власні можливості, але зазвичай ви можете прокоментувати та/або закрити ваду."
             },
                 "category-building": {
                     "name": "Будівлі"
                 },
-                "category-golf": {
-                    "name": "Гольф"
-                },
                 "category-landuse": {
                     "name": "Землекористування"
                 },
                 "design": {
                     "label": "Конструкція"
                 },
+                "destination_oneway": {
+                    "label": "Пункти призначення"
+                },
                 "devices": {
                     "label": "Пристрої",
                     "placeholder": "1, 2, 3…"
                 "dock": {
                     "label": "Тип"
                 },
+                "dog": {
+                    "label": "Собаки"
+                },
                 "drive_through": {
                     "label": "Проїзд біля пункту обслуговування"
                 },
                         "underground": "Підземна"
                     }
                 },
-                "passenger_information_display": {
-                    "label": "Інформтабло про рух транспорту"
-                },
                 "payment_multi": {
                     "label": "Види розрахунків"
                 },
                     "label": "Тип"
                 },
                 "website": {
-                    "label": "Вебсайт",
-                    "placeholder": "http://example.com/"
+                    "label": "Вебсайт"
                 },
                 "wetland": {
                     "label": "Тип"
                 "amenity/parking": {
                     "name": "Автостоянка"
                 },
+                "amenity/parking/multi-storey": {
+                    "name": "Багатоповерховий паркінг"
+                },
                 "amenity/parking_entrance": {
                     "name": "В’їзд/виїзд в паркінг",
                     "terms": "стоянка, паркінг"
                     "name": "Центру збору відходів для вторинної переробки",
                     "terms": "відходи,накопичення,сортування,воринна,сировина,пляшки,скло,бляшанки,ганчір'я,сміття,лом,поламані,речі"
                 },
+                "amenity/recycling_container": {
+                    "name": "Контейнер для переробки відходів"
+                },
                 "amenity/register_office": {
                     "name": "РАГС (ЗАГС)"
                 },
                     "name": "Ресторан",
                     "terms": "Restaurant, htcnjhfy, ресторан, їжа"
                 },
+                "amenity/restaurant/american": {
+                    "name": "Американський ресторан"
+                },
+                "amenity/restaurant/asian": {
+                    "name": "Азіатський ресторан"
+                },
+                "amenity/restaurant/chinese": {
+                    "name": "Китайський ресторан"
+                },
+                "amenity/restaurant/steakhouse": {
+                    "name": "Стейк-хаус"
+                },
                 "amenity/sanitary_dump_station": {
                     "name": "Місце зливу каналізації",
                     "terms": "каналізація,відходи,станція,послуги,кемпер,Motor Home,Camper,Sanitary,Dump Station,Elsan,CDP,CTDP,Chemical Toilet"
                     "name": "Покриття дороги",
                     "terms": "дорога,покриття,асфальт,бруківка,пісок,грунт,трава"
                 },
+                "attraction": {
+                    "name": "Визначне місце"
+                },
                 "attraction/amusement_ride": {
                     "name": "Атракціони",
                     "terms": "розваги,тематичний,парк,атраціони,каруселі"
                     "name": "Адміністративний кордон",
                     "terms": "Administrative Boundary,flvsyscnhfnbdybq rjhljy, адміністративний кордон, кордон"
                 },
+                "bridge/support/pier": {
+                    "name": "Опора моста"
+                },
                 "building": {
                     "name": "Будинок",
                     "terms": "Building, elbyjr, будівля, споруда, нерухомість"
                 },
+                "building/apartments": {
+                    "name": "Багатоквартирний будинок"
+                },
                 "building/barn": {
                     "name": "Комора",
                     "terms": "амбар, запаси, комора"
                     "name": "Рядний будинок",
                     "terms": "ряд, будинок, таунхаус, будинки в ряд"
                 },
-                "building/train_station": {
-                    "name": "Залізнична станція"
-                },
                 "building/transportation": {
                     "name": "Транспорт",
                     "terms": "вокзал,станція,зупинка,траспорт"
                     "name": "Лунка",
                     "terms": "гольф, отвір"
                 },
-                "golf/lateral_water_hazard_area": {
-                    "name": "Водяна пастка збоку",
-                    "terms": "гольф,вода,пастка,перешкода,поруч,бік,бок,поруч"
-                },
-                "golf/lateral_water_hazard_line": {
-                    "name": "Водяна пастка збоку",
-                    "terms": "гольф,вода,пастка,перешкода,збоку,поруч,бік,бок"
-                },
                 "golf/rough": {
                     "name": "Раф",
                     "terms": "rough, нерівна місцевість, раф, гольф"
                     "name": "Ті",
                     "terms": "гольф, початок, підставка, tee"
                 },
-                "golf/water_hazard_area": {
-                    "name": "Водяна пастка",
-                    "terms": "гольф,пастка,ставок,перед,по переду,перешкода"
-                },
-                "golf/water_hazard_line": {
-                    "name": "Водяна пастка",
-                    "terms": "гольф,пастка,ставок,перед,по переду,перешкода"
-                },
                 "healthcare": {
                     "name": "Охорона здоров'я",
                     "terms": "лікарня,клініка,больниця,доктор,лікар,здоров'я,хвороба,хірург"
                 "highway/bus_stop": {
                     "name": "Автобусна зупинка/платформа"
                 },
+                "highway/construction": {
+                    "name": "Дорога не працює"
+                },
                 "highway/corridor": {
                     "name": "Коридор",
                     "terms": "Indoor Corridor,приміщення,коридор,прохід"
                 },
+                "highway/crossing/marked": {
+                    "name": "Маркований пішохідний перехід"
+                },
                 "highway/cycleway": {
                     "name": "Вело-доріжка",
                     "terms": "Cycle Path, dtkj-ljhsrf, веодоріжка"
                     "name": "Пішохідна доріжка",
                     "terms": "стежка,маршрут,доріжка,тротуар,пішохідна,шлях"
                 },
+                "highway/footway/sidewalk": {
+                    "name": "Тротуар"
+                },
                 "highway/give_way": {
                     "name": "Дати дорогу",
                     "terms": "знак,дати дорогу,зупинка,пріоритет,рух,обмеження"
                     "terms": "перехрестя, стоп, перехід, пшоход"
                 },
                 "landuse": {
-                    "name": "Землекористування",
-                    "terms": "призначення,використання землі,дерева,вода,промисловість,житло,торгівля,бізнес"
+                    "name": "Землекористування"
                 },
                 "landuse/allotments": {
                     "name": "Дачі/горо́ди",
                     "name": "Розплідник рослин",
                     "terms": "vivero,розплідник,рослини,садженці,дерева"
                 },
+                "landuse/pond": {
+                    "name": "Ставок"
+                },
                 "landuse/quarry": {
                     "name": "Кар’єр",
                     "terms": "Quarry, rfhh, кр’єр"
                     "name": "Територія відправлення релігійних обрядів",
                     "terms": "храм,церква,костьол,монастир,релігія,обряд,собор"
                 },
+                "landuse/reservoir": {
+                    "name": "Водосховище"
+                },
                 "landuse/residential": {
                     "name": "Житлова зона",
                     "terms": "житло,помешкання,будинок,маєток,садиба,город"
                 },
+                "landuse/residential/apartments": {
+                    "name": "Житловий комплекс"
+                },
                 "landuse/retail": {
                     "name": "Торговельний квартал",
                     "terms": "магазин, супермаркет, центр, торговий, мегастор, розпродаж, знижки"
                     "terms": "Vineyard, dbyjuhflybr, виноградник"
                 },
                 "leisure": {
-                    "name": "Дозвілля",
-                    "terms": "Leisure, ljpdskkz, дозвілля"
+                    "name": "Дозвілля"
                 },
                 "leisure/adult_gaming_centre": {
                     "name": "Гральні автомати",
                     "name": "Футбольне поле",
                     "terms": "Soccer Field, aenjkmyt gjkt, футбольне поле"
                 },
+                "leisure/pitch/softball": {
+                    "name": "Поле для софтболу"
+                },
                 "leisure/pitch/table_tennis": {
                     "name": "Тенісний стіл",
                     "terms": "теніс,стіл,спорт,пінг-понг,ракетка"
                     "terms": "Line, ksysz, лінія"
                 },
                 "man_made": {
-                    "name": "Штучні споруди",
-                    "terms": "Man Made, inexys cgjhelb, штучні споруди"
+                    "name": "Штучні споруди"
                 },
                 "man_made/adit": {
                     "name": "Штольня",
                     "name": "Камера відео-спостереження",
                     "terms": "камера,спостереження,швидкість"
                 },
+                "man_made/surveillance/camera": {
+                    "name": "Камера відеоспостереження"
+                },
                 "man_made/survey_point": {
                     "name": "Геодезичний пункт",
                     "terms": "Survey Point, utjltpbxybq geyrn, місце спостереження"
                 "man_made/tower/communication": {
                     "name": "Вежа зв'язку"
                 },
+                "man_made/tower/observation": {
+                    "name": "Оглядова вежа"
+                },
                 "man_made/wastewater_plant": {
                     "name": "Очисні споруди",
                     "terms": "Wastewater Plant, jxbcys cgjhelb, дренаж, очисні споруди"
                     "terms": "люк,колодязь,кабель,зв'язок,телефон,інтернет,діра,дріт"
                 },
                 "natural": {
-                    "name": "Природа",
-                    "terms": "Natural, ghbhjlf, природа"
+                    "name": "Природа"
                 },
                 "natural/bare_rock": {
                     "name": "Голі скелі",
                     "name": "Резервуар",
                     "terms": "Reservoir, htpthdefh, резервуар"
                 },
+                "natural/water/river": {
+                    "name": "Ріка"
+                },
+                "natural/water/stream": {
+                    "name": "Струмок"
+                },
                 "natural/wetland": {
                     "name": "Заболочені землі",
                     "terms": "Wetland, pfjkjxtys ptvks, болото, торф, плавні, мангрові зарості"
                     "name": "Трансформатор",
                     "terms": "Transformer, nhfycajhvfnjh, трансформтор"
                 },
-                "public_transport/linear_platform": {
-                    "name": "Громадський транспорт, зупинка/платформа",
-                    "terms": "платформа,зупинка,транзит,громадський,транспорт,перевезення"
-                },
-                "public_transport/linear_platform_aerialway": {
-                    "name": "Канатна дорога, зупника/платформа",
-                    "terms": "підвісна дорога,кабіна,вагон,перевезення,громадський,транспорт,канатна дорога"
-                },
-                "public_transport/linear_platform_bus": {
-                    "name": "Автобусна зупинка/платформа",
-                    "terms": "автобус,платформа,зупинка,транзит,громадський,транспорт,перевезення"
-                },
-                "public_transport/linear_platform_ferry": {
-                    "name": "Поромна зупинка/платформа",
-                    "terms": "пором,док,човен,пірс,платформа,зупинка,транзит,громадський,транспорт,перевезення"
-                },
-                "public_transport/linear_platform_light_rail": {
-                    "name": "Швидкісний трамвай, зупинка/платформа",
-                    "terms": "електричка,трамвай,рейки,дроти,перевезення,громадський,транспорт"
-                },
-                "public_transport/linear_platform_monorail": {
-                    "name": "Монорейка, зупинка/платформа",
-                    "terms": "монорейка,монорельс,платформа,зупинка,транзит,громадський,транспорт,перевезення"
-                },
-                "public_transport/linear_platform_subway": {
-                    "name": "Метро, зупинка/платформа",
-                    "terms": "метро,підземка,платформа,зупинка,транзит,громадський,транспорт,перевезення"
-                },
-                "public_transport/linear_platform_train": {
-                    "name": "Залізнична зупинка/платформа",
-                    "terms": "залізниця,потяг,вагон,платформа,зупинка,транзит,громадський,транспорт,перевезення"
-                },
-                "public_transport/linear_platform_tram": {
-                    "name": "Трамвайна зупинка/платформа",
-                    "terms": "трамвай,вагон,електротранспорт,рейки,дроти,платформа,зупинка,транзит,громадський,транспорт,перевезення"
-                },
-                "public_transport/linear_platform_trolleybus": {
-                    "name": "Тролейбусна зупинка/платформа",
-                    "terms": "тролейбус,вагон,електротранспорт,електробус,дроти,платформа,зупинка,транзит,громадський,транспорт,перевезення,рогатий"
-                },
                 "public_transport/platform": {
                     "name": "Громадський транспорт, зупинка/платформа",
                     "terms": "платформа,зупинка,транзит,громадський,транспорт,перевезення"
                     "name": "Годинники",
                     "terms": "годинник,магазин,салон,прикраси,чоловічі,жіночі,спортивні"
                 },
+                "shop/water": {
+                    "name": "Магазин питної води"
+                },
                 "shop/water_sports": {
                     "name": "Водный спорт/Спорттовари",
                     "terms": "спорт, товари, плавання, окуляри, костюм, купальник, плавки, ласти"
                     "terms": "магазин, вино, алкоголь, грапа, сангрія"
                 },
                 "tourism": {
-                    "name": "Туризм",
-                    "terms": "Tourism, nehbpv, туризм"
+                    "name": "Туризм"
                 },
                 "tourism/alpine_hut": {
                     "name": "Гірський притулок",
             }
         },
         "community": {
+            "bw-facebook": {
+                "name": "Мапимо Ботсвану, Facebook",
+                "description": "Сторінка OpenStreetMap в Ботсвані"
+            },
+            "bw-twitter": {
+                "name": "Мапимо Ботсвану, Twitter",
+                "description": "Twitter OpenStreetMap в Ботсвані"
+            },
             "cape-coast-youthmappers": {
                 "name": "Університет Кейп-Кост - YouthMappers",
                 "description": "Приєднуйтесь до нас у Twitter: {url}",
                     }
                 }
             },
+            "osm-india-forum": {
+                "name": "Форум OpenStreetMap Індія",
+                "description": "Форум OpenStreetMap Індія"
+            },
+            "osm-india-github": {
+                "name": "OpenStreetMap Індія GitHub",
+                "description": "Пишіть код разом з нами: {url}"
+            },
             "OSM-india-mailinglist": {
                 "name": "OpenStreetMap Індія, список розсилки",
                 "description": "Talk-in – офіційний список розсилки Індійської спільноти"
             },
+            "osm-india-telegram": {
+                "name": "OpenStreetMap Індія Telegram",
+                "description": "Приєднуйтесь до нашої родини: {url}"
+            },
             "OSM-india-twitter": {
                 "name": "OpenStreetMap Індія Twitter",
                 "description": "Ми просто в твітемо: {url}"
             },
+            "osm-india-website": {
+                "name": "OpenStreetMap Індія",
+                "description": "Учасники та користувачі OpenStreetMap в Індії"
+            },
+            "osm-india-wiki": {
+                "name": "OpenStreetMap ВікіПроект Індія",
+                "description": "Все що вам треба знати про мапінг в Індії: {url}"
+            },
+            "osm-india-youtube": {
+                "name": "OpenStreetMap Індія Youtube",
+                "description": "Підпишіться на наш канал: {url}"
+            },
             "OSM-India-Puducherry-Facebook": {
                 "name": "Free Software Hardware Movement - Facebook",
                 "description": "Відвідайте сторінку FSHM у Facebook, щоб дізнатись про події та заходи",
                 "extendedDescription": "FSHM організовує події пов'язані з вільним програмним та апаратним забезпечення, технологіями, розповсюдженням інформації про них та OpenStreetMap. На цій сторінці у FB ви завжди знайдете свіжу інформацію про події."
             },
+            "OSM-Puducherry-Mailing-List": {
+                "name": "Free Software Hardware Movement - Список розсилки",
+                "description": "Список розсилки FSHM Puducherry для обговорення мапінгу та інших речей в Пудучеррі.",
+                "extendedDescription": "FSHM організовує події пов'язані з вільним програмним та апаратним забезпечення, технологіями, розповсюдженням інформації про них та OpenStreetMap."
+            },
             "OSM-India-Puducherry-Matrix": {
                 "name": "Free Software Hardware Movement - Matrix",
                 "description": "Група FSHM Riot для обговорення, поширення та сповіщення про заходи та події у та навколо Пудучеррі",
                 "description": "Покращити OpenStreetMap в Індонезії",
                 "extendedDescription": "Мапите в Індонезії? Маєте питання, бажаєте зв'язатись зі спільнотою? Приєднуйтесь до нас за адресою {Url}. Ласкаво просимо!"
             },
+            "osm-iran-aparat": {
+                "name": "OpenStreetMap Іран, Aparat",
+                "description": "Підпишіться на наш канал: {url}",
+                "extendedDescription": "Відео про все, що пов'язано з OpenStreetMap. Переважно перською."
+            },
+            "osm-iran-forum": {
+                "name": "Форум OpenStreetMap Іран",
+                "description": "Форум OpenStreetMap Іран",
+                "extendedDescription": "Форум для користувачів OpenStreetMap в Ірані. Не соромтеся ставити питання та обговорювати  їх з іншими!"
+            },
+            "osm-iran-telegram": {
+                "name": "OpenStreetMap Іран Telegram",
+                "description": "Ласкаво просимо, приєднатись до нашого каналу в Telegram {url}. У нас також є група з великою кількістю ОСМерів, що цікавляться Іраном. Шукайте їх в описі каналу."
+            },
             "OSM-japan-facebook": {
                 "name": "Японська спільнота OpenStreetMap",
                 "description": "Учасники та користувачі OpenStreetMap в Японії"
                 "description": "Покращити OpenStreetMap в Непалі",
                 "extendedDescription": "Мапите в Непалі? Маєте питання, бажаєте зв'язатись зі спільнотою? Приєднуйтесь до нас за адресою {Url}. Ласкаво просимо!"
             },
+            "OSM-Asia-mailinglist": {
+                "name": "OpenStreetMap Азія, список розсилки",
+                "description": "Talk-asia – офіційний список розсилки спільноти Азії"
+            },
+            "osm-asia-telegram": {
+                "name": "OpenStreetMap Азія Telegram",
+                "description": "Приєднуйтесь до нашої родини: {url}"
+            },
             "OSM-PH-facebook": {
                 "name": "OpenStreetMap Філіппіни у Facebook",
                 "description": "Ласкаво просимо до OpenStreetMap Філіппіни, ми закликаємо всіх філіппінців взяти участь в OpenStreetMap."
                 "extendedDescription": "Ми є групою маперів-волонтерів, які прагнуть вдосконалити OpenStreetMap в окрузі Колумбія. Ми також намагаємось поширити інформацію про екосистему OSM, аналізі даних, картографію та ГІС серед зацікавлених осіб. Ми збираємося щомісяця на зустрічах, щоб покращити якусь частину нашого міста."
             },
             "OpenCleveland-meetup": {
+                "name": "Відкрити Cleveland",
                 "description": "Покращити OpenStreetMap навколо Клівленда"
             },
+            "OSM-Boston": {
+                "name": "OpenStreetMap Бостон"
+            },
             "OSM-US-Slack": {
                 "description": "Запрошуємо всіх! Зареєструйтеся на {signupUrl}"
             },
                 "name": "Western Slope OSM Facebook"
             },
             "Maptime-Australia-Slack": {
-                "name": "Slack Maptime Австралія"
+                "name": "Slack Maptime Австралія",
+                "description": "Зареєструйтеся на {signupUrl}"
             },
             "talk-au": {
                 "name": "Talk-au Список розсилки"
                 "description": "Приєднуйтесь до спільноти OpenStreetMap Аргентина у Facebook"
             },
             "OSM-AR-forum": {
-                "name": "Форум OpenStreetMap Argentina",
+                "name": "Форум OpenStreetMap Аргентина",
                 "description": "Приєднуйтесь до спільноти OpenStreetMap Аргентина на форумі"
             },
             "OSM-AR-mailinglist": {
-                "name": "Talk-ar Список розсилки"
+                "name": "Talk-ar Список розсилки",
+                "description": "Історичний список розсилки. Сьогодні майже не використовується."
+            },
+            "OSM-AR-telegram": {
+                "name": "OpenStreetMap Аргентина Telegram"
             },
             "OSM-AR-twitter": {
                 "name": "OpenStreetMap Аргентина Twitter",
index 1e5d3fe17f8098998b92f326079c65571eebb9d9..87ae33b001cf129c2a3b2ad9f47f84d28df3a3d7 100644 (file)
                 "restriction": "Không thể gộp các đối tượng này vì sẽ làm hư một quan hệ “{relation}”.",
                 "relation": "Không thể gộp các đối tượng này vì có vai trò quan hệ xung đột.",
                 "incomplete_relation": "Không thể gộp vì một trong số đối tượng này chưa được tải về hoàn toàn.",
-                "conflicting_tags": "Không thể gộp các đối tượng này vì một số thẻ có giá trị xung đột."
+                "conflicting_tags": "Không thể gộp các đối tượng này vì một số thẻ có giá trị xung đột.",
+                "paths_intersect": "Không thể gộp các đối tượng này vì lối kết quả sẽ tự giao điểm."
             },
             "move": {
                 "title": "Di chuyển",
                 "tooltip_data": "Đặt dữ liệu này vào giữa bản đồ và phóng vừa.",
                 "tooltip_issue": "Đặt vấn đề này vào giữa bản đồ và phóng vừa."
             },
-            "no_documentation_combination": "Không có tài liệu về tổ hợp thẻ này",
-            "no_documentation_key": "Không có tài liệu về chìa khóa này",
             "show_more": "Xem thêm",
             "view_on_osm": "Xem tại openstreetmap.org",
             "view_on_keepRight": "Xem tại keepright.at",
             "role": "Vai trò",
             "choose": "Chọn thể loại đối tượng",
             "results": "{n} kết quả cho {search}",
-            "reference": "Tra cứu OpenStreetMap Wiki",
-            "edit_reference": "Sửa hoặc dịch lời miêu tả",
+            "no_documentation_key": "Không có tài liệu.",
+            "edit_reference": "sửa/dịch",
             "wiki_reference": "Tra cứu tài liệu",
             "wiki_en_reference": "Tra cứu tài liệu tiếng Anh",
             "back_tooltip": "Thay đổi đối tượng",
                     "tooltip": "Các vấn đề bản đồ được phát hiện tự động từ keepright.at",
                     "title": "Vấn đề KeepRight"
                 },
+                "improveOSM": {
+                    "tooltip": "Dữ liệu bị thiếu do improveosm.org tự động dò",
+                    "title": "Vấn đề ImproveOSM"
+                },
                 "custom": {
                     "tooltip": "Kéo thả một tập tin dữ liệu vào trang hoặc bấm nút để thiết lập",
                     "title": "Dữ liệu Bản đồ Tùy biến",
                 "tooltip": "Đường Dây điện, Nhà máy Điện, Trạm Điện Phụ, v.v."
             },
             "past_future": {
-                "description": "Quá khứ & Tương lai",
                 "tooltip": "Đề nghị, Đang Xây, Bỏ hoang, Phá hủy, v.v."
             },
             "others": {
-                "description": "Khác",
                 "tooltip": "Những Gì Khác"
             }
         },
             "on_wiki": "{tag} tại wiki.osm.org",
             "used_with": "được sử dụng với {type}"
         },
-        "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à.",
-            "generic_name": "Có thể tên chung",
-            "generic_name_tooltip": "Đối tượng này hình như có tên chung là “{name}”. Vui lòng chỉ sử dụng hộp Tên để ghi tên chính thức của đối tượng.",
-            "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_line_tooltip": "Chọn loại đường kẻ.",
-            "untagged_area": "Vùng không có thẻ",
-            "untagged_area_tooltip": "Chọn loại vùng.",
-            "untagged_relation": "Quan hệ không có thẻ",
-            "untagged_relation_tooltip": "Chọn loại quan hệ.",
-            "many_deletions": "Bạn có chắc chắn muốn xóa {n} đối tượng, tính cả {p} nốt, {l} đường kẻ, {a} vùng, và {r} quan hệ? Các đối tượng này sẽ bị xóa khỏi bản đồ công cộng tại openstreetmap.org.",
-            "tag_suggests_area": "Thẻ {tag} có lẽ dành cho vùng nhưng được gắn vào đường kẻ",
-            "deprecated_tags": "Không khuyến khích sử dụng các thẻ: {tags}"
-        },
         "zoom": {
             "in": "Phóng to",
             "out": "Thu nhỏ"
         "cannot_zoom": "Không thể thu nhỏ hơn trong chế độ hiện tại.",
         "full_screen": "Bật/tắt Chế độ Toàn màn hình",
         "QA": {
+            "improveOSM": {
+                "title": "Sự dò ImproveOSM",
+                "geometry_types": {
+                    "path": "lối",
+                    "parking": "bãi đậu xe",
+                    "road": "đường sá",
+                    "both": "đường sá và bãi đậu xe"
+                },
+                "directions": {
+                    "east": "đông",
+                    "north": "bắc",
+                    "northeast": "đông bắc",
+                    "northwest": "tây bắc",
+                    "south": "nam",
+                    "southeast": "đông nam",
+                    "southwest": "tây nam",
+                    "west": "tây"
+                },
+                "error_types": {
+                    "ow": {
+                        "title": "Đường Thiếu Thẻ Một chiều",
+                        "description": "Trong số {num_trips} chuyến đi được ghi lại trên đoạn {highway} này, {percentage}% đi từ {from_node} đến {to_node}. Thẻ “oneway” (đường một chiều) có thể bị thiếu."
+                    },
+                    "mr": {
+                        "title": "Thiếu Đối tượng",
+                        "description": "Số {num_trips} chuyến đi được ghi lại trong khu vực này gợi ý rằng một {geometry_type} tồn tại tại đây nhưng chưa được thêm vào bản đồ."
+                    },
+                    "tr": {
+                        "title": "Thiếu Hạn chế Rẽ",
+                        "description": "Trong số {num_trips} chuyến đi về hướng {travel_direction} được ghi lại, {num_passed} chuyến đi rẽ từ {from_way} đến {to_way} tại {junction}. Một hạn chế rẽ “{turn_restriction}” có thể bị thiếu."
+                    }
+                }
+            },
             "keepRight": {
                 "title": "Lỗi KeepRight",
                 "detail_title": "Lỗi",
                 "title": "Bảo đảm chất lượng",
                 "intro": "Các *bảo đảm chất lượng* có thể nhận ra các thẻ sai, con đường không nối liền, và vấn đề khác trong OpenStreetMap để bạn giải quyết. Để xem các vấn đề bảo đảm chất lượng hiện tại, bấm nút {data} **Dữ liệu bản đồ** ở bên phải của bản đồ và bật một lớp bảo đảm chất lượng cụ thể.",
                 "tools_h": "Công cụ",
-                "tools": "Hiện tại chỉ hỗ trợ công cụ [KeepRight](https://www.keepright.at/), nhưng mai mốt iD sẽ hỗ trợ [Osmose](https://osmose.openstreetmap.fr/), [ImproveOSM](https://improveosm.org/vi/), và thêm công cụ bảo đảm chất lượng.",
+                "tools": "Hiện tại các công cụ [KeepRight](https://www.keepright.at/) và [ImproveOSM](https://improveosm.org/vi/) được hỗ trợ. Mai mốt iD sẽ hỗ trợ [Osmose](https://osmose.openstreetmap.fr/) và thêm công cụ bảo đảm chất lượng.",
                 "issues_h": "Xử lý Vấn đề",
                 "issues": "Một vấn đề bảo đảm chất lượng được xử lý giống như một ghi chú. Nhấn chuột vào ghim để xem các chi tiết trong thanh bên. Mỗi công cụ có khả năng khác nhau, nhưng nói chung bạn có thể nhận xét hoặc đánh dấu giải quyết vấn đề."
             },
                 "category-building": {
                     "name": "Liên quan đến Tòa nhà"
                 },
-                "category-golf": {
+                "category-golf-area": {
+                    "name": "Liên quan đến Golf"
+                },
+                "category-golf-line": {
                     "name": "Liên quan đến Golf"
                 },
                 "category-landuse": {
                 "animal_shelter": {
                     "label": "Loại Thú"
                 },
+                "architect": {
+                    "label": "Kiến trúc sư"
+                },
                 "area/highway": {
                     "label": "Loại"
                 },
                     "label": "Chiều dài (Mét)"
                 },
                 "level": {
-                    "label": "Tầng"
+                    "label": "Lầu"
                 },
                 "levels": {
                     "label": "Số Tầng",
                         "underground": "Ngầm"
                     }
                 },
-                "passenger_information_display": {
-                    "label": "Hệ thống Thông tin Hành khách"
-                },
                 "payment_multi": {
                     "label": "Phương thức Thanh toán"
                 },
                 "restrictions": {
                     "label": "Hạn chế rẽ"
                 },
+                "roof/colour": {
+                    "label": "Màu Mái"
+                },
                 "rooms": {
                     "label": "Số Phòng"
                 },
                     },
                     "placeholder": "Đi bộ Đường dài Núi, Đi bộ Đường dài Anpơ…"
                 },
+                "salt": {
+                    "label": "Nước mặn"
+                },
                 "sanitary_dump_station": {
                     "label": "Trạm Đổ Chất thải Vệ sinh"
                 },
                     },
                     "placeholder": "Có, Không có, Chỉ có Mang về…"
                 },
+                "tidal": {
+                    "label": "Thủy triều"
+                },
                 "to": {
                     "label": "Đến"
                 },
                     "name": "Đồng hồ",
                     "terms": "đồng hồ, dong ho"
                 },
+                "amenity/clock/sundial": {
+                    "name": "Đồng hồ Mặt Trời",
+                    "terms": "đồng hồ mặt trời, đồng hồ ánh nắng mặt trời, dong ho mat troi, dong ho anh nang mat troi"
+                },
                 "amenity/college": {
                     "name": "Sân trường Cao đẳng",
                     "terms": "sân trường cao đẳng, trường cao đẳng, cao đẳng, cđ, san truong cao dang, truong cao dang, cao dang, cd"
                     "name": "Tiệm Ăn nhanh Kebab",
                     "terms": "tiệm kebab, quán kebab, nhà hàng kebab, quán ăn kebab, kebab xiên, doner kebab, tiệm ăn nhanh kebab, tiem kebab, quan kebab, nha hang kebab, quan an kebab, kebab xien, tiem an nhanh kebab"
                 },
+                "amenity/fast_food/mexican": {
+                    "name": "Tiệm Ăn nhanh Mễ",
+                    "terms": "nhà hàng mễ, nhà hàng méxico, nhà hàng mexico, quán ăn mễ, quán ăn méxico, quán ăn mexico, tiệm ăn mễ, tiệm ăn méxico, tiệm ăn mexico, tiệm mễ, tiệm méxico, tiệm mexico, nhà ăn mễ, nhà ăn méxico, nhà ăn mexico, phòng ăn mễ, phòng ăn méxico, phòng ăn mexico, nhà hàng đồ mễ, nhà hàng đồ méxico, nhà hàng đồ mexico, quán ăn đồ mễ, quán ăn đồ méxico, quán ăn đồ mexico, tiệm ăn đồ mễ, tiệm ăn đồ méxico, tiệm ăn đồ mexico, tiệm đồ mễ, tiệm đồ méxico, tiệm đồ mexico, nhà ăn đồ mễ, nhà ăn đồ méxico, nhà ăn đồ mexico, phòng ăn đồ mễ, phòng ăn đồ méxico, phòng ăn đồ mexico, taco, burrito, carne asada, enchilada, fajita, nacho, tortilla, tamale, quesadilla, nha hang me, nha hang mexico, nha hang mexico, quan an me, quan an mexico, quan an mexico, tiem an me, tiem an mexico, tiem an mexico, tiem me, tiem mexico, tiem mexico, nha an me, nha an mexico, nha an mexico, phong an me, phong an mexico, phong an mexico, nha hang do me, nha hang do mexico, nha hang do mexico, quan an do me, quan an do mexico, quan an do mexico, tiem an do me, tiem an do mexico, tiem an do mexico, tiem do me, tiem do mexico, tiem do mexico, nha an do me, nha an do mexico,, nha an do mexico, phong an do me, phong an do mexico, phong an do mexico"
+                },
                 "amenity/fast_food/pizza": {
                     "name": "Tiệm Ăn nhanh Pizza",
                     "terms": "tiệm pizza, quán pizza, nhà hàng pizza, quán ăn pizza, tiệm ăn nhanh pizza, tiem pizza, quan pizza, nha hang pizza, quan an pizza, tiem an nhanh pizza"
                 },
                 "amenity/restaurant/mexican": {
                     "name": "Nhà hàng Mễ",
-                    "terms": "nhà hàng mễ, nhà hàng méxico, nhà hàng mexico, quán ăn mễ, quán ăn méxico, quán ăn mexico, tiệm ăn mễ, tiệm ăn méxico, tiệm ăn mexico, tiệm mễ, tiệm méxico, tiệm mexico, nhà ăn mễ, nhà ăn méxico, nhà ăn mexico, phòng ăn mễ, phòng ăn méxico, phòng ăn mexico, nhà hàng đồ mễ, nhà hàng đồ méxico, nhà hàng đồ mexico, quán ăn đồ mễ, quán ăn đồ méxico, quán ăn đồ mexico, tiệm ăn đồ mễ, tiệm ăn đồ méxico, tiệm ăn đồ mexico, tiệm đồ mễ, tiệm đồ méxico, tiệm đồ mexico, nhà ăn đồ mễ, nhà ăn đồ méxico,, nhà ăn đồ mexico, phòng ăn đồ mễ, phòng ăn đồ méxico, phòng ăn đồ mexico, taco, burrito, carne asada, enchilada, fajita, nacho, tortilla, tamale, quesadilla, nha hang me, nha hang mexico, nha hang mexico, quan an me, quan an mexico, quan an mexico, tiem an me, tiem an mexico, tiem an mexico, tiem me, tiem mexico, tiem mexico, nha an me, nha an mexico, nha an mexico, phong an me, phong an mexico, phong an mexico, nha hang do me, nha hang do mexico, nha hang do mexico, quan an do me, quan an do mexico, quan an do mexico, tiem an do me, tiem an do mexico, tiem an do mexico, tiem do me, tiem do mexico, tiem do mexico, nha an do me, nha an do mexico,, nha an do mexico, phong an do me, phong an do mexico, phong an do mexico"
+                    "terms": "nhà hàng mễ, nhà hàng méxico, nhà hàng mexico, quán ăn mễ, quán ăn méxico, quán ăn mexico, tiệm ăn mễ, tiệm ăn méxico, tiệm ăn mexico, tiệm mễ, tiệm méxico, tiệm mexico, nhà ăn mễ, nhà ăn méxico, nhà ăn mexico, phòng ăn mễ, phòng ăn méxico, phòng ăn mexico, nhà hàng đồ mễ, nhà hàng đồ méxico, nhà hàng đồ mexico, quán ăn đồ mễ, quán ăn đồ méxico, quán ăn đồ mexico, tiệm ăn đồ mễ, tiệm ăn đồ méxico, tiệm ăn đồ mexico, tiệm đồ mễ, tiệm đồ méxico, tiệm đồ mexico, nhà ăn đồ mễ, nhà ăn đồ méxico, nhà ăn đồ mexico, phòng ăn đồ mễ, phòng ăn đồ méxico, phòng ăn đồ mexico, taco, burrito, carne asada, enchilada, fajita, nacho, tortilla, tamale, quesadilla, nha hang me, nha hang mexico, nha hang mexico, quan an me, quan an mexico, quan an mexico, tiem an me, tiem an mexico, tiem an mexico, tiem me, tiem mexico, tiem mexico, nha an me, nha an mexico, nha an mexico, phong an me, phong an mexico, phong an mexico, nha hang do me, nha hang do mexico, nha hang do mexico, quan an do me, quan an do mexico, quan an do mexico, tiem an do me, tiem an do mexico, tiem an do mexico, tiem do me, tiem do mexico, tiem do mexico, nha an do me, nha an do mexico,, nha an do mexico, phong an do me, phong an do mexico, phong an do mexico"
                 },
                 "amenity/restaurant/noodle": {
                     "name": "Nhà hàng Mì/Bún/Miến/Phở/v.v.",
                     "name": "Dãy Nhà",
                     "terms": "dãy nhà, day nha"
                 },
-                "building/train_station": {
-                    "name": "Nhà ga"
-                },
                 "building/transportation": {
                     "name": "Tòa nhà Phương tiện Công cộng",
                     "terms": "tòa nhà phương tiện công cộng, toà nhà phương tiện công cộng, tòa nhà ptcc, toà nhà ptcc, kiến trúc phương tiện công cộng, kiến trúc ptcc, toa nha phuong tien cong cong, toa nha ptcc, kien truc phuong tien cong cong, kien truc ptcc"
                     "name": "Lỗ Golf",
                     "terms": "lỗ golf, lỗ gôn, hố golf, hố gôn, lo golf, lo gon, ho golf, ho gon"
                 },
-                "golf/lateral_water_hazard_area": {
-                    "name": "Bẫy Nước Cắt ngang",
-                    "terms": "bẫy nước cắt ngang, chướng ngại nước cắt ngang, dòng sông, dòng suối, bay nuoc cat ngang, chuong ngai nuoc cat ngang, dong song, dong suoi"
-                },
-                "golf/lateral_water_hazard_line": {
+                "golf/lateral_water_hazard": {
                     "name": "Bẫy Nước Cắt ngang",
                     "terms": "bẫy nước cắt ngang, chướng ngại nước cắt ngang, dòng sông, dòng suối, bay nuoc cat ngang, chuong ngai nuoc cat ngang, dong song, dong suoi"
                 },
                     "name": "Điểm Phát bóng",
                     "terms": "điểm phát bóng, vị trí phát bóng, diem phat bong, vi tri phat bong"
                 },
-                "golf/water_hazard_area": {
-                    "name": "Bẫy Nước",
-                    "terms": "bẫy nước, chướng ngại nước, ao hồ, ao nước, hồ nước, bay nuoc, chuong ngai nuoc, ao ho, ao nuoc, ho nuoc"
-                },
-                "golf/water_hazard_line": {
-                    "name": "Bẫy Nước",
-                    "terms": "bẫy nước, chướng ngại nước, ao hồ, ao nước, hồ nước, bay nuoc, chuong ngai nuoc, ao ho, ao nuoc, ho nuoc"
-                },
                 "healthcare": {
                     "name": "Trung tâm Y tế",
                     "terms": "trung tâm y tế, trạm y tế, bác sĩ, bác sỹ, thầy thuốc, bệnh viện, khỏe mạnh, khoẻ mạnh, trung tam y te, tram y te, bac si, bac sy, thay thuoc, benh vien, khoe manh"
                     "terms": "giao lộ, chỗ đường gặp nhau, nơi đường gặp nhau, giao lo, cho duong gap nhau, noi duong gap nhau"
                 },
                 "landuse": {
-                    "name": "Sử dụng Đất",
-                    "terms": "kiểu sử dụng đất, kiểu dùng đất, kieu su dung dat, kieu dung dat"
+                    "name": "Sử dụng Đất"
                 },
                 "landuse/allotments": {
                     "name": "Khu Vườn Gia đình",
                     "terms": "vườn nho, vuon nho"
                 },
                 "leisure": {
-                    "name": "Giải trí",
-                    "terms": "giải trí, thể thao, thể dục, giai tri, the thao, the duc"
+                    "name": "Giải trí"
                 },
                 "leisure/adult_gaming_centre": {
                     "name": "Trung tâm Đánh bạc",
                     "name": "Bàn ăn Ngoài trời",
                     "terms": "bàn ăn ngoài trời, bàn ghế dã ngoại, bàn ghế dài, ban an ngoai troi, ban ghe da ngoai, ban ghe dai"
                 },
+                "leisure/picnic_table/chess": {
+                    "name": "Bàn Cờ vua",
+                    "terms": "bàn cờ vua, bàn cờ quốc tế, cờ vua, cờ quốc tế, ban co vua, ban co quoc te, co vua, co quoc te"
+                },
                 "leisure/pitch": {
                     "name": "Sân Thể thao",
                     "terms": "sân thể thao, sân cỏ, sân vận động, svđ, san the thao, san co, san van dong, svd"
                     "name": "Trung tâm Thể thao",
                     "terms": "trung tâm thể thao, tòa nhà thể thao, toà nhà thể thao, sân vận động trong nhà, svđ trong nhà, trung tam the thao, toa nha the thao, san van dong trong nha, svd trong nha"
                 },
+                "leisure/sports_centre/climbing": {
+                    "name": "Khu Tường Leo núi",
+                    "terms": "khu tường leo núi, tường leo núi, tường leo núi nhân tạo, khu tuong leo nui, tuong leo nui, tuong leo nui nhan tao"
+                },
                 "leisure/sports_centre/swimming": {
                     "name": "Trung tâm Bơi lội",
                     "terms": "trung tâm bơi lội, trung tâm spa, trung tam boi loi, trung tam spa"
                     "terms": "đường kẻ, đường, lối, duong ke, duong, loi"
                 },
                 "man_made": {
-                    "name": "Công trình",
-                    "terms": "công trình, nhân tạo, cong trinh, nhan tao"
+                    "name": "Công trình"
                 },
                 "man_made/adit": {
                     "name": "Lối vào Mỏ",
                     "name": "Tháp",
                     "terms": "tháp, thap"
                 },
+                "man_made/tower/bell_tower": {
+                    "name": "Tháp chuông",
+                    "terms": "tháp chuông, lầu chuông, gác chuông, tháp nhà thờ, thap chuong, lau chuong, gac chuong, thap nha tho"
+                },
                 "man_made/tower/communication": {
                     "name": "Tháp Giao thông",
                     "terms": "tháp giao thông, tháp viễn thông, thap giao thong, thap vien thong"
                 },
+                "man_made/tower/minaret": {
+                    "name": "Tháp Nhà thờ Hồi giáo",
+                    "terms": "tháp nhà thờ hồi giáo, tháp giáo đường hồi giáo, tháp thánh đường hồi giáo, thap nha tho hoi giao, thap giao duong hoi giao, thap thanh duong hoi giao"
+                },
                 "man_made/tower/observation": {
                     "name": "Tháp Quan sát",
                     "terms": "tháp quan sát, trạm quan sát, tầng quan sát, thap quan sat, tram quan sat, tang quan sat"
                     "terms": "hố cáp viễn thông, lỗ cáp viễn thông, ho cap vien thong, lo cap vien thong"
                 },
                 "natural": {
-                    "name": "Thiên nhiên",
-                    "terms": "thiên nhiên, tự nhiên, thien nhien, tu nhien"
+                    "name": "Thiên nhiên"
                 },
                 "natural/bare_rock": {
                     "name": "Hòn đá Không",
                     "name": "Nước",
                     "terms": "nước, nuoc"
                 },
+                "natural/water/basin": {
+                    "name": "Bể",
+                    "terms": "bể, bể nước, bể nước mưa, bồn, vũng, be, be nuoc, be nuoc mua, bon, vung"
+                },
                 "natural/water/canal": {
                     "name": "Kênh đào",
                     "terms": "kênh đào, sông đào, kenh dao, song dao"
                     "name": "Máy biến áp",
                     "terms": "máy biến áp, may bien ap"
                 },
-                "public_transport/linear_platform": {
-                    "name": "Trạm/Bến Phương tiện Công cộng",
-                    "terms": "trạm, bến, ke, ke ga, phương tiện công cộng, ptcc, giao thông công cộng, gtcc, tram, ben, phuong tien cong cong, giao thong cong cong"
-                },
-                "public_transport/linear_platform_aerialway": {
-                    "name": "Trạm/Bến Cáp treo",
-                    "terms": "trạm cáp treo, trạm thang kéo, bến cáp treo, bến thang kéo, tram cap treo, tram thang keo, ben cap treo, ben thang keo"
-                },
-                "public_transport/linear_platform_bus": {
-                    "name": "Trạm/Bến Xe buýt",
-                    "terms": "trạm xe buýt, trạm xe bus, bến xe buýt, bến xe bus, ke buýt, ke bus, tram xe buyt, tram xe bus, ben xe buyt, ben xe bus, ke buyt"
-                },
-                "public_transport/linear_platform_ferry": {
-                    "name": "Bến Phà",
-                    "terms": "bến phà, ke phà, ben pha, ke pha"
-                },
-                "public_transport/linear_platform_light_rail": {
-                    "name": "Trạm/Bến Đường sắt Nhẹ",
-                    "terms": "trạm đường sắt nhẹ, trạm đường ray nhẹ, trạm tàu điện, bến đường sắt nhẹ, bến đường ray nhẹ, bến tàu điện, ke đường sắt nhẹ, ke đường ray nhẹ, ke tàu điện, tram duong sat nhe, tram duong ray nhe, tram tau dien, ben duong sat nhe, ben duong ray nhe, ben tau dien, ke duong sat nhe, ke duong ray nhe, ke tau dien"
-                },
-                "public_transport/linear_platform_monorail": {
-                    "name": "Trạm/Bến Tàu một ray",
-                    "terms": "trạm tàu một ray, trạm monorail, bến tàu một ray, bến monorail, ke tàu một ray, ke monorail, tram tau mot ray, tram monorail, ben tau mot ray, ben monorail, ke tau mot ray"
-                },
-                "public_transport/linear_platform_subway": {
-                    "name": "Trạm/Bến Tàu điện ngầm",
-                    "terms": "trạm tàu điện ngầm, bến tàu điện ngầm, tram tau dien ngam, ben tau dien ngam"
-                },
-                "public_transport/linear_platform_train": {
-                    "name": "Trạm/Bến Xe lửa",
-                    "terms": "trạm xe lửa, trạm tàu hỏa, trạm tau hoả, bến xe lửa, bến tàu hỏa, bến tàu hoả, tram xe lua, tram tau hoa, ben xe lua, ben tau hoa"
-                },
-                "public_transport/linear_platform_tram": {
-                    "name": "Trạm/Bến Tàu điện",
-                    "terms": "trạm tàu điện, trạm xe điện, bến tàu điện, bến xe điện, ke tàu điện, ke xe điện, tram tau dien, tram xe dien, ben tau dien, ben xe dien, ke tau dien, ke xe dien"
-                },
-                "public_transport/linear_platform_trolleybus": {
-                    "name": "Trạm/Bến Xe điện Bánh hơi",
-                    "terms": "trạm xe điện bánh hơi, trạm xe buýt điện, trạm xe bus điện, bến xe điện bánh hơi, bến xe buýt điện, bến xe bus điện, ke xe điện bánh hơi, ke xe buýt điện, ke xe bus điện, tram xe dien banh hoi, tram xe buyt dien, tram xe bus dien, ben xe dien banh hoi, ben xe buyt dien, ben xe bus dien, ke xe dien banh hoi, ke xe buyt dien, ke xe bus dien"
-                },
                 "public_transport/platform": {
                     "name": "Trạm/Bến Phương tiện Công cộng",
                     "terms": "trạm, bến, ke, ke ga, phương tiện công cộng, ptcc, giao thông công cộng, gtcc, tram, ben, phuong tien cong cong, giao thong cong cong"
                     "terms": "tiệm rượu vang, nơi bán rượu vang, chỗ bán rượu vang, quầy bán rượu vang, cửa hàng rượu vang, cửa hàng bán rượu vang, tiệm bán rượu vang, tiem ruou vang, noi ban ruou vang, cho ban ruou vang, quay ban ruou vang, cua hang ruou vang, cua hang ban ruou vang, tiem ban ruou vang"
                 },
                 "tourism": {
-                    "name": "Du lịch",
-                    "terms": "du lịch, máy bay, xe lửa, chuyến bay, nghỉ hè, du lich, may bay, xe lua, chuyen bay, nghi he"
+                    "name": "Du lịch"
                 },
                 "tourism/alpine_hut": {
                     "name": "Túp lều trên Núi",
                 "description": "talk-is là danh sách thư chính thức của cộng đồng OSM Iceland"
             },
             "is-twitter": {
+                "name": "OSM Iceland tại Twitter",
                 "description": "Twitter OpenStreetMap tại Iceland"
             },
             "it-facebook": {
index 8fbd2d677aaa2d3c160bfdd1a4aa6b86f889e07b..d5393685efb9786965c66ca7c46931bb89d91b95 100644 (file)
             "locating": "摷緊地方,等下⋯⋯"
         },
         "inspector": {
-            "no_documentation_combination": "爾組籤,未有文件解",
-            "no_documentation_key": "爾個圖例,未有文件解。",
             "show_more": "睇多啲",
             "view_on_osm": "入公家街圖睇",
             "all_fields": "所有欄位",
             "role": "作用",
             "choose": "揀地貌",
             "results": "{search}搵出{n}項",
-            "reference": "入公家街圖百科睇",
             "back_tooltip": "轉地貌",
             "remove": "移走",
             "search": "搵",
                 "tooltip": "電纜、發電廠、變電站等。"
             },
             "past_future": {
-                "description": "過往/未來",
                 "tooltip": "籌備、興建、廢棄、移平等。"
             },
             "others": {
-                "description": "其他",
                 "tooltip": "其他"
             }
         },
             "on_wiki": "喺公家街圖百科度嘅{tag}",
             "used_with": "同{type}一齊用"
         },
-        "validations": {
-            "disconnected_highway": "道無駁通",
-            "untagged_point": "未有籤嘅點",
-            "untagged_point_tooltip": "揀種地貌,兼且寫呢處係乜來。",
-            "untagged_line": "冇籤嘅綫",
-            "untagged_line_tooltip": "揀種地貌,兼且寫呢綫係乜來。",
-            "untagged_area": "冇籤嘅範圍",
-            "untagged_area_tooltip": "揀種地貌,兼且寫呢範圍係乜來。",
-            "tag_suggests_area": "{tag}籤話條綫係範圍,實情佢唔係。",
-            "deprecated_tags": "廢籤:{tags}"
-        },
         "zoom": {
             "in": "放大",
             "out": "縮細"
                 "category-building": {
                     "name": "屋宇地貌"
                 },
-                "category-golf": {
-                    "name": "哥夫波地貌"
-                },
                 "category-landuse": {
                     "name": "用地地貌"
                 },
                     "label": "類"
                 },
                 "website": {
-                    "label": "網站",
-                    "placeholder": "http://example.com/"
+                    "label": "網站"
                 },
                 "wetland": {
                     "label": "類"
                     "terms": "Vineyard,葡萄園,酒莊"
                 },
                 "leisure": {
-                    "name": "消閒",
-                    "terms": "Leisure,休閑場所,休閒設施,消閒"
+                    "name": "消閒"
                 },
                 "leisure/common": {
                     "name": "公地",
                     "terms": "Line,綫,線"
                 },
                 "man_made": {
-                    "name": "人造",
-                    "terms": "Man Made,人造,人造構築,人造物"
+                    "name": "人造"
                 },
                 "man_made/breakwater": {
                     "name": "防波堤",
                     "terms": "Water Works,供水廠,水務設施"
                 },
                 "natural": {
-                    "name": "天然",
-                    "terms": "Natural,天然,自然,自然物件"
+                    "name": "天然"
                 },
                 "natural/bare_rock": {
                     "name": "石地"
                     "terms": "Wine Shop,酒舖"
                 },
                 "tourism": {
-                    "name": "旅行",
-                    "terms": "Tourism,旅行,旅遊設施"
+                    "name": "旅行"
                 },
                 "tourism/alpine_hut": {
                     "name": "高山屋仔",
index 4799a29b3d7cae96455f95605a94e050e4cc81f5..ee96d5cb31f8acb49b41d8dfeadf0eab072850fe 100644 (file)
                 "restriction": "这些要素不能被合并,因为这样会破坏 “{relation}” 关系。",
                 "relation": "这些要素不能被合并,因为其有冲突的关系成员。",
                 "incomplete_relation": "此要素暂未下载完成,无法合并。",
-                "conflicting_tags": "这些要素不能被合并,因为它们的某些标签具有冲突的值。"
+                "conflicting_tags": "这些要素不能被合并,因为它们的某些标签具有冲突的值。",
+                "paths_intersect": "这些要素无法被合并,因为生成的路径将会自相交。"
             },
             "move": {
                 "title": "移动",
             "modified": "已更改",
             "deleted": "已删除",
             "created": "已创建",
+            "outstanding_errors_message": "请先解决所有错误。剩余 {count} 个。",
+            "comment_needed_message": "请先添加变更集合注释。",
             "about_changeset_comments": "关于编辑变动",
             "about_changeset_comments_link": "//wiki.openstreetmap.org/wiki/Good_changeset_comments",
             "google_warning": "您在该评论中提及 Google : 请注意从 Google Maps 中复制信息是被严格禁止的。",
                 "tooltip_data": "居中并缩放地图以关注此数据。",
                 "tooltip_issue": "居中并缩放地图以关注此问题。"
             },
-            "no_documentation_combination": "这个标签组合没有可用的说明",
-            "no_documentation_key": "这个键值没有可用的说明",
             "show_more": "显示更多",
             "view_on_osm": "在 openstreetmap.org 上查看",
             "view_on_keepRight": "在 keepright.at 查看",
             "role": "角色",
             "choose": "选择要素类型",
             "results": "{search}有{n}个结果。",
-            "reference": "在 OpenStreetMap Wiki 中查看",
-            "edit_reference": "编辑或翻译描述",
+            "no_documentation_key": "没有可用的说明文档。",
+            "edit_reference": "编辑/翻译",
             "wiki_reference": "查看参考资料",
             "wiki_en_reference": "查看英文参考资料",
+            "hidden_preset": {
+                "manual": "{features} 已隐藏。请在地图数据面板中启用它们。",
+                "zoom": "{features} 已隐藏。请放大地图以启用它们。"
+            },
             "back_tooltip": "变更要素",
             "remove": "删除",
             "search": "搜索",
                     "tooltip": "自动使用 keepright.at 探测地图问题",
                     "title": "KeepRight 问题"
                 },
+                "improveOSM": {
+                    "tooltip": "使用 improveosm.org 自动探测缺失数据",
+                    "title": "ImproveOSM 问题"
+                },
                 "custom": {
                     "tooltip": "将数据文件拖放到页面上,或点击按钮设置",
                     "title": "自定义地图数据",
                 "tooltip": "输电线,发电厂,变电所等。"
             },
             "past_future": {
-                "description": "过去/未来",
+                "description": "历史/未来要素",
                 "tooltip": "规划,在建,废弃,拆毁等。"
             },
             "others": {
-                "description": "其他",
+                "description": "其他要素",
                 "tooltip": "其他东西"
             }
         },
             "more": "更多",
             "events": "事件",
             "languages": "语言:{languages}",
-            "missing": "该列表里有遗漏的信息吗?",
+            "missing": "该列表有遗漏的信息?",
             "tell_us": "告诉我们!"
         },
         "confirm": {
             "on_wiki": "wiki.osm.org上的{tag}",
             "used_with": "使用 {type}"
         },
-        "validations": {
-            "disconnected_highway": "断开的道路",
-            "disconnected_highway_tooltip": "道路应当与其他道路连接或通往建筑入口。",
-            "generic_name": "可能为笼统名称",
-            "generic_name_tooltip": "该要素似乎有个笼统的名称 \"{name}\"。请只使用名称字段记录要素的正式名称。",
-            "old_multipolygon": "复合多边形的标签添加在外围路径",
-            "old_multipolygon_tooltip": "我们不赞成这种复合多边形的样式。请将标签添加在父复合多边形中,而不是在其外围的路径上添加。",
-            "untagged_point": "未标记的点",
-            "untagged_point_tooltip": "选择该点的要素类型。",
-            "untagged_line": "未标记的线",
-            "untagged_line_tooltip": "选择描述这条线的要素类型。",
-            "untagged_area": "未标记的区域",
-            "untagged_area_tooltip": "选择描述这块区域的要素类型。",
-            "untagged_relation": "未标记的关系",
-            "untagged_relation_tooltip": "选择描述这个关系的要素类型。",
-            "many_deletions": "您正在删除 {n} 个要素:{p} 个节点、{l} 条路径、{a} 片区域、{r} 个关系。您确定要这么做吗?这些要素将会在任何人所见的 openstreetmap.org 地图上被删除。",
-            "tag_suggests_area": "{tag}的标签所建议的线段应为区域,但这个不是一区域",
-            "deprecated_tags": "弃用标签:{tags}"
-        },
         "zoom": {
             "in": "放大",
             "out": "缩小"
         "cannot_zoom": "在此模式下不能再缩小",
         "full_screen": "切换全屏",
         "QA": {
+            "improveOSM": {
+                "title": "ImproveOSM 检测",
+                "geometry_types": {
+                    "path": "小路",
+                    "parking": "停车位",
+                    "road": "道路",
+                    "both": "道路和停车位"
+                },
+                "directions": {
+                    "east": "东",
+                    "north": "北",
+                    "northeast": "东北",
+                    "northwest": "西北",
+                    "south": "南",
+                    "southeast": "东南",
+                    "southwest": "西南",
+                    "west": "西"
+                },
+                "error_types": {
+                    "ow": {
+                        "title": "缺少单行线",
+                        "description": "在 {highway} 中该路段的 {num_trips} 个旅行记录中,有 {percentage}% 从 {from_node} 移动至 {to_node},所以这里可能缺少一个单行线标签。"
+                    },
+                    "mr": {
+                        "title": "缺少几何形状",
+                        "description": "在该区域的 {num_trips} 个旅行记录表明此处可能有 {geometry_type} 未被绘制。",
+                        "description_alt": "来自第三方的数据表明此处可能有 {geometry_type} 未被绘制。"
+                    },
+                    "tr": {
+                        "title": "缺少转向限制",
+                        "description": "{num_trips} 个朝{travel_direction}方向的旅行记录中的 {num_passed} 个在 {junction} 处从 {from_way} 转向至 {to_way},所以这里可能缺少一个 \"{turn_restriction}\" 限制。"
+                    }
+                }
+            },
             "keepRight": {
                 "title": "KeepRight 错误",
                 "detail_title": "错误",
                 "title": "质量保证",
                 "intro": "*质量保证* (Quality Assurance, Q/A) 工具可以搜寻不正确的标签、断开的道路以及其他 OpenStreetMap 的问题以供绘图者修复。要查看现有的 Q/A 问题,点击 {data} **地图数据** 面板以启用特定的 Q/A 图层。",
                 "tools_h": "工具",
-                "tools": "目前支持以下工具:[KeepRight](https://www.keepright.at/)。未来 iD 将会支持 [Osmose](https://osmose.openstreetmap.fr/)、[ImproveOSM](https://improveosm.org/en/) 以及更多 Q/A 工具。",
+                "tools": "目前支持以下工具:[KeepRight](https://www.keepright.at/) 和 [ImproveOSM](https://improveosm.org/en/)。未来 iD 将会支持 [Osmose](https://osmose.openstreetmap.fr/) 以及更多 Q/A 工具。",
                 "issues_h": "处理问题",
                 "issues": "处理 Q/A 问题与处理笔记相似。点击其中一个标记,然后在侧边栏中查看问题详情。每个工具都有自己的功能,但通常您可以评论和/或关闭问题。"
             },
                         "maxvia": "\"{viaField}\" 滑块可调整搜索中可包含的经由路径数。(提示:越简单越好)"
                     },
                     "inspecting": {
-                        "title": "检查"
+                        "title": "检查",
+                        "about": "将鼠标悬停在任意 **起始** 部分以查看其是否有任何转向限制。每个可能的 **结束** 部分将会被绘制为彩色阴影,用来显示是否存在限制。",
+                        "from_shadow": "{fromShadow} **起始部分**",
+                        "allow_shadow": "{allowShadow} **允许通行**",
+                        "restrict_shadow": "{restrictShadow} **禁止通行**",
+                        "only_shadow": "{onlyShadow} **仅限通行**",
+                        "restricted": "“禁止”表明存在一个转向限制,例如“禁止左转”。",
+                        "only": "“仅限”表明车辆途径该道路时只能做出该选择,例如“仅限直行”。"
                     },
                     "modifying": {
-                        "title": "修改"
+                        "title": "修改",
+                        "about": "要修改转向限制,首先点击任意 **起始** 部分以选择它。选定的部分将会不断闪烁,同时所有可能的 **结束** 部分都将以转向图标显示。",
+                        "indicators": "然后,点击转向图标以在“允许”、“限制”和“仅限”中切换。",
+                        "allow_turn": "{allowTurn} **允许通行**",
+                        "restrict_turn": "{restrictTurn} **禁止通行**",
+                        "only_turn": "{onlyTurn} **仅限通行**"
                     },
                     "tips": {
-                        "title": "提示"
+                        "title": "提示",
+                        "simple": "**简单的限制比复杂的更好。**",
+                        "simple_example": "例如,如果一个转向限制能用经由节点创建,就避免在该限制中使用较复杂的经由路径。",
+                        "indirect": "**有些限制会显示“(间接)”文字并绘制得更淡。**",
+                        "indirect_example": "存在这些限制是因为附近的另一个限制。例如,一个“仅限直行”限制将会间接地在交叉路口的其他道路上创建“禁止转向”限制。",
+                        "indirect_noedit": "您不能编辑间接的限制。相反,您可以编辑邻近的直接限制。"
                     }
                 }
             }
         },
+        "issues": {
+            "title": "问题",
+            "key": "I",
+            "list_title": "问题 ({count})",
+            "errors": {
+                "list_title": "错误 ({count})"
+            },
+            "warnings": {
+                "list_title": "警告 ({count})"
+            },
+            "no_issues": {
+                "message": "看起来一切正常",
+                "info": "在您编辑时遇到的任何问题都将显示在此处"
+            },
+            "almost_junction": {
+                "message": "{feature} 与 {feature2} 极为接近却并未相交",
+                "highway-highway": {
+                    "tip": "相交的道路应共享一个交叉节点。"
+                }
+            },
+            "crossing_ways": {
+                "message": "{feature} 与 {feature2} 相交",
+                "building-building": {
+                    "tip": "除不同图层情况下,建筑物不应相交。"
+                },
+                "building-highway": {
+                    "tip": "穿越建筑物的道路应使用桥梁、隧道、有上盖或出入口。"
+                },
+                "building-railway": {
+                    "tip": "穿越建筑物的铁路应使用桥梁或隧道。"
+                },
+                "building-waterway": {
+                    "tip": "穿越建筑物的航道应使用隧道或不同图层。"
+                },
+                "highway-highway": {
+                    "tip": "相交的道路应使用桥梁、隧道或交叉路口。"
+                },
+                "highway-railway": {
+                    "tip": "与铁路相交的道路应使用桥梁、隧道或铁路道口。"
+                },
+                "highway-waterway": {
+                    "tip": "与航道相交的道路应使用桥梁、隧道或过水路面。"
+                },
+                "railway-railway": {
+                    "tip": "相交的铁路应互相连接或使用桥梁或隧道。"
+                },
+                "railway-waterway": {
+                    "tip": "与航道相交的铁路应使用桥梁或隧道。"
+                },
+                "waterway-waterway": {
+                    "tip": "相交的航道应互相连接或使用隧道。"
+                },
+                "tunnel-tunnel": {
+                    "tip": "相交的隧道应使用不同图层。"
+                },
+                "tunnel-tunnel_connectable": {
+                    "tip": "相交的隧道应互相连接或使用不同图层。"
+                },
+                "bridge-bridge": {
+                    "tip": "相交的桥梁应使用不同图层。"
+                },
+                "bridge-bridge_connectable": {
+                    "tip": "相交的桥梁应互相连接或使用不同图层。"
+                },
+                "indoor-indoor": {
+                    "tip": "相交的室内要素应使用不同楼层数。"
+                },
+                "indoor-indoor_connectable": {
+                    "tip": "相交的室内要素应互相连接或使用不同楼层数。"
+                }
+            },
+            "deprecated_tag": {
+                "single": {
+                    "message": "{feature} 存在一个过时的标签 \"{tag}\""
+                },
+                "combination": {
+                    "message": "{feature} 存在一个过时的标签组合:{tags}"
+                },
+                "tip": "有些标签会随时间推移而被弃用,应予以更换。"
+            },
+            "disconnected_way": {
+                "highway": {
+                    "message": "{highway} 与其他道路和路径断开连接",
+                    "tip": "道路应当与其他道路或建筑入口连接。"
+                }
+            },
+            "generic_name": {
+                "message": "{feature} 存在一个笼统的名称 \"{name}\"",
+                "tip": "名称应为要素的实际名称。"
+            },
+            "many_deletions": {
+                "points-lines-areas": {
+                    "message": "将要删除 {n} 个要素:{p} 个点、{l} 根线和 {a} 个区域"
+                },
+                "points-lines-areas-relations": {
+                    "message": "将要删除 {n} 个要素:{p} 个点、{l} 根线、{a} 个区域和 {r} 个关系"
+                },
+                "tip": "只有多余或不存在的要素才应被删除。"
+            },
+            "missing_tag": {
+                "any": {
+                    "message": "{feature} 没有标签"
+                },
+                "descriptive": {
+                    "message": "{feature} 没有描述性标签"
+                },
+                "specific": {
+                    "message": "{feature} 没有 \"{tag}\" 标签"
+                },
+                "tip": "要素必须具有定义它们的标签。"
+            },
+            "old_multipolygon": {
+                "message": "{multipolygon} 存在错误放置的标签",
+                "tip": "复合多边形应被标记在它们的关系上,而不是它们的外围路径。"
+            },
+            "tag_suggests_area": {
+                "message": "基于 {feature} 的标签 \"{tag}\",其应为一个封闭的区域。",
+                "tip": "区域必须具有连接的端点。"
+            },
+            "fix": {
+                "connect_almost_junction": {
+                    "annotation": "连接极相近要素。"
+                },
+                "connect_crossing_features": {
+                    "annotation": "连接相交要素。"
+                },
+                "connect_endpoints": {
+                    "title": "连接首尾节点",
+                    "annotation": "连接路径的首尾节点。"
+                },
+                "connect_features": {
+                    "title": "连接这些要素"
+                },
+                "continue_from_start": {
+                    "title": "从起始节点继续绘制"
+                },
+                "continue_from_end": {
+                    "title": "从末端节点继续绘制"
+                },
+                "delete_feature": {
+                    "title": "删除此要素"
+                },
+                "move_tags": {
+                    "title": "移动标签",
+                    "annotation": "移动标签。"
+                },
+                "remove_generic_name": {
+                    "title": "删除名称",
+                    "annotation": "删除笼统名称。"
+                },
+                "remove_tag": {
+                    "title": "删除标签",
+                    "annotation": "删除标签。"
+                },
+                "reposition_features": {
+                    "title": "更改要素位置"
+                },
+                "select_preset": {
+                    "title": "选择一个要素类型"
+                },
+                "tag_as_disconnected": {
+                    "title": "标记为断开连接",
+                    "annotation": "标记极相近要素为断开连接。"
+                },
+                "upgrade_tag": {
+                    "annotation": "改进一个旧标签。"
+                },
+                "upgrade_tag_combo": {
+                    "annotation": "改进一个旧标签组合。"
+                },
+                "use_bridge_or_tunnel": {
+                    "title": "使用桥梁或隧道"
+                },
+                "use_different_layers": {
+                    "title": "使用不同图层"
+                },
+                "use_different_levels": {
+                    "title": "使用不同楼层数"
+                },
+                "use_tunnel": {
+                    "title": "使用隧道"
+                }
+            }
+        },
         "intro": {
             "done": "完成",
             "ok": "确定",
                 "category-building": {
                     "name": "建筑"
                 },
-                "category-golf": {
+                "category-golf-area": {
+                    "name": "高尔夫"
+                },
+                "category-golf-line": {
                     "name": "高尔夫"
                 },
                 "category-landuse": {
                 "animal_shelter": {
                     "label": "收留动物类型"
                 },
+                "architect": {
+                    "label": "建筑设计师"
+                },
                 "area/highway": {
                     "label": "类型"
                 },
                 "junction/ref_oneway": {
                     "label": "匝道编号"
                 },
+                "junction_line": {
+                    "label": "交叉口",
+                    "options": {
+                        "circular": "信号控制环岛",
+                        "jughandle": "壶柄式连接路",
+                        "roundabout": "环岛"
+                    }
+                },
                 "kerb": {
                     "label": "路缘"
                 },
                     "label": "位置",
                     "options": {
                         "indoor": "室内",
-                        "outdoor": "户外"
+                        "outdoor": "户外",
+                        "roof": "屋顶"
                     }
                 },
                 "man_made": {
                 "restrictions": {
                     "label": "转向限制"
                 },
+                "roof/colour": {
+                    "label": "屋顶颜色"
+                },
                 "rooms": {
                     "label": "房间数"
                 },
                     },
                     "placeholder": "山地徒步,高山远足..."
                 },
+                "salt": {
+                    "label": "咸水"
+                },
                 "sanitary_dump_station": {
                     "label": "厕所废物"
                 },
                     },
                     "placeholder": "是,否,仅限外卖"
                 },
+                "tidal": {
+                    "label": "处于潮间带"
+                },
                 "to": {
                     "label": "终点"
                 },
                 },
                 "website": {
                     "label": "网站",
-                    "placeholder": "http://example.com/"
+                    "placeholder": "https://example.com"
                 },
                 "wetland": {
                     "label": "类型"
                     "name": "时钟",
                     "terms": "时钟,钟表,钟"
                 },
+                "amenity/clock/sundial": {
+                    "name": "日晷",
+                    "terms": "日晷,日晷钟,晷影,晷影器,影子,晷针,日规"
+                },
                 "amenity/college": {
                     "name": "学院",
                     "terms": "学院,大学,院校,大专,校园,学校,学习"
                     "name": "停车位",
                     "terms": "停车空间,停车场地,停车位"
                 },
+                "amenity/photo_booth": {
+                    "name": "自助拍照机",
+                    "terms": "拍照机,照相机,拍照,照相,自助,自动,照相馆,照相亭,证件,证件照,护照,快照,照片,照"
+                },
                 "amenity/place_of_worship": {
                     "name": "礼拜场所",
                     "terms": "礼拜场所,宗教礼拜处"
                     "terms": "屋列,房列,一列房,一列屋"
                 },
                 "building/train_station": {
-                    "name": "火车站"
+                    "name": "火车站建筑"
                 },
                 "building/transportation": {
                     "name": "公共交通建筑",
                     "name": "高尔夫球洞",
                     "terms": "高尔夫球洞"
                 },
-                "golf/lateral_water_hazard_area": {
-                    "name": "高尔夫侧面水障碍区",
-                    "terms": "高尔夫侧面水障碍水体,水障碍,侧面水障碍,水障碍区"
-                },
-                "golf/lateral_water_hazard_line": {
-                    "name": "高尔夫侧面水障碍",
-                    "terms": "高尔夫侧面水障碍,水障碍,侧面水障碍,水障碍区"
-                },
                 "golf/rough": {
                     "name": "高尔夫深草区",
                     "terms": "高尔夫深草区"
                     "name": "高尔夫开球区",
                     "terms": "高尔夫开球区,开球区,发球台"
                 },
-                "golf/water_hazard_area": {
-                    "name": "高尔夫水障碍区",
-                    "terms": "高尔夫水障碍水体,水障碍,正面水障碍,水障碍区"
-                },
-                "golf/water_hazard_line": {
-                    "name": "高尔夫水障碍",
-                    "terms": "高尔夫水障碍,水障碍,正面水障碍,水障碍区"
-                },
                 "healthcare": {
                     "name": "医疗机构",
                     "terms": "医疗,诊所,机构,卫生,医院,医务,医生,治疗,门诊,急诊,病,健康,保健,外科"
                     "terms": "交通枢纽,路口"
                 },
                 "landuse": {
-                    "name": "土地用途",
-                    "terms": "土地用途,土地使用"
+                    "name": "土地用途"
                 },
                 "landuse/allotments": {
                     "name": "公共花园",
                     "terms": "葡萄园,酒庄"
                 },
                 "leisure": {
-                    "name": "休闲场所",
-                    "terms": "休闲场所"
+                    "name": "休闲场所"
                 },
                 "leisure/adult_gaming_centre": {
                     "name": "成人街机厅",
                     "terms": "线"
                 },
                 "man_made": {
-                    "name": "人造物",
-                    "terms": "人造物"
+                    "name": "人造物"
                 },
                 "man_made/adit": {
                     "name": "坑道入口",
                     "terms": "井盖,井,检查,人孔,手机,盖,通讯,通信,移动,联通,电信,电话,洞,孔,下水道,基站"
                 },
                 "natural": {
-                    "name": "自然",
-                    "terms": "自然"
+                    "name": "自然"
                 },
                 "natural/bare_rock": {
                     "name": "岩石",
                     "name": "变压器",
                     "terms": "变电所"
                 },
-                "public_transport/linear_platform": {
-                    "name": "公共交通站 / 站台",
-                    "terms": "公共交通,车站,站台"
-                },
-                "public_transport/linear_platform_aerialway": {
-                    "name": "缆车站 / 站台",
-                    "terms": "缆车,空中列车,车站,站台"
-                },
-                "public_transport/linear_platform_bus": {
-                    "name": "公交车站 / 站台",
-                    "terms": "公交,公交站,公交车,巴士,大巴,客车,车站,站台"
-                },
-                "public_transport/linear_platform_ferry": {
-                    "name": "轮船渡口 / 站台",
-                    "terms": "轮船,渡轮,渡口,车站,站台"
-                },
-                "public_transport/linear_platform_light_rail": {
-                    "name": "轻轨站 / 站台",
-                    "terms": "轻轨,地铁,捷运,铁路,车站,站台,月台"
-                },
-                "public_transport/linear_platform_monorail": {
-                    "name": "单轨列车站 / 站台",
-                    "terms": "单轨,列车,车站,站台,月台"
-                },
-                "public_transport/linear_platform_subway": {
-                    "name": "地铁站 / 站台",
-                    "terms": "地铁,轻轨,捷运,铁路,车站,站台,月台"
-                },
-                "public_transport/linear_platform_train": {
-                    "name": "列车站 / 站台",
-                    "terms": "列车,火车,动车,高铁,铁路,车站,站台,月台"
-                },
-                "public_transport/linear_platform_tram": {
-                    "name": "有轨电车站 / 站台",
-                    "terms": "电车,有轨电车,车站,站台"
-                },
-                "public_transport/linear_platform_trolleybus": {
-                    "name": "无轨电车站 / 站台",
-                    "terms": "电车,无轨电车,车站,站台"
-                },
                 "public_transport/platform": {
                     "name": "公共交通站 / 站台",
                     "terms": "公共交通,车站,站台"
                     "terms": "酒品商店,酒店,酒楼,酒坊"
                 },
                 "tourism": {
-                    "name": "旅游设施",
-                    "terms": "旅行,旅游设施"
+                    "name": "旅游设施"
                 },
                 "tourism/alpine_hut": {
                     "name": "高山小屋",
                 "extendedDescription": "在尼泊尔绘图?有任何疑问,想要与当地的社区交流?在 {Url} 加入我们。欢迎所有人!"
             },
             "OSM-Asia-mailinglist": {
-                "name": "OpenStreetMap 亚洲邮件列表"
+                "name": "OpenStreetMap 亚洲邮件列表",
+                "description": "Talk-asia 是亚洲社区的官方邮件列表"
+            },
+            "osm-asia-telegram": {
+                "name": "OpenStreetMap 亚洲 Telegram",
+                "description": "加入我们的大家庭:{url}"
             },
             "OSM-PH-facebook": {
                 "name": "OpenStreetMap 菲律宾 Facebook"
                 "description": "在 OSM 社区驱动的问答网站上提问并得到解答。",
                 "extendedDescription": "{url} 为所有人提供关于 OpenStreetMap 的帮助。无论您是新手绘图者或者有任何技术问题,都来找我们帮助吧!"
             },
+            "OSM-IRC": {
+                "name": "OpenStreetMap IRC",
+                "description": "在 irc.oftc.net (端口 6667) 加入 #osm"
+            },
             "OSM-Reddit": {
                 "name": "OpenStreetMap Reddit 社区",
                 "description": "/r/openstreetmap/ 是了解更多关于 OpenStreetMap 的好地方。来尽管问我们吧!"
             "OSMF": {
                 "name": "OpenStreetMap 基金会 (OSMF)",
                 "description": "OSMF 是总部位于英国的非营利组织,用于支持 OpenStreetMap 项目。",
+                "extendedDescription": "OSMF 通过筹款、维护为网站提供动力的服务器、组织年度 State of the Map 会议以及协调维护网站的志愿者来支持 OpenStreetMap。您可以通过点击该链接成为 OSMF 的一员以展示您的支持并为 OpenStreetMap 的未来发声:{signupUrl}",
                 "events": {
                     "sotm2018": {
                         "name": "State of the Map 2018",
index ae957b68f5cbb369585d94b7d4d92e10f20df977..9caf70d47c0ddd75473e3ae1f98a30fdd2a6e2c7 100644 (file)
             "locating": "定位中,請稍候..."
         },
         "inspector": {
-            "no_documentation_combination": "沒有這個標籤組合的相關文件",
-            "no_documentation_key": "沒有這個鍵值的相關文件",
             "show_more": "顯示更多",
             "view_on_osm": "在 openstreetmap.org 中檢視",
             "all_fields": "所有資料",
             "role": "作用",
             "choose": "選擇特徵種類",
             "results": "{search}的{n}個結果",
-            "reference": "在 OpenStreetMap Wiki 中檢閱",
             "back_tooltip": "變更特徵",
             "remove": "移除",
             "search": "搜尋",
                 "tooltip": "電線、發電廠、變電站等等"
             },
             "past_future": {
-                "description": "過去/將來",
                 "tooltip": "已建議、建築中、已廢棄、已拆毀等等"
             },
             "others": {
-                "description": "其他",
                 "tooltip": "其他東西"
             }
         },
             "on_wiki": "在wiki.osm.org上的 {tag}",
             "used_with": "與{type}一起用"
         },
-        "validations": {
-            "disconnected_highway": "已斷開的高速公路。",
-            "disconnected_highway_tooltip": "道路必須連接至其他道路或建築物入口。",
-            "old_multipolygon": "外部路徑上的多邊形標籤",
-            "old_multipolygon_tooltip": "這種多邊形格式已停用。請將標籤分配予母多邊形,而非外部路徑。",
-            "untagged_point": "未有標籤的點",
-            "untagged_point_tooltip": "選擇一個特徵種類來形容這個點是甚麼。",
-            "untagged_line": "未有標籤的綫",
-            "untagged_line_tooltip": "選擇一個特徵種類來形容這條綫是甚麼。",
-            "untagged_area": "未有標籤的範圍",
-            "untagged_area_tooltip": "選擇一個特徵種類來形容這個範圍是甚麼。",
-            "untagged_relation": "未有標籤的關係",
-            "untagged_relation_tooltip": "選擇一個特徵種類來形容這個關係是甚麼。",
-            "tag_suggests_area": "{tag}標籤建議綫應為範圍,但這不是一個範圍。",
-            "deprecated_tags": "已棄用的標籤: {tags}"
-        },
         "zoom": {
             "in": "放大",
             "out": "縮小"
                 "category-building": {
                     "name": "建築物特徵"
                 },
-                "category-golf": {
-                    "name": "高爾夫特徵"
-                },
                 "category-landuse": {
                     "name": "土地利用特徵"
                 },
                         "underground": "地下"
                     }
                 },
-                "passenger_information_display": {
-                    "label": "乘客資訊顯示"
-                },
                 "payment_multi": {
                     "label": "付款種類"
                 },
                     "label": "種類"
                 },
                 "website": {
-                    "label": "網站",
-                    "placeholder": "http://example.com/"
+                    "label": "網站"
                 },
                 "wetland": {
                     "label": "種類"
                     "name": "排屋",
                     "terms": "行列式房屋,連棟式住宅"
                 },
-                "building/train_station": {
-                    "name": "火車站"
-                },
                 "building/university": {
                     "name": "大學建築物",
                     "terms": "大學校舍"
                     "name": "高爾夫球洞",
                     "terms": "Golf Hole,高爾夫球球洞"
                 },
-                "golf/lateral_water_hazard_area": {
-                    "name": "側面水障礙",
-                    "terms": "Lateral Water Hazard, 側面水障礙"
-                },
-                "golf/lateral_water_hazard_line": {
-                    "name": "側面水障礙",
-                    "terms": "Lateral Water Hazard, 側面水障礙"
-                },
                 "golf/rough": {
                     "name": "深草區",
                     "terms": "Rough,深草區"
                     "name": "發球區",
                     "terms": "Tee Box,發球區,開球區"
                 },
-                "golf/water_hazard_area": {
-                    "name": "水障礙",
-                    "terms": "Water Hazard,水障礙"
-                },
-                "golf/water_hazard_line": {
-                    "name": "水障礙",
-                    "terms": "Water Hazard, 水障礙"
-                },
                 "healthcare": {
                     "name": "醫療設施",
                     "terms": "Healthcare Facility,健康中心"
                     "terms": "十字路口,交界處,交界"
                 },
                 "landuse": {
-                    "name": "土地利用",
-                    "terms": "土地利用"
+                    "name": "土地利用"
                 },
                 "landuse/allotments": {
                     "name": "社區園圃",
                     "terms": "Vineyard,葡萄園,酒莊"
                 },
                 "leisure": {
-                    "name": "消閒",
-                    "terms": "Leisure,休閑場所,休閒設施,消閒"
+                    "name": "消閒"
                 },
                 "leisure/adult_gaming_centre": {
                     "name": "成人遊戲中心",
                     "terms": "Line,綫,線"
                 },
                 "man_made": {
-                    "name": "人造",
-                    "terms": "Man Made,人造,人造構築,人造物"
+                    "name": "人造"
                 },
                 "man_made/adit": {
                     "name": "礦坑口",
                     "terms": "Telecom Manhole,電訊人孔,電信沙井"
                 },
                 "natural": {
-                    "name": "自然景觀",
-                    "terms": "Natural,天然,自然,自然物件"
+                    "name": "自然景觀"
                 },
                 "natural/bare_rock": {
                     "name": "裸岩",
                     "terms": "紅酒店,白酒店"
                 },
                 "tourism": {
-                    "name": "旅遊設施",
-                    "terms": "Tourism,旅行,旅遊"
+                    "name": "旅遊設施"
                 },
                 "tourism/alpine_hut": {
                     "name": "高山小屋",
index 7d4a67fc337988b3fd9221d2f90667118a6a0e0f..c339b548bfa5b307ccf664ca259233f09333d551 100644 (file)
                 "restriction": "這些圖徽無法合併,因為它會危害到「{relation}」關係。",
                 "relation": "這些圖徽無法合併,因為它們有衝突的關係。",
                 "incomplete_relation": "這些物件不能合併,因為其中最少有一件未有完全下載。",
-                "conflicting_tags": "這些特徵並不能合儀,因為它們有彼此衝突的標籤。"
+                "conflicting_tags": "這些特徵並不能合儀,因為它們有彼此衝突的標籤。",
+                "paths_intersect": "這些圖徽無法合併,因為產生的路徑會自相交叉。"
             },
             "move": {
                 "title": "移動",
                 "tooltip_data": "置中和縮放地圖到這資料。",
                 "tooltip_issue": "置中和縮放地圖到這問題。"
             },
-            "no_documentation_combination": "這個標籤組合沒有可用的說明",
-            "no_documentation_key": "這個鍵值沒有可用的說明",
             "show_more": "顯示更多",
             "view_on_osm": "在 openstreetmap.org 中檢視",
             "view_on_keepRight": "在 keepright.at 檢視",
             "role": "角色",
             "choose": "選擇物件種類",
             "results": "{search} 的 {n} 個結果",
-            "reference": "在 OpenStreetMap Wiki 中檢閱",
-            "edit_reference": "編輯或翻譯描述",
+            "no_documentation_key": "沒有可用的文件。",
+            "edit_reference": "編輯/翻譯",
             "wiki_reference": "觀看說明文件",
             "wiki_en_reference": "觀看英文的說明文件",
+            "hidden_preset": {
+                "manual": "{features} 已隱藏。在地圖資料面板中啟用它們。",
+                "zoom": "{features} 已隱藏。拉近以啟用它們。"
+            },
             "back_tooltip": "修改物件",
             "remove": "移除",
             "search": "搜尋",
                     "tooltip": "自動從 keepright.at 偵測地圖問題",
                     "title": "KeepRight 問題"
                 },
+                "improveOSM": {
+                    "tooltip": "由 improveosm.org 自動偵測到遺失資料",
+                    "title": "ImproveOSM 問題"
+                },
                 "custom": {
                     "tooltip": "拖曳資料檔案到頁面上,或點選按鈕以設定",
                     "title": "自訂地圖資料",
                 "tooltip": "輸電線、發電廠、變電所等。"
             },
             "past_future": {
-                "description": "過去/未來",
+                "description": "過去/未來圖徽",
                 "tooltip": "預定地,施工中,廢棄,拆除等。"
             },
             "others": {
-                "description": "其他",
+                "description": "其他圖徽",
                 "tooltip": "其他東西"
             }
         },
             "on_wiki": "於wiki.osm.org上的 {tag}",
             "used_with": "可與 {type} 使用"
         },
-        "validations": {
-            "disconnected_highway": "未連結道路",
-            "disconnected_highway_tooltip": "道路應該要被連接到其他道路或是建築物的入口。",
-            "generic_name": "可能的一般名稱",
-            "generic_name_tooltip": "這個圖徵看來有一般名稱 \"{name}\"。只有在圖徵有正式名稱之下才用名稱欄位。",
-            "old_multipolygon": "在外部路徑上的多邊形標籤",
-            "old_multipolygon_tooltip": "這種多邊形樣式已被棄用。請將標籤加於母多邊形而非外部路徑。",
-            "untagged_point": "未有標籤的點",
-            "untagged_point_tooltip": "選擇適當的物件種類描述該點是什麼。",
-            "untagged_line": "未有標籤的線段",
-            "untagged_line_tooltip": "選擇適當的物件種類描述這條線是什麼。",
-            "untagged_area": "未有標籤的區域",
-            "untagged_area_tooltip": "選擇適當的物件種類描述這區域是什麼。",
-            "untagged_relation": "未標記的關係",
-            "untagged_relation_tooltip": "選取一個可以適當地描述這個關係的圖徽類型。",
-            "many_deletions": "您正要刪除 {n} 個圖徽:{p} 個節點、{l} 條線段、{a} 個區域、{r} 個關係。您確定您要這麼做嗎?這將會把它們從每個人都看得到的 openstreetmap.org 的地圖上刪除。",
-            "tag_suggests_area": "{tag} 標籤所建議的線段應為區域,但這個不是一區域",
-            "deprecated_tags": "已棄用的標籤︰{tags}"
-        },
         "zoom": {
             "in": "拉近",
             "out": "拉遠"
         "cannot_zoom": "在此模式下不能再縮小。",
         "full_screen": "啟動全螢幕",
         "QA": {
+            "improveOSM": {
+                "title": " ImproveOSM 偵測",
+                "geometry_types": {
+                    "path": "路徑",
+                    "parking": "停車場",
+                    "road": "道路",
+                    "both": "道路和停車場"
+                },
+                "directions": {
+                    "east": "東",
+                    "north": "北",
+                    "northeast": "東北",
+                    "northwest": "西北",
+                    "south": "南",
+                    "southeast": "東南",
+                    "southwest": "西南",
+                    "west": "西"
+                },
+                "error_types": {
+                    "ow": {
+                        "title": "遺失的單行道",
+                        "description": "沿著選取的 {highway},{num_trips} 中有 {percentage}% 記錄從 {from_node} 到 {to_node} 的旅程,也許遺失 \"oneway\" 標籤。"
+                    },
+                    "mr": {
+                        "title": "遺失幾何性質",
+                        "description": "{num_trips} 記錄的旅程資料,顯示也許這裡有未繪製的  {geometry_type}。 ",
+                        "description_alt": "從第三方而來的資料表示這裡可能有未繪製的 {geometry_type}。"
+                    },
+                    "tr": {
+                        "title": "遺失的轉彎限制",
+                        "description": "{num_trips} 中 {num_passed} 記錄  (travelling {travel_direction}) 的旅程中,有在 {junction} 從  {from_way} 到 {to_way},也許有遺失的 \"{turn_restriction}\" 的限制。"
+                    }
+                }
+            },
             "keepRight": {
                 "title": "KeepRIght 錯誤",
                 "detail_title": "錯誤",
                 "title": "品質保証",
                 "intro": "*品質保証* (Q/A, Quality Assurance) 工具能找出開放街圖上,不適當地標籤,為連結的道路或是其他問題,圖客能藉此修復。要檢視現有的 Q/A 問題,,回擊 {data} **地圖資料**儀表板開啓特定 Q/A 圖層。",
                 "tools_h": "工具",
-                "tools": "目前支援以下的工具:[KeepRight](https://www.keepright.at/),之後  iD 將支援 [Osmose](https://osmose.openstreetmap.fr/),[ImproveOSM](https://improveosm.org/en/),未來將支援更多 Q/A 工具。",
+                "tools": "目前支援以下的工具:[KeepRight](https://www.keepright.at/) 和[ImproveOSM](https://improveosm.org/en/),之後  iD 將支援 [Osmose](https://osmose.openstreetmap.fr/),未來將支援更多 Q/A 工具。",
                 "issues_h": "處理問題",
                 "issues": "處理 Q/A 問題類似處理註解。點選已存在的 Q/A 問題會埴滿整個側邊欄,像是問題種類以及相關的圖徵。每個工具都有其能耐,但是一般來說你可以回應和/或關閉問題。"
             },
                 "category-building": {
                     "name": "建築物圖徵"
                 },
-                "category-golf": {
-                    "name": "高爾夫圖徵"
+                "category-golf-area": {
+                    "name": "高爾夫球圖徵"
+                },
+                "category-golf-line": {
+                    "name": "高爾夫球圖徵"
                 },
                 "category-landuse": {
                     "name": "土地利用圖徵"
                 "junction/ref_oneway": {
                     "label": "路口號碼"
                 },
+                "junction_line": {
+                    "label": "連接點",
+                    "options": {
+                        "roundabout": "圓環"
+                    }
+                },
                 "kerb": {
                     "label": "路邊斜坡"
                 },
                         "underground": "地下"
                     }
                 },
-                "passenger_information_display": {
-                    "label": "乘客資訊顯示器"
-                },
                 "payment_multi": {
                     "label": "付款種類"
                 },
                     },
                     "placeholder": "登山旅行、越嶺縱走..."
                 },
+                "salt": {
+                    "label": "鹽份"
+                },
                 "sanitary_dump_station": {
                     "label": "廁所處理方式"
                 },
                     },
                     "placeholder": "可以, 不行, 只能外帶 ..."
                 },
+                "tidal": {
+                    "label": "潮汐"
+                },
                 "to": {
                     "label": "到"
                 },
                 },
                 "website": {
                     "label": "網站",
-                    "placeholder": "http://example.com/"
+                    "placeholder": "https://example.com"
                 },
                 "wetland": {
                     "label": "種類"
                     "name": "時鐘",
                     "terms": "時鐘,鐘塔"
                 },
+                "amenity/clock/sundial": {
+                    "name": "日晷",
+                    "terms": "日晷"
+                },
                 "amenity/college": {
                     "name": "學院範圍",
                     "terms": "學院,學院用地,技術學院,獨立學院,學校,College Grounds,College"
                     "name": "炸肉串速食店",
                     "terms": "炸肉串店"
                 },
+                "amenity/fast_food/mexican": {
+                    "name": "墨西哥速食餐",
+                    "terms": "墨西哥快餐"
+                },
                 "amenity/fast_food/pizza": {
                     "name": "批薩快餐店",
                     "terms": "批薩店"
                     "name": "藥房櫃臺",
                     "terms": "藥房櫃臺"
                 },
+                "amenity/photo_booth": {
+                    "name": "照相站",
+                    "terms": "照相站"
+                },
                 "amenity/place_of_worship": {
                     "name": "宗教祟拜場所",
                     "terms": "廟,教堂,寺廟,清真寺,禮拜堂,寺,聚會所,教會"
                     "name": "沙坑",
                     "terms": "沙坑"
                 },
+                "golf/cartpath": {
+                    "name": "高爾夫球車道",
+                    "terms": "高爾夫球車道"
+                },
+                "golf/cartpath_service": {
+                    "name": "高爾夫球車道 / 服務道路",
+                    "terms": "高爾夫球車道 / 服務道路"
+                },
+                "golf/driving_range": {
+                    "name": "高爾夫球練習場",
+                    "terms": "高爾夫球練習場,練習場"
+                },
                 "golf/fairway": {
                     "name": "球道",
                     "terms": "球道"
                     "name": "球洞",
                     "terms": "球洞"
                 },
-                "golf/lateral_water_hazard_area": {
-                    "name": "側面水障礙區",
-                    "terms": "側面水障礙區"
+                "golf/lateral_water_hazard": {
+                    "name": "橫向水障礙",
+                    "terms": "橫向水障礙"
                 },
-                "golf/lateral_water_hazard_line": {
-                    "name": "側面水障礙區",
-                    "terms": "側面水障礙區"
+                "golf/path": {
+                    "name": "高爾夫步道",
+                    "terms": "高爾夫步道"
                 },
                 "golf/rough": {
                     "name": "深草區",
                     "name": "開球區",
                     "terms": "開球區"
                 },
-                "golf/water_hazard_area": {
-                    "name": "水障礙區",
-                    "terms": "水障礙區"
-                },
-                "golf/water_hazard_line": {
-                    "name": "水障礙區",
-                    "terms": "水障礙區"
+                "golf/water_hazard": {
+                    "name": "水障礙",
+                    "terms": "水障礙"
                 },
                 "healthcare": {
                     "name": "醫療設施",
                     "terms": "槽化車道,道路交叉,十字路口,丁字路,路"
                 },
                 "landuse": {
-                    "name": "土地利用",
-                    "terms": "土地利用,國土利用,使用分區"
+                    "name": "土地利用"
                 },
                 "landuse/allotments": {
                     "name": "社區農園",
                     "terms": "酒莊"
                 },
                 "leisure": {
-                    "name": "休閒設施",
-                    "terms": "休閒設施,休閒娛樂"
+                    "name": "休閒設施"
                 },
                 "leisure/adult_gaming_centre": {
                     "name": "成人遊戲中心",
                     "name": "野餐桌",
                     "terms": "野餐桌"
                 },
+                "leisure/picnic_table/chess": {
+                    "name": "棋桌",
+                    "terms": "象棋桌,西洋棋桌"
+                },
                 "leisure/pitch": {
                     "name": "運動場地",
                     "terms": "運動場"
                     "name": "體育中心/設施",
                     "terms": "體育中心,體育設施"
                 },
+                "leisure/sports_centre/climbing": {
+                    "name": "攀岩場",
+                    "terms": "攀岩場"
+                },
                 "leisure/sports_centre/swimming": {
                     "name": "游泳池附屬設施",
                     "terms": "游泳池設施,游池附屬設施,游池設施"
                     "terms": "線"
                 },
                 "man_made": {
-                    "name": "人工設施",
-                    "terms": "人造構築,人造建築,人造設施"
+                    "name": "人工設施"
                 },
                 "man_made/adit": {
                     "name": "坑口",
                     "name": "塔",
                     "terms": "塔"
                 },
+                "man_made/tower/bell_tower": {
+                    "name": "鐘樓",
+                    "terms": "鐘樓"
+                },
                 "man_made/tower/communication": {
                     "name": "通訊塔",
                     "terms": "無線通訊塔"
                 },
+                "man_made/tower/minaret": {
+                    "name": "尖塔",
+                    "terms": "尖塔"
+                },
                 "man_made/tower/observation": {
                     "name": "瞭望塔",
                     "terms": "瞭望塔"
                     "terms": "電信公司人孔,電信人孔"
                 },
                 "natural": {
-                    "name": "自然景觀",
-                    "terms": "自然物件"
+                    "name": "自然景觀"
                 },
                 "natural/bare_rock": {
                     "name": "裸露的岩石",
                     "name": "變壓器",
                     "terms": "變壓器"
                 },
-                "public_transport/linear_platform": {
-                    "name": "轉運站 / 月台",
-                    "terms": "站牌,客運站牌,客運月台"
-                },
-                "public_transport/linear_platform_aerialway": {
-                    "name": "纜車站/月台",
-                    "terms": "纜車站,纜車月台"
-                },
-                "public_transport/linear_platform_bus": {
-                    "name": "公車站/公車月台",
-                    "terms": "公車月台"
-                },
-                "public_transport/linear_platform_ferry": {
-                    "name": "船運停船處 / 船運月台",
-                    "terms": "渡輪停船處,船運月台"
-                },
-                "public_transport/linear_platform_light_rail": {
-                    "name": "輕軌停車處/ 月台",
-                    "terms": "輕軌停車處,輕軌月台"
-                },
-                "public_transport/linear_platform_monorail": {
-                    "name": "單軌電車停車處 / 月台",
-                    "terms": "單軌電車停車處,"
-                },
-                "public_transport/linear_platform_subway": {
-                    "name": "捷運停車處 / 月台",
-                    "terms": "地鐵停車處,地鐵月台"
-                },
-                "public_transport/linear_platform_train": {
-                    "name": "火車停車處 / 月台",
-                    "terms": "火車停車處,火車月台"
-                },
-                "public_transport/linear_platform_tram": {
-                    "name": "街車停車處 / 月台",
-                    "terms": "街車停車處,街車月台"
-                },
-                "public_transport/linear_platform_trolleybus": {
-                    "name": "無軌電車停車處 / 月台",
-                    "terms": "無軌電車停車處,無軌電車月台"
-                },
                 "public_transport/platform": {
                     "name": "公車專用道停車處 / 月台",
                     "terms": "公車專用道停車處,公車專用道月台"
                     "terms": "酒店"
                 },
                 "tourism": {
-                    "name": "旅遊設施",
-                    "terms": "旅遊設施"
+                    "name": "旅遊設施"
                 },
                 "tourism/alpine_hut": {
                     "name": "高山小屋",
index 5e37062caa86a9821b29c11f7c733c77e77b2c63..5793bd6673674ac45ba9596cbbbed991182eee13 100644 (file)
             "title": "显示我的位置"
         },
         "inspector": {
-            "no_documentation_combination": "没有关于此标签组合的文档",
-            "no_documentation_key": "没有关于此键的文档",
             "show_more": "显示更多",
             "view_on_osm": "在openstreetmap.org上查看",
             "all_tags": "所有标签",
             "role": "角色",
             "choose": "选择对象的类型",
             "results": "{search}共有{n}个结果",
-            "reference": "在OpenStreetMap Wiki上查看",
             "back_tooltip": "修改要素",
             "remove": "删除",
             "search": "搜索",
             "on_wiki": "在wiki.osm.org查看{tag}",
             "used_with": "使用{type}"
         },
-        "validations": {
-            "untagged_point": "未标记的点",
-            "untagged_line": "未标记的线",
-            "untagged_area": "未标记的面",
-            "tag_suggests_area": "{tag}这个标签建议使用在面上,但是他不是一个面",
-            "deprecated_tags": "已过时标签:{tags}"
-        },
         "cannot_zoom": "在当前模式下无法进一步缩小。",
         "help": {
             "title": "帮助"
                     "label": "类型"
                 },
                 "website": {
-                    "label": "网站",
-                    "placeholder": "http://example.com/"
+                    "label": "网站"
                 },
                 "wetland": {
                     "label": "类型"
index d40dba782d01fca73ad20fa9d15f3526801361b3..6cf84f91dc6389125bb9f5a19a10cafe70420782 100644 (file)
@@ -22665,8 +22665,10 @@ var APIv3 = /** @class */ (function () {
         ];
         this._propertiesSpatial = [
             "atomic_scale",
+            "c_rotation",
             "ca",
             "calt",
+            "camera_projection_type",
             "cca",
             "cfocal",
             "ck1",
@@ -22675,7 +22677,6 @@ var APIv3 = /** @class */ (function () {
             "height",
             "merge_cc",
             "merge_version",
-            "c_rotation",
             "orientation",
             "width",
         ];
@@ -29479,6 +29480,14 @@ var Shaders = /** @class */ (function () {
         fragment: "#ifdef GL_FRAGMENT_PRECISION_HIGH\nprecision highp float;\n#else\nprecision mediump float;\n#endif\n\nuniform sampler2D projectorTex;\nuniform float opacity;\nuniform float focal;\nuniform float k1;\nuniform float k2;\nuniform float scale_x;\nuniform float scale_y;\nuniform float radial_peak;\nuniform float curtain;\n\nvarying vec4 vRstq;\n\nvoid main()\n{\n    float x = vRstq.x / vRstq.z;\n    float y = vRstq.y / vRstq.z;\n    float r2 = x * x + y * y;\n\n    if (radial_peak > 0. && r2 > radial_peak * sqrt(r2)) {\n        r2 = radial_peak * radial_peak;\n    }\n\n    float d = 1.0 + k1 * r2 + k2 * r2 * r2;\n    float u = scale_x * focal * d * x + 0.5;\n    float v = - scale_y * focal * d * y + 0.5;\n\n    vec4 baseColor;\n    if ((u < curtain || curtain >= 1.0) && u >= 0. && u <= 1. && v >= 0. && v <= 1.) {\n        baseColor = texture2D(projectorTex, vec2(u, v));\n        baseColor.a = opacity;\n    } else {\n        baseColor = vec4(0.0, 0.0, 0.0, 0.0);\n    }\n\n    gl_FragColor = baseColor;\n}\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}",
     };
+    Shaders.fisheye = {
+        fragment: "#ifdef GL_FRAGMENT_PRECISION_HIGH\nprecision highp float;\n#else\nprecision mediump float;\n#endif\n\nuniform sampler2D projectorTex;\nuniform float opacity;\nuniform float focal;\nuniform float k1;\nuniform float k2;\nuniform float scale_x;\nuniform float scale_y;\nuniform float radial_peak;\n\nvarying vec4 vRstq;\n\nvoid main()\n{\n    float x = vRstq.x;\n    float y = vRstq.y;\n    float z = vRstq.z;\n\n    float r = sqrt(x * x + y * y);\n    float theta = atan(r, z);\n\n    if (radial_peak > 0. && theta > radial_peak) {\n        theta = radial_peak;\n    }\n\n    float theta2 = theta * theta;\n    float theta_d = theta * (1.0 + theta2 * (k1 + theta2 * k2));\n    float s = focal * theta_d / r;\n\n    float u = scale_x * s * x + 0.5;\n    float v = -scale_y * s * y + 0.5;\n\n    vec4 baseColor;\n    if (u >= 0. && u <= 1. && v >= 0. && v <= 1.) {\n        baseColor = texture2D(projectorTex, vec2(u, v));\n        baseColor.a = opacity;\n    } else {\n        baseColor = vec4(0.0, 0.0, 0.0, 0.0);\n    }\n\n    gl_FragColor = baseColor;\n}\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}",
+    };
+    Shaders.fisheyeCurtain = {
+        fragment: "#ifdef GL_FRAGMENT_PRECISION_HIGH\nprecision highp float;\n#else\nprecision mediump float;\n#endif\n\nuniform sampler2D projectorTex;\nuniform float opacity;\nuniform float focal;\nuniform float k1;\nuniform float k2;\nuniform float scale_x;\nuniform float scale_y;\nuniform float radial_peak;\nuniform float curtain;\n\nvarying vec4 vRstq;\n\nvoid main()\n{\n    float x = vRstq.x;\n    float y = vRstq.y;\n    float z = vRstq.z;\n\n    float r2 = sqrt(x * x + y * y);\n    float theta = atan(r2, z);\n\n    if (radial_peak > 0. && theta > radial_peak) {\n        theta = radial_peak;\n    }\n\n    float theta2 = theta * theta;\n    float theta_d = theta * (1.0 + theta2 * (k1 + theta2 * k2));\n    float s = focal * theta_d / r2;\n\n    float u = scale_x * s * x + 0.5;\n    float v = -scale_y * s * y + 0.5;\n\n    vec4 baseColor;\n    if ((u < curtain || curtain >= 1.0) && u >= 0. && u <= 1. && v >= 0. && v <= 1.) {\n        baseColor = texture2D(projectorTex, vec2(u, v));\n        baseColor.a = opacity;\n    } else {\n        baseColor = vec4(0.0, 0.0, 0.0, 0.0);\n    }\n\n    gl_FragColor = baseColor;\n}\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}",
+    };
     Shaders.perspectiveDistorted = {
         fragment: "#ifdef GL_FRAGMENT_PRECISION_HIGH\nprecision highp float;\n#else\nprecision mediump float;\n#endif\n\nuniform sampler2D projectorTex;\nuniform float opacity;\n\nvarying vec4 vRstq;\n\nvoid main()\n{\n    float u = vRstq.x / vRstq.w;\n    float v = vRstq.y / vRstq.w;\n\n    vec4 baseColor;\n    if (u >= 0. && u <= 1. && v >= 0. && v <= 1.) {\n        baseColor = texture2D(projectorTex, vec2(u, v));\n        baseColor.a = opacity;\n    } else {\n        baseColor = vec4(0.0, 0.0, 0.0, 0.0);\n    }\n\n    gl_FragColor = baseColor;\n}\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",
@@ -30748,6 +30757,7 @@ var SpatialDataCache = /** @class */ (function () {
     SpatialDataCache.prototype._createNodeData = function (node) {
         return {
             alt: node.alt,
+            cameraProjection: node.cameraProjection,
             focal: node.focal,
             gpano: node.gpano,
             height: node.height,
@@ -31086,7 +31096,7 @@ var SpatialDataComponent = /** @class */ (function (_super) {
     };
     SpatialDataComponent.prototype._createTransform = function (data, reference) {
         var translation = Geo_1.Geo.computeTranslation({ alt: data.alt, lat: data.lat, lon: data.lon }, data.rotation, reference);
-        var transform = new Geo_1.Transform(data.orientation, data.width, data.height, data.focal, data.scale, data.gpano, data.rotation, translation, undefined, undefined, data.k1, data.k2);
+        var transform = new Geo_1.Transform(data.orientation, data.width, data.height, data.focal, data.scale, data.gpano, data.rotation, translation, undefined, undefined, data.k1, data.k2, data.cameraProjection);
         return transform;
     };
     SpatialDataComponent.prototype._computeTiles = function (hash, direction) {
@@ -36008,10 +36018,15 @@ var MeshFactory = /** @class */ (function () {
         this._imageSphereRadius = imageSphereRadius != null ? imageSphereRadius : 200;
     }
     MeshFactory.prototype.createMesh = function (node, transform) {
-        var mesh = node.pano ?
-            this._createImageSphere(node, transform) :
-            this._createImagePlane(node, transform);
-        return mesh;
+        if (node.pano) {
+            return this._createImageSphere(node, transform);
+        }
+        else if (transform.cameraProjection === "fisheye") {
+            return this._createImagePlaneFisheye(node, transform);
+        }
+        else {
+            return this._createImagePlane(node, transform);
+        }
     };
     MeshFactory.prototype.createFlatMesh = function (node, transform, basicX0, basicX1, basicY0, basicY1) {
         var texture = this._createTexture(node.image);
@@ -36024,9 +36039,15 @@ var MeshFactory = /** @class */ (function () {
         if (node.pano && !node.fullPano) {
             throw new Error("Cropped panoramas cannot have curtain.");
         }
-        return node.pano ?
-            this._createSphereCurtainMesh(node, transform) :
-            this._createCurtainMesh(node, transform);
+        if (node.pano) {
+            return this._createSphereCurtainMesh(node, transform);
+        }
+        else if (transform.cameraProjection === "fisheye") {
+            return this._createCurtainMeshFisheye(node, transform);
+        }
+        else {
+            return this._createCurtainMesh(node, transform);
+        }
     };
     MeshFactory.prototype.createDistortedCurtainMesh = function (node, transform) {
         if (node.pano) {
@@ -36043,6 +36064,15 @@ var MeshFactory = /** @class */ (function () {
             this._getRegularFlatImagePlaneGeo(transform);
         return new THREE.Mesh(geometry, material);
     };
+    MeshFactory.prototype._createCurtainMeshFisheye = function (node, transform) {
+        var texture = this._createTexture(node.image);
+        var materialParameters = this._createCurtainPlaneMaterialParametersFisheye(transform, texture);
+        var material = new THREE.ShaderMaterial(materialParameters);
+        var geometry = this._useMesh(transform, node) ?
+            this._getImagePlaneGeoFisheye(transform, node) :
+            this._getRegularFlatImagePlaneGeo(transform);
+        return new THREE.Mesh(geometry, material);
+    };
     MeshFactory.prototype._createDistortedCurtainMesh = function (node, transform) {
         var texture = this._createTexture(node.image);
         var materialParameters = this._createDistortedCurtainPlaneMaterialParameters(transform, texture);
@@ -36076,6 +36106,15 @@ var MeshFactory = /** @class */ (function () {
             this._getRegularFlatImagePlaneGeo(transform);
         return new THREE.Mesh(geometry, material);
     };
+    MeshFactory.prototype._createImagePlaneFisheye = function (node, transform) {
+        var texture = this._createTexture(node.image);
+        var materialParameters = this._createPlaneMaterialParametersFisheye(transform, texture);
+        var material = new THREE.ShaderMaterial(materialParameters);
+        var geometry = this._useMesh(transform, node) ?
+            this._getImagePlaneGeoFisheye(transform, node) :
+            this._getRegularFlatImagePlaneGeoFisheye(transform);
+        return new THREE.Mesh(geometry, material);
+    };
     MeshFactory.prototype._createSphereMaterialParameters = function (transform, texture) {
         var gpano = transform.gpano;
         var halfCroppedWidth = (gpano.FullPanoWidthPixels - gpano.CroppedAreaImageWidthPixels) / 2;
@@ -36222,6 +36261,106 @@ var MeshFactory = /** @class */ (function () {
         };
         return materialParameters;
     };
+    MeshFactory.prototype._createPlaneMaterialParametersFisheye = function (transform, texture) {
+        var materialParameters = {
+            depthWrite: false,
+            fragmentShader: Component_1.Shaders.fisheye.fragment,
+            side: THREE.DoubleSide,
+            transparent: true,
+            uniforms: {
+                focal: {
+                    type: "f",
+                    value: transform.focal,
+                },
+                k1: {
+                    type: "f",
+                    value: transform.ck1,
+                },
+                k2: {
+                    type: "f",
+                    value: transform.ck2,
+                },
+                opacity: {
+                    type: "f",
+                    value: 1,
+                },
+                projectorMat: {
+                    type: "m4",
+                    value: transform.basicRt,
+                },
+                projectorTex: {
+                    type: "t",
+                    value: texture,
+                },
+                radial_peak: {
+                    type: "f",
+                    value: !!transform.radialPeak ? transform.radialPeak : 0,
+                },
+                scale_x: {
+                    type: "f",
+                    value: Math.max(transform.basicHeight, transform.basicWidth) / transform.basicWidth,
+                },
+                scale_y: {
+                    type: "f",
+                    value: Math.max(transform.basicWidth, transform.basicHeight) / transform.basicHeight,
+                },
+            },
+            vertexShader: Component_1.Shaders.fisheye.vertex,
+        };
+        return materialParameters;
+    };
+    MeshFactory.prototype._createCurtainPlaneMaterialParametersFisheye = function (transform, texture) {
+        var materialParameters = {
+            depthWrite: false,
+            fragmentShader: Component_1.Shaders.fisheyeCurtain.fragment,
+            side: THREE.DoubleSide,
+            transparent: true,
+            uniforms: {
+                curtain: {
+                    type: "f",
+                    value: 1,
+                },
+                focal: {
+                    type: "f",
+                    value: transform.focal,
+                },
+                k1: {
+                    type: "f",
+                    value: transform.ck1,
+                },
+                k2: {
+                    type: "f",
+                    value: transform.ck2,
+                },
+                opacity: {
+                    type: "f",
+                    value: 1,
+                },
+                projectorMat: {
+                    type: "m4",
+                    value: transform.basicRt,
+                },
+                projectorTex: {
+                    type: "t",
+                    value: texture,
+                },
+                radial_peak: {
+                    type: "f",
+                    value: !!transform.radialPeak ? transform.radialPeak : 0,
+                },
+                scale_x: {
+                    type: "f",
+                    value: Math.max(transform.basicHeight, transform.basicWidth) / transform.basicWidth,
+                },
+                scale_y: {
+                    type: "f",
+                    value: Math.max(transform.basicWidth, transform.basicHeight) / transform.basicHeight,
+                },
+            },
+            vertexShader: Component_1.Shaders.fisheyeCurtain.vertex,
+        };
+        return materialParameters;
+    };
     MeshFactory.prototype._createCurtainPlaneMaterialParameters = function (transform, texture) {
         var materialParameters = {
             depthWrite: false,
@@ -36403,6 +36542,38 @@ var MeshFactory = /** @class */ (function () {
         geometry.setIndex(new THREE.BufferAttribute(indices, 1));
         return geometry;
     };
+    MeshFactory.prototype._getImagePlaneGeoFisheye = function (transform, node) {
+        var t = new THREE.Matrix4().getInverse(transform.srt);
+        // push everything at least 5 meters in front of the camera
+        var minZ = 5.0 * transform.scale;
+        var maxZ = this._imagePlaneDepth * transform.scale;
+        var vertices = node.mesh.vertices;
+        var numVertices = vertices.length / 3;
+        var positions = new Float32Array(vertices.length);
+        for (var i = 0; i < numVertices; ++i) {
+            var index = 3 * i;
+            var x = vertices[index + 0];
+            var y = vertices[index + 1];
+            var z = vertices[index + 2];
+            var l = Math.sqrt(x * x + y * y + z * z);
+            var boundedL = Math.max(minZ, Math.min(l, maxZ));
+            var factor = boundedL / l;
+            var p = new THREE.Vector3(x * factor, y * factor, z * factor);
+            p.applyMatrix4(t);
+            positions[index + 0] = p.x;
+            positions[index + 1] = p.y;
+            positions[index + 2] = p.z;
+        }
+        var faces = node.mesh.faces;
+        var indices = new Uint16Array(faces.length);
+        for (var i = 0; i < faces.length; ++i) {
+            indices[i] = faces[i];
+        }
+        var geometry = new THREE.BufferGeometry();
+        geometry.addAttribute("position", new THREE.BufferAttribute(positions, 3));
+        geometry.setIndex(new THREE.BufferAttribute(indices, 1));
+        return geometry;
+    };
     MeshFactory.prototype._getFlatImageSphereGeo = function (transform) {
         var gpano = transform.gpano;
         var phiStart = 2 * Math.PI * gpano.CroppedAreaLeftPixels / gpano.FullPanoWidthPixels;
@@ -36431,6 +36602,22 @@ var MeshFactory = /** @class */ (function () {
         vertices.push(transform.unprojectSfM([-dx, dy], this._imagePlaneDepth));
         return this._createFlatGeometry(vertices);
     };
+    MeshFactory.prototype._getRegularFlatImagePlaneGeoFisheye = function (transform) {
+        var width = transform.width;
+        var height = transform.height;
+        var size = Math.max(width, height);
+        var dx = width / 2.0 / size;
+        var dy = height / 2.0 / size;
+        return this._getFlatImagePlaneGeoFisheye(transform, dx, dy);
+    };
+    MeshFactory.prototype._getFlatImagePlaneGeoFisheye = function (transform, dx, dy) {
+        var vertices = [];
+        vertices.push(transform.unprojectSfM([-dx, -dy], this._imagePlaneDepth));
+        vertices.push(transform.unprojectSfM([dx, -dy], this._imagePlaneDepth));
+        vertices.push(transform.unprojectSfM([dx, dy], this._imagePlaneDepth));
+        vertices.push(transform.unprojectSfM([-dx, dy], this._imagePlaneDepth));
+        return this._createFlatGeometry(vertices);
+    };
     MeshFactory.prototype._getFlatImagePlaneGeoFromBasic = function (transform, basicX0, basicX1, basicY0, basicY1) {
         var vertices = [];
         vertices.push(transform.unprojectBasic([basicX0, basicY0], this._imagePlaneDepth));
@@ -37479,7 +37666,7 @@ var Transform = /** @class */ (function () {
      * @param {Array<number>} translation - Translation vector in three dimensions.
      * @param {HTMLImageElement} image - Image for fallback size calculations.
      */
-    function Transform(orientation, width, height, focal, scale, gpano, rotation, translation, image, textureScale, ck1, ck2) {
+    function Transform(orientation, width, height, focal, scale, gpano, rotation, translation, image, textureScale, ck1, ck2, cameraProjection) {
         this._orientation = this._getValue(orientation, 1);
         var imageWidth = image != null ? image.width : 4;
         var imageHeight = image != null ? image.height : 3;
@@ -37500,6 +37687,11 @@ var Transform = /** @class */ (function () {
         this._textureScale = !!textureScale ? textureScale : [1, 1];
         this._ck1 = !!ck1 ? ck1 : 0;
         this._ck2 = !!ck2 ? ck2 : 0;
+        this._cameraProjection = !!cameraProjection ?
+            cameraProjection :
+            !!gpano ?
+                "equirectangular" :
+                "perspective";
         this._radialPeak = this._getRadialPeak(this._ck1, this._ck2);
     }
     Object.defineProperty(Transform.prototype, "ck1", {
@@ -37516,6 +37708,13 @@ var Transform = /** @class */ (function () {
         enumerable: true,
         configurable: true
     });
+    Object.defineProperty(Transform.prototype, "cameraProjection", {
+        get: function () {
+            return this._cameraProjection;
+        },
+        enumerable: true,
+        configurable: true
+    });
     Object.defineProperty(Transform.prototype, "basicAspect", {
         /**
          * Get basic aspect.
@@ -37820,18 +38019,21 @@ var Transform = /** @class */ (function () {
             var z = Math.cos(lat) * Math.cos(lon);
             return [x, y, z];
         }
-        else {
+        else if (this._cameraProjection === "fisheye") {
             var _a = [sfm[0] / this._focal, sfm[1] / this._focal], dxn = _a[0], dyn = _a[1];
-            var rp = this._radialPeak;
+            var dTheta = Math.sqrt(dxn * dxn + dyn * dyn);
+            var d = this._distortionFromDistortedRadius(dTheta, this._ck1, this._ck2, this._radialPeak);
+            var theta = dTheta / d;
+            var z = Math.cos(theta);
+            var r = Math.sin(theta);
+            var x = r * dxn / dTheta;
+            var y = r * dyn / dTheta;
+            return [x, y, z];
+        }
+        else {
+            var _b = [sfm[0] / this._focal, sfm[1] / this._focal], dxn = _b[0], dyn = _b[1];
             var dr = Math.sqrt(dxn * dxn + dyn * dyn);
-            var d = 1.0;
-            for (var i = 0; i < 10; i++) {
-                var r = dr / d;
-                if (r > rp) {
-                    r = rp;
-                }
-                d = 1 + this._ck1 * Math.pow(r, 2) + this._ck2 * Math.pow(r, 4);
-            }
+            var d = this._distortionFromDistortedRadius(dr, this._ck1, this._ck2, this._radialPeak);
             var xn = dxn / d;
             var yn = dyn / d;
             var v = new THREE.Vector3(xn, yn, 1);
@@ -37839,6 +38041,23 @@ var Transform = /** @class */ (function () {
             return [v.x, v.y, v.z];
         }
     };
+    /** Compute distortion given the distorted radius.
+     *
+     *  Solves for d in the equation
+     *    y = d(x, k1, k2) * x
+     * given the distorted radius, y.
+     */
+    Transform.prototype._distortionFromDistortedRadius = function (distortedRadius, k1, k2, radialPeak) {
+        var d = 1.0;
+        for (var i = 0; i < 10; i++) {
+            var radius = distortedRadius / d;
+            if (radius > radialPeak) {
+                radius = radialPeak;
+            }
+            d = 1 + k1 * Math.pow(radius, 2) + k2 * Math.pow(radius, 4);
+        }
+        return d;
+    };
     /**
      * Transform bearing vector (3D cartesian coordiantes on the unit sphere) to
      * SfM coordinates.
@@ -37872,6 +38091,25 @@ var Transform = /** @class */ (function () {
                 (fullPanoPixel[1] - this.gpano.CroppedAreaTopPixels - this.gpano.CroppedAreaImageHeightPixels / 2) / size,
             ];
         }
+        else if (this._cameraProjection === "fisheye") {
+            if (bearing[2] > 0) {
+                var x = bearing[0], y = bearing[1], z = bearing[2];
+                var r = Math.sqrt(x * x + y * y);
+                var theta = Math.atan2(r, z);
+                if (theta > this._radialPeak) {
+                    theta = this._radialPeak;
+                }
+                var distortion = 1.0 + Math.pow(theta, 2) * (this._ck1 + Math.pow(theta, 2) * this._ck2);
+                var s = this._focal * distortion * theta / r;
+                return [s * x, s * y];
+            }
+            else {
+                return [
+                    bearing[0] < 0 ? Number.NEGATIVE_INFINITY : Number.POSITIVE_INFINITY,
+                    bearing[1] < 0 ? Number.NEGATIVE_INFINITY : Number.POSITIVE_INFINITY,
+                ];
+            }
+        }
         else {
             if (bearing[2] > 0) {
                 var _a = [bearing[0] / bearing[2], bearing[1] / bearing[2]], xn = _a[0], yn = _a[1];
@@ -40531,6 +40769,20 @@ var Node = /** @class */ (function () {
         enumerable: true,
         configurable: true
     });
+    Object.defineProperty(Node.prototype, "cameraProjection", {
+        /**
+         * Get cameraProjection.
+         *
+         * @description Will be undefined if SfM has not been run.
+         *
+         * @returns {number} The camera projection of the image.
+         */
+        get: function () {
+            return this._fill.camera_projection_type;
+        },
+        enumerable: true,
+        configurable: true
+    });
     Object.defineProperty(Node.prototype, "capturedAt", {
         /**
          * Get capturedAt.
@@ -44677,7 +44929,7 @@ var StateBase = /** @class */ (function () {
         for (var _i = 0, _a = this._trajectory; _i < _a.length; _i++) {
             var node = _a[_i];
             var translation = this._nodeToTranslation(node, this._reference);
-            var transform = new Geo_1.Transform(node.orientation, node.width, node.height, node.focal, node.scale, node.gpano, node.rotation, translation, node.image, undefined, node.ck1, node.ck2);
+            var transform = new Geo_1.Transform(node.orientation, node.width, node.height, node.focal, node.scale, node.gpano, node.rotation, translation, node.image, undefined, node.ck1, node.ck2, node.cameraProjection);
             this._trajectoryTransforms.push(transform);
             this._trajectoryCameras.push(new Geo_1.Camera(transform));
         }
@@ -44954,7 +45206,7 @@ var StateBase = /** @class */ (function () {
                 throw new Error_1.ArgumentMapillaryError("Assets must be cached when node is added to trajectory");
             }
             var translation = this._nodeToTranslation(node, this.reference);
-            var transform = new Geo_1.Transform(node.orientation, node.width, node.height, node.focal, node.scale, node.gpano, node.rotation, translation, node.image, undefined, node.ck1, node.ck2);
+            var transform = new Geo_1.Transform(node.orientation, node.width, node.height, node.focal, node.scale, node.gpano, node.rotation, translation, node.image, undefined, node.ck1, node.ck2, node.cameraProjection);
             this._trajectoryTransforms.push(transform);
             this._trajectoryCameras.push(new Geo_1.Camera(transform));
         }
@@ -44966,7 +45218,7 @@ var StateBase = /** @class */ (function () {
                 throw new Error_1.ArgumentMapillaryError("Assets must be cached when added to trajectory");
             }
             var translation = this._nodeToTranslation(node, this.reference);
-            var transform = new Geo_1.Transform(node.orientation, node.width, node.height, node.focal, node.scale, node.gpano, node.rotation, translation, node.image, undefined, node.ck1, node.ck2);
+            var transform = new Geo_1.Transform(node.orientation, node.width, node.height, node.focal, node.scale, node.gpano, node.rotation, translation, node.image, undefined, node.ck1, node.ck2, node.cameraProjection);
             this._trajectoryTransforms.unshift(transform);
             this._trajectoryCameras.unshift(new Geo_1.Camera(transform));
         }
index 6a3dfe7c73373571bc48841bbd44a4f6c94f37d4..355906d240352bddd6bc07608f2fe9ba9208ce6d 100644 (file)
     "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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5JA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;AClrDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1oBA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;ACvrDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AACA;AACA;AACA;;AC/DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACljBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7GA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;ACxCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpHA;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;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7HA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;AC5CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpIA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3JA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;;AClHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;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;;ACpBA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrDA;AACA;AACA;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;;ACzBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;;ACzBA;AACA;AACA;AACA;AACA;AACA;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;;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;;AC5BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;ACbA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClFA;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;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7DA;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;;ACrBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;ACxEA;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;;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;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;AC/FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;;ACxEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACbA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;AC9CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACbA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;ACzCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5GA;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;;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;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACbA;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;;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;;ACvEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;ACrDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;AC3DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChIA;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;;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;;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;;AC5CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;;ACjCA;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;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzFA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1FA;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;AACA;AACA;AACA;AACA;AACA;;AC3BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/EA;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;;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;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/IA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACbA;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;;AC5BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;;AC/CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;ACpGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjDA;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;;AC5GA;AACA;AACA;AACA;AACA;AACA;;ACLA;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;;ACXA;AACA;AACA;AACA;;ACHA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACVA;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;;ACrBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACVA;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;;ACnBA;AACA;AACA;AACA;;ACHA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;;ACHA;AACA;AACA;AACA;;ACHA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;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;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;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;;AC5CA;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;;ACzBA;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;;ACbA;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;;ACpBA;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;;AClNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACr7BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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,6DAA0D;AAAlD,oCAAA,WAAW,CAAA;AACnB,6DAA0D;AAAlD,oCAAA,WAAW,CAAA;AACnB,yDAAsD;AAA9C,gCAAA,SAAS,CAAA;AACjB,iEAA8D;AAAtD,wCAAA,aAAa,CAAA;AACrB,yEAAsE;AAA9D,sDAAA,oBAAoB,CAAA;AAC5B,uEAAoE;AAA5D,oDAAA,mBAAmB,CAAA;AAC3B,iEAA8D;AAAtD,8CAAA,gBAAgB,CAAA;AACxB,6DAA0D;AAAlD,0CAAA,cAAc,CAAA;AACtB,6DAA0D;A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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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5JA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;AClrDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1oBA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;ACvrDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AACA;AACA;AACA;;AC/DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACljBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7GA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;ACxCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpHA;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;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7HA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;AC5CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpIA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3JA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;;AClHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;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;;ACpBA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrDA;AACA;AACA;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;;ACzBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;;ACzBA;AACA;AACA;AACA;AACA;AACA;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;;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;;AC5BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;ACbA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClFA;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;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7DA;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;;ACrBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;ACxEA;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;;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;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;AC/FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;;ACxEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACbA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;AC9CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACbA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;ACzCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5GA;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;;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;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACbA;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;;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;;ACvEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;ACrDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;AC3DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChIA;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;;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;;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;;AC5CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;;ACjCA;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;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzFA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1FA;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;AACA;AACA;AACA;AACA;AACA;;AC3BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/EA;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;;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;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/IA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACbA;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;;AC5BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;;AC/CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;ACpGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjDA;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;;AC5GA;AACA;AACA;AACA;AACA;AACA;;ACLA;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;;ACXA;AACA;AACA;AACA;;ACHA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACVA;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;;ACrBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACVA;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;;ACnBA;AACA;AACA;AACA;;ACHA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;;ACHA;AACA;AACA;AACA;;ACHA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;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;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;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;;AC5CA;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;;ACzBA;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;;ACbA;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;;ACpBA;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;;AClNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACr7BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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,6DAA0D;AAAlD,oCAAA,WAAW,CAAA;AACnB,6DAA0D;AAAlD,oCAAA,WAAW,CAAA;AACnB,yDAAsD;AAA9C,gCAAA,SAAS,CAAA;AACjB,iEAA8D;AAAtD,wCAAA,aAAa,CAAA;AACrB,yEAAsE;AAA9D,sDAAA,oBAAoB,CAAA;AAC5B,uEAAoE;AAA5D,oDAAA,mBAAmB,CAAA;AAC3B,iEAA8D;AAAtD,8CAAA,gBAAgB,CAAA;AACxB,6DAA0D;AAAlD,0CAAA,cAAc,CAAA;AACtB,6DAA0D;A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",
   "file": "generated.js",
   "sourceRoot": "",
   "sourcesContent": [
     "export {ImageTileLoader} from \"./tiles/ImageTileLoader\";\nexport {ImageTileStore} from \"./tiles/ImageTileStore\";\nexport {TextureProvider} from \"./tiles/TextureProvider\";\nexport {RegionOfInterestCalculator} from \"./tiles/RegionOfInterestCalculator\";\nexport * from \"./tiles/interfaces/interfaces\";\n",
     "export {DOM} from \"./utils/DOM\";\nexport {EventEmitter} from \"./utils/EventEmitter\";\nexport {Func} from \"./utils/Func\";\nexport {Settings} from \"./utils/Settings\";\nexport * from \"./utils/Support\";\nexport {Urls} from \"./utils/Urls\";\n",
     "export {Alignment} from \"./viewer/Alignment\";\nexport {CacheService} from \"./viewer/CacheService\";\nexport {ComponentController} from \"./viewer/ComponentController\";\nexport {Container} from \"./viewer/Container\";\nexport {Observer} from \"./viewer/Observer\";\nexport {ImageSize} from \"./viewer/ImageSize\";\nexport {KeyboardService} from \"./viewer/KeyboardService\";\nexport {LoadingService} from \"./viewer/LoadingService\";\nexport {MouseService} from \"./viewer/MouseService\";\nexport {Navigator} from \"./viewer/Navigator\";\nexport {PlayService} from \"./viewer/PlayService\";\nexport {Projection} from \"./viewer/Projection\";\nexport {SpriteService} from \"./viewer/SpriteService\";\nexport {TouchService} from \"./viewer/TouchService\";\nexport {Viewer} from \"./viewer/Viewer\";\nexport * from \"./viewer/interfaces/interfaces\";\n",
-    "import {catchError, map} from \"rxjs/operators\";\nimport * as falcor from \"falcor\";\n\nimport {Observable, Subscriber} from \"rxjs\";\n\nimport {\n    ICoreNode,\n    IFillNode,\n    IFullNode,\n    ISequence,\n    ModelCreator,\n} from \"../API\";\n\ninterface IImageByKey<T> {\n    imageByKey: { [key: string]: T };\n}\n\ninterface IImageCloseTo<T> {\n    imageCloseTo: { [key: string]: T };\n}\n\ninterface IImagesByH<T> {\n    imagesByH: { [key: string]: { [index: string]: T } };\n}\n\ninterface ISequenceByKey<T> {\n    sequenceByKey: { [sequenceKey: string]: T };\n}\n\ntype APIPath =\n    \"imageByKey\" |\n    \"imageCloseTo\" |\n    \"imagesByH\" |\n    \"imageViewAdd\" |\n    \"sequenceByKey\" |\n    \"sequenceViewAdd\";\n\n/**\n * @class APIv3\n *\n * @classdesc Provides methods for access of API v3.\n */\nexport class APIv3 {\n    private _clientId: string;\n\n    private _model: falcor.Model;\n    private _modelCreator: ModelCreator;\n\n    private _pageCount: number;\n\n    private _pathImageByKey: APIPath;\n    private _pathImageCloseTo: APIPath;\n    private _pathImagesByH: APIPath;\n    private _pathImageViewAdd: APIPath;\n    private _pathSequenceByKey: APIPath;\n    private _pathSequenceViewAdd: APIPath;\n\n    private _propertiesCore: string[];\n    private _propertiesFill: string[];\n    private _propertiesKey: string[];\n    private _propertiesSequence: string[];\n    private _propertiesSpatial: string[];\n    private _propertiesUser: string[];\n\n    /**\n     * Create a new api v3 instance.\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     * @param {ModelCreator} [creator] - Optional model creator instance.\n     */\n    constructor(clientId: string, token?: string, creator?: ModelCreator) {\n        this._clientId = clientId;\n\n        this._modelCreator = creator != null ? creator : new ModelCreator();\n        this._model = this._modelCreator.createModel(clientId, token);\n\n        this._pageCount = 999;\n\n        this._pathImageByKey = \"imageByKey\";\n        this._pathImageCloseTo = \"imageCloseTo\";\n        this._pathImagesByH = \"imagesByH\";\n        this._pathImageViewAdd = \"imageViewAdd\";\n        this._pathSequenceByKey = \"sequenceByKey\";\n        this._pathSequenceViewAdd = \"sequenceViewAdd\";\n\n        this._propertiesCore = [\n            \"cl\",\n            \"l\",\n            \"sequence_key\",\n        ];\n\n        this._propertiesFill = [\n            \"captured_at\",\n            \"captured_with_camera_uuid\",\n            \"user\",\n            \"organization_key\",\n            \"private\",\n            \"project\",\n        ];\n\n        this._propertiesKey = [\n            \"key\",\n        ];\n\n        this._propertiesSequence = [\n            \"keys\",\n        ];\n\n        this._propertiesSpatial = [\n            \"atomic_scale\",\n            \"ca\",\n            \"calt\",\n            \"cca\",\n            \"cfocal\",\n            \"ck1\",\n            \"ck2\",\n            \"gpano\",\n            \"height\",\n            \"merge_cc\",\n            \"merge_version\",\n            \"c_rotation\",\n            \"orientation\",\n            \"width\",\n        ];\n\n        this._propertiesUser = [\n            \"username\",\n        ];\n    }\n\n    public imageByKeyFill$(keys: string[]): Observable<{ [key: string]: IFillNode }> {\n        return this._catchInvalidateGet$(\n            this._wrapModelResponse$<falcor.JSONEnvelope<IImageByKey<IFillNode>>>(this._model.get([\n                this._pathImageByKey,\n                keys,\n                this._propertiesKey\n                    .concat(this._propertiesFill)\n                    .concat(this._propertiesSpatial),\n                this._propertiesKey\n                    .concat(this._propertiesUser)])).pipe(\n            map(\n                (value: falcor.JSONEnvelope<IImageByKey<IFillNode>>): { [key: string]: IFillNode } => {\n                    if (!value) {\n                        throw new Error(`Images (${keys.join(\", \")}) could not be found.`);\n                    }\n\n                    return value.json.imageByKey;\n                })),\n            this._pathImageByKey,\n            keys);\n    }\n\n    public imageByKeyFull$(keys: string[]): Observable<{ [key: string]: IFullNode }> {\n        return this._catchInvalidateGet$(\n            this._wrapModelResponse$<falcor.JSONEnvelope<IImageByKey<IFullNode>>>(this._model.get([\n                this._pathImageByKey,\n                keys,\n                this._propertiesKey\n                    .concat(this._propertiesCore)\n                    .concat(this._propertiesFill)\n                    .concat(this._propertiesSpatial),\n                this._propertiesKey\n                    .concat(this._propertiesUser)])).pipe(\n            map(\n                (value: falcor.JSONEnvelope<IImageByKey<IFullNode>>): { [key: string]: IFullNode } => {\n                    if (!value) {\n                        throw new Error(`Images (${keys.join(\", \")}) could not be found.`);\n                    }\n\n                    return value.json.imageByKey;\n                })),\n            this._pathImageByKey,\n            keys);\n    }\n\n    public imageCloseTo$(lat: number, lon: number): Observable<IFullNode> {\n        let lonLat: string = `${lon}:${lat}`;\n        return this._catchInvalidateGet$(\n            this._wrapModelResponse$<falcor.JSONEnvelope<IImageCloseTo<IFullNode>>>(this._model.get([\n                this._pathImageCloseTo,\n                [lonLat],\n                this._propertiesKey\n                    .concat(this._propertiesCore)\n                    .concat(this._propertiesFill)\n                    .concat(this._propertiesSpatial),\n                this._propertiesKey\n                    .concat(this._propertiesUser)])).pipe(\n            map(\n                (value: falcor.JSONEnvelope<IImageCloseTo<IFullNode>>): IFullNode => {\n                    return value != null ? value.json.imageCloseTo[lonLat] : null;\n                })),\n            this._pathImageCloseTo,\n            [lonLat]);\n    }\n\n    public imagesByH$(hs: string[]): Observable<{ [h: string]: { [index: string]: ICoreNode } }> {\n        return this._catchInvalidateGet$(\n            this._wrapModelResponse$<falcor.JSONEnvelope<IImagesByH<ICoreNode>>>(this._model.get([\n                this._pathImagesByH,\n                hs,\n                { from: 0, to: this._pageCount },\n                this._propertiesKey\n                    .concat(this._propertiesCore)])).pipe(\n            map(\n                (value: falcor.JSONEnvelope<IImagesByH<ICoreNode>>): { [h: string]: { [index: string]: ICoreNode } } => {\n                    if (!value) {\n                        value = { json: { imagesByH: {} } };\n                        for (let h of hs) {\n                            value.json.imagesByH[h] = {};\n                            for (let i: number = 0; i <= this._pageCount; i++) {\n                                value.json.imagesByH[h][i] = null;\n                            }\n                        }\n                    }\n\n                    return value.json.imagesByH;\n                })),\n            this._pathImagesByH,\n            hs);\n    }\n\n    public imageViewAdd$(keys: string[]): Observable<void> {\n        return this._catchInvalidateCall$(\n            this._wrapCallModelResponse$(\n                this._model.call(\n                    [this._pathImageViewAdd],\n                    [keys])),\n            this._pathImageViewAdd,\n            keys);\n    }\n\n    public invalidateImageByKey(keys: string[]): void {\n        this._invalidateGet(this._pathImageByKey, keys);\n    }\n\n    public invalidateImagesByH(hs: string[]): void {\n        this._invalidateGet(this._pathImagesByH, hs);\n    }\n\n    public invalidateSequenceByKey(sKeys: string[]): void {\n        this._invalidateGet(this._pathSequenceByKey, sKeys);\n    }\n\n    public setToken(token?: string): void {\n        this._model.invalidate([]);\n        this._model = null;\n        this._model = this._modelCreator.createModel(this._clientId, token);\n    }\n\n    public sequenceByKey$(sequenceKeys: string[]): Observable<{ [sequenceKey: string]: ISequence }> {\n        return this._catchInvalidateGet$(\n            this._wrapModelResponse$<falcor.JSONEnvelope<ISequenceByKey<ISequence>>>(this._model.get([\n                this._pathSequenceByKey,\n                sequenceKeys,\n                this._propertiesKey\n                    .concat(this._propertiesSequence)])).pipe(\n            map(\n                (value: falcor.JSONEnvelope<ISequenceByKey<ISequence>>): { [sequenceKey: string]: ISequence } => {\n                    if (!value) {\n                        value = { json: { sequenceByKey: {} } };\n                    }\n\n                    for (const sequenceKey of sequenceKeys) {\n                        if (!(sequenceKey in value.json.sequenceByKey)) {\n                            console.warn(`Sequence data missing (${sequenceKey})`);\n\n                            value.json.sequenceByKey[sequenceKey] = { key: sequenceKey, keys: [] };\n                        }\n                    }\n\n                    return value.json.sequenceByKey;\n                })),\n            this._pathSequenceByKey,\n            sequenceKeys);\n    }\n\n    public sequenceViewAdd$(sequenceKeys: string[]): Observable<void> {\n        return this._catchInvalidateCall$(\n            this._wrapCallModelResponse$(\n                this._model.call(\n                    [this._pathSequenceViewAdd],\n                    [sequenceKeys])),\n            this._pathSequenceViewAdd,\n            sequenceKeys);\n    }\n\n    public get clientId(): string {\n        return this._clientId;\n    }\n\n    private _catchInvalidateGet$<TResult>(observable: Observable<TResult>, path: APIPath, paths: string[]): Observable<TResult> {\n        return observable.pipe(\n            catchError(\n                (error: Error): Observable<TResult> => {\n                    this._invalidateGet(path, paths);\n\n                    throw error;\n                }));\n    }\n\n    private _catchInvalidateCall$<TResult>(observable: Observable<TResult>, path: APIPath, paths: string[]): Observable<TResult> {\n        return observable.pipe(\n            catchError(\n                (error: Error): Observable<TResult> => {\n                    this._invalidateCall(path, paths);\n\n                    throw error;\n                }));\n    }\n\n    private _invalidateGet(path: APIPath, paths: string[]): void {\n        this._model.invalidate([path, paths]);\n    }\n\n    private _invalidateCall(path: APIPath, paths: string[]): void {\n        this._model.invalidate([path], [paths]);\n    }\n\n    private _wrapModelResponse$<T>(modelResponse: falcor.ModelResponse<T>): Observable<T> {\n        return Observable\n            .create(\n                (subscriber: Subscriber<T>): void => {\n                    modelResponse\n                        .then(\n                            (value: T): void => {\n                                subscriber.next(value);\n                                subscriber.complete();\n                            },\n                            (error: Error): void => {\n                                subscriber.error(error);\n                            });\n                });\n    }\n\n    private _wrapCallModelResponse$<T>(modelResponse: falcor.ModelResponse<falcor.JSONEnvelope<T>>): Observable<T> {\n        return this._wrapModelResponse$(modelResponse).pipe(\n            map<falcor.JSONEnvelope<T>, T>(\n                (value: falcor.JSONEnvelope<T>): T => {\n                    return;\n                }));\n    }\n}\n\nexport default APIv3;\n",
+    "import {catchError, map} from \"rxjs/operators\";\nimport * as falcor from \"falcor\";\n\nimport {Observable, Subscriber} from \"rxjs\";\n\nimport {\n    ICoreNode,\n    IFillNode,\n    IFullNode,\n    ISequence,\n    ModelCreator,\n} from \"../API\";\n\ninterface IImageByKey<T> {\n    imageByKey: { [key: string]: T };\n}\n\ninterface IImageCloseTo<T> {\n    imageCloseTo: { [key: string]: T };\n}\n\ninterface IImagesByH<T> {\n    imagesByH: { [key: string]: { [index: string]: T } };\n}\n\ninterface ISequenceByKey<T> {\n    sequenceByKey: { [sequenceKey: string]: T };\n}\n\ntype APIPath =\n    \"imageByKey\" |\n    \"imageCloseTo\" |\n    \"imagesByH\" |\n    \"imageViewAdd\" |\n    \"sequenceByKey\" |\n    \"sequenceViewAdd\";\n\n/**\n * @class APIv3\n *\n * @classdesc Provides methods for access of API v3.\n */\nexport class APIv3 {\n    private _clientId: string;\n\n    private _model: falcor.Model;\n    private _modelCreator: ModelCreator;\n\n    private _pageCount: number;\n\n    private _pathImageByKey: APIPath;\n    private _pathImageCloseTo: APIPath;\n    private _pathImagesByH: APIPath;\n    private _pathImageViewAdd: APIPath;\n    private _pathSequenceByKey: APIPath;\n    private _pathSequenceViewAdd: APIPath;\n\n    private _propertiesCore: string[];\n    private _propertiesFill: string[];\n    private _propertiesKey: string[];\n    private _propertiesSequence: string[];\n    private _propertiesSpatial: string[];\n    private _propertiesUser: string[];\n\n    /**\n     * Create a new api v3 instance.\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     * @param {ModelCreator} [creator] - Optional model creator instance.\n     */\n    constructor(clientId: string, token?: string, creator?: ModelCreator) {\n        this._clientId = clientId;\n\n        this._modelCreator = creator != null ? creator : new ModelCreator();\n        this._model = this._modelCreator.createModel(clientId, token);\n\n        this._pageCount = 999;\n\n        this._pathImageByKey = \"imageByKey\";\n        this._pathImageCloseTo = \"imageCloseTo\";\n        this._pathImagesByH = \"imagesByH\";\n        this._pathImageViewAdd = \"imageViewAdd\";\n        this._pathSequenceByKey = \"sequenceByKey\";\n        this._pathSequenceViewAdd = \"sequenceViewAdd\";\n\n        this._propertiesCore = [\n            \"cl\",\n            \"l\",\n            \"sequence_key\",\n        ];\n\n        this._propertiesFill = [\n            \"captured_at\",\n            \"captured_with_camera_uuid\",\n            \"user\",\n            \"organization_key\",\n            \"private\",\n            \"project\",\n        ];\n\n        this._propertiesKey = [\n            \"key\",\n        ];\n\n        this._propertiesSequence = [\n            \"keys\",\n        ];\n\n        this._propertiesSpatial = [\n            \"atomic_scale\",\n            \"c_rotation\",\n            \"ca\",\n            \"calt\",\n            \"camera_projection_type\",\n            \"cca\",\n            \"cfocal\",\n            \"ck1\",\n            \"ck2\",\n            \"gpano\",\n            \"height\",\n            \"merge_cc\",\n            \"merge_version\",\n            \"orientation\",\n            \"width\",\n        ];\n\n        this._propertiesUser = [\n            \"username\",\n        ];\n    }\n\n    public imageByKeyFill$(keys: string[]): Observable<{ [key: string]: IFillNode }> {\n        return this._catchInvalidateGet$(\n            this._wrapModelResponse$<falcor.JSONEnvelope<IImageByKey<IFillNode>>>(this._model.get([\n                this._pathImageByKey,\n                keys,\n                this._propertiesKey\n                    .concat(this._propertiesFill)\n                    .concat(this._propertiesSpatial),\n                this._propertiesKey\n                    .concat(this._propertiesUser)])).pipe(\n            map(\n                (value: falcor.JSONEnvelope<IImageByKey<IFillNode>>): { [key: string]: IFillNode } => {\n                    if (!value) {\n                        throw new Error(`Images (${keys.join(\", \")}) could not be found.`);\n                    }\n\n                    return value.json.imageByKey;\n                })),\n            this._pathImageByKey,\n            keys);\n    }\n\n    public imageByKeyFull$(keys: string[]): Observable<{ [key: string]: IFullNode }> {\n        return this._catchInvalidateGet$(\n            this._wrapModelResponse$<falcor.JSONEnvelope<IImageByKey<IFullNode>>>(this._model.get([\n                this._pathImageByKey,\n                keys,\n                this._propertiesKey\n                    .concat(this._propertiesCore)\n                    .concat(this._propertiesFill)\n                    .concat(this._propertiesSpatial),\n                this._propertiesKey\n                    .concat(this._propertiesUser)])).pipe(\n            map(\n                (value: falcor.JSONEnvelope<IImageByKey<IFullNode>>): { [key: string]: IFullNode } => {\n                    if (!value) {\n                        throw new Error(`Images (${keys.join(\", \")}) could not be found.`);\n                    }\n\n                    return value.json.imageByKey;\n                })),\n            this._pathImageByKey,\n            keys);\n    }\n\n    public imageCloseTo$(lat: number, lon: number): Observable<IFullNode> {\n        let lonLat: string = `${lon}:${lat}`;\n        return this._catchInvalidateGet$(\n            this._wrapModelResponse$<falcor.JSONEnvelope<IImageCloseTo<IFullNode>>>(this._model.get([\n                this._pathImageCloseTo,\n                [lonLat],\n                this._propertiesKey\n                    .concat(this._propertiesCore)\n                    .concat(this._propertiesFill)\n                    .concat(this._propertiesSpatial),\n                this._propertiesKey\n                    .concat(this._propertiesUser)])).pipe(\n            map(\n                (value: falcor.JSONEnvelope<IImageCloseTo<IFullNode>>): IFullNode => {\n                    return value != null ? value.json.imageCloseTo[lonLat] : null;\n                })),\n            this._pathImageCloseTo,\n            [lonLat]);\n    }\n\n    public imagesByH$(hs: string[]): Observable<{ [h: string]: { [index: string]: ICoreNode } }> {\n        return this._catchInvalidateGet$(\n            this._wrapModelResponse$<falcor.JSONEnvelope<IImagesByH<ICoreNode>>>(this._model.get([\n                this._pathImagesByH,\n                hs,\n                { from: 0, to: this._pageCount },\n                this._propertiesKey\n                    .concat(this._propertiesCore)])).pipe(\n            map(\n                (value: falcor.JSONEnvelope<IImagesByH<ICoreNode>>): { [h: string]: { [index: string]: ICoreNode } } => {\n                    if (!value) {\n                        value = { json: { imagesByH: {} } };\n                        for (let h of hs) {\n                            value.json.imagesByH[h] = {};\n                            for (let i: number = 0; i <= this._pageCount; i++) {\n                                value.json.imagesByH[h][i] = null;\n                            }\n                        }\n                    }\n\n                    return value.json.imagesByH;\n                })),\n            this._pathImagesByH,\n            hs);\n    }\n\n    public imageViewAdd$(keys: string[]): Observable<void> {\n        return this._catchInvalidateCall$(\n            this._wrapCallModelResponse$(\n                this._model.call(\n                    [this._pathImageViewAdd],\n                    [keys])),\n            this._pathImageViewAdd,\n            keys);\n    }\n\n    public invalidateImageByKey(keys: string[]): void {\n        this._invalidateGet(this._pathImageByKey, keys);\n    }\n\n    public invalidateImagesByH(hs: string[]): void {\n        this._invalidateGet(this._pathImagesByH, hs);\n    }\n\n    public invalidateSequenceByKey(sKeys: string[]): void {\n        this._invalidateGet(this._pathSequenceByKey, sKeys);\n    }\n\n    public setToken(token?: string): void {\n        this._model.invalidate([]);\n        this._model = null;\n        this._model = this._modelCreator.createModel(this._clientId, token);\n    }\n\n    public sequenceByKey$(sequenceKeys: string[]): Observable<{ [sequenceKey: string]: ISequence }> {\n        return this._catchInvalidateGet$(\n            this._wrapModelResponse$<falcor.JSONEnvelope<ISequenceByKey<ISequence>>>(this._model.get([\n                this._pathSequenceByKey,\n                sequenceKeys,\n                this._propertiesKey\n                    .concat(this._propertiesSequence)])).pipe(\n            map(\n                (value: falcor.JSONEnvelope<ISequenceByKey<ISequence>>): { [sequenceKey: string]: ISequence } => {\n                    if (!value) {\n                        value = { json: { sequenceByKey: {} } };\n                    }\n\n                    for (const sequenceKey of sequenceKeys) {\n                        if (!(sequenceKey in value.json.sequenceByKey)) {\n                            console.warn(`Sequence data missing (${sequenceKey})`);\n\n                            value.json.sequenceByKey[sequenceKey] = { key: sequenceKey, keys: [] };\n                        }\n                    }\n\n                    return value.json.sequenceByKey;\n                })),\n            this._pathSequenceByKey,\n            sequenceKeys);\n    }\n\n    public sequenceViewAdd$(sequenceKeys: string[]): Observable<void> {\n        return this._catchInvalidateCall$(\n            this._wrapCallModelResponse$(\n                this._model.call(\n                    [this._pathSequenceViewAdd],\n                    [sequenceKeys])),\n            this._pathSequenceViewAdd,\n            sequenceKeys);\n    }\n\n    public get clientId(): string {\n        return this._clientId;\n    }\n\n    private _catchInvalidateGet$<TResult>(observable: Observable<TResult>, path: APIPath, paths: string[]): Observable<TResult> {\n        return observable.pipe(\n            catchError(\n                (error: Error): Observable<TResult> => {\n                    this._invalidateGet(path, paths);\n\n                    throw error;\n                }));\n    }\n\n    private _catchInvalidateCall$<TResult>(observable: Observable<TResult>, path: APIPath, paths: string[]): Observable<TResult> {\n        return observable.pipe(\n            catchError(\n                (error: Error): Observable<TResult> => {\n                    this._invalidateCall(path, paths);\n\n                    throw error;\n                }));\n    }\n\n    private _invalidateGet(path: APIPath, paths: string[]): void {\n        this._model.invalidate([path, paths]);\n    }\n\n    private _invalidateCall(path: APIPath, paths: string[]): void {\n        this._model.invalidate([path], [paths]);\n    }\n\n    private _wrapModelResponse$<T>(modelResponse: falcor.ModelResponse<T>): Observable<T> {\n        return Observable\n            .create(\n                (subscriber: Subscriber<T>): void => {\n                    modelResponse\n                        .then(\n                            (value: T): void => {\n                                subscriber.next(value);\n                                subscriber.complete();\n                            },\n                            (error: Error): void => {\n                                subscriber.error(error);\n                            });\n                });\n    }\n\n    private _wrapCallModelResponse$<T>(modelResponse: falcor.ModelResponse<falcor.JSONEnvelope<T>>): Observable<T> {\n        return this._wrapModelResponse$(modelResponse).pipe(\n            map<falcor.JSONEnvelope<T>, T>(\n                (value: falcor.JSONEnvelope<T>): T => {\n                    return;\n                }));\n    }\n}\n\nexport default APIv3;\n",
     "import * as falcor from \"falcor\";\nimport XmlHttpSource 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 XmlHttpSource(Urls.falcorModel(clientId), configuration),\n        });\n    }\n}\n\nexport default ModelCreator;\n",
     "import {combineLatest as observableCombineLatest, Observable, Subscription} from \"rxjs\";\n\nimport {map} from \"rxjs/operators\";\nimport * as vd from \"virtual-dom\";\n\nimport {\n    ComponentService,\n    Component,\n    IComponentConfiguration,\n} from \"../Component\";\nimport {Node} from \"../Graph\";\nimport {\n    IVNodeHash,\n    ISize,\n} from \"../Render\";\nimport {Urls} from \"../Utils\";\nimport {\n    Container,\n    Navigator,\n} from \"../Viewer\";\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 = observableCombineLatest(\n                this._navigator.stateService.currentNode$,\n                this._container.renderService.size$).pipe(\n            map(\n                ([node, size]: [Node, ISize]): IVNodeHash => {\n                    return {\n                        name: this._name,\n                        vnode: this._getAttributionNode(node.username, node.key, node.capturedAt, size.width),\n                    };\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, key: string, capturedAt: number, width: number): vd.VNode {\n        const compact: boolean = width <= 640;\n\n        const mapillaryIcon: vd.VNode = vd.h(\"div.AttributionMapillaryLogo\", []);\n        const mapillaryLink: vd.VNode = vd.h(\n            \"a.AttributionIconContainer\",\n            { href: Urls.explore, target: \"_blank\" },\n            [mapillaryIcon]);\n\n        const imageBy: string = compact ? `${username}` : `image by ${username}`;\n        const imageByContent: vd.VNode = vd.h(\"div.AttributionUsername\", { textContent: imageBy }, []);\n\n        const date: string[] = new Date(capturedAt).toDateString().split(\" \");\n        const formatted: string = (date.length > 3 ?\n            compact ?\n                [date[3]] :\n                [date[1], date[2] + \",\", date[3]] :\n            date).join(\" \");\n\n        const dateContent: vd.VNode = vd.h(\"div.AttributionDate\", { textContent: formatted }, []);\n\n        const imageLink: vd.VNode =\n            vd.h(\n                \"a.AttributionImageContainer\",\n                { href: Urls.exporeImage(key), target: \"_blank\" },\n                [imageByContent, dateContent]);\n\n        const compactClass: string = compact ? \".AttributionCompact\" : \"\";\n\n        return vd.h(\"div.AttributionContainer\" + compactClass, {}, [mapillaryLink, imageLink]);\n    }\n    }\n\nComponentService.register(AttributionComponent);\nexport default AttributionComponent;\n",
     "import * 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 image.\")});\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",
     "import {\n    of as observableOf,\n    combineLatest as observableCombineLatest,\n    merge as observableMerge,\n    concat as observableConcat,\n    empty as observableEmpty,\n    Observable,\n    Scheduler,\n    Subject,\n    Subscription,\n} from \"rxjs\";\n\nimport {\n    takeUntil,\n    share,\n    skip,\n    withLatestFrom,\n    first,\n    map,\n    switchMap,\n    publishReplay,\n    auditTime,\n    distinctUntilChanged,\n    startWith,\n    retry,\n    catchError,\n    filter,\n    publish,\n    debounceTime,\n    take,\n    refCount,\n} from \"rxjs/operators\";\n\nimport * as vd from \"virtual-dom\";\n\nimport {\n    Component,\n    ComponentService,\n    ISequenceConfiguration,\n    SequenceDOMRenderer,\n} from \"../../Component\";\nimport {EdgeDirection} from \"../../Edge\";\nimport {\n    IEdgeStatus,\n    GraphMode,\n    Node,\n    Sequence,\n} from \"../../Graph\";\nimport {\n    ISize,\n    IVNodeHash,\n} from \"../../Render\";\nimport {\n    Container,\n    Navigator,\n} from \"../../Viewer\";\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 SequenceComponent#playingchanged\n     * @type {boolean} Indicates whether the player is playing.\n     */\n    public static playingchanged: string = \"playingchanged\";\n\n    /**\n     * Event fired when the hovered key changes.\n     *\n     * @description Emits the key of the node for the direction\n     * arrow that is being hovered. When the mouse leaves a\n     * direction arrow null is emitted.\n     *\n     * @event SequenceComponent#hoveredkeychanged\n     * @type {string} The hovered key, null if no key is hovered.\n     */\n    public static hoveredkeychanged: string = \"hoveredkeychanged\";\n\n    private _sequenceDOMRenderer: SequenceDOMRenderer;\n    private _scheduler: Scheduler;\n\n    private _hoveredKeySubject$: Subject<string>;\n    private _hoveredKey$: Observable<string>;\n    private _containerWidth$: Subject<number>;\n\n    private _emitHoveredKeySubscription: Subscription;\n    private _renderSubscription: Subscription;\n    private _playingSubscription: Subscription;\n    private _containerWidthSubscription: Subscription;\n    private _hoveredKeySubscription: Subscription;\n    private _setSpeedSubscription: Subscription;\n    private _setDirectionSubscription: Subscription;\n    private _setSequenceGraphModeSubscription: Subscription;\n    private _setSpatialGraphModeSubscription: Subscription;\n    private _sequenceSubscription: Subscription;\n    private _moveSubscription: Subscription;\n    private _cacheSequenceNodesSubscription: Subscription;\n    private _stopSubscription: Subscription;\n\n    constructor(\n        name: string,\n        container: Container,\n        navigator: Navigator,\n        renderer?: SequenceDOMRenderer,\n        scheduler?: Scheduler) {\n\n        super(name, container, navigator);\n\n        this._sequenceDOMRenderer = !!renderer ? renderer : new SequenceDOMRenderer(container);\n        this._scheduler = scheduler;\n\n        this._containerWidth$ = new Subject<number>();\n        this._hoveredKeySubject$ = new Subject<string>();\n\n        this._hoveredKey$ = this._hoveredKeySubject$.pipe(share());\n\n        this._navigator.playService.playing$.pipe(\n            skip(1),\n            withLatestFrom(this._configuration$))\n            .subscribe(\n                ([playing, configuration]: [boolean, ISequenceConfiguration]): void => {\n                    this.fire(SequenceComponent.playingchanged, playing);\n\n                    if (playing === configuration.playing) {\n                        return;\n                    }\n\n                    if (playing) {\n                        this.play();\n                    } else {\n                        this.stop();\n                    }\n                });\n\n        this._navigator.playService.direction$.pipe(\n            skip(1),\n            withLatestFrom(this._configuration$))\n            .subscribe(\n                ([direction, configuration]: [EdgeDirection, ISequenceConfiguration]): void => {\n                    if (direction !== configuration.direction) {\n                        this.setDirection(direction);\n                    }\n                });\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    protected _activate(): void {\n        this._sequenceDOMRenderer.activate();\n\n        const edgeStatus$: Observable<IEdgeStatus> = this._navigator.stateService.currentNode$.pipe(\n            switchMap(\n                (node: Node): Observable<IEdgeStatus> => {\n                    return node.sequenceEdges$;\n                }),\n            publishReplay(1),\n            refCount());\n\n        const sequence$: Observable<Sequence> = this._navigator.stateService.currentNode$.pipe(\n            distinctUntilChanged(\n                undefined,\n                (node: Node): string => {\n                    return node.sequenceKey;\n                }),\n            switchMap(\n                (node: Node): Observable<Sequence> => {\n                    return observableConcat(\n                            observableOf(null),\n                            this._navigator.graphService.cacheSequence$(node.sequenceKey).pipe(\n                                retry(3),\n                                catchError(\n                                    (e: Error): Observable<Sequence> => {\n                                        console.error(\"Failed to cache sequence\", e);\n\n                                        return observableOf(null);\n                                    })));\n                }),\n            startWith(null),\n            publishReplay(1),\n            refCount());\n\n        this._sequenceSubscription = sequence$.subscribe();\n\n        const rendererKey$: Observable<string> = this._sequenceDOMRenderer.index$.pipe(\n            withLatestFrom(sequence$),\n            map(\n                ([index, sequence]: [number, Sequence]): string => {\n                    return sequence != null ? sequence.keys[index] : null;\n                }),\n            filter(\n                (key: string): boolean => {\n                    return !!key;\n                }),\n            distinctUntilChanged(),\n            publish(),\n            refCount());\n\n        this._moveSubscription = observableMerge(\n                rendererKey$.pipe(debounceTime(100, this._scheduler)),\n                rendererKey$.pipe(auditTime(400, this._scheduler))).pipe(\n            distinctUntilChanged(),\n            switchMap(\n                (key: string): Observable<Node> => {\n                    return this._navigator.moveToKey$(key).pipe(\n                        catchError(\n                            (e: Error): Observable<Node> => {\n                                return observableEmpty();\n                            }));\n                }))\n            .subscribe();\n\n        this._setSequenceGraphModeSubscription = this._sequenceDOMRenderer.changingPositionChanged$.pipe(\n            filter(\n                (changing: boolean): boolean => {\n                    return changing;\n                }))\n            .subscribe(\n                (): void => {\n                    this._navigator.graphService.setGraphMode(GraphMode.Sequence);\n                });\n\n        this._setSpatialGraphModeSubscription = this._sequenceDOMRenderer.changingPositionChanged$.pipe(\n            filter(\n                (changing: boolean): boolean => {\n                    return !changing;\n                }))\n            .subscribe(\n                (): void => {\n                    this._navigator.graphService.setGraphMode(GraphMode.Spatial);\n                });\n\n        this._navigator.graphService.graphMode$.pipe(\n            switchMap(\n                (mode: GraphMode): Observable<Node> => {\n                    return mode === GraphMode.Spatial ?\n                        this._navigator.stateService.currentNode$.pipe(\n                            take(2)) :\n                        observableEmpty();\n                }),\n            filter(\n                (node: Node): boolean => {\n                    return !node.spatialEdges.cached;\n                }),\n            switchMap(\n                (node: Node): Observable<Node> => {\n                    return this._navigator.graphService.cacheNode$(node.key).pipe(\n                        catchError(\n                            (e: Error): Observable<Node> => {\n                                return observableEmpty();\n                            }));\n                }))\n            .subscribe();\n\n        this._stopSubscription = this._sequenceDOMRenderer.changingPositionChanged$.pipe(\n            filter(\n                (changing: boolean): boolean => {\n                    return changing;\n                }))\n            .subscribe(\n                (): void => {\n                    this._navigator.playService.stop();\n                });\n\n        this._cacheSequenceNodesSubscription = observableCombineLatest(\n                this._navigator.graphService.graphMode$,\n                this._sequenceDOMRenderer.changingPositionChanged$.pipe(\n                    startWith(false),\n                    distinctUntilChanged())).pipe(\n            withLatestFrom(this._navigator.stateService.currentNode$),\n            switchMap(\n                ([[mode, changing], node]: [[GraphMode, boolean], Node]): Observable<Sequence> => {\n                    return changing && mode === GraphMode.Sequence ?\n                        this._navigator.graphService.cacheSequenceNodes$(node.sequenceKey, node.key).pipe(\n                            retry(3),\n                            catchError(\n                                (error: Error): Observable<Sequence> => {\n                                    console.error(\"Failed to cache sequence nodes.\", error);\n\n                                    return observableEmpty();\n                                })) :\n                        observableEmpty();\n                }))\n            .subscribe();\n\n        const position$: Observable<{ index: number, max: number }> = sequence$.pipe(\n            switchMap(\n                (sequence: Sequence): Observable<{ index: number, max: number }> => {\n                    if (!sequence) {\n                        return observableOf({ index: null, max: null });\n                    }\n\n                    let firstCurrentKey: boolean = true;\n\n                    return this._sequenceDOMRenderer.changingPositionChanged$.pipe(\n                        startWith(false),\n                        distinctUntilChanged(),\n                        switchMap(\n                            (changingPosition: boolean): Observable<string> => {\n                                const skipCount: number = !changingPosition && firstCurrentKey ? 0 : 1;\n                                firstCurrentKey = false;\n\n                                return changingPosition ?\n                                    rendererKey$ :\n                                    this._navigator.stateService.currentNode$.pipe(\n                                        map(\n                                            (node: Node): string => {\n                                                return node.key;\n                                            }),\n                                        distinctUntilChanged(),\n                                        skip(skipCount));\n                            }),\n                        map(\n                            (key: string): { index: number, max: number } => {\n                                const index: number = sequence.keys.indexOf(key);\n\n                                if (index === -1) {\n                                    return { index: null, max: null };\n                                }\n\n                                return { index: index, max: sequence.keys.length - 1 };\n                            }));\n                }));\n\n        this._renderSubscription = observableCombineLatest(\n                edgeStatus$,\n                this._configuration$,\n                this._containerWidth$,\n                this._sequenceDOMRenderer.changed$.pipe(startWith(this._sequenceDOMRenderer)),\n                this._navigator.playService.speed$,\n                position$).pipe(\n            map(\n                (\n                    [edgeStatus, configuration, containerWidth, renderer, speed, position]:\n                    [\n                        IEdgeStatus,\n                        ISequenceConfiguration,\n                        number,\n                        SequenceDOMRenderer,\n                        number,\n                        { index: number, max: number }\n                    ]): IVNodeHash => {\n\n                    const vNode: vd.VNode = this._sequenceDOMRenderer\n                        .render(\n                            edgeStatus,\n                            configuration,\n                            containerWidth,\n                            speed,\n                            position.index,\n                            position.max,\n                            this,\n                            this._navigator);\n\n                    return {name: this._name, vnode: vNode };\n                }))\n            .subscribe(this._container.domRenderer.render$);\n\n        this._setSpeedSubscription = this._sequenceDOMRenderer.speed$\n            .subscribe(\n                (speed: number): void => {\n                    this._navigator.playService.setSpeed(speed);\n                });\n\n        this._setDirectionSubscription = this._configuration$.pipe(\n            map(\n                (configuration: ISequenceConfiguration): EdgeDirection => {\n                    return configuration.direction;\n                }),\n            distinctUntilChanged())\n            .subscribe(\n                (direction: EdgeDirection): void => {\n                    this._navigator.playService.setDirection(direction);\n                });\n\n        this._containerWidthSubscription = observableCombineLatest(\n            this._container.renderService.size$,\n            this._configuration$.pipe(\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                    }))).pipe(\n            map(\n                ([size, configuration]: [ISize, ISequenceConfiguration]): number => {\n                    return this._sequenceDOMRenderer.getContainerWidth(\n                        size,\n                        configuration);\n                }))\n            .subscribe(this._containerWidth$);\n\n        this._playingSubscription = this._configuration$.pipe(\n            map(\n                (configuration: ISequenceConfiguration): boolean => {\n                    return configuration.playing;\n                }),\n            distinctUntilChanged())\n            .subscribe(\n                (playing: boolean) => {\n                    if (playing) {\n                        this._navigator.playService.play();\n                    } else {\n                        this._navigator.playService.stop();\n                    }\n                });\n\n        this._hoveredKeySubscription = this._sequenceDOMRenderer.mouseEnterDirection$.pipe(\n            switchMap(\n                (direction: EdgeDirection): Observable<string> => {\n                    const edgeTo$: Observable<string> = edgeStatus$.pipe(\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._sequenceDOMRenderer.mouseLeaveDirection$));\n\n                    return observableConcat(edgeTo$, observableOf<string>(null));\n                }),\n            distinctUntilChanged())\n            .subscribe(this._hoveredKeySubject$);\n\n        this._emitHoveredKeySubscription = this._hoveredKey$\n            .subscribe(\n                (key: string): void => {\n                    this.fire(SequenceComponent.hoveredkeychanged, key);\n                });\n    }\n\n    protected _deactivate(): void {\n        this._emitHoveredKeySubscription.unsubscribe();\n        this._renderSubscription.unsubscribe();\n        this._playingSubscription.unsubscribe();\n        this._containerWidthSubscription.unsubscribe();\n        this._hoveredKeySubscription.unsubscribe();\n        this._setSpeedSubscription.unsubscribe();\n        this._setDirectionSubscription.unsubscribe();\n        this._setSequenceGraphModeSubscription.unsubscribe();\n        this._setSpatialGraphModeSubscription.unsubscribe();\n        this._sequenceSubscription.unsubscribe();\n        this._moveSubscription.unsubscribe();\n        this._cacheSequenceNodesSubscription.unsubscribe();\n        this._stopSubscription.unsubscribe();\n\n        this._sequenceDOMRenderer.deactivate();\n    }\n\n    protected _getDefaultConfiguration(): ISequenceConfiguration {\n        return {\n            direction: EdgeDirection.Next,\n            maxWidth: 108,\n            minWidth: 70,\n            playing: false,\n            visible: true,\n        };\n    }\n}\n\nComponentService.register(SequenceComponent);\nexport default SequenceComponent;\n",
     "import {merge as observableMerge, Observable, Subject, Subscription} from \"rxjs\";\n\nimport {filter} from \"rxjs/operators\";\nimport * as vd from \"virtual-dom\";\n\nimport {\n    SequenceMode,\n    ISequenceConfiguration,\n    SequenceComponent,\n} from \"../../Component\";\nimport {EdgeDirection} from \"../../Edge\";\nimport {AbortMapillaryError} from \"../../Error\";\nimport {\n    IEdgeStatus,\n    Node,\n} from \"../../Graph\";\nimport {ISize} from \"../../Render\";\nimport {\n    Container,\n    Navigator,\n} from \"../../Viewer\";\n\nexport class SequenceDOMRenderer {\n    private _container: Container;\n\n    private _minThresholdWidth: number;\n    private _maxThresholdWidth: number;\n    private _minThresholdHeight: number;\n    private _maxThresholdHeight: number;\n    private _stepperDefaultWidth: number;\n    private _controlsDefaultWidth: number;\n    private _defaultHeight: number;\n    private _expandControls: boolean;\n    private _mode: SequenceMode;\n    private _speed: number;\n    private _changingSpeed: boolean;\n    private _index: number;\n    private _changingPosition: boolean;\n\n    private _mouseEnterDirection$: Subject<EdgeDirection>;\n    private _mouseLeaveDirection$: Subject<EdgeDirection>;\n    private _notifyChanged$: Subject<SequenceDOMRenderer>;\n    private _notifyChangingPositionChanged$: Subject<boolean>;\n    private _notifySpeedChanged$: Subject<number>;\n    private _notifyIndexChanged$: Subject<number>;\n\n    private _changingSubscription: Subscription;\n\n    constructor(container: Container) {\n        this._container = container;\n\n        this._minThresholdWidth = 320;\n        this._maxThresholdWidth = 1480;\n        this._minThresholdHeight = 240;\n        this._maxThresholdHeight = 820;\n        this._stepperDefaultWidth = 108;\n        this._controlsDefaultWidth = 88;\n\n        this._defaultHeight = 30;\n        this._expandControls = false;\n        this._mode = SequenceMode.Default;\n        this._speed = 0.5;\n        this._changingSpeed = false;\n        this._index = null;\n        this._changingPosition = false;\n\n        this._mouseEnterDirection$ = new Subject<EdgeDirection>();\n        this._mouseLeaveDirection$ = new Subject<EdgeDirection>();\n        this._notifyChanged$ = new Subject<SequenceDOMRenderer>();\n        this._notifyChangingPositionChanged$ = new Subject<boolean>();\n        this._notifySpeedChanged$ = new Subject<number>();\n        this._notifyIndexChanged$ = new Subject<number>();\n    }\n\n    public get changed$(): Observable<SequenceDOMRenderer> {\n        return this._notifyChanged$;\n    }\n\n    public get changingPositionChanged$(): Observable<boolean> {\n        return this._notifyChangingPositionChanged$;\n    }\n\n    public get speed$(): Observable<number> {\n        return this._notifySpeedChanged$;\n    }\n\n    public get index$(): Observable<number> {\n        return this._notifyIndexChanged$;\n    }\n\n    public get mouseEnterDirection$(): Observable<EdgeDirection> {\n        return this._mouseEnterDirection$;\n    }\n\n    public get mouseLeaveDirection$(): Observable<EdgeDirection> {\n        return this._mouseLeaveDirection$;\n    }\n\n    public activate(): void {\n        if (!!this._changingSubscription) {\n            return;\n        }\n\n        this._changingSubscription = observableMerge(\n                this._container.mouseService.documentMouseUp$,\n                this._container.touchService.touchEnd$.pipe(\n                    filter(\n                        (touchEvent: TouchEvent): boolean => {\n                            return touchEvent.touches.length === 0;\n                        })))\n            .subscribe(\n                (event: Event): void => {\n                    if (this._changingSpeed) {\n                        this._changingSpeed = false;\n                    }\n\n                    if (this._changingPosition) {\n                        this._setChangingPosition(false);\n                    }\n                });\n    }\n\n    public deactivate(): void {\n        if (!this._changingSubscription) {\n            return;\n        }\n\n        this._changingSpeed = false;\n        this._changingPosition = false;\n        this._expandControls = false;\n        this._mode = SequenceMode.Default;\n\n        this._changingSubscription.unsubscribe();\n        this._changingSubscription = null;\n    }\n\n    public render(\n        edgeStatus: IEdgeStatus,\n        configuration: ISequenceConfiguration,\n        containerWidth: number,\n        speed: number,\n        index: number,\n        max: number,\n        component: SequenceComponent,\n        navigator: Navigator): vd.VNode {\n\n        if (configuration.visible === false) {\n            return vd.h(\"div.SequenceContainer\", {}, []);\n        }\n\n        const stepper: vd.VNode =\n            this._createStepper(edgeStatus, configuration, containerWidth, component, navigator);\n        const controls: vd.VNode = this._createSequenceControls(containerWidth);\n        const playback: vd.VNode = this._createPlaybackControls(containerWidth, speed, component, configuration);\n        const timeline: vd.VNode = this._createTimelineControls(containerWidth, index, max);\n\n        return vd.h(\"div.SequenceContainer\", [stepper, controls, playback, timeline]);\n    }\n\n    public getContainerWidth(size: ISize, configuration: ISequenceConfiguration): number {\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            (size.width - this._minThresholdWidth) / (this._maxThresholdWidth - this._minThresholdWidth);\n        let relativeHeight: number =\n            (size.height - 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 _createPositionInput(index: number, max: number): vd.VNode {\n        this._index = index;\n\n        const onPosition: (e: Event) => void = (e: Event): void => {\n            this._index = Number((<HTMLInputElement>e.target).value);\n            this._notifyIndexChanged$.next(this._index);\n        };\n\n        const boundingRect: ClientRect = this._container.domContainer.getBoundingClientRect();\n        const width: number = Math.max(276, Math.min(410, 5 + 0.8 * boundingRect.width)) - 65;\n\n        const onStart: (e: Event) => void = (e: Event): void => {\n            e.stopPropagation();\n            this._setChangingPosition(true);\n        };\n\n        const onMove: (e: Event) => void = (e: Event): void => {\n            if (this._changingPosition === true) {\n                e.stopPropagation();\n            }\n        };\n\n        const onKeyDown: (e: KeyboardEvent) => void = (e: KeyboardEvent): void => {\n            if (e.key === \"ArrowDown\" || e.key === \"ArrowLeft\" ||\n                e.key === \"ArrowRight\" || e.key === \"ArrowUp\") {\n                e.preventDefault();\n            }\n        };\n\n        const positionInputProperties: vd.createProperties = {\n            max: max != null ? max : 1,\n            min: 0,\n            onchange: onPosition,\n            oninput: onPosition,\n            onkeydown: onKeyDown,\n            onmousedown: onStart,\n            onmousemove: onMove,\n            ontouchmove: onMove,\n            ontouchstart: onStart,\n            style: {\n                width: `${width}px`,\n            },\n            type: \"range\",\n            value: index != null ? index : 0,\n        };\n\n        const disabled: boolean = index == null || max == null || max <= 1;\n\n        if (disabled) {\n            positionInputProperties.disabled = \"true\";\n        }\n\n        const positionInput: vd.VNode = vd.h(\"input.SequencePosition\", positionInputProperties, []);\n\n        const positionContainerClass: string = disabled ? \".SequencePositionContainerDisabled\" : \".SequencePositionContainer\";\n\n        return vd.h(\"div\" + positionContainerClass, [positionInput]);\n    }\n\n    private _createSpeedInput(speed: number): vd.VNode {\n        this._speed = speed;\n\n        const onSpeed: (e: Event) => void = (e: Event): void => {\n            this._speed = Number((<HTMLInputElement>e.target).value) / 1000;\n            this._notifySpeedChanged$.next(this._speed);\n        };\n\n        const boundingRect: ClientRect = this._container.domContainer.getBoundingClientRect();\n        const width: number = Math.max(276, Math.min(410, 5 + 0.8 * boundingRect.width)) - 160;\n\n        const onStart: (e: Event) => void = (e: Event): void => {\n            this._changingSpeed = true;\n            e.stopPropagation();\n        };\n\n        const onMove: (e: Event) => void = (e: Event): void => {\n            if (this._changingSpeed === true) {\n                e.stopPropagation();\n            }\n        };\n\n        const onKeyDown: (e: KeyboardEvent) => void = (e: KeyboardEvent): void => {\n            if (e.key === \"ArrowDown\" || e.key === \"ArrowLeft\" ||\n                e.key === \"ArrowRight\" || e.key === \"ArrowUp\") {\n                e.preventDefault();\n            }\n        };\n\n        const speedInput: vd.VNode = vd.h(\n            \"input.SequenceSpeed\",\n            {\n                max: 1000,\n                min: 0,\n                onchange: onSpeed,\n                oninput: onSpeed,\n                onkeydown: onKeyDown,\n                onmousedown: onStart,\n                onmousemove: onMove,\n                ontouchmove: onMove,\n                ontouchstart: onStart,\n                style: {\n                    width: `${width}px`,\n                },\n                type: \"range\",\n                value: 1000 * speed,\n            },\n            []);\n\n        return vd.h(\"div.SequenceSpeedContainer\", [speedInput]);\n    }\n\n    private _createPlaybackControls(\n        containerWidth: number,\n        speed: number,\n        component: SequenceComponent,\n        configuration: ISequenceConfiguration): vd.VNode {\n\n        if (this._mode !== SequenceMode.Playback) {\n            return vd.h(\"div.SequencePlayback\", []);\n        }\n\n        const switchIcon: vd.VNode = vd.h(\"div.SequenceSwitchIcon.SequenceIconVisible\", []);\n        const direction: EdgeDirection = configuration.direction === EdgeDirection.Next ?\n            EdgeDirection.Prev : EdgeDirection.Next;\n\n        const playing: boolean = configuration.playing;\n        const switchButtonProperties: vd.createProperties = {\n            onclick: (): void => {\n                if (!playing) {\n                    component.setDirection(direction);\n                }\n            },\n        };\n        const switchButtonClassName: string = configuration.playing ? \".SequenceSwitchButtonDisabled\" : \".SequenceSwitchButton\";\n        const switchButton: vd.VNode = vd.h(\"div\" + switchButtonClassName, switchButtonProperties, [switchIcon]);\n        const slowIcon: vd.VNode = vd.h(\"div.SequenceSlowIcon.SequenceIconVisible\", []);\n        const slowContainer: vd.VNode = vd.h(\"div.SequenceSlowContainer\", [slowIcon]);\n        const fastIcon: vd.VNode = vd.h(\"div.SequenceFastIcon.SequenceIconVisible\", []);\n        const fastContainer: vd.VNode = vd.h(\"div.SequenceFastContainer\", [fastIcon]);\n        const closeIcon: vd.VNode = vd.h(\"div.SequenceCloseIcon.SequenceIconVisible\", []);\n        const closeButtonProperties: vd.createProperties = {\n            onclick: (): void => {\n                this._mode = SequenceMode.Default;\n                this._notifyChanged$.next(this);\n            },\n        };\n        const closeButton: vd.VNode = vd.h(\"div.SequenceCloseButton\", closeButtonProperties, [closeIcon]);\n        const speedInput: vd.VNode = this._createSpeedInput(speed);\n\n        const playbackChildren: vd.VNode[] = [switchButton, slowContainer, speedInput, fastContainer, closeButton];\n\n        const top: number = Math.round(containerWidth / this._stepperDefaultWidth * this._defaultHeight + 10);\n        const playbackProperties: vd.createProperties = { style: { top: `${top}px` } };\n\n        return vd.h(\"div.SequencePlayback\", playbackProperties, playbackChildren);\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 = { onclick: onclick };\n\n        let iconClass: string = configuration.playing ?\n            \"Stop\" :\n            canPlay ? \"Play\" : \"PlayDisabled\";\n\n        let iconProperties: vd.createProperties = { className: iconClass };\n        if (configuration.direction === EdgeDirection.Prev) {\n            iconProperties.style = {\n                transform: \"rotate(180deg) translate(50%, 50%)\",\n            };\n        }\n\n        let icon: vd.VNode = vd.h(\"div.SequenceComponentIcon\", iconProperties, []);\n\n        let buttonClass: string = canPlay ? \"SequencePlay\" : \"SequencePlayDisabled\";\n\n        return vd.h(\"div.\" + buttonClass, buttonProperties, [icon]);\n    }\n\n    private _createSequenceControls(containerWidth: number): vd.VNode {\n        const borderRadius: number = Math.round(8 / this._stepperDefaultWidth * containerWidth);\n        const expanderProperties: vd.createProperties = {\n            onclick: (): void => {\n                this._expandControls = !this._expandControls;\n                this._mode = SequenceMode.Default;\n                this._notifyChanged$.next(this);\n            },\n            style: {\n                \"border-bottom-right-radius\": `${borderRadius}px`,\n                \"border-top-right-radius\": `${borderRadius}px`,\n            },\n        };\n        const expanderBar: vd.VNode = vd.h(\"div.SequenceExpanderBar\", []);\n        const expander: vd.VNode = vd.h(\"div.SequenceExpanderButton\", expanderProperties, [expanderBar]);\n\n        const fastIconClassName: string = this._mode === SequenceMode.Playback ?\n            \".SequenceFastIconGrey.SequenceIconVisible\" : \".SequenceFastIcon\";\n        const fastIcon: vd.VNode = vd.h(\"div\" + fastIconClassName, []);\n        const playbackProperties: vd.createProperties = {\n            onclick: (): void => {\n                this._mode = this._mode === SequenceMode.Playback ?\n                    SequenceMode.Default :\n                    SequenceMode.Playback;\n                this._notifyChanged$.next(this);\n            },\n        };\n\n        const playback: vd.VNode = vd.h(\"div.SequencePlaybackButton\", playbackProperties, [fastIcon]);\n\n        const timelineIconClassName: string = this._mode === SequenceMode.Timeline ?\n            \".SequenceTimelineIconGrey.SequenceIconVisible\" : \".SequenceTimelineIcon\";\n        const timelineIcon: vd.VNode = vd.h(\"div\" + timelineIconClassName, []);\n        const timelineProperties: vd.createProperties = {\n            onclick: (): void => {\n                this._mode = this._mode === SequenceMode.Timeline ?\n                    SequenceMode.Default :\n                    SequenceMode.Timeline;\n                this._notifyChanged$.next(this);\n            },\n        };\n\n        const timeline: vd.VNode = vd.h(\"div.SequenceTimelineButton\", timelineProperties, [timelineIcon]);\n\n        const properties: vd.createProperties = {\n            style: {\n                height: (this._defaultHeight / this._stepperDefaultWidth * containerWidth) + \"px\",\n                transform: `translate(${containerWidth / 2 + 2}px, 0)`,\n                width: (this._controlsDefaultWidth / this._stepperDefaultWidth * containerWidth) + \"px\",\n            },\n        };\n\n        const className: string = \".SequenceControls\" +\n            (this._expandControls ? \".SequenceControlsExpanded\" : \"\");\n\n        return vd.h(\"div\" + className, properties, [playback, timeline, expander]);\n    }\n\n    private _createSequenceArrows(\n        nextKey: string,\n        prevKey: string,\n        containerWidth: number,\n        configuration: ISequenceConfiguration,\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                            undefined,\n                            (error: Error): void => {\n                                if (!(error instanceof AbortMapillaryError)) {\n                                    console.error(error);\n                                }\n                            });\n                } :\n                null,\n            onmouseenter: (e: MouseEvent): void => { this._mouseEnterDirection$.next(EdgeDirection.Next); },\n            onmouseleave: (e: MouseEvent): void => { this._mouseLeaveDirection$.next(EdgeDirection.Next); },\n        };\n\n        const borderRadius: number = Math.round(8 / this._stepperDefaultWidth * containerWidth);\n        let prevProperties: vd.createProperties = {\n            onclick: prevKey != null ?\n                (e: Event): void => {\n                    navigator.moveDir$(EdgeDirection.Prev)\n                        .subscribe(\n                            undefined,\n                            (error: Error): void => {\n                                if (!(error instanceof AbortMapillaryError)) {\n                                    console.error(error);\n                                }\n                            });\n                } :\n                null,\n            onmouseenter: (e: MouseEvent): void => { this._mouseEnterDirection$.next(EdgeDirection.Prev); },\n            onmouseleave: (e: MouseEvent): void => { this._mouseLeaveDirection$.next(EdgeDirection.Prev); },\n            style: {\n                \"border-bottom-left-radius\": `${borderRadius}px`,\n                \"border-top-left-radius\": `${borderRadius}px`,\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.\" + prevClass, prevProperties, [prevIcon]),\n            vd.h(\"div.\" + nextClass, nextProperties, [nextIcon]),\n        ];\n    }\n\n    private _createStepper(\n        edgeStatus: IEdgeStatus,\n        configuration: ISequenceConfiguration,\n        containerWidth: number,\n        component: SequenceComponent,\n        navigator: Navigator,\n        ): vd.VNode {\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        const playingButton: vd.VNode = this._createPlayingButton(nextKey, prevKey, configuration, component);\n        const buttons: vd.VNode[] = this._createSequenceArrows(nextKey, prevKey, containerWidth, configuration, navigator);\n        buttons.splice(1, 0, playingButton);\n\n        const containerProperties: vd.createProperties = {\n            oncontextmenu: (event: MouseEvent): void => { event.preventDefault(); },\n            style: {\n                height: (this._defaultHeight / this._stepperDefaultWidth * containerWidth) + \"px\",\n                width: containerWidth + \"px\",\n            },\n        };\n\n        return vd.h(\"div.SequenceStepper\", containerProperties, buttons);\n    }\n\n    private _createTimelineControls(containerWidth: number, index: number, max: number): vd.VNode {\n        if (this._mode !== SequenceMode.Timeline) {\n            return vd.h(\"div.SequenceTimeline\", []);\n        }\n\n        const positionInput: vd.VNode = this._createPositionInput(index, max);\n\n        const closeIcon: vd.VNode = vd.h(\"div.SequenceCloseIcon.SequenceIconVisible\", []);\n        const closeButtonProperties: vd.createProperties = {\n            onclick: (): void => {\n                this._mode = SequenceMode.Default;\n                this._notifyChanged$.next(this);\n            },\n        };\n\n        const closeButton: vd.VNode = vd.h(\"div.SequenceCloseButton\", closeButtonProperties, [closeIcon]);\n\n        const top: number = Math.round(containerWidth / this._stepperDefaultWidth * this._defaultHeight + 10);\n        const playbackProperties: vd.createProperties = { style: { top: `${top}px` } };\n\n        return vd.h(\"div.SequenceTimeline\", playbackProperties, [positionInput, closeButton]);\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    private _setChangingPosition(value: boolean): void {\n        this._changingPosition = value;\n        this._notifyChangingPositionChanged$.next(value);\n    }\n}\n\nexport default SequenceDOMRenderer;\n",
     "export enum SequenceMode {\n    Default,\n    Playback,\n    Timeline,\n}\n\nexport default SequenceMode;\n",
-    "import * as fs from \"fs\";\nimport * as path from \"path\";\n\nimport {IShader} from \"../../Component\";\n\nexport class Shaders {\n    public static equirectangular: IShader = {\n        fragment: fs.readFileSync(path.join(__dirname, \"./equirectangular.fragment.glsl\"), \"utf8\"),\n        vertex: fs.readFileSync(path.join(__dirname, \"./equirectangular.vertex.glsl\"), \"utf8\"),\n    };\n\n    public static equirectangularCurtain: IShader = {\n        fragment: fs.readFileSync(path.join(__dirname, \"./equirectangular_curtain.fragment.glsl\"), \"utf8\"),\n        vertex: fs.readFileSync(path.join(__dirname, \"./equirectangular_curtain.vertex.glsl\"), \"utf8\"),\n    };\n\n    public static perspective: IShader = {\n        fragment: fs.readFileSync(path.join(__dirname, \"./perspective.fragment.glsl\"), \"utf8\"),\n        vertex: fs.readFileSync(path.join(__dirname, \"./perspective.vertex.glsl\"), \"utf8\"),\n    };\n\n    public static perspectiveCurtain: IShader = {\n        fragment: fs.readFileSync(path.join(__dirname, \"./perspective_curtain.fragment.glsl\"), \"utf8\"),\n        vertex: fs.readFileSync(path.join(__dirname, \"./perspective_curtain.vertex.glsl\"), \"utf8\"),\n    };\n\n    public static perspectiveDistorted: IShader = {\n        fragment: fs.readFileSync(path.join(__dirname, \"./perspective_distorted.fragment.glsl\"), \"utf8\"),\n        vertex: fs.readFileSync(path.join(__dirname, \"./perspective_distorted.vertex.glsl\"), \"utf8\"),\n    };\n\n    public static perspectiveDistortedCurtain: IShader = {\n        fragment: fs.readFileSync(path.join(__dirname, \"./perspective_distorted_curtain.fragment.glsl\"), \"utf8\"),\n        vertex: fs.readFileSync(path.join(__dirname, \"./perspective_distorted_curtain.vertex.glsl\"), \"utf8\"),\n    };\n}\n",
+    "import * as fs from \"fs\";\nimport * as path from \"path\";\n\nimport {IShader} from \"../../Component\";\n\nexport class Shaders {\n    public static equirectangular: IShader = {\n        fragment: fs.readFileSync(path.join(__dirname, \"./equirectangular.fragment.glsl\"), \"utf8\"),\n        vertex: fs.readFileSync(path.join(__dirname, \"./equirectangular.vertex.glsl\"), \"utf8\"),\n    };\n\n    public static equirectangularCurtain: IShader = {\n        fragment: fs.readFileSync(path.join(__dirname, \"./equirectangular_curtain.fragment.glsl\"), \"utf8\"),\n        vertex: fs.readFileSync(path.join(__dirname, \"./equirectangular_curtain.vertex.glsl\"), \"utf8\"),\n    };\n\n    public static perspective: IShader = {\n        fragment: fs.readFileSync(path.join(__dirname, \"./perspective.fragment.glsl\"), \"utf8\"),\n        vertex: fs.readFileSync(path.join(__dirname, \"./perspective.vertex.glsl\"), \"utf8\"),\n    };\n\n    public static perspectiveCurtain: IShader = {\n        fragment: fs.readFileSync(path.join(__dirname, \"./perspective_curtain.fragment.glsl\"), \"utf8\"),\n        vertex: fs.readFileSync(path.join(__dirname, \"./perspective_curtain.vertex.glsl\"), \"utf8\"),\n    };\n\n    public static fisheye: IShader = {\n        fragment: fs.readFileSync(path.join(__dirname, \"./fisheye.fragment.glsl\"), \"utf8\"),\n        vertex: fs.readFileSync(path.join(__dirname, \"./fisheye.vertex.glsl\"), \"utf8\"),\n    };\n\n    public static fisheyeCurtain: IShader = {\n        fragment: fs.readFileSync(path.join(__dirname, \"./fisheye_curtain.fragment.glsl\"), \"utf8\"),\n        vertex: fs.readFileSync(path.join(__dirname, \"./fisheye_curtain.vertex.glsl\"), \"utf8\"),\n    };\n\n    public static perspectiveDistorted: IShader = {\n        fragment: fs.readFileSync(path.join(__dirname, \"./perspective_distorted.fragment.glsl\"), \"utf8\"),\n        vertex: fs.readFileSync(path.join(__dirname, \"./perspective_distorted.vertex.glsl\"), \"utf8\"),\n    };\n\n    public static perspectiveDistortedCurtain: IShader = {\n        fragment: fs.readFileSync(path.join(__dirname, \"./perspective_distorted_curtain.fragment.glsl\"), \"utf8\"),\n        vertex: fs.readFileSync(path.join(__dirname, \"./perspective_distorted_curtain.vertex.glsl\"), \"utf8\"),\n    };\n}\n",
     "import {\n    concat as observableConcat,\n    of as observableOf,\n    zip as observableZip,\n    combineLatest as observableCombineLatest,\n    empty as observableEmpty,\n    Observable,\n    Subscription,\n    Subject,\n} from \"rxjs\";\n\nimport {\n    publishReplay,\n    pairwise,\n    catchError,\n    takeUntil,\n    publish,\n    skipWhile,\n    scan,\n    filter,\n    debounceTime,\n    startWith,\n    map,\n    switchMap,\n    withLatestFrom,\n    refCount,\n    first,\n    distinctUntilChanged,\n} from \"rxjs/operators\";\n\nimport * as THREE from \"three\";\n\nimport {\n    ISliderNodes,\n    ISliderCombination,\n    IGLRendererOperation,\n    PositionLookat,\n} from \"./interfaces/interfaces\";\n\nimport {\n    Component,\n    ComponentService,\n    ISliderConfiguration,\n    ISliderKeys,\n    SliderDOMRenderer,\n    SliderGLRenderer,\n    SliderMode,\n} from \"../../Component\";\nimport {\n    Spatial,\n    Transform,\n    ViewportCoords,\n} from \"../../Geo\";\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    GLRenderStage,\n    IGLRenderHash,\n    ISize,\n    IVNodeHash,\n    RenderCamera,\n} from \"../../Render\";\nimport {\n    IBoundingBox,\n    ImageTileLoader,\n    ImageTileStore,\n    IRegionOfInterest,\n    RegionOfInterestCalculator,\n    TextureProvider,\n} from \"../../Tiles\";\nimport {\n    Settings,\n    Urls,\n} from \"../../Utils\";\n\n/**\n * @class SliderComponent\n *\n * @classdesc Component for comparing pairs of images. Renders\n * a slider for adjusting the curtain of the first image.\n *\n * Deactivate the sequence, direction and image plane\n * components when activating the slider component to avoid\n * interfering UI elements.\n *\n * To retrive and use the marker component\n *\n * @example\n * ```\n * var viewer = new Mapillary.Viewer(\n *     \"<element-id>\",\n *     \"<client-id>\",\n *     \"<my key>\");\n *\n * viewer.deactivateComponent(\"imagePlane\");\n * viewer.deactivateComponent(\"direction\");\n * viewer.deactivateComponent(\"sequence\");\n *\n * viewer.activateComponent(\"slider\");\n *\n * var sliderComponent = viewer.getComponent(\"marker\");\n * ```\n */\nexport class SliderComponent extends Component<ISliderConfiguration> {\n    public static componentName: string = \"slider\";\n\n    private _viewportCoords: ViewportCoords;\n    private _domRenderer: SliderDOMRenderer;\n    private _imageTileLoader: ImageTileLoader;\n    private _roiCalculator: RegionOfInterestCalculator;\n    private _spatial: Spatial;\n\n    private _glRendererOperation$: Subject<IGLRendererOperation>;\n    private _glRenderer$: Observable<SliderGLRenderer>;\n    private _glRendererCreator$: Subject<void>;\n    private _glRendererDisposer$: Subject<void>;\n\n    private _setKeysSubscription: Subscription;\n\n    private _modeSubcription: Subscription;\n    private _stateSubscription: Subscription;\n    private _glRenderSubscription: Subscription;\n    private _domRenderSubscription: Subscription;\n    private _moveSubscription: Subscription;\n    private _updateCurtainSubscription: Subscription;\n    private _waitSubscription: Subscription;\n\n    private _textureProviderSubscription: Subscription;\n    private _setTextureProviderSubscription: Subscription;\n    private _setTileSizeSubscription: Subscription;\n    private _abortTextureProviderSubscription: Subscription;\n    private _setRegionOfInterestSubscription: Subscription;\n    private _hasTextureSubscription: Subscription;\n    private _updateBackgroundSubscription: Subscription;\n    private _updateTextureImageSubscription: Subscription;\n\n    private _textureProviderSubscriptionPrev: Subscription;\n    private _setTextureProviderSubscriptionPrev: Subscription;\n    private _setTileSizeSubscriptionPrev: Subscription;\n    private _abortTextureProviderSubscriptionPrev: Subscription;\n    private _setRegionOfInterestSubscriptionPrev: Subscription;\n    private _hasTextureSubscriptionPrev: Subscription;\n    private _updateBackgroundSubscriptionPrev: Subscription;\n    private _updateTextureImageSubscriptionPrev: Subscription;\n\n    /** @ignore */\n    constructor (name: string, container: Container, navigator: Navigator, viewportCoords?: ViewportCoords) {\n        super(name, container, navigator);\n\n        this._viewportCoords = !!viewportCoords ? viewportCoords : new ViewportCoords();\n        this._domRenderer = new SliderDOMRenderer(container);\n        this._imageTileLoader = new ImageTileLoader(Urls.tileScheme, Urls.tileDomain, Urls.origin);\n        this._roiCalculator = new RegionOfInterestCalculator();\n        this._spatial = new Spatial();\n\n        this._glRendererOperation$ = new Subject<IGLRendererOperation>();\n        this._glRendererCreator$ = new Subject<void>();\n        this._glRendererDisposer$ = new Subject<void>();\n\n        this._glRenderer$ = this._glRendererOperation$.pipe(\n            scan(\n                (glRenderer: SliderGLRenderer, operation: IGLRendererOperation): SliderGLRenderer => {\n                    return operation(glRenderer);\n                },\n                null),\n            filter(\n                (glRenderer: SliderGLRenderer): boolean => {\n                    return glRenderer != null;\n                }),\n            distinctUntilChanged(\n                undefined,\n                (glRenderer: SliderGLRenderer): number => {\n                    return glRenderer.frameId;\n                }));\n\n        this._glRendererCreator$.pipe(\n            map(\n                (): IGLRendererOperation => {\n                    return (glRenderer: SliderGLRenderer): SliderGLRenderer => {\n                        if (glRenderer != null) {\n                            throw new Error(\"Multiple slider states can not be created at the same time\");\n                        }\n\n                        return new SliderGLRenderer();\n                    };\n                }))\n            .subscribe(this._glRendererOperation$);\n\n        this._glRendererDisposer$.pipe(\n            map(\n                (): IGLRendererOperation => {\n                    return (glRenderer: SliderGLRenderer): SliderGLRenderer => {\n                        glRenderer.dispose();\n\n                        return null;\n                    };\n                }))\n            .subscribe(this._glRendererOperation$);\n    }\n\n    /**\n     * Set the initial position.\n     *\n     * @description Configures the intial position of the slider.\n     * The inital position value will be used when the component\n     * 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 image keys.\n     *\n     * @description Configures the component to show the image\n     * planes for the supplied image keys.\n     *\n     * @param {ISliderKeys} keys - Slider keys object specifying\n     * 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 slider mode.\n     *\n     * @description Configures the mode for transitions between\n     * image pairs.\n     *\n     * @param {SliderMode} mode - Slider mode to be set.\n     */\n    public setSliderMode(mode: SliderMode): void {\n        this.configure({ mode: mode });\n    }\n\n    /**\n     * Set the value controlling if the slider is visible.\n     *\n     * @param {boolean} sliderVisible - Value indicating if\n     * 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        this._modeSubcription = this._domRenderer.mode$\n            .subscribe(\n                (mode: SliderMode): void => {\n                    this.setSliderMode(mode);\n                });\n\n        this._glRenderSubscription = this._glRenderer$.pipe(\n            map(\n                (glRenderer: SliderGLRenderer): IGLRenderHash => {\n                    let renderHash: IGLRenderHash = {\n                        name: this._name,\n                        render: {\n                            frameId: glRenderer.frameId,\n                            needsRender: glRenderer.needsRender,\n                            render: glRenderer.render.bind(glRenderer),\n                            stage: GLRenderStage.Background,\n                        },\n                    };\n\n                    return renderHash;\n                }))\n            .subscribe(this._container.glRenderer.render$);\n\n        const position$: Observable<number> = observableConcat(\n            this.configuration$.pipe(\n                map(\n                    (configuration: ISliderConfiguration): number => {\n                        return configuration.initialPosition != null ?\n                            configuration.initialPosition : 1;\n                    }),\n                first()),\n            this._domRenderer.position$);\n\n        const mode$: Observable<SliderMode> = this.configuration$.pipe(\n            map(\n                (configuration: ISliderConfiguration): SliderMode => {\n                    return configuration.mode;\n                }),\n            distinctUntilChanged());\n\n        const motionless$: Observable<boolean> = this._navigator.stateService.currentState$.pipe(\n            map(\n                (frame: IFrame): boolean => {\n                    return frame.state.motionless;\n                }),\n            distinctUntilChanged());\n\n        const fullPano$: Observable<boolean> = this._navigator.stateService.currentState$.pipe(\n            map(\n                (frame: IFrame): boolean => {\n                    return frame.state.currentNode.fullPano;\n                }),\n            distinctUntilChanged());\n\n        const sliderVisible$: Observable<boolean> = observableCombineLatest(\n                this._configuration$.pipe(\n                    map(\n                        (configuration: ISliderConfiguration): boolean => {\n                            return configuration.sliderVisible;\n                        })),\n                this._navigator.stateService.currentState$.pipe(\n                    map(\n                        (frame: IFrame): boolean => {\n                            return !(frame.state.currentNode == null ||\n                                frame.state.previousNode == null ||\n                                (frame.state.currentNode.pano && !frame.state.currentNode.fullPano) ||\n                                (frame.state.previousNode.pano && !frame.state.previousNode.fullPano) ||\n                                (frame.state.currentNode.fullPano && !frame.state.previousNode.fullPano));\n                        }),\n                    distinctUntilChanged())).pipe(\n            map(\n                ([sliderVisible, enabledState]: [boolean, boolean]): boolean => {\n                    return sliderVisible && enabledState;\n                }),\n            distinctUntilChanged());\n\n        this._waitSubscription = observableCombineLatest(\n                mode$,\n                motionless$,\n                fullPano$,\n                sliderVisible$).pipe(\n            withLatestFrom(this._navigator.stateService.state$))\n            .subscribe(\n                ([[mode, motionless, fullPano, sliderVisible], state]: [[SliderMode, boolean, boolean, boolean], State]): void => {\n                    const interactive: boolean = sliderVisible &&\n                        (motionless || mode === SliderMode.Stationary || fullPano);\n\n                    if (interactive && state !== State.WaitingInteractively) {\n                        this._navigator.stateService.waitInteractively();\n                    } else if (!interactive && state !== State.Waiting) {\n                        this._navigator.stateService.wait();\n                    }\n                });\n\n        this._moveSubscription = observableCombineLatest(\n                position$,\n                mode$,\n                motionless$,\n                fullPano$,\n                sliderVisible$)\n            .subscribe(\n                ([position, mode, motionless, fullPano, sliderVisible]: [number, SliderMode, boolean, boolean, boolean]): void => {\n                    if (motionless || mode === SliderMode.Stationary || fullPano) {\n                        this._navigator.stateService.moveTo(1);\n                    } else {\n                        this._navigator.stateService.moveTo(position);\n                    }\n                });\n\n        this._domRenderSubscription = observableCombineLatest(\n                position$,\n                mode$,\n                motionless$,\n                fullPano$,\n                sliderVisible$,\n                this._container.renderService.size$).pipe(\n            map(\n                ([position, mode, motionless, fullPano, sliderVisible, size]:\n                    [number, SliderMode, boolean, boolean, boolean, ISize]): IVNodeHash => {\n                    return {\n                        name: this._name,\n                        vnode: this._domRenderer.render(position, mode, motionless, fullPano, sliderVisible),\n                    };\n                }))\n            .subscribe(this._container.domRenderer.render$);\n\n        this._glRendererCreator$.next(null);\n\n        this._updateCurtainSubscription = observableCombineLatest(\n                position$,\n                fullPano$,\n                sliderVisible$,\n                this._container.renderService.renderCamera$,\n                this._navigator.stateService.currentTransform$).pipe(\n            map(\n                ([position, fullPano, visible, render, transform]: [number, boolean, boolean, RenderCamera, Transform]): number => {\n                    if (!fullPano) {\n                        return visible ? position : 1;\n                    }\n\n                    const basicMin: number[] = this._viewportCoords.viewportToBasic(-1.15, 0, transform, render.perspective);\n                    const basicMax: number[] = this._viewportCoords.viewportToBasic(1.15, 0, transform, render.perspective);\n\n                    const shiftedMax: number = basicMax[0] < basicMin[0] ? basicMax[0] + 1 : basicMax[0];\n                    const basicPosition: number = basicMin[0] + position * (shiftedMax - basicMin[0]);\n\n                    return basicPosition > 1 ? basicPosition - 1 : basicPosition;\n                }),\n            map(\n                (position: number): IGLRendererOperation => {\n                    return (glRenderer: SliderGLRenderer): SliderGLRenderer => {\n                        glRenderer.updateCurtain(position);\n\n                        return glRenderer;\n                    };\n                }))\n            .subscribe(this._glRendererOperation$);\n\n        this._stateSubscription = observableCombineLatest(\n                this._navigator.stateService.currentState$,\n                mode$).pipe(\n            map(\n                ([frame, mode]: [IFrame, SliderMode]): IGLRendererOperation => {\n                    return (glRenderer: SliderGLRenderer): SliderGLRenderer => {\n                        glRenderer.update(frame, mode);\n\n                        return glRenderer;\n                    };\n                }))\n            .subscribe(this._glRendererOperation$);\n\n        this._setKeysSubscription = this._configuration$.pipe(\n            filter(\n                (configuration: ISliderConfiguration): boolean => {\n                    return configuration.keys != null;\n                }),\n            switchMap(\n                (configuration: ISliderConfiguration): Observable<ISliderCombination> => {\n                    return observableZip(\n                            observableZip(\n                                this._catchCacheNode$(configuration.keys.background),\n                                this._catchCacheNode$(configuration.keys.foreground)).pipe(\n                            map(\n                                (nodes: [Node, Node]): ISliderNodes => {\n                                    return { background: nodes[0], foreground: nodes[1] };\n                                })),\n                            this._navigator.stateService.currentState$.pipe(first())).pipe(\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$.pipe(\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        const textureProvider$: Observable<TextureProvider> = this._navigator.stateService.currentState$.pipe(\n            distinctUntilChanged(\n                undefined,\n                (frame: IFrame): string => {\n                    return frame.state.currentNode.key;\n                }),\n            withLatestFrom(\n                this._container.glRenderer.webGLRenderer$,\n                this._container.renderService.size$),\n            map(\n                ([frame, renderer, size]: [IFrame, THREE.WebGLRenderer, ISize]): TextureProvider => {\n                    const state: ICurrentState = frame.state;\n                    const viewportSize: number = Math.max(size.width, size.height);\n\n                    const currentNode: Node = state.currentNode;\n                    const currentTransform: Transform = state.currentTransform;\n                    const tileSize: number = viewportSize > 2048 ? 2048 : viewportSize > 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$.pipe(\n            map(\n                (provider: TextureProvider): IGLRendererOperation => {\n                    return (renderer: SliderGLRenderer): SliderGLRenderer => {\n                        renderer.setTextureProvider(provider.key, provider);\n\n                        return renderer;\n                    };\n                }))\n            .subscribe(this._glRendererOperation$);\n\n        this._setTileSizeSubscription = this._container.renderService.size$.pipe(\n            switchMap(\n                (size: ISize): Observable<[TextureProvider, ISize]> => {\n                    return observableCombineLatest(\n                            textureProvider$,\n                            observableOf<ISize>(size)).pipe(\n                        first());\n                }))\n            .subscribe(\n                ([provider, size]: [TextureProvider, ISize]): void => {\n                    let viewportSize: number = Math.max(size.width, size.height);\n                    let tileSize: number = viewportSize > 2048 ? 2048 : viewportSize > 1024 ? 1024 : 512;\n\n                    provider.setTileSize(tileSize);\n                });\n\n        this._abortTextureProviderSubscription = textureProvider$.pipe(\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]> = observableCombineLatest(\n                this._container.renderService.renderCameraFrame$,\n                this._container.renderService.size$.pipe(debounceTime(250))).pipe(\n            map(\n                ([camera, size]: [RenderCamera, ISize]): PositionLookat => {\n                    return [\n                        camera.camera.position.clone(),\n                        camera.camera.lookat.clone(),\n                        camera.zoom.valueOf(),\n                        size.height.valueOf(),\n                        size.width.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                    let sameHeight: boolean = pls[0][3] === pls[1][3];\n                    let sameWidth: boolean = pls[0][4] === pls[1][4];\n\n                    return samePosition && sameLookat && sameZoom && sameHeight && sameWidth;\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$.pipe(\n                        first());\n                }),\n            withLatestFrom(\n                this._container.renderService.size$,\n                this._navigator.stateService.currentTransform$));\n\n        this._setRegionOfInterestSubscription = textureProvider$.pipe(\n            switchMap(\n                (provider: TextureProvider): Observable<[IRegionOfInterest, TextureProvider]> => {\n                    return roiTrigger$.pipe(\n                        map(\n                            ([camera, size, transform]: [RenderCamera, ISize, Transform]):\n                            [IRegionOfInterest, TextureProvider] => {\n                                return [\n                                    this._roiCalculator.computeRegionOfInterest(camera, size, transform),\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$.pipe(\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.currentState$.pipe(\n            filter(\n                (frame: IFrame): boolean => {\n                    return frame.state.nodesAhead === 0;\n                }),\n            map(\n                (frame: IFrame): Node => {\n                    return frame.state.currentNode;\n                }),\n            distinctUntilChanged(\n                undefined,\n                (node: Node): string => {\n                    return node.key;\n                }),\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 observableEmpty();\n                    }\n\n                    let image$: Observable<[HTMLImageElement, Node]> = node\n                        .cacheImage$(Settings.maxImageSize).pipe(\n                            map(\n                                (n: Node): [HTMLImageElement, Node] => {\n                                    return [n.image, n];\n                                }));\n\n                    return image$.pipe(\n                        takeUntil(\n                            hasTexture$.pipe(\n                                filter(\n                                    (hasTexture: boolean): boolean => {\n\n                                        return hasTexture;\n                                    }))),\n                        catchError(\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 observableEmpty();\n                            }));\n                })).pipe(\n            publish(),\n            refCount());\n\n        this._updateBackgroundSubscription = nodeImage$.pipe(\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$.pipe(\n            map(\n                (imn: [HTMLImageElement, Node]): IGLRendererOperation => {\n                    return (renderer: SliderGLRenderer): SliderGLRenderer => {\n                        renderer.updateTextureImage(imn[0], imn[1]);\n\n                        return renderer;\n                    };\n                }))\n            .subscribe(this._glRendererOperation$);\n\n        const textureProviderPrev$: Observable<TextureProvider> = this._navigator.stateService.currentState$.pipe(\n            filter(\n                (frame: IFrame): boolean => {\n                    return !!frame.state.previousNode;\n                }),\n            distinctUntilChanged(\n                undefined,\n                (frame: IFrame): string => {\n                    return frame.state.previousNode.key;\n                }),\n            withLatestFrom(\n                this._container.glRenderer.webGLRenderer$,\n                this._container.renderService.size$),\n            map(\n                ([frame, renderer, size]: [IFrame, THREE.WebGLRenderer, ISize]): TextureProvider => {\n                    const state: ICurrentState = frame.state;\n                    const viewportSize: number = Math.max(size.width, size.height);\n\n                    const previousNode: Node = state.previousNode;\n                    const previousTransform: Transform = state.previousTransform;\n                    const tileSize: number = viewportSize > 2048 ? 2048 : viewportSize > 1024 ? 1024 : 512;\n\n                    return new TextureProvider(\n                        previousNode.key,\n                        previousTransform.basicWidth,\n                        previousTransform.basicHeight,\n                        tileSize,\n                        previousNode.image,\n                        this._imageTileLoader,\n                        new ImageTileStore(),\n                        renderer);\n                }),\n            publishReplay(1),\n            refCount());\n\n        this._textureProviderSubscriptionPrev = textureProviderPrev$.subscribe(() => { /*noop*/ });\n\n        this._setTextureProviderSubscriptionPrev = textureProviderPrev$.pipe(\n            map(\n                (provider: TextureProvider): IGLRendererOperation => {\n                    return (renderer: SliderGLRenderer): SliderGLRenderer => {\n                        renderer.setTextureProviderPrev(provider.key, provider);\n\n                        return renderer;\n                    };\n                }))\n            .subscribe(this._glRendererOperation$);\n\n        this._setTileSizeSubscriptionPrev = this._container.renderService.size$.pipe(\n            switchMap(\n                (size: ISize): Observable<[TextureProvider, ISize]> => {\n                    return observableCombineLatest(\n                            textureProviderPrev$,\n                            observableOf<ISize>(size)).pipe(\n                        first());\n                }))\n            .subscribe(\n                ([provider, size]: [TextureProvider, ISize]): void => {\n                    let viewportSize: number = Math.max(size.width, size.height);\n                    let tileSize: number = viewportSize > 2048 ? 2048 : viewportSize > 1024 ? 1024 : 512;\n\n                    provider.setTileSize(tileSize);\n                });\n\n        this._abortTextureProviderSubscriptionPrev = textureProviderPrev$.pipe(\n            pairwise())\n            .subscribe(\n                (pair: [TextureProvider, TextureProvider]): void => {\n                    let previous: TextureProvider = pair[0];\n                    previous.abort();\n                });\n\n        let roiTriggerPrev$: Observable<[RenderCamera, ISize, Transform]> = observableCombineLatest(\n                this._container.renderService.renderCameraFrame$,\n                this._container.renderService.size$.pipe(debounceTime(250))).pipe(\n            map(\n                ([camera, size]: [RenderCamera, ISize]): PositionLookat => {\n                    return [\n                        camera.camera.position.clone(),\n                        camera.camera.lookat.clone(),\n                        camera.zoom.valueOf(),\n                        size.height.valueOf(),\n                        size.width.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                    let sameHeight: boolean = pls[0][3] === pls[1][3];\n                    let sameWidth: boolean = pls[0][4] === pls[1][4];\n\n                    return samePosition && sameLookat && sameZoom && sameHeight && sameWidth;\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$.pipe(\n                        first());\n                }),\n            withLatestFrom(\n                this._container.renderService.size$,\n                this._navigator.stateService.currentTransform$));\n\n        this._setRegionOfInterestSubscriptionPrev = textureProviderPrev$.pipe(\n            switchMap(\n                (provider: TextureProvider): Observable<[IRegionOfInterest, TextureProvider]> => {\n                    return roiTriggerPrev$.pipe(\n                        map(\n                            ([camera, size, transform]: [RenderCamera, ISize, Transform]):\n                            [IRegionOfInterest, TextureProvider] => {\n                                return [\n                                    this._roiCalculator.computeRegionOfInterest(camera, size, transform),\n                                    provider,\n                                ];\n                            }));\n                }),\n            filter(\n                (args: [IRegionOfInterest, TextureProvider]): boolean => {\n                    return !args[1].disposed;\n                }),\n            withLatestFrom(this._navigator.stateService.currentState$))\n            .subscribe(\n                ([[roi, provider], frame]: [[IRegionOfInterest, TextureProvider], IFrame]): void => {\n                    let shiftedRoi: IRegionOfInterest = null;\n\n                    if (frame.state.previousNode.fullPano) {\n                        if (frame.state.currentNode.fullPano) {\n                            const currentViewingDirection: THREE.Vector3 =\n                                this._spatial.viewingDirection(frame.state.currentNode.rotation);\n                            const previousViewingDirection: THREE.Vector3 =\n                                this._spatial.viewingDirection(frame.state.previousNode.rotation);\n\n                            const directionDiff: number = this._spatial.angleBetweenVector2(\n                                currentViewingDirection.x,\n                                currentViewingDirection.y,\n                                previousViewingDirection.x,\n                                previousViewingDirection.y);\n\n                            const shift: number = directionDiff / (2 * Math.PI);\n\n                            const bbox: IBoundingBox = {\n                                maxX: this._spatial.wrap(roi.bbox.maxX + shift, 0, 1),\n                                maxY: roi.bbox.maxY,\n                                minX: this._spatial.wrap(roi.bbox.minX + shift, 0, 1),\n                                minY: roi.bbox.minY,\n                            };\n\n                            shiftedRoi = {\n                                bbox: bbox,\n                                pixelHeight: roi.pixelHeight,\n                                pixelWidth: roi.pixelWidth,\n                            };\n                        } else {\n                            const currentViewingDirection: THREE.Vector3 =\n                                this._spatial.viewingDirection(frame.state.currentNode.rotation);\n                            const previousViewingDirection: THREE.Vector3 =\n                                this._spatial.viewingDirection(frame.state.previousNode.rotation);\n\n                            const directionDiff: number = this._spatial.angleBetweenVector2(\n                                currentViewingDirection.x,\n                                currentViewingDirection.y,\n                                previousViewingDirection.x,\n                                previousViewingDirection.y);\n\n                            const shiftX: number = directionDiff / (2 * Math.PI);\n\n                            const a1: number = this._spatial.angleToPlane(currentViewingDirection.toArray(), [0, 0, 1]);\n                            const a2: number = this._spatial.angleToPlane(previousViewingDirection.toArray(), [0, 0, 1]);\n\n                            const shiftY: number = (a2 - a1) / (2 * Math.PI);\n\n                            const currentTransform: Transform = frame.state.currentTransform;\n                            const size: number = Math.max(currentTransform.basicWidth, currentTransform.basicHeight);\n                            const hFov: number = size > 0 ?\n                                2 * Math.atan(0.5 * currentTransform.basicWidth / (size * currentTransform.focal)) :\n                                Math.PI / 3;\n                            const vFov: number = size > 0 ?\n                                2 * Math.atan(0.5 * currentTransform.basicHeight / (size * currentTransform.focal)) :\n                                Math.PI / 3;\n\n                            const spanningWidth: number = hFov / (2 * Math.PI);\n                            const spanningHeight: number = vFov / Math.PI;\n\n                            const basicWidth: number = (roi.bbox.maxX - roi.bbox.minX) * spanningWidth;\n                            const basicHeight: number = (roi.bbox.maxY - roi.bbox.minY) * spanningHeight;\n\n                            const pixelWidth: number = roi.pixelWidth * spanningWidth;\n                            const pixelHeight: number = roi.pixelHeight * spanningHeight;\n\n                            const zoomShiftX: number = (roi.bbox.minX + roi.bbox.maxX) / 2 - 0.5;\n                            const zoomShiftY: number = (roi.bbox.minY + roi.bbox.maxY) / 2 - 0.5;\n\n                            const minX: number = 0.5 + shiftX + spanningWidth * zoomShiftX - basicWidth / 2;\n                            const maxX: number = 0.5 + shiftX + spanningWidth * zoomShiftX + basicWidth / 2;\n                            const minY: number = 0.5 + shiftY + spanningHeight * zoomShiftY - basicHeight / 2;\n                            const maxY: number = 0.5 + shiftY + spanningHeight * zoomShiftY + basicHeight / 2;\n\n                            const bbox: IBoundingBox = {\n                                maxX: this._spatial.wrap(maxX, 0, 1),\n                                maxY: maxY,\n                                minX: this._spatial.wrap(minX, 0, 1),\n                                minY: minY,\n                            };\n\n                            shiftedRoi = {\n                                bbox: bbox,\n                                pixelHeight: pixelHeight,\n                                pixelWidth: pixelWidth,\n                            };\n                        }\n                    } else {\n                        const currentBasicAspect: number = frame.state.currentTransform.basicAspect;\n                        const previousBasicAspect: number = frame.state.previousTransform.basicAspect;\n\n                        const [[cornerMinX, cornerMinY], [cornerMaxX, cornerMaxY]]: number[][] =\n                            this._getBasicCorners(currentBasicAspect, previousBasicAspect);\n\n                        const basicWidth: number = cornerMaxX - cornerMinX;\n                        const basicHeight: number = cornerMaxY - cornerMinY;\n\n                        const pixelWidth: number = roi.pixelWidth / basicWidth;\n                        const pixelHeight: number = roi.pixelHeight / basicHeight;\n\n                        const minX: number = (basicWidth - 1) / (2 * basicWidth) + roi.bbox.minX / basicWidth;\n                        const maxX: number = (basicWidth - 1) / (2 * basicWidth) + roi.bbox.maxX / basicWidth;\n                        const minY: number = (basicHeight - 1) / (2 * basicHeight) + roi.bbox.minY / basicHeight;\n                        const maxY: number = (basicHeight - 1) / (2 * basicHeight) + roi.bbox.maxY / basicHeight;\n\n                        const bbox: IBoundingBox = {\n                            maxX: maxX,\n                            maxY: maxY,\n                            minX: minX,\n                            minY: minY,\n                        };\n\n                        this._clipBoundingBox(bbox);\n\n                        shiftedRoi = {\n                            bbox: bbox,\n                            pixelHeight: pixelHeight,\n                            pixelWidth: pixelWidth,\n                        };\n                    }\n\n                    provider.setRegionOfInterest(shiftedRoi);\n                });\n\n        let hasTexturePrev$: Observable<boolean> = textureProviderPrev$.pipe(\n            switchMap(\n                (provider: TextureProvider): Observable<boolean> => {\n                    return provider.hasTexture$;\n                }),\n            startWith(false),\n            publishReplay(1),\n            refCount());\n\n        this._hasTextureSubscriptionPrev = hasTexturePrev$.subscribe(() => { /*noop*/ });\n\n        let nodeImagePrev$: Observable<[HTMLImageElement, Node]> = this._navigator.stateService.currentState$.pipe(\n            filter(\n                (frame: IFrame): boolean => {\n                    return frame.state.nodesAhead === 0 && !!frame.state.previousNode;\n                }),\n            map(\n                (frame: IFrame): Node => {\n                    return frame.state.previousNode;\n                }),\n            distinctUntilChanged(\n                undefined,\n                (node: Node): string => {\n                    return node.key;\n                }),\n            debounceTime(1000),\n            withLatestFrom(hasTexturePrev$),\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 observableEmpty();\n                    }\n\n                    let image$: Observable<[HTMLImageElement, Node]> = node\n                        .cacheImage$(Settings.maxImageSize).pipe(\n                            map(\n                                (n: Node): [HTMLImageElement, Node] => {\n                                    return [n.image, n];\n                                }));\n\n                    return image$.pipe(\n                        takeUntil(\n                            hasTexturePrev$.pipe(\n                                filter(\n                                    (hasTexture: boolean): boolean => {\n\n                                        return hasTexture;\n                                    }))),\n                        catchError(\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 observableEmpty();\n                            }));\n                })).pipe(\n            publish(),\n            refCount());\n\n        this._updateBackgroundSubscriptionPrev = nodeImagePrev$.pipe(\n            withLatestFrom(textureProviderPrev$))\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._updateTextureImageSubscriptionPrev = nodeImagePrev$.pipe(\n            map(\n                (imn: [HTMLImageElement, Node]): IGLRendererOperation => {\n                    return (renderer: SliderGLRenderer): SliderGLRenderer => {\n                        renderer.updateTextureImage(imn[0], imn[1]);\n\n                        return renderer;\n                    };\n                }))\n            .subscribe(this._glRendererOperation$);\n    }\n\n    protected _deactivate(): void {\n        this._waitSubscription.unsubscribe();\n\n        this._navigator.stateService.state$.pipe(\n            first())\n            .subscribe(\n                (state: State): void => {\n                    if (state !== State.Traversing) {\n                        this._navigator.stateService.traverse();\n                    }\n                });\n\n        this._glRendererDisposer$.next(null);\n        this._domRenderer.deactivate();\n\n        this._modeSubcription.unsubscribe();\n        this._setKeysSubscription.unsubscribe();\n        this._stateSubscription.unsubscribe();\n        this._glRenderSubscription.unsubscribe();\n        this._domRenderSubscription.unsubscribe();\n        this._moveSubscription.unsubscribe();\n        this._updateCurtainSubscription.unsubscribe();\n\n        this._textureProviderSubscription.unsubscribe();\n        this._setTextureProviderSubscription.unsubscribe();\n        this._setTileSizeSubscription.unsubscribe();\n        this._abortTextureProviderSubscription.unsubscribe();\n        this._setRegionOfInterestSubscription.unsubscribe();\n        this._hasTextureSubscription.unsubscribe();\n        this._updateBackgroundSubscription.unsubscribe();\n        this._updateTextureImageSubscription.unsubscribe();\n\n        this._textureProviderSubscriptionPrev.unsubscribe();\n        this._setTextureProviderSubscriptionPrev.unsubscribe();\n        this._setTileSizeSubscriptionPrev.unsubscribe();\n        this._abortTextureProviderSubscriptionPrev.unsubscribe();\n        this._setRegionOfInterestSubscriptionPrev.unsubscribe();\n        this._hasTextureSubscriptionPrev.unsubscribe();\n        this._updateBackgroundSubscriptionPrev.unsubscribe();\n        this._updateTextureImageSubscriptionPrev.unsubscribe();\n\n        this.configure({ keys: null });\n    }\n\n    protected _getDefaultConfiguration(): ISliderConfiguration {\n        return {\n            initialPosition: 1,\n            mode: SliderMode.Motion,\n            sliderVisible: true,\n        };\n    }\n\n    private _catchCacheNode$(key: string): Observable<Node> {\n        return this._navigator.graphService.cacheNode$(key).pipe(\n            catchError(\n                (error: Error, caught: Observable<Node>): Observable<Node> => {\n                    console.error(`Failed to cache slider node (${key})`, error);\n\n                    return observableEmpty();\n                }));\n    }\n\n    private _getBasicCorners(currentAspect: number, previousAspect: number): number[][] {\n        let offsetX: number;\n        let offsetY: number;\n\n        if (currentAspect > previousAspect) {\n            offsetX = 0.5;\n            offsetY = 0.5 * currentAspect / previousAspect;\n        } else {\n            offsetX = 0.5 * previousAspect / currentAspect;\n            offsetY = 0.5;\n        }\n\n        return [[0.5 - offsetX, 0.5 - offsetY], [0.5 + offsetX, 0.5 + offsetY]];\n    }\n\n    private _clipBoundingBox(bbox: IBoundingBox): void {\n        bbox.minX = Math.max(0, Math.min(1, bbox.minX));\n        bbox.maxX = Math.max(0, Math.min(1, bbox.maxX));\n        bbox.minY = Math.max(0, Math.min(1, bbox.minY));\n        bbox.maxY = Math.max(0, Math.min(1, bbox.maxY));\n    }\n}\n\nComponentService.register(SliderComponent);\nexport default SliderComponent;\n",
     "import {merge as observableMerge,  Observable ,  Subject ,  Subscription } from \"rxjs\";\n\nimport {filter} from \"rxjs/operators\";\nimport * as vd from \"virtual-dom\";\n\nimport { SliderMode } from \"../../Component\";\nimport { Container } from \"../../Viewer\";\n\nexport class SliderDOMRenderer {\n    private _container: Container;\n\n    private _interacting: boolean;\n    private _notifyModeChanged$: Subject<SliderMode>;\n    private _notifyPositionChanged$: Subject<number>;\n    private _stopInteractionSubscription: Subscription;\n\n    constructor(container: Container) {\n        this._container = container;\n\n        this._interacting = false;\n        this._notifyModeChanged$ = new Subject<SliderMode>();\n        this._notifyPositionChanged$ = new Subject<number>();\n        this._stopInteractionSubscription = null;\n    }\n\n    public get mode$(): Observable<SliderMode> {\n        return this._notifyModeChanged$;\n    }\n\n    public get position$(): Observable<number> {\n        return this._notifyPositionChanged$;\n    }\n\n    public activate(): void {\n        if (!!this._stopInteractionSubscription) {\n            return;\n        }\n\n        this._stopInteractionSubscription = observableMerge(\n                this._container.mouseService.documentMouseUp$,\n                this._container.touchService.touchEnd$.pipe(\n                    filter(\n                        (touchEvent: TouchEvent): boolean => {\n                            return touchEvent.touches.length === 0;\n                        })))\n            .subscribe(\n                (event: Event): void => {\n                    if (this._interacting) {\n                        this._interacting = false;\n                    }\n                });\n    }\n\n    public deactivate(): void {\n        if (!this._stopInteractionSubscription) {\n            return;\n        }\n\n        this._interacting = false;\n\n        this._stopInteractionSubscription.unsubscribe();\n        this._stopInteractionSubscription = null;\n    }\n\n    public render(position: number, mode: SliderMode, motionless: boolean, pano: boolean, visible: boolean): vd.VNode {\n        const children: vd.VNode[] = [];\n\n        if (visible) {\n            children.push(vd.h(\"div.SliderBorder\", []));\n\n            const modeVisible: boolean = !(motionless || pano);\n            if (modeVisible) {\n                children.push(this._createModeButton(mode));\n            }\n\n            children.push(this._createPositionInput(position, modeVisible));\n        }\n\n        const boundingRect: ClientRect = this._container.domContainer.getBoundingClientRect();\n        const width: number = Math.max(215, Math.min(400, boundingRect.width - 100));\n\n        return vd.h(\"div.SliderContainer\", { style: { width: `${width}px` } }, children);\n    }\n\n    private _createModeButton(mode: SliderMode): vd.VNode {\n        const properties: vd.createProperties = {\n            onclick: (): void => {\n                this._notifyModeChanged$.next(\n                    mode === SliderMode.Motion ?\n                        SliderMode.Stationary :\n                        SliderMode.Motion);\n            },\n        };\n\n        const className: string = mode === SliderMode.Stationary ?\n            \"SliderModeButtonPressed\" :\n            \"SliderModeButton\";\n\n        return vd.h(\"div.\" + className, properties, [vd.h(\"div.SliderModeIcon\", [])]);\n    }\n\n    private _createPositionInput(position: number, modeVisible: boolean): vd.VNode {\n        const onChange: (e: Event) => void = (e: Event): void => {\n            this._notifyPositionChanged$.next(Number((<HTMLInputElement>e.target).value) / 1000);\n        };\n\n        const onStart: (e: Event) => void = (e: Event): void => {\n            this._interacting = true;\n            e.stopPropagation();\n        };\n\n        const onMove: (e: Event) => void = (e: Event): void => {\n            if (this._interacting) {\n                e.stopPropagation();\n            }\n        };\n\n        const onKeyDown: (e: KeyboardEvent) => void = (e: KeyboardEvent): void => {\n            if (e.key === \"ArrowDown\" || e.key === \"ArrowLeft\" ||\n                e.key === \"ArrowRight\" || e.key === \"ArrowUp\") {\n                e.preventDefault();\n            }\n        };\n\n        const boundingRect: ClientRect = this._container.domContainer.getBoundingClientRect();\n        const width: number = Math.max(215, Math.min(400, boundingRect.width - 105)) - 68 + (modeVisible ? 0 : 36);\n\n        const positionInput: vd.VNode = vd.h(\n            \"input.SliderPosition\",\n            {\n                max: 1000,\n                min: 0,\n                onchange: onChange,\n                oninput: onChange,\n                onkeydown: onKeyDown,\n                onmousedown: onStart,\n                onmousemove: onMove,\n                ontouchmove: onMove,\n                ontouchstart: onStart,\n                style: {\n                    width: `${width}px`,\n                },\n                type: \"range\",\n                value: 1000 * position,\n            },\n            []);\n\n        return vd.h(\"div.SliderPositionContainer\", [positionInput]);\n    }\n}\n\nexport default SliderDOMRenderer;\n",
     "import * as THREE from \"three\";\n\nimport {Subscription} from \"rxjs\";\n\nimport {\n    IBBoxShaderMaterial,\n    IShaderMaterial,\n    MeshFactory,\n    MeshScene,\n    SliderMode,\n} from \"../../Component\";\nimport {\n    Transform,\n    Spatial,\n} from \"../../Geo\";\nimport { Node } from \"../../Graph\";\nimport {\n    ICurrentState,\n    IFrame,\n} from \"../../State\";\nimport { TextureProvider } from \"../../Tiles\";\n\nexport class SliderGLRenderer {\n    private _factory: MeshFactory;\n    private _scene: MeshScene;\n    private _spatial: Spatial;\n\n    private _currentKey: string;\n    private _previousKey: string;\n\n    private _disabled: boolean;\n    private _curtain: number;\n    private _frameId: number;\n    private _needsRender: boolean;\n\n    private _mode: SliderMode;\n\n    private _currentProviderDisposers: { [key: string]: () => void };\n    private _previousProviderDisposers: { [key: string]: () => void };\n\n    constructor() {\n        this._factory = new MeshFactory();\n        this._scene = new MeshScene();\n        this._spatial = new Spatial();\n\n        this._currentKey = null;\n        this._previousKey = null;\n\n        this._disabled = false;\n        this._curtain = 1;\n        this._frameId = 0;\n        this._needsRender = false;\n\n        this._mode = null;\n\n        this._currentProviderDisposers = {};\n        this._previousProviderDisposers = {};\n    }\n\n    public get disabled(): boolean {\n        return this._disabled;\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 setTextureProvider(key: string, provider: TextureProvider): void {\n        this._setTextureProvider(\n            key,\n            this._currentKey,\n            provider,\n            this._currentProviderDisposers,\n            this._updateTexture.bind(this));\n    }\n\n    public setTextureProviderPrev(key: string, provider: TextureProvider): void {\n        this._setTextureProvider(\n            key,\n            this._previousKey,\n            provider,\n            this._previousProviderDisposers,\n            this._updateTexturePrev.bind(this));\n    }\n\n    public update(frame: IFrame, mode: SliderMode): void {\n        this._updateFrameId(frame.id);\n        this._updateImagePlanes(frame.state, mode);\n    }\n\n    public updateCurtain(curtain: number): void {\n        if (this._curtain === curtain) {\n            return;\n        }\n\n        this._curtain = curtain;\n        this._updateCurtain();\n\n        this._needsRender = true;\n    }\n\n    public updateTexture(image: HTMLImageElement, node: Node): void {\n        let imagePlanes: THREE.Mesh[] = node.key === this._currentKey ?\n            this._scene.imagePlanes :\n            node.key === this._previousKey ?\n                this._scene.imagePlanesOld :\n                [];\n\n        if (imagePlanes.length === 0) {\n            return;\n        }\n\n        this._needsRender = 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 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._scene.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._scene.sceneOld, perspectiveCamera);\n        }\n\n        renderer.render(this._scene.scene, perspectiveCamera);\n\n        this._needsRender = false;\n    }\n\n    public dispose(): void {\n        this._scene.clear();\n\n        for (const key in this._currentProviderDisposers) {\n            if (!this._currentProviderDisposers.hasOwnProperty(key)) {\n                continue;\n            }\n\n            this._currentProviderDisposers[key]();\n        }\n\n        for (const key in this._previousProviderDisposers) {\n            if (!this._previousProviderDisposers.hasOwnProperty(key)) {\n                continue;\n            }\n\n            this._previousProviderDisposers[key]();\n        }\n\n        this._currentProviderDisposers = {};\n        this._previousProviderDisposers = {};\n    }\n\n    private _getBasicCorners(currentAspect: number, previousAspect: number): number[][] {\n        let offsetX: number;\n        let offsetY: number;\n\n        if (currentAspect > previousAspect) {\n            offsetX = 0.5;\n            offsetY = 0.5 * currentAspect / previousAspect;\n        } else {\n            offsetX = 0.5 * previousAspect / currentAspect;\n            offsetY = 0.5;\n        }\n\n        return [[0.5 - offsetX, 0.5 - offsetY], [0.5 + offsetX, 0.5 + offsetY]];\n    }\n\n    private _setDisabled(state: ICurrentState): void {\n        this._disabled = state.currentNode == null ||\n            state.previousNode == null ||\n            (state.currentNode.pano && !state.currentNode.fullPano) ||\n            (state.previousNode.pano && !state.previousNode.fullPano) ||\n            (state.currentNode.fullPano && !state.previousNode.fullPano);\n    }\n\n    private _setTextureProvider(\n        key: string,\n        originalKey: string,\n        provider: TextureProvider,\n        providerDisposers: { [key: string]: () => void },\n        updateTexture: (texture: THREE.Texture) => void): void {\n\n        if (key !== originalKey) {\n            return;\n        }\n\n        let createdSubscription: Subscription = provider.textureCreated$\n            .subscribe(updateTexture);\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 providerDisposers) {\n            let disposeProvider: () => void = providerDisposers[key];\n            disposeProvider();\n\n            delete providerDisposers[key];\n        }\n\n        providerDisposers[key] = dispose;\n    }\n\n    private _updateCurtain(): void {\n        for (let plane of this._scene.imagePlanes) {\n            let shaderMaterial: IBBoxShaderMaterial = <IBBoxShaderMaterial>plane.material;\n\n            if (!!shaderMaterial.uniforms.curtain) {\n                shaderMaterial.uniforms.curtain.value = this._curtain;\n            }\n        }\n    }\n\n    private _updateFrameId(frameId: number): void {\n        this._frameId = frameId;\n    }\n\n    private _updateImagePlanes(state: ICurrentState, mode: SliderMode): void {\n        const currentChanged: boolean = state.currentNode != null && this._currentKey !== state.currentNode.key;\n        const previousChanged: boolean = state.previousNode != null && this._previousKey !== state.previousNode.key;\n        const modeChanged: boolean = this._mode !== mode;\n\n        if (!(currentChanged || previousChanged || modeChanged)) {\n            return;\n        }\n\n        this._setDisabled(state);\n        this._needsRender = true;\n        this._mode = mode;\n\n        const motionless: boolean = state.motionless || mode === SliderMode.Stationary || state.currentNode.pano;\n\n        if (this.disabled || previousChanged) {\n            if (this._previousKey in this._previousProviderDisposers) {\n                this._previousProviderDisposers[this._previousKey]();\n\n                delete this._previousProviderDisposers[this._previousKey];\n            }\n        }\n\n        if (this.disabled) {\n            this._scene.setImagePlanesOld([]);\n        } else {\n            if (previousChanged || modeChanged) {\n                const previousNode: Node = state.previousNode;\n\n                this._previousKey = previousNode.key;\n\n                const elements: Float32Array = state.currentTransform.rt.elements;\n                let translation: number[] = [elements[12], elements[13], elements[14]];\n\n                const currentAspect: number = state.currentTransform.basicAspect;\n                const previousAspect: number = state.previousTransform.basicAspect;\n\n                const textureScale: number[] = currentAspect > previousAspect ?\n                    [1, previousAspect / currentAspect] :\n                    [currentAspect / previousAspect, 1];\n\n                let rotation: number[] = state.currentNode.rotation;\n                let width: number = state.currentNode.width;\n                let height: number = state.currentNode.height;\n\n                if (previousNode.fullPano) {\n                    rotation = state.previousNode.rotation;\n                    translation = this._spatial\n                        .rotate(\n                            this._spatial\n                                .opticalCenter(state.currentNode.rotation, translation)\n                                .toArray(),\n                            rotation)\n                        .multiplyScalar(-1)\n                        .toArray();\n\n                    width = state.previousNode.width;\n                    height = state.previousNode.height;\n                }\n\n                const transform: Transform = new Transform(\n                    state.currentNode.orientation,\n                    width,\n                    height,\n                    state.currentNode.focal,\n                    state.currentNode.scale,\n                    previousNode.gpano,\n                    rotation,\n                    translation,\n                    previousNode.image,\n                    textureScale);\n\n                let mesh: THREE.Mesh = undefined;\n\n                if (previousNode.fullPano) {\n                    mesh = this._factory.createMesh(\n                        previousNode,\n                        motionless || state.currentNode.fullPano ? transform : state.previousTransform);\n                } else {\n                    if (motionless) {\n                        const [[basicX0, basicY0], [basicX1, basicY1]]: number[][] = this._getBasicCorners(currentAspect, previousAspect);\n\n                        mesh = this._factory.createFlatMesh(\n                            state.previousNode,\n                            transform,\n                            basicX0,\n                            basicX1,\n                            basicY0,\n                            basicY1);\n                    } else {\n                        mesh = this._factory.createMesh(state.previousNode, state.previousTransform);\n                    }\n                }\n\n                this._scene.setImagePlanesOld([mesh]);\n            }\n        }\n\n        if (currentChanged || modeChanged) {\n            if (this._currentKey in this._currentProviderDisposers) {\n                this._currentProviderDisposers[this._currentKey]();\n\n                delete this._currentProviderDisposers[this._currentKey];\n            }\n\n            this._currentKey = state.currentNode.key;\n\n            const imagePlanes: THREE.Mesh[] = [];\n\n            if (state.currentNode.fullPano) {\n                imagePlanes.push(this._factory.createCurtainMesh(state.currentNode, state.currentTransform));\n            } else if (state.currentNode.pano && !state.currentNode.fullPano) {\n                imagePlanes.push(this._factory.createMesh(state.currentNode, state.currentTransform));\n            } else {\n                if (motionless) {\n                    imagePlanes.push(this._factory.createDistortedCurtainMesh(state.currentNode, state.currentTransform));\n                } else {\n                    imagePlanes.push(this._factory.createCurtainMesh(state.currentNode, state.currentTransform));\n                }\n            }\n\n            this._scene.setImagePlanes(imagePlanes);\n\n            this._updateCurtain();\n        }\n    }\n\n    private _updateTexture(texture: THREE.Texture): void {\n        this._needsRender = true;\n\n        for (let plane of this._scene.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    private _updateTexturePrev(texture: THREE.Texture): void {\n        this._needsRender = true;\n\n        for (let plane of this._scene.imagePlanesOld) {\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\nexport default SliderGLRenderer;\n",
-    "import * as geohash from \"latlon-geohash\";\n\nimport {\n    empty as observableEmpty,\n    from as observableFrom,\n    of as observableOf,\n    zip as observableZip,\n    Observable,\n    Subscriber,\n} from \"rxjs\";\n\nimport {\n    mergeMap,\n    catchError,\n    tap,\n    publish,\n    refCount,\n    finalize,\n    map,\n    filter,\n} from \"rxjs/operators\";\n\nimport {\n    IGPano,\n    ILatLon,\n} from \"../../API\";\nimport {\n    IReconstruction,\n} from \"../../Component\";\nimport {\n    AbortMapillaryError,\n} from \"../../Error\";\nimport {\n    GraphService,\n    Node,\n} from \"../../Graph\";\nimport {\n    Urls,\n} from \"../../Utils\";\n\nexport type NodeData = {\n    alt: number;\n    focal: number;\n    gpano: IGPano;\n    height: number;\n    k1: number;\n    k2: number;\n    key: string,\n    lat: number;\n    lon: number;\n    mergeCC: number;\n    orientation: number;\n    originalLat: number;\n    originalLon: number;\n    rotation: number[];\n    scale: number;\n    width: number;\n};\n\nexport type ReconstructionData = {\n    data: NodeData,\n    reconstruction: IReconstruction,\n};\n\nexport class SpatialDataCache {\n    private _graphService: GraphService;\n\n    private _cacheRequests: { [hash: string]: XMLHttpRequest[] };\n    private _reconstructions: { [hash: string]: ReconstructionData[] };\n    private _tiles: { [hash: string]: NodeData[] };\n\n    private _cachingReconstructions$: { [hash: string]: Observable<ReconstructionData> };\n    private _cachingTiles$: { [hash: string]: Observable<NodeData[]> };\n\n    constructor(graphService: GraphService) {\n        this._graphService = graphService;\n\n        this._tiles = {};\n        this._cacheRequests = {};\n        this._reconstructions = {};\n\n        this._cachingReconstructions$ = {};\n        this._cachingTiles$ = {};\n    }\n\n    public cacheReconstructions$(hash: string): Observable<ReconstructionData> {\n        if (!this.hasTile(hash)) {\n            throw new Error(\"Cannot cache reconstructions of a non-existing tile.\");\n        }\n\n        if (this.hasReconstructions(hash)) {\n            throw new Error(\"Cannot cache reconstructions that already exists.\");\n        }\n\n        if (this.isCachingReconstructions(hash)) {\n            return this._cachingReconstructions$[hash];\n        }\n\n        const tile: NodeData[] = [];\n\n        if (hash in this._reconstructions) {\n            const reconstructionKeys: string[] =\n                this.getReconstructions(hash)\n                    .map(\n                        (reconstruction: ReconstructionData): string => {\n                            return reconstruction.data.key;\n                        });\n\n            for (const node of this.getTile(hash)) {\n                if (reconstructionKeys.indexOf(node.key) === -1) {\n                    tile.push(node);\n                }\n            }\n        } else {\n            tile.push(...this.getTile(hash));\n\n            this._reconstructions[hash] = [];\n        }\n\n        this._cacheRequests[hash] = [];\n        this._cachingReconstructions$[hash] = observableFrom(tile).pipe(\n            mergeMap(\n                (nodeData: NodeData): Observable<[NodeData, IReconstruction]> => {\n                    return !this._cacheRequests[hash] ?\n                        observableEmpty() :\n                        observableZip(\n                            observableOf(nodeData),\n                            this._getAtomicReconstruction(nodeData.key, this._cacheRequests[hash]))\n                            .pipe(\n                                catchError(\n                                    (error: Error): Observable<[NodeData, IReconstruction]> => {\n                                        if (error instanceof AbortMapillaryError) {\n                                            return observableEmpty();\n                                        }\n\n                                        console.error(error);\n\n                                        return observableOf(<[NodeData, IReconstruction]>[nodeData, null]);\n                                    }));\n                },\n                6),\n            map(\n                ([nodeData, reconstruction]: [NodeData, IReconstruction]): ReconstructionData => {\n                    return { data: nodeData, reconstruction: reconstruction };\n                }),\n            filter(\n                (): boolean => {\n                    return hash in this._reconstructions;\n                }),\n            tap(\n                (data: ReconstructionData): void => {\n                    this._reconstructions[hash].push(data);\n                }),\n            filter(\n                (data: ReconstructionData): boolean => {\n                    return !!data.reconstruction;\n                }),\n            finalize(\n                (): void => {\n                    if (hash in this._cachingReconstructions$) {\n                        delete this._cachingReconstructions$[hash];\n                    }\n\n                    if (hash in this._cacheRequests) {\n                        delete this._cacheRequests[hash];\n                    }\n                }),\n            publish(),\n            refCount());\n\n        return this._cachingReconstructions$[hash];\n    }\n\n    public cacheTile$(hash: string): Observable<NodeData[]> {\n        if (hash.length !== 8) {\n            throw new Error(\"Hash needs to be level 8.\");\n        }\n\n        if (this.hasTile(hash)) {\n            throw new Error(\"Cannot cache tile that already exists.\");\n\n        }\n\n        if (this.hasTile(hash)) {\n            return this._cachingTiles$[hash];\n        }\n\n        const bounds: geohash.Bounds = geohash.bounds(hash);\n        const sw: ILatLon = { lat: bounds.sw.lat, lon: bounds.sw.lon };\n        const ne: ILatLon = { lat: bounds.ne.lat, lon: bounds.ne.lon };\n\n        this._tiles[hash] = [];\n        this._cachingTiles$[hash] = this._graphService.cacheBoundingBox$(sw, ne).pipe(\n            catchError(\n                (error: Error): Observable<Node[]> => {\n                    console.error(error);\n\n                    delete this._tiles[hash];\n\n                    return observableEmpty();\n                }),\n            map(\n                (nodes: Node[]): NodeData[] => {\n                    return nodes\n                        .map(\n                            (n: Node): NodeData => {\n                                return this._createNodeData(n);\n                            });\n                }),\n            filter(\n                (): boolean => {\n                    return hash in this._tiles;\n                }),\n            tap(\n                (nodeData: NodeData[]): void => {\n                    this._tiles[hash].push(...nodeData);\n\n                    delete this._cachingTiles$[hash];\n                }),\n            finalize(\n                (): void => {\n                    if (hash in this._cachingTiles$) {\n                        delete this._cachingTiles$[hash];\n                    }\n                }),\n            publish(),\n            refCount());\n\n        return this._cachingTiles$[hash];\n    }\n\n    public isCachingReconstructions(hash: string): boolean {\n        return hash in this._cachingReconstructions$;\n    }\n\n    public isCachingTile(hash: string): boolean {\n        return hash in this._cachingTiles$;\n    }\n\n    public hasReconstructions(hash: string): boolean {\n        return !(hash in this._cachingReconstructions$) &&\n            hash in this._reconstructions &&\n            this._reconstructions[hash].length === this._tiles[hash].length;\n    }\n\n    public hasTile(hash: string): boolean {\n        return !(hash in this._cachingTiles$) && hash in this._tiles;\n    }\n\n    public getReconstructions(hash: string): ReconstructionData[] {\n        return hash in this._reconstructions ?\n            this._reconstructions[hash]\n                .filter(\n                    (data: ReconstructionData): boolean => {\n                        return !!data.reconstruction;\n                    }) :\n            [];\n    }\n\n    public getTile(hash: string): NodeData[] {\n        return hash in this._tiles ? this._tiles[hash] : [];\n    }\n\n    public uncache(keepHashes?: string[]): void {\n        for (let hash of Object.keys(this._cacheRequests)) {\n            if (!!keepHashes && keepHashes.indexOf(hash) !== -1) {\n                continue;\n            }\n\n            for (const request of this._cacheRequests[hash]) {\n                request.abort();\n            }\n\n            delete this._cacheRequests[hash];\n        }\n\n        for (let hash of Object.keys(this._reconstructions)) {\n            if (!!keepHashes && keepHashes.indexOf(hash) !== -1) {\n                continue;\n            }\n\n            delete this._reconstructions[hash];\n        }\n\n        for (let hash of Object.keys(this._tiles)) {\n            if (!!keepHashes && keepHashes.indexOf(hash) !== -1) {\n                continue;\n            }\n\n            delete this._tiles[hash];\n        }\n    }\n\n    private _createNodeData(node: Node): NodeData {\n        return {\n            alt: node.alt,\n            focal: node.focal,\n            gpano: node.gpano,\n            height: node.height,\n            k1: node.ck1,\n            k2: node.ck2,\n            key: node.key,\n            lat: node.latLon.lat,\n            lon: node.latLon.lon,\n            mergeCC: node.mergeCC,\n            orientation: node.orientation,\n            originalLat: node.originalLatLon.lat,\n            originalLon: node.originalLatLon.lon,\n            rotation: [node.rotation[0], node.rotation[1], node.rotation[2]],\n            scale: node.scale,\n            width: node.width,\n        };\n    }\n\n    private _getAtomicReconstruction(key: string, requests: XMLHttpRequest[]): Observable<IReconstruction> {\n        return Observable.create(\n            (subscriber: Subscriber<IReconstruction>): void => {\n                const xmlHTTP: XMLHttpRequest = new XMLHttpRequest();\n\n                xmlHTTP.open(\"GET\", Urls.atomicReconstruction(key), true);\n                xmlHTTP.responseType = \"json\";\n                xmlHTTP.timeout = 15000;\n\n                xmlHTTP.onload = () => {\n                    if (!xmlHTTP.response) {\n                        subscriber.error(new Error(`Atomic reconstruction does not exist (${key})`));\n                    } else {\n                        subscriber.next(xmlHTTP.response);\n                        subscriber.complete();\n                    }\n                };\n\n                xmlHTTP.onerror = () => {\n                    subscriber.error(new Error(`Failed to get atomic reconstruction (${key})`));\n                };\n\n                xmlHTTP.ontimeout = () => {\n                    subscriber.error(new Error(`Atomic reconstruction request timed out (${key})`));\n                };\n\n                xmlHTTP.onabort = () => {\n                    subscriber.error(new AbortMapillaryError(`Atomic reconstruction request was aborted (${key})`));\n                };\n\n                requests.push(xmlHTTP);\n\n                xmlHTTP.send(null);\n            });\n    }\n}\n\nexport default SpatialDataCache;\n",
-    "import * as geohash from \"latlon-geohash\";\n\nimport {\n    combineLatest as observableCombineLatest,\n    empty as observableEmpty,\n    from as observableFrom,\n    of as observableOf,\n    Observable,\n    Subscription,\n} from \"rxjs\";\n\nimport {\n    catchError,\n    withLatestFrom,\n    map,\n    distinctUntilChanged,\n    concatMap,\n    switchMap,\n    tap,\n    filter,\n    last,\n    mergeMap,\n    first,\n    refCount,\n    publishReplay,\n} from \"rxjs/operators\";\n\nimport {\n    ComponentService,\n    Component,\n    ISpatialDataConfiguration,\n    NodeData,\n    ReconstructionData,\n    SpatialDataCache,\n    SpatialDataScene,\n} from \"../../Component\";\nimport {\n    Geo,\n    GeoCoords,\n    ILatLonAlt,\n    Transform,\n    ViewportCoords,\n} from \"../../Geo\";\nimport {\n    Node,\n} from \"../../Graph\";\nimport {\n    IGLRenderHash,\n    GLRenderStage,\n    RenderCamera,\n} from \"../../Render\";\nimport {\n    IFrame,\n} from \"../../State\";\nimport {\n    Container,\n    Navigator,\n} from \"../../Viewer\";\nimport PlayService from \"../../viewer/PlayService\";\nimport State from \"../../state/State\";\n\nexport class SpatialDataComponent extends Component<ISpatialDataConfiguration> {\n    public static componentName: string = \"spatialData\";\n\n    private _cache: SpatialDataCache;\n    private _scene: SpatialDataScene;\n    private _viewportCoords: ViewportCoords;\n    private _geoCoords: GeoCoords;\n\n    private _addSubscription: Subscription;\n    private _cameraVisibilitySubscription: Subscription;\n    private _earthControlsSubscription: Subscription;\n    private _moveSubscription: Subscription;\n    private _pointVisibilitySubscription: Subscription;\n    private _positionVisibilitySubscription: Subscription;\n    private _renderSubscription: Subscription;\n    private _tileVisibilitySubscription: Subscription;\n    private _uncacheSubscription: Subscription;\n    private _visualizeConnectedComponentSubscription: Subscription;\n\n    constructor(name: string, container: Container, navigator: Navigator) {\n        super(name, container, navigator);\n\n        this._cache = new SpatialDataCache(navigator.graphService);\n        this._scene = new SpatialDataScene(this._getDefaultConfiguration());\n        this._viewportCoords = new ViewportCoords();\n        this._geoCoords = new GeoCoords();\n    }\n\n    protected _activate(): void {\n        this._earthControlsSubscription = this._configuration$.pipe(\n            map(\n                (configuration: ISpatialDataConfiguration): boolean => {\n                    return configuration.earthControls;\n                }),\n            distinctUntilChanged(),\n            withLatestFrom(this._navigator.stateService.state$))\n            .subscribe(\n                ([earth, state]: [boolean, State]): void => {\n                    if (earth && state !== State.Earth) {\n                        this._navigator.stateService.earth();\n                    } else if (!earth && state === State.Earth) {\n                        this._navigator.stateService.traverse();\n                    }\n                });\n\n        const direction$: Observable<string> = this._container.renderService.bearing$.pipe(\n            map(\n                (bearing: number): string => {\n                    let direction: string = \"\";\n\n                    if (bearing > 292.5 || bearing <= 67.5) {\n                        direction += \"n\";\n                    }\n\n                    if (bearing > 112.5 && bearing <= 247.5) {\n                        direction += \"s\";\n                    }\n\n                    if (bearing > 22.5 && bearing <= 157.5) {\n                        direction += \"e\";\n                    }\n\n                    if (bearing > 202.5 && bearing <= 337.5) {\n                        direction += \"w\";\n                    }\n\n                    return direction;\n                }),\n            distinctUntilChanged(),\n            publishReplay(1),\n            refCount());\n\n        const hash$: Observable<string> = this._navigator.stateService.reference$.pipe(\n            tap(\n                (): void => {\n                    this._scene.uncache();\n                }),\n            switchMap(\n                (): Observable<string> => {\n                    return this._navigator.stateService.currentNode$.pipe(\n                        map(\n                            (node: Node): string => {\n                                return geohash.encode(node.latLon.lat, node.latLon.lon, 8);\n                            }),\n                        distinctUntilChanged());\n                }),\n            publishReplay(1),\n            refCount());\n\n        const sequencePlay$: Observable<boolean> = observableCombineLatest(\n            this._navigator.playService.playing$,\n            this._navigator.playService.speed$).pipe(\n            map(\n                ([playing, speed]: [boolean, number]): boolean => {\n                    return playing && speed > PlayService.sequenceSpeed;\n                }),\n            distinctUntilChanged(),\n            publishReplay(1),\n            refCount());\n\n        this._addSubscription = observableCombineLatest(\n            this._navigator.stateService.state$.pipe(\n                map(\n                    (state: State): boolean => {\n                        return state === State.Earth;\n                    }),\n                distinctUntilChanged()),\n            hash$,\n            sequencePlay$,\n            direction$).pipe(\n            distinctUntilChanged(\n                (\n                    [e1, h1, s1, d1]: [boolean, string, boolean, string],\n                    [e2, h2, s2, d2]: [boolean, string, boolean, string]): boolean => {\n\n                    if (e1 !== e2) {\n                        return false;\n                    }\n\n                    if (e1) {\n                        return h1 === h2 && s1 === s2;\n                    }\n\n                    return h1 === h2 && s1 === s2 && d1 === d2;\n                }),\n            concatMap(\n                ([earth, hash, sequencePlay, direction]: [boolean, string, boolean, string]): Observable<string[]> => {\n                    if (earth) {\n                        return sequencePlay ?\n                            observableOf([hash]) :\n                            observableOf(this._adjacentComponent(hash, 4));\n                    }\n\n                    return sequencePlay ?\n                        observableOf([hash, geohash.neighbours(hash)[<keyof geohash.Neighbours>direction]]) :\n                        observableOf(this._computeTiles(hash, direction));\n                }),\n            switchMap(\n                (hashes: string[]): Observable<string> => {\n                    return observableFrom(hashes).pipe(\n                        mergeMap(\n                            (h: string): Observable<[string, NodeData[]]> => {\n                                let tile$: Observable<NodeData[]>;\n\n                                if (this._cache.hasTile(h)) {\n                                    tile$ = observableOf(this._cache.getTile(h));\n                                } else if (this._cache.isCachingTile(h)) {\n                                    tile$ = this._cache.cacheTile$(h).pipe(\n                                        last(null, {}),\n                                        switchMap(\n                                            (): Observable<NodeData[]> => {\n                                                return observableOf(this._cache.getTile(h));\n                                            }));\n                                } else {\n                                    tile$ = this._cache.cacheTile$(h);\n                                }\n\n                                return observableCombineLatest(observableOf(h), tile$);\n                            },\n                            1),\n                        map(\n                            ([hash]: [string, NodeData[]]): string => {\n                                return hash;\n                            }));\n                }),\n            concatMap(\n                (hash: string): Observable<[string, ReconstructionData]> => {\n                    let reconstructions$: Observable<ReconstructionData>;\n\n                    if (this._cache.hasReconstructions(hash)) {\n                        reconstructions$ = observableFrom(this._cache.getReconstructions(hash));\n                    } else if (this._cache.isCachingReconstructions(hash)) {\n                        reconstructions$ = this._cache.cacheReconstructions$(hash).pipe(\n                            last(null, {}),\n                            switchMap(\n                                (): Observable<ReconstructionData> => {\n                                    return observableFrom(this._cache.getReconstructions(hash));\n                                }));\n                    } else if (this._cache.hasTile(hash)) {\n                        reconstructions$ = this._cache.cacheReconstructions$(hash);\n                    } else {\n                        reconstructions$ = observableEmpty();\n                    }\n\n                    return observableCombineLatest(observableOf(hash), reconstructions$);\n                }),\n            withLatestFrom(this._navigator.stateService.reference$),\n            tap(\n                ([[hash], reference]: [[string, ReconstructionData], ILatLonAlt]): boolean => {\n                    if (this._scene.hasTile(hash)) {\n                        return;\n                    }\n\n                    this._scene.addTile(this._computeTileBBox(hash, reference), hash);\n                }),\n            filter(\n                ([[hash, data]]: [[string, ReconstructionData], ILatLonAlt]): boolean => {\n                    return !this._scene.hasReconstruction(data.reconstruction.main_shot, hash);\n                }),\n            map(\n                ([[hash, data], reference]: [[string, ReconstructionData], ILatLonAlt]):\n                [ReconstructionData, Transform, number[], string] => {\n                    return [\n                        data,\n                        this._createTransform(data.data, reference),\n                        this._computeOriginalPosition(data.data, reference),\n                        hash];\n                }))\n            .subscribe(\n                ([data, transform, position, hash]: [ReconstructionData, Transform, number[], string]): void => {\n                    this._scene.addReconstruction(\n                        data.reconstruction,\n                        transform,\n                        position,\n                        !!data.data.mergeCC ? data.data.mergeCC.toString() : \"\",\n                        hash);\n                });\n\n        this._cameraVisibilitySubscription = this._configuration$.pipe(\n            map(\n                (configuration: ISpatialDataConfiguration): boolean => {\n                    return configuration.camerasVisible;\n                }),\n            distinctUntilChanged())\n            .subscribe(\n                (visible: boolean): void => {\n                    this._scene.setCameraVisibility(visible);\n                });\n\n        this._pointVisibilitySubscription = this._configuration$.pipe(\n            map(\n                (configuration: ISpatialDataConfiguration): boolean => {\n                    return configuration.pointsVisible;\n                }),\n            distinctUntilChanged())\n            .subscribe(\n                (visible: boolean): void => {\n                    this._scene.setPointVisibility(visible);\n                });\n\n        this._positionVisibilitySubscription = this._configuration$.pipe(\n            map(\n                (configuration: ISpatialDataConfiguration): boolean => {\n                    return configuration.positionsVisible;\n                }),\n            distinctUntilChanged())\n            .subscribe(\n                (visible: boolean): void => {\n                    this._scene.setPositionVisibility(visible);\n                });\n\n        this._tileVisibilitySubscription = this._configuration$.pipe(\n            map(\n                (configuration: ISpatialDataConfiguration): boolean => {\n                    return configuration.tilesVisible;\n                }),\n            distinctUntilChanged())\n            .subscribe(\n                (visible: boolean): void => {\n                    this._scene.setTileVisibility(visible);\n                });\n\n        this._visualizeConnectedComponentSubscription = this._configuration$.pipe(\n            map(\n                (configuration: ISpatialDataConfiguration): boolean => {\n                    return configuration.connectedComponents;\n                }),\n            distinctUntilChanged())\n            .subscribe(\n                (visualize: boolean): void => {\n                    this._scene.setConnectedComponentVisualization(visualize);\n                });\n\n        this._uncacheSubscription = hash$\n            .subscribe(\n                (hash: string): void => {\n                    const keepHashes: string[] = this._adjacentComponent(hash, 4);\n                    this._scene.uncache(keepHashes);\n                    this._cache.uncache(keepHashes);\n                });\n\n        this._moveSubscription = this._navigator.playService.playing$.pipe(\n            switchMap(\n                (playing: boolean): Observable<MouseEvent> => {\n                    return playing ?\n                        observableEmpty() :\n                        this._container.mouseService.dblClick$;\n                }),\n            withLatestFrom(this._container.renderService.renderCamera$),\n            switchMap(\n                ([event, render]: [MouseEvent, RenderCamera]): Observable<Node> => {\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 key: string = this._scene.intersectObjects(viewport, render.perspective);\n\n                    return !!key ?\n                        this._navigator.moveToKey$(key).pipe(\n                            catchError(\n                                (): Observable<Node> => {\n                                    return observableEmpty();\n                                })) :\n                        observableEmpty();\n                }))\n            .subscribe();\n\n        this._renderSubscription = this._navigator.stateService.currentState$.pipe(\n            map(\n                (frame: IFrame): IGLRenderHash => {\n                    const scene: SpatialDataScene = this._scene;\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\n    protected _deactivate(): void {\n        this._cache.uncache();\n        this._scene.uncache();\n\n        this._addSubscription.unsubscribe();\n        this._cameraVisibilitySubscription.unsubscribe();\n        this._earthControlsSubscription.unsubscribe();\n        this._moveSubscription.unsubscribe();\n        this._pointVisibilitySubscription.unsubscribe();\n        this._positionVisibilitySubscription.unsubscribe();\n        this._renderSubscription.unsubscribe();\n        this._tileVisibilitySubscription.unsubscribe();\n        this._uncacheSubscription.unsubscribe();\n        this._visualizeConnectedComponentSubscription.unsubscribe();\n\n        this._navigator.stateService.state$.pipe(\n            first())\n            .subscribe(\n                (state: State): void => {\n                    if (state === State.Earth) {\n                        this._navigator.stateService.traverse();\n                    }\n                });\n    }\n\n    protected _getDefaultConfiguration(): ISpatialDataConfiguration {\n        return { camerasVisible: false, pointsVisible: true, positionsVisible: false, tilesVisible: false };\n    }\n\n    private _adjacentComponent(hash: string, depth: number): string[] {\n        const hashSet: Set<string> = new Set<string>();\n        hashSet.add(hash);\n\n        this._adjacentComponentRecursive(hashSet, [hash], 0, depth);\n\n        return this._setToArray(hashSet);\n    }\n\n    private _adjacentComponentRecursive(\n        hashSet: Set<string>,\n        currentHashes: string[],\n        currentDepth: number,\n        maxDepth: number): void {\n\n        if (currentDepth === maxDepth) {\n            return;\n        }\n\n        const neighbours: string[] = [];\n\n        for (const hash of currentHashes) {\n            const hashNeighbours: geohash.Neighbours = geohash.neighbours(hash);\n\n            for (const direction in hashNeighbours) {\n                if (!hashNeighbours.hasOwnProperty(direction)) {\n                    continue;\n                }\n\n                neighbours.push(hashNeighbours[<keyof geohash.Neighbours>direction]);\n            }\n        }\n\n        const newHashes: string[] = [];\n        for (const neighbour of neighbours) {\n            if (!hashSet.has(neighbour)) {\n                hashSet.add(neighbour);\n                newHashes.push(neighbour);\n            }\n        }\n\n        this._adjacentComponentRecursive(hashSet, newHashes, currentDepth + 1, maxDepth);\n    }\n\n    private _computeOriginalPosition(data: NodeData, reference: ILatLonAlt): number[] {\n        return this._geoCoords.geodeticToEnu(\n            data.originalLat,\n            data.originalLon,\n            data.alt,\n            reference.lat,\n            reference.lon,\n            reference.alt);\n    }\n\n    private _computeTileBBox(hash: string, reference: ILatLonAlt): number[][] {\n        const bounds: geohash.Bounds = geohash.bounds(hash);\n\n        const sw: number[] = this._geoCoords.geodeticToEnu(\n            bounds.sw.lat,\n            bounds.sw.lon,\n            0,\n            reference.lat,\n            reference.lon,\n            reference.alt);\n\n        const ne: number[] = this._geoCoords.geodeticToEnu(\n            bounds.ne.lat,\n            bounds.ne.lon,\n            0,\n            reference.lat,\n            reference.lon,\n            reference.alt);\n\n        return [sw, ne];\n    }\n\n    private _createTransform(data: NodeData, reference: ILatLonAlt): Transform {\n        const translation: number[] = Geo.computeTranslation(\n            { alt: data.alt, lat: data.lat, lon: data.lon },\n            data.rotation,\n            reference);\n\n        const transform: Transform = new Transform(\n            data.orientation,\n            data.width,\n            data.height,\n            data.focal,\n            data.scale,\n            data.gpano,\n            data.rotation,\n            translation,\n            undefined,\n            undefined,\n            data.k1,\n            data.k2);\n\n        return transform;\n    }\n\n    private _computeTiles(hash: string, direction: string): string[] {\n        const hashSet: Set<string> = new Set<string>();\n        const directions: string[] = [\"n\", \"ne\", \"e\", \"se\", \"s\", \"sw\", \"w\", \"nw\"];\n\n        this._computeTilesRecursive(hashSet, hash, direction, directions, 0, 2);\n\n        return this._setToArray(hashSet);\n    }\n\n    private _computeTilesRecursive(\n        hashSet: Set<string>,\n        currentHash: string,\n        direction: string,\n        directions: string[],\n        currentDepth: number,\n        maxDepth: number): void {\n\n        hashSet.add(currentHash);\n\n        if (currentDepth === maxDepth) {\n            return;\n        }\n\n        const neighbours: geohash.Neighbours = geohash.neighbours(currentHash);\n        const directionIndex: number = directions.indexOf(direction);\n        const length: number = directions.length;\n\n        const directionNeighbours: string[] = [\n            neighbours[<keyof geohash.Neighbours>directions[this._modulo((directionIndex - 1), length)]],\n            neighbours[<keyof geohash.Neighbours>direction],\n            neighbours[<keyof geohash.Neighbours>directions[this._modulo((directionIndex + 1), length)]],\n        ];\n\n        for (let directionNeighbour of directionNeighbours) {\n            this._computeTilesRecursive(hashSet, directionNeighbour, direction, directions, currentDepth + 1, maxDepth);\n        }\n    }\n\n    private _modulo(a: number, n: number): number {\n        return ((a % n) + n) % n;\n    }\n\n    private _setToArray<T>(s: Set<T>): T[] {\n        const a: T[] = [];\n\n        s.forEach(\n            (value: T) => {\n                a.push(value);\n            });\n\n        return a;\n    }\n}\n\nComponentService.register(SpatialDataComponent);\nexport default SpatialDataComponent;\n",
+    "import * as geohash from \"latlon-geohash\";\n\nimport {\n    empty as observableEmpty,\n    from as observableFrom,\n    of as observableOf,\n    zip as observableZip,\n    Observable,\n    Subscriber,\n} from \"rxjs\";\n\nimport {\n    mergeMap,\n    catchError,\n    tap,\n    publish,\n    refCount,\n    finalize,\n    map,\n    filter,\n} from \"rxjs/operators\";\n\nimport {\n    IGPano,\n    ILatLon,\n} from \"../../API\";\nimport {\n    IReconstruction,\n} from \"../../Component\";\nimport {\n    AbortMapillaryError,\n} from \"../../Error\";\nimport {\n    GraphService,\n    Node,\n} from \"../../Graph\";\nimport {\n    Urls,\n} from \"../../Utils\";\nimport { CameraProjection } from \"../../api/interfaces/CameraProjection\";\n\nexport type NodeData = {\n    alt: number;\n    cameraProjection: CameraProjection;\n    focal: number;\n    gpano: IGPano;\n    height: number;\n    k1: number;\n    k2: number;\n    key: string,\n    lat: number;\n    lon: number;\n    mergeCC: number;\n    orientation: number;\n    originalLat: number;\n    originalLon: number;\n    rotation: number[];\n    scale: number;\n    width: number;\n};\n\nexport type ReconstructionData = {\n    data: NodeData,\n    reconstruction: IReconstruction,\n};\n\nexport class SpatialDataCache {\n    private _graphService: GraphService;\n\n    private _cacheRequests: { [hash: string]: XMLHttpRequest[] };\n    private _reconstructions: { [hash: string]: ReconstructionData[] };\n    private _tiles: { [hash: string]: NodeData[] };\n\n    private _cachingReconstructions$: { [hash: string]: Observable<ReconstructionData> };\n    private _cachingTiles$: { [hash: string]: Observable<NodeData[]> };\n\n    constructor(graphService: GraphService) {\n        this._graphService = graphService;\n\n        this._tiles = {};\n        this._cacheRequests = {};\n        this._reconstructions = {};\n\n        this._cachingReconstructions$ = {};\n        this._cachingTiles$ = {};\n    }\n\n    public cacheReconstructions$(hash: string): Observable<ReconstructionData> {\n        if (!this.hasTile(hash)) {\n            throw new Error(\"Cannot cache reconstructions of a non-existing tile.\");\n        }\n\n        if (this.hasReconstructions(hash)) {\n            throw new Error(\"Cannot cache reconstructions that already exists.\");\n        }\n\n        if (this.isCachingReconstructions(hash)) {\n            return this._cachingReconstructions$[hash];\n        }\n\n        const tile: NodeData[] = [];\n\n        if (hash in this._reconstructions) {\n            const reconstructionKeys: string[] =\n                this.getReconstructions(hash)\n                    .map(\n                        (reconstruction: ReconstructionData): string => {\n                            return reconstruction.data.key;\n                        });\n\n            for (const node of this.getTile(hash)) {\n                if (reconstructionKeys.indexOf(node.key) === -1) {\n                    tile.push(node);\n                }\n            }\n        } else {\n            tile.push(...this.getTile(hash));\n\n            this._reconstructions[hash] = [];\n        }\n\n        this._cacheRequests[hash] = [];\n        this._cachingReconstructions$[hash] = observableFrom(tile).pipe(\n            mergeMap(\n                (nodeData: NodeData): Observable<[NodeData, IReconstruction]> => {\n                    return !this._cacheRequests[hash] ?\n                        observableEmpty() :\n                        observableZip(\n                            observableOf(nodeData),\n                            this._getAtomicReconstruction(nodeData.key, this._cacheRequests[hash]))\n                            .pipe(\n                                catchError(\n                                    (error: Error): Observable<[NodeData, IReconstruction]> => {\n                                        if (error instanceof AbortMapillaryError) {\n                                            return observableEmpty();\n                                        }\n\n                                        console.error(error);\n\n                                        return observableOf(<[NodeData, IReconstruction]>[nodeData, null]);\n                                    }));\n                },\n                6),\n            map(\n                ([nodeData, reconstruction]: [NodeData, IReconstruction]): ReconstructionData => {\n                    return { data: nodeData, reconstruction: reconstruction };\n                }),\n            filter(\n                (): boolean => {\n                    return hash in this._reconstructions;\n                }),\n            tap(\n                (data: ReconstructionData): void => {\n                    this._reconstructions[hash].push(data);\n                }),\n            filter(\n                (data: ReconstructionData): boolean => {\n                    return !!data.reconstruction;\n                }),\n            finalize(\n                (): void => {\n                    if (hash in this._cachingReconstructions$) {\n                        delete this._cachingReconstructions$[hash];\n                    }\n\n                    if (hash in this._cacheRequests) {\n                        delete this._cacheRequests[hash];\n                    }\n                }),\n            publish(),\n            refCount());\n\n        return this._cachingReconstructions$[hash];\n    }\n\n    public cacheTile$(hash: string): Observable<NodeData[]> {\n        if (hash.length !== 8) {\n            throw new Error(\"Hash needs to be level 8.\");\n        }\n\n        if (this.hasTile(hash)) {\n            throw new Error(\"Cannot cache tile that already exists.\");\n\n        }\n\n        if (this.hasTile(hash)) {\n            return this._cachingTiles$[hash];\n        }\n\n        const bounds: geohash.Bounds = geohash.bounds(hash);\n        const sw: ILatLon = { lat: bounds.sw.lat, lon: bounds.sw.lon };\n        const ne: ILatLon = { lat: bounds.ne.lat, lon: bounds.ne.lon };\n\n        this._tiles[hash] = [];\n        this._cachingTiles$[hash] = this._graphService.cacheBoundingBox$(sw, ne).pipe(\n            catchError(\n                (error: Error): Observable<Node[]> => {\n                    console.error(error);\n\n                    delete this._tiles[hash];\n\n                    return observableEmpty();\n                }),\n            map(\n                (nodes: Node[]): NodeData[] => {\n                    return nodes\n                        .map(\n                            (n: Node): NodeData => {\n                                return this._createNodeData(n);\n                            });\n                }),\n            filter(\n                (): boolean => {\n                    return hash in this._tiles;\n                }),\n            tap(\n                (nodeData: NodeData[]): void => {\n                    this._tiles[hash].push(...nodeData);\n\n                    delete this._cachingTiles$[hash];\n                }),\n            finalize(\n                (): void => {\n                    if (hash in this._cachingTiles$) {\n                        delete this._cachingTiles$[hash];\n                    }\n                }),\n            publish(),\n            refCount());\n\n        return this._cachingTiles$[hash];\n    }\n\n    public isCachingReconstructions(hash: string): boolean {\n        return hash in this._cachingReconstructions$;\n    }\n\n    public isCachingTile(hash: string): boolean {\n        return hash in this._cachingTiles$;\n    }\n\n    public hasReconstructions(hash: string): boolean {\n        return !(hash in this._cachingReconstructions$) &&\n            hash in this._reconstructions &&\n            this._reconstructions[hash].length === this._tiles[hash].length;\n    }\n\n    public hasTile(hash: string): boolean {\n        return !(hash in this._cachingTiles$) && hash in this._tiles;\n    }\n\n    public getReconstructions(hash: string): ReconstructionData[] {\n        return hash in this._reconstructions ?\n            this._reconstructions[hash]\n                .filter(\n                    (data: ReconstructionData): boolean => {\n                        return !!data.reconstruction;\n                    }) :\n            [];\n    }\n\n    public getTile(hash: string): NodeData[] {\n        return hash in this._tiles ? this._tiles[hash] : [];\n    }\n\n    public uncache(keepHashes?: string[]): void {\n        for (let hash of Object.keys(this._cacheRequests)) {\n            if (!!keepHashes && keepHashes.indexOf(hash) !== -1) {\n                continue;\n            }\n\n            for (const request of this._cacheRequests[hash]) {\n                request.abort();\n            }\n\n            delete this._cacheRequests[hash];\n        }\n\n        for (let hash of Object.keys(this._reconstructions)) {\n            if (!!keepHashes && keepHashes.indexOf(hash) !== -1) {\n                continue;\n            }\n\n            delete this._reconstructions[hash];\n        }\n\n        for (let hash of Object.keys(this._tiles)) {\n            if (!!keepHashes && keepHashes.indexOf(hash) !== -1) {\n                continue;\n            }\n\n            delete this._tiles[hash];\n        }\n    }\n\n    private _createNodeData(node: Node): NodeData {\n        return {\n            alt: node.alt,\n            cameraProjection: node.cameraProjection,\n            focal: node.focal,\n            gpano: node.gpano,\n            height: node.height,\n            k1: node.ck1,\n            k2: node.ck2,\n            key: node.key,\n            lat: node.latLon.lat,\n            lon: node.latLon.lon,\n            mergeCC: node.mergeCC,\n            orientation: node.orientation,\n            originalLat: node.originalLatLon.lat,\n            originalLon: node.originalLatLon.lon,\n            rotation: [node.rotation[0], node.rotation[1], node.rotation[2]],\n            scale: node.scale,\n            width: node.width,\n        };\n    }\n\n    private _getAtomicReconstruction(key: string, requests: XMLHttpRequest[]): Observable<IReconstruction> {\n        return Observable.create(\n            (subscriber: Subscriber<IReconstruction>): void => {\n                const xmlHTTP: XMLHttpRequest = new XMLHttpRequest();\n\n                xmlHTTP.open(\"GET\", Urls.atomicReconstruction(key), true);\n                xmlHTTP.responseType = \"json\";\n                xmlHTTP.timeout = 15000;\n\n                xmlHTTP.onload = () => {\n                    if (!xmlHTTP.response) {\n                        subscriber.error(new Error(`Atomic reconstruction does not exist (${key})`));\n                    } else {\n                        subscriber.next(xmlHTTP.response);\n                        subscriber.complete();\n                    }\n                };\n\n                xmlHTTP.onerror = () => {\n                    subscriber.error(new Error(`Failed to get atomic reconstruction (${key})`));\n                };\n\n                xmlHTTP.ontimeout = () => {\n                    subscriber.error(new Error(`Atomic reconstruction request timed out (${key})`));\n                };\n\n                xmlHTTP.onabort = () => {\n                    subscriber.error(new AbortMapillaryError(`Atomic reconstruction request was aborted (${key})`));\n                };\n\n                requests.push(xmlHTTP);\n\n                xmlHTTP.send(null);\n            });\n    }\n}\n\nexport default SpatialDataCache;\n",
+    "import * as geohash from \"latlon-geohash\";\n\nimport {\n    combineLatest as observableCombineLatest,\n    empty as observableEmpty,\n    from as observableFrom,\n    of as observableOf,\n    Observable,\n    Subscription,\n} from \"rxjs\";\n\nimport {\n    catchError,\n    withLatestFrom,\n    map,\n    distinctUntilChanged,\n    concatMap,\n    switchMap,\n    tap,\n    filter,\n    last,\n    mergeMap,\n    first,\n    refCount,\n    publishReplay,\n} from \"rxjs/operators\";\n\nimport {\n    ComponentService,\n    Component,\n    ISpatialDataConfiguration,\n    NodeData,\n    ReconstructionData,\n    SpatialDataCache,\n    SpatialDataScene,\n} from \"../../Component\";\nimport {\n    Geo,\n    GeoCoords,\n    ILatLonAlt,\n    Transform,\n    ViewportCoords,\n} from \"../../Geo\";\nimport {\n    Node,\n} from \"../../Graph\";\nimport {\n    IGLRenderHash,\n    GLRenderStage,\n    RenderCamera,\n} from \"../../Render\";\nimport {\n    IFrame,\n} from \"../../State\";\nimport {\n    Container,\n    Navigator,\n} from \"../../Viewer\";\nimport PlayService from \"../../viewer/PlayService\";\nimport State from \"../../state/State\";\n\nexport class SpatialDataComponent extends Component<ISpatialDataConfiguration> {\n    public static componentName: string = \"spatialData\";\n\n    private _cache: SpatialDataCache;\n    private _scene: SpatialDataScene;\n    private _viewportCoords: ViewportCoords;\n    private _geoCoords: GeoCoords;\n\n    private _addSubscription: Subscription;\n    private _cameraVisibilitySubscription: Subscription;\n    private _earthControlsSubscription: Subscription;\n    private _moveSubscription: Subscription;\n    private _pointVisibilitySubscription: Subscription;\n    private _positionVisibilitySubscription: Subscription;\n    private _renderSubscription: Subscription;\n    private _tileVisibilitySubscription: Subscription;\n    private _uncacheSubscription: Subscription;\n    private _visualizeConnectedComponentSubscription: Subscription;\n\n    constructor(name: string, container: Container, navigator: Navigator) {\n        super(name, container, navigator);\n\n        this._cache = new SpatialDataCache(navigator.graphService);\n        this._scene = new SpatialDataScene(this._getDefaultConfiguration());\n        this._viewportCoords = new ViewportCoords();\n        this._geoCoords = new GeoCoords();\n    }\n\n    protected _activate(): void {\n        this._earthControlsSubscription = this._configuration$.pipe(\n            map(\n                (configuration: ISpatialDataConfiguration): boolean => {\n                    return configuration.earthControls;\n                }),\n            distinctUntilChanged(),\n            withLatestFrom(this._navigator.stateService.state$))\n            .subscribe(\n                ([earth, state]: [boolean, State]): void => {\n                    if (earth && state !== State.Earth) {\n                        this._navigator.stateService.earth();\n                    } else if (!earth && state === State.Earth) {\n                        this._navigator.stateService.traverse();\n                    }\n                });\n\n        const direction$: Observable<string> = this._container.renderService.bearing$.pipe(\n            map(\n                (bearing: number): string => {\n                    let direction: string = \"\";\n\n                    if (bearing > 292.5 || bearing <= 67.5) {\n                        direction += \"n\";\n                    }\n\n                    if (bearing > 112.5 && bearing <= 247.5) {\n                        direction += \"s\";\n                    }\n\n                    if (bearing > 22.5 && bearing <= 157.5) {\n                        direction += \"e\";\n                    }\n\n                    if (bearing > 202.5 && bearing <= 337.5) {\n                        direction += \"w\";\n                    }\n\n                    return direction;\n                }),\n            distinctUntilChanged(),\n            publishReplay(1),\n            refCount());\n\n        const hash$: Observable<string> = this._navigator.stateService.reference$.pipe(\n            tap(\n                (): void => {\n                    this._scene.uncache();\n                }),\n            switchMap(\n                (): Observable<string> => {\n                    return this._navigator.stateService.currentNode$.pipe(\n                        map(\n                            (node: Node): string => {\n                                return geohash.encode(node.latLon.lat, node.latLon.lon, 8);\n                            }),\n                        distinctUntilChanged());\n                }),\n            publishReplay(1),\n            refCount());\n\n        const sequencePlay$: Observable<boolean> = observableCombineLatest(\n            this._navigator.playService.playing$,\n            this._navigator.playService.speed$).pipe(\n            map(\n                ([playing, speed]: [boolean, number]): boolean => {\n                    return playing && speed > PlayService.sequenceSpeed;\n                }),\n            distinctUntilChanged(),\n            publishReplay(1),\n            refCount());\n\n        this._addSubscription = observableCombineLatest(\n            this._navigator.stateService.state$.pipe(\n                map(\n                    (state: State): boolean => {\n                        return state === State.Earth;\n                    }),\n                distinctUntilChanged()),\n            hash$,\n            sequencePlay$,\n            direction$).pipe(\n            distinctUntilChanged(\n                (\n                    [e1, h1, s1, d1]: [boolean, string, boolean, string],\n                    [e2, h2, s2, d2]: [boolean, string, boolean, string]): boolean => {\n\n                    if (e1 !== e2) {\n                        return false;\n                    }\n\n                    if (e1) {\n                        return h1 === h2 && s1 === s2;\n                    }\n\n                    return h1 === h2 && s1 === s2 && d1 === d2;\n                }),\n            concatMap(\n                ([earth, hash, sequencePlay, direction]: [boolean, string, boolean, string]): Observable<string[]> => {\n                    if (earth) {\n                        return sequencePlay ?\n                            observableOf([hash]) :\n                            observableOf(this._adjacentComponent(hash, 4));\n                    }\n\n                    return sequencePlay ?\n                        observableOf([hash, geohash.neighbours(hash)[<keyof geohash.Neighbours>direction]]) :\n                        observableOf(this._computeTiles(hash, direction));\n                }),\n            switchMap(\n                (hashes: string[]): Observable<string> => {\n                    return observableFrom(hashes).pipe(\n                        mergeMap(\n                            (h: string): Observable<[string, NodeData[]]> => {\n                                let tile$: Observable<NodeData[]>;\n\n                                if (this._cache.hasTile(h)) {\n                                    tile$ = observableOf(this._cache.getTile(h));\n                                } else if (this._cache.isCachingTile(h)) {\n                                    tile$ = this._cache.cacheTile$(h).pipe(\n                                        last(null, {}),\n                                        switchMap(\n                                            (): Observable<NodeData[]> => {\n                                                return observableOf(this._cache.getTile(h));\n                                            }));\n                                } else {\n                                    tile$ = this._cache.cacheTile$(h);\n                                }\n\n                                return observableCombineLatest(observableOf(h), tile$);\n                            },\n                            1),\n                        map(\n                            ([hash]: [string, NodeData[]]): string => {\n                                return hash;\n                            }));\n                }),\n            concatMap(\n                (hash: string): Observable<[string, ReconstructionData]> => {\n                    let reconstructions$: Observable<ReconstructionData>;\n\n                    if (this._cache.hasReconstructions(hash)) {\n                        reconstructions$ = observableFrom(this._cache.getReconstructions(hash));\n                    } else if (this._cache.isCachingReconstructions(hash)) {\n                        reconstructions$ = this._cache.cacheReconstructions$(hash).pipe(\n                            last(null, {}),\n                            switchMap(\n                                (): Observable<ReconstructionData> => {\n                                    return observableFrom(this._cache.getReconstructions(hash));\n                                }));\n                    } else if (this._cache.hasTile(hash)) {\n                        reconstructions$ = this._cache.cacheReconstructions$(hash);\n                    } else {\n                        reconstructions$ = observableEmpty();\n                    }\n\n                    return observableCombineLatest(observableOf(hash), reconstructions$);\n                }),\n            withLatestFrom(this._navigator.stateService.reference$),\n            tap(\n                ([[hash], reference]: [[string, ReconstructionData], ILatLonAlt]): boolean => {\n                    if (this._scene.hasTile(hash)) {\n                        return;\n                    }\n\n                    this._scene.addTile(this._computeTileBBox(hash, reference), hash);\n                }),\n            filter(\n                ([[hash, data]]: [[string, ReconstructionData], ILatLonAlt]): boolean => {\n                    return !this._scene.hasReconstruction(data.reconstruction.main_shot, hash);\n                }),\n            map(\n                ([[hash, data], reference]: [[string, ReconstructionData], ILatLonAlt]):\n                [ReconstructionData, Transform, number[], string] => {\n                    return [\n                        data,\n                        this._createTransform(data.data, reference),\n                        this._computeOriginalPosition(data.data, reference),\n                        hash];\n                }))\n            .subscribe(\n                ([data, transform, position, hash]: [ReconstructionData, Transform, number[], string]): void => {\n                    this._scene.addReconstruction(\n                        data.reconstruction,\n                        transform,\n                        position,\n                        !!data.data.mergeCC ? data.data.mergeCC.toString() : \"\",\n                        hash);\n                });\n\n        this._cameraVisibilitySubscription = this._configuration$.pipe(\n            map(\n                (configuration: ISpatialDataConfiguration): boolean => {\n                    return configuration.camerasVisible;\n                }),\n            distinctUntilChanged())\n            .subscribe(\n                (visible: boolean): void => {\n                    this._scene.setCameraVisibility(visible);\n                });\n\n        this._pointVisibilitySubscription = this._configuration$.pipe(\n            map(\n                (configuration: ISpatialDataConfiguration): boolean => {\n                    return configuration.pointsVisible;\n                }),\n            distinctUntilChanged())\n            .subscribe(\n                (visible: boolean): void => {\n                    this._scene.setPointVisibility(visible);\n                });\n\n        this._positionVisibilitySubscription = this._configuration$.pipe(\n            map(\n                (configuration: ISpatialDataConfiguration): boolean => {\n                    return configuration.positionsVisible;\n                }),\n            distinctUntilChanged())\n            .subscribe(\n                (visible: boolean): void => {\n                    this._scene.setPositionVisibility(visible);\n                });\n\n        this._tileVisibilitySubscription = this._configuration$.pipe(\n            map(\n                (configuration: ISpatialDataConfiguration): boolean => {\n                    return configuration.tilesVisible;\n                }),\n            distinctUntilChanged())\n            .subscribe(\n                (visible: boolean): void => {\n                    this._scene.setTileVisibility(visible);\n                });\n\n        this._visualizeConnectedComponentSubscription = this._configuration$.pipe(\n            map(\n                (configuration: ISpatialDataConfiguration): boolean => {\n                    return configuration.connectedComponents;\n                }),\n            distinctUntilChanged())\n            .subscribe(\n                (visualize: boolean): void => {\n                    this._scene.setConnectedComponentVisualization(visualize);\n                });\n\n        this._uncacheSubscription = hash$\n            .subscribe(\n                (hash: string): void => {\n                    const keepHashes: string[] = this._adjacentComponent(hash, 4);\n                    this._scene.uncache(keepHashes);\n                    this._cache.uncache(keepHashes);\n                });\n\n        this._moveSubscription = this._navigator.playService.playing$.pipe(\n            switchMap(\n                (playing: boolean): Observable<MouseEvent> => {\n                    return playing ?\n                        observableEmpty() :\n                        this._container.mouseService.dblClick$;\n                }),\n            withLatestFrom(this._container.renderService.renderCamera$),\n            switchMap(\n                ([event, render]: [MouseEvent, RenderCamera]): Observable<Node> => {\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 key: string = this._scene.intersectObjects(viewport, render.perspective);\n\n                    return !!key ?\n                        this._navigator.moveToKey$(key).pipe(\n                            catchError(\n                                (): Observable<Node> => {\n                                    return observableEmpty();\n                                })) :\n                        observableEmpty();\n                }))\n            .subscribe();\n\n        this._renderSubscription = this._navigator.stateService.currentState$.pipe(\n            map(\n                (frame: IFrame): IGLRenderHash => {\n                    const scene: SpatialDataScene = this._scene;\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\n    protected _deactivate(): void {\n        this._cache.uncache();\n        this._scene.uncache();\n\n        this._addSubscription.unsubscribe();\n        this._cameraVisibilitySubscription.unsubscribe();\n        this._earthControlsSubscription.unsubscribe();\n        this._moveSubscription.unsubscribe();\n        this._pointVisibilitySubscription.unsubscribe();\n        this._positionVisibilitySubscription.unsubscribe();\n        this._renderSubscription.unsubscribe();\n        this._tileVisibilitySubscription.unsubscribe();\n        this._uncacheSubscription.unsubscribe();\n        this._visualizeConnectedComponentSubscription.unsubscribe();\n\n        this._navigator.stateService.state$.pipe(\n            first())\n            .subscribe(\n                (state: State): void => {\n                    if (state === State.Earth) {\n                        this._navigator.stateService.traverse();\n                    }\n                });\n    }\n\n    protected _getDefaultConfiguration(): ISpatialDataConfiguration {\n        return { camerasVisible: false, pointsVisible: true, positionsVisible: false, tilesVisible: false };\n    }\n\n    private _adjacentComponent(hash: string, depth: number): string[] {\n        const hashSet: Set<string> = new Set<string>();\n        hashSet.add(hash);\n\n        this._adjacentComponentRecursive(hashSet, [hash], 0, depth);\n\n        return this._setToArray(hashSet);\n    }\n\n    private _adjacentComponentRecursive(\n        hashSet: Set<string>,\n        currentHashes: string[],\n        currentDepth: number,\n        maxDepth: number): void {\n\n        if (currentDepth === maxDepth) {\n            return;\n        }\n\n        const neighbours: string[] = [];\n\n        for (const hash of currentHashes) {\n            const hashNeighbours: geohash.Neighbours = geohash.neighbours(hash);\n\n            for (const direction in hashNeighbours) {\n                if (!hashNeighbours.hasOwnProperty(direction)) {\n                    continue;\n                }\n\n                neighbours.push(hashNeighbours[<keyof geohash.Neighbours>direction]);\n            }\n        }\n\n        const newHashes: string[] = [];\n        for (const neighbour of neighbours) {\n            if (!hashSet.has(neighbour)) {\n                hashSet.add(neighbour);\n                newHashes.push(neighbour);\n            }\n        }\n\n        this._adjacentComponentRecursive(hashSet, newHashes, currentDepth + 1, maxDepth);\n    }\n\n    private _computeOriginalPosition(data: NodeData, reference: ILatLonAlt): number[] {\n        return this._geoCoords.geodeticToEnu(\n            data.originalLat,\n            data.originalLon,\n            data.alt,\n            reference.lat,\n            reference.lon,\n            reference.alt);\n    }\n\n    private _computeTileBBox(hash: string, reference: ILatLonAlt): number[][] {\n        const bounds: geohash.Bounds = geohash.bounds(hash);\n\n        const sw: number[] = this._geoCoords.geodeticToEnu(\n            bounds.sw.lat,\n            bounds.sw.lon,\n            0,\n            reference.lat,\n            reference.lon,\n            reference.alt);\n\n        const ne: number[] = this._geoCoords.geodeticToEnu(\n            bounds.ne.lat,\n            bounds.ne.lon,\n            0,\n            reference.lat,\n            reference.lon,\n            reference.alt);\n\n        return [sw, ne];\n    }\n\n    private _createTransform(data: NodeData, reference: ILatLonAlt): Transform {\n        const translation: number[] = Geo.computeTranslation(\n            { alt: data.alt, lat: data.lat, lon: data.lon },\n            data.rotation,\n            reference);\n\n        const transform: Transform = new Transform(\n            data.orientation,\n            data.width,\n            data.height,\n            data.focal,\n            data.scale,\n            data.gpano,\n            data.rotation,\n            translation,\n            undefined,\n            undefined,\n            data.k1,\n            data.k2,\n            data.cameraProjection);\n\n        return transform;\n    }\n\n    private _computeTiles(hash: string, direction: string): string[] {\n        const hashSet: Set<string> = new Set<string>();\n        const directions: string[] = [\"n\", \"ne\", \"e\", \"se\", \"s\", \"sw\", \"w\", \"nw\"];\n\n        this._computeTilesRecursive(hashSet, hash, direction, directions, 0, 2);\n\n        return this._setToArray(hashSet);\n    }\n\n    private _computeTilesRecursive(\n        hashSet: Set<string>,\n        currentHash: string,\n        direction: string,\n        directions: string[],\n        currentDepth: number,\n        maxDepth: number): void {\n\n        hashSet.add(currentHash);\n\n        if (currentDepth === maxDepth) {\n            return;\n        }\n\n        const neighbours: geohash.Neighbours = geohash.neighbours(currentHash);\n        const directionIndex: number = directions.indexOf(direction);\n        const length: number = directions.length;\n\n        const directionNeighbours: string[] = [\n            neighbours[<keyof geohash.Neighbours>directions[this._modulo((directionIndex - 1), length)]],\n            neighbours[<keyof geohash.Neighbours>direction],\n            neighbours[<keyof geohash.Neighbours>directions[this._modulo((directionIndex + 1), length)]],\n        ];\n\n        for (let directionNeighbour of directionNeighbours) {\n            this._computeTilesRecursive(hashSet, directionNeighbour, direction, directions, currentDepth + 1, maxDepth);\n        }\n    }\n\n    private _modulo(a: number, n: number): number {\n        return ((a % n) + n) % n;\n    }\n\n    private _setToArray<T>(s: Set<T>): T[] {\n        const a: T[] = [];\n\n        s.forEach(\n            (value: T) => {\n                a.push(value);\n            });\n\n        return a;\n    }\n}\n\nComponentService.register(SpatialDataComponent);\nexport default SpatialDataComponent;\n",
     "import * as THREE from \"three\";\n\nimport {\n    IReconstruction,\n    IReconstructionPoint,\n    ISpatialDataConfiguration,\n} from \"../../Component\";\nimport {\n    Transform,\n} from \"../../Geo\";\n\nexport class SpatialDataScene {\n    private _scene: THREE.Scene;\n    private _raycaster: THREE.Raycaster;\n\n    private _connectedComponentColors: { [id: string]: string };\n    private _needsRender: boolean;\n    private _interactiveObjects: THREE.Object3D[];\n    private _reconstructions: {\n        [hash: string]: {\n            cameraKeys: { [id: string]: string };\n            cameras: THREE.Object3D;\n            connectedComponents: { [id: string]: THREE.Object3D[] };\n            keys: string[];\n            points: THREE.Object3D;\n            positions: THREE.Object3D;\n        };\n    };\n\n    private _tiles: { [hash: string]: THREE.Object3D };\n\n    private _camerasVisible: boolean;\n    private _pointsVisible: boolean;\n    private _positionsVisible: boolean;\n    private _tilesVisible: boolean;\n    private _visualizeConnectedComponents: boolean;\n\n    constructor(configuration: ISpatialDataConfiguration, scene?: THREE.Scene, raycaster?: THREE.Raycaster) {\n        this._scene = !!scene ? scene : new THREE.Scene();\n        this._raycaster = !!raycaster ? raycaster : new THREE.Raycaster(undefined, undefined, 0.8);\n\n        this._connectedComponentColors = {};\n        this._needsRender = false;\n        this._interactiveObjects = [];\n        this._reconstructions = {};\n        this._tiles = {};\n\n        this._camerasVisible = configuration.camerasVisible;\n        this._pointsVisible = configuration.pointsVisible;\n        this._positionsVisible = configuration.positionsVisible;\n        this._tilesVisible = configuration.tilesVisible;\n        this._visualizeConnectedComponents = configuration.connectedComponents;\n    }\n\n    public get needsRender(): boolean {\n        return this._needsRender;\n    }\n\n    public addReconstruction(\n        reconstruction: IReconstruction,\n        transform: Transform,\n        originalPosition: number[],\n        connectedComponent: string,\n        hash: string): void {\n\n        if (!(hash in this._reconstructions)) {\n            this._reconstructions[hash] = {\n                cameraKeys: {},\n                cameras: new THREE.Object3D(),\n                connectedComponents: {},\n                keys: [],\n                points: new THREE.Object3D(),\n                positions: new THREE.Object3D(),\n            };\n\n            this._reconstructions[hash].cameras.visible = this._camerasVisible;\n            this._reconstructions[hash].points.visible = this._pointsVisible;\n            this._reconstructions[hash].positions.visible = this._positionsVisible;\n\n            this._scene.add(\n                this._reconstructions[hash].cameras,\n                this._reconstructions[hash].points,\n                this._reconstructions[hash].positions);\n        }\n\n        if (!(connectedComponent in this._reconstructions[hash].connectedComponents)) {\n            this._reconstructions[hash].connectedComponents[connectedComponent] = [];\n        }\n\n        if (transform.hasValidScale) {\n            this._reconstructions[hash].points.add(this._createPoints(reconstruction, transform));\n        }\n\n        const camera: THREE.Object3D = this._createCamera(transform);\n        this._reconstructions[hash].cameras.add(camera);\n        for (const child of camera.children) {\n            this._reconstructions[hash].cameraKeys[child.uuid] = reconstruction.main_shot;\n            this._interactiveObjects.push(child);\n        }\n\n        this._reconstructions[hash].connectedComponents[connectedComponent].push(camera);\n\n        const color: string = this._getColor(connectedComponent, this._visualizeConnectedComponents);\n        this._setCameraColor(color, camera);\n\n        this._reconstructions[hash].positions.add(this._createPosition(transform, originalPosition));\n\n        this._reconstructions[hash].keys.push(reconstruction.main_shot);\n\n        this._needsRender = true;\n    }\n\n    public addTile(tileBBox: number[][], hash: string): void {\n        if (this.hasTile(hash)) {\n            return;\n        }\n\n        const sw: number[] = tileBBox[0];\n        const ne: number[] = tileBBox[1];\n\n        const geometry: THREE.Geometry = new THREE.Geometry();\n        geometry.vertices.push(\n            new THREE.Vector3().fromArray(sw),\n            new THREE.Vector3(sw[0], ne[1], (sw[2] + ne[2]) / 2),\n            new THREE.Vector3().fromArray(ne),\n            new THREE.Vector3(ne[0], sw[1], (sw[2] + ne[2]) / 2),\n            new THREE.Vector3().fromArray(sw));\n\n        const tile: THREE.Object3D = new THREE.Line(geometry, new THREE.LineBasicMaterial());\n\n        this._tiles[hash] = new THREE.Object3D();\n        this._tiles[hash].visible = this._tilesVisible;\n        this._tiles[hash].add(tile);\n        this._scene.add(this._tiles[hash]);\n\n        this._needsRender = true;\n    }\n\n    public uncache(keepHashes?: string[]): void {\n        for (const hash of Object.keys(this._reconstructions)) {\n            if (!!keepHashes && keepHashes.indexOf(hash) !== -1) {\n                continue;\n            }\n\n            this._disposeReconstruction(hash);\n        }\n\n        for (const hash of Object.keys(this._tiles)) {\n            if (!!keepHashes && keepHashes.indexOf(hash) !== -1) {\n                continue;\n            }\n\n            this._disposeTile(hash);\n        }\n\n        this._needsRender = true;\n    }\n\n    public hasReconstruction(key: string, hash: string): boolean {\n        return hash in this._reconstructions && this._reconstructions[hash].keys.indexOf(key) !== -1;\n    }\n\n    public hasTile(hash: string): boolean {\n        return hash in this._tiles;\n    }\n\n    public intersectObjects([viewportX, viewportY]: number[], camera: THREE.Camera): string {\n        if (!this._camerasVisible) {\n            return null;\n        }\n\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            for (const hash in this._reconstructions) {\n                if (!this._reconstructions.hasOwnProperty(hash)) {\n                    continue;\n                }\n\n                if (intersect.object.uuid in this._reconstructions[hash].cameraKeys) {\n                    return this._reconstructions[hash].cameraKeys[intersect.object.uuid];\n                }\n            }\n        }\n\n        return null;\n    }\n\n    public setCameraVisibility(visible: boolean): void {\n        if (visible === this._camerasVisible) {\n            return;\n        }\n\n        for (const hash in this._reconstructions) {\n            if (!this._reconstructions.hasOwnProperty(hash)) {\n                continue;\n            }\n\n            this._reconstructions[hash].cameras.visible = visible;\n        }\n\n        this._camerasVisible = visible;\n        this._needsRender = true;\n    }\n\n    public setPointVisibility(visible: boolean): void {\n        if (visible === this._pointsVisible) {\n            return;\n        }\n\n        for (const hash in this._reconstructions) {\n            if (!this._reconstructions.hasOwnProperty(hash)) {\n                continue;\n            }\n\n            this._reconstructions[hash].points.visible = visible;\n        }\n\n        this._pointsVisible = visible;\n        this._needsRender = true;\n\n    }\n\n    public setPositionVisibility(visible: boolean): void {\n        if (visible === this._positionsVisible) {\n            return;\n        }\n\n        for (const hash in this._reconstructions) {\n            if (!this._reconstructions.hasOwnProperty(hash)) {\n                continue;\n            }\n\n            this._reconstructions[hash].positions.visible = visible;\n        }\n\n        this._positionsVisible = visible;\n        this._needsRender = true;\n    }\n\n    public setTileVisibility(visible: boolean): void {\n        if (visible === this._tilesVisible) {\n            return;\n        }\n\n        for (const hash in this._tiles) {\n            if (!this._tiles.hasOwnProperty(hash)) {\n                continue;\n            }\n\n            this._tiles[hash].visible = visible;\n        }\n\n        this._tilesVisible = visible;\n        this._needsRender = true;\n    }\n\n    public setConnectedComponentVisualization(visualize: boolean): void {\n        if (visualize === this._visualizeConnectedComponents) {\n            return;\n        }\n\n        for (const hash in this._reconstructions) {\n            if (!this._reconstructions.hasOwnProperty(hash)) {\n                continue;\n            }\n\n            const connectedComponents: { [id: number]: THREE.Object3D[] } =\n                this._reconstructions[hash].connectedComponents;\n\n            for (const connectedComponent in connectedComponents) {\n                if (!connectedComponents.hasOwnProperty(connectedComponent)) {\n                    continue;\n                }\n\n                const color: string = this._getColor(connectedComponent, visualize);\n\n                for (const camera of connectedComponents[connectedComponent]) {\n                    this._setCameraColor(color, camera);\n                }\n            }\n        }\n\n        this._visualizeConnectedComponents = visualize;\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    private _arrayToFloatArray(a: number[][], columns: number): Float32Array {\n        const n: number = a.length;\n        const f: Float32Array = new Float32Array(n * columns);\n\n        for (let i: number = 0; i < n; i++) {\n            const item: number[] = a[i];\n            const index: number = 3 * i;\n\n            f[index + 0] = item[0];\n            f[index + 1] = item[1];\n            f[index + 2] = item[2];\n        }\n\n        return f;\n    }\n\n    private _createAxis(transform: Transform): THREE.Object3D {\n        const north: number[] = transform.unprojectBasic([0.5, 0], 0.22);\n        const south: number[] = transform.unprojectBasic([0.5, 1], 0.16);\n\n        const axis: THREE.BufferGeometry = new THREE.BufferGeometry();\n        axis.addAttribute(\"position\", new THREE.BufferAttribute(this._arrayToFloatArray([north, south], 3), 3));\n\n        return new THREE.Line(axis, new THREE.LineBasicMaterial());\n    }\n\n    private _createCamera(transform: Transform): THREE.Object3D {\n        return !!transform.gpano ?\n            this._createPanoCamera(transform) :\n            this._createPrespectiveCamera(transform);\n    }\n\n    private _createDiagonals(transform: Transform, depth: number): THREE.Object3D {\n        const origin: number [] = transform.unprojectBasic([0, 0], 0, true);\n        const topLeft: number[] = transform.unprojectBasic([0, 0], depth, true);\n        const topRight: number[] = transform.unprojectBasic([1, 0], depth, true);\n        const bottomRight: number[] = transform.unprojectBasic([1, 1], depth, true);\n        const bottomLeft: number[] = transform.unprojectBasic([0, 1], depth, true);\n\n        const vertices: number[][] = [\n            origin, topLeft,\n            origin, topRight,\n            origin, bottomRight,\n            origin, bottomLeft,\n        ];\n\n        const diagonals: THREE.BufferGeometry = new THREE.BufferGeometry();\n        diagonals.addAttribute(\"position\", new THREE.BufferAttribute(this._arrayToFloatArray(vertices, 3), 3));\n\n        return new THREE.LineSegments(diagonals, new THREE.LineBasicMaterial());\n    }\n\n    private _createFrame(transform: Transform, depth: number): THREE.Object3D {\n        const vertices2d: number[][] = [];\n        vertices2d.push(...this._subsample([0, 1], [0, 0], 20));\n        vertices2d.push(...this._subsample([0, 0], [1, 0], 20));\n        vertices2d.push(...this._subsample([1, 0], [1, 1], 20));\n\n        const vertices3d: number[][] = vertices2d\n            .map(\n                (basic: number[]): number[] => {\n                    return transform.unprojectBasic(basic, depth, true);\n                });\n\n        const frame: THREE.BufferGeometry = new THREE.BufferGeometry();\n        frame.addAttribute(\"position\", new THREE.BufferAttribute(this._arrayToFloatArray(vertices3d, 3), 3));\n\n        return new THREE.Line(frame, new THREE.LineBasicMaterial());\n    }\n\n    private _createLatitude(basicY: number, numVertices: number, transform: Transform): THREE.Object3D {\n        const positions: Float32Array = new Float32Array((numVertices + 1) * 3);\n\n        for (let i: number = 0; i <= numVertices; i++) {\n            const position: number[] = transform.unprojectBasic([i / numVertices, basicY], 0.16);\n            const index: number = 3 * i;\n\n            positions[index + 0] = position[0];\n            positions[index + 1] = position[1];\n            positions[index + 2] = position[2];\n        }\n\n        const latitude: THREE.BufferGeometry = new THREE.BufferGeometry();\n        latitude.addAttribute(\"position\", new THREE.BufferAttribute(positions, 3));\n\n        return new THREE.Line(latitude, new THREE.LineBasicMaterial());\n    }\n\n    private _createLongitude(basicX: number, numVertices: number, transform: Transform): THREE.Object3D {\n        const positions: Float32Array = new Float32Array((numVertices + 1) * 3);\n\n        for (let i: number = 0; i <= numVertices; i++) {\n            const position: number[] = transform.unprojectBasic([basicX, i / numVertices], 0.16);\n            const index: number = 3 * i;\n\n            positions[index + 0] = position[0];\n            positions[index + 1] = position[1];\n            positions[index + 2] = position[2];\n        }\n\n        const latitude: THREE.BufferGeometry = new THREE.BufferGeometry();\n        latitude.addAttribute(\"position\", new THREE.BufferAttribute(positions, 3));\n\n        return new THREE.Line(latitude, new THREE.LineBasicMaterial());\n    }\n\n    private _createPanoCamera(transform: Transform): THREE.Object3D {\n        const camera: THREE.Object3D = new THREE.Object3D();\n\n        camera.children.push(this._createAxis(transform));\n        camera.children.push(this._createLatitude(0.5, 10, transform));\n        camera.children.push(this._createLongitude(0, 6, transform));\n        camera.children.push(this._createLongitude(0.25, 6, transform));\n        camera.children.push(this._createLongitude(0.5, 6, transform));\n        camera.children.push(this._createLongitude(0.75, 6, transform));\n\n        return camera;\n    }\n\n    private _createPoints(reconstruction: IReconstruction, transform: Transform): THREE.Object3D {\n        const srtInverse: THREE.Matrix4 = new THREE.Matrix4().getInverse(transform.srt);\n        const points: IReconstructionPoint[] = Object\n            .keys(reconstruction.points)\n            .map(\n                (key: string): IReconstructionPoint => {\n                    return reconstruction.points[key];\n                });\n\n        const numPoints: number = points.length;\n        const positions: Float32Array = new Float32Array(numPoints * 3);\n        const colors: Float32Array = new Float32Array(numPoints * 3);\n\n        for (let i: number = 0; i < numPoints; i++) {\n            const index: number = 3 * i;\n\n            const coords: number[] = points[i].coordinates;\n            const point: THREE.Vector3 = new THREE.Vector3(coords[0], coords[1], coords[2])\n                .applyMatrix4(srtInverse);\n\n            positions[index + 0] = point.x;\n            positions[index + 1] = point.y;\n            positions[index + 2] = point.z;\n\n            const color: number[] = points[i].color;\n            colors[index + 0] = color[0] / 255.0;\n            colors[index + 1] = color[1] / 255.0;\n            colors[index + 2] = color[2] / 255.0;\n        }\n\n        const geometry: THREE.BufferGeometry = new THREE.BufferGeometry();\n        geometry.addAttribute(\"position\", new THREE.BufferAttribute(positions, 3));\n        geometry.addAttribute(\"color\", new THREE.BufferAttribute(colors, 3));\n\n        const material: THREE.PointsMaterial = new THREE.PointsMaterial({\n            size: 0.1,\n            vertexColors: THREE.VertexColors,\n        });\n\n        return new THREE.Points(geometry, material);\n    }\n\n    private _createPosition(transform: Transform, originalPosition: number[]): THREE.Object3D {\n        const computedPosition: number[] = transform.unprojectBasic([0, 0], 0);\n        const vertices: number[][] = [originalPosition, computedPosition];\n        const geometry: THREE.BufferGeometry = new THREE.BufferGeometry();\n        geometry.addAttribute(\"position\", new THREE.BufferAttribute(this._arrayToFloatArray(vertices, 3), 3));\n\n        return new THREE.Line(\n            geometry,\n            new THREE.LineBasicMaterial({ color: new THREE.Color(1, 0, 0) }));\n    }\n\n    private _createPrespectiveCamera(transform: Transform): THREE.Object3D {\n        const depth: number = 0.2;\n        const camera: THREE.Object3D = new THREE.Object3D();\n\n        camera.children.push(this._createDiagonals(transform, depth));\n        camera.children.push(this._createFrame(transform, depth));\n\n        return camera;\n    }\n\n    private _disposeCameras(hash: string): void {\n        const tileCameras: THREE.Object3D = this._reconstructions[hash].cameras;\n\n        for (const camera of tileCameras.children.slice()) {\n            for (const child of camera.children) {\n                (<THREE.Line>child).geometry.dispose();\n                (<THREE.Line>child).material.dispose();\n\n                const index: number = this._interactiveObjects.indexOf(child);\n                if (index !== -1) {\n                    this._interactiveObjects.splice(index, 1);\n                } else {\n                    console.warn(`Object does not exist (${child.id}) for ${hash}`);\n                }\n            }\n\n            tileCameras.remove(camera);\n        }\n\n        this._scene.remove(tileCameras);\n    }\n\n    private _disposePoints(hash: string): void {\n        const tilePoints: THREE.Object3D = this._reconstructions[hash].points;\n\n        for (const points of tilePoints.children.slice()) {\n            (<THREE.Points>points).geometry.dispose();\n            (<THREE.Points>points).material.dispose();\n\n            tilePoints.remove(points);\n        }\n\n        this._scene.remove(tilePoints);\n    }\n\n    private _disposePositions(hash: string): void {\n        const tilePositions: THREE.Object3D = this._reconstructions[hash].positions;\n\n        for (const position of tilePositions.children.slice()) {\n            (<THREE.Points>position).geometry.dispose();\n            (<THREE.Points>position).material.dispose();\n\n            tilePositions.remove(position);\n        }\n\n        this._scene.remove(tilePositions);\n    }\n\n    private _disposeReconstruction(hash: string): void {\n        this._disposeCameras(hash);\n        this._disposePoints(hash);\n        this._disposePositions(hash);\n\n        delete this._reconstructions[hash];\n    }\n\n    private _disposeTile(hash: string): void {\n        const tile: THREE.Object3D = this._tiles[hash];\n\n        for (const line of tile.children.slice()) {\n            (<THREE.Line>line).geometry.dispose();\n            (<THREE.Line>line).material.dispose();\n\n            tile.remove(line);\n        }\n\n        this._scene.remove(tile);\n\n        delete this._tiles[hash];\n    }\n\n    private _getColor(connectedComponent: string, visualizeConnectedComponents: boolean): string {\n        return visualizeConnectedComponents ?\n            this._getConnectedComponentColor(connectedComponent) :\n            \"#FFFFFF\";\n    }\n\n    private _getConnectedComponentColor(connectedComponent: string): string {\n        if (!(connectedComponent in this._connectedComponentColors)) {\n            this._connectedComponentColors[connectedComponent] = this._randomColor();\n        }\n\n        return this._connectedComponentColors[connectedComponent];\n    }\n\n    private _interpolate(a: number, b: number, alpha: number): number {\n        return a + alpha * (b - a);\n    }\n\n    private _randomColor(): string {\n        return `hsl(${Math.floor(360 * Math.random())}, 100%, 65%)`;\n    }\n\n    private _setCameraColor(color: string, camera: THREE.Object3D): void {\n        for (const child of camera.children) {\n            (<THREE.LineBasicMaterial>(<THREE.Line>child).material).color = new THREE.Color(color);\n        }\n    }\n\n    private _subsample(p1: number[], p2: number[], subsamples: number): number[][] {\n        if (subsamples < 1) {\n            return [p1, p2];\n        }\n\n        const samples: number[][] = [];\n\n        for (let i: number = 0; i <= subsamples + 1; i++) {\n            const p: number[] = [];\n\n            for (let j: number = 0; j < 3; j++) {\n                p.push(this._interpolate(p1[j], p2[j], i / (subsamples + 1)));\n            }\n\n            samples.push(p);\n        }\n\n        return samples;\n    }\n}\n\nexport default SpatialDataScene;\n",
     "export {GeometryTagError} from \"./error/GeometryTagError\";\nexport {PointGeometry} from \"./geometry/PointGeometry\";\nexport {RectGeometry} from \"./geometry/RectGeometry\";\nexport {PolygonGeometry} from \"./geometry/PolygonGeometry\";\nexport {IOutlineTagOptions} from \"./interfaces/IOutlineTagOptions\";\nexport {OutlineTag} from \"./tag/OutlineTag\";\nexport {SpotTag} from \"./tag/SpotTag\";\nexport {TagDomain} from \"./tag/TagDomain\";\nexport {TagComponent} from \"./TagComponent\";\nexport {TagMode} from \"./TagMode\";\n",
     "import {\n    combineLatest as observableCombineLatest,\n    empty as observableEmpty,\n    merge as observableMerge,\n    from as observableFrom,\n    Observable,\n    Subscription,\n} from \"rxjs\";\n\nimport {\n    startWith,\n    first,\n    tap,\n    map,\n    share,\n    skipWhile,\n    filter,\n    mergeMap,\n    refCount,\n    publishReplay,\n    switchMap,\n    distinctUntilChanged,\n} from \"rxjs/operators\";\n\nimport * as when from \"when\";\n\nimport {\n    ComponentService,\n    Component,\n    CreateHandlerBase,\n    CreatePointHandler,\n    CreatePolygonHandler,\n    CreateRectHandler,\n    CreateRectDragHandler,\n    EditVertexHandler,\n    Geometry,\n    ITagConfiguration,\n    OutlineCreateTag,\n    RenderTag,\n    Tag,\n    TagCreator,\n    TagDOMRenderer,\n    TagMode,\n    TagScene,\n    TagSet,\n} from \"../../Component\";\nimport {\n    Transform,\n    ViewportCoords,\n} from \"../../Geo\";\nimport {\n    GLRenderStage,\n    IGLRenderHash,\n    ISize,\n    IVNodeHash,\n    RenderCamera,\n} from \"../../Render\";\nimport {IFrame} from \"../../State\";\nimport {\n    Container,\n    ISpriteAtlas,\n    Navigator,\n} from \"../../Viewer\";\n\n/**\n * @class TagComponent\n *\n * @classdesc Component for showing and editing tags with different\n * geometries composed from 2D basic image coordinates (see the\n * {@link Viewer} class documentation for more information about coordinate\n * systems).\n *\n * The `add` method is used for adding new tags or replacing\n * tags already in the set. Tags are removed by id.\n *\n * If a tag already in the set has the same\n * id as one of the tags added, the old tag will be removed and\n * the added tag will take its place.\n *\n * The tag component mode can be set to either be non interactive or\n * to be in creating mode of a certain geometry type.\n *\n * The tag properties can be updated at any time and the change will\n * be visibile immediately.\n *\n * Tags are only relevant to a single image because they are based on\n * 2D basic image coordinates. Tags related to a certain image should\n * be removed when the viewer is moved to another node.\n *\n * To retrive and use the tag component\n *\n * @example\n * ```\n * var viewer = new Mapillary.Viewer(\n *     \"<element-id>\",\n *     \"<client-id>\",\n *     \"<my key>\",\n *     { component: { tag: true } });\n *\n * var tagComponent = viewer.getComponent(\"tag\");\n * ```\n */\nexport class TagComponent extends Component<ITagConfiguration> {\n    /** @inheritdoc */\n    public static componentName: string = \"tag\";\n\n    /**\n     * Event fired when an interaction to create a geometry ends.\n     *\n     * @description A create interaction can by a geometry being created\n     * or by the creation being aborted.\n     *\n     * @event TagComponent#creategeometryend\n     * @type {TagComponent} Tag component.\n     * @example\n     * ```\n     * tagComponent.on(\"creategeometryend\", function(component) {\n     *     console.log(component);\n     * });\n     * ```\n     */\n    public static creategeometryend: string = \"creategeometryend\";\n\n    /**\n     * Event fired when an interaction to create a geometry starts.\n     *\n     * @description A create interaction starts when the first vertex\n     * is created in the geometry.\n     *\n     * @event TagComponent#creategeometrystart\n     * @type {TagComponent} Tag component.\n     * @example\n     * ```\n     * tagComponent.on(\"creategeometrystart\", function(component) {\n     *     console.log(component);\n     * });\n     * ```\n     */\n    public static creategeometrystart: string = \"creategeometrystart\";\n\n    /**\n     * Event fired when the create mode is changed.\n     *\n     * @event TagComponent#modechanged\n     * @type {TagMode} Tag mode\n     * @example\n     * ```\n     * tagComponent.on(\"modechanged\", function(mode) {\n     *     console.log(mode);\n     * });\n     * ```\n     */\n    public static modechanged: string = \"modechanged\";\n\n    /**\n     * Event fired when a geometry has been created.\n     *\n     * @event TagComponent#geometrycreated\n     * @type {Geometry} Created geometry.\n     * @example\n     * ```\n     * tagComponent.on(\"geometrycreated\", function(geometry) {\n     *     console.log(geometry);\n     * });\n     * ```\n     */\n    public static geometrycreated: string = \"geometrycreated\";\n\n    /**\n     * Event fired when the tags collection has changed.\n     *\n     * @event TagComponent#tagschanged\n     * @type {TagComponent} Tag component.\n     * @example\n     * ```\n     * tagComponent.on(\"tagschanged\", function(component) {\n     *     console.log(component.getAll());\n     * });\n     * ```\n     */\n    public static tagschanged: string = \"tagschanged\";\n\n    private _tagDomRenderer: TagDOMRenderer;\n    private _tagScene: TagScene;\n    private _tagSet: TagSet;\n    private _tagCreator: TagCreator;\n    private _viewportCoords: ViewportCoords;\n\n    private _renderTags$: Observable<RenderTag<Tag>[]>;\n    private _tagChanged$: Observable<Tag>;\n    private _renderTagGLChanged$: Observable<RenderTag<Tag>>;\n    private _createGeometryChanged$: Observable<OutlineCreateTag>;\n    private _createGLObjectsChanged$: Observable<OutlineCreateTag>;\n\n    private _creatingConfiguration$: Observable<ITagConfiguration>;\n\n    private _updateGLObjectsSubscription: Subscription;\n    private _updateTagSceneSubscription: Subscription;\n\n    private _stopCreateSubscription: Subscription;\n    private _setGLCreateTagSubscription: Subscription;\n    private _createGLObjectsChangedSubscription: Subscription;\n\n    private _handlerStopCreateSubscription: Subscription;\n    private _handlerEnablerSubscription: Subscription;\n\n    private _domSubscription: Subscription;\n    private _glSubscription: Subscription;\n\n    private _fireCreateGeometryEventSubscription: Subscription;\n    private _fireGeometryCreatedSubscription: Subscription;\n    private _fireTagsChangedSubscription: Subscription;\n\n    private _createHandlers: { [K in keyof typeof TagMode]: CreateHandlerBase };\n    private _editVertexHandler: EditVertexHandler;\n\n    /** @ignore */\n    constructor(name: string, container: Container, navigator: Navigator) {\n        super(name, container, navigator);\n\n        this._tagDomRenderer = new TagDOMRenderer();\n        this._tagScene = new TagScene();\n        this._tagSet = new TagSet();\n        this._tagCreator = new TagCreator(this, navigator);\n        this._viewportCoords = new ViewportCoords();\n\n        this._createHandlers = {\n            \"CreatePoint\": new CreatePointHandler(this, container, navigator, this._viewportCoords, this._tagCreator),\n            \"CreatePolygon\": new CreatePolygonHandler(this, container, navigator, this._viewportCoords, this._tagCreator),\n            \"CreateRect\": new CreateRectHandler(this, container, navigator, this._viewportCoords, this._tagCreator),\n            \"CreateRectDrag\": new CreateRectDragHandler(this, container, navigator, this._viewportCoords, this._tagCreator),\n            \"Default\": undefined,\n        };\n\n        this._editVertexHandler = new EditVertexHandler(this, container, navigator, this._viewportCoords, this._tagSet);\n\n        this._renderTags$ = this._tagSet.changed$.pipe(\n            map(\n                (tagSet: TagSet): RenderTag<Tag>[] => {\n                    const tags: RenderTag<Tag>[] = tagSet.getAll();\n\n                    // ensure that tags are always rendered in the same order\n                    // to avoid hover tracking problems on first resize.\n                    tags.sort(\n                        (t1: RenderTag<Tag>, t2: RenderTag<Tag>): number => {\n                            const id1: string = t1.tag.id;\n                            const id2: string = t2.tag.id;\n\n                            if (id1 < id2) {\n                                return -1;\n                            }\n\n                            if (id1 > id2) {\n                                return 1;\n                            }\n\n                            return 0;\n                        });\n\n                    return tags;\n                }),\n            share());\n\n        this._tagChanged$ = this._renderTags$.pipe(\n            switchMap(\n                (tags: RenderTag<Tag>[]): Observable<Tag> => {\n                    return observableFrom(tags).pipe(\n                        mergeMap(\n                            (tag: RenderTag<Tag>): Observable<Tag> => {\n                                return observableMerge(\n                                        tag.tag.changed$,\n                                        tag.tag.geometryChanged$);\n                            }));\n                }),\n            share());\n\n        this._renderTagGLChanged$ = this._renderTags$.pipe(\n            switchMap(\n                (tags: RenderTag<Tag>[]): Observable<RenderTag<Tag>> => {\n                    return observableFrom(tags).pipe(\n                        mergeMap(\n                            (tag: RenderTag<Tag>): Observable<RenderTag<Tag>> => {\n                                return tag.glObjectsChanged$;\n                            }));\n                }),\n            share());\n\n        this._createGeometryChanged$ = this._tagCreator.tag$.pipe(\n            switchMap(\n                (tag: OutlineCreateTag): Observable<OutlineCreateTag> => {\n                    return tag != null ?\n                        tag.geometryChanged$ :\n                        observableEmpty();\n                }),\n            share());\n\n        this._createGLObjectsChanged$ = this._tagCreator.tag$.pipe(\n            switchMap(\n                (tag: OutlineCreateTag): Observable<OutlineCreateTag> => {\n                    return tag != null ?\n                        tag.glObjectsChanged$ :\n                        observableEmpty();\n                }),\n            share());\n\n        this._creatingConfiguration$ = this._configuration$.pipe(\n            distinctUntilChanged(\n                (c1: ITagConfiguration, c2: ITagConfiguration): boolean => {\n                    return c1.mode === c2.mode;\n                },\n                (configuration: ITagConfiguration): ITagConfiguration => {\n                    return {\n                        createColor: configuration.createColor,\n                        mode: configuration.mode,\n                    };\n                }),\n            publishReplay(1),\n            refCount());\n\n        this._creatingConfiguration$\n            .subscribe(\n                (configuration: ITagConfiguration): void => {\n                    this.fire(TagComponent.modechanged, configuration.mode);\n                });\n    }\n\n    /**\n     * Add tags to the tag set or replace tags in the tag set.\n     *\n     * @description If a tag already in the set has the same\n     * id as one of the tags added, the old tag will be removed\n     * the added tag will take its place.\n     *\n     * @param {Array<Tag>} tags - Tags to add.\n     *\n     * @example ```tagComponent.add([tag1, tag2]);```\n     */\n    public add(tags: Tag[]): void {\n        if (this._activated) {\n            this._navigator.stateService.currentTransform$.pipe(\n                first())\n                .subscribe(\n                    (transform: Transform): void => {\n                        this._tagSet.add(tags, transform);\n\n                        const renderTags: RenderTag<Tag>[] = tags\n                            .map(\n                                (tag: Tag): RenderTag<Tag> => {\n                                    return this._tagSet.get(tag.id);\n                                });\n\n                        this._tagScene.add(renderTags);\n                    });\n        } else {\n            this._tagSet.addDeactivated(tags);\n        }\n    }\n\n    /**\n     * Change the current tag mode.\n     *\n     * @description Change the tag mode to one of the create modes for creating new geometries.\n     *\n     * @param {TagMode} mode - New tag mode.\n     *\n     * @fires TagComponent#modechanged\n     *\n     * @example ```tagComponent.changeMode(Mapillary.TagComponent.TagMode.CreateRect);```\n     */\n    public changeMode(mode: TagMode): void {\n        this.configure({ mode: mode });\n    }\n\n    /**\n     * Returns the tag in the tag set with the specified id, or\n     * undefined if the id matches no tag.\n     *\n     * @param {string} tagId - Id of the tag.\n     *\n     * @example ```var tag = tagComponent.get(\"tagId\");```\n     */\n    public get(tagId: string): Tag {\n        if (this._activated) {\n            const renderTag: RenderTag<Tag> = this._tagSet.get(tagId);\n            return renderTag !== undefined ? renderTag.tag : undefined;\n        } else {\n            return this._tagSet.getDeactivated(tagId);\n        }\n    }\n\n    /**\n     * Returns an array of all tags.\n     *\n     * @example ```var tags = tagComponent.getAll();```\n     */\n    public getAll(): Tag[] {\n        if (this.activated) {\n            return this._tagSet\n                .getAll()\n                .map(\n                    (renderTag: RenderTag<Tag>): Tag => {\n                        return renderTag.tag;\n                    });\n        } else {\n            return this._tagSet.getAllDeactivated();\n        }\n    }\n\n    /**\n     * Returns an array of tag ids for tags that contain the specified point.\n     *\n     * @description The pixel point must lie inside the polygon or rectangle\n     * of an added tag for the tag id to be returned. Tag ids for\n     * tags that do not have a fill will also be returned if the point is inside\n     * the geometry of the tag. Tags with point geometries can not be retrieved.\n     *\n     * No tag ids will be returned for panoramas.\n     *\n     * Notice that the pixelPoint argument requires x, y 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 tag component.\n     *\n     * If no tag at exist the pixel point, an empty array will be returned.\n     *\n     * @param {Array<number>} pixelPoint - Pixel coordinates on the viewer element.\n     * @returns {Array<string>} Ids of the tags that contain the specified pixel point.\n     *\n     * @example\n     * ```\n     * tagComponent.getTagIdsAt([100, 100])\n     *     .then((tagIds) => { console.log(tagIds); });\n     * ```\n     */\n    public getTagIdsAt(pixelPoint: number[]): when.Promise<string[]> {\n        return when.promise<string[]>((resolve: (value: string[]) => void, reject: (reason: Error) => void): void => {\n            this._container.renderService.renderCamera$.pipe(\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 ids: string[] = this._tagScene.intersectObjects(viewport, render.perspective);\n\n                        return ids;\n                    }))\n                .subscribe(\n                    (ids: string[]): void => {\n                        resolve(ids);\n                    },\n                    (error: Error): void => {\n                        reject(error);\n                    });\n        });\n    }\n\n    /**\n     * Check if a tag exist in the tag set.\n     *\n     * @param {string} tagId - Id of the tag.\n     *\n     * @example ```var tagExists = tagComponent.has(\"tagId\");```\n     */\n    public has(tagId: string): boolean {\n        return this._activated ? this._tagSet.has(tagId) : this._tagSet.hasDeactivated(tagId);\n    }\n\n    /**\n     * Remove tags with the specified ids from the tag set.\n     *\n     * @param {Array<string>} tagIds - Ids for tags to remove.\n     *\n     * @example ```tagComponent.remove([\"id-1\", \"id-2\"]);```\n     */\n    public remove(tagIds: string[]): void {\n        if (this._activated) {\n            this._tagSet.remove(tagIds);\n            this._tagScene.remove(tagIds);\n        } else {\n            this._tagSet.removeDeactivated(tagIds);\n        }\n    }\n\n    /**\n     * Remove all tags from the tag set.\n     *\n     * @example ```tagComponent.removeAll();```\n     */\n    public removeAll(): void {\n        if (this._activated) {\n            this._tagSet.removeAll();\n            this._tagScene.removeAll();\n        } else {\n            this._tagSet.removeAllDeactivated();\n        }\n    }\n\n    protected _activate(): void {\n        this._editVertexHandler.enable();\n\n        const handlerGeometryCreated$: Observable<Geometry> =\n            observableFrom<keyof typeof TagMode>(<(keyof typeof TagMode)[]>Object.keys(this._createHandlers)).pipe(\n                map(\n                    (key: keyof typeof TagMode): CreateHandlerBase => {\n                        return this._createHandlers[key];\n                    }),\n                filter(\n                    (handler: CreateHandlerBase): boolean => {\n                        return !!handler;\n                    }),\n                mergeMap(\n                    (handler: CreateHandlerBase): Observable<Geometry> => {\n                        return handler.geometryCreated$;\n                    }),\n                share());\n\n        this._fireGeometryCreatedSubscription = handlerGeometryCreated$\n            .subscribe(\n                (geometry: Geometry): void => {\n                    this.fire(TagComponent.geometrycreated, geometry);\n                });\n\n        this._fireCreateGeometryEventSubscription = this._tagCreator.tag$.pipe(\n            skipWhile(\n                (tag: OutlineCreateTag): boolean => {\n                    return tag == null;\n                }),\n            distinctUntilChanged())\n            .subscribe(\n                (tag: OutlineCreateTag): void => {\n                    const eventType: string = tag != null ?\n                        TagComponent.creategeometrystart :\n                        TagComponent.creategeometryend;\n\n                    this.fire(eventType, this);\n                });\n\n        this._handlerStopCreateSubscription = handlerGeometryCreated$\n            .subscribe(\n                (): void => {\n                    this.changeMode(TagMode.Default);\n                });\n\n        this._handlerEnablerSubscription = this._creatingConfiguration$\n            .subscribe(\n                (configuration: ITagConfiguration): void => {\n                    this._disableCreateHandlers();\n\n                    const mode: keyof typeof TagMode = <keyof typeof TagMode>TagMode[configuration.mode];\n                    const handler: CreateHandlerBase = this._createHandlers[mode];\n                    if (!!handler) {\n                        handler.enable();\n                    }\n                });\n\n        this._fireTagsChangedSubscription = this._renderTags$\n            .subscribe(\n                (tags: RenderTag<Tag>[]): void => {\n                    this.fire(TagComponent.tagschanged, this);\n                });\n\n        this._stopCreateSubscription = this._tagCreator.tag$.pipe(\n            switchMap(\n                (tag: OutlineCreateTag): Observable<void> => {\n                    return tag != null ?\n                        tag.aborted$.pipe(\n                            map((t: OutlineCreateTag): void => { return null; })) :\n                        observableEmpty();\n                }))\n            .subscribe((): void => { this.changeMode(TagMode.Default); });\n\n        this._setGLCreateTagSubscription = this._tagCreator.tag$\n            .subscribe(\n                (tag: OutlineCreateTag): void => {\n                    if (this._tagScene.hasCreateTag()) {\n                        this._tagScene.removeCreateTag();\n                    }\n\n                    if (tag != null) {\n                        this._tagScene.addCreateTag(tag);\n                    }\n                });\n\n        this._createGLObjectsChangedSubscription = this._createGLObjectsChanged$\n            .subscribe(\n                (tag: OutlineCreateTag): void => {\n                    this._tagScene.updateCreateTagObjects(tag);\n                });\n\n        this._updateGLObjectsSubscription = this._renderTagGLChanged$\n            .subscribe(\n                (tag: RenderTag<Tag>): void => {\n                    this._tagScene.updateObjects(tag);\n                });\n\n        this._updateTagSceneSubscription = this._tagChanged$\n            .subscribe(\n                (tag: Tag): void => {\n                    this._tagScene.update();\n                });\n\n        this._domSubscription = observableCombineLatest(\n                this._renderTags$.pipe(\n                    startWith([]),\n                    tap(\n                        (tags: RenderTag<Tag>[]): void => {\n                            this._container.domRenderer.render$.next({\n                                name: this._name,\n                                vnode: this._tagDomRenderer.clear(),\n                            });\n                        })),\n                this._container.renderService.renderCamera$,\n                this._container.spriteService.spriteAtlas$,\n                this._container.renderService.size$,\n                this._tagChanged$.pipe(startWith(null)),\n                observableMerge(\n                    this._tagCreator.tag$,\n                    this._createGeometryChanged$).pipe(startWith(null))).pipe(\n            map(\n                ([renderTags, rc, atlas, size, tag, ct]: [RenderTag<Tag>[], RenderCamera, ISpriteAtlas, ISize, Tag, OutlineCreateTag]):\n                    IVNodeHash => {\n                    return {\n                        name: this._name,\n                        vnode: this._tagDomRenderer.render(renderTags, ct, atlas, rc.perspective, size),\n                    };\n                }))\n            .subscribe(this._container.domRenderer.render$);\n\n        this._glSubscription = this._navigator.stateService.currentState$.pipe(\n            map(\n                (frame: IFrame): IGLRenderHash => {\n                    const tagScene: TagScene = this._tagScene;\n\n                    return {\n                        name: this._name,\n                        render: {\n                            frameId: frame.id,\n                            needsRender: tagScene.needsRender,\n                            render: tagScene.render.bind(tagScene),\n                            stage: GLRenderStage.Foreground,\n                        },\n                    };\n                }))\n            .subscribe(this._container.glRenderer.render$);\n\n        this._navigator.stateService.currentTransform$.pipe(\n            first())\n            .subscribe(\n                (transform: Transform): void => {\n                    this._tagSet.activate(transform);\n                    this._tagScene.add(this._tagSet.getAll());\n                });\n\n    }\n\n    protected _deactivate(): void {\n        this._editVertexHandler.disable();\n        this._disableCreateHandlers();\n\n        this._tagScene.clear();\n        this._tagSet.deactivate();\n\n        this._tagCreator.delete$.next(null);\n\n        this._updateGLObjectsSubscription.unsubscribe();\n        this._updateTagSceneSubscription.unsubscribe();\n\n        this._stopCreateSubscription.unsubscribe();\n        this._setGLCreateTagSubscription.unsubscribe();\n        this._createGLObjectsChangedSubscription.unsubscribe();\n\n        this._domSubscription.unsubscribe();\n        this._glSubscription.unsubscribe();\n\n        this._fireCreateGeometryEventSubscription.unsubscribe();\n        this._fireGeometryCreatedSubscription.unsubscribe();\n        this._fireTagsChangedSubscription.unsubscribe();\n\n        this._handlerStopCreateSubscription.unsubscribe();\n        this._handlerEnablerSubscription.unsubscribe();\n\n        this._container.element.classList.remove(\"component-tag-create\");\n    }\n\n    protected _getDefaultConfiguration(): ITagConfiguration {\n        return {\n            createColor: 0xFFFFFF,\n            mode: TagMode.Default,\n        };\n    }\n\n    private _disableCreateHandlers(): void {\n        const createHandlers: { [K in keyof typeof TagMode]: CreateHandlerBase } = this._createHandlers;\n        for (const key in createHandlers) {\n            if (!createHandlers.hasOwnProperty(key)) {\n                continue;\n            }\n\n            const handler: CreateHandlerBase = createHandlers[<keyof typeof TagMode>key];\n            if (!!handler) {\n                handler.disable();\n            }\n        }\n    }\n}\n\nComponentService.register(TagComponent);\nexport default TagComponent;\n",
     "import {share, map} from \"rxjs/operators\";\nimport {Observable, Subject} from \"rxjs\";\n\nimport {Geometry} from \"../../../Component\";\nimport {EventEmitter} from \"../../../Utils\";\n\n/**\n * @class Tag\n * @abstract\n * @classdesc Abstract class representing the basic functionality of for a tag.\n */\nexport abstract class Tag extends EventEmitter {\n    /**\n     * Event fired when a property related to the visual appearance of the\n     * tag has changed.\n     *\n     * @event Tag#changed\n     * @type {Tag} The tag instance that has changed.\n     */\n    public static changed: string = \"changed\";\n\n    /**\n     * Event fired when the geometry of the tag has changed.\n     *\n     * @event Tag#geometrychanged\n     * @type {Tag} The tag instance whose geometry has changed.\n     */\n    public static geometrychanged: string = \"geometrychanged\";\n\n    protected _id: string;\n    protected _geometry: Geometry;\n\n    protected _notifyChanged$: Subject<Tag>;\n\n    /**\n     * Create a tag.\n     *\n     * @constructor\n     * @param {string} id\n     * @param {Geometry} geometry\n     */\n    constructor(id: string, geometry: Geometry) {\n        super();\n\n        this._id = id;\n        this._geometry = geometry;\n\n        this._notifyChanged$ = new Subject<Tag>();\n\n        this._notifyChanged$\n            .subscribe(\n                (t: Tag): void => {\n                    this.fire(Tag.changed, this);\n                });\n\n        this._geometry.changed$\n            .subscribe(\n                (g: Geometry): void => {\n                    this.fire(Tag.geometrychanged, this);\n                });\n    }\n\n    /**\n     * Get id property.\n     * @returns {string}\n     */\n    public get id(): string {\n        return this._id;\n    }\n\n    /**\n     * Get geometry property.\n     * @returns {Geometry} The geometry of the tag.\n     */\n    public get geometry(): Geometry {\n        return this._geometry;\n    }\n\n    /**\n     * Get changed observable.\n     * @returns {Observable<Tag>}\n     * @ignore\n     */\n    public get changed$(): Observable<Tag> {\n        return this._notifyChanged$;\n    }\n\n    /**\n     * Get geometry changed observable.\n     * @returns {Observable<Tag>}\n     * @ignore\n     */\n    public get geometryChanged$(): Observable<Tag> {\n        return this._geometry.changed$.pipe(\n            map(\n                (geometry: Geometry): Tag => {\n                    return this;\n                }),\n            share());\n    }\n}\n\nexport default Tag;\n",
     "/**\n * Enumeration for tag domains.\n * @enum {number}\n * @readonly\n * @description Defines where lines between two vertices are treated\n * as straight.\n *\n * Only applicable for polygons. For rectangles lines between\n * vertices are always treated as straight in the distorted 2D\n * projection and bended in the undistorted 3D space.\n */\nexport enum TagDomain {\n    /**\n     * Treats lines between two vertices as straight in the\n     * distorted 2D projection, i.e. on the image. If the image\n     * is distorted this will result in bended lines when rendered\n     * in the undistorted 3D space.\n     */\n    TwoDimensional,\n\n    /**\n     * Treats lines as straight in the undistorted 3D space. If the\n     * image is distorted this will result in bended lines when rendered\n     * on the distorted 2D projection of the image.\n     */\n    ThreeDimensional,\n}\n\nexport default TagDomain;\n",
     "import {\n    Component,\n    IComponentConfiguration,\n} from \"../../Component\";\nimport {\n    Container,\n    Navigator,\n} from \"../../Viewer\";\n\nexport abstract class HandlerBase<TConfiguration extends IComponentConfiguration> {\n    protected _component: Component<TConfiguration>;\n    protected _container: Container;\n    protected _navigator: Navigator;\n\n    protected _enabled: boolean;\n\n    /** @ignore */\n    constructor(component: Component<TConfiguration>, container: Container, navigator: Navigator) {\n        this._component = component;\n        this._container = container;\n        this._navigator = navigator;\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 ```<component-name>.<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 ```<component-name>.<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 HandlerBase;\n",
-    "import * as THREE from \"three\";\n\nimport {IGPano} from \"../../API\";\nimport {Transform} from \"../../Geo\";\nimport {Node} from \"../../Graph\";\nimport {Shaders} from \"../../Component\";\n\nexport class MeshFactory {\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    public createFlatMesh(\n        node: Node,\n        transform: Transform,\n        basicX0: number,\n        basicX1: number,\n        basicY0: number,\n        basicY1: number): THREE.Mesh {\n\n        let texture: THREE.Texture = this._createTexture(node.image);\n        let materialParameters: THREE.ShaderMaterialParameters =\n            this._createDistortedPlaneMaterialParameters(transform, texture);\n        let material: THREE.ShaderMaterial = new THREE.ShaderMaterial(materialParameters);\n\n        let geometry: THREE.BufferGeometry = this._getFlatImagePlaneGeoFromBasic(transform, basicX0, basicX1, basicY0, basicY1);\n\n        return new THREE.Mesh(geometry, material);\n    }\n\n    public createCurtainMesh(node: Node, transform: Transform): THREE.Mesh {\n        if (node.pano && !node.fullPano) {\n            throw new Error(\"Cropped panoramas cannot have curtain.\");\n        }\n\n        return node.pano ?\n            this._createSphereCurtainMesh(node, transform) :\n            this._createCurtainMesh(node, transform);\n    }\n\n    public createDistortedCurtainMesh(node: Node, transform: Transform): THREE.Mesh {\n        if (node.pano) {\n            throw new Error(\"Cropped panoramas cannot have curtain.\");\n        }\n\n        return this._createDistortedCurtainMesh(node, transform);\n    }\n\n    private _createCurtainMesh(node: Node, transform: Transform): THREE.Mesh {\n        let texture: THREE.Texture = this._createTexture(node.image);\n        let materialParameters: THREE.ShaderMaterialParameters =\n            this._createCurtainPlaneMaterialParameters(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._getRegularFlatImagePlaneGeo(transform);\n\n        return new THREE.Mesh(geometry, material);\n    }\n\n    private _createDistortedCurtainMesh(node: Node, transform: Transform): THREE.Mesh {\n        let texture: THREE.Texture = this._createTexture(node.image);\n        let materialParameters: THREE.ShaderMaterialParameters =\n            this._createDistortedCurtainPlaneMaterialParameters(transform, texture);\n        let material: THREE.ShaderMaterial = new THREE.ShaderMaterial(materialParameters);\n\n        let geometry: THREE.BufferGeometry = this._getRegularFlatImagePlaneGeo(transform);\n\n        return new THREE.Mesh(geometry, material);\n    }\n\n    private _createSphereCurtainMesh(node: Node, transform: Transform): THREE.Mesh {\n        let texture: THREE.Texture = this._createTexture(node.image);\n        let materialParameters: THREE.ShaderMaterialParameters =\n            this._createCurtainSphereMaterialParameters(transform, texture);\n        let material: THREE.ShaderMaterial = new THREE.ShaderMaterial(materialParameters);\n\n        return this._useMesh(transform, node) ?\n            new THREE.Mesh(this._getImageSphereGeo(transform, node), material) :\n            new THREE.Mesh(this._getFlatImageSphereGeo(transform), material);\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._getRegularFlatImagePlaneGeo(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: Shaders.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: Shaders.equirectangular.vertex,\n        };\n\n        return materialParameters;\n    }\n\n    private _createCurtainSphereMaterialParameters(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: Shaders.equirectangularCurtain.fragment,\n            side: THREE.DoubleSide,\n            transparent: true,\n            uniforms: {\n                curtain: {\n                    type: \"f\",\n                    value: 1,\n                },\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: Shaders.equirectangularCurtain.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: Shaders.perspective.fragment,\n            side: THREE.DoubleSide,\n            transparent: true,\n            uniforms: {\n                focal: {\n                    type: \"f\",\n                    value: transform.focal,\n                },\n                k1: {\n                    type: \"f\",\n                    value: transform.ck1,\n                },\n                k2: {\n                    type: \"f\",\n                    value: transform.ck2,\n                },\n                opacity: {\n                    type: \"f\",\n                    value: 1,\n                },\n                projectorMat: {\n                    type: \"m4\",\n                    value: transform.basicRt,\n                },\n                projectorTex: {\n                    type: \"t\",\n                    value: texture,\n                },\n                radial_peak: {\n                    type: \"f\",\n                    value: !!transform.radialPeak ? transform.radialPeak : 0,\n                },\n                scale_x: {\n                    type: \"f\",\n                    value: Math.max(transform.basicHeight, transform.basicWidth) / transform.basicWidth,\n                },\n                scale_y: {\n                    type: \"f\",\n                    value: Math.max(transform.basicWidth, transform.basicHeight) / transform.basicHeight,\n                },\n            },\n            vertexShader: Shaders.perspective.vertex,\n        };\n\n        return materialParameters;\n    }\n\n    private _createCurtainPlaneMaterialParameters(transform: Transform, texture: THREE.Texture): THREE.ShaderMaterialParameters {\n        let materialParameters: THREE.ShaderMaterialParameters = {\n            depthWrite: false,\n            fragmentShader: Shaders.perspectiveCurtain.fragment,\n            side: THREE.DoubleSide,\n            transparent: true,\n            uniforms: {\n                curtain: {\n                    type: \"f\",\n                    value: 1,\n                },\n                focal: {\n                    type: \"f\",\n                    value: transform.focal,\n                },\n                k1: {\n                    type: \"f\",\n                    value: transform.ck1,\n                },\n                k2: {\n                    type: \"f\",\n                    value: transform.ck2,\n                },\n                opacity: {\n                    type: \"f\",\n                    value: 1,\n                },\n                projectorMat: {\n                    type: \"m4\",\n                    value: transform.basicRt,\n                },\n                projectorTex: {\n                    type: \"t\",\n                    value: texture,\n                },\n                radial_peak: {\n                    type: \"f\",\n                    value: !!transform.radialPeak ? transform.radialPeak : 0,\n                },\n                scale_x: {\n                    type: \"f\",\n                    value: Math.max(transform.basicHeight, transform.basicWidth) / transform.basicWidth,\n                },\n                scale_y: {\n                    type: \"f\",\n                    value: Math.max(transform.basicWidth, transform.basicHeight) / transform.basicHeight,\n                },\n            },\n            vertexShader: Shaders.perspectiveCurtain.vertex,\n        };\n\n        return materialParameters;\n    }\n\n    private _createDistortedCurtainPlaneMaterialParameters(transform: Transform, texture: THREE.Texture): THREE.ShaderMaterialParameters {\n        let materialParameters: THREE.ShaderMaterialParameters = {\n            depthWrite: false,\n            fragmentShader: Shaders.perspectiveDistortedCurtain.fragment,\n            side: THREE.DoubleSide,\n            transparent: true,\n            uniforms: {\n                curtain: {\n                    type: \"f\",\n                    value: 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: Shaders.perspectiveDistortedCurtain.vertex,\n        };\n\n        return materialParameters;\n    }\n\n    private _createDistortedPlaneMaterialParameters(transform: Transform, texture: THREE.Texture): THREE.ShaderMaterialParameters {\n        let materialParameters: THREE.ShaderMaterialParameters = {\n            depthWrite: false,\n            fragmentShader: Shaders.perspectiveDistorted.fragment,\n            side: THREE.DoubleSide,\n            transparent: true,\n            uniforms: {\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: Shaders.perspectiveDistorted.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        const undistortionMarginFactor: number = 3;\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            if (i < 4) {\n                x *= undistortionMarginFactor;\n                y *= undistortionMarginFactor;\n            }\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        geometry.applyMatrix(new THREE.Matrix4().getInverse(transform.rt));\n\n        return geometry;\n    }\n\n    private _getRegularFlatImagePlaneGeo(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        return this._getFlatImagePlaneGeo(transform, dx, dy);\n    }\n\n    private _getFlatImagePlaneGeo(transform: Transform, dx: number, dy: number): THREE.BufferGeometry {\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        return this._createFlatGeometry(vertices);\n    }\n\n    private _getFlatImagePlaneGeoFromBasic(\n        transform: Transform,\n        basicX0: number,\n        basicX1: number,\n        basicY0: number,\n        basicY1: number): THREE.BufferGeometry {\n\n        let vertices: number[][] = [];\n\n        vertices.push(transform.unprojectBasic([basicX0, basicY0], this._imagePlaneDepth));\n        vertices.push(transform.unprojectBasic([basicX1, basicY0], this._imagePlaneDepth));\n        vertices.push(transform.unprojectBasic([basicX1, basicY1], this._imagePlaneDepth));\n        vertices.push(transform.unprojectBasic([basicX0, basicY1], this._imagePlaneDepth));\n\n        return this._createFlatGeometry(vertices);\n    }\n\n    private _createFlatGeometry(vertices: number[][]): THREE.BufferGeometry {\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 MeshFactory;\n",
+    "import * as THREE from \"three\";\n\nimport {IGPano} from \"../../API\";\nimport {Transform} from \"../../Geo\";\nimport {Node} from \"../../Graph\";\nimport {Shaders} from \"../../Component\";\n\nexport class MeshFactory {\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        if (node.pano) {\n            return this._createImageSphere(node, transform);\n        } else if (transform.cameraProjection === \"fisheye\") {\n            return this._createImagePlaneFisheye(node, transform);\n        } else {\n            return this._createImagePlane(node, transform);\n        }\n    }\n\n    public createFlatMesh(\n        node: Node,\n        transform: Transform,\n        basicX0: number,\n        basicX1: number,\n        basicY0: number,\n        basicY1: number): THREE.Mesh {\n\n        let texture: THREE.Texture = this._createTexture(node.image);\n        let materialParameters: THREE.ShaderMaterialParameters =\n            this._createDistortedPlaneMaterialParameters(transform, texture);\n        let material: THREE.ShaderMaterial = new THREE.ShaderMaterial(materialParameters);\n\n        let geometry: THREE.BufferGeometry = this._getFlatImagePlaneGeoFromBasic(transform, basicX0, basicX1, basicY0, basicY1);\n\n        return new THREE.Mesh(geometry, material);\n    }\n\n    public createCurtainMesh(node: Node, transform: Transform): THREE.Mesh {\n        if (node.pano && !node.fullPano) {\n            throw new Error(\"Cropped panoramas cannot have curtain.\");\n        }\n\n        if (node.pano) {\n            return this._createSphereCurtainMesh(node, transform);\n        } else if (transform.cameraProjection === \"fisheye\") {\n            return this._createCurtainMeshFisheye(node, transform);\n        } else {\n            return this._createCurtainMesh(node, transform);\n        }\n    }\n\n    public createDistortedCurtainMesh(node: Node, transform: Transform): THREE.Mesh {\n        if (node.pano) {\n            throw new Error(\"Cropped panoramas cannot have curtain.\");\n        }\n\n        return this._createDistortedCurtainMesh(node, transform);\n    }\n\n    private _createCurtainMesh(node: Node, transform: Transform): THREE.Mesh {\n        let texture: THREE.Texture = this._createTexture(node.image);\n        let materialParameters: THREE.ShaderMaterialParameters =\n            this._createCurtainPlaneMaterialParameters(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._getRegularFlatImagePlaneGeo(transform);\n\n        return new THREE.Mesh(geometry, material);\n    }\n\n    private _createCurtainMeshFisheye(node: Node, transform: Transform): THREE.Mesh {\n        let texture: THREE.Texture = this._createTexture(node.image);\n        let materialParameters: THREE.ShaderMaterialParameters =\n            this._createCurtainPlaneMaterialParametersFisheye(transform, texture);\n        let material: THREE.ShaderMaterial = new THREE.ShaderMaterial(materialParameters);\n\n        let geometry: THREE.BufferGeometry = this._useMesh(transform, node) ?\n            this._getImagePlaneGeoFisheye(transform, node) :\n            this._getRegularFlatImagePlaneGeo(transform);\n\n        return new THREE.Mesh(geometry, material);\n    }\n\n    private _createDistortedCurtainMesh(node: Node, transform: Transform): THREE.Mesh {\n        let texture: THREE.Texture = this._createTexture(node.image);\n        let materialParameters: THREE.ShaderMaterialParameters =\n            this._createDistortedCurtainPlaneMaterialParameters(transform, texture);\n        let material: THREE.ShaderMaterial = new THREE.ShaderMaterial(materialParameters);\n\n        let geometry: THREE.BufferGeometry = this._getRegularFlatImagePlaneGeo(transform);\n\n        return new THREE.Mesh(geometry, material);\n    }\n\n    private _createSphereCurtainMesh(node: Node, transform: Transform): THREE.Mesh {\n        let texture: THREE.Texture = this._createTexture(node.image);\n        let materialParameters: THREE.ShaderMaterialParameters =\n            this._createCurtainSphereMaterialParameters(transform, texture);\n        let material: THREE.ShaderMaterial = new THREE.ShaderMaterial(materialParameters);\n\n        return this._useMesh(transform, node) ?\n            new THREE.Mesh(this._getImageSphereGeo(transform, node), material) :\n            new THREE.Mesh(this._getFlatImageSphereGeo(transform), material);\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._getRegularFlatImagePlaneGeo(transform);\n\n        return new THREE.Mesh(geometry, material);\n    }\n\n    private _createImagePlaneFisheye(node: Node, transform: Transform): THREE.Mesh {\n        let texture: THREE.Texture = this._createTexture(node.image);\n        let materialParameters: THREE.ShaderMaterialParameters = this._createPlaneMaterialParametersFisheye(transform, texture);\n        let material: THREE.ShaderMaterial = new THREE.ShaderMaterial(materialParameters);\n\n        let geometry: THREE.BufferGeometry = this._useMesh(transform, node) ?\n            this._getImagePlaneGeoFisheye(transform, node) :\n            this._getRegularFlatImagePlaneGeoFisheye(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: Shaders.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: Shaders.equirectangular.vertex,\n        };\n\n        return materialParameters;\n    }\n\n    private _createCurtainSphereMaterialParameters(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: Shaders.equirectangularCurtain.fragment,\n            side: THREE.DoubleSide,\n            transparent: true,\n            uniforms: {\n                curtain: {\n                    type: \"f\",\n                    value: 1,\n                },\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: Shaders.equirectangularCurtain.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: Shaders.perspective.fragment,\n            side: THREE.DoubleSide,\n            transparent: true,\n            uniforms: {\n                focal: {\n                    type: \"f\",\n                    value: transform.focal,\n                },\n                k1: {\n                    type: \"f\",\n                    value: transform.ck1,\n                },\n                k2: {\n                    type: \"f\",\n                    value: transform.ck2,\n                },\n                opacity: {\n                    type: \"f\",\n                    value: 1,\n                },\n                projectorMat: {\n                    type: \"m4\",\n                    value: transform.basicRt,\n                },\n                projectorTex: {\n                    type: \"t\",\n                    value: texture,\n                },\n                radial_peak: {\n                    type: \"f\",\n                    value: !!transform.radialPeak ? transform.radialPeak : 0,\n                },\n                scale_x: {\n                    type: \"f\",\n                    value: Math.max(transform.basicHeight, transform.basicWidth) / transform.basicWidth,\n                },\n                scale_y: {\n                    type: \"f\",\n                    value: Math.max(transform.basicWidth, transform.basicHeight) / transform.basicHeight,\n                },\n            },\n            vertexShader: Shaders.perspective.vertex,\n        };\n\n        return materialParameters;\n    }\n\n    private _createPlaneMaterialParametersFisheye(transform: Transform, texture: THREE.Texture): THREE.ShaderMaterialParameters {\n        let materialParameters: THREE.ShaderMaterialParameters = {\n            depthWrite: false,\n            fragmentShader: Shaders.fisheye.fragment,\n            side: THREE.DoubleSide,\n            transparent: true,\n            uniforms: {\n                focal: {\n                    type: \"f\",\n                    value: transform.focal,\n                },\n                k1: {\n                    type: \"f\",\n                    value: transform.ck1,\n                },\n                k2: {\n                    type: \"f\",\n                    value: transform.ck2,\n                },\n                opacity: {\n                    type: \"f\",\n                    value: 1,\n                },\n                projectorMat: {\n                    type: \"m4\",\n                    value: transform.basicRt,\n                },\n                projectorTex: {\n                    type: \"t\",\n                    value: texture,\n                },\n                radial_peak: {\n                    type: \"f\",\n                    value: !!transform.radialPeak ? transform.radialPeak : 0,\n                },\n                scale_x: {\n                    type: \"f\",\n                    value: Math.max(transform.basicHeight, transform.basicWidth) / transform.basicWidth,\n                },\n                scale_y: {\n                    type: \"f\",\n                    value: Math.max(transform.basicWidth, transform.basicHeight) / transform.basicHeight,\n                },\n            },\n            vertexShader: Shaders.fisheye.vertex,\n        };\n\n        return materialParameters;\n    }\n\n    private _createCurtainPlaneMaterialParametersFisheye(transform: Transform, texture: THREE.Texture): THREE.ShaderMaterialParameters {\n        let materialParameters: THREE.ShaderMaterialParameters = {\n            depthWrite: false,\n            fragmentShader: Shaders.fisheyeCurtain.fragment,\n            side: THREE.DoubleSide,\n            transparent: true,\n            uniforms: {\n                curtain: {\n                    type: \"f\",\n                    value: 1,\n                },\n                focal: {\n                    type: \"f\",\n                    value: transform.focal,\n                },\n                k1: {\n                    type: \"f\",\n                    value: transform.ck1,\n                },\n                k2: {\n                    type: \"f\",\n                    value: transform.ck2,\n                },\n                opacity: {\n                    type: \"f\",\n                    value: 1,\n                },\n                projectorMat: {\n                    type: \"m4\",\n                    value: transform.basicRt,\n                },\n                projectorTex: {\n                    type: \"t\",\n                    value: texture,\n                },\n                radial_peak: {\n                    type: \"f\",\n                    value: !!transform.radialPeak ? transform.radialPeak : 0,\n                },\n                scale_x: {\n                    type: \"f\",\n                    value: Math.max(transform.basicHeight, transform.basicWidth) / transform.basicWidth,\n                },\n                scale_y: {\n                    type: \"f\",\n                    value: Math.max(transform.basicWidth, transform.basicHeight) / transform.basicHeight,\n                },\n            },\n            vertexShader: Shaders.fisheyeCurtain.vertex,\n        };\n\n        return materialParameters;\n    }\n\n    private _createCurtainPlaneMaterialParameters(transform: Transform, texture: THREE.Texture): THREE.ShaderMaterialParameters {\n        let materialParameters: THREE.ShaderMaterialParameters = {\n            depthWrite: false,\n            fragmentShader: Shaders.perspectiveCurtain.fragment,\n            side: THREE.DoubleSide,\n            transparent: true,\n            uniforms: {\n                curtain: {\n                    type: \"f\",\n                    value: 1,\n                },\n                focal: {\n                    type: \"f\",\n                    value: transform.focal,\n                },\n                k1: {\n                    type: \"f\",\n                    value: transform.ck1,\n                },\n                k2: {\n                    type: \"f\",\n                    value: transform.ck2,\n                },\n                opacity: {\n                    type: \"f\",\n                    value: 1,\n                },\n                projectorMat: {\n                    type: \"m4\",\n                    value: transform.basicRt,\n                },\n                projectorTex: {\n                    type: \"t\",\n                    value: texture,\n                },\n                radial_peak: {\n                    type: \"f\",\n                    value: !!transform.radialPeak ? transform.radialPeak : 0,\n                },\n                scale_x: {\n                    type: \"f\",\n                    value: Math.max(transform.basicHeight, transform.basicWidth) / transform.basicWidth,\n                },\n                scale_y: {\n                    type: \"f\",\n                    value: Math.max(transform.basicWidth, transform.basicHeight) / transform.basicHeight,\n                },\n            },\n            vertexShader: Shaders.perspectiveCurtain.vertex,\n        };\n\n        return materialParameters;\n    }\n\n    private _createDistortedCurtainPlaneMaterialParameters(transform: Transform, texture: THREE.Texture): THREE.ShaderMaterialParameters {\n        let materialParameters: THREE.ShaderMaterialParameters = {\n            depthWrite: false,\n            fragmentShader: Shaders.perspectiveDistortedCurtain.fragment,\n            side: THREE.DoubleSide,\n            transparent: true,\n            uniforms: {\n                curtain: {\n                    type: \"f\",\n                    value: 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: Shaders.perspectiveDistortedCurtain.vertex,\n        };\n\n        return materialParameters;\n    }\n\n    private _createDistortedPlaneMaterialParameters(transform: Transform, texture: THREE.Texture): THREE.ShaderMaterialParameters {\n        let materialParameters: THREE.ShaderMaterialParameters = {\n            depthWrite: false,\n            fragmentShader: Shaders.perspectiveDistorted.fragment,\n            side: THREE.DoubleSide,\n            transparent: true,\n            uniforms: {\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: Shaders.perspectiveDistorted.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        const undistortionMarginFactor: number = 3;\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            if (i < 4) {\n                x *= undistortionMarginFactor;\n                y *= undistortionMarginFactor;\n            }\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 _getImagePlaneGeoFisheye(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 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 _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        geometry.applyMatrix(new THREE.Matrix4().getInverse(transform.rt));\n\n        return geometry;\n    }\n\n    private _getRegularFlatImagePlaneGeo(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        return this._getFlatImagePlaneGeo(transform, dx, dy);\n    }\n\n    private _getFlatImagePlaneGeo(transform: Transform, dx: number, dy: number): THREE.BufferGeometry {\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        return this._createFlatGeometry(vertices);\n    }\n\n    private _getRegularFlatImagePlaneGeoFisheye(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        return this._getFlatImagePlaneGeoFisheye(transform, dx, dy);\n    }\n\n    private _getFlatImagePlaneGeoFisheye(transform: Transform, dx: number, dy: number): THREE.BufferGeometry {\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        return this._createFlatGeometry(vertices);\n    }\n\n    private _getFlatImagePlaneGeoFromBasic(\n        transform: Transform,\n        basicX0: number,\n        basicX1: number,\n        basicY0: number,\n        basicY1: number): THREE.BufferGeometry {\n\n        let vertices: number[][] = [];\n\n        vertices.push(transform.unprojectBasic([basicX0, basicY0], this._imagePlaneDepth));\n        vertices.push(transform.unprojectBasic([basicX1, basicY0], this._imagePlaneDepth));\n        vertices.push(transform.unprojectBasic([basicX1, basicY1], this._imagePlaneDepth));\n        vertices.push(transform.unprojectBasic([basicX0, basicY1], this._imagePlaneDepth));\n\n        return this._createFlatGeometry(vertices);\n    }\n\n    private _createFlatGeometry(vertices: number[][]): THREE.BufferGeometry {\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 MeshFactory;\n",
     "import * as THREE from \"three\";\n\nimport {IShaderMaterial} from \"../../Component\";\n\nexport class MeshScene {\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            (<THREE.Material>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 MeshScene;\n",
     "import {\n    concat as observableConcat,\n    merge as observableMerge,\n    of as observableOf,\n    Observable,\n} from \"rxjs\";\n\nimport {\n    map,\n    filter,\n    pairwise,\n    startWith,\n    switchMap,\n    takeWhile,\n} from \"rxjs/operators\";\n\nimport {MouseService} from \"../../Viewer\";\n\nexport class MouseOperator {\n    public static filteredPairwiseMouseDrag$(\n        name: string,\n        mouseService: MouseService): Observable<[MouseEvent, MouseEvent]> {\n\n        return mouseService\n            .filtered$(name, mouseService.mouseDragStart$).pipe(\n            switchMap(\n                (mouseDragStart: MouseEvent): Observable<MouseEvent> => {\n                    const mouseDragging$: Observable<MouseEvent> = observableConcat(\n                        observableOf(mouseDragStart),\n                        mouseService\n                            .filtered$(name, mouseService.mouseDrag$));\n\n                    const mouseDragEnd$: Observable<MouseEvent> = mouseService\n                        .filtered$(name, mouseService.mouseDragEnd$).pipe(\n                        map(\n                            (): MouseEvent => {\n                                return null;\n                            }));\n\n                    return observableMerge(mouseDragging$, mouseDragEnd$).pipe(\n                        takeWhile(\n                            (e: MouseEvent): boolean => {\n                                return !!e;\n                            }),\n                        startWith(null));\n                }),\n            pairwise(),\n            filter(\n                (pair: [MouseEvent, MouseEvent]): boolean => {\n                    return pair[0] != null && pair[1] != null;\n                }));\n    }\n}\n\nexport default MouseOperator;\n",
     "import {combineLatest as observableCombineLatest, Observable, Subject, Subscription} from \"rxjs\";\n\nimport {withLatestFrom, map} from \"rxjs/operators\";\nimport * as vd from \"virtual-dom\";\n\nimport {\n    ComponentService,\n    Component,\n    IComponentConfiguration,\n} from \"../../Component\";\nimport {\n    Transform,\n    ViewportCoords,\n} from \"../../Geo\";\nimport {\n    IVNodeHash,\n    RenderCamera,\n} from \"../../Render\";\nimport {\n    IFrame,\n    State,\n} from \"../../State\";\nimport {\n    Container,\n    Navigator,\n} from \"../../Viewer\";\n\nexport class ZoomComponent extends Component<IComponentConfiguration> {\n    public static componentName: string = \"zoom\";\n\n    private _viewportCoords: ViewportCoords;\n\n    private _zoomDelta$: Subject<number>;\n\n    private _renderSubscription: Subscription;\n    private _zoomSubscription: Subscription;\n\n    constructor(name: string, container: Container, navigator: Navigator) {\n        super(name, container, navigator);\n\n        this._viewportCoords = new ViewportCoords();\n\n        this._zoomDelta$ = new Subject<number>();\n    }\n\n    protected _activate(): void {\n        this._renderSubscription = observableCombineLatest(\n                this._navigator.stateService.currentState$,\n                this._navigator.stateService.state$).pipe(\n            map(\n                ([frame, state]: [IFrame, State]): [number, State] => {\n                    return [frame.state.zoom, state];\n                }),\n            map(\n                ([zoom, state]: [number, State]): IVNodeHash => {\n                    const zoomInIcon: vd.VNode = vd.h(\"div.ZoomInIcon\", []);\n                    const zoomInButton: vd.VNode = zoom >= 3 || state === State.Waiting ?\n                        vd.h(\"div.ZoomInButtonDisabled\", [zoomInIcon]) :\n                        vd.h(\"div.ZoomInButton\", { onclick: (): void => { this._zoomDelta$.next(1); } }, [zoomInIcon]);\n\n                    const zoomOutIcon: vd.VNode = vd.h(\"div.ZoomOutIcon\", []);\n                    const zoomOutButton: vd.VNode = zoom <= 0 || state === State.Waiting ?\n                        vd.h(\"div.ZoomOutButtonDisabled\", [zoomOutIcon]) :\n                        vd.h(\"div.ZoomOutButton\", { onclick: (): void => { this._zoomDelta$.next(-1); } }, [zoomOutIcon]);\n\n                    return {\n                        name: this._name,\n                        vnode: vd.h(\n                            \"div.ZoomContainer\",\n                            { oncontextmenu: (event: MouseEvent): void => { event.preventDefault(); } },\n                            [zoomInButton, zoomOutButton]),\n                    };\n                }))\n            .subscribe(this._container.domRenderer.render$);\n\n        this._zoomSubscription = this._zoomDelta$.pipe(\n            withLatestFrom(\n                this._container.renderService.renderCamera$,\n                this._navigator.stateService.currentTransform$))\n            .subscribe(\n                ([zoomDelta, render, transform]: [number, RenderCamera, Transform]): void => {\n                    const unprojected: THREE.Vector3 = this._viewportCoords.unprojectFromViewport(0, 0, render.perspective);\n                    const reference: number[] = transform.projectBasic(unprojected.toArray());\n\n                    this._navigator.stateService.zoomIn(zoomDelta, reference);\n                });\n    }\n\n    protected _deactivate(): void {\n        this._renderSubscription.unsubscribe();\n        this._zoomSubscription.unsubscribe();\n    }\n\n    protected _getDefaultConfiguration(): IComponentConfiguration {\n        return {};\n    }\n}\n\nComponentService.register(ZoomComponent);\nexport default ZoomComponent;\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",
     "export type Point = { x: number, y: number };\n\nexport type Segment = { p1: Point, p2: Point };\n\nfunction sign(n: number): number {\n    return n > 0 ? 1 : n < 0 ? -1 : 0;\n}\n\nfunction colinearPointOnSegment(p: Point, s: Segment): boolean {\n    return p.x <= Math.max(s.p1.x, s.p2.x) &&\n        p.x >= Math.min(s.p1.x, s.p2.x) &&\n        p.y >= Math.max(s.p1.y, s.p2.y) &&\n        p.y >= Math.min(s.p1.y, s.p2.y);\n}\n\nfunction parallel(s1: Segment, s2: Segment): boolean {\n    const ux: number = s1.p2.x - s1.p1.x;\n    const uy: number = s1.p2.y - s1.p1.y;\n    const vx: number = s2.p2.x - s2.p1.x;\n    const vy: number = s2.p2.y - s2.p1.y;\n\n    const cross: number = ux * vy - uy * vx;\n    const u2: number = ux * ux + uy * uy;\n    const v2: number = vx * vx + vy * vy;\n\n    const epsilon2: number = 1e-10;\n\n    return cross * cross < epsilon2 * u2 * v2;\n}\n\nfunction tripletOrientation(p1: Point, p2: Point, p3: Point): number {\n    const orientation: number =\n        (p2.y - p1.y) * (p3.x - p2.x) -\n        (p3.y - p2.y) * (p2.x - p1.x);\n\n    return sign(orientation);\n}\n\nexport function segmentsIntersect(s1: Segment, s2: Segment): boolean {\n    if (parallel(s1, s2)) {\n        return false;\n    }\n\n    const o1: number = tripletOrientation(s1.p1, s1.p2, s2.p1);\n    const o2: number = tripletOrientation(s1.p1, s1.p2, s2.p2);\n    const o3: number = tripletOrientation(s2.p1, s2.p2, s1.p1);\n    const o4: number = tripletOrientation(s2.p1, s2.p2, s1.p2);\n\n    if (o1 !== o2 && o3 !== o4) {\n        return true;\n    }\n\n    if (o1 === 0 && colinearPointOnSegment(s2.p1, s1)) {\n        return true;\n    }\n\n    if (o2 === 0 && colinearPointOnSegment(s2.p2, s1)) {\n        return true;\n    }\n\n    if (o3 === 0 && colinearPointOnSegment(s1.p1, s2)) {\n        return true;\n    }\n\n    if (o4 === 0 && colinearPointOnSegment(s1.p2, s2)) {\n        return true;\n    }\n\n    return false;\n}\n\nexport function segmentIntersection(s1: Segment, s2: Segment): Point {\n    if (parallel(s1, s2)) {\n        return undefined;\n    }\n\n    const x1: number = s1.p1.x;\n    const x2: number = s1.p2.x;\n    const y1: number = s1.p1.y;\n    const y2: number = s1.p2.y;\n\n    const x3: number = s2.p1.x;\n    const x4: number = s2.p2.x;\n    const y3: number = s2.p1.y;\n    const y4: number = s2.p2.y;\n\n    const den: number = (x1 - x2) * (y3 - y4) - (y1 - y2) * (x3 - x4);\n    const xNum: number = (x1 * y2 - y1 * x2) * (x3 - x4) - (x1 - x2) * (x3 * y4 - y3 * x4);\n    const yNum: number = (x1 * y2 - y1 * x2) * (y3 - y4) - (y1 - y2) * (x3 * y4 - y3 * x4);\n\n    return { x: xNum / den, y: yNum / den };\n}\n",
     "import * 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        if (angle > 0) {\n            axis.normalize();\n        }\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 tr: number = elements[0] + elements[5] + elements[10];\n        let theta: number = Math.acos(Math.max(Math.min((tr - 1) / 2, 1), -1));\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 in degrees.\n     * @param {number} lon1 - Longitude of the first coordinate in degrees.\n     * @param {number} lat2 - Latitude of the second coordinate in degrees.\n     * @param {number} lon2 - Longitude of the second coordinate in degrees.\n     * @returns {number} Distance between lat lon positions in meters.\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(this.degToRad(lat1)) * Math.cos(this.degToRad(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",
-    "import * as THREE from \"three\";\n\nimport {IGPano} from \"../API\";\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    private _basicRt: THREE.Matrix4;\n\n    private _textureScale: number[];\n\n    private _ck1: number;\n    private _ck2: number;\n\n    private _radialPeak: number;\n\n    /**\n     * Create a new transform instance.\n     * @param {number} orientation - Image orientation.\n     * @param {number} width - Image height.\n     * @param {number} height - Image width.\n     * @param {number} focal - Focal length.\n     * @param {number} scale - Atomic scale.\n     * @param {IGPano} gpano - Panorama properties.\n     * @param {Array<number>} rotation - Rotation vector in three dimensions.\n     * @param {Array<number>} translation - Translation vector in three dimensions.\n     * @param {HTMLImageElement} image - Image for fallback size calculations.\n     */\n    constructor(\n        orientation: number,\n        width: number,\n        height: number,\n        focal: number,\n        scale: number,\n        gpano: IGPano,\n        rotation: number[],\n        translation: number[],\n        image: HTMLImageElement,\n        textureScale?: number[],\n        ck1?: number,\n        ck2?: number) {\n\n        this._orientation = this._getValue(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(width, keepOrientation ? imageWidth : imageHeight);\n        this._height = this._getValue(height, keepOrientation ? imageHeight : imageWidth);\n\n        this._basicAspect = keepOrientation ?\n             this._width / this._height :\n             this._height / this._width;\n\n        this._basicWidth = keepOrientation ? width : height;\n        this._basicHeight = keepOrientation ? height : width;\n\n        this._focal = this._getValue(focal, 1);\n        this._scale = this._getValue(scale, 0);\n\n        this._gpano = gpano != null ? gpano : null;\n\n        this._rt = this._getRt(rotation, translation);\n        this._srt = this._getSrt(this._rt, this._scale);\n\n        this._basicRt = this._getBasicRt(this._rt, orientation);\n\n        this._textureScale = !!textureScale ? textureScale : [1, 1];\n\n        this._ck1 = !!ck1 ? ck1 : 0;\n        this._ck2 = !!ck2 ? ck2 : 0;\n\n        this._radialPeak = this._getRadialPeak(this._ck1, this._ck2);\n    }\n\n    public get ck1(): number {\n        return this._ck1;\n    }\n\n    public get ck2(): number {\n        return this._ck2;\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    public get basicRt(): THREE.Matrix4 {\n        return this._basicRt;\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 radial peak.\n     * @returns {number} Value indicating the radius where the radial\n     * undistortion function peaks.\n     */\n    public get radialPeak(): number {\n        return this._radialPeak;\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        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 - Distance to unproject from camera center.\n     * @param {boolean} [depth] - Treat the distance value as depth from camera center.\n     *                            Only applicable for perspective images. Will be\n     *                            ignored for panoramas.\n     * @returns {Array<number>} Unprojected 3D world coordinates.\n     */\n    public unprojectBasic(basic: number[], distance: number, depth?: boolean): number[] {\n        let sfm: number[] = this._basicToSfm(basic);\n        return this.unprojectSfM(sfm, distance, depth);\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 - Distance to unproject from camera center.\n     * @param {boolean} [depth] - Treat the distance value as depth from camera center.\n     *                            Only applicable for perspective images. Will be\n     *                            ignored for panoramas.\n     * @returns {Array<number>} Unprojected 3D world coordinates.\n     */\n    public unprojectSfM(sfm: number[], distance: number, depth?: boolean): number[] {\n        let bearing: number[] = this._sfmToBearing(sfm);\n\n        const v: THREE.Vector4 = depth && !this.gpano ?\n            new THREE.Vector4(\n                distance * bearing[0] / bearing[2],\n                distance * bearing[1] / bearing[2],\n                distance,\n                1) :\n            new THREE.Vector4(\n                distance * bearing[0],\n                distance * bearing[1],\n                distance * bearing[2],\n                1);\n\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 [dxn, dyn]: number[] = [sfm[0] / this._focal, sfm[1] / this._focal];\n            const rp: number = this._radialPeak;\n            const dr: number = Math.sqrt(dxn * dxn + dyn * dyn);\n            let d: number = 1.0;\n\n            for (let i: number = 0; i < 10; i++) {\n                let r: number = dr / d;\n\n                if (r > rp) {\n                    r = rp;\n                }\n\n                d = 1 + this._ck1 * r ** 2 + this._ck2 * r ** 4;\n            }\n\n            const xn: number = dxn / d;\n            const yn: number = dyn / d;\n\n            let v: THREE.Vector3 = new THREE.Vector3(xn, yn, 1);\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                let [xn, yn]: number[] = [bearing[0] / bearing[2], bearing[1] / bearing[2]];\n                let r2: number = xn * xn + yn * yn;\n                const rp2: number = this._radialPeak ** 2;\n\n                if (r2 > rp2) {\n                    r2 = rp2;\n                }\n\n                const d: number = 1 + this._ck1 * r2 + this._ck2 * r2 ** 2;\n                return [\n                    this._focal * d * xn,\n                    this._focal * d * yn,\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        if (angle > 0) {\n            axis.normalize();\n        }\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    private _getBasicRt(rt: THREE.Matrix4, orientation: number): THREE.Matrix4 {\n        const axis: THREE.Vector3 = new THREE.Vector3(0, 0, 1);\n        let angle: number = 0;\n\n        switch (orientation) {\n            case 3:\n                angle = Math.PI;\n                break;\n            case 6:\n                angle = Math.PI / 2;\n                break;\n            case 8:\n                angle = 3 * Math.PI / 2;\n                break;\n            default:\n                break;\n        }\n\n        return new THREE.Matrix4()\n            .makeRotationAxis(axis, angle)\n            .multiply(rt);\n    }\n\n    private _getRadialPeak(k1: number, k2: number): number {\n        const a: number = 5 * k2;\n        const b: number = 3 * k1;\n        const c: number = 1;\n        const d: number = b ** 2 - 4 * a * c;\n\n        if (d < 0) {\n            return undefined;\n        }\n\n        const root1: number = (-b - Math.sqrt(d)) / 2 / a;\n        const root2: number = (-b + Math.sqrt(d)) / 2 / a;\n\n        const minRoot: number = Math.min(root1, root2);\n        const maxRoot: number = Math.max(root1, root2);\n\n        return minRoot > 0 ?\n            Math.sqrt(minRoot) :\n            maxRoot > 0 ?\n                Math.sqrt(maxRoot) :\n                undefined;\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        const size: number = Math.max(this._width, this._height);\n\n        const scaleX: number = this._orientation < 5 ? this._textureScale[0] : this._textureScale[1];\n        const scaleY: number = this._orientation < 5 ? this._textureScale[1] : this._textureScale[0];\n\n        const w: number = size / this._width * scaleX;\n        const h: number = size / this._height * scaleY;\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",
+    "import * as THREE from \"three\";\n\nimport {IGPano} from \"../API\";\nimport { CameraProjection } from \"../api/interfaces/CameraProjection\";\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    private _basicRt: THREE.Matrix4;\n\n    private _textureScale: number[];\n\n    private _ck1: number;\n    private _ck2: number;\n    private _cameraProjection: CameraProjection;\n\n    private _radialPeak: number;\n\n    /**\n     * Create a new transform instance.\n     * @param {number} orientation - Image orientation.\n     * @param {number} width - Image height.\n     * @param {number} height - Image width.\n     * @param {number} focal - Focal length.\n     * @param {number} scale - Atomic scale.\n     * @param {IGPano} gpano - Panorama properties.\n     * @param {Array<number>} rotation - Rotation vector in three dimensions.\n     * @param {Array<number>} translation - Translation vector in three dimensions.\n     * @param {HTMLImageElement} image - Image for fallback size calculations.\n     */\n    constructor(\n        orientation: number,\n        width: number,\n        height: number,\n        focal: number,\n        scale: number,\n        gpano: IGPano,\n        rotation: number[],\n        translation: number[],\n        image: HTMLImageElement,\n        textureScale?: number[],\n        ck1?: number,\n        ck2?: number,\n        cameraProjection?: CameraProjection) {\n\n        this._orientation = this._getValue(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(width, keepOrientation ? imageWidth : imageHeight);\n        this._height = this._getValue(height, keepOrientation ? imageHeight : imageWidth);\n\n        this._basicAspect = keepOrientation ?\n             this._width / this._height :\n             this._height / this._width;\n\n        this._basicWidth = keepOrientation ? width : height;\n        this._basicHeight = keepOrientation ? height : width;\n\n        this._focal = this._getValue(focal, 1);\n        this._scale = this._getValue(scale, 0);\n\n        this._gpano = gpano != null ? gpano : null;\n\n        this._rt = this._getRt(rotation, translation);\n        this._srt = this._getSrt(this._rt, this._scale);\n\n        this._basicRt = this._getBasicRt(this._rt, orientation);\n\n        this._textureScale = !!textureScale ? textureScale : [1, 1];\n\n        this._ck1 = !!ck1 ? ck1 : 0;\n        this._ck2 = !!ck2 ? ck2 : 0;\n        this._cameraProjection = !!cameraProjection ?\n            cameraProjection :\n            !!gpano ?\n                \"equirectangular\" :\n                \"perspective\";\n\n        this._radialPeak = this._getRadialPeak(this._ck1, this._ck2);\n    }\n\n    public get ck1(): number {\n        return this._ck1;\n    }\n\n    public get ck2(): number {\n        return this._ck2;\n    }\n\n    public get cameraProjection(): string {\n        return this._cameraProjection;\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    public get basicRt(): THREE.Matrix4 {\n        return this._basicRt;\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 radial peak.\n     * @returns {number} Value indicating the radius where the radial\n     * undistortion function peaks.\n     */\n    public get radialPeak(): number {\n        return this._radialPeak;\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        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 - Distance to unproject from camera center.\n     * @param {boolean} [depth] - Treat the distance value as depth from camera center.\n     *                            Only applicable for perspective images. Will be\n     *                            ignored for panoramas.\n     * @returns {Array<number>} Unprojected 3D world coordinates.\n     */\n    public unprojectBasic(basic: number[], distance: number, depth?: boolean): number[] {\n        let sfm: number[] = this._basicToSfm(basic);\n        return this.unprojectSfM(sfm, distance, depth);\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 - Distance to unproject from camera center.\n     * @param {boolean} [depth] - Treat the distance value as depth from camera center.\n     *                            Only applicable for perspective images. Will be\n     *                            ignored for panoramas.\n     * @returns {Array<number>} Unprojected 3D world coordinates.\n     */\n    public unprojectSfM(sfm: number[], distance: number, depth?: boolean): number[] {\n        let bearing: number[] = this._sfmToBearing(sfm);\n\n        const v: THREE.Vector4 = depth && !this.gpano ?\n            new THREE.Vector4(\n                distance * bearing[0] / bearing[2],\n                distance * bearing[1] / bearing[2],\n                distance,\n                1) :\n            new THREE.Vector4(\n                distance * bearing[0],\n                distance * bearing[1],\n                distance * bearing[2],\n                1);\n\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 if (this._cameraProjection === \"fisheye\") {\n            let [dxn, dyn]: number[] = [sfm[0] / this._focal, sfm[1] / this._focal];\n            const dTheta: number = Math.sqrt(dxn * dxn + dyn * dyn);\n            let d: number = this._distortionFromDistortedRadius(dTheta, this._ck1, this._ck2, this._radialPeak);\n            let theta: number = dTheta / d;\n            let z: number = Math.cos(theta);\n            let r: number = Math.sin(theta);\n            let x: number = r * dxn / dTheta;\n            let y: number = r * dyn / dTheta;\n            return [x, y, z];\n        } else {\n            let [dxn, dyn]: number[] = [sfm[0] / this._focal, sfm[1] / this._focal];\n            const dr: number = Math.sqrt(dxn * dxn + dyn * dyn);\n            let d: number = this._distortionFromDistortedRadius(dr, this._ck1, this._ck2, this._radialPeak);\n\n            const xn: number = dxn / d;\n            const yn: number = dyn / d;\n\n            let v: THREE.Vector3 = new THREE.Vector3(xn, yn, 1);\n            v.normalize();\n            return [v.x, v.y, v.z];\n        }\n    }\n\n    /** Compute distortion given the distorted radius.\n     *\n     *  Solves for d in the equation\n     *    y = d(x, k1, k2) * x\n     * given the distorted radius, y.\n     */\n    private _distortionFromDistortedRadius(distortedRadius: number, k1: number, k2: number, radialPeak: number): number {\n        let d: number = 1.0;\n        for (let i: number = 0; i < 10; i++) {\n            let radius: number = distortedRadius / d;\n            if (radius > radialPeak) {\n                radius = radialPeak;\n            }\n            d = 1 + k1 * radius ** 2 + k2 * radius ** 4;\n        }\n        return d;\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 if (this._cameraProjection === \"fisheye\") {\n            if (bearing[2] > 0) {\n                const [x, y, z]: number[] = bearing;\n                const r: number = Math.sqrt(x * x + y * y);\n                let theta: number = Math.atan2(r, z);\n\n                if (theta > this._radialPeak) {\n                    theta = this._radialPeak;\n                }\n\n                const distortion: number = 1.0 + theta ** 2 * (this._ck1 + theta ** 2 * this._ck2);\n                const s: number = this._focal * distortion * theta / r;\n\n                return [s * x, s * y];\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        } else {\n            if (bearing[2] > 0) {\n                let [xn, yn]: number[] = [bearing[0] / bearing[2], bearing[1] / bearing[2]];\n                let r2: number = xn * xn + yn * yn;\n                const rp2: number = this._radialPeak ** 2;\n\n                if (r2 > rp2) {\n                    r2 = rp2;\n                }\n\n                const d: number = 1 + this._ck1 * r2 + this._ck2 * r2 ** 2;\n                return [\n                    this._focal * d * xn,\n                    this._focal * d * yn,\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        if (angle > 0) {\n            axis.normalize();\n        }\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    private _getBasicRt(rt: THREE.Matrix4, orientation: number): THREE.Matrix4 {\n        const axis: THREE.Vector3 = new THREE.Vector3(0, 0, 1);\n        let angle: number = 0;\n\n        switch (orientation) {\n            case 3:\n                angle = Math.PI;\n                break;\n            case 6:\n                angle = Math.PI / 2;\n                break;\n            case 8:\n                angle = 3 * Math.PI / 2;\n                break;\n            default:\n                break;\n        }\n\n        return new THREE.Matrix4()\n            .makeRotationAxis(axis, angle)\n            .multiply(rt);\n    }\n\n    private _getRadialPeak(k1: number, k2: number): number {\n        const a: number = 5 * k2;\n        const b: number = 3 * k1;\n        const c: number = 1;\n        const d: number = b ** 2 - 4 * a * c;\n\n        if (d < 0) {\n            return undefined;\n        }\n\n        const root1: number = (-b - Math.sqrt(d)) / 2 / a;\n        const root2: number = (-b + Math.sqrt(d)) / 2 / a;\n\n        const minRoot: number = Math.min(root1, root2);\n        const maxRoot: number = Math.max(root1, root2);\n\n        return minRoot > 0 ?\n            Math.sqrt(minRoot) :\n            maxRoot > 0 ?\n                Math.sqrt(maxRoot) :\n                undefined;\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        const size: number = Math.max(this._width, this._height);\n\n        const scaleX: number = this._orientation < 5 ? this._textureScale[0] : this._textureScale[1];\n        const scaleY: number = this._orientation < 5 ? this._textureScale[1] : this._textureScale[0];\n\n        const w: number = size / this._width * scaleX;\n        const h: number = size / this._height * scaleY;\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",
     "import * 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 * image.\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 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.Camera} camera - Camera used in rendering.\n     * @returns {Array<number>} 2D canvas coordinates.\n     */\n    public basicToCanvas(\n        basicX: number,\n        basicY: number,\n        container: { offsetHeight: number, offsetWidth: number },\n        transform: Transform,\n        camera: THREE.Camera):\n        number[] {\n\n        const point3d: number[] = transform.unprojectBasic([basicX, basicY], this._unprojectDepth);\n        const canvas: number[] = this.projectToCanvas(point3d, container, camera);\n\n        return canvas;\n    }\n\n    /**\n     * Convert basic coordinates to canvas coordinates safely. If 3D point is\n     * behind camera null will be returned.\n     *\n     * @description Transform origin and 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.Camera} camera - Camera used in rendering.\n     * @returns {Array<number>} 2D canvas coordinates if the basic point represents a 3D point\n     * in front of the camera, otherwise null.\n     */\n    public basicToCanvasSafe(\n        basicX: number,\n        basicY: number,\n        container: { offsetHeight: number, offsetWidth: number },\n        transform: Transform,\n        camera: THREE.Camera):\n        number[] {\n\n        const viewport: number[] = this.basicToViewportSafe(basicX, basicY, transform, camera);\n\n        if (viewport === null) {\n            return null;\n        }\n\n        const canvas: number[] = this.viewportToCanvas(viewport[0], viewport[1], container);\n\n        return canvas;\n    }\n\n    /**\n     * Convert basic coordinates to viewport coordinates.\n     *\n     * @description Transform origin and 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.Camera} camera - 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        camera: THREE.Camera):\n        number[] {\n\n        const point3d: number[] = transform.unprojectBasic([basicX, basicY], this._unprojectDepth);\n        const viewport: number[] = this.projectToViewport(point3d, camera);\n\n        return viewport;\n    }\n\n    /**\n     * Convert basic coordinates to viewport coordinates safely. If 3D point is\n     * behind camera null will be returned.\n     *\n     * @description Transform origin and 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.Camera} camera - Camera used in rendering.\n     * @returns {Array<number>} 2D viewport coordinates.\n     */\n    public basicToViewportSafe(\n        basicX: number,\n        basicY: number,\n        transform: Transform,\n        camera: THREE.Camera):\n        number[] {\n\n        const point3d: number[] = transform.unprojectBasic([basicX, basicY], this._unprojectDepth);\n        const pointCamera: number[] = this.worldToCamera(point3d, camera);\n\n        if (pointCamera[2] > 0) {\n            return null;\n        }\n\n        const viewport: number[] = this.projectToViewport(point3d, camera);\n\n        return viewport;\n    }\n\n    /**\n     * Convert camera 3D coordinates to viewport coordinates.\n     *\n     * @param {number} pointCamera - 3D point in camera coordinate system.\n     * @param {THREE.Camera} camera - Camera used in rendering.\n     * @returns {Array<number>} 2D viewport coordinates.\n     */\n    public cameraToViewport(\n        pointCamera: number[],\n        camera: THREE.Camera):\n        number[] {\n\n        const viewport: THREE.Vector3 =\n            new THREE.Vector3().fromArray(pointCamera)\n                .applyMatrix4(camera.projectionMatrix);\n\n        return [viewport.x, viewport.y];\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 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.Camera} camera - Camera used in rendering.\n     * @returns {Array<number>} 2D basic coordinates.\n     */\n    public canvasToBasic(\n        canvasX: number,\n        canvasY: number,\n        container: { offsetHeight: number, offsetWidth: number },\n        transform: Transform,\n        camera: THREE.Camera):\n        number[] {\n\n        const point3d: number[] =\n            this.unprojectFromCanvas(canvasX, canvasY, container, camera)\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: { offsetHeight: number, offsetWidth: number }):\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: { offsetHeight: number, offsetWidth: number }): 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 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.Camera} camera - 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        camera: THREE.Camera):\n        number[] {\n\n        const topLeftBasic: number[] = this.viewportToBasic(-1, 1, transform, camera);\n        const topRightBasic: number[] = this.viewportToBasic(1, 1, transform, camera);\n        const bottomRightBasic: number[] = this.viewportToBasic(1, -1, transform, camera);\n        const bottomLeftBasic: number[] = this.viewportToBasic(-1, -1, transform, camera);\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 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.Camera} camera - Camera used in rendering.\n     * @returns {Array<number>} Array of pixel distances as [top, right, bottom, left].\n     */\n    public getPixelDistances(\n        container: { offsetHeight: number, offsetWidth: number },\n        transform: Transform,\n        camera: THREE.Camera):\n        number[] {\n\n        const topLeftBasic: number[] = this.viewportToBasic(-1, 1, transform, camera);\n        const topRightBasic: number[] = this.viewportToBasic(1, 1, transform, camera);\n        const bottomRightBasic: number[] = this.viewportToBasic(1, -1, transform, camera);\n        const bottomLeftBasic: number[] = this.viewportToBasic(-1, -1, transform, camera);\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, camera);\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, camera);\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, camera);\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, camera);\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.Camera} camera - Camera used in rendering.\n     * @returns {Array<number>} 2D canvas coordinates.\n     */\n    public projectToCanvas(\n        point3d: number[],\n        container: { offsetHeight: number, offsetWidth: number },\n        camera: THREE.Camera):\n        number[] {\n\n        const viewport: number[] = this.projectToViewport(point3d, camera);\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.Camera} camera - Camera used in rendering.\n     * @returns {Array<number>} 2D viewport coordinates.\n     */\n    public projectToViewport(\n        point3d: number[],\n        camera: THREE.Camera):\n        number[] {\n\n        const viewport: THREE.Vector3 =\n            new THREE.Vector3(point3d[0], point3d[1], point3d[2])\n                .project(camera);\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.Camera} camera - Camera used in rendering.\n     * @returns {Array<number>} 3D world coordinates.\n     */\n    public unprojectFromCanvas(\n        canvasX: number,\n        canvasY: number,\n        container: { offsetHeight: number, offsetWidth: number },\n        camera: THREE.Camera):\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], camera);\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.Camera} camera - Camera used in rendering.\n     * @returns {Array<number>} 3D world coordinates.\n     */\n    public unprojectFromViewport(\n        viewportX: number,\n        viewportY: number,\n        camera: THREE.Camera):\n        THREE.Vector3 {\n\n        const point3d: THREE.Vector3 =\n            new THREE.Vector3(viewportX, viewportY, 1)\n                .unproject(camera);\n\n        return point3d;\n    }\n\n    /**\n     * Convert viewport coordinates to basic coordinates.\n     *\n     * @description Transform origin and 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.Camera} camera - 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        camera: THREE.Camera):\n        number[] {\n\n        const point3d: number[] =\n            new THREE.Vector3(viewportX, viewportY, 1)\n                .unproject(camera)\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: { offsetHeight: number, offsetWidth: number }):\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    /**\n     * Convert 3D world coordinates to 3D camera coordinates.\n     *\n     * @param {number} point3D - 3D point in world coordinate system.\n     * @param {THREE.Camera} camera - Camera used in rendering.\n     * @returns {Array<number>} 3D camera coordinates.\n     */\n    public worldToCamera(\n        point3d: number[],\n        camera: THREE.Camera): number[] {\n\n        const pointCamera: THREE.Vector3 =\n            new THREE.Vector3(point3d[0], point3d[1], point3d[2])\n                .applyMatrix4(camera.matrixWorldInverse);\n\n        return pointCamera.toArray();\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",
     "import {merge as observableMerge, from as observableFrom, of as observableOf, Observable, Subject} from \"rxjs\";\n\nimport {tap, refCount, catchError, publish, finalize, map, reduce, mergeMap, mergeAll, last} from \"rxjs/operators\";\nimport * as rbush from \"rbush\";\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     * Sequences for which the nodes are cached.\n     */\n    private _cachedSequenceNodes: { [sequenceKey: 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 for which the nodes are being retrieved.\n     */\n    private _cachingSequenceNodes$: { [sequenceKey: 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._cachedSequenceNodes = {};\n        this._cachedSpatialEdges = {};\n        this._cachedTiles = {};\n\n        this._cachingFill$ = {};\n        this._cachingFull$ = {};\n        this._cachingSequenceNodes$ = {};\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                maxUnusedPreStoredNodes: 30,\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     * Caches the full node data for all images within a bounding\n     * box.\n     *\n     * @description The node assets are not cached.\n     *\n     * @param {ILatLon} sw - South west corner of bounding box.\n     * @param {ILatLon} ne - North east corner of bounding box.\n     * @returns {Observable<Graph>} Observable emitting the full\n     * nodes in the bounding box.\n     */\n    public cacheBoundingBox$(sw: ILatLon, ne: ILatLon): Observable<Node[]> {\n        const cacheTiles$: Observable<Graph>[] = this._graphCalculator.encodeHsFromBoundingBox(sw, ne)\n            .filter(\n                (h: string): boolean => {\n                    return !(h in this._cachedTiles);\n                })\n            .map(\n                (h): Observable<Graph> => {\n                    return h in this._cachingTiles$ ?\n                        this._cachingTiles$[h] :\n                        this._cacheTile$(h);\n                });\n\n        if (cacheTiles$.length === 0) {\n            cacheTiles$.push(observableOf(this));\n        }\n\n        return observableFrom(cacheTiles$).pipe(\n            mergeAll(),\n            last(),\n            mergeMap(\n                (graph: Graph): Observable<Node[]> => {\n                    const nodes: Node[] = this._nodeIndex\n                        .search({\n                            maxX: ne.lat,\n                            maxY: ne.lon,\n                            minX: sw.lat,\n                            minY: sw.lon,\n                        })\n                        .map(\n                            (item: NodeIndexItem): Node => {\n                                return item.node;\n                            });\n\n                    const fullNodes: Node[] = [];\n                    const coreNodes: string[] = [];\n\n                    for (const node of nodes) {\n                        if (node.full) {\n                            fullNodes.push(node);\n                        } else {\n                            coreNodes.push(node.key);\n                        }\n                    }\n\n                    const coreNodeBatches: string[][] = [];\n                    const batchSize: number = 200;\n                    while (coreNodes.length > 0) {\n                         coreNodeBatches.push(coreNodes.splice(0, batchSize));\n                    }\n\n                    const fullNodes$: Observable<Node[]> = observableOf(fullNodes);\n                    const fillNodes$: Observable<Node[]>[] = coreNodeBatches\n                        .map(\n                            (batch: string[]): Observable<Node[]> => {\n                                return this._apiV3.imageByKeyFill$(batch).pipe(\n                                    map(\n                                        (imageByKeyFill: { [key: string]: IFillNode }): Node[] => {\n                                            const filledNodes: Node[] = [];\n\n                                            for (const fillKey in imageByKeyFill) {\n                                                if (!imageByKeyFill.hasOwnProperty(fillKey)) {\n                                                    continue;\n                                                }\n\n                                                if (this.hasNode(fillKey)) {\n                                                    const node: Node = this.getNode(fillKey);\n\n                                                    if (!node.full) {\n                                                        this._makeFull(node, imageByKeyFill[fillKey]);\n                                                    }\n\n                                                    filledNodes.push(node);\n                                                }\n                                            }\n\n                                            return filledNodes;\n                                        }));\n                            });\n\n                    return observableMerge(\n                            fullNodes$,\n                            observableFrom(fillNodes$).pipe(\n                                mergeAll()));\n                }),\n            reduce(\n                (acc: Node[], value: Node[]): Node[] => {\n                    return acc.concat(value);\n                }));\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]).pipe(\n            tap(\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            finalize(\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]).pipe(\n            tap(\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_key == null) {\n                            throw new GraphMapillaryError(`Node has no sequence key (${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            finalize(\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 all keys in a sequence.\n     *\n     * @param {string} sequenceKey - Key of sequence.\n     * @param {string} referenceNodeKey - Key of node to use as reference\n     * for optimized caching.\n     * @returns {Observable<Graph>} Observable emitting the graph\n     * when the nodes of the sequence has been cached.\n     */\n    public cacheSequenceNodes$(sequenceKey: string, referenceNodeKey?: string): Observable<Graph> {\n        if (!this.hasSequence(sequenceKey)) {\n            throw new GraphMapillaryError(\n                `Cannot cache sequence nodes of sequence that does not exist in graph (${sequenceKey}).`);\n        }\n\n        if (this.hasSequenceNodes(sequenceKey)) {\n            throw new GraphMapillaryError(`Sequence nodes already cached (${sequenceKey}).`);\n        }\n\n        const sequence: Sequence = this.getSequence(sequenceKey);\n        if (sequence.key in this._cachingSequenceNodes$) {\n            return this._cachingSequenceNodes$[sequence.key];\n        }\n\n        const batches: string[][] = [];\n        const keys: string[] = sequence.keys.slice();\n\n        const referenceBatchSize: number = 50;\n        if (!!referenceNodeKey && keys.length > referenceBatchSize) {\n            const referenceIndex: number = keys.indexOf(referenceNodeKey);\n            const startIndex: number = Math.max(\n                0,\n                Math.min(\n                    referenceIndex - referenceBatchSize / 2,\n                    keys.length - referenceBatchSize));\n\n            batches.push(keys.splice(startIndex, referenceBatchSize));\n        }\n\n        const batchSize: number = 200;\n        while (keys.length > 0) {\n            batches.push(keys.splice(0, batchSize));\n        }\n\n        let batchesToCache: number = batches.length;\n        const sequenceNodes$: Observable<Graph> = observableFrom(batches).pipe(\n            mergeMap(\n                (batch: string[]): Observable<Graph> => {\n                    return this._apiV3.imageByKeyFull$(batch).pipe(\n                        tap(\n                            (imageByKeyFull: { [key: string]: IFullNode }): void => {\n                                for (const fullKey in imageByKeyFull) {\n                                    if (!imageByKeyFull.hasOwnProperty(fullKey)) {\n                                        continue;\n                                    }\n\n                                    const fn: IFullNode = imageByKeyFull[fullKey];\n\n                                    if (this.hasNode(fullKey)) {\n                                        const node: Node = this.getNode(fn.key);\n\n                                        if (!node.full) {\n                                            this._makeFull(node, fn);\n                                        }\n                                    } else {\n                                        if (fn.sequence_key == null) {\n                                            console.warn(`Sequence missing, discarding node (${fn.key})`);\n                                        }\n\n                                        const node: Node = new Node(fn);\n                                        this._makeFull(node, fn);\n\n                                        const h: string = this._graphCalculator.encodeH(node.originalLatLon, this._tilePrecision);\n                                        this._preStore(h, node);\n                                        this._setNode(node);\n                                    }\n                                }\n\n                                batchesToCache--;\n                            }),\n                        map(\n                            (imageByKeyFull: { [key: string]: IFullNode }): Graph => {\n                                return this;\n                            }));\n                },\n                6),\n            last(),\n            finalize(\n                (): void => {\n                    delete this._cachingSequenceNodes$[sequence.key];\n\n                    if (batchesToCache === 0) {\n                        this._cachedSequenceNodes[sequence.key] = true;\n                    }\n                }),\n            publish(),\n            refCount());\n\n        this._cachingSequenceNodes$[sequence.key] = sequenceNodes$;\n\n        return sequenceNodes$;\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).pipe(\n                tap(\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                catchError(\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                finalize(\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 {Array<Observable<Graph>>} Array of observables emitting\n     * the graph for each tile 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            const cacheTile$: Observable<Graph> = h in this._cachingTiles$ ?\n                this._cachingTiles$[h] :\n                this._cacheTile$(h);\n\n            cacheTiles$.push(\n                cacheTile$.pipe(\n                    tap(\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                    catchError(\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                    finalize(\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 sequence nodes.\n     *\n     * @param {string} sequenceKey - Key of sequence.\n     * @returns {boolean} Value indicating if the sequence nodes are\n     * being cached.\n     */\n    public isCachingSequenceNodes(sequenceKey: string): boolean {\n        return sequenceKey in this._cachingSequenceNodes$;\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 sequence nodes has been cached in the graph.\n     *\n     * @param {string} sequenceKey - Key of sequence.\n     * @returns {boolean} Value indicating if a sequence nodes has been\n     * cached in the graph.\n     */\n    public hasSequenceNodes(sequenceKey: string): boolean {\n        return sequenceKey in this._cachedSequenceNodes;\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     * @param {string} keepSequenceKey - Optional key of sequence\n     * for which the belonging nodes should not be disposed or\n     * removed from the graph. These nodes may still be uncached if\n     * not specified in keep keys param.\n     */\n    public uncache(keepKeys: string[], keepSequenceKey?: 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._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, keepSequenceKey);\n        }\n\n        let potentialPreStored: [NodeAccess, string][] = [];\n        let nonCachedPreStored: [string, string][] = [];\n        for (let h in this._preStored) {\n            if (!this._preStored.hasOwnProperty(h) || h in this._cachingTiles$) {\n                continue;\n            }\n\n            const prestoredNodes: { [key: string]: Node } = this._preStored[h];\n\n            for (let key in prestoredNodes) {\n                if (!prestoredNodes.hasOwnProperty(key) || key in keysInUse) {\n                    continue;\n                }\n\n                if (prestoredNodes[key].sequenceKey === keepSequenceKey) {\n                    continue;\n                }\n\n                if (key in this._cachedNodes) {\n                    potentialPreStored.push([this._cachedNodes[key], h]);\n                } else {\n                    nonCachedPreStored.push([key, h]);\n                }\n            }\n        }\n\n        let uncachePreStored: [string, string][] = potentialPreStored\n            .sort(\n                ([na1, h1]: [NodeAccess, string], [na2, h2]: [NodeAccess, string]): number => {\n                    return na2.accessed - na1.accessed;\n                })\n            .slice(this._configuration.maxUnusedPreStoredNodes)\n            .map(\n                ([na, h]: [NodeAccess, string]): [string, string] => {\n                    return [na.node.key, h];\n                });\n\n        this._uncachePreStored(nonCachedPreStored);\n        this._uncachePreStored(uncachePreStored);\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                sequenceKey === keepSequenceKey) {\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            if (sequenceKey in this._cachedSequenceNodes) {\n                delete this._cachedSequenceNodes[sequenceKey];\n            }\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]).pipe(\n            tap(\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            finalize(\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 _cacheTile$(h: string): Observable<Graph> {\n        this._cachingTiles$[h] = this._apiV3.imagesByH$([h]).pipe(\n            tap(\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_key == null) {\n                            console.warn(`Sequence missing, discarding node (${coreNode.key})`);\n\n                            continue;\n                        }\n\n                        if (preStored != null && coreNode.key in preStored) {\n                            let preStoredNode: Node = preStored[coreNode.key];\n                            delete preStored[coreNode.key];\n\n                            hCache.push(preStoredNode);\n\n                            let preStoredNodeIndexItem: NodeIndexItem = {\n                                lat: preStoredNode.latLon.lat,\n                                lon: preStoredNode.latLon.lon,\n                                node: preStoredNode,\n                            };\n\n                            this._nodeIndex.insert(preStoredNodeIndexItem);\n                            this._nodeIndexTiles[h].push(preStoredNodeIndexItem);\n                            this._nodeToTile[preStoredNode.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            catchError(\n                (error: Error): Observable<Graph> => {\n                    delete this._cachingTiles$[h];\n\n                    throw error;\n                }),\n            publish(),\n            refCount());\n\n        return this._cachingTiles$[h];\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, keepSequenceKey: string): void {\n        for (let node of this._cachedTiles[h].nodes) {\n            let key: string = node.key;\n\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            if (node.sequenceKey === keepSequenceKey) {\n                this._preStore(h, node);\n                node.uncache();\n            } else {\n                delete this._nodes[key];\n\n                if (node.sequenceKey in this._cachedSequenceNodes) {\n                    delete this._cachedSequenceNodes[node.sequenceKey];\n                }\n\n                node.dispose();\n            }\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 _uncachePreStored(preStored: [string, string][]): void {\n        let hs: { [h: string]: boolean } = {};\n        for (let [key, h] of preStored) {\n            if (key in this._nodes) {\n                delete this._nodes[key];\n            }\n\n            if (key in this._cachedNodes) {\n                delete this._cachedNodes[key];\n            }\n\n            let node: Node = this._preStored[h][key];\n\n            if (node.sequenceKey in this._cachedSequenceNodes) {\n                delete this._cachedSequenceNodes[node.sequenceKey];\n            }\n\n            delete this._preStored[h][key];\n\n            node.dispose();\n\n            hs[h] = true;\n        }\n\n        for (let h in hs) {\n            if (!hs.hasOwnProperty(h)) {\n                continue;\n            }\n\n            if (Object.keys(this._preStored[h]).length === 0) {\n                delete this._preStored[h];\n            }\n        }\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",
     "import {\n    concat as observableConcat,\n    empty as observableEmpty,\n    from as observableFrom,\n    of as observableOf,\n    Observable,\n    Subject,\n    Subscription,\n} from \"rxjs\";\n\nimport {\n    first,\n    expand,\n    map,\n    last,\n    mergeMap,\n    startWith,\n    publishReplay,\n    refCount,\n    catchError,\n    finalize,\n    tap,\n} from \"rxjs/operators\";\n\nimport {ILatLon} from \"../API\";\nimport {\n    FilterExpression,\n    Graph,\n    GraphMode,\n    ImageLoadingService,\n    Node,\n    Sequence,\n} from \"../Graph\";\n\n/**\n * @class GraphService\n *\n * @classdesc Represents a service for graph operations.\n */\nexport class GraphService {\n    private _graph$: Observable<Graph>;\n    private _graphMode: GraphMode;\n    private _graphMode$: Observable<GraphMode>;\n    private _graphModeSubject$: Subject<GraphMode>;\n\n    private _imageLoadingService: ImageLoadingService;\n\n    private _firstGraphSubjects$: Subject<Graph>[];\n\n    private _initializeCacheSubscriptions: Subscription[];\n    private _sequenceSubscriptions: Subscription[];\n    private _spatialSubscriptions: Subscription[];\n\n    /**\n     * Create a new graph service instance.\n     *\n     * @param {Graph} graph - Graph instance to be operated on.\n     */\n    constructor(graph: Graph, imageLoadingService: ImageLoadingService) {\n        this._graph$ = observableConcat(\n                observableOf(graph),\n                graph.changed$).pipe(\n            publishReplay(1),\n            refCount());\n\n        this._graph$.subscribe(() => { /*noop*/ });\n\n        this._graphMode = GraphMode.Spatial;\n        this._graphModeSubject$ = new Subject<GraphMode>();\n        this._graphMode$ = this._graphModeSubject$.pipe(\n            startWith(this._graphMode),\n            publishReplay(1),\n            refCount());\n\n        this._graphMode$.subscribe(() => { /*noop*/ });\n\n        this._imageLoadingService = imageLoadingService;\n\n        this._firstGraphSubjects$ = [];\n\n        this._initializeCacheSubscriptions = [];\n        this._sequenceSubscriptions = [];\n        this._spatialSubscriptions = [];\n    }\n\n    /**\n     * Get graph mode observable.\n     *\n     * @description Emits the current graph mode.\n     *\n     * @returns {Observable<GraphMode>} Observable\n     * emitting the current graph mode when it changes.\n     */\n    public get graphMode$(): Observable<GraphMode> {\n        return this._graphMode$;\n    }\n\n    /**\n     * Cache full nodes in a bounding box.\n     *\n     * @description When called, the full properties of\n     * the node are retrieved. The node cache is not initialized\n     * for any new nodes retrieved and the node assets are not\n     * retrieved, {@link cacheNode$} needs to be called for caching\n     * assets.\n     *\n     * @param {ILatLon} sw - South west corner of bounding box.\n     * @param {ILatLon} ne - North east corner of bounding box.\n     * @return {Observable<Array<Node>>} Observable emitting a single item,\n     * the nodes of the bounding box, when they have all been retrieved.\n     * @throws {Error} Propagates any IO node caching errors to the caller.\n     */\n    public cacheBoundingBox$(sw: ILatLon, ne: ILatLon): Observable<Node[]> {\n        return this._graph$.pipe(\n            first(),\n            mergeMap(\n                (graph: Graph): Observable<Node[]> => {\n                    return graph.cacheBoundingBox$(sw, ne);\n                }));\n    }\n\n    /**\n     * Cache a node in the graph and retrieve it.\n     *\n     * @description When called, the full properties of\n     * the node are retrieved and the node cache is initialized.\n     * After that the node assets are cached and the node\n     * is emitted to the observable when.\n     * In parallel to caching the node assets, the sequence and\n     * spatial edges of the node are cached. For this, the sequence\n     * of the node and the required tiles and spatial nodes are\n     * retrieved. The sequence and spatial edges may be set before\n     * or after the node is returned.\n     *\n     * @param {string} key - Key of the node to cache.\n     * @return {Observable<Node>} Observable emitting a single item,\n     * the node, when it has been retrieved and its assets are cached.\n     * @throws {Error} Propagates any IO node caching errors to the caller.\n     */\n    public cacheNode$(key: string): Observable<Node> {\n        const firstGraphSubject$: Subject<Graph> = new Subject<Graph>();\n\n        this._firstGraphSubjects$.push(firstGraphSubject$);\n\n        const firstGraph$: Observable<Graph> = firstGraphSubject$.pipe(\n            publishReplay(1),\n            refCount());\n\n        const node$: Observable<Node> = firstGraph$.pipe(\n            map(\n                (graph: Graph): Node => {\n                    return graph.getNode(key);\n                }),\n            mergeMap(\n                (node: Node): Observable<Node> => {\n                    return node.assetsCached ?\n                        observableOf(node) :\n                        node.cacheAssets$();\n                }),\n            publishReplay(1),\n            refCount());\n\n        node$.subscribe(\n            (node: Node): void => {\n                this._imageLoadingService.loadnode$.next(node);\n            },\n            (error: Error): void => {\n                console.error(`Failed to cache node (${key})`, error);\n            });\n\n        const initializeCacheSubscription: Subscription = this._graph$.pipe(\n            first(),\n            mergeMap(\n                (graph: Graph): Observable<Graph> => {\n                    if (graph.isCachingFull(key) || !graph.hasNode(key)) {\n                        return graph.cacheFull$(key);\n                    }\n\n                    if (graph.isCachingFill(key) || !graph.getNode(key).full) {\n                        return graph.cacheFill$(key);\n                    }\n\n                    return observableOf<Graph>(graph);\n                }),\n            tap(\n                (graph: Graph): void => {\n                    if (!graph.hasInitializedCache(key)) {\n                        graph.initializeCache(key);\n                    }\n                }),\n            finalize(\n                (): void => {\n                    if (initializeCacheSubscription == null) {\n                        return;\n                    }\n\n                    this._removeFromArray(initializeCacheSubscription, this._initializeCacheSubscriptions);\n                    this._removeFromArray(firstGraphSubject$, this._firstGraphSubjects$);\n                }))\n            .subscribe(\n                (graph: Graph): void => {\n                    firstGraphSubject$.next(graph);\n                    firstGraphSubject$.complete();\n                },\n                (error: Error): void => {\n                    firstGraphSubject$.error(error);\n                });\n\n        if (!initializeCacheSubscription.closed) {\n            this._initializeCacheSubscriptions.push(initializeCacheSubscription);\n        }\n\n        const graphSequence$: Observable<Graph> = firstGraph$.pipe(\n            mergeMap(\n                (graph: Graph): Observable<Graph> => {\n                    if (graph.isCachingNodeSequence(key) || !graph.hasNodeSequence(key)) {\n                        return graph.cacheNodeSequence$(key);\n                    }\n\n                    return observableOf<Graph>(graph);\n                }),\n            publishReplay(1),\n            refCount());\n\n        const sequenceSubscription: Subscription = graphSequence$.pipe(\n            tap(\n                (graph: Graph): void => {\n                    if (!graph.getNode(key).sequenceEdges.cached) {\n                        graph.cacheSequenceEdges(key);\n                    }\n                }),\n            finalize(\n                (): void => {\n                    if (sequenceSubscription == null) {\n                        return;\n                    }\n\n                    this._removeFromArray(sequenceSubscription, this._sequenceSubscriptions);\n                }))\n            .subscribe(\n                (graph: Graph): void => { return; },\n                (error: Error): void => {\n                    console.error(`Failed to cache sequence edges (${key}).`, error);\n                });\n\n        if (!sequenceSubscription.closed) {\n            this._sequenceSubscriptions.push(sequenceSubscription);\n        }\n\n        if (this._graphMode === GraphMode.Spatial) {\n            const spatialSubscription: Subscription = firstGraph$.pipe(\n                expand(\n                    (graph: Graph): Observable<Graph> => {\n                        if (graph.hasTiles(key)) {\n                            return observableEmpty();\n                        }\n\n                        return observableFrom<Observable<Graph>>(graph.cacheTiles$(key)).pipe(\n                            mergeMap(\n                                (graph$: Observable<Graph>): Observable<Graph> => {\n                                    return graph$.pipe(\n                                        mergeMap(\n                                            (g: Graph): Observable<Graph> => {\n                                                if (g.isCachingTiles(key)) {\n                                                    return observableEmpty();\n                                                }\n\n                                                return observableOf<Graph>(g);\n                                            }),\n                                        catchError(\n                                            (error: Error, caught$: Observable<Graph>): Observable<Graph> => {\n                                                console.error(`Failed to cache tile data (${key}).`, error);\n\n                                                return observableEmpty();\n                                            }));\n                                }));\n                    }),\n                last(),\n                mergeMap(\n                    (graph: Graph): Observable<Graph> => {\n                        if (graph.hasSpatialArea(key)) {\n                            return observableOf<Graph>(graph);\n                        }\n\n                        return observableFrom<Observable<Graph>>(graph.cacheSpatialArea$(key)).pipe(\n                            mergeMap(\n                                (graph$: Observable<Graph>): Observable<Graph> => {\n                                    return graph$.pipe(\n                                        catchError(\n                                            (error: Error, caught$: Observable<Graph>): Observable<Graph> => {\n                                                console.error(`Failed to cache spatial nodes (${key}).`, error);\n\n                                                return observableEmpty();\n                                            }));\n                                }));\n                    }),\n                last(),\n                mergeMap(\n                    (graph: Graph): Observable<Graph> => {\n                        return graph.hasNodeSequence(key) ?\n                            observableOf<Graph>(graph) :\n                            graph.cacheNodeSequence$(key);\n                    }),\n                tap(\n                    (graph: Graph): void => {\n                        if (!graph.getNode(key).spatialEdges.cached) {\n                            graph.cacheSpatialEdges(key);\n                        }\n                    }),\n                finalize(\n                    (): void => {\n                        if (spatialSubscription == null) {\n                            return;\n                        }\n\n                        this._removeFromArray(spatialSubscription, this._spatialSubscriptions);\n                    }))\n                .subscribe(\n                    (graph: Graph): void => { return; },\n                    (error: Error): void => {\n                        console.error(`Failed to cache spatial edges (${key}).`, error);\n                    });\n\n            if (!spatialSubscription.closed) {\n                this._spatialSubscriptions.push(spatialSubscription);\n            }\n        }\n\n        return node$.pipe(\n            first(\n                (node: Node): boolean => {\n                    return node.assetsCached;\n                }));\n    }\n\n    /**\n     * Cache a sequence in the graph and retrieve it.\n     *\n     * @param {string} sequenceKey - Sequence key.\n     * @returns {Observable<Sequence>} Observable emitting a single item,\n     * the sequence, when it has been retrieved and its assets are cached.\n     * @throws {Error} Propagates any IO node caching errors to the caller.\n     */\n    public cacheSequence$(sequenceKey: string): Observable<Sequence> {\n        return this._graph$.pipe(\n            first(),\n            mergeMap(\n                (graph: Graph): Observable<Graph> => {\n                    if (graph.isCachingSequence(sequenceKey) || !graph.hasSequence(sequenceKey)) {\n                        return graph.cacheSequence$(sequenceKey);\n                    }\n\n                    return observableOf<Graph>(graph);\n                }),\n            map(\n                (graph: Graph): Sequence => {\n                    return graph.getSequence(sequenceKey);\n                }));\n    }\n\n    /**\n     * Cache a sequence and its nodes in the graph and retrieve the sequence.\n     *\n     * @description Caches a sequence and its assets are cached and\n     * retrieves all nodes belonging to the sequence. The node assets\n     * or edges will not be cached.\n     *\n     * @param {string} sequenceKey - Sequence key.\n     * @param {string} referenceNodeKey - Key of node to use as reference\n     * for optimized caching.\n     * @returns {Observable<Sequence>} Observable emitting a single item,\n     * the sequence, when it has been retrieved, its assets are cached and\n     * all nodes belonging to the sequence has been retrieved.\n     * @throws {Error} Propagates any IO node caching errors to the caller.\n     */\n    public cacheSequenceNodes$(sequenceKey: string, referenceNodeKey?: string): Observable<Sequence> {\n        return this._graph$.pipe(\n            first(),\n            mergeMap(\n                (graph: Graph): Observable<Graph> => {\n                    if (graph.isCachingSequence(sequenceKey) || !graph.hasSequence(sequenceKey)) {\n                        return graph.cacheSequence$(sequenceKey);\n                    }\n\n                    return observableOf<Graph>(graph);\n                }),\n            mergeMap(\n                (graph: Graph): Observable<Graph> => {\n                    if (graph.isCachingSequenceNodes(sequenceKey) || !graph.hasSequenceNodes(sequenceKey)) {\n                        return graph.cacheSequenceNodes$(sequenceKey, referenceNodeKey);\n                    }\n\n                    return observableOf<Graph>(graph);\n                }),\n            map(\n                (graph: Graph): Sequence => {\n                    return graph.getSequence(sequenceKey);\n                }));\n    }\n\n    /**\n     * Set a spatial edge filter on the graph.\n     *\n     * @description Resets the spatial edges of all cached nodes.\n     *\n     * @param {FilterExpression} filter - Filter expression to be applied.\n     * @return {Observable<Graph>} Observable emitting a single item,\n     * the graph, when the spatial edges have been reset.\n     */\n    public setFilter$(filter: FilterExpression): Observable<void> {\n        this._resetSubscriptions(this._spatialSubscriptions);\n\n        return this._graph$.pipe(\n            first(),\n            tap(\n                (graph: Graph): void => {\n                    graph.resetSpatialEdges();\n                    graph.setFilter(filter);\n                }),\n            map(\n                (graph: Graph): void => {\n                    return undefined;\n                }));\n    }\n\n    /**\n     * Set the graph mode.\n     *\n     * @description If graph mode is set to spatial, caching\n     * is performed with emphasis on spatial edges. If graph\n     * mode is set to sequence no tile data is requested and\n     * no spatial edges are computed.\n     *\n     * When setting graph mode to sequence all spatial\n     * subscriptions are aborted.\n     *\n     * @param {GraphMode} mode - Graph mode to set.\n     */\n    public setGraphMode(mode: GraphMode): void {\n        if (this._graphMode === mode) {\n            return;\n        }\n\n        if (mode === GraphMode.Sequence) {\n            this._resetSubscriptions(this._spatialSubscriptions);\n        }\n\n        this._graphMode = mode;\n        this._graphModeSubject$.next(this._graphMode);\n    }\n\n    /**\n     * Reset the graph.\n     *\n     * @description Resets the graph but keeps the nodes of the\n     * supplied keys.\n     *\n     * @param {Array<string>} keepKeys - Keys of nodes to keep in graph.\n     * @return {Observable<Node>} Observable emitting a single item,\n     * the graph, when it has been reset.\n     */\n    public reset$(keepKeys: string[]): Observable<void> {\n        this._abortSubjects(this._firstGraphSubjects$);\n        this._resetSubscriptions(this._initializeCacheSubscriptions);\n        this._resetSubscriptions(this._sequenceSubscriptions);\n        this._resetSubscriptions(this._spatialSubscriptions);\n\n        return this._graph$.pipe(\n            first(),\n            tap(\n                (graph: Graph): void => {\n                    graph.reset(keepKeys);\n                }),\n            map(\n                (graph: Graph): void => {\n                    return undefined;\n                }));\n    }\n\n    /**\n     * Uncache the graph.\n     *\n     * @description Uncaches the graph by removing tiles, nodes and\n     * sequences. Keeps the nodes of the supplied keys and the tiles\n     * related to those nodes.\n     *\n     * @param {Array<string>} keepKeys - Keys of nodes to keep in graph.\n     * @param {string} keepSequenceKey - Optional key of sequence\n     * for which the belonging nodes should not be disposed or\n     * removed from the graph. These nodes may still be uncached if\n     * not specified in keep keys param.\n     * @return {Observable<Graph>} Observable emitting a single item,\n     * the graph, when the graph has been uncached.\n     */\n    public uncache$(keepKeys: string[], keepSequenceKey?: string): Observable<void> {\n        return this._graph$.pipe(\n            first(),\n            tap(\n                (graph: Graph): void => {\n                    graph.uncache(keepKeys, keepSequenceKey);\n                }),\n            map(\n                (graph: Graph): void => {\n                    return undefined;\n                }));\n    }\n\n    private _abortSubjects<T>(subjects: Subject<T>[]): void {\n        for (const subject of subjects.slice()) {\n            this._removeFromArray(subject, subjects);\n\n            subject.error(new Error(\"Cache node request was aborted.\"));\n        }\n    }\n\n    private _removeFromArray<T>(object: T, objects: T[]): void {\n        const index: number = objects.indexOf(object);\n        if (index !== -1) {\n            objects.splice(index, 1);\n        }\n    }\n\n    private _resetSubscriptions(subscriptions: Subscription[]): void {\n        for (const subscription of subscriptions.slice()) {\n            this._removeFromArray(subscription, subscriptions);\n\n            if (!subscription.closed) {\n                subscription.unsubscribe();\n            }\n        }\n    }\n}\n\nexport default GraphService;\n",
     "import {refCount, publishReplay, map, filter, scan} from \"rxjs/operators\";\nimport {Subject, Observable} from \"rxjs\";\n\nimport {ILoadStatus, Node} from \"../Graph\";\n\ntype LoadStatus = [{ [key: string]: ILoadStatus }, boolean];\n\nexport class ImageLoadingService {\n    private _loadnode$: Subject<Node> = new Subject<Node>();\n    private _loadstatus$: Observable<{[key: string]: ILoadStatus}>;\n\n    constructor () {\n        this._loadstatus$ = this._loadnode$.pipe(\n            scan<Node, LoadStatus>(\n                ([nodes]: LoadStatus, node: Node): [{[key: string]: ILoadStatus}, boolean] => {\n                    let changed: boolean = false;\n                    if (node.loadStatus.total === 0 || node.loadStatus.loaded === node.loadStatus.total) {\n                        if (node.key in nodes) {\n                            delete nodes[node.key];\n                            changed = true;\n                        }\n                    } else {\n                        nodes[node.key] = node.loadStatus;\n                        changed = true;\n                    }\n\n                    return [nodes, changed];\n                },\n                [{}, false]),\n            filter(\n                ([nodes, changed]: [{[key: string]: ILoadStatus}, boolean]): boolean => {\n                    return changed;\n                }),\n            map(\n                ([nodes]: [{[key: string]: ILoadStatus}, boolean]): {[key: string]: ILoadStatus} => {\n                    return nodes;\n                }),\n            publishReplay(1),\n            refCount());\n\n        this._loadstatus$.subscribe(() => { /*noop*/ });\n    }\n\n    public get loadnode$(): Subject<Node> {\n        return this._loadnode$;\n    }\n\n    public get loadstatus$(): Observable<{[key: string]: ILoadStatus}> {\n        return this._loadstatus$;\n    }\n}\n",
     "import * as Pbf from \"pbf\";\n\nimport {IMesh} from \"../Graph\";\n\nexport class MeshReader {\n    public static read(buffer: Buffer): IMesh {\n        let pbf: Pbf<IMesh> = new Pbf<IMesh>(buffer);\n\n        return pbf.readFields(MeshReader._readMeshField, { faces: [], vertices: [] });\n    }\n\n    private static _readMeshField(tag: number, mesh: IMesh, pbf: Pbf<IMesh>): void {\n        if (tag === 1) {\n            mesh.vertices.push(pbf.readFloat());\n        } else if (tag === 2) {\n            mesh.faces.push(pbf.readVarint());\n        }\n    }\n}\n",
-    "import {map} from \"rxjs/operators\";\nimport {Observable} from \"rxjs\";\n\nimport {\n    ICoreNode,\n    IFillNode,\n    IGPano,\n    ILatLon,\n} from \"../API\";\nimport {IEdge} from \"../Edge\";\nimport {\n    IEdgeStatus,\n    IMesh,\n    ILoadStatus,\n    NodeCache,\n} from \"../Graph\";\nimport {ImageSize} from \"../Viewer\";\n\n/**\n * @class Node\n *\n * @classdesc Represents a node in the navigation graph.\n *\n * Explanation of position and bearing properties:\n *\n * When images are uploaded they will have GPS information in the EXIF, this is what\n * is called `originalLatLon` {@link Node.originalLatLon}.\n *\n * When Structure from Motions has been run for a node a `computedLatLon` that\n * differs from the `originalLatLon` will be created. It is different because\n * GPS positions are not very exact and SfM aligns the camera positions according\n * to the 3D reconstruction {@link Node.computedLatLon}.\n *\n * At last there exist a `latLon` property which evaluates to\n * the `computedLatLon` from SfM if it exists but falls back\n * to the `originalLatLon` from the EXIF GPS otherwise {@link Node.latLon}.\n *\n * Everything that is done in in the Viewer is based on the SfM positions,\n * i.e. `computedLatLon`. That is why the smooth transitions go in the right\n * direction (nd not in strange directions because of bad GPS).\n *\n * E.g. when placing a marker in the Viewer it is relative to the SfM\n * position i.e. the `computedLatLon`.\n *\n * The same concept as above also applies to the compass angle (or bearing) properties\n * `originalCa`, `computedCa` and `ca`.\n */\nexport class Node {\n    private _cache: NodeCache;\n    private _core: ICoreNode;\n    private _fill: IFillNode;\n\n    /**\n     * Create a new node instance.\n     *\n     * @description Nodes are always created internally by the library.\n     * Nodes can not be added to the library through any API method.\n     *\n     * @param {ICoreNode} coreNode - Raw core node data.\n     * @ignore\n     */\n    constructor(core: ICoreNode) {\n        this._cache = null;\n        this._core = core;\n        this._fill = null;\n    }\n\n    /**\n     * Get assets cached.\n     *\n     * @description The assets that need to be cached for this property\n     * to report true are the following: fill properties, image and mesh.\n     * The library ensures that the current node will always have the\n     * assets cached.\n     *\n     * @returns {boolean} Value indicating whether all assets have been\n     * cached.\n     *\n     * @ignore\n     */\n    public get assetsCached(): boolean {\n        return this._core != null &&\n            this._fill != null &&\n            this._cache != null &&\n            this._cache.image != null &&\n            this._cache.mesh != null;\n    }\n\n    /**\n     * Get alt.\n     *\n     * @description If SfM has not been run the computed altitude is\n     * set to a default value of two meters.\n     *\n     * @returns {number} Altitude, in meters.\n     */\n    public get alt(): number {\n        return this._fill.calt;\n    }\n\n    /**\n     * Get ca.\n     *\n     * @description If the SfM computed compass angle exists it will\n     * be returned, otherwise the original EXIF compass angle.\n     *\n     * @returns {number} Compass angle, measured in degrees\n     * clockwise with respect to north.\n     */\n    public get ca(): number {\n        return this._fill.cca != null ? this._fill.cca : this._fill.ca;\n    }\n\n    /**\n     * Get capturedAt.\n     *\n     * @returns {number} Timestamp when the image was captured.\n     */\n    public get capturedAt(): number {\n        return this._fill.captured_at;\n    }\n\n    /**\n     * Get camera uuid.\n     *\n     * @description Will be undefined if the camera uuid was not\n     * recorded in the image exif information.\n     *\n     * @returns {string} Universally unique id for camera used\n     * when capturing image.\n     */\n    public get cameraUuid(): string {\n        return this._fill.captured_with_camera_uuid;\n    }\n\n    /**\n     * Get ck1.\n     *\n     * @description Will not be set if SfM has not been run.\n     *\n     * @returns {number} SfM computed radial distortion parameter\n     * k1.\n     */\n    public get ck1(): number {\n        return this._fill.ck1;\n    }\n\n    /**\n     * Get ck2.\n     *\n     * @description Will not be set if SfM has not been run.\n     *\n     * @returns {number} SfM computed radial distortion parameter\n     * k2.\n     */\n    public get ck2(): number {\n        return this._fill.ck2;\n    }\n\n    /**\n     * Get computedCA.\n     *\n     * @description Will not be set if SfM has not been run.\n     *\n     * @returns {number} SfM computed compass angle, measured\n     * in degrees clockwise with respect to north.\n     */\n    public get computedCA(): number {\n        return this._fill.cca;\n    }\n\n    /**\n     * Get computedLatLon.\n     *\n     * @description Will not be set if SfM has not been run.\n     *\n     * @returns {ILatLon} SfM computed latitude longitude in WGS84 datum,\n     * measured in degrees.\n     */\n    public get computedLatLon(): ILatLon {\n        return this._core.cl;\n    }\n\n    /**\n     * Get focal.\n     *\n     * @description Will not be set if SfM has not been run.\n     *\n     * @returns {number} SfM computed focal length.\n     */\n    public get focal(): number {\n        return this._fill.cfocal;\n    }\n\n    /**\n     * Get full.\n     *\n     * @description The library ensures that the current node will\n     * always be full.\n     *\n     * @returns {boolean} Value indicating whether the node has all\n     * properties filled.\n     *\n     * @ignore\n     */\n    public get full(): boolean {\n        return this._fill != null;\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._fill.gpano != null &&\n            this._fill.gpano.CroppedAreaLeftPixels === 0 &&\n            this._fill.gpano.CroppedAreaTopPixels === 0 &&\n            this._fill.gpano.CroppedAreaImageWidthPixels === this._fill.gpano.FullPanoWidthPixels &&\n            this._fill.gpano.CroppedAreaImageHeightPixels === this._fill.gpano.FullPanoHeightPixels;\n    }\n\n    /**\n     * Get gpano.\n     *\n     * @description Will not be set for non panoramic images.\n     *\n     * @returns {IGPano} Panorama information for panorama images.\n     */\n    public get gpano(): IGPano {\n        return this._fill.gpano;\n    }\n\n    /**\n     * Get height.\n     *\n     * @returns {number} Height of original image, not adjusted\n     * for orientation.\n     */\n    public get height(): number {\n        return this._fill.height;\n    }\n\n    /**\n     * Get image.\n     *\n     * @description The image will always be set on the current node.\n     *\n     * @returns {HTMLImageElement} Cached image element of the node.\n     */\n    public get image(): HTMLImageElement {\n        return this._cache.image;\n    }\n\n    /**\n     * Get image$.\n     *\n     * @returns {Observable<HTMLImageElement>} Observable emitting\n     * the cached image when it is updated.\n     *\n     * @ignore\n     */\n    public get image$(): Observable<HTMLImageElement> {\n        return this._cache.image$;\n    }\n\n    /**\n     * Get key.\n     *\n     * @returns {string} Unique key of the node.\n     */\n    public get key(): string {\n        return this._core.key;\n    }\n\n    /**\n     * Get latLon.\n     *\n     * @description If the SfM computed latitude longitude exist\n     * it will be returned, otherwise the original EXIF latitude\n     * longitude.\n     *\n     * @returns {ILatLon} Latitude longitude in WGS84 datum,\n     * measured in degrees.\n     */\n    public get latLon(): ILatLon {\n        return this._core.cl != null ? this._core.cl : this._core.l;\n    }\n\n    /**\n     * Get loadStatus.\n     *\n     * @returns {ILoadStatus} Value indicating the load status\n     * of the mesh and image.\n     */\n    public get loadStatus(): ILoadStatus {\n        return this._cache.loadStatus;\n    }\n\n    /**\n     * Get merged.\n     *\n     * @returns {boolean} Value indicating whether SfM has been\n     * run on the node and the node has been merged into a\n     * connected component.\n     */\n    public get merged(): boolean {\n        return this._fill != null &&\n            this._fill.merge_version != null &&\n            this._fill.merge_version > 0;\n    }\n\n    /**\n     * Get mergeCC.\n     *\n     * @description Will not be set if SfM has not yet been run on\n     * node.\n     *\n     * @returns {number} SfM connected component key to which\n     * image belongs.\n     */\n    public get mergeCC(): number {\n        return this._fill.merge_cc;\n    }\n\n    /**\n     * Get mergeVersion.\n     *\n     * @returns {number} Version for which SfM was run and image was merged.\n     */\n    public get mergeVersion(): number {\n        return this._fill.merge_version;\n    }\n\n    /**\n     * Get mesh.\n     *\n     * @description The mesh will always be set on the current node.\n     *\n     * @returns {IMesh} SfM triangulated mesh of reconstructed\n     * atomic 3D points.\n     */\n    public get mesh(): IMesh {\n        return this._cache.mesh;\n    }\n\n    /**\n     * Get organizationKey.\n     *\n     * @returns {string} Unique key of the organization to which\n     * the node belongs. If the node does not belong to an\n     * organization the organization key will be undefined.\n     */\n    public get organizationKey(): string {\n        return this._fill.organization_key;\n    }\n\n    /**\n     * Get orientation.\n     *\n     * @returns {number} EXIF orientation of original image.\n     */\n    public get orientation(): number {\n        return this._fill.orientation;\n    }\n\n    /**\n     * Get originalCA.\n     *\n     * @returns {number} Original EXIF compass angle, measured in\n     * degrees.\n     */\n    public get originalCA(): number {\n        return this._fill.ca;\n    }\n\n    /**\n     * Get originalLatLon.\n     *\n     * @returns {ILatLon} Original EXIF latitude longitude in\n     * WGS84 datum, measured in degrees.\n     */\n    public get originalLatLon(): ILatLon {\n        return this._core.l;\n    }\n\n    /**\n     * Get pano.\n     *\n     * @returns {boolean} Value indicating whether the node is a panorama.\n     * It could be a cropped or full panorama.\n     */\n    public get pano(): boolean {\n        return this._fill.gpano != null &&\n            this._fill.gpano.FullPanoWidthPixels != null;\n    }\n\n    /**\n     * Get private.\n     *\n     * @returns {boolean} Value specifying if image is accessible to\n     * organization members only or to everyone.\n     */\n    public get private(): boolean {\n        return this._fill.private;\n    }\n\n    /**\n     * Get projectKey.\n     *\n     * @returns {string} Unique key of the project to which\n     * the node belongs. If the node does not belong to a\n     * project the project key will be undefined.\n     *\n     * @deprecated This property will be deprecated in favor\n     * of the organization key and private properties.\n     */\n    public get projectKey(): string {\n        return this._fill.project != null ?\n            this._fill.project.key :\n            null;\n    }\n\n    /**\n     * Get rotation.\n     *\n     * @description Will not be set if SfM has not been run.\n     *\n     * @returns {Array<number>} Rotation vector in angle axis representation.\n     */\n    public get rotation(): number[] {\n        return this._fill.c_rotation;\n    }\n\n    /**\n     * Get scale.\n     *\n     * @description Will not be set if SfM has not been run.\n     *\n     * @returns {number} Scale of atomic reconstruction.\n     */\n    public get scale(): number {\n        return this._fill.atomic_scale;\n    }\n\n    /**\n     * Get sequenceKey.\n     *\n     * @returns {string} Unique key of the sequence to which\n     * the node belongs.\n     */\n    public get sequenceKey(): string {\n        return this._core.sequence_key;\n    }\n\n    /**\n     * Get sequenceEdges.\n     *\n     * @returns {IEdgeStatus} Value describing the status of the\n     * sequence edges.\n     */\n    public get sequenceEdges(): IEdgeStatus {\n        return this._cache.sequenceEdges;\n    }\n\n    /**\n     * Get sequenceEdges$.\n     *\n     * @description Internal observable, should not be used as an API.\n     *\n     * @returns {Observable<IEdgeStatus>} Observable emitting\n     * values describing the status of the sequence edges.\n     *\n     * @ignore\n     */\n    public get sequenceEdges$(): Observable<IEdgeStatus> {\n        return this._cache.sequenceEdges$;\n    }\n\n    /**\n     * Get spatialEdges.\n     *\n     * @returns {IEdgeStatus} Value describing the status of the\n     * spatial edges.\n     */\n    public get spatialEdges(): IEdgeStatus {\n        return this._cache.spatialEdges;\n    }\n\n    /**\n     * Get spatialEdges$.\n     *\n     * @description Internal observable, should not be used as an API.\n     *\n     * @returns {Observable<IEdgeStatus>} Observable emitting\n     * values describing the status of the spatial edges.\n     *\n     * @ignore\n     */\n    public get spatialEdges$(): Observable<IEdgeStatus> {\n        return this._cache.spatialEdges$;\n    }\n\n    /**\n     * Get userKey.\n     *\n     * @returns {string} Unique key of the user who uploaded\n     * the image.\n     */\n    public get userKey(): string {\n        return this._fill.user.key;\n    }\n\n    /**\n     * Get username.\n     *\n     * @returns {string} Username of the user who uploaded\n     * the image.\n     */\n    public get username(): string {\n        return this._fill.user.username;\n    }\n\n    /**\n     * Get width.\n     *\n     * @returns {number} Width of original image, not\n     * adjusted for orientation.\n     */\n    public get width(): number {\n        return this._fill.width;\n    }\n\n    /**\n     * Cache the image and mesh assets.\n     *\n     * @description The assets are always cached internally by the\n     * library prior to setting a node as the current node.\n     *\n     * @returns {Observable<Node>} Observable emitting this node whenever the\n     * load status has changed and when the mesh or image has been fully loaded.\n     *\n     * @ignore\n     */\n    public cacheAssets$(): Observable<Node> {\n        return this._cache.cacheAssets$(this.key, this.pano, this.merged).pipe(\n            map(\n                (): Node => {\n                    return this;\n                }));\n    }\n\n    /**\n     * Cache the image asset.\n     *\n     * @description Use for caching a differently sized image than\n     * the one currently held by the node.\n     *\n     * @returns {Observable<Node>} Observable emitting this node whenever the\n     * load status has changed and when the mesh or image has been fully loaded.\n     *\n     * @ignore\n     */\n    public cacheImage$(imageSize: ImageSize): Observable<Node> {\n        return this._cache.cacheImage$(this.key, imageSize).pipe(\n            map(\n                (): Node => {\n                    return this;\n                }));\n    }\n\n    /**\n     * Cache the sequence edges.\n     *\n     * @description The sequence edges are cached asynchronously\n     * internally by the library.\n     *\n     * @param {Array<IEdge>} edges - Sequence edges to cache.\n     * @ignore\n     */\n    public cacheSequenceEdges(edges: IEdge[]): void {\n        this._cache.cacheSequenceEdges(edges);\n    }\n\n    /**\n     * Cache the spatial edges.\n     *\n     * @description The spatial edges are cached asynchronously\n     * internally by the library.\n     *\n     * @param {Array<IEdge>} edges - Spatial edges to cache.\n     * @ignore\n     */\n    public cacheSpatialEdges(edges: IEdge[]): void {\n        this._cache.cacheSpatialEdges(edges);\n    }\n\n    /**\n     * Dispose the node.\n     *\n     * @description Disposes all cached assets.\n     * @ignore\n     */\n    public dispose(): void {\n        if (this._cache != null) {\n            this._cache.dispose();\n            this._cache = null;\n        }\n\n        this._core = null;\n        this._fill = null;\n    }\n\n    /**\n     * Initialize the node cache.\n     *\n     * @description The node cache is initialized internally by\n     * the library.\n     *\n     * @param {NodeCache} cache - The node cache to set as cache.\n     * @ignore\n     */\n    public initializeCache(cache: NodeCache): void {\n        if (this._cache != null) {\n            throw new Error(`Node cache already initialized (${this.key}).`);\n        }\n\n        this._cache = cache;\n    }\n\n    /**\n     * Fill the node with all properties.\n     *\n     * @description The node is filled internally by\n     * the library.\n     *\n     * @param {IFillNode} fill - The fill node struct.\n     * @ignore\n     */\n    public makeFull(fill: IFillNode): void {\n        if (fill == null) {\n            throw new Error(\"Fill can not be null.\");\n        }\n\n        this._fill = fill;\n    }\n\n    /**\n     * Reset the sequence edges.\n     *\n     * @ignore\n     */\n    public resetSequenceEdges(): void {\n        this._cache.resetSequenceEdges();\n    }\n\n    /**\n     * Reset the spatial edges.\n     *\n     * @ignore\n     */\n    public resetSpatialEdges(): void {\n        this._cache.resetSpatialEdges();\n    }\n\n    /**\n     * Clears the image and mesh assets, aborts\n     * any outstanding requests and resets edges.\n     *\n     * @ignore\n     */\n    public uncache(): void {\n        if (this._cache == null) {\n            return;\n        }\n\n        this._cache.dispose();\n        this._cache = null;\n    }\n}\n\nexport default Node;\n",
+    "import {map} from \"rxjs/operators\";\nimport {Observable} from \"rxjs\";\n\nimport {\n    ICoreNode,\n    IFillNode,\n    IGPano,\n    ILatLon,\n} from \"../API\";\nimport {IEdge} from \"../Edge\";\nimport {\n    IEdgeStatus,\n    IMesh,\n    ILoadStatus,\n    NodeCache,\n} from \"../Graph\";\nimport {ImageSize} from \"../Viewer\";\n\n/**\n * @class Node\n *\n * @classdesc Represents a node in the navigation graph.\n *\n * Explanation of position and bearing properties:\n *\n * When images are uploaded they will have GPS information in the EXIF, this is what\n * is called `originalLatLon` {@link Node.originalLatLon}.\n *\n * When Structure from Motions has been run for a node a `computedLatLon` that\n * differs from the `originalLatLon` will be created. It is different because\n * GPS positions are not very exact and SfM aligns the camera positions according\n * to the 3D reconstruction {@link Node.computedLatLon}.\n *\n * At last there exist a `latLon` property which evaluates to\n * the `computedLatLon` from SfM if it exists but falls back\n * to the `originalLatLon` from the EXIF GPS otherwise {@link Node.latLon}.\n *\n * Everything that is done in in the Viewer is based on the SfM positions,\n * i.e. `computedLatLon`. That is why the smooth transitions go in the right\n * direction (nd not in strange directions because of bad GPS).\n *\n * E.g. when placing a marker in the Viewer it is relative to the SfM\n * position i.e. the `computedLatLon`.\n *\n * The same concept as above also applies to the compass angle (or bearing) properties\n * `originalCa`, `computedCa` and `ca`.\n */\nexport class Node {\n    private _cache: NodeCache;\n    private _core: ICoreNode;\n    private _fill: IFillNode;\n\n    /**\n     * Create a new node instance.\n     *\n     * @description Nodes are always created internally by the library.\n     * Nodes can not be added to the library through any API method.\n     *\n     * @param {ICoreNode} coreNode - Raw core node data.\n     * @ignore\n     */\n    constructor(core: ICoreNode) {\n        this._cache = null;\n        this._core = core;\n        this._fill = null;\n    }\n\n    /**\n     * Get assets cached.\n     *\n     * @description The assets that need to be cached for this property\n     * to report true are the following: fill properties, image and mesh.\n     * The library ensures that the current node will always have the\n     * assets cached.\n     *\n     * @returns {boolean} Value indicating whether all assets have been\n     * cached.\n     *\n     * @ignore\n     */\n    public get assetsCached(): boolean {\n        return this._core != null &&\n            this._fill != null &&\n            this._cache != null &&\n            this._cache.image != null &&\n            this._cache.mesh != null;\n    }\n\n    /**\n     * Get alt.\n     *\n     * @description If SfM has not been run the computed altitude is\n     * set to a default value of two meters.\n     *\n     * @returns {number} Altitude, in meters.\n     */\n    public get alt(): number {\n        return this._fill.calt;\n    }\n\n    /**\n     * Get ca.\n     *\n     * @description If the SfM computed compass angle exists it will\n     * be returned, otherwise the original EXIF compass angle.\n     *\n     * @returns {number} Compass angle, measured in degrees\n     * clockwise with respect to north.\n     */\n    public get ca(): number {\n        return this._fill.cca != null ? this._fill.cca : this._fill.ca;\n    }\n\n    /**\n     * Get cameraProjection.\n     *\n     * @description Will be undefined if SfM has not been run.\n     *\n     * @returns {number} The camera projection of the image.\n     */\n    public get cameraProjection(): \"perspective\" | \"fisheye\" | \"equirectangular\" {\n        return this._fill.camera_projection_type;\n    }\n\n    /**\n     * Get capturedAt.\n     *\n     * @returns {number} Timestamp when the image was captured.\n     */\n    public get capturedAt(): number {\n        return this._fill.captured_at;\n    }\n\n    /**\n     * Get camera uuid.\n     *\n     * @description Will be undefined if the camera uuid was not\n     * recorded in the image exif information.\n     *\n     * @returns {string} Universally unique id for camera used\n     * when capturing image.\n     */\n    public get cameraUuid(): string {\n        return this._fill.captured_with_camera_uuid;\n    }\n\n    /**\n     * Get ck1.\n     *\n     * @description Will not be set if SfM has not been run.\n     *\n     * @returns {number} SfM computed radial distortion parameter\n     * k1.\n     */\n    public get ck1(): number {\n        return this._fill.ck1;\n    }\n\n    /**\n     * Get ck2.\n     *\n     * @description Will not be set if SfM has not been run.\n     *\n     * @returns {number} SfM computed radial distortion parameter\n     * k2.\n     */\n    public get ck2(): number {\n        return this._fill.ck2;\n    }\n\n    /**\n     * Get computedCA.\n     *\n     * @description Will not be set if SfM has not been run.\n     *\n     * @returns {number} SfM computed compass angle, measured\n     * in degrees clockwise with respect to north.\n     */\n    public get computedCA(): number {\n        return this._fill.cca;\n    }\n\n    /**\n     * Get computedLatLon.\n     *\n     * @description Will not be set if SfM has not been run.\n     *\n     * @returns {ILatLon} SfM computed latitude longitude in WGS84 datum,\n     * measured in degrees.\n     */\n    public get computedLatLon(): ILatLon {\n        return this._core.cl;\n    }\n\n    /**\n     * Get focal.\n     *\n     * @description Will not be set if SfM has not been run.\n     *\n     * @returns {number} SfM computed focal length.\n     */\n    public get focal(): number {\n        return this._fill.cfocal;\n    }\n\n    /**\n     * Get full.\n     *\n     * @description The library ensures that the current node will\n     * always be full.\n     *\n     * @returns {boolean} Value indicating whether the node has all\n     * properties filled.\n     *\n     * @ignore\n     */\n    public get full(): boolean {\n        return this._fill != null;\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._fill.gpano != null &&\n            this._fill.gpano.CroppedAreaLeftPixels === 0 &&\n            this._fill.gpano.CroppedAreaTopPixels === 0 &&\n            this._fill.gpano.CroppedAreaImageWidthPixels === this._fill.gpano.FullPanoWidthPixels &&\n            this._fill.gpano.CroppedAreaImageHeightPixels === this._fill.gpano.FullPanoHeightPixels;\n    }\n\n    /**\n     * Get gpano.\n     *\n     * @description Will not be set for non panoramic images.\n     *\n     * @returns {IGPano} Panorama information for panorama images.\n     */\n    public get gpano(): IGPano {\n        return this._fill.gpano;\n    }\n\n    /**\n     * Get height.\n     *\n     * @returns {number} Height of original image, not adjusted\n     * for orientation.\n     */\n    public get height(): number {\n        return this._fill.height;\n    }\n\n    /**\n     * Get image.\n     *\n     * @description The image will always be set on the current node.\n     *\n     * @returns {HTMLImageElement} Cached image element of the node.\n     */\n    public get image(): HTMLImageElement {\n        return this._cache.image;\n    }\n\n    /**\n     * Get image$.\n     *\n     * @returns {Observable<HTMLImageElement>} Observable emitting\n     * the cached image when it is updated.\n     *\n     * @ignore\n     */\n    public get image$(): Observable<HTMLImageElement> {\n        return this._cache.image$;\n    }\n\n    /**\n     * Get key.\n     *\n     * @returns {string} Unique key of the node.\n     */\n    public get key(): string {\n        return this._core.key;\n    }\n\n    /**\n     * Get latLon.\n     *\n     * @description If the SfM computed latitude longitude exist\n     * it will be returned, otherwise the original EXIF latitude\n     * longitude.\n     *\n     * @returns {ILatLon} Latitude longitude in WGS84 datum,\n     * measured in degrees.\n     */\n    public get latLon(): ILatLon {\n        return this._core.cl != null ? this._core.cl : this._core.l;\n    }\n\n    /**\n     * Get loadStatus.\n     *\n     * @returns {ILoadStatus} Value indicating the load status\n     * of the mesh and image.\n     */\n    public get loadStatus(): ILoadStatus {\n        return this._cache.loadStatus;\n    }\n\n    /**\n     * Get merged.\n     *\n     * @returns {boolean} Value indicating whether SfM has been\n     * run on the node and the node has been merged into a\n     * connected component.\n     */\n    public get merged(): boolean {\n        return this._fill != null &&\n            this._fill.merge_version != null &&\n            this._fill.merge_version > 0;\n    }\n\n    /**\n     * Get mergeCC.\n     *\n     * @description Will not be set if SfM has not yet been run on\n     * node.\n     *\n     * @returns {number} SfM connected component key to which\n     * image belongs.\n     */\n    public get mergeCC(): number {\n        return this._fill.merge_cc;\n    }\n\n    /**\n     * Get mergeVersion.\n     *\n     * @returns {number} Version for which SfM was run and image was merged.\n     */\n    public get mergeVersion(): number {\n        return this._fill.merge_version;\n    }\n\n    /**\n     * Get mesh.\n     *\n     * @description The mesh will always be set on the current node.\n     *\n     * @returns {IMesh} SfM triangulated mesh of reconstructed\n     * atomic 3D points.\n     */\n    public get mesh(): IMesh {\n        return this._cache.mesh;\n    }\n\n    /**\n     * Get organizationKey.\n     *\n     * @returns {string} Unique key of the organization to which\n     * the node belongs. If the node does not belong to an\n     * organization the organization key will be undefined.\n     */\n    public get organizationKey(): string {\n        return this._fill.organization_key;\n    }\n\n    /**\n     * Get orientation.\n     *\n     * @returns {number} EXIF orientation of original image.\n     */\n    public get orientation(): number {\n        return this._fill.orientation;\n    }\n\n    /**\n     * Get originalCA.\n     *\n     * @returns {number} Original EXIF compass angle, measured in\n     * degrees.\n     */\n    public get originalCA(): number {\n        return this._fill.ca;\n    }\n\n    /**\n     * Get originalLatLon.\n     *\n     * @returns {ILatLon} Original EXIF latitude longitude in\n     * WGS84 datum, measured in degrees.\n     */\n    public get originalLatLon(): ILatLon {\n        return this._core.l;\n    }\n\n    /**\n     * Get pano.\n     *\n     * @returns {boolean} Value indicating whether the node is a panorama.\n     * It could be a cropped or full panorama.\n     */\n    public get pano(): boolean {\n        return this._fill.gpano != null &&\n            this._fill.gpano.FullPanoWidthPixels != null;\n    }\n\n    /**\n     * Get private.\n     *\n     * @returns {boolean} Value specifying if image is accessible to\n     * organization members only or to everyone.\n     */\n    public get private(): boolean {\n        return this._fill.private;\n    }\n\n    /**\n     * Get projectKey.\n     *\n     * @returns {string} Unique key of the project to which\n     * the node belongs. If the node does not belong to a\n     * project the project key will be undefined.\n     *\n     * @deprecated This property will be deprecated in favor\n     * of the organization key and private properties.\n     */\n    public get projectKey(): string {\n        return this._fill.project != null ?\n            this._fill.project.key :\n            null;\n    }\n\n    /**\n     * Get rotation.\n     *\n     * @description Will not be set if SfM has not been run.\n     *\n     * @returns {Array<number>} Rotation vector in angle axis representation.\n     */\n    public get rotation(): number[] {\n        return this._fill.c_rotation;\n    }\n\n    /**\n     * Get scale.\n     *\n     * @description Will not be set if SfM has not been run.\n     *\n     * @returns {number} Scale of atomic reconstruction.\n     */\n    public get scale(): number {\n        return this._fill.atomic_scale;\n    }\n\n    /**\n     * Get sequenceKey.\n     *\n     * @returns {string} Unique key of the sequence to which\n     * the node belongs.\n     */\n    public get sequenceKey(): string {\n        return this._core.sequence_key;\n    }\n\n    /**\n     * Get sequenceEdges.\n     *\n     * @returns {IEdgeStatus} Value describing the status of the\n     * sequence edges.\n     */\n    public get sequenceEdges(): IEdgeStatus {\n        return this._cache.sequenceEdges;\n    }\n\n    /**\n     * Get sequenceEdges$.\n     *\n     * @description Internal observable, should not be used as an API.\n     *\n     * @returns {Observable<IEdgeStatus>} Observable emitting\n     * values describing the status of the sequence edges.\n     *\n     * @ignore\n     */\n    public get sequenceEdges$(): Observable<IEdgeStatus> {\n        return this._cache.sequenceEdges$;\n    }\n\n    /**\n     * Get spatialEdges.\n     *\n     * @returns {IEdgeStatus} Value describing the status of the\n     * spatial edges.\n     */\n    public get spatialEdges(): IEdgeStatus {\n        return this._cache.spatialEdges;\n    }\n\n    /**\n     * Get spatialEdges$.\n     *\n     * @description Internal observable, should not be used as an API.\n     *\n     * @returns {Observable<IEdgeStatus>} Observable emitting\n     * values describing the status of the spatial edges.\n     *\n     * @ignore\n     */\n    public get spatialEdges$(): Observable<IEdgeStatus> {\n        return this._cache.spatialEdges$;\n    }\n\n    /**\n     * Get userKey.\n     *\n     * @returns {string} Unique key of the user who uploaded\n     * the image.\n     */\n    public get userKey(): string {\n        return this._fill.user.key;\n    }\n\n    /**\n     * Get username.\n     *\n     * @returns {string} Username of the user who uploaded\n     * the image.\n     */\n    public get username(): string {\n        return this._fill.user.username;\n    }\n\n    /**\n     * Get width.\n     *\n     * @returns {number} Width of original image, not\n     * adjusted for orientation.\n     */\n    public get width(): number {\n        return this._fill.width;\n    }\n\n    /**\n     * Cache the image and mesh assets.\n     *\n     * @description The assets are always cached internally by the\n     * library prior to setting a node as the current node.\n     *\n     * @returns {Observable<Node>} Observable emitting this node whenever the\n     * load status has changed and when the mesh or image has been fully loaded.\n     *\n     * @ignore\n     */\n    public cacheAssets$(): Observable<Node> {\n        return this._cache.cacheAssets$(this.key, this.pano, this.merged).pipe(\n            map(\n                (): Node => {\n                    return this;\n                }));\n    }\n\n    /**\n     * Cache the image asset.\n     *\n     * @description Use for caching a differently sized image than\n     * the one currently held by the node.\n     *\n     * @returns {Observable<Node>} Observable emitting this node whenever the\n     * load status has changed and when the mesh or image has been fully loaded.\n     *\n     * @ignore\n     */\n    public cacheImage$(imageSize: ImageSize): Observable<Node> {\n        return this._cache.cacheImage$(this.key, imageSize).pipe(\n            map(\n                (): Node => {\n                    return this;\n                }));\n    }\n\n    /**\n     * Cache the sequence edges.\n     *\n     * @description The sequence edges are cached asynchronously\n     * internally by the library.\n     *\n     * @param {Array<IEdge>} edges - Sequence edges to cache.\n     * @ignore\n     */\n    public cacheSequenceEdges(edges: IEdge[]): void {\n        this._cache.cacheSequenceEdges(edges);\n    }\n\n    /**\n     * Cache the spatial edges.\n     *\n     * @description The spatial edges are cached asynchronously\n     * internally by the library.\n     *\n     * @param {Array<IEdge>} edges - Spatial edges to cache.\n     * @ignore\n     */\n    public cacheSpatialEdges(edges: IEdge[]): void {\n        this._cache.cacheSpatialEdges(edges);\n    }\n\n    /**\n     * Dispose the node.\n     *\n     * @description Disposes all cached assets.\n     * @ignore\n     */\n    public dispose(): void {\n        if (this._cache != null) {\n            this._cache.dispose();\n            this._cache = null;\n        }\n\n        this._core = null;\n        this._fill = null;\n    }\n\n    /**\n     * Initialize the node cache.\n     *\n     * @description The node cache is initialized internally by\n     * the library.\n     *\n     * @param {NodeCache} cache - The node cache to set as cache.\n     * @ignore\n     */\n    public initializeCache(cache: NodeCache): void {\n        if (this._cache != null) {\n            throw new Error(`Node cache already initialized (${this.key}).`);\n        }\n\n        this._cache = cache;\n    }\n\n    /**\n     * Fill the node with all properties.\n     *\n     * @description The node is filled internally by\n     * the library.\n     *\n     * @param {IFillNode} fill - The fill node struct.\n     * @ignore\n     */\n    public makeFull(fill: IFillNode): void {\n        if (fill == null) {\n            throw new Error(\"Fill can not be null.\");\n        }\n\n        this._fill = fill;\n    }\n\n    /**\n     * Reset the sequence edges.\n     *\n     * @ignore\n     */\n    public resetSequenceEdges(): void {\n        this._cache.resetSequenceEdges();\n    }\n\n    /**\n     * Reset the spatial edges.\n     *\n     * @ignore\n     */\n    public resetSpatialEdges(): void {\n        this._cache.resetSpatialEdges();\n    }\n\n    /**\n     * Clears the image and mesh assets, aborts\n     * any outstanding requests and resets edges.\n     *\n     * @ignore\n     */\n    public uncache(): void {\n        if (this._cache == null) {\n            return;\n        }\n\n        this._cache.dispose();\n        this._cache = null;\n    }\n}\n\nexport default Node;\n",
     "import {of as observableOf, combineLatest as observableCombineLatest, Subject, Observable, Subscriber, Subscription} from \"rxjs\";\n\nimport {map, tap, startWith, publishReplay, refCount, finalize, first} from \"rxjs/operators\";\n\nimport {IEdge} from \"../Edge\";\nimport {\n    IEdgeStatus,\n    IMesh,\n    ILoadStatus,\n    ILoadStatusObject,\n    MeshReader,\n} from \"../Graph\";\nimport {\n    Settings,\n    Urls,\n} from \"../Utils\";\nimport {ImageSize} from \"../Viewer\";\n\n/**\n * @class NodeCache\n *\n * @classdesc Represents the cached properties of a node.\n */\nexport class NodeCache {\n    private _disposed: boolean;\n\n    private _image: HTMLImageElement;\n    private _loadStatus: ILoadStatus;\n    private _mesh: IMesh;\n    private _sequenceEdges: IEdgeStatus;\n    private _spatialEdges: IEdgeStatus;\n\n    private _imageRequest: XMLHttpRequest;\n    private _meshRequest: XMLHttpRequest;\n\n    private _imageChanged$: Subject<HTMLImageElement>;\n    private _image$: Observable<HTMLImageElement>;\n    private _sequenceEdgesChanged$: Subject<IEdgeStatus>;\n    private _sequenceEdges$: Observable<IEdgeStatus>;\n    private _spatialEdgesChanged$: Subject<IEdgeStatus>;\n    private _spatialEdges$: Observable<IEdgeStatus>;\n\n    private _cachingAssets$: Observable<NodeCache>;\n\n    private _iamgeSubscription: Subscription;\n    private _sequenceEdgesSubscription: Subscription;\n    private _spatialEdgesSubscription: Subscription;\n\n    /**\n     * Create a new node cache instance.\n     */\n    constructor() {\n        this._disposed = false;\n\n        this._image = null;\n        this._loadStatus = { loaded: 0, total: 0 };\n        this._mesh = null;\n        this._sequenceEdges = { cached: false, edges: [] };\n        this._spatialEdges = { cached: false, edges: [] };\n\n        this._imageChanged$ = new Subject<HTMLImageElement>();\n        this._image$ = this._imageChanged$.pipe(\n            startWith(null),\n            publishReplay(1),\n            refCount());\n\n        this._iamgeSubscription = this._image$.subscribe();\n\n        this._sequenceEdgesChanged$ = new Subject<IEdgeStatus>();\n        this._sequenceEdges$ = this._sequenceEdgesChanged$.pipe(\n            startWith(this._sequenceEdges),\n            publishReplay(1),\n            refCount());\n\n        this._sequenceEdgesSubscription = this._sequenceEdges$.subscribe(() => { /*noop*/ });\n\n        this._spatialEdgesChanged$ = new Subject<IEdgeStatus>();\n        this._spatialEdges$ = this._spatialEdgesChanged$.pipe(\n            startWith(this._spatialEdges),\n            publishReplay(1),\n            refCount());\n\n        this._spatialEdgesSubscription = this._spatialEdges$.subscribe(() => { /*noop*/ });\n\n        this._cachingAssets$ = null;\n    }\n\n    /**\n     * Get image.\n     *\n     * @description Will not be set when assets have not been cached\n     * or when the object has been disposed.\n     *\n     * @returns {HTMLImageElement} Cached image element of the node.\n     */\n    public get image(): HTMLImageElement {\n        return this._image;\n    }\n\n    /**\n     * Get image$.\n     *\n     * @returns {Observable<HTMLImageElement>} Observable emitting\n     * the cached image when it is updated.\n     */\n    public get image$(): Observable<HTMLImageElement> {\n        return this._image$;\n    }\n\n    /**\n     * Get loadStatus.\n     *\n     * @returns {ILoadStatus} Value indicating the load status\n     * of the mesh and image.\n     */\n    public get loadStatus(): ILoadStatus {\n        return this._loadStatus;\n    }\n\n    /**\n     * Get mesh.\n     *\n     * @description Will not be set when assets have not been cached\n     * or when the object has been disposed.\n     *\n     * @returns {IMesh} SfM triangulated mesh of reconstructed\n     * atomic 3D points.\n     */\n    public get mesh(): IMesh {\n        return this._mesh;\n    }\n\n    /**\n     * Get sequenceEdges.\n     *\n     * @returns {IEdgeStatus} Value describing the status of the\n     * sequence edges.\n     */\n    public get sequenceEdges(): IEdgeStatus {\n        return this._sequenceEdges;\n    }\n\n    /**\n     * Get sequenceEdges$.\n     *\n     * @returns {Observable<IEdgeStatus>} Observable emitting\n     * values describing the status of the sequence edges.\n     */\n    public get sequenceEdges$(): Observable<IEdgeStatus> {\n        return this._sequenceEdges$;\n    }\n\n    /**\n     * Get spatialEdges.\n     *\n     * @returns {IEdgeStatus} Value describing the status of the\n     * spatial edges.\n     */\n    public get spatialEdges(): IEdgeStatus {\n        return this._spatialEdges;\n    }\n\n    /**\n     * Get spatialEdges$.\n     *\n     * @returns {Observable<IEdgeStatus>} Observable emitting\n     * values describing the status of the spatial edges.\n     */\n    public get spatialEdges$(): Observable<IEdgeStatus> {\n        return this._spatialEdges$;\n    }\n\n    /**\n     * Cache the image and mesh assets.\n     *\n     * @param {string} key - Key of the node to cache.\n     * @param {boolean} pano - Value indicating whether node is a panorama.\n     * @param {boolean} merged - Value indicating whether node is merged.\n     * @returns {Observable<NodeCache>} Observable emitting this node\n     * cache whenever the load status has changed and when the mesh or image\n     * has been fully loaded.\n     */\n    public cacheAssets$(key: string, pano: boolean, merged: boolean): Observable<NodeCache> {\n        if (this._cachingAssets$ != null) {\n            return this._cachingAssets$;\n        }\n\n        let imageSize: ImageSize = pano ?\n            Settings.basePanoramaSize :\n            Settings.baseImageSize;\n\n        this._cachingAssets$ = observableCombineLatest(\n                this._cacheImage$(key, imageSize),\n                this._cacheMesh$(key, merged)).pipe(\n            map(\n                ([imageStatus, meshStatus]: [ILoadStatusObject<HTMLImageElement>, ILoadStatusObject<IMesh>]): NodeCache => {\n                    this._loadStatus.loaded = 0;\n                    this._loadStatus.total = 0;\n\n                    if (meshStatus) {\n                        this._mesh = meshStatus.object;\n                        this._loadStatus.loaded += meshStatus.loaded.loaded;\n                        this._loadStatus.total += meshStatus.loaded.total;\n                    }\n\n                    if (imageStatus) {\n                        this._image = imageStatus.object;\n                        this._loadStatus.loaded += imageStatus.loaded.loaded;\n                        this._loadStatus.total += imageStatus.loaded.total;\n                    }\n\n                    return this;\n                }),\n            finalize(\n                (): void => {\n                    this._cachingAssets$ = null;\n                }),\n            publishReplay(1),\n            refCount());\n\n        this._cachingAssets$.pipe(\n            first(\n                (nodeCache: NodeCache): boolean => {\n                    return !!nodeCache._image;\n                }))\n            .subscribe(\n                (nodeCache: NodeCache): void => {\n                    this._imageChanged$.next(this._image);\n                },\n                (error: Error): void => { /*noop*/ });\n\n        return this._cachingAssets$;\n    }\n\n    /**\n     * Cache an image with a higher resolution than the current one.\n     *\n     * @param {string} key - Key of the node to cache.\n     * @param {ImageSize} imageSize - The size to cache.\n     * @returns {Observable<NodeCache>} Observable emitting a single item,\n     * the node cache, when the image has been cached. If supplied image\n     * size is not larger than the current image size the node cache is\n     * returned immediately.\n     */\n    public cacheImage$(key: string, imageSize: ImageSize): Observable<NodeCache> {\n        if (this._image != null && imageSize <= Math.max(this._image.width, this._image.height)) {\n            return observableOf<NodeCache>(this);\n        }\n\n        const cacheImage$: Observable<NodeCache> = this._cacheImage$(key, imageSize).pipe(\n            first(\n                (status: ILoadStatusObject<HTMLImageElement>): boolean => {\n                    return status.object != null;\n                }),\n            tap(\n                (status: ILoadStatusObject<HTMLImageElement>): void => {\n                    this._disposeImage();\n                    this._image = status.object;\n                }),\n            map(\n                (imageStatus: ILoadStatusObject<HTMLImageElement>): NodeCache => {\n                    return this;\n                }),\n            publishReplay(1),\n            refCount());\n\n        cacheImage$\n            .subscribe(\n                (nodeCache: NodeCache): void => {\n                    this._imageChanged$.next(this._image);\n                },\n                (error: Error): void => { /*noop*/ });\n\n        return cacheImage$;\n    }\n\n    /**\n     * Cache the sequence edges.\n     *\n     * @param {Array<IEdge>} edges - Sequence edges to cache.\n     */\n    public cacheSequenceEdges(edges: IEdge[]): void {\n        this._sequenceEdges = { cached: true, edges: edges };\n        this._sequenceEdgesChanged$.next(this._sequenceEdges);\n    }\n\n    /**\n     * Cache the spatial edges.\n     *\n     * @param {Array<IEdge>} edges - Spatial edges to cache.\n     */\n    public cacheSpatialEdges(edges: IEdge[]): void {\n        this._spatialEdges = { cached: true, edges: edges };\n        this._spatialEdgesChanged$.next(this._spatialEdges);\n    }\n\n    /**\n     * Dispose the node cache.\n     *\n     * @description Disposes all cached assets and unsubscribes to\n     * all streams.\n     */\n    public dispose(): void {\n        this._iamgeSubscription.unsubscribe();\n        this._sequenceEdgesSubscription.unsubscribe();\n        this._spatialEdgesSubscription.unsubscribe();\n\n        this._disposeImage();\n\n        this._mesh = null;\n        this._loadStatus.loaded = 0;\n        this._loadStatus.total = 0;\n        this._sequenceEdges = { cached: false, edges: [] };\n        this._spatialEdges = { cached: false, edges: [] };\n\n        this._imageChanged$.next(null);\n        this._sequenceEdgesChanged$.next(this._sequenceEdges);\n        this._spatialEdgesChanged$.next(this._spatialEdges);\n\n        this._disposed = true;\n\n        if (this._imageRequest != null) {\n            this._imageRequest.abort();\n        }\n\n        if (this._meshRequest != null) {\n            this._meshRequest.abort();\n        }\n    }\n\n    /**\n     * Reset the sequence edges.\n     */\n    public resetSequenceEdges(): void {\n        this._sequenceEdges = { cached: false, edges: [] };\n        this._sequenceEdgesChanged$.next(this._sequenceEdges);\n    }\n\n    /**\n     * Reset the spatial edges.\n     */\n    public resetSpatialEdges(): void {\n        this._spatialEdges = { cached: false, edges: [] };\n        this._spatialEdgesChanged$.next(this._spatialEdges);\n    }\n\n    /**\n     * Cache the image.\n     *\n     * @param {string} key - Key of the node to cache.\n     * @param {boolean} pano - Value indicating whether node is a panorama.\n     * @returns {Observable<ILoadStatusObject<HTMLImageElement>>} Observable\n     * emitting a load status object every time the load status changes\n     * and completes when the image is fully loaded.\n     */\n    private _cacheImage$(key: string, imageSize: ImageSize): Observable<ILoadStatusObject<HTMLImageElement>> {\n        return Observable.create(\n            (subscriber: Subscriber<ILoadStatusObject<HTMLImageElement>>): void => {\n                let xmlHTTP: XMLHttpRequest = new XMLHttpRequest();\n                xmlHTTP.open(\"GET\", Urls.thumbnail(key, imageSize, Urls.origin), true);\n                xmlHTTP.responseType = \"arraybuffer\";\n                xmlHTTP.timeout = 15000;\n\n                xmlHTTP.onload = (pe: ProgressEvent) => {\n                    if (xmlHTTP.status !== 200) {\n                        this._imageRequest = null;\n\n                        subscriber.error(\n                            new Error(`Failed to fetch image (${key}). Status: ${xmlHTTP.status}, ${xmlHTTP.statusText}`));\n\n                        return;\n                    }\n\n                    let image: HTMLImageElement = new Image();\n                    image.crossOrigin = \"Anonymous\";\n\n                    image.onload = (e: Event) => {\n                        this._imageRequest = null;\n\n                        if (this._disposed) {\n                            window.URL.revokeObjectURL(image.src);\n                            subscriber.error(new Error(`Image load was aborted (${key})`));\n\n                            return;\n                        }\n\n                        subscriber.next({ loaded: { loaded: pe.loaded, total: pe.total }, object: image });\n                        subscriber.complete();\n                    };\n\n                    image.onerror = (error: ErrorEvent) => {\n                        this._imageRequest = null;\n\n                        subscriber.error(new Error(`Failed to load image (${key})`));\n                    };\n\n                    let blob: Blob = new Blob([xmlHTTP.response]);\n                    image.src = window.URL.createObjectURL(blob);\n                };\n\n                xmlHTTP.onprogress = (pe: ProgressEvent) => {\n                    if (this._disposed) {\n                        return;\n                    }\n\n                    subscriber.next({loaded: { loaded: pe.loaded, total: pe.total }, object: null });\n                };\n\n                xmlHTTP.onerror = (error: Event) => {\n                    this._imageRequest = null;\n\n                    subscriber.error(new Error(`Failed to fetch image (${key})`));\n                };\n\n                xmlHTTP.ontimeout = (e: Event) => {\n                    this._imageRequest = null;\n\n                    subscriber.error(new Error(`Image request timed out (${key})`));\n                };\n\n                xmlHTTP.onabort = (event: Event) => {\n                    this._imageRequest = null;\n\n                    subscriber.error(new Error(`Image request was aborted (${key})`));\n                };\n\n                this._imageRequest = xmlHTTP;\n\n                xmlHTTP.send(null);\n            });\n    }\n\n    /**\n     * Cache the mesh.\n     *\n     * @param {string} key - Key of the node to cache.\n     * @param {boolean} merged - Value indicating whether node is merged.\n     * @returns {Observable<ILoadStatusObject<IMesh>>} Observable emitting\n     * a load status object every time the load status changes and completes\n     * when the mesh is fully loaded.\n     */\n    private _cacheMesh$(key: string, merged: boolean): Observable<ILoadStatusObject<IMesh>> {\n        return Observable.create(\n            (subscriber: Subscriber<ILoadStatusObject<IMesh>>): void => {\n                if (!merged) {\n                    subscriber.next(this._createEmptyMeshLoadStatus());\n                    subscriber.complete();\n                    return;\n                }\n\n                let xmlHTTP: XMLHttpRequest = new XMLHttpRequest();\n                xmlHTTP.open(\"GET\", Urls.protoMesh(key), true);\n                xmlHTTP.responseType = \"arraybuffer\";\n                xmlHTTP.timeout = 15000;\n\n                xmlHTTP.onload = (pe: ProgressEvent) => {\n                    this._meshRequest = null;\n\n                    if (this._disposed) {\n                        return;\n                    }\n\n                    let mesh: IMesh = xmlHTTP.status === 200 ?\n                        MeshReader.read(new Buffer(xmlHTTP.response)) :\n                        { faces: [], vertices: [] };\n\n                    subscriber.next({ loaded: { loaded: pe.loaded, total: pe.total }, object: mesh });\n                    subscriber.complete();\n                };\n\n                xmlHTTP.onprogress = (pe: ProgressEvent) => {\n                    if (this._disposed) {\n                        return;\n                    }\n\n                    subscriber.next({ loaded: { loaded: pe.loaded, total: pe.total }, object: null });\n                };\n\n                xmlHTTP.onerror = (e: Event) => {\n                    this._meshRequest = null;\n\n                    console.error(`Failed to cache mesh (${key})`);\n\n                    subscriber.next(this._createEmptyMeshLoadStatus());\n                    subscriber.complete();\n                };\n\n                xmlHTTP.ontimeout = (e: Event) => {\n                    this._meshRequest = null;\n\n                    console.error(`Mesh request timed out (${key})`);\n\n                    subscriber.next(this._createEmptyMeshLoadStatus());\n                    subscriber.complete();\n                };\n\n                xmlHTTP.onabort = (e: Event) => {\n                    this._meshRequest = null;\n\n                    subscriber.error(new Error(`Mesh request was aborted (${key})`));\n                };\n\n                this._meshRequest = xmlHTTP;\n\n                xmlHTTP.send(null);\n            });\n    }\n\n    /**\n     * Create a load status object with an empty mesh.\n     *\n     * @returns {ILoadStatusObject<IMesh>} Load status object\n     * with empty mesh.\n     */\n    private _createEmptyMeshLoadStatus(): ILoadStatusObject<IMesh> {\n        return {\n            loaded: { loaded: 0, total: 0 },\n            object: { faces: [], vertices: [] },\n        };\n    }\n\n    private _disposeImage(): void {\n        if (this._image != null) {\n            window.URL.revokeObjectURL(this._image.src);\n        }\n\n        this._image = null;\n    }\n}\n\nexport default NodeCache;\n",
     "import {ISequence} from \"../API\";\n\n/**\n * @class Sequence\n *\n * @classdesc Represents a sequence of ordered nodes.\n */\nexport class Sequence {\n    private _key: string;\n    private _keys: string[];\n\n    /**\n     * Create a new sequene instance.\n     *\n     * @param {ISequence} sequence - Raw sequence data.\n     */\n    constructor(sequence: ISequence) {\n        this._key = sequence.key;\n        this._keys = sequence.keys;\n    }\n\n    /**\n     * Get key.\n     *\n     * @returns {string} Unique sequence key.\n     */\n    public get key(): string {\n        return this._key;\n    }\n\n    /**\n     * Get keys.\n     *\n     * @returns {Array<string>} Array of ordered node keys in the sequence.\n     */\n    public get keys(): string[] {\n        return this._keys;\n    }\n\n    /**\n     * Dispose the sequence.\n     *\n     * @description Disposes all cached assets.\n     */\n    public dispose(): void {\n        this._key = null;\n        this._keys = null;\n    }\n\n    /**\n     * Find the next node key in the sequence with respect to\n     * the provided node key.\n     *\n     * @param {string} key - Reference node key.\n     * @returns {string} Next key in sequence if it exists, null otherwise.\n     */\n    public findNextKey(key: string): string {\n        let i: number = this._keys.indexOf(key);\n\n        if ((i + 1) >= this._keys.length || i === -1) {\n            return null;\n        } else {\n            return this._keys[i + 1];\n        }\n    }\n\n    /**\n     * Find the previous node key in the sequence with respect to\n     * the provided node key.\n     *\n     * @param {string} key - Reference node key.\n     * @returns {string} Previous key in sequence if it exists, null otherwise.\n     */\n    public findPrevKey(key: string): string {\n        let i: number = this._keys.indexOf(key);\n\n        if (i === 0 || i === -1) {\n            return null;\n        } else {\n            return this._keys[i - 1];\n        }\n    }\n}\n\nexport default Sequence;\n",
     "import * as THREE from \"three\";\n\nimport {\n    Node,\n    Sequence,\n} from \"../../Graph\";\nimport\n{\n    EdgeDirection,\n    IStep,\n    ITurn,\n    IPano,\n    IEdge,\n    IPotentialEdge,\n    EdgeCalculatorSettings,\n    EdgeCalculatorDirections,\n    EdgeCalculatorCoefficients,\n} from \"../../Edge\";\nimport {ArgumentMapillaryError} from \"../../Error\";\nimport {GeoCoords, Spatial} from \"../../Geo\";\n\n/**\n * @class EdgeCalculator\n *\n * @classdesc Represents a class for calculating node edges.\n */\nexport class EdgeCalculator {\n\n    private _spatial: Spatial;\n    private _geoCoords: GeoCoords;\n\n    private _settings: EdgeCalculatorSettings;\n    private _directions: EdgeCalculatorDirections;\n    private _coefficients: EdgeCalculatorCoefficients;\n\n    /**\n     * Create a new edge calculator instance.\n     *\n     * @param {EdgeCalculatorSettings} settings - Settings struct.\n     * @param {EdgeCalculatorDirections} directions - Directions struct.\n     * @param {EdgeCalculatorCoefficients} coefficients - Coefficients struct.\n     */\n    constructor(\n        settings?: EdgeCalculatorSettings,\n        directions?: EdgeCalculatorDirections,\n        coefficients?: EdgeCalculatorCoefficients) {\n\n        this._spatial = new Spatial();\n        this._geoCoords = new GeoCoords();\n\n        this._settings = settings != null ? settings : new EdgeCalculatorSettings();\n        this._directions = directions != null ? directions : new EdgeCalculatorDirections();\n        this._coefficients = coefficients != null ? coefficients : new EdgeCalculatorCoefficients();\n    }\n\n    /**\n     * Returns the potential edges to destination nodes for a set\n     * of nodes with respect to a source node.\n     *\n     * @param {Node} node - Source node.\n     * @param {Array<Node>} nodes - Potential destination nodes.\n     * @param {Array<string>} fallbackKeys - Keys for destination nodes that should\n     * be returned even if they do not meet the criteria for a potential edge.\n     * @throws {ArgumentMapillaryError} If node is not full.\n     */\n    public getPotentialEdges(node: Node, potentialNodes: Node[], fallbackKeys: string[]): IPotentialEdge[] {\n        if (!node.full) {\n            throw new ArgumentMapillaryError(\"Node has to be full.\");\n        }\n\n        if (!node.merged) {\n            return [];\n        }\n\n        let currentDirection: THREE.Vector3 =\n            this._spatial.viewingDirection(node.rotation);\n        let currentVerticalDirection: number =\n            this._spatial.angleToPlane(currentDirection.toArray(), [0, 0, 1]);\n\n        let potentialEdges: IPotentialEdge[] = [];\n\n        for (let potential of potentialNodes) {\n            if (!potential.merged ||\n                potential.key === node.key) {\n                continue;\n            }\n\n            let enu: number[] = this._geoCoords.geodeticToEnu(\n                potential.latLon.lat,\n                potential.latLon.lon,\n                potential.alt,\n                node.latLon.lat,\n                node.latLon.lon,\n                node.alt);\n\n            let motion: THREE.Vector3 = new THREE.Vector3(enu[0], enu[1], enu[2]);\n            let distance: number = motion.length();\n\n            if (distance > this._settings.maxDistance &&\n                fallbackKeys.indexOf(potential.key) < 0) {\n                continue;\n            }\n\n            let motionChange: number = this._spatial.angleBetweenVector2(\n                currentDirection.x,\n                currentDirection.y,\n                motion.x,\n                motion.y);\n\n            let verticalMotion: number = this._spatial.angleToPlane(motion.toArray(), [0, 0, 1]);\n\n            let direction: THREE.Vector3 =\n                this._spatial.viewingDirection(potential.rotation);\n\n            let directionChange: number = this._spatial.angleBetweenVector2(\n                currentDirection.x,\n                currentDirection.y,\n                direction.x,\n                direction.y);\n\n            let verticalDirection: number = this._spatial.angleToPlane(direction.toArray(), [0, 0, 1]);\n            let verticalDirectionChange: number = verticalDirection - currentVerticalDirection;\n\n            let rotation: number = this._spatial.relativeRotationAngle(\n                node.rotation,\n                potential.rotation);\n\n            let worldMotionAzimuth: number =\n                this._spatial.angleBetweenVector2(1, 0, motion.x, motion.y);\n\n            let sameSequence: boolean = potential.sequenceKey != null &&\n                node.sequenceKey != null &&\n                potential.sequenceKey === node.sequenceKey;\n\n            let sameMergeCC: boolean =\n                 (potential.mergeCC == null && node.mergeCC == null) ||\n                 potential.mergeCC === node.mergeCC;\n\n            let sameUser: boolean =\n                potential.userKey === node.userKey;\n\n            let potentialEdge: IPotentialEdge = {\n                capturedAt: potential.capturedAt,\n                croppedPano: potential.pano && !potential.fullPano,\n                directionChange: directionChange,\n                distance: distance,\n                fullPano: potential.fullPano,\n                key: potential.key,\n                motionChange: motionChange,\n                rotation: rotation,\n                sameMergeCC: sameMergeCC,\n                sameSequence: sameSequence,\n                sameUser: sameUser,\n                sequenceKey: potential.sequenceKey,\n                verticalDirectionChange: verticalDirectionChange,\n                verticalMotion: verticalMotion,\n                worldMotionAzimuth: worldMotionAzimuth,\n            };\n\n            potentialEdges.push(potentialEdge);\n        }\n\n        return potentialEdges;\n    }\n\n    /**\n     * Computes the sequence edges for a node.\n     *\n     * @param {Node} node - Source node.\n     * @throws {ArgumentMapillaryError} If node is not full.\n     */\n    public computeSequenceEdges(node: Node, sequence: Sequence): IEdge[] {\n        if (!node.full) {\n            throw new ArgumentMapillaryError(\"Node has to be full.\");\n        }\n\n        if (node.sequenceKey !== sequence.key) {\n            throw new ArgumentMapillaryError(\"Node and sequence does not correspond.\");\n        }\n\n        let edges: IEdge[] = [];\n\n        let nextKey: string = sequence.findNextKey(node.key);\n        if (nextKey != null) {\n            edges.push({\n                data: {\n                    direction: EdgeDirection.Next,\n                    worldMotionAzimuth: Number.NaN,\n                },\n                from: node.key,\n                to: nextKey,\n            });\n        }\n\n        let prevKey: string = sequence.findPrevKey(node.key);\n        if (prevKey != null) {\n            edges.push({\n                data: {\n                    direction: EdgeDirection.Prev,\n                    worldMotionAzimuth: Number.NaN,\n                },\n                from: node.key,\n                to: prevKey,\n            });\n        }\n\n        return edges;\n    }\n\n    /**\n     * Computes the similar edges for a node.\n     *\n     * @description Similar edges for perspective images and cropped panoramas\n     * look roughly in the same direction and are positioned closed to the node.\n     * Similar edges for full panoramas only target other full panoramas.\n     *\n     * @param {Node} node - Source node.\n     * @param {Array<IPotentialEdge>} potentialEdges - Potential edges.\n     * @throws {ArgumentMapillaryError} If node is not full.\n     */\n    public computeSimilarEdges(node: Node, potentialEdges: IPotentialEdge[]): IEdge[] {\n        if (!node.full) {\n            throw new ArgumentMapillaryError(\"Node has to be full.\");\n        }\n\n        let nodeFullPano: boolean = node.fullPano;\n        let sequenceGroups: { [key: string]: IPotentialEdge[] } = {};\n\n        for (let potentialEdge of potentialEdges) {\n            if (potentialEdge.sequenceKey == null) {\n                continue;\n            }\n\n            if (potentialEdge.sameSequence) {\n                continue;\n            }\n\n            if (nodeFullPano) {\n                if (!potentialEdge.fullPano) {\n                    continue;\n                }\n            } else {\n                if (!potentialEdge.fullPano &&\n                    Math.abs(potentialEdge.directionChange) > this._settings.similarMaxDirectionChange) {\n                    continue;\n                }\n            }\n\n            if (potentialEdge.distance > this._settings.similarMaxDistance) {\n                continue;\n            }\n\n            if (potentialEdge.sameUser &&\n                Math.abs(potentialEdge.capturedAt - node.capturedAt) <\n                    this._settings.similarMinTimeDifference) {\n                continue;\n            }\n\n            if (sequenceGroups[potentialEdge.sequenceKey] == null) {\n                sequenceGroups[potentialEdge.sequenceKey] = [];\n            }\n\n            sequenceGroups[potentialEdge.sequenceKey].push(potentialEdge);\n\n        }\n\n        let similarEdges: IPotentialEdge[] = [];\n\n        let calculateScore: (potentialEdge: IPotentialEdge) => number =\n            node.fullPano ?\n                (potentialEdge: IPotentialEdge): number => {\n                    return potentialEdge.distance;\n                } :\n                (potentialEdge: IPotentialEdge): number => {\n                    return this._coefficients.similarDistance * potentialEdge.distance +\n                        this._coefficients.similarRotation * potentialEdge.rotation;\n                };\n\n        for (let sequenceKey in sequenceGroups) {\n            if (!sequenceGroups.hasOwnProperty(sequenceKey)) {\n                continue;\n            }\n\n            let lowestScore: number = Number.MAX_VALUE;\n            let similarEdge: IPotentialEdge = null;\n\n            for (let potentialEdge of sequenceGroups[sequenceKey]) {\n                let score: number = calculateScore(potentialEdge);\n\n                if (score < lowestScore) {\n                    lowestScore = score;\n                    similarEdge = potentialEdge;\n                }\n            }\n\n            if (similarEdge == null) {\n                continue;\n            }\n\n            similarEdges.push(similarEdge);\n        }\n\n        return similarEdges\n            .map<IEdge>(\n                (potentialEdge: IPotentialEdge): IEdge => {\n                    return {\n                        data: {\n                            direction: EdgeDirection.Similar,\n                            worldMotionAzimuth: potentialEdge.worldMotionAzimuth,\n                        },\n                        from: node.key,\n                        to: potentialEdge.key,\n                    };\n                });\n    }\n\n    /**\n     * Computes the step edges for a perspective node.\n     *\n     * @description Step edge targets can only be other perspective nodes.\n     * Returns an empty array for cropped and full panoramas.\n     *\n     * @param {Node} node - Source node.\n     * @param {Array<IPotentialEdge>} potentialEdges - Potential edges.\n     * @param {string} prevKey - Key of previous node in sequence.\n     * @param {string} prevKey - Key of next node in sequence.\n     * @throws {ArgumentMapillaryError} If node is not full.\n     */\n    public computeStepEdges(\n        node: Node,\n        potentialEdges: IPotentialEdge[],\n        prevKey: string,\n        nextKey: string): IEdge[] {\n\n        if (!node.full) {\n            throw new ArgumentMapillaryError(\"Node has to be full.\");\n        }\n\n        let edges: IEdge[] = [];\n\n        if (node.pano) {\n            return edges;\n        }\n\n        for (let k in this._directions.steps) {\n            if (!this._directions.steps.hasOwnProperty(k)) {\n                continue;\n            }\n\n            let step: IStep = this._directions.steps[k];\n\n            let lowestScore: number = Number.MAX_VALUE;\n            let edge: IPotentialEdge = null;\n            let fallback: IPotentialEdge = null;\n\n            for (let potential of potentialEdges) {\n                if (potential.croppedPano || potential.fullPano) {\n                    continue;\n                }\n\n                if (Math.abs(potential.directionChange) > this._settings.stepMaxDirectionChange) {\n                    continue;\n                }\n\n                let motionDifference: number =\n                    this._spatial.angleDifference(step.motionChange, potential.motionChange);\n                let directionMotionDifference: number =\n                    this._spatial.angleDifference(potential.directionChange, motionDifference);\n                let drift: number =\n                    Math.max(Math.abs(motionDifference), Math.abs(directionMotionDifference));\n\n                if (Math.abs(drift) > this._settings.stepMaxDrift) {\n                    continue;\n                }\n\n                let potentialKey: string = potential.key;\n                if (step.useFallback && (potentialKey === prevKey || potentialKey === nextKey)) {\n                    fallback = potential;\n                }\n\n                if (potential.distance > this._settings.stepMaxDistance) {\n                    continue;\n                }\n\n                motionDifference = Math.sqrt(\n                    motionDifference * motionDifference +\n                    potential.verticalMotion * potential.verticalMotion);\n\n                let score: number =\n                    this._coefficients.stepPreferredDistance *\n                    Math.abs(potential.distance - this._settings.stepPreferredDistance) /\n                    this._settings.stepMaxDistance +\n                    this._coefficients.stepMotion * motionDifference / this._settings.stepMaxDrift +\n                    this._coefficients.stepRotation * potential.rotation / this._settings.stepMaxDirectionChange +\n                    this._coefficients.stepSequencePenalty * (potential.sameSequence ? 0 : 1) +\n                    this._coefficients.stepMergeCCPenalty * (potential.sameMergeCC ? 0 : 1);\n\n                if (score < lowestScore) {\n                    lowestScore = score;\n                    edge = potential;\n                }\n            }\n\n            edge = edge == null ? fallback : edge;\n            if (edge != null) {\n                edges.push({\n                    data: {\n                        direction: step.direction,\n                        worldMotionAzimuth: edge.worldMotionAzimuth,\n                    },\n                    from: node.key,\n                    to: edge.key,\n                });\n            }\n        }\n\n        return edges;\n    }\n\n    /**\n     * Computes the turn edges for a perspective node.\n     *\n     * @description Turn edge targets can only be other perspective images.\n     * Returns an empty array for cropped and full panoramas.\n     *\n     * @param {Node} node - Source node.\n     * @param {Array<IPotentialEdge>} potentialEdges - Potential edges.\n     * @throws {ArgumentMapillaryError} If node is not full.\n     */\n    public computeTurnEdges(node: Node, potentialEdges: IPotentialEdge[]): IEdge[] {\n        if (!node.full) {\n            throw new ArgumentMapillaryError(\"Node has to be full.\");\n        }\n\n        let edges: IEdge[] = [];\n\n        if (node.pano) {\n            return edges;\n        }\n\n        for (let k in this._directions.turns) {\n            if (!this._directions.turns.hasOwnProperty(k)) {\n                continue;\n            }\n\n            let turn: ITurn = this._directions.turns[k];\n\n            let lowestScore: number = Number.MAX_VALUE;\n            let edge: IPotentialEdge = null;\n\n            for (let potential of potentialEdges) {\n                if (potential.croppedPano || potential.fullPano) {\n                    continue;\n                }\n\n                if (potential.distance > this._settings.turnMaxDistance) {\n                    continue;\n                }\n\n                let rig: boolean =\n                    turn.direction !== EdgeDirection.TurnU &&\n                    potential.distance < this._settings.turnMaxRigDistance &&\n                    Math.abs(potential.directionChange) > this._settings.turnMinRigDirectionChange;\n\n                let directionDifference: number = this._spatial.angleDifference(\n                    turn.directionChange, potential.directionChange);\n\n                let score: number;\n\n                if (\n                    rig &&\n                    potential.directionChange * turn.directionChange > 0 &&\n                    Math.abs(potential.directionChange) < Math.abs(turn.directionChange)) {\n                    score = -Math.PI / 2 + Math.abs(potential.directionChange);\n                } else {\n                    if (Math.abs(directionDifference) > this._settings.turnMaxDirectionChange) {\n                        continue;\n                    }\n\n                    let motionDifference: number = turn.motionChange ?\n                        this._spatial.angleDifference(turn.motionChange, potential.motionChange) : 0;\n\n                    motionDifference = Math.sqrt(\n                        motionDifference * motionDifference +\n                        potential.verticalMotion * potential.verticalMotion);\n\n                    score =\n                        this._coefficients.turnDistance * potential.distance /\n                        this._settings.turnMaxDistance +\n                        this._coefficients.turnMotion * motionDifference / Math.PI +\n                        this._coefficients.turnSequencePenalty * (potential.sameSequence ? 0 : 1) +\n                        this._coefficients.turnMergeCCPenalty * (potential.sameMergeCC ? 0 : 1);\n                }\n\n                if (score < lowestScore) {\n                    lowestScore = score;\n                    edge = potential;\n                }\n            }\n\n            if (edge != null) {\n                edges.push({\n                    data: {\n                        direction: turn.direction,\n                        worldMotionAzimuth: edge.worldMotionAzimuth,\n                    },\n                    from: node.key,\n                    to: edge.key,\n                });\n            }\n        }\n\n        return edges;\n    }\n\n    /**\n     * Computes the pano edges for a perspective node.\n     *\n     * @description Perspective to pano edge targets can only be\n     * full pano nodes. Returns an empty array for cropped and full panoramas.\n     *\n     * @param {Node} node - Source node.\n     * @param {Array<IPotentialEdge>} potentialEdges - Potential edges.\n     * @throws {ArgumentMapillaryError} If node is not full.\n     */\n    public computePerspectiveToPanoEdges(node: Node, potentialEdges: IPotentialEdge[]): IEdge[] {\n        if (!node.full) {\n            throw new ArgumentMapillaryError(\"Node has to be full.\");\n        }\n\n        if (node.pano) {\n            return [];\n        }\n\n        let lowestScore: number = Number.MAX_VALUE;\n        let edge: IPotentialEdge = null;\n\n        for (let potential of potentialEdges) {\n            if (!potential.fullPano) {\n                continue;\n            }\n\n            let score: number =\n                this._coefficients.panoPreferredDistance *\n                Math.abs(potential.distance - this._settings.panoPreferredDistance) /\n                this._settings.panoMaxDistance +\n                this._coefficients.panoMotion * Math.abs(potential.motionChange) / Math.PI +\n                this._coefficients.panoMergeCCPenalty * (potential.sameMergeCC ? 0 : 1);\n\n            if (score < lowestScore) {\n                lowestScore = score;\n                edge = potential;\n            }\n        }\n\n        if (edge == null) {\n            return [];\n        }\n\n        return [\n            {\n                data: {\n                    direction: EdgeDirection.Pano,\n                    worldMotionAzimuth: edge.worldMotionAzimuth,\n                },\n                from: node.key,\n                to: edge.key,\n            },\n        ];\n    }\n\n    /**\n     * Computes the full pano and step edges for a full pano node.\n     *\n     * @description Pano to pano edge targets can only be\n     * full pano nodes. Pano to step edge targets can only be perspective\n     * nodes.\n     * Returns an empty array for cropped panoramas and perspective nodes.\n     *\n     * @param {Node} node - Source node.\n     * @param {Array<IPotentialEdge>} potentialEdges - Potential edges.\n     * @throws {ArgumentMapillaryError} If node is not full.\n     */\n    public computePanoEdges(node: Node, potentialEdges: IPotentialEdge[]): IEdge[] {\n        if (!node.full) {\n            throw new ArgumentMapillaryError(\"Node has to be full.\");\n        }\n\n        if (!node.fullPano) {\n            return [];\n        }\n\n        let panoEdges: IEdge[] = [];\n        let potentialPanos: IPotentialEdge[] = [];\n        let potentialSteps: [EdgeDirection, IPotentialEdge][] = [];\n\n        for (let potential of potentialEdges) {\n            if (potential.distance > this._settings.panoMaxDistance) {\n                continue;\n            }\n\n            if (potential.fullPano) {\n                if (potential.distance < this._settings.panoMinDistance) {\n                    continue;\n                }\n\n                potentialPanos.push(potential);\n            } else {\n                if (potential.croppedPano) {\n                    continue;\n                }\n\n                for (let k in this._directions.panos) {\n                    if (!this._directions.panos.hasOwnProperty(k)) {\n                        continue;\n                    }\n\n                    let pano: IPano = this._directions.panos[k];\n\n                    let turn: number = this._spatial.angleDifference(\n                        potential.directionChange,\n                        potential.motionChange);\n\n                    let turnChange: number = this._spatial.angleDifference(pano.directionChange, turn);\n\n                    if (Math.abs(turnChange) > this._settings.panoMaxStepTurnChange) {\n                        continue;\n                    }\n\n                    potentialSteps.push([pano.direction, potential]);\n\n                    // break if step direction found\n                    break;\n                }\n            }\n        }\n\n        let maxRotationDifference: number = Math.PI / this._settings.panoMaxItems;\n        let occupiedAngles: number[] = [];\n        let stepAngles: number[] = [];\n\n        for (let index: number = 0; index < this._settings.panoMaxItems; index++) {\n            let rotation: number = index / this._settings.panoMaxItems * 2 * Math.PI;\n\n            let lowestScore: number = Number.MAX_VALUE;\n            let edge: IPotentialEdge = null;\n\n            for (let potential of potentialPanos) {\n                let motionDifference: number = this._spatial.angleDifference(rotation, potential.motionChange);\n\n                if (Math.abs(motionDifference) > maxRotationDifference) {\n                    continue;\n                }\n\n                let occupiedDifference: number = Number.MAX_VALUE;\n                for (let occupiedAngle of occupiedAngles) {\n                    let difference: number = Math.abs(this._spatial.angleDifference(occupiedAngle, potential.motionChange));\n                    if (difference < occupiedDifference) {\n                        occupiedDifference = difference;\n                    }\n                }\n\n                if (occupiedDifference <= maxRotationDifference) {\n                    continue;\n                }\n\n                let score: number =\n                    this._coefficients.panoPreferredDistance *\n                    Math.abs(potential.distance - this._settings.panoPreferredDistance) /\n                    this._settings.panoMaxDistance +\n                    this._coefficients.panoMotion * Math.abs(motionDifference) / maxRotationDifference +\n                    this._coefficients.panoSequencePenalty * (potential.sameSequence ? 0 : 1) +\n                    this._coefficients.panoMergeCCPenalty * (potential.sameMergeCC ? 0 : 1);\n\n                if (score < lowestScore) {\n                    lowestScore = score;\n                    edge = potential;\n                }\n            }\n\n            if (edge != null) {\n                occupiedAngles.push(edge.motionChange);\n                panoEdges.push({\n                    data: {\n                        direction: EdgeDirection.Pano,\n                        worldMotionAzimuth: edge.worldMotionAzimuth,\n                    },\n                    from: node.key,\n                    to: edge.key,\n                });\n            } else {\n                stepAngles.push(rotation);\n            }\n        }\n\n        let occupiedStepAngles: {[direction: string]: number[] } = {};\n        occupiedStepAngles[EdgeDirection.Pano] = occupiedAngles;\n        occupiedStepAngles[EdgeDirection.StepForward] = [];\n        occupiedStepAngles[EdgeDirection.StepLeft] = [];\n        occupiedStepAngles[EdgeDirection.StepBackward] = [];\n        occupiedStepAngles[EdgeDirection.StepRight] = [];\n\n        for (let stepAngle of stepAngles) {\n            let occupations: [EdgeDirection, IPotentialEdge][] = [];\n\n            for (let k in this._directions.panos) {\n                if (!this._directions.panos.hasOwnProperty(k)) {\n                    continue;\n                }\n\n                let pano: IPano = this._directions.panos[k];\n\n                let allOccupiedAngles: number[] = occupiedStepAngles[EdgeDirection.Pano]\n                    .concat(occupiedStepAngles[pano.direction])\n                    .concat(occupiedStepAngles[pano.prev])\n                    .concat(occupiedStepAngles[pano.next]);\n\n                let lowestScore: number = Number.MAX_VALUE;\n                let edge: [EdgeDirection, IPotentialEdge] = null;\n\n                for (let potential of potentialSteps) {\n                    if (potential[0] !== pano.direction) {\n                        continue;\n                    }\n\n                    let motionChange: number = this._spatial.angleDifference(stepAngle, potential[1].motionChange);\n\n                    if (Math.abs(motionChange) > maxRotationDifference) {\n                        continue;\n                    }\n\n                    let minOccupiedDifference: number = Number.MAX_VALUE;\n                    for (let occupiedAngle of allOccupiedAngles) {\n                        let occupiedDifference: number =\n                            Math.abs(this._spatial.angleDifference(occupiedAngle, potential[1].motionChange));\n\n                        if (occupiedDifference < minOccupiedDifference) {\n                            minOccupiedDifference = occupiedDifference;\n                        }\n                    }\n\n                    if (minOccupiedDifference <= maxRotationDifference) {\n                        continue;\n                    }\n\n                    let score: number = this._coefficients.panoPreferredDistance *\n                        Math.abs(potential[1].distance - this._settings.panoPreferredDistance) /\n                        this._settings.panoMaxDistance +\n                        this._coefficients.panoMotion * Math.abs(motionChange) / maxRotationDifference +\n                        this._coefficients.panoMergeCCPenalty * (potential[1].sameMergeCC ? 0 : 1);\n\n                    if (score < lowestScore) {\n                        lowestScore = score;\n                        edge = potential;\n                    }\n                }\n\n                if (edge != null) {\n                    occupations.push(edge);\n                    panoEdges.push({\n                        data: {\n                            direction: edge[0],\n                            worldMotionAzimuth: edge[1].worldMotionAzimuth,\n                        },\n                        from: node.key,\n                        to: edge[1].key,\n                    });\n                }\n            }\n\n            for (let occupation of occupations) {\n                occupiedStepAngles[occupation[0]].push(occupation[1].motionChange);\n            }\n        }\n\n        return panoEdges;\n    }\n}\n\nexport default EdgeCalculator;\n",
     "import * as THREE from \"three\";\n\nimport {\n    InteractiveWaitingState,\n    IRotation,\n    IState,\n    StateBase,\n    TraversingState,\n    WaitingState,\n} from \"../../State\";\nimport {\n    Camera,\n} from \"../../Geo\";\n\nexport class EarthState extends StateBase {\n    constructor(state: IState) {\n        super(state);\n\n        const viewingDirection: THREE.Vector3 = this._camera.lookat\n            .clone()\n            .sub(this._camera.position)\n            .normalize();\n\n        this._camera.lookat.copy(this._camera.position);\n        this._camera.position.z = state.camera.position.z + 20;\n        this._camera.position.x = state.camera.position.x - 16 * viewingDirection.x;\n        this._camera.position.y = state.camera.position.y - 16 * viewingDirection.y;\n        this._camera.up.set(0, 0, 1);\n    }\n\n    public traverse(): StateBase {\n        return new TraversingState(this);\n    }\n\n    public wait(): StateBase {\n        return new WaitingState(this);\n    }\n\n    public waitInteractively(): StateBase {\n        return new InteractiveWaitingState(this);\n    }\n\n    public dolly(delta: number): void {\n        const camera: Camera = this._camera;\n        const offset: THREE.Vector3 = new THREE.Vector3()\n            .copy(camera.position)\n            .sub(camera.lookat);\n\n        const length: number = offset.length();\n        const scaled: number = length * Math.pow(2, -delta);\n        const clipped: number = Math.max(1, Math.min(scaled, 1000));\n\n        offset.normalize();\n        offset.multiplyScalar(clipped);\n\n        camera.position.copy(camera.lookat).add(offset);\n    }\n\n    public orbit(rotation: IRotation): void {\n        const camera: Camera = this._camera;\n        const q: THREE.Quaternion = new THREE.Quaternion().setFromUnitVectors(camera.up, new THREE.Vector3( 0, 0, 1 ));\n        const qInverse: THREE.Quaternion = q.clone().inverse();\n\n        const offset: THREE.Vector3 = new THREE.Vector3();\n        offset.copy(camera.position).sub(camera.lookat);\n        offset.applyQuaternion(q);\n        const length: number = offset.length();\n\n        let phi: number = Math.atan2(offset.y, offset.x);\n        phi += rotation.phi;\n\n        let theta: number = Math.atan2(Math.sqrt(offset.x * offset.x + offset.y * offset.y), offset.z);\n        theta += rotation.theta;\n        theta = Math.max(0.1, Math.min(Math.PI - 0.1, 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(qInverse);\n\n        camera.position.copy(camera.lookat).add(offset.multiplyScalar(length));\n    }\n\n    public truck(direction: number[]): void {\n        this._camera.position.add(new THREE.Vector3().fromArray(direction));\n        this._camera.lookat.add(new THREE.Vector3().fromArray(direction));\n    }\n\n    public update(): void { /*noop*/ }\n}\n\nexport default EarthState;\n",
     "import * as THREE from \"three\";\n\nimport {\n    IGPano,\n} from \"../../API\";\nimport {\n    Camera,\n    Transform,\n} from \"../../Geo\";\nimport {\n    Node,\n} from \"../../Graph\";\nimport {\n    IRotation,\n    IState,\n    RotationDelta,\n    StateBase,\n} from \"../../State\";\n\nexport abstract class InteractiveStateBase extends StateBase {\n    /**\n     * Animation speed in transitions per frame at 60 FPS. Run time\n     * animation speed is adjusted to FPS.\n     */\n    protected _animationSpeed: number;\n\n    protected _rotationDelta: RotationDelta;\n    protected _requestedRotationDelta: RotationDelta;\n\n    protected _basicRotation: number[];\n    protected _requestedBasicRotation: number[];\n    protected _requestedBasicRotationUnbounded: number[];\n\n    protected _rotationAcceleration: number;\n    protected _rotationIncreaseAlpha: number;\n    protected _rotationDecreaseAlpha: number;\n    protected _rotationThreshold: number;\n    protected _unboundedRotationAlpha: number;\n\n    protected _desiredZoom: number;\n    protected _minZoom: number;\n    protected _maxZoom: number;\n    protected _lookatDepth: number;\n    protected _desiredLookat: THREE.Vector3;\n    protected _desiredCenter: number[];\n\n    constructor(state: IState) {\n        super(state);\n\n        this._animationSpeed = 1 / 40;\n\n        this._rotationDelta = new RotationDelta(0, 0);\n        this._requestedRotationDelta = null;\n\n        this._basicRotation = [0, 0];\n        this._requestedBasicRotation = null;\n        this._requestedBasicRotationUnbounded = null;\n\n        this._rotationAcceleration = 0.86;\n        this._rotationIncreaseAlpha = 0.97;\n        this._rotationDecreaseAlpha = 0.9;\n        this._rotationThreshold = 1e-3;\n        this._unboundedRotationAlpha = 0.8;\n\n        this._desiredZoom = state.zoom;\n        this._minZoom = 0;\n        this._maxZoom = 3;\n        this._lookatDepth = 10;\n\n        this._desiredLookat = null;\n        this._desiredCenter = null;\n    }\n\n    public rotate(rotationDelta: IRotation): void {\n        if (this._currentNode == null) {\n            return;\n        }\n\n        this._desiredZoom = this._zoom;\n        this._desiredLookat = null;\n        this._requestedBasicRotation = null;\n\n        if (this._requestedRotationDelta != null) {\n            this._requestedRotationDelta.phi = this._requestedRotationDelta.phi + rotationDelta.phi;\n            this._requestedRotationDelta.theta = this._requestedRotationDelta.theta + rotationDelta.theta;\n        } else {\n            this._requestedRotationDelta = new RotationDelta(rotationDelta.phi, rotationDelta.theta);\n        }\n    }\n\n    public rotateUnbounded(delta: IRotation): void {\n        if (this._currentNode == null) {\n            return;\n        }\n\n        this._requestedBasicRotation = null;\n        this._requestedRotationDelta = null;\n\n        this._applyRotation(delta, this._currentCamera);\n        this._applyRotation(delta, this._previousCamera);\n\n        if (!this._desiredLookat) {\n            return;\n        }\n\n        const q: THREE.Quaternion = new THREE.Quaternion().setFromUnitVectors(this._currentCamera.up, new THREE.Vector3(0, 0, 1));\n        const qInverse: THREE.Quaternion = q.clone().inverse();\n\n        const offset: THREE.Vector3 = new THREE.Vector3()\n            .copy(this._desiredLookat)\n            .sub(this._camera.position)\n            .applyQuaternion(q);\n\n        const length: number = offset.length();\n\n        let phi: number = Math.atan2(offset.y, offset.x);\n        phi += delta.phi;\n\n        let theta: number = Math.atan2(Math.sqrt(offset.x * offset.x + offset.y * offset.y), offset.z);\n        theta += delta.theta;\n        theta = Math.max(0.1, Math.min(Math.PI - 0.1, 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\n        offset.applyQuaternion(qInverse);\n\n        this._desiredLookat\n            .copy(this._camera.position)\n            .add(offset.multiplyScalar(length));\n    }\n\n    public rotateWithoutInertia(rotationDelta: IRotation): void {\n        if (this._currentNode == null) {\n            return;\n        }\n\n        this._desiredZoom = this._zoom;\n        this._desiredLookat = null;\n        this._requestedBasicRotation = null;\n        this._requestedRotationDelta = null;\n\n        const threshold: number = Math.PI / (10 * Math.pow(2, this._zoom));\n        const delta: IRotation = {\n            phi: this._spatial.clamp(rotationDelta.phi, -threshold, threshold),\n            theta: this._spatial.clamp(rotationDelta.theta, -threshold, threshold),\n        };\n\n        this._applyRotation(delta, this._currentCamera);\n        this._applyRotation(delta, this._previousCamera);\n    }\n\n    public rotateBasic(basicRotation: number[]): void {\n        if (this._currentNode == null) {\n            return;\n        }\n\n        this._desiredZoom = this._zoom;\n        this._desiredLookat = null;\n        this._requestedRotationDelta = null;\n\n        if (this._requestedBasicRotation != null) {\n            this._requestedBasicRotation[0] += basicRotation[0];\n            this._requestedBasicRotation[1] += basicRotation[1];\n\n            let threshold: number = 0.05 / Math.pow(2, this._zoom);\n\n            this._requestedBasicRotation[0] =\n                this._spatial.clamp(this._requestedBasicRotation[0], -threshold, threshold);\n\n            this._requestedBasicRotation[1] =\n                this._spatial.clamp(this._requestedBasicRotation[1], -threshold, threshold);\n        } else {\n            this._requestedBasicRotation = basicRotation.slice();\n        }\n    }\n\n    public rotateBasicUnbounded(basicRotation: number[]): void {\n        if (this._currentNode == null) {\n            return;\n        }\n\n        if (this._requestedBasicRotationUnbounded != null) {\n            this._requestedBasicRotationUnbounded[0] += basicRotation[0];\n            this._requestedBasicRotationUnbounded[1] += basicRotation[1];\n        } else {\n            this._requestedBasicRotationUnbounded = basicRotation.slice();\n        }\n    }\n\n    public rotateBasicWithoutInertia(basic: number[]): void {\n        if (this._currentNode == null) {\n            return;\n        }\n\n        this._desiredZoom = this._zoom;\n        this._desiredLookat = null;\n        this._requestedRotationDelta = null;\n        this._requestedBasicRotation = null;\n\n        const threshold: number = 0.05 / Math.pow(2, this._zoom);\n\n        const basicRotation: number[] = basic.slice();\n        basicRotation[0] = this._spatial.clamp(basicRotation[0], -threshold, threshold);\n        basicRotation[1] = this._spatial.clamp(basicRotation[1], -threshold, threshold);\n\n        this._applyRotationBasic(basicRotation);\n    }\n\n    public rotateToBasic(basic: number[]): void {\n        if (this._currentNode == null) {\n            return;\n        }\n\n        this._desiredZoom = this._zoom;\n        this._desiredLookat = null;\n\n        basic[0] = this._spatial.clamp(basic[0], 0, 1);\n        basic[1] = this._spatial.clamp(basic[1], 0, 1);\n\n        let lookat: number[] = this.currentTransform.unprojectBasic(basic, this._lookatDepth);\n        this._currentCamera.lookat.fromArray(lookat);\n    }\n\n    public zoomIn(delta: number, reference: number[]): void {\n        if (this._currentNode == null) {\n            return;\n        }\n\n        this._desiredZoom = Math.max(this._minZoom, Math.min(this._maxZoom, this._desiredZoom + delta));\n\n        let currentCenter: number[] = this.currentTransform.projectBasic(\n            this._currentCamera.lookat.toArray());\n\n        let currentCenterX: number = currentCenter[0];\n        let currentCenterY: number = currentCenter[1];\n\n        let zoom0: number = Math.pow(2, this._zoom);\n        let zoom1: number = Math.pow(2, this._desiredZoom);\n\n        let refX: number = reference[0];\n        let refY: number = reference[1];\n\n        if (this.currentTransform.gpano != null &&\n            this.currentTransform.gpano.CroppedAreaImageWidthPixels === this.currentTransform.gpano.FullPanoWidthPixels) {\n            if (refX - currentCenterX > 0.5) {\n                refX = refX - 1;\n            } else if (currentCenterX - refX > 0.5) {\n                refX = 1 + refX;\n            }\n        }\n\n        let newCenterX: number = refX - zoom0 / zoom1 * (refX - currentCenterX);\n        let newCenterY: number = refY - zoom0 / zoom1 * (refY - currentCenterY);\n\n        let gpano: IGPano = this.currentTransform.gpano;\n\n        if (this._currentNode.fullPano) {\n            newCenterX = this._spatial.wrap(newCenterX + this._basicRotation[0], 0, 1);\n            newCenterY = this._spatial.clamp(newCenterY + this._basicRotation[1], 0.05, 0.95);\n        } else if (gpano != null &&\n            this.currentTransform.gpano.CroppedAreaImageWidthPixels === this.currentTransform.gpano.FullPanoWidthPixels) {\n            newCenterX = this._spatial.wrap(newCenterX + this._basicRotation[0], 0, 1);\n            newCenterY = this._spatial.clamp(newCenterY + this._basicRotation[1], 0, 1);\n        } else {\n            newCenterX = this._spatial.clamp(newCenterX, 0, 1);\n            newCenterY = this._spatial.clamp(newCenterY, 0, 1);\n        }\n\n        this._desiredLookat = new THREE.Vector3()\n            .fromArray(this.currentTransform.unprojectBasic([newCenterX, newCenterY], this._lookatDepth));\n    }\n\n    public setCenter(center: number[]): void {\n        this._desiredLookat = null;\n        this._requestedRotationDelta = null;\n        this._requestedBasicRotation = null;\n        this._desiredZoom = this._zoom;\n\n        let clamped: number[] = [\n            this._spatial.clamp(center[0], 0, 1),\n            this._spatial.clamp(center[1], 0, 1),\n        ];\n\n        if (this._currentNode == null) {\n            this._desiredCenter = clamped;\n            return;\n        }\n\n        this._desiredCenter = null;\n\n        let currentLookat: THREE.Vector3 = new THREE.Vector3()\n            .fromArray(this.currentTransform.unprojectBasic(clamped, this._lookatDepth));\n\n        let previousTransform: Transform = this.previousTransform != null ?\n            this.previousTransform :\n            this.currentTransform;\n        let previousLookat: THREE.Vector3 = new THREE.Vector3()\n            .fromArray(previousTransform.unprojectBasic(clamped, this._lookatDepth));\n\n        this._currentCamera.lookat.copy(currentLookat);\n        this._previousCamera.lookat.copy(previousLookat);\n    }\n\n    public setZoom(zoom: number): void {\n        this._desiredLookat = null;\n        this._requestedRotationDelta = null;\n        this._requestedBasicRotation = null;\n\n        this._zoom = this._spatial.clamp(zoom, this._minZoom, this._maxZoom);\n        this._desiredZoom = this._zoom;\n    }\n\n    protected _applyRotation(delta: IRotation, camera: Camera): void {\n        if (camera == null) {\n            return;\n        }\n\n        let q: THREE.Quaternion = new THREE.Quaternion().setFromUnitVectors(camera.up, new THREE.Vector3(0, 0, 1));\n        let qInverse: THREE.Quaternion = q.clone().inverse();\n\n        let offset: THREE.Vector3 = new THREE.Vector3();\n        offset.copy(camera.lookat).sub(camera.position);\n        offset.applyQuaternion(q);\n        let length: number = offset.length();\n\n        let phi: number = Math.atan2(offset.y, offset.x);\n        phi += delta.phi;\n\n        let theta: number = Math.atan2(Math.sqrt(offset.x * offset.x + offset.y * offset.y), offset.z);\n        theta += delta.theta;\n        theta = Math.max(0.1, Math.min(Math.PI - 0.1, 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(qInverse);\n\n        camera.lookat.copy(camera.position).add(offset.multiplyScalar(length));\n    }\n\n    protected _applyRotationBasic(basicRotation: number[]): void {\n        let currentNode: Node = this._currentNode;\n        let previousNode: Node = this._previousNode != null ?\n            this.previousNode :\n            this.currentNode;\n\n        let currentCamera: Camera = this._currentCamera;\n        let previousCamera: Camera = this._previousCamera;\n\n        let currentTransform: Transform = this.currentTransform;\n        let previousTransform: Transform = this.previousTransform != null ?\n            this.previousTransform :\n            this.currentTransform;\n\n        let currentBasic: number[] = currentTransform.projectBasic(currentCamera.lookat.toArray());\n        let previousBasic: number[] = previousTransform.projectBasic(previousCamera.lookat.toArray());\n\n        let currentGPano: IGPano = currentTransform.gpano;\n        let previousGPano: IGPano = previousTransform.gpano;\n\n        if (currentNode.fullPano) {\n            currentBasic[0] = this._spatial.wrap(currentBasic[0] + basicRotation[0], 0, 1);\n            currentBasic[1] = this._spatial.clamp(currentBasic[1] + basicRotation[1], 0.05, 0.95);\n        } else if (currentGPano != null &&\n            currentTransform.gpano.CroppedAreaImageWidthPixels === currentTransform.gpano.FullPanoWidthPixels) {\n            currentBasic[0] = this._spatial.wrap(currentBasic[0] + basicRotation[0], 0, 1);\n            currentBasic[1] = this._spatial.clamp(currentBasic[1] + basicRotation[1], 0, 1);\n        } else {\n            currentBasic[0] = this._spatial.clamp(currentBasic[0] + basicRotation[0], 0, 1);\n            currentBasic[1] = this._spatial.clamp(currentBasic[1] + basicRotation[1], 0, 1);\n        }\n\n        if (previousNode.fullPano) {\n            previousBasic[0] = this._spatial.wrap(previousBasic[0] + basicRotation[0], 0, 1);\n            previousBasic[1] = this._spatial.clamp(previousBasic[1] + basicRotation[1], 0.05, 0.95);\n        } else if (previousGPano != null &&\n            previousTransform.gpano.CroppedAreaImageWidthPixels === previousTransform.gpano.FullPanoWidthPixels) {\n            previousBasic[0] = this._spatial.wrap(previousBasic[0] + basicRotation[0], 0, 1);\n            previousBasic[1] = this._spatial.clamp(previousBasic[1] + basicRotation[1], 0, 1);\n        } else {\n            previousBasic[0] = this._spatial.clamp(previousBasic[0] + basicRotation[0], 0, 1);\n            previousBasic[1] = this._spatial.clamp(currentBasic[1] + basicRotation[1], 0, 1);\n        }\n\n        let currentLookat: number[] = currentTransform.unprojectBasic(currentBasic, this._lookatDepth);\n        currentCamera.lookat.fromArray(currentLookat);\n\n        let previousLookat: number[] = previousTransform.unprojectBasic(previousBasic, this._lookatDepth);\n        previousCamera.lookat.fromArray(previousLookat);\n    }\n\n    protected _updateZoom(animationSpeed: number): void {\n        let diff: number = this._desiredZoom - this._zoom;\n        let sign: number = diff > 0 ? 1 : diff < 0 ? -1 : 0;\n\n        if (diff === 0) {\n            return;\n        } else if (Math.abs(diff) < 2e-3) {\n            this._zoom = this._desiredZoom;\n            if (this._desiredLookat != null) {\n                this._desiredLookat = null;\n            }\n        } else {\n            this._zoom += sign * Math.max(Math.abs(5 * animationSpeed * diff), 2e-3);\n        }\n    }\n\n    protected _updateLookat(animationSpeed: number): void {\n        if (this._desiredLookat === null) {\n            return;\n        }\n\n        let diff: number = this._desiredLookat.distanceToSquared(this._currentCamera.lookat);\n\n        if (Math.abs(diff) < 1e-6) {\n            this._currentCamera.lookat.copy(this._desiredLookat);\n            this._desiredLookat = null;\n        } else {\n            this._currentCamera.lookat.lerp(this._desiredLookat, 5 * animationSpeed);\n        }\n    }\n\n    protected _updateRotation(): void {\n        if (this._requestedRotationDelta != null) {\n            let length: number = this._rotationDelta.lengthSquared();\n            let requestedLength: number = this._requestedRotationDelta.lengthSquared();\n\n            if (requestedLength > length) {\n                this._rotationDelta.lerp(this._requestedRotationDelta, this._rotationIncreaseAlpha);\n            } else {\n                this._rotationDelta.lerp(this._requestedRotationDelta, this._rotationDecreaseAlpha);\n            }\n\n            this._requestedRotationDelta = null;\n\n            return;\n        }\n\n        if (this._rotationDelta.isZero) {\n            return;\n        }\n\n        this._rotationDelta.multiply(this._rotationAcceleration);\n        this._rotationDelta.threshold(this._rotationThreshold);\n    }\n\n    protected _updateRotationBasic(): void {\n        if (this._requestedBasicRotation != null) {\n            let x: number = this._basicRotation[0];\n            let y: number = this._basicRotation[1];\n\n            let reqX: number = this._requestedBasicRotation[0];\n            let reqY: number = this._requestedBasicRotation[1];\n\n            if (Math.abs(reqX) > Math.abs(x)) {\n                this._basicRotation[0] = (1 - this._rotationIncreaseAlpha) * x + this._rotationIncreaseAlpha * reqX;\n            } else {\n                this._basicRotation[0] = (1 - this._rotationDecreaseAlpha) * x + this._rotationDecreaseAlpha * reqX;\n            }\n\n            if (Math.abs(reqY) > Math.abs(y)) {\n                this._basicRotation[1] = (1 - this._rotationIncreaseAlpha) * y + this._rotationIncreaseAlpha * reqY;\n            } else {\n                this._basicRotation[1] = (1 - this._rotationDecreaseAlpha) * y + this._rotationDecreaseAlpha * reqY;\n            }\n\n            this._requestedBasicRotation = null;\n\n            return;\n        }\n\n        if (this._requestedBasicRotationUnbounded != null) {\n            let reqX: number = this._requestedBasicRotationUnbounded[0];\n            let reqY: number = this._requestedBasicRotationUnbounded[1];\n\n            if (Math.abs(reqX) > 0) {\n                this._basicRotation[0] = (1 - this._unboundedRotationAlpha) * this._basicRotation[0] + this._unboundedRotationAlpha * reqX;\n            }\n\n            if (Math.abs(reqY) > 0) {\n                this._basicRotation[1] = (1 - this._unboundedRotationAlpha) * this._basicRotation[1] + this._unboundedRotationAlpha * reqY;\n            }\n\n            if (this._desiredLookat != null) {\n                let desiredBasicLookat: number[] = this.currentTransform.projectBasic(this._desiredLookat.toArray());\n\n                desiredBasicLookat[0] += reqX;\n                desiredBasicLookat[1] += reqY;\n\n                this._desiredLookat = new THREE.Vector3()\n                    .fromArray(this.currentTransform.unprojectBasic(desiredBasicLookat, this._lookatDepth));\n            }\n\n            this._requestedBasicRotationUnbounded = null;\n        }\n\n        if (this._basicRotation[0] === 0 && this._basicRotation[1] === 0) {\n            return;\n        }\n\n        this._basicRotation[0] = this._rotationAcceleration * this._basicRotation[0];\n        this._basicRotation[1] = this._rotationAcceleration * this._basicRotation[1];\n\n        if (Math.abs(this._basicRotation[0]) < this._rotationThreshold / Math.pow(2, this._zoom) &&\n            Math.abs(this._basicRotation[1]) < this._rotationThreshold / Math.pow(2, this._zoom)) {\n            this._basicRotation = [0, 0];\n        }\n    }\n\n    protected _clearRotation(): void {\n        if (this._currentNode.fullPano) {\n            return;\n        }\n\n        if (this._requestedRotationDelta != null) {\n            this._requestedRotationDelta = null;\n        }\n\n        if (!this._rotationDelta.isZero) {\n            this._rotationDelta.reset();\n        }\n\n        if (this._requestedBasicRotation != null) {\n            this._requestedBasicRotation = null;\n        }\n\n        if (this._basicRotation[0] > 0 || this._basicRotation[1] > 0) {\n            this._basicRotation = [0, 0];\n        }\n    }\n\n    protected _setDesiredCenter(): void {\n        if (this._desiredCenter == null) {\n            return;\n        }\n\n        let lookatDirection: THREE.Vector3 = new THREE.Vector3()\n            .fromArray(this.currentTransform.unprojectBasic(this._desiredCenter, this._lookatDepth))\n            .sub(this._currentCamera.position);\n\n        this._currentCamera.lookat.copy(this._currentCamera.position.clone().add(lookatDirection));\n        this._previousCamera.lookat.copy(this._previousCamera.position.clone().add(lookatDirection));\n\n        this._desiredCenter = null;\n    }\n\n    protected _setDesiredZoom(): void {\n        this._desiredZoom =\n            this._currentNode.fullPano || this._previousNode == null ?\n            this._zoom : 0;\n    }\n}\n\nexport default InteractiveStateBase;\n",
     "import {\n    Node,\n} from \"../../Graph\";\nimport {\n    IState,\n    InteractiveStateBase,\n    StateBase,\n    TraversingState,\n    WaitingState,\n} from \"../../State\";\n\nexport class InteractiveWaitingState extends InteractiveStateBase {\n    constructor(state: IState) {\n        super(state);\n\n        this._adjustCameras();\n\n        this._motionless = this._motionlessTransition();\n    }\n\n    public traverse(): StateBase {\n        return new TraversingState(this);\n    }\n\n    public wait(): StateBase {\n        return new WaitingState(this);\n    }\n\n    public prepend(nodes: Node[]): void {\n        super.prepend(nodes);\n\n        this._motionless = this._motionlessTransition();\n    }\n\n    public set(nodes: Node[]): void {\n        super.set(nodes);\n\n        this._motionless = this._motionlessTransition();\n    }\n\n    public move(delta: number): void {\n        this._alpha = Math.max(0, Math.min(1, this._alpha + delta));\n    }\n\n    public moveTo(position: number): void {\n        this._alpha = Math.max(0, Math.min(1, position));\n    }\n\n    public update(fps: number): void {\n        this._updateRotation();\n        if (!this._rotationDelta.isZero) {\n            this._applyRotation(this._rotationDelta, this._previousCamera);\n            this._applyRotation(this._rotationDelta, this._currentCamera);\n        }\n\n        this._updateRotationBasic();\n        if (this._basicRotation[0] !== 0 || this._basicRotation[1] !== 0) {\n            this._applyRotationBasic(this._basicRotation);\n        }\n\n        let animationSpeed: number = this._animationSpeed * (60 / fps);\n        this._updateZoom(animationSpeed);\n        this._updateLookat(animationSpeed);\n\n        this._camera.lerpCameras(this._previousCamera, this._currentCamera, this.alpha);\n    }\n\n    protected _getAlpha(): number {\n        return this._motionless ? Math.round(this._alpha) : this._alpha;\n    }\n\n    protected _setCurrentCamera(): void {\n        super._setCurrentCamera();\n\n        this._adjustCameras();\n    }\n\n    private _adjustCameras(): void {\n        if (this._previousNode == null) {\n            return;\n        }\n\n        if (this._currentNode.fullPano) {\n            let lookat: THREE.Vector3 = this._camera.lookat.clone().sub(this._camera.position);\n            this._currentCamera.lookat.copy(lookat.clone().add(this._currentCamera.position));\n        }\n\n        if (this._previousNode.fullPano) {\n            let lookat: THREE.Vector3 = this._currentCamera.lookat.clone().sub(this._currentCamera.position);\n            this._previousCamera.lookat.copy(lookat.clone().add(this._previousCamera.position));\n        }\n    }\n}\n\nexport default InteractiveWaitingState;\n",
-    "import {ArgumentMapillaryError} from \"../../Error\";\nimport {Node} from \"../../Graph\";\nimport {\n    Camera,\n    Geo,\n    GeoCoords,\n    ILatLonAlt,\n    Transform,\n    Spatial,\n} from \"../../Geo\";\nimport {\n    IRotation,\n    IState,\n    TransitionMode,\n} from \"../../State\";\n\nexport abstract class StateBase implements IState {\n    protected _spatial: Spatial;\n    protected _geoCoords: GeoCoords;\n\n    protected _reference: ILatLonAlt;\n\n    protected _alpha: number;\n    protected _camera: Camera;\n    protected _zoom: number;\n\n    protected _currentIndex: number;\n\n    protected _trajectory: Node[];\n    protected _currentNode: Node;\n    protected _previousNode: Node;\n\n    protected _trajectoryTransforms: Transform[];\n\n    protected _trajectoryCameras: Camera[];\n    protected _currentCamera: Camera;\n    protected _previousCamera: Camera;\n\n    protected _motionless: boolean;\n\n    private _referenceThreshold: number;\n    private _transitionMode: TransitionMode;\n\n    constructor(state: IState) {\n        this._spatial = new Spatial();\n        this._geoCoords = new GeoCoords();\n\n        this._referenceThreshold = 0.01;\n        this._transitionMode = state.transitionMode;\n\n        this._reference = state.reference;\n\n        this._alpha = state.alpha;\n        this._camera = state.camera.clone();\n        this._zoom = state.zoom;\n\n        this._currentIndex = state.currentIndex;\n\n        this._trajectory = state.trajectory.slice();\n        this._trajectoryTransforms = [];\n        this._trajectoryCameras = [];\n\n        for (let node of this._trajectory) {\n            let translation: number[] = this._nodeToTranslation(node, this._reference);\n            let transform: Transform = new Transform(\n                node.orientation,\n                node.width,\n                node.height,\n                node.focal,\n                node.scale,\n                node.gpano,\n                node.rotation,\n                translation,\n                node.image,\n                undefined,\n                node.ck1,\n                node.ck2);\n\n            this._trajectoryTransforms.push(transform);\n            this._trajectoryCameras.push(new Camera(transform));\n        }\n\n        this._currentNode = this._trajectory.length > 0 ?\n            this._trajectory[this._currentIndex] :\n            null;\n\n        this._previousNode = this._trajectory.length > 1 && this.currentIndex > 0 ?\n            this._trajectory[this._currentIndex - 1] :\n            null;\n\n        this._currentCamera = this._trajectoryCameras.length > 0 ?\n            this._trajectoryCameras[this._currentIndex].clone() :\n            new Camera();\n\n        this._previousCamera = this._trajectoryCameras.length > 1 && this.currentIndex > 0 ?\n            this._trajectoryCameras[this._currentIndex - 1].clone() :\n            this._currentCamera.clone();\n    }\n\n    public get reference(): ILatLonAlt {\n        return this._reference;\n    }\n\n    public get alpha(): number {\n        return this._getAlpha();\n    }\n\n    public get camera(): Camera {\n        return this._camera;\n    }\n\n    public get zoom(): number {\n        return this._zoom;\n    }\n\n    public get trajectory(): Node[] {\n        return this._trajectory;\n    }\n\n    public get currentIndex(): number {\n        return this._currentIndex;\n    }\n\n    public get currentNode(): Node {\n        return this._currentNode;\n    }\n\n    public get previousNode(): Node {\n        return this._previousNode;\n    }\n\n    public get currentCamera(): Camera {\n        return this._currentCamera;\n    }\n\n    public get currentTransform(): Transform {\n        return this._trajectoryTransforms.length > 0 ?\n            this._trajectoryTransforms[this.currentIndex] : null;\n    }\n\n    public get previousTransform(): Transform {\n        return this._trajectoryTransforms.length > 1 && this.currentIndex > 0 ?\n            this._trajectoryTransforms[this.currentIndex - 1] : null;\n    }\n\n    public get motionless(): boolean {\n        return this._motionless;\n    }\n\n    public get transitionMode(): TransitionMode {\n        return this._transitionMode;\n    }\n\n    public earth(): StateBase { throw new Error(\"Not implemented\"); }\n\n    public traverse(): StateBase { throw new Error(\"Not implemented\"); }\n\n    public wait(): StateBase { throw new Error(\"Not implemented\"); }\n\n    public waitInteractively(): StateBase { throw new Error(\"Not implemented\"); }\n\n    public move(delta: number): void { /*noop*/ }\n\n    public moveTo(position: number): void { /*noop*/ }\n\n    public rotate(delta: IRotation): void { /*noop*/ }\n\n    public rotateUnbounded(delta: IRotation): void { /*noop*/ }\n\n    public rotateWithoutInertia(delta: IRotation): void { /*noop*/ }\n\n    public rotateBasic(basicRotation: number[]): void { /*noop*/ }\n\n    public rotateBasicUnbounded(basicRotation: number[]): void { /*noop*/ }\n\n    public rotateBasicWithoutInertia(basicRotation: number[]): void { /*noop*/ }\n\n    public rotateToBasic(basic: number[]): void { /*noop*/ }\n\n    public setSpeed(speed: number): void { /*noop*/ }\n\n    public zoomIn(delta: number, reference: number[]): void { /*noop*/ }\n\n    public update(fps: number): void { /*noop*/ }\n\n    public setCenter(center: number[]): void { /*noop*/ }\n\n    public setZoom(zoom: number): void { /*noop*/ }\n\n    public dolly(delta: number): void { /*noop*/ }\n\n    public orbit(rotation: IRotation): void { /*noop*/ }\n\n    public truck(direction: number[]): void { /*noop*/ }\n\n    public append(nodes: Node[]): void {\n        if (nodes.length < 1) {\n            throw Error(\"Trajectory can not be empty\");\n        }\n\n        if (this._currentIndex < 0) {\n            this.set(nodes);\n        } else {\n            this._trajectory = this._trajectory.concat(nodes);\n            this._appendToTrajectories(nodes);\n        }\n    }\n\n    public prepend(nodes: Node[]): void {\n        if (nodes.length < 1) {\n            throw Error(\"Trajectory can not be empty\");\n        }\n\n        this._trajectory = nodes.slice().concat(this._trajectory);\n        this._currentIndex += nodes.length;\n\n        this._setCurrentNode();\n\n        let referenceReset: boolean = this._setReference(this._currentNode);\n        if (referenceReset) {\n            this._setTrajectories();\n        } else {\n            this._prependToTrajectories(nodes);\n        }\n\n        this._setCurrentCamera();\n    }\n\n    public remove(n: number): void {\n        if (n < 0) {\n            throw Error(\"n must be a positive integer\");\n        }\n\n        if (this._currentIndex - 1 < n) {\n            throw Error(\"Current and previous nodes can not be removed\");\n        }\n\n        for (let i: number = 0; i < n; i++) {\n            this._trajectory.shift();\n            this._trajectoryTransforms.shift();\n            this._trajectoryCameras.shift();\n            this._currentIndex--;\n        }\n\n        this._setCurrentNode();\n    }\n\n    public clearPrior(): void {\n        if (this._currentIndex > 0) {\n            this.remove(this._currentIndex - 1);\n        }\n    }\n\n    public clear(): void {\n        this.cut();\n\n        if (this._currentIndex > 0) {\n            this.remove(this._currentIndex - 1);\n        }\n    }\n\n    public cut(): void {\n        while (this._trajectory.length - 1 > this._currentIndex) {\n            this._trajectory.pop();\n            this._trajectoryTransforms.pop();\n            this._trajectoryCameras.pop();\n        }\n    }\n\n    public set(nodes: Node[]): void {\n        this._setTrajectory(nodes);\n        this._setCurrentNode();\n        this._setReference(this._currentNode);\n        this._setTrajectories();\n        this._setCurrentCamera();\n    }\n\n    public getCenter(): number[] {\n        return this._currentNode != null ?\n            this.currentTransform.projectBasic(this._camera.lookat.toArray()) :\n            [0.5, 0.5];\n    }\n\n    public setTransitionMode(mode: TransitionMode): void {\n        this._transitionMode = mode;\n    }\n\n    protected _getAlpha(): number { return 1; }\n\n    protected _setCurrent(): void {\n        this._setCurrentNode();\n\n        let referenceReset: boolean = this._setReference(this._currentNode);\n        if (referenceReset) {\n            this._setTrajectories();\n        }\n\n        this._setCurrentCamera();\n    }\n\n    protected _setCurrentCamera(): void {\n        this._currentCamera = this._trajectoryCameras[this._currentIndex].clone();\n        this._previousCamera = this._currentIndex > 0 ?\n            this._trajectoryCameras[this._currentIndex - 1].clone() :\n            this._currentCamera.clone();\n    }\n\n    protected _motionlessTransition(): boolean {\n        let nodesSet: boolean = this._currentNode != null && this._previousNode != null;\n\n        return nodesSet && (\n            this._transitionMode === TransitionMode.Instantaneous || !(\n                this._currentNode.merged &&\n                this._previousNode.merged &&\n                this._withinOriginalDistance() &&\n                this._sameConnectedComponent()\n            ));\n    }\n\n    private _setReference(node: Node): boolean {\n        // do not reset reference if node is within threshold distance\n        if (Math.abs(node.latLon.lat - this.reference.lat) < this._referenceThreshold &&\n            Math.abs(node.latLon.lon - this.reference.lon) < this._referenceThreshold) {\n            return false;\n        }\n\n        // do not reset reference if previous node exist and transition is with motion\n        if (this._previousNode != null && !this._motionlessTransition()) {\n            return false;\n        }\n\n        this._reference.lat = node.latLon.lat;\n        this._reference.lon = node.latLon.lon;\n        this._reference.alt = node.alt;\n\n        return true;\n    }\n\n    private _setCurrentNode(): void {\n        this._currentNode = this._trajectory.length > 0 ?\n            this._trajectory[this._currentIndex] :\n            null;\n\n        this._previousNode = this._currentIndex > 0 ?\n            this._trajectory[this._currentIndex - 1] :\n            null;\n    }\n\n    private _setTrajectory(nodes: Node[]): void {\n        if (nodes.length < 1) {\n            throw new ArgumentMapillaryError(\"Trajectory can not be empty\");\n        }\n\n        if (this._currentNode != null) {\n            this._trajectory = [this._currentNode].concat(nodes);\n            this._currentIndex = 1;\n        } else {\n            this._trajectory = nodes.slice();\n            this._currentIndex = 0;\n        }\n    }\n\n    private _setTrajectories(): void {\n        this._trajectoryTransforms.length = 0;\n        this._trajectoryCameras.length = 0;\n\n        this._appendToTrajectories(this._trajectory);\n    }\n\n    private _appendToTrajectories(nodes: Node[]): void {\n        for (let node of nodes) {\n            if (!node.assetsCached) {\n                throw new ArgumentMapillaryError(\"Assets must be cached when node is added to trajectory\");\n            }\n\n            let translation: number[] = this._nodeToTranslation(node, this.reference);\n            let transform: Transform = new Transform(\n                node.orientation,\n                node.width,\n                node.height,\n                node.focal,\n                node.scale,\n                node.gpano,\n                node.rotation,\n                translation,\n                node.image,\n                undefined,\n                node.ck1,\n                node.ck2);\n\n            this._trajectoryTransforms.push(transform);\n            this._trajectoryCameras.push(new Camera(transform));\n        }\n    }\n\n    private _prependToTrajectories(nodes: Node[]): void {\n        for (let node of nodes.reverse()) {\n            if (!node.assetsCached) {\n                throw new ArgumentMapillaryError(\"Assets must be cached when added to trajectory\");\n            }\n\n            let translation: number[] = this._nodeToTranslation(node, this.reference);\n            let transform: Transform = new Transform(\n                node.orientation,\n                node.width,\n                node.height,\n                node.focal,\n                node.scale,\n                node.gpano,\n                node.rotation,\n                translation,\n                node.image,\n                undefined,\n                node.ck1,\n                node.ck2);\n\n            this._trajectoryTransforms.unshift(transform);\n            this._trajectoryCameras.unshift(new Camera(transform));\n        }\n    }\n\n    private _nodeToTranslation(node: Node, reference: ILatLonAlt): number[] {\n        return Geo.computeTranslation(\n            { alt: node.alt, lat: node.latLon.lat, lon: node.latLon.lon },\n            node.rotation,\n            reference);\n    }\n\n    private _sameConnectedComponent(): boolean {\n        let current: Node = this._currentNode;\n        let previous: Node = this._previousNode;\n\n        return !!current && !!previous &&\n            current.mergeCC === previous.mergeCC;\n    }\n\n    private _withinOriginalDistance(): boolean {\n        let current: Node = this._currentNode;\n        let previous: Node = this._previousNode;\n\n        if (!current || !previous) {\n            return true;\n        }\n\n        // 50 km/h moves 28m in 2s\n        let distance: number = this._spatial.distanceFromLatLon(\n            current.originalLatLon.lat,\n            current.originalLatLon.lon,\n            previous.originalLatLon.lat,\n            previous.originalLatLon.lon);\n\n        return distance < 25;\n    }\n}\n",
+    "import {ArgumentMapillaryError} from \"../../Error\";\nimport {Node} from \"../../Graph\";\nimport {\n    Camera,\n    Geo,\n    GeoCoords,\n    ILatLonAlt,\n    Transform,\n    Spatial,\n} from \"../../Geo\";\nimport {\n    IRotation,\n    IState,\n    TransitionMode,\n} from \"../../State\";\n\nexport abstract class StateBase implements IState {\n    protected _spatial: Spatial;\n    protected _geoCoords: GeoCoords;\n\n    protected _reference: ILatLonAlt;\n\n    protected _alpha: number;\n    protected _camera: Camera;\n    protected _zoom: number;\n\n    protected _currentIndex: number;\n\n    protected _trajectory: Node[];\n    protected _currentNode: Node;\n    protected _previousNode: Node;\n\n    protected _trajectoryTransforms: Transform[];\n\n    protected _trajectoryCameras: Camera[];\n    protected _currentCamera: Camera;\n    protected _previousCamera: Camera;\n\n    protected _motionless: boolean;\n\n    private _referenceThreshold: number;\n    private _transitionMode: TransitionMode;\n\n    constructor(state: IState) {\n        this._spatial = new Spatial();\n        this._geoCoords = new GeoCoords();\n\n        this._referenceThreshold = 0.01;\n        this._transitionMode = state.transitionMode;\n\n        this._reference = state.reference;\n\n        this._alpha = state.alpha;\n        this._camera = state.camera.clone();\n        this._zoom = state.zoom;\n\n        this._currentIndex = state.currentIndex;\n\n        this._trajectory = state.trajectory.slice();\n        this._trajectoryTransforms = [];\n        this._trajectoryCameras = [];\n\n        for (let node of this._trajectory) {\n            let translation: number[] = this._nodeToTranslation(node, this._reference);\n            let transform: Transform = new Transform(\n                node.orientation,\n                node.width,\n                node.height,\n                node.focal,\n                node.scale,\n                node.gpano,\n                node.rotation,\n                translation,\n                node.image,\n                undefined,\n                node.ck1,\n                node.ck2,\n                node.cameraProjection);\n\n            this._trajectoryTransforms.push(transform);\n            this._trajectoryCameras.push(new Camera(transform));\n        }\n\n        this._currentNode = this._trajectory.length > 0 ?\n            this._trajectory[this._currentIndex] :\n            null;\n\n        this._previousNode = this._trajectory.length > 1 && this.currentIndex > 0 ?\n            this._trajectory[this._currentIndex - 1] :\n            null;\n\n        this._currentCamera = this._trajectoryCameras.length > 0 ?\n            this._trajectoryCameras[this._currentIndex].clone() :\n            new Camera();\n\n        this._previousCamera = this._trajectoryCameras.length > 1 && this.currentIndex > 0 ?\n            this._trajectoryCameras[this._currentIndex - 1].clone() :\n            this._currentCamera.clone();\n    }\n\n    public get reference(): ILatLonAlt {\n        return this._reference;\n    }\n\n    public get alpha(): number {\n        return this._getAlpha();\n    }\n\n    public get camera(): Camera {\n        return this._camera;\n    }\n\n    public get zoom(): number {\n        return this._zoom;\n    }\n\n    public get trajectory(): Node[] {\n        return this._trajectory;\n    }\n\n    public get currentIndex(): number {\n        return this._currentIndex;\n    }\n\n    public get currentNode(): Node {\n        return this._currentNode;\n    }\n\n    public get previousNode(): Node {\n        return this._previousNode;\n    }\n\n    public get currentCamera(): Camera {\n        return this._currentCamera;\n    }\n\n    public get currentTransform(): Transform {\n        return this._trajectoryTransforms.length > 0 ?\n            this._trajectoryTransforms[this.currentIndex] : null;\n    }\n\n    public get previousTransform(): Transform {\n        return this._trajectoryTransforms.length > 1 && this.currentIndex > 0 ?\n            this._trajectoryTransforms[this.currentIndex - 1] : null;\n    }\n\n    public get motionless(): boolean {\n        return this._motionless;\n    }\n\n    public get transitionMode(): TransitionMode {\n        return this._transitionMode;\n    }\n\n    public earth(): StateBase { throw new Error(\"Not implemented\"); }\n\n    public traverse(): StateBase { throw new Error(\"Not implemented\"); }\n\n    public wait(): StateBase { throw new Error(\"Not implemented\"); }\n\n    public waitInteractively(): StateBase { throw new Error(\"Not implemented\"); }\n\n    public move(delta: number): void { /*noop*/ }\n\n    public moveTo(position: number): void { /*noop*/ }\n\n    public rotate(delta: IRotation): void { /*noop*/ }\n\n    public rotateUnbounded(delta: IRotation): void { /*noop*/ }\n\n    public rotateWithoutInertia(delta: IRotation): void { /*noop*/ }\n\n    public rotateBasic(basicRotation: number[]): void { /*noop*/ }\n\n    public rotateBasicUnbounded(basicRotation: number[]): void { /*noop*/ }\n\n    public rotateBasicWithoutInertia(basicRotation: number[]): void { /*noop*/ }\n\n    public rotateToBasic(basic: number[]): void { /*noop*/ }\n\n    public setSpeed(speed: number): void { /*noop*/ }\n\n    public zoomIn(delta: number, reference: number[]): void { /*noop*/ }\n\n    public update(fps: number): void { /*noop*/ }\n\n    public setCenter(center: number[]): void { /*noop*/ }\n\n    public setZoom(zoom: number): void { /*noop*/ }\n\n    public dolly(delta: number): void { /*noop*/ }\n\n    public orbit(rotation: IRotation): void { /*noop*/ }\n\n    public truck(direction: number[]): void { /*noop*/ }\n\n    public append(nodes: Node[]): void {\n        if (nodes.length < 1) {\n            throw Error(\"Trajectory can not be empty\");\n        }\n\n        if (this._currentIndex < 0) {\n            this.set(nodes);\n        } else {\n            this._trajectory = this._trajectory.concat(nodes);\n            this._appendToTrajectories(nodes);\n        }\n    }\n\n    public prepend(nodes: Node[]): void {\n        if (nodes.length < 1) {\n            throw Error(\"Trajectory can not be empty\");\n        }\n\n        this._trajectory = nodes.slice().concat(this._trajectory);\n        this._currentIndex += nodes.length;\n\n        this._setCurrentNode();\n\n        let referenceReset: boolean = this._setReference(this._currentNode);\n        if (referenceReset) {\n            this._setTrajectories();\n        } else {\n            this._prependToTrajectories(nodes);\n        }\n\n        this._setCurrentCamera();\n    }\n\n    public remove(n: number): void {\n        if (n < 0) {\n            throw Error(\"n must be a positive integer\");\n        }\n\n        if (this._currentIndex - 1 < n) {\n            throw Error(\"Current and previous nodes can not be removed\");\n        }\n\n        for (let i: number = 0; i < n; i++) {\n            this._trajectory.shift();\n            this._trajectoryTransforms.shift();\n            this._trajectoryCameras.shift();\n            this._currentIndex--;\n        }\n\n        this._setCurrentNode();\n    }\n\n    public clearPrior(): void {\n        if (this._currentIndex > 0) {\n            this.remove(this._currentIndex - 1);\n        }\n    }\n\n    public clear(): void {\n        this.cut();\n\n        if (this._currentIndex > 0) {\n            this.remove(this._currentIndex - 1);\n        }\n    }\n\n    public cut(): void {\n        while (this._trajectory.length - 1 > this._currentIndex) {\n            this._trajectory.pop();\n            this._trajectoryTransforms.pop();\n            this._trajectoryCameras.pop();\n        }\n    }\n\n    public set(nodes: Node[]): void {\n        this._setTrajectory(nodes);\n        this._setCurrentNode();\n        this._setReference(this._currentNode);\n        this._setTrajectories();\n        this._setCurrentCamera();\n    }\n\n    public getCenter(): number[] {\n        return this._currentNode != null ?\n            this.currentTransform.projectBasic(this._camera.lookat.toArray()) :\n            [0.5, 0.5];\n    }\n\n    public setTransitionMode(mode: TransitionMode): void {\n        this._transitionMode = mode;\n    }\n\n    protected _getAlpha(): number { return 1; }\n\n    protected _setCurrent(): void {\n        this._setCurrentNode();\n\n        let referenceReset: boolean = this._setReference(this._currentNode);\n        if (referenceReset) {\n            this._setTrajectories();\n        }\n\n        this._setCurrentCamera();\n    }\n\n    protected _setCurrentCamera(): void {\n        this._currentCamera = this._trajectoryCameras[this._currentIndex].clone();\n        this._previousCamera = this._currentIndex > 0 ?\n            this._trajectoryCameras[this._currentIndex - 1].clone() :\n            this._currentCamera.clone();\n    }\n\n    protected _motionlessTransition(): boolean {\n        let nodesSet: boolean = this._currentNode != null && this._previousNode != null;\n\n        return nodesSet && (\n            this._transitionMode === TransitionMode.Instantaneous || !(\n                this._currentNode.merged &&\n                this._previousNode.merged &&\n                this._withinOriginalDistance() &&\n                this._sameConnectedComponent()\n            ));\n    }\n\n    private _setReference(node: Node): boolean {\n        // do not reset reference if node is within threshold distance\n        if (Math.abs(node.latLon.lat - this.reference.lat) < this._referenceThreshold &&\n            Math.abs(node.latLon.lon - this.reference.lon) < this._referenceThreshold) {\n            return false;\n        }\n\n        // do not reset reference if previous node exist and transition is with motion\n        if (this._previousNode != null && !this._motionlessTransition()) {\n            return false;\n        }\n\n        this._reference.lat = node.latLon.lat;\n        this._reference.lon = node.latLon.lon;\n        this._reference.alt = node.alt;\n\n        return true;\n    }\n\n    private _setCurrentNode(): void {\n        this._currentNode = this._trajectory.length > 0 ?\n            this._trajectory[this._currentIndex] :\n            null;\n\n        this._previousNode = this._currentIndex > 0 ?\n            this._trajectory[this._currentIndex - 1] :\n            null;\n    }\n\n    private _setTrajectory(nodes: Node[]): void {\n        if (nodes.length < 1) {\n            throw new ArgumentMapillaryError(\"Trajectory can not be empty\");\n        }\n\n        if (this._currentNode != null) {\n            this._trajectory = [this._currentNode].concat(nodes);\n            this._currentIndex = 1;\n        } else {\n            this._trajectory = nodes.slice();\n            this._currentIndex = 0;\n        }\n    }\n\n    private _setTrajectories(): void {\n        this._trajectoryTransforms.length = 0;\n        this._trajectoryCameras.length = 0;\n\n        this._appendToTrajectories(this._trajectory);\n    }\n\n    private _appendToTrajectories(nodes: Node[]): void {\n        for (let node of nodes) {\n            if (!node.assetsCached) {\n                throw new ArgumentMapillaryError(\"Assets must be cached when node is added to trajectory\");\n            }\n\n            let translation: number[] = this._nodeToTranslation(node, this.reference);\n            let transform: Transform = new Transform(\n                node.orientation,\n                node.width,\n                node.height,\n                node.focal,\n                node.scale,\n                node.gpano,\n                node.rotation,\n                translation,\n                node.image,\n                undefined,\n                node.ck1,\n                node.ck2,\n                node.cameraProjection);\n\n            this._trajectoryTransforms.push(transform);\n            this._trajectoryCameras.push(new Camera(transform));\n        }\n    }\n\n    private _prependToTrajectories(nodes: Node[]): void {\n        for (let node of nodes.reverse()) {\n            if (!node.assetsCached) {\n                throw new ArgumentMapillaryError(\"Assets must be cached when added to trajectory\");\n            }\n\n            let translation: number[] = this._nodeToTranslation(node, this.reference);\n            let transform: Transform = new Transform(\n                node.orientation,\n                node.width,\n                node.height,\n                node.focal,\n                node.scale,\n                node.gpano,\n                node.rotation,\n                translation,\n                node.image,\n                undefined,\n                node.ck1,\n                node.ck2,\n                node.cameraProjection);\n\n            this._trajectoryTransforms.unshift(transform);\n            this._trajectoryCameras.unshift(new Camera(transform));\n        }\n    }\n\n    private _nodeToTranslation(node: Node, reference: ILatLonAlt): number[] {\n        return Geo.computeTranslation(\n            { alt: node.alt, lat: node.latLon.lat, lon: node.latLon.lon },\n            node.rotation,\n            reference);\n    }\n\n    private _sameConnectedComponent(): boolean {\n        let current: Node = this._currentNode;\n        let previous: Node = this._previousNode;\n\n        return !!current && !!previous &&\n            current.mergeCC === previous.mergeCC;\n    }\n\n    private _withinOriginalDistance(): boolean {\n        let current: Node = this._currentNode;\n        let previous: Node = this._previousNode;\n\n        if (!current || !previous) {\n            return true;\n        }\n\n        // 50 km/h moves 28m in 2s\n        let distance: number = this._spatial.distanceFromLatLon(\n            current.originalLatLon.lat,\n            current.originalLatLon.lon,\n            previous.originalLatLon.lat,\n            previous.originalLatLon.lon);\n\n        return distance < 25;\n    }\n}\n",
     "import * as THREE from \"three\";\nimport * as UnitBezier from \"@mapbox/unitbezier\";\n\nimport {\n    EarthState,\n    IState,\n    InteractiveStateBase,\n    InteractiveWaitingState,\n    StateBase,\n    WaitingState,\n} from \"../../State\";\nimport {\n    Node,\n} from \"../../Graph\";\n\nexport class TraversingState extends InteractiveStateBase {\n    private _baseAlpha: number;\n\n    private _speedCoefficient: number;\n\n    private _unitBezier: UnitBezier;\n    private _useBezier: boolean;\n\n    constructor (state: IState) {\n        super(state);\n\n        this._adjustCameras();\n\n        this._motionless = this._motionlessTransition();\n\n        this._baseAlpha = this._alpha;\n        this._speedCoefficient = 1;\n        this._unitBezier = new UnitBezier(0.74, 0.67, 0.38, 0.96);\n        this._useBezier = false;\n    }\n\n    public earth(): StateBase {\n        return new EarthState(this);\n    }\n\n    public wait(): StateBase {\n        return new WaitingState(this);\n    }\n\n    public waitInteractively(): StateBase {\n        return new InteractiveWaitingState(this);\n    }\n\n    public append(nodes: Node[]): void {\n        let emptyTrajectory: boolean = this._trajectory.length === 0;\n\n        if (emptyTrajectory) {\n            this._resetTransition();\n        }\n\n        super.append(nodes);\n\n        if (emptyTrajectory) {\n            this._setDesiredCenter();\n            this._setDesiredZoom();\n        }\n    }\n\n    public prepend(nodes: Node[]): void {\n        let emptyTrajectory: boolean = this._trajectory.length === 0;\n\n        if (emptyTrajectory) {\n            this._resetTransition();\n        }\n\n        super.prepend(nodes);\n\n        if (emptyTrajectory) {\n            this._setDesiredCenter();\n            this._setDesiredZoom();\n        }\n    }\n\n    public set(nodes: Node[]): void {\n        super.set(nodes);\n\n        this._desiredLookat = null;\n\n        this._resetTransition();\n        this._clearRotation();\n\n        this._setDesiredCenter();\n        this._setDesiredZoom();\n\n        if (this._trajectory.length < 3) {\n            this._useBezier = true;\n        }\n    }\n\n    public setSpeed(speed: number): void {\n        this._speedCoefficient = this._spatial.clamp(speed, 0, 10);\n    }\n\n    public update(fps: number): void {\n        if (this._alpha === 1 && this._currentIndex + this._alpha < this._trajectory.length) {\n            this._currentIndex += 1;\n\n            this._useBezier = this._trajectory.length < 3 &&\n                this._currentIndex + 1 === this._trajectory.length;\n\n            this._setCurrent();\n            this._resetTransition();\n            this._clearRotation();\n\n            this._desiredZoom = this._currentNode.fullPano ? this._zoom : 0;\n\n            this._desiredLookat = null;\n        }\n\n        let animationSpeed: number = this._animationSpeed * (60 / fps);\n        this._baseAlpha = Math.min(1, this._baseAlpha + this._speedCoefficient * animationSpeed);\n        if (this._useBezier) {\n            this._alpha = this._unitBezier.solve(this._baseAlpha);\n        } else {\n            this._alpha = this._baseAlpha;\n        }\n\n        this._updateRotation();\n        if (!this._rotationDelta.isZero) {\n            this._applyRotation(this._rotationDelta, this._previousCamera);\n            this._applyRotation(this._rotationDelta, this._currentCamera);\n        }\n\n        this._updateRotationBasic();\n        if (this._basicRotation[0] !== 0 || this._basicRotation[1] !== 0) {\n            this._applyRotationBasic(this._basicRotation);\n        }\n\n        this._updateZoom(animationSpeed);\n        this._updateLookat(animationSpeed);\n\n        this._camera.lerpCameras(this._previousCamera, this._currentCamera, this.alpha);\n    }\n\n    protected _getAlpha(): number {\n        return this._motionless ? Math.ceil(this._alpha) : this._alpha;\n    }\n\n    protected _setCurrentCamera(): void {\n        super._setCurrentCamera();\n\n        this._adjustCameras();\n    }\n\n    private _adjustCameras(): void {\n        if (this._previousNode == null) {\n            return;\n        }\n\n        let lookat: THREE.Vector3 = this._camera.lookat.clone().sub(this._camera.position);\n        this._previousCamera.lookat.copy(lookat.clone().add(this._previousCamera.position));\n\n        if (this._currentNode.fullPano) {\n            this._currentCamera.lookat.copy(lookat.clone().add(this._currentCamera.position));\n        }\n    }\n\n    private _resetTransition(): void {\n        this._alpha = 0;\n        this._baseAlpha = 0;\n\n        this._motionless = this._motionlessTransition();\n    }\n}\n\nexport default TraversingState;\n",
     "import {\n    Node,\n} from \"../../Graph\";\nimport {\n    IState,\n    StateBase,\n    InteractiveWaitingState,\n    TraversingState,\n} from \"../../State\";\n\nexport class WaitingState extends StateBase {\n    constructor(state: IState) {\n        super(state);\n\n        this._zoom = 0;\n\n        this._adjustCameras();\n\n        this._motionless = this._motionlessTransition();\n    }\n\n    public traverse(): StateBase {\n        return new TraversingState(this);\n    }\n\n    public waitInteractively(): StateBase {\n        return new InteractiveWaitingState(this);\n    }\n\n    public prepend(nodes: Node[]): void {\n        super.prepend(nodes);\n\n        this._motionless = this._motionlessTransition();\n    }\n\n    public set(nodes: Node[]): void {\n        super.set(nodes);\n\n        this._motionless = this._motionlessTransition();\n    }\n\n    public move(delta: number): void {\n        this._alpha = Math.max(0, Math.min(1, this._alpha + delta));\n    }\n\n    public moveTo(position: number): void {\n        this._alpha = Math.max(0, Math.min(1, position));\n    }\n\n    public update(fps: number): void {\n        this._camera.lerpCameras(this._previousCamera, this._currentCamera, this.alpha);\n    }\n\n    protected _getAlpha(): number {\n        return this._motionless ? Math.round(this._alpha) : this._alpha;\n    }\n\n    protected _setCurrentCamera(): void {\n        super._setCurrentCamera();\n\n        this._adjustCameras();\n    }\n\n    private _adjustCameras(): void {\n        if (this._previousNode == null) {\n            return;\n        }\n\n        if (this._currentNode.fullPano) {\n            let lookat: THREE.Vector3 = this._camera.lookat.clone().sub(this._camera.position);\n            this._currentCamera.lookat.copy(lookat.clone().add(this._currentCamera.position));\n        }\n\n        if (this._previousNode.fullPano) {\n            let lookat: THREE.Vector3 = this._currentCamera.lookat.clone().sub(this._currentCamera.position);\n            this._previousCamera.lookat.copy(lookat.clone().add(this._previousCamera.position));\n        }\n    }\n}\n\nexport default WaitingState;\n",
     "import {Observable, Subscriber} from \"rxjs\";\n\n/**\n * @class ImageTileLoader\n *\n * @classdesc Represents a loader of image tiles.\n */\nexport class ImageTileLoader {\n    private _origin: string;\n    private _scheme: string;\n    private _host: string;\n\n    /**\n     * Create a new node image tile loader instance.\n     *\n     * @param {string} scheme - The URI scheme.\n     * @param {string} host - The URI host.\n     * @param {string} [origin] - The origin query param.\n     */\n    constructor(scheme: string, host: string, origin?: string) {\n        this._scheme = scheme;\n        this._host = host;\n        this._origin = origin != null ? `?origin=${origin}` : \"\";\n    }\n\n    /**\n     * Retrieve an image tile.\n     *\n     * @description Retrieve an image tile by specifying the area\n     * as well as the scaled size.\n     *\n     * @param {string} identifier - The identifier of the image.\n     * @param {number} x - The top left x pixel coordinate for the tile\n     * in the original image.\n     * @param {number} y - The top left y pixel coordinate for the tile\n     * in the original image.\n     * @param {number} w - The pixel width of the tile in the original image.\n     * @param {number} h - The pixel height of the tile in the original image.\n     * @param {number} scaledW - The scaled width of the returned tile.\n     * @param {number} scaledH - The scaled height of the returned tile.\n     */\n    public getTile(\n        identifier: string,\n        x: number,\n        y: number,\n        w: number,\n        h: number,\n        scaledW: number,\n        scaledH: number): [Observable<HTMLImageElement>, Function] {\n\n        let characteristics: string = `/${identifier}/${x},${y},${w},${h}/${scaledW},${scaledH}/0/default.jpg`;\n        let url: string =\n            this._scheme +\n            \"://\" +\n            this._host +\n            characteristics +\n            this._origin;\n\n        let xmlHTTP: XMLHttpRequest = null;\n\n        return [Observable.create(\n            (subscriber: Subscriber<HTMLImageElement>): void => {\n                xmlHTTP = new XMLHttpRequest();\n                xmlHTTP.open(\"GET\", url, true);\n                xmlHTTP.responseType = \"arraybuffer\";\n                xmlHTTP.timeout = 15000;\n\n                xmlHTTP.onload = (event: Event) => {\n                    if (xmlHTTP.status !== 200) {\n                        subscriber.error(\n                            new Error(\n                                `Failed to fetch tile (${identifier}: ${x},${y},${w},${h}). ` +\n                                `Status: ${xmlHTTP.status}, ${xmlHTTP.statusText}`));\n\n                        return;\n                    }\n\n                    let image: HTMLImageElement = new Image();\n                    image.crossOrigin = \"Anonymous\";\n\n                    image.onload = (e: Event) => {\n                        subscriber.next(image);\n                        subscriber.complete();\n                    };\n\n                    image.onerror = (error: ErrorEvent) => {\n                        subscriber.error(new Error(`Failed to load tile image (${identifier}: ${x},${y},${w},${h})`));\n                    };\n\n                    let blob: Blob = new Blob([xmlHTTP.response]);\n                    image.src = window.URL.createObjectURL(blob);\n                };\n\n                xmlHTTP.onerror = (error: Event) => {\n                    subscriber.error(new Error(`Failed to fetch tile (${identifier}: ${x},${y},${w},${h})`));\n                };\n\n                xmlHTTP.ontimeout = (error: Event) => {\n                    subscriber.error(new Error(`Tile request timed out (${identifier}: ${x},${y},${w},${h})`));\n                };\n\n                xmlHTTP.onabort = (event: Event) => {\n                    subscriber.error(new Error(`Tile request was aborted (${identifier}: ${x},${y},${w},${h})`));\n                };\n\n                xmlHTTP.send(null);\n            }),\n            (): void => {\n                if (xmlHTTP != null) {\n                    xmlHTTP.abort();\n                }\n            },\n        ];\n    }\n}\n\nexport default ImageTileLoader;\n",
index f8c8b187c768e74aa1d1cb8c5574c955ea73a9b0..2d6ccc895d1a3c3b7382e951f7720ed1a82952d6 100644 (file)
@@ -1 +1 @@
-(function(e){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=e()}else if(typeof define==="function"&&define.amd){define([],e)}else{var t;if(typeof window!=="undefined"){t=window}else if(typeof global!=="undefined"){t=global}else if(typeof self!=="undefined"){t=self}else{t=this}t.Mapillary=e()}})(function(){var o,e,t;return function o(a,s,u){function c(r,e){if(!s[r]){if(!a[r]){var t=typeof require=="function"&&require;if(!e&&t)return t(r,!0);if(h)return h(r,!0);var n=new Error("Cannot find module '"+r+"'");throw n.code="MODULE_NOT_FOUND",n}var i=s[r]={exports:{}};a[r][0].call(i.exports,function(e){var t=a[r][1][e];return c(t?t:e)},i,i.exports,o,a,s,u)}return s[r].exports}var h=typeof require=="function"&&require;for(var e=0;e<u.length;e++)c(u[e]);return c}({1:[function(e,t,r){"use strict";var b=e("tinyqueue");t.exports=n;t.exports.default=n;function n(e,t,r){t=t||1;var n,i,o,a;for(var s=0;s<e[0].length;s++){var u=e[0][s];if(!s||u[0]<n)n=u[0];if(!s||u[1]<i)i=u[1];if(!s||u[0]>o)o=u[0];if(!s||u[1]>a)a=u[1]}var c=o-n;var h=a-i;var l=Math.min(c,h);var p=l/2;var f=new b(null,x);if(l===0)return[n,i];for(var d=n;d<o;d+=l){for(var v=i;v<a;v+=l){f.push(new w(d+p,v+p,p,e))}}var m=S(e);var g=new w(n+c/2,i+h/2,0,e);if(g.d>m.d)m=g;var y=f.length;while(f.length){var _=f.pop();if(_.d>m.d){m=_;if(r)console.log("found best %d after %d probes",Math.round(1e4*_.d)/1e4,y)}if(_.max-m.d<=t)continue;p=_.h/2;f.push(new w(_.x-p,_.y-p,p,e));f.push(new w(_.x+p,_.y-p,p,e));f.push(new w(_.x-p,_.y+p,p,e));f.push(new w(_.x+p,_.y+p,p,e));y+=4}if(r){console.log("num probes: "+y);console.log("best distance: "+m.d)}return[m.x,m.y]}function x(e,t){return t.max-e.max}function w(e,t,r,n){this.x=e;this.y=t;this.h=r;this.d=i(e,t,n);this.max=this.d+this.h*Math.SQRT2}function i(e,t,r){var n=false;var i=Infinity;for(var o=0;o<r.length;o++){var a=r[o];for(var s=0,u=a.length,c=u-1;s<u;c=s++){var h=a[s];var l=a[c];if(h[1]>t!==l[1]>t&&e<(l[0]-h[0])*(t-h[1])/(l[1]-h[1])+h[0])n=!n;i=Math.min(i,p(e,t,h,l))}}return(n?1:-1)*Math.sqrt(i)}function S(e){var t=0;var r=0;var n=0;var i=e[0];for(var o=0,a=i.length,s=a-1;o<a;s=o++){var u=i[o];var c=i[s];var h=u[0]*c[1]-c[0]*u[1];r+=(u[0]+c[0])*h;n+=(u[1]+c[1])*h;t+=h*3}if(t===0)return new w(i[0][0],i[0][1],0,e);return new w(r/t,n/t,0,e)}function p(e,t,r,n){var i=r[0];var o=r[1];var a=n[0]-i;var s=n[1]-o;if(a!==0||s!==0){var u=((e-i)*a+(t-o)*s)/(a*a+s*s);if(u>1){i=n[0];o=n[1]}else if(u>0){i+=a*u;o+=s*u}}a=e-i;s=t-o;return a*a+s*s}},{tinyqueue:227}],2:[function(e,t,r){t.exports=n;function n(e,t,r,n){this.cx=3*e;this.bx=3*(r-e)-this.cx;this.ax=1-this.cx-this.bx;this.cy=3*t;this.by=3*(n-t)-this.cy;this.ay=1-this.cy-this.by;this.p1x=e;this.p1y=n;this.p2x=r;this.p2y=n}n.prototype.sampleCurveX=function(e){return((this.ax*e+this.bx)*e+this.cx)*e};n.prototype.sampleCurveY=function(e){return((this.ay*e+this.by)*e+this.cy)*e};n.prototype.sampleCurveDerivativeX=function(e){return(3*this.ax*e+2*this.bx)*e+this.cx};n.prototype.solveCurveX=function(e,t){if(typeof t==="undefined")t=1e-6;var r,n,i,o,a;for(i=e,a=0;a<8;a++){o=this.sampleCurveX(i)-e;if(Math.abs(o)<t)return i;var s=this.sampleCurveDerivativeX(i);if(Math.abs(s)<1e-6)break;i=i-o/s}r=0;n=1;i=e;if(i<r)return r;if(i>n)return n;while(r<n){o=this.sampleCurveX(i);if(Math.abs(o-e)<t)return i;if(e>o){r=i}else{n=i}i=(n-r)*.5+r}return i};n.prototype.solve=function(e,t){return this.sampleCurveY(this.solveCurveX(e,t))}},{}],3:[function(e,t,r){"use strict";r.byteLength=a;r.toByteArray=s;r.fromByteArray=d;var c=[];var u=[];var h=typeof Uint8Array!=="undefined"?Uint8Array:Array;var n="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";for(var i=0,o=n.length;i<o;++i){c[i]=n[i];u[n.charCodeAt(i)]=i}u["-".charCodeAt(0)]=62;u["_".charCodeAt(0)]=63;function l(e){var t=e.length;if(t%4>0){throw new Error("Invalid string. Length must be a multiple of 4")}return e[t-2]==="="?2:e[t-1]==="="?1:0}function a(e){return e.length*3/4-l(e)}function s(e){var t,r,n,i,o;var a=e.length;i=l(e);o=new h(a*3/4-i);r=i>0?a-4:a;var s=0;for(t=0;t<r;t+=4){n=u[e.charCodeAt(t)]<<18|u[e.charCodeAt(t+1)]<<12|u[e.charCodeAt(t+2)]<<6|u[e.charCodeAt(t+3)];o[s++]=n>>16&255;o[s++]=n>>8&255;o[s++]=n&255}if(i===2){n=u[e.charCodeAt(t)]<<2|u[e.charCodeAt(t+1)]>>4;o[s++]=n&255}else if(i===1){n=u[e.charCodeAt(t)]<<10|u[e.charCodeAt(t+1)]<<4|u[e.charCodeAt(t+2)]>>2;o[s++]=n>>8&255;o[s++]=n&255}return o}function p(e){return c[e>>18&63]+c[e>>12&63]+c[e>>6&63]+c[e&63]}function f(e,t,r){var n;var i=[];for(var o=t;o<r;o+=3){n=(e[o]<<16)+(e[o+1]<<8)+e[o+2];i.push(p(n))}return i.join("")}function d(e){var t;var r=e.length;var n=r%3;var i="";var o=[];var a=16383;for(var s=0,u=r-n;s<u;s+=a){o.push(f(e,s,s+a>u?u:s+a))}if(n===1){t=e[r-1];i+=c[t>>2];i+=c[t<<4&63];i+="=="}else if(n===2){t=(e[r-2]<<8)+e[r-1];i+=c[t>>10];i+=c[t>>4&63];i+=c[t<<2&63];i+="="}o.push(i);return o.join("")}},{}],4:[function(e,t,r){},{}],5:[function(e,t,r){t.exports=function e(h){var l=String.prototype.split,p=/()??/.exec("")[1]===h,t;t=function(e,t,r){if(Object.prototype.toString.call(t)!=="[object RegExp]"){return l.call(e,t,r)}var n=[],i=(t.ignoreCase?"i":"")+(t.multiline?"m":"")+(t.extended?"x":"")+(t.sticky?"y":""),o=0,t=new RegExp(t.source,i+"g"),a,s,u,c;e+="";if(!p){a=new RegExp("^"+t.source+"$(?!\\s)",i)}r=r===h?-1>>>0:r>>>0;while(s=t.exec(e)){u=s.index+s[0].length;if(u>o){n.push(e.slice(o,s.index));if(!p&&s.length>1){s[0].replace(a,function(){for(var e=1;e<arguments.length-2;e++){if(arguments[e]===h){s[e]=h}}})}if(s.length>1&&s.index<e.length){Array.prototype.push.apply(n,s.slice(1))}c=s[0].length;o=u;if(n.length>=r){break}}if(t.lastIndex===s.index){t.lastIndex++}}if(o===e.length){if(c||!t.test("")){n.push("")}}else{n.push(e.slice(o))}return n.length>r?n.slice(0,r):n};return t}()},{}],6:[function(e,t,r){var n=t.exports={};var i;var o;function a(){throw new Error("setTimeout has not been defined")}function s(){throw new Error("clearTimeout has not been defined")}(function(){try{if(typeof setTimeout==="function"){i=setTimeout}else{i=a}}catch(e){i=a}try{if(typeof clearTimeout==="function"){o=clearTimeout}else{o=s}}catch(e){o=s}})();function u(t){if(i===setTimeout){return setTimeout(t,0)}if((i===a||!i)&&setTimeout){i=setTimeout;return setTimeout(t,0)}try{return i(t,0)}catch(e){try{return i.call(null,t,0)}catch(e){return i.call(this,t,0)}}}function c(t){if(o===clearTimeout){return clearTimeout(t)}if((o===s||!o)&&clearTimeout){o=clearTimeout;return clearTimeout(t)}try{return o(t)}catch(e){try{return o.call(null,t)}catch(e){return o.call(this,t)}}}var h=[];var l=false;var p;var f=-1;function d(){if(!l||!p){return}l=false;if(p.length){h=p.concat(h)}else{f=-1}if(h.length){v()}}function v(){if(l){return}var e=u(d);l=true;var t=h.length;while(t){p=h;h=[];while(++f<t){if(p){p[f].run()}}f=-1;t=h.length}p=null;l=false;c(e)}n.nextTick=function(e){var t=new Array(arguments.length-1);if(arguments.length>1){for(var r=1;r<arguments.length;r++){t[r-1]=arguments[r]}}h.push(new m(e,t));if(h.length===1&&!l){u(v)}};function m(e,t){this.fun=e;this.array=t}m.prototype.run=function(){this.fun.apply(null,this.array)};n.title="browser";n.browser=true;n.env={};n.argv=[];n.version="";n.versions={};function g(){}n.on=g;n.addListener=g;n.once=g;n.off=g;n.removeListener=g;n.removeAllListeners=g;n.emit=g;n.prependListener=g;n.prependOnceListener=g;n.listeners=function(e){return[]};n.binding=function(e){throw new Error("process.binding is not supported")};n.cwd=function(){return"/"};n.chdir=function(e){throw new Error("process.chdir is not supported")};n.umask=function(){return 0}},{}],7:[function(e,t,n){"use strict";var i=e("base64-js");var o=e("ieee754");n.Buffer=p;n.SlowBuffer=y;n.INSPECT_MAX_BYTES=50;var r=2147483647;n.kMaxLength=r;p.TYPED_ARRAY_SUPPORT=a();if(!p.TYPED_ARRAY_SUPPORT&&typeof console!=="undefined"&&typeof console.error==="function"){console.error("This browser lacks typed array (Uint8Array) support which is required by "+"`buffer` v5.x. Use `buffer` v4.x if you require old browser support.")}function a(){try{var e=new Uint8Array(1);e.__proto__={__proto__:Uint8Array.prototype,foo:function(){return 42}};return e.foo()===42}catch(e){return false}}function s(e){if(e>r){throw new RangeError("Invalid typed array length")}var t=new Uint8Array(e);t.__proto__=p.prototype;return t}function p(e,t,r){if(typeof e==="number"){if(typeof t==="string"){throw new Error("If encoding is specified then the first argument must be a string")}return l(e)}return u(e,t,r)}if(typeof Symbol!=="undefined"&&Symbol.species&&p[Symbol.species]===p){Object.defineProperty(p,Symbol.species,{value:null,configurable:true,enumerable:false,writable:false})}p.poolSize=8192;function u(e,t,r){if(typeof e==="number"){throw new TypeError('"value" argument must not be a number')}if(Z(e)){return v(e,t,r)}if(typeof e==="string"){return f(e,t)}return m(e)}p.from=function(e,t,r){return u(e,t,r)};p.prototype.__proto__=Uint8Array.prototype;p.__proto__=Uint8Array;function c(e){if(typeof e!=="number"){throw new TypeError('"size" argument must be a number')}else if(e<0){throw new RangeError('"size" argument must not be negative')}}function h(e,t,r){c(e);if(e<=0){return s(e)}if(t!==undefined){return typeof r==="string"?s(e).fill(t,r):s(e).fill(t)}return s(e)}p.alloc=function(e,t,r){return h(e,t,r)};function l(e){c(e);return s(e<0?0:g(e)|0)}p.allocUnsafe=function(e){return l(e)};p.allocUnsafeSlow=function(e){return l(e)};function f(e,t){if(typeof t!=="string"||t===""){t="utf8"}if(!p.isEncoding(t)){throw new TypeError('"encoding" must be a valid string encoding')}var r=_(e,t)|0;var n=s(r);var i=n.write(e,t);if(i!==r){n=n.slice(0,i)}return n}function d(e){var t=e.length<0?0:g(e.length)|0;var r=s(t);for(var n=0;n<t;n+=1){r[n]=e[n]&255}return r}function v(e,t,r){if(t<0||e.byteLength<t){throw new RangeError("'offset' is out of bounds")}if(e.byteLength<t+(r||0)){throw new RangeError("'length' is out of bounds")}var n;if(t===undefined&&r===undefined){n=new Uint8Array(e)}else if(r===undefined){n=new Uint8Array(e,t)}else{n=new Uint8Array(e,t,r)}n.__proto__=p.prototype;return n}function m(e){if(p.isBuffer(e)){var t=g(e.length)|0;var r=s(t);if(r.length===0){return r}e.copy(r,0,0,t);return r}if(e){if(J(e)||"length"in e){if(typeof e.length!=="number"||Q(e.length)){return s(0)}return d(e)}if(e.type==="Buffer"&&Array.isArray(e.data)){return d(e.data)}}throw new TypeError("First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.")}function g(e){if(e>=r){throw new RangeError("Attempt to allocate Buffer larger than maximum "+"size: 0x"+r.toString(16)+" bytes")}return e|0}function y(e){if(+e!=e){e=0}return p.alloc(+e)}p.isBuffer=function e(t){return t!=null&&t._isBuffer===true};p.compare=function e(t,r){if(!p.isBuffer(t)||!p.isBuffer(r)){throw new TypeError("Arguments must be Buffers")}if(t===r)return 0;var n=t.length;var i=r.length;for(var o=0,a=Math.min(n,i);o<a;++o){if(t[o]!==r[o]){n=t[o];i=r[o];break}}if(n<i)return-1;if(i<n)return 1;return 0};p.isEncoding=function e(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 true;default:return false}};p.concat=function e(t,r){if(!Array.isArray(t)){throw new TypeError('"list" argument must be an Array of Buffers')}if(t.length===0){return p.alloc(0)}var n;if(r===undefined){r=0;for(n=0;n<t.length;++n){r+=t[n].length}}var i=p.allocUnsafe(r);var o=0;for(n=0;n<t.length;++n){var a=t[n];if(!p.isBuffer(a)){throw new TypeError('"list" argument must be an Array of Buffers')}a.copy(i,o);o+=a.length}return i};function _(e,t){if(p.isBuffer(e)){return e.length}if(J(e)||Z(e)){return e.byteLength}if(typeof e!=="string"){e=""+e}var r=e.length;if(r===0)return 0;var n=false;for(;;){switch(t){case"ascii":case"latin1":case"binary":return r;case"utf8":case"utf-8":case undefined:return q(e).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return r*2;case"hex":return r>>>1;case"base64":return Y(e).length;default:if(n)return q(e).length;t=(""+t).toLowerCase();n=true}}}p.byteLength=_;function b(e,t,r){var n=false;if(t===undefined||t<0){t=0}if(t>this.length){return""}if(r===undefined||r>this.length){r=this.length}if(r<=0){return""}r>>>=0;t>>>=0;if(r<=t){return""}if(!e)e="utf8";while(true){switch(e){case"hex":return D(this,t,r);case"utf8":case"utf-8":return j(this,t,r);case"ascii":return I(this,t,r);case"latin1":case"binary":return N(this,t,r);case"base64":return A(this,t,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return k(this,t,r);default:if(n)throw new TypeError("Unknown encoding: "+e);e=(e+"").toLowerCase();n=true}}}p.prototype._isBuffer=true;function x(e,t,r){var n=e[t];e[t]=e[r];e[r]=n}p.prototype.swap16=function e(){var t=this.length;if(t%2!==0){throw new RangeError("Buffer size must be a multiple of 16-bits")}for(var r=0;r<t;r+=2){x(this,r,r+1)}return this};p.prototype.swap32=function e(){var t=this.length;if(t%4!==0){throw new RangeError("Buffer size must be a multiple of 32-bits")}for(var r=0;r<t;r+=4){x(this,r,r+3);x(this,r+1,r+2)}return this};p.prototype.swap64=function e(){var t=this.length;if(t%8!==0){throw new RangeError("Buffer size must be a multiple of 64-bits")}for(var r=0;r<t;r+=8){x(this,r,r+7);x(this,r+1,r+6);x(this,r+2,r+5);x(this,r+3,r+4)}return this};p.prototype.toString=function e(){var t=this.length;if(t===0)return"";if(arguments.length===0)return j(this,0,t);return b.apply(this,arguments)};p.prototype.equals=function e(t){if(!p.isBuffer(t))throw new TypeError("Argument must be a Buffer");if(this===t)return true;return p.compare(this,t)===0};p.prototype.inspect=function e(){var t="";var r=n.INSPECT_MAX_BYTES;if(this.length>0){t=this.toString("hex",0,r).match(/.{2}/g).join(" ");if(this.length>r)t+=" ... "}return"<Buffer "+t+">"};p.prototype.compare=function e(t,r,n,i,o){if(!p.isBuffer(t)){throw new TypeError("Argument must be a Buffer")}if(r===undefined){r=0}if(n===undefined){n=t?t.length:0}if(i===undefined){i=0}if(o===undefined){o=this.length}if(r<0||n>t.length||i<0||o>this.length){throw new RangeError("out of range index")}if(i>=o&&r>=n){return 0}if(i>=o){return-1}if(r>=n){return 1}r>>>=0;n>>>=0;i>>>=0;o>>>=0;if(this===t)return 0;var a=o-i;var s=n-r;var u=Math.min(a,s);var c=this.slice(i,o);var h=t.slice(r,n);for(var l=0;l<u;++l){if(c[l]!==h[l]){a=c[l];s=h[l];break}}if(a<s)return-1;if(s<a)return 1;return 0};function w(e,t,r,n,i){if(e.length===0)return-1;if(typeof r==="string"){n=r;r=0}else if(r>2147483647){r=2147483647}else if(r<-2147483648){r=-2147483648}r=+r;if(Q(r)){r=i?0:e.length-1}if(r<0)r=e.length+r;if(r>=e.length){if(i)return-1;else r=e.length-1}else if(r<0){if(i)r=0;else return-1}if(typeof t==="string"){t=p.from(t,n)}if(p.isBuffer(t)){if(t.length===0){return-1}return S(e,t,r,n,i)}else if(typeof t==="number"){t=t&255;if(typeof Uint8Array.prototype.indexOf==="function"){if(i){return Uint8Array.prototype.indexOf.call(e,t,r)}else{return Uint8Array.prototype.lastIndexOf.call(e,t,r)}}return S(e,[t],r,n,i)}throw new TypeError("val must be string, number or Buffer")}function S(e,t,r,n,i){var o=1;var a=e.length;var s=t.length;if(n!==undefined){n=String(n).toLowerCase();if(n==="ucs2"||n==="ucs-2"||n==="utf16le"||n==="utf-16le"){if(e.length<2||t.length<2){return-1}o=2;a/=2;s/=2;r/=2}}function u(e,t){if(o===1){return e[t]}else{return e.readUInt16BE(t*o)}}var c;if(i){var h=-1;for(c=r;c<a;c++){if(u(e,c)===u(t,h===-1?0:c-h)){if(h===-1)h=c;if(c-h+1===s)return h*o}else{if(h!==-1)c-=c-h;h=-1}}}else{if(r+s>a)r=a-s;for(c=r;c>=0;c--){var l=true;for(var p=0;p<s;p++){if(u(e,c+p)!==u(t,p)){l=false;break}}if(l)return c}}return-1}p.prototype.includes=function e(t,r,n){return this.indexOf(t,r,n)!==-1};p.prototype.indexOf=function e(t,r,n){return w(this,t,r,n,true)};p.prototype.lastIndexOf=function e(t,r,n){return w(this,t,r,n,false)};function M(e,t,r,n){r=Number(r)||0;var i=e.length-r;if(!n){n=i}else{n=Number(n);if(n>i){n=i}}var o=t.length;if(o%2!==0)throw new TypeError("Invalid hex string");if(n>o/2){n=o/2}for(var a=0;a<n;++a){var s=parseInt(t.substr(a*2,2),16);if(Q(s))return a;e[r+a]=s}return a}function E(e,t,r,n){return K(q(t,e.length-r),e,r,n)}function C(e,t,r,n){return K(W(t),e,r,n)}function T(e,t,r,n){return C(e,t,r,n)}function O(e,t,r,n){return K(Y(t),e,r,n)}function P(e,t,r,n){return K(X(t,e.length-r),e,r,n)}p.prototype.write=function e(t,r,n,i){if(r===undefined){i="utf8";n=this.length;r=0}else if(n===undefined&&typeof r==="string"){i=r;n=this.length;r=0}else if(isFinite(r)){r=r>>>0;if(isFinite(n)){n=n>>>0;if(i===undefined)i="utf8"}else{i=n;n=undefined}}else{throw new Error("Buffer.write(string, encoding, offset[, length]) is no longer supported")}var o=this.length-r;if(n===undefined||n>o)n=o;if(t.length>0&&(n<0||r<0)||r>this.length){throw new RangeError("Attempt to write outside buffer bounds")}if(!i)i="utf8";var a=false;for(;;){switch(i){case"hex":return M(this,t,r,n);case"utf8":case"utf-8":return E(this,t,r,n);case"ascii":return C(this,t,r,n);case"latin1":case"binary":return T(this,t,r,n);case"base64":return O(this,t,r,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return P(this,t,r,n);default:if(a)throw new TypeError("Unknown encoding: "+i);i=(""+i).toLowerCase();a=true}}};p.prototype.toJSON=function e(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};function A(e,t,r){if(t===0&&r===e.length){return i.fromByteArray(e)}else{return i.fromByteArray(e.slice(t,r))}}function j(e,t,r){r=Math.min(e.length,r);var n=[];var i=t;while(i<r){var o=e[i];var a=null;var s=o>239?4:o>223?3:o>191?2:1;if(i+s<=r){var u,c,h,l;switch(s){case 1:if(o<128){a=o}break;case 2:u=e[i+1];if((u&192)===128){l=(o&31)<<6|u&63;if(l>127){a=l}}break;case 3:u=e[i+1];c=e[i+2];if((u&192)===128&&(c&192)===128){l=(o&15)<<12|(u&63)<<6|c&63;if(l>2047&&(l<55296||l>57343)){a=l}}break;case 4:u=e[i+1];c=e[i+2];h=e[i+3];if((u&192)===128&&(c&192)===128&&(h&192)===128){l=(o&15)<<18|(u&63)<<12|(c&63)<<6|h&63;if(l>65535&&l<1114112){a=l}}}}if(a===null){a=65533;s=1}else if(a>65535){a-=65536;n.push(a>>>10&1023|55296);a=56320|a&1023}n.push(a);i+=s}return L(n)}var R=4096;function L(e){var t=e.length;if(t<=R){return String.fromCharCode.apply(String,e)}var r="";var n=0;while(n<t){r+=String.fromCharCode.apply(String,e.slice(n,n+=R))}return r}function I(e,t,r){var n="";r=Math.min(e.length,r);for(var i=t;i<r;++i){n+=String.fromCharCode(e[i]&127)}return n}function N(e,t,r){var n="";r=Math.min(e.length,r);for(var i=t;i<r;++i){n+=String.fromCharCode(e[i])}return n}function D(e,t,r){var n=e.length;if(!t||t<0)t=0;if(!r||r<0||r>n)r=n;var i="";for(var o=t;o<r;++o){i+=H(e[o])}return i}function k(e,t,r){var n=e.slice(t,r);var i="";for(var o=0;o<n.length;o+=2){i+=String.fromCharCode(n[o]+n[o+1]*256)}return i}p.prototype.slice=function e(t,r){var n=this.length;t=~~t;r=r===undefined?n:~~r;if(t<0){t+=n;if(t<0)t=0}else if(t>n){t=n}if(r<0){r+=n;if(r<0)r=0}else if(r>n){r=n}if(r<t)r=t;var i=this.subarray(t,r);i.__proto__=p.prototype;return i};function B(e,t,r){if(e%1!==0||e<0)throw new RangeError("offset is not uint");if(e+t>r)throw new RangeError("Trying to access beyond buffer length")}p.prototype.readUIntLE=function e(t,r,n){t=t>>>0;r=r>>>0;if(!n)B(t,r,this.length);var i=this[t];var o=1;var a=0;while(++a<r&&(o*=256)){i+=this[t+a]*o}return i};p.prototype.readUIntBE=function e(t,r,n){t=t>>>0;r=r>>>0;if(!n){B(t,r,this.length)}var i=this[t+--r];var o=1;while(r>0&&(o*=256)){i+=this[t+--r]*o}return i};p.prototype.readUInt8=function e(t,r){t=t>>>0;if(!r)B(t,1,this.length);return this[t]};p.prototype.readUInt16LE=function e(t,r){t=t>>>0;if(!r)B(t,2,this.length);return this[t]|this[t+1]<<8};p.prototype.readUInt16BE=function e(t,r){t=t>>>0;if(!r)B(t,2,this.length);return this[t]<<8|this[t+1]};p.prototype.readUInt32LE=function e(t,r){t=t>>>0;if(!r)B(t,4,this.length);return(this[t]|this[t+1]<<8|this[t+2]<<16)+this[t+3]*16777216};p.prototype.readUInt32BE=function e(t,r){t=t>>>0;if(!r)B(t,4,this.length);return this[t]*16777216+(this[t+1]<<16|this[t+2]<<8|this[t+3])};p.prototype.readIntLE=function e(t,r,n){t=t>>>0;r=r>>>0;if(!n)B(t,r,this.length);var i=this[t];var o=1;var a=0;while(++a<r&&(o*=256)){i+=this[t+a]*o}o*=128;if(i>=o)i-=Math.pow(2,8*r);return i};p.prototype.readIntBE=function e(t,r,n){t=t>>>0;r=r>>>0;if(!n)B(t,r,this.length);var i=r;var o=1;var a=this[t+--i];while(i>0&&(o*=256)){a+=this[t+--i]*o}o*=128;if(a>=o)a-=Math.pow(2,8*r);return a};p.prototype.readInt8=function e(t,r){t=t>>>0;if(!r)B(t,1,this.length);if(!(this[t]&128))return this[t];return(255-this[t]+1)*-1};p.prototype.readInt16LE=function e(t,r){t=t>>>0;if(!r)B(t,2,this.length);var n=this[t]|this[t+1]<<8;return n&32768?n|4294901760:n};p.prototype.readInt16BE=function e(t,r){t=t>>>0;if(!r)B(t,2,this.length);var n=this[t+1]|this[t]<<8;return n&32768?n|4294901760:n};p.prototype.readInt32LE=function e(t,r){t=t>>>0;if(!r)B(t,4,this.length);return this[t]|this[t+1]<<8|this[t+2]<<16|this[t+3]<<24};p.prototype.readInt32BE=function e(t,r){t=t>>>0;if(!r)B(t,4,this.length);return this[t]<<24|this[t+1]<<16|this[t+2]<<8|this[t+3]};p.prototype.readFloatLE=function e(t,r){t=t>>>0;if(!r)B(t,4,this.length);return o.read(this,t,true,23,4)};p.prototype.readFloatBE=function e(t,r){t=t>>>0;if(!r)B(t,4,this.length);return o.read(this,t,false,23,4)};p.prototype.readDoubleLE=function e(t,r){t=t>>>0;if(!r)B(t,8,this.length);return o.read(this,t,true,52,8)};p.prototype.readDoubleBE=function e(t,r){t=t>>>0;if(!r)B(t,8,this.length);return o.read(this,t,false,52,8)};function F(e,t,r,n,i,o){if(!p.isBuffer(e))throw new TypeError('"buffer" argument must be a Buffer instance');if(t>i||t<o)throw new RangeError('"value" argument is out of bounds');if(r+n>e.length)throw new RangeError("Index out of range")}p.prototype.writeUIntLE=function e(t,r,n,i){t=+t;r=r>>>0;n=n>>>0;if(!i){var o=Math.pow(2,8*n)-1;F(this,t,r,n,o,0)}var a=1;var s=0;this[r]=t&255;while(++s<n&&(a*=256)){this[r+s]=t/a&255}return r+n};p.prototype.writeUIntBE=function e(t,r,n,i){t=+t;r=r>>>0;n=n>>>0;if(!i){var o=Math.pow(2,8*n)-1;F(this,t,r,n,o,0)}var a=n-1;var s=1;this[r+a]=t&255;while(--a>=0&&(s*=256)){this[r+a]=t/s&255}return r+n};p.prototype.writeUInt8=function e(t,r,n){t=+t;r=r>>>0;if(!n)F(this,t,r,1,255,0);this[r]=t&255;return r+1};p.prototype.writeUInt16LE=function e(t,r,n){t=+t;r=r>>>0;if(!n)F(this,t,r,2,65535,0);this[r]=t&255;this[r+1]=t>>>8;return r+2};p.prototype.writeUInt16BE=function e(t,r,n){t=+t;r=r>>>0;if(!n)F(this,t,r,2,65535,0);this[r]=t>>>8;this[r+1]=t&255;return r+2};p.prototype.writeUInt32LE=function e(t,r,n){t=+t;r=r>>>0;if(!n)F(this,t,r,4,4294967295,0);this[r+3]=t>>>24;this[r+2]=t>>>16;this[r+1]=t>>>8;this[r]=t&255;return r+4};p.prototype.writeUInt32BE=function e(t,r,n){t=+t;r=r>>>0;if(!n)F(this,t,r,4,4294967295,0);this[r]=t>>>24;this[r+1]=t>>>16;this[r+2]=t>>>8;this[r+3]=t&255;return r+4};p.prototype.writeIntLE=function e(t,r,n,i){t=+t;r=r>>>0;if(!i){var o=Math.pow(2,8*n-1);F(this,t,r,n,o-1,-o)}var a=0;var s=1;var u=0;this[r]=t&255;while(++a<n&&(s*=256)){if(t<0&&u===0&&this[r+a-1]!==0){u=1}this[r+a]=(t/s>>0)-u&255}return r+n};p.prototype.writeIntBE=function e(t,r,n,i){t=+t;r=r>>>0;if(!i){var o=Math.pow(2,8*n-1);F(this,t,r,n,o-1,-o)}var a=n-1;var s=1;var u=0;this[r+a]=t&255;while(--a>=0&&(s*=256)){if(t<0&&u===0&&this[r+a+1]!==0){u=1}this[r+a]=(t/s>>0)-u&255}return r+n};p.prototype.writeInt8=function e(t,r,n){t=+t;r=r>>>0;if(!n)F(this,t,r,1,127,-128);if(t<0)t=255+t+1;this[r]=t&255;return r+1};p.prototype.writeInt16LE=function e(t,r,n){t=+t;r=r>>>0;if(!n)F(this,t,r,2,32767,-32768);this[r]=t&255;this[r+1]=t>>>8;return r+2};p.prototype.writeInt16BE=function e(t,r,n){t=+t;r=r>>>0;if(!n)F(this,t,r,2,32767,-32768);this[r]=t>>>8;this[r+1]=t&255;return r+2};p.prototype.writeInt32LE=function e(t,r,n){t=+t;r=r>>>0;if(!n)F(this,t,r,4,2147483647,-2147483648);this[r]=t&255;this[r+1]=t>>>8;this[r+2]=t>>>16;this[r+3]=t>>>24;return r+4};p.prototype.writeInt32BE=function e(t,r,n){t=+t;r=r>>>0;if(!n)F(this,t,r,4,2147483647,-2147483648);if(t<0)t=4294967295+t+1;this[r]=t>>>24;this[r+1]=t>>>16;this[r+2]=t>>>8;this[r+3]=t&255;return r+4};function $(e,t,r,n,i,o){if(r+n>e.length)throw new RangeError("Index out of range");if(r<0)throw new RangeError("Index out of range")}function z(e,t,r,n,i){t=+t;r=r>>>0;if(!i){$(e,t,r,4,34028234663852886e22,-34028234663852886e22)}o.write(e,t,r,n,23,4);return r+4}p.prototype.writeFloatLE=function e(t,r,n){return z(this,t,r,true,n)};p.prototype.writeFloatBE=function e(t,r,n){return z(this,t,r,false,n)};function U(e,t,r,n,i){t=+t;r=r>>>0;if(!i){$(e,t,r,8,17976931348623157e292,-17976931348623157e292)}o.write(e,t,r,n,52,8);return r+8}p.prototype.writeDoubleLE=function e(t,r,n){return U(this,t,r,true,n)};p.prototype.writeDoubleBE=function e(t,r,n){return U(this,t,r,false,n)};p.prototype.copy=function e(t,r,n,i){if(!n)n=0;if(!i&&i!==0)i=this.length;if(r>=t.length)r=t.length;if(!r)r=0;if(i>0&&i<n)i=n;if(i===n)return 0;if(t.length===0||this.length===0)return 0;if(r<0){throw new RangeError("targetStart out of bounds")}if(n<0||n>=this.length)throw new RangeError("sourceStart out of bounds");if(i<0)throw new RangeError("sourceEnd out of bounds");if(i>this.length)i=this.length;if(t.length-r<i-n){i=t.length-r+n}var o=i-n;var a;if(this===t&&n<r&&r<i){for(a=o-1;a>=0;--a){t[a+r]=this[a+n]}}else if(o<1e3){for(a=0;a<o;++a){t[a+r]=this[a+n]}}else{Uint8Array.prototype.set.call(t,this.subarray(n,n+o),r)}return o};p.prototype.fill=function e(t,r,n,i){if(typeof t==="string"){if(typeof r==="string"){i=r;r=0;n=this.length}else if(typeof n==="string"){i=n;n=this.length}if(t.length===1){var o=t.charCodeAt(0);if(o<256){t=o}}if(i!==undefined&&typeof i!=="string"){throw new TypeError("encoding must be a string")}if(typeof i==="string"&&!p.isEncoding(i)){throw new TypeError("Unknown encoding: "+i)}}else if(typeof t==="number"){t=t&255}if(r<0||this.length<r||this.length<n){throw new RangeError("Out of range index")}if(n<=r){return this}r=r>>>0;n=n===undefined?this.length:n>>>0;if(!t)t=0;var a;if(typeof t==="number"){for(a=r;a<n;++a){this[a]=t}}else{var s=p.isBuffer(t)?t:new p(t,i);var u=s.length;for(a=0;a<n-r;++a){this[a+r]=s[a%u]}}return this};var G=/[^+/0-9A-Za-z-_]/g;function V(e){e=e.trim().replace(G,"");if(e.length<2)return"";while(e.length%4!==0){e=e+"="}return e}function H(e){if(e<16)return"0"+e.toString(16);return e.toString(16)}function q(e,t){t=t||Infinity;var r;var n=e.length;var i=null;var o=[];for(var a=0;a<n;++a){r=e.charCodeAt(a);if(r>55295&&r<57344){if(!i){if(r>56319){if((t-=3)>-1)o.push(239,191,189);continue}else if(a+1===n){if((t-=3)>-1)o.push(239,191,189);continue}i=r;continue}if(r<56320){if((t-=3)>-1)o.push(239,191,189);i=r;continue}r=(i-55296<<10|r-56320)+65536}else if(i){if((t-=3)>-1)o.push(239,191,189)}i=null;if(r<128){if((t-=1)<0)break;o.push(r)}else if(r<2048){if((t-=2)<0)break;o.push(r>>6|192,r&63|128)}else if(r<65536){if((t-=3)<0)break;o.push(r>>12|224,r>>6&63|128,r&63|128)}else if(r<1114112){if((t-=4)<0)break;o.push(r>>18|240,r>>12&63|128,r>>6&63|128,r&63|128)}else{throw new Error("Invalid code point")}}return o}function W(e){var t=[];for(var r=0;r<e.length;++r){t.push(e.charCodeAt(r)&255)}return t}function X(e,t){var r,n,i;var o=[];for(var a=0;a<e.length;++a){if((t-=2)<0)break;r=e.charCodeAt(a);n=r>>8;i=r%256;o.push(i);o.push(n)}return o}function Y(e){return i.toByteArray(V(e))}function K(e,t,r,n){for(var i=0;i<n;++i){if(i+r>=t.length||i>=e.length)break;t[i+r]=e[i]}return i}function Z(e){return e instanceof ArrayBuffer||e!=null&&e.constructor!=null&&e.constructor.name==="ArrayBuffer"&&typeof e.byteLength==="number"}function J(e){return typeof ArrayBuffer.isView==="function"&&ArrayBuffer.isView(e)}function Q(e){return e!==e}},{"base64-js":3,ieee754:17}],8:[function(e,t,r){"use strict";t.exports=n;t.exports.default=n;function n(e,t,r){r=r||2;var n=t&&t.length,i=n?t[0]*r:e.length,o=v(e,0,i,r,true),a=[];if(!o)return a;var s,u,c,h,l,p,f;if(n)o=g(e,t,o,r);if(e.length>80*r){s=c=e[0];u=h=e[1];for(var d=r;d<i;d+=r){l=e[d];p=e[d+1];if(l<s)s=l;if(p<u)u=p;if(l>c)c=l;if(p>h)h=p}f=Math.max(c-s,h-u);f=f!==0?1/f:0}m(o,a,r,s,u,f);return a}function v(e,t,r,n,i){var o,a;if(i===j(e,t,r,n)>0){for(o=t;o<r;o+=n)a=O(o,e[o],e[o+1],a)}else{for(o=r-n;o>=t;o-=n)a=O(o,e[o],e[o+1],a)}if(a&&s(a,a.next)){P(a);a=a.next}return a}function h(e,t){if(!e)return e;if(!t)t=e;var r=e,n;do{n=false;if(!r.steiner&&(s(r,r.next)||M(r.prev,r,r.next)===0)){P(r);r=t=r.prev;if(r===r.next)break;n=true}else{r=r.next}}while(n||r!==t);return t}function m(e,t,r,n,i,o,a){if(!e)return;if(!a&&o)b(e,n,i,o);var s=e,u,c;while(e.prev!==e.next){u=e.prev;c=e.next;if(o?p(e,n,i,o):l(e)){t.push(u.i/r);t.push(e.i/r);t.push(c.i/r);P(e);e=c.next;s=c.next;continue}e=c;if(e===s){if(!a){m(h(e),t,r,n,i,o,1)}else if(a===1){e=f(e,t,r);m(e,t,r,n,i,o,2)}else if(a===2){d(e,t,r,n,i,o)}break}}}function l(e){var t=e.prev,r=e,n=e.next;if(M(t,r,n)>=0)return false;var i=e.next.next;while(i!==e.prev){if(S(t.x,t.y,r.x,r.y,n.x,n.y,i.x,i.y)&&M(i.prev,i,i.next)>=0)return false;i=i.next}return true}function p(e,t,r,n){var i=e.prev,o=e,a=e.next;if(M(i,o,a)>=0)return false;var s=i.x<o.x?i.x<a.x?i.x:a.x:o.x<a.x?o.x:a.x,u=i.y<o.y?i.y<a.y?i.y:a.y:o.y<a.y?o.y:a.y,c=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;var l=x(s,u,t,r,n),p=x(c,h,t,r,n);var f=e.prevZ,d=e.nextZ;while(f&&f.z>=l&&d&&d.z<=p){if(f!==e.prev&&f!==e.next&&S(i.x,i.y,o.x,o.y,a.x,a.y,f.x,f.y)&&M(f.prev,f,f.next)>=0)return false;f=f.prevZ;if(d!==e.prev&&d!==e.next&&S(i.x,i.y,o.x,o.y,a.x,a.y,d.x,d.y)&&M(d.prev,d,d.next)>=0)return false;d=d.nextZ}while(f&&f.z>=l){if(f!==e.prev&&f!==e.next&&S(i.x,i.y,o.x,o.y,a.x,a.y,f.x,f.y)&&M(f.prev,f,f.next)>=0)return false;f=f.prevZ}while(d&&d.z<=p){if(d!==e.prev&&d!==e.next&&S(i.x,i.y,o.x,o.y,a.x,a.y,d.x,d.y)&&M(d.prev,d,d.next)>=0)return false;d=d.nextZ}return true}function f(e,t,r){var n=e;do{var i=n.prev,o=n.next.next;if(!s(i,o)&&a(i,n,n.next,o)&&E(i,o)&&E(o,i)){t.push(i.i/r);t.push(n.i/r);t.push(o.i/r);P(n);P(n.next);n=e=o}n=n.next}while(n!==e);return n}function d(e,t,r,n,i,o){var a=e;do{var s=a.next.next;while(s!==a.prev){if(a.i!==s.i&&c(a,s)){var u=T(a,s);a=h(a,a.next);u=h(u,u.next);m(a,t,r,n,i,o);m(u,t,r,n,i,o);return}s=s.next}a=a.next}while(a!==e)}function g(e,t,r,n){var i=[],o,a,s,u,c;for(o=0,a=t.length;o<a;o++){s=t[o]*n;u=o<a-1?t[o+1]*n:e.length;c=v(e,s,u,n,false);if(c===c.next)c.steiner=true;i.push(w(c))}i.sort(y);for(o=0;o<i.length;o++){_(i[o],r);r=h(r,r.next)}return r}function y(e,t){return e.x-t.x}function _(e,t){t=i(e,t);if(t){var r=T(t,e);h(r,r.next)}}function i(e,t){var r=t,n=e.x,i=e.y,o=-Infinity,a;do{if(i<=r.y&&i>=r.next.y&&r.next.y!==r.y){var s=r.x+(i-r.y)*(r.next.x-r.x)/(r.next.y-r.y);if(s<=n&&s>o){o=s;if(s===n){if(i===r.y)return r;if(i===r.next.y)return r.next}a=r.x<r.next.x?r:r.next}}r=r.next}while(r!==t);if(!a)return null;if(n===o)return a.prev;var u=a,c=a.x,h=a.y,l=Infinity,p;r=a.next;while(r!==u){if(n>=r.x&&r.x>=c&&n!==r.x&&S(i<h?n:o,i,c,h,i<h?o:n,i,r.x,r.y)){p=Math.abs(i-r.y)/(n-r.x);if((p<l||p===l&&r.x>a.x)&&E(r,e)){a=r;l=p}}r=r.next}return a}function b(e,t,r,n){var i=e;do{if(i.z===null)i.z=x(i.x,i.y,t,r,n);i.prevZ=i.prev;i.nextZ=i.next;i=i.next}while(i!==e);i.prevZ.nextZ=null;i.prevZ=null;o(i)}function o(e){var t,r,n,i,o,a,s,u,c=1;do{r=e;e=null;o=null;a=0;while(r){a++;n=r;s=0;for(t=0;t<c;t++){s++;n=n.nextZ;if(!n)break}u=c;while(s>0||u>0&&n){if(s!==0&&(u===0||!n||r.z<=n.z)){i=r;r=r.nextZ;s--}else{i=n;n=n.nextZ;u--}if(o)o.nextZ=i;else e=i;i.prevZ=o;o=i}r=n}o.nextZ=null;c*=2}while(a>1);return e}function x(e,t,r,n,i){e=32767*(e-r)*i;t=32767*(t-n)*i;e=(e|e<<8)&16711935;e=(e|e<<4)&252645135;e=(e|e<<2)&858993459;e=(e|e<<1)&1431655765;t=(t|t<<8)&16711935;t=(t|t<<4)&252645135;t=(t|t<<2)&858993459;t=(t|t<<1)&1431655765;return e|t<<1}function w(e){var t=e,r=e;do{if(t.x<r.x)r=t;t=t.next}while(t!==e);return r}function S(e,t,r,n,i,o,a,s){return(i-a)*(t-s)-(e-a)*(o-s)>=0&&(e-a)*(n-s)-(r-a)*(t-s)>=0&&(r-a)*(o-s)-(i-a)*(n-s)>=0}function c(e,t){return e.next.i!==t.i&&e.prev.i!==t.i&&!u(e,t)&&E(e,t)&&E(t,e)&&C(e,t)}function M(e,t,r){return(t.y-e.y)*(r.x-t.x)-(t.x-e.x)*(r.y-t.y)}function s(e,t){return e.x===t.x&&e.y===t.y}function a(e,t,r,n){if(s(e,t)&&s(r,n)||s(e,n)&&s(r,t))return true;return M(e,t,r)>0!==M(e,t,n)>0&&M(r,n,e)>0!==M(r,n,t)>0}function u(e,t){var r=e;do{if(r.i!==e.i&&r.next.i!==e.i&&r.i!==t.i&&r.next.i!==t.i&&a(r,r.next,e,t))return true;r=r.next}while(r!==e);return false}function E(e,t){return M(e.prev,e,e.next)<0?M(e,t,e.next)>=0&&M(e,e.prev,t)>=0:M(e,t,e.prev)<0||M(e,e.next,t)<0}function C(e,t){var r=e,n=false,i=(e.x+t.x)/2,o=(e.y+t.y)/2;do{if(r.y>o!==r.next.y>o&&r.next.y!==r.y&&i<(r.next.x-r.x)*(o-r.y)/(r.next.y-r.y)+r.x)n=!n;r=r.next}while(r!==e);return n}function T(e,t){var r=new A(e.i,e.x,e.y),n=new A(t.i,t.x,t.y),i=e.next,o=t.prev;e.next=t;t.prev=e;r.next=i;i.prev=r;n.next=r;r.prev=n;o.next=n;n.prev=o;return n}function O(e,t,r,n){var i=new A(e,t,r);if(!n){i.prev=i;i.next=i}else{i.next=n.next;i.prev=n;n.next.prev=i;n.next=i}return i}function P(e){e.next.prev=e.prev;e.prev.next=e.next;if(e.prevZ)e.prevZ.nextZ=e.nextZ;if(e.nextZ)e.nextZ.prevZ=e.prevZ}function A(e,t,r){this.i=e;this.x=t;this.y=r;this.prev=null;this.next=null;this.z=null;this.prevZ=null;this.nextZ=null;this.steiner=false}n.deviation=function(e,t,r,n){var i=t&&t.length;var o=i?t[0]*r:e.length;var a=Math.abs(j(e,0,o,r));if(i){for(var s=0,u=t.length;s<u;s++){var c=t[s]*r;var h=s<u-1?t[s+1]*r:e.length;a-=Math.abs(j(e,c,h,r))}}var l=0;for(s=0;s<n.length;s+=3){var p=n[s]*r;var f=n[s+1]*r;var d=n[s+2]*r;l+=Math.abs((e[p]-e[d])*(e[f+1]-e[p+1])-(e[p]-e[f])*(e[d+1]-e[p+1]))}return a===0&&l===0?0:Math.abs((l-a)/a)};function j(e,t,r,n){var i=0;for(var o=t,a=r-n;o<r;o+=n){i+=(e[a]-e[o])*(e[o+1]+e[a+1]);a=o}return i}n.flatten=function(e){var t=e[0][0].length,r={vertices:[],holes:[],dimensions:t},n=0;for(var i=0;i<e.length;i++){for(var o=0;o<e[i].length;o++){for(var a=0;a<t;a++)r.vertices.push(e[i][o][a])}if(i>0){n+=e[i-1].length;r.holes.push(n)}}return r}},{}],9:[function(e,t,r){"use strict";var n=e("individual/one-version");var i="7";n("ev-store",i);var o="__EV_STORE_KEY@"+i;t.exports=a;function a(e){var t=e[o];if(!t){t=e[o]={}}return t}},{"individual/one-version":19}],10:[function(e,t,r){"use strict";var h=e("./request");var n=e("./buildQueryObject");var i=Array.isArray;function l(e,t){var r;for(r in t){e[r]=t[r]}return e}function o(e,t){this._jsongUrl=e;if(typeof t==="number"){var r={timeout:t};t=r}this._config=l({timeout:15e3,headers:{}},t||{})}o.prototype={constructor:o,buildQueryObject:n,get:function e(t){var r="GET";var n=this.buildQueryObject(this._jsongUrl,r,{paths:t,method:"get"});var i=l(n,this._config);var o=this;return h(r,i,o)},set:function e(t){var r="POST";var n=this.buildQueryObject(this._jsongUrl,r,{jsonGraph:t,method:"set"});var i=l(n,this._config);i.headers["Content-Type"]="application/x-www-form-urlencoded";var o=this;return h(r,i,o)},call:function e(t,r,n,i){r=r||[];n=n||[];i=i||[];var o="POST";var a=[];a.push("method=call");a.push("callPath="+encodeURIComponent(JSON.stringify(t)));a.push("arguments="+encodeURIComponent(JSON.stringify(r)));a.push("pathSuffixes="+encodeURIComponent(JSON.stringify(n)));a.push("paths="+encodeURIComponent(JSON.stringify(i)));var s=this.buildQueryObject(this._jsongUrl,o,a.join("&"));var u=l(s,this._config);u.headers["Content-Type"]="application/x-www-form-urlencoded";var c=this;return h(o,u,c)}};o.XMLHttpSource=o;o["default"]=o;t.exports=o},{"./buildQueryObject":11,"./request":14}],11:[function(e,t,r){"use strict";t.exports=function e(t,r,n){var i=[];var o;var a={url:t};var s=t.indexOf("?")!==-1;var u=s?"&":"?";if(typeof n==="string"){i.push(n)}else{o=Object.keys(n);o.forEach(function(e){var t=typeof n[e]==="object"?JSON.stringify(n[e]):n[e];i.push(e+"="+encodeURIComponent(t))})}if(r==="GET"){a.url+=u+i.join("&")}else{a.data=i.join("&")}return a}},{}],12:[function(e,t,r){(function(r){"use strict";t.exports=function e(){var t=new r.XMLHttpRequest;if("withCredentials"in t){return t}else if(!!r.XDomainRequest){return new XDomainRequest}else{throw new Error("CORS is not supported by your browser")}}}).call(this,typeof global!=="undefined"?global:typeof self!=="undefined"?self:typeof window!=="undefined"?window:{})},{}],13:[function(e,t,r){(function(i){"use strict";t.exports=function e(){var t,r,n;if(i.XMLHttpRequest){return new i.XMLHttpRequest}else{try{r=["Msxml2.XMLHTTP","Microsoft.XMLHTTP","Msxml2.XMLHTTP.4.0"];for(n=0;n<3;n++){try{t=r[n];if(new i.ActiveXObject(t)){break}}catch(e){}}return new i.ActiveXObject(t)}catch(e){throw new Error("XMLHttpRequest is not supported by your browser")}}}}).call(this,typeof global!=="undefined"?global:typeof self!=="undefined"?self:typeof window!=="undefined"?window:{})},{}],14:[function(e,t,r){"use strict";var l=e("./getXMLHttpRequest");var p=e("./getCORSRequest");var f=Object.prototype.hasOwnProperty;var a=function(){};function n(){}n.create=function(o){var e=new n;e.subscribe=function(e,t,r){var n;var i;if(typeof e==="function"){n={onNext:e,onError:t||a,onCompleted:r||a}}else{n=e}i=o(n);if(typeof i==="function"){return{dispose:i}}else{return i}};return e};function i(u,c,h){return n.create(function e(r){var t={method:u||"GET",crossDomain:false,async:true,headers:{},responseType:"json"};var n,i,o,a,s;for(s in c){if(f.call(c,s)){t[s]=c[s]}}if(!t.crossDomain&&!t.headers["X-Requested-With"]){t.headers["X-Requested-With"]="XMLHttpRequest"}if(h.onBeforeRequest!=null){h.onBeforeRequest(t)}try{n=t.crossDomain?p():l()}catch(e){r.onError(e)}try{if(t.user){n.open(t.method,t.url,t.async,t.user,t.password)}else{n.open(t.method,t.url,t.async)}n.timeout=t.timeout;n.withCredentials=t.withCredentials!==false;o=t.headers;for(a in o){if(f.call(o,a)){n.setRequestHeader(a,o[a])}}if(t.responseType){try{n.responseType=t.responseType}catch(e){if(t.responseType!=="json"){throw e}}}n.onreadystatechange=function e(t){if(n.readyState===4){if(!i){i=true;d(r,n,t)}}};n.ontimeout=function e(t){if(!i){i=true;v(r,n,"timeout error",t)}};n.send(t.data)}catch(e){r.onError(e)}return function e(){if(!i&&n.readyState!==4){i=true;n.abort()}}})}function s(e,t,r){if(!r){r=new Error(t)}e.onError(r)}function d(e,t,r){var n,i,o;if(t&&e){o=t.responseType;n="response"in t?t.response:t.responseText;var a=t.status===1223?204:t.status;if(a>=200&&a<=399){try{if(o!=="json"){n=JSON.parse(n||"")}if(typeof n==="string"){n=JSON.parse(n||"")}}catch(r){s(e,"invalid json",r)}e.onNext(n);e.onCompleted();return}else if(a===401||a===403||a===407){return s(e,n)}else if(a===410){return s(e,n)}else if(a===408||a===504){return s(e,n)}else{return s(e,n||"Response code "+a)}}}function v(e,t,r,n){s(e,r||t.statusText||"request error",n)}t.exports=i},{"./getCORSRequest":12,"./getXMLHttpRequest":13}],15:[function(l,r,i){(function(n){!function(e){if("object"==typeof i&&"undefined"!=typeof r)r.exports=e();else if("function"==typeof o&&o.amd)o([],e);else{var t;t="undefined"!=typeof window?window:"undefined"!=typeof n?n:"undefined"!=typeof self?self:this,t.falcor=e()}}(function(){var Dr;return function o(a,s,u){function c(r,e){if(!s[r]){if(!a[r]){var t="function"==typeof l&&l;if(!e&&t)return t(r,!0);if(h)return h(r,!0);var n=new Error("Cannot find module '"+r+"'");throw n.code="MODULE_NOT_FOUND",n}var i=s[r]={exports:{}};a[r][0].call(i.exports,function(e){var t=a[r][1][e];return c(t?t:e)},i,i.exports,o,a,s,u)}return s[r].exports}for(var h="function"==typeof l&&l,e=0;e<u.length;e++)c(u[e]);return c}({1:[function(e,t,r){var n=e(32),i=e(130);n.atom=i.atom,n.ref=i.ref,n.error=i.error,n.pathValue=i.pathValue,n.HttpDataSource=e(125),t.exports=n},{125:125,130:130,32:32}],2:[function(e,t,r){function i(e){var t=e||{};this._root=t._root||new n(t),this._path=t.path||t._path||[],this._scheduler=t.scheduler||t._scheduler||new f,this._source=t.source||t._source,this._request=t.request||t._request||new a(this,this._scheduler),this._ID=T++,"number"==typeof t.maxSize?this._maxSize=t.maxSize:this._maxSize=t._maxSize||i.prototype._maxSize,"number"==typeof t.collectRatio?this._collectRatio=t.collectRatio:this._collectRatio=t._collectRatio||i.prototype._collectRatio,(t.boxed||t.hasOwnProperty("_boxed"))&&(this._boxed=t.boxed||t._boxed),(t.materialized||t.hasOwnProperty("_materialized"))&&(this._materialized=t.materialized||t._materialized),"boolean"==typeof t.treatErrorsAsValues?this._treatErrorsAsValues=t.treatErrorsAsValues:t.hasOwnProperty("_treatErrorsAsValues")&&(this._treatErrorsAsValues=t._treatErrorsAsValues),t.cache&&this.setCache(t.cache)}var n=e(4),o=e(3),a=e(55),s=e(64),u=e(65),c=e(61),h=e(63),l=e(73),p=e(75),f=e(74),d=e(81),v=e(84),m=e(49),g=e(134),y=e(88),_=e(100),b=e(96),x=e(102),w=e(98),S=e(99),M=e(77),E=e(76),C=e(130),T=0,O=e(116),P=function(){},A=e(14),j=e(19),R={pathValue:!0,pathSyntax:!0,json:!0,jsonGraph:!0},L=e(72);t.exports=i,i.ref=C.ref,i.atom=C.atom,i.error=C.error,i.pathValue=C.pathValue,i.prototype.constructor=i,i.prototype._materialized=!1,i.prototype._boxed=!1,i.prototype._progressive=!1,i.prototype._treatErrorsAsValues=!1,i.prototype._maxSize=Math.pow(2,53)-1,i.prototype._collectRatio=.75,i.prototype.get=e(71),i.prototype._getWithPaths=e(70),i.prototype.set=function(){var t=O(arguments,R,"set");return t!==!0?new s(function(e){e.onError(t)}):this._set.apply(this,arguments)},i.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()})})},i.prototype._set=function(){var e,t=-1,r=arguments.length,n=arguments[r-1];for(b(n)?r-=1:n=void 0,e=new Array(r);++t<r;)e[t]=arguments[t];return u.create(this,e,n)},i.prototype.call=function(){var e,t=-1,r=arguments.length;for(e=new Array(r);++t<r;){var n=arguments[t];e[t]=n;var i=typeof n;if(t>1&&!Array.isArray(n)||0===t&&!Array.isArray(n)&&"string"!==i||1===t&&!Array.isArray(n)&&!x(n))return new s(function(e){e.onError(new Error("Invalid argument"))})}return c.create(this,e)},i.prototype.invalidate=function(){var e,t=-1,r=arguments.length,n=arguments[r-1];for(e=new Array(r);++t<r;)if(e[t]=g.fromPath(arguments[t]),"object"!=typeof e[t])throw new Error("Invalid argument");h.create(this,e,n).subscribe(P,function(e){throw e})},i.prototype.deref=e(5),i.prototype.getValue=e(16),i.prototype.setValue=e(79),i.prototype._getValueSync=e(24),i.prototype._setValueSync=e(80),i.prototype._derefSync=e(6),i.prototype.setCache=function(e){var t=this._root.cache;if(e!==t){var r=this._root,n=this._path;this._path=[],this._root.cache={},"undefined"!=typeof t&&m(r,r.expired,y(t),0),S(e)?E(this,[e]):w(e)?M(this,[e]):_(e)&&M(this,[{json:e}]),this._path=n}else"undefined"==typeof t&&(this._root.cache={});return this},i.prototype.getCache=function(){var e=v(arguments);if(0===e.length)return A(this._root.cache);var t=[{}],r=this._path;return j.getWithPathsAsJSONGraph(this,e,t),this._path=r,t[0].jsonGraph},i.prototype.getVersion=function(e){var t=e&&g.fromPath(e)||[];if(Array.isArray(t)===!1)throw new Error("Model#getVersion must be called with an Array path.");return this._path.length&&(t=this._path.concat(t)),this._getVersion(this,t)},i.prototype._syncCheck=function(e){if(Boolean(this._source)&&this._root.syncRefCount<=0&&this._root.unsafeMode===!1)throw new Error("Model#"+e+" may only be called within the context of a request selector.");return!0},i.prototype._clone=function(e){var t=new i(this);for(var r in e){var n=e[r];"delete"===n?delete t[r]:t[r]=n}return t.setCache=void 0,t},i.prototype.batch=function(e){var t=e;"number"==typeof t?t=new p(Math.round(Math.abs(t))):t&&t.schedule||(t=new l);var r=this._clone();return r._request=new a(r,t),r},i.prototype.unbatch=function(){var e=this._clone();return e._request=new a(e,new f),e},i.prototype.treatErrorsAsValues=function(){return this._clone({_treatErrorsAsValues:!0})},i.prototype.asDataSource=function(){return new o(this)},i.prototype._materialize=function(){return this._clone({_materialized:!0})},i.prototype._dematerialize=function(){return this._clone({_materialized:"delete"})},i.prototype.boxValues=function(){return this._clone({_boxed:!0})},i.prototype.unboxValues=function(){return this._clone({_boxed:"delete"})},i.prototype.withoutDataSource=function(){return this._clone({_source:"delete"})},i.prototype.toJSON=function(){return{$type:"ref",value:this._path}},i.prototype.getPath=function(){return d(this._path)},i.prototype._getBoundValue=e(13),i.prototype._getVersion=e(18),i.prototype._getValueSync=e(17),i.prototype._getPathValuesAsPathMap=j.getWithPathsAsPathMap,i.prototype._getPathValuesAsJSONG=j.getWithPathsAsJSONGraph,i.prototype._setPathValuesAsJSON=e(78),i.prototype._setPathValuesAsJSONG=e(78),i.prototype._setPathValuesAsPathMap=e(78),i.prototype._setPathValuesAsValues=e(78),i.prototype._setPathMapsAsJSON=e(77),i.prototype._setPathMapsAsJSONG=e(77),i.prototype._setPathMapsAsPathMap=e(77),i.prototype._setPathMapsAsValues=e(77),i.prototype._setJSONGsAsJSON=e(76),i.prototype._setJSONGsAsJSONG=e(76),i.prototype._setJSONGsAsPathMap=e(76),i.prototype._setJSONGsAsValues=e(76),i.prototype._setCache=e(77),i.prototype._invalidatePathValuesAsJSON=e(48),i.prototype._invalidatePathMapsAsJSON=e(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(e,t,r){function n(e){this._model=e._materialize().treatErrorsAsValues()}n.prototype.get=function(e){return this._model.get.apply(this._model,e)._toJSONG()},n.prototype.set=function(e){return this._model.set(e)._toJSONG()},n.prototype.call=function(e,t,r,n){var i=[e,t,r].concat(n);return this._model.call.apply(this._model,i)._toJSONG()},t.exports=n},{}],4:[function(e,t,r){function n(e){var t=e||{};this.syncRefCount=0,this.expired=t.expired||[],this.unsafeMode=t.unsafeMode||!1,this.collectionScheduler=t.collectionScheduler||new a,this.cache={},i(t.comparator)&&(this.comparator=t.comparator),i(t.errorSelector)&&(this.errorSelector=t.errorSelector),i(t.onChange)&&(this.onChange=t.onChange)}var i=e(96),o=e(91),a=e(74);n.prototype.errorSelector=function(e,t){return t},n.prototype.comparator=function(e,t){return o(e,"value")&&o(t,"value")?e.value===t.value&&e.$type===t.$type&&e.$expires===t.$expires:e===t},t.exports=n},{74:74,91:91,96:96}],5:[function(e,t,r){function s(e,t){var r,n=!1;try{++e._root.syncRefCount,r=e._derefSync(t)}catch(e){r=e,n=!0}finally{--e._root.syncRefCount}return n?u.Observable["throw"](r):u.Observable["return"](r)}var u=e(159),c=e(134);t.exports=function(e){for(var n=this,t=-1,i=arguments.length-1,o=new Array(i),a=c.fromPath(e);++t<i;)o[t]=c.fromPath(arguments[t+1]);if(0===i)throw new Error("Model#deref requires at least one value path.");return u.Observable.defer(function(){return s(n,a)}).flatMap(function(e){if(Boolean(e)){if(i>0){var t=u.Observable.of(e);return e.get.apply(e,o)["catch"](u.Observable.empty()).concat(t).last().flatMap(function(){return s(n,a)}).filter(function(e){return e})}return u.Observable["return"](e)}if(i>0){var r=o.map(function(e){return a.concat(e)});return n.get.apply(n,r).concat(u.Observable.defer(function(){return s(n,a)})).last().filter(function(e){return e})}return u.Observable.empty()})}},{134:134,159:159}],6:[function(e,t,r){var a=e(134),s=e(13),u=e(8),c=e(118);t.exports=function(e){var t=a.fromPath(e);if(!Array.isArray(t))throw new Error("Model#derefSync must be called with an Array path.");var r=s(this,this._path.concat(t),!1),n=r.path,i=r.value,o=r.found;if(o&&void 0!==i&&(i.$type!==c||void 0!==i.value)){if(i.$type)throw new u;return this._clone({_path:n})}}},{118:118,13:13,134:134,8:8}],7:[function(e,t,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.",t.exports=n},{}],8:[function(e,t,r){function n(e,t){this.message=o,this.stack=(new Error).stack,this.boundPath=e,this.shortedPath=t}var i="InvalidModelError",o="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=i,n.message=o,t.exports=n},{}],9:[function(e,t,r){function n(e){this.message="An exception was thrown when making a request.",this.stack=(new Error).stack,this.innerError=e}var i="InvalidSourceError";n.prototype=new Error,n.prototype.name=i,n.is=function(e){return e&&e.name===i},t.exports=n},{}],10:[function(e,t,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(e){return e&&e.name===i},t.exports=n},{}],11:[function(e,t,r){function n(e,t,r,n,i,o,a){for(var s,u,c=r,h=i,l=n,p=0;;){if(0===p&&l[x]?(p=h.length,u=l[x]):(s=h[p++],u=c[s]),u){var f=u.$type,d=f&&u.value||u;if(p<h.length){if(f){c=u;break}c=u;continue}if(c=u,f&&_(u))break;if(l[x]||g(l,u),f===b){a?y(e,u,o,null,null,null,h,h.length,a):w(e,u),p=0,h=d,l=u,c=t;continue}break}c=void 0;break}if(p<h.length&&void 0!==c){for(var v=[],m=0;p>m;m++)v[m]=h[m];h=v}return[c,h]}var i=e(26),g=i.create,y=e(22),_=e(27),b=e(120),x=e(33),w=e(29).promote;t.exports=n},{120:120,22:22,26:26,27:27,29:29,33:33}],12:[function(e,t,r){var v=e(15),m=e(8),g=e(7);t.exports=function(f,d){return function(e,t,r){var n,i,o,a=r[0],s={values:r,optimizedPaths:[]},u=e._root.cache,c=e._path,h=u,l=c.length,p=[];if(l){if(d)return{criticalError:new g};if(h=v(e,c),h.$type)return{criticalError:new m(c,c)};for(n=[],i=0;l>i;++i)n[i]=c[i]}else n=[],l=0;for(i=0,o=t.length;o>i;i++)f(e,u,h,t[i],0,a,s,p,n,l,d);return s}}},{15:15,7:7,8:8}],13:[function(e,t,r){var h=e(17),l=e(8);t.exports=function(e,t,r){var n,i,o,a,s,u=t,c=t;for(n=e._boxed,r=e._materialized,i=e._treatErrorsAsValues,e._boxed=!0,e._materialized=void 0===r||r,e._treatErrorsAsValues=!0,o=h(e,u.concat(null),!0),e._boxed=n,e._materialized=r,e._treatErrorsAsValues=i,u=o.optimizedPath,a=o.shorted,s=o.found,o=o.value;u.length&&null===u[u.length-1];)u.pop();if(s&&a)throw new l(c,u);return{path:u,value:o,shorted:a,found:s}}},{17:17,8:8}],14:[function(e,t,r){function u(e){var t,r,n,i={},o=Object.keys(e);for(r=0,n=o.length;n>r;r++)t=o[r],l(t)||(i[t]=e[t]);return i}function c(a,s,e){Object.keys(a).filter(function(e){return!l(e)&&a[e]}).forEach(function(e){var t=a[e],r=s[e];if(r||(r=s[e]={}),t.$type){var n,i=t.value&&"object"==typeof t.value,o=!a[h];return n=i||o?u(t):t.value,void(s[e]=n)}c(t,r,e)})}var h=e(37),l=e(97);t.exports=function(e){var t={};return c(e,t),t}},{37:37,97:97}],15:[function(e,t,r){t.exports=function(e,t){for(var r=e._root.cache,n=-1,i=t.length;++n<i&&r&&!r.$type;)r=r[t[n]];return r}},{}],16:[function(e,t,r){var i=e(64),a=e(134);t.exports=function(e){for(var o=a.fromPath(e),t=0,r=o.length;++t<r;)if("object"==typeof o[t])return new i(function(e){e.onError(new Error("Paths must be simple paths"))});var n=this;return new i(function(i){return n.get(o).subscribe(function(e){for(var t=e.json,r=-1,n=o.length;t&&++r<n;)t=t[o[r]];i.onNext(t)},function(e){i.onError(e)},function(){i.onCompleted()})})}},{134:134,64:64}],17:[function(e,t,r){var _=e(11),b=e(25),x=e(27),w=e(29).promote,S=e(120),M=e(118),E=e(119);t.exports=function(e,t,r){for(var n,i,o,a,s,u=e._root.cache,c=t.length,h=[],l=!1,p=!1,f=0,d=u,v=u,m=u,g=!0,y=!1;d&&c>f;){if(n=t[f++],null!==n&&(d=v[n],h[h.length]=n),!d){m=void 0,l=!0,g=!1;break}if(o=d.$type,o===M&&void 0===d.value){m=void 0,g=!1,l=c>f;break}if(c>f){if(o===S){if(x(d)){y=!0,m=void 0,g=!1;break}if(a=_(e,u,u,d,d.value),s=a[0],!s){m=void 0,d=void 0,g=!1;break}o=s.$type,d=s,h=a[1].slice(0)}if(o)break}else m=d;v=d}if(c>f&&!y){for(i=f;c>i;++i)if(null!==t[f]){p=!0;break}for(p?(l=!0,m=void 0):m=d,i=f;c>i;++i)null!==t[i]&&(h[h.length]=t[i])}if(m&&o&&(x(m)?m=void 0:w(e,m)),m&&o===E&&!e._treatErrorsAsValues)throw{path:f===c?t:t.slice(0,f),value:m.value};return m&&e._boxed?m=Boolean(o)&&!r?b(m):m:!m&&e._materialized?m={$type:M}:m&&(m=m.value),{value:m,shorted:l,optimizedPath:h,found:g}}},{11:11,118:118,119:119,120:120,25:25,27:27,29:29}],18:[function(e,t,r){var i=e(46);t.exports=function(e,t){var r=e._getValueSync({_boxed:!0,_root:e._root,_treatErrorsAsValues:e._treatErrorsAsValues},t,!0).value,n=r&&r[i];return null==n?-1:n}},{46:46}],19:[function(e,t,r){var n=e(12),i=e(31),o=n(i,!1),a=n(i,!0);t.exports={getValueSync:e(17),getBoundValue:e(13),getWithPathsAsPathMap:o,getWithPathsAsJSONGraph:a}},{12:12,13:13,17:17,31:31}],20:[function(e,t,r){var n=e(29),a=e(25),s=n.promote;t.exports=function(e,t,r,n,i){var o=t.value;i.errors||(i.errors=[]),e._boxed&&(o=a(t)),i.errors.push({path:n.slice(0,r+1),value:o}),s(e,t)}},{25:25,29:29}],21:[function(e,t,r){function u(e,t,r,n,i,o,a){a.requestedMissingPaths.push(n.slice(0,r).concat(t)),a.optimizedMissingPaths.push(i.slice(0,o).concat(t))}var n=e(30),c=n.fastCopy;t.exports=function(e,t,r,n,i,o,a){var s;n.requestedMissingPaths||(n.requestedMissingPaths=[],n.optimizedMissingPaths=[]),s=r<t.length?c(t,r):[],u(e,s,r,i,o,a,n)}},{30:30}],22:[function(e,t,r){var n=e(29),x=e(25),w=n.promote,S=e(120),M=e(118),E=e(119),C=e(37);t.exports=function(e,t,r,n,i,o,a,s,u,c){if(r){var h,l,p,f,d,v,m,g,y=!1;if(t&&w(e,t),t&&void 0!==t.value||(y=e._materialized),y)g={$type:M};else if(e._boxed)g=x(t);else if(t.$type===S||t.$type===E)g=u?x(t):t.value;else if(u){var _=t.value&&"object"==typeof t.value,b=!t[C];g=_||b?x(t):t.value}else g=t.value;if(i&&(i.hasValue=!0),u){for(d=r.jsonGraph,d||(d=r.jsonGraph={},r.paths=[]),h=0,l=s-1;l>h;h++)f=a[h],d[f]||(d[f]={}),d=d[f];f=a[h],d[f]=y?{$type:M}:g,o&&r.paths.push(o.slice(0,n))}else if(0===n)r.json=g;else{for(d=r.json,d||(d=r.json={}),h=0;n-1>h;h++)p=o[h],d[p]||(d[p]={}),v=d,m=p,d=d[p];p=o[h],null!==p?d[p]=g:v[m]=g}}}},{118:118,119:119,120:120,25:25,29:29,37:37}],23:[function(e,t,r){var f=e(27),n=e(26),i=e(29),d=n.remove,v=i.splice,m=e(119),g=e(20),y=e(22),_=e(21),b=e(28),x=e(35);t.exports=function(e,t,r,n,i,o,a,s,u,c,h){var l=t&&t.$type,p=t&&void 0===t.value;return t&&l?void(f(t)?(t[x]||(v(e,t),d(t)),_(e,r,n,o,a,s,u)):l===m?(h&&(a[n]=null),c||e._treatErrorsAsValues?y(e,t,i,n,o,a,s,u,c,h):g(e,t,n,a,o)):(h&&(a[n]=null),(!p||p&&e._materialized)&&y(e,t,i,n,o,a,s,u,c,h))):void(b(e)?y(e,t,i,n,o,a,s,u,c,h):_(e,r,n,o,a,s,u))}},{119:119,20:20,21:21,22:22,26:26,27:27,28:28,29:29,35:35}],24:[function(e,t,r){var n=e(134);t.exports=function(e){var t=n.fromPath(e);if(Array.isArray(t)===!1)throw new Error("Model#getValueSync must be called with an Array path.");return this._path.length&&(t=this._path.concat(t)),this._syncCheck("getValueSync")&&this._getValueSync(this,t).value}},{134:134}],25:[function(e,t,r){var a=e(40);t.exports=function(e){var t,r,n,i=Object.keys(e);for(t={},r=0,n=i.length;n>r;r++){var o=i[r];o[0]!==a&&(t[o]=e[o])}return t}},{40:40}],26:[function(e,t,r){function n(e,t){var r=t[u]||0;t[o+r]=e,t[u]=r+1,e[s]=r,e[a]=t}function i(e){var t=e[a];if(t){for(var r=e[s],n=t[u];n>r;)t[o+r]=t[o+r+1],++r;t[u]=n-1,e[a]=void 0,e[s]=void 0}}var o=e(43),a=e(33),s=e(42),u=e(44);t.exports={create:n,remove:i}},{33:33,42:42,43:43,44:44}],27:[function(e,t,r){var n=e(106);t.exports=function(e){var t=void 0===e.$expires&&-1||e.$expires;return-1!==t&&1!==t&&(0===t||t<n())}},{106:106}],28:[function(e,t,r){t.exports=function(e){return e._materialized&&!e._source}},{}],29:[function(e,t,r){function n(e,t){var r=e._root,n=r[a];if(n!==t){var i=t[u],o=t[s];o&&(o[u]=i),i&&(i[s]=o),t[u]=void 0,r[a]=t,t[s]=n,n[u]=t}}function i(e,t){var r=e._root,n=t[u],i=t[s];i&&(i[u]=n),n&&(n[s]=i),t[u]=void 0,t===r[a]&&(r[a]=void 0),t===r[o]&&(r[o]=void 0),t[c]=!0,r.expired.push(t)}var a=e(34),o=e(45),s=e(38),u=e(41),c=e(35);t.exports={promote:n,splice:i}},{34:34,35:35,38:38,41:41,45:45}],30:[function(e,t,r){function n(e,t){var r,n,i,o=[];for(n=0,i=t||0,r=e.length;r>i;n++,i++)o[n]=e[i];return o}function i(e,t){var r,n,i,o=[];for(r=0,n=e.length;n>r;r++)o[r]=e[r];for(i=0,n=t.length;n>i;i++)null!==t[i]&&(o[r++]=t[i]);return o}function o(e,t){var r,n,i,o=[];for(r=0,n=e.length;n>r;r++)o[r]=e[r];for(i=0,n=t.length;n>i;i++)o[r++]=t[i];return o}t.exports={fastCat:o,fastCatSkipNulls:i,fastCopy:n}},{}],31:[function(e,t,r){var P=e(11),A=e(23),j=e(27),R=e(143).iterateKeySet,L=e(120),I=e(29).promote;t.exports=function e(t,r,n,i,o,a,s,u,c,h,l,p){var f=p,d=c;if(!n||n&&n.$type||o===i.length)return void A(t,n,i,o,a,s,u,d,h,l,f);var v,m;v=i[o];var g="object"==typeof v,y=o+1,_=!1,b=v;if(g&&(_={},b=R(v,_)),void 0!==b||!_.done){var x=h+1;do{f=!1;var w;null===b?w=n:(w=n[b],d[h]=b,u[o]=b);var S=d,M=x;if(w){var E=w.$type,C=E&&w.value||w;if(y<i.length&&E&&E===L&&!j(w)){l&&A(t,w,i,y,a,s,null,d,M,l,f),I(t,w);var T=P(t,r,r,w,C,a,l);f=!0,w=T[0];var O=T[1];for(S=[],M=O.length,m=0;M>m;++m)S[m]=O[m]}}e(t,r,w,i,y,a,s,u,S,M,l,f),_&&!_.done&&(b=R(v,_))}while(_&&!_.done)}}},{11:11,120:120,143:143,23:23,27:27,29:29}],32:[function(e,t,r){"use strict";function n(e){return new n.Model(e)}"function"==typeof Promise?n.Promise=Promise:n.Promise=e(151),t.exports=n,n.Model=e(2)},{151:151,2:2}],33:[function(e,t,r){t.exports=e(40)+"context"},{40:40}],34:[function(e,t,r){t.exports=e(40)+"head"},{40:40}],35:[function(e,t,r){t.exports=e(40)+"invalidated"},{40:40}],36:[function(e,t,r){t.exports=e(40)+"key"},{40:40}],37:[function(e,t,r){t.exports="$modelCreated"},{}],38:[function(e,t,r){t.exports=e(40)+"next"},{40:40}],39:[function(e,t,r){t.exports=e(40)+"parent"},{40:40}],40:[function(e,t,r){t.exports=String.fromCharCode(30)},{}],41:[function(e,t,r){t.exports=e(40)+"prev"},{40:40}],42:[function(e,t,r){t.exports=e(40)+"ref-index"},{40:40}],43:[function(e,t,r){t.exports=e(40)+"ref"},{40:40}],44:[function(e,t,r){t.exports=e(40)+"refs-length"},{40:40}],45:[function(e,t,r){t.exports=e(40)+"tail"},{40:40}],46:[function(e,t,r){t.exports=e(40)+"version"},{40:40}],47:[function(e,t,r){function y(e,t,r,n,i,o,a,s,u,c){if(!L(e)&&!e.$type)for(var h in e)if(h[0]!==m&&"$"!==h[0]&&P(e,h)){var l=e[h],p=A(l)&&!l.$type,f=g(r,n,i,h,l,p,!1,o,a,s,u,c),d=f[0],v=f[1];d&&(p?y(l,t+1,r,v,d,o,a,s,u,c):k(d,v,h,s)&&D(v,O(d),s,o))}}function d(e,t,r,n,i,o,a,s){if(j(r))return I(r,i,o),[void 0,t];T(o,r);var u=r,c=r.value,h=t;if(r=r[x],null!=r)h=r[b]||t;else{var l=0,p=c.length-1;h=r=t;do{var f=c[l],d=p>l,v=g(t,h,r,f,e,d,!0,n,i,o,a,s);if(r=v[0],L(r))return v;h=v[1]}while(l++<p);if(u[x]!==r){var m=r[M]||0;r[M]=m+1,r[_+m]=u,u[x]=r,u[S]=m}}return[r,h]}function g(e,t,r,n,i,o,a,s,u,c,h,l){for(var p=r.$type;p===E;){var f=d(i,e,r,s,u,c,h,l);if(r=f[0],L(r))return f;t=f[1],p=r&&r.$type}if(void 0!==p)return[r,t];if(null==n){if(o)throw new Error("`null` is not allowed in branch key positions.");r&&(n=r[v])}else t=r,r=t[n];return[r,t]}var v=e(36),_=e(43),m=e(40),b=e(39),x=e(33),w=e(46),S=e(42),M=e(44),E=e(120),C=e(13),T=e(50),O=e(88),P=e(91),A=e(100),j=e(95),R=e(96),L=e(102),I=e(86),N=e(92),D=e(115),k=e(109);t.exports=function(e,t){for(var r=e._root,n=r,i=r.expired,o=N(),a=r._comparator,s=r._errorSelector,u=e._path,c=r.cache,h=u.length?C(e,u).value:c,l=h[b]||c,p=c[w],f=-1,d=t.length;++f<d;){var v=t[f];y(v.json,0,c,l,h,o,i,n,a,s)}var m=c[w],g=r.onChange;R(g)&&p!==m&&g()}},{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(e,t,r){function m(e,t,r,n,i,o,a,s){var u={},c=t<e.length-1,h=e[t],l=P(h,u);do{var p=v(r,n,i,l,c,!1,o,a,s),f=p[0],d=p[1];f&&(c?m(e,t+1,r,d,f,o,a,s):R(f,d,l,s)&&j(d,M(f),s,o)),l=P(h,u)}while(!u.done)}function l(e,t,r,n,i){if(E(t))return O(t,n,i),[void 0,e];S(i,t);var o=t,a=t.value,s=e;if(t=t[y],null!=t)s=t[g]||e;else{var u=0,c=a.length-1;s=t=e;do{var h=a[u],l=c>u,p=v(e,s,t,h,l,!0,r,n,i);if(t=p[0],T(t))return p;s=p[1]}while(u++<c);if(o[y]!==t){var f=t[x]||0;t[x]=f+1,t[d+f]=o,o[y]=t,o[b]=f}}return[t,s]}function v(e,t,r,n,i,o,a,s,u){for(var c=r.$type;c===f;){var h=l(e,r,a,s,u);if(r=h[0],T(r))return h;t=h[1],c=r.$type}if(void 0!==c)return[r,t];if(null==n){if(i)throw new Error("`null` is not allowed in branch key positions.");r&&(n=r[p])}else t=r,r=t[n];return[r,t]}var p=e(36),d=e(43),g=e(39),y=e(33),_=e(46),b=e(42),x=e(44),f=e(120),w=e(13),S=e(50),M=e(88),E=e(95),C=e(96),T=e(102),O=e(86),P=e(143).iterateKeySet,A=e(92),j=e(115),R=e(109);t.exports=function(e,t){for(var r=e._root,n=r,i=r.expired,o=A(),a=e._path,s=r.cache,u=a.length?w(e,a).value:s,c=u[g]||s,h=s[_],l=-1,p=t.length;++l<p;){var f=t[l];m(f,0,s,c,u,o,i,n)}var d=s[_],v=r.onChange;C(v)&&h!==d&&v()}},{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(e,t,r){var d=e(36),v=e(39),m=e(34),g=e(45),y=e(38),_=e(41),b=e(108),x=e(115);t.exports=function(e,t,r,n,i,o){var a=r,s=i;"number"!=typeof s&&(s=.75);var u,c,h,l="number"==typeof o,p=n*s;for(c=t.pop();c;)h=c.$size||0,a-=h,l===!0?x(c,h,e,o):(u=c[v])&&b(c,u,c[d],e),c=t.pop();if(a>=n){var f=e[g];for(c=f;a>=p&&c;)f=f[_],h=c.$size||0,a-=h,l===!0&&x(c,h,e,o),c=f;e[g]=e[_]=c,null==c?e[m]=e[y]=void 0:c[y]=void 0}}},{108:108,115:115,34:34,36:36,38:38,39:39,41:41,45:45}],50:[function(e,t,r){var a=e(121),s=e(34),u=e(45),c=e(38),h=e(41),l=e(100);t.exports=function(e,t){if(l(t)&&t.$expires!==a){var r=e[s],n=e[u],i=t[c],o=t[h];t!==r&&(null!=i&&"object"==typeof i&&(i[h]=o),null!=o&&"object"==typeof o&&(o[c]=i),i=r,null!=r&&"object"==typeof r&&(r[h]=t),e[s]=e[c]=r=t,r[c]=i,r[h]=void 0),null!=n&&t!==n||(e[u]=e[h]=n=o||t)}return t}},{100:100,121:121,34:34,38:38,41:41,45:45}],51:[function(e,t,r){var a=e(34),s=e(45),u=e(38),c=e(41);t.exports=function(e,t){var r=e[a],n=e[s],i=t[u],o=t[c];null!=i&&"object"==typeof i&&(i[c]=o),null!=o&&"object"==typeof o&&(o[u]=i),t===r&&(e[a]=e[u]=i),t===n&&(e[s]=e[c]=o),t[u]=t[c]=void 0,r=n=i=o=void 0}},{34:34,38:38,41:41,45:45}],52:[function(e,t,r){function h(t,r){var n=!1;return function(){if(!n&&!t._disposed){n=!0,t._callbacks[r]=null,t._optimizedPaths[r]=[],t._requestedPaths[r]=[];var e=--t._count;0!==e||t.sent||(t._disposable.dispose(),t.requestQueue.removeRequest(t))}}}function p(e){for(var t=[],r=-1,n=0,i=e.length;i>n;++n)for(var o=e[n],a=0,s=o.length;s>a;++a)t[++r]=o[a];return t}var l=e(59),u=e(60),n=0,i=e(57).GetRequest,f=e(76),d=e(78),v=e(119),m=[],o=function(e,t){this.sent=!1,this.scheduled=!1,this.requestQueue=t,this.id=++n,this.type=i,this._scheduler=e,this._pathMap={},this._optimizedPaths=[],this._requestedPaths=[],this._callbacks=[],this._count=0,this._disposable=null,this._collapsed=null,this._disposed=!1};o.prototype={batch:function(e,t,r){var o=this,n=o._optimizedPaths,a=o._requestedPaths,s=o._callbacks,i=n.length;return n[i]=t,a[i]=e,s[i]=r,++o._count,o.scheduled||(o.scheduled=!0,o._disposable=o._scheduler.schedule(function(){u(o,n,function(e,t){if(o.requestQueue.removeRequest(o),o._disposed=!0,o._count){o._merge(a,e,t);for(var r=0,n=s.length;n>r;++r){var i=s[r];i&&i(e,t)}}})})),h(o,i)},add:function(e,t,r){var n,i,o=this,a=l(e,t,o._pathMap);a?(i=a[2],n=a[1]):(i=e,n=t);var s=!1,u=!1;if(n.length<t.length){s=!0;var c=o._callbacks.length;o._callbacks[c]=r,o._requestedPaths[c]=a[0],o._optimizedPaths[c]=[],++o._count,u=h(o,c)}return[s,i,n,u]},_merge:function(e,t,r){var n=this,i=n.requestQueue.model,o=i._root,a=o.errorSelector,s=o.comparator,u=i._path;i._path=m;var c=p(e);if(t){var h=t;h instanceof Error&&(h={message:h.message}),h.$type||(h={$type:v,value:h});var l=c.map(function(e){return{path:e,value:h}});d(i,l,null,a,s)}else f(i,[{paths:c,jsonGraph:r.jsonGraph}],null,a,s);i._path=u}},t.exports=o},{119:119,57:57,59:59,60:60,76:76,78:78}],53:[function(e,t,r){function n(){this.length=0,this.pending=!1,this.pathmaps=[],a.call(this,this._subscribe)}var i=e(159),o=i.Observer,a=i.Observable,s=i.Disposable,u=i.SerialDisposable,c=i.CompositeDisposable,h=e(9),l=e(143),f=l.iterateKeySet;n.create=function(e,t,r){var n=new this;return n.queue=e,n.model=t,n.index=r,n},n.prototype=Object.create(a.prototype),n.prototype.constructor=n,n.prototype.insertPath=function(e,t,r,n,i){var o=n||0,a=i||e.length-1,s=r||this.pathmaps[a+1]||(this.pathmaps[a+1]=Object.create(null));if(void 0===s||null===s)return!1;var u,c,h=e[o],l={};u=f(h,l);do{if(c=s[u],a>o){if(null==c){if(t)return!1;c=s[u]=Object.create(null)}if(this.insertPath(e,t,c,o+1,a)===!1)return!1}else s[u]=(c||0)+1,this.length+=1;l.done||(u=f(h,l))}while(!l.done);return!0},n.prototype.removePath=function(e,t,r,n){var i=r||0,o=n||e.length-1,a=t||this.pathmaps[o+1];if(void 0===a||null===a)return!0;var s,u,c=0,h=e[i],l={};s=f(h,l);do{if(u=a[s],void 0!==u&&null!==u){if(o>i){c+=this.removePath(e,u,i+1,o);var p=void 0;for(p in u)break;void 0===p&&delete a[s]}else u=a[s]=(u||1)-1,0===u&&delete a[s],c+=1,this.length-=1;l.done||(s=f(h,l))}}while(!l.done);return c},n.prototype.getSourceObserver=function(t){var r=this;return o.create(function(e){e.jsonGraph=e.jsonGraph||e.jsong||e.values||e.value,e.index=r.index,t.onNext(e)},function(e){t.onError(e)},function(){t.onCompleted()})},n.prototype._subscribe=function(e){var t=this,r=this.queue;t.pending=!0;var n=!1,i=new u,o=s.create(function(){n||(n=!0,r&&r._remove(t))}),a=new c(i,o);try{i.setDisposable(this.model._source[this.method](this.getSourceArgs()).subscribe(this.getSourceObserver(e)))}catch(e){throw new h(e)}return a},t.exports=n},{143:143,159:159,9:9}],54:[function(e,t,r){function n(e,t){this.total=0,this.model=e,this.requests=[],this.scheduler=t}var i=e(58),m=e(40),g=e(90),y=e(100),o=e(143);n.prototype.set=function(e){return e.paths=o.collapse(e.paths),i.create(this.model,e)},n.prototype._remove=function(e){var t=this.requests,r=t.indexOf(e);-1!==r&&t.splice(r,1)},n.prototype.distributePaths=function(e,t,r){var n,i,o=this.model,a=-1,s=e.length,u=-1,c=t.length,h=[];e:for(;++a<s;){var l=e[a];for(u=-1;++u<c;)if(i=t[u],i.insertPath(l,i.pending)){h[u]=i;continue e}n||(n=r.create(this,o,this.total++),t[u]=n,h[c++]=n),n.insertPath(l,!1)}var p=[],f=-1;for(u=-1;++u<c;)i=h[u],null!=i&&(p[++f]=i);return p},n.prototype.mergeJSONGraphs=function(e,t){var r=0,n=[],i=[],o=[],a=e.index,s=t.index;e.index=Math.max(a,s),n[-1]=e.jsonGraph||{},i[-1]=t.jsonGraph||{};e:for(;r>-1;){for(var u=n[r-1],c=i[r-1],h=o[r-1]||(o[r-1]=Object.keys(c));h.length>0;){var l=h.pop();if(l[0]!==m)if(u.hasOwnProperty(l)){var p=u[l],f=g(p),d=c[l],v=g(d);if(y(p)&&y(d)&&!f&&!v){n[r]=p,i[r]=d,r+=1;continue e}s>a&&(u[l]=d)}else u[l]=c[l]}r-=1}return e},t.exports=n},{100:100,143:143,40:40,58:58,90:90}],55:[function(e,t,r){function n(e,t){this.model=e,this.scheduler=t,this.requests=this._requests=[]}var i=e(54),o=e(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,t.exports=n},{54:54,56:56}],56:[function(e,t,r){function n(e,t){this.model=e,this.scheduler=t,this.requests=this._requests=[]}var m=e(57),g=e(52);n.prototype={setScheduler:function(e){this.scheduler=e},get:function(e,t,r){function n(){f||(--c,0===c&&r())}var i,o,a,s=this,u=[],c=0,h=s._requests,l=t,p=e,f=!1;for(i=0,o=h.length;o>i;++i)if(a=h[i],a.type===m.GetRequest){if(a.sent){var d=a.add(p,l,n);d[0]&&(p=d[1],l=d[2],u[u.length]=d[3],++c)}else a.batch(p,l,n),l=[],p=[],++c;if(!l.length)break}if(l.length){a=new g(s.scheduler,s),h[h.length]=a,++c;var v=a.batch(p,l,n);u[u.length]=v}return function(){if(!f&&0!==c){f=!0;for(var e=u.length,t=0;e>t;++t)u[t]()}}},removeRequest:function(e){for(var t=this._requests,r=t.length;--r>=0;)if(t[r].id===e.id){t.splice(r,1);break}}},t.exports=n},{52:52,57:57}],57:[function(e,t,r){t.exports={GetRequest:"GET"}},{}],58:[function(e,t,r){function n(){c.call(this)}var i=e(159),u=i.Observer,c=e(53),h=e(83),l=e(76),p=e(78),f=new Array(0);n.create=function(e,t){var r=new n;return r.model=e,r.jsonGraphEnvelope=t,r},n.prototype=Object.create(c.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(r){var n=this.model,i=n._path,o=this.jsonGraphEnvelope.paths,e=n._root,a=e.errorSelector,s=e.comparator;return c.prototype.getSourceObserver.call(this,u.create(function(e){n._path=f;var t=l(n,[{paths:o,jsonGraph:e.jsonGraph}],null,a,s);e.paths=t[1],n._path=i,r.onNext(e)},function(t){n._path=f,p(n,h(o,function(e){return{path:e,value:t}}),null,a,s),n._path=i,r.onError(t)},function(){r.onCompleted()}))},t.exports=n},{159:159,53:53,76:76,78:78,83:83}],59:[function(e,t,r){var f=e(143).hasIntersection,d=e(84);t.exports=function(e,t,r){for(var n=[],i=[],o=[],a=-1,s=-1,u=!1,c=0,h=t.length;h>c;++c){var l=t[c],p=r[l.length];p&&f(p,l,0)?(!u&&c>0&&(i=d(e,0,c),n=d(t,0,c)),o[++a]=e[c],u=!0):u&&(n[++s]=l,i[s]=e[c])}return u?[o,n,i]:null}},{143:143,84:84}],60:[function(e,t,r){var n=e(143),_=n.toTree,b=n.toPaths;t.exports=function(e,t,r){if(0===e._count)return void e.requestQueue.removeRequest(e);e.sent=!0,e.scheduled=!1;for(var n=e._pathMap,i=Object.keys(t),o=0,a=i.length;a>o;++o)for(var s=t[o],u=0,c=s.length;c>u;++u){var h=s[u],l=h.length;if(n[l]){var p=n[l];p[p.length]=h}else n[l]=[h]}for(var f=Object.keys(n),d=0,v=f.length;v>d;++d){var m=f[d];n[m]=_(n[m])}var g,y=e._collasped=b(n);e.requestQueue.model._source.get(y).subscribe(function(e){g=e},function(e){r(e,g)},function(){r(null,g)})}},{143:143}],61:[function(e,t,r){function n(e){b.call(this,e||i)}function y(e){return _.Observable.defer(function(){return e})}function i(i){function e(e){function t(e,t){if(Boolean(t.invalidated))e.invalidations.push(e.localThisPath.concat(t.path));else{var r=t.path,n=t.value;Boolean(n)&&"object"==typeof n&&n.$type===M?e.references.push({path:f(r),value:t.value}):e.values.push({path:f(r),value:t.value})}return e}function r(t){var e=t.values.concat(t.references);return e.length>0?y(h.set.apply(h,e)._toJSONG()).map(function(e){return{results:t,envelope:e}}):b["return"]({results:t,envelope:{jsonGraph:{},paths:[]}})}function n(e){var t,r=e.envelope,n=e.results,i=n.values,o=n.references,a=n.invalidations,s=i.map(p).map(f),u=o.reduce(l,[]),c=d.map(f),h=u.concat(c);return t=h.length>0?y(v.get.apply(v,s.concat(h))._toJSONG()):b["return"](r),t.doAction(function(e){e.invalidated=a})}function l(e,t){var r=t.path;return e.push.apply(e,c.map(function(e){return r.concat(e)})),e}function p(e){return e.path}var i=e&&e.localFn;if("function"==typeof i){var o=e.model,a=o._path,s=i.apply(o,u).reduce(t,{values:[],references:[],invalidations:[],localThisPath:a}).flatMap(r).flatMap(n);return b["return"](s)}return b.empty()}function t(e){function t(e){var t=e.invalidated;return t&&t.length&&v.invalidate.apply(v,t),e}return e&&"object"==typeof e?_.Observable.defer(function(){var t;try{t=e.call(l,u,c,d)}catch(e){t=b["throw"](new w(e))}return t}).map(t):b.empty()}function r(e){return y(h.set(e)).reduce(function(e){return e},null).map(function(){return{invalidated:e.invalidated,paths:e.paths.map(function(e){return e.slice(s.length)})}})}function f(e){return p.concat(e)}var n=this.args,o=this.model,a=S.fromPath(n[0]),u=n[1]||[],c=(n[2]||[]).map(S.fromPath),d=(n[3]||[]).map(S.fromPath),v=o._clone({_path:[]}),h=v.withoutDataSource(),s=o._path,l=s.concat(a),p=l.slice(0,-1),m=y(o.withoutDataSource().get(a)).map(function(e){for(var t=e.json,r=-1,n=a.length;t&&++r<n;)t=t[a[r]];var i=v._derefSync(p).boxValues();return{model:i,localFn:t}}).flatMap(e).defaultIfEmpty(t(o._source)).mergeAll().flatMap(r),g=new x;return g.add(m.subscribe(function(e){var t=e.paths,r=e.invalidated,n=o.get.apply(o,t);"AsJSONG"===i.outputFormat&&(n=y(n._toJSONG()).doAction(function(e){e.invalidated=r})),g.add(n.subscribe(i))},function(e){i.onError(e)})),g}var _=e(159)&&e(158),b=_.Observable,x=_.CompositeDisposable,o=e(64),w=e(9),S=e(134),M=e(120);n.create=o.create,n.prototype=Object.create(b.prototype),n.prototype.constructor=n,n.prototype.invokeSourceRequest=function(e){return this},n.prototype.ensureCollect=function(e){return this},n.prototype.initialize=function(){return this},t.exports=n},{120:120,134:134,158:158,159:159,64:64,9:9}],62:[function(e,t,r){function n(e){o.call(this,e)}var i=e(159),o=i.Observable,a=e(64),p=e(134),s=e(88),u=e(49),f=e(81),c=e(46),d=Array.isArray,v=e(101),m=e(98),g=e(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 e,t,r=this.model,n=this.outputFormat||"AsPathMap",i=this.isProgressive,o=[{}],a=[],s=this.args,u=-1,c=s.length;++u<c;){var h,l=s[u];d(l)||"string"==typeof l?(l=p.fromPath(l),h="PathValues"):v(l)?(l.path=p.fromPath(l.path),h="PathValues"):g(l)?h="JSONGs":m(l)&&(h="PathMaps"),t!==h&&(t=h,e={inputType:h,arguments:[]},a.push(e),e.values=o),e.arguments.push(l)}return this.boundPath=f(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(e){return this},n.prototype.ensureCollect=function(r){var t=this["finally"](function(){var e=r._root,t=e.cache;e.collectionScheduler.schedule(function(){u(e,e.expired,s(t),r._maxSize,r._collectRatio,t[c])})});return new this.constructor(function(e){return t.subscribe(e)})},t.exports=n},{101:101,134:134,159:159,46:46,49:49,64:64,81:81,88:88,98:98,99:99}],63:[function(e,t,r){function n(e){a.call(this,e||i)}function i(e){for(var t=this.model,r=this.method,n=this.groups,i=-1,o=n.length;++i<o;){var a=n[i],s=a.inputType,u=a.arguments;if(u.length>0){var c="_"+r+s+"AsJSON",h=t[c];h(t,u)}}return e.onCompleted(),l.empty}var o=e(159),l=o.Disposable,a=e(62);n.create=a.create,n.prototype=Object.create(a.prototype),n.prototype.method="invalidate",n.prototype.constructor=n,t.exports=n},{159:159,62:62}],64:[function(e,t,r){function n(e){this._subscribe=e}function i(e){var t=this.model,r=new this.type;return r.model=t,r.args=this.args,r.outputFormat=e.outputFormat||"AsPathMap",r.isProgressive=e.isProgressive||!1,r.subscribeCount=0,r.subscribeLimit=e.retryLimit||10,r.initialize().invokeSourceRequest(t).ensureCollect(t).subscribe(e)}var o=e(32),a=e(159)&&e(158),s=a.Observable,u=e(84),c=e(105),h={outputFormat:{value:"AsJSONG"}},l={isProgressive:{value:!0}};n.create=function(e,t){var r=new n(i);return r.args=t,r.type=this,r.model=e,r},n.prototype=Object.create(s.prototype),n.prototype.constructor=n,n.prototype._mixin=function(){var t=this,r=u(arguments);return new t.constructor(function(e){return t.subscribe(r.reduce(function(e,t){return Object.create(e,t)},e))})},n.prototype._toJSONG=function(){return this._mixin(h)},n.prototype.progressively=function(){return this._mixin(l)},n.prototype.subscribe=function(e,t,r){var n=e;n&&"object"==typeof n||(n={onNext:e||c,onError:t||c,onCompleted:r||c});var i=this._subscribe(n);switch(typeof i){case"function":return{dispose:i};case"object":return i||{dispose:c};default:return{dispose:c}}},n.prototype.then=function(e,t){var i=this;return new o.Promise(function(e,t){var r,n=!1;i.toArray().subscribe(function(e){r=e.length<=1?e[0]:e},function(e){n=!0,t(e)},function(){n===!1&&e(r)})}).then(e,t)},t.exports=n},{105:105,158:158,159:159,32:32,84:84}],65:[function(e,t,r){function n(e){c.call(this,e||i)}function i(e){return this.isCompleted?y.call(this,e):o.call(this,e)}function o(e){if(this.subscribeCount++>this.subscribeLimit)return e.onError("Loop kill switch thrown."),x.empty;for(var t=[],r=[],n=this.model,i=this.isMaster,o=n._root,a=this.outputFormat,s=o.errorSelector,u=this.method,c=this.groups,h=-1,l=c.length;++h<l;){var p=c[h],f=p.inputType,d=p.arguments;if(d.length>0){var v="_"+u+f+a,m=n[v],g=m(n,d,null,s);r.push.apply(r,g[1]),"PathValues"===f?t.push.apply(t,d.map(_)):"JSONGs"===f?t.push.apply(t,w(d,b)):t.push.apply(t,g[0])}}return this.requestedPaths=t,i?(this.isCompleted=!0,y.call(this,e)):void e.onError({method:u,optimizedPaths:r,invokeSourceRequest:!0})}function y(e){var t=new s(this.model,this.requestedPaths);return"AsJSONG"===this.outputFormat&&(t=t._toJSONG()),this.isProgressive&&(t=t.progressively()),t.subscribe(e)}function _(e){return e.path}function b(e){return e.paths}var a=e(159),u=a.Observable,x=a.Disposable,s=e(67),c=e(62),h=e(9),w=e(82),l=new Array(0);n.create=c.create,n.prototype=Object.create(c.prototype),n.prototype.method="set",n.prototype.constructor=n,n.prototype.invokeSourceRequest=function(o){var a=this,s=this["catch"](function(e){var t;if(e&&e.invokeSourceRequest===!0){var r={},n=o._path,i=e.optimizedPaths;o._path=l,o._getPathValuesAsJSONG(o._materialize().withoutDataSource(),i,[r]),o._path=n,t=o._request.set(r)["do"](function(e){a.isCompleted=i.length===e.paths.length},function(){a.isCompleted=!0}).materialize().flatMap(function(e){if("C"===e.kind)return u.empty();if("E"===e.kind){var t=e.exception;if(h.is(t))return u["throw"](e.exception)}return s})}else t=u["throw"](e);return t});return new this.constructor(function(e){return s.subscribe(e)})},t.exports=n},{159:159,62:62,67:67,82:82,9:9}],66:[function(e,t,r){var n=function(e){this.disposed=!1,this.currentDisposable=e};n.prototype={dispose:function(){if(!this.disposed&&this.currentDisposable){this.disposed=!0;var e=this.currentDisposable;e.dispose?e.dispose():e()}}},t.exports=n},{}],67:[function(e,t,r){var n=e(64),a=e(68),s=e(69),u={dispose:function(){}},i=e(159).Observable,o=t.exports=function(e,t,r,n){this.model=e,this.currentRemainingPaths=t,this.isJSONGraph=r||!1,this.isProgressive=n||!1};o.prototype=Object.create(i.prototype),o.prototype.subscribe=n.prototype.subscribe,o.prototype.then=n.prototype.then,o.prototype._toJSONG=function(){return new o(this.model,this.currentRemainingPaths,!0,this.isProgressive)},o.prototype.progressively=function(){return new o(this.model,this.currentRemainingPaths,this.isJSONGraph,!0)},o.prototype._subscribe=function(e){var t=[{}],r=[],n=e.isJSONG=this.isJSONGraph,i=this.isProgressive,o=a(this.model,this.currentRemainingPaths,e,i,n,t,r);return o?s(this,this.model,o,e,t,r,1):u}},{159:159,64:64,68:68,69:69}],68:[function(e,t,r){var n=e(19),v=n.getWithPathsAsJSONGraph,m=n.getWithPathsAsPathMap;t.exports=function(e,t,r,n,i,o,a){var s;if(s=i?v(e,t,o):m(e,t,o),s.criticalError)return r.onError(s.criticalError),null;var u=s.hasValue,c=!s.requestedMissingPaths||!e._source,h=o[0].json||o[0].jsonGraph;if(s.errors)for(var l=s.errors,p=a.length,f=0,d=l.length;d>f;++f,++p)a[p]=l[f];if(u&&n||h&&c)try{++e._root.syncRefCount,r.onNext(o[0])}catch(e){throw e}finally{--e._root.syncRefCount}return c?(a.length?r.onError(a):r.onCompleted(),null):s}},{19:19}],69:[function(e,t,r){var g=e(68),y=e(10),_=e(30).fastCat,b=e(49),x=e(88),w=e(66),S=e(46);t.exports=function i(o,a,e,s,u,c,h){if(10===h)throw new y;var t=a._request,l=e.requestedMissingPaths,r=e.optimizedMissingPaths,p=new w,n=[],f=a._path;if(f.length)for(var d=0,v=l.length;v>d;++d)n[d]=_(f,l[d]);else n=l;var m=t.get(n,r,function(){var e=g(a,l,s,o.isProgressive,o.isJSONGraph,u,c);if(e)p.currentDisposable=i(o,a,e,s,u,c,h+1);else{var t=a._root,r=t.cache,n=r[S];b(t,t.expired,x(r),a._maxSize,a._collectRatio,n)}});return p.currentDisposable=m,p}},{10:10,30:30,46:46,49:49,66:66,68:68,88:88}],70:[function(e,t,r){var n=e(67);t.exports=function(e){return new n(this,e)}},{67:67}],71:[function(e,t,r){var n=e(134),i=e(64),o=e(72),a=e(116),s=e(67);t.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(e,t,r){t.exports={path:!0,pathSyntax:!0}},{}],73:[function(e,t,r){function n(){}var i=e(123),o=e(159),a=o.Disposable;n.prototype.schedule=function(e){return i(e),a.empty},n.prototype.scheduleWithState=function(e,t){var r=this;return i(function(){t(r,e)}),a.empty},t.exports=n},{123:123,159:159}],74:[function(e,t,r){function n(){}var i=e(159),o=i.Disposable;n.prototype.schedule=function(e){return e(),o.empty},n.prototype.scheduleWithState=function(e,t){return t(this,e),o.empty},t.exports=n},{159:159}],75:[function(e,t,r){function n(e){this.delay=e}var i=e(159),o=i.Disposable;n.prototype.schedule=function(e){var t=setTimeout(e,this.delay);return o.create(function(){void 0!==t&&(clearTimeout(t),t=void 0)})},n.prototype.scheduleWithState=function(e,t){var r=this,n=setTimeout(function(){t(r,e)},this.delay);return o.create(function(){void 0!==n&&(clearTimeout(n),n=void 0)})},t.exports=n},{159:159}],76:[function(e,t,r){function E(e,t,r,n,i,o,a,s,u,c,h,l,p,f,d,v,m){for(var g={},y=t<e.length-1,_=e[t],b=L(_,g),x=l.index;;){h.depth=t;var w=C(r,n,i,o,a,s,b,y,!1,h,l,p,f,d,v,m);h[t]=b,h.index=t,l[l.index++]=b;var S=w[0],M=w[1];if(S&&(y?E(e,t+1,r,M,S,o,w[3],w[2],u,c,h,l,p,f,d,v,m):(O(d,S),u.push(h.slice(0,h.index+1)),c.push(l.slice(0,l.index)))),b=L(_,g),g.done)break;l.index=x}}function y(e,t,r,n,i,o,a,s,u,c,h){var l=t.value;if(o.splice(0,o.length),o.push.apply(o,l),P(t))return o.index=l.length,R(t,s,u),[void 0,e,n,r];O(u,t);var p=0,f=t,d=l.length-1,v=t=e,m=n=r;do{var g=l[p],y=d>p,_=C(e,v,t,r,m,n,g,y,!0,i,o,a,s,u,c,h);if(t=_[0],j(t))return o.index=p,_;v=_[1],n=_[2],m=_[3]}while(p++<d);if(o.index=p,f[w]!==t){var b=t[M]||0;t[M]=b+1,t[x+b]=f,f[w]=t,f[S]=b}return[t,v,n,m]}function C(e,t,r,n,i,o,a,s,u,c,h,l,p,f,d,v){for(var m=r.$type;m===b;){var g=y(e,r,n,o,c,h,l,p,f,d,v);if(r=g[0],j(r))return g;t=g[1],o=g[2],i=g[3],m=r.$type}if(void 0!==m)return[r,t,o,i];if(null==a){if(s)throw new Error("`null` is not allowed in branch key positions.");r&&(a=r[_])}else t=r,i=o,r=t[a],o=i&&i[a];return r=N(t,r,o,a,c,h,l,p,f,d,v),[r,t,o,i]}var _=e(36),x=e(43),w=e(33),T=e(46),S=e(42),M=e(44),b=e(120),O=e(50),P=e(94),A=e(96),j=e(102),R=e(86),L=e(143).iterateKeySet,I=e(92),N=e(103);t.exports=function(e,t,r,n,i){for(var o=e._root,a=o,s=o.expired,u=I(),c=o.cache,h=c[T],l=[],p=[],f=[],d=[],v=-1,m=t.length;++v<m;)for(var g=t[v],y=g.paths,_=g.jsonGraph,b=-1,x=y.length;++b<x;){var w=y[b];p.index=0,E(w,0,c,c,c,_,_,_,f,d,l,p,u,s,a,i,n)}var S=c[T],M=o.onChange;return A(M)&&h!==S&&M(),[f,d]}},{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(e,t,r){function M(e,t,r,n,i,o,a,s,u,c,h,l,p,f){var d=C(e);if(d&&d.length)for(var v=0,m=d.length,g=u.index;;){var y=d[v],_=e[y],b=j(_)&&!_.$type;s.depth=t;var x=E(r,n,i,y,_,b,!1,s,u,c,h,l,p,f);s[t]=y,s.index=t,u[u.index++]=y;var w=x[0],S=x[1];if(w&&(b?M(_,t+1,r,S,w,o,a,s,u,c,h,l,p,f):(A(l,w),o.push(s.slice(0,s.index+1)),a.push(u.slice(0,u.index)))),++v>=m)break;u.index=g}}function m(e,t,r,n,i,o,a,s,u,c){var h=r.value;if(i.splice(0,i.length),i.push.apply(i,h),S(r))return i.index=h.length,I(r,a,s),[void 0,t];A(s,r);var l=r,p=t;if(r=r[b],null!=r)p=r[T]||t,i.index=h.length;else{var f=0,d=h.length-1;p=r=t;do{var v=h[f],m=d>f,g=E(t,p,r,v,e,m,!0,n,i,o,a,s,u,c);if(r=g[0],L(r))return i.index=f,g;p=g[1]}while(f++<d);if(i.index=f,l[b]!==r){var y=r[w]||0;r[w]=y+1,r[_+y]=l,l[b]=r,l[x]=y}}return[r,p]}function E(e,t,r,n,i,o,a,s,u,c,h,l,p,f){for(var d=r.$type;d===y;){var v=m(i,e,r,s,u,c,h,l,p,f);if(r=v[0],L(r))return v;t=v[1],d=r&&r.$type}if(void 0!==d)return[r,t];if(null==n){if(o)throw new Error("`null` is not allowed in branch key positions.");r&&(n=r[g])}else t=r,r=t[n];return r=D(t,r,n,i,o,a,s,u,c,h,l,p,f),[r,t]}function C(e){if(j(e)&&!e.$type){var t=[],r=0;o(e)&&(t[r++]="length");for(var n in e)n[0]!==i&&"$"!==n[0]&&a(e,n)&&(t[r++]=n);return t}}var g=e(36),_=e(43),i=e(40),T=e(39),b=e(33),O=e(46),x=e(42),w=e(44),y=e(120),P=e(13),o=Array.isArray,A=e(50),a=e(91),j=e(100),S=e(95),R=e(96),L=e(102),I=e(86),N=e(92),D=e(104);t.exports=function(e,t,r,n,i){for(var o=e._root,a=o,s=o.expired,u=N(),c=e._path,h=o.cache,l=c.length?P(e,c).value:h,p=l[T]||h,f=h[O],d=[],v=[],m=[],g=c.length,y=-1,_=t.length;++y<_;){var b=t[y],x=c.slice(0);x.index=g,M(b.json,0,h,p,l,v,m,d,x,u,s,a,i,n)}var w=h[O],S=o.onChange;return R(S)&&f!==w&&S(),[v,m]}},{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(e,t,r){function C(e,t,r,n,i,o,a,s,u,c,h,l,p,f,d){for(var v={},m=r<t.length-1,g=t[r],y=L(g,v),_=c.index;;){u.depth=r;var b=S(n,i,o,y,e,m,!1,u,c,h,l,p,f,d);u[r]=y,u.index=r,c[c.index++]=y;var x=b[0],w=b[1];if(x&&(m?C(e,t,r+1,n,w,x,a,s,u,c,h,l,p,f,d):(M(p,x),a.push(u.slice(0,u.index+1)),s.push(c.slice(0,c.index)))),y=L(g,v),v.done)break;c.index=_}}function m(e,t,r,n,i,o,a,s,u,c){var h=r.value;if(i.splice(0,i.length),i.push.apply(i,h),E(r))return i.index=h.length,R(r,a,s),[void 0,t];M(s,r);var l=r,p=t;if(r=r[b],null!=r)p=r[T]||t,i.index=h.length;else{var f=0,d=h.length-1;p=r=t;do{var v=h[f],m=d>f,g=S(t,p,r,v,e,m,!0,n,i,o,a,s,u,c);if(r=g[0],j(r))return i.index=f,g;p=g[1]}while(f++<d);if(i.index=f,l[b]!==r){var y=r[w]||0;r[w]=y+1,r[_+y]=l,l[b]=r,l[x]=y}}return[r,p]}function S(e,t,r,n,i,o,a,s,u,c,h,l,p,f){for(var d=r.$type;d===y;){var v=m(i,e,r,s,u,c,h,l,p,f);if(r=v[0],j(r))return v;t=v[1],d=r.$type}if(void 0!==d)return[r,t];if(null==n){if(o)throw new Error("`null` is not allowed in branch key positions.");r&&(n=r[g])}else t=r,r=t[n];return r=N(t,r,n,i,o,a,s,u,c,h,l,p,f),[r,t]}var g=e(36),_=e(43),T=e(39),b=e(33),O=e(46),x=e(42),w=e(44),y=e(120),P=e(13),M=e(50),E=e(95),A=e(96),j=e(102),R=e(86),L=e(143).iterateKeySet,I=e(92),N=e(104);t.exports=function(e,t,r,n,i){for(var o=e._root,a=o,s=o.expired,u=I(),c=e._path,h=o.cache,l=c.length?P(e,c).value:h,p=l[T]||h,f=h[O],d=[],v=[],m=[],g=c.length,y=-1,_=t.length;++y<_;){var b=t[y],x=b.path,w=b.value,S=c.slice(0);S.index=g,C(w,x,0,h,p,l,v,m,d,S,u,s,a,i,n)}var M=h[O],E=o.onChange;return A(E)&&f!==M&&E(),[v,m]}},{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(e,t,r){var s=e(130),u=e(64),c=e(101);t.exports=function(e,t){for(var r=c(e)?e:s.pathValue(e,t),n=0,o=r.path,i=o.length;++n<i;)if("object"==typeof o[n])return new u(function(e){e.onError(new Error("Paths must be simple paths"))});var a=this;return new u(function(i){return a._set(r).subscribe(function(e){for(var t=e.json,r=-1,n=o.length;t&&++r<n;)t=t[o[r]];i.onNext(t)},function(e){i.onError(e)},function(){i.onCompleted()})})}},{101:101,130:130,64:64}],80:[function(e,t,r){var u=e(134),c=e(101),h=e(78);t.exports=function(e,t,r,n){var i=u.fromPath(e),o=t,a=r,s=n;if(c(i)?(s=a,a=o,o=i):o={path:i,value:o},c(o)===!1)throw new Error("Model#setValueSync must be called with an Array path.");return"function"!=typeof a&&(a=this._root._errorSelector),"function"!=typeof s&&(s=this._root._comparator),this._syncCheck("setValueSync")?(h(this,[o]),this._getValueSync(this,o.path).value):void 0}},{101:101,134:134,78:78}],81:[function(e,t,r){t.exports=function(e){if(!e)return e;for(var t=-1,r=e.length,n=[];++t<r;)n[t]=e[t];return n}},{}],82:[function(e,t,r){t.exports=function(e,t){for(var r=-1,n=-1,i=e.length,o=[];++n<i;)for(var a=t(e[n],n,e),s=-1,u=a.length;++s<u;)o[++r]=a[s];return o}},{}],83:[function(e,t,r){t.exports=function(e,t){for(var r=-1,n=e.length,i=new Array(n);++r<n;)i[r]=t(e[r],r,e);return i}},{}],84:[function(e,t,r){t.exports=function(e,t,r){var n=t||0,i=-1,o=e.length-n;0>o&&(o=0),r>0&&o>r&&(o=r);for(var a=new Array(o);++i<o;)a[i]=e[i+n];return a}},{}],85:[function(e,t,r){var i=e(40),o=e(91),a=Array.isArray,s=e(100);t.exports=function(e){var t=e;if(s(t)){t=a(e)?[]:{};var r=e;for(var n in r)n[0]!==i&&o(r,n)&&(t[n]=r[n])}return t}},{100:100,40:40,91:91}],86:[function(e,t,r){var n=e(51),i=e(35);t.exports=function(e,t,r){return e[i]||(e[i]=!0,t.push(e),n(r,e)),e}},{35:35,51:51}],87:[function(e,t,r){var n=e(100);t.exports=function(e){return n(e)&&e.$expires||void 0}},{100:100}],88:[function(e,t,r){var n=e(100);t.exports=function(e){return n(e)&&e.$size||0}},{100:100}],89:[function(e,t,r){var n=e(100);t.exports=function(e){return n(e)&&e.$timestamp||void 0}},{100:100}],90:[function(e,t,r){var n=e(100);t.exports=function(e,t){var r=n(e)&&e.$type||void 0;return t&&r?"branch":r}},{100:100}],91:[function(e,t,r){var n=e(100),i=Object.prototype.hasOwnProperty;t.exports=function(e,t){return n(e)&&i.call(e,t)}},{100:100}],92:[function(e,t,r){var n=1;t.exports=function(){return n++}},{}],93:[function(e,t,r){var i=e(36),o=e(39),a=e(46);t.exports=function(e,t,r,n){return e[i]=r,e[o]=t,e[a]=n,t[r]=e,e}},{36:36,39:39,46:46}],94:[function(e,t,r){var n=e(106),i=e(122),o=e(121);t.exports=function(e){var t=e.$expires;return null!=t&&t!==o&&t!==i&&t<n()}},{106:106,121:121,122:122}],95:[function(e,t,r){var n=e(106),i=e(122),o=e(121);t.exports=function(e){var t=e.$expires;return null!=t&&t!==o&&(t===i||t<n())}},{106:106,121:121,122:122}],96:[function(e,t,r){var n="function";t.exports=function(e){return Boolean(e)&&typeof e===n}},{}],97:[function(e,t,r){var n=e(40);t.exports=function(e){return"$size"===e||e&&e.charAt(0)===n}},{40:40}],98:[function(e,t,r){var n=e(100);t.exports=function(e){return n(e)&&"json"in e}},{100:100}],99:[function(e,t,r){var n=Array.isArray,i=e(100);t.exports=function(e){return i(e)&&n(e.paths)&&(i(e.jsonGraph)||i(e.jsong)||i(e.json)||i(e.values)||i(e.value))}},{100:100}],100:[function(e,t,r){var n="object";t.exports=function(e){return null!==e&&typeof e===n}},{}],101:[function(e,t,r){var n=Array.isArray,i=e(100);t.exports=function(e){return i(e)&&(n(e.path)||"string"==typeof e.path)}},{100:100}],102:[function(e,t,r){var n="object";t.exports=function(e){return null==e||typeof e!==n}},{}],103:[function(e,t,r){var _=e(36),b=e(39),x=e(120),w=e(119),S=e(88),M=e(89),E=e(100),C=e(95),T=e(96),O=e(50),P=e(117),A=e(93),j=e(86),R=e(110),L=e(115),I=e(107);t.exports=function(e,t,r,n,i,o,a,s,u,c,h){var l,p,f,d,v,m,g;if(t===r){if(null===r)return t=P(r,void 0,r),e=L(e,-t.$size,u,a),t=A(t,e,n),O(u,t),t;if(void 0===r)return r;if(d=E(t),d&&(p=t.$type,null==p))return null==t[b]&&(t[_]=n,t[b]=e),t}else d=E(t),d&&(p=t.$type);if(p!==x){if(v=E(r),v&&(f=r.$type),d&&!p&&(null==r||v&&!f))return t}else{if(null==r)return C(t)?void j(t,s,u):t;if(v=E(r),v&&(f=r.$type,f===x))if(t===r){if(null!=t[b])return t}else if(m=t.$timestamp,g=r.$timestamp,!C(t)&&!C(r)&&m>g)return}if(p&&v&&!f)return A(R(t,r,e,n,u),e,n);if(f||!v){if(f===w&&T(h)&&(r=h(I(i,n),r)),f&&t===r)null==t[b]&&(t=P(t,p,t.value),e=L(e,-t.$size,u,a),t=A(t,e,n,a));else{var y=!0;!p&&d||(y=M(r)<M(t)==!1,(p||f)&&T(c)&&(y=!c(t,r,o.slice(0,o.index)))),y&&(r=P(r,f,f?r.value:r),l=S(t)-S(r),t=R(t,r,e,n,u),e=L(e,l,u,a),t=A(t,e,n,a))}C(t)?j(t,s,u):O(u,t)}else null==t&&(t=A(r,e,n));return t}},{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(e,t,r){var y=e(120),_=e(119),b=e(90),x=e(88),w=e(89),S=e(95),M=e(102),E=e(96),C=e(117),T=e(86),O=e(93),P=e(110),A=e(115),j=e(114),R=e(107);t.exports=function(e,t,r,n,i,o,a,s,u,c,h,l,p){var f=b(t,o);if(i||o)f&&S(t)&&(f="expired",T(t,c,h)),(f&&f!==y||M(t))&&(t=P(t,{},e,r,h),t=O(t,e,r,u),t=j(t,u));else{var d=n,v=b(d),m=w(d)<w(t)==!1;if((f||v)&&E(l)&&(m=!l(t,d,s.slice(0,s.index))),m){v===_&&E(p)&&(d=p(R(a,r),d)),d=C(d,v,v?d.value:d);var g=x(t)-x(d);t=P(t,d,e,r,h),e=A(e,g,h,u),t=O(t,e,r,u)}}return t}},{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(e,t,r){t.exports=function(){}},{}],106:[function(e,t,r){t.exports=Date.now},{}],107:[function(e,t,r){t.exports=function(e,t){var r=e.slice(0,e.depth);return r[r.length]=t,r}},{}],108:[function(e,t,r){var o=e(120),a=e(39),s=e(51),u=e(100),c=e(112),h=e(113);t.exports=function(e,t,r,n){if(u(e)){var i=e.$type;return Boolean(i)&&(i===o&&h(e),s(n,e)),c(e),t[r]=e[a]=void 0,!0}return!1}},{100:100,112:112,113:113,120:120,39:39,51:51}],109:[function(e,t,r){var a=e(91),s=e(40),u=e(108);t.exports=function e(t,r,n,i){if(u(t,r,n,i)){if(null==t.$type)for(var o in t)o[0]!==s&&"$"!==o[0]&&a(t,o)&&e(t[o],t,o,i);return!0}return!1}},{108:108,40:40,91:91}],110:[function(e,t,r){var o=e(100),a=e(111),s=e(109);t.exports=function(e,t,r,n,i){return e===t?e:(o(e)&&(a(e,t),s(e,r,n,i)),r[n]=t,t)}},{100:100,109:109,111:111}],111:[function(e,t,r){var a=e(43),s=e(33),u=e(44);t.exports=function(e,t){for(var r=e[u]||0,n=t[u]||0,i=-1;++i<r;){var o=e[a+i];void 0!==o&&(o[s]=t,t[a+(n+i)]=o,e[a+i]=void 0)}return t[u]=r+n,e[u]=void 0,t}},{33:33,43:43,44:44}],112:[function(e,t,r){var i=e(43),o=e(33),a=e(42),s=e(44);t.exports=function(e){for(var t=-1,r=e[s]||0;++t<r;){var n=e[i+t];null!=n&&(n[o]=n[a]=e[i+t]=void 0)}return e[s]=void 0,e}},{33:33,42:42,43:43,44:44}],113:[function(e,t,r){var i=e(43),o=e(33),a=e(42),s=e(44);t.exports=function(e){var t=e[o];if(t){for(var r=(e[a]||0)-1,n=(t[s]||0)-1;++r<=n;)t[i+r]=t[i+(r+1)];t[s]=n,e[a]=e[o]=t=void 0}return e}},{33:33,42:42,43:43,44:44}],114:[function(e,t,r){var s=e(43),u=e(39),c=e(46),h=e(44);t.exports=function(e,t){var r=[e],n=0;do{var i=r[n--];if(i&&i[c]!==t){i[c]=t,r[n++]=i[u];for(var o=-1,a=i[h]||0;++o<a;)r[n++]=i[s+o]}}while(n>-1);return e}},{39:39,43:43,44:44,46:46}],115:[function(e,t,r){var s=e(36),u=e(46),c=e(39),h=e(108),l=e(114);t.exports=function(e,t,r,n){var i=e;do{var o=i[c],a=i.$size=(i.$size||0)-t;0>=a&&null!=o?h(i,o,i[s],r):i[u]!==n&&l(i,n),i=o}while(i);return e}},{108:108,114:114,36:36,39:39,46:46}],116:[function(e,t,r){var s=Array.isArray,u=e(101),c=e(99),h=e(98),l=e(134);t.exports=function(e,t,r){for(var n=0,i=e.length;i>n;++n){var o=e[n],a=!1;if(s(o)&&t.path?a=!0:"string"==typeof o&&t.pathSyntax?a=!0:u(o)&&t.pathValue?(o.path=l.fromPath(o.path),a=!0):c(o)&&t.jsonGraph?a=!0:h(o)&&t.json?a=!0:"function"==typeof o&&n+1===i&&t.selector&&(a=!0),!a)return new Error("Unrecognized argument "+typeof o+" ["+String(o)+"] to Model#"+r)}return!0}},{101:101,134:134,98:98,99:99}],117:[function(e,t,r){var n=e(130),s=n.atom,u=e(106),c=e(122),h=e(37),l=50,p=e(85),f=Array.isArray,d=e(88),v=e(87);t.exports=function(e,t,r){var n=0,i=e,o=t;if(o?(i=p(i),n=d(i),i.$type=o):(i=s(r),o=i.$type,i[h]=!0),null==r)n=l+1;else if(null==n||0>=n)switch(typeof r){case"object":n=f(r)?l+r.length:l+1;break;case"string":n=l+r.length;break;default:n=l+1}var a=v(i);return"number"==typeof a&&c>a&&(i.$expires=u()+-1*a),i.$size=n,i}},{106:106,122:122,130:130,37:37,85:85,87:87,88:88}],118:[function(e,t,r){t.exports="atom"},{}],119:[function(e,t,r){t.exports="error"},{}],120:[function(e,t,r){t.exports="ref"},{}],121:[function(e,t,r){t.exports=1},{}],122:[function(e,t,r){t.exports=0},{}],123:[function(e,t,r){"use strict";function n(){if(u.length)throw u.shift()}function i(e){var t;t=s.length?s.pop():new o,t.task=e,a(t)}function o(){this.task=null}var a=e(124),s=[],u=[],c=a.makeRequestCallFromTimer(n);t.exports=i,o.prototype.call=function(){try{this.task.call()}catch(e){i.onerror?i.onerror(e):(u.push(e),c())}finally{this.task=null,s[s.length]=this}}},{124:124}],124:[function(e,l,t){(function(e){"use strict";function t(e){a.length||(o(),s=!0),a[a.length]=e}function r(){for(;u<a.length;){var e=u;if(u+=1,a[e].call(),u>c){for(var t=0,r=a.length-u;r>t;t++)a[t]=a[t+u];a.length-=u,u=0}}a.length=0,u=0,s=!1}function n(e){var t=1,r=new h(e),n=document.createTextNode("");return r.observe(n,{characterData:!0}),function(){t=-t,n.data=t}}function i(n){return function(){function e(){clearTimeout(t),clearInterval(r),n()}var t=setTimeout(e,0),r=setInterval(e,50)}}l.exports=t;var o,a=[],s=!1,u=0,c=1024,h=e.MutationObserver||e.WebKitMutationObserver;o="function"==typeof h?n(r):i(r),t.requestFlush=o,t.makeRequestCallFromTimer=i}).call(this,"undefined"!=typeof n?n:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],125:[function(e,t,r){"use strict";function c(e,t){var r;for(r in t)e[r]=t[r];return e}function n(e,t){if(this._jsongUrl=e,"number"==typeof t){var r={timeout:t};t=r}this._config=c({timeout:15e3,headers:{}},t||{})}var h=e(129),i=e(126);Array.isArray;n.prototype={constructor:n,buildQueryObject:i,get:function(e){var t="GET",r=this.buildQueryObject(this._jsongUrl,t,{paths:e,method:"get"}),n=c(r,this._config),i=this;return h(t,n,i)},set:function(e){var t="POST",r=this.buildQueryObject(this._jsongUrl,t,{jsonGraph:e,method:"set"}),n=c(r,this._config);n.headers["Content-Type"]="application/x-www-form-urlencoded";var i=this;return h(t,n,i)},call:function(e,t,r,n){t=t||[],r=r||[],n=n||[];var i="POST",o=[];o.push("method=call"),o.push("callPath="+encodeURIComponent(JSON.stringify(e))),o.push("arguments="+encodeURIComponent(JSON.stringify(t))),o.push("pathSuffixes="+encodeURIComponent(JSON.stringify(r))),o.push("paths="+encodeURIComponent(JSON.stringify(n)));var a=this.buildQueryObject(this._jsongUrl,i,o.join("&")),s=c(a,this._config);s.headers["Content-Type"]="application/x-www-form-urlencoded";var u=this;return h(i,s,u)}},n.XMLHttpSource=n,n["default"]=n,t.exports=n},{126:126,129:129}],126:[function(e,t,r){"use strict";t.exports=function(e,t,r){var n,i=[],o={url:e},a=-1!==e.indexOf("?"),s=a?"&":"?";return"string"==typeof r?i.push(r):(n=Object.keys(r),n.forEach(function(e){var t="object"==typeof r[e]?JSON.stringify(r[e]):r[e];i.push(e+"="+encodeURIComponent(t))})),"GET"===t?o.url+=s+i.join("&"):o.data=i.join("&"),o}},{}],127:[function(e,r,t){(function(t){"use strict";r.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 n?n:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],128:[function(e,t,r){(function(n){"use strict";t.exports=function(){var e,t,r;if(n.XMLHttpRequest)return new n.XMLHttpRequest;try{for(t=["Msxml2.XMLHTTP","Microsoft.XMLHTTP","Msxml2.XMLHTTP.4.0"],r=0;3>r;r++)try{if(e=t[r],new n.ActiveXObject(e))break}catch(e){}return new n.ActiveXObject(e)}catch(e){throw new Error("XMLHttpRequest is not supported by your browser")}}}).call(this,"undefined"!=typeof n?n:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],129:[function(e,t,r){"use strict";function n(){}function i(s,u,c){return n.create(function(t){var r,n,e,i,o,a={method:s||"GET",crossDomain:!1,async:!0,headers:{},responseType:"json"};for(o in u)d.call(u,o)&&(a[o]=u[o]);a.crossDomain||a.headers["X-Requested-With"]||(a.headers["X-Requested-With"]="XMLHttpRequest"),null!=c.onBeforeRequest&&c.onBeforeRequest(a);try{r=a.crossDomain?f():p()}catch(e){t.onError(e)}try{a.user?r.open(a.method,a.url,a.async,a.user,a.password):r.open(a.method,a.url,a.async),r.timeout=a.timeout,r.withCredentials=a.withCredentials!==!1,e=a.headers;for(i in e)d.call(e,i)&&r.setRequestHeader(i,e[i]);if(a.responseType)try{r.responseType=a.responseType}catch(e){if("json"!==a.responseType)throw e}r.onreadystatechange=function(e){4===r.readyState&&(n||(n=!0,h(t,r,e)))},r.ontimeout=function(e){n||(n=!0,l(t,r,"timeout error",e))},r.send(a.data)}catch(e){t.onError(e)}return function(){n||4===r.readyState||(n=!0,r.abort())}})}function a(e,t,r){r||(r=new Error(t)),e.onError(r)}function h(e,t,r){var n,i;if(t&&e){i=t.responseType,n="response"in t?t.response:t.responseText;var o=1223===t.status?204:t.status;if(o>=200&&399>=o){try{"json"!==i&&(n=JSON.parse(n||"")),"string"==typeof n&&(n=JSON.parse(n||""))}catch(r){a(e,"invalid json",r)}return e.onNext(n),void e.onCompleted()}return 401===o||403===o||407===o?a(e,n):410===o?a(e,n):408===o||504===o?a(e,n):a(e,n||"Response code "+o)}}function l(e,t,r,n){a(e,r||t.statusText||"request error",n)}var p=e(128),f=e(127),d=Object.prototype.hasOwnProperty,s=function(){};n.create=function(o){var e=new n;return e.subscribe=function(e,t,r){var n,i;return n="function"==typeof e?{onNext:e,onError:t||s,onCompleted:r||s}:e,i=o(n),"function"==typeof i?{dispose:i}:i},e},t.exports=i},{127:127,128:128}],130:[function(e,t,r){function n(e,t,r){var n=Object.create(null);if(null!=r){for(var i in r)n[i]=r[i];return n.$type=e,n.value=t,n}return{$type:e,value:t}}var i=e(134);t.exports={ref:function(e,t){return n("ref",i.fromPath(e),t)},atom:function(e,t){return n("atom",e,t)},undefined:function(){return n("atom")},error:function(e,t){return n("error",e,t)},pathValue:function(e,t){return{path:i.fromPath(e),value:t}},pathInvalidation:function(e){return{path:i.fromPath(e),invalidated:!0}}}},{134:134}],131:[function(e,t,r){t.exports={integers:"integers",ranges:"ranges",keys:"keys"}},{}],132:[function(e,t,r){var n={token:"token",dotSeparator:".",commaSeparator:",",openingBracket:"[",closingBracket:"]",openingBrace:"{",closingBrace:"}",escape:"\\",space:" ",colon:":",quote:"quote",unknown:"unknown"};t.exports=n},{}],133:[function(e,t,r){t.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(e,t,r){if(r)throw e+" -- "+t.parseString+" with next token: "+r;throw e+" -- "+t.parseString}}},{}],134:[function(e,t,r){var n=e(140),i=e(135),o=e(131),a=function(e,t){return i(new n(e,t))};t.exports=a,a.fromPathsOrPathValues=function(e,t){if(!e)return[];for(var r=[],n=0,i=e.length;i>n;n++)"string"==typeof e[n]?r[n]=a(e[n],t):"string"==typeof e[n].path?r[n]={path:a(e[n].path,t),value:e[n].value}:r[n]=e[n];return r},a.fromPath=function(e,t){return e?"string"==typeof e?a(e,t):e:[]},a.RoutedTokens=o},{131:131,135:135,140:140}],135:[function(e,t,r){var o=e(132),a=e(133),s=e(136);t.exports=function(e){for(var t=e.next(),r={},n=[];!t.done;){switch(t.type){case o.token:var i=+t.token[0];isNaN(i)||a.throwError(a.invalidIdentifier,e),n[n.length]=t.token;break;case o.dotSeparator:0===n.length&&a.throwError(a.unexpectedToken,e);break;case o.space:break;case o.openingBracket:s(e,t,r,n);break;default:a.throwError(a.unexpectedToken,e)}t=e.next()}return 0===n.length&&a.throwError(a.invalidPath,e),n}},{132:132,133:133,136:136}],136:[function(e,t,r){var c=e(132),h=e(133),l=h.indexer,p=e(138),f=e(137),d=e(139);t.exports=function(e,t,r,n){var i=e.next(),o=!1,a=1,s=!1;for(r.indexer=[];!i.done;){switch(i.type){case c.token:case c.quote:r.indexer.length===a&&h.throwError(l.requiresComma,e)}switch(i.type){case c.openingBrace:s=!0,d(e,i,r,n);break;case c.token:var u=+i.token;isNaN(u)&&h.throwError(l.needQuotes,e),r.indexer[r.indexer.length]=u;break;case c.dotSeparator:r.indexer.length||h.throwError(l.leadingDot,e),p(e,i,r,n);break;case c.space:break;case c.closingBracket:o=!0;break;case c.quote:f(e,i,r,n);break;case c.openingBracket:h.throwError(l.nested,e);break;case c.commaSeparator:++a;break;default:h.throwError(h.unexpectedToken,e)}if(o)break;i=e.next()}0===r.indexer.length&&h.throwError(l.empty,e),r.indexer.length>1&&s&&h.throwError(l.routedTokens,e),1===r.indexer.length&&(r.indexer=r.indexer[0]),n[n.length]=r.indexer,r.indexer=void 0}},{132:132,133:133,137:137,138:138,139:139}],137:[function(e,t,r){var c=e(132),h=e(133),l=h.quote;t.exports=function(e,t,r,n){for(var i=e.next(),o="",a=t.token,s=!1,u=!1;!i.done;){switch(i.type){case c.token:case c.space:case c.dotSeparator:case c.commaSeparator:case c.openingBracket:case c.closingBracket:case c.openingBrace:case c.closingBrace:s&&h.throwError(l.illegalEscape,e),o+=i.token;break;case c.quote:s?(o+=i.token,s=!1):i.token!==a?o+=i.token:u=!0;break;case c.escape:s=!0;break;default:h.throwError(h.unexpectedToken,e)}if(u)break;i=e.next()}0===o.length&&h.throwError(l.empty,e),r.indexer[r.indexer.length]=o}},{132:132,133:133}],138:[function(e,t,r){var l=e(140),p=e(132),f=e(133);t.exports=function(e,t,r,n){var i,o=e.peek(),a=1,s=!1,u=!0,c=r.indexer.length-1,h=l.toNumber(r.indexer[c]);for(isNaN(h)&&f.throwError(f.range.precedingNaN,e);!s&&!o.done;){switch(o.type){case p.dotSeparator:3===a&&f.throwError(f.unexpectedToken,e),++a,3===a&&(u=!1);break;case p.token:i=l.toNumber(e.next().token),isNaN(i)&&f.throwError(f.range.suceedingNaN,e),s=!0;break;default:s=!0}if(s)break;e.next(),o=e.peek()}r.indexer[c]={from:h,to:u?i:i-1}}},{132:132,133:133,140:140}],139:[function(e,t,r){var c=e(132),h=e(131),l=e(133),p=l.routed;t.exports=function(e,t,r,n){var i=e.next(),o=!1,a="";switch(i.token){case h.integers:case h.ranges:case h.keys:break;default:l.throwError(p.invalid,e)}var s=e.next();if(s.type===c.colon&&(o=!0,s=e.next(),s.type!==c.token&&l.throwError(p.invalid,e),a=s.token,s=e.next()),s.type===c.closingBrace){var u={type:i.token,named:o,name:a};r.indexer[r.indexer.length]=u}else l.throwError(p.invalid,e)}},{131:131,132:132,133:133}],140:[function(e,t,r){function c(e,t,r){return{token:e,done:r,type:t}}function n(e,t,r){var n,i=!1,o="",a=r?S:w;do{if(n=t+1>=e.length)break;var s=e[t+1];if(void 0===s||-1!==a.indexOf(s)){if(o.length)break;++t;var u;switch(s){case l:u=h.dotSeparator;break;case p:u=h.commaSeparator;break;case f:u=h.openingBracket;break;case d:u=h.closingBracket;break;case v:u=h.openingBrace;break;case m:u=h.closingBrace;break;case x:u=h.space;break;case _:case b:u=h.quote;break;case y:u=h.escape;break;case g:u=h.colon;break;default:u=h.unknown}i=c(s,u,!1);break}o+=s,++t}while(!n);return!i&&o.length&&(i=c(o,h.token,!1)),i||(i={done:!0}),{token:i,idx:t}}var h=e(132),l=".",p=",",f="[",d="]",v="{",m="}",g=":",y="\\",_='"',b="'",x=" ",w="\\'\"[]., ",S="\\{}'\"[]., :",i=t.exports=function(e,t){this._string=e,this._idx=-1,this._extended=t,this.parseString=""};i.prototype={next:function(){var e=this._nextToken?this._nextToken:n(this._string,this._idx,this._extended);return this._idx=e.idx,this._nextToken=!1,this.parseString+=e.token.token,e.token},peek:function(){var e=this._nextToken?this._nextToken:n(this._string,this._idx,this._extended);return this._nextToken=e,e.token}},i.toNumber=function(e){return isNaN(+e)?NaN:+e}},{132:132}],141:[function(e,t,r){var n=e(147),i=e(148);t.exports=function(e){var t=e.reduce(function(e,t){var r=t.length;return e[r]||(e[r]=[]),e[r].push(t),e},{});return Object.keys(t).forEach(function(e){t[e]=i(t[e])}),n(t)}},{147:147,148:148}],142:[function(e,t,r){var p=e(144);t.exports=function e(t,r,n){for(var i=t,o=!0;o&&n<r.length;++n){var a=r[n],s=typeof a;if(a&&"object"===s){var u={},c=p(a,u),h=n+1;do{var l=i[c];o=void 0!==l,o&&(o=e(l,r,h)),c=p(a,u)}while(o&&!u.done);break}i=i[a],o=void 0!==i}return o}},{144:144}],143:[function(e,t,r){t.exports={iterateKeySet:e(144),toTree:e(148),toTreeWithUnion:e(149),pathsComplementFromTree:e(146),pathsComplementFromLengthTree:e(145),hasIntersection:e(142),toPaths:e(147),collapse:e(141)}},{141:141,142:142,144:144,145:145,146:146,147:147,148:148,149:149}],144:[function(e,t,r){function s(e,t){var r=t.from=e.from||0,n=t.to=e.to||"number"==typeof e.length&&t.from+e.length-1||0;t.rangeOffset=t.from,t.loaded=!0,r>n&&(t.empty=!0)}function u(e,t){t.done=!1;var r=t.isObject=!(!e||"object"!=typeof e);t.isArray=r&&n(e),t.arrayOffset=0}var n=Array.isArray;t.exports=function(e,t){if(void 0===t.isArray&&u(e,t),t.isArray){var r;do{t.loaded&&t.rangeOffset>t.to&&(++t.arrayOffset,t.loaded=!1);var n=t.arrayOffset,i=e.length;if(n>=i){t.done=!0;break}var o=e[t.arrayOffset],a=typeof o;if("object"===a){if(t.loaded||s(o,t),t.empty)continue;r=t.rangeOffset++}else++t.arrayOffset,r=o}while(void 0===r);return r}return t.isObject?(t.loaded||s(e,t),t.rangeOffset>t.to?void(t.done=!0):t.rangeOffset++):(t.done=!0,e)}},{}],145:[function(e,t,r){var s=e(142);t.exports=function(e,t){for(var r=[],n=-1,i=0,o=e.length;o>i;++i){var a=e[i];s(t[a.length],a,0)||(r[++n]=a)}return r}},{142:142}],146:[function(e,t,r){var a=e(142);t.exports=function(e,t){for(var r=[],n=-1,i=0,o=e.length;o>i;++i)a(t,e[i],0)||(r[++n]=e[i]);return r}},{142:142}],147:[function(e,t,r){function u(e){return null!==e&&typeof e===n}function M(e,t,r){var n,i,o,a,s,u,c,h,l,p,f,d,v,m,g=C(String(t)),y=Object.create(null),_=[],b=-1,x=0,w=[],S=0;if(a=[],s=-1,r-1>t){for(u=E(e,a);++s<u;)n=a[s],i=M(e[n],t+1,r),o=i.code,y[o]?i=y[o]:(_[x++]=o,i=y[o]={keys:[],sets:i.sets}),g=C(g+n+o),T(n)&&i.keys.push(parseInt(n,10))||i.keys.push(n);for(;++b<x;)if(n=_[b],i=y[n],a=i.keys,u=a.length,u>0)for(c=i.sets,h=-1,l=c.length,v=a[0];++h<l;){for(p=c[h],f=-1,d=p.length,m=new Array(d+1),m[0]=u>1&&a||v;++f<d;)m[f+1]=p[f];w[S++]=m}}else for(u=E(e,a),u>1?w[S++]=[a]:w[S++]=a;++s<u;)g=C(g+a[s]);return{code:g,sets:w}}function c(e){for(var t=-1,r=e.length;++t<r;){var n=e[t];o(n)&&(e[t]=i(n))}return e}function i(e){for(var t=-1,r=e.length-1,n=r>0;++t<=r;){var i=e[t];if(!T(i)){n=!1;break}e[t]=parseInt(i,10)}if(n===!0){e.sort(s);var o=e[0],a=e[r];if(r>=a-o)return{from:o,to:a}}return e}function s(e,t){return e-t}function E(e,t,r){var n=0;for(var i in e)t[n++]=i;return n>1&&t.sort(r),n}function C(e){for(var t=5381,r=-1,n=e.length;++r<n;)t=(t<<5)+t+e.charCodeAt(r);return String(t)}function T(e){return!o(e)&&e-parseFloat(e)+1>=0}var o=Array.isArray,n="object";t.exports=function(e){var t,r=[],n=0;for(var i in e)if(T(i)&&u(t=e[i]))for(var o=M(t,0,parseInt(i,10)).sets,a=-1,s=o.length;++a<s;)r[n++]=c(o[a]);return r}},{}],148:[function(e,t,r){function u(e,t,r){var n,i=t[r],o={},a=r+1;n=c(i,o);do{var s=e[n];s||(a===t.length?e[n]=null:s=e[n]={}),a<t.length&&u(s,t,a),o.done||(n=c(i,o))}while(!o.done)}var c=e(144);Array.isArray;t.exports=function(e){return e.reduce(function(e,t){return u(e,t,0),e},{})}},{144:144}],149:[function(e,t,r){},{}],150:[function(e,t,r){function n(){h=!1,s.length?c=s.concat(c):l=-1,c.length&&i()}function i(){if(!h){var e=setTimeout(n);h=!0;for(var t=c.length;t;){for(s=c,c=[];++l<t;)s&&s[l].run();l=-1,t=c.length}s=null,h=!1,clearTimeout(e)}}function o(e,t){this.fun=e,this.array=t}function a(){}var s,u=t.exports={},c=[],h=!1,l=-1;u.nextTick=function(e){var t=new Array(arguments.length-1);if(arguments.length>1)for(var r=1;r<arguments.length;r++)t[r-1]=arguments[r];c.push(new o(e,t)),1!==c.length||h||setTimeout(i,0)},o.prototype.run=function(){this.fun.apply(null,this.array)},u.title="browser",u.browser=!0,u.env={},u.argv=[],u.version="",u.versions={},u.on=a,u.addListener=a,u.once=a,u.off=a,u.removeListener=a,u.removeAllListeners=a,u.emit=a,u.binding=function(e){throw new Error("process.binding is not supported")},u.cwd=function(){return"/"},u.chdir=function(e){throw new Error("process.chdir is not supported")},u.umask=function(){return 0}},{}],151:[function(e,t,r){"use strict";t.exports=e(156)},{156:156}],152:[function(e,t,r){"use strict";function a(){}function n(e){try{return e.then}catch(e){return m=e,g}}function i(e,t){try{return e(t)}catch(e){return m=e,g}}function o(e,t,r){try{e(t,r)}catch(e){return m=e,g}}function s(e){if("object"!=typeof this)throw new TypeError("Promises must be constructed via new");if("function"!=typeof e)throw new TypeError("not a function");this._37=0,this._12=null,this._59=[],e!==a&&d(e,this)}function u(n,i,o){return new n.constructor(function(e,t){var r=new s(a);r.then(e,t),c(n,new f(i,o,r))})}function c(r,n){for(;3===r._37;)r=r._12;return 0===r._37?void r._59.push(n):void v(function(){var e=1===r._37?n.onFulfilled:n.onRejected;if(null===e)return void(1===r._37?h(n.promise,r._12):l(n.promise,r._12));var t=i(e,r._12);t===g?l(n.promise,m):h(n.promise,t)})}function h(e,t){if(t===e)return l(e,new TypeError("A promise cannot be resolved with itself."));if(t&&("object"==typeof t||"function"==typeof t)){var r=n(t);if(r===g)return l(e,m);if(r===e.then&&t instanceof s)return e._37=3,e._12=t,void p(e);if("function"==typeof r)return void d(r.bind(t),e)}e._37=1,e._12=t,p(e)}function l(e,t){e._37=2,e._12=t,p(e)}function p(e){for(var t=0;t<e._59.length;t++)c(e,e._59[t]);e._59=null}function f(e,t,r){this.onFulfilled="function"==typeof e?e:null,this.onRejected="function"==typeof t?t:null,this.promise=r}function d(e,t){var r=!1,n=o(e,function(e){r||(r=!0,h(t,e))},function(e){r||(r=!0,l(t,e))});r||n!==g||(r=!0,l(t,m))}var v=e(124),m=null,g={};t.exports=s,s._99=a,s.prototype.then=function(e,t){if(this.constructor!==s)return u(this,e,t);var r=new s(a);return c(this,new f(e,t,r)),r}},{124:124}],153:[function(e,t,r){"use strict";var n=e(152);t.exports=n,n.prototype.done=function(e,t){var r=arguments.length?this.then.apply(this,arguments):this;r.then(null,function(e){setTimeout(function(){throw e},0)})}},{152:152}],154:[function(e,t,r){"use strict";function n(e){var t=new c(c._99);return t._37=1,t._12=e,t}var c=e(152);t.exports=c;var i=n(!0),o=n(!1),a=n(null),s=n(void 0),u=n(0),h=n("");c.resolve=function(e){if(e instanceof c)return e;if(null===e)return a;if(void 0===e)return s;if(e===!0)return i;if(e===!1)return o;if(0===e)return u;if(""===e)return h;if("object"==typeof e||"function"==typeof e)try{var t=e.then;if("function"==typeof t)return new c(t.bind(e))}catch(r){return new c(function(e,t){t(r)})}return n(e)},c.all=function(e){var u=Array.prototype.slice.call(e);return new c(function(i,o){function a(t,e){if(e&&("object"==typeof e||"function"==typeof e)){if(e instanceof c&&e.then===c.prototype.then){for(;3===e._37;)e=e._12;return 1===e._37?a(t,e._12):(2===e._37&&o(e._12),void e.then(function(e){a(t,e)},o))}var r=e.then;if("function"==typeof r){var n=new c(r.bind(e));return void n.then(function(e){a(t,e)},o)}}u[t]=e,0===--s&&i(u)}if(0===u.length)return i([]);for(var s=u.length,e=0;e<u.length;e++)a(e,u[e])})},c.reject=function(r){return new c(function(e,t){t(r)})},c.race=function(e){return new c(function(t,r){e.forEach(function(e){c.resolve(e).then(t,r)})})},c.prototype["catch"]=function(e){return this.then(null,e)}},{152:152}],155:[function(e,t,r){"use strict";var n=e(152);t.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(e,t,r){"use strict";t.exports=e(152),e(153),e(155),e(154),e(157)},{152:152,153:153,154:154,155:155,157:157}],157:[function(e,t,r){"use strict";var a=e(152),i=e(123);t.exports=a,a.denodeify=function(o,e){return e=e||1/0,function(){var t=this,i=Array.prototype.slice.call(arguments,0,e>0?e:0);return new a(function(r,n){i.push(function(e,t){e?n(e):r(t)});var e=o.apply(t,i);!e||"object"!=typeof e&&"function"!=typeof e||"function"!=typeof e.then||r(e)})}},a.nodeify=function(r){return function(){var e=Array.prototype.slice.call(arguments),t="function"==typeof e[e.length-1]?e.pop():null,n=this;try{return r.apply(this,arguments).nodeify(t,n)}catch(r){if(null===t||"undefined"==typeof t)return new a(function(e,t){t(r)});i(function(){t.call(n,r)})}}},a.prototype.nodeify=function(t,r){return"function"!=typeof t?this:void this.then(function(e){i(function(){t.call(r,null,e)})},function(e){i(function(){t.call(r,e)})})}},{123:123,152:152}],158:[function(s,u,c){(function(a){(function(r){var e={boolean:!1,function:!0,object:!0,number:!1,string:!1,undefined:!1},n=e[typeof window]&&window||this,t=e[typeof c]&&c&&!c.nodeType&&c,i=e[typeof u]&&u&&!u.nodeType&&u,o=(i&&i.exports===t&&t,e[typeof a]&&a);!o||o.global!==o&&o.window!==o||(n=o),"function"==typeof Dr&&Dr.amd?Dr(["rx"],function(e,t){return r(n,t,e)}):"object"==typeof u&&u&&u.exports===t?u.exports=r(n,u.exports,s(159)):n.Rx=r(n,{},n.Rx)}).call(this,function(s,e,t,u){function r(){try{return f.apply(this,arguments)}catch(e){return N.e=e,N}}function n(e){if(!M(e))throw new TypeError("fn must be a function");return f=e,r}function i(e,s,u){return new g(function(n){var i=!1,o=null,a=[];return e.subscribe(function(e){var t,r;try{r=s(e)}catch(e){return void n.onError(e)}if(t=0,i)try{t=u(r,o)}catch(e){return void n.onError(e)}else i=!0,o=r;t>0&&(o=r,a=[]),t>=0&&a.push(e)},function(e){n.onError(e)},function(){n.onNext(a),n.onCompleted()})},e)}function o(e){if(0===e.length)throw new R;return e[0]}function a(e,n,i,o){if(0>n)throw new I;return new g(function(t){var r=n;return e.subscribe(function(e){0===r--&&(t.onNext(e),t.onCompleted())},function(e){t.onError(e)},function(){i?(t.onNext(o),t.onCompleted()):t.onError(new I)})},e)}function c(e,i,o){return new g(function(t){var r=o,n=!1;return e.subscribe(function(e){n?t.onError(new Error("Sequence contains more than one element")):(r=e,n=!0)},function(e){t.onError(e)},function(){n||i?(t.onNext(r),t.onCompleted()):t.onError(new R)})},e)}function h(e,r,n){return new g(function(t){return e.subscribe(function(e){t.onNext(e),t.onCompleted()},function(e){t.onError(e)},function(){r?(t.onNext(n),t.onCompleted()):t.onError(new R)})},e)}function l(e,i,o){return new g(function(t){var r=o,n=!1;return e.subscribe(function(e){r=e,n=!0},function(e){t.onError(e)},function(){n||i?(t.onNext(r),t.onCompleted()):t.onError(new R)})},e)}function p(i,e,t,o){var a=j(e,t,3);return new g(function(r){var n=0;return i.subscribe(function(e){var t;try{t=a(e,n,i)}catch(e){return void r.onError(e)}t?(r.onNext(o?n:e),r.onCompleted()):n++},function(e){r.onError(e)},function(){r.onNext(o?-1:u),r.onCompleted()})},i)}var f,d=t.Observable,v=d.prototype,m=t.CompositeDisposable,g=t.AnonymousObservable,y=t.Disposable.empty,_=(t.internals.isEqual,t.helpers),b=_.not,x=_.defaultComparer,w=_.identity,S=_.defaultSubComparer,M=_.isFunction,E=_.isPromise,C=_.isArrayLike,T=_.isIterable,O=t.internals.inherits,P=d.fromPromise,A=d.from,j=t.internals.bindCallback,R=t.EmptyError,L=t.ObservableBase,I=t.ArgumentOutOfRangeError,N={e:{}};v.aggregate=function(){var o,a,s=!1,e=this;return 2===arguments.length?(s=!0,a=arguments[0],o=arguments[1]):o=arguments[0],new g(function(t){var r,n,i;return e.subscribe(function(e){!i&&(i=!0);try{r?n=o(n,e):(n=s?o(a,e):e,r=!0)}catch(e){return t.onError(e)}},function(e){t.onError(e)},function(){i&&t.onNext(n),!i&&s&&t.onNext(a),!i&&!s&&t.onError(new R),t.onCompleted()})},e)};var D=function(i){function e(e,t,r,n){this.source=e,this.acc=t,this.hasSeed=r,this.seed=n,i.call(this)}function t(e,t){this.o=e,this.acc=t.acc,this.hasSeed=t.hasSeed,this.seed=t.seed,this.hasAccumulation=!1,this.result=null,this.hasValue=!1,this.isStopped=!1}return O(e,i),e.prototype.subscribeCore=function(e){return this.source.subscribe(new t(e,this))},t.prototype.onNext=function(e){this.isStopped||(!this.hasValue&&(this.hasValue=!0),this.hasAccumulation?this.result=n(this.acc)(this.result,e):(this.result=this.hasSeed?n(this.acc)(this.seed,e):e,this.hasAccumulation=!0),this.result===N&&this.o.onError(this.result.e))},t.prototype.onError=function(e){this.isStopped||(this.isStopped=!0,this.o.onError(e))},t.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())},t.prototype.dispose=function(){this.isStopped=!0},t.prototype.fail=function(e){return this.isStopped?!1:(this.isStopped=!0,this.o.onError(e),!0)},e}(L);return v.reduce=function(e){var t=!1;if(2===arguments.length){t=!0;var r=arguments[1]}return new D(this,e,t,r)},v.some=function(e,t){var r=this;return e?r.filter(e,t).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)},v.any=function(){return this.some.apply(this,arguments)},v.isEmpty=function(){return this.any().map(b)},v.every=function(t,e){return this.filter(function(e){return!t(e)},e).some().map(b)},v.all=function(){return this.every.apply(this,arguments)},v.includes=function(i,e){function o(e,t){return 0===e&&0===t||e===t||isNaN(e)&&isNaN(t)}var a=this;return new g(function(t){var r=0,n=+e||0;return Math.abs(n)===1/0&&(n=0),0>n?(t.onNext(!1),t.onCompleted(),y):a.subscribe(function(e){r++>=n&&o(e,i)&&(t.onNext(!0),t.onCompleted())},function(e){t.onError(e)},function(){t.onNext(!1),t.onCompleted()})},this)},v.contains=function(e,t){v.includes(e,t)},v.count=function(e,t){return e?this.filter(e,t).count():this.reduce(function(e){return e+1},0)},v.indexOf=function(i,e){var o=this;return new g(function(t){var r=0,n=+e||0;return Math.abs(n)===1/0&&(n=0),0>n?(t.onNext(-1),t.onCompleted(),y):o.subscribe(function(e){r>=n&&e===i&&(t.onNext(r),t.onCompleted()),r++},function(e){t.onError(e)},function(){t.onNext(-1),t.onCompleted()})},o)},v.sum=function(e,t){return e&&M(e)?this.map(e,t).sum():this.reduce(function(e,t){return e+t},0)},v.minBy=function(e,r){return r||(r=S),i(this,e,function(e,t){return-1*r(e,t)})},v.min=function(e){return this.minBy(w,e).map(function(e){return o(e)})},v.maxBy=function(e,t){return t||(t=S),i(this,e,t)},v.max=function(e){return this.maxBy(w,e).map(function(e){return o(e)})},v.average=function(e,t){return e&&M(e)?this.map(e,t).average():this.reduce(function(e,t){return{sum:e.sum+t,count:e.count+1}},{sum:0,count:0}).map(function(e){if(0===e.count)throw new R;return e.sum/e.count})},v.sequenceEqual=function(r,u){var c=this;return u||(u=x),new g(function(n){var i=!1,o=!1,a=[],s=[],e=c.subscribe(function(e){var t,r;if(s.length>0){r=s.shift();try{t=u(r,e)}catch(e){return void n.onError(e)}t||(n.onNext(!1),n.onCompleted())}else o?(n.onNext(!1),n.onCompleted()):a.push(e)},function(e){n.onError(e)},function(){i=!0,0===a.length&&(s.length>0?(n.onNext(!1),n.onCompleted()):o&&(n.onNext(!0),n.onCompleted()))});(C(r)||T(r))&&(r=A(r)),E(r)&&(r=P(r));var t=r.subscribe(function(e){var t;if(a.length>0){var r=a.shift();try{t=u(r,e)}catch(e){return void n.onError(e)}t||(n.onNext(!1),n.onCompleted())}else i?(n.onNext(!1),n.onCompleted()):s.push(e)},function(e){n.onError(e)},function(){o=!0,0===s.length&&(a.length>0?(n.onNext(!1),n.onCompleted()):i&&(n.onNext(!0),n.onCompleted()))});return new m(e,t)},c)},v.elementAt=function(e){return a(this,e,!1)},v.elementAtOrDefault=function(e,t){return a(this,e,!0,t)},v.single=function(e,t){return e&&M(e)?this.where(e,t).single():c(this,!1)},v.singleOrDefault=function(e,t,r){return e&&M(e)?this.filter(e,r).singleOrDefault(null,t):c(this,!0,t)},v.first=function(e,t){return e?this.where(e,t).first():h(this,!1)},v.firstOrDefault=function(e,t,r){return e?this.where(e).firstOrDefault(null,t):h(this,!0,t)},v.last=function(e,t){return e?this.where(e,t).last():l(this,!1)},v.lastOrDefault=function(e,t,r){return e?this.where(e,r).lastOrDefault(null,t):l(this,!0,t)},v.find=function(e,t){return p(this,e,t,!1)},v.findIndex=function(e,t){return p(this,e,t,!0)},v.toSet=function(){if("undefined"==typeof s.Set)throw new TypeError;var e=this;return new g(function(t){var r=new s.Set;return e.subscribe(function(e){r.add(e)},function(e){t.onError(e)},function(){t.onNext(r),t.onCompleted()})},e)},v.toMap=function(o,a){if("undefined"==typeof s.Map)throw new TypeError;var e=this;return new g(function(n){var i=new s.Map;return e.subscribe(function(e){var t;try{t=o(e)}catch(e){return void n.onError(e)}var r=e;if(a)try{r=a(e)}catch(e){return void n.onError(e)}i.set(t,r)},function(e){n.onError(e)},function(){n.onNext(i),n.onCompleted()})},e)},t})}).call(this,"undefined"!=typeof n?n:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{159:159}],159:[function(e,Ir,Nr){(function(Rr,Lr){(function(a){function i(e){for(var t=[],r=0,n=e.length;n>r;r++)t.push(e[r]);return t}function o(e,t){if(ie&&t.stack&&"object"==typeof e&&null!==e&&e.stack&&-1===e.stack.indexOf(se)){for(var r=[],n=t;n;n=n.source)n.stack&&r.unshift(n.stack);r.unshift(e.stack);var i=r.join("\n"+se+"\n");e.stack=u(i)}}function u(e){for(var t=e.split("\n"),r=[],n=0,i=t.length;i>n;n++){var o=t[n];c(o)||h(o)||!o||r.push(o)}return r.join("\n")}function c(e){var t=l(e);if(!t)return!1;var r=t[0],n=t[1];return r===oe&&n>=ae&&jr>=n}function h(e){return-1!==e.indexOf("(module.js:")||-1!==e.indexOf("(node.js:")}function e(){if(ie)try{throw new Error}catch(e){var t=e.stack.split("\n"),r=t[0].indexOf("@")>0?t[1]:t[2],n=l(r);if(!n)return;return oe=n[0],n[1]}}function l(e){var t=/at .+ \((.+):(\d+):(?:\d+)\)$/.exec(e);if(t)return[t[1],Number(t[2])];var r=/at ([^ ]+):(\d+):(?:\d+)$/.exec(e);if(r)return[r[1],Number(r[2])];var n=/.*@(.+):(\d+)$/.exec(e);return n?[n[1],Number(n[2])]:void 0}function r(e){var t=[];if(!Ue(e))return t;ze.nonEnumArgs&&e.length&&Ge(e)&&(e=qe.call(e));var r=ze.enumPrototypes&&"function"==typeof e,n=ze.enumErrorProps&&(e===De||e instanceof Error);for(var i in e)r&&"prototype"==i||n&&("message"==i||"name"==i)||t.push(i);if(ze.nonEnumShadows&&e!==ke){var o=e.constructor,a=-1,s=we;if(e===(o&&o.prototype))var u=e===Be?Re:e===De?Te:Le.call(e),c=$e[u];for(;++a<s;)i=xe[a],c&&c[i]||!Ie.call(e,i)||t.push(i)}return t}function n(e,t,r){for(var n=-1,i=r(e),o=i.length;++n<o;){var a=i[n];if(t(e[a],a,e)===!1)break}return e}function v(e,t){return n(e,t,r)}function m(e){return"function"!=typeof e.toString&&"string"==typeof(e+"")}function g(n,e,i,o){if(n===e)return 0!==n||1/n==1/e;var t=typeof n,r=typeof e;if(n===n&&(null==n||null==e||"function"!=t&&"object"!=t&&"function"!=r&&"object"!=r))return!1;var a=Le.call(n),s=Le.call(e);if(a==Se&&(a=Ae),s==Se&&(s=Ae),a!=s)return!1;switch(a){case Ee:case Ce:return+n==+e;case Pe:return n!=+n?e!=+e:0==n?1/n==1/e:n==+e;case je:case Re:return n==String(e)}var u=a==Me;if(!u){if(a!=Ae||!ze.nodeClass&&(m(n)||m(e)))return!1;var c=!ze.argsObject&&Ge(n)?Object:n.constructor,h=!ze.argsObject&&Ge(e)?Object:e.constructor;if(!(c==h||Ie.call(n,"constructor")&&Ie.call(e,"constructor")||ne(c)&&c instanceof c&&ne(h)&&h instanceof h||!("constructor"in n&&"constructor"in e)))return!1}i||(i=[]),o||(o=[]);for(var l=i.length;l--;)if(i[l]==n)return o[l]==e;var p=0,f=!0;if(i.push(n),o.push(e),u){if(l=n.length,p=e.length,f=p==l)for(;p--;){var d=e[p];if(!(f=g(n[p],d,i,o)))break}}else v(e,function(e,t,r){return Ie.call(r,t)?(p++,f=Ie.call(n,t)&&g(n[t],e,i,o)):void 0}),f&&v(n,function(e,t,r){return Ie.call(r,t)?f=--p>-1:void 0});return i.pop(),o.pop(),f}function f(e,t){for(var r=new Array(e),n=0;e>n;n++)r[n]=t();return r}function t(){try{return Ve.apply(this,arguments)}catch(e){return Ke.e=e,Ke}}function p(e){if(!ne(e))throw new TypeError("fn must be a function");return Ve=e,t}function d(e){throw e}function y(e,t){this.id=e,this.value=t}function _(e,t){this.scheduler=e,this.disposable=t,this.isDisposed=!1}function b(e,t){t.isDisposed||(t.isDisposed=!0,t.disposable.dispose())}function x(e){this._s=s}function w(e){this._s=s,this._l=s.length,this._i=0}function S(e){this._a=e}function M(e){this._a=e,this._l=O(e),this._i=0}function E(e){return"number"==typeof e&&V.isFinite(e)}function C(e){var t,r=e[ve];if(!r&&"string"==typeof e)return t=new x(e),t[ve]();if(!r&&e.length!==a)return t=new S(e),t[ve]();if(!r)throw new TypeError("Object is not iterable");return e[ve]()}function T(e){var t=+e;return 0===t?t:isNaN(t)?t:0>t?-1:1}function O(e){var t=+e.length;return isNaN(t)?0:0!==t&&E(t)?(t=T(t)*Math.floor(Math.abs(t)),0>=t?0:t>Yt?Yt:t):t}function P(e,t){this.observer=e,this.parent=t}function A(e,t){return pt(e)||(e=mt),new Zt(t,e)}function j(e,t){this.observer=e,this.parent=t}function R(e,t){this.observer=e,this.parent=t}function L(t,o){return new Cr(function(n){var e=new at,i=new st;return i.setDisposable(e),e.setDisposable(t.subscribe(function(e){n.onNext(e)},function(e){try{var t=o(e)}catch(e){return n.onError(e)}re(t)&&(t=Gt(t));var r=new at;i.setDisposable(r),r.setDisposable(t.subscribe(n))},function(e){n.onCompleted(e)})),i},t)}function I(){return!1}function N(a,s){var e=this;return new Cr(function(n){var i=0,o=a.length;return e.subscribe(function(e){if(o>i){var t=a[i++],r=p(s)(e,t);if(r===Ke)return n.onError(r.e);n.onNext(r)}else n.onCompleted()},function(e){n.onError(e)},function(){n.onCompleted()})},e)}function I(){return!1}function D(){return[]}function I(){return!1}function k(){return[]}function B(e,t){this.observer=e,this.accumulator=t.accumulator,this.hasSeed=t.hasSeed,this.seed=t.seed,this.hasAccumulation=!1,this.accumulation=null,this.hasValue=!1,this.isStopped=!1}function F(n,e,t){var i=be(e,t,3);return n.map(function(e,t){var r=i(e,t,n);return re(r)&&(r=Gt(r)),(ye(r)||ge(r))&&(r=Kt(r)),r}).concatAll()}function $(e,t,r){for(var n=0,i=e.length;i>n;n++)if(r(e[n],t))return n;return-1}function z(e){this.comparer=e,this.set=[]}function U(n,e,t){var i=be(e,t,3);return n.map(function(e,t){var r=i(e,t,n);return re(r)&&(r=Gt(r)),(ye(r)||ge(r))&&(r=Kt(r)),r}).mergeAll()}var G={boolean:!1,function:!0,object:!0,number:!1,string:!1,undefined:!1},V=G[typeof window]&&window||this,H=G[typeof Nr]&&Nr&&!Nr.nodeType&&Nr,q=G[typeof Ir]&&Ir&&!Ir.nodeType&&Ir,W=q&&q.exports===H&&H,X=G[typeof Lr]&&Lr;!X||X.global!==X&&X.window!==X||(V=X);var Y={internals:{},config:{Promise:V.Promise},helpers:{}},K=Y.helpers.noop=function(){},Z=(Y.helpers.notDefined=function(e){return"undefined"==typeof e},Y.helpers.identity=function(e){return e}),J=(Y.helpers.pluck=function(t){return function(e){return e[t]}},Y.helpers.just=function(e){return function(){return e}},Y.helpers.defaultNow=Date.now),Q=Y.helpers.defaultComparer=function(e,t){return He(e,t)},ee=Y.helpers.defaultSubComparer=function(e,t){return e>t?1:t>e?-1:0},te=(Y.helpers.defaultKeySerializer=function(e){return e.toString()},Y.helpers.defaultError=function(e){throw e}),re=Y.helpers.isPromise=function(e){return!!e&&"function"!=typeof e.subscribe&&"function"==typeof e.then},ne=(Y.helpers.asArray=function(){return Array.prototype.slice.call(arguments)},Y.helpers.not=function(e){return!e},Y.helpers.isFunction=function(){var e=function(e){return"function"==typeof e||!1};return e(/x/)&&(e=function(e){return"function"==typeof e&&"[object Function]"==Le.call(e)}),e}());Y.config.longStackSupport=!1;var ie=!1;try{throw new Error}catch(e){ie=!!e.stack}var oe,ae=e(),se="From previous event:",ue=Y.EmptyError=function(){this.message="Sequence contains no elements.",Error.call(this)};ue.prototype=Error.prototype;var ce=Y.ObjectDisposedError=function(){this.message="Object has been disposed",Error.call(this)};ce.prototype=Error.prototype;var he=Y.ArgumentOutOfRangeError=function(){this.message="Argument out of range",Error.call(this)};he.prototype=Error.prototype;var le=Y.NotSupportedError=function(e){this.message=e||"This operation is not supported",Error.call(this)};le.prototype=Error.prototype;var pe=Y.NotImplementedError=function(e){this.message=e||"This operation is not implemented",Error.call(this)};pe.prototype=Error.prototype;var fe=Y.helpers.notImplemented=function(){throw new pe},de=Y.helpers.notSupported=function(){throw new le},ve="function"==typeof Symbol&&Symbol.iterator||"_es6shim_iterator_";V.Set&&"function"==typeof(new V.Set)["@@iterator"]&&(ve="@@iterator");var me=Y.doneEnumerator={done:!0,value:a},ge=Y.helpers.isIterable=function(e){return e[ve]!==a},ye=Y.helpers.isArrayLike=function(e){return e&&e.length!==a};Y.helpers.iterator=ve;var _e,be=Y.internals.bindCallback=function(n,i,e){if("undefined"==typeof i)return n;switch(e){case 0:return function(){return n.call(i)};case 1:return function(e){return n.call(i,e)};case 2:return function(e,t){return n.call(i,e,t)};case 3:return function(e,t,r){return n.call(i,e,t,r)}}return function(){return n.apply(i,arguments)}},xe=["toString","toLocaleString","valueOf","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","constructor"],we=xe.length,Se="[object Arguments]",Me="[object Array]",Ee="[object Boolean]",Ce="[object Date]",Te="[object Error]",Oe="[object Function]",Pe="[object Number]",Ae="[object Object]",je="[object RegExp]",Re="[object String]",Le=Object.prototype.toString,Ie=Object.prototype.hasOwnProperty,Ne=Le.call(arguments)==Se,De=Error.prototype,ke=Object.prototype,Be=String.prototype,Fe=ke.propertyIsEnumerable;try{_e=!(Le.call(document)==Ae&&!({toString:0}+""))}catch(e){_e=!0}var $e={};$e[Me]=$e[Ce]=$e[Pe]={constructor:!0,toLocaleString:!0,toString:!0,valueOf:!0},$e[Ee]=$e[Re]={constructor:!0,toString:!0,valueOf:!0},$e[Te]=$e[Oe]=$e[je]={constructor:!0,toString:!0},$e[Ae]={constructor:!0};var ze={};!function(){var e=function(){this.x=1},t=[];e.prototype={valueOf:1,y:1};for(var r in new e)t.push(r);for(r in arguments);ze.enumErrorProps=Fe.call(De,"message")||Fe.call(De,"name"),ze.enumPrototypes=Fe.call(e,"prototype"),ze.nonEnumArgs=0!=r,ze.nonEnumShadows=!/valueOf/.test(t)}(1);var Ue=Y.internals.isObject=function(e){var t=typeof e;return e&&("function"==t||"object"==t)||!1},Ge=function(e){return e&&"object"==typeof e?Le.call(e)==Se:!1};Ne||(Ge=function(e){return e&&"object"==typeof e?Ie.call(e,"callee"):!1});var Ve,He=Y.internals.isEqual=function(e,t){return g(e,t,[],[])},qe=({}.hasOwnProperty,Array.prototype.slice),We=this.inherits=Y.internals.inherits=function(e,t){function r(){this.constructor=e}r.prototype=t.prototype,e.prototype=new r},Xe=Y.internals.addProperties=function(e){for(var t=[],r=1,n=arguments.length;n>r;r++)t.push(arguments[r]);for(var i=0,o=t.length;o>i;i++){var a=t[i];for(var s in a)e[s]=a[s]}},Ye=Y.internals.addRef=function(t,r){return new Cr(function(e){return new Qe(r.getDisposable(),t.subscribe(e))})},Ke={e:{}};y.prototype.compareTo=function(e){var t=this.value.compareTo(e.value);return 0===t&&(t=this.id-e.id),t};var Ze=Y.internals.PriorityQueue=function(e){this.items=new Array(e),this.length=0},Je=Ze.prototype;Je.isHigherPriority=function(e,t){return this.items[e].compareTo(this.items[t])<0},Je.percolate=function(e){if(!(e>=this.length||0>e)){var t=e-1>>1;if(!(0>t||t===e)&&this.isHigherPriority(e,t)){var r=this.items[e];this.items[e]=this.items[t],this.items[t]=r,this.percolate(t)}}},Je.heapify=function(e){if(+e||(e=0),!(e>=this.length||0>e)){var t=2*e+1,r=2*e+2,n=e;if(t<this.length&&this.isHigherPriority(t,n)&&(n=t),r<this.length&&this.isHigherPriority(r,n)&&(n=r),n!==e){var i=this.items[e];this.items[e]=this.items[n],this.items[n]=i,this.heapify(n)}}},Je.peek=function(){return this.items[0].value},Je.removeAt=function(e){this.items[e]=this.items[--this.length],this.items[this.length]=a,this.heapify()},Je.dequeue=function(){var e=this.peek();return this.removeAt(0),e},Je.enqueue=function(e){var t=this.length++;this.items[t]=new y(Ze.count++,e),this.percolate(t)},Je.remove=function(e){for(var t=0;t<this.length;t++)if(this.items[t].value===e)return this.removeAt(t),!0;return!1},Ze.count=0;var Qe=Y.CompositeDisposable=function(){var e,t,r=[];if(Array.isArray(arguments[0]))r=arguments[0],t=r.length;else for(t=arguments.length,r=new Array(t),e=0;t>e;e++)r[e]=arguments[e];for(e=0;t>e;e++)if(!it(r[e]))throw new TypeError("Not a disposable");this.disposables=r,this.isDisposed=!1,this.length=r.length},et=Qe.prototype;et.add=function(e){this.isDisposed?e.dispose():(this.disposables.push(e),this.length++)},et.remove=function(e){var t=!1;if(!this.isDisposed){var r=this.disposables.indexOf(e);-1!==r&&(t=!0,this.disposables.splice(r,1),this.length--,e.dispose())}return t},et.dispose=function(){if(!this.isDisposed){this.isDisposed=!0;for(var e=this.disposables.length,t=new Array(e),r=0;e>r;r++)t[r]=this.disposables[r];for(this.disposables=[],this.length=0,r=0;e>r;r++)t[r].dispose()}};var tt=Y.Disposable=function(e){this.isDisposed=!1,this.action=e||K};tt.prototype.dispose=function(){this.isDisposed||(this.action(),this.isDisposed=!0)};var rt=tt.create=function(e){return new tt(e)},nt=tt.empty={dispose:K},it=tt.isDisposable=function(e){return e&&ne(e.dispose)},ot=tt.checkDisposed=function(e){if(e.isDisposed)throw new ce},at=Y.SingleAssignmentDisposable=function(){this.isDisposed=!1,this.current=null};at.prototype.getDisposable=function(){return this.current},at.prototype.setDisposable=function(e){if(this.current)throw new Error("Disposable has already been assigned");var t=this.isDisposed;!t&&(this.current=e),t&&e&&e.dispose()},at.prototype.dispose=function(){if(!this.isDisposed){this.isDisposed=!0;var e=this.current;this.current=null}e&&e.dispose()};var st=Y.SerialDisposable=function(){this.isDisposed=!1,this.current=null};st.prototype.getDisposable=function(){return this.current},st.prototype.setDisposable=function(e){var t=this.isDisposed;if(!t){var r=this.current;this.current=e}r&&r.dispose(),t&&e&&e.dispose()},st.prototype.dispose=function(){if(!this.isDisposed){this.isDisposed=!0;var e=this.current;this.current=null}e&&e.dispose()};var ut=Y.RefCountDisposable=function(){function e(e){this.disposable=e,this.disposable.count++,this.isInnerDisposed=!1}function t(e){this.underlyingDisposable=e,this.isDisposed=!1,this.isPrimaryDisposed=!1,this.count=0}return e.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()))},t.prototype.dispose=function(){this.isDisposed||this.isPrimaryDisposed||(this.isPrimaryDisposed=!0,0===this.count&&(this.isDisposed=!0,this.underlyingDisposable.dispose()))},t.prototype.getDisposable=function(){return this.isDisposed?nt:new e(this)},t}();_.prototype.dispose=function(){this.scheduler.scheduleWithState(this,b)};var ct=Y.internals.ScheduledItem=function(e,t,r,n,i){this.scheduler=e,this.state=t,this.action=r,this.dueTime=n,this.comparer=i||ee,this.disposable=new at};ct.prototype.invoke=function(){this.disposable.setDisposable(this.invokeCore())},ct.prototype.compareTo=function(e){return this.comparer(this.dueTime,e.dueTime)},ct.prototype.isCancelled=function(){return this.disposable.isDisposed},ct.prototype.invokeCore=function(){return this.action(this.scheduler,this.state)};var ht=Y.Scheduler=function(){function t(e,t,r,n){this.now=e,this._schedule=t,this._scheduleRelative=r,this._scheduleAbsolute=n}function r(e,t){return t(),nt}t.isScheduler=function(e){return e instanceof t};var e=t.prototype;return e.schedule=function(e){return this._schedule(e,r)},e.scheduleWithState=function(e,t){return this._schedule(e,t)},e.scheduleWithRelative=function(e,t){return this._scheduleRelative(t,e,r)},e.scheduleWithRelativeAndState=function(e,t,r){return this._scheduleRelative(e,t,r)},e.scheduleWithAbsolute=function(e,t){return this._scheduleAbsolute(t,e,r)},e.scheduleWithAbsoluteAndState=function(e,t,r){return this._scheduleAbsolute(e,t,r)},t.now=J,t.normalize=function(e){return 0>e&&(e=0),e},t}(),lt=ht.normalize,pt=ht.isScheduler;!function(e){function r(t,e){function o(e){n(e,function(e){var r=!1,n=!1,i=t.scheduleWithState(e,function(e,t){return r?a.remove(i):n=!0,o(t),nt});n||(a.add(i),r=!0)})}var r=e[0],n=e[1],a=new Qe;return o(r),a}function n(o,e,a){function s(e){r(e,function(e,t){var r=!1,n=!1,i=o[a](e,t,function(e,t){return r?u.remove(i):n=!0,s(t),nt});n||(u.add(i),r=!0)})}var t=e[0],r=e[1],u=new Qe;return s(t),u}function i(t,r){t(function(e){r(t,e)})}e.scheduleRecursive=function(e){return this.scheduleRecursiveWithState(e,i)},e.scheduleRecursiveWithState=function(e,t){return this.scheduleWithState([e,t],r)},e.scheduleRecursiveWithRelative=function(e,t){return this.scheduleRecursiveWithRelativeAndState(t,e,i)},e.scheduleRecursiveWithRelativeAndState=function(e,t,r){return this._scheduleRelative([e,r],t,function(e,t){return n(e,t,"scheduleWithRelativeAndState")})},e.scheduleRecursiveWithAbsolute=function(e,t){return this.scheduleRecursiveWithAbsoluteAndState(t,e,i)},e.scheduleRecursiveWithAbsoluteAndState=function(e,t,r){return this._scheduleAbsolute([e,r],t,function(e,t){return n(e,t,"scheduleWithAbsoluteAndState")})}}(ht.prototype),function(e){ht.prototype.schedulePeriodic=function(e,t){return this.schedulePeriodicWithState(null,e,t)},ht.prototype.schedulePeriodicWithState=function(e,t,r){if("undefined"==typeof V.setInterval)throw new le;t=lt(t);var n=e,i=V.setInterval(function(){n=r(n)},t);return rt(function(){V.clearInterval(i)})}}(ht.prototype),function(e){e.catchError=e["catch"]=function(e){return new bt(this,e)}}(ht.prototype);var ft,dt,vt=(Y.internals.SchedulePeriodicRecursive=function(){function t(e,t){t(0,this._period);try{this._state=this._action(this._state)}catch(e){throw this._cancel.dispose(),e}}function e(e,t,r,n){this._scheduler=e,this._state=t,this._period=r,this._action=n}return e.prototype.start=function(){var e=new at;return this._cancel=e,e.setDisposable(this._scheduler.scheduleRecursiveWithRelativeAndState(0,this._period,t.bind(this))),e},e}(),ht.immediate=function(){function e(e,t){return t(this,e)}return new ht(J,e,de,de)}()),mt=ht.currentThread=function(){function i(){for(;o.length>0;){var e=o.dequeue();!e.isCancelled()&&e.invoke()}}function e(e,t){var r=new ct(this,e,t,this.now());if(o)o.enqueue(r);else{o=new Ze(4),o.enqueue(r);var n=p(i)();if(o=null,n===Ke)return d(n.e)}return r.disposable}var o,t=new ht(J,e,de,de);return t.scheduleRequired=function(){return!o},t}(),gt=function(){var e,t=K;if(V.setTimeout)e=V.setTimeout,t=V.clearTimeout;else{if(!V.WScript)throw new le;e=function(e,t){V.WScript.Sleep(t),e()}}return{setTimeout:e,clearTimeout:t}}(),yt=gt.setTimeout,_t=gt.clearTimeout;!function(){function n(e){if(a)yt(function(){n(e)},0);else{var t=o[e];if(t){a=!0;var r=p(t)();if(dt(e),a=!1,r===Ke)return d(r.e)}}}function e(){if(!V.postMessage||V.importScripts)return!1;var e=!1,t=V.onmessage;return V.onmessage=function(){e=!0},V.postMessage("","*"),V.onmessage=t,e}function t(e){"string"==typeof e.data&&e.data.substring(0,u.length)===u&&n(e.data.substring(u.length))}var i=1,o={},a=!1;dt=function(e){delete o[e]};var r=RegExp("^"+String(Le).replace(/[.*+?^${}()|[\]\\]/g,"\\$&").replace(/toString| for [^\]]+/g,".*?")+"$"),s="function"==typeof(s=X&&W&&X.setImmediate)&&!r.test(s)&&s;if(ne(s))ft=function(e){var t=i++;return o[t]=e,s(function(){n(t)}),t};else if("undefined"!=typeof Rr&&"[object process]"==={}.toString.call(Rr))ft=function(e){var t=i++;return o[t]=e,Rr.nextTick(function(){n(t)}),t};else if(e()){var u="ms.rx.schedule"+Math.random();V.addEventListener?V.addEventListener("message",t,!1):V.attachEvent?V.attachEvent("onmessage",t):V.onmessage=t,ft=function(e){var t=i++;return o[t]=e,V.postMessage(u+currentId,"*"),t}}else if(V.MessageChannel){var c=new V.MessageChannel;c.port1.onmessage=function(e){n(e.data)},ft=function(e){var t=i++;return o[t]=e,c.port2.postMessage(t),t}}else ft="document"in V&&"onreadystatechange"in V.document.createElement("script")?function(e){var t=V.document.createElement("script"),r=i++;return o[r]=e,t.onreadystatechange=function(){n(r),t.onreadystatechange=null,t.parentNode.removeChild(t),t=null},V.document.documentElement.appendChild(t),r}:function(e){var t=i++;return o[t]=e,yt(function(){n(t)},0),t}}();var bt=(ht.timeout=ht["default"]=function(){function e(e,t){var r=this,n=new at,i=ft(function(){!n.isDisposed&&n.setDisposable(t(r,e))});return new Qe(n,rt(function(){dt(i)}))}function t(e,t,r){var n=this,i=ht.normalize(t),o=new at;if(0===i)return n.scheduleWithState(e,r);var a=yt(function(){!o.isDisposed&&o.setDisposable(r(n,e))},i);return new Qe(o,rt(function(){_t(a)}))}function r(e,t,r){return this.scheduleWithRelativeAndState(e,t-this.now(),r)}return new ht(J,e,t,r)}(),function(r){function n(e,t){return this._scheduler.scheduleWithState(e,this._wrap(t))}function i(e,t,r){return this._scheduler.scheduleWithRelativeAndState(e,t,this._wrap(r))}function o(e,t,r){return this._scheduler.scheduleWithAbsoluteAndState(e,t,this._wrap(r))}function t(e,t){this._scheduler=e,this._handler=t,this._recursiveOriginal=null,this._recursiveWrapper=null,r.call(this,this._scheduler.now.bind(this._scheduler),n,i,o)}return We(t,r),t.prototype._clone=function(e){return new t(e,this._handler)},t.prototype._wrap=function(r){var n=this;return function(e,t){try{return r(n._getRecursiveWrapper(e),t)}catch(e){if(!n._handler(e))throw e;return nt}}},t.prototype._getRecursiveWrapper=function(e){if(this._recursiveOriginal!==e){this._recursiveOriginal=e;var t=this._clone(e);t._recursiveOriginal=e,t._recursiveWrapper=t,this._recursiveWrapper=t}return this._recursiveWrapper},t.prototype.schedulePeriodicWithState=function(e,t,r){var n=this,i=!1,o=new at;return o.setDisposable(this._scheduler.schedulePeriodicWithState(e,t,function(e){if(i)return null;try{return r(e)}catch(e){if(i=!0,!n._handler(e))throw e;return o.dispose(),null}})),o},t}(ht)),xt=Y.Notification=function(){function e(e,t,r,n,i,o){this.kind=e,this.value=t,this.exception=r,this._accept=n,this._acceptObservable=i,this.toString=o}return e.prototype.accept=function(e,t,r){return e&&"object"==typeof e?this._acceptObservable(e):this._accept(e,t,r)},e.prototype.toObservable=function(e){var t=this;return pt(e)||(e=vt),new Cr(function(r){return e.scheduleWithState(t,function(e,t){t._acceptObservable(r),"N"===t.kind&&r.onCompleted()})})},e}(),wt=xt.createOnNext=function(){function t(e){return e(this.value)}function r(e){return e.onNext(this.value)}function n(){return"OnNext("+this.value+")"}return function(e){return new xt("N",e,null,t,r,n)}}(),St=xt.createOnError=function(){function t(e,t){return t(this.exception)}function r(e){return e.onError(this.exception)}function n(){return"OnError("+this.exception+")"}return function(e){return new xt("E",null,e,t,r,n)}}(),Mt=xt.createOnCompleted=function(){function e(e,t,r){return r()}function t(e){return e.onCompleted()}function r(){return"OnCompleted()"}return function(){return new xt("C",null,null,e,t,r)}}(),Et=Y.Observer=function(){};Et.prototype.toNotifier=function(){var t=this;return function(e){return e.accept(t)}},Et.prototype.asObserver=function(){return new Pt(this.onNext.bind(this),this.onError.bind(this),this.onCompleted.bind(this))},Et.prototype.checked=function(){return new At(this)};var Ct=Et.create=function(e,t,r){return e||(e=K),t||(t=te),r||(r=K),new Pt(e,t,r)};Et.fromNotifier=function(t,r){return new Pt(function(e){return t.call(r,wt(e))},function(e){return t.call(r,St(e))},function(){return t.call(r,Mt())})},Et.prototype.notifyOn=function(e){return new Rt(e,this)},Et.prototype.makeSafe=function(e){return new AnonymousSafeObserver(this._onNext,this._onError,this._onCompleted,e)};var Tt,Ot=Y.internals.AbstractObserver=function(e){function t(){this.isStopped=!1,e.call(this)}return We(t,e),t.prototype.next=fe,t.prototype.error=fe,t.prototype.completed=fe,t.prototype.onNext=function(e){this.isStopped||this.next(e)},t.prototype.onError=function(e){this.isStopped||(this.isStopped=!0,this.error(e))},t.prototype.onCompleted=function(){this.isStopped||(this.isStopped=!0,this.completed())},t.prototype.dispose=function(){this.isStopped=!0},t.prototype.fail=function(e){return this.isStopped?!1:(this.isStopped=!0,this.error(e),!0)},t}(Et),Pt=Y.AnonymousObserver=function(n){function e(e,t,r){n.call(this),this._onNext=e,this._onError=t,this._onCompleted=r}return We(e,n),e.prototype.next=function(e){this._onNext(e)},e.prototype.error=function(e){this._onError(e)},e.prototype.completed=function(){this._onCompleted()},e}(Ot),At=function(t){function e(e){t.call(this),this._observer=e,this._state=0}We(e,t);var r=e.prototype;return r.onNext=function(e){this.checkAccess();var t=p(this._observer.onNext).call(this._observer,e);this._state=0,t===Ke&&d(t.e)},r.onError=function(e){this.checkAccess();var t=p(this._observer.onError).call(this._observer,e);this._state=2,t===Ke&&d(t.e)},r.onCompleted=function(){this.checkAccess();var e=p(this._observer.onCompleted).call(this._observer);this._state=2,e===Ke&&d(e.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}(Et),jt=Y.internals.ScheduledObserver=function(r){function e(e,t){r.call(this),this.scheduler=e,this.observer=t,this.isAcquired=!1,this.hasFaulted=!1,this.queue=[],this.disposable=new st}return We(e,r),e.prototype.next=function(e){var t=this;this.queue.push(function(){t.observer.onNext(e)})},e.prototype.error=function(e){var t=this;this.queue.push(function(){t.observer.onError(e)})},e.prototype.completed=function(){var e=this;this.queue.push(function(){e.observer.onCompleted()})},e.prototype.ensureActive=function(){var e=!1,r=this;!this.hasFaulted&&this.queue.length>0&&(e=!this.isAcquired,this.isAcquired=!0),e&&this.disposable.setDisposable(this.scheduler.scheduleRecursive(function(e){var t;if(!(r.queue.length>0))return void(r.isAcquired=!1);t=r.queue.shift();try{t()}catch(e){throw r.queue=[],r.hasFaulted=!0,e}e()}))},e.prototype.dispose=function(){r.prototype.dispose.call(this),this.disposable.dispose()},e}(Ot),Rt=function(n){function e(e,t,r){n.call(this,e,t),this._cancel=r}return We(e,n),e.prototype.next=function(e){n.prototype.next.call(this,e),this.ensureActive()},e.prototype.error=function(e){n.prototype.error.call(this,e),this.ensureActive()},e.prototype.completed=function(){n.prototype.completed.call(this),this.ensureActive()},e.prototype.dispose=function(){n.prototype.dispose.call(this),this._cancel&&this._cancel.dispose(),this._cancel=null},e}(jt),Lt=Y.Observable=function(){function e(r){if(Y.config.longStackSupport&&ie){try{throw new Error}catch(e){this.stack=e.stack.substring(e.stack.indexOf("\n")+1)}var n=this;this._subscribe=function(e){var t=e.onError.bind(e);return e.onError=function(e){o(e,n),t(e)},r.call(n,e)}}else this._subscribe=r}return Tt=e.prototype,Tt.subscribe=Tt.forEach=function(e,t,r){return this._subscribe("object"==typeof e?e:Ct(e,t,r))},Tt.subscribeOnNext=function(t,r){return this._subscribe(Ct("undefined"!=typeof r?function(e){t.call(r,e)}:t))},Tt.subscribeOnError=function(t,r){return this._subscribe(Ct(null,"undefined"!=typeof r?function(e){t.call(r,e)}:t))},Tt.subscribeOnCompleted=function(e,t){return this._subscribe(Ct(null,null,"undefined"!=typeof t?function(){e.call(t)}:e))},e}(),It=Y.ObservableBase=function(e){function o(e){return e&&ne(e.dispose)?e:ne(e)?rt(e):nt}function n(e,t){var r=t[0],n=t[1],i=p(n.subscribeCore).call(n,r);return i!==Ke||r.fail(Ke.e)?void r.setDisposable(o(i)):d(Ke.e)}function t(e){var t=new Tr(e),r=[t,this];return mt.scheduleRequired()?mt.scheduleWithState(r,n):n(null,r),t}function r(){e.call(this,t)}return We(r,e),r.prototype.subscribeCore=fe,r}(Lt),Nt=Y.internals.Enumerable=function(){},Dt=function(t){function e(e){this.sources=e,t.call(this)}function u(e,t,r){this.o=e,this.s=t,this.e=r,this.isStopped=!1}return We(e,t),e.prototype.subscribeCore=function(o){var a,s=new st,e=vt.scheduleRecursiveWithState(this.sources[ve](),function(e,t){if(!a){var r=p(e.next).call(e);if(r===Ke)return o.onError(r.e);if(r.done)return o.onCompleted();var n=r.value;re(n)&&(n=Gt(n));var i=new at;s.setDisposable(i),i.setDisposable(n.subscribe(new u(o,t,e)))}});return new Qe(s,e,rt(function(){a=!0}))},u.prototype.onNext=function(e){this.isStopped||this.o.onNext(e)},u.prototype.onError=function(e){this.isStopped||(this.isStopped=!0,this.o.onError(e))},u.prototype.onCompleted=function(){this.isStopped||(this.isStopped=!0,this.s(this.e))},u.prototype.dispose=function(){this.isStopped=!0},u.prototype.fail=function(e){return this.isStopped?!1:(this.isStopped=!0,this.o.onError(e),!0)},e}(It);Nt.prototype.concat=function(){return new Dt(this)};var kt=function(t){function e(e){this.sources=e,t.call(this)}return We(e,t),e.prototype.subscribeCore=function(o){var a,s=this.sources[ve](),u=new st,e=vt.scheduleRecursiveWithState(null,function(e,t){if(!a){var r=p(s.next).call(s);if(r===Ke)return o.onError(r.e);if(r.done)return null!==e?o.onError(e):o.onCompleted();var n=r.value;re(n)&&(n=Gt(n));var i=new at;u.setDisposable(i),i.setDisposable(n.subscribe(function(e){o.onNext(e)},t,function(){o.onCompleted()}))}});return new Qe(u,e,rt(function(){a=!0}))},e}(It);Nt.prototype.catchError=function(){return new kt(this)},Nt.prototype.catchErrorWhen=function(n){var i=this;return new Cr(function(o){var a,s,u=new Pr,c=new Pr,e=n(u),t=e.subscribe(c),h=i[ve](),l=new st,r=vt.scheduleRecursive(function(t){if(!a){var e=p(h.next).call(h);if(e===Ke)return o.onError(e.e);if(e.done)return void(s?o.onError(s):o.onCompleted());var r=e.value;re(r)&&(r=Gt(r));var n=new at,i=new at;l.setDisposable(new Qe(i,n)),n.setDisposable(r.subscribe(function(e){o.onNext(e)},function(e){i.setDisposable(c.subscribe(t,function(e){o.onError(e)},function(){o.onCompleted()})),u.onNext(e)},function(){o.onCompleted()}))}});return new Qe(t,l,r,rt(function(){a=!0}))})};var Bt=function(e){function t(e,t){this.v=e,this.c=null==t?-1:t}function r(e){this.v=e.v,this.l=e.c}return We(t,e),t.prototype[ve]=function(){return new r(this)},r.prototype.next=function(){return 0===this.l?me:(this.l>0&&this.l--,{done:!1,value:this.v})},t}(Nt),Ft=Nt.repeat=function(e,t){return new Bt(e,t)},$t=function(e){function t(e,t,r){this.s=e,this.fn=t?be(t,r,3):null}function r(e){this.i=-1,this.s=e.s,this.l=this.s.length,this.fn=e.fn}return We(t,e),t.prototype[ve]=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]}:me},t}(Nt),zt=Nt.of=function(e,t,r){return new $t(e,t,r)};Tt.observeOn=function(t){var r=this;return new Cr(function(e){return r.subscribe(new Rt(t,e))},r)},Tt.subscribeOn=function(n){var i=this;return new Cr(function(e){var t=new at,r=new st;return r.setDisposable(t),t.setDisposable(n.schedule(function(){r.setDisposable(new _(n,i.subscribe(e)))})),r},i)};var Ut=function(t){function e(e){this.p=e,t.call(this)}return We(e,t),e.prototype.subscribeCore=function(t){return this.p.then(function(e){t.onNext(e),t.onCompleted()},function(e){t.onError(e)}),nt},e}(It),Gt=Lt.fromPromise=function(e){return new Ut(e)};Tt.toPromise=function(e){if(e||(e=Y.config.Promise),!e)throw new le("Promise type not provided nor in Rx.config.Promise");var i=this;return new e(function(e,t){var r,n=!1;i.subscribe(function(e){r=e,n=!0},t,function(){n&&e(r)})})};var Vt=function(t){function e(e){this.source=e,t.call(this)}function r(e){this.o=e,this.a=[],this.isStopped=!1}return We(e,t),e.prototype.subscribeCore=function(e){return this.source.subscribe(new r(e))},r.prototype.onNext=function(e){this.isStopped||this.a.push(e)},r.prototype.onError=function(e){this.isStopped||(this.isStopped=!0,this.o.onError(e))},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(e){return this.isStopped?!1:(this.isStopped=!0,this.o.onError(e),!0)},e}(It);Tt.toArray=function(){return new Vt(this)},Lt.create=Lt.createWithDisposable=function(e,t){return new Cr(e,t)};var Ht=(Lt.defer=function(r){return new Cr(function(t){var e;try{e=r()}catch(e){return sr(e).subscribe(t)}return re(e)&&(e=Gt(e)),e.subscribe(t)})},function(t){function e(e){this.scheduler=e,t.call(this)}function r(e,t){this.observer=e,this.parent=t}function n(e,t){t.onCompleted()}return We(e,t),e.prototype.subscribeCore=function(e){var t=new r(e,this);return t.run()},r.prototype.run=function(){return this.parent.scheduler.scheduleWithState(this.observer,n)},e}(It)),qt=Lt.empty=function(e){return pt(e)||(e=vt),new Ht(e)},Wt=function(n){function e(e,t,r){this.iterable=e,this.mapper=t,this.scheduler=r,n.call(this)}return We(e,n),e.prototype.subscribeCore=function(e){var t=new Xt(e,this);return t.run()},e}(It),Xt=function(){function e(e,t){this.observer=e,this.parent=t}return e.prototype.run=function(){function e(e,t){try{var r=i.next()}catch(e){return o.onError(e)}if(r.done)return o.onCompleted();var n=r.value;if(a)try{n=a(n,e)}catch(e){return o.onError(e)}o.onNext(n),t(e+1)}var t=Object(this.parent.iterable),i=C(t),o=this.observer,a=this.parent.mapper;return this.parent.scheduler.scheduleRecursiveWithState(0,e)},e}(),Yt=Math.pow(2,53)-1;x.prototype[ve]=function(){return new w(this._s)},w.prototype[ve]=function(){return this},w.prototype.next=function(){return this._i<this._l?{done:!1,value:this._s.charAt(this._i++)}:me},S.prototype[ve]=function(){return new M(this._a)},M.prototype[ve]=function(){return this},M.prototype.next=function(){return this._i<this._l?{done:!1,value:this._a[this._i++]}:me};var Kt=Lt.from=function(e,t,r,n){if(null==e)throw new Error("iterable cannot be null.");if(t&&!ne(t))throw new Error("mapFn when provided must be a function");if(t)var i=be(t,r,2);return pt(n)||(n=mt),new Wt(e,i,n)},Zt=function(r){function e(e,t){this.args=e,this.scheduler=t,r.call(this)}return We(e,r),e.prototype.subscribeCore=function(e){var t=new P(e,this);return t.run()},e}(It);P.prototype.run=function(){function e(e,t){i>e?(r.onNext(n[e]),t(e+1)):r.onCompleted()}var r=this.observer,n=this.parent.args,i=n.length;return this.parent.scheduler.scheduleRecursiveWithState(0,e)};var Jt=Lt.fromArray=function(e,t){return pt(t)||(t=mt),new Zt(e,t)};Lt.generate=function(e,a,s,u,t){return pt(t)||(t=mt),new Cr(function(i){var o=!0;return t.scheduleRecursiveWithState(e,function(e,t){var r,n;try{o?o=!1:e=s(e),r=a(e),r&&(n=u(e))}catch(e){return i.onError(e)}r?(i.onNext(n),t(e)):i.onCompleted()})})};var Qt=function(e){function t(){e.call(this)}return We(t,e),t.prototype.subscribeCore=function(e){return nt},t}(It),er=Lt.never=function(){return new Qt};Lt.of=function(){for(var e=arguments.length,t=new Array(e),r=0;e>r;r++)t[r]=arguments[r];return new Zt(t,mt)},Lt.ofWithScheduler=function(e){for(var t=arguments.length,r=new Array(t-1),n=1;t>n;n++)r[n-1]=arguments[n];return new Zt(r,e)};var tr=function(r){function e(e,t){this.obj=e,this.keys=Object.keys(e),this.scheduler=t,r.call(this)}return We(e,r),e.prototype.subscribeCore=function(e){var t=new j(e,this);return t.run()},e}(It);j.prototype.run=function(){function e(e,t){if(a>e){var r=o[e];n.onNext([r,i[r]]),t(e+1)}else n.onCompleted()}var n=this.observer,i=this.parent.obj,o=this.parent.keys,a=o.length;return this.parent.scheduler.scheduleRecursiveWithState(0,e)},Lt.pairs=function(e,t){return t||(t=mt),new tr(e,t)};var rr=function(n){function e(e,t,r){this.start=e,this.rangeCount=t,this.scheduler=r,n.call(this)}return We(e,n),e.prototype.subscribeCore=function(e){var t=new nr(e,this);return t.run()},e}(It),nr=function(){function e(e,t){this.observer=e,this.parent=t}return e.prototype.run=function(){function e(e,t){n>e?(i.onNext(r+e),t(e+1)):i.onCompleted()}var r=this.parent.start,n=this.parent.rangeCount,i=this.observer;return this.parent.scheduler.scheduleRecursiveWithState(0,e)},e}();Lt.range=function(e,t,r){return pt(r)||(r=mt),new rr(e,t,r)};var ir=function(n){function e(e,t,r){this.value=e,this.repeatCount=null==t?-1:t,this.scheduler=r,n.call(this)}return We(e,n),e.prototype.subscribeCore=function(e){var t=new R(e,this);return t.run()},e}(It);R.prototype.run=function(){function e(e,t){return(-1===e||e>0)&&(r.onNext(n),e>0&&e--),0===e?r.onCompleted():void t(e)}var r=this.observer,n=this.parent.value;return this.parent.scheduler.scheduleRecursiveWithState(this.parent.repeatCount,e)},Lt.repeat=function(e,t,r){return pt(r)||(r=mt),new ir(e,t,r)};var or=function(r){function e(e,t){this.value=e,this.scheduler=t,r.call(this)}function n(e,t){this.observer=e,this.parent=t}function t(e,t){var r=t[0],n=t[1];n.onNext(r),n.onCompleted()}return We(e,r),e.prototype.subscribeCore=function(e){var t=new n(e,this);return t.run()},n.prototype.run=function(){return this.parent.scheduler.scheduleWithState([this.parent.value,this.observer],t)},e}(It),ar=(Lt["return"]=Lt.just=Lt.returnValue=function(e,t){return pt(t)||(t=vt),new or(e,t)},function(r){function e(e,t){this.error=e,this.scheduler=t,r.call(this)}function n(e,t){this.o=e,this.p=t}function t(e,t){var r=t[0],n=t[1];n.onError(r)}return We(e,r),e.prototype.subscribeCore=function(e){var t=new n(e,this);return t.run()},n.prototype.run=function(){return this.p.scheduler.scheduleWithState([this.p.error,this.o],t)},e}(It)),sr=Lt["throw"]=Lt.throwError=Lt.throwException=function(e,t){return pt(t)||(t=vt),new ar(e,t)};Lt.using=function(i,o){return new Cr(function(t){var e,r,n=nt;try{e=i(),e&&(n=e),r=o(e)}catch(e){return new Qe(sr(e).subscribe(t),n)}return new Qe(r.subscribe(t),n)})},Tt.amb=function(u){var c=this;return new Cr(function(t){function r(){i||(i=o,s.dispose())}function n(){i||(i=a,e.dispose())}var i,o="L",a="R",e=new at,s=new at;return re(u)&&(u=Gt(u)),e.setDisposable(c.subscribe(function(e){r(),i===o&&t.onNext(e)},function(e){r(),i===o&&t.onError(e)},function(){r(),i===o&&t.onCompleted()})),s.setDisposable(u.subscribe(function(e){n(),i===a&&t.onNext(e)},function(e){n(),i===a&&t.onError(e)},function(){n(),i===a&&t.onCompleted()})),new Qe(e,s)})},Lt.amb=function(){function e(e,t){return e.amb(t)}var t=er(),r=[];if(Array.isArray(arguments[0]))r=arguments[0];else for(var n=0,i=arguments.length;i>n;n++)r.push(arguments[n]);for(var n=0,i=r.length;i>n;n++)t=e(t,r[n]);return t},Tt["catch"]=Tt.catchError=Tt.catchException=function(e){return"function"==typeof e?L(this,e):ur([this,e])};var ur=Lt.catchError=Lt["catch"]=Lt.catchException=function(){var e=[];if(Array.isArray(arguments[0]))e=arguments[0];else for(var t=0,r=arguments.length;r>t;t++)e.push(arguments[t]);return zt(e).catchError()};Tt.combineLatest=function(){for(var e=arguments.length,t=new Array(e),r=0;e>r;r++)t[r]=arguments[r];return Array.isArray(t[0])?t[0].unshift(this):t.unshift(this),cr.apply(this,t)};var cr=Lt.combineLatest=function(){for(var e=arguments.length,l=new Array(e),t=0;e>t;t++)l[t]=arguments[t];var p=l.pop();return Array.isArray(l[0])&&(l=l[0]),new Cr(function(n){function i(r){if(a[r]=!0,s||(s=a.every(Z))){try{var e=p.apply(null,c)}catch(e){return n.onError(e)}n.onNext(e)}else u.filter(function(e,t){return t!==r}).every(Z)&&n.onCompleted()}function o(e){u[e]=!0,u.every(Z)&&n.onCompleted()}for(var e=l.length,t=function(){return!1},a=f(e,t),s=!1,u=f(e,t),c=new Array(e),h=new Array(e),r=0;e>r;r++)!function(t){var e=l[t],r=new at;re(e)&&(e=Gt(e)),r.setDisposable(e.subscribe(function(e){c[t]=e,i(t)},function(e){n.onError(e)},function(){o(t)})),h[t]=r}(r);return new Qe(h)},this)};Tt.concat=function(){for(var e=[],t=0,r=arguments.length;r>t;t++)e.push(arguments[t]);return e.unshift(this),lr.apply(null,e)};var hr=function(t){function e(e){this.sources=e,t.call(this)}function r(e,t){this.sources=e,this.o=t}return We(e,t),e.prototype.subscribeCore=function(e){var t=new r(this.sources,e);return t.run()},r.prototype.run=function(){var i,o=new st,a=this.sources,s=a.length,u=this.o,e=vt.scheduleRecursiveWithState(0,function(e,t){if(!i){if(e===s)return u.onCompleted();var r=a[e];re(r)&&(r=Gt(r));var n=new at;o.setDisposable(n),n.setDisposable(r.subscribe(function(e){u.onNext(e)},function(e){u.onError(e)},function(){t(e+1)}))}});return new Qe(o,e,rt(function(){i=!0}))},e}(It),lr=Lt.concat=function(){var e;if(Array.isArray(arguments[0]))e=arguments[0];else{e=new Array(arguments.length);for(var t=0,r=arguments.length;r>t;t++)e[t]=arguments[t]}return new hr(e)};Tt.concatAll=Tt.concatObservable=function(){return this.merge(1)};var pr=function(r){function e(e,t){this.source=e,this.maxConcurrent=t,r.call(this)}return We(e,r),e.prototype.subscribeCore=function(e){var t=new Qe;return t.add(this.source.subscribe(new fr(e,this.maxConcurrent,t))),t},e}(It),fr=function(){function e(e,t,r){this.o=e,this.max=t,this.g=r,this.done=!1,this.q=[],this.activeCount=0,this.isStopped=!1}function r(e,t){this.parent=e,this.sad=t,this.isStopped=!1}return e.prototype.handleSubscribe=function(e){var t=new at;this.g.add(t),re(e)&&(e=Gt(e)),t.setDisposable(e.subscribe(new r(this,t)))},e.prototype.onNext=function(e){this.isStopped||(this.activeCount<this.max?(this.activeCount++,this.handleSubscribe(e)):this.q.push(e))},e.prototype.onError=function(e){this.isStopped||(this.isStopped=!0,this.o.onError(e))},e.prototype.onCompleted=function(){this.isStopped||(this.isStopped=!0,this.done=!0,0===this.activeCount&&this.o.onCompleted())},e.prototype.dispose=function(){this.isStopped=!0},e.prototype.fail=function(e){return this.isStopped?!1:(this.isStopped=!0,this.o.onError(e),!0)},r.prototype.onNext=function(e){this.isStopped||this.parent.o.onNext(e)},r.prototype.onError=function(e){this.isStopped||(this.isStopped=!0,this.parent.o.onError(e))},r.prototype.onCompleted=function(){if(!this.isStopped){this.isStopped=!0;var e=this.parent;e.g.remove(this.sad),e.q.length>0?e.handleSubscribe(e.q.shift()):(e.activeCount--,e.done&&0===e.activeCount&&e.o.onCompleted())}},r.prototype.dispose=function(){this.isStopped=!0},r.prototype.fail=function(e){return this.isStopped?!1:(this.isStopped=!0,this.parent.o.onError(e),!0)},e}();Tt.merge=function(e){return"number"!=typeof e?dr(this,e):new pr(this,e)};var dr=Lt.merge=function(){var e,t,r=[],n=arguments.length;if(arguments[0])if(pt(arguments[0]))for(e=arguments[0],t=1;n>t;t++)r.push(arguments[t]);else for(e=vt,t=0;n>t;t++)r.push(arguments[t]);else for(e=vt,t=1;n>t;t++)r.push(arguments[t]);return Array.isArray(r[0])&&(r=r[0]),A(e,r).mergeAll()},vr=Y.CompositeError=function(e){this.name="NotImplementedError",this.innerErrors=e,this.message="This contains multiple errors. Check the innerErrors",Error.call(this)};vr.prototype=Error.prototype,Lt.mergeDelayError=function(){var e;if(Array.isArray(arguments[0]))e=arguments[0];else{var t=arguments.length;e=new Array(t);for(var r=0;t>r;r++)e[r]=arguments[r]}var s=A(null,e);return new Cr(function(r){function n(){0===a.length?r.onCompleted():1===a.length?r.onError(a[0]):r.onError(new vr(a))}var i=new Qe,e=new at,o=!1,a=[];return i.add(e),e.setDisposable(s.subscribe(function(e){var t=new at;i.add(t),re(e)&&(e=Gt(e)),t.setDisposable(e.subscribe(function(e){r.onNext(e)},function(e){a.push(e),i.remove(t),o&&1===i.length&&n()},function(){i.remove(t),o&&1===i.length&&n()}))},function(e){a.push(e),o=!0,1===i.length&&n()},function(){o=!0,1===i.length&&n()})),i})};var mr=function(t){function e(e){this.source=e,t.call(this)}function n(e,t){this.o=e,this.g=t,this.isStopped=!1,this.done=!1}function r(e,t,r){this.parent=e,this.g=t,this.sad=r,this.isStopped=!1}return We(e,t),e.prototype.subscribeCore=function(e){var t=new Qe,r=new at;return t.add(r),r.setDisposable(this.source.subscribe(new n(e,t))),t},n.prototype.onNext=function(e){if(!this.isStopped){var t=new at;this.g.add(t),re(e)&&(e=Gt(e)),t.setDisposable(e.subscribe(new r(this,this.g,t)))}},n.prototype.onError=function(e){this.isStopped||(this.isStopped=!0,this.o.onError(e))},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(e){return this.isStopped?!1:(this.isStopped=!0,this.o.onError(e),!0)},r.prototype.onNext=function(e){this.isStopped||this.parent.o.onNext(e)},r.prototype.onError=function(e){this.isStopped||(this.isStopped=!0,this.parent.o.onError(e))},r.prototype.onCompleted=function(){if(!this.isStopped){var e=this.parent;this.isStopped=!0,e.g.remove(this.sad),e.done&&1===e.g.length&&e.o.onCompleted()}},r.prototype.dispose=function(){this.isStopped=!0},r.prototype.fail=function(e){return this.isStopped?!1:(this.isStopped=!0,this.parent.o.onError(e),!0)},e}(It);Tt.mergeAll=Tt.mergeObservable=function(){return new mr(this)},Tt.onErrorResumeNext=function(e){if(!e)throw new Error("Second observable is required");return gr([this,e])};var gr=Lt.onErrorResumeNext=function(){var a=[];if(Array.isArray(arguments[0]))a=arguments[0];else for(var e=0,t=arguments.length;t>e;e++)a.push(arguments[e]);return new Cr(function(n){var i=0,o=new st,e=vt.scheduleRecursive(function(e){var t,r;i<a.length?(t=a[i++],re(t)&&(t=Gt(t)),r=new at,o.setDisposable(r),r.setDisposable(t.subscribe(n.onNext.bind(n),e,e))):n.onCompleted()});return new Qe(o,e)})};Tt.skipUntil=function(i){var o=this;return new Cr(function(t){var r=!1,e=new Qe(o.subscribe(function(e){r&&t.onNext(e)},function(e){t.onError(e)},function(){r&&t.onCompleted()}));re(i)&&(i=Gt(i));var n=new at;return e.add(n),n.setDisposable(i.subscribe(function(){r=!0,n.dispose()},function(e){t.onError(e)},function(){n.dispose()})),e},o)};var yr=function(t){function e(e){this.source=e,t.call(this)}function n(e,t){this.o=e,this.inner=t,this.stopped=!1,this.latest=0,this.hasLatest=!1,this.isStopped=!1}function i(e,t){this.parent=e,this.id=t,this.isStopped=!1}return We(e,t),e.prototype.subscribeCore=function(e){var t=new st,r=this.source.subscribe(new n(e,t));return new Qe(r,t)},n.prototype.onNext=function(e){if(!this.isStopped){var t=new at,r=++this.latest;this.hasLatest=!0,this.inner.setDisposable(t),re(e)&&(e=Gt(e)),t.setDisposable(e.subscribe(new i(this,r)))}},n.prototype.onError=function(e){this.isStopped||(this.isStopped=!0,this.o.onError(e))},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(e){return this.isStopped?!1:(this.isStopped=!0,this.o.onError(e),!0)},i.prototype.onNext=function(e){this.isStopped||this.parent.latest===this.id&&this.parent.o.onNext(e)},i.prototype.onError=function(e){this.isStopped||(this.isStopped=!0,this.parent.latest===this.id&&this.parent.o.onError(e))},i.prototype.onCompleted=function(){this.isStopped||(this.isStopped=!0,this.parent.latest===this.id&&(this.parent.hasLatest=!1,this.parent.isStopped&&this.parent.o.onCompleted()))},i.prototype.dispose=function(){this.isStopped=!0},i.prototype.fail=function(e){return this.isStopped?!1:(this.isStopped=!0,this.parent.o.onError(e),!0)},e}(It);Tt["switch"]=Tt.switchLatest=function(){return new yr(this)};var _r=function(r){function e(e,t){this.source=e,this.other=re(t)?Gt(t):t,r.call(this)}function t(e){this.o=e,this.isStopped=!1}return We(e,r),e.prototype.subscribeCore=function(e){return new Qe(this.source.subscribe(e),this.other.subscribe(new t(e)))},t.prototype.onNext=function(e){this.isStopped||this.o.onCompleted()},t.prototype.onError=function(e){this.isStopped||(this.isStopped=!0,this.o.onError(e))},t.prototype.onCompleted=function(){!this.isStopped&&(this.isStopped=!0)},t.prototype.dispose=function(){this.isStopped=!0},t.prototype.fail=function(e){return this.isStopped?!1:(this.isStopped=!0,this.o.onError(e),!0)},e}(It);Tt.takeUntil=function(e){return new _r(this,e)},Tt.withLatestFrom=function(){for(var e=arguments.length,u=new Array(e),t=0;e>t;t++)u[t]=arguments[t];var c=u.pop(),h=this;return Array.isArray(u[0])&&(u=u[0]),new Cr(function(n){for(var e=u.length,i=f(e,I),o=!1,a=new Array(e),s=new Array(e+1),t=0;e>t;t++)!function(t){var e=u[t],r=new at;re(e)&&(e=Gt(e)),r.setDisposable(e.subscribe(function(e){a[t]=e,i[t]=!0,o=i.every(Z)},function(e){n.onError(e)},K)),s[t]=r}(t);var r=new at;return r.setDisposable(h.subscribe(function(e){var t=[e].concat(a);if(o){var r=p(c).apply(null,t);return r===Ke?n.onError(r.e):void n.onNext(r)}},function(e){n.onError(e)},function(){n.onCompleted()})),s[e]=r,new Qe(s)},this)},Tt.zip=function(){if(Array.isArray(arguments[0]))return N.apply(this,arguments);for(var e=arguments.length,s=new Array(e),t=0;e>t;t++)s[t]=arguments[t];var u=this,c=s.pop();return s.unshift(u),new Cr(function(i){for(var e=s.length,o=f(e,D),a=f(e,I),r=new Array(e),t=0;e>t;t++)!function(n){var e=s[n],t=new at;re(e)&&(e=Gt(e)),t.setDisposable(e.subscribe(function(e){if(o[n].push(e),o.every(function(e){return e.length>0})){var t=o.map(function(e){return e.shift()}),r=p(c).apply(u,t);if(r===Ke)return i.onError(r.e);i.onNext(r)}else a.filter(function(e,t){return t!==n}).every(Z)&&i.onCompleted()},function(e){i.onError(e)},function(){a[n]=!0,a.every(Z)&&i.onCompleted()})),r[n]=t}(t);return new Qe(r)},u)},Lt.zip=function(){for(var e=arguments.length,t=new Array(e),r=0;e>r;r++)t[r]=arguments[r];var n=t.shift();return n.zip.apply(n,t)},Lt.zipArray=function(){var a;if(Array.isArray(arguments[0]))a=arguments[0];else{var e=arguments.length;a=new Array(e);for(var t=0;e>t;t++)a[t]=arguments[t]}return new Cr(function(n){for(var e=a.length,i=f(e,k),o=f(e,I),t=new Array(e),r=0;e>r;r++)!function(r){t[r]=new at,t[r].setDisposable(a[r].subscribe(function(e){if(i[r].push(e),i.every(function(e){return e.length>0})){var t=i.map(function(e){return e.shift()});n.onNext(t)}else if(o.filter(function(e,t){return t!==r}).every(Z))return n.onCompleted()},function(e){n.onError(e)},function(){o[r]=!0,o.every(Z)&&n.onCompleted()}))}(r);return new Qe(t)})},Tt.asObservable=function(){var t=this;return new Cr(function(e){return t.subscribe(e)},t)},Tt.bufferWithCount=function(e,t){return"number"!=typeof t&&(t=e),this.windowWithCount(e,t).selectMany(function(e){return e.toArray()}).where(function(e){return e.length>0})},Tt.dematerialize=function(){var e=this;return new Cr(function(t){return e.subscribe(function(e){return e.accept(t)},function(e){t.onError(e)},function(){t.onCompleted()})},this)},Tt.distinctUntilChanged=function(a,s){var e=this;return s||(s=Q),new Cr(function(n){var i,o=!1;return e.subscribe(function(e){var t=e;if(a&&(t=p(a)(e),t===Ke))return n.onError(t.e);if(o){var r=p(s)(i,t);if(r===Ke)return n.onError(r.e)}o&&r||(o=!0,i=t,n.onNext(e))},function(e){n.onError(e)},function(){n.onCompleted()})},this)};var br=function(i){function e(e,t,r,n){this.source=e,this.t=!t||ne(t)?Ct(t||K,r||K,n||K):t,i.call(this)}function t(e,t){this.o=e,this.t=t,this.isStopped=!1}return We(e,i),e.prototype.subscribeCore=function(e){return this.source.subscribe(new t(e,this.t))},t.prototype.onNext=function(e){if(!this.isStopped){var t=p(this.t.onNext).call(this.t,e);t===Ke&&this.o.onError(t.e),this.o.onNext(e)}},t.prototype.onError=function(e){if(!this.isStopped){this.isStopped=!0;var t=p(this.t.onError).call(this.t,e);if(t===Ke)return this.o.onError(t.e);this.o.onError(e)}},t.prototype.onCompleted=function(){if(!this.isStopped){this.isStopped=!0;var e=p(this.t.onCompleted).call(this.t);if(e===Ke)return this.o.onError(e.e);this.o.onCompleted()}},t.prototype.dispose=function(){this.isStopped=!0},t.prototype.fail=function(e){return this.isStopped?!1:(this.isStopped=!0,this.o.onError(e),!0)},e}(It);Tt["do"]=Tt.tap=Tt.doAction=function(e,t,r){return new br(this,e,t,r)},Tt.doOnNext=Tt.tapOnNext=function(t,r){return this.tap("undefined"!=typeof r?function(e){t.call(r,e)}:t)},Tt.doOnError=Tt.tapOnError=function(t,r){return this.tap(K,"undefined"!=typeof r?function(e){t.call(r,e)}:t)},Tt.doOnCompleted=Tt.tapOnCompleted=function(e,t){return this.tap(K,null,"undefined"!=typeof t?function(){e.call(t)}:e)},Tt["finally"]=Tt.ensure=function(r){var n=this;return new Cr(function(e){var t;try{t=n.subscribe(e)}catch(e){throw r(),e}return rt(function(){try{t.dispose()}catch(e){throw e}finally{r()}})},this)},Tt.finallyAction=function(e){return this.ensure(e)};var xr=function(t){function e(e){this.source=e,t.call(this)}function r(e){this.o=e,this.isStopped=!1}return We(e,t),e.prototype.subscribeCore=function(e){return this.source.subscribe(new r(e))},r.prototype.onNext=K,r.prototype.onError=function(e){this.isStopped||(this.isStopped=!0,this.o.onError(e))},r.prototype.onCompleted=function(){this.isStopped||(this.isStopped=!0,this.o.onCompleted())},r.prototype.dispose=function(){this.isStopped=!0},r.prototype.fail=function(e){return this.isStopped?!1:(this.isStopped=!0,this.observer.onError(e),!0)},e}(It);Tt.ignoreElements=function(){return new xr(this)},Tt.materialize=function(){var e=this;return new Cr(function(t){return e.subscribe(function(e){t.onNext(wt(e))},function(e){t.onNext(St(e)),t.onCompleted()},function(){t.onNext(Mt()),t.onCompleted()})},e)},Tt.repeat=function(e){return Ft(this,e).concat()},Tt.retry=function(e){return Ft(this,e).catchError()},Tt.retryWhen=function(e){return Ft(this).catchErrorWhen(e)};var wr=function(i){function e(e,t,r,n){this.source=e,this.accumulator=t,this.hasSeed=r,this.seed=n,i.call(this)}return We(e,i),e.prototype.subscribeCore=function(e){return this.source.subscribe(new B(e,this))},e}(It);B.prototype.onNext=function(e){if(!this.isStopped){!this.hasValue&&(this.hasValue=!0);try{this.hasAccumulation?this.accumulation=this.accumulator(this.accumulation,e):(this.accumulation=this.hasSeed?this.accumulator(this.seed,e):e,this.hasAccumulation=!0)}catch(e){return this.observer.onError(e)}this.observer.onNext(this.accumulation)}},B.prototype.onError=function(e){this.isStopped||(this.isStopped=!0,this.observer.onError(e))},B.prototype.onCompleted=function(){this.isStopped||(this.isStopped=!0,!this.hasValue&&this.hasSeed&&this.observer.onNext(this.seed),this.observer.onCompleted())},B.prototype.dispose=function(){this.isStopped=!0},B.prototype.fail=function(e){return this.isStopped?!1:(this.isStopped=!0,this.observer.onError(e),!0)},Tt.scan=function(){var e,t,r=!1;return 2===arguments.length?(r=!0,e=arguments[0],t=arguments[1]):t=arguments[0],new wr(this,t,r,e)},Tt.skipLast=function(n){if(0>n)throw new he;var e=this;return new Cr(function(t){var r=[];return e.subscribe(function(e){r.push(e),r.length>n&&t.onNext(r.shift())},function(e){t.onError(e)},function(){t.onCompleted()})},e)},Tt.startWith=function(){var e,t=0;arguments.length&&pt(arguments[0])?(e=arguments[0],t=1):e=vt;for(var r=[],n=t,i=arguments.length;i>n;n++)r.push(arguments[n]);return zt([Jt(r,e),this]).concat()},Tt.takeLast=function(n){if(0>n)throw new he;var e=this;return new Cr(function(t){var r=[];return e.subscribe(function(e){r.push(e),r.length>n&&r.shift()},function(e){t.onError(e)},function(){for(;r.length>0;)t.onNext(r.shift());t.onCompleted()})},e)},Tt.takeLastBuffer=function(n){var e=this;return new Cr(function(t){var r=[];return e.subscribe(function(e){r.push(e),r.length>n&&r.shift()},function(e){t.onError(e)},function(){t.onNext(r),t.onCompleted()})},e)},Tt.windowWithCount=function(s,u){var n=this;if(+s||(s=0),Math.abs(s)===1/0&&(s=0),0>=s)throw new he;if(null==u&&(u=s),+u||(u=0),Math.abs(u)===1/0&&(u=0),0>=u)throw new he;return new Cr(function(t){function i(){var e=new Pr;a.push(e),t.onNext(Ye(e,r))}var e=new at,r=new ut(e),o=0,a=[];return i(),e.setDisposable(n.subscribe(function(e){for(var t=0,r=a.length;r>t;t++)a[t].onNext(e);var n=o-s+1;n>=0&&n%u===0&&a.shift().onCompleted(),++o%u===0&&i()},function(e){for(;a.length>0;)a.shift().onError(e);t.onError(e)},function(){for(;a.length>0;)a.shift().onCompleted();t.onCompleted()})),r},n)},Tt.selectConcat=Tt.concatMap=function(t,i,e){return ne(t)&&ne(i)?this.concatMap(function(r,n){var e=t(r,n);return re(e)&&(e=Gt(e)),(ye(e)||ge(e))&&(e=Kt(e)),e.map(function(e,t){return i(r,e,n,t)})}):ne(t)?F(this,t,e):F(this,function(){return t})},Tt.concatMapObserver=Tt.selectConcatObserver=function(e,t,r,n){var i=this,o=be(e,n,2),a=be(t,n,1),s=be(r,n,0);return new Cr(function(r){var n=0;return i.subscribe(function(e){var t;try{t=o(e,n++)}catch(e){return void r.onError(e)}re(t)&&(t=Gt(t)),r.onNext(t)},function(e){var t;try{t=a(e)}catch(e){return void r.onError(e)}re(t)&&(t=Gt(t)),r.onNext(t),r.onCompleted()},function(){var e;try{e=s()}catch(e){return void r.onError(e)}re(e)&&(e=Gt(e)),r.onNext(e),r.onCompleted()})},this).concatAll()},Tt.defaultIfEmpty=function(e){var n=this;return e===a&&(e=null),new Cr(function(t){var r=!1;return n.subscribe(function(e){r=!0,t.onNext(e)},function(e){t.onError(e)},function(){!r&&t.onNext(e),t.onCompleted()})},n)},z.prototype.push=function(e){var t=-1===$(this.set,e,this.comparer);return t&&this.set.push(e),t},Tt.distinct=function(i,e){var t=this;return e||(e=Q),new Cr(function(r){var n=new z(e);return t.subscribe(function(e){var t=e;if(i)try{t=i(e)}catch(e){return void r.onError(e)}n.push(t)&&r.onNext(e)},function(e){r.onError(e)},function(){r.onCompleted()})},this)};var Sr=function(n){function r(e,t,r){this.source=e,this.selector=be(t,r,3),n.call(this)}function i(n,i){return function(e,t,r){return n.call(this,i.selector(e,t,r),t,r)}}function t(e,t,r){this.o=e,this.selector=t,this.source=r,this.i=0,this.isStopped=!1}return We(r,n),r.prototype.internalMap=function(e,t){return new r(this.source,i(e,this),t)},r.prototype.subscribeCore=function(e){return this.source.subscribe(new t(e,this.selector,this))},t.prototype.onNext=function(e){if(!this.isStopped){var t=p(this.selector)(e,this.i++,this.source);return t===Ke?this.o.onError(t.e):void this.o.onNext(t)}},t.prototype.onError=function(e){this.isStopped||(this.isStopped=!0,this.o.onError(e))},t.prototype.onCompleted=function(){this.isStopped||(this.isStopped=!0,this.o.onCompleted())},t.prototype.dispose=function(){this.isStopped=!0},t.prototype.fail=function(e){return this.isStopped?!1:(this.isStopped=!0,this.o.onError(e),!0)},r}(It);Tt.map=Tt.select=function(e,t){var r="function"==typeof e?e:function(){return e};return this instanceof Sr?this.internalMap(r,t):new Sr(this,r,t)},Tt.pluck=function(){var i=arguments,o=arguments.length;if(0===o)throw new Error("List of properties cannot be empty.");return this.map(function(e){for(var t=e,r=0;o>r;r++){var n=t[i[r]];if("undefined"==typeof n)return a;t=n}return t})},Tt.flatMapObserver=Tt.selectManyObserver=function(i,o,t,a){var e=this;return new Cr(function(r){var n=0;return e.subscribe(function(e){var t;try{t=i.call(a,e,n++)}catch(e){return void r.onError(e)}re(t)&&(t=Gt(t)),r.onNext(t)},function(e){var t;try{t=o.call(a,e)}catch(e){return void r.onError(e)}re(t)&&(t=Gt(t)),r.onNext(t),r.onCompleted()},function(){var e;try{e=t.call(a)}catch(e){return void r.onError(e)}re(e)&&(e=Gt(e)),r.onNext(e),r.onCompleted()})},e).mergeAll()},Tt.selectMany=Tt.flatMap=function(t,i,e){return ne(t)&&ne(i)?this.flatMap(function(r,n){var e=t(r,n);return re(e)&&(e=Gt(e)),(ye(e)||ge(e))&&(e=Kt(e)),e.map(function(e,t){return i(r,e,n,t)})},e):ne(t)?U(this,t,e):U(this,function(){return t})},Tt.selectSwitch=Tt.flatMapLatest=Tt.switchMap=function(e,t){return this.select(e,t).switchLatest()};var Mr=function(r){function e(e,t){this.source=e,this.skipCount=t,r.call(this)}function t(e,t){this.c=t,this.r=t,this.o=e,this.isStopped=!1}return We(e,r),e.prototype.subscribeCore=function(e){return this.source.subscribe(new t(e,this.skipCount))},t.prototype.onNext=function(e){this.isStopped||(this.r<=0?this.o.onNext(e):this.r--)},t.prototype.onError=function(e){this.isStopped||(this.isStopped=!0,this.o.onError(e))},t.prototype.onCompleted=function(){this.isStopped||(this.isStopped=!0,this.o.onCompleted())},t.prototype.dispose=function(){this.isStopped=!0},t.prototype.fail=function(e){return this.isStopped?!1:(this.isStopped=!0,this.o.onError(e),!0)},e}(It);Tt.skip=function(e){if(0>e)throw new he;return new Mr(this,e)},Tt.skipWhile=function(e,t){var i=this,o=be(e,t,3);return new Cr(function(t){var r=0,n=!1;return i.subscribe(function(e){if(!n)try{n=!o(e,r++,i)}catch(e){return void t.onError(e)}n&&t.onNext(e)},function(e){t.onError(e)},function(){t.onCompleted()})},i)},Tt.take=function(e,t){if(0>e)throw new he;if(0===e)return qt(t);var n=this;return new Cr(function(t){var r=e;return n.subscribe(function(e){r-- >0&&(t.onNext(e),0>=r&&t.onCompleted())},function(e){t.onError(e)},function(){t.onCompleted()})},n)},Tt.takeWhile=function(e,t){var i=this,o=be(e,t,3);return new Cr(function(t){var r=0,n=!0;return i.subscribe(function(e){if(n){try{n=o(e,r++,i)}catch(e){return void t.onError(e)}n?t.onNext(e):t.onCompleted()}},function(e){t.onError(e)},function(){t.onCompleted()})},i)};var Er=function(n){function r(e,t,r){this.source=e,this.predicate=be(t,r,3),n.call(this)}function i(n,i){return function(e,t,r){return i.predicate(e,t,r)&&n.call(this,e,t,r)}}function t(e,t,r){this.o=e,this.predicate=t,this.source=r,this.i=0,this.isStopped=!1}return We(r,n),r.prototype.subscribeCore=function(e){return this.source.subscribe(new t(e,this.predicate,this))},r.prototype.internalFilter=function(e,t){return new r(this.source,i(e,this),t)},t.prototype.onNext=function(e){if(!this.isStopped){var t=p(this.predicate)(e,this.i++,this.source);return t===Ke?this.o.onError(t.e):void(t&&this.o.onNext(e))}},t.prototype.onError=function(e){this.isStopped||(this.isStopped=!0,this.o.onError(e))},t.prototype.onCompleted=function(){this.isStopped||(this.isStopped=!0,this.o.onCompleted())},t.prototype.dispose=function(){this.isStopped=!0},t.prototype.fail=function(e){return this.isStopped?!1:(this.isStopped=!0,this.o.onError(e),!0)},r}(It);Tt.filter=Tt.where=function(e,t){return this instanceof Er?this.internalFilter(e,t):new Er(this,e,t)},Tt.transduce=function(e){function n(e){return{"@@transducer/init":function(){return e},"@@transducer/step":function(e,t){return e.onNext(t)},"@@transducer/result":function(e){return e.onCompleted()}}}var i=this;return new Cr(function(t){var r=e(n(t));return i.subscribe(function(e){try{r["@@transducer/step"](t,e)}catch(e){t.onError(e)}},function(e){t.onError(e)},function(){r["@@transducer/result"](t)})},i)};var Cr=Y.AnonymousObservable=function(r){function o(e){return e&&ne(e.dispose)?e:ne(e)?rt(e):nt}function i(e,t){var r=t[0],n=t[1],i=p(n)(r);return i!==Ke||r.fail(Ke.e)?void r.setDisposable(o(i)):d(Ke.e)}function e(n,e){function t(e){var t=new Tr(e),r=[t,n];return mt.scheduleRequired()?mt.scheduleWithState(r,i):i(null,r),t}this.source=e,r.call(this,t)}return We(e,r),e}(Lt),Tr=function(t){function e(e){t.call(this),this.observer=e,this.m=new at}We(e,t);var r=e.prototype;return r.next=function(e){var t=p(this.observer.onNext).call(this.observer,e);t===Ke&&(this.dispose(),d(t.e))},r.error=function(e){var t=p(this.observer.onError).call(this.observer,e);this.dispose(),t===Ke&&d(t.e)},r.completed=function(){var e=p(this.observer.onCompleted).call(this.observer);this.dispose(),e===Ke&&d(e.e)},r.setDisposable=function(e){this.m.setDisposable(e)},r.getDisposable=function(){return this.m.getDisposable()},r.dispose=function(){t.prototype.dispose.call(this),this.m.dispose()},e}(Ot),Or=function(e,t){this.subject=e,this.observer=t};Or.prototype.dispose=function(){if(!this.subject.isDisposed&&null!==this.observer){var e=this.subject.observers.indexOf(this.observer);this.subject.observers.splice(e,1),this.observer=null}};var Pr=Y.Subject=function(e){function t(e){return ot(this),this.isStopped?this.hasError?(e.onError(this.error),nt):(e.onCompleted(),nt):(this.observers.push(e),new Or(this,e))}function r(){e.call(this,t),this.isDisposed=!1,this.isStopped=!1,this.observers=[],this.hasError=!1}return We(r,e),Xe(r.prototype,Et.prototype,{hasObservers:function(){return this.observers.length>0},onCompleted:function(){if(ot(this),!this.isStopped){this.isStopped=!0;for(var e=0,t=i(this.observers),r=t.length;r>e;e++)t[e].onCompleted();this.observers.length=0}},onError:function(e){if(ot(this),!this.isStopped){this.isStopped=!0,this.error=e,this.hasError=!0;for(var t=0,r=i(this.observers),n=r.length;n>t;t++)r[t].onError(e);this.observers.length=0}},onNext:function(e){if(ot(this),!this.isStopped)for(var t=0,r=i(this.observers),n=r.length;n>t;t++)r[t].onNext(e)},dispose:function(){this.isDisposed=!0,this.observers=null}}),r.create=function(e,t){return new Ar(e,t)},r}(Lt),Ar=(Y.AsyncSubject=function(e){function t(e){return ot(this),this.isStopped?(this.hasError?e.onError(this.error):this.hasValue?(e.onNext(this.value),e.onCompleted()):e.onCompleted(),nt):(this.observers.push(e),new Or(this,e))}function r(){e.call(this,t),this.isDisposed=!1,this.isStopped=!1,this.hasValue=!1,this.observers=[],this.hasError=!1}return We(r,e),Xe(r.prototype,Et,{hasObservers:function(){return ot(this),this.observers.length>0},onCompleted:function(){var e,t;if(ot(this),!this.isStopped){this.isStopped=!0;var r=i(this.observers),t=r.length;if(this.hasValue)for(e=0;t>e;e++){var n=r[e];n.onNext(this.value),n.onCompleted()}else for(e=0;t>e;e++)r[e].onCompleted();this.observers.length=0}},onError:function(e){if(ot(this),!this.isStopped){this.isStopped=!0,this.hasError=!0,this.error=e;for(var t=0,r=i(this.observers),n=r.length;n>t;t++)r[t].onError(e);this.observers.length=0}},onNext:function(e){ot(this),this.isStopped||(this.value=e,this.hasValue=!0)},dispose:function(){this.isDisposed=!0,this.observers=null,this.exception=null,this.value=null}}),r}(Lt),Y.AnonymousSubject=function(r){function n(e){return this.observable.subscribe(e)}function e(e,t){this.observer=e,this.observable=t,r.call(this,n)}return We(e,r),Xe(e.prototype,Et.prototype,{onCompleted:function(){this.observer.onCompleted()},onError:function(e){this.observer.onError(e)},onNext:function(e){this.observer.onNext(e)}}),e}(Lt));"function"==typeof Dr&&"object"==typeof Dr.amd&&Dr.amd?(V.Rx=Y,Dr(function(){return Y})):H&&q?W?(q.exports=Y).Rx=Y:H.Rx=Y:V.Rx=Y;var jr=e()}).call(this)}).call(this,e(150),"undefined"!=typeof n?n:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{150:150}]},{},[1])(1)})}).call(this,typeof global!=="undefined"?global:typeof self!=="undefined"?self:typeof window!=="undefined"?window:{})},{}],16:[function(i,o,e){(function(e){var t=typeof e!=="undefined"?e:typeof window!=="undefined"?window:{};var r=i("min-document");var n;if(typeof document!=="undefined"){n=document}else{n=t["__GLOBAL_DOCUMENT_CACHE@4"];if(!n){n=t["__GLOBAL_DOCUMENT_CACHE@4"]=r}}o.exports=n}).call(this,typeof global!=="undefined"?global:typeof self!=="undefined"?self:typeof window!=="undefined"?window:{})},{"min-document":4}],17:[function(e,t,r){r.read=function(e,t,r,n,i){var o,a;var s=i*8-n-1;var u=(1<<s)-1;var c=u>>1;var h=-7;var l=r?i-1:0;var p=r?-1:1;var f=e[t+l];l+=p;o=f&(1<<-h)-1;f>>=-h;h+=s;for(;h>0;o=o*256+e[t+l],l+=p,h-=8){}a=o&(1<<-h)-1;o>>=-h;h+=n;for(;h>0;a=a*256+e[t+l],l+=p,h-=8){}if(o===0){o=1-c}else if(o===u){return a?NaN:(f?-1:1)*Infinity}else{a=a+Math.pow(2,n);o=o-c}return(f?-1:1)*a*Math.pow(2,o-n)};r.write=function(e,t,r,n,i,o){var a,s,u;var c=o*8-i-1;var h=(1<<c)-1;var l=h>>1;var p=i===23?Math.pow(2,-24)-Math.pow(2,-77):0;var f=n?0:o-1;var d=n?1:-1;var v=t<0||t===0&&1/t<0?1:0;t=Math.abs(t);if(isNaN(t)||t===Infinity){s=isNaN(t)?1:0;a=h}else{a=Math.floor(Math.log(t)/Math.LN2);if(t*(u=Math.pow(2,-a))<1){a--;u*=2}if(a+l>=1){t+=p/u}else{t+=p*Math.pow(2,1-l)}if(t*u>=2){a++;u/=2}if(a+l>=h){s=0;a=h}else if(a+l>=1){s=(t*u-1)*Math.pow(2,i);a=a+l}else{s=t*Math.pow(2,l-1)*Math.pow(2,i);a=0}}for(;i>=8;e[r+f]=s&255,f+=d,s/=256,i-=8){}a=a<<i|s;c+=i;for(;c>0;e[r+f]=a&255,f+=d,a/=256,c-=8){}e[r+f-d]|=v*128}},{}],18:[function(e,n,t){(function(e){"use strict";var r=typeof window!=="undefined"?window:typeof e!=="undefined"?e:{};n.exports=t;function t(e,t){if(e in r){return r[e]}r[e]=t;return t}}).call(this,typeof global!=="undefined"?global:typeof self!=="undefined"?self:typeof window!=="undefined"?window:{})},{}],19:[function(e,t,r){"use strict";var a=e("./index.js");t.exports=n;function n(e,t,r){var n="__INDIVIDUAL_ONE_VERSION_"+e;var i=n+"_ENFORCE_SINGLETON";var o=a(i,t);if(o!==t){throw new Error("Can only have one copy of "+e+".\n"+"You already have version "+o+" installed.\n"+"This means you cannot install version "+t)}return a(n,r)}},{"./index.js":18}],20:[function(e,t,r){"use strict";t.exports=function e(t){return typeof t==="object"&&t!==null}},{}],21:[function(e,t,r){"use strict";var m={};m.base32="0123456789bcdefghjkmnpqrstuvwxyz";m.encode=function(e,t,r){if(typeof r=="undefined"){for(var n=1;n<=12;n++){var i=m.encode(e,t,n);var o=m.decode(i);if(o.lat==e&&o.lon==t)return i}r=12}e=Number(e);t=Number(t);r=Number(r);if(isNaN(e)||isNaN(t)||isNaN(r))throw new Error("Invalid geohash");var a=0;var s=0;var u=true;var c="";var h=-90,l=90;var p=-180,f=180;while(c.length<r){if(u){var d=(p+f)/2;if(t>=d){a=a*2+1;p=d}else{a=a*2;f=d}}else{var v=(h+l)/2;if(e>=v){a=a*2+1;h=v}else{a=a*2;l=v}}u=!u;if(++s==5){c+=m.base32.charAt(a);s=0;a=0}}return c};m.decode=function(e){var t=m.bounds(e);var r=t.sw.lat,n=t.sw.lon;var i=t.ne.lat,o=t.ne.lon;var a=(r+i)/2;var s=(n+o)/2;a=a.toFixed(Math.floor(2-Math.log(i-r)/Math.LN10));s=s.toFixed(Math.floor(2-Math.log(o-n)/Math.LN10));return{lat:Number(a),lon:Number(s)}};m.bounds=function(e){if(e.length===0)throw new Error("Invalid geohash");e=e.toLowerCase();var t=true;var r=-90,n=90;var i=-180,o=180;for(var a=0;a<e.length;a++){var s=e.charAt(a);var u=m.base32.indexOf(s);if(u==-1)throw new Error("Invalid geohash");for(var c=4;c>=0;c--){var h=u>>c&1;if(t){var l=(i+o)/2;if(h==1){i=l}else{o=l}}else{var p=(r+n)/2;if(h==1){r=p}else{n=p}}t=!t}}var f={sw:{lat:r,lon:i},ne:{lat:n,lon:o}};return f};m.adjacent=function(e,t){e=e.toLowerCase();t=t.toLowerCase();if(e.length===0)throw new Error("Invalid geohash");if("nsew".indexOf(t)==-1)throw new Error("Invalid direction");var r={n:["p0r21436x8zb9dcf5h7kjnmqesgutwvy","bc01fg45238967deuvhjyznpkmstqrwx"],s:["14365h7k9dcfesgujnmqp0r2twvyx8zb","238967debc01fg45kmstqrwxuvhjyznp"],e:["bc01fg45238967deuvhjyznpkmstqrwx","p0r21436x8zb9dcf5h7kjnmqesgutwvy"],w:["238967debc01fg45kmstqrwxuvhjyznp","14365h7k9dcfesgujnmqp0r2twvyx8zb"]};var n={n:["prxz","bcfguvyz"],s:["028b","0145hjnp"],e:["bcfguvyz","prxz"],w:["0145hjnp","028b"]};var i=e.slice(-1);var o=e.slice(0,-1);var a=e.length%2;if(n[t][a].indexOf(i)!=-1&&o!==""){o=m.adjacent(o,t)}return o+m.base32.charAt(r[t][a].indexOf(i))};m.neighbours=function(e){return{n:m.adjacent(e,"n"),ne:m.adjacent(m.adjacent(e,"n"),"e"),e:m.adjacent(e,"e"),se:m.adjacent(m.adjacent(e,"s"),"e"),s:m.adjacent(e,"s"),sw:m.adjacent(m.adjacent(e,"s"),"w"),w:m.adjacent(e,"w"),nw:m.adjacent(m.adjacent(e,"n"),"w")}};if(typeof t!="undefined"&&t.exports)t.exports=m},{}],22:[function(e,r,n){(function(e,t){typeof n==="object"&&typeof r!=="undefined"?t(n):typeof o==="function"&&o.amd?o(["exports"],t):t(e.martinez={})})(this,function(e){"use strict";function n(e,t){return e>t?1:e<t?-1:0}var m=function e(t,r){if(t===void 0)t=n;if(r===void 0)r=false;this._compare=t;this._root=null;this._size=0;this._noDuplicates=!!r};var t={size:{configurable:true}};m.prototype.rotateLeft=function e(t){var r=t.right;if(r){t.right=r.left;if(r.left){r.left.parent=t}r.parent=t.parent}if(!t.parent){this._root=r}else if(t===t.parent.left){t.parent.left=r}else{t.parent.right=r}if(r){r.left=t}t.parent=r};m.prototype.rotateRight=function e(t){var r=t.left;if(r){t.left=r.right;if(r.right){r.right.parent=t}r.parent=t.parent}if(!t.parent){this._root=r}else if(t===t.parent.left){t.parent.left=r}else{t.parent.right=r}if(r){r.right=t}t.parent=r};m.prototype._splay=function e(t){var r=this;while(t.parent){var n=t.parent;if(!n.parent){if(n.left===t){r.rotateRight(n)}else{r.rotateLeft(n)}}else if(n.left===t&&n.parent.left===n){r.rotateRight(n.parent);r.rotateRight(n)}else if(n.right===t&&n.parent.right===n){r.rotateLeft(n.parent);r.rotateLeft(n)}else if(n.left===t&&n.parent.right===n){r.rotateRight(n);r.rotateLeft(n)}else{r.rotateLeft(n);r.rotateRight(n)}}};m.prototype.splay=function e(t){var r=this;var n,i,o,a,s;while(t.parent){n=t.parent;i=n.parent;if(i&&i.parent){o=i.parent;if(o.left===i){o.left=t}else{o.right=t}t.parent=o}else{t.parent=null;r._root=t}a=t.left;s=t.right;if(t===n.left){if(i){if(i.left===n){if(n.right){i.left=n.right;i.left.parent=i}else{i.left=null}n.right=i;i.parent=n}else{if(a){i.right=a;a.parent=i}else{i.right=null}t.left=i;i.parent=t}}if(s){n.left=s;s.parent=n}else{n.left=null}t.right=n;n.parent=t}else{if(i){if(i.right===n){if(n.left){i.right=n.left;i.right.parent=i}else{i.right=null}n.left=i;i.parent=n}else{if(s){i.left=s;s.parent=i}else{i.left=null}t.right=i;i.parent=t}}if(a){n.right=a;a.parent=n}else{n.right=null}t.left=n;n.parent=t}}};m.prototype.replace=function e(t,r){if(!t.parent){this._root=r}else if(t===t.parent.left){t.parent.left=r}else{t.parent.right=r}if(r){r.parent=t.parent}};m.prototype.minNode=function e(t){if(t===void 0)t=this._root;if(t){while(t.left){t=t.left}}return t};m.prototype.maxNode=function e(t){if(t===void 0)t=this._root;if(t){while(t.right){t=t.right}}return t};m.prototype.insert=function e(t,r){var n=this._root;var i=null;var o=this._compare;var a;if(this._noDuplicates){while(n){i=n;a=o(n.key,t);if(a===0){return}else if(o(n.key,t)<0){n=n.right}else{n=n.left}}}else{while(n){i=n;if(o(n.key,t)<0){n=n.right}else{n=n.left}}}n={key:t,data:r,left:null,right:null,parent:i};if(!i){this._root=n}else if(o(i.key,n.key)<0){i.right=n}else{i.left=n}this.splay(n);this._size++;return n};m.prototype.find=function e(t){var r=this._root;var n=this._compare;while(r){var i=n(r.key,t);if(i<0){r=r.right}else if(i>0){r=r.left}else{return r}}return null};m.prototype.contains=function e(t){var r=this._root;var n=this._compare;while(r){var i=n(t,r.key);if(i===0){return true}else if(i<0){r=r.left}else{r=r.right}}return false};m.prototype.remove=function e(t){var r=this.find(t);if(!r){return false}this.splay(r);if(!r.left){this.replace(r,r.right)}else if(!r.right){this.replace(r,r.left)}else{var n=this.minNode(r.right);if(n.parent!==r){this.replace(n,n.right);n.right=r.right;n.right.parent=n}this.replace(r,n);n.left=r.left;n.left.parent=n}this._size--;return true};m.prototype.removeNode=function e(t){if(!t){return false}this.splay(t);if(!t.left){this.replace(t,t.right)}else if(!t.right){this.replace(t,t.left)}else{var r=this.minNode(t.right);if(r.parent!==t){this.replace(r,r.right);r.right=t.right;r.right.parent=r}this.replace(t,r);r.left=t.left;r.left.parent=r}this._size--;return true};m.prototype.erase=function e(t){var r=this.find(t);if(!r){return}this.splay(r);var n=r.left;var i=r.right;var o=null;if(n){n.parent=null;o=this.maxNode(n);this.splay(o);this._root=o}if(i){if(n){o.right=i}else{this._root=i}i.parent=o}this._size--};m.prototype.pop=function e(){var t=this._root,r=null;if(t){while(t.left){t=t.left}r={key:t.key,data:t.data};this.remove(t.key)}return r};m.prototype.next=function e(t){var r=t;if(r){if(r.right){r=r.right;while(r&&r.left){r=r.left}}else{r=t.parent;while(r&&r.right===t){t=r;r=r.parent}}}return r};m.prototype.prev=function e(t){var r=t;if(r){if(r.left){r=r.left;while(r&&r.right){r=r.right}}else{r=t.parent;while(r&&r.left===t){t=r;r=r.parent}}}return r};m.prototype.forEach=function e(t){var r=this._root;var n=[],i=false,o=0;while(!i){if(r){n.push(r);r=r.left}else{if(n.length>0){r=n.pop();t(r,o++);r=r.right}else{i=true}}}return this};m.prototype.range=function e(t,r,n,i){var o=this;var a=[];var s=this._compare;var u=this._root,c;while(a.length!==0||u){if(u){a.push(u);u=u.left}else{u=a.pop();c=s(u.key,r);if(c>0){break}else if(s(u.key,t)>=0){if(n.call(i,u)){return o}}u=u.right}}return this};m.prototype.keys=function e(){var t=this._root;var r=[],n=[],i=false;while(!i){if(t){r.push(t);t=t.left}else{if(r.length>0){t=r.pop();n.push(t.key);t=t.right}else{i=true}}}return n};m.prototype.values=function e(){var t=this._root;var r=[],n=[],i=false;while(!i){if(t){r.push(t);t=t.left}else{if(r.length>0){t=r.pop();n.push(t.data);t=t.right}else{i=true}}}return n};m.prototype.at=function e(t){var r=this._root;var n=[],i=false,o=0;while(!i){if(r){n.push(r);r=r.left}else{if(n.length>0){r=n.pop();if(o===t){return r}o++;r=r.right}else{i=true}}}return null};m.prototype.load=function e(t,r,n){if(t===void 0)t=[];if(r===void 0)r=[];if(n===void 0)n=false;if(this._size!==0){throw new Error("bulk-load: tree is not empty")}var i=t.length;if(n){c(t,r,0,i-1,this._compare)}this._root=h(null,t,r,0,i);this._size=i;return this};m.prototype.min=function e(){var t=this.minNode(this._root);if(t){return t.key}else{return null}};m.prototype.max=function e(){var t=this.maxNode(this._root);if(t){return t.key}else{return null}};m.prototype.isEmpty=function e(){return this._root===null};t.size.get=function(){return this._size};m.createTree=function e(t,r,n,i,o){return new m(n,o).load(t,r,i)};Object.defineProperties(m.prototype,t);function h(e,t,r,n,i){var o=i-n;if(o>0){var a=n+Math.floor(o/2);var s=t[a];var u=r[a];var c={key:s,data:u,parent:e};c.left=h(c,t,r,n,a);c.right=h(c,t,r,a+1,i);return c}return null}function c(e,t,r,n,i){if(r>=n){return}var o=e[r+n>>1];var a=r-1;var s=n+1;while(true){do{a++}while(i(e[a],o)<0);do{s--}while(i(e[s],o)>0);if(a>=s){break}var u=e[a];e[a]=e[s];e[s]=u;u=t[a];t[a]=t[s];t[s]=u}c(e,t,r,s,i);c(e,t,s+1,n,i)}var a=0;var u=1;var l=2;var p=3;var g=0;var s=1;var y=2;var f=3;function _(e,t,r){if(t===null){e.inOut=false;e.otherInOut=true}else{if(e.isSubject===t.isSubject){e.inOut=!t.inOut;e.otherInOut=t.otherInOut}else{e.inOut=!t.otherInOut;e.otherInOut=t.isVertical()?!t.inOut:t.inOut}if(t){e.prevInResult=!i(t,r)||t.isVertical()?t.prevInResult:t}}e.inResult=i(e,r)}function i(e,t){switch(e.type){case a:switch(t){case g:return!e.otherInOut;case s:return e.otherInOut;case y:return e.isSubject&&e.otherInOut||!e.isSubject&&!e.otherInOut;case f:return true}break;case l:return t===g||t===s;case p:return t===y;case u:return false}return false}var d=function e(t,r,n,i,o){this.left=r;this.point=t;this.otherEvent=n;this.isSubject=i;this.type=o||a;this.inOut=false;this.otherInOut=false;this.prevInResult=null;this.inResult=false;this.resultInOut=false;this.isExteriorRing=true};d.prototype.isBelow=function e(t){var r=this.point,n=this.otherEvent.point;return this.left?(r[0]-t[0])*(n[1]-t[1])-(n[0]-t[0])*(r[1]-t[1])>0:(n[0]-t[0])*(r[1]-t[1])-(r[0]-t[0])*(n[1]-t[1])>0};d.prototype.isAbove=function e(t){return!this.isBelow(t)};d.prototype.isVertical=function e(){return this.point[0]===this.otherEvent.point[0]};d.prototype.clone=function e(){var t=new d(this.point,this.left,this.otherEvent,this.isSubject,this.type);t.inResult=this.inResult;t.prevInResult=this.prevInResult;t.isExteriorRing=this.isExteriorRing;t.inOut=this.inOut;t.otherInOut=this.otherInOut;return t};function v(e,t){if(e[0]===t[0]){if(e[1]===t[1]){return true}else{return false}}return false}function o(e,t,r){return(e[0]-r[0])*(t[1]-r[1])-(t[0]-r[0])*(e[1]-r[1])}function b(e,t){var r=e.point;var n=t.point;if(r[0]>n[0]){return 1}if(r[0]<n[0]){return-1}if(r[1]!==n[1]){return r[1]>n[1]?1:-1}return x(e,t,r,n)}function x(e,t,r,n){if(e.left!==t.left){return e.left?1:-1}if(o(r,e.otherEvent.point,t.otherEvent.point)!==0){return!e.isBelow(t.otherEvent.point)?1:-1}return!e.isSubject&&t.isSubject?1:-1}function w(e,t,r){var n=new d(t,false,e,e.isSubject);var i=new d(t,true,e.otherEvent,e.isSubject);if(v(e.point,e.otherEvent.point)){console.warn("what is that, a collapsed segment?",e)}n.contourId=i.contourId=e.contourId;if(b(i,e.otherEvent)>0){e.otherEvent.left=true;i.left=false}e.otherEvent.otherEvent=i;e.otherEvent=n;r.push(i);r.push(n);return r}function S(e,t){return e[0]*t[1]-e[1]*t[0]}function M(e,t){return e[0]*t[0]+e[1]*t[1]}function E(e,t,r,n,i){var o=[t[0]-e[0],t[1]-e[1]];var a=[n[0]-r[0],n[1]-r[1]];function s(e,t,r){return[e[0]+t*r[0],e[1]+t*r[1]]}var u=[r[0]-e[0],r[1]-e[1]];var c=S(o,a);var h=c*c;var l=M(o,o);if(h>0){var p=S(u,a)/c;if(p<0||p>1){return null}var f=S(u,o)/c;if(f<0||f>1){return null}if(p===0||p===1){return i?null:[s(e,p,o)]}if(f===0||f===1){return i?null:[s(r,f,a)]}return[s(e,p,o)]}c=S(u,o);h=c*c;if(h>0){return null}var d=M(o,u)/l;var v=d+M(o,a)/l;var m=Math.min(d,v);var g=Math.max(d,v);if(m<=1&&g>=0){if(m===1){return i?null:[s(e,m>0?m:0,o)]}if(g===0){return i?null:[s(e,g<1?g:1,o)]}if(i&&m===0&&g===1){return null}return[s(e,m>0?m:0,o),s(e,g<1?g:1,o)]}return null}function C(e,t,r){var n=E(e.point,e.otherEvent.point,t.point,t.otherEvent.point);var i=n?n.length:0;if(i===0){return 0}if(i===1&&(v(e.point,t.point)||v(e.otherEvent.point,t.otherEvent.point))){return 0}if(i===2&&e.isSubject===t.isSubject){return 0}if(i===1){if(!v(e.point,n[0])&&!v(e.otherEvent.point,n[0])){w(e,n[0],r)}if(!v(t.point,n[0])&&!v(t.otherEvent.point,n[0])){w(t,n[0],r)}return 1}var o=[];var a=false;var s=false;if(v(e.point,t.point)){a=true}else if(b(e,t)===1){o.push(t,e)}else{o.push(e,t)}if(v(e.otherEvent.point,t.otherEvent.point)){s=true}else if(b(e.otherEvent,t.otherEvent)===1){o.push(t.otherEvent,e.otherEvent)}else{o.push(e.otherEvent,t.otherEvent)}if(a&&s||a){t.type=u;e.type=t.inOut===e.inOut?l:p;if(a&&!s){w(o[1].otherEvent,o[0].point,r)}return 2}if(s){w(o[0],o[1].point,r);return 3}if(o[0]!==o[3].otherEvent){w(o[0],o[1].point,r);w(o[1],o[2].point,r);return 3}w(o[0],o[1].point,r);w(o[3].otherEvent,o[2].point,r);return 3}function T(e,t){if(e===t){return 0}if(o(e.point,e.otherEvent.point,t.point)!==0||o(e.point,e.otherEvent.point,t.otherEvent.point)!==0){if(v(e.point,t.point)){return e.isBelow(t.otherEvent.point)?-1:1}if(e.point[0]===t.point[0]){return e.point[1]<t.point[1]?-1:1}if(b(e,t)===1){return t.isAbove(e.point)?-1:1}return e.isBelow(t.point)?-1:1}if(e.isSubject===t.isSubject){var r=e.point,n=t.point;if(r[0]===n[0]&&r[1]===n[1]){r=e.otherEvent.point;n=t.otherEvent.point;if(r[0]===n[0]&&r[1]===n[1]){return 0}else{return e.contourId>t.contourId?1:-1}}}else{return e.isSubject?-1:1}return b(e,t)===1?1:-1}function O(e,t,r,n,i,o){var a=new m(T);var s=[];var u=Math.min(n[2],i[2]);var c,h,l;while(e.length!==0){var p=e.pop();s.push(p);if(o===g&&p.point[0]>u||o===y&&p.point[0]>n[2]){break}if(p.left){h=c=a.insert(p);l=a.minNode();if(c!==l){c=a.prev(c)}else{c=null}h=a.next(h);var f=c?c.key:null;var d=void 0;_(p,f,o);if(h){if(C(p,h.key,e)===2){_(p,f,o);_(p,h.key,o)}}if(c){if(C(c.key,p,e)===2){var v=c;if(v!==l){v=a.prev(v)}else{v=null}d=v?v.key:null;_(f,d,o);_(p,f,o)}}}else{p=p.otherEvent;h=c=a.find(p);if(c&&h){if(c!==l){c=a.prev(c)}else{c=null}h=a.next(h);a.remove(p);if(h&&c){C(c.key,h.key,e)}}}}return s}function P(e){var t,r,n,i;var o=[];for(r=0,n=e.length;r<n;r++){t=e[r];if(t.left&&t.inResult||!t.left&&t.otherEvent.inResult){o.push(t)}}var a=false;while(!a){a=true;for(r=0,n=o.length;r<n;r++){if(r+1<n&&b(o[r],o[r+1])===1){i=o[r];o[r]=o[r+1];o[r+1]=i;a=false}}}for(r=0,n=o.length;r<n;r++){t=o[r];t.pos=r}for(r=0,n=o.length;r<n;r++){t=o[r];if(!t.left){i=t.pos;t.pos=t.otherEvent.pos;t.otherEvent.pos=i}}return o}function A(e,t,r,n){var i,o;var a=e+1;var s=t.length;i=t[e].point;if(a<s){o=t[a].point}while(a<s&&o[0]===i[0]&&o[1]===i[1]){if(!r[a]){return a}else{a++}o=t[a].point}a=e-1;while(r[a]&&a>=n){a--}return a}function j(e,t){var r,n;var i=P(e);var o={};var a=[];var s;for(r=0,n=i.length;r<n;r++){if(o[r]){continue}var u=[[]];if(!i[r].isExteriorRing){if(t===y&&!i[r].isSubject&&a.length===0){a.push(u)}else if(a.length===0){a.push([[u]])}else{a[a.length-1].push(u[0])}}else if(t===y&&!i[r].isSubject&&a.length>1){a[a.length-1].push(u[0])}else{a.push(u)}var c=a.length-1;var h=r;var l=i[r].point;u[0].push(l);while(h>=r){s=i[h];o[h]=true;if(s.left){s.resultInOut=false;s.contourId=c}else{s.otherEvent.resultInOut=true;s.otherEvent.contourId=c}h=s.pos;o[h]=true;u[0].push(i[h].point);h=A(h,i,o,r)}h=h===-1?r:h;s=i[h];o[h]=o[s.pos]=true;s.otherEvent.resultInOut=true;s.otherEvent.contourId=c}return a}var R=L;var r=L;function L(e,t){var r=this;if(!(this instanceof L)){return new L(e,t)}this.data=e||[];this.length=this.data.length;this.compare=t||I;if(this.length>0){for(var n=(this.length>>1)-1;n>=0;n--){r._down(n)}}}function I(e,t){return e<t?-1:e>t?1:0}L.prototype={push:function(e){this.data.push(e);this.length++;this._up(this.length-1)},pop:function(){if(this.length===0){return undefined}var e=this.data[0];this.length--;if(this.length>0){this.data[0]=this.data[this.length];this._down(0)}this.data.pop();return e},peek:function(){return this.data[0]},_up:function(e){var t=this.data;var r=this.compare;var n=t[e];while(e>0){var i=e-1>>1;var o=t[i];if(r(n,o)>=0){break}t[e]=o;e=i}t[e]=n},_down:function(e){var t=this;var r=this.data;var n=this.compare;var i=this.length>>1;var o=r[e];while(e<i){var a=(e<<1)+1;var s=a+1;var u=r[a];if(s<t.length&&n(r[s],u)<0){a=s;u=r[s]}if(n(u,o)>=0){break}r[e]=u;e=a}r[e]=o}};R.default=r;var N=Math.max;var D=Math.min;var k=0;function B(e,t,r,n,i,o){var a,s,u,c,h,l;for(a=0,s=e.length-1;a<s;a++){u=e[a];c=e[a+1];h=new d(u,false,undefined,t);l=new d(c,false,h,t);h.otherEvent=l;if(u[0]===c[0]&&u[1]===c[1]){continue}h.contourId=l.contourId=r;if(!o){h.isExteriorRing=false;l.isExteriorRing=false}if(b(h,l)>0){l.left=true}else{h.left=true}var p=u[0],f=u[1];i[0]=D(i[0],p);i[1]=D(i[1],f);i[2]=N(i[2],p);i[3]=N(i[3],f);n.push(h);n.push(l)}}function F(e,t,r,n,i){var o=new R(null,b);var a,s,u,c,h,l;for(u=0,c=e.length;u<c;u++){a=e[u];for(h=0,l=a.length;h<l;h++){s=h===0;if(s){k++}B(a[h],true,k,o,r,s)}}for(u=0,c=t.length;u<c;u++){a=t[u];for(h=0,l=a.length;h<l;h++){s=h===0;if(i===y){s=false}if(s){k++}B(a[h],false,k,o,n,s)}}return o}var $=[];function z(e,t,r){var n=null;if(e.length*t.length===0){if(r===g){n=$}else if(r===y){n=e}else if(r===s||r===f){n=e.length===0?t:e}}return n}function U(e,t,r,n,i){var o=null;if(r[0]>n[2]||n[0]>r[2]||r[1]>n[3]||n[1]>r[3]){if(i===g){o=$}else if(i===y){o=e}else if(i===s||i===f){o=e.concat(t)}}return o}function G(e,t,r){if(typeof e[0][0][0]==="number"){e=[e]}if(typeof t[0][0][0]==="number"){t=[t]}var n=z(e,t,r);if(n){return n===$?null:n}var i=[Infinity,Infinity,-Infinity,-Infinity];var o=[Infinity,Infinity,-Infinity,-Infinity];var a=F(e,t,i,o,r);n=U(e,t,i,o,r);if(n){return n===$?null:n}var s=O(a,e,t,i,o,r);var u=j(s,r);return u}function V(e,t){return G(e,t,s)}function H(e,t){return G(e,t,y)}function q(e,t){return G(e,t,f)}function W(e,t){return G(e,t,g)}var X={UNION:s,DIFFERENCE:y,INTERSECTION:g,XOR:f};e.union=V;e.diff=H;e.xor=q;e.intersection=W;e.operations=X;Object.defineProperty(e,"__esModule",{value:true})})},{}],23:[function(e,t,c){(function(i){function o(e,t){var r=0;for(var n=e.length-1;n>=0;n--){var i=e[n];if(i==="."){e.splice(n,1)}else if(i===".."){e.splice(n,1);r++}else if(r){e.splice(n,1);r--}}if(t){for(;r--;r){e.unshift("..")}}return e}var t=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;var a=function(e){return t.exec(e).slice(1)};c.resolve=function(){var e="",t=false;for(var r=arguments.length-1;r>=-1&&!t;r--){var n=r>=0?arguments[r]:i.cwd();if(typeof n!=="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!n){continue}e=n+"/"+e;t=n.charAt(0)==="/"}e=o(s(e.split("/"),function(e){return!!e}),!t).join("/");return(t?"/":"")+e||"."};c.normalize=function(e){var t=c.isAbsolute(e),r=n(e,-1)==="/";e=o(s(e.split("/"),function(e){return!!e}),!t).join("/");if(!e&&!t){e="."}if(e&&r){e+="/"}return(t?"/":"")+e};c.isAbsolute=function(e){return e.charAt(0)==="/"};c.join=function(){var e=Array.prototype.slice.call(arguments,0);return c.normalize(s(e,function(e,t){if(typeof e!=="string"){throw new TypeError("Arguments to path.join must be strings")}return e}).join("/"))};c.relative=function(e,t){e=c.resolve(e).substr(1);t=c.resolve(t).substr(1);function r(e){var t=0;for(;t<e.length;t++){if(e[t]!=="")break}var r=e.length-1;for(;r>=0;r--){if(e[r]!=="")break}if(t>r)return[];return e.slice(t,r-t+1)}var n=r(e.split("/"));var i=r(t.split("/"));var o=Math.min(n.length,i.length);var a=o;for(var s=0;s<o;s++){if(n[s]!==i[s]){a=s;break}}var u=[];for(var s=a;s<n.length;s++){u.push("..")}u=u.concat(i.slice(a));return u.join("/")};c.sep="/";c.delimiter=":";c.dirname=function(e){var t=a(e),r=t[0],n=t[1];if(!r&&!n){return"."}if(n){n=n.substr(0,n.length-1)}return r+n};c.basename=function(e,t){var r=a(e)[2];if(t&&r.substr(-1*t.length)===t){r=r.substr(0,r.length-t.length)}return r};c.extname=function(e){return a(e)[3]};function s(e,t){if(e.filter)return e.filter(t);var r=[];for(var n=0;n<e.length;n++){if(t(e[n],n,e))r.push(e[n])}return r}var n="ab".substr(-1)==="b"?function(e,t,r){return e.substr(t,r)}:function(e,t,r){if(t<0)t=e.length+t;return e.substr(t,r)}}).call(this,e("_process"))},{_process:6}],24:[function(e,t,r){"use strict";t.exports=i;var n=e("ieee754");function i(e){this.buf=ArrayBuffer.isView&&ArrayBuffer.isView(e)?e:new Uint8Array(e||0);this.pos=0;this.type=0;this.length=this.buf.length}i.Varint=0;i.Fixed64=1;i.Bytes=2;i.Fixed32=5;var o=(1<<16)*(1<<16),a=1/o;i.prototype={destroy:function(){this.buf=null},readFields:function(e,t,r){r=r||this.length;while(this.pos<r){var n=this.readVarint(),i=n>>3,o=this.pos;this.type=n&7;e(i,t,this);if(this.pos===o)this.skip(n)}return t},readMessage:function(e,t){return this.readFields(e,t,this.readVarint()+this.pos)},readFixed32:function(){var e=S(this.buf,this.pos);this.pos+=4;return e},readSFixed32:function(){var e=E(this.buf,this.pos);this.pos+=4;return e},readFixed64:function(){var e=S(this.buf,this.pos)+S(this.buf,this.pos+4)*o;this.pos+=8;return e},readSFixed64:function(){var e=S(this.buf,this.pos)+E(this.buf,this.pos+4)*o;this.pos+=8;return e},readFloat:function(){var e=n.read(this.buf,this.pos,true,23,4);this.pos+=4;return e},readDouble:function(){var e=n.read(this.buf,this.pos,true,52,8);this.pos+=8;return e},readVarint:function(e){var t=this.buf,r,n;n=t[this.pos++];r=n&127;if(n<128)return r;n=t[this.pos++];r|=(n&127)<<7;if(n<128)return r;n=t[this.pos++];r|=(n&127)<<14;if(n<128)return r;n=t[this.pos++];r|=(n&127)<<21;if(n<128)return r;n=t[this.pos];r|=(n&15)<<28;return s(r,e,this)},readVarint64:function(){return this.readVarint(true)},readSVarint:function(){var e=this.readVarint();return e%2===1?(e+1)/-2:e/2},readBoolean:function(){return Boolean(this.readVarint())},readString:function(){var e=this.readVarint()+this.pos,t=C(this.buf,this.pos,e);this.pos=e;return t},readBytes:function(){var e=this.readVarint()+this.pos,t=this.buf.subarray(this.pos,e);this.pos=e;return t},readPackedVarint:function(e,t){var r=u(this);e=e||[];while(this.pos<r)e.push(this.readVarint(t));return e},readPackedSVarint:function(e){var t=u(this);e=e||[];while(this.pos<t)e.push(this.readSVarint());return e},readPackedBoolean:function(e){var t=u(this);e=e||[];while(this.pos<t)e.push(this.readBoolean());return e},readPackedFloat:function(e){var t=u(this);e=e||[];while(this.pos<t)e.push(this.readFloat());return e},readPackedDouble:function(e){var t=u(this);e=e||[];while(this.pos<t)e.push(this.readDouble());return e},readPackedFixed32:function(e){var t=u(this);e=e||[];while(this.pos<t)e.push(this.readFixed32());return e},readPackedSFixed32:function(e){var t=u(this);e=e||[];while(this.pos<t)e.push(this.readSFixed32());return e},readPackedFixed64:function(e){var t=u(this);e=e||[];while(this.pos<t)e.push(this.readFixed64());return e},readPackedSFixed64:function(e){var t=u(this);e=e||[];while(this.pos<t)e.push(this.readSFixed64());return e},skip:function(e){var t=e&7;if(t===i.Varint)while(this.buf[this.pos++]>127){}else if(t===i.Bytes)this.pos=this.readVarint()+this.pos;else if(t===i.Fixed32)this.pos+=4;else if(t===i.Fixed64)this.pos+=8;else throw new Error("Unimplemented type: "+t)},writeTag:function(e,t){this.writeVarint(e<<3|t)},realloc:function(e){var t=this.length||16;while(t<this.pos+e)t*=2;if(t!==this.length){var r=new Uint8Array(t);r.set(this.buf);this.buf=r;this.length=t}},finish:function(){this.length=this.pos;this.pos=0;return this.buf.subarray(0,this.length)},writeFixed32:function(e){this.realloc(4);M(this.buf,e,this.pos);this.pos+=4},writeSFixed32:function(e){this.realloc(4);M(this.buf,e,this.pos);this.pos+=4},writeFixed64:function(e){this.realloc(8);M(this.buf,e&-1,this.pos);M(this.buf,Math.floor(e*a),this.pos+4);this.pos+=8},writeSFixed64:function(e){this.realloc(8);M(this.buf,e&-1,this.pos);M(this.buf,Math.floor(e*a),this.pos+4);this.pos+=8},writeVarint:function(e){e=+e||0;if(e>268435455||e<0){h(e,this);return}this.realloc(4);this.buf[this.pos++]=e&127|(e>127?128:0);if(e<=127)return;this.buf[this.pos++]=(e>>>=7)&127|(e>127?128:0);if(e<=127)return;this.buf[this.pos++]=(e>>>=7)&127|(e>127?128:0);if(e<=127)return;this.buf[this.pos++]=e>>>7&127},writeSVarint:function(e){this.writeVarint(e<0?-e*2-1:e*2)},writeBoolean:function(e){this.writeVarint(Boolean(e))},writeString:function(e){e=String(e);this.realloc(e.length*4);this.pos++;var t=this.pos;this.pos=T(this.buf,e,this.pos);var r=this.pos-t;if(r>=128)f(t,r,this);this.pos=t-1;this.writeVarint(r);this.pos+=r},writeFloat:function(e){this.realloc(4);n.write(this.buf,e,this.pos,true,23,4);this.pos+=4},writeDouble:function(e){this.realloc(8);n.write(this.buf,e,this.pos,true,52,8);this.pos+=8},writeBytes:function(e){var t=e.length;this.writeVarint(t);this.realloc(t);for(var r=0;r<t;r++)this.buf[this.pos++]=e[r]},writeRawMessage:function(e,t){this.pos++;var r=this.pos;e(t,this);var n=this.pos-r;if(n>=128)f(r,n,this);this.pos=r-1;this.writeVarint(n);this.pos+=n},writeMessage:function(e,t,r){this.writeTag(e,i.Bytes);this.writeRawMessage(t,r)},writePackedVarint:function(e,t){this.writeMessage(e,d,t)},writePackedSVarint:function(e,t){this.writeMessage(e,v,t)},writePackedBoolean:function(e,t){this.writeMessage(e,y,t)},writePackedFloat:function(e,t){this.writeMessage(e,m,t)},writePackedDouble:function(e,t){this.writeMessage(e,g,t)},writePackedFixed32:function(e,t){this.writeMessage(e,_,t)},writePackedSFixed32:function(e,t){this.writeMessage(e,b,t)},writePackedFixed64:function(e,t){this.writeMessage(e,x,t)},writePackedSFixed64:function(e,t){this.writeMessage(e,w,t)},writeBytesField:function(e,t){this.writeTag(e,i.Bytes);this.writeBytes(t)},writeFixed32Field:function(e,t){this.writeTag(e,i.Fixed32);this.writeFixed32(t)},writeSFixed32Field:function(e,t){this.writeTag(e,i.Fixed32);this.writeSFixed32(t)},writeFixed64Field:function(e,t){this.writeTag(e,i.Fixed64);this.writeFixed64(t)},writeSFixed64Field:function(e,t){this.writeTag(e,i.Fixed64);this.writeSFixed64(t)},writeVarintField:function(e,t){this.writeTag(e,i.Varint);this.writeVarint(t)},writeSVarintField:function(e,t){this.writeTag(e,i.Varint);this.writeSVarint(t)},writeStringField:function(e,t){this.writeTag(e,i.Bytes);this.writeString(t)},writeFloatField:function(e,t){this.writeTag(e,i.Fixed32);this.writeFloat(t)},writeDoubleField:function(e,t){this.writeTag(e,i.Fixed64);this.writeDouble(t)},writeBooleanField:function(e,t){this.writeVarintField(e,Boolean(t))}};function s(e,t,r){var n=r.buf,i,o;o=n[r.pos++];i=(o&112)>>4;if(o<128)return c(e,i,t);o=n[r.pos++];i|=(o&127)<<3;if(o<128)return c(e,i,t);o=n[r.pos++];i|=(o&127)<<10;if(o<128)return c(e,i,t);o=n[r.pos++];i|=(o&127)<<17;if(o<128)return c(e,i,t);o=n[r.pos++];i|=(o&127)<<24;if(o<128)return c(e,i,t);o=n[r.pos++];i|=(o&1)<<31;if(o<128)return c(e,i,t);throw new Error("Expected varint not more than 10 bytes")}function u(e){return e.type===i.Bytes?e.readVarint()+e.pos:e.pos+1}function c(e,t,r){if(r){return t*4294967296+(e>>>0)}return(t>>>0)*4294967296+(e>>>0)}function h(e,t){var r,n;if(e>=0){r=e%4294967296|0;n=e/4294967296|0}else{r=~(-e%4294967296);n=~(-e/4294967296);if(r^4294967295){r=r+1|0}else{r=0;n=n+1|0}}if(e>=0x10000000000000000||e<-0x10000000000000000){throw new Error("Given varint doesn't fit into 10 bytes")}t.realloc(10);l(r,n,t);p(n,t)}function l(e,t,r){r.buf[r.pos++]=e&127|128;e>>>=7;r.buf[r.pos++]=e&127|128;e>>>=7;r.buf[r.pos++]=e&127|128;e>>>=7;r.buf[r.pos++]=e&127|128;e>>>=7;r.buf[r.pos]=e&127}function p(e,t){var r=(e&7)<<4;t.buf[t.pos++]|=r|((e>>>=3)?128:0);if(!e)return;t.buf[t.pos++]=e&127|((e>>>=7)?128:0);if(!e)return;t.buf[t.pos++]=e&127|((e>>>=7)?128:0);if(!e)return;t.buf[t.pos++]=e&127|((e>>>=7)?128:0);if(!e)return;t.buf[t.pos++]=e&127|((e>>>=7)?128:0);if(!e)return;t.buf[t.pos++]=e&127}function f(e,t,r){var n=t<=16383?1:t<=2097151?2:t<=268435455?3:Math.ceil(Math.log(t)/(Math.LN2*7));r.realloc(n);for(var i=r.pos-1;i>=e;i--)r.buf[i+n]=r.buf[i]}function d(e,t){for(var r=0;r<e.length;r++)t.writeVarint(e[r])}function v(e,t){for(var r=0;r<e.length;r++)t.writeSVarint(e[r])}function m(e,t){for(var r=0;r<e.length;r++)t.writeFloat(e[r])}function g(e,t){for(var r=0;r<e.length;r++)t.writeDouble(e[r])}function y(e,t){for(var r=0;r<e.length;r++)t.writeBoolean(e[r])}function _(e,t){for(var r=0;r<e.length;r++)t.writeFixed32(e[r])}function b(e,t){for(var r=0;r<e.length;r++)t.writeSFixed32(e[r])}function x(e,t){for(var r=0;r<e.length;r++)t.writeFixed64(e[r])}function w(e,t){for(var r=0;r<e.length;r++)t.writeSFixed64(e[r])}function S(e,t){return(e[t]|e[t+1]<<8|e[t+2]<<16)+e[t+3]*16777216}function M(e,t,r){e[r]=t;e[r+1]=t>>>8;e[r+2]=t>>>16;e[r+3]=t>>>24}function E(e,t){return(e[t]|e[t+1]<<8|e[t+2]<<16)+(e[t+3]<<24)}function C(e,t,r){var n="";var i=t;while(i<r){var o=e[i];var a=null;var s=o>239?4:o>223?3:o>191?2:1;if(i+s>r)break;var u,c,h;if(s===1){if(o<128){a=o}}else if(s===2){u=e[i+1];if((u&192)===128){a=(o&31)<<6|u&63;if(a<=127){a=null}}}else if(s===3){u=e[i+1];c=e[i+2];if((u&192)===128&&(c&192)===128){a=(o&15)<<12|(u&63)<<6|c&63;if(a<=2047||a>=55296&&a<=57343){a=null}}}else if(s===4){u=e[i+1];c=e[i+2];h=e[i+3];if((u&192)===128&&(c&192)===128&&(h&192)===128){a=(o&15)<<18|(u&63)<<12|(c&63)<<6|h&63;if(a<=65535||a>=1114112){a=null}}}if(a===null){a=65533;s=1}else if(a>65535){a-=65536;n+=String.fromCharCode(a>>>10&1023|55296);a=56320|a&1023}n+=String.fromCharCode(a);i+=s}return n}function T(e,t,r){for(var n=0,i,o;n<t.length;n++){i=t.charCodeAt(n);if(i>55295&&i<57344){if(o){if(i<56320){e[r++]=239;e[r++]=191;e[r++]=189;o=i;continue}else{i=o-55296<<10|i-56320|65536;o=null}}else{if(i>56319||n+1===t.length){e[r++]=239;e[r++]=191;e[r++]=189}else{o=i}continue}}else if(o){e[r++]=239;e[r++]=191;e[r++]=189;o=null}if(i<128){e[r++]=i}else{if(i<2048){e[r++]=i>>6|192}else{if(i<65536){e[r++]=i>>12|224}else{e[r++]=i>>18|240;e[r++]=i>>12&63|128}e[r++]=i>>6&63|128}e[r++]=i&63|128}}return r}},{ieee754:17}],25:[function(e,r,n){(function(e,t){typeof n==="object"&&typeof r!=="undefined"?r.exports=t():typeof o==="function"&&o.amd?o(t):e.quickselect=t()})(this,function(){"use strict";function e(e,t,r,n,i){v(e,t,r||0,n||e.length-1,i||o)}function v(e,t,r,n,i){while(n>r){if(n-r>600){var o=n-r+1;var a=t-r+1;var s=Math.log(o);var u=.5*Math.exp(2*s/3);var c=.5*Math.sqrt(s*u*(o-u)/o)*(a-o/2<0?-1:1);var h=Math.max(r,Math.floor(t-a*u/o+c));var l=Math.min(n,Math.floor(t+(o-a)*u/o+c));v(e,t,h,l,i)}var p=e[t];var f=r;var d=n;m(e,r,t);if(i(e[n],p)>0)m(e,r,n);while(f<d){m(e,f,d);f++;d--;while(i(e[f],p)<0)f++;while(i(e[d],p)>0)d--}if(i(e[r],p)===0)m(e,r,d);else{d++;m(e,d,n)}if(d<=t)r=d+1;if(t<=d)n=d-1}}function m(e,t,r){var n=e[t];e[t]=e[r];e[r]=n}function o(e,t){return e<t?-1:e>t?1:0}return e})},{}],26:[function(e,t,r){"use strict";t.exports=n;t.exports.default=n;var s=e("quickselect");function n(e,t){if(!(this instanceof n))return new n(e,t);this._maxEntries=Math.max(4,e||9);this._minEntries=Math.max(2,Math.ceil(this._maxEntries*.4));if(t){this._initFormat(t)}this.clear()}n.prototype={all:function(){return this._all(this.data,[])},search:function(e){var t=this.data,r=[],n=this.toBBox;if(!_(e,t))return r;var i=[],o,a,s,u;while(t){for(o=0,a=t.children.length;o<a;o++){s=t.children[o];u=t.leaf?n(s):s;if(_(e,u)){if(t.leaf)r.push(s);else if(y(e,u))this._all(s,r);else i.push(s)}}t=i.pop()}return r},collides:function(e){var t=this.data,r=this.toBBox;if(!_(e,t))return false;var n=[],i,o,a,s;while(t){for(i=0,o=t.children.length;i<o;i++){a=t.children[i];s=t.leaf?r(a):a;if(_(e,s)){if(t.leaf||y(e,s))return true;n.push(a)}}t=n.pop()}return false},load:function(e){if(!(e&&e.length))return this;if(e.length<this._minEntries){for(var t=0,r=e.length;t<r;t++){this.insert(e[t])}return this}var n=this._build(e.slice(),0,e.length-1,0);if(!this.data.children.length){this.data=n}else 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,true)}return this},insert:function(e){if(e)this._insert(e,this.data.height-1);return this},clear:function(){this.data=b([]);return this},remove:function(e,t){if(!e)return this;var r=this.data,n=this.toBBox(e),i=[],o=[],a,s,u,c;while(r||i.length){if(!r){r=i.pop();s=i[i.length-1];a=o.pop();c=true}if(r.leaf){u=h(e,r.children,t);if(u!==-1){r.children.splice(u,1);i.push(r);this._condense(i);return this}}if(!c&&!r.leaf&&y(r,n)){i.push(r);o.push(a);a=0;s=r;r=r.children[0]}else if(s){a++;r=s.children[a];c=false}else r=null}return this},toBBox:function(e){return e},compareMinX:u,compareMinY:c,toJSON:function(){return this.data},fromJSON:function(e){this.data=e;return this},_all:function(e,t){var r=[];while(e){if(e.leaf)t.push.apply(t,e.children);else r.push.apply(r,e.children);e=r.pop()}return t},_build:function(e,t,r,n){var i=r-t+1,o=this._maxEntries,a;if(i<=o){a=b(e.slice(t,r+1));f(a,this.toBBox);return a}if(!n){n=Math.ceil(Math.log(i)/Math.log(o));o=Math.ceil(i/Math.pow(o,n-1))}a=b([]);a.leaf=false;a.height=n;var s=Math.ceil(i/o),u=s*Math.ceil(Math.sqrt(o)),c,h,l,p;x(e,t,r,u,this.compareMinX);for(c=t;c<=r;c+=u){l=Math.min(c+u-1,r);x(e,c,l,s,this.compareMinY);for(h=c;h<=l;h+=s){p=Math.min(h+s-1,l);a.children.push(this._build(e,h,p,n-1))}}f(a,this.toBBox);return a},_chooseSubtree:function(e,t,r,n){var i,o,a,s,u,c,h,l;while(true){n.push(t);if(t.leaf||n.length-1===r)break;h=l=Infinity;for(i=0,o=t.children.length;i<o;i++){a=t.children[i];u=d(a);c=m(e,a)-u;if(c<l){l=c;h=u<h?u:h;s=a}else if(c===l){if(u<h){h=u;s=a}}}t=s||t.children[0]}return t},_insert:function(e,t,r){var n=this.toBBox,i=r?e:n(e),o=[];var a=this._chooseSubtree(i,this.data,t,o);a.children.push(e);p(a,i);while(t>=0){if(o[t].children.length>this._maxEntries){this._split(o,t);t--}else break}this._adjustParentBBoxes(i,o,t)},_split:function(e,t){var r=e[t],n=r.children.length,i=this._minEntries;this._chooseSplitAxis(r,i,n);var o=this._chooseSplitIndex(r,i,n);var a=b(r.children.splice(o,r.children.length-o));a.height=r.height;a.leaf=r.leaf;f(r,this.toBBox);f(a,this.toBBox);if(t)e[t-1].children.push(a);else this._splitRoot(r,a)},_splitRoot:function(e,t){this.data=b([e,t]);this.data.height=e.height+1;this.data.leaf=false;f(this.data,this.toBBox)},_chooseSplitIndex:function(e,t,r){var n,i,o,a,s,u,c,h;u=c=Infinity;for(n=t;n<=r-t;n++){i=l(e,0,n,this.toBBox);o=l(e,n,r,this.toBBox);a=g(i,o);s=d(i)+d(o);if(a<u){u=a;h=n;c=s<c?s:c}else if(a===u){if(s<c){c=s;h=n}}}return h},_chooseSplitAxis:function(e,t,r){var n=e.leaf?this.compareMinX:u,i=e.leaf?this.compareMinY:c,o=this._allDistMargin(e,t,r,n),a=this._allDistMargin(e,t,r,i);if(o<a)e.children.sort(n)},_allDistMargin:function(e,t,r,n){e.children.sort(n);var i=this.toBBox,o=l(e,0,t,i),a=l(e,r-t,r,i),s=v(o)+v(a),u,c;for(u=t;u<r-t;u++){c=e.children[u];p(o,e.leaf?i(c):c);s+=v(o)}for(u=r-t-1;u>=t;u--){c=e.children[u];p(a,e.leaf?i(c):c);s+=v(a)}return s},_adjustParentBBoxes:function(e,t,r){for(var n=r;n>=0;n--){p(t[n],e)}},_condense:function(e){for(var t=e.length-1,r;t>=0;t--){if(e[t].children.length===0){if(t>0){r=e[t-1].children;r.splice(r.indexOf(e[t]),1)}else this.clear()}else f(e[t],this.toBBox)}},_initFormat:function(e){var t=["return a"," - b",";"];this.compareMinX=new Function("a","b",t.join(e[0]));this.compareMinY=new Function("a","b",t.join(e[1]));this.toBBox=new Function("a","return {minX: a"+e[0]+", minY: a"+e[1]+", maxX: a"+e[2]+", maxY: a"+e[3]+"};")}};function h(e,t,r){if(!r)return t.indexOf(e);for(var n=0;n<t.length;n++){if(r(e,t[n]))return n}return-1}function f(e,t){l(e,0,e.children.length,t,e)}function l(e,t,r,n,i){if(!i)i=b(null);i.minX=Infinity;i.minY=Infinity;i.maxX=-Infinity;i.maxY=-Infinity;for(var o=t,a;o<r;o++){a=e.children[o];p(i,e.leaf?n(a):a)}return i}function p(e,t){e.minX=Math.min(e.minX,t.minX);e.minY=Math.min(e.minY,t.minY);e.maxX=Math.max(e.maxX,t.maxX);e.maxY=Math.max(e.maxY,t.maxY);return e}function u(e,t){return e.minX-t.minX}function c(e,t){return e.minY-t.minY}function d(e){return(e.maxX-e.minX)*(e.maxY-e.minY)}function v(e){return e.maxX-e.minX+(e.maxY-e.minY)}function m(e,t){return(Math.max(t.maxX,e.maxX)-Math.min(t.minX,e.minX))*(Math.max(t.maxY,e.maxY)-Math.min(t.minY,e.minY))}function g(e,t){var r=Math.max(e.minX,t.minX),n=Math.max(e.minY,t.minY),i=Math.min(e.maxX,t.maxX),o=Math.min(e.maxY,t.maxY);return Math.max(0,i-r)*Math.max(0,o-n)}function y(e,t){return e.minX<=t.minX&&e.minY<=t.minY&&t.maxX<=e.maxX&&t.maxY<=e.maxY}function _(e,t){return t.minX<=e.maxX&&t.minY<=e.maxY&&t.maxX>=e.minX&&t.maxY>=e.minY}function b(e){return{children:e,height:1,leaf:true,minX:Infinity,minY:Infinity,maxX:-Infinity,maxY:-Infinity}}function x(e,t,r,n,i){var o=[t,r],a;while(o.length){r=o.pop();t=o.pop();if(r-t<=n)continue;a=t+Math.ceil((r-t)/n/2)*n;s(e,a,t,r,i);o.push(t,a,a,r)}}},{quickselect:25}],27:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("./internal/Observable");r.Observable=n.Observable;var i=e("./internal/observable/ConnectableObservable");r.ConnectableObservable=i.ConnectableObservable;var o=e("./internal/operators/groupBy");r.GroupedObservable=o.GroupedObservable;var a=e("./internal/symbol/observable");r.observable=a.observable;var s=e("./internal/Subject");r.Subject=s.Subject;var u=e("./internal/BehaviorSubject");r.BehaviorSubject=u.BehaviorSubject;var c=e("./internal/ReplaySubject");r.ReplaySubject=c.ReplaySubject;var h=e("./internal/AsyncSubject");r.AsyncSubject=h.AsyncSubject;var l=e("./internal/scheduler/asap");r.asapScheduler=l.asap;var p=e("./internal/scheduler/async");r.asyncScheduler=p.async;var f=e("./internal/scheduler/queue");r.queueScheduler=f.queue;var d=e("./internal/scheduler/animationFrame");r.animationFrameScheduler=d.animationFrame;var v=e("./internal/scheduler/VirtualTimeScheduler");r.VirtualTimeScheduler=v.VirtualTimeScheduler;r.VirtualAction=v.VirtualAction;var m=e("./internal/Scheduler");r.Scheduler=m.Scheduler;var g=e("./internal/Subscription");r.Subscription=g.Subscription;var y=e("./internal/Subscriber");r.Subscriber=y.Subscriber;var _=e("./internal/Notification");r.Notification=_.Notification;var b=e("./internal/util/pipe");r.pipe=b.pipe;var x=e("./internal/util/noop");r.noop=x.noop;var w=e("./internal/util/identity");r.identity=w.identity;var S=e("./internal/util/isObservable");r.isObservable=S.isObservable;var M=e("./internal/util/ArgumentOutOfRangeError");r.ArgumentOutOfRangeError=M.ArgumentOutOfRangeError;var E=e("./internal/util/EmptyError");r.EmptyError=E.EmptyError;var C=e("./internal/util/ObjectUnsubscribedError");r.ObjectUnsubscribedError=C.ObjectUnsubscribedError;var T=e("./internal/util/UnsubscriptionError");r.UnsubscriptionError=T.UnsubscriptionError;var O=e("./internal/util/TimeoutError");r.TimeoutError=O.TimeoutError;var P=e("./internal/observable/bindCallback");r.bindCallback=P.bindCallback;var A=e("./internal/observable/bindNodeCallback");r.bindNodeCallback=A.bindNodeCallback;var j=e("./internal/observable/combineLatest");r.combineLatest=j.combineLatest;var R=e("./internal/observable/concat");r.concat=R.concat;var L=e("./internal/observable/defer");r.defer=L.defer;var I=e("./internal/observable/empty");r.empty=I.empty;var N=e("./internal/observable/forkJoin");r.forkJoin=N.forkJoin;var D=e("./internal/observable/from");r.from=D.from;var k=e("./internal/observable/fromEvent");r.fromEvent=k.fromEvent;var B=e("./internal/observable/fromEventPattern");r.fromEventPattern=B.fromEventPattern;var F=e("./internal/observable/generate");r.generate=F.generate;var $=e("./internal/observable/iif");r.iif=$.iif;var z=e("./internal/observable/interval");r.interval=z.interval;var U=e("./internal/observable/merge");r.merge=U.merge;var G=e("./internal/observable/never");r.never=G.never;var V=e("./internal/observable/of");r.of=V.of;var H=e("./internal/observable/onErrorResumeNext");r.onErrorResumeNext=H.onErrorResumeNext;var q=e("./internal/observable/pairs");r.pairs=q.pairs;var W=e("./internal/observable/race");r.race=W.race;var X=e("./internal/observable/range");r.range=X.range;var Y=e("./internal/observable/throwError");r.throwError=Y.throwError;var K=e("./internal/observable/timer");r.timer=K.timer;var Z=e("./internal/observable/using");r.using=Z.using;var J=e("./internal/observable/zip");r.zip=J.zip;var Q=e("./internal/observable/empty");r.EMPTY=Q.EMPTY;var ee=e("./internal/observable/never");r.NEVER=ee.NEVER;var te=e("./internal/config");r.config=te.config},{"./internal/AsyncSubject":28,"./internal/BehaviorSubject":29,"./internal/Notification":31,"./internal/Observable":32,"./internal/ReplaySubject":35,"./internal/Scheduler":36,"./internal/Subject":37,"./internal/Subscriber":39,"./internal/Subscription":40,"./internal/config":41,"./internal/observable/ConnectableObservable":42,"./internal/observable/bindCallback":44,"./internal/observable/bindNodeCallback":45,"./internal/observable/combineLatest":46,"./internal/observable/concat":47,"./internal/observable/defer":48,"./internal/observable/empty":49,"./internal/observable/forkJoin":50,"./internal/observable/from":51,"./internal/observable/fromEvent":53,"./internal/observable/fromEventPattern":54,"./internal/observable/generate":58,"./internal/observable/iif":59,"./internal/observable/interval":60,"./internal/observable/merge":61,"./internal/observable/never":62,"./internal/observable/of":63,"./internal/observable/onErrorResumeNext":64,"./internal/observable/pairs":65,"./internal/observable/race":66,"./internal/observable/range":67,"./internal/observable/throwError":69,"./internal/observable/timer":70,"./internal/observable/using":71,"./internal/observable/zip":72,"./internal/operators/groupBy":108,"./internal/scheduler/VirtualTimeScheduler":185,"./internal/scheduler/animationFrame":186,"./internal/scheduler/asap":187,"./internal/scheduler/async":188,"./internal/scheduler/queue":189,"./internal/symbol/observable":191,"./internal/util/ArgumentOutOfRangeError":193,"./internal/util/EmptyError":194,"./internal/util/ObjectUnsubscribedError":196,"./internal/util/TimeoutError":197,"./internal/util/UnsubscriptionError":198,"./internal/util/identity":202,"./internal/util/isObservable":211,"./internal/util/noop":214,"./internal/util/pipe":216}],28:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var i=e("./Subject");var o=e("./Subscription");var a=function(t){n(e,t);function e(){var e=t!==null&&t.apply(this,arguments)||this;e.value=null;e.hasNext=false;e.hasCompleted=false;return e}e.prototype._subscribe=function(e){if(this.hasError){e.error(this.thrownError);return o.Subscription.EMPTY}else if(this.hasCompleted&&this.hasNext){e.next(this.value);e.complete();return o.Subscription.EMPTY}return t.prototype._subscribe.call(this,e)};e.prototype.next=function(e){if(!this.hasCompleted){this.value=e;this.hasNext=true}};e.prototype.error=function(e){if(!this.hasCompleted){t.prototype.error.call(this,e)}};e.prototype.complete=function(){this.hasCompleted=true;if(this.hasNext){t.prototype.next.call(this,this.value)}t.prototype.complete.call(this)};return e}(i.Subject);r.AsyncSubject=a},{"./Subject":37,"./Subscription":40}],29:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var i=e("./Subject");var o=e("./util/ObjectUnsubscribedError");var a=function(r){n(e,r);function e(e){var t=r.call(this)||this;t._value=e;return t}Object.defineProperty(e.prototype,"value",{get:function(){return this.getValue()},enumerable:true,configurable:true});e.prototype._subscribe=function(e){var t=r.prototype._subscribe.call(this,e);if(t&&!t.closed){e.next(this._value)}return t};e.prototype.getValue=function(){if(this.hasError){throw this.thrownError}else if(this.closed){throw new o.ObjectUnsubscribedError}else{return this._value}};e.prototype.next=function(e){r.prototype.next.call(this,this._value=e)};return e}(i.Subject);r.BehaviorSubject=a},{"./Subject":37,"./util/ObjectUnsubscribedError":196}],30:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var i=e("./Subscriber");var o=function(i){n(e,i);function e(e,t,r){var n=i.call(this)||this;n.parent=e;n.outerValue=t;n.outerIndex=r;n.index=0;return n}e.prototype._next=function(e){this.parent.notifyNext(this.outerValue,e,this.outerIndex,this.index++,this)};e.prototype._error=function(e){this.parent.notifyError(e,this);this.unsubscribe()};e.prototype._complete=function(){this.parent.notifyComplete(this);this.unsubscribe()};return e}(i.Subscriber);r.InnerSubscriber=o},{"./Subscriber":39}],31:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("./observable/empty");var i=e("./observable/of");var o=e("./observable/throwError");var a=function(){function t(e,t,r){this.kind=e;this.value=t;this.error=r;this.hasValue=e==="N"}t.prototype.observe=function(e){switch(this.kind){case"N":return e.next&&e.next(this.value);case"E":return e.error&&e.error(this.error);case"C":return e.complete&&e.complete()}};t.prototype.do=function(e,t,r){var n=this.kind;switch(n){case"N":return e&&e(this.value);case"E":return t&&t(this.error);case"C":return r&&r()}};t.prototype.accept=function(e,t,r){if(e&&typeof e.next==="function"){return this.observe(e)}else{return this.do(e,t,r)}};t.prototype.toObservable=function(){var e=this.kind;switch(e){case"N":return i.of(this.value);case"E":return o.throwError(this.error);case"C":return n.empty()}throw new Error("unexpected notification kind value")};t.createNext=function(e){if(typeof e!=="undefined"){return new t("N",e)}return t.undefinedValueNotification};t.createError=function(e){return new t("E",undefined,e)};t.createComplete=function(){return t.completeNotification};t.completeNotification=new t("C");t.undefinedValueNotification=new t("N",undefined);return t}();r.Notification=a},{"./observable/empty":49,"./observable/of":63,"./observable/throwError":69}],32:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("./util/canReportError");var o=e("./util/toSubscriber");var i=e("../internal/symbol/observable");var a=e("./util/pipe");var s=e("./config");var u=function(){function r(e){this._isScalar=false;if(e){this._subscribe=e}}r.prototype.lift=function(e){var t=new r;t.source=this;t.operator=e;return t};r.prototype.subscribe=function(e,t,r){var n=this.operator;var i=o.toSubscriber(e,t,r);if(n){n.call(i,this.source)}else{i.add(this.source||s.config.useDeprecatedSynchronousErrorHandling&&!i.syncErrorThrowable?this._subscribe(i):this._trySubscribe(i))}if(s.config.useDeprecatedSynchronousErrorHandling){if(i.syncErrorThrowable){i.syncErrorThrowable=false;if(i.syncErrorThrown){throw i.syncErrorValue}}}return i};r.prototype._trySubscribe=function(t){try{return this._subscribe(t)}catch(e){if(s.config.useDeprecatedSynchronousErrorHandling){t.syncErrorThrown=true;t.syncErrorValue=e}if(n.canReportError(t)){t.error(e)}else{console.warn(e)}}};r.prototype.forEach=function(n,e){var i=this;e=c(e);return new e(function(e,t){var r;r=i.subscribe(function(e){try{n(e)}catch(e){t(e);if(r){r.unsubscribe()}}},t,e)})};r.prototype._subscribe=function(e){var t=this.source;return t&&t.subscribe(e)};r.prototype[i.observable]=function(){return this};r.prototype.pipe=function(){var e=[];for(var t=0;t<arguments.length;t++){e[t]=arguments[t]}if(e.length===0){return this}return a.pipeFromArray(e)(this)};r.prototype.toPromise=function(e){var n=this;e=c(e);return new e(function(e,t){var r;n.subscribe(function(e){return r=e},function(e){return t(e)},function(){return e(r)})})};r.create=function(e){return new r(e)};return r}();r.Observable=u;function c(e){if(!e){e=s.config.Promise||Promise}if(!e){throw new Error("no Promise impl found")}return e}},{"../internal/symbol/observable":191,"./config":41,"./util/canReportError":199,"./util/pipe":216,"./util/toSubscriber":223}],33:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("./config");var i=e("./util/hostReportError");r.empty={closed:true,next:function(e){},error:function(e){if(n.config.useDeprecatedSynchronousErrorHandling){throw e}else{i.hostReportError(e)}},complete:function(){}}},{"./config":41,"./util/hostReportError":201}],34:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var i=e("./Subscriber");var o=function(e){n(t,e);function t(){return e!==null&&e.apply(this,arguments)||this}t.prototype.notifyNext=function(e,t,r,n,i){this.destination.next(t)};t.prototype.notifyError=function(e,t){this.destination.error(e)};t.prototype.notifyComplete=function(e){this.destination.complete()};return t}(i.Subscriber);r.OuterSubscriber=o},{"./Subscriber":39}],35:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var i=e("./Subject");var o=e("./scheduler/queue");var s=e("./Subscription");var u=e("./operators/observeOn");var c=e("./util/ObjectUnsubscribedError");var h=e("./SubjectSubscription");var a=function(i){n(e,i);function e(e,t,r){if(e===void 0){e=Number.POSITIVE_INFINITY}if(t===void 0){t=Number.POSITIVE_INFINITY}var n=i.call(this)||this;n.scheduler=r;n._events=[];n._infiniteTimeWindow=false;n._bufferSize=e<1?1:e;n._windowTime=t<1?1:t;if(t===Number.POSITIVE_INFINITY){n._infiniteTimeWindow=true;n.next=n.nextInfiniteTimeWindow}else{n.next=n.nextTimeWindow}return n}e.prototype.nextInfiniteTimeWindow=function(e){var t=this._events;t.push(e);if(t.length>this._bufferSize){t.shift()}i.prototype.next.call(this,e)};e.prototype.nextTimeWindow=function(e){this._events.push(new l(this._getNow(),e));this._trimBufferThenGetEvents();i.prototype.next.call(this,e)};e.prototype._subscribe=function(e){var t=this._infiniteTimeWindow;var r=t?this._events:this._trimBufferThenGetEvents();var n=this.scheduler;var i=r.length;var o;if(this.closed){throw new c.ObjectUnsubscribedError}else if(this.isStopped||this.hasError){o=s.Subscription.EMPTY}else{this.observers.push(e);o=new h.SubjectSubscription(this,e)}if(n){e.add(e=new u.ObserveOnSubscriber(e,n))}if(t){for(var a=0;a<i&&!e.closed;a++){e.next(r[a])}}else{for(var a=0;a<i&&!e.closed;a++){e.next(r[a].value)}}if(this.hasError){e.error(this.thrownError)}else if(this.isStopped){e.complete()}return o};e.prototype._getNow=function(){return(this.scheduler||o.queue).now()};e.prototype._trimBufferThenGetEvents=function(){var e=this._getNow();var t=this._bufferSize;var r=this._windowTime;var n=this._events;var i=n.length;var o=0;while(o<i){if(e-n[o].time<r){break}o++}if(i>t){o=Math.max(o,i-t)}if(o>0){n.splice(0,o)}return n};return e}(i.Subject);r.ReplaySubject=a;var l=function(){function e(e,t){this.time=e;this.value=t}return e}()},{"./Subject":37,"./SubjectSubscription":38,"./Subscription":40,"./operators/observeOn":123,"./scheduler/queue":189,"./util/ObjectUnsubscribedError":196}],36:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=function(){function r(e,t){if(t===void 0){t=r.now}this.SchedulerAction=e;this.now=t}r.prototype.schedule=function(e,t,r){if(t===void 0){t=0}return new this.SchedulerAction(this,e).schedule(r,t)};r.now=function(){return Date.now()};return r}();r.Scheduler=n},{}],37:[function(e,t,r){"use strict";var i=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var n=e("./Observable");var o=e("./Subscriber");var a=e("./Subscription");var s=e("./util/ObjectUnsubscribedError");var u=e("./SubjectSubscription");var c=e("../internal/symbol/rxSubscriber");var h=function(r){i(e,r);function e(e){var t=r.call(this,e)||this;t.destination=e;return t}return e}(o.Subscriber);r.SubjectSubscriber=h;var l=function(t){i(e,t);function e(){var e=t.call(this)||this;e.observers=[];e.closed=false;e.isStopped=false;e.hasError=false;e.thrownError=null;return e}e.prototype[c.rxSubscriber]=function(){return new h(this)};e.prototype.lift=function(e){var t=new p(this,this);t.operator=e;return t};e.prototype.next=function(e){if(this.closed){throw new s.ObjectUnsubscribedError}if(!this.isStopped){var t=this.observers;var r=t.length;var n=t.slice();for(var i=0;i<r;i++){n[i].next(e)}}};e.prototype.error=function(e){if(this.closed){throw new s.ObjectUnsubscribedError}this.hasError=true;this.thrownError=e;this.isStopped=true;var t=this.observers;var r=t.length;var n=t.slice();for(var i=0;i<r;i++){n[i].error(e)}this.observers.length=0};e.prototype.complete=function(){if(this.closed){throw new s.ObjectUnsubscribedError}this.isStopped=true;var e=this.observers;var t=e.length;var r=e.slice();for(var n=0;n<t;n++){r[n].complete()}this.observers.length=0};e.prototype.unsubscribe=function(){this.isStopped=true;this.closed=true;this.observers=null};e.prototype._trySubscribe=function(e){if(this.closed){throw new s.ObjectUnsubscribedError}else{return t.prototype._trySubscribe.call(this,e)}};e.prototype._subscribe=function(e){if(this.closed){throw new s.ObjectUnsubscribedError}else if(this.hasError){e.error(this.thrownError);return a.Subscription.EMPTY}else if(this.isStopped){e.complete();return a.Subscription.EMPTY}else{this.observers.push(e);return new u.SubjectSubscription(this,e)}};e.prototype.asObservable=function(){var e=new n.Observable;e.source=this;return e};e.create=function(e,t){return new p(e,t)};return e}(n.Observable);r.Subject=l;var p=function(n){i(e,n);function e(e,t){var r=n.call(this)||this;r.destination=e;r.source=t;return r}e.prototype.next=function(e){var t=this.destination;if(t&&t.next){t.next(e)}};e.prototype.error=function(e){var t=this.destination;if(t&&t.error){this.destination.error(e)}};e.prototype.complete=function(){var e=this.destination;if(e&&e.complete){this.destination.complete()}};e.prototype._subscribe=function(e){var t=this.source;if(t){return this.source.subscribe(e)}else{return a.Subscription.EMPTY}};return e}(l);r.AnonymousSubject=p},{"../internal/symbol/rxSubscriber":192,"./Observable":32,"./SubjectSubscription":38,"./Subscriber":39,"./Subscription":40,"./util/ObjectUnsubscribedError":196}],38:[function(e,t,r){"use strict";var i=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var n=e("./Subscription");var o=function(n){i(e,n);function e(e,t){var r=n.call(this)||this;r.subject=e;r.subscriber=t;r.closed=false;return r}e.prototype.unsubscribe=function(){if(this.closed){return}this.closed=true;var e=this.subject;var t=e.observers;this.subject=null;if(!t||t.length===0||e.isStopped||e.closed){return}var r=t.indexOf(this.subscriber);if(r!==-1){t.splice(r,1)}};return e}(n.Subscription);r.SubjectSubscription=o},{"./Subscription":40}],39:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var u=e("./util/isFunction");var c=e("./Observer");var i=e("./Subscription");var a=e("../internal/symbol/rxSubscriber");var o=e("./config");var h=e("./util/hostReportError");var s=function(i){n(o,i);function o(e,t,r){var n=i.call(this)||this;n.syncErrorValue=null;n.syncErrorThrown=false;n.syncErrorThrowable=false;n.isStopped=false;n._parentSubscription=null;switch(arguments.length){case 0:n.destination=c.empty;break;case 1:if(!e){n.destination=c.empty;break}if(typeof e==="object"){if(e instanceof o){n.syncErrorThrowable=e.syncErrorThrowable;n.destination=e;e.add(n)}else{n.syncErrorThrowable=true;n.destination=new l(n,e)}break}default:n.syncErrorThrowable=true;n.destination=new l(n,e,t,r);break}return n}o.prototype[a.rxSubscriber]=function(){return this};o.create=function(e,t,r){var n=new o(e,t,r);n.syncErrorThrowable=false;return n};o.prototype.next=function(e){if(!this.isStopped){this._next(e)}};o.prototype.error=function(e){if(!this.isStopped){this.isStopped=true;this._error(e)}};o.prototype.complete=function(){if(!this.isStopped){this.isStopped=true;this._complete()}};o.prototype.unsubscribe=function(){if(this.closed){return}this.isStopped=true;i.prototype.unsubscribe.call(this)};o.prototype._next=function(e){this.destination.next(e)};o.prototype._error=function(e){this.destination.error(e);this.unsubscribe()};o.prototype._complete=function(){this.destination.complete();this.unsubscribe()};o.prototype._unsubscribeAndRecycle=function(){var e=this,t=e._parent,r=e._parents;this._parent=null;this._parents=null;this.unsubscribe();this.closed=false;this.isStopped=false;this._parent=t;this._parents=r;this._parentSubscription=null;return this};return o}(i.Subscription);r.Subscriber=s;var l=function(s){n(e,s);function e(e,t,r,n){var i=s.call(this)||this;i._parentSubscriber=e;var o;var a=i;if(u.isFunction(t)){o=t}else if(t){o=t.next;r=t.error;n=t.complete;if(t!==c.empty){a=Object.create(t);if(u.isFunction(a.unsubscribe)){i.add(a.unsubscribe.bind(a))}a.unsubscribe=i.unsubscribe.bind(i)}}i._context=a;i._next=o;i._error=r;i._complete=n;return i}e.prototype.next=function(e){if(!this.isStopped&&this._next){var t=this._parentSubscriber;if(!o.config.useDeprecatedSynchronousErrorHandling||!t.syncErrorThrowable){this.__tryOrUnsub(this._next,e)}else if(this.__tryOrSetError(t,this._next,e)){this.unsubscribe()}}};e.prototype.error=function(e){if(!this.isStopped){var t=this._parentSubscriber;var r=o.config.useDeprecatedSynchronousErrorHandling;if(this._error){if(!r||!t.syncErrorThrowable){this.__tryOrUnsub(this._error,e);this.unsubscribe()}else{this.__tryOrSetError(t,this._error,e);this.unsubscribe()}}else if(!t.syncErrorThrowable){this.unsubscribe();if(r){throw e}h.hostReportError(e)}else{if(r){t.syncErrorValue=e;t.syncErrorThrown=true}else{h.hostReportError(e)}this.unsubscribe()}}};e.prototype.complete=function(){var e=this;if(!this.isStopped){var t=this._parentSubscriber;if(this._complete){var r=function(){return e._complete.call(e._context)};if(!o.config.useDeprecatedSynchronousErrorHandling||!t.syncErrorThrowable){this.__tryOrUnsub(r);this.unsubscribe()}else{this.__tryOrSetError(t,r);this.unsubscribe()}}else{this.unsubscribe()}}};e.prototype.__tryOrUnsub=function(e,t){try{e.call(this._context,t)}catch(e){this.unsubscribe();if(o.config.useDeprecatedSynchronousErrorHandling){throw e}else{h.hostReportError(e)}}};e.prototype.__tryOrSetError=function(t,e,r){if(!o.config.useDeprecatedSynchronousErrorHandling){throw new Error("bad call")}try{e.call(this._context,r)}catch(e){if(o.config.useDeprecatedSynchronousErrorHandling){t.syncErrorValue=e;t.syncErrorThrown=true;return true}else{h.hostReportError(e);return true}}return false};e.prototype._unsubscribe=function(){var e=this._parentSubscriber;this._context=null;this._parentSubscriber=null;e.unsubscribe()};return e}(s);r.SafeSubscriber=l},{"../internal/symbol/rxSubscriber":192,"./Observer":33,"./Subscription":40,"./config":41,"./util/hostReportError":201,"./util/isFunction":206}],40:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var p=e("./util/isArray");var f=e("./util/isObject");var d=e("./util/isFunction");var v=e("./util/tryCatch");var m=e("./util/errorObject");var g=e("./util/UnsubscriptionError");var n=function(){function i(e){this.closed=false;this._parent=null;this._parents=null;this._subscriptions=null;if(e){this._unsubscribe=e}}i.prototype.unsubscribe=function(){var e=false;var t;if(this.closed){return}var r=this,n=r._parent,i=r._parents,o=r._unsubscribe,a=r._subscriptions;this.closed=true;this._parent=null;this._parents=null;this._subscriptions=null;var s=-1;var u=i?i.length:0;while(n){n.remove(this);n=++s<u&&i[s]||null}if(d.isFunction(o)){var c=v.tryCatch(o).call(this);if(c===m.errorObject){e=true;t=t||(m.errorObject.e instanceof g.UnsubscriptionError?y(m.errorObject.e.errors):[m.errorObject.e])}}if(p.isArray(a)){s=-1;u=a.length;while(++s<u){var h=a[s];if(f.isObject(h)){var c=v.tryCatch(h.unsubscribe).call(h);if(c===m.errorObject){e=true;t=t||[];var l=m.errorObject.e;if(l instanceof g.UnsubscriptionError){t=t.concat(y(l.errors))}else{t.push(l)}}}}}if(e){throw new g.UnsubscriptionError(t)}};i.prototype.add=function(e){if(!e||e===i.EMPTY){return i.EMPTY}if(e===this){return this}var t=e;switch(typeof e){case"function":t=new i(e);case"object":if(t.closed||typeof t.unsubscribe!=="function"){return t}else if(this.closed){t.unsubscribe();return t}else if(typeof t._addParent!=="function"){var r=t;t=new i;t._subscriptions=[r]}break;default:throw new Error("unrecognized teardown "+e+" added to Subscription.")}var n=this._subscriptions||(this._subscriptions=[]);n.push(t);t._addParent(this);return t};i.prototype.remove=function(e){var t=this._subscriptions;if(t){var r=t.indexOf(e);if(r!==-1){t.splice(r,1)}}};i.prototype._addParent=function(e){var t=this,r=t._parent,n=t._parents;if(!r||r===e){this._parent=e}else if(!n){this._parents=[e]}else if(n.indexOf(e)===-1){n.push(e)}};i.EMPTY=function(e){e.closed=true;return e}(new i);return i}();r.Subscription=n;function y(e){return e.reduce(function(e,t){return e.concat(t instanceof g.UnsubscriptionError?t.errors:t)},[])}},{"./util/UnsubscriptionError":198,"./util/errorObject":200,"./util/isArray":203,"./util/isFunction":206,"./util/isObject":210,"./util/tryCatch":224}],41:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=false;r.config={Promise:undefined,set useDeprecatedSynchronousErrorHandling(e){if(e){var t=new Error;console.warn("DEPRECATED! RxJS was set to use deprecated synchronous error handling behavior by code at: \n"+t.stack)}else if(n){console.log("RxJS: Back to a better error behavior. Thank you. <3")}n=e},get useDeprecatedSynchronousErrorHandling(){return n}}},{}],42:[function(e,t,r){"use strict";var i=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var n=e("../Subject");var o=e("../Observable");var a=e("../Subscriber");var s=e("../Subscription");var u=e("../operators/refCount");var c=function(n){i(e,n);function e(e,t){var r=n.call(this)||this;r.source=e;r.subjectFactory=t;r._refCount=0;r._isComplete=false;return r}e.prototype._subscribe=function(e){return this.getSubject().subscribe(e)};e.prototype.getSubject=function(){var e=this._subject;if(!e||e.isStopped){this._subject=this.subjectFactory()}return this._subject};e.prototype.connect=function(){var e=this._connection;if(!e){this._isComplete=false;e=this._connection=new s.Subscription;e.add(this.source.subscribe(new l(this.getSubject(),this)));if(e.closed){this._connection=null;e=s.Subscription.EMPTY}else{this._connection=e}}return e};e.prototype.refCount=function(){return u.refCount()(this)};return e}(o.Observable);r.ConnectableObservable=c;var h=c.prototype;r.connectableObservableDescriptor={operator:{value:null},_refCount:{value:0,writable:true},_subject:{value:null,writable:true},_connection:{value:null,writable:true},_subscribe:{value:h._subscribe},_isComplete:{value:h._isComplete,writable:true},getSubject:{value:h.getSubject},connect:{value:h.connect},refCount:{value:h.refCount}};var l=function(n){i(e,n);function e(e,t){var r=n.call(this,e)||this;r.connectable=t;return r}e.prototype._error=function(e){this._unsubscribe();n.prototype._error.call(this,e)};e.prototype._complete=function(){this.connectable._isComplete=true;this._unsubscribe();n.prototype._complete.call(this)};e.prototype._unsubscribe=function(){var e=this.connectable;if(e){this.connectable=null;var t=e._connection;e._refCount=0;e._subject=null;e._connection=null;if(t){t.unsubscribe()}}};return e}(n.SubjectSubscriber);var p=function(){function e(e){this.connectable=e}e.prototype.call=function(e,t){var r=this.connectable;r._refCount++;var n=new f(e,r);var i=t.subscribe(n);if(!n.closed){n.connection=r.connect()}return i};return e}();var f=function(n){i(e,n);function e(e,t){var r=n.call(this,e)||this;r.connectable=t;return r}e.prototype._unsubscribe=function(){var e=this.connectable;if(!e){this.connection=null;return}this.connectable=null;var t=e._refCount;if(t<=0){this.connection=null;return}e._refCount=t-1;if(t>1){this.connection=null;return}var r=this.connection;var n=e._connection;this.connection=null;if(n&&(!r||n===r)){n.unsubscribe()}};return e}(a.Subscriber)},{"../Observable":32,"../Subject":37,"../Subscriber":39,"../Subscription":40,"../operators/refCount":134}],43:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var i=e("../Observable");var a=e("../scheduler/asap");var s=e("../util/isNumeric");var o=function(i){n(o,i);function o(e,t,r){if(t===void 0){t=0}if(r===void 0){r=a.asap}var n=i.call(this)||this;n.source=e;n.delayTime=t;n.scheduler=r;if(!s.isNumeric(t)||t<0){n.delayTime=0}if(!r||typeof r.schedule!=="function"){n.scheduler=a.asap}return n}o.create=function(e,t,r){if(t===void 0){t=0}if(r===void 0){r=a.asap}return new o(e,t,r)};o.dispatch=function(e){var t=e.source,r=e.subscriber;return this.add(t.subscribe(r))};o.prototype._subscribe=function(e){var t=this.delayTime;var r=this.source;var n=this.scheduler;return n.schedule(o.dispatch,t,{source:r,subscriber:e})};return o}(i.Observable);r.SubscribeOnObservable=o},{"../Observable":32,"../scheduler/asap":187,"../util/isNumeric":209}],44:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var c=e("../Observable");var l=e("../AsyncSubject");var n=e("../operators/map");var h=e("../util/canReportError");var i=e("../util/isArray");var o=e("../util/isScheduler");function a(s,r,u){if(r){if(o.isScheduler(r)){u=r}else{return function(){var e=[];for(var t=0;t<arguments.length;t++){e[t]=arguments[t]}return a(s,u).apply(void 0,e).pipe(n.map(function(e){return i.isArray(e)?r.apply(void 0,e):r(e)}))}}}return function(){var n=[];for(var e=0;e<arguments.length;e++){n[e]=arguments[e]}var i=this;var o;var a={context:i,subject:o,callbackFunc:s,scheduler:u};return new c.Observable(function(e){if(!u){if(!o){o=new l.AsyncSubject;var t=function(){var e=[];for(var t=0;t<arguments.length;t++){e[t]=arguments[t]}o.next(e.length<=1?e[0]:e);o.complete()};try{s.apply(i,n.concat([t]))}catch(e){if(h.canReportError(o)){o.error(e)}else{console.warn(e)}}}return o.subscribe(e)}else{var r={args:n,subscriber:e,params:a};return u.schedule(p,0,r)}})}}r.bindCallback=a;function p(e){var n=this;var t=this;var r=e.args,i=e.subscriber,o=e.params;var a=o.callbackFunc,s=o.context,u=o.scheduler;var c=o.subject;if(!c){c=o.subject=new l.AsyncSubject;var h=function(){var e=[];for(var t=0;t<arguments.length;t++){e[t]=arguments[t]}var r=e.length<=1?e[0]:e;n.add(u.schedule(f,0,{value:r,subject:c}))};try{a.apply(s,r.concat([h]))}catch(e){c.error(e)}}this.add(c.subscribe(i))}function f(e){var t=e.value,r=e.subject;r.next(t);r.complete()}function s(e){var t=e.err,r=e.subject;r.error(t)}},{"../AsyncSubject":28,"../Observable":32,"../operators/map":112,"../util/canReportError":199,"../util/isArray":203,"../util/isScheduler":213}],45:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("../Observable");var h=e("../AsyncSubject");var i=e("../operators/map");var u=e("../util/canReportError");var o=e("../util/isScheduler");var c=e("../util/isArray");function l(a,r,s){if(r){if(o.isScheduler(r)){s=r}else{return function(){var e=[];for(var t=0;t<arguments.length;t++){e[t]=arguments[t]}return l(a,s).apply(void 0,e).pipe(i.map(function(e){return c.isArray(e)?r.apply(void 0,e):r(e)}))}}}return function(){var i=[];for(var e=0;e<arguments.length;e++){i[e]=arguments[e]}var o={subject:undefined,args:i,callbackFunc:a,scheduler:s,context:this};return new n.Observable(function(e){var t=o.context;var n=o.subject;if(!s){if(!n){n=o.subject=new h.AsyncSubject;var r=function(){var e=[];for(var t=0;t<arguments.length;t++){e[t]=arguments[t]}var r=e.shift();if(r){n.error(r);return}n.next(e.length<=1?e[0]:e);n.complete()};try{a.apply(t,i.concat([r]))}catch(e){if(u.canReportError(n)){n.error(e)}else{console.warn(e)}}}return n.subscribe(e)}else{return s.schedule(p,0,{params:o,subscriber:e,context:t})}})}}r.bindNodeCallback=l;function p(e){var i=this;var t=e.params,r=e.subscriber,n=e.context;var o=t.callbackFunc,a=t.args,s=t.scheduler;var u=t.subject;if(!u){u=t.subject=new h.AsyncSubject;var c=function(){var e=[];for(var t=0;t<arguments.length;t++){e[t]=arguments[t]}var r=e.shift();if(r){i.add(s.schedule(d,0,{err:r,subject:u}))}else{var n=e.length<=1?e[0]:e;i.add(s.schedule(f,0,{value:n,subject:u}))}};try{o.apply(n,a.concat([c]))}catch(e){this.add(s.schedule(d,0,{err:e,subject:u}))}}this.add(u.subscribe(r))}function f(e){var t=e.value,r=e.subject;r.next(t);r.complete()}function d(e){var t=e.err,r=e.subject;r.error(t)}},{"../AsyncSubject":28,"../Observable":32,"../operators/map":112,"../util/canReportError":199,"../util/isArray":203,"../util/isScheduler":213}],46:[function(e,t,r){"use strict";var i=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var o=e("../util/isScheduler");var a=e("../util/isArray");var n=e("../OuterSubscriber");var s=e("../util/subscribeToResult");var u=e("./fromArray");var c={};function h(){var e=[];for(var t=0;t<arguments.length;t++){e[t]=arguments[t]}var r=null;var n=null;if(o.isScheduler(e[e.length-1])){n=e.pop()}if(typeof e[e.length-1]==="function"){r=e.pop()}if(e.length===1&&a.isArray(e[0])){e=e[0]}return u.fromArray(e,n).lift(new l(r))}r.combineLatest=h;var l=function(){function e(e){this.resultSelector=e}e.prototype.call=function(e,t){return t.subscribe(new p(e,this.resultSelector))};return e}();r.CombineLatestOperator=l;var p=function(n){i(e,n);function e(e,t){var r=n.call(this,e)||this;r.resultSelector=t;r.active=0;r.values=[];r.observables=[];return r}e.prototype._next=function(e){this.values.push(c);this.observables.push(e)};e.prototype._complete=function(){var e=this.observables;var t=e.length;if(t===0){this.destination.complete()}else{this.active=t;this.toRespond=t;for(var r=0;r<t;r++){var n=e[r];this.add(s.subscribeToResult(this,n,n,r))}}};e.prototype.notifyComplete=function(e){if((this.active-=1)===0){this.destination.complete()}};e.prototype.notifyNext=function(e,t,r,n,i){var o=this.values;var a=o[r];var s=!this.toRespond?0:a===c?--this.toRespond:this.toRespond;o[r]=t;if(s===0){if(this.resultSelector){this._tryResultSelector(o)}else{this.destination.next(o.slice())}}};e.prototype._tryResultSelector=function(e){var t;try{t=this.resultSelector.apply(this,e)}catch(e){this.destination.error(e);return}this.destination.next(t)};return e}(n.OuterSubscriber);r.CombineLatestSubscriber=p},{"../OuterSubscriber":34,"../util/isArray":203,"../util/isScheduler":213,"../util/subscribeToResult":222,"./fromArray":52}],47:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("../util/isScheduler");var i=e("./of");var o=e("./from");var a=e("../operators/concatAll");function s(){var e=[];for(var t=0;t<arguments.length;t++){e[t]=arguments[t]}if(e.length===1||e.length===2&&n.isScheduler(e[1])){return o.from(e[0])}return a.concatAll()(i.of.apply(void 0,e))}r.concat=s},{"../operators/concatAll":84,"../util/isScheduler":213,"./from":51,"./of":63}],48:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var i=e("../Observable");var o=e("./from");var a=e("./empty");function n(n){return new i.Observable(function(t){var e;try{e=n()}catch(e){t.error(e);return undefined}var r=e?o.from(e):a.empty();return r.subscribe(t)})}r.defer=n},{"../Observable":32,"./empty":49,"./from":51}],49:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("../Observable");r.EMPTY=new n.Observable(function(e){return e.complete()});function i(e){return e?o(e):r.EMPTY}r.empty=i;function o(t){return new n.Observable(function(e){return t.schedule(function(){return e.complete()})})}r.emptyScheduled=o},{"../Observable":32}],50:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var i=e("../Observable");var o=e("../util/isArray");var a=e("./empty");var u=e("../util/subscribeToResult");var s=e("../OuterSubscriber");var c=e("../operators/map");function h(){var t=[];for(var e=0;e<arguments.length;e++){t[e]=arguments[e]}var r;if(typeof t[t.length-1]==="function"){r=t.pop()}if(t.length===1&&o.isArray(t[0])){t=t[0]}if(t.length===0){return a.EMPTY}if(r){return h(t).pipe(c.map(function(e){return r.apply(void 0,e)}))}return new i.Observable(function(e){return new l(e,t)})}r.forkJoin=h;var l=function(s){n(e,s);function e(e,t){var r=s.call(this,e)||this;r.sources=t;r.completed=0;r.haveValues=0;var n=t.length;r.values=new Array(n);for(var i=0;i<n;i++){var o=t[i];var a=u.subscribeToResult(r,o,null,i);if(a){r.add(a)}}return r}e.prototype.notifyNext=function(e,t,r,n,i){this.values[r]=t;if(!i._hasValue){i._hasValue=true;this.haveValues++}};e.prototype.notifyComplete=function(e){var t=this,r=t.destination,n=t.haveValues,i=t.values;var o=i.length;if(!e._hasValue){r.complete();return}this.completed++;if(this.completed!==o){return}if(n===o){r.next(i)}r.complete()};return e}(s.OuterSubscriber)},{"../Observable":32,"../OuterSubscriber":34,"../operators/map":112,"../util/isArray":203,"../util/subscribeToResult":222,"./empty":49}],51:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("../Observable");var i=e("../util/isPromise");var o=e("../util/isArrayLike");var a=e("../util/isInteropObservable");var s=e("../util/isIterable");var u=e("./fromArray");var c=e("./fromPromise");var h=e("./fromIterable");var l=e("./fromObservable");var p=e("../util/subscribeTo");function f(e,t){if(!t){if(e instanceof n.Observable){return e}return new n.Observable(p.subscribeTo(e))}if(e!=null){if(a.isInteropObservable(e)){return l.fromObservable(e,t)}else if(i.isPromise(e)){return c.fromPromise(e,t)}else if(o.isArrayLike(e)){return u.fromArray(e,t)}else if(s.isIterable(e)||typeof e==="string"){return h.fromIterable(e,t)}}throw new TypeError((e!==null&&typeof e||e)+" is not observable")}r.from=f},{"../Observable":32,"../util/isArrayLike":204,"../util/isInteropObservable":207,"../util/isIterable":208,"../util/isPromise":212,"../util/subscribeTo":217,"./fromArray":52,"./fromIterable":55,"./fromObservable":56,"./fromPromise":57}],52:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var o=e("../Observable");var a=e("../Subscription");var s=e("../util/subscribeToArray");function n(n,i){if(!i){return new o.Observable(s.subscribeToArray(n))}else{return new o.Observable(function(e){var t=new a.Subscription;var r=0;t.add(i.schedule(function(){if(r===n.length){e.complete();return}e.next(n[r++]);if(!e.closed){t.add(this.schedule())}}));return t})}}r.fromArray=n},{"../Observable":32,"../Subscription":40,"../util/subscribeToArray":218}],53:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var o=e("../Observable");var a=e("../util/isArray");var s=e("../util/isFunction");var u=e("../operators/map");var n=Object.prototype.toString;function c(r,n,i,t){if(s.isFunction(i)){t=i;i=undefined}if(t){return c(r,n,i).pipe(u.map(function(e){return a.isArray(e)?t.apply(void 0,e):t(e)}))}return new o.Observable(function(t){function e(e){if(arguments.length>1){t.next(Array.prototype.slice.call(arguments))}else{t.next(e)}}l(r,n,e,t,i)})}r.fromEvent=c;function l(e,t,r,n,i){var o;if(d(e)){var a=e;e.addEventListener(t,r,i);o=function(){return a.removeEventListener(t,r,i)}}else if(f(e)){var s=e;e.on(t,r);o=function(){return s.off(t,r)}}else if(p(e)){var u=e;e.addListener(t,r);o=function(){return u.removeListener(t,r)}}else if(e&&e.length){for(var c=0,h=e.length;c<h;c++){l(e[c],t,r,n,i)}}else{throw new TypeError("Invalid event target")}n.add(o)}function p(e){return e&&typeof e.addListener==="function"&&typeof e.removeListener==="function"}function f(e){return e&&typeof e.on==="function"&&typeof e.off==="function"}function d(e){return e&&typeof e.addEventListener==="function"&&typeof e.removeEventListener==="function"}},{"../Observable":32,"../operators/map":112,"../util/isArray":203,"../util/isFunction":206}],54:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var o=e("../Observable");var a=e("../util/isArray");var s=e("../util/isFunction");var u=e("../operators/map");function c(n,i,t){if(t){return c(n,i).pipe(u.map(function(e){return a.isArray(e)?t.apply(void 0,e):t(e)}))}return new o.Observable(function(r){var e=function(){var e=[];for(var t=0;t<arguments.length;t++){e[t]=arguments[t]}return r.next(e.length===1?e[0]:e)};var t;try{t=n(e)}catch(e){r.error(e);return undefined}if(!s.isFunction(i)){return undefined}return function(){return i(e,t)}})}r.fromEventPattern=c},{"../Observable":32,"../operators/map":112,"../util/isArray":203,"../util/isFunction":206}],55:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("../Observable");var o=e("../Subscription");var a=e("../symbol/iterator");var i=e("../util/subscribeToIterable");function s(t,r){if(!t){throw new Error("Iterable cannot be null")}if(!r){return new n.Observable(i.subscribeToIterable(t))}else{return new n.Observable(function(n){var e=new o.Subscription;var i;e.add(function(){if(i&&typeof i.return==="function"){i.return()}});e.add(r.schedule(function(){i=t[a.iterator]();e.add(r.schedule(function(){if(n.closed){return}var e;var t;try{var r=i.next();e=r.value;t=r.done}catch(e){n.error(e);return}if(t){n.complete()}else{n.next(e);this.schedule()}}))}));return e})}}r.fromIterable=s},{"../Observable":32,"../Subscription":40,"../symbol/iterator":190,"../util/subscribeToIterable":219}],56:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var o=e("../Observable");var a=e("../Subscription");var s=e("../symbol/observable");var u=e("../util/subscribeToObservable");function n(n,i){if(!i){return new o.Observable(u.subscribeToObservable(n))}else{return new o.Observable(function(t){var r=new a.Subscription;r.add(i.schedule(function(){var e=n[s.observable]();r.add(e.subscribe({next:function(e){r.add(i.schedule(function(){return t.next(e)}))},error:function(e){r.add(i.schedule(function(){return t.error(e)}))},complete:function(){r.add(i.schedule(function(){return t.complete()}))}}))}));return r})}}r.fromObservable=n},{"../Observable":32,"../Subscription":40,"../symbol/observable":191,"../util/subscribeToObservable":220}],57:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var i=e("../Observable");var o=e("../Subscription");var a=e("../util/subscribeToPromise");function n(e,n){if(!n){return new i.Observable(a.subscribeToPromise(e))}else{return new i.Observable(function(t){var r=new o.Subscription;r.add(n.schedule(function(){return e.then(function(e){r.add(n.schedule(function(){t.next(e);r.add(n.schedule(function(){return t.complete()}))}))},function(e){r.add(n.schedule(function(){return t.error(e)}))})}));return r})}}r.fromPromise=n},{"../Observable":32,"../Subscription":40,"../util/subscribeToPromise":221}],58:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("../Observable");var c=e("../util/identity");var h=e("../util/isScheduler");function i(e,i,o,t,a){var s;var u;if(arguments.length==1){var r=e;u=r.initialState;i=r.condition;o=r.iterate;s=r.resultSelector||c.identity;a=r.scheduler}else if(t===undefined||h.isScheduler(t)){u=e;s=c.identity;a=t}else{u=e;s=t}return new n.Observable(function(t){var e=u;if(a){return a.schedule(l,0,{subscriber:t,iterate:o,condition:i,resultSelector:s,state:e})}do{if(i){var r=void 0;try{r=i(e)}catch(e){t.error(e);return undefined}if(!r){t.complete();break}}var n=void 0;try{n=s(e)}catch(e){t.error(e);return undefined}t.next(n);if(t.closed){break}try{e=o(e)}catch(e){t.error(e);return undefined}}while(true);return undefined})}r.generate=i;function l(e){var t=e.subscriber,r=e.condition;if(t.closed){return undefined}if(e.needIterate){try{e.state=e.iterate(e.state)}catch(e){t.error(e);return undefined}}else{e.needIterate=true}if(r){var n=void 0;try{n=r(e.state)}catch(e){t.error(e);return undefined}if(!n){t.complete();return undefined}if(t.closed){return undefined}}var i;try{i=e.resultSelector(e.state)}catch(e){t.error(e);return undefined}if(t.closed){return undefined}t.next(i);if(t.closed){return undefined}return this.schedule(e)}},{"../Observable":32,"../util/identity":202,"../util/isScheduler":213}],59:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("./defer");var i=e("./empty");function o(e,t,r){if(t===void 0){t=i.EMPTY}if(r===void 0){r=i.EMPTY}return n.defer(function(){return e()?t:r})}r.iif=o},{"./defer":48,"./empty":49}],60:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("../Observable");var i=e("../scheduler/async");var o=e("../util/isNumeric");function a(t,r){if(t===void 0){t=0}if(r===void 0){r=i.async}if(!o.isNumeric(t)||t<0){t=0}if(!r||typeof r.schedule!=="function"){r=i.async}return new n.Observable(function(e){e.add(r.schedule(s,t,{subscriber:e,counter:0,period:t}));return e})}r.interval=a;function s(e){var t=e.subscriber,r=e.counter,n=e.period;t.next(r);this.schedule({subscriber:t,counter:r+1,period:n},n)}},{"../Observable":32,"../scheduler/async":188,"../util/isNumeric":209}],61:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var o=e("../Observable");var a=e("../util/isScheduler");var s=e("../operators/mergeAll");var u=e("./fromArray");function n(){var e=[];for(var t=0;t<arguments.length;t++){e[t]=arguments[t]}var r=Number.POSITIVE_INFINITY;var n=null;var i=e[e.length-1];if(a.isScheduler(i)){n=e.pop();if(e.length>1&&typeof e[e.length-1]==="number"){r=e.pop()}}else if(typeof i==="number"){r=e.pop()}if(n===null&&e.length===1&&e[0]instanceof o.Observable){return e[0]}return s.mergeAll(r)(u.fromArray(e,n))}r.merge=n},{"../Observable":32,"../operators/mergeAll":117,"../util/isScheduler":213,"./fromArray":52}],62:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("../Observable");var i=e("../util/noop");r.NEVER=new n.Observable(i.noop);function o(){return r.NEVER}r.never=o},{"../Observable":32,"../util/noop":214}],63:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("../util/isScheduler");var i=e("./fromArray");var o=e("./empty");var a=e("./scalar");function s(){var e=[];for(var t=0;t<arguments.length;t++){e[t]=arguments[t]}var r=e[e.length-1];if(n.isScheduler(r)){e.pop()}else{r=undefined}switch(e.length){case 0:return o.empty(r);case 1:return r?i.fromArray(e,r):a.scalar(e[0]);default:return i.fromArray(e,r)}}r.of=s},{"../util/isScheduler":213,"./empty":49,"./fromArray":52,"./scalar":68}],64:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var i=e("../Observable");var o=e("./from");var a=e("../util/isArray");var s=e("./empty");function u(){var e=[];for(var t=0;t<arguments.length;t++){e[t]=arguments[t]}if(e.length===0){return s.EMPTY}var r=e[0],n=e.slice(1);if(e.length===1&&a.isArray(r)){return u.apply(void 0,r)}return new i.Observable(function(t){var e=function(){return t.add(u.apply(void 0,n).subscribe(t))};return o.from(r).subscribe({next:function(e){t.next(e)},error:e,complete:e})})}r.onErrorResumeNext=u},{"../Observable":32,"../util/isArray":203,"./empty":49,"./from":51}],65:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var o=e("../Observable");var a=e("../Subscription");function n(i,n){if(!n){return new o.Observable(function(e){var t=Object.keys(i);for(var r=0;r<t.length&&!e.closed;r++){var n=t[r];if(i.hasOwnProperty(n)){e.next([n,i[n]])}}e.complete()})}else{return new o.Observable(function(e){var t=Object.keys(i);var r=new a.Subscription;r.add(n.schedule(s,0,{keys:t,index:0,subscriber:e,subscription:r,obj:i}));return r})}}r.pairs=n;function s(e){var t=e.keys,r=e.index,n=e.subscriber,i=e.subscription,o=e.obj;if(!n.closed){if(r<t.length){var a=t[r];n.next([a,o[a]]);i.add(this.schedule({keys:t,index:r+1,subscriber:n,subscription:i,obj:o}))}else{n.complete()}}}r.dispatch=s},{"../Observable":32,"../Subscription":40}],66:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var i=e("../util/isArray");var o=e("./fromArray");var a=e("../OuterSubscriber");var s=e("../util/subscribeToResult");function u(){var e=[];for(var t=0;t<arguments.length;t++){e[t]=arguments[t]}if(e.length===1){if(i.isArray(e[0])){e=e[0]}else{return e[0]}}return o.fromArray(e,undefined).lift(new c)}r.race=u;var c=function(){function e(){}e.prototype.call=function(e,t){return t.subscribe(new h(e))};return e}();r.RaceOperator=c;var h=function(r){n(e,r);function e(e){var t=r.call(this,e)||this;t.hasFirst=false;t.observables=[];t.subscriptions=[];return t}e.prototype._next=function(e){this.observables.push(e)};e.prototype._complete=function(){var e=this.observables;var t=e.length;if(t===0){this.destination.complete()}else{for(var r=0;r<t&&!this.hasFirst;r++){var n=e[r];var i=s.subscribeToResult(this,n,n,r);if(this.subscriptions){this.subscriptions.push(i)}this.add(i)}this.observables=null}};e.prototype.notifyNext=function(e,t,r,n,i){if(!this.hasFirst){this.hasFirst=true;for(var o=0;o<this.subscriptions.length;o++){if(o!==r){var a=this.subscriptions[o];a.unsubscribe();this.remove(a)}}this.subscriptions=null}this.destination.next(t)};return e}(a.OuterSubscriber);r.RaceSubscriber=h},{"../OuterSubscriber":34,"../util/isArray":203,"../util/subscribeToResult":222,"./fromArray":52}],67:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var a=e("../Observable");function n(n,i,o){if(n===void 0){n=0}if(i===void 0){i=0}return new a.Observable(function(e){var t=0;var r=n;if(o){return o.schedule(s,0,{index:t,count:i,start:n,subscriber:e})}else{do{if(t++>=i){e.complete();break}e.next(r++);if(e.closed){break}}while(true)}return undefined})}r.range=n;function s(e){var t=e.start,r=e.index,n=e.count,i=e.subscriber;if(r>=n){i.complete();return}i.next(t);if(i.closed){return}e.index=r+1;e.start=t+1;this.schedule(e)}r.dispatch=s},{"../Observable":32}],68:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("../Observable");function i(t){var e=new n.Observable(function(e){e.next(t);e.complete()});e._isScalar=true;e.value=t;return e}r.scalar=i},{"../Observable":32}],69:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("../Observable");function i(t,r){if(!r){return new n.Observable(function(e){return e.error(t)})}else{return new n.Observable(function(e){return r.schedule(o,0,{error:t,subscriber:e})})}}r.throwError=i;function o(e){var t=e.error,r=e.subscriber;r.error(t)}},{"../Observable":32}],70:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var o=e("../Observable");var a=e("../scheduler/async");var s=e("../util/isNumeric");var u=e("../util/isScheduler");function n(r,e,n){if(r===void 0){r=0}var i=-1;if(s.isNumeric(e)){i=Number(e)<1&&1||Number(e)}else if(u.isScheduler(e)){n=e}if(!u.isScheduler(n)){n=a.async}return new o.Observable(function(e){var t=s.isNumeric(r)?r:+r-n.now();return n.schedule(c,t,{index:0,period:i,subscriber:e})})}r.timer=n;function c(e){var t=e.index,r=e.period,n=e.subscriber;n.next(t);if(n.closed){return}else if(r===-1){return n.complete()}e.index=t+1;this.schedule(e,r)}},{"../Observable":32,"../scheduler/async":188,"../util/isNumeric":209,"../util/isScheduler":213}],71:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("../Observable");var s=e("./from");var u=e("./empty");function i(o,a){return new n.Observable(function(t){var e;try{e=o()}catch(e){t.error(e);return undefined}var r;try{r=a(e)}catch(e){t.error(e);return undefined}var n=r?s.from(r):u.EMPTY;var i=n.subscribe(t);return function(){i.unsubscribe();if(e){e.unsubscribe()}}})}r.using=i},{"../Observable":32,"./empty":49,"./from":51}],72:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var i=e("./fromArray");var o=e("../util/isArray");var a=e("../Subscriber");var s=e("../OuterSubscriber");var u=e("../util/subscribeToResult");var c=e("../../internal/symbol/iterator");function h(){var e=[];for(var t=0;t<arguments.length;t++){e[t]=arguments[t]}var r=e[e.length-1];if(typeof r==="function"){e.pop()}return i.fromArray(e,undefined).lift(new l(r))}r.zip=h;var l=function(){function e(e){this.resultSelector=e}e.prototype.call=function(e,t){return t.subscribe(new p(e,this.resultSelector))};return e}();r.ZipOperator=l;var p=function(i){n(e,i);function e(e,t,r){if(r===void 0){r=Object.create(null)}var n=i.call(this,e)||this;n.iterators=[];n.active=0;n.resultSelector=typeof t==="function"?t:null;n.values=r;return n}e.prototype._next=function(e){var t=this.iterators;if(o.isArray(e)){t.push(new d(e))}else if(typeof e[c.iterator]==="function"){t.push(new f(e[c.iterator]()))}else{t.push(new v(this.destination,this,e))}};e.prototype._complete=function(){var e=this.iterators;var t=e.length;this.unsubscribe();if(t===0){this.destination.complete();return}this.active=t;for(var r=0;r<t;r++){var n=e[r];if(n.stillUnsubscribed){var i=this.destination;i.add(n.subscribe(n,r))}else{this.active--}}};e.prototype.notifyInactive=function(){this.active--;if(this.active===0){this.destination.complete()}};e.prototype.checkIterators=function(){var e=this.iterators;var t=e.length;var r=this.destination;for(var n=0;n<t;n++){var i=e[n];if(typeof i.hasValue==="function"&&!i.hasValue()){return}}var o=false;var a=[];for(var n=0;n<t;n++){var i=e[n];var s=i.next();if(i.hasCompleted()){o=true}if(s.done){r.complete();return}a.push(s.value)}if(this.resultSelector){this._tryresultSelector(a)}else{r.next(a)}if(o){r.complete()}};e.prototype._tryresultSelector=function(e){var t;try{t=this.resultSelector.apply(this,e)}catch(e){this.destination.error(e);return}this.destination.next(t)};return e}(a.Subscriber);r.ZipSubscriber=p;var f=function(){function e(e){this.iterator=e;this.nextResult=e.next()}e.prototype.hasValue=function(){return true};e.prototype.next=function(){var e=this.nextResult;this.nextResult=this.iterator.next();return e};e.prototype.hasCompleted=function(){var e=this.nextResult;return e&&e.done};return e}();var d=function(){function e(e){this.array=e;this.index=0;this.length=0;this.length=e.length}e.prototype[c.iterator]=function(){return this};e.prototype.next=function(e){var t=this.index++;var r=this.array;return t<this.length?{value:r[t],done:false}:{value:null,done:true}};e.prototype.hasValue=function(){return this.array.length>this.index};e.prototype.hasCompleted=function(){return this.array.length===this.index};return e}();var v=function(i){n(e,i);function e(e,t,r){var n=i.call(this,e)||this;n.parent=t;n.observable=r;n.stillUnsubscribed=true;n.buffer=[];n.isComplete=false;return n}e.prototype[c.iterator]=function(){return this};e.prototype.next=function(){var e=this.buffer;if(e.length===0&&this.isComplete){return{value:null,done:true}}else{return{value:e.shift(),done:false}}};e.prototype.hasValue=function(){return this.buffer.length>0};e.prototype.hasCompleted=function(){return this.buffer.length===0&&this.isComplete};e.prototype.notifyComplete=function(){if(this.buffer.length>0){this.isComplete=true;this.parent.notifyInactive()}else{this.destination.complete()}};e.prototype.notifyNext=function(e,t,r,n,i){this.buffer.push(t);this.parent.checkIterators()};e.prototype.subscribe=function(e,t){return u.subscribeToResult(this,this.observable,this,t)};return e}(s.OuterSubscriber)},{"../../internal/symbol/iterator":190,"../OuterSubscriber":34,"../Subscriber":39,"../util/isArray":203,"../util/subscribeToResult":222,"./fromArray":52}],73:[function(e,t,r){"use strict";var i=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var o=e("../util/tryCatch");var a=e("../util/errorObject");var n=e("../OuterSubscriber");var s=e("../util/subscribeToResult");function u(r){return function e(t){return t.lift(new c(r))}}r.audit=u;var c=function(){function e(e){this.durationSelector=e}e.prototype.call=function(e,t){return t.subscribe(new h(e,this.durationSelector))};return e}();var h=function(n){i(e,n);function e(e,t){var r=n.call(this,e)||this;r.durationSelector=t;r.hasValue=false;return r}e.prototype._next=function(e){this.value=e;this.hasValue=true;if(!this.throttled){var t=o.tryCatch(this.durationSelector)(e);if(t===a.errorObject){this.destination.error(a.errorObject.e)}else{var r=s.subscribeToResult(this,t);if(!r||r.closed){this.clearThrottle()}else{this.add(this.throttled=r)}}}};e.prototype.clearThrottle=function(){var e=this,t=e.value,r=e.hasValue,n=e.throttled;if(n){this.remove(n);this.throttled=null;n.unsubscribe()}if(r){this.value=null;this.hasValue=false;this.destination.next(t)}};e.prototype.notifyNext=function(e,t,r,n){this.clearThrottle()};e.prototype.notifyComplete=function(){this.clearThrottle()};return e}(n.OuterSubscriber)},{"../OuterSubscriber":34,"../util/errorObject":200,"../util/subscribeToResult":222,"../util/tryCatch":224}],74:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("../scheduler/async");var i=e("./audit");var o=e("../observable/timer");function a(e,t){if(t===void 0){t=n.async}return i.audit(function(){return o.timer(e,t)})}r.auditTime=a},{"../observable/timer":70,"../scheduler/async":188,"./audit":73}],75:[function(e,t,r){"use strict";var i=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var n=e("../OuterSubscriber");var o=e("../util/subscribeToResult");function a(r){return function e(t){return t.lift(new s(r))}}r.buffer=a;var s=function(){function e(e){this.closingNotifier=e}e.prototype.call=function(e,t){return t.subscribe(new u(e,this.closingNotifier))};return e}();var u=function(n){i(e,n);function e(e,t){var r=n.call(this,e)||this;r.buffer=[];r.add(o.subscribeToResult(r,t));return r}e.prototype._next=function(e){this.buffer.push(e)};e.prototype.notifyNext=function(e,t,r,n,i){var o=this.buffer;this.buffer=[];this.destination.next(o)};return e}(n.OuterSubscriber)},{"../OuterSubscriber":34,"../util/subscribeToResult":222}],76:[function(e,t,r){"use strict";var o=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var n=e("../Subscriber");function i(r,n){if(n===void 0){n=null}return function e(t){return t.lift(new a(r,n))}}r.bufferCount=i;var a=function(){function e(e,t){this.bufferSize=e;this.startBufferEvery=t;if(!t||e===t){this.subscriberClass=s}else{this.subscriberClass=u}}e.prototype.call=function(e,t){return t.subscribe(new this.subscriberClass(e,this.bufferSize,this.startBufferEvery))};return e}();var s=function(n){o(e,n);function e(e,t){var r=n.call(this,e)||this;r.bufferSize=t;r.buffer=[];return r}e.prototype._next=function(e){var t=this.buffer;t.push(e);if(t.length==this.bufferSize){this.destination.next(t);this.buffer=[]}};e.prototype._complete=function(){var e=this.buffer;if(e.length>0){this.destination.next(e)}n.prototype._complete.call(this)};return e}(n.Subscriber);var u=function(i){o(e,i);function e(e,t,r){var n=i.call(this,e)||this;n.bufferSize=t;n.startBufferEvery=r;n.buffers=[];n.count=0;return n}e.prototype._next=function(e){var t=this,r=t.bufferSize,n=t.startBufferEvery,i=t.buffers,o=t.count;this.count++;if(o%n===0){i.push([])}for(var a=i.length;a--;){var s=i[a];s.push(e);if(s.length===r){i.splice(a,1);this.destination.next(s)}}};e.prototype._complete=function(){var e=this,t=e.buffers,r=e.destination;while(t.length>0){var n=t.shift();if(n.length>0){r.next(n)}}i.prototype._complete.call(this)};return e}(n.Subscriber)},{"../Subscriber":39}],77:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var a=e("../scheduler/async");var i=e("../Subscriber");var s=e("../util/isScheduler");function o(r){var e=arguments.length;var n=a.async;if(s.isScheduler(arguments[arguments.length-1])){n=arguments[arguments.length-1];e--}var i=null;if(e>=2){i=arguments[1]}var o=Number.POSITIVE_INFINITY;if(e>=3){o=arguments[2]}return function e(t){return t.lift(new u(r,i,o,n))}}r.bufferTime=o;var u=function(){function e(e,t,r,n){this.bufferTimeSpan=e;this.bufferCreationInterval=t;this.maxBufferSize=r;this.scheduler=n}e.prototype.call=function(e,t){return t.subscribe(new h(e,this.bufferTimeSpan,this.bufferCreationInterval,this.maxBufferSize,this.scheduler))};return e}();var c=function(){function e(){this.buffer=[]}return e}();var h=function(h){n(e,h);function e(e,t,r,n,i){var o=h.call(this,e)||this;o.bufferTimeSpan=t;o.bufferCreationInterval=r;o.maxBufferSize=n;o.scheduler=i;o.contexts=[];var a=o.openContext();o.timespanOnly=r==null||r<0;if(o.timespanOnly){var s={subscriber:o,context:a,bufferTimeSpan:t};o.add(a.closeAction=i.schedule(l,t,s))}else{var u={subscriber:o,context:a};var c={bufferTimeSpan:t,bufferCreationInterval:r,subscriber:o,scheduler:i};o.add(a.closeAction=i.schedule(f,t,u));o.add(i.schedule(p,r,c))}return o}e.prototype._next=function(e){var t=this.contexts;var r=t.length;var n;for(var i=0;i<r;i++){var o=t[i];var a=o.buffer;a.push(e);if(a.length==this.maxBufferSize){n=o}}if(n){this.onBufferFull(n)}};e.prototype._error=function(e){this.contexts.length=0;h.prototype._error.call(this,e)};e.prototype._complete=function(){var e=this,t=e.contexts,r=e.destination;while(t.length>0){var n=t.shift();r.next(n.buffer)}h.prototype._complete.call(this)};e.prototype._unsubscribe=function(){this.contexts=null};e.prototype.onBufferFull=function(e){this.closeContext(e);var t=e.closeAction;t.unsubscribe();this.remove(t);if(!this.closed&&this.timespanOnly){e=this.openContext();var r=this.bufferTimeSpan;var n={subscriber:this,context:e,bufferTimeSpan:r};this.add(e.closeAction=this.scheduler.schedule(l,r,n))}};e.prototype.openContext=function(){var e=new c;this.contexts.push(e);return e};e.prototype.closeContext=function(e){this.destination.next(e.buffer);var t=this.contexts;var r=t?t.indexOf(e):-1;if(r>=0){t.splice(t.indexOf(e),1)}};return e}(i.Subscriber);function l(e){var t=e.subscriber;var r=e.context;if(r){t.closeContext(r)}if(!t.closed){e.context=t.openContext();e.context.closeAction=this.schedule(e,e.bufferTimeSpan)}}function p(e){var t=e.bufferCreationInterval,r=e.bufferTimeSpan,n=e.subscriber,i=e.scheduler;var o=n.openContext();var a=this;if(!n.closed){n.add(o.closeAction=i.schedule(f,r,{subscriber:n,context:o}));a.schedule(e,t)}}function f(e){var t=e.subscriber,r=e.context;t.closeContext(r)}},{"../Subscriber":39,"../scheduler/async":188,"../util/isScheduler":213}],78:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var a=e("../Subscription");var s=e("../util/subscribeToResult");var i=e("../OuterSubscriber");function o(r,n){return function e(t){return t.lift(new u(r,n))}}r.bufferToggle=o;var u=function(){function e(e,t){this.openings=e;this.closingSelector=t}e.prototype.call=function(e,t){return t.subscribe(new c(e,this.openings,this.closingSelector))};return e}();var c=function(i){n(e,i);function e(e,t,r){var n=i.call(this,e)||this;n.openings=t;n.closingSelector=r;n.contexts=[];n.add(s.subscribeToResult(n,t));return n}e.prototype._next=function(e){var t=this.contexts;var r=t.length;for(var n=0;n<r;n++){t[n].buffer.push(e)}};e.prototype._error=function(e){var t=this.contexts;while(t.length>0){var r=t.shift();r.subscription.unsubscribe();r.buffer=null;r.subscription=null}this.contexts=null;i.prototype._error.call(this,e)};e.prototype._complete=function(){var e=this.contexts;while(e.length>0){var t=e.shift();this.destination.next(t.buffer);t.subscription.unsubscribe();t.buffer=null;t.subscription=null}this.contexts=null;i.prototype._complete.call(this)};e.prototype.notifyNext=function(e,t,r,n,i){e?this.closeBuffer(e):this.openBuffer(t)};e.prototype.notifyComplete=function(e){this.closeBuffer(e.context)};e.prototype.openBuffer=function(e){try{var t=this.closingSelector;var r=t.call(this,e);if(r){this.trySubscribe(r)}}catch(e){this._error(e)}};e.prototype.closeBuffer=function(e){var t=this.contexts;if(t&&e){var r=e.buffer,n=e.subscription;this.destination.next(r);t.splice(t.indexOf(e),1);this.remove(n);n.unsubscribe()}};e.prototype.trySubscribe=function(e){var t=this.contexts;var r=[];var n=new a.Subscription;var i={buffer:r,subscription:n};t.push(i);var o=s.subscribeToResult(this,e,i);if(!o||o.closed){this.closeBuffer(i)}else{o.context=i;this.add(o);n.add(o)}};return e}(i.OuterSubscriber)},{"../OuterSubscriber":34,"../Subscription":40,"../util/subscribeToResult":222}],79:[function(e,t,r){"use strict";var i=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var o=e("../Subscription");var a=e("../util/tryCatch");var s=e("../util/errorObject");var n=e("../OuterSubscriber");var u=e("../util/subscribeToResult");function c(t){return function(e){return e.lift(new h(t))}}r.bufferWhen=c;var h=function(){function e(e){this.closingSelector=e}e.prototype.call=function(e,t){return t.subscribe(new l(e,this.closingSelector))};return e}();var l=function(n){i(e,n);function e(e,t){var r=n.call(this,e)||this;r.closingSelector=t;r.subscribing=false;r.openBuffer();return r}e.prototype._next=function(e){this.buffer.push(e)};e.prototype._complete=function(){var e=this.buffer;if(e){this.destination.next(e)}n.prototype._complete.call(this)};e.prototype._unsubscribe=function(){this.buffer=null;this.subscribing=false};e.prototype.notifyNext=function(e,t,r,n,i){this.openBuffer()};e.prototype.notifyComplete=function(){if(this.subscribing){this.complete()}else{this.openBuffer()}};e.prototype.openBuffer=function(){var e=this.closingSubscription;if(e){this.remove(e);e.unsubscribe()}var t=this.buffer;if(this.buffer){this.destination.next(t)}this.buffer=[];var r=a.tryCatch(this.closingSelector)();if(r===s.errorObject){this.error(s.errorObject.e)}else{e=new o.Subscription;this.closingSubscription=e;this.add(e);this.subscribing=true;e.add(u.subscribeToResult(this,r));this.subscribing=false}};return e}(n.OuterSubscriber)},{"../OuterSubscriber":34,"../Subscription":40,"../util/errorObject":200,"../util/subscribeToResult":222,"../util/tryCatch":224}],80:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var i=e("../OuterSubscriber");var o=e("../InnerSubscriber");var a=e("../util/subscribeToResult");function s(i){return function e(t){var r=new u(i);var n=t.lift(r);return r.caught=n}}r.catchError=s;var u=function(){function e(e){this.selector=e}e.prototype.call=function(e,t){return t.subscribe(new c(e,this.selector,this.caught))};return e}();var c=function(i){n(e,i);function e(e,t,r){var n=i.call(this,e)||this;n.selector=t;n.caught=r;return n}e.prototype.error=function(e){if(!this.isStopped){var t=void 0;try{t=this.selector(e,this.caught)}catch(e){i.prototype.error.call(this,e);return}this._unsubscribeAndRecycle();var r=new o.InnerSubscriber(this,undefined,undefined);this.add(r);a.subscribeToResult(this,t,undefined,undefined,r)}};return e}(i.OuterSubscriber)},{"../InnerSubscriber":30,"../OuterSubscriber":34,"../util/subscribeToResult":222}],81:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("../observable/combineLatest");function i(t){return function(e){return e.lift(new n.CombineLatestOperator(t))}}r.combineAll=i},{"../observable/combineLatest":46}],82:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("../util/isArray");var i=e("../observable/combineLatest");var o=e("../observable/from");var a={};function s(){var t=[];for(var e=0;e<arguments.length;e++){t[e]=arguments[e]}var r=null;if(typeof t[t.length-1]==="function"){r=t.pop()}if(t.length===1&&n.isArray(t[0])){t=t[0].slice()}return function(e){return e.lift.call(o.from([e].concat(t)),new i.CombineLatestOperator(r))}}r.combineLatest=s},{"../observable/combineLatest":46,"../observable/from":51,"../util/isArray":203}],83:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("../observable/concat");function i(){var t=[];for(var e=0;e<arguments.length;e++){t[e]=arguments[e]}return function(e){return e.lift.call(n.concat.apply(void 0,[e].concat(t)))}}r.concat=i},{"../observable/concat":47}],84:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("./mergeAll");function i(){return n.mergeAll(1)}r.concatAll=i},{"./mergeAll":117}],85:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("./mergeMap");function i(e,t){return n.mergeMap(e,t,1)}r.concatMap=i},{"./mergeMap":118}],86:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("./concatMap");function i(e,t){return n.concatMap(function(){return e},t)}r.concatMapTo=i},{"./concatMap":85}],87:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var i=e("../Subscriber");function o(t){return function(e){return e.lift(new a(t,e))}}r.count=o;var a=function(){function e(e,t){this.predicate=e;this.source=t}e.prototype.call=function(e,t){return t.subscribe(new s(e,this.predicate,this.source))};return e}();var s=function(i){n(e,i);function e(e,t,r){var n=i.call(this,e)||this;n.predicate=t;n.source=r;n.count=0;n.index=0;return n}e.prototype._next=function(e){if(this.predicate){this._tryPredicate(e)}else{this.count++}};e.prototype._tryPredicate=function(e){var t;try{t=this.predicate(e,this.index++,this.source)}catch(e){this.destination.error(e);return}if(t){this.count++}};e.prototype._complete=function(){this.destination.next(this.count);this.destination.complete()};return e}(i.Subscriber)},{"../Subscriber":39}],88:[function(e,t,r){"use strict";var i=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var n=e("../OuterSubscriber");var o=e("../util/subscribeToResult");function a(t){return function(e){return e.lift(new s(t))}}r.debounce=a;var s=function(){function e(e){this.durationSelector=e}e.prototype.call=function(e,t){return t.subscribe(new u(e,this.durationSelector))};return e}();var u=function(n){i(e,n);function e(e,t){var r=n.call(this,e)||this;r.durationSelector=t;r.hasValue=false;r.durationSubscription=null;return r}e.prototype._next=function(e){try{var t=this.durationSelector.call(this,e);if(t){this._tryNext(e,t)}}catch(e){this.destination.error(e)}};e.prototype._complete=function(){this.emitValue();this.destination.complete()};e.prototype._tryNext=function(e,t){var r=this.durationSubscription;this.value=e;this.hasValue=true;if(r){r.unsubscribe();this.remove(r)}r=o.subscribeToResult(this,t);if(r&&!r.closed){this.add(this.durationSubscription=r)}};e.prototype.notifyNext=function(e,t,r,n,i){this.emitValue()};e.prototype.notifyComplete=function(){this.emitValue()};e.prototype.emitValue=function(){if(this.hasValue){var e=this.value;var t=this.durationSubscription;if(t){this.durationSubscription=null;t.unsubscribe();this.remove(t)}this.value=null;this.hasValue=false;n.prototype._next.call(this,e)}};return e}(n.OuterSubscriber)},{"../OuterSubscriber":34,"../util/subscribeToResult":222}],89:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var i=e("../Subscriber");var o=e("../scheduler/async");function a(t,r){if(r===void 0){r=o.async}return function(e){return e.lift(new s(t,r))}}r.debounceTime=a;var s=function(){function e(e,t){this.dueTime=e;this.scheduler=t}e.prototype.call=function(e,t){return t.subscribe(new u(e,this.dueTime,this.scheduler))};return e}();var u=function(i){n(e,i);function e(e,t,r){var n=i.call(this,e)||this;n.dueTime=t;n.scheduler=r;n.debouncedSubscription=null;n.lastValue=null;n.hasValue=false;return n}e.prototype._next=function(e){this.clearDebounce();this.lastValue=e;this.hasValue=true;this.add(this.debouncedSubscription=this.scheduler.schedule(c,this.dueTime,this))};e.prototype._complete=function(){this.debouncedNext();this.destination.complete()};e.prototype.debouncedNext=function(){this.clearDebounce();if(this.hasValue){var e=this.lastValue;this.lastValue=null;this.hasValue=false;this.destination.next(e)}};e.prototype.clearDebounce=function(){var e=this.debouncedSubscription;if(e!==null){this.remove(e);e.unsubscribe();this.debouncedSubscription=null}};return e}(i.Subscriber);function c(e){e.debouncedNext()}},{"../Subscriber":39,"../scheduler/async":188}],90:[function(e,t,r){"use strict";var i=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var n=e("../Subscriber");function o(t){if(t===void 0){t=null}return function(e){return e.lift(new a(t))}}r.defaultIfEmpty=o;var a=function(){function e(e){this.defaultValue=e}e.prototype.call=function(e,t){return t.subscribe(new s(e,this.defaultValue))};return e}();var s=function(n){i(e,n);function e(e,t){var r=n.call(this,e)||this;r.defaultValue=t;r.isEmpty=true;return r}e.prototype._next=function(e){this.isEmpty=false;this.destination.next(e)};e.prototype._complete=function(){if(this.isEmpty){this.destination.next(this.defaultValue)}this.destination.complete()};return e}(n.Subscriber)},{"../Subscriber":39}],91:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var i=e("../scheduler/async");var o=e("../util/isDate");var a=e("../Subscriber");var s=e("../Notification");function u(e,t){if(t===void 0){t=i.async}var r=o.isDate(e);var n=r?+e-t.now():Math.abs(e);return function(e){return e.lift(new c(n,t))}}r.delay=u;var c=function(){function e(e,t){this.delay=e;this.scheduler=t}e.prototype.call=function(e,t){return t.subscribe(new h(e,this.delay,this.scheduler))};return e}();var h=function(i){n(r,i);function r(e,t,r){var n=i.call(this,e)||this;n.delay=t;n.scheduler=r;n.queue=[];n.active=false;n.errored=false;return n}r.dispatch=function(e){var t=e.source;var r=t.queue;var n=e.scheduler;var i=e.destination;while(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(e,o)}else{this.unsubscribe();t.active=false}};r.prototype._schedule=function(e){this.active=true;var t=this.destination;t.add(e.schedule(r.dispatch,this.delay,{source:this,destination:this.destination,scheduler:e}))};r.prototype.scheduleNotification=function(e){if(this.errored===true){return}var t=this.scheduler;var r=new l(t.now()+this.delay,e);this.queue.push(r);if(this.active===false){this._schedule(t)}};r.prototype._next=function(e){this.scheduleNotification(s.Notification.createNext(e))};r.prototype._error=function(e){this.errored=true;this.queue=[];this.destination.error(e);this.unsubscribe()};r.prototype._complete=function(){this.scheduleNotification(s.Notification.createComplete());this.unsubscribe()};return r}(a.Subscriber);var l=function(){function e(e,t){this.time=e;this.notification=t}return e}()},{"../Notification":31,"../Subscriber":39,"../scheduler/async":188,"../util/isDate":205}],92:[function(e,t,r){"use strict";var i=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var n=e("../Subscriber");var o=e("../Observable");var a=e("../OuterSubscriber");var s=e("../util/subscribeToResult");function u(t,r){if(r){return function(e){return new l(e,r).lift(new c(t))}}return function(e){return e.lift(new c(t))}}r.delayWhen=u;var c=function(){function e(e){this.delayDurationSelector=e}e.prototype.call=function(e,t){return t.subscribe(new h(e,this.delayDurationSelector))};return e}();var h=function(n){i(e,n);function e(e,t){var r=n.call(this,e)||this;r.delayDurationSelector=t;r.completed=false;r.delayNotifierSubscriptions=[];r.index=0;return r}e.prototype.notifyNext=function(e,t,r,n,i){this.destination.next(e);this.removeSubscription(i);this.tryComplete()};e.prototype.notifyError=function(e,t){this._error(e)};e.prototype.notifyComplete=function(e){var t=this.removeSubscription(e);if(t){this.destination.next(t)}this.tryComplete()};e.prototype._next=function(e){var t=this.index++;try{var r=this.delayDurationSelector(e,t);if(r){this.tryDelay(r,e)}}catch(e){this.destination.error(e)}};e.prototype._complete=function(){this.completed=true;this.tryComplete();this.unsubscribe()};e.prototype.removeSubscription=function(e){e.unsubscribe();var t=this.delayNotifierSubscriptions.indexOf(e);if(t!==-1){this.delayNotifierSubscriptions.splice(t,1)}return e.outerValue};e.prototype.tryDelay=function(e,t){var r=s.subscribeToResult(this,e,t);if(r&&!r.closed){var n=this.destination;n.add(r);this.delayNotifierSubscriptions.push(r)}};e.prototype.tryComplete=function(){if(this.completed&&this.delayNotifierSubscriptions.length===0){this.destination.complete()}};return e}(a.OuterSubscriber);var l=function(n){i(e,n);function e(e,t){var r=n.call(this)||this;r.source=e;r.subscriptionDelay=t;return r}e.prototype._subscribe=function(e){this.subscriptionDelay.subscribe(new p(e,this.source))};return e}(o.Observable);var p=function(n){i(e,n);function e(e,t){var r=n.call(this)||this;r.parent=e;r.source=t;r.sourceSubscribed=false;return r}e.prototype._next=function(e){this.subscribeToSource()};e.prototype._error=function(e){this.unsubscribe();this.parent.error(e)};e.prototype._complete=function(){this.unsubscribe();this.subscribeToSource()};e.prototype.subscribeToSource=function(){if(!this.sourceSubscribed){this.sourceSubscribed=true;this.unsubscribe();this.source.subscribe(this.parent)}};return e}(n.Subscriber)},{"../Observable":32,"../OuterSubscriber":34,"../Subscriber":39,"../util/subscribeToResult":222}],93:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var i=e("../Subscriber");function o(){return function e(t){return t.lift(new a)}}r.dematerialize=o;var a=function(){function e(){}e.prototype.call=function(e,t){return t.subscribe(new s(e))};return e}();var s=function(t){n(e,t);function e(e){return t.call(this,e)||this}e.prototype._next=function(e){e.observe(this.destination)};return e}(i.Subscriber)},{"../Subscriber":39}],94:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var i=e("../OuterSubscriber");var o=e("../util/subscribeToResult");function a(t,r){return function(e){return e.lift(new s(t,r))}}r.distinct=a;var s=function(){function e(e,t){this.keySelector=e;this.flushes=t}e.prototype.call=function(e,t){return t.subscribe(new u(e,this.keySelector,this.flushes))};return e}();var u=function(i){n(e,i);function e(e,t,r){var n=i.call(this,e)||this;n.keySelector=t;n.values=new Set;if(r){n.add(o.subscribeToResult(n,r))}return n}e.prototype.notifyNext=function(e,t,r,n,i){this.values.clear()};e.prototype.notifyError=function(e,t){this._error(e)};e.prototype._next=function(e){if(this.keySelector){this._useKeySelector(e)}else{this._finalizeNext(e,e)}};e.prototype._useKeySelector=function(e){var t;var r=this.destination;try{t=this.keySelector(e)}catch(e){r.error(e);return}this._finalizeNext(t,e)};e.prototype._finalizeNext=function(e,t){var r=this.values;if(!r.has(e)){r.add(e);this.destination.next(t)}};return e}(i.OuterSubscriber);r.DistinctSubscriber=u},{"../OuterSubscriber":34,"../util/subscribeToResult":222}],95:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var i=e("../Subscriber");var o=e("../util/tryCatch");var a=e("../util/errorObject");function s(t,r){return function(e){return e.lift(new u(t,r))}}r.distinctUntilChanged=s;var u=function(){function e(e,t){this.compare=e;this.keySelector=t}e.prototype.call=function(e,t){return t.subscribe(new c(e,this.compare,this.keySelector))};return e}();var c=function(i){n(e,i);function e(e,t,r){var n=i.call(this,e)||this;n.keySelector=r;n.hasKey=false;if(typeof t==="function"){n.compare=t}return n}e.prototype.compare=function(e,t){return e===t};e.prototype._next=function(e){var t=this.keySelector;var r=e;if(t){r=o.tryCatch(this.keySelector)(e);if(r===a.errorObject){return this.destination.error(a.errorObject.e)}}var n=false;if(this.hasKey){n=o.tryCatch(this.compare)(this.key,r);if(n===a.errorObject){return this.destination.error(a.errorObject.e)}}else{this.hasKey=true}if(Boolean(n)===false){this.key=r;this.destination.next(e)}};return e}(i.Subscriber)},{"../Subscriber":39,"../util/errorObject":200,"../util/tryCatch":224}],96:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var i=e("./distinctUntilChanged");function n(r,n){return i.distinctUntilChanged(function(e,t){return n?n(e[r],t[r]):e[r]===t[r]})}r.distinctUntilKeyChanged=n},{"./distinctUntilChanged":95}],97:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var i=e("../util/ArgumentOutOfRangeError");var o=e("./filter");var a=e("./throwIfEmpty");var s=e("./defaultIfEmpty");var u=e("./take");function n(r,t){if(r<0){throw new i.ArgumentOutOfRangeError}var n=arguments.length>=2;return function(e){return e.pipe(o.filter(function(e,t){return t===r}),u.take(1),n?s.defaultIfEmpty(t):a.throwIfEmpty(function(){return new i.ArgumentOutOfRangeError}))}}r.elementAt=n},{"../util/ArgumentOutOfRangeError":193,"./defaultIfEmpty":90,"./filter":103,"./take":155,"./throwIfEmpty":162}],98:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var i=e("../observable/fromArray");var o=e("../observable/scalar");var a=e("../observable/empty");var s=e("../observable/concat");var u=e("../util/isScheduler");function n(){var n=[];for(var e=0;e<arguments.length;e++){n[e]=arguments[e]}return function(e){var t=n[n.length-1];if(u.isScheduler(t)){n.pop()}else{t=null}var r=n.length;if(r===1&&!t){return s.concat(e,o.scalar(n[0]))}else if(r>0){return s.concat(e,i.fromArray(n,t))}else{return s.concat(e,a.empty(t))}}}r.endWith=n},{"../observable/concat":47,"../observable/empty":49,"../observable/fromArray":52,"../observable/scalar":68,"../util/isScheduler":213}],99:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var i=e("../Subscriber");function o(t,r){return function(e){return e.lift(new a(t,r,e))}}r.every=o;var a=function(){function e(e,t,r){this.predicate=e;this.thisArg=t;this.source=r}e.prototype.call=function(e,t){return t.subscribe(new s(e,this.predicate,this.thisArg,this.source))};return e}();var s=function(o){n(e,o);function e(e,t,r,n){var i=o.call(this,e)||this;i.predicate=t;i.thisArg=r;i.source=n;i.index=0;i.thisArg=r||i;return i}e.prototype.notifyComplete=function(e){this.destination.next(e);this.destination.complete()};e.prototype._next=function(e){var t=false;try{t=this.predicate.call(this.thisArg,e,this.index++,this.source)}catch(e){this.destination.error(e);return}if(!t){this.notifyComplete(false)}};e.prototype._complete=function(){this.notifyComplete(true)};return e}(i.Subscriber)},{"../Subscriber":39}],100:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var i=e("../OuterSubscriber");var o=e("../util/subscribeToResult");function a(){return function(e){return e.lift(new s)}}r.exhaust=a;var s=function(){function e(){}e.prototype.call=function(e,t){return t.subscribe(new u(e))};return e}();var u=function(r){n(e,r);function e(e){var t=r.call(this,e)||this;t.hasCompleted=false;t.hasSubscription=false;return t}e.prototype._next=function(e){if(!this.hasSubscription){this.hasSubscription=true;this.add(o.subscribeToResult(this,e))}};e.prototype._complete=function(){this.hasCompleted=true;if(!this.hasSubscription){this.destination.complete()}};e.prototype.notifyComplete=function(e){this.remove(e);this.hasSubscription=false;if(this.hasCompleted){this.destination.complete()}};return e}(i.OuterSubscriber)},{"../OuterSubscriber":34,"../util/subscribeToResult":222}],101:[function(e,t,r){"use strict";var i=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var n=e("../OuterSubscriber");var o=e("../InnerSubscriber");var a=e("../util/subscribeToResult");var s=e("./map");var u=e("../observable/from");function c(t,i){if(i){return function(e){return e.pipe(c(function(r,n){return u.from(t(r,n)).pipe(s.map(function(e,t){return i(r,e,n,t)}))}))}}return function(e){return e.lift(new h(t))}}r.exhaustMap=c;var h=function(){function e(e){this.project=e}e.prototype.call=function(e,t){return t.subscribe(new l(e,this.project))};return e}();var l=function(n){i(e,n);function e(e,t){var r=n.call(this,e)||this;r.project=t;r.hasSubscription=false;r.hasCompleted=false;r.index=0;return r}e.prototype._next=function(e){if(!this.hasSubscription){this.tryNext(e)}};e.prototype.tryNext=function(e){var t;var r=this.index++;try{t=this.project(e,r)}catch(e){this.destination.error(e);return}this.hasSubscription=true;this._innerSub(t,e,r)};e.prototype._innerSub=function(e,t,r){var n=new o.InnerSubscriber(this,undefined,undefined);var i=this.destination;i.add(n);a.subscribeToResult(this,e,t,r,n)};e.prototype._complete=function(){this.hasCompleted=true;if(!this.hasSubscription){this.destination.complete()}this.unsubscribe()};e.prototype.notifyNext=function(e,t,r,n,i){this.destination.next(t)};e.prototype.notifyError=function(e){this.destination.error(e)};e.prototype.notifyComplete=function(e){var t=this.destination;t.remove(e);this.hasSubscription=false;if(this.hasCompleted){this.destination.complete()}};return e}(n.OuterSubscriber)},{"../InnerSubscriber":30,"../OuterSubscriber":34,"../observable/from":51,"../util/subscribeToResult":222,"./map":112}],102:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var s=e("../util/tryCatch");var u=e("../util/errorObject");var i=e("../OuterSubscriber");var c=e("../util/subscribeToResult");function o(t,r,n){if(r===void 0){r=Number.POSITIVE_INFINITY}if(n===void 0){n=undefined}r=(r||0)<1?Number.POSITIVE_INFINITY:r;return function(e){return e.lift(new a(t,r,n))}}r.expand=o;var a=function(){function e(e,t,r){this.project=e;this.concurrent=t;this.scheduler=r}e.prototype.call=function(e,t){return t.subscribe(new h(e,this.project,this.concurrent,this.scheduler))};return e}();r.ExpandOperator=a;var h=function(o){n(a,o);function a(e,t,r,n){var i=o.call(this,e)||this;i.project=t;i.concurrent=r;i.scheduler=n;i.index=0;i.active=0;i.hasCompleted=false;if(r<Number.POSITIVE_INFINITY){i.buffer=[]}return i}a.dispatch=function(e){var t=e.subscriber,r=e.result,n=e.value,i=e.index;t.subscribeToProjection(r,n,i)};a.prototype._next=function(e){var t=this.destination;if(t.closed){this._complete();return}var r=this.index++;if(this.active<this.concurrent){t.next(e);var n=s.tryCatch(this.project)(e,r);if(n===u.errorObject){t.error(u.errorObject.e)}else if(!this.scheduler){this.subscribeToProjection(n,e,r)}else{var i={subscriber:this,result:n,value:e,index:r};var o=this.destination;o.add(this.scheduler.schedule(a.dispatch,0,i))}}else{this.buffer.push(e)}};a.prototype.subscribeToProjection=function(e,t,r){this.active++;var n=this.destination;n.add(c.subscribeToResult(this,e,t,r))};a.prototype._complete=function(){this.hasCompleted=true;if(this.hasCompleted&&this.active===0){this.destination.complete()}this.unsubscribe()};a.prototype.notifyNext=function(e,t,r,n,i){this._next(t)};a.prototype.notifyComplete=function(e){var t=this.buffer;var r=this.destination;r.remove(e);this.active--;if(t&&t.length>0){this._next(t.shift())}if(this.hasCompleted&&this.active===0){this.destination.complete()}};return a}(i.OuterSubscriber);r.ExpandSubscriber=h},{"../OuterSubscriber":34,"../util/errorObject":200,"../util/subscribeToResult":222,"../util/tryCatch":224}],103:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var i=e("../Subscriber");function o(r,n){return function e(t){return t.lift(new a(r,n))}}r.filter=o;var a=function(){function e(e,t){this.predicate=e;this.thisArg=t}e.prototype.call=function(e,t){return t.subscribe(new s(e,this.predicate,this.thisArg))};return e}();var s=function(i){n(e,i);function e(e,t,r){var n=i.call(this,e)||this;n.predicate=t;n.thisArg=r;n.count=0;return n}e.prototype._next=function(e){var t;try{t=this.predicate.call(this.thisArg,e,this.count++)}catch(e){this.destination.error(e);return}if(t){this.destination.next(e)}};return e}(i.Subscriber)},{"../Subscriber":39}],104:[function(e,t,r){"use strict";var i=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var n=e("../Subscriber");var o=e("../Subscription");function a(t){return function(e){return e.lift(new s(t))}}r.finalize=a;var s=function(){function e(e){this.callback=e}e.prototype.call=function(e,t){return t.subscribe(new u(e,this.callback))};return e}();var u=function(n){i(e,n);function e(e,t){var r=n.call(this,e)||this;r.add(new o.Subscription(t));return r}return e}(n.Subscriber)},{"../Subscriber":39,"../Subscription":40}],105:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var i=e("../Subscriber");function o(t,r){if(typeof t!=="function"){throw new TypeError("predicate is not a function")}return function(e){return e.lift(new a(t,e,false,r))}}r.find=o;var a=function(){function e(e,t,r,n){this.predicate=e;this.source=t;this.yieldIndex=r;this.thisArg=n}e.prototype.call=function(e,t){return t.subscribe(new s(e,this.predicate,this.source,this.yieldIndex,this.thisArg))};return e}();r.FindValueOperator=a;var s=function(a){n(e,a);function e(e,t,r,n,i){var o=a.call(this,e)||this;o.predicate=t;o.source=r;o.yieldIndex=n;o.thisArg=i;o.index=0;return o}e.prototype.notifyComplete=function(e){var t=this.destination;t.next(e);t.complete();this.unsubscribe()};e.prototype._next=function(e){var t=this,r=t.predicate,n=t.thisArg;var i=this.index++;try{var o=r.call(n||this,e,i,this.source);if(o){this.notifyComplete(this.yieldIndex?i:e)}}catch(e){this.destination.error(e)}};e.prototype._complete=function(){this.notifyComplete(this.yieldIndex?-1:undefined)};return e}(i.Subscriber);r.FindValueSubscriber=s},{"../Subscriber":39}],106:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("../operators/find");function i(t,r){return function(e){return e.lift(new n.FindValueOperator(t,e,true,r))}}r.findIndex=i},{"../operators/find":105}],107:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var i=e("../util/EmptyError");var o=e("./filter");var a=e("./take");var s=e("./defaultIfEmpty");var u=e("./throwIfEmpty");var c=e("../util/identity");function n(n,e){var t=arguments.length>=2;return function(r){return r.pipe(n?o.filter(function(e,t){return n(e,t,r)}):c.identity,a.take(1),t?s.defaultIfEmpty(e):u.throwIfEmpty(function(){return new i.EmptyError}))}}r.first=n},{"../util/EmptyError":194,"../util/identity":202,"./defaultIfEmpty":90,"./filter":103,"./take":155,"./throwIfEmpty":162}],108:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var i=e("../Subscriber");var o=e("../Subscription");var a=e("../Observable");var s=e("../Subject");function u(t,r,n,i){return function(e){return e.lift(new c(t,r,n,i))}}r.groupBy=u;var c=function(){function e(e,t,r,n){this.keySelector=e;this.elementSelector=t;this.durationSelector=r;this.subjectSelector=n}e.prototype.call=function(e,t){return t.subscribe(new h(e,this.keySelector,this.elementSelector,this.durationSelector,this.subjectSelector))};return e}();var h=function(a){n(e,a);function e(e,t,r,n,i){var o=a.call(this,e)||this;o.keySelector=t;o.elementSelector=r;o.durationSelector=n;o.subjectSelector=i;o.groups=null;o.attemptedToUnsubscribe=false;o.count=0;return o}e.prototype._next=function(e){var t;try{t=this.keySelector(e)}catch(e){this.error(e);return}this._group(e,t)};e.prototype._group=function(e,t){var r=this.groups;if(!r){r=this.groups=new Map}var n=r.get(t);var i;if(this.elementSelector){try{i=this.elementSelector(e)}catch(e){this.error(e)}}else{i=e}if(!n){n=this.subjectSelector?this.subjectSelector():new s.Subject;r.set(t,n);var o=new p(t,n,this);this.destination.next(o);if(this.durationSelector){var a=void 0;try{a=this.durationSelector(new p(t,n))}catch(e){this.error(e);return}this.add(a.subscribe(new l(t,n,this)))}}if(!n.closed){n.next(i)}};e.prototype._error=function(r){var e=this.groups;if(e){e.forEach(function(e,t){e.error(r)});e.clear()}this.destination.error(r)};e.prototype._complete=function(){var e=this.groups;if(e){e.forEach(function(e,t){e.complete()});e.clear()}this.destination.complete()};e.prototype.removeGroup=function(e){this.groups.delete(e)};e.prototype.unsubscribe=function(){if(!this.closed){this.attemptedToUnsubscribe=true;if(this.count===0){a.prototype.unsubscribe.call(this)}}};return e}(i.Subscriber);var l=function(i){n(e,i);function e(e,t,r){var n=i.call(this,t)||this;n.key=e;n.group=t;n.parent=r;return n}e.prototype._next=function(e){this.complete()};e.prototype._unsubscribe=function(){var e=this,t=e.parent,r=e.key;this.key=this.parent=null;if(t){t.removeGroup(r)}};return e}(i.Subscriber);var p=function(i){n(e,i);function e(e,t,r){var n=i.call(this)||this;n.key=e;n.groupSubject=t;n.refCountSubscription=r;return n}e.prototype._subscribe=function(e){var t=new o.Subscription;var r=this,n=r.refCountSubscription,i=r.groupSubject;if(n&&!n.closed){t.add(new f(n))}t.add(i.subscribe(e));return t};return e}(a.Observable);r.GroupedObservable=p;var f=function(r){n(e,r);function e(e){var t=r.call(this)||this;t.parent=e;e.count++;return t}e.prototype.unsubscribe=function(){var e=this.parent;if(!e.closed&&!this.closed){r.prototype.unsubscribe.call(this);e.count-=1;if(e.count===0&&e.attemptedToUnsubscribe){e.unsubscribe()}}};return e}(o.Subscription)},{"../Observable":32,"../Subject":37,"../Subscriber":39,"../Subscription":40}],109:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var i=e("../Subscriber");function o(){return function e(t){return t.lift(new a)}}r.ignoreElements=o;var a=function(){function e(){}e.prototype.call=function(e,t){return t.subscribe(new s(e))};return e}();var s=function(e){n(t,e);function t(){return e!==null&&e.apply(this,arguments)||this}t.prototype._next=function(e){};return t}(i.Subscriber)},{"../Subscriber":39}],110:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var i=e("../Subscriber");function o(){return function(e){return e.lift(new a)}}r.isEmpty=o;var a=function(){function e(){}e.prototype.call=function(e,t){return t.subscribe(new s(e))};return e}();var s=function(t){n(e,t);function e(e){return t.call(this,e)||this}e.prototype.notifyComplete=function(e){var t=this.destination;t.next(e);t.complete()};e.prototype._next=function(e){this.notifyComplete(false)};e.prototype._complete=function(){this.notifyComplete(true)};return e}(i.Subscriber)},{"../Subscriber":39}],111:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var i=e("../util/EmptyError");var o=e("./filter");var a=e("./takeLast");var s=e("./throwIfEmpty");var u=e("./defaultIfEmpty");var c=e("../util/identity");function n(n,e){var t=arguments.length>=2;return function(r){return r.pipe(n?o.filter(function(e,t){return n(e,t,r)}):c.identity,a.takeLast(1),t?u.defaultIfEmpty(e):s.throwIfEmpty(function(){return new i.EmptyError}))}}r.last=n},{"../util/EmptyError":194,"../util/identity":202,"./defaultIfEmpty":90,"./filter":103,"./takeLast":156,"./throwIfEmpty":162}],112:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var i=e("../Subscriber");function o(r,n){return function e(t){if(typeof r!=="function"){throw new TypeError("argument is not a function. Are you looking for `mapTo()`?")}return t.lift(new a(r,n))}}r.map=o;var a=function(){function e(e,t){this.project=e;this.thisArg=t}e.prototype.call=function(e,t){return t.subscribe(new s(e,this.project,this.thisArg))};return e}();r.MapOperator=a;var s=function(i){n(e,i);function e(e,t,r){var n=i.call(this,e)||this;n.project=t;n.count=0;n.thisArg=r||n;return n}e.prototype._next=function(e){var t;try{t=this.project.call(this.thisArg,e,this.count++)}catch(e){this.destination.error(e);return}this.destination.next(t)};return e}(i.Subscriber)},{"../Subscriber":39}],113:[function(e,t,r){"use strict";var i=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var n=e("../Subscriber");function o(t){return function(e){return e.lift(new a(t))}}r.mapTo=o;var a=function(){function e(e){this.value=e}e.prototype.call=function(e,t){return t.subscribe(new s(e,this.value))};return e}();var s=function(n){i(e,n);function e(e,t){var r=n.call(this,e)||this;r.value=t;return r}e.prototype._next=function(e){this.destination.next(this.value)};return e}(n.Subscriber)},{"../Subscriber":39}],114:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var i=e("../Subscriber");var o=e("../Notification");function a(){return function e(t){return t.lift(new s)}}r.materialize=a;var s=function(){function e(){}e.prototype.call=function(e,t){return t.subscribe(new u(e))};return e}();var u=function(t){n(e,t);function e(e){return t.call(this,e)||this}e.prototype._next=function(e){this.destination.next(o.Notification.createNext(e))};e.prototype._error=function(e){var t=this.destination;t.next(o.Notification.createError(e));t.complete()};e.prototype._complete=function(){var e=this.destination;e.next(o.Notification.createComplete());e.complete()};return e}(i.Subscriber)},{"../Notification":31,"../Subscriber":39}],115:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("./reduce");function i(r){var e=typeof r==="function"?function(e,t){return r(e,t)>0?e:t}:function(e,t){return e>t?e:t};return n.reduce(e)}r.max=i},{"./reduce":133}],116:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("../observable/merge");function i(){var t=[];for(var e=0;e<arguments.length;e++){t[e]=arguments[e]}return function(e){return e.lift.call(n.merge.apply(void 0,[e].concat(t)))}}r.merge=i},{"../observable/merge":61}],117:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("./mergeMap");var i=e("../util/identity");function o(e){if(e===void 0){e=Number.POSITIVE_INFINITY}return n.mergeMap(i.identity,e)}r.mergeAll=o},{"../util/identity":202,"./mergeMap":118}],118:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var o=e("../util/subscribeToResult");var i=e("../OuterSubscriber");var a=e("../InnerSubscriber");var s=e("./map");var u=e("../observable/from");function c(t,i,r){if(r===void 0){r=Number.POSITIVE_INFINITY}if(typeof i==="function"){return function(e){return e.pipe(c(function(r,n){return u.from(t(r,n)).pipe(s.map(function(e,t){return i(r,e,n,t)}))},r))}}else if(typeof i==="number"){r=i}return function(e){return e.lift(new h(t,r))}}r.mergeMap=c;var h=function(){function e(e,t){if(t===void 0){t=Number.POSITIVE_INFINITY}this.project=e;this.concurrent=t}e.prototype.call=function(e,t){return t.subscribe(new l(e,this.project,this.concurrent))};return e}();r.MergeMapOperator=h;var l=function(i){n(e,i);function e(e,t,r){if(r===void 0){r=Number.POSITIVE_INFINITY}var n=i.call(this,e)||this;n.project=t;n.concurrent=r;n.hasCompleted=false;n.buffer=[];n.active=0;n.index=0;return n}e.prototype._next=function(e){if(this.active<this.concurrent){this._tryNext(e)}else{this.buffer.push(e)}};e.prototype._tryNext=function(e){var t;var r=this.index++;try{t=this.project(e,r)}catch(e){this.destination.error(e);return}this.active++;this._innerSub(t,e,r)};e.prototype._innerSub=function(e,t,r){var n=new a.InnerSubscriber(this,undefined,undefined);var i=this.destination;i.add(n);o.subscribeToResult(this,e,t,r,n)};e.prototype._complete=function(){this.hasCompleted=true;if(this.active===0&&this.buffer.length===0){this.destination.complete()}this.unsubscribe()};e.prototype.notifyNext=function(e,t,r,n,i){this.destination.next(t)};e.prototype.notifyComplete=function(e){var t=this.buffer;this.remove(e);this.active--;if(t.length>0){this._next(t.shift())}else if(this.active===0&&this.hasCompleted){this.destination.complete()}};return e}(i.OuterSubscriber);r.MergeMapSubscriber=l},{"../InnerSubscriber":30,"../OuterSubscriber":34,"../observable/from":51,"../util/subscribeToResult":222,"./map":112}],119:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("./mergeMap");function i(e,t,r){if(r===void 0){r=Number.POSITIVE_INFINITY}if(typeof t==="function"){return n.mergeMap(function(){return e},t,r)}if(typeof t==="number"){r=t}return n.mergeMap(function(){return e},r)}r.mergeMapTo=i},{"./mergeMap":118}],120:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var i=e("../util/tryCatch");var a=e("../util/errorObject");var s=e("../util/subscribeToResult");var o=e("../OuterSubscriber");var u=e("../InnerSubscriber");function c(t,r,n){if(n===void 0){n=Number.POSITIVE_INFINITY}return function(e){return e.lift(new h(t,r,n))}}r.mergeScan=c;var h=function(){function e(e,t,r){this.accumulator=e;this.seed=t;this.concurrent=r}e.prototype.call=function(e,t){return t.subscribe(new l(e,this.accumulator,this.seed,this.concurrent))};return e}();r.MergeScanOperator=h;var l=function(o){n(e,o);function e(e,t,r,n){var i=o.call(this,e)||this;i.accumulator=t;i.acc=r;i.concurrent=n;i.hasValue=false;i.hasCompleted=false;i.buffer=[];i.active=0;i.index=0;return i}e.prototype._next=function(e){if(this.active<this.concurrent){var t=this.index++;var r=i.tryCatch(this.accumulator)(this.acc,e);var n=this.destination;if(r===a.errorObject){n.error(a.errorObject.e)}else{this.active++;this._innerSub(r,e,t)}}else{this.buffer.push(e)}};e.prototype._innerSub=function(e,t,r){var n=new u.InnerSubscriber(this,undefined,undefined);var i=this.destination;i.add(n);s.subscribeToResult(this,e,t,r,n)};e.prototype._complete=function(){this.hasCompleted=true;if(this.active===0&&this.buffer.length===0){if(this.hasValue===false){this.destination.next(this.acc)}this.destination.complete()}this.unsubscribe()};e.prototype.notifyNext=function(e,t,r,n,i){var o=this.destination;this.acc=t;this.hasValue=true;o.next(t)};e.prototype.notifyComplete=function(e){var t=this.buffer;var r=this.destination;r.remove(e);this.active--;if(t.length>0){this._next(t.shift())}else if(this.active===0&&this.hasCompleted){if(this.hasValue===false){this.destination.next(this.acc)}this.destination.complete()}};return e}(o.OuterSubscriber);r.MergeScanSubscriber=l},{"../InnerSubscriber":30,"../OuterSubscriber":34,"../util/errorObject":200,"../util/subscribeToResult":222,"../util/tryCatch":224}],121:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("./reduce");function i(r){var e=typeof r==="function"?function(e,t){return r(e,t)<0?e:t}:function(e,t){return e<t?e:t};return n.reduce(e)}r.min=i},{"./reduce":133}],122:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var a=e("../observable/ConnectableObservable");function n(i,o){return function e(t){var r;if(typeof i==="function"){r=i}else{r=function e(){return i}}if(typeof o==="function"){return t.lift(new s(r,o))}var n=Object.create(t,a.connectableObservableDescriptor);n.source=t;n.subjectFactory=r;return n}}r.multicast=n;var s=function(){function e(e,t){this.subjectFactory=e;this.selector=t}e.prototype.call=function(e,t){var r=this.selector;var n=this.subjectFactory();var i=r(n).subscribe(e);i.add(t.subscribe(n));return i};return e}();r.MulticastOperator=s},{"../observable/ConnectableObservable":42}],123:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var i=e("../Subscriber");var o=e("../Notification");function a(r,n){if(n===void 0){n=0}return function e(t){return t.lift(new s(r,n))}}r.observeOn=a;var s=function(){function e(e,t){if(t===void 0){t=0}this.scheduler=e;this.delay=t}e.prototype.call=function(e,t){return t.subscribe(new u(e,this.scheduler,this.delay))};return e}();r.ObserveOnOperator=s;var u=function(i){n(r,i);function r(e,t,r){if(r===void 0){r=0}var n=i.call(this,e)||this;n.scheduler=t;n.delay=r;return n}r.dispatch=function(e){var t=e.notification,r=e.destination;t.observe(r);this.unsubscribe()};r.prototype.scheduleMessage=function(e){var t=this.destination;t.add(this.scheduler.schedule(r.dispatch,this.delay,new c(e,this.destination)))};r.prototype._next=function(e){this.scheduleMessage(o.Notification.createNext(e))};r.prototype._error=function(e){this.scheduleMessage(o.Notification.createError(e));this.unsubscribe()};r.prototype._complete=function(){this.scheduleMessage(o.Notification.createComplete());this.unsubscribe()};return r}(i.Subscriber);r.ObserveOnSubscriber=u;var c=function(){function e(e,t){this.notification=e;this.destination=t}return e}();r.ObserveOnMessage=c},{"../Notification":31,"../Subscriber":39}],124:[function(e,t,r){"use strict";var i=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var n=e("../observable/from");var o=e("../util/isArray");var a=e("../OuterSubscriber");var s=e("../InnerSubscriber");var u=e("../util/subscribeToResult");function c(){var t=[];for(var e=0;e<arguments.length;e++){t[e]=arguments[e]}if(t.length===1&&o.isArray(t[0])){t=t[0]}return function(e){return e.lift(new l(t))}}r.onErrorResumeNext=c;function h(){var e=[];for(var t=0;t<arguments.length;t++){e[t]=arguments[t]}var r=null;if(e.length===1&&o.isArray(e[0])){e=e[0]}r=e.shift();return n.from(r,null).lift(new l(e))}r.onErrorResumeNextStatic=h;var l=function(){function e(e){this.nextSources=e}e.prototype.call=function(e,t){return t.subscribe(new p(e,this.nextSources))};return e}();var p=function(n){i(e,n);function e(e,t){var r=n.call(this,e)||this;r.destination=e;r.nextSources=t;return r}e.prototype.notifyError=function(e,t){this.subscribeToNextSource()};e.prototype.notifyComplete=function(e){this.subscribeToNextSource()};e.prototype._error=function(e){this.subscribeToNextSource();this.unsubscribe()};e.prototype._complete=function(){this.subscribeToNextSource();this.unsubscribe()};e.prototype.subscribeToNextSource=function(){var e=this.nextSources.shift();if(e){var t=new s.InnerSubscriber(this,undefined,undefined);var r=this.destination;r.add(t);u.subscribeToResult(this,e,undefined,undefined,t)}else{this.destination.complete()}};return e}(a.OuterSubscriber)},{"../InnerSubscriber":30,"../OuterSubscriber":34,"../observable/from":51,"../util/isArray":203,"../util/subscribeToResult":222}],125:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var i=e("../Subscriber");function o(){return function(e){return e.lift(new a)}}r.pairwise=o;var a=function(){function e(){}e.prototype.call=function(e,t){return t.subscribe(new s(e))};return e}();var s=function(r){n(e,r);function e(e){var t=r.call(this,e)||this;t.hasPrev=false;return t}e.prototype._next=function(e){if(this.hasPrev){this.destination.next([this.prev,e])}else{this.hasPrev=true}this.prev=e};return e}(i.Subscriber)},{"../Subscriber":39}],126:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("../util/not");var i=e("./filter");function o(t,r){return function(e){return[i.filter(t,r)(e),i.filter(n.not(t,r))(e)]}}r.partition=o},{"../util/not":215,"./filter":103}],127:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("./map");function i(){var t=[];for(var e=0;e<arguments.length;e++){t[e]=arguments[e]}var r=t.length;if(r===0){throw new Error("list of properties cannot be empty.")}return function(e){return n.map(o(t,r))(e)}}r.pluck=i;function o(i,o){var e=function(e){var t=e;for(var r=0;r<o;r++){var n=t[i[r]];if(typeof n!=="undefined"){t=n}else{return undefined}}return t};return e}},{"./map":112}],128:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("../Subject");var i=e("./multicast");function o(e){return e?i.multicast(function(){return new n.Subject},e):i.multicast(new n.Subject)}r.publish=o},{"../Subject":37,"./multicast":122}],129:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("../BehaviorSubject");var i=e("./multicast");function o(t){return function(e){return i.multicast(new n.BehaviorSubject(t))(e)}}r.publishBehavior=o},{"../BehaviorSubject":29,"./multicast":122}],130:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("../AsyncSubject");var i=e("./multicast");function o(){return function(e){return i.multicast(new n.AsyncSubject)(e)}}r.publishLast=o},{"../AsyncSubject":28,"./multicast":122}],131:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var a=e("../ReplaySubject");var s=e("./multicast");function n(e,t,r,n){if(r&&typeof r!=="function"){n=r}var i=typeof r==="function"?r:undefined;var o=new a.ReplaySubject(e,t,n);return function(e){return s.multicast(function(){return o},i)(e)}}r.publishReplay=n},{"../ReplaySubject":35,"./multicast":122}],132:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("../util/isArray");var i=e("../observable/race");function o(){var r=[];for(var e=0;e<arguments.length;e++){r[e]=arguments[e]}return function e(t){if(r.length===1&&n.isArray(r[0])){r=r[0]}return t.lift.call(i.race.apply(void 0,[t].concat(r)))}}r.race=o},{"../observable/race":66,"../util/isArray":203}],133:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var i=e("./scan");var o=e("./takeLast");var a=e("./defaultIfEmpty");var s=e("../util/pipe");function n(n,r){if(arguments.length>=2){return function e(t){return s.pipe(i.scan(n,r),o.takeLast(1),a.defaultIfEmpty(r))(t)}}return function e(t){return s.pipe(i.scan(function(e,t,r){return n(e,t,r+1)}),o.takeLast(1))(t)}}r.reduce=n},{"../util/pipe":216,"./defaultIfEmpty":90,"./scan":141,"./takeLast":156}],134:[function(e,t,r){"use strict";var i=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var n=e("../Subscriber");function o(){return function e(t){return t.lift(new a(t))}}r.refCount=o;var a=function(){function e(e){this.connectable=e}e.prototype.call=function(e,t){var r=this.connectable;r._refCount++;var n=new s(e,r);var i=t.subscribe(n);if(!n.closed){n.connection=r.connect()}return i};return e}();var s=function(n){i(e,n);function e(e,t){var r=n.call(this,e)||this;r.connectable=t;return r}e.prototype._unsubscribe=function(){var e=this.connectable;if(!e){this.connection=null;return}this.connectable=null;var t=e._refCount;if(t<=0){this.connection=null;return}e._refCount=t-1;if(t>1){this.connection=null;return}var r=this.connection;var n=e._connection;this.connection=null;if(n&&(!r||n===r)){n.unsubscribe()}};return e}(n.Subscriber)},{"../Subscriber":39}],135:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var i=e("../Subscriber");var o=e("../observable/empty");function a(t){if(t===void 0){t=-1}return function(e){if(t===0){return o.empty()}else if(t<0){return e.lift(new s(-1,e))}else{return e.lift(new s(t-1,e))}}}r.repeat=a;var s=function(){function e(e,t){this.count=e;this.source=t}e.prototype.call=function(e,t){return t.subscribe(new u(e,this.count,this.source))};return e}();var u=function(i){n(e,i);function e(e,t,r){var n=i.call(this,e)||this;n.count=t;n.source=r;return n}e.prototype.complete=function(){if(!this.isStopped){var e=this,t=e.source,r=e.count;if(r===0){return i.prototype.complete.call(this)}else if(r>-1){this.count=r-1}t.subscribe(this._unsubscribeAndRecycle())}};return e}(i.Subscriber)},{"../Subscriber":39,"../observable/empty":49}],136:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var o=e("../Subject");var a=e("../util/tryCatch");var s=e("../util/errorObject");var i=e("../OuterSubscriber");var u=e("../util/subscribeToResult");function c(t){return function(e){return e.lift(new h(t))}}r.repeatWhen=c;var h=function(){function e(e){this.notifier=e}e.prototype.call=function(e,t){return t.subscribe(new l(e,this.notifier,t))};return e}();var l=function(i){n(e,i);function e(e,t,r){var n=i.call(this,e)||this;n.notifier=t;n.source=r;n.sourceIsBeingSubscribedTo=true;return n}e.prototype.notifyNext=function(e,t,r,n,i){this.sourceIsBeingSubscribedTo=true;this.source.subscribe(this)};e.prototype.notifyComplete=function(e){if(this.sourceIsBeingSubscribedTo===false){return i.prototype.complete.call(this)}};e.prototype.complete=function(){this.sourceIsBeingSubscribedTo=false;if(!this.isStopped){if(!this.retries){this.subscribeToRetries()}if(!this.retriesSubscription||this.retriesSubscription.closed){return i.prototype.complete.call(this)}this._unsubscribeAndRecycle();this.notifications.next()}};e.prototype._unsubscribe=function(){var e=this,t=e.notifications,r=e.retriesSubscription;if(t){t.unsubscribe();this.notifications=null}if(r){r.unsubscribe();this.retriesSubscription=null}this.retries=null};e.prototype._unsubscribeAndRecycle=function(){var e=this._unsubscribe;this._unsubscribe=null;i.prototype._unsubscribeAndRecycle.call(this);this._unsubscribe=e;return this};e.prototype.subscribeToRetries=function(){this.notifications=new o.Subject;var e=a.tryCatch(this.notifier)(this.notifications);if(e===s.errorObject){return i.prototype.complete.call(this)}this.retries=e;this.retriesSubscription=u.subscribeToResult(this,e)};return e}(i.OuterSubscriber)},{"../OuterSubscriber":34,"../Subject":37,"../util/errorObject":200,"../util/subscribeToResult":222,"../util/tryCatch":224}],137:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var i=e("../Subscriber");function o(t){if(t===void 0){t=-1}return function(e){return e.lift(new a(t,e))}}r.retry=o;var a=function(){function e(e,t){this.count=e;this.source=t}e.prototype.call=function(e,t){return t.subscribe(new s(e,this.count,this.source))};return e}();var s=function(i){n(e,i);function e(e,t,r){var n=i.call(this,e)||this;n.count=t;n.source=r;return n}e.prototype.error=function(e){if(!this.isStopped){var t=this,r=t.source,n=t.count;if(n===0){return i.prototype.error.call(this,e)}else if(n>-1){this.count=n-1}r.subscribe(this._unsubscribeAndRecycle())}};return e}(i.Subscriber)},{"../Subscriber":39}],138:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var o=e("../Subject");var a=e("../util/tryCatch");var s=e("../util/errorObject");var i=e("../OuterSubscriber");var u=e("../util/subscribeToResult");function c(t){return function(e){return e.lift(new h(t,e))}}r.retryWhen=c;var h=function(){function e(e,t){this.notifier=e;this.source=t}e.prototype.call=function(e,t){return t.subscribe(new l(e,this.notifier,this.source))};return e}();var l=function(i){n(e,i);function e(e,t,r){var n=i.call(this,e)||this;n.notifier=t;n.source=r;return n}e.prototype.error=function(e){if(!this.isStopped){var t=this.errors;var r=this.retries;var n=this.retriesSubscription;if(!r){t=new o.Subject;r=a.tryCatch(this.notifier)(t);if(r===s.errorObject){return i.prototype.error.call(this,s.errorObject.e)}n=u.subscribeToResult(this,r)}else{this.errors=null;this.retriesSubscription=null}this._unsubscribeAndRecycle();this.errors=t;this.retries=r;this.retriesSubscription=n;t.next(e)}};e.prototype._unsubscribe=function(){var e=this,t=e.errors,r=e.retriesSubscription;if(t){t.unsubscribe();this.errors=null}if(r){r.unsubscribe();this.retriesSubscription=null}this.retries=null};e.prototype.notifyNext=function(e,t,r,n,i){var o=this._unsubscribe;this._unsubscribe=null;this._unsubscribeAndRecycle();this._unsubscribe=o;this.source.subscribe(this)};return e}(i.OuterSubscriber)},{"../OuterSubscriber":34,"../Subject":37,"../util/errorObject":200,"../util/subscribeToResult":222,"../util/tryCatch":224}],139:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var i=e("../OuterSubscriber");var o=e("../util/subscribeToResult");function a(t){return function(e){return e.lift(new s(t))}}r.sample=a;var s=function(){function e(e){this.notifier=e}e.prototype.call=function(e,t){var r=new u(e);var n=t.subscribe(r);n.add(o.subscribeToResult(r,this.notifier));return n};return e}();var u=function(t){n(e,t);function e(){var e=t!==null&&t.apply(this,arguments)||this;e.hasValue=false;return e}e.prototype._next=function(e){this.value=e;this.hasValue=true};e.prototype.notifyNext=function(e,t,r,n,i){this.emitValue()};e.prototype.notifyComplete=function(){this.emitValue()};e.prototype.emitValue=function(){if(this.hasValue){this.hasValue=false;this.destination.next(this.value)}};return e}(i.OuterSubscriber)},{"../OuterSubscriber":34,"../util/subscribeToResult":222}],140:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var i=e("../Subscriber");var o=e("../scheduler/async");function a(t,r){if(r===void 0){r=o.async}return function(e){return e.lift(new s(t,r))}}r.sampleTime=a;var s=function(){function e(e,t){this.period=e;this.scheduler=t}e.prototype.call=function(e,t){return t.subscribe(new u(e,this.period,this.scheduler))};return e}();var u=function(i){n(e,i);function e(e,t,r){var n=i.call(this,e)||this;n.period=t;n.scheduler=r;n.hasValue=false;n.add(r.schedule(c,t,{subscriber:n,period:t}));return n}e.prototype._next=function(e){this.lastValue=e;this.hasValue=true};e.prototype.notifyNext=function(){if(this.hasValue){this.hasValue=false;this.destination.next(this.lastValue)}};return e}(i.Subscriber);function c(e){var t=e.subscriber,r=e.period;t.notifyNext();this.schedule(e,r)}},{"../Subscriber":39,"../scheduler/async":188}],141:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var i=e("../Subscriber");function o(r,n){var i=false;if(arguments.length>=2){i=true}return function e(t){return t.lift(new a(r,n,i))}}r.scan=o;var a=function(){function e(e,t,r){if(r===void 0){r=false}this.accumulator=e;this.seed=t;this.hasSeed=r}e.prototype.call=function(e,t){return t.subscribe(new s(e,this.accumulator,this.seed,this.hasSeed))};return e}();var s=function(o){n(e,o);function e(e,t,r,n){var i=o.call(this,e)||this;i.accumulator=t;i._seed=r;i.hasSeed=n;i.index=0;return i}Object.defineProperty(e.prototype,"seed",{get:function(){return this._seed},set:function(e){this.hasSeed=true;this._seed=e},enumerable:true,configurable:true});e.prototype._next=function(e){if(!this.hasSeed){this.seed=e;this.destination.next(e)}else{return this._tryNext(e)}};e.prototype._tryNext=function(e){var t=this.index++;var r;try{r=this.accumulator(this.seed,e,t)}catch(e){this.destination.error(e)}this.seed=r;this.destination.next(r)};return e}(i.Subscriber)},{"../Subscriber":39}],142:[function(e,t,r){"use strict";var o=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var n=e("../Subscriber");var s=e("../util/tryCatch");var u=e("../util/errorObject");function i(t,r){return function(e){return e.lift(new a(t,r))}}r.sequenceEqual=i;var a=function(){function e(e,t){this.compareTo=e;this.comparor=t}e.prototype.call=function(e,t){return t.subscribe(new c(e,this.compareTo,this.comparor))};return e}();r.SequenceEqualOperator=a;var c=function(i){o(e,i);function e(e,t,r){var n=i.call(this,e)||this;n.compareTo=t;n.comparor=r;n._a=[];n._b=[];n._oneComplete=false;n.destination.add(t.subscribe(new h(e,n)));return n}e.prototype._next=function(e){if(this._oneComplete&&this._b.length===0){this.emit(false)}else{this._a.push(e);this.checkValues()}};e.prototype._complete=function(){if(this._oneComplete){this.emit(this._a.length===0&&this._b.length===0)}else{this._oneComplete=true}this.unsubscribe()};e.prototype.checkValues=function(){var e=this,t=e._a,r=e._b,n=e.comparor;while(t.length>0&&r.length>0){var i=t.shift();var o=r.shift();var a=false;if(n){a=s.tryCatch(n)(i,o);if(a===u.errorObject){this.destination.error(u.errorObject.e)}}else{a=i===o}if(!a){this.emit(false)}}};e.prototype.emit=function(e){var t=this.destination;t.next(e);t.complete()};e.prototype.nextB=function(e){if(this._oneComplete&&this._a.length===0){this.emit(false)}else{this._b.push(e);this.checkValues()}};e.prototype.completeB=function(){if(this._oneComplete){this.emit(this._a.length===0&&this._b.length===0)}else{this._oneComplete=true}};return e}(n.Subscriber);r.SequenceEqualSubscriber=c;var h=function(n){o(e,n);function e(e,t){var r=n.call(this,e)||this;r.parent=t;return r}e.prototype._next=function(e){this.parent.nextB(e)};e.prototype._error=function(e){this.parent.error(e);this.unsubscribe()};e.prototype._complete=function(){this.parent.completeB();this.unsubscribe()};return e}(n.Subscriber)},{"../Subscriber":39,"../util/errorObject":200,"../util/tryCatch":224}],143:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("./multicast");var i=e("./refCount");var o=e("../Subject");function a(){return new o.Subject}function s(){return function(e){return i.refCount()(n.multicast(a)(e))}}r.share=s},{"../Subject":37,"./multicast":122,"./refCount":134}],144:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var l=e("../ReplaySubject");function n(t,r,n){if(t===void 0){t=Number.POSITIVE_INFINITY}if(r===void 0){r=Number.POSITIVE_INFINITY}return function(e){return e.lift(i(t,r,n))}}r.shareReplay=n;function i(n,i,o){var a;var s=0;var u;var c=false;var h=false;return function e(t){s++;if(!a||c){c=false;a=new l.ReplaySubject(n,i,o);u=t.subscribe({next:function(e){a.next(e)},error:function(e){c=true;a.error(e)},complete:function(){h=true;a.complete()}})}var r=a.subscribe(this);return function(){s--;r.unsubscribe();if(u&&s===0&&h){u.unsubscribe()}}}}},{"../ReplaySubject":35}],145:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var i=e("../Subscriber");var o=e("../util/EmptyError");function a(t){return function(e){return e.lift(new s(t,e))}}r.single=a;var s=function(){function e(e,t){this.predicate=e;this.source=t}e.prototype.call=function(e,t){return t.subscribe(new u(e,this.predicate,this.source))};return e}();var u=function(i){n(e,i);function e(e,t,r){var n=i.call(this,e)||this;n.predicate=t;n.source=r;n.seenValue=false;n.index=0;return n}e.prototype.applySingleValue=function(e){if(this.seenValue){this.destination.error("Sequence contains more than one element")}else{this.seenValue=true;this.singleValue=e}};e.prototype._next=function(e){var t=this.index++;if(this.predicate){this.tryNext(e,t)}else{this.applySingleValue(e)}};e.prototype.tryNext=function(e,t){try{if(this.predicate(e,t,this.source)){this.applySingleValue(e)}}catch(e){this.destination.error(e)}};e.prototype._complete=function(){var e=this.destination;if(this.index>0){e.next(this.seenValue?this.singleValue:undefined);e.complete()}else{e.error(new o.EmptyError)}};return e}(i.Subscriber)},{"../Subscriber":39,"../util/EmptyError":194}],146:[function(e,t,r){"use strict";var i=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var n=e("../Subscriber");function o(t){return function(e){return e.lift(new a(t))}}r.skip=o;var a=function(){function e(e){this.total=e}e.prototype.call=function(e,t){return t.subscribe(new s(e,this.total))};return e}();var s=function(n){i(e,n);function e(e,t){var r=n.call(this,e)||this;r.total=t;r.count=0;return r}e.prototype._next=function(e){if(++this.count>this.total){this.destination.next(e)}};return e}(n.Subscriber)},{"../Subscriber":39}],147:[function(e,t,r){"use strict";var i=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var n=e("../Subscriber");var o=e("../util/ArgumentOutOfRangeError");function a(t){return function(e){return e.lift(new s(t))}}r.skipLast=a;var s=function(){function e(e){this._skipCount=e;if(this._skipCount<0){throw new o.ArgumentOutOfRangeError}}e.prototype.call=function(e,t){if(this._skipCount===0){return t.subscribe(new n.Subscriber(e))}else{return t.subscribe(new u(e,this._skipCount))}};return e}();var u=function(n){i(e,n);function e(e,t){var r=n.call(this,e)||this;r._skipCount=t;r._count=0;r._ring=new Array(t);return r}e.prototype._next=function(e){var t=this._skipCount;var r=this._count++;if(r<t){this._ring[r]=e}else{var n=r%t;var i=this._ring;var o=i[n];i[n]=e;this.destination.next(o)}};return e}(n.Subscriber)},{"../Subscriber":39,"../util/ArgumentOutOfRangeError":193}],148:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var i=e("../OuterSubscriber");var o=e("../InnerSubscriber");var a=e("../util/subscribeToResult");function s(t){return function(e){return e.lift(new u(t))}}r.skipUntil=s;var u=function(){function e(e){this.notifier=e}e.prototype.call=function(e,t){return t.subscribe(new c(e,this.notifier))};return e}();var c=function(i){n(e,i);function e(e,t){var r=i.call(this,e)||this;r.hasValue=false;var n=new o.InnerSubscriber(r,undefined,undefined);r.add(n);r.innerSubscription=n;a.subscribeToResult(r,t,undefined,undefined,n);return r}e.prototype._next=function(e){if(this.hasValue){i.prototype._next.call(this,e)}};e.prototype.notifyNext=function(e,t,r,n,i){this.hasValue=true;if(this.innerSubscription){this.innerSubscription.unsubscribe()}};e.prototype.notifyComplete=function(){};return e}(i.OuterSubscriber)},{"../InnerSubscriber":30,"../OuterSubscriber":34,"../util/subscribeToResult":222}],149:[function(e,t,r){"use strict";var i=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var n=e("../Subscriber");function o(t){return function(e){return e.lift(new a(t))}}r.skipWhile=o;var a=function(){function e(e){this.predicate=e}e.prototype.call=function(e,t){return t.subscribe(new s(e,this.predicate))};return e}();var s=function(n){i(e,n);function e(e,t){var r=n.call(this,e)||this;r.predicate=t;r.skipping=true;r.index=0;return r}e.prototype._next=function(e){var t=this.destination;if(this.skipping){this.tryCallPredicate(e)}if(!this.skipping){t.next(e)}};e.prototype.tryCallPredicate=function(e){try{var t=this.predicate(e,this.index++);this.skipping=Boolean(t)}catch(e){this.destination.error(e)}};return e}(n.Subscriber)},{"../Subscriber":39}],150:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var i=e("../observable/fromArray");var o=e("../observable/scalar");var a=e("../observable/empty");var s=e("../observable/concat");var u=e("../util/isScheduler");function n(){var n=[];for(var e=0;e<arguments.length;e++){n[e]=arguments[e]}return function(e){var t=n[n.length-1];if(u.isScheduler(t)){n.pop()}else{t=null}var r=n.length;if(r===1&&!t){return s.concat(o.scalar(n[0]),e)}else if(r>0){return s.concat(i.fromArray(n,t),e)}else{return s.concat(a.empty(t),e)}}}r.startWith=n},{"../observable/concat":47,"../observable/empty":49,"../observable/fromArray":52,"../observable/scalar":68,"../util/isScheduler":213}],151:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("../observable/SubscribeOnObservable");function i(r,n){if(n===void 0){n=0}return function e(t){return t.lift(new o(r,n))}}r.subscribeOn=i;var o=function(){function e(e,t){this.scheduler=e;this.delay=t}e.prototype.call=function(e,t){return new n.SubscribeOnObservable(t,this.delay,this.scheduler).subscribe(e)};return e}()},{"../observable/SubscribeOnObservable":43}],152:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("./switchMap");var i=e("../util/identity");function o(){return n.switchMap(i.identity)}r.switchAll=o},{"../util/identity":202,"./switchMap":153}],153:[function(e,t,r){"use strict";var i=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var n=e("../OuterSubscriber");var a=e("../InnerSubscriber");var s=e("../util/subscribeToResult");var o=e("./map");var u=e("../observable/from");function c(t,i){if(typeof i==="function"){return function(e){return e.pipe(c(function(r,n){return u.from(t(r,n)).pipe(o.map(function(e,t){return i(r,e,n,t)}))}))}}return function(e){return e.lift(new h(t))}}r.switchMap=c;var h=function(){function e(e){this.project=e}e.prototype.call=function(e,t){return t.subscribe(new l(e,this.project))};return e}();var l=function(n){i(e,n);function e(e,t){var r=n.call(this,e)||this;r.project=t;r.index=0;return r}e.prototype._next=function(e){var t;var r=this.index++;try{t=this.project(e,r)}catch(e){this.destination.error(e);return}this._innerSub(t,e,r)};e.prototype._innerSub=function(e,t,r){var n=this.innerSubscription;if(n){n.unsubscribe()}var i=new a.InnerSubscriber(this,undefined,undefined);var o=this.destination;o.add(i);this.innerSubscription=s.subscribeToResult(this,e,t,r,i)};e.prototype._complete=function(){var e=this.innerSubscription;if(!e||e.closed){n.prototype._complete.call(this)}this.unsubscribe()};e.prototype._unsubscribe=function(){this.innerSubscription=null};e.prototype.notifyComplete=function(e){var t=this.destination;t.remove(e);this.innerSubscription=null;if(this.isStopped){n.prototype._complete.call(this)}};e.prototype.notifyNext=function(e,t,r,n,i){this.destination.next(t)};return e}(n.OuterSubscriber)},{"../InnerSubscriber":30,"../OuterSubscriber":34,"../observable/from":51,"../util/subscribeToResult":222,"./map":112}],154:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("./switchMap");function i(e,t){return t?n.switchMap(function(){return e},t):n.switchMap(function(){return e})}r.switchMapTo=i},{"./switchMap":153}],155:[function(e,t,r){"use strict";var i=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var n=e("../Subscriber");var o=e("../util/ArgumentOutOfRangeError");var a=e("../observable/empty");function s(t){return function(e){if(t===0){return a.empty()}else{return e.lift(new u(t))}}}r.take=s;var u=function(){function e(e){this.total=e;if(this.total<0){throw new o.ArgumentOutOfRangeError}}e.prototype.call=function(e,t){return t.subscribe(new c(e,this.total))};return e}();var c=function(n){i(e,n);function e(e,t){var r=n.call(this,e)||this;r.total=t;r.count=0;return r}e.prototype._next=function(e){var t=this.total;var r=++this.count;if(r<=t){this.destination.next(e);if(r===t){this.destination.complete();this.unsubscribe()}}};return e}(n.Subscriber)},{"../Subscriber":39,"../observable/empty":49,"../util/ArgumentOutOfRangeError":193}],156:[function(e,t,r){"use strict";var i=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var n=e("../Subscriber");var o=e("../util/ArgumentOutOfRangeError");var a=e("../observable/empty");function s(r){return function e(t){if(r===0){return a.empty()}else{return t.lift(new u(r))}}}r.takeLast=s;var u=function(){function e(e){this.total=e;if(this.total<0){throw new o.ArgumentOutOfRangeError}}e.prototype.call=function(e,t){return t.subscribe(new c(e,this.total))};return e}();var c=function(n){i(e,n);function e(e,t){var r=n.call(this,e)||this;r.total=t;r.ring=new Array;r.count=0;return r}e.prototype._next=function(e){var t=this.ring;var r=this.total;var n=this.count++;if(t.length<r){t.push(e)}else{var i=n%r;t[i]=e}};e.prototype._complete=function(){var e=this.destination;var t=this.count;if(t>0){var r=this.count>=this.total?this.total:this.count;var n=this.ring;for(var i=0;i<r;i++){var o=t++%r;e.next(n[o])}}e.complete()};return e}(n.Subscriber)},{"../Subscriber":39,"../observable/empty":49,"../util/ArgumentOutOfRangeError":193}],157:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var i=e("../OuterSubscriber");var o=e("../util/subscribeToResult");function a(t){return function(e){return e.lift(new s(t))}}r.takeUntil=a;var s=function(){function e(e){this.notifier=e}e.prototype.call=function(e,t){var r=new u(e);var n=o.subscribeToResult(r,this.notifier);if(n&&!r.seenValue){r.add(n);return t.subscribe(r)}return r};return e}();var u=function(r){n(e,r);function e(e){var t=r.call(this,e)||this;t.seenValue=false;return t}e.prototype.notifyNext=function(e,t,r,n,i){this.seenValue=true;this.complete()};e.prototype.notifyComplete=function(){};return e}(i.OuterSubscriber)},{"../OuterSubscriber":34,"../util/subscribeToResult":222}],158:[function(e,t,r){"use strict";var i=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var n=e("../Subscriber");function o(t){return function(e){return e.lift(new a(t))}}r.takeWhile=o;var a=function(){function e(e){this.predicate=e}e.prototype.call=function(e,t){return t.subscribe(new s(e,this.predicate))};return e}();var s=function(n){i(e,n);function e(e,t){var r=n.call(this,e)||this;r.predicate=t;r.index=0;return r}e.prototype._next=function(e){var t=this.destination;var r;try{r=this.predicate(e,this.index++)}catch(e){t.error(e);return}this.nextOrComplete(e,r)};e.prototype.nextOrComplete=function(e,t){var r=this.destination;if(Boolean(t)){r.next(e)}else{r.complete()}};return e}(n.Subscriber)},{"../Subscriber":39}],159:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var i=e("../Subscriber");var a=e("../util/noop");var s=e("../util/isFunction");function o(r,n,i){return function e(t){return t.lift(new u(r,n,i))}}r.tap=o;var u=function(){function e(e,t,r){this.nextOrObserver=e;this.error=t;this.complete=r}e.prototype.call=function(e,t){return t.subscribe(new c(e,this.nextOrObserver,this.error,this.complete))};return e}();var c=function(o){n(e,o);function e(e,t,r,n){var i=o.call(this,e)||this;i._tapNext=a.noop;i._tapError=a.noop;i._tapComplete=a.noop;i._tapError=r||a.noop;i._tapComplete=n||a.noop;if(s.isFunction(t)){i._context=i;i._tapNext=t}else if(t){i._context=t;i._tapNext=t.next||a.noop;i._tapError=t.error||a.noop;i._tapComplete=t.complete||a.noop}return i}e.prototype._next=function(e){try{this._tapNext.call(this._context,e)}catch(e){this.destination.error(e);return}this.destination.next(e)};e.prototype._error=function(e){try{this._tapError.call(this._context,e)}catch(e){this.destination.error(e);return}this.destination.error(e)};e.prototype._complete=function(){try{this._tapComplete.call(this._context)}catch(e){this.destination.error(e);return}return this.destination.complete()};return e}(i.Subscriber)},{"../Subscriber":39,"../util/isFunction":206,"../util/noop":214}],160:[function(e,t,n){"use strict";var r=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(n,"__esModule",{value:true});var i=e("../OuterSubscriber");var a=e("../util/subscribeToResult");n.defaultThrottleConfig={leading:true,trailing:false};function o(t,r){if(r===void 0){r=n.defaultThrottleConfig}return function(e){return e.lift(new s(t,r.leading,r.trailing))}}n.throttle=o;var s=function(){function e(e,t,r){this.durationSelector=e;this.leading=t;this.trailing=r}e.prototype.call=function(e,t){return t.subscribe(new u(e,this.durationSelector,this.leading,this.trailing))};return e}();var u=function(o){r(e,o);function e(e,t,r,n){var i=o.call(this,e)||this;i.destination=e;i.durationSelector=t;i._leading=r;i._trailing=n;i._hasValue=false;return i}e.prototype._next=function(e){this._hasValue=true;this._sendValue=e;if(!this._throttled){if(this._leading){this.send()}else{this.throttle(e)}}};e.prototype.send=function(){var e=this,t=e._hasValue,r=e._sendValue;if(t){this.destination.next(r);this.throttle(r)}this._hasValue=false;this._sendValue=null};e.prototype.throttle=function(e){var t=this.tryDurationSelector(e);if(t){this.add(this._throttled=a.subscribeToResult(this,t))}};e.prototype.tryDurationSelector=function(e){try{return this.durationSelector(e)}catch(e){this.destination.error(e);return null}};e.prototype.throttlingDone=function(){var e=this,t=e._throttled,r=e._trailing;if(t){t.unsubscribe()}this._throttled=null;if(r){this.send()}};e.prototype.notifyNext=function(e,t,r,n,i){this.throttlingDone()};e.prototype.notifyComplete=function(){this.throttlingDone()};return e}(i.OuterSubscriber)},{"../OuterSubscriber":34,"../util/subscribeToResult":222}],161:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var i=e("../Subscriber");var o=e("../scheduler/async");var a=e("./throttle");function s(t,r,n){if(r===void 0){r=o.async}if(n===void 0){n=a.defaultThrottleConfig}return function(e){return e.lift(new u(t,r,n.leading,n.trailing))}}r.throttleTime=s;var u=function(){function e(e,t,r,n){this.duration=e;this.scheduler=t;this.leading=r;this.trailing=n}e.prototype.call=function(e,t){return t.subscribe(new c(e,this.duration,this.scheduler,this.leading,this.trailing))};return e}();var c=function(a){n(e,a);function e(e,t,r,n,i){var o=a.call(this,e)||this;o.duration=t;o.scheduler=r;o.leading=n;o.trailing=i;o._hasTrailingValue=false;o._trailingValue=null;return o}e.prototype._next=function(e){if(this.throttled){if(this.trailing){this._trailingValue=e;this._hasTrailingValue=true}}else{this.add(this.throttled=this.scheduler.schedule(h,this.duration,{subscriber:this}));if(this.leading){this.destination.next(e)}}};e.prototype._complete=function(){if(this._hasTrailingValue){this.destination.next(this._trailingValue);this.destination.complete()}else{this.destination.complete()}};e.prototype.clearThrottle=function(){var e=this.throttled;if(e){if(this.trailing&&this._hasTrailingValue){this.destination.next(this._trailingValue);this._trailingValue=null;this._hasTrailingValue=false}e.unsubscribe();this.remove(e);this.throttled=null}};return e}(i.Subscriber);function h(e){var t=e.subscriber;t.clearThrottle()}},{"../Subscriber":39,"../scheduler/async":188,"./throttle":160}],162:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("./tap");var i=e("../util/EmptyError");r.throwIfEmpty=function(e){if(e===void 0){e=o}return n.tap({hasValue:false,next:function(){this.hasValue=true},complete:function(){if(!this.hasValue){throw e()}}})};function o(){return new i.EmptyError}},{"../util/EmptyError":194,"./tap":159}],163:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var i=e("../scheduler/async");var o=e("./scan");var a=e("../observable/defer");var s=e("./map");function n(n){if(n===void 0){n=i.async}return function(e){return a.defer(function(){return e.pipe(o.scan(function(e,t){var r=e.current;return{value:t,current:n.now(),last:r}},{current:n.now(),value:undefined,last:undefined}),s.map(function(e){var t=e.current,r=e.last,n=e.value;return new u(n,t-r)}))})}}r.timeInterval=n;var u=function(){function e(e,t){this.value=e;this.interval=t}return e}();r.TimeInterval=u},{"../observable/defer":48,"../scheduler/async":188,"./map":112,"./scan":141}],164:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("../scheduler/async");var i=e("../util/TimeoutError");var o=e("./timeoutWith");var a=e("../observable/throwError");function s(e,t){if(t===void 0){t=n.async}return o.timeoutWith(e,a.throwError(new i.TimeoutError),t)}r.timeout=s},{"../observable/throwError":69,"../scheduler/async":188,"../util/TimeoutError":197,"./timeoutWith":165}],165:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var a=e("../scheduler/async");var s=e("../util/isDate");var i=e("../OuterSubscriber");var o=e("../util/subscribeToResult");function u(n,i,o){if(o===void 0){o=a.async}return function(e){var t=s.isDate(n);var r=t?+n-o.now():Math.abs(n);return e.lift(new c(r,t,i,o))}}r.timeoutWith=u;var c=function(){function e(e,t,r,n){this.waitFor=e;this.absoluteTimeout=t;this.withObservable=r;this.scheduler=n}e.prototype.call=function(e,t){return t.subscribe(new h(e,this.absoluteTimeout,this.waitFor,this.withObservable,this.scheduler))};return e}();var h=function(a){n(t,a);function t(e,t,r,n,i){var o=a.call(this,e)||this;o.absoluteTimeout=t;o.waitFor=r;o.withObservable=n;o.scheduler=i;o.action=null;o.scheduleTimeout();return o}t.dispatchTimeout=function(e){var t=e.withObservable;e._unsubscribeAndRecycle();e.add(o.subscribeToResult(e,t))};t.prototype.scheduleTimeout=function(){var e=this.action;if(e){this.action=e.schedule(this,this.waitFor)}else{this.add(this.action=this.scheduler.schedule(t.dispatchTimeout,this.waitFor,this))}};t.prototype._next=function(e){if(!this.absoluteTimeout){this.scheduleTimeout()}a.prototype._next.call(this,e)};t.prototype._unsubscribe=function(){this.action=null;this.scheduler=null;this.withObservable=null};return t}(i.OuterSubscriber)},{"../OuterSubscriber":34,"../scheduler/async":188,"../util/isDate":205,"../util/subscribeToResult":222}],166:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("../scheduler/async");var i=e("./map");function o(t){if(t===void 0){t=n.async}return i.map(function(e){return new a(e,t.now())})}r.timestamp=o;var a=function(){function e(e,t){this.value=e;this.timestamp=t}return e}();r.Timestamp=a},{"../scheduler/async":188,"./map":112}],167:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("./reduce");function i(e,t,r){if(r===0){return[t]}e.push(t);return e}function o(){return n.reduce(i,[])}r.toArray=o},{"./reduce":133}],168:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var i=e("../Subject");var o=e("../OuterSubscriber");var a=e("../util/subscribeToResult");function s(r){return function e(t){return t.lift(new u(r))}}r.window=s;var u=function(){function e(e){this.windowBoundaries=e}e.prototype.call=function(e,t){var r=new c(e);var n=t.subscribe(r);if(!n.closed){r.add(a.subscribeToResult(r,this.windowBoundaries))}return n};return e}();var c=function(r){n(e,r);function e(e){var t=r.call(this,e)||this;t.window=new i.Subject;e.next(t.window);return t}e.prototype.notifyNext=function(e,t,r,n,i){this.openWindow()};e.prototype.notifyError=function(e,t){this._error(e)};e.prototype.notifyComplete=function(e){this._complete()};e.prototype._next=function(e){this.window.next(e)};e.prototype._error=function(e){this.window.error(e);this.destination.error(e)};e.prototype._complete=function(){this.window.complete();this.destination.complete()};e.prototype._unsubscribe=function(){this.window=null};e.prototype.openWindow=function(){var e=this.window;if(e){e.complete()}var t=this.destination;var r=this.window=new i.Subject;t.next(r)};return e}(o.OuterSubscriber)},{"../OuterSubscriber":34,"../Subject":37,"../util/subscribeToResult":222}],169:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var i=e("../Subscriber");var c=e("../Subject");function o(r,n){if(n===void 0){n=0}return function e(t){return t.lift(new a(r,n))}}r.windowCount=o;var a=function(){function e(e,t){this.windowSize=e;this.startWindowEvery=t}e.prototype.call=function(e,t){return t.subscribe(new s(e,this.windowSize,this.startWindowEvery))};return e}();var s=function(i){n(e,i);function e(e,t,r){var n=i.call(this,e)||this;n.destination=e;n.windowSize=t;n.startWindowEvery=r;n.windows=[new c.Subject];n.count=0;e.next(n.windows[0]);return n}e.prototype._next=function(e){var t=this.startWindowEvery>0?this.startWindowEvery:this.windowSize;var r=this.destination;var n=this.windowSize;var i=this.windows;var o=i.length;for(var a=0;a<o&&!this.closed;a++){i[a].next(e)}var s=this.count-n+1;if(s>=0&&s%t===0&&!this.closed){i.shift().complete()}if(++this.count%t===0&&!this.closed){var u=new c.Subject;i.push(u);r.next(u)}};e.prototype._error=function(e){var t=this.windows;if(t){while(t.length>0&&!this.closed){t.shift().error(e)}}this.destination.error(e)};e.prototype._complete=function(){var e=this.windows;if(e){while(e.length>0&&!this.closed){e.shift().complete()}}this.destination.complete()};e.prototype._unsubscribe=function(){this.count=0;this.windows=null};return e}(i.Subscriber)},{"../Subject":37,"../Subscriber":39}],170:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var i=e("../Subject");var a=e("../scheduler/async");var o=e("../Subscriber");var s=e("../util/isNumeric");var u=e("../util/isScheduler");function c(r){var n=a.async;var i=null;var o=Number.POSITIVE_INFINITY;if(u.isScheduler(arguments[3])){n=arguments[3]}if(u.isScheduler(arguments[2])){n=arguments[2]}else if(s.isNumeric(arguments[2])){o=arguments[2]}if(u.isScheduler(arguments[1])){n=arguments[1]}else if(s.isNumeric(arguments[1])){i=arguments[1]}return function e(t){return t.lift(new h(r,i,o,n))}}r.windowTime=c;var h=function(){function e(e,t,r,n){this.windowTimeSpan=e;this.windowCreationInterval=t;this.maxWindowSize=r;this.scheduler=n}e.prototype.call=function(e,t){return t.subscribe(new p(e,this.windowTimeSpan,this.windowCreationInterval,this.maxWindowSize,this.scheduler))};return e}();var l=function(t){n(e,t);function e(){var e=t!==null&&t.apply(this,arguments)||this;e._numberOfNextedValues=0;return e}e.prototype.next=function(e){this._numberOfNextedValues++;t.prototype.next.call(this,e)};Object.defineProperty(e.prototype,"numberOfNextedValues",{get:function(){return this._numberOfNextedValues},enumerable:true,configurable:true});return e}(i.Subject);var p=function(h){n(e,h);function e(e,t,r,n,i){var o=h.call(this,e)||this;o.destination=e;o.windowTimeSpan=t;o.windowCreationInterval=r;o.maxWindowSize=n;o.scheduler=i;o.windows=[];var a=o.openWindow();if(r!==null&&r>=0){var s={subscriber:o,window:a,context:null};var u={windowTimeSpan:t,windowCreationInterval:r,subscriber:o,scheduler:i};o.add(i.schedule(v,t,s));o.add(i.schedule(d,r,u))}else{var c={subscriber:o,window:a,windowTimeSpan:t};o.add(i.schedule(f,t,c))}return o}e.prototype._next=function(e){var t=this.windows;var r=t.length;for(var n=0;n<r;n++){var i=t[n];if(!i.closed){i.next(e);if(i.numberOfNextedValues>=this.maxWindowSize){this.closeWindow(i)}}}};e.prototype._error=function(e){var t=this.windows;while(t.length>0){t.shift().error(e)}this.destination.error(e)};e.prototype._complete=function(){var e=this.windows;while(e.length>0){var t=e.shift();if(!t.closed){t.complete()}}this.destination.complete()};e.prototype.openWindow=function(){var e=new l;this.windows.push(e);var t=this.destination;t.next(e);return e};e.prototype.closeWindow=function(e){e.complete();var t=this.windows;t.splice(t.indexOf(e),1)};return e}(o.Subscriber);function f(e){var t=e.subscriber,r=e.windowTimeSpan,n=e.window;if(n){t.closeWindow(n)}e.window=t.openWindow();this.schedule(e,r)}function d(e){var t=e.windowTimeSpan,r=e.subscriber,n=e.scheduler,i=e.windowCreationInterval;var o=r.openWindow();var a=this;var s={action:a,subscription:null};var u={subscriber:r,window:o,context:s};s.subscription=n.schedule(v,t,u);a.add(s.subscription);a.schedule(e,i)}function v(e){var t=e.subscriber,r=e.window,n=e.context;if(n&&n.action&&n.subscription){n.action.remove(n.subscription)}t.closeWindow(r)}},{"../Subject":37,"../Subscriber":39,"../scheduler/async":188,"../util/isNumeric":209,"../util/isScheduler":213}],171:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var l=e("../Subject");var p=e("../Subscription");var f=e("../util/tryCatch");var d=e("../util/errorObject");var i=e("../OuterSubscriber");var v=e("../util/subscribeToResult");function o(t,r){return function(e){return e.lift(new a(t,r))}}r.windowToggle=o;var a=function(){function e(e,t){this.openings=e;this.closingSelector=t}e.prototype.call=function(e,t){return t.subscribe(new s(e,this.openings,this.closingSelector))};return e}();var s=function(o){n(e,o);function e(e,t,r){var n=o.call(this,e)||this;n.openings=t;n.closingSelector=r;n.contexts=[];n.add(n.openSubscription=v.subscribeToResult(n,t,t));return n}e.prototype._next=function(e){var t=this.contexts;if(t){var r=t.length;for(var n=0;n<r;n++){t[n].window.next(e)}}};e.prototype._error=function(e){var t=this.contexts;this.contexts=null;if(t){var r=t.length;var n=-1;while(++n<r){var i=t[n];i.window.error(e);i.subscription.unsubscribe()}}o.prototype._error.call(this,e)};e.prototype._complete=function(){var e=this.contexts;this.contexts=null;if(e){var t=e.length;var r=-1;while(++r<t){var n=e[r];n.window.complete();n.subscription.unsubscribe()}}o.prototype._complete.call(this)};e.prototype._unsubscribe=function(){var e=this.contexts;this.contexts=null;if(e){var t=e.length;var r=-1;while(++r<t){var n=e[r];n.window.unsubscribe();n.subscription.unsubscribe()}}};e.prototype.notifyNext=function(e,t,r,n,i){if(e===this.openings){var o=this.closingSelector;var a=f.tryCatch(o)(t);if(a===d.errorObject){return this.error(d.errorObject.e)}else{var s=new l.Subject;var u=new p.Subscription;var c={window:s,subscription:u};this.contexts.push(c);var h=v.subscribeToResult(this,a,c);if(h.closed){this.closeWindow(this.contexts.length-1)}else{h.context=c;u.add(h)}this.destination.next(s)}}else{this.closeWindow(this.contexts.indexOf(e))}};e.prototype.notifyError=function(e){this.error(e)};e.prototype.notifyComplete=function(e){if(e!==this.openSubscription){this.closeWindow(this.contexts.indexOf(e.context))}};e.prototype.closeWindow=function(e){if(e===-1){return}var t=this.contexts;var r=t[e];var n=r.window,i=r.subscription;t.splice(e,1);n.complete();i.unsubscribe()};return e}(i.OuterSubscriber)},{"../OuterSubscriber":34,"../Subject":37,"../Subscription":40,"../util/errorObject":200,"../util/subscribeToResult":222,"../util/tryCatch":224}],172:[function(e,t,r){"use strict";var i=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var o=e("../Subject");var a=e("../util/tryCatch");var s=e("../util/errorObject");var n=e("../OuterSubscriber");var u=e("../util/subscribeToResult");function c(r){return function e(t){return t.lift(new h(r))}}r.windowWhen=c;var h=function(){function e(e){this.closingSelector=e}e.prototype.call=function(e,t){return t.subscribe(new l(e,this.closingSelector))};return e}();var l=function(n){i(e,n);function e(e,t){var r=n.call(this,e)||this;r.destination=e;r.closingSelector=t;r.openWindow();return r}e.prototype.notifyNext=function(e,t,r,n,i){this.openWindow(i)};e.prototype.notifyError=function(e,t){this._error(e)};e.prototype.notifyComplete=function(e){this.openWindow(e)};e.prototype._next=function(e){this.window.next(e)};e.prototype._error=function(e){this.window.error(e);this.destination.error(e);this.unsubscribeClosingNotification()};e.prototype._complete=function(){this.window.complete();this.destination.complete();this.unsubscribeClosingNotification()};e.prototype.unsubscribeClosingNotification=function(){if(this.closingNotification){this.closingNotification.unsubscribe()}};e.prototype.openWindow=function(e){if(e===void 0){e=null}if(e){this.remove(e);e.unsubscribe()}var t=this.window;if(t){t.complete()}var r=this.window=new o.Subject;this.destination.next(r);var n=a.tryCatch(this.closingSelector)();if(n===s.errorObject){var i=s.errorObject.e;this.destination.error(i);this.window.error(i)}else{this.add(this.closingNotification=u.subscribeToResult(this,n))}};return e}(n.OuterSubscriber)},{"../OuterSubscriber":34,"../Subject":37,"../util/errorObject":200,"../util/subscribeToResult":222,"../util/tryCatch":224}],173:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var i=e("../OuterSubscriber");var u=e("../util/subscribeToResult");function o(){var n=[];for(var e=0;e<arguments.length;e++){n[e]=arguments[e]}return function(e){var t;if(typeof n[n.length-1]==="function"){t=n.pop()}var r=n;return e.lift(new a(r,t))}}r.withLatestFrom=o;var a=function(){function e(e,t){this.observables=e;this.project=t}e.prototype.call=function(e,t){return t.subscribe(new s(e,this.observables,this.project))};return e}();var s=function(s){n(e,s);function e(e,t,r){var n=s.call(this,e)||this;n.observables=t;n.project=r;n.toRespond=[];var i=t.length;n.values=new Array(i);for(var o=0;o<i;o++){n.toRespond.push(o)}for(var o=0;o<i;o++){var a=t[o];n.add(u.subscribeToResult(n,a,a,o))}return n}e.prototype.notifyNext=function(e,t,r,n,i){this.values[r]=t;var o=this.toRespond;if(o.length>0){var a=o.indexOf(r);if(a!==-1){o.splice(a,1)}}};e.prototype.notifyComplete=function(){};e.prototype._next=function(e){if(this.toRespond.length===0){var t=[e].concat(this.values);if(this.project){this._tryProject(t)}else{this.destination.next(t)}}};e.prototype._tryProject=function(e){var t;try{t=this.project.apply(this,e)}catch(e){this.destination.error(e);return}this.destination.next(t)};return e}(i.OuterSubscriber)},{"../OuterSubscriber":34,"../util/subscribeToResult":222}],174:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("../observable/zip");function i(){var r=[];for(var e=0;e<arguments.length;e++){r[e]=arguments[e]}return function e(t){return t.lift.call(n.zip.apply(void 0,[t].concat(r)))}}r.zip=i},{"../observable/zip":72}],175:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("../observable/zip");function i(t){return function(e){return e.lift(new n.ZipOperator(t))}}r.zipAll=i},{"../observable/zip":72}],176:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var i=e("../Subscription");var o=function(r){n(e,r);function e(e,t){return r.call(this)||this}e.prototype.schedule=function(e,t){if(t===void 0){t=0}return this};return e}(i.Subscription);r.Action=o},{"../Subscription":40}],177:[function(e,t,r){"use strict";var i=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var n=e("./AsyncAction");var o=function(n){i(e,n);function e(e,t){var r=n.call(this,e,t)||this;r.scheduler=e;r.work=t;return r}e.prototype.requestAsyncId=function(e,t,r){if(r===void 0){r=0}if(r!==null&&r>0){return n.prototype.requestAsyncId.call(this,e,t,r)}e.actions.push(this);return e.scheduled||(e.scheduled=requestAnimationFrame(function(){return e.flush(null)}))};e.prototype.recycleAsyncId=function(e,t,r){if(r===void 0){r=0}if(r!==null&&r>0||r===null&&this.delay>0){return n.prototype.recycleAsyncId.call(this,e,t,r)}if(e.actions.length===0){cancelAnimationFrame(t);e.scheduled=undefined}return undefined};return e}(n.AsyncAction);r.AnimationFrameAction=o},{"./AsyncAction":181}],178:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var i=e("./AsyncScheduler");var o=function(e){n(t,e);function t(){return e!==null&&e.apply(this,arguments)||this}t.prototype.flush=function(e){this.active=true;this.scheduled=undefined;var t=this.actions;var r;var n=-1;var i=t.length;e=e||t.shift();do{if(r=e.execute(e.state,e.delay)){break}}while(++n<i&&(e=t.shift()));this.active=false;if(r){while(++n<i&&(e=t.shift())){e.unsubscribe()}throw r}};return t}(i.AsyncScheduler);r.AnimationFrameScheduler=o},{"./AsyncScheduler":182}],179:[function(e,t,r){"use strict";var i=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var o=e("../util/Immediate");var n=e("./AsyncAction");var a=function(n){i(e,n);function e(e,t){var r=n.call(this,e,t)||this;r.scheduler=e;r.work=t;return r}e.prototype.requestAsyncId=function(e,t,r){if(r===void 0){r=0}if(r!==null&&r>0){return n.prototype.requestAsyncId.call(this,e,t,r)}e.actions.push(this);return e.scheduled||(e.scheduled=o.Immediate.setImmediate(e.flush.bind(e,null)))};e.prototype.recycleAsyncId=function(e,t,r){if(r===void 0){r=0}if(r!==null&&r>0||r===null&&this.delay>0){return n.prototype.recycleAsyncId.call(this,e,t,r)}if(e.actions.length===0){o.Immediate.clearImmediate(t);e.scheduled=undefined}return undefined};return e}(n.AsyncAction);r.AsapAction=a},{"../util/Immediate":195,"./AsyncAction":181}],180:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var i=e("./AsyncScheduler");var o=function(e){n(t,e);function t(){return e!==null&&e.apply(this,arguments)||this}t.prototype.flush=function(e){this.active=true;this.scheduled=undefined;var t=this.actions;var r;var n=-1;var i=t.length;e=e||t.shift();do{if(r=e.execute(e.state,e.delay)){break}}while(++n<i&&(e=t.shift()));this.active=false;if(r){while(++n<i&&(e=t.shift())){e.unsubscribe()}throw r}};return t}(i.AsyncScheduler);r.AsapScheduler=o},{"./AsyncScheduler":182}],181:[function(e,t,r){"use strict";var i=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var n=e("./Action");var o=function(n){i(e,n);function e(e,t){var r=n.call(this,e,t)||this;r.scheduler=e;r.work=t;r.pending=false;return r}e.prototype.schedule=function(e,t){if(t===void 0){t=0}if(this.closed){return this}this.state=e;var r=this.id;var n=this.scheduler;if(r!=null){this.id=this.recycleAsyncId(n,r,t)}this.pending=true;this.delay=t;this.id=this.id||this.requestAsyncId(n,this.id,t);return this};e.prototype.requestAsyncId=function(e,t,r){if(r===void 0){r=0}return setInterval(e.flush.bind(e,this),r)};e.prototype.recycleAsyncId=function(e,t,r){if(r===void 0){r=0}if(r!==null&&this.delay===r&&this.pending===false){return t}clearInterval(t)};e.prototype.execute=function(e,t){if(this.closed){return new Error("executing a cancelled action")}this.pending=false;var r=this._execute(e,t);if(r){return r}else if(this.pending===false&&this.id!=null){this.id=this.recycleAsyncId(this.scheduler,this.id,null)}};e.prototype._execute=function(e,t){var r=false;var n=undefined;try{this.work(e)}catch(e){r=true;n=!!e&&e||new Error(e)}if(r){this.unsubscribe();return n}};e.prototype._unsubscribe=function(){var e=this.id;var t=this.scheduler;var r=t.actions;var n=r.indexOf(this);this.work=null;this.state=null;this.pending=false;this.scheduler=null;if(n!==-1){r.splice(n,1)}if(e!=null){this.id=this.recycleAsyncId(t,e,null)}this.delay=null};return e}(n.Action);r.AsyncAction=o},{"./Action":176}],182:[function(e,t,r){"use strict";var o=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var a=e("../Scheduler");var n=function(n){o(i,n);function i(e,t){if(t===void 0){t=a.Scheduler.now}var r=n.call(this,e,function(){if(i.delegate&&i.delegate!==r){return i.delegate.now()}else{return t()}})||this;r.actions=[];r.active=false;r.scheduled=undefined;return r}i.prototype.schedule=function(e,t,r){if(t===void 0){t=0}if(i.delegate&&i.delegate!==this){return i.delegate.schedule(e,t,r)}else{return n.prototype.schedule.call(this,e,t,r)}};i.prototype.flush=function(e){var t=this.actions;if(this.active){t.push(e);return}var r;this.active=true;do{if(r=e.execute(e.state,e.delay)){break}}while(e=t.shift());this.active=false;if(r){while(e=t.shift()){e.unsubscribe()}throw r}};return i}(a.Scheduler);r.AsyncScheduler=n},{"../Scheduler":36}],183:[function(e,t,r){"use strict";var i=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var n=e("./AsyncAction");var o=function(n){i(e,n);function e(e,t){var r=n.call(this,e,t)||this;r.scheduler=e;r.work=t;return r}e.prototype.schedule=function(e,t){if(t===void 0){t=0}if(t>0){return n.prototype.schedule.call(this,e,t)}this.delay=t;this.state=e;this.scheduler.flush(this);return this};e.prototype.execute=function(e,t){return t>0||this.closed?n.prototype.execute.call(this,e,t):this._execute(e,t)};e.prototype.requestAsyncId=function(e,t,r){if(r===void 0){r=0}if(r!==null&&r>0||r===null&&this.delay>0){return n.prototype.requestAsyncId.call(this,e,t,r)}return e.flush(this)};return e}(n.AsyncAction);r.QueueAction=o},{"./AsyncAction":181}],184:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var i=e("./AsyncScheduler");var o=function(e){n(t,e);function t(){return e!==null&&e.apply(this,arguments)||this}return t}(i.AsyncScheduler);r.QueueScheduler=o},{"./AsyncScheduler":182}],185:[function(e,t,r){"use strict";var a=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var n=e("./AsyncAction");var i=e("./AsyncScheduler");var o=function(n){a(e,n);function e(e,t){if(e===void 0){e=s}if(t===void 0){t=Number.POSITIVE_INFINITY}var r=n.call(this,e,function(){return r.frame})||this;r.maxFrames=t;r.frame=0;r.index=-1;return r}e.prototype.flush=function(){var e=this,t=e.actions,r=e.maxFrames;var n,i;while((i=t.shift())&&(this.frame=i.delay)<=r){if(n=i.execute(i.state,i.delay)){break}}if(n){while(i=t.shift()){i.unsubscribe()}throw n}};e.frameTimeFactor=10;return e}(i.AsyncScheduler);r.VirtualTimeScheduler=o;var s=function(i){a(o,i);function o(e,t,r){if(r===void 0){r=e.index+=1}var n=i.call(this,e,t)||this;n.scheduler=e;n.work=t;n.index=r;n.active=true;n.index=e.index=r;return n}o.prototype.schedule=function(e,t){if(t===void 0){t=0}if(!this.id){return i.prototype.schedule.call(this,e,t)}this.active=false;var r=new o(this.scheduler,this.work);this.add(r);return r.schedule(e,t)};o.prototype.requestAsyncId=function(e,t,r){if(r===void 0){r=0}this.delay=e.frame+r;var n=e.actions;n.push(this);n.sort(o.sortActions);return true};o.prototype.recycleAsyncId=function(e,t,r){if(r===void 0){r=0}return undefined};o.prototype._execute=function(e,t){if(this.active===true){return i.prototype._execute.call(this,e,t)}};o.sortActions=function(e,t){if(e.delay===t.delay){if(e.index===t.index){return 0}else if(e.index>t.index){return 1}else{return-1}}else if(e.delay>t.delay){return 1}else{return-1}};return o}(n.AsyncAction);r.VirtualAction=s},{"./AsyncAction":181,"./AsyncScheduler":182}],186:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("./AnimationFrameAction");var i=e("./AnimationFrameScheduler");r.animationFrame=new i.AnimationFrameScheduler(n.AnimationFrameAction)},{"./AnimationFrameAction":177,"./AnimationFrameScheduler":178}],187:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("./AsapAction");var i=e("./AsapScheduler");r.asap=new i.AsapScheduler(n.AsapAction)},{"./AsapAction":179,"./AsapScheduler":180}],188:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("./AsyncAction");var i=e("./AsyncScheduler");r.async=new i.AsyncScheduler(n.AsyncAction)},{"./AsyncAction":181,"./AsyncScheduler":182}],189:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("./QueueAction");var i=e("./QueueScheduler");r.queue=new i.QueueScheduler(n.QueueAction)},{"./QueueAction":183,"./QueueScheduler":184}],190:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});function n(){if(typeof Symbol!=="function"||!Symbol.iterator){return"@@iterator"}return Symbol.iterator}r.getSymbolIterator=n;r.iterator=n();r.$$iterator=r.iterator},{}],191:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});r.observable=typeof Symbol==="function"&&Symbol.observable||"@@observable"},{}],192:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});r.rxSubscriber=typeof Symbol==="function"?Symbol("rxSubscriber"):"@@rxSubscriber_"+Math.random();r.$$rxSubscriber=r.rxSubscriber},{}],193:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});function n(){Error.call(this);this.message="argument out of range";this.name="ArgumentOutOfRangeError";return this}n.prototype=Object.create(Error.prototype);r.ArgumentOutOfRangeError=n},{}],194:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});function n(){Error.call(this);this.message="no elements in sequence";this.name="EmptyError";return this}n.prototype=Object.create(Error.prototype);r.EmptyError=n},{}],195:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=1;var i={};function o(e){var t=i[e];if(t){t()}}r.Immediate={setImmediate:function(e){var t=n++;i[t]=e;Promise.resolve().then(function(){return o(t)});return t},clearImmediate:function(e){delete i[e]}}},{}],196:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});function n(){Error.call(this);this.message="object unsubscribed";this.name="ObjectUnsubscribedError";return this}n.prototype=Object.create(Error.prototype);r.ObjectUnsubscribedError=n},{}],197:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});function n(){Error.call(this);this.message="Timeout has occurred";this.name="TimeoutError";return this}n.prototype=Object.create(Error.prototype);r.TimeoutError=n},{}],198:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});function n(e){Error.call(this);this.message=e?e.length+" errors occurred during unsubscription:\n"+e.map(function(e,t){return t+1+") "+e.toString()}).join("\n  "):"";this.name="UnsubscriptionError";this.errors=e;return this}n.prototype=Object.create(Error.prototype);r.UnsubscriptionError=n},{}],199:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var o=e("../Subscriber");function n(e){while(e){var t=e,r=t.closed,n=t.destination,i=t.isStopped;if(r||i){return false}else if(n&&n instanceof o.Subscriber){e=n}else{e=null}}return true}r.canReportError=n},{"../Subscriber":39}],200:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});r.errorObject={e:{}}},{}],201:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});function n(e){setTimeout(function(){throw e})}r.hostReportError=n},{}],202:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});function n(e){return e}r.identity=n},{}],203:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});r.isArray=Array.isArray||function(e){return e&&typeof e.length==="number"}},{}],204:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});r.isArrayLike=function(e){return e&&typeof e.length==="number"&&typeof e!=="function"}},{}],205:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});function n(e){return e instanceof Date&&!isNaN(+e)}r.isDate=n},{}],206:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});function n(e){return typeof e==="function"}r.isFunction=n},{}],207:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("../symbol/observable");function i(e){return e&&typeof e[n.observable]==="function"}r.isInteropObservable=i},{"../symbol/observable":191}],208:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("../symbol/iterator");function i(e){return e&&typeof e[n.iterator]==="function"}r.isIterable=i},{"../symbol/iterator":190}],209:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("./isArray");function i(e){return!n.isArray(e)&&e-parseFloat(e)+1>=0}r.isNumeric=i},{"./isArray":203}],210:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});function n(e){return e!=null&&typeof e==="object"}r.isObject=n},{}],211:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("../Observable");function i(e){return!!e&&(e instanceof n.Observable||typeof e.lift==="function"&&typeof e.subscribe==="function")}r.isObservable=i},{"../Observable":32}],212:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});function n(e){return e&&typeof e.subscribe!=="function"&&typeof e.then==="function"}r.isPromise=n},{}],213:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});function n(e){return e&&typeof e.schedule==="function"}r.isScheduler=n},{}],214:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});function n(){}r.noop=n},{}],215:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});function n(e,t){function r(){return!r.pred.apply(r.thisArg,arguments)}r.pred=e;r.thisArg=t;return r}r.not=n},{}],216:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("./noop");function i(){var e=[];for(var t=0;t<arguments.length;t++){e[t]=arguments[t]}return o(e)}r.pipe=i;function o(r){if(!r){return n.noop}if(r.length===1){return r[0]}return function e(t){return r.reduce(function(e,t){return t(e)},t)}}r.pipeFromArray=o},{"./noop":214}],217:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("../Observable");var i=e("./subscribeToArray");var o=e("./subscribeToPromise");var a=e("./subscribeToIterable");var s=e("./subscribeToObservable");var u=e("./isArrayLike");var c=e("./isPromise");var h=e("./isObject");var l=e("../symbol/iterator");var p=e("../symbol/observable");r.subscribeTo=function(t){if(t instanceof n.Observable){return function(e){if(t._isScalar){e.next(t.value);e.complete();return undefined}else{return t.subscribe(e)}}}else if(t&&typeof t[p.observable]==="function"){return s.subscribeToObservable(t)}else if(u.isArrayLike(t)){return i.subscribeToArray(t)}else if(c.isPromise(t)){return o.subscribeToPromise(t)}else if(t&&typeof t[l.iterator]==="function"){return a.subscribeToIterable(t)}else{var e=h.isObject(t)?"an invalid object":"'"+t+"'";var r="You provided "+e+" where a stream was expected."+" You can provide an Observable, Promise, Array, or Iterable.";throw new TypeError(r)}}},{"../Observable":32,"../symbol/iterator":190,"../symbol/observable":191,"./isArrayLike":204,"./isObject":210,"./isPromise":212,"./subscribeToArray":218,"./subscribeToIterable":219,"./subscribeToObservable":220,"./subscribeToPromise":221}],218:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});r.subscribeToArray=function(n){return function(e){for(var t=0,r=n.length;t<r&&!e.closed;t++){e.next(n[t])}if(!e.closed){e.complete()}}}},{}],219:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var i=e("../symbol/iterator");r.subscribeToIterable=function(n){return function(e){var t=n[i.iterator]();do{var r=t.next();if(r.done){e.complete();break}e.next(r.value);if(e.closed){break}}while(true);if(typeof t.return==="function"){e.add(function(){if(t.return){t.return()}})}return e}}},{"../symbol/iterator":190}],220:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("../symbol/observable");r.subscribeToObservable=function(r){return function(e){var t=r[n.observable]();if(typeof t.subscribe!=="function"){throw new TypeError("Provided object does not correctly implement Symbol.observable")}else{return t.subscribe(e)}}}},{"../symbol/observable":191}],221:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("./hostReportError");r.subscribeToPromise=function(e){return function(t){e.then(function(e){if(!t.closed){t.next(e);t.complete()}},function(e){return t.error(e)}).then(null,n.hostReportError);return t}}},{"./hostReportError":201}],222:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var o=e("../InnerSubscriber");var a=e("./subscribeTo");function n(e,t,r,n,i){if(i===void 0){i=new o.InnerSubscriber(e,r,n)}if(i.closed){return}return a.subscribeTo(t)(i)}r.subscribeToResult=n},{"../InnerSubscriber":30,"./subscribeTo":217}],223:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("../Subscriber");var i=e("../symbol/rxSubscriber");var o=e("../Observer");function a(e,t,r){if(e){if(e instanceof n.Subscriber){return e}if(e[i.rxSubscriber]){return e[i.rxSubscriber]()}}if(!e&&!t&&!r){return new n.Subscriber(o.empty)}return new n.Subscriber(e,t,r)}r.toSubscriber=a},{"../Observer":33,"../Subscriber":39,"../symbol/rxSubscriber":192}],224:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("./errorObject");var i;function o(){try{return i.apply(this,arguments)}catch(e){n.errorObject.e=e;return n.errorObject}}function a(e){i=e;return o}r.tryCatch=a},{"./errorObject":200}],225:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("../internal/operators/audit");r.audit=n.audit;var i=e("../internal/operators/auditTime");r.auditTime=i.auditTime;var o=e("../internal/operators/buffer");r.buffer=o.buffer;var a=e("../internal/operators/bufferCount");r.bufferCount=a.bufferCount;var s=e("../internal/operators/bufferTime");r.bufferTime=s.bufferTime;var u=e("../internal/operators/bufferToggle");r.bufferToggle=u.bufferToggle;var c=e("../internal/operators/bufferWhen");r.bufferWhen=c.bufferWhen;var h=e("../internal/operators/catchError");r.catchError=h.catchError;var l=e("../internal/operators/combineAll");r.combineAll=l.combineAll;var p=e("../internal/operators/combineLatest");r.combineLatest=p.combineLatest;var f=e("../internal/operators/concat");r.concat=f.concat;var d=e("../internal/operators/concatAll");r.concatAll=d.concatAll;var v=e("../internal/operators/concatMap");r.concatMap=v.concatMap;var m=e("../internal/operators/concatMapTo");r.concatMapTo=m.concatMapTo;var g=e("../internal/operators/count");r.count=g.count;var y=e("../internal/operators/debounce");r.debounce=y.debounce;var _=e("../internal/operators/debounceTime");r.debounceTime=_.debounceTime;var b=e("../internal/operators/defaultIfEmpty");r.defaultIfEmpty=b.defaultIfEmpty;var x=e("../internal/operators/delay");r.delay=x.delay;var w=e("../internal/operators/delayWhen");r.delayWhen=w.delayWhen;var S=e("../internal/operators/dematerialize");r.dematerialize=S.dematerialize;var M=e("../internal/operators/distinct");r.distinct=M.distinct;var E=e("../internal/operators/distinctUntilChanged");r.distinctUntilChanged=E.distinctUntilChanged;var C=e("../internal/operators/distinctUntilKeyChanged");r.distinctUntilKeyChanged=C.distinctUntilKeyChanged;var T=e("../internal/operators/elementAt");r.elementAt=T.elementAt;var O=e("../internal/operators/endWith");r.endWith=O.endWith;var P=e("../internal/operators/every");r.every=P.every;var A=e("../internal/operators/exhaust");r.exhaust=A.exhaust;var j=e("../internal/operators/exhaustMap");r.exhaustMap=j.exhaustMap;var R=e("../internal/operators/expand");r.expand=R.expand;var L=e("../internal/operators/filter");r.filter=L.filter;var I=e("../internal/operators/finalize");r.finalize=I.finalize;var N=e("../internal/operators/find");r.find=N.find;var D=e("../internal/operators/findIndex");r.findIndex=D.findIndex;var k=e("../internal/operators/first");r.first=k.first;var B=e("../internal/operators/groupBy");r.groupBy=B.groupBy;var F=e("../internal/operators/ignoreElements");r.ignoreElements=F.ignoreElements;var $=e("../internal/operators/isEmpty");r.isEmpty=$.isEmpty;var z=e("../internal/operators/last");r.last=z.last;var U=e("../internal/operators/map");r.map=U.map;var G=e("../internal/operators/mapTo");r.mapTo=G.mapTo;var V=e("../internal/operators/materialize");r.materialize=V.materialize;var H=e("../internal/operators/max");r.max=H.max;var q=e("../internal/operators/merge");r.merge=q.merge;var W=e("../internal/operators/mergeAll");r.mergeAll=W.mergeAll;var X=e("../internal/operators/mergeMap");r.mergeMap=X.mergeMap;var Y=e("../internal/operators/mergeMap");r.flatMap=Y.mergeMap;var K=e("../internal/operators/mergeMapTo");r.mergeMapTo=K.mergeMapTo;var Z=e("../internal/operators/mergeScan");r.mergeScan=Z.mergeScan;var J=e("../internal/operators/min");r.min=J.min;var Q=e("../internal/operators/multicast");r.multicast=Q.multicast;var ee=e("../internal/operators/observeOn");r.observeOn=ee.observeOn;var te=e("../internal/operators/onErrorResumeNext");r.onErrorResumeNext=te.onErrorResumeNext;var re=e("../internal/operators/pairwise");r.pairwise=re.pairwise;var ne=e("../internal/operators/partition");r.partition=ne.partition;var ie=e("../internal/operators/pluck");r.pluck=ie.pluck;var oe=e("../internal/operators/publish");r.publish=oe.publish;var ae=e("../internal/operators/publishBehavior");r.publishBehavior=ae.publishBehavior;var se=e("../internal/operators/publishLast");r.publishLast=se.publishLast;var ue=e("../internal/operators/publishReplay");r.publishReplay=ue.publishReplay;var ce=e("../internal/operators/race");r.race=ce.race;var he=e("../internal/operators/reduce");r.reduce=he.reduce;var le=e("../internal/operators/repeat");r.repeat=le.repeat;var pe=e("../internal/operators/repeatWhen");r.repeatWhen=pe.repeatWhen;var fe=e("../internal/operators/retry");r.retry=fe.retry;var de=e("../internal/operators/retryWhen");r.retryWhen=de.retryWhen;var ve=e("../internal/operators/refCount");r.refCount=ve.refCount;var me=e("../internal/operators/sample");r.sample=me.sample;var ge=e("../internal/operators/sampleTime");r.sampleTime=ge.sampleTime;var ye=e("../internal/operators/scan");r.scan=ye.scan;var _e=e("../internal/operators/sequenceEqual");r.sequenceEqual=_e.sequenceEqual;var be=e("../internal/operators/share");r.share=be.share;var xe=e("../internal/operators/shareReplay");r.shareReplay=xe.shareReplay;var we=e("../internal/operators/single");r.single=we.single;var Se=e("../internal/operators/skip");r.skip=Se.skip;var Me=e("../internal/operators/skipLast");r.skipLast=Me.skipLast;var Ee=e("../internal/operators/skipUntil");r.skipUntil=Ee.skipUntil;var Ce=e("../internal/operators/skipWhile");r.skipWhile=Ce.skipWhile;var Te=e("../internal/operators/startWith");r.startWith=Te.startWith;var Oe=e("../internal/operators/subscribeOn");r.subscribeOn=Oe.subscribeOn;var Pe=e("../internal/operators/switchAll");r.switchAll=Pe.switchAll;var Ae=e("../internal/operators/switchMap");r.switchMap=Ae.switchMap;var je=e("../internal/operators/switchMapTo");r.switchMapTo=je.switchMapTo;var Re=e("../internal/operators/take");r.take=Re.take;var Le=e("../internal/operators/takeLast");r.takeLast=Le.takeLast;var Ie=e("../internal/operators/takeUntil");r.takeUntil=Ie.takeUntil;var Ne=e("../internal/operators/takeWhile");r.takeWhile=Ne.takeWhile;var De=e("../internal/operators/tap");r.tap=De.tap;var ke=e("../internal/operators/throttle");r.throttle=ke.throttle;var Be=e("../internal/operators/throttleTime");r.throttleTime=Be.throttleTime;var Fe=e("../internal/operators/throwIfEmpty");r.throwIfEmpty=Fe.throwIfEmpty;var $e=e("../internal/operators/timeInterval");r.timeInterval=$e.timeInterval;var ze=e("../internal/operators/timeout");r.timeout=ze.timeout;var Ue=e("../internal/operators/timeoutWith");r.timeoutWith=Ue.timeoutWith;var Ge=e("../internal/operators/timestamp");r.timestamp=Ge.timestamp;var Ve=e("../internal/operators/toArray");r.toArray=Ve.toArray;var He=e("../internal/operators/window");r.window=He.window;var qe=e("../internal/operators/windowCount");r.windowCount=qe.windowCount;var We=e("../internal/operators/windowTime");r.windowTime=We.windowTime;var Xe=e("../internal/operators/windowToggle");r.windowToggle=Xe.windowToggle;var Ye=e("../internal/operators/windowWhen");r.windowWhen=Ye.windowWhen;var Ke=e("../internal/operators/withLatestFrom");r.withLatestFrom=Ke.withLatestFrom;var Ze=e("../internal/operators/zip");r.zip=Ze.zip;var Je=e("../internal/operators/zipAll");r.zipAll=Je.zipAll},{"../internal/operators/audit":73,"../internal/operators/auditTime":74,"../internal/operators/buffer":75,"../internal/operators/bufferCount":76,"../internal/operators/bufferTime":77,"../internal/operators/bufferToggle":78,"../internal/operators/bufferWhen":79,"../internal/operators/catchError":80,"../internal/operators/combineAll":81,"../internal/operators/combineLatest":82,"../internal/operators/concat":83,"../internal/operators/concatAll":84,"../internal/operators/concatMap":85,"../internal/operators/concatMapTo":86,"../internal/operators/count":87,"../internal/operators/debounce":88,"../internal/operators/debounceTime":89,"../internal/operators/defaultIfEmpty":90,"../internal/operators/delay":91,"../internal/operators/delayWhen":92,"../internal/operators/dematerialize":93,"../internal/operators/distinct":94,"../internal/operators/distinctUntilChanged":95,"../internal/operators/distinctUntilKeyChanged":96,"../internal/operators/elementAt":97,"../internal/operators/endWith":98,"../internal/operators/every":99,"../internal/operators/exhaust":100,"../internal/operators/exhaustMap":101,"../internal/operators/expand":102,"../internal/operators/filter":103,"../internal/operators/finalize":104,"../internal/operators/find":105,"../internal/operators/findIndex":106,"../internal/operators/first":107,"../internal/operators/groupBy":108,"../internal/operators/ignoreElements":109,"../internal/operators/isEmpty":110,"../internal/operators/last":111,"../internal/operators/map":112,"../internal/operators/mapTo":113,"../internal/operators/materialize":114,"../internal/operators/max":115,"../internal/operators/merge":116,"../internal/operators/mergeAll":117,"../internal/operators/mergeMap":118,"../internal/operators/mergeMapTo":119,"../internal/operators/mergeScan":120,"../internal/operators/min":121,"../internal/operators/multicast":122,"../internal/operators/observeOn":123,"../internal/operators/onErrorResumeNext":124,"../internal/operators/pairwise":125,"../internal/operators/partition":126,"../internal/operators/pluck":127,"../internal/operators/publish":128,"../internal/operators/publishBehavior":129,"../internal/operators/publishLast":130,"../internal/operators/publishReplay":131,"../internal/operators/race":132,"../internal/operators/reduce":133,"../internal/operators/refCount":134,"../internal/operators/repeat":135,"../internal/operators/repeatWhen":136,"../internal/operators/retry":137,"../internal/operators/retryWhen":138,"../internal/operators/sample":139,"../internal/operators/sampleTime":140,"../internal/operators/scan":141,"../internal/operators/sequenceEqual":142,"../internal/operators/share":143,"../internal/operators/shareReplay":144,"../internal/operators/single":145,"../internal/operators/skip":146,"../internal/operators/skipLast":147,"../internal/operators/skipUntil":148,"../internal/operators/skipWhile":149,"../internal/operators/startWith":150,"../internal/operators/subscribeOn":151,"../internal/operators/switchAll":152,"../internal/operators/switchMap":153,"../internal/operators/switchMapTo":154,"../internal/operators/take":155,"../internal/operators/takeLast":156,"../internal/operators/takeUntil":157,"../internal/operators/takeWhile":158,"../internal/operators/tap":159,"../internal/operators/throttle":160,"../internal/operators/throttleTime":161,"../internal/operators/throwIfEmpty":162,"../internal/operators/timeInterval":163,"../internal/operators/timeout":164,"../internal/operators/timeoutWith":165,"../internal/operators/timestamp":166,"../internal/operators/toArray":167,"../internal/operators/window":168,"../internal/operators/windowCount":169,"../internal/operators/windowTime":170,"../internal/operators/windowToggle":171,"../internal/operators/windowWhen":172,"../internal/operators/withLatestFrom":173,"../internal/operators/zip":174,"../internal/operators/zipAll":175}],226:[function(e,r,n){(function(e,t){"object"===typeof n&&"undefined"!==typeof r?t(n):"function"===typeof o&&o.amd?o(["exports"],t):t(e.THREE={})})(this,function(e){function t(){}function H(e,t){this.x=e||0;this.y=t||0}function xe(){this.elements=[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 s(e,t,r,n){this._x=e||0;this._y=t||0;this._z=r||0;this._w=void 0!==n?n:1}function we(e,t,r){this.x=e||0;this.y=t||0;this.z=r||0}function m(){this.elements=[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 p(e,t,r,n,i,o,a,s,u,c){Object.defineProperty(this,"id",{value:ro++});this.uuid=eo.generateUUID();this.name="";this.image=void 0!==e?e:p.DEFAULT_IMAGE;this.mipmaps=[];this.mapping=void 0!==t?t:p.DEFAULT_MAPPING;this.wrapS=void 0!==r?r:1001;this.wrapT=void 0!==n?n:1001;this.magFilter=void 0!==i?i:1006;this.minFilter=void 0!==o?o:1008;this.anisotropy=void 0!==u?u:1;this.format=void 0!==a?a:1023;this.type=void 0!==s?s:1009;this.offset=new H(0,0);this.repeat=new H(1,1);this.center=new H(0,0);this.rotation=0;this.matrixAutoUpdate=!0;this.matrix=new m;this.generateMipmaps=!0;this.premultiplyAlpha=!1;this.flipY=!0;this.unpackAlignment=4;this.encoding=void 0!==c?c:3e3;this.version=0;this.onUpdate=null}function Se(e,t,r,n){this.x=e||0;this.y=t||0;this.z=r||0;this.w=void 0!==n?n:1}function T(e,t,r){this.width=e;this.height=t;this.scissor=new Se(0,0,e,t);this.scissorTest=!1;this.viewport=new Se(0,0,e,t);r=r||{};void 0===r.minFilter&&(r.minFilter=1006);this.texture=new p(void 0,void 0,r.wrapS,r.wrapT,r.magFilter,r.minFilter,r.format,r.type,r.anisotropy,r.encoding);this.texture.generateMipmaps=void 0!==r.generateMipmaps?r.generateMipmaps:!0;this.depthBuffer=void 0!==r.depthBuffer?r.depthBuffer:!0;this.stencilBuffer=void 0!==r.stencilBuffer?r.stencilBuffer:!0;this.depthTexture=void 0!==r.depthTexture?r.depthTexture:null}function n(e,t,r){T.call(this,e,t,r);this.activeMipMapLevel=this.activeCubeFace=0}function Me(e,t,r,n,i,o,a,s,u,c,h,l){p.call(this,null,o,a,s,u,c,n,i,h,l);this.image={data:e,width:t,height:r};this.magFilter=void 0!==u?u:1003;this.minFilter=void 0!==c?c:1003;this.flipY=this.generateMipmaps=!1;this.unpackAlignment=1}function r(e,t){this.min=void 0!==e?e:new we(Infinity,Infinity,Infinity);this.max=void 0!==t?t:new we(-Infinity,-Infinity,-Infinity)}function c(e,t){this.center=void 0!==e?e:new we;this.radius=void 0!==t?t:0}function g(e,t){this.normal=void 0!==e?e:new we(1,0,0);this.constant=void 0!==t?t:0}function Ee(e,t,r,n,i,o){this.planes=[void 0!==e?e:new g,void 0!==t?t:new g,void 0!==r?r:new g,void 0!==n?n:new g,void 0!==i?i:new g,void 0!==o?o:new g]}function w(e,t,r){return void 0===t&&void 0===r?this.set(e):this.setRGB(e,t,r)}function Ce(){function r(e,t){!1!==i&&(o(e,t),n.requestAnimationFrame(r))}var n=null,i=!1,o=null;return{start:function(){!0!==i&&null!==o&&(n.requestAnimationFrame(r),i=!0)},stop:function(){i=!1},setAnimationLoop:function(e){o=e},setContext:function(e){n=e}}}function Te(a){function s(e,t){var r=e.array,n=e.dynamic?a.DYNAMIC_DRAW:a.STATIC_DRAW,i=a.createBuffer();a.bindBuffer(t,i);a.bufferData(t,r,n);e.onUploadCallback();t=a.FLOAT;r instanceof Float32Array?t=a.FLOAT:r instanceof Float64Array?console.warn("THREE.WebGLAttributes: Unsupported data buffer format: Float64Array."):r instanceof Uint16Array?t=a.UNSIGNED_SHORT:r instanceof Int16Array?t=a.SHORT:r instanceof Uint32Array?t=a.UNSIGNED_INT:r instanceof Int32Array?t=a.INT:r instanceof Int8Array?t=a.BYTE:r instanceof Uint8Array&&(t=a.UNSIGNED_BYTE);return{buffer:i,type:t,bytesPerElement:r.BYTES_PER_ELEMENT,version:e.version}}var u=new WeakMap;return{get:function(e){e.isInterleavedBufferAttribute&&(e=e.data);return u.get(e)},remove:function(e){e.isInterleavedBufferAttribute&&(e=e.data);var t=u.get(e);t&&(a.deleteBuffer(t.buffer),u.delete(e))},update:function(e,t){e.isInterleavedBufferAttribute&&(e=e.data);var r=u.get(e);if(void 0===r)u.set(e,s(e,t));else if(r.version<e.version){var n=e,i=n.array,o=n.updateRange;a.bindBuffer(t,r.buffer);!1===n.dynamic?a.bufferData(t,i,a.STATIC_DRAW):-1===o.count?a.bufferSubData(t,0,i):0===o.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."):(a.bufferSubData(t,o.offset*i.BYTES_PER_ELEMENT,i.subarray(o.offset,o.offset+o.count)),o.count=-1);r.version=e.version}}}}function i(e,t,r,n){this._x=e||0;this._y=t||0;this._z=r||0;this._order=n||i.DefaultOrder}function o(){this.mask=1}function h(){Object.defineProperty(this,"id",{value:uo++});this.uuid=eo.generateUUID();this.name="";this.type="Object3D";this.parent=null;this.children=[];this.up=h.DefaultUp.clone();var e=new we,t=new i,r=new s,n=new we(1,1,1);t.onChange(function(){r.setFromEuler(t,!1)});r.onChange(function(){t.setFromQuaternion(r,void 0,!1)});Object.defineProperties(this,{position:{enumerable:!0,value:e},rotation:{enumerable:!0,value:t},quaternion:{enumerable:!0,value:r},scale:{enumerable:!0,value:n},modelViewMatrix:{value:new xe},normalMatrix:{value:new m}});this.matrix=new xe;this.matrixWorld=new xe;this.matrixAutoUpdate=h.DefaultMatrixAutoUpdate;this.matrixWorldNeedsUpdate=!1;this.layers=new o;this.visible=!0;this.receiveShadow=this.castShadow=!1;this.frustumCulled=!0;this.renderOrder=0;this.userData={}}function u(){h.call(this);this.type="Camera";this.matrixWorldInverse=new xe;this.projectionMatrix=new xe}function f(e,t,r,n,i,o){u.call(this);this.type="OrthographicCamera";this.zoom=1;this.view=null;this.left=e;this.right=t;this.top=r;this.bottom=n;this.near=void 0!==i?i:.1;this.far=void 0!==o?o:2e3;this.updateProjectionMatrix()}function k(e,t,r,n,i,o){this.a=e;this.b=t;this.c=r;this.normal=n&&n.isVector3?n:new we;this.vertexNormals=Array.isArray(n)?n:[];this.color=i&&i.isColor?i:new w;this.vertexColors=Array.isArray(i)?i:[];this.materialIndex=void 0!==o?o:0}function S(){Object.defineProperty(this,"id",{value:co+=2});this.uuid=eo.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 y(e,t,r){if(Array.isArray(e))throw new TypeError("THREE.BufferAttribute: array should be a Typed Array.");this.name="";this.array=e;this.itemSize=t;this.count=void 0!==e?e.length/t:0;this.normalized=!0===r;this.dynamic=!1;this.updateRange={offset:0,count:-1};this.version=0}function a(e,t,r){y.call(this,new Int8Array(e),t,r)}function l(e,t,r){y.call(this,new Uint8Array(e),t,r)}function d(e,t,r){y.call(this,new Uint8ClampedArray(e),t,r)}function v(e,t,r){y.call(this,new Int16Array(e),t,r)}function _(e,t,r){y.call(this,new Uint16Array(e),t,r)}function b(e,t,r){y.call(this,new Int32Array(e),t,r)}function x(e,t,r){y.call(this,new Uint32Array(e),t,r)}function P(e,t,r){y.call(this,new Float32Array(e),t,r)}function M(e,t,r){y.call(this,new Float64Array(e),t,r)}function E(){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 C(e){if(0===e.length)return-Infinity;for(var t=e[0],r=1,n=e.length;r<n;++r)e[r]>t&&(t=e[r]);return t}function A(){Object.defineProperty(this,"id",{value:ho+=2});this.uuid=eo.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};this.userData={}}function O(e,t,r,n,i,o){S.call(this);this.type="BoxGeometry";this.parameters={width:e,height:t,depth:r,widthSegments:n,heightSegments:i,depthSegments:o};this.fromBufferGeometry(new j(e,t,r,n,i,o));this.mergeVertices()}function j(e,t,r,n,i,o){function a(e,t,r,n,i,o,a,s,u,c,h){var l=o/u,p=a/c,f=o/2,d=a/2,v=s/2;a=u+1;var m=c+1,g=o=0,y,_,b=new we;for(_=0;_<m;_++){var x=_*p-d;for(y=0;y<a;y++)b[e]=(y*l-f)*n,b[t]=x*i,b[r]=v,M.push(b.x,b.y,b.z),b[e]=0,b[t]=0,b[r]=0<s?1:-1,E.push(b.x,b.y,b.z),C.push(y/u),C.push(1-_/c),o+=1}for(_=0;_<c;_++)for(y=0;y<u;y++)e=T+y+a*(_+1),t=T+(y+1)+a*(_+1),r=T+(y+1)+a*_,S.push(T+y+a*_,e,r),S.push(e,t,r),g+=6;w.addGroup(O,g,h);O+=g;T+=o}A.call(this);this.type="BoxBufferGeometry";this.parameters={width:e,height:t,depth:r,widthSegments:n,heightSegments:i,depthSegments:o};var w=this;e=e||1;t=t||1;r=r||1;n=Math.floor(n)||1;i=Math.floor(i)||1;o=Math.floor(o)||1;var S=[],M=[],E=[],C=[],T=0,O=0;a("z","y","x",-1,-1,r,t,e,o,i,0);a("z","y","x",1,-1,r,t,-e,o,i,1);a("x","z","y",1,1,e,r,t,n,o,2);a("x","z","y",1,-1,e,r,-t,n,o,3);a("x","y","z",1,-1,e,t,r,n,i,4);a("x","y","z",-1,-1,e,t,-r,n,i,5);this.setIndex(S);this.addAttribute("position",new P(M,3));this.addAttribute("normal",new P(E,3));this.addAttribute("uv",new P(C,2))}function R(e,t,r,n){S.call(this);this.type="PlaneGeometry";this.parameters={width:e,height:t,widthSegments:r,heightSegments:n};this.fromBufferGeometry(new L(e,t,r,n));this.mergeVertices()}function L(e,t,r,n){A.call(this);this.type="PlaneBufferGeometry";this.parameters={width:e,height:t,widthSegments:r,heightSegments:n};e=e||1;t=t||1;var i=e/2,o=t/2;r=Math.floor(r)||1;n=Math.floor(n)||1;var a=r+1,s=n+1,u=e/r,c=t/n,h=[],l=[],p=[],f=[];for(e=0;e<s;e++){var d=e*c-o;for(t=0;t<a;t++)l.push(t*u-i,-d,0),p.push(0,0,1),f.push(t/r),f.push(1-e/n)}for(e=0;e<n;e++)for(t=0;t<r;t++)i=t+a*(e+1),o=t+1+a*(e+1),s=t+1+a*e,h.push(t+a*e,i,s),h.push(i,o,s);this.setIndex(h);this.addAttribute("position",new P(l,3));this.addAttribute("normal",new P(p,3));this.addAttribute("uv",new P(f,2))}function I(){Object.defineProperty(this,"id",{value:lo++});this.uuid=eo.generateUUID();this.name="";this.type="Material";this.lights=this.fog=!0;this.blending=1;this.side=0;this.flatShading=!1;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.shadowSide=null;this.colorWrite=!0;this.precision=null;this.polygonOffset=!1;this.polygonOffsetUnits=this.polygonOffsetFactor=0;this.dithering=!1;this.alphaTest=0;this.premultipliedAlpha=!1;this.overdraw=0;this.visible=!0;this.userData={};this.needsUpdate=!0}function N(e){I.call(this);this.type="MeshBasicMaterial";this.color=new w(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(e)}function D(e){I.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;this.uniformsNeedUpdate=!1;void 0!==e&&(void 0!==e.attributes&&console.error("THREE.ShaderMaterial: attributes should now be defined in THREE.BufferGeometry instead."),this.setValues(e))}function B(e,t){this.origin=void 0!==e?e:new we;this.direction=void 0!==t?t:new we}function F(e,t,r){this.a=void 0!==e?e:new we;this.b=void 0!==t?t:new we;this.c=void 0!==r?r:new we}function $(e,t){h.call(this);this.type="Mesh";this.geometry=void 0!==e?e:new A;this.material=void 0!==t?t:new N({color:16777215*Math.random()});this.drawMode=0;this.updateMorphTargets()}function Oe(i,r,o,n){function a(e,t){r.buffers.color.setClear(e.r,e.g,e.b,t,n)}var s=new w(0),u=0,c,h,l;return{getClearColor:function(){return s},setClearColor:function(e,t){s.set(e);u=void 0!==t?t:1;a(s,u)},getClearAlpha:function(){return u},setClearAlpha:function(e){u=e;a(s,u)},render:function(e,t,r,n){t=t.background;null===t?a(s,u):t&&t.isColor&&(a(t,1),n=!0);(i.autoClear||n)&&i.clear(i.autoClearColor,i.autoClearDepth,i.autoClearStencil);t&&t.isCubeTexture?(void 0===l&&(l=new $(new j(1,1,1),new D({uniforms:so.cube.uniforms,vertexShader:so.cube.vertexShader,fragmentShader:so.cube.fragmentShader,side:1,depthTest:!0,depthWrite:!1,fog:!1})),l.geometry.removeAttribute("normal"),l.geometry.removeAttribute("uv"),l.onBeforeRender=function(e,t,r){this.matrixWorld.copyPosition(r.matrixWorld)},o.update(l)),l.material.uniforms.tCube.value=t,e.push(l,l.geometry,l.material,0,null)):t&&t.isTexture&&(void 0===c&&(c=new f(-1,1,1,-1,0,1),h=new $(new L(2,2),new N({depthTest:!1,depthWrite:!1,fog:!1})),o.update(h)),h.material.map=t,i.renderBufferDirect(c,null,h.geometry,h.material,h,null))}}}function Pe(i,o,a,s){var u;this.setMode=function(e){u=e};this.render=function(e,t){i.drawArrays(u,e,t);a.update(t,u)};this.renderInstances=function(e,t,r){if(s.isWebGL2)var n=i;else if(n=o.get("ANGLE_instanced_arrays"),null===n){console.error("THREE.WebGLBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.");return}n[s.isWebGL2?"drawArraysInstanced":"drawArraysInstancedANGLE"](u,t,r,e.maxInstancedCount);a.update(r,u,e.maxInstancedCount)}}function Ae(t,r,e){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="undefined"!==typeof WebGL2RenderingContext&&t instanceof WebGL2RenderingContext,a=void 0!==e.precision?e.precision:"highp",s=n(a);s!==a&&(console.warn("THREE.WebGLRenderer:",a,"not supported, using",s,"instead."),a=s);e=!0===e.logarithmicDepthBuffer;s=t.getParameter(t.MAX_TEXTURE_IMAGE_UNITS);var u=t.getParameter(t.MAX_VERTEX_TEXTURE_IMAGE_UNITS),c=t.getParameter(t.MAX_TEXTURE_SIZE),h=t.getParameter(t.MAX_CUBE_MAP_TEXTURE_SIZE),l=t.getParameter(t.MAX_VERTEX_ATTRIBS),p=t.getParameter(t.MAX_VERTEX_UNIFORM_VECTORS),f=t.getParameter(t.MAX_VARYING_VECTORS),d=t.getParameter(t.MAX_FRAGMENT_UNIFORM_VECTORS),v=0<u,m=o||!!r.get("OES_texture_float");return{isWebGL2:o,getMaxAnisotropy:function(){if(void 0!==i)return i;var e=r.get("EXT_texture_filter_anisotropic");return i=null!==e?t.getParameter(e.MAX_TEXTURE_MAX_ANISOTROPY_EXT):0},getMaxPrecision:n,precision:a,logarithmicDepthBuffer:e,maxTextures:s,maxVertexTextures:u,maxTextureSize:c,maxCubemapSize:h,maxAttributes:l,maxVertexUniforms:p,maxVaryings:f,maxFragmentUniforms:d,vertexTextures:v,floatFragmentTextures:m,floatVertexTextures:v&&m}}function je(){function u(){v.value!==h&&(v.value=h,v.needsUpdate=0<l);a.numPlanes=l;a.numIntersection=0}function c(e,t,r,n){var i=null!==e?e.length:0,o=null;if(0!==i){o=v.value;if(!0!==n||null===o){n=r+4*i;t=t.matrixWorldInverse;d.getNormalMatrix(t);if(null===o||o.length<n)o=new Float32Array(n);for(n=0;n!==i;++n,r+=4)s.copy(e[n]).applyMatrix4(t,d),s.normal.toArray(o,r),o[r+3]=s.constant}v.value=o;v.needsUpdate=!0}a.numPlanes=i;return o}var a=this,h=null,l=0,p=!1,f=!1,s=new g,d=new m,v={value:null,needsUpdate:!1};this.uniform=v;this.numIntersection=this.numPlanes=0;this.init=function(e,t,r){var n=0!==e.length||t||0!==l||p;p=t;h=c(e,r,0);l=e.length;return n};this.beginShadows=function(){f=!0;c(null)};this.endShadows=function(){f=!1;u()};this.setState=function(e,t,r,n,i,o){if(!p||null===e||0===e.length||f&&!r)f?c(null):u();else{r=f?0:l;var a=4*r,s=i.clippingState||null;v.value=s;s=c(e,n,a,o);for(e=0;e!==a;++e)s[e]=h[e];i.clippingState=s;this.numIntersection=t?this.numPlanes:0;this.numPlanes+=r}}}function Re(r){var n={};return{get:function(e){if(void 0!==n[e])return n[e];switch(e){case"WEBGL_depth_texture":var t=r.getExtension("WEBGL_depth_texture")||r.getExtension("MOZ_WEBGL_depth_texture")||r.getExtension("WEBKIT_WEBGL_depth_texture");break;case"EXT_texture_filter_anisotropic":t=r.getExtension("EXT_texture_filter_anisotropic")||r.getExtension("MOZ_EXT_texture_filter_anisotropic")||r.getExtension("WEBKIT_EXT_texture_filter_anisotropic");break;case"WEBGL_compressed_texture_s3tc":t=r.getExtension("WEBGL_compressed_texture_s3tc")||r.getExtension("MOZ_WEBGL_compressed_texture_s3tc")||r.getExtension("WEBKIT_WEBGL_compressed_texture_s3tc");break;case"WEBGL_compressed_texture_pvrtc":t=r.getExtension("WEBGL_compressed_texture_pvrtc")||r.getExtension("WEBKIT_WEBGL_compressed_texture_pvrtc");break;default:t=r.getExtension(e)}null===t&&console.warn("THREE.WebGLRenderer: "+e+" extension not supported.");return n[e]=t}}}function Le(u,c,n){function i(e){var t=e.target;e=o[t.id];null!==e.index&&c.remove(e.index);for(var r in e.attributes)c.remove(e.attributes[r]);t.removeEventListener("dispose",i);delete o[t.id];if(r=h[e.id])c.remove(r),delete h[e.id];n.memory.geometries--}var o={},h={};return{get:function(e,t){var r=o[t.id];if(r)return r;t.addEventListener("dispose",i);t.isBufferGeometry?r=t:t.isGeometry&&(void 0===t._bufferGeometry&&(t._bufferGeometry=(new A).setFromObject(e)),r=t._bufferGeometry);o[t.id]=r;n.memory.geometries++;return r},update:function(e){var t=e.index,r=e.attributes;null!==t&&c.update(t,u.ELEMENT_ARRAY_BUFFER);for(var n in r)c.update(r[n],u.ARRAY_BUFFER);e=e.morphAttributes;for(n in e){t=e[n];r=0;for(var i=t.length;r<i;r++)c.update(t[r],u.ARRAY_BUFFER)}},getWireframeAttribute:function(e){var t=h[e.id];if(t)return t;t=[];var r=e.index,n=e.attributes;if(null!==r){r=r.array;n=0;for(var i=r.length;n<i;n+=3){var o=r[n+0],a=r[n+1],s=r[n+2];t.push(o,a,a,s,s,o)}}else for(r=n.position.array,n=0,i=r.length/3-1;n<i;n+=3)o=n+0,a=n+1,s=n+2,t.push(o,a,a,s,s,o);t=new(65535<C(t)?x:_)(t,1);c.update(t,u.ELEMENT_ARRAY_BUFFER);return h[e.id]=t}}}function Ie(i,o,a,s){var u,c,h;this.setMode=function(e){u=e};this.setIndex=function(e){c=e.type;h=e.bytesPerElement};this.render=function(e,t){i.drawElements(u,t,c,e*h);a.update(t,u)};this.renderInstances=function(e,t,r){if(s.isWebGL2)var n=i;else if(n=o.get("ANGLE_instanced_arrays"),null===n){console.error("THREE.WebGLIndexedBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.");return}n[s.isWebGL2?"drawElementsInstanced":"drawElementsInstancedANGLE"](u,r,c,t*h,e.maxInstancedCount);a.update(r,u,e.maxInstancedCount)}}function Ne(n){var i={frame:0,calls:0,triangles:0,points:0,lines:0};return{memory:{geometries:0,textures:0},render:i,programs:null,autoReset:!0,reset:function(){i.frame++;i.calls=0;i.triangles=0;i.points=0;i.lines=0},update:function(e,t,r){r=r||1;i.calls++;switch(t){case n.TRIANGLES:i.triangles+=e/3*r;break;case n.TRIANGLE_STRIP:case n.TRIANGLE_FAN:i.triangles+=r*(e-2);break;case n.LINES:i.lines+=e/2*r;break;case n.LINE_STRIP:i.lines+=r*(e-1);break;case n.LINE_LOOP:i.lines+=r*e;break;case n.POINTS:i.points+=r*e;break;default:console.error("THREE.WebGLInfo: Unknown draw mode:",t)}}}}function z(e,t){return Math.abs(t[1])-Math.abs(e[1])}function De(c){var h={},l=new Float32Array(8);return{update:function(e,t,r,n){var i=e.morphTargetInfluences,o=i.length;e=h[t.id];if(void 0===e){e=[];for(var a=0;a<o;a++)e[a]=[a,0];h[t.id]=e}var s=r.morphTargets&&t.morphAttributes.position;r=r.morphNormals&&t.morphAttributes.normal;for(a=0;a<o;a++){var u=e[a];0!==u[1]&&(s&&t.removeAttribute("morphTarget"+a),r&&t.removeAttribute("morphNormal"+a))}for(a=0;a<o;a++)u=e[a],u[0]=a,u[1]=i[a];e.sort(z);for(a=0;8>a;a++){if(u=e[a])if(i=u[0],o=u[1]){s&&t.addAttribute("morphTarget"+a,s[i]);r&&t.addAttribute("morphNormal"+a,r[i]);l[a]=o;continue}l[a]=0}n.getUniforms().setValue(c,"morphTargetInfluences",l)}}}function ke(i,o){var a={};return{update:function(e){var t=o.render.frame,r=e.geometry,n=i.get(e,r);a[n.id]!==t&&(r.isGeometry&&n.updateFromObject(e),i.update(n),a[n.id]=t);return n},dispose:function(){a={}}}}function U(e,t,r,n,i,o,a,s,u,c){e=void 0!==e?e:[];p.call(this,e,void 0!==t?t:301,r,n,i,o,a,s,u,c);this.flipY=!1}function G(e,t,r){var n=e[0];if(0>=n||0<n)return e;var i=t*r,o=vo[i];void 0===o&&(o=new Float32Array(i),vo[i]=o);if(0!==t)for(n.toArray(o,0),n=1,i=0;n!==t;++n)i+=r,e[n].toArray(o,i);return o}function V(e,t){if(e.length!==t.length)return!1;for(var r=0,n=e.length;r<n;r++)if(e[r]!==t[r])return!1;return!0}function q(e,t){for(var r=0,n=t.length;r<n;r++)e[r]=t[r]}function W(e,t){var r=mo[t];void 0===r&&(r=new Int32Array(t),mo[t]=r);for(var n=0;n!==t;++n)r[n]=e.allocTextureUnit();return r}function X(e,t){var r=this.cache;r[0]!==t&&(e.uniform1f(this.addr,t),r[0]=t)}function Y(e,t){var r=this.cache;r[0]!==t&&(e.uniform1i(this.addr,t),r[0]=t)}function K(e,t){var r=this.cache;if(void 0!==t.x){if(r[0]!==t.x||r[1]!==t.y)e.uniform2f(this.addr,t.x,t.y),r[0]=t.x,r[1]=t.y}else V(r,t)||(e.uniform2fv(this.addr,t),q(r,t))}function Z(e,t){var r=this.cache;if(void 0!==t.x){if(r[0]!==t.x||r[1]!==t.y||r[2]!==t.z)e.uniform3f(this.addr,t.x,t.y,t.z),r[0]=t.x,r[1]=t.y,r[2]=t.z}else if(void 0!==t.r){if(r[0]!==t.r||r[1]!==t.g||r[2]!==t.b)e.uniform3f(this.addr,t.r,t.g,t.b),r[0]=t.r,r[1]=t.g,r[2]=t.b}else V(r,t)||(e.uniform3fv(this.addr,t),q(r,t))}function J(e,t){var r=this.cache;if(void 0!==t.x){if(r[0]!==t.x||r[1]!==t.y||r[2]!==t.z||r[3]!==t.w)e.uniform4f(this.addr,t.x,t.y,t.z,t.w),r[0]=t.x,r[1]=t.y,r[2]=t.z,r[3]=t.w}else V(r,t)||(e.uniform4fv(this.addr,t),q(r,t))}function Q(e,t){var r=this.cache,n=t.elements;void 0===n?V(r,t)||(e.uniformMatrix2fv(this.addr,!1,t),q(r,t)):V(r,n)||(_o.set(n),e.uniformMatrix2fv(this.addr,!1,_o),q(r,n))}function ee(e,t){var r=this.cache,n=t.elements;void 0===n?V(r,t)||(e.uniformMatrix3fv(this.addr,!1,t),q(r,t)):V(r,n)||(yo.set(n),e.uniformMatrix3fv(this.addr,!1,yo),q(r,n))}function te(e,t){var r=this.cache,n=t.elements;void 0===n?V(r,t)||(e.uniformMatrix4fv(this.addr,!1,t),q(r,t)):V(r,n)||(go.set(n),e.uniformMatrix4fv(this.addr,!1,go),q(r,n))}function re(e,t,r){var n=this.cache,i=r.allocTextureUnit();n[0]!==i&&(e.uniform1i(this.addr,i),n[0]=i);r.setTexture2D(t||po,i)}function ne(e,t,r){var n=this.cache,i=r.allocTextureUnit();n[0]!==i&&(e.uniform1i(this.addr,i),n[0]=i);r.setTextureCube(t||fo,i)}function ie(e,t){var r=this.cache;V(r,t)||(e.uniform2iv(this.addr,t),q(r,t))}function oe(e,t){var r=this.cache;V(r,t)||(e.uniform3iv(this.addr,t),q(r,t))}function ae(e,t){var r=this.cache;V(r,t)||(e.uniform4iv(this.addr,t),q(r,t))}function se(e){switch(e){case 5126:return X;case 35664:return K;case 35665:return Z;case 35666:return J;case 35674:return Q;case 35675:return ee;case 35676:return te;case 35678:case 36198:return re;case 35680:return ne;case 5124:case 35670:return Y;case 35667:case 35671:return ie;case 35668:case 35672:return oe;case 35669:case 35673:return ae}}function ue(e,t){var r=this.cache;V(r,t)||(e.uniform1fv(this.addr,t),q(r,t))}function ce(e,t){var r=this.cache;V(r,t)||(e.uniform1iv(this.addr,t),q(r,t))}function he(e,t){var r=this.cache;t=G(t,this.size,2);V(r,t)||(e.uniform2fv(this.addr,t),this.updateCache(t))}function le(e,t){var r=this.cache;t=G(t,this.size,3);V(r,t)||(e.uniform3fv(this.addr,t),this.updateCache(t))}function pe(e,t){var r=this.cache;t=G(t,this.size,4);V(r,t)||(e.uniform4fv(this.addr,t),this.updateCache(t))}function fe(e,t){var r=this.cache;t=G(t,this.size,4);V(r,t)||(e.uniformMatrix2fv(this.addr,!1,t),this.updateCache(t))}function de(e,t){var r=this.cache;t=G(t,this.size,9);V(r,t)||(e.uniformMatrix3fv(this.addr,!1,t),this.updateCache(t))}function ve(e,t){var r=this.cache;t=G(t,this.size,16);V(r,t)||(e.uniformMatrix4fv(this.addr,!1,t),this.updateCache(t))}function me(e,t,r){var n=this.cache,i=t.length,o=W(r,i);!1===V(n,o)&&(e.uniform1iv(this.addr,o),q(n,o));for(e=0;e!==i;++e)r.setTexture2D(t[e]||po,o[e])}function ge(e,t,r){var n=this.cache,i=t.length,o=W(r,i);!1===V(n,o)&&(e.uniform1iv(this.addr,o),q(n,o));for(e=0;e!==i;++e)r.setTextureCube(t[e]||fo,o[e])}function ye(e){switch(e){case 5126:return ue;case 35664:return he;case 35665:return le;case 35666:return pe;case 35674:return fe;case 35675:return de;case 35676:return ve;case 35678:return me;case 35680:return ge;case 5124:case 35670:return ce;case 35667:case 35671:return ie;case 35668:case 35672:return oe;case 35669:case 35673:return ae}}function _e(e,t,r){this.id=e;this.addr=r;this.cache=[];this.setValue=se(t.type)}function be(e,t,r){this.id=e;this.addr=r;this.cache=[];this.size=t.size;this.setValue=ye(t.type)}function Be(e){this.id=e;this.seq=[];this.map={}}function Fe(e,t,r){this.seq=[];this.map={};this.renderer=r;r=e.getProgramParameter(t,e.ACTIVE_UNIFORMS);for(var n=0;n<r;++n){var i=e.getActiveUniform(t,n),o=e.getUniformLocation(t,i.name),a=this,s=i.name,u=s.length;for(bo.lastIndex=0;;){var c=bo.exec(s),h=bo.lastIndex,l=c[1],p=c[3];"]"===c[2]&&(l|=0);if(void 0===p||"["===p&&h+2===u){s=a;i=void 0===p?new _e(l,i,o):new be(l,i,o);s.seq.push(i);s.map[i.id]=i;break}else p=a.map[l],void 0===p&&(p=new Be(l),l=a,a=p,l.seq.push(a),l.map[a.id]=a),a=p}}}function $e(e){e=e.split("\n");for(var t=0;t<e.length;t++)e[t]=t+1+": "+e[t];return e.join("\n")}function ze(e,t,r){var n=e.createShader(t);e.shaderSource(n,r);e.compileShader(n);!1===e.getShaderParameter(n,e.COMPILE_STATUS)&&console.error("THREE.WebGLShader: Shader couldn't compile.");""!==e.getShaderInfoLog(n)&&console.warn("THREE.WebGLShader: gl.getShaderInfoLog()",t===e.VERTEX_SHADER?"vertex":"fragment",e.getShaderInfoLog(n),$e(r));return n}function Ue(e){switch(e){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: "+e)}}function Ge(e,t){t=Ue(t);return"vec4 "+e+"( vec4 value ) { return "+t[0]+"ToLinear"+t[1]+"; }"}function Ve(e,t){t=Ue(t);return"vec4 "+e+"( vec4 value ) { return LinearTo"+t[0]+t[1]+"; }"}function He(e,t){switch(t){case 1:t="Linear";break;case 2:t="Reinhard";break;case 3:t="Uncharted2";break;case 4:t="OptimizedCineon";break;default:throw Error("unsupported toneMapping: "+t)}return"vec3 "+e+"( vec3 color ) { return "+t+"ToneMapping( color ); }"}function qe(e,t,r){e=e||{};return[e.derivatives||t.envMapCubeUV||t.bumpMap||t.normalMap&&!t.objectSpaceNormalMap||t.flatShading?"#extension GL_OES_standard_derivatives : enable":"",(e.fragDepth||t.logarithmicDepthBuffer)&&r.get("EXT_frag_depth")?"#extension GL_EXT_frag_depth : enable":"",e.drawBuffers&&r.get("WEBGL_draw_buffers")?"#extension GL_EXT_draw_buffers : require":"",(e.shaderTextureLOD||t.envMap)&&r.get("EXT_shader_texture_lod")?"#extension GL_EXT_shader_texture_lod : enable":""].filter(Xe).join("\n")}function We(e){var t=[],r;for(r in e){var n=e[r];!1!==n&&t.push("#define "+r+" "+n)}return t.join("\n")}function Xe(e){return""!==e}function Ye(e,t){return e.replace(/NUM_DIR_LIGHTS/g,t.numDirLights).replace(/NUM_SPOT_LIGHTS/g,t.numSpotLights).replace(/NUM_RECT_AREA_LIGHTS/g,t.numRectAreaLights).replace(/NUM_POINT_LIGHTS/g,t.numPointLights).replace(/NUM_HEMI_LIGHTS/g,t.numHemiLights)}function Ke(e,t){return e.replace(/NUM_CLIPPING_PLANES/g,t.numClippingPlanes).replace(/UNION_CLIPPING_PLANES/g,t.numClippingPlanes-t.numClipIntersection)}function Ze(e){return e.replace(/^[ \t]*#include +<([\w\d./]+)>/gm,function(e,t){e=no[t];if(void 0===e)throw Error("Can not resolve #include <"+t+">");return Ze(e)})}function Je(e){return e.replace(/#pragma unroll_loop[\s]+?for \( int i = (\d+); i < (\d+); i \+\+ \) \{([\s\S]+?)(?=\})\}/g,function(e,t,r,n){e="";for(t=parseInt(t);t<parseInt(r);t++)e+=n.replace(/\[ i \]/g,"[ "+t+" ]");return e})}function Qe(e,t,r,n,i,o,a){var s=e.context,u=n.defines,c=i.vertexShader,h=i.fragmentShader,l="SHADOWMAP_TYPE_BASIC";1===o.shadowMapType?l="SHADOWMAP_TYPE_PCF":2===o.shadowMapType&&(l="SHADOWMAP_TYPE_PCF_SOFT");var p="ENVMAP_TYPE_CUBE",f="ENVMAP_MODE_REFLECTION",d="ENVMAP_BLENDING_MULTIPLY";if(o.envMap){switch(n.envMap.mapping){case 301:case 302:p="ENVMAP_TYPE_CUBE";break;case 306:case 307:p="ENVMAP_TYPE_CUBE_UV";break;case 303:case 304:p="ENVMAP_TYPE_EQUIREC";break;case 305:p="ENVMAP_TYPE_SPHERE"}switch(n.envMap.mapping){case 302:case 304:f="ENVMAP_MODE_REFRACTION"}switch(n.combine){case 0:d="ENVMAP_BLENDING_MULTIPLY";break;case 1:d="ENVMAP_BLENDING_MIX";break;case 2:d="ENVMAP_BLENDING_ADD"}}var v=0<e.gammaFactor?e.gammaFactor:1,m=a.isWebGL2?"":qe(n.extensions,o,t),g=We(u),y=s.createProgram();n.isRawShaderMaterial?(u=[g].filter(Xe).join("\n"),0<u.length&&(u+="\n"),t=[m,g].filter(Xe).join("\n"),0<t.length&&(t+="\n")):(u=["precision "+o.precision+" float;","precision "+o.precision+" int;","#define SHADER_NAME "+i.name,g,o.supportsVertexTextures?"#define VERTEX_TEXTURES":"","#define GAMMA_FACTOR "+v,"#define MAX_BONES "+o.maxBones,o.useFog&&o.fog?"#define USE_FOG":"",o.useFog&&o.fogExp?"#define FOG_EXP2":"",o.map?"#define USE_MAP":"",o.envMap?"#define USE_ENVMAP":"",o.envMap?"#define "+f:"",o.lightMap?"#define USE_LIGHTMAP":"",o.aoMap?"#define USE_AOMAP":"",o.emissiveMap?"#define USE_EMISSIVEMAP":"",o.bumpMap?"#define USE_BUMPMAP":"",o.normalMap?"#define USE_NORMALMAP":"",o.normalMap&&o.objectSpaceNormalMap?"#define OBJECTSPACE_NORMALMAP":"",o.displacementMap&&o.supportsVertexTextures?"#define USE_DISPLACEMENTMAP":"",o.specularMap?"#define USE_SPECULARMAP":"",o.roughnessMap?"#define USE_ROUGHNESSMAP":"",o.metalnessMap?"#define USE_METALNESSMAP":"",o.alphaMap?"#define USE_ALPHAMAP":"",o.vertexColors?"#define USE_COLOR":"",o.flatShading?"#define FLAT_SHADED":"",o.skinning?"#define USE_SKINNING":"",o.useVertexTexture?"#define BONE_TEXTURE":"",o.morphTargets?"#define USE_MORPHTARGETS":"",o.morphNormals&&!1===o.flatShading?"#define USE_MORPHNORMALS":"",o.doubleSided?"#define DOUBLE_SIDED":"",o.flipSided?"#define FLIP_SIDED":"",o.shadowMapEnabled?"#define USE_SHADOWMAP":"",o.shadowMapEnabled?"#define "+l:"",o.sizeAttenuation?"#define USE_SIZEATTENUATION":"",o.logarithmicDepthBuffer?"#define USE_LOGDEPTHBUF":"",o.logarithmicDepthBuffer&&(a.isWebGL2||t.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(Xe).join("\n"),t=[m,"precision "+o.precision+" float;","precision "+o.precision+" int;","#define SHADER_NAME "+i.name,g,o.alphaTest?"#define ALPHATEST "+o.alphaTest+(o.alphaTest%1?"":".0"):"","#define GAMMA_FACTOR "+v,o.useFog&&o.fog?"#define USE_FOG":"",o.useFog&&o.fogExp?"#define FOG_EXP2":"",o.map?"#define USE_MAP":"",o.envMap?"#define USE_ENVMAP":"",o.envMap?"#define "+p:"",o.envMap?"#define "+f:"",o.envMap?"#define "+d:"",o.lightMap?"#define USE_LIGHTMAP":"",o.aoMap?"#define USE_AOMAP":"",o.emissiveMap?"#define USE_EMISSIVEMAP":"",o.bumpMap?"#define USE_BUMPMAP":"",o.normalMap?"#define USE_NORMALMAP":"",o.normalMap&&o.objectSpaceNormalMap?"#define OBJECTSPACE_NORMALMAP":"",o.specularMap?"#define USE_SPECULARMAP":"",o.roughnessMap?"#define USE_ROUGHNESSMAP":"",o.metalnessMap?"#define USE_METALNESSMAP":"",o.alphaMap?"#define USE_ALPHAMAP":"",o.vertexColors?"#define USE_COLOR":"",o.gradientMap?"#define USE_GRADIENTMAP":"",o.flatShading?"#define FLAT_SHADED":"",o.doubleSided?"#define DOUBLE_SIDED":"",o.flipSided?"#define FLIP_SIDED":"",o.shadowMapEnabled?"#define USE_SHADOWMAP":"",o.shadowMapEnabled?"#define "+l:"",o.premultipliedAlpha?"#define PREMULTIPLIED_ALPHA":"",o.physicallyCorrectLights?"#define PHYSICALLY_CORRECT_LIGHTS":"",o.logarithmicDepthBuffer?"#define USE_LOGDEPTHBUF":"",o.logarithmicDepthBuffer&&(a.isWebGL2||t.get("EXT_frag_depth"))?"#define USE_LOGDEPTHBUF_EXT":"",o.envMap&&(a.isWebGL2||t.get("EXT_shader_texture_lod"))?"#define TEXTURE_LOD_EXT":"","uniform mat4 viewMatrix;","uniform vec3 cameraPosition;",0!==o.toneMapping?"#define TONE_MAPPING":"",0!==o.toneMapping?no.tonemapping_pars_fragment:"",0!==o.toneMapping?He("toneMapping",o.toneMapping):"",o.dithering?"#define DITHERING":"",o.outputEncoding||o.mapEncoding||o.envMapEncoding||o.emissiveMapEncoding?no.encodings_pars_fragment:"",o.mapEncoding?Ge("mapTexelToLinear",o.mapEncoding):"",o.envMapEncoding?Ge("envMapTexelToLinear",o.envMapEncoding):"",o.emissiveMapEncoding?Ge("emissiveMapTexelToLinear",o.emissiveMapEncoding):"",o.outputEncoding?Ve("linearToOutputTexel",o.outputEncoding):"",o.depthPacking?"#define DEPTH_PACKING "+n.depthPacking:"","\n"].filter(Xe).join("\n"));c=Ze(c);c=Ye(c,o);c=Ke(c,o);h=Ze(h);h=Ye(h,o);h=Ke(h,o);c=Je(c);h=Je(h);a.isWebGL2&&!n.isRawShaderMaterial&&(a=!1,l=/^\s*#version\s+300\s+es\s*\n/,n.isShaderMaterial&&null!==c.match(l)&&null!==h.match(l)&&(a=!0,c=c.replace(l,""),h=h.replace(l,"")),u="#version 300 es\n\n#define attribute in\n#define varying out\n#define texture2D texture\n"+u,t=["#version 300 es\n\n#define varying in",a?"":"out highp vec4 pc_fragColor;",a?"":"#define gl_FragColor pc_fragColor","#define gl_FragDepthEXT gl_FragDepth\n#define texture2D texture\n#define textureCube texture\n#define texture2DProj textureProj\n#define texture2DLodEXT textureLod\n#define texture2DProjLodEXT textureProjLod\n#define textureCubeLodEXT textureLod\n#define texture2DGradEXT textureGrad\n#define texture2DProjGradEXT textureProjGrad\n#define textureCubeGradEXT textureGrad"].join("\n")+"\n"+t);h=t+h;c=ze(s,s.VERTEX_SHADER,u+c);h=ze(s,s.FRAGMENT_SHADER,h);s.attachShader(y,c);s.attachShader(y,h);void 0!==n.index0AttributeName?s.bindAttribLocation(y,0,n.index0AttributeName):!0===o.morphTargets&&s.bindAttribLocation(y,0,"position");s.linkProgram(y);o=s.getProgramInfoLog(y).trim();a=s.getShaderInfoLog(c).trim();l=s.getShaderInfoLog(h).trim();f=p=!0;if(!1===s.getProgramParameter(y,s.LINK_STATUS))p=!1,console.error("THREE.WebGLProgram: shader error: ",s.getError(),"gl.VALIDATE_STATUS",s.getProgramParameter(y,s.VALIDATE_STATUS),"gl.getProgramInfoLog",o,a,l);else if(""!==o)console.warn("THREE.WebGLProgram: gl.getProgramInfoLog()",o);else if(""===a||""===l)f=!1;f&&(this.diagnostics={runnable:p,material:n,programLog:o,vertexShader:{log:a,prefix:u},fragmentShader:{log:l,prefix:t}});s.deleteShader(c);s.deleteShader(h);var _;this.getUniforms=function(){void 0===_&&(_=new Fe(s,y,e));return _};var b;this.getAttributes=function(){if(void 0===b){for(var e={},t=s.getProgramParameter(y,s.ACTIVE_ATTRIBUTES),r=0;r<t;r++){var n=s.getActiveAttrib(y,r).name;e[n]=s.getAttribLocation(y,n)}b=e}return b};this.destroy=function(){s.deleteProgram(y);this.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.name=i.name;this.id=xo++;this.code=r;this.usedTimes=1;this.program=y;this.vertexShader=c;this.fragmentShader=h;return this}function et(l,u,p){function f(e,t){if(e)e.isTexture?r=e.encoding:e.isWebGLRenderTarget&&(console.warn("THREE.WebGLPrograms.getTextureEncodingFromMap: don't use render targets as textures. Use their .texture property instead."),r=e.texture.encoding);else var r=3e3;3e3===r&&t&&(r=3007);return r}var c=[],d={MeshDepthMaterial:"depth",MeshDistanceMaterial:"distanceRGBA",MeshNormalMaterial:"normal",MeshBasicMaterial:"basic",MeshLambertMaterial:"lambert",MeshPhongMaterial:"phong",MeshToonMaterial:"phong",MeshStandardMaterial:"physical",MeshPhysicalMaterial:"physical",LineBasicMaterial:"basic",LineDashedMaterial:"dashed",PointsMaterial:"points",ShadowMaterial:"shadow",SpriteMaterial:"sprite"},i="precision supportsVertexTextures map mapEncoding envMap envMapMode envMapEncoding lightMap aoMap emissiveMap emissiveMapEncoding bumpMap normalMap objectSpaceNormalMap 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 dithering".split(" ");this.getParameters=function(e,t,r,n,i,o,a){var s=d[e.type];if(a.isSkinnedMesh){var u=a.skeleton.bones;if(p.floatVertexTextures)u=1024;else{var c=Math.min(Math.floor((p.maxVertexUniforms-20)/4),u.length);c<u.length?(console.warn("THREE.WebGLRenderer: Skeleton has "+u.length+" bones. This GPU supports "+c+"."),u=0):u=c}}else u=0;c=p.precision;null!==e.precision&&(c=p.getMaxPrecision(e.precision),c!==e.precision&&console.warn("THREE.WebGLProgram.getParameters:",e.precision,"not supported, using",c,"instead."));var h=l.getRenderTarget();return{shaderID:s,precision:c,supportsVertexTextures:p.vertexTextures,outputEncoding:f(h?h.texture:null,l.gammaOutput),map:!!e.map,mapEncoding:f(e.map,l.gammaInput),envMap:!!e.envMap,envMapMode:e.envMap&&e.envMap.mapping,envMapEncoding:f(e.envMap,l.gammaInput),envMapCubeUV:!!e.envMap&&(306===e.envMap.mapping||307===e.envMap.mapping),lightMap:!!e.lightMap,aoMap:!!e.aoMap,emissiveMap:!!e.emissiveMap,emissiveMapEncoding:f(e.emissiveMap,l.gammaInput),bumpMap:!!e.bumpMap,normalMap:!!e.normalMap,objectSpaceNormalMap:1===e.normalMapType,displacementMap:!!e.displacementMap,roughnessMap:!!e.roughnessMap,metalnessMap:!!e.metalnessMap,specularMap:!!e.specularMap,alphaMap:!!e.alphaMap,gradientMap:!!e.gradientMap,combine:e.combine,vertexColors:e.vertexColors,fog:!!n,useFog:e.fog,fogExp:n&&n.isFogExp2,flatShading:e.flatShading,sizeAttenuation:e.sizeAttenuation,logarithmicDepthBuffer:p.logarithmicDepthBuffer,skinning:e.skinning&&0<u,maxBones:u,useVertexTexture:p.floatVertexTextures,morphTargets:e.morphTargets,morphNormals:e.morphNormals,maxMorphTargets:l.maxMorphTargets,maxMorphNormals:l.maxMorphNormals,numDirLights:t.directional.length,numPointLights:t.point.length,numSpotLights:t.spot.length,numRectAreaLights:t.rectArea.length,numHemiLights:t.hemi.length,numClippingPlanes:i,numClipIntersection:o,dithering:e.dithering,shadowMapEnabled:l.shadowMap.enabled&&a.receiveShadow&&0<r.length,shadowMapType:l.shadowMap.type,toneMapping:l.toneMapping,physicallyCorrectLights:l.physicallyCorrectLights,premultipliedAlpha:e.premultipliedAlpha,alphaTest:e.alphaTest,doubleSided:2===e.side,flipSided:1===e.side,depthPacking:void 0!==e.depthPacking?e.depthPacking:!1}};this.getProgramCode=function(e,t){var r=[];t.shaderID?r.push(t.shaderID):(r.push(e.fragmentShader),r.push(e.vertexShader));if(void 0!==e.defines)for(var n in e.defines)r.push(n),r.push(e.defines[n]);for(n=0;n<i.length;n++)r.push(t[i[n]]);r.push(e.onBeforeCompile.toString());r.push(l.gammaOutput);return r.join()};this.acquireProgram=function(e,t,r,n){for(var i,o=0,a=c.length;o<a;o++){var s=c[o];if(s.code===n){i=s;++i.usedTimes;break}}void 0===i&&(i=new Qe(l,u,n,e,t,r,p),c.push(i));return i};this.releaseProgram=function(e){if(0===--e.usedTimes){var t=c.indexOf(e);c[t]=c[c.length-1];c.pop();e.destroy()}};this.programs=c}function tt(){var n=new WeakMap;return{get:function(e){var t=n.get(e);void 0===t&&(t={},n.set(e,t));return t},remove:function(e){n.delete(e)},update:function(e,t,r){n.get(e)[t]=r},dispose:function(){n=new WeakMap}}}function rt(e,t){return e.renderOrder!==t.renderOrder?e.renderOrder-t.renderOrder:e.program&&t.program&&e.program!==t.program?e.program.id-t.program.id:e.material.id!==t.material.id?e.material.id-t.material.id:e.z!==t.z?e.z-t.z:e.id-t.id}function nt(e,t){return e.renderOrder!==t.renderOrder?e.renderOrder-t.renderOrder:e.z!==t.z?t.z-e.z:e.id-t.id}function it(){var a=[],s=0,u=[],c=[];return{opaque:u,transparent:c,init:function(){s=0;u.length=0;c.length=0},push:function(e,t,r,n,i){var o=a[s];void 0===o?(o={id:e.id,object:e,geometry:t,material:r,program:r.program,renderOrder:e.renderOrder,z:n,group:i},a[s]=o):(o.id=e.id,o.object=e,o.geometry=t,o.material=r,o.program=r.program,o.renderOrder=e.renderOrder,o.z=n,o.group=i);(!0===r.transparent?c:u).push(o);s++},sort:function(){1<u.length&&u.sort(rt);1<c.length&&c.sort(nt)}}}function ot(){var r={};return{get:function(e,t){e=e.id+","+t.id;t=r[e];void 0===t&&(t=new it,r[e]=t);return t},dispose:function(){r={}}}}function at(){var r={};return{get:function(e){if(void 0!==r[e.id])return r[e.id];switch(e.type){case"DirectionalLight":var t={direction:new we,color:new w,shadow:!1,shadowBias:0,shadowRadius:1,shadowMapSize:new H};break;case"SpotLight":t={position:new we,direction:new we,color:new w,distance:0,coneCos:0,penumbraCos:0,decay:0,shadow:!1,shadowBias:0,shadowRadius:1,shadowMapSize:new H};break;case"PointLight":t={position:new we,color:new w,distance:0,decay:0,shadow:!1,shadowBias:0,shadowRadius:1,shadowMapSize:new H,shadowCameraNear:1,shadowCameraFar:1e3};break;case"HemisphereLight":t={direction:new we,skyColor:new w,groundColor:new w};break;case"RectAreaLight":t={color:new w,position:new we,halfWidth:new we,halfHeight:new we}}return r[e.id]=t}}}function st(){var _=new at,b={id:wo++,hash:{stateID:-1,directionalLength:-1,pointLength:-1,spotLength:-1,rectAreaLength:-1,hemiLength:-1,shadowsLength:-1},ambient:[0,0,0],directional:[],directionalShadowMap:[],directionalShadowMatrix:[],spot:[],spotShadowMap:[],spotShadowMatrix:[],rectArea:[],point:[],pointShadowMap:[],pointShadowMatrix:[],hemi:[]},x=new we,w=new xe,S=new xe;return{setup:function(e,t,r){var n=0,i=0,o=0,a=0,s=0,u=0,c=0,h=0;r=r.matrixWorldInverse;for(var l=0,p=e.length;l<p;l++){var f=e[l],d=f.color,v=f.intensity,m=f.distance,g=f.shadow&&f.shadow.map?f.shadow.map.texture:null;if(f.isAmbientLight)n+=d.r*v,i+=d.g*v,o+=d.b*v;else if(f.isDirectionalLight){var y=_.get(f);y.color.copy(f.color).multiplyScalar(f.intensity);y.direction.setFromMatrixPosition(f.matrixWorld);x.setFromMatrixPosition(f.target.matrixWorld);y.direction.sub(x);y.direction.transformDirection(r);if(y.shadow=f.castShadow)d=f.shadow,y.shadowBias=d.bias,y.shadowRadius=d.radius,y.shadowMapSize=d.mapSize;b.directionalShadowMap[a]=g;b.directionalShadowMatrix[a]=f.shadow.matrix;b.directional[a]=y;a++}else if(f.isSpotLight){y=_.get(f);y.position.setFromMatrixPosition(f.matrixWorld);y.position.applyMatrix4(r);y.color.copy(d).multiplyScalar(v);y.distance=m;y.direction.setFromMatrixPosition(f.matrixWorld);x.setFromMatrixPosition(f.target.matrixWorld);y.direction.sub(x);y.direction.transformDirection(r);y.coneCos=Math.cos(f.angle);y.penumbraCos=Math.cos(f.angle*(1-f.penumbra));y.decay=0===f.distance?0:f.decay;if(y.shadow=f.castShadow)d=f.shadow,y.shadowBias=d.bias,y.shadowRadius=d.radius,y.shadowMapSize=d.mapSize;b.spotShadowMap[u]=g;b.spotShadowMatrix[u]=f.shadow.matrix;b.spot[u]=y;u++}else if(f.isRectAreaLight)y=_.get(f),y.color.copy(d).multiplyScalar(v),y.position.setFromMatrixPosition(f.matrixWorld),y.position.applyMatrix4(r),S.identity(),w.copy(f.matrixWorld),w.premultiply(r),S.extractRotation(w),y.halfWidth.set(.5*f.width,0,0),y.halfHeight.set(0,.5*f.height,0),y.halfWidth.applyMatrix4(S),y.halfHeight.applyMatrix4(S),b.rectArea[c]=y,c++;else if(f.isPointLight){y=_.get(f);y.position.setFromMatrixPosition(f.matrixWorld);y.position.applyMatrix4(r);y.color.copy(f.color).multiplyScalar(f.intensity);y.distance=f.distance;y.decay=0===f.distance?0:f.decay;if(y.shadow=f.castShadow)d=f.shadow,y.shadowBias=d.bias,y.shadowRadius=d.radius,y.shadowMapSize=d.mapSize,y.shadowCameraNear=d.camera.near,y.shadowCameraFar=d.camera.far;b.pointShadowMap[s]=g;b.pointShadowMatrix[s]=f.shadow.matrix;b.point[s]=y;s++}else f.isHemisphereLight&&(y=_.get(f),y.direction.setFromMatrixPosition(f.matrixWorld),y.direction.transformDirection(r),y.direction.normalize(),y.skyColor.copy(f.color).multiplyScalar(v),y.groundColor.copy(f.groundColor).multiplyScalar(v),b.hemi[h]=y,h++)}b.ambient[0]=n;b.ambient[1]=i;b.ambient[2]=o;b.directional.length=a;b.spot.length=u;b.rectArea.length=c;b.point.length=s;b.hemi.length=h;b.hash.stateID=b.id;b.hash.directionalLength=a;b.hash.pointLength=s;b.hash.spotLength=u;b.hash.rectAreaLength=c;b.hash.hemiLength=h;b.hash.shadowsLength=t.length},state:b}}function ut(){var t=new st,r=[],n=[];return{init:function(){r.length=0;n.length=0},state:{lightsArray:r,shadowsArray:n,lights:t},setupLights:function(e){t.setup(r,n,e)},pushLight:function(e){r.push(e)},pushShadow:function(e){n.push(e)}}}function ct(){var n={};return{get:function(e,t){if(void 0===n[e.id]){var r=new ut;n[e.id]={};n[e.id][t.id]=r}else void 0===n[e.id][t.id]?(r=new ut,n[e.id][t.id]=r):r=n[e.id][t.id];return r},dispose:function(){n={}}}}function ht(e){I.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(e)}function lt(e){I.call(this);this.type="MeshDistanceMaterial";this.referencePosition=new we;this.nearDistance=1;this.farDistance=1e3;this.morphTargets=this.skinning=!1;this.displacementMap=this.alphaMap=this.map=null;this.displacementScale=1;this.displacementBias=0;this.lights=this.fog=!1;this.setValues(e)}function pt(p,l,e){function f(e,t,r,n,i,o){var a=e.geometry;var s=c;var u=e.customDepthMaterial;r&&(s=h,u=e.customDistanceMaterial);u?s=u:(u=!1,t.morphTargets&&(a&&a.isBufferGeometry?u=a.morphAttributes&&a.morphAttributes.position&&0<a.morphAttributes.position.length:a&&a.isGeometry&&(u=a.morphTargets&&0<a.morphTargets.length)),e.isSkinnedMesh&&!1===t.skinning&&console.warn("THREE.WebGLShadowMap: THREE.SkinnedMesh with material.skinning set to false:",e),e=e.isSkinnedMesh&&t.skinning,a=0,u&&(a|=1),e&&(a|=2),s=s[a]);p.localClippingEnabled&&!0===t.clipShadows&&0!==t.clippingPlanes.length&&(a=s.uuid,u=t.uuid,e=x[a],void 0===e&&(e={},x[a]=e),a=e[u],void 0===a&&(a=s.clone(),e[u]=a),s=a);s.visible=t.visible;s.wireframe=t.wireframe;s.side=null!=t.shadowSide?t.shadowSide:w[t.side];s.clipShadows=t.clipShadows;s.clippingPlanes=t.clippingPlanes;s.clipIntersection=t.clipIntersection;s.wireframeLinewidth=t.wireframeLinewidth;s.linewidth=t.linewidth;r&&s.isMeshDistanceMaterial&&(s.referencePosition.copy(n),s.nearDistance=i,s.farDistance=o);return s}function d(e,t,r,n){if(!1!==e.visible){if(e.layers.test(t.layers)&&(e.isMesh||e.isLine||e.isPoints)&&e.castShadow&&(!e.frustumCulled||v.intersectsObject(e))){e.modelViewMatrix.multiplyMatrices(r.matrixWorldInverse,e.matrixWorld);var i=l.update(e),o=e.material;if(Array.isArray(o))for(var a=i.groups,s=0,u=a.length;s<u;s++){var c=a[s],h=o[c.materialIndex];h&&h.visible&&(h=f(e,h,n,b,r.near,r.far),p.renderBufferDirect(r,null,i,h,e,c))}else o.visible&&(h=f(e,o,n,b,r.near,r.far),p.renderBufferDirect(r,null,i,h,e,null))}e=e.children;i=0;for(o=e.length;i<o;i++)d(e[i],t,r,n)}}var v=new Ee,m=new xe,g=new H,y=new H(e,e),_=new we,b=new we,c=Array(4),h=Array(4),x={},w={0:1,1:0,2:2},S=[new we(1,0,0),new we(-1,0,0),new we(0,0,1),new we(0,0,-1),new we(0,1,0),new we(0,-1,0)],M=[new we(0,1,0),new we(0,1,0),new we(0,1,0),new we(0,1,0),new we(0,0,1),new we(0,0,-1)],E=[new Se,new Se,new Se,new Se,new Se,new Se];for(e=0;4!==e;++e){var t=0!==(e&1),r=0!==(e&2),n=new ht({depthPacking:3201,morphTargets:t,skinning:r});c[e]=n;t=new lt({morphTargets:t,skinning:r});h[e]=t}var C=this;this.enabled=!1;this.autoUpdate=!0;this.needsUpdate=!1;this.type=1;this.render=function(e,t,r){if(!1!==C.enabled&&(!1!==C.autoUpdate||!1!==C.needsUpdate)&&0!==e.length){var n=p.state;n.disable(p.context.BLEND);n.buffers.color.setClear(1,1,1,1);n.buffers.depth.setTest(!0);n.setScissorTest(!1);for(var i,o=0,a=e.length;o<a;o++){var s=e[o];i=s.shadow;var u=s&&s.isPointLight;if(void 0===i)console.warn("THREE.WebGLShadowMap:",s,"has no shadow.");else{var c=i.camera;g.copy(i.mapSize);g.min(y);if(u){var h=g.x,l=g.y;E[0].set(2*h,l,h,l);E[1].set(0,l,h,l);E[2].set(3*h,l,h,l);E[3].set(h,l,h,l);E[4].set(3*h,0,h,l);E[5].set(h,0,h,l);g.x*=4;g.y*=2}null===i.map&&(i.map=new T(g.x,g.y,{minFilter:1003,magFilter:1003,format:1023}),i.map.texture.name=s.name+".shadowMap",c.updateProjectionMatrix());i.isSpotLightShadow&&i.update(s);h=i.map;l=i.matrix;b.setFromMatrixPosition(s.matrixWorld);c.position.copy(b);u?(i=6,l.makeTranslation(-b.x,-b.y,-b.z)):(i=1,_.setFromMatrixPosition(s.target.matrixWorld),c.lookAt(_),c.updateMatrixWorld(),l.set(.5,0,0,.5,0,.5,0,.5,0,0,.5,.5,0,0,0,1),l.multiply(c.projectionMatrix),l.multiply(c.matrixWorldInverse));p.setRenderTarget(h);p.clear();for(s=0;s<i;s++)u&&(_.copy(c.position),_.add(S[s]),c.up.copy(M[s]),c.lookAt(_),c.updateMatrixWorld(),n.viewport(E[s])),m.multiplyMatrices(c.projectionMatrix,c.matrixWorldInverse),v.setFromMatrix(m),d(t,r,c,u)}}C.needsUpdate=!1}}}function ft(h,r,u,n){function e(e,t,r){var n=new Uint8Array(4),i=h.createTexture();h.bindTexture(e,i);h.texParameteri(e,h.TEXTURE_MIN_FILTER,h.NEAREST);h.texParameteri(e,h.TEXTURE_MAG_FILTER,h.NEAREST);for(e=0;e<r;e++)h.texImage2D(t+e,0,h.RGBA,1,1,0,h.RGBA,h.UNSIGNED_BYTE,n);return i}function t(e,t){g[e]=1;0===y[e]&&(h.enableVertexAttribArray(e),y[e]=1);_[e]!==t&&((n.isWebGL2?h:r.get("ANGLE_instanced_arrays"))[n.isWebGL2?"vertexAttribDivisor":"vertexAttribDivisorANGLE"](e,t),_[e]=t)}function l(e){!0!==b[e]&&(h.enable(e),b[e]=!0)}function p(e){!1!==b[e]&&(h.disable(e),b[e]=!1)}function i(e,t,r,n,i,o,a,s){0!==e?l(h.BLEND):p(h.BLEND);if(5!==e){if(e!==S||s!==A)switch(e){case 2:s?(h.blendEquationSeparate(h.FUNC_ADD,h.FUNC_ADD),h.blendFuncSeparate(h.ONE,h.ONE,h.ONE,h.ONE)):(h.blendEquation(h.FUNC_ADD),h.blendFunc(h.SRC_ALPHA,h.ONE));break;case 3:s?(h.blendEquationSeparate(h.FUNC_ADD,h.FUNC_ADD),h.blendFuncSeparate(h.ZERO,h.ZERO,h.ONE_MINUS_SRC_COLOR,h.ONE_MINUS_SRC_ALPHA)):(h.blendEquation(h.FUNC_ADD),h.blendFunc(h.ZERO,h.ONE_MINUS_SRC_COLOR));break;case 4:s?(h.blendEquationSeparate(h.FUNC_ADD,h.FUNC_ADD),h.blendFuncSeparate(h.ZERO,h.SRC_COLOR,h.ZERO,h.SRC_ALPHA)):(h.blendEquation(h.FUNC_ADD),h.blendFunc(h.ZERO,h.SRC_COLOR));break;default:s?(h.blendEquationSeparate(h.FUNC_ADD,h.FUNC_ADD),h.blendFuncSeparate(h.ONE,h.ONE_MINUS_SRC_ALPHA,h.ONE,h.ONE_MINUS_SRC_ALPHA)):(h.blendEquationSeparate(h.FUNC_ADD,h.FUNC_ADD),h.blendFuncSeparate(h.SRC_ALPHA,h.ONE_MINUS_SRC_ALPHA,h.ONE,h.ONE_MINUS_SRC_ALPHA))}P=O=T=C=E=M=null}else{i=i||t;o=o||r;a=a||n;if(t!==M||i!==T)h.blendEquationSeparate(u.convert(t),u.convert(i)),M=t,T=i;if(r!==E||n!==C||o!==O||a!==P)h.blendFuncSeparate(u.convert(r),u.convert(n),u.convert(o),u.convert(a)),E=r,C=n,O=o,P=a}S=e;A=s}function o(e){j!==e&&(e?h.frontFace(h.CW):h.frontFace(h.CCW),j=e)}function a(e){0!==e?(l(h.CULL_FACE),e!==R&&(1===e?h.cullFace(h.BACK):2===e?h.cullFace(h.FRONT):h.cullFace(h.FRONT_AND_BACK))):p(h.CULL_FACE);R=e}function s(e,t,r){if(e){if(l(h.POLYGON_OFFSET_FILL),I!==t||N!==r)h.polygonOffset(t,r),I=t,N=r}else p(h.POLYGON_OFFSET_FILL)}function c(e){void 0===e&&(e=h.TEXTURE0+D-1);B!==e&&(h.activeTexture(e),B=e)}var f=new function(){var t=!1,o=new Se,r=null,a=new Se(0,0,0,0);return{setMask:function(e){r===e||t||(h.colorMask(e,e,e,e),r=e)},setLocked:function(e){t=e},setClear:function(e,t,r,n,i){!0===i&&(e*=n,t*=n,r*=n);o.set(e,t,r,n);!1===a.equals(o)&&(h.clearColor(e,t,r,n),a.copy(o))},reset:function(){t=!1;r=null;a.set(-1,0,0,0)}}},d=new function(){var t=!1,r=null,n=null,i=null;return{setTest:function(e){e?l(h.DEPTH_TEST):p(h.DEPTH_TEST)},setMask:function(e){r===e||t||(h.depthMask(e),r=e)},setFunc:function(e){if(n!==e){if(e)switch(e){case 0:h.depthFunc(h.NEVER);break;case 1:h.depthFunc(h.ALWAYS);break;case 2:h.depthFunc(h.LESS);break;case 3:h.depthFunc(h.LEQUAL);break;case 4:h.depthFunc(h.EQUAL);break;case 5:h.depthFunc(h.GEQUAL);break;case 6:h.depthFunc(h.GREATER);break;case 7:h.depthFunc(h.NOTEQUAL);break;default:h.depthFunc(h.LEQUAL)}else h.depthFunc(h.LEQUAL);n=e}},setLocked:function(e){t=e},setClear:function(e){i!==e&&(h.clearDepth(e),i=e)},reset:function(){t=!1;i=n=r=null}}},v=new function(){var t=!1,r=null,n=null,i=null,o=null,a=null,s=null,u=null,c=null;return{setTest:function(e){e?l(h.STENCIL_TEST):p(h.STENCIL_TEST)},setMask:function(e){r===e||t||(h.stencilMask(e),r=e)},setFunc:function(e,t,r){if(n!==e||i!==t||o!==r)h.stencilFunc(e,t,r),n=e,i=t,o=r},setOp:function(e,t,r){if(a!==e||s!==t||u!==r)h.stencilOp(e,t,r),a=e,s=t,u=r},setLocked:function(e){t=e},setClear:function(e){c!==e&&(h.clearStencil(e),c=e)},reset:function(){t=!1;c=u=s=a=o=i=n=r=null}}},m=h.getParameter(h.MAX_VERTEX_ATTRIBS),g=new Uint8Array(m),y=new Uint8Array(m),_=new Uint8Array(m),b={},x=null,w=null,S=null,M=null,E=null,C=null,T=null,O=null,P=null,A=!1,j=null,R=null,L=null,I=null,N=null,D=h.getParameter(h.MAX_COMBINED_TEXTURE_IMAGE_UNITS),k=!1;m=0;m=h.getParameter(h.VERSION);-1!==m.indexOf("WebGL")?(m=parseFloat(/^WebGL ([0-9])/.exec(m)[1]),k=1<=m):-1!==m.indexOf("OpenGL ES")&&(m=parseFloat(/^OpenGL ES ([0-9])/.exec(m)[1]),k=2<=m);var B=null,F={},$=new Se,z=new Se,U={};U[h.TEXTURE_2D]=e(h.TEXTURE_2D,h.TEXTURE_2D,1);U[h.TEXTURE_CUBE_MAP]=e(h.TEXTURE_CUBE_MAP,h.TEXTURE_CUBE_MAP_POSITIVE_X,6);f.setClear(0,0,0,1);d.setClear(1);v.setClear(0);l(h.DEPTH_TEST);d.setFunc(3);o(!1);a(1);l(h.CULL_FACE);l(h.BLEND);i(1);return{buffers:{color:f,depth:d,stencil:v},initAttributes:function(){for(var e=0,t=g.length;e<t;e++)g[e]=0},enableAttribute:function(e){t(e,0)},enableAttributeAndDivisor:t,disableUnusedAttributes:function(){for(var e=0,t=y.length;e!==t;++e)y[e]!==g[e]&&(h.disableVertexAttribArray(e),y[e]=0)},enable:l,disable:p,getCompressedTextureFormats:function(){if(null===x&&(x=[],r.get("WEBGL_compressed_texture_pvrtc")||r.get("WEBGL_compressed_texture_s3tc")||r.get("WEBGL_compressed_texture_etc1")||r.get("WEBGL_compressed_texture_astc")))for(var e=h.getParameter(h.COMPRESSED_TEXTURE_FORMATS),t=0;t<e.length;t++)x.push(e[t]);return x},useProgram:function(e){return w!==e?(h.useProgram(e),w=e,!0):!1},setBlending:i,setMaterial:function(e,t){2===e.side?p(h.CULL_FACE):l(h.CULL_FACE);var r=1===e.side;t&&(r=!r);o(r);1===e.blending&&!1===e.transparent?i(0):i(e.blending,e.blendEquation,e.blendSrc,e.blendDst,e.blendEquationAlpha,e.blendSrcAlpha,e.blendDstAlpha,e.premultipliedAlpha);d.setFunc(e.depthFunc);d.setTest(e.depthTest);d.setMask(e.depthWrite);f.setMask(e.colorWrite);s(e.polygonOffset,e.polygonOffsetFactor,e.polygonOffsetUnits)},setFlipSided:o,setCullFace:a,setLineWidth:function(e){e!==L&&(k&&h.lineWidth(e),L=e)},setPolygonOffset:s,setScissorTest:function(e){e?l(h.SCISSOR_TEST):p(h.SCISSOR_TEST)},activeTexture:c,bindTexture:function(e,t){null===B&&c();var r=F[B];void 0===r&&(r={type:void 0,texture:void 0},F[B]=r);if(r.type!==e||r.texture!==t)h.bindTexture(e,t||U[e]),r.type=e,r.texture=t},compressedTexImage2D:function(){try{h.compressedTexImage2D.apply(h,arguments)}catch(e){console.error("THREE.WebGLState:",e)}},texImage2D:function(){try{h.texImage2D.apply(h,arguments)}catch(e){console.error("THREE.WebGLState:",e)}},scissor:function(e){!1===$.equals(e)&&(h.scissor(e.x,e.y,e.z,e.w),$.copy(e))},viewport:function(e){!1===z.equals(e)&&(h.viewport(e.x,e.y,e.z,e.w),z.copy(e))},reset:function(){for(var e=0;e<y.length;e++)1===y[e]&&(h.disableVertexAttribArray(e),y[e]=0);b={};B=x=null;F={};R=j=S=w=null;f.reset();d.reset();v.reset()}}}function dt(v,n,m,g,y,_,b){function x(e,t){if(e.width>t||e.height>t){if("data"in e){console.warn("THREE.WebGLRenderer: image in DataTexture is too big ("+e.width+"x"+e.height+").");return}t/=Math.max(e.width,e.height);var r=document.createElementNS("http://www.w3.org/1999/xhtml","canvas");r.width=Math.floor(e.width*t);r.height=Math.floor(e.height*t);r.getContext("2d").drawImage(e,0,0,e.width,e.height,0,0,r.width,r.height);console.warn("THREE.WebGLRenderer: image is too big ("+e.width+"x"+e.height+"). Resized to "+r.width+"x"+r.height);return r}return e}function w(e){return eo.isPowerOfTwo(e.width)&&eo.isPowerOfTwo(e.height)}function S(e,t){return e.generateMipmaps&&t&&1003!==e.minFilter&&1006!==e.minFilter}function M(e,t,r,n){v.generateMipmap(e);g.get(t).__maxMipLevel=Math.log(Math.max(r,n))*Math.LOG2E}function E(e,t){if(!y.isWebGL2)return e;if(e===v.RGB){if(t===v.FLOAT)return v.RGB32F;if(t===v.HALF_FLOAT)return v.RGB16F;if(t===v.UNSIGNED_BYTE)return v.RGB8}if(e===v.RGBA){if(t===v.FLOAT)return v.RGBA32F;if(t===v.HALF_FLOAT)return v.RGBA16F;if(t===v.UNSIGNED_BYTE)return v.RGBA8}return e}function i(e){return 1003===e||1004===e||1005===e?v.NEAREST:v.LINEAR}function C(e){e=e.target;e.removeEventListener("dispose",C);e:{var t=g.get(e);if(e.image&&t.__image__webglTextureCube)v.deleteTexture(t.__image__webglTextureCube);else{if(void 0===t.__webglInit)break e;v.deleteTexture(t.__webglTexture)}g.remove(e)}e.isVideoTexture&&delete l[e.id];b.memory.textures--}function a(e){e=e.target;e.removeEventListener("dispose",a);var t=g.get(e),r=g.get(e.texture);if(e){void 0!==r.__webglTexture&&v.deleteTexture(r.__webglTexture);e.depthTexture&&e.depthTexture.dispose();if(e.isWebGLRenderTargetCube)for(r=0;6>r;r++)v.deleteFramebuffer(t.__webglFramebuffer[r]),t.__webglDepthbuffer&&v.deleteRenderbuffer(t.__webglDepthbuffer[r]);else v.deleteFramebuffer(t.__webglFramebuffer),t.__webglDepthbuffer&&v.deleteRenderbuffer(t.__webglDepthbuffer);g.remove(e.texture);g.remove(e)}b.memory.textures--}function s(e,t){var r=g.get(e);if(e.isVideoTexture){var n=e.id,i=b.render.frame;l[n]!==i&&(l[n]=i,e.update())}if(0<e.version&&r.__version!==e.version)if(n=e.image,void 0===n)console.warn("THREE.WebGLRenderer: Texture marked for update but image is undefined");else if(!1===n.complete)console.warn("THREE.WebGLRenderer: Texture marked for update but image is incomplete");else{void 0===r.__webglInit&&(r.__webglInit=!0,e.addEventListener("dispose",C),r.__webglTexture=v.createTexture(),b.memory.textures++);m.activeTexture(v.TEXTURE0+t);m.bindTexture(v.TEXTURE_2D,r.__webglTexture);v.pixelStorei(v.UNPACK_FLIP_Y_WEBGL,e.flipY);v.pixelStorei(v.UNPACK_PREMULTIPLY_ALPHA_WEBGL,e.premultiplyAlpha);v.pixelStorei(v.UNPACK_ALIGNMENT,e.unpackAlignment);t=x(e.image,y.maxTextureSize);(y.isWebGL2?0:1001!==e.wrapS||1001!==e.wrapT||1003!==e.minFilter&&1006!==e.minFilter)&&!1===w(t)&&(t instanceof HTMLImageElement||t instanceof HTMLCanvasElement||t instanceof ImageBitmap)&&(void 0===p&&(p=document.createElementNS("http://www.w3.org/1999/xhtml","canvas")),p.width=eo.floorPowerOfTwo(t.width),p.height=eo.floorPowerOfTwo(t.height),p.getContext("2d").drawImage(t,0,0,p.width,p.height),console.warn("THREE.WebGLRenderer: image is not power of two ("+t.width+"x"+t.height+"). Resized to "+p.width+"x"+p.height),t=p);n=w(t);i=_.convert(e.format);var o=_.convert(e.type),a=E(i,o);T(v.TEXTURE_2D,e,n);var s=e.mipmaps;if(e.isDepthTexture){a=v.DEPTH_COMPONENT;if(1015===e.type){if(!y.isWebGL2)throw Error("Float Depth Texture only supported in WebGL2.0");a=v.DEPTH_COMPONENT32F}else y.isWebGL2&&(a=v.DEPTH_COMPONENT16);1026===e.format&&a===v.DEPTH_COMPONENT&&1012!==e.type&&1014!==e.type&&(console.warn("THREE.WebGLRenderer: Use UnsignedShortType or UnsignedIntType for DepthFormat DepthTexture."),e.type=1012,o=_.convert(e.type));1027===e.format&&(a=v.DEPTH_STENCIL,1020!==e.type&&(console.warn("THREE.WebGLRenderer: Use UnsignedInt248Type for DepthStencilFormat DepthTexture."),e.type=1020,o=_.convert(e.type)));m.texImage2D(v.TEXTURE_2D,0,a,t.width,t.height,0,i,o,null)}else if(e.isDataTexture)if(0<s.length&&n){for(var u=0,c=s.length;u<c;u++){var h=s[u];m.texImage2D(v.TEXTURE_2D,u,a,h.width,h.height,0,i,o,h.data)}e.generateMipmaps=!1;r.__maxMipLevel=s.length-1}else m.texImage2D(v.TEXTURE_2D,0,a,t.width,t.height,0,i,o,t.data),r.__maxMipLevel=0;else if(e.isCompressedTexture){u=0;for(c=s.length;u<c;u++)h=s[u],1023!==e.format&&1022!==e.format?-1<m.getCompressedTextureFormats().indexOf(i)?m.compressedTexImage2D(v.TEXTURE_2D,u,a,h.width,h.height,0,h.data):console.warn("THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .uploadTexture()"):m.texImage2D(v.TEXTURE_2D,u,a,h.width,h.height,0,i,o,h.data);r.__maxMipLevel=s.length-1}else if(0<s.length&&n){u=0;for(c=s.length;u<c;u++)h=s[u],m.texImage2D(v.TEXTURE_2D,u,a,i,o,h);e.generateMipmaps=!1;r.__maxMipLevel=s.length-1}else m.texImage2D(v.TEXTURE_2D,0,a,i,o,t),r.__maxMipLevel=0;S(e,n)&&M(v.TEXTURE_2D,e,t.width,t.height);r.__version=e.version;if(e.onUpdate)e.onUpdate(e);return}m.activeTexture(v.TEXTURE0+t);m.bindTexture(v.TEXTURE_2D,r.__webglTexture)}function T(e,t,r){r?(v.texParameteri(e,v.TEXTURE_WRAP_S,_.convert(t.wrapS)),v.texParameteri(e,v.TEXTURE_WRAP_T,_.convert(t.wrapT)),v.texParameteri(e,v.TEXTURE_MAG_FILTER,_.convert(t.magFilter)),v.texParameteri(e,v.TEXTURE_MIN_FILTER,_.convert(t.minFilter))):(v.texParameteri(e,v.TEXTURE_WRAP_S,v.CLAMP_TO_EDGE),v.texParameteri(e,v.TEXTURE_WRAP_T,v.CLAMP_TO_EDGE),1001===t.wrapS&&1001===t.wrapT||console.warn("THREE.WebGLRenderer: Texture is not power of two. Texture.wrapS and Texture.wrapT should be set to THREE.ClampToEdgeWrapping."),v.texParameteri(e,v.TEXTURE_MAG_FILTER,i(t.magFilter)),v.texParameteri(e,v.TEXTURE_MIN_FILTER,i(t.minFilter)),1003!==t.minFilter&&1006!==t.minFilter&&console.warn("THREE.WebGLRenderer: Texture is not power of two. Texture.minFilter should be set to THREE.NearestFilter or THREE.LinearFilter."));!(r=n.get("EXT_texture_filter_anisotropic"))||1015===t.type&&null===n.get("OES_texture_float_linear")||1016===t.type&&null===(y.isWebGL2||n.get("OES_texture_half_float_linear"))||!(1<t.anisotropy||g.get(t).__currentAnisotropy)||(v.texParameterf(e,r.TEXTURE_MAX_ANISOTROPY_EXT,Math.min(t.anisotropy,y.getMaxAnisotropy())),g.get(t).__currentAnisotropy=t.anisotropy)}function u(e,t,r,n){var i=_.convert(t.texture.format),o=_.convert(t.texture.type),a=E(i,o);m.texImage2D(n,0,a,t.width,t.height,0,i,o,null);v.bindFramebuffer(v.FRAMEBUFFER,e);v.framebufferTexture2D(v.FRAMEBUFFER,r,n,g.get(t.texture).__webglTexture,0);v.bindFramebuffer(v.FRAMEBUFFER,null)}function c(e,t){v.bindRenderbuffer(v.RENDERBUFFER,e);t.depthBuffer&&!t.stencilBuffer?(v.renderbufferStorage(v.RENDERBUFFER,v.DEPTH_COMPONENT16,t.width,t.height),v.framebufferRenderbuffer(v.FRAMEBUFFER,v.DEPTH_ATTACHMENT,v.RENDERBUFFER,e)):t.depthBuffer&&t.stencilBuffer?(v.renderbufferStorage(v.RENDERBUFFER,v.DEPTH_STENCIL,t.width,t.height),v.framebufferRenderbuffer(v.FRAMEBUFFER,v.DEPTH_STENCIL_ATTACHMENT,v.RENDERBUFFER,e)):v.renderbufferStorage(v.RENDERBUFFER,v.RGBA4,t.width,t.height);v.bindRenderbuffer(v.RENDERBUFFER,null)}var l={},p;this.setTexture2D=s;this.setTextureCube=function(e,t){var r=g.get(e);if(6===e.image.length)if(0<e.version&&r.__version!==e.version){r.__image__webglTextureCube||(e.addEventListener("dispose",C),r.__image__webglTextureCube=v.createTexture(),b.memory.textures++);m.activeTexture(v.TEXTURE0+t);m.bindTexture(v.TEXTURE_CUBE_MAP,r.__image__webglTextureCube);v.pixelStorei(v.UNPACK_FLIP_Y_WEBGL,e.flipY);t=e&&e.isCompressedTexture;for(var n=e.image[0]&&e.image[0].isDataTexture,i=[],o=0;6>o;o++)i[o]=t||n?n?e.image[o].image:e.image[o]:x(e.image[o],y.maxCubemapSize);var a=i[0],s=w(a),u=_.convert(e.format),c=_.convert(e.type),h=E(u,c);T(v.TEXTURE_CUBE_MAP,e,s);for(o=0;6>o;o++)if(t)for(var l,p=i[o].mipmaps,f=0,d=p.length;f<d;f++)l=p[f],1023!==e.format&&1022!==e.format?-1<m.getCompressedTextureFormats().indexOf(u)?m.compressedTexImage2D(v.TEXTURE_CUBE_MAP_POSITIVE_X+o,f,h,l.width,l.height,0,l.data):console.warn("THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .setTextureCube()"):m.texImage2D(v.TEXTURE_CUBE_MAP_POSITIVE_X+o,f,h,l.width,l.height,0,u,c,l.data);else n?m.texImage2D(v.TEXTURE_CUBE_MAP_POSITIVE_X+o,0,h,i[o].width,i[o].height,0,u,c,i[o].data):m.texImage2D(v.TEXTURE_CUBE_MAP_POSITIVE_X+o,0,h,u,c,i[o]);r.__maxMipLevel=t?p.length-1:0;S(e,s)&&M(v.TEXTURE_CUBE_MAP,e,a.width,a.height);r.__version=e.version;if(e.onUpdate)e.onUpdate(e)}else m.activeTexture(v.TEXTURE0+t),m.bindTexture(v.TEXTURE_CUBE_MAP,r.__image__webglTextureCube)};this.setTextureCubeDynamic=function(e,t){m.activeTexture(v.TEXTURE0+t);m.bindTexture(v.TEXTURE_CUBE_MAP,g.get(e).__webglTexture)};this.setupRenderTarget=function(e){var t=g.get(e),r=g.get(e.texture);e.addEventListener("dispose",a);r.__webglTexture=v.createTexture();b.memory.textures++;var n=!0===e.isWebGLRenderTargetCube,i=w(e);if(n){t.__webglFramebuffer=[];for(var o=0;6>o;o++)t.__webglFramebuffer[o]=v.createFramebuffer()}else t.__webglFramebuffer=v.createFramebuffer();if(n){m.bindTexture(v.TEXTURE_CUBE_MAP,r.__webglTexture);T(v.TEXTURE_CUBE_MAP,e.texture,i);for(o=0;6>o;o++)u(t.__webglFramebuffer[o],e,v.COLOR_ATTACHMENT0,v.TEXTURE_CUBE_MAP_POSITIVE_X+o);S(e.texture,i)&&M(v.TEXTURE_CUBE_MAP,e.texture,e.width,e.height);m.bindTexture(v.TEXTURE_CUBE_MAP,null)}else m.bindTexture(v.TEXTURE_2D,r.__webglTexture),T(v.TEXTURE_2D,e.texture,i),u(t.__webglFramebuffer,e,v.COLOR_ATTACHMENT0,v.TEXTURE_2D),S(e.texture,i)&&M(v.TEXTURE_2D,e.texture,e.width,e.height),m.bindTexture(v.TEXTURE_2D,null);if(e.depthBuffer){t=g.get(e);r=!0===e.isWebGLRenderTargetCube;if(e.depthTexture){if(r)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");v.bindFramebuffer(v.FRAMEBUFFER,t.__webglFramebuffer);if(!e.depthTexture||!e.depthTexture.isDepthTexture)throw Error("renderTarget.depthTexture must be an instance of THREE.DepthTexture");g.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);s(e.depthTexture,0);t=g.get(e.depthTexture).__webglTexture;if(1026===e.depthTexture.format)v.framebufferTexture2D(v.FRAMEBUFFER,v.DEPTH_ATTACHMENT,v.TEXTURE_2D,t,0);else if(1027===e.depthTexture.format)v.framebufferTexture2D(v.FRAMEBUFFER,v.DEPTH_STENCIL_ATTACHMENT,v.TEXTURE_2D,t,0);else throw Error("Unknown depthTexture format")}else if(r)for(t.__webglDepthbuffer=[],r=0;6>r;r++)v.bindFramebuffer(v.FRAMEBUFFER,t.__webglFramebuffer[r]),t.__webglDepthbuffer[r]=v.createRenderbuffer(),c(t.__webglDepthbuffer[r],e);else v.bindFramebuffer(v.FRAMEBUFFER,t.__webglFramebuffer),t.__webglDepthbuffer=v.createRenderbuffer(),c(t.__webglDepthbuffer,e);v.bindFramebuffer(v.FRAMEBUFFER,null)}};this.updateRenderTargetMipmap=function(e){var t=e.texture,r=w(e);if(S(t,r)){r=e.isWebGLRenderTargetCube?v.TEXTURE_CUBE_MAP:v.TEXTURE_2D;var n=g.get(t).__webglTexture;m.bindTexture(r,n);M(r,t,e.width,e.height);m.bindTexture(r,null)}}}function vt(r,n,i){return{convert:function(e){if(1e3===e)return r.REPEAT;if(1001===e)return r.CLAMP_TO_EDGE;if(1002===e)return r.MIRRORED_REPEAT;if(1003===e)return r.NEAREST;if(1004===e)return r.NEAREST_MIPMAP_NEAREST;if(1005===e)return r.NEAREST_MIPMAP_LINEAR;if(1006===e)return r.LINEAR;if(1007===e)return r.LINEAR_MIPMAP_NEAREST;if(1008===e)return r.LINEAR_MIPMAP_LINEAR;if(1009===e)return r.UNSIGNED_BYTE;if(1017===e)return r.UNSIGNED_SHORT_4_4_4_4;if(1018===e)return r.UNSIGNED_SHORT_5_5_5_1;if(1019===e)return r.UNSIGNED_SHORT_5_6_5;if(1010===e)return r.BYTE;if(1011===e)return r.SHORT;if(1012===e)return r.UNSIGNED_SHORT;if(1013===e)return r.INT;if(1014===e)return r.UNSIGNED_INT;if(1015===e)return r.FLOAT;if(1016===e){if(i.isWebGL2)return r.HALF_FLOAT;var t=n.get("OES_texture_half_float");if(null!==t)return t.HALF_FLOAT_OES}if(1021===e)return r.ALPHA;if(1022===e)return r.RGB;if(1023===e)return r.RGBA;if(1024===e)return r.LUMINANCE;if(1025===e)return r.LUMINANCE_ALPHA;if(1026===e)return r.DEPTH_COMPONENT;if(1027===e)return r.DEPTH_STENCIL;if(100===e)return r.FUNC_ADD;if(101===e)return r.FUNC_SUBTRACT;if(102===e)return r.FUNC_REVERSE_SUBTRACT;if(200===e)return r.ZERO;if(201===e)return r.ONE;if(202===e)return r.SRC_COLOR;if(203===e)return r.ONE_MINUS_SRC_COLOR;if(204===e)return r.SRC_ALPHA;if(205===e)return r.ONE_MINUS_SRC_ALPHA;if(206===e)return r.DST_ALPHA;if(207===e)return r.ONE_MINUS_DST_ALPHA;if(208===e)return r.DST_COLOR;if(209===e)return r.ONE_MINUS_DST_COLOR;if(210===e)return r.SRC_ALPHA_SATURATE;if(33776===e||33777===e||33778===e||33779===e)if(t=n.get("WEBGL_compressed_texture_s3tc"),null!==t){if(33776===e)return t.COMPRESSED_RGB_S3TC_DXT1_EXT;if(33777===e)return t.COMPRESSED_RGBA_S3TC_DXT1_EXT;if(33778===e)return t.COMPRESSED_RGBA_S3TC_DXT3_EXT;if(33779===e)return t.COMPRESSED_RGBA_S3TC_DXT5_EXT}if(35840===e||35841===e||35842===e||35843===e)if(t=n.get("WEBGL_compressed_texture_pvrtc"),null!==t){if(35840===e)return t.COMPRESSED_RGB_PVRTC_4BPPV1_IMG;if(35841===e)return t.COMPRESSED_RGB_PVRTC_2BPPV1_IMG;if(35842===e)return t.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG;if(35843===e)return t.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG}if(36196===e&&(t=n.get("WEBGL_compressed_texture_etc1"),null!==t))return t.COMPRESSED_RGB_ETC1_WEBGL;if(37808===e||37809===e||37810===e||37811===e||37812===e||37813===e||37814===e||37815===e||37816===e||37817===e||37818===e||37819===e||37820===e||37821===e)if(t=n.get("WEBGL_compressed_texture_astc"),null!==t)return e;if(103===e||104===e){if(i.isWebGL2){if(103===e)return r.MIN;if(104===e)return r.MAX}t=n.get("EXT_blend_minmax");if(null!==t){if(103===e)return t.MIN_EXT;if(104===e)return t.MAX_EXT}}if(1020===e){if(i.isWebGL2)return r.UNSIGNED_INT_24_8;t=n.get("WEBGL_depth_texture");if(null!==t)return t.UNSIGNED_INT_24_8_WEBGL}return 0}}}function mt(){h.call(this);this.type="Group"}function gt(e,t,r,n){u.call(this);this.type="PerspectiveCamera";this.fov=void 0!==e?e: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!==t?t:1;this.view=null;this.filmGauge=35;this.filmOffset=0;this.updateProjectionMatrix()}function yt(e){gt.call(this);this.cameras=e||[]}function _t(r){function n(){return null!==c&&!0===c.isPresenting}function e(){if(n()){var e=c.getEyeParameters("left"),t=e.renderWidth;e=e.renderHeight;o=r.getPixelRatio();i=r.getSize();r.setDrawingBufferSize(2*t,e,1);a.start()}else u.enabled&&(r.setDrawingBufferSize(i.width,i.height,o),a.stop())}var u=this,c=null,h=null,l=null,p=[],f=new xe,d=new xe;"undefined"!==typeof window&&"VRFrameData"in window&&(h=new window.VRFrameData,window.addEventListener("vrdisplaypresentchange",e,!1));var v=new xe,m=new s,g=new we,y=new gt;y.bounds=new Se(0,0,.5,1);y.layers.enable(1);var _=new gt;_.bounds=new Se(.5,0,.5,1);_.layers.enable(2);var b=new yt([y,_]);b.layers.enable(1);b.layers.enable(2);var i,o,x=[];this.enabled=!1;this.userHeight=1.6;this.getController=function(e){var t=p[e];void 0===t&&(t=new mt,t.matrixAutoUpdate=!1,t.visible=!1,p[e]=t);return t};this.getDevice=function(){return c};this.setDevice=function(e){void 0!==e&&(c=e);a.setContext(e)};this.setPoseTarget=function(e){void 0!==e&&(l=e)};this.getCamera=function(e){if(null===c)return e.position.set(0,u.userHeight,0),e;c.depthNear=e.near;c.depthFar=e.far;c.getFrameData(h);var t=c.stageParameters;t?f.fromArray(t.sittingToStandingTransform):f.makeTranslation(0,u.userHeight,0);t=h.pose;var r=null!==l?l:e;r.matrix.copy(f);r.matrix.decompose(r.position,r.quaternion,r.scale);null!==t.orientation&&(m.fromArray(t.orientation),r.quaternion.multiply(m));null!==t.position&&(m.setFromRotationMatrix(f),g.fromArray(t.position),g.applyQuaternion(m),r.position.add(g));r.updateMatrixWorld();if(!1===c.isPresenting)return e;y.near=e.near;_.near=e.near;y.far=e.far;_.far=e.far;b.matrixWorld.copy(e.matrixWorld);b.matrixWorldInverse.copy(e.matrixWorldInverse);y.matrixWorldInverse.fromArray(h.leftViewMatrix);_.matrixWorldInverse.fromArray(h.rightViewMatrix);d.getInverse(f);y.matrixWorldInverse.multiply(d);_.matrixWorldInverse.multiply(d);e=r.parent;null!==e&&(v.getInverse(e.matrixWorld),y.matrixWorldInverse.multiply(v),_.matrixWorldInverse.multiply(v));y.matrixWorld.getInverse(y.matrixWorldInverse);_.matrixWorld.getInverse(_.matrixWorldInverse);y.projectionMatrix.fromArray(h.leftProjectionMatrix);_.projectionMatrix.fromArray(h.rightProjectionMatrix);b.projectionMatrix.copy(y.projectionMatrix);e=c.getLayers();e.length&&(e=e[0],null!==e.leftBounds&&4===e.leftBounds.length&&y.bounds.fromArray(e.leftBounds),null!==e.rightBounds&&4===e.rightBounds.length&&_.bounds.fromArray(e.rightBounds));e:for(e=0;e<p.length;e++){t=p[e];t:{r=e;for(var n=navigator.getGamepads&&navigator.getGamepads(),i=0,o=0,a=n.length;i<a;i++){var s=n[i];if(s&&("Daydream Controller"===s.id||"Gear VR Controller"===s.id||"Oculus Go Controller"===s.id||"OpenVR Gamepad"===s.id||s.id.startsWith("Oculus Touch")||s.id.startsWith("Spatial Controller"))){if(o===r){r=s;break t}o++}}r=void 0}if(void 0!==r&&void 0!==r.pose){if(null===r.pose)break e;n=r.pose;!1===n.hasPosition&&t.position.set(.2,-.6,-.05);null!==n.position&&t.position.fromArray(n.position);null!==n.orientation&&t.quaternion.fromArray(n.orientation);t.matrix.compose(t.position,t.quaternion,t.scale);t.matrix.premultiply(f);t.matrix.decompose(t.position,t.quaternion,t.scale);t.matrixWorldNeedsUpdate=!0;t.visible=!0;n="Daydream Controller"===r.id?0:1;x[e]!==r.buttons[n].pressed&&(x[e]=r.buttons[n].pressed,!0===x[e]?t.dispatchEvent({type:"selectstart"}):(t.dispatchEvent({type:"selectend"}),t.dispatchEvent({type:"select"})))}else t.visible=!1}return b};this.getStandingMatrix=function(){return f};this.isPresenting=n;var a=new Ce;this.setAnimationLoop=function(e){a.setAnimationLoop(e)};this.submitFrame=function(){n()&&c.submitFrame()};this.dispose=function(){"undefined"!==typeof window&&window.removeEventListener("vrdisplaypresentchange",e)}}function bt(r){function i(){return null!==c&&null!==h}function n(e){var t=p[f.indexOf(e.inputSource)];t&&t.dispatchEvent({type:e.type})}function o(){r.setFramebuffer(null);m.stop()}function a(e,t){null===t?e.matrixWorld.copy(e.matrix):e.matrixWorld.multiplyMatrices(t.matrixWorld,e.matrix);e.matrixWorldInverse.getInverse(e.matrixWorld)}var s=r.context,t=null,c=null,h=null,l=null,p=[],f=[],e=new gt;e.layers.enable(1);e.viewport=new Se;var u=new gt;u.layers.enable(2);u.viewport=new Se;var d=new yt([e,u]);d.layers.enable(1);d.layers.enable(2);this.enabled=!1;this.getController=function(e){var t=p[e];void 0===t&&(t=new mt,t.matrixAutoUpdate=!1,t.visible=!1,p[e]=t);return t};this.getDevice=function(){return t};this.setDevice=function(e){void 0!==e&&(t=e);e instanceof XRDevice&&s.setCompatibleXRDevice(e)};this.setSession=function(e,t){c=e;null!==c&&(c.addEventListener("select",n),c.addEventListener("selectstart",n),c.addEventListener("selectend",n),c.addEventListener("end",o),c.baseLayer=new XRWebGLLayer(c,s),c.requestFrameOfReference(t.frameOfReferenceType).then(function(e){h=e;r.setFramebuffer(c.baseLayer.framebuffer);m.setContext(c);m.start()}),f=c.getInputSources(),c.addEventListener("inputsourceschange",function(){f=c.getInputSources();console.log(f)}))};this.getCamera=function(e){if(i()){var t=e.parent,r=d.cameras;a(d,t);for(var n=0;n<r.length;n++)a(r[n],t);e.matrixWorld.copy(d.matrixWorld);e=e.children;n=0;for(t=e.length;n<t;n++)e[n].updateMatrixWorld(!0);return d}return e};this.isPresenting=i;var v=null,m=new Ce;m.setAnimationLoop(function(e,t){l=t.getDevicePose(h);if(null!==l)for(var r=c.baseLayer,n=t.views,i=0;i<n.length;i++){var o=n[i],a=r.getViewport(o),s=l.getViewMatrix(o),u=d.cameras[i];u.matrix.fromArray(s).getInverse(u.matrix);u.projectionMatrix.fromArray(o.projectionMatrix);u.viewport.set(a.x,a.y,a.width,a.height);0===i&&(d.matrix.copy(u.matrix),d.projectionMatrix.copy(u.projectionMatrix))}for(i=0;i<p.length;i++){r=p[i];if(n=f[i])if(n=t.getInputPose(n,h),null!==n){r.matrix.elements=n.pointerMatrix;r.matrix.decompose(r.position,r.rotation,r.scale);r.visible=!0;continue}r.visible=!1}v&&v(e)});this.setAnimationLoop=function(e){v=e};this.dispose=function(){};this.getStandingMatrix=function(){console.warn("THREE.WebXRManager: getStandingMatrix() is no longer needed.");return new THREE.Matrix4};this.submitFrame=function(){}}function xt(e){var w;function t(){ee=new Re(Q);te=new Ae(Q,ee,e);te.isWebGL2||(ee.get("WEBGL_depth_texture"),ee.get("OES_texture_float"),ee.get("OES_texture_half_float"),ee.get("OES_texture_half_float_linear"),ee.get("OES_standard_derivatives"),ee.get("OES_element_index_uint"),ee.get("ANGLE_instanced_arrays"));ee.get("OES_texture_float_linear");me=new vt(Q,ee,te);re=new ft(Q,ee,me,te);re.scissor(B.copy(H).multiplyScalar(G));re.viewport(k.copy(V).multiplyScalar(G));ne=new Ne(Q);ie=new tt;oe=new dt(Q,ee,re,ie,te,me,ne);ae=new Te(Q);se=new Le(Q,ae,ne);ue=new ke(se,ne);fe=new De(Q);ce=new et(T,ee,te);he=new ot;le=new ct;pe=new Oe(T,re,ue,b);de=new Pe(Q,ee,ne,te);ve=new Ie(Q,ee,ne,te);ne.programs=ce.programs;T.context=Q;T.capabilities=te;T.extensions=ee;T.properties=ie;T.renderLists=he;T.state=re;T.info=ne}function r(e){e.preventDefault();console.log("THREE.WebGLRenderer: Context Lost.");O=!0}function n(){console.log("THREE.WebGLRenderer: Context Restored.");O=!1;t()}function h(e){e=e.target;e.removeEventListener("dispose",h);l(e);ie.remove(e)}function l(e){var t=ie.get(e).program;e.program=void 0;void 0!==t&&ce.releaseProgram(t)}function s(e,t){e.render(function(e){T.renderBufferImmediate(e,t)})}function p(e,t,r){if(!1!==e.visible){if(e.layers.test(t.layers))if(e.isLight)C.pushLight(e),e.castShadow&&C.pushShadow(e);else if(e.isSprite){if(!e.frustumCulled||W.intersectsSprite(e)){r&&J.setFromMatrixPosition(e.matrixWorld).applyMatrix4(Z);var n=ue.update(e),i=e.material;E.push(e,n,i,J.z,null)}}else if(e.isImmediateRenderObject)r&&J.setFromMatrixPosition(e.matrixWorld).applyMatrix4(Z),E.push(e,null,e.material,J.z,null);else if(e.isMesh||e.isLine||e.isPoints)if(e.isSkinnedMesh&&e.skeleton.update(),!e.frustumCulled||W.intersectsObject(e))if(r&&J.setFromMatrixPosition(e.matrixWorld).applyMatrix4(Z),n=ue.update(e),i=e.material,Array.isArray(i))for(var o=n.groups,a=0,s=o.length;a<s;a++){var u=o[a],c=i[u.materialIndex];c&&c.visible&&E.push(e,n,c,J.z,u)}else i.visible&&E.push(e,n,i,J.z,null);e=e.children;a=0;for(s=e.length;a<s;a++)p(e[a],t,r)}}function a(e,t,r,n){for(var i=0,o=e.length;i<o;i++){var a=e[i],s=a.object,u=a.geometry,c=void 0===n?a.material:n;a=a.group;if(r.isArrayCamera){D=r;for(var h=r.cameras,l=0,p=h.length;l<p;l++){var f=h[l];if(s.layers.test(f.layers)){if("viewport"in f)re.viewport(k.copy(f.viewport));else{var d=f.bounds;re.viewport(k.set(d.x*z,d.y*U,d.z*z,d.w*U).multiplyScalar(G))}v(s,t,f,u,c,a)}}}else D=null,v(s,t,r,u,c,a)}}function v(e,t,r,n,i,o){e.onBeforeRender(T,t,r,n,i,o);C=le.get(t,D||r);e.modelViewMatrix.multiplyMatrices(r.matrixWorldInverse,e.matrixWorld);e.normalMatrix.getNormalMatrix(e.modelViewMatrix);if(e.isImmediateRenderObject){re.setMaterial(i);var a=S(r,t.fog,i,e);L=w=null;I=!1;s(e,a)}else T.renderBufferDirect(r,t.fog,n,i,e,o);e.onAfterRender(T,t,r,n,i,o);C=le.get(t,D||r)}function f(e,t,r){var n=ie.get(e),i=C.state.lights,o=n.lightsHash,a=i.state.hash;r=ce.getParameters(e,i.state,C.state.shadowsArray,t,X.numPlanes,X.numIntersection,r);var s=ce.getProgramCode(e,r),u=n.program,c=!0;if(void 0===u)e.addEventListener("dispose",h);else if(u.code!==s)l(e);else{if(o.stateID!==a.stateID||o.directionalLength!==a.directionalLength||o.pointLength!==a.pointLength||o.spotLength!==a.spotLength||o.rectAreaLength!==a.rectAreaLength||o.hemiLength!==a.hemiLength||o.shadowsLength!==a.shadowsLength)o.stateID=a.stateID,o.directionalLength=a.directionalLength,o.pointLength=a.pointLength,o.spotLength=a.spotLength,o.rectAreaLength=a.rectAreaLength,o.hemiLength=a.hemiLength,o.shadowsLength=a.shadowsLength;else if(void 0!==r.shaderID)return;c=!1}c&&(r.shaderID?(s=so[r.shaderID],n.shader={name:e.type,uniforms:io.clone(s.uniforms),vertexShader:s.vertexShader,fragmentShader:s.fragmentShader}):n.shader={name:e.type,uniforms:e.uniforms,vertexShader:e.vertexShader,fragmentShader:e.fragmentShader},e.onBeforeCompile(n.shader,T),s=ce.getProgramCode(e,r),u=ce.acquireProgram(e,n.shader,r,s),n.program=u,e.program=u);r=u.getAttributes();if(e.morphTargets)for(s=e.numSupportedMorphTargets=0;s<T.maxMorphTargets;s++)0<=r["morphTarget"+s]&&e.numSupportedMorphTargets++;if(e.morphNormals)for(s=e.numSupportedMorphNormals=0;s<T.maxMorphNormals;s++)0<=r["morphNormal"+s]&&e.numSupportedMorphNormals++;r=n.shader.uniforms;if(!e.isShaderMaterial&&!e.isRawShaderMaterial||!0===e.clipping)n.numClippingPlanes=X.numPlanes,n.numIntersection=X.numIntersection,r.clippingPlanes=X.uniform;n.fog=t;void 0===o&&(n.lightsHash=o={});o.stateID=a.stateID;o.directionalLength=a.directionalLength;o.pointLength=a.pointLength;o.spotLength=a.spotLength;o.rectAreaLength=a.rectAreaLength;o.hemiLength=a.hemiLength;o.shadowsLength=a.shadowsLength;e.lights&&(r.ambientLightColor.value=i.state.ambient,r.directionalLights.value=i.state.directional,r.spotLights.value=i.state.spot,r.rectAreaLights.value=i.state.rectArea,r.pointLights.value=i.state.point,r.hemisphereLights.value=i.state.hemi,r.directionalShadowMap.value=i.state.directionalShadowMap,r.directionalShadowMatrix.value=i.state.directionalShadowMatrix,r.spotShadowMap.value=i.state.spotShadowMap,r.spotShadowMatrix.value=i.state.spotShadowMatrix,r.pointShadowMap.value=i.state.pointShadowMap,r.pointShadowMatrix.value=i.state.pointShadowMatrix);e=n.program.getUniforms();e=Fe.seqWithValue(e.seq,r);n.uniformsList=e}function S(e,t,r,n){$=0;var i=ie.get(r),o=i.lightsHash,a=C.state.lights.state.hash;Y&&(K||e!==N)&&X.setState(r.clippingPlanes,r.clipIntersection,r.clipShadows,e,i,e===N&&r.id===R);!1===r.needsUpdate&&(void 0===i.program?r.needsUpdate=!0:r.fog&&i.fog!==t?r.needsUpdate=!0:!r.lights||o.stateID===a.stateID&&o.directionalLength===a.directionalLength&&o.pointLength===a.pointLength&&o.spotLength===a.spotLength&&o.rectAreaLength===a.rectAreaLength&&o.hemiLength===a.hemiLength&&o.shadowsLength===a.shadowsLength?void 0===i.numClippingPlanes||i.numClippingPlanes===X.numPlanes&&i.numIntersection===X.numIntersection||(r.needsUpdate=!0):r.needsUpdate=!0);r.needsUpdate&&(f(r,t,n),r.needsUpdate=!1);var s=!1,u=!1,c=!1;o=i.program;a=o.getUniforms();var h=i.shader.uniforms;re.useProgram(o.program)&&(c=u=s=!0);r.id!==R&&(R=r.id,u=!0);if(s||e!==N){a.setValue(Q,"projectionMatrix",e.projectionMatrix);te.logarithmicDepthBuffer&&a.setValue(Q,"logDepthBufFC",2/(Math.log(e.far+1)/Math.LN2));N!==(D||e)&&(N=D||e,c=u=!0);if(r.isShaderMaterial||r.isMeshPhongMaterial||r.isMeshStandardMaterial||r.envMap)s=a.map.cameraPosition,void 0!==s&&s.setValue(Q,J.setFromMatrixPosition(e.matrixWorld));(r.isMeshPhongMaterial||r.isMeshLambertMaterial||r.isMeshBasicMaterial||r.isMeshStandardMaterial||r.isShaderMaterial||r.skinning)&&a.setValue(Q,"viewMatrix",e.matrixWorldInverse)}if(r.skinning&&(a.setOptional(Q,n,"bindMatrix"),a.setOptional(Q,n,"bindMatrixInverse"),e=n.skeleton))if(s=e.bones,te.floatVertexTextures){if(void 0===e.boneTexture){s=Math.sqrt(4*s.length);s=eo.ceilPowerOfTwo(s);s=Math.max(s,4);var l=new Float32Array(s*s*4);l.set(e.boneMatrices);var p=new Me(l,s,s,1023,1015);p.needsUpdate=!0;e.boneMatrices=l;e.boneTexture=p;e.boneTextureSize=s}a.setValue(Q,"boneTexture",e.boneTexture);a.setValue(Q,"boneTextureSize",e.boneTextureSize)}else a.setOptional(Q,e,"boneMatrices");u&&(a.setValue(Q,"toneMappingExposure",T.toneMappingExposure),a.setValue(Q,"toneMappingWhitePoint",T.toneMappingWhitePoint),r.lights&&(u=c,h.ambientLightColor.needsUpdate=u,h.directionalLights.needsUpdate=u,h.pointLights.needsUpdate=u,h.spotLights.needsUpdate=u,h.rectAreaLights.needsUpdate=u,h.hemisphereLights.needsUpdate=u),t&&r.fog&&(h.fogColor.value=t.color,t.isFog?(h.fogNear.value=t.near,h.fogFar.value=t.far):t.isFogExp2&&(h.fogDensity.value=t.density)),r.isMeshBasicMaterial?d(h,r):r.isMeshLambertMaterial?(d(h,r),r.emissiveMap&&(h.emissiveMap.value=r.emissiveMap)):r.isMeshPhongMaterial?(d(h,r),r.isMeshToonMaterial?(m(h,r),r.gradientMap&&(h.gradientMap.value=r.gradientMap)):m(h,r)):r.isMeshStandardMaterial?(d(h,r),r.isMeshPhysicalMaterial?(g(h,r),h.reflectivity.value=r.reflectivity,h.clearCoat.value=r.clearCoat,h.clearCoatRoughness.value=r.clearCoatRoughness):g(h,r)):r.isMeshDepthMaterial?(d(h,r),r.displacementMap&&(h.displacementMap.value=r.displacementMap,h.displacementScale.value=r.displacementScale,h.displacementBias.value=r.displacementBias)):r.isMeshDistanceMaterial?(d(h,r),r.displacementMap&&(h.displacementMap.value=r.displacementMap,h.displacementScale.value=r.displacementScale,h.displacementBias.value=r.displacementBias),h.referencePosition.value.copy(r.referencePosition),h.nearDistance.value=r.nearDistance,h.farDistance.value=r.farDistance):r.isMeshNormalMaterial?(d(h,r),r.bumpMap&&(h.bumpMap.value=r.bumpMap,h.bumpScale.value=r.bumpScale,1===r.side&&(h.bumpScale.value*=-1)),r.normalMap&&(h.normalMap.value=r.normalMap,h.normalScale.value.copy(r.normalScale),1===r.side&&h.normalScale.value.negate()),r.displacementMap&&(h.displacementMap.value=r.displacementMap,h.displacementScale.value=r.displacementScale,h.displacementBias.value=r.displacementBias)):r.isLineBasicMaterial?(h.diffuse.value=r.color,h.opacity.value=r.opacity,r.isLineDashedMaterial&&(h.dashSize.value=r.dashSize,h.totalSize.value=r.dashSize+r.gapSize,h.scale.value=r.scale)):r.isPointsMaterial?(h.diffuse.value=r.color,h.opacity.value=r.opacity,h.size.value=r.size*G,h.scale.value=.5*U,h.map.value=r.map,null!==r.map&&(!0===r.map.matrixAutoUpdate&&r.map.updateMatrix(),h.uvTransform.value.copy(r.map.matrix))):r.isSpriteMaterial?(h.diffuse.value=r.color,h.opacity.value=r.opacity,h.rotation.value=r.rotation,h.map.value=r.map,null!==r.map&&(!0===r.map.matrixAutoUpdate&&r.map.updateMatrix(),h.uvTransform.value.copy(r.map.matrix))):r.isShadowMaterial&&(h.color.value=r.color,h.opacity.value=r.opacity),void 0!==h.ltc_1&&(h.ltc_1.value=ao.LTC_1),void 0!==h.ltc_2&&(h.ltc_2.value=ao.LTC_2),Fe.upload(Q,i.uniformsList,h,T));r.isShaderMaterial&&!0===r.uniformsNeedUpdate&&(Fe.upload(Q,i.uniformsList,h,T),r.uniformsNeedUpdate=!1);r.isSpriteMaterial&&a.setValue(Q,"center",n.center);a.setValue(Q,"modelViewMatrix",n.modelViewMatrix);a.setValue(Q,"normalMatrix",n.normalMatrix);a.setValue(Q,"modelMatrix",n.matrixWorld);return o}function d(e,t){e.opacity.value=t.opacity;t.color&&(e.diffuse.value=t.color);t.emissive&&e.emissive.value.copy(t.emissive).multiplyScalar(t.emissiveIntensity);t.map&&(e.map.value=t.map);t.alphaMap&&(e.alphaMap.value=t.alphaMap);t.specularMap&&(e.specularMap.value=t.specularMap);t.envMap&&(e.envMap.value=t.envMap,e.flipEnvMap.value=t.envMap&&t.envMap.isCubeTexture?-1:1,e.reflectivity.value=t.reflectivity,e.refractionRatio.value=t.refractionRatio,e.maxMipLevel.value=ie.get(t.envMap).__maxMipLevel);t.lightMap&&(e.lightMap.value=t.lightMap,e.lightMapIntensity.value=t.lightMapIntensity);t.aoMap&&(e.aoMap.value=t.aoMap,e.aoMapIntensity.value=t.aoMapIntensity);if(t.map)var r=t.map;else t.specularMap?r=t.specularMap:t.displacementMap?r=t.displacementMap:t.normalMap?r=t.normalMap:t.bumpMap?r=t.bumpMap:t.roughnessMap?r=t.roughnessMap:t.metalnessMap?r=t.metalnessMap:t.alphaMap?r=t.alphaMap:t.emissiveMap&&(r=t.emissiveMap);void 0!==r&&(r.isWebGLRenderTarget&&(r=r.texture),!0===r.matrixAutoUpdate&&r.updateMatrix(),e.uvTransform.value.copy(r.matrix))}function m(e,t){e.specular.value=t.specular;e.shininess.value=Math.max(t.shininess,1e-4);t.emissiveMap&&(e.emissiveMap.value=t.emissiveMap);t.bumpMap&&(e.bumpMap.value=t.bumpMap,e.bumpScale.value=t.bumpScale,1===t.side&&(e.bumpScale.value*=-1));t.normalMap&&(e.normalMap.value=t.normalMap,e.normalScale.value.copy(t.normalScale),1===t.side&&e.normalScale.value.negate());t.displacementMap&&(e.displacementMap.value=t.displacementMap,e.displacementScale.value=t.displacementScale,e.displacementBias.value=t.displacementBias)}function g(e,t){e.roughness.value=t.roughness;e.metalness.value=t.metalness;t.roughnessMap&&(e.roughnessMap.value=t.roughnessMap);t.metalnessMap&&(e.metalnessMap.value=t.metalnessMap);t.emissiveMap&&(e.emissiveMap.value=t.emissiveMap);t.bumpMap&&(e.bumpMap.value=t.bumpMap,e.bumpScale.value=t.bumpScale,1===t.side&&(e.bumpScale.value*=-1));t.normalMap&&(e.normalMap.value=t.normalMap,e.normalScale.value.copy(t.normalScale),1===t.side&&e.normalScale.value.negate());t.displacementMap&&(e.displacementMap.value=t.displacementMap,e.displacementScale.value=t.displacementScale,e.displacementBias.value=t.displacementBias);t.envMap&&(e.envMapIntensity.value=t.envMapIntensity)}console.log("THREE.WebGLRenderer","95");e=e||{};var i=void 0!==e.canvas?e.canvas:document.createElementNS("http://www.w3.org/1999/xhtml","canvas"),o=void 0!==e.context?e.context:null,u=void 0!==e.alpha?e.alpha:!1,c=void 0!==e.depth?e.depth:!0,y=void 0!==e.stencil?e.stencil:!0,_=void 0!==e.antialias?e.antialias:!1,b=void 0!==e.premultipliedAlpha?e.premultipliedAlpha:!0,x=void 0!==e.preserveDrawingBuffer?e.preserveDrawingBuffer:!1,M=void 0!==e.powerPreference?e.powerPreference:"default",E=null,C=null;this.domElement=i;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 T=this,O=!1,P=null,A=null,j=null,R=-1;var L=w=null;var I=!1;var N=null,D=null,k=new Se,B=new Se,F=null,$=0,z=i.width,U=i.height,G=1,V=new Se(0,0,z,U),H=new Se(0,0,z,U),q=!1,W=new Ee,X=new je,Y=!1,K=!1,Z=new xe,J=new we;try{u={alpha:u,depth:c,stencil:y,antialias:_,premultipliedAlpha:b,preserveDrawingBuffer:x,powerPreference:M};i.addEventListener("webglcontextlost",r,!1);i.addEventListener("webglcontextrestored",n,!1);var Q=o||i.getContext("webgl",u)||i.getContext("experimental-webgl",u);if(null===Q){if(null!==i.getContext("webgl"))throw Error("Error creating WebGL context with your selected attributes.");throw Error("Error creating WebGL context.")}void 0===Q.getShaderPrecisionFormat&&(Q.getShaderPrecisionFormat=function(){return{rangeMin:1,rangeMax:1,precision:1}})}catch(e){console.error("THREE.WebGLRenderer: "+e.message)}var ee,te,re,ne,ie,oe,ae,se,ue,ce,he,le,pe,fe,de,ve,me;t();var ge="xr"in navigator?new bt(T):new _t(T);this.vr=ge;var ye=new pt(T,ue,te.maxTextureSize);this.shadowMap=ye;this.getContext=function(){return Q};this.getContextAttributes=function(){return Q.getContextAttributes()};this.forceContextLoss=function(){var e=ee.get("WEBGL_lose_context");e&&e.loseContext()};this.forceContextRestore=function(){var e=ee.get("WEBGL_lose_context");e&&e.restoreContext()};this.getPixelRatio=function(){return G};this.setPixelRatio=function(e){void 0!==e&&(G=e,this.setSize(z,U,!1))};this.getSize=function(){return{width:z,height:U}};this.setSize=function(e,t,r){ge.isPresenting()?console.warn("THREE.WebGLRenderer: Can't change size while VR device is presenting."):(z=e,U=t,i.width=e*G,i.height=t*G,!1!==r&&(i.style.width=e+"px",i.style.height=t+"px"),this.setViewport(0,0,e,t))};this.getDrawingBufferSize=function(){return{width:z*G,height:U*G}};this.setDrawingBufferSize=function(e,t,r){z=e;U=t;G=r;i.width=e*r;i.height=t*r;this.setViewport(0,0,e,t)};this.getCurrentViewport=function(){return k};this.setViewport=function(e,t,r,n){V.set(e,U-t-n,r,n);re.viewport(k.copy(V).multiplyScalar(G))};this.setScissor=function(e,t,r,n){H.set(e,U-t-n,r,n);re.scissor(B.copy(H).multiplyScalar(G))};this.setScissorTest=function(e){re.setScissorTest(q=e)};this.getClearColor=function(){return pe.getClearColor()};this.setClearColor=function(){pe.setClearColor.apply(pe,arguments)};this.getClearAlpha=function(){return pe.getClearAlpha()};this.setClearAlpha=function(){pe.setClearAlpha.apply(pe,arguments)};this.clear=function(e,t,r){var n=0;if(void 0===e||e)n|=Q.COLOR_BUFFER_BIT;if(void 0===t||t)n|=Q.DEPTH_BUFFER_BIT;if(void 0===r||r)n|=Q.STENCIL_BUFFER_BIT;Q.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(e,t,r,n){this.setRenderTarget(e);this.clear(t,r,n)};this.dispose=function(){i.removeEventListener("webglcontextlost",r,!1);i.removeEventListener("webglcontextrestored",n,!1);he.dispose();le.dispose();ie.dispose();ue.dispose();ge.dispose();be.stop()};this.renderBufferImmediate=function(e,t){re.initAttributes();var r=ie.get(e);e.hasPositions&&!r.position&&(r.position=Q.createBuffer());e.hasNormals&&!r.normal&&(r.normal=Q.createBuffer());e.hasUvs&&!r.uv&&(r.uv=Q.createBuffer());e.hasColors&&!r.color&&(r.color=Q.createBuffer());t=t.getAttributes();e.hasPositions&&(Q.bindBuffer(Q.ARRAY_BUFFER,r.position),Q.bufferData(Q.ARRAY_BUFFER,e.positionArray,Q.DYNAMIC_DRAW),re.enableAttribute(t.position),Q.vertexAttribPointer(t.position,3,Q.FLOAT,!1,0,0));e.hasNormals&&(Q.bindBuffer(Q.ARRAY_BUFFER,r.normal),Q.bufferData(Q.ARRAY_BUFFER,e.normalArray,Q.DYNAMIC_DRAW),re.enableAttribute(t.normal),Q.vertexAttribPointer(t.normal,3,Q.FLOAT,!1,0,0));e.hasUvs&&(Q.bindBuffer(Q.ARRAY_BUFFER,r.uv),Q.bufferData(Q.ARRAY_BUFFER,e.uvArray,Q.DYNAMIC_DRAW),re.enableAttribute(t.uv),Q.vertexAttribPointer(t.uv,2,Q.FLOAT,!1,0,0));e.hasColors&&(Q.bindBuffer(Q.ARRAY_BUFFER,r.color),Q.bufferData(Q.ARRAY_BUFFER,e.colorArray,Q.DYNAMIC_DRAW),re.enableAttribute(t.color),Q.vertexAttribPointer(t.color,3,Q.FLOAT,!1,0,0));re.disableUnusedAttributes();Q.drawArrays(Q.TRIANGLES,0,e.count);e.count=0};this.renderBufferDirect=function(e,t,r,n,i,o){var a=i.isMesh&&0>i.normalMatrix.determinant();re.setMaterial(n,a);var s=S(e,t,n,i),u=!1;if(w!==r.id||L!==s.id||I!==(!0===n.wireframe))w=r.id,L=s.id,I=!0===n.wireframe,u=!0;i.morphTargetInfluences&&(fe.update(i,r,n,s),u=!0);a=r.index;var c=r.attributes.position;t=1;!0===n.wireframe&&(a=se.getWireframeAttribute(r),t=2);e=de;if(null!==a){var h=ae.get(a);e=ve;e.setIndex(h)}if(u){if(r&&r.isInstancedBufferGeometry&!te.isWebGL2&&null===ee.get("ANGLE_instanced_arrays"))console.error("THREE.WebGLRenderer.setupVertexAttributes: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.");else{re.initAttributes();u=r.attributes;s=s.getAttributes();var l=n.defaultAttributeValues;for(x in s){var p=s[x];if(0<=p){var f=u[x];if(void 0!==f){var d=f.normalized,v=f.itemSize,m=ae.get(f);if(void 0!==m){var g=m.buffer,y=m.type;m=m.bytesPerElement;if(f.isInterleavedBufferAttribute){var _=f.data,b=_.stride;f=f.offset;_&&_.isInstancedInterleavedBuffer?(re.enableAttributeAndDivisor(p,_.meshPerAttribute),void 0===r.maxInstancedCount&&(r.maxInstancedCount=_.meshPerAttribute*_.count)):re.enableAttribute(p);Q.bindBuffer(Q.ARRAY_BUFFER,g);Q.vertexAttribPointer(p,v,y,d,b*m,f*m)}else f.isInstancedBufferAttribute?(re.enableAttributeAndDivisor(p,f.meshPerAttribute),void 0===r.maxInstancedCount&&(r.maxInstancedCount=f.meshPerAttribute*f.count)):re.enableAttribute(p),Q.bindBuffer(Q.ARRAY_BUFFER,g),Q.vertexAttribPointer(p,v,y,d,0,0)}}else if(void 0!==l&&(d=l[x],void 0!==d))switch(d.length){case 2:Q.vertexAttrib2fv(p,d);break;case 3:Q.vertexAttrib3fv(p,d);break;case 4:Q.vertexAttrib4fv(p,d);break;default:Q.vertexAttrib1fv(p,d)}}}re.disableUnusedAttributes()}null!==a&&Q.bindBuffer(Q.ELEMENT_ARRAY_BUFFER,h.buffer)}h=Infinity;null!==a?h=a.count:void 0!==c&&(h=c.count);a=r.drawRange.start*t;c=null!==o?o.start*t:0;var x=Math.max(a,c);o=Math.max(0,Math.min(h,a+r.drawRange.count*t,c+(null!==o?o.count*t:Infinity))-1-x+1);if(0!==o){if(i.isMesh)if(!0===n.wireframe)re.setLineWidth(n.wireframeLinewidth*(null===A?G:1)),e.setMode(Q.LINES);else switch(i.drawMode){case 0:e.setMode(Q.TRIANGLES);break;case 1:e.setMode(Q.TRIANGLE_STRIP);break;case 2:e.setMode(Q.TRIANGLE_FAN)}else i.isLine?(n=n.linewidth,void 0===n&&(n=1),re.setLineWidth(n*(null===A?G:1)),i.isLineSegments?e.setMode(Q.LINES):i.isLineLoop?e.setMode(Q.LINE_LOOP):e.setMode(Q.LINE_STRIP)):i.isPoints?e.setMode(Q.POINTS):i.isSprite&&e.setMode(Q.TRIANGLES);r&&r.isInstancedBufferGeometry?0<r.maxInstancedCount&&e.renderInstances(r,x,o):e.render(x,o)}};this.compile=function(r,e){C=le.get(r,e);C.init();r.traverse(function(e){e.isLight&&(C.pushLight(e),e.castShadow&&C.pushShadow(e))});C.setupLights(e);r.traverse(function(e){if(e.material)if(Array.isArray(e.material))for(var t=0;t<e.material.length;t++)f(e.material[t],r.fog,e);else f(e.material,r.fog,e)})};var _e=null,be=new Ce;be.setAnimationLoop(function(e){ge.isPresenting()||_e&&_e(e)});"undefined"!==typeof window&&be.setContext(window);this.setAnimationLoop=function(e){_e=e;ge.setAnimationLoop(e);be.start()};this.render=function(e,t,r,n){if(!t||!t.isCamera)console.error("THREE.WebGLRenderer.render: camera is not an instance of THREE.Camera.");else if(!O){L=w=null;I=!1;R=-1;N=null;!0===e.autoUpdate&&e.updateMatrixWorld();null===t.parent&&t.updateMatrixWorld();ge.enabled&&(t=ge.getCamera(t));C=le.get(e,t);C.init();e.onBeforeRender(T,e,t,r);Z.multiplyMatrices(t.projectionMatrix,t.matrixWorldInverse);W.setFromMatrix(Z);K=this.localClippingEnabled;Y=X.init(this.clippingPlanes,K,t);E=he.get(e,t);E.init();p(e,t,T.sortObjects);!0===T.sortObjects&&E.sort();Y&&X.beginShadows();ye.render(C.state.shadowsArray,e,t);C.setupLights(t);Y&&X.endShadows();this.info.autoReset&&this.info.reset();void 0===r&&(r=null);this.setRenderTarget(r);pe.render(E,e,t,n);n=E.opaque;var i=E.transparent;if(e.overrideMaterial){var o=e.overrideMaterial;n.length&&a(n,e,t,o);i.length&&a(i,e,t,o)}else n.length&&a(n,e,t),i.length&&a(i,e,t);r&&oe.updateRenderTargetMipmap(r);re.buffers.depth.setTest(!0);re.buffers.depth.setMask(!0);re.buffers.color.setMask(!0);re.setPolygonOffset(!1);e.onAfterRender(T,e,t);ge.enabled&&ge.submitFrame();C=E=null}};this.allocTextureUnit=function(){var e=$;e>=te.maxTextures&&console.warn("THREE.WebGLRenderer: Trying to use "+e+" texture units while this GPU supports only "+te.maxTextures);$+=1;return e};this.setTexture2D=function(){var r=!1;return function(e,t){e&&e.isWebGLRenderTarget&&(r||(console.warn("THREE.WebGLRenderer.setTexture2D: don't use render targets as textures. Use their .texture property instead."),r=!0),e=e.texture);oe.setTexture2D(e,t)}}();this.setTexture=function(){var r=!1;return function(e,t){r||(console.warn("THREE.WebGLRenderer: .setTexture is deprecated, use setTexture2D instead."),r=!0);oe.setTexture2D(e,t)}}();this.setTextureCube=function(){var r=!1;return function(e,t){e&&e.isWebGLRenderTargetCube&&(r||(console.warn("THREE.WebGLRenderer.setTextureCube: don't use cube render targets as textures. Use their .texture property instead."),r=!0),e=e.texture);e&&e.isCubeTexture||Array.isArray(e.image)&&6===e.image.length?oe.setTextureCube(e,t):oe.setTextureCubeDynamic(e,t)}}();this.setFramebuffer=function(e){P=e};this.getRenderTarget=function(){return A};this.setRenderTarget=function(e){(A=e)&&void 0===ie.get(e).__webglFramebuffer&&oe.setupRenderTarget(e);var t=P,r=!1;e?(t=ie.get(e).__webglFramebuffer,e.isWebGLRenderTargetCube&&(t=t[e.activeCubeFace],r=!0),k.copy(e.viewport),B.copy(e.scissor),F=e.scissorTest):(k.copy(V).multiplyScalar(G),B.copy(H).multiplyScalar(G),F=q);j!==t&&(Q.bindFramebuffer(Q.FRAMEBUFFER,t),j=t);re.viewport(k);re.scissor(B);re.setScissorTest(F);r&&(r=ie.get(e.texture),Q.framebufferTexture2D(Q.FRAMEBUFFER,Q.COLOR_ATTACHMENT0,Q.TEXTURE_CUBE_MAP_POSITIVE_X+e.activeCubeFace,r.__webglTexture,e.activeMipMapLevel))};this.readRenderTargetPixels=function(e,t,r,n,i,o){if(e&&e.isWebGLRenderTarget){var a=ie.get(e).__webglFramebuffer;if(a){var s=!1;a!==j&&(Q.bindFramebuffer(Q.FRAMEBUFFER,a),s=!0);try{var u=e.texture,c=u.format,h=u.type;1023!==c&&me.convert(c)!==Q.getParameter(Q.IMPLEMENTATION_COLOR_READ_FORMAT)?console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in RGBA or implementation defined format."):1009===h||me.convert(h)===Q.getParameter(Q.IMPLEMENTATION_COLOR_READ_TYPE)||1015===h&&(te.isWebGL2||ee.get("OES_texture_float")||ee.get("WEBGL_color_buffer_float"))||1016===h&&(te.isWebGL2?ee.get("EXT_color_buffer_float"):ee.get("EXT_color_buffer_half_float"))?Q.checkFramebufferStatus(Q.FRAMEBUFFER)===Q.FRAMEBUFFER_COMPLETE?0<=t&&t<=e.width-n&&0<=r&&r<=e.height-i&&Q.readPixels(t,r,n,i,me.convert(c),me.convert(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&&Q.bindFramebuffer(Q.FRAMEBUFFER,j)}}}else console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.")};this.copyFramebufferToTexture=function(e,t,r){var n=t.image.width,i=t.image.height,o=me.convert(t.format);this.setTexture2D(t,0);Q.copyTexImage2D(Q.TEXTURE_2D,r||0,o,e.x,e.y,n,i,0)};this.copyTextureToTexture=function(e,t,r,n){var i=t.image.width,o=t.image.height,a=me.convert(r.format),s=me.convert(r.type);this.setTexture2D(r,0);t.isDataTexture?Q.texSubImage2D(Q.TEXTURE_2D,n||0,e.x,e.y,i,o,a,s,t.image.data):Q.texSubImage2D(Q.TEXTURE_2D,n||0,e.x,e.y,a,s,t.image)}}function wt(e,t){this.name="";this.color=new w(e);this.density=void 0!==t?t:25e-5}function St(e,t,r){this.name="";this.color=new w(e);this.near=void 0!==t?t:1;this.far=void 0!==r?r:1e3}function Mt(){h.call(this);this.type="Scene";this.overrideMaterial=this.fog=this.background=null;this.autoUpdate=!0}function Et(e,t){this.array=e;this.stride=t;this.count=void 0!==e?e.length/t:0;this.dynamic=!1;this.updateRange={offset:0,count:-1};this.version=0}function Ct(e,t,r,n){this.data=e;this.itemSize=t;this.offset=r;this.normalized=!0===n}function Tt(e){I.call(this);this.type="SpriteMaterial";this.color=new w(16777215);this.map=null;this.rotation=0;this.lights=!1;this.transparent=!0;this.setValues(e)}function Ot(e){h.call(this);this.type="Sprite";if(void 0===So){So=new A;var t=new Float32Array([-.5,-.5,0,0,0,.5,-.5,0,1,0,.5,.5,0,1,1,-.5,.5,0,0,1]);t=new Et(t,5);So.setIndex([0,1,2,0,2,3]);So.addAttribute("position",new Ct(t,3,0,!1));So.addAttribute("uv",new Ct(t,2,3,!1))}this.geometry=So;this.material=void 0!==e?e:new Tt;this.center=new H(.5,.5)}function Pt(){h.call(this);this.type="LOD";Object.defineProperties(this,{levels:{enumerable:!0,value:[]}})}function At(e,t){e=e||[];this.bones=e.slice(0);this.boneMatrices=new Float32Array(16*this.bones.length);if(void 0===t)this.calculateInverses();else if(this.bones.length===t.length)this.boneInverses=t.slice(0);else for(console.warn("THREE.Skeleton boneInverses is the wrong length."),this.boneInverses=[],e=0,t=this.bones.length;e<t;e++)this.boneInverses.push(new xe)}function jt(){h.call(this);this.type="Bone"}function Rt(e,t){$.call(this,e,t);this.type="SkinnedMesh";this.bindMode="attached";this.bindMatrix=new xe;this.bindMatrixInverse=new xe;e=this.initBones();e=new At(e);this.bind(e,this.matrixWorld);this.normalizeSkinWeights()}function Lt(e){I.call(this);this.type="LineBasicMaterial";this.color=new w(16777215);this.linewidth=1;this.linejoin=this.linecap="round";this.lights=!1;this.setValues(e)}function It(e,t,r){1===r&&console.error("THREE.Line: parameter THREE.LinePieces no longer supported. Use THREE.LineSegments instead.");h.call(this);this.type="Line";this.geometry=void 0!==e?e:new A;this.material=void 0!==t?t:new Lt({color:16777215*Math.random()})}function Nt(e,t){It.call(this,e,t);this.type="LineSegments"}function Dt(e,t){It.call(this,e,t);this.type="LineLoop"}function kt(e){I.call(this);this.type="PointsMaterial";this.color=new w(16777215);this.map=null;this.size=1;this.sizeAttenuation=!0;this.lights=this.morphTargets=!1;this.setValues(e)}function Bt(e,t){h.call(this);this.type="Points";this.geometry=void 0!==e?e:new A;this.material=void 0!==t?t:new kt({color:16777215*Math.random()})}function Ft(e,t,r,n,i,o,a,s,u){p.call(this,e,t,r,n,i,o,a,s,u);this.generateMipmaps=!1}function $t(e,t,r,n,i,o,a,s,u,c,h,l){p.call(this,null,o,a,s,u,c,n,i,h,l);this.image={width:t,height:r};this.mipmaps=e;this.generateMipmaps=this.flipY=!1}function zt(e,t,r,n,i,o,a,s,u){p.call(this,e,t,r,n,i,o,a,s,u);this.needsUpdate=!0}function Ut(e,t,r,n,i,o,a,s,u,c){c=void 0!==c?c:1026;if(1026!==c&&1027!==c)throw Error("DepthTexture format must be either THREE.DepthFormat or THREE.DepthStencilFormat");void 0===r&&1026===c&&(r=1012);void 0===r&&1027===c&&(r=1020);p.call(this,null,n,i,o,a,s,c,r,u);this.image={width:e,height:t};this.magFilter=void 0!==a?a:1003;this.minFilter=void 0!==s?s:1003;this.generateMipmaps=this.flipY=!1}function Gt(e){A.call(this);this.type="WireframeGeometry";var t=[],r,n,i,o=[0,0],a={},s=["a","b","c"];if(e&&e.isGeometry){var u=e.faces;var c=0;for(n=u.length;c<n;c++){var h=u[c];for(r=0;3>r;r++){var l=h[s[r]];var p=h[s[(r+1)%3]];o[0]=Math.min(l,p);o[1]=Math.max(l,p);l=o[0]+","+o[1];void 0===a[l]&&(a[l]={index1:o[0],index2:o[1]})}}for(l in a)c=a[l],s=e.vertices[c.index1],t.push(s.x,s.y,s.z),s=e.vertices[c.index2],t.push(s.x,s.y,s.z)}else if(e&&e.isBufferGeometry)if(s=new we,null!==e.index){u=e.attributes.position;h=e.index;var f=e.groups;0===f.length&&(f=[{start:0,count:h.count,materialIndex:0}]);e=0;for(i=f.length;e<i;++e)for(c=f[e],r=c.start,n=c.count,c=r,n=r+n;c<n;c+=3)for(r=0;3>r;r++)l=h.getX(c+r),p=h.getX(c+(r+1)%3),o[0]=Math.min(l,p),o[1]=Math.max(l,p),l=o[0]+","+o[1],void 0===a[l]&&(a[l]={index1:o[0],index2:o[1]});for(l in a)c=a[l],s.fromBufferAttribute(u,c.index1),t.push(s.x,s.y,s.z),s.fromBufferAttribute(u,c.index2),t.push(s.x,s.y,s.z)}else for(u=e.attributes.position,c=0,n=u.count/3;c<n;c++)for(r=0;3>r;r++)a=3*c+r,s.fromBufferAttribute(u,a),t.push(s.x,s.y,s.z),a=3*c+(r+1)%3,s.fromBufferAttribute(u,a),t.push(s.x,s.y,s.z);this.addAttribute("position",new P(t,3))}function Vt(e,t,r){S.call(this);this.type="ParametricGeometry";this.parameters={func:e,slices:t,stacks:r};this.fromBufferGeometry(new Ht(e,t,r));this.mergeVertices()}function Ht(e,t,r){A.call(this);this.type="ParametricBufferGeometry";this.parameters={func:e,slices:t,stacks:r};var n=[],i=[],o=[],a=[],s=new we,u=new we,c=new we,h=new we,l=new we,p,f;3>e.length&&console.error("THREE.ParametricGeometry: Function must now modify a Vector3 as third parameter.");var d=t+1;for(p=0;p<=r;p++){var v=p/r;for(f=0;f<=t;f++){var m=f/t;e(m,v,u);i.push(u.x,u.y,u.z);0<=m-1e-5?(e(m-1e-5,v,c),h.subVectors(u,c)):(e(m+1e-5,v,c),h.subVectors(c,u));0<=v-1e-5?(e(m,v-1e-5,c),l.subVectors(u,c)):(e(m,v+1e-5,c),l.subVectors(c,u));s.crossVectors(h,l).normalize();o.push(s.x,s.y,s.z);a.push(m,v)}}for(p=0;p<r;p++)for(f=0;f<t;f++)e=p*d+f+1,s=(p+1)*d+f+1,u=(p+1)*d+f,n.push(p*d+f,e,u),n.push(e,s,u);this.setIndex(n);this.addAttribute("position",new P(i,3));this.addAttribute("normal",new P(o,3));this.addAttribute("uv",new P(a,2))}function qt(e,t,r,n){S.call(this);this.type="PolyhedronGeometry";this.parameters={vertices:e,indices:t,radius:r,detail:n};this.fromBufferGeometry(new Wt(e,t,r,n));this.mergeVertices()}function Wt(r,v,e,t){function m(e){l.push(e.x,e.y,e.z)}function g(e,t){e*=3;t.x=r[e+0];t.y=r[e+1];t.z=r[e+2]}function h(e,t,r,n){0>n&&1===e.x&&(p[t]=e.x-1);0===r.x&&0===r.z&&(p[t]=n/2/Math.PI+.5)}A.call(this);this.type="PolyhedronBufferGeometry";this.parameters={vertices:r,indices:v,radius:e,detail:t};e=e||1;t=t||0;var l=[],p=[];(function(e){for(var t=new we,r=new we,n=new we,i=0;i<v.length;i+=3){g(v[i+0],t);g(v[i+1],r);g(v[i+2],n);var o,a,s=t,u=r,c=n,h=Math.pow(2,e),l=[];for(a=0;a<=h;a++){l[a]=[];var p=s.clone().lerp(c,a/h),f=u.clone().lerp(c,a/h),d=h-a;for(o=0;o<=d;o++)l[a][o]=0===o&&a===h?p:p.clone().lerp(f,o/d)}for(a=0;a<h;a++)for(o=0;o<2*(h-a)-1;o++)s=Math.floor(o/2),0===o%2?(m(l[a][s+1]),m(l[a+1][s]),m(l[a][s])):(m(l[a][s+1]),m(l[a+1][s+1]),m(l[a+1][s]))}})(t);(function(e){for(var t=new we,r=0;r<l.length;r+=3)t.x=l[r+0],t.y=l[r+1],t.z=l[r+2],t.normalize().multiplyScalar(e),l[r+0]=t.x,l[r+1]=t.y,l[r+2]=t.z})(e);(function(){for(var e=new we,t=0;t<l.length;t+=3)e.x=l[t+0],e.y=l[t+1],e.z=l[t+2],p.push(Math.atan2(e.z,-e.x)/2/Math.PI+.5,1-(Math.atan2(-e.y,Math.sqrt(e.x*e.x+e.z*e.z))/Math.PI+.5));e=new we;t=new we;for(var r=new we,n=new we,i=new H,o=new H,a=new H,s=0,u=0;s<l.length;s+=9,u+=6){e.set(l[s+0],l[s+1],l[s+2]);t.set(l[s+3],l[s+4],l[s+5]);r.set(l[s+6],l[s+7],l[s+8]);i.set(p[u+0],p[u+1]);o.set(p[u+2],p[u+3]);a.set(p[u+4],p[u+5]);n.copy(e).add(t).add(r).divideScalar(3);var c=Math.atan2(n.z,-n.x);h(i,u+0,e,c);h(o,u+2,t,c);h(a,u+4,r,c)}for(e=0;e<p.length;e+=6)t=p[e+0],r=p[e+2],n=p[e+4],i=Math.min(t,r,n),.9<Math.max(t,r,n)&&.1>i&&(.2>t&&(p[e+0]+=1),.2>r&&(p[e+2]+=1),.2>n&&(p[e+4]+=1))})();this.addAttribute("position",new P(l,3));this.addAttribute("normal",new P(l.slice(),3));this.addAttribute("uv",new P(p,2));0===t?this.computeVertexNormals():this.normalizeNormals()}function Xt(e,t){S.call(this);this.type="TetrahedronGeometry";this.parameters={radius:e,detail:t};this.fromBufferGeometry(new Yt(e,t));this.mergeVertices()}function Yt(e,t){Wt.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],e,t);this.type="TetrahedronBufferGeometry";this.parameters={radius:e,detail:t}}function Kt(e,t){S.call(this);this.type="OctahedronGeometry";this.parameters={radius:e,detail:t};this.fromBufferGeometry(new Zt(e,t));this.mergeVertices()}function Zt(e,t){Wt.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],e,t);this.type="OctahedronBufferGeometry";this.parameters={radius:e,detail:t}}function Jt(e,t){S.call(this);this.type="IcosahedronGeometry";this.parameters={radius:e,detail:t};this.fromBufferGeometry(new Qt(e,t));this.mergeVertices()}function Qt(e,t){var r=(1+Math.sqrt(5))/2;Wt.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],e,t);this.type="IcosahedronBufferGeometry";this.parameters={radius:e,detail:t}}function er(e,t){S.call(this);this.type="DodecahedronGeometry";this.parameters={radius:e,detail:t};this.fromBufferGeometry(new tr(e,t));this.mergeVertices()}function tr(e,t){var r=(1+Math.sqrt(5))/2,n=1/r;Wt.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],e,t);this.type="DodecahedronBufferGeometry";this.parameters={radius:e,detail:t}}function rr(e,t,r,n,i,o){S.call(this);this.type="TubeGeometry";this.parameters={path:e,tubularSegments:t,radius:r,radialSegments:n,closed:i};void 0!==o&&console.warn("THREE.TubeGeometry: taper has been removed.");e=new nr(e,t,r,n,i);this.tangents=e.tangents;this.normals=e.normals;this.binormals=e.binormals;this.fromBufferGeometry(e);this.mergeVertices()}function nr(i,o,a,s,e){function t(e){l=i.getPointAt(e/o,l);var t=u.normals[e];e=u.binormals[e];for(p=0;p<=s;p++){var r=p/s*Math.PI*2,n=Math.sin(r);r=-Math.cos(r);h.x=r*t.x+n*e.x;h.y=r*t.y+n*e.y;h.z=r*t.z+n*e.z;h.normalize();d.push(h.x,h.y,h.z);c.x=l.x+a*h.x;c.y=l.y+a*h.y;c.z=l.z+a*h.z;f.push(c.x,c.y,c.z)}}A.call(this);this.type="TubeBufferGeometry";this.parameters={path:i,tubularSegments:o,radius:a,radialSegments:s,closed:e};o=o||64;a=a||1;s=s||8;e=e||!1;var u=i.computeFrenetFrames(o,e);this.tangents=u.tangents;this.normals=u.normals;this.binormals=u.binormals;var c=new we,h=new we,r=new H,l=new we,n,p,f=[],d=[],v=[],m=[];for(n=0;n<o;n++)t(n);t(!1===e?o:0);for(n=0;n<=o;n++)for(p=0;p<=s;p++)r.x=n/o,r.y=p/s,v.push(r.x,r.y);(function(){for(p=1;p<=o;p++)for(n=1;n<=s;n++){var e=(s+1)*p+(n-1),t=(s+1)*p+n,r=(s+1)*(p-1)+n;m.push((s+1)*(p-1)+(n-1),e,r);m.push(e,t,r)}})();this.setIndex(m);this.addAttribute("position",new P(f,3));this.addAttribute("normal",new P(d,3));this.addAttribute("uv",new P(v,2))}function ir(e,t,r,n,i,o,a){S.call(this);this.type="TorusKnotGeometry";this.parameters={radius:e,tube:t,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 or(e,t,r,n,i,o));this.mergeVertices()}function or(e,t,r,n,i,o){function a(e,t,r,n,i){var o=Math.sin(e);t=r/t*e;r=Math.cos(t);i.x=n*(2+r)*.5*Math.cos(e);i.y=n*(2+r)*o*.5;i.z=n*Math.sin(t)*.5}A.call(this);this.type="TorusKnotBufferGeometry";this.parameters={radius:e,tube:t,tubularSegments:r,radialSegments:n,p:i,q:o};e=e||1;t=t||.4;r=Math.floor(r)||64;n=Math.floor(n)||8;i=i||2;o=o||3;var s=[],u=[],c=[],h=[],l,p=new we,f=new we,d=new we,v=new we,m=new we,g=new we,y=new we;for(l=0;l<=r;++l){var _=l/r*i*Math.PI*2;a(_,i,o,e,d);a(_+.01,i,o,e,v);g.subVectors(v,d);y.addVectors(v,d);m.crossVectors(g,y);y.crossVectors(m,g);m.normalize();y.normalize();for(_=0;_<=n;++_){var b=_/n*Math.PI*2,x=-t*Math.cos(b);b=t*Math.sin(b);p.x=d.x+(x*y.x+b*m.x);p.y=d.y+(x*y.y+b*m.y);p.z=d.z+(x*y.z+b*m.z);u.push(p.x,p.y,p.z);f.subVectors(p,d).normalize();c.push(f.x,f.y,f.z);h.push(l/r);h.push(_/n)}}for(_=1;_<=r;_++)for(l=1;l<=n;l++)e=(n+1)*_+(l-1),t=(n+1)*_+l,i=(n+1)*(_-1)+l,s.push((n+1)*(_-1)+(l-1),e,i),s.push(e,t,i);this.setIndex(s);this.addAttribute("position",new P(u,3));this.addAttribute("normal",new P(c,3));this.addAttribute("uv",new P(h,2))}function ar(e,t,r,n,i){S.call(this);this.type="TorusGeometry";this.parameters={radius:e,tube:t,radialSegments:r,tubularSegments:n,arc:i};this.fromBufferGeometry(new sr(e,t,r,n,i));this.mergeVertices()}function sr(e,t,r,n,i){A.call(this);this.type="TorusBufferGeometry";this.parameters={radius:e,tube:t,radialSegments:r,tubularSegments:n,arc:i};e=e||1;t=t||.4;r=Math.floor(r)||8;n=Math.floor(n)||6;i=i||2*Math.PI;var o=[],a=[],s=[],u=[],c=new we,h=new we,l=new we,p,f;for(p=0;p<=r;p++)for(f=0;f<=n;f++){var d=f/n*i,v=p/r*Math.PI*2;h.x=(e+t*Math.cos(v))*Math.cos(d);h.y=(e+t*Math.cos(v))*Math.sin(d);h.z=t*Math.sin(v);a.push(h.x,h.y,h.z);c.x=e*Math.cos(d);c.y=e*Math.sin(d);l.subVectors(h,c).normalize();s.push(l.x,l.y,l.z);u.push(f/n);u.push(p/r)}for(p=1;p<=r;p++)for(f=1;f<=n;f++)e=(n+1)*(p-1)+f-1,t=(n+1)*(p-1)+f,i=(n+1)*p+f,o.push((n+1)*p+f-1,e,i),o.push(e,t,i);this.setIndex(o);this.addAttribute("position",new P(a,3));this.addAttribute("normal",new P(s,3));this.addAttribute("uv",new P(u,2))}function ur(e,t,r,n,i){for(var o,a=0,s=t,u=r-n;s<r;s+=n)a+=(e[u]-e[s])*(e[s+1]+e[u+1]),u=s;if(i===0<a)for(i=t;i<r;i+=n)o=xr(i,e[i],e[i+1],o);else for(i=r-n;i>=t;i-=n)o=xr(i,e[i],e[i+1],o);o&&gr(o,o.next)&&(wr(o),o=o.next);return o}function cr(e,t){if(!e)return e;t||(t=e);do{var r=!1;if(e.steiner||!gr(e,e.next)&&0!==mr(e.prev,e,e.next))e=e.next;else{wr(e);e=t=e.prev;if(e===e.next)break;r=!0}}while(r||e!==t);return t}function hr(e,t,r,n,i,o,a){if(e){if(!a&&o){var s=e,u=s;do{null===u.z&&(u.z=fr(u.x,u.y,n,i,o)),u.prevZ=u.prev,u=u.nextZ=u.next}while(u!==s);u.prevZ.nextZ=null;u.prevZ=null;s=u;var c,h,l,p,f=1;do{u=s;var d=s=null;for(h=0;u;){h++;var v=u;for(c=l=0;c<f&&(l++,v=v.nextZ,v);c++);for(p=f;0<l||0<p&&v;)0!==l&&(0===p||!v||u.z<=v.z)?(c=u,u=u.nextZ,l--):(c=v,v=v.nextZ,p--),d?d.nextZ=c:s=c,c.prevZ=d,d=c;u=v}d.nextZ=null;f*=2}while(1<h)}for(s=e;e.prev!==e.next;){u=e.prev;v=e.next;if(o)e:{d=e;p=n;var m=i,g=o;h=d.prev;l=d;f=d.next;if(0<=mr(h,l,f))d=!1;else{var y=h.x>l.x?h.x>f.x?h.x:f.x:l.x>f.x?l.x:f.x,_=h.y>l.y?h.y>f.y?h.y:f.y:l.y>f.y?l.y:f.y;c=fr(h.x<l.x?h.x<f.x?h.x:f.x:l.x<f.x?l.x:f.x,h.y<l.y?h.y<f.y?h.y:f.y:l.y<f.y?l.y:f.y,p,m,g);p=fr(y,_,p,m,g);for(m=d.nextZ;m&&m.z<=p;){if(m!==d.prev&&m!==d.next&&vr(h.x,h.y,l.x,l.y,f.x,f.y,m.x,m.y)&&0<=mr(m.prev,m,m.next)){d=!1;break e}m=m.nextZ}for(m=d.prevZ;m&&m.z>=c;){if(m!==d.prev&&m!==d.next&&vr(h.x,h.y,l.x,l.y,f.x,f.y,m.x,m.y)&&0<=mr(m.prev,m,m.next)){d=!1;break e}m=m.prevZ}d=!0}}else e:if(d=e,h=d.prev,l=d,f=d.next,0<=mr(h,l,f))d=!1;else{for(c=d.next.next;c!==d.prev;){if(vr(h.x,h.y,l.x,l.y,f.x,f.y,c.x,c.y)&&0<=mr(c.prev,c,c.next)){d=!1;break e}c=c.next}d=!0}if(d)t.push(u.i/r),t.push(e.i/r),t.push(v.i/r),wr(e),s=e=v.next;else if(e=v,e===s){if(!a)hr(cr(e),t,r,n,i,o,1);else if(1===a){a=t;s=r;u=e;do{v=u.prev,d=u.next.next,!gr(v,d)&&yr(v,u,u.next,d)&&_r(v,d)&&_r(d,v)&&(a.push(v.i/s),a.push(u.i/s),a.push(d.i/s),wr(u),wr(u.next),u=e=d),u=u.next}while(u!==e);e=u;hr(e,t,r,n,i,o,2)}else if(2===a)e:{a=e;do{for(s=a.next.next;s!==a.prev;){if(u=a.i!==s.i){u=a;v=s;if(d=u.next.i!==v.i&&u.prev.i!==v.i){t:{d=u;do{if(d.i!==u.i&&d.next.i!==u.i&&d.i!==v.i&&d.next.i!==v.i&&yr(d,d.next,u,v)){d=!0;break t}d=d.next}while(d!==u);d=!1}d=!d}if(d=d&&_r(u,v)&&_r(v,u)){d=u;h=!1;l=(u.x+v.x)/2;v=(u.y+v.y)/2;do{d.y>v!==d.next.y>v&&d.next.y!==d.y&&l<(d.next.x-d.x)*(v-d.y)/(d.next.y-d.y)+d.x&&(h=!h),d=d.next}while(d!==u);d=h}u=d}if(u){e=br(a,s);a=cr(a,a.next);e=cr(e,e.next);hr(a,t,r,n,i,o);hr(e,t,r,n,i,o);break e}s=s.next}a=a.next}while(a!==e)}break}}}}function lr(e,t){return e.x-t.x}function pr(e,t){var r=t,n=e.x,i=e.y,o=-Infinity;do{if(i<=r.y&&i>=r.next.y&&r.next.y!==r.y){var a=r.x+(i-r.y)*(r.next.x-r.x)/(r.next.y-r.y);if(a<=n&&a>o){o=a;if(a===n){if(i===r.y)return r;if(i===r.next.y)return r.next}var s=r.x<r.next.x?r:r.next}}r=r.next}while(r!==t);if(!s)return null;if(n===o)return s.prev;t=s;a=s.x;var u=s.y,c=Infinity;for(r=s.next;r!==t;){if(n>=r.x&&r.x>=a&&n!==r.x&&vr(i<u?n:o,i,a,u,i<u?o:n,i,r.x,r.y)){var h=Math.abs(i-r.y)/(n-r.x);(h<c||h===c&&r.x>s.x)&&_r(r,e)&&(s=r,c=h)}r=r.next}return s}function fr(e,t,r,n,i){e=32767*(e-r)*i;t=32767*(t-n)*i;e=(e|e<<8)&16711935;e=(e|e<<4)&252645135;e=(e|e<<2)&858993459;t=(t|t<<8)&16711935;t=(t|t<<4)&252645135;t=(t|t<<2)&858993459;return(e|e<<1)&1431655765|((t|t<<1)&1431655765)<<1}function dr(e){var t=e,r=e;do{t.x<r.x&&(r=t),t=t.next}while(t!==e);return r}function vr(e,t,r,n,i,o,a,s){return 0<=(i-a)*(t-s)-(e-a)*(o-s)&&0<=(e-a)*(n-s)-(r-a)*(t-s)&&0<=(r-a)*(o-s)-(i-a)*(n-s)}function mr(e,t,r){return(t.y-e.y)*(r.x-t.x)-(t.x-e.x)*(r.y-t.y)}function gr(e,t){return e.x===t.x&&e.y===t.y}function yr(e,t,r,n){return gr(e,t)&&gr(r,n)||gr(e,n)&&gr(r,t)?!0:0<mr(e,t,r)!==0<mr(e,t,n)&&0<mr(r,n,e)!==0<mr(r,n,t)}function _r(e,t){return 0>mr(e.prev,e,e.next)?0<=mr(e,t,e.next)&&0<=mr(e,e.prev,t):0>mr(e,t,e.prev)||0>mr(e,e.next,t)}function br(e,t){var r=new Sr(e.i,e.x,e.y),n=new Sr(t.i,t.x,t.y),i=e.next,o=t.prev;e.next=t;t.prev=e;r.next=i;i.prev=r;n.next=r;r.prev=n;o.next=n;n.prev=o;return n}function xr(e,t,r,n){e=new Sr(e,t,r);n?(e.next=n.next,e.prev=n,n.next.prev=e,n.next=e):(e.prev=e,e.next=e);return e}function wr(e){e.next.prev=e.prev;e.prev.next=e.next;e.prevZ&&(e.prevZ.nextZ=e.nextZ);e.nextZ&&(e.nextZ.prevZ=e.prevZ)}function Sr(e,t,r){this.i=e;this.x=t;this.y=r;this.nextZ=this.prevZ=this.z=this.next=this.prev=null;this.steiner=!1}function Mr(e){var t=e.length;2<t&&e[t-1].equals(e[0])&&e.pop()}function Er(e,t){for(var r=0;r<t.length;r++)e.push(t[r].x),e.push(t[r].y)}function Cr(e,t){S.call(this);this.type="ExtrudeGeometry";this.parameters={shapes:e,options:t};this.fromBufferGeometry(new Tr(e,t));this.mergeVertices()}function Tr(e,z){function t(e){function t(e,t,r){t||console.error("THREE.ExtrudeGeometry: vec does not exist");return t.clone().multiplyScalar(r).add(e)}function r(e,t,r){var n=e.x-t.x;var i=e.y-t.y;var o=r.x-e.x;var a=r.y-e.y,s=n*n+i*i;if(Math.abs(n*a-i*o)>Number.EPSILON){var u=Math.sqrt(s),c=Math.sqrt(o*o+a*a);s=t.x-i/u;t=t.y+n/u;a=((r.x-a/c-s)*a-(r.y+o/c-t)*o)/(n*a-i*o);o=s+n*a-e.x;n=t+i*a-e.y;i=o*o+n*n;if(2>=i)return new H(o,n);i=Math.sqrt(i/2)}else e=!1,n>Number.EPSILON?o>Number.EPSILON&&(e=!0):n<-Number.EPSILON?o<-Number.EPSILON&&(e=!0):Math.sign(i)===Math.sign(a)&&(e=!0),e?(o=-i,i=Math.sqrt(s)):(o=n,n=i,i=Math.sqrt(s/2));return new H(o/i,n/i)}function n(e,t){for(I=e.length;0<=--I;){var r=I;var n=I-1;0>n&&(n=e.length-1);var i,o=p+2*v;for(i=0;i<o;i++){var a=j*i,s=j*(i+1),u=t+n+a,c=t+n+s;s=t+r+s;h(t+r+a);h(u);h(s);h(u);h(c);h(s);a=G.length/3;a=g.generateSideWallUV(U,G,a-6,a-3,a-2,a-1);l(a[0]);l(a[1]);l(a[3]);l(a[1]);l(a[2]);l(a[3])}}}function i(e,t,r){a.push(e);a.push(t);a.push(r)}function o(e,t,r){h(e);h(t);h(r);e=G.length/3;e=g.generateTopUV(U,G,e-3,e-2,e-1);l(e[0]);l(e[1]);l(e[2])}function h(e){G.push(a[3*e]);G.push(a[3*e+1]);G.push(a[3*e+2])}function l(e){V.push(e.x);V.push(e.y)}var a=[],s=void 0!==z.curveSegments?z.curveSegments:12,p=void 0!==z.steps?z.steps:1,u=void 0!==z.depth?z.depth:100,c=void 0!==z.bevelEnabled?z.bevelEnabled:!0,f=void 0!==z.bevelThickness?z.bevelThickness:6,d=void 0!==z.bevelSize?z.bevelSize:f-2,v=void 0!==z.bevelSegments?z.bevelSegments:3,m=z.extrudePath,g=void 0!==z.UVGenerator?z.UVGenerator:Co;void 0!==z.amount&&(console.warn("THREE.ExtrudeBufferGeometry: amount has been renamed to depth."),u=z.amount);var y=!1;if(m){var _=m.getSpacedPoints(p);y=!0;c=!1;var b=m.computeFrenetFrames(p,!1);var x=new we;var w=new we;var S=new we}c||(d=f=v=0);var M;s=e.extractPoints(s);e=s.shape;var E=s.holes;if(!Eo.isClockWise(e)){e=e.reverse();var C=0;for(M=E.length;C<M;C++){var T=E[C];Eo.isClockWise(T)&&(E[C]=T.reverse())}}var O=Eo.triangulateShape(e,E),P=e;C=0;for(M=E.length;C<M;C++)T=E[C],e=e.concat(T);var A,j=e.length,R,L=O.length;s=[];var I=0;var N=P.length;var D=N-1;for(A=I+1;I<N;I++,D++,A++)D===N&&(D=0),A===N&&(A=0),s[I]=r(P[I],P[D],P[A]);m=[];var k=s.concat();C=0;for(M=E.length;C<M;C++){T=E[C];var B=[];I=0;N=T.length;D=N-1;for(A=I+1;I<N;I++,D++,A++)D===N&&(D=0),A===N&&(A=0),B[I]=r(T[I],T[D],T[A]);m.push(B);k=k.concat(B)}for(D=0;D<v;D++){N=D/v;var F=f*Math.cos(N*Math.PI/2);A=d*Math.sin(N*Math.PI/2);I=0;for(N=P.length;I<N;I++){var $=t(P[I],s[I],A);i($.x,$.y,-F)}C=0;for(M=E.length;C<M;C++)for(T=E[C],B=m[C],I=0,N=T.length;I<N;I++)$=t(T[I],B[I],A),i($.x,$.y,-F)}A=d;for(I=0;I<j;I++)$=c?t(e[I],k[I],A):e[I],y?(w.copy(b.normals[0]).multiplyScalar($.x),x.copy(b.binormals[0]).multiplyScalar($.y),S.copy(_[0]).add(w).add(x),i(S.x,S.y,S.z)):i($.x,$.y,0);for(N=1;N<=p;N++)for(I=0;I<j;I++)$=c?t(e[I],k[I],A):e[I],y?(w.copy(b.normals[N]).multiplyScalar($.x),x.copy(b.binormals[N]).multiplyScalar($.y),S.copy(_[N]).add(w).add(x),i(S.x,S.y,S.z)):i($.x,$.y,u/p*N);for(D=v-1;0<=D;D--){N=D/v;F=f*Math.cos(N*Math.PI/2);A=d*Math.sin(N*Math.PI/2);I=0;for(N=P.length;I<N;I++)$=t(P[I],s[I],A),i($.x,$.y,u+F);C=0;for(M=E.length;C<M;C++)for(T=E[C],B=m[C],I=0,N=T.length;I<N;I++)$=t(T[I],B[I],A),y?i($.x,$.y+_[p-1].y,_[p-1].x+F):i($.x,$.y,u+F)}(function(){var e=G.length/3;if(c){var t=0*j;for(I=0;I<L;I++)R=O[I],o(R[2]+t,R[1]+t,R[0]+t);t=j*(p+2*v);for(I=0;I<L;I++)R=O[I],o(R[0]+t,R[1]+t,R[2]+t)}else{for(I=0;I<L;I++)R=O[I],o(R[2],R[1],R[0]);for(I=0;I<L;I++)R=O[I],o(R[0]+j*p,R[1]+j*p,R[2]+j*p)}U.addGroup(e,G.length/3-e,0)})();(function(){var e=G.length/3,t=0;n(P,t);t+=P.length;C=0;for(M=E.length;C<M;C++)T=E[C],n(T,t),t+=T.length;U.addGroup(e,G.length/3-e,1)})()}A.call(this);this.type="ExtrudeBufferGeometry";this.parameters={shapes:e,options:z};e=Array.isArray(e)?e:[e];for(var U=this,G=[],V=[],r=0,n=e.length;r<n;r++)t(e[r]);this.addAttribute("position",new P(G,3));this.addAttribute("uv",new P(V,2));this.computeVertexNormals()}function Or(e,t,r){r.shapes=[];if(Array.isArray(e))for(var n=0,i=e.length;n<i;n++)r.shapes.push(e[n].uuid);else r.shapes.push(e.uuid);void 0!==t.extrudePath&&(r.options.extrudePath=t.extrudePath.toJSON());return r}function Pr(e,t){S.call(this);this.type="TextGeometry";this.parameters={text:e,parameters:t};this.fromBufferGeometry(new Ar(e,t));this.mergeVertices()}function Ar(e,t){t=t||{};var r=t.font;if(!r||!r.isFont)return console.error("THREE.TextGeometry: font parameter is not an instance of THREE.Font."),new S;e=r.generateShapes(e,t.size);t.depth=void 0!==t.height?t.height:50;void 0===t.bevelThickness&&(t.bevelThickness=10);void 0===t.bevelSize&&(t.bevelSize=8);void 0===t.bevelEnabled&&(t.bevelEnabled=!1);Tr.call(this,e,t);this.type="TextBufferGeometry"}function jr(e,t,r,n,i,o,a){S.call(this);this.type="SphereGeometry";this.parameters={radius:e,widthSegments:t,heightSegments:r,phiStart:n,phiLength:i,thetaStart:o,thetaLength:a};this.fromBufferGeometry(new Rr(e,t,r,n,i,o,a));this.mergeVertices()}function Rr(e,t,r,n,i,o,a){A.call(this);this.type="SphereBufferGeometry";this.parameters={radius:e,widthSegments:t,heightSegments:r,phiStart:n,phiLength:i,thetaStart:o,thetaLength:a};e=e||1;t=Math.max(3,Math.floor(t)||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;var s=o+a,u,c,h=0,l=[],p=new we,f=new we,d=[],v=[],m=[],g=[];for(c=0;c<=r;c++){var y=[],_=c/r;for(u=0;u<=t;u++){var b=u/t;p.x=-e*Math.cos(n+b*i)*Math.sin(o+_*a);p.y=e*Math.cos(o+_*a);p.z=e*Math.sin(n+b*i)*Math.sin(o+_*a);v.push(p.x,p.y,p.z);f.set(p.x,p.y,p.z).normalize();m.push(f.x,f.y,f.z);g.push(b,1-_);y.push(h++)}l.push(y)}for(c=0;c<r;c++)for(u=0;u<t;u++)e=l[c][u+1],n=l[c][u],i=l[c+1][u],a=l[c+1][u+1],(0!==c||0<o)&&d.push(e,n,a),(c!==r-1||s<Math.PI)&&d.push(n,i,a);this.setIndex(d);this.addAttribute("position",new P(v,3));this.addAttribute("normal",new P(m,3));this.addAttribute("uv",new P(g,2))}function Lr(e,t,r,n,i,o){S.call(this);this.type="RingGeometry";this.parameters={innerRadius:e,outerRadius:t,thetaSegments:r,phiSegments:n,thetaStart:i,thetaLength:o};this.fromBufferGeometry(new Ir(e,t,r,n,i,o));this.mergeVertices()}function Ir(e,t,r,n,i,o){A.call(this);this.type="RingBufferGeometry";this.parameters={innerRadius:e,outerRadius:t,thetaSegments:r,phiSegments:n,thetaStart:i,thetaLength:o};e=e||.5;t=t||1;i=void 0!==i?i:0;o=void 0!==o?o:2*Math.PI;r=void 0!==r?Math.max(3,r):8;n=void 0!==n?Math.max(1,n):1;var a=[],s=[],u=[],c=[],h=e,l=(t-e)/n,p=new we,f=new H,d,v;for(d=0;d<=n;d++){for(v=0;v<=r;v++)e=i+v/r*o,p.x=h*Math.cos(e),p.y=h*Math.sin(e),s.push(p.x,p.y,p.z),u.push(0,0,1),f.x=(p.x/t+1)/2,f.y=(p.y/t+1)/2,c.push(f.x,f.y);h+=l}for(d=0;d<n;d++)for(t=d*(r+1),v=0;v<r;v++)e=v+t,i=e+r+1,o=e+r+2,h=e+1,a.push(e,i,h),a.push(i,o,h);this.setIndex(a);this.addAttribute("position",new P(s,3));this.addAttribute("normal",new P(u,3));this.addAttribute("uv",new P(c,2))}function Nr(e,t,r,n){S.call(this);this.type="LatheGeometry";this.parameters={points:e,segments:t,phiStart:r,phiLength:n};this.fromBufferGeometry(new Dr(e,t,r,n));this.mergeVertices()}function Dr(e,t,r,n){A.call(this);this.type="LatheBufferGeometry";this.parameters={points:e,segments:t,phiStart:r,phiLength:n};t=Math.floor(t)||12;r=r||0;n=n||2*Math.PI;n=eo.clamp(n,0,2*Math.PI);var i=[],o=[],a=[],s=1/t,u=new we,c=new H,h;for(h=0;h<=t;h++){var l=r+h*s*n;var p=Math.sin(l),f=Math.cos(l);for(l=0;l<=e.length-1;l++)u.x=e[l].x*p,u.y=e[l].y,u.z=e[l].x*f,o.push(u.x,u.y,u.z),c.x=h/t,c.y=l/(e.length-1),a.push(c.x,c.y)}for(h=0;h<t;h++)for(l=0;l<e.length-1;l++)r=l+h*e.length,s=r+e.length,u=r+e.length+1,c=r+1,i.push(r,s,c),i.push(s,u,c);this.setIndex(i);this.addAttribute("position",new P(o,3));this.addAttribute("uv",new P(a,2));this.computeVertexNormals();if(n===2*Math.PI)for(n=this.attributes.normal.array,i=new we,o=new we,a=new we,r=t*e.length*3,l=h=0;h<e.length;h++,l+=3)i.x=n[l+0],i.y=n[l+1],i.z=n[l+2],o.x=n[r+l+0],o.y=n[r+l+1],o.z=n[r+l+2],a.addVectors(i,o).normalize(),n[l+0]=n[r+l+0]=a.x,n[l+1]=n[r+l+1]=a.y,n[l+2]=n[r+l+2]=a.z}function kr(e,t){S.call(this);this.type="ShapeGeometry";"object"===typeof t&&(console.warn("THREE.ShapeGeometry: Options parameter has been removed."),t=t.curveSegments);this.parameters={shapes:e,curveSegments:t};this.fromBufferGeometry(new Br(e,t));this.mergeVertices()}function Br(e,s){function t(e){var t,r=c.length/3;e=e.extractPoints(s);var n=e.shape,i=e.holes;if(!1===Eo.isClockWise(n))for(n=n.reverse(),e=0,t=i.length;e<t;e++){var o=i[e];!0===Eo.isClockWise(o)&&(i[e]=o.reverse())}var a=Eo.triangulateShape(n,i);e=0;for(t=i.length;e<t;e++)o=i[e],n=n.concat(o);e=0;for(t=n.length;e<t;e++)o=n[e],c.push(o.x,o.y,0),h.push(0,0,1),l.push(o.x,o.y);e=0;for(t=a.length;e<t;e++)n=a[e],u.push(n[0]+r,n[1]+r,n[2]+r),p+=3}A.call(this);this.type="ShapeBufferGeometry";this.parameters={shapes:e,curveSegments:s};s=s||12;var u=[],c=[],h=[],l=[],r=0,p=0;if(!1===Array.isArray(e))t(e);else for(var n=0;n<e.length;n++)t(e[n]),this.addGroup(r,p,n),r+=p,p=0;this.setIndex(u);this.addAttribute("position",new P(c,3));this.addAttribute("normal",new P(h,3));this.addAttribute("uv",new P(l,2))}function Fr(e,t){t.shapes=[];if(Array.isArray(e))for(var r=0,n=e.length;r<n;r++)t.shapes.push(e[r].uuid);else t.shapes.push(e.uuid);return t}function $r(e,t){A.call(this);this.type="EdgesGeometry";this.parameters={thresholdAngle:t};var r=[];t=Math.cos(eo.DEG2RAD*(void 0!==t?t:1));var n=[0,0],i={},o=["a","b","c"];if(e.isBufferGeometry){var a=new S;a.fromBufferGeometry(e)}else a=e.clone();a.mergeVertices();a.computeFaceNormals();e=a.vertices;a=a.faces;for(var s=0,u=a.length;s<u;s++)for(var c=a[s],h=0;3>h;h++){var l=c[o[h]];var p=c[o[(h+1)%3]];n[0]=Math.min(l,p);n[1]=Math.max(l,p);l=n[0]+","+n[1];void 0===i[l]?i[l]={index1:n[0],index2:n[1],face1:s,face2:void 0}:i[l].face2=s}for(l in i)if(n=i[l],void 0===n.face2||a[n.face1].normal.dot(a[n.face2].normal)<=t)o=e[n.index1],r.push(o.x,o.y,o.z),o=e[n.index2],r.push(o.x,o.y,o.z);this.addAttribute("position",new P(r,3))}function zr(e,t,r,n,i,o,a,s){S.call(this);this.type="CylinderGeometry";this.parameters={radiusTop:e,radiusBottom:t,height:r,radialSegments:n,heightSegments:i,openEnded:o,thetaStart:a,thetaLength:s};this.fromBufferGeometry(new Ur(e,t,r,n,i,o,a,s));this.mergeVertices()}function Ur(p,f,d,v,m,e,g,y){function t(e){var t,r=new H,n=new we,i=0,o=!0===e?p:f,a=!0===e?1:-1;var s=M;for(t=1;t<=v;t++)x.push(0,C*a,0),w.push(0,a,0),S.push(.5,.5),M++;var u=M;for(t=0;t<=v;t++){var c=t/v*y+g,h=Math.cos(c);c=Math.sin(c);n.x=o*c;n.y=C*a;n.z=o*h;x.push(n.x,n.y,n.z);w.push(0,a,0);r.x=.5*h+.5;r.y=.5*c*a+.5;S.push(r.x,r.y);M++}for(t=0;t<v;t++)r=s+t,n=u+t,!0===e?b.push(n,n+1,r):b.push(n+1,n,r),i+=3;_.addGroup(T,i,!0===e?1:2);T+=i}A.call(this);this.type="CylinderBufferGeometry";this.parameters={radiusTop:p,radiusBottom:f,height:d,radialSegments:v,heightSegments:m,openEnded:e,thetaStart:g,thetaLength:y};var _=this;p=void 0!==p?p:1;f=void 0!==f?f:1;d=d||1;v=Math.floor(v)||8;m=Math.floor(m)||1;e=void 0!==e?e:!1;g=void 0!==g?g:0;y=void 0!==y?y:2*Math.PI;var b=[],x=[],w=[],S=[],M=0,E=[],C=d/2,T=0;(function(){var e,t,r=new we,n=new we,i=0,o=(f-p)/d;for(t=0;t<=m;t++){var a=[],s=t/m,u=s*(f-p)+p;for(e=0;e<=v;e++){var c=e/v,h=c*y+g,l=Math.sin(h);h=Math.cos(h);n.x=u*l;n.y=-s*d+C;n.z=u*h;x.push(n.x,n.y,n.z);r.set(l,o,h).normalize();w.push(r.x,r.y,r.z);S.push(c,1-s);a.push(M++)}E.push(a)}for(e=0;e<v;e++)for(t=0;t<m;t++)r=E[t+1][e],n=E[t+1][e+1],o=E[t][e+1],b.push(E[t][e],r,o),b.push(r,n,o),i+=6;_.addGroup(T,i,0);T+=i})();!1===e&&(0<p&&t(!0),0<f&&t(!1));this.setIndex(b);this.addAttribute("position",new P(x,3));this.addAttribute("normal",new P(w,3));this.addAttribute("uv",new P(S,2))}function Gr(e,t,r,n,i,o,a){zr.call(this,0,e,t,r,n,i,o,a);this.type="ConeGeometry";this.parameters={radius:e,height:t,radialSegments:r,heightSegments:n,openEnded:i,thetaStart:o,thetaLength:a}}function Vr(e,t,r,n,i,o,a){Ur.call(this,0,e,t,r,n,i,o,a);this.type="ConeBufferGeometry";this.parameters={radius:e,height:t,radialSegments:r,heightSegments:n,openEnded:i,thetaStart:o,thetaLength:a}}function Hr(e,t,r,n){S.call(this);this.type="CircleGeometry";this.parameters={radius:e,segments:t,thetaStart:r,thetaLength:n};this.fromBufferGeometry(new qr(e,t,r,n));this.mergeVertices()}function qr(e,t,r,n){A.call(this);this.type="CircleBufferGeometry";this.parameters={radius:e,segments:t,thetaStart:r,thetaLength:n};e=e||1;t=void 0!==t?Math.max(3,t):8;r=void 0!==r?r:0;n=void 0!==n?n:2*Math.PI;var i=[],o=[],a=[],s=[],u,c=new we,h=new H;o.push(0,0,0);a.push(0,0,1);s.push(.5,.5);var l=0;for(u=3;l<=t;l++,u+=3){var p=r+l/t*n;c.x=e*Math.cos(p);c.y=e*Math.sin(p);o.push(c.x,c.y,c.z);a.push(0,0,1);h.x=(o[u]/e+1)/2;h.y=(o[u+1]/e+1)/2;s.push(h.x,h.y)}for(u=1;u<=t;u++)i.push(u,u+1,0);this.setIndex(i);this.addAttribute("position",new P(o,3));this.addAttribute("normal",new P(a,3));this.addAttribute("uv",new P(s,2))}function Wr(e){I.call(this);this.type="ShadowMaterial";this.color=new w(0);this.transparent=!0;this.setValues(e)}function Xr(e){D.call(this,e);this.type="RawShaderMaterial"}function Yr(e){I.call(this);this.defines={STANDARD:""};this.type="MeshStandardMaterial";this.color=new w(16777215);this.metalness=this.roughness=.5;this.lightMap=this.map=null;this.lightMapIntensity=1;this.aoMap=null;this.aoMapIntensity=1;this.emissive=new w(0);this.emissiveIntensity=1;this.bumpMap=this.emissiveMap=null;this.bumpScale=1;this.normalMap=null;this.normalMapType=0;this.normalScale=new H(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(e)}function Kr(e){Yr.call(this);this.defines={PHYSICAL:""};this.type="MeshPhysicalMaterial";this.reflectivity=.5;this.clearCoatRoughness=this.clearCoat=0;this.setValues(e)}function Zr(e){I.call(this);this.type="MeshPhongMaterial";this.color=new w(16777215);this.specular=new w(1118481);this.shininess=30;this.lightMap=this.map=null;this.lightMapIntensity=1;this.aoMap=null;this.aoMapIntensity=1;this.emissive=new w(0);this.emissiveIntensity=1;this.bumpMap=this.emissiveMap=null;this.bumpScale=1;this.normalMap=null;this.normalMapType=0;this.normalScale=new H(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(e)}function Jr(e){Zr.call(this);this.defines={TOON:""};this.type="MeshToonMaterial";this.gradientMap=null;this.setValues(e)}function Qr(e){I.call(this);this.type="MeshNormalMaterial";this.bumpMap=null;this.bumpScale=1;this.normalMap=null;this.normalMapType=0;this.normalScale=new H(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(e)}function en(e){I.call(this);this.type="MeshLambertMaterial";this.color=new w(16777215);this.lightMap=this.map=null;this.lightMapIntensity=1;this.aoMap=null;this.aoMapIntensity=1;this.emissive=new w(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(e)}function tn(e){Lt.call(this);this.type="LineDashedMaterial";this.scale=1;this.dashSize=3;this.gapSize=1;this.setValues(e)}function rn(e,t,r){var n=this,i=!1,o=0,a=0,s=void 0;this.onStart=void 0;this.onLoad=e;this.onProgress=t;this.onError=r;this.itemStart=function(e){a++;if(!1===i&&void 0!==n.onStart)n.onStart(e,o,a);i=!0};this.itemEnd=function(e){o++;if(void 0!==n.onProgress)n.onProgress(e,o,a);if(o===a&&(i=!1,void 0!==n.onLoad))n.onLoad()};this.itemError=function(e){if(void 0!==n.onError)n.onError(e)};this.resolveURL=function(e){return s?s(e):e};this.setURLModifier=function(e){s=e;return this}}function nn(e){this.manager=void 0!==e?e:Ao}function on(e){this.manager=void 0!==e?e:Ao;this._parser=null}function an(e){this.manager=void 0!==e?e:Ao;this._parser=null}function sn(e){this.manager=void 0!==e?e:Ao}function un(e){this.manager=void 0!==e?e:Ao}function cn(e){this.manager=void 0!==e?e:Ao}function hn(){this.type="Curve";this.arcLengthDivisions=200}function ln(e,t,r,n,i,o,a,s){hn.call(this);this.type="EllipseCurve";this.aX=e||0;this.aY=t||0;this.xRadius=r||1;this.yRadius=n||1;this.aStartAngle=i||0;this.aEndAngle=o||2*Math.PI;this.aClockwise=a||!1;this.aRotation=s||0}function pn(e,t,r,n,i,o){ln.call(this,e,t,r,r,n,i,o);this.type="ArcCurve"}function fn(){var s=0,u=0,c=0,h=0;return{initCatmullRom:function(e,t,r,n,i){e=i*(r-e);n=i*(n-t);s=t;u=e;c=-3*t+3*r-2*e-n;h=2*t-2*r+e+n},initNonuniformCatmullRom:function(e,t,r,n,i,o,a){e=((t-e)/i-(r-e)/(i+o)+(r-t)/o)*o;n=((r-t)/o-(n-t)/(o+a)+(n-r)/a)*o;s=t;u=e;c=-3*t+3*r-2*e-n;h=2*t-2*r+e+n},calc:function(e){var t=e*e;return s+u*e+c*t+h*t*e}}}function dn(e,t,r,n){hn.call(this);this.type="CatmullRomCurve3";this.points=e||[];this.closed=t||!1;this.curveType=r||"centripetal";this.tension=n||.5}function vn(e,t,r,n,i){t=.5*(n-t);i=.5*(i-r);var o=e*e;return(2*r-2*n+t+i)*e*o+(-3*r+3*n-2*t-i)*o+t*e+r}function mn(e,t,r,n){var i=1-e;return i*i*t+2*(1-e)*e*r+e*e*n}function gn(e,t,r,n,i){var o=1-e,a=1-e;return o*o*o*t+3*a*a*e*r+3*(1-e)*e*e*n+e*e*e*i}function yn(e,t,r,n){hn.call(this);this.type="CubicBezierCurve";this.v0=e||new H;this.v1=t||new H;this.v2=r||new H;this.v3=n||new H}function _n(e,t,r,n){hn.call(this);this.type="CubicBezierCurve3";this.v0=e||new we;this.v1=t||new we;this.v2=r||new we;this.v3=n||new we}function bn(e,t){hn.call(this);this.type="LineCurve";this.v1=e||new H;this.v2=t||new H}function xn(e,t){hn.call(this);this.type="LineCurve3";this.v1=e||new we;this.v2=t||new we}function wn(e,t,r){hn.call(this);this.type="QuadraticBezierCurve";this.v0=e||new H;this.v1=t||new H;this.v2=r||new H}function Sn(e,t,r){hn.call(this);this.type="QuadraticBezierCurve3";this.v0=e||new we;this.v1=t||new we;this.v2=r||new we}function Mn(e){hn.call(this);this.type="SplineCurve";this.points=e||[]}function En(){hn.call(this);this.type="CurvePath";this.curves=[];this.autoClose=!1}function Cn(e){En.call(this);this.type="Path";this.currentPoint=new H;e&&this.setFromPoints(e)}function Tn(e){Cn.call(this,e);this.uuid=eo.generateUUID();this.type="Shape";this.holes=[]}function On(e,t){h.call(this);this.type="Light";this.color=new w(e);this.intensity=void 0!==t?t:1;this.receiveShadow=void 0}function Pn(e,t,r){On.call(this,e,r);this.type="HemisphereLight";this.castShadow=void 0;this.position.copy(h.DefaultUp);this.updateMatrix();this.groundColor=new w(t)}function An(e){this.camera=e;this.bias=0;this.radius=1;this.mapSize=new H(512,512);this.map=null;this.matrix=new xe}function jn(){An.call(this,new gt(50,1,.5,500))}function Rn(e,t,r,n,i,o){On.call(this,e,t);this.type="SpotLight";this.position.copy(h.DefaultUp);this.updateMatrix();this.target=new h;Object.defineProperty(this,"power",{get:function(){return this.intensity*Math.PI},set:function(e){this.intensity=e/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 jn}function Ln(e,t,r,n){On.call(this,e,t);this.type="PointLight";Object.defineProperty(this,"power",{get:function(){return 4*this.intensity*Math.PI},set:function(e){this.intensity=e/(4*Math.PI)}});this.distance=void 0!==r?r:0;this.decay=void 0!==n?n:1;this.shadow=new An(new gt(90,1,.5,500))}function In(){An.call(this,new f(-5,5,5,-5,.5,500))}function Nn(e,t){On.call(this,e,t);this.type="DirectionalLight";this.position.copy(h.DefaultUp);this.updateMatrix();this.target=new h;this.shadow=new In}function Dn(e,t){On.call(this,e,t);this.type="AmbientLight";this.castShadow=void 0}function kn(e,t,r,n){On.call(this,e,t);this.type="RectAreaLight";this.width=void 0!==r?r:10;this.height=void 0!==n?n:10}function Bn(e,t,r,n){this.parameterPositions=e;this._cachedIndex=0;this.resultBuffer=void 0!==n?n:new t.constructor(r);this.sampleValues=t;this.valueSize=r}function Fn(e,t,r,n){Bn.call(this,e,t,r,n);this._offsetNext=this._weightNext=this._offsetPrev=this._weightPrev=-0}function $n(e,t,r,n){Bn.call(this,e,t,r,n)}function zn(e,t,r,n){Bn.call(this,e,t,r,n)}function Un(e,t,r,n){if(void 0===e)throw Error("THREE.KeyframeTrack: track name is undefined");if(void 0===t||0===t.length)throw Error("THREE.KeyframeTrack: no keyframes in track named "+e);this.name=e;this.times=ko.convertArray(t,this.TimeBufferType);this.values=ko.convertArray(r,this.ValueBufferType);this.setInterpolation(n||this.DefaultInterpolation)}function Gn(e,t,r){Un.call(this,e,t,r)}function Vn(e,t,r,n){Un.call(this,e,t,r,n)}function Hn(e,t,r,n){Un.call(this,e,t,r,n)}function qn(e,t,r,n){Bn.call(this,e,t,r,n)}function Wn(e,t,r,n){Un.call(this,e,t,r,n)}function Xn(e,t,r,n){Un.call(this,e,t,r,n)}function Yn(e,t,r,n){Un.call(this,e,t,r,n)}function Kn(e,t,r){this.name=e;this.tracks=r;this.duration=void 0!==t?t:-1;this.uuid=eo.generateUUID();0>this.duration&&this.resetDuration()}function Zn(e){switch(e.toLowerCase()){case"scalar":case"double":case"float":case"number":case"integer":return Hn;case"vector":case"vector2":case"vector3":case"vector4":return Yn;case"color":return Vn;case"quaternion":return Wn;case"bool":case"boolean":return Gn;case"string":return Xn}throw Error("THREE.KeyframeTrack: Unsupported typeName: "+e)}function Jn(e){if(void 0===e.type)throw Error("THREE.KeyframeTrack: track type undefined, can not parse");var t=Zn(e.type);if(void 0===e.times){var r=[],n=[];ko.flattenJSON(e.keys,r,n,"value");e.times=r;e.values=n}return void 0!==t.parse?t.parse(e):new t(e.name,e.times,e.values,e.interpolation)}function Qn(e){this.manager=void 0!==e?e:Ao;this.textures={}}function ei(e){this.manager=void 0!==e?e:Ao}function ti(){}function ri(e){"boolean"===typeof e&&(console.warn("THREE.JSONLoader: showStatus parameter has been removed from constructor."),e=void 0);this.manager=void 0!==e?e:Ao;this.withCredentials=!1}function ni(e){this.manager=void 0!==e?e:Ao;this.texturePath=""}function ii(e){"undefined"===typeof createImageBitmap&&console.warn("THREE.ImageBitmapLoader: createImageBitmap() not supported.");"undefined"===typeof fetch&&console.warn("THREE.ImageBitmapLoader: fetch() not supported.");this.manager=void 0!==e?e:Ao;this.options=void 0}function oi(){this.type="ShapePath";this.color=new w;this.subPaths=[];this.currentPath=null}function ai(e){this.type="Font";this.data=e}function si(e){this.manager=void 0!==e?e:Ao}function ui(e){this.manager=void 0!==e?e:Ao}function ci(){this.type="StereoCamera";this.aspect=1;this.eyeSep=.064;this.cameraL=new gt;this.cameraL.layers.enable(1);this.cameraL.matrixAutoUpdate=!1;this.cameraR=new gt;this.cameraR.layers.enable(2);this.cameraR.matrixAutoUpdate=!1}function hi(e,t,r){h.call(this);this.type="CubeCamera";var i=new gt(90,1,e,t);i.up.set(0,-1,0);i.lookAt(new we(1,0,0));this.add(i);var o=new gt(90,1,e,t);o.up.set(0,-1,0);o.lookAt(new we(-1,0,0));this.add(o);var a=new gt(90,1,e,t);a.up.set(0,0,1);a.lookAt(new we(0,1,0));this.add(a);var s=new gt(90,1,e,t);s.up.set(0,0,-1);s.lookAt(new we(0,-1,0));this.add(s);var u=new gt(90,1,e,t);u.up.set(0,-1,0);u.lookAt(new we(0,0,1));this.add(u);var c=new gt(90,1,e,t);c.up.set(0,-1,0);c.lookAt(new we(0,0,-1));this.add(c);this.renderTarget=new n(r,r,{format:1022,magFilter:1006,minFilter:1006});this.renderTarget.texture.name="CubeCamera";this.update=function(e,t){null===this.parent&&this.updateMatrixWorld();var r=this.renderTarget,n=r.texture.generateMipmaps;r.texture.generateMipmaps=!1;r.activeCubeFace=0;e.render(t,i,r);r.activeCubeFace=1;e.render(t,o,r);r.activeCubeFace=2;e.render(t,a,r);r.activeCubeFace=3;e.render(t,s,r);r.activeCubeFace=4;e.render(t,u,r);r.texture.generateMipmaps=n;r.activeCubeFace=5;e.render(t,c,r);e.setRenderTarget(null)};this.clear=function(e,t,r,n){for(var i=this.renderTarget,o=0;6>o;o++)i.activeCubeFace=o,e.setRenderTarget(i),e.clear(t,r,n);e.setRenderTarget(null)}}function li(){h.call(this);this.type="AudioListener";this.context=Vo.getContext();this.gain=this.context.createGain();this.gain.connect(this.context.destination);this.filter=null}function pi(e){h.call(this);this.type="Audio";this.context=e.context;this.gain=this.context.createGain();this.gain.connect(e.getInput());this.autoplay=!1;this.buffer=null;this.loop=!1;this.offset=this.startTime=0;this.playbackRate=1;this.isPlaying=!1;this.hasPlaybackControl=!0;this.sourceType="empty";this.filters=[]}function fi(e){pi.call(this,e);this.panner=this.context.createPanner();this.panner.connect(this.gain)}function di(e,t){this.analyser=e.context.createAnalyser();this.analyser.fftSize=void 0!==t?t:2048;this.data=new Uint8Array(this.analyser.frequencyBinCount);e.getOutput().connect(this.analyser)}function vi(e,t,r){this.binding=e;this.valueSize=r;e=Float64Array;switch(t){case"quaternion":t=this._slerp;break;case"string":case"bool":e=Array;t=this._select;break;default:t=this._lerp}this.buffer=new e(4*r);this._mixBufferRegion=t;this.referenceCount=this.useCount=this.cumulativeWeight=0}function mi(e,t,r){r=r||gi.parseTrackName(t);this._targetGroup=e;this._bindings=e.subscribe_(t,r)}function gi(e,t,r){this.path=t;this.parsedPath=r||gi.parseTrackName(t);this.node=gi.findNode(e,this.parsedPath.nodeName)||e;this.rootNode=e}function yi(){this.uuid=eo.generateUUID();this._objects=Array.prototype.slice.call(arguments);this.nCachedObjects_=0;var e={};this._indicesByUUID=e;for(var t=0,r=arguments.length;t!==r;++t)e[arguments[t].uuid]=t;this._paths=[];this._parsedPaths=[];this._bindings=[];this._bindingsIndicesByPath={};var n=this;this.stats={objects:{get total(){return n._objects.length},get inUse(){return this.total-n.nCachedObjects_}},get bindingsPerObject(){return n._bindings.length}}}function _i(e,t,r){this._mixer=e;this._clip=t;this._localRoot=r||null;e=t.tracks;t=e.length;r=Array(t);for(var n={endingStart:2400,endingEnd:2400},i=0;i!==t;++i){var o=e[i].createInterpolant(null);r[i]=o;o.settings=n}this._interpolantSettings=n;this._interpolants=r;this._propertyBindings=Array(t);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=Infinity;this.paused=!1;this.enabled=!0;this.clampWhenFinished=!1;this.zeroSlopeAtEnd=this.zeroSlopeAtStart=!0}function bi(e){this._root=e;this._initMemoryManager();this.time=this._accuIndex=0;this.timeScale=1}function xi(e,t){"string"===typeof e&&(console.warn("THREE.Uniform: Type parameter is no longer needed."),e=t);this.value=e}function wi(){A.call(this);this.type="InstancedBufferGeometry";this.maxInstancedCount=void 0}function Si(e,t,r){Et.call(this,e,t);this.meshPerAttribute=r||1}function Mi(e,t,r){y.call(this,e,t);this.meshPerAttribute=r||1}function Ei(e,t,r,n){this.ray=new B(e,t);this.near=r||0;this.far=n||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 Ci(e,t){return e.distance-t.distance}function Ti(e,t,r,n){if(!1!==e.visible&&(e.raycast(t,r),!0===n)){e=e.children;n=0;for(var i=e.length;n<i;n++)Ti(e[n],t,r,!0)}}function Oi(e){this.autoStart=void 0!==e?e:!0;this.elapsedTime=this.oldTime=this.startTime=0;this.running=!1}function Pi(e,t,r){this.radius=void 0!==e?e:1;this.phi=void 0!==t?t:0;this.theta=void 0!==r?r:0;return this}function Ai(e,t,r){this.radius=void 0!==e?e:1;this.theta=void 0!==t?t:0;this.y=void 0!==r?r:0;return this}function ji(e,t){this.min=void 0!==e?e:new H(Infinity,Infinity);this.max=void 0!==t?t:new H(-Infinity,-Infinity)}function Ri(e,t){this.start=void 0!==e?e:new we;this.end=void 0!==t?t:new we}function Li(e){h.call(this);this.material=e;this.render=function(){}}function Ii(e,t,r,n){this.object=e;this.size=void 0!==t?t:1;e=void 0!==r?r:16711680;n=void 0!==n?n:1;t=0;(r=this.object.geometry)&&r.isGeometry?t=3*r.faces.length:r&&r.isBufferGeometry&&(t=r.attributes.normal.count);r=new A;t=new P(6*t,3);r.addAttribute("position",t);Nt.call(this,r,new Lt({color:e,linewidth:n}));this.matrixAutoUpdate=!1;this.update()}function Ni(e,t){h.call(this);this.light=e;this.light.updateMatrixWorld();this.matrix=e.matrixWorld;this.matrixAutoUpdate=!1;this.color=t;e=new A;t=[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];for(var r=0,n=1;32>r;r++,n++){var i=r/32*Math.PI*2,o=n/32*Math.PI*2;t.push(Math.cos(i),Math.sin(i),1,Math.cos(o),Math.sin(o),1)}e.addAttribute("position",new P(t,3));t=new Lt({fog:!1});this.cone=new Nt(e,t);this.add(this.cone);this.update()}function Di(e){var t=[];e&&e.isBone&&t.push(e);for(var r=0;r<e.children.length;r++)t.push.apply(t,Di(e.children[r]));return t}function ki(e){for(var t=Di(e),r=new A,n=[],i=[],o=new w(0,0,1),a=new w(0,1,0),s=0;s<t.length;s++){var u=t[s];u.parent&&u.parent.isBone&&(n.push(0,0,0),n.push(0,0,0),i.push(o.r,o.g,o.b),i.push(a.r,a.g,a.b))}r.addAttribute("position",new P(n,3));r.addAttribute("color",new P(i,3));n=new Lt({vertexColors:2,depthTest:!1,depthWrite:!1,transparent:!0});Nt.call(this,r,n);this.root=e;this.bones=t;this.matrix=e.matrixWorld;this.matrixAutoUpdate=!1}function Bi(e,t,r){this.light=e;this.light.updateMatrixWorld();this.color=r;e=new Rr(t,4,2);t=new N({wireframe:!0,fog:!1});$.call(this,e,t);this.matrix=this.light.matrixWorld;this.matrixAutoUpdate=!1;this.update()}function Fi(e,t){h.call(this);this.light=e;this.light.updateMatrixWorld();this.matrix=e.matrixWorld;this.matrixAutoUpdate=!1;this.color=t;e=new Lt({fog:!1});t=new A;t.addAttribute("position",new y(new Float32Array(15),3));this.line=new It(t,e);this.add(this.line);this.update()}function $i(e,t,r){h.call(this);this.light=e;this.light.updateMatrixWorld();this.matrix=e.matrixWorld;this.matrixAutoUpdate=!1;this.color=r;e=new Zt(t);e.rotateY(.5*Math.PI);this.material=new N({wireframe:!0,fog:!1});void 0===this.color&&(this.material.vertexColors=2);t=e.getAttribute("position");t=new Float32Array(3*t.count);e.addAttribute("color",new y(t,3));this.add(new $(e,this.material));this.update()}function zi(e,t,r,n){e=e||10;t=t||10;r=new w(void 0!==r?r:4473924);n=new w(void 0!==n?n:8947848);var i=t/2,o=e/t,a=e/2;e=[];for(var s=[],u=0,c=0,h=-a;u<=t;u++,h+=o){e.push(-a,0,h,a,0,h);e.push(h,0,-a,h,0,a);var l=u===i?r:n;l.toArray(s,c);c+=3;l.toArray(s,c);c+=3;l.toArray(s,c);c+=3;l.toArray(s,c);c+=3}t=new A;t.addAttribute("position",new P(e,3));t.addAttribute("color",new P(s,3));r=new Lt({vertexColors:2});Nt.call(this,t,r)}function Ui(e,t,r,n,i,o){e=e||10;t=t||16;r=r||8;n=n||64;i=new w(void 0!==i?i:4473924);o=new w(void 0!==o?o:8947848);var a=[],s=[],u;for(u=0;u<=t;u++){var c=u/t*2*Math.PI;var h=Math.sin(c)*e;c=Math.cos(c)*e;a.push(0,0,0);a.push(h,0,c);var l=u&1?i:o;s.push(l.r,l.g,l.b);s.push(l.r,l.g,l.b)}for(u=0;u<=r;u++){l=u&1?i:o;var p=e-e/r*u;for(t=0;t<n;t++)c=t/n*2*Math.PI,h=Math.sin(c)*p,c=Math.cos(c)*p,a.push(h,0,c),s.push(l.r,l.g,l.b),c=(t+1)/n*2*Math.PI,h=Math.sin(c)*p,c=Math.cos(c)*p,a.push(h,0,c),s.push(l.r,l.g,l.b)}e=new A;e.addAttribute("position",new P(a,3));e.addAttribute("color",new P(s,3));a=new Lt({vertexColors:2});Nt.call(this,e,a)}function Gi(e,t,r,n){this.object=e;this.size=void 0!==t?t:1;e=void 0!==r?r:16776960;n=void 0!==n?n:1;t=0;(r=this.object.geometry)&&r.isGeometry?t=r.faces.length:console.warn("THREE.FaceNormalsHelper: only THREE.Geometry is supported. Use THREE.VertexNormalsHelper, instead.");r=new A;t=new P(6*t,3);r.addAttribute("position",t);Nt.call(this,r,new Lt({color:e,linewidth:n}));this.matrixAutoUpdate=!1;this.update()}function Vi(e,t,r){h.call(this);this.light=e;this.light.updateMatrixWorld();this.matrix=e.matrixWorld;this.matrixAutoUpdate=!1;this.color=r;void 0===t&&(t=1);e=new A;e.addAttribute("position",new P([-t,t,0,t,t,0,t,-t,0,-t,-t,0,-t,t,0],3));t=new Lt({fog:!1});this.lightPlane=new It(e,t);this.add(this.lightPlane);e=new A;e.addAttribute("position",new P([0,0,0,0,0,1],3));this.targetLine=new It(e,t);this.add(this.targetLine);this.update()}function Hi(e){function t(e,t,r){n(e,r);n(t,r)}function n(e,t){o.push(0,0,0);a.push(t.r,t.g,t.b);void 0===s[e]&&(s[e]=[]);s[e].push(o.length/3-1)}var r=new A,i=new Lt({color:16777215,vertexColors:1}),o=[],a=[],s={},u=new w(16755200),c=new w(16711680),h=new w(43775),l=new w(16777215),p=new w(3355443);t("n1","n2",u);t("n2","n4",u);t("n4","n3",u);t("n3","n1",u);t("f1","f2",u);t("f2","f4",u);t("f4","f3",u);t("f3","f1",u);t("n1","f1",u);t("n2","f2",u);t("n3","f3",u);t("n4","f4",u);t("p","n1",c);t("p","n2",c);t("p","n3",c);t("p","n4",c);t("u1","u2",h);t("u2","u3",h);t("u3","u1",h);t("c","t",l);t("p","c",p);t("cn1","cn2",p);t("cn3","cn4",p);t("cf1","cf2",p);t("cf3","cf4",p);r.addAttribute("position",new P(o,3));r.addAttribute("color",new P(a,3));Nt.call(this,r,i);this.camera=e;this.camera.updateProjectionMatrix&&this.camera.updateProjectionMatrix();this.matrix=e.matrixWorld;this.matrixAutoUpdate=!1;this.pointMap=s;this.update()}function qi(e,t){this.object=e;void 0===t&&(t=16776960);e=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]);var r=new Float32Array(24),n=new A;n.setIndex(new y(e,1));n.addAttribute("position",new y(r,3));Nt.call(this,n,new Lt({color:t}));this.matrixAutoUpdate=!1;this.update()}function Wi(e,t){this.type="Box3Helper";this.box=e;e=void 0!==t?t:16776960;t=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]);var r=new A;r.setIndex(new y(t,1));r.addAttribute("position",new P([1,1,1,-1,1,1,-1,-1,1,1,-1,1,1,1,-1,-1,1,-1,-1,-1,-1,1,-1,-1],3));Nt.call(this,r,new Lt({color:e}));this.geometry.computeBoundingSphere()}function Xi(e,t,r){this.type="PlaneHelper";this.plane=e;this.size=void 0===t?1:t;e=void 0!==r?r:16776960;t=new A;t.addAttribute("position",new P([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,0,1,0,0,0],3));t.computeBoundingSphere();It.call(this,t,new Lt({color:e}));t=new A;t.addAttribute("position",new P([1,1,1,-1,1,1,-1,-1,1,1,1,1,-1,-1,1,1,-1,1],3));t.computeBoundingSphere();this.add(new $(t,new N({color:e,opacity:.2,transparent:!0,depthWrite:!1})))}function Yi(e,t,r,n,i,o){h.call(this);void 0===n&&(n=16776960);void 0===r&&(r=1);void 0===i&&(i=.2*r);void 0===o&&(o=.2*i);void 0===Ho&&(Ho=new A,Ho.addAttribute("position",new P([0,0,0,0,1,0],3)),qo=new Ur(0,.5,1,5,1),qo.translate(0,-.5,0));this.position.copy(t);this.line=new It(Ho,new Lt({color:n}));this.line.matrixAutoUpdate=!1;this.add(this.line);this.cone=new $(qo,new N({color:n}));this.cone.matrixAutoUpdate=!1;this.add(this.cone);this.setDirection(e);this.setLength(r,i,o)}function Ki(e){e=e||1;var t=[0,0,0,e,0,0,0,0,0,0,e,0,0,0,0,0,0,e];e=new A;e.addAttribute("position",new P(t,3));e.addAttribute("color",new P([1,0,0,1,.6,0,0,1,0,.6,1,0,0,0,1,0,.6,1],3));t=new Lt({vertexColors:2});Nt.call(this,e,t)}function Zi(e){console.warn("THREE.ClosedSplineCurve3 has been deprecated. Use THREE.CatmullRomCurve3 instead.");dn.call(this,e);this.type="catmullrom";this.closed=!0}function Ji(e){console.warn("THREE.SplineCurve3 has been deprecated. Use THREE.CatmullRomCurve3 instead.");dn.call(this,e);this.type="catmullrom"}function Qi(e){console.warn("THREE.Spline has been removed. Use THREE.CatmullRomCurve3 instead.");dn.call(this,e);this.type="catmullrom"}void 0===Number.EPSILON&&(Number.EPSILON=Math.pow(2,-52));void 0===Number.isInteger&&(Number.isInteger=function(e){return"number"===typeof e&&isFinite(e)&&Math.floor(e)===e});void 0===Math.sign&&(Math.sign=function(e){return 0>e?-1:0<e?1:+e});!1==="name"in Function.prototype&&Object.defineProperty(Function.prototype,"name",{get:function(){return this.toString().match(/^\s*function\s*([^\(\s]*)/)[1]}});void 0===Object.assign&&function(){Object.assign=function(e){if(void 0===e||null===e)throw new TypeError("Cannot convert undefined or null to object");for(var t=Object(e),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)&&(t[i]=n[i])}return t}}();Object.assign(t.prototype,{addEventListener:function(e,t){void 0===this._listeners&&(this._listeners={});var r=this._listeners;void 0===r[e]&&(r[e]=[]);-1===r[e].indexOf(t)&&r[e].push(t)},hasEventListener:function(e,t){if(void 0===this._listeners)return!1;var r=this._listeners;return void 0!==r[e]&&-1!==r[e].indexOf(t)},removeEventListener:function(e,t){void 0!==this._listeners&&(e=this._listeners[e],void 0!==e&&(t=e.indexOf(t),-1!==t&&e.splice(t,1)))},dispatchEvent:function(e){if(void 0!==this._listeners){var t=this._listeners[e.type];if(void 0!==t){e.target=this;t=t.slice(0);for(var r=0,n=t.length;r<n;r++)t[r].call(this,e)}}}});var eo={DEG2RAD:Math.PI/180,RAD2DEG:180/Math.PI,generateUUID:function(){for(var i=[],e=0;256>e;e++)i[e]=(16>e?"0":"")+e.toString(16);return function(){var e=4294967295*Math.random()|0,t=4294967295*Math.random()|0,r=4294967295*Math.random()|0,n=4294967295*Math.random()|0;return(i[e&255]+i[e>>8&255]+i[e>>16&255]+i[e>>24&255]+"-"+i[t&255]+i[t>>8&255]+"-"+i[t>>16&15|64]+i[t>>24&255]+"-"+i[r&63|128]+i[r>>8&255]+"-"+i[r>>16&255]+i[r>>24&255]+i[n&255]+i[n>>8&255]+i[n>>16&255]+i[n>>24&255]).toUpperCase()}}(),clamp:function(e,t,r){return Math.max(t,Math.min(r,e))},euclideanModulo:function(e,t){return(e%t+t)%t},mapLinear:function(e,t,r,n,i){return n+(e-t)*(i-n)/(r-t)},lerp:function(e,t,r){return(1-r)*e+r*t},smoothstep:function(e,t,r){if(e<=t)return 0;if(e>=r)return 1;e=(e-t)/(r-t);return e*e*(3-2*e)},smootherstep:function(e,t,r){if(e<=t)return 0;if(e>=r)return 1;e=(e-t)/(r-t);return e*e*e*(e*(6*e-15)+10)},randInt:function(e,t){return e+Math.floor(Math.random()*(t-e+1))},randFloat:function(e,t){return e+Math.random()*(t-e)},randFloatSpread:function(e){return e*(.5-Math.random())},degToRad:function(e){return e*eo.DEG2RAD},radToDeg:function(e){return e*eo.RAD2DEG},isPowerOfTwo:function(e){return 0===(e&e-1)&&0!==e},ceilPowerOfTwo:function(e){return Math.pow(2,Math.ceil(Math.log(e)/Math.LN2))},floorPowerOfTwo:function(e){return Math.pow(2,Math.floor(Math.log(e)/Math.LN2))}};Object.defineProperties(H.prototype,{width:{get:function(){return this.x},set:function(e){this.x=e}},height:{get:function(){return this.y},set:function(e){this.y=e}}});Object.assign(H.prototype,{isVector2:!0,set:function(e,t){this.x=e;this.y=t;return this},setScalar:function(e){this.y=this.x=e;return this},setX:function(e){this.x=e;return this},setY:function(e){this.y=e;return this},setComponent:function(e,t){switch(e){case 0:this.x=t;break;case 1:this.y=t;break;default:throw Error("index is out of range: "+e)}return this},getComponent:function(e){switch(e){case 0:return this.x;case 1:return this.y;default:throw Error("index is out of range: "+e)}},clone:function(){return new this.constructor(this.x,this.y)},copy:function(e){this.x=e.x;this.y=e.y;return this},add:function(e,t){if(void 0!==t)return console.warn("THREE.Vector2: .add() now only accepts one argument. Use .addVectors( a, b ) instead."),this.addVectors(e,t);this.x+=e.x;this.y+=e.y;return this},addScalar:function(e){this.x+=e;this.y+=e;return this},addVectors:function(e,t){this.x=e.x+t.x;this.y=e.y+t.y;return this},addScaledVector:function(e,t){this.x+=e.x*t;this.y+=e.y*t;return this},sub:function(e,t){if(void 0!==t)return console.warn("THREE.Vector2: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."),this.subVectors(e,t);this.x-=e.x;this.y-=e.y;return this},subScalar:function(e){this.x-=e;this.y-=e;return this},subVectors:function(e,t){this.x=e.x-t.x;this.y=e.y-t.y;return this},multiply:function(e){this.x*=e.x;this.y*=e.y;return this},multiplyScalar:function(e){this.x*=e;this.y*=e;return this},divide:function(e){this.x/=e.x;this.y/=e.y;return this},divideScalar:function(e){return this.multiplyScalar(1/e)},applyMatrix3:function(e){var t=this.x,r=this.y;e=e.elements;this.x=e[0]*t+e[3]*r+e[6];this.y=e[1]*t+e[4]*r+e[7];return this},min:function(e){this.x=Math.min(this.x,e.x);this.y=Math.min(this.y,e.y);return this},max:function(e){this.x=Math.max(this.x,e.x);this.y=Math.max(this.y,e.y);return this},clamp:function(e,t){this.x=Math.max(e.x,Math.min(t.x,this.x));this.y=Math.max(e.y,Math.min(t.y,this.y));return this},clampScalar:function(){var r=new H,n=new H;return function(e,t){r.set(e,e);n.set(t,t);return this.clamp(r,n)}}(),clampLength:function(e,t){var r=this.length();return this.divideScalar(r||1).multiplyScalar(Math.max(e,Math.min(t,r)))},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);return this},negate:function(){this.x=-this.x;this.y=-this.y;return this},dot:function(e){return this.x*e.x+this.y*e.y},cross:function(e){return this.x*e.y-this.y*e.x},lengthSq:function(){return this.x*this.x+this.y*this.y},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y)},manhattanLength:function(){return Math.abs(this.x)+Math.abs(this.y)},normalize:function(){return this.divideScalar(this.length()||1)},angle:function(){var e=Math.atan2(this.y,this.x);0>e&&(e+=2*Math.PI);return e},distanceTo:function(e){return Math.sqrt(this.distanceToSquared(e))},distanceToSquared:function(e){var t=this.x-e.x;e=this.y-e.y;return t*t+e*e},manhattanDistanceTo:function(e){return Math.abs(this.x-e.x)+Math.abs(this.y-e.y)},setLength:function(e){return this.normalize().multiplyScalar(e)},lerp:function(e,t){this.x+=(e.x-this.x)*t;this.y+=(e.y-this.y)*t;return this},lerpVectors:function(e,t,r){return this.subVectors(t,e).multiplyScalar(r).add(e)},equals:function(e){return e.x===this.x&&e.y===this.y},fromArray:function(e,t){void 0===t&&(t=0);this.x=e[t];this.y=e[t+1];return this},toArray:function(e,t){void 0===e&&(e=[]);void 0===t&&(t=0);e[t]=this.x;e[t+1]=this.y;return e},fromBufferAttribute:function(e,t,r){void 0!==r&&console.warn("THREE.Vector2: offset has been removed from .fromBufferAttribute().");this.x=e.getX(t);this.y=e.getY(t);return this},rotateAround:function(e,t){var r=Math.cos(t);t=Math.sin(t);var n=this.x-e.x,i=this.y-e.y;this.x=n*r-i*t+e.x;this.y=n*t+i*r+e.y;return this}});Object.assign(xe.prototype,{isMatrix4:!0,set:function(e,t,r,n,i,o,a,s,u,c,h,l,p,f,d,v){var m=this.elements;m[0]=e;m[4]=t;m[8]=r;m[12]=n;m[1]=i;m[5]=o;m[9]=a;m[13]=s;m[2]=u;m[6]=c;m[10]=h;m[14]=l;m[3]=p;m[7]=f;m[11]=d;m[15]=v;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 xe).fromArray(this.elements)},copy:function(e){var t=this.elements;e=e.elements;t[0]=e[0];t[1]=e[1];t[2]=e[2];t[3]=e[3];t[4]=e[4];t[5]=e[5];t[6]=e[6];t[7]=e[7];t[8]=e[8];t[9]=e[9];t[10]=e[10];t[11]=e[11];t[12]=e[12];t[13]=e[13];t[14]=e[14];t[15]=e[15];return this},copyPosition:function(e){var t=this.elements;e=e.elements;t[12]=e[12];t[13]=e[13];t[14]=e[14];return this},extractBasis:function(e,t,r){e.setFromMatrixColumn(this,0);t.setFromMatrixColumn(this,1);r.setFromMatrixColumn(this,2);return this},makeBasis:function(e,t,r){this.set(e.x,t.x,r.x,0,e.y,t.y,r.y,0,e.z,t.z,r.z,0,0,0,0,1);return this},extractRotation:function(){var o=new we;return function(e){var t=this.elements,r=e.elements,n=1/o.setFromMatrixColumn(e,0).length(),i=1/o.setFromMatrixColumn(e,1).length();e=1/o.setFromMatrixColumn(e,2).length();t[0]=r[0]*n;t[1]=r[1]*n;t[2]=r[2]*n;t[3]=0;t[4]=r[4]*i;t[5]=r[5]*i;t[6]=r[6]*i;t[7]=0;t[8]=r[8]*e;t[9]=r[9]*e;t[10]=r[10]*e;t[11]=0;t[12]=0;t[13]=0;t[14]=0;t[15]=1;return this}}(),makeRotationFromEuler:function(e){e&&e.isEuler||console.error("THREE.Matrix4: .makeRotationFromEuler() now expects a Euler rotation rather than a Vector3 and order.");var t=this.elements,r=e.x,n=e.y,i=e.z,o=Math.cos(r);r=Math.sin(r);var a=Math.cos(n);n=Math.sin(n);var s=Math.cos(i);i=Math.sin(i);if("XYZ"===e.order){e=o*s;var u=o*i,c=r*s,h=r*i;t[0]=a*s;t[4]=-a*i;t[8]=n;t[1]=u+c*n;t[5]=e-h*n;t[9]=-r*a;t[2]=h-e*n;t[6]=c+u*n;t[10]=o*a}else"YXZ"===e.order?(e=a*s,u=a*i,c=n*s,h=n*i,t[0]=e+h*r,t[4]=c*r-u,t[8]=o*n,t[1]=o*i,t[5]=o*s,t[9]=-r,t[2]=u*r-c,t[6]=h+e*r,t[10]=o*a):"ZXY"===e.order?(e=a*s,u=a*i,c=n*s,h=n*i,t[0]=e-h*r,t[4]=-o*i,t[8]=c+u*r,t[1]=u+c*r,t[5]=o*s,t[9]=h-e*r,t[2]=-o*n,t[6]=r,t[10]=o*a):"ZYX"===e.order?(e=o*s,u=o*i,c=r*s,h=r*i,t[0]=a*s,t[4]=c*n-u,t[8]=e*n+h,t[1]=a*i,t[5]=h*n+e,t[9]=u*n-c,t[2]=-n,t[6]=r*a,t[10]=o*a):"YZX"===e.order?(e=o*a,u=o*n,c=r*a,h=r*n,t[0]=a*s,t[4]=h-e*i,t[8]=c*i+u,t[1]=i,t[5]=o*s,t[9]=-r*s,t[2]=-n*s,t[6]=u*i+c,t[10]=e-h*i):"XZY"===e.order&&(e=o*a,u=o*n,c=r*a,h=r*n,t[0]=a*s,t[4]=-i,t[8]=n*s,t[1]=e*i+h,t[5]=o*s,t[9]=u*i-c,t[2]=c*i-u,t[6]=r*s,t[10]=h*i+e);t[3]=0;t[7]=0;t[11]=0;t[12]=0;t[13]=0;t[14]=0;t[15]=1;return this},makeRotationFromQuaternion:function(){var t=new we(0,0,0),r=new we(1,1,1);return function(e){return this.compose(t,e,r)}}(),lookAt:function(){var i=new we,o=new we,a=new we;return function(e,t,r){var n=this.elements;a.subVectors(e,t);0===a.lengthSq()&&(a.z=1);a.normalize();i.crossVectors(r,a);0===i.lengthSq()&&(1===Math.abs(r.z)?a.x+=1e-4:a.z+=1e-4,a.normalize(),i.crossVectors(r,a));i.normalize();o.crossVectors(a,i);n[0]=i.x;n[4]=o.x;n[8]=a.x;n[1]=i.y;n[5]=o.y;n[9]=a.y;n[2]=i.z;n[6]=o.z;n[10]=a.z;return this}}(),multiply:function(e,t){return void 0!==t?(console.warn("THREE.Matrix4: .multiply() now only accepts one argument. Use .multiplyMatrices( a, b ) instead."),this.multiplyMatrices(e,t)):this.multiplyMatrices(this,e)},premultiply:function(e){return this.multiplyMatrices(e,this)},multiplyMatrices:function(e,t){var r=e.elements,n=t.elements;t=this.elements;e=r[0];var i=r[4],o=r[8],a=r[12],s=r[1],u=r[5],c=r[9],h=r[13],l=r[2],p=r[6],f=r[10],d=r[14],v=r[3],m=r[7],g=r[11];r=r[15];var y=n[0],_=n[4],b=n[8],x=n[12],w=n[1],S=n[5],M=n[9],E=n[13],C=n[2],T=n[6],O=n[10],P=n[14],A=n[3],j=n[7],R=n[11];n=n[15];t[0]=e*y+i*w+o*C+a*A;t[4]=e*_+i*S+o*T+a*j;t[8]=e*b+i*M+o*O+a*R;t[12]=e*x+i*E+o*P+a*n;t[1]=s*y+u*w+c*C+h*A;t[5]=s*_+u*S+c*T+h*j;t[9]=s*b+u*M+c*O+h*R;t[13]=s*x+u*E+c*P+h*n;t[2]=l*y+p*w+f*C+d*A;t[6]=l*_+p*S+f*T+d*j;t[10]=l*b+p*M+f*O+d*R;t[14]=l*x+p*E+f*P+d*n;t[3]=v*y+m*w+g*C+r*A;t[7]=v*_+m*S+g*T+r*j;t[11]=v*b+m*M+g*O+r*R;t[15]=v*x+m*E+g*P+r*n;return this},multiplyScalar:function(e){var t=this.elements;t[0]*=e;t[4]*=e;t[8]*=e;t[12]*=e;t[1]*=e;t[5]*=e;t[9]*=e;t[13]*=e;t[2]*=e;t[6]*=e;t[10]*=e;t[14]*=e;t[3]*=e;t[7]*=e;t[11]*=e;t[15]*=e;return this},applyToBufferAttribute:function(){var n=new we;return function(e){for(var t=0,r=e.count;t<r;t++)n.x=e.getX(t),n.y=e.getY(t),n.z=e.getZ(t),n.applyMatrix4(this),e.setXYZ(t,n.x,n.y,n.z);return e}}(),determinant:function(){var e=this.elements,t=e[0],r=e[4],n=e[8],i=e[12],o=e[1],a=e[5],s=e[9],u=e[13],c=e[2],h=e[6],l=e[10],p=e[14];return e[3]*(+i*s*h-n*u*h-i*a*l+r*u*l+n*a*p-r*s*p)+e[7]*(+t*s*p-t*u*l+i*o*l-n*o*p+n*u*c-i*s*c)+e[11]*(+t*u*h-t*a*p-i*o*h+r*o*p+i*a*c-r*u*c)+e[15]*(-n*a*c-t*s*h+t*a*l+n*o*h-r*o*l+r*s*c)},transpose:function(){var e=this.elements;var 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;return this},setPosition:function(e){var t=this.elements;t[12]=e.x;t[13]=e.y;t[14]=e.z;return this},getInverse:function(e,t){var r=this.elements,n=e.elements;e=n[0];var i=n[1],o=n[2],a=n[3],s=n[4],u=n[5],c=n[6],h=n[7],l=n[8],p=n[9],f=n[10],d=n[11],v=n[12],m=n[13],g=n[14];n=n[15];var y=p*g*h-m*f*h+m*c*d-u*g*d-p*c*n+u*f*n,_=v*f*h-l*g*h-v*c*d+s*g*d+l*c*n-s*f*n,b=l*m*h-v*p*h+v*u*d-s*m*d-l*u*n+s*p*n,x=v*p*c-l*m*c-v*u*f+s*m*f+l*u*g-s*p*g,w=e*y+i*_+o*b+a*x;if(0===w){if(!0===t)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()}t=1/w;r[0]=y*t;r[1]=(m*f*a-p*g*a-m*o*d+i*g*d+p*o*n-i*f*n)*t;r[2]=(u*g*a-m*c*a+m*o*h-i*g*h-u*o*n+i*c*n)*t;r[3]=(p*c*a-u*f*a-p*o*h+i*f*h+u*o*d-i*c*d)*t;r[4]=_*t;r[5]=(l*g*a-v*f*a+v*o*d-e*g*d-l*o*n+e*f*n)*t;r[6]=(v*c*a-s*g*a-v*o*h+e*g*h+s*o*n-e*c*n)*t;r[7]=(s*f*a-l*c*a+l*o*h-e*f*h-s*o*d+e*c*d)*t;r[8]=b*t;r[9]=(v*p*a-l*m*a-v*i*d+e*m*d+l*i*n-e*p*n)*t;r[10]=(s*m*a-v*u*a+v*i*h-e*m*h-s*i*n+e*u*n)*t;r[11]=(l*u*a-s*p*a-l*i*h+e*p*h+s*i*d-e*u*d)*t;r[12]=x*t;r[13]=(l*m*o-v*p*o+v*i*f-e*m*f-l*i*g+e*p*g)*t;r[14]=(v*u*o-s*m*o-v*i*c+e*m*c+s*i*g-e*u*g)*t;r[15]=(s*p*o-l*u*o+l*i*c-e*p*c-s*i*f+e*u*f)*t;return this},scale:function(e){var t=this.elements,r=e.x,n=e.y;e=e.z;t[0]*=r;t[4]*=n;t[8]*=e;t[1]*=r;t[5]*=n;t[9]*=e;t[2]*=r;t[6]*=n;t[10]*=e;t[3]*=r;t[7]*=n;t[11]*=e;return this},getMaxScaleOnAxis:function(){var e=this.elements;return Math.sqrt(Math.max(e[0]*e[0]+e[1]*e[1]+e[2]*e[2],e[4]*e[4]+e[5]*e[5]+e[6]*e[6],e[8]*e[8]+e[9]*e[9]+e[10]*e[10]))},makeTranslation:function(e,t,r){this.set(1,0,0,e,0,1,0,t,0,0,1,r,0,0,0,1);return this},makeRotationX:function(e){var t=Math.cos(e);e=Math.sin(e);this.set(1,0,0,0,0,t,-e,0,0,e,t,0,0,0,0,1);return this},makeRotationY:function(e){var t=Math.cos(e);e=Math.sin(e);this.set(t,0,e,0,0,1,0,0,-e,0,t,0,0,0,0,1);return this},makeRotationZ:function(e){var t=Math.cos(e);e=Math.sin(e);this.set(t,-e,0,0,e,t,0,0,0,0,1,0,0,0,0,1);return this},makeRotationAxis:function(e,t){var r=Math.cos(t);t=Math.sin(t);var n=1-r,i=e.x,o=e.y;e=e.z;var a=n*i,s=n*o;this.set(a*i+r,a*o-t*e,a*e+t*o,0,a*o+t*e,s*o+r,s*e-t*i,0,a*e-t*o,s*e+t*i,n*e*e+r,0,0,0,0,1);return this},makeScale:function(e,t,r){this.set(e,0,0,0,0,t,0,0,0,0,r,0,0,0,0,1);return this},makeShear:function(e,t,r){this.set(1,t,r,0,e,1,r,0,e,t,1,0,0,0,0,1);return this},compose:function(e,t,r){var n=this.elements,i=t._x,o=t._y,a=t._z,s=t._w,u=i+i,c=o+o,h=a+a;t=i*u;var l=i*c;i*=h;var p=o*c;o*=h;a*=h;u*=s;c*=s;s*=h;h=r.x;var f=r.y;r=r.z;n[0]=(1-(p+a))*h;n[1]=(l+s)*h;n[2]=(i-c)*h;n[3]=0;n[4]=(l-s)*f;n[5]=(1-(t+a))*f;n[6]=(o+u)*f;n[7]=0;n[8]=(i+c)*r;n[9]=(o-u)*r;n[10]=(1-(t+p))*r;n[11]=0;n[12]=e.x;n[13]=e.y;n[14]=e.z;n[15]=1;return this},decompose:function(){var u=new we,c=new xe;return function(e,t,r){var n=this.elements,i=u.set(n[0],n[1],n[2]).length(),o=u.set(n[4],n[5],n[6]).length(),a=u.set(n[8],n[9],n[10]).length();0>this.determinant()&&(i=-i);e.x=n[12];e.y=n[13];e.z=n[14];c.copy(this);e=1/i;n=1/o;var s=1/a;c.elements[0]*=e;c.elements[1]*=e;c.elements[2]*=e;c.elements[4]*=n;c.elements[5]*=n;c.elements[6]*=n;c.elements[8]*=s;c.elements[9]*=s;c.elements[10]*=s;t.setFromRotationMatrix(c);r.x=i;r.y=o;r.z=a;return this}}(),makePerspective:function(e,t,r,n,i,o){void 0===o&&console.warn("THREE.Matrix4: .makePerspective() has been redefined and has a new signature. Please check the docs.");var a=this.elements;a[0]=2*i/(t-e);a[4]=0;a[8]=(t+e)/(t-e);a[12]=0;a[1]=0;a[5]=2*i/(r-n);a[9]=(r+n)/(r-n);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;return this},makeOrthographic:function(e,t,r,n,i,o){var a=this.elements,s=1/(t-e),u=1/(r-n),c=1/(o-i);a[0]=2*s;a[4]=0;a[8]=0;a[12]=-((t+e)*s);a[1]=0;a[5]=2*u;a[9]=0;a[13]=-((r+n)*u);a[2]=0;a[6]=0;a[10]=-2*c;a[14]=-((o+i)*c);a[3]=0;a[7]=0;a[11]=0;a[15]=1;return this},equals:function(e){var t=this.elements;e=e.elements;for(var r=0;16>r;r++)if(t[r]!==e[r])return!1;return!0},fromArray:function(e,t){void 0===t&&(t=0);for(var r=0;16>r;r++)this.elements[r]=e[r+t];return this},toArray:function(e,t){void 0===e&&(e=[]);void 0===t&&(t=0);var r=this.elements;e[t]=r[0];e[t+1]=r[1];e[t+2]=r[2];e[t+3]=r[3];e[t+4]=r[4];e[t+5]=r[5];e[t+6]=r[6];e[t+7]=r[7];e[t+8]=r[8];e[t+9]=r[9];e[t+10]=r[10];e[t+11]=r[11];e[t+12]=r[12];e[t+13]=r[13];e[t+14]=r[14];e[t+15]=r[15];return e}});Object.assign(s,{slerp:function(e,t,r,n){return r.copy(e).slerp(t,n)},slerpFlat:function(e,t,r,n,i,o,a){var s=r[n+0],u=r[n+1],c=r[n+2];r=r[n+3];n=i[o+0];var h=i[o+1],l=i[o+2];i=i[o+3];if(r!==i||s!==n||u!==h||c!==l){o=1-a;var p=s*n+u*h+c*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;u=u*o+h*f;c=c*o+l*f;r=r*o+i*f;o===1-a&&(a=1/Math.sqrt(s*s+u*u+c*c+r*r),s*=a,u*=a,c*=a,r*=a)}e[t]=s;e[t+1]=u;e[t+2]=c;e[t+3]=r}});Object.defineProperties(s.prototype,{x:{get:function(){return this._x},set:function(e){this._x=e;this.onChangeCallback()}},y:{get:function(){return this._y},set:function(e){this._y=e;this.onChangeCallback()}},z:{get:function(){return this._z},set:function(e){this._z=e;this.onChangeCallback()}},w:{get:function(){return this._w},set:function(e){this._w=e;this.onChangeCallback()}}});Object.assign(s.prototype,{set:function(e,t,r,n){this._x=e;this._y=t;this._z=r;this._w=n;this.onChangeCallback();return this},clone:function(){return new this.constructor(this._x,this._y,this._z,this._w)},copy:function(e){this._x=e.x;this._y=e.y;this._z=e.z;this._w=e.w;this.onChangeCallback();return this},setFromEuler:function(e,t){if(!e||!e.isEuler)throw Error("THREE.Quaternion: .setFromEuler() now expects an Euler rotation rather than a Vector3 and order.");var r=e._x,n=e._y,i=e._z;e=e.order;var o=Math.cos,a=Math.sin,s=o(r/2),u=o(n/2);o=o(i/2);r=a(r/2);n=a(n/2);i=a(i/2);"XYZ"===e?(this._x=r*u*o+s*n*i,this._y=s*n*o-r*u*i,this._z=s*u*i+r*n*o,this._w=s*u*o-r*n*i):"YXZ"===e?(this._x=r*u*o+s*n*i,this._y=s*n*o-r*u*i,this._z=s*u*i-r*n*o,this._w=s*u*o+r*n*i):"ZXY"===e?(this._x=r*u*o-s*n*i,this._y=s*n*o+r*u*i,this._z=s*u*i+r*n*o,this._w=s*u*o-r*n*i):"ZYX"===e?(this._x=r*u*o-s*n*i,this._y=s*n*o+r*u*i,this._z=s*u*i-r*n*o,this._w=s*u*o+r*n*i):"YZX"===e?(this._x=r*u*o+s*n*i,this._y=s*n*o+r*u*i,this._z=s*u*i-r*n*o,this._w=s*u*o-r*n*i):"XZY"===e&&(this._x=r*u*o-s*n*i,this._y=s*n*o-r*u*i,this._z=s*u*i+r*n*o,this._w=s*u*o+r*n*i);if(!1!==t)this.onChangeCallback();return this},setFromAxisAngle:function(e,t){t/=2;var r=Math.sin(t);this._x=e.x*r;this._y=e.y*r;this._z=e.z*r;this._w=Math.cos(t);this.onChangeCallback();return this},setFromRotationMatrix:function(e){var t=e.elements,r=t[0];e=t[4];var n=t[8],i=t[1],o=t[5],a=t[9],s=t[2],u=t[6];t=t[10];var c=r+o+t;0<c?(r=.5/Math.sqrt(c+1),this._w=.25/r,this._x=(u-a)*r,this._y=(n-s)*r,this._z=(i-e)*r):r>o&&r>t?(r=2*Math.sqrt(1+r-o-t),this._w=(u-a)/r,this._x=.25*r,this._y=(e+i)/r,this._z=(n+s)/r):o>t?(r=2*Math.sqrt(1+o-r-t),this._w=(n-s)/r,this._x=(e+i)/r,this._y=.25*r,this._z=(a+u)/r):(r=2*Math.sqrt(1+t-r-o),this._w=(i-e)/r,this._x=(n+s)/r,this._y=(a+u)/r,this._z=.25*r);this.onChangeCallback();return this},setFromUnitVectors:function(){var r=new we,n;return function(e,t){void 0===r&&(r=new we);n=e.dot(t)+1;1e-6>n?(n=0,Math.abs(e.x)>Math.abs(e.z)?r.set(-e.y,e.x,0):r.set(0,-e.z,e.y)):r.crossVectors(e,t);this._x=r.x;this._y=r.y;this._z=r.z;this._w=n;return this.normalize()}}(),angleTo:function(e){return 2*Math.acos(Math.abs(eo.clamp(this.dot(e),-1,1)))},rotateTowards:function(e,t){var r=this.angleTo(e);if(0===r)return this;this.slerp(e,Math.min(1,t/r));return this},inverse:function(){return this.conjugate()},conjugate:function(){this._x*=-1;this._y*=-1;this._z*=-1;this.onChangeCallback();return this},dot:function(e){return this._x*e._x+this._y*e._y+this._z*e._z+this._w*e._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 e=this.length();0===e?(this._z=this._y=this._x=0,this._w=1):(e=1/e,this._x*=e,this._y*=e,this._z*=e,this._w*=e);this.onChangeCallback();return this},multiply:function(e,t){return void 0!==t?(console.warn("THREE.Quaternion: .multiply() now only accepts one argument. Use .multiplyQuaternions( a, b ) instead."),this.multiplyQuaternions(e,t)):this.multiplyQuaternions(this,e)},premultiply:function(e){return this.multiplyQuaternions(e,this)},multiplyQuaternions:function(e,t){var r=e._x,n=e._y,i=e._z;e=e._w;var o=t._x,a=t._y,s=t._z;t=t._w;this._x=r*t+e*o+n*s-i*a;this._y=n*t+e*a+i*o-r*s;this._z=i*t+e*s+r*a-n*o;this._w=e*t-r*o-n*a-i*s;this.onChangeCallback();return this},slerp:function(e,t){if(0===t)return this;if(1===t)return this.copy(e);var r=this._x,n=this._y,i=this._z,o=this._w,a=o*e._w+r*e._x+n*e._y+i*e._z;0>a?(this._w=-e._w,this._x=-e._x,this._y=-e._y,this._z=-e._z,a=-a):this.copy(e);if(1<=a)return this._w=o,this._x=r,this._y=n,this._z=i,this;e=1-a*a;if(e<=Number.EPSILON)return a=1-t,this._w=a*o+t*this._w,this._x=a*r+t*this._x,this._y=a*n+t*this._y,this._z=a*i+t*this._z,this.normalize();e=Math.sqrt(e);var s=Math.atan2(e,a);a=Math.sin((1-t)*s)/e;t=Math.sin(t*s)/e;this._w=o*a+this._w*t;this._x=r*a+this._x*t;this._y=n*a+this._y*t;this._z=i*a+this._z*t;this.onChangeCallback();return this},equals:function(e){return e._x===this._x&&e._y===this._y&&e._z===this._z&&e._w===this._w},fromArray:function(e,t){void 0===t&&(t=0);this._x=e[t];this._y=e[t+1];this._z=e[t+2];this._w=e[t+3];this.onChangeCallback();return this},toArray:function(e,t){void 0===e&&(e=[]);void 0===t&&(t=0);e[t]=this._x;e[t+1]=this._y;e[t+2]=this._z;e[t+3]=this._w;return e},onChange:function(e){this.onChangeCallback=e;return this},onChangeCallback:function(){}});Object.assign(we.prototype,{isVector3:!0,set:function(e,t,r){this.x=e;this.y=t;this.z=r;return this},setScalar:function(e){this.z=this.y=this.x=e;return this},setX:function(e){this.x=e;return this},setY:function(e){this.y=e;return this},setZ:function(e){this.z=e;return this},setComponent:function(e,t){switch(e){case 0:this.x=t;break;case 1:this.y=t;break;case 2:this.z=t;break;default:throw Error("index is out of range: "+e)}return this},getComponent:function(e){switch(e){case 0:return this.x;case 1:return this.y;case 2:return this.z;default:throw Error("index is out of range: "+e)}},clone:function(){return new this.constructor(this.x,this.y,this.z)},copy:function(e){this.x=e.x;this.y=e.y;this.z=e.z;return this},add:function(e,t){if(void 0!==t)return console.warn("THREE.Vector3: .add() now only accepts one argument. Use .addVectors( a, b ) instead."),this.addVectors(e,t);this.x+=e.x;this.y+=e.y;this.z+=e.z;return this},addScalar:function(e){this.x+=e;this.y+=e;this.z+=e;return this},addVectors:function(e,t){this.x=e.x+t.x;this.y=e.y+t.y;this.z=e.z+t.z;return this},addScaledVector:function(e,t){this.x+=e.x*t;this.y+=e.y*t;this.z+=e.z*t;return this},sub:function(e,t){if(void 0!==t)return console.warn("THREE.Vector3: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."),this.subVectors(e,t);this.x-=e.x;this.y-=e.y;this.z-=e.z;return this},subScalar:function(e){this.x-=e;this.y-=e;this.z-=e;return this},subVectors:function(e,t){this.x=e.x-t.x;this.y=e.y-t.y;this.z=e.z-t.z;return this},multiply:function(e,t){if(void 0!==t)return console.warn("THREE.Vector3: .multiply() now only accepts one argument. Use .multiplyVectors( a, b ) instead."),this.multiplyVectors(e,t);this.x*=e.x;this.y*=e.y;this.z*=e.z;return this},multiplyScalar:function(e){this.x*=e;this.y*=e;this.z*=e;return this},multiplyVectors:function(e,t){this.x=e.x*t.x;this.y=e.y*t.y;this.z=e.z*t.z;return this},applyEuler:function(){var t=new s;return function(e){e&&e.isEuler||console.error("THREE.Vector3: .applyEuler() now expects an Euler rotation rather than a Vector3 and order.");return this.applyQuaternion(t.setFromEuler(e))}}(),applyAxisAngle:function(){var r=new s;return function(e,t){return this.applyQuaternion(r.setFromAxisAngle(e,t))}}(),applyMatrix3:function(e){var t=this.x,r=this.y,n=this.z;e=e.elements;this.x=e[0]*t+e[3]*r+e[6]*n;this.y=e[1]*t+e[4]*r+e[7]*n;this.z=e[2]*t+e[5]*r+e[8]*n;return this},applyMatrix4:function(e){var t=this.x,r=this.y,n=this.z;e=e.elements;var i=1/(e[3]*t+e[7]*r+e[11]*n+e[15]);this.x=(e[0]*t+e[4]*r+e[8]*n+e[12])*i;this.y=(e[1]*t+e[5]*r+e[9]*n+e[13])*i;this.z=(e[2]*t+e[6]*r+e[10]*n+e[14])*i;return this},applyQuaternion:function(e){var t=this.x,r=this.y,n=this.z,i=e.x,o=e.y,a=e.z;e=e.w;var s=e*t+o*n-a*r,u=e*r+a*t-i*n,c=e*n+i*r-o*t;t=-i*t-o*r-a*n;this.x=s*e+t*-i+u*-a-c*-o;this.y=u*e+t*-o+c*-i-s*-a;this.z=c*e+t*-a+s*-o-u*-i;return this},project:function(){var t=new xe;return function(e){t.multiplyMatrices(e.projectionMatrix,t.getInverse(e.matrixWorld));return this.applyMatrix4(t)}}(),unproject:function(){var t=new xe;return function(e){t.multiplyMatrices(e.matrixWorld,t.getInverse(e.projectionMatrix));return this.applyMatrix4(t)}}(),transformDirection:function(e){var t=this.x,r=this.y,n=this.z;e=e.elements;this.x=e[0]*t+e[4]*r+e[8]*n;this.y=e[1]*t+e[5]*r+e[9]*n;this.z=e[2]*t+e[6]*r+e[10]*n;return this.normalize()},divide:function(e){this.x/=e.x;this.y/=e.y;this.z/=e.z;return this},divideScalar:function(e){return this.multiplyScalar(1/e)},min:function(e){this.x=Math.min(this.x,e.x);this.y=Math.min(this.y,e.y);this.z=Math.min(this.z,e.z);return this},max:function(e){this.x=Math.max(this.x,e.x);this.y=Math.max(this.y,e.y);this.z=Math.max(this.z,e.z);return this},clamp:function(e,t){this.x=Math.max(e.x,Math.min(t.x,this.x));this.y=Math.max(e.y,Math.min(t.y,this.y));this.z=Math.max(e.z,Math.min(t.z,this.z));return this},clampScalar:function(){var r=new we,n=new we;return function(e,t){r.set(e,e,e);n.set(t,t,t);return this.clamp(r,n)}}(),clampLength:function(e,t){var r=this.length();return this.divideScalar(r||1).multiplyScalar(Math.max(e,Math.min(t,r)))},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):Math.floor(this.z);return this},negate:function(){this.x=-this.x;this.y=-this.y;this.z=-this.z;return this},dot:function(e){return this.x*e.x+this.y*e.y+this.z*e.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)},manhattanLength:function(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)},normalize:function(){return this.divideScalar(this.length()||1)},setLength:function(e){return this.normalize().multiplyScalar(e)},lerp:function(e,t){this.x+=(e.x-this.x)*t;this.y+=(e.y-this.y)*t;this.z+=(e.z-this.z)*t;return this},lerpVectors:function(e,t,r){return this.subVectors(t,e).multiplyScalar(r).add(e)},cross:function(e,t){return void 0!==t?(console.warn("THREE.Vector3: .cross() now only accepts one argument. Use .crossVectors( a, b ) instead."),this.crossVectors(e,t)):this.crossVectors(this,e)},crossVectors:function(e,t){var r=e.x,n=e.y;e=e.z;var i=t.x,o=t.y;t=t.z;this.x=n*t-e*o;this.y=e*i-r*t;this.z=r*o-n*i;return this},projectOnVector:function(e){var t=e.dot(this)/e.lengthSq();return this.copy(e).multiplyScalar(t)},projectOnPlane:function(){var t=new we;return function(e){t.copy(this).projectOnVector(e);return this.sub(t)}}(),reflect:function(){var t=new we;return function(e){return this.sub(t.copy(e).multiplyScalar(2*this.dot(e)))}}(),angleTo:function(e){e=this.dot(e)/Math.sqrt(this.lengthSq()*e.lengthSq());return Math.acos(eo.clamp(e,-1,1))},distanceTo:function(e){return Math.sqrt(this.distanceToSquared(e))},distanceToSquared:function(e){var t=this.x-e.x,r=this.y-e.y;e=this.z-e.z;return t*t+r*r+e*e},manhattanDistanceTo:function(e){return Math.abs(this.x-e.x)+Math.abs(this.y-e.y)+Math.abs(this.z-e.z)},setFromSpherical:function(e){var t=Math.sin(e.phi)*e.radius;this.x=t*Math.sin(e.theta);this.y=Math.cos(e.phi)*e.radius;this.z=t*Math.cos(e.theta);return this},setFromCylindrical:function(e){this.x=e.radius*Math.sin(e.theta);this.y=e.y;this.z=e.radius*Math.cos(e.theta);return this},setFromMatrixPosition:function(e){e=e.elements;this.x=e[12];this.y=e[13];this.z=e[14];return this},setFromMatrixScale:function(e){var t=this.setFromMatrixColumn(e,0).length(),r=this.setFromMatrixColumn(e,1).length();e=this.setFromMatrixColumn(e,2).length();this.x=t;this.y=r;this.z=e;return this},setFromMatrixColumn:function(e,t){return this.fromArray(e.elements,4*t)},equals:function(e){return e.x===this.x&&e.y===this.y&&e.z===this.z},fromArray:function(e,t){void 0===t&&(t=0);this.x=e[t];this.y=e[t+1];this.z=e[t+2];return this},toArray:function(e,t){void 0===e&&(e=[]);void 0===t&&(t=0);e[t]=this.x;e[t+1]=this.y;e[t+2]=this.z;return e},fromBufferAttribute:function(e,t,r){void 0!==r&&console.warn("THREE.Vector3: offset has been removed from .fromBufferAttribute().");this.x=e.getX(t);this.y=e.getY(t);this.z=e.getZ(t);return this}});Object.assign(m.prototype,{isMatrix3:!0,set:function(e,t,r,n,i,o,a,s,u){var c=this.elements;c[0]=e;c[1]=n;c[2]=a;c[3]=t;c[4]=i;c[5]=s;c[6]=r;c[7]=o;c[8]=u;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(e){var t=this.elements;e=e.elements;t[0]=e[0];t[1]=e[1];t[2]=e[2];t[3]=e[3];t[4]=e[4];t[5]=e[5];t[6]=e[6];t[7]=e[7];t[8]=e[8];return this},setFromMatrix4:function(e){e=e.elements;this.set(e[0],e[4],e[8],e[1],e[5],e[9],e[2],e[6],e[10]);return this},applyToBufferAttribute:function(){var n=new we;return function(e){for(var t=0,r=e.count;t<r;t++)n.x=e.getX(t),n.y=e.getY(t),n.z=e.getZ(t),n.applyMatrix3(this),e.setXYZ(t,n.x,n.y,n.z);return e}}(),multiply:function(e){return this.multiplyMatrices(this,e)},premultiply:function(e){return this.multiplyMatrices(e,this)},multiplyMatrices:function(e,t){var r=e.elements,n=t.elements;t=this.elements;e=r[0];var i=r[3],o=r[6],a=r[1],s=r[4],u=r[7],c=r[2],h=r[5];r=r[8];var l=n[0],p=n[3],f=n[6],d=n[1],v=n[4],m=n[7],g=n[2],y=n[5];n=n[8];t[0]=e*l+i*d+o*g;t[3]=e*p+i*v+o*y;t[6]=e*f+i*m+o*n;t[1]=a*l+s*d+u*g;t[4]=a*p+s*v+u*y;t[7]=a*f+s*m+u*n;t[2]=c*l+h*d+r*g;t[5]=c*p+h*v+r*y;t[8]=c*f+h*m+r*n;return this},multiplyScalar:function(e){var t=this.elements;t[0]*=e;t[3]*=e;t[6]*=e;t[1]*=e;t[4]*=e;t[7]*=e;t[2]*=e;t[5]*=e;t[8]*=e;return this},determinant:function(){var e=this.elements,t=e[0],r=e[1],n=e[2],i=e[3],o=e[4],a=e[5],s=e[6],u=e[7];e=e[8];return t*o*e-t*a*u-r*i*e+r*a*s+n*i*u-n*o*s},getInverse:function(e,t){e&&e.isMatrix4&&console.error("THREE.Matrix3: .getInverse() no longer takes a Matrix4 argument.");var r=e.elements;e=this.elements;var n=r[0],i=r[1],o=r[2],a=r[3],s=r[4],u=r[5],c=r[6],h=r[7];r=r[8];var l=r*s-u*h,p=u*c-r*a,f=h*a-s*c,d=n*l+i*p+o*f;if(0===d){if(!0===t)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()}t=1/d;e[0]=l*t;e[1]=(o*h-r*i)*t;e[2]=(u*i-o*s)*t;e[3]=p*t;e[4]=(r*n-o*c)*t;e[5]=(o*a-u*n)*t;e[6]=f*t;e[7]=(i*c-h*n)*t;e[8]=(s*n-i*a)*t;return this},transpose:function(){var e=this.elements;var 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;return this},getNormalMatrix:function(e){return this.setFromMatrix4(e).getInverse(this).transpose()},transposeIntoArray:function(e){var t=this.elements;e[0]=t[0];e[1]=t[3];e[2]=t[6];e[3]=t[1];e[4]=t[4];e[5]=t[7];e[6]=t[2];e[7]=t[5];e[8]=t[8];return this},setUvTransform:function(e,t,r,n,i,o,a){var s=Math.cos(i);i=Math.sin(i);this.set(r*s,r*i,-r*(s*o+i*a)+o+e,-n*i,n*s,-n*(-i*o+s*a)+a+t,0,0,1)},scale:function(e,t){var r=this.elements;r[0]*=e;r[3]*=e;r[6]*=e;r[1]*=t;r[4]*=t;r[7]*=t;return this},rotate:function(e){var t=Math.cos(e);e=Math.sin(e);var r=this.elements,n=r[0],i=r[3],o=r[6],a=r[1],s=r[4],u=r[7];r[0]=t*n+e*a;r[3]=t*i+e*s;r[6]=t*o+e*u;r[1]=-e*n+t*a;r[4]=-e*i+t*s;r[7]=-e*o+t*u;return this},translate:function(e,t){var r=this.elements;r[0]+=e*r[2];r[3]+=e*r[5];r[6]+=e*r[8];r[1]+=t*r[2];r[4]+=t*r[5];r[7]+=t*r[8];return this},equals:function(e){var t=this.elements;e=e.elements;for(var r=0;9>r;r++)if(t[r]!==e[r])return!1;return!0},fromArray:function(e,t){void 0===t&&(t=0);for(var r=0;9>r;r++)this.elements[r]=e[r+t];return this},toArray:function(e,t){void 0===e&&(e=[]);void 0===t&&(t=0);var r=this.elements;e[t]=r[0];e[t+1]=r[1];e[t+2]=r[2];e[t+3]=r[3];e[t+4]=r[4];e[t+5]=r[5];e[t+6]=r[6];e[t+7]=r[7];e[t+8]=r[8];return e}});var to={getDataURL:function(e){if(e instanceof HTMLCanvasElement)var t=e;else{"undefined"!==typeof OffscreenCanvas?t=new OffscreenCanvas(e.width,e.height):(t=document.createElementNS("http://www.w3.org/1999/xhtml","canvas"),t.width=e.width,t.height=e.height);var r=t.getContext("2d");e instanceof ImageData?r.putImageData(e,0,0):r.drawImage(e,0,0,e.width,e.height)}return 2048<t.width||2048<t.height?t.toDataURL("image/jpeg",.6):t.toDataURL("image/png")}},ro=0;p.DEFAULT_IMAGE=void 0;p.DEFAULT_MAPPING=300;p.prototype=Object.assign(Object.create(t.prototype),{constructor:p,isTexture:!0,updateMatrix:function(){this.matrix.setUvTransform(this.offset.x,this.offset.y,this.repeat.x,this.repeat.y,this.rotation,this.center.x,this.center.y)},clone:function(){return(new this.constructor).copy(this)},copy:function(e){this.name=e.name;this.image=e.image;this.mipmaps=e.mipmaps.slice(0);this.mapping=e.mapping;this.wrapS=e.wrapS;this.wrapT=e.wrapT;this.magFilter=e.magFilter;this.minFilter=e.minFilter;this.anisotropy=e.anisotropy;this.format=e.format;this.type=e.type;this.offset.copy(e.offset);this.repeat.copy(e.repeat);this.center.copy(e.center);this.rotation=e.rotation;this.matrixAutoUpdate=e.matrixAutoUpdate;this.matrix.copy(e.matrix);this.generateMipmaps=e.generateMipmaps;this.premultiplyAlpha=e.premultiplyAlpha;this.flipY=e.flipY;this.unpackAlignment=e.unpackAlignment;this.encoding=e.encoding;return this},toJSON:function(e){var t=void 0===e||"string"===typeof e;if(!t&&void 0!==e.textures[this.uuid])return e.textures[this.uuid];var r={metadata:{version:4.5,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],center:[this.center.x,this.center.y],rotation:this.rotation,wrap:[this.wrapS,this.wrapT],format:this.format,minFilter:this.minFilter,magFilter:this.magFilter,anisotropy:this.anisotropy,flipY:this.flipY};if(void 0!==this.image){var n=this.image;void 0===n.uuid&&(n.uuid=eo.generateUUID());if(!t&&void 0===e.images[n.uuid]){if(Array.isArray(n)){var i=[];for(var o=0,a=n.length;o<a;o++)i.push(to.getDataURL(n[o]))}else i=to.getDataURL(n);e.images[n.uuid]={uuid:n.uuid,url:i}}r.image=n.uuid}t||(e.textures[this.uuid]=r);return r},dispose:function(){this.dispatchEvent({type:"dispose"})},transformUv:function(e){if(300===this.mapping){e.applyMatrix3(this.matrix);if(0>e.x||1<e.x)switch(this.wrapS){case 1e3:e.x-=Math.floor(e.x);break;case 1001:e.x=0>e.x?0:1;break;case 1002:e.x=1===Math.abs(Math.floor(e.x)%2)?Math.ceil(e.x)-e.x:e.x-Math.floor(e.x)}if(0>e.y||1<e.y)switch(this.wrapT){case 1e3:e.y-=Math.floor(e.y);break;case 1001:e.y=0>e.y?0:1;break;case 1002:e.y=1===Math.abs(Math.floor(e.y)%2)?Math.ceil(e.y)-e.y:e.y-Math.floor(e.y)}this.flipY&&(e.y=1-e.y)}}});Object.defineProperty(p.prototype,"needsUpdate",{set:function(e){!0===e&&this.version++}});Object.assign(Se.prototype,{isVector4:!0,set:function(e,t,r,n){this.x=e;this.y=t;this.z=r;this.w=n;return this},setScalar:function(e){this.w=this.z=this.y=this.x=e;return this},setX:function(e){this.x=e;return this},setY:function(e){this.y=e;return this},setZ:function(e){this.z=e;return this},setW:function(e){this.w=e;return this},setComponent:function(e,t){switch(e){case 0:this.x=t;break;case 1:this.y=t;break;case 2:this.z=t;break;case 3:this.w=t;break;default:throw Error("index is out of range: "+e)}return this},getComponent:function(e){switch(e){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: "+e)}},clone:function(){return new this.constructor(this.x,this.y,this.z,this.w)},copy:function(e){this.x=e.x;this.y=e.y;this.z=e.z;this.w=void 0!==e.w?e.w:1;return this},add:function(e,t){if(void 0!==t)return console.warn("THREE.Vector4: .add() now only accepts one argument. Use .addVectors( a, b ) instead."),this.addVectors(e,t);this.x+=e.x;this.y+=e.y;this.z+=e.z;this.w+=e.w;return this},addScalar:function(e){this.x+=e;this.y+=e;this.z+=e;this.w+=e;return this},addVectors:function(e,t){this.x=e.x+t.x;this.y=e.y+t.y;this.z=e.z+t.z;this.w=e.w+t.w;return this},addScaledVector:function(e,t){this.x+=e.x*t;this.y+=e.y*t;this.z+=e.z*t;this.w+=e.w*t;return this},sub:function(e,t){if(void 0!==t)return console.warn("THREE.Vector4: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."),this.subVectors(e,t);this.x-=e.x;this.y-=e.y;this.z-=e.z;this.w-=e.w;return this},subScalar:function(e){this.x-=e;this.y-=e;this.z-=e;this.w-=e;return this},subVectors:function(e,t){this.x=e.x-t.x;this.y=e.y-t.y;this.z=e.z-t.z;this.w=e.w-t.w;return this},multiplyScalar:function(e){this.x*=e;this.y*=e;this.z*=e;this.w*=e;return this},applyMatrix4:function(e){var t=this.x,r=this.y,n=this.z,i=this.w;e=e.elements;this.x=e[0]*t+e[4]*r+e[8]*n+e[12]*i;this.y=e[1]*t+e[5]*r+e[9]*n+e[13]*i;this.z=e[2]*t+e[6]*r+e[10]*n+e[14]*i;this.w=e[3]*t+e[7]*r+e[11]*n+e[15]*i;return this},divideScalar:function(e){return this.multiplyScalar(1/e)},setAxisAngleFromQuaternion:function(e){this.w=2*Math.acos(e.w);var t=Math.sqrt(1-e.w*e.w);1e-4>t?(this.x=1,this.z=this.y=0):(this.x=e.x/t,this.y=e.y/t,this.z=e.z/t);return this},setAxisAngleFromRotationMatrix:function(e){e=e.elements;var t=e[0];var r=e[4];var n=e[8],i=e[1],o=e[5],a=e[9];var s=e[2];var u=e[6];var c=e[10];if(.01>Math.abs(r-i)&&.01>Math.abs(n-s)&&.01>Math.abs(a-u)){if(.1>Math.abs(r+i)&&.1>Math.abs(n+s)&&.1>Math.abs(a+u)&&.1>Math.abs(t+o+c-3))return this.set(1,0,0,0),this;e=Math.PI;t=(t+1)/2;o=(o+1)/2;c=(c+1)/2;r=(r+i)/4;n=(n+s)/4;a=(a+u)/4;t>o&&t>c?.01>t?(u=0,r=s=.707106781):(u=Math.sqrt(t),s=r/u,r=n/u):o>c?.01>o?(u=.707106781,s=0,r=.707106781):(s=Math.sqrt(o),u=r/s,r=a/s):.01>c?(s=u=.707106781,r=0):(r=Math.sqrt(c),u=n/r,s=a/r);this.set(u,s,r,e);return this}e=Math.sqrt((u-a)*(u-a)+(n-s)*(n-s)+(i-r)*(i-r));.001>Math.abs(e)&&(e=1);this.x=(u-a)/e;this.y=(n-s)/e;this.z=(i-r)/e;this.w=Math.acos((t+o+c-1)/2);return this},min:function(e){this.x=Math.min(this.x,e.x);this.y=Math.min(this.y,e.y);this.z=Math.min(this.z,e.z);this.w=Math.min(this.w,e.w);return this},max:function(e){this.x=Math.max(this.x,e.x);this.y=Math.max(this.y,e.y);this.z=Math.max(this.z,e.z);this.w=Math.max(this.w,e.w);return this},clamp:function(e,t){this.x=Math.max(e.x,Math.min(t.x,this.x));this.y=Math.max(e.y,Math.min(t.y,this.y));this.z=Math.max(e.z,Math.min(t.z,this.z));this.w=Math.max(e.w,Math.min(t.w,this.w));return this},clampScalar:function(){var r,n;return function(e,t){void 0===r&&(r=new Se,n=new Se);r.set(e,e,e,e);n.set(t,t,t,t);return this.clamp(r,n)}}(),clampLength:function(e,t){var r=this.length();return this.divideScalar(r||1).multiplyScalar(Math.max(e,Math.min(t,r)))},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);this.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(e){return this.x*e.x+this.y*e.y+this.z*e.z+this.w*e.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)},manhattanLength: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()||1)},setLength:function(e){return this.normalize().multiplyScalar(e)},lerp:function(e,t){this.x+=(e.x-this.x)*t;this.y+=(e.y-this.y)*t;this.z+=(e.z-this.z)*t;this.w+=(e.w-this.w)*t;return this},lerpVectors:function(e,t,r){return this.subVectors(t,e).multiplyScalar(r).add(e)},equals:function(e){return e.x===this.x&&e.y===this.y&&e.z===this.z&&e.w===this.w},fromArray:function(e,t){void 0===t&&(t=0);this.x=e[t];this.y=e[t+1];this.z=e[t+2];this.w=e[t+3];return this},toArray:function(e,t){void 0===e&&(e=[]);void 0===t&&(t=0);e[t]=this.x;e[t+1]=this.y;e[t+2]=this.z;e[t+3]=this.w;return e},fromBufferAttribute:function(e,t,r){void 0!==r&&console.warn("THREE.Vector4: offset has been removed from .fromBufferAttribute().");this.x=e.getX(t);this.y=e.getY(t);this.z=e.getZ(t);this.w=e.getW(t);return this}});T.prototype=Object.assign(Object.create(t.prototype),{constructor:T,isWebGLRenderTarget:!0,setSize:function(e,t){if(this.width!==e||this.height!==t)this.width=e,this.height=t,this.dispose();this.viewport.set(0,0,e,t);this.scissor.set(0,0,e,t)},clone:function(){return(new this.constructor).copy(this)},copy:function(e){this.width=e.width;this.height=e.height;this.viewport.copy(e.viewport);this.texture=e.texture.clone();this.depthBuffer=e.depthBuffer;this.stencilBuffer=e.stencilBuffer;this.depthTexture=e.depthTexture;return this},dispose:function(){this.dispatchEvent({type:"dispose"})}});n.prototype=Object.create(T.prototype);n.prototype.constructor=n;n.prototype.isWebGLRenderTargetCube=!0;Me.prototype=Object.create(p.prototype);Me.prototype.constructor=Me;Me.prototype.isDataTexture=!0;Object.assign(r.prototype,{isBox3:!0,set:function(e,t){this.min.copy(e);this.max.copy(t);return this},setFromArray:function(e){for(var t=Infinity,r=Infinity,n=Infinity,i=-Infinity,o=-Infinity,a=-Infinity,s=0,u=e.length;s<u;s+=3){var c=e[s],h=e[s+1],l=e[s+2];c<t&&(t=c);h<r&&(r=h);l<n&&(n=l);c>i&&(i=c);h>o&&(o=h);l>a&&(a=l)}this.min.set(t,r,n);this.max.set(i,o,a);return this},setFromBufferAttribute:function(e){for(var t=Infinity,r=Infinity,n=Infinity,i=-Infinity,o=-Infinity,a=-Infinity,s=0,u=e.count;s<u;s++){var c=e.getX(s),h=e.getY(s),l=e.getZ(s);c<t&&(t=c);h<r&&(r=h);l<n&&(n=l);c>i&&(i=c);h>o&&(o=h);l>a&&(a=l)}this.min.set(t,r,n);this.max.set(i,o,a);return this},setFromPoints:function(e){this.makeEmpty();for(var t=0,r=e.length;t<r;t++)this.expandByPoint(e[t]);return this},setFromCenterAndSize:function(){var r=new we;return function(e,t){t=r.copy(t).multiplyScalar(.5);this.min.copy(e).sub(t);this.max.copy(e).add(t);return this}}(),setFromObject:function(e){this.makeEmpty();return this.expandByObject(e)},clone:function(){return(new this.constructor).copy(this)},copy:function(e){this.min.copy(e.min);this.max.copy(e.max);return this},makeEmpty:function(){this.min.x=this.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(e){void 0===e&&(console.warn("THREE.Box3: .getCenter() target is now required"),e=new we);return this.isEmpty()?e.set(0,0,0):e.addVectors(this.min,this.max).multiplyScalar(.5)},getSize:function(e){void 0===e&&(console.warn("THREE.Box3: .getSize() target is now required"),e=new we);return this.isEmpty()?e.set(0,0,0):e.subVectors(this.max,this.min)},expandByPoint:function(e){this.min.min(e);this.max.max(e);return this},expandByVector:function(e){this.min.sub(e);this.max.add(e);return this},expandByScalar:function(e){this.min.addScalar(-e);this.max.addScalar(e);return this},expandByObject:function(){function t(e){var t=e.geometry;if(void 0!==t)if(t.isGeometry)for(t=t.vertices,n=0,i=t.length;n<i;n++)o.copy(t[n]),o.applyMatrix4(e.matrixWorld),r.expandByPoint(o);else if(t.isBufferGeometry&&(t=t.attributes.position,void 0!==t))for(n=0,i=t.count;n<i;n++)o.fromBufferAttribute(t,n).applyMatrix4(e.matrixWorld),r.expandByPoint(o)}var r,n,i,o=new we;return function(e){r=this;e.updateMatrixWorld(!0);e.traverse(t);return this}}(),containsPoint:function(e){return e.x<this.min.x||e.x>this.max.x||e.y<this.min.y||e.y>this.max.y||e.z<this.min.z||e.z>this.max.z?!1:!0},containsBox:function(e){return this.min.x<=e.min.x&&e.max.x<=this.max.x&&this.min.y<=e.min.y&&e.max.y<=this.max.y&&this.min.z<=e.min.z&&e.max.z<=this.max.z},getParameter:function(e,t){void 0===t&&(console.warn("THREE.Box3: .getParameter() target is now required"),t=new we);return t.set((e.x-this.min.x)/(this.max.x-this.min.x),(e.y-this.min.y)/(this.max.y-this.min.y),(e.z-this.min.z)/(this.max.z-this.min.z))},intersectsBox:function(e){return e.max.x<this.min.x||e.min.x>this.max.x||e.max.y<this.min.y||e.min.y>this.max.y||e.max.z<this.min.z||e.min.z>this.max.z?!1:!0},intersectsSphere:function(){var t=new we;return function(e){this.clampPoint(e.center,t);return t.distanceToSquared(e.center)<=e.radius*e.radius}}(),intersectsPlane:function(e){if(0<e.normal.x){var t=e.normal.x*this.min.x;var r=e.normal.x*this.max.x}else t=e.normal.x*this.max.x,r=e.normal.x*this.min.x;0<e.normal.y?(t+=e.normal.y*this.min.y,r+=e.normal.y*this.max.y):(t+=e.normal.y*this.max.y,r+=e.normal.y*this.min.y);0<e.normal.z?(t+=e.normal.z*this.min.z,r+=e.normal.z*this.max.z):(t+=e.normal.z*this.max.z,r+=e.normal.z*this.min.z);return t<=e.constant&&r>=e.constant},intersectsTriangle:function(){function t(e){var t;var r=0;for(t=e.length-3;r<=t;r+=3){h.fromArray(e,r);var n=l.x*Math.abs(h.x)+l.y*Math.abs(h.y)+l.z*Math.abs(h.z),i=s.dot(h),o=u.dot(h),a=c.dot(h);if(Math.max(-Math.max(i,o,a),Math.min(i,o,a))>n)return!1}return!0}var s=new we,u=new we,c=new we,r=new we,n=new we,i=new we,h=new we,o=new we,l=new we,a=new we;return function(e){if(this.isEmpty())return!1;this.getCenter(o);l.subVectors(this.max,o);s.subVectors(e.a,o);u.subVectors(e.b,o);c.subVectors(e.c,o);r.subVectors(u,s);n.subVectors(c,u);i.subVectors(s,c);e=[0,-r.z,r.y,0,-n.z,n.y,0,-i.z,i.y,r.z,0,-r.x,n.z,0,-n.x,i.z,0,-i.x,-r.y,r.x,0,-n.y,n.x,0,-i.y,i.x,0];if(!t(e))return!1;e=[1,0,0,0,1,0,0,0,1];if(!t(e))return!1;a.crossVectors(r,n);e=[a.x,a.y,a.z];return t(e)}}(),clampPoint:function(e,t){void 0===t&&(console.warn("THREE.Box3: .clampPoint() target is now required"),t=new we);return t.copy(e).clamp(this.min,this.max)},distanceToPoint:function(){var t=new we;return function(e){return t.copy(e).clamp(this.min,this.max).sub(e).length()}}(),getBoundingSphere:function(){var t=new we;return function(e){void 0===e&&(console.warn("THREE.Box3: .getBoundingSphere() target is now required"),e=new c);this.getCenter(e.center);e.radius=.5*this.getSize(t).length();return e}}(),intersect:function(e){this.min.max(e.min);this.max.min(e.max);this.isEmpty()&&this.makeEmpty();return this},union:function(e){this.min.min(e.min);this.max.max(e.max);return this},applyMatrix4:function(e){if(this.isEmpty())return this;e=e.elements;var t=e[0]*this.min.x,r=e[1]*this.min.x,n=e[2]*this.min.x,i=e[0]*this.max.x,o=e[1]*this.max.x,a=e[2]*this.max.x,s=e[4]*this.min.y,u=e[5]*this.min.y,c=e[6]*this.min.y,h=e[4]*this.max.y,l=e[5]*this.max.y,p=e[6]*this.max.y,f=e[8]*this.min.z,d=e[9]*this.min.z,v=e[10]*this.min.z,m=e[8]*this.max.z,g=e[9]*this.max.z,y=e[10]*this.max.z;this.min.x=Math.min(t,i)+Math.min(s,h)+Math.min(f,m)+e[12];this.min.y=Math.min(r,o)+Math.min(u,l)+Math.min(d,g)+e[13];this.min.z=Math.min(n,a)+Math.min(c,p)+Math.min(v,y)+e[14];this.max.x=Math.max(t,i)+Math.max(s,h)+Math.max(f,m)+e[12];this.max.y=Math.max(r,o)+Math.max(u,l)+Math.max(d,g)+e[13];this.max.z=Math.max(n,a)+Math.max(c,p)+Math.max(v,y)+e[14];return this},translate:function(e){this.min.add(e);this.max.add(e);return this},equals:function(e){return e.min.equals(this.min)&&e.max.equals(this.max)}});Object.assign(c.prototype,{set:function(e,t){this.center.copy(e);this.radius=t;return this},setFromPoints:function(){var o=new r;return function(e,t){var r=this.center;void 0!==t?r.copy(t):o.setFromPoints(e).getCenter(r);for(var n=t=0,i=e.length;n<i;n++)t=Math.max(t,r.distanceToSquared(e[n]));this.radius=Math.sqrt(t);return this}}(),clone:function(){return(new this.constructor).copy(this)},copy:function(e){this.center.copy(e.center);this.radius=e.radius;return this},empty:function(){return 0>=this.radius},containsPoint:function(e){return e.distanceToSquared(this.center)<=this.radius*this.radius},distanceToPoint:function(e){return e.distanceTo(this.center)-this.radius},intersectsSphere:function(e){var t=this.radius+e.radius;return e.center.distanceToSquared(this.center)<=t*t},intersectsBox:function(e){return e.intersectsSphere(this)},intersectsPlane:function(e){return Math.abs(e.distanceToPoint(this.center))<=this.radius},clampPoint:function(e,t){var r=this.center.distanceToSquared(e);void 0===t&&(console.warn("THREE.Sphere: .clampPoint() target is now required"),t=new we);t.copy(e);r>this.radius*this.radius&&(t.sub(this.center).normalize(),t.multiplyScalar(this.radius).add(this.center));return t},getBoundingBox:function(e){void 0===e&&(console.warn("THREE.Sphere: .getBoundingBox() target is now required"),e=new r);e.set(this.center,this.center);e.expandByScalar(this.radius);return e},applyMatrix4:function(e){this.center.applyMatrix4(e);this.radius*=e.getMaxScaleOnAxis();return this},translate:function(e){this.center.add(e);return this},equals:function(e){return e.center.equals(this.center)&&e.radius===this.radius}});Object.assign(g.prototype,{set:function(e,t){this.normal.copy(e);this.constant=t;return this},setComponents:function(e,t,r,n){this.normal.set(e,t,r);this.constant=n;return this},setFromNormalAndCoplanarPoint:function(e,t){this.normal.copy(e);this.constant=-t.dot(this.normal);return this},setFromCoplanarPoints:function(){var n=new we,i=new we;return function(e,t,r){t=n.subVectors(r,t).cross(i.subVectors(e,t)).normalize();this.setFromNormalAndCoplanarPoint(t,e);return this}}(),clone:function(){return(new this.constructor).copy(this)},copy:function(e){this.normal.copy(e.normal);this.constant=e.constant;return this},normalize:function(){var e=1/this.normal.length();this.normal.multiplyScalar(e);this.constant*=e;return this},negate:function(){this.constant*=-1;this.normal.negate();return this},distanceToPoint:function(e){return this.normal.dot(e)+this.constant},distanceToSphere:function(e){return this.distanceToPoint(e.center)-e.radius},projectPoint:function(e,t){void 0===t&&(console.warn("THREE.Plane: .projectPoint() target is now required"),t=new we);return t.copy(this.normal).multiplyScalar(-this.distanceToPoint(e)).add(e)},intersectLine:function(){var i=new we;return function(e,t){void 0===t&&(console.warn("THREE.Plane: .intersectLine() target is now required"),t=new we);var r=e.delta(i),n=this.normal.dot(r);if(0===n){if(0===this.distanceToPoint(e.start))return t.copy(e.start)}else if(n=-(e.start.dot(this.normal)+this.constant)/n,!(0>n||1<n))return t.copy(r).multiplyScalar(n).add(e.start)}}(),intersectsLine:function(e){var t=this.distanceToPoint(e.start);e=this.distanceToPoint(e.end);return 0>t&&0<e||0>e&&0<t},intersectsBox:function(e){return e.intersectsPlane(this)},intersectsSphere:function(e){return e.intersectsPlane(this)},coplanarPoint:function(e){void 0===e&&(console.warn("THREE.Plane: .coplanarPoint() target is now required"),e=new we);return e.copy(this.normal).multiplyScalar(-this.constant)},applyMatrix4:function(){var r=new we,n=new m;return function(e,t){t=t||n.getNormalMatrix(e);e=this.coplanarPoint(r).applyMatrix4(e);t=this.normal.applyMatrix3(t).normalize();this.constant=-e.dot(t);return this}}(),translate:function(e){this.constant-=e.dot(this.normal);return this},equals:function(e){return e.normal.equals(this.normal)&&e.constant===this.constant}});Object.assign(Ee.prototype,{set:function(e,t,r,n,i,o){var a=this.planes;a[0].copy(e);a[1].copy(t);a[2].copy(r);a[3].copy(n);a[4].copy(i);a[5].copy(o);return this},clone:function(){return(new this.constructor).copy(this)},copy:function(e){for(var t=this.planes,r=0;6>r;r++)t[r].copy(e.planes[r]);return this},setFromMatrix:function(e){var t=this.planes,r=e.elements;e=r[0];var n=r[1],i=r[2],o=r[3],a=r[4],s=r[5],u=r[6],c=r[7],h=r[8],l=r[9],p=r[10],f=r[11],d=r[12],v=r[13],m=r[14];r=r[15];t[0].setComponents(o-e,c-a,f-h,r-d).normalize();t[1].setComponents(o+e,c+a,f+h,r+d).normalize();t[2].setComponents(o+n,c+s,f+l,r+v).normalize();t[3].setComponents(o-n,c-s,f-l,r-v).normalize();t[4].setComponents(o-i,c-u,f-p,r-m).normalize();t[5].setComponents(o+i,c+u,f+p,r+m).normalize();return this},intersectsObject:function(){var r=new c;return function(e){var t=e.geometry;null===t.boundingSphere&&t.computeBoundingSphere();r.copy(t.boundingSphere).applyMatrix4(e.matrixWorld);return this.intersectsSphere(r)}}(),intersectsSprite:function(){var t=new c;return function(e){t.center.set(0,0,0);t.radius=.7071067811865476;t.applyMatrix4(e.matrixWorld);return this.intersectsSphere(t)}}(),intersectsSphere:function(e){var t=this.planes,r=e.center;e=-e.radius;for(var n=0;6>n;n++)if(t[n].distanceToPoint(r)<e)return!1;return!0},intersectsBox:function(){var i=new we;return function(e){for(var t=this.planes,r=0;6>r;r++){var n=t[r];i.x=0<n.normal.x?e.max.x:e.min.x;i.y=0<n.normal.y?e.max.y:e.min.y;i.z=0<n.normal.z?e.max.z:e.min.z;if(0>n.distanceToPoint(i))return!1}return!0}}(),containsPoint:function(e){for(var t=this.planes,r=0;6>r;r++)if(0>t[r].distanceToPoint(e))return!1;return!0}});var no={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\tif( decayExponent > 0.0 ) {\n#if defined ( PHYSICALLY_CORRECT_LIGHTS )\n\t\tfloat distanceFalloff = 1.0 / max( pow( lightDistance, decayExponent ), 0.01 );\n\t\tfloat maxDistanceCutoffFactor = pow2( saturate( 1.0 - pow4( lightDistance / cutoffDistance ) ) );\n\t\treturn distanceFalloff * maxDistanceCutoffFactor;\n#else\n\t\treturn pow( saturate( -lightDistance / cutoffDistance + 1.0 ), decayExponent );\n#endif\n\t}\n\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 LTC_Uv( const in vec3 N, const in vec3 V, 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\tfloat dotNV = saturate( dot( N, V ) );\n\tvec2 uv = vec2( roughness, sqrt( 1.0 - dotNV ) );\n\tuv = uv * LUT_SCALE + LUT_BIAS;\n\treturn uv;\n}\nfloat LTC_ClippedSphereFormFactor( const in vec3 f ) {\n\tfloat l = length( f );\n\treturn max( ( l * l + f.z ) / ( l + 1.0 ), 0.0 );\n}\nvec3 LTC_EdgeVectorFormFactor( const in vec3 v1, const in vec3 v2 ) {\n\tfloat x = dot( v1, v2 );\n\tfloat y = abs( x );\n\tfloat a = 0.8543985 + ( 0.4965155 + 0.0145206 * y ) * y;\n\tfloat b = 3.4175940 + ( 4.1616724 + y ) * y;\n\tfloat v = a / b;\n\tfloat theta_sintheta = ( x > 0.0 ) ? v : 0.5 * inversesqrt( max( 1.0 - x * x, 1e-7 ) ) - v;\n\treturn cross( v1, v2 ) * theta_sintheta;\n}\nvec3 LTC_Evaluate( const in vec3 N, const in vec3 V, const in vec3 P, const in mat3 mInv, const in vec3 rectCoords[ 4 ] ) {\n\tvec3 v1 = rectCoords[ 1 ] - rectCoords[ 0 ];\n\tvec3 v2 = rectCoords[ 3 ] - rectCoords[ 0 ];\n\tvec3 lightNormal = cross( v1, v2 );\n\tif( dot( lightNormal, P - rectCoords[ 0 ] ) < 0.0 ) return vec3( 0.0 );\n\tvec3 T1, T2;\n\tT1 = normalize( V - N * dot( V, N ) );\n\tT2 = - cross( N, T1 );\n\tmat3 mat = mInv * transposeMat3( mat3( T1, T2, N ) );\n\tvec3 coords[ 4 ];\n\tcoords[ 0 ] = mat * ( rectCoords[ 0 ] - P );\n\tcoords[ 1 ] = mat * ( rectCoords[ 1 ] - P );\n\tcoords[ 2 ] = mat * ( rectCoords[ 2 ] - P );\n\tcoords[ 3 ] = mat * ( rectCoords[ 3 ] - P );\n\tcoords[ 0 ] = normalize( coords[ 0 ] );\n\tcoords[ 1 ] = normalize( coords[ 1 ] );\n\tcoords[ 2 ] = normalize( coords[ 2 ] );\n\tcoords[ 3 ] = normalize( coords[ 3 ] );\n\tvec3 vectorFormFactor = vec3( 0.0 );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 0 ], coords[ 1 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 1 ], coords[ 2 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 2 ], coords[ 3 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 3 ], coords[ 0 ] );\n\tfloat result = LTC_ClippedSphereFormFactor( vectorFormFactor );\n\treturn vec3( result );\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 = vec3( dFdx( surf_pos.x ), dFdx( surf_pos.y ), dFdx( surf_pos.z ) );\n\t\tvec3 vSigmaY = vec3( dFdy( surf_pos.x ), dFdy( surf_pos.y ), dFdy( surf_pos.z ) );\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\tfDet *= ( float( gl_FrontFacing ) * 2.0 - 1.0 );\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\tvec4 plane;\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < UNION_CLIPPING_PLANES; i ++ ) {\n\t\tplane = clippingPlanes[ i ];\n\t\tif ( dot( vViewPosition, plane.xyz ) > plane.w ) discard;\n\t}\n\t#if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES\n\t\tbool clipped = true;\n\t\t#pragma unroll_loop\n\t\tfor ( int i = UNION_CLIPPING_PLANES; i < NUM_CLIPPING_PLANES; i ++ ) {\n\t\t\tplane = clippingPlanes[ i ];\n\t\t\tclipped = ( dot( vViewPosition, plane.xyz ) > plane.w ) && clipped;\n\t\t}\n\t\tif ( clipped ) discard;\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 transposeMat3( const in mat3 m ) {\n\tmat3 tmp;\n\ttmp[ 0 ] = vec3( m[ 0 ].x, m[ 1 ].x, m[ 2 ].x );\n\ttmp[ 1 ] = vec3( m[ 0 ].y, m[ 1 ].y, m[ 2 ].y );\n\ttmp[ 2 ] = vec3( m[ 0 ].z, m[ 1 ].z, m[ 2 ].z );\n\treturn tmp;\n}\nfloat linearToRelativeLuminance( const in vec3 color ) {\n\tvec3 weights = vec3( 0.2126, 0.7152, 0.0722 );\n\treturn dot( weights, color.rgb );\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( sampler2D envMap, 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:"vec3 transformedNormal = normalMatrix * objectNormal;\n#ifdef FLIP_SIDED\n\ttransformedNormal = - transformedNormal;\n#endif\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 += normalize( objectNormal ) * ( 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\treturn value;\n}\nvec4 GammaToLinear( in vec4 value, in float gammaFactor ) {\n\treturn vec4( pow( value.xyz, vec3( gammaFactor ) ), value.w );\n}\nvec4 LinearToGamma( in vec4 value, in float gammaFactor ) {\n\treturn vec4( pow( value.xyz, vec3( 1.0 / gammaFactor ) ), value.w );\n}\nvec4 sRGBToLinear( in vec4 value ) {\n\treturn 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\treturn 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\treturn vec4( value.rgb * exp2( value.a * 255.0 - 128.0 ), 1.0 );\n}\nvec4 LinearToRGBE( in vec4 value ) {\n\tfloat maxComponent = max( max( value.r, value.g ), value.b );\n\tfloat fExp = clamp( ceil( log2( maxComponent ) ), -128.0, 127.0 );\n\treturn vec4( value.rgb / exp2( fExp ), ( fExp + 128.0 ) / 255.0 );\n}\nvec4 RGBMToLinear( in vec4 value, in float maxRange ) {\n\treturn vec4( value.xyz * value.w * maxRange, 1.0 );\n}\nvec4 LinearToRGBM( in vec4 value, in float maxRange ) {\n\tfloat maxRGB = max( value.x, max( value.g, value.b ) );\n\tfloat M      = clamp( maxRGB / maxRange, 0.0, 1.0 );\n\tM            = ceil( M * 255.0 ) / 255.0;\n\treturn vec4( value.rgb / ( M * maxRange ), M );\n}\nvec4 RGBDToLinear( in vec4 value, in float maxRange ) {\n\treturn vec4( value.rgb * ( ( maxRange / 255.0 ) / value.a ), 1.0 );\n}\nvec4 LinearToRGBD( in vec4 value, in float maxRange ) {\n\tfloat maxRGB = max( value.x, max( value.g, value.b ) );\n\tfloat D      = max( maxRange / maxRGB, 1.0 );\n\tD            = min( floor( D ) / 255.0, 1.0 );\n\treturn 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\tvec3 Xp_Y_XYZp = value.rgb * cLogLuvM;\n\tXp_Y_XYZp = max(Xp_Y_XYZp, vec3(1e-6, 1e-6, 1e-6));\n\tvec4 vResult;\n\tvResult.xy = Xp_Y_XYZp.xy / Xp_Y_XYZp.z;\n\tfloat Le = 2.0 * log2(Xp_Y_XYZp.y) + 127.0;\n\tvResult.w = fract(Le);\n\tvResult.z = (Le - (floor(vResult.w*255.0))/255.0)/255.0;\n\treturn 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\tfloat Le = value.z * 255.0 + value.w;\n\tvec3 Xp_Y_XYZp;\n\tXp_Y_XYZp.y = exp2((Le - 127.0) / 2.0);\n\tXp_Y_XYZp.z = Xp_Y_XYZp.y / value.y;\n\tXp_Y_XYZp.x = value.x * Xp_Y_XYZp.z;\n\tvec3 vRGB = Xp_Y_XYZp.rgb * cLogLuvInverseM;\n\treturn 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, vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) );\n\t#elif defined( ENVMAP_TYPE_EQUIREC )\n\t\tvec2 sampleUV;\n\t\treflectVec = normalize( reflectVec );\n\t\tsampleUV.y = asin( clamp( reflectVec.y, - 1.0, 1.0 ) ) * RECIPROCAL_PI + 0.5;\n\t\tsampleUV.x = atan( reflectVec.z, reflectVec.x ) * RECIPROCAL_PI2 + 0.5;\n\t\tvec4 envColor = texture2D( envMap, sampleUV );\n\t#elif defined( ENVMAP_TYPE_SPHERE )\n\t\treflectVec = normalize( reflectVec );\n\t\tvec3 reflectView = 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\tuniform int maxMipLevel;\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_physical_pars_fragment:"#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( envMap, 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( envMap, queryReflectVec, BlinnExponentToGGXRoughness(blinnShininessExponent ));\n\t\t#elif defined( ENVMAP_TYPE_EQUIREC )\n\t\t\tvec2 sampleUV;\n\t\t\tsampleUV.y = asin( clamp( reflectVec.y, - 1.0, 1.0 ) ) * RECIPROCAL_PI + 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",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_vertex:"\n#ifdef USE_FOG\nfogDepth = -mvPosition.z;\n#endif",fog_pars_vertex:"#ifdef USE_FOG\n  varying float fogDepth;\n#endif\n",fog_fragment:"#ifdef USE_FOG\n\t#ifdef FOG_EXP2\n\t\tfloat fogFactor = whiteCompliment( exp2( - fogDensity * fogDensity * fogDepth * fogDepth * LOG2 ) );\n\t#else\n\t\tfloat fogFactor = smoothstep( fogNear, fogFar, fogDepth );\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\tvarying float fogDepth;\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\n",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\t#pragma unroll_loop\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\t#pragma unroll_loop\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_DIR_LIGHTS > 0\n\t#pragma unroll_loop\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\t#pragma unroll_loop\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_begin:"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\tfloat shadowCameraNear;\n\t\tfloat shadowCameraFar;\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 ltc_1;\tuniform sampler2D ltc_2;\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",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};\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_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\tvoid RE_Direct_RectArea_Physical( const in RectAreaLight rectAreaLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\t\tvec3 normal = geometry.normal;\n\t\tvec3 viewDir = geometry.viewDir;\n\t\tvec3 position = geometry.position;\n\t\tvec3 lightPos = rectAreaLight.position;\n\t\tvec3 halfWidth = rectAreaLight.halfWidth;\n\t\tvec3 halfHeight = rectAreaLight.halfHeight;\n\t\tvec3 lightColor = rectAreaLight.color;\n\t\tfloat roughness = material.specularRoughness;\n\t\tvec3 rectCoords[ 4 ];\n\t\trectCoords[ 0 ] = lightPos - halfWidth - halfHeight;\t\trectCoords[ 1 ] = lightPos + halfWidth - halfHeight;\n\t\trectCoords[ 2 ] = lightPos + halfWidth + halfHeight;\n\t\trectCoords[ 3 ] = lightPos - halfWidth + halfHeight;\n\t\tvec2 uv = LTC_Uv( normal, viewDir, roughness );\n\t\tvec4 t1 = texture2D( ltc_1, uv );\n\t\tvec4 t2 = texture2D( ltc_2, uv );\n\t\tmat3 mInv = mat3(\n\t\t\tvec3( t1.x, 0, t1.y ),\n\t\t\tvec3(    0, 1,    0 ),\n\t\t\tvec3( t1.z, 0, t1.w )\n\t\t);\n\t\tvec3 fresnel = ( material.specularColor * t2.x + ( vec3( 1.0 ) - material.specularColor ) * t2.y );\n\t\treflectedLight.directSpecular += lightColor * fresnel * LTC_Evaluate( normal, viewDir, position, mInv, rectCoords );\n\t\treflectedLight.directDiffuse += lightColor * material.diffuseColor * LTC_Evaluate( normal, viewDir, position, mat3( 1.0 ), rectCoords );\n\t}\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_fragment_begin:"\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\t#pragma unroll_loop\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 ], pointLight.shadowCameraNear, pointLight.shadowCameraFar ) : 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\t#pragma unroll_loop\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\t#pragma unroll_loop\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\t#pragma unroll_loop\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#if ( NUM_HEMI_LIGHTS > 0 )\n\t\t#pragma unroll_loop\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#endif\n#if defined( RE_IndirectSpecular )\n\tvec3 radiance = vec3( 0.0 );\n\tvec3 clearCoatRadiance = vec3( 0.0 );\n#endif\n",lights_fragment_maps:"#if defined( RE_IndirectDiffuse )\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 defined( USE_ENVMAP ) && defined( PHYSICAL ) && defined( ENVMAP_TYPE_CUBE_UV )\n\t\tirradiance += getLightProbeIndirectIrradiance( geometry, maxMipLevel );\n\t#endif\n#endif\n#if defined( USE_ENVMAP ) && defined( RE_IndirectSpecular )\n\tradiance += getLightProbeIndirectRadiance( geometry, Material_BlinnShininessExponent( material ), maxMipLevel );\n\t#ifndef STANDARD\n\t\tclearCoatRadiance += getLightProbeIndirectRadiance( geometry, Material_ClearCoat_BlinnShininessExponent( material ), maxMipLevel );\n\t#endif\n#endif\n",lights_fragment_end:"#if defined( RE_IndirectDiffuse )\n\tRE_IndirectDiffuse( irradiance, geometry, material, reflectedLight );\n#endif\n#if defined( RE_IndirectSpecular )\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\t#ifdef USE_LOGDEPTHBUF_EXT\n\t\tvFragDepth = 1.0 + gl_Position.w;\n\t#else\n\t\tgl_Position.z = log2( max( EPSILON, gl_Position.w + 1.0 ) ) * logDepthBufFC - 1.0;\n\t\tgl_Position.z *= 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\tvec2 uv = ( uvTransform * vec3( gl_PointCoord.x, 1.0 - gl_PointCoord.y, 1 ) ).xy;\n\tvec4 mapTexel = texture2D( map, uv );\n\tdiffuseColor *= mapTexelToLinear( mapTexel );\n#endif\n",map_particle_pars_fragment:"#ifdef USE_MAP\n\tuniform mat3 uvTransform;\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.b;\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_fragment_begin:"#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 );\n\t#ifdef DOUBLE_SIDED\n\t\tnormal = normal * ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t#endif\n#endif\n",normal_fragment_maps:"#ifdef USE_NORMALMAP\n\t#ifdef OBJECTSPACE_NORMALMAP\n\t\tnormal = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\n\t\t#ifdef FLIP_SIDED\n\t\t\tnormal = - normal;\n\t\t#endif\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tnormal = normal * ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t\t#endif\n\t\tnormal = normalize( normalMatrix * normal );\n\t#else\n\t\tnormal = perturbNormal2Arb( -vViewPosition, normal );\n\t#endif\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\t#ifdef OBJECTSPACE_NORMALMAP\n\t\tuniform mat3 normalMatrix;\n\t#else\n\t\tvec3 perturbNormal2Arb( vec3 eye_pos, vec3 surf_norm ) {\n\t\t\tvec3 q0 = vec3( dFdx( eye_pos.x ), dFdx( eye_pos.y ), dFdx( eye_pos.z ) );\n\t\t\tvec3 q1 = vec3( dFdy( eye_pos.x ), dFdy( eye_pos.y ), dFdy( eye_pos.z ) );\n\t\t\tvec2 st0 = dFdx( vUv.st );\n\t\t\tvec2 st1 = dFdy( vUv.st );\n\t\t\tfloat scale = sign( st1.t * st0.s - st0.t * st1.s );\n\t\t\tvec3 S = normalize( ( q0 * st1.t - q1 * st0.t ) * scale );\n\t\t\tvec3 T = normalize( ( - q0 * st1.s + q1 * st0.s ) * scale );\n\t\t\tvec3 N = normalize( surf_norm );\n\t\t\tmat3 tsn = mat3( S, T, N );\n\t\t\tvec3 mapN = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\n\t\t\tmapN.xy *= normalScale;\n\t\t\tmapN.xy *= ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t\t\treturn normalize( tsn * mapN );\n\t\t}\n\t#endif\n#endif\n",packing:"vec3 packNormalToRGB( const in vec3 normal ) {\n\treturn normalize( normal ) * 0.5 + 0.5;\n}\nvec3 unpackRGBToNormal( const in vec3 rgb ) {\n\treturn 2.0 * rgb.xyz - 1.0;\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\treturn ( viewZ + near ) / ( near - far );\n}\nfloat orthographicDepthToViewZ( const in float linearClipZ, const in float near, const in float far ) {\n\treturn linearClipZ * ( near - far ) - near;\n}\nfloat viewZToPerspectiveDepth( const in float viewZ, const in float near, const in float far ) {\n\treturn (( near + viewZ ) * far ) / (( far - near ) * viewZ );\n}\nfloat perspectiveDepthToViewZ( const in float invClipZ, const in float near, const in float far ) {\n\treturn ( 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:"vec4 mvPosition = modelViewMatrix * vec4( transformed, 1.0 );\ngl_Position = projectionMatrix * mvPosition;\n",dithering_fragment:"#if defined( DITHERING )\n  gl_FragColor.rgb = dithering( gl_FragColor.rgb );\n#endif\n",dithering_pars_fragment:"#if defined( DITHERING )\n\tvec3 dithering( vec3 color ) {\n\t\tfloat grid_position = rand( gl_FragCoord.xy );\n\t\tvec3 dither_shift_RGB = vec3( 0.25 / 255.0, -0.25 / 255.0, 0.25 / 255.0 );\n\t\tdither_shift_RGB = mix( 2.0 * dither_shift_RGB, -2.0 * dither_shift_RGB, grid_position );\n\t\treturn color + dither_shift_RGB;\n\t}\n#endif\n",roughnessmap_fragment:"float roughnessFactor = roughness;\n#ifdef USE_ROUGHNESSMAP\n\tvec4 texelRoughness = texture2D( roughnessMap, vUv );\n\troughnessFactor *= texelRoughness.g;\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\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\tfloat shadow = 1.0;\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\tshadow = (\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\tshadow = (\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\tshadow = texture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z );\n\t\t#endif\n\t\t}\n\t\treturn shadow;\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, float shadowCameraNear, float shadowCameraFar ) {\n\t\tvec2 texelSize = vec2( 1.0 ) / ( shadowMapSize * vec2( 4.0, 2.0 ) );\n\t\tvec3 lightToPosition = shadowCoord.xyz;\n\t\tfloat dp = ( length( lightToPosition ) - shadowCameraNear ) / ( shadowCameraFar - shadowCameraNear );\t\tdp += shadowBias;\n\t\tvec3 bd3D = normalize( lightToPosition );\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#endif\n",shadowmap_vertex:"#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHTS > 0\n\t#pragma unroll_loop\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\t#pragma unroll_loop\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\t#pragma unroll_loop\n\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n\t\tvPointShadowCoord[ i ] = pointShadowMatrix[ i ] * worldPosition;\n\t}\n\t#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\t#pragma unroll_loop\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\t#pragma unroll_loop\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\t#pragma unroll_loop\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 ], pointLight.shadowCameraNear, pointLight.shadowCameraFar ) : 1.0;\n\t}\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 boneTextureSize;\n\t\tmat4 getBoneMatrix( const in float i ) {\n\t\t\tfloat j = i * 4.0;\n\t\t\tfloat x = mod( j, float( boneTextureSize ) );\n\t\t\tfloat y = floor( j / float( boneTextureSize ) );\n\t\t\tfloat dx = 1.0 / float( boneTextureSize );\n\t\t\tfloat dy = 1.0 / float( boneTextureSize );\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\ttransformed = ( bindMatrixInverse * skinned ).xyz;\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:"#ifndef saturate\n\t#define saturate(a) clamp( a, 0.0, 1.0 )\n#endif\nuniform float toneMappingExposure;\nuniform float toneMappingWhitePoint;\nvec3 LinearToneMapping( vec3 color ) {\n\treturn toneMappingExposure * color;\n}\nvec3 ReinhardToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\treturn 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\tcolor *= toneMappingExposure;\n\treturn saturate( Uncharted2Helper( color ) / Uncharted2Helper( vec3( toneMappingWhitePoint ) ) );\n}\nvec3 OptimizedCineonToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\tcolor = max( vec3( 0.0 ), color - 0.004 );\n\treturn 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 mat3 uvTransform;\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 = ( uvTransform * vec3( uv, 1 ) ).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( DISTANCE ) || defined ( USE_SHADOWMAP )\n\tvec4 worldPosition = modelMatrix * vec4( transformed, 1.0 );\n#endif\n",cube_frag:"uniform samplerCube tCube;\nuniform float tFlip;\nuniform float opacity;\nvarying vec3 vWorldPosition;\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\tgl_Position.z = gl_Position.w;\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( 1.0 - 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#ifdef USE_DISPLACEMENTMAP\n\t\t#include <beginnormal_vertex>\n\t\t#include <morphnormal_vertex>\n\t\t#include <skinnormal_vertex>\n\t#endif\n\t#include <begin_vertex>\n\t#include <morphtarget_vertex>\n\t#include <skinning_vertex>\n\t#include <displacementmap_vertex>\n\t#include <project_vertex>\n\t#include <logdepthbuf_vertex>\n\t#include <clipping_planes_vertex>\n}\n",distanceRGBA_frag:"#define DISTANCE\nuniform vec3 referencePosition;\nuniform float nearDistance;\nuniform float farDistance;\nvarying vec3 vWorldPosition;\n#include <common>\n#include <packing>\n#include <uv_pars_fragment>\n#include <map_pars_fragment>\n#include <alphamap_pars_fragment>\n#include <clipping_planes_pars_fragment>\nvoid main () {\n\t#include <clipping_planes_fragment>\n\tvec4 diffuseColor = vec4( 1.0 );\n\t#include <map_fragment>\n\t#include <alphamap_fragment>\n\t#include <alphatest_fragment>\n\tfloat dist = length( vWorldPosition - referencePosition );\n\tdist = ( dist - nearDistance ) / ( farDistance - nearDistance );\n\tdist = saturate( dist );\n\tgl_FragColor = packDepthToRGBA( dist );\n}\n",distanceRGBA_vert:"#define DISTANCE\nvarying vec3 vWorldPosition;\n#include <common>\n#include <uv_pars_vertex>\n#include <displacementmap_pars_vertex>\n#include <morphtarget_pars_vertex>\n#include <skinning_pars_vertex>\n#include <clipping_planes_pars_vertex>\nvoid main() {\n\t#include <uv_vertex>\n\t#include <skinbase_vertex>\n\t#ifdef USE_DISPLACEMENTMAP\n\t\t#include <beginnormal_vertex>\n\t\t#include <morphnormal_vertex>\n\t\t#include <skinnormal_vertex>\n\t#endif\n\t#include <begin_vertex>\n\t#include <morphtarget_vertex>\n\t#include <skinning_vertex>\n\t#include <displacementmap_vertex>\n\t#include <project_vertex>\n\t#include <worldpos_vertex>\n\t#include <clipping_planes_vertex>\n\tvWorldPosition = worldPosition.xyz;\n}\n",equirect_frag:"uniform sampler2D tEquirect;\nvarying vec3 vWorldPosition;\n#include <common>\nvoid main() {\n\tvec3 direction = normalize( vWorldPosition );\n\tvec2 sampleUV;\n\tsampleUV.y = asin( clamp( direction.y, - 1.0, 1.0 ) ) * RECIPROCAL_PI + 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 <fog_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\t#include <fog_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 <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 <fog_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\t#include <fog_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 <dithering_pars_fragment>\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_begin>\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 <envmap_fragment>\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include <tonemapping_fragment>\n\t#include <encodings_fragment>\n\t#include <fog_fragment>\n\t#include <premultiplied_alpha_fragment>\n\t#include <dithering_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_begin>\n#include <color_pars_vertex>\n#include <fog_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\t#include <fog_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 <dithering_pars_fragment>\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_begin>\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_fragment_begin>\n\t#include <normal_fragment_maps>\n\t#include <emissivemap_fragment>\n\t#include <lights_phong_fragment>\n\t#include <lights_fragment_begin>\n\t#include <lights_fragment_maps>\n\t#include <lights_fragment_end>\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 <tonemapping_fragment>\n\t#include <encodings_fragment>\n\t#include <fog_fragment>\n\t#include <premultiplied_alpha_fragment>\n\t#include <dithering_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 <fog_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 <morphtarget_vertex>\n\t#include <skinning_vertex>\n\t#include <displacementmap_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\t#include <fog_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 <dithering_pars_fragment>\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 <bsdfs>\n#include <cube_uv_reflection_fragment>\n#include <envmap_pars_fragment>\n#include <envmap_physical_pars_fragment>\n#include <fog_pars_fragment>\n#include <lights_pars_begin>\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 <roughnessmap_fragment>\n\t#include <metalnessmap_fragment>\n\t#include <normal_fragment_begin>\n\t#include <normal_fragment_maps>\n\t#include <emissivemap_fragment>\n\t#include <lights_physical_fragment>\n\t#include <lights_fragment_begin>\n\t#include <lights_fragment_maps>\n\t#include <lights_fragment_end>\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 <tonemapping_fragment>\n\t#include <encodings_fragment>\n\t#include <fog_fragment>\n\t#include <premultiplied_alpha_fragment>\n\t#include <dithering_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 <fog_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 <morphtarget_vertex>\n\t#include <skinning_vertex>\n\t#include <displacementmap_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\t#include <fog_vertex>\n}\n",normal_frag:"#define NORMAL\nuniform float opacity;\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || ( defined( USE_NORMALMAP ) && ! defined( OBJECTSPACE_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_fragment_begin>\n\t#include <normal_fragment_maps>\n\tgl_FragColor = vec4( packNormalToRGB( normal ), opacity );\n}\n",normal_vert:"#define NORMAL\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || ( defined( USE_NORMALMAP ) && ! defined( OBJECTSPACE_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 <morphtarget_vertex>\n\t#include <skinning_vertex>\n\t#include <displacementmap_vertex>\n\t#include <project_vertex>\n\t#include <logdepthbuf_vertex>\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || ( defined( USE_NORMALMAP ) && ! defined( OBJECTSPACE_NORMALMAP ) )\n\tvViewPosition = - mvPosition.xyz;\n#endif\n}\n",points_frag:"uniform vec3 diffuse;\nuniform float opacity;\n#include <common>\n#include <color_pars_fragment>\n#include <map_particle_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\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 <fog_pars_vertex>\n#include <morphtarget_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 <morphtarget_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 <fog_vertex>\n}\n",shadow_frag:"uniform vec3 color;\nuniform float opacity;\n#include <common>\n#include <packing>\n#include <fog_pars_fragment>\n#include <bsdfs>\n#include <lights_pars_begin>\n#include <shadowmap_pars_fragment>\n#include <shadowmask_pars_fragment>\nvoid main() {\n\tgl_FragColor = vec4( color, opacity * ( 1.0 - getShadowMask() ) );\n\t#include <fog_fragment>\n}\n",shadow_vert:"#include <fog_pars_vertex>\n#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\t#include <fog_vertex>\n}\n",sprite_frag:"uniform vec3 diffuse;\nuniform float opacity;\n#include <common>\n#include <uv_pars_fragment>\n#include <map_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\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include <logdepthbuf_fragment>\n\t#include <map_fragment>\n\t#include <alphatest_fragment>\n\toutgoingLight = diffuseColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include <tonemapping_fragment>\n\t#include <encodings_fragment>\n\t#include <fog_fragment>\n}\n",sprite_vert:"uniform float rotation;\nuniform vec2 center;\n#include <common>\n#include <uv_pars_vertex>\n#include <fog_pars_vertex>\n#include <logdepthbuf_pars_vertex>\n#include <clipping_planes_pars_vertex>\nvoid main() {\n\t#include <uv_vertex>\n\tvec2 scale;\n\tscale.x = length( vec3( modelMatrix[ 0 ].x, modelMatrix[ 0 ].y, modelMatrix[ 0 ].z ) );\n\tscale.y = length( vec3( modelMatrix[ 1 ].x, modelMatrix[ 1 ].y, modelMatrix[ 1 ].z ) );\n\tvec2 alignedPosition = ( position.xy - ( center - vec2( 0.5 ) ) ) * scale;\n\tvec2 rotatedPosition;\n\trotatedPosition.x = cos( rotation ) * alignedPosition.x - sin( rotation ) * alignedPosition.y;\n\trotatedPosition.y = sin( rotation ) * alignedPosition.x + cos( rotation ) * alignedPosition.y;\n\tvec4 mvPosition;\n\tmvPosition = modelViewMatrix * vec4( 0.0, 0.0, 0.0, 1.0 );\n\tmvPosition.xy += rotatedPosition;\n\tgl_Position = projectionMatrix * mvPosition;\n\t#include <logdepthbuf_vertex>\n\t#include <clipping_planes_vertex>\n\t#include <fog_vertex>\n}\n"},io={merge:function(e){for(var t={},r=0;r<e.length;r++){var n=this.clone(e[r]),i;for(i in n)t[i]=n[i]}return t},clone:function(e){var t={},r;for(r in e){t[r]={};for(var n in e[r]){var i=e[r][n];i&&(i.isColor||i.isMatrix3||i.isMatrix4||i.isVector2||i.isVector3||i.isVector4||i.isTexture)?t[r][n]=i.clone():Array.isArray(i)?t[r][n]=i.slice():t[r][n]=i}}return t}},oo={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,rebeccapurple:6697881,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};Object.assign(w.prototype,{isColor:!0,r:1,g:1,b:1,set:function(e){e&&e.isColor?this.copy(e):"number"===typeof e?this.setHex(e):"string"===typeof e&&this.setStyle(e);return this},setScalar:function(e){this.b=this.g=this.r=e;return this},setHex:function(e){e=Math.floor(e);this.r=(e>>16&255)/255;this.g=(e>>8&255)/255;this.b=(e&255)/255;return this},setRGB:function(e,t,r){this.r=e;this.g=t;this.b=r;return this},setHSL:function(){function n(e,t,r){0>r&&(r+=1);1<r&&--r;return r<1/6?e+6*(t-e)*r:.5>r?t:r<2/3?e+6*(t-e)*(2/3-r):e}return function(e,t,r){e=eo.euclideanModulo(e,1);t=eo.clamp(t,0,1);r=eo.clamp(r,0,1);0===t?this.r=this.g=this.b=r:(t=.5>=r?r*(1+t):r+t-r*t,r=2*r-t,this.r=n(r,t,e+1/3),this.g=n(r,t,e),this.b=n(r,t,e-1/3));return 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)){n=parseFloat(r[1])/360;var i=parseInt(r[2],10)/100,o=parseInt(r[3],10)/100;e(r[5]);return this.setHSL(n,i,o)}}}else if(r=/^#([A-Fa-f0-9]+)$/.exec(t)){r=r[1];n=r.length;if(3===n)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}t&&0<t.length&&(r=oo[t],void 0!==r?this.setHex(r):console.warn("THREE.Color: Unknown color "+t));return this},clone:function(){return new this.constructor(this.r,this.g,this.b)},copy:function(e){this.r=e.r;this.g=e.g;this.b=e.b;return this},copyGammaToLinear:function(e,t){void 0===t&&(t=2);this.r=Math.pow(e.r,t);this.g=Math.pow(e.g,t);this.b=Math.pow(e.b,t);return this},copyLinearToGamma:function(e,t){void 0===t&&(t=2);t=0<t?1/t:1;this.r=Math.pow(e.r,t);this.g=Math.pow(e.g,t);this.b=Math.pow(e.b,t);return this},convertGammaToLinear:function(e){this.copyGammaToLinear(this,e);return this},convertLinearToGamma:function(e){this.copyLinearToGamma(this,e);return this},copySRGBToLinear:function(){function t(e){return.04045>e?.0773993808*e:Math.pow(.9478672986*e+.0521327014,2.4)}return function(e){this.r=t(e.r);this.g=t(e.g);this.b=t(e.b);return this}}(),copyLinearToSRGB:function(){function t(e){return.0031308>e?12.92*e:1.055*Math.pow(e,.41666)-.055}return function(e){this.r=t(e.r);this.g=t(e.g);this.b=t(e.b);return this}}(),convertSRGBToLinear:function(){this.copySRGBToLinear(this);return this},convertLinearToSRGB:function(){this.copyLinearToSRGB(this);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(e){void 0===e&&(console.warn("THREE.Color: .getHSL() target is now required"),e={h:0,s:0,l:0});var t=this.r,r=this.g,n=this.b,i=Math.max(t,r,n),o=Math.min(t,r,n),a,s=(o+i)/2;if(o===i)o=a=0;else{var u=i-o;o=.5>=s?u/(i+o):u/(2-i-o);switch(i){case t:a=(r-n)/u+(r<n?6:0);break;case r:a=(n-t)/u+2;break;case n:a=(t-r)/u+4}a/=6}e.h=a;e.s=o;e.l=s;return e},getStyle:function(){return"rgb("+(255*this.r|0)+","+(255*this.g|0)+","+(255*this.b|0)+")"},offsetHSL:function(){var n={};return function(e,t,r){this.getHSL(n);n.h+=e;n.s+=t;n.l+=r;this.setHSL(n.h,n.s,n.l);return this}}(),add:function(e){this.r+=e.r;this.g+=e.g;this.b+=e.b;return this},addColors:function(e,t){this.r=e.r+t.r;this.g=e.g+t.g;this.b=e.b+t.b;return this},addScalar:function(e){this.r+=e;this.g+=e;this.b+=e;return this},sub:function(e){this.r=Math.max(0,this.r-e.r);this.g=Math.max(0,this.g-e.g);this.b=Math.max(0,this.b-e.b);return this},multiply:function(e){this.r*=e.r;this.g*=e.g;this.b*=e.b;return this},multiplyScalar:function(e){this.r*=e;this.g*=e;this.b*=e;return this},lerp:function(e,t){this.r+=(e.r-this.r)*t;this.g+=(e.g-this.g)*t;this.b+=(e.b-this.b)*t;return this},equals:function(e){return e.r===this.r&&e.g===this.g&&e.b===this.b},fromArray:function(e,t){void 0===t&&(t=0);this.r=e[t];this.g=e[t+1];this.b=e[t+2];return this},toArray:function(e,t){void 0===e&&(e=[]);void 0===t&&(t=0);e[t]=this.r;e[t+1]=this.g;e[t+2]=this.b;return e},toJSON:function(){return this.getHex()}});var ao={common:{diffuse:{value:new w(15658734)},opacity:{value:1},map:{value:null},uvTransform:{value:new m},alphaMap:{value:null}},specularmap:{specularMap:{value:null}},envmap:{envMap:{value:null},flipEnvMap:{value:-1},reflectivity:{value:1},refractionRatio:{value:.98},maxMipLevel:{value:0}},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 H(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 w(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:{},shadowCameraNear:{},shadowCameraFar:{}}},pointShadowMap:{value:[]},pointShadowMatrix:{value:[]},hemisphereLights:{value:[],properties:{direction:{},skyColor:{},groundColor:{}}},rectAreaLights:{value:[],properties:{color:{},position:{},width:{},height:{}}}},points:{diffuse:{value:new w(15658734)},opacity:{value:1},size:{value:1},scale:{value:1},map:{value:null},uvTransform:{value:new m}},sprite:{diffuse:{value:new w(15658734)},opacity:{value:1},center:{value:new H(.5,.5)},rotation:{value:0},map:{value:null},uvTransform:{value:new m}}},so={basic:{uniforms:io.merge([ao.common,ao.specularmap,ao.envmap,ao.aomap,ao.lightmap,ao.fog]),vertexShader:no.meshbasic_vert,fragmentShader:no.meshbasic_frag},lambert:{uniforms:io.merge([ao.common,ao.specularmap,ao.envmap,ao.aomap,ao.lightmap,ao.emissivemap,ao.fog,ao.lights,{emissive:{value:new w(0)}}]),vertexShader:no.meshlambert_vert,fragmentShader:no.meshlambert_frag},phong:{uniforms:io.merge([ao.common,ao.specularmap,ao.envmap,ao.aomap,ao.lightmap,ao.emissivemap,ao.bumpmap,ao.normalmap,ao.displacementmap,ao.gradientmap,ao.fog,ao.lights,{emissive:{value:new w(0)},specular:{value:new w(1118481)},shininess:{value:30}}]),vertexShader:no.meshphong_vert,fragmentShader:no.meshphong_frag},standard:{uniforms:io.merge([ao.common,ao.envmap,ao.aomap,ao.lightmap,ao.emissivemap,ao.bumpmap,ao.normalmap,ao.displacementmap,ao.roughnessmap,ao.metalnessmap,ao.fog,ao.lights,{emissive:{value:new w(0)},roughness:{value:.5},metalness:{value:.5},envMapIntensity:{value:1}}]),vertexShader:no.meshphysical_vert,fragmentShader:no.meshphysical_frag},points:{uniforms:io.merge([ao.points,ao.fog]),vertexShader:no.points_vert,fragmentShader:no.points_frag},dashed:{uniforms:io.merge([ao.common,ao.fog,{scale:{value:1},dashSize:{value:1},totalSize:{value:2}}]),vertexShader:no.linedashed_vert,fragmentShader:no.linedashed_frag},depth:{uniforms:io.merge([ao.common,ao.displacementmap]),vertexShader:no.depth_vert,fragmentShader:no.depth_frag},normal:{uniforms:io.merge([ao.common,ao.bumpmap,ao.normalmap,ao.displacementmap,{opacity:{value:1}}]),vertexShader:no.normal_vert,fragmentShader:no.normal_frag},sprite:{uniforms:io.merge([ao.sprite,ao.fog]),vertexShader:no.sprite_vert,fragmentShader:no.sprite_frag},cube:{uniforms:{tCube:{value:null},tFlip:{value:-1},opacity:{value:1}},vertexShader:no.cube_vert,fragmentShader:no.cube_frag},equirect:{uniforms:{tEquirect:{value:null}},vertexShader:no.equirect_vert,fragmentShader:no.equirect_frag},distanceRGBA:{uniforms:io.merge([ao.common,ao.displacementmap,{referencePosition:{value:new we},nearDistance:{value:1},farDistance:{value:1e3}}]),vertexShader:no.distanceRGBA_vert,fragmentShader:no.distanceRGBA_frag},shadow:{uniforms:io.merge([ao.lights,ao.fog,{color:{value:new w(0)},opacity:{value:1}}]),vertexShader:no.shadow_vert,fragmentShader:no.shadow_frag}};so.physical={uniforms:io.merge([so.standard.uniforms,{clearCoat:{value:0},clearCoatRoughness:{value:0}}]),vertexShader:no.meshphysical_vert,fragmentShader:no.meshphysical_frag};i.RotationOrders="XYZ YZX ZXY XZY YXZ ZYX".split(" ");i.DefaultOrder="XYZ";Object.defineProperties(i.prototype,{x:{get:function(){return this._x},set:function(e){this._x=e;this.onChangeCallback()}},y:{get:function(){return this._y},set:function(e){this._y=e;this.onChangeCallback()}},z:{get:function(){return this._z},set:function(e){this._z=e;this.onChangeCallback()}},order:{get:function(){return this._order},set:function(e){this._order=e;this.onChangeCallback()}}});Object.assign(i.prototype,{isEuler:!0,set:function(e,t,r,n){this._x=e;this._y=t;this._z=r;this._order=n||this._order;this.onChangeCallback();return this},clone:function(){return new this.constructor(this._x,this._y,this._z,this._order)},copy:function(e){this._x=e._x;this._y=e._y;this._z=e._z;this._order=e._order;this.onChangeCallback();return this},setFromRotationMatrix:function(e,t,r){var n=eo.clamp,i=e.elements;e=i[0];var o=i[4],a=i[8],s=i[1],u=i[5],c=i[9],h=i[2],l=i[6];i=i[10];t=t||this._order;"XYZ"===t?(this._y=Math.asin(n(a,-1,1)),.99999>Math.abs(a)?(this._x=Math.atan2(-c,i),this._z=Math.atan2(-o,e)):(this._x=Math.atan2(l,u),this._z=0)):"YXZ"===t?(this._x=Math.asin(-n(c,-1,1)),.99999>Math.abs(c)?(this._y=Math.atan2(a,i),this._z=Math.atan2(s,u)):(this._y=Math.atan2(-h,e),this._z=0)):"ZXY"===t?(this._x=Math.asin(n(l,-1,1)),.99999>Math.abs(l)?(this._y=Math.atan2(-h,i),this._z=Math.atan2(-o,u)):(this._y=0,this._z=Math.atan2(s,e))):"ZYX"===t?(this._y=Math.asin(-n(h,-1,1)),.99999>Math.abs(h)?(this._x=Math.atan2(l,i),this._z=Math.atan2(s,e)):(this._x=0,this._z=Math.atan2(-o,u))):"YZX"===t?(this._z=Math.asin(n(s,-1,1)),.99999>Math.abs(s)?(this._x=Math.atan2(-c,u),this._y=Math.atan2(-h,e)):(this._x=0,this._y=Math.atan2(a,i))):"XZY"===t?(this._z=Math.asin(-n(o,-1,1)),.99999>Math.abs(o)?(this._x=Math.atan2(l,u),this._y=Math.atan2(a,e)):(this._x=Math.atan2(-c,i),this._y=0)):console.warn("THREE.Euler: .setFromRotationMatrix() given unsupported order: "+t);this._order=t;if(!1!==r)this.onChangeCallback();return this},setFromQuaternion:function(){var n=new xe;return function(e,t,r){n.makeRotationFromQuaternion(e);return this.setFromRotationMatrix(n,t,r)}}(),setFromVector3:function(e,t){return this.set(e.x,e.y,e.z,t||this._order)},reorder:function(){var t=new s;return function(e){t.setFromEuler(this);return this.setFromQuaternion(t,e)}}(),equals:function(e){return e._x===this._x&&e._y===this._y&&e._z===this._z&&e._order===this._order},fromArray:function(e){this._x=e[0];this._y=e[1];this._z=e[2];void 0!==e[3]&&(this._order=e[3]);this.onChangeCallback();return this},toArray:function(e,t){void 0===e&&(e=[]);void 0===t&&(t=0);e[t]=this._x;e[t+1]=this._y;e[t+2]=this._z;e[t+3]=this._order;return e},toVector3:function(e){return e?e.set(this._x,this._y,this._z):new we(this._x,this._y,this._z)},onChange:function(e){this.onChangeCallback=e;return this},onChangeCallback:function(){}});Object.assign(o.prototype,{set:function(e){this.mask=1<<e|0},enable:function(e){this.mask=this.mask|1<<e|0},toggle:function(e){this.mask^=1<<e|0},disable:function(e){this.mask&=~(1<<e|0)},test:function(e){return 0!==(this.mask&e.mask)}});var uo=0;h.DefaultUp=new we(0,1,0);h.DefaultMatrixAutoUpdate=!0;h.prototype=Object.assign(Object.create(t.prototype),{constructor:h,isObject3D:!0,onBeforeRender:function(){},onAfterRender:function(){},applyMatrix:function(e){this.matrix.multiplyMatrices(e,this.matrix);this.matrix.decompose(this.position,this.quaternion,this.scale)},applyQuaternion:function(e){this.quaternion.premultiply(e);return this},setRotationFromAxisAngle:function(e,t){this.quaternion.setFromAxisAngle(e,t)},setRotationFromEuler:function(e){this.quaternion.setFromEuler(e,!0)},setRotationFromMatrix:function(e){this.quaternion.setFromRotationMatrix(e)},setRotationFromQuaternion:function(e){this.quaternion.copy(e)},rotateOnAxis:function(){var r=new s;return function(e,t){r.setFromAxisAngle(e,t);this.quaternion.multiply(r);return this}}(),rotateOnWorldAxis:function(){var r=new s;return function(e,t){r.setFromAxisAngle(e,t);this.quaternion.premultiply(r);return this}}(),rotateX:function(){var t=new we(1,0,0);return function(e){return this.rotateOnAxis(t,e)}}(),rotateY:function(){var t=new we(0,1,0);return function(e){return this.rotateOnAxis(t,e)}}(),rotateZ:function(){var t=new we(0,0,1);return function(e){return this.rotateOnAxis(t,e)}}(),translateOnAxis:function(){var r=new we;return function(e,t){r.copy(e).applyQuaternion(this.quaternion);this.position.add(r.multiplyScalar(t));return this}}(),translateX:function(){var t=new we(1,0,0);return function(e){return this.translateOnAxis(t,e)}}(),translateY:function(){var t=new we(0,1,0);return function(e){return this.translateOnAxis(t,e)}}(),translateZ:function(){var t=new we(0,0,1);return function(e){return this.translateOnAxis(t,e)}}(),localToWorld:function(e){return e.applyMatrix4(this.matrixWorld)},worldToLocal:function(){var t=new xe;return function(e){return e.applyMatrix4(t.getInverse(this.matrixWorld))}}(),lookAt:function(){var n=new xe,i=new we;return function(e,t,r){e.isVector3?i.copy(e):i.set(e,t,r);this.isCamera?n.lookAt(this.position,i,this.up):n.lookAt(i,this.position,this.up);this.quaternion.setFromRotationMatrix(n)}}(),add:function(e){if(1<arguments.length){for(var t=0;t<arguments.length;t++)this.add(arguments[t]);return this}if(e===this)return console.error("THREE.Object3D.add: object can't be added as a child of itself.",e),this;e&&e.isObject3D?(null!==e.parent&&e.parent.remove(e),e.parent=this,e.dispatchEvent({type:"added"}),this.children.push(e)):console.error("THREE.Object3D.add: object not an instance of THREE.Object3D.",e);return this},remove:function(e){if(1<arguments.length){for(var t=0;t<arguments.length;t++)this.remove(arguments[t]);return this}t=this.children.indexOf(e);-1!==t&&(e.parent=null,e.dispatchEvent({type:"removed"}),this.children.splice(t,1));return this},getObjectById:function(e){return this.getObjectByProperty("id",e)},getObjectByName:function(e){return this.getObjectByProperty("name",e)},getObjectByProperty:function(e,t){if(this[e]===t)return this;for(var r=0,n=this.children.length;r<n;r++){var i=this.children[r].getObjectByProperty(e,t);if(void 0!==i)return i}},getWorldPosition:function(e){void 0===e&&(console.warn("THREE.Object3D: .getWorldPosition() target is now required"),e=new we);this.updateMatrixWorld(!0);return e.setFromMatrixPosition(this.matrixWorld)},getWorldQuaternion:function(){var t=new we,r=new we;return function(e){void 0===e&&(console.warn("THREE.Object3D: .getWorldQuaternion() target is now required"),e=new s);this.updateMatrixWorld(!0);this.matrixWorld.decompose(t,e,r);return e}}(),getWorldScale:function(){var t=new we,r=new s;return function(e){void 0===e&&(console.warn("THREE.Object3D: .getWorldScale() target is now required"),e=new we);this.updateMatrixWorld(!0);this.matrixWorld.decompose(t,r,e);return e}}(),getWorldDirection:function(){var t=new s;return function(e){void 0===e&&(console.warn("THREE.Object3D: .getWorldDirection() target is now required"),e=new we);this.getWorldQuaternion(t);return e.set(0,0,1).applyQuaternion(t)}}(),raycast:function(){},traverse:function(e){e(this);for(var t=this.children,r=0,n=t.length;r<n;r++)t[r].traverse(e)},traverseVisible:function(e){if(!1!==this.visible){e(this);for(var t=this.children,r=0,n=t.length;r<n;r++)t[r].traverseVisible(e)}},traverseAncestors:function(e){var t=this.parent;null!==t&&(e(t),t.traverseAncestors(e))},updateMatrix:function(){this.matrix.compose(this.position,this.quaternion,this.scale);this.matrixWorldNeedsUpdate=!0},updateMatrixWorld:function(e){this.matrixAutoUpdate&&this.updateMatrix();if(this.matrixWorldNeedsUpdate||e)null===this.parent?this.matrixWorld.copy(this.matrix):this.matrixWorld.multiplyMatrices(this.parent.matrixWorld,this.matrix),this.matrixWorldNeedsUpdate=!1,e=!0;for(var t=this.children,r=0,n=t.length;r<n;r++)t[r].updateMatrixWorld(e)},toJSON:function(r){function e(e,t){void 0===e[t.uuid]&&(e[t.uuid]=t.toJSON(r));return t.uuid}function t(e){var t=[],r;for(r in e){var n=e[r];delete n.metadata;t.push(n)}return t}var n=void 0===r||"string"===typeof r,i={};n&&(r={geometries:{},materials:{},textures:{},images:{},shapes:{}},i.metadata={version:4.5,type:"Object",generator:"Object3D.toJSON"});var o={};o.uuid=this.uuid;o.type=this.type;""!==this.name&&(o.name=this.name);!0===this.castShadow&&(o.castShadow=!0);!0===this.receiveShadow&&(o.receiveShadow=!0);!1===this.visible&&(o.visible=!1);!1===this.frustumCulled&&(o.frustumCulled=!1);0!==this.renderOrder&&(o.renderOrder=this.renderOrder);"{}"!==JSON.stringify(this.userData)&&(o.userData=this.userData);o.layers=this.layers.mask;o.matrix=this.matrix.toArray();!1===this.matrixAutoUpdate&&(o.matrixAutoUpdate=!1);if(this.isMesh||this.isLine||this.isPoints){o.geometry=e(r.geometries,this.geometry);var a=this.geometry.parameters;if(void 0!==a&&void 0!==a.shapes)if(a=a.shapes,Array.isArray(a))for(var s=0,u=a.length;s<u;s++)e(r.shapes,a[s]);else e(r.shapes,a)}if(void 0!==this.material)if(Array.isArray(this.material)){a=[];s=0;for(u=this.material.length;s<u;s++)a.push(e(r.materials,this.material[s]));o.material=a}else o.material=e(r.materials,this.material);if(0<this.children.length)for(o.children=[],s=0;s<this.children.length;s++)o.children.push(this.children[s].toJSON(r).object);if(n){n=t(r.geometries);s=t(r.materials);u=t(r.textures);var c=t(r.images);a=t(r.shapes);0<n.length&&(i.geometries=n);0<s.length&&(i.materials=s);0<u.length&&(i.textures=u);0<c.length&&(i.images=c);0<a.length&&(i.shapes=a)}i.object=o;return i},clone:function(e){return(new this.constructor).copy(this,e)},copy:function(e,t){void 0===t&&(t=!0);this.name=e.name;this.up.copy(e.up);this.position.copy(e.position);this.quaternion.copy(e.quaternion);this.scale.copy(e.scale);this.matrix.copy(e.matrix);this.matrixWorld.copy(e.matrixWorld);this.matrixAutoUpdate=e.matrixAutoUpdate;this.matrixWorldNeedsUpdate=e.matrixWorldNeedsUpdate;this.layers.mask=e.layers.mask;this.visible=e.visible;this.castShadow=e.castShadow;this.receiveShadow=e.receiveShadow;this.frustumCulled=e.frustumCulled;this.renderOrder=e.renderOrder;this.userData=JSON.parse(JSON.stringify(e.userData));if(!0===t)for(t=0;t<e.children.length;t++)this.add(e.children[t].clone());return this}});u.prototype=Object.assign(Object.create(h.prototype),{constructor:u,isCamera:!0,copy:function(e,t){h.prototype.copy.call(this,e,t);this.matrixWorldInverse.copy(e.matrixWorldInverse);this.projectionMatrix.copy(e.projectionMatrix);return this},getWorldDirection:function(){var t=new s;return function(e){void 0===e&&(console.warn("THREE.Camera: .getWorldDirection() target is now required"),e=new we);this.getWorldQuaternion(t);return e.set(0,0,-1).applyQuaternion(t)}}(),updateMatrixWorld:function(e){h.prototype.updateMatrixWorld.call(this,e);this.matrixWorldInverse.getInverse(this.matrixWorld)},clone:function(){return(new this.constructor).copy(this)}});f.prototype=Object.assign(Object.create(u.prototype),{constructor:f,isOrthographicCamera:!0,copy:function(e,t){u.prototype.copy.call(this,e,t);this.left=e.left;this.right=e.right;this.top=e.top;this.bottom=e.bottom;this.near=e.near;this.far=e.far;this.zoom=e.zoom;this.view=null===e.view?null:Object.assign({},e.view);return this},setViewOffset:function(e,t,r,n,i,o){null===this.view&&(this.view={enabled:!0,fullWidth:1,fullHeight:1,offsetX:0,offsetY:0,width:1,height:1});this.view.enabled=!0;this.view.fullWidth=e;this.view.fullHeight=t;this.view.offsetX=r;this.view.offsetY=n;this.view.width=i;this.view.height=o;this.updateProjectionMatrix()},clearViewOffset:function(){null!==this.view&&(this.view.enabled=!1);this.updateProjectionMatrix()},updateProjectionMatrix:function(){var e=(this.right-this.left)/(2*this.zoom),t=(this.top-this.bottom)/(2*this.zoom),r=(this.right+this.left)/2,n=(this.top+this.bottom)/2,i=r-e;r+=e;e=n+t;t=n-t;if(null!==this.view&&this.view.enabled){r=this.zoom/(this.view.width/this.view.fullWidth);t=this.zoom/(this.view.height/this.view.fullHeight);var o=(this.right-this.left)/this.view.width;n=(this.top-this.bottom)/this.view.height;i+=this.view.offsetX/r*o;r=i+this.view.width/r*o;e-=this.view.offsetY/t*n;t=e-this.view.height/t*n}this.projectionMatrix.makeOrthographic(i,r,e,t,this.near,this.far)},toJSON:function(e){e=h.prototype.toJSON.call(this,e);e.object.zoom=this.zoom;e.object.left=this.left;e.object.right=this.right;e.object.top=this.top;e.object.bottom=this.bottom;e.object.near=this.near;e.object.far=this.far;null!==this.view&&(e.object.view=Object.assign({},this.view));return e}});Object.assign(k.prototype,{clone:function(){return(new this.constructor).copy(this)},copy:function(e){this.a=e.a;this.b=e.b;this.c=e.c;this.normal.copy(e.normal);this.color.copy(e.color);this.materialIndex=e.materialIndex;for(var t=0,r=e.vertexNormals.length;t<r;t++)this.vertexNormals[t]=e.vertexNormals[t].clone();t=0;for(r=e.vertexColors.length;t<r;t++)this.vertexColors[t]=e.vertexColors[t].clone();return this}});var co=0;S.prototype=Object.assign(Object.create(t.prototype),{constructor:S,isGeometry:!0,applyMatrix:function(e){for(var t=(new m).getNormalMatrix(e),r=0,n=this.vertices.length;r<n;r++)this.vertices[r].applyMatrix4(e);r=0;for(n=this.faces.length;r<n;r++){e=this.faces[r];e.normal.applyMatrix3(t).normalize();for(var i=0,o=e.vertexNormals.length;i<o;i++)e.vertexNormals[i].applyMatrix3(t).normalize()}null!==this.boundingBox&&this.computeBoundingBox();null!==this.boundingSphere&&this.computeBoundingSphere();this.normalsNeedUpdate=this.verticesNeedUpdate=!0;return this},rotateX:function(){var t=new xe;return function(e){t.makeRotationX(e);this.applyMatrix(t);return this}}(),rotateY:function(){var t=new xe;return function(e){t.makeRotationY(e);this.applyMatrix(t);return this}}(),rotateZ:function(){var t=new xe;return function(e){t.makeRotationZ(e);this.applyMatrix(t);return this}}(),translate:function(){var n=new xe;return function(e,t,r){n.makeTranslation(e,t,r);this.applyMatrix(n);return this}}(),scale:function(){var n=new xe;return function(e,t,r){n.makeScale(e,t,r);this.applyMatrix(n);return this}}(),lookAt:function(){var t=new h;return function(e){t.lookAt(e);t.updateMatrix();this.applyMatrix(t.matrix)}}(),fromBufferGeometry:function(e){function t(e,t,r,n){var i=void 0!==s?[l[e].clone(),l[t].clone(),l[r].clone()]:[],o=void 0!==u?[a.colors[e].clone(),a.colors[t].clone(),a.colors[r].clone()]:[];n=new k(e,t,r,i,o,n);a.faces.push(n);void 0!==c&&a.faceVertexUvs[0].push([p[e].clone(),p[t].clone(),p[r].clone()]);void 0!==h&&a.faceVertexUvs[1].push([f[e].clone(),f[t].clone(),f[r].clone()])}var a=this,r=null!==e.index?e.index.array:void 0,n=e.attributes,i=n.position.array,s=void 0!==n.normal?n.normal.array:void 0,u=void 0!==n.color?n.color.array:void 0,c=void 0!==n.uv?n.uv.array:void 0,h=void 0!==n.uv2?n.uv2.array:void 0;void 0!==h&&(this.faceVertexUvs[1]=[]);for(var l=[],p=[],f=[],o=n=0;n<i.length;n+=3,o+=2)a.vertices.push(new we(i[n],i[n+1],i[n+2])),void 0!==s&&l.push(new we(s[n],s[n+1],s[n+2])),void 0!==u&&a.colors.push(new w(u[n],u[n+1],u[n+2])),void 0!==c&&p.push(new H(c[o],c[o+1])),void 0!==h&&f.push(new H(h[o],h[o+1]));var d=e.groups;if(0<d.length)for(n=0;n<d.length;n++){i=d[n];var v=i.start,m=i.count;o=v;for(v+=m;o<v;o+=3)void 0!==r?t(r[o],r[o+1],r[o+2],i.materialIndex):t(o,o+1,o+2,i.materialIndex)}else if(void 0!==r)for(n=0;n<r.length;n+=3)t(r[n],r[n+1],r[n+2]);else for(n=0;n<i.length/3;n+=3)t(n,n+1,n+2);this.computeFaceNormals();null!==e.boundingBox&&(this.boundingBox=e.boundingBox.clone());null!==e.boundingSphere&&(this.boundingSphere=e.boundingSphere.clone());return this},center:function(){var e=new we;return function(){this.computeBoundingBox();this.boundingBox.getCenter(e).negate();this.translate(e.x,e.y,e.z);return this}}(),normalize:function(){this.computeBoundingSphere();var e=this.boundingSphere.center,t=this.boundingSphere.radius;t=0===t?1:1/t;var r=new xe;r.set(t,0,0,-t*e.x,0,t,0,-t*e.y,0,0,t,-t*e.z,0,0,0,1);this.applyMatrix(r);return this},computeFaceNormals:function(){for(var e=new we,t=new we,r=0,n=this.faces.length;r<n;r++){var i=this.faces[r],o=this.vertices[i.a],a=this.vertices[i.b];e.subVectors(this.vertices[i.c],a);t.subVectors(o,a);e.cross(t);e.normalize();i.normal.copy(e)}},computeVertexNormals:function(e){void 0===e&&(e=!0);var t;var r=Array(this.vertices.length);var n=0;for(t=this.vertices.length;n<t;n++)r[n]=new we;if(e){var i=new we,o=new we;e=0;for(n=this.faces.length;e<n;e++){t=this.faces[e];var a=this.vertices[t.a];var s=this.vertices[t.b];var u=this.vertices[t.c];i.subVectors(u,s);o.subVectors(a,s);i.cross(o);r[t.a].add(i);r[t.b].add(i);r[t.c].add(i)}}else for(this.computeFaceNormals(),e=0,n=this.faces.length;e<n;e++)t=this.faces[e],r[t.a].add(t.normal),r[t.b].add(t.normal),r[t.c].add(t.normal);n=0;for(t=this.vertices.length;n<t;n++)r[n].normalize();e=0;for(n=this.faces.length;e<n;e++)t=this.faces[e],a=t.vertexNormals,3===a.length?(a[0].copy(r[t.a]),a[1].copy(r[t.b]),a[2].copy(r[t.c])):(a[0]=r[t.a].clone(),a[1]=r[t.b].clone(),a[2]=r[t.c].clone());0<this.faces.length&&(this.normalsNeedUpdate=!0)},computeFlatVertexNormals:function(){var e;this.computeFaceNormals();var t=0;for(e=this.faces.length;t<e;t++){var 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 e,t;var r=0;for(t=this.faces.length;r<t;r++){var n=this.faces[r];n.__originalFaceNormal?n.__originalFaceNormal.copy(n.normal):n.__originalFaceNormal=n.normal.clone();n.__originalVertexNormals||(n.__originalVertexNormals=[]);var i=0;for(e=n.vertexNormals.length;i<e;i++)n.__originalVertexNormals[i]?n.__originalVertexNormals[i].copy(n.vertexNormals[i]):n.__originalVertexNormals[i]=n.vertexNormals[i].clone()}var o=new S;o.faces=this.faces;i=0;for(e=this.morphTargets.length;i<e;i++){if(!this.morphNormals[i]){this.morphNormals[i]={};this.morphNormals[i].faceNormals=[];this.morphNormals[i].vertexNormals=[];n=this.morphNormals[i].faceNormals;var a=this.morphNormals[i].vertexNormals;r=0;for(t=this.faces.length;r<t;r++){var s=new we;var u={a:new we,b:new we,c:new we};n.push(s);a.push(u)}}a=this.morphNormals[i];o.vertices=this.morphTargets[i].vertices;o.computeFaceNormals();o.computeVertexNormals();r=0;for(t=this.faces.length;r<t;r++)n=this.faces[r],s=a.faceNormals[r],u=a.vertexNormals[r],s.copy(n.normal),u.a.copy(n.vertexNormals[0]),u.b.copy(n.vertexNormals[1]),u.c.copy(n.vertexNormals[2])}r=0;for(t=this.faces.length;r<t;r++)n=this.faces[r],n.normal=n.__originalFaceNormal,n.vertexNormals=n.__originalVertexNormals},computeBoundingBox:function(){null===this.boundingBox&&(this.boundingBox=new r);this.boundingBox.setFromPoints(this.vertices)},computeBoundingSphere:function(){null===this.boundingSphere&&(this.boundingSphere=new c);this.boundingSphere.setFromPoints(this.vertices)},merge:function(e,t,r){if(e&&e.isGeometry){var n,i=this.vertices.length,o=this.vertices,a=e.vertices,s=this.faces,u=e.faces,c=this.faceVertexUvs[0],h=e.faceVertexUvs[0],l=this.colors,p=e.colors;void 0===r&&(r=0);void 0!==t&&(n=(new m).getNormalMatrix(t));e=0;for(var f=a.length;e<f;e++){var d=a[e].clone();void 0!==t&&d.applyMatrix4(t);o.push(d)}e=0;for(f=p.length;e<f;e++)l.push(p[e].clone());e=0;for(f=u.length;e<f;e++){a=u[e];var v=a.vertexNormals;p=a.vertexColors;l=new k(a.a+i,a.b+i,a.c+i);l.normal.copy(a.normal);void 0!==n&&l.normal.applyMatrix3(n).normalize();t=0;for(o=v.length;t<o;t++)d=v[t].clone(),void 0!==n&&d.applyMatrix3(n).normalize(),l.vertexNormals.push(d);l.color.copy(a.color);t=0;for(o=p.length;t<o;t++)d=p[t],l.vertexColors.push(d.clone());l.materialIndex=a.materialIndex+r;s.push(l)}e=0;for(f=h.length;e<f;e++)if(r=h[e],n=[],void 0!==r){t=0;for(o=r.length;t<o;t++)n.push(r[t].clone());c.push(n)}}else console.error("THREE.Geometry.merge(): geometry not an instance of THREE.Geometry.",e)},mergeMesh:function(e){e&&e.isMesh?(e.matrixAutoUpdate&&e.updateMatrix(),this.merge(e.geometry,e.matrix)):console.error("THREE.Geometry.mergeMesh(): mesh not an instance of THREE.Mesh.",e)},mergeVertices:function(){var e={},t=[],r=[],n=Math.pow(10,4),i;var o=0;for(i=this.vertices.length;o<i;o++){var a=this.vertices[o];a=Math.round(a.x*n)+"_"+Math.round(a.y*n)+"_"+Math.round(a.z*n);void 0===e[a]?(e[a]=o,t.push(this.vertices[o]),r[o]=t.length-1):r[o]=r[e[a]]}e=[];o=0;for(i=this.faces.length;o<i;o++)for(n=this.faces[o],n.a=r[n.a],n.b=r[n.b],n.c=r[n.c],n=[n.a,n.b,n.c],a=0;3>a;a++)if(n[a]===n[(a+1)%3]){e.push(o);break}for(o=e.length-1;0<=o;o--)for(n=e[o],this.faces.splice(n,1),r=0,i=this.faceVertexUvs.length;r<i;r++)this.faceVertexUvs[r].splice(n,1);o=this.vertices.length-t.length;this.vertices=t;return o},setFromPoints:function(e){this.vertices=[];for(var t=0,r=e.length;t<r;t++){var n=e[t];this.vertices.push(new we(n.x,n.y,n.z||0))}return this},sortFacesByMaterialIndex:function(){for(var e=this.faces,t=e.length,r=0;r<t;r++)e[r]._id=r;e.sort(function(e,t){return e.materialIndex-t.materialIndex});var n=this.faceVertexUvs[0],i=this.faceVertexUvs[1],o,a;n&&n.length===t&&(o=[]);i&&i.length===t&&(a=[]);for(r=0;r<t;r++){var s=e[r]._id;o&&o.push(n[s]);a&&a.push(i[s])}o&&(this.faceVertexUvs[0]=o);a&&(this.faceVertexUvs[1]=a)},toJSON:function(){function e(e,t,r){return r?e|1<<t:e&~(1<<t)}function t(e){var t=e.x.toString()+e.y.toString()+e.z.toString();if(void 0!==c[t])return c[t];c[t]=u.length/3;u.push(e.x,e.y,e.z);return c[t]}function r(e){var t=e.r.toString()+e.g.toString()+e.b.toString();if(void 0!==l[t])return l[t];l[t]=h.length;h.push(e.getHex());return l[t]}function n(e){var t=e.x.toString()+e.y.toString();if(void 0!==f[t])return f[t];f[t]=p.length/2;p.push(e.x,e.y);return f[t]}var i={metadata:{version:4.5,type:"Geometry",generator:"Geometry.toJSON"}};i.uuid=this.uuid;i.type=this.type;""!==this.name&&(i.name=this.name);if(void 0!==this.parameters){var o=this.parameters,a;for(a in o)void 0!==o[a]&&(i[a]=o[a]);return i}o=[];for(a=0;a<this.vertices.length;a++){var s=this.vertices[a];o.push(s.x,s.y,s.z)}s=[];var u=[],c={},h=[],l={},p=[],f={};for(a=0;a<this.faces.length;a++){var d=this.faces[a],v=void 0!==this.faceVertexUvs[0][a],m=0<d.normal.length(),g=0<d.vertexNormals.length,y=1!==d.color.r||1!==d.color.g||1!==d.color.b,_=0<d.vertexColors.length,b=0;b=e(b,0,0);b=e(b,1,!0);b=e(b,2,!1);b=e(b,3,v);b=e(b,4,m);b=e(b,5,g);b=e(b,6,y);b=e(b,7,_);s.push(b);s.push(d.a,d.b,d.c);s.push(d.materialIndex);v&&(v=this.faceVertexUvs[0][a],s.push(n(v[0]),n(v[1]),n(v[2])));m&&s.push(t(d.normal));g&&(m=d.vertexNormals,s.push(t(m[0]),t(m[1]),t(m[2])));y&&s.push(r(d.color));_&&(d=d.vertexColors,s.push(r(d[0]),r(d[1]),r(d[2])))}i.data={};i.data.vertices=o;i.data.normals=u;0<h.length&&(i.data.colors=h);0<p.length&&(i.data.uvs=[p]);i.data.faces=s;return i},clone:function(){return(new S).copy(this)},copy:function(e){var t,r,n;this.vertices=[];this.colors=[];this.faces=[];this.faceVertexUvs=[[]];this.morphTargets=[];this.morphNormals=[];this.skinWeights=[];this.skinIndices=[];this.lineDistances=[];this.boundingSphere=this.boundingBox=null;this.name=e.name;var i=e.vertices;var o=0;for(t=i.length;o<t;o++)this.vertices.push(i[o].clone());i=e.colors;o=0;for(t=i.length;o<t;o++)this.colors.push(i[o].clone());i=e.faces;o=0;for(t=i.length;o<t;o++)this.faces.push(i[o].clone());o=0;for(t=e.faceVertexUvs.length;o<t;o++){var a=e.faceVertexUvs[o];void 0===this.faceVertexUvs[o]&&(this.faceVertexUvs[o]=[]);i=0;for(r=a.length;i<r;i++){var s=a[i],u=[];var c=0;for(n=s.length;c<n;c++)u.push(s[c].clone());this.faceVertexUvs[o].push(u)}}c=e.morphTargets;o=0;for(t=c.length;o<t;o++){n={};n.name=c[o].name;if(void 0!==c[o].vertices)for(n.vertices=[],i=0,r=c[o].vertices.length;i<r;i++)n.vertices.push(c[o].vertices[i].clone());if(void 0!==c[o].normals)for(n.normals=[],i=0,r=c[o].normals.length;i<r;i++)n.normals.push(c[o].normals[i].clone());this.morphTargets.push(n)}c=e.morphNormals;o=0;for(t=c.length;o<t;o++){n={};if(void 0!==c[o].vertexNormals)for(n.vertexNormals=[],i=0,r=c[o].vertexNormals.length;i<r;i++)a=c[o].vertexNormals[i],s={},s.a=a.a.clone(),s.b=a.b.clone(),s.c=a.c.clone(),n.vertexNormals.push(s);if(void 0!==c[o].faceNormals)for(n.faceNormals=[],i=0,r=c[o].faceNormals.length;i<r;i++)n.faceNormals.push(c[o].faceNormals[i].clone());this.morphNormals.push(n)}i=e.skinWeights;o=0;for(t=i.length;o<t;o++)this.skinWeights.push(i[o].clone());i=e.skinIndices;o=0;for(t=i.length;o<t;o++)this.skinIndices.push(i[o].clone());i=e.lineDistances;o=0;for(t=i.length;o<t;o++)this.lineDistances.push(i[o]);o=e.boundingBox;null!==o&&(this.boundingBox=o.clone());o=e.boundingSphere;null!==o&&(this.boundingSphere=o.clone());this.elementsNeedUpdate=e.elementsNeedUpdate;this.verticesNeedUpdate=e.verticesNeedUpdate;this.uvsNeedUpdate=e.uvsNeedUpdate;this.normalsNeedUpdate=e.normalsNeedUpdate;this.colorsNeedUpdate=e.colorsNeedUpdate;this.lineDistancesNeedUpdate=e.lineDistancesNeedUpdate;this.groupsNeedUpdate=e.groupsNeedUpdate;return this},dispose:function(){this.dispatchEvent({type:"dispose"})}});Object.defineProperty(y.prototype,"needsUpdate",{set:function(e){!0===e&&this.version++}});Object.assign(y.prototype,{isBufferAttribute:!0,onUploadCallback:function(){},setArray:function(e){if(Array.isArray(e))throw new TypeError("THREE.BufferAttribute: array should be a Typed Array.");this.count=void 0!==e?e.length/this.itemSize:0;this.array=e;return this},setDynamic:function(e){this.dynamic=e;return this},copy:function(e){this.name=e.name;this.array=new e.array.constructor(e.array);this.itemSize=e.itemSize;this.count=e.count;this.normalized=e.normalized;this.dynamic=e.dynamic;return this},copyAt:function(e,t,r){e*=this.itemSize;r*=t.itemSize;for(var n=0,i=this.itemSize;n<i;n++)this.array[e+n]=t.array[r+n];return this},copyArray:function(e){this.array.set(e);return this},copyColorsArray:function(e){for(var t=this.array,r=0,n=0,i=e.length;n<i;n++){var o=e[n];void 0===o&&(console.warn("THREE.BufferAttribute.copyColorsArray(): color is undefined",n),o=new w);t[r++]=o.r;t[r++]=o.g;t[r++]=o.b}return this},copyVector2sArray:function(e){for(var t=this.array,r=0,n=0,i=e.length;n<i;n++){var o=e[n];void 0===o&&(console.warn("THREE.BufferAttribute.copyVector2sArray(): vector is undefined",n),o=new H);t[r++]=o.x;t[r++]=o.y}return this},copyVector3sArray:function(e){for(var t=this.array,r=0,n=0,i=e.length;n<i;n++){var o=e[n];void 0===o&&(console.warn("THREE.BufferAttribute.copyVector3sArray(): vector is undefined",n),o=new we);t[r++]=o.x;t[r++]=o.y;t[r++]=o.z}return this},copyVector4sArray:function(e){for(var t=this.array,r=0,n=0,i=e.length;n<i;n++){var o=e[n];void 0===o&&(console.warn("THREE.BufferAttribute.copyVector4sArray(): vector is undefined",n),o=new Se);t[r++]=o.x;t[r++]=o.y;t[r++]=o.z;t[r++]=o.w}return this},set:function(e,t){void 0===t&&(t=0);this.array.set(e,t);return this},getX:function(e){return this.array[e*this.itemSize]},setX:function(e,t){this.array[e*this.itemSize]=t;return this},getY:function(e){return this.array[e*this.itemSize+1]},setY:function(e,t){this.array[e*this.itemSize+1]=t;return this},getZ:function(e){return this.array[e*this.itemSize+2]},setZ:function(e,t){this.array[e*this.itemSize+2]=t;return this},getW:function(e){return this.array[e*this.itemSize+3]},setW:function(e,t){this.array[e*this.itemSize+3]=t;return this},setXY:function(e,t,r){e*=this.itemSize;this.array[e+0]=t;this.array[e+1]=r;return this},setXYZ:function(e,t,r,n){e*=this.itemSize;this.array[e+0]=t;this.array[e+1]=r;this.array[e+2]=n;return this},setXYZW:function(e,t,r,n,i){e*=this.itemSize;this.array[e+0]=t;this.array[e+1]=r;this.array[e+2]=n;this.array[e+3]=i;return this},onUpload:function(e){this.onUploadCallback=e;return this},clone:function(){return new this.constructor(this.array,this.itemSize).copy(this)}});a.prototype=Object.create(y.prototype);a.prototype.constructor=a;l.prototype=Object.create(y.prototype);l.prototype.constructor=l;d.prototype=Object.create(y.prototype);d.prototype.constructor=d;v.prototype=Object.create(y.prototype);v.prototype.constructor=v;_.prototype=Object.create(y.prototype);_.prototype.constructor=_;b.prototype=Object.create(y.prototype);b.prototype.constructor=b;x.prototype=Object.create(y.prototype);x.prototype.constructor=x;P.prototype=Object.create(y.prototype);P.prototype.constructor=P;M.prototype=Object.create(y.prototype);M.prototype.constructor=M;Object.assign(E.prototype,{computeGroups:function(e){var t=[],r=void 0;e=e.faces;for(var n=0;n<e.length;n++){var i=e[n];if(i.materialIndex!==r){r=i.materialIndex;void 0!==o&&(o.count=3*n-o.start,t.push(o));var o={start:3*n,materialIndex:r}}}void 0!==o&&(o.count=3*n-o.start,t.push(o));this.groups=t},fromGeometry:function(e){var t=e.faces,r=e.vertices,n=e.faceVertexUvs,i=n[0]&&0<n[0].length,o=n[1]&&0<n[1].length,a=e.morphTargets,s=a.length;if(0<s){var u=[];for(var c=0;c<s;c++)u[c]=[];this.morphTargets.position=u}var h=e.morphNormals,l=h.length;if(0<l){var p=[];for(c=0;c<l;c++)p[c]=[];this.morphTargets.normal=p}var f=e.skinIndices,d=e.skinWeights,v=f.length===r.length,m=d.length===r.length;0<r.length&&0===t.length&&console.error("THREE.DirectGeometry: Faceless geometries are not supported.");for(c=0;c<t.length;c++){var g=t[c];this.vertices.push(r[g.a],r[g.b],r[g.c]);var y=g.vertexNormals;3===y.length?this.normals.push(y[0],y[1],y[2]):(y=g.normal,this.normals.push(y,y,y));y=g.vertexColors;3===y.length?this.colors.push(y[0],y[1],y[2]):(y=g.color,this.colors.push(y,y,y));!0===i&&(y=n[0][c],void 0!==y?this.uvs.push(y[0],y[1],y[2]):(console.warn("THREE.DirectGeometry.fromGeometry(): Undefined vertexUv ",c),this.uvs.push(new H,new H,new H)));!0===o&&(y=n[1][c],void 0!==y?this.uvs2.push(y[0],y[1],y[2]):(console.warn("THREE.DirectGeometry.fromGeometry(): Undefined vertexUv2 ",c),this.uvs2.push(new H,new H,new H)));for(y=0;y<s;y++){var _=a[y].vertices;u[y].push(_[g.a],_[g.b],_[g.c])}for(y=0;y<l;y++)_=h[y].vertexNormals[c],p[y].push(_.a,_.b,_.c);v&&this.skinIndices.push(f[g.a],f[g.b],f[g.c]);m&&this.skinWeights.push(d[g.a],d[g.b],d[g.c])}this.computeGroups(e);this.verticesNeedUpdate=e.verticesNeedUpdate;this.normalsNeedUpdate=e.normalsNeedUpdate;this.colorsNeedUpdate=e.colorsNeedUpdate;this.uvsNeedUpdate=e.uvsNeedUpdate;this.groupsNeedUpdate=e.groupsNeedUpdate;return this}});var ho=1;A.prototype=Object.assign(Object.create(t.prototype),{constructor:A,isBufferGeometry:!0,getIndex:function(){return this.index},setIndex:function(e){Array.isArray(e)?this.index=new(65535<C(e)?x:_)(e,1):this.index=e},addAttribute:function(e,t,r){if(!(t&&t.isBufferAttribute||t&&t.isInterleavedBufferAttribute))return console.warn("THREE.BufferGeometry: .addAttribute() now expects ( name, attribute )."),this.addAttribute(e,new y(t,r));if("index"===e)return console.warn("THREE.BufferGeometry.addAttribute: Use .setIndex() for index attribute."),this.setIndex(t),this;this.attributes[e]=t;return this},getAttribute:function(e){return this.attributes[e]},removeAttribute:function(e){delete this.attributes[e];return this},addGroup:function(e,t,r){this.groups.push({start:e,count:t,materialIndex:void 0!==r?r:0})},clearGroups:function(){this.groups=[]},setDrawRange:function(e,t){this.drawRange.start=e;this.drawRange.count=t},applyMatrix:function(e){var t=this.attributes.position;void 0!==t&&(e.applyToBufferAttribute(t),t.needsUpdate=!0);t=this.attributes.normal;void 0!==t&&((new m).getNormalMatrix(e).applyToBufferAttribute(t),t.needsUpdate=!0);null!==this.boundingBox&&this.computeBoundingBox();null!==this.boundingSphere&&this.computeBoundingSphere();return this},rotateX:function(){var t=new xe;return function(e){t.makeRotationX(e);this.applyMatrix(t);return this}}(),rotateY:function(){var t=new xe;return function(e){t.makeRotationY(e);this.applyMatrix(t);return this}}(),rotateZ:function(){var t=new xe;return function(e){t.makeRotationZ(e);this.applyMatrix(t);return this}}(),translate:function(){var n=new xe;return function(e,t,r){n.makeTranslation(e,t,r);this.applyMatrix(n);return this}}(),scale:function(){var n=new xe;return function(e,t,r){n.makeScale(e,t,r);this.applyMatrix(n);return this}}(),lookAt:function(){var t=new h;return function(e){t.lookAt(e);t.updateMatrix();this.applyMatrix(t.matrix)}}(),center:function(){var e=new we;return function(){this.computeBoundingBox();this.boundingBox.getCenter(e).negate();this.translate(e.x,e.y,e.z);return this}}(),setFromObject:function(e){var t=e.geometry;if(e.isPoints||e.isLine){e=new P(3*t.vertices.length,3);var r=new P(3*t.colors.length,3);this.addAttribute("position",e.copyVector3sArray(t.vertices));this.addAttribute("color",r.copyColorsArray(t.colors));t.lineDistances&&t.lineDistances.length===t.vertices.length&&(e=new P(t.lineDistances.length,1),this.addAttribute("lineDistance",e.copyArray(t.lineDistances)));null!==t.boundingSphere&&(this.boundingSphere=t.boundingSphere.clone());null!==t.boundingBox&&(this.boundingBox=t.boundingBox.clone())}else e.isMesh&&t&&t.isGeometry&&this.fromGeometry(t);return this},setFromPoints:function(e){for(var t=[],r=0,n=e.length;r<n;r++){var i=e[r];t.push(i.x,i.y,i.z||0)}this.addAttribute("position",new P(t,3));return this},updateFromObject:function(e){var t=e.geometry;if(e.isMesh){var r=t.__directGeometry;!0===t.elementsNeedUpdate&&(r=void 0,t.elementsNeedUpdate=!1);if(void 0===r)return this.fromGeometry(t);r.verticesNeedUpdate=t.verticesNeedUpdate;r.normalsNeedUpdate=t.normalsNeedUpdate;r.colorsNeedUpdate=t.colorsNeedUpdate;r.uvsNeedUpdate=t.uvsNeedUpdate;r.groupsNeedUpdate=t.groupsNeedUpdate;t.verticesNeedUpdate=!1;t.normalsNeedUpdate=!1;t.colorsNeedUpdate=!1;t.uvsNeedUpdate=!1;t.groupsNeedUpdate=!1;t=r}!0===t.verticesNeedUpdate&&(r=this.attributes.position,void 0!==r&&(r.copyVector3sArray(t.vertices),r.needsUpdate=!0),t.verticesNeedUpdate=!1);!0===t.normalsNeedUpdate&&(r=this.attributes.normal,void 0!==r&&(r.copyVector3sArray(t.normals),r.needsUpdate=!0),t.normalsNeedUpdate=!1);!0===t.colorsNeedUpdate&&(r=this.attributes.color,void 0!==r&&(r.copyColorsArray(t.colors),r.needsUpdate=!0),t.colorsNeedUpdate=!1);t.uvsNeedUpdate&&(r=this.attributes.uv,void 0!==r&&(r.copyVector2sArray(t.uvs),r.needsUpdate=!0),t.uvsNeedUpdate=!1);t.lineDistancesNeedUpdate&&(r=this.attributes.lineDistance,void 0!==r&&(r.copyArray(t.lineDistances),r.needsUpdate=!0),t.lineDistancesNeedUpdate=!1);t.groupsNeedUpdate&&(t.computeGroups(e.geometry),this.groups=t.groups,t.groupsNeedUpdate=!1);return this},fromGeometry:function(e){e.__directGeometry=(new E).fromGeometry(e);return this.fromDirectGeometry(e.__directGeometry)},fromDirectGeometry:function(e){var t=new Float32Array(3*e.vertices.length);this.addAttribute("position",new y(t,3).copyVector3sArray(e.vertices));0<e.normals.length&&(t=new Float32Array(3*e.normals.length),this.addAttribute("normal",new y(t,3).copyVector3sArray(e.normals)));0<e.colors.length&&(t=new Float32Array(3*e.colors.length),this.addAttribute("color",new y(t,3).copyColorsArray(e.colors)));0<e.uvs.length&&(t=new Float32Array(2*e.uvs.length),this.addAttribute("uv",new y(t,2).copyVector2sArray(e.uvs)));0<e.uvs2.length&&(t=new Float32Array(2*e.uvs2.length),this.addAttribute("uv2",new y(t,2).copyVector2sArray(e.uvs2)));this.groups=e.groups;for(var r in e.morphTargets){t=[];for(var n=e.morphTargets[r],i=0,o=n.length;i<o;i++){var a=n[i],s=new P(3*a.length,3);t.push(s.copyVector3sArray(a))}this.morphAttributes[r]=t}0<e.skinIndices.length&&(r=new P(4*e.skinIndices.length,4),this.addAttribute("skinIndex",r.copyVector4sArray(e.skinIndices)));0<e.skinWeights.length&&(r=new P(4*e.skinWeights.length,4),this.addAttribute("skinWeight",r.copyVector4sArray(e.skinWeights)));null!==e.boundingSphere&&(this.boundingSphere=e.boundingSphere.clone());null!==e.boundingBox&&(this.boundingBox=e.boundingBox.clone());return this},computeBoundingBox:function(){null===this.boundingBox&&(this.boundingBox=new r);var e=this.attributes.position;void 0!==e?this.boundingBox.setFromBufferAttribute(e):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 o=new r,a=new we;return function(){null===this.boundingSphere&&(this.boundingSphere=new c);var e=this.attributes.position;if(e){var t=this.boundingSphere.center;o.setFromBufferAttribute(e);o.getCenter(t);for(var r=0,n=0,i=e.count;n<i;n++)a.x=e.getX(n),a.y=e.getY(n),a.z=e.getZ(n),r=Math.max(r,t.distanceToSquared(a));this.boundingSphere.radius=Math.sqrt(r);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 e=this.index,t=this.attributes,r=this.groups;if(t.position){var n=t.position.array;if(void 0===t.normal)this.addAttribute("normal",new y(new Float32Array(n.length),3));else for(var i=t.normal.array,o=0,a=i.length;o<a;o++)i[o]=0;i=t.normal.array;var s=new we,u=new we,c=new we,h=new we,l=new we;if(e){e=e.array;0===r.length&&this.addGroup(0,e.length);for(var p=0,f=r.length;p<f;++p){o=r[p];a=o.start;var d=o.count;o=a;for(a+=d;o<a;o+=3){d=3*e[o+0];var v=3*e[o+1];var m=3*e[o+2];s.fromArray(n,d);u.fromArray(n,v);c.fromArray(n,m);h.subVectors(c,u);l.subVectors(s,u);h.cross(l);i[d]+=h.x;i[d+1]+=h.y;i[d+2]+=h.z;i[v]+=h.x;i[v+1]+=h.y;i[v+2]+=h.z;i[m]+=h.x;i[m+1]+=h.y;i[m+2]+=h.z}}}else for(o=0,a=n.length;o<a;o+=9)s.fromArray(n,o),u.fromArray(n,o+3),c.fromArray(n,o+6),h.subVectors(c,u),l.subVectors(s,u),h.cross(l),i[o]=h.x,i[o+1]=h.y,i[o+2]=h.z,i[o+3]=h.x,i[o+4]=h.y,i[o+5]=h.z,i[o+6]=h.x,i[o+7]=h.y,i[o+8]=h.z;this.normalizeNormals();t.normal.needsUpdate=!0}},merge:function(e,t){if(e&&e.isBufferGeometry){void 0===t&&(t=0,console.warn("THREE.BufferGeometry.merge(): Overwriting original geometry, starting at offset=0. Use BufferGeometryUtils.mergeBufferGeometries() for lossless merge."));var r=this.attributes,n;for(n in r)if(void 0!==e.attributes[n]){var i=r[n].array,o=e.attributes[n],a=o.array,s=0;for(o=o.itemSize*t;s<a.length;s++,o++)i[o]=a[s]}return this}console.error("THREE.BufferGeometry.merge(): geometry not an instance of THREE.BufferGeometry.",e)},normalizeNormals:function(){var n=new we;return function(){for(var e=this.attributes.normal,t=0,r=e.count;t<r;t++)n.x=e.getX(t),n.y=e.getY(t),n.z=e.getZ(t),n.normalize(),e.setXYZ(t,n.x,n.y,n.z)}}(),toNonIndexed:function(){if(null===this.index)return console.warn("THREE.BufferGeometry.toNonIndexed(): Geometry is already non-indexed."),this;var e=new A,t=this.index.array,r=this.attributes,n;for(n in r){var i=r[n],o=i.array,a=i.itemSize,s=new o.constructor(t.length*a),u=0;i=0;for(var c=t.length;i<c;i++){var h=t[i]*a;for(var l=0;l<a;l++)s[u++]=o[h++]}e.addAttribute(n,new y(s,a))}t=this.groups;i=0;for(c=t.length;i<c;i++)r=t[i],e.addGroup(r.start,r.count,r.materialIndex);return e},toJSON:function(){var e={metadata:{version:4.5,type:"BufferGeometry",generator:"BufferGeometry.toJSON"}};e.uuid=this.uuid;e.type=this.type;""!==this.name&&(e.name=this.name);0<Object.keys(this.userData).length&&(e.userData=this.userData);if(void 0!==this.parameters){var t=this.parameters;for(i in t)void 0!==t[i]&&(e[i]=t[i]);return e}e.data={attributes:{}};var r=this.index;null!==r&&(t=Array.prototype.slice.call(r.array),e.data.index={type:r.array.constructor.name,array:t});r=this.attributes;for(i in r){var n=r[i];t=Array.prototype.slice.call(n.array);e.data.attributes[i]={itemSize:n.itemSize,type:n.array.constructor.name,array:t,normalized:n.normalized}}var i=this.groups;0<i.length&&(e.data.groups=JSON.parse(JSON.stringify(i)));i=this.boundingSphere;null!==i&&(e.data.boundingSphere={center:i.center.toArray(),radius:i.radius});return e},clone:function(){return(new A).copy(this)},copy:function(e){var t;this.index=null;this.attributes={};this.morphAttributes={};this.groups=[];this.boundingSphere=this.boundingBox=null;this.name=e.name;var r=e.index;null!==r&&this.setIndex(r.clone());r=e.attributes;for(a in r)this.addAttribute(a,r[a].clone());var n=e.morphAttributes;for(a in n){var i=[],o=n[a];r=0;for(t=o.length;r<t;r++)i.push(o[r].clone());this.morphAttributes[a]=i}var a=e.groups;r=0;for(t=a.length;r<t;r++)n=a[r],this.addGroup(n.start,n.count,n.materialIndex);a=e.boundingBox;null!==a&&(this.boundingBox=a.clone());a=e.boundingSphere;null!==a&&(this.boundingSphere=a.clone());this.drawRange.start=e.drawRange.start;this.drawRange.count=e.drawRange.count;this.userData=e.userData;return this},dispose:function(){this.dispatchEvent({type:"dispose"})}});O.prototype=Object.create(S.prototype);O.prototype.constructor=O;j.prototype=Object.create(A.prototype);j.prototype.constructor=j;R.prototype=Object.create(S.prototype);R.prototype.constructor=R;L.prototype=Object.create(A.prototype);L.prototype.constructor=L;var lo=0;I.prototype=Object.assign(Object.create(t.prototype),{constructor:I,isMaterial:!0,onBeforeCompile:function(){},setValues:function(e){if(void 0!==e)for(var t in e){var r=e[t];if(void 0===r)console.warn("THREE.Material: '"+t+"' parameter is undefined.");else if("shading"===t)console.warn("THREE."+this.type+": .shading has been removed. Use the boolean .flatShading instead."),this.flatShading=1===r?!0:!1;else{var n=this[t];void 0===n?console.warn("THREE."+this.type+": '"+t+"' is not a property of this material."):n&&n.isColor?n.set(r):n&&n.isVector3&&r&&r.isVector3?n.copy(r):this[t]="overdraw"===t?Number(r):r}}},toJSON:function(e){function t(e){var t=[],r;for(r in e){var n=e[r];delete n.metadata;t.push(n)}return t}var r=void 0===e||"string"===typeof e;r&&(e={textures:{},images:{}});var n={metadata:{version:4.5,type:"Material",generator:"Material.toJSON"}};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());1!==this.emissiveIntensity&&(n.emissiveIntensity=this.emissiveIntensity);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(e).uuid);this.alphaMap&&this.alphaMap.isTexture&&(n.alphaMap=this.alphaMap.toJSON(e).uuid);this.lightMap&&this.lightMap.isTexture&&(n.lightMap=this.lightMap.toJSON(e).uuid);this.aoMap&&this.aoMap.isTexture&&(n.aoMap=this.aoMap.toJSON(e).uuid,n.aoMapIntensity=this.aoMapIntensity);this.bumpMap&&this.bumpMap.isTexture&&(n.bumpMap=this.bumpMap.toJSON(e).uuid,n.bumpScale=this.bumpScale);this.normalMap&&this.normalMap.isTexture&&(n.normalMap=this.normalMap.toJSON(e).uuid,n.normalMapType=this.normalMapType,n.normalScale=this.normalScale.toArray());this.displacementMap&&this.displacementMap.isTexture&&(n.displacementMap=this.displacementMap.toJSON(e).uuid,n.displacementScale=this.displacementScale,n.displacementBias=this.displacementBias);this.roughnessMap&&this.roughnessMap.isTexture&&(n.roughnessMap=this.roughnessMap.toJSON(e).uuid);this.metalnessMap&&this.metalnessMap.isTexture&&(n.metalnessMap=this.metalnessMap.toJSON(e).uuid);this.emissiveMap&&this.emissiveMap.isTexture&&(n.emissiveMap=this.emissiveMap.toJSON(e).uuid);this.specularMap&&this.specularMap.isTexture&&(n.specularMap=this.specularMap.toJSON(e).uuid);this.envMap&&this.envMap.isTexture&&(n.envMap=this.envMap.toJSON(e).uuid,n.reflectivity=this.reflectivity);this.gradientMap&&this.gradientMap.isTexture&&(n.gradientMap=this.gradientMap.toJSON(e).uuid);void 0!==this.size&&(n.size=this.size);void 0!==this.sizeAttenuation&&(n.sizeAttenuation=this.sizeAttenuation);1!==this.blending&&(n.blending=this.blending);!0===this.flatShading&&(n.flatShading=this.flatShading);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.rotation&&(n.rotation=this.rotation);1!==this.linewidth&&(n.linewidth=this.linewidth);void 0!==this.dashSize&&(n.dashSize=this.dashSize);void 0!==this.gapSize&&(n.gapSize=this.gapSize);void 0!==this.scale&&(n.scale=this.scale);!0===this.dithering&&(n.dithering=!0);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);!0===this.morphTargets&&(n.morphTargets=!0);!0===this.skinning&&(n.skinning=!0);!1===this.visible&&(n.visible=!1);"{}"!==JSON.stringify(this.userData)&&(n.userData=this.userData);r&&(r=t(e.textures),e=t(e.images),0<r.length&&(n.textures=r),0<e.length&&(n.images=e));return n},clone:function(){return(new this.constructor).copy(this)},copy:function(e){this.name=e.name;this.fog=e.fog;this.lights=e.lights;this.blending=e.blending;this.side=e.side;this.flatShading=e.flatShading;this.vertexColors=e.vertexColors;this.opacity=e.opacity;this.transparent=e.transparent;this.blendSrc=e.blendSrc;this.blendDst=e.blendDst;this.blendEquation=e.blendEquation;this.blendSrcAlpha=e.blendSrcAlpha;this.blendDstAlpha=e.blendDstAlpha;this.blendEquationAlpha=e.blendEquationAlpha;this.depthFunc=e.depthFunc;this.depthTest=e.depthTest;this.depthWrite=e.depthWrite;this.colorWrite=e.colorWrite;this.precision=e.precision;this.polygonOffset=e.polygonOffset;this.polygonOffsetFactor=e.polygonOffsetFactor;this.polygonOffsetUnits=e.polygonOffsetUnits;this.dithering=e.dithering;this.alphaTest=e.alphaTest;this.premultipliedAlpha=e.premultipliedAlpha;this.overdraw=e.overdraw;this.visible=e.visible;this.userData=JSON.parse(JSON.stringify(e.userData));this.clipShadows=e.clipShadows;this.clipIntersection=e.clipIntersection;var t=e.clippingPlanes,r=null;if(null!==t){var n=t.length;r=Array(n);for(var i=0;i!==n;++i)r[i]=t[i].clone()}this.clippingPlanes=r;this.shadowSide=e.shadowSide;return this},dispose:function(){this.dispatchEvent({type:"dispose"})}});N.prototype=Object.create(I.prototype);N.prototype.constructor=N;N.prototype.isMeshBasicMaterial=!0;N.prototype.copy=function(e){I.prototype.copy.call(this,e);this.color.copy(e.color);this.map=e.map;this.lightMap=e.lightMap;this.lightMapIntensity=e.lightMapIntensity;this.aoMap=e.aoMap;this.aoMapIntensity=e.aoMapIntensity;this.specularMap=e.specularMap;this.alphaMap=e.alphaMap;this.envMap=e.envMap;this.combine=e.combine;this.reflectivity=e.reflectivity;this.refractionRatio=e.refractionRatio;this.wireframe=e.wireframe;this.wireframeLinewidth=e.wireframeLinewidth;this.wireframeLinecap=e.wireframeLinecap;this.wireframeLinejoin=e.wireframeLinejoin;this.skinning=e.skinning;this.morphTargets=e.morphTargets;return this};D.prototype=Object.create(I.prototype);D.prototype.constructor=D;D.prototype.isShaderMaterial=!0;D.prototype.copy=function(e){I.prototype.copy.call(this,e);this.fragmentShader=e.fragmentShader;this.vertexShader=e.vertexShader;this.uniforms=io.clone(e.uniforms);this.defines=Object.assign({},e.defines);this.wireframe=e.wireframe;this.wireframeLinewidth=e.wireframeLinewidth;this.lights=e.lights;this.clipping=e.clipping;this.skinning=e.skinning;this.morphTargets=e.morphTargets;this.morphNormals=e.morphNormals;this.extensions=e.extensions;return this};D.prototype.toJSON=function(e){e=I.prototype.toJSON.call(this,e);e.uniforms=this.uniforms;e.vertexShader=this.vertexShader;e.fragmentShader=this.fragmentShader;return e};Object.assign(B.prototype,{set:function(e,t){this.origin.copy(e);this.direction.copy(t);return this},clone:function(){return(new this.constructor).copy(this)},copy:function(e){this.origin.copy(e.origin);this.direction.copy(e.direction);return this},at:function(e,t){void 0===t&&(console.warn("THREE.Ray: .at() target is now required"),t=new we);return t.copy(this.direction).multiplyScalar(e).add(this.origin)},lookAt:function(e){this.direction.copy(e).sub(this.origin).normalize();return this},recast:function(){var t=new we;return function(e){this.origin.copy(this.at(e,t));return this}}(),closestPointToPoint:function(e,t){void 0===t&&(console.warn("THREE.Ray: .closestPointToPoint() target is now required"),t=new we);t.subVectors(e,this.origin);e=t.dot(this.direction);return 0>e?t.copy(this.origin):t.copy(this.direction).multiplyScalar(e).add(this.origin)},distanceToPoint:function(e){return Math.sqrt(this.distanceSqToPoint(e))},distanceSqToPoint:function(){var r=new we;return function(e){var t=r.subVectors(e,this.origin).dot(this.direction);if(0>t)return this.origin.distanceToSquared(e);r.copy(this.direction).multiplyScalar(t).add(this.origin);return r.distanceToSquared(e)}}(),distanceSqToSegment:function(){var l=new we,p=new we,f=new we;return function(e,t,r,n){l.copy(e).add(t).multiplyScalar(.5);p.copy(t).sub(e).normalize();f.copy(this.origin).sub(l);var i=.5*e.distanceTo(t),o=-this.direction.dot(p),a=f.dot(this.direction),s=-f.dot(p),u=f.lengthSq(),c=Math.abs(1-o*o);if(0<c){e=o*s-a;t=o*a-s;var h=i*c;0<=e?t>=-h?t<=h?(i=1/c,e*=i,t*=i,o=e*(e+o*t+2*a)+t*(o*e+t+2*s)+u):(t=i,e=Math.max(0,-(o*t+a)),o=-e*e+t*(t+2*s)+u):(t=-i,e=Math.max(0,-(o*t+a)),o=-e*e+t*(t+2*s)+u):t<=-h?(e=Math.max(0,-(-o*i+a)),t=0<e?-i:Math.min(Math.max(-i,-s),i),o=-e*e+t*(t+2*s)+u):t<=h?(e=0,t=Math.min(Math.max(-i,-s),i),o=t*(t+2*s)+u):(e=Math.max(0,-(o*i+a)),t=0<e?i:Math.min(Math.max(-i,-s),i),o=-e*e+t*(t+2*s)+u)}else t=0<o?-i:i,e=Math.max(0,-(o*t+a)),o=-e*e+t*(t+2*s)+u;r&&r.copy(this.direction).multiplyScalar(e).add(this.origin);n&&n.copy(p).multiplyScalar(t).add(l);return o}}(),intersectSphere:function(){var i=new we;return function(e,t){i.subVectors(e.center,this.origin);var r=i.dot(this.direction),n=i.dot(i)-r*r;e=e.radius*e.radius;if(n>e)return null;e=Math.sqrt(e-n);n=r-e;r+=e;return 0>n&&0>r?null:0>n?this.at(r,t):this.at(n,t)}}(),intersectsSphere:function(e){return this.distanceToPoint(e.center)<=e.radius},distanceToPlane:function(e){var t=e.normal.dot(this.direction);if(0===t)return 0===e.distanceToPoint(this.origin)?0:null;e=-(this.origin.dot(e.normal)+e.constant)/t;return 0<=e?e:null},intersectPlane:function(e,t){e=this.distanceToPlane(e);return null===e?null:this.at(e,t)},intersectsPlane:function(e){var t=e.distanceToPoint(this.origin);return 0===t||0>e.normal.dot(this.direction)*t?!0:!1},intersectBox:function(e,t){var r=1/this.direction.x;var n=1/this.direction.y;var i=1/this.direction.z,o=this.origin;if(0<=r){var a=(e.min.x-o.x)*r;r*=e.max.x-o.x}else a=(e.max.x-o.x)*r,r*=e.min.x-o.x;if(0<=n){var s=(e.min.y-o.y)*n;n*=e.max.y-o.y}else s=(e.max.y-o.y)*n,n*=e.min.y-o.y;if(a>n||s>r)return null;if(s>a||a!==a)a=s;if(n<r||r!==r)r=n;0<=i?(s=(e.min.z-o.z)*i,e=(e.max.z-o.z)*i):(s=(e.max.z-o.z)*i,e=(e.min.z-o.z)*i);if(a>e||s>r)return null;if(s>a||a!==a)a=s;if(e<r||r!==r)r=e;return 0>r?null:this.at(0<=a?a:r,t)},intersectsBox:function(){var t=new we;return function(e){return null!==this.intersectBox(e,t)}}(),intersectTriangle:function(){var o=new we,a=new we,s=new we,u=new we;return function(e,t,r,n,i){a.subVectors(t,e);s.subVectors(r,e);u.crossVectors(a,s);t=this.direction.dot(u);if(0<t){if(n)return null;n=1}else if(0>t)n=-1,t=-t;else return null;o.subVectors(this.origin,e);e=n*this.direction.dot(s.crossVectors(o,s));if(0>e)return null;r=n*this.direction.dot(a.cross(o));if(0>r||e+r>t)return null;e=-n*o.dot(u);return 0>e?null:this.at(e/t,i)}}(),applyMatrix4:function(e){this.origin.applyMatrix4(e);this.direction.transformDirection(e);return this},equals:function(e){return e.origin.equals(this.origin)&&e.direction.equals(this.direction)}});Object.assign(F,{getNormal:function(){var i=new we;return function(e,t,r,n){void 0===n&&(console.warn("THREE.Triangle: .getNormal() target is now required"),n=new we);n.subVectors(r,t);i.subVectors(e,t);n.cross(i);e=n.lengthSq();return 0<e?n.multiplyScalar(1/Math.sqrt(e)):n.set(0,0,0)}}(),getBarycoord:function(){var s=new we,u=new we,c=new we;return function(e,t,r,n,i){s.subVectors(n,t);u.subVectors(r,t);c.subVectors(e,t);e=s.dot(s);t=s.dot(u);r=s.dot(c);var o=u.dot(u);n=u.dot(c);var a=e*o-t*t;void 0===i&&(console.warn("THREE.Triangle: .getBarycoord() target is now required"),i=new we);if(0===a)return i.set(-2,-1,-1);a=1/a;o=(o*r-t*n)*a;e=(e*n-t*r)*a;return i.set(1-o-e,e,o)}}(),containsPoint:function(){var i=new we;return function(e,t,r,n){F.getBarycoord(e,t,r,n,i);return 0<=i.x&&0<=i.y&&1>=i.x+i.y}}()});Object.assign(F.prototype,{set:function(e,t,r){this.a.copy(e);this.b.copy(t);this.c.copy(r);return this},setFromPointsAndIndices:function(e,t,r,n){this.a.copy(e[t]);this.b.copy(e[r]);this.c.copy(e[n]);return this},clone:function(){return(new this.constructor).copy(this)},copy:function(e){this.a.copy(e.a);this.b.copy(e.b);this.c.copy(e.c);return this},getArea:function(){var e=new we,t=new we;return function(){e.subVectors(this.c,this.b);t.subVectors(this.a,this.b);return.5*e.cross(t).length()}}(),getMidpoint:function(e){void 0===e&&(console.warn("THREE.Triangle: .getMidpoint() target is now required"),e=new we);return e.addVectors(this.a,this.b).add(this.c).multiplyScalar(1/3)},getNormal:function(e){return F.getNormal(this.a,this.b,this.c,e)},getPlane:function(e){void 0===e&&(console.warn("THREE.Triangle: .getPlane() target is now required"),e=new we);return e.setFromCoplanarPoints(this.a,this.b,this.c)},getBarycoord:function(e,t){return F.getBarycoord(e,this.a,this.b,this.c,t)},containsPoint:function(e){return F.containsPoint(e,this.a,this.b,this.c)},intersectsBox:function(e){return e.intersectsTriangle(this)},closestPointToPoint:function(){var l=new we,p=new we,f=new we,d=new we,v=new we,m=new we;return function(e,t){void 0===t&&(console.warn("THREE.Triangle: .closestPointToPoint() target is now required"),t=new we);var r=this.a,n=this.b,i=this.c;l.subVectors(n,r);p.subVectors(i,r);d.subVectors(e,r);var o=l.dot(d),a=p.dot(d);if(0>=o&&0>=a)return t.copy(r);v.subVectors(e,n);var s=l.dot(v),u=p.dot(v);if(0<=s&&u<=s)return t.copy(n);var c=o*u-s*a;if(0>=c&&0<=o&&0>=s)return n=o/(o-s),t.copy(r).addScaledVector(l,n);m.subVectors(e,i);e=l.dot(m);var h=p.dot(m);if(0<=h&&e<=h)return t.copy(i);o=e*a-o*h;if(0>=o&&0<=a&&0>=h)return c=a/(a-h),t.copy(r).addScaledVector(p,c);a=s*h-e*u;if(0>=a&&0<=u-s&&0<=e-h)return f.subVectors(i,n),c=(u-s)/(u-s+(e-h)),t.copy(n).addScaledVector(f,c);i=1/(a+o+c);n=o*i;c*=i;return t.copy(r).addScaledVector(l,n).addScaledVector(p,c)}}(),equals:function(e){return e.a.equals(this.a)&&e.b.equals(this.b)&&e.c.equals(this.c)}});$.prototype=Object.assign(Object.create(h.prototype),{constructor:$,isMesh:!0,setDrawMode:function(e){this.drawMode=e},copy:function(e){h.prototype.copy.call(this,e);this.drawMode=e.drawMode;void 0!==e.morphTargetInfluences&&(this.morphTargetInfluences=e.morphTargetInfluences.slice());void 0!==e.morphTargetDictionary&&(this.morphTargetDictionary=Object.assign({},e.morphTargetDictionary));return this},updateMorphTargets:function(){var e=this.geometry;if(e.isBufferGeometry){e=e.morphAttributes;var t=Object.keys(e);if(0<t.length){var r=e[t[0]];if(void 0!==r)for(this.morphTargetInfluences=[],this.morphTargetDictionary={},e=0,t=r.length;e<t;e++){var n=r[e].name||String(e);this.morphTargetInfluences.push(0);this.morphTargetDictionary[n]=e}}}else if(r=e.morphTargets,void 0!==r&&0<r.length)for(this.morphTargetInfluences=[],this.morphTargetDictionary={},e=0,t=r.length;e<t;e++)n=r[e].name||String(e),this.morphTargetInfluences.push(0),this.morphTargetDictionary[n]=e},raycast:function(){function x(e,t,r,n,i,o,a){F.getBarycoord(e,t,r,n,s);i.multiplyScalar(s.x);o.multiplyScalar(s.y);a.multiplyScalar(s.z);i.add(o).add(a);return i.clone()}function w(e,t,r,n,i,o,a,s){if(null===(1===t.side?n.intersectTriangle(a,o,i,!0,s):n.intersectTriangle(i,o,a,2!==t.side,s)))return null;u.copy(s);u.applyMatrix4(e.matrixWorld);t=r.ray.origin.distanceTo(u);return t<r.near||t>r.far?null:{distance:t,point:u.clone(),object:e}}function S(e,t,r,n,i,o,a,s,u){T.fromBufferAttribute(i,a);O.fromBufferAttribute(i,s);P.fromBufferAttribute(i,u);if(e=w(e,t,r,n,T,O,P,D))o&&(L.fromBufferAttribute(o,a),I.fromBufferAttribute(o,s),N.fromBufferAttribute(o,u),e.uv=x(D,T,O,P,L,I,N)),o=new k(a,s,u),F.getNormal(T,O,P,o.normal),e.face=o;return e}var M=new xe,E=new B,C=new c,T=new we,O=new we,P=new we,A=new we,j=new we,R=new we,L=new H,I=new H,N=new H,s=new we,D=new we,u=new we;return function(e,t){var r=this.geometry,n=this.material,i=this.matrixWorld;if(void 0!==n&&(null===r.boundingSphere&&r.computeBoundingSphere(),C.copy(r.boundingSphere),C.applyMatrix4(i),!1!==e.ray.intersectsSphere(C)&&(M.getInverse(i),E.copy(e.ray).applyMatrix4(M),null===r.boundingBox||!1!==E.intersectsBox(r.boundingBox))))if(r.isBufferGeometry){var o=r.index,a=r.attributes.position,s=r.attributes.uv,u=r.groups;r=r.drawRange;var c;if(null!==o)if(Array.isArray(n)){var h=0;for(c=u.length;h<c;h++){var l=u[h];var p=n[l.materialIndex];i=Math.max(l.start,r.start);var f=Math.min(l.start+l.count,r.start+r.count);for(l=i;l<f;l+=3){i=o.getX(l);var d=o.getX(l+1);var v=o.getX(l+2);if(i=S(this,p,e,E,a,s,i,d,v))i.faceIndex=Math.floor(l/3),t.push(i)}}}else for(i=Math.max(0,r.start),f=Math.min(o.count,r.start+r.count),h=i,c=f;h<c;h+=3){if(i=o.getX(h),d=o.getX(h+1),v=o.getX(h+2),i=S(this,n,e,E,a,s,i,d,v))i.faceIndex=Math.floor(h/3),t.push(i)}else if(void 0!==a)if(Array.isArray(n))for(h=0,c=u.length;h<c;h++)for(l=u[h],p=n[l.materialIndex],i=Math.max(l.start,r.start),f=Math.min(l.start+l.count,r.start+r.count),l=i;l<f;l+=3){if(i=l,d=l+1,v=l+2,i=S(this,p,e,E,a,s,i,d,v))i.faceIndex=Math.floor(l/3),t.push(i)}else for(i=Math.max(0,r.start),f=Math.min(a.count,r.start+r.count),h=i,c=f;h<c;h+=3)if(i=h,d=h+1,v=h+2,i=S(this,n,e,E,a,s,i,d,v))i.faceIndex=Math.floor(h/3),t.push(i)}else if(r.isGeometry)for(a=Array.isArray(n),s=r.vertices,u=r.faces,i=r.faceVertexUvs[0],0<i.length&&(o=i),l=0,f=u.length;l<f;l++)if(d=u[l],i=a?n[d.materialIndex]:n,void 0!==i){h=s[d.a];c=s[d.b];p=s[d.c];if(!0===i.morphTargets){v=r.morphTargets;var m=this.morphTargetInfluences;T.set(0,0,0);O.set(0,0,0);P.set(0,0,0);for(var g=0,y=v.length;g<y;g++){var _=m[g];if(0!==_){var b=v[g].vertices;T.addScaledVector(A.subVectors(b[d.a],h),_);O.addScaledVector(j.subVectors(b[d.b],c),_);P.addScaledVector(R.subVectors(b[d.c],p),_)}}T.add(h);O.add(c);P.add(p);h=T;c=O;p=P}if(i=w(this,i,e,E,h,c,p,D))o&&o[l]&&(v=o[l],L.copy(v[0]),I.copy(v[1]),N.copy(v[2]),i.uv=x(D,h,c,p,L,I,N)),i.face=d,i.faceIndex=l,t.push(i)}}}(),clone:function(){return new this.constructor(this.geometry,this.material).copy(this)}});U.prototype=Object.create(p.prototype);U.prototype.constructor=U;U.prototype.isCubeTexture=!0;Object.defineProperty(U.prototype,"images",{get:function(){return this.image},set:function(e){this.image=e}});var po=new p,fo=new U,vo=[],mo=[],go=new Float32Array(16),yo=new Float32Array(9),_o=new Float32Array(4);be.prototype.updateCache=function(e){var t=this.cache;e instanceof Float32Array&&t.length!==e.length&&(this.cache=new Float32Array(e.length));q(t,e)};Be.prototype.setValue=function(e,t,r){for(var n=this.seq,i=0,o=n.length;i!==o;++i){var a=n[i];a.setValue(e,t[a.id],r)}};var bo=/([\w\d_]+)(\])?(\[|\.)?/g;Fe.prototype.setValue=function(e,t,r){t=this.map[t];void 0!==t&&t.setValue(e,r,this.renderer)};Fe.prototype.setOptional=function(e,t,r){t=t[r];void 0!==t&&this.setValue(e,r,t)};Fe.upload=function(e,t,r,n){for(var i=0,o=t.length;i!==o;++i){var a=t[i],s=r[a.id];!1!==s.needsUpdate&&a.setValue(e,s.value,n)}};Fe.seqWithValue=function(e,t){for(var r=[],n=0,i=e.length;n!==i;++n){var o=e[n];o.id in t&&r.push(o)}return r};var xo=0,wo=0;ht.prototype=Object.create(I.prototype);ht.prototype.constructor=ht;ht.prototype.isMeshDepthMaterial=!0;ht.prototype.copy=function(e){I.prototype.copy.call(this,e);this.depthPacking=e.depthPacking;this.skinning=e.skinning;this.morphTargets=e.morphTargets;this.map=e.map;this.alphaMap=e.alphaMap;this.displacementMap=e.displacementMap;this.displacementScale=e.displacementScale;this.displacementBias=e.displacementBias;this.wireframe=e.wireframe;this.wireframeLinewidth=e.wireframeLinewidth;return this};lt.prototype=Object.create(I.prototype);lt.prototype.constructor=lt;lt.prototype.isMeshDistanceMaterial=!0;lt.prototype.copy=function(e){I.prototype.copy.call(this,e);this.referencePosition.copy(e.referencePosition);this.nearDistance=e.nearDistance;this.farDistance=e.farDistance;this.skinning=e.skinning;this.morphTargets=e.morphTargets;this.map=e.map;this.alphaMap=e.alphaMap;this.displacementMap=e.displacementMap;this.displacementScale=e.displacementScale;this.displacementBias=e.displacementBias;return this};mt.prototype=Object.assign(Object.create(h.prototype),{constructor:mt,isGroup:!0});gt.prototype=Object.assign(Object.create(u.prototype),{constructor:gt,isPerspectiveCamera:!0,copy:function(e,t){u.prototype.copy.call(this,e,t);this.fov=e.fov;this.zoom=e.zoom;this.near=e.near;this.far=e.far;this.focus=e.focus;this.aspect=e.aspect;this.view=null===e.view?null:Object.assign({},e.view);this.filmGauge=e.filmGauge;this.filmOffset=e.filmOffset;return this},setFocalLength:function(e){e=.5*this.getFilmHeight()/e;this.fov=2*eo.RAD2DEG*Math.atan(e);this.updateProjectionMatrix()},getFocalLength:function(){var e=Math.tan(.5*eo.DEG2RAD*this.fov);return.5*this.getFilmHeight()/e},getEffectiveFOV:function(){return 2*eo.RAD2DEG*Math.atan(Math.tan(.5*eo.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(e,t,r,n,i,o){this.aspect=e/t;null===this.view&&(this.view={enabled:!0,fullWidth:1,fullHeight:1,offsetX:0,offsetY:0,width:1,height:1});this.view.enabled=!0;this.view.fullWidth=e;this.view.fullHeight=t;this.view.offsetX=r;this.view.offsetY=n;this.view.width=i;this.view.height=o;this.updateProjectionMatrix()},clearViewOffset:function(){null!==this.view&&(this.view.enabled=!1);this.updateProjectionMatrix()},updateProjectionMatrix:function(){var e=this.near,t=e*Math.tan(.5*eo.DEG2RAD*this.fov)/this.zoom,r=2*t,n=this.aspect*r,i=-.5*n,o=this.view;if(null!==this.view&&this.view.enabled){var a=o.fullWidth,s=o.fullHeight;i+=o.offsetX*n/a;t-=o.offsetY*r/s;n*=o.width/a;r*=o.height/s}o=this.filmOffset;0!==o&&(i+=e*o/this.getFilmWidth());this.projectionMatrix.makePerspective(i,i+n,t,t-r,e,this.far)},toJSON:function(e){e=h.prototype.toJSON.call(this,e);e.object.fov=this.fov;e.object.zoom=this.zoom;e.object.near=this.near;e.object.far=this.far;e.object.focus=this.focus;e.object.aspect=this.aspect;null!==this.view&&(e.object.view=Object.assign({},this.view));e.object.filmGauge=this.filmGauge;e.object.filmOffset=this.filmOffset;return e}});yt.prototype=Object.assign(Object.create(gt.prototype),{constructor:yt,isArrayCamera:!0});wt.prototype.isFogExp2=!0;wt.prototype.clone=function(){return new wt(this.color,this.density)};wt.prototype.toJSON=function(){return{type:"FogExp2",color:this.color.getHex(),density:this.density}};St.prototype.isFog=!0;St.prototype.clone=function(){return new St(this.color,this.near,this.far)};St.prototype.toJSON=function(){return{type:"Fog",color:this.color.getHex(),near:this.near,far:this.far}};Mt.prototype=Object.assign(Object.create(h.prototype),{constructor:Mt,copy:function(e,t){h.prototype.copy.call(this,e,t);null!==e.background&&(this.background=e.background.clone());null!==e.fog&&(this.fog=e.fog.clone());null!==e.overrideMaterial&&(this.overrideMaterial=e.overrideMaterial.clone());this.autoUpdate=e.autoUpdate;this.matrixAutoUpdate=e.matrixAutoUpdate;return this},toJSON:function(e){var t=h.prototype.toJSON.call(this,e);null!==this.background&&(t.object.background=this.background.toJSON(e));null!==this.fog&&(t.object.fog=this.fog.toJSON());return t}});Object.defineProperty(Et.prototype,"needsUpdate",{set:function(e){!0===e&&this.version++}});Object.assign(Et.prototype,{isInterleavedBuffer:!0,onUploadCallback:function(){},setArray:function(e){if(Array.isArray(e))throw new TypeError("THREE.BufferAttribute: array should be a Typed Array.");this.count=void 0!==e?e.length/this.stride:0;this.array=e;return this},setDynamic:function(e){this.dynamic=e;return this},copy:function(e){this.array=new e.array.constructor(e.array);this.count=e.count;this.stride=e.stride;this.dynamic=e.dynamic;return this},copyAt:function(e,t,r){e*=this.stride;r*=t.stride;for(var n=0,i=this.stride;n<i;n++)this.array[e+n]=t.array[r+n];return this},set:function(e,t){void 0===t&&(t=0);this.array.set(e,t);return this},clone:function(){return(new this.constructor).copy(this)},onUpload:function(e){this.onUploadCallback=e;return this}});Object.defineProperties(Ct.prototype,{count:{get:function(){return this.data.count}},array:{get:function(){return this.data.array}}});Object.assign(Ct.prototype,{isInterleavedBufferAttribute:!0,setX:function(e,t){this.data.array[e*this.data.stride+this.offset]=t;return this},setY:function(e,t){this.data.array[e*this.data.stride+this.offset+1]=t;return this},setZ:function(e,t){this.data.array[e*this.data.stride+this.offset+2]=t;return this},setW:function(e,t){this.data.array[e*this.data.stride+this.offset+3]=t;return this},getX:function(e){return this.data.array[e*this.data.stride+this.offset]},getY:function(e){return this.data.array[e*this.data.stride+this.offset+1]},getZ:function(e){return this.data.array[e*this.data.stride+this.offset+2]},getW:function(e){return this.data.array[e*this.data.stride+this.offset+3]},setXY:function(e,t,r){e=e*this.data.stride+this.offset;this.data.array[e+0]=t;this.data.array[e+1]=r;return this},setXYZ:function(e,t,r,n){e=e*this.data.stride+this.offset;this.data.array[e+0]=t;this.data.array[e+1]=r;this.data.array[e+2]=n;return this},setXYZW:function(e,t,r,n,i){e=e*this.data.stride+this.offset;this.data.array[e+0]=t;this.data.array[e+1]=r;this.data.array[e+2]=n;this.data.array[e+3]=i;return this}});Tt.prototype=Object.create(I.prototype);Tt.prototype.constructor=Tt;Tt.prototype.isSpriteMaterial=!0;Tt.prototype.copy=function(e){I.prototype.copy.call(this,e);this.color.copy(e.color);this.map=e.map;this.rotation=e.rotation;return this};var So;Ot.prototype=Object.assign(Object.create(h.prototype),{constructor:Ot,isSprite:!0,raycast:function(){function a(e,t,r,n,i,o){h.subVectors(e,r).addScalar(.5).multiply(n);void 0!==i?(l.x=o*h.x-i*h.y,l.y=i*h.x+o*h.y):l.copy(h);e.copy(t);e.x+=l.x;e.y+=l.y;e.applyMatrix4(p)}var s=new we,u=new we,c=new we,h=new H,l=new H,p=new xe,f=new we,d=new we,v=new we;return function(e,t){u.setFromMatrixScale(this.matrixWorld);p.getInverse(this.modelViewMatrix).premultiply(this.matrixWorld);c.setFromMatrixPosition(this.modelViewMatrix);var r=this.material.rotation;if(0!==r){var n=Math.cos(r);var i=Math.sin(r)}r=this.center;a(f.set(-.5,-.5,0),c,r,u,i,n);a(d.set(.5,-.5,0),c,r,u,i,n);a(v.set(.5,.5,0),c,r,u,i,n);var o=e.ray.intersectTriangle(f,d,v,!1,s);if(null===o&&(a(d.set(-.5,.5,0),c,r,u,i,n),o=e.ray.intersectTriangle(f,v,d,!1,s),null===o))return;i=e.ray.origin.distanceTo(s);i<e.near||i>e.far||t.push({distance:i,point:s.clone(),face:null,object:this})}}(),clone:function(){return new this.constructor(this.material).copy(this)},copy:function(e){h.prototype.copy.call(this,e);void 0!==e.center&&this.center.copy(e.center);return this}});Pt.prototype=Object.assign(Object.create(h.prototype),{constructor:Pt,copy:function(e){h.prototype.copy.call(this,e,!1);e=e.levels;for(var t=0,r=e.length;t<r;t++){var n=e[t];this.addLevel(n.object.clone(),n.distance)}return this},addLevel:function(e,t){void 0===t&&(t=0);t=Math.abs(t);for(var r=this.levels,n=0;n<r.length&&!(t<r[n].distance);n++);r.splice(n,0,{distance:t,object:e});this.add(e)},getObjectForDistance:function(e){for(var t=this.levels,r=1,n=t.length;r<n&&!(e<t[r].distance);r++);return t[r-1].object},raycast:function(){var n=new we;return function(e,t){n.setFromMatrixPosition(this.matrixWorld);var r=e.ray.origin.distanceTo(n);this.getObjectForDistance(r).raycast(e,t)}}(),update:function(){var i=new we,o=new we;return function(e){var t=this.levels;if(1<t.length){i.setFromMatrixPosition(e.matrixWorld);o.setFromMatrixPosition(this.matrixWorld);e=i.distanceTo(o);t[0].object.visible=!0;for(var r=1,n=t.length;r<n;r++)if(e>=t[r].distance)t[r-1].object.visible=!1,t[r].object.visible=!0;else break;for(;r<n;r++)t[r].object.visible=!1}}}(),toJSON:function(e){e=h.prototype.toJSON.call(this,e);e.object.levels=[];for(var t=this.levels,r=0,n=t.length;r<n;r++){var i=t[r];e.object.levels.push({object:i.object.uuid,distance:i.distance})}return e}});Object.assign(At.prototype,{calculateInverses:function(){this.boneInverses=[];for(var e=0,t=this.bones.length;e<t;e++){var r=new xe;this.bones[e]&&r.getInverse(this.bones[e].matrixWorld);this.boneInverses.push(r)}},pose:function(){var e,t;var r=0;for(t=this.bones.length;r<t;r++)(e=this.bones[r])&&e.matrixWorld.getInverse(this.boneInverses[r]);r=0;for(t=this.bones.length;r<t;r++)if(e=this.bones[r])e.parent&&e.parent.isBone?(e.matrix.getInverse(e.parent.matrixWorld),e.matrix.multiply(e.matrixWorld)):e.matrix.copy(e.matrixWorld),e.matrix.decompose(e.position,e.quaternion,e.scale)},update:function(){var a=new xe,s=new xe;return function(){for(var e=this.bones,t=this.boneInverses,r=this.boneMatrices,n=this.boneTexture,i=0,o=e.length;i<o;i++)a.multiplyMatrices(e[i]?e[i].matrixWorld:s,t[i]),a.toArray(r,16*i);void 0!==n&&(n.needsUpdate=!0)}}(),clone:function(){return new At(this.bones,this.boneInverses)},getBoneByName:function(e){for(var t=0,r=this.bones.length;t<r;t++){var n=this.bones[t];if(n.name===e)return n}}});jt.prototype=Object.assign(Object.create(h.prototype),{constructor:jt,isBone:!0});Rt.prototype=Object.assign(Object.create($.prototype),{constructor:Rt,isSkinnedMesh:!0,initBones:function(){var e=[],t;if(this.geometry&&void 0!==this.geometry.bones){var r=0;for(t=this.geometry.bones.length;r<t;r++){var n=this.geometry.bones[r];var i=new jt;e.push(i);i.name=n.name;i.position.fromArray(n.pos);i.quaternion.fromArray(n.rotq);void 0!==n.scl&&i.scale.fromArray(n.scl)}r=0;for(t=this.geometry.bones.length;r<t;r++)n=this.geometry.bones[r],-1!==n.parent&&null!==n.parent&&void 0!==e[n.parent]?e[n.parent].add(e[r]):this.add(e[r])}this.updateMatrixWorld(!0);return e},bind:function(e,t){this.skeleton=e;void 0===t&&(this.updateMatrixWorld(!0),this.skeleton.calculateInverses(),t=this.matrixWorld);this.bindMatrix.copy(t);this.bindMatrixInverse.getInverse(t)},pose:function(){this.skeleton.pose()},normalizeSkinWeights:function(){var e;if(this.geometry&&this.geometry.isGeometry)for(e=0;e<this.geometry.skinWeights.length;e++){var t=this.geometry.skinWeights[e];var r=1/t.manhattanLength();Infinity!==r?t.multiplyScalar(r):t.set(1,0,0,0)}else if(this.geometry&&this.geometry.isBufferGeometry){t=new Se;var n=this.geometry.attributes.skinWeight;for(e=0;e<n.count;e++)t.x=n.getX(e),t.y=n.getY(e),t.z=n.getZ(e),t.w=n.getW(e),r=1/t.manhattanLength(),Infinity!==r?t.multiplyScalar(r):t.set(1,0,0,0),n.setXYZW(e,t.x,t.y,t.z,t.w)}},updateMatrixWorld:function(e){$.prototype.updateMatrixWorld.call(this,e);"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).copy(this)}});Lt.prototype=Object.create(I.prototype);Lt.prototype.constructor=Lt;Lt.prototype.isLineBasicMaterial=!0;Lt.prototype.copy=function(e){I.prototype.copy.call(this,e);this.color.copy(e.color);this.linewidth=e.linewidth;this.linecap=e.linecap;this.linejoin=e.linejoin;return this};It.prototype=Object.assign(Object.create(h.prototype),{constructor:It,isLine:!0,computeLineDistances:function(){var o=new we,a=new we;return function(){var e=this.geometry;if(e.isBufferGeometry)if(null===e.index){for(var t=e.attributes.position,r=[0],n=1,i=t.count;n<i;n++)o.fromBufferAttribute(t,n-1),a.fromBufferAttribute(t,n),r[n]=r[n-1],r[n]+=o.distanceTo(a);e.addAttribute("lineDistance",new P(r,1))}else console.warn("THREE.Line.computeLineDistances(): Computation only possible with non-indexed BufferGeometry.");else if(e.isGeometry)for(t=e.vertices,r=e.lineDistances,r[0]=0,n=1,i=t.length;n<i;n++)r[n]=r[n-1],r[n]+=t[n-1].distanceTo(t[n]);return this}}(),raycast:function(){var f=new xe,d=new B,v=new c;return function(e,t){var r=e.linePrecision;r*=r;var n=this.geometry,i=this.matrixWorld;null===n.boundingSphere&&n.computeBoundingSphere();v.copy(n.boundingSphere);v.applyMatrix4(i);if(!1!==e.ray.intersectsSphere(v)){f.getInverse(i);d.copy(e.ray).applyMatrix4(f);var o=new we,a=new we;i=new we;var s=new we,u=this&&this.isLineSegments?2:1;if(n.isBufferGeometry){var c=n.index,h=n.attributes.position.array;if(null!==c){c=c.array;n=0;for(var l=c.length-1;n<l;n+=u){var p=c[n+1];o.fromArray(h,3*c[n]);a.fromArray(h,3*p);p=d.distanceSqToSegment(o,a,s,i);p>r||(s.applyMatrix4(this.matrixWorld),p=e.ray.origin.distanceTo(s),p<e.near||p>e.far||t.push({distance:p,point:i.clone().applyMatrix4(this.matrixWorld),index:n,face:null,faceIndex:null,object:this}))}}else for(n=0,l=h.length/3-1;n<l;n+=u)o.fromArray(h,3*n),a.fromArray(h,3*n+3),p=d.distanceSqToSegment(o,a,s,i),p>r||(s.applyMatrix4(this.matrixWorld),p=e.ray.origin.distanceTo(s),p<e.near||p>e.far||t.push({distance:p,point:i.clone().applyMatrix4(this.matrixWorld),index:n,face:null,faceIndex:null,object:this}))}else if(n.isGeometry)for(o=n.vertices,a=o.length,n=0;n<a-1;n+=u)p=d.distanceSqToSegment(o[n],o[n+1],s,i),p>r||(s.applyMatrix4(this.matrixWorld),p=e.ray.origin.distanceTo(s),p<e.near||p>e.far||t.push({distance:p,point:i.clone().applyMatrix4(this.matrixWorld),index:n,face:null,faceIndex:null,object:this}))}}}(),clone:function(){return new this.constructor(this.geometry,this.material).copy(this)}});Nt.prototype=Object.assign(Object.create(It.prototype),{constructor:Nt,isLineSegments:!0,computeLineDistances:function(){var o=new we,a=new we;return function(){var e=this.geometry;if(e.isBufferGeometry)if(null===e.index){for(var t=e.attributes.position,r=[],n=0,i=t.count;n<i;n+=2)o.fromBufferAttribute(t,n),a.fromBufferAttribute(t,n+1),r[n]=0===n?0:r[n-1],r[n+1]=r[n]+o.distanceTo(a);e.addAttribute("lineDistance",new P(r,1))}else console.warn("THREE.LineSegments.computeLineDistances(): Computation only possible with non-indexed BufferGeometry.");else if(e.isGeometry)for(t=e.vertices,r=e.lineDistances,n=0,i=t.length;n<i;n+=2)o.copy(t[n]),a.copy(t[n+1]),r[n]=0===n?0:r[n-1],r[n+1]=r[n]+o.distanceTo(a);return this}}()});Dt.prototype=Object.assign(Object.create(It.prototype),{constructor:Dt,isLineLoop:!0});kt.prototype=Object.create(I.prototype);kt.prototype.constructor=kt;kt.prototype.isPointsMaterial=!0;kt.prototype.copy=function(e){I.prototype.copy.call(this,e);this.color.copy(e.color);this.map=e.map;this.size=e.size;this.sizeAttenuation=e.sizeAttenuation;this.morphTargets=e.morphTargets;return this};Bt.prototype=Object.assign(Object.create(h.prototype),{constructor:Bt,isPoints:!0,raycast:function(){var f=new xe,d=new B,v=new c;return function(n,i){function e(e,t){var r=d.distanceSqToPoint(e);r<s&&(d.closestPointToPoint(e,u),u.applyMatrix4(a),e=n.ray.origin.distanceTo(u),e<n.near||e>n.far||i.push({distance:e,distanceToRay:Math.sqrt(r),point:u.clone(),index:t,face:null,object:o}))}var o=this,t=this.geometry,a=this.matrixWorld,r=n.params.Points.threshold;null===t.boundingSphere&&t.computeBoundingSphere();v.copy(t.boundingSphere);v.applyMatrix4(a);v.radius+=r;if(!1!==n.ray.intersectsSphere(v)){f.getInverse(a);d.copy(n.ray).applyMatrix4(f);r/=(this.scale.x+this.scale.y+this.scale.z)/3;var s=r*r;r=new we;var u=new we;if(t.isBufferGeometry){var c=t.index;t=t.attributes.position.array;if(null!==c){var h=c.array;c=0;for(var l=h.length;c<l;c++){var p=h[c];r.fromArray(t,3*p);e(r,p)}}else for(c=0,h=t.length/3;c<h;c++)r.fromArray(t,3*c),e(r,c)}else for(r=t.vertices,c=0,h=r.length;c<h;c++)e(r[c],c)}}}(),clone:function(){return new this.constructor(this.geometry,this.material).copy(this)}});Ft.prototype=Object.assign(Object.create(p.prototype),{constructor:Ft,isVideoTexture:!0,update:function(){var e=this.image;e.readyState>=e.HAVE_CURRENT_DATA&&(this.needsUpdate=!0)}});$t.prototype=Object.create(p.prototype);$t.prototype.constructor=$t;$t.prototype.isCompressedTexture=!0;zt.prototype=Object.create(p.prototype);zt.prototype.constructor=zt;zt.prototype.isCanvasTexture=!0;Ut.prototype=Object.create(p.prototype);Ut.prototype.constructor=Ut;Ut.prototype.isDepthTexture=!0;Gt.prototype=Object.create(A.prototype);Gt.prototype.constructor=Gt;Vt.prototype=Object.create(S.prototype);Vt.prototype.constructor=Vt;Ht.prototype=Object.create(A.prototype);Ht.prototype.constructor=Ht;qt.prototype=Object.create(S.prototype);qt.prototype.constructor=qt;Wt.prototype=Object.create(A.prototype);Wt.prototype.constructor=Wt;Xt.prototype=Object.create(S.prototype);Xt.prototype.constructor=Xt;Yt.prototype=Object.create(Wt.prototype);Yt.prototype.constructor=Yt;Kt.prototype=Object.create(S.prototype);Kt.prototype.constructor=Kt;Zt.prototype=Object.create(Wt.prototype);Zt.prototype.constructor=Zt;Jt.prototype=Object.create(S.prototype);Jt.prototype.constructor=Jt;Qt.prototype=Object.create(Wt.prototype);Qt.prototype.constructor=Qt;er.prototype=Object.create(S.prototype);er.prototype.constructor=er;tr.prototype=Object.create(Wt.prototype);tr.prototype.constructor=tr;rr.prototype=Object.create(S.prototype);rr.prototype.constructor=rr;nr.prototype=Object.create(A.prototype);nr.prototype.constructor=nr;ir.prototype=Object.create(S.prototype);ir.prototype.constructor=ir;or.prototype=Object.create(A.prototype);or.prototype.constructor=or;ar.prototype=Object.create(S.prototype);ar.prototype.constructor=ar;sr.prototype=Object.create(A.prototype);sr.prototype.constructor=sr;var Mo={triangulate:function(e,t,r){r=r||2;var n=t&&t.length,i=n?t[0]*r:e.length,o=ur(e,0,i,r,!0),a=[];if(!o)return a;var s;if(n){var u=r;n=[];var c;var h=0;for(c=t.length;h<c;h++){var l=t[h]*u;var p=h<c-1?t[h+1]*u:e.length;l=ur(e,l,p,u,!1);l===l.next&&(l.steiner=!0);n.push(dr(l))}n.sort(lr);for(h=0;h<n.length;h++){t=n[h];u=o;if(u=pr(t,u))t=br(u,t),cr(t,t.next);o=cr(o,o.next)}}if(e.length>80*r){var f=s=e[0];var d=n=e[1];for(u=r;u<i;u+=r)h=e[u],t=e[u+1],h<f&&(f=h),t<d&&(d=t),h>s&&(s=h),t>n&&(n=t);s=Math.max(s-f,n-d);s=0!==s?1/s:0}hr(o,a,r,f,d,s);return a}},Eo={area:function(e){for(var t=e.length,r=0,n=t-1,i=0;i<t;n=i++)r+=e[n].x*e[i].y-e[i].x*e[n].y;return.5*r},isClockWise:function(e){return 0>Eo.area(e)},triangulateShape:function(e,t){var r=[],n=[],i=[];Mr(e);Er(r,e);var o=e.length;t.forEach(Mr);for(e=0;e<t.length;e++)n.push(o),o+=t[e].length,Er(r,t[e]);t=Mo.triangulate(r,n);for(e=0;e<t.length;e+=3)i.push(t.slice(e,e+3));return i}};Cr.prototype=Object.create(S.prototype);Cr.prototype.constructor=Cr;Cr.prototype.toJSON=function(){var e=S.prototype.toJSON.call(this);return Or(this.parameters.shapes,this.parameters.options,e)};Tr.prototype=Object.create(A.prototype);Tr.prototype.constructor=Tr;Tr.prototype.toJSON=function(){var e=A.prototype.toJSON.call(this);return Or(this.parameters.shapes,this.parameters.options,e)};var Co={generateTopUV:function(e,t,r,n,i){e=t[3*n];n=t[3*n+1];var o=t[3*i];i=t[3*i+1];return[new H(t[3*r],t[3*r+1]),new H(e,n),new H(o,i)]},generateSideWallUV:function(e,t,r,n,i,o){e=t[3*r];var a=t[3*r+1];r=t[3*r+2];var s=t[3*n],u=t[3*n+1];n=t[3*n+2];var c=t[3*i],h=t[3*i+1];i=t[3*i+2];var l=t[3*o],p=t[3*o+1];t=t[3*o+2];return.01>Math.abs(a-u)?[new H(e,1-r),new H(s,1-n),new H(c,1-i),new H(l,1-t)]:[new H(a,1-r),new H(u,1-n),new H(h,1-i),new H(p,1-t)]}};Pr.prototype=Object.create(S.prototype);Pr.prototype.constructor=Pr;Ar.prototype=Object.create(Tr.prototype);Ar.prototype.constructor=Ar;jr.prototype=Object.create(S.prototype);jr.prototype.constructor=jr;Rr.prototype=Object.create(A.prototype);Rr.prototype.constructor=Rr;Lr.prototype=Object.create(S.prototype);Lr.prototype.constructor=Lr;Ir.prototype=Object.create(A.prototype);Ir.prototype.constructor=Ir;Nr.prototype=Object.create(S.prototype);Nr.prototype.constructor=Nr;Dr.prototype=Object.create(A.prototype);Dr.prototype.constructor=Dr;kr.prototype=Object.create(S.prototype);kr.prototype.constructor=kr;kr.prototype.toJSON=function(){var e=S.prototype.toJSON.call(this);return Fr(this.parameters.shapes,e)};Br.prototype=Object.create(A.prototype);Br.prototype.constructor=Br;Br.prototype.toJSON=function(){var e=A.prototype.toJSON.call(this);return Fr(this.parameters.shapes,e)};$r.prototype=Object.create(A.prototype);$r.prototype.constructor=$r;zr.prototype=Object.create(S.prototype);zr.prototype.constructor=zr;Ur.prototype=Object.create(A.prototype);Ur.prototype.constructor=Ur;Gr.prototype=Object.create(zr.prototype);Gr.prototype.constructor=Gr;Vr.prototype=Object.create(Ur.prototype);Vr.prototype.constructor=Vr;Hr.prototype=Object.create(S.prototype);Hr.prototype.constructor=Hr;qr.prototype=Object.create(A.prototype);qr.prototype.constructor=qr;var To=Object.freeze({WireframeGeometry:Gt,ParametricGeometry:Vt,ParametricBufferGeometry:Ht,TetrahedronGeometry:Xt,TetrahedronBufferGeometry:Yt,OctahedronGeometry:Kt,OctahedronBufferGeometry:Zt,IcosahedronGeometry:Jt,IcosahedronBufferGeometry:Qt,DodecahedronGeometry:er,DodecahedronBufferGeometry:tr,PolyhedronGeometry:qt,PolyhedronBufferGeometry:Wt,TubeGeometry:rr,TubeBufferGeometry:nr,TorusKnotGeometry:ir,TorusKnotBufferGeometry:or,TorusGeometry:ar,TorusBufferGeometry:sr,TextGeometry:Pr,TextBufferGeometry:Ar,SphereGeometry:jr,SphereBufferGeometry:Rr,RingGeometry:Lr,RingBufferGeometry:Ir,PlaneGeometry:R,PlaneBufferGeometry:L,LatheGeometry:Nr,LatheBufferGeometry:Dr,ShapeGeometry:kr,ShapeBufferGeometry:Br,ExtrudeGeometry:Cr,ExtrudeBufferGeometry:Tr,EdgesGeometry:$r,ConeGeometry:Gr,ConeBufferGeometry:Vr,CylinderGeometry:zr,CylinderBufferGeometry:Ur,CircleGeometry:Hr,CircleBufferGeometry:qr,BoxGeometry:O,BoxBufferGeometry:j});Wr.prototype=Object.create(I.prototype);Wr.prototype.constructor=Wr;Wr.prototype.isShadowMaterial=!0;Wr.prototype.copy=function(e){I.prototype.copy.call(this,e);this.color.copy(e.color);return this};Xr.prototype=Object.create(D.prototype);Xr.prototype.constructor=Xr;Xr.prototype.isRawShaderMaterial=!0;Yr.prototype=Object.create(I.prototype);Yr.prototype.constructor=Yr;Yr.prototype.isMeshStandardMaterial=!0;Yr.prototype.copy=function(e){I.prototype.copy.call(this,e);this.defines={STANDARD:""};this.color.copy(e.color);this.roughness=e.roughness;this.metalness=e.metalness;this.map=e.map;this.lightMap=e.lightMap;this.lightMapIntensity=e.lightMapIntensity;this.aoMap=e.aoMap;this.aoMapIntensity=e.aoMapIntensity;this.emissive.copy(e.emissive);this.emissiveMap=e.emissiveMap;this.emissiveIntensity=e.emissiveIntensity;this.bumpMap=e.bumpMap;this.bumpScale=e.bumpScale;this.normalMap=e.normalMap;this.normalMapType=e.normalMapType;this.normalScale.copy(e.normalScale);this.displacementMap=e.displacementMap;this.displacementScale=e.displacementScale;this.displacementBias=e.displacementBias;this.roughnessMap=e.roughnessMap;this.metalnessMap=e.metalnessMap;this.alphaMap=e.alphaMap;this.envMap=e.envMap;this.envMapIntensity=e.envMapIntensity;this.refractionRatio=e.refractionRatio;this.wireframe=e.wireframe;this.wireframeLinewidth=e.wireframeLinewidth;this.wireframeLinecap=e.wireframeLinecap;this.wireframeLinejoin=e.wireframeLinejoin;this.skinning=e.skinning;this.morphTargets=e.morphTargets;this.morphNormals=e.morphNormals;return this};Kr.prototype=Object.create(Yr.prototype);Kr.prototype.constructor=Kr;Kr.prototype.isMeshPhysicalMaterial=!0;Kr.prototype.copy=function(e){Yr.prototype.copy.call(this,e);this.defines={PHYSICAL:""};this.reflectivity=e.reflectivity;this.clearCoat=e.clearCoat;this.clearCoatRoughness=e.clearCoatRoughness;return this};Zr.prototype=Object.create(I.prototype);Zr.prototype.constructor=Zr;Zr.prototype.isMeshPhongMaterial=!0;Zr.prototype.copy=function(e){I.prototype.copy.call(this,e);this.color.copy(e.color);this.specular.copy(e.specular);this.shininess=e.shininess;this.map=e.map;this.lightMap=e.lightMap;this.lightMapIntensity=e.lightMapIntensity;this.aoMap=e.aoMap;this.aoMapIntensity=e.aoMapIntensity;this.emissive.copy(e.emissive);this.emissiveMap=e.emissiveMap;this.emissiveIntensity=e.emissiveIntensity;this.bumpMap=e.bumpMap;this.bumpScale=e.bumpScale;this.normalMap=e.normalMap;this.normalMapType=e.normalMapType;this.normalScale.copy(e.normalScale);this.displacementMap=e.displacementMap;this.displacementScale=e.displacementScale;this.displacementBias=e.displacementBias;this.specularMap=e.specularMap;this.alphaMap=e.alphaMap;this.envMap=e.envMap;this.combine=e.combine;this.reflectivity=e.reflectivity;this.refractionRatio=e.refractionRatio;this.wireframe=e.wireframe;this.wireframeLinewidth=e.wireframeLinewidth;this.wireframeLinecap=e.wireframeLinecap;this.wireframeLinejoin=e.wireframeLinejoin;this.skinning=e.skinning;this.morphTargets=e.morphTargets;this.morphNormals=e.morphNormals;return this};Jr.prototype=Object.create(Zr.prototype);Jr.prototype.constructor=Jr;Jr.prototype.isMeshToonMaterial=!0;Jr.prototype.copy=function(e){Zr.prototype.copy.call(this,e);this.gradientMap=e.gradientMap;return this};Qr.prototype=Object.create(I.prototype);Qr.prototype.constructor=Qr;Qr.prototype.isMeshNormalMaterial=!0;Qr.prototype.copy=function(e){I.prototype.copy.call(this,e);this.bumpMap=e.bumpMap;this.bumpScale=e.bumpScale;this.normalMap=e.normalMap;this.normalMapType=e.normalMapType;this.normalScale.copy(e.normalScale);this.displacementMap=e.displacementMap;this.displacementScale=e.displacementScale;this.displacementBias=e.displacementBias;this.wireframe=e.wireframe;this.wireframeLinewidth=e.wireframeLinewidth;this.skinning=e.skinning;this.morphTargets=e.morphTargets;this.morphNormals=e.morphNormals;return this};en.prototype=Object.create(I.prototype);en.prototype.constructor=en;en.prototype.isMeshLambertMaterial=!0;en.prototype.copy=function(e){I.prototype.copy.call(this,e);this.color.copy(e.color);this.map=e.map;this.lightMap=e.lightMap;this.lightMapIntensity=e.lightMapIntensity;this.aoMap=e.aoMap;this.aoMapIntensity=e.aoMapIntensity;this.emissive.copy(e.emissive);this.emissiveMap=e.emissiveMap;this.emissiveIntensity=e.emissiveIntensity;this.specularMap=e.specularMap;this.alphaMap=e.alphaMap;this.envMap=e.envMap;this.combine=e.combine;this.reflectivity=e.reflectivity;this.refractionRatio=e.refractionRatio;this.wireframe=e.wireframe;this.wireframeLinewidth=e.wireframeLinewidth;this.wireframeLinecap=e.wireframeLinecap;this.wireframeLinejoin=e.wireframeLinejoin;this.skinning=e.skinning;this.morphTargets=e.morphTargets;this.morphNormals=e.morphNormals;return this};tn.prototype=Object.create(Lt.prototype);tn.prototype.constructor=tn;tn.prototype.isLineDashedMaterial=!0;tn.prototype.copy=function(e){Lt.prototype.copy.call(this,e);this.scale=e.scale;this.dashSize=e.dashSize;this.gapSize=e.gapSize;return this};var Oo=Object.freeze({ShadowMaterial:Wr,SpriteMaterial:Tt,RawShaderMaterial:Xr,ShaderMaterial:D,PointsMaterial:kt,MeshPhysicalMaterial:Kr,MeshStandardMaterial:Yr,MeshPhongMaterial:Zr,MeshToonMaterial:Jr,MeshNormalMaterial:Qr,MeshLambertMaterial:en,MeshDepthMaterial:ht,MeshDistanceMaterial:lt,MeshBasicMaterial:N,LineDashedMaterial:tn,LineBasicMaterial:Lt,Material:I}),Po={enabled:!1,files:{},add:function(e,t){!1!==this.enabled&&(this.files[e]=t)},get:function(e){if(!1!==this.enabled)return this.files[e]},remove:function(e){delete this.files[e]},clear:function(){this.files={}}},Ao=new rn,jo={};Object.assign(nn.prototype,{load:function(a,e,t,r){void 0===a&&(a="");void 0!==this.path&&(a=this.path+a);a=this.manager.resolveURL(a);var s=this,n=Po.get(a);if(void 0!==n)return s.manager.itemStart(a),setTimeout(function(){e&&e(n);s.manager.itemEnd(a)},0),n;if(void 0!==jo[a])jo[a].push({onLoad:e,onProgress:t,onError:r});else{var i=a.match(/^data:(.*?)(;base64)?,(.*)$/);if(i){t=i[1];var o=!!i[2];i=i[3];i=window.decodeURIComponent(i);o&&(i=window.atob(i));try{var u=(this.responseType||"").toLowerCase();switch(u){case"arraybuffer":case"blob":var c=new Uint8Array(i.length);for(o=0;o<i.length;o++)c[o]=i.charCodeAt(o);var h="blob"===u?new Blob([c.buffer],{type:t}):c.buffer;break;case"document":h=(new DOMParser).parseFromString(i,t);break;case"json":h=JSON.parse(i);break;default:h=i}window.setTimeout(function(){e&&e(h);s.manager.itemEnd(a)},0)}catch(e){window.setTimeout(function(){r&&r(e);s.manager.itemEnd(a);s.manager.itemError(a)},0)}}else{jo[a]=[];jo[a].push({onLoad:e,onProgress:t,onError:r});var l=new XMLHttpRequest;l.open("GET",a,!0);l.addEventListener("load",function(e){var t=this.response;Po.add(a,t);var r=jo[a];delete jo[a];if(200===this.status||0===this.status){0===this.status&&console.warn("THREE.FileLoader: HTTP Status 0 received.");for(var n=0,i=r.length;n<i;n++){var o=r[n];if(o.onLoad)o.onLoad(t)}s.manager.itemEnd(a)}else{n=0;for(i=r.length;n<i;n++)if(o=r[n],o.onError)o.onError(e);s.manager.itemEnd(a);s.manager.itemError(a)}},!1);l.addEventListener("progress",function(e){for(var t=jo[a],r=0,n=t.length;r<n;r++){var i=t[r];if(i.onProgress)i.onProgress(e)}},!1);l.addEventListener("error",function(e){var t=jo[a];delete jo[a];for(var r=0,n=t.length;r<n;r++){var i=t[r];if(i.onError)i.onError(e)}s.manager.itemEnd(a);s.manager.itemError(a)},!1);void 0!==this.responseType&&(l.responseType=this.responseType);void 0!==this.withCredentials&&(l.withCredentials=this.withCredentials);l.overrideMimeType&&l.overrideMimeType(void 0!==this.mimeType?this.mimeType:"text/plain");for(o in this.requestHeader)l.setRequestHeader(o,this.requestHeader[o]);l.send(null)}s.manager.itemStart(a);return l}},setPath:function(e){this.path=e;return this},setResponseType:function(e){this.responseType=e;return this},setWithCredentials:function(e){this.withCredentials=e;return this},setMimeType:function(e){this.mimeType=e;return this},setRequestHeader:function(e){this.requestHeader=e;return this}});Object.assign(on.prototype,{load:function(e,i,r,n){function t(t){u.load(e[t],function(e){e=o._parser(e,!0);a[t]={width:e.width,height:e.height,format:e.format,mipmaps:e.mipmaps};c+=1;6===c&&(1===e.mipmapCount&&(s.minFilter=1006),s.format=e.format,s.needsUpdate=!0,i&&i(s))},r,n)}var o=this,a=[],s=new $t;s.image=a;var u=new nn(this.manager);u.setPath(this.path);u.setResponseType("arraybuffer");if(Array.isArray(e))for(var c=0,h=0,l=e.length;h<l;++h)t(h);else u.load(e,function(e){e=o._parser(e,!0);if(e.isCubemap)for(var t=e.mipmaps.length/e.mipmapCount,r=0;r<t;r++){a[r]={mipmaps:[]};for(var n=0;n<e.mipmapCount;n++)a[r].mipmaps.push(e.mipmaps[r*e.mipmapCount+n]),a[r].format=e.format,a[r].width=e.width,a[r].height=e.height}else s.image.width=e.width,s.image.height=e.height,s.mipmaps=e.mipmaps;1===e.mipmapCount&&(s.minFilter=1006);s.format=e.format;s.needsUpdate=!0;i&&i(s)},r,n);return s},setPath:function(e){this.path=e;return this}});Object.assign(an.prototype,{load:function(e,t,r,n){var i=this,o=new Me,a=new nn(this.manager);a.setResponseType("arraybuffer");a.load(e,function(e){if(e=i._parser(e))void 0!==e.image?o.image=e.image:void 0!==e.data&&(o.image.width=e.width,o.image.height=e.height,o.image.data=e.data),o.wrapS=void 0!==e.wrapS?e.wrapS:1001,o.wrapT=void 0!==e.wrapT?e.wrapT:1001,o.magFilter=void 0!==e.magFilter?e.magFilter:1006,o.minFilter=void 0!==e.minFilter?e.minFilter:1008,o.anisotropy=void 0!==e.anisotropy?e.anisotropy:1,void 0!==e.format&&(o.format=e.format),void 0!==e.type&&(o.type=e.type),void 0!==e.mipmaps&&(o.mipmaps=e.mipmaps),1===e.mipmapCount&&(o.minFilter=1006),o.needsUpdate=!0,t&&t(o,e)},r,n);return o}});Object.assign(sn.prototype,{crossOrigin:"anonymous",load:function(t,e,r,n){function i(){u.removeEventListener("load",i,!1);u.removeEventListener("error",o,!1);Po.add(t,this);e&&e(this);a.manager.itemEnd(t)}function o(e){u.removeEventListener("load",i,!1);u.removeEventListener("error",o,!1);n&&n(e);a.manager.itemEnd(t);a.manager.itemError(t)}void 0===t&&(t="");void 0!==this.path&&(t=this.path+t);t=this.manager.resolveURL(t);var a=this,s=Po.get(t);if(void 0!==s)return a.manager.itemStart(t),setTimeout(function(){e&&e(s);a.manager.itemEnd(t)},0),s;var u=document.createElementNS("http://www.w3.org/1999/xhtml","img");u.addEventListener("load",i,!1);u.addEventListener("error",o,!1);"data:"!==t.substr(0,5)&&void 0!==this.crossOrigin&&(u.crossOrigin=this.crossOrigin);a.manager.itemStart(t);u.src=t;return u},setCrossOrigin:function(e){this.crossOrigin=e;return this},setPath:function(e){this.path=e;return this}});Object.assign(un.prototype,{crossOrigin:"anonymous",load:function(e,r,t,n){function i(t){a.load(e[t],function(e){o.images[t]=e;s++;6===s&&(o.needsUpdate=!0,r&&r(o))},void 0,n)}var o=new U,a=new sn(this.manager);a.setCrossOrigin(this.crossOrigin);a.setPath(this.path);var s=0;for(t=0;t<e.length;++t)i(t);return o},setCrossOrigin:function(e){this.crossOrigin=e;return this},setPath:function(e){this.path=e;return this}});Object.assign(cn.prototype,{crossOrigin:"anonymous",load:function(t,r,e,n){var i=new p,o=new sn(this.manager);o.setCrossOrigin(this.crossOrigin);o.setPath(this.path);o.load(t,function(e){i.image=e;e=0<t.search(/\.(jpg|jpeg)$/)||0===t.search(/^data:image\/jpeg/);i.format=e?1022:1023;i.needsUpdate=!0;void 0!==r&&r(i)},e,n);return i},setCrossOrigin:function(e){this.crossOrigin=e;return this},setPath:function(e){this.path=e;return this}});Object.assign(hn.prototype,{getPoint:function(){console.warn("THREE.Curve: .getPoint() not implemented.");return null},getPointAt:function(e,t){e=this.getUtoTmapping(e);return this.getPoint(e,t)},getPoints:function(e){void 0===e&&(e=5);for(var t=[],r=0;r<=e;r++)t.push(this.getPoint(r/e));return t},getSpacedPoints:function(e){void 0===e&&(e=5);for(var t=[],r=0;r<=e;r++)t.push(this.getPointAt(r/e));return t},getLength:function(){var e=this.getLengths();return e[e.length-1]},getLengths:function(e){void 0===e&&(e=this.arcLengthDivisions);if(this.cacheArcLengths&&this.cacheArcLengths.length===e+1&&!this.needsUpdate)return this.cacheArcLengths;this.needsUpdate=!1;var t=[],r=this.getPoint(0),n,i=0;t.push(0);for(n=1;n<=e;n++){var o=this.getPoint(n/e);i+=o.distanceTo(r);t.push(i);r=o}return this.cacheArcLengths=t},updateArcLengths:function(){this.needsUpdate=!0;this.getLengths()},getUtoTmapping:function(e,t){var r=this.getLengths(),n=r.length;t=t?t:e*r[n-1];for(var i=0,o=n-1,a;i<=o;)if(e=Math.floor(i+(o-i)/2),a=r[e]-t,0>a)i=e+1;else if(0<a)o=e-1;else{o=e;break}e=o;if(r[e]===t)return e/(n-1);i=r[e];return(e+(t-i)/(r[e+1]-i))/(n-1)},getTangent:function(e){var t=e-1e-4;e+=1e-4;0>t&&(t=0);1<e&&(e=1);t=this.getPoint(t);return this.getPoint(e).clone().sub(t).normalize()},getTangentAt:function(e){e=this.getUtoTmapping(e);return this.getTangent(e)},computeFrenetFrames:function(e,t){var r=new we,n=[],i=[],o=[],a=new we,s=new xe,u;for(u=0;u<=e;u++){var c=u/e;n[u]=this.getTangentAt(c);n[u].normalize()}i[0]=new we;o[0]=new we;u=Number.MAX_VALUE;c=Math.abs(n[0].x);var h=Math.abs(n[0].y),l=Math.abs(n[0].z);c<=u&&(u=c,r.set(1,0,0));h<=u&&(u=h,r.set(0,1,0));l<=u&&r.set(0,0,1);a.crossVectors(n[0],r).normalize();i[0].crossVectors(n[0],a);o[0].crossVectors(n[0],i[0]);for(u=1;u<=e;u++)i[u]=i[u-1].clone(),o[u]=o[u-1].clone(),a.crossVectors(n[u-1],n[u]),a.length()>Number.EPSILON&&(a.normalize(),r=Math.acos(eo.clamp(n[u-1].dot(n[u]),-1,1)),i[u].applyMatrix4(s.makeRotationAxis(a,r))),o[u].crossVectors(n[u],i[u]);if(!0===t)for(r=Math.acos(eo.clamp(i[0].dot(i[e]),-1,1)),r/=e,0<n[0].dot(a.crossVectors(i[0],i[e]))&&(r=-r),u=1;u<=e;u++)i[u].applyMatrix4(s.makeRotationAxis(n[u],r*u)),o[u].crossVectors(n[u],i[u]);return{tangents:n,normals:i,binormals:o}},clone:function(){return(new this.constructor).copy(this)},copy:function(e){this.arcLengthDivisions=e.arcLengthDivisions;return this},toJSON:function(){var e={metadata:{version:4.5,type:"Curve",generator:"Curve.toJSON"}};e.arcLengthDivisions=this.arcLengthDivisions;e.type=this.type;return e},fromJSON:function(e){this.arcLengthDivisions=e.arcLengthDivisions;return this}});ln.prototype=Object.create(hn.prototype);ln.prototype.constructor=ln;ln.prototype.isEllipseCurve=!0;ln.prototype.getPoint=function(e,t){t=t||new H;for(var r=2*Math.PI,n=this.aEndAngle-this.aStartAngle,i=Math.abs(n)<Number.EPSILON;0>n;)n+=r;for(;n>r;)n-=r;n<Number.EPSILON&&(n=i?0:r);!0!==this.aClockwise||i||(n=n===r?-r:n-r);r=this.aStartAngle+e*n;e=this.aX+this.xRadius*Math.cos(r);var o=this.aY+this.yRadius*Math.sin(r);0!==this.aRotation&&(r=Math.cos(this.aRotation),n=Math.sin(this.aRotation),i=e-this.aX,o-=this.aY,e=i*r-o*n+this.aX,o=i*n+o*r+this.aY);return t.set(e,o)};ln.prototype.copy=function(e){hn.prototype.copy.call(this,e);this.aX=e.aX;this.aY=e.aY;this.xRadius=e.xRadius;this.yRadius=e.yRadius;this.aStartAngle=e.aStartAngle;this.aEndAngle=e.aEndAngle;this.aClockwise=e.aClockwise;this.aRotation=e.aRotation;return this};ln.prototype.toJSON=function(){var e=hn.prototype.toJSON.call(this);e.aX=this.aX;e.aY=this.aY;e.xRadius=this.xRadius;e.yRadius=this.yRadius;e.aStartAngle=this.aStartAngle;e.aEndAngle=this.aEndAngle;e.aClockwise=this.aClockwise;e.aRotation=this.aRotation;return e};ln.prototype.fromJSON=function(e){hn.prototype.fromJSON.call(this,e);this.aX=e.aX;this.aY=e.aY;this.xRadius=e.xRadius;this.yRadius=e.yRadius;this.aStartAngle=e.aStartAngle;this.aEndAngle=e.aEndAngle;this.aClockwise=e.aClockwise;this.aRotation=e.aRotation;return this};pn.prototype=Object.create(ln.prototype);pn.prototype.constructor=pn;pn.prototype.isArcCurve=!0;var Ro=new we,Lo=new fn,Io=new fn,No=new fn;dn.prototype=Object.create(hn.prototype);dn.prototype.constructor=dn;dn.prototype.isCatmullRomCurve3=!0;dn.prototype.getPoint=function(e,t){t=t||new we;var r=this.points,n=r.length;e*=n-(this.closed?0:1);var i=Math.floor(e);e-=i;this.closed?i+=0<i?0:(Math.floor(Math.abs(i)/n)+1)*n:0===e&&i===n-1&&(i=n-2,e=1);if(this.closed||0<i)var o=r[(i-1)%n];else Ro.subVectors(r[0],r[1]).add(r[0]),o=Ro;var a=r[i%n];var s=r[(i+1)%n];this.closed||i+2<n?r=r[(i+2)%n]:(Ro.subVectors(r[n-1],r[n-2]).add(r[n-1]),r=Ro);if("centripetal"===this.curveType||"chordal"===this.curveType){var u="chordal"===this.curveType?.5:.25;n=Math.pow(o.distanceToSquared(a),u);i=Math.pow(a.distanceToSquared(s),u);u=Math.pow(s.distanceToSquared(r),u);1e-4>i&&(i=1);1e-4>n&&(n=i);1e-4>u&&(u=i);Lo.initNonuniformCatmullRom(o.x,a.x,s.x,r.x,n,i,u);Io.initNonuniformCatmullRom(o.y,a.y,s.y,r.y,n,i,u);No.initNonuniformCatmullRom(o.z,a.z,s.z,r.z,n,i,u)}else"catmullrom"===this.curveType&&(Lo.initCatmullRom(o.x,a.x,s.x,r.x,this.tension),Io.initCatmullRom(o.y,a.y,s.y,r.y,this.tension),No.initCatmullRom(o.z,a.z,s.z,r.z,this.tension));t.set(Lo.calc(e),Io.calc(e),No.calc(e));return t};dn.prototype.copy=function(e){hn.prototype.copy.call(this,e);this.points=[];for(var t=0,r=e.points.length;t<r;t++)this.points.push(e.points[t].clone());this.closed=e.closed;this.curveType=e.curveType;this.tension=e.tension;return this};dn.prototype.toJSON=function(){var e=hn.prototype.toJSON.call(this);e.points=[];for(var t=0,r=this.points.length;t<r;t++)e.points.push(this.points[t].toArray());e.closed=this.closed;e.curveType=this.curveType;e.tension=this.tension;return e};dn.prototype.fromJSON=function(e){hn.prototype.fromJSON.call(this,e);this.points=[];for(var t=0,r=e.points.length;t<r;t++){var n=e.points[t];this.points.push((new we).fromArray(n))}this.closed=e.closed;this.curveType=e.curveType;this.tension=e.tension;return this};yn.prototype=Object.create(hn.prototype);yn.prototype.constructor=yn;yn.prototype.isCubicBezierCurve=!0;yn.prototype.getPoint=function(e,t){t=t||new H;var r=this.v0,n=this.v1,i=this.v2,o=this.v3;t.set(gn(e,r.x,n.x,i.x,o.x),gn(e,r.y,n.y,i.y,o.y));return t};yn.prototype.copy=function(e){hn.prototype.copy.call(this,e);this.v0.copy(e.v0);this.v1.copy(e.v1);this.v2.copy(e.v2);this.v3.copy(e.v3);return this};yn.prototype.toJSON=function(){var e=hn.prototype.toJSON.call(this);e.v0=this.v0.toArray();e.v1=this.v1.toArray();e.v2=this.v2.toArray();e.v3=this.v3.toArray();return e};yn.prototype.fromJSON=function(e){hn.prototype.fromJSON.call(this,e);this.v0.fromArray(e.v0);this.v1.fromArray(e.v1);this.v2.fromArray(e.v2);this.v3.fromArray(e.v3);return this};_n.prototype=Object.create(hn.prototype);_n.prototype.constructor=_n;_n.prototype.isCubicBezierCurve3=!0;_n.prototype.getPoint=function(e,t){t=t||new we;var r=this.v0,n=this.v1,i=this.v2,o=this.v3;t.set(gn(e,r.x,n.x,i.x,o.x),gn(e,r.y,n.y,i.y,o.y),gn(e,r.z,n.z,i.z,o.z));return t};_n.prototype.copy=function(e){hn.prototype.copy.call(this,e);this.v0.copy(e.v0);this.v1.copy(e.v1);this.v2.copy(e.v2);this.v3.copy(e.v3);return this};_n.prototype.toJSON=function(){var e=hn.prototype.toJSON.call(this);e.v0=this.v0.toArray();e.v1=this.v1.toArray();e.v2=this.v2.toArray();e.v3=this.v3.toArray();return e};_n.prototype.fromJSON=function(e){hn.prototype.fromJSON.call(this,e);this.v0.fromArray(e.v0);this.v1.fromArray(e.v1);this.v2.fromArray(e.v2);this.v3.fromArray(e.v3);return this};bn.prototype=Object.create(hn.prototype);bn.prototype.constructor=bn;bn.prototype.isLineCurve=!0;bn.prototype.getPoint=function(e,t){t=t||new H;1===e?t.copy(this.v2):(t.copy(this.v2).sub(this.v1),t.multiplyScalar(e).add(this.v1));return t};bn.prototype.getPointAt=function(e,t){return this.getPoint(e,t)};bn.prototype.getTangent=function(){return this.v2.clone().sub(this.v1).normalize()};bn.prototype.copy=function(e){hn.prototype.copy.call(this,e);this.v1.copy(e.v1);this.v2.copy(e.v2);return this};bn.prototype.toJSON=function(){var e=hn.prototype.toJSON.call(this);e.v1=this.v1.toArray();e.v2=this.v2.toArray();return e};bn.prototype.fromJSON=function(e){hn.prototype.fromJSON.call(this,e);this.v1.fromArray(e.v1);this.v2.fromArray(e.v2);return this};xn.prototype=Object.create(hn.prototype);xn.prototype.constructor=xn;xn.prototype.isLineCurve3=!0;xn.prototype.getPoint=function(e,t){t=t||new we;1===e?t.copy(this.v2):(t.copy(this.v2).sub(this.v1),t.multiplyScalar(e).add(this.v1));return t};xn.prototype.getPointAt=function(e,t){return this.getPoint(e,t)};xn.prototype.copy=function(e){hn.prototype.copy.call(this,e);this.v1.copy(e.v1);this.v2.copy(e.v2);return this};xn.prototype.toJSON=function(){var e=hn.prototype.toJSON.call(this);e.v1=this.v1.toArray();e.v2=this.v2.toArray();return e};xn.prototype.fromJSON=function(e){hn.prototype.fromJSON.call(this,e);this.v1.fromArray(e.v1);this.v2.fromArray(e.v2);return this};wn.prototype=Object.create(hn.prototype);wn.prototype.constructor=wn;wn.prototype.isQuadraticBezierCurve=!0;wn.prototype.getPoint=function(e,t){t=t||new H;var r=this.v0,n=this.v1,i=this.v2;t.set(mn(e,r.x,n.x,i.x),mn(e,r.y,n.y,i.y));return t};wn.prototype.copy=function(e){hn.prototype.copy.call(this,e);this.v0.copy(e.v0);this.v1.copy(e.v1);this.v2.copy(e.v2);return this};wn.prototype.toJSON=function(){var e=hn.prototype.toJSON.call(this);e.v0=this.v0.toArray();e.v1=this.v1.toArray();e.v2=this.v2.toArray();return e};wn.prototype.fromJSON=function(e){hn.prototype.fromJSON.call(this,e);this.v0.fromArray(e.v0);this.v1.fromArray(e.v1);this.v2.fromArray(e.v2);return this};Sn.prototype=Object.create(hn.prototype);Sn.prototype.constructor=Sn;Sn.prototype.isQuadraticBezierCurve3=!0;Sn.prototype.getPoint=function(e,t){t=t||new we;var r=this.v0,n=this.v1,i=this.v2;t.set(mn(e,r.x,n.x,i.x),mn(e,r.y,n.y,i.y),mn(e,r.z,n.z,i.z));return t};Sn.prototype.copy=function(e){hn.prototype.copy.call(this,e);this.v0.copy(e.v0);this.v1.copy(e.v1);this.v2.copy(e.v2);return this};Sn.prototype.toJSON=function(){var e=hn.prototype.toJSON.call(this);e.v0=this.v0.toArray();e.v1=this.v1.toArray();e.v2=this.v2.toArray();return e};Sn.prototype.fromJSON=function(e){hn.prototype.fromJSON.call(this,e);this.v0.fromArray(e.v0);this.v1.fromArray(e.v1);this.v2.fromArray(e.v2);return this};Mn.prototype=Object.create(hn.prototype);Mn.prototype.constructor=Mn;Mn.prototype.isSplineCurve=!0;Mn.prototype.getPoint=function(e,t){t=t||new H;var r=this.points,n=(r.length-1)*e;e=Math.floor(n);n-=e;var i=r[0===e?e:e-1],o=r[e],a=r[e>r.length-2?r.length-1:e+1];r=r[e>r.length-3?r.length-1:e+2];t.set(vn(n,i.x,o.x,a.x,r.x),vn(n,i.y,o.y,a.y,r.y));return t};Mn.prototype.copy=function(e){hn.prototype.copy.call(this,e);this.points=[];for(var t=0,r=e.points.length;t<r;t++)this.points.push(e.points[t].clone());return this};Mn.prototype.toJSON=function(){var e=hn.prototype.toJSON.call(this);e.points=[];for(var t=0,r=this.points.length;t<r;t++)e.points.push(this.points[t].toArray());return e};Mn.prototype.fromJSON=function(e){hn.prototype.fromJSON.call(this,e);this.points=[];for(var t=0,r=e.points.length;t<r;t++){var n=e.points[t];this.points.push((new H).fromArray(n))}return this};var Do=Object.freeze({ArcCurve:pn,CatmullRomCurve3:dn,CubicBezierCurve:yn,CubicBezierCurve3:_n,EllipseCurve:ln,LineCurve:bn,LineCurve3:xn,QuadraticBezierCurve:wn,QuadraticBezierCurve3:Sn,SplineCurve:Mn});En.prototype=Object.assign(Object.create(hn.prototype),{constructor:En,add:function(e){this.curves.push(e)},closePath:function(){var e=this.curves[0].getPoint(0),t=this.curves[this.curves.length-1].getPoint(1);e.equals(t)||this.curves.push(new bn(t,e))},getPoint:function(e){var t=e*this.getLength(),r=this.getCurveLengths();for(e=0;e<r.length;){if(r[e]>=t)return t=r[e]-t,e=this.curves[e],r=e.getLength(),e.getPointAt(0===r?0:1-t/r);e++}return null},getLength:function(){var e=this.getCurveLengths();return e[e.length-1]},updateArcLengths:function(){this.needsUpdate=!0;this.cacheLengths=null;this.getCurveLengths()},getCurveLengths:function(){if(this.cacheLengths&&this.cacheLengths.length===this.curves.length)return this.cacheLengths;for(var e=[],t=0,r=0,n=this.curves.length;r<n;r++)t+=this.curves[r].getLength(),e.push(t);return this.cacheLengths=e},getSpacedPoints:function(e){void 0===e&&(e=40);for(var t=[],r=0;r<=e;r++)t.push(this.getPoint(r/e));this.autoClose&&t.push(t[0]);return t},getPoints:function(e){e=e||12;for(var t=[],r,n=0,i=this.curves;n<i.length;n++){var o=i[n];o=o.getPoints(o&&o.isEllipseCurve?2*e:o&&(o.isLineCurve||o.isLineCurve3)?1:o&&o.isSplineCurve?e*o.points.length:e);for(var a=0;a<o.length;a++){var s=o[a];r&&r.equals(s)||(t.push(s),r=s)}}this.autoClose&&1<t.length&&!t[t.length-1].equals(t[0])&&t.push(t[0]);return t},copy:function(e){hn.prototype.copy.call(this,e);this.curves=[];for(var t=0,r=e.curves.length;t<r;t++)this.curves.push(e.curves[t].clone());this.autoClose=e.autoClose;return this},toJSON:function(){var e=hn.prototype.toJSON.call(this);e.autoClose=this.autoClose;e.curves=[];for(var t=0,r=this.curves.length;t<r;t++)e.curves.push(this.curves[t].toJSON());return e},fromJSON:function(e){hn.prototype.fromJSON.call(this,e);this.autoClose=e.autoClose;this.curves=[];for(var t=0,r=e.curves.length;t<r;t++){var n=e.curves[t];this.curves.push((new Do[n.type]).fromJSON(n))}return this}});Cn.prototype=Object.assign(Object.create(En.prototype),{constructor:Cn,setFromPoints:function(e){this.moveTo(e[0].x,e[0].y);for(var t=1,r=e.length;t<r;t++)this.lineTo(e[t].x,e[t].y)},moveTo:function(e,t){this.currentPoint.set(e,t)},lineTo:function(e,t){var r=new bn(this.currentPoint.clone(),new H(e,t));this.curves.push(r);this.currentPoint.set(e,t)},quadraticCurveTo:function(e,t,r,n){e=new wn(this.currentPoint.clone(),new H(e,t),new H(r,n));this.curves.push(e);this.currentPoint.set(r,n)},bezierCurveTo:function(e,t,r,n,i,o){e=new yn(this.currentPoint.clone(),new H(e,t),new H(r,n),new H(i,o));this.curves.push(e);this.currentPoint.set(i,o)},splineThru:function(e){var t=[this.currentPoint.clone()].concat(e);t=new Mn(t);this.curves.push(t);this.currentPoint.copy(e[e.length-1])},arc:function(e,t,r,n,i,o){this.absarc(e+this.currentPoint.x,t+this.currentPoint.y,r,n,i,o)},absarc:function(e,t,r,n,i,o){this.absellipse(e,t,r,r,n,i,o)},ellipse:function(e,t,r,n,i,o,a,s){this.absellipse(e+this.currentPoint.x,t+this.currentPoint.y,r,n,i,o,a,s)},absellipse:function(e,t,r,n,i,o,a,s){e=new ln(e,t,r,n,i,o,a,s);0<this.curves.length&&(t=e.getPoint(0),t.equals(this.currentPoint)||this.lineTo(t.x,t.y));this.curves.push(e);e=e.getPoint(1);this.currentPoint.copy(e)},copy:function(e){En.prototype.copy.call(this,e);this.currentPoint.copy(e.currentPoint);return this},toJSON:function(){var e=En.prototype.toJSON.call(this);e.currentPoint=this.currentPoint.toArray();return e},fromJSON:function(e){En.prototype.fromJSON.call(this,e);this.currentPoint.fromArray(e.currentPoint);return this}});Tn.prototype=Object.assign(Object.create(Cn.prototype),{constructor:Tn,getPointsHoles:function(e){for(var t=[],r=0,n=this.holes.length;r<n;r++)t[r]=this.holes[r].getPoints(e);return t},extractPoints:function(e){return{shape:this.getPoints(e),holes:this.getPointsHoles(e)}},copy:function(e){Cn.prototype.copy.call(this,e);this.holes=[];for(var t=0,r=e.holes.length;t<r;t++)this.holes.push(e.holes[t].clone());return this},toJSON:function(){var e=Cn.prototype.toJSON.call(this);e.uuid=this.uuid;e.holes=[];for(var t=0,r=this.holes.length;t<r;t++)e.holes.push(this.holes[t].toJSON());return e},fromJSON:function(e){Cn.prototype.fromJSON.call(this,e);this.uuid=e.uuid;this.holes=[];for(var t=0,r=e.holes.length;t<r;t++){var n=e.holes[t];this.holes.push((new Cn).fromJSON(n))}return this}});On.prototype=Object.assign(Object.create(h.prototype),{constructor:On,isLight:!0,copy:function(e){h.prototype.copy.call(this,e);this.color.copy(e.color);this.intensity=e.intensity;return this},toJSON:function(e){e=h.prototype.toJSON.call(this,e);e.object.color=this.color.getHex();e.object.intensity=this.intensity;void 0!==this.groundColor&&(e.object.groundColor=this.groundColor.getHex());void 0!==this.distance&&(e.object.distance=this.distance);void 0!==this.angle&&(e.object.angle=this.angle);void 0!==this.decay&&(e.object.decay=this.decay);void 0!==this.penumbra&&(e.object.penumbra=this.penumbra);void 0!==this.shadow&&(e.object.shadow=this.shadow.toJSON());return e}});Pn.prototype=Object.assign(Object.create(On.prototype),{constructor:Pn,isHemisphereLight:!0,copy:function(e){On.prototype.copy.call(this,e);this.groundColor.copy(e.groundColor);return this}});Object.assign(An.prototype,{copy:function(e){this.camera=e.camera.clone();this.bias=e.bias;this.radius=e.radius;this.mapSize.copy(e.mapSize);return this},clone:function(){return(new this.constructor).copy(this)},toJSON:function(){var e={};0!==this.bias&&(e.bias=this.bias);1!==this.radius&&(e.radius=this.radius);if(512!==this.mapSize.x||512!==this.mapSize.y)e.mapSize=this.mapSize.toArray();e.camera=this.camera.toJSON(!1).object;delete e.camera.matrix;return e}});jn.prototype=Object.assign(Object.create(An.prototype),{constructor:jn,isSpotLightShadow:!0,update:function(e){var t=this.camera,r=2*eo.RAD2DEG*e.angle,n=this.mapSize.width/this.mapSize.height;e=e.distance||t.far;if(r!==t.fov||n!==t.aspect||e!==t.far)t.fov=r,t.aspect=n,t.far=e,t.updateProjectionMatrix()}});Rn.prototype=Object.assign(Object.create(On.prototype),{constructor:Rn,isSpotLight:!0,copy:function(e){On.prototype.copy.call(this,e);this.distance=e.distance;this.angle=e.angle;this.penumbra=e.penumbra;this.decay=e.decay;this.target=e.target.clone();this.shadow=e.shadow.clone();return this}});Ln.prototype=Object.assign(Object.create(On.prototype),{constructor:Ln,isPointLight:!0,copy:function(e){On.prototype.copy.call(this,e);this.distance=e.distance;this.decay=e.decay;this.shadow=e.shadow.clone();return this}});In.prototype=Object.assign(Object.create(An.prototype),{constructor:In});Nn.prototype=Object.assign(Object.create(On.prototype),{constructor:Nn,isDirectionalLight:!0,copy:function(e){On.prototype.copy.call(this,e);this.target=e.target.clone();this.shadow=e.shadow.clone();return this}});Dn.prototype=Object.assign(Object.create(On.prototype),{constructor:Dn,isAmbientLight:!0});kn.prototype=Object.assign(Object.create(On.prototype),{constructor:kn,isRectAreaLight:!0,copy:function(e){On.prototype.copy.call(this,e);this.width=e.width;this.height=e.height;return this},toJSON:function(e){e=On.prototype.toJSON.call(this,e);e.object.width=this.width;e.object.height=this.height;return e}});var ko={arraySlice:function(e,t,r){return ko.isTypedArray(e)?new e.constructor(e.subarray(t,void 0!==r?r:e.length)):e.slice(t,r)},convertArray:function(e,t,r){return!e||!r&&e.constructor===t?e:"number"===typeof t.BYTES_PER_ELEMENT?new t(e):Array.prototype.slice.call(e)},isTypedArray:function(e){return ArrayBuffer.isView(e)&&!(e instanceof DataView)},getKeyframeOrder:function(r){for(var e=r.length,t=Array(e),n=0;n!==e;++n)t[n]=n;t.sort(function(e,t){return r[e]-r[t]});return t},sortedArray:function(e,t,r){for(var n=e.length,i=new e.constructor(n),o=0,a=0;a!==n;++o)for(var s=r[o]*t,u=0;u!==t;++u)i[a++]=e[s+u];return i},flattenJSON:function(e,t,r,n){for(var i=1,o=e[0];void 0!==o&&void 0===o[n];)o=e[i++];if(void 0!==o){var a=o[n];if(void 0!==a)if(Array.isArray(a)){do{a=o[n],void 0!==a&&(t.push(o.time),r.push.apply(r,a)),o=e[i++]}while(void 0!==o)}else if(void 0!==a.toArray){do{a=o[n],void 0!==a&&(t.push(o.time),a.toArray(r,r.length)),o=e[i++]}while(void 0!==o)}else{do{a=o[n],void 0!==a&&(t.push(o.time),r.push(a)),o=e[i++]}while(void 0!==o)}}}};Object.assign(Bn.prototype,{evaluate:function(e){var t=this.parameterPositions,r=this._cachedIndex,n=t[r],i=t[r-1];e:{t:{r:{n:if(!(e<n)){for(var o=r+2;;){if(void 0===n){if(e<i)break n;this._cachedIndex=r=t.length;return this.afterEnd_(r-1,e,i)}if(r===o)break;i=n;n=t[++r];if(e<n)break t}n=t.length;break r}if(e>=i)break e;else{o=t[1];e<o&&(r=2,i=o);for(o=r-2;;){if(void 0===i)return this._cachedIndex=0,this.beforeStart_(0,e,n);if(r===o)break;n=i;i=t[--r-1];if(e>=i)break t}n=r;r=0}}for(;r<n;)i=r+n>>>1,e<t[i]?n=i:r=i+1;n=t[r];i=t[r-1];if(void 0===i)return this._cachedIndex=0,this.beforeStart_(0,e,n);if(void 0===n)return this._cachedIndex=r=t.length,this.afterEnd_(r-1,i,e)}this._cachedIndex=r;this.intervalChanged_(r,i,n)}return this.interpolate_(r,i,e,n)},settings:null,DefaultSettings_:{},getSettings_:function(){return this.settings||this.DefaultSettings_},copySampleValue_:function(e){var t=this.resultBuffer,r=this.sampleValues,n=this.valueSize;e*=n;for(var i=0;i!==n;++i)t[i]=r[e+i];return t},interpolate_:function(){throw Error("call to abstract method")},intervalChanged_:function(){}});Object.assign(Bn.prototype,{beforeStart_:Bn.prototype.copySampleValue_,afterEnd_:Bn.prototype.copySampleValue_});Fn.prototype=Object.assign(Object.create(Bn.prototype),{constructor:Fn,DefaultSettings_:{endingStart:2400,endingEnd:2400},intervalChanged_:function(e,t,r){var n=this.parameterPositions,i=e-2,o=e+1,a=n[i],s=n[o];if(void 0===a)switch(this.getSettings_().endingStart){case 2401:i=e;a=2*t-r;break;case 2402:i=n.length-2;a=t+n[i]-n[i+1];break;default:i=e,a=r}if(void 0===s)switch(this.getSettings_().endingEnd){case 2401:o=e;s=2*r-t;break;case 2402:o=1;s=r+n[1]-n[0];break;default:o=e-1,s=t}e=.5*(r-t);n=this.valueSize;this._weightPrev=e/(t-a);this._weightNext=e/(s-r);this._offsetPrev=i*n;this._offsetNext=o*n},interpolate_:function(e,t,r,n){var i=this.resultBuffer,o=this.sampleValues,a=this.valueSize;e*=a;var s=e-a,u=this._offsetPrev,c=this._offsetNext,h=this._weightPrev,l=this._weightNext,p=(r-t)/(n-t);r=p*p;n=r*p;t=-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;for(r=0;r!==a;++r)i[r]=t*o[u+r]+h*o[s+r]+p*o[e+r]+l*o[c+r];return i}});$n.prototype=Object.assign(Object.create(Bn.prototype),{constructor:$n,interpolate_:function(e,t,r,n){var i=this.resultBuffer,o=this.sampleValues,a=this.valueSize;e*=a;var s=e-a;t=(r-t)/(n-t);r=1-t;for(n=0;n!==a;++n)i[n]=o[s+n]*r+o[e+n]*t;return i}});zn.prototype=Object.assign(Object.create(Bn.prototype),{constructor:zn,interpolate_:function(e){return this.copySampleValue_(e-1)}});Object.assign(Un,{toJSON:function(e){var t=e.constructor;if(void 0!==t.toJSON)t=t.toJSON(e);else{t={name:e.name,times:ko.convertArray(e.times,Array),values:ko.convertArray(e.values,Array)};var r=e.getInterpolation();r!==e.DefaultInterpolation&&(t.interpolation=r)}t.type=e.ValueTypeName;return t}});Object.assign(Un.prototype,{constructor:Un,TimeBufferType:Float32Array,ValueBufferType:Float32Array,DefaultInterpolation:2301,InterpolantFactoryMethodDiscrete:function(e){return new zn(this.times,this.values,this.getValueSize(),e)},InterpolantFactoryMethodLinear:function(e){return new $n(this.times,this.values,this.getValueSize(),e)},InterpolantFactoryMethodSmooth:function(e){return new Fn(this.times,this.values,this.getValueSize(),e)},setInterpolation:function(e){switch(e){case 2300:var t=this.InterpolantFactoryMethodDiscrete;break;case 2301:t=this.InterpolantFactoryMethodLinear;break;case 2302:t=this.InterpolantFactoryMethodSmooth}if(void 0===t){t="unsupported interpolation for "+this.ValueTypeName+" keyframe track named "+this.name;if(void 0===this.createInterpolant)if(e!==this.DefaultInterpolation)this.setInterpolation(this.DefaultInterpolation);else throw Error(t);console.warn("THREE.KeyframeTrack:",t);return this}this.createInterpolant=t;return this},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(e){if(0!==e)for(var t=this.times,r=0,n=t.length;r!==n;++r)t[r]+=e;return this},scale:function(e){if(1!==e)for(var t=this.times,r=0,n=t.length;r!==n;++r)t[r]*=e;return this},trim:function(e,t){for(var r=this.times,n=r.length,i=0,o=n-1;i!==n&&r[i]<e;)++i;for(;-1!==o&&r[o]>t;)--o;++o;if(0!==i||o!==n)i>=o&&(o=Math.max(o,1),i=o-1),e=this.getValueSize(),this.times=ko.arraySlice(r,i,o),this.values=ko.arraySlice(this.values,i*e,o*e);return this},validate:function(){var e=!0,t=this.getValueSize();0!==t-Math.floor(t)&&(console.error("THREE.KeyframeTrack: Invalid value size in track.",this),e=!1);var r=this.times;t=this.values;var n=r.length;0===n&&(console.error("THREE.KeyframeTrack: Track is empty.",this),e=!1);for(var i=null,o=0;o!==n;o++){var a=r[o];if("number"===typeof a&&isNaN(a)){console.error("THREE.KeyframeTrack: Time is not a valid number.",this,o,a);e=!1;break}if(null!==i&&i>a){console.error("THREE.KeyframeTrack: Out of order keys.",this,o,a,i);e=!1;break}i=a}if(void 0!==t&&ko.isTypedArray(t))for(o=0,r=t.length;o!==r;++o)if(n=t[o],isNaN(n)){console.error("THREE.KeyframeTrack: Value is not a valid number.",this,o,n);e=!1;break}return e},optimize:function(){for(var e=this.times,t=this.values,r=this.getValueSize(),n=2302===this.getInterpolation(),i=1,o=e.length-1,a=1;a<o;++a){var s=!1,u=e[a];if(u!==e[a+1]&&(1!==a||u!==u[0]))if(n)s=!0;else{var c=a*r,h=c-r,l=c+r;for(u=0;u!==r;++u){var p=t[c+u];if(p!==t[h+u]||p!==t[l+u]){s=!0;break}}}if(s){if(a!==i)for(e[i]=e[a],s=a*r,c=i*r,u=0;u!==r;++u)t[c+u]=t[s+u];++i}}if(0<o){e[i]=e[o];s=o*r;c=i*r;for(u=0;u!==r;++u)t[c+u]=t[s+u];++i}i!==e.length&&(this.times=ko.arraySlice(e,0,i),this.values=ko.arraySlice(t,0,i*r));return this}});Gn.prototype=Object.assign(Object.create(Un.prototype),{constructor:Gn,ValueTypeName:"bool",ValueBufferType:Array,DefaultInterpolation:2300,InterpolantFactoryMethodLinear:void 0,InterpolantFactoryMethodSmooth:void 0});Vn.prototype=Object.assign(Object.create(Un.prototype),{constructor:Vn,ValueTypeName:"color"});Hn.prototype=Object.assign(Object.create(Un.prototype),{constructor:Hn,ValueTypeName:"number"});qn.prototype=Object.assign(Object.create(Bn.prototype),{constructor:qn,interpolate_:function(e,t,r,n){var i=this.resultBuffer,o=this.sampleValues,a=this.valueSize;e*=a;t=(r-t)/(n-t);for(r=e+a;e!==r;e+=4)s.slerpFlat(i,0,o,e-a,o,e,t);return i}});Wn.prototype=Object.assign(Object.create(Un.prototype),{constructor:Wn,ValueTypeName:"quaternion",DefaultInterpolation:2301,InterpolantFactoryMethodLinear:function(e){return new qn(this.times,this.values,this.getValueSize(),e)},InterpolantFactoryMethodSmooth:void 0});Xn.prototype=Object.assign(Object.create(Un.prototype),{constructor:Xn,ValueTypeName:"string",ValueBufferType:Array,DefaultInterpolation:2300,InterpolantFactoryMethodLinear:void 0,InterpolantFactoryMethodSmooth:void 0});Yn.prototype=Object.assign(Object.create(Un.prototype),{constructor:Yn,ValueTypeName:"vector"});Object.assign(Kn,{parse:function(e){for(var t=[],r=e.tracks,n=1/(e.fps||1),i=0,o=r.length;i!==o;++i)t.push(Jn(r[i]).scale(n));return new Kn(e.name,e.duration,t)},toJSON:function(e){var t=[],r=e.tracks;e={name:e.name,duration:e.duration,tracks:t,uuid:e.uuid};for(var n=0,i=r.length;n!==i;++n)t.push(Un.toJSON(r[n]));return e},CreateFromMorphTargetSequence:function(e,t,r,n){for(var i=t.length,o=[],a=0;a<i;a++){var s=[],u=[];s.push((a+i-1)%i,a,(a+1)%i);u.push(0,1,0);var c=ko.getKeyframeOrder(s);s=ko.sortedArray(s,1,c);u=ko.sortedArray(u,1,c);n||0!==s[0]||(s.push(i),u.push(u[0]));o.push(new Hn(".morphTargetInfluences["+t[a].name+"]",s,u).scale(1/r))}return new Kn(e,-1,o)},findByName:function(e,t){var r=e;Array.isArray(e)||(r=e.geometry&&e.geometry.animations||e.animations);for(e=0;e<r.length;e++)if(r[e].name===t)return r[e];return null},CreateClipsFromMorphTargetSequences:function(e,t,r){for(var n={},i=/^([\w-]*?)([\d]+)$/,o=0,a=e.length;o<a;o++){var s=e[o],u=s.name.match(i);if(u&&1<u.length){var c=u[1];(u=n[c])||(n[c]=u=[]);u.push(s)}}e=[];for(c in n)e.push(Kn.CreateFromMorphTargetSequence(c,n[c],t,r));return e},parseAnimation:function(e,t){if(!e)return console.error("THREE.AnimationClip: No animation in JSONLoader data."),null;var r=function(e,t,r,n,i){if(0!==r.length){var o=[],a=[];ko.flattenJSON(r,o,a,n);0!==o.length&&i.push(new e(t,o,a))}},n=[],i=e.name||"default",o=e.length||-1,a=e.fps||30;e=e.hierarchy||[];for(var s=0;s<e.length;s++){var u=e[s].keys;if(u&&0!==u.length)if(u[0].morphTargets){o={};for(var c=0;c<u.length;c++)if(u[c].morphTargets)for(var h=0;h<u[c].morphTargets.length;h++)o[u[c].morphTargets[h]]=-1;for(var l in o){var p=[],f=[];for(h=0;h!==u[c].morphTargets.length;++h){var d=u[c];p.push(d.time);f.push(d.morphTarget===l?1:0)}n.push(new Hn(".morphTargetInfluence["+l+"]",p,f))}o=o.length*(a||1)}else c=".bones["+t[s].name+"]",r(Yn,c+".position",u,"pos",n),r(Wn,c+".quaternion",u,"rot",n),r(Yn,c+".scale",u,"scl",n)}return 0===n.length?null:new Kn(i,o,n)}});Object.assign(Kn.prototype,{resetDuration:function(){for(var e=0,t=0,r=this.tracks.length;t!==r;++t){var n=this.tracks[t];e=Math.max(e,n.times[n.times.length-1])}this.duration=e;return this},trim:function(){for(var e=0;e<this.tracks.length;e++)this.tracks[e].trim(0,this.duration);return this},validate:function(){for(var e=!0,t=0;t<this.tracks.length;t++)e=e&&this.tracks[t].validate();return e},optimize:function(){for(var e=0;e<this.tracks.length;e++)this.tracks[e].optimize();return this}});Object.assign(Qn.prototype,{load:function(e,t,r,n){var i=this;new nn(i.manager).load(e,function(e){t(i.parse(JSON.parse(e)))},r,n)},setTextures:function(e){this.textures=e},parse:function(e){function t(e){void 0===r[e]&&console.warn("THREE.MaterialLoader: Undefined texture",e);return r[e]}var r=this.textures,n=new Oo[e.type];void 0!==e.uuid&&(n.uuid=e.uuid);void 0!==e.name&&(n.name=e.name);void 0!==e.color&&n.color.setHex(e.color);void 0!==e.roughness&&(n.roughness=e.roughness);void 0!==e.metalness&&(n.metalness=e.metalness);void 0!==e.emissive&&n.emissive.setHex(e.emissive);void 0!==e.specular&&n.specular.setHex(e.specular);void 0!==e.shininess&&(n.shininess=e.shininess);void 0!==e.clearCoat&&(n.clearCoat=e.clearCoat);void 0!==e.clearCoatRoughness&&(n.clearCoatRoughness=e.clearCoatRoughness);void 0!==e.uniforms&&(n.uniforms=e.uniforms);void 0!==e.vertexShader&&(n.vertexShader=e.vertexShader);void 0!==e.fragmentShader&&(n.fragmentShader=e.fragmentShader);void 0!==e.vertexColors&&(n.vertexColors=e.vertexColors);void 0!==e.fog&&(n.fog=e.fog);void 0!==e.flatShading&&(n.flatShading=e.flatShading);void 0!==e.blending&&(n.blending=e.blending);void 0!==e.side&&(n.side=e.side);void 0!==e.opacity&&(n.opacity=e.opacity);void 0!==e.transparent&&(n.transparent=e.transparent);void 0!==e.alphaTest&&(n.alphaTest=e.alphaTest);void 0!==e.depthTest&&(n.depthTest=e.depthTest);void 0!==e.depthWrite&&(n.depthWrite=e.depthWrite);void 0!==e.colorWrite&&(n.colorWrite=e.colorWrite);void 0!==e.wireframe&&(n.wireframe=e.wireframe);void 0!==e.wireframeLinewidth&&(n.wireframeLinewidth=e.wireframeLinewidth);void 0!==e.wireframeLinecap&&(n.wireframeLinecap=e.wireframeLinecap);void 0!==e.wireframeLinejoin&&(n.wireframeLinejoin=e.wireframeLinejoin);void 0!==e.rotation&&(n.rotation=e.rotation);1!==e.linewidth&&(n.linewidth=e.linewidth);void 0!==e.dashSize&&(n.dashSize=e.dashSize);void 0!==e.gapSize&&(n.gapSize=e.gapSize);void 0!==e.scale&&(n.scale=e.scale);void 0!==e.polygonOffset&&(n.polygonOffset=e.polygonOffset);void 0!==e.polygonOffsetFactor&&(n.polygonOffsetFactor=e.polygonOffsetFactor);void 0!==e.polygonOffsetUnits&&(n.polygonOffsetUnits=e.polygonOffsetUnits);void 0!==e.skinning&&(n.skinning=e.skinning);void 0!==e.morphTargets&&(n.morphTargets=e.morphTargets);void 0!==e.dithering&&(n.dithering=e.dithering);void 0!==e.visible&&(n.visible=e.visible);void 0!==e.userData&&(n.userData=e.userData);void 0!==e.shading&&(n.flatShading=1===e.shading);void 0!==e.size&&(n.size=e.size);void 0!==e.sizeAttenuation&&(n.sizeAttenuation=e.sizeAttenuation);void 0!==e.map&&(n.map=t(e.map));void 0!==e.alphaMap&&(n.alphaMap=t(e.alphaMap),n.transparent=!0);void 0!==e.bumpMap&&(n.bumpMap=t(e.bumpMap));void 0!==e.bumpScale&&(n.bumpScale=e.bumpScale);void 0!==e.normalMap&&(n.normalMap=t(e.normalMap));void 0!==e.normalMapType&&(n.normalMapType=e.normalMapType);if(void 0!==e.normalScale){var i=e.normalScale;!1===Array.isArray(i)&&(i=[i,i]);n.normalScale=(new H).fromArray(i)}void 0!==e.displacementMap&&(n.displacementMap=t(e.displacementMap));void 0!==e.displacementScale&&(n.displacementScale=e.displacementScale);void 0!==e.displacementBias&&(n.displacementBias=e.displacementBias);void 0!==e.roughnessMap&&(n.roughnessMap=t(e.roughnessMap));void 0!==e.metalnessMap&&(n.metalnessMap=t(e.metalnessMap));void 0!==e.emissiveMap&&(n.emissiveMap=t(e.emissiveMap));void 0!==e.emissiveIntensity&&(n.emissiveIntensity=e.emissiveIntensity);void 0!==e.specularMap&&(n.specularMap=t(e.specularMap));void 0!==e.envMap&&(n.envMap=t(e.envMap));void 0!==e.reflectivity&&(n.reflectivity=e.reflectivity);void 0!==e.lightMap&&(n.lightMap=t(e.lightMap));void 0!==e.lightMapIntensity&&(n.lightMapIntensity=e.lightMapIntensity);void 0!==e.aoMap&&(n.aoMap=t(e.aoMap));void 0!==e.aoMapIntensity&&(n.aoMapIntensity=e.aoMapIntensity);void 0!==e.gradientMap&&(n.gradientMap=t(e.gradientMap));return n}});Object.assign(ei.prototype,{load:function(e,t,r,n){var i=this;new nn(i.manager).load(e,function(e){t(i.parse(JSON.parse(e)))},r,n)},parse:function(e){var t=new A,r=e.data.index;void 0!==r&&(r=new Bo[r.type](r.array),t.setIndex(new y(r,1)));var n=e.data.attributes;for(o in n){var i=n[o];r=new Bo[i.type](i.array);t.addAttribute(o,new y(r,i.itemSize,i.normalized))}var o=e.data.groups||e.data.drawcalls||e.data.offsets;if(void 0!==o)for(r=0,n=o.length;r!==n;++r)i=o[r],t.addGroup(i.start,i.count,i.materialIndex);e=e.data.boundingSphere;void 0!==e&&(o=new we,void 0!==e.center&&o.fromArray(e.center),t.boundingSphere=new c(o,e.radius));return t}});var Bo={Int8Array:Int8Array,Uint8Array:Uint8Array,Uint8ClampedArray:"undefined"!==typeof Uint8ClampedArray?Uint8ClampedArray:Uint8Array,Int16Array:Int16Array,Uint16Array:Uint16Array,Int32Array:Int32Array,Uint32Array:Uint32Array,Float32Array:Float32Array,Float64Array:Float64Array};ti.Handlers={handlers:[],add:function(e,t){this.handlers.push(e,t)},get:function(e){for(var t=this.handlers,r=0,n=t.length;r<n;r+=2){var i=t[r+1];if(t[r].test(e))return i}return null}};Object.assign(ti.prototype,{crossOrigin:"anonymous",onLoadStart:function(){},onLoadProgress:function(){},onLoadComplete:function(){},initMaterials:function(e,t,r){for(var n=[],i=0;i<e.length;++i)n[i]=this.createMaterial(e[i],t,r);return n},createMaterial:function(){var o={NoBlending:0,NormalBlending:1,AdditiveBlending:2,SubtractiveBlending:3,MultiplyBlending:4,CustomBlending:5},c=new w,h=new cn,l=new Qn;return function(e,a,s){function t(e,t,r,n,i){e=a+e;var o=ti.Handlers.get(e);null!==o?e=o.load(e):(h.setCrossOrigin(s),e=h.load(e));void 0!==t&&(e.repeat.fromArray(t),1!==t[0]&&(e.wrapS=1e3),1!==t[1]&&(e.wrapT=1e3));void 0!==r&&e.offset.fromArray(r);void 0!==n&&("repeat"===n[0]&&(e.wrapS=1e3),"mirror"===n[0]&&(e.wrapS=1002),"repeat"===n[1]&&(e.wrapT=1e3),"mirror"===n[1]&&(e.wrapT=1002));void 0!==i&&(e.anisotropy=i);t=eo.generateUUID();u[t]=e;return t}var u={},r={uuid:eo.generateUUID(),type:"MeshLambertMaterial"},n;for(n in e){var i=e[n];switch(n){case"DbgColor":case"DbgIndex":case"opticalDensity":case"illumination":break;case"DbgName":r.name=i;break;case"blending":r.blending=o[i];break;case"colorAmbient":case"mapAmbient":console.warn("THREE.Loader.createMaterial:",n,"is no longer supported.");break;case"colorDiffuse":r.color=c.fromArray(i).getHex();break;case"colorSpecular":r.specular=c.fromArray(i).getHex();break;case"colorEmissive":r.emissive=c.fromArray(i).getHex();break;case"specularCoef":r.shininess=i;break;case"shading":"basic"===i.toLowerCase()&&(r.type="MeshBasicMaterial");"phong"===i.toLowerCase()&&(r.type="MeshPhongMaterial");"standard"===i.toLowerCase()&&(r.type="MeshStandardMaterial");break;case"mapDiffuse":r.map=t(i,e.mapDiffuseRepeat,e.mapDiffuseOffset,e.mapDiffuseWrap,e.mapDiffuseAnisotropy);break;case"mapDiffuseRepeat":case"mapDiffuseOffset":case"mapDiffuseWrap":case"mapDiffuseAnisotropy":break;case"mapEmissive":r.emissiveMap=t(i,e.mapEmissiveRepeat,e.mapEmissiveOffset,e.mapEmissiveWrap,e.mapEmissiveAnisotropy);break;case"mapEmissiveRepeat":case"mapEmissiveOffset":case"mapEmissiveWrap":case"mapEmissiveAnisotropy":break;case"mapLight":r.lightMap=t(i,e.mapLightRepeat,e.mapLightOffset,e.mapLightWrap,e.mapLightAnisotropy);break;case"mapLightRepeat":case"mapLightOffset":case"mapLightWrap":case"mapLightAnisotropy":break;case"mapAO":r.aoMap=t(i,e.mapAORepeat,e.mapAOOffset,e.mapAOWrap,e.mapAOAnisotropy);break;case"mapAORepeat":case"mapAOOffset":case"mapAOWrap":case"mapAOAnisotropy":break;case"mapBump":r.bumpMap=t(i,e.mapBumpRepeat,e.mapBumpOffset,e.mapBumpWrap,e.mapBumpAnisotropy);break;case"mapBumpScale":r.bumpScale=i;break;case"mapBumpRepeat":case"mapBumpOffset":case"mapBumpWrap":case"mapBumpAnisotropy":break;case"mapNormal":r.normalMap=t(i,e.mapNormalRepeat,e.mapNormalOffset,e.mapNormalWrap,e.mapNormalAnisotropy);break;case"mapNormalFactor":r.normalScale=i;break;case"mapNormalRepeat":case"mapNormalOffset":case"mapNormalWrap":case"mapNormalAnisotropy":break;case"mapSpecular":r.specularMap=t(i,e.mapSpecularRepeat,e.mapSpecularOffset,e.mapSpecularWrap,e.mapSpecularAnisotropy);break;case"mapSpecularRepeat":case"mapSpecularOffset":case"mapSpecularWrap":case"mapSpecularAnisotropy":break;case"mapMetalness":r.metalnessMap=t(i,e.mapMetalnessRepeat,e.mapMetalnessOffset,e.mapMetalnessWrap,e.mapMetalnessAnisotropy);break;case"mapMetalnessRepeat":case"mapMetalnessOffset":case"mapMetalnessWrap":case"mapMetalnessAnisotropy":break;case"mapRoughness":r.roughnessMap=t(i,e.mapRoughnessRepeat,e.mapRoughnessOffset,e.mapRoughnessWrap,e.mapRoughnessAnisotropy);break;case"mapRoughnessRepeat":case"mapRoughnessOffset":case"mapRoughnessWrap":case"mapRoughnessAnisotropy":break;case"mapAlpha":r.alphaMap=t(i,e.mapAlphaRepeat,e.mapAlphaOffset,e.mapAlphaWrap,e.mapAlphaAnisotropy);break;case"mapAlphaRepeat":case"mapAlphaOffset":case"mapAlphaWrap":case"mapAlphaAnisotropy":break;case"flipSided":r.side=1;break;case"doubleSided":r.side=2;break;case"transparency":console.warn("THREE.Loader.createMaterial: transparency has been renamed to opacity");r.opacity=i;break;case"depthTest":case"depthWrite":case"colorWrite":case"opacity":case"reflectivity":case"transparent":case"visible":case"wireframe":r[n]=i;break;case"vertexColors":!0===i&&(r.vertexColors=2);"face"===i&&(r.vertexColors=1);break;default:console.error("THREE.Loader.createMaterial: Unsupported",n,i)}}"MeshBasicMaterial"===r.type&&delete r.emissive;"MeshPhongMaterial"!==r.type&&delete r.specular;1>r.opacity&&(r.transparent=!0);l.setTextures(u);return l.parse(r)}}()});var Fo={decodeText:function(e){if("undefined"!==typeof TextDecoder)return(new TextDecoder).decode(e);for(var t="",r=0,n=e.length;r<n;r++)t+=String.fromCharCode(e[r]);return decodeURIComponent(escape(t))},extractUrlBase:function(e){var t=e.lastIndexOf("/");return-1===t?"./":e.substr(0,t+1)}};Object.assign(ri.prototype,{crossOrigin:"anonymous",load:function(r,n,e,t){var i=this,o=this.texturePath&&"string"===typeof this.texturePath?this.texturePath:Fo.extractUrlBase(r),a=new nn(this.manager);a.setWithCredentials(this.withCredentials);a.load(r,function(e){e=JSON.parse(e);var t=e.metadata;if(void 0!==t&&(t=t.type,void 0!==t&&"object"===t.toLowerCase())){console.error("THREE.JSONLoader: "+r+" should be loaded with THREE.ObjectLoader instead.");return}e=i.parse(e,o);n(e.geometry,e.materials)},e,t)},setCrossOrigin:function(e){this.crossOrigin=e;return this},setTexturePath:function(e){this.texturePath=e;return this},parse:function(){return function(e,t){void 0!==e.data&&(e=e.data);e.scale=void 0!==e.scale?1/e.scale:1;var r=new S,n=e,i,o,a,s=n.faces;var u=n.vertices;var c=n.normals,h=n.colors;var l=n.scale;var p=0;if(void 0!==n.uvs){for(i=0;i<n.uvs.length;i++)n.uvs[i].length&&p++;for(i=0;i<p;i++)r.faceVertexUvs[i]=[]}var f=0;for(a=u.length;f<a;)i=new we,i.x=u[f++]*l,i.y=u[f++]*l,i.z=u[f++]*l,r.vertices.push(i);f=0;for(a=s.length;f<a;){u=s[f++];var d=u&1;var v=u&2;i=u&8;var m=u&16;var g=u&32;l=u&64;u&=128;if(d){d=new k;d.a=s[f];d.b=s[f+1];d.c=s[f+3];var y=new k;y.a=s[f+1];y.b=s[f+2];y.c=s[f+3];f+=4;v&&(v=s[f++],d.materialIndex=v,y.materialIndex=v);v=r.faces.length;if(i)for(i=0;i<p;i++){var _=n.uvs[i];r.faceVertexUvs[i][v]=[];r.faceVertexUvs[i][v+1]=[];for(o=0;4>o;o++){var b=s[f++];var x=_[2*b];b=_[2*b+1];x=new H(x,b);2!==o&&r.faceVertexUvs[i][v].push(x);0!==o&&r.faceVertexUvs[i][v+1].push(x)}}m&&(m=3*s[f++],d.normal.set(c[m++],c[m++],c[m]),y.normal.copy(d.normal));if(g)for(i=0;4>i;i++)m=3*s[f++],g=new we(c[m++],c[m++],c[m]),2!==i&&d.vertexNormals.push(g),0!==i&&y.vertexNormals.push(g);l&&(l=s[f++],l=h[l],d.color.setHex(l),y.color.setHex(l));if(u)for(i=0;4>i;i++)l=s[f++],l=h[l],2!==i&&d.vertexColors.push(new w(l)),0!==i&&y.vertexColors.push(new w(l));r.faces.push(d);r.faces.push(y)}else{d=new k;d.a=s[f++];d.b=s[f++];d.c=s[f++];v&&(v=s[f++],d.materialIndex=v);v=r.faces.length;if(i)for(i=0;i<p;i++)for(_=n.uvs[i],r.faceVertexUvs[i][v]=[],o=0;3>o;o++)b=s[f++],x=_[2*b],b=_[2*b+1],x=new H(x,b),r.faceVertexUvs[i][v].push(x);m&&(m=3*s[f++],d.normal.set(c[m++],c[m++],c[m]));if(g)for(i=0;3>i;i++)m=3*s[f++],g=new we(c[m++],c[m++],c[m]),d.vertexNormals.push(g);l&&(l=s[f++],d.color.setHex(h[l]));if(u)for(i=0;3>i;i++)l=s[f++],d.vertexColors.push(new w(h[l]));r.faces.push(d)}}n=e;f=void 0!==n.influencesPerVertex?n.influencesPerVertex:2;if(n.skinWeights)for(a=0,s=n.skinWeights.length;a<s;a+=f)r.skinWeights.push(new Se(n.skinWeights[a],1<f?n.skinWeights[a+1]:0,2<f?n.skinWeights[a+2]:0,3<f?n.skinWeights[a+3]:0));if(n.skinIndices)for(a=0,s=n.skinIndices.length;a<s;a+=f)r.skinIndices.push(new Se(n.skinIndices[a],1<f?n.skinIndices[a+1]:0,2<f?n.skinIndices[a+2]:0,3<f?n.skinIndices[a+3]:0));r.bones=n.bones;r.bones&&0<r.bones.length&&(r.skinWeights.length!==r.skinIndices.length||r.skinIndices.length!==r.vertices.length)&&console.warn("When skinning, number of vertices ("+r.vertices.length+"), skinIndices ("+r.skinIndices.length+"), and skinWeights ("+r.skinWeights.length+") should match.");a=e;s=a.scale;if(void 0!==a.morphTargets)for(n=0,f=a.morphTargets.length;n<f;n++)for(r.morphTargets[n]={},r.morphTargets[n].name=a.morphTargets[n].name,r.morphTargets[n].vertices=[],c=r.morphTargets[n].vertices,h=a.morphTargets[n].vertices,p=0,u=h.length;p<u;p+=3)l=new we,l.x=h[p]*s,l.y=h[p+1]*s,l.z=h[p+2]*s,c.push(l);if(void 0!==a.morphColors&&0<a.morphColors.length)for(console.warn('THREE.JSONLoader: "morphColors" no longer supported. Using them as face colors.'),s=r.faces,a=a.morphColors[0].colors,n=0,f=s.length;n<f;n++)s[n].color.fromArray(a,3*n);a=e;n=[];f=[];void 0!==a.animation&&f.push(a.animation);void 0!==a.animations&&(a.animations.length?f=f.concat(a.animations):f.push(a.animations));for(a=0;a<f.length;a++)(s=Kn.parseAnimation(f[a],r.bones))&&n.push(s);r.morphTargets&&(f=Kn.CreateClipsFromMorphTargetSequences(r.morphTargets,10),n=n.concat(f));0<n.length&&(r.animations=n);r.computeFaceNormals();r.computeBoundingSphere();if(void 0===e.materials||0===e.materials.length)return{geometry:r};e=ti.prototype.initMaterials(e.materials,t,this.crossOrigin);return{geometry:r,materials:e}}}()});Object.assign(ni.prototype,{crossOrigin:"anonymous",load:function(r,n,e,i){""===this.texturePath&&(this.texturePath=r.substring(0,r.lastIndexOf("/")+1));var o=this;new nn(o.manager).load(r,function(e){var t=null;try{t=JSON.parse(e)}catch(e){void 0!==i&&i(e);console.error("THREE:ObjectLoader: Can't parse "+r+".",e.message);return}e=t.metadata;void 0===e||void 0===e.type||"geometry"===e.type.toLowerCase()?console.error("THREE.ObjectLoader: Can't load "+r+". Use THREE.JSONLoader instead."):o.parse(t,n)},e,i)},setTexturePath:function(e){this.texturePath=e;return this},setCrossOrigin:function(e){this.crossOrigin=e;return this},parse:function(e,t){var r=this.parseShape(e.shapes);r=this.parseGeometries(e.geometries,r);var n=this.parseImages(e.images,function(){void 0!==t&&t(i)});n=this.parseTextures(e.textures,n);n=this.parseMaterials(e.materials,n);var i=this.parseObject(e.object,r,n);e.animations&&(i.animations=this.parseAnimations(e.animations));void 0!==e.images&&0!==e.images.length||void 0===t||t(i);return i},parseShape:function(e){var t={};if(void 0!==e)for(var r=0,n=e.length;r<n;r++){var i=(new Tn).fromJSON(e[r]);t[i.uuid]=i}return t},parseGeometries:function(e,t){var r={};if(void 0!==e)for(var n=new ri,i=new ei,o=0,a=e.length;o<a;o++){var s=e[o];switch(s.type){case"PlaneGeometry":case"PlaneBufferGeometry":var u=new To[s.type](s.width,s.height,s.widthSegments,s.heightSegments);break;case"BoxGeometry":case"BoxBufferGeometry":case"CubeGeometry":u=new To[s.type](s.width,s.height,s.depth,s.widthSegments,s.heightSegments,s.depthSegments);break;case"CircleGeometry":case"CircleBufferGeometry":u=new To[s.type](s.radius,s.segments,s.thetaStart,s.thetaLength);break;case"CylinderGeometry":case"CylinderBufferGeometry":u=new To[s.type](s.radiusTop,s.radiusBottom,s.height,s.radialSegments,s.heightSegments,s.openEnded,s.thetaStart,s.thetaLength);break;case"ConeGeometry":case"ConeBufferGeometry":u=new To[s.type](s.radius,s.height,s.radialSegments,s.heightSegments,s.openEnded,s.thetaStart,s.thetaLength);break;case"SphereGeometry":case"SphereBufferGeometry":u=new To[s.type](s.radius,s.widthSegments,s.heightSegments,s.phiStart,s.phiLength,s.thetaStart,s.thetaLength);break;case"DodecahedronGeometry":case"DodecahedronBufferGeometry":case"IcosahedronGeometry":case"IcosahedronBufferGeometry":case"OctahedronGeometry":case"OctahedronBufferGeometry":case"TetrahedronGeometry":case"TetrahedronBufferGeometry":u=new To[s.type](s.radius,s.detail);break;case"RingGeometry":case"RingBufferGeometry":u=new To[s.type](s.innerRadius,s.outerRadius,s.thetaSegments,s.phiSegments,s.thetaStart,s.thetaLength);break;case"TorusGeometry":case"TorusBufferGeometry":u=new To[s.type](s.radius,s.tube,s.radialSegments,s.tubularSegments,s.arc);break;case"TorusKnotGeometry":case"TorusKnotBufferGeometry":u=new To[s.type](s.radius,s.tube,s.tubularSegments,s.radialSegments,s.p,s.q);break;case"LatheGeometry":case"LatheBufferGeometry":u=new To[s.type](s.points,s.segments,s.phiStart,s.phiLength);break;case"PolyhedronGeometry":case"PolyhedronBufferGeometry":u=new To[s.type](s.vertices,s.indices,s.radius,s.details);break;case"ShapeGeometry":case"ShapeBufferGeometry":u=[];for(var c=0,h=s.shapes.length;c<h;c++){var l=t[s.shapes[c]];u.push(l)}u=new To[s.type](u,s.curveSegments);break;case"ExtrudeGeometry":case"ExtrudeBufferGeometry":u=[];c=0;for(h=s.shapes.length;c<h;c++)l=t[s.shapes[c]],u.push(l);c=s.options.extrudePath;void 0!==c&&(s.options.extrudePath=(new Do[c.type]).fromJSON(c));u=new To[s.type](u,s.options);break;case"BufferGeometry":u=i.parse(s);break;case"Geometry":u=n.parse(s,this.texturePath).geometry;break;default:console.warn('THREE.ObjectLoader: Unsupported geometry type "'+s.type+'"');continue}u.uuid=s.uuid;void 0!==s.name&&(u.name=s.name);!0===u.isBufferGeometry&&void 0!==s.userData&&(u.userData=s.userData);r[s.uuid]=u}return r},parseMaterials:function(e,t){var r={};if(void 0!==e){var n=new Qn;n.setTextures(t);t=0;for(var i=e.length;t<i;t++){var o=e[t];if("MultiMaterial"===o.type){for(var a=[],s=0;s<o.materials.length;s++)a.push(n.parse(o.materials[s]));r[o.uuid]=a}else r[o.uuid]=n.parse(o)}}return r},parseAnimations:function(e){for(var t=[],r=0;r<e.length;r++){var n=e[r],i=Kn.parse(n);void 0!==n.uuid&&(i.uuid=n.uuid);t.push(i)}return t},parseImages:function(e,t){function r(e){n.manager.itemStart(e);return o.load(e,function(){n.manager.itemEnd(e)},void 0,function(){n.manager.itemEnd(e);n.manager.itemError(e)})}var n=this,i={};if(void 0!==e&&0<e.length){t=new rn(t);var o=new sn(t);o.setCrossOrigin(this.crossOrigin);t=0;for(var a=e.length;t<a;t++){var s=e[t],u=s.url;if(Array.isArray(u)){i[s.uuid]=[];for(var c=0,h=u.length;c<h;c++){var l=u[c];l=/^(\/\/)|([a-z]+:(\/\/)?)/i.test(l)?l:n.texturePath+l;i[s.uuid].push(r(l))}}else l=/^(\/\/)|([a-z]+:(\/\/)?)/i.test(s.url)?s.url:n.texturePath+s.url,i[s.uuid]=r(l)}}return i},parseTextures:function(e,t){function r(e,t){if("number"===typeof e)return e;console.warn("THREE.ObjectLoader.parseTexture: Constant should be in numeric form.",e);return t[e]}var n={};if(void 0!==e)for(var i=0,o=e.length;i<o;i++){var a=e[i];void 0===a.image&&console.warn('THREE.ObjectLoader: No "image" specified for',a.uuid);void 0===t[a.image]&&console.warn("THREE.ObjectLoader: Undefined image",a.image);var s=Array.isArray(t[a.image])?new U(t[a.image]):new p(t[a.image]);s.needsUpdate=!0;s.uuid=a.uuid;void 0!==a.name&&(s.name=a.name);void 0!==a.mapping&&(s.mapping=r(a.mapping,$o));void 0!==a.offset&&s.offset.fromArray(a.offset);void 0!==a.repeat&&s.repeat.fromArray(a.repeat);void 0!==a.center&&s.center.fromArray(a.center);void 0!==a.rotation&&(s.rotation=a.rotation);void 0!==a.wrap&&(s.wrapS=r(a.wrap[0],zo),s.wrapT=r(a.wrap[1],zo));void 0!==a.format&&(s.format=a.format);void 0!==a.minFilter&&(s.minFilter=r(a.minFilter,Uo));void 0!==a.magFilter&&(s.magFilter=r(a.magFilter,Uo));void 0!==a.anisotropy&&(s.anisotropy=a.anisotropy);void 0!==a.flipY&&(s.flipY=a.flipY);n[a.uuid]=s}return n},parseObject:function(e,t,o){function r(e){void 0===t[e]&&console.warn("THREE.ObjectLoader: Undefined geometry",e);return t[e]}function n(e){if(void 0!==e){if(Array.isArray(e)){for(var t=[],r=0,n=e.length;r<n;r++){var i=e[r];void 0===o[i]&&console.warn("THREE.ObjectLoader: Undefined material",i);t.push(o[i])}return t}void 0===o[e]&&console.warn("THREE.ObjectLoader: Undefined material",e);return o[e]}}switch(e.type){case"Scene":var i=new Mt;void 0!==e.background&&Number.isInteger(e.background)&&(i.background=new w(e.background));void 0!==e.fog&&("Fog"===e.fog.type?i.fog=new St(e.fog.color,e.fog.near,e.fog.far):"FogExp2"===e.fog.type&&(i.fog=new wt(e.fog.color,e.fog.density)));break;case"PerspectiveCamera":i=new gt(e.fov,e.aspect,e.near,e.far);void 0!==e.focus&&(i.focus=e.focus);void 0!==e.zoom&&(i.zoom=e.zoom);void 0!==e.filmGauge&&(i.filmGauge=e.filmGauge);void 0!==e.filmOffset&&(i.filmOffset=e.filmOffset);void 0!==e.view&&(i.view=Object.assign({},e.view));break;case"OrthographicCamera":i=new f(e.left,e.right,e.top,e.bottom,e.near,e.far);void 0!==e.zoom&&(i.zoom=e.zoom);void 0!==e.view&&(i.view=Object.assign({},e.view));break;case"AmbientLight":i=new Dn(e.color,e.intensity);break;case"DirectionalLight":i=new Nn(e.color,e.intensity);break;case"PointLight":i=new Ln(e.color,e.intensity,e.distance,e.decay);break;case"RectAreaLight":i=new kn(e.color,e.intensity,e.width,e.height);break;case"SpotLight":i=new Rn(e.color,e.intensity,e.distance,e.angle,e.penumbra,e.decay);break;case"HemisphereLight":i=new Pn(e.color,e.groundColor,e.intensity);break;case"SkinnedMesh":console.warn("THREE.ObjectLoader.parseObject() does not support SkinnedMesh yet.");case"Mesh":i=r(e.geometry);var a=n(e.material);i=i.bones&&0<i.bones.length?new Rt(i,a):new $(i,a);break;case"LOD":i=new Pt;break;case"Line":i=new It(r(e.geometry),n(e.material),e.mode);break;case"LineLoop":i=new Dt(r(e.geometry),n(e.material));break;case"LineSegments":i=new Nt(r(e.geometry),n(e.material));break;case"PointCloud":case"Points":i=new Bt(r(e.geometry),n(e.material));break;case"Sprite":i=new Ot(n(e.material));break;case"Group":i=new mt;break;default:i=new h}i.uuid=e.uuid;void 0!==e.name&&(i.name=e.name);void 0!==e.matrix?(i.matrix.fromArray(e.matrix),void 0!==e.matrixAutoUpdate&&(i.matrixAutoUpdate=e.matrixAutoUpdate),i.matrixAutoUpdate&&i.matrix.decompose(i.position,i.quaternion,i.scale)):(void 0!==e.position&&i.position.fromArray(e.position),void 0!==e.rotation&&i.rotation.fromArray(e.rotation),void 0!==e.quaternion&&i.quaternion.fromArray(e.quaternion),void 0!==e.scale&&i.scale.fromArray(e.scale));void 0!==e.castShadow&&(i.castShadow=e.castShadow);void 0!==e.receiveShadow&&(i.receiveShadow=e.receiveShadow);e.shadow&&(void 0!==e.shadow.bias&&(i.shadow.bias=e.shadow.bias),void 0!==e.shadow.radius&&(i.shadow.radius=e.shadow.radius),void 0!==e.shadow.mapSize&&i.shadow.mapSize.fromArray(e.shadow.mapSize),void 0!==e.shadow.camera&&(i.shadow.camera=this.parseObject(e.shadow.camera)));void 0!==e.visible&&(i.visible=e.visible);void 0!==e.frustumCulled&&(i.frustumCulled=e.frustumCulled);void 0!==e.renderOrder&&(i.renderOrder=e.renderOrder);void 0!==e.userData&&(i.userData=e.userData);void 0!==e.layers&&(i.layers.mask=e.layers);if(void 0!==e.children){a=e.children;for(var s=0;s<a.length;s++)i.add(this.parseObject(a[s],t,o))}if("LOD"===e.type)for(e=e.levels,a=0;a<e.length;a++){s=e[a];var u=i.getObjectByProperty("uuid",s.object);void 0!==u&&i.addLevel(u,s.distance)}return i}});var $o={UVMapping:300,CubeReflectionMapping:301,CubeRefractionMapping:302,EquirectangularReflectionMapping:303,EquirectangularRefractionMapping:304,SphericalReflectionMapping:305,CubeUVReflectionMapping:306,CubeUVRefractionMapping:307},zo={RepeatWrapping:1e3,ClampToEdgeWrapping:1001,MirroredRepeatWrapping:1002},Uo={NearestFilter:1003,NearestMipMapNearestFilter:1004,NearestMipMapLinearFilter:1005,LinearFilter:1006,LinearMipMapNearestFilter:1007,LinearMipMapLinearFilter:1008};ii.prototype={constructor:ii,setOptions:function(e){this.options=e;return this},load:function(t,r,e,n){void 0===t&&(t="");void 0!==this.path&&(t=this.path+t);t=this.manager.resolveURL(t);var i=this,o=Po.get(t);if(void 0!==o)return i.manager.itemStart(t),setTimeout(function(){r&&r(o);i.manager.itemEnd(t)},0),o;fetch(t).then(function(e){return e.blob()}).then(function(e){return createImageBitmap(e,i.options)}).then(function(e){Po.add(t,e);r&&r(e);i.manager.itemEnd(t)}).catch(function(e){n&&n(e);i.manager.itemEnd(t);i.manager.itemError(t)})},setCrossOrigin:function(){return this},setPath:function(e){this.path=e;return this}};Object.assign(oi.prototype,{moveTo:function(e,t){this.currentPath=new Cn;this.subPaths.push(this.currentPath);this.currentPath.moveTo(e,t)},lineTo:function(e,t){this.currentPath.lineTo(e,t)},quadraticCurveTo:function(e,t,r,n){this.currentPath.quadraticCurveTo(e,t,r,n)},bezierCurveTo:function(e,t,r,n,i,o){this.currentPath.bezierCurveTo(e,t,r,n,i,o)},splineThru:function(e){this.currentPath.splineThru(e)},toShapes:function(e,t){function r(e){for(var t=[],r=0,n=e.length;r<n;r++){var i=e[r],o=new Tn;o.curves=i.curves;t.push(o)}return t}function n(e,t){for(var r=t.length,n=!1,i=r-1,o=0;o<r;i=o++){var a=t[i],s=t[o],u=s.x-a.x,c=s.y-a.y;if(Math.abs(c)>Number.EPSILON){if(0>c&&(a=t[o],u=-u,s=t[i],c=-c),!(e.y<a.y||e.y>s.y))if(e.y===a.y){if(e.x===a.x)return!0}else{i=c*(e.x-a.x)-u*(e.y-a.y);if(0===i)return!0;0>i||(n=!n)}}else if(e.y===a.y&&(s.x<=e.x&&e.x<=a.x||a.x<=e.x&&e.x<=s.x))return!0}return n}var i=Eo.isClockWise,o=this.subPaths;if(0===o.length)return[];if(!0===t)return r(o);t=[];if(1===o.length){var a=o[0];var s=new Tn;s.curves=a.curves;t.push(s);return t}var u=!i(o[0].getPoints());u=e?!u:u;s=[];var c=[],h=[],l=0;c[l]=void 0;h[l]=[];for(var p=0,f=o.length;p<f;p++){a=o[p];var d=a.getPoints();var v=i(d);(v=e?!v:v)?(!u&&c[l]&&l++,c[l]={s:new Tn,p:d},c[l].s.curves=a.curves,u&&l++,h[l]=[]):h[l].push({h:a,p:d[0]})}if(!c[0])return r(o);if(1<c.length){p=!1;e=[];i=0;for(o=c.length;i<o;i++)s[i]=[];i=0;for(o=c.length;i<o;i++)for(a=h[i],v=0;v<a.length;v++){u=a[v];l=!0;for(d=0;d<c.length;d++)n(u.p,c[d].p)&&(i!==d&&e.push({froms:i,tos:d,hole:v}),l?(l=!1,s[d].push(u)):p=!0);l&&s[i].push(u)}0<e.length&&(p||(h=s))}p=0;for(i=c.length;p<i;p++)for(s=c[p].s,t.push(s),e=h[p],o=0,a=e.length;o<a;o++)s.holes.push(e[o].h);return t}});Object.assign(ai.prototype,{isFont:!0,generateShapes:function(e,t){void 0===t&&(t=100);var r=[],n=t;t=this.data;var i=Array.from?Array.from(e):String(e).split("");n/=t.resolution;var o=(t.boundingBox.yMax-t.boundingBox.yMin+t.underlineThickness)*n;e=[];for(var a=0,s=0,u=0;u<i.length;u++){var c=i[u];if("\n"===c)a=0,s-=o;else{var h=n;var l=a,p=s;if(c=t.glyphs[c]||t.glyphs["?"]){var f=new oi;if(c.o)for(var d=c._cachedOutline||(c._cachedOutline=c.o.split(" ")),v=0,m=d.length;v<m;)switch(d[v++]){case"m":var g=d[v++]*h+l;var y=d[v++]*h+p;f.moveTo(g,y);break;case"l":g=d[v++]*h+l;y=d[v++]*h+p;f.lineTo(g,y);break;case"q":var _=d[v++]*h+l;var b=d[v++]*h+p;var x=d[v++]*h+l;var w=d[v++]*h+p;f.quadraticCurveTo(x,w,_,b);break;case"b":_=d[v++]*h+l,b=d[v++]*h+p,x=d[v++]*h+l,w=d[v++]*h+p,g=d[v++]*h+l,y=d[v++]*h+p,f.bezierCurveTo(x,w,g,y,_,b)}h={offsetX:c.ha*h,path:f}}else h=void 0;a+=h.offsetX;e.push(h.path)}}t=0;for(i=e.length;t<i;t++)Array.prototype.push.apply(r,e[t].toShapes());return r}});Object.assign(si.prototype,{load:function(e,n,t,r){var i=this,o=new nn(this.manager);o.setPath(this.path);o.load(e,function(t){try{var 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);n&&n(t)},t,r)},parse:function(e){return new ai(e)},setPath:function(e){this.path=e;return this}});var Go,Vo={getContext:function(){void 0===Go&&(Go=new(window.AudioContext||window.webkitAudioContext));return Go},setContext:function(e){Go=e}};Object.assign(ui.prototype,{load:function(e,t,r,n){var i=new nn(this.manager);i.setResponseType("arraybuffer");i.load(e,function(e){e=e.slice(0);Vo.getContext().decodeAudioData(e,function(e){t(e)})},r,n)}});Object.assign(ci.prototype,{update:function(){var a,s,u,c,h,l,p,f,d=new xe,v=new xe;return function(e){if(a!==this||s!==e.focus||u!==e.fov||c!==e.aspect*this.aspect||h!==e.near||l!==e.far||p!==e.zoom||f!==this.eyeSep){a=this;s=e.focus;u=e.fov;c=e.aspect*this.aspect;h=e.near;l=e.far;p=e.zoom;var t=e.projectionMatrix.clone();f=this.eyeSep/2;var r=f*h/s,n=h*Math.tan(eo.DEG2RAD*u*.5)/p;v.elements[12]=-f;d.elements[12]=f;var i=-n*c+r;var o=n*c+r;t.elements[0]=2*h/(o-i);t.elements[8]=(o+i)/(o-i);this.cameraL.projectionMatrix.copy(t);i=-n*c-r;o=n*c-r;t.elements[0]=2*h/(o-i);t.elements[8]=(o+i)/(o-i);this.cameraR.projectionMatrix.copy(t)}this.cameraL.matrixWorld.copy(e.matrixWorld).multiply(v);this.cameraR.matrixWorld.copy(e.matrixWorld).multiply(d)}}()});hi.prototype=Object.create(h.prototype);hi.prototype.constructor=hi;li.prototype=Object.assign(Object.create(h.prototype),{constructor:li,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);return this},getFilter:function(){return this.filter},setFilter:function(e){null!==this.filter?(this.gain.disconnect(this.filter),this.filter.disconnect(this.context.destination)):this.gain.disconnect(this.context.destination);this.filter=e;this.gain.connect(this.filter);this.filter.connect(this.context.destination);return this},getMasterVolume:function(){return this.gain.gain.value},setMasterVolume:function(e){this.gain.gain.setTargetAtTime(e,this.context.currentTime,.01);return this},updateMatrixWorld:function(){var r=new we,n=new s,i=new we,o=new we;return function(e){h.prototype.updateMatrixWorld.call(this,e);e=this.context.listener;var t=this.up;this.matrixWorld.decompose(r,n,i);o.set(0,0,-1).applyQuaternion(n);e.positionX?(e.positionX.setValueAtTime(r.x,this.context.currentTime),e.positionY.setValueAtTime(r.y,this.context.currentTime),e.positionZ.setValueAtTime(r.z,this.context.currentTime),e.forwardX.setValueAtTime(o.x,this.context.currentTime),e.forwardY.setValueAtTime(o.y,this.context.currentTime),e.forwardZ.setValueAtTime(o.z,this.context.currentTime),e.upX.setValueAtTime(t.x,this.context.currentTime),e.upY.setValueAtTime(t.y,this.context.currentTime),e.upZ.setValueAtTime(t.z,this.context.currentTime)):(e.setPosition(r.x,r.y,r.z),e.setOrientation(o.x,o.y,o.z,t.x,t.y,t.z))}}()});pi.prototype=Object.assign(Object.create(h.prototype),{constructor:pi,getOutput:function(){return this.gain},setNodeSource:function(e){this.hasPlaybackControl=!1;this.sourceType="audioNode";this.source=e;this.connect();return this},setMediaElementSource:function(e){this.hasPlaybackControl=!1;this.sourceType="mediaNode";this.source=this.context.createMediaElementSource(e);this.connect();return this},setBuffer:function(e){this.buffer=e;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.");else{var e=this.context.createBufferSource();e.buffer=this.buffer;e.loop=this.loop;e.onended=this.onEnded.bind(this);e.playbackRate.setValueAtTime(this.playbackRate,this.startTime);this.startTime=this.context.currentTime;e.start(this.startTime,this.offset);this.isPlaying=!0;this.source=e;return this.connect()}},pause:function(){if(!1===this.hasPlaybackControl)console.warn("THREE.Audio: this Audio has no playback control.");else return!0===this.isPlaying&&(this.source.stop(),this.source.onended=null,this.offset+=(this.context.currentTime-this.startTime)*this.playbackRate,this.isPlaying=!1),this},stop:function(){if(!1===this.hasPlaybackControl)console.warn("THREE.Audio: this Audio has no playback control.");else return this.source.stop(),this.source.onended=null,this.offset=0,this.isPlaying=!1,this},connect:function(){if(0<this.filters.length){this.source.connect(this.filters[0]);for(var e=1,t=this.filters.length;e<t;e++)this.filters[e-1].connect(this.filters[e]);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 e=1,t=this.filters.length;e<t;e++)this.filters[e-1].disconnect(this.filters[e]);this.filters[this.filters.length-1].disconnect(this.getOutput())}else this.source.disconnect(this.getOutput());return this},getFilters:function(){return this.filters},setFilters:function(e){e||(e=[]);!0===this.isPlaying?(this.disconnect(),this.filters=e,this.connect()):this.filters=e;return this},getFilter:function(){return this.getFilters()[0]},setFilter:function(e){return this.setFilters(e?[e]:[])},setPlaybackRate:function(e){if(!1===this.hasPlaybackControl)console.warn("THREE.Audio: this Audio has no playback control.");else return this.playbackRate=e,!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(e){if(!1===this.hasPlaybackControl)console.warn("THREE.Audio: this Audio has no playback control.");else return this.loop=e,!0===this.isPlaying&&(this.source.loop=this.loop),this},getVolume:function(){return this.gain.gain.value},setVolume:function(e){this.gain.gain.setTargetAtTime(e,this.context.currentTime,.01);return this}});fi.prototype=Object.assign(Object.create(pi.prototype),{constructor:fi,getOutput:function(){return this.panner},getRefDistance:function(){return this.panner.refDistance},setRefDistance:function(e){this.panner.refDistance=e;return this},getRolloffFactor:function(){return this.panner.rolloffFactor},setRolloffFactor:function(e){this.panner.rolloffFactor=e;return this},getDistanceModel:function(){return this.panner.distanceModel},setDistanceModel:function(e){this.panner.distanceModel=e;return this},getMaxDistance:function(){return this.panner.maxDistance},setMaxDistance:function(e){this.panner.maxDistance=e;return this},setDirectionalCone:function(e,t,r){this.panner.coneInnerAngle=e;this.panner.coneOuterAngle=t;this.panner.coneOuterGain=r;return this},updateMatrixWorld:function(){var t=new we,r=new s,n=new we,i=new we;return function(e){h.prototype.updateMatrixWorld.call(this,e);e=this.panner;this.matrixWorld.decompose(t,r,n);i.set(0,0,1).applyQuaternion(r);e.setPosition(t.x,t.y,t.z);e.setOrientation(i.x,i.y,i.z)}}()});Object.assign(di.prototype,{getFrequencyData:function(){this.analyser.getByteFrequencyData(this.data);return this.data},getAverageFrequency:function(){for(var e=0,t=this.getFrequencyData(),r=0;r<t.length;r++)e+=t[r];return e/t.length}});Object.assign(vi.prototype,{accumulate:function(e,t){var r=this.buffer,n=this.valueSize;e=e*n+n;var i=this.cumulativeWeight;if(0===i){for(i=0;i!==n;++i)r[e+i]=r[i];i=t}else i+=t,this._mixBufferRegion(r,e,0,t/i,n);this.cumulativeWeight=i},apply:function(e){var t=this.valueSize,r=this.buffer;e=e*t+t;var n=this.cumulativeWeight,i=this.binding;this.cumulativeWeight=0;1>n&&this._mixBufferRegion(r,e,3*t,1-n,t);n=t;for(var o=t+t;n!==o;++n)if(r[n]!==r[n+t]){i.setValue(r,e);break}},saveOriginalState:function(){var e=this.buffer,t=this.valueSize,r=3*t;this.binding.getValue(e,r);for(var n=t;n!==r;++n)e[n]=e[r+n%t];this.cumulativeWeight=0},restoreOriginalState:function(){this.binding.setValue(this.buffer,3*this.valueSize)},_select:function(e,t,r,n,i){if(.5<=n)for(n=0;n!==i;++n)e[t+n]=e[r+n]},_slerp:function(e,t,r,n){s.slerpFlat(e,t,e,t,e,r,n)},_lerp:function(e,t,r,n,i){for(var o=1-n,a=0;a!==i;++a){var s=t+a;e[s]=e[s]*o+e[r+a]*n}}});Object.assign(mi.prototype,{getValue:function(e,t){this.bind();var r=this._bindings[this._targetGroup.nCachedObjects_];void 0!==r&&r.getValue(e,t)},setValue:function(e,t){for(var r=this._bindings,n=this._targetGroup.nCachedObjects_,i=r.length;n!==i;++n)r[n].setValue(e,t)},bind:function(){for(var e=this._bindings,t=this._targetGroup.nCachedObjects_,r=e.length;t!==r;++t)e[t].bind()},unbind:function(){for(var e=this._bindings,t=this._targetGroup.nCachedObjects_,r=e.length;t!==r;++t)e[t].unbind()}});Object.assign(gi,{Composite:mi,create:function(e,t,r){return e&&e.isAnimationObjectGroup?new gi.Composite(e,t,r):new gi(e,t,r)},sanitizeNodeName:function(){var t=/[\[\]\.:\/]/g;return function(e){return e.replace(/\s/g,"_").replace(t,"")}}(),parseTrackName:function(){var e="[^"+"\\[\\]\\.:\\/".replace("\\.","")+"]",t=/((?:WC+[\/:])*)/.source.replace("WC","[^\\[\\]\\.:\\/]");e=/(WCOD+)?/.source.replace("WCOD",e);var r=/(?:\.(WC+)(?:\[(.+)\])?)?/.source.replace("WC","[^\\[\\]\\.:\\/]"),n=/\.(WC+)(?:\[(.+)\])?/.source.replace("WC","[^\\[\\]\\.:\\/]"),i=new RegExp("^"+t+e+r+n+"$"),o=["material","materials","bones"];return function(e){var t=i.exec(e);if(!t)throw Error("PropertyBinding: Cannot parse trackName: "+e);t={nodeName:t[2],objectName:t[3],objectIndex:t[4],propertyName:t[5],propertyIndex:t[6]};var r=t.nodeName&&t.nodeName.lastIndexOf(".");if(void 0!==r&&-1!==r){var n=t.nodeName.substring(r+1);-1!==o.indexOf(n)&&(t.nodeName=t.nodeName.substring(0,r),t.objectName=n)}if(null===t.propertyName||0===t.propertyName.length)throw Error("PropertyBinding: can not parse propertyName from trackName: "+e);return t}}(),findNode:function(e,n){if(!n||""===n||"root"===n||"."===n||-1===n||n===e.name||n===e.uuid)return e;if(e.skeleton){var t=e.skeleton.getBoneByName(n);if(void 0!==t)return t}if(e.children){var i=function(e){for(var t=0;t<e.length;t++){var r=e[t];if(r.name===n||r.uuid===n||(r=i(r.children)))return r}return null};if(e=i(e.children))return e}return null}});Object.assign(gi.prototype,{_getValue_unavailable:function(){},_setValue_unavailable:function(){},BindingType:{Direct:0,EntireArray:1,ArrayElement:2,HasFromToArray:3},Versioning:{None:0,NeedsUpdate:1,MatrixWorldNeedsUpdate:2},GetterByBindingType:[function(e,t){e[t]=this.node[this.propertyName]},function(e,t){for(var r=this.resolvedProperty,n=0,i=r.length;n!==i;++n)e[t++]=r[n]},function(e,t){e[t]=this.resolvedProperty[this.propertyIndex]},function(e,t){this.resolvedProperty.toArray(e,t)}],SetterByBindingTypeAndVersioning:[[function(e,t){this.targetObject[this.propertyName]=e[t]},function(e,t){this.targetObject[this.propertyName]=e[t];this.targetObject.needsUpdate=!0},function(e,t){this.targetObject[this.propertyName]=e[t];this.targetObject.matrixWorldNeedsUpdate=!0}],[function(e,t){for(var r=this.resolvedProperty,n=0,i=r.length;n!==i;++n)r[n]=e[t++]},function(e,t){for(var r=this.resolvedProperty,n=0,i=r.length;n!==i;++n)r[n]=e[t++];this.targetObject.needsUpdate=!0},function(e,t){for(var r=this.resolvedProperty,n=0,i=r.length;n!==i;++n)r[n]=e[t++];this.targetObject.matrixWorldNeedsUpdate=!0}],[function(e,t){this.resolvedProperty[this.propertyIndex]=e[t]},function(e,t){this.resolvedProperty[this.propertyIndex]=e[t];this.targetObject.needsUpdate=!0},function(e,t){this.resolvedProperty[this.propertyIndex]=e[t];this.targetObject.matrixWorldNeedsUpdate=!0}],[function(e,t){this.resolvedProperty.fromArray(e,t)},function(e,t){this.resolvedProperty.fromArray(e,t);this.targetObject.needsUpdate=!0},function(e,t){this.resolvedProperty.fromArray(e,t);this.targetObject.matrixWorldNeedsUpdate=!0}]],getValue:function(e,t){this.bind();this.getValue(e,t)},setValue:function(e,t){this.bind();this.setValue(e,t)},bind:function(){var e=this.node,t=this.parsedPath,r=t.objectName,n=t.propertyName,i=t.propertyIndex;e||(this.node=e=gi.findNode(this.rootNode,t.nodeName)||this.rootNode);this.getValue=this._getValue_unavailable;this.setValue=this._setValue_unavailable;if(e){if(r){var o=t.objectIndex;switch(r){case"materials":if(!e.material){console.error("THREE.PropertyBinding: Can not bind to material as node does not have a material.",this);return}if(!e.material.materials){console.error("THREE.PropertyBinding: Can not bind to material.materials as node.material does not have a materials array.",this);return}e=e.material.materials;break;case"bones":if(!e.skeleton){console.error("THREE.PropertyBinding: Can not bind to bones as node does not have a skeleton.",this);return}e=e.skeleton.bones;for(r=0;r<e.length;r++)if(e[r].name===o){o=r;break}break;default:if(void 0===e[r]){console.error("THREE.PropertyBinding: Can not bind to objectName of node undefined.",this);return}e=e[r]}if(void 0!==o){if(void 0===e[o]){console.error("THREE.PropertyBinding: Trying to bind to objectIndex of objectName, but is undefined.",this,e);return}e=e[o]}}o=e[n];if(void 0===o)console.error("THREE.PropertyBinding: Trying to update property for track: "+t.nodeName+"."+n+" but it wasn't found.",e);else{t=this.Versioning.None;void 0!==e.needsUpdate?(t=this.Versioning.NeedsUpdate,this.targetObject=e):void 0!==e.matrixWorldNeedsUpdate&&(t=this.Versioning.MatrixWorldNeedsUpdate,this.targetObject=e);r=this.BindingType.Direct;if(void 0!==i){if("morphTargetInfluences"===n){if(!e.geometry){console.error("THREE.PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.",this);return}if(e.geometry.isBufferGeometry){if(!e.geometry.morphAttributes){console.error("THREE.PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.morphAttributes.",this);return}for(r=0;r<this.node.geometry.morphAttributes.position.length;r++)if(e.geometry.morphAttributes.position[r].name===i){i=r;break}}else{if(!e.geometry.morphTargets){console.error("THREE.PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.morphTargets.",this);return}for(r=0;r<this.node.geometry.morphTargets.length;r++)if(e.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):Array.isArray(o)?(r=this.BindingType.EntireArray,this.resolvedProperty=o):this.propertyName=n;this.getValue=this.GetterByBindingType[r];this.setValue=this.SetterByBindingTypeAndVersioning[r][t]}}else console.error("THREE.PropertyBinding: 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(gi.prototype,{_getValue_unbound:gi.prototype.getValue,_setValue_unbound:gi.prototype.setValue});Object.assign(yi.prototype,{isAnimationObjectGroup:!0,add:function(){for(var e=this._objects,t=e.length,r=this.nCachedObjects_,n=this._indicesByUUID,i=this._paths,o=this._parsedPaths,a=this._bindings,s=a.length,u=void 0,c=0,h=arguments.length;c!==h;++c){var l=arguments[c],p=l.uuid,f=n[p];if(void 0===f){f=t++;n[p]=f;e.push(l);p=0;for(var d=s;p!==d;++p)a[p].push(new gi(l,i[p],o[p]))}else if(f<r){u=e[f];var v=--r;d=e[v];n[d.uuid]=f;e[f]=d;n[p]=v;e[v]=l;p=0;for(d=s;p!==d;++p){var m=a[p],g=m[f];m[f]=m[v];void 0===g&&(g=new gi(l,i[p],o[p]));m[v]=g}}else e[f]!==u&&console.error("THREE.AnimationObjectGroup: Different objects with the same UUID detected. Clean the caches or recreate your infrastructure when reloading scenes.")}this.nCachedObjects_=r},remove:function(){for(var e=this._objects,t=this.nCachedObjects_,r=this._indicesByUUID,n=this._bindings,i=n.length,o=0,a=arguments.length;o!==a;++o){var s=arguments[o],u=s.uuid,c=r[u];if(void 0!==c&&c>=t){var h=t++,l=e[h];r[l.uuid]=c;e[c]=l;r[u]=h;e[h]=s;s=0;for(u=i;s!==u;++s){l=n[s];var p=l[c];l[c]=l[h];l[h]=p}}}this.nCachedObjects_=t},uncache:function(){for(var e=this._objects,t=e.length,r=this.nCachedObjects_,n=this._indicesByUUID,i=this._bindings,o=i.length,a=0,s=arguments.length;a!==s;++a){var u=arguments[a].uuid,c=n[u];if(void 0!==c)if(delete n[u],c<r){u=--r;var h=e[u],l=--t,p=e[l];n[h.uuid]=c;e[c]=h;n[p.uuid]=u;e[u]=p;e.pop();h=0;for(p=o;h!==p;++h){var f=i[h],d=f[l];f[c]=f[u];f[u]=d;f.pop()}}else for(l=--t,p=e[l],n[p.uuid]=c,e[c]=p,e.pop(),h=0,p=o;h!==p;++h)f=i[h],f[c]=f[l],f.pop()}this.nCachedObjects_=r},subscribe_:function(e,t){var r=this._bindingsIndicesByPath,n=r[e],i=this._bindings;if(void 0!==n)return i[n];var o=this._paths,a=this._parsedPaths,s=this._objects,u=this.nCachedObjects_,c=Array(s.length);n=i.length;r[e]=n;o.push(e);a.push(t);i.push(c);r=u;for(n=s.length;r!==n;++r)c[r]=new gi(s[r],e,t);return c},unsubscribe_:function(e){var t=this._bindingsIndicesByPath,r=t[e];if(void 0!==r){var n=this._paths,i=this._parsedPaths,o=this._bindings,a=o.length-1,s=o[a];t[e[a]]=r;o[r]=s;o.pop();i[r]=i[a];i.pop();n[r]=n[a];n.pop()}}});Object.assign(_i.prototype,{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&&this._mixer._isActiveAction(this)},isScheduled:function(){return this._mixer._isActiveAction(this)},startAt:function(e){this._startTime=e;return this},setLoop:function(e,t){this.loop=e;this.repetitions=t;return this},setEffectiveWeight:function(e){this.weight=e;this._effectiveWeight=this.enabled?e:0;return this.stopFading()},getEffectiveWeight:function(){return this._effectiveWeight},fadeIn:function(e){return this._scheduleFading(e,0,1)},fadeOut:function(e){return this._scheduleFading(e,1,0)},crossFadeFrom:function(e,t,r){e.fadeOut(t);this.fadeIn(t);if(r){r=this._clip.duration;var n=e._clip.duration,i=r/n;e.warp(1,n/r,t);this.warp(i,1,t)}return this},crossFadeTo:function(e,t,r){return e.crossFadeFrom(this,t,r)},stopFading:function(){var e=this._weightInterpolant;null!==e&&(this._weightInterpolant=null,this._mixer._takeBackControlInterpolant(e));return this},setEffectiveTimeScale:function(e){this.timeScale=e;this._effectiveTimeScale=this.paused?0:e;return this.stopWarping()},getEffectiveTimeScale:function(){return this._effectiveTimeScale},setDuration:function(e){this.timeScale=this._clip.duration/e;return this.stopWarping()},syncWith:function(e){this.time=e.time;this.timeScale=e.timeScale;return this.stopWarping()},halt:function(e){return this.warp(this._effectiveTimeScale,0,e)},warp:function(e,t,r){var n=this._mixer,i=n.time,o=this._timeScaleInterpolant,a=this.timeScale;null===o&&(this._timeScaleInterpolant=o=n._lendControlInterpolant());n=o.parameterPositions;o=o.sampleValues;n[0]=i;n[1]=i+r;o[0]=e/a;o[1]=t/a;return this},stopWarping:function(){var e=this._timeScaleInterpolant;null!==e&&(this._timeScaleInterpolant=null,this._mixer._takeBackControlInterpolant(e));return this},getMixer:function(){return this._mixer},getClip:function(){return this._clip},getRoot:function(){return this._localRoot||this._mixer._root},_update:function(e,t,r,n){if(this.enabled){var i=this._startTime;if(null!==i){t=(e-i)*r;if(0>t||0===r)return;this._startTime=null;t*=r}t*=this._updateTimeScale(e);r=this._updateTime(t);e=this._updateWeight(e);if(0<e){t=this._interpolants;i=this._propertyBindings;for(var o=0,a=t.length;o!==a;++o)t[o].evaluate(r),i[o].accumulate(n,e)}}else this._updateWeight(e)},_updateWeight:function(e){var t=0;if(this.enabled){t=this.weight;var r=this._weightInterpolant;if(null!==r){var n=r.evaluate(e)[0];t*=n;e>r.parameterPositions[1]&&(this.stopFading(),0===n&&(this.enabled=!1))}}return this._effectiveWeight=t},_updateTimeScale:function(e){var t=0;if(!this.paused){t=this.timeScale;var r=this._timeScaleInterpolant;if(null!==r){var n=r.evaluate(e)[0];t*=n;e>r.parameterPositions[1]&&(this.stopWarping(),0===t?this.paused=!0:this.timeScale=t)}}return this._effectiveTimeScale=t},_updateTime:function(e){var t=this.time+e,r=this._clip.duration,n=this.loop,i=this._loopCount,o=2202===n;if(0===e)return-1===i?t:o&&1===(i&1)?r-t:t;if(2200===n)e:{if(-1===i&&(this._loopCount=0,this._setEndings(!0,!0,!1)),t>=r)t=r;else if(0>t)t=0;else break e;this.clampWhenFinished?this.paused=!0:this.enabled=!1;this._mixer.dispatchEvent({type:"finished",action:this,direction:0>e?-1:1})}else{-1===i&&(0<=e?(i=0,this._setEndings(!0,0===this.repetitions,o)):this._setEndings(0===this.repetitions,!0,o));if(t>=r||0>t){n=Math.floor(t/r);t-=r*n;i+=Math.abs(n);var a=this.repetitions-i;0>=a?(this.clampWhenFinished?this.paused=!0:this.enabled=!1,t=0<e?r:0,this._mixer.dispatchEvent({type:"finished",action:this,direction:0<e?1:-1})):(1===a?(e=0>e,this._setEndings(e,!e,o)):this._setEndings(!1,!1,o),this._loopCount=i,this._mixer.dispatchEvent({type:"loop",action:this,loopDelta:n}))}if(o&&1===(i&1))return this.time=t,r-t}return this.time=t},_setEndings:function(e,t,r){var n=this._interpolantSettings;r?(n.endingStart=2401,n.endingEnd=2401):(n.endingStart=e?this.zeroSlopeAtStart?2401:2400:2402,n.endingEnd=t?this.zeroSlopeAtEnd?2401:2400:2402)},_scheduleFading:function(e,t,r){var n=this._mixer,i=n.time,o=this._weightInterpolant;null===o&&(this._weightInterpolant=o=n._lendControlInterpolant());n=o.parameterPositions;o=o.sampleValues;n[0]=i;o[0]=t;n[1]=i+e;o[1]=r;return this}});bi.prototype=Object.assign(Object.create(t.prototype),{constructor:bi,_bindAction:function(e,t){var r=e._localRoot||this._root,n=e._clip.tracks,i=n.length,o=e._propertyBindings;e=e._interpolants;var a=r.uuid,s=this._bindingsByRootAndName,u=s[a];void 0===u&&(u={},s[a]=u);for(s=0;s!==i;++s){var c=n[s],h=c.name,l=u[h];if(void 0===l){l=o[s];if(void 0!==l){null===l._cacheIndex&&(++l.referenceCount,this._addInactiveBinding(l,a,h));continue}l=new vi(gi.create(r,h,t&&t._propertyBindings[s].binding.parsedPath),c.ValueTypeName,c.getValueSize());++l.referenceCount;this._addInactiveBinding(l,a,h)}o[s]=l;e[s].resultBuffer=l.buffer}},_activateAction:function(e){if(!this._isActiveAction(e)){if(null===e._cacheIndex){var t=(e._localRoot||this._root).uuid,r=e._clip.uuid,n=this._actionsByClip[r];this._bindAction(e,n&&n.knownActions[0]);this._addInactiveAction(e,r,t)}t=e._propertyBindings;r=0;for(n=t.length;r!==n;++r){var i=t[r];0===i.useCount++&&(this._lendBinding(i),i.saveOriginalState())}this._lendAction(e)}},_deactivateAction:function(e){if(this._isActiveAction(e)){for(var t=e._propertyBindings,r=0,n=t.length;r!==n;++r){var i=t[r];0===--i.useCount&&(i.restoreOriginalState(),this._takeBackBinding(i))}this._takeBackAction(e)}},_initMemoryManager:function(){this._actions=[];this._nActiveActions=0;this._actionsByClip={};this._bindings=[];this._nActiveBindings=0;this._bindingsByRootAndName={};this._controlInterpolants=[];this._nActiveControlInterpolants=0;var e=this;this.stats={actions:{get total(){return e._actions.length},get inUse(){return e._nActiveActions}},bindings:{get total(){return e._bindings.length},get inUse(){return e._nActiveBindings}},controlInterpolants:{get total(){return e._controlInterpolants.length},get inUse(){return e._nActiveControlInterpolants}}}},_isActiveAction:function(e){e=e._cacheIndex;return null!==e&&e<this._nActiveActions},_addInactiveAction:function(e,t,r){var n=this._actions,i=this._actionsByClip,o=i[t];void 0===o?(o={knownActions:[e],actionByRoot:{}},e._byClipCacheIndex=0,i[t]=o):(t=o.knownActions,e._byClipCacheIndex=t.length,t.push(e));e._cacheIndex=n.length;n.push(e);o.actionByRoot[r]=e},_removeInactiveAction:function(e){var t=this._actions,r=t[t.length-1],n=e._cacheIndex;r._cacheIndex=n;t[n]=r;t.pop();e._cacheIndex=null;t=e._clip.uuid;r=this._actionsByClip;n=r[t];var i=n.knownActions,o=i[i.length-1],a=e._byClipCacheIndex;o._byClipCacheIndex=a;i[a]=o;i.pop();e._byClipCacheIndex=null;delete n.actionByRoot[(e._localRoot||this._root).uuid];0===i.length&&delete r[t];this._removeInactiveBindingsForAction(e)},_removeInactiveBindingsForAction:function(e){e=e._propertyBindings;for(var t=0,r=e.length;t!==r;++t){var n=e[t];0===--n.referenceCount&&this._removeInactiveBinding(n)}},_lendAction:function(e){var t=this._actions,r=e._cacheIndex,n=this._nActiveActions++,i=t[n];e._cacheIndex=n;t[n]=e;i._cacheIndex=r;t[r]=i},_takeBackAction:function(e){var t=this._actions,r=e._cacheIndex,n=--this._nActiveActions,i=t[n];e._cacheIndex=n;t[n]=e;i._cacheIndex=r;t[r]=i},_addInactiveBinding:function(e,t,r){var n=this._bindingsByRootAndName,i=n[t],o=this._bindings;void 0===i&&(i={},n[t]=i);i[r]=e;e._cacheIndex=o.length;o.push(e)},_removeInactiveBinding:function(e){var t=this._bindings,r=e.binding,n=r.rootNode.uuid;r=r.path;var i=this._bindingsByRootAndName,o=i[n],a=t[t.length-1];e=e._cacheIndex;a._cacheIndex=e;t[e]=a;t.pop();delete o[r];e:{for(var s in o)break e;delete i[n]}},_lendBinding:function(e){var t=this._bindings,r=e._cacheIndex,n=this._nActiveBindings++,i=t[n];e._cacheIndex=n;t[n]=e;i._cacheIndex=r;t[r]=i},_takeBackBinding:function(e){var t=this._bindings,r=e._cacheIndex,n=--this._nActiveBindings,i=t[n];e._cacheIndex=n;t[n]=e;i._cacheIndex=r;t[r]=i},_lendControlInterpolant:function(){var e=this._controlInterpolants,t=this._nActiveControlInterpolants++,r=e[t];void 0===r&&(r=new $n(new Float32Array(2),new Float32Array(2),1,this._controlInterpolantsResultBuffer),r.__cacheIndex=t,e[t]=r);return r},_takeBackControlInterpolant:function(e){var t=this._controlInterpolants,r=e.__cacheIndex,n=--this._nActiveControlInterpolants,i=t[n];e.__cacheIndex=n;t[n]=e;i.__cacheIndex=r;t[r]=i},_controlInterpolantsResultBuffer:new Float32Array(1),clipAction:function(e,t){var r=t||this._root,n=r.uuid;r="string"===typeof e?Kn.findByName(r,e):e;e=null!==r?r.uuid:e;var i=this._actionsByClip[e],o=null;if(void 0!==i){o=i.actionByRoot[n];if(void 0!==o)return o;o=i.knownActions[0];null===r&&(r=o._clip)}if(null===r)return null;t=new _i(this,r,t);this._bindAction(t,o);this._addInactiveAction(t,e,n);return t},existingAction:function(e,t){var r=t||this._root;t=r.uuid;r="string"===typeof e?Kn.findByName(r,e):e;e=this._actionsByClip[r?r.uuid:e];return void 0!==e?e.actionByRoot[t]||null:null},stopAllAction:function(){for(var e=this._actions,t=this._nActiveActions,r=this._bindings,n=this._nActiveBindings,i=this._nActiveBindings=this._nActiveActions=0;i!==t;++i)e[i].reset();for(i=0;i!==n;++i)r[i].useCount=0;return this},update:function(e){e*=this.timeScale;for(var t=this._actions,r=this._nActiveActions,n=this.time+=e,i=Math.sign(e),o=this._accuIndex^=1,a=0;a!==r;++a)t[a]._update(n,e,i,o);e=this._bindings;t=this._nActiveBindings;for(a=0;a!==t;++a)e[a].apply(o);return this},getRoot:function(){return this._root},uncacheClip:function(e){var t=this._actions;e=e.uuid;var r=this._actionsByClip,n=r[e];if(void 0!==n){n=n.knownActions;for(var i=0,o=n.length;i!==o;++i){var a=n[i];this._deactivateAction(a);var s=a._cacheIndex,u=t[t.length-1];a._cacheIndex=null;a._byClipCacheIndex=null;u._cacheIndex=s;t[s]=u;t.pop();this._removeInactiveBindingsForAction(a)}delete r[e]}},uncacheRoot:function(e){e=e.uuid;var t=this._actionsByClip;for(n in t){var r=t[n].actionByRoot[e];void 0!==r&&(this._deactivateAction(r),this._removeInactiveAction(r))}var n=this._bindingsByRootAndName[e];if(void 0!==n)for(var i in n)e=n[i],e.restoreOriginalState(),this._removeInactiveBinding(e)},uncacheAction:function(e,t){e=this.existingAction(e,t);null!==e&&(this._deactivateAction(e),this._removeInactiveAction(e))}});xi.prototype.clone=function(){return new xi(void 0===this.value.clone?this.value:this.value.clone())};wi.prototype=Object.assign(Object.create(A.prototype),{constructor:wi,isInstancedBufferGeometry:!0,copy:function(e){A.prototype.copy.call(this,e);this.maxInstancedCount=e.maxInstancedCount;return this},clone:function(){return(new this.constructor).copy(this)}});Si.prototype=Object.assign(Object.create(Et.prototype),{constructor:Si,isInstancedInterleavedBuffer:!0,copy:function(e){Et.prototype.copy.call(this,e);this.meshPerAttribute=e.meshPerAttribute;return this}});Mi.prototype=Object.assign(Object.create(y.prototype),{constructor:Mi,isInstancedBufferAttribute:!0,copy:function(e){y.prototype.copy.call(this,e);this.meshPerAttribute=e.meshPerAttribute;return this}});Object.assign(Ei.prototype,{linePrecision:1,set:function(e,t){this.ray.set(e,t)},setFromCamera:function(e,t){t&&t.isPerspectiveCamera?(this.ray.origin.setFromMatrixPosition(t.matrixWorld),this.ray.direction.set(e.x,e.y,.5).unproject(t).sub(this.ray.origin).normalize()):t&&t.isOrthographicCamera?(this.ray.origin.set(e.x,e.y,(t.near+t.far)/(t.near-t.far)).unproject(t),this.ray.direction.set(0,0,-1).transformDirection(t.matrixWorld)):console.error("THREE.Raycaster: Unsupported camera type.")},intersectObject:function(e,t,r){r=r||[];Ti(e,this,r,t);r.sort(Ci);return r},intersectObjects:function(e,t,r){r=r||[];if(!1===Array.isArray(e))return console.warn("THREE.Raycaster.intersectObjects: objects is not an Array."),r;for(var n=0,i=e.length;n<i;n++)Ti(e[n],this,r,t);r.sort(Ci);return r}});Object.assign(Oi.prototype,{start:function(){this.oldTime=this.startTime=("undefined"===typeof performance?Date:performance).now();this.elapsedTime=0;this.running=!0},stop:function(){this.getElapsedTime();this.autoStart=this.running=!1},getElapsedTime:function(){this.getDelta();return this.elapsedTime},getDelta:function(){var e=0;if(this.autoStart&&!this.running)return this.start(),0;if(this.running){var t=("undefined"===typeof performance?Date:performance).now();e=(t-this.oldTime)/1e3;this.oldTime=t;this.elapsedTime+=e}return e}});Object.assign(Pi.prototype,{set:function(e,t,r){this.radius=e;this.phi=t;this.theta=r;return this},clone:function(){return(new this.constructor).copy(this)},copy:function(e){this.radius=e.radius;this.phi=e.phi;this.theta=e.theta;return this},makeSafe:function(){this.phi=Math.max(1e-6,Math.min(Math.PI-1e-6,this.phi));return this},setFromVector3:function(e){this.radius=e.length();0===this.radius?this.phi=this.theta=0:(this.theta=Math.atan2(e.x,e.z),this.phi=Math.acos(eo.clamp(e.y/this.radius,-1,1)));return this}});Object.assign(Ai.prototype,{set:function(e,t,r){this.radius=e;this.theta=t;this.y=r;return this},clone:function(){return(new this.constructor).copy(this)},copy:function(e){this.radius=e.radius;this.theta=e.theta;this.y=e.y;return this},setFromVector3:function(e){this.radius=Math.sqrt(e.x*e.x+e.z*e.z);this.theta=Math.atan2(e.x,e.z);this.y=e.y;return this}});Object.assign(ji.prototype,{set:function(e,t){this.min.copy(e);this.max.copy(t);return this},setFromPoints:function(e){this.makeEmpty();for(var t=0,r=e.length;t<r;t++)this.expandByPoint(e[t]);return this},setFromCenterAndSize:function(){var r=new H;return function(e,t){t=r.copy(t).multiplyScalar(.5);this.min.copy(e).sub(t);this.max.copy(e).add(t);return this}}(),clone:function(){return(new this.constructor).copy(this)},copy:function(e){this.min.copy(e.min);this.max.copy(e.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(e){void 0===e&&(console.warn("THREE.Box2: .getCenter() target is now required"),e=new H);return this.isEmpty()?e.set(0,0):e.addVectors(this.min,this.max).multiplyScalar(.5)},getSize:function(e){void 0===e&&(console.warn("THREE.Box2: .getSize() target is now required"),e=new H);return this.isEmpty()?e.set(0,0):e.subVectors(this.max,this.min)},expandByPoint:function(e){this.min.min(e);this.max.max(e);return this},expandByVector:function(e){this.min.sub(e);this.max.add(e);return this},expandByScalar:function(e){this.min.addScalar(-e);this.max.addScalar(e);return this},containsPoint:function(e){return e.x<this.min.x||e.x>this.max.x||e.y<this.min.y||e.y>this.max.y?!1:!0},containsBox:function(e){return this.min.x<=e.min.x&&e.max.x<=this.max.x&&this.min.y<=e.min.y&&e.max.y<=this.max.y},getParameter:function(e,t){void 0===t&&(console.warn("THREE.Box2: .getParameter() target is now required"),t=new H);return t.set((e.x-this.min.x)/(this.max.x-this.min.x),(e.y-this.min.y)/(this.max.y-this.min.y))},intersectsBox:function(e){return e.max.x<this.min.x||e.min.x>this.max.x||e.max.y<this.min.y||e.min.y>this.max.y?!1:!0},clampPoint:function(e,t){void 0===t&&(console.warn("THREE.Box2: .clampPoint() target is now required"),t=new H);return t.copy(e).clamp(this.min,this.max)},distanceToPoint:function(){var t=new H;return function(e){return t.copy(e).clamp(this.min,this.max).sub(e).length()}}(),intersect:function(e){this.min.max(e.min);this.max.min(e.max);return this},union:function(e){this.min.min(e.min);this.max.max(e.max);return this},translate:function(e){this.min.add(e);this.max.add(e);return this},equals:function(e){return e.min.equals(this.min)&&e.max.equals(this.max)}});Object.assign(Ri.prototype,{set:function(e,t){this.start.copy(e);this.end.copy(t);return this},clone:function(){return(new this.constructor).copy(this)},copy:function(e){this.start.copy(e.start);this.end.copy(e.end);return this},getCenter:function(e){void 0===e&&(console.warn("THREE.Line3: .getCenter() target is now required"),e=new we);return e.addVectors(this.start,this.end).multiplyScalar(.5)},delta:function(e){void 0===e&&(console.warn("THREE.Line3: .delta() target is now required"),e=new we);return e.subVectors(this.end,this.start)},distanceSq:function(){return this.start.distanceToSquared(this.end)},distance:function(){return this.start.distanceTo(this.end)},at:function(e,t){void 0===t&&(console.warn("THREE.Line3: .at() target is now required"),t=new we);return this.delta(t).multiplyScalar(e).add(this.start)},closestPointToPointParameter:function(){var r=new we,n=new we;return function(e,t){r.subVectors(e,this.start);n.subVectors(this.end,this.start);e=n.dot(n);e=n.dot(r)/e;t&&(e=eo.clamp(e,0,1));return e}}(),closestPointToPoint:function(e,t,r){e=this.closestPointToPointParameter(e,t);void 0===r&&(console.warn("THREE.Line3: .closestPointToPoint() target is now required"),r=new we);return this.delta(r).multiplyScalar(e).add(this.start)},applyMatrix4:function(e){this.start.applyMatrix4(e);this.end.applyMatrix4(e);return this},equals:function(e){return e.start.equals(this.start)&&e.end.equals(this.end)}});Li.prototype=Object.create(h.prototype);Li.prototype.constructor=Li;Li.prototype.isImmediateRenderObject=!0;Ii.prototype=Object.create(Nt.prototype);Ii.prototype.constructor=Ii;Ii.prototype.update=function(){var p=new we,f=new we,d=new m;return function(){var e=["a","b","c"];this.object.updateMatrixWorld(!0);d.getNormalMatrix(this.object.matrixWorld);var t=this.object.matrixWorld,r=this.geometry.attributes.position,n=this.object.geometry;if(n&&n.isGeometry)for(var i=n.vertices,o=n.faces,a=n=0,s=o.length;a<s;a++)for(var u=o[a],c=0,h=u.vertexNormals.length;c<h;c++){var l=u.vertexNormals[c];p.copy(i[u[e[c]]]).applyMatrix4(t);f.copy(l).applyMatrix3(d).normalize().multiplyScalar(this.size).add(p);r.setXYZ(n,p.x,p.y,p.z);n+=1;r.setXYZ(n,f.x,f.y,f.z);n+=1}else if(n&&n.isBufferGeometry)for(e=n.attributes.position,i=n.attributes.normal,c=n=0,h=e.count;c<h;c++)p.set(e.getX(c),e.getY(c),e.getZ(c)).applyMatrix4(t),f.set(i.getX(c),i.getY(c),i.getZ(c)),f.applyMatrix3(d).normalize().multiplyScalar(this.size).add(p),r.setXYZ(n,p.x,p.y,p.z),n+=1,r.setXYZ(n,f.x,f.y,f.z),n+=1;r.needsUpdate=!0}}();Ni.prototype=Object.create(h.prototype);Ni.prototype.constructor=Ni;Ni.prototype.dispose=function(){this.cone.geometry.dispose();this.cone.material.dispose()};Ni.prototype.update=function(){var r=new we,n=new we;return function(){this.light.updateMatrixWorld();var e=this.light.distance?this.light.distance:1e3,t=e*Math.tan(this.light.angle);this.cone.scale.set(t,t,e);r.setFromMatrixPosition(this.light.matrixWorld);n.setFromMatrixPosition(this.light.target.matrixWorld);this.cone.lookAt(n.sub(r));void 0!==this.color?this.cone.material.color.set(this.color):this.cone.material.color.copy(this.light.color)}}();ki.prototype=Object.create(Nt.prototype);ki.prototype.constructor=ki;ki.prototype.updateMatrixWorld=function(){var s=new we,u=new xe,c=new xe;return function(e){var t=this.bones,r=this.geometry,n=r.getAttribute("position");c.getInverse(this.root.matrixWorld);for(var i=0,o=0;i<t.length;i++){var a=t[i];a.parent&&a.parent.isBone&&(u.multiplyMatrices(c,a.matrixWorld),s.setFromMatrixPosition(u),n.setXYZ(o,s.x,s.y,s.z),u.multiplyMatrices(c,a.parent.matrixWorld),s.setFromMatrixPosition(u),n.setXYZ(o+1,s.x,s.y,s.z),o+=2)}r.getAttribute("position").needsUpdate=!0;h.prototype.updateMatrixWorld.call(this,e)}}();Bi.prototype=Object.create($.prototype);Bi.prototype.constructor=Bi;Bi.prototype.dispose=function(){this.geometry.dispose();this.material.dispose()};Bi.prototype.update=function(){void 0!==this.color?this.material.color.set(this.color):this.material.color.copy(this.light.color)};Fi.prototype=Object.create(h.prototype);Fi.prototype.constructor=Fi;Fi.prototype.dispose=function(){this.children[0].geometry.dispose();this.children[0].material.dispose()};Fi.prototype.update=function(){var e=.5*this.light.width,t=.5*this.light.height,r=this.line.geometry.attributes.position,n=r.array;n[0]=e;n[1]=-t;n[2]=0;n[3]=e;n[4]=t;n[5]=0;n[6]=-e;n[7]=t;n[8]=0;n[9]=-e;n[10]=-t;n[11]=0;n[12]=e;n[13]=-t;n[14]=0;r.needsUpdate=!0;void 0!==this.color?this.line.material.color.set(this.color):this.line.material.color.copy(this.light.color)};$i.prototype=Object.create(h.prototype);$i.prototype.constructor=$i;$i.prototype.dispose=function(){this.children[0].geometry.dispose();this.children[0].material.dispose()};$i.prototype.update=function(){var o=new we,a=new w,s=new w;return function(){var e=this.children[0];if(void 0!==this.color)this.material.color.set(this.color);else{var t=e.geometry.getAttribute("color");a.copy(this.light.color);s.copy(this.light.groundColor);for(var r=0,n=t.count;r<n;r++){var i=r<n/2?a:s;t.setXYZ(r,i.r,i.g,i.b)}t.needsUpdate=!0}e.lookAt(o.setFromMatrixPosition(this.light.matrixWorld).negate())}}();zi.prototype=Object.create(Nt.prototype);zi.prototype.constructor=zi;Ui.prototype=Object.create(Nt.prototype);Ui.prototype.constructor=Ui;Gi.prototype=Object.create(Nt.prototype);Gi.prototype.constructor=Gi;Gi.prototype.update=function(){var c=new we,h=new we,l=new m;return function(){this.object.updateMatrixWorld(!0);l.getNormalMatrix(this.object.matrixWorld);var e=this.object.matrixWorld,t=this.geometry.attributes.position,r=this.object.geometry,n=r.vertices;r=r.faces;for(var i=0,o=0,a=r.length;o<a;o++){var s=r[o],u=s.normal;c.copy(n[s.a]).add(n[s.b]).add(n[s.c]).divideScalar(3).applyMatrix4(e);h.copy(u).applyMatrix3(l).normalize().multiplyScalar(this.size).add(c);t.setXYZ(i,c.x,c.y,c.z);i+=1;t.setXYZ(i,h.x,h.y,h.z);i+=1}t.needsUpdate=!0}}();Vi.prototype=Object.create(h.prototype);Vi.prototype.constructor=Vi;Vi.prototype.dispose=function(){this.lightPlane.geometry.dispose();this.lightPlane.material.dispose();this.targetLine.geometry.dispose();this.targetLine.material.dispose()};Vi.prototype.update=function(){var e=new we,t=new we,r=new we;return function(){e.setFromMatrixPosition(this.light.matrixWorld);t.setFromMatrixPosition(this.light.target.matrixWorld);r.subVectors(t,e);this.lightPlane.lookAt(r);void 0!==this.color?(this.lightPlane.material.color.set(this.color),this.targetLine.material.color.set(this.color)):(this.lightPlane.material.color.copy(this.light.color),this.targetLine.material.color.copy(this.light.color));this.targetLine.lookAt(r);this.targetLine.scale.z=r.length()}}();Hi.prototype=Object.create(Nt.prototype);Hi.prototype.constructor=Hi;Hi.prototype.update=function(){function e(e,t,r,n){a.set(t,r,n).unproject(s);e=o[e];if(void 0!==e)for(t=i.getAttribute("position"),r=0,n=e.length;r<n;r++)t.setXYZ(e[r],a.x,a.y,a.z)}var i,o,a=new we,s=new u;return function(){i=this.geometry;o=this.pointMap;s.projectionMatrix.copy(this.camera.projectionMatrix);e("c",0,0,-1);e("t",0,0,1);e("n1",-1,-1,-1);e("n2",1,-1,-1);e("n3",-1,1,-1);e("n4",1,1,-1);e("f1",-1,-1,1);e("f2",1,-1,1);e("f3",-1,1,1);e("f4",1,1,1);e("u1",.7,1.1,-1);e("u2",-.7,1.1,-1);e("u3",0,2,-1);e("cf1",-1,0,1);e("cf2",1,0,1);e("cf3",0,-1,1);e("cf4",0,1,1);e("cn1",-1,0,-1);e("cn2",1,0,-1);e("cn3",0,-1,-1);e("cn4",0,1,-1);i.getAttribute("position").needsUpdate=!0}}();qi.prototype=Object.create(Nt.prototype);qi.prototype.constructor=qi;qi.prototype.update=function(){var i=new r;return function(e){void 0!==e&&console.warn("THREE.BoxHelper: .update() has no longer arguments.");void 0!==this.object&&i.setFromObject(this.object);if(!i.isEmpty()){e=i.min;var t=i.max,r=this.geometry.attributes.position,n=r.array;n[0]=t.x;n[1]=t.y;n[2]=t.z;n[3]=e.x;n[4]=t.y;n[5]=t.z;n[6]=e.x;n[7]=e.y;n[8]=t.z;n[9]=t.x;n[10]=e.y;n[11]=t.z;n[12]=t.x;n[13]=t.y;n[14]=e.z;n[15]=e.x;n[16]=t.y;n[17]=e.z;n[18]=e.x;n[19]=e.y;n[20]=e.z;n[21]=t.x;n[22]=e.y;n[23]=e.z;r.needsUpdate=!0;this.geometry.computeBoundingSphere()}}}();qi.prototype.setFromObject=function(e){this.object=e;this.update();return this};Wi.prototype=Object.create(Nt.prototype);Wi.prototype.constructor=Wi;Wi.prototype.updateMatrixWorld=function(e){var t=this.box;t.isEmpty()||(t.getCenter(this.position),t.getSize(this.scale),this.scale.multiplyScalar(.5),h.prototype.updateMatrixWorld.call(this,e))};Xi.prototype=Object.create(It.prototype);Xi.prototype.constructor=Xi;Xi.prototype.updateMatrixWorld=function(e){var t=-this.plane.constant;1e-8>Math.abs(t)&&(t=1e-8);this.scale.set(.5*this.size,.5*this.size,t);this.children[0].material.side=0>t?1:0;this.lookAt(this.plane.normal);h.prototype.updateMatrixWorld.call(this,e)};var Ho,qo;Yi.prototype=Object.create(h.prototype);Yi.prototype.constructor=Yi;Yi.prototype.setDirection=function(){var t=new we,r;return function(e){.99999<e.y?this.quaternion.set(0,0,0,1):-.99999>e.y?this.quaternion.set(1,0,0,0):(t.set(e.z,0,-e.x).normalize(),r=Math.acos(e.y),this.quaternion.setFromAxisAngle(t,r))}}();Yi.prototype.setLength=function(e,t,r){void 0===t&&(t=.2*e);void 0===r&&(r=.2*t);this.line.scale.set(1,Math.max(0,e-t),1);this.line.updateMatrix();this.cone.scale.set(r,t,r);this.cone.position.y=e;this.cone.updateMatrix()};Yi.prototype.setColor=function(e){this.line.material.color.copy(e);this.cone.material.color.copy(e)};Ki.prototype=Object.create(Nt.prototype);Ki.prototype.constructor=Ki;hn.create=function(e,t){console.log("THREE.Curve.create() has been deprecated");e.prototype=Object.create(hn.prototype);e.prototype.constructor=e;e.prototype.getPoint=t;return e};Object.assign(En.prototype,{createPointsGeometry:function(e){console.warn("THREE.CurvePath: .createPointsGeometry() has been removed. Use new THREE.Geometry().setFromPoints( points ) instead.");e=this.getPoints(e);return this.createGeometry(e)},createSpacedPointsGeometry:function(e){console.warn("THREE.CurvePath: .createSpacedPointsGeometry() has been removed. Use new THREE.Geometry().setFromPoints( points ) instead.");e=this.getSpacedPoints(e);return this.createGeometry(e)},createGeometry:function(e){console.warn("THREE.CurvePath: .createGeometry() has been removed. Use new THREE.Geometry().setFromPoints( points ) instead.");for(var t=new S,r=0,n=e.length;r<n;r++){var i=e[r];t.vertices.push(new we(i.x,i.y,i.z||0))}return t}});Object.assign(Cn.prototype,{fromPoints:function(e){console.warn("THREE.Path: .fromPoints() has been renamed to .setFromPoints().");this.setFromPoints(e)}});Zi.prototype=Object.create(dn.prototype);Ji.prototype=Object.create(dn.prototype);Qi.prototype=Object.create(dn.prototype);Object.assign(Qi.prototype,{initFromArray:function(){console.error("THREE.Spline: .initFromArray() has been removed.")},getControlPointsArray:function(){console.error("THREE.Spline: .getControlPointsArray() has been removed.")},reparametrizeByArcLength:function(){console.error("THREE.Spline: .reparametrizeByArcLength() has been removed.")}});zi.prototype.setColors=function(){console.error("THREE.GridHelper: setColors() has been deprecated, pass them in the constructor instead.")};ki.prototype.update=function(){console.error("THREE.SkeletonHelper: update() no longer needs to be called.")};Object.assign(ti.prototype,{extractUrlBase:function(e){console.warn("THREE.Loader: .extractUrlBase() has been deprecated. Use THREE.LoaderUtils.extractUrlBase() instead.");return Fo.extractUrlBase(e)}});Object.assign(ji.prototype,{center:function(e){console.warn("THREE.Box2: .center() has been renamed to .getCenter().");return this.getCenter(e)},empty:function(){console.warn("THREE.Box2: .empty() has been renamed to .isEmpty().");return this.isEmpty()},isIntersectionBox:function(e){console.warn("THREE.Box2: .isIntersectionBox() has been renamed to .intersectsBox().");return this.intersectsBox(e)},size:function(e){console.warn("THREE.Box2: .size() has been renamed to .getSize().");return this.getSize(e)}});Object.assign(r.prototype,{center:function(e){console.warn("THREE.Box3: .center() has been renamed to .getCenter().");return this.getCenter(e)},empty:function(){console.warn("THREE.Box3: .empty() has been renamed to .isEmpty().");return this.isEmpty()},isIntersectionBox:function(e){console.warn("THREE.Box3: .isIntersectionBox() has been renamed to .intersectsBox().");return this.intersectsBox(e)},isIntersectionSphere:function(e){console.warn("THREE.Box3: .isIntersectionSphere() has been renamed to .intersectsSphere().");return this.intersectsSphere(e)},size:function(e){console.warn("THREE.Box3: .size() has been renamed to .getSize().");return this.getSize(e)}});Ri.prototype.center=function(e){console.warn("THREE.Line3: .center() has been renamed to .getCenter().");return this.getCenter(e)};Object.assign(eo,{random16:function(){console.warn("THREE.Math: .random16() has been deprecated. Use Math.random() instead.");return Math.random()},nearestPowerOfTwo:function(e){console.warn("THREE.Math: .nearestPowerOfTwo() has been renamed to .floorPowerOfTwo().");return eo.floorPowerOfTwo(e)},nextPowerOfTwo:function(e){console.warn("THREE.Math: .nextPowerOfTwo() has been renamed to .ceilPowerOfTwo().");return eo.ceilPowerOfTwo(e)}});Object.assign(m.prototype,{flattenToArrayOffset:function(e,t){console.warn("THREE.Matrix3: .flattenToArrayOffset() has been deprecated. Use .toArray() instead.");return this.toArray(e,t)},multiplyVector3:function(e){console.warn("THREE.Matrix3: .multiplyVector3() has been removed. Use vector.applyMatrix3( matrix ) instead.");return e.applyMatrix3(this)},multiplyVector3Array:function(){console.error("THREE.Matrix3: .multiplyVector3Array() has been removed.")},applyToBuffer:function(e){console.warn("THREE.Matrix3: .applyToBuffer() has been removed. Use matrix.applyToBufferAttribute( attribute ) instead.");return this.applyToBufferAttribute(e)},applyToVector3Array:function(){console.error("THREE.Matrix3: .applyToVector3Array() has been removed.")}});Object.assign(xe.prototype,{extractPosition:function(e){console.warn("THREE.Matrix4: .extractPosition() has been renamed to .copyPosition().");return this.copyPosition(e)},flattenToArrayOffset:function(e,t){console.warn("THREE.Matrix4: .flattenToArrayOffset() has been deprecated. Use .toArray() instead.");return this.toArray(e,t)},getPosition:function(){var e;return function(){void 0===e&&(e=new we);console.warn("THREE.Matrix4: .getPosition() has been removed. Use Vector3.setFromMatrixPosition( matrix ) instead.");return e.setFromMatrixColumn(this,3)}}(),setRotationFromQuaternion:function(e){console.warn("THREE.Matrix4: .setRotationFromQuaternion() has been renamed to .makeRotationFromQuaternion().");return this.makeRotationFromQuaternion(e)},multiplyToArray:function(){console.warn("THREE.Matrix4: .multiplyToArray() has been removed.")},multiplyVector3:function(e){console.warn("THREE.Matrix4: .multiplyVector3() has been removed. Use vector.applyMatrix4( matrix ) instead.");return e.applyMatrix4(this)},multiplyVector4:function(e){console.warn("THREE.Matrix4: .multiplyVector4() has been removed. Use vector.applyMatrix4( matrix ) instead.");return e.applyMatrix4(this)},multiplyVector3Array:function(){console.error("THREE.Matrix4: .multiplyVector3Array() has been removed.")},rotateAxis:function(e){console.warn("THREE.Matrix4: .rotateAxis() has been removed. Use Vector3.transformDirection( matrix ) instead.");e.transformDirection(this)},crossVector:function(e){console.warn("THREE.Matrix4: .crossVector() has been removed. Use vector.applyMatrix4( matrix ) instead.");return e.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(e){console.warn("THREE.Matrix4: .applyToBuffer() has been removed. Use matrix.applyToBufferAttribute( attribute ) instead.");return this.applyToBufferAttribute(e)},applyToVector3Array:function(){console.error("THREE.Matrix4: .applyToVector3Array() has been removed.")},makeFrustum:function(e,t,r,n,i,o){console.warn("THREE.Matrix4: .makeFrustum() has been removed. Use .makePerspective( left, right, top, bottom, near, far ) instead.");return this.makePerspective(e,t,n,r,i,o)}});g.prototype.isIntersectionLine=function(e){console.warn("THREE.Plane: .isIntersectionLine() has been renamed to .intersectsLine().");return this.intersectsLine(e)};s.prototype.multiplyVector3=function(e){console.warn("THREE.Quaternion: .multiplyVector3() has been removed. Use is now vector.applyQuaternion( quaternion ) instead.");return e.applyQuaternion(this)};Object.assign(B.prototype,{isIntersectionBox:function(e){console.warn("THREE.Ray: .isIntersectionBox() has been renamed to .intersectsBox().");return this.intersectsBox(e)},isIntersectionPlane:function(e){console.warn("THREE.Ray: .isIntersectionPlane() has been renamed to .intersectsPlane().");return this.intersectsPlane(e)},isIntersectionSphere:function(e){console.warn("THREE.Ray: .isIntersectionSphere() has been renamed to .intersectsSphere().");return this.intersectsSphere(e)}});Object.assign(F.prototype,{area:function(){console.warn("THREE.Triangle: .area() has been renamed to .getArea().");return this.getArea()},barycoordFromPoint:function(e,t){console.warn("THREE.Triangle: .barycoordFromPoint() has been renamed to .getBarycoord().");return this.getBarycoord(e,t)},midpoint:function(e){console.warn("THREE.Triangle: .midpoint() has been renamed to .getMidpoint().");return this.getMidpoint(e)},normal:function(e){console.warn("THREE.Triangle: .normal() has been renamed to .getNormal().");return this.getNormal(e)},plane:function(e){console.warn("THREE.Triangle: .plane() has been renamed to .getPlane().");return this.getPlane(e)}});Object.assign(F,{barycoordFromPoint:function(e,t,r,n,i){console.warn("THREE.Triangle: .barycoordFromPoint() has been renamed to .getBarycoord().");return F.getBarycoord(e,t,r,n,i)},normal:function(e,t,r,n){console.warn("THREE.Triangle: .normal() has been renamed to .getNormal().");return F.getNormal(e,t,r,n)}});Object.assign(Tn.prototype,{extractAllPoints:function(e){console.warn("THREE.Shape: .extractAllPoints() has been removed. Use .extractPoints() instead.");return this.extractPoints(e)},extrude:function(e){console.warn("THREE.Shape: .extrude() has been removed. Use ExtrudeGeometry() instead.");return new Cr(this,e)},makeGeometry:function(e){console.warn("THREE.Shape: .makeGeometry() has been removed. Use ShapeGeometry() instead.");return new kr(this,e)}});Object.assign(H.prototype,{fromAttribute:function(e,t,r){console.warn("THREE.Vector2: .fromAttribute() has been renamed to .fromBufferAttribute().");return this.fromBufferAttribute(e,t,r)},distanceToManhattan:function(e){console.warn("THREE.Vector2: .distanceToManhattan() has been renamed to .manhattanDistanceTo().");return this.manhattanDistanceTo(e)},lengthManhattan:function(){console.warn("THREE.Vector2: .lengthManhattan() has been renamed to .manhattanLength().");return this.manhattanLength()}});Object.assign(we.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(e){console.warn("THREE.Vector3: .getPositionFromMatrix() has been renamed to .setFromMatrixPosition().");return this.setFromMatrixPosition(e)},getScaleFromMatrix:function(e){console.warn("THREE.Vector3: .getScaleFromMatrix() has been renamed to .setFromMatrixScale().");return this.setFromMatrixScale(e)},getColumnFromMatrix:function(e,t){console.warn("THREE.Vector3: .getColumnFromMatrix() has been renamed to .setFromMatrixColumn().");return this.setFromMatrixColumn(t,e)},applyProjection:function(e){console.warn("THREE.Vector3: .applyProjection() has been removed. Use .applyMatrix4( m ) instead.");return this.applyMatrix4(e)},fromAttribute:function(e,t,r){console.warn("THREE.Vector3: .fromAttribute() has been renamed to .fromBufferAttribute().");return this.fromBufferAttribute(e,t,r)},distanceToManhattan:function(e){console.warn("THREE.Vector3: .distanceToManhattan() has been renamed to .manhattanDistanceTo().");return this.manhattanDistanceTo(e)},lengthManhattan:function(){console.warn("THREE.Vector3: .lengthManhattan() has been renamed to .manhattanLength().");return this.manhattanLength()}});Object.assign(Se.prototype,{fromAttribute:function(e,t,r){console.warn("THREE.Vector4: .fromAttribute() has been renamed to .fromBufferAttribute().");return this.fromBufferAttribute(e,t,r)},lengthManhattan:function(){console.warn("THREE.Vector4: .lengthManhattan() has been renamed to .manhattanLength().");return this.manhattanLength()}});Object.assign(S.prototype,{computeTangents:function(){console.error("THREE.Geometry: .computeTangents() has been removed.")},computeLineDistances:function(){console.error("THREE.Geometry: .computeLineDistances() has been removed. Use THREE.Line.computeLineDistances() instead.")}});Object.assign(h.prototype,{getChildByName:function(e){console.warn("THREE.Object3D: .getChildByName() has been renamed to .getObjectByName().");return this.getObjectByName(e)},renderDepth:function(){console.warn("THREE.Object3D: .renderDepth has been removed. Use .renderOrder, instead.")},translate:function(e,t){console.warn("THREE.Object3D: .translate() has been removed. Use .translateOnAxis( axis, distance ) instead.");return this.translateOnAxis(t,e)},getWorldRotation:function(){console.error("THREE.Object3D: .getWorldRotation() has been removed. Use THREE.Object3D.getWorldQuaternion( target ) instead.")}});Object.defineProperties(h.prototype,{eulerOrder:{get:function(){console.warn("THREE.Object3D: .eulerOrder is now .rotation.order.");return this.rotation.order},set:function(e){console.warn("THREE.Object3D: .eulerOrder is now .rotation.order.");this.rotation.order=e}},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(Pt.prototype,{objects:{get:function(){console.warn("THREE.LOD: .objects has been renamed to .levels.");return this.levels}}});Object.defineProperty(At.prototype,"useVertexTexture",{get:function(){console.warn("THREE.Skeleton: useVertexTexture has been removed.")},set:function(){console.warn("THREE.Skeleton: useVertexTexture has been removed.")}});Object.defineProperty(hn.prototype,"__arcLengthDivisions",{get:function(){console.warn("THREE.Curve: .__arcLengthDivisions is now .arcLengthDivisions.");return this.arcLengthDivisions},set:function(e){console.warn("THREE.Curve: .__arcLengthDivisions is now .arcLengthDivisions.");this.arcLengthDivisions=e}});gt.prototype.setLens=function(e,t){console.warn("THREE.PerspectiveCamera.setLens is deprecated. Use .setFocalLength and .filmGauge for a photographic setup.");void 0!==t&&(this.filmGauge=t);this.setFocalLength(e)};Object.defineProperties(On.prototype,{onlyShadow:{set:function(){console.warn("THREE.Light: .onlyShadow has been removed.")}},shadowCameraFov:{set:function(e){console.warn("THREE.Light: .shadowCameraFov is now .shadow.camera.fov.");this.shadow.camera.fov=e}},shadowCameraLeft:{set:function(e){console.warn("THREE.Light: .shadowCameraLeft is now .shadow.camera.left.");this.shadow.camera.left=e}},shadowCameraRight:{set:function(e){console.warn("THREE.Light: .shadowCameraRight is now .shadow.camera.right.");this.shadow.camera.right=e}},shadowCameraTop:{set:function(e){console.warn("THREE.Light: .shadowCameraTop is now .shadow.camera.top.");this.shadow.camera.top=e}},shadowCameraBottom:{set:function(e){console.warn("THREE.Light: .shadowCameraBottom is now .shadow.camera.bottom.");this.shadow.camera.bottom=e}},shadowCameraNear:{set:function(e){console.warn("THREE.Light: .shadowCameraNear is now .shadow.camera.near.");this.shadow.camera.near=e}},shadowCameraFar:{set:function(e){console.warn("THREE.Light: .shadowCameraFar is now .shadow.camera.far.");this.shadow.camera.far=e}},shadowCameraVisible:{set:function(){console.warn("THREE.Light: .shadowCameraVisible has been removed. Use new THREE.CameraHelper( light.shadow.camera ) instead.")}},shadowBias:{set:function(e){console.warn("THREE.Light: .shadowBias is now .shadow.bias.");this.shadow.bias=e}},shadowDarkness:{set:function(){console.warn("THREE.Light: .shadowDarkness has been removed.")}},shadowMapWidth:{set:function(e){console.warn("THREE.Light: .shadowMapWidth is now .shadow.mapSize.width.");this.shadow.mapSize.width=e}},shadowMapHeight:{set:function(e){console.warn("THREE.Light: .shadowMapHeight is now .shadow.mapSize.height.");this.shadow.mapSize.height=e}}});Object.defineProperties(y.prototype,{length:{get:function(){console.warn("THREE.BufferAttribute: .length has been deprecated. Use .count instead.");return this.array.length}},copyIndicesArray:function(){console.error("THREE.BufferAttribute: .copyIndicesArray() has been removed.")}});Object.assign(A.prototype,{addIndex:function(e){console.warn("THREE.BufferGeometry: .addIndex() has been renamed to .setIndex().");this.setIndex(e)},addDrawCall:function(e,t,r){void 0!==r&&console.warn("THREE.BufferGeometry: .addDrawCall() no longer supports indexOffset.");console.warn("THREE.BufferGeometry: .addDrawCall() is now .addGroup().");this.addGroup(e,t)},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(A.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.");return this.groups}}});Object.assign(Tr.prototype,{getArrays:function(){console.error("THREE.ExtrudeBufferGeometry: .getArrays() has been removed.")},addShapeList:function(){console.error("THREE.ExtrudeBufferGeometry: .addShapeList() has been removed.")},addShape:function(){console.error("THREE.ExtrudeBufferGeometry: .addShape() has been removed.")}});Object.defineProperties(xi.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(I.prototype,{wrapAround:{get:function(){console.warn("THREE.Material: .wrapAround has been removed.")},set:function(){console.warn("THREE.Material: .wrapAround has been removed.")}},wrapRGB:{get:function(){console.warn("THREE.Material: .wrapRGB has been removed.");return new w}},shading:{get:function(){console.error("THREE."+this.type+": .shading has been removed. Use the boolean .flatShading instead.")},set:function(e){console.warn("THREE."+this.type+": .shading has been removed. Use the boolean .flatShading instead.");this.flatShading=1===e}}});Object.defineProperties(Zr.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(D.prototype,{derivatives:{get:function(){console.warn("THREE.ShaderMaterial: .derivatives has been moved to .extensions.derivatives.");return this.extensions.derivatives},set:function(e){console.warn("THREE. ShaderMaterial: .derivatives has been moved to .extensions.derivatives.");this.extensions.derivatives=e}}});Object.assign(xt.prototype,{animate:function(e){console.warn("THREE.WebGLRenderer: .animate() is now .setAnimationLoop().");this.setAnimationLoop(e)},getCurrentRenderTarget:function(){console.warn("THREE.WebGLRenderer: .getCurrentRenderTarget() is now .getRenderTarget().");return this.getRenderTarget()},getMaxAnisotropy:function(){console.warn("THREE.WebGLRenderer: .getMaxAnisotropy() is now .capabilities.getMaxAnisotropy().");return this.capabilities.getMaxAnisotropy()},getPrecision:function(){console.warn("THREE.WebGLRenderer: .getPrecision() is now .capabilities.precision.");return this.capabilities.precision},resetGLState:function(){console.warn("THREE.WebGLRenderer: .resetGLState() is now .state.reset().");return this.state.reset()},supportsFloatTextures:function(){console.warn("THREE.WebGLRenderer: .supportsFloatTextures() is now .extensions.get( 'OES_texture_float' ).");return 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' ).");return 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.");return 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(e){console.warn("THREE.WebGLRenderer: .enableScissorTest() is now .setScissorTest().");this.setScissorTest(e)},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.")},setFaceCulling:function(){console.warn("THREE.WebGLRenderer: .setFaceCulling() has been removed.")}});Object.defineProperties(xt.prototype,{shadowMapEnabled:{get:function(){return this.shadowMap.enabled},set:function(e){console.warn("THREE.WebGLRenderer: .shadowMapEnabled is now .shadowMap.enabled.");this.shadowMap.enabled=e}},shadowMapType:{get:function(){return this.shadowMap.type},set:function(e){console.warn("THREE.WebGLRenderer: .shadowMapType is now .shadowMap.type.");this.shadowMap.type=e}},shadowMapCullFace:{get:function(){console.warn("THREE.WebGLRenderer: .shadowMapCullFace has been removed. Set Material.shadowSide instead.")},set:function(){console.warn("THREE.WebGLRenderer: .shadowMapCullFace has been removed. Set Material.shadowSide instead.")}}});Object.defineProperties(pt.prototype,{cullFace:{get:function(){console.warn("THREE.WebGLRenderer: .shadowMap.cullFace has been removed. Set Material.shadowSide instead.")},set:function(){console.warn("THREE.WebGLRenderer: .shadowMap.cullFace has been removed. Set Material.shadowSide instead.")}},renderReverseSided:{get:function(){console.warn("THREE.WebGLRenderer: .shadowMap.renderReverseSided has been removed. Set Material.shadowSide instead.")},set:function(){console.warn("THREE.WebGLRenderer: .shadowMap.renderReverseSided has been removed. Set Material.shadowSide instead.")}},renderSingleSided:{get:function(){console.warn("THREE.WebGLRenderer: .shadowMap.renderSingleSided has been removed. Set Material.shadowSide instead.")},set:function(){console.warn("THREE.WebGLRenderer: .shadowMap.renderSingleSided has been removed. Set Material.shadowSide instead.")}}});Object.defineProperties(T.prototype,{wrapS:{get:function(){console.warn("THREE.WebGLRenderTarget: .wrapS is now .texture.wrapS.");return this.texture.wrapS},set:function(e){console.warn("THREE.WebGLRenderTarget: .wrapS is now .texture.wrapS.");this.texture.wrapS=e}},wrapT:{get:function(){console.warn("THREE.WebGLRenderTarget: .wrapT is now .texture.wrapT.");return this.texture.wrapT},set:function(e){console.warn("THREE.WebGLRenderTarget: .wrapT is now .texture.wrapT.");this.texture.wrapT=e}},magFilter:{get:function(){console.warn("THREE.WebGLRenderTarget: .magFilter is now .texture.magFilter.");return this.texture.magFilter},set:function(e){console.warn("THREE.WebGLRenderTarget: .magFilter is now .texture.magFilter.");this.texture.magFilter=e}},minFilter:{get:function(){console.warn("THREE.WebGLRenderTarget: .minFilter is now .texture.minFilter.");return this.texture.minFilter},set:function(e){console.warn("THREE.WebGLRenderTarget: .minFilter is now .texture.minFilter.");this.texture.minFilter=e}},anisotropy:{get:function(){console.warn("THREE.WebGLRenderTarget: .anisotropy is now .texture.anisotropy.");return this.texture.anisotropy},set:function(e){console.warn("THREE.WebGLRenderTarget: .anisotropy is now .texture.anisotropy.");this.texture.anisotropy=e}},offset:{get:function(){console.warn("THREE.WebGLRenderTarget: .offset is now .texture.offset.");return this.texture.offset},set:function(e){console.warn("THREE.WebGLRenderTarget: .offset is now .texture.offset.");this.texture.offset=e}},repeat:{get:function(){console.warn("THREE.WebGLRenderTarget: .repeat is now .texture.repeat.");return this.texture.repeat},set:function(e){console.warn("THREE.WebGLRenderTarget: .repeat is now .texture.repeat.");this.texture.repeat=e}},format:{get:function(){console.warn("THREE.WebGLRenderTarget: .format is now .texture.format.");return this.texture.format},set:function(e){console.warn("THREE.WebGLRenderTarget: .format is now .texture.format.");this.texture.format=e}},type:{get:function(){console.warn("THREE.WebGLRenderTarget: .type is now .texture.type.");return this.texture.type},set:function(e){console.warn("THREE.WebGLRenderTarget: .type is now .texture.type.");this.texture.type=e}},generateMipmaps:{get:function(){console.warn("THREE.WebGLRenderTarget: .generateMipmaps is now .texture.generateMipmaps.");return this.texture.generateMipmaps},set:function(e){console.warn("THREE.WebGLRenderTarget: .generateMipmaps is now .texture.generateMipmaps.");this.texture.generateMipmaps=e}}});Object.defineProperties(_t.prototype,{standing:{set:function(){console.warn("THREE.WebVRManager: .standing has been removed.")}}});pi.prototype.load=function(e){console.warn("THREE.Audio: .load has been deprecated. Use THREE.AudioLoader instead.");var t=this;(new ui).load(e,function(e){t.setBuffer(e)});return this};di.prototype.getData=function(){console.warn("THREE.AudioAnalyser: .getData() is now .getFrequencyData().");return this.getFrequencyData()};hi.prototype.updateCubeMap=function(e,t){console.warn("THREE.CubeCamera: .updateCubeMap() is now .update().");return this.update(e,t)};to.crossOrigin=void 0;to.loadTexture=function(e,t,r,n){console.warn("THREE.ImageUtils.loadTexture has been deprecated. Use THREE.TextureLoader() instead.");var i=new cn;i.setCrossOrigin(this.crossOrigin);e=i.load(e,r,void 0,n);t&&(e.mapping=t);return e};to.loadTextureCube=function(e,t,r,n){console.warn("THREE.ImageUtils.loadTextureCube has been deprecated. Use THREE.CubeTextureLoader() instead.");var i=new un;i.setCrossOrigin(this.crossOrigin);e=i.load(e,r,void 0,n);t&&(e.mapping=t);return e};to.loadCompressedTexture=function(){console.error("THREE.ImageUtils.loadCompressedTexture has been removed. Use THREE.DDSLoader instead.")};to.loadCompressedTextureCube=function(){console.error("THREE.ImageUtils.loadCompressedTextureCube has been removed. Use THREE.DDSLoader instead.")};e.WebGLRenderTargetCube=n;e.WebGLRenderTarget=T;e.WebGLRenderer=xt;e.ShaderLib=so;e.UniformsLib=ao;e.UniformsUtils=io;e.ShaderChunk=no;e.FogExp2=wt;e.Fog=St;e.Scene=Mt;e.Sprite=Ot;e.LOD=Pt;e.SkinnedMesh=Rt;e.Skeleton=At;e.Bone=jt;e.Mesh=$;e.LineSegments=Nt;e.LineLoop=Dt;e.Line=It;e.Points=Bt;e.Group=mt;e.VideoTexture=Ft;e.DataTexture=Me;e.CompressedTexture=$t;e.CubeTexture=U;e.CanvasTexture=zt;e.DepthTexture=Ut;e.Texture=p;e.CompressedTextureLoader=on;e.DataTextureLoader=an;e.CubeTextureLoader=un;e.TextureLoader=cn;e.ObjectLoader=ni;e.MaterialLoader=Qn;e.BufferGeometryLoader=ei;e.DefaultLoadingManager=Ao;e.LoadingManager=rn;e.JSONLoader=ri;e.ImageLoader=sn;e.ImageBitmapLoader=ii;e.FontLoader=si;e.FileLoader=nn;e.Loader=ti;e.LoaderUtils=Fo;e.Cache=Po;e.AudioLoader=ui;e.SpotLightShadow=jn;e.SpotLight=Rn;e.PointLight=Ln;e.RectAreaLight=kn;e.HemisphereLight=Pn;e.DirectionalLightShadow=In;e.DirectionalLight=Nn;e.AmbientLight=Dn;e.LightShadow=An;e.Light=On;e.StereoCamera=ci;e.PerspectiveCamera=gt;e.OrthographicCamera=f;e.CubeCamera=hi;e.ArrayCamera=yt;e.Camera=u;e.AudioListener=li;e.PositionalAudio=fi;e.AudioContext=Vo;e.AudioAnalyser=di;e.Audio=pi;e.VectorKeyframeTrack=Yn;e.StringKeyframeTrack=Xn;e.QuaternionKeyframeTrack=Wn;e.NumberKeyframeTrack=Hn;e.ColorKeyframeTrack=Vn;e.BooleanKeyframeTrack=Gn;e.PropertyMixer=vi;e.PropertyBinding=gi;e.KeyframeTrack=Un;e.AnimationUtils=ko;e.AnimationObjectGroup=yi;e.AnimationMixer=bi;e.AnimationClip=Kn;e.Uniform=xi;e.InstancedBufferGeometry=wi;e.BufferGeometry=A;e.Geometry=S;e.InterleavedBufferAttribute=Ct;e.InstancedInterleavedBuffer=Si;e.InterleavedBuffer=Et;e.InstancedBufferAttribute=Mi;e.Face3=k;e.Object3D=h;e.Raycaster=Ei;e.Layers=o;e.EventDispatcher=t;e.Clock=Oi;e.QuaternionLinearInterpolant=qn;e.LinearInterpolant=$n;e.DiscreteInterpolant=zn;e.CubicInterpolant=Fn;e.Interpolant=Bn;e.Triangle=F;e.Math=eo;e.Spherical=Pi;e.Cylindrical=Ai;e.Plane=g;e.Frustum=Ee;e.Sphere=c;e.Ray=B;e.Matrix4=xe;e.Matrix3=m;e.Box3=r;e.Box2=ji;e.Line3=Ri;e.Euler=i;e.Vector4=Se;e.Vector3=we;e.Vector2=H;e.Quaternion=s;e.Color=w;e.ImmediateRenderObject=Li;e.VertexNormalsHelper=Ii;e.SpotLightHelper=Ni;e.SkeletonHelper=ki;e.PointLightHelper=Bi;e.RectAreaLightHelper=Fi;e.HemisphereLightHelper=$i;e.GridHelper=zi;e.PolarGridHelper=Ui;e.FaceNormalsHelper=Gi;e.DirectionalLightHelper=Vi;e.CameraHelper=Hi;e.BoxHelper=qi;e.Box3Helper=Wi;e.PlaneHelper=Xi;e.ArrowHelper=Yi;e.AxesHelper=Ki;e.Shape=Tn;e.Path=Cn;e.ShapePath=oi;e.Font=ai;e.CurvePath=En;e.Curve=hn;e.ImageUtils=to;e.ShapeUtils=Eo;e.WebGLUtils=vt;e.WireframeGeometry=Gt;e.ParametricGeometry=Vt;e.ParametricBufferGeometry=Ht;e.TetrahedronGeometry=Xt;e.TetrahedronBufferGeometry=Yt;e.OctahedronGeometry=Kt;e.OctahedronBufferGeometry=Zt;e.IcosahedronGeometry=Jt;e.IcosahedronBufferGeometry=Qt;e.DodecahedronGeometry=er;e.DodecahedronBufferGeometry=tr;e.PolyhedronGeometry=qt;e.PolyhedronBufferGeometry=Wt;e.TubeGeometry=rr;e.TubeBufferGeometry=nr;e.TorusKnotGeometry=ir;e.TorusKnotBufferGeometry=or;e.TorusGeometry=ar;e.TorusBufferGeometry=sr;e.TextGeometry=Pr;e.TextBufferGeometry=Ar;e.SphereGeometry=jr;e.SphereBufferGeometry=Rr;e.RingGeometry=Lr;e.RingBufferGeometry=Ir;e.PlaneGeometry=R;e.PlaneBufferGeometry=L;e.LatheGeometry=Nr;e.LatheBufferGeometry=Dr;e.ShapeGeometry=kr;e.ShapeBufferGeometry=Br;e.ExtrudeGeometry=Cr;e.ExtrudeBufferGeometry=Tr;e.EdgesGeometry=$r;e.ConeGeometry=Gr;e.ConeBufferGeometry=Vr;e.CylinderGeometry=zr;e.CylinderBufferGeometry=Ur;e.CircleGeometry=Hr;e.CircleBufferGeometry=qr;e.BoxGeometry=O;e.BoxBufferGeometry=j;e.ShadowMaterial=Wr;e.SpriteMaterial=Tt;e.RawShaderMaterial=Xr;e.ShaderMaterial=D;e.PointsMaterial=kt;e.MeshPhysicalMaterial=Kr;e.MeshStandardMaterial=Yr;e.MeshPhongMaterial=Zr;e.MeshToonMaterial=Jr;e.MeshNormalMaterial=Qr;e.MeshLambertMaterial=en;e.MeshDepthMaterial=ht;e.MeshDistanceMaterial=lt;e.MeshBasicMaterial=N;e.LineDashedMaterial=tn;e.LineBasicMaterial=Lt;e.Material=I;e.Float64BufferAttribute=M;e.Float32BufferAttribute=P;e.Uint32BufferAttribute=x;e.Int32BufferAttribute=b;e.Uint16BufferAttribute=_;e.Int16BufferAttribute=v;e.Uint8ClampedBufferAttribute=d;e.Uint8BufferAttribute=l;e.Int8BufferAttribute=a;e.BufferAttribute=y;e.ArcCurve=pn;e.CatmullRomCurve3=dn;e.CubicBezierCurve=yn;e.CubicBezierCurve3=_n;e.EllipseCurve=ln;e.LineCurve=bn;e.LineCurve3=xn;e.QuadraticBezierCurve=wn;e.QuadraticBezierCurve3=Sn;e.SplineCurve=Mn;e.REVISION="95";e.MOUSE={LEFT:0,MIDDLE:1,RIGHT:2};e.CullFaceNone=0;e.CullFaceBack=1;e.CullFaceFront=2;e.CullFaceFrontBack=3;e.FrontFaceDirectionCW=0;e.FrontFaceDirectionCCW=1;e.BasicShadowMap=0;e.PCFShadowMap=1;e.PCFSoftShadowMap=2;e.FrontSide=0;e.BackSide=1;e.DoubleSide=2;e.FlatShading=1;e.SmoothShading=2;e.NoColors=0;e.FaceColors=1;e.VertexColors=2;e.NoBlending=0;e.NormalBlending=1;e.AdditiveBlending=2;e.SubtractiveBlending=3;e.MultiplyBlending=4;e.CustomBlending=5;e.AddEquation=100;e.SubtractEquation=101;e.ReverseSubtractEquation=102;e.MinEquation=103;e.MaxEquation=104;e.ZeroFactor=200;e.OneFactor=201;e.SrcColorFactor=202;e.OneMinusSrcColorFactor=203;e.SrcAlphaFactor=204;e.OneMinusSrcAlphaFactor=205;e.DstAlphaFactor=206;e.OneMinusDstAlphaFactor=207;e.DstColorFactor=208;e.OneMinusDstColorFactor=209;e.SrcAlphaSaturateFactor=210;e.NeverDepth=0;e.AlwaysDepth=1;e.LessDepth=2;e.LessEqualDepth=3;e.EqualDepth=4;e.GreaterEqualDepth=5;e.GreaterDepth=6;e.NotEqualDepth=7;e.MultiplyOperation=0;e.MixOperation=1;e.AddOperation=2;e.NoToneMapping=0;e.LinearToneMapping=1;e.ReinhardToneMapping=2;e.Uncharted2ToneMapping=3;e.CineonToneMapping=4;e.UVMapping=300;e.CubeReflectionMapping=301;e.CubeRefractionMapping=302;e.EquirectangularReflectionMapping=303;e.EquirectangularRefractionMapping=304;e.SphericalReflectionMapping=305;e.CubeUVReflectionMapping=306;e.CubeUVRefractionMapping=307;e.RepeatWrapping=1e3;e.ClampToEdgeWrapping=1001;e.MirroredRepeatWrapping=1002;e.NearestFilter=1003;e.NearestMipMapNearestFilter=1004;e.NearestMipMapLinearFilter=1005;e.LinearFilter=1006;e.LinearMipMapNearestFilter=1007;e.LinearMipMapLinearFilter=1008;e.UnsignedByteType=1009;e.ByteType=1010;e.ShortType=1011;e.UnsignedShortType=1012;e.IntType=1013;e.UnsignedIntType=1014;e.FloatType=1015;e.HalfFloatType=1016;e.UnsignedShort4444Type=1017;e.UnsignedShort5551Type=1018;e.UnsignedShort565Type=1019;e.UnsignedInt248Type=1020;e.AlphaFormat=1021;e.RGBFormat=1022;e.RGBAFormat=1023;e.LuminanceFormat=1024;e.LuminanceAlphaFormat=1025;e.RGBEFormat=1023;e.DepthFormat=1026;e.DepthStencilFormat=1027;e.RGB_S3TC_DXT1_Format=33776;e.RGBA_S3TC_DXT1_Format=33777;e.RGBA_S3TC_DXT3_Format=33778;e.RGBA_S3TC_DXT5_Format=33779;e.RGB_PVRTC_4BPPV1_Format=35840;e.RGB_PVRTC_2BPPV1_Format=35841;e.RGBA_PVRTC_4BPPV1_Format=35842;e.RGBA_PVRTC_2BPPV1_Format=35843;e.RGB_ETC1_Format=36196;e.RGBA_ASTC_4x4_Format=37808;e.RGBA_ASTC_5x4_Format=37809;e.RGBA_ASTC_5x5_Format=37810;e.RGBA_ASTC_6x5_Format=37811;e.RGBA_ASTC_6x6_Format=37812;e.RGBA_ASTC_8x5_Format=37813;e.RGBA_ASTC_8x6_Format=37814;e.RGBA_ASTC_8x8_Format=37815;e.RGBA_ASTC_10x5_Format=37816;e.RGBA_ASTC_10x6_Format=37817;e.RGBA_ASTC_10x8_Format=37818;e.RGBA_ASTC_10x10_Format=37819;e.RGBA_ASTC_12x10_Format=37820;e.RGBA_ASTC_12x12_Format=37821;e.LoopOnce=2200;e.LoopRepeat=2201;e.LoopPingPong=2202;e.InterpolateDiscrete=2300;e.InterpolateLinear=2301;e.InterpolateSmooth=2302;e.ZeroCurvatureEnding=2400;e.ZeroSlopeEnding=2401;e.WrapAroundEnding=2402;e.TrianglesDrawMode=0;e.TriangleStripDrawMode=1;e.TriangleFanDrawMode=2;e.LinearEncoding=3e3;e.sRGBEncoding=3001;e.GammaEncoding=3007;e.RGBEEncoding=3002;e.LogLuvEncoding=3003;e.RGBM7Encoding=3004;e.RGBM16Encoding=3005;e.RGBDEncoding=3006;e.BasicDepthPacking=3200;e.RGBADepthPacking=3201;e.TangentSpaceNormalMap=0;e.ObjectSpaceNormalMap=1;e.CubeGeometry=O;e.Face4=function(e,t,r,n,i,o,a){console.warn("THREE.Face4 has been removed. A THREE.Face3 will be created instead.");return new k(e,t,r,i,o,a)};e.LineStrip=0;e.LinePieces=1;e.MeshFaceMaterial=function(e){console.warn("THREE.MeshFaceMaterial has been removed. Use an Array instead.");return e};e.MultiMaterial=function(e){void 0===e&&(e=[]);console.warn("THREE.MultiMaterial has been removed. Use an Array instead.");e.isMultiMaterial=!0;e.materials=e;e.clone=function(){return e.slice()};return e};e.PointCloud=function(e,t){console.warn("THREE.PointCloud has been renamed to THREE.Points.");return new Bt(e,t)};e.Particle=function(e){console.warn("THREE.Particle has been renamed to THREE.Sprite.");return new Ot(e)};e.ParticleSystem=function(e,t){console.warn("THREE.ParticleSystem has been renamed to THREE.Points.");return new Bt(e,t)};e.PointCloudMaterial=function(e){console.warn("THREE.PointCloudMaterial has been renamed to THREE.PointsMaterial.");return new kt(e)};e.ParticleBasicMaterial=function(e){console.warn("THREE.ParticleBasicMaterial has been renamed to THREE.PointsMaterial.");return new kt(e)};e.ParticleSystemMaterial=function(e){console.warn("THREE.ParticleSystemMaterial has been renamed to THREE.PointsMaterial.");return new kt(e)};e.Vertex=function(e,t,r){console.warn("THREE.Vertex has been removed. Use THREE.Vector3 instead.");return new we(e,t,r)};e.DynamicBufferAttribute=function(e,t){console.warn("THREE.DynamicBufferAttribute has been removed. Use new THREE.BufferAttribute().setDynamic( true ) instead.");return new y(e,t).setDynamic(!0)};e.Int8Attribute=function(e,t){console.warn("THREE.Int8Attribute has been removed. Use new THREE.Int8BufferAttribute() instead.");return new a(e,t)};e.Uint8Attribute=function(e,t){console.warn("THREE.Uint8Attribute has been removed. Use new THREE.Uint8BufferAttribute() instead.");return new l(e,t)};e.Uint8ClampedAttribute=function(e,t){console.warn("THREE.Uint8ClampedAttribute has been removed. Use new THREE.Uint8ClampedBufferAttribute() instead.");return new d(e,t)};e.Int16Attribute=function(e,t){console.warn("THREE.Int16Attribute has been removed. Use new THREE.Int16BufferAttribute() instead.");return new v(e,t)};e.Uint16Attribute=function(e,t){console.warn("THREE.Uint16Attribute has been removed. Use new THREE.Uint16BufferAttribute() instead.");return new _(e,t)};e.Int32Attribute=function(e,t){console.warn("THREE.Int32Attribute has been removed. Use new THREE.Int32BufferAttribute() instead.");return new b(e,t)};e.Uint32Attribute=function(e,t){console.warn("THREE.Uint32Attribute has been removed. Use new THREE.Uint32BufferAttribute() instead.");return new x(e,t)};e.Float32Attribute=function(e,t){console.warn("THREE.Float32Attribute has been removed. Use new THREE.Float32BufferAttribute() instead.");return new P(e,t)};e.Float64Attribute=function(e,t){console.warn("THREE.Float64Attribute has been removed. Use new THREE.Float64BufferAttribute() instead.");return new M(e,t)};e.ClosedSplineCurve3=Zi;e.SplineCurve3=Ji;e.Spline=Qi;e.AxisHelper=function(e){console.warn("THREE.AxisHelper has been renamed to THREE.AxesHelper.");return new Ki(e)};e.BoundingBoxHelper=function(e,t){console.warn("THREE.BoundingBoxHelper has been deprecated. Creating a THREE.BoxHelper instead.");return new qi(e,t)};e.EdgesHelper=function(e,t){console.warn("THREE.EdgesHelper has been removed. Use THREE.EdgesGeometry instead.");return new Nt(new $r(e.geometry),new Lt({color:void 0!==t?t:16777215}))};e.WireframeHelper=function(e,t){console.warn("THREE.WireframeHelper has been removed. Use THREE.WireframeGeometry instead.");return new Nt(new Gt(e.geometry),new Lt({color:void 0!==t?t:16777215}))};e.XHRLoader=function(e){console.warn("THREE.XHRLoader has been renamed to THREE.FileLoader.");return new nn(e)};e.BinaryTextureLoader=function(e){console.warn("THREE.BinaryTextureLoader has been renamed to THREE.DataTextureLoader.");return new an(e)};e.GeometryUtils={merge:function(e,t,r){console.warn("THREE.GeometryUtils: .merge() has been moved to Geometry. Use geometry.merge( geometry2, matrix, materialIndexOffset ) instead.");if(t.isMesh){t.matrixAutoUpdate&&t.updateMatrix();var n=t.matrix;t=t.geometry}e.merge(t,n,r)},center:function(e){console.warn("THREE.GeometryUtils: .center() has been moved to Geometry. Use geometry.center() instead.");return e.center()}};e.Projector=function(){console.error("THREE.Projector has been moved to /examples/js/renderers/Projector.js.");this.projectVector=function(e,t){console.warn("THREE.Projector: .projectVector() is now vector.project().");e.project(t)};this.unprojectVector=function(e,t){console.warn("THREE.Projector: .unprojectVector() is now vector.unproject().");e.unproject(t)};this.pickingRay=function(){console.error("THREE.Projector: .pickingRay() is now raycaster.setFromCamera().")}};e.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(){}};e.SceneUtils={createMultiMaterialObject:function(){console.error("THREE.SceneUtils has been moved to /examples/js/utils/SceneUtils.js")},detach:function(){console.error("THREE.SceneUtils has been moved to /examples/js/utils/SceneUtils.js")},attach:function(){console.error("THREE.SceneUtils has been moved to /examples/js/utils/SceneUtils.js")}};e.LensFlare=function(){console.error("THREE.LensFlare has been moved to /examples/js/objects/Lensflare.js")};Object.defineProperty(e,"__esModule",{value:!0})})},{}],227:[function(e,t,r){"use strict";t.exports=n;function n(e,t){if(!(this instanceof n))return new n(e,t);this.data=e||[];this.length=this.data.length;this.compare=t||i;if(this.length>0){for(var r=this.length>>1;r>=0;r--)this._down(r)}}function i(e,t){return e<t?-1:e>t?1:0}n.prototype={push:function(e){this.data.push(e);this.length++;this._up(this.length-1)},pop:function(){if(this.length===0)return undefined;var e=this.data[0];this.length--;if(this.length>0){this.data[0]=this.data[this.length];this._down(0)}this.data.pop();return e},peek:function(){return this.data[0]},_up:function(e){var t=this.data;var r=this.compare;var n=t[e];while(e>0){var i=e-1>>1;var o=t[i];if(r(n,o)>=0)break;t[e]=o;e=i}t[e]=n},_down:function(e){var t=this.data;var r=this.compare;var n=this.length;var i=n>>1;var o=t[e];while(e<i){var a=(e<<1)+1;var s=a+1;var u=t[a];if(s<n&&r(t[s],u)<0){a=s;u=t[s]}if(r(u,o)>=0)break;t[e]=u;e=a}t[e]=o}}},{}],228:[function(e,t,r){var n=e("./vdom/create-element.js");t.exports=n},{"./vdom/create-element.js":234}],229:[function(e,t,r){var n=e("./vtree/diff.js");t.exports=n},{"./vtree/diff.js":254}],230:[function(e,t,r){var n=e("./virtual-hyperscript/index.js");t.exports=n},{"./virtual-hyperscript/index.js":241}],231:[function(e,t,r){var n=e("./diff.js");var i=e("./patch.js");var o=e("./h.js");var a=e("./create-element.js");var s=e("./vnode/vnode.js");var u=e("./vnode/vtext.js");t.exports={diff:n,patch:i,h:o,create:a,VNode:s,VText:u}},{"./create-element.js":228,"./diff.js":229,"./h.js":230,"./patch.js":232,"./vnode/vnode.js":250,"./vnode/vtext.js":252}],232:[function(e,t,r){var n=e("./vdom/patch.js");t.exports=n},{"./vdom/patch.js":237}],233:[function(e,t,r){var l=e("is-object");var s=e("../vnode/is-vhook.js");t.exports=n;function n(e,t,r){for(var n in t){var i=t[n];if(i===undefined){o(e,n,i,r)}else if(s(i)){o(e,n,i,r);if(i.hook){i.hook(e,n,r?r[n]:undefined)}}else{if(l(i)){a(e,t,r,n,i)}else{e[n]=i}}}}function o(e,t,r,n){if(n){var i=n[t];if(!s(i)){if(t==="attributes"){for(var o in i){e.removeAttribute(o)}}else if(t==="style"){for(var a in i){e.style[a]=""}}else if(typeof i==="string"){e[t]=""}else{e[t]=null}}else if(i.unhook){i.unhook(e,t,r)}}}function a(e,t,r,n,i){var o=r?r[n]:undefined;if(n==="attributes"){for(var a in i){var s=i[a];if(s===undefined){e.removeAttribute(a)}else{e.setAttribute(a,s)}}return}if(o&&l(o)&&p(o)!==p(i)){e[n]=i;return}if(!l(e[n])){e[n]={}}var u=n==="style"?"":undefined;for(var c in i){var h=i[c];e[n][c]=h===undefined?u:h}}function p(e){if(Object.getPrototypeOf){return Object.getPrototypeOf(e)}else if(e.__proto__){return e.__proto__}else if(e.constructor){return e.constructor.prototype}}},{"../vnode/is-vhook.js":245,"is-object":20}],234:[function(e,t,r){var c=e("global/document");var h=e("./apply-properties");var l=e("../vnode/is-vnode.js");var p=e("../vnode/is-vtext.js");var f=e("../vnode/is-widget.js");var d=e("../vnode/handle-thunk.js");t.exports=v;function v(e,t){var r=t?t.document||c:c;var n=t?t.warn:null;e=d(e).a;if(f(e)){return e.init()}else if(p(e)){return r.createTextNode(e.text)}else if(!l(e)){if(n){n("Item is not a valid virtual dom node",e)}return null}var i=e.namespace===null?r.createElement(e.tagName):r.createElementNS(e.namespace,e.tagName);var o=e.properties;h(i,o);var a=e.children;for(var s=0;s<a.length;s++){var u=v(a[s],t);if(u){i.appendChild(u)}}return i}},{"../vnode/handle-thunk.js":243,"../vnode/is-vnode.js":246,"../vnode/is-vtext.js":247,"../vnode/is-widget.js":248,"./apply-properties":233,"global/document":16}],235:[function(e,t,r){var h={};t.exports=n;function n(e,t,r,n){if(!r||r.length===0){return{}}else{r.sort(i);return l(e,t,r,n,0)}}function l(e,t,r,n,i){n=n||{};if(e){if(p(r,i,i)){n[i]=e}var o=t.children;if(o){var a=e.childNodes;for(var s=0;s<t.children.length;s++){i+=1;var u=o[s]||h;var c=i+(u.count||0);if(p(r,i,c)){l(a[s],u,r,n,i)}i=c}}}return n}function p(e,t,r){if(e.length===0){return false}var n=0;var i=e.length-1;var o;var a;while(n<=i){o=(i+n)/2>>0;a=e[o];if(n===i){return a>=t&&a<=r}else if(a<t){n=o+1}else if(a>r){i=o-1}else{return true}}return false}function i(e,t){return e>t?1:-1}},{}],236:[function(e,t,r){var a=e("./apply-properties");var n=e("../vnode/is-widget.js");var s=e("../vnode/vpatch.js");var u=e("./update-widget");t.exports=i;function i(e,t,r){var n=e.type;var i=e.vNode;var o=e.patch;switch(n){case s.REMOVE:return c(t,i);case s.INSERT:return h(t,o,r);case s.VTEXT:return l(t,i,o,r);case s.WIDGET:return p(t,i,o,r);case s.VNODE:return f(t,i,o,r);case s.ORDER:v(t,o);return t;case s.PROPS:a(t,o,i.properties);return t;case s.THUNK:return m(t,r.patch(t,o,r));default:return t}}function c(e,t){var r=e.parentNode;if(r){r.removeChild(e)}d(e,t);return null}function h(e,t,r){var n=r.render(t,r);if(e){e.appendChild(n)}return e}function l(e,t,r,n){var i;if(e.nodeType===3){e.replaceData(0,e.length,r.text);i=e}else{var o=e.parentNode;i=n.render(r,n);if(o&&i!==e){o.replaceChild(i,e)}}return i}function p(e,t,r,n){var i=u(t,r);var o;if(i){o=r.update(t,e)||e}else{o=n.render(r,n)}var a=e.parentNode;if(a&&o!==e){a.replaceChild(o,e)}if(!i){d(e,t)}return o}function f(e,t,r,n){var i=e.parentNode;var o=n.render(r,n);if(i&&o!==e){i.replaceChild(o,e)}return o}function d(e,t){if(typeof t.destroy==="function"&&n(t)){t.destroy(e)}}function v(e,t){var r=e.childNodes;var n={};var i;var o;var a;for(var s=0;s<t.removes.length;s++){o=t.removes[s];i=r[o.from];if(o.key){n[o.key]=i}e.removeChild(i)}var u=r.length;for(var c=0;c<t.inserts.length;c++){a=t.inserts[c];i=n[a.key];e.insertBefore(i,a.to>=u++?null:r[a.to])}}function m(e,t){if(e&&t&&e!==t&&e.parentNode){e.parentNode.replaceChild(t,e)}return t}},{"../vnode/is-widget.js":248,"../vnode/vpatch.js":251,"./apply-properties":233,"./update-widget":238}],237:[function(e,t,r){var u=e("global/document");var a=e("x-is-array");var n=e("./create-element");var c=e("./dom-index");var s=e("./patch-op");t.exports=i;function i(e,t,r){r=r||{};r.patch=r.patch&&r.patch!==i?r.patch:o;r.render=r.render||n;return r.patch(e,t,r)}function o(e,t,r){var n=l(t);if(n.length===0){return e}var i=c(e,t.a,n);var o=e.ownerDocument;if(!r.document&&o!==u){r.document=o}for(var a=0;a<n.length;a++){var s=n[a];e=h(e,i[s],t[s],r)}return e}function h(e,t,r,n){if(!t){return e}var i;if(a(r)){for(var o=0;o<r.length;o++){i=s(r[o],t,n);if(t===e){e=i}}}else{i=s(r,t,n);if(t===e){e=i}}return e}function l(e){var t=[];for(var r in e){if(r!=="a"){t.push(Number(r))}}return t}},{"./create-element":234,"./dom-index":235,"./patch-op":236,"global/document":16,"x-is-array":273}],238:[function(e,t,r){var n=e("../vnode/is-widget.js");t.exports=i;function i(e,t){if(n(e)&&n(t)){if("name"in e&&"name"in t){return e.id===t.id}else{return e.init===t.init}}return false}},{"../vnode/is-widget.js":248}],239:[function(e,t,r){"use strict";var i=e("ev-store");t.exports=n;function n(e){if(!(this instanceof n)){return new n(e)}this.value=e}n.prototype.hook=function(e,t){var r=i(e);var n=t.substr(3);r[n]=this.value};n.prototype.unhook=function(e,t){var r=i(e);var n=t.substr(3);r[n]=undefined}},{"ev-store":9}],240:[function(e,t,r){"use strict";t.exports=n;function n(e){if(!(this instanceof n)){return new n(e)}this.value=e}n.prototype.hook=function(e,t){if(e[t]!==this.value){e[t]=this.value}}},{}],241:[function(e,t,r){"use strict";var o=e("x-is-array");var u=e("../vnode/vnode.js");var a=e("../vnode/vtext.js");var n=e("../vnode/is-vnode");var i=e("../vnode/is-vtext");var s=e("../vnode/is-widget");var c=e("../vnode/is-vhook");var h=e("../vnode/is-thunk");var l=e("./parse-tag.js");var p=e("./hooks/soft-set-hook.js");var f=e("./hooks/ev-hook.js");t.exports=d;function d(e,t,r){var n=[];var i,o,a,s;if(!r&&y(t)){r=t;o={}}o=o||t||{};i=l(e,o);if(o.hasOwnProperty("key")){a=o.key;o.key=undefined}if(o.hasOwnProperty("namespace")){s=o.namespace;o.namespace=undefined}if(i==="INPUT"&&!s&&o.hasOwnProperty("value")&&o.value!==undefined&&!c(o.value)){o.value=p(o.value)}m(o);if(r!==undefined&&r!==null){v(r,n,i,o)}return new u(i,o,n,a,s)}function v(e,t,r,n){if(typeof e==="string"){t.push(new a(e))}else if(typeof e==="number"){t.push(new a(String(e)))}else if(g(e)){t.push(e)}else if(o(e)){for(var i=0;i<e.length;i++){v(e[i],t,r,n)}}else if(e===null||e===undefined){return}else{throw _({foreignObject:e,parentVnode:{tagName:r,properties:n}})}}function m(e){for(var t in e){if(e.hasOwnProperty(t)){var r=e[t];if(c(r)){continue}if(t.substr(0,3)==="ev-"){e[t]=f(r)}}}}function g(e){return n(e)||i(e)||s(e)||h(e)}function y(e){return typeof e==="string"||o(e)||g(e)}function _(e){var t=new Error;t.type="virtual-hyperscript.unexpected.virtual-element";t.message="Unexpected virtual child passed to h().\n"+"Expected a VNode / Vthunk / VWidget / string but:\n"+"got:\n"+b(e.foreignObject)+".\n"+"The parent vnode is:\n"+b(e.parentVnode);"\n"+"Suggested fix: change your `h(..., [ ... ])` callsite.";t.foreignObject=e.foreignObject;t.parentVnode=e.parentVnode;return t}function b(t){try{return JSON.stringify(t,null,"    ")}catch(e){return String(t)}}},{"../vnode/is-thunk":244,"../vnode/is-vhook":245,"../vnode/is-vnode":246,"../vnode/is-vtext":247,"../vnode/is-widget":248,"../vnode/vnode.js":250,"../vnode/vtext.js":252,"./hooks/ev-hook.js":239,"./hooks/soft-set-hook.js":240,"./parse-tag.js":242,"x-is-array":273}],242:[function(e,t,r){"use strict";var c=e("browser-split");var h=/([\.#]?[a-zA-Z0-9\u007F-\uFFFF_:-]+)/;var l=/^\.|#/;t.exports=n;function n(e,t){if(!e){return"DIV"}var r=!t.hasOwnProperty("id");var n=c(e,h);var i=null;if(l.test(n[1])){i="DIV"}var o,a,s,u;for(u=0;u<n.length;u++){a=n[u];if(!a){continue}s=a.charAt(0);if(!i){i=a}else if(s==="."){o=o||[];o.push(a.substring(1,a.length))}else if(s==="#"&&r){t.id=a.substring(1,a.length)}}if(o){if(t.className){o.push(t.className)}t.className=o.join(" ")}return t.namespace?i:i.toUpperCase()}},{"browser-split":5}],243:[function(e,t,r){var n=e("./is-vnode");var i=e("./is-vtext");var o=e("./is-widget");var a=e("./is-thunk");t.exports=s;function s(e,t){var r=e;var n=t;if(a(t)){n=u(t,e)}if(a(e)){r=u(e,null)}return{a:r,b:n}}function u(e,t){var r=e.vnode;if(!r){r=e.vnode=e.render(t)}if(!(n(r)||i(r)||o(r))){throw new Error("thunk did not return a valid node")}return r}},{"./is-thunk":244,"./is-vnode":246,"./is-vtext":247,"./is-widget":248}],244:[function(e,t,r){t.exports=n;function n(e){return e&&e.type==="Thunk"}},{}],245:[function(e,t,r){t.exports=n;function n(e){return e&&(typeof e.hook==="function"&&!e.hasOwnProperty("hook")||typeof e.unhook==="function"&&!e.hasOwnProperty("unhook"))}},{}],246:[function(e,t,r){var n=e("./version");t.exports=i;function i(e){return e&&e.type==="VirtualNode"&&e.version===n}},{"./version":249}],247:[function(e,t,r){var n=e("./version");t.exports=i;function i(e){return e&&e.type==="VirtualText"&&e.version===n}},{"./version":249}],248:[function(e,t,r){t.exports=n;function n(e){return e&&e.type==="Widget"}},{}],249:[function(e,t,r){t.exports="2"},{}],250:[function(e,t,r){var n=e("./version");var v=e("./is-vnode");var m=e("./is-widget");var g=e("./is-thunk");var y=e("./is-vhook");t.exports=i;var _={};var b=[];function i(e,t,r,n,i){this.tagName=e;this.properties=t||_;this.children=r||b;this.key=n!=null?String(n):undefined;this.namespace=typeof i==="string"?i:null;var o=r&&r.length||0;var a=0;var s=false;var u=false;var c=false;var h;for(var l in t){if(t.hasOwnProperty(l)){var p=t[l];if(y(p)&&p.unhook){if(!h){h={}}h[l]=p}}}for(var f=0;f<o;f++){var d=r[f];if(v(d)){a+=d.count||0;if(!s&&d.hasWidgets){s=true}if(!u&&d.hasThunks){u=true}if(!c&&(d.hooks||d.descendantHooks)){c=true}}else if(!s&&m(d)){if(typeof d.destroy==="function"){s=true}}else if(!u&&g(d)){u=true}}this.count=o+a;this.hasWidgets=s;this.hasThunks=u;this.hooks=h;this.descendantHooks=c}i.prototype.version=n;i.prototype.type="VirtualNode"},{"./is-thunk":244,"./is-vhook":245,"./is-vnode":246,"./is-widget":248,"./version":249}],251:[function(e,t,r){var n=e("./version");i.NONE=0;i.VTEXT=1;i.VNODE=2;i.WIDGET=3;i.PROPS=4;i.ORDER=5;i.INSERT=6;i.REMOVE=7;i.THUNK=8;t.exports=i;function i(e,t,r){this.type=Number(e);this.vNode=t;this.patch=r}i.prototype.version=n;i.prototype.type="VirtualPatch"},{"./version":249}],252:[function(e,t,r){var n=e("./version");t.exports=i;function i(e){this.text=String(e)}i.prototype.version=n;i.prototype.type="VirtualText"},{"./version":249}],253:[function(e,t,r){var u=e("is-object");var c=e("../vnode/is-vhook");t.exports=h;function h(e,t){var r;for(var n in e){if(!(n in t)){r=r||{};r[n]=undefined}var i=e[n];var o=t[n];if(i===o){continue}else if(u(i)&&u(o)){if(l(o)!==l(i)){r=r||{};r[n]=o}else if(c(o)){r=r||{};r[n]=o}else{var a=h(i,o);if(a){r=r||{};r[n]=a}}}else{r=r||{};r[n]=o}}for(var s in t){if(!(s in e)){r=r||{};r[s]=t[s]}}return r}function l(e){if(Object.getPrototypeOf){return Object.getPrototypeOf(e)}else if(e.__proto__){return e.__proto__}else if(e.constructor){return e.constructor.prototype}}},{"../vnode/is-vhook":245,"is-object":20}],254:[function(e,t,r){var n=e("x-is-array");var d=e("../vnode/vpatch");var v=e("../vnode/is-vnode");var s=e("../vnode/is-vtext");var u=e("../vnode/is-widget");var c=e("../vnode/is-thunk");var a=e("../vnode/handle-thunk");var h=e("./diff-props");t.exports=l;function l(e,t){var r={a:e};m(e,t,r,0);return r}function m(e,t,r,n){if(e===t){return}var i=r[n];var o=false;if(c(e)||c(t)){y(e,t,r,n)}else if(t==null){if(!u(e)){f(e,r,n);i=r[n]}i=S(i,new d(d.REMOVE,e,t))}else if(v(t)){if(v(e)){if(e.tagName===t.tagName&&e.namespace===t.namespace&&e.key===t.key){var a=h(e.properties,t.properties);if(a){i=S(i,new d(d.PROPS,e,a))}i=p(e,t,r,i,n)}else{i=S(i,new d(d.VNODE,e,t));o=true}}else{i=S(i,new d(d.VNODE,e,t));o=true}}else if(s(t)){if(!s(e)){i=S(i,new d(d.VTEXT,e,t));o=true}else if(e.text!==t.text){i=S(i,new d(d.VTEXT,e,t))}}else if(u(t)){if(!u(e)){o=true}i=S(i,new d(d.WIDGET,e,t))}if(i){r[n]=i}if(o){f(e,r,n)}}function p(e,t,r,n,i){var o=e.children;var a=w(o,t.children);var s=a.children;var u=o.length;var c=s.length;var h=u>c?u:c;for(var l=0;l<h;l++){var p=o[l];var f=s[l];i+=1;if(!p){if(f){n=S(n,new d(d.INSERT,null,f))}}else{m(p,f,r,i)}if(v(p)&&p.count){i+=p.count}}if(a.moves){n=S(n,new d(d.ORDER,e,a.moves))}return n}function f(e,t,r){b(e,t,r);g(e,t,r)}function g(e,t,r){if(u(e)){if(typeof e.destroy==="function"){t[r]=S(t[r],new d(d.REMOVE,e,null))}}else if(v(e)&&(e.hasWidgets||e.hasThunks)){var n=e.children;var i=n.length;for(var o=0;o<i;o++){var a=n[o];r+=1;g(a,t,r);if(v(a)&&a.count){r+=a.count}}}else if(c(e)){y(e,null,t,r)}}function y(e,t,r,n){var i=a(e,t);var o=l(i.a,i.b);if(_(o)){r[n]=new d(d.THUNK,null,o)}}function _(e){for(var t in e){if(t!=="a"){return true}}return false}function b(e,t,r){if(v(e)){if(e.hooks){t[r]=S(t[r],new d(d.PROPS,e,x(e.hooks)))}if(e.descendantHooks||e.hasThunks){var n=e.children;var i=n.length;for(var o=0;o<i;o++){var a=n[o];r+=1;b(a,t,r);if(v(a)&&a.count){r+=a.count}}}}else if(c(e)){y(e,null,t,r)}}function x(e){var t={};for(var r in e){t[r]=undefined}return t}function w(e,t){var r=C(t);var n=r.keys;var i=r.free;if(i.length===t.length){return{children:t,moves:null}}var o=C(e);var a=o.keys;var s=o.free;if(s.length===e.length){return{children:t,moves:null}}var u=[];var c=0;var h=i.length;var l=0;for(var p=0;p<e.length;p++){var f=e[p];var d;if(f.key){if(n.hasOwnProperty(f.key)){d=n[f.key];u.push(t[d])}else{d=p-l++;u.push(null)}}else{if(c<h){d=i[c++];u.push(t[d])}else{d=p-l++;u.push(null)}}}var v=c>=i.length?t.length:i[c];for(var m=0;m<t.length;m++){var g=t[m];if(g.key){if(!a.hasOwnProperty(g.key)){u.push(g)}}else if(m>=v){u.push(g)}}var y=u.slice();var _=0;var b=[];var x=[];var w;for(var S=0;S<t.length;){var M=t[S];w=y[_];while(w===null&&y.length){b.push(E(y,_,null));w=y[_]}if(!w||w.key!==M.key){if(M.key){if(w&&w.key){if(n[w.key]!==S+1){b.push(E(y,_,w.key));w=y[_];if(!w||w.key!==M.key){x.push({key:M.key,to:S})}else{_++}}else{x.push({key:M.key,to:S})}}else{x.push({key:M.key,to:S})}S++}else if(w&&w.key){b.push(E(y,_,w.key))}}else{_++;S++}}while(_<y.length){w=y[_];b.push(E(y,_,w&&w.key))}if(b.length===l&&!x.length){return{children:u,moves:null}}return{children:u,moves:{removes:b,inserts:x}}}function E(e,t,r){e.splice(t,1);return{from:t,key:r}}function C(e){var t={};var r=[];var n=e.length;for(var i=0;i<n;i++){var o=e[i];if(o.key){t[o.key]=i}else{r.push(i)}}return{keys:t,free:r}}function S(e,t){if(e){if(n(e)){e.push(t)}else{e=[e,t]}return e}else{return t}}},{"../vnode/handle-thunk":243,"../vnode/is-thunk":244,"../vnode/is-vnode":246,"../vnode/is-vtext":247,"../vnode/is-widget":248,"../vnode/vpatch":251,"./diff-props":253,"x-is-array":273}],255:[function(t,r,e){(function(e){"use strict";e(function(e){var t=e("./makePromise");var r=e("./Scheduler");var n=e("./env").asap;return t({scheduler:new r(n)})})})(typeof o==="function"&&o.amd?o:function(e){r.exports=e(t)})},{"./Scheduler":256,"./env":268,"./makePromise":270}],256:[function(e,t,r){(function(e){"use strict";e(function(){function e(e){this._async=e;this._running=false;this._queue=this;this._queueLen=0;this._afterQueue={};this._afterQueueLen=0;var t=this;this.drain=function(){t._drain()}}e.prototype.enqueue=function(e){this._queue[this._queueLen++]=e;this.run()};e.prototype.afterQueue=function(e){this._afterQueue[this._afterQueueLen++]=e;this.run()};e.prototype.run=function(){if(!this._running){this._running=true;this._async(this.drain)}};e.prototype._drain=function(){var e=0;for(;e<this._queueLen;++e){this._queue[e].run();this._queue[e]=void 0}this._queueLen=0;this._running=false;for(e=0;e<this._afterQueueLen;++e){this._afterQueue[e].run();this._afterQueue[e]=void 0}this._afterQueueLen=0};return e})})(typeof o==="function"&&o.amd?o:function(e){t.exports=e()})},{}],257:[function(e,t,r){(function(e){"use strict";e(function(){function t(e){Error.call(this);this.message=e;this.name=t.name;if(typeof Error.captureStackTrace==="function"){Error.captureStackTrace(this,t)}}t.prototype=Object.create(Error.prototype);t.prototype.constructor=t;return t})})(typeof o==="function"&&o.amd?o:function(e){t.exports=e()})},{}],258:[function(e,t,r){(function(e){"use strict";e(function(){e.tryCatchResolve=t;return e;function e(a,s){if(arguments.length<2){s=t}return e;function e(e,t,r){var n=a._defer();var i=r.length;var o=new Array(i);u({f:e,thisArg:t,args:r,params:o,i:i-1,call:s},n._handler);return n}function u(e,t){if(e.i<0){return s(e.f,e.thisArg,e.params,t)}var r=a._handler(e.args[e.i]);r.fold(n,e,void 0,t)}function n(e,t,r){e.params[e.i]=t;e.i-=1;u(e,r)}}function t(e,t,r,n){try{n.resolve(e.apply(t,r))}catch(e){n.reject(e)}}})})(typeof o==="function"&&o.amd?o:function(e){t.exports=e()})},{}],259:[function(t,r,e){(function(e){"use strict";e(function(e){var y=e("../state");var _=e("../apply");return function e(f){var i=_(f);var r=f.resolve;var n=f.all;var o=Array.prototype.reduce;var a=Array.prototype.reduceRight;var s=Array.prototype.slice;f.any=t;f.some=u;f.settle=p;f.map=c;f.filter=h;f.reduce=v;f.reduceRight=m;f.prototype.spread=function(t){return this.then(n).then(function(e){return t.apply(this,e)})};return f;function t(e){var t=f._defer();var r=t._handler;var n=e.length>>>0;var i=n;var o=[];for(var a,s,u=0;u<n;++u){s=e[u];if(s===void 0&&!(u in e)){--i;continue}a=f._handler(s);if(a.state()>0){r.become(a);f._visitRemaining(e,u,a);break}else{a.visit(r,c,h)}}if(i===0){r.reject(new RangeError("any(): array must not be empty"))}return t;function c(e){o=null;this.resolve(e)}function h(e){if(this.resolved){return}o.push(e);if(--i===0){this.reject(o)}}}function u(e,t){var r=f._defer();var n=r._handler;var i=[];var o=[];var a=e.length>>>0;var s=0;var u;var c,h;for(h=0;h<a;++h){c=e[h];if(c===void 0&&!(h in e)){continue}++s}t=Math.max(t,0);u=s-t+1;s=Math.min(t,s);if(t>s){n.reject(new RangeError("some(): array must contain at least "+t+" item(s), but had "+s))}else if(s===0){n.resolve(i)}for(h=0;h<a;++h){c=e[h];if(c===void 0&&!(h in e)){continue}f._handler(c).visit(n,l,p,n.notify)}return r;function l(e){if(this.resolved){return}i.push(e);if(--s===0){o=null;this.resolve(i)}}function p(e){if(this.resolved){return}o.push(e);if(--u===0){i=null;this.reject(o)}}}function c(e,t){return f._traverse(t,e)}function h(e,t){var r=s.call(e);return f._traverse(t,r).then(function(e){return l(r,e)})}function l(e,t){var r=t.length;var n=new Array(r);for(var i=0,o=0;i<r;++i){if(t[i]){n[o++]=f._handler(e[i]).value}}n.length=o;return n}function p(e){return n(e.map(d))}function d(e){var t;if(e instanceof f){t=e._handler.join()}if(t&&t.state()===0||!t){return r(e).then(y.fulfilled,y.rejected)}t._unreport();return y.inspect(t)}function v(e,t){return arguments.length>2?o.call(e,g(t),arguments[2]):o.call(e,g(t))}function m(e,t){return arguments.length>2?a.call(e,g(t),arguments[2]):a.call(e,g(t))}function g(n){return function(e,t,r){return i(n,void 0,[e,t,r])}}}})})(typeof o==="function"&&o.amd?o:function(e){r.exports=e(t)})},{"../apply":258,"../state":271}],260:[function(e,t,r){(function(e){"use strict";e(function(){return function e(t){var n=t.resolve;var i=t.reject;var r=t.prototype["catch"];t.prototype.done=function(e,t){this._handler.visit(this._handler.receiver,e,t)};t.prototype["catch"]=t.prototype.otherwise=function(e){if(arguments.length<2){return r.call(this,e)}if(typeof e!=="function"){return this.ensure(u)}return r.call(this,o(arguments[1],e))};function o(t,r){return function(e){return c(e,r)?t.call(this,e):i(e)}}t.prototype["finally"]=t.prototype.ensure=function(t){if(typeof t!=="function"){return this}return this.then(function(e){return a(t,this,l,e)},function(e){return a(t,this,i,e)})};function a(e,t,r,n){var i=e.call(t);return h(i)?s(i,r,n):r(n)}function s(e,t,r){return n(e).then(function(){return t(r)})}t.prototype["else"]=t.prototype.orElse=function(e){return this.then(void 0,function(){return e})};t.prototype["yield"]=function(e){return this.then(function(){return e})};t.prototype.tap=function(e){return this.then(e)["yield"](this)};return t};function u(){throw new TypeError("catch predicate must be a function")}function c(e,t){return r(t)?e instanceof t:t(e)}function r(e){return e===Error||e!=null&&e.prototype instanceof Error}function h(e){return(typeof e==="object"||typeof e==="function")&&e!==null}function l(e){return e}})})(typeof o==="function"&&o.amd?o:function(e){t.exports=e()})},{}],261:[function(e,t,r){(function(e){"use strict";e(function(){return function e(i){i.prototype.fold=function(n,e){var t=this._beget();this._handler.fold(function(e,t,r){i._handler(e).fold(function(e,t,r){r.resolve(n.call(this,t,e))},t,this,r)},e,t._handler.receiver,t._handler);return t};return i}})})(typeof o==="function"&&o.amd?o:function(e){t.exports=e()})},{}],262:[function(t,r,e){(function(e){"use strict";e(function(e){var r=e("../state").inspect;return function e(t){t.prototype.inspect=function(){return r(t._handler(this))};return t}})})(typeof o==="function"&&o.amd?o:function(e){r.exports=e(t)})},{"../state":271}],263:[function(e,t,r){(function(e){"use strict";e(function(){return function e(t){var a=t.resolve;t.iterate=r;t.unfold=s;return t;function r(t,e,r,n){return s(function(e){return[e,t(e)]},e,r,n)}function s(r,n,i,e){return a(e).then(function(t){return a(n(t)).then(function(e){return e?t:a(r(t)).spread(o)})});function o(e,t){return a(i(e)).then(function(){return s(r,n,i,t)})}}}})})(typeof o==="function"&&o.amd?o:function(e){t.exports=e()})},{}],264:[function(e,t,r){(function(e){"use strict";e(function(){return function e(t){t.prototype.progress=function(e){return this.then(void 0,void 0,e)};return t}})})(typeof o==="function"&&o.amd?o:function(e){t.exports=e()})},{}],265:[function(t,r,e){(function(e){"use strict";e(function(e){var a=e("../env");var i=e("../TimeoutError");function s(e,t,r,n){return a.setTimer(function(){e(r,n,t)},t)}return function e(t){t.prototype.delay=function(e){var t=this._beget();this._handler.fold(r,e,void 0,t._handler);return t};function r(e,t,r){s(n,e,t,r)}function n(e,t){t.resolve(e)}t.prototype.timeout=function(e,t){var r=this._beget();var n=r._handler;var i=s(o,e,t,r._handler);this._handler.visit(n,function e(t){a.clearTimer(i);this.resolve(t)},function e(t){a.clearTimer(i);this.reject(t)},n.notify);return r};function o(e,t,r){var n=typeof e==="undefined"?new i("timed out after "+r+"ms"):e;t.reject(n)}return t}})})(typeof o==="function"&&o.amd?o:function(e){r.exports=e(t)})},{"../TimeoutError":257,"../env":268}],266:[function(t,r,e){(function(e){"use strict";e(function(e){var p=e("../env").setTimer;var f=e("../format");return function e(t){var r=v;var n=v;var i;if(typeof console!=="undefined"){i=console;r=typeof i.error!=="undefined"?function(e){i.error(e)}:function(e){i.log(e)};n=typeof i.info!=="undefined"?function(e){i.info(e)}:function(e){i.log(e)}}t.onPotentiallyUnhandledRejection=function(e){h(u,e)};t.onPotentiallyUnhandledRejectionHandled=function(e){h(c,e)};t.onFatalRejection=function(e){h(d,e.value)};var o=[];var a=[];var s=null;function u(e){if(!e.handled){a.push(e);r("Potentially unhandled rejection ["+e.id+"] "+f.formatError(e.value))}}function c(e){var t=a.indexOf(e);if(t>=0){a.splice(t,1);n("Handled previous rejection ["+e.id+"] "+f.formatObject(e.value))}}function h(e,t){o.push(e,t);if(s===null){s=p(l,0)}}function l(){s=null;while(o.length>0){o.shift()(o.shift())}}return t};function d(e){throw e}function v(){}})})(typeof o==="function"&&o.amd?o:function(e){r.exports=e(t)})},{"../env":268,"../format":269}],267:[function(e,t,r){(function(e){"use strict";e(function(){return function e(t){t.prototype["with"]=t.prototype.withThis=function(e){var t=this._beget();var r=t._handler;r.receiver=e;this._handler.chain(r,e);return t};return t}})})(typeof o==="function"&&o.amd?o:function(e){t.exports=e()})},{}],268:[function(t,r,e){(function(l){(function(e){"use strict";e(function(e){var t;var r=typeof setTimeout!=="undefined"&&setTimeout;var n=function(e,t){return setTimeout(e,t)};var i=function(e){return clearTimeout(e)};var o=function(e){return r(e,0)};if(u()){o=function(e){return l.nextTick(e)}}else if(t=c()){o=h(t)}else if(!r){var a=e;var s=a("vertx");n=function(e,t){return s.setTimer(t,e)};i=s.cancelTimer;o=s.runOnLoop||s.runOnContext}return{setTimer:n,clearTimer:i,asap:o};function u(){return typeof l!=="undefined"&&Object.prototype.toString.call(l)==="[object process]"}function c(){return typeof MutationObserver!=="undefined"&&MutationObserver||typeof WebKitMutationObserver!=="undefined"&&WebKitMutationObserver}function h(e){var t;var r=document.createTextNode("");var n=new e(i);n.observe(r,{characterData:true});function i(){var e=t;t=void 0;e()}var o=0;return function(e){t=e;r.data=o^=1}}})})(typeof o==="function"&&o.amd?o:function(e){r.exports=e(t)})}).call(this,t("_process"))},{_process:6}],269:[function(e,t,r){(function(e){"use strict";e(function(){return{formatError:e,formatObject:r,tryStringify:n};function e(e){var t=typeof e==="object"&&e!==null&&(e.stack||e.message)?e.stack||e.message:r(e);return e instanceof Error?t:t+" (WARNING: non-Error used)"}function r(e){var t=String(e);if(t==="[object Object]"&&typeof JSON!=="undefined"){t=n(e,t)}return t}function n(e,t){try{return JSON.stringify(e)}catch(e){return t}}})})(typeof o==="function"&&o.amd?o:function(e){t.exports=e()})},{}],270:[function(e,t,r){(function(ne){(function(e){"use strict";e(function(){return function e(t){var r=t.scheduler;var n=re();var i=Object.create||function(e){function t(){}t.prototype=e;return new t};function l(e,t){this._handler=e===S?t:o(e)}function o(e){var t=new C;try{e(r,n,i)}catch(e){n(e)}return t;function r(e){t.resolve(e)}function n(e){t.reject(e)}function i(e){t.notify(e)}}l.resolve=a;l.reject=s;l.never=u;l._defer=c;l._handler=b;function a(e){return U(e)?e:new l(S,new T(b(e)))}function s(e){return new l(S,new T(new j(e)))}function u(){return N}function c(){return new l(S,new C)}l.prototype.then=function(e,t,r){var n=this._handler;var i=n.join().state();if(typeof e!=="function"&&i>0||typeof t!=="function"&&i<0){return new this.constructor(S,n)}var o=this._beget();var a=o._handler;n.chain(a,n.receiver,e,t,r);return o};l.prototype["catch"]=function(e){return this.then(void 0,e)};l.prototype._beget=function(){return h(this._handler,this.constructor)};function h(e,t){var r=new C(e.receiver,e.join().context);return new t(S,r)}l.all=p;l.race=y;l._traverse=f;function p(e){return d(J,null,e)}function f(e,t){return d(W,e,t)}function d(n,i,o){var e=typeof i==="function"?c:h;var t=new C;var a=o.length>>>0;var s=new Array(a);for(var r=0,u;r<o.length&&!t.resolved;++r){u=o[r];if(u===void 0&&!(r in o)){--a;continue}v(o,e,r,u,t)}if(a===0){t.become(new P(s))}return new l(S,t);function c(e,t,r){if(!r.resolved){v(o,h,e,n(i,t,e),r)}}function h(e,t,r){s[e]=t;if(--a===0){r.become(new P(s))}}}function v(e,t,r,n,i){if(G(n)){var o=x(n);var a=o.state();if(a===0){o.fold(t,r,void 0,i)}else if(a>0){t(r,o.value,i)}else{i.become(o);m(e,r+1,o)}}else{t(r,n,i)}}l._visitRemaining=m;function m(e,t,r){for(var n=t;n<e.length;++n){g(b(e[n]),r)}}function g(e,t){if(e===t){return}var r=e.state();if(r===0){e.visit(e,void 0,e._unreport)}else if(r<0){e._unreport()}}function y(e){if(typeof e!=="object"||e===null){return s(new TypeError("non-iterable passed to race()"))}return e.length===0?u():e.length===1?a(e[0]):_(e)}function _(e){var t=new C;var r,n,i;for(r=0;r<e.length;++r){n=e[r];if(n===void 0&&!(r in e)){continue}i=b(n);if(i.state()!==0){t.become(i);m(e,r+1,i);break}else{i.visit(t,t.resolve,t.reject)}}return new l(S,t)}function b(e){if(U(e)){return e._handler.join()}return G(e)?w(e):new P(e)}function x(e){return U(e)?e._handler.join():w(e)}function w(e){try{var t=e.then;return typeof t==="function"?new O(t,e):new P(e)}catch(e){return new j(e)}}function S(){}S.prototype.when=S.prototype.become=S.prototype.notify=S.prototype.fail=S.prototype._unreport=S.prototype._report=Q;S.prototype._state=0;S.prototype.state=function(){return this._state};S.prototype.join=function(){var e=this;while(e.handler!==void 0){e=e.handler}return e};S.prototype.chain=function(e,t,r,n,i){this.when({resolver:e,receiver:t,fulfilled:r,rejected:n,progress:i})};S.prototype.visit=function(e,t,r,n){this.chain(E,e,t,r,n)};S.prototype.fold=function(e,t,r,n){this.when(new z(e,t,r,n))};function M(){}Z(S,M);M.prototype.become=function(e){e.fail()};var E=new M;function C(e,t){l.createContext(this,t);this.consumers=void 0;this.receiver=e;this.handler=void 0;this.resolved=false}Z(S,C);C.prototype._state=0;C.prototype.resolve=function(e){this.become(b(e))};C.prototype.reject=function(e){if(this.resolved){return}this.become(new j(e))};C.prototype.join=function(){if(!this.resolved){return this}var e=this;while(e.handler!==void 0){e=e.handler;if(e===this){return this.handler=D()}}return e};C.prototype.run=function(){var e=this.consumers;var t=this.handler;this.handler=this.handler.join();this.consumers=void 0;for(var r=0;r<e.length;++r){t.when(e[r])}};C.prototype.become=function(e){if(this.resolved){return}this.resolved=true;this.handler=e;if(this.consumers!==void 0){r.enqueue(this)}if(this.context!==void 0){e._report(this.context)}};C.prototype.when=function(e){if(this.resolved){r.enqueue(new k(e,this.handler))}else{if(this.consumers===void 0){this.consumers=[e]}else{this.consumers.push(e)}}};C.prototype.notify=function(e){if(!this.resolved){r.enqueue(new B(e,this))}};C.prototype.fail=function(e){var t=typeof e==="undefined"?this.context:e;this.resolved&&this.handler.join().fail(t)};C.prototype._report=function(e){this.resolved&&this.handler.join()._report(e)};C.prototype._unreport=function(){this.resolved&&this.handler.join()._unreport()};function T(e){this.handler=e}Z(S,T);T.prototype.when=function(e){r.enqueue(new k(e,this))};T.prototype._report=function(e){this.join()._report(e)};T.prototype._unreport=function(){this.join()._unreport()};function O(e,t){C.call(this);r.enqueue(new F(e,t,this))}Z(C,O);function P(e){l.createContext(this);this.value=e}Z(S,P);P.prototype._state=1;P.prototype.fold=function(e,t,r,n){H(e,t,this,r,n)};P.prototype.when=function(e){V(e.fulfilled,this,e.receiver,e.resolver)};var A=0;function j(e){l.createContext(this);this.id=++A;this.value=e;this.handled=false;this.reported=false;this._report()}Z(S,j);j.prototype._state=-1;j.prototype.fold=function(e,t,r,n){n.become(this)};j.prototype.when=function(e){if(typeof e.rejected==="function"){this._unreport()}V(e.rejected,this,e.receiver,e.resolver)};j.prototype._report=function(e){r.afterQueue(new R(this,e))};j.prototype._unreport=function(){if(this.handled){return}this.handled=true;r.afterQueue(new L(this))};j.prototype.fail=function(e){this.reported=true;n("unhandledRejection",this);l.onFatalRejection(this,e===void 0?this.context:e)};function R(e,t){this.rejection=e;this.context=t}R.prototype.run=function(){if(!this.rejection.handled&&!this.rejection.reported){this.rejection.reported=true;n("unhandledRejection",this.rejection)||l.onPotentiallyUnhandledRejection(this.rejection,this.context)}};function L(e){this.rejection=e}L.prototype.run=function(){if(this.rejection.reported){n("rejectionHandled",this.rejection)||l.onPotentiallyUnhandledRejectionHandled(this.rejection)}};l.createContext=l.enterContext=l.exitContext=l.onPotentiallyUnhandledRejection=l.onPotentiallyUnhandledRejectionHandled=l.onFatalRejection=Q;var I=new S;var N=new l(S,I);function D(){return new j(new TypeError("Promise cycle"))}function k(e,t){this.continuation=e;this.handler=t}k.prototype.run=function(){this.handler.join().when(this.continuation)};function B(e,t){this.handler=t;this.value=e}B.prototype.run=function(){var e=this.handler.consumers;if(e===void 0){return}for(var t,r=0;r<e.length;++r){t=e[r];q(t.progress,this.value,this.handler,t.receiver,t.resolver)}};function F(e,t,r){this._then=e;this.thenable=t;this.resolver=r}F.prototype.run=function(){var t=this.resolver;$(this._then,this.thenable,e,r,n);function e(e){t.resolve(e)}function r(e){t.reject(e)}function n(e){t.notify(e)}};function $(e,t,r,n,i){try{e.call(t,r,n,i)}catch(e){n(e)}}function z(e,t,r,n){this.f=e;this.z=t;this.c=r;this.to=n;this.resolver=E;this.receiver=this}z.prototype.fulfilled=function(e){this.f.call(this.c,this.z,e,this.to)};z.prototype.rejected=function(e){this.to.reject(e)};z.prototype.progress=function(e){this.to.notify(e)};function U(e){return e instanceof l}function G(e){return(typeof e==="object"||typeof e==="function")&&e!==null}function V(e,t,r,n){if(typeof e!=="function"){return n.become(t)}l.enterContext(t);X(e,t.value,r,n);l.exitContext()}function H(e,t,r,n,i){if(typeof e!=="function"){return i.become(r)}l.enterContext(r);Y(e,t,r.value,n,i);l.exitContext()}function q(e,t,r,n,i){if(typeof e!=="function"){return i.notify(t)}l.enterContext(r);K(e,t,n,i);l.exitContext()}function W(e,t,r){try{return e(t,r)}catch(e){return s(e)}}function X(e,t,r,n){try{n.become(b(e.call(r,t)))}catch(e){n.become(new j(e))}}function Y(e,t,r,n,i){try{e.call(n,t,r,i)}catch(e){i.become(new j(e))}}function K(e,t,r,n){try{n.notify(e.call(r,t))}catch(e){n.notify(e)}}function Z(e,t){t.prototype=i(e.prototype);t.prototype.constructor=t}function J(e,t){return t}function Q(){}function ee(){if(typeof CustomEvent==="function"){try{var e=new CustomEvent("unhandledRejection");return e instanceof CustomEvent}catch(e){}}return false}function te(){if(typeof document!=="undefined"&&typeof document.createEvent==="function"){try{var e=document.createEvent("CustomEvent");e.initCustomEvent("eventType",false,true,{});return true}catch(e){}}return false}function re(){if(typeof ne!=="undefined"&&ne!==null&&typeof ne.emit==="function"){return function(e,t){return e==="unhandledRejection"?ne.emit(e,t.value,t):ne.emit(e,t)}}else if(typeof self!=="undefined"&&ee()){return function(n,i){return function(e,t){var r=new i(e,{detail:{reason:t.value,key:t},bubbles:false,cancelable:true});return!n.dispatchEvent(r)}}(self,CustomEvent)}else if(typeof self!=="undefined"&&te()){return function(n,i){return function(e,t){var r=i.createEvent("CustomEvent");r.initCustomEvent(e,false,true,{reason:t.value,key:t});return!n.dispatchEvent(r)}}(self,document)}return Q}return l}})})(typeof o==="function"&&o.amd?o:function(e){t.exports=e()})}).call(this,e("_process"))},{_process:6}],271:[function(e,t,r){(function(e){"use strict";e(function(){return{pending:r,fulfilled:i,rejected:n,inspect:e};function r(){return{state:"pending"}}function n(e){return{state:"rejected",reason:e}}function i(e){return{state:"fulfilled",value:e}}function e(e){var t=e.state();return t===0?r():t>0?i(e.value):n(e.value)}})})(typeof o==="function"&&o.amd?o:function(e){t.exports=e()})},{}],272:[function(t,r,e){(function(e){"use strict";e(function(e){var t=e("./lib/decorators/timed");var r=e("./lib/decorators/array");var n=e("./lib/decorators/flow");var i=e("./lib/decorators/fold");var o=e("./lib/decorators/inspect");var a=e("./lib/decorators/iterate");var s=e("./lib/decorators/progress");var u=e("./lib/decorators/with");var c=e("./lib/decorators/unhandledRejection");var h=e("./lib/TimeoutError");var l=[r,n,i,a,s,o,u,t,c].reduce(function(e,t){return t(e)},e("./lib/Promise"));var p=e("./lib/apply")(l);f.promise=d;f.resolve=l.resolve;f.reject=l.reject;f.lift=v;f["try"]=m;f.attempt=m;f.iterate=l.iterate;f.unfold=l.unfold;f.join=b;f.all=x;f.settle=w;f.any=v(l.any);f.some=v(l.some);f.race=v(l.race);f.map=S;f.filter=M;f.reduce=v(l.reduce);f.reduceRight=v(l.reduceRight);f.isPromiseLike=_;f.Promise=l;f.defer=g;f.TimeoutError=h;function f(e,t,r,n){var i=l.resolve(e);if(arguments.length<2){return i}return i.then(t,r,n)}function d(e){return new l(e)}function v(n){return function(){for(var e=0,t=arguments.length,r=new Array(t);e<t;++e){r[e]=arguments[e]}return p(n,this,r)}}function m(e){for(var t=0,r=arguments.length-1,n=new Array(r);t<r;++t){n[t]=arguments[t+1]}return p(e,this,n)}function g(){return new y}function y(){var t=l._defer();function e(e){t._handler.resolve(e)}function r(e){t._handler.reject(e)}function n(e){t._handler.notify(e)}this.promise=t;this.resolve=e;this.reject=r;this.notify=n;this.resolver={resolve:e,reject:r,notify:n}}function _(e){return e&&typeof e.then==="function"}function b(){return l.all(arguments)}function x(e){return f(e,l.all)}function w(e){return f(e,l.settle)}function S(e,t){return f(e,function(e){return l.map(e,t)})}function M(e,t){return f(e,function(e){return l.filter(e,t)})}return f})})(typeof o==="function"&&o.amd?o:function(e){r.exports=e(t)})},{"./lib/Promise":255,"./lib/TimeoutError":257,"./lib/apply":258,"./lib/decorators/array":259,"./lib/decorators/flow":260,"./lib/decorators/fold":261,"./lib/decorators/inspect":262,"./lib/decorators/iterate":263,"./lib/decorators/progress":264,"./lib/decorators/timed":265,"./lib/decorators/unhandledRejection":266,"./lib/decorators/with":267}],273:[function(e,t,r){var n=Array.isArray;var i=Object.prototype.toString;t.exports=n||o;function o(e){return i.call(e)==="[object Array]"}},{}],274:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("./api/APIv3");r.APIv3=n.APIv3;var i=e("./api/ModelCreator");r.ModelCreator=i.ModelCreator},{"./api/APIv3":287,"./api/ModelCreator":288}],275:[function(e,t,r){"use strict";function n(e){for(var t in e)if(!r.hasOwnProperty(t))r[t]=e[t]}Object.defineProperty(r,"__esModule",{value:true});var i=e("./component/Component");r.Component=i.Component;var o=e("./component/ComponentService");r.ComponentService=o.ComponentService;var a=e("./component/utils/HandlerBase");r.HandlerBase=a.HandlerBase;var s=e("./component/utils/MeshFactory");r.MeshFactory=s.MeshFactory;var u=e("./component/utils/MeshScene");r.MeshScene=u.MeshScene;var c=e("./component/utils/MouseOperator");r.MouseOperator=c.MouseOperator;var h=e("./component/AttributionComponent");r.AttributionComponent=h.AttributionComponent;var l=e("./component/BackgroundComponent");r.BackgroundComponent=l.BackgroundComponent;var p=e("./component/BearingComponent");r.BearingComponent=p.BearingComponent;var f=e("./component/CacheComponent");r.CacheComponent=f.CacheComponent;var d=e("./component/CoverComponent");r.CoverComponent=d.CoverComponent;var v=e("./component/DebugComponent");r.DebugComponent=v.DebugComponent;var m=e("./component/direction/DirectionComponent");r.DirectionComponent=m.DirectionComponent;var g=e("./component/direction/DirectionDOMCalculator");r.DirectionDOMCalculator=g.DirectionDOMCalculator;var y=e("./component/direction/DirectionDOMRenderer");r.DirectionDOMRenderer=y.DirectionDOMRenderer;var _=e("./component/ImageComponent");r.ImageComponent=_.ImageComponent;var b=e("./component/keyboard/KeyboardComponent");r.KeyboardComponent=b.KeyboardComponent;var x=e("./component/keyboard/KeyPlayHandler");r.KeyPlayHandler=x.KeyPlayHandler;var w=e("./component/keyboard/KeyZoomHandler");r.KeyZoomHandler=w.KeyZoomHandler;var S=e("./component/keyboard/KeySequenceNavigationHandler");r.KeySequenceNavigationHandler=S.KeySequenceNavigationHandler;var M=e("./component/keyboard/KeySpatialNavigationHandler");r.KeySpatialNavigationHandler=M.KeySpatialNavigationHandler;var E=e("./component/LoadingComponent");r.LoadingComponent=E.LoadingComponent;var C=e("./component/marker/marker/Marker");r.Marker=C.Marker;var T=e("./component/marker/MarkerComponent");r.MarkerComponent=T.MarkerComponent;var O=e("./component/marker/MarkerScene");r.MarkerScene=O.MarkerScene;var P=e("./component/marker/MarkerSet");r.MarkerSet=P.MarkerSet;var A=e("./component/mouse/MouseComponent");r.MouseComponent=A.MouseComponent;var j=e("./component/mouse/BounceHandler");r.BounceHandler=j.BounceHandler;var R=e("./component/mouse/DragPanHandler");r.DragPanHandler=R.DragPanHandler;var L=e("./component/mouse/DoubleClickZoomHandler");r.DoubleClickZoomHandler=L.DoubleClickZoomHandler;var I=e("./component/mouse/EarthControlHandler");r.EarthControlHandler=I.EarthControlHandler;var N=e("./component/mouse/ScrollZoomHandler");r.ScrollZoomHandler=N.ScrollZoomHandler;var D=e("./component/mouse/TouchZoomHandler");r.TouchZoomHandler=D.TouchZoomHandler;var k=e("./component/mouse/ImageBoundary");r.ImageBoundary=k;var B=e("./component/popup/popup/Popup");r.Popup=B.Popup;var F=e("./component/popup/PopupComponent");r.PopupComponent=F.PopupComponent;var $=e("./component/NavigationComponent");r.NavigationComponent=$.NavigationComponent;var z=e("./component/RouteComponent");r.RouteComponent=z.RouteComponent;var U=e("./component/sequence/SequenceComponent");r.SequenceComponent=U.SequenceComponent;var G=e("./component/sequence/SequenceDOMRenderer");r.SequenceDOMRenderer=G.SequenceDOMRenderer;var V=e("./component/sequence/SequenceMode");r.SequenceMode=V.SequenceMode;var H=e("./component/spatialdata/SpatialDataCache");r.SpatialDataCache=H.SpatialDataCache;var q=e("./component/spatialdata/SpatialDataComponent");r.SpatialDataComponent=q.SpatialDataComponent;var W=e("./component/spatialdata/SpatialDataScene");r.SpatialDataScene=W.SpatialDataScene;var X=e("./component/imageplane/ImagePlaneComponent");r.ImagePlaneComponent=X.ImagePlaneComponent;var Y=e("./component/imageplane/ImagePlaneGLRenderer");r.ImagePlaneGLRenderer=Y.ImagePlaneGLRenderer;var K=e("./component/shaders/Shaders");r.Shaders=K.Shaders;var Z=e("./component/marker/marker/SimpleMarker");r.SimpleMarker=Z.SimpleMarker;var J=e("./component/marker/marker/CircleMarker");r.CircleMarker=J.CircleMarker;var Q=e("./component/slider/SliderComponent");r.SliderComponent=Q.SliderComponent;var ee=e("./component/slider/SliderDOMRenderer");r.SliderDOMRenderer=ee.SliderDOMRenderer;var te=e("./component/slider/SliderGLRenderer");r.SliderGLRenderer=te.SliderGLRenderer;var re=e("./component/StatsComponent");r.StatsComponent=re.StatsComponent;var ne=e("./component/tag/handlers/TagHandlerBase");r.TagHandlerBase=ne.TagHandlerBase;var ie=e("./component/tag/handlers/CreateHandlerBase");r.CreateHandlerBase=ie.CreateHandlerBase;var oe=e("./component/tag/handlers/CreatePointHandler");r.CreatePointHandler=oe.CreatePointHandler;var ae=e("./component/tag/handlers/CreateVertexHandler");r.CreateVertexHandler=ae.CreateVertexHandler;var se=e("./component/tag/handlers/CreatePolygonHandler");r.CreatePolygonHandler=se.CreatePolygonHandler;var ue=e("./component/tag/handlers/CreateRectHandler");r.CreateRectHandler=ue.CreateRectHandler;var ce=e("./component/tag/handlers/CreateRectDragHandler");r.CreateRectDragHandler=ce.CreateRectDragHandler;var he=e("./component/tag/handlers/EditVertexHandler");r.EditVertexHandler=he.EditVertexHandler;var le=e("./component/tag/tag/Tag");r.Tag=le.Tag;var pe=e("./component/tag/tag/OutlineTag");r.OutlineTag=pe.OutlineTag;var fe=e("./component/tag/tag/RenderTag");r.RenderTag=fe.RenderTag;var de=e("./component/tag/tag/OutlineRenderTag");r.OutlineRenderTag=de.OutlineRenderTag;var ve=e("./component/tag/tag/OutlineCreateTag");r.OutlineCreateTag=ve.OutlineCreateTag;var me=e("./component/tag/tag/SpotTag");r.SpotTag=me.SpotTag;var ge=e("./component/tag/tag/SpotRenderTag");r.SpotRenderTag=ge.SpotRenderTag;var ye=e("./component/tag/tag/TagDomain");r.TagDomain=ye.TagDomain;var _e=e("./component/tag/TagComponent");r.TagComponent=_e.TagComponent;var be=e("./component/tag/TagCreator");r.TagCreator=be.TagCreator;var xe=e("./component/tag/TagDOMRenderer");r.TagDOMRenderer=xe.TagDOMRenderer;var we=e("./component/tag/TagMode");r.TagMode=we.TagMode;var Se=e("./component/tag/TagOperation");r.TagOperation=Se.TagOperation;var Me=e("./component/tag/TagScene");r.TagScene=Me.TagScene;var Ee=e("./component/tag/TagSet");r.TagSet=Ee.TagSet;var Ce=e("./component/tag/geometry/Geometry");r.Geometry=Ce.Geometry;var Te=e("./component/tag/geometry/VertexGeometry");r.VertexGeometry=Te.VertexGeometry;var Oe=e("./component/tag/geometry/RectGeometry");r.RectGeometry=Oe.RectGeometry;var Pe=e("./component/tag/geometry/PointGeometry");r.PointGeometry=Pe.PointGeometry;var Ae=e("./component/tag/geometry/PolygonGeometry");r.PolygonGeometry=Ae.PolygonGeometry;var je=e("./component/tag/error/GeometryTagError");r.GeometryTagError=je.GeometryTagError;var Re=e("./component/zoom/ZoomComponent");r.ZoomComponent=Re.ZoomComponent;n(e("./component/interfaces/interfaces"))},{"./component/AttributionComponent":289,"./component/BackgroundComponent":290,"./component/BearingComponent":291,"./component/CacheComponent":292,"./component/Component":293,"./component/ComponentService":294,"./component/CoverComponent":295,"./component/DebugComponent":296,"./component/ImageComponent":297,"./component/LoadingComponent":298,"./component/NavigationComponent":299,"./component/RouteComponent":300,"./component/StatsComponent":301,"./component/direction/DirectionComponent":302,"./component/direction/DirectionDOMCalculator":303,"./component/direction/DirectionDOMRenderer":304,"./component/imageplane/ImagePlaneComponent":305,"./component/imageplane/ImagePlaneGLRenderer":306,"./component/interfaces/interfaces":309,"./component/keyboard/KeyPlayHandler":310,"./component/keyboard/KeySequenceNavigationHandler":311,"./component/keyboard/KeySpatialNavigationHandler":312,"./component/keyboard/KeyZoomHandler":313,"./component/keyboard/KeyboardComponent":314,"./component/marker/MarkerComponent":316,"./component/marker/MarkerScene":317,"./component/marker/MarkerSet":318,"./component/marker/marker/CircleMarker":319,"./component/marker/marker/Marker":320,"./component/marker/marker/SimpleMarker":321,"./component/mouse/BounceHandler":322,"./component/mouse/DoubleClickZoomHandler":323,"./component/mouse/DragPanHandler":324,"./component/mouse/EarthControlHandler":325,"./component/mouse/ImageBoundary":326,"./component/mouse/MouseComponent":327,"./component/mouse/ScrollZoomHandler":328,"./component/mouse/TouchZoomHandler":329,"./component/popup/PopupComponent":331,"./component/popup/popup/Popup":332,"./component/sequence/SequenceComponent":333,"./component/sequence/SequenceDOMRenderer":334,"./component/sequence/SequenceMode":335,"./component/shaders/Shaders":336,"./component/slider/SliderComponent":337,"./component/slider/SliderDOMRenderer":338,"./component/slider/SliderGLRenderer":339,"./component/spatialdata/SpatialDataCache":340,"./component/spatialdata/SpatialDataComponent":341,"./component/spatialdata/SpatialDataScene":342,"./component/tag/TagComponent":344,"./component/tag/TagCreator":345,"./component/tag/TagDOMRenderer":346,"./component/tag/TagMode":347,"./component/tag/TagOperation":348,"./component/tag/TagScene":349,"./component/tag/TagSet":350,"./component/tag/error/GeometryTagError":351,"./component/tag/geometry/Geometry":352,"./component/tag/geometry/PointGeometry":353,"./component/tag/geometry/PolygonGeometry":354,"./component/tag/geometry/RectGeometry":355,"./component/tag/geometry/VertexGeometry":356,"./component/tag/handlers/CreateHandlerBase":357,"./component/tag/handlers/CreatePointHandler":358,"./component/tag/handlers/CreatePolygonHandler":359,"./component/tag/handlers/CreateRectDragHandler":360,"./component/tag/handlers/CreateRectHandler":361,"./component/tag/handlers/CreateVertexHandler":362,"./component/tag/handlers/EditVertexHandler":363,"./component/tag/handlers/TagHandlerBase":364,"./component/tag/tag/OutlineCreateTag":365,"./component/tag/tag/OutlineRenderTag":366,"./component/tag/tag/OutlineTag":367,"./component/tag/tag/RenderTag":368,"./component/tag/tag/SpotRenderTag":369,"./component/tag/tag/SpotTag":370,"./component/tag/tag/Tag":371,"./component/tag/tag/TagDomain":372,"./component/utils/HandlerBase":373,"./component/utils/MeshFactory":374,"./component/utils/MeshScene":375,"./component/utils/MouseOperator":376,"./component/zoom/ZoomComponent":377}],276:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("./graph/edge/EdgeDirection");r.EdgeDirection=n.EdgeDirection;var i=e("./graph/edge/EdgeCalculatorSettings");r.EdgeCalculatorSettings=i.EdgeCalculatorSettings;var o=e("./graph/edge/EdgeCalculatorDirections");r.EdgeCalculatorDirections=o.EdgeCalculatorDirections;var a=e("./graph/edge/EdgeCalculatorCoefficients");r.EdgeCalculatorCoefficients=a.EdgeCalculatorCoefficients;var s=e("./graph/edge/EdgeCalculator");r.EdgeCalculator=s.EdgeCalculator},{"./graph/edge/EdgeCalculator":399,"./graph/edge/EdgeCalculatorCoefficients":400,"./graph/edge/EdgeCalculatorDirections":401,"./graph/edge/EdgeCalculatorSettings":402,"./graph/edge/EdgeDirection":403}],277:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("./error/AbortMapillaryError");r.AbortMapillaryError=n.AbortMapillaryError;var i=e("./error/ArgumentMapillaryError");r.ArgumentMapillaryError=i.ArgumentMapillaryError;var o=e("./error/GraphMapillaryError");r.GraphMapillaryError=o.GraphMapillaryError;var a=e("./error/MapillaryError");r.MapillaryError=a.MapillaryError},{"./error/AbortMapillaryError":378,"./error/ArgumentMapillaryError":379,"./error/GraphMapillaryError":380,"./error/MapillaryError":381}],278:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("./geo/Camera");r.Camera=n.Camera;var i=e("./geo/GeoCoords");r.GeoCoords=i.GeoCoords;var o=e("./geo/ViewportCoords");r.ViewportCoords=o.ViewportCoords;var a=e("./geo/Spatial");r.Spatial=a.Spatial;var s=e("./geo/Transform");r.Transform=s.Transform;var u=e("./geo/Geo");r.Geo=u;var c=e("./geo/Lines");r.Lines=c},{"./geo/Camera":382,"./geo/Geo":383,"./geo/GeoCoords":384,"./geo/Lines":385,"./geo/Spatial":386,"./geo/Transform":387,"./geo/ViewportCoords":388}],279:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("./graph/FilterCreator");r.FilterCreator=n.FilterCreator;var i=e("./graph/Graph");r.Graph=i.Graph;var o=e("./graph/GraphCalculator");r.GraphCalculator=o.GraphCalculator;var a=e("./graph/GraphMode");r.GraphMode=a.GraphMode;var s=e("./graph/GraphService");r.GraphService=s.GraphService;var u=e("./graph/ImageLoadingService");r.ImageLoadingService=u.ImageLoadingService;var c=e("./graph/MeshReader");r.MeshReader=c.MeshReader;var h=e("./graph/Node");r.Node=h.Node;var l=e("./graph/NodeCache");r.NodeCache=l.NodeCache;var p=e("./graph/Sequence");r.Sequence=p.Sequence},{"./graph/FilterCreator":389,"./graph/Graph":390,"./graph/GraphCalculator":391,"./graph/GraphMode":392,"./graph/GraphService":393,"./graph/ImageLoadingService":394,"./graph/MeshReader":395,"./graph/Node":396,"./graph/NodeCache":397,"./graph/Sequence":398}],280:[function(e,t,r){"use strict";function n(e){for(var t in e)if(!r.hasOwnProperty(t))r[t]=e[t]}Object.defineProperty(r,"__esModule",{value:true});n(e("./Support"));var i=e("./Edge");r.EdgeDirection=i.EdgeDirection;var o=e("./Error");r.AbortMapillaryError=o.AbortMapillaryError;var a=e("./Render");r.RenderMode=a.RenderMode;var s=e("./State");r.TransitionMode=s.TransitionMode;var u=e("./Viewer");r.Alignment=u.Alignment;r.ImageSize=u.ImageSize;r.Viewer=u.Viewer;var c=e("./Component");r.SliderMode=c.SliderMode;var h=e("./component/tag/Tag");r.TagComponent=h;var l=e("./component/marker/Marker");r.MarkerComponent=l;var p=e("./component/popup/Popup");r.PopupComponent=p},{"./Component":275,"./Edge":276,"./Error":277,"./Render":281,"./State":282,"./Support":283,"./Viewer":286,"./component/marker/Marker":315,"./component/popup/Popup":330,"./component/tag/Tag":343}],281:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("./render/DOMRenderer");r.DOMRenderer=n.DOMRenderer;var i=e("./render/GLRenderer");r.GLRenderer=i.GLRenderer;var o=e("./render/GLRenderStage");r.GLRenderStage=o.GLRenderStage;var a=e("./render/RenderCamera");r.RenderCamera=a.RenderCamera;var s=e("./render/RenderMode");r.RenderMode=s.RenderMode;var u=e("./render/RenderService");r.RenderService=u.RenderService},{"./render/DOMRenderer":404,"./render/GLRenderStage":405,"./render/GLRenderer":406,"./render/RenderCamera":407,"./render/RenderMode":408,"./render/RenderService":409}],282:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("./state/FrameGenerator");r.FrameGenerator=n.FrameGenerator;var i=e("./state/RotationDelta");r.RotationDelta=i.RotationDelta;var o=e("./state/State");r.State=o.State;var a=e("./state/states/StateBase");r.StateBase=a.StateBase;var s=e("./state/StateContext");r.StateContext=s.StateContext;var u=e("./state/StateService");r.StateService=u.StateService;var c=e("./state/TransitionMode");r.TransitionMode=c.TransitionMode;var h=e("./state/states/EarthState");r.EarthState=h.EarthState;var l=e("./state/states/InteractiveStateBase");r.InteractiveStateBase=l.InteractiveStateBase;var p=e("./state/states/InteractiveWaitingState");r.InteractiveWaitingState=p.InteractiveWaitingState;var f=e("./state/states/TraversingState");r.TraversingState=f.TraversingState;var d=e("./state/states/WaitingState");r.WaitingState=d.WaitingState},{"./state/FrameGenerator":410,"./state/RotationDelta":411,"./state/State":412,"./state/StateContext":413,"./state/StateService":414,"./state/TransitionMode":415,"./state/states/EarthState":416,"./state/states/InteractiveStateBase":417,"./state/states/InteractiveWaitingState":418,"./state/states/StateBase":419,"./state/states/TraversingState":420,"./state/states/WaitingState":421}],283:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("./utils/Support");function i(){return o()&&n.isWebGLSupportedCached()}r.isSupported=i;function o(){return n.isBrowser()&&n.isBlobSupported()&&n.isArraySupported()&&n.isFunctionSupported()&&n.isJSONSupported()&&n.isObjectSupported()}r.isFallbackSupported=o},{"./utils/Support":429}],284:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("./tiles/ImageTileLoader");r.ImageTileLoader=n.ImageTileLoader;var i=e("./tiles/ImageTileStore");r.ImageTileStore=i.ImageTileStore;var o=e("./tiles/TextureProvider");r.TextureProvider=o.TextureProvider;var a=e("./tiles/RegionOfInterestCalculator");r.RegionOfInterestCalculator=a.RegionOfInterestCalculator},{"./tiles/ImageTileLoader":422,"./tiles/ImageTileStore":423,"./tiles/RegionOfInterestCalculator":424,"./tiles/TextureProvider":425}],285:[function(e,t,r){"use strict";function n(e){for(var t in e)if(!r.hasOwnProperty(t))r[t]=e[t]}Object.defineProperty(r,"__esModule",{value:true});var i=e("./utils/DOM");r.DOM=i.DOM;var o=e("./utils/EventEmitter");r.EventEmitter=o.EventEmitter;var a=e("./utils/Settings");r.Settings=a.Settings;n(e("./utils/Support"));var s=e("./utils/Urls");r.Urls=s.Urls},{"./utils/DOM":426,"./utils/EventEmitter":427,"./utils/Settings":428,"./utils/Support":429,"./utils/Urls":430}],286:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("./viewer/Alignment");r.Alignment=n.Alignment;var i=e("./viewer/CacheService");r.CacheService=i.CacheService;var o=e("./viewer/ComponentController");r.ComponentController=o.ComponentController;var a=e("./viewer/Container");r.Container=a.Container;var s=e("./viewer/Observer");r.Observer=s.Observer;var u=e("./viewer/ImageSize");r.ImageSize=u.ImageSize;var c=e("./viewer/KeyboardService");r.KeyboardService=c.KeyboardService;var h=e("./viewer/LoadingService");r.LoadingService=h.LoadingService;var l=e("./viewer/MouseService");r.MouseService=l.MouseService;var p=e("./viewer/Navigator");r.Navigator=p.Navigator;var f=e("./viewer/PlayService");r.PlayService=f.PlayService;var d=e("./viewer/Projection");r.Projection=d.Projection;var v=e("./viewer/SpriteService");r.SpriteService=v.SpriteService;var m=e("./viewer/TouchService");r.TouchService=m.TouchService;var g=e("./viewer/Viewer");r.Viewer=g.Viewer},{"./viewer/Alignment":431,"./viewer/CacheService":432,"./viewer/ComponentController":433,"./viewer/Container":434,"./viewer/ImageSize":435,"./viewer/KeyboardService":436,"./viewer/LoadingService":437,"./viewer/MouseService":438,"./viewer/Navigator":439,"./viewer/Observer":440,"./viewer/PlayService":441,"./viewer/Projection":442,"./viewer/SpriteService":443,"./viewer/TouchService":444,"./viewer/Viewer":445}],287:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var s=e("rxjs/operators");var n=e("rxjs");var i=e("../API");var o=function(){function e(e,t,r){this._clientId=e;this._modelCreator=r!=null?r:new i.ModelCreator;this._model=this._modelCreator.createModel(e,t);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_key"];this._propertiesFill=["captured_at","captured_with_camera_uuid","user","organization_key","private","project"];this._propertiesKey=["key"];this._propertiesSequence=["keys"];this._propertiesSpatial=["atomic_scale","ca","calt","cca","cfocal","ck1","ck2","gpano","height","merge_cc","merge_version","c_rotation","orientation","width"];this._propertiesUser=["username"]}e.prototype.imageByKeyFill$=function(t){return this._catchInvalidateGet$(this._wrapModelResponse$(this._model.get([this._pathImageByKey,t,this._propertiesKey.concat(this._propertiesFill).concat(this._propertiesSpatial),this._propertiesKey.concat(this._propertiesUser)])).pipe(s.map(function(e){if(!e){throw new Error("Images ("+t.join(", ")+") could not be found.")}return e.json.imageByKey})),this._pathImageByKey,t)};e.prototype.imageByKeyFull$=function(t){return this._catchInvalidateGet$(this._wrapModelResponse$(this._model.get([this._pathImageByKey,t,this._propertiesKey.concat(this._propertiesCore).concat(this._propertiesFill).concat(this._propertiesSpatial),this._propertiesKey.concat(this._propertiesUser)])).pipe(s.map(function(e){if(!e){throw new Error("Images ("+t.join(", ")+") could not be found.")}return e.json.imageByKey})),this._pathImageByKey,t)};e.prototype.imageCloseTo$=function(e,t){var r=t+":"+e;return this._catchInvalidateGet$(this._wrapModelResponse$(this._model.get([this._pathImageCloseTo,[r],this._propertiesKey.concat(this._propertiesCore).concat(this._propertiesFill).concat(this._propertiesSpatial),this._propertiesKey.concat(this._propertiesUser)])).pipe(s.map(function(e){return e!=null?e.json.imageCloseTo[r]:null})),this._pathImageCloseTo,[r])};e.prototype.imagesByH$=function(o){var a=this;return this._catchInvalidateGet$(this._wrapModelResponse$(this._model.get([this._pathImagesByH,o,{from:0,to:this._pageCount},this._propertiesKey.concat(this._propertiesCore)])).pipe(s.map(function(e){if(!e){e={json:{imagesByH:{}}};for(var t=0,r=o;t<r.length;t++){var n=r[t];e.json.imagesByH[n]={};for(var i=0;i<=a._pageCount;i++){e.json.imagesByH[n][i]=null}}}return e.json.imagesByH})),this._pathImagesByH,o)};e.prototype.imageViewAdd$=function(e){return this._catchInvalidateCall$(this._wrapCallModelResponse$(this._model.call([this._pathImageViewAdd],[e])),this._pathImageViewAdd,e)};e.prototype.invalidateImageByKey=function(e){this._invalidateGet(this._pathImageByKey,e)};e.prototype.invalidateImagesByH=function(e){this._invalidateGet(this._pathImagesByH,e)};e.prototype.invalidateSequenceByKey=function(e){this._invalidateGet(this._pathSequenceByKey,e)};e.prototype.setToken=function(e){this._model.invalidate([]);this._model=null;this._model=this._modelCreator.createModel(this._clientId,e)};e.prototype.sequenceByKey$=function(i){return this._catchInvalidateGet$(this._wrapModelResponse$(this._model.get([this._pathSequenceByKey,i,this._propertiesKey.concat(this._propertiesSequence)])).pipe(s.map(function(e){if(!e){e={json:{sequenceByKey:{}}}}for(var t=0,r=i;t<r.length;t++){var n=r[t];if(!(n in e.json.sequenceByKey)){console.warn("Sequence data missing ("+n+")");e.json.sequenceByKey[n]={key:n,keys:[]}}}return e.json.sequenceByKey})),this._pathSequenceByKey,i)};e.prototype.sequenceViewAdd$=function(e){return this._catchInvalidateCall$(this._wrapCallModelResponse$(this._model.call([this._pathSequenceViewAdd],[e])),this._pathSequenceViewAdd,e)};Object.defineProperty(e.prototype,"clientId",{get:function(){return this._clientId},enumerable:true,configurable:true});e.prototype._catchInvalidateGet$=function(e,t,r){var n=this;return e.pipe(s.catchError(function(e){n._invalidateGet(t,r);throw e}))};e.prototype._catchInvalidateCall$=function(e,t,r){var n=this;return e.pipe(s.catchError(function(e){n._invalidateCall(t,r);throw e}))};e.prototype._invalidateGet=function(e,t){this._model.invalidate([e,t])};e.prototype._invalidateCall=function(e,t){this._model.invalidate([e],[t])};e.prototype._wrapModelResponse$=function(e){return n.Observable.create(function(t){e.then(function(e){t.next(e);t.complete()},function(e){t.error(e)})})};e.prototype._wrapCallModelResponse$=function(e){return this._wrapModelResponse$(e).pipe(s.map(function(e){return}))};return e}();r.APIv3=o;r.default=o},{"../API":274,rxjs:27,"rxjs/operators":225}],288:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("falcor");var i=e("falcor-http-datasource");var o=e("../Utils");var a=function(){function e(){}e.prototype.createModel=function(e,t){var r={crossDomain:true,withCredentials:false};if(t!=null){r.headers={Authorization:"Bearer "+t}}return new n.Model({maxSize:16*1024*1024,source:new i.default(o.Urls.falcorModel(e),r)})};return e}();r.ModelCreator=a;r.default=a},{"../Utils":285,falcor:15,"falcor-http-datasource":10}],289:[function(e,t,r){"use strict";var i=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var o=e("rxjs");var a=e("rxjs/operators");var d=e("virtual-dom");var n=e("../Component");var v=e("../Utils");var s=function(n){i(e,n);function e(e,t,r){return n.call(this,e,t,r)||this}e.prototype._activate=function(){var n=this;this._disposable=o.combineLatest(this._navigator.stateService.currentNode$,this._container.renderService.size$).pipe(a.map(function(e){var t=e[0],r=e[1];return{name:n._name,vnode:n._getAttributionNode(t.username,t.key,t.capturedAt,r.width)}})).subscribe(this._container.domRenderer.render$)};e.prototype._deactivate=function(){this._disposable.unsubscribe()};e.prototype._getDefaultConfiguration=function(){return{}};e.prototype._getAttributionNode=function(e,t,r,n){var i=n<=640;var o=d.h("div.AttributionMapillaryLogo",[]);var a=d.h("a.AttributionIconContainer",{href:v.Urls.explore,target:"_blank"},[o]);var s=i?""+e:"image by "+e;var u=d.h("div.AttributionUsername",{textContent:s},[]);var c=new Date(r).toDateString().split(" ");var h=(c.length>3?i?[c[3]]:[c[1],c[2]+",",c[3]]:c).join(" ");var l=d.h("div.AttributionDate",{textContent:h},[]);var p=d.h("a.AttributionImageContainer",{href:v.Urls.exporeImage(t),target:"_blank"},[u,l]);var f=i?".AttributionCompact":"";return d.h("div.AttributionContainer"+f,{},[a,p])};e.componentName="attribution";return e}(n.Component);r.AttributionComponent=s;n.ComponentService.register(s);r.default=s},{"../Component":275,"../Utils":285,rxjs:27,"rxjs/operators":225,"virtual-dom":231}],290:[function(e,t,r){"use strict";var i=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var o=e("virtual-dom");var n=e("../Component");var a=function(n){i(e,n);function e(e,t,r){return n.call(this,e,t,r)||this}e.prototype._activate=function(){this._container.domRenderer.render$.next({name:this._name,vnode:this._getBackgroundNode("The viewer can't display the given image.")})};e.prototype._deactivate=function(){return};e.prototype._getDefaultConfiguration=function(){return{}};e.prototype._getBackgroundNode=function(e){return o.h("div.BackgroundWrapper",{},[o.h("p",{textContent:e},[])])};e.componentName="background";return e}(n.Component);r.BackgroundComponent=a;n.ComponentService.register(a);r.default=a},{"../Component":275,"virtual-dom":231}],291:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var o=e("rxjs/operators");var h=e("virtual-dom");var i=e("../Component");var a=e("../Geo");var s=function(i){n(e,i);function e(e,t,r){var n=i.call(this,e,t,r)||this;n._spatial=new a.Spatial;n._svgNamespace="http://www.w3.org/2000/svg";n._distinctThreshold=Math.PI/360;return n}e.prototype._activate=function(){var s=this;var e=this._container.renderService.renderCamera$.pipe(o.map(function(e){var t=s._spatial.degToRad(e.perspective.fov);var r=e.perspective.aspect===Number.POSITIVE_INFINITY?Math.PI:Math.atan(e.perspective.aspect*Math.tan(.5*t))*2;return[s._spatial.azimuthalToBearing(e.rotation.phi),r]}),o.distinctUntilChanged(function(e,t){return Math.abs(t[0]-e[0])<s._distinctThreshold&&Math.abs(t[1]-e[1])<s._distinctThreshold}));this._renderSubscription=e.pipe(o.map(function(e){var t=e[0],r=e[1];var n=h.h("div.BearingIndicatorBackground",{},[]);var i=h.h("div.BearingIndicatorBackgroundCircle",{},[]);var o=s._createNorth(t);var a=s._createCircleSectorCompass(s._createCircleSector(Math.max(Math.PI/20,r),"#FFF"));return{name:s._name,vnode:h.h("div.BearingIndicatorContainer",{oncontextmenu:function(e){e.preventDefault()}},[n,i,o,a])}})).subscribe(this._container.domRenderer.render$)};e.prototype._deactivate=function(){this._renderSubscription.unsubscribe()};e.prototype._getDefaultConfiguration=function(){return{}};e.prototype._createCircleSectorCompass=function(e){var t=h.h("g",{attributes:{transform:"translate(1,1)"},namespace:this._svgNamespace},[e]);var r=h.h("svg",{attributes:{viewBox:"0 0 2 2"},namespace:this._svgNamespace,style:{height:"30px",left:"4px",position:"absolute",top:"4px",width:"30px"}},[t]);return r};e.prototype._createCircleSector=function(e,t){if(e>2*Math.PI-Math.PI/90){return h.h("circle",{attributes:{cx:"0",cy:"0",fill:t,r:"1"},namespace:this._svgNamespace},[])}var r=-Math.PI/2-e/2;var n=r+e;var i=Math.cos(r);var o=Math.sin(r);var a=Math.cos(n);var s=Math.sin(n);var u=e>=Math.PI?1:0;var c="M 0 0 "+i+" "+o+" A 1 1 0 "+u+" 1 "+a+" "+s;return h.h("path",{attributes:{d:c,fill:t},namespace:this._svgNamespace},[])};e.prototype._createNorth=function(e){var t=h.h("div.BearingNorth",[]);var r=h.h("div.BearingNorthContainer",{style:{transform:"rotateZ("+-e*180/Math.PI+"deg)"}},[t]);return r};e.componentName="bearing";return e}(i.Component);r.BearingComponent=s;i.ComponentService.register(s);r.default=s},{"../Component":275,"../Geo":278,"rxjs/operators":225,"virtual-dom":231}],292:[function(e,t,r){"use strict";var i=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var _=e("rxjs");var b=e("rxjs/operators");var x=e("../Edge");var n=e("../Component");var o=function(n){i(e,n);function e(e,t,r){return n.call(this,e,t,r)||this}e.prototype.setDepth=function(e){this.configure({depth:e})};e.prototype._activate=function(){var y=this;this._sequenceSubscription=_.combineLatest(this._navigator.stateService.currentNode$.pipe(b.switchMap(function(e){return e.sequenceEdges$}),b.filter(function(e){return e.cached})),this._configuration$).pipe(b.switchMap(function(e){var t=e[0];var r=e[1];var n=Math.max(0,Math.min(4,r.depth.sequence));var i=y._cache$(t.edges,x.EdgeDirection.Next,n);var o=y._cache$(t.edges,x.EdgeDirection.Prev,n);return _.merge(i,o).pipe(b.catchError(function(e,t){console.error("Failed to cache sequence edges.",e);return _.empty()}))})).subscribe(function(){});this._spatialSubscription=_.combineLatest(this._navigator.stateService.currentNode$.pipe(b.switchMap(function(e){return _.combineLatest(_.of(e),e.spatialEdges$.pipe(b.filter(function(e){return e.cached})))})),this._configuration$).pipe(b.switchMap(function(e){var t=e[0],r=t[0],n=t[1],i=e[1];var o=n.edges;var a=i.depth;var s=Math.max(0,Math.min(2,a.pano));var u=r.pano?0:Math.max(0,Math.min(3,a.step));var c=r.pano?0:Math.max(0,Math.min(1,a.turn));var h=y._cache$(o,x.EdgeDirection.Pano,s);var l=y._cache$(o,x.EdgeDirection.StepForward,u);var p=y._cache$(o,x.EdgeDirection.StepBackward,u);var f=y._cache$(o,x.EdgeDirection.StepLeft,u);var d=y._cache$(o,x.EdgeDirection.StepRight,u);var v=y._cache$(o,x.EdgeDirection.TurnLeft,c);var m=y._cache$(o,x.EdgeDirection.TurnRight,c);var g=y._cache$(o,x.EdgeDirection.TurnU,c);return _.merge(l,p,f,d,h,v,m,g).pipe(b.catchError(function(e,t){console.error("Failed to cache spatial edges.",e);return _.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(e,s,t){var u=this;return _.zip(_.of(e),_.of(t)).pipe(b.expand(function(e){var t=e[0];var r=e[1];var n=[];if(r>0){for(var i=0,o=t;i<o.length;i++){var a=o[i];if(a.data.direction===s){n.push(_.zip(u._navigator.graphService.cacheNode$(a.to).pipe(b.mergeMap(function(e){return u._nodeToEdges$(e,s)})),_.of(r-1)))}}}return _.from(n).pipe(b.mergeAll())}),b.skip(1))};e.prototype._nodeToEdges$=function(e,t){return([x.EdgeDirection.Next,x.EdgeDirection.Prev].indexOf(t)>-1?e.sequenceEdges$:e.spatialEdges$).pipe(b.first(function(e){return e.cached}),b.map(function(e){return e.edges}))};e.componentName="cache";return e}(n.Component);r.CacheComponent=o;n.ComponentService.register(o);r.default=o},{"../Component":275,"../Edge":276,rxjs:27,"rxjs/operators":225}],293:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var o=e("rxjs/operators");var a=e("rxjs");var i=e("../Utils");var s=function(i){n(e,i);function e(e,t,r){var n=i.call(this)||this;n._activated$=new a.BehaviorSubject(false);n._configurationSubject$=new a.Subject;n._activated=false;n._container=t;n._name=e;n._navigator=r;n._configuration$=n._configurationSubject$.pipe(o.startWith(n.defaultConfiguration),o.scan(function(e,t){for(var r in t){if(t.hasOwnProperty(r)){e[r]=t[r]}}return e}),o.publishReplay(1),o.refCount());n._configuration$.subscribe(function(){});return n}Object.defineProperty(e.prototype,"activated",{get:function(){return this._activated},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"activated$",{get:function(){return this._activated$},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"defaultConfiguration",{get:function(){return this._getDefaultConfiguration()},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"configuration$",{get:function(){return this._configuration$},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"name",{get:function(){return this._name},enumerable:true,configurable:true});e.prototype.activate=function(e){if(this._activated){return}if(e!==undefined){this._configurationSubject$.next(e)}this._activated=true;this._activate();this._activated$.next(true)};e.prototype.configure=function(e){this._configurationSubject$.next(e)};e.prototype.deactivate=function(){if(!this._activated){return}this._activated=false;this._deactivate();this._container.domRenderer.clear(this._name);this._container.glRenderer.clear(this._name);this._activated$.next(false)};e.prototype.resize=function(){return};e.componentName="not_worthy";return e}(i.EventEmitter);r.Component=s;r.default=s},{"../Utils":285,rxjs:27,"rxjs/operators":225}],294:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("../Error");var i=function(){function i(e,t){this._components={};for(var r in i.registeredComponents){if(!i.registeredComponents.hasOwnProperty(r)){continue}var n=i.registeredComponents[r];this._components[r]={active:false,component:new n(r,e,t)}}this._coverComponent=new i.registeredCoverComponent("cover",e,t);this._coverComponent.activate();this._coverActivated=true}i.register=function(e){if(i.registeredComponents[e.componentName]===undefined){i.registeredComponents[e.componentName]=e}};i.registerCover=function(e){i.registeredCoverComponent=e};Object.defineProperty(i.prototype,"coverActivated",{get:function(){return this._coverActivated},enumerable:true,configurable:true});i.prototype.activateCover=function(){if(this._coverActivated){return}this._coverActivated=true;for(var e in this._components){if(!this._components.hasOwnProperty(e)){continue}var t=this._components[e];if(t.active){t.component.deactivate()}}};i.prototype.deactivateCover=function(){if(!this._coverActivated){return}this._coverActivated=false;for(var e in this._components){if(!this._components.hasOwnProperty(e)){continue}var t=this._components[e];if(t.active){t.component.activate()}}};i.prototype.activate=function(e){this._checkName(e);this._components[e].active=true;if(!this._coverActivated){this.get(e).activate()}};i.prototype.configure=function(e,t){this._checkName(e);this.get(e).configure(t)};i.prototype.deactivate=function(e){this._checkName(e);this._components[e].active=false;if(!this._coverActivated){this.get(e).deactivate()}};i.prototype.get=function(e){return this._components[e].component};i.prototype.getCover=function(){return this._coverComponent};i.prototype._checkName=function(e){if(!(e in this._components)){throw new n.ArgumentMapillaryError("Component does not exist: "+e)}};i.registeredComponents={};return i}();r.ComponentService=i;r.default=i},{"../Error":277}],295:[function(e,t,r){"use strict";var i=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var o=e("rxjs");var s=e("rxjs/operators");var u=e("virtual-dom");var c=e("../Component");var a=e("../Utils");var h=e("../Viewer");var n=function(n){i(e,n);function e(e,t,r){return n.call(this,e,t,r)||this}e.prototype._activate=function(){var a=this;this._configuration$.pipe(s.distinctUntilChanged(undefined,function(e){return e.state}),s.switchMap(function(e){return o.combineLatest(o.of(e.state),a._navigator.stateService.currentNode$)}),s.switchMap(function(e){var t=e[0],r=e[1];var n=o.combineLatest(o.of(r.key),r.image$.pipe(s.filter(function(e){return!!e}),s.map(function(e){return e.src})));return t===c.CoverState.Visible?n.pipe(s.first()):n}),s.distinctUntilChanged(function(e,t){var r=e[0],n=e[1];var i=t[0],o=t[1];return r===i&&n===o}),s.map(function(e){var t=e[0],r=e[1];return{key:t,src:r}})).subscribe(this._configurationSubject$);this._renderSubscription=o.combineLatest(this._configuration$,this._container.renderService.size$).pipe(s.map(function(e){var t=e[0],r=e[1];if(!t.key){return{name:a._name,vnode:u.h("div",[])}}var n=r.width<=640||r.height<=480?".CoverCompact":"";if(t.state===c.CoverState.Hidden){var i=u.h("div.CoverContainer.CoverDone"+n,[a._getCoverBackgroundVNode(t)]);return{name:a._name,vnode:i}}var o=u.h("div.CoverContainer"+n,[a._getCoverButtonVNode(t)]);return{name:a._name,vnode:o}})).subscribe(this._container.domRenderer.render$)};e.prototype._deactivate=function(){this._renderSubscription.unsubscribe();this._keySubscription.unsubscribe()};e.prototype._getDefaultConfiguration=function(){return{state:c.CoverState.Visible}};e.prototype._getCoverButtonVNode=function(e){var t=this;var r=e.state===c.CoverState.Loading?"div.Cover.CoverLoading":"div.Cover";var n=u.h("div.CoverButton",{onclick:function(){t.configure({state:c.CoverState.Loading})}},[u.h("div.CoverButtonIcon",[])]);var i=u.h("a.CoverLogo",{href:a.Urls.explore,target:"_blank"},[]);return u.h(r,[this._getCoverBackgroundVNode(e),n,i])};e.prototype._getCoverBackgroundVNode=function(e){var t=e.src!=null?e.src:a.Urls.thumbnail(e.key,h.ImageSize.Size640);var r={style:{backgroundImage:"url("+t+")"}};var n=[];if(e.state===c.CoverState.Loading){n.push(u.h("div.Spinner",{},[]))}return u.h("div.CoverBackground",r,n)};e.componentName="cover";return e}(c.Component);r.CoverComponent=n;c.ComponentService.registerCover(n);r.default=n},{"../Component":275,"../Utils":285,"../Viewer":286,rxjs:27,"rxjs/operators":225,"virtual-dom":231}],296:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var o=e("rxjs");var a=e("rxjs/operators");var u=e("virtual-dom");var i=e("../Component");var s=function(t){n(e,t);function e(){var e=t!==null&&t.apply(this,arguments)||this;e._open$=new o.BehaviorSubject(false);return e}e.prototype._activate=function(){var i=this;this._disposable=o.combineLatest(this._navigator.stateService.currentState$,this._open$,this._navigator.imageLoadingService.loadstatus$).pipe(a.map(function(e){var t=e[0],r=e[1],n=e[2];return{name:i._name,vnode:i._getDebugVNode(r,i._getDebugInfo(t,n))}})).subscribe(this._container.domRenderer.render$)};e.prototype._deactivate=function(){this._disposable.unsubscribe()};e.prototype._getDefaultConfiguration=function(){return{}};e.prototype._getDebugInfo=function(e,t){var r=[];r.push(u.h("h2","Node"));if(e.state.currentNode){r.push(u.h("p","currentNode: "+e.state.currentNode.key))}if(e.state.previousNode){r.push(u.h("p","previousNode: "+e.state.previousNode.key))}r.push(u.h("h2","Loading"));var n=0;var i=0;var o=0;for(var a in t){if(!t.hasOwnProperty(a)){continue}var s=t[a];n+=s.loaded;if(s.loaded!==s.total){o++}else{i++}}r.push(u.h("p","Loaded Images: "+i));r.push(u.h("p","Loading Images: "+o));r.push(u.h("p","Total bytes loaded: "+n));r.push(u.h("h2","Camera"));r.push(u.h("p","camera.position.x: "+e.state.camera.position.x));r.push(u.h("p","camera.position.y: "+e.state.camera.position.y));r.push(u.h("p","camera.position.z: "+e.state.camera.position.z));r.push(u.h("p","camera.lookat.x: "+e.state.camera.lookat.x));r.push(u.h("p","camera.lookat.y: "+e.state.camera.lookat.y));r.push(u.h("p","camera.lookat.z: "+e.state.camera.lookat.z));r.push(u.h("p","camera.up.x: "+e.state.camera.up.x));r.push(u.h("p","camera.up.y: "+e.state.camera.up.y));r.push(u.h("p","camera.up.z: "+e.state.camera.up.z));return r};e.prototype._getDebugVNode=function(e,t){if(e){return u.h("div.Debug",{},[u.h("h2",{},["Debug"]),this._getDebugVNodeButton(e),u.h("pre",{},t)])}else{return this._getDebugVNodeButton(e)}};e.prototype._getDebugVNodeButton=function(e){var t=e?"Disable Debug":"D";var r=e?"":".DebugButtonFixed";if(e){return u.h("button.DebugButton"+r,{onclick:this._closeDebugElement.bind(this)},[t])}else{return u.h("button.DebugButton"+r,{onclick:this._openDebugElement.bind(this)},[t])}};e.prototype._closeDebugElement=function(e){this._open$.next(false)};e.prototype._openDebugElement=function(){this._open$.next(true)};e.componentName="debug";return e}(i.Component);r.DebugComponent=s;i.ComponentService.register(s);r.default=s},{"../Component":275,rxjs:27,"rxjs/operators":225,"virtual-dom":231}],297:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var i=e("rxjs");var a=e("rxjs/operators");var s=e("virtual-dom");var o=e("../Component");var u=e("../Utils");var c=function(o){n(e,o);function e(e,t,r,n){var i=o.call(this,e,t,r)||this;i._canvasId=t.id+"-"+i._name;i._dom=!!n?n:new u.DOM;return i}e.prototype._activate=function(){var t=this;var e=this._container.domRenderer.element$.pipe(a.map(function(e){return t._dom.document.getElementById(t._canvasId)}),a.filter(function(e){return!!e}),a.map(function(e){var t=e.parentElement;var r=t.offsetWidth;var n=t.offsetHeight;return[e,{height:n,width:r}]}),a.distinctUntilChanged(function(e,t){return e.height===t.height&&e.width===t.width},function(e){var t=e[0],r=e[1];return r}));this.drawSubscription=i.combineLatest(e,this._navigator.stateService.currentNode$).subscribe(function(e){var t=e[0],r=t[0],n=t[1],i=e[1];r.width=n.width;r.height=n.height;r.getContext("2d").drawImage(i.image,0,0,n.width,n.height)});this._container.domRenderer.renderAdaptive$.next({name:this._name,vnode:s.h("canvas#"+this._canvasId,[])})};e.prototype._deactivate=function(){this.drawSubscription.unsubscribe()};e.prototype._getDefaultConfiguration=function(){return{}};e.componentName="image";return e}(o.Component);r.ImageComponent=c;o.ComponentService.register(c);r.default=c},{"../Component":275,"../Utils":285,rxjs:27,"rxjs/operators":225,"virtual-dom":231}],298:[function(e,t,r){"use strict";var i=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var o=e("rxjs");var s=e("rxjs/operators");var a=e("virtual-dom");var n=e("../Component");var u=function(n){i(e,n);function e(e,t,r){return n.call(this,e,t,r)||this}e.prototype._activate=function(){var a=this;this._loadingSubscription=this._navigator.loadingService.loading$.pipe(s.switchMap(function(e){return e?a._navigator.imageLoadingService.loadstatus$:o.of({})}),s.map(function(e){var t=0;var r=0;for(var n in e){if(!e.hasOwnProperty(n)){continue}var i=e[n];if(i.loaded!==i.total){r+=i.loaded;t+=i.total}}var o=100;if(t!==0){o=r/t*100}return{name:a._name,vnode:a._getBarVNode(o)}})).subscribe(this._container.domRenderer.render$)};e.prototype._deactivate=function(){this._loadingSubscription.unsubscribe()};e.prototype._getDefaultConfiguration=function(){return{}};e.prototype._getBarVNode=function(e){var t={};var r={};if(e!==100){t.width=e.toFixed(0)+"%";t.opacity="1"}else{t.width="100%";t.opacity="0"}return a.h("div.Loading",{style:r},[a.h("div.LoadingBar",{style:t},[])])};e.componentName="loading";return e}(n.Component);r.LoadingComponent=u;n.ComponentService.register(u);r.default=u},{"../Component":275,rxjs:27,"rxjs/operators":225,"virtual-dom":231}],299:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var o=e("rxjs");var a=e("rxjs/operators");var c=e("virtual-dom");var s=e("../Edge");var u=e("../Error");var i=e("../Component");var h=function(i){n(e,i);function e(e,t,r){var n=i.call(this,e,t,r)||this;n._seqNames={};n._seqNames[s.EdgeDirection[s.EdgeDirection.Prev]]="Prev";n._seqNames[s.EdgeDirection[s.EdgeDirection.Next]]="Next";n._spaTopNames={};n._spaTopNames[s.EdgeDirection[s.EdgeDirection.TurnLeft]]="Turnleft";n._spaTopNames[s.EdgeDirection[s.EdgeDirection.StepLeft]]="Left";n._spaTopNames[s.EdgeDirection[s.EdgeDirection.StepForward]]="Forward";n._spaTopNames[s.EdgeDirection[s.EdgeDirection.StepRight]]="Right";n._spaTopNames[s.EdgeDirection[s.EdgeDirection.TurnRight]]="Turnright";n._spaBottomNames={};n._spaBottomNames[s.EdgeDirection[s.EdgeDirection.TurnU]]="Turnaround";n._spaBottomNames[s.EdgeDirection[s.EdgeDirection.StepBackward]]="Backward";return n}e.prototype._activate=function(){var u=this;this._renderSubscription=o.combineLatest(this._navigator.stateService.currentNode$,this._configuration$).pipe(a.switchMap(function(e){var t=e[0],r=e[1];var n=r.sequence?t.sequenceEdges$.pipe(a.map(function(e){return e.edges.map(function(e){return e.data.direction})})):o.of([]);var i=!t.pano&&r.spatial?t.spatialEdges$.pipe(a.map(function(e){return e.edges.map(function(e){return e.data.direction})})):o.of([]);return o.combineLatest(n,i).pipe(a.map(function(e){var t=e[0],r=e[1];return t.concat(r)}))}),a.map(function(e){var t=u._createArrowRow(u._seqNames,e);var r=u._createArrowRow(u._spaTopNames,e);var n=u._createArrowRow(u._spaBottomNames,e);var i=c.h("div.NavigationSequence",t);var o=c.h("div.NavigationSpatialTop",r);var a=c.h("div.NavigationSpatialBottom",n);var s=c.h("div.NavigationSpatial",[o,a]);return{name:u._name,vnode:c.h("div.NavigationContainer",[i,s])}})).subscribe(this._container.domRenderer.render$)};e.prototype._deactivate=function(){this._renderSubscription.unsubscribe()};e.prototype._getDefaultConfiguration=function(){return{sequence:true,spatial:true}};e.prototype._createArrowRow=function(e,t){var r=[];for(var n in e){if(!e.hasOwnProperty(n)){continue}var i=s.EdgeDirection[n];if(t.indexOf(i)!==-1){r.push(this._createVNode(i,e[n],"visible"))}else{r.push(this._createVNode(i,e[n],"hidden"))}}return r};e.prototype._createVNode=function(t,e,r){var n=this;return c.h("span.Direction.Direction"+e,{onclick:function(e){n._navigator.moveDir$(t).subscribe(undefined,function(e){if(!(e instanceof u.AbortMapillaryError)){console.error(e)}})},style:{visibility:r}},[])};e.componentName="navigation";return e}(i.Component);r.NavigationComponent=h;i.ComponentService.register(h);r.default=h},{"../Component":275,"../Edge":276,"../Error":277,rxjs:27,"rxjs/operators":225,"virtual-dom":231}],300:[function(e,t,r){"use strict";var i=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var s=e("rxjs");var o=e("rxjs/operators");var u=e("virtual-dom");var n=e("../Component");var c=function(){function e(){}return e}();var h=function(){function e(){}return e}();var l=function(){function e(){this.nodeInstructions=[];this.nodeInstructionsOrdered=[]}return e}();var a=function(n){i(e,n);function e(e,t,r){return n.call(this,e,t,r)||this}e.prototype._activate=function(){var a=this;var e=this._navigator.stateService.currentState$.pipe(o.filter(function(e){return e.id%2===0}),o.filter(function(e){return e.state.nodesAhead<15}),o.distinctUntilChanged(undefined,function(e){return e.state.lastNode.key}));var t=s.combineLatest(this.configuration$.pipe(o.mergeMap(function(e){return s.from(e.paths)}),o.distinct(function(e){return e.sequenceKey}),o.mergeMap(function(t){return a._navigator.apiV3.sequenceByKey$([t.sequenceKey]).pipe(o.map(function(e){return e[t.sequenceKey]}))})),this.configuration$).pipe(o.map(function(e){var t=e[0],r=e[1];var n=0;var i=[];for(var o=0,a=r.paths;o<a.length;o++){var s=a[o];if(s.sequenceKey===t.key){var u=[];var c=false;for(var h=0,l=t.keys;h<l.length;h++){var p=l[h];if(s.startKey===p){c=true}if(c){var f=null;for(var d=0,v=s.infoKeys;d<v.length;d++){var m=v[d];if(m.key===p){f=m.description}}u.push({description:f,key:p})}if(s.stopKey===p){c=false}}i.push({nodeInstructions:u,place:n})}n++}return i}),o.scan(function(e,t){for(var r=0,n=t;r<n.length;r++){var i=n[r];e.nodeInstructionsOrdered[i.place]=i.nodeInstructions}for(var o in e.nodeInstructionsOrdered){if(!e.nodeInstructionsOrdered.hasOwnProperty(o)){continue}var a=e.nodeInstructionsOrdered[o];for(var s=0,u=a;s<u.length;s++){var c=u[s];e.nodeInstructions.push(c)}}return e},new l));var r=s.combineLatest(e,t,this.configuration$).pipe(o.map(function(e){var t=e[0],r=e[1],n=e[2];return{conf:n,frame:t,routeTrack:r}}),o.scan(function(e,t){if(t.conf.playing===undefined||t.conf.playing){e.routeTrack=t.routeTrack;e.currentNode=t.frame.state.currentNode;e.lastNode=t.frame.state.lastNode;e.playing=true}else{a._navigator.stateService.cutNodes();e.playing=false}return e},new h),o.filter(function(e){return e.playing}),o.filter(function(e){for(var t=0,r=e.routeTrack.nodeInstructions;t<r.length;t++){var n=r[t];if(!n){continue}if(n.key===e.lastNode.key){return true}}return false}),o.distinctUntilChanged(undefined,function(e){return e.lastNode.key}),o.mergeMap(function(e){var t=0;for(var r=0,n=e.routeTrack.nodeInstructions;r<n.length;r++){var i=n[r];if(i.key===e.lastNode.key){break}t++}var o=e.routeTrack.nodeInstructions[t+1];if(!o){return s.of(null)}return a._navigator.graphService.cacheNode$(o.key)}));this._disposable=s.combineLatest(r,this.configuration$).pipe(o.map(function(e){var t=e[0],r=e[1];return{conf:r,node:t}}),o.filter(function(e){return e.node!==null&&e.conf.playing}),o.pluck("node")).subscribe(this._navigator.stateService.appendNode$);this._disposableDescription=s.combineLatest(this._navigator.stateService.currentNode$,t,this.configuration$).pipe(o.map(function(e){var t=e[0],r=e[1],n=e[2];if(n.playing!==undefined&&!n.playing){return"quit"}var i=null;for(var o=0,a=r.nodeInstructions;o<a.length;o++){var s=a[o];if(s.key===t.key){i=s.description;break}}return i}),o.scan(function(e,t){if(t!==e.description&&t!==null){e.description=t;e.showsLeft=6}else{e.showsLeft--}if(t==="quit"){e.description=null}return e},new c),o.map(function(e){if(e.showsLeft>0&&e.description){return{name:a._name,vnode:a._getRouteAnnotationNode(e.description)}}else{return{name:a._name,vnode:u.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:true})};e.prototype.stop=function(){this.configure({playing:false})};e.prototype._getRouteAnnotationNode=function(e){return u.h("div.RouteFrame",{},[u.h("p",{textContent:e},[])])};e.componentName="route";return e}(n.Component);r.RouteComponent=a;n.ComponentService.register(a);r.default=a},{"../Component":275,rxjs:27,"rxjs/operators":225,"virtual-dom":231}],301:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var i=e("rxjs");var a=e("rxjs/operators");var o=e("../Component");var s=function(o){n(e,o);function e(e,t,r,n){var i=o.call(this,e,t,r)||this;i._scheduler=n;return i}e.prototype._activate=function(){var e=this;this._sequenceSubscription=this._navigator.stateService.currentNode$.pipe(a.scan(function(e,t){var r=t.sequenceKey;e.report=[];if(!(r in e.reported)){e.report=[r];e.reported[r]=true}return e},{report:[],reported:{}}),a.filter(function(e){return e.report.length>0}),a.mergeMap(function(r){return e._navigator.apiV3.sequenceViewAdd$(r.report).pipe(a.catchError(function(e,t){console.error("Failed to report sequence stats ("+r.report+")",e);return i.empty()}))})).subscribe(function(){});this._imageSubscription=this._navigator.stateService.currentNode$.pipe(a.map(function(e){return e.key})).pipe(a.buffer(this._navigator.stateService.currentNode$.pipe(a.debounceTime(5e3,this._scheduler))),a.scan(function(e,t){e.report=[];for(var r=0,n=t;r<n.length;r++){var i=n[r];if(!(i in e.reported)){e.report.push(i);e.reported[i]=true}}return e},{report:[],reported:{}}),a.filter(function(e){return e.report.length>0}),a.mergeMap(function(r){return e._navigator.apiV3.imageViewAdd$(r.report).pipe(a.catchError(function(e,t){console.error("Failed to report image stats ("+r.report+")",e);return i.empty()}))})).subscribe(function(){})};e.prototype._deactivate=function(){this._sequenceSubscription.unsubscribe();this._imageSubscription.unsubscribe()};e.prototype._getDefaultConfiguration=function(){return{}};e.componentName="stats";return e}(o.Component);r.StatsComponent=s;o.ComponentService.register(s);r.default=s},{"../Component":275,rxjs:27,"rxjs/operators":225}],302:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var i=e("virtual-dom");var a=e("rxjs");var s=e("rxjs/operators");var u=e("../../Component");var o=function(o){n(t,o);function t(e,t,r,n){var i=o.call(this,e,t,r)||this;i._renderer=!!n?n:new u.DirectionDOMRenderer(i.defaultConfiguration,{height:t.element.offsetHeight,width:t.element.offsetWidth});i._hoveredKeySubject$=new a.Subject;i._hoveredKey$=i._hoveredKeySubject$.pipe(s.share());return i}Object.defineProperty(t.prototype,"hoveredKey$",{get:function(){return this._hoveredKey$},enumerable:true,configurable:true});t.prototype.setHighlightKey=function(e){this.configure({highlightKey:e})};t.prototype.setMinWidth=function(e){this.configure({minWidth:e})};t.prototype.setMaxWidth=function(e){this.configure({maxWidth:e})};t.prototype._activate=function(){var n=this;this._configurationSubscription=this._configuration$.subscribe(function(e){n._renderer.setConfiguration(e)});this._resizeSubscription=this._container.renderService.size$.subscribe(function(e){n._renderer.resize(e)});this._nodeSubscription=this._navigator.stateService.currentNode$.pipe(s.tap(function(e){n._container.domRenderer.render$.next({name:n._name,vnode:i.h("div",{},[])});n._renderer.setNode(e)}),s.withLatestFrom(this._configuration$),s.switchMap(function(e){var r=e[0],t=e[1];return a.combineLatest(r.spatialEdges$,t.distinguishSequence?n._navigator.graphService.cacheSequence$(r.sequenceKey).pipe(s.catchError(function(e,t){console.error("Failed to cache sequence ("+r.sequenceKey+")",e);return a.of(null)})):a.of(null))})).subscribe(function(e){var t=e[0],r=e[1];n._renderer.setEdges(t,r)});this._renderCameraSubscription=this._container.renderService.renderCameraFrame$.pipe(s.tap(function(e){n._renderer.setRenderCamera(e)}),s.map(function(){return n._renderer}),s.filter(function(e){return e.needsRender}),s.map(function(e){return{name:n._name,vnode:e.render(n._navigator)}})).subscribe(this._container.domRenderer.render$);this._hoveredKeySubscription=a.combineLatest(this._container.domRenderer.element$,this._container.renderService.renderCamera$,this._container.mouseService.mouseMove$.pipe(s.startWith(null)),this._container.mouseService.mouseUp$.pipe(s.startWith(null))).pipe(s.map(function(e){var t=e[0];var r=t.getElementsByClassName("DirectionsPerspective");for(var n=0;n<r.length;n++){var i=r.item(n).querySelector(":hover");if(i!=null&&i.hasAttribute("data-key")){return i.getAttribute("data-key")}}return null}),s.distinctUntilChanged()).subscribe(this._hoveredKeySubject$);this._emitHoveredKeySubscription=this._hoveredKey$.subscribe(function(e){n.fire(t.hoveredkeychanged,e)})};t.prototype._deactivate=function(){this._configurationSubscription.unsubscribe();this._emitHoveredKeySubscription.unsubscribe();this._hoveredKeySubscription.unsubscribe();this._nodeSubscription.unsubscribe();this._renderCameraSubscription.unsubscribe()};t.prototype._getDefaultConfiguration=function(){return{distinguishSequence:false,maxWidth:460,minWidth:260}};t.componentName="direction";t.hoveredkeychanged="hoveredkeychanged";return t}(u.Component);r.DirectionComponent=o;u.ComponentService.register(o);r.default=o},{"../../Component":275,rxjs:27,"rxjs/operators":225,"virtual-dom":231}],303:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("../../Geo");var i=function(){function e(e,t){this._spatial=new n.Spatial;this._minThresholdWidth=320;this._maxThresholdWidth=1480;this._minThresholdHeight=240;this._maxThresholdHeight=820;this._configure(e);this._resize(t);this._reset()}Object.defineProperty(e.prototype,"minWidth",{get:function(){return this._minWidth},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"maxWidth",{get:function(){return this._maxWidth},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"containerWidth",{get:function(){return this._containerWidth},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"containerWidthCss",{get:function(){return this._containerWidthCss},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"containerMarginCss",{get:function(){return this._containerMarginCss},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"containerLeftCss",{get:function(){return this._containerLeftCss},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"containerHeight",{get:function(){return this._containerHeight},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"containerHeightCss",{get:function(){return this._containerHeightCss},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"containerBottomCss",{get:function(){return this._containerBottomCss},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"stepCircleSize",{get:function(){return this._stepCircleSize},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"stepCircleSizeCss",{get:function(){return this._stepCircleSizeCss},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"stepCircleMarginCss",{get:function(){return this._stepCircleMarginCss},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"turnCircleSize",{get:function(){return this._turnCircleSize},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"turnCircleSizeCss",{get:function(){return this._turnCircleSizeCss},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"outerRadius",{get:function(){return this._outerRadius},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"innerRadius",{get:function(){return this._innerRadius},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"shadowOffset",{get:function(){return this._shadowOffset},enumerable:true,configurable:true});e.prototype.configure=function(e){this._configure(e);this._reset()};e.prototype.resize=function(e){this._resize(e);this._reset()};e.prototype.angleToCoordinates=function(e){return[Math.cos(e),Math.sin(e)]};e.prototype.relativeAngleToCoordiantes=function(e,t){var r=this._spatial.wrapAngle(e-t);return this.angleToCoordinates(r)};e.prototype._configure=function(e){this._minWidth=e.minWidth;this._maxWidth=this._getMaxWidth(e.minWidth,e.maxWidth)};e.prototype._resize=function(e){this._elementWidth=e.width;this._elementHeight=e.height};e.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)};e.prototype._getContainerWidth=function(e,t){var r=(e-this._minThresholdWidth)/(this._maxThresholdWidth-this._minThresholdWidth);var n=(t-this._minThresholdHeight)/(this._maxThresholdHeight-this._minThresholdHeight);var i=Math.max(0,Math.min(1,Math.min(r,n)));i=.04*Math.round(25*i);return this._minWidth+i*(this._maxWidth-this._minWidth)};e.prototype._getContainerHeight=function(e){return.77*e};e.prototype._getStepCircleDiameter=function(e){return.34*e};e.prototype._getTurnCircleDiameter=function(e){return.3*e};e.prototype._getOuterRadius=function(e){return.31*e};e.prototype._getInnerRadius=function(e){return.125*e};e.prototype._numberToCssPixels=function(e){return e+"px"};e.prototype._getMaxWidth=function(e,t){return e>t?e:t};return e}();r.DirectionDOMCalculator=i;r.default=i},{"../../Geo":278}],304:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var x=e("virtual-dom");var n=e("../../Component");var f=e("../../Edge");var c=e("../../Error");var i=e("../../Geo");var o=function(){function e(e,t){this._isEdge=false;this._spatial=new i.Spatial;this._calculator=new n.DirectionDOMCalculator(e,t);this._node=null;this._rotation={phi:0,theta:0};this._epsilon=.5*Math.PI/180;this._highlightKey=null;this._distinguishSequence=false;this._needsRender=false;this._stepEdges=[];this._turnEdges=[];this._panoEdges=[];this._sequenceEdgeKeys=[];this._stepDirections=[f.EdgeDirection.StepForward,f.EdgeDirection.StepBackward,f.EdgeDirection.StepLeft,f.EdgeDirection.StepRight];this._turnDirections=[f.EdgeDirection.TurnLeft,f.EdgeDirection.TurnRight,f.EdgeDirection.TurnU];this._turnNames={};this._turnNames[f.EdgeDirection.TurnLeft]="TurnLeft";this._turnNames[f.EdgeDirection.TurnRight]="TurnRight";this._turnNames[f.EdgeDirection.TurnU]="TurnAround";var r=!!document.documentMode;this._isEdge=!r&&!!window.StyleMedia}Object.defineProperty(e.prototype,"needsRender",{get:function(){return this._needsRender},enumerable:true,configurable:true});e.prototype.render=function(e){this._needsRender=false;var t=this._rotation;var r=[];var n=[];if(this._node.pano){r=r.concat(this._createPanoArrows(e,t))}else{r=r.concat(this._createPerspectiveToPanoArrows(e,t));r=r.concat(this._createStepArrows(e,t));n=n.concat(this._createTurnArrows(e))}return this._getContainer(r,n,t)};e.prototype.setEdges=function(e,t){this._setEdges(e,t);this._setNeedsRender()};e.prototype.setNode=function(e){this._node=e;this._clearEdges();this._setNeedsRender()};e.prototype.setRenderCamera=function(e){var t=e.rotation;if(Math.abs(t.phi-this._rotation.phi)<this._epsilon){return}this._rotation=t;this._setNeedsRender()};e.prototype.setConfiguration=function(e){var t=false;if(this._highlightKey!==e.highlightKey||this._distinguishSequence!==e.distinguishSequence){this._highlightKey=e.highlightKey;this._distinguishSequence=e.distinguishSequence;t=true}if(this._calculator.minWidth!==e.minWidth||this._calculator.maxWidth!==e.maxWidth){this._calculator.configure(e);t=true}if(t){this._setNeedsRender()}};e.prototype.resize=function(e){this._calculator.resize(e);this._setNeedsRender()};e.prototype._setNeedsRender=function(){if(this._node!=null){this._needsRender=true}};e.prototype._clearEdges=function(){this._stepEdges=[];this._turnEdges=[];this._panoEdges=[];this._sequenceEdgeKeys=[]};e.prototype._setEdges=function(e,t){this._stepEdges=[];this._turnEdges=[];this._panoEdges=[];this._sequenceEdgeKeys=[];for(var r=0,n=e.edges;r<n.length;r++){var i=n[r];var o=i.data.direction;if(this._stepDirections.indexOf(o)>-1){this._stepEdges.push(i);continue}if(this._turnDirections.indexOf(o)>-1){this._turnEdges.push(i);continue}if(i.data.direction===f.EdgeDirection.Pano){this._panoEdges.push(i)}}if(this._distinguishSequence&&t!=null){var a=this._panoEdges.concat(this._stepEdges).concat(this._turnEdges);for(var s=0,u=a;s<u.length;s++){var i=u[s];var c=i.to;for(var h=0,l=t.keys;h<l.length;h++){var p=l[h];if(p===c){this._sequenceEdgeKeys.push(c);break}}}}};e.prototype._createPanoArrows=function(e,t){var r=[];for(var n=0,i=this._panoEdges;n<i.length;n++){var o=i[n];r.push(this._createVNodeByKey(e,o.to,o.data.worldMotionAzimuth,t,this._calculator.outerRadius,"DirectionsArrowPano"))}for(var a=0,s=this._stepEdges;a<s.length;a++){var u=s[a];r.push(this._createPanoToPerspectiveArrow(e,u.to,u.data.worldMotionAzimuth,t,u.data.direction))}return r};e.prototype._createPanoToPerspectiveArrow=function(e,t,r,n,i){var o=Math.PI/8;var a=n.phi;switch(i){case f.EdgeDirection.StepBackward:a=n.phi-Math.PI;break;case f.EdgeDirection.StepLeft:a=n.phi+Math.PI/2;break;case f.EdgeDirection.StepRight:a=n.phi-Math.PI/2;break;default:break}if(Math.abs(this._spatial.wrapAngle(r-a))<o){return this._createVNodeByKey(e,t,r,n,this._calculator.outerRadius,"DirectionsArrowStep")}return this._createVNodeDisabled(t,r,n)};e.prototype._createPerspectiveToPanoArrows=function(e,t){var r=[];for(var n=0,i=this._panoEdges;n<i.length;n++){var o=i[n];r.push(this._createVNodeByKey(e,o.to,o.data.worldMotionAzimuth,t,this._calculator.innerRadius,"DirectionsArrowPano",true))}return r};e.prototype._createStepArrows=function(e,t){var r=[];for(var n=0,i=this._stepEdges;n<i.length;n++){var o=i[n];r.push(this._createVNodeByDirection(e,o.to,o.data.worldMotionAzimuth,t,o.data.direction))}return r};e.prototype._createTurnArrows=function(e){var t=[];for(var r=0,n=this._turnEdges;r<n.length;r++){var i=n[r];var o=i.data.direction;var a=this._turnNames[o];t.push(this._createVNodeByTurn(e,i.to,a,o))}return t};e.prototype._createVNodeByKey=function(t,r,e,n,i,o,a){var s=function(e){t.moveToKey$(r).subscribe(undefined,function(e){if(!(e instanceof c.AbortMapillaryError)){console.error(e)}})};return this._createVNode(r,e,n,i,o,"DirectionsCircle",s,a)};e.prototype._createVNodeByDirection=function(t,e,r,n,i){var o=function(e){t.moveDir$(i).subscribe(undefined,function(e){if(!(e instanceof c.AbortMapillaryError)){console.error(e)}})};return this._createVNode(e,r,n,this._calculator.outerRadius,"DirectionsArrowStep","DirectionsCircle",o)};e.prototype._createVNodeByTurn=function(t,e,r,n){var i=function(e){t.moveDir$(n).subscribe(undefined,function(e){if(!(e instanceof c.AbortMapillaryError)){console.error(e)}})};var o={height:this._calculator.turnCircleSizeCss,transform:"rotate(0)",width:this._calculator.turnCircleSizeCss};switch(n){case f.EdgeDirection.TurnLeft:o.left="5px";o.top="5px";break;case f.EdgeDirection.TurnRight:o.right="5px";o.top="5px";break;case f.EdgeDirection.TurnU:o.left="5px";o.bottom="5px";break;default:break}var a={attributes:{"data-key":e},onclick:i,style:o};var s="TurnCircle";if(this._sequenceEdgeKeys.indexOf(e)>-1){s+="Sequence"}if(this._highlightKey===e){s+="Highlight"}var u=x.h("div."+r,{},[]);return x.h("div."+s,a,[u])};e.prototype._createVNodeDisabled=function(e,t,r){return this._createVNode(e,t,r,this._calculator.outerRadius,"DirectionsArrowDisabled","DirectionsCircleDisabled")};e.prototype._createVNode=function(e,t,r,n,i,o,a,s){var u=this._calculator.angleToCoordinates(t-r.phi);var c=Math.round(-n*u[1]+.5*this._calculator.containerWidth);var h=Math.round(-n*u[0]+.5*this._calculator.containerHeight);var l=this._calculator.relativeAngleToCoordiantes(t,r.phi);var p=this._calculator.shadowOffset;var f=-p*l[1];var d=p*l[0];var v="drop-shadow("+f+"px "+d+"px 1px rgba(0,0,0,0.8))";var m={style:{"-webkit-filter":v,filter:v}};var g=x.h("div."+i,m,[]);var y=-this._spatial.radToDeg(t-r.phi);var _=s?"translate("+c+"px, "+h+"px) rotate("+y+"deg) translateZ(-0.01px)":"translate("+c+"px, "+h+"px) rotate("+y+"deg)";var b={attributes:{"data-key":e},onclick:a,style:{height:this._calculator.stepCircleSizeCss,marginLeft:this._calculator.stepCircleMarginCss,marginTop:this._calculator.stepCircleMarginCss,transform:_,width:this._calculator.stepCircleSizeCss}};if(this._sequenceEdgeKeys.indexOf(e)>-1){o+="Sequence"}if(this._highlightKey===e){o+="Highlight"}return x.h("div."+o,b,[g])};e.prototype._getContainer=function(e,t,r){var n=this._isEdge?"rotateX(60deg)":"perspective("+this._calculator.containerWidthCss+") rotateX(60deg)";var i={oncontextmenu:function(e){e.preventDefault()},style:{bottom:this._calculator.containerBottomCss,height:this._calculator.containerHeightCss,left:this._calculator.containerLeftCss,marginLeft:this._calculator.containerMarginCss,transform:n,width:this._calculator.containerWidthCss}};return x.h("div.DirectionsPerspective",i,t.concat(e))};return e}();r.DirectionDOMRenderer=o;r.default=o},{"../../Component":275,"../../Edge":276,"../../Error":277,"../../Geo":278,"virtual-dom":231}],305:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var o=e("rxjs");var a=e("rxjs/operators");var s=e("../../Component");var u=e("../../Render");var h=e("../../Tiles");var l=e("../../Utils");var i=function(i){n(e,i);function e(e,t,r){var n=i.call(this,e,t,r)||this;n._imageTileLoader=new h.ImageTileLoader(l.Urls.tileScheme,l.Urls.tileDomain,l.Urls.origin);n._roiCalculator=new h.RegionOfInterestCalculator;n._rendererOperation$=new o.Subject;n._rendererCreator$=new o.Subject;n._rendererDisposer$=new o.Subject;n._renderer$=n._rendererOperation$.pipe(a.scan(function(e,t){return t(e)},null),a.filter(function(e){return e!=null}),a.distinctUntilChanged(undefined,function(e){return e.frameId}));n._rendererCreator$.pipe(a.map(function(){return function(e){if(e!=null){throw new Error("Multiple image plane states can not be created at the same time")}return new s.ImagePlaneGLRenderer}})).subscribe(n._rendererOperation$);n._rendererDisposer$.pipe(a.map(function(){return function(e){e.dispose();return null}})).subscribe(n._rendererOperation$);return n}e.prototype._activate=function(){var c=this;this._rendererSubscription=this._renderer$.pipe(a.map(function(e){var t={name:c._name,render:{frameId:e.frameId,needsRender:e.needsRender,render:e.render.bind(e),stage:u.GLRenderStage.Background}};e.clearNeedsRender();return t})).subscribe(this._container.glRenderer.render$);this._rendererCreator$.next(null);this._stateSubscription=this._navigator.stateService.currentState$.pipe(a.map(function(t){return function(e){e.updateFrame(t);return e}})).subscribe(this._rendererOperation$);var t=this._navigator.stateService.currentState$.pipe(a.distinctUntilChanged(undefined,function(e){return e.state.currentNode.key}),a.withLatestFrom(this._container.glRenderer.webGLRenderer$,this._container.renderService.size$),a.map(function(e){var t=e[0],r=e[1],n=e[2];var i=t.state;var o=Math.max(n.width,n.height);var a=i.currentNode;var s=i.currentTransform;var u=o>2048?2048:o>1024?1024:512;return new h.TextureProvider(a.key,s.basicWidth,s.basicHeight,u,a.image,c._imageTileLoader,new h.ImageTileStore,r)}),a.publishReplay(1),a.refCount());this._textureProviderSubscription=t.subscribe(function(){});this._setTextureProviderSubscription=t.pipe(a.map(function(t){return function(e){e.setTextureProvider(t.key,t);return e}})).subscribe(this._rendererOperation$);this._setTileSizeSubscription=this._container.renderService.size$.pipe(a.switchMap(function(e){return o.combineLatest(t,o.of(e)).pipe(a.first())})).subscribe(function(e){var t=e[0],r=e[1];var n=Math.max(r.width,r.height);var i=n>2048?2048:n>1024?1024:512;t.setTileSize(i)});this._abortTextureProviderSubscription=t.pipe(a.pairwise()).subscribe(function(e){var t=e[0];t.abort()});var e=o.combineLatest(this._container.renderService.renderCameraFrame$,this._container.renderService.size$.pipe(a.debounceTime(250))).pipe(a.map(function(e){var t=e[0],r=e[1];return[t.camera.position.clone(),t.camera.lookat.clone(),t.zoom.valueOf(),r.height.valueOf(),r.width.valueOf()]}),a.pairwise(),a.skipWhile(function(e){return e[1][2]-e[0][2]<0||e[1][2]===0}),a.map(function(e){var t=e[0][0].equals(e[1][0]);var r=e[0][1].equals(e[1][1]);var n=e[0][2]===e[1][2];var i=e[0][3]===e[1][3];var o=e[0][4]===e[1][4];return t&&r&&n&&i&&o}),a.distinctUntilChanged(),a.filter(function(e){return e}),a.switchMap(function(e){return c._container.renderService.renderCameraFrame$.pipe(a.first())}),a.withLatestFrom(this._container.renderService.size$,this._navigator.stateService.currentTransform$));this._setRegionOfInterestSubscription=t.pipe(a.switchMap(function(i){return e.pipe(a.map(function(e){var t=e[0],r=e[1],n=e[2];return[c._roiCalculator.computeRegionOfInterest(t,r,n),i]}))}),a.filter(function(e){return!e[1].disposed})).subscribe(function(e){var t=e[0];var r=e[1];r.setRegionOfInterest(t)});var n=t.pipe(a.switchMap(function(e){return e.hasTexture$}),a.startWith(false),a.publishReplay(1),a.refCount());this._hasTextureSubscription=n.subscribe(function(){});var r=this._navigator.stateService.currentState$.pipe(a.filter(function(e){return e.state.nodesAhead===0}),a.map(function(e){return e.state.currentNode}),a.distinctUntilChanged(undefined,function(e){return e.key}),a.debounceTime(1e3),a.withLatestFrom(n),a.filter(function(e){return!e[1]}),a.map(function(e){return e[0]}),a.filter(function(e){return e.pano?l.Settings.maxImageSize>l.Settings.basePanoramaSize:l.Settings.maxImageSize>l.Settings.baseImageSize}),a.switchMap(function(r){var e=r.pano?l.Settings.basePanoramaSize:l.Settings.baseImageSize;if(Math.max(r.image.width,r.image.height)>e){return o.empty()}var t=r.cacheImage$(l.Settings.maxImageSize).pipe(a.map(function(e){return[e.image,e]}));return t.pipe(a.takeUntil(n.pipe(a.filter(function(e){return e}))),a.catchError(function(e,t){console.error("Failed to fetch high res image ("+r.key+")",e);return o.empty()}))})).pipe(a.publish(),a.refCount());this._updateBackgroundSubscription=r.pipe(a.withLatestFrom(t)).subscribe(function(e){if(e[0][1].key!==e[1].key||e[1].disposed){return}e[1].updateBackground(e[0][0])});this._updateTextureImageSubscription=r.pipe(a.map(function(t){return function(e){e.updateTextureImage(t[0],t[1]);return 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._setTileSizeSubscription.unsubscribe();this._stateSubscription.unsubscribe();this._textureProviderSubscription.unsubscribe();this._updateBackgroundSubscription.unsubscribe();this._updateTextureImageSubscription.unsubscribe()};e.prototype._getDefaultConfiguration=function(){return{}};e.componentName="imagePlane";return e}(s.Component);r.ImagePlaneComponent=i;s.ComponentService.register(i);r.default=i},{"../../Component":275,"../../Render":281,"../../Tiles":284,"../../Utils":285,rxjs:27,"rxjs/operators":225}],306:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("../../Component");var i=function(){function e(){this._factory=new n.MeshFactory;this._scene=new n.MeshScene;this._alpha=0;this._alphaOld=0;this._fadeOutSpeed=.05;this._currentKey=null;this._previousKey=null;this._providerDisposers={};this._frameId=0;this._needsRender=false}Object.defineProperty(e.prototype,"frameId",{get:function(){return this._frameId},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"needsRender",{get:function(){return this._needsRender},enumerable:true,configurable:true});e.prototype.indicateNeedsRender=function(){this._needsRender=true};e.prototype.updateFrame=function(e){this._updateFrameId(e.id);this._needsRender=this._updateAlpha(e.state.alpha)||this._needsRender;this._needsRender=this._updateAlphaOld(e.state.alpha)||this._needsRender;this._needsRender=this._updateImagePlanes(e.state)||this._needsRender};e.prototype.setTextureProvider=function(e,t){var r=this;if(e!==this._currentKey){return}var n=t.textureCreated$.subscribe(function(e){r._updateTexture(e)});var i=t.textureUpdated$.subscribe(function(e){r._needsRender=true});var o=function(){n.unsubscribe();i.unsubscribe();t.dispose()};if(e in this._providerDisposers){var a=this._providerDisposers[e];a();delete this._providerDisposers[e]}this._providerDisposers[e]=o};e.prototype._updateTexture=function(e){this._needsRender=true;for(var t=0,r=this._scene.imagePlanes;t<r.length;t++){var n=r[t];var i=n.material;var o=i.uniforms.projectorTex.value;i.uniforms.projectorTex.value=null;o.dispose();i.uniforms.projectorTex.value=e}};e.prototype.updateTextureImage=function(e,t){if(this._currentKey!==t.key){return}this._needsRender=true;for(var r=0,n=this._scene.imagePlanes;r<n.length;r++){var i=n[r];var o=i.material;var a=o.uniforms.projectorTex.value;a.image=e;a.needsUpdate=true}};e.prototype.render=function(e,t){var r=this._scene.imagePlanesOld.length?1:this._alpha;for(var n=0,i=this._scene.imagePlanes;n<i.length;n++){var o=i[n];o.material.uniforms.opacity.value=r}for(var a=0,s=this._scene.imagePlanesOld;a<s.length;a++){var o=s[a];o.material.uniforms.opacity.value=this._alphaOld}t.render(this._scene.scene,e);t.render(this._scene.sceneOld,e);for(var u=0,c=this._scene.imagePlanes;u<c.length;u++){var o=c[u];o.material.uniforms.opacity.value=this._alpha}t.render(this._scene.scene,e)};e.prototype.clearNeedsRender=function(){this._needsRender=false};e.prototype.dispose=function(){this._scene.clear()};e.prototype._updateFrameId=function(e){this._frameId=e};e.prototype._updateAlpha=function(e){if(e===this._alpha){return false}this._alpha=e;return true};e.prototype._updateAlphaOld=function(e){if(e<1||this._alphaOld===0){return false}this._alphaOld=Math.max(0,this._alphaOld-this._fadeOutSpeed);return true};e.prototype._updateImagePlanes=function(e){if(e.currentNode==null||e.currentNode.key===this._currentKey){return false}var t=e.previousNode!=null?e.previousNode.key:null;var r=e.currentNode.key;if(this._previousKey!==t&&this._previousKey!==r&&this._previousKey in this._providerDisposers){var n=this._providerDisposers[this._previousKey];n();delete this._providerDisposers[this._previousKey]}if(t!=null){if(t!==this._currentKey&&t!==this._previousKey){var i=this._factory.createMesh(e.previousNode,e.previousTransform);this._scene.updateImagePlanes([i])}this._previousKey=t}this._currentKey=r;var o=this._factory.createMesh(e.currentNode,e.currentTransform);this._scene.updateImagePlanes([o]);this._alphaOld=1;return true};return e}();r.ImagePlaneGLRenderer=i;r.default=i},{"../../Component":275}],307:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n;(function(e){e[e["Hidden"]=0]="Hidden";e[e["Loading"]=1]="Loading";e[e["Visible"]=2]="Visible"})(n=r.CoverState||(r.CoverState={}))},{}],308:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n;(function(e){e[e["Motion"]=0]="Motion";e[e["Stationary"]=1]="Stationary"})(n=r.SliderMode||(r.SliderMode={}))},{}],309:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("./ICoverConfiguration");r.CoverState=n.CoverState;var i=e("./ISliderConfiguration");r.SliderMode=i.SliderMode},{"./ICoverConfiguration":307,"./ISliderConfiguration":308}],310:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var i=e("rxjs/operators");var o=e("../../Component");var l=e("../../Edge");var a=function(e){n(t,e);function t(){return e!==null&&e.apply(this,arguments)||this}t.prototype._enable=function(){var h=this;this._keyDownSubscription=this._container.keyboardService.keyDown$.pipe(i.withLatestFrom(this._navigator.playService.playing$,this._navigator.playService.direction$,this._navigator.playService.speed$,this._navigator.stateService.currentNode$.pipe(i.switchMap(function(e){return e.sequenceEdges$})))).subscribe(function(e){var t=e[0],r=e[1],n=e[2],i=e[3],o=e[4];if(t.altKey||t.ctrlKey||t.metaKey){return}switch(t.key){case"D":if(!t.shiftKey){return}var a=r?null:n===l.EdgeDirection.Next?l.EdgeDirection.Prev:n===l.EdgeDirection.Prev?l.EdgeDirection.Next:null;if(a!=null){h._navigator.playService.setDirection(a)}break;case" ":if(t.shiftKey){return}if(r){h._navigator.playService.stop()}else{for(var s=0,u=o.edges;s<u.length;s++){var c=u[s];if(c.data.direction===n){h._navigator.playService.play()}}}break;case"<":h._navigator.playService.setSpeed(i-.05);break;case">":h._navigator.playService.setSpeed(i+.05);break;default:return}t.preventDefault()})};t.prototype._disable=function(){this._keyDownSubscription.unsubscribe()};t.prototype._getConfiguration=function(e){return{keyZoom:e}};return t}(o.HandlerBase);r.KeyPlayHandler=a;r.default=a},{"../../Component":275,"../../Edge":276,"rxjs/operators":225}],311:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var i=e("rxjs/operators");var o=e("../../Component");var u=e("../../Edge");var c=e("../../Error");var a=function(e){n(t,e);function t(){return e!==null&&e.apply(this,arguments)||this}t.prototype._enable=function(){var s=this;var e=this._navigator.stateService.currentNode$.pipe(i.switchMap(function(e){return e.sequenceEdges$}));this._keyDownSubscription=this._container.keyboardService.keyDown$.pipe(i.withLatestFrom(e)).subscribe(function(e){var t=e[0],r=e[1];var n=null;switch(t.keyCode){case 38:n=u.EdgeDirection.Next;break;case 40:n=u.EdgeDirection.Prev;break;default:return}t.preventDefault();if(!t.altKey||t.shiftKey||!r.cached){return}for(var i=0,o=r.edges;i<o.length;i++){var a=o[i];if(a.data.direction===n){s._navigator.moveToKey$(a.to).subscribe(undefined,function(e){if(!(e instanceof c.AbortMapillaryError)){console.error(e)}});return}}})};t.prototype._disable=function(){this._keyDownSubscription.unsubscribe()};t.prototype._getConfiguration=function(e){return{keySequenceNavigation:e}};return t}(o.HandlerBase);r.KeySequenceNavigationHandler=a;r.default=a},{"../../Component":275,"../../Edge":276,"../../Error":277,"rxjs/operators":225}],312:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var i=e("rxjs/operators");var o=e("../../Component");var y=e("../../Edge");var a=e("../../Error");var s=function(o){n(e,o);function e(e,t,r,n){var i=o.call(this,e,t,r)||this;i._spatial=n;return i}e.prototype._enable=function(){var g=this;var e=this._navigator.stateService.currentNode$.pipe(i.switchMap(function(e){return e.spatialEdges$}));this._keyDownSubscription=this._container.keyboardService.keyDown$.pipe(i.withLatestFrom(e,this._navigator.stateService.currentState$)).subscribe(function(e){var t=e[0],r=e[1],n=e[2];var i=n.state.currentNode.pano;var o=null;switch(t.keyCode){case 37:o=t.shiftKey&&!i?y.EdgeDirection.TurnLeft:y.EdgeDirection.StepLeft;break;case 38:o=t.shiftKey&&!i?y.EdgeDirection.Pano:y.EdgeDirection.StepForward;break;case 39:o=t.shiftKey&&!i?y.EdgeDirection.TurnRight:y.EdgeDirection.StepRight;break;case 40:o=t.shiftKey&&!i?y.EdgeDirection.TurnU:y.EdgeDirection.StepBackward;break;default:return}t.preventDefault();if(t.altKey||!r.cached||t.shiftKey&&i){return}if(!i){g._moveDir(o,r)}else{var a={};a[y.EdgeDirection.StepBackward]=Math.PI;a[y.EdgeDirection.StepForward]=0;a[y.EdgeDirection.StepLeft]=Math.PI/2;a[y.EdgeDirection.StepRight]=-Math.PI/2;var s=g._rotationFromCamera(n.state.camera).phi;var u=g._spatial.wrapAngle(s+a[o]);var c=Math.PI/4;var h=r.edges.filter(function(e){return e.data.direction===y.EdgeDirection.Pano||e.data.direction===o});var l=Number.MAX_VALUE;var p=null;for(var f=0,d=h;f<d.length;f++){var v=d[f];var m=Math.abs(g._spatial.wrapAngle(v.data.worldMotionAzimuth-u));if(m<Math.min(l,c)){l=m;p=v.to}}if(p==null){return}g._moveToKey(p)}})};e.prototype._disable=function(){this._keyDownSubscription.unsubscribe()};e.prototype._getConfiguration=function(e){return{keySpatialNavigation:e}};e.prototype._moveDir=function(e,t){for(var r=0,n=t.edges;r<n.length;r++){var i=n[r];if(i.data.direction===e){this._moveToKey(i.to);return}}};e.prototype._moveToKey=function(e){this._navigator.moveToKey$(e).subscribe(undefined,function(e){if(!(e instanceof a.AbortMapillaryError)){console.error(e)}})};e.prototype._rotationFromCamera=function(e){var t=e.lookat.clone().sub(e.position);var r=t.clone().dot(e.up);var n=t.clone().sub(e.up.clone().multiplyScalar(r));var i=Math.atan2(n.y,n.x);var o=Math.PI/2-this._spatial.angleToPlane(t.toArray(),[0,0,1]);return{phi:i,theta:o}};return e}(o.HandlerBase);r.KeySpatialNavigationHandler=s;r.default=s},{"../../Component":275,"../../Edge":276,"../../Error":277,"rxjs/operators":225}],313:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var i=e("rxjs/operators");var o=e("../../Component");var a=function(o){n(e,o);function e(e,t,r,n){var i=o.call(this,e,t,r)||this;i._viewportCoords=n;return i}e.prototype._enable=function(){var s=this;this._keyDownSubscription=this._container.keyboardService.keyDown$.pipe(i.withLatestFrom(this._container.renderService.renderCamera$,this._navigator.stateService.currentTransform$)).subscribe(function(e){var t=e[0],r=e[1],n=e[2];if(t.altKey||t.shiftKey||t.ctrlKey||t.metaKey){return}var i=0;switch(t.key){case"+":i=1;break;case"-":i=-1;break;default:return}t.preventDefault();var o=s._viewportCoords.unprojectFromViewport(0,0,r.perspective);var a=n.projectBasic(o.toArray());s._navigator.stateService.zoomIn(i,a)})};e.prototype._disable=function(){this._keyDownSubscription.unsubscribe()};e.prototype._getConfiguration=function(e){return{keyZoom:e}};return e}(o.HandlerBase);r.KeyZoomHandler=a;r.default=a},{"../../Component":275,"rxjs/operators":225}],314:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var o=e("../../Component");var a=e("../../Geo");var i=function(i){n(e,i);function e(e,t,r){var n=i.call(this,e,t,r)||this;n._keyPlayHandler=new o.KeyPlayHandler(n,t,r);n._keySequenceNavigationHandler=new o.KeySequenceNavigationHandler(n,t,r);n._keySpatialNavigationHandler=new o.KeySpatialNavigationHandler(n,t,r,new a.Spatial);n._keyZoomHandler=new o.KeyZoomHandler(n,t,r,new a.ViewportCoords);return n}Object.defineProperty(e.prototype,"keyPlay",{get:function(){return this._keyPlayHandler},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"keySequenceNavigation",{get:function(){return this._keySequenceNavigationHandler},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"keySpatialNavigation",{get:function(){return this._keySpatialNavigationHandler},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"keyZoom",{get:function(){return this._keyZoomHandler},enumerable:true,configurable:true});e.prototype._activate=function(){var t=this;this._configurationSubscription=this._configuration$.subscribe(function(e){if(e.keyPlay){t._keyPlayHandler.enable()}else{t._keyPlayHandler.disable()}if(e.keySequenceNavigation){t._keySequenceNavigationHandler.enable()}else{t._keySequenceNavigationHandler.disable()}if(e.keySpatialNavigation){t._keySpatialNavigationHandler.enable()}else{t._keySpatialNavigationHandler.disable()}if(e.keyZoom){t._keyZoomHandler.enable()}else{t._keyZoomHandler.disable()}})};e.prototype._deactivate=function(){this._configurationSubscription.unsubscribe();this._keyPlayHandler.disable();this._keySequenceNavigationHandler.disable();this._keySpatialNavigationHandler.disable();this._keyZoomHandler.disable()};e.prototype._getDefaultConfiguration=function(){return{keyPlay:true,keySequenceNavigation:true,keySpatialNavigation:true,keyZoom:true}};e.componentName="keyboard";return e}(o.Component);r.KeyboardComponent=i;o.ComponentService.register(i);r.default=i},{"../../Component":275,"../../Geo":278}],315:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("./MarkerComponent");r.MarkerComponent=n.MarkerComponent;var i=e("./marker/SimpleMarker");r.SimpleMarker=i.SimpleMarker;var o=e("./marker/CircleMarker");r.CircleMarker=o.CircleMarker},{"./MarkerComponent":316,"./marker/CircleMarker":319,"./marker/SimpleMarker":321}],316:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var p=e("rxjs");var f=e("rxjs/operators");var C=e("three");var o=e("when");var a=e("../../Component");var d=e("../../Render");var s=e("../../Graph");var u=e("../../Geo");var i=function(i){n(E,i);function E(e,t,r){var n=i.call(this,e,t,r)||this;n._relativeGroundAltitude=-2;n._geoCoords=new u.GeoCoords;n._graphCalculator=new s.GraphCalculator;n._markerScene=new a.MarkerScene;n._markerSet=new a.MarkerSet;n._viewportCoords=new u.ViewportCoords;return n}E.prototype.add=function(e){this._markerSet.add(e)};E.prototype.get=function(e){return this._markerSet.get(e)};E.prototype.getAll=function(){return this._markerSet.getAll()};E.prototype.getMarkerIdAt=function(n){var i=this;return o.promise(function(t,r){i._container.renderService.renderCamera$.pipe(f.first(),f.map(function(e){var t=i._viewportCoords.canvasToViewport(n[0],n[1],i._container.element);var r=i._markerScene.intersectObjects(t,e.perspective);return r})).subscribe(function(e){t(e)},function(e){r(e)})})};E.prototype.has=function(e){return this._markerSet.has(e)};E.prototype.remove=function(e){this._markerSet.remove(e)};E.prototype.removeAll=function(){this._markerSet.removeAll()};E.prototype._activate=function(){var M=this;var e=this._navigator.stateService.currentState$.pipe(f.map(function(e){return e.state.camera.position.z+M._relativeGroundAltitude}),f.distinctUntilChanged(function(e,t){return Math.abs(e-t)<.01}),f.publishReplay(1),f.refCount());var t=p.combineLatest(e,this._navigator.stateService.reference$).pipe(f.first(),f.map(function(){}),f.publishReplay(1),f.refCount());var r=this._configuration$.pipe(f.map(function(e){return{visibleBBoxSize:Math.max(1,Math.min(200,e.visibleBBoxSize))}}));var n=this._navigator.stateService.currentNode$.pipe(f.map(function(e){return e.latLon}),f.publishReplay(1),f.refCount());var i=p.combineLatest(r,n).pipe(f.map(function(e){var t=e[0],r=e[1];return M._graphCalculator.boundingBoxCorners(r,t.visibleBBoxSize/2)}),f.publishReplay(1),f.refCount());var o=p.combineLatest(p.concat(p.of(this._markerSet),this._markerSet.changed$),i).pipe(f.map(function(e){var t=e[0],r=e[1];return t.search(r)}));this._setChangedSubscription=t.pipe(f.switchMap(function(){return o.pipe(f.withLatestFrom(M._navigator.stateService.reference$,e))})).subscribe(function(e){var t=e[0],r=e[1],n=e[2];var i=M._geoCoords;var o=M._markerScene;var a=o.markers;var s=Object.assign({},a);for(var u=0,c=t;u<c.length;u++){var h=c[u];if(h.id in a){delete s[h.id]}else{var l=i.geodeticToEnu(h.latLon.lat,h.latLon.lon,r.alt+n,r.lat,r.lon,r.alt);o.add(h,l)}}for(var p in s){if(!s.hasOwnProperty(p)){continue}o.remove(p)}});this._markersUpdatedSubscription=t.pipe(f.switchMap(function(){return M._markerSet.updated$.pipe(f.withLatestFrom(i,M._navigator.stateService.reference$,e))})).subscribe(function(e){var t=e[0],r=e[1],n=r[0],i=r[1],o=e[2],a=e[3];var s=M._geoCoords;var u=M._markerScene;for(var c=0,h=t;c<h.length;c++){var l=h[c];var p=u.has(l.id);var f=l.latLon.lat>n.lat&&l.latLon.lat<i.lat&&l.latLon.lon>n.lon&&l.latLon.lon<i.lon;if(f){var d=s.geodeticToEnu(l.latLon.lat,l.latLon.lon,o.alt+a,o.lat,o.lon,o.alt);u.add(l,d)}else if(!f&&p){u.remove(l.id)}}});this._referenceSubscription=this._navigator.stateService.reference$.pipe(f.skip(1),f.withLatestFrom(e)).subscribe(function(e){var t=e[0],r=e[1];var n=M._geoCoords;var i=M._markerScene;for(var o=0,a=i.getAll();o<a.length;o++){var s=a[o];var u=n.geodeticToEnu(s.latLon.lat,s.latLon.lon,t.alt+r,t.lat,t.lon,t.alt);i.update(s.id,u)}});this._adjustHeightSubscription=e.pipe(f.skip(1),f.withLatestFrom(this._navigator.stateService.reference$,n)).subscribe(function(e){var t=e[0],r=e[1],n=e[2];var i=M._geoCoords;var o=M._markerScene;var a=i.geodeticToEnu(n.lat,n.lon,r.alt+t,r.lat,r.lon,r.alt);for(var s=0,u=o.getAll();s<u.length;s++){var c=u[s];var h=i.geodeticToEnu(c.latLon.lat,c.latLon.lon,r.alt+t,r.lat,r.lon,r.alt);var l=h[0]-a[0];var p=h[1]-a[1];var f=Math.sqrt(l*l+p*p);if(f>50){continue}o.lerpAltitude(c.id,t,Math.min(1,Math.max(0,1.2-1.2*f/50)))}});this._renderSubscription=this._navigator.stateService.currentState$.pipe(f.map(function(e){var t=M._markerScene;return{name:M._name,render:{frameId:e.id,needsRender:t.needsRender,render:t.render.bind(t),stage:d.GLRenderStage.Foreground}}})).subscribe(this._container.glRenderer.render$);var a=p.combineLatest(this._container.renderService.renderCamera$,this._container.mouseService.mouseMove$).pipe(f.map(function(e){var t=e[0],r=e[1];var n=M._container.element;var i=M._viewportCoords.canvasPosition(r,n),o=i[0],a=i[1];var s=M._viewportCoords.canvasToViewport(o,a,n);var u=M._markerScene.intersectObjects(s,t.perspective);return u}),f.publishReplay(1),f.refCount());var s=this._container.mouseService.filtered$(this._name,this._container.mouseService.mouseDragStart$).pipe(f.map(function(e){return true}));var u=this._container.mouseService.filtered$(this._name,this._container.mouseService.mouseDragEnd$).pipe(f.map(function(e){return false}));var c=p.merge(s,u).pipe(f.startWith(false));this._dragEventSubscription=p.merge(s.pipe(f.withLatestFrom(a)),p.combineLatest(u,p.of(null))).pipe(f.startWith([false,null]),f.pairwise()).subscribe(function(e){var t=e[0],r=e[1];var n=r[0];var i=n?E.dragstart:E.dragend;var o=n?r[1]:t[1];var a=M._markerScene.get(o);var s={marker:a,target:M,type:i};M.fire(i,s)});var h=p.merge(this._container.mouseService.mouseDown$.pipe(f.map(function(e){return true})),this._container.mouseService.documentMouseUp$.pipe(f.map(function(e){return false}))).pipe(f.startWith(false));this._mouseClaimSubscription=p.combineLatest(this._container.mouseService.active$,a.pipe(f.distinctUntilChanged()),h,c).pipe(f.map(function(e){var t=e[0],r=e[1],n=e[2],i=e[3];return!t&&r!=null&&n||i}),f.distinctUntilChanged()).subscribe(function(e){if(e){M._container.mouseService.claimMouse(M._name,1);M._container.mouseService.claimWheel(M._name,1)}else{M._container.mouseService.unclaimMouse(M._name);M._container.mouseService.unclaimWheel(M._name)}});var l=this._container.mouseService.filtered$(this._name,this._container.mouseService.mouseDragStart$).pipe(f.withLatestFrom(a,this._container.renderService.renderCamera$),f.map(function(e){var t=e[0],r=e[1],n=e[2];var i=M._markerScene.get(r);var o=M._container.element;var a=M._viewportCoords.projectToCanvas(i.geometry.position.toArray(),o,n.perspective),s=a[0],u=a[1];var c=M._viewportCoords.canvasPosition(t,o),h=c[0],l=c[1];var p=[h-s,l-u];return[i,p,n]}),f.publishReplay(1),f.refCount());this._updateMarkerSubscription=this._container.mouseService.filtered$(this._name,this._container.mouseService.mouseDrag$).pipe(f.withLatestFrom(l,this._navigator.stateService.reference$,r)).subscribe(function(e){var t=e[0],r=e[1],n=r[0],i=r[1],o=r[2],a=e[2],s=e[3];if(!M._markerScene.has(n.id)){return}var u=M._container.element;var c=M._viewportCoords.canvasPosition(t,u),h=c[0],l=c[1];var p=h-i[0];var f=l-i[1];var d=M._viewportCoords.canvasToViewport(p,f,u),v=d[0],m=d[1];var g=new C.Vector3(v,m,1).unproject(o.perspective).sub(o.perspective.position).normalize();var y=Math.min(M._relativeGroundAltitude/g.z,s.visibleBBoxSize/2-.1);if(y<0){return}var _=g.clone().multiplyScalar(y).add(o.perspective.position);_.z=o.perspective.position.z+M._relativeGroundAltitude;var b=M._geoCoords.enuToGeodetic(_.x,_.y,_.z,a.lat,a.lon,a.alt),x=b[0],w=b[1];M._markerScene.update(n.id,_.toArray(),{lat:x,lon:w});M._markerSet.update(n);var S={marker:n,target:M,type:E.changed};M.fire(E.changed,S)})};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.componentName="marker";E.changed="changed";E.dragstart="dragstart";E.dragend="dragend";return E}(a.Component);r.MarkerComponent=i;a.ComponentService.register(i);r.default=i},{"../../Component":275,"../../Geo":278,"../../Graph":279,"../../Render":281,rxjs:27,"rxjs/operators":225,three:226,when:272}],317:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var u=e("three");var n=function(){function e(e,t){this._needsRender=false;this._interactiveObjects=[];this._markers={};this._objectMarkers={};this._raycaster=!!t?t:new u.Raycaster;this._scene=!!e?e:new u.Scene}Object.defineProperty(e.prototype,"markers",{get:function(){return this._markers},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"needsRender",{get:function(){return this._needsRender},enumerable:true,configurable:true});e.prototype.add=function(e,t){if(e.id in this._markers){this._dispose(e.id)}e.createGeometry(t);this._scene.add(e.geometry);this._markers[e.id]=e;for(var r=0,n=e.getInteractiveObjects();r<n.length;r++){var i=n[r];this._interactiveObjects.push(i);this._objectMarkers[i.uuid]=e.id}this._needsRender=true};e.prototype.clear=function(){for(var e in this._markers){if(!this._markers.hasOwnProperty){continue}this._dispose(e)}this._needsRender=true};e.prototype.get=function(e){return this._markers[e]};e.prototype.getAll=function(){var t=this;return Object.keys(this._markers).map(function(e){return t._markers[e]})};e.prototype.has=function(e){return e in this._markers};e.prototype.intersectObjects=function(e,t){var r=e[0],n=e[1];this._raycaster.setFromCamera(new u.Vector2(r,n),t);var i=this._raycaster.intersectObjects(this._interactiveObjects);for(var o=0,a=i;o<a.length;o++){var s=a[o];if(s.object.uuid in this._objectMarkers){return this._objectMarkers[s.object.uuid]}}return null};e.prototype.lerpAltitude=function(e,t,r){if(!(e in this._markers)){return}this._markers[e].lerpAltitude(t,r);this._needsRender=true};e.prototype.remove=function(e){if(!(e in this._markers)){return}this._dispose(e);this._needsRender=true};e.prototype.render=function(e,t){t.render(this._scene,e);this._needsRender=false};e.prototype.update=function(e,t,r){if(!(e in this._markers)){return}var n=this._markers[e];n.updatePosition(t,r);this._needsRender=true};e.prototype._dispose=function(e){var t=this._markers[e];this._scene.remove(t.geometry);for(var r=0,n=t.getInteractiveObjects();r<n.length;r++){var i=n[r];var o=this._interactiveObjects.indexOf(i);if(o!==-1){this._interactiveObjects.splice(o,1)}else{console.warn("Object does not exist ("+i.id+") for "+e)}delete this._objectMarkers[i.uuid]}t.disposeGeometry();delete this._markers[e]};return e}();r.MarkerScene=n;r.default=n},{three:226}],318:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("rbush");var i=e("rxjs");var o=function(){function e(){this._hash={};this._index=n(16,[".lon",".lat",".lon",".lat"]);this._indexChanged$=new i.Subject;this._updated$=new i.Subject}Object.defineProperty(e.prototype,"changed$",{get:function(){return this._indexChanged$},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"updated$",{get:function(){return this._updated$},enumerable:true,configurable:true});e.prototype.add=function(e){var t=[];var r=this._hash;var n=this._index;for(var i=0,o=e;i<o.length;i++){var a=o[i];var s=a.id;if(s in r){n.remove(r[s]);t.push(a)}var u={lat:a.latLon.lat,lon:a.latLon.lon,marker:a};r[s]=u;n.insert(u)}if(t.length>0){this._updated$.next(t)}if(e.length>t.length){this._indexChanged$.next(this)}};e.prototype.has=function(e){return e in this._hash};e.prototype.get=function(e){return this.has(e)?this._hash[e].marker:undefined};e.prototype.getAll=function(){return this._index.all().map(function(e){return e.marker})};e.prototype.remove=function(e){var t=this._hash;var r=this._index;var n=false;for(var i=0,o=e;i<o.length;i++){var a=o[i];if(!(a in t)){continue}var s=t[a];r.remove(s);delete t[a];n=true}if(n){this._indexChanged$.next(this)}};e.prototype.removeAll=function(){this._hash={};this._index.clear();this._indexChanged$.next(this)};e.prototype.search=function(e){var t=e[0],r=e[1];return this._index.search({maxX:r.lon,maxY:r.lat,minX:t.lon,minY:t.lat}).map(function(e){return e.marker})};e.prototype.update=function(e){var t=this._hash;var r=this._index;var n=e.id;if(!(n in t)){return}r.remove(t[n]);var i={lat:e.latLon.lat,lon:e.latLon.lon,marker:e};t[n]=i;r.insert(i)};return e}();r.MarkerSet=o;r.default=o},{rbush:26,rxjs:27}],319:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var o=e("three");var i=e("../../../Component");var a=function(i){n(e,i);function e(e,t,r){var n=i.call(this,e,t)||this;r=!!r?r:{};n._color=r.color!=null?r.color:16777215;n._opacity=r.opacity!=null?r.opacity:.4;n._radius=r.radius!=null?r.radius:1;return n}e.prototype._createGeometry=function(e){var t=new o.Mesh(new o.CircleGeometry(this._radius,16),new o.MeshBasicMaterial({color:this._color,opacity:this._opacity,transparent:true}));t.up.fromArray([0,0,1]);t.renderOrder=-1;var r=new o.Object3D;r.add(t);r.position.fromArray(e);this._geometry=r};e.prototype._disposeGeometry=function(){for(var e=0,t=this._geometry.children;e<t.length;e++){var r=t[e];r.geometry.dispose();r.material.dispose()}};e.prototype._getInteractiveObjects=function(){return[]};return e}(i.Marker);r.CircleMarker=a;r.default=a},{"../../../Component":275,three:226}],320:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=function(){function e(e,t){this._id=e;this._latLon=t}Object.defineProperty(e.prototype,"id",{get:function(){return this._id},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"geometry",{get:function(){return this._geometry},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"latLon",{get:function(){return this._latLon},enumerable:true,configurable:true});e.prototype.createGeometry=function(e){if(!!this._geometry){return}this._createGeometry(e);this._geometry.updateMatrixWorld(true)};e.prototype.disposeGeometry=function(){if(!this._geometry){return}this._disposeGeometry();this._geometry=undefined};e.prototype.getInteractiveObjects=function(){if(!this._geometry){return[]}return this._getInteractiveObjects()};e.prototype.lerpAltitude=function(e,t){if(!this._geometry){return}this._geometry.position.z=(1-t)*this._geometry.position.z+t*e};e.prototype.updatePosition=function(e,t){if(!!t){this._latLon.lat=t.lat;this._latLon.lon=t.lon}if(!this._geometry){return}this._geometry.position.fromArray(e);this._geometry.updateMatrixWorld(true)};return e}();r.Marker=n;r.default=n},{}],321:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var w=e("three");var i=e("../../../Component");var o=function(i){n(e,i);function e(e,t,r){var n=i.call(this,e,t)||this;r=!!r?r:{};n._ballColor=r.ballColor!=null?r.ballColor:16711680;n._ballOpacity=r.ballOpacity!=null?r.ballOpacity:.8;n._circleToRayAngle=2;n._color=r.color!=null?r.color:16711680;n._interactive=!!r.interactive;n._opacity=r.opacity!=null?r.opacity:.4;n._radius=r.radius!=null?r.radius:1;return n}e.prototype._createGeometry=function(e){var t=this._radius;var r=new w.Mesh(this._markerGeometry(t,8,8),new w.MeshBasicMaterial({color:this._color,opacity:this._opacity,transparent:true}));r.renderOrder=1;var n=new w.Mesh(new w.SphereGeometry(t/2,8,8),new w.MeshBasicMaterial({color:this._ballColor,opacity:this._ballOpacity,transparent:true}));n.position.z=this._markerHeight(t);var i=new w.Object3D;i.add(n);i.add(r);i.position.fromArray(e);this._geometry=i};e.prototype._disposeGeometry=function(){for(var e=0,t=this._geometry.children;e<t.length;e++){var r=t[e];r.geometry.dispose();r.material.dispose()}};e.prototype._getInteractiveObjects=function(){return this._interactive?[this._geometry.children[0]]:[]};e.prototype._markerHeight=function(e){var t=Math.tan(Math.PI-this._circleToRayAngle);return e*Math.sqrt(1+t*t)};e.prototype._markerGeometry=function(e,t,r){var n=new w.Geometry;t=Math.max(3,Math.floor(t)||8);r=Math.max(2,Math.floor(r)||6);var i=this._markerHeight(e);var o=[];for(var a=0;a<=r;++a){var s=[];for(var u=0;u<=t;++u){var c=u/t*Math.PI*2;var h=a/r*Math.PI;var l=void 0;if(h<this._circleToRayAngle){l=e}else{var p=Math.tan(h-this._circleToRayAngle);l=e*Math.sqrt(1+p*p)}var f=new w.Vector3;f.x=l*Math.cos(c)*Math.sin(h);f.y=l*Math.sin(c)*Math.sin(h);f.z=l*Math.cos(h)+i;n.vertices.push(f);s.push(n.vertices.length-1)}o.push(s)}for(var a=0;a<r;++a){for(var u=0;u<t;++u){var d=o[a][u+1];var v=o[a][u];var m=o[a+1][u];var g=o[a+1][u+1];var y=n.vertices[d].clone().normalize();var _=n.vertices[v].clone().normalize();var b=n.vertices[m].clone().normalize();var x=n.vertices[g].clone().normalize();n.faces.push(new w.Face3(d,v,g,[y,_,x]));n.faces.push(new w.Face3(v,m,g,[_.clone(),b,x.clone()]))}}n.computeFaceNormals();n.boundingSphere=new w.Sphere(new w.Vector3,e+i);return n};return e}(i.Marker);r.SimpleMarker=o;r.default=o},{"../../../Component":275,three:226}],322:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var i=e("rxjs");var o=e("rxjs/operators");var d=e("../../Component");var a=function(a){n(e,a);function e(e,t,r,n,i){var o=a.call(this,e,t,r)||this;o._spatial=i;o._viewportCoords=n;return o}e.prototype._enable=function(){var f=this;var e=this._navigator.stateService.currentState$.pipe(o.map(function(e){return e.state.alpha<1}));this._bounceSubscription=i.combineLatest(e,this._navigator.stateService.inTranslation$,this._container.mouseService.active$,this._container.touchService.active$).pipe(o.map(function(e){return e[0]||e[1]||e[2]||e[3]}),o.distinctUntilChanged(),o.switchMap(function(e){return e?i.empty():i.combineLatest(f._container.renderService.renderCamera$,f._navigator.stateService.currentTransform$.pipe(o.first()))})).subscribe(function(e){var t=e[0],r=e[1];if(!r.hasValidScale&&t.camera.focal<.1){return}if(t.perspective.aspect===0||t.perspective.aspect===Number.POSITIVE_INFINITY){return}var n=d.ImageBoundary.viewportDistances(r,t.perspective,f._viewportCoords);if(Math.max.apply(Math,n)<.01){return}var i=n[1]-n[3];var o=n[0]-n[2];var a=f._viewportCoords.unprojectFromViewport(0,0,t.perspective).sub(t.perspective.position);var s=f._viewportCoords.unprojectFromViewport(i,0,t.perspective).sub(t.perspective.position);var u=f._viewportCoords.unprojectFromViewport(0,o,t.perspective).sub(t.perspective.position);var c=(i>0?1:-1)*s.angleTo(a);var h=(o>0?1:-1)*u.angleTo(a);var l=Math.PI/60;var p=.1;c=f._spatial.clamp(p*c,-l,l);h=f._spatial.clamp(p*h,-l,l);f._navigator.stateService.rotateUnbounded({phi:c,theta:h})})};e.prototype._disable=function(){this._bounceSubscription.unsubscribe()};e.prototype._getConfiguration=function(){return{}};return e}(d.HandlerBase);r.BounceHandler=a;r.default=a},{"../../Component":275,rxjs:27,"rxjs/operators":225}],323:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var i=e("rxjs");var a=e("rxjs/operators");var o=e("../../Component");var s=function(o){n(e,o);function e(e,t,r,n){var i=o.call(this,e,t,r)||this;i._viewportCoords=n;return i}e.prototype._enable=function(){var l=this;this._zoomSubscription=i.merge(this._container.mouseService.filtered$(this._component.name,this._container.mouseService.dblClick$),this._container.touchService.doubleTap$.pipe(a.map(function(e){var t=e.touches[0];return{clientX:t.clientX,clientY:t.clientY,shiftKey:e.shiftKey}}))).pipe(a.withLatestFrom(this._container.renderService.renderCamera$,this._navigator.stateService.currentTransform$)).subscribe(function(e){var t=e[0],r=e[1],n=e[2];var i=l._container.element;var o=l._viewportCoords.canvasPosition(t,i),a=o[0],s=o[1];var u=l._viewportCoords.unprojectFromCanvas(a,s,i,r.perspective);var c=n.projectBasic(u.toArray());var h=!!t.shiftKey?-1:1;l._navigator.stateService.zoomIn(h,c)})};e.prototype._disable=function(){this._zoomSubscription.unsubscribe()};e.prototype._getConfiguration=function(e){return{doubleClickZoom:e}};return e}(o.HandlerBase);r.DoubleClickZoomHandler=s;r.default=s},{"../../Component":275,rxjs:27,"rxjs/operators":225}],324:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var s=e("rxjs");var u=e("rxjs/operators");var _=e("../../Component");var i=function(a){n(e,a);function e(e,t,r,n,i){var o=a.call(this,e,t,r)||this;o._spatial=i;o._viewportCoords=n;return o}e.prototype._enable=function(){var y=this;var e=this._container.mouseService.filtered$(this._component.name,this._container.mouseService.mouseDragStart$).pipe(u.map(function(){return true}),u.share());var t=this._container.mouseService.filtered$(this._component.name,this._container.mouseService.mouseDragEnd$).pipe(u.map(function(){return false}),u.share());this._activeMouseSubscription=s.merge(e,t).subscribe(this._container.mouseService.activate$);var r=s.merge(e,t).pipe(u.switchMap(function(e){return e?y._container.mouseService.documentMouseMove$:s.empty()}));this._preventDefaultSubscription=s.merge(r,this._container.touchService.touchMove$).subscribe(function(e){e.preventDefault()});var n=this._container.touchService.singleTouchDragStart$.pipe(u.map(function(){return true}));var i=this._container.touchService.singleTouchDragEnd$.pipe(u.map(function(){return false}));this._activeTouchSubscription=s.merge(n,i).subscribe(this._container.touchService.activate$);var o=this._navigator.stateService.currentState$.pipe(u.map(function(e){return e.state.currentNode.fullPano||e.state.nodesAhead<1}),u.distinctUntilChanged(),u.switchMap(function(e){if(!e){return s.empty()}var t=_.MouseOperator.filteredPairwiseMouseDrag$(y._component.name,y._container.mouseService);var r=s.merge(y._container.touchService.singleTouchDragStart$,y._container.touchService.singleTouchDrag$,y._container.touchService.singleTouchDragEnd$.pipe(u.map(function(){return null}))).pipe(u.map(function(e){return e!=null&&e.touches.length>0?e.touches[0]:null}),u.pairwise(),u.filter(function(e){return e[0]!=null&&e[1]!=null}));return s.merge(t,r)}),u.withLatestFrom(this._container.renderService.renderCamera$,this._navigator.stateService.currentTransform$),u.map(function(e){var t=e[0],r=e[1],n=e[2];var i=t[0];var o=t[1];var a=o.clientX-i.clientX;var s=o.clientY-i.clientY;var u=y._container.element;var c=y._viewportCoords.canvasPosition(o,u),h=c[0],l=c[1];var p=y._viewportCoords.unprojectFromCanvas(h,l,u,r.perspective).sub(r.perspective.position);var f=y._viewportCoords.unprojectFromCanvas(h-a,l,u,r.perspective).sub(r.perspective.position);var d=y._viewportCoords.unprojectFromCanvas(h,l-s,u,r.perspective).sub(r.perspective.position);var v=(a>0?1:-1)*f.angleTo(p);var m=(s>0?-1:1)*d.angleTo(p);var g=_.ImageBoundary.viewportDistances(n,r.perspective,y._viewportCoords);if(g[0]>0&&m<0){m/=Math.max(1,200*g[0])}if(g[2]>0&&m>0){m/=Math.max(1,200*g[2])}if(g[1]>0&&v<0){v/=Math.max(1,200*g[1])}if(g[3]>0&&v>0){v/=Math.max(1,200*g[3])}return{phi:v,theta:m}}),u.share());this._rotateWithoutInertiaSubscription=o.subscribe(function(e){y._navigator.stateService.rotateWithoutInertia(e)});this._rotateSubscription=o.pipe(u.scan(function(e,t){y._drainBuffer(e);e.push([Date.now(),t]);return e},[]),u.sample(s.merge(this._container.mouseService.filtered$(this._component.name,this._container.mouseService.mouseDragEnd$),this._container.touchService.singleTouchDragEnd$)),u.map(function(e){var t=y._drainBuffer(e.slice());var r={phi:0,theta:0};for(var n=0,i=t;n<i.length;n++){var o=i[n];r.phi+=o[1].phi;r.theta+=o[1].theta}var a=t.length;if(a>0){r.phi/=a;r.theta/=a}var s=Math.PI/18;r.phi=y._spatial.clamp(r.phi,-s,s);r.theta=y._spatial.clamp(r.theta,-s,s);return r})).subscribe(function(e){y._navigator.stateService.rotate(e)})};e.prototype._disable=function(){this._activeMouseSubscription.unsubscribe();this._activeTouchSubscription.unsubscribe();this._preventDefaultSubscription.unsubscribe();this._rotateSubscription.unsubscribe();this._rotateWithoutInertiaSubscription.unsubscribe();this._activeMouseSubscription=null;this._activeTouchSubscription=null;this._preventDefaultSubscription=null;this._rotateSubscription=null};e.prototype._getConfiguration=function(e){return{dragPan:e}};e.prototype._drainBuffer=function(e){var t=50;var r=Date.now();while(e.length>0&&r-e[0][0]>t){e.shift()}return e};return e}(_.HandlerBase);r.DragPanHandler=i;r.default=i},{"../../Component":275,rxjs:27,"rxjs/operators":225}],325:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var d=e("three");var i=e("rxjs");var o=e("rxjs/operators");var s=e("../../Component");var u=e("../../State");var a=function(a){n(e,a);function e(e,t,r,n,i){var o=a.call(this,e,t,r)||this;o._spatial=i;o._viewportCoords=n;return o}e.prototype._enable=function(){var l=this;var e=this._navigator.stateService.state$.pipe(o.map(function(e){return e===u.State.Earth}),o.share());this._preventDefaultSubscription=e.pipe(o.switchMap(function(e){return e?l._container.mouseService.mouseWheel$:i.empty()})).subscribe(function(e){e.preventDefault()});this._truckSubscription=e.pipe(o.switchMap(function(e){if(!e){return i.empty()}return s.MouseOperator.filteredPairwiseMouseDrag$(l._component.name,l._container.mouseService).pipe(o.filter(function(e){var t=e[0],r=e[1];return!(t.ctrlKey&&r.ctrlKey)}))}),o.withLatestFrom(this._container.renderService.renderCamera$,this._navigator.stateService.currentTransform$),o.map(function(e){var t=e[0],r=t[0],n=t[1],i=e[1],o=e[2];var a=[0,0,1];var s=o.unprojectBasic([.5,.5],0);s[2]-=2;var u=l._planeIntersection(n,a,s,i.perspective,l._container.element);var c=l._planeIntersection(r,a,s,i.perspective,l._container.element);if(!u||!c){return null}var h=(new d.Vector3).subVectors(u,c).multiplyScalar(-1).toArray();return h}),o.filter(function(e){return!!e})).subscribe(function(e){l._navigator.stateService.truck(e)});this._orbitSubscription=e.pipe(o.switchMap(function(e){if(!e){return i.empty()}return s.MouseOperator.filteredPairwiseMouseDrag$(l._component.name,l._container.mouseService).pipe(o.filter(function(e){var t=e[0],r=e[1];return t.ctrlKey&&r.ctrlKey}))}),o.map(function(e){var t=e[0],r=e[1];var n=l._eventToViewport(r,l._container.element),i=n[0],o=n[1];var a=l._eventToViewport(t,l._container.element),s=a[0],u=a[1];var c=(s-i)*Math.PI;var h=(o-u)*Math.PI/2;return{phi:c,theta:h}})).subscribe(function(e){l._navigator.stateService.orbit(e)});this._dollySubscription=e.pipe(o.switchMap(function(e){if(!e){return i.empty()}return l._container.mouseService.filteredWheel$(l._component.name,l._container.mouseService.mouseWheel$)}),o.map(function(e){var t=e.deltaY;if(e.deltaMode===1){t=40*t}else if(e.deltaMode===2){t=800*t}var r=l._viewportCoords.containerToCanvas(l._container.element);return-t/r[1]})).subscribe(function(e){l._navigator.stateService.dolly(e)})};e.prototype._disable=function(){this._dollySubscription.unsubscribe();this._orbitSubscription.unsubscribe();this._preventDefaultSubscription.unsubscribe();this._truckSubscription.unsubscribe()};e.prototype._getConfiguration=function(){return{}};e.prototype._eventToViewport=function(e,t){var r=this._viewportCoords.canvasPosition(e,t);return this._viewportCoords.canvasToViewport(r[0],r[1],t)};e.prototype._planeIntersection=function(e,t,r,n,i){var o=this._viewportCoords.canvasPosition(e,i),a=o[0],s=o[1];var u=this._viewportCoords.unprojectFromCanvas(a,s,i,n).sub(n.position).normalize();if(Math.abs(this._spatial.angleToPlane(u.toArray(),t))<Math.PI/90){return null}var c=n.position.clone();var h=(new d.Vector3).fromArray(t);var l=(new d.Vector3).fromArray(r);var p=(new d.Vector3).subVectors(l,c).dot(h)/u.clone().dot(h);var f=(new d.Vector3).addVectors(c,u.multiplyScalar(p));if(this._viewportCoords.worldToCamera(f.toArray(),n)[2]>0){return null}return f};return e}(s.HandlerBase);r.EarthControlHandler=a;r.default=a},{"../../Component":275,"../../State":282,rxjs:27,"rxjs/operators":225,three:226}],326:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var $=e("../../../src/Geo");function z(e){var t=[];var r=[[0,0],[1,0],[1,1],[0,1]];var n=[[1,0],[0,1],[-1,0],[0,-1]];for(var i=0;i<4;++i){var o=r[i];var a=n[i];for(var s=0;s<e;++s){t.push([o[0]+a[0]*s/e,o[1]+a[1]*s/e])}}return t}function U(e,t){return e>=-1&&e<=1&&t>=-1&&t<=1}function G(e,t){return e>=0&&e<=1&&t>=0&&t<=1}function n(t,r,n){var e=z(100);var i=e.map(function(e){return n.basicToViewportSafe(e[0],e[1],t,r)});var o=[];var a=[{x:-1,y:1},{x:1,y:1},{x:1,y:-1},{x:-1,y:-1}];var s=[false,false,false,false];for(var u=0;u<i.length;u++){var c=i[u];var h=i[(u+1)%i.length];if(c===null){continue}if(h===null){if(U(c[0],c[1])){o.push(c)}continue}var l=c[0],p=c[1];var f=h[0],d=h[1];if(U(l,p)){if(U(f,d)){o.push(c)}else{for(var v=0;v<4;v++){var m={p1:{x:l,y:p},p2:{x:f,y:d}};var g={p1:a[v],p2:a[(v+1)%4]};var y=$.Lines.segmentsIntersect(m,g);if(y){var _=$.Lines.segmentIntersection(m,g);o.push(c,[_.x,_.y]);s[v]=true}}}}}var b=n.viewportToBasic(-1,1,t,r),x=b[0],w=b[1];var S=n.viewportToBasic(1,1,t,r),M=S[0],E=S[1];var C=n.viewportToBasic(1,-1,t,r),T=C[0],O=C[1];var P=n.viewportToBasic(-1,-1,t,r),A=P[0],j=P[1];if(G(x,w)){s[3]=s[0]=true}if(G(M,E)){s[0]=s[1]=true}if(G(T,O)){s[1]=s[2]=true}if(G(A,j)){s[2]=s[3]=true}var R=[-1,-1,1,1];for(var L=0,I=o;L<I.length;L++){var N=I[L];var D=N[0];var k=N[1];if(D>R[1]){R[1]=D}if(D<R[3]){R[3]=D}if(k>R[0]){R[0]=k}if(k<R[2]){R[2]=k}}var B=[1,1,-1,-1];var F=[];for(var v=0;v<4;v++){if(s[v]){F.push(0);continue}F.push(Math.abs(B[v]-R[v]))}return F}r.viewportDistances=n},{"../../../src/Geo":278}],327:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var s=e("../../Component");var u=e("../../Geo");var i=function(a){n(e,a);function e(e,t,r){var n=a.call(this,e,t,r)||this;var i=new u.Spatial;var o=new u.ViewportCoords;n._bounceHandler=new s.BounceHandler(n,t,r,o,i);n._doubleClickZoomHandler=new s.DoubleClickZoomHandler(n,t,r,o);n._dragPanHandler=new s.DragPanHandler(n,t,r,o,i);n._earthControlHandler=new s.EarthControlHandler(n,t,r,o,i);n._scrollZoomHandler=new s.ScrollZoomHandler(n,t,r,o);n._touchZoomHandler=new s.TouchZoomHandler(n,t,r,o);return n}Object.defineProperty(e.prototype,"doubleClickZoom",{get:function(){return this._doubleClickZoomHandler},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"dragPan",{get:function(){return this._dragPanHandler},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"scrollZoom",{get:function(){return this._scrollZoomHandler},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"touchZoom",{get:function(){return this._touchZoomHandler},enumerable:true,configurable:true});e.prototype._activate=function(){var t=this;this._bounceHandler.enable();this._earthControlHandler.enable();this._configurationSubscription=this._configuration$.subscribe(function(e){if(e.doubleClickZoom){t._doubleClickZoomHandler.enable()}else{t._doubleClickZoomHandler.disable()}if(e.dragPan){t._dragPanHandler.enable()}else{t._dragPanHandler.disable()}if(e.scrollZoom){t._scrollZoomHandler.enable()}else{t._scrollZoomHandler.disable()}if(e.touchZoom){t._touchZoomHandler.enable()}else{t._touchZoomHandler.disable()}});this._container.mouseService.claimMouse(this._name,0)};e.prototype._deactivate=function(){this._container.mouseService.unclaimMouse(this._name);this._configurationSubscription.unsubscribe();this._bounceHandler.disable();this._doubleClickZoomHandler.disable();this._dragPanHandler.disable();this._earthControlHandler.disable();this._scrollZoomHandler.disable();this._touchZoomHandler.disable()};e.prototype._getDefaultConfiguration=function(){return{doubleClickZoom:false,dragPan:true,scrollZoom:true,touchZoom:true}};e.componentName="mouse";return e}(s.Component);r.MouseComponent=i;s.ComponentService.register(i);r.default=i},{"../../Component":275,"../../Geo":278}],328:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var i=e("rxjs/operators");var o=e("../../Component");var a=function(o){n(e,o);function e(e,t,r,n){var i=o.call(this,e,t,r)||this;i._viewportCoords=n;return i}e.prototype._enable=function(){var f=this;this._container.mouseService.claimWheel(this._component.name,0);this._preventDefaultSubscription=this._container.mouseService.mouseWheel$.subscribe(function(e){e.preventDefault()});this._zoomSubscription=this._container.mouseService.filteredWheel$(this._component.name,this._container.mouseService.mouseWheel$).pipe(i.withLatestFrom(this._navigator.stateService.currentState$,function(e,t){return[e,t]}),i.filter(function(e){var t=e[1].state;return t.currentNode.fullPano||t.nodesAhead<1}),i.map(function(e){return e[0]}),i.withLatestFrom(this._container.renderService.renderCamera$,this._navigator.stateService.currentTransform$,function(e,t,r){return[e,t,r]})).subscribe(function(e){var t=e[0];var r=e[1];var n=e[2];var i=f._container.element;var o=f._viewportCoords.canvasPosition(t,i),a=o[0],s=o[1];var u=f._viewportCoords.unprojectFromCanvas(a,s,i,r.perspective);var c=n.projectBasic(u.toArray());var h=t.deltaY;if(t.deltaMode===1){h=40*h}else if(t.deltaMode===2){h=800*h}var l=f._viewportCoords.containerToCanvas(i);var p=-3*h/l[1];f._navigator.stateService.zoomIn(p,c)})};e.prototype._disable=function(){this._container.mouseService.unclaimWheel(this._component.name);this._preventDefaultSubscription.unsubscribe();this._zoomSubscription.unsubscribe();this._preventDefaultSubscription=null;this._zoomSubscription=null};e.prototype._getConfiguration=function(e){return{scrollZoom:e}};return e}(o.HandlerBase);r.ScrollZoomHandler=a;r.default=a},{"../../Component":275,"rxjs/operators":225}],329:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var i=e("rxjs");var a=e("rxjs/operators");var o=e("../../Component");var s=function(o){n(e,o);function e(e,t,r,n){var i=o.call(this,e,t,r)||this;i._viewportCoords=n;return i}e.prototype._enable=function(){var d=this;this._preventDefaultSubscription=this._container.touchService.pinch$.subscribe(function(e){e.originalEvent.preventDefault()});var e=this._container.touchService.pinchStart$.pipe(a.map(function(e){return true}));var t=this._container.touchService.pinchEnd$.pipe(a.map(function(e){return false}));this._activeSubscription=i.merge(e,t).subscribe(this._container.touchService.activate$);this._zoomSubscription=this._container.touchService.pinch$.pipe(a.withLatestFrom(this._navigator.stateService.currentState$),a.filter(function(e){var t=e[1].state;return t.currentNode.fullPano||t.nodesAhead<1}),a.map(function(e){return e[0]}),a.withLatestFrom(this._container.renderService.renderCamera$,this._navigator.stateService.currentTransform$)).subscribe(function(e){var t=e[0],r=e[1],n=e[2];var i=d._container.element;var o=d._viewportCoords.canvasPosition(t,i),a=o[0],s=o[1];var u=d._viewportCoords.unprojectFromCanvas(a,s,i,r.perspective);var c=n.projectBasic(u.toArray());var h=d._viewportCoords.containerToCanvas(i),l=h[0],p=h[1];var f=3*t.distanceChange/Math.min(l,p);d._navigator.stateService.zoomIn(f,c)})};e.prototype._disable=function(){this._activeSubscription.unsubscribe();this._preventDefaultSubscription.unsubscribe();this._zoomSubscription.unsubscribe();this._preventDefaultSubscription=null;this._zoomSubscription=null};e.prototype._getConfiguration=function(e){return{touchZoom:e}};return e}(o.HandlerBase);r.TouchZoomHandler=s;r.default=s},{"../../Component":275,rxjs:27,"rxjs/operators":225}],330:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("./popup/Popup");r.Popup=n.Popup;var i=e("./PopupComponent");r.PopupComponent=i.PopupComponent},{"./PopupComponent":331,"./popup/Popup":332}],331:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var a=e("rxjs");var i=e("rxjs/operators");var o=e("../../Component");var s=e("../../Utils");var u=function(o){n(e,o);function e(e,t,r,n){var i=o.call(this,e,t,r)||this;i._dom=!!n?n:new s.DOM;i._popups=[];i._added$=new a.Subject;i._popups$=new a.Subject;return i}e.prototype.add=function(e){for(var t=0,r=e;t<r.length;t++){var n=r[t];if(this._popups.indexOf(n)!==-1){continue}this._popups.push(n);if(this._activated){n.setParentContainer(this._popupContainer)}}this._added$.next(e);this._popups$.next(this._popups)};e.prototype.getAll=function(){return this._popups.slice()};e.prototype.remove=function(e){for(var t=0,r=e;t<r.length;t++){var n=r[t];this._remove(n)}this._popups$.next(this._popups)};e.prototype.removeAll=function(){for(var e=0,t=this._popups.slice();e<t.length;e++){var r=t[e];this._remove(r)}this._popups$.next(this._popups)};e.prototype._activate=function(){var s=this;this._popupContainer=this._dom.createElement("div","mapillary-js-popup-container",this._container.element);for(var e=0,t=this._popups;e<t.length;e++){var r=t[e];r.setParentContainer(this._popupContainer)}this._updateAllSubscription=a.combineLatest(this._container.renderService.renderCamera$,this._container.renderService.size$,this._navigator.stateService.currentTransform$).subscribe(function(e){var t=e[0],r=e[1],n=e[2];for(var i=0,o=s._popups;i<o.length;i++){var a=o[i];a.update(t,r,n)}});var n=this._popups$.pipe(i.startWith(this._popups),i.switchMap(function(e){return a.from(e).pipe(i.mergeMap(function(e){return e.changed$}))}),i.map(function(e){return[e]}));this._updateAddedChangedSubscription=a.merge(this._added$,n).pipe(i.withLatestFrom(this._container.renderService.renderCamera$,this._container.renderService.size$,this._navigator.stateService.currentTransform$)).subscribe(function(e){var t=e[0],r=e[1],n=e[2],i=e[3];for(var o=0,a=t;o<a.length;o++){var s=a[o];s.update(r,n,i)}})};e.prototype._deactivate=function(){this._updateAllSubscription.unsubscribe();this._updateAddedChangedSubscription.unsubscribe();for(var e=0,t=this._popups;e<t.length;e++){var r=t[e];r.remove()}this._container.element.removeChild(this._popupContainer);delete this._popupContainer};e.prototype._getDefaultConfiguration=function(){return{}};e.prototype._remove=function(e){var t=this._popups.indexOf(e);if(t===-1){return}var r=this._popups.splice(t,1)[0];if(this._activated){r.remove()}};e.componentName="popup";return e}(o.Component);r.PopupComponent=u;o.ComponentService.register(u);r.default=u},{"../../Component":275,"../../Utils":285,rxjs:27,"rxjs/operators":225}],332:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("rxjs");var i=e("../../../Geo");var o=e("../../../Utils");var x=e("../../../Viewer");var a=function(){function e(e,t,r){this._options={};e=!!e?e:{};this._options.capturePointer=e.capturePointer===false?e.capturePointer:true;this._options.clean=e.clean;this._options.float=e.float;this._options.offset=e.offset;this._options.opacity=e.opacity;this._options.position=e.position;this._dom=!!r?r:new o.DOM;this._viewportCoords=!!t?t:new i.ViewportCoords;this._notifyChanged$=new n.Subject}Object.defineProperty(e.prototype,"changed$",{get:function(){return this._notifyChanged$},enumerable:true,configurable:true});e.prototype.remove=function(){if(this._content&&this._content.parentNode){this._content.parentNode.removeChild(this._content)}if(this._container){this._container.parentNode.removeChild(this._container);delete this._container}if(this._parentContainer){delete this._parentContainer}};e.prototype.setBasicPoint=function(e){this._point=e.slice();this._rect=null;this._notifyChanged$.next(this)};e.prototype.setBasicRect=function(e){this._rect=e.slice();this._point=null;this._notifyChanged$.next(this)};e.prototype.setDOMContent=function(e){if(this._content&&this._content.parentNode){this._content.parentNode.removeChild(this._content)}var t="mapillaryjs-popup-content"+(this._options.clean===true?"-clean":"")+(this._options.capturePointer===true?" mapillaryjs-popup-capture-pointer":"");this._content=this._dom.createElement("div",t,this._container);this._content.appendChild(e);this._notifyChanged$.next(this)};e.prototype.setHTML=function(e){var t=this._dom.document.createDocumentFragment();var r=this._dom.createElement("body");var n;r.innerHTML=e;while(true){n=r.firstChild;if(!n){break}t.appendChild(n)}this.setDOMContent(t)};e.prototype.setText=function(e){this.setDOMContent(this._dom.document.createTextNode(e))};e.prototype.setParentContainer=function(e){this._parentContainer=e};e.prototype.update=function(e,t,r){var n;if(!this._parentContainer||!this._content){return}if(!this._point&&!this._rect){return}if(!this._container){this._container=this._dom.createElement("div","mapillaryjs-popup",this._parentContainer);var i=this._options.clean!==true&&this._options.float!==x.Alignment.Center;if(i){var o="mapillaryjs-popup-tip"+(this._options.capturePointer===true?" mapillaryjs-popup-capture-pointer":"");this._tip=this._dom.createElement("div",o,this._container);this._dom.createElement("div","mapillaryjs-popup-tip-inner",this._tip)}this._container.appendChild(this._content);this._parentContainer.appendChild(this._container);if(this._options.opacity!=null){this._container.style.opacity=this._options.opacity.toString()}}var a=null;var s=this._alignmentToPopupAligment(this._options.position);var u=this._alignmentToPopupAligment(this._options.float);var c=this._container.classList;if(this._point!=null){a=this._viewportCoords.basicToCanvasSafe(this._point[0],this._point[1],{offsetHeight:t.height,offsetWidth:t.width},r,e.perspective)}else{var h=["center","top","bottom","left","right","top-left","top-right","bottom-left","bottom-right"];var l=null;for(var p=0,f=h;p<f.length;p++){var d=f[p];if(c.contains("mapillaryjs-popup-float-"+d)){l=d;break}}n=this._rectToPixel(this._rect,s,l,e,t,r),a=n[0],s=n[1];if(!u){u=s}}if(a==null){this._container.style.display="none";return}this._container.style.display="";if(!u){var v=this._container.offsetWidth;var m=this._container.offsetHeight;var g=this._pixelToFloats(a,t,v,m);u=g.length===0?"top":g.join("-")}var y=this._normalizeOffset(this._options.offset);a=[a[0]+y[u][0],a[1]+y[u][1]];a=[Math.round(a[0]),Math.round(a[1])];var _={bottom:"translate(-50%,0)","bottom-left":"translate(-100%,0)","bottom-right":"translate(0,0)",center:"translate(-50%,-50%)",left:"translate(-100%,-50%)",right:"translate(0,-50%)",top:"translate(-50%,-100%)","top-left":"translate(-100%,-100%)","top-right":"translate(0,-100%)"};for(var b in _){if(!_.hasOwnProperty(b)){continue}c.remove("mapillaryjs-popup-float-"+b)}c.add("mapillaryjs-popup-float-"+u);this._container.style.transform=_[u]+" translate("+a[0]+"px,"+a[1]+"px)"};e.prototype._rectToPixel=function(e,t,r,n,i,o){if(!t){var a=this._container.offsetWidth;var s=this._container.offsetHeight;var u={bottom:[0,s/2],"bottom-left":[-a/2,s/2],"bottom-right":[a/2,s/2],left:[-a/2,0],right:[a/2,0],top:[0,-s/2],"top-left":[-a/2,-s/2],"top-right":[a/2,-s/2]};var c=["top","bottom","left","right"];var h=[0,null,null];for(var l=0,p=c;l<p.length;l++){var f=p[l];var d=this._pointFromRectPosition(e,f);var v=this._viewportCoords.basicToCanvasSafe(d[0],d[1],{offsetHeight:i.height,offsetWidth:i.width},o,n.perspective);if(v==null){continue}var m=u[f];var g=[v[0]+m[0],v[1]+m[1]];var y=r!=null&&r===f?1:.7;var _=this._pixelToFloats(g,i,a/y,s/(2*y));if(_.length===0&&v[0]>0&&v[0]<i.width&&v[1]>0&&v[1]<i.height){return[v,f]}var b=Math.max(g[0]-a/2,0);var x=Math.min(g[0]+a/2,i.width);var w=Math.max(g[1]-s/2,0);var S=Math.min(g[1]+s/2,i.height);var M=Math.max(0,x-b);var E=Math.max(0,S-w);var C=y*M*E;if(C>h[0]){h[0]=C;h[1]=v;h[2]=f}}if(h[0]>0){return[h[1],h[2]]}}var T=this._pointFromRectPosition(e,t);var O=this._viewportCoords.basicToCanvasSafe(T[0],T[1],{offsetHeight:i.height,offsetWidth:i.width},o,n.perspective);return[O,t!=null?t:"top"]};e.prototype._alignmentToPopupAligment=function(e){switch(e){case x.Alignment.Bottom:return"bottom";case x.Alignment.BottomLeft:return"bottom-left";case x.Alignment.BottomRight:return"bottom-right";case x.Alignment.Center:return"center";case x.Alignment.Left:return"left";case x.Alignment.Right:return"right";case x.Alignment.Top:return"top";case x.Alignment.TopLeft:return"top-left";case x.Alignment.TopRight:return"top-right";default:return null}};e.prototype._normalizeOffset=function(e){if(e==null){return this._normalizeOffset(0)}if(typeof e==="number"){var t=e;var r=t>=0?1:-1;var n=r*Math.round(Math.sqrt(.5*Math.pow(t,2)));return{bottom:[0,t],"bottom-left":[-n,n],"bottom-right":[n,n],center:[0,0],left:[-t,0],right:[t,0],top:[0,-t],"top-left":[-n,-n],"top-right":[n,-n]}}else{return{bottom:e.bottom||[0,0],"bottom-left":e.bottomLeft||[0,0],"bottom-right":e.bottomRight||[0,0],center:e.center||[0,0],left:e.left||[0,0],right:e.right||[0,0],top:e.top||[0,0],"top-left":e.topLeft||[0,0],"top-right":e.topRight||[0,0]}}};e.prototype._pixelToFloats=function(e,t,r,n){var i=[];if(e[1]<n){i.push("bottom")}else if(e[1]>t.height-n){i.push("top")}if(e[0]<r/2){i.push("right")}else if(e[0]>t.width-r/2){i.push("left")}return i};e.prototype._pointFromRectPosition=function(e,t){var r=e[0];var n=e[0]<e[2]?e[2]:e[2]+1;var i=e[1];var o=e[3];switch(t){case"bottom":return[(r+n)/2,o];case"bottom-left":return[r,o];case"bottom-right":return[n,o];case"center":return[(r+n)/2,(i+o)/2];case"left":return[r,(i+o)/2];case"right":return[n,(i+o)/2];case"top":return[(r+n)/2,i];case"top-left":return[r,i];case"top-right":return[n,i];default:return[(r+n)/2,o]}};return e}();r.Popup=a;r.default=a},{"../../../Geo":278,"../../../Utils":285,"../../../Viewer":286,rxjs:27}],333:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var c=e("rxjs");var h=e("rxjs/operators");var u=e("../../Component");var i=e("../../Edge");var o=e("../../Graph");var a=function(a){n(s,a);function s(e,t,r,n,i){var o=a.call(this,e,t,r)||this;o._sequenceDOMRenderer=!!n?n:new u.SequenceDOMRenderer(t);o._scheduler=i;o._containerWidth$=new c.Subject;o._hoveredKeySubject$=new c.Subject;o._hoveredKey$=o._hoveredKeySubject$.pipe(h.share());o._navigator.playService.playing$.pipe(h.skip(1),h.withLatestFrom(o._configuration$)).subscribe(function(e){var t=e[0],r=e[1];o.fire(s.playingchanged,t);if(t===r.playing){return}if(t){o.play()}else{o.stop()}});o._navigator.playService.direction$.pipe(h.skip(1),h.withLatestFrom(o._configuration$)).subscribe(function(e){var t=e[0],r=e[1];if(t!==r.direction){o.setDirection(t)}});return o}Object.defineProperty(s.prototype,"hoveredKey$",{get:function(){return this._hoveredKey$},enumerable:true,configurable:true});s.prototype.play=function(){this.configure({playing:true})};s.prototype.stop=function(){this.configure({playing:false})};s.prototype.setDirection=function(e){this.configure({direction:e})};s.prototype.setHighlightKey=function(e){this.configure({highlightKey:e})};s.prototype.setMaxWidth=function(e){this.configure({maxWidth:e})};s.prototype.setMinWidth=function(e){this.configure({minWidth:e})};s.prototype.setVisible=function(e){this.configure({visible:e})};s.prototype._activate=function(){var u=this;this._sequenceDOMRenderer.activate();var t=this._navigator.stateService.currentNode$.pipe(h.switchMap(function(e){return e.sequenceEdges$}),h.publishReplay(1),h.refCount());var e=this._navigator.stateService.currentNode$.pipe(h.distinctUntilChanged(undefined,function(e){return e.sequenceKey}),h.switchMap(function(e){return c.concat(c.of(null),u._navigator.graphService.cacheSequence$(e.sequenceKey).pipe(h.retry(3),h.catchError(function(e){console.error("Failed to cache sequence",e);return c.of(null)})))}),h.startWith(null),h.publishReplay(1),h.refCount());this._sequenceSubscription=e.subscribe();var i=this._sequenceDOMRenderer.index$.pipe(h.withLatestFrom(e),h.map(function(e){var t=e[0],r=e[1];return r!=null?r.keys[t]:null}),h.filter(function(e){return!!e}),h.distinctUntilChanged(),h.publish(),h.refCount());this._moveSubscription=c.merge(i.pipe(h.debounceTime(100,this._scheduler)),i.pipe(h.auditTime(400,this._scheduler))).pipe(h.distinctUntilChanged(),h.switchMap(function(e){return u._navigator.moveToKey$(e).pipe(h.catchError(function(e){return c.empty()}))})).subscribe();this._setSequenceGraphModeSubscription=this._sequenceDOMRenderer.changingPositionChanged$.pipe(h.filter(function(e){return e})).subscribe(function(){u._navigator.graphService.setGraphMode(o.GraphMode.Sequence)});this._setSpatialGraphModeSubscription=this._sequenceDOMRenderer.changingPositionChanged$.pipe(h.filter(function(e){return!e})).subscribe(function(){u._navigator.graphService.setGraphMode(o.GraphMode.Spatial)});this._navigator.graphService.graphMode$.pipe(h.switchMap(function(e){return e===o.GraphMode.Spatial?u._navigator.stateService.currentNode$.pipe(h.take(2)):c.empty()}),h.filter(function(e){return!e.spatialEdges.cached}),h.switchMap(function(e){return u._navigator.graphService.cacheNode$(e.key).pipe(h.catchError(function(e){return c.empty()}))})).subscribe();this._stopSubscription=this._sequenceDOMRenderer.changingPositionChanged$.pipe(h.filter(function(e){return e})).subscribe(function(){u._navigator.playService.stop()});this._cacheSequenceNodesSubscription=c.combineLatest(this._navigator.graphService.graphMode$,this._sequenceDOMRenderer.changingPositionChanged$.pipe(h.startWith(false),h.distinctUntilChanged())).pipe(h.withLatestFrom(this._navigator.stateService.currentNode$),h.switchMap(function(e){var t=e[0],r=t[0],n=t[1],i=e[1];return n&&r===o.GraphMode.Sequence?u._navigator.graphService.cacheSequenceNodes$(i.sequenceKey,i.key).pipe(h.retry(3),h.catchError(function(e){console.error("Failed to cache sequence nodes.",e);return c.empty()})):c.empty()})).subscribe();var r=e.pipe(h.switchMap(function(r){if(!r){return c.of({index:null,max:null})}var n=true;return u._sequenceDOMRenderer.changingPositionChanged$.pipe(h.startWith(false),h.distinctUntilChanged(),h.switchMap(function(e){var t=!e&&n?0:1;n=false;return e?i:u._navigator.stateService.currentNode$.pipe(h.map(function(e){return e.key}),h.distinctUntilChanged(),h.skip(t))}),h.map(function(e){var t=r.keys.indexOf(e);if(t===-1){return{index:null,max:null}}return{index:t,max:r.keys.length-1}}))}));this._renderSubscription=c.combineLatest(t,this._configuration$,this._containerWidth$,this._sequenceDOMRenderer.changed$.pipe(h.startWith(this._sequenceDOMRenderer)),this._navigator.playService.speed$,r).pipe(h.map(function(e){var t=e[0],r=e[1],n=e[2],i=e[3],o=e[4],a=e[5];var s=u._sequenceDOMRenderer.render(t,r,n,o,a.index,a.max,u,u._navigator);return{name:u._name,vnode:s}})).subscribe(this._container.domRenderer.render$);this._setSpeedSubscription=this._sequenceDOMRenderer.speed$.subscribe(function(e){u._navigator.playService.setSpeed(e)});this._setDirectionSubscription=this._configuration$.pipe(h.map(function(e){return e.direction}),h.distinctUntilChanged()).subscribe(function(e){u._navigator.playService.setDirection(e)});this._containerWidthSubscription=c.combineLatest(this._container.renderService.size$,this._configuration$.pipe(h.distinctUntilChanged(function(e,t){return e[0]===t[0]&&e[1]===t[1]},function(e){return[e.minWidth,e.maxWidth]}))).pipe(h.map(function(e){var t=e[0],r=e[1];return u._sequenceDOMRenderer.getContainerWidth(t,r)})).subscribe(this._containerWidth$);this._playingSubscription=this._configuration$.pipe(h.map(function(e){return e.playing}),h.distinctUntilChanged()).subscribe(function(e){if(e){u._navigator.playService.play()}else{u._navigator.playService.stop()}});this._hoveredKeySubscription=this._sequenceDOMRenderer.mouseEnterDirection$.pipe(h.switchMap(function(i){var e=t.pipe(h.map(function(e){for(var t=0,r=e.edges;t<r.length;t++){var n=r[t];if(n.data.direction===i){return n.to}}return null}),h.takeUntil(u._sequenceDOMRenderer.mouseLeaveDirection$));return c.concat(e,c.of(null))}),h.distinctUntilChanged()).subscribe(this._hoveredKeySubject$);this._emitHoveredKeySubscription=this._hoveredKey$.subscribe(function(e){u.fire(s.hoveredkeychanged,e)})};s.prototype._deactivate=function(){this._emitHoveredKeySubscription.unsubscribe();this._renderSubscription.unsubscribe();this._playingSubscription.unsubscribe();this._containerWidthSubscription.unsubscribe();this._hoveredKeySubscription.unsubscribe();this._setSpeedSubscription.unsubscribe();this._setDirectionSubscription.unsubscribe();this._setSequenceGraphModeSubscription.unsubscribe();this._setSpatialGraphModeSubscription.unsubscribe();this._sequenceSubscription.unsubscribe();this._moveSubscription.unsubscribe();this._cacheSequenceNodesSubscription.unsubscribe();this._stopSubscription.unsubscribe();this._sequenceDOMRenderer.deactivate()};s.prototype._getDefaultConfiguration=function(){return{direction:i.EdgeDirection.Next,maxWidth:108,minWidth:70,playing:false,visible:true}};s.componentName="sequence";s.playingchanged="playingchanged";s.hoveredkeychanged="hoveredkeychanged";return s}(u.Component);r.SequenceComponent=a;u.ComponentService.register(a);r.default=a},{"../../Component":275,"../../Edge":276,"../../Graph":279,rxjs:27,"rxjs/operators":225}],334:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("rxjs");var i=e("rxjs/operators");var w=e("virtual-dom");var S=e("../../Component");var M=e("../../Edge");var f=e("../../Error");var o=function(){function e(e){this._container=e;this._minThresholdWidth=320;this._maxThresholdWidth=1480;this._minThresholdHeight=240;this._maxThresholdHeight=820;this._stepperDefaultWidth=108;this._controlsDefaultWidth=88;this._defaultHeight=30;this._expandControls=false;this._mode=S.SequenceMode.Default;this._speed=.5;this._changingSpeed=false;this._index=null;this._changingPosition=false;this._mouseEnterDirection$=new n.Subject;this._mouseLeaveDirection$=new n.Subject;this._notifyChanged$=new n.Subject;this._notifyChangingPositionChanged$=new n.Subject;this._notifySpeedChanged$=new n.Subject;this._notifyIndexChanged$=new n.Subject}Object.defineProperty(e.prototype,"changed$",{get:function(){return this._notifyChanged$},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"changingPositionChanged$",{get:function(){return this._notifyChangingPositionChanged$},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"speed$",{get:function(){return this._notifySpeedChanged$},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"index$",{get:function(){return this._notifyIndexChanged$},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"mouseEnterDirection$",{get:function(){return this._mouseEnterDirection$},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"mouseLeaveDirection$",{get:function(){return this._mouseLeaveDirection$},enumerable:true,configurable:true});e.prototype.activate=function(){var t=this;if(!!this._changingSubscription){return}this._changingSubscription=n.merge(this._container.mouseService.documentMouseUp$,this._container.touchService.touchEnd$.pipe(i.filter(function(e){return e.touches.length===0}))).subscribe(function(e){if(t._changingSpeed){t._changingSpeed=false}if(t._changingPosition){t._setChangingPosition(false)}})};e.prototype.deactivate=function(){if(!this._changingSubscription){return}this._changingSpeed=false;this._changingPosition=false;this._expandControls=false;this._mode=S.SequenceMode.Default;this._changingSubscription.unsubscribe();this._changingSubscription=null};e.prototype.render=function(e,t,r,n,i,o,a,s){if(t.visible===false){return w.h("div.SequenceContainer",{},[])}var u=this._createStepper(e,t,r,a,s);var c=this._createSequenceControls(r);var h=this._createPlaybackControls(r,n,a,t);var l=this._createTimelineControls(r,i,o);return w.h("div.SequenceContainer",[u,c,h,l])};e.prototype.getContainerWidth=function(e,t){var r=t.minWidth;var n=t.maxWidth;if(n<r){n=r}var i=(e.width-this._minThresholdWidth)/(this._maxThresholdWidth-this._minThresholdWidth);var o=(e.height-this._minThresholdHeight)/(this._maxThresholdHeight-this._minThresholdHeight);var a=Math.max(0,Math.min(1,Math.min(i,o)));return r+a*(n-r)};e.prototype._createPositionInput=function(e,t){var r=this;this._index=e;var n=function(e){r._index=Number(e.target.value);r._notifyIndexChanged$.next(r._index)};var i=this._container.domContainer.getBoundingClientRect();var o=Math.max(276,Math.min(410,5+.8*i.width))-65;var a=function(e){e.stopPropagation();r._setChangingPosition(true)};var s=function(e){if(r._changingPosition===true){e.stopPropagation()}};var u=function(e){if(e.key==="ArrowDown"||e.key==="ArrowLeft"||e.key==="ArrowRight"||e.key==="ArrowUp"){e.preventDefault()}};var c={max:t!=null?t:1,min:0,onchange:n,oninput:n,onkeydown:u,onmousedown:a,onmousemove:s,ontouchmove:s,ontouchstart:a,style:{width:o+"px"},type:"range",value:e!=null?e:0};var h=e==null||t==null||t<=1;if(h){c.disabled="true"}var l=w.h("input.SequencePosition",c,[]);var p=h?".SequencePositionContainerDisabled":".SequencePositionContainer";return w.h("div"+p,[l])};e.prototype._createSpeedInput=function(e){var t=this;this._speed=e;var r=function(e){t._speed=Number(e.target.value)/1e3;t._notifySpeedChanged$.next(t._speed)};var n=this._container.domContainer.getBoundingClientRect();var i=Math.max(276,Math.min(410,5+.8*n.width))-160;var o=function(e){t._changingSpeed=true;e.stopPropagation()};var a=function(e){if(t._changingSpeed===true){e.stopPropagation()}};var s=function(e){if(e.key==="ArrowDown"||e.key==="ArrowLeft"||e.key==="ArrowRight"||e.key==="ArrowUp"){e.preventDefault()}};var u=w.h("input.SequenceSpeed",{max:1e3,min:0,onchange:r,oninput:r,onkeydown:s,onmousedown:o,onmousemove:a,ontouchmove:a,ontouchstart:o,style:{width:i+"px"},type:"range",value:1e3*e},[]);return w.h("div.SequenceSpeedContainer",[u])};e.prototype._createPlaybackControls=function(e,t,r,n){var i=this;if(this._mode!==S.SequenceMode.Playback){return w.h("div.SequencePlayback",[])}var o=w.h("div.SequenceSwitchIcon.SequenceIconVisible",[]);var a=n.direction===M.EdgeDirection.Next?M.EdgeDirection.Prev:M.EdgeDirection.Next;var s=n.playing;var u={onclick:function(){if(!s){r.setDirection(a)}}};var c=n.playing?".SequenceSwitchButtonDisabled":".SequenceSwitchButton";var h=w.h("div"+c,u,[o]);var l=w.h("div.SequenceSlowIcon.SequenceIconVisible",[]);var p=w.h("div.SequenceSlowContainer",[l]);var f=w.h("div.SequenceFastIcon.SequenceIconVisible",[]);var d=w.h("div.SequenceFastContainer",[f]);var v=w.h("div.SequenceCloseIcon.SequenceIconVisible",[]);var m={onclick:function(){i._mode=S.SequenceMode.Default;i._notifyChanged$.next(i)}};var g=w.h("div.SequenceCloseButton",m,[v]);var y=this._createSpeedInput(t);var _=[h,p,y,d,g];var b=Math.round(e/this._stepperDefaultWidth*this._defaultHeight+10);var x={style:{top:b+"px"}};return w.h("div.SequencePlayback",x,_)};e.prototype._createPlayingButton=function(e,t,r,n){var i=r.direction===M.EdgeDirection.Next&&e!=null||r.direction===M.EdgeDirection.Prev&&t!=null;var o=r.playing?function(e){n.stop()}:i?function(e){n.play()}:null;var a={onclick:o};var s=r.playing?"Stop":i?"Play":"PlayDisabled";var u={className:s};if(r.direction===M.EdgeDirection.Prev){u.style={transform:"rotate(180deg) translate(50%, 50%)"}}var c=w.h("div.SequenceComponentIcon",u,[]);var h=i?"SequencePlay":"SequencePlayDisabled";return w.h("div."+h,a,[c])};e.prototype._createSequenceControls=function(e){var t=this;var r=Math.round(8/this._stepperDefaultWidth*e);var n={onclick:function(){t._expandControls=!t._expandControls;t._mode=S.SequenceMode.Default;t._notifyChanged$.next(t)},style:{"border-bottom-right-radius":r+"px","border-top-right-radius":r+"px"}};var i=w.h("div.SequenceExpanderBar",[]);var o=w.h("div.SequenceExpanderButton",n,[i]);var a=this._mode===S.SequenceMode.Playback?".SequenceFastIconGrey.SequenceIconVisible":".SequenceFastIcon";var s=w.h("div"+a,[]);var u={onclick:function(){t._mode=t._mode===S.SequenceMode.Playback?S.SequenceMode.Default:S.SequenceMode.Playback;t._notifyChanged$.next(t)}};var c=w.h("div.SequencePlaybackButton",u,[s]);var h=this._mode===S.SequenceMode.Timeline?".SequenceTimelineIconGrey.SequenceIconVisible":".SequenceTimelineIcon";var l=w.h("div"+h,[]);var p={onclick:function(){t._mode=t._mode===S.SequenceMode.Timeline?S.SequenceMode.Default:S.SequenceMode.Timeline;t._notifyChanged$.next(t)}};var f=w.h("div.SequenceTimelineButton",p,[l]);var d={style:{height:this._defaultHeight/this._stepperDefaultWidth*e+"px",transform:"translate("+(e/2+2)+"px, 0)",width:this._controlsDefaultWidth/this._stepperDefaultWidth*e+"px"}};var v=".SequenceControls"+(this._expandControls?".SequenceControlsExpanded":"");return w.h("div"+v,d,[c,f,o])};e.prototype._createSequenceArrows=function(e,t,r,n,i){var o=this;var a={onclick:e!=null?function(e){i.moveDir$(M.EdgeDirection.Next).subscribe(undefined,function(e){if(!(e instanceof f.AbortMapillaryError)){console.error(e)}})}:null,onmouseenter:function(e){o._mouseEnterDirection$.next(M.EdgeDirection.Next)},onmouseleave:function(e){o._mouseLeaveDirection$.next(M.EdgeDirection.Next)}};var s=Math.round(8/this._stepperDefaultWidth*r);var u={onclick:t!=null?function(e){i.moveDir$(M.EdgeDirection.Prev).subscribe(undefined,function(e){if(!(e instanceof f.AbortMapillaryError)){console.error(e)}})}:null,onmouseenter:function(e){o._mouseEnterDirection$.next(M.EdgeDirection.Prev)},onmouseleave:function(e){o._mouseLeaveDirection$.next(M.EdgeDirection.Prev)},style:{"border-bottom-left-radius":s+"px","border-top-left-radius":s+"px"}};var c=this._getStepClassName(M.EdgeDirection.Next,e,n.highlightKey);var h=this._getStepClassName(M.EdgeDirection.Prev,t,n.highlightKey);var l=w.h("div.SequenceComponentIcon",[]);var p=w.h("div.SequenceComponentIcon",[]);return[w.h("div."+h,u,[p]),w.h("div."+c,a,[l])]};e.prototype._createStepper=function(e,t,r,n,i){var o=null;var a=null;for(var s=0,u=e.edges;s<u.length;s++){var c=u[s];if(c.data.direction===M.EdgeDirection.Next){o=c.to}if(c.data.direction===M.EdgeDirection.Prev){a=c.to}}var h=this._createPlayingButton(o,a,t,n);var l=this._createSequenceArrows(o,a,r,t,i);l.splice(1,0,h);var p={oncontextmenu:function(e){e.preventDefault()},style:{height:this._defaultHeight/this._stepperDefaultWidth*r+"px",width:r+"px"}};return w.h("div.SequenceStepper",p,l)};e.prototype._createTimelineControls=function(e,t,r){var n=this;if(this._mode!==S.SequenceMode.Timeline){return w.h("div.SequenceTimeline",[])}var i=this._createPositionInput(t,r);var o=w.h("div.SequenceCloseIcon.SequenceIconVisible",[]);var a={onclick:function(){n._mode=S.SequenceMode.Default;n._notifyChanged$.next(n)}};var s=w.h("div.SequenceCloseButton",a,[o]);var u=Math.round(e/this._stepperDefaultWidth*this._defaultHeight+10);var c={style:{top:u+"px"}};return w.h("div.SequenceTimeline",c,[i,s])};e.prototype._getStepClassName=function(e,t,r){var n=e===M.EdgeDirection.Next?"SequenceStepNext":"SequenceStepPrev";if(t==null){n+="Disabled"}else{if(r===t){n+="Highlight"}}return n};e.prototype._setChangingPosition=function(e){this._changingPosition=e;this._notifyChangingPositionChanged$.next(e)};return e}();r.SequenceDOMRenderer=o;r.default=o},{"../../Component":275,"../../Edge":276,"../../Error":277,rxjs:27,"rxjs/operators":225,"virtual-dom":231}],335:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n;(function(e){e[e["Default"]=0]="Default";e[e["Playback"]=1]="Playback";e[e["Timeline"]=2]="Timeline"})(n=r.SequenceMode||(r.SequenceMode={}));r.default=n},{}],336:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("path");var i=function(){function e(){}e.equirectangular={fragment:"#ifdef GL_FRAGMENT_PRECISION_HIGH\nprecision highp float;\n#else\nprecision mediump 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}"};e.equirectangularCurtain={fragment:"#ifdef GL_FRAGMENT_PRECISION_HIGH\nprecision highp float;\n#else\nprecision mediump float;\n#endif\n\nuniform sampler2D projectorTex;\nuniform float curtain;\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\n    bool inverted = curtain < 0.5;\n\n    float curtainMin = inverted ? curtain + 0.5 : curtain - 0.5;\n    float curtainMax = curtain;\n\n    bool insideCurtain = inverted ?\n        x > curtainMin || x < curtainMax :\n        x > curtainMin && x < curtainMax;\n\n    vec4 baseColor;\n    if (insideCurtain) {\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}"};e.perspective={fragment:"#ifdef GL_FRAGMENT_PRECISION_HIGH\nprecision highp float;\n#else\nprecision mediump float;\n#endif\n\nuniform sampler2D projectorTex;\nuniform float opacity;\nuniform float focal;\nuniform float k1;\nuniform float k2;\nuniform float scale_x;\nuniform float scale_y;\nuniform float radial_peak;\n\nvarying vec4 vRstq;\n\nvoid main()\n{\n    float x = vRstq.x / vRstq.z;\n    float y = vRstq.y / vRstq.z;\n    float r2 = x * x + y * y;\n\n    if (radial_peak > 0. && r2 > radial_peak * sqrt(r2)) {\n        r2 = radial_peak * radial_peak;\n    }\n\n    float d = 1.0 + k1 * r2 + k2 * r2 * r2;\n    float u = scale_x * focal * d * x + 0.5;\n    float v = - scale_y * focal * d * y + 0.5;\n\n    vec4 baseColor;\n    if (u >= 0. && u <= 1. && v >= 0. && v <= 1.) {\n        baseColor = texture2D(projectorTex, vec2(u, v));\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}"};e.perspectiveCurtain={fragment:"#ifdef GL_FRAGMENT_PRECISION_HIGH\nprecision highp float;\n#else\nprecision mediump float;\n#endif\n\nuniform sampler2D projectorTex;\nuniform float opacity;\nuniform float focal;\nuniform float k1;\nuniform float k2;\nuniform float scale_x;\nuniform float scale_y;\nuniform float radial_peak;\nuniform float curtain;\n\nvarying vec4 vRstq;\n\nvoid main()\n{\n    float x = vRstq.x / vRstq.z;\n    float y = vRstq.y / vRstq.z;\n    float r2 = x * x + y * y;\n\n    if (radial_peak > 0. && r2 > radial_peak * sqrt(r2)) {\n        r2 = radial_peak * radial_peak;\n    }\n\n    float d = 1.0 + k1 * r2 + k2 * r2 * r2;\n    float u = scale_x * focal * d * x + 0.5;\n    float v = - scale_y * focal * d * y + 0.5;\n\n    vec4 baseColor;\n    if ((u < curtain || curtain >= 1.0) && u >= 0. && u <= 1. && v >= 0. && v <= 1.) {\n        baseColor = texture2D(projectorTex, vec2(u, v));\n        baseColor.a = opacity;\n    } else {\n        baseColor = vec4(0.0, 0.0, 0.0, 0.0);\n    }\n\n    gl_FragColor = baseColor;\n}\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}"};e.perspectiveDistorted={fragment:"#ifdef GL_FRAGMENT_PRECISION_HIGH\nprecision highp float;\n#else\nprecision mediump float;\n#endif\n\nuniform sampler2D projectorTex;\nuniform float opacity;\n\nvarying vec4 vRstq;\n\nvoid main()\n{\n    float u = vRstq.x / vRstq.w;\n    float v = vRstq.y / vRstq.w;\n\n    vec4 baseColor;\n    if (u >= 0. && u <= 1. && v >= 0. && v <= 1.) {\n        baseColor = texture2D(projectorTex, vec2(u, v));\n        baseColor.a = opacity;\n    } else {\n        baseColor = vec4(0.0, 0.0, 0.0, 0.0);\n    }\n\n    gl_FragColor = baseColor;\n}\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"};e.perspectiveDistortedCurtain={fragment:"#ifdef GL_FRAGMENT_PRECISION_HIGH\nprecision highp float;\n#else\nprecision mediump float;\n#endif\n\nuniform sampler2D projectorTex;\nuniform float opacity;\nuniform float curtain;\n\nvarying vec4 vRstq;\n\nvoid main()\n{\n    float u = vRstq.x / vRstq.w;\n    float v = vRstq.y / vRstq.w;\n\n    vec4 baseColor;\n    if ((u < curtain || curtain >= 1.0) && u >= 0. && u <= 1. && v >= 0. && v <= 1.) {\n        baseColor = texture2D(projectorTex, vec2(u, v));\n        baseColor.a = opacity;\n    } else {\n        baseColor = vec4(0.0, 0.0, 0.0, 0.0);\n    }\n\n    gl_FragColor = baseColor;\n}\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"};return e}();r.Shaders=i},{path:23}],337:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var d=e("rxjs");var v=e("rxjs/operators");var m=e("../../Component");var a=e("../../Geo");var g=e("../../State");var y=e("../../Render");var _=e("../../Tiles");var b=e("../../Utils");var i=function(o){n(e,o);function e(e,t,r,n){var i=o.call(this,e,t,r)||this;i._viewportCoords=!!n?n:new a.ViewportCoords;i._domRenderer=new m.SliderDOMRenderer(t);i._imageTileLoader=new _.ImageTileLoader(b.Urls.tileScheme,b.Urls.tileDomain,b.Urls.origin);i._roiCalculator=new _.RegionOfInterestCalculator;i._spatial=new a.Spatial;i._glRendererOperation$=new d.Subject;i._glRendererCreator$=new d.Subject;i._glRendererDisposer$=new d.Subject;i._glRenderer$=i._glRendererOperation$.pipe(v.scan(function(e,t){return t(e)},null),v.filter(function(e){return e!=null}),v.distinctUntilChanged(undefined,function(e){return e.frameId}));i._glRendererCreator$.pipe(v.map(function(){return function(e){if(e!=null){throw new Error("Multiple slider states can not be created at the same time")}return new m.SliderGLRenderer}})).subscribe(i._glRendererOperation$);i._glRendererDisposer$.pipe(v.map(function(){return function(e){e.dispose();return null}})).subscribe(i._glRendererOperation$);return i}e.prototype.setInitialPosition=function(e){this.configure({initialPosition:e})};e.prototype.setKeys=function(e){this.configure({keys:e})};e.prototype.setSliderMode=function(e){this.configure({mode:e})};e.prototype.setSliderVisible=function(e){this.configure({sliderVisible:e})};e.prototype._activate=function(){var $=this;this._modeSubcription=this._domRenderer.mode$.subscribe(function(e){$.setSliderMode(e)});this._glRenderSubscription=this._glRenderer$.pipe(v.map(function(e){var t={name:$._name,render:{frameId:e.frameId,needsRender:e.needsRender,render:e.render.bind(e),stage:y.GLRenderStage.Background}};return t})).subscribe(this._container.glRenderer.render$);var e=d.concat(this.configuration$.pipe(v.map(function(e){return e.initialPosition!=null?e.initialPosition:1}),v.first()),this._domRenderer.position$);var t=this.configuration$.pipe(v.map(function(e){return e.mode}),v.distinctUntilChanged());var r=this._navigator.stateService.currentState$.pipe(v.map(function(e){return e.state.motionless}),v.distinctUntilChanged());var n=this._navigator.stateService.currentState$.pipe(v.map(function(e){return e.state.currentNode.fullPano}),v.distinctUntilChanged());var i=d.combineLatest(this._configuration$.pipe(v.map(function(e){return e.sliderVisible})),this._navigator.stateService.currentState$.pipe(v.map(function(e){return!(e.state.currentNode==null||e.state.previousNode==null||e.state.currentNode.pano&&!e.state.currentNode.fullPano||e.state.previousNode.pano&&!e.state.previousNode.fullPano||e.state.currentNode.fullPano&&!e.state.previousNode.fullPano)}),v.distinctUntilChanged())).pipe(v.map(function(e){var t=e[0],r=e[1];return t&&r}),v.distinctUntilChanged());this._waitSubscription=d.combineLatest(t,r,n,i).pipe(v.withLatestFrom(this._navigator.stateService.state$)).subscribe(function(e){var t=e[0],r=t[0],n=t[1],i=t[2],o=t[3],a=e[1];var s=o&&(n||r===m.SliderMode.Stationary||i);if(s&&a!==g.State.WaitingInteractively){$._navigator.stateService.waitInteractively()}else if(!s&&a!==g.State.Waiting){$._navigator.stateService.wait()}});this._moveSubscription=d.combineLatest(e,t,r,n,i).subscribe(function(e){var t=e[0],r=e[1],n=e[2],i=e[3],o=e[4];if(n||r===m.SliderMode.Stationary||i){$._navigator.stateService.moveTo(1)}else{$._navigator.stateService.moveTo(t)}});this._domRenderSubscription=d.combineLatest(e,t,r,n,i,this._container.renderService.size$).pipe(v.map(function(e){var t=e[0],r=e[1],n=e[2],i=e[3],o=e[4],a=e[5];return{name:$._name,vnode:$._domRenderer.render(t,r,n,i,o)}})).subscribe(this._container.domRenderer.render$);this._glRendererCreator$.next(null);this._updateCurtainSubscription=d.combineLatest(e,n,i,this._container.renderService.renderCamera$,this._navigator.stateService.currentTransform$).pipe(v.map(function(e){var t=e[0],r=e[1],n=e[2],i=e[3],o=e[4];if(!r){return n?t:1}var a=$._viewportCoords.viewportToBasic(-1.15,0,o,i.perspective);var s=$._viewportCoords.viewportToBasic(1.15,0,o,i.perspective);var u=s[0]<a[0]?s[0]+1:s[0];var c=a[0]+t*(u-a[0]);return c>1?c-1:c}),v.map(function(t){return function(e){e.updateCurtain(t);return e}})).subscribe(this._glRendererOperation$);this._stateSubscription=d.combineLatest(this._navigator.stateService.currentState$,t).pipe(v.map(function(e){var t=e[0],r=e[1];return function(e){e.update(t,r);return e}})).subscribe(this._glRendererOperation$);this._setKeysSubscription=this._configuration$.pipe(v.filter(function(e){return e.keys!=null}),v.switchMap(function(e){return d.zip(d.zip($._catchCacheNode$(e.keys.background),$._catchCacheNode$(e.keys.foreground)).pipe(v.map(function(e){return{background:e[0],foreground:e[1]}})),$._navigator.stateService.currentState$.pipe(v.first())).pipe(v.map(function(e){return{nodes:e[0],state:e[1].state}}))})).subscribe(function(e){if(e.state.currentNode!=null&&e.state.previousNode!=null&&e.state.currentNode.key===e.nodes.foreground.key&&e.state.previousNode.key===e.nodes.background.key){return}if(e.state.currentNode.key===e.nodes.background.key){$._navigator.stateService.setNodes([e.nodes.foreground]);return}if(e.state.currentNode.key===e.nodes.foreground.key&&e.state.trajectory.length===1){$._navigator.stateService.prependNodes([e.nodes.background]);return}$._navigator.stateService.setNodes([e.nodes.background]);$._navigator.stateService.setNodes([e.nodes.foreground])},function(e){console.error(e)});var o=this._navigator.stateService.currentState$.pipe(v.map(function(e){return e.state.previousNode}),v.filter(function(e){return e!=null}),v.distinctUntilChanged(undefined,function(e){return e.key}));var a=this._navigator.stateService.currentState$.pipe(v.distinctUntilChanged(undefined,function(e){return e.state.currentNode.key}),v.withLatestFrom(this._container.glRenderer.webGLRenderer$,this._container.renderService.size$),v.map(function(e){var t=e[0],r=e[1],n=e[2];var i=t.state;var o=Math.max(n.width,n.height);var a=i.currentNode;var s=i.currentTransform;var u=o>2048?2048:o>1024?1024:512;return new _.TextureProvider(a.key,s.basicWidth,s.basicHeight,u,a.image,$._imageTileLoader,new _.ImageTileStore,r)}),v.publishReplay(1),v.refCount());this._textureProviderSubscription=a.subscribe(function(){});this._setTextureProviderSubscription=a.pipe(v.map(function(t){return function(e){e.setTextureProvider(t.key,t);return e}})).subscribe(this._glRendererOperation$);this._setTileSizeSubscription=this._container.renderService.size$.pipe(v.switchMap(function(e){return d.combineLatest(a,d.of(e)).pipe(v.first())})).subscribe(function(e){var t=e[0],r=e[1];var n=Math.max(r.width,r.height);var i=n>2048?2048:n>1024?1024:512;t.setTileSize(i)});this._abortTextureProviderSubscription=a.pipe(v.pairwise()).subscribe(function(e){var t=e[0];t.abort()});var s=d.combineLatest(this._container.renderService.renderCameraFrame$,this._container.renderService.size$.pipe(v.debounceTime(250))).pipe(v.map(function(e){var t=e[0],r=e[1];return[t.camera.position.clone(),t.camera.lookat.clone(),t.zoom.valueOf(),r.height.valueOf(),r.width.valueOf()]}),v.pairwise(),v.skipWhile(function(e){return e[1][2]-e[0][2]<0||e[1][2]===0}),v.map(function(e){var t=e[0][0].equals(e[1][0]);var r=e[0][1].equals(e[1][1]);var n=e[0][2]===e[1][2];var i=e[0][3]===e[1][3];var o=e[0][4]===e[1][4];return t&&r&&n&&i&&o}),v.distinctUntilChanged(),v.filter(function(e){return e}),v.switchMap(function(e){return $._container.renderService.renderCameraFrame$.pipe(v.first())}),v.withLatestFrom(this._container.renderService.size$,this._navigator.stateService.currentTransform$));this._setRegionOfInterestSubscription=a.pipe(v.switchMap(function(i){return s.pipe(v.map(function(e){var t=e[0],r=e[1],n=e[2];return[$._roiCalculator.computeRegionOfInterest(t,r,n),i]}))}),v.filter(function(e){return!e[1].disposed})).subscribe(function(e){var t=e[0];var r=e[1];r.setRegionOfInterest(t)});var u=a.pipe(v.switchMap(function(e){return e.hasTexture$}),v.startWith(false),v.publishReplay(1),v.refCount());this._hasTextureSubscription=u.subscribe(function(){});var c=this._navigator.stateService.currentState$.pipe(v.filter(function(e){return e.state.nodesAhead===0}),v.map(function(e){return e.state.currentNode}),v.distinctUntilChanged(undefined,function(e){return e.key}),v.debounceTime(1e3),v.withLatestFrom(u),v.filter(function(e){return!e[1]}),v.map(function(e){return e[0]}),v.filter(function(e){return e.pano?b.Settings.maxImageSize>b.Settings.basePanoramaSize:b.Settings.maxImageSize>b.Settings.baseImageSize}),v.switchMap(function(r){var e=r.pano?b.Settings.basePanoramaSize:b.Settings.baseImageSize;if(Math.max(r.image.width,r.image.height)>e){return d.empty()}var t=r.cacheImage$(b.Settings.maxImageSize).pipe(v.map(function(e){return[e.image,e]}));return t.pipe(v.takeUntil(u.pipe(v.filter(function(e){return e}))),v.catchError(function(e,t){console.error("Failed to fetch high res image ("+r.key+")",e);return d.empty()}))})).pipe(v.publish(),v.refCount());this._updateBackgroundSubscription=c.pipe(v.withLatestFrom(a)).subscribe(function(e){if(e[0][1].key!==e[1].key||e[1].disposed){return}e[1].updateBackground(e[0][0])});this._updateTextureImageSubscription=c.pipe(v.map(function(t){return function(e){e.updateTextureImage(t[0],t[1]);return e}})).subscribe(this._glRendererOperation$);var h=this._navigator.stateService.currentState$.pipe(v.filter(function(e){return!!e.state.previousNode}),v.distinctUntilChanged(undefined,function(e){return e.state.previousNode.key}),v.withLatestFrom(this._container.glRenderer.webGLRenderer$,this._container.renderService.size$),v.map(function(e){var t=e[0],r=e[1],n=e[2];var i=t.state;var o=Math.max(n.width,n.height);var a=i.previousNode;var s=i.previousTransform;var u=o>2048?2048:o>1024?1024:512;return new _.TextureProvider(a.key,s.basicWidth,s.basicHeight,u,a.image,$._imageTileLoader,new _.ImageTileStore,r)}),v.publishReplay(1),v.refCount());this._textureProviderSubscriptionPrev=h.subscribe(function(){});this._setTextureProviderSubscriptionPrev=h.pipe(v.map(function(t){return function(e){e.setTextureProviderPrev(t.key,t);return e}})).subscribe(this._glRendererOperation$);this._setTileSizeSubscriptionPrev=this._container.renderService.size$.pipe(v.switchMap(function(e){return d.combineLatest(h,d.of(e)).pipe(v.first())})).subscribe(function(e){var t=e[0],r=e[1];var n=Math.max(r.width,r.height);var i=n>2048?2048:n>1024?1024:512;t.setTileSize(i)});this._abortTextureProviderSubscriptionPrev=h.pipe(v.pairwise()).subscribe(function(e){var t=e[0];t.abort()});var l=d.combineLatest(this._container.renderService.renderCameraFrame$,this._container.renderService.size$.pipe(v.debounceTime(250))).pipe(v.map(function(e){var t=e[0],r=e[1];return[t.camera.position.clone(),t.camera.lookat.clone(),t.zoom.valueOf(),r.height.valueOf(),r.width.valueOf()]}),v.pairwise(),v.skipWhile(function(e){return e[1][2]-e[0][2]<0||e[1][2]===0}),v.map(function(e){var t=e[0][0].equals(e[1][0]);var r=e[0][1].equals(e[1][1]);var n=e[0][2]===e[1][2];var i=e[0][3]===e[1][3];var o=e[0][4]===e[1][4];return t&&r&&n&&i&&o}),v.distinctUntilChanged(),v.filter(function(e){return e}),v.switchMap(function(e){return $._container.renderService.renderCameraFrame$.pipe(v.first())}),v.withLatestFrom(this._container.renderService.size$,this._navigator.stateService.currentTransform$));this._setRegionOfInterestSubscriptionPrev=h.pipe(v.switchMap(function(i){return l.pipe(v.map(function(e){var t=e[0],r=e[1],n=e[2];return[$._roiCalculator.computeRegionOfInterest(t,r,n),i]}))}),v.filter(function(e){return!e[1].disposed}),v.withLatestFrom(this._navigator.stateService.currentState$)).subscribe(function(e){var t=e[0],r=t[0],n=t[1],i=e[1];var o=null;if(i.state.previousNode.fullPano){if(i.state.currentNode.fullPano){var a=$._spatial.viewingDirection(i.state.currentNode.rotation);var s=$._spatial.viewingDirection(i.state.previousNode.rotation);var u=$._spatial.angleBetweenVector2(a.x,a.y,s.x,s.y);var c=u/(2*Math.PI);var h={maxX:$._spatial.wrap(r.bbox.maxX+c,0,1),maxY:r.bbox.maxY,minX:$._spatial.wrap(r.bbox.minX+c,0,1),minY:r.bbox.minY};o={bbox:h,pixelHeight:r.pixelHeight,pixelWidth:r.pixelWidth}}else{var a=$._spatial.viewingDirection(i.state.currentNode.rotation);var s=$._spatial.viewingDirection(i.state.previousNode.rotation);var u=$._spatial.angleBetweenVector2(a.x,a.y,s.x,s.y);var l=u/(2*Math.PI);var p=$._spatial.angleToPlane(a.toArray(),[0,0,1]);var f=$._spatial.angleToPlane(s.toArray(),[0,0,1]);var d=(f-p)/(2*Math.PI);var v=i.state.currentTransform;var m=Math.max(v.basicWidth,v.basicHeight);var g=m>0?2*Math.atan(.5*v.basicWidth/(m*v.focal)):Math.PI/3;var y=m>0?2*Math.atan(.5*v.basicHeight/(m*v.focal)):Math.PI/3;var _=g/(2*Math.PI);var b=y/Math.PI;var x=(r.bbox.maxX-r.bbox.minX)*_;var w=(r.bbox.maxY-r.bbox.minY)*b;var S=r.pixelWidth*_;var M=r.pixelHeight*b;var E=(r.bbox.minX+r.bbox.maxX)/2-.5;var C=(r.bbox.minY+r.bbox.maxY)/2-.5;var T=.5+l+_*E-x/2;var O=.5+l+_*E+x/2;var P=.5+d+b*C-w/2;var A=.5+d+b*C+w/2;var h={maxX:$._spatial.wrap(O,0,1),maxY:A,minX:$._spatial.wrap(T,0,1),minY:P};o={bbox:h,pixelHeight:M,pixelWidth:S}}}else{var j=i.state.currentTransform.basicAspect;var R=i.state.previousTransform.basicAspect;var L=$._getBasicCorners(j,R),I=L[0],N=I[0],D=I[1],k=L[1],B=k[0],F=k[1];var x=B-N;var w=F-D;var S=r.pixelWidth/x;var M=r.pixelHeight/w;var T=(x-1)/(2*x)+r.bbox.minX/x;var O=(x-1)/(2*x)+r.bbox.maxX/x;var P=(w-1)/(2*w)+r.bbox.minY/w;var A=(w-1)/(2*w)+r.bbox.maxY/w;var h={maxX:O,maxY:A,minX:T,minY:P};$._clipBoundingBox(h);o={bbox:h,pixelHeight:M,pixelWidth:S}}n.setRegionOfInterest(o)});var p=h.pipe(v.switchMap(function(e){return e.hasTexture$}),v.startWith(false),v.publishReplay(1),v.refCount());this._hasTextureSubscriptionPrev=p.subscribe(function(){});var f=this._navigator.stateService.currentState$.pipe(v.filter(function(e){return e.state.nodesAhead===0&&!!e.state.previousNode}),v.map(function(e){return e.state.previousNode}),v.distinctUntilChanged(undefined,function(e){return e.key}),v.debounceTime(1e3),v.withLatestFrom(p),v.filter(function(e){return!e[1]}),v.map(function(e){return e[0]}),v.filter(function(e){return e.pano?b.Settings.maxImageSize>b.Settings.basePanoramaSize:b.Settings.maxImageSize>b.Settings.baseImageSize}),v.switchMap(function(r){var e=r.pano?b.Settings.basePanoramaSize:b.Settings.baseImageSize;if(Math.max(r.image.width,r.image.height)>e){return d.empty()}var t=r.cacheImage$(b.Settings.maxImageSize).pipe(v.map(function(e){return[e.image,e]}));return t.pipe(v.takeUntil(p.pipe(v.filter(function(e){return e}))),v.catchError(function(e,t){console.error("Failed to fetch high res image ("+r.key+")",e);return d.empty()}))})).pipe(v.publish(),v.refCount());this._updateBackgroundSubscriptionPrev=f.pipe(v.withLatestFrom(h)).subscribe(function(e){if(e[0][1].key!==e[1].key||e[1].disposed){return}e[1].updateBackground(e[0][0])});this._updateTextureImageSubscriptionPrev=f.pipe(v.map(function(t){return function(e){e.updateTextureImage(t[0],t[1]);return e}})).subscribe(this._glRendererOperation$)};e.prototype._deactivate=function(){var t=this;this._waitSubscription.unsubscribe();this._navigator.stateService.state$.pipe(v.first()).subscribe(function(e){if(e!==g.State.Traversing){t._navigator.stateService.traverse()}});this._glRendererDisposer$.next(null);this._domRenderer.deactivate();this._modeSubcription.unsubscribe();this._setKeysSubscription.unsubscribe();this._stateSubscription.unsubscribe();this._glRenderSubscription.unsubscribe();this._domRenderSubscription.unsubscribe();this._moveSubscription.unsubscribe();this._updateCurtainSubscription.unsubscribe();this._textureProviderSubscription.unsubscribe();this._setTextureProviderSubscription.unsubscribe();this._setTileSizeSubscription.unsubscribe();this._abortTextureProviderSubscription.unsubscribe();this._setRegionOfInterestSubscription.unsubscribe();this._hasTextureSubscription.unsubscribe();this._updateBackgroundSubscription.unsubscribe();this._updateTextureImageSubscription.unsubscribe();this._textureProviderSubscriptionPrev.unsubscribe();this._setTextureProviderSubscriptionPrev.unsubscribe();this._setTileSizeSubscriptionPrev.unsubscribe();this._abortTextureProviderSubscriptionPrev.unsubscribe();this._setRegionOfInterestSubscriptionPrev.unsubscribe();this._hasTextureSubscriptionPrev.unsubscribe();this._updateBackgroundSubscriptionPrev.unsubscribe();this._updateTextureImageSubscriptionPrev.unsubscribe();this.configure({keys:null})};e.prototype._getDefaultConfiguration=function(){return{initialPosition:1,mode:m.SliderMode.Motion,sliderVisible:true}};e.prototype._catchCacheNode$=function(r){return this._navigator.graphService.cacheNode$(r).pipe(v.catchError(function(e,t){console.error("Failed to cache slider node ("+r+")",e);return d.empty()}))};e.prototype._getBasicCorners=function(e,t){var r;var n;if(e>t){r=.5;n=.5*e/t}else{r=.5*t/e;n=.5}return[[.5-r,.5-n],[.5+r,.5+n]]};e.prototype._clipBoundingBox=function(e){e.minX=Math.max(0,Math.min(1,e.minX));e.maxX=Math.max(0,Math.min(1,e.maxX));e.minY=Math.max(0,Math.min(1,e.minY));e.maxY=Math.max(0,Math.min(1,e.maxY))};e.componentName="slider";return e}(m.Component);r.SliderComponent=i;m.ComponentService.register(i);r.default=i},{"../../Component":275,"../../Geo":278,"../../Render":281,"../../State":282,"../../Tiles":284,"../../Utils":285,rxjs:27,"rxjs/operators":225}],338:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("rxjs");var i=e("rxjs/operators");var h=e("virtual-dom");var o=e("../../Component");var a=function(){function e(e){this._container=e;this._interacting=false;this._notifyModeChanged$=new n.Subject;this._notifyPositionChanged$=new n.Subject;this._stopInteractionSubscription=null}Object.defineProperty(e.prototype,"mode$",{get:function(){return this._notifyModeChanged$},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"position$",{get:function(){return this._notifyPositionChanged$},enumerable:true,configurable:true});e.prototype.activate=function(){var t=this;if(!!this._stopInteractionSubscription){return}this._stopInteractionSubscription=n.merge(this._container.mouseService.documentMouseUp$,this._container.touchService.touchEnd$.pipe(i.filter(function(e){return e.touches.length===0}))).subscribe(function(e){if(t._interacting){t._interacting=false}})};e.prototype.deactivate=function(){if(!this._stopInteractionSubscription){return}this._interacting=false;this._stopInteractionSubscription.unsubscribe();this._stopInteractionSubscription=null};e.prototype.render=function(e,t,r,n,i){var o=[];if(i){o.push(h.h("div.SliderBorder",[]));var a=!(r||n);if(a){o.push(this._createModeButton(t))}o.push(this._createPositionInput(e,a))}var s=this._container.domContainer.getBoundingClientRect();var u=Math.max(215,Math.min(400,s.width-100));return h.h("div.SliderContainer",{style:{width:u+"px"}},o)};e.prototype._createModeButton=function(e){var t=this;var r={onclick:function(){t._notifyModeChanged$.next(e===o.SliderMode.Motion?o.SliderMode.Stationary:o.SliderMode.Motion)}};var n=e===o.SliderMode.Stationary?"SliderModeButtonPressed":"SliderModeButton";return h.h("div."+n,r,[h.h("div.SliderModeIcon",[])])};e.prototype._createPositionInput=function(e,t){var r=this;var n=function(e){r._notifyPositionChanged$.next(Number(e.target.value)/1e3)};var i=function(e){r._interacting=true;e.stopPropagation()};var o=function(e){if(r._interacting){e.stopPropagation()}};var a=function(e){if(e.key==="ArrowDown"||e.key==="ArrowLeft"||e.key==="ArrowRight"||e.key==="ArrowUp"){e.preventDefault()}};var s=this._container.domContainer.getBoundingClientRect();var u=Math.max(215,Math.min(400,s.width-105))-68+(t?0:36);var c=h.h("input.SliderPosition",{max:1e3,min:0,onchange:n,oninput:n,onkeydown:a,onmousedown:i,onmousemove:o,ontouchmove:o,ontouchstart:i,style:{width:u+"px"},type:"range",value:1e3*e},[]);return h.h("div.SliderPositionContainer",[c])};return e}();r.SliderDOMRenderer=a;r.default=a},{"../../Component":275,rxjs:27,"rxjs/operators":225,"virtual-dom":231}],339:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var E=e("../../Component");var C=e("../../Geo");var n=function(){function e(){this._factory=new E.MeshFactory;this._scene=new E.MeshScene;this._spatial=new C.Spatial;this._currentKey=null;this._previousKey=null;this._disabled=false;this._curtain=1;this._frameId=0;this._needsRender=false;this._mode=null;this._currentProviderDisposers={};this._previousProviderDisposers={}}Object.defineProperty(e.prototype,"disabled",{get:function(){return this._disabled},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"frameId",{get:function(){return this._frameId},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"needsRender",{get:function(){return this._needsRender},enumerable:true,configurable:true});e.prototype.setTextureProvider=function(e,t){this._setTextureProvider(e,this._currentKey,t,this._currentProviderDisposers,this._updateTexture.bind(this))};e.prototype.setTextureProviderPrev=function(e,t){this._setTextureProvider(e,this._previousKey,t,this._previousProviderDisposers,this._updateTexturePrev.bind(this))};e.prototype.update=function(e,t){this._updateFrameId(e.id);this._updateImagePlanes(e.state,t)};e.prototype.updateCurtain=function(e){if(this._curtain===e){return}this._curtain=e;this._updateCurtain();this._needsRender=true};e.prototype.updateTexture=function(e,t){var r=t.key===this._currentKey?this._scene.imagePlanes:t.key===this._previousKey?this._scene.imagePlanesOld:[];if(r.length===0){return}this._needsRender=true;for(var n=0,i=r;n<i.length;n++){var o=i[n];var a=o.material;var s=a.uniforms.projectorTex.value;s.image=e;s.needsUpdate=true}};e.prototype.updateTextureImage=function(e,t){if(this._currentKey!==t.key){return}this._needsRender=true;for(var r=0,n=this._scene.imagePlanes;r<n.length;r++){var i=n[r];var o=i.material;var a=o.uniforms.projectorTex.value;a.image=e;a.needsUpdate=true}};e.prototype.render=function(e,t){if(!this.disabled){t.render(this._scene.sceneOld,e)}t.render(this._scene.scene,e);this._needsRender=false};e.prototype.dispose=function(){this._scene.clear();for(var e in this._currentProviderDisposers){if(!this._currentProviderDisposers.hasOwnProperty(e)){continue}this._currentProviderDisposers[e]()}for(var e in this._previousProviderDisposers){if(!this._previousProviderDisposers.hasOwnProperty(e)){continue}this._previousProviderDisposers[e]()}this._currentProviderDisposers={};this._previousProviderDisposers={}};e.prototype._getBasicCorners=function(e,t){var r;var n;if(e>t){r=.5;n=.5*e/t}else{r=.5*t/e;n=.5}return[[.5-r,.5-n],[.5+r,.5+n]]};e.prototype._setDisabled=function(e){this._disabled=e.currentNode==null||e.previousNode==null||e.currentNode.pano&&!e.currentNode.fullPano||e.previousNode.pano&&!e.previousNode.fullPano||e.currentNode.fullPano&&!e.previousNode.fullPano};e.prototype._setTextureProvider=function(e,t,r,n,i){var o=this;if(e!==t){return}var a=r.textureCreated$.subscribe(i);var s=r.textureUpdated$.subscribe(function(e){o._needsRender=true});var u=function(){a.unsubscribe();s.unsubscribe();r.dispose()};if(e in n){var c=n[e];c();delete n[e]}n[e]=u};e.prototype._updateCurtain=function(){for(var e=0,t=this._scene.imagePlanes;e<t.length;e++){var r=t[e];var n=r.material;if(!!n.uniforms.curtain){n.uniforms.curtain.value=this._curtain}}};e.prototype._updateFrameId=function(e){this._frameId=e};e.prototype._updateImagePlanes=function(e,t){var r=e.currentNode!=null&&this._currentKey!==e.currentNode.key;var n=e.previousNode!=null&&this._previousKey!==e.previousNode.key;var i=this._mode!==t;if(!(r||n||i)){return}this._setDisabled(e);this._needsRender=true;this._mode=t;var o=e.motionless||t===E.SliderMode.Stationary||e.currentNode.pano;if(this.disabled||n){if(this._previousKey in this._previousProviderDisposers){this._previousProviderDisposers[this._previousKey]();delete this._previousProviderDisposers[this._previousKey]}}if(this.disabled){this._scene.setImagePlanesOld([])}else{if(n||i){var a=e.previousNode;this._previousKey=a.key;var s=e.currentTransform.rt.elements;var u=[s[12],s[13],s[14]];var c=e.currentTransform.basicAspect;var h=e.previousTransform.basicAspect;var l=c>h?[1,h/c]:[c/h,1];var p=e.currentNode.rotation;var f=e.currentNode.width;var d=e.currentNode.height;if(a.fullPano){p=e.previousNode.rotation;u=this._spatial.rotate(this._spatial.opticalCenter(e.currentNode.rotation,u).toArray(),p).multiplyScalar(-1).toArray();f=e.previousNode.width;d=e.previousNode.height}var v=new C.Transform(e.currentNode.orientation,f,d,e.currentNode.focal,e.currentNode.scale,a.gpano,p,u,a.image,l);var m=undefined;if(a.fullPano){m=this._factory.createMesh(a,o||e.currentNode.fullPano?v:e.previousTransform)}else{if(o){var g=this._getBasicCorners(c,h),y=g[0],_=y[0],b=y[1],x=g[1],w=x[0],S=x[1];m=this._factory.createFlatMesh(e.previousNode,v,_,w,b,S)}else{m=this._factory.createMesh(e.previousNode,e.previousTransform)}}this._scene.setImagePlanesOld([m])}}if(r||i){if(this._currentKey in this._currentProviderDisposers){this._currentProviderDisposers[this._currentKey]();delete this._currentProviderDisposers[this._currentKey]}this._currentKey=e.currentNode.key;var M=[];if(e.currentNode.fullPano){M.push(this._factory.createCurtainMesh(e.currentNode,e.currentTransform))}else if(e.currentNode.pano&&!e.currentNode.fullPano){M.push(this._factory.createMesh(e.currentNode,e.currentTransform))}else{if(o){M.push(this._factory.createDistortedCurtainMesh(e.currentNode,e.currentTransform))}else{M.push(this._factory.createCurtainMesh(e.currentNode,e.currentTransform))}}this._scene.setImagePlanes(M);this._updateCurtain()}};e.prototype._updateTexture=function(e){this._needsRender=true;for(var t=0,r=this._scene.imagePlanes;t<r.length;t++){var n=r[t];var i=n.material;var o=i.uniforms.projectorTex.value;i.uniforms.projectorTex.value=null;o.dispose();i.uniforms.projectorTex.value=e}};e.prototype._updateTexturePrev=function(e){this._needsRender=true;for(var t=0,r=this._scene.imagePlanesOld;t<r.length;t++){var n=r[t];var i=n.material;var o=i.uniforms.projectorTex.value;i.uniforms.projectorTex.value=null;o.dispose();i.uniforms.projectorTex.value=e}};return e}();r.SliderGLRenderer=n;r.default=n},{"../../Component":275,"../../Geo":278}],340:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var o=e("latlon-geohash");var s=e("rxjs");var u=e("rxjs/operators");var c=e("../../Error");var i=e("../../Utils");var n=function(){function e(e){this._graphService=e;this._tiles={};this._cacheRequests={};this._reconstructions={};this._cachingReconstructions$={};this._cachingTiles$={}}e.prototype.cacheReconstructions$=function(r){var n=this;if(!this.hasTile(r)){throw new Error("Cannot cache reconstructions of a non-existing tile.")}if(this.hasReconstructions(r)){throw new Error("Cannot cache reconstructions that already exists.")}if(this.isCachingReconstructions(r)){return this._cachingReconstructions$[r]}var e=[];if(r in this._reconstructions){var t=this.getReconstructions(r).map(function(e){return e.data.key});for(var i=0,o=this.getTile(r);i<o.length;i++){var a=o[i];if(t.indexOf(a.key)===-1){e.push(a)}}}else{e.push.apply(e,this.getTile(r));this._reconstructions[r]=[]}this._cacheRequests[r]=[];this._cachingReconstructions$[r]=s.from(e).pipe(u.mergeMap(function(t){return!n._cacheRequests[r]?s.empty():s.zip(s.of(t),n._getAtomicReconstruction(t.key,n._cacheRequests[r])).pipe(u.catchError(function(e){if(e instanceof c.AbortMapillaryError){return s.empty()}console.error(e);return s.of([t,null])}))},6),u.map(function(e){var t=e[0],r=e[1];return{data:t,reconstruction:r}}),u.filter(function(){return r in n._reconstructions}),u.tap(function(e){n._reconstructions[r].push(e)}),u.filter(function(e){return!!e.reconstruction}),u.finalize(function(){if(r in n._cachingReconstructions$){delete n._cachingReconstructions$[r]}if(r in n._cacheRequests){delete n._cacheRequests[r]}}),u.publish(),u.refCount());return this._cachingReconstructions$[r]};e.prototype.cacheTile$=function(r){var n=this;if(r.length!==8){throw new Error("Hash needs to be level 8.")}if(this.hasTile(r)){throw new Error("Cannot cache tile that already exists.")}if(this.hasTile(r)){return this._cachingTiles$[r]}var e=o.bounds(r);var t={lat:e.sw.lat,lon:e.sw.lon};var i={lat:e.ne.lat,lon:e.ne.lon};this._tiles[r]=[];this._cachingTiles$[r]=this._graphService.cacheBoundingBox$(t,i).pipe(u.catchError(function(e){console.error(e);delete n._tiles[r];return s.empty()}),u.map(function(e){return e.map(function(e){return n._createNodeData(e)})}),u.filter(function(){return r in n._tiles}),u.tap(function(e){var t;(t=n._tiles[r]).push.apply(t,e);delete n._cachingTiles$[r]}),u.finalize(function(){if(r in n._cachingTiles$){delete n._cachingTiles$[r]}}),u.publish(),u.refCount());return this._cachingTiles$[r]};e.prototype.isCachingReconstructions=function(e){return e in this._cachingReconstructions$};e.prototype.isCachingTile=function(e){return e in this._cachingTiles$};e.prototype.hasReconstructions=function(e){return!(e in this._cachingReconstructions$)&&e in this._reconstructions&&this._reconstructions[e].length===this._tiles[e].length};e.prototype.hasTile=function(e){return!(e in this._cachingTiles$)&&e in this._tiles};e.prototype.getReconstructions=function(e){return e in this._reconstructions?this._reconstructions[e].filter(function(e){return!!e.reconstruction}):[]};e.prototype.getTile=function(e){return e in this._tiles?this._tiles[e]:[]};e.prototype.uncache=function(e){for(var t=0,r=Object.keys(this._cacheRequests);t<r.length;t++){var n=r[t];if(!!e&&e.indexOf(n)!==-1){continue}for(var i=0,o=this._cacheRequests[n];i<o.length;i++){var a=o[i];a.abort()}delete this._cacheRequests[n]}for(var s=0,u=Object.keys(this._reconstructions);s<u.length;s++){var n=u[s];if(!!e&&e.indexOf(n)!==-1){continue}delete this._reconstructions[n]}for(var c=0,h=Object.keys(this._tiles);c<h.length;c++){var n=h[c];if(!!e&&e.indexOf(n)!==-1){continue}delete this._tiles[n]}};e.prototype._createNodeData=function(e){return{alt:e.alt,focal:e.focal,gpano:e.gpano,height:e.height,k1:e.ck1,k2:e.ck2,key:e.key,lat:e.latLon.lat,lon:e.latLon.lon,mergeCC:e.mergeCC,orientation:e.orientation,originalLat:e.originalLatLon.lat,originalLon:e.originalLatLon.lon,rotation:[e.rotation[0],e.rotation[1],e.rotation[2]],scale:e.scale,width:e.width}};e.prototype._getAtomicReconstruction=function(r,n){return s.Observable.create(function(e){var t=new XMLHttpRequest;t.open("GET",i.Urls.atomicReconstruction(r),true);t.responseType="json";t.timeout=15e3;t.onload=function(){if(!t.response){e.error(new Error("Atomic reconstruction does not exist ("+r+")"))}else{e.next(t.response);e.complete()}};t.onerror=function(){e.error(new Error("Failed to get atomic reconstruction ("+r+")"))};t.ontimeout=function(){e.error(new Error("Atomic reconstruction request timed out ("+r+")"))};t.onabort=function(){e.error(new c.AbortMapillaryError("Atomic reconstruction request was aborted ("+r+")"))};n.push(t);t.send(null)})};return e}();r.SpatialDataCache=n;r.default=n},{"../../Error":277,"../../Utils":285,"latlon-geohash":21,rxjs:27,"rxjs/operators":225}],341:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var d=e("latlon-geohash");var h=e("rxjs");var l=e("rxjs/operators");var o=e("../../Component");var a=e("../../Geo");var s=e("../../Render");var u=e("../../viewer/PlayService");var p=e("../../state/State");var i=function(i){n(e,i);function e(e,t,r){var n=i.call(this,e,t,r)||this;n._cache=new o.SpatialDataCache(r.graphService);n._scene=new o.SpatialDataScene(n._getDefaultConfiguration());n._viewportCoords=new a.ViewportCoords;n._geoCoords=new a.GeoCoords;return n}e.prototype._activate=function(){var c=this;this._earthControlsSubscription=this._configuration$.pipe(l.map(function(e){return e.earthControls}),l.distinctUntilChanged(),l.withLatestFrom(this._navigator.stateService.state$)).subscribe(function(e){var t=e[0],r=e[1];if(t&&r!==p.default.Earth){c._navigator.stateService.earth()}else if(!t&&r===p.default.Earth){c._navigator.stateService.traverse()}});var e=this._container.renderService.bearing$.pipe(l.map(function(e){var t="";if(e>292.5||e<=67.5){t+="n"}if(e>112.5&&e<=247.5){t+="s"}if(e>22.5&&e<=157.5){t+="e"}if(e>202.5&&e<=337.5){t+="w"}return t}),l.distinctUntilChanged(),l.publishReplay(1),l.refCount());var t=this._navigator.stateService.reference$.pipe(l.tap(function(){c._scene.uncache()}),l.switchMap(function(){return c._navigator.stateService.currentNode$.pipe(l.map(function(e){return d.encode(e.latLon.lat,e.latLon.lon,8)}),l.distinctUntilChanged())}),l.publishReplay(1),l.refCount());var r=h.combineLatest(this._navigator.playService.playing$,this._navigator.playService.speed$).pipe(l.map(function(e){var t=e[0],r=e[1];return t&&r>u.default.sequenceSpeed}),l.distinctUntilChanged(),l.publishReplay(1),l.refCount());this._addSubscription=h.combineLatest(this._navigator.stateService.state$.pipe(l.map(function(e){return e===p.default.Earth}),l.distinctUntilChanged()),t,r,e).pipe(l.distinctUntilChanged(function(e,t){var r=e[0],n=e[1],i=e[2],o=e[3];var a=t[0],s=t[1],u=t[2],c=t[3];if(r!==a){return false}if(r){return n===s&&i===u}return n===s&&i===u&&o===c}),l.concatMap(function(e){var t=e[0],r=e[1],n=e[2],i=e[3];if(t){return n?h.of([r]):h.of(c._adjacentComponent(r,4))}return n?h.of([r,d.neighbours(r)[i]]):h.of(c._computeTiles(r,i))}),l.switchMap(function(e){return h.from(e).pipe(l.mergeMap(function(e){var t;if(c._cache.hasTile(e)){t=h.of(c._cache.getTile(e))}else if(c._cache.isCachingTile(e)){t=c._cache.cacheTile$(e).pipe(l.last(null,{}),l.switchMap(function(){return h.of(c._cache.getTile(e))}))}else{t=c._cache.cacheTile$(e)}return h.combineLatest(h.of(e),t)},1),l.map(function(e){var t=e[0];return t}))}),l.concatMap(function(e){var t;if(c._cache.hasReconstructions(e)){t=h.from(c._cache.getReconstructions(e))}else if(c._cache.isCachingReconstructions(e)){t=c._cache.cacheReconstructions$(e).pipe(l.last(null,{}),l.switchMap(function(){return h.from(c._cache.getReconstructions(e))}))}else if(c._cache.hasTile(e)){t=c._cache.cacheReconstructions$(e)}else{t=h.empty()}return h.combineLatest(h.of(e),t)}),l.withLatestFrom(this._navigator.stateService.reference$),l.tap(function(e){var t=e[0][0],r=e[1];if(c._scene.hasTile(t)){return}c._scene.addTile(c._computeTileBBox(t,r),t)}),l.filter(function(e){var t=e[0],r=t[0],n=t[1];return!c._scene.hasReconstruction(n.reconstruction.main_shot,r)}),l.map(function(e){var t=e[0],r=t[0],n=t[1],i=e[1];return[n,c._createTransform(n.data,i),c._computeOriginalPosition(n.data,i),r]})).subscribe(function(e){var t=e[0],r=e[1],n=e[2],i=e[3];c._scene.addReconstruction(t.reconstruction,r,n,!!t.data.mergeCC?t.data.mergeCC.toString():"",i)});this._cameraVisibilitySubscription=this._configuration$.pipe(l.map(function(e){return e.camerasVisible}),l.distinctUntilChanged()).subscribe(function(e){c._scene.setCameraVisibility(e)});this._pointVisibilitySubscription=this._configuration$.pipe(l.map(function(e){return e.pointsVisible}),l.distinctUntilChanged()).subscribe(function(e){c._scene.setPointVisibility(e)});this._positionVisibilitySubscription=this._configuration$.pipe(l.map(function(e){return e.positionsVisible}),l.distinctUntilChanged()).subscribe(function(e){c._scene.setPositionVisibility(e)});this._tileVisibilitySubscription=this._configuration$.pipe(l.map(function(e){return e.tilesVisible}),l.distinctUntilChanged()).subscribe(function(e){c._scene.setTileVisibility(e)});this._visualizeConnectedComponentSubscription=this._configuration$.pipe(l.map(function(e){return e.connectedComponents}),l.distinctUntilChanged()).subscribe(function(e){c._scene.setConnectedComponentVisualization(e)});this._uncacheSubscription=t.subscribe(function(e){var t=c._adjacentComponent(e,4);c._scene.uncache(t);c._cache.uncache(t)});this._moveSubscription=this._navigator.playService.playing$.pipe(l.switchMap(function(e){return e?h.empty():c._container.mouseService.dblClick$}),l.withLatestFrom(this._container.renderService.renderCamera$),l.switchMap(function(e){var t=e[0],r=e[1];var n=c._container.element;var i=c._viewportCoords.canvasPosition(t,n),o=i[0],a=i[1];var s=c._viewportCoords.canvasToViewport(o,a,n);var u=c._scene.intersectObjects(s,r.perspective);return!!u?c._navigator.moveToKey$(u).pipe(l.catchError(function(){return h.empty()})):h.empty()})).subscribe();this._renderSubscription=this._navigator.stateService.currentState$.pipe(l.map(function(e){var t=c._scene;return{name:c._name,render:{frameId:e.id,needsRender:t.needsRender,render:t.render.bind(t),stage:s.GLRenderStage.Foreground}}})).subscribe(this._container.glRenderer.render$)};e.prototype._deactivate=function(){var t=this;this._cache.uncache();this._scene.uncache();this._addSubscription.unsubscribe();this._cameraVisibilitySubscription.unsubscribe();this._earthControlsSubscription.unsubscribe();this._moveSubscription.unsubscribe();this._pointVisibilitySubscription.unsubscribe();this._positionVisibilitySubscription.unsubscribe();this._renderSubscription.unsubscribe();this._tileVisibilitySubscription.unsubscribe();this._uncacheSubscription.unsubscribe();this._visualizeConnectedComponentSubscription.unsubscribe();this._navigator.stateService.state$.pipe(l.first()).subscribe(function(e){if(e===p.default.Earth){t._navigator.stateService.traverse()}})};e.prototype._getDefaultConfiguration=function(){return{camerasVisible:false,pointsVisible:true,positionsVisible:false,tilesVisible:false}};e.prototype._adjacentComponent=function(e,t){var r=new Set;r.add(e);this._adjacentComponentRecursive(r,[e],0,t);return this._setToArray(r)};e.prototype._adjacentComponentRecursive=function(e,t,r,n){if(r===n){return}var i=[];for(var o=0,a=t;o<a.length;o++){var s=a[o];var u=d.neighbours(s);for(var c in u){if(!u.hasOwnProperty(c)){continue}i.push(u[c])}}var h=[];for(var l=0,p=i;l<p.length;l++){var f=p[l];if(!e.has(f)){e.add(f);h.push(f)}}this._adjacentComponentRecursive(e,h,r+1,n)};e.prototype._computeOriginalPosition=function(e,t){return this._geoCoords.geodeticToEnu(e.originalLat,e.originalLon,e.alt,t.lat,t.lon,t.alt)};e.prototype._computeTileBBox=function(e,t){var r=d.bounds(e);var n=this._geoCoords.geodeticToEnu(r.sw.lat,r.sw.lon,0,t.lat,t.lon,t.alt);var i=this._geoCoords.geodeticToEnu(r.ne.lat,r.ne.lon,0,t.lat,t.lon,t.alt);return[n,i]};e.prototype._createTransform=function(e,t){var r=a.Geo.computeTranslation({alt:e.alt,lat:e.lat,lon:e.lon},e.rotation,t);var n=new a.Transform(e.orientation,e.width,e.height,e.focal,e.scale,e.gpano,e.rotation,r,undefined,undefined,e.k1,e.k2);return n};e.prototype._computeTiles=function(e,t){var r=new Set;var n=["n","ne","e","se","s","sw","w","nw"];this._computeTilesRecursive(r,e,t,n,0,2);return this._setToArray(r)};e.prototype._computeTilesRecursive=function(e,t,r,n,i,o){e.add(t);if(i===o){return}var a=d.neighbours(t);var s=n.indexOf(r);var u=n.length;var c=[a[n[this._modulo(s-1,u)]],a[r],a[n[this._modulo(s+1,u)]]];for(var h=0,l=c;h<l.length;h++){var p=l[h];this._computeTilesRecursive(e,p,r,n,i+1,o)}};e.prototype._modulo=function(e,t){return(e%t+t)%t};e.prototype._setToArray=function(e){var t=[];e.forEach(function(e){t.push(e)});return t};e.componentName="spatialData";return e}(o.Component);r.SpatialDataComponent=i;o.ComponentService.register(i);r.default=i},{"../../Component":275,"../../Geo":278,"../../Render":281,"../../state/State":412,"../../viewer/PlayService":441,"latlon-geohash":21,rxjs:27,"rxjs/operators":225}],342:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var d=e("three");var n=function(){function e(e,t,r){this._scene=!!t?t:new d.Scene;this._raycaster=!!r?r:new d.Raycaster(undefined,undefined,.8);this._connectedComponentColors={};this._needsRender=false;this._interactiveObjects=[];this._reconstructions={};this._tiles={};this._camerasVisible=e.camerasVisible;this._pointsVisible=e.pointsVisible;this._positionsVisible=e.positionsVisible;this._tilesVisible=e.tilesVisible;this._visualizeConnectedComponents=e.connectedComponents}Object.defineProperty(e.prototype,"needsRender",{get:function(){return this._needsRender},enumerable:true,configurable:true});e.prototype.addReconstruction=function(e,t,r,n,i){if(!(i in this._reconstructions)){this._reconstructions[i]={cameraKeys:{},cameras:new d.Object3D,connectedComponents:{},keys:[],points:new d.Object3D,positions:new d.Object3D};this._reconstructions[i].cameras.visible=this._camerasVisible;this._reconstructions[i].points.visible=this._pointsVisible;this._reconstructions[i].positions.visible=this._positionsVisible;this._scene.add(this._reconstructions[i].cameras,this._reconstructions[i].points,this._reconstructions[i].positions)}if(!(n in this._reconstructions[i].connectedComponents)){this._reconstructions[i].connectedComponents[n]=[]}if(t.hasValidScale){this._reconstructions[i].points.add(this._createPoints(e,t))}var o=this._createCamera(t);this._reconstructions[i].cameras.add(o);for(var a=0,s=o.children;a<s.length;a++){var u=s[a];this._reconstructions[i].cameraKeys[u.uuid]=e.main_shot;this._interactiveObjects.push(u)}this._reconstructions[i].connectedComponents[n].push(o);var c=this._getColor(n,this._visualizeConnectedComponents);this._setCameraColor(c,o);this._reconstructions[i].positions.add(this._createPosition(t,r));this._reconstructions[i].keys.push(e.main_shot);this._needsRender=true};e.prototype.addTile=function(e,t){if(this.hasTile(t)){return}var r=e[0];var n=e[1];var i=new d.Geometry;i.vertices.push((new d.Vector3).fromArray(r),new d.Vector3(r[0],n[1],(r[2]+n[2])/2),(new d.Vector3).fromArray(n),new d.Vector3(n[0],r[1],(r[2]+n[2])/2),(new d.Vector3).fromArray(r));var o=new d.Line(i,new d.LineBasicMaterial);this._tiles[t]=new d.Object3D;this._tiles[t].visible=this._tilesVisible;this._tiles[t].add(o);this._scene.add(this._tiles[t]);this._needsRender=true};e.prototype.uncache=function(e){for(var t=0,r=Object.keys(this._reconstructions);t<r.length;t++){var n=r[t];if(!!e&&e.indexOf(n)!==-1){continue}this._disposeReconstruction(n)}for(var i=0,o=Object.keys(this._tiles);i<o.length;i++){var n=o[i];if(!!e&&e.indexOf(n)!==-1){continue}this._disposeTile(n)}this._needsRender=true};e.prototype.hasReconstruction=function(e,t){return t in this._reconstructions&&this._reconstructions[t].keys.indexOf(e)!==-1};e.prototype.hasTile=function(e){return e in this._tiles};e.prototype.intersectObjects=function(e,t){var r=e[0],n=e[1];if(!this._camerasVisible){return null}this._raycaster.setFromCamera(new d.Vector2(r,n),t);var i=this._raycaster.intersectObjects(this._interactiveObjects);for(var o=0,a=i;o<a.length;o++){var s=a[o];for(var u in this._reconstructions){if(!this._reconstructions.hasOwnProperty(u)){continue}if(s.object.uuid in this._reconstructions[u].cameraKeys){return this._reconstructions[u].cameraKeys[s.object.uuid]}}}return null};e.prototype.setCameraVisibility=function(e){if(e===this._camerasVisible){return}for(var t in this._reconstructions){if(!this._reconstructions.hasOwnProperty(t)){continue}this._reconstructions[t].cameras.visible=e}this._camerasVisible=e;this._needsRender=true};e.prototype.setPointVisibility=function(e){if(e===this._pointsVisible){return}for(var t in this._reconstructions){if(!this._reconstructions.hasOwnProperty(t)){continue}this._reconstructions[t].points.visible=e}this._pointsVisible=e;this._needsRender=true};e.prototype.setPositionVisibility=function(e){if(e===this._positionsVisible){return}for(var t in this._reconstructions){if(!this._reconstructions.hasOwnProperty(t)){continue}this._reconstructions[t].positions.visible=e}this._positionsVisible=e;this._needsRender=true};e.prototype.setTileVisibility=function(e){if(e===this._tilesVisible){return}for(var t in this._tiles){if(!this._tiles.hasOwnProperty(t)){continue}this._tiles[t].visible=e}this._tilesVisible=e;this._needsRender=true};e.prototype.setConnectedComponentVisualization=function(e){if(e===this._visualizeConnectedComponents){return}for(var t in this._reconstructions){if(!this._reconstructions.hasOwnProperty(t)){continue}var r=this._reconstructions[t].connectedComponents;for(var n in r){if(!r.hasOwnProperty(n)){continue}var i=this._getColor(n,e);for(var o=0,a=r[n];o<a.length;o++){var s=a[o];this._setCameraColor(i,s)}}}this._visualizeConnectedComponents=e;this._needsRender=true};e.prototype.render=function(e,t){t.render(this._scene,e);this._needsRender=false};e.prototype._arrayToFloatArray=function(e,t){var r=e.length;var n=new Float32Array(r*t);for(var i=0;i<r;i++){var o=e[i];var a=3*i;n[a+0]=o[0];n[a+1]=o[1];n[a+2]=o[2]}return n};e.prototype._createAxis=function(e){var t=e.unprojectBasic([.5,0],.22);var r=e.unprojectBasic([.5,1],.16);var n=new d.BufferGeometry;n.addAttribute("position",new d.BufferAttribute(this._arrayToFloatArray([t,r],3),3));return new d.Line(n,new d.LineBasicMaterial)};e.prototype._createCamera=function(e){return!!e.gpano?this._createPanoCamera(e):this._createPrespectiveCamera(e)};e.prototype._createDiagonals=function(e,t){var r=e.unprojectBasic([0,0],0,true);var n=e.unprojectBasic([0,0],t,true);var i=e.unprojectBasic([1,0],t,true);var o=e.unprojectBasic([1,1],t,true);var a=e.unprojectBasic([0,1],t,true);var s=[r,n,r,i,r,o,r,a];var u=new d.BufferGeometry;u.addAttribute("position",new d.BufferAttribute(this._arrayToFloatArray(s,3),3));return new d.LineSegments(u,new d.LineBasicMaterial)};e.prototype._createFrame=function(t,r){var e=[];e.push.apply(e,this._subsample([0,1],[0,0],20));e.push.apply(e,this._subsample([0,0],[1,0],20));e.push.apply(e,this._subsample([1,0],[1,1],20));var n=e.map(function(e){return t.unprojectBasic(e,r,true)});var i=new d.BufferGeometry;i.addAttribute("position",new d.BufferAttribute(this._arrayToFloatArray(n,3),3));return new d.Line(i,new d.LineBasicMaterial)};e.prototype._createLatitude=function(e,t,r){var n=new Float32Array((t+1)*3);for(var i=0;i<=t;i++){var o=r.unprojectBasic([i/t,e],.16);var a=3*i;n[a+0]=o[0];n[a+1]=o[1];n[a+2]=o[2]}var s=new d.BufferGeometry;s.addAttribute("position",new d.BufferAttribute(n,3));return new d.Line(s,new d.LineBasicMaterial)};e.prototype._createLongitude=function(e,t,r){var n=new Float32Array((t+1)*3);for(var i=0;i<=t;i++){var o=r.unprojectBasic([e,i/t],.16);var a=3*i;n[a+0]=o[0];n[a+1]=o[1];n[a+2]=o[2]}var s=new d.BufferGeometry;s.addAttribute("position",new d.BufferAttribute(n,3));return new d.Line(s,new d.LineBasicMaterial)};e.prototype._createPanoCamera=function(e){var t=new d.Object3D;t.children.push(this._createAxis(e));t.children.push(this._createLatitude(.5,10,e));t.children.push(this._createLongitude(0,6,e));t.children.push(this._createLongitude(.25,6,e));t.children.push(this._createLongitude(.5,6,e));t.children.push(this._createLongitude(.75,6,e));return t};e.prototype._createPoints=function(t,e){var r=(new d.Matrix4).getInverse(e.srt);var n=Object.keys(t.points).map(function(e){return t.points[e]});var i=n.length;var o=new Float32Array(i*3);var a=new Float32Array(i*3);for(var s=0;s<i;s++){var u=3*s;var c=n[s].coordinates;var h=new d.Vector3(c[0],c[1],c[2]).applyMatrix4(r);o[u+0]=h.x;o[u+1]=h.y;o[u+2]=h.z;var l=n[s].color;a[u+0]=l[0]/255;a[u+1]=l[1]/255;a[u+2]=l[2]/255}var p=new d.BufferGeometry;p.addAttribute("position",new d.BufferAttribute(o,3));p.addAttribute("color",new d.BufferAttribute(a,3));var f=new d.PointsMaterial({size:.1,vertexColors:d.VertexColors});return new d.Points(p,f)};e.prototype._createPosition=function(e,t){var r=e.unprojectBasic([0,0],0);var n=[t,r];var i=new d.BufferGeometry;i.addAttribute("position",new d.BufferAttribute(this._arrayToFloatArray(n,3),3));return new d.Line(i,new d.LineBasicMaterial({color:new d.Color(1,0,0)}))};e.prototype._createPrespectiveCamera=function(e){var t=.2;var r=new d.Object3D;r.children.push(this._createDiagonals(e,t));r.children.push(this._createFrame(e,t));return r};e.prototype._disposeCameras=function(e){var t=this._reconstructions[e].cameras;for(var r=0,n=t.children.slice();r<n.length;r++){var i=n[r];for(var o=0,a=i.children;o<a.length;o++){var s=a[o];s.geometry.dispose();s.material.dispose();var u=this._interactiveObjects.indexOf(s);if(u!==-1){this._interactiveObjects.splice(u,1)}else{console.warn("Object does not exist ("+s.id+") for "+e)}}t.remove(i)}this._scene.remove(t)};e.prototype._disposePoints=function(e){var t=this._reconstructions[e].points;for(var r=0,n=t.children.slice();r<n.length;r++){var i=n[r];i.geometry.dispose();i.material.dispose();t.remove(i)}this._scene.remove(t)};e.prototype._disposePositions=function(e){var t=this._reconstructions[e].positions;for(var r=0,n=t.children.slice();r<n.length;r++){var i=n[r];i.geometry.dispose();i.material.dispose();t.remove(i)}this._scene.remove(t)};e.prototype._disposeReconstruction=function(e){this._disposeCameras(e);this._disposePoints(e);this._disposePositions(e);delete this._reconstructions[e]};e.prototype._disposeTile=function(e){var t=this._tiles[e];for(var r=0,n=t.children.slice();r<n.length;r++){var i=n[r];i.geometry.dispose();i.material.dispose();t.remove(i)}this._scene.remove(t);delete this._tiles[e]};e.prototype._getColor=function(e,t){return t?this._getConnectedComponentColor(e):"#FFFFFF"};e.prototype._getConnectedComponentColor=function(e){if(!(e in this._connectedComponentColors)){this._connectedComponentColors[e]=this._randomColor()}return this._connectedComponentColors[e]};e.prototype._interpolate=function(e,t,r){return e+r*(t-e)};e.prototype._randomColor=function(){return"hsl("+Math.floor(360*Math.random())+", 100%, 65%)"};e.prototype._setCameraColor=function(e,t){for(var r=0,n=t.children;r<n.length;r++){var i=n[r];i.material.color=new d.Color(e)}};e.prototype._subsample=function(e,t,r){if(r<1){return[e,t]}var n=[];for(var i=0;i<=r+1;i++){var o=[];for(var a=0;a<3;a++){o.push(this._interpolate(e[a],t[a],i/(r+1)))}n.push(o)}return n};return e}();r.SpatialDataScene=n;r.default=n},{three:226}],343:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("./error/GeometryTagError");r.GeometryTagError=n.GeometryTagError;var i=e("./geometry/PointGeometry");r.PointGeometry=i.PointGeometry;var o=e("./geometry/RectGeometry");r.RectGeometry=o.RectGeometry;var a=e("./geometry/PolygonGeometry");r.PolygonGeometry=a.PolygonGeometry;var s=e("./tag/OutlineTag");r.OutlineTag=s.OutlineTag;var u=e("./tag/SpotTag");r.SpotTag=u.SpotTag;var c=e("./tag/TagDomain");r.TagDomain=c.TagDomain;var h=e("./TagComponent");r.TagComponent=h.TagComponent;var l=e("./TagMode");r.TagMode=l.TagMode},{"./TagComponent":344,"./TagMode":347,"./error/GeometryTagError":351,"./geometry/PointGeometry":353,"./geometry/PolygonGeometry":354,"./geometry/RectGeometry":355,"./tag/OutlineTag":367,"./tag/SpotTag":370,"./tag/TagDomain":372}],344:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var a=e("rxjs");var u=e("rxjs/operators");var s=e("when");var c=e("../../Component");var h=e("../../Geo");var l=e("../../Render");var i=function(i){n(o,i);function o(e,t,r){var n=i.call(this,e,t,r)||this;n._tagDomRenderer=new c.TagDOMRenderer;n._tagScene=new c.TagScene;n._tagSet=new c.TagSet;n._tagCreator=new c.TagCreator(n,r);n._viewportCoords=new h.ViewportCoords;n._createHandlers={CreatePoint:new c.CreatePointHandler(n,t,r,n._viewportCoords,n._tagCreator),CreatePolygon:new c.CreatePolygonHandler(n,t,r,n._viewportCoords,n._tagCreator),CreateRect:new c.CreateRectHandler(n,t,r,n._viewportCoords,n._tagCreator),CreateRectDrag:new c.CreateRectDragHandler(n,t,r,n._viewportCoords,n._tagCreator),Default:undefined};n._editVertexHandler=new c.EditVertexHandler(n,t,r,n._viewportCoords,n._tagSet);n._renderTags$=n._tagSet.changed$.pipe(u.map(function(e){var t=e.getAll();t.sort(function(e,t){var r=e.tag.id;var n=t.tag.id;if(r<n){return-1}if(r>n){return 1}return 0});return t}),u.share());n._tagChanged$=n._renderTags$.pipe(u.switchMap(function(e){return a.from(e).pipe(u.mergeMap(function(e){return a.merge(e.tag.changed$,e.tag.geometryChanged$)}))}),u.share());n._renderTagGLChanged$=n._renderTags$.pipe(u.switchMap(function(e){return a.from(e).pipe(u.mergeMap(function(e){return e.glObjectsChanged$}))}),u.share());n._createGeometryChanged$=n._tagCreator.tag$.pipe(u.switchMap(function(e){return e!=null?e.geometryChanged$:a.empty()}),u.share());n._createGLObjectsChanged$=n._tagCreator.tag$.pipe(u.switchMap(function(e){return e!=null?e.glObjectsChanged$:a.empty()}),u.share());n._creatingConfiguration$=n._configuration$.pipe(u.distinctUntilChanged(function(e,t){return e.mode===t.mode},function(e){return{createColor:e.createColor,mode:e.mode}}),u.publishReplay(1),u.refCount());n._creatingConfiguration$.subscribe(function(e){n.fire(o.modechanged,e.mode)});return n}o.prototype.add=function(r){var n=this;if(this._activated){this._navigator.stateService.currentTransform$.pipe(u.first()).subscribe(function(e){n._tagSet.add(r,e);var t=r.map(function(e){return n._tagSet.get(e.id)});n._tagScene.add(t)})}else{this._tagSet.addDeactivated(r)}};o.prototype.changeMode=function(e){this.configure({mode:e})};o.prototype.get=function(e){if(this._activated){var t=this._tagSet.get(e);return t!==undefined?t.tag:undefined}else{return this._tagSet.getDeactivated(e)}};o.prototype.getAll=function(){if(this.activated){return this._tagSet.getAll().map(function(e){return e.tag})}else{return this._tagSet.getAllDeactivated()}};o.prototype.getTagIdsAt=function(n){var i=this;return s.promise(function(t,r){i._container.renderService.renderCamera$.pipe(u.first(),u.map(function(e){var t=i._viewportCoords.canvasToViewport(n[0],n[1],i._container.element);var r=i._tagScene.intersectObjects(t,e.perspective);return r})).subscribe(function(e){t(e)},function(e){r(e)})})};o.prototype.has=function(e){return this._activated?this._tagSet.has(e):this._tagSet.hasDeactivated(e)};o.prototype.remove=function(e){if(this._activated){this._tagSet.remove(e);this._tagScene.remove(e)}else{this._tagSet.removeDeactivated(e)}};o.prototype.removeAll=function(){if(this._activated){this._tagSet.removeAll();this._tagScene.removeAll()}else{this._tagSet.removeAllDeactivated()}};o.prototype._activate=function(){var s=this;this._editVertexHandler.enable();var e=a.from(Object.keys(this._createHandlers)).pipe(u.map(function(e){return s._createHandlers[e]}),u.filter(function(e){return!!e}),u.mergeMap(function(e){return e.geometryCreated$}),u.share());this._fireGeometryCreatedSubscription=e.subscribe(function(e){s.fire(o.geometrycreated,e)});this._fireCreateGeometryEventSubscription=this._tagCreator.tag$.pipe(u.skipWhile(function(e){return e==null}),u.distinctUntilChanged()).subscribe(function(e){var t=e!=null?o.creategeometrystart:o.creategeometryend;s.fire(t,s)});this._handlerStopCreateSubscription=e.subscribe(function(){s.changeMode(c.TagMode.Default)});this._handlerEnablerSubscription=this._creatingConfiguration$.subscribe(function(e){s._disableCreateHandlers();var t=c.TagMode[e.mode];var r=s._createHandlers[t];if(!!r){r.enable()}});this._fireTagsChangedSubscription=this._renderTags$.subscribe(function(e){s.fire(o.tagschanged,s)});this._stopCreateSubscription=this._tagCreator.tag$.pipe(u.switchMap(function(e){return e!=null?e.aborted$.pipe(u.map(function(e){return null})):a.empty()})).subscribe(function(){s.changeMode(c.TagMode.Default)});this._setGLCreateTagSubscription=this._tagCreator.tag$.subscribe(function(e){if(s._tagScene.hasCreateTag()){s._tagScene.removeCreateTag()}if(e!=null){s._tagScene.addCreateTag(e)}});this._createGLObjectsChangedSubscription=this._createGLObjectsChanged$.subscribe(function(e){s._tagScene.updateCreateTagObjects(e)});this._updateGLObjectsSubscription=this._renderTagGLChanged$.subscribe(function(e){s._tagScene.updateObjects(e)});this._updateTagSceneSubscription=this._tagChanged$.subscribe(function(e){s._tagScene.update()});this._domSubscription=a.combineLatest(this._renderTags$.pipe(u.startWith([]),u.tap(function(e){s._container.domRenderer.render$.next({name:s._name,vnode:s._tagDomRenderer.clear()})})),this._container.renderService.renderCamera$,this._container.spriteService.spriteAtlas$,this._container.renderService.size$,this._tagChanged$.pipe(u.startWith(null)),a.merge(this._tagCreator.tag$,this._createGeometryChanged$).pipe(u.startWith(null))).pipe(u.map(function(e){var t=e[0],r=e[1],n=e[2],i=e[3],o=e[4],a=e[5];return{name:s._name,vnode:s._tagDomRenderer.render(t,a,n,r.perspective,i)}})).subscribe(this._container.domRenderer.render$);this._glSubscription=this._navigator.stateService.currentState$.pipe(u.map(function(e){var t=s._tagScene;return{name:s._name,render:{frameId:e.id,needsRender:t.needsRender,render:t.render.bind(t),stage:l.GLRenderStage.Foreground}}})).subscribe(this._container.glRenderer.render$);this._navigator.stateService.currentTransform$.pipe(u.first()).subscribe(function(e){s._tagSet.activate(e);s._tagScene.add(s._tagSet.getAll())})};o.prototype._deactivate=function(){this._editVertexHandler.disable();this._disableCreateHandlers();this._tagScene.clear();this._tagSet.deactivate();this._tagCreator.delete$.next(null);this._updateGLObjectsSubscription.unsubscribe();this._updateTagSceneSubscription.unsubscribe();this._stopCreateSubscription.unsubscribe();this._setGLCreateTagSubscription.unsubscribe();this._createGLObjectsChangedSubscription.unsubscribe();this._domSubscription.unsubscribe();this._glSubscription.unsubscribe();this._fireCreateGeometryEventSubscription.unsubscribe();this._fireGeometryCreatedSubscription.unsubscribe();this._fireTagsChangedSubscription.unsubscribe();this._handlerStopCreateSubscription.unsubscribe();this._handlerEnablerSubscription.unsubscribe();this._container.element.classList.remove("component-tag-create")};o.prototype._getDefaultConfiguration=function(){return{createColor:16777215,mode:c.TagMode.Default}};o.prototype._disableCreateHandlers=function(){var e=this._createHandlers;for(var t in e){if(!e.hasOwnProperty(t)){continue}var r=e[t];if(!!r){r.disable()}}};o.componentName="tag";o.creategeometryend="creategeometryend";o.creategeometrystart="creategeometrystart";o.modechanged="modechanged";o.geometrycreated="geometrycreated";o.tagschanged="tagschanged";return o}(c.Component);r.TagComponent=i;c.ComponentService.register(i);r.default=i},{"../../Component":275,"../../Geo":278,"../../Render":281,rxjs:27,"rxjs/operators":225,when:272}],345:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("rxjs/operators");var i=e("rxjs");var o=e("../../Component");var a=function(){function e(e,t){this._component=e;this._navigator=t;this._tagOperation$=new i.Subject;this._createPolygon$=new i.Subject;this._createRect$=new i.Subject;this._delete$=new i.Subject;this._tag$=this._tagOperation$.pipe(n.scan(function(e,t){return t(e)},null),n.share());this._createRect$.pipe(n.withLatestFrom(this._component.configuration$,this._navigator.stateService.currentTransform$),n.map(function(e){var r=e[0],n=e[1],i=e[2];return function(e){var t=new o.RectGeometry([r[0],r[1],r[0],r[1]]);return new o.OutlineCreateTag(t,{color:n.createColor},i)}})).subscribe(this._tagOperation$);this._createPolygon$.pipe(n.withLatestFrom(this._component.configuration$,this._navigator.stateService.currentTransform$),n.map(function(e){var r=e[0],n=e[1],i=e[2];return function(e){var t=new o.PolygonGeometry([[r[0],r[1]],[r[0],r[1]],[r[0],r[1]]]);return new o.OutlineCreateTag(t,{color:n.createColor},i)}})).subscribe(this._tagOperation$);this._delete$.pipe(n.map(function(){return function(e){return null}})).subscribe(this._tagOperation$)}Object.defineProperty(e.prototype,"createRect$",{get:function(){return this._createRect$},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"createPolygon$",{get:function(){return this._createPolygon$},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"delete$",{get:function(){return this._delete$},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"tag$",{get:function(){return this._tag$},enumerable:true,configurable:true});return e}();r.TagCreator=a;r.default=a},{"../../Component":275,rxjs:27,"rxjs/operators":225}],346:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var c=e("virtual-dom");var n=function(){function e(){}e.prototype.render=function(e,t,r,n,i){var o=[];for(var a=0,s=e;a<s.length;a++){var u=s[a];o=o.concat(u.getDOMObjects(r,n,i))}if(t!=null){o=o.concat(t.getDOMObjects(n,i))}return c.h("div.TagContainer",{},o)};e.prototype.clear=function(){return c.h("div",{},[])};return e}();r.TagDOMRenderer=n},{"virtual-dom":231}],347:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n;(function(e){e[e["Default"]=0]="Default";e[e["CreatePoint"]=1]="CreatePoint";e[e["CreatePolygon"]=2]="CreatePolygon";e[e["CreateRect"]=3]="CreateRect";e[e["CreateRectDrag"]=4]="CreateRectDrag"})(n=r.TagMode||(r.TagMode={}));r.default=n},{}],348:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n;(function(e){e[e["None"]=0]="None";e[e["Centroid"]=1]="Centroid";e[e["Vertex"]=2]="Vertex"})(n=r.TagOperation||(r.TagOperation={}));r.default=n},{}],349:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var c=e("three");var n=function(){function e(e,t){this._createTag=null;this._needsRender=false;this._raycaster=!!t?t:new c.Raycaster;this._scene=!!e?e:new c.Scene;this._objectTags={};this._retrievableObjects=[];this._tags={}}Object.defineProperty(e.prototype,"needsRender",{get:function(){return this._needsRender},enumerable:true,configurable:true});e.prototype.add=function(e){for(var t=0,r=e;t<r.length;t++){var n=r[t];if(n.tag.id in this._tags){this._remove(n.tag.id)}this._add(n)}this._needsRender=true};e.prototype.addCreateTag=function(e){for(var t=0,r=e.glObjects;t<r.length;t++){var n=r[t];this._scene.add(n)}this._createTag={tag:e,objects:e.glObjects};this._needsRender=true};e.prototype.clear=function(){for(var e=0,t=Object.keys(this._tags);e<t.length;e++){var r=t[e];this._remove(r)}this._needsRender=false};e.prototype.get=function(e){return this.has(e)?this._tags[e].tag:undefined};e.prototype.has=function(e){return e in this._tags};e.prototype.hasCreateTag=function(){return this._createTag!=null};e.prototype.intersectObjects=function(e,t){var r=e[0],n=e[1];this._raycaster.setFromCamera(new c.Vector2(r,n),t);var i=this._raycaster.intersectObjects(this._retrievableObjects);var o=[];for(var a=0,s=i;a<s.length;a++){var u=s[a];if(u.object.uuid in this._objectTags){o.push(this._objectTags[u.object.uuid])}}return o};e.prototype.remove=function(e){for(var t=0,r=e;t<r.length;t++){var n=r[t];this._remove(n)}this._needsRender=true};e.prototype.removeAll=function(){for(var e=0,t=Object.keys(this._tags);e<t.length;e++){var r=t[e];this._remove(r)}this._needsRender=true};e.prototype.removeCreateTag=function(){if(this._createTag==null){return}for(var e=0,t=this._createTag.objects;e<t.length;e++){var r=t[e];this._scene.remove(r)}this._createTag.tag.dispose();this._createTag=null;this._needsRender=true};e.prototype.render=function(e,t){t.render(this._scene,e);this._needsRender=false};e.prototype.update=function(){this._needsRender=true};e.prototype.updateCreateTagObjects=function(e){if(this._createTag.tag!==e){throw new Error("Create tags do not have the same reference.")}for(var t=0,r=this._createTag.objects;t<r.length;t++){var n=r[t];this._scene.remove(n)}for(var i=0,o=e.glObjects;i<o.length;i++){var n=o[i];this._scene.add(n)}this._createTag.objects=e.glObjects;this._needsRender=true};e.prototype.updateObjects=function(e){var t=e.tag.id;if(this._tags[t].tag!==e){throw new Error("Tags do not have the same reference.")}var r=this._tags[t];this._removeObjects(r);delete this._tags[t];this._add(e);this._needsRender=true};e.prototype._add=function(e){var t=e.tag.id;var r={tag:e,objects:[],retrievableObjects:[]};this._tags[t]=r;for(var n=0,i=e.getGLObjects();n<i.length;n++){var o=i[n];r.objects.push(o);this._scene.add(o)}for(var a=0,s=e.getRetrievableObjects();a<s.length;a++){var u=s[a];r.retrievableObjects.push(u);this._retrievableObjects.push(u);this._objectTags[u.uuid]=e.tag.id}};e.prototype._remove=function(e){var t=this._tags[e];this._removeObjects(t);t.tag.dispose();delete this._tags[e]};e.prototype._removeObjects=function(e){for(var t=0,r=e.objects;t<r.length;t++){var n=r[t];this._scene.remove(n)}for(var i=0,o=e.retrievableObjects;i<o.length;i++){var a=o[i];var s=this._retrievableObjects.indexOf(a);if(s!==-1){this._retrievableObjects.splice(s,1)}}};return e}();r.TagScene=n;r.default=n},{three:226}],350:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("rxjs");var i=e("../../Component");var o=function(){function e(){this._active=false;this._hash={};this._hashDeactivated={};this._notifyChanged$=new n.Subject}Object.defineProperty(e.prototype,"active",{get:function(){return this._active},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"changed$",{get:function(){return this._notifyChanged$},enumerable:true,configurable:true});e.prototype.activate=function(e){if(this._active){return}for(var t in this._hashDeactivated){if(!this._hashDeactivated.hasOwnProperty(t)){continue}var r=this._hashDeactivated[t];this._add(r,e)}this._hashDeactivated={};this._active=true;this._notifyChanged$.next(this)};e.prototype.deactivate=function(){if(!this._active){return}for(var e in this._hash){if(!this._hash.hasOwnProperty(e)){continue}this._hashDeactivated[e]=this._hash[e].tag}this._hash={};this._active=false};e.prototype.add=function(e,t){this._assertActivationState(true);for(var r=0,n=e;r<n.length;r++){var i=n[r];this._add(i,t)}this._notifyChanged$.next(this)};e.prototype.addDeactivated=function(e){this._assertActivationState(false);for(var t=0,r=e;t<r.length;t++){var n=r[t];if(!(n instanceof i.OutlineTag||n instanceof i.SpotTag)){throw new Error("Tag type not supported")}this._hashDeactivated[n.id]=n}};e.prototype.get=function(e){return this.has(e)?this._hash[e]:undefined};e.prototype.getAll=function(){var t=this._hash;return Object.keys(t).map(function(e){return t[e]})};e.prototype.getAllDeactivated=function(){var t=this._hashDeactivated;return Object.keys(t).map(function(e){return t[e]})};e.prototype.getDeactivated=function(e){return this.hasDeactivated(e)?this._hashDeactivated[e]:undefined};e.prototype.has=function(e){return e in this._hash};e.prototype.hasDeactivated=function(e){return e in this._hashDeactivated};e.prototype.remove=function(e){this._assertActivationState(true);var t=this._hash;for(var r=0,n=e;r<n.length;r++){var i=n[r];if(!(i in t)){continue}delete t[i]}this._notifyChanged$.next(this)};e.prototype.removeAll=function(){this._assertActivationState(true);this._hash={};this._notifyChanged$.next(this)};e.prototype.removeAllDeactivated=function(){this._assertActivationState(false);this._hashDeactivated={}};e.prototype.removeDeactivated=function(e){this._assertActivationState(false);var t=this._hashDeactivated;for(var r=0,n=e;r<n.length;r++){var i=n[r];if(!(i in t)){continue}delete t[i]}};e.prototype._add=function(e,t){if(e instanceof i.OutlineTag){this._hash[e.id]=new i.OutlineRenderTag(e,t)}else if(e instanceof i.SpotTag){this._hash[e.id]=new i.SpotRenderTag(e,t)}else{throw new Error("Tag type not supported")}};e.prototype._assertActivationState=function(e){if(e!==this._active){throw new Error("Tag set not in correct state for operation.")}};return e}();r.TagSet=o;r.default=o},{"../../Component":275,rxjs:27}],351:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var i=e("../../../Error");var o=function(r){n(e,r);function e(e){var t=r.call(this,e!=null?e:"The provided geometry value is incorrect")||this;t.name="GeometryTagError";return t}return e}(i.MapillaryError);r.GeometryTagError=o;r.default=i.MapillaryError},{"../../../Error":277}],352:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("rxjs");var i=function(){function e(){this._notifyChanged$=new n.Subject}Object.defineProperty(e.prototype,"changed$",{get:function(){return this._notifyChanged$},enumerable:true,configurable:true});return e}();r.Geometry=i;r.default=i},{rxjs:27}],353:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var o=e("../../../Component");var i=function(i){n(e,i);function e(e){var t=i.call(this)||this;var r=e[0];var n=e[1];if(r<0||r>1||n<0||n>1){throw new o.GeometryTagError("Basic coordinates must be on the interval [0, 1].")}t._point=e.slice();return t}Object.defineProperty(e.prototype,"point",{get:function(){return this._point},enumerable:true,configurable:true});e.prototype.getCentroid2d=function(){return this._point.slice()};e.prototype.getCentroid3d=function(e){return e.unprojectBasic(this._point,200)};e.prototype.setCentroid2d=function(e,t){var r=[Math.max(0,Math.min(1,e[0])),Math.max(0,Math.min(1,e[1]))];this._point[0]=r[0];this._point[1]=r[1];this._notifyChanged$.next(this)};return e}(o.Geometry);r.PointGeometry=i},{"../../../Component":275}],354:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var f=e("../../../Component");var i=function(p){n(e,p);function e(e,t){var r=p.call(this)||this;var n=e.length;if(n<3){throw new f.GeometryTagError("A polygon must have three or more positions.")}if(e[0][0]!==e[n-1][0]||e[0][1]!==e[n-1][1]){throw new f.GeometryTagError("First and last positions must be equivalent.")}r._polygon=[];for(var i=0,o=e;i<o.length;i++){var a=o[i];if(a[0]<0||a[0]>1||a[1]<0||a[1]>1){throw new f.GeometryTagError("Basic coordinates of polygon must be on the interval [0, 1].")}r._polygon.push(a.slice())}r._holes=[];if(t==null){return r}for(var s=0;s<t.length;s++){var u=t[s];var c=u.length;if(c<3){throw new f.GeometryTagError("A polygon hole must have three or more positions.")}if(u[0][0]!==u[c-1][0]||u[0][1]!==u[c-1][1]){throw new f.GeometryTagError("First and last positions of hole must be equivalent.")}r._holes.push([]);for(var h=0,l=u;h<l.length;h++){var a=l[h];if(a[0]<0||a[0]>1||a[1]<0||a[1]>1){throw new f.GeometryTagError("Basic coordinates of hole must be on the interval [0, 1].")}r._holes[s].push(a.slice())}}return r}Object.defineProperty(e.prototype,"polygon",{get:function(){return this._polygon},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"holes",{get:function(){return this._holes},enumerable:true,configurable:true});e.prototype.addVertex2d=function(e){var t=[Math.max(0,Math.min(1,e[0])),Math.max(0,Math.min(1,e[1]))];this._polygon.splice(this._polygon.length-1,0,t);this._notifyChanged$.next(this)};e.prototype.getVertex2d=function(e){return this._polygon[e].slice()};e.prototype.removeVertex2d=function(e){if(e<0||e>=this._polygon.length||this._polygon.length<4){throw new f.GeometryTagError("Index for removed vertex must be valid.")}if(e>0&&e<this._polygon.length-1){this._polygon.splice(e,1)}else{this._polygon.splice(0,1);this._polygon.pop();var t=this._polygon[0].slice();this._polygon.push(t)}this._notifyChanged$.next(this)};e.prototype.setVertex2d=function(e,t,r){var n=[Math.max(0,Math.min(1,t[0])),Math.max(0,Math.min(1,t[1]))];if(e===0||e===this._polygon.length-1){this._polygon[0]=n.slice();this._polygon[this._polygon.length-1]=n.slice()}else{this._polygon[e]=n.slice()}this._notifyChanged$.next(this)};e.prototype.setCentroid2d=function(e,t){var r=this._polygon.map(function(e){return e[0]});var n=this._polygon.map(function(e){return e[1]});var i=Math.min.apply(Math,r);var o=Math.max.apply(Math,r);var a=Math.min.apply(Math,n);var s=Math.max.apply(Math,n);var u=this.getCentroid2d();var c=-i;var h=1-o;var l=-a;var p=1-s;var f=Math.max(c,Math.min(h,e[0]-u[0]));var d=Math.max(l,Math.min(p,e[1]-u[1]));for(var v=0,m=this._polygon;v<m.length;v++){var g=m[v];g[0]+=f;g[1]+=d}this._notifyChanged$.next(this)};e.prototype.getPoints3d=function(e){return this._getPoints3d(this._subsample(this._polygon),e)};e.prototype.getVertex3d=function(e,t){return t.unprojectBasic(this._polygon[e],200)};e.prototype.getVertices2d=function(){return this._polygon.slice()};e.prototype.getVertices3d=function(e){return this._getPoints3d(this._polygon,e)};e.prototype.getHolePoints3d=function(t){var r=this;return this._holes.map(function(e){return r._getPoints3d(r._subsample(e),t)})};e.prototype.getHoleVertices3d=function(t){var r=this;return this._holes.map(function(e){return r._getPoints3d(e,t)})};e.prototype.getCentroid2d=function(){var e=this._polygon;var t=0;var r=0;var n=0;for(var i=0;i<e.length-1;i++){var o=e[i][0];var a=e[i][1];var s=e[i+1][0];var u=e[i+1][1];var c=o*u-s*a;t+=c;r+=(o+s)*c;n+=(a+u)*c}t/=2;r/=6*t;n/=6*t;return[r,n]};e.prototype.getCentroid3d=function(e){var t=this.getCentroid2d();return e.unprojectBasic(t,200)};e.prototype.get3dDomainTriangles3d=function(t){var r=this;return this._triangulate(this._project(this._polygon,t),this.getVertices3d(t),this._holes.map(function(e){return r._project(e,t)}),this.getHoleVertices3d(t))};e.prototype.getTriangles3d=function(t){var r=this;if(t.fullPano){return this._triangulatePano(this._polygon.slice(),this.holes.slice(),t)}var e=this._project(this._subsample(this._polygon),t);var n=this.getPoints3d(t);var i=this._holes.map(function(e){return r._project(r._subsample(e),t)});var o=this.getHolePoints3d(t);return this._triangulate(e,n,i,o)};e.prototype.getPoleOfInaccessibility2d=function(){return this._getPoleOfInaccessibility2d(this._polygon.slice())};e.prototype.getPoleOfInaccessibility3d=function(e){var t=this._getPoleOfInaccessibility2d(this._polygon.slice());return e.unprojectBasic(t,200)};e.prototype._getPoints3d=function(e,t){return e.map(function(e){return t.unprojectBasic(e,200)})};return e}(f.VertexGeometry);r.PolygonGeometry=i;r.default=i},{"../../../Component":275}],355:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var a=e("../../../Component");var i=function(o){n(e,o);function e(e){var t=o.call(this)||this;if(e[1]>e[3]){throw new a.GeometryTagError("Basic Y coordinates values can not be inverted.")}for(var r=0,n=e;r<n.length;r++){var i=n[r];if(i<0||i>1){throw new a.GeometryTagError("Basic coordinates must be on the interval [0, 1].")}}t._anchorIndex=undefined;t._rect=e.slice(0,4);t._inverted=t._rect[0]>t._rect[2];return t}Object.defineProperty(e.prototype,"anchorIndex",{get:function(){return this._anchorIndex},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"inverted",{get:function(){return this._inverted},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"rect",{get:function(){return this._rect},enumerable:true,configurable:true});e.prototype.initializeAnchorIndexing=function(e){if(this._anchorIndex!==undefined){throw new Error("Anchor indexing is already initialized.")}if(e<0||e>3){throw new Error("Invalid anchor index: "+e+".")}this._anchorIndex=e===undefined?0:e};e.prototype.terminateAnchorIndexing=function(){this._anchorIndex=undefined};e.prototype.setOppositeVertex2d=function(e,t){if(this._anchorIndex===undefined){throw new Error("Anchor indexing needs to be initialized.")}var r=[Math.max(0,Math.min(1,e[0])),Math.max(0,Math.min(1,e[1]))];var n=this._rect.slice();var i=this._anchorIndex===0?[n[0],n[3]]:this._anchorIndex===1?[n[0],n[1]]:this._anchorIndex===2?[n[2],n[1]]:[n[2],n[3]];if(t.fullPano){var o=this._anchorIndex<2?r[0]-n[2]:r[0]-n[0];if(!this._inverted&&this._anchorIndex<2&&r[0]<.25&&n[2]>.75&&o<-.5){this._inverted=true;this._anchorIndex=i[1]>r[1]?0:1}else if(!this._inverted&&this._anchorIndex>=2&&r[0]<.25&&n[2]>.75&&o<-.5){this._inverted=true;this._anchorIndex=i[1]>r[1]?0:1}else if(this._inverted&&this._anchorIndex>=2&&r[0]<.25&&n[0]>.75&&o<-.5){this._inverted=false;if(i[0]>r[0]){this._anchorIndex=i[1]>r[1]?3:2}else{this._anchorIndex=i[1]>r[1]?0:1}}else if(!this._inverted&&this._anchorIndex>=2&&r[0]>.75&&n[0]<.25&&o>.5){this._inverted=true;this._anchorIndex=i[1]>r[1]?3:2}else if(!this._inverted&&this._anchorIndex<2&&r[0]>.75&&n[0]<.25&&o>.5){this._inverted=true;this._anchorIndex=i[1]>r[1]?3:2}else if(this._inverted&&this._anchorIndex<2&&r[0]>.75&&n[2]<.25&&o>.5){this._inverted=false;if(i[0]>r[0]){this._anchorIndex=i[1]>r[1]?3:2}else{this._anchorIndex=i[1]>r[1]?0:1}}else if(this._inverted&&this._anchorIndex<2&&r[0]>n[0]){this._inverted=false;this._anchorIndex=i[1]>r[1]?0:1}else if(this._inverted&&this._anchorIndex>=2&&r[0]<n[2]){this._inverted=false;this._anchorIndex=i[1]>r[1]?3:2}else if(this._inverted){if(this._anchorIndex<2){this._anchorIndex=i[1]>r[1]?0:1}else{this._anchorIndex=i[1]>r[1]?3:2}}else{if(i[0]<=r[0]&&i[1]>r[1]){this._anchorIndex=0}else if(i[0]<=r[0]&&i[1]<=r[1]){this._anchorIndex=1}else if(i[0]>r[0]&&i[1]<=r[1]){this._anchorIndex=2}else{this._anchorIndex=3}}var a=[];if(this._anchorIndex===0){a[0]=i[0];a[1]=r[1];a[2]=r[0];a[3]=i[1]}else if(this._anchorIndex===1){a[0]=i[0];a[1]=i[1];a[2]=r[0];a[3]=r[1]}else if(this._anchorIndex===2){a[0]=r[0];a[1]=i[1];a[2]=i[0];a[3]=r[1]}else{a[0]=r[0];a[1]=r[1];a[2]=i[0];a[3]=i[1]}if(!this._inverted&&a[0]>a[2]||this._inverted&&a[0]<a[2]){a[0]=n[0];a[2]=n[2]}if(a[1]>a[3]){a[1]=n[1];a[3]=n[3]}this._rect[0]=a[0];this._rect[1]=a[1];this._rect[2]=a[2];this._rect[3]=a[3]}else{if(i[0]<=r[0]&&i[1]>r[1]){this._anchorIndex=0}else if(i[0]<=r[0]&&i[1]<=r[1]){this._anchorIndex=1}else if(i[0]>r[0]&&i[1]<=r[1]){this._anchorIndex=2}else{this._anchorIndex=3}var a=[];if(this._anchorIndex===0){a[0]=i[0];a[1]=r[1];a[2]=r[0];a[3]=i[1]}else if(this._anchorIndex===1){a[0]=i[0];a[1]=i[1];a[2]=r[0];a[3]=r[1]}else if(this._anchorIndex===2){a[0]=r[0];a[1]=i[1];a[2]=i[0];a[3]=r[1]}else{a[0]=r[0];a[1]=r[1];a[2]=i[0];a[3]=i[1]}if(a[0]>a[2]){a[0]=n[0];a[2]=n[2]}if(a[1]>a[3]){a[1]=n[1];a[3]=n[3]}this._rect[0]=a[0];this._rect[1]=a[1];this._rect[2]=a[2];this._rect[3]=a[3]}this._notifyChanged$.next(this)};e.prototype.setVertex2d=function(e,t,r){var n=this._rect.slice();var i=[Math.max(0,Math.min(1,t[0])),Math.max(0,Math.min(1,t[1]))];var o=[];if(e===0){o[0]=i[0];o[1]=n[1];o[2]=n[2];o[3]=i[1]}else if(e===1){o[0]=i[0];o[1]=i[1];o[2]=n[2];o[3]=n[3]}else if(e===2){o[0]=n[0];o[1]=i[1];o[2]=i[0];o[3]=n[3]}else if(e===3){o[0]=n[0];o[1]=n[1];o[2]=i[0];o[3]=i[1]}if(r.fullPano){var a=e<2&&i[0]>.75&&n[0]<.25||e>=2&&this._inverted&&i[0]>.75&&n[2]<.25;var s=e<2&&this._inverted&&i[0]<.25&&n[0]>.75||e>=2&&i[0]<.25&&n[2]>.75;if(a||s){this._inverted=!this._inverted}else{if(o[0]-n[0]<-.25){o[0]=n[0]}if(o[2]-n[2]>.25){o[2]=n[2]}}if(!this._inverted&&o[0]>o[2]||this._inverted&&o[0]<o[2]){o[0]=n[0];o[2]=n[2]}}else{if(o[0]>o[2]){o[0]=n[0];o[2]=n[2]}}if(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(e,t){var r=this._rect.slice();var n=r[0];var i=this._inverted?r[2]+1:r[2];var o=r[1];var a=r[3];var s=n+(i-n)/2;var u=o+(a-o)/2;var c=0;if(t.gpano!=null&&t.gpano.CroppedAreaImageWidthPixels===t.gpano.FullPanoWidthPixels){c=this._inverted?e[0]+1-s:e[0]-s}else{var h=-n;var l=1-i;c=Math.max(h,Math.min(l,e[0]-s))}var p=-o;var f=1-a;var d=Math.max(p,Math.min(f,e[1]-u));this._rect[0]=r[0]+c;this._rect[1]=r[1]+d;this._rect[2]=r[2]+c;this._rect[3]=r[3]+d;if(this._rect[0]<0){this._rect[0]+=1;this._inverted=!this._inverted}else if(this._rect[0]>1){this._rect[0]-=1;this._inverted=!this._inverted}if(this._rect[2]<0){this._rect[2]+=1;this._inverted=!this._inverted}else if(this._rect[2]>1){this._rect[2]-=1;this._inverted=!this._inverted}this._notifyChanged$.next(this)};e.prototype.getPoints3d=function(t){return this._getPoints2d().map(function(e){return t.unprojectBasic(e,200)})};e.prototype.getVertex2d=function(e){return this._rectToVertices2d(this._rect)[e]};e.prototype.getNonAdjustedVertex2d=function(e){return this._rectToNonAdjustedVertices2d(this._rect)[e]};e.prototype.getVertex3d=function(e,t){return t.unprojectBasic(this._rectToVertices2d(this._rect)[e],200)};e.prototype.getVertices2d=function(){return this._rectToVertices2d(this._rect)};e.prototype.getVertices3d=function(t){return this._rectToVertices2d(this._rect).map(function(e){return t.unprojectBasic(e,200)})};e.prototype.getCentroid2d=function(){var e=this._rect;var t=e[0];var r=this._inverted?e[2]+1:e[2];var n=e[1];var i=e[3];var o=(t+r)/2;var a=(n+i)/2;return[o,a]};e.prototype.getCentroid3d=function(e){var t=this.getCentroid2d();return e.unprojectBasic(t,200)};e.prototype.getPoleOfInaccessibility2d=function(){return this._getPoleOfInaccessibility2d(this._rectToVertices2d(this._rect))};e.prototype.getPoleOfInaccessibility3d=function(e){var t=this._getPoleOfInaccessibility2d(this._rectToVertices2d(this._rect));return e.unprojectBasic(t,200)};e.prototype.getTriangles3d=function(e){return e.fullPano?[]:this._triangulate(this._project(this._getPoints2d(),e),this.getPoints3d(e))};e.prototype.validate=function(e){var t=this._rect;if(!this._inverted&&e[0]<t[0]||e[0]-t[2]>.25||e[1]<t[1]){return false}return true};e.prototype._getPoints2d=function(){var e=this._rectToVertices2d(this._rect);var t=e.length-1;var r=10;var n=[];for(var i=0;i<t;++i){var o=e[i][0];var a=e[i][1];var s=e[i+1][0];var u=e[i+1][1];var c=(s-o)/(r-1);var h=(u-a)/(r-1);for(var l=0;l<r;++l){var p=[o+l*c,a+l*h];n.push(p)}}return n};e.prototype._rectToVertices2d=function(e){return[[e[0],e[3]],[e[0],e[1]],[this._inverted?e[2]+1:e[2],e[1]],[this._inverted?e[2]+1:e[2],e[3]],[e[0],e[3]]]};e.prototype._rectToNonAdjustedVertices2d=function(e){return[[e[0],e[3]],[e[0],e[1]],[e[2],e[1]],[e[2],e[3]],[e[0],e[3]]]};return e}(a.VertexGeometry);r.RectGeometry=i;r.default=i},{"../../../Component":275}],356:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var g=e("earcut");var x=e("martinez-polygon-clipping");var i=e("@mapbox/polylabel");var o=e("three");var a=e("../../../Component");var s=function(t){n(e,t);function e(){var e=t.call(this)||this;e._subsampleThreshold=.005;return e}e.prototype._getPoleOfInaccessibility2d=function(e){var t=i([e],.03);return t};e.prototype._project=function(e,t){var r=this._createCamera(t.upVector().toArray(),t.unprojectSfM([0,0],0),t.unprojectSfM([0,0],10));return this._deunproject(e,t,r)};e.prototype._subsample=function(e,t){if(t===void 0){t=this._subsampleThreshold}var r=[];var n=e.length;for(var i=0;i<n;i++){var o=e[i];var a=e[(i+1)%n];r.push(o);var s=Math.sqrt(Math.pow(a[0]-o[0],2)+Math.pow(a[1]-o[1],2));var u=Math.floor(s/t);var c=1/(u+1);for(var h=1;h<=u;h++){var l=h*c;var p=[(1-l)*o[0]+l*a[0],(1-l)*o[1]+l*a[1]];r.push(p)}}return r};e.prototype._triangulate=function(e,t,r,n){var i=[e.slice(0,-1)];for(var o=0,a=r!=null?r:[];o<a.length;o++){var s=a[o];i.push(s.slice(0,-1))}var u=t.slice(0,-1);for(var c=0,h=n!=null?n:[];c<h.length;c++){var l=h[c];u=u.concat(l.slice(0,-1))}var p=g.default.flatten(i);var f=g.default(p.vertices,p.holes,p.dimensions);var d=[];for(var v=0;v<f.length;++v){var m=u[f[v]];d.push(m[0]);d.push(m[1]);d.push(m[2])}return d};e.prototype._triangulatePano=function(e,t,r){var n=[];var i=1e-9;var o=3;var a=3;for(var s=0;s<o;s++){for(var u=0;u<a;u++){var c=s===0?-i:i;var h=u===0?-i:i;var l=s/o+c;var p=u/a+h;var f=(s+1)/o+i;var d=(u+1)/a+i;var v=[[l,p],[l,d],[f,d],[f,p],[l,p]];var m=[(2*s+1)/(2*o),(2*u+1)/(2*a)];n.push.apply(n,this._triangulateSubarea(e,t,v,m,r))}}return n};e.prototype._unproject=function(e,t,r){if(r===void 0){r=200}return e.map(function(e){return t.unprojectBasic(e,r)})};e.prototype._createCamera=function(e,t,r){var n=new o.Camera;n.up.copy((new o.Vector3).fromArray(e));n.position.copy((new o.Vector3).fromArray(t));n.lookAt((new o.Vector3).fromArray(r));n.updateMatrix();n.updateMatrixWorld(true);return n};e.prototype._deunproject=function(e,n,i){return e.map(function(e){var t=n.unprojectBasic(e,1e4);var r=new o.Vector3(t[0],t[1],t[2]).applyMatrix4(i.matrixWorldInverse);return[r.x/r.z,r.y/r.z]})};e.prototype._triangulateSubarea=function(e,t,r,n,i){var o=x.intersection([e].concat(t),[r]);if(!o){return[]}var a=[];var s=this._subsampleThreshold;var u=this._createCamera(i.upVector().toArray(),i.unprojectSfM([0,0],0),i.unprojectBasic(n,10));for(var c=0,h=o;c<h.length;c++){var l=h[c];var p=this._subsample(l[0],s);var f=this._deunproject(p,i,u);var d=this._unproject(p,i);var v=[];var m=[];for(var g=1;g<l.length;g++){var y=this._subsample(l[g],s);var _=this._deunproject(y,i,u);var b=this._unproject(y,i);v.push(_);m.push(b)}a.push.apply(a,this._triangulate(f,d,v,m))}return a};return e}(a.Geometry);r.VertexGeometry=s;r.default=s},{"../../../Component":275,"@mapbox/polylabel":1,earcut:8,"martinez-polygon-clipping":22,three:226}],357:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var o=e("rxjs/operators");var s=e("rxjs");var i=e("../../../Component");var a=function(a){n(e,a);function e(e,t,r,n,i){var o=a.call(this,e,t,r,n)||this;o._tagCreator=i;o._geometryCreated$=new s.Subject;return o}Object.defineProperty(e.prototype,"geometryCreated$",{get:function(){return this._geometryCreated$},enumerable:true,configurable:true});e.prototype._enable=function(){this._enableCreate();this._container.element.classList.add("component-tag-create")};e.prototype._disable=function(){this._container.element.classList.remove("component-tag-create");this._disableCreate()};e.prototype._validateBasic=function(e){var t=e[0];var r=e[1];return 0<=t&&t<=1&&0<=r&&r<=1};e.prototype._mouseEventToBasic$=function(e){var i=this;return e.pipe(o.withLatestFrom(this._container.renderService.renderCamera$,this._navigator.stateService.currentTransform$),o.map(function(e){var t=e[0],r=e[1],n=e[2];return i._mouseEventToBasic(t,i._container.element,r,n)}))};return e}(i.TagHandlerBase);r.CreateHandlerBase=a;r.default=a},{"../../../Component":275,rxjs:27,"rxjs/operators":225}],358:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var i=e("rxjs/operators");var o=e("../../../Component");var a=function(e){n(t,e);function t(){return e!==null&&e.apply(this,arguments)||this}t.prototype._enableCreate=function(){this._container.mouseService.deferPixels(this._name,4);this._geometryCreatedSubscription=this._mouseEventToBasic$(this._container.mouseService.proximateClick$).pipe(i.filter(this._validateBasic),i.map(function(e){return new o.PointGeometry(e)})).subscribe(this._geometryCreated$)};t.prototype._disableCreate=function(){this._container.mouseService.undeferPixels(this._name);this._geometryCreatedSubscription.unsubscribe()};t.prototype._getNameExtension=function(){return"create-point"};return t}(o.CreateHandlerBase);r.CreatePointHandler=a;r.default=a},{"../../../Component":275,"rxjs/operators":225}],359:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var i=e("../../../Component");var o=function(e){n(t,e);function t(){return e!==null&&e.apply(this,arguments)||this}t.prototype._addPoint=function(e,t){e.addPoint(t)};Object.defineProperty(t.prototype,"_create$",{get:function(){return this._tagCreator.createPolygon$},enumerable:true,configurable:true});t.prototype._getNameExtension=function(){return"create-polygon"};t.prototype._setVertex2d=function(e,t,r){e.geometry.setVertex2d(e.geometry.polygon.length-2,t,r)};return t}(i.CreateVertexHandler);r.CreatePolygonHandler=o;r.default=o},{"../../../Component":275}],360:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var i=e("rxjs");var a=e("rxjs/operators");var o=e("../../../Component");var s=function(e){n(t,e);function t(){return e!==null&&e.apply(this,arguments)||this}t.prototype._enableCreate=function(){var o=this;this._container.mouseService.claimMouse(this._name,2);this._deleteSubscription=this._navigator.stateService.currentTransform$.pipe(a.map(function(e){return null}),a.skip(1)).subscribe(this._tagCreator.delete$);this._createSubscription=this._mouseEventToBasic$(this._container.mouseService.filtered$(this._name,this._container.mouseService.mouseDragStart$)).pipe(a.filter(this._validateBasic)).subscribe(this._tagCreator.createRect$);this._initializeAnchorIndexingSubscription=this._tagCreator.tag$.pipe(a.filter(function(e){return!!e})).subscribe(function(e){e.geometry.initializeAnchorIndexing()});var t=i.combineLatest(i.merge(this._container.mouseService.filtered$(this._name,this._container.mouseService.mouseMove$),this._container.mouseService.filtered$(this._name,this._container.mouseService.domMouseMove$)),this._container.renderService.renderCamera$).pipe(a.withLatestFrom(this._navigator.stateService.currentTransform$),a.map(function(e){var t=e[0],r=t[0],n=t[1],i=e[1];return o._mouseEventToBasic(r,o._container.element,n,i)}));this._setVertexSubscription=this._tagCreator.tag$.pipe(a.switchMap(function(e){return!!e?i.combineLatest(i.of(e),t,o._navigator.stateService.currentTransform$):i.empty()})).subscribe(function(e){var t=e[0],r=e[1],n=e[2];t.geometry.setOppositeVertex2d(r,n)});var r=this._container.mouseService.mouseDragEnd$.pipe(a.withLatestFrom(this._mouseEventToBasic$(this._container.mouseService.filtered$(this._name,this._container.mouseService.mouseDrag$)).pipe(a.filter(this._validateBasic)),function(e,t){return t}),a.share());this._addPointSubscription=this._tagCreator.tag$.pipe(a.switchMap(function(e){return!!e?i.combineLatest(i.of(e),r):i.empty()})).subscribe(function(e){var t=e[0],r=e[1];var n=t.geometry;if(!n.validate(r)){r=n.getNonAdjustedVertex2d(3)}t.addPoint(r)});this._geometryCreatedSubscription=this._tagCreator.tag$.pipe(a.switchMap(function(e){return!!e?e.created$.pipe(a.map(function(e){return e.geometry})):i.empty()})).subscribe(this._geometryCreated$)};t.prototype._disableCreate=function(){this._container.mouseService.unclaimMouse(this._name);this._tagCreator.delete$.next(null);this._addPointSubscription.unsubscribe();this._createSubscription.unsubscribe();this._deleteSubscription.unsubscribe();this._geometryCreatedSubscription.unsubscribe();this._initializeAnchorIndexingSubscription.unsubscribe();this._setVertexSubscription.unsubscribe()};t.prototype._getNameExtension=function(){return"create-rect-drag"};return t}(o.CreateHandlerBase);r.CreateRectDragHandler=s;r.default=s},{"../../../Component":275,rxjs:27,"rxjs/operators":225}],361:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var i=e("rxjs/operators");var o=e("../../../Component");var a=function(e){n(t,e);function t(){return e!==null&&e.apply(this,arguments)||this}Object.defineProperty(t.prototype,"_create$",{get:function(){return this._tagCreator.createRect$},enumerable:true,configurable:true});t.prototype._addPoint=function(e,t){var r=e.geometry;if(!r.validate(t)){t=r.getNonAdjustedVertex2d(3)}e.addPoint(t)};t.prototype._enable=function(){e.prototype._enable.call(this);this._initializeAnchorIndexingSubscription=this._tagCreator.tag$.pipe(i.filter(function(e){return!!e})).subscribe(function(e){e.geometry.initializeAnchorIndexing()})};t.prototype._disable=function(){e.prototype._disable.call(this);this._initializeAnchorIndexingSubscription.unsubscribe()};t.prototype._getNameExtension=function(){return"create-rect"};t.prototype._setVertex2d=function(e,t,r){e.geometry.setOppositeVertex2d(t,r)};return t}(o.CreateVertexHandler);r.CreateRectHandler=a;r.default=a},{"../../../Component":275,"rxjs/operators":225}],362:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var i=e("rxjs");var o=e("rxjs/operators");var a=e("../../../Component");var s=function(e){n(t,e);function t(){return e!==null&&e.apply(this,arguments)||this}t.prototype._enableCreate=function(){var a=this;this._container.mouseService.deferPixels(this._name,4);var e=this._navigator.stateService.currentTransform$.pipe(o.map(function(e){}),o.publishReplay(1),o.refCount());this._deleteSubscription=e.pipe(o.skip(1)).subscribe(this._tagCreator.delete$);var t=this._mouseEventToBasic$(this._container.mouseService.proximateClick$).pipe(o.share());this._createSubscription=e.pipe(o.switchMap(function(){return t.pipe(o.filter(a._validateBasic),o.take(1))})).subscribe(this._create$);this._setVertexSubscription=this._tagCreator.tag$.pipe(o.switchMap(function(e){return!!e?i.combineLatest(i.of(e),i.merge(a._container.mouseService.mouseMove$,a._container.mouseService.domMouseMove$),a._container.renderService.renderCamera$,a._navigator.stateService.currentTransform$):i.empty()})).subscribe(function(e){var t=e[0],r=e[1],n=e[2],i=e[3];var o=a._mouseEventToBasic(r,a._container.element,n,i);a._setVertex2d(t,o,i)});this._addPointSubscription=this._tagCreator.tag$.pipe(o.switchMap(function(e){return!!e?i.combineLatest(i.of(e),t):i.empty()})).subscribe(function(e){var t=e[0],r=e[1];a._addPoint(t,r)});this._geometryCreateSubscription=this._tagCreator.tag$.pipe(o.switchMap(function(e){return!!e?e.created$.pipe(o.map(function(e){return e.geometry})):i.empty()})).subscribe(this._geometryCreated$)};t.prototype._disableCreate=function(){this._container.mouseService.undeferPixels(this._name);this._tagCreator.delete$.next(null);this._addPointSubscription.unsubscribe();this._createSubscription.unsubscribe();this._deleteSubscription.unsubscribe();this._geometryCreateSubscription.unsubscribe();this._setVertexSubscription.unsubscribe()};return t}(a.CreateHandlerBase);r.CreateVertexHandler=s;r.default=s},{"../../../Component":275,rxjs:27,"rxjs/operators":225}],363:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var i=e("rxjs");var o=e("rxjs/operators");var u=e("../../../Component");var a=function(a){n(e,a);function e(e,t,r,n,i){var o=a.call(this,e,t,r,n)||this;o._tagSet=i;return o}e.prototype._enable=function(){var s=this;var e=this._tagSet.changed$.pipe(o.map(function(e){return e.getAll()}),o.switchMap(function(e){return i.from(e).pipe(o.mergeMap(function(e){return e.interact$}))}),o.switchMap(function(e){return i.concat(i.of(e),s._container.mouseService.documentMouseUp$.pipe(o.map(function(){return{offsetX:0,offsetY:0,operation:u.TagOperation.None,tag:null}}),o.first()))}),o.share());var t=i.merge(this._container.mouseService.mouseMove$,this._container.mouseService.domMouseMove$).pipe(o.share());this._claimMouseSubscription=e.pipe(o.switchMap(function(e){return!!e.tag?s._container.mouseService.domMouseDragStart$:i.empty()})).subscribe(function(){s._container.mouseService.claimMouse(s._name,3)});this._cursorSubscription=e.pipe(o.map(function(e){return e.cursor}),o.distinctUntilChanged()).subscribe(function(e){var t=["crosshair","move","nesw-resize","nwse-resize"];for(var r=0,n=t;r<n.length;r++){var i=n[r];s._container.element.classList.remove("component-tag-edit-"+i)}if(!!e){s._container.element.classList.add("component-tag-edit-"+e)}});this._unclaimMouseSubscription=this._container.mouseService.filtered$(this._name,this._container.mouseService.domMouseDragEnd$).subscribe(function(e){s._container.mouseService.unclaimMouse(s._name)});this._preventDefaultSubscription=e.pipe(o.switchMap(function(e){return!!e.tag?s._container.mouseService.documentMouseMove$:i.empty()})).subscribe(function(e){e.preventDefault()});this._updateGeometrySubscription=e.pipe(o.switchMap(function(e){if(e.operation===u.TagOperation.None||!e.tag){return i.empty()}var t=s._container.mouseService.filtered$(s._name,s._container.mouseService.domMouseDrag$).pipe(o.filter(function(e){return s._viewportCoords.insideElement(e,s._container.element)}));return i.combineLatest(t,s._container.renderService.renderCamera$).pipe(o.withLatestFrom(i.of(e),s._navigator.stateService.currentTransform$,function(e,t,r){var n=e[0],i=e[1];return[n,i,t,r]}))})).subscribe(function(e){var t=e[0],r=e[1],n=e[2],i=e[3];var o=s._mouseEventToBasic(t,s._container.element,r,i,n.offsetX,n.offsetY);var a=n.tag.geometry;if(n.operation===u.TagOperation.Centroid){a.setCentroid2d(o,i)}else if(n.operation===u.TagOperation.Vertex){a.setVertex2d(n.vertexIndex,o,i)}})};e.prototype._disable=function(){this._claimMouseSubscription.unsubscribe();this._cursorSubscription.unsubscribe();this._preventDefaultSubscription.unsubscribe();this._unclaimMouseSubscription.unsubscribe();this._updateGeometrySubscription.unsubscribe()};e.prototype._getNameExtension=function(){return"edit-vertex"};return e}(u.TagHandlerBase);r.EditVertexHandler=a;r.default=a},{"../../../Component":275,rxjs:27,"rxjs/operators":225}],364:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var i=e("../../../Component");var o=function(o){n(e,o);function e(e,t,r,n){var i=o.call(this,e,t,r)||this;i._name=i._component.name+"-"+i._getNameExtension();i._viewportCoords=n;return i}e.prototype._getConfiguration=function(e){return{}};e.prototype._mouseEventToBasic=function(e,t,r,n,i,o){i=i!=null?i:0;o=o!=null?o:0;var a=this._viewportCoords.canvasPosition(e,t),s=a[0],u=a[1];var c=this._viewportCoords.canvasToBasic(s-i,u-o,t,n,r.perspective);return c};return e}(i.HandlerBase);r.TagHandlerBase=o;r.default=o},{"../../../Component":275}],365:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("rxjs/operators");var i=e("three");var L=e("virtual-dom");var o=e("rxjs");var I=e("../../../Component");var a=e("../../../Geo");var s=function(){function e(e,t,r,n){var i=this;this._geometry=e;this._options={color:t.color==null?16777215:t.color};this._transform=r;this._viewportCoords=!!n?n:new a.ViewportCoords;this._outline=this._createOutine();this._glObjects=[this._outline];this._aborted$=new o.Subject;this._created$=new o.Subject;this._glObjectsChanged$=new o.Subject;this._geometryChangedSubscription=this._geometry.changed$.subscribe(function(e){i._disposeOutline();i._outline=i._createOutine();i._glObjects=[i._outline];i._glObjectsChanged$.next(i)})}Object.defineProperty(e.prototype,"geometry",{get:function(){return this._geometry},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"glObjects",{get:function(){return this._glObjects},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"aborted$",{get:function(){return this._aborted$},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"created$",{get:function(){return this._created$},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"glObjectsChanged$",{get:function(){return this._glObjectsChanged$},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"geometryChanged$",{get:function(){var t=this;return this._geometry.changed$.pipe(n.map(function(e){return t}))},enumerable:true,configurable:true});e.prototype.dispose=function(){this._disposeOutline();this._geometryChangedSubscription.unsubscribe()};e.prototype.getDOMObjects=function(e,t){var r=this;var n=[];var i={offsetHeight:t.height,offsetWidth:t.width};var o=function(e){e.stopPropagation();r._aborted$.next(r)};if(this._geometry instanceof I.RectGeometry){var a=this._geometry.anchorIndex;var s=a===undefined?1:a;var u=this._geometry.getVertex2d(s),c=u[0],h=u[1];var l=this._viewportCoords.basicToCanvasSafe(c,h,i,this._transform,e);if(l!=null){var p=this._colorToBackground(this._options.color);var f=this._canvasToTransform(l);var d={style:{background:p,transform:f}};var v={onclick:o,style:{transform:f}};n.push(L.h("div.TagInteractor",v,[]));n.push(L.h("div.TagVertex",d,[]))}}else if(this._geometry instanceof I.PolygonGeometry){var m=this._geometry;var g=m.getVertex2d(0),y=g[0],_=g[1];var b=this._viewportCoords.basicToCanvasSafe(y,_,i,this._transform,e);if(b!=null){var x=m.polygon.length>4?function(e){e.stopPropagation();m.removeVertex2d(m.polygon.length-2);r._created$.next(r)}:o;var f=this._canvasToTransform(b);var v={onclick:x,style:{transform:f}};var w=m.polygon.length>4?"TagCompleter":"TagInteractor";n.push(L.h("div."+w,v,[]))}if(m.polygon.length>3){var S=m.getVertex2d(m.polygon.length-3),M=S[0],E=S[1];var C=this._viewportCoords.basicToCanvasSafe(M,E,i,this._transform,e);if(C!=null){var T=function(e){e.stopPropagation();m.removeVertex2d(m.polygon.length-3)};var f=this._canvasToTransform(C);var v={onclick:T,style:{transform:f}};n.push(L.h("div.TagInteractor",v,[]))}}var O=m.polygon.slice();O.splice(-2,2);for(var P=0,A=O;P<A.length;P++){var j=A[P];var R=this._viewportCoords.basicToCanvasSafe(j[0],j[1],i,this._transform,e);if(R!=null){var p=this._colorToBackground(this._options.color);var f=this._canvasToTransform(R);var d={style:{background:p,transform:f}};n.push(L.h("div.TagVertex",d,[]))}}}return n};e.prototype.addPoint=function(e){if(this._geometry instanceof I.RectGeometry){var t=this._geometry;if(!t.validate(e)){return}this._created$.next(this)}else if(this._geometry instanceof I.PolygonGeometry){var r=this._geometry;r.addVertex2d(e)}};e.prototype._canvasToTransform=function(e){var t=Math.round(e[0]);var r=Math.round(e[1]);var n="translate(-50%,-50%) translate("+t+"px,"+r+"px)";return n};e.prototype._colorToBackground=function(e){return"#"+("000000"+e.toString(16)).substr(-6)};e.prototype._createOutine=function(){var e=this._geometry instanceof I.RectGeometry?this._geometry.getPoints3d(this._transform):this._geometry.getVertices3d(this._transform);var t=this._getLinePositions(e);var r=new i.BufferGeometry;r.addAttribute("position",new i.BufferAttribute(t,3));var n=new i.LineBasicMaterial({color:this._options.color,linewidth:1});return new i.Line(r,n)};e.prototype._disposeOutline=function(){if(this._outline==null){return}var e=this._outline;e.geometry.dispose();e.material.dispose();this._outline=null;this._glObjects=[]};e.prototype._getLinePositions=function(e){var t=e.length;var r=new Float32Array(t*3);for(var n=0;n<t;++n){var i=3*n;var o=e[n];r[i]=o[0];r[i+1]=o[1];r[i+2]=o[2]}return r};return e}();r.OutlineCreateTag=s;r.default=s},{"../../../Component":275,"../../../Geo":278,rxjs:27,"rxjs/operators":225,three:226,"virtual-dom":231}],366:[function(e,t,r){"use strict";var i=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var o=e("three");var U=e("virtual-dom");var G=e("../../../Component");var n=function(n){i(e,n);function e(e,t){var r=n.call(this,e,t)||this;r._fill=!t.gpano?r._createFill():t.fullPano&&e.domain===G.TagDomain.TwoDimensional&&e.geometry instanceof G.PolygonGeometry?r._createFill():null;r._holes=r._tag.lineWidth>=1?r._createHoles():[];r._outline=r._tag.lineWidth>=1?r._createOutline():null;r._geometryChangedSubscription=r._tag.geometry.changed$.subscribe(function(){if(r._fill!=null){r._updateFillGeometry()}if(r._holes.length>0){r._updateHoleGeometries()}if(r._outline!=null){r._updateOulineGeometry()}});r._changedSubscription=r._tag.changed$.subscribe(function(){var e=false;if(r._fill!=null){r._updateFillMaterial(r._fill.material)}if(r._outline==null){if(r._tag.lineWidth>=1){r._holes=r._createHoles();r._outline=r._createOutline();e=true}}else{r._updateHoleMaterials();r._updateOutlineMaterial()}if(e){r._glObjectsChanged$.next(r)}});return r}e.prototype.dispose=function(){this._disposeFill();this._disposeHoles();this._disposeOutline();this._changedSubscription.unsubscribe();this._geometryChangedSubscription.unsubscribe()};e.prototype.getDOMObjects=function(e,t,r){var n=this;var i=[];var o=this._tag.geometry instanceof G.RectGeometry;var a=!this._transform.gpano;var s={offsetHeight:r.height,offsetWidth:r.width};if(this._tag.icon!=null&&(o||a)){var u=this._tag.geometry instanceof G.RectGeometry?this._tag.geometry.getVertex2d(this._tag.iconIndex):this._tag.geometry.getPoleOfInaccessibility2d(),c=u[0],h=u[1];var l=this._viewportCoords.basicToCanvasSafe(c,h,s,this._transform,t);if(l!=null){var p=function(e){n._interact$.next({offsetX:0,offsetY:0,operation:G.TagOperation.None,tag:n._tag})};if(e.loaded){var f=e.getDOMSprite(this._tag.icon,this._tag.iconFloat);var d=Math.round(l[0]);var v=Math.round(l[1]);var m="translate("+d+"px,"+v+"px)";var g=function(e){e.stopPropagation();n._tag.click$.next(n._tag)};var y={onclick:g,onmousedown:p,style:{transform:m}};i.push(U.h("div.TagSymbol",y,[f]))}}}else if(this._tag.text!=null&&(o||a)){var _=this._tag.geometry instanceof G.RectGeometry?this._tag.geometry.getVertex2d(3):this._tag.geometry.getPoleOfInaccessibility2d(),b=_[0],x=_[1];var w=this._viewportCoords.basicToCanvasSafe(b,x,s,this._transform,t);if(w!=null){var S=Math.round(w[0]);var M=Math.round(w[1]);var m=this._tag.geometry instanceof G.RectGeometry?"translate("+S+"px,"+M+"px)":"translate(-50%, -50%) translate("+S+"px,"+M+"px)";var p=function(e){n._interact$.next({offsetX:0,offsetY:0,operation:G.TagOperation.None,tag:n._tag})};var y={onmousedown:p,style:{color:this._colorToCss(this._tag.textColor),transform:m},textContent:this._tag.text};i.push(U.h("span.TagSymbol",y,[]))}}if(!this._tag.editable){return i}var E=this._colorToCss(this._tag.lineColor);if(this._tag.geometry instanceof G.RectGeometry){var C=this._tag.geometry.getCentroid2d(),T=C[0],O=C[1];var P=this._viewportCoords.basicToCanvasSafe(T,O,s,this._transform,t);if(P!=null){var p=this._interact(G.TagOperation.Centroid,"move");var A=Math.round(P[0]);var j=Math.round(P[1]);var m="translate(-50%, -50%) translate("+A+"px,"+j+"px)";var y={onmousedown:p,style:{background:E,transform:m}};i.push(U.h("div.TagMover",y,[]))}}var R=this._tag.geometry.getVertices2d();for(var L=0;L<R.length-1;L++){if(o&&(this._tag.icon!=null&&L===this._tag.iconIndex||this._tag.icon==null&&this._tag.text!=null&&L===3)){continue}var I=R[L],N=I[0],D=I[1];var k=this._viewportCoords.basicToCanvasSafe(N,D,s,this._transform,t);if(k==null){continue}var B=o?L%2===0?"nesw-resize":"nwse-resize":"crosshair";var p=this._interact(G.TagOperation.Vertex,B,L);var F=Math.round(k[0]);var $=Math.round(k[1]);var m="translate(-50%, -50%) translate("+F+"px,"+$+"px)";var y={onmousedown:p,style:{background:E,transform:m,cursor:B}};i.push(U.h("div.TagResizer",y,[]));if(!this._tag.indicateVertices){continue}var z={style:{background:E,transform:m}};i.push(U.h("div.TagVertex",z,[]))}return i};e.prototype.getGLObjects=function(){var e=[];if(this._fill!=null){e.push(this._fill)}for(var t=0,r=this._holes;t<r.length;t++){var n=r[t];e.push(n)}if(this._outline!=null){e.push(this._outline)}return e};e.prototype.getRetrievableObjects=function(){return this._fill!=null?[this._fill]:[]};e.prototype._colorToCss=function(e){return"#"+("000000"+e.toString(16)).substr(-6)};e.prototype._createFill=function(){var e=this._getTriangles();var t=new Float32Array(e);var r=new o.BufferGeometry;r.addAttribute("position",new o.BufferAttribute(t,3));r.computeBoundingSphere();var n=new o.MeshBasicMaterial({side:o.DoubleSide,transparent:true});this._updateFillMaterial(n);return new o.Mesh(r,n)};e.prototype._createHoles=function(){var e=[];if(this._tag.geometry instanceof G.PolygonGeometry){var t=this._getHoles3d();for(var r=0,n=t;r<n.length;r++){var i=n[r];var o=this._createLine(i);e.push(o)}}return e};e.prototype._createLine=function(e){var t=this._getLinePositions(e);var r=new o.BufferGeometry;r.addAttribute("position",new o.BufferAttribute(t,3));r.computeBoundingSphere();var n=new o.LineBasicMaterial;this._updateLineBasicMaterial(n);var i=new o.Line(r,n);i.renderOrder=1;return i};e.prototype._createOutline=function(){return this._createLine(this._getPoints3d())};e.prototype._disposeFill=function(){if(this._fill==null){return}this._fill.geometry.dispose();this._fill.material.dispose();this._fill=null};e.prototype._disposeHoles=function(){for(var e=0,t=this._holes;e<t.length;e++){var r=t[e];r.geometry.dispose();r.material.dispose()}this._holes=[]};e.prototype._disposeOutline=function(){if(this._outline==null){return}this._outline.geometry.dispose();this._outline.material.dispose();this._outline=null};e.prototype._getLinePositions=function(e){var t=e.length;var r=new Float32Array(t*3);for(var n=0;n<t;++n){var i=3*n;var o=e[n];r[i+0]=o[0];r[i+1]=o[1];r[i+2]=o[2]}return r};e.prototype._getHoles3d=function(){var e=this._tag.geometry;return this._in3dDomain()?e.getHoleVertices3d(this._transform):e.getHolePoints3d(this._transform)};e.prototype._getPoints3d=function(){return this._in3dDomain()?this._tag.geometry.getVertices3d(this._transform):this._tag.geometry.getPoints3d(this._transform)};e.prototype._getTriangles=function(){return this._in3dDomain()?this._tag.geometry.get3dDomainTriangles3d(this._transform):this._tag.geometry.getTriangles3d(this._transform)};e.prototype._in3dDomain=function(){return this._tag.geometry instanceof G.PolygonGeometry&&this._tag.domain===G.TagDomain.ThreeDimensional};e.prototype._interact=function(n,i,o){var a=this;return function(e){var t=e.offsetX-e.target.offsetWidth/2;var r=e.offsetY-e.target.offsetHeight/2;a._interact$.next({cursor:i,offsetX:t,offsetY:r,operation:n,tag:a._tag,vertexIndex:o})}};e.prototype._updateFillGeometry=function(){var e=this._getTriangles();var t=new Float32Array(e);var r=this._fill.geometry;var n=r.getAttribute("position");if(n.array.length===t.length){n.set(t);n.needsUpdate=true}else{r.removeAttribute("position");r.addAttribute("position",new o.BufferAttribute(t,3))}r.computeBoundingSphere()};e.prototype._updateFillMaterial=function(e){e.color=new o.Color(this._tag.fillColor);e.opacity=this._tag.fillOpacity;e.needsUpdate=true};e.prototype._updateHoleGeometries=function(){var e=this._getHoles3d();if(e.length!==this._holes.length){throw new Error("Changing the number of holes is not supported.")}for(var t=0;t<this._holes.length;t++){var r=e[t];var n=this._holes[t];this._updateLine(n,r)}};e.prototype._updateHoleMaterials=function(){for(var e=0,t=this._holes;e<t.length;e++){var r=t[e];var n=r.material;this._updateLineBasicMaterial(n)}};e.prototype._updateLine=function(e,t){var r=this._getLinePositions(t);var n=e.geometry;var i=n.getAttribute("position");i.set(r);i.needsUpdate=true;n.computeBoundingSphere()};e.prototype._updateOulineGeometry=function(){this._updateLine(this._outline,this._getPoints3d())};e.prototype._updateOutlineMaterial=function(){var e=this._outline.material;this._updateLineBasicMaterial(e)};e.prototype._updateLineBasicMaterial=function(e){e.color=new o.Color(this._tag.lineColor);e.linewidth=Math.max(this._tag.lineWidth,1);e.visible=this._tag.lineWidth>=1&&this._tag.lineOpacity>0;e.opacity=this._tag.lineOpacity;e.transparent=this._tag.lineOpacity<1;e.needsUpdate=true};return e}(G.RenderTag);r.OutlineRenderTag=n},{"../../../Component":275,three:226,"virtual-dom":231}],367:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var u=e("rxjs");var c=e("../../../Component");var h=e("../../../Viewer");var i=function(a){n(s,a);function s(e,t,r){var n=a.call(this,e,t)||this;r=!!r?r:{};var i=r.domain!=null&&t instanceof c.PolygonGeometry?r.domain:c.TagDomain.TwoDimensional;var o=n._twoDimensionalPolygon(i,t);n._domain=i;n._editable=r.editable==null||o?false:r.editable;n._fillColor=r.fillColor==null?16777215:r.fillColor;n._fillOpacity=r.fillOpacity==null?0:r.fillOpacity;n._icon=r.icon===undefined?null:r.icon;n._iconFloat=r.iconFloat==null?h.Alignment.Center:r.iconFloat;n._iconIndex=r.iconIndex==null?3:r.iconIndex;n._indicateVertices=r.indicateVertices==null?true:r.indicateVertices;n._lineColor=r.lineColor==null?16777215:r.lineColor;n._lineOpacity=r.lineOpacity==null?1:r.lineOpacity;n._lineWidth=r.lineWidth==null?1:r.lineWidth;n._text=r.text===undefined?null:r.text;n._textColor=r.textColor==null?16777215:r.textColor;n._click$=new u.Subject;n._click$.subscribe(function(e){n.fire(s.click,n)});return n}Object.defineProperty(s.prototype,"click$",{get:function(){return this._click$},enumerable:true,configurable:true});Object.defineProperty(s.prototype,"domain",{get:function(){return this._domain},enumerable:true,configurable:true});Object.defineProperty(s.prototype,"editable",{get:function(){return this._editable},set:function(e){if(this._twoDimensionalPolygon(this._domain,this._geometry)){return}this._editable=e;this._notifyChanged$.next(this)},enumerable:true,configurable:true});Object.defineProperty(s.prototype,"fillColor",{get:function(){return this._fillColor},set:function(e){this._fillColor=e;this._notifyChanged$.next(this)},enumerable:true,configurable:true});Object.defineProperty(s.prototype,"fillOpacity",{get:function(){return this._fillOpacity},set:function(e){this._fillOpacity=e;this._notifyChanged$.next(this)},enumerable:true,configurable:true});Object.defineProperty(s.prototype,"geometry",{get:function(){return this._geometry},enumerable:true,configurable:true});Object.defineProperty(s.prototype,"icon",{get:function(){return this._icon},set:function(e){this._icon=e;this._notifyChanged$.next(this)},enumerable:true,configurable:true});Object.defineProperty(s.prototype,"iconFloat",{get:function(){return this._iconFloat},set:function(e){this._iconFloat=e;this._notifyChanged$.next(this)},enumerable:true,configurable:true});Object.defineProperty(s.prototype,"iconIndex",{get:function(){return this._iconIndex},set:function(e){this._iconIndex=e;this._notifyChanged$.next(this)},enumerable:true,configurable:true});Object.defineProperty(s.prototype,"indicateVertices",{get:function(){return this._indicateVertices},set:function(e){this._indicateVertices=e;this._notifyChanged$.next(this)},enumerable:true,configurable:true});Object.defineProperty(s.prototype,"lineColor",{get:function(){return this._lineColor},set:function(e){this._lineColor=e;this._notifyChanged$.next(this)},enumerable:true,configurable:true});Object.defineProperty(s.prototype,"lineOpacity",{get:function(){return this._lineOpacity},set:function(e){this._lineOpacity=e;this._notifyChanged$.next(this)},enumerable:true,configurable:true});Object.defineProperty(s.prototype,"lineWidth",{get:function(){return this._lineWidth},set:function(e){this._lineWidth=e;this._notifyChanged$.next(this)},enumerable:true,configurable:true});Object.defineProperty(s.prototype,"text",{get:function(){return this._text},set:function(e){this._text=e;this._notifyChanged$.next(this)},enumerable:true,configurable:true});Object.defineProperty(s.prototype,"textColor",{get:function(){return this._textColor},set:function(e){this._textColor=e;this._notifyChanged$.next(this)},enumerable:true,configurable:true});s.prototype.setOptions=function(e){var t=this._twoDimensionalPolygon(this._domain,this._geometry);this._editable=t||e.editable==null?this._editable:e.editable;this._icon=e.icon===undefined?this._icon:e.icon;this._iconFloat=e.iconFloat==null?this._iconFloat:e.iconFloat;this._iconIndex=e.iconIndex==null?this._iconIndex:e.iconIndex;this._indicateVertices=e.indicateVertices==null?this._indicateVertices:e.indicateVertices;this._lineColor=e.lineColor==null?this._lineColor:e.lineColor;this._lineWidth=e.lineWidth==null?this._lineWidth:e.lineWidth;this._fillColor=e.fillColor==null?this._fillColor:e.fillColor;this._fillOpacity=e.fillOpacity==null?this._fillOpacity:e.fillOpacity;this._text=e.text===undefined?this._text:e.text;this._textColor=e.textColor==null?this._textColor:e.textColor;this._notifyChanged$.next(this)};s.prototype._twoDimensionalPolygon=function(e,t){return e!==c.TagDomain.ThreeDimensional&&t instanceof c.PolygonGeometry};s.click="click";return s}(c.Tag);r.OutlineTag=i;r.default=i},{"../../../Component":275,"../../../Viewer":286,rxjs:27}],368:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("rxjs");var i=e("../../../Geo");var o=function(){function e(e,t,r){this._tag=e;this._transform=t;this._viewportCoords=!!r?r:new i.ViewportCoords;this._glObjectsChanged$=new n.Subject;this._interact$=new n.Subject}Object.defineProperty(e.prototype,"glObjectsChanged$",{get:function(){return this._glObjectsChanged$},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"interact$",{get:function(){return this._interact$},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"tag",{get:function(){return this._tag},enumerable:true,configurable:true});return e}();r.RenderTag=o;r.default=o},{"../../../Geo":278,rxjs:27}],369:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var S=e("virtual-dom");var M=e("../../../Component");var E=e("../../../Viewer");var i=function(e){n(t,e);function t(){return e!==null&&e.apply(this,arguments)||this}t.prototype.dispose=function(){};t.prototype.getDOMObjects=function(e,t,r){var n=this;var i=this._tag;var o={offsetHeight:r.height,offsetWidth:r.width};var a=[];var s=i.geometry.getCentroid2d(),u=s[0],c=s[1];var h=this._viewportCoords.basicToCanvasSafe(u,c,o,this._transform,t);if(h!=null){var l=function(e){n._interact$.next({offsetX:0,offsetY:0,operation:M.TagOperation.None,tag:i})};var p=Math.round(h[0]);var f=Math.round(h[1]);if(i.icon!=null){if(e.loaded){var d=e.getDOMSprite(i.icon,E.Alignment.Bottom);var v="translate("+p+"px,"+(f+8)+"px)";var m={onmousedown:l,style:{pointerEvents:"all",transform:v}};a.push(S.h("div",m,[d]))}}else if(i.text!=null){var g="translate(-50%,0%) translate("+p+"px,"+(f+8)+"px)";var m={onmousedown:l,style:{color:this._colorToCss(i.textColor),transform:g},textContent:i.text};a.push(S.h("span.TagSymbol",m,[]))}var y=this._interact(M.TagOperation.Centroid,i,"move");var _=this._colorToCss(i.color);var b="translate(-50%,-50%) translate("+p+"px,"+f+"px)";if(i.editable){var x={onmousedown:y,style:{background:_,transform:b}};a.push(S.h("div.TagSpotInteractor",x,[]))}var w={style:{background:_,transform:b}};a.push(S.h("div.TagVertex",w,[]))}return a};t.prototype.getGLObjects=function(){return[]};t.prototype.getRetrievableObjects=function(){return[]};t.prototype._colorToCss=function(e){return"#"+("000000"+e.toString(16)).substr(-6)};t.prototype._interact=function(n,i,o,a){var s=this;return function(e){var t=e.offsetX-e.target.offsetWidth/2;var r=e.offsetY-e.target.offsetHeight/2;s._interact$.next({cursor:o,offsetX:t,offsetY:r,operation:n,tag:i,vertexIndex:a})}};return t}(M.RenderTag);r.SpotRenderTag=i},{"../../../Component":275,"../../../Viewer":286,"virtual-dom":231}],370:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var i=e("../../../Component");var o=function(i){n(e,i);function e(e,t,r){var n=i.call(this,e,t)||this;r=!!r?r:{};n._color=r.color==null?16777215:r.color;n._editable=r.editable==null?false:r.editable;n._icon=r.icon===undefined?null:r.icon;n._text=r.text===undefined?null:r.text;n._textColor=r.textColor==null?16777215:r.textColor;return n}Object.defineProperty(e.prototype,"color",{get:function(){return this._color},set:function(e){this._color=e;this._notifyChanged$.next(this)},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"editable",{get:function(){return this._editable},set:function(e){this._editable=e;this._notifyChanged$.next(this)},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"icon",{get:function(){return this._icon},set:function(e){this._icon=e;this._notifyChanged$.next(this)},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"text",{get:function(){return this._text},set:function(e){this._text=e;this._notifyChanged$.next(this)},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"textColor",{get:function(){return this._textColor},set:function(e){this._textColor=e;this._notifyChanged$.next(this)},enumerable:true,configurable:true});e.prototype.setOptions=function(e){this._color=e.color==null?this._color:e.color;this._editable=e.editable==null?this._editable:e.editable;this._icon=e.icon===undefined?this._icon:e.icon;this._text=e.text===undefined?this._text:e.text;this._textColor=e.textColor==null?this._textColor:e.textColor;this._notifyChanged$.next(this)};return e}(i.Tag);r.SpotTag=o;r.default=o},{"../../../Component":275}],371:[function(e,t,r){"use strict";var o=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var a=e("rxjs/operators");var s=e("rxjs");var n=e("../../../Utils");var i=function(n){o(i,n);function i(e,t){var r=n.call(this)||this;r._id=e;r._geometry=t;r._notifyChanged$=new s.Subject;r._notifyChanged$.subscribe(function(e){r.fire(i.changed,r)});r._geometry.changed$.subscribe(function(e){r.fire(i.geometrychanged,r)});return r}Object.defineProperty(i.prototype,"id",{get:function(){return this._id},enumerable:true,configurable:true});Object.defineProperty(i.prototype,"geometry",{get:function(){return this._geometry},enumerable:true,configurable:true});Object.defineProperty(i.prototype,"changed$",{get:function(){return this._notifyChanged$},enumerable:true,configurable:true});Object.defineProperty(i.prototype,"geometryChanged$",{get:function(){var t=this;return this._geometry.changed$.pipe(a.map(function(e){return t}),a.share())},enumerable:true,configurable:true});i.changed="changed";i.geometrychanged="geometrychanged";return i}(n.EventEmitter);r.Tag=i;r.default=i},{"../../../Utils":285,rxjs:27,"rxjs/operators":225}],372:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n;(function(e){e[e["TwoDimensional"]=0]="TwoDimensional";e[e["ThreeDimensional"]=1]="ThreeDimensional"})(n=r.TagDomain||(r.TagDomain={}));r.default=n},{}],373:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=function(){function e(e,t,r){this._component=e;this._container=t;this._navigator=r;this._enabled=false}Object.defineProperty(e.prototype,"isEnabled",{get:function(){return this._enabled},enumerable:true,configurable:true});e.prototype.enable=function(){if(this._enabled||!this._component.activated){return}this._enable();this._enabled=true;this._component.configure(this._getConfiguration(true))};e.prototype.disable=function(){if(!this._enabled){return}this._disable();this._enabled=false;if(this._component.activated){this._component.configure(this._getConfiguration(false))}};return e}();r.HandlerBase=n;r.default=n},{}],374:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var b=e("three");var h=e("../../Component");var n=function(){function e(e,t){this._imagePlaneDepth=e!=null?e:200;this._imageSphereRadius=t!=null?t:200}e.prototype.createMesh=function(e,t){var r=e.pano?this._createImageSphere(e,t):this._createImagePlane(e,t);return r};e.prototype.createFlatMesh=function(e,t,r,n,i,o){var a=this._createTexture(e.image);var s=this._createDistortedPlaneMaterialParameters(t,a);var u=new b.ShaderMaterial(s);var c=this._getFlatImagePlaneGeoFromBasic(t,r,n,i,o);return new b.Mesh(c,u)};e.prototype.createCurtainMesh=function(e,t){if(e.pano&&!e.fullPano){throw new Error("Cropped panoramas cannot have curtain.")}return e.pano?this._createSphereCurtainMesh(e,t):this._createCurtainMesh(e,t)};e.prototype.createDistortedCurtainMesh=function(e,t){if(e.pano){throw new Error("Cropped panoramas cannot have curtain.")}return this._createDistortedCurtainMesh(e,t)};e.prototype._createCurtainMesh=function(e,t){var r=this._createTexture(e.image);var n=this._createCurtainPlaneMaterialParameters(t,r);var i=new b.ShaderMaterial(n);var o=this._useMesh(t,e)?this._getImagePlaneGeo(t,e):this._getRegularFlatImagePlaneGeo(t);return new b.Mesh(o,i)};e.prototype._createDistortedCurtainMesh=function(e,t){var r=this._createTexture(e.image);var n=this._createDistortedCurtainPlaneMaterialParameters(t,r);var i=new b.ShaderMaterial(n);var o=this._getRegularFlatImagePlaneGeo(t);return new b.Mesh(o,i)};e.prototype._createSphereCurtainMesh=function(e,t){var r=this._createTexture(e.image);var n=this._createCurtainSphereMaterialParameters(t,r);var i=new b.ShaderMaterial(n);return this._useMesh(t,e)?new b.Mesh(this._getImageSphereGeo(t,e),i):new b.Mesh(this._getFlatImageSphereGeo(t),i)};e.prototype._createImageSphere=function(e,t){var r=this._createTexture(e.image);var n=this._createSphereMaterialParameters(t,r);var i=new b.ShaderMaterial(n);var o=this._useMesh(t,e)?new b.Mesh(this._getImageSphereGeo(t,e),i):new b.Mesh(this._getFlatImageSphereGeo(t),i);return o};e.prototype._createImagePlane=function(e,t){var r=this._createTexture(e.image);var n=this._createPlaneMaterialParameters(t,r);var i=new b.ShaderMaterial(n);var o=this._useMesh(t,e)?this._getImagePlaneGeo(t,e):this._getRegularFlatImagePlaneGeo(t);return new b.Mesh(o,i)};e.prototype._createSphereMaterialParameters=function(e,t){var r=e.gpano;var n=(r.FullPanoWidthPixels-r.CroppedAreaImageWidthPixels)/2;var i=2*Math.PI*(r.CroppedAreaLeftPixels-n)/r.FullPanoWidthPixels;var o=2*Math.PI*r.CroppedAreaImageWidthPixels/r.FullPanoWidthPixels;var a=(r.FullPanoHeightPixels-r.CroppedAreaImageHeightPixels)/2;var s=Math.PI*(a-r.CroppedAreaTopPixels)/r.FullPanoHeightPixels;var u=Math.PI*r.CroppedAreaImageHeightPixels/r.FullPanoHeightPixels;var c={depthWrite:false,fragmentShader:h.Shaders.equirectangular.fragment,side:b.DoubleSide,transparent:true,uniforms:{opacity:{type:"f",value:1},phiLength:{type:"f",value:o},phiShift:{type:"f",value:i},projectorMat:{type:"m4",value:e.rt},projectorTex:{type:"t",value:t},thetaLength:{type:"f",value:u},thetaShift:{type:"f",value:s}},vertexShader:h.Shaders.equirectangular.vertex};return c};e.prototype._createCurtainSphereMaterialParameters=function(e,t){var r=e.gpano;var n=(r.FullPanoWidthPixels-r.CroppedAreaImageWidthPixels)/2;var i=2*Math.PI*(r.CroppedAreaLeftPixels-n)/r.FullPanoWidthPixels;var o=2*Math.PI*r.CroppedAreaImageWidthPixels/r.FullPanoWidthPixels;var a=(r.FullPanoHeightPixels-r.CroppedAreaImageHeightPixels)/2;var s=Math.PI*(a-r.CroppedAreaTopPixels)/r.FullPanoHeightPixels;var u=Math.PI*r.CroppedAreaImageHeightPixels/r.FullPanoHeightPixels;var c={depthWrite:false,fragmentShader:h.Shaders.equirectangularCurtain.fragment,side:b.DoubleSide,transparent:true,uniforms:{curtain:{type:"f",value:1},opacity:{type:"f",value:1},phiLength:{type:"f",value:o},phiShift:{type:"f",value:i},projectorMat:{type:"m4",value:e.rt},projectorTex:{type:"t",value:t},thetaLength:{type:"f",value:u},thetaShift:{type:"f",value:s}},vertexShader:h.Shaders.equirectangularCurtain.vertex};return c};e.prototype._createPlaneMaterialParameters=function(e,t){var r={depthWrite:false,fragmentShader:h.Shaders.perspective.fragment,side:b.DoubleSide,transparent:true,uniforms:{focal:{type:"f",value:e.focal},k1:{type:"f",value:e.ck1},k2:{type:"f",value:e.ck2},opacity:{type:"f",value:1},projectorMat:{type:"m4",value:e.basicRt},projectorTex:{type:"t",value:t},radial_peak:{type:"f",value:!!e.radialPeak?e.radialPeak:0},scale_x:{type:"f",value:Math.max(e.basicHeight,e.basicWidth)/e.basicWidth},scale_y:{type:"f",value:Math.max(e.basicWidth,e.basicHeight)/e.basicHeight}},vertexShader:h.Shaders.perspective.vertex};return r};e.prototype._createCurtainPlaneMaterialParameters=function(e,t){var r={depthWrite:false,fragmentShader:h.Shaders.perspectiveCurtain.fragment,side:b.DoubleSide,transparent:true,uniforms:{curtain:{type:"f",value:1},focal:{type:"f",value:e.focal},k1:{type:"f",value:e.ck1},k2:{type:"f",value:e.ck2},opacity:{type:"f",value:1},projectorMat:{type:"m4",value:e.basicRt},projectorTex:{type:"t",value:t},radial_peak:{type:"f",value:!!e.radialPeak?e.radialPeak:0},scale_x:{type:"f",value:Math.max(e.basicHeight,e.basicWidth)/e.basicWidth},scale_y:{type:"f",value:Math.max(e.basicWidth,e.basicHeight)/e.basicHeight}},vertexShader:h.Shaders.perspectiveCurtain.vertex};return r};e.prototype._createDistortedCurtainPlaneMaterialParameters=function(e,t){var r={depthWrite:false,fragmentShader:h.Shaders.perspectiveDistortedCurtain.fragment,side:b.DoubleSide,transparent:true,uniforms:{curtain:{type:"f",value:1},opacity:{type:"f",value:1},projectorMat:{type:"m4",value:e.projectorMatrix()},projectorTex:{type:"t",value:t}},vertexShader:h.Shaders.perspectiveDistortedCurtain.vertex};return r};e.prototype._createDistortedPlaneMaterialParameters=function(e,t){var r={depthWrite:false,fragmentShader:h.Shaders.perspectiveDistorted.fragment,side:b.DoubleSide,transparent:true,uniforms:{opacity:{type:"f",value:1},projectorMat:{type:"m4",value:e.projectorMatrix()},projectorTex:{type:"t",value:t}},vertexShader:h.Shaders.perspectiveDistorted.vertex};return r};e.prototype._createTexture=function(e){var t=new b.Texture(e);t.minFilter=b.LinearFilter;t.needsUpdate=true;return t};e.prototype._useMesh=function(e,t){return t.mesh.vertices.length&&e.hasValidScale};e.prototype._getImageSphereGeo=function(e,t){var r=(new b.Matrix4).getInverse(e.srt);var n=5*e.scale;var i=this._imageSphereRadius*e.scale;var o=t.mesh.vertices;var a=o.length/3;var s=new Float32Array(o.length);for(var u=0;u<a;++u){var c=3*u;var h=o[c+0];var l=o[c+1];var p=o[c+2];var f=Math.sqrt(h*h+l*l+p*p);var d=Math.max(n,Math.min(f,i));var v=d/f;var m=new b.Vector3(h*v,l*v,p*v);m.applyMatrix4(r);s[c+0]=m.x;s[c+1]=m.y;s[c+2]=m.z}var g=t.mesh.faces;var y=new Uint16Array(g.length);for(var u=0;u<g.length;++u){y[u]=g[u]}var _=new b.BufferGeometry;_.addAttribute("position",new b.BufferAttribute(s,3));_.setIndex(new b.BufferAttribute(y,1));return _};e.prototype._getImagePlaneGeo=function(e,t){var r=3;var n=(new b.Matrix4).getInverse(e.srt);var i=5*e.scale;var o=this._imagePlaneDepth*e.scale;var a=t.mesh.vertices;var s=a.length/3;var u=new Float32Array(a.length);for(var c=0;c<s;++c){var h=3*c;var l=a[h+0];var p=a[h+1];var f=a[h+2];if(c<4){l*=r;p*=r}var d=Math.max(i,Math.min(f,o));var v=d/f;var m=new b.Vector3(l*v,p*v,d);m.applyMatrix4(n);u[h+0]=m.x;u[h+1]=m.y;u[h+2]=m.z}var g=t.mesh.faces;var y=new Uint16Array(g.length);for(var c=0;c<g.length;++c){y[c]=g[c]}var _=new b.BufferGeometry;_.addAttribute("position",new b.BufferAttribute(u,3));_.setIndex(new b.BufferAttribute(y,1));return _};e.prototype._getFlatImageSphereGeo=function(e){var t=e.gpano;var r=2*Math.PI*t.CroppedAreaLeftPixels/t.FullPanoWidthPixels;var n=2*Math.PI*t.CroppedAreaImageWidthPixels/t.FullPanoWidthPixels;var i=Math.PI*(t.FullPanoHeightPixels-t.CroppedAreaImageHeightPixels-t.CroppedAreaTopPixels)/t.FullPanoHeightPixels;var o=Math.PI*t.CroppedAreaImageHeightPixels/t.FullPanoHeightPixels;var a=new b.SphereGeometry(this._imageSphereRadius,20,40,r-Math.PI/2,n,i,o);a.applyMatrix((new b.Matrix4).getInverse(e.rt));return a};e.prototype._getRegularFlatImagePlaneGeo=function(e){var t=e.width;var r=e.height;var n=Math.max(t,r);var i=t/2/n;var o=r/2/n;return this._getFlatImagePlaneGeo(e,i,o)};e.prototype._getFlatImagePlaneGeo=function(e,t,r){var n=[];n.push(e.unprojectSfM([-t,-r],this._imagePlaneDepth));n.push(e.unprojectSfM([t,-r],this._imagePlaneDepth));n.push(e.unprojectSfM([t,r],this._imagePlaneDepth));n.push(e.unprojectSfM([-t,r],this._imagePlaneDepth));return this._createFlatGeometry(n)};e.prototype._getFlatImagePlaneGeoFromBasic=function(e,t,r,n,i){var o=[];o.push(e.unprojectBasic([t,n],this._imagePlaneDepth));o.push(e.unprojectBasic([r,n],this._imagePlaneDepth));o.push(e.unprojectBasic([r,i],this._imagePlaneDepth));o.push(e.unprojectBasic([t,i],this._imagePlaneDepth));return this._createFlatGeometry(o)};e.prototype._createFlatGeometry=function(e){var t=new Float32Array(12);for(var r=0;r<e.length;r++){var n=3*r;t[n+0]=e[r][0];t[n+1]=e[r][1];t[n+2]=e[r][2]}var i=new Uint16Array(6);i[0]=0;i[1]=1;i[2]=3;i[3]=1;i[4]=2;i[5]=3;var o=new b.BufferGeometry;o.addAttribute("position",new b.BufferAttribute(t,3));o.setIndex(new b.BufferAttribute(i,1));return o};return e}();r.MeshFactory=n;r.default=n},{"../../Component":275,three:226}],375:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("three");var i=function(){function e(){this.scene=new n.Scene;this.sceneOld=new n.Scene;this.imagePlanes=[];this.imagePlanesOld=[]}e.prototype.updateImagePlanes=function(e){this._dispose(this.imagePlanesOld,this.sceneOld);for(var t=0,r=this.imagePlanes;t<r.length;t++){var n=r[t];this.scene.remove(n);this.sceneOld.add(n)}for(var i=0,o=e;i<o.length;i++){var n=o[i];this.scene.add(n)}this.imagePlanesOld=this.imagePlanes;this.imagePlanes=e};e.prototype.addImagePlanes=function(e){for(var t=0,r=e;t<r.length;t++){var n=r[t];this.scene.add(n);this.imagePlanes.push(n)}};e.prototype.addImagePlanesOld=function(e){for(var t=0,r=e;t<r.length;t++){var n=r[t];this.sceneOld.add(n);this.imagePlanesOld.push(n)}};e.prototype.setImagePlanes=function(e){this._clear();this.addImagePlanes(e)};e.prototype.setImagePlanesOld=function(e){this._clearOld();this.addImagePlanesOld(e)};e.prototype.clear=function(){this._clear();this._clearOld()};e.prototype._clear=function(){this._dispose(this.imagePlanes,this.scene);this.imagePlanes.length=0};e.prototype._clearOld=function(){this._dispose(this.imagePlanesOld,this.sceneOld);this.imagePlanesOld.length=0};e.prototype._dispose=function(e,t){for(var r=0,n=e;r<n.length;r++){var i=n[r];t.remove(i);i.geometry.dispose();i.material.dispose();var o=i.material.uniforms.projectorTex.value;if(o!=null){o.dispose()}}};return e}();r.MeshScene=i;r.default=i},{three:226}],376:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var o=e("rxjs");var a=e("rxjs/operators");var n=function(){function e(){}e.filteredPairwiseMouseDrag$=function(n,i){return i.filtered$(n,i.mouseDragStart$).pipe(a.switchMap(function(e){var t=o.concat(o.of(e),i.filtered$(n,i.mouseDrag$));var r=i.filtered$(n,i.mouseDragEnd$).pipe(a.map(function(){return null}));return o.merge(t,r).pipe(a.takeWhile(function(e){return!!e}),a.startWith(null))}),a.pairwise(),a.filter(function(e){return e[0]!=null&&e[1]!=null}))};return e}();r.MouseOperator=n;r.default=n},{rxjs:27,"rxjs/operators":225}],377:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var o=e("rxjs");var a=e("rxjs/operators");var u=e("virtual-dom");var i=e("../../Component");var s=e("../../Geo");var c=e("../../State");var h=function(i){n(e,i);function e(e,t,r){var n=i.call(this,e,t,r)||this;n._viewportCoords=new s.ViewportCoords;n._zoomDelta$=new o.Subject;return n}e.prototype._activate=function(){var s=this;this._renderSubscription=o.combineLatest(this._navigator.stateService.currentState$,this._navigator.stateService.state$).pipe(a.map(function(e){var t=e[0],r=e[1];return[t.state.zoom,r]}),a.map(function(e){var t=e[0],r=e[1];var n=u.h("div.ZoomInIcon",[]);var i=t>=3||r===c.State.Waiting?u.h("div.ZoomInButtonDisabled",[n]):u.h("div.ZoomInButton",{onclick:function(){s._zoomDelta$.next(1)}},[n]);var o=u.h("div.ZoomOutIcon",[]);var a=t<=0||r===c.State.Waiting?u.h("div.ZoomOutButtonDisabled",[o]):u.h("div.ZoomOutButton",{onclick:function(){s._zoomDelta$.next(-1)}},[o]);return{name:s._name,vnode:u.h("div.ZoomContainer",{oncontextmenu:function(e){e.preventDefault()}},[i,a])}})).subscribe(this._container.domRenderer.render$);this._zoomSubscription=this._zoomDelta$.pipe(a.withLatestFrom(this._container.renderService.renderCamera$,this._navigator.stateService.currentTransform$)).subscribe(function(e){var t=e[0],r=e[1],n=e[2];var i=s._viewportCoords.unprojectFromViewport(0,0,r.perspective);var o=n.projectBasic(i.toArray());s._navigator.stateService.zoomIn(t,o)})};e.prototype._deactivate=function(){this._renderSubscription.unsubscribe();this._zoomSubscription.unsubscribe()};e.prototype._getDefaultConfiguration=function(){return{}};e.componentName="zoom";return e}(i.Component);r.ZoomComponent=h;i.ComponentService.register(h);r.default=h},{"../../Component":275,"../../Geo":278,"../../State":282,rxjs:27,"rxjs/operators":225,"virtual-dom":231}],378:[function(e,t,r){"use strict";var i=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var n=e("./MapillaryError");var o=function(r){i(n,r);function n(e){var t=r.call(this,e!=null?e:"The request was aborted.")||this;Object.setPrototypeOf(t,n.prototype);t.name="AbortMapillaryError";return t}return n}(n.MapillaryError);r.AbortMapillaryError=o;r.default=o},{"./MapillaryError":381}],379:[function(e,t,r){"use strict";var i=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var n=e("./MapillaryError");var o=function(r){i(n,r);function n(e){var t=r.call(this,e!=null?e:"The argument is not valid.")||this;Object.setPrototypeOf(t,n.prototype);t.name="ArgumentMapillaryError";return t}return n}(n.MapillaryError);r.ArgumentMapillaryError=o;r.default=o},{"./MapillaryError":381}],380:[function(e,t,r){"use strict";var i=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var n=e("./MapillaryError");var o=function(r){i(n,r);function n(e){var t=r.call(this,e)||this;Object.setPrototypeOf(t,n.prototype);t.name="GraphMapillaryError";return t}return n}(n.MapillaryError);r.GraphMapillaryError=o;r.default=o},{"./MapillaryError":381}],381:[function(e,t,r){"use strict";var i=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var n=function(r){i(n,r);function n(e){var t=r.call(this,e)||this;Object.setPrototypeOf(t,n.prototype);t.name="MapillaryError";return t}return n}(Error);r.MapillaryError=n;r.default=n},{}],382:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("three");var i=function(){function t(e){if(e!=null){this._position=(new n.Vector3).fromArray(e.unprojectSfM([0,0],0));this._lookat=(new n.Vector3).fromArray(e.unprojectSfM([0,0],10));this._up=e.upVector();this._focal=this._getFocal(e)}else{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}}Object.defineProperty(t.prototype,"position",{get:function(){return this._position},enumerable:true,configurable:true});Object.defineProperty(t.prototype,"lookat",{get:function(){return this._lookat},enumerable:true,configurable:true});Object.defineProperty(t.prototype,"up",{get:function(){return this._up},enumerable:true,configurable:true});Object.defineProperty(t.prototype,"focal",{get:function(){return this._focal},set:function(e){this._focal=e},enumerable:true,configurable:true});t.prototype.lerpCameras=function(e,t,r){this._position.subVectors(t.position,e.position).multiplyScalar(r).add(e.position);this._lookat.subVectors(t.lookat,e.lookat).multiplyScalar(r).add(e.lookat);this._up.subVectors(t.up,e.up).multiplyScalar(r).add(e.up);this._focal=(1-r)*e.focal+r*t.focal};t.prototype.copy=function(e){this._position.copy(e.position);this._lookat.copy(e.lookat);this._up.copy(e.up);this._focal=e.focal};t.prototype.clone=function(){var e=new t;e.position.copy(this._position);e.lookat.copy(this._lookat);e.up.copy(this._up);e.focal=this._focal;return e};t.prototype.diff=function(e){var t=this._position.distanceToSquared(e.position);var r=this._lookat.distanceToSquared(e.lookat);var n=this._up.distanceToSquared(e.up);var i=100*Math.abs(this._focal-e.focal);return Math.max(t,r,n,i)};t.prototype._getFocal=function(e){if(e.gpano==null){return e.focal}var t=Math.PI*e.gpano.CroppedAreaImageHeightPixels/e.gpano.FullPanoHeightPixels;var r=.5/Math.tan(t/2);return Math.min(1/(2*(Math.sqrt(2)-1)),Math.max(.5,r))};return t}();r.Camera=i},{three:226}],383:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("../Geo");var a=new n.GeoCoords;var s=new n.Spatial;function i(e,t,r){var n=a.geodeticToEnu(e.lat,e.lon,e.alt,r.lat,r.lon,r.alt);var i=s.rotate(n,t);var o=[-i.x,-i.y,-i.z];return o}r.computeTranslation=i},{"../Geo":278}],384:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=function(){function e(){this._wgs84a=6378137;this._wgs84b=6356752.31424518}e.prototype.geodeticToEnu=function(e,t,r,n,i,o){var a=this.geodeticToEcef(e,t,r);return this.ecefToEnu(a[0],a[1],a[2],n,i,o)};e.prototype.enuToGeodetic=function(e,t,r,n,i,o){var a=this.enuToEcef(e,t,r,n,i,o);return this.ecefToGeodetic(a[0],a[1],a[2])};e.prototype.ecefToEnu=function(e,t,r,n,i,o){var a=this.geodeticToEcef(n,i,o);var s=[e-a[0],t-a[1],r-a[2]];n=n*Math.PI/180;i=i*Math.PI/180;var u=Math.cos(n);var c=Math.sin(n);var h=Math.cos(i);var l=Math.sin(i);var p=-l*s[0]+h*s[1];var f=-c*h*s[0]-c*l*s[1]+u*s[2];var d=u*h*s[0]+u*l*s[1]+c*s[2];return[p,f,d]};e.prototype.enuToEcef=function(e,t,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);var u=Math.sin(n);var c=Math.cos(i);var h=Math.sin(i);var l=-h*e-u*c*t+s*c*r+a[0];var p=c*e-u*h*t+s*h*r+a[1];var f=s*t+u*r+a[2];return[l,p,f]};e.prototype.geodeticToEcef=function(e,t,r){var n=this._wgs84a;var i=this._wgs84b;e=e*Math.PI/180;t=t*Math.PI/180;var o=Math.cos(e);var a=Math.sin(e);var s=Math.cos(t);var u=Math.sin(t);var c=n*n;var h=i*i;var l=1/Math.sqrt(c*o*o+h*a*a);var p=(c*l+r)*o;var f=p*s;var d=p*u;var v=(h*l+r)*a;return[f,d,v]};e.prototype.ecefToGeodetic=function(e,t,r){var n=this._wgs84a;var i=this._wgs84b;var o=n*n;var a=i*i;var s=o-a;var u=Math.sqrt(s/o);var c=Math.sqrt(s/a);var h=Math.sqrt(e*e+t*t);var l=Math.atan2(r*n,h*i);var p=Math.sin(l);var f=Math.cos(l);var d=Math.atan2(t,e);var v=Math.atan2(r+c*c*i*p*p*p,h-u*u*n*f*f*f);var m=Math.sin(v);var g=Math.cos(v);var y=n/Math.sqrt(1-u*u*m*m);var _=h/g-y;return[v*180/Math.PI,d*180/Math.PI,_]};return e}();r.GeoCoords=n;r.default=n},{}],385:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});function i(e){return e>0?1:e<0?-1:0}function a(e,t){return e.x<=Math.max(t.p1.x,t.p2.x)&&e.x>=Math.min(t.p1.x,t.p2.x)&&e.y>=Math.max(t.p1.y,t.p2.y)&&e.y>=Math.min(t.p1.y,t.p2.y)}function f(e,t){var r=e.p2.x-e.p1.x;var n=e.p2.y-e.p1.y;var i=t.p2.x-t.p1.x;var o=t.p2.y-t.p1.y;var a=r*o-n*i;var s=r*r+n*n;var u=i*i+o*o;var c=1e-10;return a*a<c*s*u}function s(e,t,r){var n=(t.y-e.y)*(r.x-t.x)-(r.y-t.y)*(t.x-e.x);return i(n)}function n(e,t){if(f(e,t)){return false}var r=s(e.p1,e.p2,t.p1);var n=s(e.p1,e.p2,t.p2);var i=s(t.p1,t.p2,e.p1);var o=s(t.p1,t.p2,e.p2);if(r!==n&&i!==o){return true}if(r===0&&a(t.p1,e)){return true}if(n===0&&a(t.p2,e)){return true}if(i===0&&a(e.p1,t)){return true}if(o===0&&a(e.p2,t)){return true}return false}r.segmentsIntersect=n;function o(e,t){if(f(e,t)){return undefined}var r=e.p1.x;var n=e.p2.x;var i=e.p1.y;var o=e.p2.y;var a=t.p1.x;var s=t.p2.x;var u=t.p1.y;var c=t.p2.y;var h=(r-n)*(u-c)-(i-o)*(a-s);var l=(r*o-i*n)*(a-s)-(r-n)*(a*c-u*s);var p=(r*o-i*n)*(u-c)-(i-o)*(a*c-u*s);return{x:l/h,y:p/h}}r.segmentIntersection=o},{}],386:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var o=e("three");var n=function(){function e(){this._epsilon=1e-9}e.prototype.azimuthalToBearing=function(e){return-e+Math.PI/2};e.prototype.degToRad=function(e){return Math.PI*e/180};e.prototype.radToDeg=function(e){return 180*e/Math.PI};e.prototype.rotationMatrix=function(e){var t=new o.Vector3(e[0],e[1],e[2]);var r=t.length();if(r>0){t.normalize()}return(new o.Matrix4).makeRotationAxis(t,r)};e.prototype.rotate=function(e,t){var r=new o.Vector3(e[0],e[1],e[2]);var n=this.rotationMatrix(t);r.applyMatrix4(n);return r};e.prototype.opticalCenter=function(e,t){var r=[-e[0],-e[1],-e[2]];var n=[-t[0],-t[1],-t[2]];return this.rotate(n,r)};e.prototype.viewingDirection=function(e){var t=[-e[0],-e[1],-e[2]];return this.rotate([0,0,1],t)};e.prototype.wrap=function(e,t,r){if(r<t){throw new Error("Invalid arguments: max must be larger than min.")}var n=r-t;while(e>r||e<t){if(e>r){e=e-n}else if(e<t){e=e+n}}return e};e.prototype.wrapAngle=function(e){return this.wrap(e,-Math.PI,Math.PI)};e.prototype.clamp=function(e,t,r){if(e<t){return t}if(e>r){return r}return e};e.prototype.angleBetweenVector2=function(e,t,r,n){var i=Math.atan2(n,r)-Math.atan2(t,e);return this.wrapAngle(i)};e.prototype.angleDifference=function(e,t){var r=t-e;return this.wrapAngle(r)};e.prototype.relativeRotationAngle=function(e,t){var r=this.rotationMatrix([-e[0],-e[1],-e[2]]);var n=this.rotationMatrix(t);var i=r.multiply(n);var o=i.elements;var a=o[0]+o[5]+o[10];var s=Math.acos(Math.max(Math.min((a-1)/2,1),-1));return s};e.prototype.angleToPlane=function(e,t){var r=(new o.Vector3).fromArray(e);var n=r.length();if(n<this._epsilon){return 0}var i=r.dot((new o.Vector3).fromArray(t));return Math.asin(i/n)};e.prototype.distanceFromLatLon=function(e,t,r,n){var i=6371e3;var o=this.degToRad(r-e);var a=this.degToRad(n-t);var s=Math.sin(o/2)*Math.sin(o/2)+Math.cos(this.degToRad(e))*Math.cos(this.degToRad(r))*Math.sin(a/2)*Math.sin(a/2);var u=2*i*Math.atan2(Math.sqrt(s),Math.sqrt(1-s));return u};return e}();r.Spatial=n;r.default=n},{three:226}],387:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var _=e("three");var n=function(){function e(e,t,r,n,i,o,a,s,u,c,h,l){this._orientation=this._getValue(e,1);var p=u!=null?u.width:4;var f=u!=null?u.height:3;var d=this._orientation<5;this._width=this._getValue(t,d?p:f);this._height=this._getValue(r,d?f:p);this._basicAspect=d?this._width/this._height:this._height/this._width;this._basicWidth=d?t:r;this._basicHeight=d?r:t;this._focal=this._getValue(n,1);this._scale=this._getValue(i,0);this._gpano=o!=null?o:null;this._rt=this._getRt(a,s);this._srt=this._getSrt(this._rt,this._scale);this._basicRt=this._getBasicRt(this._rt,e);this._textureScale=!!c?c:[1,1];this._ck1=!!h?h:0;this._ck2=!!l?l:0;this._radialPeak=this._getRadialPeak(this._ck1,this._ck2)}Object.defineProperty(e.prototype,"ck1",{get:function(){return this._ck1},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"ck2",{get:function(){return this._ck2},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"basicAspect",{get:function(){return this._basicAspect},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"basicHeight",{get:function(){return this._basicHeight},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"basicRt",{get:function(){return this._basicRt},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"basicWidth",{get:function(){return this._basicWidth},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"focal",{get:function(){return this._focal},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"fullPano",{get:function(){return this._gpano!=null&&this._gpano.CroppedAreaLeftPixels===0&&this._gpano.CroppedAreaTopPixels===0&&this._gpano.CroppedAreaImageWidthPixels===this._gpano.FullPanoWidthPixels&&this._gpano.CroppedAreaImageHeightPixels===this._gpano.FullPanoHeightPixels},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"gpano",{get:function(){return this._gpano},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"height",{get:function(){return this._height},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"orientation",{get:function(){return this._orientation},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"rt",{get:function(){return this._rt},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"srt",{get:function(){return this._srt},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"scale",{get:function(){return this._scale},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"hasValidScale",{get:function(){return this._scale>.01&&this._scale<50},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"radialPeak",{get:function(){return this._radialPeak},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"width",{get:function(){return this._width},enumerable:true,configurable:true});e.prototype.upVector=function(){var e=this._rt.elements;switch(this._orientation){case 1:return new _.Vector3(-e[1],-e[5],-e[9]);case 3:return new _.Vector3(e[1],e[5],e[9]);case 6:return new _.Vector3(-e[0],-e[4],-e[8]);case 8:return new _.Vector3(e[0],e[4],e[8]);default:return new _.Vector3(-e[1],-e[5],-e[9])}};e.prototype.projectorMatrix=function(){var e=this._normalizedToTextureMatrix();var t=this._focal;var r=(new _.Matrix4).set(t,0,0,0,0,t,0,0,0,0,0,0,0,0,1,0);e.multiply(r);e.multiply(this._rt);return e};e.prototype.projectBasic=function(e){var t=this.projectSfM(e);return this._sfmToBasic(t)};e.prototype.unprojectBasic=function(e,t,r){var n=this._basicToSfm(e);return this.unprojectSfM(n,t,r)};e.prototype.projectSfM=function(e){var t=new _.Vector4(e[0],e[1],e[2],1);t.applyMatrix4(this._rt);return this._bearingToSfm([t.x,t.y,t.z])};e.prototype.unprojectSfM=function(e,t,r){var n=this._sfmToBearing(e);var i=r&&!this.gpano?new _.Vector4(t*n[0]/n[2],t*n[1]/n[2],t,1):new _.Vector4(t*n[0],t*n[1],t*n[2],1);i.applyMatrix4((new _.Matrix4).getInverse(this._rt));return[i.x/i.w,i.y/i.w,i.z/i.w]};e.prototype._sfmToBearing=function(e){if(this._fullPano()){var t=e[0]*2*Math.PI;var r=-e[1]*2*Math.PI;var n=Math.cos(r)*Math.sin(t);var i=-Math.sin(r);var o=Math.cos(r)*Math.cos(t);return[n,i,o]}else if(this._gpano){var a=Math.max(this.gpano.CroppedAreaImageWidthPixels,this.gpano.CroppedAreaImageHeightPixels);var s=[e[0]*a+this.gpano.CroppedAreaImageWidthPixels/2+this.gpano.CroppedAreaLeftPixels,e[1]*a+this.gpano.CroppedAreaImageHeightPixels/2+this.gpano.CroppedAreaTopPixels];var t=2*Math.PI*(s[0]/this.gpano.FullPanoWidthPixels-.5);var r=-Math.PI*(s[1]/this.gpano.FullPanoHeightPixels-.5);var n=Math.cos(r)*Math.sin(t);var i=-Math.sin(r);var o=Math.cos(r)*Math.cos(t);return[n,i,o]}else{var u=[e[0]/this._focal,e[1]/this._focal],c=u[0],h=u[1];var l=this._radialPeak;var p=Math.sqrt(c*c+h*h);var f=1;for(var d=0;d<10;d++){var v=p/f;if(v>l){v=l}f=1+this._ck1*Math.pow(v,2)+this._ck2*Math.pow(v,4)}var m=c/f;var g=h/f;var y=new _.Vector3(m,g,1);y.normalize();return[y.x,y.y,y.z]}};e.prototype._bearingToSfm=function(e){if(this._fullPano()){var t=e[0];var r=e[1];var n=e[2];var i=Math.atan2(t,n);var o=Math.atan2(-r,Math.sqrt(t*t+n*n));return[i/(2*Math.PI),-o/(2*Math.PI)]}else if(this._gpano){var t=e[0];var r=e[1];var n=e[2];var i=Math.atan2(t,n);var o=Math.atan2(-r,Math.sqrt(t*t+n*n));var a=[(i/(2*Math.PI)+.5)*this.gpano.FullPanoWidthPixels,(-o/Math.PI+.5)*this.gpano.FullPanoHeightPixels];var 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]}else{if(e[2]>0){var u=[e[0]/e[2],e[1]/e[2]],c=u[0],h=u[1];var l=c*c+h*h;var p=Math.pow(this._radialPeak,2);if(l>p){l=p}var f=1+this._ck1*l+this._ck2*Math.pow(l,2);return[this._focal*f*c,this._focal*f*h]}else{return[e[0]<0?Number.NEGATIVE_INFINITY:Number.POSITIVE_INFINITY,e[1]<0?Number.NEGATIVE_INFINITY:Number.POSITIVE_INFINITY]}}};e.prototype._basicToSfm=function(e){var t;var r;switch(this._orientation){case 1:t=e[0];r=e[1];break;case 3:t=1-e[0];r=1-e[1];break;case 6:t=e[1];r=1-e[0];break;case 8:t=1-e[1];r=e[0];break;default:t=e[0];r=e[1];break}var n=this._width;var i=this._height;var o=Math.max(n,i);var a=t*n/o-n/o/2;var s=r*i/o-i/o/2;return[a,s]};e.prototype._sfmToBasic=function(e){var t=this._width;var r=this._height;var n=Math.max(t,r);var i=(e[0]+t/n/2)/t*n;var o=(e[1]+r/n/2)/r*n;var a;var s;switch(this._orientation){case 1:a=i;s=o;break;case 3:a=1-i;s=1-o;break;case 6:a=1-o;s=i;break;case 8:a=o;s=1-i;break;default:a=i;s=o;break}return[a,s]};e.prototype._fullPano=function(){return this.gpano!=null&&this.gpano.CroppedAreaLeftPixels===0&&this.gpano.CroppedAreaTopPixels===0&&this.gpano.CroppedAreaImageWidthPixels===this.gpano.FullPanoWidthPixels&&this.gpano.CroppedAreaImageHeightPixels===this.gpano.FullPanoHeightPixels};e.prototype._getValue=function(e,t){return e!=null&&e>0?e:t};e.prototype._getRt=function(e,t){var r=new _.Vector3(e[0],e[1],e[2]);var n=r.length();if(n>0){r.normalize()}var i=new _.Matrix4;i.makeRotationAxis(r,n);i.setPosition(new _.Vector3(t[0],t[1],t[2]));return i};e.prototype._getSrt=function(e,t){var r=e.clone();var n=r.elements;n[12]=t*n[12];n[13]=t*n[13];n[14]=t*n[14];r.scale(new _.Vector3(t,t,t));return r};e.prototype._getBasicRt=function(e,t){var r=new _.Vector3(0,0,1);var n=0;switch(t){case 3:n=Math.PI;break;case 6:n=Math.PI/2;break;case 8:n=3*Math.PI/2;break;default:break}return(new _.Matrix4).makeRotationAxis(r,n).multiply(e)};e.prototype._getRadialPeak=function(e,t){var r=5*t;var n=3*e;var i=1;var o=Math.pow(n,2)-4*r*i;if(o<0){return undefined}var a=(-n-Math.sqrt(o))/2/r;var s=(-n+Math.sqrt(o))/2/r;var u=Math.min(a,s);var c=Math.max(a,s);return u>0?Math.sqrt(u):c>0?Math.sqrt(c):undefined};e.prototype._normalizedToTextureMatrix=function(){var e=Math.max(this._width,this._height);var t=this._orientation<5?this._textureScale[0]:this._textureScale[1];var r=this._orientation<5?this._textureScale[1]:this._textureScale[0];var n=e/this._width*t;var i=e/this._height*r;switch(this._orientation){case 1:return(new _.Matrix4).set(n,0,0,.5,0,-i,0,.5,0,0,1,0,0,0,0,1);case 3:return(new _.Matrix4).set(-n,0,0,.5,0,i,0,.5,0,0,1,0,0,0,0,1);case 6:return(new _.Matrix4).set(0,-i,0,.5,-n,0,0,.5,0,0,1,0,0,0,0,1);case 8:return(new _.Matrix4).set(0,i,0,.5,n,0,0,.5,0,0,1,0,0,0,0,1);default:return(new _.Matrix4).set(n,0,0,.5,0,-i,0,.5,0,0,1,0,0,0,0,1)}};return e}();r.Transform=n},{three:226}],388:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var a=e("three");var n=function(){function e(){this._unprojectDepth=200}e.prototype.basicToCanvas=function(e,t,r,n,i){var o=n.unprojectBasic([e,t],this._unprojectDepth);var a=this.projectToCanvas(o,r,i);return a};e.prototype.basicToCanvasSafe=function(e,t,r,n,i){var o=this.basicToViewportSafe(e,t,n,i);if(o===null){return null}var a=this.viewportToCanvas(o[0],o[1],r);return a};e.prototype.basicToViewport=function(e,t,r,n){var i=r.unprojectBasic([e,t],this._unprojectDepth);var o=this.projectToViewport(i,n);return o};e.prototype.basicToViewportSafe=function(e,t,r,n){var i=r.unprojectBasic([e,t],this._unprojectDepth);var o=this.worldToCamera(i,n);if(o[2]>0){return null}var a=this.projectToViewport(i,n);return a};e.prototype.cameraToViewport=function(e,t){var r=(new a.Vector3).fromArray(e).applyMatrix4(t.projectionMatrix);return[r.x,r.y]};e.prototype.canvasPosition=function(e,t){var r=t.getBoundingClientRect();var n=e.clientX-r.left-t.clientLeft;var i=e.clientY-r.top-t.clientTop;return[n,i]};e.prototype.canvasToBasic=function(e,t,r,n,i){var o=this.unprojectFromCanvas(e,t,r,i).toArray();var a=n.projectBasic(o);return a};e.prototype.canvasToViewport=function(e,t,r){var n=this.containerToCanvas(r),i=n[0],o=n[1];var a=2*e/i-1;var s=1-2*t/o;return[a,s]};e.prototype.containerToCanvas=function(e){return[e.offsetWidth,e.offsetHeight]};e.prototype.getBasicDistances=function(e,t){var r=this.viewportToBasic(-1,1,e,t);var n=this.viewportToBasic(1,1,e,t);var i=this.viewportToBasic(1,-1,e,t);var o=this.viewportToBasic(-1,-1,e,t);var a=0;var s=0;var u=0;var c=0;if(r[1]<0&&n[1]<0){a=r[1]>n[1]?-r[1]:-n[1]}if(n[0]>1&&i[0]>1){s=n[0]<i[0]?n[0]-1:i[0]-1}if(i[1]>1&&o[1]>1){u=i[1]<o[1]?i[1]-1:o[1]-1}if(o[0]<0&&r[0]<0){c=o[0]>r[0]?-o[0]:-r[0]}return[a,s,u,c]};e.prototype.getPixelDistances=function(e,t,r){var n=this.viewportToBasic(-1,1,t,r);var i=this.viewportToBasic(1,1,t,r);var o=this.viewportToBasic(1,-1,t,r);var a=this.viewportToBasic(-1,-1,t,r);var s=0;var u=0;var c=0;var h=0;var l=this.containerToCanvas(e),p=l[0],f=l[1];if(n[1]<0&&i[1]<0){var d=n[1]>i[1]?n[0]:i[0];var v=this.basicToCanvas(d,0,e,t,r);s=v[1]>0?v[1]:0}if(i[0]>1&&o[0]>1){var m=i[0]<o[0]?i[1]:o[1];var v=this.basicToCanvas(1,m,e,t,r);u=v[0]<p?p-v[0]:0}if(o[1]>1&&a[1]>1){var d=o[1]<a[1]?o[0]:a[0];var v=this.basicToCanvas(d,1,e,t,r);c=v[1]<f?f-v[1]:0}if(a[0]<0&&n[0]<0){var m=a[0]>n[0]?a[1]:n[1];var v=this.basicToCanvas(0,m,e,t,r);h=v[0]>0?v[0]:0}return[s,u,c,h]};e.prototype.insideElement=function(e,t){var r=t.getBoundingClientRect();var n=r.left+t.clientLeft;var i=n+t.clientWidth;var o=r.top+t.clientTop;var a=o+t.clientHeight;return e.clientX>n&&e.clientX<i&&e.clientY>o&&e.clientY<a};e.prototype.projectToCanvas=function(e,t,r){var n=this.projectToViewport(e,r);var i=this.viewportToCanvas(n[0],n[1],t);return i};e.prototype.projectToViewport=function(e,t){var r=new a.Vector3(e[0],e[1],e[2]).project(t);return[r.x,r.y]};e.prototype.unprojectFromCanvas=function(e,t,r,n){var i=this.canvasToViewport(e,t,r);var o=this.unprojectFromViewport(i[0],i[1],n);return o};e.prototype.unprojectFromViewport=function(e,t,r){var n=new a.Vector3(e,t,1).unproject(r);return n};e.prototype.viewportToBasic=function(e,t,r,n){var i=new a.Vector3(e,t,1).unproject(n).toArray();var o=r.projectBasic(i);return o};e.prototype.viewportToCanvas=function(e,t,r){var n=this.containerToCanvas(r),i=n[0],o=n[1];var a=i*(e+1)/2;var s=-o*(t-1)/2;return[a,s]};e.prototype.worldToCamera=function(e,t){var r=new a.Vector3(e[0],e[1],e[2]).applyMatrix4(t.matrixWorldInverse);return r.toArray()};return e}();r.ViewportCoords=n;r.default=n},{three:226}],389:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=function(){function e(){}e.prototype.createFilter=function(e){return new Function("node","return "+this._compile(e)+";")};e.prototype._compile=function(e){if(e==null||e.length<=1){return"true"}var t=e[0];var r=t==="=="?this._compileComparisonOp("===",e[1],e[2],false):t==="!="?this._compileComparisonOp("!==",e[1],e[2],false):t===">"||t===">="||t==="<"||t==="<="?this._compileComparisonOp(t,e[1],e[2],true):t==="in"?this._compileInOp(e[1],e.slice(2)):t==="!in"?this._compileNegation(this._compileInOp(e[1],e.slice(2))):t==="all"?this._compileLogicalOp(e.slice(1),"&&"):"true";return"("+r+")"};e.prototype._compare=function(e,t){return e<t?-1:e>t?1:0};e.prototype._compileComparisonOp=function(e,t,r,n){var i=this._compilePropertyReference(t);var o=JSON.stringify(r);return(n?"typeof "+i+"===typeof "+o+"&&":"")+i+e+o};e.prototype._compileInOp=function(e,t){var r=this._compare;var n=JSON.stringify(t.sort(r));var i=this._compilePropertyReference(e);return n+".indexOf("+i+")!==-1"};e.prototype._compileLogicalOp=function(e,t){var r=this._compile.bind(this);return e.map(r).join(t)};e.prototype._compileNegation=function(e){return"!("+e+")"};e.prototype._compilePropertyReference=function(e){return"node["+JSON.stringify(e)+"]"};return e}();r.FilterCreator=n;r.default=n},{}],390:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var d=e("rxjs");var v=e("rxjs/operators");var a=e("rbush");var s=e("../Edge");var f=e("../Error");var p=e("../Graph");var n=function(){function e(e,t,r,n,i,o){this._apiV3=e;this._cachedNodes={};this._cachedNodeTiles={};this._cachedSequenceNodes={};this._cachedSpatialEdges={};this._cachedTiles={};this._cachingFill$={};this._cachingFull$={};this._cachingSequenceNodes$={};this._cachingSequences$={};this._cachingSpatialArea$={};this._cachingTiles$={};this._changed$=new d.Subject;this._defaultAlt=2;this._edgeCalculator=n!=null?n:new s.EdgeCalculator;this._filterCreator=i!=null?i:new p.FilterCreator;this._filter=this._filterCreator.createFilter(undefined);this._graphCalculator=r!=null?r:new p.GraphCalculator;this._configuration=o!=null?o:{maxSequences:50,maxUnusedNodes:100,maxUnusedPreStoredNodes:30,maxUnusedTiles:20};this._nodes={};this._nodeIndex=t!=null?t:a(16,[".lat",".lon",".lat",".lon"]);this._nodeIndexTiles={};this._nodeToTile={};this._preStored={};this._requiredNodeTiles={};this._requiredSpatialArea={};this._sequences={};this._tilePrecision=7;this._tileThreshold=20}Object.defineProperty(e.prototype,"changed$",{get:function(){return this._changed$},enumerable:true,configurable:true});e.prototype.cacheBoundingBox$=function(l,p){var f=this;var e=this._graphCalculator.encodeHsFromBoundingBox(l,p).filter(function(e){return!(e in f._cachedTiles)}).map(function(e){return e in f._cachingTiles$?f._cachingTiles$[e]:f._cacheTile$(e)});if(e.length===0){e.push(d.of(this))}return d.from(e).pipe(v.mergeAll(),v.last(),v.mergeMap(function(e){var t=f._nodeIndex.search({maxX:p.lat,maxY:p.lon,minX:l.lat,minY:l.lon}).map(function(e){return e.node});var r=[];var n=[];for(var i=0,o=t;i<o.length;i++){var a=o[i];if(a.full){r.push(a)}else{n.push(a.key)}}var s=[];var u=200;while(n.length>0){s.push(n.splice(0,u))}var c=d.of(r);var h=s.map(function(e){return f._apiV3.imageByKeyFill$(e).pipe(v.map(function(e){var t=[];for(var r in e){if(!e.hasOwnProperty(r)){continue}if(f.hasNode(r)){var n=f.getNode(r);if(!n.full){f._makeFull(n,e[r])}t.push(n)}}return t}))});return d.merge(c,d.from(h).pipe(v.mergeAll()))}),v.reduce(function(e,t){return e.concat(t)}))};e.prototype.cacheFill$=function(t){var r=this;if(t in this._cachingFull$){throw new f.GraphMapillaryError("Cannot fill node while caching full ("+t+").")}if(!this.hasNode(t)){throw new f.GraphMapillaryError("Cannot fill node that does not exist in graph ("+t+").")}if(t in this._cachingFill$){return this._cachingFill$[t]}var n=this.getNode(t);if(n.full){throw new f.GraphMapillaryError("Cannot fill node that is already full ("+t+").")}this._cachingFill$[t]=this._apiV3.imageByKeyFill$([t]).pipe(v.tap(function(e){if(!n.full){r._makeFull(n,e[t])}delete r._cachingFill$[t]}),v.map(function(e){return r}),v.finalize(function(){if(t in r._cachingFill$){delete r._cachingFill$[t]}r._changed$.next(r)}),v.publish(),v.refCount());return this._cachingFill$[t]};e.prototype.cacheFull$=function(i){var o=this;if(i in this._cachingFull$){return this._cachingFull$[i]}if(this.hasNode(i)){throw new f.GraphMapillaryError("Cannot cache full node that already exist in graph ("+i+").")}this._cachingFull$[i]=this._apiV3.imageByKeyFull$([i]).pipe(v.tap(function(e){var t=e[i];if(o.hasNode(i)){var r=o.getNode(i);if(!r.full){o._makeFull(r,t)}}else{if(t.sequence_key==null){throw new f.GraphMapillaryError("Node has no sequence key ("+i+").")}var r=new p.Node(t);o._makeFull(r,t);var n=o._graphCalculator.encodeH(r.originalLatLon,o._tilePrecision);o._preStore(n,r);o._setNode(r);delete o._cachingFull$[i]}}),v.map(function(e){return o}),v.finalize(function(){if(i in o._cachingFull$){delete o._cachingFull$[i]}o._changed$.next(o)}),v.publish(),v.refCount());return this._cachingFull$[i]};e.prototype.cacheNodeSequence$=function(e){if(!this.hasNode(e)){throw new f.GraphMapillaryError("Cannot cache sequence edges of node that does not exist in graph ("+e+").")}var t=this.getNode(e);if(t.sequenceKey in this._sequences){throw new f.GraphMapillaryError("Sequence already cached ("+e+"), ("+t.sequenceKey+").")}return this._cacheSequence$(t.sequenceKey)};e.prototype.cacheSequence$=function(e){if(e in this._sequences){throw new f.GraphMapillaryError("Sequence already cached ("+e+")")}return this._cacheSequence$(e)};e.prototype.cacheSequenceEdges=function(e){var t=this.getNode(e);if(!(t.sequenceKey in this._sequences)){throw new f.GraphMapillaryError("Sequence is not cached ("+e+"), ("+t.sequenceKey+")")}var r=this._sequences[t.sequenceKey].sequence;var n=this._edgeCalculator.computeSequenceEdges(t,r);t.cacheSequenceEdges(n)};e.prototype.cacheSequenceNodes$=function(e,t){var o=this;if(!this.hasSequence(e)){throw new f.GraphMapillaryError("Cannot cache sequence nodes of sequence that does not exist in graph ("+e+").")}if(this.hasSequenceNodes(e)){throw new f.GraphMapillaryError("Sequence nodes already cached ("+e+").")}var r=this.getSequence(e);if(r.key in this._cachingSequenceNodes$){return this._cachingSequenceNodes$[r.key]}var n=[];var i=r.keys.slice();var a=50;if(!!t&&i.length>a){var s=i.indexOf(t);var u=Math.max(0,Math.min(s-a/2,i.length-a));n.push(i.splice(u,a))}var c=200;while(i.length>0){n.push(i.splice(0,c))}var h=n.length;var l=d.from(n).pipe(v.mergeMap(function(e){return o._apiV3.imageByKeyFull$(e).pipe(v.tap(function(e){for(var t in e){if(!e.hasOwnProperty(t)){continue}var r=e[t];if(o.hasNode(t)){var n=o.getNode(r.key);if(!n.full){o._makeFull(n,r)}}else{if(r.sequence_key==null){console.warn("Sequence missing, discarding node ("+r.key+")")}var n=new p.Node(r);o._makeFull(n,r);var i=o._graphCalculator.encodeH(n.originalLatLon,o._tilePrecision);o._preStore(i,n);o._setNode(n)}}h--}),v.map(function(e){return o}))},6),v.last(),v.finalize(function(){delete o._cachingSequenceNodes$[r.key];if(h===0){o._cachedSequenceNodes[r.key]=true}}),v.publish(),v.refCount());this._cachingSequenceNodes$[r.key]=l;return l};e.prototype.cacheSpatialArea$=function(o){var a=this;if(!this.hasNode(o)){throw new f.GraphMapillaryError("Cannot cache spatial area of node that does not exist in graph ("+o+").")}if(o in this._cachedSpatialEdges){throw new f.GraphMapillaryError("Node already spatially cached ("+o+").")}if(!(o in this._requiredSpatialArea)){throw new f.GraphMapillaryError("Spatial area not determined ("+o+").")}var s=this._requiredSpatialArea[o];if(Object.keys(s.cacheNodes).length===0){throw new f.GraphMapillaryError("Spatial nodes already cached ("+o+").")}if(o in this._cachingSpatialArea$){return this._cachingSpatialArea$[o]}var e=[];while(s.cacheKeys.length>0){e.push(s.cacheKeys.splice(0,200))}var u=e.length;var t=[];var r=function(i){var e=n._apiV3.imageByKeyFill$(i).pipe(v.tap(function(e){for(var t in e){if(!e.hasOwnProperty(t)){continue}var r=s.cacheNodes[t];if(r.full){delete s.cacheNodes[t];continue}var n=e[t];a._makeFull(r,n);delete s.cacheNodes[t]}if(--u===0){delete a._cachingSpatialArea$[o]}}),v.map(function(e){return a}),v.catchError(function(e){for(var t=0,r=i;t<r.length;t++){var n=r[t];if(n in s.all){delete s.all[n]}if(n in s.cacheNodes){delete s.cacheNodes[n]}}if(--u===0){delete a._cachingSpatialArea$[o]}throw e}),v.finalize(function(){if(Object.keys(s.cacheNodes).length===0){a._changed$.next(a)}}),v.publish(),v.refCount());t.push(e)};var n=this;for(var i=0,c=e;i<c.length;i++){var h=c[i];r(h)}this._cachingSpatialArea$[o]=t;return t};e.prototype.cacheSpatialEdges=function(e){if(e in this._cachedSpatialEdges){throw new f.GraphMapillaryError("Spatial edges already cached ("+e+").")}var t=this.getNode(e);var r=this._sequences[t.sequenceKey].sequence;var n=[];var i=r.findPrevKey(t.key);if(i!=null){n.push(i)}var o=r.findNextKey(t.key);if(o!=null){n.push(o)}var a=this._requiredSpatialArea[e].all;var s=[];var u=this._filter;for(var c in a){if(!a.hasOwnProperty(c)){continue}var h=a[c];if(u(h)){s.push(h)}}var l=this._edgeCalculator.getPotentialEdges(t,s,n);var p=this._edgeCalculator.computeStepEdges(t,l,i,o);p=p.concat(this._edgeCalculator.computeTurnEdges(t,l));p=p.concat(this._edgeCalculator.computePanoEdges(t,l));p=p.concat(this._edgeCalculator.computePerspectiveToPanoEdges(t,l));p=p.concat(this._edgeCalculator.computeSimilarEdges(t,l));t.cacheSpatialEdges(p);this._cachedSpatialEdges[e]=t;delete this._requiredSpatialArea[e];delete this._cachedNodeTiles[e]};e.prototype.cacheTiles$=function(n){var i=this;if(n in this._cachedNodeTiles){throw new f.GraphMapillaryError("Tiles already cached ("+n+").")}if(n in this._cachedSpatialEdges){throw new f.GraphMapillaryError("Spatial edges already cached so tiles considered cached ("+n+").")}if(!(n in this._requiredNodeTiles)){throw new f.GraphMapillaryError("Tiles have not been determined ("+n+").")}var o=this._requiredNodeTiles[n];if(o.cache.length===0&&o.caching.length===0){throw new f.GraphMapillaryError("Tiles already cached ("+n+").")}if(!this.hasNode(n)){throw new f.GraphMapillaryError("Cannot cache tiles of node that does not exist in graph ("+n+").")}var e=o.cache.slice();o.caching=this._requiredNodeTiles[n].caching.concat(e);o.cache=[];var t=[];var r=function(r){var e=r in a._cachingTiles$?a._cachingTiles$[r]:a._cacheTile$(r);t.push(e.pipe(v.tap(function(e){var t=o.caching.indexOf(r);if(t>-1){o.caching.splice(t,1)}if(o.caching.length===0&&o.cache.length===0){delete i._requiredNodeTiles[n];i._cachedNodeTiles[n]=true}}),v.catchError(function(e){var t=o.caching.indexOf(r);if(t>-1){o.caching.splice(t,1)}if(o.caching.length===0&&o.cache.length===0){delete i._requiredNodeTiles[n];i._cachedNodeTiles[n]=true}throw e}),v.finalize(function(){i._changed$.next(i)}),v.publish(),v.refCount()))};var a=this;for(var s=0,u=o.caching;s<u.length;s++){var c=u[s];r(c)}return t};e.prototype.initializeCache=function(e){if(e in this._cachedNodes){throw new f.GraphMapillaryError("Node already in cache ("+e+").")}var t=this.getNode(e);t.initializeCache(new p.NodeCache);var r=(new Date).getTime();this._cachedNodes[e]={accessed:r,node:t};this._updateCachedTileAccess(e,r)};e.prototype.isCachingFill=function(e){return e in this._cachingFill$};e.prototype.isCachingFull=function(e){return e in this._cachingFull$};e.prototype.isCachingNodeSequence=function(e){var t=this.getNode(e);return t.sequenceKey in this._cachingSequences$};e.prototype.isCachingSequence=function(e){return e in this._cachingSequences$};e.prototype.isCachingSequenceNodes=function(e){return e in this._cachingSequenceNodes$};e.prototype.isCachingTiles=function(e){return e in this._requiredNodeTiles&&this._requiredNodeTiles[e].cache.length===0&&this._requiredNodeTiles[e].caching.length>0};e.prototype.hasInitializedCache=function(e){return e in this._cachedNodes};e.prototype.hasNode=function(e){var t=(new Date).getTime();this._updateCachedNodeAccess(e,t);this._updateCachedTileAccess(e,t);return e in this._nodes};e.prototype.hasNodeSequence=function(e){var t=this.getNode(e);var r=t.sequenceKey;var n=r in this._sequences;if(n){this._sequences[r].accessed=(new Date).getTime()}return n};e.prototype.hasSequence=function(e){var t=e in this._sequences;if(t){this._sequences[e].accessed=(new Date).getTime()}return t};e.prototype.hasSequenceNodes=function(e){return e in this._cachedSequenceNodes};e.prototype.hasSpatialArea=function(e){if(!this.hasNode(e)){throw new f.GraphMapillaryError("Spatial area nodes cannot be determined if node not in graph ("+e+").")}if(e in this._cachedSpatialEdges){return true}if(e in this._requiredSpatialArea){return Object.keys(this._requiredSpatialArea[e].cacheNodes).length===0}var t=this.getNode(e);var r=this._graphCalculator.boundingBoxCorners(t.latLon,this._tileThreshold);var n=this._nodeIndex.search({maxX:r[1].lat,maxY:r[1].lon,minX:r[0].lat,minY:r[0].lon});var i={all:{},cacheKeys:[],cacheNodes:{}};for(var o=0,a=n;o<a.length;o++){var s=a[o];i.all[s.node.key]=s.node;if(!s.node.full){i.cacheKeys.push(s.node.key);i.cacheNodes[s.node.key]=s.node}}this._requiredSpatialArea[e]=i;return i.cacheKeys.length===0};e.prototype.hasTiles=function(e){var t=this;if(e in this._cachedNodeTiles){return true}if(e in this._cachedSpatialEdges){return true}if(!this.hasNode(e)){throw new f.GraphMapillaryError("Node does not exist in graph ("+e+").")}var r={cache:[],caching:[]};if(!(e in this._requiredNodeTiles)){var n=this.getNode(e);r.cache=this._graphCalculator.encodeHs(n.latLon,this._tilePrecision,this._tileThreshold).filter(function(e){return!(e in t._cachedTiles)});if(r.cache.length>0){this._requiredNodeTiles[e]=r}}else{r=this._requiredNodeTiles[e]}return r.cache.length===0&&r.caching.length===0};e.prototype.getNode=function(e){var t=(new Date).getTime();this._updateCachedNodeAccess(e,t);this._updateCachedTileAccess(e,t);return this._nodes[e]};e.prototype.getSequence=function(e){var t=this._sequences[e];t.accessed=(new Date).getTime();return t.sequence};e.prototype.resetSpatialEdges=function(){var e=Object.keys(this._cachedSpatialEdges);for(var t=0,r=e;t<r.length;t++){var n=r[t];var i=this._cachedSpatialEdges[n];i.resetSpatialEdges();delete this._cachedSpatialEdges[n]}};e.prototype.reset=function(e){var t=[];for(var r=0,n=e;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();t.push(o)}for(var a=0,s=Object.keys(this._cachedNodes);a<s.length;a++){var u=s[a];if(e.indexOf(u)!==-1){continue}this._cachedNodes[u].node.dispose();delete this._cachedNodes[u]}this._cachedNodeTiles={};this._cachedSpatialEdges={};this._cachedTiles={};this._cachingFill$={};this._cachingFull$={};this._cachingSequences$={};this._cachingSpatialArea$={};this._cachingTiles$={};this._nodes={};this._nodeToTile={};this._preStored={};for(var c=0,h=t;c<h.length;c++){var o=h[c];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()};e.prototype.setFilter=function(e){this._filter=this._filterCreator.createFilter(e)};e.prototype.uncache=function(e,t){var r={};this._addNewKeys(r,this._cachingFull$);this._addNewKeys(r,this._cachingFill$);this._addNewKeys(r,this._cachingSpatialArea$);this._addNewKeys(r,this._requiredNodeTiles);this._addNewKeys(r,this._requiredSpatialArea);for(var n=0,i=e;n<i.length;n++){var o=i[n];if(o in r){continue}r[o]=true}var a={};for(var o in r){if(!r.hasOwnProperty(o)){continue}var s=this._nodes[o];var u=this._graphCalculator.encodeHs(s.latLon);for(var c=0,h=u;c<h.length;c++){var l=h[c];if(!(l in a)){a[l]=true}}}var p=[];for(var f in this._cachedTiles){if(!this._cachedTiles.hasOwnProperty(f)||f in a){continue}p.push([f,this._cachedTiles[f]])}var d=p.sort(function(e,t){return t[1].accessed-e[1].accessed}).slice(this._configuration.maxUnusedTiles).map(function(e){return e[0]});for(var v=0,m=d;v<m.length;v++){var g=m[v];this._uncacheTile(g,t)}var y=[];var _=[];for(var f in this._preStored){if(!this._preStored.hasOwnProperty(f)||f in this._cachingTiles$){continue}var b=this._preStored[f];for(var o in b){if(!b.hasOwnProperty(o)||o in r){continue}if(b[o].sequenceKey===t){continue}if(o in this._cachedNodes){y.push([this._cachedNodes[o],f])}else{_.push([o,f])}}}var x=y.sort(function(e,t){var r=e[0],n=e[1];var i=t[0],o=t[1];return i.accessed-r.accessed}).slice(this._configuration.maxUnusedPreStoredNodes).map(function(e){var t=e[0],r=e[1];return[t.node.key,r]});this._uncachePreStored(_);this._uncachePreStored(x);var w=[];for(var o in this._cachedNodes){if(!this._cachedNodes.hasOwnProperty(o)||o in r){continue}w.push(this._cachedNodes[o])}var S=w.sort(function(e,t){return t.accessed-e.accessed}).slice(this._configuration.maxUnusedNodes);for(var M=0,E=S;M<E.length;M++){var C=E[M];C.node.uncache();var o=C.node.key;delete this._cachedNodes[o];if(o in this._cachedNodeTiles){delete this._cachedNodeTiles[o]}if(o in this._cachedSpatialEdges){delete this._cachedSpatialEdges[o]}}var T=[];for(var O in this._sequences){if(!this._sequences.hasOwnProperty(O)||O in this._cachingSequences$||O===t){continue}T.push(this._sequences[O])}var P=T.sort(function(e,t){return t.accessed-e.accessed}).slice(this._configuration.maxSequences);for(var A=0,j=P;A<j.length;A++){var R=j[A];var O=R.sequence.key;delete this._sequences[O];if(O in this._cachedSequenceNodes){delete this._cachedSequenceNodes[O]}R.sequence.dispose()}};e.prototype._addNewKeys=function(e,t){for(var r in t){if(!t.hasOwnProperty(r)||!this.hasNode(r)){continue}if(!(r in e)){e[r]=true}}};e.prototype._cacheSequence$=function(t){var r=this;if(t in this._cachingSequences$){return this._cachingSequences$[t]}this._cachingSequences$[t]=this._apiV3.sequenceByKey$([t]).pipe(v.tap(function(e){if(!(t in r._sequences)){r._sequences[t]={accessed:(new Date).getTime(),sequence:new p.Sequence(e[t])}}delete r._cachingSequences$[t]}),v.map(function(e){return r}),v.finalize(function(){if(t in r._cachingSequences$){delete r._cachingSequences$[t]}r._changed$.next(r)}),v.publish(),v.refCount());return this._cachingSequences$[t]};e.prototype._cacheTile$=function(h){var l=this;this._cachingTiles$[h]=this._apiV3.imagesByH$([h]).pipe(v.tap(function(e){var t=e[h];if(h in l._cachedTiles){return}l._nodeIndexTiles[h]=[];l._cachedTiles[h]={accessed:(new Date).getTime(),nodes:[]};var r=l._cachedTiles[h].nodes;var n=l._removeFromPreStore(h);for(var i in t){if(!t.hasOwnProperty(i)){continue}var o=t[i];if(o==null){break}if(o.sequence_key==null){console.warn("Sequence missing, discarding node ("+o.key+")");continue}if(n!=null&&o.key in n){var a=n[o.key];delete n[o.key];r.push(a);var s={lat:a.latLon.lat,lon:a.latLon.lon,node:a};l._nodeIndex.insert(s);l._nodeIndexTiles[h].push(s);l._nodeToTile[a.key]=h;continue}var u=new p.Node(o);r.push(u);var c={lat:u.latLon.lat,lon:u.latLon.lon,node:u};l._nodeIndex.insert(c);l._nodeIndexTiles[h].push(c);l._nodeToTile[u.key]=h;l._setNode(u)}delete l._cachingTiles$[h]}),v.map(function(e){return l}),v.catchError(function(e){delete l._cachingTiles$[h];throw e}),v.publish(),v.refCount());return this._cachingTiles$[h]};e.prototype._makeFull=function(e,t){if(t.calt==null){t.calt=this._defaultAlt}if(t.c_rotation==null){t.c_rotation=this._graphCalculator.rotationFromCompass(t.ca,t.orientation)}e.makeFull(t)};e.prototype._preStore=function(e,t){if(!(e in this._preStored)){this._preStored[e]={}}this._preStored[e][t.key]=t};e.prototype._removeFromPreStore=function(e){var t=null;if(e in this._preStored){t=this._preStored[e];delete this._preStored[e]}return t};e.prototype._setNode=function(e){var t=e.key;if(this.hasNode(t)){throw new f.GraphMapillaryError("Node already exist ("+t+").")}this._nodes[t]=e};e.prototype._uncacheTile=function(e,t){for(var r=0,n=this._cachedTiles[e].nodes;r<n.length;r++){var i=n[r];var o=i.key;delete this._nodeToTile[o];if(o in this._cachedNodes){delete this._cachedNodes[o]}if(o in this._cachedNodeTiles){delete this._cachedNodeTiles[o]}if(o in this._cachedSpatialEdges){delete this._cachedSpatialEdges[o]}if(i.sequenceKey===t){this._preStore(e,i);i.uncache()}else{delete this._nodes[o];if(i.sequenceKey in this._cachedSequenceNodes){delete this._cachedSequenceNodes[i.sequenceKey]}i.dispose()}}for(var a=0,s=this._nodeIndexTiles[e];a<s.length;a++){var u=s[a];this._nodeIndex.remove(u)}delete this._nodeIndexTiles[e];delete this._cachedTiles[e]};e.prototype._uncachePreStored=function(e){var t={};for(var r=0,n=e;r<n.length;r++){var i=n[r],o=i[0],a=i[1];if(o in this._nodes){delete this._nodes[o]}if(o in this._cachedNodes){delete this._cachedNodes[o]}var s=this._preStored[a][o];if(s.sequenceKey in this._cachedSequenceNodes){delete this._cachedSequenceNodes[s.sequenceKey]}delete this._preStored[a][o];s.dispose();t[a]=true}for(var a in t){if(!t.hasOwnProperty(a)){continue}if(Object.keys(this._preStored[a]).length===0){delete this._preStored[a]}}};e.prototype._updateCachedTileAccess=function(e,t){if(e in this._nodeToTile){this._cachedTiles[this._nodeToTile[e]].accessed=t}};e.prototype._updateCachedNodeAccess=function(e,t){if(e in this._cachedNodes){this._cachedNodes[e].accessed=t}};return e}();r.Graph=n;r.default=n},{"../Edge":276,"../Error":277,"../Graph":279,rbush:26,rxjs:27,"rxjs/operators":225}],391:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var b=e("latlon-geohash");var c=e("three");var s=e("../Error");var n=e("../Geo");var i=function(){function e(e){this._geoCoords=e!=null?e:new n.GeoCoords}e.prototype.encodeH=function(e,t){if(t===void 0){t=7}return b.encode(e.lat,e.lon,t)};e.prototype.encodeHs=function(e,t,r){if(t===void 0){t=7}if(r===void 0){r=20}var n=b.encode(e.lat,e.lon,t);var i=b.bounds(n);var o=i.ne;var a=i.sw;var s=b.neighbours(n);var u=[0,0,0];var c=this._geoCoords.geodeticToEnu(o.lat,o.lon,0,a.lat,a.lon,0);var h=this._geoCoords.geodeticToEnu(e.lat,e.lon,0,a.lat,a.lon,0);var l=h[0]-u[0];var p=c[0]-h[0];var f=h[1]-u[1];var d=c[1]-h[1];var v=l<r;var m=p<r;var g=f<r;var y=d<r;var _=[n];if(y){_.push(s.n)}if(y&&v){_.push(s.nw)}if(v){_.push(s.w)}if(v&&g){_.push(s.sw)}if(g){_.push(s.s)}if(g&&m){_.push(s.se)}if(m){_.push(s.e)}if(m&&y){_.push(s.ne)}return _};e.prototype.encodeHsFromBoundingBox=function(e,t,r){if(r===void 0){r=7}if(t.lat<=e.lat||t.lon<=e.lon){throw new s.GraphMapillaryError("North east needs to be top right of south west")}var n=(e.lat+t.lat)/2;var i=(e.lon+t.lon)/2;var o=this._geoCoords.geodeticToEnu(t.lat,t.lon,0,n,i,0);var a=Math.max(o[0],o[1]);return this.encodeHs({lat:n,lon:i},r,a)};e.prototype.boundingBoxCorners=function(e,t){var r=this._geoCoords.enuToGeodetic(-t,-t,0,e.lat,e.lon,0);var n=this._geoCoords.enuToGeodetic(t,t,0,e.lat,e.lon,0);return[{lat:r[0],lon:r[1]},{lat:n[0],lon:n[1]}]};e.prototype.rotationFromCompass=function(e,t){var r=0;var n=0;var i=0;switch(t){case 1:r=Math.PI/2;break;case 3:r=-Math.PI/2;i=Math.PI;break;case 6:n=-Math.PI/2;i=-Math.PI/2;break;case 8:n=Math.PI/2;i=Math.PI/2;break;default:break}var o=(new c.Matrix4).makeRotationZ(i);var a=new c.Euler(r,n,e*Math.PI/180,"XYZ");var s=(new c.Matrix4).makeRotationFromEuler(a);var u=(new c.Vector4).setAxisAngleFromRotationMatrix(s.multiply(o));return u.multiplyScalar(u.w).toArray().slice(0,3)};return e}();r.GraphCalculator=i;r.default=i},{"../Error":277,"../Geo":278,"latlon-geohash":21,three:226}],392:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n;(function(e){e[e["Sequence"]=0]="Sequence";e[e["Spatial"]=1]="Spatial"})(n=r.GraphMode||(r.GraphMode={}));r.default=n},{}],393:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var c=e("rxjs");var h=e("rxjs/operators");var l=e("../Graph");var n=function(){function e(e,t){this._graph$=c.concat(c.of(e),e.changed$).pipe(h.publishReplay(1),h.refCount());this._graph$.subscribe(function(){});this._graphMode=l.GraphMode.Spatial;this._graphModeSubject$=new c.Subject;this._graphMode$=this._graphModeSubject$.pipe(h.startWith(this._graphMode),h.publishReplay(1),h.refCount());this._graphMode$.subscribe(function(){});this._imageLoadingService=t;this._firstGraphSubjects$=[];this._initializeCacheSubscriptions=[];this._sequenceSubscriptions=[];this._spatialSubscriptions=[]}Object.defineProperty(e.prototype,"graphMode$",{get:function(){return this._graphMode$},enumerable:true,configurable:true});e.prototype.cacheBoundingBox$=function(t,r){return this._graph$.pipe(h.first(),h.mergeMap(function(e){return e.cacheBoundingBox$(t,r)}))};e.prototype.cacheNode$=function(r){var t=this;var n=new c.Subject;this._firstGraphSubjects$.push(n);var e=n.pipe(h.publishReplay(1),h.refCount());var i=e.pipe(h.map(function(e){return e.getNode(r)}),h.mergeMap(function(e){return e.assetsCached?c.of(e):e.cacheAssets$()}),h.publishReplay(1),h.refCount());i.subscribe(function(e){t._imageLoadingService.loadnode$.next(e)},function(e){console.error("Failed to cache node ("+r+")",e)});var o=this._graph$.pipe(h.first(),h.mergeMap(function(e){if(e.isCachingFull(r)||!e.hasNode(r)){return e.cacheFull$(r)}if(e.isCachingFill(r)||!e.getNode(r).full){return e.cacheFill$(r)}return c.of(e)}),h.tap(function(e){if(!e.hasInitializedCache(r)){e.initializeCache(r)}}),h.finalize(function(){if(o==null){return}t._removeFromArray(o,t._initializeCacheSubscriptions);t._removeFromArray(n,t._firstGraphSubjects$)})).subscribe(function(e){n.next(e);n.complete()},function(e){n.error(e)});if(!o.closed){this._initializeCacheSubscriptions.push(o)}var a=e.pipe(h.mergeMap(function(e){if(e.isCachingNodeSequence(r)||!e.hasNodeSequence(r)){return e.cacheNodeSequence$(r)}return c.of(e)}),h.publishReplay(1),h.refCount());var s=a.pipe(h.tap(function(e){if(!e.getNode(r).sequenceEdges.cached){e.cacheSequenceEdges(r)}}),h.finalize(function(){if(s==null){return}t._removeFromArray(s,t._sequenceSubscriptions)})).subscribe(function(e){return},function(e){console.error("Failed to cache sequence edges ("+r+").",e)});if(!s.closed){this._sequenceSubscriptions.push(s)}if(this._graphMode===l.GraphMode.Spatial){var u=e.pipe(h.expand(function(e){if(e.hasTiles(r)){return c.empty()}return c.from(e.cacheTiles$(r)).pipe(h.mergeMap(function(e){return e.pipe(h.mergeMap(function(e){if(e.isCachingTiles(r)){return c.empty()}return c.of(e)}),h.catchError(function(e,t){console.error("Failed to cache tile data ("+r+").",e);return c.empty()}))}))}),h.last(),h.mergeMap(function(e){if(e.hasSpatialArea(r)){return c.of(e)}return c.from(e.cacheSpatialArea$(r)).pipe(h.mergeMap(function(e){return e.pipe(h.catchError(function(e,t){console.error("Failed to cache spatial nodes ("+r+").",e);return c.empty()}))}))}),h.last(),h.mergeMap(function(e){return e.hasNodeSequence(r)?c.of(e):e.cacheNodeSequence$(r)}),h.tap(function(e){if(!e.getNode(r).spatialEdges.cached){e.cacheSpatialEdges(r)}}),h.finalize(function(){if(u==null){return}t._removeFromArray(u,t._spatialSubscriptions)})).subscribe(function(e){return},function(e){console.error("Failed to cache spatial edges ("+r+").",e)});if(!u.closed){this._spatialSubscriptions.push(u)}}return i.pipe(h.first(function(e){return e.assetsCached}))};e.prototype.cacheSequence$=function(t){return this._graph$.pipe(h.first(),h.mergeMap(function(e){if(e.isCachingSequence(t)||!e.hasSequence(t)){return e.cacheSequence$(t)}return c.of(e)}),h.map(function(e){return e.getSequence(t)}))};e.prototype.cacheSequenceNodes$=function(t,r){return this._graph$.pipe(h.first(),h.mergeMap(function(e){if(e.isCachingSequence(t)||!e.hasSequence(t)){return e.cacheSequence$(t)}return c.of(e)}),h.mergeMap(function(e){if(e.isCachingSequenceNodes(t)||!e.hasSequenceNodes(t)){return e.cacheSequenceNodes$(t,r)}return c.of(e)}),h.map(function(e){return e.getSequence(t)}))};e.prototype.setFilter$=function(t){this._resetSubscriptions(this._spatialSubscriptions);return this._graph$.pipe(h.first(),h.tap(function(e){e.resetSpatialEdges();e.setFilter(t)}),h.map(function(e){return undefined}))};e.prototype.setGraphMode=function(e){if(this._graphMode===e){return}if(e===l.GraphMode.Sequence){this._resetSubscriptions(this._spatialSubscriptions)}this._graphMode=e;this._graphModeSubject$.next(this._graphMode)};e.prototype.reset$=function(t){this._abortSubjects(this._firstGraphSubjects$);this._resetSubscriptions(this._initializeCacheSubscriptions);this._resetSubscriptions(this._sequenceSubscriptions);this._resetSubscriptions(this._spatialSubscriptions);return this._graph$.pipe(h.first(),h.tap(function(e){e.reset(t)}),h.map(function(e){return undefined}))};e.prototype.uncache$=function(t,r){return this._graph$.pipe(h.first(),h.tap(function(e){e.uncache(t,r)}),h.map(function(e){return undefined}))};e.prototype._abortSubjects=function(e){for(var t=0,r=e.slice();t<r.length;t++){var n=r[t];this._removeFromArray(n,e);n.error(new Error("Cache node request was aborted."))}};e.prototype._removeFromArray=function(e,t){var r=t.indexOf(e);if(r!==-1){t.splice(r,1)}};e.prototype._resetSubscriptions=function(e){for(var t=0,r=e.slice();t<r.length;t++){var n=r[t];this._removeFromArray(n,e);if(!n.closed){n.unsubscribe()}}};return e}();r.GraphService=n;r.default=n},{"../Graph":279,rxjs:27,"rxjs/operators":225}],394:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("rxjs/operators");var i=e("rxjs");var o=function(){function e(){this._loadnode$=new i.Subject;this._loadstatus$=this._loadnode$.pipe(n.scan(function(e,t){var r=e[0];var n=false;if(t.loadStatus.total===0||t.loadStatus.loaded===t.loadStatus.total){if(t.key in r){delete r[t.key];n=true}}else{r[t.key]=t.loadStatus;n=true}return[r,n]},[{},false]),n.filter(function(e){var t=e[0],r=e[1];return r}),n.map(function(e){var t=e[0];return t}),n.publishReplay(1),n.refCount());this._loadstatus$.subscribe(function(){})}Object.defineProperty(e.prototype,"loadnode$",{get:function(){return this._loadnode$},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"loadstatus$",{get:function(){return this._loadstatus$},enumerable:true,configurable:true});return e}();r.ImageLoadingService=o},{rxjs:27,"rxjs/operators":225}],395:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("pbf");var i=function(){function r(){}r.read=function(e){var t=new n(e);return t.readFields(r._readMeshField,{faces:[],vertices:[]})};r._readMeshField=function(e,t,r){if(e===1){t.vertices.push(r.readFloat())}else if(e===2){t.faces.push(r.readVarint())}};return r}();r.MeshReader=i},{pbf:24}],396:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("rxjs/operators");var i=function(){function e(e){this._cache=null;this._core=e;this._fill=null}Object.defineProperty(e.prototype,"assetsCached",{get:function(){return this._core!=null&&this._fill!=null&&this._cache!=null&&this._cache.image!=null&&this._cache.mesh!=null},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"alt",{get:function(){return this._fill.calt},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"ca",{get:function(){return this._fill.cca!=null?this._fill.cca:this._fill.ca},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"capturedAt",{get:function(){return this._fill.captured_at},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"cameraUuid",{get:function(){return this._fill.captured_with_camera_uuid},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"ck1",{get:function(){return this._fill.ck1},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"ck2",{get:function(){return this._fill.ck2},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"computedCA",{get:function(){return this._fill.cca},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"computedLatLon",{get:function(){return this._core.cl},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"focal",{get:function(){return this._fill.cfocal},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"full",{get:function(){return this._fill!=null},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"fullPano",{get:function(){return this._fill.gpano!=null&&this._fill.gpano.CroppedAreaLeftPixels===0&&this._fill.gpano.CroppedAreaTopPixels===0&&this._fill.gpano.CroppedAreaImageWidthPixels===this._fill.gpano.FullPanoWidthPixels&&this._fill.gpano.CroppedAreaImageHeightPixels===this._fill.gpano.FullPanoHeightPixels},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"gpano",{get:function(){return this._fill.gpano},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"height",{get:function(){return this._fill.height},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"image",{get:function(){return this._cache.image},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"image$",{get:function(){return this._cache.image$},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"key",{get:function(){return this._core.key},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"latLon",{get:function(){return this._core.cl!=null?this._core.cl:this._core.l},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"loadStatus",{get:function(){return this._cache.loadStatus},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"merged",{get:function(){return this._fill!=null&&this._fill.merge_version!=null&&this._fill.merge_version>0},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"mergeCC",{get:function(){return this._fill.merge_cc},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"mergeVersion",{get:function(){return this._fill.merge_version},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"mesh",{get:function(){return this._cache.mesh},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"organizationKey",{get:function(){return this._fill.organization_key},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"orientation",{get:function(){return this._fill.orientation},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"originalCA",{get:function(){return this._fill.ca},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"originalLatLon",{get:function(){return this._core.l},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"pano",{get:function(){return this._fill.gpano!=null&&this._fill.gpano.FullPanoWidthPixels!=null},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"private",{get:function(){return this._fill.private},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"projectKey",{get:function(){return this._fill.project!=null?this._fill.project.key:null},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"rotation",{get:function(){return this._fill.c_rotation},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"scale",{get:function(){return this._fill.atomic_scale},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"sequenceKey",{get:function(){return this._core.sequence_key},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"sequenceEdges",{get:function(){return this._cache.sequenceEdges},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"sequenceEdges$",{get:function(){return this._cache.sequenceEdges$},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"spatialEdges",{get:function(){return this._cache.spatialEdges},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"spatialEdges$",{get:function(){return this._cache.spatialEdges$},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"userKey",{get:function(){return this._fill.user.key},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"username",{get:function(){return this._fill.user.username},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"width",{get:function(){return this._fill.width},enumerable:true,configurable:true});e.prototype.cacheAssets$=function(){var e=this;return this._cache.cacheAssets$(this.key,this.pano,this.merged).pipe(n.map(function(){return e}))};e.prototype.cacheImage$=function(e){var t=this;return this._cache.cacheImage$(this.key,e).pipe(n.map(function(){return t}))};e.prototype.cacheSequenceEdges=function(e){this._cache.cacheSequenceEdges(e)};e.prototype.cacheSpatialEdges=function(e){this._cache.cacheSpatialEdges(e)};e.prototype.dispose=function(){if(this._cache!=null){this._cache.dispose();this._cache=null}this._core=null;this._fill=null};e.prototype.initializeCache=function(e){if(this._cache!=null){throw new Error("Node cache already initialized ("+this.key+").")}this._cache=e};e.prototype.makeFull=function(e){if(e==null){throw new Error("Fill can not be null.")}this._fill=e};e.prototype.resetSequenceEdges=function(){this._cache.resetSequenceEdges()};e.prototype.resetSpatialEdges=function(){this._cache.resetSpatialEdges()};e.prototype.uncache=function(){if(this._cache==null){return}this._cache.dispose();this._cache=null};return e}();r.Node=i;r.default=i},{"rxjs/operators":225}],397:[function(t,e,r){(function(o){"use strict";Object.defineProperty(r,"__esModule",{value:true});var s=t("rxjs");var a=t("rxjs/operators");var u=t("../Graph");var c=t("../Utils");var e=function(){function e(){this._disposed=false;this._image=null;this._loadStatus={loaded:0,total:0};this._mesh=null;this._sequenceEdges={cached:false,edges:[]};this._spatialEdges={cached:false,edges:[]};this._imageChanged$=new s.Subject;this._image$=this._imageChanged$.pipe(a.startWith(null),a.publishReplay(1),a.refCount());this._iamgeSubscription=this._image$.subscribe();this._sequenceEdgesChanged$=new s.Subject;this._sequenceEdges$=this._sequenceEdgesChanged$.pipe(a.startWith(this._sequenceEdges),a.publishReplay(1),a.refCount());this._sequenceEdgesSubscription=this._sequenceEdges$.subscribe(function(){});this._spatialEdgesChanged$=new s.Subject;this._spatialEdges$=this._spatialEdgesChanged$.pipe(a.startWith(this._spatialEdges),a.publishReplay(1),a.refCount());this._spatialEdgesSubscription=this._spatialEdges$.subscribe(function(){});this._cachingAssets$=null}Object.defineProperty(e.prototype,"image",{get:function(){return this._image},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"image$",{get:function(){return this._image$},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"loadStatus",{get:function(){return this._loadStatus},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"mesh",{get:function(){return this._mesh},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"sequenceEdges",{get:function(){return this._sequenceEdges},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"sequenceEdges$",{get:function(){return this._sequenceEdges$},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"spatialEdges",{get:function(){return this._spatialEdges},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"spatialEdges$",{get:function(){return this._spatialEdges$},enumerable:true,configurable:true});e.prototype.cacheAssets$=function(e,t,r){var n=this;if(this._cachingAssets$!=null){return this._cachingAssets$}var i=t?c.Settings.basePanoramaSize:c.Settings.baseImageSize;this._cachingAssets$=s.combineLatest(this._cacheImage$(e,i),this._cacheMesh$(e,r)).pipe(a.map(function(e){var t=e[0],r=e[1];n._loadStatus.loaded=0;n._loadStatus.total=0;if(r){n._mesh=r.object;n._loadStatus.loaded+=r.loaded.loaded;n._loadStatus.total+=r.loaded.total}if(t){n._image=t.object;n._loadStatus.loaded+=t.loaded.loaded;n._loadStatus.total+=t.loaded.total}return n}),a.finalize(function(){n._cachingAssets$=null}),a.publishReplay(1),a.refCount());this._cachingAssets$.pipe(a.first(function(e){return!!e._image})).subscribe(function(e){n._imageChanged$.next(n._image)},function(e){});return this._cachingAssets$};e.prototype.cacheImage$=function(e,t){var r=this;if(this._image!=null&&t<=Math.max(this._image.width,this._image.height)){return s.of(this)}var n=this._cacheImage$(e,t).pipe(a.first(function(e){return e.object!=null}),a.tap(function(e){r._disposeImage();r._image=e.object}),a.map(function(e){return r}),a.publishReplay(1),a.refCount());n.subscribe(function(e){r._imageChanged$.next(r._image)},function(e){});return n};e.prototype.cacheSequenceEdges=function(e){this._sequenceEdges={cached:true,edges:e};this._sequenceEdgesChanged$.next(this._sequenceEdges)};e.prototype.cacheSpatialEdges=function(e){this._spatialEdges={cached:true,edges:e};this._spatialEdgesChanged$.next(this._spatialEdges)};e.prototype.dispose=function(){this._iamgeSubscription.unsubscribe();this._sequenceEdgesSubscription.unsubscribe();this._spatialEdgesSubscription.unsubscribe();this._disposeImage();this._mesh=null;this._loadStatus.loaded=0;this._loadStatus.total=0;this._sequenceEdges={cached:false,edges:[]};this._spatialEdges={cached:false,edges:[]};this._imageChanged$.next(null);this._sequenceEdgesChanged$.next(this._sequenceEdges);this._spatialEdgesChanged$.next(this._spatialEdges);this._disposed=true;if(this._imageRequest!=null){this._imageRequest.abort()}if(this._meshRequest!=null){this._meshRequest.abort()}};e.prototype.resetSequenceEdges=function(){this._sequenceEdges={cached:false,edges:[]};this._sequenceEdgesChanged$.next(this._sequenceEdges)};e.prototype.resetSpatialEdges=function(){this._spatialEdges={cached:false,edges:[]};this._spatialEdgesChanged$.next(this._spatialEdges)};e.prototype._cacheImage$=function(o,e){var a=this;return s.Observable.create(function(n){var i=new XMLHttpRequest;i.open("GET",c.Urls.thumbnail(o,e,c.Urls.origin),true);i.responseType="arraybuffer";i.timeout=15e3;i.onload=function(t){if(i.status!==200){a._imageRequest=null;n.error(new Error("Failed to fetch image ("+o+"). Status: "+i.status+", "+i.statusText));return}var r=new Image;r.crossOrigin="Anonymous";r.onload=function(e){a._imageRequest=null;if(a._disposed){window.URL.revokeObjectURL(r.src);n.error(new Error("Image load was aborted ("+o+")"));return}n.next({loaded:{loaded:t.loaded,total:t.total},object:r});n.complete()};r.onerror=function(e){a._imageRequest=null;n.error(new Error("Failed to load image ("+o+")"))};var e=new Blob([i.response]);r.src=window.URL.createObjectURL(e)};i.onprogress=function(e){if(a._disposed){return}n.next({loaded:{loaded:e.loaded,total:e.total},object:null})};i.onerror=function(e){a._imageRequest=null;n.error(new Error("Failed to fetch image ("+o+")"))};i.ontimeout=function(e){a._imageRequest=null;n.error(new Error("Image request timed out ("+o+")"))};i.onabort=function(e){a._imageRequest=null;n.error(new Error("Image request was aborted ("+o+")"))};a._imageRequest=i;i.send(null)})};e.prototype._cacheMesh$=function(t,e){var i=this;return s.Observable.create(function(r){if(!e){r.next(i._createEmptyMeshLoadStatus());r.complete();return}var n=new XMLHttpRequest;n.open("GET",c.Urls.protoMesh(t),true);n.responseType="arraybuffer";n.timeout=15e3;n.onload=function(e){i._meshRequest=null;if(i._disposed){return}var t=n.status===200?u.MeshReader.read(new o(n.response)):{faces:[],vertices:[]};r.next({loaded:{loaded:e.loaded,total:e.total},object:t});r.complete()};n.onprogress=function(e){if(i._disposed){return}r.next({loaded:{loaded:e.loaded,total:e.total},object:null})};n.onerror=function(e){i._meshRequest=null;console.error("Failed to cache mesh ("+t+")");r.next(i._createEmptyMeshLoadStatus());r.complete()};n.ontimeout=function(e){i._meshRequest=null;console.error("Mesh request timed out ("+t+")");r.next(i._createEmptyMeshLoadStatus());r.complete()};n.onabort=function(e){i._meshRequest=null;r.error(new Error("Mesh request was aborted ("+t+")"))};i._meshRequest=n;n.send(null)})};e.prototype._createEmptyMeshLoadStatus=function(){return{loaded:{loaded:0,total:0},object:{faces:[],vertices:[]}}};e.prototype._disposeImage=function(){if(this._image!=null){window.URL.revokeObjectURL(this._image.src)}this._image=null};return e}();r.NodeCache=e;r.default=e}).call(this,t("buffer").Buffer)},{"../Graph":279,"../Utils":285,buffer:7,rxjs:27,"rxjs/operators":225}],398:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=function(){function e(e){this._key=e.key;this._keys=e.keys}Object.defineProperty(e.prototype,"key",{get:function(){return this._key},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"keys",{get:function(){return this._keys},enumerable:true,configurable:true});e.prototype.dispose=function(){this._key=null;this._keys=null};e.prototype.findNextKey=function(e){var t=this._keys.indexOf(e);if(t+1>=this._keys.length||t===-1){return null}else{return this._keys[t+1]}};e.prototype.findPrevKey=function(e){var t=this._keys.indexOf(e);if(t===0||t===-1){return null}else{return this._keys[t-1]}};return e}();r.Sequence=n;r.default=n},{}],399:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var M=e("three");var G=e("../../Edge");var V=e("../../Error");var n=e("../../Geo");var i=function(){function e(e,t,r){this._spatial=new n.Spatial;this._geoCoords=new n.GeoCoords;this._settings=e!=null?e:new G.EdgeCalculatorSettings;this._directions=t!=null?t:new G.EdgeCalculatorDirections;this._coefficients=r!=null?r:new G.EdgeCalculatorCoefficients}e.prototype.getPotentialEdges=function(e,t,r){if(!e.full){throw new V.ArgumentMapillaryError("Node has to be full.")}if(!e.merged){return[]}var n=this._spatial.viewingDirection(e.rotation);var i=this._spatial.angleToPlane(n.toArray(),[0,0,1]);var o=[];for(var a=0,s=t;a<s.length;a++){var u=s[a];if(!u.merged||u.key===e.key){continue}var c=this._geoCoords.geodeticToEnu(u.latLon.lat,u.latLon.lon,u.alt,e.latLon.lat,e.latLon.lon,e.alt);var h=new M.Vector3(c[0],c[1],c[2]);var l=h.length();if(l>this._settings.maxDistance&&r.indexOf(u.key)<0){continue}var p=this._spatial.angleBetweenVector2(n.x,n.y,h.x,h.y);var f=this._spatial.angleToPlane(h.toArray(),[0,0,1]);var d=this._spatial.viewingDirection(u.rotation);var v=this._spatial.angleBetweenVector2(n.x,n.y,d.x,d.y);var m=this._spatial.angleToPlane(d.toArray(),[0,0,1]);var g=m-i;var y=this._spatial.relativeRotationAngle(e.rotation,u.rotation);var _=this._spatial.angleBetweenVector2(1,0,h.x,h.y);var b=u.sequenceKey!=null&&e.sequenceKey!=null&&u.sequenceKey===e.sequenceKey;var x=u.mergeCC==null&&e.mergeCC==null||u.mergeCC===e.mergeCC;var w=u.userKey===e.userKey;var S={capturedAt:u.capturedAt,croppedPano:u.pano&&!u.fullPano,directionChange:v,distance:l,fullPano:u.fullPano,key:u.key,motionChange:p,rotation:y,sameMergeCC:x,sameSequence:b,sameUser:w,sequenceKey:u.sequenceKey,verticalDirectionChange:g,verticalMotion:f,worldMotionAzimuth:_};o.push(S)}return o};e.prototype.computeSequenceEdges=function(e,t){if(!e.full){throw new V.ArgumentMapillaryError("Node has to be full.")}if(e.sequenceKey!==t.key){throw new V.ArgumentMapillaryError("Node and sequence does not correspond.")}var r=[];var n=t.findNextKey(e.key);if(n!=null){r.push({data:{direction:G.EdgeDirection.Next,worldMotionAzimuth:Number.NaN},from:e.key,to:n})}var i=t.findPrevKey(e.key);if(i!=null){r.push({data:{direction:G.EdgeDirection.Prev,worldMotionAzimuth:Number.NaN},from:e.key,to:i})}return r};e.prototype.computeSimilarEdges=function(t,e){var r=this;if(!t.full){throw new V.ArgumentMapillaryError("Node has to be full.")}var n=t.fullPano;var i={};for(var o=0,a=e;o<a.length;o++){var s=a[o];if(s.sequenceKey==null){continue}if(s.sameSequence){continue}if(n){if(!s.fullPano){continue}}else{if(!s.fullPano&&Math.abs(s.directionChange)>this._settings.similarMaxDirectionChange){continue}}if(s.distance>this._settings.similarMaxDistance){continue}if(s.sameUser&&Math.abs(s.capturedAt-t.capturedAt)<this._settings.similarMinTimeDifference){continue}if(i[s.sequenceKey]==null){i[s.sequenceKey]=[]}i[s.sequenceKey].push(s)}var u=[];var c=t.fullPano?function(e){return e.distance}:function(e){return r._coefficients.similarDistance*e.distance+r._coefficients.similarRotation*e.rotation};for(var h in i){if(!i.hasOwnProperty(h)){continue}var l=Number.MAX_VALUE;var p=null;for(var f=0,d=i[h];f<d.length;f++){var s=d[f];var v=c(s);if(v<l){l=v;p=s}}if(p==null){continue}u.push(p)}return u.map(function(e){return{data:{direction:G.EdgeDirection.Similar,worldMotionAzimuth:e.worldMotionAzimuth},from:t.key,to:e.key}})};e.prototype.computeStepEdges=function(e,t,r,n){if(!e.full){throw new V.ArgumentMapillaryError("Node has to be full.")}var i=[];if(e.pano){return i}for(var o in this._directions.steps){if(!this._directions.steps.hasOwnProperty(o)){continue}var a=this._directions.steps[o];var s=Number.MAX_VALUE;var u=null;var c=null;for(var h=0,l=t;h<l.length;h++){var p=l[h];if(p.croppedPano||p.fullPano){continue}if(Math.abs(p.directionChange)>this._settings.stepMaxDirectionChange){continue}var f=this._spatial.angleDifference(a.motionChange,p.motionChange);var d=this._spatial.angleDifference(p.directionChange,f);var v=Math.max(Math.abs(f),Math.abs(d));if(Math.abs(v)>this._settings.stepMaxDrift){continue}var m=p.key;if(a.useFallback&&(m===r||m===n)){c=p}if(p.distance>this._settings.stepMaxDistance){continue}f=Math.sqrt(f*f+p.verticalMotion*p.verticalMotion);var g=this._coefficients.stepPreferredDistance*Math.abs(p.distance-this._settings.stepPreferredDistance)/this._settings.stepMaxDistance+this._coefficients.stepMotion*f/this._settings.stepMaxDrift+this._coefficients.stepRotation*p.rotation/this._settings.stepMaxDirectionChange+this._coefficients.stepSequencePenalty*(p.sameSequence?0:1)+this._coefficients.stepMergeCCPenalty*(p.sameMergeCC?0:1);if(g<s){s=g;u=p}}u=u==null?c:u;if(u!=null){i.push({data:{direction:a.direction,worldMotionAzimuth:u.worldMotionAzimuth},from:e.key,to:u.key})}}return i};e.prototype.computeTurnEdges=function(e,t){if(!e.full){throw new V.ArgumentMapillaryError("Node has to be full.")}var r=[];if(e.pano){return r}for(var n in this._directions.turns){if(!this._directions.turns.hasOwnProperty(n)){continue}var i=this._directions.turns[n];var o=Number.MAX_VALUE;var a=null;for(var s=0,u=t;s<u.length;s++){var c=u[s];if(c.croppedPano||c.fullPano){continue}if(c.distance>this._settings.turnMaxDistance){continue}var h=i.direction!==G.EdgeDirection.TurnU&&c.distance<this._settings.turnMaxRigDistance&&Math.abs(c.directionChange)>this._settings.turnMinRigDirectionChange;var l=this._spatial.angleDifference(i.directionChange,c.directionChange);var p=void 0;if(h&&c.directionChange*i.directionChange>0&&Math.abs(c.directionChange)<Math.abs(i.directionChange)){p=-Math.PI/2+Math.abs(c.directionChange)}else{if(Math.abs(l)>this._settings.turnMaxDirectionChange){continue}var f=i.motionChange?this._spatial.angleDifference(i.motionChange,c.motionChange):0;f=Math.sqrt(f*f+c.verticalMotion*c.verticalMotion);p=this._coefficients.turnDistance*c.distance/this._settings.turnMaxDistance+this._coefficients.turnMotion*f/Math.PI+this._coefficients.turnSequencePenalty*(c.sameSequence?0:1)+this._coefficients.turnMergeCCPenalty*(c.sameMergeCC?0:1)}if(p<o){o=p;a=c}}if(a!=null){r.push({data:{direction:i.direction,worldMotionAzimuth:a.worldMotionAzimuth},from:e.key,to:a.key})}}return r};e.prototype.computePerspectiveToPanoEdges=function(e,t){if(!e.full){throw new V.ArgumentMapillaryError("Node has to be full.")}if(e.pano){return[]}var r=Number.MAX_VALUE;var n=null;for(var i=0,o=t;i<o.length;i++){var a=o[i];if(!a.fullPano){continue}var s=this._coefficients.panoPreferredDistance*Math.abs(a.distance-this._settings.panoPreferredDistance)/this._settings.panoMaxDistance+this._coefficients.panoMotion*Math.abs(a.motionChange)/Math.PI+this._coefficients.panoMergeCCPenalty*(a.sameMergeCC?0:1);if(s<r){r=s;n=a}}if(n==null){return[]}return[{data:{direction:G.EdgeDirection.Pano,worldMotionAzimuth:n.worldMotionAzimuth},from:e.key,to:n.key}]};e.prototype.computePanoEdges=function(e,t){if(!e.full){throw new V.ArgumentMapillaryError("Node has to be full.")}if(!e.fullPano){return[]}var r=[];var n=[];var i=[];for(var o=0,a=t;o<a.length;o++){var s=a[o];if(s.distance>this._settings.panoMaxDistance){continue}if(s.fullPano){if(s.distance<this._settings.panoMinDistance){continue}n.push(s)}else{if(s.croppedPano){continue}for(var u in this._directions.panos){if(!this._directions.panos.hasOwnProperty(u)){continue}var c=this._directions.panos[u];var h=this._spatial.angleDifference(s.directionChange,s.motionChange);var l=this._spatial.angleDifference(c.directionChange,h);if(Math.abs(l)>this._settings.panoMaxStepTurnChange){continue}i.push([c.direction,s]);break}}}var p=Math.PI/this._settings.panoMaxItems;var f=[];var d=[];for(var v=0;v<this._settings.panoMaxItems;v++){var m=v/this._settings.panoMaxItems*2*Math.PI;var g=Number.MAX_VALUE;var y=null;for(var _=0,b=n;_<b.length;_++){var s=b[_];var x=this._spatial.angleDifference(m,s.motionChange);if(Math.abs(x)>p){continue}var w=Number.MAX_VALUE;for(var S=0,M=f;S<M.length;S++){var E=M[S];var C=Math.abs(this._spatial.angleDifference(E,s.motionChange));if(C<w){w=C}}if(w<=p){continue}var T=this._coefficients.panoPreferredDistance*Math.abs(s.distance-this._settings.panoPreferredDistance)/this._settings.panoMaxDistance+this._coefficients.panoMotion*Math.abs(x)/p+this._coefficients.panoSequencePenalty*(s.sameSequence?0:1)+this._coefficients.panoMergeCCPenalty*(s.sameMergeCC?0:1);if(T<g){g=T;y=s}}if(y!=null){f.push(y.motionChange);r.push({data:{direction:G.EdgeDirection.Pano,worldMotionAzimuth:y.worldMotionAzimuth},from:e.key,to:y.key})}else{d.push(m)}}var O={};O[G.EdgeDirection.Pano]=f;O[G.EdgeDirection.StepForward]=[];O[G.EdgeDirection.StepLeft]=[];O[G.EdgeDirection.StepBackward]=[];O[G.EdgeDirection.StepRight]=[];for(var P=0,A=d;P<A.length;P++){var j=A[P];var R=[];for(var u in this._directions.panos){if(!this._directions.panos.hasOwnProperty(u)){continue}var c=this._directions.panos[u];var L=O[G.EdgeDirection.Pano].concat(O[c.direction]).concat(O[c.prev]).concat(O[c.next]);var g=Number.MAX_VALUE;var y=null;for(var I=0,N=i;I<N.length;I++){var s=N[I];if(s[0]!==c.direction){continue}var D=this._spatial.angleDifference(j,s[1].motionChange);if(Math.abs(D)>p){continue}var k=Number.MAX_VALUE;for(var B=0,F=L;B<F.length;B++){var E=F[B];var w=Math.abs(this._spatial.angleDifference(E,s[1].motionChange));if(w<k){k=w}}if(k<=p){continue}var T=this._coefficients.panoPreferredDistance*Math.abs(s[1].distance-this._settings.panoPreferredDistance)/this._settings.panoMaxDistance+this._coefficients.panoMotion*Math.abs(D)/p+this._coefficients.panoMergeCCPenalty*(s[1].sameMergeCC?0:1);if(T<g){g=T;y=s}}if(y!=null){R.push(y);r.push({data:{direction:y[0],worldMotionAzimuth:y[1].worldMotionAzimuth},from:e.key,to:y[1].key})}}for(var $=0,z=R;$<z.length;$++){var U=z[$];O[U[0]].push(U[1].motionChange)}}return r};return e}();r.EdgeCalculator=i;r.default=i},{"../../Edge":276,"../../Error":277,"../../Geo":278,three:226}],400:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=function(){function e(){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 e}();r.EdgeCalculatorCoefficients=n;r.default=n},{}],401:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("../../Edge");var i=function(){function e(){this.steps={};this.turns={};this.panos={};this.steps[n.EdgeDirection.StepForward]={direction:n.EdgeDirection.StepForward,motionChange:0,useFallback:true};this.steps[n.EdgeDirection.StepBackward]={direction:n.EdgeDirection.StepBackward,motionChange:Math.PI,useFallback:true};this.steps[n.EdgeDirection.StepLeft]={direction:n.EdgeDirection.StepLeft,motionChange:Math.PI/2,useFallback:false};this.steps[n.EdgeDirection.StepRight]={direction:n.EdgeDirection.StepRight,motionChange:-Math.PI/2,useFallback:false};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 e}();r.EdgeCalculatorDirections=i},{"../../Edge":276}],402:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=function(){function e(){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=12*3600*1e3;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}Object.defineProperty(e.prototype,"maxDistance",{get:function(){return Math.max(this.panoMaxDistance,this.similarMaxDistance,this.stepMaxDistance,this.turnMaxDistance)},enumerable:true,configurable:true});return e}();r.EdgeCalculatorSettings=n;r.default=n},{}],403:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n;(function(e){e[e["Next"]=0]="Next";e[e["Prev"]=1]="Prev";e[e["StepLeft"]=2]="StepLeft";e[e["StepRight"]=3]="StepRight";e[e["StepForward"]=4]="StepForward";e[e["StepBackward"]=5]="StepBackward";e[e["TurnLeft"]=6]="TurnLeft";e[e["TurnRight"]=7]="TurnRight";e[e["TurnU"]=8]="TurnU";e[e["Pano"]=9]="Pano";e[e["Similar"]=10]="Similar"})(n=r.EdgeDirection||(r.EdgeDirection={}))},{}],404:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var i=e("rxjs");var o=e("rxjs/operators");var a=e("virtual-dom");var s=e("rxjs");var u=e("../Render");var n=function(){function e(e,t,r){this._adaptiveOperation$=new s.Subject;this._render$=new s.Subject;this._renderAdaptive$=new s.Subject;this._renderService=t;this._currentFrame$=r;var n=a.create(a.h("div.domRenderer",[]));e.appendChild(n);this._offset$=this._adaptiveOperation$.pipe(o.scan(function(e,t){return t(e)},{elementHeight:e.offsetHeight,elementWidth:e.offsetWidth,imageAspect:0,renderMode:u.RenderMode.Fill}),o.filter(function(e){return e.imageAspect>0&&e.elementWidth>0&&e.elementHeight>0}),o.map(function(e){var t=e.elementWidth/e.elementHeight;var r=e.imageAspect/t;var n=0;var i=0;if(e.renderMode===u.RenderMode.Letterbox){if(e.imageAspect>t){n=e.elementHeight*(1-1/r)/2}else{i=e.elementWidth*(1-r)/2}}else{if(e.imageAspect>t){i=-e.elementWidth*(r-1)/2}else{n=-e.elementHeight*(1/r-1)/2}}return{bottom:n,left:i,right:i,top:n}}));this._currentFrame$.pipe(o.filter(function(e){return e.state.currentNode!=null}),o.distinctUntilChanged(function(e,t){return e===t},function(e){return e.state.currentNode.key}),o.map(function(e){return e.state.currentTransform.basicAspect}),o.map(function(t){return function(e){e.imageAspect=t;return e}})).subscribe(this._adaptiveOperation$);i.combineLatest(this._renderAdaptive$.pipe(o.scan(function(e,t){if(t.vnode==null){delete e[t.name]}else{e[t.name]=t.vnode}return e},{})),this._offset$).pipe(o.map(function(e){var t=[];var r=e[0];for(var n in r){if(!r.hasOwnProperty(n)){continue}t.push(r[n])}var i=e[1];var o={style:{bottom:i.bottom+"px",left:i.left+"px","pointer-events":"none",position:"absolute",right:i.right+"px",top:i.top+"px"}};return{name:"adaptiveDomRenderer",vnode:a.h("div.adaptiveDomRenderer",o,t)}})).subscribe(this._render$);this._vNode$=this._render$.pipe(o.scan(function(e,t){if(t.vnode==null){delete e[t.name]}else{e[t.name]=t.vnode}return e},{}),o.map(function(e){var t=[];for(var r in e){if(!e.hasOwnProperty(r)){continue}t.push(e[r])}return a.h("div.domRenderer",t)}));this._vPatch$=this._vNode$.pipe(o.scan(function(e,t){e.vpatch=a.diff(e.vnode,t);e.vnode=t;return e},{vnode:a.h("div.domRenderer",[]),vpatch:null}),o.pluck("vpatch"));this._element$=this._vPatch$.pipe(o.scan(function(e,t){return a.patch(e,t)},n),o.publishReplay(1),o.refCount());this._element$.subscribe(function(){});this._renderService.size$.pipe(o.map(function(t){return function(e){e.elementWidth=t.width;e.elementHeight=t.height;return e}})).subscribe(this._adaptiveOperation$);this._renderService.renderMode$.pipe(o.map(function(t){return function(e){e.renderMode=t;return e}})).subscribe(this._adaptiveOperation$)}Object.defineProperty(e.prototype,"element$",{get:function(){return this._element$},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"render$",{get:function(){return this._render$},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"renderAdaptive$",{get:function(){return this._renderAdaptive$},enumerable:true,configurable:true});e.prototype.clear=function(e){this._renderAdaptive$.next({name:e,vnode:null});this._render$.next({name:e,vnode:null})};return e}();r.DOMRenderer=n;r.default=n},{"../Render":281,rxjs:27,"rxjs/operators":225,"virtual-dom":231}],405:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n;(function(e){e[e["Background"]=0]="Background";e[e["Foreground"]=1]="Foreground"})(n=r.GLRenderStage||(r.GLRenderStage={}));r.default=n},{}],406:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var h=e("rxjs");var l=e("rxjs/operators");var p=e("three");var f=e("../Render");var d=e("../Utils");var n=function(){function e(i,o,e){var a=this;this._renderFrame$=new h.Subject;this._renderCameraOperation$=new h.Subject;this._render$=new h.Subject;this._clear$=new h.Subject;this._renderOperation$=new h.Subject;this._rendererOperation$=new h.Subject;this._eraserOperation$=new h.Subject;this._renderService=o;this._dom=!!e?e:new d.DOM;this._renderer$=this._rendererOperation$.pipe(l.scan(function(e,t){return t(e)},{needsRender:false,renderer:null}),l.filter(function(e){return!!e.renderer}));this._renderCollection$=this._renderOperation$.pipe(l.scan(function(e,t){return t(e)},{}),l.share());this._renderCamera$=this._renderCameraOperation$.pipe(l.scan(function(e,t){return t(e)},{frameId:-1,needsRender:false,perspective:null}));this._eraser$=this._eraserOperation$.pipe(l.startWith(function(e){return e}),l.scan(function(e,t){return t(e)},{needsRender:false}));h.combineLatest(this._renderer$,this._renderCollection$,this._renderCamera$,this._eraser$).pipe(l.map(function(e){var t=e[0],r=e[1],n=e[2],i=e[3];var o=Object.keys(r).map(function(e){return r[e]});return{camera:n,eraser:i,renderer:t,renders:o}}),l.filter(function(e){var t=e.renderer.needsRender||e.camera.needsRender||e.eraser.needsRender;var r=e.camera.frameId;for(var n=0,i=e.renders;n<i.length;n++){var o=i[n];if(o.frameId!==r){return false}t=t||o.needsRender}return t}),l.distinctUntilChanged(function(e,t){return e===t},function(e){return e.eraser.needsRender?-1:e.camera.frameId})).subscribe(function(e){e.renderer.needsRender=false;e.camera.needsRender=false;e.eraser.needsRender=false;var t=e.camera.perspective;var r=[];var n=[];for(var i=0,o=e.renders;i<o.length;i++){var a=o[i];if(a.stage===f.GLRenderStage.Background){r.push(a.render)}else if(a.stage===f.GLRenderStage.Foreground){n.push(a.render)}}var s=e.renderer.renderer;s.clear();for(var u=0,c=r;u<c.length;u++){var a=c[u];a(t,s)}s.clearDepth();for(var h=0,l=n;h<l.length;h++){var a=l[h];a(t,s)}});this._renderFrame$.pipe(l.map(function(t){return function(e){e.frameId=t.frameId;e.perspective=t.perspective;if(t.changed===true){e.needsRender=true}return e}})).subscribe(this._renderCameraOperation$);this._renderFrameSubscribe();var t=this._render$.pipe(l.map(function(t){return function(e){e[t.name]=t.render;return e}}));var r=this._clear$.pipe(l.map(function(t){return function(e){delete e[t];return e}}));h.merge(t,r).subscribe(this._renderOperation$);this._webGLRenderer$=this._render$.pipe(l.first(),l.map(function(e){var t=a._dom.createElement("canvas","mapillary-js-canvas");t.style.position="absolute";t.setAttribute("tabindex","0");i.appendChild(t);var r=o.element;var n=new p.WebGLRenderer({canvas:t});n.setPixelRatio(window.devicePixelRatio);n.setSize(r.offsetWidth,r.offsetHeight);n.setClearColor(new p.Color(2105376),1);n.autoClear=false;return n}),l.publishReplay(1),l.refCount());this._webGLRenderer$.subscribe(function(){});var n=this._webGLRenderer$.pipe(l.first(),l.map(function(t){return function(e){e.needsRender=true;e.renderer=t;return e}}));var s=this._renderService.size$.pipe(l.map(function(t){return function(e){if(e.renderer==null){return e}e.renderer.setSize(t.width,t.height);e.needsRender=true;return e}}));var u=this._clear$.pipe(l.map(function(e){return function(e){if(e.renderer==null){return e}e.needsRender=true;return e}}));h.merge(n,s,u).subscribe(this._rendererOperation$);var c=this._renderCollection$.pipe(l.filter(function(e){return Object.keys(e).length===0}),l.share());c.subscribe(function(e){if(a._renderFrameSubscription==null){return}a._renderFrameSubscription.unsubscribe();a._renderFrameSubscription=null;a._renderFrameSubscribe()});c.pipe(l.map(function(e){return function(e){e.needsRender=true;return e}})).subscribe(this._eraserOperation$)}Object.defineProperty(e.prototype,"render$",{get:function(){return this._render$},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"webGLRenderer$",{get:function(){return this._webGLRenderer$},enumerable:true,configurable:true});e.prototype.clear=function(e){this._clear$.next(e)};e.prototype._renderFrameSubscribe=function(){var t=this;this._render$.pipe(l.first(),l.map(function(e){return function(e){e.needsRender=true;return e}})).subscribe(function(e){t._renderCameraOperation$.next(e)});this._renderFrameSubscription=this._render$.pipe(l.first(),l.mergeMap(function(e){return t._renderService.renderCameraFrame$})).subscribe(this._renderFrame$)};return e}();r.GLRenderer=n;r.default=n},{"../Render":281,"../Utils":285,rxjs:27,"rxjs/operators":225,three:226}],407:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var p=e("three");var n=e("../Geo");var s=e("../Render");var u=e("../State");var i=function(){function e(e,t,r){this._spatial=new n.Spatial;this._viewportCoords=new n.ViewportCoords;this._initialFov=50;this._alpha=-1;this._renderMode=r;this._zoom=0;this._frameId=-1;this._changed=false;this._changedForFrame=-1;this._currentNodeId=null;this._previousNodeId=null;this._currentPano=false;this._previousPano=false;this._state=null;this._currentProjectedPoints=[];this._previousProjectedPoints=[];this._currentFov=this._initialFov;this._previousFov=this._initialFov;this._camera=new n.Camera;this._perspective=new p.PerspectiveCamera(this._initialFov,this._computeAspect(e,t),.16,1e4);this._perspective.matrixAutoUpdate=false;this._rotation={phi:0,theta:0}}Object.defineProperty(e.prototype,"alpha",{get:function(){return this._alpha},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"camera",{get:function(){return this._camera},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"changed",{get:function(){return this._frameId===this._changedForFrame},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"frameId",{get:function(){return this._frameId},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"perspective",{get:function(){return this._perspective},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"renderMode",{get:function(){return this._renderMode},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"rotation",{get:function(){return this._rotation},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"zoom",{get:function(){return this._zoom},enumerable:true,configurable:true});e.prototype.setFrame=function(e){var t=e.state;if(t.state!==this._state){this._state=t.state;this._changed=true}var r=t.currentNode.key;var n=!!t.previousNode?t.previousNode.key:null;if(r!==this._currentNodeId){this._currentNodeId=r;this._currentPano=!!t.currentTransform.gpano;this._currentProjectedPoints=this._computeProjectedPoints(t.currentTransform);this._changed=true}if(n!==this._previousNodeId){this._previousNodeId=n;this._previousPano=!!t.previousTransform.gpano;this._previousProjectedPoints=this._computeProjectedPoints(t.previousTransform);this._changed=true}var i=t.zoom;if(i!==this._zoom){this._zoom=i;this._changed=true}if(this._changed){this._currentFov=this._computeCurrentFov();this._previousFov=this._computePreviousFov()}var o=t.alpha;if(this._changed||o!==this._alpha){this._alpha=o;this._perspective.fov=this._state===u.State.Earth?60:this._interpolateFov(this._currentFov,this._previousFov,this._alpha);this._changed=true}var a=t.camera;if(this._camera.diff(a)>1e-9){this._camera.copy(a);this._rotation=this._computeRotation(a);this._perspective.up.copy(a.up);this._perspective.position.copy(a.position);this._perspective.lookAt(a.lookat);this._perspective.updateMatrix();this._perspective.updateMatrixWorld(false);this._changed=true}if(this._changed){this._perspective.updateProjectionMatrix()}this._setFrameId(e.id)};e.prototype.setRenderMode=function(e){this._renderMode=e;this._perspective.fov=this._computeFov();this._perspective.updateProjectionMatrix();this._changed=true};e.prototype.setSize=function(e){this._perspective.aspect=this._computeAspect(e.width,e.height);this._perspective.fov=this._computeFov();this._perspective.updateProjectionMatrix();this._changed=true};e.prototype._computeAspect=function(e,t){return e===0?0:e/t};e.prototype._computeCurrentFov=function(){if(!this._currentNodeId){return this._initialFov}return this._currentPano?this._yToFov(1,this._zoom):this._computeVerticalFov(this._currentProjectedPoints,this._renderMode,this._zoom,this.perspective.aspect)};e.prototype._computeFov=function(){this._currentFov=this._computeCurrentFov();this._previousFov=this._computePreviousFov();return this._interpolateFov(this._currentFov,this._previousFov,this._alpha)};e.prototype._computePreviousFov=function(){if(!this._currentNodeId){return this._initialFov}return!this._previousNodeId?this._currentFov:this._previousPano?this._yToFov(1,this._zoom):this._computeVerticalFov(this._previousProjectedPoints,this._renderMode,this._zoom,this.perspective.aspect)};e.prototype._computeProjectedPoints=function(n){var i=this;var e=[[.5,0],[1,0]];var t=[[.5,0],[0,.5]];var r=100;var o=[];for(var a=0;a<e.length;++a){var s=e[a];var u=t[a];for(var c=0;c<=r;++c){o.push([s[0]+u[0]*c/r,s[1]+u[1]*c/r])}}var h=new p.Camera;h.up.copy(n.upVector());h.position.copy((new p.Vector3).fromArray(n.unprojectSfM([0,0],0)));h.lookAt((new p.Vector3).fromArray(n.unprojectSfM([0,0],10)));h.updateMatrix();h.updateMatrixWorld(true);var l=o.map(function(e){var t=n.unprojectBasic(e,1e4);var r=i._viewportCoords.worldToCamera(t,h);return[Math.abs(r[0]/r[2]),Math.abs(r[1]/r[2])]});return l};e.prototype._computeRequiredVerticalFov=function(e,t,r){var n=Math.max(e[0]/r,e[1]);return this._yToFov(n,t)};e.prototype._computeRotation=function(e){var t=e.lookat.clone().sub(e.position);var r=e.up.clone();var n=t.clone().dot(r);var i=t.clone().sub(r.clone().multiplyScalar(n));var o=Math.atan2(i.y,i.x);var a=Math.PI/2-this._spatial.angleToPlane(t.toArray(),[0,0,1]);return{phi:o,theta:a}};e.prototype._computeVerticalFov=function(e,t,r,n){var i=this;var o=e.map(function(e){return i._computeRequiredVerticalFov(e,r,n)});var a=t===s.RenderMode.Fill?Math.min.apply(Math,o)*.995:Math.max.apply(Math,o);return a};e.prototype._yToFov=function(e,t){return 2*Math.atan(e/Math.pow(2,t))*180/Math.PI};e.prototype._interpolateFov=function(e,t,r){return r*e+(1-r)*t};e.prototype._setFrameId=function(e){this._frameId=e;if(this._changed){this._changed=false;this._changedForFrame=e}};return e}();r.RenderCamera=i;r.default=i},{"../Geo":278,"../Render":281,"../State":282,three:226}],408:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n;(function(e){e[e["Letterbox"]=0]="Letterbox";e[e["Fill"]=1]="Fill"})(n=r.RenderMode||(r.RenderMode={}));r.default=n},{}],409:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var o=e("rxjs/operators");var a=e("rxjs");var s=e("../Geo");var u=e("../Render");var n=function(){function e(e,t,r,n){var i=this;this._element=e;this._currentFrame$=t;this._spatial=new s.Spatial;r=r!=null?r:u.RenderMode.Fill;this._resize$=new a.Subject;this._renderCameraOperation$=new a.Subject;this._size$=new a.BehaviorSubject({height:this._element.offsetHeight,width:this._element.offsetWidth});this._resize$.pipe(o.map(function(){return{height:i._element.offsetHeight,width:i._element.offsetWidth}})).subscribe(this._size$);this._renderMode$=new a.BehaviorSubject(r);this._renderCameraHolder$=this._renderCameraOperation$.pipe(o.startWith(function(e){return e}),o.scan(function(e,t){return t(e)},!!n?n:new u.RenderCamera(this._element.offsetWidth,this._element.offsetHeight,r)),o.publishReplay(1),o.refCount());this._renderCameraFrame$=this._currentFrame$.pipe(o.withLatestFrom(this._renderCameraHolder$),o.tap(function(e){var t=e[0],r=e[1];r.setFrame(t)}),o.map(function(e){return e[1]}),o.publishReplay(1),o.refCount());this._renderCamera$=this._renderCameraFrame$.pipe(o.filter(function(e){return e.changed}),o.publishReplay(1),o.refCount());this._bearing$=this._renderCamera$.pipe(o.map(function(e){var t=i._spatial.radToDeg(i._spatial.azimuthalToBearing(e.rotation.phi));return i._spatial.wrap(t,0,360)}),o.publishReplay(1),o.refCount());this._size$.pipe(o.skip(1),o.map(function(t){return function(e){e.setSize(t);return e}})).subscribe(this._renderCameraOperation$);this._renderMode$.pipe(o.skip(1),o.map(function(t){return function(e){e.setRenderMode(t);return 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(){})}Object.defineProperty(e.prototype,"bearing$",{get:function(){return this._bearing$},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"element",{get:function(){return this._element},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"resize$",{get:function(){return this._resize$},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"size$",{get:function(){return this._size$},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"renderMode$",{get:function(){return this._renderMode$},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"renderCameraFrame$",{get:function(){return this._renderCameraFrame$},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"renderCamera$",{get:function(){return this._renderCamera$},enumerable:true,configurable:true});return e}();r.RenderService=n;r.default=n},{"../Geo":278,"../Render":281,rxjs:27,"rxjs/operators":225}],410:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=function(){function e(t){if(t.requestAnimationFrame){this._cancelAnimationFrame=t.cancelAnimationFrame.bind(t);this._requestAnimationFrame=t.requestAnimationFrame.bind(t)}else if(t.mozRequestAnimationFrame){this._cancelAnimationFrame=t.mozCancelAnimationFrame.bind(t);this._requestAnimationFrame=t.mozRequestAnimationFrame.bind(t)}else if(t.webkitRequestAnimationFrame){this._cancelAnimationFrame=t.webkitCancelAnimationFrame.bind(t);this._requestAnimationFrame=t.webkitRequestAnimationFrame.bind(t)}else if(t.msRequestAnimationFrame){this._cancelAnimationFrame=t.msCancelAnimationFrame.bind(t);this._requestAnimationFrame=t.msRequestAnimationFrame.bind(t)}else if(t.oRequestAnimationFrame){this._cancelAnimationFrame=t.oCancelAnimationFrame.bind(t);this._requestAnimationFrame=t.oRequestAnimationFrame.bind(t)}else{this._cancelAnimationFrame=t.clearTimeout.bind(t);this._requestAnimationFrame=function(e){return t.setTimeout(e,1e3/60)}}}Object.defineProperty(e.prototype,"cancelAnimationFrame",{get:function(){return this._cancelAnimationFrame},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"requestAnimationFrame",{get:function(){return this._requestAnimationFrame},enumerable:true,configurable:true});return e}();r.FrameGenerator=n;r.default=n},{}],411:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=function(){function e(e,t){this._phi=e;this._theta=t}Object.defineProperty(e.prototype,"phi",{get:function(){return this._phi},set:function(e){this._phi=e},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"theta",{get:function(){return this._theta},set:function(e){this._theta=e},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"isZero",{get:function(){return this._phi===0&&this._theta===0},enumerable:true,configurable:true});e.prototype.copy=function(e){this._phi=e.phi;this._theta=e.theta};e.prototype.lerp=function(e,t){this._phi=(1-t)*this._phi+t*e.phi;this._theta=(1-t)*this._theta+t*e.theta};e.prototype.multiply=function(e){this._phi*=e;this._theta*=e};e.prototype.threshold=function(e){this._phi=Math.abs(this._phi)>e?this._phi:0;this._theta=Math.abs(this._theta)>e?this._theta:0};e.prototype.lengthSquared=function(){return this._phi*this._phi+this._theta*this._theta};e.prototype.reset=function(){this._phi=0;this._theta=0};return e}();r.RotationDelta=n;r.default=n},{}],412:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n;(function(e){e[e["Earth"]=0]="Earth";e[e["Traversing"]=1]="Traversing";e[e["Waiting"]=2]="Waiting";e[e["WaitingInteractively"]=3]="WaitingInteractively"})(n=r.State||(r.State={}));r.default=n},{}],413:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("../State");var i=e("../Geo");var o=function(){function e(e){this._state=new n.TraversingState({alpha:1,camera:new i.Camera,currentIndex:-1,reference:{alt:0,lat:0,lon:0},trajectory:[],transitionMode:e==null?n.TransitionMode.Default:e,zoom:0})}e.prototype.earth=function(){this._state=this._state.earth()};e.prototype.traverse=function(){this._state=this._state.traverse()};e.prototype.wait=function(){this._state=this._state.wait()};e.prototype.waitInteractively=function(){this._state=this._state.waitInteractively()};Object.defineProperty(e.prototype,"state",{get:function(){if(this._state instanceof n.EarthState){return n.State.Earth}else if(this._state instanceof n.TraversingState){return n.State.Traversing}else if(this._state instanceof n.WaitingState){return n.State.Waiting}else if(this._state instanceof n.InteractiveWaitingState){return n.State.WaitingInteractively}throw new Error("Invalid state")},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"reference",{get:function(){return this._state.reference},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"alpha",{get:function(){return this._state.alpha},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"camera",{get:function(){return this._state.camera},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"zoom",{get:function(){return this._state.zoom},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"currentNode",{get:function(){return this._state.currentNode},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"previousNode",{get:function(){return this._state.previousNode},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"currentCamera",{get:function(){return this._state.currentCamera},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"currentTransform",{get:function(){return this._state.currentTransform},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"previousTransform",{get:function(){return this._state.previousTransform},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"trajectory",{get:function(){return this._state.trajectory},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"currentIndex",{get:function(){return this._state.currentIndex},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"lastNode",{get:function(){return this._state.trajectory[this._state.trajectory.length-1]},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"nodesAhead",{get:function(){return this._state.trajectory.length-1-this._state.currentIndex},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"motionless",{get:function(){return this._state.motionless},enumerable:true,configurable:true});e.prototype.getCenter=function(){return this._state.getCenter()};e.prototype.setCenter=function(e){this._state.setCenter(e)};e.prototype.setZoom=function(e){this._state.setZoom(e)};e.prototype.update=function(e){this._state.update(e)};e.prototype.append=function(e){this._state.append(e)};e.prototype.prepend=function(e){this._state.prepend(e)};e.prototype.remove=function(e){this._state.remove(e)};e.prototype.clear=function(){this._state.clear()};e.prototype.clearPrior=function(){this._state.clearPrior()};e.prototype.cut=function(){this._state.cut()};e.prototype.set=function(e){this._state.set(e)};e.prototype.rotate=function(e){this._state.rotate(e)};e.prototype.rotateUnbounded=function(e){this._state.rotateUnbounded(e)};e.prototype.rotateWithoutInertia=function(e){this._state.rotateWithoutInertia(e)};e.prototype.rotateBasic=function(e){this._state.rotateBasic(e)};e.prototype.rotateBasicUnbounded=function(e){this._state.rotateBasicUnbounded(e)};e.prototype.rotateBasicWithoutInertia=function(e){this._state.rotateBasicWithoutInertia(e)};e.prototype.rotateToBasic=function(e){this._state.rotateToBasic(e)};e.prototype.move=function(e){this._state.move(e)};e.prototype.moveTo=function(e){this._state.moveTo(e)};e.prototype.zoomIn=function(e,t){this._state.zoomIn(e,t)};e.prototype.setSpeed=function(e){this._state.setSpeed(e)};e.prototype.setTransitionMode=function(e){this._state.setTransitionMode(e)};e.prototype.dolly=function(e){this._state.dolly(e)};e.prototype.orbit=function(e){this._state.orbit(e)};e.prototype.truck=function(e){this._state.truck(e)};return e}();r.StateContext=o},{"../Geo":278,"../State":282}],414:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var i=e("rxjs");var o=e("rxjs/operators");var a=e("../State");var n=function(){function e(e){var t=this;this._appendNode$=new i.Subject;this._start$=new i.Subject;this._frame$=new i.Subject;this._fpsSampleRate=30;this._contextOperation$=new i.BehaviorSubject(function(e){return e});this._context$=this._contextOperation$.pipe(o.scan(function(e,t){return t(e)},new a.StateContext(e)),o.publishReplay(1),o.refCount());this._state$=this._context$.pipe(o.map(function(e){return e.state}),o.distinctUntilChanged(),o.publishReplay(1),o.refCount());this._fps$=this._start$.pipe(o.switchMap(function(){return t._frame$.pipe(o.bufferCount(1,t._fpsSampleRate),o.map(function(e){return(new Date).getTime()}),o.pairwise(),o.map(function(e){return Math.max(20,1e3*t._fpsSampleRate/(e[1]-e[0]))}),o.startWith(60))}),o.share());this._currentState$=this._frame$.pipe(o.withLatestFrom(this._fps$,this._context$,function(e,t,r){return[e,t,r]}),o.filter(function(e){return e[2].currentNode!=null}),o.tap(function(e){e[2].update(e[1])}),o.map(function(e){return{fps:e[1],id:e[0],state:e[2]}}),o.share());this._lastState$=this._currentState$.pipe(o.publishReplay(1),o.refCount());var r=this._currentState$.pipe(o.distinctUntilChanged(undefined,function(e){return e.state.currentNode.key}),o.publishReplay(1),o.refCount());var n=new i.Subject;r.subscribe(n);this._currentKey$=new i.BehaviorSubject(null);n.pipe(o.map(function(e){return e.state.currentNode.key})).subscribe(this._currentKey$);this._currentNode$=n.pipe(o.map(function(e){return e.state.currentNode}),o.publishReplay(1),o.refCount());this._currentCamera$=n.pipe(o.map(function(e){return e.state.currentCamera}),o.publishReplay(1),o.refCount());this._currentTransform$=n.pipe(o.map(function(e){return e.state.currentTransform}),o.publishReplay(1),o.refCount());this._reference$=n.pipe(o.map(function(e){return e.state.reference}),o.distinctUntilChanged(function(e,t){return e.lat===t.lat&&e.lon===t.lon},function(e){return{lat:e.lat,lon:e.lon}}),o.publishReplay(1),o.refCount());this._currentNodeExternal$=r.pipe(o.map(function(e){return e.state.currentNode}),o.publishReplay(1),o.refCount());this._appendNode$.pipe(o.map(function(t){return function(e){e.append([t]);return e}})).subscribe(this._contextOperation$);this._inMotionOperation$=new i.Subject;r.pipe(o.map(function(e){return true})).subscribe(this._inMotionOperation$);this._inMotionOperation$.pipe(o.distinctUntilChanged(),o.filter(function(e){return e}),o.switchMap(function(e){return t._currentState$.pipe(o.filter(function(e){return e.state.nodesAhead===0}),o.map(function(e){return[e.state.camera.clone(),e.state.zoom]}),o.pairwise(),o.map(function(e){var t=e[0][0];var r=e[1][0];var n=e[0][1];var i=e[1][1];return t.diff(r)>1e-5||Math.abs(n-i)>1e-5}),o.first(function(e){return!e}))})).subscribe(this._inMotionOperation$);this._inMotion$=this._inMotionOperation$.pipe(o.distinctUntilChanged(),o.publishReplay(1),o.refCount());this._inTranslationOperation$=new i.Subject;r.pipe(o.map(function(e){return true})).subscribe(this._inTranslationOperation$);this._inTranslationOperation$.pipe(o.distinctUntilChanged(),o.filter(function(e){return e}),o.switchMap(function(e){return t._currentState$.pipe(o.filter(function(e){return e.state.nodesAhead===0}),o.map(function(e){return e.state.camera.position.clone()}),o.pairwise(),o.map(function(e){return e[0].distanceToSquared(e[1])!==0}),o.first(function(e){return!e}))})).subscribe(this._inTranslationOperation$);this._inTranslation$=this._inTranslationOperation$.pipe(o.distinctUntilChanged(),o.publishReplay(1),o.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 a.FrameGenerator(window)}Object.defineProperty(e.prototype,"currentState$",{get:function(){return this._currentState$},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"currentNode$",{get:function(){return this._currentNode$},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"currentKey$",{get:function(){return this._currentKey$},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"currentNodeExternal$",{get:function(){return this._currentNodeExternal$},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"currentCamera$",{get:function(){return this._currentCamera$},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"currentTransform$",{get:function(){return this._currentTransform$},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"state$",{get:function(){return this._state$},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"reference$",{get:function(){return this._reference$},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"inMotion$",{get:function(){return this._inMotion$},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"inTranslation$",{get:function(){return this._inTranslation$},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"appendNode$",{get:function(){return this._appendNode$},enumerable:true,configurable:true});e.prototype.earth=function(){this._inMotionOperation$.next(true);this._invokeContextOperation(function(e){e.earth()})};e.prototype.traverse=function(){this._inMotionOperation$.next(true);this._invokeContextOperation(function(e){e.traverse()})};e.prototype.wait=function(){this._invokeContextOperation(function(e){e.wait()})};e.prototype.waitInteractively=function(){this._invokeContextOperation(function(e){e.waitInteractively()})};e.prototype.appendNodes=function(t){this._invokeContextOperation(function(e){e.append(t)})};e.prototype.prependNodes=function(t){this._invokeContextOperation(function(e){e.prepend(t)})};e.prototype.removeNodes=function(t){this._invokeContextOperation(function(e){e.remove(t)})};e.prototype.clearNodes=function(){this._invokeContextOperation(function(e){e.clear()})};e.prototype.clearPriorNodes=function(){this._invokeContextOperation(function(e){e.clearPrior()})};e.prototype.cutNodes=function(){this._invokeContextOperation(function(e){e.cut()})};e.prototype.setNodes=function(t){this._invokeContextOperation(function(e){e.set(t)})};e.prototype.rotate=function(t){this._inMotionOperation$.next(true);this._invokeContextOperation(function(e){e.rotate(t)})};e.prototype.rotateUnbounded=function(t){this._inMotionOperation$.next(true);this._invokeContextOperation(function(e){e.rotateUnbounded(t)})};e.prototype.rotateWithoutInertia=function(t){this._inMotionOperation$.next(true);this._invokeContextOperation(function(e){e.rotateWithoutInertia(t)})};e.prototype.rotateBasic=function(t){this._inMotionOperation$.next(true);this._invokeContextOperation(function(e){e.rotateBasic(t)})};e.prototype.rotateBasicUnbounded=function(t){this._inMotionOperation$.next(true);this._invokeContextOperation(function(e){e.rotateBasicUnbounded(t)})};e.prototype.rotateBasicWithoutInertia=function(t){this._inMotionOperation$.next(true);this._invokeContextOperation(function(e){e.rotateBasicWithoutInertia(t)})};e.prototype.rotateToBasic=function(t){this._inMotionOperation$.next(true);this._invokeContextOperation(function(e){e.rotateToBasic(t)})};e.prototype.move=function(t){this._inMotionOperation$.next(true);this._invokeContextOperation(function(e){e.move(t)})};e.prototype.moveTo=function(t){this._inMotionOperation$.next(true);this._invokeContextOperation(function(e){e.moveTo(t)})};e.prototype.dolly=function(t){this._inMotionOperation$.next(true);this._invokeContextOperation(function(e){e.dolly(t)})};e.prototype.orbit=function(t){this._inMotionOperation$.next(true);this._invokeContextOperation(function(e){e.orbit(t)})};e.prototype.truck=function(t){this._inMotionOperation$.next(true);this._invokeContextOperation(function(e){e.truck(t)})};e.prototype.zoomIn=function(t,r){this._inMotionOperation$.next(true);this._invokeContextOperation(function(e){e.zoomIn(t,r)})};e.prototype.getCenter=function(){return this._lastState$.pipe(o.first(),o.map(function(e){return e.state.getCenter()}))};e.prototype.getZoom=function(){return this._lastState$.pipe(o.first(),o.map(function(e){return e.state.zoom}))};e.prototype.setCenter=function(t){this._inMotionOperation$.next(true);this._invokeContextOperation(function(e){e.setCenter(t)})};e.prototype.setSpeed=function(t){this._invokeContextOperation(function(e){e.setSpeed(t)})};e.prototype.setTransitionMode=function(t){this._invokeContextOperation(function(e){e.setTransitionMode(t)})};e.prototype.setZoom=function(t){this._inMotionOperation$.next(true);this._invokeContextOperation(function(e){e.setZoom(t)})};e.prototype.start=function(){if(this._frameId==null){this._start$.next(null);this._frameId=this._frameGenerator.requestAnimationFrame(this._frame.bind(this));this._frame$.next(this._frameId)}};e.prototype.stop=function(){if(this._frameId!=null){this._frameGenerator.cancelAnimationFrame(this._frameId);this._frameId=null}};e.prototype._invokeContextOperation=function(t){this._contextOperation$.next(function(e){t(e);return e})};e.prototype._frame=function(e){this._frameId=this._frameGenerator.requestAnimationFrame(this._frame.bind(this));this._frame$.next(this._frameId)};return e}();r.StateService=n},{"../State":282,rxjs:27,"rxjs/operators":225}],415:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n;(function(e){e[e["Default"]=0]="Default";e[e["Instantaneous"]=1]="Instantaneous"})(n=r.TransitionMode||(r.TransitionMode={}));r.default=n},{}],416:[function(e,t,r){"use strict";var i=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var u=e("three");var o=e("../../State");var n=function(n){i(e,n);function e(e){var t=n.call(this,e)||this;var r=t._camera.lookat.clone().sub(t._camera.position).normalize();t._camera.lookat.copy(t._camera.position);t._camera.position.z=e.camera.position.z+20;t._camera.position.x=e.camera.position.x-16*r.x;t._camera.position.y=e.camera.position.y-16*r.y;t._camera.up.set(0,0,1);return t}e.prototype.traverse=function(){return new o.TraversingState(this)};e.prototype.wait=function(){return new o.WaitingState(this)};e.prototype.waitInteractively=function(){return new o.InteractiveWaitingState(this)};e.prototype.dolly=function(e){var t=this._camera;var r=(new u.Vector3).copy(t.position).sub(t.lookat);var n=r.length();var i=n*Math.pow(2,-e);var o=Math.max(1,Math.min(i,1e3));r.normalize();r.multiplyScalar(o);t.position.copy(t.lookat).add(r)};e.prototype.orbit=function(e){var t=this._camera;var r=(new u.Quaternion).setFromUnitVectors(t.up,new u.Vector3(0,0,1));var n=r.clone().inverse();var i=new u.Vector3;i.copy(t.position).sub(t.lookat);i.applyQuaternion(r);var o=i.length();var a=Math.atan2(i.y,i.x);a+=e.phi;var s=Math.atan2(Math.sqrt(i.x*i.x+i.y*i.y),i.z);s+=e.theta;s=Math.max(.1,Math.min(Math.PI-.1,s));i.x=Math.sin(s)*Math.cos(a);i.y=Math.sin(s)*Math.sin(a);i.z=Math.cos(s);i.applyQuaternion(n);t.position.copy(t.lookat).add(i.multiplyScalar(o))};e.prototype.truck=function(e){this._camera.position.add((new u.Vector3).fromArray(e));this._camera.lookat.add((new u.Vector3).fromArray(e))};e.prototype.update=function(){};return e}(o.StateBase);r.EarthState=n;r.default=n},{"../../State":282,three:226}],417:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var p=e("three");var i=e("../../State");var o=function(r){n(e,r);function e(e){var t=r.call(this,e)||this;t._animationSpeed=1/40;t._rotationDelta=new i.RotationDelta(0,0);t._requestedRotationDelta=null;t._basicRotation=[0,0];t._requestedBasicRotation=null;t._requestedBasicRotationUnbounded=null;t._rotationAcceleration=.86;t._rotationIncreaseAlpha=.97;t._rotationDecreaseAlpha=.9;t._rotationThreshold=.001;t._unboundedRotationAlpha=.8;t._desiredZoom=e.zoom;t._minZoom=0;t._maxZoom=3;t._lookatDepth=10;t._desiredLookat=null;t._desiredCenter=null;return t}e.prototype.rotate=function(e){if(this._currentNode==null){return}this._desiredZoom=this._zoom;this._desiredLookat=null;this._requestedBasicRotation=null;if(this._requestedRotationDelta!=null){this._requestedRotationDelta.phi=this._requestedRotationDelta.phi+e.phi;this._requestedRotationDelta.theta=this._requestedRotationDelta.theta+e.theta}else{this._requestedRotationDelta=new i.RotationDelta(e.phi,e.theta)}};e.prototype.rotateUnbounded=function(e){if(this._currentNode==null){return}this._requestedBasicRotation=null;this._requestedRotationDelta=null;this._applyRotation(e,this._currentCamera);this._applyRotation(e,this._previousCamera);if(!this._desiredLookat){return}var t=(new p.Quaternion).setFromUnitVectors(this._currentCamera.up,new p.Vector3(0,0,1));var r=t.clone().inverse();var n=(new p.Vector3).copy(this._desiredLookat).sub(this._camera.position).applyQuaternion(t);var i=n.length();var o=Math.atan2(n.y,n.x);o+=e.phi;var a=Math.atan2(Math.sqrt(n.x*n.x+n.y*n.y),n.z);a+=e.theta;a=Math.max(.1,Math.min(Math.PI-.1,a));n.x=Math.sin(a)*Math.cos(o);n.y=Math.sin(a)*Math.sin(o);n.z=Math.cos(a);n.applyQuaternion(r);this._desiredLookat.copy(this._camera.position).add(n.multiplyScalar(i))};e.prototype.rotateWithoutInertia=function(e){if(this._currentNode==null){return}this._desiredZoom=this._zoom;this._desiredLookat=null;this._requestedBasicRotation=null;this._requestedRotationDelta=null;var t=Math.PI/(10*Math.pow(2,this._zoom));var r={phi:this._spatial.clamp(e.phi,-t,t),theta:this._spatial.clamp(e.theta,-t,t)};this._applyRotation(r,this._currentCamera);this._applyRotation(r,this._previousCamera)};e.prototype.rotateBasic=function(e){if(this._currentNode==null){return}this._desiredZoom=this._zoom;this._desiredLookat=null;this._requestedRotationDelta=null;if(this._requestedBasicRotation!=null){this._requestedBasicRotation[0]+=e[0];this._requestedBasicRotation[1]+=e[1];var t=.05/Math.pow(2,this._zoom);this._requestedBasicRotation[0]=this._spatial.clamp(this._requestedBasicRotation[0],-t,t);this._requestedBasicRotation[1]=this._spatial.clamp(this._requestedBasicRotation[1],-t,t)}else{this._requestedBasicRotation=e.slice()}};e.prototype.rotateBasicUnbounded=function(e){if(this._currentNode==null){return}if(this._requestedBasicRotationUnbounded!=null){this._requestedBasicRotationUnbounded[0]+=e[0];this._requestedBasicRotationUnbounded[1]+=e[1]}else{this._requestedBasicRotationUnbounded=e.slice()}};e.prototype.rotateBasicWithoutInertia=function(e){if(this._currentNode==null){return}this._desiredZoom=this._zoom;this._desiredLookat=null;this._requestedRotationDelta=null;this._requestedBasicRotation=null;var t=.05/Math.pow(2,this._zoom);var r=e.slice();r[0]=this._spatial.clamp(r[0],-t,t);r[1]=this._spatial.clamp(r[1],-t,t);this._applyRotationBasic(r)};e.prototype.rotateToBasic=function(e){if(this._currentNode==null){return}this._desiredZoom=this._zoom;this._desiredLookat=null;e[0]=this._spatial.clamp(e[0],0,1);e[1]=this._spatial.clamp(e[1],0,1);var t=this.currentTransform.unprojectBasic(e,this._lookatDepth);this._currentCamera.lookat.fromArray(t)};e.prototype.zoomIn=function(e,t){if(this._currentNode==null){return}this._desiredZoom=Math.max(this._minZoom,Math.min(this._maxZoom,this._desiredZoom+e));var r=this.currentTransform.projectBasic(this._currentCamera.lookat.toArray());var n=r[0];var i=r[1];var o=Math.pow(2,this._zoom);var a=Math.pow(2,this._desiredZoom);var s=t[0];var u=t[1];if(this.currentTransform.gpano!=null&&this.currentTransform.gpano.CroppedAreaImageWidthPixels===this.currentTransform.gpano.FullPanoWidthPixels){if(s-n>.5){s=s-1}else if(n-s>.5){s=1+s}}var c=s-o/a*(s-n);var h=u-o/a*(u-i);var l=this.currentTransform.gpano;if(this._currentNode.fullPano){c=this._spatial.wrap(c+this._basicRotation[0],0,1);h=this._spatial.clamp(h+this._basicRotation[1],.05,.95)}else if(l!=null&&this.currentTransform.gpano.CroppedAreaImageWidthPixels===this.currentTransform.gpano.FullPanoWidthPixels){c=this._spatial.wrap(c+this._basicRotation[0],0,1);h=this._spatial.clamp(h+this._basicRotation[1],0,1)}else{c=this._spatial.clamp(c,0,1);h=this._spatial.clamp(h,0,1)}this._desiredLookat=(new p.Vector3).fromArray(this.currentTransform.unprojectBasic([c,h],this._lookatDepth))};e.prototype.setCenter=function(e){this._desiredLookat=null;this._requestedRotationDelta=null;this._requestedBasicRotation=null;this._desiredZoom=this._zoom;var t=[this._spatial.clamp(e[0],0,1),this._spatial.clamp(e[1],0,1)];if(this._currentNode==null){this._desiredCenter=t;return}this._desiredCenter=null;var r=(new p.Vector3).fromArray(this.currentTransform.unprojectBasic(t,this._lookatDepth));var n=this.previousTransform!=null?this.previousTransform:this.currentTransform;var i=(new p.Vector3).fromArray(n.unprojectBasic(t,this._lookatDepth));this._currentCamera.lookat.copy(r);this._previousCamera.lookat.copy(i)};e.prototype.setZoom=function(e){this._desiredLookat=null;this._requestedRotationDelta=null;this._requestedBasicRotation=null;this._zoom=this._spatial.clamp(e,this._minZoom,this._maxZoom);this._desiredZoom=this._zoom};e.prototype._applyRotation=function(e,t){if(t==null){return}var r=(new p.Quaternion).setFromUnitVectors(t.up,new p.Vector3(0,0,1));var n=r.clone().inverse();var i=new p.Vector3;i.copy(t.lookat).sub(t.position);i.applyQuaternion(r);var o=i.length();var a=Math.atan2(i.y,i.x);a+=e.phi;var s=Math.atan2(Math.sqrt(i.x*i.x+i.y*i.y),i.z);s+=e.theta;s=Math.max(.1,Math.min(Math.PI-.1,s));i.x=Math.sin(s)*Math.cos(a);i.y=Math.sin(s)*Math.sin(a);i.z=Math.cos(s);i.applyQuaternion(n);t.lookat.copy(t.position).add(i.multiplyScalar(o))};e.prototype._applyRotationBasic=function(e){var t=this._currentNode;var r=this._previousNode!=null?this.previousNode:this.currentNode;var n=this._currentCamera;var i=this._previousCamera;var o=this.currentTransform;var a=this.previousTransform!=null?this.previousTransform:this.currentTransform;var s=o.projectBasic(n.lookat.toArray());var u=a.projectBasic(i.lookat.toArray());var c=o.gpano;var h=a.gpano;if(t.fullPano){s[0]=this._spatial.wrap(s[0]+e[0],0,1);s[1]=this._spatial.clamp(s[1]+e[1],.05,.95)}else if(c!=null&&o.gpano.CroppedAreaImageWidthPixels===o.gpano.FullPanoWidthPixels){s[0]=this._spatial.wrap(s[0]+e[0],0,1);s[1]=this._spatial.clamp(s[1]+e[1],0,1)}else{s[0]=this._spatial.clamp(s[0]+e[0],0,1);s[1]=this._spatial.clamp(s[1]+e[1],0,1)}if(r.fullPano){u[0]=this._spatial.wrap(u[0]+e[0],0,1);u[1]=this._spatial.clamp(u[1]+e[1],.05,.95)}else if(h!=null&&a.gpano.CroppedAreaImageWidthPixels===a.gpano.FullPanoWidthPixels){u[0]=this._spatial.wrap(u[0]+e[0],0,1);u[1]=this._spatial.clamp(u[1]+e[1],0,1)}else{u[0]=this._spatial.clamp(u[0]+e[0],0,1);u[1]=this._spatial.clamp(s[1]+e[1],0,1)}var l=o.unprojectBasic(s,this._lookatDepth);n.lookat.fromArray(l);var p=a.unprojectBasic(u,this._lookatDepth);i.lookat.fromArray(p)};e.prototype._updateZoom=function(e){var t=this._desiredZoom-this._zoom;var r=t>0?1:t<0?-1:0;if(t===0){return}else if(Math.abs(t)<.002){this._zoom=this._desiredZoom;if(this._desiredLookat!=null){this._desiredLookat=null}}else{this._zoom+=r*Math.max(Math.abs(5*e*t),.002)}};e.prototype._updateLookat=function(e){if(this._desiredLookat===null){return}var t=this._desiredLookat.distanceToSquared(this._currentCamera.lookat);if(Math.abs(t)<1e-6){this._currentCamera.lookat.copy(this._desiredLookat);this._desiredLookat=null}else{this._currentCamera.lookat.lerp(this._desiredLookat,5*e)}};e.prototype._updateRotation=function(){if(this._requestedRotationDelta!=null){var e=this._rotationDelta.lengthSquared();var t=this._requestedRotationDelta.lengthSquared();if(t>e){this._rotationDelta.lerp(this._requestedRotationDelta,this._rotationIncreaseAlpha)}else{this._rotationDelta.lerp(this._requestedRotationDelta,this._rotationDecreaseAlpha)}this._requestedRotationDelta=null;return}if(this._rotationDelta.isZero){return}this._rotationDelta.multiply(this._rotationAcceleration);this._rotationDelta.threshold(this._rotationThreshold)};e.prototype._updateRotationBasic=function(){if(this._requestedBasicRotation!=null){var e=this._basicRotation[0];var t=this._basicRotation[1];var r=this._requestedBasicRotation[0];var n=this._requestedBasicRotation[1];if(Math.abs(r)>Math.abs(e)){this._basicRotation[0]=(1-this._rotationIncreaseAlpha)*e+this._rotationIncreaseAlpha*r}else{this._basicRotation[0]=(1-this._rotationDecreaseAlpha)*e+this._rotationDecreaseAlpha*r}if(Math.abs(n)>Math.abs(t)){this._basicRotation[1]=(1-this._rotationIncreaseAlpha)*t+this._rotationIncreaseAlpha*n}else{this._basicRotation[1]=(1-this._rotationDecreaseAlpha)*t+this._rotationDecreaseAlpha*n}this._requestedBasicRotation=null;return}if(this._requestedBasicRotationUnbounded!=null){var r=this._requestedBasicRotationUnbounded[0];var n=this._requestedBasicRotationUnbounded[1];if(Math.abs(r)>0){this._basicRotation[0]=(1-this._unboundedRotationAlpha)*this._basicRotation[0]+this._unboundedRotationAlpha*r}if(Math.abs(n)>0){this._basicRotation[1]=(1-this._unboundedRotationAlpha)*this._basicRotation[1]+this._unboundedRotationAlpha*n}if(this._desiredLookat!=null){var i=this.currentTransform.projectBasic(this._desiredLookat.toArray());i[0]+=r;i[1]+=n;this._desiredLookat=(new p.Vector3).fromArray(this.currentTransform.unprojectBasic(i,this._lookatDepth))}this._requestedBasicRotationUnbounded=null}if(this._basicRotation[0]===0&&this._basicRotation[1]===0){return}this._basicRotation[0]=this._rotationAcceleration*this._basicRotation[0];this._basicRotation[1]=this._rotationAcceleration*this._basicRotation[1];if(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(){if(this._currentNode.fullPano){return}if(this._requestedRotationDelta!=null){this._requestedRotationDelta=null}if(!this._rotationDelta.isZero){this._rotationDelta.reset()}if(this._requestedBasicRotation!=null){this._requestedBasicRotation=null}if(this._basicRotation[0]>0||this._basicRotation[1]>0){this._basicRotation=[0,0]}};e.prototype._setDesiredCenter=function(){if(this._desiredCenter==null){return}var e=(new p.Vector3).fromArray(this.currentTransform.unprojectBasic(this._desiredCenter,this._lookatDepth)).sub(this._currentCamera.position);this._currentCamera.lookat.copy(this._currentCamera.position.clone().add(e));this._previousCamera.lookat.copy(this._previousCamera.position.clone().add(e));this._desiredCenter=null};e.prototype._setDesiredZoom=function(){this._desiredZoom=this._currentNode.fullPano||this._previousNode==null?this._zoom:0};return e}(i.StateBase);r.InteractiveStateBase=o;r.default=o},{"../../State":282,three:226}],418:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var i=e("../../State");var o=function(r){n(e,r);function e(e){var t=r.call(this,e)||this;t._adjustCameras();t._motionless=t._motionlessTransition();return t}e.prototype.traverse=function(){return new i.TraversingState(this)};e.prototype.wait=function(){return new i.WaitingState(this)};e.prototype.prepend=function(e){r.prototype.prepend.call(this,e);this._motionless=this._motionlessTransition()};e.prototype.set=function(e){r.prototype.set.call(this,e);this._motionless=this._motionlessTransition()};e.prototype.move=function(e){this._alpha=Math.max(0,Math.min(1,this._alpha+e))};e.prototype.moveTo=function(e){this._alpha=Math.max(0,Math.min(1,e))};e.prototype.update=function(e){this._updateRotation();if(!this._rotationDelta.isZero){this._applyRotation(this._rotationDelta,this._previousCamera);this._applyRotation(this._rotationDelta,this._currentCamera)}this._updateRotationBasic();if(this._basicRotation[0]!==0||this._basicRotation[1]!==0){this._applyRotationBasic(this._basicRotation)}var t=this._animationSpeed*(60/e);this._updateZoom(t);this._updateLookat(t);this._camera.lerpCameras(this._previousCamera,this._currentCamera,this.alpha)};e.prototype._getAlpha=function(){return this._motionless?Math.round(this._alpha):this._alpha};e.prototype._setCurrentCamera=function(){r.prototype._setCurrentCamera.call(this);this._adjustCameras()};e.prototype._adjustCameras=function(){if(this._previousNode==null){return}if(this._currentNode.fullPano){var e=this._camera.lookat.clone().sub(this._camera.position);this._currentCamera.lookat.copy(e.clone().add(this._currentCamera.position))}if(this._previousNode.fullPano){var e=this._currentCamera.lookat.clone().sub(this._currentCamera.position);this._previousCamera.lookat.copy(e.clone().add(this._previousCamera.position))}};return e}(i.InteractiveStateBase);r.InteractiveWaitingState=o;r.default=o},{"../../State":282}],419:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var a=e("../../Error");var s=e("../../Geo");var n=e("../../State");var i=function(){function e(e){this._spatial=new s.Spatial;this._geoCoords=new s.GeoCoords;this._referenceThreshold=.01;this._transitionMode=e.transitionMode;this._reference=e.reference;this._alpha=e.alpha;this._camera=e.camera.clone();this._zoom=e.zoom;this._currentIndex=e.currentIndex;this._trajectory=e.trajectory.slice();this._trajectoryTransforms=[];this._trajectoryCameras=[];for(var t=0,r=this._trajectory;t<r.length;t++){var n=r[t];var i=this._nodeToTranslation(n,this._reference);var o=new s.Transform(n.orientation,n.width,n.height,n.focal,n.scale,n.gpano,n.rotation,i,n.image,undefined,n.ck1,n.ck2);this._trajectoryTransforms.push(o);this._trajectoryCameras.push(new s.Camera(o))}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 s.Camera;this._previousCamera=this._trajectoryCameras.length>1&&this.currentIndex>0?this._trajectoryCameras[this._currentIndex-1].clone():this._currentCamera.clone()}Object.defineProperty(e.prototype,"reference",{get:function(){return this._reference},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"alpha",{get:function(){return this._getAlpha()},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"camera",{get:function(){return this._camera},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"zoom",{get:function(){return this._zoom},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"trajectory",{get:function(){return this._trajectory},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"currentIndex",{get:function(){return this._currentIndex},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"currentNode",{get:function(){return this._currentNode},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"previousNode",{get:function(){return this._previousNode},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"currentCamera",{get:function(){return this._currentCamera},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"currentTransform",{get:function(){return this._trajectoryTransforms.length>0?this._trajectoryTransforms[this.currentIndex]:null},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"previousTransform",{get:function(){return this._trajectoryTransforms.length>1&&this.currentIndex>0?this._trajectoryTransforms[this.currentIndex-1]:null},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"motionless",{get:function(){return this._motionless},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"transitionMode",{get:function(){return this._transitionMode},enumerable:true,configurable:true});e.prototype.earth=function(){throw new Error("Not implemented")};e.prototype.traverse=function(){throw new Error("Not implemented")};e.prototype.wait=function(){throw new Error("Not implemented")};e.prototype.waitInteractively=function(){throw new Error("Not implemented")};e.prototype.move=function(e){};e.prototype.moveTo=function(e){};e.prototype.rotate=function(e){};e.prototype.rotateUnbounded=function(e){};e.prototype.rotateWithoutInertia=function(e){};e.prototype.rotateBasic=function(e){};e.prototype.rotateBasicUnbounded=function(e){};e.prototype.rotateBasicWithoutInertia=function(e){};e.prototype.rotateToBasic=function(e){};e.prototype.setSpeed=function(e){};e.prototype.zoomIn=function(e,t){};e.prototype.update=function(e){};e.prototype.setCenter=function(e){};e.prototype.setZoom=function(e){};e.prototype.dolly=function(e){};e.prototype.orbit=function(e){};e.prototype.truck=function(e){};e.prototype.append=function(e){if(e.length<1){throw Error("Trajectory can not be empty")}if(this._currentIndex<0){this.set(e)}else{this._trajectory=this._trajectory.concat(e);this._appendToTrajectories(e)}};e.prototype.prepend=function(e){if(e.length<1){throw Error("Trajectory can not be empty")}this._trajectory=e.slice().concat(this._trajectory);this._currentIndex+=e.length;this._setCurrentNode();var t=this._setReference(this._currentNode);if(t){this._setTrajectories()}else{this._prependToTrajectories(e)}this._setCurrentCamera()};e.prototype.remove=function(e){if(e<0){throw Error("n must be a positive integer")}if(this._currentIndex-1<e){throw Error("Current and previous nodes can not be removed")}for(var t=0;t<e;t++){this._trajectory.shift();this._trajectoryTransforms.shift();this._trajectoryCameras.shift();this._currentIndex--}this._setCurrentNode()};e.prototype.clearPrior=function(){if(this._currentIndex>0){this.remove(this._currentIndex-1)}};e.prototype.clear=function(){this.cut();if(this._currentIndex>0){this.remove(this._currentIndex-1)}};e.prototype.cut=function(){while(this._trajectory.length-1>this._currentIndex){this._trajectory.pop();this._trajectoryTransforms.pop();this._trajectoryCameras.pop()}};e.prototype.set=function(e){this._setTrajectory(e);this._setCurrentNode();this._setReference(this._currentNode);this._setTrajectories();this._setCurrentCamera()};e.prototype.getCenter=function(){return this._currentNode!=null?this.currentTransform.projectBasic(this._camera.lookat.toArray()):[.5,.5]};e.prototype.setTransitionMode=function(e){this._transitionMode=e};e.prototype._getAlpha=function(){return 1};e.prototype._setCurrent=function(){this._setCurrentNode();var e=this._setReference(this._currentNode);if(e){this._setTrajectories()}this._setCurrentCamera()};e.prototype._setCurrentCamera=function(){this._currentCamera=this._trajectoryCameras[this._currentIndex].clone();this._previousCamera=this._currentIndex>0?this._trajectoryCameras[this._currentIndex-1].clone():this._currentCamera.clone()};e.prototype._motionlessTransition=function(){var e=this._currentNode!=null&&this._previousNode!=null;return e&&(this._transitionMode===n.TransitionMode.Instantaneous||!(this._currentNode.merged&&this._previousNode.merged&&this._withinOriginalDistance()&&this._sameConnectedComponent()))};e.prototype._setReference=function(e){if(Math.abs(e.latLon.lat-this.reference.lat)<this._referenceThreshold&&Math.abs(e.latLon.lon-this.reference.lon)<this._referenceThreshold){return false}if(this._previousNode!=null&&!this._motionlessTransition()){return false}this._reference.lat=e.latLon.lat;this._reference.lon=e.latLon.lon;this._reference.alt=e.alt;return true};e.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};e.prototype._setTrajectory=function(e){if(e.length<1){throw new a.ArgumentMapillaryError("Trajectory can not be empty")}if(this._currentNode!=null){this._trajectory=[this._currentNode].concat(e);this._currentIndex=1}else{this._trajectory=e.slice();this._currentIndex=0}};e.prototype._setTrajectories=function(){this._trajectoryTransforms.length=0;this._trajectoryCameras.length=0;this._appendToTrajectories(this._trajectory)};e.prototype._appendToTrajectories=function(e){for(var t=0,r=e;t<r.length;t++){var n=r[t];if(!n.assetsCached){throw new a.ArgumentMapillaryError("Assets must be cached when node is added to trajectory")}var i=this._nodeToTranslation(n,this.reference);var o=new s.Transform(n.orientation,n.width,n.height,n.focal,n.scale,n.gpano,n.rotation,i,n.image,undefined,n.ck1,n.ck2);this._trajectoryTransforms.push(o);this._trajectoryCameras.push(new s.Camera(o))}};e.prototype._prependToTrajectories=function(e){for(var t=0,r=e.reverse();t<r.length;t++){var n=r[t];if(!n.assetsCached){throw new a.ArgumentMapillaryError("Assets must be cached when added to trajectory")}var i=this._nodeToTranslation(n,this.reference);var o=new s.Transform(n.orientation,n.width,n.height,n.focal,n.scale,n.gpano,n.rotation,i,n.image,undefined,n.ck1,n.ck2);this._trajectoryTransforms.unshift(o);this._trajectoryCameras.unshift(new s.Camera(o))}};e.prototype._nodeToTranslation=function(e,t){return s.Geo.computeTranslation({alt:e.alt,lat:e.latLon.lat,lon:e.latLon.lon},e.rotation,t)};e.prototype._sameConnectedComponent=function(){var e=this._currentNode;var t=this._previousNode;return!!e&&!!t&&e.mergeCC===t.mergeCC};e.prototype._withinOriginalDistance=function(){var e=this._currentNode;var t=this._previousNode;if(!e||!t){return true}var r=this._spatial.distanceFromLatLon(e.originalLatLon.lat,e.originalLatLon.lon,t.originalLatLon.lat,t.originalLatLon.lon);return r<25};return e}();r.StateBase=i},{"../../Error":277,"../../Geo":278,"../../State":282}],420:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var i=e("@mapbox/unitbezier");var o=e("../../State");var a=function(r){n(e,r);function e(e){var t=r.call(this,e)||this;t._adjustCameras();t._motionless=t._motionlessTransition();t._baseAlpha=t._alpha;t._speedCoefficient=1;t._unitBezier=new i(.74,.67,.38,.96);t._useBezier=false;return t}e.prototype.earth=function(){return new o.EarthState(this)};e.prototype.wait=function(){return new o.WaitingState(this)};e.prototype.waitInteractively=function(){return new o.InteractiveWaitingState(this)};e.prototype.append=function(e){var t=this._trajectory.length===0;if(t){this._resetTransition()}r.prototype.append.call(this,e);if(t){this._setDesiredCenter();this._setDesiredZoom()}};e.prototype.prepend=function(e){var t=this._trajectory.length===0;if(t){this._resetTransition()}r.prototype.prepend.call(this,e);if(t){this._setDesiredCenter();this._setDesiredZoom()}};e.prototype.set=function(e){r.prototype.set.call(this,e);this._desiredLookat=null;this._resetTransition();this._clearRotation();this._setDesiredCenter();this._setDesiredZoom();if(this._trajectory.length<3){this._useBezier=true}};e.prototype.setSpeed=function(e){this._speedCoefficient=this._spatial.clamp(e,0,10)};e.prototype.update=function(e){if(this._alpha===1&&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 t=this._animationSpeed*(60/e);this._baseAlpha=Math.min(1,this._baseAlpha+this._speedCoefficient*t);if(this._useBezier){this._alpha=this._unitBezier.solve(this._baseAlpha)}else{this._alpha=this._baseAlpha}this._updateRotation();if(!this._rotationDelta.isZero){this._applyRotation(this._rotationDelta,this._previousCamera);this._applyRotation(this._rotationDelta,this._currentCamera)}this._updateRotationBasic();if(this._basicRotation[0]!==0||this._basicRotation[1]!==0){this._applyRotationBasic(this._basicRotation)}this._updateZoom(t);this._updateLookat(t);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(){r.prototype._setCurrentCamera.call(this);this._adjustCameras()};e.prototype._adjustCameras=function(){if(this._previousNode==null){return}var e=this._camera.lookat.clone().sub(this._camera.position);this._previousCamera.lookat.copy(e.clone().add(this._previousCamera.position));if(this._currentNode.fullPano){this._currentCamera.lookat.copy(e.clone().add(this._currentCamera.position))}};e.prototype._resetTransition=function(){this._alpha=0;this._baseAlpha=0;this._motionless=this._motionlessTransition()};return e}(o.InteractiveStateBase);r.TraversingState=a;r.default=a},{"../../State":282,"@mapbox/unitbezier":2}],421:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var i=e("../../State");var o=function(r){n(e,r);function e(e){var t=r.call(this,e)||this;t._zoom=0;t._adjustCameras();t._motionless=t._motionlessTransition();return t}e.prototype.traverse=function(){return new i.TraversingState(this)};e.prototype.waitInteractively=function(){return new i.InteractiveWaitingState(this)};e.prototype.prepend=function(e){r.prototype.prepend.call(this,e);this._motionless=this._motionlessTransition()};e.prototype.set=function(e){r.prototype.set.call(this,e);this._motionless=this._motionlessTransition()};e.prototype.move=function(e){this._alpha=Math.max(0,Math.min(1,this._alpha+e))};e.prototype.moveTo=function(e){this._alpha=Math.max(0,Math.min(1,e))};e.prototype.update=function(e){this._camera.lerpCameras(this._previousCamera,this._currentCamera,this.alpha)};e.prototype._getAlpha=function(){return this._motionless?Math.round(this._alpha):this._alpha};e.prototype._setCurrentCamera=function(){r.prototype._setCurrentCamera.call(this);this._adjustCameras()};e.prototype._adjustCameras=function(){if(this._previousNode==null){return}if(this._currentNode.fullPano){var e=this._camera.lookat.clone().sub(this._camera.position);this._currentCamera.lookat.copy(e.clone().add(this._currentCamera.position))}if(this._previousNode.fullPano){var e=this._currentCamera.lookat.clone().sub(this._currentCamera.position);this._previousCamera.lookat.copy(e.clone().add(this._previousCamera.position))}};return e}(i.StateBase);r.WaitingState=o;r.default=o},{"../../State":282}],422:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("rxjs");var i=function(){function e(e,t,r){this._scheme=e;this._host=t;this._origin=r!=null?"?origin="+r:""}e.prototype.getTile=function(i,o,a,s,u,e,t){var r="/"+i+"/"+o+","+a+","+s+","+u+"/"+e+","+t+"/0/default.jpg";var c=this._scheme+"://"+this._host+r+this._origin;var h=null;return[n.Observable.create(function(n){h=new XMLHttpRequest;h.open("GET",c,true);h.responseType="arraybuffer";h.timeout=15e3;h.onload=function(e){if(h.status!==200){n.error(new Error("Failed to fetch tile ("+i+": "+o+","+a+","+s+","+u+"). "+("Status: "+h.status+", "+h.statusText)));return}var t=new Image;t.crossOrigin="Anonymous";t.onload=function(e){n.next(t);n.complete()};t.onerror=function(e){n.error(new Error("Failed to load tile image ("+i+": "+o+","+a+","+s+","+u+")"))};var r=new Blob([h.response]);t.src=window.URL.createObjectURL(r)};h.onerror=function(e){n.error(new Error("Failed to fetch tile ("+i+": "+o+","+a+","+s+","+u+")"))};h.ontimeout=function(e){n.error(new Error("Tile request timed out ("+i+": "+o+","+a+","+s+","+u+")"))};h.onabort=function(e){n.error(new Error("Tile request was aborted ("+i+": "+o+","+a+","+s+","+u+")"))};h.send(null)}),function(){if(h!=null){h.abort()}}]};return e}();r.ImageTileLoader=i;r.default=i},{rxjs:27}],423:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=function(){function e(){this._images={}}e.prototype.addImage=function(e,t,r){if(!(r in this._images)){this._images[r]={}}this._images[r][t]=e};e.prototype.dispose=function(){for(var e=0,t=Object.keys(this._images);e<t.length;e++){var r=t[e];var n=this._images[r];for(var 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]}};e.prototype.getImage=function(e,t){return this._images[t][e]};e.prototype.hasImage=function(e,t){return t in this._images&&e in this._images[t]};return e}();r.ImageTileStore=n;r.default=n},{}],424:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("../Geo");var i=function(){function e(){this._viewportCoords=new n.ViewportCoords}e.prototype.computeRegionOfInterest=function(e,t,r){var n=this._viewportBoundaryPoints(4);var i=this._viewportPointsBoundingBox(n,e,r);this._clipBoundingBox(i);var o=2/t.width;var a=2/t.height;var s=[[-.5*o,.5*a],[.5*o,.5*a],[.5*o,-.5*a],[-.5*o,-.5*a]];var u=this._viewportPointsBoundingBox(s,e,r);return{bbox:i,pixelHeight:u.maxY-u.minY,pixelWidth:u.maxX-u.minX+(u.minX<u.maxX?0:1)}};e.prototype._viewportBoundaryPoints=function(e){var t=[];var r=[[-1,1],[1,1],[1,-1],[-1,-1]];var n=[[2,0],[0,-2],[-2,0],[0,2]];for(var i=0;i<4;++i){var o=r[i];var a=n[i];for(var s=0;s<e;++s){t.push([o[0]+a[0]*s/e,o[1]+a[1]*s/e])}}return t};e.prototype._viewportPointsBoundingBox=function(e,t,r){var n=this;var i=e.map(function(e){return n._viewportCoords.viewportToBasic(e[0],e[1],r,t.perspective)});if(r.gpano!=null){return this._boundingBoxPano(i)}else{return this._boundingBox(i)}};e.prototype._boundingBox=function(e){var t={maxX:Number.NEGATIVE_INFINITY,maxY:Number.NEGATIVE_INFINITY,minX:Number.POSITIVE_INFINITY,minY:Number.POSITIVE_INFINITY};for(var r=0;r<e.length;++r){t.minX=Math.min(t.minX,e[r][0]);t.maxX=Math.max(t.maxX,e[r][0]);t.minY=Math.min(t.minY,e[r][1]);t.maxY=Math.max(t.maxY,e[r][1])}return t};e.prototype._boundingBoxPano=function(e){var r=this;var t=[];var n=[];for(var i=0;i<e.length;++i){t.push(e[i][0]);n.push(e[i][1])}t.sort(function(e,t){return r._sign(e-t)});n.sort(function(e,t){return r._sign(e-t)});var o=this._intervalPano(t);return{maxX:o[1],maxY:n[n.length-1],minX:o[0],minY:n[0]}};e.prototype._intervalPano=function(e){var t=0;var r=-1;for(var n=0;n<e.length-1;++n){var i=e[n+1]-e[n];if(i>t){t=i;r=n}}var o=e[0]+1-e[e.length-1];if(o>t){return[e[0],e[e.length-1]]}else{return[e[r+1],e[r]]}};e.prototype._clipBoundingBox=function(e){e.minX=Math.max(0,Math.min(1,e.minX));e.maxX=Math.max(0,Math.min(1,e.maxX));e.minY=Math.max(0,Math.min(1,e.minY));e.maxY=Math.max(0,Math.min(1,e.maxY))};e.prototype._sign=function(e){return e>0?1:e<0?-1:0};return e}();r.RegionOfInterestCalculator=i;r.default=i},{"../Geo":278}],425:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var u=e("rxjs/operators");var g=e("three");var c=e("rxjs");var n=function(){function e(e,t,r,n,i,o,a,s){this._disposed=false;this._key=e;if(t<=0||r<=0){console.warn("Original image size ("+t+", "+r+") is invalid ("+e+"). Tiles will not be loaded.")}this._width=t;this._height=r;this._maxLevel=Math.ceil(Math.log(Math.max(r,t))/Math.log(2));this._currentLevel=-1;this._tileSize=n;this._updated$=new c.Subject;this._createdSubject$=new c.Subject;this._created$=this._createdSubject$.pipe(u.publishReplay(1),u.refCount());this._createdSubscription=this._created$.subscribe(function(){});this._hasSubject$=new c.Subject;this._has$=this._hasSubject$.pipe(u.startWith(false),u.publishReplay(1),u.refCount());this._hasSubscription=this._has$.subscribe(function(){});this._abortFunctions=[];this._tileSubscriptions={};this._renderedCurrentLevelTiles={};this._renderedTiles={};this._background=i;this._camera=null;this._imageTileLoader=o;this._imageTileStore=a;this._renderer=s;this._renderTarget=null;this._roi=null}Object.defineProperty(e.prototype,"disposed",{get:function(){return this._disposed},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"hasTexture$",{get:function(){return this._has$},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"key",{get:function(){return this._key},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"textureUpdated$",{get:function(){return this._updated$},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"textureCreated$",{get:function(){return this._created$},enumerable:true,configurable:true});e.prototype.abort=function(){for(var e in this._tileSubscriptions){if(!this._tileSubscriptions.hasOwnProperty(e)){continue}this._tileSubscriptions[e].unsubscribe()}this._tileSubscriptions={};for(var t=0,r=this._abortFunctions;t<r.length;t++){var n=r[t];n()}this._abortFunctions=[]};e.prototype.dispose=function(){if(this._disposed){console.warn("Texture already disposed ("+this._key+")");return}this.abort();if(this._renderTarget!=null){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=true};e.prototype.setRegionOfInterest=function(e){if(this._width<=0||this._height<=0){return}this._roi=e;var t=1/this._roi.pixelWidth;var r=1/this._roi.pixelHeight;var n=Math.max(r,t);var i=Math.max(0,Math.min(this._maxLevel,Math.ceil(Math.log(n)/Math.log(2))));if(i!==this._currentLevel){this.abort();this._currentLevel=i;if(!(this._currentLevel in this._renderedTiles)){this._renderedTiles[this._currentLevel]=[]}this._renderedCurrentLevelTiles={};for(var o=0,a=this._renderedTiles[this._currentLevel];o<a.length;o++){var s=a[o];this._renderedCurrentLevelTiles[this._tileKey(this._tileSize,s)]=true}}var u=this._getTileCoords([this._roi.bbox.minX,this._roi.bbox.minY]);var c=this._getTileCoords([this._roi.bbox.maxX,this._roi.bbox.maxY]);var h=this._getTiles(u,c);if(this._camera==null){this._camera=new g.OrthographicCamera(-this._width/2,this._width/2,this._height/2,-this._height/2,-1,1);this._camera.position.z=1;var l=this._renderer.getContext();var p=l.getParameter(l.MAX_TEXTURE_SIZE);var f=Math.max(this._width,this._height);var d=p>f?1:p/f;var v=Math.floor(d*this._width);var m=Math.floor(d*this._height);this._renderTarget=new g.WebGLRenderTarget(v,m,{depthBuffer:false,format:g.RGBFormat,magFilter:g.LinearFilter,minFilter:g.LinearFilter,stencilBuffer:false});this._renderToTarget(0,0,this._width,this._height,this._background);this._createdSubject$.next(this._renderTarget.texture);this._hasSubject$.next(true)}this._fetchTiles(h)};e.prototype.setTileSize=function(e){this._tileSize=e};e.prototype.updateBackground=function(e){this._background=e};e.prototype._fetchTile=function(t,r,n,i,o,a,e,s){var u=this;var c=this._imageTileLoader.getTile(this._key,n,i,o,a,e,s);var h=c[0];var l=c[1];this._abortFunctions.push(l);var p=this._tileKey(this._tileSize,t);var f=h.subscribe(function(e){u._renderToTarget(n,i,o,a,e);u._removeFromDictionary(p,u._tileSubscriptions);u._removeFromArray(l,u._abortFunctions);u._setTileRendered(t,u._currentLevel);u._imageTileStore.addImage(e,p,r);u._updated$.next(true)},function(e){u._removeFromDictionary(p,u._tileSubscriptions);u._removeFromArray(l,u._abortFunctions);console.error(e)});if(!f.closed){this._tileSubscriptions[p]=f}};e.prototype._fetchTiles=function(e){var t=this._tileSize*Math.pow(2,this._maxLevel-this._currentLevel);for(var r=0,n=e;r<n.length;r++){var i=n[r];var o=this._tileKey(this._tileSize,i);if(o in this._renderedCurrentLevelTiles||o in this._tileSubscriptions){continue}var a=t*i[0];var s=t*i[1];var u=a+t>this._width?this._width-a:t;var c=s+t>this._height?this._height-s:t;if(this._imageTileStore.hasImage(o,this._currentLevel)){this._renderToTarget(a,s,u,c,this._imageTileStore.getImage(o,this._currentLevel));this._setTileRendered(i,this._currentLevel);this._updated$.next(true);continue}var h=Math.floor(u/t*this._tileSize);var l=Math.floor(c/t*this._tileSize);this._fetchTile(i,this._currentLevel,a,s,u,c,h,l)}};e.prototype._getTileCoords=function(e){var t=this._tileSize*Math.pow(2,this._maxLevel-this._currentLevel);var r=Math.ceil(this._width/t)-1;var n=Math.ceil(this._height/t)-1;return[Math.min(Math.floor(this._width*e[0]/t),r),Math.min(Math.floor(this._height*e[1]/t),n)]};e.prototype._getTiles=function(e,t){var r=[];if(e[0]>t[0]){var n=this._tileSize*Math.pow(2,this._maxLevel-this._currentLevel);var i=Math.ceil(this._width/n)-1;for(var o=e[0];o<=i;o++){r.push(o)}for(var o=0;o<=t[0];o++){r.push(o)}}else{for(var o=e[0];o<=t[0];o++){r.push(o)}}var a=[];for(var s=0,u=r;s<u.length;s++){var o=u[s];for(var c=e[1];c<=t[1];c++){a.push([o,c])}}return a};e.prototype._removeFromArray=function(e,t){var r=t.indexOf(e);if(r!==-1){t.splice(r,1)}};e.prototype._removeFromDictionary=function(e,t){if(e in t){delete t[e]}};e.prototype._renderToTarget=function(e,t,r,n,i){var o=new g.Texture(i);o.minFilter=g.LinearFilter;o.needsUpdate=true;var a=new g.PlaneGeometry(r,n);var s=new g.MeshBasicMaterial({map:o,side:g.FrontSide});var u=new g.Mesh(a,s);u.position.x=-this._width/2+e+r/2;u.position.y=this._height/2-t-n/2;var c=new g.Scene;c.add(u);this._renderer.render(c,this._camera,this._renderTarget);this._renderer.setRenderTarget(undefined);c.remove(u);a.dispose();s.dispose();o.dispose()};e.prototype._setTileRendered=function(e,t){var r=Object.keys(this._renderedTiles).map(function(e){return parseInt(e,10)}).filter(function(e){return e!==t});for(var n=0,i=r;n<i.length;n++){var o=i[n];var a=Math.pow(2,o-t);if(o<t){var s=Math.floor(a*e[0]);var u=Math.floor(a*e[1]);for(var c=0,h=this._renderedTiles[o].slice();c<h.length;c++){var l=h[c];if(l[0]===s&&l[1]===u){var p=this._renderedTiles[o].indexOf(l);this._renderedTiles[o].splice(p,1)}}}else{var f=a*e[0];var d=f+a-1;var v=a*e[1];var m=v+a-1;for(var g=0,y=this._renderedTiles[o].slice();g<y.length;g++){var l=y[g];if(l[0]>=f&&l[0]<=d&&l[1]>=v&&l[1]<=m){var p=this._renderedTiles[o].indexOf(l);this._renderedTiles[o].splice(p,1)}}}if(this._renderedTiles[o].length===0){delete this._renderedTiles[o]}}this._renderedTiles[t].push(e);this._renderedCurrentLevelTiles[this._tileKey(this._tileSize,e)]=true};e.prototype._tileKey=function(e,t){return e+"-"+t[0]+"-"+t[1]};return e}();r.TextureProvider=n;r.default=n},{rxjs:27,"rxjs/operators":225,three:226}],426:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=function(){function e(e){this._document=!!e?e:document}Object.defineProperty(e.prototype,"document",{get:function(){return this._document},enumerable:true,configurable:true});e.prototype.createElement=function(e,t,r){var n=this._document.createElement(e);if(!!t){n.className=t}if(!!r){r.appendChild(n)}return n};return e}();r.DOM=n;r.default=n},{}],427:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=function(){function e(){this._events={}}e.prototype.on=function(e,t){this._events[e]=this._events[e]||[];this._events[e].push(t);return};e.prototype.off=function(e,t){if(!e){this._events={};return}if(!this._listens(e)){var r=this._events[e].indexOf(t);if(r>=0){this._events[e].splice(r,1)}if(this._events[e].length){delete this._events[e]}}else{delete this._events[e]}return};e.prototype.fire=function(e,t){if(!this._listens(e)){return}for(var r=0,n=this._events[e];r<n.length;r++){var i=n[r];i.call(this,t)}return};e.prototype._listens=function(e){return!!(this._events&&this._events[e])};return e}();r.EventEmitter=n;r.default=n},{}],428:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("../Viewer");var i=function(){function t(){}t.setOptions=function(e){t._baseImageSize=e.baseImageSize!=null?e.baseImageSize:n.ImageSize.Size640;t._basePanoramaSize=e.basePanoramaSize!=null?e.basePanoramaSize:n.ImageSize.Size2048;t._maxImageSize=e.maxImageSize!=null?e.maxImageSize:n.ImageSize.Size2048};Object.defineProperty(t,"baseImageSize",{get:function(){return t._baseImageSize},enumerable:true,configurable:true});Object.defineProperty(t,"basePanoramaSize",{get:function(){return t._basePanoramaSize},enumerable:true,configurable:true});Object.defineProperty(t,"maxImageSize",{get:function(){return t._maxImageSize},enumerable:true,configurable:true});return t}();r.Settings=i;r.default=i},{"../Viewer":286}],429:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});function n(){return typeof window!=="undefined"&&typeof document!=="undefined"}r.isBrowser=n;function i(){return!!(Array.prototype&&Array.prototype.filter&&Array.prototype.indexOf&&Array.prototype.map&&Array.prototype.reverse)}r.isArraySupported=i;function o(){return!!(Function.prototype&&Function.prototype.bind)}r.isFunctionSupported=o;function a(){return"JSON"in window&&"parse"in JSON&&"stringify"in JSON}r.isJSONSupported=a;function s(){return!!(Object.keys&&Object.assign)}r.isObjectSupported=s;function u(){return"Blob"in window&&"URL"in window}r.isBlobSupported=u;var c=undefined;function h(){if(c===undefined){c=l()}return c}r.isWebGLSupportedCached=h;function l(){var e={alpha:false,antialias:false,depth:true,failIfMajorPerformanceCaveat:false,premultipliedAlpha:true,preserveDrawingBuffer:false,stencil:true};var t=document.createElement("canvas");var r=t.getContext("webgl",e)||t.getContext("experimental-webgl",e);if(!r){return false}var n=["OES_standard_derivatives"];var i=r.getSupportedExtensions();for(var o=0,a=n;o<a.length;o++){var s=a[o];if(i.indexOf(s)===-1){return false}}return true}r.isWebGLSupported=l},{}],430:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=function(){function i(){}Object.defineProperty(i,"explore",{get:function(){return i._scheme+"://"+i._exploreHost},enumerable:true,configurable:true});Object.defineProperty(i,"origin",{get:function(){return i._origin},enumerable:true,configurable:true});Object.defineProperty(i,"tileScheme",{get:function(){return i._scheme},enumerable:true,configurable:true});Object.defineProperty(i,"tileDomain",{get:function(){return i._imageTileHost},enumerable:true,configurable:true});i.atomicReconstruction=function(e){return i._scheme+"://"+i._atomicReconstructionHost+"/"+e+"/sfm/v1.0/atomic_reconstruction.json"};i.exporeImage=function(e){return i._scheme+"://"+i._exploreHost+"/app/?pKey="+e+"&focus=photo"};i.exporeUser=function(e){return i._scheme+"://"+i._exploreHost+"/app/user/"+e};i.falcorModel=function(e){return i._scheme+"://"+i._apiHost+"/v3/model.json?client_id="+e};i.protoMesh=function(e){return i._scheme+"://"+i._meshHost+"/v2/mesh/"+e};i.thumbnail=function(e,t,r){var n=!!r?"?origin="+r:"";return i._scheme+"://"+i._imageHost+"/"+e+"/thumb-"+t+".jpg"+n};i.setOptions=function(e){if(!e){return}if(!!e.apiHost){i._apiHost=e.apiHost}if(!!e.atomicReconstructionHost){i._atomicReconstructionHost=e.atomicReconstructionHost}if(!!e.exploreHost){i._exploreHost=e.exploreHost}if(!!e.imageHost){i._imageHost=e.imageHost}if(!!e.imageTileHost){i._imageTileHost=e.imageTileHost}if(!!e.meshHost){i._meshHost=e.meshHost}if(!!e.scheme){i._scheme=e.scheme}};i._apiHost="a.mapillary.com";i._atomicReconstructionHost="d3necqxnn15whe.cloudfront.net";i._exploreHost="www.mapillary.com";i._imageHost="d1cuyjsrcm0gby.cloudfront.net";i._imageTileHost="d2qb1440i7l50o.cloudfront.net";i._meshHost="d1brzeo354iq2l.cloudfront.net";i._origin="mapillary.webgl";i._scheme="https";return i}();r.Urls=n;r.default=n},{}],431:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n;(function(e){e[e["Bottom"]=0]="Bottom";e[e["BottomLeft"]=1]="BottomLeft";e[e["BottomRight"]=2]="BottomRight";e[e["Center"]=3]="Center";e[e["Left"]=4]="Left";e[e["Right"]=5]="Right";e[e["Top"]=6]="Top";e[e["TopLeft"]=7]="TopLeft";e[e["TopRight"]=8]="TopRight"})(n=r.Alignment||(r.Alignment={}));r.default=n},{}],432:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("rxjs");var i=e("rxjs/operators");var a=e("../Graph");var o=function(){function e(e,t){this._graphService=e;this._stateService=t;this._started=false}Object.defineProperty(e.prototype,"started",{get:function(){return this._started},enumerable:true,configurable:true});e.prototype.start=function(){var o=this;if(this._started){return}this._uncacheSubscription=this._stateService.currentState$.pipe(i.distinctUntilChanged(undefined,function(e){return e.state.currentNode.key}),i.map(function(e){var t=e.state.trajectory;var r=t.map(function(e){return e.key});var n=t[t.length-1].sequenceKey;return[r,n]}),i.bufferCount(1,5),i.withLatestFrom(this._graphService.graphMode$),i.switchMap(function(e){var t=e[0],r=e[1];var n=t[0][0];var i=r===a.GraphMode.Sequence?t[0][1]:undefined;return o._graphService.uncache$(n,i)})).subscribe(function(){});this._cacheNodeSubscription=this._graphService.graphMode$.pipe(i.skip(1),i.withLatestFrom(this._stateService.currentState$),i.switchMap(function(e){var t=e[0],r=e[1];return t===a.GraphMode.Sequence?o._keyToEdges(r.state.currentNode.key,function(e){return e.sequenceEdges$}):n.from(r.state.trajectory.map(function(e){return e.key}).slice(r.state.currentIndex)).pipe(i.mergeMap(function(e){return o._keyToEdges(e,function(e){return e.spatialEdges$})},6))})).subscribe(function(){});this._started=true};e.prototype.stop=function(){if(!this._started){return}this._uncacheSubscription.unsubscribe();this._uncacheSubscription=null;this._cacheNodeSubscription.unsubscribe();this._cacheNodeSubscription=null;this._started=false};e.prototype._keyToEdges=function(t,e){return this._graphService.cacheNode$(t).pipe(i.switchMap(e),i.first(function(e){return e.cached}),i.timeout(15e3),i.catchError(function(e){console.error("Failed to cache edges ("+t+").",e);return n.empty()}))};return e}();r.CacheService=o;r.default=o},{"../Graph":279,rxjs:27,"rxjs/operators":225}],433:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var s=e("rxjs/operators");var u=e("../Component");var n=function(){function e(e,t,r,n,i,o){var a=this;this._container=e;this._observer=r;this._navigator=t;this._options=i!=null?i:{};this._key=n;this._navigable=n==null;this._componentService=!!o?o:new u.ComponentService(this._container,this._navigator);this._coverComponent=this._componentService.getCover();this._initializeComponents();if(n){this._initilizeCoverComponent();this._subscribeCoverComponent()}else{this._navigator.movedToKey$.pipe(s.first(function(e){return e!=null})).subscribe(function(e){a._key=e;a._componentService.deactivateCover();a._coverComponent.configure({key:a._key,state:u.CoverState.Hidden});a._subscribeCoverComponent();a._navigator.stateService.start();a._navigator.cacheService.start();a._observer.startEmit()})}}Object.defineProperty(e.prototype,"navigable",{get:function(){return this._navigable},enumerable:true,configurable:true});e.prototype.get=function(e){return this._componentService.get(e)};e.prototype.activate=function(e){this._componentService.activate(e)};e.prototype.activateCover=function(){this._coverComponent.configure({state:u.CoverState.Visible})};e.prototype.deactivate=function(e){this._componentService.deactivate(e)};e.prototype.deactivateCover=function(){this._coverComponent.configure({state:u.CoverState.Loading})};e.prototype._initializeComponents=function(){var e=this._options;this._uFalse(e.background,"background");this._uFalse(e.debug,"debug");this._uFalse(e.image,"image");this._uFalse(e.marker,"marker");this._uFalse(e.navigation,"navigation");this._uFalse(e.popup,"popup");this._uFalse(e.route,"route");this._uFalse(e.slider,"slider");this._uFalse(e.spatialData,"spatialData");this._uFalse(e.tag,"tag");this._uTrue(e.attribution,"attribution");this._uTrue(e.bearing,"bearing");this._uTrue(e.cache,"cache");this._uTrue(e.direction,"direction");this._uTrue(e.imagePlane,"imagePlane");this._uTrue(e.keyboard,"keyboard");this._uTrue(e.loading,"loading");this._uTrue(e.mouse,"mouse");this._uTrue(e.sequence,"sequence");this._uTrue(e.stats,"stats");this._uTrue(e.zoom,"zoom")};e.prototype._initilizeCoverComponent=function(){var e=this._options;this._coverComponent.configure({key:this._key});if(e.cover===undefined||e.cover){this.activateCover()}else{this.deactivateCover()}};e.prototype._setNavigable=function(e){if(this._navigable===e){return}this._navigable=e;this._observer.navigable$.next(e)};e.prototype._subscribeCoverComponent=function(){var n=this;this._coverComponent.configuration$.pipe(s.distinctUntilChanged(undefined,function(e){return e.state})).subscribe(function(r){if(r.state===u.CoverState.Loading){n._navigator.stateService.currentKey$.pipe(s.first(),s.switchMap(function(e){var t=e==null||e!==r.key;if(t){n._setNavigable(false)}return t?n._navigator.moveToKey$(r.key):n._navigator.stateService.currentNode$.pipe(s.first())})).subscribe(function(){n._navigator.stateService.start();n._navigator.cacheService.start();n._observer.startEmit();n._coverComponent.configure({state:u.CoverState.Hidden});n._componentService.deactivateCover();n._setNavigable(true)},function(e){console.error("Failed to deactivate cover.",e);n._coverComponent.configure({state:u.CoverState.Visible})})}else if(r.state===u.CoverState.Visible){n._observer.stopEmit();n._navigator.stateService.stop();n._navigator.cacheService.stop();n._navigator.playService.stop();n._componentService.activateCover();n._setNavigable(r.key==null)}})};e.prototype._uFalse=function(e,t){if(e===undefined){this._componentService.deactivate(t);return}if(typeof e==="boolean"){if(e){this._componentService.activate(t)}else{this._componentService.deactivate(t)}return}this._componentService.configure(t,e);this._componentService.activate(t)};e.prototype._uTrue=function(e,t){if(e===undefined){this._componentService.activate(t);return}if(typeof e==="boolean"){if(e){this._componentService.activate(t)}else{this._componentService.deactivate(t)}return}this._componentService.configure(t,e);this._componentService.activate(t)};return e}();r.ComponentController=n},{"../Component":275,"rxjs/operators":225}],434:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var i=e("../Render");var o=e("../Utils");var a=e("../Viewer");var n=function(){function e(e,t,r,n){this.id=e;this._dom=!!n?n:new o.DOM;this._container=this._dom.document.getElementById(e);if(!this._container){throw new Error("Container '"+e+"' not found.")}this._container.classList.add("mapillary-js");this._canvasContainer=this._dom.createElement("div","mapillary-js-interactive",this._container);this._domContainer=this._dom.createElement("div","mapillary-js-dom",this._container);this.renderService=new i.RenderService(this._container,t.currentState$,r.renderMode);this.glRenderer=new i.GLRenderer(this._canvasContainer,this.renderService,this._dom);this.domRenderer=new i.DOMRenderer(this._domContainer,this.renderService,t.currentState$);this.keyboardService=new a.KeyboardService(this._canvasContainer);this.mouseService=new a.MouseService(this._container,this._canvasContainer,this._domContainer,document);this.touchService=new a.TouchService(this._canvasContainer,this._domContainer);this.spriteService=new a.SpriteService(r.sprite)}Object.defineProperty(e.prototype,"element",{get:function(){return this._container},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"canvasContainer",{get:function(){return this._canvasContainer},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"domContainer",{get:function(){return this._domContainer},enumerable:true,configurable:true});return e}();r.Container=n;r.default=n},{"../Render":281,"../Utils":285,"../Viewer":286}],435:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n;(function(e){e[e["Size320"]=320]="Size320";e[e["Size640"]=640]="Size640";e[e["Size1024"]=1024]="Size1024";e[e["Size2048"]=2048]="Size2048"})(n=r.ImageSize||(r.ImageSize={}))},{}],436:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("rxjs");var i=function(){function e(e){this._keyDown$=n.fromEvent(e,"keydown");this._keyUp$=n.fromEvent(e,"keyup")}Object.defineProperty(e.prototype,"keyDown$",{get:function(){return this._keyDown$},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"keyUp$",{get:function(){return this._keyUp$},enumerable:true,configurable:true});return e}();r.KeyboardService=i;r.default=i},{rxjs:27}],437:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("rxjs/operators");var i=e("rxjs");var o=function(){function e(){this._loadersSubject$=new i.Subject;this._loaders$=this._loadersSubject$.pipe(n.scan(function(e,t){if(t.task!==undefined){e[t.task]=t.loading}return e},{}),n.startWith({}),n.publishReplay(1),n.refCount())}Object.defineProperty(e.prototype,"loading$",{get:function(){return this._loaders$.pipe(n.map(function(e){for(var t in e){if(!e.hasOwnProperty(t)){continue}if(e[t]){return true}}return false}),n.debounceTime(100),n.distinctUntilChanged())},enumerable:true,configurable:true});e.prototype.taskLoading$=function(t){return this._loaders$.pipe(n.map(function(e){return!!e[t]}),n.debounceTime(100),n.distinctUntilChanged())};e.prototype.startLoading=function(e){this._loadersSubject$.next({loading:true,task:e})};e.prototype.stopLoading=function(e){this._loadersSubject$.next({loading:false,task:e})};return e}();r.LoadingService=o;r.default=o},{rxjs:27,"rxjs/operators":225}],438:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var u=e("rxjs");var c=e("rxjs/operators");var n=function(){function e(e,i,t,r){var n=this;this._activeSubject$=new u.BehaviorSubject(false);this._active$=this._activeSubject$.pipe(c.distinctUntilChanged(),c.publishReplay(1),c.refCount());this._claimMouse$=new u.Subject;this._claimWheel$=new u.Subject;this._deferPixelClaims$=new u.Subject;this._deferPixels$=this._deferPixelClaims$.pipe(c.scan(function(e,t){if(t.deferPixels==null){delete e[t.name]}else{e[t.name]=t.deferPixels}return e},{}),c.map(function(e){var t=-1;for(var r in e){if(!e.hasOwnProperty(r)){continue}var n=e[r];if(n>t){t=n}}return t}),c.startWith(-1),c.publishReplay(1),c.refCount());this._deferPixels$.subscribe(function(){});this._documentMouseMove$=u.fromEvent(r,"mousemove");this._documentMouseUp$=u.fromEvent(r,"mouseup");this._mouseDown$=u.fromEvent(i,"mousedown");this._mouseLeave$=u.fromEvent(i,"mouseleave");this._mouseMove$=u.fromEvent(i,"mousemove");this._mouseUp$=u.fromEvent(i,"mouseup");this._mouseOut$=u.fromEvent(i,"mouseout");this._mouseOver$=u.fromEvent(i,"mouseover");this._domMouseDown$=u.fromEvent(t,"mousedown");this._domMouseMove$=u.fromEvent(t,"mousemove");this._click$=u.fromEvent(i,"click");this._contextMenu$=u.fromEvent(i,"contextmenu");this._dblClick$=u.merge(u.fromEvent(e,"click"),u.fromEvent(i,"dblclick")).pipe(c.bufferCount(3,1),c.filter(function(e){var t=e[0];var r=e[1];var n=e[2];return t.type==="click"&&r.type==="click"&&n.type==="dblclick"&&t.target.parentNode===i&&r.target.parentNode===i}),c.map(function(e){return e[2]}),c.share());u.merge(this._domMouseDown$,this._domMouseMove$,this._dblClick$,this._contextMenu$).subscribe(function(e){e.preventDefault()});this._mouseWheel$=u.merge(u.fromEvent(i,"wheel"),u.fromEvent(t,"wheel")).pipe(c.share());this._consistentContextMenu$=u.merge(this._mouseDown$,this._mouseMove$,this._mouseOut$,this._mouseUp$,this._contextMenu$).pipe(c.bufferCount(3,1),c.filter(function(e){return e[0].type==="mousedown"&&e[1].type==="contextmenu"&&e[2].type==="mouseup"}),c.map(function(e){return e[1]}),c.share());var o=u.merge(u.fromEvent(window,"blur"),this._documentMouseUp$.pipe(c.filter(function(e){return e.button===0}))).pipe(c.share());var a=this._createMouseDragInitiate$(this._mouseDown$,o,true).pipe(c.share());this._mouseDragStart$=this._createMouseDragStart$(a).pipe(c.share());this._mouseDrag$=this._createMouseDrag$(a,o).pipe(c.share());this._mouseDragEnd$=this._createMouseDragEnd$(this._mouseDragStart$,o).pipe(c.share());var s=this._createMouseDragInitiate$(this._domMouseDown$,o,false).pipe(c.share());this._domMouseDragStart$=this._createMouseDragStart$(s).pipe(c.share());this._domMouseDrag$=this._createMouseDrag$(s,o).pipe(c.share());this._domMouseDragEnd$=this._createMouseDragEnd$(this._domMouseDragStart$,o).pipe(c.share());this._proximateClick$=this._mouseDown$.pipe(c.switchMap(function(e){return n._click$.pipe(c.takeUntil(n._createDeferredMouseMove$(e,n._documentMouseMove$)),c.take(1))}),c.share());this._staticClick$=this._mouseDown$.pipe(c.switchMap(function(e){return n._click$.pipe(c.takeUntil(n._documentMouseMove$),c.take(1))}),c.share());this._mouseDragStart$.subscribe();this._mouseDrag$.subscribe();this._mouseDragEnd$.subscribe();this._domMouseDragStart$.subscribe();this._domMouseDrag$.subscribe();this._domMouseDragEnd$.subscribe();this._staticClick$.subscribe();this._mouseOwner$=this._createOwner$(this._claimMouse$).pipe(c.publishReplay(1),c.refCount());this._wheelOwner$=this._createOwner$(this._claimWheel$).pipe(c.publishReplay(1),c.refCount());this._mouseOwner$.subscribe(function(){});this._wheelOwner$.subscribe(function(){})}Object.defineProperty(e.prototype,"active$",{get:function(){return this._active$},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"activate$",{get:function(){return this._activeSubject$},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"documentMouseMove$",{get:function(){return this._documentMouseMove$},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"documentMouseUp$",{get:function(){return this._documentMouseUp$},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"domMouseDragStart$",{get:function(){return this._domMouseDragStart$},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"domMouseDrag$",{get:function(){return this._domMouseDrag$},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"domMouseDragEnd$",{get:function(){return this._domMouseDragEnd$},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"domMouseDown$",{get:function(){return this._domMouseDown$},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"domMouseMove$",{get:function(){return this._domMouseMove$},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"mouseOwner$",{get:function(){return this._mouseOwner$},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"mouseDown$",{get:function(){return this._mouseDown$},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"mouseMove$",{get:function(){return this._mouseMove$},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"mouseLeave$",{get:function(){return this._mouseLeave$},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"mouseOut$",{get:function(){return this._mouseOut$},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"mouseOver$",{get:function(){return this._mouseOver$},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"mouseUp$",{get:function(){return this._mouseUp$},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"click$",{get:function(){return this._click$},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"dblClick$",{get:function(){return this._dblClick$},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"contextMenu$",{get:function(){return this._consistentContextMenu$},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"mouseWheel$",{get:function(){return this._mouseWheel$},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"mouseDragStart$",{get:function(){return this._mouseDragStart$},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"mouseDrag$",{get:function(){return this._mouseDrag$},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"mouseDragEnd$",{get:function(){return this._mouseDragEnd$},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"proximateClick$",{get:function(){return this._proximateClick$},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"staticClick$",{get:function(){return this._staticClick$},enumerable:true,configurable:true});e.prototype.claimMouse=function(e,t){this._claimMouse$.next({name:e,zindex:t})};e.prototype.unclaimMouse=function(e){this._claimMouse$.next({name:e,zindex:null})};e.prototype.deferPixels=function(e,t){this._deferPixelClaims$.next({name:e,deferPixels:t})};e.prototype.undeferPixels=function(e){this._deferPixelClaims$.next({name:e,deferPixels:null})};e.prototype.claimWheel=function(e,t){this._claimWheel$.next({name:e,zindex:t})};e.prototype.unclaimWheel=function(e){this._claimWheel$.next({name:e,zindex:null})};e.prototype.filtered$=function(e,t){return this._filtered(e,t,this._mouseOwner$)};e.prototype.filteredWheel$=function(e,t){return this._filtered(e,t,this._wheelOwner$)};e.prototype._createDeferredMouseMove$=function(n,e){return e.pipe(c.map(function(e){var t=e.clientX-n.clientX;var r=e.clientY-n.clientY;return[e,Math.sqrt(t*t+r*r)]}),c.withLatestFrom(this._deferPixels$),c.filter(function(e){var t=e[0],r=t[0],n=t[1],i=e[1];return n>i}),c.map(function(e){var t=e[0],r=t[0],n=t[1],i=e[1];return r}))};e.prototype._createMouseDrag$=function(e,t){var r=this;return e.pipe(c.map(function(e){var t=e[0],r=e[1];return r}),c.switchMap(function(e){return u.concat(u.of(e),r._documentMouseMove$).pipe(c.takeUntil(t))}))};e.prototype._createMouseDragEnd$=function(e,t){return e.pipe(c.switchMap(function(e){return t.pipe(c.first())}))};e.prototype._createMouseDragStart$=function(e){return e.pipe(c.map(function(e){var t=e[0],r=e[1];return t}))};e.prototype._createMouseDragInitiate$=function(e,t,r){var n=this;return e.pipe(c.filter(function(e){return e.button===0}),c.switchMap(function(e){return u.combineLatest(u.of(e),r?n._createDeferredMouseMove$(e,n._documentMouseMove$):n._documentMouseMove$).pipe(c.takeUntil(t),c.take(1))}))};e.prototype._createOwner$=function(e){return e.pipe(c.scan(function(e,t){if(t.zindex==null){delete e[t.name]}else{e[t.name]=t.zindex}return e},{}),c.map(function(e){var t=null;var r=-1;for(var n in e){if(!e.hasOwnProperty(n)){continue}if(e[n]>r){r=e[n];t=n}}return t}),c.startWith(null))};e.prototype._filtered=function(n,e,t){return e.pipe(c.withLatestFrom(t),c.filter(function(e){var t=e[0],r=e[1];return r===n}),c.map(function(e){var t=e[0],r=e[1];return t}))};return e}();r.MouseService=n;r.default=n},{rxjs:27,"rxjs/operators":225}],439:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var h=e("rxjs");var o=e("rxjs/operators");var l=e("../API");var p=e("../Graph");var n=e("../Edge");var i=e("../Error");var f=e("../State");var d=e("../Viewer");var a=function(){function e(e,t,r,n,i,o,a,s,u,c){this._apiV3=n!=null?n:new l.APIv3(e,r);this._imageLoadingService=o!=null?o:new p.ImageLoadingService;this._graphService=i!=null?i:new p.GraphService(new p.Graph(this.apiV3),this._imageLoadingService);this._loadingService=a!=null?a:new d.LoadingService;this._loadingName="navigator";this._stateService=s!=null?s:new f.StateService(t.transitionMode);this._cacheService=u!=null?u:new d.CacheService(this._graphService,this._stateService);this._playService=c!=null?c:new d.PlayService(this._graphService,this._stateService);this._keyRequested$=new h.BehaviorSubject(null);this._movedToKey$=new h.BehaviorSubject(null);this._request$=null;this._requestSubscription=null;this._nodeRequestSubscription=null}Object.defineProperty(e.prototype,"apiV3",{get:function(){return this._apiV3},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"cacheService",{get:function(){return this._cacheService},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"graphService",{get:function(){return this._graphService},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"imageLoadingService",{get:function(){return this._imageLoadingService},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"loadingService",{get:function(){return this._loadingService},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"movedToKey$",{get:function(){return this._movedToKey$},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"playService",{get:function(){return this._playService},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"stateService",{get:function(){return this._stateService},enumerable:true,configurable:true});e.prototype.moveToKey$=function(e){this._abortRequest("to key "+e);this._loadingService.startLoading(this._loadingName);var t=this._moveToKey$(e);return this._makeRequest$(t)};e.prototype.moveDir$=function(i){var t=this;this._abortRequest("in dir "+n.EdgeDirection[i]);this._loadingService.startLoading(this._loadingName);var e=this.stateService.currentNode$.pipe(o.first(),o.mergeMap(function(e){return([n.EdgeDirection.Next,n.EdgeDirection.Prev].indexOf(i)>-1?e.sequenceEdges$:e.spatialEdges$).pipe(o.first(),o.map(function(e){for(var t=0,r=e.edges;t<r.length;t++){var n=r[t];if(n.data.direction===i){return n.to}}return null}))}),o.mergeMap(function(e){if(e==null){t._loadingService.stopLoading(t._loadingName);return h.throwError(new Error("Direction ("+i+") does not exist for current node."))}return t._moveToKey$(e)}));return this._makeRequest$(e)};e.prototype.moveCloseTo$=function(t,r){var n=this;this._abortRequest("to lat "+t+", lon "+r);this._loadingService.startLoading(this._loadingName);var e=this.apiV3.imageCloseTo$(t,r).pipe(o.mergeMap(function(e){if(e==null){n._loadingService.stopLoading(n._loadingName);return h.throwError(new Error("No image found close to lat "+t+", lon "+r+"."))}return n._moveToKey$(e.key)}));return this._makeRequest$(e)};e.prototype.setFilter$=function(t){var r=this;this._stateService.clearNodes();return this._movedToKey$.pipe(o.first(),o.mergeMap(function(e){if(e!=null){return r._trajectoryKeys$().pipe(o.mergeMap(function(e){return r._graphService.setFilter$(t).pipe(o.mergeMap(function(){return r._cacheKeys$(e)}))}),o.last())}return r._keyRequested$.pipe(o.first(),o.mergeMap(function(e){if(e!=null){return r._graphService.setFilter$(t).pipe(o.mergeMap(function(){return r._graphService.cacheNode$(e)}))}return r._graphService.setFilter$(t).pipe(o.map(function(){return undefined}))}))}),o.map(function(e){return undefined}))};e.prototype.setToken$=function(t){var r=this;this._abortRequest("to set token");this._stateService.clearNodes();return this._movedToKey$.pipe(o.first(),o.tap(function(e){r._apiV3.setToken(t)}),o.mergeMap(function(e){return e==null?r._graphService.reset$([]):r._trajectoryKeys$().pipe(o.mergeMap(function(e){return r._graphService.reset$(e).pipe(o.mergeMap(function(){return r._cacheKeys$(e)}))}),o.last(),o.map(function(e){return undefined}))}))};e.prototype._cacheKeys$=function(e){var t=this;var r=e.map(function(e){return t._graphService.cacheNode$(e)});return h.from(r).pipe(o.mergeAll())};e.prototype._abortRequest=function(e){if(this._requestSubscription!=null){this._requestSubscription.unsubscribe();this._requestSubscription=null}if(this._nodeRequestSubscription!=null){this._nodeRequestSubscription.unsubscribe();this._nodeRequestSubscription=null}if(this._request$!=null){if(!(this._request$.isStopped||this._request$.hasError)){this._request$.error(new i.AbortMapillaryError("Request aborted by a subsequent request "+e+"."))}this._request$=null}};e.prototype._makeRequest$=function(e){var t=this;var r=new h.ReplaySubject(1);this._requestSubscription=r.subscribe(undefined,function(){});this._request$=r;this._nodeRequestSubscription=e.subscribe(function(e){t._request$=null;r.next(e);r.complete()},function(e){t._request$=null;r.error(e)});return r};e.prototype._moveToKey$=function(e){var t=this;this._keyRequested$.next(e);return this._graphService.cacheNode$(e).pipe(o.tap(function(e){t._stateService.setNodes([e]);t._movedToKey$.next(e.key)}),o.finalize(function(){t._loadingService.stopLoading(t._loadingName)}))};e.prototype._trajectoryKeys$=function(){return this._stateService.currentState$.pipe(o.first(),o.map(function(e){return e.state.trajectory.map(function(e){return e.key})}))};return e}();r.Navigator=a;r.default=a},{"../API":274,"../Edge":276,"../Error":277,"../Graph":279,"../State":282,"../Viewer":286,rxjs:27,"rxjs/operators":225}],440:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var s=e("rxjs");var c=e("rxjs/operators");var i=e("../Viewer");var n=function(){function e(e,t,r){var n=this;this._container=r;this._eventEmitter=e;this._navigator=t;this._projection=new i.Projection;this._started=false;this._navigable$=new s.Subject;this._navigable$.subscribe(function(e){n._eventEmitter.fire(i.Viewer.navigablechanged,e)});this._navigator.loadingService.loading$.subscribe(function(e){n._eventEmitter.fire(i.Viewer.loadingchanged,e)})}Object.defineProperty(e.prototype,"started",{get:function(){return this._started},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"navigable$",{get:function(){return this._navigable$},enumerable:true,configurable:true});e.prototype.projectBasic$=function(i){var o=this;return s.combineLatest(this._container.renderService.renderCamera$,this._navigator.stateService.currentTransform$).pipe(c.first(),c.map(function(e){var t=e[0],r=e[1];var n=o._projection.basicToCanvas(i,o._container.element,t,r);return[Math.round(n[0]),Math.round(n[1])]}))};e.prototype.startEmit=function(){var u=this;if(this._started){return}this._started=true;this._currentNodeSubscription=this._navigator.stateService.currentNodeExternal$.subscribe(function(e){u._eventEmitter.fire(i.Viewer.nodechanged,e)});this._sequenceEdgesSubscription=this._navigator.stateService.currentNodeExternal$.pipe(c.switchMap(function(e){return e.sequenceEdges$})).subscribe(function(e){u._eventEmitter.fire(i.Viewer.sequenceedgeschanged,e)});this._spatialEdgesSubscription=this._navigator.stateService.currentNodeExternal$.pipe(c.switchMap(function(e){return e.spatialEdges$})).subscribe(function(e){u._eventEmitter.fire(i.Viewer.spatialedgeschanged,e)});this._moveSubscription=s.combineLatest(this._navigator.stateService.inMotion$,this._container.mouseService.active$,this._container.touchService.active$).pipe(c.map(function(e){return e[0]||e[1]||e[2]}),c.distinctUntilChanged()).subscribe(function(e){if(e){u._eventEmitter.fire(i.Viewer.movestart,null)}else{u._eventEmitter.fire(i.Viewer.moveend,null)}});this._bearingSubscription=this._container.renderService.bearing$.pipe(c.auditTime(100),c.distinctUntilChanged(function(e,t){return Math.abs(t-e)<1})).subscribe(function(e){u._eventEmitter.fire(i.Viewer.bearingchanged,e)});var e=this._container.mouseService.active$.pipe(c.switchMap(function(e){return e?s.empty():u._container.mouseService.mouseMove$}));this._viewerMouseEventSubscription=s.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$)).pipe(c.withLatestFrom(this._container.renderService.renderCamera$,this._navigator.stateService.reference$,this._navigator.stateService.currentTransform$),c.map(function(e){var t=e[0],r=t[0],n=t[1],i=e[1],o=e[2],a=e[3];var s=u._projection.eventToUnprojection(n,u._container.element,i,o,a);return{basicPoint:s.basicPoint,latLon:s.latLon,originalEvent:n,pixelPoint:s.pixelPoint,target:u._eventEmitter,type:r}})).subscribe(function(e){u._eventEmitter.fire(e.type,e)})};e.prototype.stopEmit=function(){if(!this.started){return}this._started=false;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};e.prototype.unproject$=function(o){var a=this;return s.combineLatest(this._container.renderService.renderCamera$,this._navigator.stateService.reference$,this._navigator.stateService.currentTransform$).pipe(c.first(),c.map(function(e){var t=e[0],r=e[1],n=e[2];var i=a._projection.canvasToUnprojection(o,a._container.element,t,r,n);return i.latLon}))};e.prototype.unprojectBasic$=function(n){var i=this;return s.combineLatest(this._container.renderService.renderCamera$,this._navigator.stateService.currentTransform$).pipe(c.first(),c.map(function(e){var t=e[0],r=e[1];return i._projection.canvasToBasic(n,i._container.element,t,r)}))};e.prototype._mapMouseEvent$=function(t,e){return e.pipe(c.map(function(e){return[t,e]}))};return e}();r.Observer=n;r.default=n},{"../Viewer":286,rxjs:27,"rxjs/operators":225}],441:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var c=e("rxjs");var p=e("rxjs/operators");var s=e("../Edge");var u=e("../Graph");var n=function(){function r(e,t,r){this._graphService=e;this._stateService=t;this._graphCalculator=!!r?r:new u.GraphCalculator;this._directionSubject$=new c.Subject;this._direction$=this._directionSubject$.pipe(p.startWith(s.EdgeDirection.Next),p.publishReplay(1),p.refCount());this._direction$.subscribe();this._playing=false;this._playingSubject$=new c.Subject;this._playing$=this._playingSubject$.pipe(p.startWith(this._playing),p.publishReplay(1),p.refCount());this._playing$.subscribe();this._speed=.5;this._speedSubject$=new c.Subject;this._speed$=this._speedSubject$.pipe(p.startWith(this._speed),p.publishReplay(1),p.refCount());this._speed$.subscribe();this._nodesAhead=this._mapNodesAhead(this._mapSpeed(this._speed));this._bridging$=null}Object.defineProperty(r.prototype,"playing",{get:function(){return this._playing},enumerable:true,configurable:true});Object.defineProperty(r.prototype,"direction$",{get:function(){return this._direction$},enumerable:true,configurable:true});Object.defineProperty(r.prototype,"playing$",{get:function(){return this._playing$},enumerable:true,configurable:true});Object.defineProperty(r.prototype,"speed$",{get:function(){return this._speed$},enumerable:true,configurable:true});r.prototype.play=function(){var l=this;if(this._playing){return}this._stateService.cutNodes();var e=this._setSpeed(this._speed);this._stateService.setSpeed(e);this._graphModeSubscription=this._speed$.pipe(p.map(function(e){return e>r.sequenceSpeed?u.GraphMode.Sequence:u.GraphMode.Spatial}),p.distinctUntilChanged()).subscribe(function(e){l._graphService.setGraphMode(e)});this._cacheSubscription=c.combineLatest(this._stateService.currentNode$.pipe(p.map(function(e){return[e.sequenceKey,e.key]}),p.distinctUntilChanged(undefined,function(e){var t=e[0],r=e[1];return t})),this._graphService.graphMode$,this._direction$).pipe(p.switchMap(function(e){var t=e[0],r=t[0],n=t[1],i=e[1],o=e[2];if(o!==s.EdgeDirection.Next&&o!==s.EdgeDirection.Prev){return c.of([undefined,o])}var a=(i===u.GraphMode.Sequence?l._graphService.cacheSequenceNodes$(r,n):l._graphService.cacheSequence$(r)).pipe(p.retry(3),p.catchError(function(e){console.error(e);return c.of(undefined)}));return c.combineLatest(a,c.of(o))}),p.switchMap(function(e){var t=e[0],r=e[1];if(t===undefined){return c.empty()}var h=t.keys.slice();if(r===s.EdgeDirection.Prev){h.reverse()}return l._stateService.currentState$.pipe(p.map(function(e){return[e.state.trajectory[e.state.trajectory.length-1].key,e.state.nodesAhead]}),p.scan(function(e,t){var r=e[0],n=e[1];var i=t[0],o=t[1];if(r===undefined){r=i}var a=h.length-1;if(o>=l._nodesAhead||h[a]===r){return[r,[]]}var s=h.indexOf(i);var u=h.indexOf(r)+1;var c=Math.min(a,s+l._nodesAhead-o)+1;if(c<=u){return[r,[]]}return[h[c-1],h.slice(u,c)]},[undefined,[]]),p.mergeMap(function(e){var t=e[0],r=e[1];return c.from(r)}))}),p.mergeMap(function(e){return l._graphService.cacheNode$(e).pipe(p.catchError(function(){return c.empty()}))},6)).subscribe();this._playingSubscription=this._stateService.currentState$.pipe(p.filter(function(e){return e.state.nodesAhead<l._nodesAhead}),p.distinctUntilChanged(undefined,function(e){return e.state.lastNode.key}),p.map(function(e){var t=e.state.lastNode;var r=e.state.trajectory;var n=undefined;for(var i=r.length-2;i>=0;i--){var o=r[i];if(o.sequenceKey!==t.sequenceKey){break}if(o.capturedAt!==t.capturedAt){n=o.capturedAt<t.capturedAt;break}}return[e.state.lastNode,n]}),p.withLatestFrom(this._direction$),p.switchMap(function(e){var t=e[0],r=t[0],n=t[1],i=e[1];return c.zip(([s.EdgeDirection.Next,s.EdgeDirection.Prev].indexOf(i)>-1?r.sequenceEdges$:r.spatialEdges$).pipe(p.first(function(e){return e.cached}),p.timeout(15e3)),c.of(i)).pipe(p.map(function(e){var t=e[0],r=e[1];for(var n=0,i=t.edges;n<i.length;n++){var o=i[n];if(o.data.direction===r){return o.to}}return null}),p.switchMap(function(e){return e!=null?l._graphService.cacheNode$(e):l._bridge$(r,n).pipe(p.filter(function(e){return!!e}))}))})).subscribe(function(e){l._stateService.appendNodes([e])},function(e){console.error(e);l.stop()});this._clearSubscription=this._stateService.currentNode$.pipe(p.bufferCount(1,10)).subscribe(function(e){l._stateService.clearPriorNodes()});this._setPlaying(true);var t=this._stateService.currentState$.pipe(p.map(function(e){return e.state}),p.distinctUntilChanged(function(e,t){var r=e[0],n=e[1];var i=t[0],o=t[1];return r===i&&n===o},function(e){return[e.currentNode.key,e.lastNode.key]}),p.filter(function(e){return e.currentNode.key===e.lastNode.key&&e.currentIndex===e.trajectory.length-1}),p.map(function(e){return e.currentNode}));this._stopSubscription=c.combineLatest(t,this._direction$).pipe(p.switchMap(function(e){var t=e[0],r=e[1];var n=([s.EdgeDirection.Next,s.EdgeDirection.Prev].indexOf(r)>-1?t.sequenceEdges$:t.spatialEdges$).pipe(p.first(function(e){return e.cached}),p.timeout(15e3),p.catchError(function(e){console.error(e);return c.of({cached:false,edges:[]})}));return c.combineLatest(c.of(r),n).pipe(p.map(function(e){var t=e[0],r=e[1];for(var n=0,i=r.edges;n<i.length;n++){var o=i[n];if(o.data.direction===t){return true}}return false}))}),p.mergeMap(function(e){if(e||!l._bridging$){return c.of(e)}return l._bridging$.pipe(p.map(function(e){return e!=null}),p.catchError(function(e){console.error(e);return c.of(false)}))}),p.first(function(e){return!e})).subscribe(undefined,undefined,function(){l.stop()});if(this._stopSubscription.closed){this._stopSubscription=null}};r.prototype.setDirection=function(e){this._directionSubject$.next(e)};r.prototype.setSpeed=function(e){e=Math.max(0,Math.min(1,e));if(e===this._speed){return}var t=this._setSpeed(e);if(this._playing){this._stateService.setSpeed(t)}this._speedSubject$.next(this._speed)};r.prototype.stop=function(){if(!this._playing){return}if(!!this._stopSubscription){if(!this._stopSubscription.closed){this._stopSubscription.unsubscribe()}this._stopSubscription=null}this._graphModeSubscription.unsubscribe();this._graphModeSubscription=null;this._cacheSubscription.unsubscribe();this._cacheSubscription=null;this._playingSubscription.unsubscribe();this._playingSubscription=null;this._clearSubscription.unsubscribe();this._clearSubscription=null;this._stateService.setSpeed(1);this._stateService.cutNodes();this._graphService.setGraphMode(u.GraphMode.Spatial);this._setPlaying(false)};r.prototype._bridge$=function(a,s){var u=this;if(s===undefined){return c.of(null)}var e=this._graphCalculator.boundingBoxCorners(a.latLon,25);this._bridging$=this._graphService.cacheBoundingBox$(e[0],e[1]).pipe(p.mergeMap(function(e){var t=null;for(var r=0,n=e;r<n.length;r++){var i=n[r];if(i.sequenceKey===a.sequenceKey||!i.cameraUuid||i.cameraUuid!==a.cameraUuid||i.capturedAt===a.capturedAt||i.capturedAt>a.capturedAt!==s){continue}var o=Math.abs(i.capturedAt-a.capturedAt);if(o>15e3){continue}if(!t||o<Math.abs(t.capturedAt-a.capturedAt)){t=i}}return!!t?u._graphService.cacheNode$(t.key):c.of(null)}),p.finalize(function(){u._bridging$=null}),p.publish(),p.refCount());return this._bridging$};r.prototype._mapSpeed=function(e){var t=2*e-1;return Math.pow(10,t)-.2*t};r.prototype._mapNodesAhead=function(e){return Math.round(Math.max(10,Math.min(50,8+6*e)))};r.prototype._setPlaying=function(e){this._playing=e;this._playingSubject$.next(e)};r.prototype._setSpeed=function(e){this._speed=e;var t=this._mapSpeed(this._speed);this._nodesAhead=this._mapNodesAhead(t);return t};r.sequenceSpeed=.54;return r}();r.PlayService=n;r.default=n},{"../Edge":276,"../Graph":279,rxjs:27,"rxjs/operators":225}],442:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var y=e("three");var n=e("../Geo");var i=function(){function e(e,t){this._geoCoords=!!e?e:new n.GeoCoords;this._viewportCoords=!!t?t:new n.ViewportCoords}e.prototype.basicToCanvas=function(e,t,r,n){return this._viewportCoords.basicToCanvas(e[0],e[1],t,n,r.perspective)};e.prototype.canvasToBasic=function(e,t,r,n){var i=this._viewportCoords.canvasToBasic(e[0],e[1],t,n,r.perspective);if(i[0]<0||i[0]>1||i[1]<0||i[1]>1){i=null}return i};e.prototype.eventToUnprojection=function(e,t,r,n,i){var o=this._viewportCoords.canvasPosition(e,t);return this.canvasToUnprojection(o,t,r,n,i)};e.prototype.canvasToUnprojection=function(e,t,r,n,i){var o=e[0];var a=e[1];var s=this._viewportCoords.canvasToViewport(o,a,t),u=s[0],c=s[1];var h=new y.Vector3(u,c,1).unproject(r.perspective);var l=i.projectBasic(h.toArray());if(l[0]<0||l[0]>1||l[1]<0||l[1]>1){l=null}var p=h.clone().sub(r.camera.position).normalize();var f=-2/p.z;var d=null;if(f>0&&f<100&&!!l){var v=p.clone().multiplyScalar(f).add(r.camera.position);var m=this._geoCoords.enuToGeodetic(v.x,v.y,v.z,n.lat,n.lon,n.alt).slice(0,2);d={lat:m[0],lon:m[1]}}var g={basicPoint:l,latLon:d,pixelPoint:[o,a]};return g};return e}();r.Projection=i;r.default=i},{"../Geo":278,three:226}],443:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var o=e("rxjs/operators");var a=e("three");var f=e("virtual-dom");var s=e("rxjs");var d=e("../Viewer");var u=function(){function e(){}Object.defineProperty(e.prototype,"json",{set:function(e){this._json=e},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"image",{set:function(e){this._image=e;this._texture=new a.Texture(this._image);this._texture.minFilter=a.NearestFilter},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"loaded",{get:function(){return!!(this._image&&this._json)},enumerable:true,configurable:true});e.prototype.getGLSprite=function(e){if(!this.loaded){throw new Error("Sprites cannot be retrieved before the atlas is loaded.")}var t=this._json[e];if(!t){console.warn("Sprite with key"+e+"does not exist in sprite definition.");return new a.Object3D}var r=this._texture.clone();r.needsUpdate=true;var n=this._image.width;var i=this._image.height;r.offset.x=t.x/n;r.offset.y=(i-t.y-t.height)/i;r.repeat.x=t.width/n;r.repeat.y=t.height/i;var o=new a.SpriteMaterial({map:r});return new a.Sprite(o)};e.prototype.getDOMSprite=function(e,t){if(!this.loaded){throw new Error("Sprites cannot be retrieved before the atlas is loaded.")}if(t==null){t=d.Alignment.Center}var r=this._json[e];if(!r){console.warn("Sprite with key"+e+"does not exist in sprite definition.");return f.h("div",{},[])}var n=r.y;var i=r.x+r.width;var o=r.y+r.height;var a=r.x;var s=-r.x;var u=-r.y;var c=this._image.height;var h=this._image.width;switch(t){case d.Alignment.Bottom:case d.Alignment.Center:case d.Alignment.Top:s-=r.width/2;break;case d.Alignment.BottomLeft:case d.Alignment.Left:case d.Alignment.TopLeft:s-=r.width;break;case d.Alignment.BottomRight:case d.Alignment.Right:case d.Alignment.TopRight:default:break}switch(t){case d.Alignment.Center:case d.Alignment.Left:case d.Alignment.Right:u-=r.height/2;break;case d.Alignment.Top:case d.Alignment.TopLeft:case d.Alignment.TopRight:u-=r.height;break;case d.Alignment.Bottom:case d.Alignment.BottomLeft:case d.Alignment.BottomRight:default:break}var l=1/r.pixelRatio;n*=l;i*=l;o*=l;a*=l;s*=l;u*=l;c*=l;h*=l;var p={src:this._image.src,style:{clip:"rect("+n+"px, "+i+"px, "+o+"px, "+a+"px)",height:c+"px",left:s+"px",position:"absolute",top:u+"px",width:h+"px"}};return f.h("img",p,[])};return e}();var n=function(){function e(t){var r=this;this._retina=window.devicePixelRatio>1;this._spriteAtlasOperation$=new s.Subject;this._spriteAtlas$=this._spriteAtlasOperation$.pipe(o.startWith(function(e){return e}),o.scan(function(e,t){return t(e)},new u),o.publishReplay(1),o.refCount());this._spriteAtlas$.subscribe(function(){});if(t==null){return}var n=this._retina?"@2x":"";var i=new XMLHttpRequest;i.open("GET",t+n+".png",true);i.responseType="arraybuffer";i.onload=function(){var t=new Image;t.onload=function(){r._spriteAtlasOperation$.next(function(e){e.image=t;return e})};var e=new Blob([i.response]);t.src=window.URL.createObjectURL(e)};i.onerror=function(e){console.error(new Error("Failed to fetch sprite sheet ("+t+n+".png)"))};i.send();var e=new XMLHttpRequest;e.open("GET",t+n+".json",true);e.responseType="text";e.onload=function(){var t=JSON.parse(e.response);r._spriteAtlasOperation$.next(function(e){e.json=t;return e})};e.onerror=function(e){console.error(new Error("Failed to fetch sheet ("+t+n+".json)"))};e.send()}Object.defineProperty(e.prototype,"spriteAtlas$",{get:function(){return this._spriteAtlas$},enumerable:true,configurable:true});return e}();r.SpriteService=n;r.default=n},{"../Viewer":286,rxjs:27,"rxjs/operators":225,three:226,"virtual-dom":231}],444:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var u=e("rxjs");var c=e("rxjs/operators");var n=function(){function e(e,t){var r=this;this._activeSubject$=new u.BehaviorSubject(false);this._active$=this._activeSubject$.pipe(c.distinctUntilChanged(),c.publishReplay(1),c.refCount());u.fromEvent(t,"touchmove").subscribe(function(e){e.preventDefault()});this._touchStart$=u.fromEvent(e,"touchstart");this._touchMove$=u.fromEvent(e,"touchmove");this._touchEnd$=u.fromEvent(e,"touchend");this._touchCancel$=u.fromEvent(e,"touchcancel");var n=this._touchStart$.pipe(c.filter(function(e){return e.touches.length===1&&e.targetTouches.length===1}),c.share());this._doubleTap$=n.pipe(c.bufferWhen(function(){return n.pipe(c.first(),c.switchMap(function(e){return u.merge(u.timer(300),n).pipe(c.take(1))}))}),c.filter(function(e){return e.length===2}),c.map(function(e){return e[e.length-1]}),c.share());this._doubleTap$.subscribe(function(e){e.preventDefault()});this._singleTouchMove$=this._touchMove$.pipe(c.filter(function(e){return e.touches.length===1&&e.targetTouches.length===1}),c.share());var i=u.merge(this._touchStart$,this._touchEnd$,this._touchCancel$).pipe(c.filter(function(e){return e.touches.length===1&&e.targetTouches.length===1}));var o=u.merge(this._touchStart$,this._touchEnd$,this._touchCancel$).pipe(c.filter(function(e){return e.touches.length>=1}));var a=u.merge(this._touchEnd$,this._touchCancel$).pipe(c.filter(function(e){return e.touches.length===0}));this._singleTouchDragStart$=i.pipe(c.mergeMap(function(e){return r._singleTouchMove$.pipe(c.takeUntil(u.merge(a,o)),c.take(1))}));this._singleTouchDragEnd$=i.pipe(c.mergeMap(function(e){return u.merge(a,o).pipe(c.first())}));this._singleTouchDrag$=i.pipe(c.switchMap(function(e){return r._singleTouchMove$.pipe(c.skip(1),c.takeUntil(u.merge(o,a)))}));var s=u.merge(this._touchStart$,this._touchEnd$,this._touchCancel$);this._pinchStart$=s.pipe(c.filter(function(e){return e.touches.length===2&&e.targetTouches.length===2}));this._pinchEnd$=s.pipe(c.filter(function(e){return e.touches.length!==2||e.targetTouches.length!==2}));this._pinchOperation$=new u.Subject;this._pinch$=this._pinchOperation$.pipe(c.scan(function(e,t){return t(e)},{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$.pipe(c.filter(function(e){return e.touches.length===2&&e.targetTouches.length===2}),c.map(function(b){return function(e){var t=b.touches[0];var r=b.touches[1];var n=Math.min(t.clientX,r.clientX);var i=Math.max(t.clientX,r.clientX);var o=Math.min(t.clientY,r.clientY);var a=Math.max(t.clientY,r.clientY);var s=n+(i-n)/2;var u=o+(a-o)/2;var c=s+t.pageX-t.clientX;var h=u+t.pageY-t.clientY;var l=s+t.screenX-t.clientX;var p=u+t.screenY-t.clientY;var f=Math.abs(t.clientX-r.clientX);var d=Math.abs(t.clientY-r.clientY);var v=Math.sqrt(f*f+d*d);var m=v-e.distance;var g=f-e.distanceX;var y=d-e.distanceY;var _={changeX:g,changeY:y,clientX:s,clientY:u,distance:v,distanceChange:m,distanceX:f,distanceY:d,originalEvent:b,pageX:c,pageY:h,screenX:l,screenY:p,touch1:t,touch2:r};return _}})).subscribe(this._pinchOperation$);this._pinchChange$=this._pinchStart$.pipe(c.switchMap(function(e){return r._pinch$.pipe(c.skip(1),c.takeUntil(r._pinchEnd$))}))}Object.defineProperty(e.prototype,"active$",{get:function(){return this._active$},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"activate$",{get:function(){return this._activeSubject$},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"doubleTap$",{get:function(){return this._doubleTap$},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"touchStart$",{get:function(){return this._touchStart$},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"touchMove$",{get:function(){return this._touchMove$},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"touchEnd$",{get:function(){return this._touchEnd$},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"touchCancel$",{get:function(){return this._touchCancel$},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"singleTouchDragStart$",{get:function(){return this._singleTouchDragStart$},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"singleTouchDrag$",{get:function(){return this._singleTouchDrag$},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"singleTouchDragEnd$",{get:function(){return this._singleTouchDragEnd$},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"pinch$",{get:function(){return this._pinchChange$},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"pinchStart$",{get:function(){return this._pinchStart$},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"pinchEnd$",{get:function(){return this._pinchEnd$},enumerable:true,configurable:true});return e}();r.TouchService=n},{rxjs:27,"rxjs/operators":225}],445:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var i=e("rxjs");var o=e("rxjs/operators");var s=e("when");var u=e("../Viewer");var c=e("../Utils");var a=function(a){n(e,a);function e(e,t,r,n,i){var o=a.call(this)||this;n=n!=null?n:{};c.Settings.setOptions(n);c.Urls.setOptions(n.url);o._navigator=new u.Navigator(t,n,i);o._container=new u.Container(e,o._navigator.stateService,n);o._observer=new u.Observer(o,o._navigator,o._container);o._componentController=new u.ComponentController(o._container,o._navigator,o._observer,r,n.component);return o}Object.defineProperty(e.prototype,"isNavigable",{get:function(){return this._componentController.navigable},enumerable:true,configurable:true});e.prototype.activateComponent=function(e){this._componentController.activate(e)};e.prototype.activateCover=function(){this._componentController.activateCover()};e.prototype.deactivateComponent=function(e){this._componentController.deactivate(e)};e.prototype.deactivateCover=function(){this._componentController.deactivateCover()};e.prototype.getBearing=function(){var e=this;return s.promise(function(t,r){e._container.renderService.bearing$.pipe(o.first()).subscribe(function(e){t(e)},function(e){r(e)})})};e.prototype.getCenter=function(){var e=this;return s.promise(function(t,r){e._navigator.stateService.getCenter().subscribe(function(e){t(e)},function(e){r(e)})})};e.prototype.getComponent=function(e){return this._componentController.get(e)};e.prototype.getContainer=function(){return this._container.element};e.prototype.getZoom=function(){var e=this;return s.promise(function(t,r){e._navigator.stateService.getZoom().subscribe(function(e){t(e)},function(e){r(e)})})};e.prototype.moveCloseTo=function(e,t){var n=this.isNavigable?this._navigator.moveCloseTo$(e,t):i.throwError(new Error("Calling moveCloseTo is not supported when viewer is not navigable."));return s.promise(function(t,r){n.subscribe(function(e){t(e)},function(e){r(e)})})};e.prototype.moveDir=function(e){var n=this.isNavigable?this._navigator.moveDir$(e):i.throwError(new Error("Calling moveDir is not supported when viewer is not navigable."));return s.promise(function(t,r){n.subscribe(function(e){t(e)},function(e){r(e)})})};e.prototype.moveToKey=function(e){var n=this.isNavigable?this._navigator.moveToKey$(e):i.throwError(new Error("Calling moveToKey is not supported when viewer is not navigable."));return s.promise(function(t,r){n.subscribe(function(e){t(e)},function(e){r(e)})})};e.prototype.projectFromBasic=function(e){var n=this;return s.promise(function(t,r){n._observer.projectBasic$(e).subscribe(function(e){t(e)},function(e){r(e)})})};e.prototype.resize=function(){this._container.renderService.resize$.next(null)};e.prototype.setAuthToken=function(e){var r=this.isNavigable?this._navigator.setToken$(e):i.throwError(new Error("Calling setAuthToken is not supported when viewer is not navigable."));return s.promise(function(e,t){r.subscribe(function(){e(undefined)},function(e){t(e)})})};e.prototype.setCenter=function(e){this._navigator.stateService.setCenter(e)};e.prototype.setFilter=function(r){var n=this;return s.promise(function(e,t){n._navigator.setFilter$(r).subscribe(function(){e(undefined)},function(e){t(e)})})};e.prototype.setRenderMode=function(e){this._container.renderService.renderMode$.next(e)};e.prototype.setTransitionMode=function(e){this._navigator.stateService.setTransitionMode(e)};e.prototype.setZoom=function(e){this._navigator.stateService.setZoom(e)};e.prototype.unproject=function(e){var n=this;return s.promise(function(t,r){n._observer.unproject$(e).subscribe(function(e){t(e)},function(e){r(e)})})};e.prototype.unprojectToBasic=function(e){var n=this;return s.promise(function(t,r){n._observer.unprojectBasic$(e).subscribe(function(e){t(e)},function(e){r(e)})})};e.bearingchanged="bearingchanged";e.click="click";e.contextmenu="contextmenu";e.dblclick="dblclick";e.loadingchanged="loadingchanged";e.mousedown="mousedown";e.mousemove="mousemove";e.mouseout="mouseout";e.mouseover="mouseover";e.mouseup="mouseup";e.moveend="moveend";e.movestart="movestart";e.navigablechanged="navigablechanged";e.nodechanged="nodechanged";e.sequenceedgeschanged="sequenceedgeschanged";e.spatialedgeschanged="spatialedgeschanged";return e}(c.EventEmitter);r.Viewer=a},{"../Utils":285,"../Viewer":286,rxjs:27,"rxjs/operators":225,when:272}]},{},[280])(280)});
+(function(e){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=e()}else if(typeof define==="function"&&define.amd){define([],e)}else{var t;if(typeof window!=="undefined"){t=window}else if(typeof global!=="undefined"){t=global}else if(typeof self!=="undefined"){t=self}else{t=this}t.Mapillary=e()}})(function(){var o,e,t;return function o(a,s,u){function c(r,e){if(!s[r]){if(!a[r]){var t=typeof require=="function"&&require;if(!e&&t)return t(r,!0);if(h)return h(r,!0);var n=new Error("Cannot find module '"+r+"'");throw n.code="MODULE_NOT_FOUND",n}var i=s[r]={exports:{}};a[r][0].call(i.exports,function(e){var t=a[r][1][e];return c(t?t:e)},i,i.exports,o,a,s,u)}return s[r].exports}var h=typeof require=="function"&&require;for(var e=0;e<u.length;e++)c(u[e]);return c}({1:[function(e,t,r){"use strict";var b=e("tinyqueue");t.exports=n;t.exports.default=n;function n(e,t,r){t=t||1;var n,i,o,a;for(var s=0;s<e[0].length;s++){var u=e[0][s];if(!s||u[0]<n)n=u[0];if(!s||u[1]<i)i=u[1];if(!s||u[0]>o)o=u[0];if(!s||u[1]>a)a=u[1]}var c=o-n;var h=a-i;var l=Math.min(c,h);var p=l/2;var f=new b(null,x);if(l===0)return[n,i];for(var d=n;d<o;d+=l){for(var v=i;v<a;v+=l){f.push(new w(d+p,v+p,p,e))}}var m=S(e);var g=new w(n+c/2,i+h/2,0,e);if(g.d>m.d)m=g;var y=f.length;while(f.length){var _=f.pop();if(_.d>m.d){m=_;if(r)console.log("found best %d after %d probes",Math.round(1e4*_.d)/1e4,y)}if(_.max-m.d<=t)continue;p=_.h/2;f.push(new w(_.x-p,_.y-p,p,e));f.push(new w(_.x+p,_.y-p,p,e));f.push(new w(_.x-p,_.y+p,p,e));f.push(new w(_.x+p,_.y+p,p,e));y+=4}if(r){console.log("num probes: "+y);console.log("best distance: "+m.d)}return[m.x,m.y]}function x(e,t){return t.max-e.max}function w(e,t,r,n){this.x=e;this.y=t;this.h=r;this.d=i(e,t,n);this.max=this.d+this.h*Math.SQRT2}function i(e,t,r){var n=false;var i=Infinity;for(var o=0;o<r.length;o++){var a=r[o];for(var s=0,u=a.length,c=u-1;s<u;c=s++){var h=a[s];var l=a[c];if(h[1]>t!==l[1]>t&&e<(l[0]-h[0])*(t-h[1])/(l[1]-h[1])+h[0])n=!n;i=Math.min(i,p(e,t,h,l))}}return(n?1:-1)*Math.sqrt(i)}function S(e){var t=0;var r=0;var n=0;var i=e[0];for(var o=0,a=i.length,s=a-1;o<a;s=o++){var u=i[o];var c=i[s];var h=u[0]*c[1]-c[0]*u[1];r+=(u[0]+c[0])*h;n+=(u[1]+c[1])*h;t+=h*3}if(t===0)return new w(i[0][0],i[0][1],0,e);return new w(r/t,n/t,0,e)}function p(e,t,r,n){var i=r[0];var o=r[1];var a=n[0]-i;var s=n[1]-o;if(a!==0||s!==0){var u=((e-i)*a+(t-o)*s)/(a*a+s*s);if(u>1){i=n[0];o=n[1]}else if(u>0){i+=a*u;o+=s*u}}a=e-i;s=t-o;return a*a+s*s}},{tinyqueue:227}],2:[function(e,t,r){t.exports=n;function n(e,t,r,n){this.cx=3*e;this.bx=3*(r-e)-this.cx;this.ax=1-this.cx-this.bx;this.cy=3*t;this.by=3*(n-t)-this.cy;this.ay=1-this.cy-this.by;this.p1x=e;this.p1y=n;this.p2x=r;this.p2y=n}n.prototype.sampleCurveX=function(e){return((this.ax*e+this.bx)*e+this.cx)*e};n.prototype.sampleCurveY=function(e){return((this.ay*e+this.by)*e+this.cy)*e};n.prototype.sampleCurveDerivativeX=function(e){return(3*this.ax*e+2*this.bx)*e+this.cx};n.prototype.solveCurveX=function(e,t){if(typeof t==="undefined")t=1e-6;var r,n,i,o,a;for(i=e,a=0;a<8;a++){o=this.sampleCurveX(i)-e;if(Math.abs(o)<t)return i;var s=this.sampleCurveDerivativeX(i);if(Math.abs(s)<1e-6)break;i=i-o/s}r=0;n=1;i=e;if(i<r)return r;if(i>n)return n;while(r<n){o=this.sampleCurveX(i);if(Math.abs(o-e)<t)return i;if(e>o){r=i}else{n=i}i=(n-r)*.5+r}return i};n.prototype.solve=function(e,t){return this.sampleCurveY(this.solveCurveX(e,t))}},{}],3:[function(e,t,r){"use strict";r.byteLength=a;r.toByteArray=s;r.fromByteArray=d;var c=[];var u=[];var h=typeof Uint8Array!=="undefined"?Uint8Array:Array;var n="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";for(var i=0,o=n.length;i<o;++i){c[i]=n[i];u[n.charCodeAt(i)]=i}u["-".charCodeAt(0)]=62;u["_".charCodeAt(0)]=63;function l(e){var t=e.length;if(t%4>0){throw new Error("Invalid string. Length must be a multiple of 4")}return e[t-2]==="="?2:e[t-1]==="="?1:0}function a(e){return e.length*3/4-l(e)}function s(e){var t,r,n,i,o;var a=e.length;i=l(e);o=new h(a*3/4-i);r=i>0?a-4:a;var s=0;for(t=0;t<r;t+=4){n=u[e.charCodeAt(t)]<<18|u[e.charCodeAt(t+1)]<<12|u[e.charCodeAt(t+2)]<<6|u[e.charCodeAt(t+3)];o[s++]=n>>16&255;o[s++]=n>>8&255;o[s++]=n&255}if(i===2){n=u[e.charCodeAt(t)]<<2|u[e.charCodeAt(t+1)]>>4;o[s++]=n&255}else if(i===1){n=u[e.charCodeAt(t)]<<10|u[e.charCodeAt(t+1)]<<4|u[e.charCodeAt(t+2)]>>2;o[s++]=n>>8&255;o[s++]=n&255}return o}function p(e){return c[e>>18&63]+c[e>>12&63]+c[e>>6&63]+c[e&63]}function f(e,t,r){var n;var i=[];for(var o=t;o<r;o+=3){n=(e[o]<<16)+(e[o+1]<<8)+e[o+2];i.push(p(n))}return i.join("")}function d(e){var t;var r=e.length;var n=r%3;var i="";var o=[];var a=16383;for(var s=0,u=r-n;s<u;s+=a){o.push(f(e,s,s+a>u?u:s+a))}if(n===1){t=e[r-1];i+=c[t>>2];i+=c[t<<4&63];i+="=="}else if(n===2){t=(e[r-2]<<8)+e[r-1];i+=c[t>>10];i+=c[t>>4&63];i+=c[t<<2&63];i+="="}o.push(i);return o.join("")}},{}],4:[function(e,t,r){},{}],5:[function(e,t,r){t.exports=function e(h){var l=String.prototype.split,p=/()??/.exec("")[1]===h,t;t=function(e,t,r){if(Object.prototype.toString.call(t)!=="[object RegExp]"){return l.call(e,t,r)}var n=[],i=(t.ignoreCase?"i":"")+(t.multiline?"m":"")+(t.extended?"x":"")+(t.sticky?"y":""),o=0,t=new RegExp(t.source,i+"g"),a,s,u,c;e+="";if(!p){a=new RegExp("^"+t.source+"$(?!\\s)",i)}r=r===h?-1>>>0:r>>>0;while(s=t.exec(e)){u=s.index+s[0].length;if(u>o){n.push(e.slice(o,s.index));if(!p&&s.length>1){s[0].replace(a,function(){for(var e=1;e<arguments.length-2;e++){if(arguments[e]===h){s[e]=h}}})}if(s.length>1&&s.index<e.length){Array.prototype.push.apply(n,s.slice(1))}c=s[0].length;o=u;if(n.length>=r){break}}if(t.lastIndex===s.index){t.lastIndex++}}if(o===e.length){if(c||!t.test("")){n.push("")}}else{n.push(e.slice(o))}return n.length>r?n.slice(0,r):n};return t}()},{}],6:[function(e,t,r){var n=t.exports={};var i;var o;function a(){throw new Error("setTimeout has not been defined")}function s(){throw new Error("clearTimeout has not been defined")}(function(){try{if(typeof setTimeout==="function"){i=setTimeout}else{i=a}}catch(e){i=a}try{if(typeof clearTimeout==="function"){o=clearTimeout}else{o=s}}catch(e){o=s}})();function u(t){if(i===setTimeout){return setTimeout(t,0)}if((i===a||!i)&&setTimeout){i=setTimeout;return setTimeout(t,0)}try{return i(t,0)}catch(e){try{return i.call(null,t,0)}catch(e){return i.call(this,t,0)}}}function c(t){if(o===clearTimeout){return clearTimeout(t)}if((o===s||!o)&&clearTimeout){o=clearTimeout;return clearTimeout(t)}try{return o(t)}catch(e){try{return o.call(null,t)}catch(e){return o.call(this,t)}}}var h=[];var l=false;var p;var f=-1;function d(){if(!l||!p){return}l=false;if(p.length){h=p.concat(h)}else{f=-1}if(h.length){v()}}function v(){if(l){return}var e=u(d);l=true;var t=h.length;while(t){p=h;h=[];while(++f<t){if(p){p[f].run()}}f=-1;t=h.length}p=null;l=false;c(e)}n.nextTick=function(e){var t=new Array(arguments.length-1);if(arguments.length>1){for(var r=1;r<arguments.length;r++){t[r-1]=arguments[r]}}h.push(new m(e,t));if(h.length===1&&!l){u(v)}};function m(e,t){this.fun=e;this.array=t}m.prototype.run=function(){this.fun.apply(null,this.array)};n.title="browser";n.browser=true;n.env={};n.argv=[];n.version="";n.versions={};function g(){}n.on=g;n.addListener=g;n.once=g;n.off=g;n.removeListener=g;n.removeAllListeners=g;n.emit=g;n.prependListener=g;n.prependOnceListener=g;n.listeners=function(e){return[]};n.binding=function(e){throw new Error("process.binding is not supported")};n.cwd=function(){return"/"};n.chdir=function(e){throw new Error("process.chdir is not supported")};n.umask=function(){return 0}},{}],7:[function(e,t,n){"use strict";var i=e("base64-js");var o=e("ieee754");n.Buffer=p;n.SlowBuffer=y;n.INSPECT_MAX_BYTES=50;var r=2147483647;n.kMaxLength=r;p.TYPED_ARRAY_SUPPORT=a();if(!p.TYPED_ARRAY_SUPPORT&&typeof console!=="undefined"&&typeof console.error==="function"){console.error("This browser lacks typed array (Uint8Array) support which is required by "+"`buffer` v5.x. Use `buffer` v4.x if you require old browser support.")}function a(){try{var e=new Uint8Array(1);e.__proto__={__proto__:Uint8Array.prototype,foo:function(){return 42}};return e.foo()===42}catch(e){return false}}function s(e){if(e>r){throw new RangeError("Invalid typed array length")}var t=new Uint8Array(e);t.__proto__=p.prototype;return t}function p(e,t,r){if(typeof e==="number"){if(typeof t==="string"){throw new Error("If encoding is specified then the first argument must be a string")}return l(e)}return u(e,t,r)}if(typeof Symbol!=="undefined"&&Symbol.species&&p[Symbol.species]===p){Object.defineProperty(p,Symbol.species,{value:null,configurable:true,enumerable:false,writable:false})}p.poolSize=8192;function u(e,t,r){if(typeof e==="number"){throw new TypeError('"value" argument must not be a number')}if(Z(e)){return v(e,t,r)}if(typeof e==="string"){return f(e,t)}return m(e)}p.from=function(e,t,r){return u(e,t,r)};p.prototype.__proto__=Uint8Array.prototype;p.__proto__=Uint8Array;function c(e){if(typeof e!=="number"){throw new TypeError('"size" argument must be a number')}else if(e<0){throw new RangeError('"size" argument must not be negative')}}function h(e,t,r){c(e);if(e<=0){return s(e)}if(t!==undefined){return typeof r==="string"?s(e).fill(t,r):s(e).fill(t)}return s(e)}p.alloc=function(e,t,r){return h(e,t,r)};function l(e){c(e);return s(e<0?0:g(e)|0)}p.allocUnsafe=function(e){return l(e)};p.allocUnsafeSlow=function(e){return l(e)};function f(e,t){if(typeof t!=="string"||t===""){t="utf8"}if(!p.isEncoding(t)){throw new TypeError('"encoding" must be a valid string encoding')}var r=_(e,t)|0;var n=s(r);var i=n.write(e,t);if(i!==r){n=n.slice(0,i)}return n}function d(e){var t=e.length<0?0:g(e.length)|0;var r=s(t);for(var n=0;n<t;n+=1){r[n]=e[n]&255}return r}function v(e,t,r){if(t<0||e.byteLength<t){throw new RangeError("'offset' is out of bounds")}if(e.byteLength<t+(r||0)){throw new RangeError("'length' is out of bounds")}var n;if(t===undefined&&r===undefined){n=new Uint8Array(e)}else if(r===undefined){n=new Uint8Array(e,t)}else{n=new Uint8Array(e,t,r)}n.__proto__=p.prototype;return n}function m(e){if(p.isBuffer(e)){var t=g(e.length)|0;var r=s(t);if(r.length===0){return r}e.copy(r,0,0,t);return r}if(e){if(J(e)||"length"in e){if(typeof e.length!=="number"||Q(e.length)){return s(0)}return d(e)}if(e.type==="Buffer"&&Array.isArray(e.data)){return d(e.data)}}throw new TypeError("First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.")}function g(e){if(e>=r){throw new RangeError("Attempt to allocate Buffer larger than maximum "+"size: 0x"+r.toString(16)+" bytes")}return e|0}function y(e){if(+e!=e){e=0}return p.alloc(+e)}p.isBuffer=function e(t){return t!=null&&t._isBuffer===true};p.compare=function e(t,r){if(!p.isBuffer(t)||!p.isBuffer(r)){throw new TypeError("Arguments must be Buffers")}if(t===r)return 0;var n=t.length;var i=r.length;for(var o=0,a=Math.min(n,i);o<a;++o){if(t[o]!==r[o]){n=t[o];i=r[o];break}}if(n<i)return-1;if(i<n)return 1;return 0};p.isEncoding=function e(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 true;default:return false}};p.concat=function e(t,r){if(!Array.isArray(t)){throw new TypeError('"list" argument must be an Array of Buffers')}if(t.length===0){return p.alloc(0)}var n;if(r===undefined){r=0;for(n=0;n<t.length;++n){r+=t[n].length}}var i=p.allocUnsafe(r);var o=0;for(n=0;n<t.length;++n){var a=t[n];if(!p.isBuffer(a)){throw new TypeError('"list" argument must be an Array of Buffers')}a.copy(i,o);o+=a.length}return i};function _(e,t){if(p.isBuffer(e)){return e.length}if(J(e)||Z(e)){return e.byteLength}if(typeof e!=="string"){e=""+e}var r=e.length;if(r===0)return 0;var n=false;for(;;){switch(t){case"ascii":case"latin1":case"binary":return r;case"utf8":case"utf-8":case undefined:return q(e).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return r*2;case"hex":return r>>>1;case"base64":return Y(e).length;default:if(n)return q(e).length;t=(""+t).toLowerCase();n=true}}}p.byteLength=_;function b(e,t,r){var n=false;if(t===undefined||t<0){t=0}if(t>this.length){return""}if(r===undefined||r>this.length){r=this.length}if(r<=0){return""}r>>>=0;t>>>=0;if(r<=t){return""}if(!e)e="utf8";while(true){switch(e){case"hex":return k(this,t,r);case"utf8":case"utf-8":return j(this,t,r);case"ascii":return I(this,t,r);case"latin1":case"binary":return N(this,t,r);case"base64":return A(this,t,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return D(this,t,r);default:if(n)throw new TypeError("Unknown encoding: "+e);e=(e+"").toLowerCase();n=true}}}p.prototype._isBuffer=true;function x(e,t,r){var n=e[t];e[t]=e[r];e[r]=n}p.prototype.swap16=function e(){var t=this.length;if(t%2!==0){throw new RangeError("Buffer size must be a multiple of 16-bits")}for(var r=0;r<t;r+=2){x(this,r,r+1)}return this};p.prototype.swap32=function e(){var t=this.length;if(t%4!==0){throw new RangeError("Buffer size must be a multiple of 32-bits")}for(var r=0;r<t;r+=4){x(this,r,r+3);x(this,r+1,r+2)}return this};p.prototype.swap64=function e(){var t=this.length;if(t%8!==0){throw new RangeError("Buffer size must be a multiple of 64-bits")}for(var r=0;r<t;r+=8){x(this,r,r+7);x(this,r+1,r+6);x(this,r+2,r+5);x(this,r+3,r+4)}return this};p.prototype.toString=function e(){var t=this.length;if(t===0)return"";if(arguments.length===0)return j(this,0,t);return b.apply(this,arguments)};p.prototype.equals=function e(t){if(!p.isBuffer(t))throw new TypeError("Argument must be a Buffer");if(this===t)return true;return p.compare(this,t)===0};p.prototype.inspect=function e(){var t="";var r=n.INSPECT_MAX_BYTES;if(this.length>0){t=this.toString("hex",0,r).match(/.{2}/g).join(" ");if(this.length>r)t+=" ... "}return"<Buffer "+t+">"};p.prototype.compare=function e(t,r,n,i,o){if(!p.isBuffer(t)){throw new TypeError("Argument must be a Buffer")}if(r===undefined){r=0}if(n===undefined){n=t?t.length:0}if(i===undefined){i=0}if(o===undefined){o=this.length}if(r<0||n>t.length||i<0||o>this.length){throw new RangeError("out of range index")}if(i>=o&&r>=n){return 0}if(i>=o){return-1}if(r>=n){return 1}r>>>=0;n>>>=0;i>>>=0;o>>>=0;if(this===t)return 0;var a=o-i;var s=n-r;var u=Math.min(a,s);var c=this.slice(i,o);var h=t.slice(r,n);for(var l=0;l<u;++l){if(c[l]!==h[l]){a=c[l];s=h[l];break}}if(a<s)return-1;if(s<a)return 1;return 0};function w(e,t,r,n,i){if(e.length===0)return-1;if(typeof r==="string"){n=r;r=0}else if(r>2147483647){r=2147483647}else if(r<-2147483648){r=-2147483648}r=+r;if(Q(r)){r=i?0:e.length-1}if(r<0)r=e.length+r;if(r>=e.length){if(i)return-1;else r=e.length-1}else if(r<0){if(i)r=0;else return-1}if(typeof t==="string"){t=p.from(t,n)}if(p.isBuffer(t)){if(t.length===0){return-1}return S(e,t,r,n,i)}else if(typeof t==="number"){t=t&255;if(typeof Uint8Array.prototype.indexOf==="function"){if(i){return Uint8Array.prototype.indexOf.call(e,t,r)}else{return Uint8Array.prototype.lastIndexOf.call(e,t,r)}}return S(e,[t],r,n,i)}throw new TypeError("val must be string, number or Buffer")}function S(e,t,r,n,i){var o=1;var a=e.length;var s=t.length;if(n!==undefined){n=String(n).toLowerCase();if(n==="ucs2"||n==="ucs-2"||n==="utf16le"||n==="utf-16le"){if(e.length<2||t.length<2){return-1}o=2;a/=2;s/=2;r/=2}}function u(e,t){if(o===1){return e[t]}else{return e.readUInt16BE(t*o)}}var c;if(i){var h=-1;for(c=r;c<a;c++){if(u(e,c)===u(t,h===-1?0:c-h)){if(h===-1)h=c;if(c-h+1===s)return h*o}else{if(h!==-1)c-=c-h;h=-1}}}else{if(r+s>a)r=a-s;for(c=r;c>=0;c--){var l=true;for(var p=0;p<s;p++){if(u(e,c+p)!==u(t,p)){l=false;break}}if(l)return c}}return-1}p.prototype.includes=function e(t,r,n){return this.indexOf(t,r,n)!==-1};p.prototype.indexOf=function e(t,r,n){return w(this,t,r,n,true)};p.prototype.lastIndexOf=function e(t,r,n){return w(this,t,r,n,false)};function M(e,t,r,n){r=Number(r)||0;var i=e.length-r;if(!n){n=i}else{n=Number(n);if(n>i){n=i}}var o=t.length;if(o%2!==0)throw new TypeError("Invalid hex string");if(n>o/2){n=o/2}for(var a=0;a<n;++a){var s=parseInt(t.substr(a*2,2),16);if(Q(s))return a;e[r+a]=s}return a}function E(e,t,r,n){return K(q(t,e.length-r),e,r,n)}function C(e,t,r,n){return K(W(t),e,r,n)}function T(e,t,r,n){return C(e,t,r,n)}function O(e,t,r,n){return K(Y(t),e,r,n)}function P(e,t,r,n){return K(X(t,e.length-r),e,r,n)}p.prototype.write=function e(t,r,n,i){if(r===undefined){i="utf8";n=this.length;r=0}else if(n===undefined&&typeof r==="string"){i=r;n=this.length;r=0}else if(isFinite(r)){r=r>>>0;if(isFinite(n)){n=n>>>0;if(i===undefined)i="utf8"}else{i=n;n=undefined}}else{throw new Error("Buffer.write(string, encoding, offset[, length]) is no longer supported")}var o=this.length-r;if(n===undefined||n>o)n=o;if(t.length>0&&(n<0||r<0)||r>this.length){throw new RangeError("Attempt to write outside buffer bounds")}if(!i)i="utf8";var a=false;for(;;){switch(i){case"hex":return M(this,t,r,n);case"utf8":case"utf-8":return E(this,t,r,n);case"ascii":return C(this,t,r,n);case"latin1":case"binary":return T(this,t,r,n);case"base64":return O(this,t,r,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return P(this,t,r,n);default:if(a)throw new TypeError("Unknown encoding: "+i);i=(""+i).toLowerCase();a=true}}};p.prototype.toJSON=function e(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};function A(e,t,r){if(t===0&&r===e.length){return i.fromByteArray(e)}else{return i.fromByteArray(e.slice(t,r))}}function j(e,t,r){r=Math.min(e.length,r);var n=[];var i=t;while(i<r){var o=e[i];var a=null;var s=o>239?4:o>223?3:o>191?2:1;if(i+s<=r){var u,c,h,l;switch(s){case 1:if(o<128){a=o}break;case 2:u=e[i+1];if((u&192)===128){l=(o&31)<<6|u&63;if(l>127){a=l}}break;case 3:u=e[i+1];c=e[i+2];if((u&192)===128&&(c&192)===128){l=(o&15)<<12|(u&63)<<6|c&63;if(l>2047&&(l<55296||l>57343)){a=l}}break;case 4:u=e[i+1];c=e[i+2];h=e[i+3];if((u&192)===128&&(c&192)===128&&(h&192)===128){l=(o&15)<<18|(u&63)<<12|(c&63)<<6|h&63;if(l>65535&&l<1114112){a=l}}}}if(a===null){a=65533;s=1}else if(a>65535){a-=65536;n.push(a>>>10&1023|55296);a=56320|a&1023}n.push(a);i+=s}return L(n)}var R=4096;function L(e){var t=e.length;if(t<=R){return String.fromCharCode.apply(String,e)}var r="";var n=0;while(n<t){r+=String.fromCharCode.apply(String,e.slice(n,n+=R))}return r}function I(e,t,r){var n="";r=Math.min(e.length,r);for(var i=t;i<r;++i){n+=String.fromCharCode(e[i]&127)}return n}function N(e,t,r){var n="";r=Math.min(e.length,r);for(var i=t;i<r;++i){n+=String.fromCharCode(e[i])}return n}function k(e,t,r){var n=e.length;if(!t||t<0)t=0;if(!r||r<0||r>n)r=n;var i="";for(var o=t;o<r;++o){i+=H(e[o])}return i}function D(e,t,r){var n=e.slice(t,r);var i="";for(var o=0;o<n.length;o+=2){i+=String.fromCharCode(n[o]+n[o+1]*256)}return i}p.prototype.slice=function e(t,r){var n=this.length;t=~~t;r=r===undefined?n:~~r;if(t<0){t+=n;if(t<0)t=0}else if(t>n){t=n}if(r<0){r+=n;if(r<0)r=0}else if(r>n){r=n}if(r<t)r=t;var i=this.subarray(t,r);i.__proto__=p.prototype;return i};function B(e,t,r){if(e%1!==0||e<0)throw new RangeError("offset is not uint");if(e+t>r)throw new RangeError("Trying to access beyond buffer length")}p.prototype.readUIntLE=function e(t,r,n){t=t>>>0;r=r>>>0;if(!n)B(t,r,this.length);var i=this[t];var o=1;var a=0;while(++a<r&&(o*=256)){i+=this[t+a]*o}return i};p.prototype.readUIntBE=function e(t,r,n){t=t>>>0;r=r>>>0;if(!n){B(t,r,this.length)}var i=this[t+--r];var o=1;while(r>0&&(o*=256)){i+=this[t+--r]*o}return i};p.prototype.readUInt8=function e(t,r){t=t>>>0;if(!r)B(t,1,this.length);return this[t]};p.prototype.readUInt16LE=function e(t,r){t=t>>>0;if(!r)B(t,2,this.length);return this[t]|this[t+1]<<8};p.prototype.readUInt16BE=function e(t,r){t=t>>>0;if(!r)B(t,2,this.length);return this[t]<<8|this[t+1]};p.prototype.readUInt32LE=function e(t,r){t=t>>>0;if(!r)B(t,4,this.length);return(this[t]|this[t+1]<<8|this[t+2]<<16)+this[t+3]*16777216};p.prototype.readUInt32BE=function e(t,r){t=t>>>0;if(!r)B(t,4,this.length);return this[t]*16777216+(this[t+1]<<16|this[t+2]<<8|this[t+3])};p.prototype.readIntLE=function e(t,r,n){t=t>>>0;r=r>>>0;if(!n)B(t,r,this.length);var i=this[t];var o=1;var a=0;while(++a<r&&(o*=256)){i+=this[t+a]*o}o*=128;if(i>=o)i-=Math.pow(2,8*r);return i};p.prototype.readIntBE=function e(t,r,n){t=t>>>0;r=r>>>0;if(!n)B(t,r,this.length);var i=r;var o=1;var a=this[t+--i];while(i>0&&(o*=256)){a+=this[t+--i]*o}o*=128;if(a>=o)a-=Math.pow(2,8*r);return a};p.prototype.readInt8=function e(t,r){t=t>>>0;if(!r)B(t,1,this.length);if(!(this[t]&128))return this[t];return(255-this[t]+1)*-1};p.prototype.readInt16LE=function e(t,r){t=t>>>0;if(!r)B(t,2,this.length);var n=this[t]|this[t+1]<<8;return n&32768?n|4294901760:n};p.prototype.readInt16BE=function e(t,r){t=t>>>0;if(!r)B(t,2,this.length);var n=this[t+1]|this[t]<<8;return n&32768?n|4294901760:n};p.prototype.readInt32LE=function e(t,r){t=t>>>0;if(!r)B(t,4,this.length);return this[t]|this[t+1]<<8|this[t+2]<<16|this[t+3]<<24};p.prototype.readInt32BE=function e(t,r){t=t>>>0;if(!r)B(t,4,this.length);return this[t]<<24|this[t+1]<<16|this[t+2]<<8|this[t+3]};p.prototype.readFloatLE=function e(t,r){t=t>>>0;if(!r)B(t,4,this.length);return o.read(this,t,true,23,4)};p.prototype.readFloatBE=function e(t,r){t=t>>>0;if(!r)B(t,4,this.length);return o.read(this,t,false,23,4)};p.prototype.readDoubleLE=function e(t,r){t=t>>>0;if(!r)B(t,8,this.length);return o.read(this,t,true,52,8)};p.prototype.readDoubleBE=function e(t,r){t=t>>>0;if(!r)B(t,8,this.length);return o.read(this,t,false,52,8)};function F(e,t,r,n,i,o){if(!p.isBuffer(e))throw new TypeError('"buffer" argument must be a Buffer instance');if(t>i||t<o)throw new RangeError('"value" argument is out of bounds');if(r+n>e.length)throw new RangeError("Index out of range")}p.prototype.writeUIntLE=function e(t,r,n,i){t=+t;r=r>>>0;n=n>>>0;if(!i){var o=Math.pow(2,8*n)-1;F(this,t,r,n,o,0)}var a=1;var s=0;this[r]=t&255;while(++s<n&&(a*=256)){this[r+s]=t/a&255}return r+n};p.prototype.writeUIntBE=function e(t,r,n,i){t=+t;r=r>>>0;n=n>>>0;if(!i){var o=Math.pow(2,8*n)-1;F(this,t,r,n,o,0)}var a=n-1;var s=1;this[r+a]=t&255;while(--a>=0&&(s*=256)){this[r+a]=t/s&255}return r+n};p.prototype.writeUInt8=function e(t,r,n){t=+t;r=r>>>0;if(!n)F(this,t,r,1,255,0);this[r]=t&255;return r+1};p.prototype.writeUInt16LE=function e(t,r,n){t=+t;r=r>>>0;if(!n)F(this,t,r,2,65535,0);this[r]=t&255;this[r+1]=t>>>8;return r+2};p.prototype.writeUInt16BE=function e(t,r,n){t=+t;r=r>>>0;if(!n)F(this,t,r,2,65535,0);this[r]=t>>>8;this[r+1]=t&255;return r+2};p.prototype.writeUInt32LE=function e(t,r,n){t=+t;r=r>>>0;if(!n)F(this,t,r,4,4294967295,0);this[r+3]=t>>>24;this[r+2]=t>>>16;this[r+1]=t>>>8;this[r]=t&255;return r+4};p.prototype.writeUInt32BE=function e(t,r,n){t=+t;r=r>>>0;if(!n)F(this,t,r,4,4294967295,0);this[r]=t>>>24;this[r+1]=t>>>16;this[r+2]=t>>>8;this[r+3]=t&255;return r+4};p.prototype.writeIntLE=function e(t,r,n,i){t=+t;r=r>>>0;if(!i){var o=Math.pow(2,8*n-1);F(this,t,r,n,o-1,-o)}var a=0;var s=1;var u=0;this[r]=t&255;while(++a<n&&(s*=256)){if(t<0&&u===0&&this[r+a-1]!==0){u=1}this[r+a]=(t/s>>0)-u&255}return r+n};p.prototype.writeIntBE=function e(t,r,n,i){t=+t;r=r>>>0;if(!i){var o=Math.pow(2,8*n-1);F(this,t,r,n,o-1,-o)}var a=n-1;var s=1;var u=0;this[r+a]=t&255;while(--a>=0&&(s*=256)){if(t<0&&u===0&&this[r+a+1]!==0){u=1}this[r+a]=(t/s>>0)-u&255}return r+n};p.prototype.writeInt8=function e(t,r,n){t=+t;r=r>>>0;if(!n)F(this,t,r,1,127,-128);if(t<0)t=255+t+1;this[r]=t&255;return r+1};p.prototype.writeInt16LE=function e(t,r,n){t=+t;r=r>>>0;if(!n)F(this,t,r,2,32767,-32768);this[r]=t&255;this[r+1]=t>>>8;return r+2};p.prototype.writeInt16BE=function e(t,r,n){t=+t;r=r>>>0;if(!n)F(this,t,r,2,32767,-32768);this[r]=t>>>8;this[r+1]=t&255;return r+2};p.prototype.writeInt32LE=function e(t,r,n){t=+t;r=r>>>0;if(!n)F(this,t,r,4,2147483647,-2147483648);this[r]=t&255;this[r+1]=t>>>8;this[r+2]=t>>>16;this[r+3]=t>>>24;return r+4};p.prototype.writeInt32BE=function e(t,r,n){t=+t;r=r>>>0;if(!n)F(this,t,r,4,2147483647,-2147483648);if(t<0)t=4294967295+t+1;this[r]=t>>>24;this[r+1]=t>>>16;this[r+2]=t>>>8;this[r+3]=t&255;return r+4};function $(e,t,r,n,i,o){if(r+n>e.length)throw new RangeError("Index out of range");if(r<0)throw new RangeError("Index out of range")}function z(e,t,r,n,i){t=+t;r=r>>>0;if(!i){$(e,t,r,4,34028234663852886e22,-34028234663852886e22)}o.write(e,t,r,n,23,4);return r+4}p.prototype.writeFloatLE=function e(t,r,n){return z(this,t,r,true,n)};p.prototype.writeFloatBE=function e(t,r,n){return z(this,t,r,false,n)};function U(e,t,r,n,i){t=+t;r=r>>>0;if(!i){$(e,t,r,8,17976931348623157e292,-17976931348623157e292)}o.write(e,t,r,n,52,8);return r+8}p.prototype.writeDoubleLE=function e(t,r,n){return U(this,t,r,true,n)};p.prototype.writeDoubleBE=function e(t,r,n){return U(this,t,r,false,n)};p.prototype.copy=function e(t,r,n,i){if(!n)n=0;if(!i&&i!==0)i=this.length;if(r>=t.length)r=t.length;if(!r)r=0;if(i>0&&i<n)i=n;if(i===n)return 0;if(t.length===0||this.length===0)return 0;if(r<0){throw new RangeError("targetStart out of bounds")}if(n<0||n>=this.length)throw new RangeError("sourceStart out of bounds");if(i<0)throw new RangeError("sourceEnd out of bounds");if(i>this.length)i=this.length;if(t.length-r<i-n){i=t.length-r+n}var o=i-n;var a;if(this===t&&n<r&&r<i){for(a=o-1;a>=0;--a){t[a+r]=this[a+n]}}else if(o<1e3){for(a=0;a<o;++a){t[a+r]=this[a+n]}}else{Uint8Array.prototype.set.call(t,this.subarray(n,n+o),r)}return o};p.prototype.fill=function e(t,r,n,i){if(typeof t==="string"){if(typeof r==="string"){i=r;r=0;n=this.length}else if(typeof n==="string"){i=n;n=this.length}if(t.length===1){var o=t.charCodeAt(0);if(o<256){t=o}}if(i!==undefined&&typeof i!=="string"){throw new TypeError("encoding must be a string")}if(typeof i==="string"&&!p.isEncoding(i)){throw new TypeError("Unknown encoding: "+i)}}else if(typeof t==="number"){t=t&255}if(r<0||this.length<r||this.length<n){throw new RangeError("Out of range index")}if(n<=r){return this}r=r>>>0;n=n===undefined?this.length:n>>>0;if(!t)t=0;var a;if(typeof t==="number"){for(a=r;a<n;++a){this[a]=t}}else{var s=p.isBuffer(t)?t:new p(t,i);var u=s.length;for(a=0;a<n-r;++a){this[a+r]=s[a%u]}}return this};var G=/[^+/0-9A-Za-z-_]/g;function V(e){e=e.trim().replace(G,"");if(e.length<2)return"";while(e.length%4!==0){e=e+"="}return e}function H(e){if(e<16)return"0"+e.toString(16);return e.toString(16)}function q(e,t){t=t||Infinity;var r;var n=e.length;var i=null;var o=[];for(var a=0;a<n;++a){r=e.charCodeAt(a);if(r>55295&&r<57344){if(!i){if(r>56319){if((t-=3)>-1)o.push(239,191,189);continue}else if(a+1===n){if((t-=3)>-1)o.push(239,191,189);continue}i=r;continue}if(r<56320){if((t-=3)>-1)o.push(239,191,189);i=r;continue}r=(i-55296<<10|r-56320)+65536}else if(i){if((t-=3)>-1)o.push(239,191,189)}i=null;if(r<128){if((t-=1)<0)break;o.push(r)}else if(r<2048){if((t-=2)<0)break;o.push(r>>6|192,r&63|128)}else if(r<65536){if((t-=3)<0)break;o.push(r>>12|224,r>>6&63|128,r&63|128)}else if(r<1114112){if((t-=4)<0)break;o.push(r>>18|240,r>>12&63|128,r>>6&63|128,r&63|128)}else{throw new Error("Invalid code point")}}return o}function W(e){var t=[];for(var r=0;r<e.length;++r){t.push(e.charCodeAt(r)&255)}return t}function X(e,t){var r,n,i;var o=[];for(var a=0;a<e.length;++a){if((t-=2)<0)break;r=e.charCodeAt(a);n=r>>8;i=r%256;o.push(i);o.push(n)}return o}function Y(e){return i.toByteArray(V(e))}function K(e,t,r,n){for(var i=0;i<n;++i){if(i+r>=t.length||i>=e.length)break;t[i+r]=e[i]}return i}function Z(e){return e instanceof ArrayBuffer||e!=null&&e.constructor!=null&&e.constructor.name==="ArrayBuffer"&&typeof e.byteLength==="number"}function J(e){return typeof ArrayBuffer.isView==="function"&&ArrayBuffer.isView(e)}function Q(e){return e!==e}},{"base64-js":3,ieee754:17}],8:[function(e,t,r){"use strict";t.exports=n;t.exports.default=n;function n(e,t,r){r=r||2;var n=t&&t.length,i=n?t[0]*r:e.length,o=v(e,0,i,r,true),a=[];if(!o)return a;var s,u,c,h,l,p,f;if(n)o=g(e,t,o,r);if(e.length>80*r){s=c=e[0];u=h=e[1];for(var d=r;d<i;d+=r){l=e[d];p=e[d+1];if(l<s)s=l;if(p<u)u=p;if(l>c)c=l;if(p>h)h=p}f=Math.max(c-s,h-u);f=f!==0?1/f:0}m(o,a,r,s,u,f);return a}function v(e,t,r,n,i){var o,a;if(i===j(e,t,r,n)>0){for(o=t;o<r;o+=n)a=O(o,e[o],e[o+1],a)}else{for(o=r-n;o>=t;o-=n)a=O(o,e[o],e[o+1],a)}if(a&&s(a,a.next)){P(a);a=a.next}return a}function h(e,t){if(!e)return e;if(!t)t=e;var r=e,n;do{n=false;if(!r.steiner&&(s(r,r.next)||M(r.prev,r,r.next)===0)){P(r);r=t=r.prev;if(r===r.next)break;n=true}else{r=r.next}}while(n||r!==t);return t}function m(e,t,r,n,i,o,a){if(!e)return;if(!a&&o)b(e,n,i,o);var s=e,u,c;while(e.prev!==e.next){u=e.prev;c=e.next;if(o?p(e,n,i,o):l(e)){t.push(u.i/r);t.push(e.i/r);t.push(c.i/r);P(e);e=c.next;s=c.next;continue}e=c;if(e===s){if(!a){m(h(e),t,r,n,i,o,1)}else if(a===1){e=f(e,t,r);m(e,t,r,n,i,o,2)}else if(a===2){d(e,t,r,n,i,o)}break}}}function l(e){var t=e.prev,r=e,n=e.next;if(M(t,r,n)>=0)return false;var i=e.next.next;while(i!==e.prev){if(S(t.x,t.y,r.x,r.y,n.x,n.y,i.x,i.y)&&M(i.prev,i,i.next)>=0)return false;i=i.next}return true}function p(e,t,r,n){var i=e.prev,o=e,a=e.next;if(M(i,o,a)>=0)return false;var s=i.x<o.x?i.x<a.x?i.x:a.x:o.x<a.x?o.x:a.x,u=i.y<o.y?i.y<a.y?i.y:a.y:o.y<a.y?o.y:a.y,c=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;var l=x(s,u,t,r,n),p=x(c,h,t,r,n);var f=e.prevZ,d=e.nextZ;while(f&&f.z>=l&&d&&d.z<=p){if(f!==e.prev&&f!==e.next&&S(i.x,i.y,o.x,o.y,a.x,a.y,f.x,f.y)&&M(f.prev,f,f.next)>=0)return false;f=f.prevZ;if(d!==e.prev&&d!==e.next&&S(i.x,i.y,o.x,o.y,a.x,a.y,d.x,d.y)&&M(d.prev,d,d.next)>=0)return false;d=d.nextZ}while(f&&f.z>=l){if(f!==e.prev&&f!==e.next&&S(i.x,i.y,o.x,o.y,a.x,a.y,f.x,f.y)&&M(f.prev,f,f.next)>=0)return false;f=f.prevZ}while(d&&d.z<=p){if(d!==e.prev&&d!==e.next&&S(i.x,i.y,o.x,o.y,a.x,a.y,d.x,d.y)&&M(d.prev,d,d.next)>=0)return false;d=d.nextZ}return true}function f(e,t,r){var n=e;do{var i=n.prev,o=n.next.next;if(!s(i,o)&&a(i,n,n.next,o)&&E(i,o)&&E(o,i)){t.push(i.i/r);t.push(n.i/r);t.push(o.i/r);P(n);P(n.next);n=e=o}n=n.next}while(n!==e);return n}function d(e,t,r,n,i,o){var a=e;do{var s=a.next.next;while(s!==a.prev){if(a.i!==s.i&&c(a,s)){var u=T(a,s);a=h(a,a.next);u=h(u,u.next);m(a,t,r,n,i,o);m(u,t,r,n,i,o);return}s=s.next}a=a.next}while(a!==e)}function g(e,t,r,n){var i=[],o,a,s,u,c;for(o=0,a=t.length;o<a;o++){s=t[o]*n;u=o<a-1?t[o+1]*n:e.length;c=v(e,s,u,n,false);if(c===c.next)c.steiner=true;i.push(w(c))}i.sort(y);for(o=0;o<i.length;o++){_(i[o],r);r=h(r,r.next)}return r}function y(e,t){return e.x-t.x}function _(e,t){t=i(e,t);if(t){var r=T(t,e);h(r,r.next)}}function i(e,t){var r=t,n=e.x,i=e.y,o=-Infinity,a;do{if(i<=r.y&&i>=r.next.y&&r.next.y!==r.y){var s=r.x+(i-r.y)*(r.next.x-r.x)/(r.next.y-r.y);if(s<=n&&s>o){o=s;if(s===n){if(i===r.y)return r;if(i===r.next.y)return r.next}a=r.x<r.next.x?r:r.next}}r=r.next}while(r!==t);if(!a)return null;if(n===o)return a.prev;var u=a,c=a.x,h=a.y,l=Infinity,p;r=a.next;while(r!==u){if(n>=r.x&&r.x>=c&&n!==r.x&&S(i<h?n:o,i,c,h,i<h?o:n,i,r.x,r.y)){p=Math.abs(i-r.y)/(n-r.x);if((p<l||p===l&&r.x>a.x)&&E(r,e)){a=r;l=p}}r=r.next}return a}function b(e,t,r,n){var i=e;do{if(i.z===null)i.z=x(i.x,i.y,t,r,n);i.prevZ=i.prev;i.nextZ=i.next;i=i.next}while(i!==e);i.prevZ.nextZ=null;i.prevZ=null;o(i)}function o(e){var t,r,n,i,o,a,s,u,c=1;do{r=e;e=null;o=null;a=0;while(r){a++;n=r;s=0;for(t=0;t<c;t++){s++;n=n.nextZ;if(!n)break}u=c;while(s>0||u>0&&n){if(s!==0&&(u===0||!n||r.z<=n.z)){i=r;r=r.nextZ;s--}else{i=n;n=n.nextZ;u--}if(o)o.nextZ=i;else e=i;i.prevZ=o;o=i}r=n}o.nextZ=null;c*=2}while(a>1);return e}function x(e,t,r,n,i){e=32767*(e-r)*i;t=32767*(t-n)*i;e=(e|e<<8)&16711935;e=(e|e<<4)&252645135;e=(e|e<<2)&858993459;e=(e|e<<1)&1431655765;t=(t|t<<8)&16711935;t=(t|t<<4)&252645135;t=(t|t<<2)&858993459;t=(t|t<<1)&1431655765;return e|t<<1}function w(e){var t=e,r=e;do{if(t.x<r.x)r=t;t=t.next}while(t!==e);return r}function S(e,t,r,n,i,o,a,s){return(i-a)*(t-s)-(e-a)*(o-s)>=0&&(e-a)*(n-s)-(r-a)*(t-s)>=0&&(r-a)*(o-s)-(i-a)*(n-s)>=0}function c(e,t){return e.next.i!==t.i&&e.prev.i!==t.i&&!u(e,t)&&E(e,t)&&E(t,e)&&C(e,t)}function M(e,t,r){return(t.y-e.y)*(r.x-t.x)-(t.x-e.x)*(r.y-t.y)}function s(e,t){return e.x===t.x&&e.y===t.y}function a(e,t,r,n){if(s(e,t)&&s(r,n)||s(e,n)&&s(r,t))return true;return M(e,t,r)>0!==M(e,t,n)>0&&M(r,n,e)>0!==M(r,n,t)>0}function u(e,t){var r=e;do{if(r.i!==e.i&&r.next.i!==e.i&&r.i!==t.i&&r.next.i!==t.i&&a(r,r.next,e,t))return true;r=r.next}while(r!==e);return false}function E(e,t){return M(e.prev,e,e.next)<0?M(e,t,e.next)>=0&&M(e,e.prev,t)>=0:M(e,t,e.prev)<0||M(e,e.next,t)<0}function C(e,t){var r=e,n=false,i=(e.x+t.x)/2,o=(e.y+t.y)/2;do{if(r.y>o!==r.next.y>o&&r.next.y!==r.y&&i<(r.next.x-r.x)*(o-r.y)/(r.next.y-r.y)+r.x)n=!n;r=r.next}while(r!==e);return n}function T(e,t){var r=new A(e.i,e.x,e.y),n=new A(t.i,t.x,t.y),i=e.next,o=t.prev;e.next=t;t.prev=e;r.next=i;i.prev=r;n.next=r;r.prev=n;o.next=n;n.prev=o;return n}function O(e,t,r,n){var i=new A(e,t,r);if(!n){i.prev=i;i.next=i}else{i.next=n.next;i.prev=n;n.next.prev=i;n.next=i}return i}function P(e){e.next.prev=e.prev;e.prev.next=e.next;if(e.prevZ)e.prevZ.nextZ=e.nextZ;if(e.nextZ)e.nextZ.prevZ=e.prevZ}function A(e,t,r){this.i=e;this.x=t;this.y=r;this.prev=null;this.next=null;this.z=null;this.prevZ=null;this.nextZ=null;this.steiner=false}n.deviation=function(e,t,r,n){var i=t&&t.length;var o=i?t[0]*r:e.length;var a=Math.abs(j(e,0,o,r));if(i){for(var s=0,u=t.length;s<u;s++){var c=t[s]*r;var h=s<u-1?t[s+1]*r:e.length;a-=Math.abs(j(e,c,h,r))}}var l=0;for(s=0;s<n.length;s+=3){var p=n[s]*r;var f=n[s+1]*r;var d=n[s+2]*r;l+=Math.abs((e[p]-e[d])*(e[f+1]-e[p+1])-(e[p]-e[f])*(e[d+1]-e[p+1]))}return a===0&&l===0?0:Math.abs((l-a)/a)};function j(e,t,r,n){var i=0;for(var o=t,a=r-n;o<r;o+=n){i+=(e[a]-e[o])*(e[o+1]+e[a+1]);a=o}return i}n.flatten=function(e){var t=e[0][0].length,r={vertices:[],holes:[],dimensions:t},n=0;for(var i=0;i<e.length;i++){for(var o=0;o<e[i].length;o++){for(var a=0;a<t;a++)r.vertices.push(e[i][o][a])}if(i>0){n+=e[i-1].length;r.holes.push(n)}}return r}},{}],9:[function(e,t,r){"use strict";var n=e("individual/one-version");var i="7";n("ev-store",i);var o="__EV_STORE_KEY@"+i;t.exports=a;function a(e){var t=e[o];if(!t){t=e[o]={}}return t}},{"individual/one-version":19}],10:[function(e,t,r){"use strict";var h=e("./request");var n=e("./buildQueryObject");var i=Array.isArray;function l(e,t){var r;for(r in t){e[r]=t[r]}return e}function o(e,t){this._jsongUrl=e;if(typeof t==="number"){var r={timeout:t};t=r}this._config=l({timeout:15e3,headers:{}},t||{})}o.prototype={constructor:o,buildQueryObject:n,get:function e(t){var r="GET";var n=this.buildQueryObject(this._jsongUrl,r,{paths:t,method:"get"});var i=l(n,this._config);var o=this;return h(r,i,o)},set:function e(t){var r="POST";var n=this.buildQueryObject(this._jsongUrl,r,{jsonGraph:t,method:"set"});var i=l(n,this._config);i.headers["Content-Type"]="application/x-www-form-urlencoded";var o=this;return h(r,i,o)},call:function e(t,r,n,i){r=r||[];n=n||[];i=i||[];var o="POST";var a=[];a.push("method=call");a.push("callPath="+encodeURIComponent(JSON.stringify(t)));a.push("arguments="+encodeURIComponent(JSON.stringify(r)));a.push("pathSuffixes="+encodeURIComponent(JSON.stringify(n)));a.push("paths="+encodeURIComponent(JSON.stringify(i)));var s=this.buildQueryObject(this._jsongUrl,o,a.join("&"));var u=l(s,this._config);u.headers["Content-Type"]="application/x-www-form-urlencoded";var c=this;return h(o,u,c)}};o.XMLHttpSource=o;o["default"]=o;t.exports=o},{"./buildQueryObject":11,"./request":14}],11:[function(e,t,r){"use strict";t.exports=function e(t,r,n){var i=[];var o;var a={url:t};var s=t.indexOf("?")!==-1;var u=s?"&":"?";if(typeof n==="string"){i.push(n)}else{o=Object.keys(n);o.forEach(function(e){var t=typeof n[e]==="object"?JSON.stringify(n[e]):n[e];i.push(e+"="+encodeURIComponent(t))})}if(r==="GET"){a.url+=u+i.join("&")}else{a.data=i.join("&")}return a}},{}],12:[function(e,t,r){(function(r){"use strict";t.exports=function e(){var t=new r.XMLHttpRequest;if("withCredentials"in t){return t}else if(!!r.XDomainRequest){return new XDomainRequest}else{throw new Error("CORS is not supported by your browser")}}}).call(this,typeof global!=="undefined"?global:typeof self!=="undefined"?self:typeof window!=="undefined"?window:{})},{}],13:[function(e,t,r){(function(i){"use strict";t.exports=function e(){var t,r,n;if(i.XMLHttpRequest){return new i.XMLHttpRequest}else{try{r=["Msxml2.XMLHTTP","Microsoft.XMLHTTP","Msxml2.XMLHTTP.4.0"];for(n=0;n<3;n++){try{t=r[n];if(new i.ActiveXObject(t)){break}}catch(e){}}return new i.ActiveXObject(t)}catch(e){throw new Error("XMLHttpRequest is not supported by your browser")}}}}).call(this,typeof global!=="undefined"?global:typeof self!=="undefined"?self:typeof window!=="undefined"?window:{})},{}],14:[function(e,t,r){"use strict";var l=e("./getXMLHttpRequest");var p=e("./getCORSRequest");var f=Object.prototype.hasOwnProperty;var a=function(){};function n(){}n.create=function(o){var e=new n;e.subscribe=function(e,t,r){var n;var i;if(typeof e==="function"){n={onNext:e,onError:t||a,onCompleted:r||a}}else{n=e}i=o(n);if(typeof i==="function"){return{dispose:i}}else{return i}};return e};function i(u,c,h){return n.create(function e(r){var t={method:u||"GET",crossDomain:false,async:true,headers:{},responseType:"json"};var n,i,o,a,s;for(s in c){if(f.call(c,s)){t[s]=c[s]}}if(!t.crossDomain&&!t.headers["X-Requested-With"]){t.headers["X-Requested-With"]="XMLHttpRequest"}if(h.onBeforeRequest!=null){h.onBeforeRequest(t)}try{n=t.crossDomain?p():l()}catch(e){r.onError(e)}try{if(t.user){n.open(t.method,t.url,t.async,t.user,t.password)}else{n.open(t.method,t.url,t.async)}n.timeout=t.timeout;n.withCredentials=t.withCredentials!==false;o=t.headers;for(a in o){if(f.call(o,a)){n.setRequestHeader(a,o[a])}}if(t.responseType){try{n.responseType=t.responseType}catch(e){if(t.responseType!=="json"){throw e}}}n.onreadystatechange=function e(t){if(n.readyState===4){if(!i){i=true;d(r,n,t)}}};n.ontimeout=function e(t){if(!i){i=true;v(r,n,"timeout error",t)}};n.send(t.data)}catch(e){r.onError(e)}return function e(){if(!i&&n.readyState!==4){i=true;n.abort()}}})}function s(e,t,r){if(!r){r=new Error(t)}e.onError(r)}function d(e,t,r){var n,i,o;if(t&&e){o=t.responseType;n="response"in t?t.response:t.responseText;var a=t.status===1223?204:t.status;if(a>=200&&a<=399){try{if(o!=="json"){n=JSON.parse(n||"")}if(typeof n==="string"){n=JSON.parse(n||"")}}catch(r){s(e,"invalid json",r)}e.onNext(n);e.onCompleted();return}else if(a===401||a===403||a===407){return s(e,n)}else if(a===410){return s(e,n)}else if(a===408||a===504){return s(e,n)}else{return s(e,n||"Response code "+a)}}}function v(e,t,r,n){s(e,r||t.statusText||"request error",n)}t.exports=i},{"./getCORSRequest":12,"./getXMLHttpRequest":13}],15:[function(l,r,i){(function(n){!function(e){if("object"==typeof i&&"undefined"!=typeof r)r.exports=e();else if("function"==typeof o&&o.amd)o([],e);else{var t;t="undefined"!=typeof window?window:"undefined"!=typeof n?n:"undefined"!=typeof self?self:this,t.falcor=e()}}(function(){var kr;return function o(a,s,u){function c(r,e){if(!s[r]){if(!a[r]){var t="function"==typeof l&&l;if(!e&&t)return t(r,!0);if(h)return h(r,!0);var n=new Error("Cannot find module '"+r+"'");throw n.code="MODULE_NOT_FOUND",n}var i=s[r]={exports:{}};a[r][0].call(i.exports,function(e){var t=a[r][1][e];return c(t?t:e)},i,i.exports,o,a,s,u)}return s[r].exports}for(var h="function"==typeof l&&l,e=0;e<u.length;e++)c(u[e]);return c}({1:[function(e,t,r){var n=e(32),i=e(130);n.atom=i.atom,n.ref=i.ref,n.error=i.error,n.pathValue=i.pathValue,n.HttpDataSource=e(125),t.exports=n},{125:125,130:130,32:32}],2:[function(e,t,r){function i(e){var t=e||{};this._root=t._root||new n(t),this._path=t.path||t._path||[],this._scheduler=t.scheduler||t._scheduler||new f,this._source=t.source||t._source,this._request=t.request||t._request||new a(this,this._scheduler),this._ID=T++,"number"==typeof t.maxSize?this._maxSize=t.maxSize:this._maxSize=t._maxSize||i.prototype._maxSize,"number"==typeof t.collectRatio?this._collectRatio=t.collectRatio:this._collectRatio=t._collectRatio||i.prototype._collectRatio,(t.boxed||t.hasOwnProperty("_boxed"))&&(this._boxed=t.boxed||t._boxed),(t.materialized||t.hasOwnProperty("_materialized"))&&(this._materialized=t.materialized||t._materialized),"boolean"==typeof t.treatErrorsAsValues?this._treatErrorsAsValues=t.treatErrorsAsValues:t.hasOwnProperty("_treatErrorsAsValues")&&(this._treatErrorsAsValues=t._treatErrorsAsValues),t.cache&&this.setCache(t.cache)}var n=e(4),o=e(3),a=e(55),s=e(64),u=e(65),c=e(61),h=e(63),l=e(73),p=e(75),f=e(74),d=e(81),v=e(84),m=e(49),g=e(134),y=e(88),_=e(100),b=e(96),x=e(102),w=e(98),S=e(99),M=e(77),E=e(76),C=e(130),T=0,O=e(116),P=function(){},A=e(14),j=e(19),R={pathValue:!0,pathSyntax:!0,json:!0,jsonGraph:!0},L=e(72);t.exports=i,i.ref=C.ref,i.atom=C.atom,i.error=C.error,i.pathValue=C.pathValue,i.prototype.constructor=i,i.prototype._materialized=!1,i.prototype._boxed=!1,i.prototype._progressive=!1,i.prototype._treatErrorsAsValues=!1,i.prototype._maxSize=Math.pow(2,53)-1,i.prototype._collectRatio=.75,i.prototype.get=e(71),i.prototype._getWithPaths=e(70),i.prototype.set=function(){var t=O(arguments,R,"set");return t!==!0?new s(function(e){e.onError(t)}):this._set.apply(this,arguments)},i.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()})})},i.prototype._set=function(){var e,t=-1,r=arguments.length,n=arguments[r-1];for(b(n)?r-=1:n=void 0,e=new Array(r);++t<r;)e[t]=arguments[t];return u.create(this,e,n)},i.prototype.call=function(){var e,t=-1,r=arguments.length;for(e=new Array(r);++t<r;){var n=arguments[t];e[t]=n;var i=typeof n;if(t>1&&!Array.isArray(n)||0===t&&!Array.isArray(n)&&"string"!==i||1===t&&!Array.isArray(n)&&!x(n))return new s(function(e){e.onError(new Error("Invalid argument"))})}return c.create(this,e)},i.prototype.invalidate=function(){var e,t=-1,r=arguments.length,n=arguments[r-1];for(e=new Array(r);++t<r;)if(e[t]=g.fromPath(arguments[t]),"object"!=typeof e[t])throw new Error("Invalid argument");h.create(this,e,n).subscribe(P,function(e){throw e})},i.prototype.deref=e(5),i.prototype.getValue=e(16),i.prototype.setValue=e(79),i.prototype._getValueSync=e(24),i.prototype._setValueSync=e(80),i.prototype._derefSync=e(6),i.prototype.setCache=function(e){var t=this._root.cache;if(e!==t){var r=this._root,n=this._path;this._path=[],this._root.cache={},"undefined"!=typeof t&&m(r,r.expired,y(t),0),S(e)?E(this,[e]):w(e)?M(this,[e]):_(e)&&M(this,[{json:e}]),this._path=n}else"undefined"==typeof t&&(this._root.cache={});return this},i.prototype.getCache=function(){var e=v(arguments);if(0===e.length)return A(this._root.cache);var t=[{}],r=this._path;return j.getWithPathsAsJSONGraph(this,e,t),this._path=r,t[0].jsonGraph},i.prototype.getVersion=function(e){var t=e&&g.fromPath(e)||[];if(Array.isArray(t)===!1)throw new Error("Model#getVersion must be called with an Array path.");return this._path.length&&(t=this._path.concat(t)),this._getVersion(this,t)},i.prototype._syncCheck=function(e){if(Boolean(this._source)&&this._root.syncRefCount<=0&&this._root.unsafeMode===!1)throw new Error("Model#"+e+" may only be called within the context of a request selector.");return!0},i.prototype._clone=function(e){var t=new i(this);for(var r in e){var n=e[r];"delete"===n?delete t[r]:t[r]=n}return t.setCache=void 0,t},i.prototype.batch=function(e){var t=e;"number"==typeof t?t=new p(Math.round(Math.abs(t))):t&&t.schedule||(t=new l);var r=this._clone();return r._request=new a(r,t),r},i.prototype.unbatch=function(){var e=this._clone();return e._request=new a(e,new f),e},i.prototype.treatErrorsAsValues=function(){return this._clone({_treatErrorsAsValues:!0})},i.prototype.asDataSource=function(){return new o(this)},i.prototype._materialize=function(){return this._clone({_materialized:!0})},i.prototype._dematerialize=function(){return this._clone({_materialized:"delete"})},i.prototype.boxValues=function(){return this._clone({_boxed:!0})},i.prototype.unboxValues=function(){return this._clone({_boxed:"delete"})},i.prototype.withoutDataSource=function(){return this._clone({_source:"delete"})},i.prototype.toJSON=function(){return{$type:"ref",value:this._path}},i.prototype.getPath=function(){return d(this._path)},i.prototype._getBoundValue=e(13),i.prototype._getVersion=e(18),i.prototype._getValueSync=e(17),i.prototype._getPathValuesAsPathMap=j.getWithPathsAsPathMap,i.prototype._getPathValuesAsJSONG=j.getWithPathsAsJSONGraph,i.prototype._setPathValuesAsJSON=e(78),i.prototype._setPathValuesAsJSONG=e(78),i.prototype._setPathValuesAsPathMap=e(78),i.prototype._setPathValuesAsValues=e(78),i.prototype._setPathMapsAsJSON=e(77),i.prototype._setPathMapsAsJSONG=e(77),i.prototype._setPathMapsAsPathMap=e(77),i.prototype._setPathMapsAsValues=e(77),i.prototype._setJSONGsAsJSON=e(76),i.prototype._setJSONGsAsJSONG=e(76),i.prototype._setJSONGsAsPathMap=e(76),i.prototype._setJSONGsAsValues=e(76),i.prototype._setCache=e(77),i.prototype._invalidatePathValuesAsJSON=e(48),i.prototype._invalidatePathMapsAsJSON=e(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(e,t,r){function n(e){this._model=e._materialize().treatErrorsAsValues()}n.prototype.get=function(e){return this._model.get.apply(this._model,e)._toJSONG()},n.prototype.set=function(e){return this._model.set(e)._toJSONG()},n.prototype.call=function(e,t,r,n){var i=[e,t,r].concat(n);return this._model.call.apply(this._model,i)._toJSONG()},t.exports=n},{}],4:[function(e,t,r){function n(e){var t=e||{};this.syncRefCount=0,this.expired=t.expired||[],this.unsafeMode=t.unsafeMode||!1,this.collectionScheduler=t.collectionScheduler||new a,this.cache={},i(t.comparator)&&(this.comparator=t.comparator),i(t.errorSelector)&&(this.errorSelector=t.errorSelector),i(t.onChange)&&(this.onChange=t.onChange)}var i=e(96),o=e(91),a=e(74);n.prototype.errorSelector=function(e,t){return t},n.prototype.comparator=function(e,t){return o(e,"value")&&o(t,"value")?e.value===t.value&&e.$type===t.$type&&e.$expires===t.$expires:e===t},t.exports=n},{74:74,91:91,96:96}],5:[function(e,t,r){function s(e,t){var r,n=!1;try{++e._root.syncRefCount,r=e._derefSync(t)}catch(e){r=e,n=!0}finally{--e._root.syncRefCount}return n?u.Observable["throw"](r):u.Observable["return"](r)}var u=e(159),c=e(134);t.exports=function(e){for(var n=this,t=-1,i=arguments.length-1,o=new Array(i),a=c.fromPath(e);++t<i;)o[t]=c.fromPath(arguments[t+1]);if(0===i)throw new Error("Model#deref requires at least one value path.");return u.Observable.defer(function(){return s(n,a)}).flatMap(function(e){if(Boolean(e)){if(i>0){var t=u.Observable.of(e);return e.get.apply(e,o)["catch"](u.Observable.empty()).concat(t).last().flatMap(function(){return s(n,a)}).filter(function(e){return e})}return u.Observable["return"](e)}if(i>0){var r=o.map(function(e){return a.concat(e)});return n.get.apply(n,r).concat(u.Observable.defer(function(){return s(n,a)})).last().filter(function(e){return e})}return u.Observable.empty()})}},{134:134,159:159}],6:[function(e,t,r){var a=e(134),s=e(13),u=e(8),c=e(118);t.exports=function(e){var t=a.fromPath(e);if(!Array.isArray(t))throw new Error("Model#derefSync must be called with an Array path.");var r=s(this,this._path.concat(t),!1),n=r.path,i=r.value,o=r.found;if(o&&void 0!==i&&(i.$type!==c||void 0!==i.value)){if(i.$type)throw new u;return this._clone({_path:n})}}},{118:118,13:13,134:134,8:8}],7:[function(e,t,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.",t.exports=n},{}],8:[function(e,t,r){function n(e,t){this.message=o,this.stack=(new Error).stack,this.boundPath=e,this.shortedPath=t}var i="InvalidModelError",o="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=i,n.message=o,t.exports=n},{}],9:[function(e,t,r){function n(e){this.message="An exception was thrown when making a request.",this.stack=(new Error).stack,this.innerError=e}var i="InvalidSourceError";n.prototype=new Error,n.prototype.name=i,n.is=function(e){return e&&e.name===i},t.exports=n},{}],10:[function(e,t,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(e){return e&&e.name===i},t.exports=n},{}],11:[function(e,t,r){function n(e,t,r,n,i,o,a){for(var s,u,c=r,h=i,l=n,p=0;;){if(0===p&&l[x]?(p=h.length,u=l[x]):(s=h[p++],u=c[s]),u){var f=u.$type,d=f&&u.value||u;if(p<h.length){if(f){c=u;break}c=u;continue}if(c=u,f&&_(u))break;if(l[x]||g(l,u),f===b){a?y(e,u,o,null,null,null,h,h.length,a):w(e,u),p=0,h=d,l=u,c=t;continue}break}c=void 0;break}if(p<h.length&&void 0!==c){for(var v=[],m=0;p>m;m++)v[m]=h[m];h=v}return[c,h]}var i=e(26),g=i.create,y=e(22),_=e(27),b=e(120),x=e(33),w=e(29).promote;t.exports=n},{120:120,22:22,26:26,27:27,29:29,33:33}],12:[function(e,t,r){var v=e(15),m=e(8),g=e(7);t.exports=function(f,d){return function(e,t,r){var n,i,o,a=r[0],s={values:r,optimizedPaths:[]},u=e._root.cache,c=e._path,h=u,l=c.length,p=[];if(l){if(d)return{criticalError:new g};if(h=v(e,c),h.$type)return{criticalError:new m(c,c)};for(n=[],i=0;l>i;++i)n[i]=c[i]}else n=[],l=0;for(i=0,o=t.length;o>i;i++)f(e,u,h,t[i],0,a,s,p,n,l,d);return s}}},{15:15,7:7,8:8}],13:[function(e,t,r){var h=e(17),l=e(8);t.exports=function(e,t,r){var n,i,o,a,s,u=t,c=t;for(n=e._boxed,r=e._materialized,i=e._treatErrorsAsValues,e._boxed=!0,e._materialized=void 0===r||r,e._treatErrorsAsValues=!0,o=h(e,u.concat(null),!0),e._boxed=n,e._materialized=r,e._treatErrorsAsValues=i,u=o.optimizedPath,a=o.shorted,s=o.found,o=o.value;u.length&&null===u[u.length-1];)u.pop();if(s&&a)throw new l(c,u);return{path:u,value:o,shorted:a,found:s}}},{17:17,8:8}],14:[function(e,t,r){function u(e){var t,r,n,i={},o=Object.keys(e);for(r=0,n=o.length;n>r;r++)t=o[r],l(t)||(i[t]=e[t]);return i}function c(a,s,e){Object.keys(a).filter(function(e){return!l(e)&&a[e]}).forEach(function(e){var t=a[e],r=s[e];if(r||(r=s[e]={}),t.$type){var n,i=t.value&&"object"==typeof t.value,o=!a[h];return n=i||o?u(t):t.value,void(s[e]=n)}c(t,r,e)})}var h=e(37),l=e(97);t.exports=function(e){var t={};return c(e,t),t}},{37:37,97:97}],15:[function(e,t,r){t.exports=function(e,t){for(var r=e._root.cache,n=-1,i=t.length;++n<i&&r&&!r.$type;)r=r[t[n]];return r}},{}],16:[function(e,t,r){var i=e(64),a=e(134);t.exports=function(e){for(var o=a.fromPath(e),t=0,r=o.length;++t<r;)if("object"==typeof o[t])return new i(function(e){e.onError(new Error("Paths must be simple paths"))});var n=this;return new i(function(i){return n.get(o).subscribe(function(e){for(var t=e.json,r=-1,n=o.length;t&&++r<n;)t=t[o[r]];i.onNext(t)},function(e){i.onError(e)},function(){i.onCompleted()})})}},{134:134,64:64}],17:[function(e,t,r){var _=e(11),b=e(25),x=e(27),w=e(29).promote,S=e(120),M=e(118),E=e(119);t.exports=function(e,t,r){for(var n,i,o,a,s,u=e._root.cache,c=t.length,h=[],l=!1,p=!1,f=0,d=u,v=u,m=u,g=!0,y=!1;d&&c>f;){if(n=t[f++],null!==n&&(d=v[n],h[h.length]=n),!d){m=void 0,l=!0,g=!1;break}if(o=d.$type,o===M&&void 0===d.value){m=void 0,g=!1,l=c>f;break}if(c>f){if(o===S){if(x(d)){y=!0,m=void 0,g=!1;break}if(a=_(e,u,u,d,d.value),s=a[0],!s){m=void 0,d=void 0,g=!1;break}o=s.$type,d=s,h=a[1].slice(0)}if(o)break}else m=d;v=d}if(c>f&&!y){for(i=f;c>i;++i)if(null!==t[f]){p=!0;break}for(p?(l=!0,m=void 0):m=d,i=f;c>i;++i)null!==t[i]&&(h[h.length]=t[i])}if(m&&o&&(x(m)?m=void 0:w(e,m)),m&&o===E&&!e._treatErrorsAsValues)throw{path:f===c?t:t.slice(0,f),value:m.value};return m&&e._boxed?m=Boolean(o)&&!r?b(m):m:!m&&e._materialized?m={$type:M}:m&&(m=m.value),{value:m,shorted:l,optimizedPath:h,found:g}}},{11:11,118:118,119:119,120:120,25:25,27:27,29:29}],18:[function(e,t,r){var i=e(46);t.exports=function(e,t){var r=e._getValueSync({_boxed:!0,_root:e._root,_treatErrorsAsValues:e._treatErrorsAsValues},t,!0).value,n=r&&r[i];return null==n?-1:n}},{46:46}],19:[function(e,t,r){var n=e(12),i=e(31),o=n(i,!1),a=n(i,!0);t.exports={getValueSync:e(17),getBoundValue:e(13),getWithPathsAsPathMap:o,getWithPathsAsJSONGraph:a}},{12:12,13:13,17:17,31:31}],20:[function(e,t,r){var n=e(29),a=e(25),s=n.promote;t.exports=function(e,t,r,n,i){var o=t.value;i.errors||(i.errors=[]),e._boxed&&(o=a(t)),i.errors.push({path:n.slice(0,r+1),value:o}),s(e,t)}},{25:25,29:29}],21:[function(e,t,r){function u(e,t,r,n,i,o,a){a.requestedMissingPaths.push(n.slice(0,r).concat(t)),a.optimizedMissingPaths.push(i.slice(0,o).concat(t))}var n=e(30),c=n.fastCopy;t.exports=function(e,t,r,n,i,o,a){var s;n.requestedMissingPaths||(n.requestedMissingPaths=[],n.optimizedMissingPaths=[]),s=r<t.length?c(t,r):[],u(e,s,r,i,o,a,n)}},{30:30}],22:[function(e,t,r){var n=e(29),x=e(25),w=n.promote,S=e(120),M=e(118),E=e(119),C=e(37);t.exports=function(e,t,r,n,i,o,a,s,u,c){if(r){var h,l,p,f,d,v,m,g,y=!1;if(t&&w(e,t),t&&void 0!==t.value||(y=e._materialized),y)g={$type:M};else if(e._boxed)g=x(t);else if(t.$type===S||t.$type===E)g=u?x(t):t.value;else if(u){var _=t.value&&"object"==typeof t.value,b=!t[C];g=_||b?x(t):t.value}else g=t.value;if(i&&(i.hasValue=!0),u){for(d=r.jsonGraph,d||(d=r.jsonGraph={},r.paths=[]),h=0,l=s-1;l>h;h++)f=a[h],d[f]||(d[f]={}),d=d[f];f=a[h],d[f]=y?{$type:M}:g,o&&r.paths.push(o.slice(0,n))}else if(0===n)r.json=g;else{for(d=r.json,d||(d=r.json={}),h=0;n-1>h;h++)p=o[h],d[p]||(d[p]={}),v=d,m=p,d=d[p];p=o[h],null!==p?d[p]=g:v[m]=g}}}},{118:118,119:119,120:120,25:25,29:29,37:37}],23:[function(e,t,r){var f=e(27),n=e(26),i=e(29),d=n.remove,v=i.splice,m=e(119),g=e(20),y=e(22),_=e(21),b=e(28),x=e(35);t.exports=function(e,t,r,n,i,o,a,s,u,c,h){var l=t&&t.$type,p=t&&void 0===t.value;return t&&l?void(f(t)?(t[x]||(v(e,t),d(t)),_(e,r,n,o,a,s,u)):l===m?(h&&(a[n]=null),c||e._treatErrorsAsValues?y(e,t,i,n,o,a,s,u,c,h):g(e,t,n,a,o)):(h&&(a[n]=null),(!p||p&&e._materialized)&&y(e,t,i,n,o,a,s,u,c,h))):void(b(e)?y(e,t,i,n,o,a,s,u,c,h):_(e,r,n,o,a,s,u))}},{119:119,20:20,21:21,22:22,26:26,27:27,28:28,29:29,35:35}],24:[function(e,t,r){var n=e(134);t.exports=function(e){var t=n.fromPath(e);if(Array.isArray(t)===!1)throw new Error("Model#getValueSync must be called with an Array path.");return this._path.length&&(t=this._path.concat(t)),this._syncCheck("getValueSync")&&this._getValueSync(this,t).value}},{134:134}],25:[function(e,t,r){var a=e(40);t.exports=function(e){var t,r,n,i=Object.keys(e);for(t={},r=0,n=i.length;n>r;r++){var o=i[r];o[0]!==a&&(t[o]=e[o])}return t}},{40:40}],26:[function(e,t,r){function n(e,t){var r=t[u]||0;t[o+r]=e,t[u]=r+1,e[s]=r,e[a]=t}function i(e){var t=e[a];if(t){for(var r=e[s],n=t[u];n>r;)t[o+r]=t[o+r+1],++r;t[u]=n-1,e[a]=void 0,e[s]=void 0}}var o=e(43),a=e(33),s=e(42),u=e(44);t.exports={create:n,remove:i}},{33:33,42:42,43:43,44:44}],27:[function(e,t,r){var n=e(106);t.exports=function(e){var t=void 0===e.$expires&&-1||e.$expires;return-1!==t&&1!==t&&(0===t||t<n())}},{106:106}],28:[function(e,t,r){t.exports=function(e){return e._materialized&&!e._source}},{}],29:[function(e,t,r){function n(e,t){var r=e._root,n=r[a];if(n!==t){var i=t[u],o=t[s];o&&(o[u]=i),i&&(i[s]=o),t[u]=void 0,r[a]=t,t[s]=n,n[u]=t}}function i(e,t){var r=e._root,n=t[u],i=t[s];i&&(i[u]=n),n&&(n[s]=i),t[u]=void 0,t===r[a]&&(r[a]=void 0),t===r[o]&&(r[o]=void 0),t[c]=!0,r.expired.push(t)}var a=e(34),o=e(45),s=e(38),u=e(41),c=e(35);t.exports={promote:n,splice:i}},{34:34,35:35,38:38,41:41,45:45}],30:[function(e,t,r){function n(e,t){var r,n,i,o=[];for(n=0,i=t||0,r=e.length;r>i;n++,i++)o[n]=e[i];return o}function i(e,t){var r,n,i,o=[];for(r=0,n=e.length;n>r;r++)o[r]=e[r];for(i=0,n=t.length;n>i;i++)null!==t[i]&&(o[r++]=t[i]);return o}function o(e,t){var r,n,i,o=[];for(r=0,n=e.length;n>r;r++)o[r]=e[r];for(i=0,n=t.length;n>i;i++)o[r++]=t[i];return o}t.exports={fastCat:o,fastCatSkipNulls:i,fastCopy:n}},{}],31:[function(e,t,r){var P=e(11),A=e(23),j=e(27),R=e(143).iterateKeySet,L=e(120),I=e(29).promote;t.exports=function e(t,r,n,i,o,a,s,u,c,h,l,p){var f=p,d=c;if(!n||n&&n.$type||o===i.length)return void A(t,n,i,o,a,s,u,d,h,l,f);var v,m;v=i[o];var g="object"==typeof v,y=o+1,_=!1,b=v;if(g&&(_={},b=R(v,_)),void 0!==b||!_.done){var x=h+1;do{f=!1;var w;null===b?w=n:(w=n[b],d[h]=b,u[o]=b);var S=d,M=x;if(w){var E=w.$type,C=E&&w.value||w;if(y<i.length&&E&&E===L&&!j(w)){l&&A(t,w,i,y,a,s,null,d,M,l,f),I(t,w);var T=P(t,r,r,w,C,a,l);f=!0,w=T[0];var O=T[1];for(S=[],M=O.length,m=0;M>m;++m)S[m]=O[m]}}e(t,r,w,i,y,a,s,u,S,M,l,f),_&&!_.done&&(b=R(v,_))}while(_&&!_.done)}}},{11:11,120:120,143:143,23:23,27:27,29:29}],32:[function(e,t,r){"use strict";function n(e){return new n.Model(e)}"function"==typeof Promise?n.Promise=Promise:n.Promise=e(151),t.exports=n,n.Model=e(2)},{151:151,2:2}],33:[function(e,t,r){t.exports=e(40)+"context"},{40:40}],34:[function(e,t,r){t.exports=e(40)+"head"},{40:40}],35:[function(e,t,r){t.exports=e(40)+"invalidated"},{40:40}],36:[function(e,t,r){t.exports=e(40)+"key"},{40:40}],37:[function(e,t,r){t.exports="$modelCreated"},{}],38:[function(e,t,r){t.exports=e(40)+"next"},{40:40}],39:[function(e,t,r){t.exports=e(40)+"parent"},{40:40}],40:[function(e,t,r){t.exports=String.fromCharCode(30)},{}],41:[function(e,t,r){t.exports=e(40)+"prev"},{40:40}],42:[function(e,t,r){t.exports=e(40)+"ref-index"},{40:40}],43:[function(e,t,r){t.exports=e(40)+"ref"},{40:40}],44:[function(e,t,r){t.exports=e(40)+"refs-length"},{40:40}],45:[function(e,t,r){t.exports=e(40)+"tail"},{40:40}],46:[function(e,t,r){t.exports=e(40)+"version"},{40:40}],47:[function(e,t,r){function y(e,t,r,n,i,o,a,s,u,c){if(!L(e)&&!e.$type)for(var h in e)if(h[0]!==m&&"$"!==h[0]&&P(e,h)){var l=e[h],p=A(l)&&!l.$type,f=g(r,n,i,h,l,p,!1,o,a,s,u,c),d=f[0],v=f[1];d&&(p?y(l,t+1,r,v,d,o,a,s,u,c):D(d,v,h,s)&&k(v,O(d),s,o))}}function d(e,t,r,n,i,o,a,s){if(j(r))return I(r,i,o),[void 0,t];T(o,r);var u=r,c=r.value,h=t;if(r=r[x],null!=r)h=r[b]||t;else{var l=0,p=c.length-1;h=r=t;do{var f=c[l],d=p>l,v=g(t,h,r,f,e,d,!0,n,i,o,a,s);if(r=v[0],L(r))return v;h=v[1]}while(l++<p);if(u[x]!==r){var m=r[M]||0;r[M]=m+1,r[_+m]=u,u[x]=r,u[S]=m}}return[r,h]}function g(e,t,r,n,i,o,a,s,u,c,h,l){for(var p=r.$type;p===E;){var f=d(i,e,r,s,u,c,h,l);if(r=f[0],L(r))return f;t=f[1],p=r&&r.$type}if(void 0!==p)return[r,t];if(null==n){if(o)throw new Error("`null` is not allowed in branch key positions.");r&&(n=r[v])}else t=r,r=t[n];return[r,t]}var v=e(36),_=e(43),m=e(40),b=e(39),x=e(33),w=e(46),S=e(42),M=e(44),E=e(120),C=e(13),T=e(50),O=e(88),P=e(91),A=e(100),j=e(95),R=e(96),L=e(102),I=e(86),N=e(92),k=e(115),D=e(109);t.exports=function(e,t){for(var r=e._root,n=r,i=r.expired,o=N(),a=r._comparator,s=r._errorSelector,u=e._path,c=r.cache,h=u.length?C(e,u).value:c,l=h[b]||c,p=c[w],f=-1,d=t.length;++f<d;){var v=t[f];y(v.json,0,c,l,h,o,i,n,a,s)}var m=c[w],g=r.onChange;R(g)&&p!==m&&g()}},{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(e,t,r){function m(e,t,r,n,i,o,a,s){var u={},c=t<e.length-1,h=e[t],l=P(h,u);do{var p=v(r,n,i,l,c,!1,o,a,s),f=p[0],d=p[1];f&&(c?m(e,t+1,r,d,f,o,a,s):R(f,d,l,s)&&j(d,M(f),s,o)),l=P(h,u)}while(!u.done)}function l(e,t,r,n,i){if(E(t))return O(t,n,i),[void 0,e];S(i,t);var o=t,a=t.value,s=e;if(t=t[y],null!=t)s=t[g]||e;else{var u=0,c=a.length-1;s=t=e;do{var h=a[u],l=c>u,p=v(e,s,t,h,l,!0,r,n,i);if(t=p[0],T(t))return p;s=p[1]}while(u++<c);if(o[y]!==t){var f=t[x]||0;t[x]=f+1,t[d+f]=o,o[y]=t,o[b]=f}}return[t,s]}function v(e,t,r,n,i,o,a,s,u){for(var c=r.$type;c===f;){var h=l(e,r,a,s,u);if(r=h[0],T(r))return h;t=h[1],c=r.$type}if(void 0!==c)return[r,t];if(null==n){if(i)throw new Error("`null` is not allowed in branch key positions.");r&&(n=r[p])}else t=r,r=t[n];return[r,t]}var p=e(36),d=e(43),g=e(39),y=e(33),_=e(46),b=e(42),x=e(44),f=e(120),w=e(13),S=e(50),M=e(88),E=e(95),C=e(96),T=e(102),O=e(86),P=e(143).iterateKeySet,A=e(92),j=e(115),R=e(109);t.exports=function(e,t){for(var r=e._root,n=r,i=r.expired,o=A(),a=e._path,s=r.cache,u=a.length?w(e,a).value:s,c=u[g]||s,h=s[_],l=-1,p=t.length;++l<p;){var f=t[l];m(f,0,s,c,u,o,i,n)}var d=s[_],v=r.onChange;C(v)&&h!==d&&v()}},{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(e,t,r){var d=e(36),v=e(39),m=e(34),g=e(45),y=e(38),_=e(41),b=e(108),x=e(115);t.exports=function(e,t,r,n,i,o){var a=r,s=i;"number"!=typeof s&&(s=.75);var u,c,h,l="number"==typeof o,p=n*s;for(c=t.pop();c;)h=c.$size||0,a-=h,l===!0?x(c,h,e,o):(u=c[v])&&b(c,u,c[d],e),c=t.pop();if(a>=n){var f=e[g];for(c=f;a>=p&&c;)f=f[_],h=c.$size||0,a-=h,l===!0&&x(c,h,e,o),c=f;e[g]=e[_]=c,null==c?e[m]=e[y]=void 0:c[y]=void 0}}},{108:108,115:115,34:34,36:36,38:38,39:39,41:41,45:45}],50:[function(e,t,r){var a=e(121),s=e(34),u=e(45),c=e(38),h=e(41),l=e(100);t.exports=function(e,t){if(l(t)&&t.$expires!==a){var r=e[s],n=e[u],i=t[c],o=t[h];t!==r&&(null!=i&&"object"==typeof i&&(i[h]=o),null!=o&&"object"==typeof o&&(o[c]=i),i=r,null!=r&&"object"==typeof r&&(r[h]=t),e[s]=e[c]=r=t,r[c]=i,r[h]=void 0),null!=n&&t!==n||(e[u]=e[h]=n=o||t)}return t}},{100:100,121:121,34:34,38:38,41:41,45:45}],51:[function(e,t,r){var a=e(34),s=e(45),u=e(38),c=e(41);t.exports=function(e,t){var r=e[a],n=e[s],i=t[u],o=t[c];null!=i&&"object"==typeof i&&(i[c]=o),null!=o&&"object"==typeof o&&(o[u]=i),t===r&&(e[a]=e[u]=i),t===n&&(e[s]=e[c]=o),t[u]=t[c]=void 0,r=n=i=o=void 0}},{34:34,38:38,41:41,45:45}],52:[function(e,t,r){function h(t,r){var n=!1;return function(){if(!n&&!t._disposed){n=!0,t._callbacks[r]=null,t._optimizedPaths[r]=[],t._requestedPaths[r]=[];var e=--t._count;0!==e||t.sent||(t._disposable.dispose(),t.requestQueue.removeRequest(t))}}}function p(e){for(var t=[],r=-1,n=0,i=e.length;i>n;++n)for(var o=e[n],a=0,s=o.length;s>a;++a)t[++r]=o[a];return t}var l=e(59),u=e(60),n=0,i=e(57).GetRequest,f=e(76),d=e(78),v=e(119),m=[],o=function(e,t){this.sent=!1,this.scheduled=!1,this.requestQueue=t,this.id=++n,this.type=i,this._scheduler=e,this._pathMap={},this._optimizedPaths=[],this._requestedPaths=[],this._callbacks=[],this._count=0,this._disposable=null,this._collapsed=null,this._disposed=!1};o.prototype={batch:function(e,t,r){var o=this,n=o._optimizedPaths,a=o._requestedPaths,s=o._callbacks,i=n.length;return n[i]=t,a[i]=e,s[i]=r,++o._count,o.scheduled||(o.scheduled=!0,o._disposable=o._scheduler.schedule(function(){u(o,n,function(e,t){if(o.requestQueue.removeRequest(o),o._disposed=!0,o._count){o._merge(a,e,t);for(var r=0,n=s.length;n>r;++r){var i=s[r];i&&i(e,t)}}})})),h(o,i)},add:function(e,t,r){var n,i,o=this,a=l(e,t,o._pathMap);a?(i=a[2],n=a[1]):(i=e,n=t);var s=!1,u=!1;if(n.length<t.length){s=!0;var c=o._callbacks.length;o._callbacks[c]=r,o._requestedPaths[c]=a[0],o._optimizedPaths[c]=[],++o._count,u=h(o,c)}return[s,i,n,u]},_merge:function(e,t,r){var n=this,i=n.requestQueue.model,o=i._root,a=o.errorSelector,s=o.comparator,u=i._path;i._path=m;var c=p(e);if(t){var h=t;h instanceof Error&&(h={message:h.message}),h.$type||(h={$type:v,value:h});var l=c.map(function(e){return{path:e,value:h}});d(i,l,null,a,s)}else f(i,[{paths:c,jsonGraph:r.jsonGraph}],null,a,s);i._path=u}},t.exports=o},{119:119,57:57,59:59,60:60,76:76,78:78}],53:[function(e,t,r){function n(){this.length=0,this.pending=!1,this.pathmaps=[],a.call(this,this._subscribe)}var i=e(159),o=i.Observer,a=i.Observable,s=i.Disposable,u=i.SerialDisposable,c=i.CompositeDisposable,h=e(9),l=e(143),f=l.iterateKeySet;n.create=function(e,t,r){var n=new this;return n.queue=e,n.model=t,n.index=r,n},n.prototype=Object.create(a.prototype),n.prototype.constructor=n,n.prototype.insertPath=function(e,t,r,n,i){var o=n||0,a=i||e.length-1,s=r||this.pathmaps[a+1]||(this.pathmaps[a+1]=Object.create(null));if(void 0===s||null===s)return!1;var u,c,h=e[o],l={};u=f(h,l);do{if(c=s[u],a>o){if(null==c){if(t)return!1;c=s[u]=Object.create(null)}if(this.insertPath(e,t,c,o+1,a)===!1)return!1}else s[u]=(c||0)+1,this.length+=1;l.done||(u=f(h,l))}while(!l.done);return!0},n.prototype.removePath=function(e,t,r,n){var i=r||0,o=n||e.length-1,a=t||this.pathmaps[o+1];if(void 0===a||null===a)return!0;var s,u,c=0,h=e[i],l={};s=f(h,l);do{if(u=a[s],void 0!==u&&null!==u){if(o>i){c+=this.removePath(e,u,i+1,o);var p=void 0;for(p in u)break;void 0===p&&delete a[s]}else u=a[s]=(u||1)-1,0===u&&delete a[s],c+=1,this.length-=1;l.done||(s=f(h,l))}}while(!l.done);return c},n.prototype.getSourceObserver=function(t){var r=this;return o.create(function(e){e.jsonGraph=e.jsonGraph||e.jsong||e.values||e.value,e.index=r.index,t.onNext(e)},function(e){t.onError(e)},function(){t.onCompleted()})},n.prototype._subscribe=function(e){var t=this,r=this.queue;t.pending=!0;var n=!1,i=new u,o=s.create(function(){n||(n=!0,r&&r._remove(t))}),a=new c(i,o);try{i.setDisposable(this.model._source[this.method](this.getSourceArgs()).subscribe(this.getSourceObserver(e)))}catch(e){throw new h(e)}return a},t.exports=n},{143:143,159:159,9:9}],54:[function(e,t,r){function n(e,t){this.total=0,this.model=e,this.requests=[],this.scheduler=t}var i=e(58),m=e(40),g=e(90),y=e(100),o=e(143);n.prototype.set=function(e){return e.paths=o.collapse(e.paths),i.create(this.model,e)},n.prototype._remove=function(e){var t=this.requests,r=t.indexOf(e);-1!==r&&t.splice(r,1)},n.prototype.distributePaths=function(e,t,r){var n,i,o=this.model,a=-1,s=e.length,u=-1,c=t.length,h=[];e:for(;++a<s;){var l=e[a];for(u=-1;++u<c;)if(i=t[u],i.insertPath(l,i.pending)){h[u]=i;continue e}n||(n=r.create(this,o,this.total++),t[u]=n,h[c++]=n),n.insertPath(l,!1)}var p=[],f=-1;for(u=-1;++u<c;)i=h[u],null!=i&&(p[++f]=i);return p},n.prototype.mergeJSONGraphs=function(e,t){var r=0,n=[],i=[],o=[],a=e.index,s=t.index;e.index=Math.max(a,s),n[-1]=e.jsonGraph||{},i[-1]=t.jsonGraph||{};e:for(;r>-1;){for(var u=n[r-1],c=i[r-1],h=o[r-1]||(o[r-1]=Object.keys(c));h.length>0;){var l=h.pop();if(l[0]!==m)if(u.hasOwnProperty(l)){var p=u[l],f=g(p),d=c[l],v=g(d);if(y(p)&&y(d)&&!f&&!v){n[r]=p,i[r]=d,r+=1;continue e}s>a&&(u[l]=d)}else u[l]=c[l]}r-=1}return e},t.exports=n},{100:100,143:143,40:40,58:58,90:90}],55:[function(e,t,r){function n(e,t){this.model=e,this.scheduler=t,this.requests=this._requests=[]}var i=e(54),o=e(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,t.exports=n},{54:54,56:56}],56:[function(e,t,r){function n(e,t){this.model=e,this.scheduler=t,this.requests=this._requests=[]}var m=e(57),g=e(52);n.prototype={setScheduler:function(e){this.scheduler=e},get:function(e,t,r){function n(){f||(--c,0===c&&r())}var i,o,a,s=this,u=[],c=0,h=s._requests,l=t,p=e,f=!1;for(i=0,o=h.length;o>i;++i)if(a=h[i],a.type===m.GetRequest){if(a.sent){var d=a.add(p,l,n);d[0]&&(p=d[1],l=d[2],u[u.length]=d[3],++c)}else a.batch(p,l,n),l=[],p=[],++c;if(!l.length)break}if(l.length){a=new g(s.scheduler,s),h[h.length]=a,++c;var v=a.batch(p,l,n);u[u.length]=v}return function(){if(!f&&0!==c){f=!0;for(var e=u.length,t=0;e>t;++t)u[t]()}}},removeRequest:function(e){for(var t=this._requests,r=t.length;--r>=0;)if(t[r].id===e.id){t.splice(r,1);break}}},t.exports=n},{52:52,57:57}],57:[function(e,t,r){t.exports={GetRequest:"GET"}},{}],58:[function(e,t,r){function n(){c.call(this)}var i=e(159),u=i.Observer,c=e(53),h=e(83),l=e(76),p=e(78),f=new Array(0);n.create=function(e,t){var r=new n;return r.model=e,r.jsonGraphEnvelope=t,r},n.prototype=Object.create(c.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(r){var n=this.model,i=n._path,o=this.jsonGraphEnvelope.paths,e=n._root,a=e.errorSelector,s=e.comparator;return c.prototype.getSourceObserver.call(this,u.create(function(e){n._path=f;var t=l(n,[{paths:o,jsonGraph:e.jsonGraph}],null,a,s);e.paths=t[1],n._path=i,r.onNext(e)},function(t){n._path=f,p(n,h(o,function(e){return{path:e,value:t}}),null,a,s),n._path=i,r.onError(t)},function(){r.onCompleted()}))},t.exports=n},{159:159,53:53,76:76,78:78,83:83}],59:[function(e,t,r){var f=e(143).hasIntersection,d=e(84);t.exports=function(e,t,r){for(var n=[],i=[],o=[],a=-1,s=-1,u=!1,c=0,h=t.length;h>c;++c){var l=t[c],p=r[l.length];p&&f(p,l,0)?(!u&&c>0&&(i=d(e,0,c),n=d(t,0,c)),o[++a]=e[c],u=!0):u&&(n[++s]=l,i[s]=e[c])}return u?[o,n,i]:null}},{143:143,84:84}],60:[function(e,t,r){var n=e(143),_=n.toTree,b=n.toPaths;t.exports=function(e,t,r){if(0===e._count)return void e.requestQueue.removeRequest(e);e.sent=!0,e.scheduled=!1;for(var n=e._pathMap,i=Object.keys(t),o=0,a=i.length;a>o;++o)for(var s=t[o],u=0,c=s.length;c>u;++u){var h=s[u],l=h.length;if(n[l]){var p=n[l];p[p.length]=h}else n[l]=[h]}for(var f=Object.keys(n),d=0,v=f.length;v>d;++d){var m=f[d];n[m]=_(n[m])}var g,y=e._collasped=b(n);e.requestQueue.model._source.get(y).subscribe(function(e){g=e},function(e){r(e,g)},function(){r(null,g)})}},{143:143}],61:[function(e,t,r){function n(e){b.call(this,e||i)}function y(e){return _.Observable.defer(function(){return e})}function i(i){function e(e){function t(e,t){if(Boolean(t.invalidated))e.invalidations.push(e.localThisPath.concat(t.path));else{var r=t.path,n=t.value;Boolean(n)&&"object"==typeof n&&n.$type===M?e.references.push({path:f(r),value:t.value}):e.values.push({path:f(r),value:t.value})}return e}function r(t){var e=t.values.concat(t.references);return e.length>0?y(h.set.apply(h,e)._toJSONG()).map(function(e){return{results:t,envelope:e}}):b["return"]({results:t,envelope:{jsonGraph:{},paths:[]}})}function n(e){var t,r=e.envelope,n=e.results,i=n.values,o=n.references,a=n.invalidations,s=i.map(p).map(f),u=o.reduce(l,[]),c=d.map(f),h=u.concat(c);return t=h.length>0?y(v.get.apply(v,s.concat(h))._toJSONG()):b["return"](r),t.doAction(function(e){e.invalidated=a})}function l(e,t){var r=t.path;return e.push.apply(e,c.map(function(e){return r.concat(e)})),e}function p(e){return e.path}var i=e&&e.localFn;if("function"==typeof i){var o=e.model,a=o._path,s=i.apply(o,u).reduce(t,{values:[],references:[],invalidations:[],localThisPath:a}).flatMap(r).flatMap(n);return b["return"](s)}return b.empty()}function t(e){function t(e){var t=e.invalidated;return t&&t.length&&v.invalidate.apply(v,t),e}return e&&"object"==typeof e?_.Observable.defer(function(){var t;try{t=e.call(l,u,c,d)}catch(e){t=b["throw"](new w(e))}return t}).map(t):b.empty()}function r(e){return y(h.set(e)).reduce(function(e){return e},null).map(function(){return{invalidated:e.invalidated,paths:e.paths.map(function(e){return e.slice(s.length)})}})}function f(e){return p.concat(e)}var n=this.args,o=this.model,a=S.fromPath(n[0]),u=n[1]||[],c=(n[2]||[]).map(S.fromPath),d=(n[3]||[]).map(S.fromPath),v=o._clone({_path:[]}),h=v.withoutDataSource(),s=o._path,l=s.concat(a),p=l.slice(0,-1),m=y(o.withoutDataSource().get(a)).map(function(e){for(var t=e.json,r=-1,n=a.length;t&&++r<n;)t=t[a[r]];var i=v._derefSync(p).boxValues();return{model:i,localFn:t}}).flatMap(e).defaultIfEmpty(t(o._source)).mergeAll().flatMap(r),g=new x;return g.add(m.subscribe(function(e){var t=e.paths,r=e.invalidated,n=o.get.apply(o,t);"AsJSONG"===i.outputFormat&&(n=y(n._toJSONG()).doAction(function(e){e.invalidated=r})),g.add(n.subscribe(i))},function(e){i.onError(e)})),g}var _=e(159)&&e(158),b=_.Observable,x=_.CompositeDisposable,o=e(64),w=e(9),S=e(134),M=e(120);n.create=o.create,n.prototype=Object.create(b.prototype),n.prototype.constructor=n,n.prototype.invokeSourceRequest=function(e){return this},n.prototype.ensureCollect=function(e){return this},n.prototype.initialize=function(){return this},t.exports=n},{120:120,134:134,158:158,159:159,64:64,9:9}],62:[function(e,t,r){function n(e){o.call(this,e)}var i=e(159),o=i.Observable,a=e(64),p=e(134),s=e(88),u=e(49),f=e(81),c=e(46),d=Array.isArray,v=e(101),m=e(98),g=e(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 e,t,r=this.model,n=this.outputFormat||"AsPathMap",i=this.isProgressive,o=[{}],a=[],s=this.args,u=-1,c=s.length;++u<c;){var h,l=s[u];d(l)||"string"==typeof l?(l=p.fromPath(l),h="PathValues"):v(l)?(l.path=p.fromPath(l.path),h="PathValues"):g(l)?h="JSONGs":m(l)&&(h="PathMaps"),t!==h&&(t=h,e={inputType:h,arguments:[]},a.push(e),e.values=o),e.arguments.push(l)}return this.boundPath=f(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(e){return this},n.prototype.ensureCollect=function(r){var t=this["finally"](function(){var e=r._root,t=e.cache;e.collectionScheduler.schedule(function(){u(e,e.expired,s(t),r._maxSize,r._collectRatio,t[c])})});return new this.constructor(function(e){return t.subscribe(e)})},t.exports=n},{101:101,134:134,159:159,46:46,49:49,64:64,81:81,88:88,98:98,99:99}],63:[function(e,t,r){function n(e){a.call(this,e||i)}function i(e){for(var t=this.model,r=this.method,n=this.groups,i=-1,o=n.length;++i<o;){var a=n[i],s=a.inputType,u=a.arguments;if(u.length>0){var c="_"+r+s+"AsJSON",h=t[c];h(t,u)}}return e.onCompleted(),l.empty}var o=e(159),l=o.Disposable,a=e(62);n.create=a.create,n.prototype=Object.create(a.prototype),n.prototype.method="invalidate",n.prototype.constructor=n,t.exports=n},{159:159,62:62}],64:[function(e,t,r){function n(e){this._subscribe=e}function i(e){var t=this.model,r=new this.type;return r.model=t,r.args=this.args,r.outputFormat=e.outputFormat||"AsPathMap",r.isProgressive=e.isProgressive||!1,r.subscribeCount=0,r.subscribeLimit=e.retryLimit||10,r.initialize().invokeSourceRequest(t).ensureCollect(t).subscribe(e)}var o=e(32),a=e(159)&&e(158),s=a.Observable,u=e(84),c=e(105),h={outputFormat:{value:"AsJSONG"}},l={isProgressive:{value:!0}};n.create=function(e,t){var r=new n(i);return r.args=t,r.type=this,r.model=e,r},n.prototype=Object.create(s.prototype),n.prototype.constructor=n,n.prototype._mixin=function(){var t=this,r=u(arguments);return new t.constructor(function(e){return t.subscribe(r.reduce(function(e,t){return Object.create(e,t)},e))})},n.prototype._toJSONG=function(){return this._mixin(h)},n.prototype.progressively=function(){return this._mixin(l)},n.prototype.subscribe=function(e,t,r){var n=e;n&&"object"==typeof n||(n={onNext:e||c,onError:t||c,onCompleted:r||c});var i=this._subscribe(n);switch(typeof i){case"function":return{dispose:i};case"object":return i||{dispose:c};default:return{dispose:c}}},n.prototype.then=function(e,t){var i=this;return new o.Promise(function(e,t){var r,n=!1;i.toArray().subscribe(function(e){r=e.length<=1?e[0]:e},function(e){n=!0,t(e)},function(){n===!1&&e(r)})}).then(e,t)},t.exports=n},{105:105,158:158,159:159,32:32,84:84}],65:[function(e,t,r){function n(e){c.call(this,e||i)}function i(e){return this.isCompleted?y.call(this,e):o.call(this,e)}function o(e){if(this.subscribeCount++>this.subscribeLimit)return e.onError("Loop kill switch thrown."),x.empty;for(var t=[],r=[],n=this.model,i=this.isMaster,o=n._root,a=this.outputFormat,s=o.errorSelector,u=this.method,c=this.groups,h=-1,l=c.length;++h<l;){var p=c[h],f=p.inputType,d=p.arguments;if(d.length>0){var v="_"+u+f+a,m=n[v],g=m(n,d,null,s);r.push.apply(r,g[1]),"PathValues"===f?t.push.apply(t,d.map(_)):"JSONGs"===f?t.push.apply(t,w(d,b)):t.push.apply(t,g[0])}}return this.requestedPaths=t,i?(this.isCompleted=!0,y.call(this,e)):void e.onError({method:u,optimizedPaths:r,invokeSourceRequest:!0})}function y(e){var t=new s(this.model,this.requestedPaths);return"AsJSONG"===this.outputFormat&&(t=t._toJSONG()),this.isProgressive&&(t=t.progressively()),t.subscribe(e)}function _(e){return e.path}function b(e){return e.paths}var a=e(159),u=a.Observable,x=a.Disposable,s=e(67),c=e(62),h=e(9),w=e(82),l=new Array(0);n.create=c.create,n.prototype=Object.create(c.prototype),n.prototype.method="set",n.prototype.constructor=n,n.prototype.invokeSourceRequest=function(o){var a=this,s=this["catch"](function(e){var t;if(e&&e.invokeSourceRequest===!0){var r={},n=o._path,i=e.optimizedPaths;o._path=l,o._getPathValuesAsJSONG(o._materialize().withoutDataSource(),i,[r]),o._path=n,t=o._request.set(r)["do"](function(e){a.isCompleted=i.length===e.paths.length},function(){a.isCompleted=!0}).materialize().flatMap(function(e){if("C"===e.kind)return u.empty();if("E"===e.kind){var t=e.exception;if(h.is(t))return u["throw"](e.exception)}return s})}else t=u["throw"](e);return t});return new this.constructor(function(e){return s.subscribe(e)})},t.exports=n},{159:159,62:62,67:67,82:82,9:9}],66:[function(e,t,r){var n=function(e){this.disposed=!1,this.currentDisposable=e};n.prototype={dispose:function(){if(!this.disposed&&this.currentDisposable){this.disposed=!0;var e=this.currentDisposable;e.dispose?e.dispose():e()}}},t.exports=n},{}],67:[function(e,t,r){var n=e(64),a=e(68),s=e(69),u={dispose:function(){}},i=e(159).Observable,o=t.exports=function(e,t,r,n){this.model=e,this.currentRemainingPaths=t,this.isJSONGraph=r||!1,this.isProgressive=n||!1};o.prototype=Object.create(i.prototype),o.prototype.subscribe=n.prototype.subscribe,o.prototype.then=n.prototype.then,o.prototype._toJSONG=function(){return new o(this.model,this.currentRemainingPaths,!0,this.isProgressive)},o.prototype.progressively=function(){return new o(this.model,this.currentRemainingPaths,this.isJSONGraph,!0)},o.prototype._subscribe=function(e){var t=[{}],r=[],n=e.isJSONG=this.isJSONGraph,i=this.isProgressive,o=a(this.model,this.currentRemainingPaths,e,i,n,t,r);return o?s(this,this.model,o,e,t,r,1):u}},{159:159,64:64,68:68,69:69}],68:[function(e,t,r){var n=e(19),v=n.getWithPathsAsJSONGraph,m=n.getWithPathsAsPathMap;t.exports=function(e,t,r,n,i,o,a){var s;if(s=i?v(e,t,o):m(e,t,o),s.criticalError)return r.onError(s.criticalError),null;var u=s.hasValue,c=!s.requestedMissingPaths||!e._source,h=o[0].json||o[0].jsonGraph;if(s.errors)for(var l=s.errors,p=a.length,f=0,d=l.length;d>f;++f,++p)a[p]=l[f];if(u&&n||h&&c)try{++e._root.syncRefCount,r.onNext(o[0])}catch(e){throw e}finally{--e._root.syncRefCount}return c?(a.length?r.onError(a):r.onCompleted(),null):s}},{19:19}],69:[function(e,t,r){var g=e(68),y=e(10),_=e(30).fastCat,b=e(49),x=e(88),w=e(66),S=e(46);t.exports=function i(o,a,e,s,u,c,h){if(10===h)throw new y;var t=a._request,l=e.requestedMissingPaths,r=e.optimizedMissingPaths,p=new w,n=[],f=a._path;if(f.length)for(var d=0,v=l.length;v>d;++d)n[d]=_(f,l[d]);else n=l;var m=t.get(n,r,function(){var e=g(a,l,s,o.isProgressive,o.isJSONGraph,u,c);if(e)p.currentDisposable=i(o,a,e,s,u,c,h+1);else{var t=a._root,r=t.cache,n=r[S];b(t,t.expired,x(r),a._maxSize,a._collectRatio,n)}});return p.currentDisposable=m,p}},{10:10,30:30,46:46,49:49,66:66,68:68,88:88}],70:[function(e,t,r){var n=e(67);t.exports=function(e){return new n(this,e)}},{67:67}],71:[function(e,t,r){var n=e(134),i=e(64),o=e(72),a=e(116),s=e(67);t.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(e,t,r){t.exports={path:!0,pathSyntax:!0}},{}],73:[function(e,t,r){function n(){}var i=e(123),o=e(159),a=o.Disposable;n.prototype.schedule=function(e){return i(e),a.empty},n.prototype.scheduleWithState=function(e,t){var r=this;return i(function(){t(r,e)}),a.empty},t.exports=n},{123:123,159:159}],74:[function(e,t,r){function n(){}var i=e(159),o=i.Disposable;n.prototype.schedule=function(e){return e(),o.empty},n.prototype.scheduleWithState=function(e,t){return t(this,e),o.empty},t.exports=n},{159:159}],75:[function(e,t,r){function n(e){this.delay=e}var i=e(159),o=i.Disposable;n.prototype.schedule=function(e){var t=setTimeout(e,this.delay);return o.create(function(){void 0!==t&&(clearTimeout(t),t=void 0)})},n.prototype.scheduleWithState=function(e,t){var r=this,n=setTimeout(function(){t(r,e)},this.delay);return o.create(function(){void 0!==n&&(clearTimeout(n),n=void 0)})},t.exports=n},{159:159}],76:[function(e,t,r){function E(e,t,r,n,i,o,a,s,u,c,h,l,p,f,d,v,m){for(var g={},y=t<e.length-1,_=e[t],b=L(_,g),x=l.index;;){h.depth=t;var w=C(r,n,i,o,a,s,b,y,!1,h,l,p,f,d,v,m);h[t]=b,h.index=t,l[l.index++]=b;var S=w[0],M=w[1];if(S&&(y?E(e,t+1,r,M,S,o,w[3],w[2],u,c,h,l,p,f,d,v,m):(O(d,S),u.push(h.slice(0,h.index+1)),c.push(l.slice(0,l.index)))),b=L(_,g),g.done)break;l.index=x}}function y(e,t,r,n,i,o,a,s,u,c,h){var l=t.value;if(o.splice(0,o.length),o.push.apply(o,l),P(t))return o.index=l.length,R(t,s,u),[void 0,e,n,r];O(u,t);var p=0,f=t,d=l.length-1,v=t=e,m=n=r;do{var g=l[p],y=d>p,_=C(e,v,t,r,m,n,g,y,!0,i,o,a,s,u,c,h);if(t=_[0],j(t))return o.index=p,_;v=_[1],n=_[2],m=_[3]}while(p++<d);if(o.index=p,f[w]!==t){var b=t[M]||0;t[M]=b+1,t[x+b]=f,f[w]=t,f[S]=b}return[t,v,n,m]}function C(e,t,r,n,i,o,a,s,u,c,h,l,p,f,d,v){for(var m=r.$type;m===b;){var g=y(e,r,n,o,c,h,l,p,f,d,v);if(r=g[0],j(r))return g;t=g[1],o=g[2],i=g[3],m=r.$type}if(void 0!==m)return[r,t,o,i];if(null==a){if(s)throw new Error("`null` is not allowed in branch key positions.");r&&(a=r[_])}else t=r,i=o,r=t[a],o=i&&i[a];return r=N(t,r,o,a,c,h,l,p,f,d,v),[r,t,o,i]}var _=e(36),x=e(43),w=e(33),T=e(46),S=e(42),M=e(44),b=e(120),O=e(50),P=e(94),A=e(96),j=e(102),R=e(86),L=e(143).iterateKeySet,I=e(92),N=e(103);t.exports=function(e,t,r,n,i){for(var o=e._root,a=o,s=o.expired,u=I(),c=o.cache,h=c[T],l=[],p=[],f=[],d=[],v=-1,m=t.length;++v<m;)for(var g=t[v],y=g.paths,_=g.jsonGraph,b=-1,x=y.length;++b<x;){var w=y[b];p.index=0,E(w,0,c,c,c,_,_,_,f,d,l,p,u,s,a,i,n)}var S=c[T],M=o.onChange;return A(M)&&h!==S&&M(),[f,d]}},{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(e,t,r){function M(e,t,r,n,i,o,a,s,u,c,h,l,p,f){var d=C(e);if(d&&d.length)for(var v=0,m=d.length,g=u.index;;){var y=d[v],_=e[y],b=j(_)&&!_.$type;s.depth=t;var x=E(r,n,i,y,_,b,!1,s,u,c,h,l,p,f);s[t]=y,s.index=t,u[u.index++]=y;var w=x[0],S=x[1];if(w&&(b?M(_,t+1,r,S,w,o,a,s,u,c,h,l,p,f):(A(l,w),o.push(s.slice(0,s.index+1)),a.push(u.slice(0,u.index)))),++v>=m)break;u.index=g}}function m(e,t,r,n,i,o,a,s,u,c){var h=r.value;if(i.splice(0,i.length),i.push.apply(i,h),S(r))return i.index=h.length,I(r,a,s),[void 0,t];A(s,r);var l=r,p=t;if(r=r[b],null!=r)p=r[T]||t,i.index=h.length;else{var f=0,d=h.length-1;p=r=t;do{var v=h[f],m=d>f,g=E(t,p,r,v,e,m,!0,n,i,o,a,s,u,c);if(r=g[0],L(r))return i.index=f,g;p=g[1]}while(f++<d);if(i.index=f,l[b]!==r){var y=r[w]||0;r[w]=y+1,r[_+y]=l,l[b]=r,l[x]=y}}return[r,p]}function E(e,t,r,n,i,o,a,s,u,c,h,l,p,f){for(var d=r.$type;d===y;){var v=m(i,e,r,s,u,c,h,l,p,f);if(r=v[0],L(r))return v;t=v[1],d=r&&r.$type}if(void 0!==d)return[r,t];if(null==n){if(o)throw new Error("`null` is not allowed in branch key positions.");r&&(n=r[g])}else t=r,r=t[n];return r=k(t,r,n,i,o,a,s,u,c,h,l,p,f),[r,t]}function C(e){if(j(e)&&!e.$type){var t=[],r=0;o(e)&&(t[r++]="length");for(var n in e)n[0]!==i&&"$"!==n[0]&&a(e,n)&&(t[r++]=n);return t}}var g=e(36),_=e(43),i=e(40),T=e(39),b=e(33),O=e(46),x=e(42),w=e(44),y=e(120),P=e(13),o=Array.isArray,A=e(50),a=e(91),j=e(100),S=e(95),R=e(96),L=e(102),I=e(86),N=e(92),k=e(104);t.exports=function(e,t,r,n,i){for(var o=e._root,a=o,s=o.expired,u=N(),c=e._path,h=o.cache,l=c.length?P(e,c).value:h,p=l[T]||h,f=h[O],d=[],v=[],m=[],g=c.length,y=-1,_=t.length;++y<_;){var b=t[y],x=c.slice(0);x.index=g,M(b.json,0,h,p,l,v,m,d,x,u,s,a,i,n)}var w=h[O],S=o.onChange;return R(S)&&f!==w&&S(),[v,m]}},{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(e,t,r){function C(e,t,r,n,i,o,a,s,u,c,h,l,p,f,d){for(var v={},m=r<t.length-1,g=t[r],y=L(g,v),_=c.index;;){u.depth=r;var b=S(n,i,o,y,e,m,!1,u,c,h,l,p,f,d);u[r]=y,u.index=r,c[c.index++]=y;var x=b[0],w=b[1];if(x&&(m?C(e,t,r+1,n,w,x,a,s,u,c,h,l,p,f,d):(M(p,x),a.push(u.slice(0,u.index+1)),s.push(c.slice(0,c.index)))),y=L(g,v),v.done)break;c.index=_}}function m(e,t,r,n,i,o,a,s,u,c){var h=r.value;if(i.splice(0,i.length),i.push.apply(i,h),E(r))return i.index=h.length,R(r,a,s),[void 0,t];M(s,r);var l=r,p=t;if(r=r[b],null!=r)p=r[T]||t,i.index=h.length;else{var f=0,d=h.length-1;p=r=t;do{var v=h[f],m=d>f,g=S(t,p,r,v,e,m,!0,n,i,o,a,s,u,c);if(r=g[0],j(r))return i.index=f,g;p=g[1]}while(f++<d);if(i.index=f,l[b]!==r){var y=r[w]||0;r[w]=y+1,r[_+y]=l,l[b]=r,l[x]=y}}return[r,p]}function S(e,t,r,n,i,o,a,s,u,c,h,l,p,f){for(var d=r.$type;d===y;){var v=m(i,e,r,s,u,c,h,l,p,f);if(r=v[0],j(r))return v;t=v[1],d=r.$type}if(void 0!==d)return[r,t];if(null==n){if(o)throw new Error("`null` is not allowed in branch key positions.");r&&(n=r[g])}else t=r,r=t[n];return r=N(t,r,n,i,o,a,s,u,c,h,l,p,f),[r,t]}var g=e(36),_=e(43),T=e(39),b=e(33),O=e(46),x=e(42),w=e(44),y=e(120),P=e(13),M=e(50),E=e(95),A=e(96),j=e(102),R=e(86),L=e(143).iterateKeySet,I=e(92),N=e(104);t.exports=function(e,t,r,n,i){for(var o=e._root,a=o,s=o.expired,u=I(),c=e._path,h=o.cache,l=c.length?P(e,c).value:h,p=l[T]||h,f=h[O],d=[],v=[],m=[],g=c.length,y=-1,_=t.length;++y<_;){var b=t[y],x=b.path,w=b.value,S=c.slice(0);S.index=g,C(w,x,0,h,p,l,v,m,d,S,u,s,a,i,n)}var M=h[O],E=o.onChange;return A(E)&&f!==M&&E(),[v,m]}},{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(e,t,r){var s=e(130),u=e(64),c=e(101);t.exports=function(e,t){for(var r=c(e)?e:s.pathValue(e,t),n=0,o=r.path,i=o.length;++n<i;)if("object"==typeof o[n])return new u(function(e){e.onError(new Error("Paths must be simple paths"))});var a=this;return new u(function(i){return a._set(r).subscribe(function(e){for(var t=e.json,r=-1,n=o.length;t&&++r<n;)t=t[o[r]];i.onNext(t)},function(e){i.onError(e)},function(){i.onCompleted()})})}},{101:101,130:130,64:64}],80:[function(e,t,r){var u=e(134),c=e(101),h=e(78);t.exports=function(e,t,r,n){var i=u.fromPath(e),o=t,a=r,s=n;if(c(i)?(s=a,a=o,o=i):o={path:i,value:o},c(o)===!1)throw new Error("Model#setValueSync must be called with an Array path.");return"function"!=typeof a&&(a=this._root._errorSelector),"function"!=typeof s&&(s=this._root._comparator),this._syncCheck("setValueSync")?(h(this,[o]),this._getValueSync(this,o.path).value):void 0}},{101:101,134:134,78:78}],81:[function(e,t,r){t.exports=function(e){if(!e)return e;for(var t=-1,r=e.length,n=[];++t<r;)n[t]=e[t];return n}},{}],82:[function(e,t,r){t.exports=function(e,t){for(var r=-1,n=-1,i=e.length,o=[];++n<i;)for(var a=t(e[n],n,e),s=-1,u=a.length;++s<u;)o[++r]=a[s];return o}},{}],83:[function(e,t,r){t.exports=function(e,t){for(var r=-1,n=e.length,i=new Array(n);++r<n;)i[r]=t(e[r],r,e);return i}},{}],84:[function(e,t,r){t.exports=function(e,t,r){var n=t||0,i=-1,o=e.length-n;0>o&&(o=0),r>0&&o>r&&(o=r);for(var a=new Array(o);++i<o;)a[i]=e[i+n];return a}},{}],85:[function(e,t,r){var i=e(40),o=e(91),a=Array.isArray,s=e(100);t.exports=function(e){var t=e;if(s(t)){t=a(e)?[]:{};var r=e;for(var n in r)n[0]!==i&&o(r,n)&&(t[n]=r[n])}return t}},{100:100,40:40,91:91}],86:[function(e,t,r){var n=e(51),i=e(35);t.exports=function(e,t,r){return e[i]||(e[i]=!0,t.push(e),n(r,e)),e}},{35:35,51:51}],87:[function(e,t,r){var n=e(100);t.exports=function(e){return n(e)&&e.$expires||void 0}},{100:100}],88:[function(e,t,r){var n=e(100);t.exports=function(e){return n(e)&&e.$size||0}},{100:100}],89:[function(e,t,r){var n=e(100);t.exports=function(e){return n(e)&&e.$timestamp||void 0}},{100:100}],90:[function(e,t,r){var n=e(100);t.exports=function(e,t){var r=n(e)&&e.$type||void 0;return t&&r?"branch":r}},{100:100}],91:[function(e,t,r){var n=e(100),i=Object.prototype.hasOwnProperty;t.exports=function(e,t){return n(e)&&i.call(e,t)}},{100:100}],92:[function(e,t,r){var n=1;t.exports=function(){return n++}},{}],93:[function(e,t,r){var i=e(36),o=e(39),a=e(46);t.exports=function(e,t,r,n){return e[i]=r,e[o]=t,e[a]=n,t[r]=e,e}},{36:36,39:39,46:46}],94:[function(e,t,r){var n=e(106),i=e(122),o=e(121);t.exports=function(e){var t=e.$expires;return null!=t&&t!==o&&t!==i&&t<n()}},{106:106,121:121,122:122}],95:[function(e,t,r){var n=e(106),i=e(122),o=e(121);t.exports=function(e){var t=e.$expires;return null!=t&&t!==o&&(t===i||t<n())}},{106:106,121:121,122:122}],96:[function(e,t,r){var n="function";t.exports=function(e){return Boolean(e)&&typeof e===n}},{}],97:[function(e,t,r){var n=e(40);t.exports=function(e){return"$size"===e||e&&e.charAt(0)===n}},{40:40}],98:[function(e,t,r){var n=e(100);t.exports=function(e){return n(e)&&"json"in e}},{100:100}],99:[function(e,t,r){var n=Array.isArray,i=e(100);t.exports=function(e){return i(e)&&n(e.paths)&&(i(e.jsonGraph)||i(e.jsong)||i(e.json)||i(e.values)||i(e.value))}},{100:100}],100:[function(e,t,r){var n="object";t.exports=function(e){return null!==e&&typeof e===n}},{}],101:[function(e,t,r){var n=Array.isArray,i=e(100);t.exports=function(e){return i(e)&&(n(e.path)||"string"==typeof e.path)}},{100:100}],102:[function(e,t,r){var n="object";t.exports=function(e){return null==e||typeof e!==n}},{}],103:[function(e,t,r){var _=e(36),b=e(39),x=e(120),w=e(119),S=e(88),M=e(89),E=e(100),C=e(95),T=e(96),O=e(50),P=e(117),A=e(93),j=e(86),R=e(110),L=e(115),I=e(107);t.exports=function(e,t,r,n,i,o,a,s,u,c,h){var l,p,f,d,v,m,g;if(t===r){if(null===r)return t=P(r,void 0,r),e=L(e,-t.$size,u,a),t=A(t,e,n),O(u,t),t;if(void 0===r)return r;if(d=E(t),d&&(p=t.$type,null==p))return null==t[b]&&(t[_]=n,t[b]=e),t}else d=E(t),d&&(p=t.$type);if(p!==x){if(v=E(r),v&&(f=r.$type),d&&!p&&(null==r||v&&!f))return t}else{if(null==r)return C(t)?void j(t,s,u):t;if(v=E(r),v&&(f=r.$type,f===x))if(t===r){if(null!=t[b])return t}else if(m=t.$timestamp,g=r.$timestamp,!C(t)&&!C(r)&&m>g)return}if(p&&v&&!f)return A(R(t,r,e,n,u),e,n);if(f||!v){if(f===w&&T(h)&&(r=h(I(i,n),r)),f&&t===r)null==t[b]&&(t=P(t,p,t.value),e=L(e,-t.$size,u,a),t=A(t,e,n,a));else{var y=!0;!p&&d||(y=M(r)<M(t)==!1,(p||f)&&T(c)&&(y=!c(t,r,o.slice(0,o.index)))),y&&(r=P(r,f,f?r.value:r),l=S(t)-S(r),t=R(t,r,e,n,u),e=L(e,l,u,a),t=A(t,e,n,a))}C(t)?j(t,s,u):O(u,t)}else null==t&&(t=A(r,e,n));return t}},{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(e,t,r){var y=e(120),_=e(119),b=e(90),x=e(88),w=e(89),S=e(95),M=e(102),E=e(96),C=e(117),T=e(86),O=e(93),P=e(110),A=e(115),j=e(114),R=e(107);t.exports=function(e,t,r,n,i,o,a,s,u,c,h,l,p){var f=b(t,o);if(i||o)f&&S(t)&&(f="expired",T(t,c,h)),(f&&f!==y||M(t))&&(t=P(t,{},e,r,h),t=O(t,e,r,u),t=j(t,u));else{var d=n,v=b(d),m=w(d)<w(t)==!1;if((f||v)&&E(l)&&(m=!l(t,d,s.slice(0,s.index))),m){v===_&&E(p)&&(d=p(R(a,r),d)),d=C(d,v,v?d.value:d);var g=x(t)-x(d);t=P(t,d,e,r,h),e=A(e,g,h,u),t=O(t,e,r,u)}}return t}},{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(e,t,r){t.exports=function(){}},{}],106:[function(e,t,r){t.exports=Date.now},{}],107:[function(e,t,r){t.exports=function(e,t){var r=e.slice(0,e.depth);return r[r.length]=t,r}},{}],108:[function(e,t,r){var o=e(120),a=e(39),s=e(51),u=e(100),c=e(112),h=e(113);t.exports=function(e,t,r,n){if(u(e)){var i=e.$type;return Boolean(i)&&(i===o&&h(e),s(n,e)),c(e),t[r]=e[a]=void 0,!0}return!1}},{100:100,112:112,113:113,120:120,39:39,51:51}],109:[function(e,t,r){var a=e(91),s=e(40),u=e(108);t.exports=function e(t,r,n,i){if(u(t,r,n,i)){if(null==t.$type)for(var o in t)o[0]!==s&&"$"!==o[0]&&a(t,o)&&e(t[o],t,o,i);return!0}return!1}},{108:108,40:40,91:91}],110:[function(e,t,r){var o=e(100),a=e(111),s=e(109);t.exports=function(e,t,r,n,i){return e===t?e:(o(e)&&(a(e,t),s(e,r,n,i)),r[n]=t,t)}},{100:100,109:109,111:111}],111:[function(e,t,r){var a=e(43),s=e(33),u=e(44);t.exports=function(e,t){for(var r=e[u]||0,n=t[u]||0,i=-1;++i<r;){var o=e[a+i];void 0!==o&&(o[s]=t,t[a+(n+i)]=o,e[a+i]=void 0)}return t[u]=r+n,e[u]=void 0,t}},{33:33,43:43,44:44}],112:[function(e,t,r){var i=e(43),o=e(33),a=e(42),s=e(44);t.exports=function(e){for(var t=-1,r=e[s]||0;++t<r;){var n=e[i+t];null!=n&&(n[o]=n[a]=e[i+t]=void 0)}return e[s]=void 0,e}},{33:33,42:42,43:43,44:44}],113:[function(e,t,r){var i=e(43),o=e(33),a=e(42),s=e(44);t.exports=function(e){var t=e[o];if(t){for(var r=(e[a]||0)-1,n=(t[s]||0)-1;++r<=n;)t[i+r]=t[i+(r+1)];t[s]=n,e[a]=e[o]=t=void 0}return e}},{33:33,42:42,43:43,44:44}],114:[function(e,t,r){var s=e(43),u=e(39),c=e(46),h=e(44);t.exports=function(e,t){var r=[e],n=0;do{var i=r[n--];if(i&&i[c]!==t){i[c]=t,r[n++]=i[u];for(var o=-1,a=i[h]||0;++o<a;)r[n++]=i[s+o]}}while(n>-1);return e}},{39:39,43:43,44:44,46:46}],115:[function(e,t,r){var s=e(36),u=e(46),c=e(39),h=e(108),l=e(114);t.exports=function(e,t,r,n){var i=e;do{var o=i[c],a=i.$size=(i.$size||0)-t;0>=a&&null!=o?h(i,o,i[s],r):i[u]!==n&&l(i,n),i=o}while(i);return e}},{108:108,114:114,36:36,39:39,46:46}],116:[function(e,t,r){var s=Array.isArray,u=e(101),c=e(99),h=e(98),l=e(134);t.exports=function(e,t,r){for(var n=0,i=e.length;i>n;++n){var o=e[n],a=!1;if(s(o)&&t.path?a=!0:"string"==typeof o&&t.pathSyntax?a=!0:u(o)&&t.pathValue?(o.path=l.fromPath(o.path),a=!0):c(o)&&t.jsonGraph?a=!0:h(o)&&t.json?a=!0:"function"==typeof o&&n+1===i&&t.selector&&(a=!0),!a)return new Error("Unrecognized argument "+typeof o+" ["+String(o)+"] to Model#"+r)}return!0}},{101:101,134:134,98:98,99:99}],117:[function(e,t,r){var n=e(130),s=n.atom,u=e(106),c=e(122),h=e(37),l=50,p=e(85),f=Array.isArray,d=e(88),v=e(87);t.exports=function(e,t,r){var n=0,i=e,o=t;if(o?(i=p(i),n=d(i),i.$type=o):(i=s(r),o=i.$type,i[h]=!0),null==r)n=l+1;else if(null==n||0>=n)switch(typeof r){case"object":n=f(r)?l+r.length:l+1;break;case"string":n=l+r.length;break;default:n=l+1}var a=v(i);return"number"==typeof a&&c>a&&(i.$expires=u()+-1*a),i.$size=n,i}},{106:106,122:122,130:130,37:37,85:85,87:87,88:88}],118:[function(e,t,r){t.exports="atom"},{}],119:[function(e,t,r){t.exports="error"},{}],120:[function(e,t,r){t.exports="ref"},{}],121:[function(e,t,r){t.exports=1},{}],122:[function(e,t,r){t.exports=0},{}],123:[function(e,t,r){"use strict";function n(){if(u.length)throw u.shift()}function i(e){var t;t=s.length?s.pop():new o,t.task=e,a(t)}function o(){this.task=null}var a=e(124),s=[],u=[],c=a.makeRequestCallFromTimer(n);t.exports=i,o.prototype.call=function(){try{this.task.call()}catch(e){i.onerror?i.onerror(e):(u.push(e),c())}finally{this.task=null,s[s.length]=this}}},{124:124}],124:[function(e,l,t){(function(e){"use strict";function t(e){a.length||(o(),s=!0),a[a.length]=e}function r(){for(;u<a.length;){var e=u;if(u+=1,a[e].call(),u>c){for(var t=0,r=a.length-u;r>t;t++)a[t]=a[t+u];a.length-=u,u=0}}a.length=0,u=0,s=!1}function n(e){var t=1,r=new h(e),n=document.createTextNode("");return r.observe(n,{characterData:!0}),function(){t=-t,n.data=t}}function i(n){return function(){function e(){clearTimeout(t),clearInterval(r),n()}var t=setTimeout(e,0),r=setInterval(e,50)}}l.exports=t;var o,a=[],s=!1,u=0,c=1024,h=e.MutationObserver||e.WebKitMutationObserver;o="function"==typeof h?n(r):i(r),t.requestFlush=o,t.makeRequestCallFromTimer=i}).call(this,"undefined"!=typeof n?n:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],125:[function(e,t,r){"use strict";function c(e,t){var r;for(r in t)e[r]=t[r];return e}function n(e,t){if(this._jsongUrl=e,"number"==typeof t){var r={timeout:t};t=r}this._config=c({timeout:15e3,headers:{}},t||{})}var h=e(129),i=e(126);Array.isArray;n.prototype={constructor:n,buildQueryObject:i,get:function(e){var t="GET",r=this.buildQueryObject(this._jsongUrl,t,{paths:e,method:"get"}),n=c(r,this._config),i=this;return h(t,n,i)},set:function(e){var t="POST",r=this.buildQueryObject(this._jsongUrl,t,{jsonGraph:e,method:"set"}),n=c(r,this._config);n.headers["Content-Type"]="application/x-www-form-urlencoded";var i=this;return h(t,n,i)},call:function(e,t,r,n){t=t||[],r=r||[],n=n||[];var i="POST",o=[];o.push("method=call"),o.push("callPath="+encodeURIComponent(JSON.stringify(e))),o.push("arguments="+encodeURIComponent(JSON.stringify(t))),o.push("pathSuffixes="+encodeURIComponent(JSON.stringify(r))),o.push("paths="+encodeURIComponent(JSON.stringify(n)));var a=this.buildQueryObject(this._jsongUrl,i,o.join("&")),s=c(a,this._config);s.headers["Content-Type"]="application/x-www-form-urlencoded";var u=this;return h(i,s,u)}},n.XMLHttpSource=n,n["default"]=n,t.exports=n},{126:126,129:129}],126:[function(e,t,r){"use strict";t.exports=function(e,t,r){var n,i=[],o={url:e},a=-1!==e.indexOf("?"),s=a?"&":"?";return"string"==typeof r?i.push(r):(n=Object.keys(r),n.forEach(function(e){var t="object"==typeof r[e]?JSON.stringify(r[e]):r[e];i.push(e+"="+encodeURIComponent(t))})),"GET"===t?o.url+=s+i.join("&"):o.data=i.join("&"),o}},{}],127:[function(e,r,t){(function(t){"use strict";r.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 n?n:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],128:[function(e,t,r){(function(n){"use strict";t.exports=function(){var e,t,r;if(n.XMLHttpRequest)return new n.XMLHttpRequest;try{for(t=["Msxml2.XMLHTTP","Microsoft.XMLHTTP","Msxml2.XMLHTTP.4.0"],r=0;3>r;r++)try{if(e=t[r],new n.ActiveXObject(e))break}catch(e){}return new n.ActiveXObject(e)}catch(e){throw new Error("XMLHttpRequest is not supported by your browser")}}}).call(this,"undefined"!=typeof n?n:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],129:[function(e,t,r){"use strict";function n(){}function i(s,u,c){return n.create(function(t){var r,n,e,i,o,a={method:s||"GET",crossDomain:!1,async:!0,headers:{},responseType:"json"};for(o in u)d.call(u,o)&&(a[o]=u[o]);a.crossDomain||a.headers["X-Requested-With"]||(a.headers["X-Requested-With"]="XMLHttpRequest"),null!=c.onBeforeRequest&&c.onBeforeRequest(a);try{r=a.crossDomain?f():p()}catch(e){t.onError(e)}try{a.user?r.open(a.method,a.url,a.async,a.user,a.password):r.open(a.method,a.url,a.async),r.timeout=a.timeout,r.withCredentials=a.withCredentials!==!1,e=a.headers;for(i in e)d.call(e,i)&&r.setRequestHeader(i,e[i]);if(a.responseType)try{r.responseType=a.responseType}catch(e){if("json"!==a.responseType)throw e}r.onreadystatechange=function(e){4===r.readyState&&(n||(n=!0,h(t,r,e)))},r.ontimeout=function(e){n||(n=!0,l(t,r,"timeout error",e))},r.send(a.data)}catch(e){t.onError(e)}return function(){n||4===r.readyState||(n=!0,r.abort())}})}function a(e,t,r){r||(r=new Error(t)),e.onError(r)}function h(e,t,r){var n,i;if(t&&e){i=t.responseType,n="response"in t?t.response:t.responseText;var o=1223===t.status?204:t.status;if(o>=200&&399>=o){try{"json"!==i&&(n=JSON.parse(n||"")),"string"==typeof n&&(n=JSON.parse(n||""))}catch(r){a(e,"invalid json",r)}return e.onNext(n),void e.onCompleted()}return 401===o||403===o||407===o?a(e,n):410===o?a(e,n):408===o||504===o?a(e,n):a(e,n||"Response code "+o)}}function l(e,t,r,n){a(e,r||t.statusText||"request error",n)}var p=e(128),f=e(127),d=Object.prototype.hasOwnProperty,s=function(){};n.create=function(o){var e=new n;return e.subscribe=function(e,t,r){var n,i;return n="function"==typeof e?{onNext:e,onError:t||s,onCompleted:r||s}:e,i=o(n),"function"==typeof i?{dispose:i}:i},e},t.exports=i},{127:127,128:128}],130:[function(e,t,r){function n(e,t,r){var n=Object.create(null);if(null!=r){for(var i in r)n[i]=r[i];return n.$type=e,n.value=t,n}return{$type:e,value:t}}var i=e(134);t.exports={ref:function(e,t){return n("ref",i.fromPath(e),t)},atom:function(e,t){return n("atom",e,t)},undefined:function(){return n("atom")},error:function(e,t){return n("error",e,t)},pathValue:function(e,t){return{path:i.fromPath(e),value:t}},pathInvalidation:function(e){return{path:i.fromPath(e),invalidated:!0}}}},{134:134}],131:[function(e,t,r){t.exports={integers:"integers",ranges:"ranges",keys:"keys"}},{}],132:[function(e,t,r){var n={token:"token",dotSeparator:".",commaSeparator:",",openingBracket:"[",closingBracket:"]",openingBrace:"{",closingBrace:"}",escape:"\\",space:" ",colon:":",quote:"quote",unknown:"unknown"};t.exports=n},{}],133:[function(e,t,r){t.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(e,t,r){if(r)throw e+" -- "+t.parseString+" with next token: "+r;throw e+" -- "+t.parseString}}},{}],134:[function(e,t,r){var n=e(140),i=e(135),o=e(131),a=function(e,t){return i(new n(e,t))};t.exports=a,a.fromPathsOrPathValues=function(e,t){if(!e)return[];for(var r=[],n=0,i=e.length;i>n;n++)"string"==typeof e[n]?r[n]=a(e[n],t):"string"==typeof e[n].path?r[n]={path:a(e[n].path,t),value:e[n].value}:r[n]=e[n];return r},a.fromPath=function(e,t){return e?"string"==typeof e?a(e,t):e:[]},a.RoutedTokens=o},{131:131,135:135,140:140}],135:[function(e,t,r){var o=e(132),a=e(133),s=e(136);t.exports=function(e){for(var t=e.next(),r={},n=[];!t.done;){switch(t.type){case o.token:var i=+t.token[0];isNaN(i)||a.throwError(a.invalidIdentifier,e),n[n.length]=t.token;break;case o.dotSeparator:0===n.length&&a.throwError(a.unexpectedToken,e);break;case o.space:break;case o.openingBracket:s(e,t,r,n);break;default:a.throwError(a.unexpectedToken,e)}t=e.next()}return 0===n.length&&a.throwError(a.invalidPath,e),n}},{132:132,133:133,136:136}],136:[function(e,t,r){var c=e(132),h=e(133),l=h.indexer,p=e(138),f=e(137),d=e(139);t.exports=function(e,t,r,n){var i=e.next(),o=!1,a=1,s=!1;for(r.indexer=[];!i.done;){switch(i.type){case c.token:case c.quote:r.indexer.length===a&&h.throwError(l.requiresComma,e)}switch(i.type){case c.openingBrace:s=!0,d(e,i,r,n);break;case c.token:var u=+i.token;isNaN(u)&&h.throwError(l.needQuotes,e),r.indexer[r.indexer.length]=u;break;case c.dotSeparator:r.indexer.length||h.throwError(l.leadingDot,e),p(e,i,r,n);break;case c.space:break;case c.closingBracket:o=!0;break;case c.quote:f(e,i,r,n);break;case c.openingBracket:h.throwError(l.nested,e);break;case c.commaSeparator:++a;break;default:h.throwError(h.unexpectedToken,e)}if(o)break;i=e.next()}0===r.indexer.length&&h.throwError(l.empty,e),r.indexer.length>1&&s&&h.throwError(l.routedTokens,e),1===r.indexer.length&&(r.indexer=r.indexer[0]),n[n.length]=r.indexer,r.indexer=void 0}},{132:132,133:133,137:137,138:138,139:139}],137:[function(e,t,r){var c=e(132),h=e(133),l=h.quote;t.exports=function(e,t,r,n){for(var i=e.next(),o="",a=t.token,s=!1,u=!1;!i.done;){switch(i.type){case c.token:case c.space:case c.dotSeparator:case c.commaSeparator:case c.openingBracket:case c.closingBracket:case c.openingBrace:case c.closingBrace:s&&h.throwError(l.illegalEscape,e),o+=i.token;break;case c.quote:s?(o+=i.token,s=!1):i.token!==a?o+=i.token:u=!0;break;case c.escape:s=!0;break;default:h.throwError(h.unexpectedToken,e)}if(u)break;i=e.next()}0===o.length&&h.throwError(l.empty,e),r.indexer[r.indexer.length]=o}},{132:132,133:133}],138:[function(e,t,r){var l=e(140),p=e(132),f=e(133);t.exports=function(e,t,r,n){var i,o=e.peek(),a=1,s=!1,u=!0,c=r.indexer.length-1,h=l.toNumber(r.indexer[c]);for(isNaN(h)&&f.throwError(f.range.precedingNaN,e);!s&&!o.done;){switch(o.type){case p.dotSeparator:3===a&&f.throwError(f.unexpectedToken,e),++a,3===a&&(u=!1);break;case p.token:i=l.toNumber(e.next().token),isNaN(i)&&f.throwError(f.range.suceedingNaN,e),s=!0;break;default:s=!0}if(s)break;e.next(),o=e.peek()}r.indexer[c]={from:h,to:u?i:i-1}}},{132:132,133:133,140:140}],139:[function(e,t,r){var c=e(132),h=e(131),l=e(133),p=l.routed;t.exports=function(e,t,r,n){var i=e.next(),o=!1,a="";switch(i.token){case h.integers:case h.ranges:case h.keys:break;default:l.throwError(p.invalid,e)}var s=e.next();if(s.type===c.colon&&(o=!0,s=e.next(),s.type!==c.token&&l.throwError(p.invalid,e),a=s.token,s=e.next()),s.type===c.closingBrace){var u={type:i.token,named:o,name:a};r.indexer[r.indexer.length]=u}else l.throwError(p.invalid,e)}},{131:131,132:132,133:133}],140:[function(e,t,r){function c(e,t,r){return{token:e,done:r,type:t}}function n(e,t,r){var n,i=!1,o="",a=r?S:w;do{if(n=t+1>=e.length)break;var s=e[t+1];if(void 0===s||-1!==a.indexOf(s)){if(o.length)break;++t;var u;switch(s){case l:u=h.dotSeparator;break;case p:u=h.commaSeparator;break;case f:u=h.openingBracket;break;case d:u=h.closingBracket;break;case v:u=h.openingBrace;break;case m:u=h.closingBrace;break;case x:u=h.space;break;case _:case b:u=h.quote;break;case y:u=h.escape;break;case g:u=h.colon;break;default:u=h.unknown}i=c(s,u,!1);break}o+=s,++t}while(!n);return!i&&o.length&&(i=c(o,h.token,!1)),i||(i={done:!0}),{token:i,idx:t}}var h=e(132),l=".",p=",",f="[",d="]",v="{",m="}",g=":",y="\\",_='"',b="'",x=" ",w="\\'\"[]., ",S="\\{}'\"[]., :",i=t.exports=function(e,t){this._string=e,this._idx=-1,this._extended=t,this.parseString=""};i.prototype={next:function(){var e=this._nextToken?this._nextToken:n(this._string,this._idx,this._extended);return this._idx=e.idx,this._nextToken=!1,this.parseString+=e.token.token,e.token},peek:function(){var e=this._nextToken?this._nextToken:n(this._string,this._idx,this._extended);return this._nextToken=e,e.token}},i.toNumber=function(e){return isNaN(+e)?NaN:+e}},{132:132}],141:[function(e,t,r){var n=e(147),i=e(148);t.exports=function(e){var t=e.reduce(function(e,t){var r=t.length;return e[r]||(e[r]=[]),e[r].push(t),e},{});return Object.keys(t).forEach(function(e){t[e]=i(t[e])}),n(t)}},{147:147,148:148}],142:[function(e,t,r){var p=e(144);t.exports=function e(t,r,n){for(var i=t,o=!0;o&&n<r.length;++n){var a=r[n],s=typeof a;if(a&&"object"===s){var u={},c=p(a,u),h=n+1;do{var l=i[c];o=void 0!==l,o&&(o=e(l,r,h)),c=p(a,u)}while(o&&!u.done);break}i=i[a],o=void 0!==i}return o}},{144:144}],143:[function(e,t,r){t.exports={iterateKeySet:e(144),toTree:e(148),toTreeWithUnion:e(149),pathsComplementFromTree:e(146),pathsComplementFromLengthTree:e(145),hasIntersection:e(142),toPaths:e(147),collapse:e(141)}},{141:141,142:142,144:144,145:145,146:146,147:147,148:148,149:149}],144:[function(e,t,r){function s(e,t){var r=t.from=e.from||0,n=t.to=e.to||"number"==typeof e.length&&t.from+e.length-1||0;t.rangeOffset=t.from,t.loaded=!0,r>n&&(t.empty=!0)}function u(e,t){t.done=!1;var r=t.isObject=!(!e||"object"!=typeof e);t.isArray=r&&n(e),t.arrayOffset=0}var n=Array.isArray;t.exports=function(e,t){if(void 0===t.isArray&&u(e,t),t.isArray){var r;do{t.loaded&&t.rangeOffset>t.to&&(++t.arrayOffset,t.loaded=!1);var n=t.arrayOffset,i=e.length;if(n>=i){t.done=!0;break}var o=e[t.arrayOffset],a=typeof o;if("object"===a){if(t.loaded||s(o,t),t.empty)continue;r=t.rangeOffset++}else++t.arrayOffset,r=o}while(void 0===r);return r}return t.isObject?(t.loaded||s(e,t),t.rangeOffset>t.to?void(t.done=!0):t.rangeOffset++):(t.done=!0,e)}},{}],145:[function(e,t,r){var s=e(142);t.exports=function(e,t){for(var r=[],n=-1,i=0,o=e.length;o>i;++i){var a=e[i];s(t[a.length],a,0)||(r[++n]=a)}return r}},{142:142}],146:[function(e,t,r){var a=e(142);t.exports=function(e,t){for(var r=[],n=-1,i=0,o=e.length;o>i;++i)a(t,e[i],0)||(r[++n]=e[i]);return r}},{142:142}],147:[function(e,t,r){function u(e){return null!==e&&typeof e===n}function M(e,t,r){var n,i,o,a,s,u,c,h,l,p,f,d,v,m,g=C(String(t)),y=Object.create(null),_=[],b=-1,x=0,w=[],S=0;if(a=[],s=-1,r-1>t){for(u=E(e,a);++s<u;)n=a[s],i=M(e[n],t+1,r),o=i.code,y[o]?i=y[o]:(_[x++]=o,i=y[o]={keys:[],sets:i.sets}),g=C(g+n+o),T(n)&&i.keys.push(parseInt(n,10))||i.keys.push(n);for(;++b<x;)if(n=_[b],i=y[n],a=i.keys,u=a.length,u>0)for(c=i.sets,h=-1,l=c.length,v=a[0];++h<l;){for(p=c[h],f=-1,d=p.length,m=new Array(d+1),m[0]=u>1&&a||v;++f<d;)m[f+1]=p[f];w[S++]=m}}else for(u=E(e,a),u>1?w[S++]=[a]:w[S++]=a;++s<u;)g=C(g+a[s]);return{code:g,sets:w}}function c(e){for(var t=-1,r=e.length;++t<r;){var n=e[t];o(n)&&(e[t]=i(n))}return e}function i(e){for(var t=-1,r=e.length-1,n=r>0;++t<=r;){var i=e[t];if(!T(i)){n=!1;break}e[t]=parseInt(i,10)}if(n===!0){e.sort(s);var o=e[0],a=e[r];if(r>=a-o)return{from:o,to:a}}return e}function s(e,t){return e-t}function E(e,t,r){var n=0;for(var i in e)t[n++]=i;return n>1&&t.sort(r),n}function C(e){for(var t=5381,r=-1,n=e.length;++r<n;)t=(t<<5)+t+e.charCodeAt(r);return String(t)}function T(e){return!o(e)&&e-parseFloat(e)+1>=0}var o=Array.isArray,n="object";t.exports=function(e){var t,r=[],n=0;for(var i in e)if(T(i)&&u(t=e[i]))for(var o=M(t,0,parseInt(i,10)).sets,a=-1,s=o.length;++a<s;)r[n++]=c(o[a]);return r}},{}],148:[function(e,t,r){function u(e,t,r){var n,i=t[r],o={},a=r+1;n=c(i,o);do{var s=e[n];s||(a===t.length?e[n]=null:s=e[n]={}),a<t.length&&u(s,t,a),o.done||(n=c(i,o))}while(!o.done)}var c=e(144);Array.isArray;t.exports=function(e){return e.reduce(function(e,t){return u(e,t,0),e},{})}},{144:144}],149:[function(e,t,r){},{}],150:[function(e,t,r){function n(){h=!1,s.length?c=s.concat(c):l=-1,c.length&&i()}function i(){if(!h){var e=setTimeout(n);h=!0;for(var t=c.length;t;){for(s=c,c=[];++l<t;)s&&s[l].run();l=-1,t=c.length}s=null,h=!1,clearTimeout(e)}}function o(e,t){this.fun=e,this.array=t}function a(){}var s,u=t.exports={},c=[],h=!1,l=-1;u.nextTick=function(e){var t=new Array(arguments.length-1);if(arguments.length>1)for(var r=1;r<arguments.length;r++)t[r-1]=arguments[r];c.push(new o(e,t)),1!==c.length||h||setTimeout(i,0)},o.prototype.run=function(){this.fun.apply(null,this.array)},u.title="browser",u.browser=!0,u.env={},u.argv=[],u.version="",u.versions={},u.on=a,u.addListener=a,u.once=a,u.off=a,u.removeListener=a,u.removeAllListeners=a,u.emit=a,u.binding=function(e){throw new Error("process.binding is not supported")},u.cwd=function(){return"/"},u.chdir=function(e){throw new Error("process.chdir is not supported")},u.umask=function(){return 0}},{}],151:[function(e,t,r){"use strict";t.exports=e(156)},{156:156}],152:[function(e,t,r){"use strict";function a(){}function n(e){try{return e.then}catch(e){return m=e,g}}function i(e,t){try{return e(t)}catch(e){return m=e,g}}function o(e,t,r){try{e(t,r)}catch(e){return m=e,g}}function s(e){if("object"!=typeof this)throw new TypeError("Promises must be constructed via new");if("function"!=typeof e)throw new TypeError("not a function");this._37=0,this._12=null,this._59=[],e!==a&&d(e,this)}function u(n,i,o){return new n.constructor(function(e,t){var r=new s(a);r.then(e,t),c(n,new f(i,o,r))})}function c(r,n){for(;3===r._37;)r=r._12;return 0===r._37?void r._59.push(n):void v(function(){var e=1===r._37?n.onFulfilled:n.onRejected;if(null===e)return void(1===r._37?h(n.promise,r._12):l(n.promise,r._12));var t=i(e,r._12);t===g?l(n.promise,m):h(n.promise,t)})}function h(e,t){if(t===e)return l(e,new TypeError("A promise cannot be resolved with itself."));if(t&&("object"==typeof t||"function"==typeof t)){var r=n(t);if(r===g)return l(e,m);if(r===e.then&&t instanceof s)return e._37=3,e._12=t,void p(e);if("function"==typeof r)return void d(r.bind(t),e)}e._37=1,e._12=t,p(e)}function l(e,t){e._37=2,e._12=t,p(e)}function p(e){for(var t=0;t<e._59.length;t++)c(e,e._59[t]);e._59=null}function f(e,t,r){this.onFulfilled="function"==typeof e?e:null,this.onRejected="function"==typeof t?t:null,this.promise=r}function d(e,t){var r=!1,n=o(e,function(e){r||(r=!0,h(t,e))},function(e){r||(r=!0,l(t,e))});r||n!==g||(r=!0,l(t,m))}var v=e(124),m=null,g={};t.exports=s,s._99=a,s.prototype.then=function(e,t){if(this.constructor!==s)return u(this,e,t);var r=new s(a);return c(this,new f(e,t,r)),r}},{124:124}],153:[function(e,t,r){"use strict";var n=e(152);t.exports=n,n.prototype.done=function(e,t){var r=arguments.length?this.then.apply(this,arguments):this;r.then(null,function(e){setTimeout(function(){throw e},0)})}},{152:152}],154:[function(e,t,r){"use strict";function n(e){var t=new c(c._99);return t._37=1,t._12=e,t}var c=e(152);t.exports=c;var i=n(!0),o=n(!1),a=n(null),s=n(void 0),u=n(0),h=n("");c.resolve=function(e){if(e instanceof c)return e;if(null===e)return a;if(void 0===e)return s;if(e===!0)return i;if(e===!1)return o;if(0===e)return u;if(""===e)return h;if("object"==typeof e||"function"==typeof e)try{var t=e.then;if("function"==typeof t)return new c(t.bind(e))}catch(r){return new c(function(e,t){t(r)})}return n(e)},c.all=function(e){var u=Array.prototype.slice.call(e);return new c(function(i,o){function a(t,e){if(e&&("object"==typeof e||"function"==typeof e)){if(e instanceof c&&e.then===c.prototype.then){for(;3===e._37;)e=e._12;return 1===e._37?a(t,e._12):(2===e._37&&o(e._12),void e.then(function(e){a(t,e)},o))}var r=e.then;if("function"==typeof r){var n=new c(r.bind(e));return void n.then(function(e){a(t,e)},o)}}u[t]=e,0===--s&&i(u)}if(0===u.length)return i([]);for(var s=u.length,e=0;e<u.length;e++)a(e,u[e])})},c.reject=function(r){return new c(function(e,t){t(r)})},c.race=function(e){return new c(function(t,r){e.forEach(function(e){c.resolve(e).then(t,r)})})},c.prototype["catch"]=function(e){return this.then(null,e)}},{152:152}],155:[function(e,t,r){"use strict";var n=e(152);t.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(e,t,r){"use strict";t.exports=e(152),e(153),e(155),e(154),e(157)},{152:152,153:153,154:154,155:155,157:157}],157:[function(e,t,r){"use strict";var a=e(152),i=e(123);t.exports=a,a.denodeify=function(o,e){return e=e||1/0,function(){var t=this,i=Array.prototype.slice.call(arguments,0,e>0?e:0);return new a(function(r,n){i.push(function(e,t){e?n(e):r(t)});var e=o.apply(t,i);!e||"object"!=typeof e&&"function"!=typeof e||"function"!=typeof e.then||r(e)})}},a.nodeify=function(r){return function(){var e=Array.prototype.slice.call(arguments),t="function"==typeof e[e.length-1]?e.pop():null,n=this;try{return r.apply(this,arguments).nodeify(t,n)}catch(r){if(null===t||"undefined"==typeof t)return new a(function(e,t){t(r)});i(function(){t.call(n,r)})}}},a.prototype.nodeify=function(t,r){return"function"!=typeof t?this:void this.then(function(e){i(function(){t.call(r,null,e)})},function(e){i(function(){t.call(r,e)})})}},{123:123,152:152}],158:[function(s,u,c){(function(a){(function(r){var e={boolean:!1,function:!0,object:!0,number:!1,string:!1,undefined:!1},n=e[typeof window]&&window||this,t=e[typeof c]&&c&&!c.nodeType&&c,i=e[typeof u]&&u&&!u.nodeType&&u,o=(i&&i.exports===t&&t,e[typeof a]&&a);!o||o.global!==o&&o.window!==o||(n=o),"function"==typeof kr&&kr.amd?kr(["rx"],function(e,t){return r(n,t,e)}):"object"==typeof u&&u&&u.exports===t?u.exports=r(n,u.exports,s(159)):n.Rx=r(n,{},n.Rx)}).call(this,function(s,e,t,u){function r(){try{return f.apply(this,arguments)}catch(e){return N.e=e,N}}function n(e){if(!M(e))throw new TypeError("fn must be a function");return f=e,r}function i(e,s,u){return new g(function(n){var i=!1,o=null,a=[];return e.subscribe(function(e){var t,r;try{r=s(e)}catch(e){return void n.onError(e)}if(t=0,i)try{t=u(r,o)}catch(e){return void n.onError(e)}else i=!0,o=r;t>0&&(o=r,a=[]),t>=0&&a.push(e)},function(e){n.onError(e)},function(){n.onNext(a),n.onCompleted()})},e)}function o(e){if(0===e.length)throw new R;return e[0]}function a(e,n,i,o){if(0>n)throw new I;return new g(function(t){var r=n;return e.subscribe(function(e){0===r--&&(t.onNext(e),t.onCompleted())},function(e){t.onError(e)},function(){i?(t.onNext(o),t.onCompleted()):t.onError(new I)})},e)}function c(e,i,o){return new g(function(t){var r=o,n=!1;return e.subscribe(function(e){n?t.onError(new Error("Sequence contains more than one element")):(r=e,n=!0)},function(e){t.onError(e)},function(){n||i?(t.onNext(r),t.onCompleted()):t.onError(new R)})},e)}function h(e,r,n){return new g(function(t){return e.subscribe(function(e){t.onNext(e),t.onCompleted()},function(e){t.onError(e)},function(){r?(t.onNext(n),t.onCompleted()):t.onError(new R)})},e)}function l(e,i,o){return new g(function(t){var r=o,n=!1;return e.subscribe(function(e){r=e,n=!0},function(e){t.onError(e)},function(){n||i?(t.onNext(r),t.onCompleted()):t.onError(new R)})},e)}function p(i,e,t,o){var a=j(e,t,3);return new g(function(r){var n=0;return i.subscribe(function(e){var t;try{t=a(e,n,i)}catch(e){return void r.onError(e)}t?(r.onNext(o?n:e),r.onCompleted()):n++},function(e){r.onError(e)},function(){r.onNext(o?-1:u),r.onCompleted()})},i)}var f,d=t.Observable,v=d.prototype,m=t.CompositeDisposable,g=t.AnonymousObservable,y=t.Disposable.empty,_=(t.internals.isEqual,t.helpers),b=_.not,x=_.defaultComparer,w=_.identity,S=_.defaultSubComparer,M=_.isFunction,E=_.isPromise,C=_.isArrayLike,T=_.isIterable,O=t.internals.inherits,P=d.fromPromise,A=d.from,j=t.internals.bindCallback,R=t.EmptyError,L=t.ObservableBase,I=t.ArgumentOutOfRangeError,N={e:{}};v.aggregate=function(){var o,a,s=!1,e=this;return 2===arguments.length?(s=!0,a=arguments[0],o=arguments[1]):o=arguments[0],new g(function(t){var r,n,i;return e.subscribe(function(e){!i&&(i=!0);try{r?n=o(n,e):(n=s?o(a,e):e,r=!0)}catch(e){return t.onError(e)}},function(e){t.onError(e)},function(){i&&t.onNext(n),!i&&s&&t.onNext(a),!i&&!s&&t.onError(new R),t.onCompleted()})},e)};var k=function(i){function e(e,t,r,n){this.source=e,this.acc=t,this.hasSeed=r,this.seed=n,i.call(this)}function t(e,t){this.o=e,this.acc=t.acc,this.hasSeed=t.hasSeed,this.seed=t.seed,this.hasAccumulation=!1,this.result=null,this.hasValue=!1,this.isStopped=!1}return O(e,i),e.prototype.subscribeCore=function(e){return this.source.subscribe(new t(e,this))},t.prototype.onNext=function(e){this.isStopped||(!this.hasValue&&(this.hasValue=!0),this.hasAccumulation?this.result=n(this.acc)(this.result,e):(this.result=this.hasSeed?n(this.acc)(this.seed,e):e,this.hasAccumulation=!0),this.result===N&&this.o.onError(this.result.e))},t.prototype.onError=function(e){this.isStopped||(this.isStopped=!0,this.o.onError(e))},t.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())},t.prototype.dispose=function(){this.isStopped=!0},t.prototype.fail=function(e){return this.isStopped?!1:(this.isStopped=!0,this.o.onError(e),!0)},e}(L);return v.reduce=function(e){var t=!1;if(2===arguments.length){t=!0;var r=arguments[1]}return new k(this,e,t,r)},v.some=function(e,t){var r=this;return e?r.filter(e,t).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)},v.any=function(){return this.some.apply(this,arguments)},v.isEmpty=function(){return this.any().map(b)},v.every=function(t,e){return this.filter(function(e){return!t(e)},e).some().map(b)},v.all=function(){return this.every.apply(this,arguments)},v.includes=function(i,e){function o(e,t){return 0===e&&0===t||e===t||isNaN(e)&&isNaN(t)}var a=this;return new g(function(t){var r=0,n=+e||0;return Math.abs(n)===1/0&&(n=0),0>n?(t.onNext(!1),t.onCompleted(),y):a.subscribe(function(e){r++>=n&&o(e,i)&&(t.onNext(!0),t.onCompleted())},function(e){t.onError(e)},function(){t.onNext(!1),t.onCompleted()})},this)},v.contains=function(e,t){v.includes(e,t)},v.count=function(e,t){return e?this.filter(e,t).count():this.reduce(function(e){return e+1},0)},v.indexOf=function(i,e){var o=this;return new g(function(t){var r=0,n=+e||0;return Math.abs(n)===1/0&&(n=0),0>n?(t.onNext(-1),t.onCompleted(),y):o.subscribe(function(e){r>=n&&e===i&&(t.onNext(r),t.onCompleted()),r++},function(e){t.onError(e)},function(){t.onNext(-1),t.onCompleted()})},o)},v.sum=function(e,t){return e&&M(e)?this.map(e,t).sum():this.reduce(function(e,t){return e+t},0)},v.minBy=function(e,r){return r||(r=S),i(this,e,function(e,t){return-1*r(e,t)})},v.min=function(e){return this.minBy(w,e).map(function(e){return o(e)})},v.maxBy=function(e,t){return t||(t=S),i(this,e,t)},v.max=function(e){return this.maxBy(w,e).map(function(e){return o(e)})},v.average=function(e,t){return e&&M(e)?this.map(e,t).average():this.reduce(function(e,t){return{sum:e.sum+t,count:e.count+1}},{sum:0,count:0}).map(function(e){if(0===e.count)throw new R;return e.sum/e.count})},v.sequenceEqual=function(r,u){var c=this;return u||(u=x),new g(function(n){var i=!1,o=!1,a=[],s=[],e=c.subscribe(function(e){var t,r;if(s.length>0){r=s.shift();try{t=u(r,e)}catch(e){return void n.onError(e)}t||(n.onNext(!1),n.onCompleted())}else o?(n.onNext(!1),n.onCompleted()):a.push(e)},function(e){n.onError(e)},function(){i=!0,0===a.length&&(s.length>0?(n.onNext(!1),n.onCompleted()):o&&(n.onNext(!0),n.onCompleted()))});(C(r)||T(r))&&(r=A(r)),E(r)&&(r=P(r));var t=r.subscribe(function(e){var t;if(a.length>0){var r=a.shift();try{t=u(r,e)}catch(e){return void n.onError(e)}t||(n.onNext(!1),n.onCompleted())}else i?(n.onNext(!1),n.onCompleted()):s.push(e)},function(e){n.onError(e)},function(){o=!0,0===s.length&&(a.length>0?(n.onNext(!1),n.onCompleted()):i&&(n.onNext(!0),n.onCompleted()))});return new m(e,t)},c)},v.elementAt=function(e){return a(this,e,!1)},v.elementAtOrDefault=function(e,t){return a(this,e,!0,t)},v.single=function(e,t){return e&&M(e)?this.where(e,t).single():c(this,!1)},v.singleOrDefault=function(e,t,r){return e&&M(e)?this.filter(e,r).singleOrDefault(null,t):c(this,!0,t)},v.first=function(e,t){return e?this.where(e,t).first():h(this,!1)},v.firstOrDefault=function(e,t,r){return e?this.where(e).firstOrDefault(null,t):h(this,!0,t)},v.last=function(e,t){return e?this.where(e,t).last():l(this,!1)},v.lastOrDefault=function(e,t,r){return e?this.where(e,r).lastOrDefault(null,t):l(this,!0,t)},v.find=function(e,t){return p(this,e,t,!1)},v.findIndex=function(e,t){return p(this,e,t,!0)},v.toSet=function(){if("undefined"==typeof s.Set)throw new TypeError;var e=this;return new g(function(t){var r=new s.Set;return e.subscribe(function(e){r.add(e)},function(e){t.onError(e)},function(){t.onNext(r),t.onCompleted()})},e)},v.toMap=function(o,a){if("undefined"==typeof s.Map)throw new TypeError;var e=this;return new g(function(n){var i=new s.Map;return e.subscribe(function(e){var t;try{t=o(e)}catch(e){return void n.onError(e)}var r=e;if(a)try{r=a(e)}catch(e){return void n.onError(e)}i.set(t,r)},function(e){n.onError(e)},function(){n.onNext(i),n.onCompleted()})},e)},t})}).call(this,"undefined"!=typeof n?n:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{159:159}],159:[function(e,Ir,Nr){(function(Rr,Lr){(function(a){function i(e){for(var t=[],r=0,n=e.length;n>r;r++)t.push(e[r]);return t}function o(e,t){if(ie&&t.stack&&"object"==typeof e&&null!==e&&e.stack&&-1===e.stack.indexOf(se)){for(var r=[],n=t;n;n=n.source)n.stack&&r.unshift(n.stack);r.unshift(e.stack);var i=r.join("\n"+se+"\n");e.stack=u(i)}}function u(e){for(var t=e.split("\n"),r=[],n=0,i=t.length;i>n;n++){var o=t[n];c(o)||h(o)||!o||r.push(o)}return r.join("\n")}function c(e){var t=l(e);if(!t)return!1;var r=t[0],n=t[1];return r===oe&&n>=ae&&jr>=n}function h(e){return-1!==e.indexOf("(module.js:")||-1!==e.indexOf("(node.js:")}function e(){if(ie)try{throw new Error}catch(e){var t=e.stack.split("\n"),r=t[0].indexOf("@")>0?t[1]:t[2],n=l(r);if(!n)return;return oe=n[0],n[1]}}function l(e){var t=/at .+ \((.+):(\d+):(?:\d+)\)$/.exec(e);if(t)return[t[1],Number(t[2])];var r=/at ([^ ]+):(\d+):(?:\d+)$/.exec(e);if(r)return[r[1],Number(r[2])];var n=/.*@(.+):(\d+)$/.exec(e);return n?[n[1],Number(n[2])]:void 0}function r(e){var t=[];if(!Ue(e))return t;ze.nonEnumArgs&&e.length&&Ge(e)&&(e=qe.call(e));var r=ze.enumPrototypes&&"function"==typeof e,n=ze.enumErrorProps&&(e===ke||e instanceof Error);for(var i in e)r&&"prototype"==i||n&&("message"==i||"name"==i)||t.push(i);if(ze.nonEnumShadows&&e!==De){var o=e.constructor,a=-1,s=we;if(e===(o&&o.prototype))var u=e===Be?Re:e===ke?Te:Le.call(e),c=$e[u];for(;++a<s;)i=xe[a],c&&c[i]||!Ie.call(e,i)||t.push(i)}return t}function n(e,t,r){for(var n=-1,i=r(e),o=i.length;++n<o;){var a=i[n];if(t(e[a],a,e)===!1)break}return e}function v(e,t){return n(e,t,r)}function m(e){return"function"!=typeof e.toString&&"string"==typeof(e+"")}function g(n,e,i,o){if(n===e)return 0!==n||1/n==1/e;var t=typeof n,r=typeof e;if(n===n&&(null==n||null==e||"function"!=t&&"object"!=t&&"function"!=r&&"object"!=r))return!1;var a=Le.call(n),s=Le.call(e);if(a==Se&&(a=Ae),s==Se&&(s=Ae),a!=s)return!1;switch(a){case Ee:case Ce:return+n==+e;case Pe:return n!=+n?e!=+e:0==n?1/n==1/e:n==+e;case je:case Re:return n==String(e)}var u=a==Me;if(!u){if(a!=Ae||!ze.nodeClass&&(m(n)||m(e)))return!1;var c=!ze.argsObject&&Ge(n)?Object:n.constructor,h=!ze.argsObject&&Ge(e)?Object:e.constructor;if(!(c==h||Ie.call(n,"constructor")&&Ie.call(e,"constructor")||ne(c)&&c instanceof c&&ne(h)&&h instanceof h||!("constructor"in n&&"constructor"in e)))return!1}i||(i=[]),o||(o=[]);for(var l=i.length;l--;)if(i[l]==n)return o[l]==e;var p=0,f=!0;if(i.push(n),o.push(e),u){if(l=n.length,p=e.length,f=p==l)for(;p--;){var d=e[p];if(!(f=g(n[p],d,i,o)))break}}else v(e,function(e,t,r){return Ie.call(r,t)?(p++,f=Ie.call(n,t)&&g(n[t],e,i,o)):void 0}),f&&v(n,function(e,t,r){return Ie.call(r,t)?f=--p>-1:void 0});return i.pop(),o.pop(),f}function f(e,t){for(var r=new Array(e),n=0;e>n;n++)r[n]=t();return r}function t(){try{return Ve.apply(this,arguments)}catch(e){return Ke.e=e,Ke}}function p(e){if(!ne(e))throw new TypeError("fn must be a function");return Ve=e,t}function d(e){throw e}function y(e,t){this.id=e,this.value=t}function _(e,t){this.scheduler=e,this.disposable=t,this.isDisposed=!1}function b(e,t){t.isDisposed||(t.isDisposed=!0,t.disposable.dispose())}function x(e){this._s=s}function w(e){this._s=s,this._l=s.length,this._i=0}function S(e){this._a=e}function M(e){this._a=e,this._l=O(e),this._i=0}function E(e){return"number"==typeof e&&V.isFinite(e)}function C(e){var t,r=e[ve];if(!r&&"string"==typeof e)return t=new x(e),t[ve]();if(!r&&e.length!==a)return t=new S(e),t[ve]();if(!r)throw new TypeError("Object is not iterable");return e[ve]()}function T(e){var t=+e;return 0===t?t:isNaN(t)?t:0>t?-1:1}function O(e){var t=+e.length;return isNaN(t)?0:0!==t&&E(t)?(t=T(t)*Math.floor(Math.abs(t)),0>=t?0:t>Yt?Yt:t):t}function P(e,t){this.observer=e,this.parent=t}function A(e,t){return pt(e)||(e=mt),new Zt(t,e)}function j(e,t){this.observer=e,this.parent=t}function R(e,t){this.observer=e,this.parent=t}function L(t,o){return new Cr(function(n){var e=new at,i=new st;return i.setDisposable(e),e.setDisposable(t.subscribe(function(e){n.onNext(e)},function(e){try{var t=o(e)}catch(e){return n.onError(e)}re(t)&&(t=Gt(t));var r=new at;i.setDisposable(r),r.setDisposable(t.subscribe(n))},function(e){n.onCompleted(e)})),i},t)}function I(){return!1}function N(a,s){var e=this;return new Cr(function(n){var i=0,o=a.length;return e.subscribe(function(e){if(o>i){var t=a[i++],r=p(s)(e,t);if(r===Ke)return n.onError(r.e);n.onNext(r)}else n.onCompleted()},function(e){n.onError(e)},function(){n.onCompleted()})},e)}function I(){return!1}function k(){return[]}function I(){return!1}function D(){return[]}function B(e,t){this.observer=e,this.accumulator=t.accumulator,this.hasSeed=t.hasSeed,this.seed=t.seed,this.hasAccumulation=!1,this.accumulation=null,this.hasValue=!1,this.isStopped=!1}function F(n,e,t){var i=be(e,t,3);return n.map(function(e,t){var r=i(e,t,n);return re(r)&&(r=Gt(r)),(ye(r)||ge(r))&&(r=Kt(r)),r}).concatAll()}function $(e,t,r){for(var n=0,i=e.length;i>n;n++)if(r(e[n],t))return n;return-1}function z(e){this.comparer=e,this.set=[]}function U(n,e,t){var i=be(e,t,3);return n.map(function(e,t){var r=i(e,t,n);return re(r)&&(r=Gt(r)),(ye(r)||ge(r))&&(r=Kt(r)),r}).mergeAll()}var G={boolean:!1,function:!0,object:!0,number:!1,string:!1,undefined:!1},V=G[typeof window]&&window||this,H=G[typeof Nr]&&Nr&&!Nr.nodeType&&Nr,q=G[typeof Ir]&&Ir&&!Ir.nodeType&&Ir,W=q&&q.exports===H&&H,X=G[typeof Lr]&&Lr;!X||X.global!==X&&X.window!==X||(V=X);var Y={internals:{},config:{Promise:V.Promise},helpers:{}},K=Y.helpers.noop=function(){},Z=(Y.helpers.notDefined=function(e){return"undefined"==typeof e},Y.helpers.identity=function(e){return e}),J=(Y.helpers.pluck=function(t){return function(e){return e[t]}},Y.helpers.just=function(e){return function(){return e}},Y.helpers.defaultNow=Date.now),Q=Y.helpers.defaultComparer=function(e,t){return He(e,t)},ee=Y.helpers.defaultSubComparer=function(e,t){return e>t?1:t>e?-1:0},te=(Y.helpers.defaultKeySerializer=function(e){return e.toString()},Y.helpers.defaultError=function(e){throw e}),re=Y.helpers.isPromise=function(e){return!!e&&"function"!=typeof e.subscribe&&"function"==typeof e.then},ne=(Y.helpers.asArray=function(){return Array.prototype.slice.call(arguments)},Y.helpers.not=function(e){return!e},Y.helpers.isFunction=function(){var e=function(e){return"function"==typeof e||!1};return e(/x/)&&(e=function(e){return"function"==typeof e&&"[object Function]"==Le.call(e)}),e}());Y.config.longStackSupport=!1;var ie=!1;try{throw new Error}catch(e){ie=!!e.stack}var oe,ae=e(),se="From previous event:",ue=Y.EmptyError=function(){this.message="Sequence contains no elements.",Error.call(this)};ue.prototype=Error.prototype;var ce=Y.ObjectDisposedError=function(){this.message="Object has been disposed",Error.call(this)};ce.prototype=Error.prototype;var he=Y.ArgumentOutOfRangeError=function(){this.message="Argument out of range",Error.call(this)};he.prototype=Error.prototype;var le=Y.NotSupportedError=function(e){this.message=e||"This operation is not supported",Error.call(this)};le.prototype=Error.prototype;var pe=Y.NotImplementedError=function(e){this.message=e||"This operation is not implemented",Error.call(this)};pe.prototype=Error.prototype;var fe=Y.helpers.notImplemented=function(){throw new pe},de=Y.helpers.notSupported=function(){throw new le},ve="function"==typeof Symbol&&Symbol.iterator||"_es6shim_iterator_";V.Set&&"function"==typeof(new V.Set)["@@iterator"]&&(ve="@@iterator");var me=Y.doneEnumerator={done:!0,value:a},ge=Y.helpers.isIterable=function(e){return e[ve]!==a},ye=Y.helpers.isArrayLike=function(e){return e&&e.length!==a};Y.helpers.iterator=ve;var _e,be=Y.internals.bindCallback=function(n,i,e){if("undefined"==typeof i)return n;switch(e){case 0:return function(){return n.call(i)};case 1:return function(e){return n.call(i,e)};case 2:return function(e,t){return n.call(i,e,t)};case 3:return function(e,t,r){return n.call(i,e,t,r)}}return function(){return n.apply(i,arguments)}},xe=["toString","toLocaleString","valueOf","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","constructor"],we=xe.length,Se="[object Arguments]",Me="[object Array]",Ee="[object Boolean]",Ce="[object Date]",Te="[object Error]",Oe="[object Function]",Pe="[object Number]",Ae="[object Object]",je="[object RegExp]",Re="[object String]",Le=Object.prototype.toString,Ie=Object.prototype.hasOwnProperty,Ne=Le.call(arguments)==Se,ke=Error.prototype,De=Object.prototype,Be=String.prototype,Fe=De.propertyIsEnumerable;try{_e=!(Le.call(document)==Ae&&!({toString:0}+""))}catch(e){_e=!0}var $e={};$e[Me]=$e[Ce]=$e[Pe]={constructor:!0,toLocaleString:!0,toString:!0,valueOf:!0},$e[Ee]=$e[Re]={constructor:!0,toString:!0,valueOf:!0},$e[Te]=$e[Oe]=$e[je]={constructor:!0,toString:!0},$e[Ae]={constructor:!0};var ze={};!function(){var e=function(){this.x=1},t=[];e.prototype={valueOf:1,y:1};for(var r in new e)t.push(r);for(r in arguments);ze.enumErrorProps=Fe.call(ke,"message")||Fe.call(ke,"name"),ze.enumPrototypes=Fe.call(e,"prototype"),ze.nonEnumArgs=0!=r,ze.nonEnumShadows=!/valueOf/.test(t)}(1);var Ue=Y.internals.isObject=function(e){var t=typeof e;return e&&("function"==t||"object"==t)||!1},Ge=function(e){return e&&"object"==typeof e?Le.call(e)==Se:!1};Ne||(Ge=function(e){return e&&"object"==typeof e?Ie.call(e,"callee"):!1});var Ve,He=Y.internals.isEqual=function(e,t){return g(e,t,[],[])},qe=({}.hasOwnProperty,Array.prototype.slice),We=this.inherits=Y.internals.inherits=function(e,t){function r(){this.constructor=e}r.prototype=t.prototype,e.prototype=new r},Xe=Y.internals.addProperties=function(e){for(var t=[],r=1,n=arguments.length;n>r;r++)t.push(arguments[r]);for(var i=0,o=t.length;o>i;i++){var a=t[i];for(var s in a)e[s]=a[s]}},Ye=Y.internals.addRef=function(t,r){return new Cr(function(e){return new Qe(r.getDisposable(),t.subscribe(e))})},Ke={e:{}};y.prototype.compareTo=function(e){var t=this.value.compareTo(e.value);return 0===t&&(t=this.id-e.id),t};var Ze=Y.internals.PriorityQueue=function(e){this.items=new Array(e),this.length=0},Je=Ze.prototype;Je.isHigherPriority=function(e,t){return this.items[e].compareTo(this.items[t])<0},Je.percolate=function(e){if(!(e>=this.length||0>e)){var t=e-1>>1;if(!(0>t||t===e)&&this.isHigherPriority(e,t)){var r=this.items[e];this.items[e]=this.items[t],this.items[t]=r,this.percolate(t)}}},Je.heapify=function(e){if(+e||(e=0),!(e>=this.length||0>e)){var t=2*e+1,r=2*e+2,n=e;if(t<this.length&&this.isHigherPriority(t,n)&&(n=t),r<this.length&&this.isHigherPriority(r,n)&&(n=r),n!==e){var i=this.items[e];this.items[e]=this.items[n],this.items[n]=i,this.heapify(n)}}},Je.peek=function(){return this.items[0].value},Je.removeAt=function(e){this.items[e]=this.items[--this.length],this.items[this.length]=a,this.heapify()},Je.dequeue=function(){var e=this.peek();return this.removeAt(0),e},Je.enqueue=function(e){var t=this.length++;this.items[t]=new y(Ze.count++,e),this.percolate(t)},Je.remove=function(e){for(var t=0;t<this.length;t++)if(this.items[t].value===e)return this.removeAt(t),!0;return!1},Ze.count=0;var Qe=Y.CompositeDisposable=function(){var e,t,r=[];if(Array.isArray(arguments[0]))r=arguments[0],t=r.length;else for(t=arguments.length,r=new Array(t),e=0;t>e;e++)r[e]=arguments[e];for(e=0;t>e;e++)if(!it(r[e]))throw new TypeError("Not a disposable");this.disposables=r,this.isDisposed=!1,this.length=r.length},et=Qe.prototype;et.add=function(e){this.isDisposed?e.dispose():(this.disposables.push(e),this.length++)},et.remove=function(e){var t=!1;if(!this.isDisposed){var r=this.disposables.indexOf(e);-1!==r&&(t=!0,this.disposables.splice(r,1),this.length--,e.dispose())}return t},et.dispose=function(){if(!this.isDisposed){this.isDisposed=!0;for(var e=this.disposables.length,t=new Array(e),r=0;e>r;r++)t[r]=this.disposables[r];for(this.disposables=[],this.length=0,r=0;e>r;r++)t[r].dispose()}};var tt=Y.Disposable=function(e){this.isDisposed=!1,this.action=e||K};tt.prototype.dispose=function(){this.isDisposed||(this.action(),this.isDisposed=!0)};var rt=tt.create=function(e){return new tt(e)},nt=tt.empty={dispose:K},it=tt.isDisposable=function(e){return e&&ne(e.dispose)},ot=tt.checkDisposed=function(e){if(e.isDisposed)throw new ce},at=Y.SingleAssignmentDisposable=function(){this.isDisposed=!1,this.current=null};at.prototype.getDisposable=function(){return this.current},at.prototype.setDisposable=function(e){if(this.current)throw new Error("Disposable has already been assigned");var t=this.isDisposed;!t&&(this.current=e),t&&e&&e.dispose()},at.prototype.dispose=function(){if(!this.isDisposed){this.isDisposed=!0;var e=this.current;this.current=null}e&&e.dispose()};var st=Y.SerialDisposable=function(){this.isDisposed=!1,this.current=null};st.prototype.getDisposable=function(){return this.current},st.prototype.setDisposable=function(e){var t=this.isDisposed;if(!t){var r=this.current;this.current=e}r&&r.dispose(),t&&e&&e.dispose()},st.prototype.dispose=function(){if(!this.isDisposed){this.isDisposed=!0;var e=this.current;this.current=null}e&&e.dispose()};var ut=Y.RefCountDisposable=function(){function e(e){this.disposable=e,this.disposable.count++,this.isInnerDisposed=!1}function t(e){this.underlyingDisposable=e,this.isDisposed=!1,this.isPrimaryDisposed=!1,this.count=0}return e.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()))},t.prototype.dispose=function(){this.isDisposed||this.isPrimaryDisposed||(this.isPrimaryDisposed=!0,0===this.count&&(this.isDisposed=!0,this.underlyingDisposable.dispose()))},t.prototype.getDisposable=function(){return this.isDisposed?nt:new e(this)},t}();_.prototype.dispose=function(){this.scheduler.scheduleWithState(this,b)};var ct=Y.internals.ScheduledItem=function(e,t,r,n,i){this.scheduler=e,this.state=t,this.action=r,this.dueTime=n,this.comparer=i||ee,this.disposable=new at};ct.prototype.invoke=function(){this.disposable.setDisposable(this.invokeCore())},ct.prototype.compareTo=function(e){return this.comparer(this.dueTime,e.dueTime)},ct.prototype.isCancelled=function(){return this.disposable.isDisposed},ct.prototype.invokeCore=function(){return this.action(this.scheduler,this.state)};var ht=Y.Scheduler=function(){function t(e,t,r,n){this.now=e,this._schedule=t,this._scheduleRelative=r,this._scheduleAbsolute=n}function r(e,t){return t(),nt}t.isScheduler=function(e){return e instanceof t};var e=t.prototype;return e.schedule=function(e){return this._schedule(e,r)},e.scheduleWithState=function(e,t){return this._schedule(e,t)},e.scheduleWithRelative=function(e,t){return this._scheduleRelative(t,e,r)},e.scheduleWithRelativeAndState=function(e,t,r){return this._scheduleRelative(e,t,r)},e.scheduleWithAbsolute=function(e,t){return this._scheduleAbsolute(t,e,r)},e.scheduleWithAbsoluteAndState=function(e,t,r){return this._scheduleAbsolute(e,t,r)},t.now=J,t.normalize=function(e){return 0>e&&(e=0),e},t}(),lt=ht.normalize,pt=ht.isScheduler;!function(e){function r(t,e){function o(e){n(e,function(e){var r=!1,n=!1,i=t.scheduleWithState(e,function(e,t){return r?a.remove(i):n=!0,o(t),nt});n||(a.add(i),r=!0)})}var r=e[0],n=e[1],a=new Qe;return o(r),a}function n(o,e,a){function s(e){r(e,function(e,t){var r=!1,n=!1,i=o[a](e,t,function(e,t){return r?u.remove(i):n=!0,s(t),nt});n||(u.add(i),r=!0)})}var t=e[0],r=e[1],u=new Qe;return s(t),u}function i(t,r){t(function(e){r(t,e)})}e.scheduleRecursive=function(e){return this.scheduleRecursiveWithState(e,i)},e.scheduleRecursiveWithState=function(e,t){return this.scheduleWithState([e,t],r)},e.scheduleRecursiveWithRelative=function(e,t){return this.scheduleRecursiveWithRelativeAndState(t,e,i)},e.scheduleRecursiveWithRelativeAndState=function(e,t,r){return this._scheduleRelative([e,r],t,function(e,t){return n(e,t,"scheduleWithRelativeAndState")})},e.scheduleRecursiveWithAbsolute=function(e,t){return this.scheduleRecursiveWithAbsoluteAndState(t,e,i)},e.scheduleRecursiveWithAbsoluteAndState=function(e,t,r){return this._scheduleAbsolute([e,r],t,function(e,t){return n(e,t,"scheduleWithAbsoluteAndState")})}}(ht.prototype),function(e){ht.prototype.schedulePeriodic=function(e,t){return this.schedulePeriodicWithState(null,e,t)},ht.prototype.schedulePeriodicWithState=function(e,t,r){if("undefined"==typeof V.setInterval)throw new le;t=lt(t);var n=e,i=V.setInterval(function(){n=r(n)},t);return rt(function(){V.clearInterval(i)})}}(ht.prototype),function(e){e.catchError=e["catch"]=function(e){return new bt(this,e)}}(ht.prototype);var ft,dt,vt=(Y.internals.SchedulePeriodicRecursive=function(){function t(e,t){t(0,this._period);try{this._state=this._action(this._state)}catch(e){throw this._cancel.dispose(),e}}function e(e,t,r,n){this._scheduler=e,this._state=t,this._period=r,this._action=n}return e.prototype.start=function(){var e=new at;return this._cancel=e,e.setDisposable(this._scheduler.scheduleRecursiveWithRelativeAndState(0,this._period,t.bind(this))),e},e}(),ht.immediate=function(){function e(e,t){return t(this,e)}return new ht(J,e,de,de)}()),mt=ht.currentThread=function(){function i(){for(;o.length>0;){var e=o.dequeue();!e.isCancelled()&&e.invoke()}}function e(e,t){var r=new ct(this,e,t,this.now());if(o)o.enqueue(r);else{o=new Ze(4),o.enqueue(r);var n=p(i)();if(o=null,n===Ke)return d(n.e)}return r.disposable}var o,t=new ht(J,e,de,de);return t.scheduleRequired=function(){return!o},t}(),gt=function(){var e,t=K;if(V.setTimeout)e=V.setTimeout,t=V.clearTimeout;else{if(!V.WScript)throw new le;e=function(e,t){V.WScript.Sleep(t),e()}}return{setTimeout:e,clearTimeout:t}}(),yt=gt.setTimeout,_t=gt.clearTimeout;!function(){function n(e){if(a)yt(function(){n(e)},0);else{var t=o[e];if(t){a=!0;var r=p(t)();if(dt(e),a=!1,r===Ke)return d(r.e)}}}function e(){if(!V.postMessage||V.importScripts)return!1;var e=!1,t=V.onmessage;return V.onmessage=function(){e=!0},V.postMessage("","*"),V.onmessage=t,e}function t(e){"string"==typeof e.data&&e.data.substring(0,u.length)===u&&n(e.data.substring(u.length))}var i=1,o={},a=!1;dt=function(e){delete o[e]};var r=RegExp("^"+String(Le).replace(/[.*+?^${}()|[\]\\]/g,"\\$&").replace(/toString| for [^\]]+/g,".*?")+"$"),s="function"==typeof(s=X&&W&&X.setImmediate)&&!r.test(s)&&s;if(ne(s))ft=function(e){var t=i++;return o[t]=e,s(function(){n(t)}),t};else if("undefined"!=typeof Rr&&"[object process]"==={}.toString.call(Rr))ft=function(e){var t=i++;return o[t]=e,Rr.nextTick(function(){n(t)}),t};else if(e()){var u="ms.rx.schedule"+Math.random();V.addEventListener?V.addEventListener("message",t,!1):V.attachEvent?V.attachEvent("onmessage",t):V.onmessage=t,ft=function(e){var t=i++;return o[t]=e,V.postMessage(u+currentId,"*"),t}}else if(V.MessageChannel){var c=new V.MessageChannel;c.port1.onmessage=function(e){n(e.data)},ft=function(e){var t=i++;return o[t]=e,c.port2.postMessage(t),t}}else ft="document"in V&&"onreadystatechange"in V.document.createElement("script")?function(e){var t=V.document.createElement("script"),r=i++;return o[r]=e,t.onreadystatechange=function(){n(r),t.onreadystatechange=null,t.parentNode.removeChild(t),t=null},V.document.documentElement.appendChild(t),r}:function(e){var t=i++;return o[t]=e,yt(function(){n(t)},0),t}}();var bt=(ht.timeout=ht["default"]=function(){function e(e,t){var r=this,n=new at,i=ft(function(){!n.isDisposed&&n.setDisposable(t(r,e))});return new Qe(n,rt(function(){dt(i)}))}function t(e,t,r){var n=this,i=ht.normalize(t),o=new at;if(0===i)return n.scheduleWithState(e,r);var a=yt(function(){!o.isDisposed&&o.setDisposable(r(n,e))},i);return new Qe(o,rt(function(){_t(a)}))}function r(e,t,r){return this.scheduleWithRelativeAndState(e,t-this.now(),r)}return new ht(J,e,t,r)}(),function(r){function n(e,t){return this._scheduler.scheduleWithState(e,this._wrap(t))}function i(e,t,r){return this._scheduler.scheduleWithRelativeAndState(e,t,this._wrap(r))}function o(e,t,r){return this._scheduler.scheduleWithAbsoluteAndState(e,t,this._wrap(r))}function t(e,t){this._scheduler=e,this._handler=t,this._recursiveOriginal=null,this._recursiveWrapper=null,r.call(this,this._scheduler.now.bind(this._scheduler),n,i,o)}return We(t,r),t.prototype._clone=function(e){return new t(e,this._handler)},t.prototype._wrap=function(r){var n=this;return function(e,t){try{return r(n._getRecursiveWrapper(e),t)}catch(e){if(!n._handler(e))throw e;return nt}}},t.prototype._getRecursiveWrapper=function(e){if(this._recursiveOriginal!==e){this._recursiveOriginal=e;var t=this._clone(e);t._recursiveOriginal=e,t._recursiveWrapper=t,this._recursiveWrapper=t}return this._recursiveWrapper},t.prototype.schedulePeriodicWithState=function(e,t,r){var n=this,i=!1,o=new at;return o.setDisposable(this._scheduler.schedulePeriodicWithState(e,t,function(e){if(i)return null;try{return r(e)}catch(e){if(i=!0,!n._handler(e))throw e;return o.dispose(),null}})),o},t}(ht)),xt=Y.Notification=function(){function e(e,t,r,n,i,o){this.kind=e,this.value=t,this.exception=r,this._accept=n,this._acceptObservable=i,this.toString=o}return e.prototype.accept=function(e,t,r){return e&&"object"==typeof e?this._acceptObservable(e):this._accept(e,t,r)},e.prototype.toObservable=function(e){var t=this;return pt(e)||(e=vt),new Cr(function(r){return e.scheduleWithState(t,function(e,t){t._acceptObservable(r),"N"===t.kind&&r.onCompleted()})})},e}(),wt=xt.createOnNext=function(){function t(e){return e(this.value)}function r(e){return e.onNext(this.value)}function n(){return"OnNext("+this.value+")"}return function(e){return new xt("N",e,null,t,r,n)}}(),St=xt.createOnError=function(){function t(e,t){return t(this.exception)}function r(e){return e.onError(this.exception)}function n(){return"OnError("+this.exception+")"}return function(e){return new xt("E",null,e,t,r,n)}}(),Mt=xt.createOnCompleted=function(){function e(e,t,r){return r()}function t(e){return e.onCompleted()}function r(){return"OnCompleted()"}return function(){return new xt("C",null,null,e,t,r)}}(),Et=Y.Observer=function(){};Et.prototype.toNotifier=function(){var t=this;return function(e){return e.accept(t)}},Et.prototype.asObserver=function(){return new Pt(this.onNext.bind(this),this.onError.bind(this),this.onCompleted.bind(this))},Et.prototype.checked=function(){return new At(this)};var Ct=Et.create=function(e,t,r){return e||(e=K),t||(t=te),r||(r=K),new Pt(e,t,r)};Et.fromNotifier=function(t,r){return new Pt(function(e){return t.call(r,wt(e))},function(e){return t.call(r,St(e))},function(){return t.call(r,Mt())})},Et.prototype.notifyOn=function(e){return new Rt(e,this)},Et.prototype.makeSafe=function(e){return new AnonymousSafeObserver(this._onNext,this._onError,this._onCompleted,e)};var Tt,Ot=Y.internals.AbstractObserver=function(e){function t(){this.isStopped=!1,e.call(this)}return We(t,e),t.prototype.next=fe,t.prototype.error=fe,t.prototype.completed=fe,t.prototype.onNext=function(e){this.isStopped||this.next(e)},t.prototype.onError=function(e){this.isStopped||(this.isStopped=!0,this.error(e))},t.prototype.onCompleted=function(){this.isStopped||(this.isStopped=!0,this.completed())},t.prototype.dispose=function(){this.isStopped=!0},t.prototype.fail=function(e){return this.isStopped?!1:(this.isStopped=!0,this.error(e),!0)},t}(Et),Pt=Y.AnonymousObserver=function(n){function e(e,t,r){n.call(this),this._onNext=e,this._onError=t,this._onCompleted=r}return We(e,n),e.prototype.next=function(e){this._onNext(e)},e.prototype.error=function(e){this._onError(e)},e.prototype.completed=function(){this._onCompleted()},e}(Ot),At=function(t){function e(e){t.call(this),this._observer=e,this._state=0}We(e,t);var r=e.prototype;return r.onNext=function(e){this.checkAccess();var t=p(this._observer.onNext).call(this._observer,e);this._state=0,t===Ke&&d(t.e)},r.onError=function(e){this.checkAccess();var t=p(this._observer.onError).call(this._observer,e);this._state=2,t===Ke&&d(t.e)},r.onCompleted=function(){this.checkAccess();var e=p(this._observer.onCompleted).call(this._observer);this._state=2,e===Ke&&d(e.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}(Et),jt=Y.internals.ScheduledObserver=function(r){function e(e,t){r.call(this),this.scheduler=e,this.observer=t,this.isAcquired=!1,this.hasFaulted=!1,this.queue=[],this.disposable=new st}return We(e,r),e.prototype.next=function(e){var t=this;this.queue.push(function(){t.observer.onNext(e)})},e.prototype.error=function(e){var t=this;this.queue.push(function(){t.observer.onError(e)})},e.prototype.completed=function(){var e=this;this.queue.push(function(){e.observer.onCompleted()})},e.prototype.ensureActive=function(){var e=!1,r=this;!this.hasFaulted&&this.queue.length>0&&(e=!this.isAcquired,this.isAcquired=!0),e&&this.disposable.setDisposable(this.scheduler.scheduleRecursive(function(e){var t;if(!(r.queue.length>0))return void(r.isAcquired=!1);t=r.queue.shift();try{t()}catch(e){throw r.queue=[],r.hasFaulted=!0,e}e()}))},e.prototype.dispose=function(){r.prototype.dispose.call(this),this.disposable.dispose()},e}(Ot),Rt=function(n){function e(e,t,r){n.call(this,e,t),this._cancel=r}return We(e,n),e.prototype.next=function(e){n.prototype.next.call(this,e),this.ensureActive()},e.prototype.error=function(e){n.prototype.error.call(this,e),this.ensureActive()},e.prototype.completed=function(){n.prototype.completed.call(this),this.ensureActive()},e.prototype.dispose=function(){n.prototype.dispose.call(this),this._cancel&&this._cancel.dispose(),this._cancel=null},e}(jt),Lt=Y.Observable=function(){function e(r){if(Y.config.longStackSupport&&ie){try{throw new Error}catch(e){this.stack=e.stack.substring(e.stack.indexOf("\n")+1)}var n=this;this._subscribe=function(e){var t=e.onError.bind(e);return e.onError=function(e){o(e,n),t(e)},r.call(n,e)}}else this._subscribe=r}return Tt=e.prototype,Tt.subscribe=Tt.forEach=function(e,t,r){return this._subscribe("object"==typeof e?e:Ct(e,t,r))},Tt.subscribeOnNext=function(t,r){return this._subscribe(Ct("undefined"!=typeof r?function(e){t.call(r,e)}:t))},Tt.subscribeOnError=function(t,r){return this._subscribe(Ct(null,"undefined"!=typeof r?function(e){t.call(r,e)}:t))},Tt.subscribeOnCompleted=function(e,t){return this._subscribe(Ct(null,null,"undefined"!=typeof t?function(){e.call(t)}:e))},e}(),It=Y.ObservableBase=function(e){function o(e){return e&&ne(e.dispose)?e:ne(e)?rt(e):nt}function n(e,t){var r=t[0],n=t[1],i=p(n.subscribeCore).call(n,r);return i!==Ke||r.fail(Ke.e)?void r.setDisposable(o(i)):d(Ke.e)}function t(e){var t=new Tr(e),r=[t,this];return mt.scheduleRequired()?mt.scheduleWithState(r,n):n(null,r),t}function r(){e.call(this,t)}return We(r,e),r.prototype.subscribeCore=fe,r}(Lt),Nt=Y.internals.Enumerable=function(){},kt=function(t){function e(e){this.sources=e,t.call(this)}function u(e,t,r){this.o=e,this.s=t,this.e=r,this.isStopped=!1}return We(e,t),e.prototype.subscribeCore=function(o){var a,s=new st,e=vt.scheduleRecursiveWithState(this.sources[ve](),function(e,t){if(!a){var r=p(e.next).call(e);if(r===Ke)return o.onError(r.e);if(r.done)return o.onCompleted();var n=r.value;re(n)&&(n=Gt(n));var i=new at;s.setDisposable(i),i.setDisposable(n.subscribe(new u(o,t,e)))}});return new Qe(s,e,rt(function(){a=!0}))},u.prototype.onNext=function(e){this.isStopped||this.o.onNext(e)},u.prototype.onError=function(e){this.isStopped||(this.isStopped=!0,this.o.onError(e))},u.prototype.onCompleted=function(){this.isStopped||(this.isStopped=!0,this.s(this.e))},u.prototype.dispose=function(){this.isStopped=!0},u.prototype.fail=function(e){return this.isStopped?!1:(this.isStopped=!0,this.o.onError(e),!0)},e}(It);Nt.prototype.concat=function(){return new kt(this)};var Dt=function(t){function e(e){this.sources=e,t.call(this)}return We(e,t),e.prototype.subscribeCore=function(o){var a,s=this.sources[ve](),u=new st,e=vt.scheduleRecursiveWithState(null,function(e,t){if(!a){var r=p(s.next).call(s);if(r===Ke)return o.onError(r.e);if(r.done)return null!==e?o.onError(e):o.onCompleted();var n=r.value;re(n)&&(n=Gt(n));var i=new at;u.setDisposable(i),i.setDisposable(n.subscribe(function(e){o.onNext(e)},t,function(){o.onCompleted()}))}});return new Qe(u,e,rt(function(){a=!0}))},e}(It);Nt.prototype.catchError=function(){return new Dt(this)},Nt.prototype.catchErrorWhen=function(n){var i=this;return new Cr(function(o){var a,s,u=new Pr,c=new Pr,e=n(u),t=e.subscribe(c),h=i[ve](),l=new st,r=vt.scheduleRecursive(function(t){if(!a){var e=p(h.next).call(h);if(e===Ke)return o.onError(e.e);if(e.done)return void(s?o.onError(s):o.onCompleted());var r=e.value;re(r)&&(r=Gt(r));var n=new at,i=new at;l.setDisposable(new Qe(i,n)),n.setDisposable(r.subscribe(function(e){o.onNext(e)},function(e){i.setDisposable(c.subscribe(t,function(e){o.onError(e)},function(){o.onCompleted()})),u.onNext(e)},function(){o.onCompleted()}))}});return new Qe(t,l,r,rt(function(){a=!0}))})};var Bt=function(e){function t(e,t){this.v=e,this.c=null==t?-1:t}function r(e){this.v=e.v,this.l=e.c}return We(t,e),t.prototype[ve]=function(){return new r(this)},r.prototype.next=function(){return 0===this.l?me:(this.l>0&&this.l--,{done:!1,value:this.v})},t}(Nt),Ft=Nt.repeat=function(e,t){return new Bt(e,t)},$t=function(e){function t(e,t,r){this.s=e,this.fn=t?be(t,r,3):null}function r(e){this.i=-1,this.s=e.s,this.l=this.s.length,this.fn=e.fn}return We(t,e),t.prototype[ve]=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]}:me},t}(Nt),zt=Nt.of=function(e,t,r){return new $t(e,t,r)};Tt.observeOn=function(t){var r=this;return new Cr(function(e){return r.subscribe(new Rt(t,e))},r)},Tt.subscribeOn=function(n){var i=this;return new Cr(function(e){var t=new at,r=new st;return r.setDisposable(t),t.setDisposable(n.schedule(function(){r.setDisposable(new _(n,i.subscribe(e)))})),r},i)};var Ut=function(t){function e(e){this.p=e,t.call(this)}return We(e,t),e.prototype.subscribeCore=function(t){return this.p.then(function(e){t.onNext(e),t.onCompleted()},function(e){t.onError(e)}),nt},e}(It),Gt=Lt.fromPromise=function(e){return new Ut(e)};Tt.toPromise=function(e){if(e||(e=Y.config.Promise),!e)throw new le("Promise type not provided nor in Rx.config.Promise");var i=this;return new e(function(e,t){var r,n=!1;i.subscribe(function(e){r=e,n=!0},t,function(){n&&e(r)})})};var Vt=function(t){function e(e){this.source=e,t.call(this)}function r(e){this.o=e,this.a=[],this.isStopped=!1}return We(e,t),e.prototype.subscribeCore=function(e){return this.source.subscribe(new r(e))},r.prototype.onNext=function(e){this.isStopped||this.a.push(e)},r.prototype.onError=function(e){this.isStopped||(this.isStopped=!0,this.o.onError(e))},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(e){return this.isStopped?!1:(this.isStopped=!0,this.o.onError(e),!0)},e}(It);Tt.toArray=function(){return new Vt(this)},Lt.create=Lt.createWithDisposable=function(e,t){return new Cr(e,t)};var Ht=(Lt.defer=function(r){return new Cr(function(t){var e;try{e=r()}catch(e){return sr(e).subscribe(t)}return re(e)&&(e=Gt(e)),e.subscribe(t)})},function(t){function e(e){this.scheduler=e,t.call(this)}function r(e,t){this.observer=e,this.parent=t}function n(e,t){t.onCompleted()}return We(e,t),e.prototype.subscribeCore=function(e){var t=new r(e,this);return t.run()},r.prototype.run=function(){return this.parent.scheduler.scheduleWithState(this.observer,n)},e}(It)),qt=Lt.empty=function(e){return pt(e)||(e=vt),new Ht(e)},Wt=function(n){function e(e,t,r){this.iterable=e,this.mapper=t,this.scheduler=r,n.call(this)}return We(e,n),e.prototype.subscribeCore=function(e){var t=new Xt(e,this);return t.run()},e}(It),Xt=function(){function e(e,t){this.observer=e,this.parent=t}return e.prototype.run=function(){function e(e,t){try{var r=i.next()}catch(e){return o.onError(e)}if(r.done)return o.onCompleted();var n=r.value;if(a)try{n=a(n,e)}catch(e){return o.onError(e)}o.onNext(n),t(e+1)}var t=Object(this.parent.iterable),i=C(t),o=this.observer,a=this.parent.mapper;return this.parent.scheduler.scheduleRecursiveWithState(0,e)},e}(),Yt=Math.pow(2,53)-1;x.prototype[ve]=function(){return new w(this._s)},w.prototype[ve]=function(){return this},w.prototype.next=function(){return this._i<this._l?{done:!1,value:this._s.charAt(this._i++)}:me},S.prototype[ve]=function(){return new M(this._a)},M.prototype[ve]=function(){return this},M.prototype.next=function(){return this._i<this._l?{done:!1,value:this._a[this._i++]}:me};var Kt=Lt.from=function(e,t,r,n){if(null==e)throw new Error("iterable cannot be null.");if(t&&!ne(t))throw new Error("mapFn when provided must be a function");if(t)var i=be(t,r,2);return pt(n)||(n=mt),new Wt(e,i,n)},Zt=function(r){function e(e,t){this.args=e,this.scheduler=t,r.call(this)}return We(e,r),e.prototype.subscribeCore=function(e){var t=new P(e,this);return t.run()},e}(It);P.prototype.run=function(){function e(e,t){i>e?(r.onNext(n[e]),t(e+1)):r.onCompleted()}var r=this.observer,n=this.parent.args,i=n.length;return this.parent.scheduler.scheduleRecursiveWithState(0,e)};var Jt=Lt.fromArray=function(e,t){return pt(t)||(t=mt),new Zt(e,t)};Lt.generate=function(e,a,s,u,t){return pt(t)||(t=mt),new Cr(function(i){var o=!0;return t.scheduleRecursiveWithState(e,function(e,t){var r,n;try{o?o=!1:e=s(e),r=a(e),r&&(n=u(e))}catch(e){return i.onError(e)}r?(i.onNext(n),t(e)):i.onCompleted()})})};var Qt=function(e){function t(){e.call(this)}return We(t,e),t.prototype.subscribeCore=function(e){return nt},t}(It),er=Lt.never=function(){return new Qt};Lt.of=function(){for(var e=arguments.length,t=new Array(e),r=0;e>r;r++)t[r]=arguments[r];return new Zt(t,mt)},Lt.ofWithScheduler=function(e){for(var t=arguments.length,r=new Array(t-1),n=1;t>n;n++)r[n-1]=arguments[n];return new Zt(r,e)};var tr=function(r){function e(e,t){this.obj=e,this.keys=Object.keys(e),this.scheduler=t,r.call(this)}return We(e,r),e.prototype.subscribeCore=function(e){var t=new j(e,this);return t.run()},e}(It);j.prototype.run=function(){function e(e,t){if(a>e){var r=o[e];n.onNext([r,i[r]]),t(e+1)}else n.onCompleted()}var n=this.observer,i=this.parent.obj,o=this.parent.keys,a=o.length;return this.parent.scheduler.scheduleRecursiveWithState(0,e)},Lt.pairs=function(e,t){return t||(t=mt),new tr(e,t)};var rr=function(n){function e(e,t,r){this.start=e,this.rangeCount=t,this.scheduler=r,n.call(this)}return We(e,n),e.prototype.subscribeCore=function(e){var t=new nr(e,this);return t.run()},e}(It),nr=function(){function e(e,t){this.observer=e,this.parent=t}return e.prototype.run=function(){function e(e,t){n>e?(i.onNext(r+e),t(e+1)):i.onCompleted()}var r=this.parent.start,n=this.parent.rangeCount,i=this.observer;return this.parent.scheduler.scheduleRecursiveWithState(0,e)},e}();Lt.range=function(e,t,r){return pt(r)||(r=mt),new rr(e,t,r)};var ir=function(n){function e(e,t,r){this.value=e,this.repeatCount=null==t?-1:t,this.scheduler=r,n.call(this)}return We(e,n),e.prototype.subscribeCore=function(e){var t=new R(e,this);return t.run()},e}(It);R.prototype.run=function(){function e(e,t){return(-1===e||e>0)&&(r.onNext(n),e>0&&e--),0===e?r.onCompleted():void t(e)}var r=this.observer,n=this.parent.value;return this.parent.scheduler.scheduleRecursiveWithState(this.parent.repeatCount,e)},Lt.repeat=function(e,t,r){return pt(r)||(r=mt),new ir(e,t,r)};var or=function(r){function e(e,t){this.value=e,this.scheduler=t,r.call(this)}function n(e,t){this.observer=e,this.parent=t}function t(e,t){var r=t[0],n=t[1];n.onNext(r),n.onCompleted()}return We(e,r),e.prototype.subscribeCore=function(e){var t=new n(e,this);return t.run()},n.prototype.run=function(){return this.parent.scheduler.scheduleWithState([this.parent.value,this.observer],t)},e}(It),ar=(Lt["return"]=Lt.just=Lt.returnValue=function(e,t){return pt(t)||(t=vt),new or(e,t)},function(r){function e(e,t){this.error=e,this.scheduler=t,r.call(this)}function n(e,t){this.o=e,this.p=t}function t(e,t){var r=t[0],n=t[1];n.onError(r)}return We(e,r),e.prototype.subscribeCore=function(e){var t=new n(e,this);return t.run()},n.prototype.run=function(){return this.p.scheduler.scheduleWithState([this.p.error,this.o],t)},e}(It)),sr=Lt["throw"]=Lt.throwError=Lt.throwException=function(e,t){return pt(t)||(t=vt),new ar(e,t)};Lt.using=function(i,o){return new Cr(function(t){var e,r,n=nt;try{e=i(),e&&(n=e),r=o(e)}catch(e){return new Qe(sr(e).subscribe(t),n)}return new Qe(r.subscribe(t),n)})},Tt.amb=function(u){var c=this;return new Cr(function(t){function r(){i||(i=o,s.dispose())}function n(){i||(i=a,e.dispose())}var i,o="L",a="R",e=new at,s=new at;return re(u)&&(u=Gt(u)),e.setDisposable(c.subscribe(function(e){r(),i===o&&t.onNext(e)},function(e){r(),i===o&&t.onError(e)},function(){r(),i===o&&t.onCompleted()})),s.setDisposable(u.subscribe(function(e){n(),i===a&&t.onNext(e)},function(e){n(),i===a&&t.onError(e)},function(){n(),i===a&&t.onCompleted()})),new Qe(e,s)})},Lt.amb=function(){function e(e,t){return e.amb(t)}var t=er(),r=[];if(Array.isArray(arguments[0]))r=arguments[0];else for(var n=0,i=arguments.length;i>n;n++)r.push(arguments[n]);for(var n=0,i=r.length;i>n;n++)t=e(t,r[n]);return t},Tt["catch"]=Tt.catchError=Tt.catchException=function(e){return"function"==typeof e?L(this,e):ur([this,e])};var ur=Lt.catchError=Lt["catch"]=Lt.catchException=function(){var e=[];if(Array.isArray(arguments[0]))e=arguments[0];else for(var t=0,r=arguments.length;r>t;t++)e.push(arguments[t]);return zt(e).catchError()};Tt.combineLatest=function(){for(var e=arguments.length,t=new Array(e),r=0;e>r;r++)t[r]=arguments[r];return Array.isArray(t[0])?t[0].unshift(this):t.unshift(this),cr.apply(this,t)};var cr=Lt.combineLatest=function(){for(var e=arguments.length,l=new Array(e),t=0;e>t;t++)l[t]=arguments[t];var p=l.pop();return Array.isArray(l[0])&&(l=l[0]),new Cr(function(n){function i(r){if(a[r]=!0,s||(s=a.every(Z))){try{var e=p.apply(null,c)}catch(e){return n.onError(e)}n.onNext(e)}else u.filter(function(e,t){return t!==r}).every(Z)&&n.onCompleted()}function o(e){u[e]=!0,u.every(Z)&&n.onCompleted()}for(var e=l.length,t=function(){return!1},a=f(e,t),s=!1,u=f(e,t),c=new Array(e),h=new Array(e),r=0;e>r;r++)!function(t){var e=l[t],r=new at;re(e)&&(e=Gt(e)),r.setDisposable(e.subscribe(function(e){c[t]=e,i(t)},function(e){n.onError(e)},function(){o(t)})),h[t]=r}(r);return new Qe(h)},this)};Tt.concat=function(){for(var e=[],t=0,r=arguments.length;r>t;t++)e.push(arguments[t]);return e.unshift(this),lr.apply(null,e)};var hr=function(t){function e(e){this.sources=e,t.call(this)}function r(e,t){this.sources=e,this.o=t}return We(e,t),e.prototype.subscribeCore=function(e){var t=new r(this.sources,e);return t.run()},r.prototype.run=function(){var i,o=new st,a=this.sources,s=a.length,u=this.o,e=vt.scheduleRecursiveWithState(0,function(e,t){if(!i){if(e===s)return u.onCompleted();var r=a[e];re(r)&&(r=Gt(r));var n=new at;o.setDisposable(n),n.setDisposable(r.subscribe(function(e){u.onNext(e)},function(e){u.onError(e)},function(){t(e+1)}))}});return new Qe(o,e,rt(function(){i=!0}))},e}(It),lr=Lt.concat=function(){var e;if(Array.isArray(arguments[0]))e=arguments[0];else{e=new Array(arguments.length);for(var t=0,r=arguments.length;r>t;t++)e[t]=arguments[t]}return new hr(e)};Tt.concatAll=Tt.concatObservable=function(){return this.merge(1)};var pr=function(r){function e(e,t){this.source=e,this.maxConcurrent=t,r.call(this)}return We(e,r),e.prototype.subscribeCore=function(e){var t=new Qe;return t.add(this.source.subscribe(new fr(e,this.maxConcurrent,t))),t},e}(It),fr=function(){function e(e,t,r){this.o=e,this.max=t,this.g=r,this.done=!1,this.q=[],this.activeCount=0,this.isStopped=!1}function r(e,t){this.parent=e,this.sad=t,this.isStopped=!1}return e.prototype.handleSubscribe=function(e){var t=new at;this.g.add(t),re(e)&&(e=Gt(e)),t.setDisposable(e.subscribe(new r(this,t)))},e.prototype.onNext=function(e){this.isStopped||(this.activeCount<this.max?(this.activeCount++,this.handleSubscribe(e)):this.q.push(e))},e.prototype.onError=function(e){this.isStopped||(this.isStopped=!0,this.o.onError(e))},e.prototype.onCompleted=function(){this.isStopped||(this.isStopped=!0,this.done=!0,0===this.activeCount&&this.o.onCompleted())},e.prototype.dispose=function(){this.isStopped=!0},e.prototype.fail=function(e){return this.isStopped?!1:(this.isStopped=!0,this.o.onError(e),!0)},r.prototype.onNext=function(e){this.isStopped||this.parent.o.onNext(e)},r.prototype.onError=function(e){this.isStopped||(this.isStopped=!0,this.parent.o.onError(e))},r.prototype.onCompleted=function(){if(!this.isStopped){this.isStopped=!0;var e=this.parent;e.g.remove(this.sad),e.q.length>0?e.handleSubscribe(e.q.shift()):(e.activeCount--,e.done&&0===e.activeCount&&e.o.onCompleted())}},r.prototype.dispose=function(){this.isStopped=!0},r.prototype.fail=function(e){return this.isStopped?!1:(this.isStopped=!0,this.parent.o.onError(e),!0)},e}();Tt.merge=function(e){return"number"!=typeof e?dr(this,e):new pr(this,e)};var dr=Lt.merge=function(){var e,t,r=[],n=arguments.length;if(arguments[0])if(pt(arguments[0]))for(e=arguments[0],t=1;n>t;t++)r.push(arguments[t]);else for(e=vt,t=0;n>t;t++)r.push(arguments[t]);else for(e=vt,t=1;n>t;t++)r.push(arguments[t]);return Array.isArray(r[0])&&(r=r[0]),A(e,r).mergeAll()},vr=Y.CompositeError=function(e){this.name="NotImplementedError",this.innerErrors=e,this.message="This contains multiple errors. Check the innerErrors",Error.call(this)};vr.prototype=Error.prototype,Lt.mergeDelayError=function(){var e;if(Array.isArray(arguments[0]))e=arguments[0];else{var t=arguments.length;e=new Array(t);for(var r=0;t>r;r++)e[r]=arguments[r]}var s=A(null,e);return new Cr(function(r){function n(){0===a.length?r.onCompleted():1===a.length?r.onError(a[0]):r.onError(new vr(a))}var i=new Qe,e=new at,o=!1,a=[];return i.add(e),e.setDisposable(s.subscribe(function(e){var t=new at;i.add(t),re(e)&&(e=Gt(e)),t.setDisposable(e.subscribe(function(e){r.onNext(e)},function(e){a.push(e),i.remove(t),o&&1===i.length&&n()},function(){i.remove(t),o&&1===i.length&&n()}))},function(e){a.push(e),o=!0,1===i.length&&n()},function(){o=!0,1===i.length&&n()})),i})};var mr=function(t){function e(e){this.source=e,t.call(this)}function n(e,t){this.o=e,this.g=t,this.isStopped=!1,this.done=!1}function r(e,t,r){this.parent=e,this.g=t,this.sad=r,this.isStopped=!1}return We(e,t),e.prototype.subscribeCore=function(e){var t=new Qe,r=new at;return t.add(r),r.setDisposable(this.source.subscribe(new n(e,t))),t},n.prototype.onNext=function(e){if(!this.isStopped){var t=new at;this.g.add(t),re(e)&&(e=Gt(e)),t.setDisposable(e.subscribe(new r(this,this.g,t)))}},n.prototype.onError=function(e){this.isStopped||(this.isStopped=!0,this.o.onError(e))},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(e){return this.isStopped?!1:(this.isStopped=!0,this.o.onError(e),!0)},r.prototype.onNext=function(e){this.isStopped||this.parent.o.onNext(e)},r.prototype.onError=function(e){this.isStopped||(this.isStopped=!0,this.parent.o.onError(e))},r.prototype.onCompleted=function(){if(!this.isStopped){var e=this.parent;this.isStopped=!0,e.g.remove(this.sad),e.done&&1===e.g.length&&e.o.onCompleted()}},r.prototype.dispose=function(){this.isStopped=!0},r.prototype.fail=function(e){return this.isStopped?!1:(this.isStopped=!0,this.parent.o.onError(e),!0)},e}(It);Tt.mergeAll=Tt.mergeObservable=function(){return new mr(this)},Tt.onErrorResumeNext=function(e){if(!e)throw new Error("Second observable is required");return gr([this,e])};var gr=Lt.onErrorResumeNext=function(){var a=[];if(Array.isArray(arguments[0]))a=arguments[0];else for(var e=0,t=arguments.length;t>e;e++)a.push(arguments[e]);return new Cr(function(n){var i=0,o=new st,e=vt.scheduleRecursive(function(e){var t,r;i<a.length?(t=a[i++],re(t)&&(t=Gt(t)),r=new at,o.setDisposable(r),r.setDisposable(t.subscribe(n.onNext.bind(n),e,e))):n.onCompleted()});return new Qe(o,e)})};Tt.skipUntil=function(i){var o=this;return new Cr(function(t){var r=!1,e=new Qe(o.subscribe(function(e){r&&t.onNext(e)},function(e){t.onError(e)},function(){r&&t.onCompleted()}));re(i)&&(i=Gt(i));var n=new at;return e.add(n),n.setDisposable(i.subscribe(function(){r=!0,n.dispose()},function(e){t.onError(e)},function(){n.dispose()})),e},o)};var yr=function(t){function e(e){this.source=e,t.call(this)}function n(e,t){this.o=e,this.inner=t,this.stopped=!1,this.latest=0,this.hasLatest=!1,this.isStopped=!1}function i(e,t){this.parent=e,this.id=t,this.isStopped=!1}return We(e,t),e.prototype.subscribeCore=function(e){var t=new st,r=this.source.subscribe(new n(e,t));return new Qe(r,t)},n.prototype.onNext=function(e){if(!this.isStopped){var t=new at,r=++this.latest;this.hasLatest=!0,this.inner.setDisposable(t),re(e)&&(e=Gt(e)),t.setDisposable(e.subscribe(new i(this,r)))}},n.prototype.onError=function(e){this.isStopped||(this.isStopped=!0,this.o.onError(e))},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(e){return this.isStopped?!1:(this.isStopped=!0,this.o.onError(e),!0)},i.prototype.onNext=function(e){this.isStopped||this.parent.latest===this.id&&this.parent.o.onNext(e)},i.prototype.onError=function(e){this.isStopped||(this.isStopped=!0,this.parent.latest===this.id&&this.parent.o.onError(e))},i.prototype.onCompleted=function(){this.isStopped||(this.isStopped=!0,this.parent.latest===this.id&&(this.parent.hasLatest=!1,this.parent.isStopped&&this.parent.o.onCompleted()))},i.prototype.dispose=function(){this.isStopped=!0},i.prototype.fail=function(e){return this.isStopped?!1:(this.isStopped=!0,this.parent.o.onError(e),!0)},e}(It);Tt["switch"]=Tt.switchLatest=function(){return new yr(this)};var _r=function(r){function e(e,t){this.source=e,this.other=re(t)?Gt(t):t,r.call(this)}function t(e){this.o=e,this.isStopped=!1}return We(e,r),e.prototype.subscribeCore=function(e){return new Qe(this.source.subscribe(e),this.other.subscribe(new t(e)))},t.prototype.onNext=function(e){this.isStopped||this.o.onCompleted()},t.prototype.onError=function(e){this.isStopped||(this.isStopped=!0,this.o.onError(e))},t.prototype.onCompleted=function(){!this.isStopped&&(this.isStopped=!0)},t.prototype.dispose=function(){this.isStopped=!0},t.prototype.fail=function(e){return this.isStopped?!1:(this.isStopped=!0,this.o.onError(e),!0)},e}(It);Tt.takeUntil=function(e){return new _r(this,e)},Tt.withLatestFrom=function(){for(var e=arguments.length,u=new Array(e),t=0;e>t;t++)u[t]=arguments[t];var c=u.pop(),h=this;return Array.isArray(u[0])&&(u=u[0]),new Cr(function(n){for(var e=u.length,i=f(e,I),o=!1,a=new Array(e),s=new Array(e+1),t=0;e>t;t++)!function(t){var e=u[t],r=new at;re(e)&&(e=Gt(e)),r.setDisposable(e.subscribe(function(e){a[t]=e,i[t]=!0,o=i.every(Z)},function(e){n.onError(e)},K)),s[t]=r}(t);var r=new at;return r.setDisposable(h.subscribe(function(e){var t=[e].concat(a);if(o){var r=p(c).apply(null,t);return r===Ke?n.onError(r.e):void n.onNext(r)}},function(e){n.onError(e)},function(){n.onCompleted()})),s[e]=r,new Qe(s)},this)},Tt.zip=function(){if(Array.isArray(arguments[0]))return N.apply(this,arguments);for(var e=arguments.length,s=new Array(e),t=0;e>t;t++)s[t]=arguments[t];var u=this,c=s.pop();return s.unshift(u),new Cr(function(i){for(var e=s.length,o=f(e,k),a=f(e,I),r=new Array(e),t=0;e>t;t++)!function(n){var e=s[n],t=new at;re(e)&&(e=Gt(e)),t.setDisposable(e.subscribe(function(e){if(o[n].push(e),o.every(function(e){return e.length>0})){var t=o.map(function(e){return e.shift()}),r=p(c).apply(u,t);if(r===Ke)return i.onError(r.e);i.onNext(r)}else a.filter(function(e,t){return t!==n}).every(Z)&&i.onCompleted()},function(e){i.onError(e)},function(){a[n]=!0,a.every(Z)&&i.onCompleted()})),r[n]=t}(t);return new Qe(r)},u)},Lt.zip=function(){for(var e=arguments.length,t=new Array(e),r=0;e>r;r++)t[r]=arguments[r];var n=t.shift();return n.zip.apply(n,t)},Lt.zipArray=function(){var a;if(Array.isArray(arguments[0]))a=arguments[0];else{var e=arguments.length;a=new Array(e);for(var t=0;e>t;t++)a[t]=arguments[t]}return new Cr(function(n){for(var e=a.length,i=f(e,D),o=f(e,I),t=new Array(e),r=0;e>r;r++)!function(r){t[r]=new at,t[r].setDisposable(a[r].subscribe(function(e){if(i[r].push(e),i.every(function(e){return e.length>0})){var t=i.map(function(e){return e.shift()});n.onNext(t)}else if(o.filter(function(e,t){return t!==r}).every(Z))return n.onCompleted()},function(e){n.onError(e)},function(){o[r]=!0,o.every(Z)&&n.onCompleted()}))}(r);return new Qe(t)})},Tt.asObservable=function(){var t=this;return new Cr(function(e){return t.subscribe(e)},t)},Tt.bufferWithCount=function(e,t){return"number"!=typeof t&&(t=e),this.windowWithCount(e,t).selectMany(function(e){return e.toArray()}).where(function(e){return e.length>0})},Tt.dematerialize=function(){var e=this;return new Cr(function(t){return e.subscribe(function(e){return e.accept(t)},function(e){t.onError(e)},function(){t.onCompleted()})},this)},Tt.distinctUntilChanged=function(a,s){var e=this;return s||(s=Q),new Cr(function(n){var i,o=!1;return e.subscribe(function(e){var t=e;if(a&&(t=p(a)(e),t===Ke))return n.onError(t.e);if(o){var r=p(s)(i,t);if(r===Ke)return n.onError(r.e)}o&&r||(o=!0,i=t,n.onNext(e))},function(e){n.onError(e)},function(){n.onCompleted()})},this)};var br=function(i){function e(e,t,r,n){this.source=e,this.t=!t||ne(t)?Ct(t||K,r||K,n||K):t,i.call(this)}function t(e,t){this.o=e,this.t=t,this.isStopped=!1}return We(e,i),e.prototype.subscribeCore=function(e){return this.source.subscribe(new t(e,this.t))},t.prototype.onNext=function(e){if(!this.isStopped){var t=p(this.t.onNext).call(this.t,e);t===Ke&&this.o.onError(t.e),this.o.onNext(e)}},t.prototype.onError=function(e){if(!this.isStopped){this.isStopped=!0;var t=p(this.t.onError).call(this.t,e);if(t===Ke)return this.o.onError(t.e);this.o.onError(e)}},t.prototype.onCompleted=function(){if(!this.isStopped){this.isStopped=!0;var e=p(this.t.onCompleted).call(this.t);if(e===Ke)return this.o.onError(e.e);this.o.onCompleted()}},t.prototype.dispose=function(){this.isStopped=!0},t.prototype.fail=function(e){return this.isStopped?!1:(this.isStopped=!0,this.o.onError(e),!0)},e}(It);Tt["do"]=Tt.tap=Tt.doAction=function(e,t,r){return new br(this,e,t,r)},Tt.doOnNext=Tt.tapOnNext=function(t,r){return this.tap("undefined"!=typeof r?function(e){t.call(r,e)}:t)},Tt.doOnError=Tt.tapOnError=function(t,r){return this.tap(K,"undefined"!=typeof r?function(e){t.call(r,e)}:t)},Tt.doOnCompleted=Tt.tapOnCompleted=function(e,t){return this.tap(K,null,"undefined"!=typeof t?function(){e.call(t)}:e)},Tt["finally"]=Tt.ensure=function(r){var n=this;return new Cr(function(e){var t;try{t=n.subscribe(e)}catch(e){throw r(),e}return rt(function(){try{t.dispose()}catch(e){throw e}finally{r()}})},this)},Tt.finallyAction=function(e){return this.ensure(e)};var xr=function(t){function e(e){this.source=e,t.call(this)}function r(e){this.o=e,this.isStopped=!1}return We(e,t),e.prototype.subscribeCore=function(e){return this.source.subscribe(new r(e))},r.prototype.onNext=K,r.prototype.onError=function(e){this.isStopped||(this.isStopped=!0,this.o.onError(e))},r.prototype.onCompleted=function(){this.isStopped||(this.isStopped=!0,this.o.onCompleted())},r.prototype.dispose=function(){this.isStopped=!0},r.prototype.fail=function(e){return this.isStopped?!1:(this.isStopped=!0,this.observer.onError(e),!0)},e}(It);Tt.ignoreElements=function(){return new xr(this)},Tt.materialize=function(){var e=this;return new Cr(function(t){return e.subscribe(function(e){t.onNext(wt(e))},function(e){t.onNext(St(e)),t.onCompleted()},function(){t.onNext(Mt()),t.onCompleted()})},e)},Tt.repeat=function(e){return Ft(this,e).concat()},Tt.retry=function(e){return Ft(this,e).catchError()},Tt.retryWhen=function(e){return Ft(this).catchErrorWhen(e)};var wr=function(i){function e(e,t,r,n){this.source=e,this.accumulator=t,this.hasSeed=r,this.seed=n,i.call(this)}return We(e,i),e.prototype.subscribeCore=function(e){return this.source.subscribe(new B(e,this))},e}(It);B.prototype.onNext=function(e){if(!this.isStopped){!this.hasValue&&(this.hasValue=!0);try{this.hasAccumulation?this.accumulation=this.accumulator(this.accumulation,e):(this.accumulation=this.hasSeed?this.accumulator(this.seed,e):e,this.hasAccumulation=!0)}catch(e){return this.observer.onError(e)}this.observer.onNext(this.accumulation)}},B.prototype.onError=function(e){this.isStopped||(this.isStopped=!0,this.observer.onError(e))},B.prototype.onCompleted=function(){this.isStopped||(this.isStopped=!0,!this.hasValue&&this.hasSeed&&this.observer.onNext(this.seed),this.observer.onCompleted())},B.prototype.dispose=function(){this.isStopped=!0},B.prototype.fail=function(e){return this.isStopped?!1:(this.isStopped=!0,this.observer.onError(e),!0)},Tt.scan=function(){var e,t,r=!1;return 2===arguments.length?(r=!0,e=arguments[0],t=arguments[1]):t=arguments[0],new wr(this,t,r,e)},Tt.skipLast=function(n){if(0>n)throw new he;var e=this;return new Cr(function(t){var r=[];return e.subscribe(function(e){r.push(e),r.length>n&&t.onNext(r.shift())},function(e){t.onError(e)},function(){t.onCompleted()})},e)},Tt.startWith=function(){var e,t=0;arguments.length&&pt(arguments[0])?(e=arguments[0],t=1):e=vt;for(var r=[],n=t,i=arguments.length;i>n;n++)r.push(arguments[n]);return zt([Jt(r,e),this]).concat()},Tt.takeLast=function(n){if(0>n)throw new he;var e=this;return new Cr(function(t){var r=[];return e.subscribe(function(e){r.push(e),r.length>n&&r.shift()},function(e){t.onError(e)},function(){for(;r.length>0;)t.onNext(r.shift());t.onCompleted()})},e)},Tt.takeLastBuffer=function(n){var e=this;return new Cr(function(t){var r=[];return e.subscribe(function(e){r.push(e),r.length>n&&r.shift()},function(e){t.onError(e)},function(){t.onNext(r),t.onCompleted()})},e)},Tt.windowWithCount=function(s,u){var n=this;if(+s||(s=0),Math.abs(s)===1/0&&(s=0),0>=s)throw new he;if(null==u&&(u=s),+u||(u=0),Math.abs(u)===1/0&&(u=0),0>=u)throw new he;return new Cr(function(t){function i(){var e=new Pr;a.push(e),t.onNext(Ye(e,r))}var e=new at,r=new ut(e),o=0,a=[];return i(),e.setDisposable(n.subscribe(function(e){for(var t=0,r=a.length;r>t;t++)a[t].onNext(e);var n=o-s+1;n>=0&&n%u===0&&a.shift().onCompleted(),++o%u===0&&i()},function(e){for(;a.length>0;)a.shift().onError(e);t.onError(e)},function(){for(;a.length>0;)a.shift().onCompleted();t.onCompleted()})),r},n)},Tt.selectConcat=Tt.concatMap=function(t,i,e){return ne(t)&&ne(i)?this.concatMap(function(r,n){var e=t(r,n);return re(e)&&(e=Gt(e)),(ye(e)||ge(e))&&(e=Kt(e)),e.map(function(e,t){return i(r,e,n,t)})}):ne(t)?F(this,t,e):F(this,function(){return t})},Tt.concatMapObserver=Tt.selectConcatObserver=function(e,t,r,n){var i=this,o=be(e,n,2),a=be(t,n,1),s=be(r,n,0);return new Cr(function(r){var n=0;return i.subscribe(function(e){var t;try{t=o(e,n++)}catch(e){return void r.onError(e)}re(t)&&(t=Gt(t)),r.onNext(t)},function(e){var t;try{t=a(e)}catch(e){return void r.onError(e)}re(t)&&(t=Gt(t)),r.onNext(t),r.onCompleted()},function(){var e;try{e=s()}catch(e){return void r.onError(e)}re(e)&&(e=Gt(e)),r.onNext(e),r.onCompleted()})},this).concatAll()},Tt.defaultIfEmpty=function(e){var n=this;return e===a&&(e=null),new Cr(function(t){var r=!1;return n.subscribe(function(e){r=!0,t.onNext(e)},function(e){t.onError(e)},function(){!r&&t.onNext(e),t.onCompleted()})},n)},z.prototype.push=function(e){var t=-1===$(this.set,e,this.comparer);return t&&this.set.push(e),t},Tt.distinct=function(i,e){var t=this;return e||(e=Q),new Cr(function(r){var n=new z(e);return t.subscribe(function(e){var t=e;if(i)try{t=i(e)}catch(e){return void r.onError(e)}n.push(t)&&r.onNext(e)},function(e){r.onError(e)},function(){r.onCompleted()})},this)};var Sr=function(n){function r(e,t,r){this.source=e,this.selector=be(t,r,3),n.call(this)}function i(n,i){return function(e,t,r){return n.call(this,i.selector(e,t,r),t,r)}}function t(e,t,r){this.o=e,this.selector=t,this.source=r,this.i=0,this.isStopped=!1}return We(r,n),r.prototype.internalMap=function(e,t){return new r(this.source,i(e,this),t)},r.prototype.subscribeCore=function(e){return this.source.subscribe(new t(e,this.selector,this))},t.prototype.onNext=function(e){if(!this.isStopped){var t=p(this.selector)(e,this.i++,this.source);return t===Ke?this.o.onError(t.e):void this.o.onNext(t)}},t.prototype.onError=function(e){this.isStopped||(this.isStopped=!0,this.o.onError(e))},t.prototype.onCompleted=function(){this.isStopped||(this.isStopped=!0,this.o.onCompleted())},t.prototype.dispose=function(){this.isStopped=!0},t.prototype.fail=function(e){return this.isStopped?!1:(this.isStopped=!0,this.o.onError(e),!0)},r}(It);Tt.map=Tt.select=function(e,t){var r="function"==typeof e?e:function(){return e};return this instanceof Sr?this.internalMap(r,t):new Sr(this,r,t)},Tt.pluck=function(){var i=arguments,o=arguments.length;if(0===o)throw new Error("List of properties cannot be empty.");return this.map(function(e){for(var t=e,r=0;o>r;r++){var n=t[i[r]];if("undefined"==typeof n)return a;t=n}return t})},Tt.flatMapObserver=Tt.selectManyObserver=function(i,o,t,a){var e=this;return new Cr(function(r){var n=0;return e.subscribe(function(e){var t;try{t=i.call(a,e,n++)}catch(e){return void r.onError(e)}re(t)&&(t=Gt(t)),r.onNext(t)},function(e){var t;try{t=o.call(a,e)}catch(e){return void r.onError(e)}re(t)&&(t=Gt(t)),r.onNext(t),r.onCompleted()},function(){var e;try{e=t.call(a)}catch(e){return void r.onError(e)}re(e)&&(e=Gt(e)),r.onNext(e),r.onCompleted()})},e).mergeAll()},Tt.selectMany=Tt.flatMap=function(t,i,e){return ne(t)&&ne(i)?this.flatMap(function(r,n){var e=t(r,n);return re(e)&&(e=Gt(e)),(ye(e)||ge(e))&&(e=Kt(e)),e.map(function(e,t){return i(r,e,n,t)})},e):ne(t)?U(this,t,e):U(this,function(){return t})},Tt.selectSwitch=Tt.flatMapLatest=Tt.switchMap=function(e,t){return this.select(e,t).switchLatest()};var Mr=function(r){function e(e,t){this.source=e,this.skipCount=t,r.call(this)}function t(e,t){this.c=t,this.r=t,this.o=e,this.isStopped=!1}return We(e,r),e.prototype.subscribeCore=function(e){return this.source.subscribe(new t(e,this.skipCount))},t.prototype.onNext=function(e){this.isStopped||(this.r<=0?this.o.onNext(e):this.r--)},t.prototype.onError=function(e){this.isStopped||(this.isStopped=!0,this.o.onError(e))},t.prototype.onCompleted=function(){this.isStopped||(this.isStopped=!0,this.o.onCompleted())},t.prototype.dispose=function(){this.isStopped=!0},t.prototype.fail=function(e){return this.isStopped?!1:(this.isStopped=!0,this.o.onError(e),!0)},e}(It);Tt.skip=function(e){if(0>e)throw new he;return new Mr(this,e)},Tt.skipWhile=function(e,t){var i=this,o=be(e,t,3);return new Cr(function(t){var r=0,n=!1;return i.subscribe(function(e){if(!n)try{n=!o(e,r++,i)}catch(e){return void t.onError(e)}n&&t.onNext(e)},function(e){t.onError(e)},function(){t.onCompleted()})},i)},Tt.take=function(e,t){if(0>e)throw new he;if(0===e)return qt(t);var n=this;return new Cr(function(t){var r=e;return n.subscribe(function(e){r-- >0&&(t.onNext(e),0>=r&&t.onCompleted())},function(e){t.onError(e)},function(){t.onCompleted()})},n)},Tt.takeWhile=function(e,t){var i=this,o=be(e,t,3);return new Cr(function(t){var r=0,n=!0;return i.subscribe(function(e){if(n){try{n=o(e,r++,i)}catch(e){return void t.onError(e)}n?t.onNext(e):t.onCompleted()}},function(e){t.onError(e)},function(){t.onCompleted()})},i)};var Er=function(n){function r(e,t,r){this.source=e,this.predicate=be(t,r,3),n.call(this)}function i(n,i){return function(e,t,r){return i.predicate(e,t,r)&&n.call(this,e,t,r)}}function t(e,t,r){this.o=e,this.predicate=t,this.source=r,this.i=0,this.isStopped=!1}return We(r,n),r.prototype.subscribeCore=function(e){return this.source.subscribe(new t(e,this.predicate,this))},r.prototype.internalFilter=function(e,t){return new r(this.source,i(e,this),t)},t.prototype.onNext=function(e){if(!this.isStopped){var t=p(this.predicate)(e,this.i++,this.source);return t===Ke?this.o.onError(t.e):void(t&&this.o.onNext(e))}},t.prototype.onError=function(e){this.isStopped||(this.isStopped=!0,this.o.onError(e))},t.prototype.onCompleted=function(){this.isStopped||(this.isStopped=!0,this.o.onCompleted())},t.prototype.dispose=function(){this.isStopped=!0},t.prototype.fail=function(e){return this.isStopped?!1:(this.isStopped=!0,this.o.onError(e),!0)},r}(It);Tt.filter=Tt.where=function(e,t){return this instanceof Er?this.internalFilter(e,t):new Er(this,e,t)},Tt.transduce=function(e){function n(e){return{"@@transducer/init":function(){return e},"@@transducer/step":function(e,t){return e.onNext(t)},"@@transducer/result":function(e){return e.onCompleted()}}}var i=this;return new Cr(function(t){var r=e(n(t));return i.subscribe(function(e){try{r["@@transducer/step"](t,e)}catch(e){t.onError(e)}},function(e){t.onError(e)},function(){r["@@transducer/result"](t)})},i)};var Cr=Y.AnonymousObservable=function(r){function o(e){return e&&ne(e.dispose)?e:ne(e)?rt(e):nt}function i(e,t){var r=t[0],n=t[1],i=p(n)(r);return i!==Ke||r.fail(Ke.e)?void r.setDisposable(o(i)):d(Ke.e)}function e(n,e){function t(e){var t=new Tr(e),r=[t,n];return mt.scheduleRequired()?mt.scheduleWithState(r,i):i(null,r),t}this.source=e,r.call(this,t)}return We(e,r),e}(Lt),Tr=function(t){function e(e){t.call(this),this.observer=e,this.m=new at}We(e,t);var r=e.prototype;return r.next=function(e){var t=p(this.observer.onNext).call(this.observer,e);t===Ke&&(this.dispose(),d(t.e))},r.error=function(e){var t=p(this.observer.onError).call(this.observer,e);this.dispose(),t===Ke&&d(t.e)},r.completed=function(){var e=p(this.observer.onCompleted).call(this.observer);this.dispose(),e===Ke&&d(e.e)},r.setDisposable=function(e){this.m.setDisposable(e)},r.getDisposable=function(){return this.m.getDisposable()},r.dispose=function(){t.prototype.dispose.call(this),this.m.dispose()},e}(Ot),Or=function(e,t){this.subject=e,this.observer=t};Or.prototype.dispose=function(){if(!this.subject.isDisposed&&null!==this.observer){var e=this.subject.observers.indexOf(this.observer);this.subject.observers.splice(e,1),this.observer=null}};var Pr=Y.Subject=function(e){function t(e){return ot(this),this.isStopped?this.hasError?(e.onError(this.error),nt):(e.onCompleted(),nt):(this.observers.push(e),new Or(this,e))}function r(){e.call(this,t),this.isDisposed=!1,this.isStopped=!1,this.observers=[],this.hasError=!1}return We(r,e),Xe(r.prototype,Et.prototype,{hasObservers:function(){return this.observers.length>0},onCompleted:function(){if(ot(this),!this.isStopped){this.isStopped=!0;for(var e=0,t=i(this.observers),r=t.length;r>e;e++)t[e].onCompleted();this.observers.length=0}},onError:function(e){if(ot(this),!this.isStopped){this.isStopped=!0,this.error=e,this.hasError=!0;for(var t=0,r=i(this.observers),n=r.length;n>t;t++)r[t].onError(e);this.observers.length=0}},onNext:function(e){if(ot(this),!this.isStopped)for(var t=0,r=i(this.observers),n=r.length;n>t;t++)r[t].onNext(e)},dispose:function(){this.isDisposed=!0,this.observers=null}}),r.create=function(e,t){return new Ar(e,t)},r}(Lt),Ar=(Y.AsyncSubject=function(e){function t(e){return ot(this),this.isStopped?(this.hasError?e.onError(this.error):this.hasValue?(e.onNext(this.value),e.onCompleted()):e.onCompleted(),nt):(this.observers.push(e),new Or(this,e))}function r(){e.call(this,t),this.isDisposed=!1,this.isStopped=!1,this.hasValue=!1,this.observers=[],this.hasError=!1}return We(r,e),Xe(r.prototype,Et,{hasObservers:function(){return ot(this),this.observers.length>0},onCompleted:function(){var e,t;if(ot(this),!this.isStopped){this.isStopped=!0;var r=i(this.observers),t=r.length;if(this.hasValue)for(e=0;t>e;e++){var n=r[e];n.onNext(this.value),n.onCompleted()}else for(e=0;t>e;e++)r[e].onCompleted();this.observers.length=0}},onError:function(e){if(ot(this),!this.isStopped){this.isStopped=!0,this.hasError=!0,this.error=e;for(var t=0,r=i(this.observers),n=r.length;n>t;t++)r[t].onError(e);this.observers.length=0}},onNext:function(e){ot(this),this.isStopped||(this.value=e,this.hasValue=!0)},dispose:function(){this.isDisposed=!0,this.observers=null,this.exception=null,this.value=null}}),r}(Lt),Y.AnonymousSubject=function(r){function n(e){return this.observable.subscribe(e)}function e(e,t){this.observer=e,this.observable=t,r.call(this,n)}return We(e,r),Xe(e.prototype,Et.prototype,{onCompleted:function(){this.observer.onCompleted()},onError:function(e){this.observer.onError(e)},onNext:function(e){this.observer.onNext(e)}}),e}(Lt));"function"==typeof kr&&"object"==typeof kr.amd&&kr.amd?(V.Rx=Y,kr(function(){return Y})):H&&q?W?(q.exports=Y).Rx=Y:H.Rx=Y:V.Rx=Y;var jr=e()}).call(this)}).call(this,e(150),"undefined"!=typeof n?n:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{150:150}]},{},[1])(1)})}).call(this,typeof global!=="undefined"?global:typeof self!=="undefined"?self:typeof window!=="undefined"?window:{})},{}],16:[function(i,o,e){(function(e){var t=typeof e!=="undefined"?e:typeof window!=="undefined"?window:{};var r=i("min-document");var n;if(typeof document!=="undefined"){n=document}else{n=t["__GLOBAL_DOCUMENT_CACHE@4"];if(!n){n=t["__GLOBAL_DOCUMENT_CACHE@4"]=r}}o.exports=n}).call(this,typeof global!=="undefined"?global:typeof self!=="undefined"?self:typeof window!=="undefined"?window:{})},{"min-document":4}],17:[function(e,t,r){r.read=function(e,t,r,n,i){var o,a;var s=i*8-n-1;var u=(1<<s)-1;var c=u>>1;var h=-7;var l=r?i-1:0;var p=r?-1:1;var f=e[t+l];l+=p;o=f&(1<<-h)-1;f>>=-h;h+=s;for(;h>0;o=o*256+e[t+l],l+=p,h-=8){}a=o&(1<<-h)-1;o>>=-h;h+=n;for(;h>0;a=a*256+e[t+l],l+=p,h-=8){}if(o===0){o=1-c}else if(o===u){return a?NaN:(f?-1:1)*Infinity}else{a=a+Math.pow(2,n);o=o-c}return(f?-1:1)*a*Math.pow(2,o-n)};r.write=function(e,t,r,n,i,o){var a,s,u;var c=o*8-i-1;var h=(1<<c)-1;var l=h>>1;var p=i===23?Math.pow(2,-24)-Math.pow(2,-77):0;var f=n?0:o-1;var d=n?1:-1;var v=t<0||t===0&&1/t<0?1:0;t=Math.abs(t);if(isNaN(t)||t===Infinity){s=isNaN(t)?1:0;a=h}else{a=Math.floor(Math.log(t)/Math.LN2);if(t*(u=Math.pow(2,-a))<1){a--;u*=2}if(a+l>=1){t+=p/u}else{t+=p*Math.pow(2,1-l)}if(t*u>=2){a++;u/=2}if(a+l>=h){s=0;a=h}else if(a+l>=1){s=(t*u-1)*Math.pow(2,i);a=a+l}else{s=t*Math.pow(2,l-1)*Math.pow(2,i);a=0}}for(;i>=8;e[r+f]=s&255,f+=d,s/=256,i-=8){}a=a<<i|s;c+=i;for(;c>0;e[r+f]=a&255,f+=d,a/=256,c-=8){}e[r+f-d]|=v*128}},{}],18:[function(e,n,t){(function(e){"use strict";var r=typeof window!=="undefined"?window:typeof e!=="undefined"?e:{};n.exports=t;function t(e,t){if(e in r){return r[e]}r[e]=t;return t}}).call(this,typeof global!=="undefined"?global:typeof self!=="undefined"?self:typeof window!=="undefined"?window:{})},{}],19:[function(e,t,r){"use strict";var a=e("./index.js");t.exports=n;function n(e,t,r){var n="__INDIVIDUAL_ONE_VERSION_"+e;var i=n+"_ENFORCE_SINGLETON";var o=a(i,t);if(o!==t){throw new Error("Can only have one copy of "+e+".\n"+"You already have version "+o+" installed.\n"+"This means you cannot install version "+t)}return a(n,r)}},{"./index.js":18}],20:[function(e,t,r){"use strict";t.exports=function e(t){return typeof t==="object"&&t!==null}},{}],21:[function(e,t,r){"use strict";var m={};m.base32="0123456789bcdefghjkmnpqrstuvwxyz";m.encode=function(e,t,r){if(typeof r=="undefined"){for(var n=1;n<=12;n++){var i=m.encode(e,t,n);var o=m.decode(i);if(o.lat==e&&o.lon==t)return i}r=12}e=Number(e);t=Number(t);r=Number(r);if(isNaN(e)||isNaN(t)||isNaN(r))throw new Error("Invalid geohash");var a=0;var s=0;var u=true;var c="";var h=-90,l=90;var p=-180,f=180;while(c.length<r){if(u){var d=(p+f)/2;if(t>=d){a=a*2+1;p=d}else{a=a*2;f=d}}else{var v=(h+l)/2;if(e>=v){a=a*2+1;h=v}else{a=a*2;l=v}}u=!u;if(++s==5){c+=m.base32.charAt(a);s=0;a=0}}return c};m.decode=function(e){var t=m.bounds(e);var r=t.sw.lat,n=t.sw.lon;var i=t.ne.lat,o=t.ne.lon;var a=(r+i)/2;var s=(n+o)/2;a=a.toFixed(Math.floor(2-Math.log(i-r)/Math.LN10));s=s.toFixed(Math.floor(2-Math.log(o-n)/Math.LN10));return{lat:Number(a),lon:Number(s)}};m.bounds=function(e){if(e.length===0)throw new Error("Invalid geohash");e=e.toLowerCase();var t=true;var r=-90,n=90;var i=-180,o=180;for(var a=0;a<e.length;a++){var s=e.charAt(a);var u=m.base32.indexOf(s);if(u==-1)throw new Error("Invalid geohash");for(var c=4;c>=0;c--){var h=u>>c&1;if(t){var l=(i+o)/2;if(h==1){i=l}else{o=l}}else{var p=(r+n)/2;if(h==1){r=p}else{n=p}}t=!t}}var f={sw:{lat:r,lon:i},ne:{lat:n,lon:o}};return f};m.adjacent=function(e,t){e=e.toLowerCase();t=t.toLowerCase();if(e.length===0)throw new Error("Invalid geohash");if("nsew".indexOf(t)==-1)throw new Error("Invalid direction");var r={n:["p0r21436x8zb9dcf5h7kjnmqesgutwvy","bc01fg45238967deuvhjyznpkmstqrwx"],s:["14365h7k9dcfesgujnmqp0r2twvyx8zb","238967debc01fg45kmstqrwxuvhjyznp"],e:["bc01fg45238967deuvhjyznpkmstqrwx","p0r21436x8zb9dcf5h7kjnmqesgutwvy"],w:["238967debc01fg45kmstqrwxuvhjyznp","14365h7k9dcfesgujnmqp0r2twvyx8zb"]};var n={n:["prxz","bcfguvyz"],s:["028b","0145hjnp"],e:["bcfguvyz","prxz"],w:["0145hjnp","028b"]};var i=e.slice(-1);var o=e.slice(0,-1);var a=e.length%2;if(n[t][a].indexOf(i)!=-1&&o!==""){o=m.adjacent(o,t)}return o+m.base32.charAt(r[t][a].indexOf(i))};m.neighbours=function(e){return{n:m.adjacent(e,"n"),ne:m.adjacent(m.adjacent(e,"n"),"e"),e:m.adjacent(e,"e"),se:m.adjacent(m.adjacent(e,"s"),"e"),s:m.adjacent(e,"s"),sw:m.adjacent(m.adjacent(e,"s"),"w"),w:m.adjacent(e,"w"),nw:m.adjacent(m.adjacent(e,"n"),"w")}};if(typeof t!="undefined"&&t.exports)t.exports=m},{}],22:[function(e,r,n){(function(e,t){typeof n==="object"&&typeof r!=="undefined"?t(n):typeof o==="function"&&o.amd?o(["exports"],t):t(e.martinez={})})(this,function(e){"use strict";function n(e,t){return e>t?1:e<t?-1:0}var m=function e(t,r){if(t===void 0)t=n;if(r===void 0)r=false;this._compare=t;this._root=null;this._size=0;this._noDuplicates=!!r};var t={size:{configurable:true}};m.prototype.rotateLeft=function e(t){var r=t.right;if(r){t.right=r.left;if(r.left){r.left.parent=t}r.parent=t.parent}if(!t.parent){this._root=r}else if(t===t.parent.left){t.parent.left=r}else{t.parent.right=r}if(r){r.left=t}t.parent=r};m.prototype.rotateRight=function e(t){var r=t.left;if(r){t.left=r.right;if(r.right){r.right.parent=t}r.parent=t.parent}if(!t.parent){this._root=r}else if(t===t.parent.left){t.parent.left=r}else{t.parent.right=r}if(r){r.right=t}t.parent=r};m.prototype._splay=function e(t){var r=this;while(t.parent){var n=t.parent;if(!n.parent){if(n.left===t){r.rotateRight(n)}else{r.rotateLeft(n)}}else if(n.left===t&&n.parent.left===n){r.rotateRight(n.parent);r.rotateRight(n)}else if(n.right===t&&n.parent.right===n){r.rotateLeft(n.parent);r.rotateLeft(n)}else if(n.left===t&&n.parent.right===n){r.rotateRight(n);r.rotateLeft(n)}else{r.rotateLeft(n);r.rotateRight(n)}}};m.prototype.splay=function e(t){var r=this;var n,i,o,a,s;while(t.parent){n=t.parent;i=n.parent;if(i&&i.parent){o=i.parent;if(o.left===i){o.left=t}else{o.right=t}t.parent=o}else{t.parent=null;r._root=t}a=t.left;s=t.right;if(t===n.left){if(i){if(i.left===n){if(n.right){i.left=n.right;i.left.parent=i}else{i.left=null}n.right=i;i.parent=n}else{if(a){i.right=a;a.parent=i}else{i.right=null}t.left=i;i.parent=t}}if(s){n.left=s;s.parent=n}else{n.left=null}t.right=n;n.parent=t}else{if(i){if(i.right===n){if(n.left){i.right=n.left;i.right.parent=i}else{i.right=null}n.left=i;i.parent=n}else{if(s){i.left=s;s.parent=i}else{i.left=null}t.right=i;i.parent=t}}if(a){n.right=a;a.parent=n}else{n.right=null}t.left=n;n.parent=t}}};m.prototype.replace=function e(t,r){if(!t.parent){this._root=r}else if(t===t.parent.left){t.parent.left=r}else{t.parent.right=r}if(r){r.parent=t.parent}};m.prototype.minNode=function e(t){if(t===void 0)t=this._root;if(t){while(t.left){t=t.left}}return t};m.prototype.maxNode=function e(t){if(t===void 0)t=this._root;if(t){while(t.right){t=t.right}}return t};m.prototype.insert=function e(t,r){var n=this._root;var i=null;var o=this._compare;var a;if(this._noDuplicates){while(n){i=n;a=o(n.key,t);if(a===0){return}else if(o(n.key,t)<0){n=n.right}else{n=n.left}}}else{while(n){i=n;if(o(n.key,t)<0){n=n.right}else{n=n.left}}}n={key:t,data:r,left:null,right:null,parent:i};if(!i){this._root=n}else if(o(i.key,n.key)<0){i.right=n}else{i.left=n}this.splay(n);this._size++;return n};m.prototype.find=function e(t){var r=this._root;var n=this._compare;while(r){var i=n(r.key,t);if(i<0){r=r.right}else if(i>0){r=r.left}else{return r}}return null};m.prototype.contains=function e(t){var r=this._root;var n=this._compare;while(r){var i=n(t,r.key);if(i===0){return true}else if(i<0){r=r.left}else{r=r.right}}return false};m.prototype.remove=function e(t){var r=this.find(t);if(!r){return false}this.splay(r);if(!r.left){this.replace(r,r.right)}else if(!r.right){this.replace(r,r.left)}else{var n=this.minNode(r.right);if(n.parent!==r){this.replace(n,n.right);n.right=r.right;n.right.parent=n}this.replace(r,n);n.left=r.left;n.left.parent=n}this._size--;return true};m.prototype.removeNode=function e(t){if(!t){return false}this.splay(t);if(!t.left){this.replace(t,t.right)}else if(!t.right){this.replace(t,t.left)}else{var r=this.minNode(t.right);if(r.parent!==t){this.replace(r,r.right);r.right=t.right;r.right.parent=r}this.replace(t,r);r.left=t.left;r.left.parent=r}this._size--;return true};m.prototype.erase=function e(t){var r=this.find(t);if(!r){return}this.splay(r);var n=r.left;var i=r.right;var o=null;if(n){n.parent=null;o=this.maxNode(n);this.splay(o);this._root=o}if(i){if(n){o.right=i}else{this._root=i}i.parent=o}this._size--};m.prototype.pop=function e(){var t=this._root,r=null;if(t){while(t.left){t=t.left}r={key:t.key,data:t.data};this.remove(t.key)}return r};m.prototype.next=function e(t){var r=t;if(r){if(r.right){r=r.right;while(r&&r.left){r=r.left}}else{r=t.parent;while(r&&r.right===t){t=r;r=r.parent}}}return r};m.prototype.prev=function e(t){var r=t;if(r){if(r.left){r=r.left;while(r&&r.right){r=r.right}}else{r=t.parent;while(r&&r.left===t){t=r;r=r.parent}}}return r};m.prototype.forEach=function e(t){var r=this._root;var n=[],i=false,o=0;while(!i){if(r){n.push(r);r=r.left}else{if(n.length>0){r=n.pop();t(r,o++);r=r.right}else{i=true}}}return this};m.prototype.range=function e(t,r,n,i){var o=this;var a=[];var s=this._compare;var u=this._root,c;while(a.length!==0||u){if(u){a.push(u);u=u.left}else{u=a.pop();c=s(u.key,r);if(c>0){break}else if(s(u.key,t)>=0){if(n.call(i,u)){return o}}u=u.right}}return this};m.prototype.keys=function e(){var t=this._root;var r=[],n=[],i=false;while(!i){if(t){r.push(t);t=t.left}else{if(r.length>0){t=r.pop();n.push(t.key);t=t.right}else{i=true}}}return n};m.prototype.values=function e(){var t=this._root;var r=[],n=[],i=false;while(!i){if(t){r.push(t);t=t.left}else{if(r.length>0){t=r.pop();n.push(t.data);t=t.right}else{i=true}}}return n};m.prototype.at=function e(t){var r=this._root;var n=[],i=false,o=0;while(!i){if(r){n.push(r);r=r.left}else{if(n.length>0){r=n.pop();if(o===t){return r}o++;r=r.right}else{i=true}}}return null};m.prototype.load=function e(t,r,n){if(t===void 0)t=[];if(r===void 0)r=[];if(n===void 0)n=false;if(this._size!==0){throw new Error("bulk-load: tree is not empty")}var i=t.length;if(n){c(t,r,0,i-1,this._compare)}this._root=h(null,t,r,0,i);this._size=i;return this};m.prototype.min=function e(){var t=this.minNode(this._root);if(t){return t.key}else{return null}};m.prototype.max=function e(){var t=this.maxNode(this._root);if(t){return t.key}else{return null}};m.prototype.isEmpty=function e(){return this._root===null};t.size.get=function(){return this._size};m.createTree=function e(t,r,n,i,o){return new m(n,o).load(t,r,i)};Object.defineProperties(m.prototype,t);function h(e,t,r,n,i){var o=i-n;if(o>0){var a=n+Math.floor(o/2);var s=t[a];var u=r[a];var c={key:s,data:u,parent:e};c.left=h(c,t,r,n,a);c.right=h(c,t,r,a+1,i);return c}return null}function c(e,t,r,n,i){if(r>=n){return}var o=e[r+n>>1];var a=r-1;var s=n+1;while(true){do{a++}while(i(e[a],o)<0);do{s--}while(i(e[s],o)>0);if(a>=s){break}var u=e[a];e[a]=e[s];e[s]=u;u=t[a];t[a]=t[s];t[s]=u}c(e,t,r,s,i);c(e,t,s+1,n,i)}var a=0;var u=1;var l=2;var p=3;var g=0;var s=1;var y=2;var f=3;function _(e,t,r){if(t===null){e.inOut=false;e.otherInOut=true}else{if(e.isSubject===t.isSubject){e.inOut=!t.inOut;e.otherInOut=t.otherInOut}else{e.inOut=!t.otherInOut;e.otherInOut=t.isVertical()?!t.inOut:t.inOut}if(t){e.prevInResult=!i(t,r)||t.isVertical()?t.prevInResult:t}}e.inResult=i(e,r)}function i(e,t){switch(e.type){case a:switch(t){case g:return!e.otherInOut;case s:return e.otherInOut;case y:return e.isSubject&&e.otherInOut||!e.isSubject&&!e.otherInOut;case f:return true}break;case l:return t===g||t===s;case p:return t===y;case u:return false}return false}var d=function e(t,r,n,i,o){this.left=r;this.point=t;this.otherEvent=n;this.isSubject=i;this.type=o||a;this.inOut=false;this.otherInOut=false;this.prevInResult=null;this.inResult=false;this.resultInOut=false;this.isExteriorRing=true};d.prototype.isBelow=function e(t){var r=this.point,n=this.otherEvent.point;return this.left?(r[0]-t[0])*(n[1]-t[1])-(n[0]-t[0])*(r[1]-t[1])>0:(n[0]-t[0])*(r[1]-t[1])-(r[0]-t[0])*(n[1]-t[1])>0};d.prototype.isAbove=function e(t){return!this.isBelow(t)};d.prototype.isVertical=function e(){return this.point[0]===this.otherEvent.point[0]};d.prototype.clone=function e(){var t=new d(this.point,this.left,this.otherEvent,this.isSubject,this.type);t.inResult=this.inResult;t.prevInResult=this.prevInResult;t.isExteriorRing=this.isExteriorRing;t.inOut=this.inOut;t.otherInOut=this.otherInOut;return t};function v(e,t){if(e[0]===t[0]){if(e[1]===t[1]){return true}else{return false}}return false}function o(e,t,r){return(e[0]-r[0])*(t[1]-r[1])-(t[0]-r[0])*(e[1]-r[1])}function b(e,t){var r=e.point;var n=t.point;if(r[0]>n[0]){return 1}if(r[0]<n[0]){return-1}if(r[1]!==n[1]){return r[1]>n[1]?1:-1}return x(e,t,r,n)}function x(e,t,r,n){if(e.left!==t.left){return e.left?1:-1}if(o(r,e.otherEvent.point,t.otherEvent.point)!==0){return!e.isBelow(t.otherEvent.point)?1:-1}return!e.isSubject&&t.isSubject?1:-1}function w(e,t,r){var n=new d(t,false,e,e.isSubject);var i=new d(t,true,e.otherEvent,e.isSubject);if(v(e.point,e.otherEvent.point)){console.warn("what is that, a collapsed segment?",e)}n.contourId=i.contourId=e.contourId;if(b(i,e.otherEvent)>0){e.otherEvent.left=true;i.left=false}e.otherEvent.otherEvent=i;e.otherEvent=n;r.push(i);r.push(n);return r}function S(e,t){return e[0]*t[1]-e[1]*t[0]}function M(e,t){return e[0]*t[0]+e[1]*t[1]}function E(e,t,r,n,i){var o=[t[0]-e[0],t[1]-e[1]];var a=[n[0]-r[0],n[1]-r[1]];function s(e,t,r){return[e[0]+t*r[0],e[1]+t*r[1]]}var u=[r[0]-e[0],r[1]-e[1]];var c=S(o,a);var h=c*c;var l=M(o,o);if(h>0){var p=S(u,a)/c;if(p<0||p>1){return null}var f=S(u,o)/c;if(f<0||f>1){return null}if(p===0||p===1){return i?null:[s(e,p,o)]}if(f===0||f===1){return i?null:[s(r,f,a)]}return[s(e,p,o)]}c=S(u,o);h=c*c;if(h>0){return null}var d=M(o,u)/l;var v=d+M(o,a)/l;var m=Math.min(d,v);var g=Math.max(d,v);if(m<=1&&g>=0){if(m===1){return i?null:[s(e,m>0?m:0,o)]}if(g===0){return i?null:[s(e,g<1?g:1,o)]}if(i&&m===0&&g===1){return null}return[s(e,m>0?m:0,o),s(e,g<1?g:1,o)]}return null}function C(e,t,r){var n=E(e.point,e.otherEvent.point,t.point,t.otherEvent.point);var i=n?n.length:0;if(i===0){return 0}if(i===1&&(v(e.point,t.point)||v(e.otherEvent.point,t.otherEvent.point))){return 0}if(i===2&&e.isSubject===t.isSubject){return 0}if(i===1){if(!v(e.point,n[0])&&!v(e.otherEvent.point,n[0])){w(e,n[0],r)}if(!v(t.point,n[0])&&!v(t.otherEvent.point,n[0])){w(t,n[0],r)}return 1}var o=[];var a=false;var s=false;if(v(e.point,t.point)){a=true}else if(b(e,t)===1){o.push(t,e)}else{o.push(e,t)}if(v(e.otherEvent.point,t.otherEvent.point)){s=true}else if(b(e.otherEvent,t.otherEvent)===1){o.push(t.otherEvent,e.otherEvent)}else{o.push(e.otherEvent,t.otherEvent)}if(a&&s||a){t.type=u;e.type=t.inOut===e.inOut?l:p;if(a&&!s){w(o[1].otherEvent,o[0].point,r)}return 2}if(s){w(o[0],o[1].point,r);return 3}if(o[0]!==o[3].otherEvent){w(o[0],o[1].point,r);w(o[1],o[2].point,r);return 3}w(o[0],o[1].point,r);w(o[3].otherEvent,o[2].point,r);return 3}function T(e,t){if(e===t){return 0}if(o(e.point,e.otherEvent.point,t.point)!==0||o(e.point,e.otherEvent.point,t.otherEvent.point)!==0){if(v(e.point,t.point)){return e.isBelow(t.otherEvent.point)?-1:1}if(e.point[0]===t.point[0]){return e.point[1]<t.point[1]?-1:1}if(b(e,t)===1){return t.isAbove(e.point)?-1:1}return e.isBelow(t.point)?-1:1}if(e.isSubject===t.isSubject){var r=e.point,n=t.point;if(r[0]===n[0]&&r[1]===n[1]){r=e.otherEvent.point;n=t.otherEvent.point;if(r[0]===n[0]&&r[1]===n[1]){return 0}else{return e.contourId>t.contourId?1:-1}}}else{return e.isSubject?-1:1}return b(e,t)===1?1:-1}function O(e,t,r,n,i,o){var a=new m(T);var s=[];var u=Math.min(n[2],i[2]);var c,h,l;while(e.length!==0){var p=e.pop();s.push(p);if(o===g&&p.point[0]>u||o===y&&p.point[0]>n[2]){break}if(p.left){h=c=a.insert(p);l=a.minNode();if(c!==l){c=a.prev(c)}else{c=null}h=a.next(h);var f=c?c.key:null;var d=void 0;_(p,f,o);if(h){if(C(p,h.key,e)===2){_(p,f,o);_(p,h.key,o)}}if(c){if(C(c.key,p,e)===2){var v=c;if(v!==l){v=a.prev(v)}else{v=null}d=v?v.key:null;_(f,d,o);_(p,f,o)}}}else{p=p.otherEvent;h=c=a.find(p);if(c&&h){if(c!==l){c=a.prev(c)}else{c=null}h=a.next(h);a.remove(p);if(h&&c){C(c.key,h.key,e)}}}}return s}function P(e){var t,r,n,i;var o=[];for(r=0,n=e.length;r<n;r++){t=e[r];if(t.left&&t.inResult||!t.left&&t.otherEvent.inResult){o.push(t)}}var a=false;while(!a){a=true;for(r=0,n=o.length;r<n;r++){if(r+1<n&&b(o[r],o[r+1])===1){i=o[r];o[r]=o[r+1];o[r+1]=i;a=false}}}for(r=0,n=o.length;r<n;r++){t=o[r];t.pos=r}for(r=0,n=o.length;r<n;r++){t=o[r];if(!t.left){i=t.pos;t.pos=t.otherEvent.pos;t.otherEvent.pos=i}}return o}function A(e,t,r,n){var i,o;var a=e+1;var s=t.length;i=t[e].point;if(a<s){o=t[a].point}while(a<s&&o[0]===i[0]&&o[1]===i[1]){if(!r[a]){return a}else{a++}o=t[a].point}a=e-1;while(r[a]&&a>=n){a--}return a}function j(e,t){var r,n;var i=P(e);var o={};var a=[];var s;for(r=0,n=i.length;r<n;r++){if(o[r]){continue}var u=[[]];if(!i[r].isExteriorRing){if(t===y&&!i[r].isSubject&&a.length===0){a.push(u)}else if(a.length===0){a.push([[u]])}else{a[a.length-1].push(u[0])}}else if(t===y&&!i[r].isSubject&&a.length>1){a[a.length-1].push(u[0])}else{a.push(u)}var c=a.length-1;var h=r;var l=i[r].point;u[0].push(l);while(h>=r){s=i[h];o[h]=true;if(s.left){s.resultInOut=false;s.contourId=c}else{s.otherEvent.resultInOut=true;s.otherEvent.contourId=c}h=s.pos;o[h]=true;u[0].push(i[h].point);h=A(h,i,o,r)}h=h===-1?r:h;s=i[h];o[h]=o[s.pos]=true;s.otherEvent.resultInOut=true;s.otherEvent.contourId=c}return a}var R=L;var r=L;function L(e,t){var r=this;if(!(this instanceof L)){return new L(e,t)}this.data=e||[];this.length=this.data.length;this.compare=t||I;if(this.length>0){for(var n=(this.length>>1)-1;n>=0;n--){r._down(n)}}}function I(e,t){return e<t?-1:e>t?1:0}L.prototype={push:function(e){this.data.push(e);this.length++;this._up(this.length-1)},pop:function(){if(this.length===0){return undefined}var e=this.data[0];this.length--;if(this.length>0){this.data[0]=this.data[this.length];this._down(0)}this.data.pop();return e},peek:function(){return this.data[0]},_up:function(e){var t=this.data;var r=this.compare;var n=t[e];while(e>0){var i=e-1>>1;var o=t[i];if(r(n,o)>=0){break}t[e]=o;e=i}t[e]=n},_down:function(e){var t=this;var r=this.data;var n=this.compare;var i=this.length>>1;var o=r[e];while(e<i){var a=(e<<1)+1;var s=a+1;var u=r[a];if(s<t.length&&n(r[s],u)<0){a=s;u=r[s]}if(n(u,o)>=0){break}r[e]=u;e=a}r[e]=o}};R.default=r;var N=Math.max;var k=Math.min;var D=0;function B(e,t,r,n,i,o){var a,s,u,c,h,l;for(a=0,s=e.length-1;a<s;a++){u=e[a];c=e[a+1];h=new d(u,false,undefined,t);l=new d(c,false,h,t);h.otherEvent=l;if(u[0]===c[0]&&u[1]===c[1]){continue}h.contourId=l.contourId=r;if(!o){h.isExteriorRing=false;l.isExteriorRing=false}if(b(h,l)>0){l.left=true}else{h.left=true}var p=u[0],f=u[1];i[0]=k(i[0],p);i[1]=k(i[1],f);i[2]=N(i[2],p);i[3]=N(i[3],f);n.push(h);n.push(l)}}function F(e,t,r,n,i){var o=new R(null,b);var a,s,u,c,h,l;for(u=0,c=e.length;u<c;u++){a=e[u];for(h=0,l=a.length;h<l;h++){s=h===0;if(s){D++}B(a[h],true,D,o,r,s)}}for(u=0,c=t.length;u<c;u++){a=t[u];for(h=0,l=a.length;h<l;h++){s=h===0;if(i===y){s=false}if(s){D++}B(a[h],false,D,o,n,s)}}return o}var $=[];function z(e,t,r){var n=null;if(e.length*t.length===0){if(r===g){n=$}else if(r===y){n=e}else if(r===s||r===f){n=e.length===0?t:e}}return n}function U(e,t,r,n,i){var o=null;if(r[0]>n[2]||n[0]>r[2]||r[1]>n[3]||n[1]>r[3]){if(i===g){o=$}else if(i===y){o=e}else if(i===s||i===f){o=e.concat(t)}}return o}function G(e,t,r){if(typeof e[0][0][0]==="number"){e=[e]}if(typeof t[0][0][0]==="number"){t=[t]}var n=z(e,t,r);if(n){return n===$?null:n}var i=[Infinity,Infinity,-Infinity,-Infinity];var o=[Infinity,Infinity,-Infinity,-Infinity];var a=F(e,t,i,o,r);n=U(e,t,i,o,r);if(n){return n===$?null:n}var s=O(a,e,t,i,o,r);var u=j(s,r);return u}function V(e,t){return G(e,t,s)}function H(e,t){return G(e,t,y)}function q(e,t){return G(e,t,f)}function W(e,t){return G(e,t,g)}var X={UNION:s,DIFFERENCE:y,INTERSECTION:g,XOR:f};e.union=V;e.diff=H;e.xor=q;e.intersection=W;e.operations=X;Object.defineProperty(e,"__esModule",{value:true})})},{}],23:[function(e,t,c){(function(i){function o(e,t){var r=0;for(var n=e.length-1;n>=0;n--){var i=e[n];if(i==="."){e.splice(n,1)}else if(i===".."){e.splice(n,1);r++}else if(r){e.splice(n,1);r--}}if(t){for(;r--;r){e.unshift("..")}}return e}var t=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;var a=function(e){return t.exec(e).slice(1)};c.resolve=function(){var e="",t=false;for(var r=arguments.length-1;r>=-1&&!t;r--){var n=r>=0?arguments[r]:i.cwd();if(typeof n!=="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!n){continue}e=n+"/"+e;t=n.charAt(0)==="/"}e=o(s(e.split("/"),function(e){return!!e}),!t).join("/");return(t?"/":"")+e||"."};c.normalize=function(e){var t=c.isAbsolute(e),r=n(e,-1)==="/";e=o(s(e.split("/"),function(e){return!!e}),!t).join("/");if(!e&&!t){e="."}if(e&&r){e+="/"}return(t?"/":"")+e};c.isAbsolute=function(e){return e.charAt(0)==="/"};c.join=function(){var e=Array.prototype.slice.call(arguments,0);return c.normalize(s(e,function(e,t){if(typeof e!=="string"){throw new TypeError("Arguments to path.join must be strings")}return e}).join("/"))};c.relative=function(e,t){e=c.resolve(e).substr(1);t=c.resolve(t).substr(1);function r(e){var t=0;for(;t<e.length;t++){if(e[t]!=="")break}var r=e.length-1;for(;r>=0;r--){if(e[r]!=="")break}if(t>r)return[];return e.slice(t,r-t+1)}var n=r(e.split("/"));var i=r(t.split("/"));var o=Math.min(n.length,i.length);var a=o;for(var s=0;s<o;s++){if(n[s]!==i[s]){a=s;break}}var u=[];for(var s=a;s<n.length;s++){u.push("..")}u=u.concat(i.slice(a));return u.join("/")};c.sep="/";c.delimiter=":";c.dirname=function(e){var t=a(e),r=t[0],n=t[1];if(!r&&!n){return"."}if(n){n=n.substr(0,n.length-1)}return r+n};c.basename=function(e,t){var r=a(e)[2];if(t&&r.substr(-1*t.length)===t){r=r.substr(0,r.length-t.length)}return r};c.extname=function(e){return a(e)[3]};function s(e,t){if(e.filter)return e.filter(t);var r=[];for(var n=0;n<e.length;n++){if(t(e[n],n,e))r.push(e[n])}return r}var n="ab".substr(-1)==="b"?function(e,t,r){return e.substr(t,r)}:function(e,t,r){if(t<0)t=e.length+t;return e.substr(t,r)}}).call(this,e("_process"))},{_process:6}],24:[function(e,t,r){"use strict";t.exports=i;var n=e("ieee754");function i(e){this.buf=ArrayBuffer.isView&&ArrayBuffer.isView(e)?e:new Uint8Array(e||0);this.pos=0;this.type=0;this.length=this.buf.length}i.Varint=0;i.Fixed64=1;i.Bytes=2;i.Fixed32=5;var o=(1<<16)*(1<<16),a=1/o;i.prototype={destroy:function(){this.buf=null},readFields:function(e,t,r){r=r||this.length;while(this.pos<r){var n=this.readVarint(),i=n>>3,o=this.pos;this.type=n&7;e(i,t,this);if(this.pos===o)this.skip(n)}return t},readMessage:function(e,t){return this.readFields(e,t,this.readVarint()+this.pos)},readFixed32:function(){var e=S(this.buf,this.pos);this.pos+=4;return e},readSFixed32:function(){var e=E(this.buf,this.pos);this.pos+=4;return e},readFixed64:function(){var e=S(this.buf,this.pos)+S(this.buf,this.pos+4)*o;this.pos+=8;return e},readSFixed64:function(){var e=S(this.buf,this.pos)+E(this.buf,this.pos+4)*o;this.pos+=8;return e},readFloat:function(){var e=n.read(this.buf,this.pos,true,23,4);this.pos+=4;return e},readDouble:function(){var e=n.read(this.buf,this.pos,true,52,8);this.pos+=8;return e},readVarint:function(e){var t=this.buf,r,n;n=t[this.pos++];r=n&127;if(n<128)return r;n=t[this.pos++];r|=(n&127)<<7;if(n<128)return r;n=t[this.pos++];r|=(n&127)<<14;if(n<128)return r;n=t[this.pos++];r|=(n&127)<<21;if(n<128)return r;n=t[this.pos];r|=(n&15)<<28;return s(r,e,this)},readVarint64:function(){return this.readVarint(true)},readSVarint:function(){var e=this.readVarint();return e%2===1?(e+1)/-2:e/2},readBoolean:function(){return Boolean(this.readVarint())},readString:function(){var e=this.readVarint()+this.pos,t=C(this.buf,this.pos,e);this.pos=e;return t},readBytes:function(){var e=this.readVarint()+this.pos,t=this.buf.subarray(this.pos,e);this.pos=e;return t},readPackedVarint:function(e,t){var r=u(this);e=e||[];while(this.pos<r)e.push(this.readVarint(t));return e},readPackedSVarint:function(e){var t=u(this);e=e||[];while(this.pos<t)e.push(this.readSVarint());return e},readPackedBoolean:function(e){var t=u(this);e=e||[];while(this.pos<t)e.push(this.readBoolean());return e},readPackedFloat:function(e){var t=u(this);e=e||[];while(this.pos<t)e.push(this.readFloat());return e},readPackedDouble:function(e){var t=u(this);e=e||[];while(this.pos<t)e.push(this.readDouble());return e},readPackedFixed32:function(e){var t=u(this);e=e||[];while(this.pos<t)e.push(this.readFixed32());return e},readPackedSFixed32:function(e){var t=u(this);e=e||[];while(this.pos<t)e.push(this.readSFixed32());return e},readPackedFixed64:function(e){var t=u(this);e=e||[];while(this.pos<t)e.push(this.readFixed64());return e},readPackedSFixed64:function(e){var t=u(this);e=e||[];while(this.pos<t)e.push(this.readSFixed64());return e},skip:function(e){var t=e&7;if(t===i.Varint)while(this.buf[this.pos++]>127){}else if(t===i.Bytes)this.pos=this.readVarint()+this.pos;else if(t===i.Fixed32)this.pos+=4;else if(t===i.Fixed64)this.pos+=8;else throw new Error("Unimplemented type: "+t)},writeTag:function(e,t){this.writeVarint(e<<3|t)},realloc:function(e){var t=this.length||16;while(t<this.pos+e)t*=2;if(t!==this.length){var r=new Uint8Array(t);r.set(this.buf);this.buf=r;this.length=t}},finish:function(){this.length=this.pos;this.pos=0;return this.buf.subarray(0,this.length)},writeFixed32:function(e){this.realloc(4);M(this.buf,e,this.pos);this.pos+=4},writeSFixed32:function(e){this.realloc(4);M(this.buf,e,this.pos);this.pos+=4},writeFixed64:function(e){this.realloc(8);M(this.buf,e&-1,this.pos);M(this.buf,Math.floor(e*a),this.pos+4);this.pos+=8},writeSFixed64:function(e){this.realloc(8);M(this.buf,e&-1,this.pos);M(this.buf,Math.floor(e*a),this.pos+4);this.pos+=8},writeVarint:function(e){e=+e||0;if(e>268435455||e<0){h(e,this);return}this.realloc(4);this.buf[this.pos++]=e&127|(e>127?128:0);if(e<=127)return;this.buf[this.pos++]=(e>>>=7)&127|(e>127?128:0);if(e<=127)return;this.buf[this.pos++]=(e>>>=7)&127|(e>127?128:0);if(e<=127)return;this.buf[this.pos++]=e>>>7&127},writeSVarint:function(e){this.writeVarint(e<0?-e*2-1:e*2)},writeBoolean:function(e){this.writeVarint(Boolean(e))},writeString:function(e){e=String(e);this.realloc(e.length*4);this.pos++;var t=this.pos;this.pos=T(this.buf,e,this.pos);var r=this.pos-t;if(r>=128)f(t,r,this);this.pos=t-1;this.writeVarint(r);this.pos+=r},writeFloat:function(e){this.realloc(4);n.write(this.buf,e,this.pos,true,23,4);this.pos+=4},writeDouble:function(e){this.realloc(8);n.write(this.buf,e,this.pos,true,52,8);this.pos+=8},writeBytes:function(e){var t=e.length;this.writeVarint(t);this.realloc(t);for(var r=0;r<t;r++)this.buf[this.pos++]=e[r]},writeRawMessage:function(e,t){this.pos++;var r=this.pos;e(t,this);var n=this.pos-r;if(n>=128)f(r,n,this);this.pos=r-1;this.writeVarint(n);this.pos+=n},writeMessage:function(e,t,r){this.writeTag(e,i.Bytes);this.writeRawMessage(t,r)},writePackedVarint:function(e,t){this.writeMessage(e,d,t)},writePackedSVarint:function(e,t){this.writeMessage(e,v,t)},writePackedBoolean:function(e,t){this.writeMessage(e,y,t)},writePackedFloat:function(e,t){this.writeMessage(e,m,t)},writePackedDouble:function(e,t){this.writeMessage(e,g,t)},writePackedFixed32:function(e,t){this.writeMessage(e,_,t)},writePackedSFixed32:function(e,t){this.writeMessage(e,b,t)},writePackedFixed64:function(e,t){this.writeMessage(e,x,t)},writePackedSFixed64:function(e,t){this.writeMessage(e,w,t)},writeBytesField:function(e,t){this.writeTag(e,i.Bytes);this.writeBytes(t)},writeFixed32Field:function(e,t){this.writeTag(e,i.Fixed32);this.writeFixed32(t)},writeSFixed32Field:function(e,t){this.writeTag(e,i.Fixed32);this.writeSFixed32(t)},writeFixed64Field:function(e,t){this.writeTag(e,i.Fixed64);this.writeFixed64(t)},writeSFixed64Field:function(e,t){this.writeTag(e,i.Fixed64);this.writeSFixed64(t)},writeVarintField:function(e,t){this.writeTag(e,i.Varint);this.writeVarint(t)},writeSVarintField:function(e,t){this.writeTag(e,i.Varint);this.writeSVarint(t)},writeStringField:function(e,t){this.writeTag(e,i.Bytes);this.writeString(t)},writeFloatField:function(e,t){this.writeTag(e,i.Fixed32);this.writeFloat(t)},writeDoubleField:function(e,t){this.writeTag(e,i.Fixed64);this.writeDouble(t)},writeBooleanField:function(e,t){this.writeVarintField(e,Boolean(t))}};function s(e,t,r){var n=r.buf,i,o;o=n[r.pos++];i=(o&112)>>4;if(o<128)return c(e,i,t);o=n[r.pos++];i|=(o&127)<<3;if(o<128)return c(e,i,t);o=n[r.pos++];i|=(o&127)<<10;if(o<128)return c(e,i,t);o=n[r.pos++];i|=(o&127)<<17;if(o<128)return c(e,i,t);o=n[r.pos++];i|=(o&127)<<24;if(o<128)return c(e,i,t);o=n[r.pos++];i|=(o&1)<<31;if(o<128)return c(e,i,t);throw new Error("Expected varint not more than 10 bytes")}function u(e){return e.type===i.Bytes?e.readVarint()+e.pos:e.pos+1}function c(e,t,r){if(r){return t*4294967296+(e>>>0)}return(t>>>0)*4294967296+(e>>>0)}function h(e,t){var r,n;if(e>=0){r=e%4294967296|0;n=e/4294967296|0}else{r=~(-e%4294967296);n=~(-e/4294967296);if(r^4294967295){r=r+1|0}else{r=0;n=n+1|0}}if(e>=0x10000000000000000||e<-0x10000000000000000){throw new Error("Given varint doesn't fit into 10 bytes")}t.realloc(10);l(r,n,t);p(n,t)}function l(e,t,r){r.buf[r.pos++]=e&127|128;e>>>=7;r.buf[r.pos++]=e&127|128;e>>>=7;r.buf[r.pos++]=e&127|128;e>>>=7;r.buf[r.pos++]=e&127|128;e>>>=7;r.buf[r.pos]=e&127}function p(e,t){var r=(e&7)<<4;t.buf[t.pos++]|=r|((e>>>=3)?128:0);if(!e)return;t.buf[t.pos++]=e&127|((e>>>=7)?128:0);if(!e)return;t.buf[t.pos++]=e&127|((e>>>=7)?128:0);if(!e)return;t.buf[t.pos++]=e&127|((e>>>=7)?128:0);if(!e)return;t.buf[t.pos++]=e&127|((e>>>=7)?128:0);if(!e)return;t.buf[t.pos++]=e&127}function f(e,t,r){var n=t<=16383?1:t<=2097151?2:t<=268435455?3:Math.ceil(Math.log(t)/(Math.LN2*7));r.realloc(n);for(var i=r.pos-1;i>=e;i--)r.buf[i+n]=r.buf[i]}function d(e,t){for(var r=0;r<e.length;r++)t.writeVarint(e[r])}function v(e,t){for(var r=0;r<e.length;r++)t.writeSVarint(e[r])}function m(e,t){for(var r=0;r<e.length;r++)t.writeFloat(e[r])}function g(e,t){for(var r=0;r<e.length;r++)t.writeDouble(e[r])}function y(e,t){for(var r=0;r<e.length;r++)t.writeBoolean(e[r])}function _(e,t){for(var r=0;r<e.length;r++)t.writeFixed32(e[r])}function b(e,t){for(var r=0;r<e.length;r++)t.writeSFixed32(e[r])}function x(e,t){for(var r=0;r<e.length;r++)t.writeFixed64(e[r])}function w(e,t){for(var r=0;r<e.length;r++)t.writeSFixed64(e[r])}function S(e,t){return(e[t]|e[t+1]<<8|e[t+2]<<16)+e[t+3]*16777216}function M(e,t,r){e[r]=t;e[r+1]=t>>>8;e[r+2]=t>>>16;e[r+3]=t>>>24}function E(e,t){return(e[t]|e[t+1]<<8|e[t+2]<<16)+(e[t+3]<<24)}function C(e,t,r){var n="";var i=t;while(i<r){var o=e[i];var a=null;var s=o>239?4:o>223?3:o>191?2:1;if(i+s>r)break;var u,c,h;if(s===1){if(o<128){a=o}}else if(s===2){u=e[i+1];if((u&192)===128){a=(o&31)<<6|u&63;if(a<=127){a=null}}}else if(s===3){u=e[i+1];c=e[i+2];if((u&192)===128&&(c&192)===128){a=(o&15)<<12|(u&63)<<6|c&63;if(a<=2047||a>=55296&&a<=57343){a=null}}}else if(s===4){u=e[i+1];c=e[i+2];h=e[i+3];if((u&192)===128&&(c&192)===128&&(h&192)===128){a=(o&15)<<18|(u&63)<<12|(c&63)<<6|h&63;if(a<=65535||a>=1114112){a=null}}}if(a===null){a=65533;s=1}else if(a>65535){a-=65536;n+=String.fromCharCode(a>>>10&1023|55296);a=56320|a&1023}n+=String.fromCharCode(a);i+=s}return n}function T(e,t,r){for(var n=0,i,o;n<t.length;n++){i=t.charCodeAt(n);if(i>55295&&i<57344){if(o){if(i<56320){e[r++]=239;e[r++]=191;e[r++]=189;o=i;continue}else{i=o-55296<<10|i-56320|65536;o=null}}else{if(i>56319||n+1===t.length){e[r++]=239;e[r++]=191;e[r++]=189}else{o=i}continue}}else if(o){e[r++]=239;e[r++]=191;e[r++]=189;o=null}if(i<128){e[r++]=i}else{if(i<2048){e[r++]=i>>6|192}else{if(i<65536){e[r++]=i>>12|224}else{e[r++]=i>>18|240;e[r++]=i>>12&63|128}e[r++]=i>>6&63|128}e[r++]=i&63|128}}return r}},{ieee754:17}],25:[function(e,r,n){(function(e,t){typeof n==="object"&&typeof r!=="undefined"?r.exports=t():typeof o==="function"&&o.amd?o(t):e.quickselect=t()})(this,function(){"use strict";function e(e,t,r,n,i){v(e,t,r||0,n||e.length-1,i||o)}function v(e,t,r,n,i){while(n>r){if(n-r>600){var o=n-r+1;var a=t-r+1;var s=Math.log(o);var u=.5*Math.exp(2*s/3);var c=.5*Math.sqrt(s*u*(o-u)/o)*(a-o/2<0?-1:1);var h=Math.max(r,Math.floor(t-a*u/o+c));var l=Math.min(n,Math.floor(t+(o-a)*u/o+c));v(e,t,h,l,i)}var p=e[t];var f=r;var d=n;m(e,r,t);if(i(e[n],p)>0)m(e,r,n);while(f<d){m(e,f,d);f++;d--;while(i(e[f],p)<0)f++;while(i(e[d],p)>0)d--}if(i(e[r],p)===0)m(e,r,d);else{d++;m(e,d,n)}if(d<=t)r=d+1;if(t<=d)n=d-1}}function m(e,t,r){var n=e[t];e[t]=e[r];e[r]=n}function o(e,t){return e<t?-1:e>t?1:0}return e})},{}],26:[function(e,t,r){"use strict";t.exports=n;t.exports.default=n;var s=e("quickselect");function n(e,t){if(!(this instanceof n))return new n(e,t);this._maxEntries=Math.max(4,e||9);this._minEntries=Math.max(2,Math.ceil(this._maxEntries*.4));if(t){this._initFormat(t)}this.clear()}n.prototype={all:function(){return this._all(this.data,[])},search:function(e){var t=this.data,r=[],n=this.toBBox;if(!_(e,t))return r;var i=[],o,a,s,u;while(t){for(o=0,a=t.children.length;o<a;o++){s=t.children[o];u=t.leaf?n(s):s;if(_(e,u)){if(t.leaf)r.push(s);else if(y(e,u))this._all(s,r);else i.push(s)}}t=i.pop()}return r},collides:function(e){var t=this.data,r=this.toBBox;if(!_(e,t))return false;var n=[],i,o,a,s;while(t){for(i=0,o=t.children.length;i<o;i++){a=t.children[i];s=t.leaf?r(a):a;if(_(e,s)){if(t.leaf||y(e,s))return true;n.push(a)}}t=n.pop()}return false},load:function(e){if(!(e&&e.length))return this;if(e.length<this._minEntries){for(var t=0,r=e.length;t<r;t++){this.insert(e[t])}return this}var n=this._build(e.slice(),0,e.length-1,0);if(!this.data.children.length){this.data=n}else 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,true)}return this},insert:function(e){if(e)this._insert(e,this.data.height-1);return this},clear:function(){this.data=b([]);return this},remove:function(e,t){if(!e)return this;var r=this.data,n=this.toBBox(e),i=[],o=[],a,s,u,c;while(r||i.length){if(!r){r=i.pop();s=i[i.length-1];a=o.pop();c=true}if(r.leaf){u=h(e,r.children,t);if(u!==-1){r.children.splice(u,1);i.push(r);this._condense(i);return this}}if(!c&&!r.leaf&&y(r,n)){i.push(r);o.push(a);a=0;s=r;r=r.children[0]}else if(s){a++;r=s.children[a];c=false}else r=null}return this},toBBox:function(e){return e},compareMinX:u,compareMinY:c,toJSON:function(){return this.data},fromJSON:function(e){this.data=e;return this},_all:function(e,t){var r=[];while(e){if(e.leaf)t.push.apply(t,e.children);else r.push.apply(r,e.children);e=r.pop()}return t},_build:function(e,t,r,n){var i=r-t+1,o=this._maxEntries,a;if(i<=o){a=b(e.slice(t,r+1));f(a,this.toBBox);return a}if(!n){n=Math.ceil(Math.log(i)/Math.log(o));o=Math.ceil(i/Math.pow(o,n-1))}a=b([]);a.leaf=false;a.height=n;var s=Math.ceil(i/o),u=s*Math.ceil(Math.sqrt(o)),c,h,l,p;x(e,t,r,u,this.compareMinX);for(c=t;c<=r;c+=u){l=Math.min(c+u-1,r);x(e,c,l,s,this.compareMinY);for(h=c;h<=l;h+=s){p=Math.min(h+s-1,l);a.children.push(this._build(e,h,p,n-1))}}f(a,this.toBBox);return a},_chooseSubtree:function(e,t,r,n){var i,o,a,s,u,c,h,l;while(true){n.push(t);if(t.leaf||n.length-1===r)break;h=l=Infinity;for(i=0,o=t.children.length;i<o;i++){a=t.children[i];u=d(a);c=m(e,a)-u;if(c<l){l=c;h=u<h?u:h;s=a}else if(c===l){if(u<h){h=u;s=a}}}t=s||t.children[0]}return t},_insert:function(e,t,r){var n=this.toBBox,i=r?e:n(e),o=[];var a=this._chooseSubtree(i,this.data,t,o);a.children.push(e);p(a,i);while(t>=0){if(o[t].children.length>this._maxEntries){this._split(o,t);t--}else break}this._adjustParentBBoxes(i,o,t)},_split:function(e,t){var r=e[t],n=r.children.length,i=this._minEntries;this._chooseSplitAxis(r,i,n);var o=this._chooseSplitIndex(r,i,n);var a=b(r.children.splice(o,r.children.length-o));a.height=r.height;a.leaf=r.leaf;f(r,this.toBBox);f(a,this.toBBox);if(t)e[t-1].children.push(a);else this._splitRoot(r,a)},_splitRoot:function(e,t){this.data=b([e,t]);this.data.height=e.height+1;this.data.leaf=false;f(this.data,this.toBBox)},_chooseSplitIndex:function(e,t,r){var n,i,o,a,s,u,c,h;u=c=Infinity;for(n=t;n<=r-t;n++){i=l(e,0,n,this.toBBox);o=l(e,n,r,this.toBBox);a=g(i,o);s=d(i)+d(o);if(a<u){u=a;h=n;c=s<c?s:c}else if(a===u){if(s<c){c=s;h=n}}}return h},_chooseSplitAxis:function(e,t,r){var n=e.leaf?this.compareMinX:u,i=e.leaf?this.compareMinY:c,o=this._allDistMargin(e,t,r,n),a=this._allDistMargin(e,t,r,i);if(o<a)e.children.sort(n)},_allDistMargin:function(e,t,r,n){e.children.sort(n);var i=this.toBBox,o=l(e,0,t,i),a=l(e,r-t,r,i),s=v(o)+v(a),u,c;for(u=t;u<r-t;u++){c=e.children[u];p(o,e.leaf?i(c):c);s+=v(o)}for(u=r-t-1;u>=t;u--){c=e.children[u];p(a,e.leaf?i(c):c);s+=v(a)}return s},_adjustParentBBoxes:function(e,t,r){for(var n=r;n>=0;n--){p(t[n],e)}},_condense:function(e){for(var t=e.length-1,r;t>=0;t--){if(e[t].children.length===0){if(t>0){r=e[t-1].children;r.splice(r.indexOf(e[t]),1)}else this.clear()}else f(e[t],this.toBBox)}},_initFormat:function(e){var t=["return a"," - b",";"];this.compareMinX=new Function("a","b",t.join(e[0]));this.compareMinY=new Function("a","b",t.join(e[1]));this.toBBox=new Function("a","return {minX: a"+e[0]+", minY: a"+e[1]+", maxX: a"+e[2]+", maxY: a"+e[3]+"};")}};function h(e,t,r){if(!r)return t.indexOf(e);for(var n=0;n<t.length;n++){if(r(e,t[n]))return n}return-1}function f(e,t){l(e,0,e.children.length,t,e)}function l(e,t,r,n,i){if(!i)i=b(null);i.minX=Infinity;i.minY=Infinity;i.maxX=-Infinity;i.maxY=-Infinity;for(var o=t,a;o<r;o++){a=e.children[o];p(i,e.leaf?n(a):a)}return i}function p(e,t){e.minX=Math.min(e.minX,t.minX);e.minY=Math.min(e.minY,t.minY);e.maxX=Math.max(e.maxX,t.maxX);e.maxY=Math.max(e.maxY,t.maxY);return e}function u(e,t){return e.minX-t.minX}function c(e,t){return e.minY-t.minY}function d(e){return(e.maxX-e.minX)*(e.maxY-e.minY)}function v(e){return e.maxX-e.minX+(e.maxY-e.minY)}function m(e,t){return(Math.max(t.maxX,e.maxX)-Math.min(t.minX,e.minX))*(Math.max(t.maxY,e.maxY)-Math.min(t.minY,e.minY))}function g(e,t){var r=Math.max(e.minX,t.minX),n=Math.max(e.minY,t.minY),i=Math.min(e.maxX,t.maxX),o=Math.min(e.maxY,t.maxY);return Math.max(0,i-r)*Math.max(0,o-n)}function y(e,t){return e.minX<=t.minX&&e.minY<=t.minY&&t.maxX<=e.maxX&&t.maxY<=e.maxY}function _(e,t){return t.minX<=e.maxX&&t.minY<=e.maxY&&t.maxX>=e.minX&&t.maxY>=e.minY}function b(e){return{children:e,height:1,leaf:true,minX:Infinity,minY:Infinity,maxX:-Infinity,maxY:-Infinity}}function x(e,t,r,n,i){var o=[t,r],a;while(o.length){r=o.pop();t=o.pop();if(r-t<=n)continue;a=t+Math.ceil((r-t)/n/2)*n;s(e,a,t,r,i);o.push(t,a,a,r)}}},{quickselect:25}],27:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("./internal/Observable");r.Observable=n.Observable;var i=e("./internal/observable/ConnectableObservable");r.ConnectableObservable=i.ConnectableObservable;var o=e("./internal/operators/groupBy");r.GroupedObservable=o.GroupedObservable;var a=e("./internal/symbol/observable");r.observable=a.observable;var s=e("./internal/Subject");r.Subject=s.Subject;var u=e("./internal/BehaviorSubject");r.BehaviorSubject=u.BehaviorSubject;var c=e("./internal/ReplaySubject");r.ReplaySubject=c.ReplaySubject;var h=e("./internal/AsyncSubject");r.AsyncSubject=h.AsyncSubject;var l=e("./internal/scheduler/asap");r.asapScheduler=l.asap;var p=e("./internal/scheduler/async");r.asyncScheduler=p.async;var f=e("./internal/scheduler/queue");r.queueScheduler=f.queue;var d=e("./internal/scheduler/animationFrame");r.animationFrameScheduler=d.animationFrame;var v=e("./internal/scheduler/VirtualTimeScheduler");r.VirtualTimeScheduler=v.VirtualTimeScheduler;r.VirtualAction=v.VirtualAction;var m=e("./internal/Scheduler");r.Scheduler=m.Scheduler;var g=e("./internal/Subscription");r.Subscription=g.Subscription;var y=e("./internal/Subscriber");r.Subscriber=y.Subscriber;var _=e("./internal/Notification");r.Notification=_.Notification;var b=e("./internal/util/pipe");r.pipe=b.pipe;var x=e("./internal/util/noop");r.noop=x.noop;var w=e("./internal/util/identity");r.identity=w.identity;var S=e("./internal/util/isObservable");r.isObservable=S.isObservable;var M=e("./internal/util/ArgumentOutOfRangeError");r.ArgumentOutOfRangeError=M.ArgumentOutOfRangeError;var E=e("./internal/util/EmptyError");r.EmptyError=E.EmptyError;var C=e("./internal/util/ObjectUnsubscribedError");r.ObjectUnsubscribedError=C.ObjectUnsubscribedError;var T=e("./internal/util/UnsubscriptionError");r.UnsubscriptionError=T.UnsubscriptionError;var O=e("./internal/util/TimeoutError");r.TimeoutError=O.TimeoutError;var P=e("./internal/observable/bindCallback");r.bindCallback=P.bindCallback;var A=e("./internal/observable/bindNodeCallback");r.bindNodeCallback=A.bindNodeCallback;var j=e("./internal/observable/combineLatest");r.combineLatest=j.combineLatest;var R=e("./internal/observable/concat");r.concat=R.concat;var L=e("./internal/observable/defer");r.defer=L.defer;var I=e("./internal/observable/empty");r.empty=I.empty;var N=e("./internal/observable/forkJoin");r.forkJoin=N.forkJoin;var k=e("./internal/observable/from");r.from=k.from;var D=e("./internal/observable/fromEvent");r.fromEvent=D.fromEvent;var B=e("./internal/observable/fromEventPattern");r.fromEventPattern=B.fromEventPattern;var F=e("./internal/observable/generate");r.generate=F.generate;var $=e("./internal/observable/iif");r.iif=$.iif;var z=e("./internal/observable/interval");r.interval=z.interval;var U=e("./internal/observable/merge");r.merge=U.merge;var G=e("./internal/observable/never");r.never=G.never;var V=e("./internal/observable/of");r.of=V.of;var H=e("./internal/observable/onErrorResumeNext");r.onErrorResumeNext=H.onErrorResumeNext;var q=e("./internal/observable/pairs");r.pairs=q.pairs;var W=e("./internal/observable/race");r.race=W.race;var X=e("./internal/observable/range");r.range=X.range;var Y=e("./internal/observable/throwError");r.throwError=Y.throwError;var K=e("./internal/observable/timer");r.timer=K.timer;var Z=e("./internal/observable/using");r.using=Z.using;var J=e("./internal/observable/zip");r.zip=J.zip;var Q=e("./internal/observable/empty");r.EMPTY=Q.EMPTY;var ee=e("./internal/observable/never");r.NEVER=ee.NEVER;var te=e("./internal/config");r.config=te.config},{"./internal/AsyncSubject":28,"./internal/BehaviorSubject":29,"./internal/Notification":31,"./internal/Observable":32,"./internal/ReplaySubject":35,"./internal/Scheduler":36,"./internal/Subject":37,"./internal/Subscriber":39,"./internal/Subscription":40,"./internal/config":41,"./internal/observable/ConnectableObservable":42,"./internal/observable/bindCallback":44,"./internal/observable/bindNodeCallback":45,"./internal/observable/combineLatest":46,"./internal/observable/concat":47,"./internal/observable/defer":48,"./internal/observable/empty":49,"./internal/observable/forkJoin":50,"./internal/observable/from":51,"./internal/observable/fromEvent":53,"./internal/observable/fromEventPattern":54,"./internal/observable/generate":58,"./internal/observable/iif":59,"./internal/observable/interval":60,"./internal/observable/merge":61,"./internal/observable/never":62,"./internal/observable/of":63,"./internal/observable/onErrorResumeNext":64,"./internal/observable/pairs":65,"./internal/observable/race":66,"./internal/observable/range":67,"./internal/observable/throwError":69,"./internal/observable/timer":70,"./internal/observable/using":71,"./internal/observable/zip":72,"./internal/operators/groupBy":108,"./internal/scheduler/VirtualTimeScheduler":185,"./internal/scheduler/animationFrame":186,"./internal/scheduler/asap":187,"./internal/scheduler/async":188,"./internal/scheduler/queue":189,"./internal/symbol/observable":191,"./internal/util/ArgumentOutOfRangeError":193,"./internal/util/EmptyError":194,"./internal/util/ObjectUnsubscribedError":196,"./internal/util/TimeoutError":197,"./internal/util/UnsubscriptionError":198,"./internal/util/identity":202,"./internal/util/isObservable":211,"./internal/util/noop":214,"./internal/util/pipe":216}],28:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var i=e("./Subject");var o=e("./Subscription");var a=function(t){n(e,t);function e(){var e=t!==null&&t.apply(this,arguments)||this;e.value=null;e.hasNext=false;e.hasCompleted=false;return e}e.prototype._subscribe=function(e){if(this.hasError){e.error(this.thrownError);return o.Subscription.EMPTY}else if(this.hasCompleted&&this.hasNext){e.next(this.value);e.complete();return o.Subscription.EMPTY}return t.prototype._subscribe.call(this,e)};e.prototype.next=function(e){if(!this.hasCompleted){this.value=e;this.hasNext=true}};e.prototype.error=function(e){if(!this.hasCompleted){t.prototype.error.call(this,e)}};e.prototype.complete=function(){this.hasCompleted=true;if(this.hasNext){t.prototype.next.call(this,this.value)}t.prototype.complete.call(this)};return e}(i.Subject);r.AsyncSubject=a},{"./Subject":37,"./Subscription":40}],29:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var i=e("./Subject");var o=e("./util/ObjectUnsubscribedError");var a=function(r){n(e,r);function e(e){var t=r.call(this)||this;t._value=e;return t}Object.defineProperty(e.prototype,"value",{get:function(){return this.getValue()},enumerable:true,configurable:true});e.prototype._subscribe=function(e){var t=r.prototype._subscribe.call(this,e);if(t&&!t.closed){e.next(this._value)}return t};e.prototype.getValue=function(){if(this.hasError){throw this.thrownError}else if(this.closed){throw new o.ObjectUnsubscribedError}else{return this._value}};e.prototype.next=function(e){r.prototype.next.call(this,this._value=e)};return e}(i.Subject);r.BehaviorSubject=a},{"./Subject":37,"./util/ObjectUnsubscribedError":196}],30:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var i=e("./Subscriber");var o=function(i){n(e,i);function e(e,t,r){var n=i.call(this)||this;n.parent=e;n.outerValue=t;n.outerIndex=r;n.index=0;return n}e.prototype._next=function(e){this.parent.notifyNext(this.outerValue,e,this.outerIndex,this.index++,this)};e.prototype._error=function(e){this.parent.notifyError(e,this);this.unsubscribe()};e.prototype._complete=function(){this.parent.notifyComplete(this);this.unsubscribe()};return e}(i.Subscriber);r.InnerSubscriber=o},{"./Subscriber":39}],31:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("./observable/empty");var i=e("./observable/of");var o=e("./observable/throwError");var a=function(){function t(e,t,r){this.kind=e;this.value=t;this.error=r;this.hasValue=e==="N"}t.prototype.observe=function(e){switch(this.kind){case"N":return e.next&&e.next(this.value);case"E":return e.error&&e.error(this.error);case"C":return e.complete&&e.complete()}};t.prototype.do=function(e,t,r){var n=this.kind;switch(n){case"N":return e&&e(this.value);case"E":return t&&t(this.error);case"C":return r&&r()}};t.prototype.accept=function(e,t,r){if(e&&typeof e.next==="function"){return this.observe(e)}else{return this.do(e,t,r)}};t.prototype.toObservable=function(){var e=this.kind;switch(e){case"N":return i.of(this.value);case"E":return o.throwError(this.error);case"C":return n.empty()}throw new Error("unexpected notification kind value")};t.createNext=function(e){if(typeof e!=="undefined"){return new t("N",e)}return t.undefinedValueNotification};t.createError=function(e){return new t("E",undefined,e)};t.createComplete=function(){return t.completeNotification};t.completeNotification=new t("C");t.undefinedValueNotification=new t("N",undefined);return t}();r.Notification=a},{"./observable/empty":49,"./observable/of":63,"./observable/throwError":69}],32:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("./util/canReportError");var o=e("./util/toSubscriber");var i=e("../internal/symbol/observable");var a=e("./util/pipe");var s=e("./config");var u=function(){function r(e){this._isScalar=false;if(e){this._subscribe=e}}r.prototype.lift=function(e){var t=new r;t.source=this;t.operator=e;return t};r.prototype.subscribe=function(e,t,r){var n=this.operator;var i=o.toSubscriber(e,t,r);if(n){n.call(i,this.source)}else{i.add(this.source||s.config.useDeprecatedSynchronousErrorHandling&&!i.syncErrorThrowable?this._subscribe(i):this._trySubscribe(i))}if(s.config.useDeprecatedSynchronousErrorHandling){if(i.syncErrorThrowable){i.syncErrorThrowable=false;if(i.syncErrorThrown){throw i.syncErrorValue}}}return i};r.prototype._trySubscribe=function(t){try{return this._subscribe(t)}catch(e){if(s.config.useDeprecatedSynchronousErrorHandling){t.syncErrorThrown=true;t.syncErrorValue=e}if(n.canReportError(t)){t.error(e)}else{console.warn(e)}}};r.prototype.forEach=function(n,e){var i=this;e=c(e);return new e(function(e,t){var r;r=i.subscribe(function(e){try{n(e)}catch(e){t(e);if(r){r.unsubscribe()}}},t,e)})};r.prototype._subscribe=function(e){var t=this.source;return t&&t.subscribe(e)};r.prototype[i.observable]=function(){return this};r.prototype.pipe=function(){var e=[];for(var t=0;t<arguments.length;t++){e[t]=arguments[t]}if(e.length===0){return this}return a.pipeFromArray(e)(this)};r.prototype.toPromise=function(e){var n=this;e=c(e);return new e(function(e,t){var r;n.subscribe(function(e){return r=e},function(e){return t(e)},function(){return e(r)})})};r.create=function(e){return new r(e)};return r}();r.Observable=u;function c(e){if(!e){e=s.config.Promise||Promise}if(!e){throw new Error("no Promise impl found")}return e}},{"../internal/symbol/observable":191,"./config":41,"./util/canReportError":199,"./util/pipe":216,"./util/toSubscriber":223}],33:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("./config");var i=e("./util/hostReportError");r.empty={closed:true,next:function(e){},error:function(e){if(n.config.useDeprecatedSynchronousErrorHandling){throw e}else{i.hostReportError(e)}},complete:function(){}}},{"./config":41,"./util/hostReportError":201}],34:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var i=e("./Subscriber");var o=function(e){n(t,e);function t(){return e!==null&&e.apply(this,arguments)||this}t.prototype.notifyNext=function(e,t,r,n,i){this.destination.next(t)};t.prototype.notifyError=function(e,t){this.destination.error(e)};t.prototype.notifyComplete=function(e){this.destination.complete()};return t}(i.Subscriber);r.OuterSubscriber=o},{"./Subscriber":39}],35:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var i=e("./Subject");var o=e("./scheduler/queue");var s=e("./Subscription");var u=e("./operators/observeOn");var c=e("./util/ObjectUnsubscribedError");var h=e("./SubjectSubscription");var a=function(i){n(e,i);function e(e,t,r){if(e===void 0){e=Number.POSITIVE_INFINITY}if(t===void 0){t=Number.POSITIVE_INFINITY}var n=i.call(this)||this;n.scheduler=r;n._events=[];n._infiniteTimeWindow=false;n._bufferSize=e<1?1:e;n._windowTime=t<1?1:t;if(t===Number.POSITIVE_INFINITY){n._infiniteTimeWindow=true;n.next=n.nextInfiniteTimeWindow}else{n.next=n.nextTimeWindow}return n}e.prototype.nextInfiniteTimeWindow=function(e){var t=this._events;t.push(e);if(t.length>this._bufferSize){t.shift()}i.prototype.next.call(this,e)};e.prototype.nextTimeWindow=function(e){this._events.push(new l(this._getNow(),e));this._trimBufferThenGetEvents();i.prototype.next.call(this,e)};e.prototype._subscribe=function(e){var t=this._infiniteTimeWindow;var r=t?this._events:this._trimBufferThenGetEvents();var n=this.scheduler;var i=r.length;var o;if(this.closed){throw new c.ObjectUnsubscribedError}else if(this.isStopped||this.hasError){o=s.Subscription.EMPTY}else{this.observers.push(e);o=new h.SubjectSubscription(this,e)}if(n){e.add(e=new u.ObserveOnSubscriber(e,n))}if(t){for(var a=0;a<i&&!e.closed;a++){e.next(r[a])}}else{for(var a=0;a<i&&!e.closed;a++){e.next(r[a].value)}}if(this.hasError){e.error(this.thrownError)}else if(this.isStopped){e.complete()}return o};e.prototype._getNow=function(){return(this.scheduler||o.queue).now()};e.prototype._trimBufferThenGetEvents=function(){var e=this._getNow();var t=this._bufferSize;var r=this._windowTime;var n=this._events;var i=n.length;var o=0;while(o<i){if(e-n[o].time<r){break}o++}if(i>t){o=Math.max(o,i-t)}if(o>0){n.splice(0,o)}return n};return e}(i.Subject);r.ReplaySubject=a;var l=function(){function e(e,t){this.time=e;this.value=t}return e}()},{"./Subject":37,"./SubjectSubscription":38,"./Subscription":40,"./operators/observeOn":123,"./scheduler/queue":189,"./util/ObjectUnsubscribedError":196}],36:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=function(){function r(e,t){if(t===void 0){t=r.now}this.SchedulerAction=e;this.now=t}r.prototype.schedule=function(e,t,r){if(t===void 0){t=0}return new this.SchedulerAction(this,e).schedule(r,t)};r.now=function(){return Date.now()};return r}();r.Scheduler=n},{}],37:[function(e,t,r){"use strict";var i=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var n=e("./Observable");var o=e("./Subscriber");var a=e("./Subscription");var s=e("./util/ObjectUnsubscribedError");var u=e("./SubjectSubscription");var c=e("../internal/symbol/rxSubscriber");var h=function(r){i(e,r);function e(e){var t=r.call(this,e)||this;t.destination=e;return t}return e}(o.Subscriber);r.SubjectSubscriber=h;var l=function(t){i(e,t);function e(){var e=t.call(this)||this;e.observers=[];e.closed=false;e.isStopped=false;e.hasError=false;e.thrownError=null;return e}e.prototype[c.rxSubscriber]=function(){return new h(this)};e.prototype.lift=function(e){var t=new p(this,this);t.operator=e;return t};e.prototype.next=function(e){if(this.closed){throw new s.ObjectUnsubscribedError}if(!this.isStopped){var t=this.observers;var r=t.length;var n=t.slice();for(var i=0;i<r;i++){n[i].next(e)}}};e.prototype.error=function(e){if(this.closed){throw new s.ObjectUnsubscribedError}this.hasError=true;this.thrownError=e;this.isStopped=true;var t=this.observers;var r=t.length;var n=t.slice();for(var i=0;i<r;i++){n[i].error(e)}this.observers.length=0};e.prototype.complete=function(){if(this.closed){throw new s.ObjectUnsubscribedError}this.isStopped=true;var e=this.observers;var t=e.length;var r=e.slice();for(var n=0;n<t;n++){r[n].complete()}this.observers.length=0};e.prototype.unsubscribe=function(){this.isStopped=true;this.closed=true;this.observers=null};e.prototype._trySubscribe=function(e){if(this.closed){throw new s.ObjectUnsubscribedError}else{return t.prototype._trySubscribe.call(this,e)}};e.prototype._subscribe=function(e){if(this.closed){throw new s.ObjectUnsubscribedError}else if(this.hasError){e.error(this.thrownError);return a.Subscription.EMPTY}else if(this.isStopped){e.complete();return a.Subscription.EMPTY}else{this.observers.push(e);return new u.SubjectSubscription(this,e)}};e.prototype.asObservable=function(){var e=new n.Observable;e.source=this;return e};e.create=function(e,t){return new p(e,t)};return e}(n.Observable);r.Subject=l;var p=function(n){i(e,n);function e(e,t){var r=n.call(this)||this;r.destination=e;r.source=t;return r}e.prototype.next=function(e){var t=this.destination;if(t&&t.next){t.next(e)}};e.prototype.error=function(e){var t=this.destination;if(t&&t.error){this.destination.error(e)}};e.prototype.complete=function(){var e=this.destination;if(e&&e.complete){this.destination.complete()}};e.prototype._subscribe=function(e){var t=this.source;if(t){return this.source.subscribe(e)}else{return a.Subscription.EMPTY}};return e}(l);r.AnonymousSubject=p},{"../internal/symbol/rxSubscriber":192,"./Observable":32,"./SubjectSubscription":38,"./Subscriber":39,"./Subscription":40,"./util/ObjectUnsubscribedError":196}],38:[function(e,t,r){"use strict";var i=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var n=e("./Subscription");var o=function(n){i(e,n);function e(e,t){var r=n.call(this)||this;r.subject=e;r.subscriber=t;r.closed=false;return r}e.prototype.unsubscribe=function(){if(this.closed){return}this.closed=true;var e=this.subject;var t=e.observers;this.subject=null;if(!t||t.length===0||e.isStopped||e.closed){return}var r=t.indexOf(this.subscriber);if(r!==-1){t.splice(r,1)}};return e}(n.Subscription);r.SubjectSubscription=o},{"./Subscription":40}],39:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var u=e("./util/isFunction");var c=e("./Observer");var i=e("./Subscription");var a=e("../internal/symbol/rxSubscriber");var o=e("./config");var h=e("./util/hostReportError");var s=function(i){n(o,i);function o(e,t,r){var n=i.call(this)||this;n.syncErrorValue=null;n.syncErrorThrown=false;n.syncErrorThrowable=false;n.isStopped=false;n._parentSubscription=null;switch(arguments.length){case 0:n.destination=c.empty;break;case 1:if(!e){n.destination=c.empty;break}if(typeof e==="object"){if(e instanceof o){n.syncErrorThrowable=e.syncErrorThrowable;n.destination=e;e.add(n)}else{n.syncErrorThrowable=true;n.destination=new l(n,e)}break}default:n.syncErrorThrowable=true;n.destination=new l(n,e,t,r);break}return n}o.prototype[a.rxSubscriber]=function(){return this};o.create=function(e,t,r){var n=new o(e,t,r);n.syncErrorThrowable=false;return n};o.prototype.next=function(e){if(!this.isStopped){this._next(e)}};o.prototype.error=function(e){if(!this.isStopped){this.isStopped=true;this._error(e)}};o.prototype.complete=function(){if(!this.isStopped){this.isStopped=true;this._complete()}};o.prototype.unsubscribe=function(){if(this.closed){return}this.isStopped=true;i.prototype.unsubscribe.call(this)};o.prototype._next=function(e){this.destination.next(e)};o.prototype._error=function(e){this.destination.error(e);this.unsubscribe()};o.prototype._complete=function(){this.destination.complete();this.unsubscribe()};o.prototype._unsubscribeAndRecycle=function(){var e=this,t=e._parent,r=e._parents;this._parent=null;this._parents=null;this.unsubscribe();this.closed=false;this.isStopped=false;this._parent=t;this._parents=r;this._parentSubscription=null;return this};return o}(i.Subscription);r.Subscriber=s;var l=function(s){n(e,s);function e(e,t,r,n){var i=s.call(this)||this;i._parentSubscriber=e;var o;var a=i;if(u.isFunction(t)){o=t}else if(t){o=t.next;r=t.error;n=t.complete;if(t!==c.empty){a=Object.create(t);if(u.isFunction(a.unsubscribe)){i.add(a.unsubscribe.bind(a))}a.unsubscribe=i.unsubscribe.bind(i)}}i._context=a;i._next=o;i._error=r;i._complete=n;return i}e.prototype.next=function(e){if(!this.isStopped&&this._next){var t=this._parentSubscriber;if(!o.config.useDeprecatedSynchronousErrorHandling||!t.syncErrorThrowable){this.__tryOrUnsub(this._next,e)}else if(this.__tryOrSetError(t,this._next,e)){this.unsubscribe()}}};e.prototype.error=function(e){if(!this.isStopped){var t=this._parentSubscriber;var r=o.config.useDeprecatedSynchronousErrorHandling;if(this._error){if(!r||!t.syncErrorThrowable){this.__tryOrUnsub(this._error,e);this.unsubscribe()}else{this.__tryOrSetError(t,this._error,e);this.unsubscribe()}}else if(!t.syncErrorThrowable){this.unsubscribe();if(r){throw e}h.hostReportError(e)}else{if(r){t.syncErrorValue=e;t.syncErrorThrown=true}else{h.hostReportError(e)}this.unsubscribe()}}};e.prototype.complete=function(){var e=this;if(!this.isStopped){var t=this._parentSubscriber;if(this._complete){var r=function(){return e._complete.call(e._context)};if(!o.config.useDeprecatedSynchronousErrorHandling||!t.syncErrorThrowable){this.__tryOrUnsub(r);this.unsubscribe()}else{this.__tryOrSetError(t,r);this.unsubscribe()}}else{this.unsubscribe()}}};e.prototype.__tryOrUnsub=function(e,t){try{e.call(this._context,t)}catch(e){this.unsubscribe();if(o.config.useDeprecatedSynchronousErrorHandling){throw e}else{h.hostReportError(e)}}};e.prototype.__tryOrSetError=function(t,e,r){if(!o.config.useDeprecatedSynchronousErrorHandling){throw new Error("bad call")}try{e.call(this._context,r)}catch(e){if(o.config.useDeprecatedSynchronousErrorHandling){t.syncErrorValue=e;t.syncErrorThrown=true;return true}else{h.hostReportError(e);return true}}return false};e.prototype._unsubscribe=function(){var e=this._parentSubscriber;this._context=null;this._parentSubscriber=null;e.unsubscribe()};return e}(s);r.SafeSubscriber=l},{"../internal/symbol/rxSubscriber":192,"./Observer":33,"./Subscription":40,"./config":41,"./util/hostReportError":201,"./util/isFunction":206}],40:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var p=e("./util/isArray");var f=e("./util/isObject");var d=e("./util/isFunction");var v=e("./util/tryCatch");var m=e("./util/errorObject");var g=e("./util/UnsubscriptionError");var n=function(){function i(e){this.closed=false;this._parent=null;this._parents=null;this._subscriptions=null;if(e){this._unsubscribe=e}}i.prototype.unsubscribe=function(){var e=false;var t;if(this.closed){return}var r=this,n=r._parent,i=r._parents,o=r._unsubscribe,a=r._subscriptions;this.closed=true;this._parent=null;this._parents=null;this._subscriptions=null;var s=-1;var u=i?i.length:0;while(n){n.remove(this);n=++s<u&&i[s]||null}if(d.isFunction(o)){var c=v.tryCatch(o).call(this);if(c===m.errorObject){e=true;t=t||(m.errorObject.e instanceof g.UnsubscriptionError?y(m.errorObject.e.errors):[m.errorObject.e])}}if(p.isArray(a)){s=-1;u=a.length;while(++s<u){var h=a[s];if(f.isObject(h)){var c=v.tryCatch(h.unsubscribe).call(h);if(c===m.errorObject){e=true;t=t||[];var l=m.errorObject.e;if(l instanceof g.UnsubscriptionError){t=t.concat(y(l.errors))}else{t.push(l)}}}}}if(e){throw new g.UnsubscriptionError(t)}};i.prototype.add=function(e){if(!e||e===i.EMPTY){return i.EMPTY}if(e===this){return this}var t=e;switch(typeof e){case"function":t=new i(e);case"object":if(t.closed||typeof t.unsubscribe!=="function"){return t}else if(this.closed){t.unsubscribe();return t}else if(typeof t._addParent!=="function"){var r=t;t=new i;t._subscriptions=[r]}break;default:throw new Error("unrecognized teardown "+e+" added to Subscription.")}var n=this._subscriptions||(this._subscriptions=[]);n.push(t);t._addParent(this);return t};i.prototype.remove=function(e){var t=this._subscriptions;if(t){var r=t.indexOf(e);if(r!==-1){t.splice(r,1)}}};i.prototype._addParent=function(e){var t=this,r=t._parent,n=t._parents;if(!r||r===e){this._parent=e}else if(!n){this._parents=[e]}else if(n.indexOf(e)===-1){n.push(e)}};i.EMPTY=function(e){e.closed=true;return e}(new i);return i}();r.Subscription=n;function y(e){return e.reduce(function(e,t){return e.concat(t instanceof g.UnsubscriptionError?t.errors:t)},[])}},{"./util/UnsubscriptionError":198,"./util/errorObject":200,"./util/isArray":203,"./util/isFunction":206,"./util/isObject":210,"./util/tryCatch":224}],41:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=false;r.config={Promise:undefined,set useDeprecatedSynchronousErrorHandling(e){if(e){var t=new Error;console.warn("DEPRECATED! RxJS was set to use deprecated synchronous error handling behavior by code at: \n"+t.stack)}else if(n){console.log("RxJS: Back to a better error behavior. Thank you. <3")}n=e},get useDeprecatedSynchronousErrorHandling(){return n}}},{}],42:[function(e,t,r){"use strict";var i=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var n=e("../Subject");var o=e("../Observable");var a=e("../Subscriber");var s=e("../Subscription");var u=e("../operators/refCount");var c=function(n){i(e,n);function e(e,t){var r=n.call(this)||this;r.source=e;r.subjectFactory=t;r._refCount=0;r._isComplete=false;return r}e.prototype._subscribe=function(e){return this.getSubject().subscribe(e)};e.prototype.getSubject=function(){var e=this._subject;if(!e||e.isStopped){this._subject=this.subjectFactory()}return this._subject};e.prototype.connect=function(){var e=this._connection;if(!e){this._isComplete=false;e=this._connection=new s.Subscription;e.add(this.source.subscribe(new l(this.getSubject(),this)));if(e.closed){this._connection=null;e=s.Subscription.EMPTY}else{this._connection=e}}return e};e.prototype.refCount=function(){return u.refCount()(this)};return e}(o.Observable);r.ConnectableObservable=c;var h=c.prototype;r.connectableObservableDescriptor={operator:{value:null},_refCount:{value:0,writable:true},_subject:{value:null,writable:true},_connection:{value:null,writable:true},_subscribe:{value:h._subscribe},_isComplete:{value:h._isComplete,writable:true},getSubject:{value:h.getSubject},connect:{value:h.connect},refCount:{value:h.refCount}};var l=function(n){i(e,n);function e(e,t){var r=n.call(this,e)||this;r.connectable=t;return r}e.prototype._error=function(e){this._unsubscribe();n.prototype._error.call(this,e)};e.prototype._complete=function(){this.connectable._isComplete=true;this._unsubscribe();n.prototype._complete.call(this)};e.prototype._unsubscribe=function(){var e=this.connectable;if(e){this.connectable=null;var t=e._connection;e._refCount=0;e._subject=null;e._connection=null;if(t){t.unsubscribe()}}};return e}(n.SubjectSubscriber);var p=function(){function e(e){this.connectable=e}e.prototype.call=function(e,t){var r=this.connectable;r._refCount++;var n=new f(e,r);var i=t.subscribe(n);if(!n.closed){n.connection=r.connect()}return i};return e}();var f=function(n){i(e,n);function e(e,t){var r=n.call(this,e)||this;r.connectable=t;return r}e.prototype._unsubscribe=function(){var e=this.connectable;if(!e){this.connection=null;return}this.connectable=null;var t=e._refCount;if(t<=0){this.connection=null;return}e._refCount=t-1;if(t>1){this.connection=null;return}var r=this.connection;var n=e._connection;this.connection=null;if(n&&(!r||n===r)){n.unsubscribe()}};return e}(a.Subscriber)},{"../Observable":32,"../Subject":37,"../Subscriber":39,"../Subscription":40,"../operators/refCount":134}],43:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var i=e("../Observable");var a=e("../scheduler/asap");var s=e("../util/isNumeric");var o=function(i){n(o,i);function o(e,t,r){if(t===void 0){t=0}if(r===void 0){r=a.asap}var n=i.call(this)||this;n.source=e;n.delayTime=t;n.scheduler=r;if(!s.isNumeric(t)||t<0){n.delayTime=0}if(!r||typeof r.schedule!=="function"){n.scheduler=a.asap}return n}o.create=function(e,t,r){if(t===void 0){t=0}if(r===void 0){r=a.asap}return new o(e,t,r)};o.dispatch=function(e){var t=e.source,r=e.subscriber;return this.add(t.subscribe(r))};o.prototype._subscribe=function(e){var t=this.delayTime;var r=this.source;var n=this.scheduler;return n.schedule(o.dispatch,t,{source:r,subscriber:e})};return o}(i.Observable);r.SubscribeOnObservable=o},{"../Observable":32,"../scheduler/asap":187,"../util/isNumeric":209}],44:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var c=e("../Observable");var l=e("../AsyncSubject");var n=e("../operators/map");var h=e("../util/canReportError");var i=e("../util/isArray");var o=e("../util/isScheduler");function a(s,r,u){if(r){if(o.isScheduler(r)){u=r}else{return function(){var e=[];for(var t=0;t<arguments.length;t++){e[t]=arguments[t]}return a(s,u).apply(void 0,e).pipe(n.map(function(e){return i.isArray(e)?r.apply(void 0,e):r(e)}))}}}return function(){var n=[];for(var e=0;e<arguments.length;e++){n[e]=arguments[e]}var i=this;var o;var a={context:i,subject:o,callbackFunc:s,scheduler:u};return new c.Observable(function(e){if(!u){if(!o){o=new l.AsyncSubject;var t=function(){var e=[];for(var t=0;t<arguments.length;t++){e[t]=arguments[t]}o.next(e.length<=1?e[0]:e);o.complete()};try{s.apply(i,n.concat([t]))}catch(e){if(h.canReportError(o)){o.error(e)}else{console.warn(e)}}}return o.subscribe(e)}else{var r={args:n,subscriber:e,params:a};return u.schedule(p,0,r)}})}}r.bindCallback=a;function p(e){var n=this;var t=this;var r=e.args,i=e.subscriber,o=e.params;var a=o.callbackFunc,s=o.context,u=o.scheduler;var c=o.subject;if(!c){c=o.subject=new l.AsyncSubject;var h=function(){var e=[];for(var t=0;t<arguments.length;t++){e[t]=arguments[t]}var r=e.length<=1?e[0]:e;n.add(u.schedule(f,0,{value:r,subject:c}))};try{a.apply(s,r.concat([h]))}catch(e){c.error(e)}}this.add(c.subscribe(i))}function f(e){var t=e.value,r=e.subject;r.next(t);r.complete()}function s(e){var t=e.err,r=e.subject;r.error(t)}},{"../AsyncSubject":28,"../Observable":32,"../operators/map":112,"../util/canReportError":199,"../util/isArray":203,"../util/isScheduler":213}],45:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("../Observable");var h=e("../AsyncSubject");var i=e("../operators/map");var u=e("../util/canReportError");var o=e("../util/isScheduler");var c=e("../util/isArray");function l(a,r,s){if(r){if(o.isScheduler(r)){s=r}else{return function(){var e=[];for(var t=0;t<arguments.length;t++){e[t]=arguments[t]}return l(a,s).apply(void 0,e).pipe(i.map(function(e){return c.isArray(e)?r.apply(void 0,e):r(e)}))}}}return function(){var i=[];for(var e=0;e<arguments.length;e++){i[e]=arguments[e]}var o={subject:undefined,args:i,callbackFunc:a,scheduler:s,context:this};return new n.Observable(function(e){var t=o.context;var n=o.subject;if(!s){if(!n){n=o.subject=new h.AsyncSubject;var r=function(){var e=[];for(var t=0;t<arguments.length;t++){e[t]=arguments[t]}var r=e.shift();if(r){n.error(r);return}n.next(e.length<=1?e[0]:e);n.complete()};try{a.apply(t,i.concat([r]))}catch(e){if(u.canReportError(n)){n.error(e)}else{console.warn(e)}}}return n.subscribe(e)}else{return s.schedule(p,0,{params:o,subscriber:e,context:t})}})}}r.bindNodeCallback=l;function p(e){var i=this;var t=e.params,r=e.subscriber,n=e.context;var o=t.callbackFunc,a=t.args,s=t.scheduler;var u=t.subject;if(!u){u=t.subject=new h.AsyncSubject;var c=function(){var e=[];for(var t=0;t<arguments.length;t++){e[t]=arguments[t]}var r=e.shift();if(r){i.add(s.schedule(d,0,{err:r,subject:u}))}else{var n=e.length<=1?e[0]:e;i.add(s.schedule(f,0,{value:n,subject:u}))}};try{o.apply(n,a.concat([c]))}catch(e){this.add(s.schedule(d,0,{err:e,subject:u}))}}this.add(u.subscribe(r))}function f(e){var t=e.value,r=e.subject;r.next(t);r.complete()}function d(e){var t=e.err,r=e.subject;r.error(t)}},{"../AsyncSubject":28,"../Observable":32,"../operators/map":112,"../util/canReportError":199,"../util/isArray":203,"../util/isScheduler":213}],46:[function(e,t,r){"use strict";var i=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var o=e("../util/isScheduler");var a=e("../util/isArray");var n=e("../OuterSubscriber");var s=e("../util/subscribeToResult");var u=e("./fromArray");var c={};function h(){var e=[];for(var t=0;t<arguments.length;t++){e[t]=arguments[t]}var r=null;var n=null;if(o.isScheduler(e[e.length-1])){n=e.pop()}if(typeof e[e.length-1]==="function"){r=e.pop()}if(e.length===1&&a.isArray(e[0])){e=e[0]}return u.fromArray(e,n).lift(new l(r))}r.combineLatest=h;var l=function(){function e(e){this.resultSelector=e}e.prototype.call=function(e,t){return t.subscribe(new p(e,this.resultSelector))};return e}();r.CombineLatestOperator=l;var p=function(n){i(e,n);function e(e,t){var r=n.call(this,e)||this;r.resultSelector=t;r.active=0;r.values=[];r.observables=[];return r}e.prototype._next=function(e){this.values.push(c);this.observables.push(e)};e.prototype._complete=function(){var e=this.observables;var t=e.length;if(t===0){this.destination.complete()}else{this.active=t;this.toRespond=t;for(var r=0;r<t;r++){var n=e[r];this.add(s.subscribeToResult(this,n,n,r))}}};e.prototype.notifyComplete=function(e){if((this.active-=1)===0){this.destination.complete()}};e.prototype.notifyNext=function(e,t,r,n,i){var o=this.values;var a=o[r];var s=!this.toRespond?0:a===c?--this.toRespond:this.toRespond;o[r]=t;if(s===0){if(this.resultSelector){this._tryResultSelector(o)}else{this.destination.next(o.slice())}}};e.prototype._tryResultSelector=function(e){var t;try{t=this.resultSelector.apply(this,e)}catch(e){this.destination.error(e);return}this.destination.next(t)};return e}(n.OuterSubscriber);r.CombineLatestSubscriber=p},{"../OuterSubscriber":34,"../util/isArray":203,"../util/isScheduler":213,"../util/subscribeToResult":222,"./fromArray":52}],47:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("../util/isScheduler");var i=e("./of");var o=e("./from");var a=e("../operators/concatAll");function s(){var e=[];for(var t=0;t<arguments.length;t++){e[t]=arguments[t]}if(e.length===1||e.length===2&&n.isScheduler(e[1])){return o.from(e[0])}return a.concatAll()(i.of.apply(void 0,e))}r.concat=s},{"../operators/concatAll":84,"../util/isScheduler":213,"./from":51,"./of":63}],48:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var i=e("../Observable");var o=e("./from");var a=e("./empty");function n(n){return new i.Observable(function(t){var e;try{e=n()}catch(e){t.error(e);return undefined}var r=e?o.from(e):a.empty();return r.subscribe(t)})}r.defer=n},{"../Observable":32,"./empty":49,"./from":51}],49:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("../Observable");r.EMPTY=new n.Observable(function(e){return e.complete()});function i(e){return e?o(e):r.EMPTY}r.empty=i;function o(t){return new n.Observable(function(e){return t.schedule(function(){return e.complete()})})}r.emptyScheduled=o},{"../Observable":32}],50:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var i=e("../Observable");var o=e("../util/isArray");var a=e("./empty");var u=e("../util/subscribeToResult");var s=e("../OuterSubscriber");var c=e("../operators/map");function h(){var t=[];for(var e=0;e<arguments.length;e++){t[e]=arguments[e]}var r;if(typeof t[t.length-1]==="function"){r=t.pop()}if(t.length===1&&o.isArray(t[0])){t=t[0]}if(t.length===0){return a.EMPTY}if(r){return h(t).pipe(c.map(function(e){return r.apply(void 0,e)}))}return new i.Observable(function(e){return new l(e,t)})}r.forkJoin=h;var l=function(s){n(e,s);function e(e,t){var r=s.call(this,e)||this;r.sources=t;r.completed=0;r.haveValues=0;var n=t.length;r.values=new Array(n);for(var i=0;i<n;i++){var o=t[i];var a=u.subscribeToResult(r,o,null,i);if(a){r.add(a)}}return r}e.prototype.notifyNext=function(e,t,r,n,i){this.values[r]=t;if(!i._hasValue){i._hasValue=true;this.haveValues++}};e.prototype.notifyComplete=function(e){var t=this,r=t.destination,n=t.haveValues,i=t.values;var o=i.length;if(!e._hasValue){r.complete();return}this.completed++;if(this.completed!==o){return}if(n===o){r.next(i)}r.complete()};return e}(s.OuterSubscriber)},{"../Observable":32,"../OuterSubscriber":34,"../operators/map":112,"../util/isArray":203,"../util/subscribeToResult":222,"./empty":49}],51:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("../Observable");var i=e("../util/isPromise");var o=e("../util/isArrayLike");var a=e("../util/isInteropObservable");var s=e("../util/isIterable");var u=e("./fromArray");var c=e("./fromPromise");var h=e("./fromIterable");var l=e("./fromObservable");var p=e("../util/subscribeTo");function f(e,t){if(!t){if(e instanceof n.Observable){return e}return new n.Observable(p.subscribeTo(e))}if(e!=null){if(a.isInteropObservable(e)){return l.fromObservable(e,t)}else if(i.isPromise(e)){return c.fromPromise(e,t)}else if(o.isArrayLike(e)){return u.fromArray(e,t)}else if(s.isIterable(e)||typeof e==="string"){return h.fromIterable(e,t)}}throw new TypeError((e!==null&&typeof e||e)+" is not observable")}r.from=f},{"../Observable":32,"../util/isArrayLike":204,"../util/isInteropObservable":207,"../util/isIterable":208,"../util/isPromise":212,"../util/subscribeTo":217,"./fromArray":52,"./fromIterable":55,"./fromObservable":56,"./fromPromise":57}],52:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var o=e("../Observable");var a=e("../Subscription");var s=e("../util/subscribeToArray");function n(n,i){if(!i){return new o.Observable(s.subscribeToArray(n))}else{return new o.Observable(function(e){var t=new a.Subscription;var r=0;t.add(i.schedule(function(){if(r===n.length){e.complete();return}e.next(n[r++]);if(!e.closed){t.add(this.schedule())}}));return t})}}r.fromArray=n},{"../Observable":32,"../Subscription":40,"../util/subscribeToArray":218}],53:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var o=e("../Observable");var a=e("../util/isArray");var s=e("../util/isFunction");var u=e("../operators/map");var n=Object.prototype.toString;function c(r,n,i,t){if(s.isFunction(i)){t=i;i=undefined}if(t){return c(r,n,i).pipe(u.map(function(e){return a.isArray(e)?t.apply(void 0,e):t(e)}))}return new o.Observable(function(t){function e(e){if(arguments.length>1){t.next(Array.prototype.slice.call(arguments))}else{t.next(e)}}l(r,n,e,t,i)})}r.fromEvent=c;function l(e,t,r,n,i){var o;if(d(e)){var a=e;e.addEventListener(t,r,i);o=function(){return a.removeEventListener(t,r,i)}}else if(f(e)){var s=e;e.on(t,r);o=function(){return s.off(t,r)}}else if(p(e)){var u=e;e.addListener(t,r);o=function(){return u.removeListener(t,r)}}else if(e&&e.length){for(var c=0,h=e.length;c<h;c++){l(e[c],t,r,n,i)}}else{throw new TypeError("Invalid event target")}n.add(o)}function p(e){return e&&typeof e.addListener==="function"&&typeof e.removeListener==="function"}function f(e){return e&&typeof e.on==="function"&&typeof e.off==="function"}function d(e){return e&&typeof e.addEventListener==="function"&&typeof e.removeEventListener==="function"}},{"../Observable":32,"../operators/map":112,"../util/isArray":203,"../util/isFunction":206}],54:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var o=e("../Observable");var a=e("../util/isArray");var s=e("../util/isFunction");var u=e("../operators/map");function c(n,i,t){if(t){return c(n,i).pipe(u.map(function(e){return a.isArray(e)?t.apply(void 0,e):t(e)}))}return new o.Observable(function(r){var e=function(){var e=[];for(var t=0;t<arguments.length;t++){e[t]=arguments[t]}return r.next(e.length===1?e[0]:e)};var t;try{t=n(e)}catch(e){r.error(e);return undefined}if(!s.isFunction(i)){return undefined}return function(){return i(e,t)}})}r.fromEventPattern=c},{"../Observable":32,"../operators/map":112,"../util/isArray":203,"../util/isFunction":206}],55:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("../Observable");var o=e("../Subscription");var a=e("../symbol/iterator");var i=e("../util/subscribeToIterable");function s(t,r){if(!t){throw new Error("Iterable cannot be null")}if(!r){return new n.Observable(i.subscribeToIterable(t))}else{return new n.Observable(function(n){var e=new o.Subscription;var i;e.add(function(){if(i&&typeof i.return==="function"){i.return()}});e.add(r.schedule(function(){i=t[a.iterator]();e.add(r.schedule(function(){if(n.closed){return}var e;var t;try{var r=i.next();e=r.value;t=r.done}catch(e){n.error(e);return}if(t){n.complete()}else{n.next(e);this.schedule()}}))}));return e})}}r.fromIterable=s},{"../Observable":32,"../Subscription":40,"../symbol/iterator":190,"../util/subscribeToIterable":219}],56:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var o=e("../Observable");var a=e("../Subscription");var s=e("../symbol/observable");var u=e("../util/subscribeToObservable");function n(n,i){if(!i){return new o.Observable(u.subscribeToObservable(n))}else{return new o.Observable(function(t){var r=new a.Subscription;r.add(i.schedule(function(){var e=n[s.observable]();r.add(e.subscribe({next:function(e){r.add(i.schedule(function(){return t.next(e)}))},error:function(e){r.add(i.schedule(function(){return t.error(e)}))},complete:function(){r.add(i.schedule(function(){return t.complete()}))}}))}));return r})}}r.fromObservable=n},{"../Observable":32,"../Subscription":40,"../symbol/observable":191,"../util/subscribeToObservable":220}],57:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var i=e("../Observable");var o=e("../Subscription");var a=e("../util/subscribeToPromise");function n(e,n){if(!n){return new i.Observable(a.subscribeToPromise(e))}else{return new i.Observable(function(t){var r=new o.Subscription;r.add(n.schedule(function(){return e.then(function(e){r.add(n.schedule(function(){t.next(e);r.add(n.schedule(function(){return t.complete()}))}))},function(e){r.add(n.schedule(function(){return t.error(e)}))})}));return r})}}r.fromPromise=n},{"../Observable":32,"../Subscription":40,"../util/subscribeToPromise":221}],58:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("../Observable");var c=e("../util/identity");var h=e("../util/isScheduler");function i(e,i,o,t,a){var s;var u;if(arguments.length==1){var r=e;u=r.initialState;i=r.condition;o=r.iterate;s=r.resultSelector||c.identity;a=r.scheduler}else if(t===undefined||h.isScheduler(t)){u=e;s=c.identity;a=t}else{u=e;s=t}return new n.Observable(function(t){var e=u;if(a){return a.schedule(l,0,{subscriber:t,iterate:o,condition:i,resultSelector:s,state:e})}do{if(i){var r=void 0;try{r=i(e)}catch(e){t.error(e);return undefined}if(!r){t.complete();break}}var n=void 0;try{n=s(e)}catch(e){t.error(e);return undefined}t.next(n);if(t.closed){break}try{e=o(e)}catch(e){t.error(e);return undefined}}while(true);return undefined})}r.generate=i;function l(e){var t=e.subscriber,r=e.condition;if(t.closed){return undefined}if(e.needIterate){try{e.state=e.iterate(e.state)}catch(e){t.error(e);return undefined}}else{e.needIterate=true}if(r){var n=void 0;try{n=r(e.state)}catch(e){t.error(e);return undefined}if(!n){t.complete();return undefined}if(t.closed){return undefined}}var i;try{i=e.resultSelector(e.state)}catch(e){t.error(e);return undefined}if(t.closed){return undefined}t.next(i);if(t.closed){return undefined}return this.schedule(e)}},{"../Observable":32,"../util/identity":202,"../util/isScheduler":213}],59:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("./defer");var i=e("./empty");function o(e,t,r){if(t===void 0){t=i.EMPTY}if(r===void 0){r=i.EMPTY}return n.defer(function(){return e()?t:r})}r.iif=o},{"./defer":48,"./empty":49}],60:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("../Observable");var i=e("../scheduler/async");var o=e("../util/isNumeric");function a(t,r){if(t===void 0){t=0}if(r===void 0){r=i.async}if(!o.isNumeric(t)||t<0){t=0}if(!r||typeof r.schedule!=="function"){r=i.async}return new n.Observable(function(e){e.add(r.schedule(s,t,{subscriber:e,counter:0,period:t}));return e})}r.interval=a;function s(e){var t=e.subscriber,r=e.counter,n=e.period;t.next(r);this.schedule({subscriber:t,counter:r+1,period:n},n)}},{"../Observable":32,"../scheduler/async":188,"../util/isNumeric":209}],61:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var o=e("../Observable");var a=e("../util/isScheduler");var s=e("../operators/mergeAll");var u=e("./fromArray");function n(){var e=[];for(var t=0;t<arguments.length;t++){e[t]=arguments[t]}var r=Number.POSITIVE_INFINITY;var n=null;var i=e[e.length-1];if(a.isScheduler(i)){n=e.pop();if(e.length>1&&typeof e[e.length-1]==="number"){r=e.pop()}}else if(typeof i==="number"){r=e.pop()}if(n===null&&e.length===1&&e[0]instanceof o.Observable){return e[0]}return s.mergeAll(r)(u.fromArray(e,n))}r.merge=n},{"../Observable":32,"../operators/mergeAll":117,"../util/isScheduler":213,"./fromArray":52}],62:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("../Observable");var i=e("../util/noop");r.NEVER=new n.Observable(i.noop);function o(){return r.NEVER}r.never=o},{"../Observable":32,"../util/noop":214}],63:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("../util/isScheduler");var i=e("./fromArray");var o=e("./empty");var a=e("./scalar");function s(){var e=[];for(var t=0;t<arguments.length;t++){e[t]=arguments[t]}var r=e[e.length-1];if(n.isScheduler(r)){e.pop()}else{r=undefined}switch(e.length){case 0:return o.empty(r);case 1:return r?i.fromArray(e,r):a.scalar(e[0]);default:return i.fromArray(e,r)}}r.of=s},{"../util/isScheduler":213,"./empty":49,"./fromArray":52,"./scalar":68}],64:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var i=e("../Observable");var o=e("./from");var a=e("../util/isArray");var s=e("./empty");function u(){var e=[];for(var t=0;t<arguments.length;t++){e[t]=arguments[t]}if(e.length===0){return s.EMPTY}var r=e[0],n=e.slice(1);if(e.length===1&&a.isArray(r)){return u.apply(void 0,r)}return new i.Observable(function(t){var e=function(){return t.add(u.apply(void 0,n).subscribe(t))};return o.from(r).subscribe({next:function(e){t.next(e)},error:e,complete:e})})}r.onErrorResumeNext=u},{"../Observable":32,"../util/isArray":203,"./empty":49,"./from":51}],65:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var o=e("../Observable");var a=e("../Subscription");function n(i,n){if(!n){return new o.Observable(function(e){var t=Object.keys(i);for(var r=0;r<t.length&&!e.closed;r++){var n=t[r];if(i.hasOwnProperty(n)){e.next([n,i[n]])}}e.complete()})}else{return new o.Observable(function(e){var t=Object.keys(i);var r=new a.Subscription;r.add(n.schedule(s,0,{keys:t,index:0,subscriber:e,subscription:r,obj:i}));return r})}}r.pairs=n;function s(e){var t=e.keys,r=e.index,n=e.subscriber,i=e.subscription,o=e.obj;if(!n.closed){if(r<t.length){var a=t[r];n.next([a,o[a]]);i.add(this.schedule({keys:t,index:r+1,subscriber:n,subscription:i,obj:o}))}else{n.complete()}}}r.dispatch=s},{"../Observable":32,"../Subscription":40}],66:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var i=e("../util/isArray");var o=e("./fromArray");var a=e("../OuterSubscriber");var s=e("../util/subscribeToResult");function u(){var e=[];for(var t=0;t<arguments.length;t++){e[t]=arguments[t]}if(e.length===1){if(i.isArray(e[0])){e=e[0]}else{return e[0]}}return o.fromArray(e,undefined).lift(new c)}r.race=u;var c=function(){function e(){}e.prototype.call=function(e,t){return t.subscribe(new h(e))};return e}();r.RaceOperator=c;var h=function(r){n(e,r);function e(e){var t=r.call(this,e)||this;t.hasFirst=false;t.observables=[];t.subscriptions=[];return t}e.prototype._next=function(e){this.observables.push(e)};e.prototype._complete=function(){var e=this.observables;var t=e.length;if(t===0){this.destination.complete()}else{for(var r=0;r<t&&!this.hasFirst;r++){var n=e[r];var i=s.subscribeToResult(this,n,n,r);if(this.subscriptions){this.subscriptions.push(i)}this.add(i)}this.observables=null}};e.prototype.notifyNext=function(e,t,r,n,i){if(!this.hasFirst){this.hasFirst=true;for(var o=0;o<this.subscriptions.length;o++){if(o!==r){var a=this.subscriptions[o];a.unsubscribe();this.remove(a)}}this.subscriptions=null}this.destination.next(t)};return e}(a.OuterSubscriber);r.RaceSubscriber=h},{"../OuterSubscriber":34,"../util/isArray":203,"../util/subscribeToResult":222,"./fromArray":52}],67:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var a=e("../Observable");function n(n,i,o){if(n===void 0){n=0}if(i===void 0){i=0}return new a.Observable(function(e){var t=0;var r=n;if(o){return o.schedule(s,0,{index:t,count:i,start:n,subscriber:e})}else{do{if(t++>=i){e.complete();break}e.next(r++);if(e.closed){break}}while(true)}return undefined})}r.range=n;function s(e){var t=e.start,r=e.index,n=e.count,i=e.subscriber;if(r>=n){i.complete();return}i.next(t);if(i.closed){return}e.index=r+1;e.start=t+1;this.schedule(e)}r.dispatch=s},{"../Observable":32}],68:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("../Observable");function i(t){var e=new n.Observable(function(e){e.next(t);e.complete()});e._isScalar=true;e.value=t;return e}r.scalar=i},{"../Observable":32}],69:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("../Observable");function i(t,r){if(!r){return new n.Observable(function(e){return e.error(t)})}else{return new n.Observable(function(e){return r.schedule(o,0,{error:t,subscriber:e})})}}r.throwError=i;function o(e){var t=e.error,r=e.subscriber;r.error(t)}},{"../Observable":32}],70:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var o=e("../Observable");var a=e("../scheduler/async");var s=e("../util/isNumeric");var u=e("../util/isScheduler");function n(r,e,n){if(r===void 0){r=0}var i=-1;if(s.isNumeric(e)){i=Number(e)<1&&1||Number(e)}else if(u.isScheduler(e)){n=e}if(!u.isScheduler(n)){n=a.async}return new o.Observable(function(e){var t=s.isNumeric(r)?r:+r-n.now();return n.schedule(c,t,{index:0,period:i,subscriber:e})})}r.timer=n;function c(e){var t=e.index,r=e.period,n=e.subscriber;n.next(t);if(n.closed){return}else if(r===-1){return n.complete()}e.index=t+1;this.schedule(e,r)}},{"../Observable":32,"../scheduler/async":188,"../util/isNumeric":209,"../util/isScheduler":213}],71:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("../Observable");var s=e("./from");var u=e("./empty");function i(o,a){return new n.Observable(function(t){var e;try{e=o()}catch(e){t.error(e);return undefined}var r;try{r=a(e)}catch(e){t.error(e);return undefined}var n=r?s.from(r):u.EMPTY;var i=n.subscribe(t);return function(){i.unsubscribe();if(e){e.unsubscribe()}}})}r.using=i},{"../Observable":32,"./empty":49,"./from":51}],72:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var i=e("./fromArray");var o=e("../util/isArray");var a=e("../Subscriber");var s=e("../OuterSubscriber");var u=e("../util/subscribeToResult");var c=e("../../internal/symbol/iterator");function h(){var e=[];for(var t=0;t<arguments.length;t++){e[t]=arguments[t]}var r=e[e.length-1];if(typeof r==="function"){e.pop()}return i.fromArray(e,undefined).lift(new l(r))}r.zip=h;var l=function(){function e(e){this.resultSelector=e}e.prototype.call=function(e,t){return t.subscribe(new p(e,this.resultSelector))};return e}();r.ZipOperator=l;var p=function(i){n(e,i);function e(e,t,r){if(r===void 0){r=Object.create(null)}var n=i.call(this,e)||this;n.iterators=[];n.active=0;n.resultSelector=typeof t==="function"?t:null;n.values=r;return n}e.prototype._next=function(e){var t=this.iterators;if(o.isArray(e)){t.push(new d(e))}else if(typeof e[c.iterator]==="function"){t.push(new f(e[c.iterator]()))}else{t.push(new v(this.destination,this,e))}};e.prototype._complete=function(){var e=this.iterators;var t=e.length;this.unsubscribe();if(t===0){this.destination.complete();return}this.active=t;for(var r=0;r<t;r++){var n=e[r];if(n.stillUnsubscribed){var i=this.destination;i.add(n.subscribe(n,r))}else{this.active--}}};e.prototype.notifyInactive=function(){this.active--;if(this.active===0){this.destination.complete()}};e.prototype.checkIterators=function(){var e=this.iterators;var t=e.length;var r=this.destination;for(var n=0;n<t;n++){var i=e[n];if(typeof i.hasValue==="function"&&!i.hasValue()){return}}var o=false;var a=[];for(var n=0;n<t;n++){var i=e[n];var s=i.next();if(i.hasCompleted()){o=true}if(s.done){r.complete();return}a.push(s.value)}if(this.resultSelector){this._tryresultSelector(a)}else{r.next(a)}if(o){r.complete()}};e.prototype._tryresultSelector=function(e){var t;try{t=this.resultSelector.apply(this,e)}catch(e){this.destination.error(e);return}this.destination.next(t)};return e}(a.Subscriber);r.ZipSubscriber=p;var f=function(){function e(e){this.iterator=e;this.nextResult=e.next()}e.prototype.hasValue=function(){return true};e.prototype.next=function(){var e=this.nextResult;this.nextResult=this.iterator.next();return e};e.prototype.hasCompleted=function(){var e=this.nextResult;return e&&e.done};return e}();var d=function(){function e(e){this.array=e;this.index=0;this.length=0;this.length=e.length}e.prototype[c.iterator]=function(){return this};e.prototype.next=function(e){var t=this.index++;var r=this.array;return t<this.length?{value:r[t],done:false}:{value:null,done:true}};e.prototype.hasValue=function(){return this.array.length>this.index};e.prototype.hasCompleted=function(){return this.array.length===this.index};return e}();var v=function(i){n(e,i);function e(e,t,r){var n=i.call(this,e)||this;n.parent=t;n.observable=r;n.stillUnsubscribed=true;n.buffer=[];n.isComplete=false;return n}e.prototype[c.iterator]=function(){return this};e.prototype.next=function(){var e=this.buffer;if(e.length===0&&this.isComplete){return{value:null,done:true}}else{return{value:e.shift(),done:false}}};e.prototype.hasValue=function(){return this.buffer.length>0};e.prototype.hasCompleted=function(){return this.buffer.length===0&&this.isComplete};e.prototype.notifyComplete=function(){if(this.buffer.length>0){this.isComplete=true;this.parent.notifyInactive()}else{this.destination.complete()}};e.prototype.notifyNext=function(e,t,r,n,i){this.buffer.push(t);this.parent.checkIterators()};e.prototype.subscribe=function(e,t){return u.subscribeToResult(this,this.observable,this,t)};return e}(s.OuterSubscriber)},{"../../internal/symbol/iterator":190,"../OuterSubscriber":34,"../Subscriber":39,"../util/isArray":203,"../util/subscribeToResult":222,"./fromArray":52}],73:[function(e,t,r){"use strict";var i=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var o=e("../util/tryCatch");var a=e("../util/errorObject");var n=e("../OuterSubscriber");var s=e("../util/subscribeToResult");function u(r){return function e(t){return t.lift(new c(r))}}r.audit=u;var c=function(){function e(e){this.durationSelector=e}e.prototype.call=function(e,t){return t.subscribe(new h(e,this.durationSelector))};return e}();var h=function(n){i(e,n);function e(e,t){var r=n.call(this,e)||this;r.durationSelector=t;r.hasValue=false;return r}e.prototype._next=function(e){this.value=e;this.hasValue=true;if(!this.throttled){var t=o.tryCatch(this.durationSelector)(e);if(t===a.errorObject){this.destination.error(a.errorObject.e)}else{var r=s.subscribeToResult(this,t);if(!r||r.closed){this.clearThrottle()}else{this.add(this.throttled=r)}}}};e.prototype.clearThrottle=function(){var e=this,t=e.value,r=e.hasValue,n=e.throttled;if(n){this.remove(n);this.throttled=null;n.unsubscribe()}if(r){this.value=null;this.hasValue=false;this.destination.next(t)}};e.prototype.notifyNext=function(e,t,r,n){this.clearThrottle()};e.prototype.notifyComplete=function(){this.clearThrottle()};return e}(n.OuterSubscriber)},{"../OuterSubscriber":34,"../util/errorObject":200,"../util/subscribeToResult":222,"../util/tryCatch":224}],74:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("../scheduler/async");var i=e("./audit");var o=e("../observable/timer");function a(e,t){if(t===void 0){t=n.async}return i.audit(function(){return o.timer(e,t)})}r.auditTime=a},{"../observable/timer":70,"../scheduler/async":188,"./audit":73}],75:[function(e,t,r){"use strict";var i=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var n=e("../OuterSubscriber");var o=e("../util/subscribeToResult");function a(r){return function e(t){return t.lift(new s(r))}}r.buffer=a;var s=function(){function e(e){this.closingNotifier=e}e.prototype.call=function(e,t){return t.subscribe(new u(e,this.closingNotifier))};return e}();var u=function(n){i(e,n);function e(e,t){var r=n.call(this,e)||this;r.buffer=[];r.add(o.subscribeToResult(r,t));return r}e.prototype._next=function(e){this.buffer.push(e)};e.prototype.notifyNext=function(e,t,r,n,i){var o=this.buffer;this.buffer=[];this.destination.next(o)};return e}(n.OuterSubscriber)},{"../OuterSubscriber":34,"../util/subscribeToResult":222}],76:[function(e,t,r){"use strict";var o=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var n=e("../Subscriber");function i(r,n){if(n===void 0){n=null}return function e(t){return t.lift(new a(r,n))}}r.bufferCount=i;var a=function(){function e(e,t){this.bufferSize=e;this.startBufferEvery=t;if(!t||e===t){this.subscriberClass=s}else{this.subscriberClass=u}}e.prototype.call=function(e,t){return t.subscribe(new this.subscriberClass(e,this.bufferSize,this.startBufferEvery))};return e}();var s=function(n){o(e,n);function e(e,t){var r=n.call(this,e)||this;r.bufferSize=t;r.buffer=[];return r}e.prototype._next=function(e){var t=this.buffer;t.push(e);if(t.length==this.bufferSize){this.destination.next(t);this.buffer=[]}};e.prototype._complete=function(){var e=this.buffer;if(e.length>0){this.destination.next(e)}n.prototype._complete.call(this)};return e}(n.Subscriber);var u=function(i){o(e,i);function e(e,t,r){var n=i.call(this,e)||this;n.bufferSize=t;n.startBufferEvery=r;n.buffers=[];n.count=0;return n}e.prototype._next=function(e){var t=this,r=t.bufferSize,n=t.startBufferEvery,i=t.buffers,o=t.count;this.count++;if(o%n===0){i.push([])}for(var a=i.length;a--;){var s=i[a];s.push(e);if(s.length===r){i.splice(a,1);this.destination.next(s)}}};e.prototype._complete=function(){var e=this,t=e.buffers,r=e.destination;while(t.length>0){var n=t.shift();if(n.length>0){r.next(n)}}i.prototype._complete.call(this)};return e}(n.Subscriber)},{"../Subscriber":39}],77:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var a=e("../scheduler/async");var i=e("../Subscriber");var s=e("../util/isScheduler");function o(r){var e=arguments.length;var n=a.async;if(s.isScheduler(arguments[arguments.length-1])){n=arguments[arguments.length-1];e--}var i=null;if(e>=2){i=arguments[1]}var o=Number.POSITIVE_INFINITY;if(e>=3){o=arguments[2]}return function e(t){return t.lift(new u(r,i,o,n))}}r.bufferTime=o;var u=function(){function e(e,t,r,n){this.bufferTimeSpan=e;this.bufferCreationInterval=t;this.maxBufferSize=r;this.scheduler=n}e.prototype.call=function(e,t){return t.subscribe(new h(e,this.bufferTimeSpan,this.bufferCreationInterval,this.maxBufferSize,this.scheduler))};return e}();var c=function(){function e(){this.buffer=[]}return e}();var h=function(h){n(e,h);function e(e,t,r,n,i){var o=h.call(this,e)||this;o.bufferTimeSpan=t;o.bufferCreationInterval=r;o.maxBufferSize=n;o.scheduler=i;o.contexts=[];var a=o.openContext();o.timespanOnly=r==null||r<0;if(o.timespanOnly){var s={subscriber:o,context:a,bufferTimeSpan:t};o.add(a.closeAction=i.schedule(l,t,s))}else{var u={subscriber:o,context:a};var c={bufferTimeSpan:t,bufferCreationInterval:r,subscriber:o,scheduler:i};o.add(a.closeAction=i.schedule(f,t,u));o.add(i.schedule(p,r,c))}return o}e.prototype._next=function(e){var t=this.contexts;var r=t.length;var n;for(var i=0;i<r;i++){var o=t[i];var a=o.buffer;a.push(e);if(a.length==this.maxBufferSize){n=o}}if(n){this.onBufferFull(n)}};e.prototype._error=function(e){this.contexts.length=0;h.prototype._error.call(this,e)};e.prototype._complete=function(){var e=this,t=e.contexts,r=e.destination;while(t.length>0){var n=t.shift();r.next(n.buffer)}h.prototype._complete.call(this)};e.prototype._unsubscribe=function(){this.contexts=null};e.prototype.onBufferFull=function(e){this.closeContext(e);var t=e.closeAction;t.unsubscribe();this.remove(t);if(!this.closed&&this.timespanOnly){e=this.openContext();var r=this.bufferTimeSpan;var n={subscriber:this,context:e,bufferTimeSpan:r};this.add(e.closeAction=this.scheduler.schedule(l,r,n))}};e.prototype.openContext=function(){var e=new c;this.contexts.push(e);return e};e.prototype.closeContext=function(e){this.destination.next(e.buffer);var t=this.contexts;var r=t?t.indexOf(e):-1;if(r>=0){t.splice(t.indexOf(e),1)}};return e}(i.Subscriber);function l(e){var t=e.subscriber;var r=e.context;if(r){t.closeContext(r)}if(!t.closed){e.context=t.openContext();e.context.closeAction=this.schedule(e,e.bufferTimeSpan)}}function p(e){var t=e.bufferCreationInterval,r=e.bufferTimeSpan,n=e.subscriber,i=e.scheduler;var o=n.openContext();var a=this;if(!n.closed){n.add(o.closeAction=i.schedule(f,r,{subscriber:n,context:o}));a.schedule(e,t)}}function f(e){var t=e.subscriber,r=e.context;t.closeContext(r)}},{"../Subscriber":39,"../scheduler/async":188,"../util/isScheduler":213}],78:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var a=e("../Subscription");var s=e("../util/subscribeToResult");var i=e("../OuterSubscriber");function o(r,n){return function e(t){return t.lift(new u(r,n))}}r.bufferToggle=o;var u=function(){function e(e,t){this.openings=e;this.closingSelector=t}e.prototype.call=function(e,t){return t.subscribe(new c(e,this.openings,this.closingSelector))};return e}();var c=function(i){n(e,i);function e(e,t,r){var n=i.call(this,e)||this;n.openings=t;n.closingSelector=r;n.contexts=[];n.add(s.subscribeToResult(n,t));return n}e.prototype._next=function(e){var t=this.contexts;var r=t.length;for(var n=0;n<r;n++){t[n].buffer.push(e)}};e.prototype._error=function(e){var t=this.contexts;while(t.length>0){var r=t.shift();r.subscription.unsubscribe();r.buffer=null;r.subscription=null}this.contexts=null;i.prototype._error.call(this,e)};e.prototype._complete=function(){var e=this.contexts;while(e.length>0){var t=e.shift();this.destination.next(t.buffer);t.subscription.unsubscribe();t.buffer=null;t.subscription=null}this.contexts=null;i.prototype._complete.call(this)};e.prototype.notifyNext=function(e,t,r,n,i){e?this.closeBuffer(e):this.openBuffer(t)};e.prototype.notifyComplete=function(e){this.closeBuffer(e.context)};e.prototype.openBuffer=function(e){try{var t=this.closingSelector;var r=t.call(this,e);if(r){this.trySubscribe(r)}}catch(e){this._error(e)}};e.prototype.closeBuffer=function(e){var t=this.contexts;if(t&&e){var r=e.buffer,n=e.subscription;this.destination.next(r);t.splice(t.indexOf(e),1);this.remove(n);n.unsubscribe()}};e.prototype.trySubscribe=function(e){var t=this.contexts;var r=[];var n=new a.Subscription;var i={buffer:r,subscription:n};t.push(i);var o=s.subscribeToResult(this,e,i);if(!o||o.closed){this.closeBuffer(i)}else{o.context=i;this.add(o);n.add(o)}};return e}(i.OuterSubscriber)},{"../OuterSubscriber":34,"../Subscription":40,"../util/subscribeToResult":222}],79:[function(e,t,r){"use strict";var i=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var o=e("../Subscription");var a=e("../util/tryCatch");var s=e("../util/errorObject");var n=e("../OuterSubscriber");var u=e("../util/subscribeToResult");function c(t){return function(e){return e.lift(new h(t))}}r.bufferWhen=c;var h=function(){function e(e){this.closingSelector=e}e.prototype.call=function(e,t){return t.subscribe(new l(e,this.closingSelector))};return e}();var l=function(n){i(e,n);function e(e,t){var r=n.call(this,e)||this;r.closingSelector=t;r.subscribing=false;r.openBuffer();return r}e.prototype._next=function(e){this.buffer.push(e)};e.prototype._complete=function(){var e=this.buffer;if(e){this.destination.next(e)}n.prototype._complete.call(this)};e.prototype._unsubscribe=function(){this.buffer=null;this.subscribing=false};e.prototype.notifyNext=function(e,t,r,n,i){this.openBuffer()};e.prototype.notifyComplete=function(){if(this.subscribing){this.complete()}else{this.openBuffer()}};e.prototype.openBuffer=function(){var e=this.closingSubscription;if(e){this.remove(e);e.unsubscribe()}var t=this.buffer;if(this.buffer){this.destination.next(t)}this.buffer=[];var r=a.tryCatch(this.closingSelector)();if(r===s.errorObject){this.error(s.errorObject.e)}else{e=new o.Subscription;this.closingSubscription=e;this.add(e);this.subscribing=true;e.add(u.subscribeToResult(this,r));this.subscribing=false}};return e}(n.OuterSubscriber)},{"../OuterSubscriber":34,"../Subscription":40,"../util/errorObject":200,"../util/subscribeToResult":222,"../util/tryCatch":224}],80:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var i=e("../OuterSubscriber");var o=e("../InnerSubscriber");var a=e("../util/subscribeToResult");function s(i){return function e(t){var r=new u(i);var n=t.lift(r);return r.caught=n}}r.catchError=s;var u=function(){function e(e){this.selector=e}e.prototype.call=function(e,t){return t.subscribe(new c(e,this.selector,this.caught))};return e}();var c=function(i){n(e,i);function e(e,t,r){var n=i.call(this,e)||this;n.selector=t;n.caught=r;return n}e.prototype.error=function(e){if(!this.isStopped){var t=void 0;try{t=this.selector(e,this.caught)}catch(e){i.prototype.error.call(this,e);return}this._unsubscribeAndRecycle();var r=new o.InnerSubscriber(this,undefined,undefined);this.add(r);a.subscribeToResult(this,t,undefined,undefined,r)}};return e}(i.OuterSubscriber)},{"../InnerSubscriber":30,"../OuterSubscriber":34,"../util/subscribeToResult":222}],81:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("../observable/combineLatest");function i(t){return function(e){return e.lift(new n.CombineLatestOperator(t))}}r.combineAll=i},{"../observable/combineLatest":46}],82:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("../util/isArray");var i=e("../observable/combineLatest");var o=e("../observable/from");var a={};function s(){var t=[];for(var e=0;e<arguments.length;e++){t[e]=arguments[e]}var r=null;if(typeof t[t.length-1]==="function"){r=t.pop()}if(t.length===1&&n.isArray(t[0])){t=t[0].slice()}return function(e){return e.lift.call(o.from([e].concat(t)),new i.CombineLatestOperator(r))}}r.combineLatest=s},{"../observable/combineLatest":46,"../observable/from":51,"../util/isArray":203}],83:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("../observable/concat");function i(){var t=[];for(var e=0;e<arguments.length;e++){t[e]=arguments[e]}return function(e){return e.lift.call(n.concat.apply(void 0,[e].concat(t)))}}r.concat=i},{"../observable/concat":47}],84:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("./mergeAll");function i(){return n.mergeAll(1)}r.concatAll=i},{"./mergeAll":117}],85:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("./mergeMap");function i(e,t){return n.mergeMap(e,t,1)}r.concatMap=i},{"./mergeMap":118}],86:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("./concatMap");function i(e,t){return n.concatMap(function(){return e},t)}r.concatMapTo=i},{"./concatMap":85}],87:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var i=e("../Subscriber");function o(t){return function(e){return e.lift(new a(t,e))}}r.count=o;var a=function(){function e(e,t){this.predicate=e;this.source=t}e.prototype.call=function(e,t){return t.subscribe(new s(e,this.predicate,this.source))};return e}();var s=function(i){n(e,i);function e(e,t,r){var n=i.call(this,e)||this;n.predicate=t;n.source=r;n.count=0;n.index=0;return n}e.prototype._next=function(e){if(this.predicate){this._tryPredicate(e)}else{this.count++}};e.prototype._tryPredicate=function(e){var t;try{t=this.predicate(e,this.index++,this.source)}catch(e){this.destination.error(e);return}if(t){this.count++}};e.prototype._complete=function(){this.destination.next(this.count);this.destination.complete()};return e}(i.Subscriber)},{"../Subscriber":39}],88:[function(e,t,r){"use strict";var i=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var n=e("../OuterSubscriber");var o=e("../util/subscribeToResult");function a(t){return function(e){return e.lift(new s(t))}}r.debounce=a;var s=function(){function e(e){this.durationSelector=e}e.prototype.call=function(e,t){return t.subscribe(new u(e,this.durationSelector))};return e}();var u=function(n){i(e,n);function e(e,t){var r=n.call(this,e)||this;r.durationSelector=t;r.hasValue=false;r.durationSubscription=null;return r}e.prototype._next=function(e){try{var t=this.durationSelector.call(this,e);if(t){this._tryNext(e,t)}}catch(e){this.destination.error(e)}};e.prototype._complete=function(){this.emitValue();this.destination.complete()};e.prototype._tryNext=function(e,t){var r=this.durationSubscription;this.value=e;this.hasValue=true;if(r){r.unsubscribe();this.remove(r)}r=o.subscribeToResult(this,t);if(r&&!r.closed){this.add(this.durationSubscription=r)}};e.prototype.notifyNext=function(e,t,r,n,i){this.emitValue()};e.prototype.notifyComplete=function(){this.emitValue()};e.prototype.emitValue=function(){if(this.hasValue){var e=this.value;var t=this.durationSubscription;if(t){this.durationSubscription=null;t.unsubscribe();this.remove(t)}this.value=null;this.hasValue=false;n.prototype._next.call(this,e)}};return e}(n.OuterSubscriber)},{"../OuterSubscriber":34,"../util/subscribeToResult":222}],89:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var i=e("../Subscriber");var o=e("../scheduler/async");function a(t,r){if(r===void 0){r=o.async}return function(e){return e.lift(new s(t,r))}}r.debounceTime=a;var s=function(){function e(e,t){this.dueTime=e;this.scheduler=t}e.prototype.call=function(e,t){return t.subscribe(new u(e,this.dueTime,this.scheduler))};return e}();var u=function(i){n(e,i);function e(e,t,r){var n=i.call(this,e)||this;n.dueTime=t;n.scheduler=r;n.debouncedSubscription=null;n.lastValue=null;n.hasValue=false;return n}e.prototype._next=function(e){this.clearDebounce();this.lastValue=e;this.hasValue=true;this.add(this.debouncedSubscription=this.scheduler.schedule(c,this.dueTime,this))};e.prototype._complete=function(){this.debouncedNext();this.destination.complete()};e.prototype.debouncedNext=function(){this.clearDebounce();if(this.hasValue){var e=this.lastValue;this.lastValue=null;this.hasValue=false;this.destination.next(e)}};e.prototype.clearDebounce=function(){var e=this.debouncedSubscription;if(e!==null){this.remove(e);e.unsubscribe();this.debouncedSubscription=null}};return e}(i.Subscriber);function c(e){e.debouncedNext()}},{"../Subscriber":39,"../scheduler/async":188}],90:[function(e,t,r){"use strict";var i=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var n=e("../Subscriber");function o(t){if(t===void 0){t=null}return function(e){return e.lift(new a(t))}}r.defaultIfEmpty=o;var a=function(){function e(e){this.defaultValue=e}e.prototype.call=function(e,t){return t.subscribe(new s(e,this.defaultValue))};return e}();var s=function(n){i(e,n);function e(e,t){var r=n.call(this,e)||this;r.defaultValue=t;r.isEmpty=true;return r}e.prototype._next=function(e){this.isEmpty=false;this.destination.next(e)};e.prototype._complete=function(){if(this.isEmpty){this.destination.next(this.defaultValue)}this.destination.complete()};return e}(n.Subscriber)},{"../Subscriber":39}],91:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var i=e("../scheduler/async");var o=e("../util/isDate");var a=e("../Subscriber");var s=e("../Notification");function u(e,t){if(t===void 0){t=i.async}var r=o.isDate(e);var n=r?+e-t.now():Math.abs(e);return function(e){return e.lift(new c(n,t))}}r.delay=u;var c=function(){function e(e,t){this.delay=e;this.scheduler=t}e.prototype.call=function(e,t){return t.subscribe(new h(e,this.delay,this.scheduler))};return e}();var h=function(i){n(r,i);function r(e,t,r){var n=i.call(this,e)||this;n.delay=t;n.scheduler=r;n.queue=[];n.active=false;n.errored=false;return n}r.dispatch=function(e){var t=e.source;var r=t.queue;var n=e.scheduler;var i=e.destination;while(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(e,o)}else{this.unsubscribe();t.active=false}};r.prototype._schedule=function(e){this.active=true;var t=this.destination;t.add(e.schedule(r.dispatch,this.delay,{source:this,destination:this.destination,scheduler:e}))};r.prototype.scheduleNotification=function(e){if(this.errored===true){return}var t=this.scheduler;var r=new l(t.now()+this.delay,e);this.queue.push(r);if(this.active===false){this._schedule(t)}};r.prototype._next=function(e){this.scheduleNotification(s.Notification.createNext(e))};r.prototype._error=function(e){this.errored=true;this.queue=[];this.destination.error(e);this.unsubscribe()};r.prototype._complete=function(){this.scheduleNotification(s.Notification.createComplete());this.unsubscribe()};return r}(a.Subscriber);var l=function(){function e(e,t){this.time=e;this.notification=t}return e}()},{"../Notification":31,"../Subscriber":39,"../scheduler/async":188,"../util/isDate":205}],92:[function(e,t,r){"use strict";var i=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var n=e("../Subscriber");var o=e("../Observable");var a=e("../OuterSubscriber");var s=e("../util/subscribeToResult");function u(t,r){if(r){return function(e){return new l(e,r).lift(new c(t))}}return function(e){return e.lift(new c(t))}}r.delayWhen=u;var c=function(){function e(e){this.delayDurationSelector=e}e.prototype.call=function(e,t){return t.subscribe(new h(e,this.delayDurationSelector))};return e}();var h=function(n){i(e,n);function e(e,t){var r=n.call(this,e)||this;r.delayDurationSelector=t;r.completed=false;r.delayNotifierSubscriptions=[];r.index=0;return r}e.prototype.notifyNext=function(e,t,r,n,i){this.destination.next(e);this.removeSubscription(i);this.tryComplete()};e.prototype.notifyError=function(e,t){this._error(e)};e.prototype.notifyComplete=function(e){var t=this.removeSubscription(e);if(t){this.destination.next(t)}this.tryComplete()};e.prototype._next=function(e){var t=this.index++;try{var r=this.delayDurationSelector(e,t);if(r){this.tryDelay(r,e)}}catch(e){this.destination.error(e)}};e.prototype._complete=function(){this.completed=true;this.tryComplete();this.unsubscribe()};e.prototype.removeSubscription=function(e){e.unsubscribe();var t=this.delayNotifierSubscriptions.indexOf(e);if(t!==-1){this.delayNotifierSubscriptions.splice(t,1)}return e.outerValue};e.prototype.tryDelay=function(e,t){var r=s.subscribeToResult(this,e,t);if(r&&!r.closed){var n=this.destination;n.add(r);this.delayNotifierSubscriptions.push(r)}};e.prototype.tryComplete=function(){if(this.completed&&this.delayNotifierSubscriptions.length===0){this.destination.complete()}};return e}(a.OuterSubscriber);var l=function(n){i(e,n);function e(e,t){var r=n.call(this)||this;r.source=e;r.subscriptionDelay=t;return r}e.prototype._subscribe=function(e){this.subscriptionDelay.subscribe(new p(e,this.source))};return e}(o.Observable);var p=function(n){i(e,n);function e(e,t){var r=n.call(this)||this;r.parent=e;r.source=t;r.sourceSubscribed=false;return r}e.prototype._next=function(e){this.subscribeToSource()};e.prototype._error=function(e){this.unsubscribe();this.parent.error(e)};e.prototype._complete=function(){this.unsubscribe();this.subscribeToSource()};e.prototype.subscribeToSource=function(){if(!this.sourceSubscribed){this.sourceSubscribed=true;this.unsubscribe();this.source.subscribe(this.parent)}};return e}(n.Subscriber)},{"../Observable":32,"../OuterSubscriber":34,"../Subscriber":39,"../util/subscribeToResult":222}],93:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var i=e("../Subscriber");function o(){return function e(t){return t.lift(new a)}}r.dematerialize=o;var a=function(){function e(){}e.prototype.call=function(e,t){return t.subscribe(new s(e))};return e}();var s=function(t){n(e,t);function e(e){return t.call(this,e)||this}e.prototype._next=function(e){e.observe(this.destination)};return e}(i.Subscriber)},{"../Subscriber":39}],94:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var i=e("../OuterSubscriber");var o=e("../util/subscribeToResult");function a(t,r){return function(e){return e.lift(new s(t,r))}}r.distinct=a;var s=function(){function e(e,t){this.keySelector=e;this.flushes=t}e.prototype.call=function(e,t){return t.subscribe(new u(e,this.keySelector,this.flushes))};return e}();var u=function(i){n(e,i);function e(e,t,r){var n=i.call(this,e)||this;n.keySelector=t;n.values=new Set;if(r){n.add(o.subscribeToResult(n,r))}return n}e.prototype.notifyNext=function(e,t,r,n,i){this.values.clear()};e.prototype.notifyError=function(e,t){this._error(e)};e.prototype._next=function(e){if(this.keySelector){this._useKeySelector(e)}else{this._finalizeNext(e,e)}};e.prototype._useKeySelector=function(e){var t;var r=this.destination;try{t=this.keySelector(e)}catch(e){r.error(e);return}this._finalizeNext(t,e)};e.prototype._finalizeNext=function(e,t){var r=this.values;if(!r.has(e)){r.add(e);this.destination.next(t)}};return e}(i.OuterSubscriber);r.DistinctSubscriber=u},{"../OuterSubscriber":34,"../util/subscribeToResult":222}],95:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var i=e("../Subscriber");var o=e("../util/tryCatch");var a=e("../util/errorObject");function s(t,r){return function(e){return e.lift(new u(t,r))}}r.distinctUntilChanged=s;var u=function(){function e(e,t){this.compare=e;this.keySelector=t}e.prototype.call=function(e,t){return t.subscribe(new c(e,this.compare,this.keySelector))};return e}();var c=function(i){n(e,i);function e(e,t,r){var n=i.call(this,e)||this;n.keySelector=r;n.hasKey=false;if(typeof t==="function"){n.compare=t}return n}e.prototype.compare=function(e,t){return e===t};e.prototype._next=function(e){var t=this.keySelector;var r=e;if(t){r=o.tryCatch(this.keySelector)(e);if(r===a.errorObject){return this.destination.error(a.errorObject.e)}}var n=false;if(this.hasKey){n=o.tryCatch(this.compare)(this.key,r);if(n===a.errorObject){return this.destination.error(a.errorObject.e)}}else{this.hasKey=true}if(Boolean(n)===false){this.key=r;this.destination.next(e)}};return e}(i.Subscriber)},{"../Subscriber":39,"../util/errorObject":200,"../util/tryCatch":224}],96:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var i=e("./distinctUntilChanged");function n(r,n){return i.distinctUntilChanged(function(e,t){return n?n(e[r],t[r]):e[r]===t[r]})}r.distinctUntilKeyChanged=n},{"./distinctUntilChanged":95}],97:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var i=e("../util/ArgumentOutOfRangeError");var o=e("./filter");var a=e("./throwIfEmpty");var s=e("./defaultIfEmpty");var u=e("./take");function n(r,t){if(r<0){throw new i.ArgumentOutOfRangeError}var n=arguments.length>=2;return function(e){return e.pipe(o.filter(function(e,t){return t===r}),u.take(1),n?s.defaultIfEmpty(t):a.throwIfEmpty(function(){return new i.ArgumentOutOfRangeError}))}}r.elementAt=n},{"../util/ArgumentOutOfRangeError":193,"./defaultIfEmpty":90,"./filter":103,"./take":155,"./throwIfEmpty":162}],98:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var i=e("../observable/fromArray");var o=e("../observable/scalar");var a=e("../observable/empty");var s=e("../observable/concat");var u=e("../util/isScheduler");function n(){var n=[];for(var e=0;e<arguments.length;e++){n[e]=arguments[e]}return function(e){var t=n[n.length-1];if(u.isScheduler(t)){n.pop()}else{t=null}var r=n.length;if(r===1&&!t){return s.concat(e,o.scalar(n[0]))}else if(r>0){return s.concat(e,i.fromArray(n,t))}else{return s.concat(e,a.empty(t))}}}r.endWith=n},{"../observable/concat":47,"../observable/empty":49,"../observable/fromArray":52,"../observable/scalar":68,"../util/isScheduler":213}],99:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var i=e("../Subscriber");function o(t,r){return function(e){return e.lift(new a(t,r,e))}}r.every=o;var a=function(){function e(e,t,r){this.predicate=e;this.thisArg=t;this.source=r}e.prototype.call=function(e,t){return t.subscribe(new s(e,this.predicate,this.thisArg,this.source))};return e}();var s=function(o){n(e,o);function e(e,t,r,n){var i=o.call(this,e)||this;i.predicate=t;i.thisArg=r;i.source=n;i.index=0;i.thisArg=r||i;return i}e.prototype.notifyComplete=function(e){this.destination.next(e);this.destination.complete()};e.prototype._next=function(e){var t=false;try{t=this.predicate.call(this.thisArg,e,this.index++,this.source)}catch(e){this.destination.error(e);return}if(!t){this.notifyComplete(false)}};e.prototype._complete=function(){this.notifyComplete(true)};return e}(i.Subscriber)},{"../Subscriber":39}],100:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var i=e("../OuterSubscriber");var o=e("../util/subscribeToResult");function a(){return function(e){return e.lift(new s)}}r.exhaust=a;var s=function(){function e(){}e.prototype.call=function(e,t){return t.subscribe(new u(e))};return e}();var u=function(r){n(e,r);function e(e){var t=r.call(this,e)||this;t.hasCompleted=false;t.hasSubscription=false;return t}e.prototype._next=function(e){if(!this.hasSubscription){this.hasSubscription=true;this.add(o.subscribeToResult(this,e))}};e.prototype._complete=function(){this.hasCompleted=true;if(!this.hasSubscription){this.destination.complete()}};e.prototype.notifyComplete=function(e){this.remove(e);this.hasSubscription=false;if(this.hasCompleted){this.destination.complete()}};return e}(i.OuterSubscriber)},{"../OuterSubscriber":34,"../util/subscribeToResult":222}],101:[function(e,t,r){"use strict";var i=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var n=e("../OuterSubscriber");var o=e("../InnerSubscriber");var a=e("../util/subscribeToResult");var s=e("./map");var u=e("../observable/from");function c(t,i){if(i){return function(e){return e.pipe(c(function(r,n){return u.from(t(r,n)).pipe(s.map(function(e,t){return i(r,e,n,t)}))}))}}return function(e){return e.lift(new h(t))}}r.exhaustMap=c;var h=function(){function e(e){this.project=e}e.prototype.call=function(e,t){return t.subscribe(new l(e,this.project))};return e}();var l=function(n){i(e,n);function e(e,t){var r=n.call(this,e)||this;r.project=t;r.hasSubscription=false;r.hasCompleted=false;r.index=0;return r}e.prototype._next=function(e){if(!this.hasSubscription){this.tryNext(e)}};e.prototype.tryNext=function(e){var t;var r=this.index++;try{t=this.project(e,r)}catch(e){this.destination.error(e);return}this.hasSubscription=true;this._innerSub(t,e,r)};e.prototype._innerSub=function(e,t,r){var n=new o.InnerSubscriber(this,undefined,undefined);var i=this.destination;i.add(n);a.subscribeToResult(this,e,t,r,n)};e.prototype._complete=function(){this.hasCompleted=true;if(!this.hasSubscription){this.destination.complete()}this.unsubscribe()};e.prototype.notifyNext=function(e,t,r,n,i){this.destination.next(t)};e.prototype.notifyError=function(e){this.destination.error(e)};e.prototype.notifyComplete=function(e){var t=this.destination;t.remove(e);this.hasSubscription=false;if(this.hasCompleted){this.destination.complete()}};return e}(n.OuterSubscriber)},{"../InnerSubscriber":30,"../OuterSubscriber":34,"../observable/from":51,"../util/subscribeToResult":222,"./map":112}],102:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var s=e("../util/tryCatch");var u=e("../util/errorObject");var i=e("../OuterSubscriber");var c=e("../util/subscribeToResult");function o(t,r,n){if(r===void 0){r=Number.POSITIVE_INFINITY}if(n===void 0){n=undefined}r=(r||0)<1?Number.POSITIVE_INFINITY:r;return function(e){return e.lift(new a(t,r,n))}}r.expand=o;var a=function(){function e(e,t,r){this.project=e;this.concurrent=t;this.scheduler=r}e.prototype.call=function(e,t){return t.subscribe(new h(e,this.project,this.concurrent,this.scheduler))};return e}();r.ExpandOperator=a;var h=function(o){n(a,o);function a(e,t,r,n){var i=o.call(this,e)||this;i.project=t;i.concurrent=r;i.scheduler=n;i.index=0;i.active=0;i.hasCompleted=false;if(r<Number.POSITIVE_INFINITY){i.buffer=[]}return i}a.dispatch=function(e){var t=e.subscriber,r=e.result,n=e.value,i=e.index;t.subscribeToProjection(r,n,i)};a.prototype._next=function(e){var t=this.destination;if(t.closed){this._complete();return}var r=this.index++;if(this.active<this.concurrent){t.next(e);var n=s.tryCatch(this.project)(e,r);if(n===u.errorObject){t.error(u.errorObject.e)}else if(!this.scheduler){this.subscribeToProjection(n,e,r)}else{var i={subscriber:this,result:n,value:e,index:r};var o=this.destination;o.add(this.scheduler.schedule(a.dispatch,0,i))}}else{this.buffer.push(e)}};a.prototype.subscribeToProjection=function(e,t,r){this.active++;var n=this.destination;n.add(c.subscribeToResult(this,e,t,r))};a.prototype._complete=function(){this.hasCompleted=true;if(this.hasCompleted&&this.active===0){this.destination.complete()}this.unsubscribe()};a.prototype.notifyNext=function(e,t,r,n,i){this._next(t)};a.prototype.notifyComplete=function(e){var t=this.buffer;var r=this.destination;r.remove(e);this.active--;if(t&&t.length>0){this._next(t.shift())}if(this.hasCompleted&&this.active===0){this.destination.complete()}};return a}(i.OuterSubscriber);r.ExpandSubscriber=h},{"../OuterSubscriber":34,"../util/errorObject":200,"../util/subscribeToResult":222,"../util/tryCatch":224}],103:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var i=e("../Subscriber");function o(r,n){return function e(t){return t.lift(new a(r,n))}}r.filter=o;var a=function(){function e(e,t){this.predicate=e;this.thisArg=t}e.prototype.call=function(e,t){return t.subscribe(new s(e,this.predicate,this.thisArg))};return e}();var s=function(i){n(e,i);function e(e,t,r){var n=i.call(this,e)||this;n.predicate=t;n.thisArg=r;n.count=0;return n}e.prototype._next=function(e){var t;try{t=this.predicate.call(this.thisArg,e,this.count++)}catch(e){this.destination.error(e);return}if(t){this.destination.next(e)}};return e}(i.Subscriber)},{"../Subscriber":39}],104:[function(e,t,r){"use strict";var i=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var n=e("../Subscriber");var o=e("../Subscription");function a(t){return function(e){return e.lift(new s(t))}}r.finalize=a;var s=function(){function e(e){this.callback=e}e.prototype.call=function(e,t){return t.subscribe(new u(e,this.callback))};return e}();var u=function(n){i(e,n);function e(e,t){var r=n.call(this,e)||this;r.add(new o.Subscription(t));return r}return e}(n.Subscriber)},{"../Subscriber":39,"../Subscription":40}],105:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var i=e("../Subscriber");function o(t,r){if(typeof t!=="function"){throw new TypeError("predicate is not a function")}return function(e){return e.lift(new a(t,e,false,r))}}r.find=o;var a=function(){function e(e,t,r,n){this.predicate=e;this.source=t;this.yieldIndex=r;this.thisArg=n}e.prototype.call=function(e,t){return t.subscribe(new s(e,this.predicate,this.source,this.yieldIndex,this.thisArg))};return e}();r.FindValueOperator=a;var s=function(a){n(e,a);function e(e,t,r,n,i){var o=a.call(this,e)||this;o.predicate=t;o.source=r;o.yieldIndex=n;o.thisArg=i;o.index=0;return o}e.prototype.notifyComplete=function(e){var t=this.destination;t.next(e);t.complete();this.unsubscribe()};e.prototype._next=function(e){var t=this,r=t.predicate,n=t.thisArg;var i=this.index++;try{var o=r.call(n||this,e,i,this.source);if(o){this.notifyComplete(this.yieldIndex?i:e)}}catch(e){this.destination.error(e)}};e.prototype._complete=function(){this.notifyComplete(this.yieldIndex?-1:undefined)};return e}(i.Subscriber);r.FindValueSubscriber=s},{"../Subscriber":39}],106:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("../operators/find");function i(t,r){return function(e){return e.lift(new n.FindValueOperator(t,e,true,r))}}r.findIndex=i},{"../operators/find":105}],107:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var i=e("../util/EmptyError");var o=e("./filter");var a=e("./take");var s=e("./defaultIfEmpty");var u=e("./throwIfEmpty");var c=e("../util/identity");function n(n,e){var t=arguments.length>=2;return function(r){return r.pipe(n?o.filter(function(e,t){return n(e,t,r)}):c.identity,a.take(1),t?s.defaultIfEmpty(e):u.throwIfEmpty(function(){return new i.EmptyError}))}}r.first=n},{"../util/EmptyError":194,"../util/identity":202,"./defaultIfEmpty":90,"./filter":103,"./take":155,"./throwIfEmpty":162}],108:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var i=e("../Subscriber");var o=e("../Subscription");var a=e("../Observable");var s=e("../Subject");function u(t,r,n,i){return function(e){return e.lift(new c(t,r,n,i))}}r.groupBy=u;var c=function(){function e(e,t,r,n){this.keySelector=e;this.elementSelector=t;this.durationSelector=r;this.subjectSelector=n}e.prototype.call=function(e,t){return t.subscribe(new h(e,this.keySelector,this.elementSelector,this.durationSelector,this.subjectSelector))};return e}();var h=function(a){n(e,a);function e(e,t,r,n,i){var o=a.call(this,e)||this;o.keySelector=t;o.elementSelector=r;o.durationSelector=n;o.subjectSelector=i;o.groups=null;o.attemptedToUnsubscribe=false;o.count=0;return o}e.prototype._next=function(e){var t;try{t=this.keySelector(e)}catch(e){this.error(e);return}this._group(e,t)};e.prototype._group=function(e,t){var r=this.groups;if(!r){r=this.groups=new Map}var n=r.get(t);var i;if(this.elementSelector){try{i=this.elementSelector(e)}catch(e){this.error(e)}}else{i=e}if(!n){n=this.subjectSelector?this.subjectSelector():new s.Subject;r.set(t,n);var o=new p(t,n,this);this.destination.next(o);if(this.durationSelector){var a=void 0;try{a=this.durationSelector(new p(t,n))}catch(e){this.error(e);return}this.add(a.subscribe(new l(t,n,this)))}}if(!n.closed){n.next(i)}};e.prototype._error=function(r){var e=this.groups;if(e){e.forEach(function(e,t){e.error(r)});e.clear()}this.destination.error(r)};e.prototype._complete=function(){var e=this.groups;if(e){e.forEach(function(e,t){e.complete()});e.clear()}this.destination.complete()};e.prototype.removeGroup=function(e){this.groups.delete(e)};e.prototype.unsubscribe=function(){if(!this.closed){this.attemptedToUnsubscribe=true;if(this.count===0){a.prototype.unsubscribe.call(this)}}};return e}(i.Subscriber);var l=function(i){n(e,i);function e(e,t,r){var n=i.call(this,t)||this;n.key=e;n.group=t;n.parent=r;return n}e.prototype._next=function(e){this.complete()};e.prototype._unsubscribe=function(){var e=this,t=e.parent,r=e.key;this.key=this.parent=null;if(t){t.removeGroup(r)}};return e}(i.Subscriber);var p=function(i){n(e,i);function e(e,t,r){var n=i.call(this)||this;n.key=e;n.groupSubject=t;n.refCountSubscription=r;return n}e.prototype._subscribe=function(e){var t=new o.Subscription;var r=this,n=r.refCountSubscription,i=r.groupSubject;if(n&&!n.closed){t.add(new f(n))}t.add(i.subscribe(e));return t};return e}(a.Observable);r.GroupedObservable=p;var f=function(r){n(e,r);function e(e){var t=r.call(this)||this;t.parent=e;e.count++;return t}e.prototype.unsubscribe=function(){var e=this.parent;if(!e.closed&&!this.closed){r.prototype.unsubscribe.call(this);e.count-=1;if(e.count===0&&e.attemptedToUnsubscribe){e.unsubscribe()}}};return e}(o.Subscription)},{"../Observable":32,"../Subject":37,"../Subscriber":39,"../Subscription":40}],109:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var i=e("../Subscriber");function o(){return function e(t){return t.lift(new a)}}r.ignoreElements=o;var a=function(){function e(){}e.prototype.call=function(e,t){return t.subscribe(new s(e))};return e}();var s=function(e){n(t,e);function t(){return e!==null&&e.apply(this,arguments)||this}t.prototype._next=function(e){};return t}(i.Subscriber)},{"../Subscriber":39}],110:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var i=e("../Subscriber");function o(){return function(e){return e.lift(new a)}}r.isEmpty=o;var a=function(){function e(){}e.prototype.call=function(e,t){return t.subscribe(new s(e))};return e}();var s=function(t){n(e,t);function e(e){return t.call(this,e)||this}e.prototype.notifyComplete=function(e){var t=this.destination;t.next(e);t.complete()};e.prototype._next=function(e){this.notifyComplete(false)};e.prototype._complete=function(){this.notifyComplete(true)};return e}(i.Subscriber)},{"../Subscriber":39}],111:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var i=e("../util/EmptyError");var o=e("./filter");var a=e("./takeLast");var s=e("./throwIfEmpty");var u=e("./defaultIfEmpty");var c=e("../util/identity");function n(n,e){var t=arguments.length>=2;return function(r){return r.pipe(n?o.filter(function(e,t){return n(e,t,r)}):c.identity,a.takeLast(1),t?u.defaultIfEmpty(e):s.throwIfEmpty(function(){return new i.EmptyError}))}}r.last=n},{"../util/EmptyError":194,"../util/identity":202,"./defaultIfEmpty":90,"./filter":103,"./takeLast":156,"./throwIfEmpty":162}],112:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var i=e("../Subscriber");function o(r,n){return function e(t){if(typeof r!=="function"){throw new TypeError("argument is not a function. Are you looking for `mapTo()`?")}return t.lift(new a(r,n))}}r.map=o;var a=function(){function e(e,t){this.project=e;this.thisArg=t}e.prototype.call=function(e,t){return t.subscribe(new s(e,this.project,this.thisArg))};return e}();r.MapOperator=a;var s=function(i){n(e,i);function e(e,t,r){var n=i.call(this,e)||this;n.project=t;n.count=0;n.thisArg=r||n;return n}e.prototype._next=function(e){var t;try{t=this.project.call(this.thisArg,e,this.count++)}catch(e){this.destination.error(e);return}this.destination.next(t)};return e}(i.Subscriber)},{"../Subscriber":39}],113:[function(e,t,r){"use strict";var i=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var n=e("../Subscriber");function o(t){return function(e){return e.lift(new a(t))}}r.mapTo=o;var a=function(){function e(e){this.value=e}e.prototype.call=function(e,t){return t.subscribe(new s(e,this.value))};return e}();var s=function(n){i(e,n);function e(e,t){var r=n.call(this,e)||this;r.value=t;return r}e.prototype._next=function(e){this.destination.next(this.value)};return e}(n.Subscriber)},{"../Subscriber":39}],114:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var i=e("../Subscriber");var o=e("../Notification");function a(){return function e(t){return t.lift(new s)}}r.materialize=a;var s=function(){function e(){}e.prototype.call=function(e,t){return t.subscribe(new u(e))};return e}();var u=function(t){n(e,t);function e(e){return t.call(this,e)||this}e.prototype._next=function(e){this.destination.next(o.Notification.createNext(e))};e.prototype._error=function(e){var t=this.destination;t.next(o.Notification.createError(e));t.complete()};e.prototype._complete=function(){var e=this.destination;e.next(o.Notification.createComplete());e.complete()};return e}(i.Subscriber)},{"../Notification":31,"../Subscriber":39}],115:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("./reduce");function i(r){var e=typeof r==="function"?function(e,t){return r(e,t)>0?e:t}:function(e,t){return e>t?e:t};return n.reduce(e)}r.max=i},{"./reduce":133}],116:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("../observable/merge");function i(){var t=[];for(var e=0;e<arguments.length;e++){t[e]=arguments[e]}return function(e){return e.lift.call(n.merge.apply(void 0,[e].concat(t)))}}r.merge=i},{"../observable/merge":61}],117:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("./mergeMap");var i=e("../util/identity");function o(e){if(e===void 0){e=Number.POSITIVE_INFINITY}return n.mergeMap(i.identity,e)}r.mergeAll=o},{"../util/identity":202,"./mergeMap":118}],118:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var o=e("../util/subscribeToResult");var i=e("../OuterSubscriber");var a=e("../InnerSubscriber");var s=e("./map");var u=e("../observable/from");function c(t,i,r){if(r===void 0){r=Number.POSITIVE_INFINITY}if(typeof i==="function"){return function(e){return e.pipe(c(function(r,n){return u.from(t(r,n)).pipe(s.map(function(e,t){return i(r,e,n,t)}))},r))}}else if(typeof i==="number"){r=i}return function(e){return e.lift(new h(t,r))}}r.mergeMap=c;var h=function(){function e(e,t){if(t===void 0){t=Number.POSITIVE_INFINITY}this.project=e;this.concurrent=t}e.prototype.call=function(e,t){return t.subscribe(new l(e,this.project,this.concurrent))};return e}();r.MergeMapOperator=h;var l=function(i){n(e,i);function e(e,t,r){if(r===void 0){r=Number.POSITIVE_INFINITY}var n=i.call(this,e)||this;n.project=t;n.concurrent=r;n.hasCompleted=false;n.buffer=[];n.active=0;n.index=0;return n}e.prototype._next=function(e){if(this.active<this.concurrent){this._tryNext(e)}else{this.buffer.push(e)}};e.prototype._tryNext=function(e){var t;var r=this.index++;try{t=this.project(e,r)}catch(e){this.destination.error(e);return}this.active++;this._innerSub(t,e,r)};e.prototype._innerSub=function(e,t,r){var n=new a.InnerSubscriber(this,undefined,undefined);var i=this.destination;i.add(n);o.subscribeToResult(this,e,t,r,n)};e.prototype._complete=function(){this.hasCompleted=true;if(this.active===0&&this.buffer.length===0){this.destination.complete()}this.unsubscribe()};e.prototype.notifyNext=function(e,t,r,n,i){this.destination.next(t)};e.prototype.notifyComplete=function(e){var t=this.buffer;this.remove(e);this.active--;if(t.length>0){this._next(t.shift())}else if(this.active===0&&this.hasCompleted){this.destination.complete()}};return e}(i.OuterSubscriber);r.MergeMapSubscriber=l},{"../InnerSubscriber":30,"../OuterSubscriber":34,"../observable/from":51,"../util/subscribeToResult":222,"./map":112}],119:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("./mergeMap");function i(e,t,r){if(r===void 0){r=Number.POSITIVE_INFINITY}if(typeof t==="function"){return n.mergeMap(function(){return e},t,r)}if(typeof t==="number"){r=t}return n.mergeMap(function(){return e},r)}r.mergeMapTo=i},{"./mergeMap":118}],120:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var i=e("../util/tryCatch");var a=e("../util/errorObject");var s=e("../util/subscribeToResult");var o=e("../OuterSubscriber");var u=e("../InnerSubscriber");function c(t,r,n){if(n===void 0){n=Number.POSITIVE_INFINITY}return function(e){return e.lift(new h(t,r,n))}}r.mergeScan=c;var h=function(){function e(e,t,r){this.accumulator=e;this.seed=t;this.concurrent=r}e.prototype.call=function(e,t){return t.subscribe(new l(e,this.accumulator,this.seed,this.concurrent))};return e}();r.MergeScanOperator=h;var l=function(o){n(e,o);function e(e,t,r,n){var i=o.call(this,e)||this;i.accumulator=t;i.acc=r;i.concurrent=n;i.hasValue=false;i.hasCompleted=false;i.buffer=[];i.active=0;i.index=0;return i}e.prototype._next=function(e){if(this.active<this.concurrent){var t=this.index++;var r=i.tryCatch(this.accumulator)(this.acc,e);var n=this.destination;if(r===a.errorObject){n.error(a.errorObject.e)}else{this.active++;this._innerSub(r,e,t)}}else{this.buffer.push(e)}};e.prototype._innerSub=function(e,t,r){var n=new u.InnerSubscriber(this,undefined,undefined);var i=this.destination;i.add(n);s.subscribeToResult(this,e,t,r,n)};e.prototype._complete=function(){this.hasCompleted=true;if(this.active===0&&this.buffer.length===0){if(this.hasValue===false){this.destination.next(this.acc)}this.destination.complete()}this.unsubscribe()};e.prototype.notifyNext=function(e,t,r,n,i){var o=this.destination;this.acc=t;this.hasValue=true;o.next(t)};e.prototype.notifyComplete=function(e){var t=this.buffer;var r=this.destination;r.remove(e);this.active--;if(t.length>0){this._next(t.shift())}else if(this.active===0&&this.hasCompleted){if(this.hasValue===false){this.destination.next(this.acc)}this.destination.complete()}};return e}(o.OuterSubscriber);r.MergeScanSubscriber=l},{"../InnerSubscriber":30,"../OuterSubscriber":34,"../util/errorObject":200,"../util/subscribeToResult":222,"../util/tryCatch":224}],121:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("./reduce");function i(r){var e=typeof r==="function"?function(e,t){return r(e,t)<0?e:t}:function(e,t){return e<t?e:t};return n.reduce(e)}r.min=i},{"./reduce":133}],122:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var a=e("../observable/ConnectableObservable");function n(i,o){return function e(t){var r;if(typeof i==="function"){r=i}else{r=function e(){return i}}if(typeof o==="function"){return t.lift(new s(r,o))}var n=Object.create(t,a.connectableObservableDescriptor);n.source=t;n.subjectFactory=r;return n}}r.multicast=n;var s=function(){function e(e,t){this.subjectFactory=e;this.selector=t}e.prototype.call=function(e,t){var r=this.selector;var n=this.subjectFactory();var i=r(n).subscribe(e);i.add(t.subscribe(n));return i};return e}();r.MulticastOperator=s},{"../observable/ConnectableObservable":42}],123:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var i=e("../Subscriber");var o=e("../Notification");function a(r,n){if(n===void 0){n=0}return function e(t){return t.lift(new s(r,n))}}r.observeOn=a;var s=function(){function e(e,t){if(t===void 0){t=0}this.scheduler=e;this.delay=t}e.prototype.call=function(e,t){return t.subscribe(new u(e,this.scheduler,this.delay))};return e}();r.ObserveOnOperator=s;var u=function(i){n(r,i);function r(e,t,r){if(r===void 0){r=0}var n=i.call(this,e)||this;n.scheduler=t;n.delay=r;return n}r.dispatch=function(e){var t=e.notification,r=e.destination;t.observe(r);this.unsubscribe()};r.prototype.scheduleMessage=function(e){var t=this.destination;t.add(this.scheduler.schedule(r.dispatch,this.delay,new c(e,this.destination)))};r.prototype._next=function(e){this.scheduleMessage(o.Notification.createNext(e))};r.prototype._error=function(e){this.scheduleMessage(o.Notification.createError(e));this.unsubscribe()};r.prototype._complete=function(){this.scheduleMessage(o.Notification.createComplete());this.unsubscribe()};return r}(i.Subscriber);r.ObserveOnSubscriber=u;var c=function(){function e(e,t){this.notification=e;this.destination=t}return e}();r.ObserveOnMessage=c},{"../Notification":31,"../Subscriber":39}],124:[function(e,t,r){"use strict";var i=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var n=e("../observable/from");var o=e("../util/isArray");var a=e("../OuterSubscriber");var s=e("../InnerSubscriber");var u=e("../util/subscribeToResult");function c(){var t=[];for(var e=0;e<arguments.length;e++){t[e]=arguments[e]}if(t.length===1&&o.isArray(t[0])){t=t[0]}return function(e){return e.lift(new l(t))}}r.onErrorResumeNext=c;function h(){var e=[];for(var t=0;t<arguments.length;t++){e[t]=arguments[t]}var r=null;if(e.length===1&&o.isArray(e[0])){e=e[0]}r=e.shift();return n.from(r,null).lift(new l(e))}r.onErrorResumeNextStatic=h;var l=function(){function e(e){this.nextSources=e}e.prototype.call=function(e,t){return t.subscribe(new p(e,this.nextSources))};return e}();var p=function(n){i(e,n);function e(e,t){var r=n.call(this,e)||this;r.destination=e;r.nextSources=t;return r}e.prototype.notifyError=function(e,t){this.subscribeToNextSource()};e.prototype.notifyComplete=function(e){this.subscribeToNextSource()};e.prototype._error=function(e){this.subscribeToNextSource();this.unsubscribe()};e.prototype._complete=function(){this.subscribeToNextSource();this.unsubscribe()};e.prototype.subscribeToNextSource=function(){var e=this.nextSources.shift();if(e){var t=new s.InnerSubscriber(this,undefined,undefined);var r=this.destination;r.add(t);u.subscribeToResult(this,e,undefined,undefined,t)}else{this.destination.complete()}};return e}(a.OuterSubscriber)},{"../InnerSubscriber":30,"../OuterSubscriber":34,"../observable/from":51,"../util/isArray":203,"../util/subscribeToResult":222}],125:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var i=e("../Subscriber");function o(){return function(e){return e.lift(new a)}}r.pairwise=o;var a=function(){function e(){}e.prototype.call=function(e,t){return t.subscribe(new s(e))};return e}();var s=function(r){n(e,r);function e(e){var t=r.call(this,e)||this;t.hasPrev=false;return t}e.prototype._next=function(e){if(this.hasPrev){this.destination.next([this.prev,e])}else{this.hasPrev=true}this.prev=e};return e}(i.Subscriber)},{"../Subscriber":39}],126:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("../util/not");var i=e("./filter");function o(t,r){return function(e){return[i.filter(t,r)(e),i.filter(n.not(t,r))(e)]}}r.partition=o},{"../util/not":215,"./filter":103}],127:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("./map");function i(){var t=[];for(var e=0;e<arguments.length;e++){t[e]=arguments[e]}var r=t.length;if(r===0){throw new Error("list of properties cannot be empty.")}return function(e){return n.map(o(t,r))(e)}}r.pluck=i;function o(i,o){var e=function(e){var t=e;for(var r=0;r<o;r++){var n=t[i[r]];if(typeof n!=="undefined"){t=n}else{return undefined}}return t};return e}},{"./map":112}],128:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("../Subject");var i=e("./multicast");function o(e){return e?i.multicast(function(){return new n.Subject},e):i.multicast(new n.Subject)}r.publish=o},{"../Subject":37,"./multicast":122}],129:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("../BehaviorSubject");var i=e("./multicast");function o(t){return function(e){return i.multicast(new n.BehaviorSubject(t))(e)}}r.publishBehavior=o},{"../BehaviorSubject":29,"./multicast":122}],130:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("../AsyncSubject");var i=e("./multicast");function o(){return function(e){return i.multicast(new n.AsyncSubject)(e)}}r.publishLast=o},{"../AsyncSubject":28,"./multicast":122}],131:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var a=e("../ReplaySubject");var s=e("./multicast");function n(e,t,r,n){if(r&&typeof r!=="function"){n=r}var i=typeof r==="function"?r:undefined;var o=new a.ReplaySubject(e,t,n);return function(e){return s.multicast(function(){return o},i)(e)}}r.publishReplay=n},{"../ReplaySubject":35,"./multicast":122}],132:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("../util/isArray");var i=e("../observable/race");function o(){var r=[];for(var e=0;e<arguments.length;e++){r[e]=arguments[e]}return function e(t){if(r.length===1&&n.isArray(r[0])){r=r[0]}return t.lift.call(i.race.apply(void 0,[t].concat(r)))}}r.race=o},{"../observable/race":66,"../util/isArray":203}],133:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var i=e("./scan");var o=e("./takeLast");var a=e("./defaultIfEmpty");var s=e("../util/pipe");function n(n,r){if(arguments.length>=2){return function e(t){return s.pipe(i.scan(n,r),o.takeLast(1),a.defaultIfEmpty(r))(t)}}return function e(t){return s.pipe(i.scan(function(e,t,r){return n(e,t,r+1)}),o.takeLast(1))(t)}}r.reduce=n},{"../util/pipe":216,"./defaultIfEmpty":90,"./scan":141,"./takeLast":156}],134:[function(e,t,r){"use strict";var i=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var n=e("../Subscriber");function o(){return function e(t){return t.lift(new a(t))}}r.refCount=o;var a=function(){function e(e){this.connectable=e}e.prototype.call=function(e,t){var r=this.connectable;r._refCount++;var n=new s(e,r);var i=t.subscribe(n);if(!n.closed){n.connection=r.connect()}return i};return e}();var s=function(n){i(e,n);function e(e,t){var r=n.call(this,e)||this;r.connectable=t;return r}e.prototype._unsubscribe=function(){var e=this.connectable;if(!e){this.connection=null;return}this.connectable=null;var t=e._refCount;if(t<=0){this.connection=null;return}e._refCount=t-1;if(t>1){this.connection=null;return}var r=this.connection;var n=e._connection;this.connection=null;if(n&&(!r||n===r)){n.unsubscribe()}};return e}(n.Subscriber)},{"../Subscriber":39}],135:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var i=e("../Subscriber");var o=e("../observable/empty");function a(t){if(t===void 0){t=-1}return function(e){if(t===0){return o.empty()}else if(t<0){return e.lift(new s(-1,e))}else{return e.lift(new s(t-1,e))}}}r.repeat=a;var s=function(){function e(e,t){this.count=e;this.source=t}e.prototype.call=function(e,t){return t.subscribe(new u(e,this.count,this.source))};return e}();var u=function(i){n(e,i);function e(e,t,r){var n=i.call(this,e)||this;n.count=t;n.source=r;return n}e.prototype.complete=function(){if(!this.isStopped){var e=this,t=e.source,r=e.count;if(r===0){return i.prototype.complete.call(this)}else if(r>-1){this.count=r-1}t.subscribe(this._unsubscribeAndRecycle())}};return e}(i.Subscriber)},{"../Subscriber":39,"../observable/empty":49}],136:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var o=e("../Subject");var a=e("../util/tryCatch");var s=e("../util/errorObject");var i=e("../OuterSubscriber");var u=e("../util/subscribeToResult");function c(t){return function(e){return e.lift(new h(t))}}r.repeatWhen=c;var h=function(){function e(e){this.notifier=e}e.prototype.call=function(e,t){return t.subscribe(new l(e,this.notifier,t))};return e}();var l=function(i){n(e,i);function e(e,t,r){var n=i.call(this,e)||this;n.notifier=t;n.source=r;n.sourceIsBeingSubscribedTo=true;return n}e.prototype.notifyNext=function(e,t,r,n,i){this.sourceIsBeingSubscribedTo=true;this.source.subscribe(this)};e.prototype.notifyComplete=function(e){if(this.sourceIsBeingSubscribedTo===false){return i.prototype.complete.call(this)}};e.prototype.complete=function(){this.sourceIsBeingSubscribedTo=false;if(!this.isStopped){if(!this.retries){this.subscribeToRetries()}if(!this.retriesSubscription||this.retriesSubscription.closed){return i.prototype.complete.call(this)}this._unsubscribeAndRecycle();this.notifications.next()}};e.prototype._unsubscribe=function(){var e=this,t=e.notifications,r=e.retriesSubscription;if(t){t.unsubscribe();this.notifications=null}if(r){r.unsubscribe();this.retriesSubscription=null}this.retries=null};e.prototype._unsubscribeAndRecycle=function(){var e=this._unsubscribe;this._unsubscribe=null;i.prototype._unsubscribeAndRecycle.call(this);this._unsubscribe=e;return this};e.prototype.subscribeToRetries=function(){this.notifications=new o.Subject;var e=a.tryCatch(this.notifier)(this.notifications);if(e===s.errorObject){return i.prototype.complete.call(this)}this.retries=e;this.retriesSubscription=u.subscribeToResult(this,e)};return e}(i.OuterSubscriber)},{"../OuterSubscriber":34,"../Subject":37,"../util/errorObject":200,"../util/subscribeToResult":222,"../util/tryCatch":224}],137:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var i=e("../Subscriber");function o(t){if(t===void 0){t=-1}return function(e){return e.lift(new a(t,e))}}r.retry=o;var a=function(){function e(e,t){this.count=e;this.source=t}e.prototype.call=function(e,t){return t.subscribe(new s(e,this.count,this.source))};return e}();var s=function(i){n(e,i);function e(e,t,r){var n=i.call(this,e)||this;n.count=t;n.source=r;return n}e.prototype.error=function(e){if(!this.isStopped){var t=this,r=t.source,n=t.count;if(n===0){return i.prototype.error.call(this,e)}else if(n>-1){this.count=n-1}r.subscribe(this._unsubscribeAndRecycle())}};return e}(i.Subscriber)},{"../Subscriber":39}],138:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var o=e("../Subject");var a=e("../util/tryCatch");var s=e("../util/errorObject");var i=e("../OuterSubscriber");var u=e("../util/subscribeToResult");function c(t){return function(e){return e.lift(new h(t,e))}}r.retryWhen=c;var h=function(){function e(e,t){this.notifier=e;this.source=t}e.prototype.call=function(e,t){return t.subscribe(new l(e,this.notifier,this.source))};return e}();var l=function(i){n(e,i);function e(e,t,r){var n=i.call(this,e)||this;n.notifier=t;n.source=r;return n}e.prototype.error=function(e){if(!this.isStopped){var t=this.errors;var r=this.retries;var n=this.retriesSubscription;if(!r){t=new o.Subject;r=a.tryCatch(this.notifier)(t);if(r===s.errorObject){return i.prototype.error.call(this,s.errorObject.e)}n=u.subscribeToResult(this,r)}else{this.errors=null;this.retriesSubscription=null}this._unsubscribeAndRecycle();this.errors=t;this.retries=r;this.retriesSubscription=n;t.next(e)}};e.prototype._unsubscribe=function(){var e=this,t=e.errors,r=e.retriesSubscription;if(t){t.unsubscribe();this.errors=null}if(r){r.unsubscribe();this.retriesSubscription=null}this.retries=null};e.prototype.notifyNext=function(e,t,r,n,i){var o=this._unsubscribe;this._unsubscribe=null;this._unsubscribeAndRecycle();this._unsubscribe=o;this.source.subscribe(this)};return e}(i.OuterSubscriber)},{"../OuterSubscriber":34,"../Subject":37,"../util/errorObject":200,"../util/subscribeToResult":222,"../util/tryCatch":224}],139:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var i=e("../OuterSubscriber");var o=e("../util/subscribeToResult");function a(t){return function(e){return e.lift(new s(t))}}r.sample=a;var s=function(){function e(e){this.notifier=e}e.prototype.call=function(e,t){var r=new u(e);var n=t.subscribe(r);n.add(o.subscribeToResult(r,this.notifier));return n};return e}();var u=function(t){n(e,t);function e(){var e=t!==null&&t.apply(this,arguments)||this;e.hasValue=false;return e}e.prototype._next=function(e){this.value=e;this.hasValue=true};e.prototype.notifyNext=function(e,t,r,n,i){this.emitValue()};e.prototype.notifyComplete=function(){this.emitValue()};e.prototype.emitValue=function(){if(this.hasValue){this.hasValue=false;this.destination.next(this.value)}};return e}(i.OuterSubscriber)},{"../OuterSubscriber":34,"../util/subscribeToResult":222}],140:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var i=e("../Subscriber");var o=e("../scheduler/async");function a(t,r){if(r===void 0){r=o.async}return function(e){return e.lift(new s(t,r))}}r.sampleTime=a;var s=function(){function e(e,t){this.period=e;this.scheduler=t}e.prototype.call=function(e,t){return t.subscribe(new u(e,this.period,this.scheduler))};return e}();var u=function(i){n(e,i);function e(e,t,r){var n=i.call(this,e)||this;n.period=t;n.scheduler=r;n.hasValue=false;n.add(r.schedule(c,t,{subscriber:n,period:t}));return n}e.prototype._next=function(e){this.lastValue=e;this.hasValue=true};e.prototype.notifyNext=function(){if(this.hasValue){this.hasValue=false;this.destination.next(this.lastValue)}};return e}(i.Subscriber);function c(e){var t=e.subscriber,r=e.period;t.notifyNext();this.schedule(e,r)}},{"../Subscriber":39,"../scheduler/async":188}],141:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var i=e("../Subscriber");function o(r,n){var i=false;if(arguments.length>=2){i=true}return function e(t){return t.lift(new a(r,n,i))}}r.scan=o;var a=function(){function e(e,t,r){if(r===void 0){r=false}this.accumulator=e;this.seed=t;this.hasSeed=r}e.prototype.call=function(e,t){return t.subscribe(new s(e,this.accumulator,this.seed,this.hasSeed))};return e}();var s=function(o){n(e,o);function e(e,t,r,n){var i=o.call(this,e)||this;i.accumulator=t;i._seed=r;i.hasSeed=n;i.index=0;return i}Object.defineProperty(e.prototype,"seed",{get:function(){return this._seed},set:function(e){this.hasSeed=true;this._seed=e},enumerable:true,configurable:true});e.prototype._next=function(e){if(!this.hasSeed){this.seed=e;this.destination.next(e)}else{return this._tryNext(e)}};e.prototype._tryNext=function(e){var t=this.index++;var r;try{r=this.accumulator(this.seed,e,t)}catch(e){this.destination.error(e)}this.seed=r;this.destination.next(r)};return e}(i.Subscriber)},{"../Subscriber":39}],142:[function(e,t,r){"use strict";var o=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var n=e("../Subscriber");var s=e("../util/tryCatch");var u=e("../util/errorObject");function i(t,r){return function(e){return e.lift(new a(t,r))}}r.sequenceEqual=i;var a=function(){function e(e,t){this.compareTo=e;this.comparor=t}e.prototype.call=function(e,t){return t.subscribe(new c(e,this.compareTo,this.comparor))};return e}();r.SequenceEqualOperator=a;var c=function(i){o(e,i);function e(e,t,r){var n=i.call(this,e)||this;n.compareTo=t;n.comparor=r;n._a=[];n._b=[];n._oneComplete=false;n.destination.add(t.subscribe(new h(e,n)));return n}e.prototype._next=function(e){if(this._oneComplete&&this._b.length===0){this.emit(false)}else{this._a.push(e);this.checkValues()}};e.prototype._complete=function(){if(this._oneComplete){this.emit(this._a.length===0&&this._b.length===0)}else{this._oneComplete=true}this.unsubscribe()};e.prototype.checkValues=function(){var e=this,t=e._a,r=e._b,n=e.comparor;while(t.length>0&&r.length>0){var i=t.shift();var o=r.shift();var a=false;if(n){a=s.tryCatch(n)(i,o);if(a===u.errorObject){this.destination.error(u.errorObject.e)}}else{a=i===o}if(!a){this.emit(false)}}};e.prototype.emit=function(e){var t=this.destination;t.next(e);t.complete()};e.prototype.nextB=function(e){if(this._oneComplete&&this._a.length===0){this.emit(false)}else{this._b.push(e);this.checkValues()}};e.prototype.completeB=function(){if(this._oneComplete){this.emit(this._a.length===0&&this._b.length===0)}else{this._oneComplete=true}};return e}(n.Subscriber);r.SequenceEqualSubscriber=c;var h=function(n){o(e,n);function e(e,t){var r=n.call(this,e)||this;r.parent=t;return r}e.prototype._next=function(e){this.parent.nextB(e)};e.prototype._error=function(e){this.parent.error(e);this.unsubscribe()};e.prototype._complete=function(){this.parent.completeB();this.unsubscribe()};return e}(n.Subscriber)},{"../Subscriber":39,"../util/errorObject":200,"../util/tryCatch":224}],143:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("./multicast");var i=e("./refCount");var o=e("../Subject");function a(){return new o.Subject}function s(){return function(e){return i.refCount()(n.multicast(a)(e))}}r.share=s},{"../Subject":37,"./multicast":122,"./refCount":134}],144:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var l=e("../ReplaySubject");function n(t,r,n){if(t===void 0){t=Number.POSITIVE_INFINITY}if(r===void 0){r=Number.POSITIVE_INFINITY}return function(e){return e.lift(i(t,r,n))}}r.shareReplay=n;function i(n,i,o){var a;var s=0;var u;var c=false;var h=false;return function e(t){s++;if(!a||c){c=false;a=new l.ReplaySubject(n,i,o);u=t.subscribe({next:function(e){a.next(e)},error:function(e){c=true;a.error(e)},complete:function(){h=true;a.complete()}})}var r=a.subscribe(this);return function(){s--;r.unsubscribe();if(u&&s===0&&h){u.unsubscribe()}}}}},{"../ReplaySubject":35}],145:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var i=e("../Subscriber");var o=e("../util/EmptyError");function a(t){return function(e){return e.lift(new s(t,e))}}r.single=a;var s=function(){function e(e,t){this.predicate=e;this.source=t}e.prototype.call=function(e,t){return t.subscribe(new u(e,this.predicate,this.source))};return e}();var u=function(i){n(e,i);function e(e,t,r){var n=i.call(this,e)||this;n.predicate=t;n.source=r;n.seenValue=false;n.index=0;return n}e.prototype.applySingleValue=function(e){if(this.seenValue){this.destination.error("Sequence contains more than one element")}else{this.seenValue=true;this.singleValue=e}};e.prototype._next=function(e){var t=this.index++;if(this.predicate){this.tryNext(e,t)}else{this.applySingleValue(e)}};e.prototype.tryNext=function(e,t){try{if(this.predicate(e,t,this.source)){this.applySingleValue(e)}}catch(e){this.destination.error(e)}};e.prototype._complete=function(){var e=this.destination;if(this.index>0){e.next(this.seenValue?this.singleValue:undefined);e.complete()}else{e.error(new o.EmptyError)}};return e}(i.Subscriber)},{"../Subscriber":39,"../util/EmptyError":194}],146:[function(e,t,r){"use strict";var i=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var n=e("../Subscriber");function o(t){return function(e){return e.lift(new a(t))}}r.skip=o;var a=function(){function e(e){this.total=e}e.prototype.call=function(e,t){return t.subscribe(new s(e,this.total))};return e}();var s=function(n){i(e,n);function e(e,t){var r=n.call(this,e)||this;r.total=t;r.count=0;return r}e.prototype._next=function(e){if(++this.count>this.total){this.destination.next(e)}};return e}(n.Subscriber)},{"../Subscriber":39}],147:[function(e,t,r){"use strict";var i=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var n=e("../Subscriber");var o=e("../util/ArgumentOutOfRangeError");function a(t){return function(e){return e.lift(new s(t))}}r.skipLast=a;var s=function(){function e(e){this._skipCount=e;if(this._skipCount<0){throw new o.ArgumentOutOfRangeError}}e.prototype.call=function(e,t){if(this._skipCount===0){return t.subscribe(new n.Subscriber(e))}else{return t.subscribe(new u(e,this._skipCount))}};return e}();var u=function(n){i(e,n);function e(e,t){var r=n.call(this,e)||this;r._skipCount=t;r._count=0;r._ring=new Array(t);return r}e.prototype._next=function(e){var t=this._skipCount;var r=this._count++;if(r<t){this._ring[r]=e}else{var n=r%t;var i=this._ring;var o=i[n];i[n]=e;this.destination.next(o)}};return e}(n.Subscriber)},{"../Subscriber":39,"../util/ArgumentOutOfRangeError":193}],148:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var i=e("../OuterSubscriber");var o=e("../InnerSubscriber");var a=e("../util/subscribeToResult");function s(t){return function(e){return e.lift(new u(t))}}r.skipUntil=s;var u=function(){function e(e){this.notifier=e}e.prototype.call=function(e,t){return t.subscribe(new c(e,this.notifier))};return e}();var c=function(i){n(e,i);function e(e,t){var r=i.call(this,e)||this;r.hasValue=false;var n=new o.InnerSubscriber(r,undefined,undefined);r.add(n);r.innerSubscription=n;a.subscribeToResult(r,t,undefined,undefined,n);return r}e.prototype._next=function(e){if(this.hasValue){i.prototype._next.call(this,e)}};e.prototype.notifyNext=function(e,t,r,n,i){this.hasValue=true;if(this.innerSubscription){this.innerSubscription.unsubscribe()}};e.prototype.notifyComplete=function(){};return e}(i.OuterSubscriber)},{"../InnerSubscriber":30,"../OuterSubscriber":34,"../util/subscribeToResult":222}],149:[function(e,t,r){"use strict";var i=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var n=e("../Subscriber");function o(t){return function(e){return e.lift(new a(t))}}r.skipWhile=o;var a=function(){function e(e){this.predicate=e}e.prototype.call=function(e,t){return t.subscribe(new s(e,this.predicate))};return e}();var s=function(n){i(e,n);function e(e,t){var r=n.call(this,e)||this;r.predicate=t;r.skipping=true;r.index=0;return r}e.prototype._next=function(e){var t=this.destination;if(this.skipping){this.tryCallPredicate(e)}if(!this.skipping){t.next(e)}};e.prototype.tryCallPredicate=function(e){try{var t=this.predicate(e,this.index++);this.skipping=Boolean(t)}catch(e){this.destination.error(e)}};return e}(n.Subscriber)},{"../Subscriber":39}],150:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var i=e("../observable/fromArray");var o=e("../observable/scalar");var a=e("../observable/empty");var s=e("../observable/concat");var u=e("../util/isScheduler");function n(){var n=[];for(var e=0;e<arguments.length;e++){n[e]=arguments[e]}return function(e){var t=n[n.length-1];if(u.isScheduler(t)){n.pop()}else{t=null}var r=n.length;if(r===1&&!t){return s.concat(o.scalar(n[0]),e)}else if(r>0){return s.concat(i.fromArray(n,t),e)}else{return s.concat(a.empty(t),e)}}}r.startWith=n},{"../observable/concat":47,"../observable/empty":49,"../observable/fromArray":52,"../observable/scalar":68,"../util/isScheduler":213}],151:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("../observable/SubscribeOnObservable");function i(r,n){if(n===void 0){n=0}return function e(t){return t.lift(new o(r,n))}}r.subscribeOn=i;var o=function(){function e(e,t){this.scheduler=e;this.delay=t}e.prototype.call=function(e,t){return new n.SubscribeOnObservable(t,this.delay,this.scheduler).subscribe(e)};return e}()},{"../observable/SubscribeOnObservable":43}],152:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("./switchMap");var i=e("../util/identity");function o(){return n.switchMap(i.identity)}r.switchAll=o},{"../util/identity":202,"./switchMap":153}],153:[function(e,t,r){"use strict";var i=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var n=e("../OuterSubscriber");var a=e("../InnerSubscriber");var s=e("../util/subscribeToResult");var o=e("./map");var u=e("../observable/from");function c(t,i){if(typeof i==="function"){return function(e){return e.pipe(c(function(r,n){return u.from(t(r,n)).pipe(o.map(function(e,t){return i(r,e,n,t)}))}))}}return function(e){return e.lift(new h(t))}}r.switchMap=c;var h=function(){function e(e){this.project=e}e.prototype.call=function(e,t){return t.subscribe(new l(e,this.project))};return e}();var l=function(n){i(e,n);function e(e,t){var r=n.call(this,e)||this;r.project=t;r.index=0;return r}e.prototype._next=function(e){var t;var r=this.index++;try{t=this.project(e,r)}catch(e){this.destination.error(e);return}this._innerSub(t,e,r)};e.prototype._innerSub=function(e,t,r){var n=this.innerSubscription;if(n){n.unsubscribe()}var i=new a.InnerSubscriber(this,undefined,undefined);var o=this.destination;o.add(i);this.innerSubscription=s.subscribeToResult(this,e,t,r,i)};e.prototype._complete=function(){var e=this.innerSubscription;if(!e||e.closed){n.prototype._complete.call(this)}this.unsubscribe()};e.prototype._unsubscribe=function(){this.innerSubscription=null};e.prototype.notifyComplete=function(e){var t=this.destination;t.remove(e);this.innerSubscription=null;if(this.isStopped){n.prototype._complete.call(this)}};e.prototype.notifyNext=function(e,t,r,n,i){this.destination.next(t)};return e}(n.OuterSubscriber)},{"../InnerSubscriber":30,"../OuterSubscriber":34,"../observable/from":51,"../util/subscribeToResult":222,"./map":112}],154:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("./switchMap");function i(e,t){return t?n.switchMap(function(){return e},t):n.switchMap(function(){return e})}r.switchMapTo=i},{"./switchMap":153}],155:[function(e,t,r){"use strict";var i=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var n=e("../Subscriber");var o=e("../util/ArgumentOutOfRangeError");var a=e("../observable/empty");function s(t){return function(e){if(t===0){return a.empty()}else{return e.lift(new u(t))}}}r.take=s;var u=function(){function e(e){this.total=e;if(this.total<0){throw new o.ArgumentOutOfRangeError}}e.prototype.call=function(e,t){return t.subscribe(new c(e,this.total))};return e}();var c=function(n){i(e,n);function e(e,t){var r=n.call(this,e)||this;r.total=t;r.count=0;return r}e.prototype._next=function(e){var t=this.total;var r=++this.count;if(r<=t){this.destination.next(e);if(r===t){this.destination.complete();this.unsubscribe()}}};return e}(n.Subscriber)},{"../Subscriber":39,"../observable/empty":49,"../util/ArgumentOutOfRangeError":193}],156:[function(e,t,r){"use strict";var i=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var n=e("../Subscriber");var o=e("../util/ArgumentOutOfRangeError");var a=e("../observable/empty");function s(r){return function e(t){if(r===0){return a.empty()}else{return t.lift(new u(r))}}}r.takeLast=s;var u=function(){function e(e){this.total=e;if(this.total<0){throw new o.ArgumentOutOfRangeError}}e.prototype.call=function(e,t){return t.subscribe(new c(e,this.total))};return e}();var c=function(n){i(e,n);function e(e,t){var r=n.call(this,e)||this;r.total=t;r.ring=new Array;r.count=0;return r}e.prototype._next=function(e){var t=this.ring;var r=this.total;var n=this.count++;if(t.length<r){t.push(e)}else{var i=n%r;t[i]=e}};e.prototype._complete=function(){var e=this.destination;var t=this.count;if(t>0){var r=this.count>=this.total?this.total:this.count;var n=this.ring;for(var i=0;i<r;i++){var o=t++%r;e.next(n[o])}}e.complete()};return e}(n.Subscriber)},{"../Subscriber":39,"../observable/empty":49,"../util/ArgumentOutOfRangeError":193}],157:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var i=e("../OuterSubscriber");var o=e("../util/subscribeToResult");function a(t){return function(e){return e.lift(new s(t))}}r.takeUntil=a;var s=function(){function e(e){this.notifier=e}e.prototype.call=function(e,t){var r=new u(e);var n=o.subscribeToResult(r,this.notifier);if(n&&!r.seenValue){r.add(n);return t.subscribe(r)}return r};return e}();var u=function(r){n(e,r);function e(e){var t=r.call(this,e)||this;t.seenValue=false;return t}e.prototype.notifyNext=function(e,t,r,n,i){this.seenValue=true;this.complete()};e.prototype.notifyComplete=function(){};return e}(i.OuterSubscriber)},{"../OuterSubscriber":34,"../util/subscribeToResult":222}],158:[function(e,t,r){"use strict";var i=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var n=e("../Subscriber");function o(t){return function(e){return e.lift(new a(t))}}r.takeWhile=o;var a=function(){function e(e){this.predicate=e}e.prototype.call=function(e,t){return t.subscribe(new s(e,this.predicate))};return e}();var s=function(n){i(e,n);function e(e,t){var r=n.call(this,e)||this;r.predicate=t;r.index=0;return r}e.prototype._next=function(e){var t=this.destination;var r;try{r=this.predicate(e,this.index++)}catch(e){t.error(e);return}this.nextOrComplete(e,r)};e.prototype.nextOrComplete=function(e,t){var r=this.destination;if(Boolean(t)){r.next(e)}else{r.complete()}};return e}(n.Subscriber)},{"../Subscriber":39}],159:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var i=e("../Subscriber");var a=e("../util/noop");var s=e("../util/isFunction");function o(r,n,i){return function e(t){return t.lift(new u(r,n,i))}}r.tap=o;var u=function(){function e(e,t,r){this.nextOrObserver=e;this.error=t;this.complete=r}e.prototype.call=function(e,t){return t.subscribe(new c(e,this.nextOrObserver,this.error,this.complete))};return e}();var c=function(o){n(e,o);function e(e,t,r,n){var i=o.call(this,e)||this;i._tapNext=a.noop;i._tapError=a.noop;i._tapComplete=a.noop;i._tapError=r||a.noop;i._tapComplete=n||a.noop;if(s.isFunction(t)){i._context=i;i._tapNext=t}else if(t){i._context=t;i._tapNext=t.next||a.noop;i._tapError=t.error||a.noop;i._tapComplete=t.complete||a.noop}return i}e.prototype._next=function(e){try{this._tapNext.call(this._context,e)}catch(e){this.destination.error(e);return}this.destination.next(e)};e.prototype._error=function(e){try{this._tapError.call(this._context,e)}catch(e){this.destination.error(e);return}this.destination.error(e)};e.prototype._complete=function(){try{this._tapComplete.call(this._context)}catch(e){this.destination.error(e);return}return this.destination.complete()};return e}(i.Subscriber)},{"../Subscriber":39,"../util/isFunction":206,"../util/noop":214}],160:[function(e,t,n){"use strict";var r=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(n,"__esModule",{value:true});var i=e("../OuterSubscriber");var a=e("../util/subscribeToResult");n.defaultThrottleConfig={leading:true,trailing:false};function o(t,r){if(r===void 0){r=n.defaultThrottleConfig}return function(e){return e.lift(new s(t,r.leading,r.trailing))}}n.throttle=o;var s=function(){function e(e,t,r){this.durationSelector=e;this.leading=t;this.trailing=r}e.prototype.call=function(e,t){return t.subscribe(new u(e,this.durationSelector,this.leading,this.trailing))};return e}();var u=function(o){r(e,o);function e(e,t,r,n){var i=o.call(this,e)||this;i.destination=e;i.durationSelector=t;i._leading=r;i._trailing=n;i._hasValue=false;return i}e.prototype._next=function(e){this._hasValue=true;this._sendValue=e;if(!this._throttled){if(this._leading){this.send()}else{this.throttle(e)}}};e.prototype.send=function(){var e=this,t=e._hasValue,r=e._sendValue;if(t){this.destination.next(r);this.throttle(r)}this._hasValue=false;this._sendValue=null};e.prototype.throttle=function(e){var t=this.tryDurationSelector(e);if(t){this.add(this._throttled=a.subscribeToResult(this,t))}};e.prototype.tryDurationSelector=function(e){try{return this.durationSelector(e)}catch(e){this.destination.error(e);return null}};e.prototype.throttlingDone=function(){var e=this,t=e._throttled,r=e._trailing;if(t){t.unsubscribe()}this._throttled=null;if(r){this.send()}};e.prototype.notifyNext=function(e,t,r,n,i){this.throttlingDone()};e.prototype.notifyComplete=function(){this.throttlingDone()};return e}(i.OuterSubscriber)},{"../OuterSubscriber":34,"../util/subscribeToResult":222}],161:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var i=e("../Subscriber");var o=e("../scheduler/async");var a=e("./throttle");function s(t,r,n){if(r===void 0){r=o.async}if(n===void 0){n=a.defaultThrottleConfig}return function(e){return e.lift(new u(t,r,n.leading,n.trailing))}}r.throttleTime=s;var u=function(){function e(e,t,r,n){this.duration=e;this.scheduler=t;this.leading=r;this.trailing=n}e.prototype.call=function(e,t){return t.subscribe(new c(e,this.duration,this.scheduler,this.leading,this.trailing))};return e}();var c=function(a){n(e,a);function e(e,t,r,n,i){var o=a.call(this,e)||this;o.duration=t;o.scheduler=r;o.leading=n;o.trailing=i;o._hasTrailingValue=false;o._trailingValue=null;return o}e.prototype._next=function(e){if(this.throttled){if(this.trailing){this._trailingValue=e;this._hasTrailingValue=true}}else{this.add(this.throttled=this.scheduler.schedule(h,this.duration,{subscriber:this}));if(this.leading){this.destination.next(e)}}};e.prototype._complete=function(){if(this._hasTrailingValue){this.destination.next(this._trailingValue);this.destination.complete()}else{this.destination.complete()}};e.prototype.clearThrottle=function(){var e=this.throttled;if(e){if(this.trailing&&this._hasTrailingValue){this.destination.next(this._trailingValue);this._trailingValue=null;this._hasTrailingValue=false}e.unsubscribe();this.remove(e);this.throttled=null}};return e}(i.Subscriber);function h(e){var t=e.subscriber;t.clearThrottle()}},{"../Subscriber":39,"../scheduler/async":188,"./throttle":160}],162:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("./tap");var i=e("../util/EmptyError");r.throwIfEmpty=function(e){if(e===void 0){e=o}return n.tap({hasValue:false,next:function(){this.hasValue=true},complete:function(){if(!this.hasValue){throw e()}}})};function o(){return new i.EmptyError}},{"../util/EmptyError":194,"./tap":159}],163:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var i=e("../scheduler/async");var o=e("./scan");var a=e("../observable/defer");var s=e("./map");function n(n){if(n===void 0){n=i.async}return function(e){return a.defer(function(){return e.pipe(o.scan(function(e,t){var r=e.current;return{value:t,current:n.now(),last:r}},{current:n.now(),value:undefined,last:undefined}),s.map(function(e){var t=e.current,r=e.last,n=e.value;return new u(n,t-r)}))})}}r.timeInterval=n;var u=function(){function e(e,t){this.value=e;this.interval=t}return e}();r.TimeInterval=u},{"../observable/defer":48,"../scheduler/async":188,"./map":112,"./scan":141}],164:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("../scheduler/async");var i=e("../util/TimeoutError");var o=e("./timeoutWith");var a=e("../observable/throwError");function s(e,t){if(t===void 0){t=n.async}return o.timeoutWith(e,a.throwError(new i.TimeoutError),t)}r.timeout=s},{"../observable/throwError":69,"../scheduler/async":188,"../util/TimeoutError":197,"./timeoutWith":165}],165:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var a=e("../scheduler/async");var s=e("../util/isDate");var i=e("../OuterSubscriber");var o=e("../util/subscribeToResult");function u(n,i,o){if(o===void 0){o=a.async}return function(e){var t=s.isDate(n);var r=t?+n-o.now():Math.abs(n);return e.lift(new c(r,t,i,o))}}r.timeoutWith=u;var c=function(){function e(e,t,r,n){this.waitFor=e;this.absoluteTimeout=t;this.withObservable=r;this.scheduler=n}e.prototype.call=function(e,t){return t.subscribe(new h(e,this.absoluteTimeout,this.waitFor,this.withObservable,this.scheduler))};return e}();var h=function(a){n(t,a);function t(e,t,r,n,i){var o=a.call(this,e)||this;o.absoluteTimeout=t;o.waitFor=r;o.withObservable=n;o.scheduler=i;o.action=null;o.scheduleTimeout();return o}t.dispatchTimeout=function(e){var t=e.withObservable;e._unsubscribeAndRecycle();e.add(o.subscribeToResult(e,t))};t.prototype.scheduleTimeout=function(){var e=this.action;if(e){this.action=e.schedule(this,this.waitFor)}else{this.add(this.action=this.scheduler.schedule(t.dispatchTimeout,this.waitFor,this))}};t.prototype._next=function(e){if(!this.absoluteTimeout){this.scheduleTimeout()}a.prototype._next.call(this,e)};t.prototype._unsubscribe=function(){this.action=null;this.scheduler=null;this.withObservable=null};return t}(i.OuterSubscriber)},{"../OuterSubscriber":34,"../scheduler/async":188,"../util/isDate":205,"../util/subscribeToResult":222}],166:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("../scheduler/async");var i=e("./map");function o(t){if(t===void 0){t=n.async}return i.map(function(e){return new a(e,t.now())})}r.timestamp=o;var a=function(){function e(e,t){this.value=e;this.timestamp=t}return e}();r.Timestamp=a},{"../scheduler/async":188,"./map":112}],167:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("./reduce");function i(e,t,r){if(r===0){return[t]}e.push(t);return e}function o(){return n.reduce(i,[])}r.toArray=o},{"./reduce":133}],168:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var i=e("../Subject");var o=e("../OuterSubscriber");var a=e("../util/subscribeToResult");function s(r){return function e(t){return t.lift(new u(r))}}r.window=s;var u=function(){function e(e){this.windowBoundaries=e}e.prototype.call=function(e,t){var r=new c(e);var n=t.subscribe(r);if(!n.closed){r.add(a.subscribeToResult(r,this.windowBoundaries))}return n};return e}();var c=function(r){n(e,r);function e(e){var t=r.call(this,e)||this;t.window=new i.Subject;e.next(t.window);return t}e.prototype.notifyNext=function(e,t,r,n,i){this.openWindow()};e.prototype.notifyError=function(e,t){this._error(e)};e.prototype.notifyComplete=function(e){this._complete()};e.prototype._next=function(e){this.window.next(e)};e.prototype._error=function(e){this.window.error(e);this.destination.error(e)};e.prototype._complete=function(){this.window.complete();this.destination.complete()};e.prototype._unsubscribe=function(){this.window=null};e.prototype.openWindow=function(){var e=this.window;if(e){e.complete()}var t=this.destination;var r=this.window=new i.Subject;t.next(r)};return e}(o.OuterSubscriber)},{"../OuterSubscriber":34,"../Subject":37,"../util/subscribeToResult":222}],169:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var i=e("../Subscriber");var c=e("../Subject");function o(r,n){if(n===void 0){n=0}return function e(t){return t.lift(new a(r,n))}}r.windowCount=o;var a=function(){function e(e,t){this.windowSize=e;this.startWindowEvery=t}e.prototype.call=function(e,t){return t.subscribe(new s(e,this.windowSize,this.startWindowEvery))};return e}();var s=function(i){n(e,i);function e(e,t,r){var n=i.call(this,e)||this;n.destination=e;n.windowSize=t;n.startWindowEvery=r;n.windows=[new c.Subject];n.count=0;e.next(n.windows[0]);return n}e.prototype._next=function(e){var t=this.startWindowEvery>0?this.startWindowEvery:this.windowSize;var r=this.destination;var n=this.windowSize;var i=this.windows;var o=i.length;for(var a=0;a<o&&!this.closed;a++){i[a].next(e)}var s=this.count-n+1;if(s>=0&&s%t===0&&!this.closed){i.shift().complete()}if(++this.count%t===0&&!this.closed){var u=new c.Subject;i.push(u);r.next(u)}};e.prototype._error=function(e){var t=this.windows;if(t){while(t.length>0&&!this.closed){t.shift().error(e)}}this.destination.error(e)};e.prototype._complete=function(){var e=this.windows;if(e){while(e.length>0&&!this.closed){e.shift().complete()}}this.destination.complete()};e.prototype._unsubscribe=function(){this.count=0;this.windows=null};return e}(i.Subscriber)},{"../Subject":37,"../Subscriber":39}],170:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var i=e("../Subject");var a=e("../scheduler/async");var o=e("../Subscriber");var s=e("../util/isNumeric");var u=e("../util/isScheduler");function c(r){var n=a.async;var i=null;var o=Number.POSITIVE_INFINITY;if(u.isScheduler(arguments[3])){n=arguments[3]}if(u.isScheduler(arguments[2])){n=arguments[2]}else if(s.isNumeric(arguments[2])){o=arguments[2]}if(u.isScheduler(arguments[1])){n=arguments[1]}else if(s.isNumeric(arguments[1])){i=arguments[1]}return function e(t){return t.lift(new h(r,i,o,n))}}r.windowTime=c;var h=function(){function e(e,t,r,n){this.windowTimeSpan=e;this.windowCreationInterval=t;this.maxWindowSize=r;this.scheduler=n}e.prototype.call=function(e,t){return t.subscribe(new p(e,this.windowTimeSpan,this.windowCreationInterval,this.maxWindowSize,this.scheduler))};return e}();var l=function(t){n(e,t);function e(){var e=t!==null&&t.apply(this,arguments)||this;e._numberOfNextedValues=0;return e}e.prototype.next=function(e){this._numberOfNextedValues++;t.prototype.next.call(this,e)};Object.defineProperty(e.prototype,"numberOfNextedValues",{get:function(){return this._numberOfNextedValues},enumerable:true,configurable:true});return e}(i.Subject);var p=function(h){n(e,h);function e(e,t,r,n,i){var o=h.call(this,e)||this;o.destination=e;o.windowTimeSpan=t;o.windowCreationInterval=r;o.maxWindowSize=n;o.scheduler=i;o.windows=[];var a=o.openWindow();if(r!==null&&r>=0){var s={subscriber:o,window:a,context:null};var u={windowTimeSpan:t,windowCreationInterval:r,subscriber:o,scheduler:i};o.add(i.schedule(v,t,s));o.add(i.schedule(d,r,u))}else{var c={subscriber:o,window:a,windowTimeSpan:t};o.add(i.schedule(f,t,c))}return o}e.prototype._next=function(e){var t=this.windows;var r=t.length;for(var n=0;n<r;n++){var i=t[n];if(!i.closed){i.next(e);if(i.numberOfNextedValues>=this.maxWindowSize){this.closeWindow(i)}}}};e.prototype._error=function(e){var t=this.windows;while(t.length>0){t.shift().error(e)}this.destination.error(e)};e.prototype._complete=function(){var e=this.windows;while(e.length>0){var t=e.shift();if(!t.closed){t.complete()}}this.destination.complete()};e.prototype.openWindow=function(){var e=new l;this.windows.push(e);var t=this.destination;t.next(e);return e};e.prototype.closeWindow=function(e){e.complete();var t=this.windows;t.splice(t.indexOf(e),1)};return e}(o.Subscriber);function f(e){var t=e.subscriber,r=e.windowTimeSpan,n=e.window;if(n){t.closeWindow(n)}e.window=t.openWindow();this.schedule(e,r)}function d(e){var t=e.windowTimeSpan,r=e.subscriber,n=e.scheduler,i=e.windowCreationInterval;var o=r.openWindow();var a=this;var s={action:a,subscription:null};var u={subscriber:r,window:o,context:s};s.subscription=n.schedule(v,t,u);a.add(s.subscription);a.schedule(e,i)}function v(e){var t=e.subscriber,r=e.window,n=e.context;if(n&&n.action&&n.subscription){n.action.remove(n.subscription)}t.closeWindow(r)}},{"../Subject":37,"../Subscriber":39,"../scheduler/async":188,"../util/isNumeric":209,"../util/isScheduler":213}],171:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var l=e("../Subject");var p=e("../Subscription");var f=e("../util/tryCatch");var d=e("../util/errorObject");var i=e("../OuterSubscriber");var v=e("../util/subscribeToResult");function o(t,r){return function(e){return e.lift(new a(t,r))}}r.windowToggle=o;var a=function(){function e(e,t){this.openings=e;this.closingSelector=t}e.prototype.call=function(e,t){return t.subscribe(new s(e,this.openings,this.closingSelector))};return e}();var s=function(o){n(e,o);function e(e,t,r){var n=o.call(this,e)||this;n.openings=t;n.closingSelector=r;n.contexts=[];n.add(n.openSubscription=v.subscribeToResult(n,t,t));return n}e.prototype._next=function(e){var t=this.contexts;if(t){var r=t.length;for(var n=0;n<r;n++){t[n].window.next(e)}}};e.prototype._error=function(e){var t=this.contexts;this.contexts=null;if(t){var r=t.length;var n=-1;while(++n<r){var i=t[n];i.window.error(e);i.subscription.unsubscribe()}}o.prototype._error.call(this,e)};e.prototype._complete=function(){var e=this.contexts;this.contexts=null;if(e){var t=e.length;var r=-1;while(++r<t){var n=e[r];n.window.complete();n.subscription.unsubscribe()}}o.prototype._complete.call(this)};e.prototype._unsubscribe=function(){var e=this.contexts;this.contexts=null;if(e){var t=e.length;var r=-1;while(++r<t){var n=e[r];n.window.unsubscribe();n.subscription.unsubscribe()}}};e.prototype.notifyNext=function(e,t,r,n,i){if(e===this.openings){var o=this.closingSelector;var a=f.tryCatch(o)(t);if(a===d.errorObject){return this.error(d.errorObject.e)}else{var s=new l.Subject;var u=new p.Subscription;var c={window:s,subscription:u};this.contexts.push(c);var h=v.subscribeToResult(this,a,c);if(h.closed){this.closeWindow(this.contexts.length-1)}else{h.context=c;u.add(h)}this.destination.next(s)}}else{this.closeWindow(this.contexts.indexOf(e))}};e.prototype.notifyError=function(e){this.error(e)};e.prototype.notifyComplete=function(e){if(e!==this.openSubscription){this.closeWindow(this.contexts.indexOf(e.context))}};e.prototype.closeWindow=function(e){if(e===-1){return}var t=this.contexts;var r=t[e];var n=r.window,i=r.subscription;t.splice(e,1);n.complete();i.unsubscribe()};return e}(i.OuterSubscriber)},{"../OuterSubscriber":34,"../Subject":37,"../Subscription":40,"../util/errorObject":200,"../util/subscribeToResult":222,"../util/tryCatch":224}],172:[function(e,t,r){"use strict";var i=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var o=e("../Subject");var a=e("../util/tryCatch");var s=e("../util/errorObject");var n=e("../OuterSubscriber");var u=e("../util/subscribeToResult");function c(r){return function e(t){return t.lift(new h(r))}}r.windowWhen=c;var h=function(){function e(e){this.closingSelector=e}e.prototype.call=function(e,t){return t.subscribe(new l(e,this.closingSelector))};return e}();var l=function(n){i(e,n);function e(e,t){var r=n.call(this,e)||this;r.destination=e;r.closingSelector=t;r.openWindow();return r}e.prototype.notifyNext=function(e,t,r,n,i){this.openWindow(i)};e.prototype.notifyError=function(e,t){this._error(e)};e.prototype.notifyComplete=function(e){this.openWindow(e)};e.prototype._next=function(e){this.window.next(e)};e.prototype._error=function(e){this.window.error(e);this.destination.error(e);this.unsubscribeClosingNotification()};e.prototype._complete=function(){this.window.complete();this.destination.complete();this.unsubscribeClosingNotification()};e.prototype.unsubscribeClosingNotification=function(){if(this.closingNotification){this.closingNotification.unsubscribe()}};e.prototype.openWindow=function(e){if(e===void 0){e=null}if(e){this.remove(e);e.unsubscribe()}var t=this.window;if(t){t.complete()}var r=this.window=new o.Subject;this.destination.next(r);var n=a.tryCatch(this.closingSelector)();if(n===s.errorObject){var i=s.errorObject.e;this.destination.error(i);this.window.error(i)}else{this.add(this.closingNotification=u.subscribeToResult(this,n))}};return e}(n.OuterSubscriber)},{"../OuterSubscriber":34,"../Subject":37,"../util/errorObject":200,"../util/subscribeToResult":222,"../util/tryCatch":224}],173:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var i=e("../OuterSubscriber");var u=e("../util/subscribeToResult");function o(){var n=[];for(var e=0;e<arguments.length;e++){n[e]=arguments[e]}return function(e){var t;if(typeof n[n.length-1]==="function"){t=n.pop()}var r=n;return e.lift(new a(r,t))}}r.withLatestFrom=o;var a=function(){function e(e,t){this.observables=e;this.project=t}e.prototype.call=function(e,t){return t.subscribe(new s(e,this.observables,this.project))};return e}();var s=function(s){n(e,s);function e(e,t,r){var n=s.call(this,e)||this;n.observables=t;n.project=r;n.toRespond=[];var i=t.length;n.values=new Array(i);for(var o=0;o<i;o++){n.toRespond.push(o)}for(var o=0;o<i;o++){var a=t[o];n.add(u.subscribeToResult(n,a,a,o))}return n}e.prototype.notifyNext=function(e,t,r,n,i){this.values[r]=t;var o=this.toRespond;if(o.length>0){var a=o.indexOf(r);if(a!==-1){o.splice(a,1)}}};e.prototype.notifyComplete=function(){};e.prototype._next=function(e){if(this.toRespond.length===0){var t=[e].concat(this.values);if(this.project){this._tryProject(t)}else{this.destination.next(t)}}};e.prototype._tryProject=function(e){var t;try{t=this.project.apply(this,e)}catch(e){this.destination.error(e);return}this.destination.next(t)};return e}(i.OuterSubscriber)},{"../OuterSubscriber":34,"../util/subscribeToResult":222}],174:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("../observable/zip");function i(){var r=[];for(var e=0;e<arguments.length;e++){r[e]=arguments[e]}return function e(t){return t.lift.call(n.zip.apply(void 0,[t].concat(r)))}}r.zip=i},{"../observable/zip":72}],175:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("../observable/zip");function i(t){return function(e){return e.lift(new n.ZipOperator(t))}}r.zipAll=i},{"../observable/zip":72}],176:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var i=e("../Subscription");var o=function(r){n(e,r);function e(e,t){return r.call(this)||this}e.prototype.schedule=function(e,t){if(t===void 0){t=0}return this};return e}(i.Subscription);r.Action=o},{"../Subscription":40}],177:[function(e,t,r){"use strict";var i=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var n=e("./AsyncAction");var o=function(n){i(e,n);function e(e,t){var r=n.call(this,e,t)||this;r.scheduler=e;r.work=t;return r}e.prototype.requestAsyncId=function(e,t,r){if(r===void 0){r=0}if(r!==null&&r>0){return n.prototype.requestAsyncId.call(this,e,t,r)}e.actions.push(this);return e.scheduled||(e.scheduled=requestAnimationFrame(function(){return e.flush(null)}))};e.prototype.recycleAsyncId=function(e,t,r){if(r===void 0){r=0}if(r!==null&&r>0||r===null&&this.delay>0){return n.prototype.recycleAsyncId.call(this,e,t,r)}if(e.actions.length===0){cancelAnimationFrame(t);e.scheduled=undefined}return undefined};return e}(n.AsyncAction);r.AnimationFrameAction=o},{"./AsyncAction":181}],178:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var i=e("./AsyncScheduler");var o=function(e){n(t,e);function t(){return e!==null&&e.apply(this,arguments)||this}t.prototype.flush=function(e){this.active=true;this.scheduled=undefined;var t=this.actions;var r;var n=-1;var i=t.length;e=e||t.shift();do{if(r=e.execute(e.state,e.delay)){break}}while(++n<i&&(e=t.shift()));this.active=false;if(r){while(++n<i&&(e=t.shift())){e.unsubscribe()}throw r}};return t}(i.AsyncScheduler);r.AnimationFrameScheduler=o},{"./AsyncScheduler":182}],179:[function(e,t,r){"use strict";var i=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var o=e("../util/Immediate");var n=e("./AsyncAction");var a=function(n){i(e,n);function e(e,t){var r=n.call(this,e,t)||this;r.scheduler=e;r.work=t;return r}e.prototype.requestAsyncId=function(e,t,r){if(r===void 0){r=0}if(r!==null&&r>0){return n.prototype.requestAsyncId.call(this,e,t,r)}e.actions.push(this);return e.scheduled||(e.scheduled=o.Immediate.setImmediate(e.flush.bind(e,null)))};e.prototype.recycleAsyncId=function(e,t,r){if(r===void 0){r=0}if(r!==null&&r>0||r===null&&this.delay>0){return n.prototype.recycleAsyncId.call(this,e,t,r)}if(e.actions.length===0){o.Immediate.clearImmediate(t);e.scheduled=undefined}return undefined};return e}(n.AsyncAction);r.AsapAction=a},{"../util/Immediate":195,"./AsyncAction":181}],180:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var i=e("./AsyncScheduler");var o=function(e){n(t,e);function t(){return e!==null&&e.apply(this,arguments)||this}t.prototype.flush=function(e){this.active=true;this.scheduled=undefined;var t=this.actions;var r;var n=-1;var i=t.length;e=e||t.shift();do{if(r=e.execute(e.state,e.delay)){break}}while(++n<i&&(e=t.shift()));this.active=false;if(r){while(++n<i&&(e=t.shift())){e.unsubscribe()}throw r}};return t}(i.AsyncScheduler);r.AsapScheduler=o},{"./AsyncScheduler":182}],181:[function(e,t,r){"use strict";var i=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var n=e("./Action");var o=function(n){i(e,n);function e(e,t){var r=n.call(this,e,t)||this;r.scheduler=e;r.work=t;r.pending=false;return r}e.prototype.schedule=function(e,t){if(t===void 0){t=0}if(this.closed){return this}this.state=e;var r=this.id;var n=this.scheduler;if(r!=null){this.id=this.recycleAsyncId(n,r,t)}this.pending=true;this.delay=t;this.id=this.id||this.requestAsyncId(n,this.id,t);return this};e.prototype.requestAsyncId=function(e,t,r){if(r===void 0){r=0}return setInterval(e.flush.bind(e,this),r)};e.prototype.recycleAsyncId=function(e,t,r){if(r===void 0){r=0}if(r!==null&&this.delay===r&&this.pending===false){return t}clearInterval(t)};e.prototype.execute=function(e,t){if(this.closed){return new Error("executing a cancelled action")}this.pending=false;var r=this._execute(e,t);if(r){return r}else if(this.pending===false&&this.id!=null){this.id=this.recycleAsyncId(this.scheduler,this.id,null)}};e.prototype._execute=function(e,t){var r=false;var n=undefined;try{this.work(e)}catch(e){r=true;n=!!e&&e||new Error(e)}if(r){this.unsubscribe();return n}};e.prototype._unsubscribe=function(){var e=this.id;var t=this.scheduler;var r=t.actions;var n=r.indexOf(this);this.work=null;this.state=null;this.pending=false;this.scheduler=null;if(n!==-1){r.splice(n,1)}if(e!=null){this.id=this.recycleAsyncId(t,e,null)}this.delay=null};return e}(n.Action);r.AsyncAction=o},{"./Action":176}],182:[function(e,t,r){"use strict";var o=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var a=e("../Scheduler");var n=function(n){o(i,n);function i(e,t){if(t===void 0){t=a.Scheduler.now}var r=n.call(this,e,function(){if(i.delegate&&i.delegate!==r){return i.delegate.now()}else{return t()}})||this;r.actions=[];r.active=false;r.scheduled=undefined;return r}i.prototype.schedule=function(e,t,r){if(t===void 0){t=0}if(i.delegate&&i.delegate!==this){return i.delegate.schedule(e,t,r)}else{return n.prototype.schedule.call(this,e,t,r)}};i.prototype.flush=function(e){var t=this.actions;if(this.active){t.push(e);return}var r;this.active=true;do{if(r=e.execute(e.state,e.delay)){break}}while(e=t.shift());this.active=false;if(r){while(e=t.shift()){e.unsubscribe()}throw r}};return i}(a.Scheduler);r.AsyncScheduler=n},{"../Scheduler":36}],183:[function(e,t,r){"use strict";var i=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var n=e("./AsyncAction");var o=function(n){i(e,n);function e(e,t){var r=n.call(this,e,t)||this;r.scheduler=e;r.work=t;return r}e.prototype.schedule=function(e,t){if(t===void 0){t=0}if(t>0){return n.prototype.schedule.call(this,e,t)}this.delay=t;this.state=e;this.scheduler.flush(this);return this};e.prototype.execute=function(e,t){return t>0||this.closed?n.prototype.execute.call(this,e,t):this._execute(e,t)};e.prototype.requestAsyncId=function(e,t,r){if(r===void 0){r=0}if(r!==null&&r>0||r===null&&this.delay>0){return n.prototype.requestAsyncId.call(this,e,t,r)}return e.flush(this)};return e}(n.AsyncAction);r.QueueAction=o},{"./AsyncAction":181}],184:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var i=e("./AsyncScheduler");var o=function(e){n(t,e);function t(){return e!==null&&e.apply(this,arguments)||this}return t}(i.AsyncScheduler);r.QueueScheduler=o},{"./AsyncScheduler":182}],185:[function(e,t,r){"use strict";var a=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var n=e("./AsyncAction");var i=e("./AsyncScheduler");var o=function(n){a(e,n);function e(e,t){if(e===void 0){e=s}if(t===void 0){t=Number.POSITIVE_INFINITY}var r=n.call(this,e,function(){return r.frame})||this;r.maxFrames=t;r.frame=0;r.index=-1;return r}e.prototype.flush=function(){var e=this,t=e.actions,r=e.maxFrames;var n,i;while((i=t.shift())&&(this.frame=i.delay)<=r){if(n=i.execute(i.state,i.delay)){break}}if(n){while(i=t.shift()){i.unsubscribe()}throw n}};e.frameTimeFactor=10;return e}(i.AsyncScheduler);r.VirtualTimeScheduler=o;var s=function(i){a(o,i);function o(e,t,r){if(r===void 0){r=e.index+=1}var n=i.call(this,e,t)||this;n.scheduler=e;n.work=t;n.index=r;n.active=true;n.index=e.index=r;return n}o.prototype.schedule=function(e,t){if(t===void 0){t=0}if(!this.id){return i.prototype.schedule.call(this,e,t)}this.active=false;var r=new o(this.scheduler,this.work);this.add(r);return r.schedule(e,t)};o.prototype.requestAsyncId=function(e,t,r){if(r===void 0){r=0}this.delay=e.frame+r;var n=e.actions;n.push(this);n.sort(o.sortActions);return true};o.prototype.recycleAsyncId=function(e,t,r){if(r===void 0){r=0}return undefined};o.prototype._execute=function(e,t){if(this.active===true){return i.prototype._execute.call(this,e,t)}};o.sortActions=function(e,t){if(e.delay===t.delay){if(e.index===t.index){return 0}else if(e.index>t.index){return 1}else{return-1}}else if(e.delay>t.delay){return 1}else{return-1}};return o}(n.AsyncAction);r.VirtualAction=s},{"./AsyncAction":181,"./AsyncScheduler":182}],186:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("./AnimationFrameAction");var i=e("./AnimationFrameScheduler");r.animationFrame=new i.AnimationFrameScheduler(n.AnimationFrameAction)},{"./AnimationFrameAction":177,"./AnimationFrameScheduler":178}],187:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("./AsapAction");var i=e("./AsapScheduler");r.asap=new i.AsapScheduler(n.AsapAction)},{"./AsapAction":179,"./AsapScheduler":180}],188:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("./AsyncAction");var i=e("./AsyncScheduler");r.async=new i.AsyncScheduler(n.AsyncAction)},{"./AsyncAction":181,"./AsyncScheduler":182}],189:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("./QueueAction");var i=e("./QueueScheduler");r.queue=new i.QueueScheduler(n.QueueAction)},{"./QueueAction":183,"./QueueScheduler":184}],190:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});function n(){if(typeof Symbol!=="function"||!Symbol.iterator){return"@@iterator"}return Symbol.iterator}r.getSymbolIterator=n;r.iterator=n();r.$$iterator=r.iterator},{}],191:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});r.observable=typeof Symbol==="function"&&Symbol.observable||"@@observable"},{}],192:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});r.rxSubscriber=typeof Symbol==="function"?Symbol("rxSubscriber"):"@@rxSubscriber_"+Math.random();r.$$rxSubscriber=r.rxSubscriber},{}],193:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});function n(){Error.call(this);this.message="argument out of range";this.name="ArgumentOutOfRangeError";return this}n.prototype=Object.create(Error.prototype);r.ArgumentOutOfRangeError=n},{}],194:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});function n(){Error.call(this);this.message="no elements in sequence";this.name="EmptyError";return this}n.prototype=Object.create(Error.prototype);r.EmptyError=n},{}],195:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=1;var i={};function o(e){var t=i[e];if(t){t()}}r.Immediate={setImmediate:function(e){var t=n++;i[t]=e;Promise.resolve().then(function(){return o(t)});return t},clearImmediate:function(e){delete i[e]}}},{}],196:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});function n(){Error.call(this);this.message="object unsubscribed";this.name="ObjectUnsubscribedError";return this}n.prototype=Object.create(Error.prototype);r.ObjectUnsubscribedError=n},{}],197:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});function n(){Error.call(this);this.message="Timeout has occurred";this.name="TimeoutError";return this}n.prototype=Object.create(Error.prototype);r.TimeoutError=n},{}],198:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});function n(e){Error.call(this);this.message=e?e.length+" errors occurred during unsubscription:\n"+e.map(function(e,t){return t+1+") "+e.toString()}).join("\n  "):"";this.name="UnsubscriptionError";this.errors=e;return this}n.prototype=Object.create(Error.prototype);r.UnsubscriptionError=n},{}],199:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var o=e("../Subscriber");function n(e){while(e){var t=e,r=t.closed,n=t.destination,i=t.isStopped;if(r||i){return false}else if(n&&n instanceof o.Subscriber){e=n}else{e=null}}return true}r.canReportError=n},{"../Subscriber":39}],200:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});r.errorObject={e:{}}},{}],201:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});function n(e){setTimeout(function(){throw e})}r.hostReportError=n},{}],202:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});function n(e){return e}r.identity=n},{}],203:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});r.isArray=Array.isArray||function(e){return e&&typeof e.length==="number"}},{}],204:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});r.isArrayLike=function(e){return e&&typeof e.length==="number"&&typeof e!=="function"}},{}],205:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});function n(e){return e instanceof Date&&!isNaN(+e)}r.isDate=n},{}],206:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});function n(e){return typeof e==="function"}r.isFunction=n},{}],207:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("../symbol/observable");function i(e){return e&&typeof e[n.observable]==="function"}r.isInteropObservable=i},{"../symbol/observable":191}],208:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("../symbol/iterator");function i(e){return e&&typeof e[n.iterator]==="function"}r.isIterable=i},{"../symbol/iterator":190}],209:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("./isArray");function i(e){return!n.isArray(e)&&e-parseFloat(e)+1>=0}r.isNumeric=i},{"./isArray":203}],210:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});function n(e){return e!=null&&typeof e==="object"}r.isObject=n},{}],211:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("../Observable");function i(e){return!!e&&(e instanceof n.Observable||typeof e.lift==="function"&&typeof e.subscribe==="function")}r.isObservable=i},{"../Observable":32}],212:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});function n(e){return e&&typeof e.subscribe!=="function"&&typeof e.then==="function"}r.isPromise=n},{}],213:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});function n(e){return e&&typeof e.schedule==="function"}r.isScheduler=n},{}],214:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});function n(){}r.noop=n},{}],215:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});function n(e,t){function r(){return!r.pred.apply(r.thisArg,arguments)}r.pred=e;r.thisArg=t;return r}r.not=n},{}],216:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("./noop");function i(){var e=[];for(var t=0;t<arguments.length;t++){e[t]=arguments[t]}return o(e)}r.pipe=i;function o(r){if(!r){return n.noop}if(r.length===1){return r[0]}return function e(t){return r.reduce(function(e,t){return t(e)},t)}}r.pipeFromArray=o},{"./noop":214}],217:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("../Observable");var i=e("./subscribeToArray");var o=e("./subscribeToPromise");var a=e("./subscribeToIterable");var s=e("./subscribeToObservable");var u=e("./isArrayLike");var c=e("./isPromise");var h=e("./isObject");var l=e("../symbol/iterator");var p=e("../symbol/observable");r.subscribeTo=function(t){if(t instanceof n.Observable){return function(e){if(t._isScalar){e.next(t.value);e.complete();return undefined}else{return t.subscribe(e)}}}else if(t&&typeof t[p.observable]==="function"){return s.subscribeToObservable(t)}else if(u.isArrayLike(t)){return i.subscribeToArray(t)}else if(c.isPromise(t)){return o.subscribeToPromise(t)}else if(t&&typeof t[l.iterator]==="function"){return a.subscribeToIterable(t)}else{var e=h.isObject(t)?"an invalid object":"'"+t+"'";var r="You provided "+e+" where a stream was expected."+" You can provide an Observable, Promise, Array, or Iterable.";throw new TypeError(r)}}},{"../Observable":32,"../symbol/iterator":190,"../symbol/observable":191,"./isArrayLike":204,"./isObject":210,"./isPromise":212,"./subscribeToArray":218,"./subscribeToIterable":219,"./subscribeToObservable":220,"./subscribeToPromise":221}],218:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});r.subscribeToArray=function(n){return function(e){for(var t=0,r=n.length;t<r&&!e.closed;t++){e.next(n[t])}if(!e.closed){e.complete()}}}},{}],219:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var i=e("../symbol/iterator");r.subscribeToIterable=function(n){return function(e){var t=n[i.iterator]();do{var r=t.next();if(r.done){e.complete();break}e.next(r.value);if(e.closed){break}}while(true);if(typeof t.return==="function"){e.add(function(){if(t.return){t.return()}})}return e}}},{"../symbol/iterator":190}],220:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("../symbol/observable");r.subscribeToObservable=function(r){return function(e){var t=r[n.observable]();if(typeof t.subscribe!=="function"){throw new TypeError("Provided object does not correctly implement Symbol.observable")}else{return t.subscribe(e)}}}},{"../symbol/observable":191}],221:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("./hostReportError");r.subscribeToPromise=function(e){return function(t){e.then(function(e){if(!t.closed){t.next(e);t.complete()}},function(e){return t.error(e)}).then(null,n.hostReportError);return t}}},{"./hostReportError":201}],222:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var o=e("../InnerSubscriber");var a=e("./subscribeTo");function n(e,t,r,n,i){if(i===void 0){i=new o.InnerSubscriber(e,r,n)}if(i.closed){return}return a.subscribeTo(t)(i)}r.subscribeToResult=n},{"../InnerSubscriber":30,"./subscribeTo":217}],223:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("../Subscriber");var i=e("../symbol/rxSubscriber");var o=e("../Observer");function a(e,t,r){if(e){if(e instanceof n.Subscriber){return e}if(e[i.rxSubscriber]){return e[i.rxSubscriber]()}}if(!e&&!t&&!r){return new n.Subscriber(o.empty)}return new n.Subscriber(e,t,r)}r.toSubscriber=a},{"../Observer":33,"../Subscriber":39,"../symbol/rxSubscriber":192}],224:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("./errorObject");var i;function o(){try{return i.apply(this,arguments)}catch(e){n.errorObject.e=e;return n.errorObject}}function a(e){i=e;return o}r.tryCatch=a},{"./errorObject":200}],225:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("../internal/operators/audit");r.audit=n.audit;var i=e("../internal/operators/auditTime");r.auditTime=i.auditTime;var o=e("../internal/operators/buffer");r.buffer=o.buffer;var a=e("../internal/operators/bufferCount");r.bufferCount=a.bufferCount;var s=e("../internal/operators/bufferTime");r.bufferTime=s.bufferTime;var u=e("../internal/operators/bufferToggle");r.bufferToggle=u.bufferToggle;var c=e("../internal/operators/bufferWhen");r.bufferWhen=c.bufferWhen;var h=e("../internal/operators/catchError");r.catchError=h.catchError;var l=e("../internal/operators/combineAll");r.combineAll=l.combineAll;var p=e("../internal/operators/combineLatest");r.combineLatest=p.combineLatest;var f=e("../internal/operators/concat");r.concat=f.concat;var d=e("../internal/operators/concatAll");r.concatAll=d.concatAll;var v=e("../internal/operators/concatMap");r.concatMap=v.concatMap;var m=e("../internal/operators/concatMapTo");r.concatMapTo=m.concatMapTo;var g=e("../internal/operators/count");r.count=g.count;var y=e("../internal/operators/debounce");r.debounce=y.debounce;var _=e("../internal/operators/debounceTime");r.debounceTime=_.debounceTime;var b=e("../internal/operators/defaultIfEmpty");r.defaultIfEmpty=b.defaultIfEmpty;var x=e("../internal/operators/delay");r.delay=x.delay;var w=e("../internal/operators/delayWhen");r.delayWhen=w.delayWhen;var S=e("../internal/operators/dematerialize");r.dematerialize=S.dematerialize;var M=e("../internal/operators/distinct");r.distinct=M.distinct;var E=e("../internal/operators/distinctUntilChanged");r.distinctUntilChanged=E.distinctUntilChanged;var C=e("../internal/operators/distinctUntilKeyChanged");r.distinctUntilKeyChanged=C.distinctUntilKeyChanged;var T=e("../internal/operators/elementAt");r.elementAt=T.elementAt;var O=e("../internal/operators/endWith");r.endWith=O.endWith;var P=e("../internal/operators/every");r.every=P.every;var A=e("../internal/operators/exhaust");r.exhaust=A.exhaust;var j=e("../internal/operators/exhaustMap");r.exhaustMap=j.exhaustMap;var R=e("../internal/operators/expand");r.expand=R.expand;var L=e("../internal/operators/filter");r.filter=L.filter;var I=e("../internal/operators/finalize");r.finalize=I.finalize;var N=e("../internal/operators/find");r.find=N.find;var k=e("../internal/operators/findIndex");r.findIndex=k.findIndex;var D=e("../internal/operators/first");r.first=D.first;var B=e("../internal/operators/groupBy");r.groupBy=B.groupBy;var F=e("../internal/operators/ignoreElements");r.ignoreElements=F.ignoreElements;var $=e("../internal/operators/isEmpty");r.isEmpty=$.isEmpty;var z=e("../internal/operators/last");r.last=z.last;var U=e("../internal/operators/map");r.map=U.map;var G=e("../internal/operators/mapTo");r.mapTo=G.mapTo;var V=e("../internal/operators/materialize");r.materialize=V.materialize;var H=e("../internal/operators/max");r.max=H.max;var q=e("../internal/operators/merge");r.merge=q.merge;var W=e("../internal/operators/mergeAll");r.mergeAll=W.mergeAll;var X=e("../internal/operators/mergeMap");r.mergeMap=X.mergeMap;var Y=e("../internal/operators/mergeMap");r.flatMap=Y.mergeMap;var K=e("../internal/operators/mergeMapTo");r.mergeMapTo=K.mergeMapTo;var Z=e("../internal/operators/mergeScan");r.mergeScan=Z.mergeScan;var J=e("../internal/operators/min");r.min=J.min;var Q=e("../internal/operators/multicast");r.multicast=Q.multicast;var ee=e("../internal/operators/observeOn");r.observeOn=ee.observeOn;var te=e("../internal/operators/onErrorResumeNext");r.onErrorResumeNext=te.onErrorResumeNext;var re=e("../internal/operators/pairwise");r.pairwise=re.pairwise;var ne=e("../internal/operators/partition");r.partition=ne.partition;var ie=e("../internal/operators/pluck");r.pluck=ie.pluck;var oe=e("../internal/operators/publish");r.publish=oe.publish;var ae=e("../internal/operators/publishBehavior");r.publishBehavior=ae.publishBehavior;var se=e("../internal/operators/publishLast");r.publishLast=se.publishLast;var ue=e("../internal/operators/publishReplay");r.publishReplay=ue.publishReplay;var ce=e("../internal/operators/race");r.race=ce.race;var he=e("../internal/operators/reduce");r.reduce=he.reduce;var le=e("../internal/operators/repeat");r.repeat=le.repeat;var pe=e("../internal/operators/repeatWhen");r.repeatWhen=pe.repeatWhen;var fe=e("../internal/operators/retry");r.retry=fe.retry;var de=e("../internal/operators/retryWhen");r.retryWhen=de.retryWhen;var ve=e("../internal/operators/refCount");r.refCount=ve.refCount;var me=e("../internal/operators/sample");r.sample=me.sample;var ge=e("../internal/operators/sampleTime");r.sampleTime=ge.sampleTime;var ye=e("../internal/operators/scan");r.scan=ye.scan;var _e=e("../internal/operators/sequenceEqual");r.sequenceEqual=_e.sequenceEqual;var be=e("../internal/operators/share");r.share=be.share;var xe=e("../internal/operators/shareReplay");r.shareReplay=xe.shareReplay;var we=e("../internal/operators/single");r.single=we.single;var Se=e("../internal/operators/skip");r.skip=Se.skip;var Me=e("../internal/operators/skipLast");r.skipLast=Me.skipLast;var Ee=e("../internal/operators/skipUntil");r.skipUntil=Ee.skipUntil;var Ce=e("../internal/operators/skipWhile");r.skipWhile=Ce.skipWhile;var Te=e("../internal/operators/startWith");r.startWith=Te.startWith;var Oe=e("../internal/operators/subscribeOn");r.subscribeOn=Oe.subscribeOn;var Pe=e("../internal/operators/switchAll");r.switchAll=Pe.switchAll;var Ae=e("../internal/operators/switchMap");r.switchMap=Ae.switchMap;var je=e("../internal/operators/switchMapTo");r.switchMapTo=je.switchMapTo;var Re=e("../internal/operators/take");r.take=Re.take;var Le=e("../internal/operators/takeLast");r.takeLast=Le.takeLast;var Ie=e("../internal/operators/takeUntil");r.takeUntil=Ie.takeUntil;var Ne=e("../internal/operators/takeWhile");r.takeWhile=Ne.takeWhile;var ke=e("../internal/operators/tap");r.tap=ke.tap;var De=e("../internal/operators/throttle");r.throttle=De.throttle;var Be=e("../internal/operators/throttleTime");r.throttleTime=Be.throttleTime;var Fe=e("../internal/operators/throwIfEmpty");r.throwIfEmpty=Fe.throwIfEmpty;var $e=e("../internal/operators/timeInterval");r.timeInterval=$e.timeInterval;var ze=e("../internal/operators/timeout");r.timeout=ze.timeout;var Ue=e("../internal/operators/timeoutWith");r.timeoutWith=Ue.timeoutWith;var Ge=e("../internal/operators/timestamp");r.timestamp=Ge.timestamp;var Ve=e("../internal/operators/toArray");r.toArray=Ve.toArray;var He=e("../internal/operators/window");r.window=He.window;var qe=e("../internal/operators/windowCount");r.windowCount=qe.windowCount;var We=e("../internal/operators/windowTime");r.windowTime=We.windowTime;var Xe=e("../internal/operators/windowToggle");r.windowToggle=Xe.windowToggle;var Ye=e("../internal/operators/windowWhen");r.windowWhen=Ye.windowWhen;var Ke=e("../internal/operators/withLatestFrom");r.withLatestFrom=Ke.withLatestFrom;var Ze=e("../internal/operators/zip");r.zip=Ze.zip;var Je=e("../internal/operators/zipAll");r.zipAll=Je.zipAll},{"../internal/operators/audit":73,"../internal/operators/auditTime":74,"../internal/operators/buffer":75,"../internal/operators/bufferCount":76,"../internal/operators/bufferTime":77,"../internal/operators/bufferToggle":78,"../internal/operators/bufferWhen":79,"../internal/operators/catchError":80,"../internal/operators/combineAll":81,"../internal/operators/combineLatest":82,"../internal/operators/concat":83,"../internal/operators/concatAll":84,"../internal/operators/concatMap":85,"../internal/operators/concatMapTo":86,"../internal/operators/count":87,"../internal/operators/debounce":88,"../internal/operators/debounceTime":89,"../internal/operators/defaultIfEmpty":90,"../internal/operators/delay":91,"../internal/operators/delayWhen":92,"../internal/operators/dematerialize":93,"../internal/operators/distinct":94,"../internal/operators/distinctUntilChanged":95,"../internal/operators/distinctUntilKeyChanged":96,"../internal/operators/elementAt":97,"../internal/operators/endWith":98,"../internal/operators/every":99,"../internal/operators/exhaust":100,"../internal/operators/exhaustMap":101,"../internal/operators/expand":102,"../internal/operators/filter":103,"../internal/operators/finalize":104,"../internal/operators/find":105,"../internal/operators/findIndex":106,"../internal/operators/first":107,"../internal/operators/groupBy":108,"../internal/operators/ignoreElements":109,"../internal/operators/isEmpty":110,"../internal/operators/last":111,"../internal/operators/map":112,"../internal/operators/mapTo":113,"../internal/operators/materialize":114,"../internal/operators/max":115,"../internal/operators/merge":116,"../internal/operators/mergeAll":117,"../internal/operators/mergeMap":118,"../internal/operators/mergeMapTo":119,"../internal/operators/mergeScan":120,"../internal/operators/min":121,"../internal/operators/multicast":122,"../internal/operators/observeOn":123,"../internal/operators/onErrorResumeNext":124,"../internal/operators/pairwise":125,"../internal/operators/partition":126,"../internal/operators/pluck":127,"../internal/operators/publish":128,"../internal/operators/publishBehavior":129,"../internal/operators/publishLast":130,"../internal/operators/publishReplay":131,"../internal/operators/race":132,"../internal/operators/reduce":133,"../internal/operators/refCount":134,"../internal/operators/repeat":135,"../internal/operators/repeatWhen":136,"../internal/operators/retry":137,"../internal/operators/retryWhen":138,"../internal/operators/sample":139,"../internal/operators/sampleTime":140,"../internal/operators/scan":141,"../internal/operators/sequenceEqual":142,"../internal/operators/share":143,"../internal/operators/shareReplay":144,"../internal/operators/single":145,"../internal/operators/skip":146,"../internal/operators/skipLast":147,"../internal/operators/skipUntil":148,"../internal/operators/skipWhile":149,"../internal/operators/startWith":150,"../internal/operators/subscribeOn":151,"../internal/operators/switchAll":152,"../internal/operators/switchMap":153,"../internal/operators/switchMapTo":154,"../internal/operators/take":155,"../internal/operators/takeLast":156,"../internal/operators/takeUntil":157,"../internal/operators/takeWhile":158,"../internal/operators/tap":159,"../internal/operators/throttle":160,"../internal/operators/throttleTime":161,"../internal/operators/throwIfEmpty":162,"../internal/operators/timeInterval":163,"../internal/operators/timeout":164,"../internal/operators/timeoutWith":165,"../internal/operators/timestamp":166,"../internal/operators/toArray":167,"../internal/operators/window":168,"../internal/operators/windowCount":169,"../internal/operators/windowTime":170,"../internal/operators/windowToggle":171,"../internal/operators/windowWhen":172,"../internal/operators/withLatestFrom":173,"../internal/operators/zip":174,"../internal/operators/zipAll":175}],226:[function(e,r,n){(function(e,t){"object"===typeof n&&"undefined"!==typeof r?t(n):"function"===typeof o&&o.amd?o(["exports"],t):t(e.THREE={})})(this,function(e){function t(){}function H(e,t){this.x=e||0;this.y=t||0}function xe(){this.elements=[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 s(e,t,r,n){this._x=e||0;this._y=t||0;this._z=r||0;this._w=void 0!==n?n:1}function we(e,t,r){this.x=e||0;this.y=t||0;this.z=r||0}function m(){this.elements=[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 p(e,t,r,n,i,o,a,s,u,c){Object.defineProperty(this,"id",{value:ro++});this.uuid=eo.generateUUID();this.name="";this.image=void 0!==e?e:p.DEFAULT_IMAGE;this.mipmaps=[];this.mapping=void 0!==t?t:p.DEFAULT_MAPPING;this.wrapS=void 0!==r?r:1001;this.wrapT=void 0!==n?n:1001;this.magFilter=void 0!==i?i:1006;this.minFilter=void 0!==o?o:1008;this.anisotropy=void 0!==u?u:1;this.format=void 0!==a?a:1023;this.type=void 0!==s?s:1009;this.offset=new H(0,0);this.repeat=new H(1,1);this.center=new H(0,0);this.rotation=0;this.matrixAutoUpdate=!0;this.matrix=new m;this.generateMipmaps=!0;this.premultiplyAlpha=!1;this.flipY=!0;this.unpackAlignment=4;this.encoding=void 0!==c?c:3e3;this.version=0;this.onUpdate=null}function Se(e,t,r,n){this.x=e||0;this.y=t||0;this.z=r||0;this.w=void 0!==n?n:1}function T(e,t,r){this.width=e;this.height=t;this.scissor=new Se(0,0,e,t);this.scissorTest=!1;this.viewport=new Se(0,0,e,t);r=r||{};void 0===r.minFilter&&(r.minFilter=1006);this.texture=new p(void 0,void 0,r.wrapS,r.wrapT,r.magFilter,r.minFilter,r.format,r.type,r.anisotropy,r.encoding);this.texture.generateMipmaps=void 0!==r.generateMipmaps?r.generateMipmaps:!0;this.depthBuffer=void 0!==r.depthBuffer?r.depthBuffer:!0;this.stencilBuffer=void 0!==r.stencilBuffer?r.stencilBuffer:!0;this.depthTexture=void 0!==r.depthTexture?r.depthTexture:null}function n(e,t,r){T.call(this,e,t,r);this.activeMipMapLevel=this.activeCubeFace=0}function Me(e,t,r,n,i,o,a,s,u,c,h,l){p.call(this,null,o,a,s,u,c,n,i,h,l);this.image={data:e,width:t,height:r};this.magFilter=void 0!==u?u:1003;this.minFilter=void 0!==c?c:1003;this.flipY=this.generateMipmaps=!1;this.unpackAlignment=1}function r(e,t){this.min=void 0!==e?e:new we(Infinity,Infinity,Infinity);this.max=void 0!==t?t:new we(-Infinity,-Infinity,-Infinity)}function c(e,t){this.center=void 0!==e?e:new we;this.radius=void 0!==t?t:0}function g(e,t){this.normal=void 0!==e?e:new we(1,0,0);this.constant=void 0!==t?t:0}function Ee(e,t,r,n,i,o){this.planes=[void 0!==e?e:new g,void 0!==t?t:new g,void 0!==r?r:new g,void 0!==n?n:new g,void 0!==i?i:new g,void 0!==o?o:new g]}function w(e,t,r){return void 0===t&&void 0===r?this.set(e):this.setRGB(e,t,r)}function Ce(){function r(e,t){!1!==i&&(o(e,t),n.requestAnimationFrame(r))}var n=null,i=!1,o=null;return{start:function(){!0!==i&&null!==o&&(n.requestAnimationFrame(r),i=!0)},stop:function(){i=!1},setAnimationLoop:function(e){o=e},setContext:function(e){n=e}}}function Te(a){function s(e,t){var r=e.array,n=e.dynamic?a.DYNAMIC_DRAW:a.STATIC_DRAW,i=a.createBuffer();a.bindBuffer(t,i);a.bufferData(t,r,n);e.onUploadCallback();t=a.FLOAT;r instanceof Float32Array?t=a.FLOAT:r instanceof Float64Array?console.warn("THREE.WebGLAttributes: Unsupported data buffer format: Float64Array."):r instanceof Uint16Array?t=a.UNSIGNED_SHORT:r instanceof Int16Array?t=a.SHORT:r instanceof Uint32Array?t=a.UNSIGNED_INT:r instanceof Int32Array?t=a.INT:r instanceof Int8Array?t=a.BYTE:r instanceof Uint8Array&&(t=a.UNSIGNED_BYTE);return{buffer:i,type:t,bytesPerElement:r.BYTES_PER_ELEMENT,version:e.version}}var u=new WeakMap;return{get:function(e){e.isInterleavedBufferAttribute&&(e=e.data);return u.get(e)},remove:function(e){e.isInterleavedBufferAttribute&&(e=e.data);var t=u.get(e);t&&(a.deleteBuffer(t.buffer),u.delete(e))},update:function(e,t){e.isInterleavedBufferAttribute&&(e=e.data);var r=u.get(e);if(void 0===r)u.set(e,s(e,t));else if(r.version<e.version){var n=e,i=n.array,o=n.updateRange;a.bindBuffer(t,r.buffer);!1===n.dynamic?a.bufferData(t,i,a.STATIC_DRAW):-1===o.count?a.bufferSubData(t,0,i):0===o.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."):(a.bufferSubData(t,o.offset*i.BYTES_PER_ELEMENT,i.subarray(o.offset,o.offset+o.count)),o.count=-1);r.version=e.version}}}}function i(e,t,r,n){this._x=e||0;this._y=t||0;this._z=r||0;this._order=n||i.DefaultOrder}function o(){this.mask=1}function h(){Object.defineProperty(this,"id",{value:uo++});this.uuid=eo.generateUUID();this.name="";this.type="Object3D";this.parent=null;this.children=[];this.up=h.DefaultUp.clone();var e=new we,t=new i,r=new s,n=new we(1,1,1);t.onChange(function(){r.setFromEuler(t,!1)});r.onChange(function(){t.setFromQuaternion(r,void 0,!1)});Object.defineProperties(this,{position:{enumerable:!0,value:e},rotation:{enumerable:!0,value:t},quaternion:{enumerable:!0,value:r},scale:{enumerable:!0,value:n},modelViewMatrix:{value:new xe},normalMatrix:{value:new m}});this.matrix=new xe;this.matrixWorld=new xe;this.matrixAutoUpdate=h.DefaultMatrixAutoUpdate;this.matrixWorldNeedsUpdate=!1;this.layers=new o;this.visible=!0;this.receiveShadow=this.castShadow=!1;this.frustumCulled=!0;this.renderOrder=0;this.userData={}}function u(){h.call(this);this.type="Camera";this.matrixWorldInverse=new xe;this.projectionMatrix=new xe}function f(e,t,r,n,i,o){u.call(this);this.type="OrthographicCamera";this.zoom=1;this.view=null;this.left=e;this.right=t;this.top=r;this.bottom=n;this.near=void 0!==i?i:.1;this.far=void 0!==o?o:2e3;this.updateProjectionMatrix()}function D(e,t,r,n,i,o){this.a=e;this.b=t;this.c=r;this.normal=n&&n.isVector3?n:new we;this.vertexNormals=Array.isArray(n)?n:[];this.color=i&&i.isColor?i:new w;this.vertexColors=Array.isArray(i)?i:[];this.materialIndex=void 0!==o?o:0}function S(){Object.defineProperty(this,"id",{value:co+=2});this.uuid=eo.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 y(e,t,r){if(Array.isArray(e))throw new TypeError("THREE.BufferAttribute: array should be a Typed Array.");this.name="";this.array=e;this.itemSize=t;this.count=void 0!==e?e.length/t:0;this.normalized=!0===r;this.dynamic=!1;this.updateRange={offset:0,count:-1};this.version=0}function a(e,t,r){y.call(this,new Int8Array(e),t,r)}function l(e,t,r){y.call(this,new Uint8Array(e),t,r)}function d(e,t,r){y.call(this,new Uint8ClampedArray(e),t,r)}function v(e,t,r){y.call(this,new Int16Array(e),t,r)}function _(e,t,r){y.call(this,new Uint16Array(e),t,r)}function b(e,t,r){y.call(this,new Int32Array(e),t,r)}function x(e,t,r){y.call(this,new Uint32Array(e),t,r)}function P(e,t,r){y.call(this,new Float32Array(e),t,r)}function M(e,t,r){y.call(this,new Float64Array(e),t,r)}function E(){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 C(e){if(0===e.length)return-Infinity;for(var t=e[0],r=1,n=e.length;r<n;++r)e[r]>t&&(t=e[r]);return t}function A(){Object.defineProperty(this,"id",{value:ho+=2});this.uuid=eo.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};this.userData={}}function O(e,t,r,n,i,o){S.call(this);this.type="BoxGeometry";this.parameters={width:e,height:t,depth:r,widthSegments:n,heightSegments:i,depthSegments:o};this.fromBufferGeometry(new j(e,t,r,n,i,o));this.mergeVertices()}function j(e,t,r,n,i,o){function a(e,t,r,n,i,o,a,s,u,c,h){var l=o/u,p=a/c,f=o/2,d=a/2,v=s/2;a=u+1;var m=c+1,g=o=0,y,_,b=new we;for(_=0;_<m;_++){var x=_*p-d;for(y=0;y<a;y++)b[e]=(y*l-f)*n,b[t]=x*i,b[r]=v,M.push(b.x,b.y,b.z),b[e]=0,b[t]=0,b[r]=0<s?1:-1,E.push(b.x,b.y,b.z),C.push(y/u),C.push(1-_/c),o+=1}for(_=0;_<c;_++)for(y=0;y<u;y++)e=T+y+a*(_+1),t=T+(y+1)+a*(_+1),r=T+(y+1)+a*_,S.push(T+y+a*_,e,r),S.push(e,t,r),g+=6;w.addGroup(O,g,h);O+=g;T+=o}A.call(this);this.type="BoxBufferGeometry";this.parameters={width:e,height:t,depth:r,widthSegments:n,heightSegments:i,depthSegments:o};var w=this;e=e||1;t=t||1;r=r||1;n=Math.floor(n)||1;i=Math.floor(i)||1;o=Math.floor(o)||1;var S=[],M=[],E=[],C=[],T=0,O=0;a("z","y","x",-1,-1,r,t,e,o,i,0);a("z","y","x",1,-1,r,t,-e,o,i,1);a("x","z","y",1,1,e,r,t,n,o,2);a("x","z","y",1,-1,e,r,-t,n,o,3);a("x","y","z",1,-1,e,t,r,n,i,4);a("x","y","z",-1,-1,e,t,-r,n,i,5);this.setIndex(S);this.addAttribute("position",new P(M,3));this.addAttribute("normal",new P(E,3));this.addAttribute("uv",new P(C,2))}function R(e,t,r,n){S.call(this);this.type="PlaneGeometry";this.parameters={width:e,height:t,widthSegments:r,heightSegments:n};this.fromBufferGeometry(new L(e,t,r,n));this.mergeVertices()}function L(e,t,r,n){A.call(this);this.type="PlaneBufferGeometry";this.parameters={width:e,height:t,widthSegments:r,heightSegments:n};e=e||1;t=t||1;var i=e/2,o=t/2;r=Math.floor(r)||1;n=Math.floor(n)||1;var a=r+1,s=n+1,u=e/r,c=t/n,h=[],l=[],p=[],f=[];for(e=0;e<s;e++){var d=e*c-o;for(t=0;t<a;t++)l.push(t*u-i,-d,0),p.push(0,0,1),f.push(t/r),f.push(1-e/n)}for(e=0;e<n;e++)for(t=0;t<r;t++)i=t+a*(e+1),o=t+1+a*(e+1),s=t+1+a*e,h.push(t+a*e,i,s),h.push(i,o,s);this.setIndex(h);this.addAttribute("position",new P(l,3));this.addAttribute("normal",new P(p,3));this.addAttribute("uv",new P(f,2))}function I(){Object.defineProperty(this,"id",{value:lo++});this.uuid=eo.generateUUID();this.name="";this.type="Material";this.lights=this.fog=!0;this.blending=1;this.side=0;this.flatShading=!1;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.shadowSide=null;this.colorWrite=!0;this.precision=null;this.polygonOffset=!1;this.polygonOffsetUnits=this.polygonOffsetFactor=0;this.dithering=!1;this.alphaTest=0;this.premultipliedAlpha=!1;this.overdraw=0;this.visible=!0;this.userData={};this.needsUpdate=!0}function N(e){I.call(this);this.type="MeshBasicMaterial";this.color=new w(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(e)}function k(e){I.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;this.uniformsNeedUpdate=!1;void 0!==e&&(void 0!==e.attributes&&console.error("THREE.ShaderMaterial: attributes should now be defined in THREE.BufferGeometry instead."),this.setValues(e))}function B(e,t){this.origin=void 0!==e?e:new we;this.direction=void 0!==t?t:new we}function F(e,t,r){this.a=void 0!==e?e:new we;this.b=void 0!==t?t:new we;this.c=void 0!==r?r:new we}function $(e,t){h.call(this);this.type="Mesh";this.geometry=void 0!==e?e:new A;this.material=void 0!==t?t:new N({color:16777215*Math.random()});this.drawMode=0;this.updateMorphTargets()}function Oe(i,r,o,n){function a(e,t){r.buffers.color.setClear(e.r,e.g,e.b,t,n)}var s=new w(0),u=0,c,h,l;return{getClearColor:function(){return s},setClearColor:function(e,t){s.set(e);u=void 0!==t?t:1;a(s,u)},getClearAlpha:function(){return u},setClearAlpha:function(e){u=e;a(s,u)},render:function(e,t,r,n){t=t.background;null===t?a(s,u):t&&t.isColor&&(a(t,1),n=!0);(i.autoClear||n)&&i.clear(i.autoClearColor,i.autoClearDepth,i.autoClearStencil);t&&t.isCubeTexture?(void 0===l&&(l=new $(new j(1,1,1),new k({uniforms:so.cube.uniforms,vertexShader:so.cube.vertexShader,fragmentShader:so.cube.fragmentShader,side:1,depthTest:!0,depthWrite:!1,fog:!1})),l.geometry.removeAttribute("normal"),l.geometry.removeAttribute("uv"),l.onBeforeRender=function(e,t,r){this.matrixWorld.copyPosition(r.matrixWorld)},o.update(l)),l.material.uniforms.tCube.value=t,e.push(l,l.geometry,l.material,0,null)):t&&t.isTexture&&(void 0===c&&(c=new f(-1,1,1,-1,0,1),h=new $(new L(2,2),new N({depthTest:!1,depthWrite:!1,fog:!1})),o.update(h)),h.material.map=t,i.renderBufferDirect(c,null,h.geometry,h.material,h,null))}}}function Pe(i,o,a,s){var u;this.setMode=function(e){u=e};this.render=function(e,t){i.drawArrays(u,e,t);a.update(t,u)};this.renderInstances=function(e,t,r){if(s.isWebGL2)var n=i;else if(n=o.get("ANGLE_instanced_arrays"),null===n){console.error("THREE.WebGLBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.");return}n[s.isWebGL2?"drawArraysInstanced":"drawArraysInstancedANGLE"](u,t,r,e.maxInstancedCount);a.update(r,u,e.maxInstancedCount)}}function Ae(t,r,e){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="undefined"!==typeof WebGL2RenderingContext&&t instanceof WebGL2RenderingContext,a=void 0!==e.precision?e.precision:"highp",s=n(a);s!==a&&(console.warn("THREE.WebGLRenderer:",a,"not supported, using",s,"instead."),a=s);e=!0===e.logarithmicDepthBuffer;s=t.getParameter(t.MAX_TEXTURE_IMAGE_UNITS);var u=t.getParameter(t.MAX_VERTEX_TEXTURE_IMAGE_UNITS),c=t.getParameter(t.MAX_TEXTURE_SIZE),h=t.getParameter(t.MAX_CUBE_MAP_TEXTURE_SIZE),l=t.getParameter(t.MAX_VERTEX_ATTRIBS),p=t.getParameter(t.MAX_VERTEX_UNIFORM_VECTORS),f=t.getParameter(t.MAX_VARYING_VECTORS),d=t.getParameter(t.MAX_FRAGMENT_UNIFORM_VECTORS),v=0<u,m=o||!!r.get("OES_texture_float");return{isWebGL2:o,getMaxAnisotropy:function(){if(void 0!==i)return i;var e=r.get("EXT_texture_filter_anisotropic");return i=null!==e?t.getParameter(e.MAX_TEXTURE_MAX_ANISOTROPY_EXT):0},getMaxPrecision:n,precision:a,logarithmicDepthBuffer:e,maxTextures:s,maxVertexTextures:u,maxTextureSize:c,maxCubemapSize:h,maxAttributes:l,maxVertexUniforms:p,maxVaryings:f,maxFragmentUniforms:d,vertexTextures:v,floatFragmentTextures:m,floatVertexTextures:v&&m}}function je(){function u(){v.value!==h&&(v.value=h,v.needsUpdate=0<l);a.numPlanes=l;a.numIntersection=0}function c(e,t,r,n){var i=null!==e?e.length:0,o=null;if(0!==i){o=v.value;if(!0!==n||null===o){n=r+4*i;t=t.matrixWorldInverse;d.getNormalMatrix(t);if(null===o||o.length<n)o=new Float32Array(n);for(n=0;n!==i;++n,r+=4)s.copy(e[n]).applyMatrix4(t,d),s.normal.toArray(o,r),o[r+3]=s.constant}v.value=o;v.needsUpdate=!0}a.numPlanes=i;return o}var a=this,h=null,l=0,p=!1,f=!1,s=new g,d=new m,v={value:null,needsUpdate:!1};this.uniform=v;this.numIntersection=this.numPlanes=0;this.init=function(e,t,r){var n=0!==e.length||t||0!==l||p;p=t;h=c(e,r,0);l=e.length;return n};this.beginShadows=function(){f=!0;c(null)};this.endShadows=function(){f=!1;u()};this.setState=function(e,t,r,n,i,o){if(!p||null===e||0===e.length||f&&!r)f?c(null):u();else{r=f?0:l;var a=4*r,s=i.clippingState||null;v.value=s;s=c(e,n,a,o);for(e=0;e!==a;++e)s[e]=h[e];i.clippingState=s;this.numIntersection=t?this.numPlanes:0;this.numPlanes+=r}}}function Re(r){var n={};return{get:function(e){if(void 0!==n[e])return n[e];switch(e){case"WEBGL_depth_texture":var t=r.getExtension("WEBGL_depth_texture")||r.getExtension("MOZ_WEBGL_depth_texture")||r.getExtension("WEBKIT_WEBGL_depth_texture");break;case"EXT_texture_filter_anisotropic":t=r.getExtension("EXT_texture_filter_anisotropic")||r.getExtension("MOZ_EXT_texture_filter_anisotropic")||r.getExtension("WEBKIT_EXT_texture_filter_anisotropic");break;case"WEBGL_compressed_texture_s3tc":t=r.getExtension("WEBGL_compressed_texture_s3tc")||r.getExtension("MOZ_WEBGL_compressed_texture_s3tc")||r.getExtension("WEBKIT_WEBGL_compressed_texture_s3tc");break;case"WEBGL_compressed_texture_pvrtc":t=r.getExtension("WEBGL_compressed_texture_pvrtc")||r.getExtension("WEBKIT_WEBGL_compressed_texture_pvrtc");break;default:t=r.getExtension(e)}null===t&&console.warn("THREE.WebGLRenderer: "+e+" extension not supported.");return n[e]=t}}}function Le(u,c,n){function i(e){var t=e.target;e=o[t.id];null!==e.index&&c.remove(e.index);for(var r in e.attributes)c.remove(e.attributes[r]);t.removeEventListener("dispose",i);delete o[t.id];if(r=h[e.id])c.remove(r),delete h[e.id];n.memory.geometries--}var o={},h={};return{get:function(e,t){var r=o[t.id];if(r)return r;t.addEventListener("dispose",i);t.isBufferGeometry?r=t:t.isGeometry&&(void 0===t._bufferGeometry&&(t._bufferGeometry=(new A).setFromObject(e)),r=t._bufferGeometry);o[t.id]=r;n.memory.geometries++;return r},update:function(e){var t=e.index,r=e.attributes;null!==t&&c.update(t,u.ELEMENT_ARRAY_BUFFER);for(var n in r)c.update(r[n],u.ARRAY_BUFFER);e=e.morphAttributes;for(n in e){t=e[n];r=0;for(var i=t.length;r<i;r++)c.update(t[r],u.ARRAY_BUFFER)}},getWireframeAttribute:function(e){var t=h[e.id];if(t)return t;t=[];var r=e.index,n=e.attributes;if(null!==r){r=r.array;n=0;for(var i=r.length;n<i;n+=3){var o=r[n+0],a=r[n+1],s=r[n+2];t.push(o,a,a,s,s,o)}}else for(r=n.position.array,n=0,i=r.length/3-1;n<i;n+=3)o=n+0,a=n+1,s=n+2,t.push(o,a,a,s,s,o);t=new(65535<C(t)?x:_)(t,1);c.update(t,u.ELEMENT_ARRAY_BUFFER);return h[e.id]=t}}}function Ie(i,o,a,s){var u,c,h;this.setMode=function(e){u=e};this.setIndex=function(e){c=e.type;h=e.bytesPerElement};this.render=function(e,t){i.drawElements(u,t,c,e*h);a.update(t,u)};this.renderInstances=function(e,t,r){if(s.isWebGL2)var n=i;else if(n=o.get("ANGLE_instanced_arrays"),null===n){console.error("THREE.WebGLIndexedBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.");return}n[s.isWebGL2?"drawElementsInstanced":"drawElementsInstancedANGLE"](u,r,c,t*h,e.maxInstancedCount);a.update(r,u,e.maxInstancedCount)}}function Ne(n){var i={frame:0,calls:0,triangles:0,points:0,lines:0};return{memory:{geometries:0,textures:0},render:i,programs:null,autoReset:!0,reset:function(){i.frame++;i.calls=0;i.triangles=0;i.points=0;i.lines=0},update:function(e,t,r){r=r||1;i.calls++;switch(t){case n.TRIANGLES:i.triangles+=e/3*r;break;case n.TRIANGLE_STRIP:case n.TRIANGLE_FAN:i.triangles+=r*(e-2);break;case n.LINES:i.lines+=e/2*r;break;case n.LINE_STRIP:i.lines+=r*(e-1);break;case n.LINE_LOOP:i.lines+=r*e;break;case n.POINTS:i.points+=r*e;break;default:console.error("THREE.WebGLInfo: Unknown draw mode:",t)}}}}function z(e,t){return Math.abs(t[1])-Math.abs(e[1])}function ke(c){var h={},l=new Float32Array(8);return{update:function(e,t,r,n){var i=e.morphTargetInfluences,o=i.length;e=h[t.id];if(void 0===e){e=[];for(var a=0;a<o;a++)e[a]=[a,0];h[t.id]=e}var s=r.morphTargets&&t.morphAttributes.position;r=r.morphNormals&&t.morphAttributes.normal;for(a=0;a<o;a++){var u=e[a];0!==u[1]&&(s&&t.removeAttribute("morphTarget"+a),r&&t.removeAttribute("morphNormal"+a))}for(a=0;a<o;a++)u=e[a],u[0]=a,u[1]=i[a];e.sort(z);for(a=0;8>a;a++){if(u=e[a])if(i=u[0],o=u[1]){s&&t.addAttribute("morphTarget"+a,s[i]);r&&t.addAttribute("morphNormal"+a,r[i]);l[a]=o;continue}l[a]=0}n.getUniforms().setValue(c,"morphTargetInfluences",l)}}}function De(i,o){var a={};return{update:function(e){var t=o.render.frame,r=e.geometry,n=i.get(e,r);a[n.id]!==t&&(r.isGeometry&&n.updateFromObject(e),i.update(n),a[n.id]=t);return n},dispose:function(){a={}}}}function U(e,t,r,n,i,o,a,s,u,c){e=void 0!==e?e:[];p.call(this,e,void 0!==t?t:301,r,n,i,o,a,s,u,c);this.flipY=!1}function G(e,t,r){var n=e[0];if(0>=n||0<n)return e;var i=t*r,o=vo[i];void 0===o&&(o=new Float32Array(i),vo[i]=o);if(0!==t)for(n.toArray(o,0),n=1,i=0;n!==t;++n)i+=r,e[n].toArray(o,i);return o}function V(e,t){if(e.length!==t.length)return!1;for(var r=0,n=e.length;r<n;r++)if(e[r]!==t[r])return!1;return!0}function q(e,t){for(var r=0,n=t.length;r<n;r++)e[r]=t[r]}function W(e,t){var r=mo[t];void 0===r&&(r=new Int32Array(t),mo[t]=r);for(var n=0;n!==t;++n)r[n]=e.allocTextureUnit();return r}function X(e,t){var r=this.cache;r[0]!==t&&(e.uniform1f(this.addr,t),r[0]=t)}function Y(e,t){var r=this.cache;r[0]!==t&&(e.uniform1i(this.addr,t),r[0]=t)}function K(e,t){var r=this.cache;if(void 0!==t.x){if(r[0]!==t.x||r[1]!==t.y)e.uniform2f(this.addr,t.x,t.y),r[0]=t.x,r[1]=t.y}else V(r,t)||(e.uniform2fv(this.addr,t),q(r,t))}function Z(e,t){var r=this.cache;if(void 0!==t.x){if(r[0]!==t.x||r[1]!==t.y||r[2]!==t.z)e.uniform3f(this.addr,t.x,t.y,t.z),r[0]=t.x,r[1]=t.y,r[2]=t.z}else if(void 0!==t.r){if(r[0]!==t.r||r[1]!==t.g||r[2]!==t.b)e.uniform3f(this.addr,t.r,t.g,t.b),r[0]=t.r,r[1]=t.g,r[2]=t.b}else V(r,t)||(e.uniform3fv(this.addr,t),q(r,t))}function J(e,t){var r=this.cache;if(void 0!==t.x){if(r[0]!==t.x||r[1]!==t.y||r[2]!==t.z||r[3]!==t.w)e.uniform4f(this.addr,t.x,t.y,t.z,t.w),r[0]=t.x,r[1]=t.y,r[2]=t.z,r[3]=t.w}else V(r,t)||(e.uniform4fv(this.addr,t),q(r,t))}function Q(e,t){var r=this.cache,n=t.elements;void 0===n?V(r,t)||(e.uniformMatrix2fv(this.addr,!1,t),q(r,t)):V(r,n)||(_o.set(n),e.uniformMatrix2fv(this.addr,!1,_o),q(r,n))}function ee(e,t){var r=this.cache,n=t.elements;void 0===n?V(r,t)||(e.uniformMatrix3fv(this.addr,!1,t),q(r,t)):V(r,n)||(yo.set(n),e.uniformMatrix3fv(this.addr,!1,yo),q(r,n))}function te(e,t){var r=this.cache,n=t.elements;void 0===n?V(r,t)||(e.uniformMatrix4fv(this.addr,!1,t),q(r,t)):V(r,n)||(go.set(n),e.uniformMatrix4fv(this.addr,!1,go),q(r,n))}function re(e,t,r){var n=this.cache,i=r.allocTextureUnit();n[0]!==i&&(e.uniform1i(this.addr,i),n[0]=i);r.setTexture2D(t||po,i)}function ne(e,t,r){var n=this.cache,i=r.allocTextureUnit();n[0]!==i&&(e.uniform1i(this.addr,i),n[0]=i);r.setTextureCube(t||fo,i)}function ie(e,t){var r=this.cache;V(r,t)||(e.uniform2iv(this.addr,t),q(r,t))}function oe(e,t){var r=this.cache;V(r,t)||(e.uniform3iv(this.addr,t),q(r,t))}function ae(e,t){var r=this.cache;V(r,t)||(e.uniform4iv(this.addr,t),q(r,t))}function se(e){switch(e){case 5126:return X;case 35664:return K;case 35665:return Z;case 35666:return J;case 35674:return Q;case 35675:return ee;case 35676:return te;case 35678:case 36198:return re;case 35680:return ne;case 5124:case 35670:return Y;case 35667:case 35671:return ie;case 35668:case 35672:return oe;case 35669:case 35673:return ae}}function ue(e,t){var r=this.cache;V(r,t)||(e.uniform1fv(this.addr,t),q(r,t))}function ce(e,t){var r=this.cache;V(r,t)||(e.uniform1iv(this.addr,t),q(r,t))}function he(e,t){var r=this.cache;t=G(t,this.size,2);V(r,t)||(e.uniform2fv(this.addr,t),this.updateCache(t))}function le(e,t){var r=this.cache;t=G(t,this.size,3);V(r,t)||(e.uniform3fv(this.addr,t),this.updateCache(t))}function pe(e,t){var r=this.cache;t=G(t,this.size,4);V(r,t)||(e.uniform4fv(this.addr,t),this.updateCache(t))}function fe(e,t){var r=this.cache;t=G(t,this.size,4);V(r,t)||(e.uniformMatrix2fv(this.addr,!1,t),this.updateCache(t))}function de(e,t){var r=this.cache;t=G(t,this.size,9);V(r,t)||(e.uniformMatrix3fv(this.addr,!1,t),this.updateCache(t))}function ve(e,t){var r=this.cache;t=G(t,this.size,16);V(r,t)||(e.uniformMatrix4fv(this.addr,!1,t),this.updateCache(t))}function me(e,t,r){var n=this.cache,i=t.length,o=W(r,i);!1===V(n,o)&&(e.uniform1iv(this.addr,o),q(n,o));for(e=0;e!==i;++e)r.setTexture2D(t[e]||po,o[e])}function ge(e,t,r){var n=this.cache,i=t.length,o=W(r,i);!1===V(n,o)&&(e.uniform1iv(this.addr,o),q(n,o));for(e=0;e!==i;++e)r.setTextureCube(t[e]||fo,o[e])}function ye(e){switch(e){case 5126:return ue;case 35664:return he;case 35665:return le;case 35666:return pe;case 35674:return fe;case 35675:return de;case 35676:return ve;case 35678:return me;case 35680:return ge;case 5124:case 35670:return ce;case 35667:case 35671:return ie;case 35668:case 35672:return oe;case 35669:case 35673:return ae}}function _e(e,t,r){this.id=e;this.addr=r;this.cache=[];this.setValue=se(t.type)}function be(e,t,r){this.id=e;this.addr=r;this.cache=[];this.size=t.size;this.setValue=ye(t.type)}function Be(e){this.id=e;this.seq=[];this.map={}}function Fe(e,t,r){this.seq=[];this.map={};this.renderer=r;r=e.getProgramParameter(t,e.ACTIVE_UNIFORMS);for(var n=0;n<r;++n){var i=e.getActiveUniform(t,n),o=e.getUniformLocation(t,i.name),a=this,s=i.name,u=s.length;for(bo.lastIndex=0;;){var c=bo.exec(s),h=bo.lastIndex,l=c[1],p=c[3];"]"===c[2]&&(l|=0);if(void 0===p||"["===p&&h+2===u){s=a;i=void 0===p?new _e(l,i,o):new be(l,i,o);s.seq.push(i);s.map[i.id]=i;break}else p=a.map[l],void 0===p&&(p=new Be(l),l=a,a=p,l.seq.push(a),l.map[a.id]=a),a=p}}}function $e(e){e=e.split("\n");for(var t=0;t<e.length;t++)e[t]=t+1+": "+e[t];return e.join("\n")}function ze(e,t,r){var n=e.createShader(t);e.shaderSource(n,r);e.compileShader(n);!1===e.getShaderParameter(n,e.COMPILE_STATUS)&&console.error("THREE.WebGLShader: Shader couldn't compile.");""!==e.getShaderInfoLog(n)&&console.warn("THREE.WebGLShader: gl.getShaderInfoLog()",t===e.VERTEX_SHADER?"vertex":"fragment",e.getShaderInfoLog(n),$e(r));return n}function Ue(e){switch(e){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: "+e)}}function Ge(e,t){t=Ue(t);return"vec4 "+e+"( vec4 value ) { return "+t[0]+"ToLinear"+t[1]+"; }"}function Ve(e,t){t=Ue(t);return"vec4 "+e+"( vec4 value ) { return LinearTo"+t[0]+t[1]+"; }"}function He(e,t){switch(t){case 1:t="Linear";break;case 2:t="Reinhard";break;case 3:t="Uncharted2";break;case 4:t="OptimizedCineon";break;default:throw Error("unsupported toneMapping: "+t)}return"vec3 "+e+"( vec3 color ) { return "+t+"ToneMapping( color ); }"}function qe(e,t,r){e=e||{};return[e.derivatives||t.envMapCubeUV||t.bumpMap||t.normalMap&&!t.objectSpaceNormalMap||t.flatShading?"#extension GL_OES_standard_derivatives : enable":"",(e.fragDepth||t.logarithmicDepthBuffer)&&r.get("EXT_frag_depth")?"#extension GL_EXT_frag_depth : enable":"",e.drawBuffers&&r.get("WEBGL_draw_buffers")?"#extension GL_EXT_draw_buffers : require":"",(e.shaderTextureLOD||t.envMap)&&r.get("EXT_shader_texture_lod")?"#extension GL_EXT_shader_texture_lod : enable":""].filter(Xe).join("\n")}function We(e){var t=[],r;for(r in e){var n=e[r];!1!==n&&t.push("#define "+r+" "+n)}return t.join("\n")}function Xe(e){return""!==e}function Ye(e,t){return e.replace(/NUM_DIR_LIGHTS/g,t.numDirLights).replace(/NUM_SPOT_LIGHTS/g,t.numSpotLights).replace(/NUM_RECT_AREA_LIGHTS/g,t.numRectAreaLights).replace(/NUM_POINT_LIGHTS/g,t.numPointLights).replace(/NUM_HEMI_LIGHTS/g,t.numHemiLights)}function Ke(e,t){return e.replace(/NUM_CLIPPING_PLANES/g,t.numClippingPlanes).replace(/UNION_CLIPPING_PLANES/g,t.numClippingPlanes-t.numClipIntersection)}function Ze(e){return e.replace(/^[ \t]*#include +<([\w\d./]+)>/gm,function(e,t){e=no[t];if(void 0===e)throw Error("Can not resolve #include <"+t+">");return Ze(e)})}function Je(e){return e.replace(/#pragma unroll_loop[\s]+?for \( int i = (\d+); i < (\d+); i \+\+ \) \{([\s\S]+?)(?=\})\}/g,function(e,t,r,n){e="";for(t=parseInt(t);t<parseInt(r);t++)e+=n.replace(/\[ i \]/g,"[ "+t+" ]");return e})}function Qe(e,t,r,n,i,o,a){var s=e.context,u=n.defines,c=i.vertexShader,h=i.fragmentShader,l="SHADOWMAP_TYPE_BASIC";1===o.shadowMapType?l="SHADOWMAP_TYPE_PCF":2===o.shadowMapType&&(l="SHADOWMAP_TYPE_PCF_SOFT");var p="ENVMAP_TYPE_CUBE",f="ENVMAP_MODE_REFLECTION",d="ENVMAP_BLENDING_MULTIPLY";if(o.envMap){switch(n.envMap.mapping){case 301:case 302:p="ENVMAP_TYPE_CUBE";break;case 306:case 307:p="ENVMAP_TYPE_CUBE_UV";break;case 303:case 304:p="ENVMAP_TYPE_EQUIREC";break;case 305:p="ENVMAP_TYPE_SPHERE"}switch(n.envMap.mapping){case 302:case 304:f="ENVMAP_MODE_REFRACTION"}switch(n.combine){case 0:d="ENVMAP_BLENDING_MULTIPLY";break;case 1:d="ENVMAP_BLENDING_MIX";break;case 2:d="ENVMAP_BLENDING_ADD"}}var v=0<e.gammaFactor?e.gammaFactor:1,m=a.isWebGL2?"":qe(n.extensions,o,t),g=We(u),y=s.createProgram();n.isRawShaderMaterial?(u=[g].filter(Xe).join("\n"),0<u.length&&(u+="\n"),t=[m,g].filter(Xe).join("\n"),0<t.length&&(t+="\n")):(u=["precision "+o.precision+" float;","precision "+o.precision+" int;","#define SHADER_NAME "+i.name,g,o.supportsVertexTextures?"#define VERTEX_TEXTURES":"","#define GAMMA_FACTOR "+v,"#define MAX_BONES "+o.maxBones,o.useFog&&o.fog?"#define USE_FOG":"",o.useFog&&o.fogExp?"#define FOG_EXP2":"",o.map?"#define USE_MAP":"",o.envMap?"#define USE_ENVMAP":"",o.envMap?"#define "+f:"",o.lightMap?"#define USE_LIGHTMAP":"",o.aoMap?"#define USE_AOMAP":"",o.emissiveMap?"#define USE_EMISSIVEMAP":"",o.bumpMap?"#define USE_BUMPMAP":"",o.normalMap?"#define USE_NORMALMAP":"",o.normalMap&&o.objectSpaceNormalMap?"#define OBJECTSPACE_NORMALMAP":"",o.displacementMap&&o.supportsVertexTextures?"#define USE_DISPLACEMENTMAP":"",o.specularMap?"#define USE_SPECULARMAP":"",o.roughnessMap?"#define USE_ROUGHNESSMAP":"",o.metalnessMap?"#define USE_METALNESSMAP":"",o.alphaMap?"#define USE_ALPHAMAP":"",o.vertexColors?"#define USE_COLOR":"",o.flatShading?"#define FLAT_SHADED":"",o.skinning?"#define USE_SKINNING":"",o.useVertexTexture?"#define BONE_TEXTURE":"",o.morphTargets?"#define USE_MORPHTARGETS":"",o.morphNormals&&!1===o.flatShading?"#define USE_MORPHNORMALS":"",o.doubleSided?"#define DOUBLE_SIDED":"",o.flipSided?"#define FLIP_SIDED":"",o.shadowMapEnabled?"#define USE_SHADOWMAP":"",o.shadowMapEnabled?"#define "+l:"",o.sizeAttenuation?"#define USE_SIZEATTENUATION":"",o.logarithmicDepthBuffer?"#define USE_LOGDEPTHBUF":"",o.logarithmicDepthBuffer&&(a.isWebGL2||t.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(Xe).join("\n"),t=[m,"precision "+o.precision+" float;","precision "+o.precision+" int;","#define SHADER_NAME "+i.name,g,o.alphaTest?"#define ALPHATEST "+o.alphaTest+(o.alphaTest%1?"":".0"):"","#define GAMMA_FACTOR "+v,o.useFog&&o.fog?"#define USE_FOG":"",o.useFog&&o.fogExp?"#define FOG_EXP2":"",o.map?"#define USE_MAP":"",o.envMap?"#define USE_ENVMAP":"",o.envMap?"#define "+p:"",o.envMap?"#define "+f:"",o.envMap?"#define "+d:"",o.lightMap?"#define USE_LIGHTMAP":"",o.aoMap?"#define USE_AOMAP":"",o.emissiveMap?"#define USE_EMISSIVEMAP":"",o.bumpMap?"#define USE_BUMPMAP":"",o.normalMap?"#define USE_NORMALMAP":"",o.normalMap&&o.objectSpaceNormalMap?"#define OBJECTSPACE_NORMALMAP":"",o.specularMap?"#define USE_SPECULARMAP":"",o.roughnessMap?"#define USE_ROUGHNESSMAP":"",o.metalnessMap?"#define USE_METALNESSMAP":"",o.alphaMap?"#define USE_ALPHAMAP":"",o.vertexColors?"#define USE_COLOR":"",o.gradientMap?"#define USE_GRADIENTMAP":"",o.flatShading?"#define FLAT_SHADED":"",o.doubleSided?"#define DOUBLE_SIDED":"",o.flipSided?"#define FLIP_SIDED":"",o.shadowMapEnabled?"#define USE_SHADOWMAP":"",o.shadowMapEnabled?"#define "+l:"",o.premultipliedAlpha?"#define PREMULTIPLIED_ALPHA":"",o.physicallyCorrectLights?"#define PHYSICALLY_CORRECT_LIGHTS":"",o.logarithmicDepthBuffer?"#define USE_LOGDEPTHBUF":"",o.logarithmicDepthBuffer&&(a.isWebGL2||t.get("EXT_frag_depth"))?"#define USE_LOGDEPTHBUF_EXT":"",o.envMap&&(a.isWebGL2||t.get("EXT_shader_texture_lod"))?"#define TEXTURE_LOD_EXT":"","uniform mat4 viewMatrix;","uniform vec3 cameraPosition;",0!==o.toneMapping?"#define TONE_MAPPING":"",0!==o.toneMapping?no.tonemapping_pars_fragment:"",0!==o.toneMapping?He("toneMapping",o.toneMapping):"",o.dithering?"#define DITHERING":"",o.outputEncoding||o.mapEncoding||o.envMapEncoding||o.emissiveMapEncoding?no.encodings_pars_fragment:"",o.mapEncoding?Ge("mapTexelToLinear",o.mapEncoding):"",o.envMapEncoding?Ge("envMapTexelToLinear",o.envMapEncoding):"",o.emissiveMapEncoding?Ge("emissiveMapTexelToLinear",o.emissiveMapEncoding):"",o.outputEncoding?Ve("linearToOutputTexel",o.outputEncoding):"",o.depthPacking?"#define DEPTH_PACKING "+n.depthPacking:"","\n"].filter(Xe).join("\n"));c=Ze(c);c=Ye(c,o);c=Ke(c,o);h=Ze(h);h=Ye(h,o);h=Ke(h,o);c=Je(c);h=Je(h);a.isWebGL2&&!n.isRawShaderMaterial&&(a=!1,l=/^\s*#version\s+300\s+es\s*\n/,n.isShaderMaterial&&null!==c.match(l)&&null!==h.match(l)&&(a=!0,c=c.replace(l,""),h=h.replace(l,"")),u="#version 300 es\n\n#define attribute in\n#define varying out\n#define texture2D texture\n"+u,t=["#version 300 es\n\n#define varying in",a?"":"out highp vec4 pc_fragColor;",a?"":"#define gl_FragColor pc_fragColor","#define gl_FragDepthEXT gl_FragDepth\n#define texture2D texture\n#define textureCube texture\n#define texture2DProj textureProj\n#define texture2DLodEXT textureLod\n#define texture2DProjLodEXT textureProjLod\n#define textureCubeLodEXT textureLod\n#define texture2DGradEXT textureGrad\n#define texture2DProjGradEXT textureProjGrad\n#define textureCubeGradEXT textureGrad"].join("\n")+"\n"+t);h=t+h;c=ze(s,s.VERTEX_SHADER,u+c);h=ze(s,s.FRAGMENT_SHADER,h);s.attachShader(y,c);s.attachShader(y,h);void 0!==n.index0AttributeName?s.bindAttribLocation(y,0,n.index0AttributeName):!0===o.morphTargets&&s.bindAttribLocation(y,0,"position");s.linkProgram(y);o=s.getProgramInfoLog(y).trim();a=s.getShaderInfoLog(c).trim();l=s.getShaderInfoLog(h).trim();f=p=!0;if(!1===s.getProgramParameter(y,s.LINK_STATUS))p=!1,console.error("THREE.WebGLProgram: shader error: ",s.getError(),"gl.VALIDATE_STATUS",s.getProgramParameter(y,s.VALIDATE_STATUS),"gl.getProgramInfoLog",o,a,l);else if(""!==o)console.warn("THREE.WebGLProgram: gl.getProgramInfoLog()",o);else if(""===a||""===l)f=!1;f&&(this.diagnostics={runnable:p,material:n,programLog:o,vertexShader:{log:a,prefix:u},fragmentShader:{log:l,prefix:t}});s.deleteShader(c);s.deleteShader(h);var _;this.getUniforms=function(){void 0===_&&(_=new Fe(s,y,e));return _};var b;this.getAttributes=function(){if(void 0===b){for(var e={},t=s.getProgramParameter(y,s.ACTIVE_ATTRIBUTES),r=0;r<t;r++){var n=s.getActiveAttrib(y,r).name;e[n]=s.getAttribLocation(y,n)}b=e}return b};this.destroy=function(){s.deleteProgram(y);this.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.name=i.name;this.id=xo++;this.code=r;this.usedTimes=1;this.program=y;this.vertexShader=c;this.fragmentShader=h;return this}function et(l,u,p){function f(e,t){if(e)e.isTexture?r=e.encoding:e.isWebGLRenderTarget&&(console.warn("THREE.WebGLPrograms.getTextureEncodingFromMap: don't use render targets as textures. Use their .texture property instead."),r=e.texture.encoding);else var r=3e3;3e3===r&&t&&(r=3007);return r}var c=[],d={MeshDepthMaterial:"depth",MeshDistanceMaterial:"distanceRGBA",MeshNormalMaterial:"normal",MeshBasicMaterial:"basic",MeshLambertMaterial:"lambert",MeshPhongMaterial:"phong",MeshToonMaterial:"phong",MeshStandardMaterial:"physical",MeshPhysicalMaterial:"physical",LineBasicMaterial:"basic",LineDashedMaterial:"dashed",PointsMaterial:"points",ShadowMaterial:"shadow",SpriteMaterial:"sprite"},i="precision supportsVertexTextures map mapEncoding envMap envMapMode envMapEncoding lightMap aoMap emissiveMap emissiveMapEncoding bumpMap normalMap objectSpaceNormalMap 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 dithering".split(" ");this.getParameters=function(e,t,r,n,i,o,a){var s=d[e.type];if(a.isSkinnedMesh){var u=a.skeleton.bones;if(p.floatVertexTextures)u=1024;else{var c=Math.min(Math.floor((p.maxVertexUniforms-20)/4),u.length);c<u.length?(console.warn("THREE.WebGLRenderer: Skeleton has "+u.length+" bones. This GPU supports "+c+"."),u=0):u=c}}else u=0;c=p.precision;null!==e.precision&&(c=p.getMaxPrecision(e.precision),c!==e.precision&&console.warn("THREE.WebGLProgram.getParameters:",e.precision,"not supported, using",c,"instead."));var h=l.getRenderTarget();return{shaderID:s,precision:c,supportsVertexTextures:p.vertexTextures,outputEncoding:f(h?h.texture:null,l.gammaOutput),map:!!e.map,mapEncoding:f(e.map,l.gammaInput),envMap:!!e.envMap,envMapMode:e.envMap&&e.envMap.mapping,envMapEncoding:f(e.envMap,l.gammaInput),envMapCubeUV:!!e.envMap&&(306===e.envMap.mapping||307===e.envMap.mapping),lightMap:!!e.lightMap,aoMap:!!e.aoMap,emissiveMap:!!e.emissiveMap,emissiveMapEncoding:f(e.emissiveMap,l.gammaInput),bumpMap:!!e.bumpMap,normalMap:!!e.normalMap,objectSpaceNormalMap:1===e.normalMapType,displacementMap:!!e.displacementMap,roughnessMap:!!e.roughnessMap,metalnessMap:!!e.metalnessMap,specularMap:!!e.specularMap,alphaMap:!!e.alphaMap,gradientMap:!!e.gradientMap,combine:e.combine,vertexColors:e.vertexColors,fog:!!n,useFog:e.fog,fogExp:n&&n.isFogExp2,flatShading:e.flatShading,sizeAttenuation:e.sizeAttenuation,logarithmicDepthBuffer:p.logarithmicDepthBuffer,skinning:e.skinning&&0<u,maxBones:u,useVertexTexture:p.floatVertexTextures,morphTargets:e.morphTargets,morphNormals:e.morphNormals,maxMorphTargets:l.maxMorphTargets,maxMorphNormals:l.maxMorphNormals,numDirLights:t.directional.length,numPointLights:t.point.length,numSpotLights:t.spot.length,numRectAreaLights:t.rectArea.length,numHemiLights:t.hemi.length,numClippingPlanes:i,numClipIntersection:o,dithering:e.dithering,shadowMapEnabled:l.shadowMap.enabled&&a.receiveShadow&&0<r.length,shadowMapType:l.shadowMap.type,toneMapping:l.toneMapping,physicallyCorrectLights:l.physicallyCorrectLights,premultipliedAlpha:e.premultipliedAlpha,alphaTest:e.alphaTest,doubleSided:2===e.side,flipSided:1===e.side,depthPacking:void 0!==e.depthPacking?e.depthPacking:!1}};this.getProgramCode=function(e,t){var r=[];t.shaderID?r.push(t.shaderID):(r.push(e.fragmentShader),r.push(e.vertexShader));if(void 0!==e.defines)for(var n in e.defines)r.push(n),r.push(e.defines[n]);for(n=0;n<i.length;n++)r.push(t[i[n]]);r.push(e.onBeforeCompile.toString());r.push(l.gammaOutput);return r.join()};this.acquireProgram=function(e,t,r,n){for(var i,o=0,a=c.length;o<a;o++){var s=c[o];if(s.code===n){i=s;++i.usedTimes;break}}void 0===i&&(i=new Qe(l,u,n,e,t,r,p),c.push(i));return i};this.releaseProgram=function(e){if(0===--e.usedTimes){var t=c.indexOf(e);c[t]=c[c.length-1];c.pop();e.destroy()}};this.programs=c}function tt(){var n=new WeakMap;return{get:function(e){var t=n.get(e);void 0===t&&(t={},n.set(e,t));return t},remove:function(e){n.delete(e)},update:function(e,t,r){n.get(e)[t]=r},dispose:function(){n=new WeakMap}}}function rt(e,t){return e.renderOrder!==t.renderOrder?e.renderOrder-t.renderOrder:e.program&&t.program&&e.program!==t.program?e.program.id-t.program.id:e.material.id!==t.material.id?e.material.id-t.material.id:e.z!==t.z?e.z-t.z:e.id-t.id}function nt(e,t){return e.renderOrder!==t.renderOrder?e.renderOrder-t.renderOrder:e.z!==t.z?t.z-e.z:e.id-t.id}function it(){var a=[],s=0,u=[],c=[];return{opaque:u,transparent:c,init:function(){s=0;u.length=0;c.length=0},push:function(e,t,r,n,i){var o=a[s];void 0===o?(o={id:e.id,object:e,geometry:t,material:r,program:r.program,renderOrder:e.renderOrder,z:n,group:i},a[s]=o):(o.id=e.id,o.object=e,o.geometry=t,o.material=r,o.program=r.program,o.renderOrder=e.renderOrder,o.z=n,o.group=i);(!0===r.transparent?c:u).push(o);s++},sort:function(){1<u.length&&u.sort(rt);1<c.length&&c.sort(nt)}}}function ot(){var r={};return{get:function(e,t){e=e.id+","+t.id;t=r[e];void 0===t&&(t=new it,r[e]=t);return t},dispose:function(){r={}}}}function at(){var r={};return{get:function(e){if(void 0!==r[e.id])return r[e.id];switch(e.type){case"DirectionalLight":var t={direction:new we,color:new w,shadow:!1,shadowBias:0,shadowRadius:1,shadowMapSize:new H};break;case"SpotLight":t={position:new we,direction:new we,color:new w,distance:0,coneCos:0,penumbraCos:0,decay:0,shadow:!1,shadowBias:0,shadowRadius:1,shadowMapSize:new H};break;case"PointLight":t={position:new we,color:new w,distance:0,decay:0,shadow:!1,shadowBias:0,shadowRadius:1,shadowMapSize:new H,shadowCameraNear:1,shadowCameraFar:1e3};break;case"HemisphereLight":t={direction:new we,skyColor:new w,groundColor:new w};break;case"RectAreaLight":t={color:new w,position:new we,halfWidth:new we,halfHeight:new we}}return r[e.id]=t}}}function st(){var _=new at,b={id:wo++,hash:{stateID:-1,directionalLength:-1,pointLength:-1,spotLength:-1,rectAreaLength:-1,hemiLength:-1,shadowsLength:-1},ambient:[0,0,0],directional:[],directionalShadowMap:[],directionalShadowMatrix:[],spot:[],spotShadowMap:[],spotShadowMatrix:[],rectArea:[],point:[],pointShadowMap:[],pointShadowMatrix:[],hemi:[]},x=new we,w=new xe,S=new xe;return{setup:function(e,t,r){var n=0,i=0,o=0,a=0,s=0,u=0,c=0,h=0;r=r.matrixWorldInverse;for(var l=0,p=e.length;l<p;l++){var f=e[l],d=f.color,v=f.intensity,m=f.distance,g=f.shadow&&f.shadow.map?f.shadow.map.texture:null;if(f.isAmbientLight)n+=d.r*v,i+=d.g*v,o+=d.b*v;else if(f.isDirectionalLight){var y=_.get(f);y.color.copy(f.color).multiplyScalar(f.intensity);y.direction.setFromMatrixPosition(f.matrixWorld);x.setFromMatrixPosition(f.target.matrixWorld);y.direction.sub(x);y.direction.transformDirection(r);if(y.shadow=f.castShadow)d=f.shadow,y.shadowBias=d.bias,y.shadowRadius=d.radius,y.shadowMapSize=d.mapSize;b.directionalShadowMap[a]=g;b.directionalShadowMatrix[a]=f.shadow.matrix;b.directional[a]=y;a++}else if(f.isSpotLight){y=_.get(f);y.position.setFromMatrixPosition(f.matrixWorld);y.position.applyMatrix4(r);y.color.copy(d).multiplyScalar(v);y.distance=m;y.direction.setFromMatrixPosition(f.matrixWorld);x.setFromMatrixPosition(f.target.matrixWorld);y.direction.sub(x);y.direction.transformDirection(r);y.coneCos=Math.cos(f.angle);y.penumbraCos=Math.cos(f.angle*(1-f.penumbra));y.decay=0===f.distance?0:f.decay;if(y.shadow=f.castShadow)d=f.shadow,y.shadowBias=d.bias,y.shadowRadius=d.radius,y.shadowMapSize=d.mapSize;b.spotShadowMap[u]=g;b.spotShadowMatrix[u]=f.shadow.matrix;b.spot[u]=y;u++}else if(f.isRectAreaLight)y=_.get(f),y.color.copy(d).multiplyScalar(v),y.position.setFromMatrixPosition(f.matrixWorld),y.position.applyMatrix4(r),S.identity(),w.copy(f.matrixWorld),w.premultiply(r),S.extractRotation(w),y.halfWidth.set(.5*f.width,0,0),y.halfHeight.set(0,.5*f.height,0),y.halfWidth.applyMatrix4(S),y.halfHeight.applyMatrix4(S),b.rectArea[c]=y,c++;else if(f.isPointLight){y=_.get(f);y.position.setFromMatrixPosition(f.matrixWorld);y.position.applyMatrix4(r);y.color.copy(f.color).multiplyScalar(f.intensity);y.distance=f.distance;y.decay=0===f.distance?0:f.decay;if(y.shadow=f.castShadow)d=f.shadow,y.shadowBias=d.bias,y.shadowRadius=d.radius,y.shadowMapSize=d.mapSize,y.shadowCameraNear=d.camera.near,y.shadowCameraFar=d.camera.far;b.pointShadowMap[s]=g;b.pointShadowMatrix[s]=f.shadow.matrix;b.point[s]=y;s++}else f.isHemisphereLight&&(y=_.get(f),y.direction.setFromMatrixPosition(f.matrixWorld),y.direction.transformDirection(r),y.direction.normalize(),y.skyColor.copy(f.color).multiplyScalar(v),y.groundColor.copy(f.groundColor).multiplyScalar(v),b.hemi[h]=y,h++)}b.ambient[0]=n;b.ambient[1]=i;b.ambient[2]=o;b.directional.length=a;b.spot.length=u;b.rectArea.length=c;b.point.length=s;b.hemi.length=h;b.hash.stateID=b.id;b.hash.directionalLength=a;b.hash.pointLength=s;b.hash.spotLength=u;b.hash.rectAreaLength=c;b.hash.hemiLength=h;b.hash.shadowsLength=t.length},state:b}}function ut(){var t=new st,r=[],n=[];return{init:function(){r.length=0;n.length=0},state:{lightsArray:r,shadowsArray:n,lights:t},setupLights:function(e){t.setup(r,n,e)},pushLight:function(e){r.push(e)},pushShadow:function(e){n.push(e)}}}function ct(){var n={};return{get:function(e,t){if(void 0===n[e.id]){var r=new ut;n[e.id]={};n[e.id][t.id]=r}else void 0===n[e.id][t.id]?(r=new ut,n[e.id][t.id]=r):r=n[e.id][t.id];return r},dispose:function(){n={}}}}function ht(e){I.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(e)}function lt(e){I.call(this);this.type="MeshDistanceMaterial";this.referencePosition=new we;this.nearDistance=1;this.farDistance=1e3;this.morphTargets=this.skinning=!1;this.displacementMap=this.alphaMap=this.map=null;this.displacementScale=1;this.displacementBias=0;this.lights=this.fog=!1;this.setValues(e)}function pt(p,l,e){function f(e,t,r,n,i,o){var a=e.geometry;var s=c;var u=e.customDepthMaterial;r&&(s=h,u=e.customDistanceMaterial);u?s=u:(u=!1,t.morphTargets&&(a&&a.isBufferGeometry?u=a.morphAttributes&&a.morphAttributes.position&&0<a.morphAttributes.position.length:a&&a.isGeometry&&(u=a.morphTargets&&0<a.morphTargets.length)),e.isSkinnedMesh&&!1===t.skinning&&console.warn("THREE.WebGLShadowMap: THREE.SkinnedMesh with material.skinning set to false:",e),e=e.isSkinnedMesh&&t.skinning,a=0,u&&(a|=1),e&&(a|=2),s=s[a]);p.localClippingEnabled&&!0===t.clipShadows&&0!==t.clippingPlanes.length&&(a=s.uuid,u=t.uuid,e=x[a],void 0===e&&(e={},x[a]=e),a=e[u],void 0===a&&(a=s.clone(),e[u]=a),s=a);s.visible=t.visible;s.wireframe=t.wireframe;s.side=null!=t.shadowSide?t.shadowSide:w[t.side];s.clipShadows=t.clipShadows;s.clippingPlanes=t.clippingPlanes;s.clipIntersection=t.clipIntersection;s.wireframeLinewidth=t.wireframeLinewidth;s.linewidth=t.linewidth;r&&s.isMeshDistanceMaterial&&(s.referencePosition.copy(n),s.nearDistance=i,s.farDistance=o);return s}function d(e,t,r,n){if(!1!==e.visible){if(e.layers.test(t.layers)&&(e.isMesh||e.isLine||e.isPoints)&&e.castShadow&&(!e.frustumCulled||v.intersectsObject(e))){e.modelViewMatrix.multiplyMatrices(r.matrixWorldInverse,e.matrixWorld);var i=l.update(e),o=e.material;if(Array.isArray(o))for(var a=i.groups,s=0,u=a.length;s<u;s++){var c=a[s],h=o[c.materialIndex];h&&h.visible&&(h=f(e,h,n,b,r.near,r.far),p.renderBufferDirect(r,null,i,h,e,c))}else o.visible&&(h=f(e,o,n,b,r.near,r.far),p.renderBufferDirect(r,null,i,h,e,null))}e=e.children;i=0;for(o=e.length;i<o;i++)d(e[i],t,r,n)}}var v=new Ee,m=new xe,g=new H,y=new H(e,e),_=new we,b=new we,c=Array(4),h=Array(4),x={},w={0:1,1:0,2:2},S=[new we(1,0,0),new we(-1,0,0),new we(0,0,1),new we(0,0,-1),new we(0,1,0),new we(0,-1,0)],M=[new we(0,1,0),new we(0,1,0),new we(0,1,0),new we(0,1,0),new we(0,0,1),new we(0,0,-1)],E=[new Se,new Se,new Se,new Se,new Se,new Se];for(e=0;4!==e;++e){var t=0!==(e&1),r=0!==(e&2),n=new ht({depthPacking:3201,morphTargets:t,skinning:r});c[e]=n;t=new lt({morphTargets:t,skinning:r});h[e]=t}var C=this;this.enabled=!1;this.autoUpdate=!0;this.needsUpdate=!1;this.type=1;this.render=function(e,t,r){if(!1!==C.enabled&&(!1!==C.autoUpdate||!1!==C.needsUpdate)&&0!==e.length){var n=p.state;n.disable(p.context.BLEND);n.buffers.color.setClear(1,1,1,1);n.buffers.depth.setTest(!0);n.setScissorTest(!1);for(var i,o=0,a=e.length;o<a;o++){var s=e[o];i=s.shadow;var u=s&&s.isPointLight;if(void 0===i)console.warn("THREE.WebGLShadowMap:",s,"has no shadow.");else{var c=i.camera;g.copy(i.mapSize);g.min(y);if(u){var h=g.x,l=g.y;E[0].set(2*h,l,h,l);E[1].set(0,l,h,l);E[2].set(3*h,l,h,l);E[3].set(h,l,h,l);E[4].set(3*h,0,h,l);E[5].set(h,0,h,l);g.x*=4;g.y*=2}null===i.map&&(i.map=new T(g.x,g.y,{minFilter:1003,magFilter:1003,format:1023}),i.map.texture.name=s.name+".shadowMap",c.updateProjectionMatrix());i.isSpotLightShadow&&i.update(s);h=i.map;l=i.matrix;b.setFromMatrixPosition(s.matrixWorld);c.position.copy(b);u?(i=6,l.makeTranslation(-b.x,-b.y,-b.z)):(i=1,_.setFromMatrixPosition(s.target.matrixWorld),c.lookAt(_),c.updateMatrixWorld(),l.set(.5,0,0,.5,0,.5,0,.5,0,0,.5,.5,0,0,0,1),l.multiply(c.projectionMatrix),l.multiply(c.matrixWorldInverse));p.setRenderTarget(h);p.clear();for(s=0;s<i;s++)u&&(_.copy(c.position),_.add(S[s]),c.up.copy(M[s]),c.lookAt(_),c.updateMatrixWorld(),n.viewport(E[s])),m.multiplyMatrices(c.projectionMatrix,c.matrixWorldInverse),v.setFromMatrix(m),d(t,r,c,u)}}C.needsUpdate=!1}}}function ft(h,r,u,n){function e(e,t,r){var n=new Uint8Array(4),i=h.createTexture();h.bindTexture(e,i);h.texParameteri(e,h.TEXTURE_MIN_FILTER,h.NEAREST);h.texParameteri(e,h.TEXTURE_MAG_FILTER,h.NEAREST);for(e=0;e<r;e++)h.texImage2D(t+e,0,h.RGBA,1,1,0,h.RGBA,h.UNSIGNED_BYTE,n);return i}function t(e,t){g[e]=1;0===y[e]&&(h.enableVertexAttribArray(e),y[e]=1);_[e]!==t&&((n.isWebGL2?h:r.get("ANGLE_instanced_arrays"))[n.isWebGL2?"vertexAttribDivisor":"vertexAttribDivisorANGLE"](e,t),_[e]=t)}function l(e){!0!==b[e]&&(h.enable(e),b[e]=!0)}function p(e){!1!==b[e]&&(h.disable(e),b[e]=!1)}function i(e,t,r,n,i,o,a,s){0!==e?l(h.BLEND):p(h.BLEND);if(5!==e){if(e!==S||s!==A)switch(e){case 2:s?(h.blendEquationSeparate(h.FUNC_ADD,h.FUNC_ADD),h.blendFuncSeparate(h.ONE,h.ONE,h.ONE,h.ONE)):(h.blendEquation(h.FUNC_ADD),h.blendFunc(h.SRC_ALPHA,h.ONE));break;case 3:s?(h.blendEquationSeparate(h.FUNC_ADD,h.FUNC_ADD),h.blendFuncSeparate(h.ZERO,h.ZERO,h.ONE_MINUS_SRC_COLOR,h.ONE_MINUS_SRC_ALPHA)):(h.blendEquation(h.FUNC_ADD),h.blendFunc(h.ZERO,h.ONE_MINUS_SRC_COLOR));break;case 4:s?(h.blendEquationSeparate(h.FUNC_ADD,h.FUNC_ADD),h.blendFuncSeparate(h.ZERO,h.SRC_COLOR,h.ZERO,h.SRC_ALPHA)):(h.blendEquation(h.FUNC_ADD),h.blendFunc(h.ZERO,h.SRC_COLOR));break;default:s?(h.blendEquationSeparate(h.FUNC_ADD,h.FUNC_ADD),h.blendFuncSeparate(h.ONE,h.ONE_MINUS_SRC_ALPHA,h.ONE,h.ONE_MINUS_SRC_ALPHA)):(h.blendEquationSeparate(h.FUNC_ADD,h.FUNC_ADD),h.blendFuncSeparate(h.SRC_ALPHA,h.ONE_MINUS_SRC_ALPHA,h.ONE,h.ONE_MINUS_SRC_ALPHA))}P=O=T=C=E=M=null}else{i=i||t;o=o||r;a=a||n;if(t!==M||i!==T)h.blendEquationSeparate(u.convert(t),u.convert(i)),M=t,T=i;if(r!==E||n!==C||o!==O||a!==P)h.blendFuncSeparate(u.convert(r),u.convert(n),u.convert(o),u.convert(a)),E=r,C=n,O=o,P=a}S=e;A=s}function o(e){j!==e&&(e?h.frontFace(h.CW):h.frontFace(h.CCW),j=e)}function a(e){0!==e?(l(h.CULL_FACE),e!==R&&(1===e?h.cullFace(h.BACK):2===e?h.cullFace(h.FRONT):h.cullFace(h.FRONT_AND_BACK))):p(h.CULL_FACE);R=e}function s(e,t,r){if(e){if(l(h.POLYGON_OFFSET_FILL),I!==t||N!==r)h.polygonOffset(t,r),I=t,N=r}else p(h.POLYGON_OFFSET_FILL)}function c(e){void 0===e&&(e=h.TEXTURE0+k-1);B!==e&&(h.activeTexture(e),B=e)}var f=new function(){var t=!1,o=new Se,r=null,a=new Se(0,0,0,0);return{setMask:function(e){r===e||t||(h.colorMask(e,e,e,e),r=e)},setLocked:function(e){t=e},setClear:function(e,t,r,n,i){!0===i&&(e*=n,t*=n,r*=n);o.set(e,t,r,n);!1===a.equals(o)&&(h.clearColor(e,t,r,n),a.copy(o))},reset:function(){t=!1;r=null;a.set(-1,0,0,0)}}},d=new function(){var t=!1,r=null,n=null,i=null;return{setTest:function(e){e?l(h.DEPTH_TEST):p(h.DEPTH_TEST)},setMask:function(e){r===e||t||(h.depthMask(e),r=e)},setFunc:function(e){if(n!==e){if(e)switch(e){case 0:h.depthFunc(h.NEVER);break;case 1:h.depthFunc(h.ALWAYS);break;case 2:h.depthFunc(h.LESS);break;case 3:h.depthFunc(h.LEQUAL);break;case 4:h.depthFunc(h.EQUAL);break;case 5:h.depthFunc(h.GEQUAL);break;case 6:h.depthFunc(h.GREATER);break;case 7:h.depthFunc(h.NOTEQUAL);break;default:h.depthFunc(h.LEQUAL)}else h.depthFunc(h.LEQUAL);n=e}},setLocked:function(e){t=e},setClear:function(e){i!==e&&(h.clearDepth(e),i=e)},reset:function(){t=!1;i=n=r=null}}},v=new function(){var t=!1,r=null,n=null,i=null,o=null,a=null,s=null,u=null,c=null;return{setTest:function(e){e?l(h.STENCIL_TEST):p(h.STENCIL_TEST)},setMask:function(e){r===e||t||(h.stencilMask(e),r=e)},setFunc:function(e,t,r){if(n!==e||i!==t||o!==r)h.stencilFunc(e,t,r),n=e,i=t,o=r},setOp:function(e,t,r){if(a!==e||s!==t||u!==r)h.stencilOp(e,t,r),a=e,s=t,u=r},setLocked:function(e){t=e},setClear:function(e){c!==e&&(h.clearStencil(e),c=e)},reset:function(){t=!1;c=u=s=a=o=i=n=r=null}}},m=h.getParameter(h.MAX_VERTEX_ATTRIBS),g=new Uint8Array(m),y=new Uint8Array(m),_=new Uint8Array(m),b={},x=null,w=null,S=null,M=null,E=null,C=null,T=null,O=null,P=null,A=!1,j=null,R=null,L=null,I=null,N=null,k=h.getParameter(h.MAX_COMBINED_TEXTURE_IMAGE_UNITS),D=!1;m=0;m=h.getParameter(h.VERSION);-1!==m.indexOf("WebGL")?(m=parseFloat(/^WebGL ([0-9])/.exec(m)[1]),D=1<=m):-1!==m.indexOf("OpenGL ES")&&(m=parseFloat(/^OpenGL ES ([0-9])/.exec(m)[1]),D=2<=m);var B=null,F={},$=new Se,z=new Se,U={};U[h.TEXTURE_2D]=e(h.TEXTURE_2D,h.TEXTURE_2D,1);U[h.TEXTURE_CUBE_MAP]=e(h.TEXTURE_CUBE_MAP,h.TEXTURE_CUBE_MAP_POSITIVE_X,6);f.setClear(0,0,0,1);d.setClear(1);v.setClear(0);l(h.DEPTH_TEST);d.setFunc(3);o(!1);a(1);l(h.CULL_FACE);l(h.BLEND);i(1);return{buffers:{color:f,depth:d,stencil:v},initAttributes:function(){for(var e=0,t=g.length;e<t;e++)g[e]=0},enableAttribute:function(e){t(e,0)},enableAttributeAndDivisor:t,disableUnusedAttributes:function(){for(var e=0,t=y.length;e!==t;++e)y[e]!==g[e]&&(h.disableVertexAttribArray(e),y[e]=0)},enable:l,disable:p,getCompressedTextureFormats:function(){if(null===x&&(x=[],r.get("WEBGL_compressed_texture_pvrtc")||r.get("WEBGL_compressed_texture_s3tc")||r.get("WEBGL_compressed_texture_etc1")||r.get("WEBGL_compressed_texture_astc")))for(var e=h.getParameter(h.COMPRESSED_TEXTURE_FORMATS),t=0;t<e.length;t++)x.push(e[t]);return x},useProgram:function(e){return w!==e?(h.useProgram(e),w=e,!0):!1},setBlending:i,setMaterial:function(e,t){2===e.side?p(h.CULL_FACE):l(h.CULL_FACE);var r=1===e.side;t&&(r=!r);o(r);1===e.blending&&!1===e.transparent?i(0):i(e.blending,e.blendEquation,e.blendSrc,e.blendDst,e.blendEquationAlpha,e.blendSrcAlpha,e.blendDstAlpha,e.premultipliedAlpha);d.setFunc(e.depthFunc);d.setTest(e.depthTest);d.setMask(e.depthWrite);f.setMask(e.colorWrite);s(e.polygonOffset,e.polygonOffsetFactor,e.polygonOffsetUnits)},setFlipSided:o,setCullFace:a,setLineWidth:function(e){e!==L&&(D&&h.lineWidth(e),L=e)},setPolygonOffset:s,setScissorTest:function(e){e?l(h.SCISSOR_TEST):p(h.SCISSOR_TEST)},activeTexture:c,bindTexture:function(e,t){null===B&&c();var r=F[B];void 0===r&&(r={type:void 0,texture:void 0},F[B]=r);if(r.type!==e||r.texture!==t)h.bindTexture(e,t||U[e]),r.type=e,r.texture=t},compressedTexImage2D:function(){try{h.compressedTexImage2D.apply(h,arguments)}catch(e){console.error("THREE.WebGLState:",e)}},texImage2D:function(){try{h.texImage2D.apply(h,arguments)}catch(e){console.error("THREE.WebGLState:",e)}},scissor:function(e){!1===$.equals(e)&&(h.scissor(e.x,e.y,e.z,e.w),$.copy(e))},viewport:function(e){!1===z.equals(e)&&(h.viewport(e.x,e.y,e.z,e.w),z.copy(e))},reset:function(){for(var e=0;e<y.length;e++)1===y[e]&&(h.disableVertexAttribArray(e),y[e]=0);b={};B=x=null;F={};R=j=S=w=null;f.reset();d.reset();v.reset()}}}function dt(v,n,m,g,y,_,b){function x(e,t){if(e.width>t||e.height>t){if("data"in e){console.warn("THREE.WebGLRenderer: image in DataTexture is too big ("+e.width+"x"+e.height+").");return}t/=Math.max(e.width,e.height);var r=document.createElementNS("http://www.w3.org/1999/xhtml","canvas");r.width=Math.floor(e.width*t);r.height=Math.floor(e.height*t);r.getContext("2d").drawImage(e,0,0,e.width,e.height,0,0,r.width,r.height);console.warn("THREE.WebGLRenderer: image is too big ("+e.width+"x"+e.height+"). Resized to "+r.width+"x"+r.height);return r}return e}function w(e){return eo.isPowerOfTwo(e.width)&&eo.isPowerOfTwo(e.height)}function S(e,t){return e.generateMipmaps&&t&&1003!==e.minFilter&&1006!==e.minFilter}function M(e,t,r,n){v.generateMipmap(e);g.get(t).__maxMipLevel=Math.log(Math.max(r,n))*Math.LOG2E}function E(e,t){if(!y.isWebGL2)return e;if(e===v.RGB){if(t===v.FLOAT)return v.RGB32F;if(t===v.HALF_FLOAT)return v.RGB16F;if(t===v.UNSIGNED_BYTE)return v.RGB8}if(e===v.RGBA){if(t===v.FLOAT)return v.RGBA32F;if(t===v.HALF_FLOAT)return v.RGBA16F;if(t===v.UNSIGNED_BYTE)return v.RGBA8}return e}function i(e){return 1003===e||1004===e||1005===e?v.NEAREST:v.LINEAR}function C(e){e=e.target;e.removeEventListener("dispose",C);e:{var t=g.get(e);if(e.image&&t.__image__webglTextureCube)v.deleteTexture(t.__image__webglTextureCube);else{if(void 0===t.__webglInit)break e;v.deleteTexture(t.__webglTexture)}g.remove(e)}e.isVideoTexture&&delete l[e.id];b.memory.textures--}function a(e){e=e.target;e.removeEventListener("dispose",a);var t=g.get(e),r=g.get(e.texture);if(e){void 0!==r.__webglTexture&&v.deleteTexture(r.__webglTexture);e.depthTexture&&e.depthTexture.dispose();if(e.isWebGLRenderTargetCube)for(r=0;6>r;r++)v.deleteFramebuffer(t.__webglFramebuffer[r]),t.__webglDepthbuffer&&v.deleteRenderbuffer(t.__webglDepthbuffer[r]);else v.deleteFramebuffer(t.__webglFramebuffer),t.__webglDepthbuffer&&v.deleteRenderbuffer(t.__webglDepthbuffer);g.remove(e.texture);g.remove(e)}b.memory.textures--}function s(e,t){var r=g.get(e);if(e.isVideoTexture){var n=e.id,i=b.render.frame;l[n]!==i&&(l[n]=i,e.update())}if(0<e.version&&r.__version!==e.version)if(n=e.image,void 0===n)console.warn("THREE.WebGLRenderer: Texture marked for update but image is undefined");else if(!1===n.complete)console.warn("THREE.WebGLRenderer: Texture marked for update but image is incomplete");else{void 0===r.__webglInit&&(r.__webglInit=!0,e.addEventListener("dispose",C),r.__webglTexture=v.createTexture(),b.memory.textures++);m.activeTexture(v.TEXTURE0+t);m.bindTexture(v.TEXTURE_2D,r.__webglTexture);v.pixelStorei(v.UNPACK_FLIP_Y_WEBGL,e.flipY);v.pixelStorei(v.UNPACK_PREMULTIPLY_ALPHA_WEBGL,e.premultiplyAlpha);v.pixelStorei(v.UNPACK_ALIGNMENT,e.unpackAlignment);t=x(e.image,y.maxTextureSize);(y.isWebGL2?0:1001!==e.wrapS||1001!==e.wrapT||1003!==e.minFilter&&1006!==e.minFilter)&&!1===w(t)&&(t instanceof HTMLImageElement||t instanceof HTMLCanvasElement||t instanceof ImageBitmap)&&(void 0===p&&(p=document.createElementNS("http://www.w3.org/1999/xhtml","canvas")),p.width=eo.floorPowerOfTwo(t.width),p.height=eo.floorPowerOfTwo(t.height),p.getContext("2d").drawImage(t,0,0,p.width,p.height),console.warn("THREE.WebGLRenderer: image is not power of two ("+t.width+"x"+t.height+"). Resized to "+p.width+"x"+p.height),t=p);n=w(t);i=_.convert(e.format);var o=_.convert(e.type),a=E(i,o);T(v.TEXTURE_2D,e,n);var s=e.mipmaps;if(e.isDepthTexture){a=v.DEPTH_COMPONENT;if(1015===e.type){if(!y.isWebGL2)throw Error("Float Depth Texture only supported in WebGL2.0");a=v.DEPTH_COMPONENT32F}else y.isWebGL2&&(a=v.DEPTH_COMPONENT16);1026===e.format&&a===v.DEPTH_COMPONENT&&1012!==e.type&&1014!==e.type&&(console.warn("THREE.WebGLRenderer: Use UnsignedShortType or UnsignedIntType for DepthFormat DepthTexture."),e.type=1012,o=_.convert(e.type));1027===e.format&&(a=v.DEPTH_STENCIL,1020!==e.type&&(console.warn("THREE.WebGLRenderer: Use UnsignedInt248Type for DepthStencilFormat DepthTexture."),e.type=1020,o=_.convert(e.type)));m.texImage2D(v.TEXTURE_2D,0,a,t.width,t.height,0,i,o,null)}else if(e.isDataTexture)if(0<s.length&&n){for(var u=0,c=s.length;u<c;u++){var h=s[u];m.texImage2D(v.TEXTURE_2D,u,a,h.width,h.height,0,i,o,h.data)}e.generateMipmaps=!1;r.__maxMipLevel=s.length-1}else m.texImage2D(v.TEXTURE_2D,0,a,t.width,t.height,0,i,o,t.data),r.__maxMipLevel=0;else if(e.isCompressedTexture){u=0;for(c=s.length;u<c;u++)h=s[u],1023!==e.format&&1022!==e.format?-1<m.getCompressedTextureFormats().indexOf(i)?m.compressedTexImage2D(v.TEXTURE_2D,u,a,h.width,h.height,0,h.data):console.warn("THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .uploadTexture()"):m.texImage2D(v.TEXTURE_2D,u,a,h.width,h.height,0,i,o,h.data);r.__maxMipLevel=s.length-1}else if(0<s.length&&n){u=0;for(c=s.length;u<c;u++)h=s[u],m.texImage2D(v.TEXTURE_2D,u,a,i,o,h);e.generateMipmaps=!1;r.__maxMipLevel=s.length-1}else m.texImage2D(v.TEXTURE_2D,0,a,i,o,t),r.__maxMipLevel=0;S(e,n)&&M(v.TEXTURE_2D,e,t.width,t.height);r.__version=e.version;if(e.onUpdate)e.onUpdate(e);return}m.activeTexture(v.TEXTURE0+t);m.bindTexture(v.TEXTURE_2D,r.__webglTexture)}function T(e,t,r){r?(v.texParameteri(e,v.TEXTURE_WRAP_S,_.convert(t.wrapS)),v.texParameteri(e,v.TEXTURE_WRAP_T,_.convert(t.wrapT)),v.texParameteri(e,v.TEXTURE_MAG_FILTER,_.convert(t.magFilter)),v.texParameteri(e,v.TEXTURE_MIN_FILTER,_.convert(t.minFilter))):(v.texParameteri(e,v.TEXTURE_WRAP_S,v.CLAMP_TO_EDGE),v.texParameteri(e,v.TEXTURE_WRAP_T,v.CLAMP_TO_EDGE),1001===t.wrapS&&1001===t.wrapT||console.warn("THREE.WebGLRenderer: Texture is not power of two. Texture.wrapS and Texture.wrapT should be set to THREE.ClampToEdgeWrapping."),v.texParameteri(e,v.TEXTURE_MAG_FILTER,i(t.magFilter)),v.texParameteri(e,v.TEXTURE_MIN_FILTER,i(t.minFilter)),1003!==t.minFilter&&1006!==t.minFilter&&console.warn("THREE.WebGLRenderer: Texture is not power of two. Texture.minFilter should be set to THREE.NearestFilter or THREE.LinearFilter."));!(r=n.get("EXT_texture_filter_anisotropic"))||1015===t.type&&null===n.get("OES_texture_float_linear")||1016===t.type&&null===(y.isWebGL2||n.get("OES_texture_half_float_linear"))||!(1<t.anisotropy||g.get(t).__currentAnisotropy)||(v.texParameterf(e,r.TEXTURE_MAX_ANISOTROPY_EXT,Math.min(t.anisotropy,y.getMaxAnisotropy())),g.get(t).__currentAnisotropy=t.anisotropy)}function u(e,t,r,n){var i=_.convert(t.texture.format),o=_.convert(t.texture.type),a=E(i,o);m.texImage2D(n,0,a,t.width,t.height,0,i,o,null);v.bindFramebuffer(v.FRAMEBUFFER,e);v.framebufferTexture2D(v.FRAMEBUFFER,r,n,g.get(t.texture).__webglTexture,0);v.bindFramebuffer(v.FRAMEBUFFER,null)}function c(e,t){v.bindRenderbuffer(v.RENDERBUFFER,e);t.depthBuffer&&!t.stencilBuffer?(v.renderbufferStorage(v.RENDERBUFFER,v.DEPTH_COMPONENT16,t.width,t.height),v.framebufferRenderbuffer(v.FRAMEBUFFER,v.DEPTH_ATTACHMENT,v.RENDERBUFFER,e)):t.depthBuffer&&t.stencilBuffer?(v.renderbufferStorage(v.RENDERBUFFER,v.DEPTH_STENCIL,t.width,t.height),v.framebufferRenderbuffer(v.FRAMEBUFFER,v.DEPTH_STENCIL_ATTACHMENT,v.RENDERBUFFER,e)):v.renderbufferStorage(v.RENDERBUFFER,v.RGBA4,t.width,t.height);v.bindRenderbuffer(v.RENDERBUFFER,null)}var l={},p;this.setTexture2D=s;this.setTextureCube=function(e,t){var r=g.get(e);if(6===e.image.length)if(0<e.version&&r.__version!==e.version){r.__image__webglTextureCube||(e.addEventListener("dispose",C),r.__image__webglTextureCube=v.createTexture(),b.memory.textures++);m.activeTexture(v.TEXTURE0+t);m.bindTexture(v.TEXTURE_CUBE_MAP,r.__image__webglTextureCube);v.pixelStorei(v.UNPACK_FLIP_Y_WEBGL,e.flipY);t=e&&e.isCompressedTexture;for(var n=e.image[0]&&e.image[0].isDataTexture,i=[],o=0;6>o;o++)i[o]=t||n?n?e.image[o].image:e.image[o]:x(e.image[o],y.maxCubemapSize);var a=i[0],s=w(a),u=_.convert(e.format),c=_.convert(e.type),h=E(u,c);T(v.TEXTURE_CUBE_MAP,e,s);for(o=0;6>o;o++)if(t)for(var l,p=i[o].mipmaps,f=0,d=p.length;f<d;f++)l=p[f],1023!==e.format&&1022!==e.format?-1<m.getCompressedTextureFormats().indexOf(u)?m.compressedTexImage2D(v.TEXTURE_CUBE_MAP_POSITIVE_X+o,f,h,l.width,l.height,0,l.data):console.warn("THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .setTextureCube()"):m.texImage2D(v.TEXTURE_CUBE_MAP_POSITIVE_X+o,f,h,l.width,l.height,0,u,c,l.data);else n?m.texImage2D(v.TEXTURE_CUBE_MAP_POSITIVE_X+o,0,h,i[o].width,i[o].height,0,u,c,i[o].data):m.texImage2D(v.TEXTURE_CUBE_MAP_POSITIVE_X+o,0,h,u,c,i[o]);r.__maxMipLevel=t?p.length-1:0;S(e,s)&&M(v.TEXTURE_CUBE_MAP,e,a.width,a.height);r.__version=e.version;if(e.onUpdate)e.onUpdate(e)}else m.activeTexture(v.TEXTURE0+t),m.bindTexture(v.TEXTURE_CUBE_MAP,r.__image__webglTextureCube)};this.setTextureCubeDynamic=function(e,t){m.activeTexture(v.TEXTURE0+t);m.bindTexture(v.TEXTURE_CUBE_MAP,g.get(e).__webglTexture)};this.setupRenderTarget=function(e){var t=g.get(e),r=g.get(e.texture);e.addEventListener("dispose",a);r.__webglTexture=v.createTexture();b.memory.textures++;var n=!0===e.isWebGLRenderTargetCube,i=w(e);if(n){t.__webglFramebuffer=[];for(var o=0;6>o;o++)t.__webglFramebuffer[o]=v.createFramebuffer()}else t.__webglFramebuffer=v.createFramebuffer();if(n){m.bindTexture(v.TEXTURE_CUBE_MAP,r.__webglTexture);T(v.TEXTURE_CUBE_MAP,e.texture,i);for(o=0;6>o;o++)u(t.__webglFramebuffer[o],e,v.COLOR_ATTACHMENT0,v.TEXTURE_CUBE_MAP_POSITIVE_X+o);S(e.texture,i)&&M(v.TEXTURE_CUBE_MAP,e.texture,e.width,e.height);m.bindTexture(v.TEXTURE_CUBE_MAP,null)}else m.bindTexture(v.TEXTURE_2D,r.__webglTexture),T(v.TEXTURE_2D,e.texture,i),u(t.__webglFramebuffer,e,v.COLOR_ATTACHMENT0,v.TEXTURE_2D),S(e.texture,i)&&M(v.TEXTURE_2D,e.texture,e.width,e.height),m.bindTexture(v.TEXTURE_2D,null);if(e.depthBuffer){t=g.get(e);r=!0===e.isWebGLRenderTargetCube;if(e.depthTexture){if(r)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");v.bindFramebuffer(v.FRAMEBUFFER,t.__webglFramebuffer);if(!e.depthTexture||!e.depthTexture.isDepthTexture)throw Error("renderTarget.depthTexture must be an instance of THREE.DepthTexture");g.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);s(e.depthTexture,0);t=g.get(e.depthTexture).__webglTexture;if(1026===e.depthTexture.format)v.framebufferTexture2D(v.FRAMEBUFFER,v.DEPTH_ATTACHMENT,v.TEXTURE_2D,t,0);else if(1027===e.depthTexture.format)v.framebufferTexture2D(v.FRAMEBUFFER,v.DEPTH_STENCIL_ATTACHMENT,v.TEXTURE_2D,t,0);else throw Error("Unknown depthTexture format")}else if(r)for(t.__webglDepthbuffer=[],r=0;6>r;r++)v.bindFramebuffer(v.FRAMEBUFFER,t.__webglFramebuffer[r]),t.__webglDepthbuffer[r]=v.createRenderbuffer(),c(t.__webglDepthbuffer[r],e);else v.bindFramebuffer(v.FRAMEBUFFER,t.__webglFramebuffer),t.__webglDepthbuffer=v.createRenderbuffer(),c(t.__webglDepthbuffer,e);v.bindFramebuffer(v.FRAMEBUFFER,null)}};this.updateRenderTargetMipmap=function(e){var t=e.texture,r=w(e);if(S(t,r)){r=e.isWebGLRenderTargetCube?v.TEXTURE_CUBE_MAP:v.TEXTURE_2D;var n=g.get(t).__webglTexture;m.bindTexture(r,n);M(r,t,e.width,e.height);m.bindTexture(r,null)}}}function vt(r,n,i){return{convert:function(e){if(1e3===e)return r.REPEAT;if(1001===e)return r.CLAMP_TO_EDGE;if(1002===e)return r.MIRRORED_REPEAT;if(1003===e)return r.NEAREST;if(1004===e)return r.NEAREST_MIPMAP_NEAREST;if(1005===e)return r.NEAREST_MIPMAP_LINEAR;if(1006===e)return r.LINEAR;if(1007===e)return r.LINEAR_MIPMAP_NEAREST;if(1008===e)return r.LINEAR_MIPMAP_LINEAR;if(1009===e)return r.UNSIGNED_BYTE;if(1017===e)return r.UNSIGNED_SHORT_4_4_4_4;if(1018===e)return r.UNSIGNED_SHORT_5_5_5_1;if(1019===e)return r.UNSIGNED_SHORT_5_6_5;if(1010===e)return r.BYTE;if(1011===e)return r.SHORT;if(1012===e)return r.UNSIGNED_SHORT;if(1013===e)return r.INT;if(1014===e)return r.UNSIGNED_INT;if(1015===e)return r.FLOAT;if(1016===e){if(i.isWebGL2)return r.HALF_FLOAT;var t=n.get("OES_texture_half_float");if(null!==t)return t.HALF_FLOAT_OES}if(1021===e)return r.ALPHA;if(1022===e)return r.RGB;if(1023===e)return r.RGBA;if(1024===e)return r.LUMINANCE;if(1025===e)return r.LUMINANCE_ALPHA;if(1026===e)return r.DEPTH_COMPONENT;if(1027===e)return r.DEPTH_STENCIL;if(100===e)return r.FUNC_ADD;if(101===e)return r.FUNC_SUBTRACT;if(102===e)return r.FUNC_REVERSE_SUBTRACT;if(200===e)return r.ZERO;if(201===e)return r.ONE;if(202===e)return r.SRC_COLOR;if(203===e)return r.ONE_MINUS_SRC_COLOR;if(204===e)return r.SRC_ALPHA;if(205===e)return r.ONE_MINUS_SRC_ALPHA;if(206===e)return r.DST_ALPHA;if(207===e)return r.ONE_MINUS_DST_ALPHA;if(208===e)return r.DST_COLOR;if(209===e)return r.ONE_MINUS_DST_COLOR;if(210===e)return r.SRC_ALPHA_SATURATE;if(33776===e||33777===e||33778===e||33779===e)if(t=n.get("WEBGL_compressed_texture_s3tc"),null!==t){if(33776===e)return t.COMPRESSED_RGB_S3TC_DXT1_EXT;if(33777===e)return t.COMPRESSED_RGBA_S3TC_DXT1_EXT;if(33778===e)return t.COMPRESSED_RGBA_S3TC_DXT3_EXT;if(33779===e)return t.COMPRESSED_RGBA_S3TC_DXT5_EXT}if(35840===e||35841===e||35842===e||35843===e)if(t=n.get("WEBGL_compressed_texture_pvrtc"),null!==t){if(35840===e)return t.COMPRESSED_RGB_PVRTC_4BPPV1_IMG;if(35841===e)return t.COMPRESSED_RGB_PVRTC_2BPPV1_IMG;if(35842===e)return t.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG;if(35843===e)return t.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG}if(36196===e&&(t=n.get("WEBGL_compressed_texture_etc1"),null!==t))return t.COMPRESSED_RGB_ETC1_WEBGL;if(37808===e||37809===e||37810===e||37811===e||37812===e||37813===e||37814===e||37815===e||37816===e||37817===e||37818===e||37819===e||37820===e||37821===e)if(t=n.get("WEBGL_compressed_texture_astc"),null!==t)return e;if(103===e||104===e){if(i.isWebGL2){if(103===e)return r.MIN;if(104===e)return r.MAX}t=n.get("EXT_blend_minmax");if(null!==t){if(103===e)return t.MIN_EXT;if(104===e)return t.MAX_EXT}}if(1020===e){if(i.isWebGL2)return r.UNSIGNED_INT_24_8;t=n.get("WEBGL_depth_texture");if(null!==t)return t.UNSIGNED_INT_24_8_WEBGL}return 0}}}function mt(){h.call(this);this.type="Group"}function gt(e,t,r,n){u.call(this);this.type="PerspectiveCamera";this.fov=void 0!==e?e: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!==t?t:1;this.view=null;this.filmGauge=35;this.filmOffset=0;this.updateProjectionMatrix()}function yt(e){gt.call(this);this.cameras=e||[]}function _t(r){function n(){return null!==c&&!0===c.isPresenting}function e(){if(n()){var e=c.getEyeParameters("left"),t=e.renderWidth;e=e.renderHeight;o=r.getPixelRatio();i=r.getSize();r.setDrawingBufferSize(2*t,e,1);a.start()}else u.enabled&&(r.setDrawingBufferSize(i.width,i.height,o),a.stop())}var u=this,c=null,h=null,l=null,p=[],f=new xe,d=new xe;"undefined"!==typeof window&&"VRFrameData"in window&&(h=new window.VRFrameData,window.addEventListener("vrdisplaypresentchange",e,!1));var v=new xe,m=new s,g=new we,y=new gt;y.bounds=new Se(0,0,.5,1);y.layers.enable(1);var _=new gt;_.bounds=new Se(.5,0,.5,1);_.layers.enable(2);var b=new yt([y,_]);b.layers.enable(1);b.layers.enable(2);var i,o,x=[];this.enabled=!1;this.userHeight=1.6;this.getController=function(e){var t=p[e];void 0===t&&(t=new mt,t.matrixAutoUpdate=!1,t.visible=!1,p[e]=t);return t};this.getDevice=function(){return c};this.setDevice=function(e){void 0!==e&&(c=e);a.setContext(e)};this.setPoseTarget=function(e){void 0!==e&&(l=e)};this.getCamera=function(e){if(null===c)return e.position.set(0,u.userHeight,0),e;c.depthNear=e.near;c.depthFar=e.far;c.getFrameData(h);var t=c.stageParameters;t?f.fromArray(t.sittingToStandingTransform):f.makeTranslation(0,u.userHeight,0);t=h.pose;var r=null!==l?l:e;r.matrix.copy(f);r.matrix.decompose(r.position,r.quaternion,r.scale);null!==t.orientation&&(m.fromArray(t.orientation),r.quaternion.multiply(m));null!==t.position&&(m.setFromRotationMatrix(f),g.fromArray(t.position),g.applyQuaternion(m),r.position.add(g));r.updateMatrixWorld();if(!1===c.isPresenting)return e;y.near=e.near;_.near=e.near;y.far=e.far;_.far=e.far;b.matrixWorld.copy(e.matrixWorld);b.matrixWorldInverse.copy(e.matrixWorldInverse);y.matrixWorldInverse.fromArray(h.leftViewMatrix);_.matrixWorldInverse.fromArray(h.rightViewMatrix);d.getInverse(f);y.matrixWorldInverse.multiply(d);_.matrixWorldInverse.multiply(d);e=r.parent;null!==e&&(v.getInverse(e.matrixWorld),y.matrixWorldInverse.multiply(v),_.matrixWorldInverse.multiply(v));y.matrixWorld.getInverse(y.matrixWorldInverse);_.matrixWorld.getInverse(_.matrixWorldInverse);y.projectionMatrix.fromArray(h.leftProjectionMatrix);_.projectionMatrix.fromArray(h.rightProjectionMatrix);b.projectionMatrix.copy(y.projectionMatrix);e=c.getLayers();e.length&&(e=e[0],null!==e.leftBounds&&4===e.leftBounds.length&&y.bounds.fromArray(e.leftBounds),null!==e.rightBounds&&4===e.rightBounds.length&&_.bounds.fromArray(e.rightBounds));e:for(e=0;e<p.length;e++){t=p[e];t:{r=e;for(var n=navigator.getGamepads&&navigator.getGamepads(),i=0,o=0,a=n.length;i<a;i++){var s=n[i];if(s&&("Daydream Controller"===s.id||"Gear VR Controller"===s.id||"Oculus Go Controller"===s.id||"OpenVR Gamepad"===s.id||s.id.startsWith("Oculus Touch")||s.id.startsWith("Spatial Controller"))){if(o===r){r=s;break t}o++}}r=void 0}if(void 0!==r&&void 0!==r.pose){if(null===r.pose)break e;n=r.pose;!1===n.hasPosition&&t.position.set(.2,-.6,-.05);null!==n.position&&t.position.fromArray(n.position);null!==n.orientation&&t.quaternion.fromArray(n.orientation);t.matrix.compose(t.position,t.quaternion,t.scale);t.matrix.premultiply(f);t.matrix.decompose(t.position,t.quaternion,t.scale);t.matrixWorldNeedsUpdate=!0;t.visible=!0;n="Daydream Controller"===r.id?0:1;x[e]!==r.buttons[n].pressed&&(x[e]=r.buttons[n].pressed,!0===x[e]?t.dispatchEvent({type:"selectstart"}):(t.dispatchEvent({type:"selectend"}),t.dispatchEvent({type:"select"})))}else t.visible=!1}return b};this.getStandingMatrix=function(){return f};this.isPresenting=n;var a=new Ce;this.setAnimationLoop=function(e){a.setAnimationLoop(e)};this.submitFrame=function(){n()&&c.submitFrame()};this.dispose=function(){"undefined"!==typeof window&&window.removeEventListener("vrdisplaypresentchange",e)}}function bt(r){function i(){return null!==c&&null!==h}function n(e){var t=p[f.indexOf(e.inputSource)];t&&t.dispatchEvent({type:e.type})}function o(){r.setFramebuffer(null);m.stop()}function a(e,t){null===t?e.matrixWorld.copy(e.matrix):e.matrixWorld.multiplyMatrices(t.matrixWorld,e.matrix);e.matrixWorldInverse.getInverse(e.matrixWorld)}var s=r.context,t=null,c=null,h=null,l=null,p=[],f=[],e=new gt;e.layers.enable(1);e.viewport=new Se;var u=new gt;u.layers.enable(2);u.viewport=new Se;var d=new yt([e,u]);d.layers.enable(1);d.layers.enable(2);this.enabled=!1;this.getController=function(e){var t=p[e];void 0===t&&(t=new mt,t.matrixAutoUpdate=!1,t.visible=!1,p[e]=t);return t};this.getDevice=function(){return t};this.setDevice=function(e){void 0!==e&&(t=e);e instanceof XRDevice&&s.setCompatibleXRDevice(e)};this.setSession=function(e,t){c=e;null!==c&&(c.addEventListener("select",n),c.addEventListener("selectstart",n),c.addEventListener("selectend",n),c.addEventListener("end",o),c.baseLayer=new XRWebGLLayer(c,s),c.requestFrameOfReference(t.frameOfReferenceType).then(function(e){h=e;r.setFramebuffer(c.baseLayer.framebuffer);m.setContext(c);m.start()}),f=c.getInputSources(),c.addEventListener("inputsourceschange",function(){f=c.getInputSources();console.log(f)}))};this.getCamera=function(e){if(i()){var t=e.parent,r=d.cameras;a(d,t);for(var n=0;n<r.length;n++)a(r[n],t);e.matrixWorld.copy(d.matrixWorld);e=e.children;n=0;for(t=e.length;n<t;n++)e[n].updateMatrixWorld(!0);return d}return e};this.isPresenting=i;var v=null,m=new Ce;m.setAnimationLoop(function(e,t){l=t.getDevicePose(h);if(null!==l)for(var r=c.baseLayer,n=t.views,i=0;i<n.length;i++){var o=n[i],a=r.getViewport(o),s=l.getViewMatrix(o),u=d.cameras[i];u.matrix.fromArray(s).getInverse(u.matrix);u.projectionMatrix.fromArray(o.projectionMatrix);u.viewport.set(a.x,a.y,a.width,a.height);0===i&&(d.matrix.copy(u.matrix),d.projectionMatrix.copy(u.projectionMatrix))}for(i=0;i<p.length;i++){r=p[i];if(n=f[i])if(n=t.getInputPose(n,h),null!==n){r.matrix.elements=n.pointerMatrix;r.matrix.decompose(r.position,r.rotation,r.scale);r.visible=!0;continue}r.visible=!1}v&&v(e)});this.setAnimationLoop=function(e){v=e};this.dispose=function(){};this.getStandingMatrix=function(){console.warn("THREE.WebXRManager: getStandingMatrix() is no longer needed.");return new THREE.Matrix4};this.submitFrame=function(){}}function xt(e){var w;function t(){ee=new Re(Q);te=new Ae(Q,ee,e);te.isWebGL2||(ee.get("WEBGL_depth_texture"),ee.get("OES_texture_float"),ee.get("OES_texture_half_float"),ee.get("OES_texture_half_float_linear"),ee.get("OES_standard_derivatives"),ee.get("OES_element_index_uint"),ee.get("ANGLE_instanced_arrays"));ee.get("OES_texture_float_linear");me=new vt(Q,ee,te);re=new ft(Q,ee,me,te);re.scissor(B.copy(H).multiplyScalar(G));re.viewport(D.copy(V).multiplyScalar(G));ne=new Ne(Q);ie=new tt;oe=new dt(Q,ee,re,ie,te,me,ne);ae=new Te(Q);se=new Le(Q,ae,ne);ue=new De(se,ne);fe=new ke(Q);ce=new et(T,ee,te);he=new ot;le=new ct;pe=new Oe(T,re,ue,b);de=new Pe(Q,ee,ne,te);ve=new Ie(Q,ee,ne,te);ne.programs=ce.programs;T.context=Q;T.capabilities=te;T.extensions=ee;T.properties=ie;T.renderLists=he;T.state=re;T.info=ne}function r(e){e.preventDefault();console.log("THREE.WebGLRenderer: Context Lost.");O=!0}function n(){console.log("THREE.WebGLRenderer: Context Restored.");O=!1;t()}function h(e){e=e.target;e.removeEventListener("dispose",h);l(e);ie.remove(e)}function l(e){var t=ie.get(e).program;e.program=void 0;void 0!==t&&ce.releaseProgram(t)}function s(e,t){e.render(function(e){T.renderBufferImmediate(e,t)})}function p(e,t,r){if(!1!==e.visible){if(e.layers.test(t.layers))if(e.isLight)C.pushLight(e),e.castShadow&&C.pushShadow(e);else if(e.isSprite){if(!e.frustumCulled||W.intersectsSprite(e)){r&&J.setFromMatrixPosition(e.matrixWorld).applyMatrix4(Z);var n=ue.update(e),i=e.material;E.push(e,n,i,J.z,null)}}else if(e.isImmediateRenderObject)r&&J.setFromMatrixPosition(e.matrixWorld).applyMatrix4(Z),E.push(e,null,e.material,J.z,null);else if(e.isMesh||e.isLine||e.isPoints)if(e.isSkinnedMesh&&e.skeleton.update(),!e.frustumCulled||W.intersectsObject(e))if(r&&J.setFromMatrixPosition(e.matrixWorld).applyMatrix4(Z),n=ue.update(e),i=e.material,Array.isArray(i))for(var o=n.groups,a=0,s=o.length;a<s;a++){var u=o[a],c=i[u.materialIndex];c&&c.visible&&E.push(e,n,c,J.z,u)}else i.visible&&E.push(e,n,i,J.z,null);e=e.children;a=0;for(s=e.length;a<s;a++)p(e[a],t,r)}}function a(e,t,r,n){for(var i=0,o=e.length;i<o;i++){var a=e[i],s=a.object,u=a.geometry,c=void 0===n?a.material:n;a=a.group;if(r.isArrayCamera){k=r;for(var h=r.cameras,l=0,p=h.length;l<p;l++){var f=h[l];if(s.layers.test(f.layers)){if("viewport"in f)re.viewport(D.copy(f.viewport));else{var d=f.bounds;re.viewport(D.set(d.x*z,d.y*U,d.z*z,d.w*U).multiplyScalar(G))}v(s,t,f,u,c,a)}}}else k=null,v(s,t,r,u,c,a)}}function v(e,t,r,n,i,o){e.onBeforeRender(T,t,r,n,i,o);C=le.get(t,k||r);e.modelViewMatrix.multiplyMatrices(r.matrixWorldInverse,e.matrixWorld);e.normalMatrix.getNormalMatrix(e.modelViewMatrix);if(e.isImmediateRenderObject){re.setMaterial(i);var a=S(r,t.fog,i,e);L=w=null;I=!1;s(e,a)}else T.renderBufferDirect(r,t.fog,n,i,e,o);e.onAfterRender(T,t,r,n,i,o);C=le.get(t,k||r)}function f(e,t,r){var n=ie.get(e),i=C.state.lights,o=n.lightsHash,a=i.state.hash;r=ce.getParameters(e,i.state,C.state.shadowsArray,t,X.numPlanes,X.numIntersection,r);var s=ce.getProgramCode(e,r),u=n.program,c=!0;if(void 0===u)e.addEventListener("dispose",h);else if(u.code!==s)l(e);else{if(o.stateID!==a.stateID||o.directionalLength!==a.directionalLength||o.pointLength!==a.pointLength||o.spotLength!==a.spotLength||o.rectAreaLength!==a.rectAreaLength||o.hemiLength!==a.hemiLength||o.shadowsLength!==a.shadowsLength)o.stateID=a.stateID,o.directionalLength=a.directionalLength,o.pointLength=a.pointLength,o.spotLength=a.spotLength,o.rectAreaLength=a.rectAreaLength,o.hemiLength=a.hemiLength,o.shadowsLength=a.shadowsLength;else if(void 0!==r.shaderID)return;c=!1}c&&(r.shaderID?(s=so[r.shaderID],n.shader={name:e.type,uniforms:io.clone(s.uniforms),vertexShader:s.vertexShader,fragmentShader:s.fragmentShader}):n.shader={name:e.type,uniforms:e.uniforms,vertexShader:e.vertexShader,fragmentShader:e.fragmentShader},e.onBeforeCompile(n.shader,T),s=ce.getProgramCode(e,r),u=ce.acquireProgram(e,n.shader,r,s),n.program=u,e.program=u);r=u.getAttributes();if(e.morphTargets)for(s=e.numSupportedMorphTargets=0;s<T.maxMorphTargets;s++)0<=r["morphTarget"+s]&&e.numSupportedMorphTargets++;if(e.morphNormals)for(s=e.numSupportedMorphNormals=0;s<T.maxMorphNormals;s++)0<=r["morphNormal"+s]&&e.numSupportedMorphNormals++;r=n.shader.uniforms;if(!e.isShaderMaterial&&!e.isRawShaderMaterial||!0===e.clipping)n.numClippingPlanes=X.numPlanes,n.numIntersection=X.numIntersection,r.clippingPlanes=X.uniform;n.fog=t;void 0===o&&(n.lightsHash=o={});o.stateID=a.stateID;o.directionalLength=a.directionalLength;o.pointLength=a.pointLength;o.spotLength=a.spotLength;o.rectAreaLength=a.rectAreaLength;o.hemiLength=a.hemiLength;o.shadowsLength=a.shadowsLength;e.lights&&(r.ambientLightColor.value=i.state.ambient,r.directionalLights.value=i.state.directional,r.spotLights.value=i.state.spot,r.rectAreaLights.value=i.state.rectArea,r.pointLights.value=i.state.point,r.hemisphereLights.value=i.state.hemi,r.directionalShadowMap.value=i.state.directionalShadowMap,r.directionalShadowMatrix.value=i.state.directionalShadowMatrix,r.spotShadowMap.value=i.state.spotShadowMap,r.spotShadowMatrix.value=i.state.spotShadowMatrix,r.pointShadowMap.value=i.state.pointShadowMap,r.pointShadowMatrix.value=i.state.pointShadowMatrix);e=n.program.getUniforms();e=Fe.seqWithValue(e.seq,r);n.uniformsList=e}function S(e,t,r,n){$=0;var i=ie.get(r),o=i.lightsHash,a=C.state.lights.state.hash;Y&&(K||e!==N)&&X.setState(r.clippingPlanes,r.clipIntersection,r.clipShadows,e,i,e===N&&r.id===R);!1===r.needsUpdate&&(void 0===i.program?r.needsUpdate=!0:r.fog&&i.fog!==t?r.needsUpdate=!0:!r.lights||o.stateID===a.stateID&&o.directionalLength===a.directionalLength&&o.pointLength===a.pointLength&&o.spotLength===a.spotLength&&o.rectAreaLength===a.rectAreaLength&&o.hemiLength===a.hemiLength&&o.shadowsLength===a.shadowsLength?void 0===i.numClippingPlanes||i.numClippingPlanes===X.numPlanes&&i.numIntersection===X.numIntersection||(r.needsUpdate=!0):r.needsUpdate=!0);r.needsUpdate&&(f(r,t,n),r.needsUpdate=!1);var s=!1,u=!1,c=!1;o=i.program;a=o.getUniforms();var h=i.shader.uniforms;re.useProgram(o.program)&&(c=u=s=!0);r.id!==R&&(R=r.id,u=!0);if(s||e!==N){a.setValue(Q,"projectionMatrix",e.projectionMatrix);te.logarithmicDepthBuffer&&a.setValue(Q,"logDepthBufFC",2/(Math.log(e.far+1)/Math.LN2));N!==(k||e)&&(N=k||e,c=u=!0);if(r.isShaderMaterial||r.isMeshPhongMaterial||r.isMeshStandardMaterial||r.envMap)s=a.map.cameraPosition,void 0!==s&&s.setValue(Q,J.setFromMatrixPosition(e.matrixWorld));(r.isMeshPhongMaterial||r.isMeshLambertMaterial||r.isMeshBasicMaterial||r.isMeshStandardMaterial||r.isShaderMaterial||r.skinning)&&a.setValue(Q,"viewMatrix",e.matrixWorldInverse)}if(r.skinning&&(a.setOptional(Q,n,"bindMatrix"),a.setOptional(Q,n,"bindMatrixInverse"),e=n.skeleton))if(s=e.bones,te.floatVertexTextures){if(void 0===e.boneTexture){s=Math.sqrt(4*s.length);s=eo.ceilPowerOfTwo(s);s=Math.max(s,4);var l=new Float32Array(s*s*4);l.set(e.boneMatrices);var p=new Me(l,s,s,1023,1015);p.needsUpdate=!0;e.boneMatrices=l;e.boneTexture=p;e.boneTextureSize=s}a.setValue(Q,"boneTexture",e.boneTexture);a.setValue(Q,"boneTextureSize",e.boneTextureSize)}else a.setOptional(Q,e,"boneMatrices");u&&(a.setValue(Q,"toneMappingExposure",T.toneMappingExposure),a.setValue(Q,"toneMappingWhitePoint",T.toneMappingWhitePoint),r.lights&&(u=c,h.ambientLightColor.needsUpdate=u,h.directionalLights.needsUpdate=u,h.pointLights.needsUpdate=u,h.spotLights.needsUpdate=u,h.rectAreaLights.needsUpdate=u,h.hemisphereLights.needsUpdate=u),t&&r.fog&&(h.fogColor.value=t.color,t.isFog?(h.fogNear.value=t.near,h.fogFar.value=t.far):t.isFogExp2&&(h.fogDensity.value=t.density)),r.isMeshBasicMaterial?d(h,r):r.isMeshLambertMaterial?(d(h,r),r.emissiveMap&&(h.emissiveMap.value=r.emissiveMap)):r.isMeshPhongMaterial?(d(h,r),r.isMeshToonMaterial?(m(h,r),r.gradientMap&&(h.gradientMap.value=r.gradientMap)):m(h,r)):r.isMeshStandardMaterial?(d(h,r),r.isMeshPhysicalMaterial?(g(h,r),h.reflectivity.value=r.reflectivity,h.clearCoat.value=r.clearCoat,h.clearCoatRoughness.value=r.clearCoatRoughness):g(h,r)):r.isMeshDepthMaterial?(d(h,r),r.displacementMap&&(h.displacementMap.value=r.displacementMap,h.displacementScale.value=r.displacementScale,h.displacementBias.value=r.displacementBias)):r.isMeshDistanceMaterial?(d(h,r),r.displacementMap&&(h.displacementMap.value=r.displacementMap,h.displacementScale.value=r.displacementScale,h.displacementBias.value=r.displacementBias),h.referencePosition.value.copy(r.referencePosition),h.nearDistance.value=r.nearDistance,h.farDistance.value=r.farDistance):r.isMeshNormalMaterial?(d(h,r),r.bumpMap&&(h.bumpMap.value=r.bumpMap,h.bumpScale.value=r.bumpScale,1===r.side&&(h.bumpScale.value*=-1)),r.normalMap&&(h.normalMap.value=r.normalMap,h.normalScale.value.copy(r.normalScale),1===r.side&&h.normalScale.value.negate()),r.displacementMap&&(h.displacementMap.value=r.displacementMap,h.displacementScale.value=r.displacementScale,h.displacementBias.value=r.displacementBias)):r.isLineBasicMaterial?(h.diffuse.value=r.color,h.opacity.value=r.opacity,r.isLineDashedMaterial&&(h.dashSize.value=r.dashSize,h.totalSize.value=r.dashSize+r.gapSize,h.scale.value=r.scale)):r.isPointsMaterial?(h.diffuse.value=r.color,h.opacity.value=r.opacity,h.size.value=r.size*G,h.scale.value=.5*U,h.map.value=r.map,null!==r.map&&(!0===r.map.matrixAutoUpdate&&r.map.updateMatrix(),h.uvTransform.value.copy(r.map.matrix))):r.isSpriteMaterial?(h.diffuse.value=r.color,h.opacity.value=r.opacity,h.rotation.value=r.rotation,h.map.value=r.map,null!==r.map&&(!0===r.map.matrixAutoUpdate&&r.map.updateMatrix(),h.uvTransform.value.copy(r.map.matrix))):r.isShadowMaterial&&(h.color.value=r.color,h.opacity.value=r.opacity),void 0!==h.ltc_1&&(h.ltc_1.value=ao.LTC_1),void 0!==h.ltc_2&&(h.ltc_2.value=ao.LTC_2),Fe.upload(Q,i.uniformsList,h,T));r.isShaderMaterial&&!0===r.uniformsNeedUpdate&&(Fe.upload(Q,i.uniformsList,h,T),r.uniformsNeedUpdate=!1);r.isSpriteMaterial&&a.setValue(Q,"center",n.center);a.setValue(Q,"modelViewMatrix",n.modelViewMatrix);a.setValue(Q,"normalMatrix",n.normalMatrix);a.setValue(Q,"modelMatrix",n.matrixWorld);return o}function d(e,t){e.opacity.value=t.opacity;t.color&&(e.diffuse.value=t.color);t.emissive&&e.emissive.value.copy(t.emissive).multiplyScalar(t.emissiveIntensity);t.map&&(e.map.value=t.map);t.alphaMap&&(e.alphaMap.value=t.alphaMap);t.specularMap&&(e.specularMap.value=t.specularMap);t.envMap&&(e.envMap.value=t.envMap,e.flipEnvMap.value=t.envMap&&t.envMap.isCubeTexture?-1:1,e.reflectivity.value=t.reflectivity,e.refractionRatio.value=t.refractionRatio,e.maxMipLevel.value=ie.get(t.envMap).__maxMipLevel);t.lightMap&&(e.lightMap.value=t.lightMap,e.lightMapIntensity.value=t.lightMapIntensity);t.aoMap&&(e.aoMap.value=t.aoMap,e.aoMapIntensity.value=t.aoMapIntensity);if(t.map)var r=t.map;else t.specularMap?r=t.specularMap:t.displacementMap?r=t.displacementMap:t.normalMap?r=t.normalMap:t.bumpMap?r=t.bumpMap:t.roughnessMap?r=t.roughnessMap:t.metalnessMap?r=t.metalnessMap:t.alphaMap?r=t.alphaMap:t.emissiveMap&&(r=t.emissiveMap);void 0!==r&&(r.isWebGLRenderTarget&&(r=r.texture),!0===r.matrixAutoUpdate&&r.updateMatrix(),e.uvTransform.value.copy(r.matrix))}function m(e,t){e.specular.value=t.specular;e.shininess.value=Math.max(t.shininess,1e-4);t.emissiveMap&&(e.emissiveMap.value=t.emissiveMap);t.bumpMap&&(e.bumpMap.value=t.bumpMap,e.bumpScale.value=t.bumpScale,1===t.side&&(e.bumpScale.value*=-1));t.normalMap&&(e.normalMap.value=t.normalMap,e.normalScale.value.copy(t.normalScale),1===t.side&&e.normalScale.value.negate());t.displacementMap&&(e.displacementMap.value=t.displacementMap,e.displacementScale.value=t.displacementScale,e.displacementBias.value=t.displacementBias)}function g(e,t){e.roughness.value=t.roughness;e.metalness.value=t.metalness;t.roughnessMap&&(e.roughnessMap.value=t.roughnessMap);t.metalnessMap&&(e.metalnessMap.value=t.metalnessMap);t.emissiveMap&&(e.emissiveMap.value=t.emissiveMap);t.bumpMap&&(e.bumpMap.value=t.bumpMap,e.bumpScale.value=t.bumpScale,1===t.side&&(e.bumpScale.value*=-1));t.normalMap&&(e.normalMap.value=t.normalMap,e.normalScale.value.copy(t.normalScale),1===t.side&&e.normalScale.value.negate());t.displacementMap&&(e.displacementMap.value=t.displacementMap,e.displacementScale.value=t.displacementScale,e.displacementBias.value=t.displacementBias);t.envMap&&(e.envMapIntensity.value=t.envMapIntensity)}console.log("THREE.WebGLRenderer","95");e=e||{};var i=void 0!==e.canvas?e.canvas:document.createElementNS("http://www.w3.org/1999/xhtml","canvas"),o=void 0!==e.context?e.context:null,u=void 0!==e.alpha?e.alpha:!1,c=void 0!==e.depth?e.depth:!0,y=void 0!==e.stencil?e.stencil:!0,_=void 0!==e.antialias?e.antialias:!1,b=void 0!==e.premultipliedAlpha?e.premultipliedAlpha:!0,x=void 0!==e.preserveDrawingBuffer?e.preserveDrawingBuffer:!1,M=void 0!==e.powerPreference?e.powerPreference:"default",E=null,C=null;this.domElement=i;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 T=this,O=!1,P=null,A=null,j=null,R=-1;var L=w=null;var I=!1;var N=null,k=null,D=new Se,B=new Se,F=null,$=0,z=i.width,U=i.height,G=1,V=new Se(0,0,z,U),H=new Se(0,0,z,U),q=!1,W=new Ee,X=new je,Y=!1,K=!1,Z=new xe,J=new we;try{u={alpha:u,depth:c,stencil:y,antialias:_,premultipliedAlpha:b,preserveDrawingBuffer:x,powerPreference:M};i.addEventListener("webglcontextlost",r,!1);i.addEventListener("webglcontextrestored",n,!1);var Q=o||i.getContext("webgl",u)||i.getContext("experimental-webgl",u);if(null===Q){if(null!==i.getContext("webgl"))throw Error("Error creating WebGL context with your selected attributes.");throw Error("Error creating WebGL context.")}void 0===Q.getShaderPrecisionFormat&&(Q.getShaderPrecisionFormat=function(){return{rangeMin:1,rangeMax:1,precision:1}})}catch(e){console.error("THREE.WebGLRenderer: "+e.message)}var ee,te,re,ne,ie,oe,ae,se,ue,ce,he,le,pe,fe,de,ve,me;t();var ge="xr"in navigator?new bt(T):new _t(T);this.vr=ge;var ye=new pt(T,ue,te.maxTextureSize);this.shadowMap=ye;this.getContext=function(){return Q};this.getContextAttributes=function(){return Q.getContextAttributes()};this.forceContextLoss=function(){var e=ee.get("WEBGL_lose_context");e&&e.loseContext()};this.forceContextRestore=function(){var e=ee.get("WEBGL_lose_context");e&&e.restoreContext()};this.getPixelRatio=function(){return G};this.setPixelRatio=function(e){void 0!==e&&(G=e,this.setSize(z,U,!1))};this.getSize=function(){return{width:z,height:U}};this.setSize=function(e,t,r){ge.isPresenting()?console.warn("THREE.WebGLRenderer: Can't change size while VR device is presenting."):(z=e,U=t,i.width=e*G,i.height=t*G,!1!==r&&(i.style.width=e+"px",i.style.height=t+"px"),this.setViewport(0,0,e,t))};this.getDrawingBufferSize=function(){return{width:z*G,height:U*G}};this.setDrawingBufferSize=function(e,t,r){z=e;U=t;G=r;i.width=e*r;i.height=t*r;this.setViewport(0,0,e,t)};this.getCurrentViewport=function(){return D};this.setViewport=function(e,t,r,n){V.set(e,U-t-n,r,n);re.viewport(D.copy(V).multiplyScalar(G))};this.setScissor=function(e,t,r,n){H.set(e,U-t-n,r,n);re.scissor(B.copy(H).multiplyScalar(G))};this.setScissorTest=function(e){re.setScissorTest(q=e)};this.getClearColor=function(){return pe.getClearColor()};this.setClearColor=function(){pe.setClearColor.apply(pe,arguments)};this.getClearAlpha=function(){return pe.getClearAlpha()};this.setClearAlpha=function(){pe.setClearAlpha.apply(pe,arguments)};this.clear=function(e,t,r){var n=0;if(void 0===e||e)n|=Q.COLOR_BUFFER_BIT;if(void 0===t||t)n|=Q.DEPTH_BUFFER_BIT;if(void 0===r||r)n|=Q.STENCIL_BUFFER_BIT;Q.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(e,t,r,n){this.setRenderTarget(e);this.clear(t,r,n)};this.dispose=function(){i.removeEventListener("webglcontextlost",r,!1);i.removeEventListener("webglcontextrestored",n,!1);he.dispose();le.dispose();ie.dispose();ue.dispose();ge.dispose();be.stop()};this.renderBufferImmediate=function(e,t){re.initAttributes();var r=ie.get(e);e.hasPositions&&!r.position&&(r.position=Q.createBuffer());e.hasNormals&&!r.normal&&(r.normal=Q.createBuffer());e.hasUvs&&!r.uv&&(r.uv=Q.createBuffer());e.hasColors&&!r.color&&(r.color=Q.createBuffer());t=t.getAttributes();e.hasPositions&&(Q.bindBuffer(Q.ARRAY_BUFFER,r.position),Q.bufferData(Q.ARRAY_BUFFER,e.positionArray,Q.DYNAMIC_DRAW),re.enableAttribute(t.position),Q.vertexAttribPointer(t.position,3,Q.FLOAT,!1,0,0));e.hasNormals&&(Q.bindBuffer(Q.ARRAY_BUFFER,r.normal),Q.bufferData(Q.ARRAY_BUFFER,e.normalArray,Q.DYNAMIC_DRAW),re.enableAttribute(t.normal),Q.vertexAttribPointer(t.normal,3,Q.FLOAT,!1,0,0));e.hasUvs&&(Q.bindBuffer(Q.ARRAY_BUFFER,r.uv),Q.bufferData(Q.ARRAY_BUFFER,e.uvArray,Q.DYNAMIC_DRAW),re.enableAttribute(t.uv),Q.vertexAttribPointer(t.uv,2,Q.FLOAT,!1,0,0));e.hasColors&&(Q.bindBuffer(Q.ARRAY_BUFFER,r.color),Q.bufferData(Q.ARRAY_BUFFER,e.colorArray,Q.DYNAMIC_DRAW),re.enableAttribute(t.color),Q.vertexAttribPointer(t.color,3,Q.FLOAT,!1,0,0));re.disableUnusedAttributes();Q.drawArrays(Q.TRIANGLES,0,e.count);e.count=0};this.renderBufferDirect=function(e,t,r,n,i,o){var a=i.isMesh&&0>i.normalMatrix.determinant();re.setMaterial(n,a);var s=S(e,t,n,i),u=!1;if(w!==r.id||L!==s.id||I!==(!0===n.wireframe))w=r.id,L=s.id,I=!0===n.wireframe,u=!0;i.morphTargetInfluences&&(fe.update(i,r,n,s),u=!0);a=r.index;var c=r.attributes.position;t=1;!0===n.wireframe&&(a=se.getWireframeAttribute(r),t=2);e=de;if(null!==a){var h=ae.get(a);e=ve;e.setIndex(h)}if(u){if(r&&r.isInstancedBufferGeometry&!te.isWebGL2&&null===ee.get("ANGLE_instanced_arrays"))console.error("THREE.WebGLRenderer.setupVertexAttributes: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.");else{re.initAttributes();u=r.attributes;s=s.getAttributes();var l=n.defaultAttributeValues;for(x in s){var p=s[x];if(0<=p){var f=u[x];if(void 0!==f){var d=f.normalized,v=f.itemSize,m=ae.get(f);if(void 0!==m){var g=m.buffer,y=m.type;m=m.bytesPerElement;if(f.isInterleavedBufferAttribute){var _=f.data,b=_.stride;f=f.offset;_&&_.isInstancedInterleavedBuffer?(re.enableAttributeAndDivisor(p,_.meshPerAttribute),void 0===r.maxInstancedCount&&(r.maxInstancedCount=_.meshPerAttribute*_.count)):re.enableAttribute(p);Q.bindBuffer(Q.ARRAY_BUFFER,g);Q.vertexAttribPointer(p,v,y,d,b*m,f*m)}else f.isInstancedBufferAttribute?(re.enableAttributeAndDivisor(p,f.meshPerAttribute),void 0===r.maxInstancedCount&&(r.maxInstancedCount=f.meshPerAttribute*f.count)):re.enableAttribute(p),Q.bindBuffer(Q.ARRAY_BUFFER,g),Q.vertexAttribPointer(p,v,y,d,0,0)}}else if(void 0!==l&&(d=l[x],void 0!==d))switch(d.length){case 2:Q.vertexAttrib2fv(p,d);break;case 3:Q.vertexAttrib3fv(p,d);break;case 4:Q.vertexAttrib4fv(p,d);break;default:Q.vertexAttrib1fv(p,d)}}}re.disableUnusedAttributes()}null!==a&&Q.bindBuffer(Q.ELEMENT_ARRAY_BUFFER,h.buffer)}h=Infinity;null!==a?h=a.count:void 0!==c&&(h=c.count);a=r.drawRange.start*t;c=null!==o?o.start*t:0;var x=Math.max(a,c);o=Math.max(0,Math.min(h,a+r.drawRange.count*t,c+(null!==o?o.count*t:Infinity))-1-x+1);if(0!==o){if(i.isMesh)if(!0===n.wireframe)re.setLineWidth(n.wireframeLinewidth*(null===A?G:1)),e.setMode(Q.LINES);else switch(i.drawMode){case 0:e.setMode(Q.TRIANGLES);break;case 1:e.setMode(Q.TRIANGLE_STRIP);break;case 2:e.setMode(Q.TRIANGLE_FAN)}else i.isLine?(n=n.linewidth,void 0===n&&(n=1),re.setLineWidth(n*(null===A?G:1)),i.isLineSegments?e.setMode(Q.LINES):i.isLineLoop?e.setMode(Q.LINE_LOOP):e.setMode(Q.LINE_STRIP)):i.isPoints?e.setMode(Q.POINTS):i.isSprite&&e.setMode(Q.TRIANGLES);r&&r.isInstancedBufferGeometry?0<r.maxInstancedCount&&e.renderInstances(r,x,o):e.render(x,o)}};this.compile=function(r,e){C=le.get(r,e);C.init();r.traverse(function(e){e.isLight&&(C.pushLight(e),e.castShadow&&C.pushShadow(e))});C.setupLights(e);r.traverse(function(e){if(e.material)if(Array.isArray(e.material))for(var t=0;t<e.material.length;t++)f(e.material[t],r.fog,e);else f(e.material,r.fog,e)})};var _e=null,be=new Ce;be.setAnimationLoop(function(e){ge.isPresenting()||_e&&_e(e)});"undefined"!==typeof window&&be.setContext(window);this.setAnimationLoop=function(e){_e=e;ge.setAnimationLoop(e);be.start()};this.render=function(e,t,r,n){if(!t||!t.isCamera)console.error("THREE.WebGLRenderer.render: camera is not an instance of THREE.Camera.");else if(!O){L=w=null;I=!1;R=-1;N=null;!0===e.autoUpdate&&e.updateMatrixWorld();null===t.parent&&t.updateMatrixWorld();ge.enabled&&(t=ge.getCamera(t));C=le.get(e,t);C.init();e.onBeforeRender(T,e,t,r);Z.multiplyMatrices(t.projectionMatrix,t.matrixWorldInverse);W.setFromMatrix(Z);K=this.localClippingEnabled;Y=X.init(this.clippingPlanes,K,t);E=he.get(e,t);E.init();p(e,t,T.sortObjects);!0===T.sortObjects&&E.sort();Y&&X.beginShadows();ye.render(C.state.shadowsArray,e,t);C.setupLights(t);Y&&X.endShadows();this.info.autoReset&&this.info.reset();void 0===r&&(r=null);this.setRenderTarget(r);pe.render(E,e,t,n);n=E.opaque;var i=E.transparent;if(e.overrideMaterial){var o=e.overrideMaterial;n.length&&a(n,e,t,o);i.length&&a(i,e,t,o)}else n.length&&a(n,e,t),i.length&&a(i,e,t);r&&oe.updateRenderTargetMipmap(r);re.buffers.depth.setTest(!0);re.buffers.depth.setMask(!0);re.buffers.color.setMask(!0);re.setPolygonOffset(!1);e.onAfterRender(T,e,t);ge.enabled&&ge.submitFrame();C=E=null}};this.allocTextureUnit=function(){var e=$;e>=te.maxTextures&&console.warn("THREE.WebGLRenderer: Trying to use "+e+" texture units while this GPU supports only "+te.maxTextures);$+=1;return e};this.setTexture2D=function(){var r=!1;return function(e,t){e&&e.isWebGLRenderTarget&&(r||(console.warn("THREE.WebGLRenderer.setTexture2D: don't use render targets as textures. Use their .texture property instead."),r=!0),e=e.texture);oe.setTexture2D(e,t)}}();this.setTexture=function(){var r=!1;return function(e,t){r||(console.warn("THREE.WebGLRenderer: .setTexture is deprecated, use setTexture2D instead."),r=!0);oe.setTexture2D(e,t)}}();this.setTextureCube=function(){var r=!1;return function(e,t){e&&e.isWebGLRenderTargetCube&&(r||(console.warn("THREE.WebGLRenderer.setTextureCube: don't use cube render targets as textures. Use their .texture property instead."),r=!0),e=e.texture);e&&e.isCubeTexture||Array.isArray(e.image)&&6===e.image.length?oe.setTextureCube(e,t):oe.setTextureCubeDynamic(e,t)}}();this.setFramebuffer=function(e){P=e};this.getRenderTarget=function(){return A};this.setRenderTarget=function(e){(A=e)&&void 0===ie.get(e).__webglFramebuffer&&oe.setupRenderTarget(e);var t=P,r=!1;e?(t=ie.get(e).__webglFramebuffer,e.isWebGLRenderTargetCube&&(t=t[e.activeCubeFace],r=!0),D.copy(e.viewport),B.copy(e.scissor),F=e.scissorTest):(D.copy(V).multiplyScalar(G),B.copy(H).multiplyScalar(G),F=q);j!==t&&(Q.bindFramebuffer(Q.FRAMEBUFFER,t),j=t);re.viewport(D);re.scissor(B);re.setScissorTest(F);r&&(r=ie.get(e.texture),Q.framebufferTexture2D(Q.FRAMEBUFFER,Q.COLOR_ATTACHMENT0,Q.TEXTURE_CUBE_MAP_POSITIVE_X+e.activeCubeFace,r.__webglTexture,e.activeMipMapLevel))};this.readRenderTargetPixels=function(e,t,r,n,i,o){if(e&&e.isWebGLRenderTarget){var a=ie.get(e).__webglFramebuffer;if(a){var s=!1;a!==j&&(Q.bindFramebuffer(Q.FRAMEBUFFER,a),s=!0);try{var u=e.texture,c=u.format,h=u.type;1023!==c&&me.convert(c)!==Q.getParameter(Q.IMPLEMENTATION_COLOR_READ_FORMAT)?console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in RGBA or implementation defined format."):1009===h||me.convert(h)===Q.getParameter(Q.IMPLEMENTATION_COLOR_READ_TYPE)||1015===h&&(te.isWebGL2||ee.get("OES_texture_float")||ee.get("WEBGL_color_buffer_float"))||1016===h&&(te.isWebGL2?ee.get("EXT_color_buffer_float"):ee.get("EXT_color_buffer_half_float"))?Q.checkFramebufferStatus(Q.FRAMEBUFFER)===Q.FRAMEBUFFER_COMPLETE?0<=t&&t<=e.width-n&&0<=r&&r<=e.height-i&&Q.readPixels(t,r,n,i,me.convert(c),me.convert(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&&Q.bindFramebuffer(Q.FRAMEBUFFER,j)}}}else console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.")};this.copyFramebufferToTexture=function(e,t,r){var n=t.image.width,i=t.image.height,o=me.convert(t.format);this.setTexture2D(t,0);Q.copyTexImage2D(Q.TEXTURE_2D,r||0,o,e.x,e.y,n,i,0)};this.copyTextureToTexture=function(e,t,r,n){var i=t.image.width,o=t.image.height,a=me.convert(r.format),s=me.convert(r.type);this.setTexture2D(r,0);t.isDataTexture?Q.texSubImage2D(Q.TEXTURE_2D,n||0,e.x,e.y,i,o,a,s,t.image.data):Q.texSubImage2D(Q.TEXTURE_2D,n||0,e.x,e.y,a,s,t.image)}}function wt(e,t){this.name="";this.color=new w(e);this.density=void 0!==t?t:25e-5}function St(e,t,r){this.name="";this.color=new w(e);this.near=void 0!==t?t:1;this.far=void 0!==r?r:1e3}function Mt(){h.call(this);this.type="Scene";this.overrideMaterial=this.fog=this.background=null;this.autoUpdate=!0}function Et(e,t){this.array=e;this.stride=t;this.count=void 0!==e?e.length/t:0;this.dynamic=!1;this.updateRange={offset:0,count:-1};this.version=0}function Ct(e,t,r,n){this.data=e;this.itemSize=t;this.offset=r;this.normalized=!0===n}function Tt(e){I.call(this);this.type="SpriteMaterial";this.color=new w(16777215);this.map=null;this.rotation=0;this.lights=!1;this.transparent=!0;this.setValues(e)}function Ot(e){h.call(this);this.type="Sprite";if(void 0===So){So=new A;var t=new Float32Array([-.5,-.5,0,0,0,.5,-.5,0,1,0,.5,.5,0,1,1,-.5,.5,0,0,1]);t=new Et(t,5);So.setIndex([0,1,2,0,2,3]);So.addAttribute("position",new Ct(t,3,0,!1));So.addAttribute("uv",new Ct(t,2,3,!1))}this.geometry=So;this.material=void 0!==e?e:new Tt;this.center=new H(.5,.5)}function Pt(){h.call(this);this.type="LOD";Object.defineProperties(this,{levels:{enumerable:!0,value:[]}})}function At(e,t){e=e||[];this.bones=e.slice(0);this.boneMatrices=new Float32Array(16*this.bones.length);if(void 0===t)this.calculateInverses();else if(this.bones.length===t.length)this.boneInverses=t.slice(0);else for(console.warn("THREE.Skeleton boneInverses is the wrong length."),this.boneInverses=[],e=0,t=this.bones.length;e<t;e++)this.boneInverses.push(new xe)}function jt(){h.call(this);this.type="Bone"}function Rt(e,t){$.call(this,e,t);this.type="SkinnedMesh";this.bindMode="attached";this.bindMatrix=new xe;this.bindMatrixInverse=new xe;e=this.initBones();e=new At(e);this.bind(e,this.matrixWorld);this.normalizeSkinWeights()}function Lt(e){I.call(this);this.type="LineBasicMaterial";this.color=new w(16777215);this.linewidth=1;this.linejoin=this.linecap="round";this.lights=!1;this.setValues(e)}function It(e,t,r){1===r&&console.error("THREE.Line: parameter THREE.LinePieces no longer supported. Use THREE.LineSegments instead.");h.call(this);this.type="Line";this.geometry=void 0!==e?e:new A;this.material=void 0!==t?t:new Lt({color:16777215*Math.random()})}function Nt(e,t){It.call(this,e,t);this.type="LineSegments"}function kt(e,t){It.call(this,e,t);this.type="LineLoop"}function Dt(e){I.call(this);this.type="PointsMaterial";this.color=new w(16777215);this.map=null;this.size=1;this.sizeAttenuation=!0;this.lights=this.morphTargets=!1;this.setValues(e)}function Bt(e,t){h.call(this);this.type="Points";this.geometry=void 0!==e?e:new A;this.material=void 0!==t?t:new Dt({color:16777215*Math.random()})}function Ft(e,t,r,n,i,o,a,s,u){p.call(this,e,t,r,n,i,o,a,s,u);this.generateMipmaps=!1}function $t(e,t,r,n,i,o,a,s,u,c,h,l){p.call(this,null,o,a,s,u,c,n,i,h,l);this.image={width:t,height:r};this.mipmaps=e;this.generateMipmaps=this.flipY=!1}function zt(e,t,r,n,i,o,a,s,u){p.call(this,e,t,r,n,i,o,a,s,u);this.needsUpdate=!0}function Ut(e,t,r,n,i,o,a,s,u,c){c=void 0!==c?c:1026;if(1026!==c&&1027!==c)throw Error("DepthTexture format must be either THREE.DepthFormat or THREE.DepthStencilFormat");void 0===r&&1026===c&&(r=1012);void 0===r&&1027===c&&(r=1020);p.call(this,null,n,i,o,a,s,c,r,u);this.image={width:e,height:t};this.magFilter=void 0!==a?a:1003;this.minFilter=void 0!==s?s:1003;this.generateMipmaps=this.flipY=!1}function Gt(e){A.call(this);this.type="WireframeGeometry";var t=[],r,n,i,o=[0,0],a={},s=["a","b","c"];if(e&&e.isGeometry){var u=e.faces;var c=0;for(n=u.length;c<n;c++){var h=u[c];for(r=0;3>r;r++){var l=h[s[r]];var p=h[s[(r+1)%3]];o[0]=Math.min(l,p);o[1]=Math.max(l,p);l=o[0]+","+o[1];void 0===a[l]&&(a[l]={index1:o[0],index2:o[1]})}}for(l in a)c=a[l],s=e.vertices[c.index1],t.push(s.x,s.y,s.z),s=e.vertices[c.index2],t.push(s.x,s.y,s.z)}else if(e&&e.isBufferGeometry)if(s=new we,null!==e.index){u=e.attributes.position;h=e.index;var f=e.groups;0===f.length&&(f=[{start:0,count:h.count,materialIndex:0}]);e=0;for(i=f.length;e<i;++e)for(c=f[e],r=c.start,n=c.count,c=r,n=r+n;c<n;c+=3)for(r=0;3>r;r++)l=h.getX(c+r),p=h.getX(c+(r+1)%3),o[0]=Math.min(l,p),o[1]=Math.max(l,p),l=o[0]+","+o[1],void 0===a[l]&&(a[l]={index1:o[0],index2:o[1]});for(l in a)c=a[l],s.fromBufferAttribute(u,c.index1),t.push(s.x,s.y,s.z),s.fromBufferAttribute(u,c.index2),t.push(s.x,s.y,s.z)}else for(u=e.attributes.position,c=0,n=u.count/3;c<n;c++)for(r=0;3>r;r++)a=3*c+r,s.fromBufferAttribute(u,a),t.push(s.x,s.y,s.z),a=3*c+(r+1)%3,s.fromBufferAttribute(u,a),t.push(s.x,s.y,s.z);this.addAttribute("position",new P(t,3))}function Vt(e,t,r){S.call(this);this.type="ParametricGeometry";this.parameters={func:e,slices:t,stacks:r};this.fromBufferGeometry(new Ht(e,t,r));this.mergeVertices()}function Ht(e,t,r){A.call(this);this.type="ParametricBufferGeometry";this.parameters={func:e,slices:t,stacks:r};var n=[],i=[],o=[],a=[],s=new we,u=new we,c=new we,h=new we,l=new we,p,f;3>e.length&&console.error("THREE.ParametricGeometry: Function must now modify a Vector3 as third parameter.");var d=t+1;for(p=0;p<=r;p++){var v=p/r;for(f=0;f<=t;f++){var m=f/t;e(m,v,u);i.push(u.x,u.y,u.z);0<=m-1e-5?(e(m-1e-5,v,c),h.subVectors(u,c)):(e(m+1e-5,v,c),h.subVectors(c,u));0<=v-1e-5?(e(m,v-1e-5,c),l.subVectors(u,c)):(e(m,v+1e-5,c),l.subVectors(c,u));s.crossVectors(h,l).normalize();o.push(s.x,s.y,s.z);a.push(m,v)}}for(p=0;p<r;p++)for(f=0;f<t;f++)e=p*d+f+1,s=(p+1)*d+f+1,u=(p+1)*d+f,n.push(p*d+f,e,u),n.push(e,s,u);this.setIndex(n);this.addAttribute("position",new P(i,3));this.addAttribute("normal",new P(o,3));this.addAttribute("uv",new P(a,2))}function qt(e,t,r,n){S.call(this);this.type="PolyhedronGeometry";this.parameters={vertices:e,indices:t,radius:r,detail:n};this.fromBufferGeometry(new Wt(e,t,r,n));this.mergeVertices()}function Wt(r,v,e,t){function m(e){l.push(e.x,e.y,e.z)}function g(e,t){e*=3;t.x=r[e+0];t.y=r[e+1];t.z=r[e+2]}function h(e,t,r,n){0>n&&1===e.x&&(p[t]=e.x-1);0===r.x&&0===r.z&&(p[t]=n/2/Math.PI+.5)}A.call(this);this.type="PolyhedronBufferGeometry";this.parameters={vertices:r,indices:v,radius:e,detail:t};e=e||1;t=t||0;var l=[],p=[];(function(e){for(var t=new we,r=new we,n=new we,i=0;i<v.length;i+=3){g(v[i+0],t);g(v[i+1],r);g(v[i+2],n);var o,a,s=t,u=r,c=n,h=Math.pow(2,e),l=[];for(a=0;a<=h;a++){l[a]=[];var p=s.clone().lerp(c,a/h),f=u.clone().lerp(c,a/h),d=h-a;for(o=0;o<=d;o++)l[a][o]=0===o&&a===h?p:p.clone().lerp(f,o/d)}for(a=0;a<h;a++)for(o=0;o<2*(h-a)-1;o++)s=Math.floor(o/2),0===o%2?(m(l[a][s+1]),m(l[a+1][s]),m(l[a][s])):(m(l[a][s+1]),m(l[a+1][s+1]),m(l[a+1][s]))}})(t);(function(e){for(var t=new we,r=0;r<l.length;r+=3)t.x=l[r+0],t.y=l[r+1],t.z=l[r+2],t.normalize().multiplyScalar(e),l[r+0]=t.x,l[r+1]=t.y,l[r+2]=t.z})(e);(function(){for(var e=new we,t=0;t<l.length;t+=3)e.x=l[t+0],e.y=l[t+1],e.z=l[t+2],p.push(Math.atan2(e.z,-e.x)/2/Math.PI+.5,1-(Math.atan2(-e.y,Math.sqrt(e.x*e.x+e.z*e.z))/Math.PI+.5));e=new we;t=new we;for(var r=new we,n=new we,i=new H,o=new H,a=new H,s=0,u=0;s<l.length;s+=9,u+=6){e.set(l[s+0],l[s+1],l[s+2]);t.set(l[s+3],l[s+4],l[s+5]);r.set(l[s+6],l[s+7],l[s+8]);i.set(p[u+0],p[u+1]);o.set(p[u+2],p[u+3]);a.set(p[u+4],p[u+5]);n.copy(e).add(t).add(r).divideScalar(3);var c=Math.atan2(n.z,-n.x);h(i,u+0,e,c);h(o,u+2,t,c);h(a,u+4,r,c)}for(e=0;e<p.length;e+=6)t=p[e+0],r=p[e+2],n=p[e+4],i=Math.min(t,r,n),.9<Math.max(t,r,n)&&.1>i&&(.2>t&&(p[e+0]+=1),.2>r&&(p[e+2]+=1),.2>n&&(p[e+4]+=1))})();this.addAttribute("position",new P(l,3));this.addAttribute("normal",new P(l.slice(),3));this.addAttribute("uv",new P(p,2));0===t?this.computeVertexNormals():this.normalizeNormals()}function Xt(e,t){S.call(this);this.type="TetrahedronGeometry";this.parameters={radius:e,detail:t};this.fromBufferGeometry(new Yt(e,t));this.mergeVertices()}function Yt(e,t){Wt.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],e,t);this.type="TetrahedronBufferGeometry";this.parameters={radius:e,detail:t}}function Kt(e,t){S.call(this);this.type="OctahedronGeometry";this.parameters={radius:e,detail:t};this.fromBufferGeometry(new Zt(e,t));this.mergeVertices()}function Zt(e,t){Wt.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],e,t);this.type="OctahedronBufferGeometry";this.parameters={radius:e,detail:t}}function Jt(e,t){S.call(this);this.type="IcosahedronGeometry";this.parameters={radius:e,detail:t};this.fromBufferGeometry(new Qt(e,t));this.mergeVertices()}function Qt(e,t){var r=(1+Math.sqrt(5))/2;Wt.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],e,t);this.type="IcosahedronBufferGeometry";this.parameters={radius:e,detail:t}}function er(e,t){S.call(this);this.type="DodecahedronGeometry";this.parameters={radius:e,detail:t};this.fromBufferGeometry(new tr(e,t));this.mergeVertices()}function tr(e,t){var r=(1+Math.sqrt(5))/2,n=1/r;Wt.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],e,t);this.type="DodecahedronBufferGeometry";this.parameters={radius:e,detail:t}}function rr(e,t,r,n,i,o){S.call(this);this.type="TubeGeometry";this.parameters={path:e,tubularSegments:t,radius:r,radialSegments:n,closed:i};void 0!==o&&console.warn("THREE.TubeGeometry: taper has been removed.");e=new nr(e,t,r,n,i);this.tangents=e.tangents;this.normals=e.normals;this.binormals=e.binormals;this.fromBufferGeometry(e);this.mergeVertices()}function nr(i,o,a,s,e){function t(e){l=i.getPointAt(e/o,l);var t=u.normals[e];e=u.binormals[e];for(p=0;p<=s;p++){var r=p/s*Math.PI*2,n=Math.sin(r);r=-Math.cos(r);h.x=r*t.x+n*e.x;h.y=r*t.y+n*e.y;h.z=r*t.z+n*e.z;h.normalize();d.push(h.x,h.y,h.z);c.x=l.x+a*h.x;c.y=l.y+a*h.y;c.z=l.z+a*h.z;f.push(c.x,c.y,c.z)}}A.call(this);this.type="TubeBufferGeometry";this.parameters={path:i,tubularSegments:o,radius:a,radialSegments:s,closed:e};o=o||64;a=a||1;s=s||8;e=e||!1;var u=i.computeFrenetFrames(o,e);this.tangents=u.tangents;this.normals=u.normals;this.binormals=u.binormals;var c=new we,h=new we,r=new H,l=new we,n,p,f=[],d=[],v=[],m=[];for(n=0;n<o;n++)t(n);t(!1===e?o:0);for(n=0;n<=o;n++)for(p=0;p<=s;p++)r.x=n/o,r.y=p/s,v.push(r.x,r.y);(function(){for(p=1;p<=o;p++)for(n=1;n<=s;n++){var e=(s+1)*p+(n-1),t=(s+1)*p+n,r=(s+1)*(p-1)+n;m.push((s+1)*(p-1)+(n-1),e,r);m.push(e,t,r)}})();this.setIndex(m);this.addAttribute("position",new P(f,3));this.addAttribute("normal",new P(d,3));this.addAttribute("uv",new P(v,2))}function ir(e,t,r,n,i,o,a){S.call(this);this.type="TorusKnotGeometry";this.parameters={radius:e,tube:t,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 or(e,t,r,n,i,o));this.mergeVertices()}function or(e,t,r,n,i,o){function a(e,t,r,n,i){var o=Math.sin(e);t=r/t*e;r=Math.cos(t);i.x=n*(2+r)*.5*Math.cos(e);i.y=n*(2+r)*o*.5;i.z=n*Math.sin(t)*.5}A.call(this);this.type="TorusKnotBufferGeometry";this.parameters={radius:e,tube:t,tubularSegments:r,radialSegments:n,p:i,q:o};e=e||1;t=t||.4;r=Math.floor(r)||64;n=Math.floor(n)||8;i=i||2;o=o||3;var s=[],u=[],c=[],h=[],l,p=new we,f=new we,d=new we,v=new we,m=new we,g=new we,y=new we;for(l=0;l<=r;++l){var _=l/r*i*Math.PI*2;a(_,i,o,e,d);a(_+.01,i,o,e,v);g.subVectors(v,d);y.addVectors(v,d);m.crossVectors(g,y);y.crossVectors(m,g);m.normalize();y.normalize();for(_=0;_<=n;++_){var b=_/n*Math.PI*2,x=-t*Math.cos(b);b=t*Math.sin(b);p.x=d.x+(x*y.x+b*m.x);p.y=d.y+(x*y.y+b*m.y);p.z=d.z+(x*y.z+b*m.z);u.push(p.x,p.y,p.z);f.subVectors(p,d).normalize();c.push(f.x,f.y,f.z);h.push(l/r);h.push(_/n)}}for(_=1;_<=r;_++)for(l=1;l<=n;l++)e=(n+1)*_+(l-1),t=(n+1)*_+l,i=(n+1)*(_-1)+l,s.push((n+1)*(_-1)+(l-1),e,i),s.push(e,t,i);this.setIndex(s);this.addAttribute("position",new P(u,3));this.addAttribute("normal",new P(c,3));this.addAttribute("uv",new P(h,2))}function ar(e,t,r,n,i){S.call(this);this.type="TorusGeometry";this.parameters={radius:e,tube:t,radialSegments:r,tubularSegments:n,arc:i};this.fromBufferGeometry(new sr(e,t,r,n,i));this.mergeVertices()}function sr(e,t,r,n,i){A.call(this);this.type="TorusBufferGeometry";this.parameters={radius:e,tube:t,radialSegments:r,tubularSegments:n,arc:i};e=e||1;t=t||.4;r=Math.floor(r)||8;n=Math.floor(n)||6;i=i||2*Math.PI;var o=[],a=[],s=[],u=[],c=new we,h=new we,l=new we,p,f;for(p=0;p<=r;p++)for(f=0;f<=n;f++){var d=f/n*i,v=p/r*Math.PI*2;h.x=(e+t*Math.cos(v))*Math.cos(d);h.y=(e+t*Math.cos(v))*Math.sin(d);h.z=t*Math.sin(v);a.push(h.x,h.y,h.z);c.x=e*Math.cos(d);c.y=e*Math.sin(d);l.subVectors(h,c).normalize();s.push(l.x,l.y,l.z);u.push(f/n);u.push(p/r)}for(p=1;p<=r;p++)for(f=1;f<=n;f++)e=(n+1)*(p-1)+f-1,t=(n+1)*(p-1)+f,i=(n+1)*p+f,o.push((n+1)*p+f-1,e,i),o.push(e,t,i);this.setIndex(o);this.addAttribute("position",new P(a,3));this.addAttribute("normal",new P(s,3));this.addAttribute("uv",new P(u,2))}function ur(e,t,r,n,i){for(var o,a=0,s=t,u=r-n;s<r;s+=n)a+=(e[u]-e[s])*(e[s+1]+e[u+1]),u=s;if(i===0<a)for(i=t;i<r;i+=n)o=xr(i,e[i],e[i+1],o);else for(i=r-n;i>=t;i-=n)o=xr(i,e[i],e[i+1],o);o&&gr(o,o.next)&&(wr(o),o=o.next);return o}function cr(e,t){if(!e)return e;t||(t=e);do{var r=!1;if(e.steiner||!gr(e,e.next)&&0!==mr(e.prev,e,e.next))e=e.next;else{wr(e);e=t=e.prev;if(e===e.next)break;r=!0}}while(r||e!==t);return t}function hr(e,t,r,n,i,o,a){if(e){if(!a&&o){var s=e,u=s;do{null===u.z&&(u.z=fr(u.x,u.y,n,i,o)),u.prevZ=u.prev,u=u.nextZ=u.next}while(u!==s);u.prevZ.nextZ=null;u.prevZ=null;s=u;var c,h,l,p,f=1;do{u=s;var d=s=null;for(h=0;u;){h++;var v=u;for(c=l=0;c<f&&(l++,v=v.nextZ,v);c++);for(p=f;0<l||0<p&&v;)0!==l&&(0===p||!v||u.z<=v.z)?(c=u,u=u.nextZ,l--):(c=v,v=v.nextZ,p--),d?d.nextZ=c:s=c,c.prevZ=d,d=c;u=v}d.nextZ=null;f*=2}while(1<h)}for(s=e;e.prev!==e.next;){u=e.prev;v=e.next;if(o)e:{d=e;p=n;var m=i,g=o;h=d.prev;l=d;f=d.next;if(0<=mr(h,l,f))d=!1;else{var y=h.x>l.x?h.x>f.x?h.x:f.x:l.x>f.x?l.x:f.x,_=h.y>l.y?h.y>f.y?h.y:f.y:l.y>f.y?l.y:f.y;c=fr(h.x<l.x?h.x<f.x?h.x:f.x:l.x<f.x?l.x:f.x,h.y<l.y?h.y<f.y?h.y:f.y:l.y<f.y?l.y:f.y,p,m,g);p=fr(y,_,p,m,g);for(m=d.nextZ;m&&m.z<=p;){if(m!==d.prev&&m!==d.next&&vr(h.x,h.y,l.x,l.y,f.x,f.y,m.x,m.y)&&0<=mr(m.prev,m,m.next)){d=!1;break e}m=m.nextZ}for(m=d.prevZ;m&&m.z>=c;){if(m!==d.prev&&m!==d.next&&vr(h.x,h.y,l.x,l.y,f.x,f.y,m.x,m.y)&&0<=mr(m.prev,m,m.next)){d=!1;break e}m=m.prevZ}d=!0}}else e:if(d=e,h=d.prev,l=d,f=d.next,0<=mr(h,l,f))d=!1;else{for(c=d.next.next;c!==d.prev;){if(vr(h.x,h.y,l.x,l.y,f.x,f.y,c.x,c.y)&&0<=mr(c.prev,c,c.next)){d=!1;break e}c=c.next}d=!0}if(d)t.push(u.i/r),t.push(e.i/r),t.push(v.i/r),wr(e),s=e=v.next;else if(e=v,e===s){if(!a)hr(cr(e),t,r,n,i,o,1);else if(1===a){a=t;s=r;u=e;do{v=u.prev,d=u.next.next,!gr(v,d)&&yr(v,u,u.next,d)&&_r(v,d)&&_r(d,v)&&(a.push(v.i/s),a.push(u.i/s),a.push(d.i/s),wr(u),wr(u.next),u=e=d),u=u.next}while(u!==e);e=u;hr(e,t,r,n,i,o,2)}else if(2===a)e:{a=e;do{for(s=a.next.next;s!==a.prev;){if(u=a.i!==s.i){u=a;v=s;if(d=u.next.i!==v.i&&u.prev.i!==v.i){t:{d=u;do{if(d.i!==u.i&&d.next.i!==u.i&&d.i!==v.i&&d.next.i!==v.i&&yr(d,d.next,u,v)){d=!0;break t}d=d.next}while(d!==u);d=!1}d=!d}if(d=d&&_r(u,v)&&_r(v,u)){d=u;h=!1;l=(u.x+v.x)/2;v=(u.y+v.y)/2;do{d.y>v!==d.next.y>v&&d.next.y!==d.y&&l<(d.next.x-d.x)*(v-d.y)/(d.next.y-d.y)+d.x&&(h=!h),d=d.next}while(d!==u);d=h}u=d}if(u){e=br(a,s);a=cr(a,a.next);e=cr(e,e.next);hr(a,t,r,n,i,o);hr(e,t,r,n,i,o);break e}s=s.next}a=a.next}while(a!==e)}break}}}}function lr(e,t){return e.x-t.x}function pr(e,t){var r=t,n=e.x,i=e.y,o=-Infinity;do{if(i<=r.y&&i>=r.next.y&&r.next.y!==r.y){var a=r.x+(i-r.y)*(r.next.x-r.x)/(r.next.y-r.y);if(a<=n&&a>o){o=a;if(a===n){if(i===r.y)return r;if(i===r.next.y)return r.next}var s=r.x<r.next.x?r:r.next}}r=r.next}while(r!==t);if(!s)return null;if(n===o)return s.prev;t=s;a=s.x;var u=s.y,c=Infinity;for(r=s.next;r!==t;){if(n>=r.x&&r.x>=a&&n!==r.x&&vr(i<u?n:o,i,a,u,i<u?o:n,i,r.x,r.y)){var h=Math.abs(i-r.y)/(n-r.x);(h<c||h===c&&r.x>s.x)&&_r(r,e)&&(s=r,c=h)}r=r.next}return s}function fr(e,t,r,n,i){e=32767*(e-r)*i;t=32767*(t-n)*i;e=(e|e<<8)&16711935;e=(e|e<<4)&252645135;e=(e|e<<2)&858993459;t=(t|t<<8)&16711935;t=(t|t<<4)&252645135;t=(t|t<<2)&858993459;return(e|e<<1)&1431655765|((t|t<<1)&1431655765)<<1}function dr(e){var t=e,r=e;do{t.x<r.x&&(r=t),t=t.next}while(t!==e);return r}function vr(e,t,r,n,i,o,a,s){return 0<=(i-a)*(t-s)-(e-a)*(o-s)&&0<=(e-a)*(n-s)-(r-a)*(t-s)&&0<=(r-a)*(o-s)-(i-a)*(n-s)}function mr(e,t,r){return(t.y-e.y)*(r.x-t.x)-(t.x-e.x)*(r.y-t.y)}function gr(e,t){return e.x===t.x&&e.y===t.y}function yr(e,t,r,n){return gr(e,t)&&gr(r,n)||gr(e,n)&&gr(r,t)?!0:0<mr(e,t,r)!==0<mr(e,t,n)&&0<mr(r,n,e)!==0<mr(r,n,t)}function _r(e,t){return 0>mr(e.prev,e,e.next)?0<=mr(e,t,e.next)&&0<=mr(e,e.prev,t):0>mr(e,t,e.prev)||0>mr(e,e.next,t)}function br(e,t){var r=new Sr(e.i,e.x,e.y),n=new Sr(t.i,t.x,t.y),i=e.next,o=t.prev;e.next=t;t.prev=e;r.next=i;i.prev=r;n.next=r;r.prev=n;o.next=n;n.prev=o;return n}function xr(e,t,r,n){e=new Sr(e,t,r);n?(e.next=n.next,e.prev=n,n.next.prev=e,n.next=e):(e.prev=e,e.next=e);return e}function wr(e){e.next.prev=e.prev;e.prev.next=e.next;e.prevZ&&(e.prevZ.nextZ=e.nextZ);e.nextZ&&(e.nextZ.prevZ=e.prevZ)}function Sr(e,t,r){this.i=e;this.x=t;this.y=r;this.nextZ=this.prevZ=this.z=this.next=this.prev=null;this.steiner=!1}function Mr(e){var t=e.length;2<t&&e[t-1].equals(e[0])&&e.pop()}function Er(e,t){for(var r=0;r<t.length;r++)e.push(t[r].x),e.push(t[r].y)}function Cr(e,t){S.call(this);this.type="ExtrudeGeometry";this.parameters={shapes:e,options:t};this.fromBufferGeometry(new Tr(e,t));this.mergeVertices()}function Tr(e,z){function t(e){function t(e,t,r){t||console.error("THREE.ExtrudeGeometry: vec does not exist");return t.clone().multiplyScalar(r).add(e)}function r(e,t,r){var n=e.x-t.x;var i=e.y-t.y;var o=r.x-e.x;var a=r.y-e.y,s=n*n+i*i;if(Math.abs(n*a-i*o)>Number.EPSILON){var u=Math.sqrt(s),c=Math.sqrt(o*o+a*a);s=t.x-i/u;t=t.y+n/u;a=((r.x-a/c-s)*a-(r.y+o/c-t)*o)/(n*a-i*o);o=s+n*a-e.x;n=t+i*a-e.y;i=o*o+n*n;if(2>=i)return new H(o,n);i=Math.sqrt(i/2)}else e=!1,n>Number.EPSILON?o>Number.EPSILON&&(e=!0):n<-Number.EPSILON?o<-Number.EPSILON&&(e=!0):Math.sign(i)===Math.sign(a)&&(e=!0),e?(o=-i,i=Math.sqrt(s)):(o=n,n=i,i=Math.sqrt(s/2));return new H(o/i,n/i)}function n(e,t){for(I=e.length;0<=--I;){var r=I;var n=I-1;0>n&&(n=e.length-1);var i,o=p+2*v;for(i=0;i<o;i++){var a=j*i,s=j*(i+1),u=t+n+a,c=t+n+s;s=t+r+s;h(t+r+a);h(u);h(s);h(u);h(c);h(s);a=G.length/3;a=g.generateSideWallUV(U,G,a-6,a-3,a-2,a-1);l(a[0]);l(a[1]);l(a[3]);l(a[1]);l(a[2]);l(a[3])}}}function i(e,t,r){a.push(e);a.push(t);a.push(r)}function o(e,t,r){h(e);h(t);h(r);e=G.length/3;e=g.generateTopUV(U,G,e-3,e-2,e-1);l(e[0]);l(e[1]);l(e[2])}function h(e){G.push(a[3*e]);G.push(a[3*e+1]);G.push(a[3*e+2])}function l(e){V.push(e.x);V.push(e.y)}var a=[],s=void 0!==z.curveSegments?z.curveSegments:12,p=void 0!==z.steps?z.steps:1,u=void 0!==z.depth?z.depth:100,c=void 0!==z.bevelEnabled?z.bevelEnabled:!0,f=void 0!==z.bevelThickness?z.bevelThickness:6,d=void 0!==z.bevelSize?z.bevelSize:f-2,v=void 0!==z.bevelSegments?z.bevelSegments:3,m=z.extrudePath,g=void 0!==z.UVGenerator?z.UVGenerator:Co;void 0!==z.amount&&(console.warn("THREE.ExtrudeBufferGeometry: amount has been renamed to depth."),u=z.amount);var y=!1;if(m){var _=m.getSpacedPoints(p);y=!0;c=!1;var b=m.computeFrenetFrames(p,!1);var x=new we;var w=new we;var S=new we}c||(d=f=v=0);var M;s=e.extractPoints(s);e=s.shape;var E=s.holes;if(!Eo.isClockWise(e)){e=e.reverse();var C=0;for(M=E.length;C<M;C++){var T=E[C];Eo.isClockWise(T)&&(E[C]=T.reverse())}}var O=Eo.triangulateShape(e,E),P=e;C=0;for(M=E.length;C<M;C++)T=E[C],e=e.concat(T);var A,j=e.length,R,L=O.length;s=[];var I=0;var N=P.length;var k=N-1;for(A=I+1;I<N;I++,k++,A++)k===N&&(k=0),A===N&&(A=0),s[I]=r(P[I],P[k],P[A]);m=[];var D=s.concat();C=0;for(M=E.length;C<M;C++){T=E[C];var B=[];I=0;N=T.length;k=N-1;for(A=I+1;I<N;I++,k++,A++)k===N&&(k=0),A===N&&(A=0),B[I]=r(T[I],T[k],T[A]);m.push(B);D=D.concat(B)}for(k=0;k<v;k++){N=k/v;var F=f*Math.cos(N*Math.PI/2);A=d*Math.sin(N*Math.PI/2);I=0;for(N=P.length;I<N;I++){var $=t(P[I],s[I],A);i($.x,$.y,-F)}C=0;for(M=E.length;C<M;C++)for(T=E[C],B=m[C],I=0,N=T.length;I<N;I++)$=t(T[I],B[I],A),i($.x,$.y,-F)}A=d;for(I=0;I<j;I++)$=c?t(e[I],D[I],A):e[I],y?(w.copy(b.normals[0]).multiplyScalar($.x),x.copy(b.binormals[0]).multiplyScalar($.y),S.copy(_[0]).add(w).add(x),i(S.x,S.y,S.z)):i($.x,$.y,0);for(N=1;N<=p;N++)for(I=0;I<j;I++)$=c?t(e[I],D[I],A):e[I],y?(w.copy(b.normals[N]).multiplyScalar($.x),x.copy(b.binormals[N]).multiplyScalar($.y),S.copy(_[N]).add(w).add(x),i(S.x,S.y,S.z)):i($.x,$.y,u/p*N);for(k=v-1;0<=k;k--){N=k/v;F=f*Math.cos(N*Math.PI/2);A=d*Math.sin(N*Math.PI/2);I=0;for(N=P.length;I<N;I++)$=t(P[I],s[I],A),i($.x,$.y,u+F);C=0;for(M=E.length;C<M;C++)for(T=E[C],B=m[C],I=0,N=T.length;I<N;I++)$=t(T[I],B[I],A),y?i($.x,$.y+_[p-1].y,_[p-1].x+F):i($.x,$.y,u+F)}(function(){var e=G.length/3;if(c){var t=0*j;for(I=0;I<L;I++)R=O[I],o(R[2]+t,R[1]+t,R[0]+t);t=j*(p+2*v);for(I=0;I<L;I++)R=O[I],o(R[0]+t,R[1]+t,R[2]+t)}else{for(I=0;I<L;I++)R=O[I],o(R[2],R[1],R[0]);for(I=0;I<L;I++)R=O[I],o(R[0]+j*p,R[1]+j*p,R[2]+j*p)}U.addGroup(e,G.length/3-e,0)})();(function(){var e=G.length/3,t=0;n(P,t);t+=P.length;C=0;for(M=E.length;C<M;C++)T=E[C],n(T,t),t+=T.length;U.addGroup(e,G.length/3-e,1)})()}A.call(this);this.type="ExtrudeBufferGeometry";this.parameters={shapes:e,options:z};e=Array.isArray(e)?e:[e];for(var U=this,G=[],V=[],r=0,n=e.length;r<n;r++)t(e[r]);this.addAttribute("position",new P(G,3));this.addAttribute("uv",new P(V,2));this.computeVertexNormals()}function Or(e,t,r){r.shapes=[];if(Array.isArray(e))for(var n=0,i=e.length;n<i;n++)r.shapes.push(e[n].uuid);else r.shapes.push(e.uuid);void 0!==t.extrudePath&&(r.options.extrudePath=t.extrudePath.toJSON());return r}function Pr(e,t){S.call(this);this.type="TextGeometry";this.parameters={text:e,parameters:t};this.fromBufferGeometry(new Ar(e,t));this.mergeVertices()}function Ar(e,t){t=t||{};var r=t.font;if(!r||!r.isFont)return console.error("THREE.TextGeometry: font parameter is not an instance of THREE.Font."),new S;e=r.generateShapes(e,t.size);t.depth=void 0!==t.height?t.height:50;void 0===t.bevelThickness&&(t.bevelThickness=10);void 0===t.bevelSize&&(t.bevelSize=8);void 0===t.bevelEnabled&&(t.bevelEnabled=!1);Tr.call(this,e,t);this.type="TextBufferGeometry"}function jr(e,t,r,n,i,o,a){S.call(this);this.type="SphereGeometry";this.parameters={radius:e,widthSegments:t,heightSegments:r,phiStart:n,phiLength:i,thetaStart:o,thetaLength:a};this.fromBufferGeometry(new Rr(e,t,r,n,i,o,a));this.mergeVertices()}function Rr(e,t,r,n,i,o,a){A.call(this);this.type="SphereBufferGeometry";this.parameters={radius:e,widthSegments:t,heightSegments:r,phiStart:n,phiLength:i,thetaStart:o,thetaLength:a};e=e||1;t=Math.max(3,Math.floor(t)||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;var s=o+a,u,c,h=0,l=[],p=new we,f=new we,d=[],v=[],m=[],g=[];for(c=0;c<=r;c++){var y=[],_=c/r;for(u=0;u<=t;u++){var b=u/t;p.x=-e*Math.cos(n+b*i)*Math.sin(o+_*a);p.y=e*Math.cos(o+_*a);p.z=e*Math.sin(n+b*i)*Math.sin(o+_*a);v.push(p.x,p.y,p.z);f.set(p.x,p.y,p.z).normalize();m.push(f.x,f.y,f.z);g.push(b,1-_);y.push(h++)}l.push(y)}for(c=0;c<r;c++)for(u=0;u<t;u++)e=l[c][u+1],n=l[c][u],i=l[c+1][u],a=l[c+1][u+1],(0!==c||0<o)&&d.push(e,n,a),(c!==r-1||s<Math.PI)&&d.push(n,i,a);this.setIndex(d);this.addAttribute("position",new P(v,3));this.addAttribute("normal",new P(m,3));this.addAttribute("uv",new P(g,2))}function Lr(e,t,r,n,i,o){S.call(this);this.type="RingGeometry";this.parameters={innerRadius:e,outerRadius:t,thetaSegments:r,phiSegments:n,thetaStart:i,thetaLength:o};this.fromBufferGeometry(new Ir(e,t,r,n,i,o));this.mergeVertices()}function Ir(e,t,r,n,i,o){A.call(this);this.type="RingBufferGeometry";this.parameters={innerRadius:e,outerRadius:t,thetaSegments:r,phiSegments:n,thetaStart:i,thetaLength:o};e=e||.5;t=t||1;i=void 0!==i?i:0;o=void 0!==o?o:2*Math.PI;r=void 0!==r?Math.max(3,r):8;n=void 0!==n?Math.max(1,n):1;var a=[],s=[],u=[],c=[],h=e,l=(t-e)/n,p=new we,f=new H,d,v;for(d=0;d<=n;d++){for(v=0;v<=r;v++)e=i+v/r*o,p.x=h*Math.cos(e),p.y=h*Math.sin(e),s.push(p.x,p.y,p.z),u.push(0,0,1),f.x=(p.x/t+1)/2,f.y=(p.y/t+1)/2,c.push(f.x,f.y);h+=l}for(d=0;d<n;d++)for(t=d*(r+1),v=0;v<r;v++)e=v+t,i=e+r+1,o=e+r+2,h=e+1,a.push(e,i,h),a.push(i,o,h);this.setIndex(a);this.addAttribute("position",new P(s,3));this.addAttribute("normal",new P(u,3));this.addAttribute("uv",new P(c,2))}function Nr(e,t,r,n){S.call(this);this.type="LatheGeometry";this.parameters={points:e,segments:t,phiStart:r,phiLength:n};this.fromBufferGeometry(new kr(e,t,r,n));this.mergeVertices()}function kr(e,t,r,n){A.call(this);this.type="LatheBufferGeometry";this.parameters={points:e,segments:t,phiStart:r,phiLength:n};t=Math.floor(t)||12;r=r||0;n=n||2*Math.PI;n=eo.clamp(n,0,2*Math.PI);var i=[],o=[],a=[],s=1/t,u=new we,c=new H,h;for(h=0;h<=t;h++){var l=r+h*s*n;var p=Math.sin(l),f=Math.cos(l);for(l=0;l<=e.length-1;l++)u.x=e[l].x*p,u.y=e[l].y,u.z=e[l].x*f,o.push(u.x,u.y,u.z),c.x=h/t,c.y=l/(e.length-1),a.push(c.x,c.y)}for(h=0;h<t;h++)for(l=0;l<e.length-1;l++)r=l+h*e.length,s=r+e.length,u=r+e.length+1,c=r+1,i.push(r,s,c),i.push(s,u,c);this.setIndex(i);this.addAttribute("position",new P(o,3));this.addAttribute("uv",new P(a,2));this.computeVertexNormals();if(n===2*Math.PI)for(n=this.attributes.normal.array,i=new we,o=new we,a=new we,r=t*e.length*3,l=h=0;h<e.length;h++,l+=3)i.x=n[l+0],i.y=n[l+1],i.z=n[l+2],o.x=n[r+l+0],o.y=n[r+l+1],o.z=n[r+l+2],a.addVectors(i,o).normalize(),n[l+0]=n[r+l+0]=a.x,n[l+1]=n[r+l+1]=a.y,n[l+2]=n[r+l+2]=a.z}function Dr(e,t){S.call(this);this.type="ShapeGeometry";"object"===typeof t&&(console.warn("THREE.ShapeGeometry: Options parameter has been removed."),t=t.curveSegments);this.parameters={shapes:e,curveSegments:t};this.fromBufferGeometry(new Br(e,t));this.mergeVertices()}function Br(e,s){function t(e){var t,r=c.length/3;e=e.extractPoints(s);var n=e.shape,i=e.holes;if(!1===Eo.isClockWise(n))for(n=n.reverse(),e=0,t=i.length;e<t;e++){var o=i[e];!0===Eo.isClockWise(o)&&(i[e]=o.reverse())}var a=Eo.triangulateShape(n,i);e=0;for(t=i.length;e<t;e++)o=i[e],n=n.concat(o);e=0;for(t=n.length;e<t;e++)o=n[e],c.push(o.x,o.y,0),h.push(0,0,1),l.push(o.x,o.y);e=0;for(t=a.length;e<t;e++)n=a[e],u.push(n[0]+r,n[1]+r,n[2]+r),p+=3}A.call(this);this.type="ShapeBufferGeometry";this.parameters={shapes:e,curveSegments:s};s=s||12;var u=[],c=[],h=[],l=[],r=0,p=0;if(!1===Array.isArray(e))t(e);else for(var n=0;n<e.length;n++)t(e[n]),this.addGroup(r,p,n),r+=p,p=0;this.setIndex(u);this.addAttribute("position",new P(c,3));this.addAttribute("normal",new P(h,3));this.addAttribute("uv",new P(l,2))}function Fr(e,t){t.shapes=[];if(Array.isArray(e))for(var r=0,n=e.length;r<n;r++)t.shapes.push(e[r].uuid);else t.shapes.push(e.uuid);return t}function $r(e,t){A.call(this);this.type="EdgesGeometry";this.parameters={thresholdAngle:t};var r=[];t=Math.cos(eo.DEG2RAD*(void 0!==t?t:1));var n=[0,0],i={},o=["a","b","c"];if(e.isBufferGeometry){var a=new S;a.fromBufferGeometry(e)}else a=e.clone();a.mergeVertices();a.computeFaceNormals();e=a.vertices;a=a.faces;for(var s=0,u=a.length;s<u;s++)for(var c=a[s],h=0;3>h;h++){var l=c[o[h]];var p=c[o[(h+1)%3]];n[0]=Math.min(l,p);n[1]=Math.max(l,p);l=n[0]+","+n[1];void 0===i[l]?i[l]={index1:n[0],index2:n[1],face1:s,face2:void 0}:i[l].face2=s}for(l in i)if(n=i[l],void 0===n.face2||a[n.face1].normal.dot(a[n.face2].normal)<=t)o=e[n.index1],r.push(o.x,o.y,o.z),o=e[n.index2],r.push(o.x,o.y,o.z);this.addAttribute("position",new P(r,3))}function zr(e,t,r,n,i,o,a,s){S.call(this);this.type="CylinderGeometry";this.parameters={radiusTop:e,radiusBottom:t,height:r,radialSegments:n,heightSegments:i,openEnded:o,thetaStart:a,thetaLength:s};this.fromBufferGeometry(new Ur(e,t,r,n,i,o,a,s));this.mergeVertices()}function Ur(p,f,d,v,m,e,g,y){function t(e){var t,r=new H,n=new we,i=0,o=!0===e?p:f,a=!0===e?1:-1;var s=M;for(t=1;t<=v;t++)x.push(0,C*a,0),w.push(0,a,0),S.push(.5,.5),M++;var u=M;for(t=0;t<=v;t++){var c=t/v*y+g,h=Math.cos(c);c=Math.sin(c);n.x=o*c;n.y=C*a;n.z=o*h;x.push(n.x,n.y,n.z);w.push(0,a,0);r.x=.5*h+.5;r.y=.5*c*a+.5;S.push(r.x,r.y);M++}for(t=0;t<v;t++)r=s+t,n=u+t,!0===e?b.push(n,n+1,r):b.push(n+1,n,r),i+=3;_.addGroup(T,i,!0===e?1:2);T+=i}A.call(this);this.type="CylinderBufferGeometry";this.parameters={radiusTop:p,radiusBottom:f,height:d,radialSegments:v,heightSegments:m,openEnded:e,thetaStart:g,thetaLength:y};var _=this;p=void 0!==p?p:1;f=void 0!==f?f:1;d=d||1;v=Math.floor(v)||8;m=Math.floor(m)||1;e=void 0!==e?e:!1;g=void 0!==g?g:0;y=void 0!==y?y:2*Math.PI;var b=[],x=[],w=[],S=[],M=0,E=[],C=d/2,T=0;(function(){var e,t,r=new we,n=new we,i=0,o=(f-p)/d;for(t=0;t<=m;t++){var a=[],s=t/m,u=s*(f-p)+p;for(e=0;e<=v;e++){var c=e/v,h=c*y+g,l=Math.sin(h);h=Math.cos(h);n.x=u*l;n.y=-s*d+C;n.z=u*h;x.push(n.x,n.y,n.z);r.set(l,o,h).normalize();w.push(r.x,r.y,r.z);S.push(c,1-s);a.push(M++)}E.push(a)}for(e=0;e<v;e++)for(t=0;t<m;t++)r=E[t+1][e],n=E[t+1][e+1],o=E[t][e+1],b.push(E[t][e],r,o),b.push(r,n,o),i+=6;_.addGroup(T,i,0);T+=i})();!1===e&&(0<p&&t(!0),0<f&&t(!1));this.setIndex(b);this.addAttribute("position",new P(x,3));this.addAttribute("normal",new P(w,3));this.addAttribute("uv",new P(S,2))}function Gr(e,t,r,n,i,o,a){zr.call(this,0,e,t,r,n,i,o,a);this.type="ConeGeometry";this.parameters={radius:e,height:t,radialSegments:r,heightSegments:n,openEnded:i,thetaStart:o,thetaLength:a}}function Vr(e,t,r,n,i,o,a){Ur.call(this,0,e,t,r,n,i,o,a);this.type="ConeBufferGeometry";this.parameters={radius:e,height:t,radialSegments:r,heightSegments:n,openEnded:i,thetaStart:o,thetaLength:a}}function Hr(e,t,r,n){S.call(this);this.type="CircleGeometry";this.parameters={radius:e,segments:t,thetaStart:r,thetaLength:n};this.fromBufferGeometry(new qr(e,t,r,n));this.mergeVertices()}function qr(e,t,r,n){A.call(this);this.type="CircleBufferGeometry";this.parameters={radius:e,segments:t,thetaStart:r,thetaLength:n};e=e||1;t=void 0!==t?Math.max(3,t):8;r=void 0!==r?r:0;n=void 0!==n?n:2*Math.PI;var i=[],o=[],a=[],s=[],u,c=new we,h=new H;o.push(0,0,0);a.push(0,0,1);s.push(.5,.5);var l=0;for(u=3;l<=t;l++,u+=3){var p=r+l/t*n;c.x=e*Math.cos(p);c.y=e*Math.sin(p);o.push(c.x,c.y,c.z);a.push(0,0,1);h.x=(o[u]/e+1)/2;h.y=(o[u+1]/e+1)/2;s.push(h.x,h.y)}for(u=1;u<=t;u++)i.push(u,u+1,0);this.setIndex(i);this.addAttribute("position",new P(o,3));this.addAttribute("normal",new P(a,3));this.addAttribute("uv",new P(s,2))}function Wr(e){I.call(this);this.type="ShadowMaterial";this.color=new w(0);this.transparent=!0;this.setValues(e)}function Xr(e){k.call(this,e);this.type="RawShaderMaterial"}function Yr(e){I.call(this);this.defines={STANDARD:""};this.type="MeshStandardMaterial";this.color=new w(16777215);this.metalness=this.roughness=.5;this.lightMap=this.map=null;this.lightMapIntensity=1;this.aoMap=null;this.aoMapIntensity=1;this.emissive=new w(0);this.emissiveIntensity=1;this.bumpMap=this.emissiveMap=null;this.bumpScale=1;this.normalMap=null;this.normalMapType=0;this.normalScale=new H(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(e)}function Kr(e){Yr.call(this);this.defines={PHYSICAL:""};this.type="MeshPhysicalMaterial";this.reflectivity=.5;this.clearCoatRoughness=this.clearCoat=0;this.setValues(e)}function Zr(e){I.call(this);this.type="MeshPhongMaterial";this.color=new w(16777215);this.specular=new w(1118481);this.shininess=30;this.lightMap=this.map=null;this.lightMapIntensity=1;this.aoMap=null;this.aoMapIntensity=1;this.emissive=new w(0);this.emissiveIntensity=1;this.bumpMap=this.emissiveMap=null;this.bumpScale=1;this.normalMap=null;this.normalMapType=0;this.normalScale=new H(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(e)}function Jr(e){Zr.call(this);this.defines={TOON:""};this.type="MeshToonMaterial";this.gradientMap=null;this.setValues(e)}function Qr(e){I.call(this);this.type="MeshNormalMaterial";this.bumpMap=null;this.bumpScale=1;this.normalMap=null;this.normalMapType=0;this.normalScale=new H(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(e)}function en(e){I.call(this);this.type="MeshLambertMaterial";this.color=new w(16777215);this.lightMap=this.map=null;this.lightMapIntensity=1;this.aoMap=null;this.aoMapIntensity=1;this.emissive=new w(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(e)}function tn(e){Lt.call(this);this.type="LineDashedMaterial";this.scale=1;this.dashSize=3;this.gapSize=1;this.setValues(e)}function rn(e,t,r){var n=this,i=!1,o=0,a=0,s=void 0;this.onStart=void 0;this.onLoad=e;this.onProgress=t;this.onError=r;this.itemStart=function(e){a++;if(!1===i&&void 0!==n.onStart)n.onStart(e,o,a);i=!0};this.itemEnd=function(e){o++;if(void 0!==n.onProgress)n.onProgress(e,o,a);if(o===a&&(i=!1,void 0!==n.onLoad))n.onLoad()};this.itemError=function(e){if(void 0!==n.onError)n.onError(e)};this.resolveURL=function(e){return s?s(e):e};this.setURLModifier=function(e){s=e;return this}}function nn(e){this.manager=void 0!==e?e:Ao}function on(e){this.manager=void 0!==e?e:Ao;this._parser=null}function an(e){this.manager=void 0!==e?e:Ao;this._parser=null}function sn(e){this.manager=void 0!==e?e:Ao}function un(e){this.manager=void 0!==e?e:Ao}function cn(e){this.manager=void 0!==e?e:Ao}function hn(){this.type="Curve";this.arcLengthDivisions=200}function ln(e,t,r,n,i,o,a,s){hn.call(this);this.type="EllipseCurve";this.aX=e||0;this.aY=t||0;this.xRadius=r||1;this.yRadius=n||1;this.aStartAngle=i||0;this.aEndAngle=o||2*Math.PI;this.aClockwise=a||!1;this.aRotation=s||0}function pn(e,t,r,n,i,o){ln.call(this,e,t,r,r,n,i,o);this.type="ArcCurve"}function fn(){var s=0,u=0,c=0,h=0;return{initCatmullRom:function(e,t,r,n,i){e=i*(r-e);n=i*(n-t);s=t;u=e;c=-3*t+3*r-2*e-n;h=2*t-2*r+e+n},initNonuniformCatmullRom:function(e,t,r,n,i,o,a){e=((t-e)/i-(r-e)/(i+o)+(r-t)/o)*o;n=((r-t)/o-(n-t)/(o+a)+(n-r)/a)*o;s=t;u=e;c=-3*t+3*r-2*e-n;h=2*t-2*r+e+n},calc:function(e){var t=e*e;return s+u*e+c*t+h*t*e}}}function dn(e,t,r,n){hn.call(this);this.type="CatmullRomCurve3";this.points=e||[];this.closed=t||!1;this.curveType=r||"centripetal";this.tension=n||.5}function vn(e,t,r,n,i){t=.5*(n-t);i=.5*(i-r);var o=e*e;return(2*r-2*n+t+i)*e*o+(-3*r+3*n-2*t-i)*o+t*e+r}function mn(e,t,r,n){var i=1-e;return i*i*t+2*(1-e)*e*r+e*e*n}function gn(e,t,r,n,i){var o=1-e,a=1-e;return o*o*o*t+3*a*a*e*r+3*(1-e)*e*e*n+e*e*e*i}function yn(e,t,r,n){hn.call(this);this.type="CubicBezierCurve";this.v0=e||new H;this.v1=t||new H;this.v2=r||new H;this.v3=n||new H}function _n(e,t,r,n){hn.call(this);this.type="CubicBezierCurve3";this.v0=e||new we;this.v1=t||new we;this.v2=r||new we;this.v3=n||new we}function bn(e,t){hn.call(this);this.type="LineCurve";this.v1=e||new H;this.v2=t||new H}function xn(e,t){hn.call(this);this.type="LineCurve3";this.v1=e||new we;this.v2=t||new we}function wn(e,t,r){hn.call(this);this.type="QuadraticBezierCurve";this.v0=e||new H;this.v1=t||new H;this.v2=r||new H}function Sn(e,t,r){hn.call(this);this.type="QuadraticBezierCurve3";this.v0=e||new we;this.v1=t||new we;this.v2=r||new we}function Mn(e){hn.call(this);this.type="SplineCurve";this.points=e||[]}function En(){hn.call(this);this.type="CurvePath";this.curves=[];this.autoClose=!1}function Cn(e){En.call(this);this.type="Path";this.currentPoint=new H;e&&this.setFromPoints(e)}function Tn(e){Cn.call(this,e);this.uuid=eo.generateUUID();this.type="Shape";this.holes=[]}function On(e,t){h.call(this);this.type="Light";this.color=new w(e);this.intensity=void 0!==t?t:1;this.receiveShadow=void 0}function Pn(e,t,r){On.call(this,e,r);this.type="HemisphereLight";this.castShadow=void 0;this.position.copy(h.DefaultUp);this.updateMatrix();this.groundColor=new w(t)}function An(e){this.camera=e;this.bias=0;this.radius=1;this.mapSize=new H(512,512);this.map=null;this.matrix=new xe}function jn(){An.call(this,new gt(50,1,.5,500))}function Rn(e,t,r,n,i,o){On.call(this,e,t);this.type="SpotLight";this.position.copy(h.DefaultUp);this.updateMatrix();this.target=new h;Object.defineProperty(this,"power",{get:function(){return this.intensity*Math.PI},set:function(e){this.intensity=e/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 jn}function Ln(e,t,r,n){On.call(this,e,t);this.type="PointLight";Object.defineProperty(this,"power",{get:function(){return 4*this.intensity*Math.PI},set:function(e){this.intensity=e/(4*Math.PI)}});this.distance=void 0!==r?r:0;this.decay=void 0!==n?n:1;this.shadow=new An(new gt(90,1,.5,500))}function In(){An.call(this,new f(-5,5,5,-5,.5,500))}function Nn(e,t){On.call(this,e,t);this.type="DirectionalLight";this.position.copy(h.DefaultUp);this.updateMatrix();this.target=new h;this.shadow=new In}function kn(e,t){On.call(this,e,t);this.type="AmbientLight";this.castShadow=void 0}function Dn(e,t,r,n){On.call(this,e,t);this.type="RectAreaLight";this.width=void 0!==r?r:10;this.height=void 0!==n?n:10}function Bn(e,t,r,n){this.parameterPositions=e;this._cachedIndex=0;this.resultBuffer=void 0!==n?n:new t.constructor(r);this.sampleValues=t;this.valueSize=r}function Fn(e,t,r,n){Bn.call(this,e,t,r,n);this._offsetNext=this._weightNext=this._offsetPrev=this._weightPrev=-0}function $n(e,t,r,n){Bn.call(this,e,t,r,n)}function zn(e,t,r,n){Bn.call(this,e,t,r,n)}function Un(e,t,r,n){if(void 0===e)throw Error("THREE.KeyframeTrack: track name is undefined");if(void 0===t||0===t.length)throw Error("THREE.KeyframeTrack: no keyframes in track named "+e);this.name=e;this.times=Do.convertArray(t,this.TimeBufferType);this.values=Do.convertArray(r,this.ValueBufferType);this.setInterpolation(n||this.DefaultInterpolation)}function Gn(e,t,r){Un.call(this,e,t,r)}function Vn(e,t,r,n){Un.call(this,e,t,r,n)}function Hn(e,t,r,n){Un.call(this,e,t,r,n)}function qn(e,t,r,n){Bn.call(this,e,t,r,n)}function Wn(e,t,r,n){Un.call(this,e,t,r,n)}function Xn(e,t,r,n){Un.call(this,e,t,r,n)}function Yn(e,t,r,n){Un.call(this,e,t,r,n)}function Kn(e,t,r){this.name=e;this.tracks=r;this.duration=void 0!==t?t:-1;this.uuid=eo.generateUUID();0>this.duration&&this.resetDuration()}function Zn(e){switch(e.toLowerCase()){case"scalar":case"double":case"float":case"number":case"integer":return Hn;case"vector":case"vector2":case"vector3":case"vector4":return Yn;case"color":return Vn;case"quaternion":return Wn;case"bool":case"boolean":return Gn;case"string":return Xn}throw Error("THREE.KeyframeTrack: Unsupported typeName: "+e)}function Jn(e){if(void 0===e.type)throw Error("THREE.KeyframeTrack: track type undefined, can not parse");var t=Zn(e.type);if(void 0===e.times){var r=[],n=[];Do.flattenJSON(e.keys,r,n,"value");e.times=r;e.values=n}return void 0!==t.parse?t.parse(e):new t(e.name,e.times,e.values,e.interpolation)}function Qn(e){this.manager=void 0!==e?e:Ao;this.textures={}}function ei(e){this.manager=void 0!==e?e:Ao}function ti(){}function ri(e){"boolean"===typeof e&&(console.warn("THREE.JSONLoader: showStatus parameter has been removed from constructor."),e=void 0);this.manager=void 0!==e?e:Ao;this.withCredentials=!1}function ni(e){this.manager=void 0!==e?e:Ao;this.texturePath=""}function ii(e){"undefined"===typeof createImageBitmap&&console.warn("THREE.ImageBitmapLoader: createImageBitmap() not supported.");"undefined"===typeof fetch&&console.warn("THREE.ImageBitmapLoader: fetch() not supported.");this.manager=void 0!==e?e:Ao;this.options=void 0}function oi(){this.type="ShapePath";this.color=new w;this.subPaths=[];this.currentPath=null}function ai(e){this.type="Font";this.data=e}function si(e){this.manager=void 0!==e?e:Ao}function ui(e){this.manager=void 0!==e?e:Ao}function ci(){this.type="StereoCamera";this.aspect=1;this.eyeSep=.064;this.cameraL=new gt;this.cameraL.layers.enable(1);this.cameraL.matrixAutoUpdate=!1;this.cameraR=new gt;this.cameraR.layers.enable(2);this.cameraR.matrixAutoUpdate=!1}function hi(e,t,r){h.call(this);this.type="CubeCamera";var i=new gt(90,1,e,t);i.up.set(0,-1,0);i.lookAt(new we(1,0,0));this.add(i);var o=new gt(90,1,e,t);o.up.set(0,-1,0);o.lookAt(new we(-1,0,0));this.add(o);var a=new gt(90,1,e,t);a.up.set(0,0,1);a.lookAt(new we(0,1,0));this.add(a);var s=new gt(90,1,e,t);s.up.set(0,0,-1);s.lookAt(new we(0,-1,0));this.add(s);var u=new gt(90,1,e,t);u.up.set(0,-1,0);u.lookAt(new we(0,0,1));this.add(u);var c=new gt(90,1,e,t);c.up.set(0,-1,0);c.lookAt(new we(0,0,-1));this.add(c);this.renderTarget=new n(r,r,{format:1022,magFilter:1006,minFilter:1006});this.renderTarget.texture.name="CubeCamera";this.update=function(e,t){null===this.parent&&this.updateMatrixWorld();var r=this.renderTarget,n=r.texture.generateMipmaps;r.texture.generateMipmaps=!1;r.activeCubeFace=0;e.render(t,i,r);r.activeCubeFace=1;e.render(t,o,r);r.activeCubeFace=2;e.render(t,a,r);r.activeCubeFace=3;e.render(t,s,r);r.activeCubeFace=4;e.render(t,u,r);r.texture.generateMipmaps=n;r.activeCubeFace=5;e.render(t,c,r);e.setRenderTarget(null)};this.clear=function(e,t,r,n){for(var i=this.renderTarget,o=0;6>o;o++)i.activeCubeFace=o,e.setRenderTarget(i),e.clear(t,r,n);e.setRenderTarget(null)}}function li(){h.call(this);this.type="AudioListener";this.context=Vo.getContext();this.gain=this.context.createGain();this.gain.connect(this.context.destination);this.filter=null}function pi(e){h.call(this);this.type="Audio";this.context=e.context;this.gain=this.context.createGain();this.gain.connect(e.getInput());this.autoplay=!1;this.buffer=null;this.loop=!1;this.offset=this.startTime=0;this.playbackRate=1;this.isPlaying=!1;this.hasPlaybackControl=!0;this.sourceType="empty";this.filters=[]}function fi(e){pi.call(this,e);this.panner=this.context.createPanner();this.panner.connect(this.gain)}function di(e,t){this.analyser=e.context.createAnalyser();this.analyser.fftSize=void 0!==t?t:2048;this.data=new Uint8Array(this.analyser.frequencyBinCount);e.getOutput().connect(this.analyser)}function vi(e,t,r){this.binding=e;this.valueSize=r;e=Float64Array;switch(t){case"quaternion":t=this._slerp;break;case"string":case"bool":e=Array;t=this._select;break;default:t=this._lerp}this.buffer=new e(4*r);this._mixBufferRegion=t;this.referenceCount=this.useCount=this.cumulativeWeight=0}function mi(e,t,r){r=r||gi.parseTrackName(t);this._targetGroup=e;this._bindings=e.subscribe_(t,r)}function gi(e,t,r){this.path=t;this.parsedPath=r||gi.parseTrackName(t);this.node=gi.findNode(e,this.parsedPath.nodeName)||e;this.rootNode=e}function yi(){this.uuid=eo.generateUUID();this._objects=Array.prototype.slice.call(arguments);this.nCachedObjects_=0;var e={};this._indicesByUUID=e;for(var t=0,r=arguments.length;t!==r;++t)e[arguments[t].uuid]=t;this._paths=[];this._parsedPaths=[];this._bindings=[];this._bindingsIndicesByPath={};var n=this;this.stats={objects:{get total(){return n._objects.length},get inUse(){return this.total-n.nCachedObjects_}},get bindingsPerObject(){return n._bindings.length}}}function _i(e,t,r){this._mixer=e;this._clip=t;this._localRoot=r||null;e=t.tracks;t=e.length;r=Array(t);for(var n={endingStart:2400,endingEnd:2400},i=0;i!==t;++i){var o=e[i].createInterpolant(null);r[i]=o;o.settings=n}this._interpolantSettings=n;this._interpolants=r;this._propertyBindings=Array(t);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=Infinity;this.paused=!1;this.enabled=!0;this.clampWhenFinished=!1;this.zeroSlopeAtEnd=this.zeroSlopeAtStart=!0}function bi(e){this._root=e;this._initMemoryManager();this.time=this._accuIndex=0;this.timeScale=1}function xi(e,t){"string"===typeof e&&(console.warn("THREE.Uniform: Type parameter is no longer needed."),e=t);this.value=e}function wi(){A.call(this);this.type="InstancedBufferGeometry";this.maxInstancedCount=void 0}function Si(e,t,r){Et.call(this,e,t);this.meshPerAttribute=r||1}function Mi(e,t,r){y.call(this,e,t);this.meshPerAttribute=r||1}function Ei(e,t,r,n){this.ray=new B(e,t);this.near=r||0;this.far=n||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 Ci(e,t){return e.distance-t.distance}function Ti(e,t,r,n){if(!1!==e.visible&&(e.raycast(t,r),!0===n)){e=e.children;n=0;for(var i=e.length;n<i;n++)Ti(e[n],t,r,!0)}}function Oi(e){this.autoStart=void 0!==e?e:!0;this.elapsedTime=this.oldTime=this.startTime=0;this.running=!1}function Pi(e,t,r){this.radius=void 0!==e?e:1;this.phi=void 0!==t?t:0;this.theta=void 0!==r?r:0;return this}function Ai(e,t,r){this.radius=void 0!==e?e:1;this.theta=void 0!==t?t:0;this.y=void 0!==r?r:0;return this}function ji(e,t){this.min=void 0!==e?e:new H(Infinity,Infinity);this.max=void 0!==t?t:new H(-Infinity,-Infinity)}function Ri(e,t){this.start=void 0!==e?e:new we;this.end=void 0!==t?t:new we}function Li(e){h.call(this);this.material=e;this.render=function(){}}function Ii(e,t,r,n){this.object=e;this.size=void 0!==t?t:1;e=void 0!==r?r:16711680;n=void 0!==n?n:1;t=0;(r=this.object.geometry)&&r.isGeometry?t=3*r.faces.length:r&&r.isBufferGeometry&&(t=r.attributes.normal.count);r=new A;t=new P(6*t,3);r.addAttribute("position",t);Nt.call(this,r,new Lt({color:e,linewidth:n}));this.matrixAutoUpdate=!1;this.update()}function Ni(e,t){h.call(this);this.light=e;this.light.updateMatrixWorld();this.matrix=e.matrixWorld;this.matrixAutoUpdate=!1;this.color=t;e=new A;t=[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];for(var r=0,n=1;32>r;r++,n++){var i=r/32*Math.PI*2,o=n/32*Math.PI*2;t.push(Math.cos(i),Math.sin(i),1,Math.cos(o),Math.sin(o),1)}e.addAttribute("position",new P(t,3));t=new Lt({fog:!1});this.cone=new Nt(e,t);this.add(this.cone);this.update()}function ki(e){var t=[];e&&e.isBone&&t.push(e);for(var r=0;r<e.children.length;r++)t.push.apply(t,ki(e.children[r]));return t}function Di(e){for(var t=ki(e),r=new A,n=[],i=[],o=new w(0,0,1),a=new w(0,1,0),s=0;s<t.length;s++){var u=t[s];u.parent&&u.parent.isBone&&(n.push(0,0,0),n.push(0,0,0),i.push(o.r,o.g,o.b),i.push(a.r,a.g,a.b))}r.addAttribute("position",new P(n,3));r.addAttribute("color",new P(i,3));n=new Lt({vertexColors:2,depthTest:!1,depthWrite:!1,transparent:!0});Nt.call(this,r,n);this.root=e;this.bones=t;this.matrix=e.matrixWorld;this.matrixAutoUpdate=!1}function Bi(e,t,r){this.light=e;this.light.updateMatrixWorld();this.color=r;e=new Rr(t,4,2);t=new N({wireframe:!0,fog:!1});$.call(this,e,t);this.matrix=this.light.matrixWorld;this.matrixAutoUpdate=!1;this.update()}function Fi(e,t){h.call(this);this.light=e;this.light.updateMatrixWorld();this.matrix=e.matrixWorld;this.matrixAutoUpdate=!1;this.color=t;e=new Lt({fog:!1});t=new A;t.addAttribute("position",new y(new Float32Array(15),3));this.line=new It(t,e);this.add(this.line);this.update()}function $i(e,t,r){h.call(this);this.light=e;this.light.updateMatrixWorld();this.matrix=e.matrixWorld;this.matrixAutoUpdate=!1;this.color=r;e=new Zt(t);e.rotateY(.5*Math.PI);this.material=new N({wireframe:!0,fog:!1});void 0===this.color&&(this.material.vertexColors=2);t=e.getAttribute("position");t=new Float32Array(3*t.count);e.addAttribute("color",new y(t,3));this.add(new $(e,this.material));this.update()}function zi(e,t,r,n){e=e||10;t=t||10;r=new w(void 0!==r?r:4473924);n=new w(void 0!==n?n:8947848);var i=t/2,o=e/t,a=e/2;e=[];for(var s=[],u=0,c=0,h=-a;u<=t;u++,h+=o){e.push(-a,0,h,a,0,h);e.push(h,0,-a,h,0,a);var l=u===i?r:n;l.toArray(s,c);c+=3;l.toArray(s,c);c+=3;l.toArray(s,c);c+=3;l.toArray(s,c);c+=3}t=new A;t.addAttribute("position",new P(e,3));t.addAttribute("color",new P(s,3));r=new Lt({vertexColors:2});Nt.call(this,t,r)}function Ui(e,t,r,n,i,o){e=e||10;t=t||16;r=r||8;n=n||64;i=new w(void 0!==i?i:4473924);o=new w(void 0!==o?o:8947848);var a=[],s=[],u;for(u=0;u<=t;u++){var c=u/t*2*Math.PI;var h=Math.sin(c)*e;c=Math.cos(c)*e;a.push(0,0,0);a.push(h,0,c);var l=u&1?i:o;s.push(l.r,l.g,l.b);s.push(l.r,l.g,l.b)}for(u=0;u<=r;u++){l=u&1?i:o;var p=e-e/r*u;for(t=0;t<n;t++)c=t/n*2*Math.PI,h=Math.sin(c)*p,c=Math.cos(c)*p,a.push(h,0,c),s.push(l.r,l.g,l.b),c=(t+1)/n*2*Math.PI,h=Math.sin(c)*p,c=Math.cos(c)*p,a.push(h,0,c),s.push(l.r,l.g,l.b)}e=new A;e.addAttribute("position",new P(a,3));e.addAttribute("color",new P(s,3));a=new Lt({vertexColors:2});Nt.call(this,e,a)}function Gi(e,t,r,n){this.object=e;this.size=void 0!==t?t:1;e=void 0!==r?r:16776960;n=void 0!==n?n:1;t=0;(r=this.object.geometry)&&r.isGeometry?t=r.faces.length:console.warn("THREE.FaceNormalsHelper: only THREE.Geometry is supported. Use THREE.VertexNormalsHelper, instead.");r=new A;t=new P(6*t,3);r.addAttribute("position",t);Nt.call(this,r,new Lt({color:e,linewidth:n}));this.matrixAutoUpdate=!1;this.update()}function Vi(e,t,r){h.call(this);this.light=e;this.light.updateMatrixWorld();this.matrix=e.matrixWorld;this.matrixAutoUpdate=!1;this.color=r;void 0===t&&(t=1);e=new A;e.addAttribute("position",new P([-t,t,0,t,t,0,t,-t,0,-t,-t,0,-t,t,0],3));t=new Lt({fog:!1});this.lightPlane=new It(e,t);this.add(this.lightPlane);e=new A;e.addAttribute("position",new P([0,0,0,0,0,1],3));this.targetLine=new It(e,t);this.add(this.targetLine);this.update()}function Hi(e){function t(e,t,r){n(e,r);n(t,r)}function n(e,t){o.push(0,0,0);a.push(t.r,t.g,t.b);void 0===s[e]&&(s[e]=[]);s[e].push(o.length/3-1)}var r=new A,i=new Lt({color:16777215,vertexColors:1}),o=[],a=[],s={},u=new w(16755200),c=new w(16711680),h=new w(43775),l=new w(16777215),p=new w(3355443);t("n1","n2",u);t("n2","n4",u);t("n4","n3",u);t("n3","n1",u);t("f1","f2",u);t("f2","f4",u);t("f4","f3",u);t("f3","f1",u);t("n1","f1",u);t("n2","f2",u);t("n3","f3",u);t("n4","f4",u);t("p","n1",c);t("p","n2",c);t("p","n3",c);t("p","n4",c);t("u1","u2",h);t("u2","u3",h);t("u3","u1",h);t("c","t",l);t("p","c",p);t("cn1","cn2",p);t("cn3","cn4",p);t("cf1","cf2",p);t("cf3","cf4",p);r.addAttribute("position",new P(o,3));r.addAttribute("color",new P(a,3));Nt.call(this,r,i);this.camera=e;this.camera.updateProjectionMatrix&&this.camera.updateProjectionMatrix();this.matrix=e.matrixWorld;this.matrixAutoUpdate=!1;this.pointMap=s;this.update()}function qi(e,t){this.object=e;void 0===t&&(t=16776960);e=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]);var r=new Float32Array(24),n=new A;n.setIndex(new y(e,1));n.addAttribute("position",new y(r,3));Nt.call(this,n,new Lt({color:t}));this.matrixAutoUpdate=!1;this.update()}function Wi(e,t){this.type="Box3Helper";this.box=e;e=void 0!==t?t:16776960;t=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]);var r=new A;r.setIndex(new y(t,1));r.addAttribute("position",new P([1,1,1,-1,1,1,-1,-1,1,1,-1,1,1,1,-1,-1,1,-1,-1,-1,-1,1,-1,-1],3));Nt.call(this,r,new Lt({color:e}));this.geometry.computeBoundingSphere()}function Xi(e,t,r){this.type="PlaneHelper";this.plane=e;this.size=void 0===t?1:t;e=void 0!==r?r:16776960;t=new A;t.addAttribute("position",new P([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,0,1,0,0,0],3));t.computeBoundingSphere();It.call(this,t,new Lt({color:e}));t=new A;t.addAttribute("position",new P([1,1,1,-1,1,1,-1,-1,1,1,1,1,-1,-1,1,1,-1,1],3));t.computeBoundingSphere();this.add(new $(t,new N({color:e,opacity:.2,transparent:!0,depthWrite:!1})))}function Yi(e,t,r,n,i,o){h.call(this);void 0===n&&(n=16776960);void 0===r&&(r=1);void 0===i&&(i=.2*r);void 0===o&&(o=.2*i);void 0===Ho&&(Ho=new A,Ho.addAttribute("position",new P([0,0,0,0,1,0],3)),qo=new Ur(0,.5,1,5,1),qo.translate(0,-.5,0));this.position.copy(t);this.line=new It(Ho,new Lt({color:n}));this.line.matrixAutoUpdate=!1;this.add(this.line);this.cone=new $(qo,new N({color:n}));this.cone.matrixAutoUpdate=!1;this.add(this.cone);this.setDirection(e);this.setLength(r,i,o)}function Ki(e){e=e||1;var t=[0,0,0,e,0,0,0,0,0,0,e,0,0,0,0,0,0,e];e=new A;e.addAttribute("position",new P(t,3));e.addAttribute("color",new P([1,0,0,1,.6,0,0,1,0,.6,1,0,0,0,1,0,.6,1],3));t=new Lt({vertexColors:2});Nt.call(this,e,t)}function Zi(e){console.warn("THREE.ClosedSplineCurve3 has been deprecated. Use THREE.CatmullRomCurve3 instead.");dn.call(this,e);this.type="catmullrom";this.closed=!0}function Ji(e){console.warn("THREE.SplineCurve3 has been deprecated. Use THREE.CatmullRomCurve3 instead.");dn.call(this,e);this.type="catmullrom"}function Qi(e){console.warn("THREE.Spline has been removed. Use THREE.CatmullRomCurve3 instead.");dn.call(this,e);this.type="catmullrom"}void 0===Number.EPSILON&&(Number.EPSILON=Math.pow(2,-52));void 0===Number.isInteger&&(Number.isInteger=function(e){return"number"===typeof e&&isFinite(e)&&Math.floor(e)===e});void 0===Math.sign&&(Math.sign=function(e){return 0>e?-1:0<e?1:+e});!1==="name"in Function.prototype&&Object.defineProperty(Function.prototype,"name",{get:function(){return this.toString().match(/^\s*function\s*([^\(\s]*)/)[1]}});void 0===Object.assign&&function(){Object.assign=function(e){if(void 0===e||null===e)throw new TypeError("Cannot convert undefined or null to object");for(var t=Object(e),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)&&(t[i]=n[i])}return t}}();Object.assign(t.prototype,{addEventListener:function(e,t){void 0===this._listeners&&(this._listeners={});var r=this._listeners;void 0===r[e]&&(r[e]=[]);-1===r[e].indexOf(t)&&r[e].push(t)},hasEventListener:function(e,t){if(void 0===this._listeners)return!1;var r=this._listeners;return void 0!==r[e]&&-1!==r[e].indexOf(t)},removeEventListener:function(e,t){void 0!==this._listeners&&(e=this._listeners[e],void 0!==e&&(t=e.indexOf(t),-1!==t&&e.splice(t,1)))},dispatchEvent:function(e){if(void 0!==this._listeners){var t=this._listeners[e.type];if(void 0!==t){e.target=this;t=t.slice(0);for(var r=0,n=t.length;r<n;r++)t[r].call(this,e)}}}});var eo={DEG2RAD:Math.PI/180,RAD2DEG:180/Math.PI,generateUUID:function(){for(var i=[],e=0;256>e;e++)i[e]=(16>e?"0":"")+e.toString(16);return function(){var e=4294967295*Math.random()|0,t=4294967295*Math.random()|0,r=4294967295*Math.random()|0,n=4294967295*Math.random()|0;return(i[e&255]+i[e>>8&255]+i[e>>16&255]+i[e>>24&255]+"-"+i[t&255]+i[t>>8&255]+"-"+i[t>>16&15|64]+i[t>>24&255]+"-"+i[r&63|128]+i[r>>8&255]+"-"+i[r>>16&255]+i[r>>24&255]+i[n&255]+i[n>>8&255]+i[n>>16&255]+i[n>>24&255]).toUpperCase()}}(),clamp:function(e,t,r){return Math.max(t,Math.min(r,e))},euclideanModulo:function(e,t){return(e%t+t)%t},mapLinear:function(e,t,r,n,i){return n+(e-t)*(i-n)/(r-t)},lerp:function(e,t,r){return(1-r)*e+r*t},smoothstep:function(e,t,r){if(e<=t)return 0;if(e>=r)return 1;e=(e-t)/(r-t);return e*e*(3-2*e)},smootherstep:function(e,t,r){if(e<=t)return 0;if(e>=r)return 1;e=(e-t)/(r-t);return e*e*e*(e*(6*e-15)+10)},randInt:function(e,t){return e+Math.floor(Math.random()*(t-e+1))},randFloat:function(e,t){return e+Math.random()*(t-e)},randFloatSpread:function(e){return e*(.5-Math.random())},degToRad:function(e){return e*eo.DEG2RAD},radToDeg:function(e){return e*eo.RAD2DEG},isPowerOfTwo:function(e){return 0===(e&e-1)&&0!==e},ceilPowerOfTwo:function(e){return Math.pow(2,Math.ceil(Math.log(e)/Math.LN2))},floorPowerOfTwo:function(e){return Math.pow(2,Math.floor(Math.log(e)/Math.LN2))}};Object.defineProperties(H.prototype,{width:{get:function(){return this.x},set:function(e){this.x=e}},height:{get:function(){return this.y},set:function(e){this.y=e}}});Object.assign(H.prototype,{isVector2:!0,set:function(e,t){this.x=e;this.y=t;return this},setScalar:function(e){this.y=this.x=e;return this},setX:function(e){this.x=e;return this},setY:function(e){this.y=e;return this},setComponent:function(e,t){switch(e){case 0:this.x=t;break;case 1:this.y=t;break;default:throw Error("index is out of range: "+e)}return this},getComponent:function(e){switch(e){case 0:return this.x;case 1:return this.y;default:throw Error("index is out of range: "+e)}},clone:function(){return new this.constructor(this.x,this.y)},copy:function(e){this.x=e.x;this.y=e.y;return this},add:function(e,t){if(void 0!==t)return console.warn("THREE.Vector2: .add() now only accepts one argument. Use .addVectors( a, b ) instead."),this.addVectors(e,t);this.x+=e.x;this.y+=e.y;return this},addScalar:function(e){this.x+=e;this.y+=e;return this},addVectors:function(e,t){this.x=e.x+t.x;this.y=e.y+t.y;return this},addScaledVector:function(e,t){this.x+=e.x*t;this.y+=e.y*t;return this},sub:function(e,t){if(void 0!==t)return console.warn("THREE.Vector2: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."),this.subVectors(e,t);this.x-=e.x;this.y-=e.y;return this},subScalar:function(e){this.x-=e;this.y-=e;return this},subVectors:function(e,t){this.x=e.x-t.x;this.y=e.y-t.y;return this},multiply:function(e){this.x*=e.x;this.y*=e.y;return this},multiplyScalar:function(e){this.x*=e;this.y*=e;return this},divide:function(e){this.x/=e.x;this.y/=e.y;return this},divideScalar:function(e){return this.multiplyScalar(1/e)},applyMatrix3:function(e){var t=this.x,r=this.y;e=e.elements;this.x=e[0]*t+e[3]*r+e[6];this.y=e[1]*t+e[4]*r+e[7];return this},min:function(e){this.x=Math.min(this.x,e.x);this.y=Math.min(this.y,e.y);return this},max:function(e){this.x=Math.max(this.x,e.x);this.y=Math.max(this.y,e.y);return this},clamp:function(e,t){this.x=Math.max(e.x,Math.min(t.x,this.x));this.y=Math.max(e.y,Math.min(t.y,this.y));return this},clampScalar:function(){var r=new H,n=new H;return function(e,t){r.set(e,e);n.set(t,t);return this.clamp(r,n)}}(),clampLength:function(e,t){var r=this.length();return this.divideScalar(r||1).multiplyScalar(Math.max(e,Math.min(t,r)))},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);return this},negate:function(){this.x=-this.x;this.y=-this.y;return this},dot:function(e){return this.x*e.x+this.y*e.y},cross:function(e){return this.x*e.y-this.y*e.x},lengthSq:function(){return this.x*this.x+this.y*this.y},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y)},manhattanLength:function(){return Math.abs(this.x)+Math.abs(this.y)},normalize:function(){return this.divideScalar(this.length()||1)},angle:function(){var e=Math.atan2(this.y,this.x);0>e&&(e+=2*Math.PI);return e},distanceTo:function(e){return Math.sqrt(this.distanceToSquared(e))},distanceToSquared:function(e){var t=this.x-e.x;e=this.y-e.y;return t*t+e*e},manhattanDistanceTo:function(e){return Math.abs(this.x-e.x)+Math.abs(this.y-e.y)},setLength:function(e){return this.normalize().multiplyScalar(e)},lerp:function(e,t){this.x+=(e.x-this.x)*t;this.y+=(e.y-this.y)*t;return this},lerpVectors:function(e,t,r){return this.subVectors(t,e).multiplyScalar(r).add(e)},equals:function(e){return e.x===this.x&&e.y===this.y},fromArray:function(e,t){void 0===t&&(t=0);this.x=e[t];this.y=e[t+1];return this},toArray:function(e,t){void 0===e&&(e=[]);void 0===t&&(t=0);e[t]=this.x;e[t+1]=this.y;return e},fromBufferAttribute:function(e,t,r){void 0!==r&&console.warn("THREE.Vector2: offset has been removed from .fromBufferAttribute().");this.x=e.getX(t);this.y=e.getY(t);return this},rotateAround:function(e,t){var r=Math.cos(t);t=Math.sin(t);var n=this.x-e.x,i=this.y-e.y;this.x=n*r-i*t+e.x;this.y=n*t+i*r+e.y;return this}});Object.assign(xe.prototype,{isMatrix4:!0,set:function(e,t,r,n,i,o,a,s,u,c,h,l,p,f,d,v){var m=this.elements;m[0]=e;m[4]=t;m[8]=r;m[12]=n;m[1]=i;m[5]=o;m[9]=a;m[13]=s;m[2]=u;m[6]=c;m[10]=h;m[14]=l;m[3]=p;m[7]=f;m[11]=d;m[15]=v;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 xe).fromArray(this.elements)},copy:function(e){var t=this.elements;e=e.elements;t[0]=e[0];t[1]=e[1];t[2]=e[2];t[3]=e[3];t[4]=e[4];t[5]=e[5];t[6]=e[6];t[7]=e[7];t[8]=e[8];t[9]=e[9];t[10]=e[10];t[11]=e[11];t[12]=e[12];t[13]=e[13];t[14]=e[14];t[15]=e[15];return this},copyPosition:function(e){var t=this.elements;e=e.elements;t[12]=e[12];t[13]=e[13];t[14]=e[14];return this},extractBasis:function(e,t,r){e.setFromMatrixColumn(this,0);t.setFromMatrixColumn(this,1);r.setFromMatrixColumn(this,2);return this},makeBasis:function(e,t,r){this.set(e.x,t.x,r.x,0,e.y,t.y,r.y,0,e.z,t.z,r.z,0,0,0,0,1);return this},extractRotation:function(){var o=new we;return function(e){var t=this.elements,r=e.elements,n=1/o.setFromMatrixColumn(e,0).length(),i=1/o.setFromMatrixColumn(e,1).length();e=1/o.setFromMatrixColumn(e,2).length();t[0]=r[0]*n;t[1]=r[1]*n;t[2]=r[2]*n;t[3]=0;t[4]=r[4]*i;t[5]=r[5]*i;t[6]=r[6]*i;t[7]=0;t[8]=r[8]*e;t[9]=r[9]*e;t[10]=r[10]*e;t[11]=0;t[12]=0;t[13]=0;t[14]=0;t[15]=1;return this}}(),makeRotationFromEuler:function(e){e&&e.isEuler||console.error("THREE.Matrix4: .makeRotationFromEuler() now expects a Euler rotation rather than a Vector3 and order.");var t=this.elements,r=e.x,n=e.y,i=e.z,o=Math.cos(r);r=Math.sin(r);var a=Math.cos(n);n=Math.sin(n);var s=Math.cos(i);i=Math.sin(i);if("XYZ"===e.order){e=o*s;var u=o*i,c=r*s,h=r*i;t[0]=a*s;t[4]=-a*i;t[8]=n;t[1]=u+c*n;t[5]=e-h*n;t[9]=-r*a;t[2]=h-e*n;t[6]=c+u*n;t[10]=o*a}else"YXZ"===e.order?(e=a*s,u=a*i,c=n*s,h=n*i,t[0]=e+h*r,t[4]=c*r-u,t[8]=o*n,t[1]=o*i,t[5]=o*s,t[9]=-r,t[2]=u*r-c,t[6]=h+e*r,t[10]=o*a):"ZXY"===e.order?(e=a*s,u=a*i,c=n*s,h=n*i,t[0]=e-h*r,t[4]=-o*i,t[8]=c+u*r,t[1]=u+c*r,t[5]=o*s,t[9]=h-e*r,t[2]=-o*n,t[6]=r,t[10]=o*a):"ZYX"===e.order?(e=o*s,u=o*i,c=r*s,h=r*i,t[0]=a*s,t[4]=c*n-u,t[8]=e*n+h,t[1]=a*i,t[5]=h*n+e,t[9]=u*n-c,t[2]=-n,t[6]=r*a,t[10]=o*a):"YZX"===e.order?(e=o*a,u=o*n,c=r*a,h=r*n,t[0]=a*s,t[4]=h-e*i,t[8]=c*i+u,t[1]=i,t[5]=o*s,t[9]=-r*s,t[2]=-n*s,t[6]=u*i+c,t[10]=e-h*i):"XZY"===e.order&&(e=o*a,u=o*n,c=r*a,h=r*n,t[0]=a*s,t[4]=-i,t[8]=n*s,t[1]=e*i+h,t[5]=o*s,t[9]=u*i-c,t[2]=c*i-u,t[6]=r*s,t[10]=h*i+e);t[3]=0;t[7]=0;t[11]=0;t[12]=0;t[13]=0;t[14]=0;t[15]=1;return this},makeRotationFromQuaternion:function(){var t=new we(0,0,0),r=new we(1,1,1);return function(e){return this.compose(t,e,r)}}(),lookAt:function(){var i=new we,o=new we,a=new we;return function(e,t,r){var n=this.elements;a.subVectors(e,t);0===a.lengthSq()&&(a.z=1);a.normalize();i.crossVectors(r,a);0===i.lengthSq()&&(1===Math.abs(r.z)?a.x+=1e-4:a.z+=1e-4,a.normalize(),i.crossVectors(r,a));i.normalize();o.crossVectors(a,i);n[0]=i.x;n[4]=o.x;n[8]=a.x;n[1]=i.y;n[5]=o.y;n[9]=a.y;n[2]=i.z;n[6]=o.z;n[10]=a.z;return this}}(),multiply:function(e,t){return void 0!==t?(console.warn("THREE.Matrix4: .multiply() now only accepts one argument. Use .multiplyMatrices( a, b ) instead."),this.multiplyMatrices(e,t)):this.multiplyMatrices(this,e)},premultiply:function(e){return this.multiplyMatrices(e,this)},multiplyMatrices:function(e,t){var r=e.elements,n=t.elements;t=this.elements;e=r[0];var i=r[4],o=r[8],a=r[12],s=r[1],u=r[5],c=r[9],h=r[13],l=r[2],p=r[6],f=r[10],d=r[14],v=r[3],m=r[7],g=r[11];r=r[15];var y=n[0],_=n[4],b=n[8],x=n[12],w=n[1],S=n[5],M=n[9],E=n[13],C=n[2],T=n[6],O=n[10],P=n[14],A=n[3],j=n[7],R=n[11];n=n[15];t[0]=e*y+i*w+o*C+a*A;t[4]=e*_+i*S+o*T+a*j;t[8]=e*b+i*M+o*O+a*R;t[12]=e*x+i*E+o*P+a*n;t[1]=s*y+u*w+c*C+h*A;t[5]=s*_+u*S+c*T+h*j;t[9]=s*b+u*M+c*O+h*R;t[13]=s*x+u*E+c*P+h*n;t[2]=l*y+p*w+f*C+d*A;t[6]=l*_+p*S+f*T+d*j;t[10]=l*b+p*M+f*O+d*R;t[14]=l*x+p*E+f*P+d*n;t[3]=v*y+m*w+g*C+r*A;t[7]=v*_+m*S+g*T+r*j;t[11]=v*b+m*M+g*O+r*R;t[15]=v*x+m*E+g*P+r*n;return this},multiplyScalar:function(e){var t=this.elements;t[0]*=e;t[4]*=e;t[8]*=e;t[12]*=e;t[1]*=e;t[5]*=e;t[9]*=e;t[13]*=e;t[2]*=e;t[6]*=e;t[10]*=e;t[14]*=e;t[3]*=e;t[7]*=e;t[11]*=e;t[15]*=e;return this},applyToBufferAttribute:function(){var n=new we;return function(e){for(var t=0,r=e.count;t<r;t++)n.x=e.getX(t),n.y=e.getY(t),n.z=e.getZ(t),n.applyMatrix4(this),e.setXYZ(t,n.x,n.y,n.z);return e}}(),determinant:function(){var e=this.elements,t=e[0],r=e[4],n=e[8],i=e[12],o=e[1],a=e[5],s=e[9],u=e[13],c=e[2],h=e[6],l=e[10],p=e[14];return e[3]*(+i*s*h-n*u*h-i*a*l+r*u*l+n*a*p-r*s*p)+e[7]*(+t*s*p-t*u*l+i*o*l-n*o*p+n*u*c-i*s*c)+e[11]*(+t*u*h-t*a*p-i*o*h+r*o*p+i*a*c-r*u*c)+e[15]*(-n*a*c-t*s*h+t*a*l+n*o*h-r*o*l+r*s*c)},transpose:function(){var e=this.elements;var 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;return this},setPosition:function(e){var t=this.elements;t[12]=e.x;t[13]=e.y;t[14]=e.z;return this},getInverse:function(e,t){var r=this.elements,n=e.elements;e=n[0];var i=n[1],o=n[2],a=n[3],s=n[4],u=n[5],c=n[6],h=n[7],l=n[8],p=n[9],f=n[10],d=n[11],v=n[12],m=n[13],g=n[14];n=n[15];var y=p*g*h-m*f*h+m*c*d-u*g*d-p*c*n+u*f*n,_=v*f*h-l*g*h-v*c*d+s*g*d+l*c*n-s*f*n,b=l*m*h-v*p*h+v*u*d-s*m*d-l*u*n+s*p*n,x=v*p*c-l*m*c-v*u*f+s*m*f+l*u*g-s*p*g,w=e*y+i*_+o*b+a*x;if(0===w){if(!0===t)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()}t=1/w;r[0]=y*t;r[1]=(m*f*a-p*g*a-m*o*d+i*g*d+p*o*n-i*f*n)*t;r[2]=(u*g*a-m*c*a+m*o*h-i*g*h-u*o*n+i*c*n)*t;r[3]=(p*c*a-u*f*a-p*o*h+i*f*h+u*o*d-i*c*d)*t;r[4]=_*t;r[5]=(l*g*a-v*f*a+v*o*d-e*g*d-l*o*n+e*f*n)*t;r[6]=(v*c*a-s*g*a-v*o*h+e*g*h+s*o*n-e*c*n)*t;r[7]=(s*f*a-l*c*a+l*o*h-e*f*h-s*o*d+e*c*d)*t;r[8]=b*t;r[9]=(v*p*a-l*m*a-v*i*d+e*m*d+l*i*n-e*p*n)*t;r[10]=(s*m*a-v*u*a+v*i*h-e*m*h-s*i*n+e*u*n)*t;r[11]=(l*u*a-s*p*a-l*i*h+e*p*h+s*i*d-e*u*d)*t;r[12]=x*t;r[13]=(l*m*o-v*p*o+v*i*f-e*m*f-l*i*g+e*p*g)*t;r[14]=(v*u*o-s*m*o-v*i*c+e*m*c+s*i*g-e*u*g)*t;r[15]=(s*p*o-l*u*o+l*i*c-e*p*c-s*i*f+e*u*f)*t;return this},scale:function(e){var t=this.elements,r=e.x,n=e.y;e=e.z;t[0]*=r;t[4]*=n;t[8]*=e;t[1]*=r;t[5]*=n;t[9]*=e;t[2]*=r;t[6]*=n;t[10]*=e;t[3]*=r;t[7]*=n;t[11]*=e;return this},getMaxScaleOnAxis:function(){var e=this.elements;return Math.sqrt(Math.max(e[0]*e[0]+e[1]*e[1]+e[2]*e[2],e[4]*e[4]+e[5]*e[5]+e[6]*e[6],e[8]*e[8]+e[9]*e[9]+e[10]*e[10]))},makeTranslation:function(e,t,r){this.set(1,0,0,e,0,1,0,t,0,0,1,r,0,0,0,1);return this},makeRotationX:function(e){var t=Math.cos(e);e=Math.sin(e);this.set(1,0,0,0,0,t,-e,0,0,e,t,0,0,0,0,1);return this},makeRotationY:function(e){var t=Math.cos(e);e=Math.sin(e);this.set(t,0,e,0,0,1,0,0,-e,0,t,0,0,0,0,1);return this},makeRotationZ:function(e){var t=Math.cos(e);e=Math.sin(e);this.set(t,-e,0,0,e,t,0,0,0,0,1,0,0,0,0,1);return this},makeRotationAxis:function(e,t){var r=Math.cos(t);t=Math.sin(t);var n=1-r,i=e.x,o=e.y;e=e.z;var a=n*i,s=n*o;this.set(a*i+r,a*o-t*e,a*e+t*o,0,a*o+t*e,s*o+r,s*e-t*i,0,a*e-t*o,s*e+t*i,n*e*e+r,0,0,0,0,1);return this},makeScale:function(e,t,r){this.set(e,0,0,0,0,t,0,0,0,0,r,0,0,0,0,1);return this},makeShear:function(e,t,r){this.set(1,t,r,0,e,1,r,0,e,t,1,0,0,0,0,1);return this},compose:function(e,t,r){var n=this.elements,i=t._x,o=t._y,a=t._z,s=t._w,u=i+i,c=o+o,h=a+a;t=i*u;var l=i*c;i*=h;var p=o*c;o*=h;a*=h;u*=s;c*=s;s*=h;h=r.x;var f=r.y;r=r.z;n[0]=(1-(p+a))*h;n[1]=(l+s)*h;n[2]=(i-c)*h;n[3]=0;n[4]=(l-s)*f;n[5]=(1-(t+a))*f;n[6]=(o+u)*f;n[7]=0;n[8]=(i+c)*r;n[9]=(o-u)*r;n[10]=(1-(t+p))*r;n[11]=0;n[12]=e.x;n[13]=e.y;n[14]=e.z;n[15]=1;return this},decompose:function(){var u=new we,c=new xe;return function(e,t,r){var n=this.elements,i=u.set(n[0],n[1],n[2]).length(),o=u.set(n[4],n[5],n[6]).length(),a=u.set(n[8],n[9],n[10]).length();0>this.determinant()&&(i=-i);e.x=n[12];e.y=n[13];e.z=n[14];c.copy(this);e=1/i;n=1/o;var s=1/a;c.elements[0]*=e;c.elements[1]*=e;c.elements[2]*=e;c.elements[4]*=n;c.elements[5]*=n;c.elements[6]*=n;c.elements[8]*=s;c.elements[9]*=s;c.elements[10]*=s;t.setFromRotationMatrix(c);r.x=i;r.y=o;r.z=a;return this}}(),makePerspective:function(e,t,r,n,i,o){void 0===o&&console.warn("THREE.Matrix4: .makePerspective() has been redefined and has a new signature. Please check the docs.");var a=this.elements;a[0]=2*i/(t-e);a[4]=0;a[8]=(t+e)/(t-e);a[12]=0;a[1]=0;a[5]=2*i/(r-n);a[9]=(r+n)/(r-n);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;return this},makeOrthographic:function(e,t,r,n,i,o){var a=this.elements,s=1/(t-e),u=1/(r-n),c=1/(o-i);a[0]=2*s;a[4]=0;a[8]=0;a[12]=-((t+e)*s);a[1]=0;a[5]=2*u;a[9]=0;a[13]=-((r+n)*u);a[2]=0;a[6]=0;a[10]=-2*c;a[14]=-((o+i)*c);a[3]=0;a[7]=0;a[11]=0;a[15]=1;return this},equals:function(e){var t=this.elements;e=e.elements;for(var r=0;16>r;r++)if(t[r]!==e[r])return!1;return!0},fromArray:function(e,t){void 0===t&&(t=0);for(var r=0;16>r;r++)this.elements[r]=e[r+t];return this},toArray:function(e,t){void 0===e&&(e=[]);void 0===t&&(t=0);var r=this.elements;e[t]=r[0];e[t+1]=r[1];e[t+2]=r[2];e[t+3]=r[3];e[t+4]=r[4];e[t+5]=r[5];e[t+6]=r[6];e[t+7]=r[7];e[t+8]=r[8];e[t+9]=r[9];e[t+10]=r[10];e[t+11]=r[11];e[t+12]=r[12];e[t+13]=r[13];e[t+14]=r[14];e[t+15]=r[15];return e}});Object.assign(s,{slerp:function(e,t,r,n){return r.copy(e).slerp(t,n)},slerpFlat:function(e,t,r,n,i,o,a){var s=r[n+0],u=r[n+1],c=r[n+2];r=r[n+3];n=i[o+0];var h=i[o+1],l=i[o+2];i=i[o+3];if(r!==i||s!==n||u!==h||c!==l){o=1-a;var p=s*n+u*h+c*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;u=u*o+h*f;c=c*o+l*f;r=r*o+i*f;o===1-a&&(a=1/Math.sqrt(s*s+u*u+c*c+r*r),s*=a,u*=a,c*=a,r*=a)}e[t]=s;e[t+1]=u;e[t+2]=c;e[t+3]=r}});Object.defineProperties(s.prototype,{x:{get:function(){return this._x},set:function(e){this._x=e;this.onChangeCallback()}},y:{get:function(){return this._y},set:function(e){this._y=e;this.onChangeCallback()}},z:{get:function(){return this._z},set:function(e){this._z=e;this.onChangeCallback()}},w:{get:function(){return this._w},set:function(e){this._w=e;this.onChangeCallback()}}});Object.assign(s.prototype,{set:function(e,t,r,n){this._x=e;this._y=t;this._z=r;this._w=n;this.onChangeCallback();return this},clone:function(){return new this.constructor(this._x,this._y,this._z,this._w)},copy:function(e){this._x=e.x;this._y=e.y;this._z=e.z;this._w=e.w;this.onChangeCallback();return this},setFromEuler:function(e,t){if(!e||!e.isEuler)throw Error("THREE.Quaternion: .setFromEuler() now expects an Euler rotation rather than a Vector3 and order.");var r=e._x,n=e._y,i=e._z;e=e.order;var o=Math.cos,a=Math.sin,s=o(r/2),u=o(n/2);o=o(i/2);r=a(r/2);n=a(n/2);i=a(i/2);"XYZ"===e?(this._x=r*u*o+s*n*i,this._y=s*n*o-r*u*i,this._z=s*u*i+r*n*o,this._w=s*u*o-r*n*i):"YXZ"===e?(this._x=r*u*o+s*n*i,this._y=s*n*o-r*u*i,this._z=s*u*i-r*n*o,this._w=s*u*o+r*n*i):"ZXY"===e?(this._x=r*u*o-s*n*i,this._y=s*n*o+r*u*i,this._z=s*u*i+r*n*o,this._w=s*u*o-r*n*i):"ZYX"===e?(this._x=r*u*o-s*n*i,this._y=s*n*o+r*u*i,this._z=s*u*i-r*n*o,this._w=s*u*o+r*n*i):"YZX"===e?(this._x=r*u*o+s*n*i,this._y=s*n*o+r*u*i,this._z=s*u*i-r*n*o,this._w=s*u*o-r*n*i):"XZY"===e&&(this._x=r*u*o-s*n*i,this._y=s*n*o-r*u*i,this._z=s*u*i+r*n*o,this._w=s*u*o+r*n*i);if(!1!==t)this.onChangeCallback();return this},setFromAxisAngle:function(e,t){t/=2;var r=Math.sin(t);this._x=e.x*r;this._y=e.y*r;this._z=e.z*r;this._w=Math.cos(t);this.onChangeCallback();return this},setFromRotationMatrix:function(e){var t=e.elements,r=t[0];e=t[4];var n=t[8],i=t[1],o=t[5],a=t[9],s=t[2],u=t[6];t=t[10];var c=r+o+t;0<c?(r=.5/Math.sqrt(c+1),this._w=.25/r,this._x=(u-a)*r,this._y=(n-s)*r,this._z=(i-e)*r):r>o&&r>t?(r=2*Math.sqrt(1+r-o-t),this._w=(u-a)/r,this._x=.25*r,this._y=(e+i)/r,this._z=(n+s)/r):o>t?(r=2*Math.sqrt(1+o-r-t),this._w=(n-s)/r,this._x=(e+i)/r,this._y=.25*r,this._z=(a+u)/r):(r=2*Math.sqrt(1+t-r-o),this._w=(i-e)/r,this._x=(n+s)/r,this._y=(a+u)/r,this._z=.25*r);this.onChangeCallback();return this},setFromUnitVectors:function(){var r=new we,n;return function(e,t){void 0===r&&(r=new we);n=e.dot(t)+1;1e-6>n?(n=0,Math.abs(e.x)>Math.abs(e.z)?r.set(-e.y,e.x,0):r.set(0,-e.z,e.y)):r.crossVectors(e,t);this._x=r.x;this._y=r.y;this._z=r.z;this._w=n;return this.normalize()}}(),angleTo:function(e){return 2*Math.acos(Math.abs(eo.clamp(this.dot(e),-1,1)))},rotateTowards:function(e,t){var r=this.angleTo(e);if(0===r)return this;this.slerp(e,Math.min(1,t/r));return this},inverse:function(){return this.conjugate()},conjugate:function(){this._x*=-1;this._y*=-1;this._z*=-1;this.onChangeCallback();return this},dot:function(e){return this._x*e._x+this._y*e._y+this._z*e._z+this._w*e._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 e=this.length();0===e?(this._z=this._y=this._x=0,this._w=1):(e=1/e,this._x*=e,this._y*=e,this._z*=e,this._w*=e);this.onChangeCallback();return this},multiply:function(e,t){return void 0!==t?(console.warn("THREE.Quaternion: .multiply() now only accepts one argument. Use .multiplyQuaternions( a, b ) instead."),this.multiplyQuaternions(e,t)):this.multiplyQuaternions(this,e)},premultiply:function(e){return this.multiplyQuaternions(e,this)},multiplyQuaternions:function(e,t){var r=e._x,n=e._y,i=e._z;e=e._w;var o=t._x,a=t._y,s=t._z;t=t._w;this._x=r*t+e*o+n*s-i*a;this._y=n*t+e*a+i*o-r*s;this._z=i*t+e*s+r*a-n*o;this._w=e*t-r*o-n*a-i*s;this.onChangeCallback();return this},slerp:function(e,t){if(0===t)return this;if(1===t)return this.copy(e);var r=this._x,n=this._y,i=this._z,o=this._w,a=o*e._w+r*e._x+n*e._y+i*e._z;0>a?(this._w=-e._w,this._x=-e._x,this._y=-e._y,this._z=-e._z,a=-a):this.copy(e);if(1<=a)return this._w=o,this._x=r,this._y=n,this._z=i,this;e=1-a*a;if(e<=Number.EPSILON)return a=1-t,this._w=a*o+t*this._w,this._x=a*r+t*this._x,this._y=a*n+t*this._y,this._z=a*i+t*this._z,this.normalize();e=Math.sqrt(e);var s=Math.atan2(e,a);a=Math.sin((1-t)*s)/e;t=Math.sin(t*s)/e;this._w=o*a+this._w*t;this._x=r*a+this._x*t;this._y=n*a+this._y*t;this._z=i*a+this._z*t;this.onChangeCallback();return this},equals:function(e){return e._x===this._x&&e._y===this._y&&e._z===this._z&&e._w===this._w},fromArray:function(e,t){void 0===t&&(t=0);this._x=e[t];this._y=e[t+1];this._z=e[t+2];this._w=e[t+3];this.onChangeCallback();return this},toArray:function(e,t){void 0===e&&(e=[]);void 0===t&&(t=0);e[t]=this._x;e[t+1]=this._y;e[t+2]=this._z;e[t+3]=this._w;return e},onChange:function(e){this.onChangeCallback=e;return this},onChangeCallback:function(){}});Object.assign(we.prototype,{isVector3:!0,set:function(e,t,r){this.x=e;this.y=t;this.z=r;return this},setScalar:function(e){this.z=this.y=this.x=e;return this},setX:function(e){this.x=e;return this},setY:function(e){this.y=e;return this},setZ:function(e){this.z=e;return this},setComponent:function(e,t){switch(e){case 0:this.x=t;break;case 1:this.y=t;break;case 2:this.z=t;break;default:throw Error("index is out of range: "+e)}return this},getComponent:function(e){switch(e){case 0:return this.x;case 1:return this.y;case 2:return this.z;default:throw Error("index is out of range: "+e)}},clone:function(){return new this.constructor(this.x,this.y,this.z)},copy:function(e){this.x=e.x;this.y=e.y;this.z=e.z;return this},add:function(e,t){if(void 0!==t)return console.warn("THREE.Vector3: .add() now only accepts one argument. Use .addVectors( a, b ) instead."),this.addVectors(e,t);this.x+=e.x;this.y+=e.y;this.z+=e.z;return this},addScalar:function(e){this.x+=e;this.y+=e;this.z+=e;return this},addVectors:function(e,t){this.x=e.x+t.x;this.y=e.y+t.y;this.z=e.z+t.z;return this},addScaledVector:function(e,t){this.x+=e.x*t;this.y+=e.y*t;this.z+=e.z*t;return this},sub:function(e,t){if(void 0!==t)return console.warn("THREE.Vector3: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."),this.subVectors(e,t);this.x-=e.x;this.y-=e.y;this.z-=e.z;return this},subScalar:function(e){this.x-=e;this.y-=e;this.z-=e;return this},subVectors:function(e,t){this.x=e.x-t.x;this.y=e.y-t.y;this.z=e.z-t.z;return this},multiply:function(e,t){if(void 0!==t)return console.warn("THREE.Vector3: .multiply() now only accepts one argument. Use .multiplyVectors( a, b ) instead."),this.multiplyVectors(e,t);this.x*=e.x;this.y*=e.y;this.z*=e.z;return this},multiplyScalar:function(e){this.x*=e;this.y*=e;this.z*=e;return this},multiplyVectors:function(e,t){this.x=e.x*t.x;this.y=e.y*t.y;this.z=e.z*t.z;return this},applyEuler:function(){var t=new s;return function(e){e&&e.isEuler||console.error("THREE.Vector3: .applyEuler() now expects an Euler rotation rather than a Vector3 and order.");return this.applyQuaternion(t.setFromEuler(e))}}(),applyAxisAngle:function(){var r=new s;return function(e,t){return this.applyQuaternion(r.setFromAxisAngle(e,t))}}(),applyMatrix3:function(e){var t=this.x,r=this.y,n=this.z;e=e.elements;this.x=e[0]*t+e[3]*r+e[6]*n;this.y=e[1]*t+e[4]*r+e[7]*n;this.z=e[2]*t+e[5]*r+e[8]*n;return this},applyMatrix4:function(e){var t=this.x,r=this.y,n=this.z;e=e.elements;var i=1/(e[3]*t+e[7]*r+e[11]*n+e[15]);this.x=(e[0]*t+e[4]*r+e[8]*n+e[12])*i;this.y=(e[1]*t+e[5]*r+e[9]*n+e[13])*i;this.z=(e[2]*t+e[6]*r+e[10]*n+e[14])*i;return this},applyQuaternion:function(e){var t=this.x,r=this.y,n=this.z,i=e.x,o=e.y,a=e.z;e=e.w;var s=e*t+o*n-a*r,u=e*r+a*t-i*n,c=e*n+i*r-o*t;t=-i*t-o*r-a*n;this.x=s*e+t*-i+u*-a-c*-o;this.y=u*e+t*-o+c*-i-s*-a;this.z=c*e+t*-a+s*-o-u*-i;return this},project:function(){var t=new xe;return function(e){t.multiplyMatrices(e.projectionMatrix,t.getInverse(e.matrixWorld));return this.applyMatrix4(t)}}(),unproject:function(){var t=new xe;return function(e){t.multiplyMatrices(e.matrixWorld,t.getInverse(e.projectionMatrix));return this.applyMatrix4(t)}}(),transformDirection:function(e){var t=this.x,r=this.y,n=this.z;e=e.elements;this.x=e[0]*t+e[4]*r+e[8]*n;this.y=e[1]*t+e[5]*r+e[9]*n;this.z=e[2]*t+e[6]*r+e[10]*n;return this.normalize()},divide:function(e){this.x/=e.x;this.y/=e.y;this.z/=e.z;return this},divideScalar:function(e){return this.multiplyScalar(1/e)},min:function(e){this.x=Math.min(this.x,e.x);this.y=Math.min(this.y,e.y);this.z=Math.min(this.z,e.z);return this},max:function(e){this.x=Math.max(this.x,e.x);this.y=Math.max(this.y,e.y);this.z=Math.max(this.z,e.z);return this},clamp:function(e,t){this.x=Math.max(e.x,Math.min(t.x,this.x));this.y=Math.max(e.y,Math.min(t.y,this.y));this.z=Math.max(e.z,Math.min(t.z,this.z));return this},clampScalar:function(){var r=new we,n=new we;return function(e,t){r.set(e,e,e);n.set(t,t,t);return this.clamp(r,n)}}(),clampLength:function(e,t){var r=this.length();return this.divideScalar(r||1).multiplyScalar(Math.max(e,Math.min(t,r)))},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):Math.floor(this.z);return this},negate:function(){this.x=-this.x;this.y=-this.y;this.z=-this.z;return this},dot:function(e){return this.x*e.x+this.y*e.y+this.z*e.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)},manhattanLength:function(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)},normalize:function(){return this.divideScalar(this.length()||1)},setLength:function(e){return this.normalize().multiplyScalar(e)},lerp:function(e,t){this.x+=(e.x-this.x)*t;this.y+=(e.y-this.y)*t;this.z+=(e.z-this.z)*t;return this},lerpVectors:function(e,t,r){return this.subVectors(t,e).multiplyScalar(r).add(e)},cross:function(e,t){return void 0!==t?(console.warn("THREE.Vector3: .cross() now only accepts one argument. Use .crossVectors( a, b ) instead."),this.crossVectors(e,t)):this.crossVectors(this,e)},crossVectors:function(e,t){var r=e.x,n=e.y;e=e.z;var i=t.x,o=t.y;t=t.z;this.x=n*t-e*o;this.y=e*i-r*t;this.z=r*o-n*i;return this},projectOnVector:function(e){var t=e.dot(this)/e.lengthSq();return this.copy(e).multiplyScalar(t)},projectOnPlane:function(){var t=new we;return function(e){t.copy(this).projectOnVector(e);return this.sub(t)}}(),reflect:function(){var t=new we;return function(e){return this.sub(t.copy(e).multiplyScalar(2*this.dot(e)))}}(),angleTo:function(e){e=this.dot(e)/Math.sqrt(this.lengthSq()*e.lengthSq());return Math.acos(eo.clamp(e,-1,1))},distanceTo:function(e){return Math.sqrt(this.distanceToSquared(e))},distanceToSquared:function(e){var t=this.x-e.x,r=this.y-e.y;e=this.z-e.z;return t*t+r*r+e*e},manhattanDistanceTo:function(e){return Math.abs(this.x-e.x)+Math.abs(this.y-e.y)+Math.abs(this.z-e.z)},setFromSpherical:function(e){var t=Math.sin(e.phi)*e.radius;this.x=t*Math.sin(e.theta);this.y=Math.cos(e.phi)*e.radius;this.z=t*Math.cos(e.theta);return this},setFromCylindrical:function(e){this.x=e.radius*Math.sin(e.theta);this.y=e.y;this.z=e.radius*Math.cos(e.theta);return this},setFromMatrixPosition:function(e){e=e.elements;this.x=e[12];this.y=e[13];this.z=e[14];return this},setFromMatrixScale:function(e){var t=this.setFromMatrixColumn(e,0).length(),r=this.setFromMatrixColumn(e,1).length();e=this.setFromMatrixColumn(e,2).length();this.x=t;this.y=r;this.z=e;return this},setFromMatrixColumn:function(e,t){return this.fromArray(e.elements,4*t)},equals:function(e){return e.x===this.x&&e.y===this.y&&e.z===this.z},fromArray:function(e,t){void 0===t&&(t=0);this.x=e[t];this.y=e[t+1];this.z=e[t+2];return this},toArray:function(e,t){void 0===e&&(e=[]);void 0===t&&(t=0);e[t]=this.x;e[t+1]=this.y;e[t+2]=this.z;return e},fromBufferAttribute:function(e,t,r){void 0!==r&&console.warn("THREE.Vector3: offset has been removed from .fromBufferAttribute().");this.x=e.getX(t);this.y=e.getY(t);this.z=e.getZ(t);return this}});Object.assign(m.prototype,{isMatrix3:!0,set:function(e,t,r,n,i,o,a,s,u){var c=this.elements;c[0]=e;c[1]=n;c[2]=a;c[3]=t;c[4]=i;c[5]=s;c[6]=r;c[7]=o;c[8]=u;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(e){var t=this.elements;e=e.elements;t[0]=e[0];t[1]=e[1];t[2]=e[2];t[3]=e[3];t[4]=e[4];t[5]=e[5];t[6]=e[6];t[7]=e[7];t[8]=e[8];return this},setFromMatrix4:function(e){e=e.elements;this.set(e[0],e[4],e[8],e[1],e[5],e[9],e[2],e[6],e[10]);return this},applyToBufferAttribute:function(){var n=new we;return function(e){for(var t=0,r=e.count;t<r;t++)n.x=e.getX(t),n.y=e.getY(t),n.z=e.getZ(t),n.applyMatrix3(this),e.setXYZ(t,n.x,n.y,n.z);return e}}(),multiply:function(e){return this.multiplyMatrices(this,e)},premultiply:function(e){return this.multiplyMatrices(e,this)},multiplyMatrices:function(e,t){var r=e.elements,n=t.elements;t=this.elements;e=r[0];var i=r[3],o=r[6],a=r[1],s=r[4],u=r[7],c=r[2],h=r[5];r=r[8];var l=n[0],p=n[3],f=n[6],d=n[1],v=n[4],m=n[7],g=n[2],y=n[5];n=n[8];t[0]=e*l+i*d+o*g;t[3]=e*p+i*v+o*y;t[6]=e*f+i*m+o*n;t[1]=a*l+s*d+u*g;t[4]=a*p+s*v+u*y;t[7]=a*f+s*m+u*n;t[2]=c*l+h*d+r*g;t[5]=c*p+h*v+r*y;t[8]=c*f+h*m+r*n;return this},multiplyScalar:function(e){var t=this.elements;t[0]*=e;t[3]*=e;t[6]*=e;t[1]*=e;t[4]*=e;t[7]*=e;t[2]*=e;t[5]*=e;t[8]*=e;return this},determinant:function(){var e=this.elements,t=e[0],r=e[1],n=e[2],i=e[3],o=e[4],a=e[5],s=e[6],u=e[7];e=e[8];return t*o*e-t*a*u-r*i*e+r*a*s+n*i*u-n*o*s},getInverse:function(e,t){e&&e.isMatrix4&&console.error("THREE.Matrix3: .getInverse() no longer takes a Matrix4 argument.");var r=e.elements;e=this.elements;var n=r[0],i=r[1],o=r[2],a=r[3],s=r[4],u=r[5],c=r[6],h=r[7];r=r[8];var l=r*s-u*h,p=u*c-r*a,f=h*a-s*c,d=n*l+i*p+o*f;if(0===d){if(!0===t)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()}t=1/d;e[0]=l*t;e[1]=(o*h-r*i)*t;e[2]=(u*i-o*s)*t;e[3]=p*t;e[4]=(r*n-o*c)*t;e[5]=(o*a-u*n)*t;e[6]=f*t;e[7]=(i*c-h*n)*t;e[8]=(s*n-i*a)*t;return this},transpose:function(){var e=this.elements;var 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;return this},getNormalMatrix:function(e){return this.setFromMatrix4(e).getInverse(this).transpose()},transposeIntoArray:function(e){var t=this.elements;e[0]=t[0];e[1]=t[3];e[2]=t[6];e[3]=t[1];e[4]=t[4];e[5]=t[7];e[6]=t[2];e[7]=t[5];e[8]=t[8];return this},setUvTransform:function(e,t,r,n,i,o,a){var s=Math.cos(i);i=Math.sin(i);this.set(r*s,r*i,-r*(s*o+i*a)+o+e,-n*i,n*s,-n*(-i*o+s*a)+a+t,0,0,1)},scale:function(e,t){var r=this.elements;r[0]*=e;r[3]*=e;r[6]*=e;r[1]*=t;r[4]*=t;r[7]*=t;return this},rotate:function(e){var t=Math.cos(e);e=Math.sin(e);var r=this.elements,n=r[0],i=r[3],o=r[6],a=r[1],s=r[4],u=r[7];r[0]=t*n+e*a;r[3]=t*i+e*s;r[6]=t*o+e*u;r[1]=-e*n+t*a;r[4]=-e*i+t*s;r[7]=-e*o+t*u;return this},translate:function(e,t){var r=this.elements;r[0]+=e*r[2];r[3]+=e*r[5];r[6]+=e*r[8];r[1]+=t*r[2];r[4]+=t*r[5];r[7]+=t*r[8];return this},equals:function(e){var t=this.elements;e=e.elements;for(var r=0;9>r;r++)if(t[r]!==e[r])return!1;return!0},fromArray:function(e,t){void 0===t&&(t=0);for(var r=0;9>r;r++)this.elements[r]=e[r+t];return this},toArray:function(e,t){void 0===e&&(e=[]);void 0===t&&(t=0);var r=this.elements;e[t]=r[0];e[t+1]=r[1];e[t+2]=r[2];e[t+3]=r[3];e[t+4]=r[4];e[t+5]=r[5];e[t+6]=r[6];e[t+7]=r[7];e[t+8]=r[8];return e}});var to={getDataURL:function(e){if(e instanceof HTMLCanvasElement)var t=e;else{"undefined"!==typeof OffscreenCanvas?t=new OffscreenCanvas(e.width,e.height):(t=document.createElementNS("http://www.w3.org/1999/xhtml","canvas"),t.width=e.width,t.height=e.height);var r=t.getContext("2d");e instanceof ImageData?r.putImageData(e,0,0):r.drawImage(e,0,0,e.width,e.height)}return 2048<t.width||2048<t.height?t.toDataURL("image/jpeg",.6):t.toDataURL("image/png")}},ro=0;p.DEFAULT_IMAGE=void 0;p.DEFAULT_MAPPING=300;p.prototype=Object.assign(Object.create(t.prototype),{constructor:p,isTexture:!0,updateMatrix:function(){this.matrix.setUvTransform(this.offset.x,this.offset.y,this.repeat.x,this.repeat.y,this.rotation,this.center.x,this.center.y)},clone:function(){return(new this.constructor).copy(this)},copy:function(e){this.name=e.name;this.image=e.image;this.mipmaps=e.mipmaps.slice(0);this.mapping=e.mapping;this.wrapS=e.wrapS;this.wrapT=e.wrapT;this.magFilter=e.magFilter;this.minFilter=e.minFilter;this.anisotropy=e.anisotropy;this.format=e.format;this.type=e.type;this.offset.copy(e.offset);this.repeat.copy(e.repeat);this.center.copy(e.center);this.rotation=e.rotation;this.matrixAutoUpdate=e.matrixAutoUpdate;this.matrix.copy(e.matrix);this.generateMipmaps=e.generateMipmaps;this.premultiplyAlpha=e.premultiplyAlpha;this.flipY=e.flipY;this.unpackAlignment=e.unpackAlignment;this.encoding=e.encoding;return this},toJSON:function(e){var t=void 0===e||"string"===typeof e;if(!t&&void 0!==e.textures[this.uuid])return e.textures[this.uuid];var r={metadata:{version:4.5,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],center:[this.center.x,this.center.y],rotation:this.rotation,wrap:[this.wrapS,this.wrapT],format:this.format,minFilter:this.minFilter,magFilter:this.magFilter,anisotropy:this.anisotropy,flipY:this.flipY};if(void 0!==this.image){var n=this.image;void 0===n.uuid&&(n.uuid=eo.generateUUID());if(!t&&void 0===e.images[n.uuid]){if(Array.isArray(n)){var i=[];for(var o=0,a=n.length;o<a;o++)i.push(to.getDataURL(n[o]))}else i=to.getDataURL(n);e.images[n.uuid]={uuid:n.uuid,url:i}}r.image=n.uuid}t||(e.textures[this.uuid]=r);return r},dispose:function(){this.dispatchEvent({type:"dispose"})},transformUv:function(e){if(300===this.mapping){e.applyMatrix3(this.matrix);if(0>e.x||1<e.x)switch(this.wrapS){case 1e3:e.x-=Math.floor(e.x);break;case 1001:e.x=0>e.x?0:1;break;case 1002:e.x=1===Math.abs(Math.floor(e.x)%2)?Math.ceil(e.x)-e.x:e.x-Math.floor(e.x)}if(0>e.y||1<e.y)switch(this.wrapT){case 1e3:e.y-=Math.floor(e.y);break;case 1001:e.y=0>e.y?0:1;break;case 1002:e.y=1===Math.abs(Math.floor(e.y)%2)?Math.ceil(e.y)-e.y:e.y-Math.floor(e.y)}this.flipY&&(e.y=1-e.y)}}});Object.defineProperty(p.prototype,"needsUpdate",{set:function(e){!0===e&&this.version++}});Object.assign(Se.prototype,{isVector4:!0,set:function(e,t,r,n){this.x=e;this.y=t;this.z=r;this.w=n;return this},setScalar:function(e){this.w=this.z=this.y=this.x=e;return this},setX:function(e){this.x=e;return this},setY:function(e){this.y=e;return this},setZ:function(e){this.z=e;return this},setW:function(e){this.w=e;return this},setComponent:function(e,t){switch(e){case 0:this.x=t;break;case 1:this.y=t;break;case 2:this.z=t;break;case 3:this.w=t;break;default:throw Error("index is out of range: "+e)}return this},getComponent:function(e){switch(e){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: "+e)}},clone:function(){return new this.constructor(this.x,this.y,this.z,this.w)},copy:function(e){this.x=e.x;this.y=e.y;this.z=e.z;this.w=void 0!==e.w?e.w:1;return this},add:function(e,t){if(void 0!==t)return console.warn("THREE.Vector4: .add() now only accepts one argument. Use .addVectors( a, b ) instead."),this.addVectors(e,t);this.x+=e.x;this.y+=e.y;this.z+=e.z;this.w+=e.w;return this},addScalar:function(e){this.x+=e;this.y+=e;this.z+=e;this.w+=e;return this},addVectors:function(e,t){this.x=e.x+t.x;this.y=e.y+t.y;this.z=e.z+t.z;this.w=e.w+t.w;return this},addScaledVector:function(e,t){this.x+=e.x*t;this.y+=e.y*t;this.z+=e.z*t;this.w+=e.w*t;return this},sub:function(e,t){if(void 0!==t)return console.warn("THREE.Vector4: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."),this.subVectors(e,t);this.x-=e.x;this.y-=e.y;this.z-=e.z;this.w-=e.w;return this},subScalar:function(e){this.x-=e;this.y-=e;this.z-=e;this.w-=e;return this},subVectors:function(e,t){this.x=e.x-t.x;this.y=e.y-t.y;this.z=e.z-t.z;this.w=e.w-t.w;return this},multiplyScalar:function(e){this.x*=e;this.y*=e;this.z*=e;this.w*=e;return this},applyMatrix4:function(e){var t=this.x,r=this.y,n=this.z,i=this.w;e=e.elements;this.x=e[0]*t+e[4]*r+e[8]*n+e[12]*i;this.y=e[1]*t+e[5]*r+e[9]*n+e[13]*i;this.z=e[2]*t+e[6]*r+e[10]*n+e[14]*i;this.w=e[3]*t+e[7]*r+e[11]*n+e[15]*i;return this},divideScalar:function(e){return this.multiplyScalar(1/e)},setAxisAngleFromQuaternion:function(e){this.w=2*Math.acos(e.w);var t=Math.sqrt(1-e.w*e.w);1e-4>t?(this.x=1,this.z=this.y=0):(this.x=e.x/t,this.y=e.y/t,this.z=e.z/t);return this},setAxisAngleFromRotationMatrix:function(e){e=e.elements;var t=e[0];var r=e[4];var n=e[8],i=e[1],o=e[5],a=e[9];var s=e[2];var u=e[6];var c=e[10];if(.01>Math.abs(r-i)&&.01>Math.abs(n-s)&&.01>Math.abs(a-u)){if(.1>Math.abs(r+i)&&.1>Math.abs(n+s)&&.1>Math.abs(a+u)&&.1>Math.abs(t+o+c-3))return this.set(1,0,0,0),this;e=Math.PI;t=(t+1)/2;o=(o+1)/2;c=(c+1)/2;r=(r+i)/4;n=(n+s)/4;a=(a+u)/4;t>o&&t>c?.01>t?(u=0,r=s=.707106781):(u=Math.sqrt(t),s=r/u,r=n/u):o>c?.01>o?(u=.707106781,s=0,r=.707106781):(s=Math.sqrt(o),u=r/s,r=a/s):.01>c?(s=u=.707106781,r=0):(r=Math.sqrt(c),u=n/r,s=a/r);this.set(u,s,r,e);return this}e=Math.sqrt((u-a)*(u-a)+(n-s)*(n-s)+(i-r)*(i-r));.001>Math.abs(e)&&(e=1);this.x=(u-a)/e;this.y=(n-s)/e;this.z=(i-r)/e;this.w=Math.acos((t+o+c-1)/2);return this},min:function(e){this.x=Math.min(this.x,e.x);this.y=Math.min(this.y,e.y);this.z=Math.min(this.z,e.z);this.w=Math.min(this.w,e.w);return this},max:function(e){this.x=Math.max(this.x,e.x);this.y=Math.max(this.y,e.y);this.z=Math.max(this.z,e.z);this.w=Math.max(this.w,e.w);return this},clamp:function(e,t){this.x=Math.max(e.x,Math.min(t.x,this.x));this.y=Math.max(e.y,Math.min(t.y,this.y));this.z=Math.max(e.z,Math.min(t.z,this.z));this.w=Math.max(e.w,Math.min(t.w,this.w));return this},clampScalar:function(){var r,n;return function(e,t){void 0===r&&(r=new Se,n=new Se);r.set(e,e,e,e);n.set(t,t,t,t);return this.clamp(r,n)}}(),clampLength:function(e,t){var r=this.length();return this.divideScalar(r||1).multiplyScalar(Math.max(e,Math.min(t,r)))},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);this.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(e){return this.x*e.x+this.y*e.y+this.z*e.z+this.w*e.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)},manhattanLength: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()||1)},setLength:function(e){return this.normalize().multiplyScalar(e)},lerp:function(e,t){this.x+=(e.x-this.x)*t;this.y+=(e.y-this.y)*t;this.z+=(e.z-this.z)*t;this.w+=(e.w-this.w)*t;return this},lerpVectors:function(e,t,r){return this.subVectors(t,e).multiplyScalar(r).add(e)},equals:function(e){return e.x===this.x&&e.y===this.y&&e.z===this.z&&e.w===this.w},fromArray:function(e,t){void 0===t&&(t=0);this.x=e[t];this.y=e[t+1];this.z=e[t+2];this.w=e[t+3];return this},toArray:function(e,t){void 0===e&&(e=[]);void 0===t&&(t=0);e[t]=this.x;e[t+1]=this.y;e[t+2]=this.z;e[t+3]=this.w;return e},fromBufferAttribute:function(e,t,r){void 0!==r&&console.warn("THREE.Vector4: offset has been removed from .fromBufferAttribute().");this.x=e.getX(t);this.y=e.getY(t);this.z=e.getZ(t);this.w=e.getW(t);return this}});T.prototype=Object.assign(Object.create(t.prototype),{constructor:T,isWebGLRenderTarget:!0,setSize:function(e,t){if(this.width!==e||this.height!==t)this.width=e,this.height=t,this.dispose();this.viewport.set(0,0,e,t);this.scissor.set(0,0,e,t)},clone:function(){return(new this.constructor).copy(this)},copy:function(e){this.width=e.width;this.height=e.height;this.viewport.copy(e.viewport);this.texture=e.texture.clone();this.depthBuffer=e.depthBuffer;this.stencilBuffer=e.stencilBuffer;this.depthTexture=e.depthTexture;return this},dispose:function(){this.dispatchEvent({type:"dispose"})}});n.prototype=Object.create(T.prototype);n.prototype.constructor=n;n.prototype.isWebGLRenderTargetCube=!0;Me.prototype=Object.create(p.prototype);Me.prototype.constructor=Me;Me.prototype.isDataTexture=!0;Object.assign(r.prototype,{isBox3:!0,set:function(e,t){this.min.copy(e);this.max.copy(t);return this},setFromArray:function(e){for(var t=Infinity,r=Infinity,n=Infinity,i=-Infinity,o=-Infinity,a=-Infinity,s=0,u=e.length;s<u;s+=3){var c=e[s],h=e[s+1],l=e[s+2];c<t&&(t=c);h<r&&(r=h);l<n&&(n=l);c>i&&(i=c);h>o&&(o=h);l>a&&(a=l)}this.min.set(t,r,n);this.max.set(i,o,a);return this},setFromBufferAttribute:function(e){for(var t=Infinity,r=Infinity,n=Infinity,i=-Infinity,o=-Infinity,a=-Infinity,s=0,u=e.count;s<u;s++){var c=e.getX(s),h=e.getY(s),l=e.getZ(s);c<t&&(t=c);h<r&&(r=h);l<n&&(n=l);c>i&&(i=c);h>o&&(o=h);l>a&&(a=l)}this.min.set(t,r,n);this.max.set(i,o,a);return this},setFromPoints:function(e){this.makeEmpty();for(var t=0,r=e.length;t<r;t++)this.expandByPoint(e[t]);return this},setFromCenterAndSize:function(){var r=new we;return function(e,t){t=r.copy(t).multiplyScalar(.5);this.min.copy(e).sub(t);this.max.copy(e).add(t);return this}}(),setFromObject:function(e){this.makeEmpty();return this.expandByObject(e)},clone:function(){return(new this.constructor).copy(this)},copy:function(e){this.min.copy(e.min);this.max.copy(e.max);return this},makeEmpty:function(){this.min.x=this.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(e){void 0===e&&(console.warn("THREE.Box3: .getCenter() target is now required"),e=new we);return this.isEmpty()?e.set(0,0,0):e.addVectors(this.min,this.max).multiplyScalar(.5)},getSize:function(e){void 0===e&&(console.warn("THREE.Box3: .getSize() target is now required"),e=new we);return this.isEmpty()?e.set(0,0,0):e.subVectors(this.max,this.min)},expandByPoint:function(e){this.min.min(e);this.max.max(e);return this},expandByVector:function(e){this.min.sub(e);this.max.add(e);return this},expandByScalar:function(e){this.min.addScalar(-e);this.max.addScalar(e);return this},expandByObject:function(){function t(e){var t=e.geometry;if(void 0!==t)if(t.isGeometry)for(t=t.vertices,n=0,i=t.length;n<i;n++)o.copy(t[n]),o.applyMatrix4(e.matrixWorld),r.expandByPoint(o);else if(t.isBufferGeometry&&(t=t.attributes.position,void 0!==t))for(n=0,i=t.count;n<i;n++)o.fromBufferAttribute(t,n).applyMatrix4(e.matrixWorld),r.expandByPoint(o)}var r,n,i,o=new we;return function(e){r=this;e.updateMatrixWorld(!0);e.traverse(t);return this}}(),containsPoint:function(e){return e.x<this.min.x||e.x>this.max.x||e.y<this.min.y||e.y>this.max.y||e.z<this.min.z||e.z>this.max.z?!1:!0},containsBox:function(e){return this.min.x<=e.min.x&&e.max.x<=this.max.x&&this.min.y<=e.min.y&&e.max.y<=this.max.y&&this.min.z<=e.min.z&&e.max.z<=this.max.z},getParameter:function(e,t){void 0===t&&(console.warn("THREE.Box3: .getParameter() target is now required"),t=new we);return t.set((e.x-this.min.x)/(this.max.x-this.min.x),(e.y-this.min.y)/(this.max.y-this.min.y),(e.z-this.min.z)/(this.max.z-this.min.z))},intersectsBox:function(e){return e.max.x<this.min.x||e.min.x>this.max.x||e.max.y<this.min.y||e.min.y>this.max.y||e.max.z<this.min.z||e.min.z>this.max.z?!1:!0},intersectsSphere:function(){var t=new we;return function(e){this.clampPoint(e.center,t);return t.distanceToSquared(e.center)<=e.radius*e.radius}}(),intersectsPlane:function(e){if(0<e.normal.x){var t=e.normal.x*this.min.x;var r=e.normal.x*this.max.x}else t=e.normal.x*this.max.x,r=e.normal.x*this.min.x;0<e.normal.y?(t+=e.normal.y*this.min.y,r+=e.normal.y*this.max.y):(t+=e.normal.y*this.max.y,r+=e.normal.y*this.min.y);0<e.normal.z?(t+=e.normal.z*this.min.z,r+=e.normal.z*this.max.z):(t+=e.normal.z*this.max.z,r+=e.normal.z*this.min.z);return t<=e.constant&&r>=e.constant},intersectsTriangle:function(){function t(e){var t;var r=0;for(t=e.length-3;r<=t;r+=3){h.fromArray(e,r);var n=l.x*Math.abs(h.x)+l.y*Math.abs(h.y)+l.z*Math.abs(h.z),i=s.dot(h),o=u.dot(h),a=c.dot(h);if(Math.max(-Math.max(i,o,a),Math.min(i,o,a))>n)return!1}return!0}var s=new we,u=new we,c=new we,r=new we,n=new we,i=new we,h=new we,o=new we,l=new we,a=new we;return function(e){if(this.isEmpty())return!1;this.getCenter(o);l.subVectors(this.max,o);s.subVectors(e.a,o);u.subVectors(e.b,o);c.subVectors(e.c,o);r.subVectors(u,s);n.subVectors(c,u);i.subVectors(s,c);e=[0,-r.z,r.y,0,-n.z,n.y,0,-i.z,i.y,r.z,0,-r.x,n.z,0,-n.x,i.z,0,-i.x,-r.y,r.x,0,-n.y,n.x,0,-i.y,i.x,0];if(!t(e))return!1;e=[1,0,0,0,1,0,0,0,1];if(!t(e))return!1;a.crossVectors(r,n);e=[a.x,a.y,a.z];return t(e)}}(),clampPoint:function(e,t){void 0===t&&(console.warn("THREE.Box3: .clampPoint() target is now required"),t=new we);return t.copy(e).clamp(this.min,this.max)},distanceToPoint:function(){var t=new we;return function(e){return t.copy(e).clamp(this.min,this.max).sub(e).length()}}(),getBoundingSphere:function(){var t=new we;return function(e){void 0===e&&(console.warn("THREE.Box3: .getBoundingSphere() target is now required"),e=new c);this.getCenter(e.center);e.radius=.5*this.getSize(t).length();return e}}(),intersect:function(e){this.min.max(e.min);this.max.min(e.max);this.isEmpty()&&this.makeEmpty();return this},union:function(e){this.min.min(e.min);this.max.max(e.max);return this},applyMatrix4:function(e){if(this.isEmpty())return this;e=e.elements;var t=e[0]*this.min.x,r=e[1]*this.min.x,n=e[2]*this.min.x,i=e[0]*this.max.x,o=e[1]*this.max.x,a=e[2]*this.max.x,s=e[4]*this.min.y,u=e[5]*this.min.y,c=e[6]*this.min.y,h=e[4]*this.max.y,l=e[5]*this.max.y,p=e[6]*this.max.y,f=e[8]*this.min.z,d=e[9]*this.min.z,v=e[10]*this.min.z,m=e[8]*this.max.z,g=e[9]*this.max.z,y=e[10]*this.max.z;this.min.x=Math.min(t,i)+Math.min(s,h)+Math.min(f,m)+e[12];this.min.y=Math.min(r,o)+Math.min(u,l)+Math.min(d,g)+e[13];this.min.z=Math.min(n,a)+Math.min(c,p)+Math.min(v,y)+e[14];this.max.x=Math.max(t,i)+Math.max(s,h)+Math.max(f,m)+e[12];this.max.y=Math.max(r,o)+Math.max(u,l)+Math.max(d,g)+e[13];this.max.z=Math.max(n,a)+Math.max(c,p)+Math.max(v,y)+e[14];return this},translate:function(e){this.min.add(e);this.max.add(e);return this},equals:function(e){return e.min.equals(this.min)&&e.max.equals(this.max)}});Object.assign(c.prototype,{set:function(e,t){this.center.copy(e);this.radius=t;return this},setFromPoints:function(){var o=new r;return function(e,t){var r=this.center;void 0!==t?r.copy(t):o.setFromPoints(e).getCenter(r);for(var n=t=0,i=e.length;n<i;n++)t=Math.max(t,r.distanceToSquared(e[n]));this.radius=Math.sqrt(t);return this}}(),clone:function(){return(new this.constructor).copy(this)},copy:function(e){this.center.copy(e.center);this.radius=e.radius;return this},empty:function(){return 0>=this.radius},containsPoint:function(e){return e.distanceToSquared(this.center)<=this.radius*this.radius},distanceToPoint:function(e){return e.distanceTo(this.center)-this.radius},intersectsSphere:function(e){var t=this.radius+e.radius;return e.center.distanceToSquared(this.center)<=t*t},intersectsBox:function(e){return e.intersectsSphere(this)},intersectsPlane:function(e){return Math.abs(e.distanceToPoint(this.center))<=this.radius},clampPoint:function(e,t){var r=this.center.distanceToSquared(e);void 0===t&&(console.warn("THREE.Sphere: .clampPoint() target is now required"),t=new we);t.copy(e);r>this.radius*this.radius&&(t.sub(this.center).normalize(),t.multiplyScalar(this.radius).add(this.center));return t},getBoundingBox:function(e){void 0===e&&(console.warn("THREE.Sphere: .getBoundingBox() target is now required"),e=new r);e.set(this.center,this.center);e.expandByScalar(this.radius);return e},applyMatrix4:function(e){this.center.applyMatrix4(e);this.radius*=e.getMaxScaleOnAxis();return this},translate:function(e){this.center.add(e);return this},equals:function(e){return e.center.equals(this.center)&&e.radius===this.radius}});Object.assign(g.prototype,{set:function(e,t){this.normal.copy(e);this.constant=t;return this},setComponents:function(e,t,r,n){this.normal.set(e,t,r);this.constant=n;return this},setFromNormalAndCoplanarPoint:function(e,t){this.normal.copy(e);this.constant=-t.dot(this.normal);return this},setFromCoplanarPoints:function(){var n=new we,i=new we;return function(e,t,r){t=n.subVectors(r,t).cross(i.subVectors(e,t)).normalize();this.setFromNormalAndCoplanarPoint(t,e);return this}}(),clone:function(){return(new this.constructor).copy(this)},copy:function(e){this.normal.copy(e.normal);this.constant=e.constant;return this},normalize:function(){var e=1/this.normal.length();this.normal.multiplyScalar(e);this.constant*=e;return this},negate:function(){this.constant*=-1;this.normal.negate();return this},distanceToPoint:function(e){return this.normal.dot(e)+this.constant},distanceToSphere:function(e){return this.distanceToPoint(e.center)-e.radius},projectPoint:function(e,t){void 0===t&&(console.warn("THREE.Plane: .projectPoint() target is now required"),t=new we);return t.copy(this.normal).multiplyScalar(-this.distanceToPoint(e)).add(e)},intersectLine:function(){var i=new we;return function(e,t){void 0===t&&(console.warn("THREE.Plane: .intersectLine() target is now required"),t=new we);var r=e.delta(i),n=this.normal.dot(r);if(0===n){if(0===this.distanceToPoint(e.start))return t.copy(e.start)}else if(n=-(e.start.dot(this.normal)+this.constant)/n,!(0>n||1<n))return t.copy(r).multiplyScalar(n).add(e.start)}}(),intersectsLine:function(e){var t=this.distanceToPoint(e.start);e=this.distanceToPoint(e.end);return 0>t&&0<e||0>e&&0<t},intersectsBox:function(e){return e.intersectsPlane(this)},intersectsSphere:function(e){return e.intersectsPlane(this)},coplanarPoint:function(e){void 0===e&&(console.warn("THREE.Plane: .coplanarPoint() target is now required"),e=new we);return e.copy(this.normal).multiplyScalar(-this.constant)},applyMatrix4:function(){var r=new we,n=new m;return function(e,t){t=t||n.getNormalMatrix(e);e=this.coplanarPoint(r).applyMatrix4(e);t=this.normal.applyMatrix3(t).normalize();this.constant=-e.dot(t);return this}}(),translate:function(e){this.constant-=e.dot(this.normal);return this},equals:function(e){return e.normal.equals(this.normal)&&e.constant===this.constant}});Object.assign(Ee.prototype,{set:function(e,t,r,n,i,o){var a=this.planes;a[0].copy(e);a[1].copy(t);a[2].copy(r);a[3].copy(n);a[4].copy(i);a[5].copy(o);return this},clone:function(){return(new this.constructor).copy(this)},copy:function(e){for(var t=this.planes,r=0;6>r;r++)t[r].copy(e.planes[r]);return this},setFromMatrix:function(e){var t=this.planes,r=e.elements;e=r[0];var n=r[1],i=r[2],o=r[3],a=r[4],s=r[5],u=r[6],c=r[7],h=r[8],l=r[9],p=r[10],f=r[11],d=r[12],v=r[13],m=r[14];r=r[15];t[0].setComponents(o-e,c-a,f-h,r-d).normalize();t[1].setComponents(o+e,c+a,f+h,r+d).normalize();t[2].setComponents(o+n,c+s,f+l,r+v).normalize();t[3].setComponents(o-n,c-s,f-l,r-v).normalize();t[4].setComponents(o-i,c-u,f-p,r-m).normalize();t[5].setComponents(o+i,c+u,f+p,r+m).normalize();return this},intersectsObject:function(){var r=new c;return function(e){var t=e.geometry;null===t.boundingSphere&&t.computeBoundingSphere();r.copy(t.boundingSphere).applyMatrix4(e.matrixWorld);return this.intersectsSphere(r)}}(),intersectsSprite:function(){var t=new c;return function(e){t.center.set(0,0,0);t.radius=.7071067811865476;t.applyMatrix4(e.matrixWorld);return this.intersectsSphere(t)}}(),intersectsSphere:function(e){var t=this.planes,r=e.center;e=-e.radius;for(var n=0;6>n;n++)if(t[n].distanceToPoint(r)<e)return!1;return!0},intersectsBox:function(){var i=new we;return function(e){for(var t=this.planes,r=0;6>r;r++){var n=t[r];i.x=0<n.normal.x?e.max.x:e.min.x;i.y=0<n.normal.y?e.max.y:e.min.y;i.z=0<n.normal.z?e.max.z:e.min.z;if(0>n.distanceToPoint(i))return!1}return!0}}(),containsPoint:function(e){for(var t=this.planes,r=0;6>r;r++)if(0>t[r].distanceToPoint(e))return!1;return!0}});var no={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\tif( decayExponent > 0.0 ) {\n#if defined ( PHYSICALLY_CORRECT_LIGHTS )\n\t\tfloat distanceFalloff = 1.0 / max( pow( lightDistance, decayExponent ), 0.01 );\n\t\tfloat maxDistanceCutoffFactor = pow2( saturate( 1.0 - pow4( lightDistance / cutoffDistance ) ) );\n\t\treturn distanceFalloff * maxDistanceCutoffFactor;\n#else\n\t\treturn pow( saturate( -lightDistance / cutoffDistance + 1.0 ), decayExponent );\n#endif\n\t}\n\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 LTC_Uv( const in vec3 N, const in vec3 V, 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\tfloat dotNV = saturate( dot( N, V ) );\n\tvec2 uv = vec2( roughness, sqrt( 1.0 - dotNV ) );\n\tuv = uv * LUT_SCALE + LUT_BIAS;\n\treturn uv;\n}\nfloat LTC_ClippedSphereFormFactor( const in vec3 f ) {\n\tfloat l = length( f );\n\treturn max( ( l * l + f.z ) / ( l + 1.0 ), 0.0 );\n}\nvec3 LTC_EdgeVectorFormFactor( const in vec3 v1, const in vec3 v2 ) {\n\tfloat x = dot( v1, v2 );\n\tfloat y = abs( x );\n\tfloat a = 0.8543985 + ( 0.4965155 + 0.0145206 * y ) * y;\n\tfloat b = 3.4175940 + ( 4.1616724 + y ) * y;\n\tfloat v = a / b;\n\tfloat theta_sintheta = ( x > 0.0 ) ? v : 0.5 * inversesqrt( max( 1.0 - x * x, 1e-7 ) ) - v;\n\treturn cross( v1, v2 ) * theta_sintheta;\n}\nvec3 LTC_Evaluate( const in vec3 N, const in vec3 V, const in vec3 P, const in mat3 mInv, const in vec3 rectCoords[ 4 ] ) {\n\tvec3 v1 = rectCoords[ 1 ] - rectCoords[ 0 ];\n\tvec3 v2 = rectCoords[ 3 ] - rectCoords[ 0 ];\n\tvec3 lightNormal = cross( v1, v2 );\n\tif( dot( lightNormal, P - rectCoords[ 0 ] ) < 0.0 ) return vec3( 0.0 );\n\tvec3 T1, T2;\n\tT1 = normalize( V - N * dot( V, N ) );\n\tT2 = - cross( N, T1 );\n\tmat3 mat = mInv * transposeMat3( mat3( T1, T2, N ) );\n\tvec3 coords[ 4 ];\n\tcoords[ 0 ] = mat * ( rectCoords[ 0 ] - P );\n\tcoords[ 1 ] = mat * ( rectCoords[ 1 ] - P );\n\tcoords[ 2 ] = mat * ( rectCoords[ 2 ] - P );\n\tcoords[ 3 ] = mat * ( rectCoords[ 3 ] - P );\n\tcoords[ 0 ] = normalize( coords[ 0 ] );\n\tcoords[ 1 ] = normalize( coords[ 1 ] );\n\tcoords[ 2 ] = normalize( coords[ 2 ] );\n\tcoords[ 3 ] = normalize( coords[ 3 ] );\n\tvec3 vectorFormFactor = vec3( 0.0 );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 0 ], coords[ 1 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 1 ], coords[ 2 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 2 ], coords[ 3 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 3 ], coords[ 0 ] );\n\tfloat result = LTC_ClippedSphereFormFactor( vectorFormFactor );\n\treturn vec3( result );\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 = vec3( dFdx( surf_pos.x ), dFdx( surf_pos.y ), dFdx( surf_pos.z ) );\n\t\tvec3 vSigmaY = vec3( dFdy( surf_pos.x ), dFdy( surf_pos.y ), dFdy( surf_pos.z ) );\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\tfDet *= ( float( gl_FrontFacing ) * 2.0 - 1.0 );\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\tvec4 plane;\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < UNION_CLIPPING_PLANES; i ++ ) {\n\t\tplane = clippingPlanes[ i ];\n\t\tif ( dot( vViewPosition, plane.xyz ) > plane.w ) discard;\n\t}\n\t#if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES\n\t\tbool clipped = true;\n\t\t#pragma unroll_loop\n\t\tfor ( int i = UNION_CLIPPING_PLANES; i < NUM_CLIPPING_PLANES; i ++ ) {\n\t\t\tplane = clippingPlanes[ i ];\n\t\t\tclipped = ( dot( vViewPosition, plane.xyz ) > plane.w ) && clipped;\n\t\t}\n\t\tif ( clipped ) discard;\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 transposeMat3( const in mat3 m ) {\n\tmat3 tmp;\n\ttmp[ 0 ] = vec3( m[ 0 ].x, m[ 1 ].x, m[ 2 ].x );\n\ttmp[ 1 ] = vec3( m[ 0 ].y, m[ 1 ].y, m[ 2 ].y );\n\ttmp[ 2 ] = vec3( m[ 0 ].z, m[ 1 ].z, m[ 2 ].z );\n\treturn tmp;\n}\nfloat linearToRelativeLuminance( const in vec3 color ) {\n\tvec3 weights = vec3( 0.2126, 0.7152, 0.0722 );\n\treturn dot( weights, color.rgb );\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( sampler2D envMap, 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:"vec3 transformedNormal = normalMatrix * objectNormal;\n#ifdef FLIP_SIDED\n\ttransformedNormal = - transformedNormal;\n#endif\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 += normalize( objectNormal ) * ( 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\treturn value;\n}\nvec4 GammaToLinear( in vec4 value, in float gammaFactor ) {\n\treturn vec4( pow( value.xyz, vec3( gammaFactor ) ), value.w );\n}\nvec4 LinearToGamma( in vec4 value, in float gammaFactor ) {\n\treturn vec4( pow( value.xyz, vec3( 1.0 / gammaFactor ) ), value.w );\n}\nvec4 sRGBToLinear( in vec4 value ) {\n\treturn 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\treturn 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\treturn vec4( value.rgb * exp2( value.a * 255.0 - 128.0 ), 1.0 );\n}\nvec4 LinearToRGBE( in vec4 value ) {\n\tfloat maxComponent = max( max( value.r, value.g ), value.b );\n\tfloat fExp = clamp( ceil( log2( maxComponent ) ), -128.0, 127.0 );\n\treturn vec4( value.rgb / exp2( fExp ), ( fExp + 128.0 ) / 255.0 );\n}\nvec4 RGBMToLinear( in vec4 value, in float maxRange ) {\n\treturn vec4( value.xyz * value.w * maxRange, 1.0 );\n}\nvec4 LinearToRGBM( in vec4 value, in float maxRange ) {\n\tfloat maxRGB = max( value.x, max( value.g, value.b ) );\n\tfloat M      = clamp( maxRGB / maxRange, 0.0, 1.0 );\n\tM            = ceil( M * 255.0 ) / 255.0;\n\treturn vec4( value.rgb / ( M * maxRange ), M );\n}\nvec4 RGBDToLinear( in vec4 value, in float maxRange ) {\n\treturn vec4( value.rgb * ( ( maxRange / 255.0 ) / value.a ), 1.0 );\n}\nvec4 LinearToRGBD( in vec4 value, in float maxRange ) {\n\tfloat maxRGB = max( value.x, max( value.g, value.b ) );\n\tfloat D      = max( maxRange / maxRGB, 1.0 );\n\tD            = min( floor( D ) / 255.0, 1.0 );\n\treturn 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\tvec3 Xp_Y_XYZp = value.rgb * cLogLuvM;\n\tXp_Y_XYZp = max(Xp_Y_XYZp, vec3(1e-6, 1e-6, 1e-6));\n\tvec4 vResult;\n\tvResult.xy = Xp_Y_XYZp.xy / Xp_Y_XYZp.z;\n\tfloat Le = 2.0 * log2(Xp_Y_XYZp.y) + 127.0;\n\tvResult.w = fract(Le);\n\tvResult.z = (Le - (floor(vResult.w*255.0))/255.0)/255.0;\n\treturn 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\tfloat Le = value.z * 255.0 + value.w;\n\tvec3 Xp_Y_XYZp;\n\tXp_Y_XYZp.y = exp2((Le - 127.0) / 2.0);\n\tXp_Y_XYZp.z = Xp_Y_XYZp.y / value.y;\n\tXp_Y_XYZp.x = value.x * Xp_Y_XYZp.z;\n\tvec3 vRGB = Xp_Y_XYZp.rgb * cLogLuvInverseM;\n\treturn 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, vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) );\n\t#elif defined( ENVMAP_TYPE_EQUIREC )\n\t\tvec2 sampleUV;\n\t\treflectVec = normalize( reflectVec );\n\t\tsampleUV.y = asin( clamp( reflectVec.y, - 1.0, 1.0 ) ) * RECIPROCAL_PI + 0.5;\n\t\tsampleUV.x = atan( reflectVec.z, reflectVec.x ) * RECIPROCAL_PI2 + 0.5;\n\t\tvec4 envColor = texture2D( envMap, sampleUV );\n\t#elif defined( ENVMAP_TYPE_SPHERE )\n\t\treflectVec = normalize( reflectVec );\n\t\tvec3 reflectView = 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\tuniform int maxMipLevel;\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_physical_pars_fragment:"#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( envMap, 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( envMap, queryReflectVec, BlinnExponentToGGXRoughness(blinnShininessExponent ));\n\t\t#elif defined( ENVMAP_TYPE_EQUIREC )\n\t\t\tvec2 sampleUV;\n\t\t\tsampleUV.y = asin( clamp( reflectVec.y, - 1.0, 1.0 ) ) * RECIPROCAL_PI + 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",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_vertex:"\n#ifdef USE_FOG\nfogDepth = -mvPosition.z;\n#endif",fog_pars_vertex:"#ifdef USE_FOG\n  varying float fogDepth;\n#endif\n",fog_fragment:"#ifdef USE_FOG\n\t#ifdef FOG_EXP2\n\t\tfloat fogFactor = whiteCompliment( exp2( - fogDensity * fogDensity * fogDepth * fogDepth * LOG2 ) );\n\t#else\n\t\tfloat fogFactor = smoothstep( fogNear, fogFar, fogDepth );\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\tvarying float fogDepth;\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\n",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\t#pragma unroll_loop\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\t#pragma unroll_loop\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_DIR_LIGHTS > 0\n\t#pragma unroll_loop\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\t#pragma unroll_loop\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_begin:"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\tfloat shadowCameraNear;\n\t\tfloat shadowCameraFar;\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 ltc_1;\tuniform sampler2D ltc_2;\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",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};\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_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\tvoid RE_Direct_RectArea_Physical( const in RectAreaLight rectAreaLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\t\tvec3 normal = geometry.normal;\n\t\tvec3 viewDir = geometry.viewDir;\n\t\tvec3 position = geometry.position;\n\t\tvec3 lightPos = rectAreaLight.position;\n\t\tvec3 halfWidth = rectAreaLight.halfWidth;\n\t\tvec3 halfHeight = rectAreaLight.halfHeight;\n\t\tvec3 lightColor = rectAreaLight.color;\n\t\tfloat roughness = material.specularRoughness;\n\t\tvec3 rectCoords[ 4 ];\n\t\trectCoords[ 0 ] = lightPos - halfWidth - halfHeight;\t\trectCoords[ 1 ] = lightPos + halfWidth - halfHeight;\n\t\trectCoords[ 2 ] = lightPos + halfWidth + halfHeight;\n\t\trectCoords[ 3 ] = lightPos - halfWidth + halfHeight;\n\t\tvec2 uv = LTC_Uv( normal, viewDir, roughness );\n\t\tvec4 t1 = texture2D( ltc_1, uv );\n\t\tvec4 t2 = texture2D( ltc_2, uv );\n\t\tmat3 mInv = mat3(\n\t\t\tvec3( t1.x, 0, t1.y ),\n\t\t\tvec3(    0, 1,    0 ),\n\t\t\tvec3( t1.z, 0, t1.w )\n\t\t);\n\t\tvec3 fresnel = ( material.specularColor * t2.x + ( vec3( 1.0 ) - material.specularColor ) * t2.y );\n\t\treflectedLight.directSpecular += lightColor * fresnel * LTC_Evaluate( normal, viewDir, position, mInv, rectCoords );\n\t\treflectedLight.directDiffuse += lightColor * material.diffuseColor * LTC_Evaluate( normal, viewDir, position, mat3( 1.0 ), rectCoords );\n\t}\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_fragment_begin:"\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\t#pragma unroll_loop\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 ], pointLight.shadowCameraNear, pointLight.shadowCameraFar ) : 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\t#pragma unroll_loop\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\t#pragma unroll_loop\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\t#pragma unroll_loop\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#if ( NUM_HEMI_LIGHTS > 0 )\n\t\t#pragma unroll_loop\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#endif\n#if defined( RE_IndirectSpecular )\n\tvec3 radiance = vec3( 0.0 );\n\tvec3 clearCoatRadiance = vec3( 0.0 );\n#endif\n",lights_fragment_maps:"#if defined( RE_IndirectDiffuse )\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 defined( USE_ENVMAP ) && defined( PHYSICAL ) && defined( ENVMAP_TYPE_CUBE_UV )\n\t\tirradiance += getLightProbeIndirectIrradiance( geometry, maxMipLevel );\n\t#endif\n#endif\n#if defined( USE_ENVMAP ) && defined( RE_IndirectSpecular )\n\tradiance += getLightProbeIndirectRadiance( geometry, Material_BlinnShininessExponent( material ), maxMipLevel );\n\t#ifndef STANDARD\n\t\tclearCoatRadiance += getLightProbeIndirectRadiance( geometry, Material_ClearCoat_BlinnShininessExponent( material ), maxMipLevel );\n\t#endif\n#endif\n",lights_fragment_end:"#if defined( RE_IndirectDiffuse )\n\tRE_IndirectDiffuse( irradiance, geometry, material, reflectedLight );\n#endif\n#if defined( RE_IndirectSpecular )\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\t#ifdef USE_LOGDEPTHBUF_EXT\n\t\tvFragDepth = 1.0 + gl_Position.w;\n\t#else\n\t\tgl_Position.z = log2( max( EPSILON, gl_Position.w + 1.0 ) ) * logDepthBufFC - 1.0;\n\t\tgl_Position.z *= 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\tvec2 uv = ( uvTransform * vec3( gl_PointCoord.x, 1.0 - gl_PointCoord.y, 1 ) ).xy;\n\tvec4 mapTexel = texture2D( map, uv );\n\tdiffuseColor *= mapTexelToLinear( mapTexel );\n#endif\n",map_particle_pars_fragment:"#ifdef USE_MAP\n\tuniform mat3 uvTransform;\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.b;\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_fragment_begin:"#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 );\n\t#ifdef DOUBLE_SIDED\n\t\tnormal = normal * ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t#endif\n#endif\n",normal_fragment_maps:"#ifdef USE_NORMALMAP\n\t#ifdef OBJECTSPACE_NORMALMAP\n\t\tnormal = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\n\t\t#ifdef FLIP_SIDED\n\t\t\tnormal = - normal;\n\t\t#endif\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tnormal = normal * ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t\t#endif\n\t\tnormal = normalize( normalMatrix * normal );\n\t#else\n\t\tnormal = perturbNormal2Arb( -vViewPosition, normal );\n\t#endif\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\t#ifdef OBJECTSPACE_NORMALMAP\n\t\tuniform mat3 normalMatrix;\n\t#else\n\t\tvec3 perturbNormal2Arb( vec3 eye_pos, vec3 surf_norm ) {\n\t\t\tvec3 q0 = vec3( dFdx( eye_pos.x ), dFdx( eye_pos.y ), dFdx( eye_pos.z ) );\n\t\t\tvec3 q1 = vec3( dFdy( eye_pos.x ), dFdy( eye_pos.y ), dFdy( eye_pos.z ) );\n\t\t\tvec2 st0 = dFdx( vUv.st );\n\t\t\tvec2 st1 = dFdy( vUv.st );\n\t\t\tfloat scale = sign( st1.t * st0.s - st0.t * st1.s );\n\t\t\tvec3 S = normalize( ( q0 * st1.t - q1 * st0.t ) * scale );\n\t\t\tvec3 T = normalize( ( - q0 * st1.s + q1 * st0.s ) * scale );\n\t\t\tvec3 N = normalize( surf_norm );\n\t\t\tmat3 tsn = mat3( S, T, N );\n\t\t\tvec3 mapN = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\n\t\t\tmapN.xy *= normalScale;\n\t\t\tmapN.xy *= ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t\t\treturn normalize( tsn * mapN );\n\t\t}\n\t#endif\n#endif\n",packing:"vec3 packNormalToRGB( const in vec3 normal ) {\n\treturn normalize( normal ) * 0.5 + 0.5;\n}\nvec3 unpackRGBToNormal( const in vec3 rgb ) {\n\treturn 2.0 * rgb.xyz - 1.0;\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\treturn ( viewZ + near ) / ( near - far );\n}\nfloat orthographicDepthToViewZ( const in float linearClipZ, const in float near, const in float far ) {\n\treturn linearClipZ * ( near - far ) - near;\n}\nfloat viewZToPerspectiveDepth( const in float viewZ, const in float near, const in float far ) {\n\treturn (( near + viewZ ) * far ) / (( far - near ) * viewZ );\n}\nfloat perspectiveDepthToViewZ( const in float invClipZ, const in float near, const in float far ) {\n\treturn ( 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:"vec4 mvPosition = modelViewMatrix * vec4( transformed, 1.0 );\ngl_Position = projectionMatrix * mvPosition;\n",dithering_fragment:"#if defined( DITHERING )\n  gl_FragColor.rgb = dithering( gl_FragColor.rgb );\n#endif\n",dithering_pars_fragment:"#if defined( DITHERING )\n\tvec3 dithering( vec3 color ) {\n\t\tfloat grid_position = rand( gl_FragCoord.xy );\n\t\tvec3 dither_shift_RGB = vec3( 0.25 / 255.0, -0.25 / 255.0, 0.25 / 255.0 );\n\t\tdither_shift_RGB = mix( 2.0 * dither_shift_RGB, -2.0 * dither_shift_RGB, grid_position );\n\t\treturn color + dither_shift_RGB;\n\t}\n#endif\n",roughnessmap_fragment:"float roughnessFactor = roughness;\n#ifdef USE_ROUGHNESSMAP\n\tvec4 texelRoughness = texture2D( roughnessMap, vUv );\n\troughnessFactor *= texelRoughness.g;\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\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\tfloat shadow = 1.0;\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\tshadow = (\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\tshadow = (\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\tshadow = texture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z );\n\t\t#endif\n\t\t}\n\t\treturn shadow;\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, float shadowCameraNear, float shadowCameraFar ) {\n\t\tvec2 texelSize = vec2( 1.0 ) / ( shadowMapSize * vec2( 4.0, 2.0 ) );\n\t\tvec3 lightToPosition = shadowCoord.xyz;\n\t\tfloat dp = ( length( lightToPosition ) - shadowCameraNear ) / ( shadowCameraFar - shadowCameraNear );\t\tdp += shadowBias;\n\t\tvec3 bd3D = normalize( lightToPosition );\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#endif\n",shadowmap_vertex:"#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHTS > 0\n\t#pragma unroll_loop\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\t#pragma unroll_loop\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\t#pragma unroll_loop\n\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n\t\tvPointShadowCoord[ i ] = pointShadowMatrix[ i ] * worldPosition;\n\t}\n\t#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\t#pragma unroll_loop\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\t#pragma unroll_loop\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\t#pragma unroll_loop\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 ], pointLight.shadowCameraNear, pointLight.shadowCameraFar ) : 1.0;\n\t}\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 boneTextureSize;\n\t\tmat4 getBoneMatrix( const in float i ) {\n\t\t\tfloat j = i * 4.0;\n\t\t\tfloat x = mod( j, float( boneTextureSize ) );\n\t\t\tfloat y = floor( j / float( boneTextureSize ) );\n\t\t\tfloat dx = 1.0 / float( boneTextureSize );\n\t\t\tfloat dy = 1.0 / float( boneTextureSize );\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\ttransformed = ( bindMatrixInverse * skinned ).xyz;\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:"#ifndef saturate\n\t#define saturate(a) clamp( a, 0.0, 1.0 )\n#endif\nuniform float toneMappingExposure;\nuniform float toneMappingWhitePoint;\nvec3 LinearToneMapping( vec3 color ) {\n\treturn toneMappingExposure * color;\n}\nvec3 ReinhardToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\treturn 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\tcolor *= toneMappingExposure;\n\treturn saturate( Uncharted2Helper( color ) / Uncharted2Helper( vec3( toneMappingWhitePoint ) ) );\n}\nvec3 OptimizedCineonToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\tcolor = max( vec3( 0.0 ), color - 0.004 );\n\treturn 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 mat3 uvTransform;\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 = ( uvTransform * vec3( uv, 1 ) ).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( DISTANCE ) || defined ( USE_SHADOWMAP )\n\tvec4 worldPosition = modelMatrix * vec4( transformed, 1.0 );\n#endif\n",cube_frag:"uniform samplerCube tCube;\nuniform float tFlip;\nuniform float opacity;\nvarying vec3 vWorldPosition;\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\tgl_Position.z = gl_Position.w;\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( 1.0 - 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#ifdef USE_DISPLACEMENTMAP\n\t\t#include <beginnormal_vertex>\n\t\t#include <morphnormal_vertex>\n\t\t#include <skinnormal_vertex>\n\t#endif\n\t#include <begin_vertex>\n\t#include <morphtarget_vertex>\n\t#include <skinning_vertex>\n\t#include <displacementmap_vertex>\n\t#include <project_vertex>\n\t#include <logdepthbuf_vertex>\n\t#include <clipping_planes_vertex>\n}\n",distanceRGBA_frag:"#define DISTANCE\nuniform vec3 referencePosition;\nuniform float nearDistance;\nuniform float farDistance;\nvarying vec3 vWorldPosition;\n#include <common>\n#include <packing>\n#include <uv_pars_fragment>\n#include <map_pars_fragment>\n#include <alphamap_pars_fragment>\n#include <clipping_planes_pars_fragment>\nvoid main () {\n\t#include <clipping_planes_fragment>\n\tvec4 diffuseColor = vec4( 1.0 );\n\t#include <map_fragment>\n\t#include <alphamap_fragment>\n\t#include <alphatest_fragment>\n\tfloat dist = length( vWorldPosition - referencePosition );\n\tdist = ( dist - nearDistance ) / ( farDistance - nearDistance );\n\tdist = saturate( dist );\n\tgl_FragColor = packDepthToRGBA( dist );\n}\n",distanceRGBA_vert:"#define DISTANCE\nvarying vec3 vWorldPosition;\n#include <common>\n#include <uv_pars_vertex>\n#include <displacementmap_pars_vertex>\n#include <morphtarget_pars_vertex>\n#include <skinning_pars_vertex>\n#include <clipping_planes_pars_vertex>\nvoid main() {\n\t#include <uv_vertex>\n\t#include <skinbase_vertex>\n\t#ifdef USE_DISPLACEMENTMAP\n\t\t#include <beginnormal_vertex>\n\t\t#include <morphnormal_vertex>\n\t\t#include <skinnormal_vertex>\n\t#endif\n\t#include <begin_vertex>\n\t#include <morphtarget_vertex>\n\t#include <skinning_vertex>\n\t#include <displacementmap_vertex>\n\t#include <project_vertex>\n\t#include <worldpos_vertex>\n\t#include <clipping_planes_vertex>\n\tvWorldPosition = worldPosition.xyz;\n}\n",equirect_frag:"uniform sampler2D tEquirect;\nvarying vec3 vWorldPosition;\n#include <common>\nvoid main() {\n\tvec3 direction = normalize( vWorldPosition );\n\tvec2 sampleUV;\n\tsampleUV.y = asin( clamp( direction.y, - 1.0, 1.0 ) ) * RECIPROCAL_PI + 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 <fog_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\t#include <fog_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 <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 <fog_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\t#include <fog_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 <dithering_pars_fragment>\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_begin>\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 <envmap_fragment>\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include <tonemapping_fragment>\n\t#include <encodings_fragment>\n\t#include <fog_fragment>\n\t#include <premultiplied_alpha_fragment>\n\t#include <dithering_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_begin>\n#include <color_pars_vertex>\n#include <fog_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\t#include <fog_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 <dithering_pars_fragment>\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_begin>\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_fragment_begin>\n\t#include <normal_fragment_maps>\n\t#include <emissivemap_fragment>\n\t#include <lights_phong_fragment>\n\t#include <lights_fragment_begin>\n\t#include <lights_fragment_maps>\n\t#include <lights_fragment_end>\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 <tonemapping_fragment>\n\t#include <encodings_fragment>\n\t#include <fog_fragment>\n\t#include <premultiplied_alpha_fragment>\n\t#include <dithering_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 <fog_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 <morphtarget_vertex>\n\t#include <skinning_vertex>\n\t#include <displacementmap_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\t#include <fog_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 <dithering_pars_fragment>\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 <bsdfs>\n#include <cube_uv_reflection_fragment>\n#include <envmap_pars_fragment>\n#include <envmap_physical_pars_fragment>\n#include <fog_pars_fragment>\n#include <lights_pars_begin>\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 <roughnessmap_fragment>\n\t#include <metalnessmap_fragment>\n\t#include <normal_fragment_begin>\n\t#include <normal_fragment_maps>\n\t#include <emissivemap_fragment>\n\t#include <lights_physical_fragment>\n\t#include <lights_fragment_begin>\n\t#include <lights_fragment_maps>\n\t#include <lights_fragment_end>\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 <tonemapping_fragment>\n\t#include <encodings_fragment>\n\t#include <fog_fragment>\n\t#include <premultiplied_alpha_fragment>\n\t#include <dithering_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 <fog_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 <morphtarget_vertex>\n\t#include <skinning_vertex>\n\t#include <displacementmap_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\t#include <fog_vertex>\n}\n",normal_frag:"#define NORMAL\nuniform float opacity;\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || ( defined( USE_NORMALMAP ) && ! defined( OBJECTSPACE_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_fragment_begin>\n\t#include <normal_fragment_maps>\n\tgl_FragColor = vec4( packNormalToRGB( normal ), opacity );\n}\n",normal_vert:"#define NORMAL\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || ( defined( USE_NORMALMAP ) && ! defined( OBJECTSPACE_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 <morphtarget_vertex>\n\t#include <skinning_vertex>\n\t#include <displacementmap_vertex>\n\t#include <project_vertex>\n\t#include <logdepthbuf_vertex>\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || ( defined( USE_NORMALMAP ) && ! defined( OBJECTSPACE_NORMALMAP ) )\n\tvViewPosition = - mvPosition.xyz;\n#endif\n}\n",points_frag:"uniform vec3 diffuse;\nuniform float opacity;\n#include <common>\n#include <color_pars_fragment>\n#include <map_particle_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\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 <fog_pars_vertex>\n#include <morphtarget_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 <morphtarget_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 <fog_vertex>\n}\n",shadow_frag:"uniform vec3 color;\nuniform float opacity;\n#include <common>\n#include <packing>\n#include <fog_pars_fragment>\n#include <bsdfs>\n#include <lights_pars_begin>\n#include <shadowmap_pars_fragment>\n#include <shadowmask_pars_fragment>\nvoid main() {\n\tgl_FragColor = vec4( color, opacity * ( 1.0 - getShadowMask() ) );\n\t#include <fog_fragment>\n}\n",shadow_vert:"#include <fog_pars_vertex>\n#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\t#include <fog_vertex>\n}\n",sprite_frag:"uniform vec3 diffuse;\nuniform float opacity;\n#include <common>\n#include <uv_pars_fragment>\n#include <map_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\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include <logdepthbuf_fragment>\n\t#include <map_fragment>\n\t#include <alphatest_fragment>\n\toutgoingLight = diffuseColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include <tonemapping_fragment>\n\t#include <encodings_fragment>\n\t#include <fog_fragment>\n}\n",sprite_vert:"uniform float rotation;\nuniform vec2 center;\n#include <common>\n#include <uv_pars_vertex>\n#include <fog_pars_vertex>\n#include <logdepthbuf_pars_vertex>\n#include <clipping_planes_pars_vertex>\nvoid main() {\n\t#include <uv_vertex>\n\tvec2 scale;\n\tscale.x = length( vec3( modelMatrix[ 0 ].x, modelMatrix[ 0 ].y, modelMatrix[ 0 ].z ) );\n\tscale.y = length( vec3( modelMatrix[ 1 ].x, modelMatrix[ 1 ].y, modelMatrix[ 1 ].z ) );\n\tvec2 alignedPosition = ( position.xy - ( center - vec2( 0.5 ) ) ) * scale;\n\tvec2 rotatedPosition;\n\trotatedPosition.x = cos( rotation ) * alignedPosition.x - sin( rotation ) * alignedPosition.y;\n\trotatedPosition.y = sin( rotation ) * alignedPosition.x + cos( rotation ) * alignedPosition.y;\n\tvec4 mvPosition;\n\tmvPosition = modelViewMatrix * vec4( 0.0, 0.0, 0.0, 1.0 );\n\tmvPosition.xy += rotatedPosition;\n\tgl_Position = projectionMatrix * mvPosition;\n\t#include <logdepthbuf_vertex>\n\t#include <clipping_planes_vertex>\n\t#include <fog_vertex>\n}\n"},io={merge:function(e){for(var t={},r=0;r<e.length;r++){var n=this.clone(e[r]),i;for(i in n)t[i]=n[i]}return t},clone:function(e){var t={},r;for(r in e){t[r]={};for(var n in e[r]){var i=e[r][n];i&&(i.isColor||i.isMatrix3||i.isMatrix4||i.isVector2||i.isVector3||i.isVector4||i.isTexture)?t[r][n]=i.clone():Array.isArray(i)?t[r][n]=i.slice():t[r][n]=i}}return t}},oo={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,rebeccapurple:6697881,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};Object.assign(w.prototype,{isColor:!0,r:1,g:1,b:1,set:function(e){e&&e.isColor?this.copy(e):"number"===typeof e?this.setHex(e):"string"===typeof e&&this.setStyle(e);return this},setScalar:function(e){this.b=this.g=this.r=e;return this},setHex:function(e){e=Math.floor(e);this.r=(e>>16&255)/255;this.g=(e>>8&255)/255;this.b=(e&255)/255;return this},setRGB:function(e,t,r){this.r=e;this.g=t;this.b=r;return this},setHSL:function(){function n(e,t,r){0>r&&(r+=1);1<r&&--r;return r<1/6?e+6*(t-e)*r:.5>r?t:r<2/3?e+6*(t-e)*(2/3-r):e}return function(e,t,r){e=eo.euclideanModulo(e,1);t=eo.clamp(t,0,1);r=eo.clamp(r,0,1);0===t?this.r=this.g=this.b=r:(t=.5>=r?r*(1+t):r+t-r*t,r=2*r-t,this.r=n(r,t,e+1/3),this.g=n(r,t,e),this.b=n(r,t,e-1/3));return 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)){n=parseFloat(r[1])/360;var i=parseInt(r[2],10)/100,o=parseInt(r[3],10)/100;e(r[5]);return this.setHSL(n,i,o)}}}else if(r=/^#([A-Fa-f0-9]+)$/.exec(t)){r=r[1];n=r.length;if(3===n)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}t&&0<t.length&&(r=oo[t],void 0!==r?this.setHex(r):console.warn("THREE.Color: Unknown color "+t));return this},clone:function(){return new this.constructor(this.r,this.g,this.b)},copy:function(e){this.r=e.r;this.g=e.g;this.b=e.b;return this},copyGammaToLinear:function(e,t){void 0===t&&(t=2);this.r=Math.pow(e.r,t);this.g=Math.pow(e.g,t);this.b=Math.pow(e.b,t);return this},copyLinearToGamma:function(e,t){void 0===t&&(t=2);t=0<t?1/t:1;this.r=Math.pow(e.r,t);this.g=Math.pow(e.g,t);this.b=Math.pow(e.b,t);return this},convertGammaToLinear:function(e){this.copyGammaToLinear(this,e);return this},convertLinearToGamma:function(e){this.copyLinearToGamma(this,e);return this},copySRGBToLinear:function(){function t(e){return.04045>e?.0773993808*e:Math.pow(.9478672986*e+.0521327014,2.4)}return function(e){this.r=t(e.r);this.g=t(e.g);this.b=t(e.b);return this}}(),copyLinearToSRGB:function(){function t(e){return.0031308>e?12.92*e:1.055*Math.pow(e,.41666)-.055}return function(e){this.r=t(e.r);this.g=t(e.g);this.b=t(e.b);return this}}(),convertSRGBToLinear:function(){this.copySRGBToLinear(this);return this},convertLinearToSRGB:function(){this.copyLinearToSRGB(this);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(e){void 0===e&&(console.warn("THREE.Color: .getHSL() target is now required"),e={h:0,s:0,l:0});var t=this.r,r=this.g,n=this.b,i=Math.max(t,r,n),o=Math.min(t,r,n),a,s=(o+i)/2;if(o===i)o=a=0;else{var u=i-o;o=.5>=s?u/(i+o):u/(2-i-o);switch(i){case t:a=(r-n)/u+(r<n?6:0);break;case r:a=(n-t)/u+2;break;case n:a=(t-r)/u+4}a/=6}e.h=a;e.s=o;e.l=s;return e},getStyle:function(){return"rgb("+(255*this.r|0)+","+(255*this.g|0)+","+(255*this.b|0)+")"},offsetHSL:function(){var n={};return function(e,t,r){this.getHSL(n);n.h+=e;n.s+=t;n.l+=r;this.setHSL(n.h,n.s,n.l);return this}}(),add:function(e){this.r+=e.r;this.g+=e.g;this.b+=e.b;return this},addColors:function(e,t){this.r=e.r+t.r;this.g=e.g+t.g;this.b=e.b+t.b;return this},addScalar:function(e){this.r+=e;this.g+=e;this.b+=e;return this},sub:function(e){this.r=Math.max(0,this.r-e.r);this.g=Math.max(0,this.g-e.g);this.b=Math.max(0,this.b-e.b);return this},multiply:function(e){this.r*=e.r;this.g*=e.g;this.b*=e.b;return this},multiplyScalar:function(e){this.r*=e;this.g*=e;this.b*=e;return this},lerp:function(e,t){this.r+=(e.r-this.r)*t;this.g+=(e.g-this.g)*t;this.b+=(e.b-this.b)*t;return this},equals:function(e){return e.r===this.r&&e.g===this.g&&e.b===this.b},fromArray:function(e,t){void 0===t&&(t=0);this.r=e[t];this.g=e[t+1];this.b=e[t+2];return this},toArray:function(e,t){void 0===e&&(e=[]);void 0===t&&(t=0);e[t]=this.r;e[t+1]=this.g;e[t+2]=this.b;return e},toJSON:function(){return this.getHex()}});var ao={common:{diffuse:{value:new w(15658734)},opacity:{value:1},map:{value:null},uvTransform:{value:new m},alphaMap:{value:null}},specularmap:{specularMap:{value:null}},envmap:{envMap:{value:null},flipEnvMap:{value:-1},reflectivity:{value:1},refractionRatio:{value:.98},maxMipLevel:{value:0}},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 H(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 w(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:{},shadowCameraNear:{},shadowCameraFar:{}}},pointShadowMap:{value:[]},pointShadowMatrix:{value:[]},hemisphereLights:{value:[],properties:{direction:{},skyColor:{},groundColor:{}}},rectAreaLights:{value:[],properties:{color:{},position:{},width:{},height:{}}}},points:{diffuse:{value:new w(15658734)},opacity:{value:1},size:{value:1},scale:{value:1},map:{value:null},uvTransform:{value:new m}},sprite:{diffuse:{value:new w(15658734)},opacity:{value:1},center:{value:new H(.5,.5)},rotation:{value:0},map:{value:null},uvTransform:{value:new m}}},so={basic:{uniforms:io.merge([ao.common,ao.specularmap,ao.envmap,ao.aomap,ao.lightmap,ao.fog]),vertexShader:no.meshbasic_vert,fragmentShader:no.meshbasic_frag},lambert:{uniforms:io.merge([ao.common,ao.specularmap,ao.envmap,ao.aomap,ao.lightmap,ao.emissivemap,ao.fog,ao.lights,{emissive:{value:new w(0)}}]),vertexShader:no.meshlambert_vert,fragmentShader:no.meshlambert_frag},phong:{uniforms:io.merge([ao.common,ao.specularmap,ao.envmap,ao.aomap,ao.lightmap,ao.emissivemap,ao.bumpmap,ao.normalmap,ao.displacementmap,ao.gradientmap,ao.fog,ao.lights,{emissive:{value:new w(0)},specular:{value:new w(1118481)},shininess:{value:30}}]),vertexShader:no.meshphong_vert,fragmentShader:no.meshphong_frag},standard:{uniforms:io.merge([ao.common,ao.envmap,ao.aomap,ao.lightmap,ao.emissivemap,ao.bumpmap,ao.normalmap,ao.displacementmap,ao.roughnessmap,ao.metalnessmap,ao.fog,ao.lights,{emissive:{value:new w(0)},roughness:{value:.5},metalness:{value:.5},envMapIntensity:{value:1}}]),vertexShader:no.meshphysical_vert,fragmentShader:no.meshphysical_frag},points:{uniforms:io.merge([ao.points,ao.fog]),vertexShader:no.points_vert,fragmentShader:no.points_frag},dashed:{uniforms:io.merge([ao.common,ao.fog,{scale:{value:1},dashSize:{value:1},totalSize:{value:2}}]),vertexShader:no.linedashed_vert,fragmentShader:no.linedashed_frag},depth:{uniforms:io.merge([ao.common,ao.displacementmap]),vertexShader:no.depth_vert,fragmentShader:no.depth_frag},normal:{uniforms:io.merge([ao.common,ao.bumpmap,ao.normalmap,ao.displacementmap,{opacity:{value:1}}]),vertexShader:no.normal_vert,fragmentShader:no.normal_frag},sprite:{uniforms:io.merge([ao.sprite,ao.fog]),vertexShader:no.sprite_vert,fragmentShader:no.sprite_frag},cube:{uniforms:{tCube:{value:null},tFlip:{value:-1},opacity:{value:1}},vertexShader:no.cube_vert,fragmentShader:no.cube_frag},equirect:{uniforms:{tEquirect:{value:null}},vertexShader:no.equirect_vert,fragmentShader:no.equirect_frag},distanceRGBA:{uniforms:io.merge([ao.common,ao.displacementmap,{referencePosition:{value:new we},nearDistance:{value:1},farDistance:{value:1e3}}]),vertexShader:no.distanceRGBA_vert,fragmentShader:no.distanceRGBA_frag},shadow:{uniforms:io.merge([ao.lights,ao.fog,{color:{value:new w(0)},opacity:{value:1}}]),vertexShader:no.shadow_vert,fragmentShader:no.shadow_frag}};so.physical={uniforms:io.merge([so.standard.uniforms,{clearCoat:{value:0},clearCoatRoughness:{value:0}}]),vertexShader:no.meshphysical_vert,fragmentShader:no.meshphysical_frag};i.RotationOrders="XYZ YZX ZXY XZY YXZ ZYX".split(" ");i.DefaultOrder="XYZ";Object.defineProperties(i.prototype,{x:{get:function(){return this._x},set:function(e){this._x=e;this.onChangeCallback()}},y:{get:function(){return this._y},set:function(e){this._y=e;this.onChangeCallback()}},z:{get:function(){return this._z},set:function(e){this._z=e;this.onChangeCallback()}},order:{get:function(){return this._order},set:function(e){this._order=e;this.onChangeCallback()}}});Object.assign(i.prototype,{isEuler:!0,set:function(e,t,r,n){this._x=e;this._y=t;this._z=r;this._order=n||this._order;this.onChangeCallback();return this},clone:function(){return new this.constructor(this._x,this._y,this._z,this._order)},copy:function(e){this._x=e._x;this._y=e._y;this._z=e._z;this._order=e._order;this.onChangeCallback();return this},setFromRotationMatrix:function(e,t,r){var n=eo.clamp,i=e.elements;e=i[0];var o=i[4],a=i[8],s=i[1],u=i[5],c=i[9],h=i[2],l=i[6];i=i[10];t=t||this._order;"XYZ"===t?(this._y=Math.asin(n(a,-1,1)),.99999>Math.abs(a)?(this._x=Math.atan2(-c,i),this._z=Math.atan2(-o,e)):(this._x=Math.atan2(l,u),this._z=0)):"YXZ"===t?(this._x=Math.asin(-n(c,-1,1)),.99999>Math.abs(c)?(this._y=Math.atan2(a,i),this._z=Math.atan2(s,u)):(this._y=Math.atan2(-h,e),this._z=0)):"ZXY"===t?(this._x=Math.asin(n(l,-1,1)),.99999>Math.abs(l)?(this._y=Math.atan2(-h,i),this._z=Math.atan2(-o,u)):(this._y=0,this._z=Math.atan2(s,e))):"ZYX"===t?(this._y=Math.asin(-n(h,-1,1)),.99999>Math.abs(h)?(this._x=Math.atan2(l,i),this._z=Math.atan2(s,e)):(this._x=0,this._z=Math.atan2(-o,u))):"YZX"===t?(this._z=Math.asin(n(s,-1,1)),.99999>Math.abs(s)?(this._x=Math.atan2(-c,u),this._y=Math.atan2(-h,e)):(this._x=0,this._y=Math.atan2(a,i))):"XZY"===t?(this._z=Math.asin(-n(o,-1,1)),.99999>Math.abs(o)?(this._x=Math.atan2(l,u),this._y=Math.atan2(a,e)):(this._x=Math.atan2(-c,i),this._y=0)):console.warn("THREE.Euler: .setFromRotationMatrix() given unsupported order: "+t);this._order=t;if(!1!==r)this.onChangeCallback();return this},setFromQuaternion:function(){var n=new xe;return function(e,t,r){n.makeRotationFromQuaternion(e);return this.setFromRotationMatrix(n,t,r)}}(),setFromVector3:function(e,t){return this.set(e.x,e.y,e.z,t||this._order)},reorder:function(){var t=new s;return function(e){t.setFromEuler(this);return this.setFromQuaternion(t,e)}}(),equals:function(e){return e._x===this._x&&e._y===this._y&&e._z===this._z&&e._order===this._order},fromArray:function(e){this._x=e[0];this._y=e[1];this._z=e[2];void 0!==e[3]&&(this._order=e[3]);this.onChangeCallback();return this},toArray:function(e,t){void 0===e&&(e=[]);void 0===t&&(t=0);e[t]=this._x;e[t+1]=this._y;e[t+2]=this._z;e[t+3]=this._order;return e},toVector3:function(e){return e?e.set(this._x,this._y,this._z):new we(this._x,this._y,this._z)},onChange:function(e){this.onChangeCallback=e;return this},onChangeCallback:function(){}});Object.assign(o.prototype,{set:function(e){this.mask=1<<e|0},enable:function(e){this.mask=this.mask|1<<e|0},toggle:function(e){this.mask^=1<<e|0},disable:function(e){this.mask&=~(1<<e|0)},test:function(e){return 0!==(this.mask&e.mask)}});var uo=0;h.DefaultUp=new we(0,1,0);h.DefaultMatrixAutoUpdate=!0;h.prototype=Object.assign(Object.create(t.prototype),{constructor:h,isObject3D:!0,onBeforeRender:function(){},onAfterRender:function(){},applyMatrix:function(e){this.matrix.multiplyMatrices(e,this.matrix);this.matrix.decompose(this.position,this.quaternion,this.scale)},applyQuaternion:function(e){this.quaternion.premultiply(e);return this},setRotationFromAxisAngle:function(e,t){this.quaternion.setFromAxisAngle(e,t)},setRotationFromEuler:function(e){this.quaternion.setFromEuler(e,!0)},setRotationFromMatrix:function(e){this.quaternion.setFromRotationMatrix(e)},setRotationFromQuaternion:function(e){this.quaternion.copy(e)},rotateOnAxis:function(){var r=new s;return function(e,t){r.setFromAxisAngle(e,t);this.quaternion.multiply(r);return this}}(),rotateOnWorldAxis:function(){var r=new s;return function(e,t){r.setFromAxisAngle(e,t);this.quaternion.premultiply(r);return this}}(),rotateX:function(){var t=new we(1,0,0);return function(e){return this.rotateOnAxis(t,e)}}(),rotateY:function(){var t=new we(0,1,0);return function(e){return this.rotateOnAxis(t,e)}}(),rotateZ:function(){var t=new we(0,0,1);return function(e){return this.rotateOnAxis(t,e)}}(),translateOnAxis:function(){var r=new we;return function(e,t){r.copy(e).applyQuaternion(this.quaternion);this.position.add(r.multiplyScalar(t));return this}}(),translateX:function(){var t=new we(1,0,0);return function(e){return this.translateOnAxis(t,e)}}(),translateY:function(){var t=new we(0,1,0);return function(e){return this.translateOnAxis(t,e)}}(),translateZ:function(){var t=new we(0,0,1);return function(e){return this.translateOnAxis(t,e)}}(),localToWorld:function(e){return e.applyMatrix4(this.matrixWorld)},worldToLocal:function(){var t=new xe;return function(e){return e.applyMatrix4(t.getInverse(this.matrixWorld))}}(),lookAt:function(){var n=new xe,i=new we;return function(e,t,r){e.isVector3?i.copy(e):i.set(e,t,r);this.isCamera?n.lookAt(this.position,i,this.up):n.lookAt(i,this.position,this.up);this.quaternion.setFromRotationMatrix(n)}}(),add:function(e){if(1<arguments.length){for(var t=0;t<arguments.length;t++)this.add(arguments[t]);return this}if(e===this)return console.error("THREE.Object3D.add: object can't be added as a child of itself.",e),this;e&&e.isObject3D?(null!==e.parent&&e.parent.remove(e),e.parent=this,e.dispatchEvent({type:"added"}),this.children.push(e)):console.error("THREE.Object3D.add: object not an instance of THREE.Object3D.",e);return this},remove:function(e){if(1<arguments.length){for(var t=0;t<arguments.length;t++)this.remove(arguments[t]);return this}t=this.children.indexOf(e);-1!==t&&(e.parent=null,e.dispatchEvent({type:"removed"}),this.children.splice(t,1));return this},getObjectById:function(e){return this.getObjectByProperty("id",e)},getObjectByName:function(e){return this.getObjectByProperty("name",e)},getObjectByProperty:function(e,t){if(this[e]===t)return this;for(var r=0,n=this.children.length;r<n;r++){var i=this.children[r].getObjectByProperty(e,t);if(void 0!==i)return i}},getWorldPosition:function(e){void 0===e&&(console.warn("THREE.Object3D: .getWorldPosition() target is now required"),e=new we);this.updateMatrixWorld(!0);return e.setFromMatrixPosition(this.matrixWorld)},getWorldQuaternion:function(){var t=new we,r=new we;return function(e){void 0===e&&(console.warn("THREE.Object3D: .getWorldQuaternion() target is now required"),e=new s);this.updateMatrixWorld(!0);this.matrixWorld.decompose(t,e,r);return e}}(),getWorldScale:function(){var t=new we,r=new s;return function(e){void 0===e&&(console.warn("THREE.Object3D: .getWorldScale() target is now required"),e=new we);this.updateMatrixWorld(!0);this.matrixWorld.decompose(t,r,e);return e}}(),getWorldDirection:function(){var t=new s;return function(e){void 0===e&&(console.warn("THREE.Object3D: .getWorldDirection() target is now required"),e=new we);this.getWorldQuaternion(t);return e.set(0,0,1).applyQuaternion(t)}}(),raycast:function(){},traverse:function(e){e(this);for(var t=this.children,r=0,n=t.length;r<n;r++)t[r].traverse(e)},traverseVisible:function(e){if(!1!==this.visible){e(this);for(var t=this.children,r=0,n=t.length;r<n;r++)t[r].traverseVisible(e)}},traverseAncestors:function(e){var t=this.parent;null!==t&&(e(t),t.traverseAncestors(e))},updateMatrix:function(){this.matrix.compose(this.position,this.quaternion,this.scale);this.matrixWorldNeedsUpdate=!0},updateMatrixWorld:function(e){this.matrixAutoUpdate&&this.updateMatrix();if(this.matrixWorldNeedsUpdate||e)null===this.parent?this.matrixWorld.copy(this.matrix):this.matrixWorld.multiplyMatrices(this.parent.matrixWorld,this.matrix),this.matrixWorldNeedsUpdate=!1,e=!0;for(var t=this.children,r=0,n=t.length;r<n;r++)t[r].updateMatrixWorld(e)},toJSON:function(r){function e(e,t){void 0===e[t.uuid]&&(e[t.uuid]=t.toJSON(r));return t.uuid}function t(e){var t=[],r;for(r in e){var n=e[r];delete n.metadata;t.push(n)}return t}var n=void 0===r||"string"===typeof r,i={};n&&(r={geometries:{},materials:{},textures:{},images:{},shapes:{}},i.metadata={version:4.5,type:"Object",generator:"Object3D.toJSON"});var o={};o.uuid=this.uuid;o.type=this.type;""!==this.name&&(o.name=this.name);!0===this.castShadow&&(o.castShadow=!0);!0===this.receiveShadow&&(o.receiveShadow=!0);!1===this.visible&&(o.visible=!1);!1===this.frustumCulled&&(o.frustumCulled=!1);0!==this.renderOrder&&(o.renderOrder=this.renderOrder);"{}"!==JSON.stringify(this.userData)&&(o.userData=this.userData);o.layers=this.layers.mask;o.matrix=this.matrix.toArray();!1===this.matrixAutoUpdate&&(o.matrixAutoUpdate=!1);if(this.isMesh||this.isLine||this.isPoints){o.geometry=e(r.geometries,this.geometry);var a=this.geometry.parameters;if(void 0!==a&&void 0!==a.shapes)if(a=a.shapes,Array.isArray(a))for(var s=0,u=a.length;s<u;s++)e(r.shapes,a[s]);else e(r.shapes,a)}if(void 0!==this.material)if(Array.isArray(this.material)){a=[];s=0;for(u=this.material.length;s<u;s++)a.push(e(r.materials,this.material[s]));o.material=a}else o.material=e(r.materials,this.material);if(0<this.children.length)for(o.children=[],s=0;s<this.children.length;s++)o.children.push(this.children[s].toJSON(r).object);if(n){n=t(r.geometries);s=t(r.materials);u=t(r.textures);var c=t(r.images);a=t(r.shapes);0<n.length&&(i.geometries=n);0<s.length&&(i.materials=s);0<u.length&&(i.textures=u);0<c.length&&(i.images=c);0<a.length&&(i.shapes=a)}i.object=o;return i},clone:function(e){return(new this.constructor).copy(this,e)},copy:function(e,t){void 0===t&&(t=!0);this.name=e.name;this.up.copy(e.up);this.position.copy(e.position);this.quaternion.copy(e.quaternion);this.scale.copy(e.scale);this.matrix.copy(e.matrix);this.matrixWorld.copy(e.matrixWorld);this.matrixAutoUpdate=e.matrixAutoUpdate;this.matrixWorldNeedsUpdate=e.matrixWorldNeedsUpdate;this.layers.mask=e.layers.mask;this.visible=e.visible;this.castShadow=e.castShadow;this.receiveShadow=e.receiveShadow;this.frustumCulled=e.frustumCulled;this.renderOrder=e.renderOrder;this.userData=JSON.parse(JSON.stringify(e.userData));if(!0===t)for(t=0;t<e.children.length;t++)this.add(e.children[t].clone());return this}});u.prototype=Object.assign(Object.create(h.prototype),{constructor:u,isCamera:!0,copy:function(e,t){h.prototype.copy.call(this,e,t);this.matrixWorldInverse.copy(e.matrixWorldInverse);this.projectionMatrix.copy(e.projectionMatrix);return this},getWorldDirection:function(){var t=new s;return function(e){void 0===e&&(console.warn("THREE.Camera: .getWorldDirection() target is now required"),e=new we);this.getWorldQuaternion(t);return e.set(0,0,-1).applyQuaternion(t)}}(),updateMatrixWorld:function(e){h.prototype.updateMatrixWorld.call(this,e);this.matrixWorldInverse.getInverse(this.matrixWorld)},clone:function(){return(new this.constructor).copy(this)}});f.prototype=Object.assign(Object.create(u.prototype),{constructor:f,isOrthographicCamera:!0,copy:function(e,t){u.prototype.copy.call(this,e,t);this.left=e.left;this.right=e.right;this.top=e.top;this.bottom=e.bottom;this.near=e.near;this.far=e.far;this.zoom=e.zoom;this.view=null===e.view?null:Object.assign({},e.view);return this},setViewOffset:function(e,t,r,n,i,o){null===this.view&&(this.view={enabled:!0,fullWidth:1,fullHeight:1,offsetX:0,offsetY:0,width:1,height:1});this.view.enabled=!0;this.view.fullWidth=e;this.view.fullHeight=t;this.view.offsetX=r;this.view.offsetY=n;this.view.width=i;this.view.height=o;this.updateProjectionMatrix()},clearViewOffset:function(){null!==this.view&&(this.view.enabled=!1);this.updateProjectionMatrix()},updateProjectionMatrix:function(){var e=(this.right-this.left)/(2*this.zoom),t=(this.top-this.bottom)/(2*this.zoom),r=(this.right+this.left)/2,n=(this.top+this.bottom)/2,i=r-e;r+=e;e=n+t;t=n-t;if(null!==this.view&&this.view.enabled){r=this.zoom/(this.view.width/this.view.fullWidth);t=this.zoom/(this.view.height/this.view.fullHeight);var o=(this.right-this.left)/this.view.width;n=(this.top-this.bottom)/this.view.height;i+=this.view.offsetX/r*o;r=i+this.view.width/r*o;e-=this.view.offsetY/t*n;t=e-this.view.height/t*n}this.projectionMatrix.makeOrthographic(i,r,e,t,this.near,this.far)},toJSON:function(e){e=h.prototype.toJSON.call(this,e);e.object.zoom=this.zoom;e.object.left=this.left;e.object.right=this.right;e.object.top=this.top;e.object.bottom=this.bottom;e.object.near=this.near;e.object.far=this.far;null!==this.view&&(e.object.view=Object.assign({},this.view));return e}});Object.assign(D.prototype,{clone:function(){return(new this.constructor).copy(this)},copy:function(e){this.a=e.a;this.b=e.b;this.c=e.c;this.normal.copy(e.normal);this.color.copy(e.color);this.materialIndex=e.materialIndex;for(var t=0,r=e.vertexNormals.length;t<r;t++)this.vertexNormals[t]=e.vertexNormals[t].clone();t=0;for(r=e.vertexColors.length;t<r;t++)this.vertexColors[t]=e.vertexColors[t].clone();return this}});var co=0;S.prototype=Object.assign(Object.create(t.prototype),{constructor:S,isGeometry:!0,applyMatrix:function(e){for(var t=(new m).getNormalMatrix(e),r=0,n=this.vertices.length;r<n;r++)this.vertices[r].applyMatrix4(e);r=0;for(n=this.faces.length;r<n;r++){e=this.faces[r];e.normal.applyMatrix3(t).normalize();for(var i=0,o=e.vertexNormals.length;i<o;i++)e.vertexNormals[i].applyMatrix3(t).normalize()}null!==this.boundingBox&&this.computeBoundingBox();null!==this.boundingSphere&&this.computeBoundingSphere();this.normalsNeedUpdate=this.verticesNeedUpdate=!0;return this},rotateX:function(){var t=new xe;return function(e){t.makeRotationX(e);this.applyMatrix(t);return this}}(),rotateY:function(){var t=new xe;return function(e){t.makeRotationY(e);this.applyMatrix(t);return this}}(),rotateZ:function(){var t=new xe;return function(e){t.makeRotationZ(e);this.applyMatrix(t);return this}}(),translate:function(){var n=new xe;return function(e,t,r){n.makeTranslation(e,t,r);this.applyMatrix(n);return this}}(),scale:function(){var n=new xe;return function(e,t,r){n.makeScale(e,t,r);this.applyMatrix(n);return this}}(),lookAt:function(){var t=new h;return function(e){t.lookAt(e);t.updateMatrix();this.applyMatrix(t.matrix)}}(),fromBufferGeometry:function(e){function t(e,t,r,n){var i=void 0!==s?[l[e].clone(),l[t].clone(),l[r].clone()]:[],o=void 0!==u?[a.colors[e].clone(),a.colors[t].clone(),a.colors[r].clone()]:[];n=new D(e,t,r,i,o,n);a.faces.push(n);void 0!==c&&a.faceVertexUvs[0].push([p[e].clone(),p[t].clone(),p[r].clone()]);void 0!==h&&a.faceVertexUvs[1].push([f[e].clone(),f[t].clone(),f[r].clone()])}var a=this,r=null!==e.index?e.index.array:void 0,n=e.attributes,i=n.position.array,s=void 0!==n.normal?n.normal.array:void 0,u=void 0!==n.color?n.color.array:void 0,c=void 0!==n.uv?n.uv.array:void 0,h=void 0!==n.uv2?n.uv2.array:void 0;void 0!==h&&(this.faceVertexUvs[1]=[]);for(var l=[],p=[],f=[],o=n=0;n<i.length;n+=3,o+=2)a.vertices.push(new we(i[n],i[n+1],i[n+2])),void 0!==s&&l.push(new we(s[n],s[n+1],s[n+2])),void 0!==u&&a.colors.push(new w(u[n],u[n+1],u[n+2])),void 0!==c&&p.push(new H(c[o],c[o+1])),void 0!==h&&f.push(new H(h[o],h[o+1]));var d=e.groups;if(0<d.length)for(n=0;n<d.length;n++){i=d[n];var v=i.start,m=i.count;o=v;for(v+=m;o<v;o+=3)void 0!==r?t(r[o],r[o+1],r[o+2],i.materialIndex):t(o,o+1,o+2,i.materialIndex)}else if(void 0!==r)for(n=0;n<r.length;n+=3)t(r[n],r[n+1],r[n+2]);else for(n=0;n<i.length/3;n+=3)t(n,n+1,n+2);this.computeFaceNormals();null!==e.boundingBox&&(this.boundingBox=e.boundingBox.clone());null!==e.boundingSphere&&(this.boundingSphere=e.boundingSphere.clone());return this},center:function(){var e=new we;return function(){this.computeBoundingBox();this.boundingBox.getCenter(e).negate();this.translate(e.x,e.y,e.z);return this}}(),normalize:function(){this.computeBoundingSphere();var e=this.boundingSphere.center,t=this.boundingSphere.radius;t=0===t?1:1/t;var r=new xe;r.set(t,0,0,-t*e.x,0,t,0,-t*e.y,0,0,t,-t*e.z,0,0,0,1);this.applyMatrix(r);return this},computeFaceNormals:function(){for(var e=new we,t=new we,r=0,n=this.faces.length;r<n;r++){var i=this.faces[r],o=this.vertices[i.a],a=this.vertices[i.b];e.subVectors(this.vertices[i.c],a);t.subVectors(o,a);e.cross(t);e.normalize();i.normal.copy(e)}},computeVertexNormals:function(e){void 0===e&&(e=!0);var t;var r=Array(this.vertices.length);var n=0;for(t=this.vertices.length;n<t;n++)r[n]=new we;if(e){var i=new we,o=new we;e=0;for(n=this.faces.length;e<n;e++){t=this.faces[e];var a=this.vertices[t.a];var s=this.vertices[t.b];var u=this.vertices[t.c];i.subVectors(u,s);o.subVectors(a,s);i.cross(o);r[t.a].add(i);r[t.b].add(i);r[t.c].add(i)}}else for(this.computeFaceNormals(),e=0,n=this.faces.length;e<n;e++)t=this.faces[e],r[t.a].add(t.normal),r[t.b].add(t.normal),r[t.c].add(t.normal);n=0;for(t=this.vertices.length;n<t;n++)r[n].normalize();e=0;for(n=this.faces.length;e<n;e++)t=this.faces[e],a=t.vertexNormals,3===a.length?(a[0].copy(r[t.a]),a[1].copy(r[t.b]),a[2].copy(r[t.c])):(a[0]=r[t.a].clone(),a[1]=r[t.b].clone(),a[2]=r[t.c].clone());0<this.faces.length&&(this.normalsNeedUpdate=!0)},computeFlatVertexNormals:function(){var e;this.computeFaceNormals();var t=0;for(e=this.faces.length;t<e;t++){var 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 e,t;var r=0;for(t=this.faces.length;r<t;r++){var n=this.faces[r];n.__originalFaceNormal?n.__originalFaceNormal.copy(n.normal):n.__originalFaceNormal=n.normal.clone();n.__originalVertexNormals||(n.__originalVertexNormals=[]);var i=0;for(e=n.vertexNormals.length;i<e;i++)n.__originalVertexNormals[i]?n.__originalVertexNormals[i].copy(n.vertexNormals[i]):n.__originalVertexNormals[i]=n.vertexNormals[i].clone()}var o=new S;o.faces=this.faces;i=0;for(e=this.morphTargets.length;i<e;i++){if(!this.morphNormals[i]){this.morphNormals[i]={};this.morphNormals[i].faceNormals=[];this.morphNormals[i].vertexNormals=[];n=this.morphNormals[i].faceNormals;var a=this.morphNormals[i].vertexNormals;r=0;for(t=this.faces.length;r<t;r++){var s=new we;var u={a:new we,b:new we,c:new we};n.push(s);a.push(u)}}a=this.morphNormals[i];o.vertices=this.morphTargets[i].vertices;o.computeFaceNormals();o.computeVertexNormals();r=0;for(t=this.faces.length;r<t;r++)n=this.faces[r],s=a.faceNormals[r],u=a.vertexNormals[r],s.copy(n.normal),u.a.copy(n.vertexNormals[0]),u.b.copy(n.vertexNormals[1]),u.c.copy(n.vertexNormals[2])}r=0;for(t=this.faces.length;r<t;r++)n=this.faces[r],n.normal=n.__originalFaceNormal,n.vertexNormals=n.__originalVertexNormals},computeBoundingBox:function(){null===this.boundingBox&&(this.boundingBox=new r);this.boundingBox.setFromPoints(this.vertices)},computeBoundingSphere:function(){null===this.boundingSphere&&(this.boundingSphere=new c);this.boundingSphere.setFromPoints(this.vertices)},merge:function(e,t,r){if(e&&e.isGeometry){var n,i=this.vertices.length,o=this.vertices,a=e.vertices,s=this.faces,u=e.faces,c=this.faceVertexUvs[0],h=e.faceVertexUvs[0],l=this.colors,p=e.colors;void 0===r&&(r=0);void 0!==t&&(n=(new m).getNormalMatrix(t));e=0;for(var f=a.length;e<f;e++){var d=a[e].clone();void 0!==t&&d.applyMatrix4(t);o.push(d)}e=0;for(f=p.length;e<f;e++)l.push(p[e].clone());e=0;for(f=u.length;e<f;e++){a=u[e];var v=a.vertexNormals;p=a.vertexColors;l=new D(a.a+i,a.b+i,a.c+i);l.normal.copy(a.normal);void 0!==n&&l.normal.applyMatrix3(n).normalize();t=0;for(o=v.length;t<o;t++)d=v[t].clone(),void 0!==n&&d.applyMatrix3(n).normalize(),l.vertexNormals.push(d);l.color.copy(a.color);t=0;for(o=p.length;t<o;t++)d=p[t],l.vertexColors.push(d.clone());l.materialIndex=a.materialIndex+r;s.push(l)}e=0;for(f=h.length;e<f;e++)if(r=h[e],n=[],void 0!==r){t=0;for(o=r.length;t<o;t++)n.push(r[t].clone());c.push(n)}}else console.error("THREE.Geometry.merge(): geometry not an instance of THREE.Geometry.",e)},mergeMesh:function(e){e&&e.isMesh?(e.matrixAutoUpdate&&e.updateMatrix(),this.merge(e.geometry,e.matrix)):console.error("THREE.Geometry.mergeMesh(): mesh not an instance of THREE.Mesh.",e)},mergeVertices:function(){var e={},t=[],r=[],n=Math.pow(10,4),i;var o=0;for(i=this.vertices.length;o<i;o++){var a=this.vertices[o];a=Math.round(a.x*n)+"_"+Math.round(a.y*n)+"_"+Math.round(a.z*n);void 0===e[a]?(e[a]=o,t.push(this.vertices[o]),r[o]=t.length-1):r[o]=r[e[a]]}e=[];o=0;for(i=this.faces.length;o<i;o++)for(n=this.faces[o],n.a=r[n.a],n.b=r[n.b],n.c=r[n.c],n=[n.a,n.b,n.c],a=0;3>a;a++)if(n[a]===n[(a+1)%3]){e.push(o);break}for(o=e.length-1;0<=o;o--)for(n=e[o],this.faces.splice(n,1),r=0,i=this.faceVertexUvs.length;r<i;r++)this.faceVertexUvs[r].splice(n,1);o=this.vertices.length-t.length;this.vertices=t;return o},setFromPoints:function(e){this.vertices=[];for(var t=0,r=e.length;t<r;t++){var n=e[t];this.vertices.push(new we(n.x,n.y,n.z||0))}return this},sortFacesByMaterialIndex:function(){for(var e=this.faces,t=e.length,r=0;r<t;r++)e[r]._id=r;e.sort(function(e,t){return e.materialIndex-t.materialIndex});var n=this.faceVertexUvs[0],i=this.faceVertexUvs[1],o,a;n&&n.length===t&&(o=[]);i&&i.length===t&&(a=[]);for(r=0;r<t;r++){var s=e[r]._id;o&&o.push(n[s]);a&&a.push(i[s])}o&&(this.faceVertexUvs[0]=o);a&&(this.faceVertexUvs[1]=a)},toJSON:function(){function e(e,t,r){return r?e|1<<t:e&~(1<<t)}function t(e){var t=e.x.toString()+e.y.toString()+e.z.toString();if(void 0!==c[t])return c[t];c[t]=u.length/3;u.push(e.x,e.y,e.z);return c[t]}function r(e){var t=e.r.toString()+e.g.toString()+e.b.toString();if(void 0!==l[t])return l[t];l[t]=h.length;h.push(e.getHex());return l[t]}function n(e){var t=e.x.toString()+e.y.toString();if(void 0!==f[t])return f[t];f[t]=p.length/2;p.push(e.x,e.y);return f[t]}var i={metadata:{version:4.5,type:"Geometry",generator:"Geometry.toJSON"}};i.uuid=this.uuid;i.type=this.type;""!==this.name&&(i.name=this.name);if(void 0!==this.parameters){var o=this.parameters,a;for(a in o)void 0!==o[a]&&(i[a]=o[a]);return i}o=[];for(a=0;a<this.vertices.length;a++){var s=this.vertices[a];o.push(s.x,s.y,s.z)}s=[];var u=[],c={},h=[],l={},p=[],f={};for(a=0;a<this.faces.length;a++){var d=this.faces[a],v=void 0!==this.faceVertexUvs[0][a],m=0<d.normal.length(),g=0<d.vertexNormals.length,y=1!==d.color.r||1!==d.color.g||1!==d.color.b,_=0<d.vertexColors.length,b=0;b=e(b,0,0);b=e(b,1,!0);b=e(b,2,!1);b=e(b,3,v);b=e(b,4,m);b=e(b,5,g);b=e(b,6,y);b=e(b,7,_);s.push(b);s.push(d.a,d.b,d.c);s.push(d.materialIndex);v&&(v=this.faceVertexUvs[0][a],s.push(n(v[0]),n(v[1]),n(v[2])));m&&s.push(t(d.normal));g&&(m=d.vertexNormals,s.push(t(m[0]),t(m[1]),t(m[2])));y&&s.push(r(d.color));_&&(d=d.vertexColors,s.push(r(d[0]),r(d[1]),r(d[2])))}i.data={};i.data.vertices=o;i.data.normals=u;0<h.length&&(i.data.colors=h);0<p.length&&(i.data.uvs=[p]);i.data.faces=s;return i},clone:function(){return(new S).copy(this)},copy:function(e){var t,r,n;this.vertices=[];this.colors=[];this.faces=[];this.faceVertexUvs=[[]];this.morphTargets=[];this.morphNormals=[];this.skinWeights=[];this.skinIndices=[];this.lineDistances=[];this.boundingSphere=this.boundingBox=null;this.name=e.name;var i=e.vertices;var o=0;for(t=i.length;o<t;o++)this.vertices.push(i[o].clone());i=e.colors;o=0;for(t=i.length;o<t;o++)this.colors.push(i[o].clone());i=e.faces;o=0;for(t=i.length;o<t;o++)this.faces.push(i[o].clone());o=0;for(t=e.faceVertexUvs.length;o<t;o++){var a=e.faceVertexUvs[o];void 0===this.faceVertexUvs[o]&&(this.faceVertexUvs[o]=[]);i=0;for(r=a.length;i<r;i++){var s=a[i],u=[];var c=0;for(n=s.length;c<n;c++)u.push(s[c].clone());this.faceVertexUvs[o].push(u)}}c=e.morphTargets;o=0;for(t=c.length;o<t;o++){n={};n.name=c[o].name;if(void 0!==c[o].vertices)for(n.vertices=[],i=0,r=c[o].vertices.length;i<r;i++)n.vertices.push(c[o].vertices[i].clone());if(void 0!==c[o].normals)for(n.normals=[],i=0,r=c[o].normals.length;i<r;i++)n.normals.push(c[o].normals[i].clone());this.morphTargets.push(n)}c=e.morphNormals;o=0;for(t=c.length;o<t;o++){n={};if(void 0!==c[o].vertexNormals)for(n.vertexNormals=[],i=0,r=c[o].vertexNormals.length;i<r;i++)a=c[o].vertexNormals[i],s={},s.a=a.a.clone(),s.b=a.b.clone(),s.c=a.c.clone(),n.vertexNormals.push(s);if(void 0!==c[o].faceNormals)for(n.faceNormals=[],i=0,r=c[o].faceNormals.length;i<r;i++)n.faceNormals.push(c[o].faceNormals[i].clone());this.morphNormals.push(n)}i=e.skinWeights;o=0;for(t=i.length;o<t;o++)this.skinWeights.push(i[o].clone());i=e.skinIndices;o=0;for(t=i.length;o<t;o++)this.skinIndices.push(i[o].clone());i=e.lineDistances;o=0;for(t=i.length;o<t;o++)this.lineDistances.push(i[o]);o=e.boundingBox;null!==o&&(this.boundingBox=o.clone());o=e.boundingSphere;null!==o&&(this.boundingSphere=o.clone());this.elementsNeedUpdate=e.elementsNeedUpdate;this.verticesNeedUpdate=e.verticesNeedUpdate;this.uvsNeedUpdate=e.uvsNeedUpdate;this.normalsNeedUpdate=e.normalsNeedUpdate;this.colorsNeedUpdate=e.colorsNeedUpdate;this.lineDistancesNeedUpdate=e.lineDistancesNeedUpdate;this.groupsNeedUpdate=e.groupsNeedUpdate;return this},dispose:function(){this.dispatchEvent({type:"dispose"})}});Object.defineProperty(y.prototype,"needsUpdate",{set:function(e){!0===e&&this.version++}});Object.assign(y.prototype,{isBufferAttribute:!0,onUploadCallback:function(){},setArray:function(e){if(Array.isArray(e))throw new TypeError("THREE.BufferAttribute: array should be a Typed Array.");this.count=void 0!==e?e.length/this.itemSize:0;this.array=e;return this},setDynamic:function(e){this.dynamic=e;return this},copy:function(e){this.name=e.name;this.array=new e.array.constructor(e.array);this.itemSize=e.itemSize;this.count=e.count;this.normalized=e.normalized;this.dynamic=e.dynamic;return this},copyAt:function(e,t,r){e*=this.itemSize;r*=t.itemSize;for(var n=0,i=this.itemSize;n<i;n++)this.array[e+n]=t.array[r+n];return this},copyArray:function(e){this.array.set(e);return this},copyColorsArray:function(e){for(var t=this.array,r=0,n=0,i=e.length;n<i;n++){var o=e[n];void 0===o&&(console.warn("THREE.BufferAttribute.copyColorsArray(): color is undefined",n),o=new w);t[r++]=o.r;t[r++]=o.g;t[r++]=o.b}return this},copyVector2sArray:function(e){for(var t=this.array,r=0,n=0,i=e.length;n<i;n++){var o=e[n];void 0===o&&(console.warn("THREE.BufferAttribute.copyVector2sArray(): vector is undefined",n),o=new H);t[r++]=o.x;t[r++]=o.y}return this},copyVector3sArray:function(e){for(var t=this.array,r=0,n=0,i=e.length;n<i;n++){var o=e[n];void 0===o&&(console.warn("THREE.BufferAttribute.copyVector3sArray(): vector is undefined",n),o=new we);t[r++]=o.x;t[r++]=o.y;t[r++]=o.z}return this},copyVector4sArray:function(e){for(var t=this.array,r=0,n=0,i=e.length;n<i;n++){var o=e[n];void 0===o&&(console.warn("THREE.BufferAttribute.copyVector4sArray(): vector is undefined",n),o=new Se);t[r++]=o.x;t[r++]=o.y;t[r++]=o.z;t[r++]=o.w}return this},set:function(e,t){void 0===t&&(t=0);this.array.set(e,t);return this},getX:function(e){return this.array[e*this.itemSize]},setX:function(e,t){this.array[e*this.itemSize]=t;return this},getY:function(e){return this.array[e*this.itemSize+1]},setY:function(e,t){this.array[e*this.itemSize+1]=t;return this},getZ:function(e){return this.array[e*this.itemSize+2]},setZ:function(e,t){this.array[e*this.itemSize+2]=t;return this},getW:function(e){return this.array[e*this.itemSize+3]},setW:function(e,t){this.array[e*this.itemSize+3]=t;return this},setXY:function(e,t,r){e*=this.itemSize;this.array[e+0]=t;this.array[e+1]=r;return this},setXYZ:function(e,t,r,n){e*=this.itemSize;this.array[e+0]=t;this.array[e+1]=r;this.array[e+2]=n;return this},setXYZW:function(e,t,r,n,i){e*=this.itemSize;this.array[e+0]=t;this.array[e+1]=r;this.array[e+2]=n;this.array[e+3]=i;return this},onUpload:function(e){this.onUploadCallback=e;return this},clone:function(){return new this.constructor(this.array,this.itemSize).copy(this)}});a.prototype=Object.create(y.prototype);a.prototype.constructor=a;l.prototype=Object.create(y.prototype);l.prototype.constructor=l;d.prototype=Object.create(y.prototype);d.prototype.constructor=d;v.prototype=Object.create(y.prototype);v.prototype.constructor=v;_.prototype=Object.create(y.prototype);_.prototype.constructor=_;b.prototype=Object.create(y.prototype);b.prototype.constructor=b;x.prototype=Object.create(y.prototype);x.prototype.constructor=x;P.prototype=Object.create(y.prototype);P.prototype.constructor=P;M.prototype=Object.create(y.prototype);M.prototype.constructor=M;Object.assign(E.prototype,{computeGroups:function(e){var t=[],r=void 0;e=e.faces;for(var n=0;n<e.length;n++){var i=e[n];if(i.materialIndex!==r){r=i.materialIndex;void 0!==o&&(o.count=3*n-o.start,t.push(o));var o={start:3*n,materialIndex:r}}}void 0!==o&&(o.count=3*n-o.start,t.push(o));this.groups=t},fromGeometry:function(e){var t=e.faces,r=e.vertices,n=e.faceVertexUvs,i=n[0]&&0<n[0].length,o=n[1]&&0<n[1].length,a=e.morphTargets,s=a.length;if(0<s){var u=[];for(var c=0;c<s;c++)u[c]=[];this.morphTargets.position=u}var h=e.morphNormals,l=h.length;if(0<l){var p=[];for(c=0;c<l;c++)p[c]=[];this.morphTargets.normal=p}var f=e.skinIndices,d=e.skinWeights,v=f.length===r.length,m=d.length===r.length;0<r.length&&0===t.length&&console.error("THREE.DirectGeometry: Faceless geometries are not supported.");for(c=0;c<t.length;c++){var g=t[c];this.vertices.push(r[g.a],r[g.b],r[g.c]);var y=g.vertexNormals;3===y.length?this.normals.push(y[0],y[1],y[2]):(y=g.normal,this.normals.push(y,y,y));y=g.vertexColors;3===y.length?this.colors.push(y[0],y[1],y[2]):(y=g.color,this.colors.push(y,y,y));!0===i&&(y=n[0][c],void 0!==y?this.uvs.push(y[0],y[1],y[2]):(console.warn("THREE.DirectGeometry.fromGeometry(): Undefined vertexUv ",c),this.uvs.push(new H,new H,new H)));!0===o&&(y=n[1][c],void 0!==y?this.uvs2.push(y[0],y[1],y[2]):(console.warn("THREE.DirectGeometry.fromGeometry(): Undefined vertexUv2 ",c),this.uvs2.push(new H,new H,new H)));for(y=0;y<s;y++){var _=a[y].vertices;u[y].push(_[g.a],_[g.b],_[g.c])}for(y=0;y<l;y++)_=h[y].vertexNormals[c],p[y].push(_.a,_.b,_.c);v&&this.skinIndices.push(f[g.a],f[g.b],f[g.c]);m&&this.skinWeights.push(d[g.a],d[g.b],d[g.c])}this.computeGroups(e);this.verticesNeedUpdate=e.verticesNeedUpdate;this.normalsNeedUpdate=e.normalsNeedUpdate;this.colorsNeedUpdate=e.colorsNeedUpdate;this.uvsNeedUpdate=e.uvsNeedUpdate;this.groupsNeedUpdate=e.groupsNeedUpdate;return this}});var ho=1;A.prototype=Object.assign(Object.create(t.prototype),{constructor:A,isBufferGeometry:!0,getIndex:function(){return this.index},setIndex:function(e){Array.isArray(e)?this.index=new(65535<C(e)?x:_)(e,1):this.index=e},addAttribute:function(e,t,r){if(!(t&&t.isBufferAttribute||t&&t.isInterleavedBufferAttribute))return console.warn("THREE.BufferGeometry: .addAttribute() now expects ( name, attribute )."),this.addAttribute(e,new y(t,r));if("index"===e)return console.warn("THREE.BufferGeometry.addAttribute: Use .setIndex() for index attribute."),this.setIndex(t),this;this.attributes[e]=t;return this},getAttribute:function(e){return this.attributes[e]},removeAttribute:function(e){delete this.attributes[e];return this},addGroup:function(e,t,r){this.groups.push({start:e,count:t,materialIndex:void 0!==r?r:0})},clearGroups:function(){this.groups=[]},setDrawRange:function(e,t){this.drawRange.start=e;this.drawRange.count=t},applyMatrix:function(e){var t=this.attributes.position;void 0!==t&&(e.applyToBufferAttribute(t),t.needsUpdate=!0);t=this.attributes.normal;void 0!==t&&((new m).getNormalMatrix(e).applyToBufferAttribute(t),t.needsUpdate=!0);null!==this.boundingBox&&this.computeBoundingBox();null!==this.boundingSphere&&this.computeBoundingSphere();return this},rotateX:function(){var t=new xe;return function(e){t.makeRotationX(e);this.applyMatrix(t);return this}}(),rotateY:function(){var t=new xe;return function(e){t.makeRotationY(e);this.applyMatrix(t);return this}}(),rotateZ:function(){var t=new xe;return function(e){t.makeRotationZ(e);this.applyMatrix(t);return this}}(),translate:function(){var n=new xe;return function(e,t,r){n.makeTranslation(e,t,r);this.applyMatrix(n);return this}}(),scale:function(){var n=new xe;return function(e,t,r){n.makeScale(e,t,r);this.applyMatrix(n);return this}}(),lookAt:function(){var t=new h;return function(e){t.lookAt(e);t.updateMatrix();this.applyMatrix(t.matrix)}}(),center:function(){var e=new we;return function(){this.computeBoundingBox();this.boundingBox.getCenter(e).negate();this.translate(e.x,e.y,e.z);return this}}(),setFromObject:function(e){var t=e.geometry;if(e.isPoints||e.isLine){e=new P(3*t.vertices.length,3);var r=new P(3*t.colors.length,3);this.addAttribute("position",e.copyVector3sArray(t.vertices));this.addAttribute("color",r.copyColorsArray(t.colors));t.lineDistances&&t.lineDistances.length===t.vertices.length&&(e=new P(t.lineDistances.length,1),this.addAttribute("lineDistance",e.copyArray(t.lineDistances)));null!==t.boundingSphere&&(this.boundingSphere=t.boundingSphere.clone());null!==t.boundingBox&&(this.boundingBox=t.boundingBox.clone())}else e.isMesh&&t&&t.isGeometry&&this.fromGeometry(t);return this},setFromPoints:function(e){for(var t=[],r=0,n=e.length;r<n;r++){var i=e[r];t.push(i.x,i.y,i.z||0)}this.addAttribute("position",new P(t,3));return this},updateFromObject:function(e){var t=e.geometry;if(e.isMesh){var r=t.__directGeometry;!0===t.elementsNeedUpdate&&(r=void 0,t.elementsNeedUpdate=!1);if(void 0===r)return this.fromGeometry(t);r.verticesNeedUpdate=t.verticesNeedUpdate;r.normalsNeedUpdate=t.normalsNeedUpdate;r.colorsNeedUpdate=t.colorsNeedUpdate;r.uvsNeedUpdate=t.uvsNeedUpdate;r.groupsNeedUpdate=t.groupsNeedUpdate;t.verticesNeedUpdate=!1;t.normalsNeedUpdate=!1;t.colorsNeedUpdate=!1;t.uvsNeedUpdate=!1;t.groupsNeedUpdate=!1;t=r}!0===t.verticesNeedUpdate&&(r=this.attributes.position,void 0!==r&&(r.copyVector3sArray(t.vertices),r.needsUpdate=!0),t.verticesNeedUpdate=!1);!0===t.normalsNeedUpdate&&(r=this.attributes.normal,void 0!==r&&(r.copyVector3sArray(t.normals),r.needsUpdate=!0),t.normalsNeedUpdate=!1);!0===t.colorsNeedUpdate&&(r=this.attributes.color,void 0!==r&&(r.copyColorsArray(t.colors),r.needsUpdate=!0),t.colorsNeedUpdate=!1);t.uvsNeedUpdate&&(r=this.attributes.uv,void 0!==r&&(r.copyVector2sArray(t.uvs),r.needsUpdate=!0),t.uvsNeedUpdate=!1);t.lineDistancesNeedUpdate&&(r=this.attributes.lineDistance,void 0!==r&&(r.copyArray(t.lineDistances),r.needsUpdate=!0),t.lineDistancesNeedUpdate=!1);t.groupsNeedUpdate&&(t.computeGroups(e.geometry),this.groups=t.groups,t.groupsNeedUpdate=!1);return this},fromGeometry:function(e){e.__directGeometry=(new E).fromGeometry(e);return this.fromDirectGeometry(e.__directGeometry)},fromDirectGeometry:function(e){var t=new Float32Array(3*e.vertices.length);this.addAttribute("position",new y(t,3).copyVector3sArray(e.vertices));0<e.normals.length&&(t=new Float32Array(3*e.normals.length),this.addAttribute("normal",new y(t,3).copyVector3sArray(e.normals)));0<e.colors.length&&(t=new Float32Array(3*e.colors.length),this.addAttribute("color",new y(t,3).copyColorsArray(e.colors)));0<e.uvs.length&&(t=new Float32Array(2*e.uvs.length),this.addAttribute("uv",new y(t,2).copyVector2sArray(e.uvs)));0<e.uvs2.length&&(t=new Float32Array(2*e.uvs2.length),this.addAttribute("uv2",new y(t,2).copyVector2sArray(e.uvs2)));this.groups=e.groups;for(var r in e.morphTargets){t=[];for(var n=e.morphTargets[r],i=0,o=n.length;i<o;i++){var a=n[i],s=new P(3*a.length,3);t.push(s.copyVector3sArray(a))}this.morphAttributes[r]=t}0<e.skinIndices.length&&(r=new P(4*e.skinIndices.length,4),this.addAttribute("skinIndex",r.copyVector4sArray(e.skinIndices)));0<e.skinWeights.length&&(r=new P(4*e.skinWeights.length,4),this.addAttribute("skinWeight",r.copyVector4sArray(e.skinWeights)));null!==e.boundingSphere&&(this.boundingSphere=e.boundingSphere.clone());null!==e.boundingBox&&(this.boundingBox=e.boundingBox.clone());return this},computeBoundingBox:function(){null===this.boundingBox&&(this.boundingBox=new r);var e=this.attributes.position;void 0!==e?this.boundingBox.setFromBufferAttribute(e):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 o=new r,a=new we;return function(){null===this.boundingSphere&&(this.boundingSphere=new c);var e=this.attributes.position;if(e){var t=this.boundingSphere.center;o.setFromBufferAttribute(e);o.getCenter(t);for(var r=0,n=0,i=e.count;n<i;n++)a.x=e.getX(n),a.y=e.getY(n),a.z=e.getZ(n),r=Math.max(r,t.distanceToSquared(a));this.boundingSphere.radius=Math.sqrt(r);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 e=this.index,t=this.attributes,r=this.groups;if(t.position){var n=t.position.array;if(void 0===t.normal)this.addAttribute("normal",new y(new Float32Array(n.length),3));else for(var i=t.normal.array,o=0,a=i.length;o<a;o++)i[o]=0;i=t.normal.array;var s=new we,u=new we,c=new we,h=new we,l=new we;if(e){e=e.array;0===r.length&&this.addGroup(0,e.length);for(var p=0,f=r.length;p<f;++p){o=r[p];a=o.start;var d=o.count;o=a;for(a+=d;o<a;o+=3){d=3*e[o+0];var v=3*e[o+1];var m=3*e[o+2];s.fromArray(n,d);u.fromArray(n,v);c.fromArray(n,m);h.subVectors(c,u);l.subVectors(s,u);h.cross(l);i[d]+=h.x;i[d+1]+=h.y;i[d+2]+=h.z;i[v]+=h.x;i[v+1]+=h.y;i[v+2]+=h.z;i[m]+=h.x;i[m+1]+=h.y;i[m+2]+=h.z}}}else for(o=0,a=n.length;o<a;o+=9)s.fromArray(n,o),u.fromArray(n,o+3),c.fromArray(n,o+6),h.subVectors(c,u),l.subVectors(s,u),h.cross(l),i[o]=h.x,i[o+1]=h.y,i[o+2]=h.z,i[o+3]=h.x,i[o+4]=h.y,i[o+5]=h.z,i[o+6]=h.x,i[o+7]=h.y,i[o+8]=h.z;this.normalizeNormals();t.normal.needsUpdate=!0}},merge:function(e,t){if(e&&e.isBufferGeometry){void 0===t&&(t=0,console.warn("THREE.BufferGeometry.merge(): Overwriting original geometry, starting at offset=0. Use BufferGeometryUtils.mergeBufferGeometries() for lossless merge."));var r=this.attributes,n;for(n in r)if(void 0!==e.attributes[n]){var i=r[n].array,o=e.attributes[n],a=o.array,s=0;for(o=o.itemSize*t;s<a.length;s++,o++)i[o]=a[s]}return this}console.error("THREE.BufferGeometry.merge(): geometry not an instance of THREE.BufferGeometry.",e)},normalizeNormals:function(){var n=new we;return function(){for(var e=this.attributes.normal,t=0,r=e.count;t<r;t++)n.x=e.getX(t),n.y=e.getY(t),n.z=e.getZ(t),n.normalize(),e.setXYZ(t,n.x,n.y,n.z)}}(),toNonIndexed:function(){if(null===this.index)return console.warn("THREE.BufferGeometry.toNonIndexed(): Geometry is already non-indexed."),this;var e=new A,t=this.index.array,r=this.attributes,n;for(n in r){var i=r[n],o=i.array,a=i.itemSize,s=new o.constructor(t.length*a),u=0;i=0;for(var c=t.length;i<c;i++){var h=t[i]*a;for(var l=0;l<a;l++)s[u++]=o[h++]}e.addAttribute(n,new y(s,a))}t=this.groups;i=0;for(c=t.length;i<c;i++)r=t[i],e.addGroup(r.start,r.count,r.materialIndex);return e},toJSON:function(){var e={metadata:{version:4.5,type:"BufferGeometry",generator:"BufferGeometry.toJSON"}};e.uuid=this.uuid;e.type=this.type;""!==this.name&&(e.name=this.name);0<Object.keys(this.userData).length&&(e.userData=this.userData);if(void 0!==this.parameters){var t=this.parameters;for(i in t)void 0!==t[i]&&(e[i]=t[i]);return e}e.data={attributes:{}};var r=this.index;null!==r&&(t=Array.prototype.slice.call(r.array),e.data.index={type:r.array.constructor.name,array:t});r=this.attributes;for(i in r){var n=r[i];t=Array.prototype.slice.call(n.array);e.data.attributes[i]={itemSize:n.itemSize,type:n.array.constructor.name,array:t,normalized:n.normalized}}var i=this.groups;0<i.length&&(e.data.groups=JSON.parse(JSON.stringify(i)));i=this.boundingSphere;null!==i&&(e.data.boundingSphere={center:i.center.toArray(),radius:i.radius});return e},clone:function(){return(new A).copy(this)},copy:function(e){var t;this.index=null;this.attributes={};this.morphAttributes={};this.groups=[];this.boundingSphere=this.boundingBox=null;this.name=e.name;var r=e.index;null!==r&&this.setIndex(r.clone());r=e.attributes;for(a in r)this.addAttribute(a,r[a].clone());var n=e.morphAttributes;for(a in n){var i=[],o=n[a];r=0;for(t=o.length;r<t;r++)i.push(o[r].clone());this.morphAttributes[a]=i}var a=e.groups;r=0;for(t=a.length;r<t;r++)n=a[r],this.addGroup(n.start,n.count,n.materialIndex);a=e.boundingBox;null!==a&&(this.boundingBox=a.clone());a=e.boundingSphere;null!==a&&(this.boundingSphere=a.clone());this.drawRange.start=e.drawRange.start;this.drawRange.count=e.drawRange.count;this.userData=e.userData;return this},dispose:function(){this.dispatchEvent({type:"dispose"})}});O.prototype=Object.create(S.prototype);O.prototype.constructor=O;j.prototype=Object.create(A.prototype);j.prototype.constructor=j;R.prototype=Object.create(S.prototype);R.prototype.constructor=R;L.prototype=Object.create(A.prototype);L.prototype.constructor=L;var lo=0;I.prototype=Object.assign(Object.create(t.prototype),{constructor:I,isMaterial:!0,onBeforeCompile:function(){},setValues:function(e){if(void 0!==e)for(var t in e){var r=e[t];if(void 0===r)console.warn("THREE.Material: '"+t+"' parameter is undefined.");else if("shading"===t)console.warn("THREE."+this.type+": .shading has been removed. Use the boolean .flatShading instead."),this.flatShading=1===r?!0:!1;else{var n=this[t];void 0===n?console.warn("THREE."+this.type+": '"+t+"' is not a property of this material."):n&&n.isColor?n.set(r):n&&n.isVector3&&r&&r.isVector3?n.copy(r):this[t]="overdraw"===t?Number(r):r}}},toJSON:function(e){function t(e){var t=[],r;for(r in e){var n=e[r];delete n.metadata;t.push(n)}return t}var r=void 0===e||"string"===typeof e;r&&(e={textures:{},images:{}});var n={metadata:{version:4.5,type:"Material",generator:"Material.toJSON"}};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());1!==this.emissiveIntensity&&(n.emissiveIntensity=this.emissiveIntensity);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(e).uuid);this.alphaMap&&this.alphaMap.isTexture&&(n.alphaMap=this.alphaMap.toJSON(e).uuid);this.lightMap&&this.lightMap.isTexture&&(n.lightMap=this.lightMap.toJSON(e).uuid);this.aoMap&&this.aoMap.isTexture&&(n.aoMap=this.aoMap.toJSON(e).uuid,n.aoMapIntensity=this.aoMapIntensity);this.bumpMap&&this.bumpMap.isTexture&&(n.bumpMap=this.bumpMap.toJSON(e).uuid,n.bumpScale=this.bumpScale);this.normalMap&&this.normalMap.isTexture&&(n.normalMap=this.normalMap.toJSON(e).uuid,n.normalMapType=this.normalMapType,n.normalScale=this.normalScale.toArray());this.displacementMap&&this.displacementMap.isTexture&&(n.displacementMap=this.displacementMap.toJSON(e).uuid,n.displacementScale=this.displacementScale,n.displacementBias=this.displacementBias);this.roughnessMap&&this.roughnessMap.isTexture&&(n.roughnessMap=this.roughnessMap.toJSON(e).uuid);this.metalnessMap&&this.metalnessMap.isTexture&&(n.metalnessMap=this.metalnessMap.toJSON(e).uuid);this.emissiveMap&&this.emissiveMap.isTexture&&(n.emissiveMap=this.emissiveMap.toJSON(e).uuid);this.specularMap&&this.specularMap.isTexture&&(n.specularMap=this.specularMap.toJSON(e).uuid);this.envMap&&this.envMap.isTexture&&(n.envMap=this.envMap.toJSON(e).uuid,n.reflectivity=this.reflectivity);this.gradientMap&&this.gradientMap.isTexture&&(n.gradientMap=this.gradientMap.toJSON(e).uuid);void 0!==this.size&&(n.size=this.size);void 0!==this.sizeAttenuation&&(n.sizeAttenuation=this.sizeAttenuation);1!==this.blending&&(n.blending=this.blending);!0===this.flatShading&&(n.flatShading=this.flatShading);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.rotation&&(n.rotation=this.rotation);1!==this.linewidth&&(n.linewidth=this.linewidth);void 0!==this.dashSize&&(n.dashSize=this.dashSize);void 0!==this.gapSize&&(n.gapSize=this.gapSize);void 0!==this.scale&&(n.scale=this.scale);!0===this.dithering&&(n.dithering=!0);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);!0===this.morphTargets&&(n.morphTargets=!0);!0===this.skinning&&(n.skinning=!0);!1===this.visible&&(n.visible=!1);"{}"!==JSON.stringify(this.userData)&&(n.userData=this.userData);r&&(r=t(e.textures),e=t(e.images),0<r.length&&(n.textures=r),0<e.length&&(n.images=e));return n},clone:function(){return(new this.constructor).copy(this)},copy:function(e){this.name=e.name;this.fog=e.fog;this.lights=e.lights;this.blending=e.blending;this.side=e.side;this.flatShading=e.flatShading;this.vertexColors=e.vertexColors;this.opacity=e.opacity;this.transparent=e.transparent;this.blendSrc=e.blendSrc;this.blendDst=e.blendDst;this.blendEquation=e.blendEquation;this.blendSrcAlpha=e.blendSrcAlpha;this.blendDstAlpha=e.blendDstAlpha;this.blendEquationAlpha=e.blendEquationAlpha;this.depthFunc=e.depthFunc;this.depthTest=e.depthTest;this.depthWrite=e.depthWrite;this.colorWrite=e.colorWrite;this.precision=e.precision;this.polygonOffset=e.polygonOffset;this.polygonOffsetFactor=e.polygonOffsetFactor;this.polygonOffsetUnits=e.polygonOffsetUnits;this.dithering=e.dithering;this.alphaTest=e.alphaTest;this.premultipliedAlpha=e.premultipliedAlpha;this.overdraw=e.overdraw;this.visible=e.visible;this.userData=JSON.parse(JSON.stringify(e.userData));this.clipShadows=e.clipShadows;this.clipIntersection=e.clipIntersection;var t=e.clippingPlanes,r=null;if(null!==t){var n=t.length;r=Array(n);for(var i=0;i!==n;++i)r[i]=t[i].clone()}this.clippingPlanes=r;this.shadowSide=e.shadowSide;return this},dispose:function(){this.dispatchEvent({type:"dispose"})}});N.prototype=Object.create(I.prototype);N.prototype.constructor=N;N.prototype.isMeshBasicMaterial=!0;N.prototype.copy=function(e){I.prototype.copy.call(this,e);this.color.copy(e.color);this.map=e.map;this.lightMap=e.lightMap;this.lightMapIntensity=e.lightMapIntensity;this.aoMap=e.aoMap;this.aoMapIntensity=e.aoMapIntensity;this.specularMap=e.specularMap;this.alphaMap=e.alphaMap;this.envMap=e.envMap;this.combine=e.combine;this.reflectivity=e.reflectivity;this.refractionRatio=e.refractionRatio;this.wireframe=e.wireframe;this.wireframeLinewidth=e.wireframeLinewidth;this.wireframeLinecap=e.wireframeLinecap;this.wireframeLinejoin=e.wireframeLinejoin;this.skinning=e.skinning;this.morphTargets=e.morphTargets;return this};k.prototype=Object.create(I.prototype);k.prototype.constructor=k;k.prototype.isShaderMaterial=!0;k.prototype.copy=function(e){I.prototype.copy.call(this,e);this.fragmentShader=e.fragmentShader;this.vertexShader=e.vertexShader;this.uniforms=io.clone(e.uniforms);this.defines=Object.assign({},e.defines);this.wireframe=e.wireframe;this.wireframeLinewidth=e.wireframeLinewidth;this.lights=e.lights;this.clipping=e.clipping;this.skinning=e.skinning;this.morphTargets=e.morphTargets;this.morphNormals=e.morphNormals;this.extensions=e.extensions;return this};k.prototype.toJSON=function(e){e=I.prototype.toJSON.call(this,e);e.uniforms=this.uniforms;e.vertexShader=this.vertexShader;e.fragmentShader=this.fragmentShader;return e};Object.assign(B.prototype,{set:function(e,t){this.origin.copy(e);this.direction.copy(t);return this},clone:function(){return(new this.constructor).copy(this)},copy:function(e){this.origin.copy(e.origin);this.direction.copy(e.direction);return this},at:function(e,t){void 0===t&&(console.warn("THREE.Ray: .at() target is now required"),t=new we);return t.copy(this.direction).multiplyScalar(e).add(this.origin)},lookAt:function(e){this.direction.copy(e).sub(this.origin).normalize();return this},recast:function(){var t=new we;return function(e){this.origin.copy(this.at(e,t));return this}}(),closestPointToPoint:function(e,t){void 0===t&&(console.warn("THREE.Ray: .closestPointToPoint() target is now required"),t=new we);t.subVectors(e,this.origin);e=t.dot(this.direction);return 0>e?t.copy(this.origin):t.copy(this.direction).multiplyScalar(e).add(this.origin)},distanceToPoint:function(e){return Math.sqrt(this.distanceSqToPoint(e))},distanceSqToPoint:function(){var r=new we;return function(e){var t=r.subVectors(e,this.origin).dot(this.direction);if(0>t)return this.origin.distanceToSquared(e);r.copy(this.direction).multiplyScalar(t).add(this.origin);return r.distanceToSquared(e)}}(),distanceSqToSegment:function(){var l=new we,p=new we,f=new we;return function(e,t,r,n){l.copy(e).add(t).multiplyScalar(.5);p.copy(t).sub(e).normalize();f.copy(this.origin).sub(l);var i=.5*e.distanceTo(t),o=-this.direction.dot(p),a=f.dot(this.direction),s=-f.dot(p),u=f.lengthSq(),c=Math.abs(1-o*o);if(0<c){e=o*s-a;t=o*a-s;var h=i*c;0<=e?t>=-h?t<=h?(i=1/c,e*=i,t*=i,o=e*(e+o*t+2*a)+t*(o*e+t+2*s)+u):(t=i,e=Math.max(0,-(o*t+a)),o=-e*e+t*(t+2*s)+u):(t=-i,e=Math.max(0,-(o*t+a)),o=-e*e+t*(t+2*s)+u):t<=-h?(e=Math.max(0,-(-o*i+a)),t=0<e?-i:Math.min(Math.max(-i,-s),i),o=-e*e+t*(t+2*s)+u):t<=h?(e=0,t=Math.min(Math.max(-i,-s),i),o=t*(t+2*s)+u):(e=Math.max(0,-(o*i+a)),t=0<e?i:Math.min(Math.max(-i,-s),i),o=-e*e+t*(t+2*s)+u)}else t=0<o?-i:i,e=Math.max(0,-(o*t+a)),o=-e*e+t*(t+2*s)+u;r&&r.copy(this.direction).multiplyScalar(e).add(this.origin);n&&n.copy(p).multiplyScalar(t).add(l);return o}}(),intersectSphere:function(){var i=new we;return function(e,t){i.subVectors(e.center,this.origin);var r=i.dot(this.direction),n=i.dot(i)-r*r;e=e.radius*e.radius;if(n>e)return null;e=Math.sqrt(e-n);n=r-e;r+=e;return 0>n&&0>r?null:0>n?this.at(r,t):this.at(n,t)}}(),intersectsSphere:function(e){return this.distanceToPoint(e.center)<=e.radius},distanceToPlane:function(e){var t=e.normal.dot(this.direction);if(0===t)return 0===e.distanceToPoint(this.origin)?0:null;e=-(this.origin.dot(e.normal)+e.constant)/t;return 0<=e?e:null},intersectPlane:function(e,t){e=this.distanceToPlane(e);return null===e?null:this.at(e,t)},intersectsPlane:function(e){var t=e.distanceToPoint(this.origin);return 0===t||0>e.normal.dot(this.direction)*t?!0:!1},intersectBox:function(e,t){var r=1/this.direction.x;var n=1/this.direction.y;var i=1/this.direction.z,o=this.origin;if(0<=r){var a=(e.min.x-o.x)*r;r*=e.max.x-o.x}else a=(e.max.x-o.x)*r,r*=e.min.x-o.x;if(0<=n){var s=(e.min.y-o.y)*n;n*=e.max.y-o.y}else s=(e.max.y-o.y)*n,n*=e.min.y-o.y;if(a>n||s>r)return null;if(s>a||a!==a)a=s;if(n<r||r!==r)r=n;0<=i?(s=(e.min.z-o.z)*i,e=(e.max.z-o.z)*i):(s=(e.max.z-o.z)*i,e=(e.min.z-o.z)*i);if(a>e||s>r)return null;if(s>a||a!==a)a=s;if(e<r||r!==r)r=e;return 0>r?null:this.at(0<=a?a:r,t)},intersectsBox:function(){var t=new we;return function(e){return null!==this.intersectBox(e,t)}}(),intersectTriangle:function(){var o=new we,a=new we,s=new we,u=new we;return function(e,t,r,n,i){a.subVectors(t,e);s.subVectors(r,e);u.crossVectors(a,s);t=this.direction.dot(u);if(0<t){if(n)return null;n=1}else if(0>t)n=-1,t=-t;else return null;o.subVectors(this.origin,e);e=n*this.direction.dot(s.crossVectors(o,s));if(0>e)return null;r=n*this.direction.dot(a.cross(o));if(0>r||e+r>t)return null;e=-n*o.dot(u);return 0>e?null:this.at(e/t,i)}}(),applyMatrix4:function(e){this.origin.applyMatrix4(e);this.direction.transformDirection(e);return this},equals:function(e){return e.origin.equals(this.origin)&&e.direction.equals(this.direction)}});Object.assign(F,{getNormal:function(){var i=new we;return function(e,t,r,n){void 0===n&&(console.warn("THREE.Triangle: .getNormal() target is now required"),n=new we);n.subVectors(r,t);i.subVectors(e,t);n.cross(i);e=n.lengthSq();return 0<e?n.multiplyScalar(1/Math.sqrt(e)):n.set(0,0,0)}}(),getBarycoord:function(){var s=new we,u=new we,c=new we;return function(e,t,r,n,i){s.subVectors(n,t);u.subVectors(r,t);c.subVectors(e,t);e=s.dot(s);t=s.dot(u);r=s.dot(c);var o=u.dot(u);n=u.dot(c);var a=e*o-t*t;void 0===i&&(console.warn("THREE.Triangle: .getBarycoord() target is now required"),i=new we);if(0===a)return i.set(-2,-1,-1);a=1/a;o=(o*r-t*n)*a;e=(e*n-t*r)*a;return i.set(1-o-e,e,o)}}(),containsPoint:function(){var i=new we;return function(e,t,r,n){F.getBarycoord(e,t,r,n,i);return 0<=i.x&&0<=i.y&&1>=i.x+i.y}}()});Object.assign(F.prototype,{set:function(e,t,r){this.a.copy(e);this.b.copy(t);this.c.copy(r);return this},setFromPointsAndIndices:function(e,t,r,n){this.a.copy(e[t]);this.b.copy(e[r]);this.c.copy(e[n]);return this},clone:function(){return(new this.constructor).copy(this)},copy:function(e){this.a.copy(e.a);this.b.copy(e.b);this.c.copy(e.c);return this},getArea:function(){var e=new we,t=new we;return function(){e.subVectors(this.c,this.b);t.subVectors(this.a,this.b);return.5*e.cross(t).length()}}(),getMidpoint:function(e){void 0===e&&(console.warn("THREE.Triangle: .getMidpoint() target is now required"),e=new we);return e.addVectors(this.a,this.b).add(this.c).multiplyScalar(1/3)},getNormal:function(e){return F.getNormal(this.a,this.b,this.c,e)},getPlane:function(e){void 0===e&&(console.warn("THREE.Triangle: .getPlane() target is now required"),e=new we);return e.setFromCoplanarPoints(this.a,this.b,this.c)},getBarycoord:function(e,t){return F.getBarycoord(e,this.a,this.b,this.c,t)},containsPoint:function(e){return F.containsPoint(e,this.a,this.b,this.c)},intersectsBox:function(e){return e.intersectsTriangle(this)},closestPointToPoint:function(){var l=new we,p=new we,f=new we,d=new we,v=new we,m=new we;return function(e,t){void 0===t&&(console.warn("THREE.Triangle: .closestPointToPoint() target is now required"),t=new we);var r=this.a,n=this.b,i=this.c;l.subVectors(n,r);p.subVectors(i,r);d.subVectors(e,r);var o=l.dot(d),a=p.dot(d);if(0>=o&&0>=a)return t.copy(r);v.subVectors(e,n);var s=l.dot(v),u=p.dot(v);if(0<=s&&u<=s)return t.copy(n);var c=o*u-s*a;if(0>=c&&0<=o&&0>=s)return n=o/(o-s),t.copy(r).addScaledVector(l,n);m.subVectors(e,i);e=l.dot(m);var h=p.dot(m);if(0<=h&&e<=h)return t.copy(i);o=e*a-o*h;if(0>=o&&0<=a&&0>=h)return c=a/(a-h),t.copy(r).addScaledVector(p,c);a=s*h-e*u;if(0>=a&&0<=u-s&&0<=e-h)return f.subVectors(i,n),c=(u-s)/(u-s+(e-h)),t.copy(n).addScaledVector(f,c);i=1/(a+o+c);n=o*i;c*=i;return t.copy(r).addScaledVector(l,n).addScaledVector(p,c)}}(),equals:function(e){return e.a.equals(this.a)&&e.b.equals(this.b)&&e.c.equals(this.c)}});$.prototype=Object.assign(Object.create(h.prototype),{constructor:$,isMesh:!0,setDrawMode:function(e){this.drawMode=e},copy:function(e){h.prototype.copy.call(this,e);this.drawMode=e.drawMode;void 0!==e.morphTargetInfluences&&(this.morphTargetInfluences=e.morphTargetInfluences.slice());void 0!==e.morphTargetDictionary&&(this.morphTargetDictionary=Object.assign({},e.morphTargetDictionary));return this},updateMorphTargets:function(){var e=this.geometry;if(e.isBufferGeometry){e=e.morphAttributes;var t=Object.keys(e);if(0<t.length){var r=e[t[0]];if(void 0!==r)for(this.morphTargetInfluences=[],this.morphTargetDictionary={},e=0,t=r.length;e<t;e++){var n=r[e].name||String(e);this.morphTargetInfluences.push(0);this.morphTargetDictionary[n]=e}}}else if(r=e.morphTargets,void 0!==r&&0<r.length)for(this.morphTargetInfluences=[],this.morphTargetDictionary={},e=0,t=r.length;e<t;e++)n=r[e].name||String(e),this.morphTargetInfluences.push(0),this.morphTargetDictionary[n]=e},raycast:function(){function x(e,t,r,n,i,o,a){F.getBarycoord(e,t,r,n,s);i.multiplyScalar(s.x);o.multiplyScalar(s.y);a.multiplyScalar(s.z);i.add(o).add(a);return i.clone()}function w(e,t,r,n,i,o,a,s){if(null===(1===t.side?n.intersectTriangle(a,o,i,!0,s):n.intersectTriangle(i,o,a,2!==t.side,s)))return null;u.copy(s);u.applyMatrix4(e.matrixWorld);t=r.ray.origin.distanceTo(u);return t<r.near||t>r.far?null:{distance:t,point:u.clone(),object:e}}function S(e,t,r,n,i,o,a,s,u){T.fromBufferAttribute(i,a);O.fromBufferAttribute(i,s);P.fromBufferAttribute(i,u);if(e=w(e,t,r,n,T,O,P,k))o&&(L.fromBufferAttribute(o,a),I.fromBufferAttribute(o,s),N.fromBufferAttribute(o,u),e.uv=x(k,T,O,P,L,I,N)),o=new D(a,s,u),F.getNormal(T,O,P,o.normal),e.face=o;return e}var M=new xe,E=new B,C=new c,T=new we,O=new we,P=new we,A=new we,j=new we,R=new we,L=new H,I=new H,N=new H,s=new we,k=new we,u=new we;return function(e,t){var r=this.geometry,n=this.material,i=this.matrixWorld;if(void 0!==n&&(null===r.boundingSphere&&r.computeBoundingSphere(),C.copy(r.boundingSphere),C.applyMatrix4(i),!1!==e.ray.intersectsSphere(C)&&(M.getInverse(i),E.copy(e.ray).applyMatrix4(M),null===r.boundingBox||!1!==E.intersectsBox(r.boundingBox))))if(r.isBufferGeometry){var o=r.index,a=r.attributes.position,s=r.attributes.uv,u=r.groups;r=r.drawRange;var c;if(null!==o)if(Array.isArray(n)){var h=0;for(c=u.length;h<c;h++){var l=u[h];var p=n[l.materialIndex];i=Math.max(l.start,r.start);var f=Math.min(l.start+l.count,r.start+r.count);for(l=i;l<f;l+=3){i=o.getX(l);var d=o.getX(l+1);var v=o.getX(l+2);if(i=S(this,p,e,E,a,s,i,d,v))i.faceIndex=Math.floor(l/3),t.push(i)}}}else for(i=Math.max(0,r.start),f=Math.min(o.count,r.start+r.count),h=i,c=f;h<c;h+=3){if(i=o.getX(h),d=o.getX(h+1),v=o.getX(h+2),i=S(this,n,e,E,a,s,i,d,v))i.faceIndex=Math.floor(h/3),t.push(i)}else if(void 0!==a)if(Array.isArray(n))for(h=0,c=u.length;h<c;h++)for(l=u[h],p=n[l.materialIndex],i=Math.max(l.start,r.start),f=Math.min(l.start+l.count,r.start+r.count),l=i;l<f;l+=3){if(i=l,d=l+1,v=l+2,i=S(this,p,e,E,a,s,i,d,v))i.faceIndex=Math.floor(l/3),t.push(i)}else for(i=Math.max(0,r.start),f=Math.min(a.count,r.start+r.count),h=i,c=f;h<c;h+=3)if(i=h,d=h+1,v=h+2,i=S(this,n,e,E,a,s,i,d,v))i.faceIndex=Math.floor(h/3),t.push(i)}else if(r.isGeometry)for(a=Array.isArray(n),s=r.vertices,u=r.faces,i=r.faceVertexUvs[0],0<i.length&&(o=i),l=0,f=u.length;l<f;l++)if(d=u[l],i=a?n[d.materialIndex]:n,void 0!==i){h=s[d.a];c=s[d.b];p=s[d.c];if(!0===i.morphTargets){v=r.morphTargets;var m=this.morphTargetInfluences;T.set(0,0,0);O.set(0,0,0);P.set(0,0,0);for(var g=0,y=v.length;g<y;g++){var _=m[g];if(0!==_){var b=v[g].vertices;T.addScaledVector(A.subVectors(b[d.a],h),_);O.addScaledVector(j.subVectors(b[d.b],c),_);P.addScaledVector(R.subVectors(b[d.c],p),_)}}T.add(h);O.add(c);P.add(p);h=T;c=O;p=P}if(i=w(this,i,e,E,h,c,p,k))o&&o[l]&&(v=o[l],L.copy(v[0]),I.copy(v[1]),N.copy(v[2]),i.uv=x(k,h,c,p,L,I,N)),i.face=d,i.faceIndex=l,t.push(i)}}}(),clone:function(){return new this.constructor(this.geometry,this.material).copy(this)}});U.prototype=Object.create(p.prototype);U.prototype.constructor=U;U.prototype.isCubeTexture=!0;Object.defineProperty(U.prototype,"images",{get:function(){return this.image},set:function(e){this.image=e}});var po=new p,fo=new U,vo=[],mo=[],go=new Float32Array(16),yo=new Float32Array(9),_o=new Float32Array(4);be.prototype.updateCache=function(e){var t=this.cache;e instanceof Float32Array&&t.length!==e.length&&(this.cache=new Float32Array(e.length));q(t,e)};Be.prototype.setValue=function(e,t,r){for(var n=this.seq,i=0,o=n.length;i!==o;++i){var a=n[i];a.setValue(e,t[a.id],r)}};var bo=/([\w\d_]+)(\])?(\[|\.)?/g;Fe.prototype.setValue=function(e,t,r){t=this.map[t];void 0!==t&&t.setValue(e,r,this.renderer)};Fe.prototype.setOptional=function(e,t,r){t=t[r];void 0!==t&&this.setValue(e,r,t)};Fe.upload=function(e,t,r,n){for(var i=0,o=t.length;i!==o;++i){var a=t[i],s=r[a.id];!1!==s.needsUpdate&&a.setValue(e,s.value,n)}};Fe.seqWithValue=function(e,t){for(var r=[],n=0,i=e.length;n!==i;++n){var o=e[n];o.id in t&&r.push(o)}return r};var xo=0,wo=0;ht.prototype=Object.create(I.prototype);ht.prototype.constructor=ht;ht.prototype.isMeshDepthMaterial=!0;ht.prototype.copy=function(e){I.prototype.copy.call(this,e);this.depthPacking=e.depthPacking;this.skinning=e.skinning;this.morphTargets=e.morphTargets;this.map=e.map;this.alphaMap=e.alphaMap;this.displacementMap=e.displacementMap;this.displacementScale=e.displacementScale;this.displacementBias=e.displacementBias;this.wireframe=e.wireframe;this.wireframeLinewidth=e.wireframeLinewidth;return this};lt.prototype=Object.create(I.prototype);lt.prototype.constructor=lt;lt.prototype.isMeshDistanceMaterial=!0;lt.prototype.copy=function(e){I.prototype.copy.call(this,e);this.referencePosition.copy(e.referencePosition);this.nearDistance=e.nearDistance;this.farDistance=e.farDistance;this.skinning=e.skinning;this.morphTargets=e.morphTargets;this.map=e.map;this.alphaMap=e.alphaMap;this.displacementMap=e.displacementMap;this.displacementScale=e.displacementScale;this.displacementBias=e.displacementBias;return this};mt.prototype=Object.assign(Object.create(h.prototype),{constructor:mt,isGroup:!0});gt.prototype=Object.assign(Object.create(u.prototype),{constructor:gt,isPerspectiveCamera:!0,copy:function(e,t){u.prototype.copy.call(this,e,t);this.fov=e.fov;this.zoom=e.zoom;this.near=e.near;this.far=e.far;this.focus=e.focus;this.aspect=e.aspect;this.view=null===e.view?null:Object.assign({},e.view);this.filmGauge=e.filmGauge;this.filmOffset=e.filmOffset;return this},setFocalLength:function(e){e=.5*this.getFilmHeight()/e;this.fov=2*eo.RAD2DEG*Math.atan(e);this.updateProjectionMatrix()},getFocalLength:function(){var e=Math.tan(.5*eo.DEG2RAD*this.fov);return.5*this.getFilmHeight()/e},getEffectiveFOV:function(){return 2*eo.RAD2DEG*Math.atan(Math.tan(.5*eo.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(e,t,r,n,i,o){this.aspect=e/t;null===this.view&&(this.view={enabled:!0,fullWidth:1,fullHeight:1,offsetX:0,offsetY:0,width:1,height:1});this.view.enabled=!0;this.view.fullWidth=e;this.view.fullHeight=t;this.view.offsetX=r;this.view.offsetY=n;this.view.width=i;this.view.height=o;this.updateProjectionMatrix()},clearViewOffset:function(){null!==this.view&&(this.view.enabled=!1);this.updateProjectionMatrix()},updateProjectionMatrix:function(){var e=this.near,t=e*Math.tan(.5*eo.DEG2RAD*this.fov)/this.zoom,r=2*t,n=this.aspect*r,i=-.5*n,o=this.view;if(null!==this.view&&this.view.enabled){var a=o.fullWidth,s=o.fullHeight;i+=o.offsetX*n/a;t-=o.offsetY*r/s;n*=o.width/a;r*=o.height/s}o=this.filmOffset;0!==o&&(i+=e*o/this.getFilmWidth());this.projectionMatrix.makePerspective(i,i+n,t,t-r,e,this.far)},toJSON:function(e){e=h.prototype.toJSON.call(this,e);e.object.fov=this.fov;e.object.zoom=this.zoom;e.object.near=this.near;e.object.far=this.far;e.object.focus=this.focus;e.object.aspect=this.aspect;null!==this.view&&(e.object.view=Object.assign({},this.view));e.object.filmGauge=this.filmGauge;e.object.filmOffset=this.filmOffset;return e}});yt.prototype=Object.assign(Object.create(gt.prototype),{constructor:yt,isArrayCamera:!0});wt.prototype.isFogExp2=!0;wt.prototype.clone=function(){return new wt(this.color,this.density)};wt.prototype.toJSON=function(){return{type:"FogExp2",color:this.color.getHex(),density:this.density}};St.prototype.isFog=!0;St.prototype.clone=function(){return new St(this.color,this.near,this.far)};St.prototype.toJSON=function(){return{type:"Fog",color:this.color.getHex(),near:this.near,far:this.far}};Mt.prototype=Object.assign(Object.create(h.prototype),{constructor:Mt,copy:function(e,t){h.prototype.copy.call(this,e,t);null!==e.background&&(this.background=e.background.clone());null!==e.fog&&(this.fog=e.fog.clone());null!==e.overrideMaterial&&(this.overrideMaterial=e.overrideMaterial.clone());this.autoUpdate=e.autoUpdate;this.matrixAutoUpdate=e.matrixAutoUpdate;return this},toJSON:function(e){var t=h.prototype.toJSON.call(this,e);null!==this.background&&(t.object.background=this.background.toJSON(e));null!==this.fog&&(t.object.fog=this.fog.toJSON());return t}});Object.defineProperty(Et.prototype,"needsUpdate",{set:function(e){!0===e&&this.version++}});Object.assign(Et.prototype,{isInterleavedBuffer:!0,onUploadCallback:function(){},setArray:function(e){if(Array.isArray(e))throw new TypeError("THREE.BufferAttribute: array should be a Typed Array.");this.count=void 0!==e?e.length/this.stride:0;this.array=e;return this},setDynamic:function(e){this.dynamic=e;return this},copy:function(e){this.array=new e.array.constructor(e.array);this.count=e.count;this.stride=e.stride;this.dynamic=e.dynamic;return this},copyAt:function(e,t,r){e*=this.stride;r*=t.stride;for(var n=0,i=this.stride;n<i;n++)this.array[e+n]=t.array[r+n];return this},set:function(e,t){void 0===t&&(t=0);this.array.set(e,t);return this},clone:function(){return(new this.constructor).copy(this)},onUpload:function(e){this.onUploadCallback=e;return this}});Object.defineProperties(Ct.prototype,{count:{get:function(){return this.data.count}},array:{get:function(){return this.data.array}}});Object.assign(Ct.prototype,{isInterleavedBufferAttribute:!0,setX:function(e,t){this.data.array[e*this.data.stride+this.offset]=t;return this},setY:function(e,t){this.data.array[e*this.data.stride+this.offset+1]=t;return this},setZ:function(e,t){this.data.array[e*this.data.stride+this.offset+2]=t;return this},setW:function(e,t){this.data.array[e*this.data.stride+this.offset+3]=t;return this},getX:function(e){return this.data.array[e*this.data.stride+this.offset]},getY:function(e){return this.data.array[e*this.data.stride+this.offset+1]},getZ:function(e){return this.data.array[e*this.data.stride+this.offset+2]},getW:function(e){return this.data.array[e*this.data.stride+this.offset+3]},setXY:function(e,t,r){e=e*this.data.stride+this.offset;this.data.array[e+0]=t;this.data.array[e+1]=r;return this},setXYZ:function(e,t,r,n){e=e*this.data.stride+this.offset;this.data.array[e+0]=t;this.data.array[e+1]=r;this.data.array[e+2]=n;return this},setXYZW:function(e,t,r,n,i){e=e*this.data.stride+this.offset;this.data.array[e+0]=t;this.data.array[e+1]=r;this.data.array[e+2]=n;this.data.array[e+3]=i;return this}});Tt.prototype=Object.create(I.prototype);Tt.prototype.constructor=Tt;Tt.prototype.isSpriteMaterial=!0;Tt.prototype.copy=function(e){I.prototype.copy.call(this,e);this.color.copy(e.color);this.map=e.map;this.rotation=e.rotation;return this};var So;Ot.prototype=Object.assign(Object.create(h.prototype),{constructor:Ot,isSprite:!0,raycast:function(){function a(e,t,r,n,i,o){h.subVectors(e,r).addScalar(.5).multiply(n);void 0!==i?(l.x=o*h.x-i*h.y,l.y=i*h.x+o*h.y):l.copy(h);e.copy(t);e.x+=l.x;e.y+=l.y;e.applyMatrix4(p)}var s=new we,u=new we,c=new we,h=new H,l=new H,p=new xe,f=new we,d=new we,v=new we;return function(e,t){u.setFromMatrixScale(this.matrixWorld);p.getInverse(this.modelViewMatrix).premultiply(this.matrixWorld);c.setFromMatrixPosition(this.modelViewMatrix);var r=this.material.rotation;if(0!==r){var n=Math.cos(r);var i=Math.sin(r)}r=this.center;a(f.set(-.5,-.5,0),c,r,u,i,n);a(d.set(.5,-.5,0),c,r,u,i,n);a(v.set(.5,.5,0),c,r,u,i,n);var o=e.ray.intersectTriangle(f,d,v,!1,s);if(null===o&&(a(d.set(-.5,.5,0),c,r,u,i,n),o=e.ray.intersectTriangle(f,v,d,!1,s),null===o))return;i=e.ray.origin.distanceTo(s);i<e.near||i>e.far||t.push({distance:i,point:s.clone(),face:null,object:this})}}(),clone:function(){return new this.constructor(this.material).copy(this)},copy:function(e){h.prototype.copy.call(this,e);void 0!==e.center&&this.center.copy(e.center);return this}});Pt.prototype=Object.assign(Object.create(h.prototype),{constructor:Pt,copy:function(e){h.prototype.copy.call(this,e,!1);e=e.levels;for(var t=0,r=e.length;t<r;t++){var n=e[t];this.addLevel(n.object.clone(),n.distance)}return this},addLevel:function(e,t){void 0===t&&(t=0);t=Math.abs(t);for(var r=this.levels,n=0;n<r.length&&!(t<r[n].distance);n++);r.splice(n,0,{distance:t,object:e});this.add(e)},getObjectForDistance:function(e){for(var t=this.levels,r=1,n=t.length;r<n&&!(e<t[r].distance);r++);return t[r-1].object},raycast:function(){var n=new we;return function(e,t){n.setFromMatrixPosition(this.matrixWorld);var r=e.ray.origin.distanceTo(n);this.getObjectForDistance(r).raycast(e,t)}}(),update:function(){var i=new we,o=new we;return function(e){var t=this.levels;if(1<t.length){i.setFromMatrixPosition(e.matrixWorld);o.setFromMatrixPosition(this.matrixWorld);e=i.distanceTo(o);t[0].object.visible=!0;for(var r=1,n=t.length;r<n;r++)if(e>=t[r].distance)t[r-1].object.visible=!1,t[r].object.visible=!0;else break;for(;r<n;r++)t[r].object.visible=!1}}}(),toJSON:function(e){e=h.prototype.toJSON.call(this,e);e.object.levels=[];for(var t=this.levels,r=0,n=t.length;r<n;r++){var i=t[r];e.object.levels.push({object:i.object.uuid,distance:i.distance})}return e}});Object.assign(At.prototype,{calculateInverses:function(){this.boneInverses=[];for(var e=0,t=this.bones.length;e<t;e++){var r=new xe;this.bones[e]&&r.getInverse(this.bones[e].matrixWorld);this.boneInverses.push(r)}},pose:function(){var e,t;var r=0;for(t=this.bones.length;r<t;r++)(e=this.bones[r])&&e.matrixWorld.getInverse(this.boneInverses[r]);r=0;for(t=this.bones.length;r<t;r++)if(e=this.bones[r])e.parent&&e.parent.isBone?(e.matrix.getInverse(e.parent.matrixWorld),e.matrix.multiply(e.matrixWorld)):e.matrix.copy(e.matrixWorld),e.matrix.decompose(e.position,e.quaternion,e.scale)},update:function(){var a=new xe,s=new xe;return function(){for(var e=this.bones,t=this.boneInverses,r=this.boneMatrices,n=this.boneTexture,i=0,o=e.length;i<o;i++)a.multiplyMatrices(e[i]?e[i].matrixWorld:s,t[i]),a.toArray(r,16*i);void 0!==n&&(n.needsUpdate=!0)}}(),clone:function(){return new At(this.bones,this.boneInverses)},getBoneByName:function(e){for(var t=0,r=this.bones.length;t<r;t++){var n=this.bones[t];if(n.name===e)return n}}});jt.prototype=Object.assign(Object.create(h.prototype),{constructor:jt,isBone:!0});Rt.prototype=Object.assign(Object.create($.prototype),{constructor:Rt,isSkinnedMesh:!0,initBones:function(){var e=[],t;if(this.geometry&&void 0!==this.geometry.bones){var r=0;for(t=this.geometry.bones.length;r<t;r++){var n=this.geometry.bones[r];var i=new jt;e.push(i);i.name=n.name;i.position.fromArray(n.pos);i.quaternion.fromArray(n.rotq);void 0!==n.scl&&i.scale.fromArray(n.scl)}r=0;for(t=this.geometry.bones.length;r<t;r++)n=this.geometry.bones[r],-1!==n.parent&&null!==n.parent&&void 0!==e[n.parent]?e[n.parent].add(e[r]):this.add(e[r])}this.updateMatrixWorld(!0);return e},bind:function(e,t){this.skeleton=e;void 0===t&&(this.updateMatrixWorld(!0),this.skeleton.calculateInverses(),t=this.matrixWorld);this.bindMatrix.copy(t);this.bindMatrixInverse.getInverse(t)},pose:function(){this.skeleton.pose()},normalizeSkinWeights:function(){var e;if(this.geometry&&this.geometry.isGeometry)for(e=0;e<this.geometry.skinWeights.length;e++){var t=this.geometry.skinWeights[e];var r=1/t.manhattanLength();Infinity!==r?t.multiplyScalar(r):t.set(1,0,0,0)}else if(this.geometry&&this.geometry.isBufferGeometry){t=new Se;var n=this.geometry.attributes.skinWeight;for(e=0;e<n.count;e++)t.x=n.getX(e),t.y=n.getY(e),t.z=n.getZ(e),t.w=n.getW(e),r=1/t.manhattanLength(),Infinity!==r?t.multiplyScalar(r):t.set(1,0,0,0),n.setXYZW(e,t.x,t.y,t.z,t.w)}},updateMatrixWorld:function(e){$.prototype.updateMatrixWorld.call(this,e);"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).copy(this)}});Lt.prototype=Object.create(I.prototype);Lt.prototype.constructor=Lt;Lt.prototype.isLineBasicMaterial=!0;Lt.prototype.copy=function(e){I.prototype.copy.call(this,e);this.color.copy(e.color);this.linewidth=e.linewidth;this.linecap=e.linecap;this.linejoin=e.linejoin;return this};It.prototype=Object.assign(Object.create(h.prototype),{constructor:It,isLine:!0,computeLineDistances:function(){var o=new we,a=new we;return function(){var e=this.geometry;if(e.isBufferGeometry)if(null===e.index){for(var t=e.attributes.position,r=[0],n=1,i=t.count;n<i;n++)o.fromBufferAttribute(t,n-1),a.fromBufferAttribute(t,n),r[n]=r[n-1],r[n]+=o.distanceTo(a);e.addAttribute("lineDistance",new P(r,1))}else console.warn("THREE.Line.computeLineDistances(): Computation only possible with non-indexed BufferGeometry.");else if(e.isGeometry)for(t=e.vertices,r=e.lineDistances,r[0]=0,n=1,i=t.length;n<i;n++)r[n]=r[n-1],r[n]+=t[n-1].distanceTo(t[n]);return this}}(),raycast:function(){var f=new xe,d=new B,v=new c;return function(e,t){var r=e.linePrecision;r*=r;var n=this.geometry,i=this.matrixWorld;null===n.boundingSphere&&n.computeBoundingSphere();v.copy(n.boundingSphere);v.applyMatrix4(i);if(!1!==e.ray.intersectsSphere(v)){f.getInverse(i);d.copy(e.ray).applyMatrix4(f);var o=new we,a=new we;i=new we;var s=new we,u=this&&this.isLineSegments?2:1;if(n.isBufferGeometry){var c=n.index,h=n.attributes.position.array;if(null!==c){c=c.array;n=0;for(var l=c.length-1;n<l;n+=u){var p=c[n+1];o.fromArray(h,3*c[n]);a.fromArray(h,3*p);p=d.distanceSqToSegment(o,a,s,i);p>r||(s.applyMatrix4(this.matrixWorld),p=e.ray.origin.distanceTo(s),p<e.near||p>e.far||t.push({distance:p,point:i.clone().applyMatrix4(this.matrixWorld),index:n,face:null,faceIndex:null,object:this}))}}else for(n=0,l=h.length/3-1;n<l;n+=u)o.fromArray(h,3*n),a.fromArray(h,3*n+3),p=d.distanceSqToSegment(o,a,s,i),p>r||(s.applyMatrix4(this.matrixWorld),p=e.ray.origin.distanceTo(s),p<e.near||p>e.far||t.push({distance:p,point:i.clone().applyMatrix4(this.matrixWorld),index:n,face:null,faceIndex:null,object:this}))}else if(n.isGeometry)for(o=n.vertices,a=o.length,n=0;n<a-1;n+=u)p=d.distanceSqToSegment(o[n],o[n+1],s,i),p>r||(s.applyMatrix4(this.matrixWorld),p=e.ray.origin.distanceTo(s),p<e.near||p>e.far||t.push({distance:p,point:i.clone().applyMatrix4(this.matrixWorld),index:n,face:null,faceIndex:null,object:this}))}}}(),clone:function(){return new this.constructor(this.geometry,this.material).copy(this)}});Nt.prototype=Object.assign(Object.create(It.prototype),{constructor:Nt,isLineSegments:!0,computeLineDistances:function(){var o=new we,a=new we;return function(){var e=this.geometry;if(e.isBufferGeometry)if(null===e.index){for(var t=e.attributes.position,r=[],n=0,i=t.count;n<i;n+=2)o.fromBufferAttribute(t,n),a.fromBufferAttribute(t,n+1),r[n]=0===n?0:r[n-1],r[n+1]=r[n]+o.distanceTo(a);e.addAttribute("lineDistance",new P(r,1))}else console.warn("THREE.LineSegments.computeLineDistances(): Computation only possible with non-indexed BufferGeometry.");else if(e.isGeometry)for(t=e.vertices,r=e.lineDistances,n=0,i=t.length;n<i;n+=2)o.copy(t[n]),a.copy(t[n+1]),r[n]=0===n?0:r[n-1],r[n+1]=r[n]+o.distanceTo(a);return this}}()});kt.prototype=Object.assign(Object.create(It.prototype),{constructor:kt,isLineLoop:!0});Dt.prototype=Object.create(I.prototype);Dt.prototype.constructor=Dt;Dt.prototype.isPointsMaterial=!0;Dt.prototype.copy=function(e){I.prototype.copy.call(this,e);this.color.copy(e.color);this.map=e.map;this.size=e.size;this.sizeAttenuation=e.sizeAttenuation;this.morphTargets=e.morphTargets;return this};Bt.prototype=Object.assign(Object.create(h.prototype),{constructor:Bt,isPoints:!0,raycast:function(){var f=new xe,d=new B,v=new c;return function(n,i){function e(e,t){var r=d.distanceSqToPoint(e);r<s&&(d.closestPointToPoint(e,u),u.applyMatrix4(a),e=n.ray.origin.distanceTo(u),e<n.near||e>n.far||i.push({distance:e,distanceToRay:Math.sqrt(r),point:u.clone(),index:t,face:null,object:o}))}var o=this,t=this.geometry,a=this.matrixWorld,r=n.params.Points.threshold;null===t.boundingSphere&&t.computeBoundingSphere();v.copy(t.boundingSphere);v.applyMatrix4(a);v.radius+=r;if(!1!==n.ray.intersectsSphere(v)){f.getInverse(a);d.copy(n.ray).applyMatrix4(f);r/=(this.scale.x+this.scale.y+this.scale.z)/3;var s=r*r;r=new we;var u=new we;if(t.isBufferGeometry){var c=t.index;t=t.attributes.position.array;if(null!==c){var h=c.array;c=0;for(var l=h.length;c<l;c++){var p=h[c];r.fromArray(t,3*p);e(r,p)}}else for(c=0,h=t.length/3;c<h;c++)r.fromArray(t,3*c),e(r,c)}else for(r=t.vertices,c=0,h=r.length;c<h;c++)e(r[c],c)}}}(),clone:function(){return new this.constructor(this.geometry,this.material).copy(this)}});Ft.prototype=Object.assign(Object.create(p.prototype),{constructor:Ft,isVideoTexture:!0,update:function(){var e=this.image;e.readyState>=e.HAVE_CURRENT_DATA&&(this.needsUpdate=!0)}});$t.prototype=Object.create(p.prototype);$t.prototype.constructor=$t;$t.prototype.isCompressedTexture=!0;zt.prototype=Object.create(p.prototype);zt.prototype.constructor=zt;zt.prototype.isCanvasTexture=!0;Ut.prototype=Object.create(p.prototype);Ut.prototype.constructor=Ut;Ut.prototype.isDepthTexture=!0;Gt.prototype=Object.create(A.prototype);Gt.prototype.constructor=Gt;Vt.prototype=Object.create(S.prototype);Vt.prototype.constructor=Vt;Ht.prototype=Object.create(A.prototype);Ht.prototype.constructor=Ht;qt.prototype=Object.create(S.prototype);qt.prototype.constructor=qt;Wt.prototype=Object.create(A.prototype);Wt.prototype.constructor=Wt;Xt.prototype=Object.create(S.prototype);Xt.prototype.constructor=Xt;Yt.prototype=Object.create(Wt.prototype);Yt.prototype.constructor=Yt;Kt.prototype=Object.create(S.prototype);Kt.prototype.constructor=Kt;Zt.prototype=Object.create(Wt.prototype);Zt.prototype.constructor=Zt;Jt.prototype=Object.create(S.prototype);Jt.prototype.constructor=Jt;Qt.prototype=Object.create(Wt.prototype);Qt.prototype.constructor=Qt;er.prototype=Object.create(S.prototype);er.prototype.constructor=er;tr.prototype=Object.create(Wt.prototype);tr.prototype.constructor=tr;rr.prototype=Object.create(S.prototype);rr.prototype.constructor=rr;nr.prototype=Object.create(A.prototype);nr.prototype.constructor=nr;ir.prototype=Object.create(S.prototype);ir.prototype.constructor=ir;or.prototype=Object.create(A.prototype);or.prototype.constructor=or;ar.prototype=Object.create(S.prototype);ar.prototype.constructor=ar;sr.prototype=Object.create(A.prototype);sr.prototype.constructor=sr;var Mo={triangulate:function(e,t,r){r=r||2;var n=t&&t.length,i=n?t[0]*r:e.length,o=ur(e,0,i,r,!0),a=[];if(!o)return a;var s;if(n){var u=r;n=[];var c;var h=0;for(c=t.length;h<c;h++){var l=t[h]*u;var p=h<c-1?t[h+1]*u:e.length;l=ur(e,l,p,u,!1);l===l.next&&(l.steiner=!0);n.push(dr(l))}n.sort(lr);for(h=0;h<n.length;h++){t=n[h];u=o;if(u=pr(t,u))t=br(u,t),cr(t,t.next);o=cr(o,o.next)}}if(e.length>80*r){var f=s=e[0];var d=n=e[1];for(u=r;u<i;u+=r)h=e[u],t=e[u+1],h<f&&(f=h),t<d&&(d=t),h>s&&(s=h),t>n&&(n=t);s=Math.max(s-f,n-d);s=0!==s?1/s:0}hr(o,a,r,f,d,s);return a}},Eo={area:function(e){for(var t=e.length,r=0,n=t-1,i=0;i<t;n=i++)r+=e[n].x*e[i].y-e[i].x*e[n].y;return.5*r},isClockWise:function(e){return 0>Eo.area(e)},triangulateShape:function(e,t){var r=[],n=[],i=[];Mr(e);Er(r,e);var o=e.length;t.forEach(Mr);for(e=0;e<t.length;e++)n.push(o),o+=t[e].length,Er(r,t[e]);t=Mo.triangulate(r,n);for(e=0;e<t.length;e+=3)i.push(t.slice(e,e+3));return i}};Cr.prototype=Object.create(S.prototype);Cr.prototype.constructor=Cr;Cr.prototype.toJSON=function(){var e=S.prototype.toJSON.call(this);return Or(this.parameters.shapes,this.parameters.options,e)};Tr.prototype=Object.create(A.prototype);Tr.prototype.constructor=Tr;Tr.prototype.toJSON=function(){var e=A.prototype.toJSON.call(this);return Or(this.parameters.shapes,this.parameters.options,e)};var Co={generateTopUV:function(e,t,r,n,i){e=t[3*n];n=t[3*n+1];var o=t[3*i];i=t[3*i+1];return[new H(t[3*r],t[3*r+1]),new H(e,n),new H(o,i)]},generateSideWallUV:function(e,t,r,n,i,o){e=t[3*r];var a=t[3*r+1];r=t[3*r+2];var s=t[3*n],u=t[3*n+1];n=t[3*n+2];var c=t[3*i],h=t[3*i+1];i=t[3*i+2];var l=t[3*o],p=t[3*o+1];t=t[3*o+2];return.01>Math.abs(a-u)?[new H(e,1-r),new H(s,1-n),new H(c,1-i),new H(l,1-t)]:[new H(a,1-r),new H(u,1-n),new H(h,1-i),new H(p,1-t)]}};Pr.prototype=Object.create(S.prototype);Pr.prototype.constructor=Pr;Ar.prototype=Object.create(Tr.prototype);Ar.prototype.constructor=Ar;jr.prototype=Object.create(S.prototype);jr.prototype.constructor=jr;Rr.prototype=Object.create(A.prototype);Rr.prototype.constructor=Rr;Lr.prototype=Object.create(S.prototype);Lr.prototype.constructor=Lr;Ir.prototype=Object.create(A.prototype);Ir.prototype.constructor=Ir;Nr.prototype=Object.create(S.prototype);Nr.prototype.constructor=Nr;kr.prototype=Object.create(A.prototype);kr.prototype.constructor=kr;Dr.prototype=Object.create(S.prototype);Dr.prototype.constructor=Dr;Dr.prototype.toJSON=function(){var e=S.prototype.toJSON.call(this);return Fr(this.parameters.shapes,e)};Br.prototype=Object.create(A.prototype);Br.prototype.constructor=Br;Br.prototype.toJSON=function(){var e=A.prototype.toJSON.call(this);return Fr(this.parameters.shapes,e)};$r.prototype=Object.create(A.prototype);$r.prototype.constructor=$r;zr.prototype=Object.create(S.prototype);zr.prototype.constructor=zr;Ur.prototype=Object.create(A.prototype);Ur.prototype.constructor=Ur;Gr.prototype=Object.create(zr.prototype);Gr.prototype.constructor=Gr;Vr.prototype=Object.create(Ur.prototype);Vr.prototype.constructor=Vr;Hr.prototype=Object.create(S.prototype);Hr.prototype.constructor=Hr;qr.prototype=Object.create(A.prototype);qr.prototype.constructor=qr;var To=Object.freeze({WireframeGeometry:Gt,ParametricGeometry:Vt,ParametricBufferGeometry:Ht,TetrahedronGeometry:Xt,TetrahedronBufferGeometry:Yt,OctahedronGeometry:Kt,OctahedronBufferGeometry:Zt,IcosahedronGeometry:Jt,IcosahedronBufferGeometry:Qt,DodecahedronGeometry:er,DodecahedronBufferGeometry:tr,PolyhedronGeometry:qt,PolyhedronBufferGeometry:Wt,TubeGeometry:rr,TubeBufferGeometry:nr,TorusKnotGeometry:ir,TorusKnotBufferGeometry:or,TorusGeometry:ar,TorusBufferGeometry:sr,TextGeometry:Pr,TextBufferGeometry:Ar,SphereGeometry:jr,SphereBufferGeometry:Rr,RingGeometry:Lr,RingBufferGeometry:Ir,PlaneGeometry:R,PlaneBufferGeometry:L,LatheGeometry:Nr,LatheBufferGeometry:kr,ShapeGeometry:Dr,ShapeBufferGeometry:Br,ExtrudeGeometry:Cr,ExtrudeBufferGeometry:Tr,EdgesGeometry:$r,ConeGeometry:Gr,ConeBufferGeometry:Vr,CylinderGeometry:zr,CylinderBufferGeometry:Ur,CircleGeometry:Hr,CircleBufferGeometry:qr,BoxGeometry:O,BoxBufferGeometry:j});Wr.prototype=Object.create(I.prototype);Wr.prototype.constructor=Wr;Wr.prototype.isShadowMaterial=!0;Wr.prototype.copy=function(e){I.prototype.copy.call(this,e);this.color.copy(e.color);return this};Xr.prototype=Object.create(k.prototype);Xr.prototype.constructor=Xr;Xr.prototype.isRawShaderMaterial=!0;Yr.prototype=Object.create(I.prototype);Yr.prototype.constructor=Yr;Yr.prototype.isMeshStandardMaterial=!0;Yr.prototype.copy=function(e){I.prototype.copy.call(this,e);this.defines={STANDARD:""};this.color.copy(e.color);this.roughness=e.roughness;this.metalness=e.metalness;this.map=e.map;this.lightMap=e.lightMap;this.lightMapIntensity=e.lightMapIntensity;this.aoMap=e.aoMap;this.aoMapIntensity=e.aoMapIntensity;this.emissive.copy(e.emissive);this.emissiveMap=e.emissiveMap;this.emissiveIntensity=e.emissiveIntensity;this.bumpMap=e.bumpMap;this.bumpScale=e.bumpScale;this.normalMap=e.normalMap;this.normalMapType=e.normalMapType;this.normalScale.copy(e.normalScale);this.displacementMap=e.displacementMap;this.displacementScale=e.displacementScale;this.displacementBias=e.displacementBias;this.roughnessMap=e.roughnessMap;this.metalnessMap=e.metalnessMap;this.alphaMap=e.alphaMap;this.envMap=e.envMap;this.envMapIntensity=e.envMapIntensity;this.refractionRatio=e.refractionRatio;this.wireframe=e.wireframe;this.wireframeLinewidth=e.wireframeLinewidth;this.wireframeLinecap=e.wireframeLinecap;this.wireframeLinejoin=e.wireframeLinejoin;this.skinning=e.skinning;this.morphTargets=e.morphTargets;this.morphNormals=e.morphNormals;return this};Kr.prototype=Object.create(Yr.prototype);Kr.prototype.constructor=Kr;Kr.prototype.isMeshPhysicalMaterial=!0;Kr.prototype.copy=function(e){Yr.prototype.copy.call(this,e);this.defines={PHYSICAL:""};this.reflectivity=e.reflectivity;this.clearCoat=e.clearCoat;this.clearCoatRoughness=e.clearCoatRoughness;return this};Zr.prototype=Object.create(I.prototype);Zr.prototype.constructor=Zr;Zr.prototype.isMeshPhongMaterial=!0;Zr.prototype.copy=function(e){I.prototype.copy.call(this,e);this.color.copy(e.color);this.specular.copy(e.specular);this.shininess=e.shininess;this.map=e.map;this.lightMap=e.lightMap;this.lightMapIntensity=e.lightMapIntensity;this.aoMap=e.aoMap;this.aoMapIntensity=e.aoMapIntensity;this.emissive.copy(e.emissive);this.emissiveMap=e.emissiveMap;this.emissiveIntensity=e.emissiveIntensity;this.bumpMap=e.bumpMap;this.bumpScale=e.bumpScale;this.normalMap=e.normalMap;this.normalMapType=e.normalMapType;this.normalScale.copy(e.normalScale);this.displacementMap=e.displacementMap;this.displacementScale=e.displacementScale;this.displacementBias=e.displacementBias;this.specularMap=e.specularMap;this.alphaMap=e.alphaMap;this.envMap=e.envMap;this.combine=e.combine;this.reflectivity=e.reflectivity;this.refractionRatio=e.refractionRatio;this.wireframe=e.wireframe;this.wireframeLinewidth=e.wireframeLinewidth;this.wireframeLinecap=e.wireframeLinecap;this.wireframeLinejoin=e.wireframeLinejoin;this.skinning=e.skinning;this.morphTargets=e.morphTargets;this.morphNormals=e.morphNormals;return this};Jr.prototype=Object.create(Zr.prototype);Jr.prototype.constructor=Jr;Jr.prototype.isMeshToonMaterial=!0;Jr.prototype.copy=function(e){Zr.prototype.copy.call(this,e);this.gradientMap=e.gradientMap;return this};Qr.prototype=Object.create(I.prototype);Qr.prototype.constructor=Qr;Qr.prototype.isMeshNormalMaterial=!0;Qr.prototype.copy=function(e){I.prototype.copy.call(this,e);this.bumpMap=e.bumpMap;this.bumpScale=e.bumpScale;this.normalMap=e.normalMap;this.normalMapType=e.normalMapType;this.normalScale.copy(e.normalScale);this.displacementMap=e.displacementMap;this.displacementScale=e.displacementScale;this.displacementBias=e.displacementBias;this.wireframe=e.wireframe;this.wireframeLinewidth=e.wireframeLinewidth;this.skinning=e.skinning;this.morphTargets=e.morphTargets;this.morphNormals=e.morphNormals;return this};en.prototype=Object.create(I.prototype);en.prototype.constructor=en;en.prototype.isMeshLambertMaterial=!0;en.prototype.copy=function(e){I.prototype.copy.call(this,e);this.color.copy(e.color);this.map=e.map;this.lightMap=e.lightMap;this.lightMapIntensity=e.lightMapIntensity;this.aoMap=e.aoMap;this.aoMapIntensity=e.aoMapIntensity;this.emissive.copy(e.emissive);this.emissiveMap=e.emissiveMap;this.emissiveIntensity=e.emissiveIntensity;this.specularMap=e.specularMap;this.alphaMap=e.alphaMap;this.envMap=e.envMap;this.combine=e.combine;this.reflectivity=e.reflectivity;this.refractionRatio=e.refractionRatio;this.wireframe=e.wireframe;this.wireframeLinewidth=e.wireframeLinewidth;this.wireframeLinecap=e.wireframeLinecap;this.wireframeLinejoin=e.wireframeLinejoin;this.skinning=e.skinning;this.morphTargets=e.morphTargets;this.morphNormals=e.morphNormals;return this};tn.prototype=Object.create(Lt.prototype);tn.prototype.constructor=tn;tn.prototype.isLineDashedMaterial=!0;tn.prototype.copy=function(e){Lt.prototype.copy.call(this,e);this.scale=e.scale;this.dashSize=e.dashSize;this.gapSize=e.gapSize;return this};var Oo=Object.freeze({ShadowMaterial:Wr,SpriteMaterial:Tt,RawShaderMaterial:Xr,ShaderMaterial:k,PointsMaterial:Dt,MeshPhysicalMaterial:Kr,MeshStandardMaterial:Yr,MeshPhongMaterial:Zr,MeshToonMaterial:Jr,MeshNormalMaterial:Qr,MeshLambertMaterial:en,MeshDepthMaterial:ht,MeshDistanceMaterial:lt,MeshBasicMaterial:N,LineDashedMaterial:tn,LineBasicMaterial:Lt,Material:I}),Po={enabled:!1,files:{},add:function(e,t){!1!==this.enabled&&(this.files[e]=t)},get:function(e){if(!1!==this.enabled)return this.files[e]},remove:function(e){delete this.files[e]},clear:function(){this.files={}}},Ao=new rn,jo={};Object.assign(nn.prototype,{load:function(a,e,t,r){void 0===a&&(a="");void 0!==this.path&&(a=this.path+a);a=this.manager.resolveURL(a);var s=this,n=Po.get(a);if(void 0!==n)return s.manager.itemStart(a),setTimeout(function(){e&&e(n);s.manager.itemEnd(a)},0),n;if(void 0!==jo[a])jo[a].push({onLoad:e,onProgress:t,onError:r});else{var i=a.match(/^data:(.*?)(;base64)?,(.*)$/);if(i){t=i[1];var o=!!i[2];i=i[3];i=window.decodeURIComponent(i);o&&(i=window.atob(i));try{var u=(this.responseType||"").toLowerCase();switch(u){case"arraybuffer":case"blob":var c=new Uint8Array(i.length);for(o=0;o<i.length;o++)c[o]=i.charCodeAt(o);var h="blob"===u?new Blob([c.buffer],{type:t}):c.buffer;break;case"document":h=(new DOMParser).parseFromString(i,t);break;case"json":h=JSON.parse(i);break;default:h=i}window.setTimeout(function(){e&&e(h);s.manager.itemEnd(a)},0)}catch(e){window.setTimeout(function(){r&&r(e);s.manager.itemEnd(a);s.manager.itemError(a)},0)}}else{jo[a]=[];jo[a].push({onLoad:e,onProgress:t,onError:r});var l=new XMLHttpRequest;l.open("GET",a,!0);l.addEventListener("load",function(e){var t=this.response;Po.add(a,t);var r=jo[a];delete jo[a];if(200===this.status||0===this.status){0===this.status&&console.warn("THREE.FileLoader: HTTP Status 0 received.");for(var n=0,i=r.length;n<i;n++){var o=r[n];if(o.onLoad)o.onLoad(t)}s.manager.itemEnd(a)}else{n=0;for(i=r.length;n<i;n++)if(o=r[n],o.onError)o.onError(e);s.manager.itemEnd(a);s.manager.itemError(a)}},!1);l.addEventListener("progress",function(e){for(var t=jo[a],r=0,n=t.length;r<n;r++){var i=t[r];if(i.onProgress)i.onProgress(e)}},!1);l.addEventListener("error",function(e){var t=jo[a];delete jo[a];for(var r=0,n=t.length;r<n;r++){var i=t[r];if(i.onError)i.onError(e)}s.manager.itemEnd(a);s.manager.itemError(a)},!1);void 0!==this.responseType&&(l.responseType=this.responseType);void 0!==this.withCredentials&&(l.withCredentials=this.withCredentials);l.overrideMimeType&&l.overrideMimeType(void 0!==this.mimeType?this.mimeType:"text/plain");for(o in this.requestHeader)l.setRequestHeader(o,this.requestHeader[o]);l.send(null)}s.manager.itemStart(a);return l}},setPath:function(e){this.path=e;return this},setResponseType:function(e){this.responseType=e;return this},setWithCredentials:function(e){this.withCredentials=e;return this},setMimeType:function(e){this.mimeType=e;return this},setRequestHeader:function(e){this.requestHeader=e;return this}});Object.assign(on.prototype,{load:function(e,i,r,n){function t(t){u.load(e[t],function(e){e=o._parser(e,!0);a[t]={width:e.width,height:e.height,format:e.format,mipmaps:e.mipmaps};c+=1;6===c&&(1===e.mipmapCount&&(s.minFilter=1006),s.format=e.format,s.needsUpdate=!0,i&&i(s))},r,n)}var o=this,a=[],s=new $t;s.image=a;var u=new nn(this.manager);u.setPath(this.path);u.setResponseType("arraybuffer");if(Array.isArray(e))for(var c=0,h=0,l=e.length;h<l;++h)t(h);else u.load(e,function(e){e=o._parser(e,!0);if(e.isCubemap)for(var t=e.mipmaps.length/e.mipmapCount,r=0;r<t;r++){a[r]={mipmaps:[]};for(var n=0;n<e.mipmapCount;n++)a[r].mipmaps.push(e.mipmaps[r*e.mipmapCount+n]),a[r].format=e.format,a[r].width=e.width,a[r].height=e.height}else s.image.width=e.width,s.image.height=e.height,s.mipmaps=e.mipmaps;1===e.mipmapCount&&(s.minFilter=1006);s.format=e.format;s.needsUpdate=!0;i&&i(s)},r,n);return s},setPath:function(e){this.path=e;return this}});Object.assign(an.prototype,{load:function(e,t,r,n){var i=this,o=new Me,a=new nn(this.manager);a.setResponseType("arraybuffer");a.load(e,function(e){if(e=i._parser(e))void 0!==e.image?o.image=e.image:void 0!==e.data&&(o.image.width=e.width,o.image.height=e.height,o.image.data=e.data),o.wrapS=void 0!==e.wrapS?e.wrapS:1001,o.wrapT=void 0!==e.wrapT?e.wrapT:1001,o.magFilter=void 0!==e.magFilter?e.magFilter:1006,o.minFilter=void 0!==e.minFilter?e.minFilter:1008,o.anisotropy=void 0!==e.anisotropy?e.anisotropy:1,void 0!==e.format&&(o.format=e.format),void 0!==e.type&&(o.type=e.type),void 0!==e.mipmaps&&(o.mipmaps=e.mipmaps),1===e.mipmapCount&&(o.minFilter=1006),o.needsUpdate=!0,t&&t(o,e)},r,n);return o}});Object.assign(sn.prototype,{crossOrigin:"anonymous",load:function(t,e,r,n){function i(){u.removeEventListener("load",i,!1);u.removeEventListener("error",o,!1);Po.add(t,this);e&&e(this);a.manager.itemEnd(t)}function o(e){u.removeEventListener("load",i,!1);u.removeEventListener("error",o,!1);n&&n(e);a.manager.itemEnd(t);a.manager.itemError(t)}void 0===t&&(t="");void 0!==this.path&&(t=this.path+t);t=this.manager.resolveURL(t);var a=this,s=Po.get(t);if(void 0!==s)return a.manager.itemStart(t),setTimeout(function(){e&&e(s);a.manager.itemEnd(t)},0),s;var u=document.createElementNS("http://www.w3.org/1999/xhtml","img");u.addEventListener("load",i,!1);u.addEventListener("error",o,!1);"data:"!==t.substr(0,5)&&void 0!==this.crossOrigin&&(u.crossOrigin=this.crossOrigin);a.manager.itemStart(t);u.src=t;return u},setCrossOrigin:function(e){this.crossOrigin=e;return this},setPath:function(e){this.path=e;return this}});Object.assign(un.prototype,{crossOrigin:"anonymous",load:function(e,r,t,n){function i(t){a.load(e[t],function(e){o.images[t]=e;s++;6===s&&(o.needsUpdate=!0,r&&r(o))},void 0,n)}var o=new U,a=new sn(this.manager);a.setCrossOrigin(this.crossOrigin);a.setPath(this.path);var s=0;for(t=0;t<e.length;++t)i(t);return o},setCrossOrigin:function(e){this.crossOrigin=e;return this},setPath:function(e){this.path=e;return this}});Object.assign(cn.prototype,{crossOrigin:"anonymous",load:function(t,r,e,n){var i=new p,o=new sn(this.manager);o.setCrossOrigin(this.crossOrigin);o.setPath(this.path);o.load(t,function(e){i.image=e;e=0<t.search(/\.(jpg|jpeg)$/)||0===t.search(/^data:image\/jpeg/);i.format=e?1022:1023;i.needsUpdate=!0;void 0!==r&&r(i)},e,n);return i},setCrossOrigin:function(e){this.crossOrigin=e;return this},setPath:function(e){this.path=e;return this}});Object.assign(hn.prototype,{getPoint:function(){console.warn("THREE.Curve: .getPoint() not implemented.");return null},getPointAt:function(e,t){e=this.getUtoTmapping(e);return this.getPoint(e,t)},getPoints:function(e){void 0===e&&(e=5);for(var t=[],r=0;r<=e;r++)t.push(this.getPoint(r/e));return t},getSpacedPoints:function(e){void 0===e&&(e=5);for(var t=[],r=0;r<=e;r++)t.push(this.getPointAt(r/e));return t},getLength:function(){var e=this.getLengths();return e[e.length-1]},getLengths:function(e){void 0===e&&(e=this.arcLengthDivisions);if(this.cacheArcLengths&&this.cacheArcLengths.length===e+1&&!this.needsUpdate)return this.cacheArcLengths;this.needsUpdate=!1;var t=[],r=this.getPoint(0),n,i=0;t.push(0);for(n=1;n<=e;n++){var o=this.getPoint(n/e);i+=o.distanceTo(r);t.push(i);r=o}return this.cacheArcLengths=t},updateArcLengths:function(){this.needsUpdate=!0;this.getLengths()},getUtoTmapping:function(e,t){var r=this.getLengths(),n=r.length;t=t?t:e*r[n-1];for(var i=0,o=n-1,a;i<=o;)if(e=Math.floor(i+(o-i)/2),a=r[e]-t,0>a)i=e+1;else if(0<a)o=e-1;else{o=e;break}e=o;if(r[e]===t)return e/(n-1);i=r[e];return(e+(t-i)/(r[e+1]-i))/(n-1)},getTangent:function(e){var t=e-1e-4;e+=1e-4;0>t&&(t=0);1<e&&(e=1);t=this.getPoint(t);return this.getPoint(e).clone().sub(t).normalize()},getTangentAt:function(e){e=this.getUtoTmapping(e);return this.getTangent(e)},computeFrenetFrames:function(e,t){var r=new we,n=[],i=[],o=[],a=new we,s=new xe,u;for(u=0;u<=e;u++){var c=u/e;n[u]=this.getTangentAt(c);n[u].normalize()}i[0]=new we;o[0]=new we;u=Number.MAX_VALUE;c=Math.abs(n[0].x);var h=Math.abs(n[0].y),l=Math.abs(n[0].z);c<=u&&(u=c,r.set(1,0,0));h<=u&&(u=h,r.set(0,1,0));l<=u&&r.set(0,0,1);a.crossVectors(n[0],r).normalize();i[0].crossVectors(n[0],a);o[0].crossVectors(n[0],i[0]);for(u=1;u<=e;u++)i[u]=i[u-1].clone(),o[u]=o[u-1].clone(),a.crossVectors(n[u-1],n[u]),a.length()>Number.EPSILON&&(a.normalize(),r=Math.acos(eo.clamp(n[u-1].dot(n[u]),-1,1)),i[u].applyMatrix4(s.makeRotationAxis(a,r))),o[u].crossVectors(n[u],i[u]);if(!0===t)for(r=Math.acos(eo.clamp(i[0].dot(i[e]),-1,1)),r/=e,0<n[0].dot(a.crossVectors(i[0],i[e]))&&(r=-r),u=1;u<=e;u++)i[u].applyMatrix4(s.makeRotationAxis(n[u],r*u)),o[u].crossVectors(n[u],i[u]);return{tangents:n,normals:i,binormals:o}},clone:function(){return(new this.constructor).copy(this)},copy:function(e){this.arcLengthDivisions=e.arcLengthDivisions;return this},toJSON:function(){var e={metadata:{version:4.5,type:"Curve",generator:"Curve.toJSON"}};e.arcLengthDivisions=this.arcLengthDivisions;e.type=this.type;return e},fromJSON:function(e){this.arcLengthDivisions=e.arcLengthDivisions;return this}});ln.prototype=Object.create(hn.prototype);ln.prototype.constructor=ln;ln.prototype.isEllipseCurve=!0;ln.prototype.getPoint=function(e,t){t=t||new H;for(var r=2*Math.PI,n=this.aEndAngle-this.aStartAngle,i=Math.abs(n)<Number.EPSILON;0>n;)n+=r;for(;n>r;)n-=r;n<Number.EPSILON&&(n=i?0:r);!0!==this.aClockwise||i||(n=n===r?-r:n-r);r=this.aStartAngle+e*n;e=this.aX+this.xRadius*Math.cos(r);var o=this.aY+this.yRadius*Math.sin(r);0!==this.aRotation&&(r=Math.cos(this.aRotation),n=Math.sin(this.aRotation),i=e-this.aX,o-=this.aY,e=i*r-o*n+this.aX,o=i*n+o*r+this.aY);return t.set(e,o)};ln.prototype.copy=function(e){hn.prototype.copy.call(this,e);this.aX=e.aX;this.aY=e.aY;this.xRadius=e.xRadius;this.yRadius=e.yRadius;this.aStartAngle=e.aStartAngle;this.aEndAngle=e.aEndAngle;this.aClockwise=e.aClockwise;this.aRotation=e.aRotation;return this};ln.prototype.toJSON=function(){var e=hn.prototype.toJSON.call(this);e.aX=this.aX;e.aY=this.aY;e.xRadius=this.xRadius;e.yRadius=this.yRadius;e.aStartAngle=this.aStartAngle;e.aEndAngle=this.aEndAngle;e.aClockwise=this.aClockwise;e.aRotation=this.aRotation;return e};ln.prototype.fromJSON=function(e){hn.prototype.fromJSON.call(this,e);this.aX=e.aX;this.aY=e.aY;this.xRadius=e.xRadius;this.yRadius=e.yRadius;this.aStartAngle=e.aStartAngle;this.aEndAngle=e.aEndAngle;this.aClockwise=e.aClockwise;this.aRotation=e.aRotation;return this};pn.prototype=Object.create(ln.prototype);pn.prototype.constructor=pn;pn.prototype.isArcCurve=!0;var Ro=new we,Lo=new fn,Io=new fn,No=new fn;dn.prototype=Object.create(hn.prototype);dn.prototype.constructor=dn;dn.prototype.isCatmullRomCurve3=!0;dn.prototype.getPoint=function(e,t){t=t||new we;var r=this.points,n=r.length;e*=n-(this.closed?0:1);var i=Math.floor(e);e-=i;this.closed?i+=0<i?0:(Math.floor(Math.abs(i)/n)+1)*n:0===e&&i===n-1&&(i=n-2,e=1);if(this.closed||0<i)var o=r[(i-1)%n];else Ro.subVectors(r[0],r[1]).add(r[0]),o=Ro;var a=r[i%n];var s=r[(i+1)%n];this.closed||i+2<n?r=r[(i+2)%n]:(Ro.subVectors(r[n-1],r[n-2]).add(r[n-1]),r=Ro);if("centripetal"===this.curveType||"chordal"===this.curveType){var u="chordal"===this.curveType?.5:.25;n=Math.pow(o.distanceToSquared(a),u);i=Math.pow(a.distanceToSquared(s),u);u=Math.pow(s.distanceToSquared(r),u);1e-4>i&&(i=1);1e-4>n&&(n=i);1e-4>u&&(u=i);Lo.initNonuniformCatmullRom(o.x,a.x,s.x,r.x,n,i,u);Io.initNonuniformCatmullRom(o.y,a.y,s.y,r.y,n,i,u);No.initNonuniformCatmullRom(o.z,a.z,s.z,r.z,n,i,u)}else"catmullrom"===this.curveType&&(Lo.initCatmullRom(o.x,a.x,s.x,r.x,this.tension),Io.initCatmullRom(o.y,a.y,s.y,r.y,this.tension),No.initCatmullRom(o.z,a.z,s.z,r.z,this.tension));t.set(Lo.calc(e),Io.calc(e),No.calc(e));return t};dn.prototype.copy=function(e){hn.prototype.copy.call(this,e);this.points=[];for(var t=0,r=e.points.length;t<r;t++)this.points.push(e.points[t].clone());this.closed=e.closed;this.curveType=e.curveType;this.tension=e.tension;return this};dn.prototype.toJSON=function(){var e=hn.prototype.toJSON.call(this);e.points=[];for(var t=0,r=this.points.length;t<r;t++)e.points.push(this.points[t].toArray());e.closed=this.closed;e.curveType=this.curveType;e.tension=this.tension;return e};dn.prototype.fromJSON=function(e){hn.prototype.fromJSON.call(this,e);this.points=[];for(var t=0,r=e.points.length;t<r;t++){var n=e.points[t];this.points.push((new we).fromArray(n))}this.closed=e.closed;this.curveType=e.curveType;this.tension=e.tension;return this};yn.prototype=Object.create(hn.prototype);yn.prototype.constructor=yn;yn.prototype.isCubicBezierCurve=!0;yn.prototype.getPoint=function(e,t){t=t||new H;var r=this.v0,n=this.v1,i=this.v2,o=this.v3;t.set(gn(e,r.x,n.x,i.x,o.x),gn(e,r.y,n.y,i.y,o.y));return t};yn.prototype.copy=function(e){hn.prototype.copy.call(this,e);this.v0.copy(e.v0);this.v1.copy(e.v1);this.v2.copy(e.v2);this.v3.copy(e.v3);return this};yn.prototype.toJSON=function(){var e=hn.prototype.toJSON.call(this);e.v0=this.v0.toArray();e.v1=this.v1.toArray();e.v2=this.v2.toArray();e.v3=this.v3.toArray();return e};yn.prototype.fromJSON=function(e){hn.prototype.fromJSON.call(this,e);this.v0.fromArray(e.v0);this.v1.fromArray(e.v1);this.v2.fromArray(e.v2);this.v3.fromArray(e.v3);return this};_n.prototype=Object.create(hn.prototype);_n.prototype.constructor=_n;_n.prototype.isCubicBezierCurve3=!0;_n.prototype.getPoint=function(e,t){t=t||new we;var r=this.v0,n=this.v1,i=this.v2,o=this.v3;t.set(gn(e,r.x,n.x,i.x,o.x),gn(e,r.y,n.y,i.y,o.y),gn(e,r.z,n.z,i.z,o.z));return t};_n.prototype.copy=function(e){hn.prototype.copy.call(this,e);this.v0.copy(e.v0);this.v1.copy(e.v1);this.v2.copy(e.v2);this.v3.copy(e.v3);return this};_n.prototype.toJSON=function(){var e=hn.prototype.toJSON.call(this);e.v0=this.v0.toArray();e.v1=this.v1.toArray();e.v2=this.v2.toArray();e.v3=this.v3.toArray();return e};_n.prototype.fromJSON=function(e){hn.prototype.fromJSON.call(this,e);this.v0.fromArray(e.v0);this.v1.fromArray(e.v1);this.v2.fromArray(e.v2);this.v3.fromArray(e.v3);return this};bn.prototype=Object.create(hn.prototype);bn.prototype.constructor=bn;bn.prototype.isLineCurve=!0;bn.prototype.getPoint=function(e,t){t=t||new H;1===e?t.copy(this.v2):(t.copy(this.v2).sub(this.v1),t.multiplyScalar(e).add(this.v1));return t};bn.prototype.getPointAt=function(e,t){return this.getPoint(e,t)};bn.prototype.getTangent=function(){return this.v2.clone().sub(this.v1).normalize()};bn.prototype.copy=function(e){hn.prototype.copy.call(this,e);this.v1.copy(e.v1);this.v2.copy(e.v2);return this};bn.prototype.toJSON=function(){var e=hn.prototype.toJSON.call(this);e.v1=this.v1.toArray();e.v2=this.v2.toArray();return e};bn.prototype.fromJSON=function(e){hn.prototype.fromJSON.call(this,e);this.v1.fromArray(e.v1);this.v2.fromArray(e.v2);return this};xn.prototype=Object.create(hn.prototype);xn.prototype.constructor=xn;xn.prototype.isLineCurve3=!0;xn.prototype.getPoint=function(e,t){t=t||new we;1===e?t.copy(this.v2):(t.copy(this.v2).sub(this.v1),t.multiplyScalar(e).add(this.v1));return t};xn.prototype.getPointAt=function(e,t){return this.getPoint(e,t)};xn.prototype.copy=function(e){hn.prototype.copy.call(this,e);this.v1.copy(e.v1);this.v2.copy(e.v2);return this};xn.prototype.toJSON=function(){var e=hn.prototype.toJSON.call(this);e.v1=this.v1.toArray();e.v2=this.v2.toArray();return e};xn.prototype.fromJSON=function(e){hn.prototype.fromJSON.call(this,e);this.v1.fromArray(e.v1);this.v2.fromArray(e.v2);return this};wn.prototype=Object.create(hn.prototype);wn.prototype.constructor=wn;wn.prototype.isQuadraticBezierCurve=!0;wn.prototype.getPoint=function(e,t){t=t||new H;var r=this.v0,n=this.v1,i=this.v2;t.set(mn(e,r.x,n.x,i.x),mn(e,r.y,n.y,i.y));return t};wn.prototype.copy=function(e){hn.prototype.copy.call(this,e);this.v0.copy(e.v0);this.v1.copy(e.v1);this.v2.copy(e.v2);return this};wn.prototype.toJSON=function(){var e=hn.prototype.toJSON.call(this);e.v0=this.v0.toArray();e.v1=this.v1.toArray();e.v2=this.v2.toArray();return e};wn.prototype.fromJSON=function(e){hn.prototype.fromJSON.call(this,e);this.v0.fromArray(e.v0);this.v1.fromArray(e.v1);this.v2.fromArray(e.v2);return this};Sn.prototype=Object.create(hn.prototype);Sn.prototype.constructor=Sn;Sn.prototype.isQuadraticBezierCurve3=!0;Sn.prototype.getPoint=function(e,t){t=t||new we;var r=this.v0,n=this.v1,i=this.v2;t.set(mn(e,r.x,n.x,i.x),mn(e,r.y,n.y,i.y),mn(e,r.z,n.z,i.z));return t};Sn.prototype.copy=function(e){hn.prototype.copy.call(this,e);this.v0.copy(e.v0);this.v1.copy(e.v1);this.v2.copy(e.v2);return this};Sn.prototype.toJSON=function(){var e=hn.prototype.toJSON.call(this);e.v0=this.v0.toArray();e.v1=this.v1.toArray();e.v2=this.v2.toArray();return e};Sn.prototype.fromJSON=function(e){hn.prototype.fromJSON.call(this,e);this.v0.fromArray(e.v0);this.v1.fromArray(e.v1);this.v2.fromArray(e.v2);return this};Mn.prototype=Object.create(hn.prototype);Mn.prototype.constructor=Mn;Mn.prototype.isSplineCurve=!0;Mn.prototype.getPoint=function(e,t){t=t||new H;var r=this.points,n=(r.length-1)*e;e=Math.floor(n);n-=e;var i=r[0===e?e:e-1],o=r[e],a=r[e>r.length-2?r.length-1:e+1];r=r[e>r.length-3?r.length-1:e+2];t.set(vn(n,i.x,o.x,a.x,r.x),vn(n,i.y,o.y,a.y,r.y));return t};Mn.prototype.copy=function(e){hn.prototype.copy.call(this,e);this.points=[];for(var t=0,r=e.points.length;t<r;t++)this.points.push(e.points[t].clone());return this};Mn.prototype.toJSON=function(){var e=hn.prototype.toJSON.call(this);e.points=[];for(var t=0,r=this.points.length;t<r;t++)e.points.push(this.points[t].toArray());return e};Mn.prototype.fromJSON=function(e){hn.prototype.fromJSON.call(this,e);this.points=[];for(var t=0,r=e.points.length;t<r;t++){var n=e.points[t];this.points.push((new H).fromArray(n))}return this};var ko=Object.freeze({ArcCurve:pn,CatmullRomCurve3:dn,CubicBezierCurve:yn,CubicBezierCurve3:_n,EllipseCurve:ln,LineCurve:bn,LineCurve3:xn,QuadraticBezierCurve:wn,QuadraticBezierCurve3:Sn,SplineCurve:Mn});En.prototype=Object.assign(Object.create(hn.prototype),{constructor:En,add:function(e){this.curves.push(e)},closePath:function(){var e=this.curves[0].getPoint(0),t=this.curves[this.curves.length-1].getPoint(1);e.equals(t)||this.curves.push(new bn(t,e))},getPoint:function(e){var t=e*this.getLength(),r=this.getCurveLengths();for(e=0;e<r.length;){if(r[e]>=t)return t=r[e]-t,e=this.curves[e],r=e.getLength(),e.getPointAt(0===r?0:1-t/r);e++}return null},getLength:function(){var e=this.getCurveLengths();return e[e.length-1]},updateArcLengths:function(){this.needsUpdate=!0;this.cacheLengths=null;this.getCurveLengths()},getCurveLengths:function(){if(this.cacheLengths&&this.cacheLengths.length===this.curves.length)return this.cacheLengths;for(var e=[],t=0,r=0,n=this.curves.length;r<n;r++)t+=this.curves[r].getLength(),e.push(t);return this.cacheLengths=e},getSpacedPoints:function(e){void 0===e&&(e=40);for(var t=[],r=0;r<=e;r++)t.push(this.getPoint(r/e));this.autoClose&&t.push(t[0]);return t},getPoints:function(e){e=e||12;for(var t=[],r,n=0,i=this.curves;n<i.length;n++){var o=i[n];o=o.getPoints(o&&o.isEllipseCurve?2*e:o&&(o.isLineCurve||o.isLineCurve3)?1:o&&o.isSplineCurve?e*o.points.length:e);for(var a=0;a<o.length;a++){var s=o[a];r&&r.equals(s)||(t.push(s),r=s)}}this.autoClose&&1<t.length&&!t[t.length-1].equals(t[0])&&t.push(t[0]);return t},copy:function(e){hn.prototype.copy.call(this,e);this.curves=[];for(var t=0,r=e.curves.length;t<r;t++)this.curves.push(e.curves[t].clone());this.autoClose=e.autoClose;return this},toJSON:function(){var e=hn.prototype.toJSON.call(this);e.autoClose=this.autoClose;e.curves=[];for(var t=0,r=this.curves.length;t<r;t++)e.curves.push(this.curves[t].toJSON());return e},fromJSON:function(e){hn.prototype.fromJSON.call(this,e);this.autoClose=e.autoClose;this.curves=[];for(var t=0,r=e.curves.length;t<r;t++){var n=e.curves[t];this.curves.push((new ko[n.type]).fromJSON(n))}return this}});Cn.prototype=Object.assign(Object.create(En.prototype),{constructor:Cn,setFromPoints:function(e){this.moveTo(e[0].x,e[0].y);for(var t=1,r=e.length;t<r;t++)this.lineTo(e[t].x,e[t].y)},moveTo:function(e,t){this.currentPoint.set(e,t)},lineTo:function(e,t){var r=new bn(this.currentPoint.clone(),new H(e,t));this.curves.push(r);this.currentPoint.set(e,t)},quadraticCurveTo:function(e,t,r,n){e=new wn(this.currentPoint.clone(),new H(e,t),new H(r,n));this.curves.push(e);this.currentPoint.set(r,n)},bezierCurveTo:function(e,t,r,n,i,o){e=new yn(this.currentPoint.clone(),new H(e,t),new H(r,n),new H(i,o));this.curves.push(e);this.currentPoint.set(i,o)},splineThru:function(e){var t=[this.currentPoint.clone()].concat(e);t=new Mn(t);this.curves.push(t);this.currentPoint.copy(e[e.length-1])},arc:function(e,t,r,n,i,o){this.absarc(e+this.currentPoint.x,t+this.currentPoint.y,r,n,i,o)},absarc:function(e,t,r,n,i,o){this.absellipse(e,t,r,r,n,i,o)},ellipse:function(e,t,r,n,i,o,a,s){this.absellipse(e+this.currentPoint.x,t+this.currentPoint.y,r,n,i,o,a,s)},absellipse:function(e,t,r,n,i,o,a,s){e=new ln(e,t,r,n,i,o,a,s);0<this.curves.length&&(t=e.getPoint(0),t.equals(this.currentPoint)||this.lineTo(t.x,t.y));this.curves.push(e);e=e.getPoint(1);this.currentPoint.copy(e)},copy:function(e){En.prototype.copy.call(this,e);this.currentPoint.copy(e.currentPoint);return this},toJSON:function(){var e=En.prototype.toJSON.call(this);e.currentPoint=this.currentPoint.toArray();return e},fromJSON:function(e){En.prototype.fromJSON.call(this,e);this.currentPoint.fromArray(e.currentPoint);return this}});Tn.prototype=Object.assign(Object.create(Cn.prototype),{constructor:Tn,getPointsHoles:function(e){for(var t=[],r=0,n=this.holes.length;r<n;r++)t[r]=this.holes[r].getPoints(e);return t},extractPoints:function(e){return{shape:this.getPoints(e),holes:this.getPointsHoles(e)}},copy:function(e){Cn.prototype.copy.call(this,e);this.holes=[];for(var t=0,r=e.holes.length;t<r;t++)this.holes.push(e.holes[t].clone());return this},toJSON:function(){var e=Cn.prototype.toJSON.call(this);e.uuid=this.uuid;e.holes=[];for(var t=0,r=this.holes.length;t<r;t++)e.holes.push(this.holes[t].toJSON());return e},fromJSON:function(e){Cn.prototype.fromJSON.call(this,e);this.uuid=e.uuid;this.holes=[];for(var t=0,r=e.holes.length;t<r;t++){var n=e.holes[t];this.holes.push((new Cn).fromJSON(n))}return this}});On.prototype=Object.assign(Object.create(h.prototype),{constructor:On,isLight:!0,copy:function(e){h.prototype.copy.call(this,e);this.color.copy(e.color);this.intensity=e.intensity;return this},toJSON:function(e){e=h.prototype.toJSON.call(this,e);e.object.color=this.color.getHex();e.object.intensity=this.intensity;void 0!==this.groundColor&&(e.object.groundColor=this.groundColor.getHex());void 0!==this.distance&&(e.object.distance=this.distance);void 0!==this.angle&&(e.object.angle=this.angle);void 0!==this.decay&&(e.object.decay=this.decay);void 0!==this.penumbra&&(e.object.penumbra=this.penumbra);void 0!==this.shadow&&(e.object.shadow=this.shadow.toJSON());return e}});Pn.prototype=Object.assign(Object.create(On.prototype),{constructor:Pn,isHemisphereLight:!0,copy:function(e){On.prototype.copy.call(this,e);this.groundColor.copy(e.groundColor);return this}});Object.assign(An.prototype,{copy:function(e){this.camera=e.camera.clone();this.bias=e.bias;this.radius=e.radius;this.mapSize.copy(e.mapSize);return this},clone:function(){return(new this.constructor).copy(this)},toJSON:function(){var e={};0!==this.bias&&(e.bias=this.bias);1!==this.radius&&(e.radius=this.radius);if(512!==this.mapSize.x||512!==this.mapSize.y)e.mapSize=this.mapSize.toArray();e.camera=this.camera.toJSON(!1).object;delete e.camera.matrix;return e}});jn.prototype=Object.assign(Object.create(An.prototype),{constructor:jn,isSpotLightShadow:!0,update:function(e){var t=this.camera,r=2*eo.RAD2DEG*e.angle,n=this.mapSize.width/this.mapSize.height;e=e.distance||t.far;if(r!==t.fov||n!==t.aspect||e!==t.far)t.fov=r,t.aspect=n,t.far=e,t.updateProjectionMatrix()}});Rn.prototype=Object.assign(Object.create(On.prototype),{constructor:Rn,isSpotLight:!0,copy:function(e){On.prototype.copy.call(this,e);this.distance=e.distance;this.angle=e.angle;this.penumbra=e.penumbra;this.decay=e.decay;this.target=e.target.clone();this.shadow=e.shadow.clone();return this}});Ln.prototype=Object.assign(Object.create(On.prototype),{constructor:Ln,isPointLight:!0,copy:function(e){On.prototype.copy.call(this,e);this.distance=e.distance;this.decay=e.decay;this.shadow=e.shadow.clone();return this}});In.prototype=Object.assign(Object.create(An.prototype),{constructor:In});Nn.prototype=Object.assign(Object.create(On.prototype),{constructor:Nn,isDirectionalLight:!0,copy:function(e){On.prototype.copy.call(this,e);this.target=e.target.clone();this.shadow=e.shadow.clone();return this}});kn.prototype=Object.assign(Object.create(On.prototype),{constructor:kn,isAmbientLight:!0});Dn.prototype=Object.assign(Object.create(On.prototype),{constructor:Dn,isRectAreaLight:!0,copy:function(e){On.prototype.copy.call(this,e);this.width=e.width;this.height=e.height;return this},toJSON:function(e){e=On.prototype.toJSON.call(this,e);e.object.width=this.width;e.object.height=this.height;return e}});var Do={arraySlice:function(e,t,r){return Do.isTypedArray(e)?new e.constructor(e.subarray(t,void 0!==r?r:e.length)):e.slice(t,r)},convertArray:function(e,t,r){return!e||!r&&e.constructor===t?e:"number"===typeof t.BYTES_PER_ELEMENT?new t(e):Array.prototype.slice.call(e)},isTypedArray:function(e){return ArrayBuffer.isView(e)&&!(e instanceof DataView)},getKeyframeOrder:function(r){for(var e=r.length,t=Array(e),n=0;n!==e;++n)t[n]=n;t.sort(function(e,t){return r[e]-r[t]});return t},sortedArray:function(e,t,r){for(var n=e.length,i=new e.constructor(n),o=0,a=0;a!==n;++o)for(var s=r[o]*t,u=0;u!==t;++u)i[a++]=e[s+u];return i},flattenJSON:function(e,t,r,n){for(var i=1,o=e[0];void 0!==o&&void 0===o[n];)o=e[i++];if(void 0!==o){var a=o[n];if(void 0!==a)if(Array.isArray(a)){do{a=o[n],void 0!==a&&(t.push(o.time),r.push.apply(r,a)),o=e[i++]}while(void 0!==o)}else if(void 0!==a.toArray){do{a=o[n],void 0!==a&&(t.push(o.time),a.toArray(r,r.length)),o=e[i++]}while(void 0!==o)}else{do{a=o[n],void 0!==a&&(t.push(o.time),r.push(a)),o=e[i++]}while(void 0!==o)}}}};Object.assign(Bn.prototype,{evaluate:function(e){var t=this.parameterPositions,r=this._cachedIndex,n=t[r],i=t[r-1];e:{t:{r:{n:if(!(e<n)){for(var o=r+2;;){if(void 0===n){if(e<i)break n;this._cachedIndex=r=t.length;return this.afterEnd_(r-1,e,i)}if(r===o)break;i=n;n=t[++r];if(e<n)break t}n=t.length;break r}if(e>=i)break e;else{o=t[1];e<o&&(r=2,i=o);for(o=r-2;;){if(void 0===i)return this._cachedIndex=0,this.beforeStart_(0,e,n);if(r===o)break;n=i;i=t[--r-1];if(e>=i)break t}n=r;r=0}}for(;r<n;)i=r+n>>>1,e<t[i]?n=i:r=i+1;n=t[r];i=t[r-1];if(void 0===i)return this._cachedIndex=0,this.beforeStart_(0,e,n);if(void 0===n)return this._cachedIndex=r=t.length,this.afterEnd_(r-1,i,e)}this._cachedIndex=r;this.intervalChanged_(r,i,n)}return this.interpolate_(r,i,e,n)},settings:null,DefaultSettings_:{},getSettings_:function(){return this.settings||this.DefaultSettings_},copySampleValue_:function(e){var t=this.resultBuffer,r=this.sampleValues,n=this.valueSize;e*=n;for(var i=0;i!==n;++i)t[i]=r[e+i];return t},interpolate_:function(){throw Error("call to abstract method")},intervalChanged_:function(){}});Object.assign(Bn.prototype,{beforeStart_:Bn.prototype.copySampleValue_,afterEnd_:Bn.prototype.copySampleValue_});Fn.prototype=Object.assign(Object.create(Bn.prototype),{constructor:Fn,DefaultSettings_:{endingStart:2400,endingEnd:2400},intervalChanged_:function(e,t,r){var n=this.parameterPositions,i=e-2,o=e+1,a=n[i],s=n[o];if(void 0===a)switch(this.getSettings_().endingStart){case 2401:i=e;a=2*t-r;break;case 2402:i=n.length-2;a=t+n[i]-n[i+1];break;default:i=e,a=r}if(void 0===s)switch(this.getSettings_().endingEnd){case 2401:o=e;s=2*r-t;break;case 2402:o=1;s=r+n[1]-n[0];break;default:o=e-1,s=t}e=.5*(r-t);n=this.valueSize;this._weightPrev=e/(t-a);this._weightNext=e/(s-r);this._offsetPrev=i*n;this._offsetNext=o*n},interpolate_:function(e,t,r,n){var i=this.resultBuffer,o=this.sampleValues,a=this.valueSize;e*=a;var s=e-a,u=this._offsetPrev,c=this._offsetNext,h=this._weightPrev,l=this._weightNext,p=(r-t)/(n-t);r=p*p;n=r*p;t=-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;for(r=0;r!==a;++r)i[r]=t*o[u+r]+h*o[s+r]+p*o[e+r]+l*o[c+r];return i}});$n.prototype=Object.assign(Object.create(Bn.prototype),{constructor:$n,interpolate_:function(e,t,r,n){var i=this.resultBuffer,o=this.sampleValues,a=this.valueSize;e*=a;var s=e-a;t=(r-t)/(n-t);r=1-t;for(n=0;n!==a;++n)i[n]=o[s+n]*r+o[e+n]*t;return i}});zn.prototype=Object.assign(Object.create(Bn.prototype),{constructor:zn,interpolate_:function(e){return this.copySampleValue_(e-1)}});Object.assign(Un,{toJSON:function(e){var t=e.constructor;if(void 0!==t.toJSON)t=t.toJSON(e);else{t={name:e.name,times:Do.convertArray(e.times,Array),values:Do.convertArray(e.values,Array)};var r=e.getInterpolation();r!==e.DefaultInterpolation&&(t.interpolation=r)}t.type=e.ValueTypeName;return t}});Object.assign(Un.prototype,{constructor:Un,TimeBufferType:Float32Array,ValueBufferType:Float32Array,DefaultInterpolation:2301,InterpolantFactoryMethodDiscrete:function(e){return new zn(this.times,this.values,this.getValueSize(),e)},InterpolantFactoryMethodLinear:function(e){return new $n(this.times,this.values,this.getValueSize(),e)},InterpolantFactoryMethodSmooth:function(e){return new Fn(this.times,this.values,this.getValueSize(),e)},setInterpolation:function(e){switch(e){case 2300:var t=this.InterpolantFactoryMethodDiscrete;break;case 2301:t=this.InterpolantFactoryMethodLinear;break;case 2302:t=this.InterpolantFactoryMethodSmooth}if(void 0===t){t="unsupported interpolation for "+this.ValueTypeName+" keyframe track named "+this.name;if(void 0===this.createInterpolant)if(e!==this.DefaultInterpolation)this.setInterpolation(this.DefaultInterpolation);else throw Error(t);console.warn("THREE.KeyframeTrack:",t);return this}this.createInterpolant=t;return this},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(e){if(0!==e)for(var t=this.times,r=0,n=t.length;r!==n;++r)t[r]+=e;return this},scale:function(e){if(1!==e)for(var t=this.times,r=0,n=t.length;r!==n;++r)t[r]*=e;return this},trim:function(e,t){for(var r=this.times,n=r.length,i=0,o=n-1;i!==n&&r[i]<e;)++i;for(;-1!==o&&r[o]>t;)--o;++o;if(0!==i||o!==n)i>=o&&(o=Math.max(o,1),i=o-1),e=this.getValueSize(),this.times=Do.arraySlice(r,i,o),this.values=Do.arraySlice(this.values,i*e,o*e);return this},validate:function(){var e=!0,t=this.getValueSize();0!==t-Math.floor(t)&&(console.error("THREE.KeyframeTrack: Invalid value size in track.",this),e=!1);var r=this.times;t=this.values;var n=r.length;0===n&&(console.error("THREE.KeyframeTrack: Track is empty.",this),e=!1);for(var i=null,o=0;o!==n;o++){var a=r[o];if("number"===typeof a&&isNaN(a)){console.error("THREE.KeyframeTrack: Time is not a valid number.",this,o,a);e=!1;break}if(null!==i&&i>a){console.error("THREE.KeyframeTrack: Out of order keys.",this,o,a,i);e=!1;break}i=a}if(void 0!==t&&Do.isTypedArray(t))for(o=0,r=t.length;o!==r;++o)if(n=t[o],isNaN(n)){console.error("THREE.KeyframeTrack: Value is not a valid number.",this,o,n);e=!1;break}return e},optimize:function(){for(var e=this.times,t=this.values,r=this.getValueSize(),n=2302===this.getInterpolation(),i=1,o=e.length-1,a=1;a<o;++a){var s=!1,u=e[a];if(u!==e[a+1]&&(1!==a||u!==u[0]))if(n)s=!0;else{var c=a*r,h=c-r,l=c+r;for(u=0;u!==r;++u){var p=t[c+u];if(p!==t[h+u]||p!==t[l+u]){s=!0;break}}}if(s){if(a!==i)for(e[i]=e[a],s=a*r,c=i*r,u=0;u!==r;++u)t[c+u]=t[s+u];++i}}if(0<o){e[i]=e[o];s=o*r;c=i*r;for(u=0;u!==r;++u)t[c+u]=t[s+u];++i}i!==e.length&&(this.times=Do.arraySlice(e,0,i),this.values=Do.arraySlice(t,0,i*r));return this}});Gn.prototype=Object.assign(Object.create(Un.prototype),{constructor:Gn,ValueTypeName:"bool",ValueBufferType:Array,DefaultInterpolation:2300,InterpolantFactoryMethodLinear:void 0,InterpolantFactoryMethodSmooth:void 0});Vn.prototype=Object.assign(Object.create(Un.prototype),{constructor:Vn,ValueTypeName:"color"});Hn.prototype=Object.assign(Object.create(Un.prototype),{constructor:Hn,ValueTypeName:"number"});qn.prototype=Object.assign(Object.create(Bn.prototype),{constructor:qn,interpolate_:function(e,t,r,n){var i=this.resultBuffer,o=this.sampleValues,a=this.valueSize;e*=a;t=(r-t)/(n-t);for(r=e+a;e!==r;e+=4)s.slerpFlat(i,0,o,e-a,o,e,t);return i}});Wn.prototype=Object.assign(Object.create(Un.prototype),{constructor:Wn,ValueTypeName:"quaternion",DefaultInterpolation:2301,InterpolantFactoryMethodLinear:function(e){return new qn(this.times,this.values,this.getValueSize(),e)},InterpolantFactoryMethodSmooth:void 0});Xn.prototype=Object.assign(Object.create(Un.prototype),{constructor:Xn,ValueTypeName:"string",ValueBufferType:Array,DefaultInterpolation:2300,InterpolantFactoryMethodLinear:void 0,InterpolantFactoryMethodSmooth:void 0});Yn.prototype=Object.assign(Object.create(Un.prototype),{constructor:Yn,ValueTypeName:"vector"});Object.assign(Kn,{parse:function(e){for(var t=[],r=e.tracks,n=1/(e.fps||1),i=0,o=r.length;i!==o;++i)t.push(Jn(r[i]).scale(n));return new Kn(e.name,e.duration,t)},toJSON:function(e){var t=[],r=e.tracks;e={name:e.name,duration:e.duration,tracks:t,uuid:e.uuid};for(var n=0,i=r.length;n!==i;++n)t.push(Un.toJSON(r[n]));return e},CreateFromMorphTargetSequence:function(e,t,r,n){for(var i=t.length,o=[],a=0;a<i;a++){var s=[],u=[];s.push((a+i-1)%i,a,(a+1)%i);u.push(0,1,0);var c=Do.getKeyframeOrder(s);s=Do.sortedArray(s,1,c);u=Do.sortedArray(u,1,c);n||0!==s[0]||(s.push(i),u.push(u[0]));o.push(new Hn(".morphTargetInfluences["+t[a].name+"]",s,u).scale(1/r))}return new Kn(e,-1,o)},findByName:function(e,t){var r=e;Array.isArray(e)||(r=e.geometry&&e.geometry.animations||e.animations);for(e=0;e<r.length;e++)if(r[e].name===t)return r[e];return null},CreateClipsFromMorphTargetSequences:function(e,t,r){for(var n={},i=/^([\w-]*?)([\d]+)$/,o=0,a=e.length;o<a;o++){var s=e[o],u=s.name.match(i);if(u&&1<u.length){var c=u[1];(u=n[c])||(n[c]=u=[]);u.push(s)}}e=[];for(c in n)e.push(Kn.CreateFromMorphTargetSequence(c,n[c],t,r));return e},parseAnimation:function(e,t){if(!e)return console.error("THREE.AnimationClip: No animation in JSONLoader data."),null;var r=function(e,t,r,n,i){if(0!==r.length){var o=[],a=[];Do.flattenJSON(r,o,a,n);0!==o.length&&i.push(new e(t,o,a))}},n=[],i=e.name||"default",o=e.length||-1,a=e.fps||30;e=e.hierarchy||[];for(var s=0;s<e.length;s++){var u=e[s].keys;if(u&&0!==u.length)if(u[0].morphTargets){o={};for(var c=0;c<u.length;c++)if(u[c].morphTargets)for(var h=0;h<u[c].morphTargets.length;h++)o[u[c].morphTargets[h]]=-1;for(var l in o){var p=[],f=[];for(h=0;h!==u[c].morphTargets.length;++h){var d=u[c];p.push(d.time);f.push(d.morphTarget===l?1:0)}n.push(new Hn(".morphTargetInfluence["+l+"]",p,f))}o=o.length*(a||1)}else c=".bones["+t[s].name+"]",r(Yn,c+".position",u,"pos",n),r(Wn,c+".quaternion",u,"rot",n),r(Yn,c+".scale",u,"scl",n)}return 0===n.length?null:new Kn(i,o,n)}});Object.assign(Kn.prototype,{resetDuration:function(){for(var e=0,t=0,r=this.tracks.length;t!==r;++t){var n=this.tracks[t];e=Math.max(e,n.times[n.times.length-1])}this.duration=e;return this},trim:function(){for(var e=0;e<this.tracks.length;e++)this.tracks[e].trim(0,this.duration);return this},validate:function(){for(var e=!0,t=0;t<this.tracks.length;t++)e=e&&this.tracks[t].validate();return e},optimize:function(){for(var e=0;e<this.tracks.length;e++)this.tracks[e].optimize();return this}});Object.assign(Qn.prototype,{load:function(e,t,r,n){var i=this;new nn(i.manager).load(e,function(e){t(i.parse(JSON.parse(e)))},r,n)},setTextures:function(e){this.textures=e},parse:function(e){function t(e){void 0===r[e]&&console.warn("THREE.MaterialLoader: Undefined texture",e);return r[e]}var r=this.textures,n=new Oo[e.type];void 0!==e.uuid&&(n.uuid=e.uuid);void 0!==e.name&&(n.name=e.name);void 0!==e.color&&n.color.setHex(e.color);void 0!==e.roughness&&(n.roughness=e.roughness);void 0!==e.metalness&&(n.metalness=e.metalness);void 0!==e.emissive&&n.emissive.setHex(e.emissive);void 0!==e.specular&&n.specular.setHex(e.specular);void 0!==e.shininess&&(n.shininess=e.shininess);void 0!==e.clearCoat&&(n.clearCoat=e.clearCoat);void 0!==e.clearCoatRoughness&&(n.clearCoatRoughness=e.clearCoatRoughness);void 0!==e.uniforms&&(n.uniforms=e.uniforms);void 0!==e.vertexShader&&(n.vertexShader=e.vertexShader);void 0!==e.fragmentShader&&(n.fragmentShader=e.fragmentShader);void 0!==e.vertexColors&&(n.vertexColors=e.vertexColors);void 0!==e.fog&&(n.fog=e.fog);void 0!==e.flatShading&&(n.flatShading=e.flatShading);void 0!==e.blending&&(n.blending=e.blending);void 0!==e.side&&(n.side=e.side);void 0!==e.opacity&&(n.opacity=e.opacity);void 0!==e.transparent&&(n.transparent=e.transparent);void 0!==e.alphaTest&&(n.alphaTest=e.alphaTest);void 0!==e.depthTest&&(n.depthTest=e.depthTest);void 0!==e.depthWrite&&(n.depthWrite=e.depthWrite);void 0!==e.colorWrite&&(n.colorWrite=e.colorWrite);void 0!==e.wireframe&&(n.wireframe=e.wireframe);void 0!==e.wireframeLinewidth&&(n.wireframeLinewidth=e.wireframeLinewidth);void 0!==e.wireframeLinecap&&(n.wireframeLinecap=e.wireframeLinecap);void 0!==e.wireframeLinejoin&&(n.wireframeLinejoin=e.wireframeLinejoin);void 0!==e.rotation&&(n.rotation=e.rotation);1!==e.linewidth&&(n.linewidth=e.linewidth);void 0!==e.dashSize&&(n.dashSize=e.dashSize);void 0!==e.gapSize&&(n.gapSize=e.gapSize);void 0!==e.scale&&(n.scale=e.scale);void 0!==e.polygonOffset&&(n.polygonOffset=e.polygonOffset);void 0!==e.polygonOffsetFactor&&(n.polygonOffsetFactor=e.polygonOffsetFactor);void 0!==e.polygonOffsetUnits&&(n.polygonOffsetUnits=e.polygonOffsetUnits);void 0!==e.skinning&&(n.skinning=e.skinning);void 0!==e.morphTargets&&(n.morphTargets=e.morphTargets);void 0!==e.dithering&&(n.dithering=e.dithering);void 0!==e.visible&&(n.visible=e.visible);void 0!==e.userData&&(n.userData=e.userData);void 0!==e.shading&&(n.flatShading=1===e.shading);void 0!==e.size&&(n.size=e.size);void 0!==e.sizeAttenuation&&(n.sizeAttenuation=e.sizeAttenuation);void 0!==e.map&&(n.map=t(e.map));void 0!==e.alphaMap&&(n.alphaMap=t(e.alphaMap),n.transparent=!0);void 0!==e.bumpMap&&(n.bumpMap=t(e.bumpMap));void 0!==e.bumpScale&&(n.bumpScale=e.bumpScale);void 0!==e.normalMap&&(n.normalMap=t(e.normalMap));void 0!==e.normalMapType&&(n.normalMapType=e.normalMapType);if(void 0!==e.normalScale){var i=e.normalScale;!1===Array.isArray(i)&&(i=[i,i]);n.normalScale=(new H).fromArray(i)}void 0!==e.displacementMap&&(n.displacementMap=t(e.displacementMap));void 0!==e.displacementScale&&(n.displacementScale=e.displacementScale);void 0!==e.displacementBias&&(n.displacementBias=e.displacementBias);void 0!==e.roughnessMap&&(n.roughnessMap=t(e.roughnessMap));void 0!==e.metalnessMap&&(n.metalnessMap=t(e.metalnessMap));void 0!==e.emissiveMap&&(n.emissiveMap=t(e.emissiveMap));void 0!==e.emissiveIntensity&&(n.emissiveIntensity=e.emissiveIntensity);void 0!==e.specularMap&&(n.specularMap=t(e.specularMap));void 0!==e.envMap&&(n.envMap=t(e.envMap));void 0!==e.reflectivity&&(n.reflectivity=e.reflectivity);void 0!==e.lightMap&&(n.lightMap=t(e.lightMap));void 0!==e.lightMapIntensity&&(n.lightMapIntensity=e.lightMapIntensity);void 0!==e.aoMap&&(n.aoMap=t(e.aoMap));void 0!==e.aoMapIntensity&&(n.aoMapIntensity=e.aoMapIntensity);void 0!==e.gradientMap&&(n.gradientMap=t(e.gradientMap));return n}});Object.assign(ei.prototype,{load:function(e,t,r,n){var i=this;new nn(i.manager).load(e,function(e){t(i.parse(JSON.parse(e)))},r,n)},parse:function(e){var t=new A,r=e.data.index;void 0!==r&&(r=new Bo[r.type](r.array),t.setIndex(new y(r,1)));var n=e.data.attributes;for(o in n){var i=n[o];r=new Bo[i.type](i.array);t.addAttribute(o,new y(r,i.itemSize,i.normalized))}var o=e.data.groups||e.data.drawcalls||e.data.offsets;if(void 0!==o)for(r=0,n=o.length;r!==n;++r)i=o[r],t.addGroup(i.start,i.count,i.materialIndex);e=e.data.boundingSphere;void 0!==e&&(o=new we,void 0!==e.center&&o.fromArray(e.center),t.boundingSphere=new c(o,e.radius));return t}});var Bo={Int8Array:Int8Array,Uint8Array:Uint8Array,Uint8ClampedArray:"undefined"!==typeof Uint8ClampedArray?Uint8ClampedArray:Uint8Array,Int16Array:Int16Array,Uint16Array:Uint16Array,Int32Array:Int32Array,Uint32Array:Uint32Array,Float32Array:Float32Array,Float64Array:Float64Array};ti.Handlers={handlers:[],add:function(e,t){this.handlers.push(e,t)},get:function(e){for(var t=this.handlers,r=0,n=t.length;r<n;r+=2){var i=t[r+1];if(t[r].test(e))return i}return null}};Object.assign(ti.prototype,{crossOrigin:"anonymous",onLoadStart:function(){},onLoadProgress:function(){},onLoadComplete:function(){},initMaterials:function(e,t,r){for(var n=[],i=0;i<e.length;++i)n[i]=this.createMaterial(e[i],t,r);return n},createMaterial:function(){var o={NoBlending:0,NormalBlending:1,AdditiveBlending:2,SubtractiveBlending:3,MultiplyBlending:4,CustomBlending:5},c=new w,h=new cn,l=new Qn;return function(e,a,s){function t(e,t,r,n,i){e=a+e;var o=ti.Handlers.get(e);null!==o?e=o.load(e):(h.setCrossOrigin(s),e=h.load(e));void 0!==t&&(e.repeat.fromArray(t),1!==t[0]&&(e.wrapS=1e3),1!==t[1]&&(e.wrapT=1e3));void 0!==r&&e.offset.fromArray(r);void 0!==n&&("repeat"===n[0]&&(e.wrapS=1e3),"mirror"===n[0]&&(e.wrapS=1002),"repeat"===n[1]&&(e.wrapT=1e3),"mirror"===n[1]&&(e.wrapT=1002));void 0!==i&&(e.anisotropy=i);t=eo.generateUUID();u[t]=e;return t}var u={},r={uuid:eo.generateUUID(),type:"MeshLambertMaterial"},n;for(n in e){var i=e[n];switch(n){case"DbgColor":case"DbgIndex":case"opticalDensity":case"illumination":break;case"DbgName":r.name=i;break;case"blending":r.blending=o[i];break;case"colorAmbient":case"mapAmbient":console.warn("THREE.Loader.createMaterial:",n,"is no longer supported.");break;case"colorDiffuse":r.color=c.fromArray(i).getHex();break;case"colorSpecular":r.specular=c.fromArray(i).getHex();break;case"colorEmissive":r.emissive=c.fromArray(i).getHex();break;case"specularCoef":r.shininess=i;break;case"shading":"basic"===i.toLowerCase()&&(r.type="MeshBasicMaterial");"phong"===i.toLowerCase()&&(r.type="MeshPhongMaterial");"standard"===i.toLowerCase()&&(r.type="MeshStandardMaterial");break;case"mapDiffuse":r.map=t(i,e.mapDiffuseRepeat,e.mapDiffuseOffset,e.mapDiffuseWrap,e.mapDiffuseAnisotropy);break;case"mapDiffuseRepeat":case"mapDiffuseOffset":case"mapDiffuseWrap":case"mapDiffuseAnisotropy":break;case"mapEmissive":r.emissiveMap=t(i,e.mapEmissiveRepeat,e.mapEmissiveOffset,e.mapEmissiveWrap,e.mapEmissiveAnisotropy);break;case"mapEmissiveRepeat":case"mapEmissiveOffset":case"mapEmissiveWrap":case"mapEmissiveAnisotropy":break;case"mapLight":r.lightMap=t(i,e.mapLightRepeat,e.mapLightOffset,e.mapLightWrap,e.mapLightAnisotropy);break;case"mapLightRepeat":case"mapLightOffset":case"mapLightWrap":case"mapLightAnisotropy":break;case"mapAO":r.aoMap=t(i,e.mapAORepeat,e.mapAOOffset,e.mapAOWrap,e.mapAOAnisotropy);break;case"mapAORepeat":case"mapAOOffset":case"mapAOWrap":case"mapAOAnisotropy":break;case"mapBump":r.bumpMap=t(i,e.mapBumpRepeat,e.mapBumpOffset,e.mapBumpWrap,e.mapBumpAnisotropy);break;case"mapBumpScale":r.bumpScale=i;break;case"mapBumpRepeat":case"mapBumpOffset":case"mapBumpWrap":case"mapBumpAnisotropy":break;case"mapNormal":r.normalMap=t(i,e.mapNormalRepeat,e.mapNormalOffset,e.mapNormalWrap,e.mapNormalAnisotropy);break;case"mapNormalFactor":r.normalScale=i;break;case"mapNormalRepeat":case"mapNormalOffset":case"mapNormalWrap":case"mapNormalAnisotropy":break;case"mapSpecular":r.specularMap=t(i,e.mapSpecularRepeat,e.mapSpecularOffset,e.mapSpecularWrap,e.mapSpecularAnisotropy);break;case"mapSpecularRepeat":case"mapSpecularOffset":case"mapSpecularWrap":case"mapSpecularAnisotropy":break;case"mapMetalness":r.metalnessMap=t(i,e.mapMetalnessRepeat,e.mapMetalnessOffset,e.mapMetalnessWrap,e.mapMetalnessAnisotropy);break;case"mapMetalnessRepeat":case"mapMetalnessOffset":case"mapMetalnessWrap":case"mapMetalnessAnisotropy":break;case"mapRoughness":r.roughnessMap=t(i,e.mapRoughnessRepeat,e.mapRoughnessOffset,e.mapRoughnessWrap,e.mapRoughnessAnisotropy);break;case"mapRoughnessRepeat":case"mapRoughnessOffset":case"mapRoughnessWrap":case"mapRoughnessAnisotropy":break;case"mapAlpha":r.alphaMap=t(i,e.mapAlphaRepeat,e.mapAlphaOffset,e.mapAlphaWrap,e.mapAlphaAnisotropy);break;case"mapAlphaRepeat":case"mapAlphaOffset":case"mapAlphaWrap":case"mapAlphaAnisotropy":break;case"flipSided":r.side=1;break;case"doubleSided":r.side=2;break;case"transparency":console.warn("THREE.Loader.createMaterial: transparency has been renamed to opacity");r.opacity=i;break;case"depthTest":case"depthWrite":case"colorWrite":case"opacity":case"reflectivity":case"transparent":case"visible":case"wireframe":r[n]=i;break;case"vertexColors":!0===i&&(r.vertexColors=2);"face"===i&&(r.vertexColors=1);break;default:console.error("THREE.Loader.createMaterial: Unsupported",n,i)}}"MeshBasicMaterial"===r.type&&delete r.emissive;"MeshPhongMaterial"!==r.type&&delete r.specular;1>r.opacity&&(r.transparent=!0);l.setTextures(u);return l.parse(r)}}()});var Fo={decodeText:function(e){if("undefined"!==typeof TextDecoder)return(new TextDecoder).decode(e);for(var t="",r=0,n=e.length;r<n;r++)t+=String.fromCharCode(e[r]);return decodeURIComponent(escape(t))},extractUrlBase:function(e){var t=e.lastIndexOf("/");return-1===t?"./":e.substr(0,t+1)}};Object.assign(ri.prototype,{crossOrigin:"anonymous",load:function(r,n,e,t){var i=this,o=this.texturePath&&"string"===typeof this.texturePath?this.texturePath:Fo.extractUrlBase(r),a=new nn(this.manager);a.setWithCredentials(this.withCredentials);a.load(r,function(e){e=JSON.parse(e);var t=e.metadata;if(void 0!==t&&(t=t.type,void 0!==t&&"object"===t.toLowerCase())){console.error("THREE.JSONLoader: "+r+" should be loaded with THREE.ObjectLoader instead.");return}e=i.parse(e,o);n(e.geometry,e.materials)},e,t)},setCrossOrigin:function(e){this.crossOrigin=e;return this},setTexturePath:function(e){this.texturePath=e;return this},parse:function(){return function(e,t){void 0!==e.data&&(e=e.data);e.scale=void 0!==e.scale?1/e.scale:1;var r=new S,n=e,i,o,a,s=n.faces;var u=n.vertices;var c=n.normals,h=n.colors;var l=n.scale;var p=0;if(void 0!==n.uvs){for(i=0;i<n.uvs.length;i++)n.uvs[i].length&&p++;for(i=0;i<p;i++)r.faceVertexUvs[i]=[]}var f=0;for(a=u.length;f<a;)i=new we,i.x=u[f++]*l,i.y=u[f++]*l,i.z=u[f++]*l,r.vertices.push(i);f=0;for(a=s.length;f<a;){u=s[f++];var d=u&1;var v=u&2;i=u&8;var m=u&16;var g=u&32;l=u&64;u&=128;if(d){d=new D;d.a=s[f];d.b=s[f+1];d.c=s[f+3];var y=new D;y.a=s[f+1];y.b=s[f+2];y.c=s[f+3];f+=4;v&&(v=s[f++],d.materialIndex=v,y.materialIndex=v);v=r.faces.length;if(i)for(i=0;i<p;i++){var _=n.uvs[i];r.faceVertexUvs[i][v]=[];r.faceVertexUvs[i][v+1]=[];for(o=0;4>o;o++){var b=s[f++];var x=_[2*b];b=_[2*b+1];x=new H(x,b);2!==o&&r.faceVertexUvs[i][v].push(x);0!==o&&r.faceVertexUvs[i][v+1].push(x)}}m&&(m=3*s[f++],d.normal.set(c[m++],c[m++],c[m]),y.normal.copy(d.normal));if(g)for(i=0;4>i;i++)m=3*s[f++],g=new we(c[m++],c[m++],c[m]),2!==i&&d.vertexNormals.push(g),0!==i&&y.vertexNormals.push(g);l&&(l=s[f++],l=h[l],d.color.setHex(l),y.color.setHex(l));if(u)for(i=0;4>i;i++)l=s[f++],l=h[l],2!==i&&d.vertexColors.push(new w(l)),0!==i&&y.vertexColors.push(new w(l));r.faces.push(d);r.faces.push(y)}else{d=new D;d.a=s[f++];d.b=s[f++];d.c=s[f++];v&&(v=s[f++],d.materialIndex=v);v=r.faces.length;if(i)for(i=0;i<p;i++)for(_=n.uvs[i],r.faceVertexUvs[i][v]=[],o=0;3>o;o++)b=s[f++],x=_[2*b],b=_[2*b+1],x=new H(x,b),r.faceVertexUvs[i][v].push(x);m&&(m=3*s[f++],d.normal.set(c[m++],c[m++],c[m]));if(g)for(i=0;3>i;i++)m=3*s[f++],g=new we(c[m++],c[m++],c[m]),d.vertexNormals.push(g);l&&(l=s[f++],d.color.setHex(h[l]));if(u)for(i=0;3>i;i++)l=s[f++],d.vertexColors.push(new w(h[l]));r.faces.push(d)}}n=e;f=void 0!==n.influencesPerVertex?n.influencesPerVertex:2;if(n.skinWeights)for(a=0,s=n.skinWeights.length;a<s;a+=f)r.skinWeights.push(new Se(n.skinWeights[a],1<f?n.skinWeights[a+1]:0,2<f?n.skinWeights[a+2]:0,3<f?n.skinWeights[a+3]:0));if(n.skinIndices)for(a=0,s=n.skinIndices.length;a<s;a+=f)r.skinIndices.push(new Se(n.skinIndices[a],1<f?n.skinIndices[a+1]:0,2<f?n.skinIndices[a+2]:0,3<f?n.skinIndices[a+3]:0));r.bones=n.bones;r.bones&&0<r.bones.length&&(r.skinWeights.length!==r.skinIndices.length||r.skinIndices.length!==r.vertices.length)&&console.warn("When skinning, number of vertices ("+r.vertices.length+"), skinIndices ("+r.skinIndices.length+"), and skinWeights ("+r.skinWeights.length+") should match.");a=e;s=a.scale;if(void 0!==a.morphTargets)for(n=0,f=a.morphTargets.length;n<f;n++)for(r.morphTargets[n]={},r.morphTargets[n].name=a.morphTargets[n].name,r.morphTargets[n].vertices=[],c=r.morphTargets[n].vertices,h=a.morphTargets[n].vertices,p=0,u=h.length;p<u;p+=3)l=new we,l.x=h[p]*s,l.y=h[p+1]*s,l.z=h[p+2]*s,c.push(l);if(void 0!==a.morphColors&&0<a.morphColors.length)for(console.warn('THREE.JSONLoader: "morphColors" no longer supported. Using them as face colors.'),s=r.faces,a=a.morphColors[0].colors,n=0,f=s.length;n<f;n++)s[n].color.fromArray(a,3*n);a=e;n=[];f=[];void 0!==a.animation&&f.push(a.animation);void 0!==a.animations&&(a.animations.length?f=f.concat(a.animations):f.push(a.animations));for(a=0;a<f.length;a++)(s=Kn.parseAnimation(f[a],r.bones))&&n.push(s);r.morphTargets&&(f=Kn.CreateClipsFromMorphTargetSequences(r.morphTargets,10),n=n.concat(f));0<n.length&&(r.animations=n);r.computeFaceNormals();r.computeBoundingSphere();if(void 0===e.materials||0===e.materials.length)return{geometry:r};e=ti.prototype.initMaterials(e.materials,t,this.crossOrigin);return{geometry:r,materials:e}}}()});Object.assign(ni.prototype,{crossOrigin:"anonymous",load:function(r,n,e,i){""===this.texturePath&&(this.texturePath=r.substring(0,r.lastIndexOf("/")+1));var o=this;new nn(o.manager).load(r,function(e){var t=null;try{t=JSON.parse(e)}catch(e){void 0!==i&&i(e);console.error("THREE:ObjectLoader: Can't parse "+r+".",e.message);return}e=t.metadata;void 0===e||void 0===e.type||"geometry"===e.type.toLowerCase()?console.error("THREE.ObjectLoader: Can't load "+r+". Use THREE.JSONLoader instead."):o.parse(t,n)},e,i)},setTexturePath:function(e){this.texturePath=e;return this},setCrossOrigin:function(e){this.crossOrigin=e;return this},parse:function(e,t){var r=this.parseShape(e.shapes);r=this.parseGeometries(e.geometries,r);var n=this.parseImages(e.images,function(){void 0!==t&&t(i)});n=this.parseTextures(e.textures,n);n=this.parseMaterials(e.materials,n);var i=this.parseObject(e.object,r,n);e.animations&&(i.animations=this.parseAnimations(e.animations));void 0!==e.images&&0!==e.images.length||void 0===t||t(i);return i},parseShape:function(e){var t={};if(void 0!==e)for(var r=0,n=e.length;r<n;r++){var i=(new Tn).fromJSON(e[r]);t[i.uuid]=i}return t},parseGeometries:function(e,t){var r={};if(void 0!==e)for(var n=new ri,i=new ei,o=0,a=e.length;o<a;o++){var s=e[o];switch(s.type){case"PlaneGeometry":case"PlaneBufferGeometry":var u=new To[s.type](s.width,s.height,s.widthSegments,s.heightSegments);break;case"BoxGeometry":case"BoxBufferGeometry":case"CubeGeometry":u=new To[s.type](s.width,s.height,s.depth,s.widthSegments,s.heightSegments,s.depthSegments);break;case"CircleGeometry":case"CircleBufferGeometry":u=new To[s.type](s.radius,s.segments,s.thetaStart,s.thetaLength);break;case"CylinderGeometry":case"CylinderBufferGeometry":u=new To[s.type](s.radiusTop,s.radiusBottom,s.height,s.radialSegments,s.heightSegments,s.openEnded,s.thetaStart,s.thetaLength);break;case"ConeGeometry":case"ConeBufferGeometry":u=new To[s.type](s.radius,s.height,s.radialSegments,s.heightSegments,s.openEnded,s.thetaStart,s.thetaLength);break;case"SphereGeometry":case"SphereBufferGeometry":u=new To[s.type](s.radius,s.widthSegments,s.heightSegments,s.phiStart,s.phiLength,s.thetaStart,s.thetaLength);break;case"DodecahedronGeometry":case"DodecahedronBufferGeometry":case"IcosahedronGeometry":case"IcosahedronBufferGeometry":case"OctahedronGeometry":case"OctahedronBufferGeometry":case"TetrahedronGeometry":case"TetrahedronBufferGeometry":u=new To[s.type](s.radius,s.detail);break;case"RingGeometry":case"RingBufferGeometry":u=new To[s.type](s.innerRadius,s.outerRadius,s.thetaSegments,s.phiSegments,s.thetaStart,s.thetaLength);break;case"TorusGeometry":case"TorusBufferGeometry":u=new To[s.type](s.radius,s.tube,s.radialSegments,s.tubularSegments,s.arc);break;case"TorusKnotGeometry":case"TorusKnotBufferGeometry":u=new To[s.type](s.radius,s.tube,s.tubularSegments,s.radialSegments,s.p,s.q);break;case"LatheGeometry":case"LatheBufferGeometry":u=new To[s.type](s.points,s.segments,s.phiStart,s.phiLength);break;case"PolyhedronGeometry":case"PolyhedronBufferGeometry":u=new To[s.type](s.vertices,s.indices,s.radius,s.details);break;case"ShapeGeometry":case"ShapeBufferGeometry":u=[];for(var c=0,h=s.shapes.length;c<h;c++){var l=t[s.shapes[c]];u.push(l)}u=new To[s.type](u,s.curveSegments);break;case"ExtrudeGeometry":case"ExtrudeBufferGeometry":u=[];c=0;for(h=s.shapes.length;c<h;c++)l=t[s.shapes[c]],u.push(l);c=s.options.extrudePath;void 0!==c&&(s.options.extrudePath=(new ko[c.type]).fromJSON(c));u=new To[s.type](u,s.options);break;case"BufferGeometry":u=i.parse(s);break;case"Geometry":u=n.parse(s,this.texturePath).geometry;break;default:console.warn('THREE.ObjectLoader: Unsupported geometry type "'+s.type+'"');continue}u.uuid=s.uuid;void 0!==s.name&&(u.name=s.name);!0===u.isBufferGeometry&&void 0!==s.userData&&(u.userData=s.userData);r[s.uuid]=u}return r},parseMaterials:function(e,t){var r={};if(void 0!==e){var n=new Qn;n.setTextures(t);t=0;for(var i=e.length;t<i;t++){var o=e[t];if("MultiMaterial"===o.type){for(var a=[],s=0;s<o.materials.length;s++)a.push(n.parse(o.materials[s]));r[o.uuid]=a}else r[o.uuid]=n.parse(o)}}return r},parseAnimations:function(e){for(var t=[],r=0;r<e.length;r++){var n=e[r],i=Kn.parse(n);void 0!==n.uuid&&(i.uuid=n.uuid);t.push(i)}return t},parseImages:function(e,t){function r(e){n.manager.itemStart(e);return o.load(e,function(){n.manager.itemEnd(e)},void 0,function(){n.manager.itemEnd(e);n.manager.itemError(e)})}var n=this,i={};if(void 0!==e&&0<e.length){t=new rn(t);var o=new sn(t);o.setCrossOrigin(this.crossOrigin);t=0;for(var a=e.length;t<a;t++){var s=e[t],u=s.url;if(Array.isArray(u)){i[s.uuid]=[];for(var c=0,h=u.length;c<h;c++){var l=u[c];l=/^(\/\/)|([a-z]+:(\/\/)?)/i.test(l)?l:n.texturePath+l;i[s.uuid].push(r(l))}}else l=/^(\/\/)|([a-z]+:(\/\/)?)/i.test(s.url)?s.url:n.texturePath+s.url,i[s.uuid]=r(l)}}return i},parseTextures:function(e,t){function r(e,t){if("number"===typeof e)return e;console.warn("THREE.ObjectLoader.parseTexture: Constant should be in numeric form.",e);return t[e]}var n={};if(void 0!==e)for(var i=0,o=e.length;i<o;i++){var a=e[i];void 0===a.image&&console.warn('THREE.ObjectLoader: No "image" specified for',a.uuid);void 0===t[a.image]&&console.warn("THREE.ObjectLoader: Undefined image",a.image);var s=Array.isArray(t[a.image])?new U(t[a.image]):new p(t[a.image]);s.needsUpdate=!0;s.uuid=a.uuid;void 0!==a.name&&(s.name=a.name);void 0!==a.mapping&&(s.mapping=r(a.mapping,$o));void 0!==a.offset&&s.offset.fromArray(a.offset);void 0!==a.repeat&&s.repeat.fromArray(a.repeat);void 0!==a.center&&s.center.fromArray(a.center);void 0!==a.rotation&&(s.rotation=a.rotation);void 0!==a.wrap&&(s.wrapS=r(a.wrap[0],zo),s.wrapT=r(a.wrap[1],zo));void 0!==a.format&&(s.format=a.format);void 0!==a.minFilter&&(s.minFilter=r(a.minFilter,Uo));void 0!==a.magFilter&&(s.magFilter=r(a.magFilter,Uo));void 0!==a.anisotropy&&(s.anisotropy=a.anisotropy);void 0!==a.flipY&&(s.flipY=a.flipY);n[a.uuid]=s}return n},parseObject:function(e,t,o){function r(e){void 0===t[e]&&console.warn("THREE.ObjectLoader: Undefined geometry",e);return t[e]}function n(e){if(void 0!==e){if(Array.isArray(e)){for(var t=[],r=0,n=e.length;r<n;r++){var i=e[r];void 0===o[i]&&console.warn("THREE.ObjectLoader: Undefined material",i);t.push(o[i])}return t}void 0===o[e]&&console.warn("THREE.ObjectLoader: Undefined material",e);return o[e]}}switch(e.type){case"Scene":var i=new Mt;void 0!==e.background&&Number.isInteger(e.background)&&(i.background=new w(e.background));void 0!==e.fog&&("Fog"===e.fog.type?i.fog=new St(e.fog.color,e.fog.near,e.fog.far):"FogExp2"===e.fog.type&&(i.fog=new wt(e.fog.color,e.fog.density)));break;case"PerspectiveCamera":i=new gt(e.fov,e.aspect,e.near,e.far);void 0!==e.focus&&(i.focus=e.focus);void 0!==e.zoom&&(i.zoom=e.zoom);void 0!==e.filmGauge&&(i.filmGauge=e.filmGauge);void 0!==e.filmOffset&&(i.filmOffset=e.filmOffset);void 0!==e.view&&(i.view=Object.assign({},e.view));break;case"OrthographicCamera":i=new f(e.left,e.right,e.top,e.bottom,e.near,e.far);void 0!==e.zoom&&(i.zoom=e.zoom);void 0!==e.view&&(i.view=Object.assign({},e.view));break;case"AmbientLight":i=new kn(e.color,e.intensity);break;case"DirectionalLight":i=new Nn(e.color,e.intensity);break;case"PointLight":i=new Ln(e.color,e.intensity,e.distance,e.decay);break;case"RectAreaLight":i=new Dn(e.color,e.intensity,e.width,e.height);break;case"SpotLight":i=new Rn(e.color,e.intensity,e.distance,e.angle,e.penumbra,e.decay);break;case"HemisphereLight":i=new Pn(e.color,e.groundColor,e.intensity);break;case"SkinnedMesh":console.warn("THREE.ObjectLoader.parseObject() does not support SkinnedMesh yet.");case"Mesh":i=r(e.geometry);var a=n(e.material);i=i.bones&&0<i.bones.length?new Rt(i,a):new $(i,a);break;case"LOD":i=new Pt;break;case"Line":i=new It(r(e.geometry),n(e.material),e.mode);break;case"LineLoop":i=new kt(r(e.geometry),n(e.material));break;case"LineSegments":i=new Nt(r(e.geometry),n(e.material));break;case"PointCloud":case"Points":i=new Bt(r(e.geometry),n(e.material));break;case"Sprite":i=new Ot(n(e.material));break;case"Group":i=new mt;break;default:i=new h}i.uuid=e.uuid;void 0!==e.name&&(i.name=e.name);void 0!==e.matrix?(i.matrix.fromArray(e.matrix),void 0!==e.matrixAutoUpdate&&(i.matrixAutoUpdate=e.matrixAutoUpdate),i.matrixAutoUpdate&&i.matrix.decompose(i.position,i.quaternion,i.scale)):(void 0!==e.position&&i.position.fromArray(e.position),void 0!==e.rotation&&i.rotation.fromArray(e.rotation),void 0!==e.quaternion&&i.quaternion.fromArray(e.quaternion),void 0!==e.scale&&i.scale.fromArray(e.scale));void 0!==e.castShadow&&(i.castShadow=e.castShadow);void 0!==e.receiveShadow&&(i.receiveShadow=e.receiveShadow);e.shadow&&(void 0!==e.shadow.bias&&(i.shadow.bias=e.shadow.bias),void 0!==e.shadow.radius&&(i.shadow.radius=e.shadow.radius),void 0!==e.shadow.mapSize&&i.shadow.mapSize.fromArray(e.shadow.mapSize),void 0!==e.shadow.camera&&(i.shadow.camera=this.parseObject(e.shadow.camera)));void 0!==e.visible&&(i.visible=e.visible);void 0!==e.frustumCulled&&(i.frustumCulled=e.frustumCulled);void 0!==e.renderOrder&&(i.renderOrder=e.renderOrder);void 0!==e.userData&&(i.userData=e.userData);void 0!==e.layers&&(i.layers.mask=e.layers);if(void 0!==e.children){a=e.children;for(var s=0;s<a.length;s++)i.add(this.parseObject(a[s],t,o))}if("LOD"===e.type)for(e=e.levels,a=0;a<e.length;a++){s=e[a];var u=i.getObjectByProperty("uuid",s.object);void 0!==u&&i.addLevel(u,s.distance)}return i}});var $o={UVMapping:300,CubeReflectionMapping:301,CubeRefractionMapping:302,EquirectangularReflectionMapping:303,EquirectangularRefractionMapping:304,SphericalReflectionMapping:305,CubeUVReflectionMapping:306,CubeUVRefractionMapping:307},zo={RepeatWrapping:1e3,ClampToEdgeWrapping:1001,MirroredRepeatWrapping:1002},Uo={NearestFilter:1003,NearestMipMapNearestFilter:1004,NearestMipMapLinearFilter:1005,LinearFilter:1006,LinearMipMapNearestFilter:1007,LinearMipMapLinearFilter:1008};ii.prototype={constructor:ii,setOptions:function(e){this.options=e;return this},load:function(t,r,e,n){void 0===t&&(t="");void 0!==this.path&&(t=this.path+t);t=this.manager.resolveURL(t);var i=this,o=Po.get(t);if(void 0!==o)return i.manager.itemStart(t),setTimeout(function(){r&&r(o);i.manager.itemEnd(t)},0),o;fetch(t).then(function(e){return e.blob()}).then(function(e){return createImageBitmap(e,i.options)}).then(function(e){Po.add(t,e);r&&r(e);i.manager.itemEnd(t)}).catch(function(e){n&&n(e);i.manager.itemEnd(t);i.manager.itemError(t)})},setCrossOrigin:function(){return this},setPath:function(e){this.path=e;return this}};Object.assign(oi.prototype,{moveTo:function(e,t){this.currentPath=new Cn;this.subPaths.push(this.currentPath);this.currentPath.moveTo(e,t)},lineTo:function(e,t){this.currentPath.lineTo(e,t)},quadraticCurveTo:function(e,t,r,n){this.currentPath.quadraticCurveTo(e,t,r,n)},bezierCurveTo:function(e,t,r,n,i,o){this.currentPath.bezierCurveTo(e,t,r,n,i,o)},splineThru:function(e){this.currentPath.splineThru(e)},toShapes:function(e,t){function r(e){for(var t=[],r=0,n=e.length;r<n;r++){var i=e[r],o=new Tn;o.curves=i.curves;t.push(o)}return t}function n(e,t){for(var r=t.length,n=!1,i=r-1,o=0;o<r;i=o++){var a=t[i],s=t[o],u=s.x-a.x,c=s.y-a.y;if(Math.abs(c)>Number.EPSILON){if(0>c&&(a=t[o],u=-u,s=t[i],c=-c),!(e.y<a.y||e.y>s.y))if(e.y===a.y){if(e.x===a.x)return!0}else{i=c*(e.x-a.x)-u*(e.y-a.y);if(0===i)return!0;0>i||(n=!n)}}else if(e.y===a.y&&(s.x<=e.x&&e.x<=a.x||a.x<=e.x&&e.x<=s.x))return!0}return n}var i=Eo.isClockWise,o=this.subPaths;if(0===o.length)return[];if(!0===t)return r(o);t=[];if(1===o.length){var a=o[0];var s=new Tn;s.curves=a.curves;t.push(s);return t}var u=!i(o[0].getPoints());u=e?!u:u;s=[];var c=[],h=[],l=0;c[l]=void 0;h[l]=[];for(var p=0,f=o.length;p<f;p++){a=o[p];var d=a.getPoints();var v=i(d);(v=e?!v:v)?(!u&&c[l]&&l++,c[l]={s:new Tn,p:d},c[l].s.curves=a.curves,u&&l++,h[l]=[]):h[l].push({h:a,p:d[0]})}if(!c[0])return r(o);if(1<c.length){p=!1;e=[];i=0;for(o=c.length;i<o;i++)s[i]=[];i=0;for(o=c.length;i<o;i++)for(a=h[i],v=0;v<a.length;v++){u=a[v];l=!0;for(d=0;d<c.length;d++)n(u.p,c[d].p)&&(i!==d&&e.push({froms:i,tos:d,hole:v}),l?(l=!1,s[d].push(u)):p=!0);l&&s[i].push(u)}0<e.length&&(p||(h=s))}p=0;for(i=c.length;p<i;p++)for(s=c[p].s,t.push(s),e=h[p],o=0,a=e.length;o<a;o++)s.holes.push(e[o].h);return t}});Object.assign(ai.prototype,{isFont:!0,generateShapes:function(e,t){void 0===t&&(t=100);var r=[],n=t;t=this.data;var i=Array.from?Array.from(e):String(e).split("");n/=t.resolution;var o=(t.boundingBox.yMax-t.boundingBox.yMin+t.underlineThickness)*n;e=[];for(var a=0,s=0,u=0;u<i.length;u++){var c=i[u];if("\n"===c)a=0,s-=o;else{var h=n;var l=a,p=s;if(c=t.glyphs[c]||t.glyphs["?"]){var f=new oi;if(c.o)for(var d=c._cachedOutline||(c._cachedOutline=c.o.split(" ")),v=0,m=d.length;v<m;)switch(d[v++]){case"m":var g=d[v++]*h+l;var y=d[v++]*h+p;f.moveTo(g,y);break;case"l":g=d[v++]*h+l;y=d[v++]*h+p;f.lineTo(g,y);break;case"q":var _=d[v++]*h+l;var b=d[v++]*h+p;var x=d[v++]*h+l;var w=d[v++]*h+p;f.quadraticCurveTo(x,w,_,b);break;case"b":_=d[v++]*h+l,b=d[v++]*h+p,x=d[v++]*h+l,w=d[v++]*h+p,g=d[v++]*h+l,y=d[v++]*h+p,f.bezierCurveTo(x,w,g,y,_,b)}h={offsetX:c.ha*h,path:f}}else h=void 0;a+=h.offsetX;e.push(h.path)}}t=0;for(i=e.length;t<i;t++)Array.prototype.push.apply(r,e[t].toShapes());return r}});Object.assign(si.prototype,{load:function(e,n,t,r){var i=this,o=new nn(this.manager);o.setPath(this.path);o.load(e,function(t){try{var 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);n&&n(t)},t,r)},parse:function(e){return new ai(e)},setPath:function(e){this.path=e;return this}});var Go,Vo={getContext:function(){void 0===Go&&(Go=new(window.AudioContext||window.webkitAudioContext));return Go},setContext:function(e){Go=e}};Object.assign(ui.prototype,{load:function(e,t,r,n){var i=new nn(this.manager);i.setResponseType("arraybuffer");i.load(e,function(e){e=e.slice(0);Vo.getContext().decodeAudioData(e,function(e){t(e)})},r,n)}});Object.assign(ci.prototype,{update:function(){var a,s,u,c,h,l,p,f,d=new xe,v=new xe;return function(e){if(a!==this||s!==e.focus||u!==e.fov||c!==e.aspect*this.aspect||h!==e.near||l!==e.far||p!==e.zoom||f!==this.eyeSep){a=this;s=e.focus;u=e.fov;c=e.aspect*this.aspect;h=e.near;l=e.far;p=e.zoom;var t=e.projectionMatrix.clone();f=this.eyeSep/2;var r=f*h/s,n=h*Math.tan(eo.DEG2RAD*u*.5)/p;v.elements[12]=-f;d.elements[12]=f;var i=-n*c+r;var o=n*c+r;t.elements[0]=2*h/(o-i);t.elements[8]=(o+i)/(o-i);this.cameraL.projectionMatrix.copy(t);i=-n*c-r;o=n*c-r;t.elements[0]=2*h/(o-i);t.elements[8]=(o+i)/(o-i);this.cameraR.projectionMatrix.copy(t)}this.cameraL.matrixWorld.copy(e.matrixWorld).multiply(v);this.cameraR.matrixWorld.copy(e.matrixWorld).multiply(d)}}()});hi.prototype=Object.create(h.prototype);hi.prototype.constructor=hi;li.prototype=Object.assign(Object.create(h.prototype),{constructor:li,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);return this},getFilter:function(){return this.filter},setFilter:function(e){null!==this.filter?(this.gain.disconnect(this.filter),this.filter.disconnect(this.context.destination)):this.gain.disconnect(this.context.destination);this.filter=e;this.gain.connect(this.filter);this.filter.connect(this.context.destination);return this},getMasterVolume:function(){return this.gain.gain.value},setMasterVolume:function(e){this.gain.gain.setTargetAtTime(e,this.context.currentTime,.01);return this},updateMatrixWorld:function(){var r=new we,n=new s,i=new we,o=new we;return function(e){h.prototype.updateMatrixWorld.call(this,e);e=this.context.listener;var t=this.up;this.matrixWorld.decompose(r,n,i);o.set(0,0,-1).applyQuaternion(n);e.positionX?(e.positionX.setValueAtTime(r.x,this.context.currentTime),e.positionY.setValueAtTime(r.y,this.context.currentTime),e.positionZ.setValueAtTime(r.z,this.context.currentTime),e.forwardX.setValueAtTime(o.x,this.context.currentTime),e.forwardY.setValueAtTime(o.y,this.context.currentTime),e.forwardZ.setValueAtTime(o.z,this.context.currentTime),e.upX.setValueAtTime(t.x,this.context.currentTime),e.upY.setValueAtTime(t.y,this.context.currentTime),e.upZ.setValueAtTime(t.z,this.context.currentTime)):(e.setPosition(r.x,r.y,r.z),e.setOrientation(o.x,o.y,o.z,t.x,t.y,t.z))}}()});pi.prototype=Object.assign(Object.create(h.prototype),{constructor:pi,getOutput:function(){return this.gain},setNodeSource:function(e){this.hasPlaybackControl=!1;this.sourceType="audioNode";this.source=e;this.connect();return this},setMediaElementSource:function(e){this.hasPlaybackControl=!1;this.sourceType="mediaNode";this.source=this.context.createMediaElementSource(e);this.connect();return this},setBuffer:function(e){this.buffer=e;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.");else{var e=this.context.createBufferSource();e.buffer=this.buffer;e.loop=this.loop;e.onended=this.onEnded.bind(this);e.playbackRate.setValueAtTime(this.playbackRate,this.startTime);this.startTime=this.context.currentTime;e.start(this.startTime,this.offset);this.isPlaying=!0;this.source=e;return this.connect()}},pause:function(){if(!1===this.hasPlaybackControl)console.warn("THREE.Audio: this Audio has no playback control.");else return!0===this.isPlaying&&(this.source.stop(),this.source.onended=null,this.offset+=(this.context.currentTime-this.startTime)*this.playbackRate,this.isPlaying=!1),this},stop:function(){if(!1===this.hasPlaybackControl)console.warn("THREE.Audio: this Audio has no playback control.");else return this.source.stop(),this.source.onended=null,this.offset=0,this.isPlaying=!1,this},connect:function(){if(0<this.filters.length){this.source.connect(this.filters[0]);for(var e=1,t=this.filters.length;e<t;e++)this.filters[e-1].connect(this.filters[e]);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 e=1,t=this.filters.length;e<t;e++)this.filters[e-1].disconnect(this.filters[e]);this.filters[this.filters.length-1].disconnect(this.getOutput())}else this.source.disconnect(this.getOutput());return this},getFilters:function(){return this.filters},setFilters:function(e){e||(e=[]);!0===this.isPlaying?(this.disconnect(),this.filters=e,this.connect()):this.filters=e;return this},getFilter:function(){return this.getFilters()[0]},setFilter:function(e){return this.setFilters(e?[e]:[])},setPlaybackRate:function(e){if(!1===this.hasPlaybackControl)console.warn("THREE.Audio: this Audio has no playback control.");else return this.playbackRate=e,!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(e){if(!1===this.hasPlaybackControl)console.warn("THREE.Audio: this Audio has no playback control.");else return this.loop=e,!0===this.isPlaying&&(this.source.loop=this.loop),this},getVolume:function(){return this.gain.gain.value},setVolume:function(e){this.gain.gain.setTargetAtTime(e,this.context.currentTime,.01);return this}});fi.prototype=Object.assign(Object.create(pi.prototype),{constructor:fi,getOutput:function(){return this.panner},getRefDistance:function(){return this.panner.refDistance},setRefDistance:function(e){this.panner.refDistance=e;return this},getRolloffFactor:function(){return this.panner.rolloffFactor},setRolloffFactor:function(e){this.panner.rolloffFactor=e;return this},getDistanceModel:function(){return this.panner.distanceModel},setDistanceModel:function(e){this.panner.distanceModel=e;return this},getMaxDistance:function(){return this.panner.maxDistance},setMaxDistance:function(e){this.panner.maxDistance=e;return this},setDirectionalCone:function(e,t,r){this.panner.coneInnerAngle=e;this.panner.coneOuterAngle=t;this.panner.coneOuterGain=r;return this},updateMatrixWorld:function(){var t=new we,r=new s,n=new we,i=new we;return function(e){h.prototype.updateMatrixWorld.call(this,e);e=this.panner;this.matrixWorld.decompose(t,r,n);i.set(0,0,1).applyQuaternion(r);e.setPosition(t.x,t.y,t.z);e.setOrientation(i.x,i.y,i.z)}}()});Object.assign(di.prototype,{getFrequencyData:function(){this.analyser.getByteFrequencyData(this.data);return this.data},getAverageFrequency:function(){for(var e=0,t=this.getFrequencyData(),r=0;r<t.length;r++)e+=t[r];return e/t.length}});Object.assign(vi.prototype,{accumulate:function(e,t){var r=this.buffer,n=this.valueSize;e=e*n+n;var i=this.cumulativeWeight;if(0===i){for(i=0;i!==n;++i)r[e+i]=r[i];i=t}else i+=t,this._mixBufferRegion(r,e,0,t/i,n);this.cumulativeWeight=i},apply:function(e){var t=this.valueSize,r=this.buffer;e=e*t+t;var n=this.cumulativeWeight,i=this.binding;this.cumulativeWeight=0;1>n&&this._mixBufferRegion(r,e,3*t,1-n,t);n=t;for(var o=t+t;n!==o;++n)if(r[n]!==r[n+t]){i.setValue(r,e);break}},saveOriginalState:function(){var e=this.buffer,t=this.valueSize,r=3*t;this.binding.getValue(e,r);for(var n=t;n!==r;++n)e[n]=e[r+n%t];this.cumulativeWeight=0},restoreOriginalState:function(){this.binding.setValue(this.buffer,3*this.valueSize)},_select:function(e,t,r,n,i){if(.5<=n)for(n=0;n!==i;++n)e[t+n]=e[r+n]},_slerp:function(e,t,r,n){s.slerpFlat(e,t,e,t,e,r,n)},_lerp:function(e,t,r,n,i){for(var o=1-n,a=0;a!==i;++a){var s=t+a;e[s]=e[s]*o+e[r+a]*n}}});Object.assign(mi.prototype,{getValue:function(e,t){this.bind();var r=this._bindings[this._targetGroup.nCachedObjects_];void 0!==r&&r.getValue(e,t)},setValue:function(e,t){for(var r=this._bindings,n=this._targetGroup.nCachedObjects_,i=r.length;n!==i;++n)r[n].setValue(e,t)},bind:function(){for(var e=this._bindings,t=this._targetGroup.nCachedObjects_,r=e.length;t!==r;++t)e[t].bind()},unbind:function(){for(var e=this._bindings,t=this._targetGroup.nCachedObjects_,r=e.length;t!==r;++t)e[t].unbind()}});Object.assign(gi,{Composite:mi,create:function(e,t,r){return e&&e.isAnimationObjectGroup?new gi.Composite(e,t,r):new gi(e,t,r)},sanitizeNodeName:function(){var t=/[\[\]\.:\/]/g;return function(e){return e.replace(/\s/g,"_").replace(t,"")}}(),parseTrackName:function(){var e="[^"+"\\[\\]\\.:\\/".replace("\\.","")+"]",t=/((?:WC+[\/:])*)/.source.replace("WC","[^\\[\\]\\.:\\/]");e=/(WCOD+)?/.source.replace("WCOD",e);var r=/(?:\.(WC+)(?:\[(.+)\])?)?/.source.replace("WC","[^\\[\\]\\.:\\/]"),n=/\.(WC+)(?:\[(.+)\])?/.source.replace("WC","[^\\[\\]\\.:\\/]"),i=new RegExp("^"+t+e+r+n+"$"),o=["material","materials","bones"];return function(e){var t=i.exec(e);if(!t)throw Error("PropertyBinding: Cannot parse trackName: "+e);t={nodeName:t[2],objectName:t[3],objectIndex:t[4],propertyName:t[5],propertyIndex:t[6]};var r=t.nodeName&&t.nodeName.lastIndexOf(".");if(void 0!==r&&-1!==r){var n=t.nodeName.substring(r+1);-1!==o.indexOf(n)&&(t.nodeName=t.nodeName.substring(0,r),t.objectName=n)}if(null===t.propertyName||0===t.propertyName.length)throw Error("PropertyBinding: can not parse propertyName from trackName: "+e);return t}}(),findNode:function(e,n){if(!n||""===n||"root"===n||"."===n||-1===n||n===e.name||n===e.uuid)return e;if(e.skeleton){var t=e.skeleton.getBoneByName(n);if(void 0!==t)return t}if(e.children){var i=function(e){for(var t=0;t<e.length;t++){var r=e[t];if(r.name===n||r.uuid===n||(r=i(r.children)))return r}return null};if(e=i(e.children))return e}return null}});Object.assign(gi.prototype,{_getValue_unavailable:function(){},_setValue_unavailable:function(){},BindingType:{Direct:0,EntireArray:1,ArrayElement:2,HasFromToArray:3},Versioning:{None:0,NeedsUpdate:1,MatrixWorldNeedsUpdate:2},GetterByBindingType:[function(e,t){e[t]=this.node[this.propertyName]},function(e,t){for(var r=this.resolvedProperty,n=0,i=r.length;n!==i;++n)e[t++]=r[n]},function(e,t){e[t]=this.resolvedProperty[this.propertyIndex]},function(e,t){this.resolvedProperty.toArray(e,t)}],SetterByBindingTypeAndVersioning:[[function(e,t){this.targetObject[this.propertyName]=e[t]},function(e,t){this.targetObject[this.propertyName]=e[t];this.targetObject.needsUpdate=!0},function(e,t){this.targetObject[this.propertyName]=e[t];this.targetObject.matrixWorldNeedsUpdate=!0}],[function(e,t){for(var r=this.resolvedProperty,n=0,i=r.length;n!==i;++n)r[n]=e[t++]},function(e,t){for(var r=this.resolvedProperty,n=0,i=r.length;n!==i;++n)r[n]=e[t++];this.targetObject.needsUpdate=!0},function(e,t){for(var r=this.resolvedProperty,n=0,i=r.length;n!==i;++n)r[n]=e[t++];this.targetObject.matrixWorldNeedsUpdate=!0}],[function(e,t){this.resolvedProperty[this.propertyIndex]=e[t]},function(e,t){this.resolvedProperty[this.propertyIndex]=e[t];this.targetObject.needsUpdate=!0},function(e,t){this.resolvedProperty[this.propertyIndex]=e[t];this.targetObject.matrixWorldNeedsUpdate=!0}],[function(e,t){this.resolvedProperty.fromArray(e,t)},function(e,t){this.resolvedProperty.fromArray(e,t);this.targetObject.needsUpdate=!0},function(e,t){this.resolvedProperty.fromArray(e,t);this.targetObject.matrixWorldNeedsUpdate=!0}]],getValue:function(e,t){this.bind();this.getValue(e,t)},setValue:function(e,t){this.bind();this.setValue(e,t)},bind:function(){var e=this.node,t=this.parsedPath,r=t.objectName,n=t.propertyName,i=t.propertyIndex;e||(this.node=e=gi.findNode(this.rootNode,t.nodeName)||this.rootNode);this.getValue=this._getValue_unavailable;this.setValue=this._setValue_unavailable;if(e){if(r){var o=t.objectIndex;switch(r){case"materials":if(!e.material){console.error("THREE.PropertyBinding: Can not bind to material as node does not have a material.",this);return}if(!e.material.materials){console.error("THREE.PropertyBinding: Can not bind to material.materials as node.material does not have a materials array.",this);return}e=e.material.materials;break;case"bones":if(!e.skeleton){console.error("THREE.PropertyBinding: Can not bind to bones as node does not have a skeleton.",this);return}e=e.skeleton.bones;for(r=0;r<e.length;r++)if(e[r].name===o){o=r;break}break;default:if(void 0===e[r]){console.error("THREE.PropertyBinding: Can not bind to objectName of node undefined.",this);return}e=e[r]}if(void 0!==o){if(void 0===e[o]){console.error("THREE.PropertyBinding: Trying to bind to objectIndex of objectName, but is undefined.",this,e);return}e=e[o]}}o=e[n];if(void 0===o)console.error("THREE.PropertyBinding: Trying to update property for track: "+t.nodeName+"."+n+" but it wasn't found.",e);else{t=this.Versioning.None;void 0!==e.needsUpdate?(t=this.Versioning.NeedsUpdate,this.targetObject=e):void 0!==e.matrixWorldNeedsUpdate&&(t=this.Versioning.MatrixWorldNeedsUpdate,this.targetObject=e);r=this.BindingType.Direct;if(void 0!==i){if("morphTargetInfluences"===n){if(!e.geometry){console.error("THREE.PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.",this);return}if(e.geometry.isBufferGeometry){if(!e.geometry.morphAttributes){console.error("THREE.PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.morphAttributes.",this);return}for(r=0;r<this.node.geometry.morphAttributes.position.length;r++)if(e.geometry.morphAttributes.position[r].name===i){i=r;break}}else{if(!e.geometry.morphTargets){console.error("THREE.PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.morphTargets.",this);return}for(r=0;r<this.node.geometry.morphTargets.length;r++)if(e.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):Array.isArray(o)?(r=this.BindingType.EntireArray,this.resolvedProperty=o):this.propertyName=n;this.getValue=this.GetterByBindingType[r];this.setValue=this.SetterByBindingTypeAndVersioning[r][t]}}else console.error("THREE.PropertyBinding: 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(gi.prototype,{_getValue_unbound:gi.prototype.getValue,_setValue_unbound:gi.prototype.setValue});Object.assign(yi.prototype,{isAnimationObjectGroup:!0,add:function(){for(var e=this._objects,t=e.length,r=this.nCachedObjects_,n=this._indicesByUUID,i=this._paths,o=this._parsedPaths,a=this._bindings,s=a.length,u=void 0,c=0,h=arguments.length;c!==h;++c){var l=arguments[c],p=l.uuid,f=n[p];if(void 0===f){f=t++;n[p]=f;e.push(l);p=0;for(var d=s;p!==d;++p)a[p].push(new gi(l,i[p],o[p]))}else if(f<r){u=e[f];var v=--r;d=e[v];n[d.uuid]=f;e[f]=d;n[p]=v;e[v]=l;p=0;for(d=s;p!==d;++p){var m=a[p],g=m[f];m[f]=m[v];void 0===g&&(g=new gi(l,i[p],o[p]));m[v]=g}}else e[f]!==u&&console.error("THREE.AnimationObjectGroup: Different objects with the same UUID detected. Clean the caches or recreate your infrastructure when reloading scenes.")}this.nCachedObjects_=r},remove:function(){for(var e=this._objects,t=this.nCachedObjects_,r=this._indicesByUUID,n=this._bindings,i=n.length,o=0,a=arguments.length;o!==a;++o){var s=arguments[o],u=s.uuid,c=r[u];if(void 0!==c&&c>=t){var h=t++,l=e[h];r[l.uuid]=c;e[c]=l;r[u]=h;e[h]=s;s=0;for(u=i;s!==u;++s){l=n[s];var p=l[c];l[c]=l[h];l[h]=p}}}this.nCachedObjects_=t},uncache:function(){for(var e=this._objects,t=e.length,r=this.nCachedObjects_,n=this._indicesByUUID,i=this._bindings,o=i.length,a=0,s=arguments.length;a!==s;++a){var u=arguments[a].uuid,c=n[u];if(void 0!==c)if(delete n[u],c<r){u=--r;var h=e[u],l=--t,p=e[l];n[h.uuid]=c;e[c]=h;n[p.uuid]=u;e[u]=p;e.pop();h=0;for(p=o;h!==p;++h){var f=i[h],d=f[l];f[c]=f[u];f[u]=d;f.pop()}}else for(l=--t,p=e[l],n[p.uuid]=c,e[c]=p,e.pop(),h=0,p=o;h!==p;++h)f=i[h],f[c]=f[l],f.pop()}this.nCachedObjects_=r},subscribe_:function(e,t){var r=this._bindingsIndicesByPath,n=r[e],i=this._bindings;if(void 0!==n)return i[n];var o=this._paths,a=this._parsedPaths,s=this._objects,u=this.nCachedObjects_,c=Array(s.length);n=i.length;r[e]=n;o.push(e);a.push(t);i.push(c);r=u;for(n=s.length;r!==n;++r)c[r]=new gi(s[r],e,t);return c},unsubscribe_:function(e){var t=this._bindingsIndicesByPath,r=t[e];if(void 0!==r){var n=this._paths,i=this._parsedPaths,o=this._bindings,a=o.length-1,s=o[a];t[e[a]]=r;o[r]=s;o.pop();i[r]=i[a];i.pop();n[r]=n[a];n.pop()}}});Object.assign(_i.prototype,{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&&this._mixer._isActiveAction(this)},isScheduled:function(){return this._mixer._isActiveAction(this)},startAt:function(e){this._startTime=e;return this},setLoop:function(e,t){this.loop=e;this.repetitions=t;return this},setEffectiveWeight:function(e){this.weight=e;this._effectiveWeight=this.enabled?e:0;return this.stopFading()},getEffectiveWeight:function(){return this._effectiveWeight},fadeIn:function(e){return this._scheduleFading(e,0,1)},fadeOut:function(e){return this._scheduleFading(e,1,0)},crossFadeFrom:function(e,t,r){e.fadeOut(t);this.fadeIn(t);if(r){r=this._clip.duration;var n=e._clip.duration,i=r/n;e.warp(1,n/r,t);this.warp(i,1,t)}return this},crossFadeTo:function(e,t,r){return e.crossFadeFrom(this,t,r)},stopFading:function(){var e=this._weightInterpolant;null!==e&&(this._weightInterpolant=null,this._mixer._takeBackControlInterpolant(e));return this},setEffectiveTimeScale:function(e){this.timeScale=e;this._effectiveTimeScale=this.paused?0:e;return this.stopWarping()},getEffectiveTimeScale:function(){return this._effectiveTimeScale},setDuration:function(e){this.timeScale=this._clip.duration/e;return this.stopWarping()},syncWith:function(e){this.time=e.time;this.timeScale=e.timeScale;return this.stopWarping()},halt:function(e){return this.warp(this._effectiveTimeScale,0,e)},warp:function(e,t,r){var n=this._mixer,i=n.time,o=this._timeScaleInterpolant,a=this.timeScale;null===o&&(this._timeScaleInterpolant=o=n._lendControlInterpolant());n=o.parameterPositions;o=o.sampleValues;n[0]=i;n[1]=i+r;o[0]=e/a;o[1]=t/a;return this},stopWarping:function(){var e=this._timeScaleInterpolant;null!==e&&(this._timeScaleInterpolant=null,this._mixer._takeBackControlInterpolant(e));return this},getMixer:function(){return this._mixer},getClip:function(){return this._clip},getRoot:function(){return this._localRoot||this._mixer._root},_update:function(e,t,r,n){if(this.enabled){var i=this._startTime;if(null!==i){t=(e-i)*r;if(0>t||0===r)return;this._startTime=null;t*=r}t*=this._updateTimeScale(e);r=this._updateTime(t);e=this._updateWeight(e);if(0<e){t=this._interpolants;i=this._propertyBindings;for(var o=0,a=t.length;o!==a;++o)t[o].evaluate(r),i[o].accumulate(n,e)}}else this._updateWeight(e)},_updateWeight:function(e){var t=0;if(this.enabled){t=this.weight;var r=this._weightInterpolant;if(null!==r){var n=r.evaluate(e)[0];t*=n;e>r.parameterPositions[1]&&(this.stopFading(),0===n&&(this.enabled=!1))}}return this._effectiveWeight=t},_updateTimeScale:function(e){var t=0;if(!this.paused){t=this.timeScale;var r=this._timeScaleInterpolant;if(null!==r){var n=r.evaluate(e)[0];t*=n;e>r.parameterPositions[1]&&(this.stopWarping(),0===t?this.paused=!0:this.timeScale=t)}}return this._effectiveTimeScale=t},_updateTime:function(e){var t=this.time+e,r=this._clip.duration,n=this.loop,i=this._loopCount,o=2202===n;if(0===e)return-1===i?t:o&&1===(i&1)?r-t:t;if(2200===n)e:{if(-1===i&&(this._loopCount=0,this._setEndings(!0,!0,!1)),t>=r)t=r;else if(0>t)t=0;else break e;this.clampWhenFinished?this.paused=!0:this.enabled=!1;this._mixer.dispatchEvent({type:"finished",action:this,direction:0>e?-1:1})}else{-1===i&&(0<=e?(i=0,this._setEndings(!0,0===this.repetitions,o)):this._setEndings(0===this.repetitions,!0,o));if(t>=r||0>t){n=Math.floor(t/r);t-=r*n;i+=Math.abs(n);var a=this.repetitions-i;0>=a?(this.clampWhenFinished?this.paused=!0:this.enabled=!1,t=0<e?r:0,this._mixer.dispatchEvent({type:"finished",action:this,direction:0<e?1:-1})):(1===a?(e=0>e,this._setEndings(e,!e,o)):this._setEndings(!1,!1,o),this._loopCount=i,this._mixer.dispatchEvent({type:"loop",action:this,loopDelta:n}))}if(o&&1===(i&1))return this.time=t,r-t}return this.time=t},_setEndings:function(e,t,r){var n=this._interpolantSettings;r?(n.endingStart=2401,n.endingEnd=2401):(n.endingStart=e?this.zeroSlopeAtStart?2401:2400:2402,n.endingEnd=t?this.zeroSlopeAtEnd?2401:2400:2402)},_scheduleFading:function(e,t,r){var n=this._mixer,i=n.time,o=this._weightInterpolant;null===o&&(this._weightInterpolant=o=n._lendControlInterpolant());n=o.parameterPositions;o=o.sampleValues;n[0]=i;o[0]=t;n[1]=i+e;o[1]=r;return this}});bi.prototype=Object.assign(Object.create(t.prototype),{constructor:bi,_bindAction:function(e,t){var r=e._localRoot||this._root,n=e._clip.tracks,i=n.length,o=e._propertyBindings;e=e._interpolants;var a=r.uuid,s=this._bindingsByRootAndName,u=s[a];void 0===u&&(u={},s[a]=u);for(s=0;s!==i;++s){var c=n[s],h=c.name,l=u[h];if(void 0===l){l=o[s];if(void 0!==l){null===l._cacheIndex&&(++l.referenceCount,this._addInactiveBinding(l,a,h));continue}l=new vi(gi.create(r,h,t&&t._propertyBindings[s].binding.parsedPath),c.ValueTypeName,c.getValueSize());++l.referenceCount;this._addInactiveBinding(l,a,h)}o[s]=l;e[s].resultBuffer=l.buffer}},_activateAction:function(e){if(!this._isActiveAction(e)){if(null===e._cacheIndex){var t=(e._localRoot||this._root).uuid,r=e._clip.uuid,n=this._actionsByClip[r];this._bindAction(e,n&&n.knownActions[0]);this._addInactiveAction(e,r,t)}t=e._propertyBindings;r=0;for(n=t.length;r!==n;++r){var i=t[r];0===i.useCount++&&(this._lendBinding(i),i.saveOriginalState())}this._lendAction(e)}},_deactivateAction:function(e){if(this._isActiveAction(e)){for(var t=e._propertyBindings,r=0,n=t.length;r!==n;++r){var i=t[r];0===--i.useCount&&(i.restoreOriginalState(),this._takeBackBinding(i))}this._takeBackAction(e)}},_initMemoryManager:function(){this._actions=[];this._nActiveActions=0;this._actionsByClip={};this._bindings=[];this._nActiveBindings=0;this._bindingsByRootAndName={};this._controlInterpolants=[];this._nActiveControlInterpolants=0;var e=this;this.stats={actions:{get total(){return e._actions.length},get inUse(){return e._nActiveActions}},bindings:{get total(){return e._bindings.length},get inUse(){return e._nActiveBindings}},controlInterpolants:{get total(){return e._controlInterpolants.length},get inUse(){return e._nActiveControlInterpolants}}}},_isActiveAction:function(e){e=e._cacheIndex;return null!==e&&e<this._nActiveActions},_addInactiveAction:function(e,t,r){var n=this._actions,i=this._actionsByClip,o=i[t];void 0===o?(o={knownActions:[e],actionByRoot:{}},e._byClipCacheIndex=0,i[t]=o):(t=o.knownActions,e._byClipCacheIndex=t.length,t.push(e));e._cacheIndex=n.length;n.push(e);o.actionByRoot[r]=e},_removeInactiveAction:function(e){var t=this._actions,r=t[t.length-1],n=e._cacheIndex;r._cacheIndex=n;t[n]=r;t.pop();e._cacheIndex=null;t=e._clip.uuid;r=this._actionsByClip;n=r[t];var i=n.knownActions,o=i[i.length-1],a=e._byClipCacheIndex;o._byClipCacheIndex=a;i[a]=o;i.pop();e._byClipCacheIndex=null;delete n.actionByRoot[(e._localRoot||this._root).uuid];0===i.length&&delete r[t];this._removeInactiveBindingsForAction(e)},_removeInactiveBindingsForAction:function(e){e=e._propertyBindings;for(var t=0,r=e.length;t!==r;++t){var n=e[t];0===--n.referenceCount&&this._removeInactiveBinding(n)}},_lendAction:function(e){var t=this._actions,r=e._cacheIndex,n=this._nActiveActions++,i=t[n];e._cacheIndex=n;t[n]=e;i._cacheIndex=r;t[r]=i},_takeBackAction:function(e){var t=this._actions,r=e._cacheIndex,n=--this._nActiveActions,i=t[n];e._cacheIndex=n;t[n]=e;i._cacheIndex=r;t[r]=i},_addInactiveBinding:function(e,t,r){var n=this._bindingsByRootAndName,i=n[t],o=this._bindings;void 0===i&&(i={},n[t]=i);i[r]=e;e._cacheIndex=o.length;o.push(e)},_removeInactiveBinding:function(e){var t=this._bindings,r=e.binding,n=r.rootNode.uuid;r=r.path;var i=this._bindingsByRootAndName,o=i[n],a=t[t.length-1];e=e._cacheIndex;a._cacheIndex=e;t[e]=a;t.pop();delete o[r];e:{for(var s in o)break e;delete i[n]}},_lendBinding:function(e){var t=this._bindings,r=e._cacheIndex,n=this._nActiveBindings++,i=t[n];e._cacheIndex=n;t[n]=e;i._cacheIndex=r;t[r]=i},_takeBackBinding:function(e){var t=this._bindings,r=e._cacheIndex,n=--this._nActiveBindings,i=t[n];e._cacheIndex=n;t[n]=e;i._cacheIndex=r;t[r]=i},_lendControlInterpolant:function(){var e=this._controlInterpolants,t=this._nActiveControlInterpolants++,r=e[t];void 0===r&&(r=new $n(new Float32Array(2),new Float32Array(2),1,this._controlInterpolantsResultBuffer),r.__cacheIndex=t,e[t]=r);return r},_takeBackControlInterpolant:function(e){var t=this._controlInterpolants,r=e.__cacheIndex,n=--this._nActiveControlInterpolants,i=t[n];e.__cacheIndex=n;t[n]=e;i.__cacheIndex=r;t[r]=i},_controlInterpolantsResultBuffer:new Float32Array(1),clipAction:function(e,t){var r=t||this._root,n=r.uuid;r="string"===typeof e?Kn.findByName(r,e):e;e=null!==r?r.uuid:e;var i=this._actionsByClip[e],o=null;if(void 0!==i){o=i.actionByRoot[n];if(void 0!==o)return o;o=i.knownActions[0];null===r&&(r=o._clip)}if(null===r)return null;t=new _i(this,r,t);this._bindAction(t,o);this._addInactiveAction(t,e,n);return t},existingAction:function(e,t){var r=t||this._root;t=r.uuid;r="string"===typeof e?Kn.findByName(r,e):e;e=this._actionsByClip[r?r.uuid:e];return void 0!==e?e.actionByRoot[t]||null:null},stopAllAction:function(){for(var e=this._actions,t=this._nActiveActions,r=this._bindings,n=this._nActiveBindings,i=this._nActiveBindings=this._nActiveActions=0;i!==t;++i)e[i].reset();for(i=0;i!==n;++i)r[i].useCount=0;return this},update:function(e){e*=this.timeScale;for(var t=this._actions,r=this._nActiveActions,n=this.time+=e,i=Math.sign(e),o=this._accuIndex^=1,a=0;a!==r;++a)t[a]._update(n,e,i,o);e=this._bindings;t=this._nActiveBindings;for(a=0;a!==t;++a)e[a].apply(o);return this},getRoot:function(){return this._root},uncacheClip:function(e){var t=this._actions;e=e.uuid;var r=this._actionsByClip,n=r[e];if(void 0!==n){n=n.knownActions;for(var i=0,o=n.length;i!==o;++i){var a=n[i];this._deactivateAction(a);var s=a._cacheIndex,u=t[t.length-1];a._cacheIndex=null;a._byClipCacheIndex=null;u._cacheIndex=s;t[s]=u;t.pop();this._removeInactiveBindingsForAction(a)}delete r[e]}},uncacheRoot:function(e){e=e.uuid;var t=this._actionsByClip;for(n in t){var r=t[n].actionByRoot[e];void 0!==r&&(this._deactivateAction(r),this._removeInactiveAction(r))}var n=this._bindingsByRootAndName[e];if(void 0!==n)for(var i in n)e=n[i],e.restoreOriginalState(),this._removeInactiveBinding(e)},uncacheAction:function(e,t){e=this.existingAction(e,t);null!==e&&(this._deactivateAction(e),this._removeInactiveAction(e))}});xi.prototype.clone=function(){return new xi(void 0===this.value.clone?this.value:this.value.clone())};wi.prototype=Object.assign(Object.create(A.prototype),{constructor:wi,isInstancedBufferGeometry:!0,copy:function(e){A.prototype.copy.call(this,e);this.maxInstancedCount=e.maxInstancedCount;return this},clone:function(){return(new this.constructor).copy(this)}});Si.prototype=Object.assign(Object.create(Et.prototype),{constructor:Si,isInstancedInterleavedBuffer:!0,copy:function(e){Et.prototype.copy.call(this,e);this.meshPerAttribute=e.meshPerAttribute;return this}});Mi.prototype=Object.assign(Object.create(y.prototype),{constructor:Mi,isInstancedBufferAttribute:!0,copy:function(e){y.prototype.copy.call(this,e);this.meshPerAttribute=e.meshPerAttribute;return this}});Object.assign(Ei.prototype,{linePrecision:1,set:function(e,t){this.ray.set(e,t)},setFromCamera:function(e,t){t&&t.isPerspectiveCamera?(this.ray.origin.setFromMatrixPosition(t.matrixWorld),this.ray.direction.set(e.x,e.y,.5).unproject(t).sub(this.ray.origin).normalize()):t&&t.isOrthographicCamera?(this.ray.origin.set(e.x,e.y,(t.near+t.far)/(t.near-t.far)).unproject(t),this.ray.direction.set(0,0,-1).transformDirection(t.matrixWorld)):console.error("THREE.Raycaster: Unsupported camera type.")},intersectObject:function(e,t,r){r=r||[];Ti(e,this,r,t);r.sort(Ci);return r},intersectObjects:function(e,t,r){r=r||[];if(!1===Array.isArray(e))return console.warn("THREE.Raycaster.intersectObjects: objects is not an Array."),r;for(var n=0,i=e.length;n<i;n++)Ti(e[n],this,r,t);r.sort(Ci);return r}});Object.assign(Oi.prototype,{start:function(){this.oldTime=this.startTime=("undefined"===typeof performance?Date:performance).now();this.elapsedTime=0;this.running=!0},stop:function(){this.getElapsedTime();this.autoStart=this.running=!1},getElapsedTime:function(){this.getDelta();return this.elapsedTime},getDelta:function(){var e=0;if(this.autoStart&&!this.running)return this.start(),0;if(this.running){var t=("undefined"===typeof performance?Date:performance).now();e=(t-this.oldTime)/1e3;this.oldTime=t;this.elapsedTime+=e}return e}});Object.assign(Pi.prototype,{set:function(e,t,r){this.radius=e;this.phi=t;this.theta=r;return this},clone:function(){return(new this.constructor).copy(this)},copy:function(e){this.radius=e.radius;this.phi=e.phi;this.theta=e.theta;return this},makeSafe:function(){this.phi=Math.max(1e-6,Math.min(Math.PI-1e-6,this.phi));return this},setFromVector3:function(e){this.radius=e.length();0===this.radius?this.phi=this.theta=0:(this.theta=Math.atan2(e.x,e.z),this.phi=Math.acos(eo.clamp(e.y/this.radius,-1,1)));return this}});Object.assign(Ai.prototype,{set:function(e,t,r){this.radius=e;this.theta=t;this.y=r;return this},clone:function(){return(new this.constructor).copy(this)},copy:function(e){this.radius=e.radius;this.theta=e.theta;this.y=e.y;return this},setFromVector3:function(e){this.radius=Math.sqrt(e.x*e.x+e.z*e.z);this.theta=Math.atan2(e.x,e.z);this.y=e.y;return this}});Object.assign(ji.prototype,{set:function(e,t){this.min.copy(e);this.max.copy(t);return this},setFromPoints:function(e){this.makeEmpty();for(var t=0,r=e.length;t<r;t++)this.expandByPoint(e[t]);return this},setFromCenterAndSize:function(){var r=new H;return function(e,t){t=r.copy(t).multiplyScalar(.5);this.min.copy(e).sub(t);this.max.copy(e).add(t);return this}}(),clone:function(){return(new this.constructor).copy(this)},copy:function(e){this.min.copy(e.min);this.max.copy(e.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(e){void 0===e&&(console.warn("THREE.Box2: .getCenter() target is now required"),e=new H);return this.isEmpty()?e.set(0,0):e.addVectors(this.min,this.max).multiplyScalar(.5)},getSize:function(e){void 0===e&&(console.warn("THREE.Box2: .getSize() target is now required"),e=new H);return this.isEmpty()?e.set(0,0):e.subVectors(this.max,this.min)},expandByPoint:function(e){this.min.min(e);this.max.max(e);return this},expandByVector:function(e){this.min.sub(e);this.max.add(e);return this},expandByScalar:function(e){this.min.addScalar(-e);this.max.addScalar(e);return this},containsPoint:function(e){return e.x<this.min.x||e.x>this.max.x||e.y<this.min.y||e.y>this.max.y?!1:!0},containsBox:function(e){return this.min.x<=e.min.x&&e.max.x<=this.max.x&&this.min.y<=e.min.y&&e.max.y<=this.max.y},getParameter:function(e,t){void 0===t&&(console.warn("THREE.Box2: .getParameter() target is now required"),t=new H);return t.set((e.x-this.min.x)/(this.max.x-this.min.x),(e.y-this.min.y)/(this.max.y-this.min.y))},intersectsBox:function(e){return e.max.x<this.min.x||e.min.x>this.max.x||e.max.y<this.min.y||e.min.y>this.max.y?!1:!0},clampPoint:function(e,t){void 0===t&&(console.warn("THREE.Box2: .clampPoint() target is now required"),t=new H);return t.copy(e).clamp(this.min,this.max)},distanceToPoint:function(){var t=new H;return function(e){return t.copy(e).clamp(this.min,this.max).sub(e).length()}}(),intersect:function(e){this.min.max(e.min);this.max.min(e.max);return this},union:function(e){this.min.min(e.min);this.max.max(e.max);return this},translate:function(e){this.min.add(e);this.max.add(e);return this},equals:function(e){return e.min.equals(this.min)&&e.max.equals(this.max)}});Object.assign(Ri.prototype,{set:function(e,t){this.start.copy(e);this.end.copy(t);return this},clone:function(){return(new this.constructor).copy(this)},copy:function(e){this.start.copy(e.start);this.end.copy(e.end);return this},getCenter:function(e){void 0===e&&(console.warn("THREE.Line3: .getCenter() target is now required"),e=new we);return e.addVectors(this.start,this.end).multiplyScalar(.5)},delta:function(e){void 0===e&&(console.warn("THREE.Line3: .delta() target is now required"),e=new we);return e.subVectors(this.end,this.start)},distanceSq:function(){return this.start.distanceToSquared(this.end)},distance:function(){return this.start.distanceTo(this.end)},at:function(e,t){void 0===t&&(console.warn("THREE.Line3: .at() target is now required"),t=new we);return this.delta(t).multiplyScalar(e).add(this.start)},closestPointToPointParameter:function(){var r=new we,n=new we;return function(e,t){r.subVectors(e,this.start);n.subVectors(this.end,this.start);e=n.dot(n);e=n.dot(r)/e;t&&(e=eo.clamp(e,0,1));return e}}(),closestPointToPoint:function(e,t,r){e=this.closestPointToPointParameter(e,t);void 0===r&&(console.warn("THREE.Line3: .closestPointToPoint() target is now required"),r=new we);return this.delta(r).multiplyScalar(e).add(this.start)},applyMatrix4:function(e){this.start.applyMatrix4(e);this.end.applyMatrix4(e);return this},equals:function(e){return e.start.equals(this.start)&&e.end.equals(this.end)}});Li.prototype=Object.create(h.prototype);Li.prototype.constructor=Li;Li.prototype.isImmediateRenderObject=!0;Ii.prototype=Object.create(Nt.prototype);Ii.prototype.constructor=Ii;Ii.prototype.update=function(){var p=new we,f=new we,d=new m;return function(){var e=["a","b","c"];this.object.updateMatrixWorld(!0);d.getNormalMatrix(this.object.matrixWorld);var t=this.object.matrixWorld,r=this.geometry.attributes.position,n=this.object.geometry;if(n&&n.isGeometry)for(var i=n.vertices,o=n.faces,a=n=0,s=o.length;a<s;a++)for(var u=o[a],c=0,h=u.vertexNormals.length;c<h;c++){var l=u.vertexNormals[c];p.copy(i[u[e[c]]]).applyMatrix4(t);f.copy(l).applyMatrix3(d).normalize().multiplyScalar(this.size).add(p);r.setXYZ(n,p.x,p.y,p.z);n+=1;r.setXYZ(n,f.x,f.y,f.z);n+=1}else if(n&&n.isBufferGeometry)for(e=n.attributes.position,i=n.attributes.normal,c=n=0,h=e.count;c<h;c++)p.set(e.getX(c),e.getY(c),e.getZ(c)).applyMatrix4(t),f.set(i.getX(c),i.getY(c),i.getZ(c)),f.applyMatrix3(d).normalize().multiplyScalar(this.size).add(p),r.setXYZ(n,p.x,p.y,p.z),n+=1,r.setXYZ(n,f.x,f.y,f.z),n+=1;r.needsUpdate=!0}}();Ni.prototype=Object.create(h.prototype);Ni.prototype.constructor=Ni;Ni.prototype.dispose=function(){this.cone.geometry.dispose();this.cone.material.dispose()};Ni.prototype.update=function(){var r=new we,n=new we;return function(){this.light.updateMatrixWorld();var e=this.light.distance?this.light.distance:1e3,t=e*Math.tan(this.light.angle);this.cone.scale.set(t,t,e);r.setFromMatrixPosition(this.light.matrixWorld);n.setFromMatrixPosition(this.light.target.matrixWorld);this.cone.lookAt(n.sub(r));void 0!==this.color?this.cone.material.color.set(this.color):this.cone.material.color.copy(this.light.color)}}();Di.prototype=Object.create(Nt.prototype);Di.prototype.constructor=Di;Di.prototype.updateMatrixWorld=function(){var s=new we,u=new xe,c=new xe;return function(e){var t=this.bones,r=this.geometry,n=r.getAttribute("position");c.getInverse(this.root.matrixWorld);for(var i=0,o=0;i<t.length;i++){var a=t[i];a.parent&&a.parent.isBone&&(u.multiplyMatrices(c,a.matrixWorld),s.setFromMatrixPosition(u),n.setXYZ(o,s.x,s.y,s.z),u.multiplyMatrices(c,a.parent.matrixWorld),s.setFromMatrixPosition(u),n.setXYZ(o+1,s.x,s.y,s.z),o+=2)}r.getAttribute("position").needsUpdate=!0;h.prototype.updateMatrixWorld.call(this,e)}}();Bi.prototype=Object.create($.prototype);Bi.prototype.constructor=Bi;Bi.prototype.dispose=function(){this.geometry.dispose();this.material.dispose()};Bi.prototype.update=function(){void 0!==this.color?this.material.color.set(this.color):this.material.color.copy(this.light.color)};Fi.prototype=Object.create(h.prototype);Fi.prototype.constructor=Fi;Fi.prototype.dispose=function(){this.children[0].geometry.dispose();this.children[0].material.dispose()};Fi.prototype.update=function(){var e=.5*this.light.width,t=.5*this.light.height,r=this.line.geometry.attributes.position,n=r.array;n[0]=e;n[1]=-t;n[2]=0;n[3]=e;n[4]=t;n[5]=0;n[6]=-e;n[7]=t;n[8]=0;n[9]=-e;n[10]=-t;n[11]=0;n[12]=e;n[13]=-t;n[14]=0;r.needsUpdate=!0;void 0!==this.color?this.line.material.color.set(this.color):this.line.material.color.copy(this.light.color)};$i.prototype=Object.create(h.prototype);$i.prototype.constructor=$i;$i.prototype.dispose=function(){this.children[0].geometry.dispose();this.children[0].material.dispose()};$i.prototype.update=function(){var o=new we,a=new w,s=new w;return function(){var e=this.children[0];if(void 0!==this.color)this.material.color.set(this.color);else{var t=e.geometry.getAttribute("color");a.copy(this.light.color);s.copy(this.light.groundColor);for(var r=0,n=t.count;r<n;r++){var i=r<n/2?a:s;t.setXYZ(r,i.r,i.g,i.b)}t.needsUpdate=!0}e.lookAt(o.setFromMatrixPosition(this.light.matrixWorld).negate())}}();zi.prototype=Object.create(Nt.prototype);zi.prototype.constructor=zi;Ui.prototype=Object.create(Nt.prototype);Ui.prototype.constructor=Ui;Gi.prototype=Object.create(Nt.prototype);Gi.prototype.constructor=Gi;Gi.prototype.update=function(){var c=new we,h=new we,l=new m;return function(){this.object.updateMatrixWorld(!0);l.getNormalMatrix(this.object.matrixWorld);var e=this.object.matrixWorld,t=this.geometry.attributes.position,r=this.object.geometry,n=r.vertices;r=r.faces;for(var i=0,o=0,a=r.length;o<a;o++){var s=r[o],u=s.normal;c.copy(n[s.a]).add(n[s.b]).add(n[s.c]).divideScalar(3).applyMatrix4(e);h.copy(u).applyMatrix3(l).normalize().multiplyScalar(this.size).add(c);t.setXYZ(i,c.x,c.y,c.z);i+=1;t.setXYZ(i,h.x,h.y,h.z);i+=1}t.needsUpdate=!0}}();Vi.prototype=Object.create(h.prototype);Vi.prototype.constructor=Vi;Vi.prototype.dispose=function(){this.lightPlane.geometry.dispose();this.lightPlane.material.dispose();this.targetLine.geometry.dispose();this.targetLine.material.dispose()};Vi.prototype.update=function(){var e=new we,t=new we,r=new we;return function(){e.setFromMatrixPosition(this.light.matrixWorld);t.setFromMatrixPosition(this.light.target.matrixWorld);r.subVectors(t,e);this.lightPlane.lookAt(r);void 0!==this.color?(this.lightPlane.material.color.set(this.color),this.targetLine.material.color.set(this.color)):(this.lightPlane.material.color.copy(this.light.color),this.targetLine.material.color.copy(this.light.color));this.targetLine.lookAt(r);this.targetLine.scale.z=r.length()}}();Hi.prototype=Object.create(Nt.prototype);Hi.prototype.constructor=Hi;Hi.prototype.update=function(){function e(e,t,r,n){a.set(t,r,n).unproject(s);e=o[e];if(void 0!==e)for(t=i.getAttribute("position"),r=0,n=e.length;r<n;r++)t.setXYZ(e[r],a.x,a.y,a.z)}var i,o,a=new we,s=new u;return function(){i=this.geometry;o=this.pointMap;s.projectionMatrix.copy(this.camera.projectionMatrix);e("c",0,0,-1);e("t",0,0,1);e("n1",-1,-1,-1);e("n2",1,-1,-1);e("n3",-1,1,-1);e("n4",1,1,-1);e("f1",-1,-1,1);e("f2",1,-1,1);e("f3",-1,1,1);e("f4",1,1,1);e("u1",.7,1.1,-1);e("u2",-.7,1.1,-1);e("u3",0,2,-1);e("cf1",-1,0,1);e("cf2",1,0,1);e("cf3",0,-1,1);e("cf4",0,1,1);e("cn1",-1,0,-1);e("cn2",1,0,-1);e("cn3",0,-1,-1);e("cn4",0,1,-1);i.getAttribute("position").needsUpdate=!0}}();qi.prototype=Object.create(Nt.prototype);qi.prototype.constructor=qi;qi.prototype.update=function(){var i=new r;return function(e){void 0!==e&&console.warn("THREE.BoxHelper: .update() has no longer arguments.");void 0!==this.object&&i.setFromObject(this.object);if(!i.isEmpty()){e=i.min;var t=i.max,r=this.geometry.attributes.position,n=r.array;n[0]=t.x;n[1]=t.y;n[2]=t.z;n[3]=e.x;n[4]=t.y;n[5]=t.z;n[6]=e.x;n[7]=e.y;n[8]=t.z;n[9]=t.x;n[10]=e.y;n[11]=t.z;n[12]=t.x;n[13]=t.y;n[14]=e.z;n[15]=e.x;n[16]=t.y;n[17]=e.z;n[18]=e.x;n[19]=e.y;n[20]=e.z;n[21]=t.x;n[22]=e.y;n[23]=e.z;r.needsUpdate=!0;this.geometry.computeBoundingSphere()}}}();qi.prototype.setFromObject=function(e){this.object=e;this.update();return this};Wi.prototype=Object.create(Nt.prototype);Wi.prototype.constructor=Wi;Wi.prototype.updateMatrixWorld=function(e){var t=this.box;t.isEmpty()||(t.getCenter(this.position),t.getSize(this.scale),this.scale.multiplyScalar(.5),h.prototype.updateMatrixWorld.call(this,e))};Xi.prototype=Object.create(It.prototype);Xi.prototype.constructor=Xi;Xi.prototype.updateMatrixWorld=function(e){var t=-this.plane.constant;1e-8>Math.abs(t)&&(t=1e-8);this.scale.set(.5*this.size,.5*this.size,t);this.children[0].material.side=0>t?1:0;this.lookAt(this.plane.normal);h.prototype.updateMatrixWorld.call(this,e)};var Ho,qo;Yi.prototype=Object.create(h.prototype);Yi.prototype.constructor=Yi;Yi.prototype.setDirection=function(){var t=new we,r;return function(e){.99999<e.y?this.quaternion.set(0,0,0,1):-.99999>e.y?this.quaternion.set(1,0,0,0):(t.set(e.z,0,-e.x).normalize(),r=Math.acos(e.y),this.quaternion.setFromAxisAngle(t,r))}}();Yi.prototype.setLength=function(e,t,r){void 0===t&&(t=.2*e);void 0===r&&(r=.2*t);this.line.scale.set(1,Math.max(0,e-t),1);this.line.updateMatrix();this.cone.scale.set(r,t,r);this.cone.position.y=e;this.cone.updateMatrix()};Yi.prototype.setColor=function(e){this.line.material.color.copy(e);this.cone.material.color.copy(e)};Ki.prototype=Object.create(Nt.prototype);Ki.prototype.constructor=Ki;hn.create=function(e,t){console.log("THREE.Curve.create() has been deprecated");e.prototype=Object.create(hn.prototype);e.prototype.constructor=e;e.prototype.getPoint=t;return e};Object.assign(En.prototype,{createPointsGeometry:function(e){console.warn("THREE.CurvePath: .createPointsGeometry() has been removed. Use new THREE.Geometry().setFromPoints( points ) instead.");e=this.getPoints(e);return this.createGeometry(e)},createSpacedPointsGeometry:function(e){console.warn("THREE.CurvePath: .createSpacedPointsGeometry() has been removed. Use new THREE.Geometry().setFromPoints( points ) instead.");e=this.getSpacedPoints(e);return this.createGeometry(e)},createGeometry:function(e){console.warn("THREE.CurvePath: .createGeometry() has been removed. Use new THREE.Geometry().setFromPoints( points ) instead.");for(var t=new S,r=0,n=e.length;r<n;r++){var i=e[r];t.vertices.push(new we(i.x,i.y,i.z||0))}return t}});Object.assign(Cn.prototype,{fromPoints:function(e){console.warn("THREE.Path: .fromPoints() has been renamed to .setFromPoints().");this.setFromPoints(e)}});Zi.prototype=Object.create(dn.prototype);Ji.prototype=Object.create(dn.prototype);Qi.prototype=Object.create(dn.prototype);Object.assign(Qi.prototype,{initFromArray:function(){console.error("THREE.Spline: .initFromArray() has been removed.")},getControlPointsArray:function(){console.error("THREE.Spline: .getControlPointsArray() has been removed.")},reparametrizeByArcLength:function(){console.error("THREE.Spline: .reparametrizeByArcLength() has been removed.")}});zi.prototype.setColors=function(){console.error("THREE.GridHelper: setColors() has been deprecated, pass them in the constructor instead.")};Di.prototype.update=function(){console.error("THREE.SkeletonHelper: update() no longer needs to be called.")};Object.assign(ti.prototype,{extractUrlBase:function(e){console.warn("THREE.Loader: .extractUrlBase() has been deprecated. Use THREE.LoaderUtils.extractUrlBase() instead.");return Fo.extractUrlBase(e)}});Object.assign(ji.prototype,{center:function(e){console.warn("THREE.Box2: .center() has been renamed to .getCenter().");return this.getCenter(e)},empty:function(){console.warn("THREE.Box2: .empty() has been renamed to .isEmpty().");return this.isEmpty()},isIntersectionBox:function(e){console.warn("THREE.Box2: .isIntersectionBox() has been renamed to .intersectsBox().");return this.intersectsBox(e)},size:function(e){console.warn("THREE.Box2: .size() has been renamed to .getSize().");return this.getSize(e)}});Object.assign(r.prototype,{center:function(e){console.warn("THREE.Box3: .center() has been renamed to .getCenter().");return this.getCenter(e)},empty:function(){console.warn("THREE.Box3: .empty() has been renamed to .isEmpty().");return this.isEmpty()},isIntersectionBox:function(e){console.warn("THREE.Box3: .isIntersectionBox() has been renamed to .intersectsBox().");return this.intersectsBox(e)},isIntersectionSphere:function(e){console.warn("THREE.Box3: .isIntersectionSphere() has been renamed to .intersectsSphere().");return this.intersectsSphere(e)},size:function(e){console.warn("THREE.Box3: .size() has been renamed to .getSize().");return this.getSize(e)}});Ri.prototype.center=function(e){console.warn("THREE.Line3: .center() has been renamed to .getCenter().");return this.getCenter(e)};Object.assign(eo,{random16:function(){console.warn("THREE.Math: .random16() has been deprecated. Use Math.random() instead.");return Math.random()},nearestPowerOfTwo:function(e){console.warn("THREE.Math: .nearestPowerOfTwo() has been renamed to .floorPowerOfTwo().");return eo.floorPowerOfTwo(e)},nextPowerOfTwo:function(e){console.warn("THREE.Math: .nextPowerOfTwo() has been renamed to .ceilPowerOfTwo().");return eo.ceilPowerOfTwo(e)}});Object.assign(m.prototype,{flattenToArrayOffset:function(e,t){console.warn("THREE.Matrix3: .flattenToArrayOffset() has been deprecated. Use .toArray() instead.");return this.toArray(e,t)},multiplyVector3:function(e){console.warn("THREE.Matrix3: .multiplyVector3() has been removed. Use vector.applyMatrix3( matrix ) instead.");return e.applyMatrix3(this)},multiplyVector3Array:function(){console.error("THREE.Matrix3: .multiplyVector3Array() has been removed.")},applyToBuffer:function(e){console.warn("THREE.Matrix3: .applyToBuffer() has been removed. Use matrix.applyToBufferAttribute( attribute ) instead.");return this.applyToBufferAttribute(e)},applyToVector3Array:function(){console.error("THREE.Matrix3: .applyToVector3Array() has been removed.")}});Object.assign(xe.prototype,{extractPosition:function(e){console.warn("THREE.Matrix4: .extractPosition() has been renamed to .copyPosition().");return this.copyPosition(e)},flattenToArrayOffset:function(e,t){console.warn("THREE.Matrix4: .flattenToArrayOffset() has been deprecated. Use .toArray() instead.");return this.toArray(e,t)},getPosition:function(){var e;return function(){void 0===e&&(e=new we);console.warn("THREE.Matrix4: .getPosition() has been removed. Use Vector3.setFromMatrixPosition( matrix ) instead.");return e.setFromMatrixColumn(this,3)}}(),setRotationFromQuaternion:function(e){console.warn("THREE.Matrix4: .setRotationFromQuaternion() has been renamed to .makeRotationFromQuaternion().");return this.makeRotationFromQuaternion(e)},multiplyToArray:function(){console.warn("THREE.Matrix4: .multiplyToArray() has been removed.")},multiplyVector3:function(e){console.warn("THREE.Matrix4: .multiplyVector3() has been removed. Use vector.applyMatrix4( matrix ) instead.");return e.applyMatrix4(this)},multiplyVector4:function(e){console.warn("THREE.Matrix4: .multiplyVector4() has been removed. Use vector.applyMatrix4( matrix ) instead.");return e.applyMatrix4(this)},multiplyVector3Array:function(){console.error("THREE.Matrix4: .multiplyVector3Array() has been removed.")},rotateAxis:function(e){console.warn("THREE.Matrix4: .rotateAxis() has been removed. Use Vector3.transformDirection( matrix ) instead.");e.transformDirection(this)},crossVector:function(e){console.warn("THREE.Matrix4: .crossVector() has been removed. Use vector.applyMatrix4( matrix ) instead.");return e.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(e){console.warn("THREE.Matrix4: .applyToBuffer() has been removed. Use matrix.applyToBufferAttribute( attribute ) instead.");return this.applyToBufferAttribute(e)},applyToVector3Array:function(){console.error("THREE.Matrix4: .applyToVector3Array() has been removed.")},makeFrustum:function(e,t,r,n,i,o){console.warn("THREE.Matrix4: .makeFrustum() has been removed. Use .makePerspective( left, right, top, bottom, near, far ) instead.");return this.makePerspective(e,t,n,r,i,o)}});g.prototype.isIntersectionLine=function(e){console.warn("THREE.Plane: .isIntersectionLine() has been renamed to .intersectsLine().");return this.intersectsLine(e)};s.prototype.multiplyVector3=function(e){console.warn("THREE.Quaternion: .multiplyVector3() has been removed. Use is now vector.applyQuaternion( quaternion ) instead.");return e.applyQuaternion(this)};Object.assign(B.prototype,{isIntersectionBox:function(e){console.warn("THREE.Ray: .isIntersectionBox() has been renamed to .intersectsBox().");return this.intersectsBox(e)},isIntersectionPlane:function(e){console.warn("THREE.Ray: .isIntersectionPlane() has been renamed to .intersectsPlane().");return this.intersectsPlane(e)},isIntersectionSphere:function(e){console.warn("THREE.Ray: .isIntersectionSphere() has been renamed to .intersectsSphere().");return this.intersectsSphere(e)}});Object.assign(F.prototype,{area:function(){console.warn("THREE.Triangle: .area() has been renamed to .getArea().");return this.getArea()},barycoordFromPoint:function(e,t){console.warn("THREE.Triangle: .barycoordFromPoint() has been renamed to .getBarycoord().");return this.getBarycoord(e,t)},midpoint:function(e){console.warn("THREE.Triangle: .midpoint() has been renamed to .getMidpoint().");return this.getMidpoint(e)},normal:function(e){console.warn("THREE.Triangle: .normal() has been renamed to .getNormal().");return this.getNormal(e)},plane:function(e){console.warn("THREE.Triangle: .plane() has been renamed to .getPlane().");return this.getPlane(e)}});Object.assign(F,{barycoordFromPoint:function(e,t,r,n,i){console.warn("THREE.Triangle: .barycoordFromPoint() has been renamed to .getBarycoord().");return F.getBarycoord(e,t,r,n,i)},normal:function(e,t,r,n){console.warn("THREE.Triangle: .normal() has been renamed to .getNormal().");return F.getNormal(e,t,r,n)}});Object.assign(Tn.prototype,{extractAllPoints:function(e){console.warn("THREE.Shape: .extractAllPoints() has been removed. Use .extractPoints() instead.");return this.extractPoints(e)},extrude:function(e){console.warn("THREE.Shape: .extrude() has been removed. Use ExtrudeGeometry() instead.");return new Cr(this,e)},makeGeometry:function(e){console.warn("THREE.Shape: .makeGeometry() has been removed. Use ShapeGeometry() instead.");return new Dr(this,e)}});Object.assign(H.prototype,{fromAttribute:function(e,t,r){console.warn("THREE.Vector2: .fromAttribute() has been renamed to .fromBufferAttribute().");return this.fromBufferAttribute(e,t,r)},distanceToManhattan:function(e){console.warn("THREE.Vector2: .distanceToManhattan() has been renamed to .manhattanDistanceTo().");return this.manhattanDistanceTo(e)},lengthManhattan:function(){console.warn("THREE.Vector2: .lengthManhattan() has been renamed to .manhattanLength().");return this.manhattanLength()}});Object.assign(we.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(e){console.warn("THREE.Vector3: .getPositionFromMatrix() has been renamed to .setFromMatrixPosition().");return this.setFromMatrixPosition(e)},getScaleFromMatrix:function(e){console.warn("THREE.Vector3: .getScaleFromMatrix() has been renamed to .setFromMatrixScale().");return this.setFromMatrixScale(e)},getColumnFromMatrix:function(e,t){console.warn("THREE.Vector3: .getColumnFromMatrix() has been renamed to .setFromMatrixColumn().");return this.setFromMatrixColumn(t,e)},applyProjection:function(e){console.warn("THREE.Vector3: .applyProjection() has been removed. Use .applyMatrix4( m ) instead.");return this.applyMatrix4(e)},fromAttribute:function(e,t,r){console.warn("THREE.Vector3: .fromAttribute() has been renamed to .fromBufferAttribute().");return this.fromBufferAttribute(e,t,r)},distanceToManhattan:function(e){console.warn("THREE.Vector3: .distanceToManhattan() has been renamed to .manhattanDistanceTo().");return this.manhattanDistanceTo(e)},lengthManhattan:function(){console.warn("THREE.Vector3: .lengthManhattan() has been renamed to .manhattanLength().");return this.manhattanLength()}});Object.assign(Se.prototype,{fromAttribute:function(e,t,r){console.warn("THREE.Vector4: .fromAttribute() has been renamed to .fromBufferAttribute().");return this.fromBufferAttribute(e,t,r)},lengthManhattan:function(){console.warn("THREE.Vector4: .lengthManhattan() has been renamed to .manhattanLength().");return this.manhattanLength()}});Object.assign(S.prototype,{computeTangents:function(){console.error("THREE.Geometry: .computeTangents() has been removed.")},computeLineDistances:function(){console.error("THREE.Geometry: .computeLineDistances() has been removed. Use THREE.Line.computeLineDistances() instead.")}});Object.assign(h.prototype,{getChildByName:function(e){console.warn("THREE.Object3D: .getChildByName() has been renamed to .getObjectByName().");return this.getObjectByName(e)},renderDepth:function(){console.warn("THREE.Object3D: .renderDepth has been removed. Use .renderOrder, instead.")},translate:function(e,t){console.warn("THREE.Object3D: .translate() has been removed. Use .translateOnAxis( axis, distance ) instead.");return this.translateOnAxis(t,e)},getWorldRotation:function(){console.error("THREE.Object3D: .getWorldRotation() has been removed. Use THREE.Object3D.getWorldQuaternion( target ) instead.")}});Object.defineProperties(h.prototype,{eulerOrder:{get:function(){console.warn("THREE.Object3D: .eulerOrder is now .rotation.order.");return this.rotation.order},set:function(e){console.warn("THREE.Object3D: .eulerOrder is now .rotation.order.");this.rotation.order=e}},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(Pt.prototype,{objects:{get:function(){console.warn("THREE.LOD: .objects has been renamed to .levels.");return this.levels}}});Object.defineProperty(At.prototype,"useVertexTexture",{get:function(){console.warn("THREE.Skeleton: useVertexTexture has been removed.")},set:function(){console.warn("THREE.Skeleton: useVertexTexture has been removed.")}});Object.defineProperty(hn.prototype,"__arcLengthDivisions",{get:function(){console.warn("THREE.Curve: .__arcLengthDivisions is now .arcLengthDivisions.");return this.arcLengthDivisions},set:function(e){console.warn("THREE.Curve: .__arcLengthDivisions is now .arcLengthDivisions.");this.arcLengthDivisions=e}});gt.prototype.setLens=function(e,t){console.warn("THREE.PerspectiveCamera.setLens is deprecated. Use .setFocalLength and .filmGauge for a photographic setup.");void 0!==t&&(this.filmGauge=t);this.setFocalLength(e)};Object.defineProperties(On.prototype,{onlyShadow:{set:function(){console.warn("THREE.Light: .onlyShadow has been removed.")}},shadowCameraFov:{set:function(e){console.warn("THREE.Light: .shadowCameraFov is now .shadow.camera.fov.");this.shadow.camera.fov=e}},shadowCameraLeft:{set:function(e){console.warn("THREE.Light: .shadowCameraLeft is now .shadow.camera.left.");this.shadow.camera.left=e}},shadowCameraRight:{set:function(e){console.warn("THREE.Light: .shadowCameraRight is now .shadow.camera.right.");this.shadow.camera.right=e}},shadowCameraTop:{set:function(e){console.warn("THREE.Light: .shadowCameraTop is now .shadow.camera.top.");this.shadow.camera.top=e}},shadowCameraBottom:{set:function(e){console.warn("THREE.Light: .shadowCameraBottom is now .shadow.camera.bottom.");this.shadow.camera.bottom=e}},shadowCameraNear:{set:function(e){console.warn("THREE.Light: .shadowCameraNear is now .shadow.camera.near.");this.shadow.camera.near=e}},shadowCameraFar:{set:function(e){console.warn("THREE.Light: .shadowCameraFar is now .shadow.camera.far.");this.shadow.camera.far=e}},shadowCameraVisible:{set:function(){console.warn("THREE.Light: .shadowCameraVisible has been removed. Use new THREE.CameraHelper( light.shadow.camera ) instead.")}},shadowBias:{set:function(e){console.warn("THREE.Light: .shadowBias is now .shadow.bias.");this.shadow.bias=e}},shadowDarkness:{set:function(){console.warn("THREE.Light: .shadowDarkness has been removed.")}},shadowMapWidth:{set:function(e){console.warn("THREE.Light: .shadowMapWidth is now .shadow.mapSize.width.");this.shadow.mapSize.width=e}},shadowMapHeight:{set:function(e){console.warn("THREE.Light: .shadowMapHeight is now .shadow.mapSize.height.");this.shadow.mapSize.height=e}}});Object.defineProperties(y.prototype,{length:{get:function(){console.warn("THREE.BufferAttribute: .length has been deprecated. Use .count instead.");return this.array.length}},copyIndicesArray:function(){console.error("THREE.BufferAttribute: .copyIndicesArray() has been removed.")}});Object.assign(A.prototype,{addIndex:function(e){console.warn("THREE.BufferGeometry: .addIndex() has been renamed to .setIndex().");this.setIndex(e)},addDrawCall:function(e,t,r){void 0!==r&&console.warn("THREE.BufferGeometry: .addDrawCall() no longer supports indexOffset.");console.warn("THREE.BufferGeometry: .addDrawCall() is now .addGroup().");this.addGroup(e,t)},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(A.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.");return this.groups}}});Object.assign(Tr.prototype,{getArrays:function(){console.error("THREE.ExtrudeBufferGeometry: .getArrays() has been removed.")},addShapeList:function(){console.error("THREE.ExtrudeBufferGeometry: .addShapeList() has been removed.")},addShape:function(){console.error("THREE.ExtrudeBufferGeometry: .addShape() has been removed.")}});Object.defineProperties(xi.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(I.prototype,{wrapAround:{get:function(){console.warn("THREE.Material: .wrapAround has been removed.")},set:function(){console.warn("THREE.Material: .wrapAround has been removed.")}},wrapRGB:{get:function(){console.warn("THREE.Material: .wrapRGB has been removed.");return new w}},shading:{get:function(){console.error("THREE."+this.type+": .shading has been removed. Use the boolean .flatShading instead.")},set:function(e){console.warn("THREE."+this.type+": .shading has been removed. Use the boolean .flatShading instead.");this.flatShading=1===e}}});Object.defineProperties(Zr.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(k.prototype,{derivatives:{get:function(){console.warn("THREE.ShaderMaterial: .derivatives has been moved to .extensions.derivatives.");return this.extensions.derivatives},set:function(e){console.warn("THREE. ShaderMaterial: .derivatives has been moved to .extensions.derivatives.");this.extensions.derivatives=e}}});Object.assign(xt.prototype,{animate:function(e){console.warn("THREE.WebGLRenderer: .animate() is now .setAnimationLoop().");this.setAnimationLoop(e)},getCurrentRenderTarget:function(){console.warn("THREE.WebGLRenderer: .getCurrentRenderTarget() is now .getRenderTarget().");return this.getRenderTarget()},getMaxAnisotropy:function(){console.warn("THREE.WebGLRenderer: .getMaxAnisotropy() is now .capabilities.getMaxAnisotropy().");return this.capabilities.getMaxAnisotropy()},getPrecision:function(){console.warn("THREE.WebGLRenderer: .getPrecision() is now .capabilities.precision.");return this.capabilities.precision},resetGLState:function(){console.warn("THREE.WebGLRenderer: .resetGLState() is now .state.reset().");return this.state.reset()},supportsFloatTextures:function(){console.warn("THREE.WebGLRenderer: .supportsFloatTextures() is now .extensions.get( 'OES_texture_float' ).");return 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' ).");return 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.");return 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(e){console.warn("THREE.WebGLRenderer: .enableScissorTest() is now .setScissorTest().");this.setScissorTest(e)},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.")},setFaceCulling:function(){console.warn("THREE.WebGLRenderer: .setFaceCulling() has been removed.")}});Object.defineProperties(xt.prototype,{shadowMapEnabled:{get:function(){return this.shadowMap.enabled},set:function(e){console.warn("THREE.WebGLRenderer: .shadowMapEnabled is now .shadowMap.enabled.");this.shadowMap.enabled=e}},shadowMapType:{get:function(){return this.shadowMap.type},set:function(e){console.warn("THREE.WebGLRenderer: .shadowMapType is now .shadowMap.type.");this.shadowMap.type=e}},shadowMapCullFace:{get:function(){console.warn("THREE.WebGLRenderer: .shadowMapCullFace has been removed. Set Material.shadowSide instead.")},set:function(){console.warn("THREE.WebGLRenderer: .shadowMapCullFace has been removed. Set Material.shadowSide instead.")}}});Object.defineProperties(pt.prototype,{cullFace:{get:function(){console.warn("THREE.WebGLRenderer: .shadowMap.cullFace has been removed. Set Material.shadowSide instead.")},set:function(){console.warn("THREE.WebGLRenderer: .shadowMap.cullFace has been removed. Set Material.shadowSide instead.")}},renderReverseSided:{get:function(){console.warn("THREE.WebGLRenderer: .shadowMap.renderReverseSided has been removed. Set Material.shadowSide instead.")},set:function(){console.warn("THREE.WebGLRenderer: .shadowMap.renderReverseSided has been removed. Set Material.shadowSide instead.")}},renderSingleSided:{get:function(){console.warn("THREE.WebGLRenderer: .shadowMap.renderSingleSided has been removed. Set Material.shadowSide instead.")},set:function(){console.warn("THREE.WebGLRenderer: .shadowMap.renderSingleSided has been removed. Set Material.shadowSide instead.")}}});Object.defineProperties(T.prototype,{wrapS:{get:function(){console.warn("THREE.WebGLRenderTarget: .wrapS is now .texture.wrapS.");return this.texture.wrapS},set:function(e){console.warn("THREE.WebGLRenderTarget: .wrapS is now .texture.wrapS.");this.texture.wrapS=e}},wrapT:{get:function(){console.warn("THREE.WebGLRenderTarget: .wrapT is now .texture.wrapT.");return this.texture.wrapT},set:function(e){console.warn("THREE.WebGLRenderTarget: .wrapT is now .texture.wrapT.");this.texture.wrapT=e}},magFilter:{get:function(){console.warn("THREE.WebGLRenderTarget: .magFilter is now .texture.magFilter.");return this.texture.magFilter},set:function(e){console.warn("THREE.WebGLRenderTarget: .magFilter is now .texture.magFilter.");this.texture.magFilter=e}},minFilter:{get:function(){console.warn("THREE.WebGLRenderTarget: .minFilter is now .texture.minFilter.");return this.texture.minFilter},set:function(e){console.warn("THREE.WebGLRenderTarget: .minFilter is now .texture.minFilter.");this.texture.minFilter=e}},anisotropy:{get:function(){console.warn("THREE.WebGLRenderTarget: .anisotropy is now .texture.anisotropy.");return this.texture.anisotropy},set:function(e){console.warn("THREE.WebGLRenderTarget: .anisotropy is now .texture.anisotropy.");this.texture.anisotropy=e}},offset:{get:function(){console.warn("THREE.WebGLRenderTarget: .offset is now .texture.offset.");return this.texture.offset},set:function(e){console.warn("THREE.WebGLRenderTarget: .offset is now .texture.offset.");this.texture.offset=e}},repeat:{get:function(){console.warn("THREE.WebGLRenderTarget: .repeat is now .texture.repeat.");return this.texture.repeat},set:function(e){console.warn("THREE.WebGLRenderTarget: .repeat is now .texture.repeat.");this.texture.repeat=e}},format:{get:function(){console.warn("THREE.WebGLRenderTarget: .format is now .texture.format.");return this.texture.format},set:function(e){console.warn("THREE.WebGLRenderTarget: .format is now .texture.format.");this.texture.format=e}},type:{get:function(){console.warn("THREE.WebGLRenderTarget: .type is now .texture.type.");return this.texture.type},set:function(e){console.warn("THREE.WebGLRenderTarget: .type is now .texture.type.");this.texture.type=e}},generateMipmaps:{get:function(){console.warn("THREE.WebGLRenderTarget: .generateMipmaps is now .texture.generateMipmaps.");return this.texture.generateMipmaps},set:function(e){console.warn("THREE.WebGLRenderTarget: .generateMipmaps is now .texture.generateMipmaps.");this.texture.generateMipmaps=e}}});Object.defineProperties(_t.prototype,{standing:{set:function(){console.warn("THREE.WebVRManager: .standing has been removed.")}}});pi.prototype.load=function(e){console.warn("THREE.Audio: .load has been deprecated. Use THREE.AudioLoader instead.");var t=this;(new ui).load(e,function(e){t.setBuffer(e)});return this};di.prototype.getData=function(){console.warn("THREE.AudioAnalyser: .getData() is now .getFrequencyData().");return this.getFrequencyData()};hi.prototype.updateCubeMap=function(e,t){console.warn("THREE.CubeCamera: .updateCubeMap() is now .update().");return this.update(e,t)};to.crossOrigin=void 0;to.loadTexture=function(e,t,r,n){console.warn("THREE.ImageUtils.loadTexture has been deprecated. Use THREE.TextureLoader() instead.");var i=new cn;i.setCrossOrigin(this.crossOrigin);e=i.load(e,r,void 0,n);t&&(e.mapping=t);return e};to.loadTextureCube=function(e,t,r,n){console.warn("THREE.ImageUtils.loadTextureCube has been deprecated. Use THREE.CubeTextureLoader() instead.");var i=new un;i.setCrossOrigin(this.crossOrigin);e=i.load(e,r,void 0,n);t&&(e.mapping=t);return e};to.loadCompressedTexture=function(){console.error("THREE.ImageUtils.loadCompressedTexture has been removed. Use THREE.DDSLoader instead.")};to.loadCompressedTextureCube=function(){console.error("THREE.ImageUtils.loadCompressedTextureCube has been removed. Use THREE.DDSLoader instead.")};e.WebGLRenderTargetCube=n;e.WebGLRenderTarget=T;e.WebGLRenderer=xt;e.ShaderLib=so;e.UniformsLib=ao;e.UniformsUtils=io;e.ShaderChunk=no;e.FogExp2=wt;e.Fog=St;e.Scene=Mt;e.Sprite=Ot;e.LOD=Pt;e.SkinnedMesh=Rt;e.Skeleton=At;e.Bone=jt;e.Mesh=$;e.LineSegments=Nt;e.LineLoop=kt;e.Line=It;e.Points=Bt;e.Group=mt;e.VideoTexture=Ft;e.DataTexture=Me;e.CompressedTexture=$t;e.CubeTexture=U;e.CanvasTexture=zt;e.DepthTexture=Ut;e.Texture=p;e.CompressedTextureLoader=on;e.DataTextureLoader=an;e.CubeTextureLoader=un;e.TextureLoader=cn;e.ObjectLoader=ni;e.MaterialLoader=Qn;e.BufferGeometryLoader=ei;e.DefaultLoadingManager=Ao;e.LoadingManager=rn;e.JSONLoader=ri;e.ImageLoader=sn;e.ImageBitmapLoader=ii;e.FontLoader=si;e.FileLoader=nn;e.Loader=ti;e.LoaderUtils=Fo;e.Cache=Po;e.AudioLoader=ui;e.SpotLightShadow=jn;e.SpotLight=Rn;e.PointLight=Ln;e.RectAreaLight=Dn;e.HemisphereLight=Pn;e.DirectionalLightShadow=In;e.DirectionalLight=Nn;e.AmbientLight=kn;e.LightShadow=An;e.Light=On;e.StereoCamera=ci;e.PerspectiveCamera=gt;e.OrthographicCamera=f;e.CubeCamera=hi;e.ArrayCamera=yt;e.Camera=u;e.AudioListener=li;e.PositionalAudio=fi;e.AudioContext=Vo;e.AudioAnalyser=di;e.Audio=pi;e.VectorKeyframeTrack=Yn;e.StringKeyframeTrack=Xn;e.QuaternionKeyframeTrack=Wn;e.NumberKeyframeTrack=Hn;e.ColorKeyframeTrack=Vn;e.BooleanKeyframeTrack=Gn;e.PropertyMixer=vi;e.PropertyBinding=gi;e.KeyframeTrack=Un;e.AnimationUtils=Do;e.AnimationObjectGroup=yi;e.AnimationMixer=bi;e.AnimationClip=Kn;e.Uniform=xi;e.InstancedBufferGeometry=wi;e.BufferGeometry=A;e.Geometry=S;e.InterleavedBufferAttribute=Ct;e.InstancedInterleavedBuffer=Si;e.InterleavedBuffer=Et;e.InstancedBufferAttribute=Mi;e.Face3=D;e.Object3D=h;e.Raycaster=Ei;e.Layers=o;e.EventDispatcher=t;e.Clock=Oi;e.QuaternionLinearInterpolant=qn;e.LinearInterpolant=$n;e.DiscreteInterpolant=zn;e.CubicInterpolant=Fn;e.Interpolant=Bn;e.Triangle=F;e.Math=eo;e.Spherical=Pi;e.Cylindrical=Ai;e.Plane=g;e.Frustum=Ee;e.Sphere=c;e.Ray=B;e.Matrix4=xe;e.Matrix3=m;e.Box3=r;e.Box2=ji;e.Line3=Ri;e.Euler=i;e.Vector4=Se;e.Vector3=we;e.Vector2=H;e.Quaternion=s;e.Color=w;e.ImmediateRenderObject=Li;e.VertexNormalsHelper=Ii;e.SpotLightHelper=Ni;e.SkeletonHelper=Di;e.PointLightHelper=Bi;e.RectAreaLightHelper=Fi;e.HemisphereLightHelper=$i;e.GridHelper=zi;e.PolarGridHelper=Ui;e.FaceNormalsHelper=Gi;e.DirectionalLightHelper=Vi;e.CameraHelper=Hi;e.BoxHelper=qi;e.Box3Helper=Wi;e.PlaneHelper=Xi;e.ArrowHelper=Yi;e.AxesHelper=Ki;e.Shape=Tn;e.Path=Cn;e.ShapePath=oi;e.Font=ai;e.CurvePath=En;e.Curve=hn;e.ImageUtils=to;e.ShapeUtils=Eo;e.WebGLUtils=vt;e.WireframeGeometry=Gt;e.ParametricGeometry=Vt;e.ParametricBufferGeometry=Ht;e.TetrahedronGeometry=Xt;e.TetrahedronBufferGeometry=Yt;e.OctahedronGeometry=Kt;e.OctahedronBufferGeometry=Zt;e.IcosahedronGeometry=Jt;e.IcosahedronBufferGeometry=Qt;e.DodecahedronGeometry=er;e.DodecahedronBufferGeometry=tr;e.PolyhedronGeometry=qt;e.PolyhedronBufferGeometry=Wt;e.TubeGeometry=rr;e.TubeBufferGeometry=nr;e.TorusKnotGeometry=ir;e.TorusKnotBufferGeometry=or;e.TorusGeometry=ar;e.TorusBufferGeometry=sr;e.TextGeometry=Pr;e.TextBufferGeometry=Ar;e.SphereGeometry=jr;e.SphereBufferGeometry=Rr;e.RingGeometry=Lr;e.RingBufferGeometry=Ir;e.PlaneGeometry=R;e.PlaneBufferGeometry=L;e.LatheGeometry=Nr;e.LatheBufferGeometry=kr;e.ShapeGeometry=Dr;e.ShapeBufferGeometry=Br;e.ExtrudeGeometry=Cr;e.ExtrudeBufferGeometry=Tr;e.EdgesGeometry=$r;e.ConeGeometry=Gr;e.ConeBufferGeometry=Vr;e.CylinderGeometry=zr;e.CylinderBufferGeometry=Ur;e.CircleGeometry=Hr;e.CircleBufferGeometry=qr;e.BoxGeometry=O;e.BoxBufferGeometry=j;e.ShadowMaterial=Wr;e.SpriteMaterial=Tt;e.RawShaderMaterial=Xr;e.ShaderMaterial=k;e.PointsMaterial=Dt;e.MeshPhysicalMaterial=Kr;e.MeshStandardMaterial=Yr;e.MeshPhongMaterial=Zr;e.MeshToonMaterial=Jr;e.MeshNormalMaterial=Qr;e.MeshLambertMaterial=en;e.MeshDepthMaterial=ht;e.MeshDistanceMaterial=lt;e.MeshBasicMaterial=N;e.LineDashedMaterial=tn;e.LineBasicMaterial=Lt;e.Material=I;e.Float64BufferAttribute=M;e.Float32BufferAttribute=P;e.Uint32BufferAttribute=x;e.Int32BufferAttribute=b;e.Uint16BufferAttribute=_;e.Int16BufferAttribute=v;e.Uint8ClampedBufferAttribute=d;e.Uint8BufferAttribute=l;e.Int8BufferAttribute=a;e.BufferAttribute=y;e.ArcCurve=pn;e.CatmullRomCurve3=dn;e.CubicBezierCurve=yn;e.CubicBezierCurve3=_n;e.EllipseCurve=ln;e.LineCurve=bn;e.LineCurve3=xn;e.QuadraticBezierCurve=wn;e.QuadraticBezierCurve3=Sn;e.SplineCurve=Mn;e.REVISION="95";e.MOUSE={LEFT:0,MIDDLE:1,RIGHT:2};e.CullFaceNone=0;e.CullFaceBack=1;e.CullFaceFront=2;e.CullFaceFrontBack=3;e.FrontFaceDirectionCW=0;e.FrontFaceDirectionCCW=1;e.BasicShadowMap=0;e.PCFShadowMap=1;e.PCFSoftShadowMap=2;e.FrontSide=0;e.BackSide=1;e.DoubleSide=2;e.FlatShading=1;e.SmoothShading=2;e.NoColors=0;e.FaceColors=1;e.VertexColors=2;e.NoBlending=0;e.NormalBlending=1;e.AdditiveBlending=2;e.SubtractiveBlending=3;e.MultiplyBlending=4;e.CustomBlending=5;e.AddEquation=100;e.SubtractEquation=101;e.ReverseSubtractEquation=102;e.MinEquation=103;e.MaxEquation=104;e.ZeroFactor=200;e.OneFactor=201;e.SrcColorFactor=202;e.OneMinusSrcColorFactor=203;e.SrcAlphaFactor=204;e.OneMinusSrcAlphaFactor=205;e.DstAlphaFactor=206;e.OneMinusDstAlphaFactor=207;e.DstColorFactor=208;e.OneMinusDstColorFactor=209;e.SrcAlphaSaturateFactor=210;e.NeverDepth=0;e.AlwaysDepth=1;e.LessDepth=2;e.LessEqualDepth=3;e.EqualDepth=4;e.GreaterEqualDepth=5;e.GreaterDepth=6;e.NotEqualDepth=7;e.MultiplyOperation=0;e.MixOperation=1;e.AddOperation=2;e.NoToneMapping=0;e.LinearToneMapping=1;e.ReinhardToneMapping=2;e.Uncharted2ToneMapping=3;e.CineonToneMapping=4;e.UVMapping=300;e.CubeReflectionMapping=301;e.CubeRefractionMapping=302;e.EquirectangularReflectionMapping=303;e.EquirectangularRefractionMapping=304;e.SphericalReflectionMapping=305;e.CubeUVReflectionMapping=306;e.CubeUVRefractionMapping=307;e.RepeatWrapping=1e3;e.ClampToEdgeWrapping=1001;e.MirroredRepeatWrapping=1002;e.NearestFilter=1003;e.NearestMipMapNearestFilter=1004;e.NearestMipMapLinearFilter=1005;e.LinearFilter=1006;e.LinearMipMapNearestFilter=1007;e.LinearMipMapLinearFilter=1008;e.UnsignedByteType=1009;e.ByteType=1010;e.ShortType=1011;e.UnsignedShortType=1012;e.IntType=1013;e.UnsignedIntType=1014;e.FloatType=1015;e.HalfFloatType=1016;e.UnsignedShort4444Type=1017;e.UnsignedShort5551Type=1018;e.UnsignedShort565Type=1019;e.UnsignedInt248Type=1020;e.AlphaFormat=1021;e.RGBFormat=1022;e.RGBAFormat=1023;e.LuminanceFormat=1024;e.LuminanceAlphaFormat=1025;e.RGBEFormat=1023;e.DepthFormat=1026;e.DepthStencilFormat=1027;e.RGB_S3TC_DXT1_Format=33776;e.RGBA_S3TC_DXT1_Format=33777;e.RGBA_S3TC_DXT3_Format=33778;e.RGBA_S3TC_DXT5_Format=33779;e.RGB_PVRTC_4BPPV1_Format=35840;e.RGB_PVRTC_2BPPV1_Format=35841;e.RGBA_PVRTC_4BPPV1_Format=35842;e.RGBA_PVRTC_2BPPV1_Format=35843;e.RGB_ETC1_Format=36196;e.RGBA_ASTC_4x4_Format=37808;e.RGBA_ASTC_5x4_Format=37809;e.RGBA_ASTC_5x5_Format=37810;e.RGBA_ASTC_6x5_Format=37811;e.RGBA_ASTC_6x6_Format=37812;e.RGBA_ASTC_8x5_Format=37813;e.RGBA_ASTC_8x6_Format=37814;e.RGBA_ASTC_8x8_Format=37815;e.RGBA_ASTC_10x5_Format=37816;e.RGBA_ASTC_10x6_Format=37817;e.RGBA_ASTC_10x8_Format=37818;e.RGBA_ASTC_10x10_Format=37819;e.RGBA_ASTC_12x10_Format=37820;e.RGBA_ASTC_12x12_Format=37821;e.LoopOnce=2200;e.LoopRepeat=2201;e.LoopPingPong=2202;e.InterpolateDiscrete=2300;e.InterpolateLinear=2301;e.InterpolateSmooth=2302;e.ZeroCurvatureEnding=2400;e.ZeroSlopeEnding=2401;e.WrapAroundEnding=2402;e.TrianglesDrawMode=0;e.TriangleStripDrawMode=1;e.TriangleFanDrawMode=2;e.LinearEncoding=3e3;e.sRGBEncoding=3001;e.GammaEncoding=3007;e.RGBEEncoding=3002;e.LogLuvEncoding=3003;e.RGBM7Encoding=3004;e.RGBM16Encoding=3005;e.RGBDEncoding=3006;e.BasicDepthPacking=3200;e.RGBADepthPacking=3201;e.TangentSpaceNormalMap=0;e.ObjectSpaceNormalMap=1;e.CubeGeometry=O;e.Face4=function(e,t,r,n,i,o,a){console.warn("THREE.Face4 has been removed. A THREE.Face3 will be created instead.");return new D(e,t,r,i,o,a)};e.LineStrip=0;e.LinePieces=1;e.MeshFaceMaterial=function(e){console.warn("THREE.MeshFaceMaterial has been removed. Use an Array instead.");return e};e.MultiMaterial=function(e){void 0===e&&(e=[]);console.warn("THREE.MultiMaterial has been removed. Use an Array instead.");e.isMultiMaterial=!0;e.materials=e;e.clone=function(){return e.slice()};return e};e.PointCloud=function(e,t){console.warn("THREE.PointCloud has been renamed to THREE.Points.");return new Bt(e,t)};e.Particle=function(e){console.warn("THREE.Particle has been renamed to THREE.Sprite.");return new Ot(e)};e.ParticleSystem=function(e,t){console.warn("THREE.ParticleSystem has been renamed to THREE.Points.");return new Bt(e,t)};e.PointCloudMaterial=function(e){console.warn("THREE.PointCloudMaterial has been renamed to THREE.PointsMaterial.");return new Dt(e)};e.ParticleBasicMaterial=function(e){console.warn("THREE.ParticleBasicMaterial has been renamed to THREE.PointsMaterial.");return new Dt(e)};e.ParticleSystemMaterial=function(e){console.warn("THREE.ParticleSystemMaterial has been renamed to THREE.PointsMaterial.");return new Dt(e)};e.Vertex=function(e,t,r){console.warn("THREE.Vertex has been removed. Use THREE.Vector3 instead.");return new we(e,t,r)};e.DynamicBufferAttribute=function(e,t){console.warn("THREE.DynamicBufferAttribute has been removed. Use new THREE.BufferAttribute().setDynamic( true ) instead.");return new y(e,t).setDynamic(!0)};e.Int8Attribute=function(e,t){console.warn("THREE.Int8Attribute has been removed. Use new THREE.Int8BufferAttribute() instead.");return new a(e,t)};e.Uint8Attribute=function(e,t){console.warn("THREE.Uint8Attribute has been removed. Use new THREE.Uint8BufferAttribute() instead.");return new l(e,t)};e.Uint8ClampedAttribute=function(e,t){console.warn("THREE.Uint8ClampedAttribute has been removed. Use new THREE.Uint8ClampedBufferAttribute() instead.");return new d(e,t)};e.Int16Attribute=function(e,t){console.warn("THREE.Int16Attribute has been removed. Use new THREE.Int16BufferAttribute() instead.");return new v(e,t)};e.Uint16Attribute=function(e,t){console.warn("THREE.Uint16Attribute has been removed. Use new THREE.Uint16BufferAttribute() instead.");return new _(e,t)};e.Int32Attribute=function(e,t){console.warn("THREE.Int32Attribute has been removed. Use new THREE.Int32BufferAttribute() instead.");return new b(e,t)};e.Uint32Attribute=function(e,t){console.warn("THREE.Uint32Attribute has been removed. Use new THREE.Uint32BufferAttribute() instead.");return new x(e,t)};e.Float32Attribute=function(e,t){console.warn("THREE.Float32Attribute has been removed. Use new THREE.Float32BufferAttribute() instead.");return new P(e,t)};e.Float64Attribute=function(e,t){console.warn("THREE.Float64Attribute has been removed. Use new THREE.Float64BufferAttribute() instead.");return new M(e,t)};e.ClosedSplineCurve3=Zi;e.SplineCurve3=Ji;e.Spline=Qi;e.AxisHelper=function(e){console.warn("THREE.AxisHelper has been renamed to THREE.AxesHelper.");return new Ki(e)};e.BoundingBoxHelper=function(e,t){console.warn("THREE.BoundingBoxHelper has been deprecated. Creating a THREE.BoxHelper instead.");return new qi(e,t)};e.EdgesHelper=function(e,t){console.warn("THREE.EdgesHelper has been removed. Use THREE.EdgesGeometry instead.");return new Nt(new $r(e.geometry),new Lt({color:void 0!==t?t:16777215}))};e.WireframeHelper=function(e,t){console.warn("THREE.WireframeHelper has been removed. Use THREE.WireframeGeometry instead.");return new Nt(new Gt(e.geometry),new Lt({color:void 0!==t?t:16777215}))};e.XHRLoader=function(e){console.warn("THREE.XHRLoader has been renamed to THREE.FileLoader.");return new nn(e)};e.BinaryTextureLoader=function(e){console.warn("THREE.BinaryTextureLoader has been renamed to THREE.DataTextureLoader.");return new an(e)};e.GeometryUtils={merge:function(e,t,r){console.warn("THREE.GeometryUtils: .merge() has been moved to Geometry. Use geometry.merge( geometry2, matrix, materialIndexOffset ) instead.");if(t.isMesh){t.matrixAutoUpdate&&t.updateMatrix();var n=t.matrix;t=t.geometry}e.merge(t,n,r)},center:function(e){console.warn("THREE.GeometryUtils: .center() has been moved to Geometry. Use geometry.center() instead.");return e.center()}};e.Projector=function(){console.error("THREE.Projector has been moved to /examples/js/renderers/Projector.js.");this.projectVector=function(e,t){console.warn("THREE.Projector: .projectVector() is now vector.project().");e.project(t)};this.unprojectVector=function(e,t){console.warn("THREE.Projector: .unprojectVector() is now vector.unproject().");e.unproject(t)};this.pickingRay=function(){console.error("THREE.Projector: .pickingRay() is now raycaster.setFromCamera().")}};e.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(){}};e.SceneUtils={createMultiMaterialObject:function(){console.error("THREE.SceneUtils has been moved to /examples/js/utils/SceneUtils.js")},detach:function(){console.error("THREE.SceneUtils has been moved to /examples/js/utils/SceneUtils.js")},attach:function(){console.error("THREE.SceneUtils has been moved to /examples/js/utils/SceneUtils.js")}};e.LensFlare=function(){console.error("THREE.LensFlare has been moved to /examples/js/objects/Lensflare.js")};Object.defineProperty(e,"__esModule",{value:!0})})},{}],227:[function(e,t,r){"use strict";t.exports=n;function n(e,t){if(!(this instanceof n))return new n(e,t);this.data=e||[];this.length=this.data.length;this.compare=t||i;if(this.length>0){for(var r=this.length>>1;r>=0;r--)this._down(r)}}function i(e,t){return e<t?-1:e>t?1:0}n.prototype={push:function(e){this.data.push(e);this.length++;this._up(this.length-1)},pop:function(){if(this.length===0)return undefined;var e=this.data[0];this.length--;if(this.length>0){this.data[0]=this.data[this.length];this._down(0)}this.data.pop();return e},peek:function(){return this.data[0]},_up:function(e){var t=this.data;var r=this.compare;var n=t[e];while(e>0){var i=e-1>>1;var o=t[i];if(r(n,o)>=0)break;t[e]=o;e=i}t[e]=n},_down:function(e){var t=this.data;var r=this.compare;var n=this.length;var i=n>>1;var o=t[e];while(e<i){var a=(e<<1)+1;var s=a+1;var u=t[a];if(s<n&&r(t[s],u)<0){a=s;u=t[s]}if(r(u,o)>=0)break;t[e]=u;e=a}t[e]=o}}},{}],228:[function(e,t,r){var n=e("./vdom/create-element.js");t.exports=n},{"./vdom/create-element.js":234}],229:[function(e,t,r){var n=e("./vtree/diff.js");t.exports=n},{"./vtree/diff.js":254}],230:[function(e,t,r){var n=e("./virtual-hyperscript/index.js");t.exports=n},{"./virtual-hyperscript/index.js":241}],231:[function(e,t,r){var n=e("./diff.js");var i=e("./patch.js");var o=e("./h.js");var a=e("./create-element.js");var s=e("./vnode/vnode.js");var u=e("./vnode/vtext.js");t.exports={diff:n,patch:i,h:o,create:a,VNode:s,VText:u}},{"./create-element.js":228,"./diff.js":229,"./h.js":230,"./patch.js":232,"./vnode/vnode.js":250,"./vnode/vtext.js":252}],232:[function(e,t,r){var n=e("./vdom/patch.js");t.exports=n},{"./vdom/patch.js":237}],233:[function(e,t,r){var l=e("is-object");var s=e("../vnode/is-vhook.js");t.exports=n;function n(e,t,r){for(var n in t){var i=t[n];if(i===undefined){o(e,n,i,r)}else if(s(i)){o(e,n,i,r);if(i.hook){i.hook(e,n,r?r[n]:undefined)}}else{if(l(i)){a(e,t,r,n,i)}else{e[n]=i}}}}function o(e,t,r,n){if(n){var i=n[t];if(!s(i)){if(t==="attributes"){for(var o in i){e.removeAttribute(o)}}else if(t==="style"){for(var a in i){e.style[a]=""}}else if(typeof i==="string"){e[t]=""}else{e[t]=null}}else if(i.unhook){i.unhook(e,t,r)}}}function a(e,t,r,n,i){var o=r?r[n]:undefined;if(n==="attributes"){for(var a in i){var s=i[a];if(s===undefined){e.removeAttribute(a)}else{e.setAttribute(a,s)}}return}if(o&&l(o)&&p(o)!==p(i)){e[n]=i;return}if(!l(e[n])){e[n]={}}var u=n==="style"?"":undefined;for(var c in i){var h=i[c];e[n][c]=h===undefined?u:h}}function p(e){if(Object.getPrototypeOf){return Object.getPrototypeOf(e)}else if(e.__proto__){return e.__proto__}else if(e.constructor){return e.constructor.prototype}}},{"../vnode/is-vhook.js":245,"is-object":20}],234:[function(e,t,r){var c=e("global/document");var h=e("./apply-properties");var l=e("../vnode/is-vnode.js");var p=e("../vnode/is-vtext.js");var f=e("../vnode/is-widget.js");var d=e("../vnode/handle-thunk.js");t.exports=v;function v(e,t){var r=t?t.document||c:c;var n=t?t.warn:null;e=d(e).a;if(f(e)){return e.init()}else if(p(e)){return r.createTextNode(e.text)}else if(!l(e)){if(n){n("Item is not a valid virtual dom node",e)}return null}var i=e.namespace===null?r.createElement(e.tagName):r.createElementNS(e.namespace,e.tagName);var o=e.properties;h(i,o);var a=e.children;for(var s=0;s<a.length;s++){var u=v(a[s],t);if(u){i.appendChild(u)}}return i}},{"../vnode/handle-thunk.js":243,"../vnode/is-vnode.js":246,"../vnode/is-vtext.js":247,"../vnode/is-widget.js":248,"./apply-properties":233,"global/document":16}],235:[function(e,t,r){var h={};t.exports=n;function n(e,t,r,n){if(!r||r.length===0){return{}}else{r.sort(i);return l(e,t,r,n,0)}}function l(e,t,r,n,i){n=n||{};if(e){if(p(r,i,i)){n[i]=e}var o=t.children;if(o){var a=e.childNodes;for(var s=0;s<t.children.length;s++){i+=1;var u=o[s]||h;var c=i+(u.count||0);if(p(r,i,c)){l(a[s],u,r,n,i)}i=c}}}return n}function p(e,t,r){if(e.length===0){return false}var n=0;var i=e.length-1;var o;var a;while(n<=i){o=(i+n)/2>>0;a=e[o];if(n===i){return a>=t&&a<=r}else if(a<t){n=o+1}else if(a>r){i=o-1}else{return true}}return false}function i(e,t){return e>t?1:-1}},{}],236:[function(e,t,r){var a=e("./apply-properties");var n=e("../vnode/is-widget.js");var s=e("../vnode/vpatch.js");var u=e("./update-widget");t.exports=i;function i(e,t,r){var n=e.type;var i=e.vNode;var o=e.patch;switch(n){case s.REMOVE:return c(t,i);case s.INSERT:return h(t,o,r);case s.VTEXT:return l(t,i,o,r);case s.WIDGET:return p(t,i,o,r);case s.VNODE:return f(t,i,o,r);case s.ORDER:v(t,o);return t;case s.PROPS:a(t,o,i.properties);return t;case s.THUNK:return m(t,r.patch(t,o,r));default:return t}}function c(e,t){var r=e.parentNode;if(r){r.removeChild(e)}d(e,t);return null}function h(e,t,r){var n=r.render(t,r);if(e){e.appendChild(n)}return e}function l(e,t,r,n){var i;if(e.nodeType===3){e.replaceData(0,e.length,r.text);i=e}else{var o=e.parentNode;i=n.render(r,n);if(o&&i!==e){o.replaceChild(i,e)}}return i}function p(e,t,r,n){var i=u(t,r);var o;if(i){o=r.update(t,e)||e}else{o=n.render(r,n)}var a=e.parentNode;if(a&&o!==e){a.replaceChild(o,e)}if(!i){d(e,t)}return o}function f(e,t,r,n){var i=e.parentNode;var o=n.render(r,n);if(i&&o!==e){i.replaceChild(o,e)}return o}function d(e,t){if(typeof t.destroy==="function"&&n(t)){t.destroy(e)}}function v(e,t){var r=e.childNodes;var n={};var i;var o;var a;for(var s=0;s<t.removes.length;s++){o=t.removes[s];i=r[o.from];if(o.key){n[o.key]=i}e.removeChild(i)}var u=r.length;for(var c=0;c<t.inserts.length;c++){a=t.inserts[c];i=n[a.key];e.insertBefore(i,a.to>=u++?null:r[a.to])}}function m(e,t){if(e&&t&&e!==t&&e.parentNode){e.parentNode.replaceChild(t,e)}return t}},{"../vnode/is-widget.js":248,"../vnode/vpatch.js":251,"./apply-properties":233,"./update-widget":238}],237:[function(e,t,r){var u=e("global/document");var a=e("x-is-array");var n=e("./create-element");var c=e("./dom-index");var s=e("./patch-op");t.exports=i;function i(e,t,r){r=r||{};r.patch=r.patch&&r.patch!==i?r.patch:o;r.render=r.render||n;return r.patch(e,t,r)}function o(e,t,r){var n=l(t);if(n.length===0){return e}var i=c(e,t.a,n);var o=e.ownerDocument;if(!r.document&&o!==u){r.document=o}for(var a=0;a<n.length;a++){var s=n[a];e=h(e,i[s],t[s],r)}return e}function h(e,t,r,n){if(!t){return e}var i;if(a(r)){for(var o=0;o<r.length;o++){i=s(r[o],t,n);if(t===e){e=i}}}else{i=s(r,t,n);if(t===e){e=i}}return e}function l(e){var t=[];for(var r in e){if(r!=="a"){t.push(Number(r))}}return t}},{"./create-element":234,"./dom-index":235,"./patch-op":236,"global/document":16,"x-is-array":273}],238:[function(e,t,r){var n=e("../vnode/is-widget.js");t.exports=i;function i(e,t){if(n(e)&&n(t)){if("name"in e&&"name"in t){return e.id===t.id}else{return e.init===t.init}}return false}},{"../vnode/is-widget.js":248}],239:[function(e,t,r){"use strict";var i=e("ev-store");t.exports=n;function n(e){if(!(this instanceof n)){return new n(e)}this.value=e}n.prototype.hook=function(e,t){var r=i(e);var n=t.substr(3);r[n]=this.value};n.prototype.unhook=function(e,t){var r=i(e);var n=t.substr(3);r[n]=undefined}},{"ev-store":9}],240:[function(e,t,r){"use strict";t.exports=n;function n(e){if(!(this instanceof n)){return new n(e)}this.value=e}n.prototype.hook=function(e,t){if(e[t]!==this.value){e[t]=this.value}}},{}],241:[function(e,t,r){"use strict";var o=e("x-is-array");var u=e("../vnode/vnode.js");var a=e("../vnode/vtext.js");var n=e("../vnode/is-vnode");var i=e("../vnode/is-vtext");var s=e("../vnode/is-widget");var c=e("../vnode/is-vhook");var h=e("../vnode/is-thunk");var l=e("./parse-tag.js");var p=e("./hooks/soft-set-hook.js");var f=e("./hooks/ev-hook.js");t.exports=d;function d(e,t,r){var n=[];var i,o,a,s;if(!r&&y(t)){r=t;o={}}o=o||t||{};i=l(e,o);if(o.hasOwnProperty("key")){a=o.key;o.key=undefined}if(o.hasOwnProperty("namespace")){s=o.namespace;o.namespace=undefined}if(i==="INPUT"&&!s&&o.hasOwnProperty("value")&&o.value!==undefined&&!c(o.value)){o.value=p(o.value)}m(o);if(r!==undefined&&r!==null){v(r,n,i,o)}return new u(i,o,n,a,s)}function v(e,t,r,n){if(typeof e==="string"){t.push(new a(e))}else if(typeof e==="number"){t.push(new a(String(e)))}else if(g(e)){t.push(e)}else if(o(e)){for(var i=0;i<e.length;i++){v(e[i],t,r,n)}}else if(e===null||e===undefined){return}else{throw _({foreignObject:e,parentVnode:{tagName:r,properties:n}})}}function m(e){for(var t in e){if(e.hasOwnProperty(t)){var r=e[t];if(c(r)){continue}if(t.substr(0,3)==="ev-"){e[t]=f(r)}}}}function g(e){return n(e)||i(e)||s(e)||h(e)}function y(e){return typeof e==="string"||o(e)||g(e)}function _(e){var t=new Error;t.type="virtual-hyperscript.unexpected.virtual-element";t.message="Unexpected virtual child passed to h().\n"+"Expected a VNode / Vthunk / VWidget / string but:\n"+"got:\n"+b(e.foreignObject)+".\n"+"The parent vnode is:\n"+b(e.parentVnode);"\n"+"Suggested fix: change your `h(..., [ ... ])` callsite.";t.foreignObject=e.foreignObject;t.parentVnode=e.parentVnode;return t}function b(t){try{return JSON.stringify(t,null,"    ")}catch(e){return String(t)}}},{"../vnode/is-thunk":244,"../vnode/is-vhook":245,"../vnode/is-vnode":246,"../vnode/is-vtext":247,"../vnode/is-widget":248,"../vnode/vnode.js":250,"../vnode/vtext.js":252,"./hooks/ev-hook.js":239,"./hooks/soft-set-hook.js":240,"./parse-tag.js":242,"x-is-array":273}],242:[function(e,t,r){"use strict";var c=e("browser-split");var h=/([\.#]?[a-zA-Z0-9\u007F-\uFFFF_:-]+)/;var l=/^\.|#/;t.exports=n;function n(e,t){if(!e){return"DIV"}var r=!t.hasOwnProperty("id");var n=c(e,h);var i=null;if(l.test(n[1])){i="DIV"}var o,a,s,u;for(u=0;u<n.length;u++){a=n[u];if(!a){continue}s=a.charAt(0);if(!i){i=a}else if(s==="."){o=o||[];o.push(a.substring(1,a.length))}else if(s==="#"&&r){t.id=a.substring(1,a.length)}}if(o){if(t.className){o.push(t.className)}t.className=o.join(" ")}return t.namespace?i:i.toUpperCase()}},{"browser-split":5}],243:[function(e,t,r){var n=e("./is-vnode");var i=e("./is-vtext");var o=e("./is-widget");var a=e("./is-thunk");t.exports=s;function s(e,t){var r=e;var n=t;if(a(t)){n=u(t,e)}if(a(e)){r=u(e,null)}return{a:r,b:n}}function u(e,t){var r=e.vnode;if(!r){r=e.vnode=e.render(t)}if(!(n(r)||i(r)||o(r))){throw new Error("thunk did not return a valid node")}return r}},{"./is-thunk":244,"./is-vnode":246,"./is-vtext":247,"./is-widget":248}],244:[function(e,t,r){t.exports=n;function n(e){return e&&e.type==="Thunk"}},{}],245:[function(e,t,r){t.exports=n;function n(e){return e&&(typeof e.hook==="function"&&!e.hasOwnProperty("hook")||typeof e.unhook==="function"&&!e.hasOwnProperty("unhook"))}},{}],246:[function(e,t,r){var n=e("./version");t.exports=i;function i(e){return e&&e.type==="VirtualNode"&&e.version===n}},{"./version":249}],247:[function(e,t,r){var n=e("./version");t.exports=i;function i(e){return e&&e.type==="VirtualText"&&e.version===n}},{"./version":249}],248:[function(e,t,r){t.exports=n;function n(e){return e&&e.type==="Widget"}},{}],249:[function(e,t,r){t.exports="2"},{}],250:[function(e,t,r){var n=e("./version");var v=e("./is-vnode");var m=e("./is-widget");var g=e("./is-thunk");var y=e("./is-vhook");t.exports=i;var _={};var b=[];function i(e,t,r,n,i){this.tagName=e;this.properties=t||_;this.children=r||b;this.key=n!=null?String(n):undefined;this.namespace=typeof i==="string"?i:null;var o=r&&r.length||0;var a=0;var s=false;var u=false;var c=false;var h;for(var l in t){if(t.hasOwnProperty(l)){var p=t[l];if(y(p)&&p.unhook){if(!h){h={}}h[l]=p}}}for(var f=0;f<o;f++){var d=r[f];if(v(d)){a+=d.count||0;if(!s&&d.hasWidgets){s=true}if(!u&&d.hasThunks){u=true}if(!c&&(d.hooks||d.descendantHooks)){c=true}}else if(!s&&m(d)){if(typeof d.destroy==="function"){s=true}}else if(!u&&g(d)){u=true}}this.count=o+a;this.hasWidgets=s;this.hasThunks=u;this.hooks=h;this.descendantHooks=c}i.prototype.version=n;i.prototype.type="VirtualNode"},{"./is-thunk":244,"./is-vhook":245,"./is-vnode":246,"./is-widget":248,"./version":249}],251:[function(e,t,r){var n=e("./version");i.NONE=0;i.VTEXT=1;i.VNODE=2;i.WIDGET=3;i.PROPS=4;i.ORDER=5;i.INSERT=6;i.REMOVE=7;i.THUNK=8;t.exports=i;function i(e,t,r){this.type=Number(e);this.vNode=t;this.patch=r}i.prototype.version=n;i.prototype.type="VirtualPatch"},{"./version":249}],252:[function(e,t,r){var n=e("./version");t.exports=i;function i(e){this.text=String(e)}i.prototype.version=n;i.prototype.type="VirtualText"},{"./version":249}],253:[function(e,t,r){var u=e("is-object");var c=e("../vnode/is-vhook");t.exports=h;function h(e,t){var r;for(var n in e){if(!(n in t)){r=r||{};r[n]=undefined}var i=e[n];var o=t[n];if(i===o){continue}else if(u(i)&&u(o)){if(l(o)!==l(i)){r=r||{};r[n]=o}else if(c(o)){r=r||{};r[n]=o}else{var a=h(i,o);if(a){r=r||{};r[n]=a}}}else{r=r||{};r[n]=o}}for(var s in t){if(!(s in e)){r=r||{};r[s]=t[s]}}return r}function l(e){if(Object.getPrototypeOf){return Object.getPrototypeOf(e)}else if(e.__proto__){return e.__proto__}else if(e.constructor){return e.constructor.prototype}}},{"../vnode/is-vhook":245,"is-object":20}],254:[function(e,t,r){var n=e("x-is-array");var d=e("../vnode/vpatch");var v=e("../vnode/is-vnode");var s=e("../vnode/is-vtext");var u=e("../vnode/is-widget");var c=e("../vnode/is-thunk");var a=e("../vnode/handle-thunk");var h=e("./diff-props");t.exports=l;function l(e,t){var r={a:e};m(e,t,r,0);return r}function m(e,t,r,n){if(e===t){return}var i=r[n];var o=false;if(c(e)||c(t)){y(e,t,r,n)}else if(t==null){if(!u(e)){f(e,r,n);i=r[n]}i=S(i,new d(d.REMOVE,e,t))}else if(v(t)){if(v(e)){if(e.tagName===t.tagName&&e.namespace===t.namespace&&e.key===t.key){var a=h(e.properties,t.properties);if(a){i=S(i,new d(d.PROPS,e,a))}i=p(e,t,r,i,n)}else{i=S(i,new d(d.VNODE,e,t));o=true}}else{i=S(i,new d(d.VNODE,e,t));o=true}}else if(s(t)){if(!s(e)){i=S(i,new d(d.VTEXT,e,t));o=true}else if(e.text!==t.text){i=S(i,new d(d.VTEXT,e,t))}}else if(u(t)){if(!u(e)){o=true}i=S(i,new d(d.WIDGET,e,t))}if(i){r[n]=i}if(o){f(e,r,n)}}function p(e,t,r,n,i){var o=e.children;var a=w(o,t.children);var s=a.children;var u=o.length;var c=s.length;var h=u>c?u:c;for(var l=0;l<h;l++){var p=o[l];var f=s[l];i+=1;if(!p){if(f){n=S(n,new d(d.INSERT,null,f))}}else{m(p,f,r,i)}if(v(p)&&p.count){i+=p.count}}if(a.moves){n=S(n,new d(d.ORDER,e,a.moves))}return n}function f(e,t,r){b(e,t,r);g(e,t,r)}function g(e,t,r){if(u(e)){if(typeof e.destroy==="function"){t[r]=S(t[r],new d(d.REMOVE,e,null))}}else if(v(e)&&(e.hasWidgets||e.hasThunks)){var n=e.children;var i=n.length;for(var o=0;o<i;o++){var a=n[o];r+=1;g(a,t,r);if(v(a)&&a.count){r+=a.count}}}else if(c(e)){y(e,null,t,r)}}function y(e,t,r,n){var i=a(e,t);var o=l(i.a,i.b);if(_(o)){r[n]=new d(d.THUNK,null,o)}}function _(e){for(var t in e){if(t!=="a"){return true}}return false}function b(e,t,r){if(v(e)){if(e.hooks){t[r]=S(t[r],new d(d.PROPS,e,x(e.hooks)))}if(e.descendantHooks||e.hasThunks){var n=e.children;var i=n.length;for(var o=0;o<i;o++){var a=n[o];r+=1;b(a,t,r);if(v(a)&&a.count){r+=a.count}}}}else if(c(e)){y(e,null,t,r)}}function x(e){var t={};for(var r in e){t[r]=undefined}return t}function w(e,t){var r=C(t);var n=r.keys;var i=r.free;if(i.length===t.length){return{children:t,moves:null}}var o=C(e);var a=o.keys;var s=o.free;if(s.length===e.length){return{children:t,moves:null}}var u=[];var c=0;var h=i.length;var l=0;for(var p=0;p<e.length;p++){var f=e[p];var d;if(f.key){if(n.hasOwnProperty(f.key)){d=n[f.key];u.push(t[d])}else{d=p-l++;u.push(null)}}else{if(c<h){d=i[c++];u.push(t[d])}else{d=p-l++;u.push(null)}}}var v=c>=i.length?t.length:i[c];for(var m=0;m<t.length;m++){var g=t[m];if(g.key){if(!a.hasOwnProperty(g.key)){u.push(g)}}else if(m>=v){u.push(g)}}var y=u.slice();var _=0;var b=[];var x=[];var w;for(var S=0;S<t.length;){var M=t[S];w=y[_];while(w===null&&y.length){b.push(E(y,_,null));w=y[_]}if(!w||w.key!==M.key){if(M.key){if(w&&w.key){if(n[w.key]!==S+1){b.push(E(y,_,w.key));w=y[_];if(!w||w.key!==M.key){x.push({key:M.key,to:S})}else{_++}}else{x.push({key:M.key,to:S})}}else{x.push({key:M.key,to:S})}S++}else if(w&&w.key){b.push(E(y,_,w.key))}}else{_++;S++}}while(_<y.length){w=y[_];b.push(E(y,_,w&&w.key))}if(b.length===l&&!x.length){return{children:u,moves:null}}return{children:u,moves:{removes:b,inserts:x}}}function E(e,t,r){e.splice(t,1);return{from:t,key:r}}function C(e){var t={};var r=[];var n=e.length;for(var i=0;i<n;i++){var o=e[i];if(o.key){t[o.key]=i}else{r.push(i)}}return{keys:t,free:r}}function S(e,t){if(e){if(n(e)){e.push(t)}else{e=[e,t]}return e}else{return t}}},{"../vnode/handle-thunk":243,"../vnode/is-thunk":244,"../vnode/is-vnode":246,"../vnode/is-vtext":247,"../vnode/is-widget":248,"../vnode/vpatch":251,"./diff-props":253,"x-is-array":273}],255:[function(t,r,e){(function(e){"use strict";e(function(e){var t=e("./makePromise");var r=e("./Scheduler");var n=e("./env").asap;return t({scheduler:new r(n)})})})(typeof o==="function"&&o.amd?o:function(e){r.exports=e(t)})},{"./Scheduler":256,"./env":268,"./makePromise":270}],256:[function(e,t,r){(function(e){"use strict";e(function(){function e(e){this._async=e;this._running=false;this._queue=this;this._queueLen=0;this._afterQueue={};this._afterQueueLen=0;var t=this;this.drain=function(){t._drain()}}e.prototype.enqueue=function(e){this._queue[this._queueLen++]=e;this.run()};e.prototype.afterQueue=function(e){this._afterQueue[this._afterQueueLen++]=e;this.run()};e.prototype.run=function(){if(!this._running){this._running=true;this._async(this.drain)}};e.prototype._drain=function(){var e=0;for(;e<this._queueLen;++e){this._queue[e].run();this._queue[e]=void 0}this._queueLen=0;this._running=false;for(e=0;e<this._afterQueueLen;++e){this._afterQueue[e].run();this._afterQueue[e]=void 0}this._afterQueueLen=0};return e})})(typeof o==="function"&&o.amd?o:function(e){t.exports=e()})},{}],257:[function(e,t,r){(function(e){"use strict";e(function(){function t(e){Error.call(this);this.message=e;this.name=t.name;if(typeof Error.captureStackTrace==="function"){Error.captureStackTrace(this,t)}}t.prototype=Object.create(Error.prototype);t.prototype.constructor=t;return t})})(typeof o==="function"&&o.amd?o:function(e){t.exports=e()})},{}],258:[function(e,t,r){(function(e){"use strict";e(function(){e.tryCatchResolve=t;return e;function e(a,s){if(arguments.length<2){s=t}return e;function e(e,t,r){var n=a._defer();var i=r.length;var o=new Array(i);u({f:e,thisArg:t,args:r,params:o,i:i-1,call:s},n._handler);return n}function u(e,t){if(e.i<0){return s(e.f,e.thisArg,e.params,t)}var r=a._handler(e.args[e.i]);r.fold(n,e,void 0,t)}function n(e,t,r){e.params[e.i]=t;e.i-=1;u(e,r)}}function t(e,t,r,n){try{n.resolve(e.apply(t,r))}catch(e){n.reject(e)}}})})(typeof o==="function"&&o.amd?o:function(e){t.exports=e()})},{}],259:[function(t,r,e){(function(e){"use strict";e(function(e){var y=e("../state");var _=e("../apply");return function e(f){var i=_(f);var r=f.resolve;var n=f.all;var o=Array.prototype.reduce;var a=Array.prototype.reduceRight;var s=Array.prototype.slice;f.any=t;f.some=u;f.settle=p;f.map=c;f.filter=h;f.reduce=v;f.reduceRight=m;f.prototype.spread=function(t){return this.then(n).then(function(e){return t.apply(this,e)})};return f;function t(e){var t=f._defer();var r=t._handler;var n=e.length>>>0;var i=n;var o=[];for(var a,s,u=0;u<n;++u){s=e[u];if(s===void 0&&!(u in e)){--i;continue}a=f._handler(s);if(a.state()>0){r.become(a);f._visitRemaining(e,u,a);break}else{a.visit(r,c,h)}}if(i===0){r.reject(new RangeError("any(): array must not be empty"))}return t;function c(e){o=null;this.resolve(e)}function h(e){if(this.resolved){return}o.push(e);if(--i===0){this.reject(o)}}}function u(e,t){var r=f._defer();var n=r._handler;var i=[];var o=[];var a=e.length>>>0;var s=0;var u;var c,h;for(h=0;h<a;++h){c=e[h];if(c===void 0&&!(h in e)){continue}++s}t=Math.max(t,0);u=s-t+1;s=Math.min(t,s);if(t>s){n.reject(new RangeError("some(): array must contain at least "+t+" item(s), but had "+s))}else if(s===0){n.resolve(i)}for(h=0;h<a;++h){c=e[h];if(c===void 0&&!(h in e)){continue}f._handler(c).visit(n,l,p,n.notify)}return r;function l(e){if(this.resolved){return}i.push(e);if(--s===0){o=null;this.resolve(i)}}function p(e){if(this.resolved){return}o.push(e);if(--u===0){i=null;this.reject(o)}}}function c(e,t){return f._traverse(t,e)}function h(e,t){var r=s.call(e);return f._traverse(t,r).then(function(e){return l(r,e)})}function l(e,t){var r=t.length;var n=new Array(r);for(var i=0,o=0;i<r;++i){if(t[i]){n[o++]=f._handler(e[i]).value}}n.length=o;return n}function p(e){return n(e.map(d))}function d(e){var t;if(e instanceof f){t=e._handler.join()}if(t&&t.state()===0||!t){return r(e).then(y.fulfilled,y.rejected)}t._unreport();return y.inspect(t)}function v(e,t){return arguments.length>2?o.call(e,g(t),arguments[2]):o.call(e,g(t))}function m(e,t){return arguments.length>2?a.call(e,g(t),arguments[2]):a.call(e,g(t))}function g(n){return function(e,t,r){return i(n,void 0,[e,t,r])}}}})})(typeof o==="function"&&o.amd?o:function(e){r.exports=e(t)})},{"../apply":258,"../state":271}],260:[function(e,t,r){(function(e){"use strict";e(function(){return function e(t){var n=t.resolve;var i=t.reject;var r=t.prototype["catch"];t.prototype.done=function(e,t){this._handler.visit(this._handler.receiver,e,t)};t.prototype["catch"]=t.prototype.otherwise=function(e){if(arguments.length<2){return r.call(this,e)}if(typeof e!=="function"){return this.ensure(u)}return r.call(this,o(arguments[1],e))};function o(t,r){return function(e){return c(e,r)?t.call(this,e):i(e)}}t.prototype["finally"]=t.prototype.ensure=function(t){if(typeof t!=="function"){return this}return this.then(function(e){return a(t,this,l,e)},function(e){return a(t,this,i,e)})};function a(e,t,r,n){var i=e.call(t);return h(i)?s(i,r,n):r(n)}function s(e,t,r){return n(e).then(function(){return t(r)})}t.prototype["else"]=t.prototype.orElse=function(e){return this.then(void 0,function(){return e})};t.prototype["yield"]=function(e){return this.then(function(){return e})};t.prototype.tap=function(e){return this.then(e)["yield"](this)};return t};function u(){throw new TypeError("catch predicate must be a function")}function c(e,t){return r(t)?e instanceof t:t(e)}function r(e){return e===Error||e!=null&&e.prototype instanceof Error}function h(e){return(typeof e==="object"||typeof e==="function")&&e!==null}function l(e){return e}})})(typeof o==="function"&&o.amd?o:function(e){t.exports=e()})},{}],261:[function(e,t,r){(function(e){"use strict";e(function(){return function e(i){i.prototype.fold=function(n,e){var t=this._beget();this._handler.fold(function(e,t,r){i._handler(e).fold(function(e,t,r){r.resolve(n.call(this,t,e))},t,this,r)},e,t._handler.receiver,t._handler);return t};return i}})})(typeof o==="function"&&o.amd?o:function(e){t.exports=e()})},{}],262:[function(t,r,e){(function(e){"use strict";e(function(e){var r=e("../state").inspect;return function e(t){t.prototype.inspect=function(){return r(t._handler(this))};return t}})})(typeof o==="function"&&o.amd?o:function(e){r.exports=e(t)})},{"../state":271}],263:[function(e,t,r){(function(e){"use strict";e(function(){return function e(t){var a=t.resolve;t.iterate=r;t.unfold=s;return t;function r(t,e,r,n){return s(function(e){return[e,t(e)]},e,r,n)}function s(r,n,i,e){return a(e).then(function(t){return a(n(t)).then(function(e){return e?t:a(r(t)).spread(o)})});function o(e,t){return a(i(e)).then(function(){return s(r,n,i,t)})}}}})})(typeof o==="function"&&o.amd?o:function(e){t.exports=e()})},{}],264:[function(e,t,r){(function(e){"use strict";e(function(){return function e(t){t.prototype.progress=function(e){return this.then(void 0,void 0,e)};return t}})})(typeof o==="function"&&o.amd?o:function(e){t.exports=e()})},{}],265:[function(t,r,e){(function(e){"use strict";e(function(e){var a=e("../env");var i=e("../TimeoutError");function s(e,t,r,n){return a.setTimer(function(){e(r,n,t)},t)}return function e(t){t.prototype.delay=function(e){var t=this._beget();this._handler.fold(r,e,void 0,t._handler);return t};function r(e,t,r){s(n,e,t,r)}function n(e,t){t.resolve(e)}t.prototype.timeout=function(e,t){var r=this._beget();var n=r._handler;var i=s(o,e,t,r._handler);this._handler.visit(n,function e(t){a.clearTimer(i);this.resolve(t)},function e(t){a.clearTimer(i);this.reject(t)},n.notify);return r};function o(e,t,r){var n=typeof e==="undefined"?new i("timed out after "+r+"ms"):e;t.reject(n)}return t}})})(typeof o==="function"&&o.amd?o:function(e){r.exports=e(t)})},{"../TimeoutError":257,"../env":268}],266:[function(t,r,e){(function(e){"use strict";e(function(e){var p=e("../env").setTimer;var f=e("../format");return function e(t){var r=v;var n=v;var i;if(typeof console!=="undefined"){i=console;r=typeof i.error!=="undefined"?function(e){i.error(e)}:function(e){i.log(e)};n=typeof i.info!=="undefined"?function(e){i.info(e)}:function(e){i.log(e)}}t.onPotentiallyUnhandledRejection=function(e){h(u,e)};t.onPotentiallyUnhandledRejectionHandled=function(e){h(c,e)};t.onFatalRejection=function(e){h(d,e.value)};var o=[];var a=[];var s=null;function u(e){if(!e.handled){a.push(e);r("Potentially unhandled rejection ["+e.id+"] "+f.formatError(e.value))}}function c(e){var t=a.indexOf(e);if(t>=0){a.splice(t,1);n("Handled previous rejection ["+e.id+"] "+f.formatObject(e.value))}}function h(e,t){o.push(e,t);if(s===null){s=p(l,0)}}function l(){s=null;while(o.length>0){o.shift()(o.shift())}}return t};function d(e){throw e}function v(){}})})(typeof o==="function"&&o.amd?o:function(e){r.exports=e(t)})},{"../env":268,"../format":269}],267:[function(e,t,r){(function(e){"use strict";e(function(){return function e(t){t.prototype["with"]=t.prototype.withThis=function(e){var t=this._beget();var r=t._handler;r.receiver=e;this._handler.chain(r,e);return t};return t}})})(typeof o==="function"&&o.amd?o:function(e){t.exports=e()})},{}],268:[function(t,r,e){(function(l){(function(e){"use strict";e(function(e){var t;var r=typeof setTimeout!=="undefined"&&setTimeout;var n=function(e,t){return setTimeout(e,t)};var i=function(e){return clearTimeout(e)};var o=function(e){return r(e,0)};if(u()){o=function(e){return l.nextTick(e)}}else if(t=c()){o=h(t)}else if(!r){var a=e;var s=a("vertx");n=function(e,t){return s.setTimer(t,e)};i=s.cancelTimer;o=s.runOnLoop||s.runOnContext}return{setTimer:n,clearTimer:i,asap:o};function u(){return typeof l!=="undefined"&&Object.prototype.toString.call(l)==="[object process]"}function c(){return typeof MutationObserver!=="undefined"&&MutationObserver||typeof WebKitMutationObserver!=="undefined"&&WebKitMutationObserver}function h(e){var t;var r=document.createTextNode("");var n=new e(i);n.observe(r,{characterData:true});function i(){var e=t;t=void 0;e()}var o=0;return function(e){t=e;r.data=o^=1}}})})(typeof o==="function"&&o.amd?o:function(e){r.exports=e(t)})}).call(this,t("_process"))},{_process:6}],269:[function(e,t,r){(function(e){"use strict";e(function(){return{formatError:e,formatObject:r,tryStringify:n};function e(e){var t=typeof e==="object"&&e!==null&&(e.stack||e.message)?e.stack||e.message:r(e);return e instanceof Error?t:t+" (WARNING: non-Error used)"}function r(e){var t=String(e);if(t==="[object Object]"&&typeof JSON!=="undefined"){t=n(e,t)}return t}function n(e,t){try{return JSON.stringify(e)}catch(e){return t}}})})(typeof o==="function"&&o.amd?o:function(e){t.exports=e()})},{}],270:[function(e,t,r){(function(ne){(function(e){"use strict";e(function(){return function e(t){var r=t.scheduler;var n=re();var i=Object.create||function(e){function t(){}t.prototype=e;return new t};function l(e,t){this._handler=e===S?t:o(e)}function o(e){var t=new C;try{e(r,n,i)}catch(e){n(e)}return t;function r(e){t.resolve(e)}function n(e){t.reject(e)}function i(e){t.notify(e)}}l.resolve=a;l.reject=s;l.never=u;l._defer=c;l._handler=b;function a(e){return U(e)?e:new l(S,new T(b(e)))}function s(e){return new l(S,new T(new j(e)))}function u(){return N}function c(){return new l(S,new C)}l.prototype.then=function(e,t,r){var n=this._handler;var i=n.join().state();if(typeof e!=="function"&&i>0||typeof t!=="function"&&i<0){return new this.constructor(S,n)}var o=this._beget();var a=o._handler;n.chain(a,n.receiver,e,t,r);return o};l.prototype["catch"]=function(e){return this.then(void 0,e)};l.prototype._beget=function(){return h(this._handler,this.constructor)};function h(e,t){var r=new C(e.receiver,e.join().context);return new t(S,r)}l.all=p;l.race=y;l._traverse=f;function p(e){return d(J,null,e)}function f(e,t){return d(W,e,t)}function d(n,i,o){var e=typeof i==="function"?c:h;var t=new C;var a=o.length>>>0;var s=new Array(a);for(var r=0,u;r<o.length&&!t.resolved;++r){u=o[r];if(u===void 0&&!(r in o)){--a;continue}v(o,e,r,u,t)}if(a===0){t.become(new P(s))}return new l(S,t);function c(e,t,r){if(!r.resolved){v(o,h,e,n(i,t,e),r)}}function h(e,t,r){s[e]=t;if(--a===0){r.become(new P(s))}}}function v(e,t,r,n,i){if(G(n)){var o=x(n);var a=o.state();if(a===0){o.fold(t,r,void 0,i)}else if(a>0){t(r,o.value,i)}else{i.become(o);m(e,r+1,o)}}else{t(r,n,i)}}l._visitRemaining=m;function m(e,t,r){for(var n=t;n<e.length;++n){g(b(e[n]),r)}}function g(e,t){if(e===t){return}var r=e.state();if(r===0){e.visit(e,void 0,e._unreport)}else if(r<0){e._unreport()}}function y(e){if(typeof e!=="object"||e===null){return s(new TypeError("non-iterable passed to race()"))}return e.length===0?u():e.length===1?a(e[0]):_(e)}function _(e){var t=new C;var r,n,i;for(r=0;r<e.length;++r){n=e[r];if(n===void 0&&!(r in e)){continue}i=b(n);if(i.state()!==0){t.become(i);m(e,r+1,i);break}else{i.visit(t,t.resolve,t.reject)}}return new l(S,t)}function b(e){if(U(e)){return e._handler.join()}return G(e)?w(e):new P(e)}function x(e){return U(e)?e._handler.join():w(e)}function w(e){try{var t=e.then;return typeof t==="function"?new O(t,e):new P(e)}catch(e){return new j(e)}}function S(){}S.prototype.when=S.prototype.become=S.prototype.notify=S.prototype.fail=S.prototype._unreport=S.prototype._report=Q;S.prototype._state=0;S.prototype.state=function(){return this._state};S.prototype.join=function(){var e=this;while(e.handler!==void 0){e=e.handler}return e};S.prototype.chain=function(e,t,r,n,i){this.when({resolver:e,receiver:t,fulfilled:r,rejected:n,progress:i})};S.prototype.visit=function(e,t,r,n){this.chain(E,e,t,r,n)};S.prototype.fold=function(e,t,r,n){this.when(new z(e,t,r,n))};function M(){}Z(S,M);M.prototype.become=function(e){e.fail()};var E=new M;function C(e,t){l.createContext(this,t);this.consumers=void 0;this.receiver=e;this.handler=void 0;this.resolved=false}Z(S,C);C.prototype._state=0;C.prototype.resolve=function(e){this.become(b(e))};C.prototype.reject=function(e){if(this.resolved){return}this.become(new j(e))};C.prototype.join=function(){if(!this.resolved){return this}var e=this;while(e.handler!==void 0){e=e.handler;if(e===this){return this.handler=k()}}return e};C.prototype.run=function(){var e=this.consumers;var t=this.handler;this.handler=this.handler.join();this.consumers=void 0;for(var r=0;r<e.length;++r){t.when(e[r])}};C.prototype.become=function(e){if(this.resolved){return}this.resolved=true;this.handler=e;if(this.consumers!==void 0){r.enqueue(this)}if(this.context!==void 0){e._report(this.context)}};C.prototype.when=function(e){if(this.resolved){r.enqueue(new D(e,this.handler))}else{if(this.consumers===void 0){this.consumers=[e]}else{this.consumers.push(e)}}};C.prototype.notify=function(e){if(!this.resolved){r.enqueue(new B(e,this))}};C.prototype.fail=function(e){var t=typeof e==="undefined"?this.context:e;this.resolved&&this.handler.join().fail(t)};C.prototype._report=function(e){this.resolved&&this.handler.join()._report(e)};C.prototype._unreport=function(){this.resolved&&this.handler.join()._unreport()};function T(e){this.handler=e}Z(S,T);T.prototype.when=function(e){r.enqueue(new D(e,this))};T.prototype._report=function(e){this.join()._report(e)};T.prototype._unreport=function(){this.join()._unreport()};function O(e,t){C.call(this);r.enqueue(new F(e,t,this))}Z(C,O);function P(e){l.createContext(this);this.value=e}Z(S,P);P.prototype._state=1;P.prototype.fold=function(e,t,r,n){H(e,t,this,r,n)};P.prototype.when=function(e){V(e.fulfilled,this,e.receiver,e.resolver)};var A=0;function j(e){l.createContext(this);this.id=++A;this.value=e;this.handled=false;this.reported=false;this._report()}Z(S,j);j.prototype._state=-1;j.prototype.fold=function(e,t,r,n){n.become(this)};j.prototype.when=function(e){if(typeof e.rejected==="function"){this._unreport()}V(e.rejected,this,e.receiver,e.resolver)};j.prototype._report=function(e){r.afterQueue(new R(this,e))};j.prototype._unreport=function(){if(this.handled){return}this.handled=true;r.afterQueue(new L(this))};j.prototype.fail=function(e){this.reported=true;n("unhandledRejection",this);l.onFatalRejection(this,e===void 0?this.context:e)};function R(e,t){this.rejection=e;this.context=t}R.prototype.run=function(){if(!this.rejection.handled&&!this.rejection.reported){this.rejection.reported=true;n("unhandledRejection",this.rejection)||l.onPotentiallyUnhandledRejection(this.rejection,this.context)}};function L(e){this.rejection=e}L.prototype.run=function(){if(this.rejection.reported){n("rejectionHandled",this.rejection)||l.onPotentiallyUnhandledRejectionHandled(this.rejection)}};l.createContext=l.enterContext=l.exitContext=l.onPotentiallyUnhandledRejection=l.onPotentiallyUnhandledRejectionHandled=l.onFatalRejection=Q;var I=new S;var N=new l(S,I);function k(){return new j(new TypeError("Promise cycle"))}function D(e,t){this.continuation=e;this.handler=t}D.prototype.run=function(){this.handler.join().when(this.continuation)};function B(e,t){this.handler=t;this.value=e}B.prototype.run=function(){var e=this.handler.consumers;if(e===void 0){return}for(var t,r=0;r<e.length;++r){t=e[r];q(t.progress,this.value,this.handler,t.receiver,t.resolver)}};function F(e,t,r){this._then=e;this.thenable=t;this.resolver=r}F.prototype.run=function(){var t=this.resolver;$(this._then,this.thenable,e,r,n);function e(e){t.resolve(e)}function r(e){t.reject(e)}function n(e){t.notify(e)}};function $(e,t,r,n,i){try{e.call(t,r,n,i)}catch(e){n(e)}}function z(e,t,r,n){this.f=e;this.z=t;this.c=r;this.to=n;this.resolver=E;this.receiver=this}z.prototype.fulfilled=function(e){this.f.call(this.c,this.z,e,this.to)};z.prototype.rejected=function(e){this.to.reject(e)};z.prototype.progress=function(e){this.to.notify(e)};function U(e){return e instanceof l}function G(e){return(typeof e==="object"||typeof e==="function")&&e!==null}function V(e,t,r,n){if(typeof e!=="function"){return n.become(t)}l.enterContext(t);X(e,t.value,r,n);l.exitContext()}function H(e,t,r,n,i){if(typeof e!=="function"){return i.become(r)}l.enterContext(r);Y(e,t,r.value,n,i);l.exitContext()}function q(e,t,r,n,i){if(typeof e!=="function"){return i.notify(t)}l.enterContext(r);K(e,t,n,i);l.exitContext()}function W(e,t,r){try{return e(t,r)}catch(e){return s(e)}}function X(e,t,r,n){try{n.become(b(e.call(r,t)))}catch(e){n.become(new j(e))}}function Y(e,t,r,n,i){try{e.call(n,t,r,i)}catch(e){i.become(new j(e))}}function K(e,t,r,n){try{n.notify(e.call(r,t))}catch(e){n.notify(e)}}function Z(e,t){t.prototype=i(e.prototype);t.prototype.constructor=t}function J(e,t){return t}function Q(){}function ee(){if(typeof CustomEvent==="function"){try{var e=new CustomEvent("unhandledRejection");return e instanceof CustomEvent}catch(e){}}return false}function te(){if(typeof document!=="undefined"&&typeof document.createEvent==="function"){try{var e=document.createEvent("CustomEvent");e.initCustomEvent("eventType",false,true,{});return true}catch(e){}}return false}function re(){if(typeof ne!=="undefined"&&ne!==null&&typeof ne.emit==="function"){return function(e,t){return e==="unhandledRejection"?ne.emit(e,t.value,t):ne.emit(e,t)}}else if(typeof self!=="undefined"&&ee()){return function(n,i){return function(e,t){var r=new i(e,{detail:{reason:t.value,key:t},bubbles:false,cancelable:true});return!n.dispatchEvent(r)}}(self,CustomEvent)}else if(typeof self!=="undefined"&&te()){return function(n,i){return function(e,t){var r=i.createEvent("CustomEvent");r.initCustomEvent(e,false,true,{reason:t.value,key:t});return!n.dispatchEvent(r)}}(self,document)}return Q}return l}})})(typeof o==="function"&&o.amd?o:function(e){t.exports=e()})}).call(this,e("_process"))},{_process:6}],271:[function(e,t,r){(function(e){"use strict";e(function(){return{pending:r,fulfilled:i,rejected:n,inspect:e};function r(){return{state:"pending"}}function n(e){return{state:"rejected",reason:e}}function i(e){return{state:"fulfilled",value:e}}function e(e){var t=e.state();return t===0?r():t>0?i(e.value):n(e.value)}})})(typeof o==="function"&&o.amd?o:function(e){t.exports=e()})},{}],272:[function(t,r,e){(function(e){"use strict";e(function(e){var t=e("./lib/decorators/timed");var r=e("./lib/decorators/array");var n=e("./lib/decorators/flow");var i=e("./lib/decorators/fold");var o=e("./lib/decorators/inspect");var a=e("./lib/decorators/iterate");var s=e("./lib/decorators/progress");var u=e("./lib/decorators/with");var c=e("./lib/decorators/unhandledRejection");var h=e("./lib/TimeoutError");var l=[r,n,i,a,s,o,u,t,c].reduce(function(e,t){return t(e)},e("./lib/Promise"));var p=e("./lib/apply")(l);f.promise=d;f.resolve=l.resolve;f.reject=l.reject;f.lift=v;f["try"]=m;f.attempt=m;f.iterate=l.iterate;f.unfold=l.unfold;f.join=b;f.all=x;f.settle=w;f.any=v(l.any);f.some=v(l.some);f.race=v(l.race);f.map=S;f.filter=M;f.reduce=v(l.reduce);f.reduceRight=v(l.reduceRight);f.isPromiseLike=_;f.Promise=l;f.defer=g;f.TimeoutError=h;function f(e,t,r,n){var i=l.resolve(e);if(arguments.length<2){return i}return i.then(t,r,n)}function d(e){return new l(e)}function v(n){return function(){for(var e=0,t=arguments.length,r=new Array(t);e<t;++e){r[e]=arguments[e]}return p(n,this,r)}}function m(e){for(var t=0,r=arguments.length-1,n=new Array(r);t<r;++t){n[t]=arguments[t+1]}return p(e,this,n)}function g(){return new y}function y(){var t=l._defer();function e(e){t._handler.resolve(e)}function r(e){t._handler.reject(e)}function n(e){t._handler.notify(e)}this.promise=t;this.resolve=e;this.reject=r;this.notify=n;this.resolver={resolve:e,reject:r,notify:n}}function _(e){return e&&typeof e.then==="function"}function b(){return l.all(arguments)}function x(e){return f(e,l.all)}function w(e){return f(e,l.settle)}function S(e,t){return f(e,function(e){return l.map(e,t)})}function M(e,t){return f(e,function(e){return l.filter(e,t)})}return f})})(typeof o==="function"&&o.amd?o:function(e){r.exports=e(t)})},{"./lib/Promise":255,"./lib/TimeoutError":257,"./lib/apply":258,"./lib/decorators/array":259,"./lib/decorators/flow":260,"./lib/decorators/fold":261,"./lib/decorators/inspect":262,"./lib/decorators/iterate":263,"./lib/decorators/progress":264,"./lib/decorators/timed":265,"./lib/decorators/unhandledRejection":266,"./lib/decorators/with":267}],273:[function(e,t,r){var n=Array.isArray;var i=Object.prototype.toString;t.exports=n||o;function o(e){return i.call(e)==="[object Array]"}},{}],274:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("./api/APIv3");r.APIv3=n.APIv3;var i=e("./api/ModelCreator");r.ModelCreator=i.ModelCreator},{"./api/APIv3":287,"./api/ModelCreator":288}],275:[function(e,t,r){"use strict";function n(e){for(var t in e)if(!r.hasOwnProperty(t))r[t]=e[t]}Object.defineProperty(r,"__esModule",{value:true});var i=e("./component/Component");r.Component=i.Component;var o=e("./component/ComponentService");r.ComponentService=o.ComponentService;var a=e("./component/utils/HandlerBase");r.HandlerBase=a.HandlerBase;var s=e("./component/utils/MeshFactory");r.MeshFactory=s.MeshFactory;var u=e("./component/utils/MeshScene");r.MeshScene=u.MeshScene;var c=e("./component/utils/MouseOperator");r.MouseOperator=c.MouseOperator;var h=e("./component/AttributionComponent");r.AttributionComponent=h.AttributionComponent;var l=e("./component/BackgroundComponent");r.BackgroundComponent=l.BackgroundComponent;var p=e("./component/BearingComponent");r.BearingComponent=p.BearingComponent;var f=e("./component/CacheComponent");r.CacheComponent=f.CacheComponent;var d=e("./component/CoverComponent");r.CoverComponent=d.CoverComponent;var v=e("./component/DebugComponent");r.DebugComponent=v.DebugComponent;var m=e("./component/direction/DirectionComponent");r.DirectionComponent=m.DirectionComponent;var g=e("./component/direction/DirectionDOMCalculator");r.DirectionDOMCalculator=g.DirectionDOMCalculator;var y=e("./component/direction/DirectionDOMRenderer");r.DirectionDOMRenderer=y.DirectionDOMRenderer;var _=e("./component/ImageComponent");r.ImageComponent=_.ImageComponent;var b=e("./component/keyboard/KeyboardComponent");r.KeyboardComponent=b.KeyboardComponent;var x=e("./component/keyboard/KeyPlayHandler");r.KeyPlayHandler=x.KeyPlayHandler;var w=e("./component/keyboard/KeyZoomHandler");r.KeyZoomHandler=w.KeyZoomHandler;var S=e("./component/keyboard/KeySequenceNavigationHandler");r.KeySequenceNavigationHandler=S.KeySequenceNavigationHandler;var M=e("./component/keyboard/KeySpatialNavigationHandler");r.KeySpatialNavigationHandler=M.KeySpatialNavigationHandler;var E=e("./component/LoadingComponent");r.LoadingComponent=E.LoadingComponent;var C=e("./component/marker/marker/Marker");r.Marker=C.Marker;var T=e("./component/marker/MarkerComponent");r.MarkerComponent=T.MarkerComponent;var O=e("./component/marker/MarkerScene");r.MarkerScene=O.MarkerScene;var P=e("./component/marker/MarkerSet");r.MarkerSet=P.MarkerSet;var A=e("./component/mouse/MouseComponent");r.MouseComponent=A.MouseComponent;var j=e("./component/mouse/BounceHandler");r.BounceHandler=j.BounceHandler;var R=e("./component/mouse/DragPanHandler");r.DragPanHandler=R.DragPanHandler;var L=e("./component/mouse/DoubleClickZoomHandler");r.DoubleClickZoomHandler=L.DoubleClickZoomHandler;var I=e("./component/mouse/EarthControlHandler");r.EarthControlHandler=I.EarthControlHandler;var N=e("./component/mouse/ScrollZoomHandler");r.ScrollZoomHandler=N.ScrollZoomHandler;var k=e("./component/mouse/TouchZoomHandler");r.TouchZoomHandler=k.TouchZoomHandler;var D=e("./component/mouse/ImageBoundary");r.ImageBoundary=D;var B=e("./component/popup/popup/Popup");r.Popup=B.Popup;var F=e("./component/popup/PopupComponent");r.PopupComponent=F.PopupComponent;var $=e("./component/NavigationComponent");r.NavigationComponent=$.NavigationComponent;var z=e("./component/RouteComponent");r.RouteComponent=z.RouteComponent;var U=e("./component/sequence/SequenceComponent");r.SequenceComponent=U.SequenceComponent;var G=e("./component/sequence/SequenceDOMRenderer");r.SequenceDOMRenderer=G.SequenceDOMRenderer;var V=e("./component/sequence/SequenceMode");r.SequenceMode=V.SequenceMode;var H=e("./component/spatialdata/SpatialDataCache");r.SpatialDataCache=H.SpatialDataCache;var q=e("./component/spatialdata/SpatialDataComponent");r.SpatialDataComponent=q.SpatialDataComponent;var W=e("./component/spatialdata/SpatialDataScene");r.SpatialDataScene=W.SpatialDataScene;var X=e("./component/imageplane/ImagePlaneComponent");r.ImagePlaneComponent=X.ImagePlaneComponent;var Y=e("./component/imageplane/ImagePlaneGLRenderer");r.ImagePlaneGLRenderer=Y.ImagePlaneGLRenderer;var K=e("./component/shaders/Shaders");r.Shaders=K.Shaders;var Z=e("./component/marker/marker/SimpleMarker");r.SimpleMarker=Z.SimpleMarker;var J=e("./component/marker/marker/CircleMarker");r.CircleMarker=J.CircleMarker;var Q=e("./component/slider/SliderComponent");r.SliderComponent=Q.SliderComponent;var ee=e("./component/slider/SliderDOMRenderer");r.SliderDOMRenderer=ee.SliderDOMRenderer;var te=e("./component/slider/SliderGLRenderer");r.SliderGLRenderer=te.SliderGLRenderer;var re=e("./component/StatsComponent");r.StatsComponent=re.StatsComponent;var ne=e("./component/tag/handlers/TagHandlerBase");r.TagHandlerBase=ne.TagHandlerBase;var ie=e("./component/tag/handlers/CreateHandlerBase");r.CreateHandlerBase=ie.CreateHandlerBase;var oe=e("./component/tag/handlers/CreatePointHandler");r.CreatePointHandler=oe.CreatePointHandler;var ae=e("./component/tag/handlers/CreateVertexHandler");r.CreateVertexHandler=ae.CreateVertexHandler;var se=e("./component/tag/handlers/CreatePolygonHandler");r.CreatePolygonHandler=se.CreatePolygonHandler;var ue=e("./component/tag/handlers/CreateRectHandler");r.CreateRectHandler=ue.CreateRectHandler;var ce=e("./component/tag/handlers/CreateRectDragHandler");r.CreateRectDragHandler=ce.CreateRectDragHandler;var he=e("./component/tag/handlers/EditVertexHandler");r.EditVertexHandler=he.EditVertexHandler;var le=e("./component/tag/tag/Tag");r.Tag=le.Tag;var pe=e("./component/tag/tag/OutlineTag");r.OutlineTag=pe.OutlineTag;var fe=e("./component/tag/tag/RenderTag");r.RenderTag=fe.RenderTag;var de=e("./component/tag/tag/OutlineRenderTag");r.OutlineRenderTag=de.OutlineRenderTag;var ve=e("./component/tag/tag/OutlineCreateTag");r.OutlineCreateTag=ve.OutlineCreateTag;var me=e("./component/tag/tag/SpotTag");r.SpotTag=me.SpotTag;var ge=e("./component/tag/tag/SpotRenderTag");r.SpotRenderTag=ge.SpotRenderTag;var ye=e("./component/tag/tag/TagDomain");r.TagDomain=ye.TagDomain;var _e=e("./component/tag/TagComponent");r.TagComponent=_e.TagComponent;var be=e("./component/tag/TagCreator");r.TagCreator=be.TagCreator;var xe=e("./component/tag/TagDOMRenderer");r.TagDOMRenderer=xe.TagDOMRenderer;var we=e("./component/tag/TagMode");r.TagMode=we.TagMode;var Se=e("./component/tag/TagOperation");r.TagOperation=Se.TagOperation;var Me=e("./component/tag/TagScene");r.TagScene=Me.TagScene;var Ee=e("./component/tag/TagSet");r.TagSet=Ee.TagSet;var Ce=e("./component/tag/geometry/Geometry");r.Geometry=Ce.Geometry;var Te=e("./component/tag/geometry/VertexGeometry");r.VertexGeometry=Te.VertexGeometry;var Oe=e("./component/tag/geometry/RectGeometry");r.RectGeometry=Oe.RectGeometry;var Pe=e("./component/tag/geometry/PointGeometry");r.PointGeometry=Pe.PointGeometry;var Ae=e("./component/tag/geometry/PolygonGeometry");r.PolygonGeometry=Ae.PolygonGeometry;var je=e("./component/tag/error/GeometryTagError");r.GeometryTagError=je.GeometryTagError;var Re=e("./component/zoom/ZoomComponent");r.ZoomComponent=Re.ZoomComponent;n(e("./component/interfaces/interfaces"))},{"./component/AttributionComponent":289,"./component/BackgroundComponent":290,"./component/BearingComponent":291,"./component/CacheComponent":292,"./component/Component":293,"./component/ComponentService":294,"./component/CoverComponent":295,"./component/DebugComponent":296,"./component/ImageComponent":297,"./component/LoadingComponent":298,"./component/NavigationComponent":299,"./component/RouteComponent":300,"./component/StatsComponent":301,"./component/direction/DirectionComponent":302,"./component/direction/DirectionDOMCalculator":303,"./component/direction/DirectionDOMRenderer":304,"./component/imageplane/ImagePlaneComponent":305,"./component/imageplane/ImagePlaneGLRenderer":306,"./component/interfaces/interfaces":309,"./component/keyboard/KeyPlayHandler":310,"./component/keyboard/KeySequenceNavigationHandler":311,"./component/keyboard/KeySpatialNavigationHandler":312,"./component/keyboard/KeyZoomHandler":313,"./component/keyboard/KeyboardComponent":314,"./component/marker/MarkerComponent":316,"./component/marker/MarkerScene":317,"./component/marker/MarkerSet":318,"./component/marker/marker/CircleMarker":319,"./component/marker/marker/Marker":320,"./component/marker/marker/SimpleMarker":321,"./component/mouse/BounceHandler":322,"./component/mouse/DoubleClickZoomHandler":323,"./component/mouse/DragPanHandler":324,"./component/mouse/EarthControlHandler":325,"./component/mouse/ImageBoundary":326,"./component/mouse/MouseComponent":327,"./component/mouse/ScrollZoomHandler":328,"./component/mouse/TouchZoomHandler":329,"./component/popup/PopupComponent":331,"./component/popup/popup/Popup":332,"./component/sequence/SequenceComponent":333,"./component/sequence/SequenceDOMRenderer":334,"./component/sequence/SequenceMode":335,"./component/shaders/Shaders":336,"./component/slider/SliderComponent":337,"./component/slider/SliderDOMRenderer":338,"./component/slider/SliderGLRenderer":339,"./component/spatialdata/SpatialDataCache":340,"./component/spatialdata/SpatialDataComponent":341,"./component/spatialdata/SpatialDataScene":342,"./component/tag/TagComponent":344,"./component/tag/TagCreator":345,"./component/tag/TagDOMRenderer":346,"./component/tag/TagMode":347,"./component/tag/TagOperation":348,"./component/tag/TagScene":349,"./component/tag/TagSet":350,"./component/tag/error/GeometryTagError":351,"./component/tag/geometry/Geometry":352,"./component/tag/geometry/PointGeometry":353,"./component/tag/geometry/PolygonGeometry":354,"./component/tag/geometry/RectGeometry":355,"./component/tag/geometry/VertexGeometry":356,"./component/tag/handlers/CreateHandlerBase":357,"./component/tag/handlers/CreatePointHandler":358,"./component/tag/handlers/CreatePolygonHandler":359,"./component/tag/handlers/CreateRectDragHandler":360,"./component/tag/handlers/CreateRectHandler":361,"./component/tag/handlers/CreateVertexHandler":362,"./component/tag/handlers/EditVertexHandler":363,"./component/tag/handlers/TagHandlerBase":364,"./component/tag/tag/OutlineCreateTag":365,"./component/tag/tag/OutlineRenderTag":366,"./component/tag/tag/OutlineTag":367,"./component/tag/tag/RenderTag":368,"./component/tag/tag/SpotRenderTag":369,"./component/tag/tag/SpotTag":370,"./component/tag/tag/Tag":371,"./component/tag/tag/TagDomain":372,"./component/utils/HandlerBase":373,"./component/utils/MeshFactory":374,"./component/utils/MeshScene":375,"./component/utils/MouseOperator":376,"./component/zoom/ZoomComponent":377}],276:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("./graph/edge/EdgeDirection");r.EdgeDirection=n.EdgeDirection;var i=e("./graph/edge/EdgeCalculatorSettings");r.EdgeCalculatorSettings=i.EdgeCalculatorSettings;var o=e("./graph/edge/EdgeCalculatorDirections");r.EdgeCalculatorDirections=o.EdgeCalculatorDirections;var a=e("./graph/edge/EdgeCalculatorCoefficients");r.EdgeCalculatorCoefficients=a.EdgeCalculatorCoefficients;var s=e("./graph/edge/EdgeCalculator");r.EdgeCalculator=s.EdgeCalculator},{"./graph/edge/EdgeCalculator":399,"./graph/edge/EdgeCalculatorCoefficients":400,"./graph/edge/EdgeCalculatorDirections":401,"./graph/edge/EdgeCalculatorSettings":402,"./graph/edge/EdgeDirection":403}],277:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("./error/AbortMapillaryError");r.AbortMapillaryError=n.AbortMapillaryError;var i=e("./error/ArgumentMapillaryError");r.ArgumentMapillaryError=i.ArgumentMapillaryError;var o=e("./error/GraphMapillaryError");r.GraphMapillaryError=o.GraphMapillaryError;var a=e("./error/MapillaryError");r.MapillaryError=a.MapillaryError},{"./error/AbortMapillaryError":378,"./error/ArgumentMapillaryError":379,"./error/GraphMapillaryError":380,"./error/MapillaryError":381}],278:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("./geo/Camera");r.Camera=n.Camera;var i=e("./geo/GeoCoords");r.GeoCoords=i.GeoCoords;var o=e("./geo/ViewportCoords");r.ViewportCoords=o.ViewportCoords;var a=e("./geo/Spatial");r.Spatial=a.Spatial;var s=e("./geo/Transform");r.Transform=s.Transform;var u=e("./geo/Geo");r.Geo=u;var c=e("./geo/Lines");r.Lines=c},{"./geo/Camera":382,"./geo/Geo":383,"./geo/GeoCoords":384,"./geo/Lines":385,"./geo/Spatial":386,"./geo/Transform":387,"./geo/ViewportCoords":388}],279:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("./graph/FilterCreator");r.FilterCreator=n.FilterCreator;var i=e("./graph/Graph");r.Graph=i.Graph;var o=e("./graph/GraphCalculator");r.GraphCalculator=o.GraphCalculator;var a=e("./graph/GraphMode");r.GraphMode=a.GraphMode;var s=e("./graph/GraphService");r.GraphService=s.GraphService;var u=e("./graph/ImageLoadingService");r.ImageLoadingService=u.ImageLoadingService;var c=e("./graph/MeshReader");r.MeshReader=c.MeshReader;var h=e("./graph/Node");r.Node=h.Node;var l=e("./graph/NodeCache");r.NodeCache=l.NodeCache;var p=e("./graph/Sequence");r.Sequence=p.Sequence},{"./graph/FilterCreator":389,"./graph/Graph":390,"./graph/GraphCalculator":391,"./graph/GraphMode":392,"./graph/GraphService":393,"./graph/ImageLoadingService":394,"./graph/MeshReader":395,"./graph/Node":396,"./graph/NodeCache":397,"./graph/Sequence":398}],280:[function(e,t,r){"use strict";function n(e){for(var t in e)if(!r.hasOwnProperty(t))r[t]=e[t]}Object.defineProperty(r,"__esModule",{value:true});n(e("./Support"));var i=e("./Edge");r.EdgeDirection=i.EdgeDirection;var o=e("./Error");r.AbortMapillaryError=o.AbortMapillaryError;var a=e("./Render");r.RenderMode=a.RenderMode;var s=e("./State");r.TransitionMode=s.TransitionMode;var u=e("./Viewer");r.Alignment=u.Alignment;r.ImageSize=u.ImageSize;r.Viewer=u.Viewer;var c=e("./Component");r.SliderMode=c.SliderMode;var h=e("./component/tag/Tag");r.TagComponent=h;var l=e("./component/marker/Marker");r.MarkerComponent=l;var p=e("./component/popup/Popup");r.PopupComponent=p},{"./Component":275,"./Edge":276,"./Error":277,"./Render":281,"./State":282,"./Support":283,"./Viewer":286,"./component/marker/Marker":315,"./component/popup/Popup":330,"./component/tag/Tag":343}],281:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("./render/DOMRenderer");r.DOMRenderer=n.DOMRenderer;var i=e("./render/GLRenderer");r.GLRenderer=i.GLRenderer;var o=e("./render/GLRenderStage");r.GLRenderStage=o.GLRenderStage;var a=e("./render/RenderCamera");r.RenderCamera=a.RenderCamera;var s=e("./render/RenderMode");r.RenderMode=s.RenderMode;var u=e("./render/RenderService");r.RenderService=u.RenderService},{"./render/DOMRenderer":404,"./render/GLRenderStage":405,"./render/GLRenderer":406,"./render/RenderCamera":407,"./render/RenderMode":408,"./render/RenderService":409}],282:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("./state/FrameGenerator");r.FrameGenerator=n.FrameGenerator;var i=e("./state/RotationDelta");r.RotationDelta=i.RotationDelta;var o=e("./state/State");r.State=o.State;var a=e("./state/states/StateBase");r.StateBase=a.StateBase;var s=e("./state/StateContext");r.StateContext=s.StateContext;var u=e("./state/StateService");r.StateService=u.StateService;var c=e("./state/TransitionMode");r.TransitionMode=c.TransitionMode;var h=e("./state/states/EarthState");r.EarthState=h.EarthState;var l=e("./state/states/InteractiveStateBase");r.InteractiveStateBase=l.InteractiveStateBase;var p=e("./state/states/InteractiveWaitingState");r.InteractiveWaitingState=p.InteractiveWaitingState;var f=e("./state/states/TraversingState");r.TraversingState=f.TraversingState;var d=e("./state/states/WaitingState");r.WaitingState=d.WaitingState},{"./state/FrameGenerator":410,"./state/RotationDelta":411,"./state/State":412,"./state/StateContext":413,"./state/StateService":414,"./state/TransitionMode":415,"./state/states/EarthState":416,"./state/states/InteractiveStateBase":417,"./state/states/InteractiveWaitingState":418,"./state/states/StateBase":419,"./state/states/TraversingState":420,"./state/states/WaitingState":421}],283:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("./utils/Support");function i(){return o()&&n.isWebGLSupportedCached()}r.isSupported=i;function o(){return n.isBrowser()&&n.isBlobSupported()&&n.isArraySupported()&&n.isFunctionSupported()&&n.isJSONSupported()&&n.isObjectSupported()}r.isFallbackSupported=o},{"./utils/Support":429}],284:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("./tiles/ImageTileLoader");r.ImageTileLoader=n.ImageTileLoader;var i=e("./tiles/ImageTileStore");r.ImageTileStore=i.ImageTileStore;var o=e("./tiles/TextureProvider");r.TextureProvider=o.TextureProvider;var a=e("./tiles/RegionOfInterestCalculator");r.RegionOfInterestCalculator=a.RegionOfInterestCalculator},{"./tiles/ImageTileLoader":422,"./tiles/ImageTileStore":423,"./tiles/RegionOfInterestCalculator":424,"./tiles/TextureProvider":425}],285:[function(e,t,r){"use strict";function n(e){for(var t in e)if(!r.hasOwnProperty(t))r[t]=e[t]}Object.defineProperty(r,"__esModule",{value:true});var i=e("./utils/DOM");r.DOM=i.DOM;var o=e("./utils/EventEmitter");r.EventEmitter=o.EventEmitter;var a=e("./utils/Settings");r.Settings=a.Settings;n(e("./utils/Support"));var s=e("./utils/Urls");r.Urls=s.Urls},{"./utils/DOM":426,"./utils/EventEmitter":427,"./utils/Settings":428,"./utils/Support":429,"./utils/Urls":430}],286:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("./viewer/Alignment");r.Alignment=n.Alignment;var i=e("./viewer/CacheService");r.CacheService=i.CacheService;var o=e("./viewer/ComponentController");r.ComponentController=o.ComponentController;var a=e("./viewer/Container");r.Container=a.Container;var s=e("./viewer/Observer");r.Observer=s.Observer;var u=e("./viewer/ImageSize");r.ImageSize=u.ImageSize;var c=e("./viewer/KeyboardService");r.KeyboardService=c.KeyboardService;var h=e("./viewer/LoadingService");r.LoadingService=h.LoadingService;var l=e("./viewer/MouseService");r.MouseService=l.MouseService;var p=e("./viewer/Navigator");r.Navigator=p.Navigator;var f=e("./viewer/PlayService");r.PlayService=f.PlayService;var d=e("./viewer/Projection");r.Projection=d.Projection;var v=e("./viewer/SpriteService");r.SpriteService=v.SpriteService;var m=e("./viewer/TouchService");r.TouchService=m.TouchService;var g=e("./viewer/Viewer");r.Viewer=g.Viewer},{"./viewer/Alignment":431,"./viewer/CacheService":432,"./viewer/ComponentController":433,"./viewer/Container":434,"./viewer/ImageSize":435,"./viewer/KeyboardService":436,"./viewer/LoadingService":437,"./viewer/MouseService":438,"./viewer/Navigator":439,"./viewer/Observer":440,"./viewer/PlayService":441,"./viewer/Projection":442,"./viewer/SpriteService":443,"./viewer/TouchService":444,"./viewer/Viewer":445}],287:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var s=e("rxjs/operators");var n=e("rxjs");var i=e("../API");var o=function(){function e(e,t,r){this._clientId=e;this._modelCreator=r!=null?r:new i.ModelCreator;this._model=this._modelCreator.createModel(e,t);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_key"];this._propertiesFill=["captured_at","captured_with_camera_uuid","user","organization_key","private","project"];this._propertiesKey=["key"];this._propertiesSequence=["keys"];this._propertiesSpatial=["atomic_scale","c_rotation","ca","calt","camera_projection_type","cca","cfocal","ck1","ck2","gpano","height","merge_cc","merge_version","orientation","width"];this._propertiesUser=["username"]}e.prototype.imageByKeyFill$=function(t){return this._catchInvalidateGet$(this._wrapModelResponse$(this._model.get([this._pathImageByKey,t,this._propertiesKey.concat(this._propertiesFill).concat(this._propertiesSpatial),this._propertiesKey.concat(this._propertiesUser)])).pipe(s.map(function(e){if(!e){throw new Error("Images ("+t.join(", ")+") could not be found.")}return e.json.imageByKey})),this._pathImageByKey,t)};e.prototype.imageByKeyFull$=function(t){return this._catchInvalidateGet$(this._wrapModelResponse$(this._model.get([this._pathImageByKey,t,this._propertiesKey.concat(this._propertiesCore).concat(this._propertiesFill).concat(this._propertiesSpatial),this._propertiesKey.concat(this._propertiesUser)])).pipe(s.map(function(e){if(!e){throw new Error("Images ("+t.join(", ")+") could not be found.")}return e.json.imageByKey})),this._pathImageByKey,t)};e.prototype.imageCloseTo$=function(e,t){var r=t+":"+e;return this._catchInvalidateGet$(this._wrapModelResponse$(this._model.get([this._pathImageCloseTo,[r],this._propertiesKey.concat(this._propertiesCore).concat(this._propertiesFill).concat(this._propertiesSpatial),this._propertiesKey.concat(this._propertiesUser)])).pipe(s.map(function(e){return e!=null?e.json.imageCloseTo[r]:null})),this._pathImageCloseTo,[r])};e.prototype.imagesByH$=function(o){var a=this;return this._catchInvalidateGet$(this._wrapModelResponse$(this._model.get([this._pathImagesByH,o,{from:0,to:this._pageCount},this._propertiesKey.concat(this._propertiesCore)])).pipe(s.map(function(e){if(!e){e={json:{imagesByH:{}}};for(var t=0,r=o;t<r.length;t++){var n=r[t];e.json.imagesByH[n]={};for(var i=0;i<=a._pageCount;i++){e.json.imagesByH[n][i]=null}}}return e.json.imagesByH})),this._pathImagesByH,o)};e.prototype.imageViewAdd$=function(e){return this._catchInvalidateCall$(this._wrapCallModelResponse$(this._model.call([this._pathImageViewAdd],[e])),this._pathImageViewAdd,e)};e.prototype.invalidateImageByKey=function(e){this._invalidateGet(this._pathImageByKey,e)};e.prototype.invalidateImagesByH=function(e){this._invalidateGet(this._pathImagesByH,e)};e.prototype.invalidateSequenceByKey=function(e){this._invalidateGet(this._pathSequenceByKey,e)};e.prototype.setToken=function(e){this._model.invalidate([]);this._model=null;this._model=this._modelCreator.createModel(this._clientId,e)};e.prototype.sequenceByKey$=function(i){return this._catchInvalidateGet$(this._wrapModelResponse$(this._model.get([this._pathSequenceByKey,i,this._propertiesKey.concat(this._propertiesSequence)])).pipe(s.map(function(e){if(!e){e={json:{sequenceByKey:{}}}}for(var t=0,r=i;t<r.length;t++){var n=r[t];if(!(n in e.json.sequenceByKey)){console.warn("Sequence data missing ("+n+")");e.json.sequenceByKey[n]={key:n,keys:[]}}}return e.json.sequenceByKey})),this._pathSequenceByKey,i)};e.prototype.sequenceViewAdd$=function(e){return this._catchInvalidateCall$(this._wrapCallModelResponse$(this._model.call([this._pathSequenceViewAdd],[e])),this._pathSequenceViewAdd,e)};Object.defineProperty(e.prototype,"clientId",{get:function(){return this._clientId},enumerable:true,configurable:true});e.prototype._catchInvalidateGet$=function(e,t,r){var n=this;return e.pipe(s.catchError(function(e){n._invalidateGet(t,r);throw e}))};e.prototype._catchInvalidateCall$=function(e,t,r){var n=this;return e.pipe(s.catchError(function(e){n._invalidateCall(t,r);throw e}))};e.prototype._invalidateGet=function(e,t){this._model.invalidate([e,t])};e.prototype._invalidateCall=function(e,t){this._model.invalidate([e],[t])};e.prototype._wrapModelResponse$=function(e){return n.Observable.create(function(t){e.then(function(e){t.next(e);t.complete()},function(e){t.error(e)})})};e.prototype._wrapCallModelResponse$=function(e){return this._wrapModelResponse$(e).pipe(s.map(function(e){return}))};return e}();r.APIv3=o;r.default=o},{"../API":274,rxjs:27,"rxjs/operators":225}],288:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("falcor");var i=e("falcor-http-datasource");var o=e("../Utils");var a=function(){function e(){}e.prototype.createModel=function(e,t){var r={crossDomain:true,withCredentials:false};if(t!=null){r.headers={Authorization:"Bearer "+t}}return new n.Model({maxSize:16*1024*1024,source:new i.default(o.Urls.falcorModel(e),r)})};return e}();r.ModelCreator=a;r.default=a},{"../Utils":285,falcor:15,"falcor-http-datasource":10}],289:[function(e,t,r){"use strict";var i=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var o=e("rxjs");var a=e("rxjs/operators");var d=e("virtual-dom");var n=e("../Component");var v=e("../Utils");var s=function(n){i(e,n);function e(e,t,r){return n.call(this,e,t,r)||this}e.prototype._activate=function(){var n=this;this._disposable=o.combineLatest(this._navigator.stateService.currentNode$,this._container.renderService.size$).pipe(a.map(function(e){var t=e[0],r=e[1];return{name:n._name,vnode:n._getAttributionNode(t.username,t.key,t.capturedAt,r.width)}})).subscribe(this._container.domRenderer.render$)};e.prototype._deactivate=function(){this._disposable.unsubscribe()};e.prototype._getDefaultConfiguration=function(){return{}};e.prototype._getAttributionNode=function(e,t,r,n){var i=n<=640;var o=d.h("div.AttributionMapillaryLogo",[]);var a=d.h("a.AttributionIconContainer",{href:v.Urls.explore,target:"_blank"},[o]);var s=i?""+e:"image by "+e;var u=d.h("div.AttributionUsername",{textContent:s},[]);var c=new Date(r).toDateString().split(" ");var h=(c.length>3?i?[c[3]]:[c[1],c[2]+",",c[3]]:c).join(" ");var l=d.h("div.AttributionDate",{textContent:h},[]);var p=d.h("a.AttributionImageContainer",{href:v.Urls.exporeImage(t),target:"_blank"},[u,l]);var f=i?".AttributionCompact":"";return d.h("div.AttributionContainer"+f,{},[a,p])};e.componentName="attribution";return e}(n.Component);r.AttributionComponent=s;n.ComponentService.register(s);r.default=s},{"../Component":275,"../Utils":285,rxjs:27,"rxjs/operators":225,"virtual-dom":231}],290:[function(e,t,r){"use strict";var i=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var o=e("virtual-dom");var n=e("../Component");var a=function(n){i(e,n);function e(e,t,r){return n.call(this,e,t,r)||this}e.prototype._activate=function(){this._container.domRenderer.render$.next({name:this._name,vnode:this._getBackgroundNode("The viewer can't display the given image.")})};e.prototype._deactivate=function(){return};e.prototype._getDefaultConfiguration=function(){return{}};e.prototype._getBackgroundNode=function(e){return o.h("div.BackgroundWrapper",{},[o.h("p",{textContent:e},[])])};e.componentName="background";return e}(n.Component);r.BackgroundComponent=a;n.ComponentService.register(a);r.default=a},{"../Component":275,"virtual-dom":231}],291:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var o=e("rxjs/operators");var h=e("virtual-dom");var i=e("../Component");var a=e("../Geo");var s=function(i){n(e,i);function e(e,t,r){var n=i.call(this,e,t,r)||this;n._spatial=new a.Spatial;n._svgNamespace="http://www.w3.org/2000/svg";n._distinctThreshold=Math.PI/360;return n}e.prototype._activate=function(){var s=this;var e=this._container.renderService.renderCamera$.pipe(o.map(function(e){var t=s._spatial.degToRad(e.perspective.fov);var r=e.perspective.aspect===Number.POSITIVE_INFINITY?Math.PI:Math.atan(e.perspective.aspect*Math.tan(.5*t))*2;return[s._spatial.azimuthalToBearing(e.rotation.phi),r]}),o.distinctUntilChanged(function(e,t){return Math.abs(t[0]-e[0])<s._distinctThreshold&&Math.abs(t[1]-e[1])<s._distinctThreshold}));this._renderSubscription=e.pipe(o.map(function(e){var t=e[0],r=e[1];var n=h.h("div.BearingIndicatorBackground",{},[]);var i=h.h("div.BearingIndicatorBackgroundCircle",{},[]);var o=s._createNorth(t);var a=s._createCircleSectorCompass(s._createCircleSector(Math.max(Math.PI/20,r),"#FFF"));return{name:s._name,vnode:h.h("div.BearingIndicatorContainer",{oncontextmenu:function(e){e.preventDefault()}},[n,i,o,a])}})).subscribe(this._container.domRenderer.render$)};e.prototype._deactivate=function(){this._renderSubscription.unsubscribe()};e.prototype._getDefaultConfiguration=function(){return{}};e.prototype._createCircleSectorCompass=function(e){var t=h.h("g",{attributes:{transform:"translate(1,1)"},namespace:this._svgNamespace},[e]);var r=h.h("svg",{attributes:{viewBox:"0 0 2 2"},namespace:this._svgNamespace,style:{height:"30px",left:"4px",position:"absolute",top:"4px",width:"30px"}},[t]);return r};e.prototype._createCircleSector=function(e,t){if(e>2*Math.PI-Math.PI/90){return h.h("circle",{attributes:{cx:"0",cy:"0",fill:t,r:"1"},namespace:this._svgNamespace},[])}var r=-Math.PI/2-e/2;var n=r+e;var i=Math.cos(r);var o=Math.sin(r);var a=Math.cos(n);var s=Math.sin(n);var u=e>=Math.PI?1:0;var c="M 0 0 "+i+" "+o+" A 1 1 0 "+u+" 1 "+a+" "+s;return h.h("path",{attributes:{d:c,fill:t},namespace:this._svgNamespace},[])};e.prototype._createNorth=function(e){var t=h.h("div.BearingNorth",[]);var r=h.h("div.BearingNorthContainer",{style:{transform:"rotateZ("+-e*180/Math.PI+"deg)"}},[t]);return r};e.componentName="bearing";return e}(i.Component);r.BearingComponent=s;i.ComponentService.register(s);r.default=s},{"../Component":275,"../Geo":278,"rxjs/operators":225,"virtual-dom":231}],292:[function(e,t,r){"use strict";var i=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var _=e("rxjs");var b=e("rxjs/operators");var x=e("../Edge");var n=e("../Component");var o=function(n){i(e,n);function e(e,t,r){return n.call(this,e,t,r)||this}e.prototype.setDepth=function(e){this.configure({depth:e})};e.prototype._activate=function(){var y=this;this._sequenceSubscription=_.combineLatest(this._navigator.stateService.currentNode$.pipe(b.switchMap(function(e){return e.sequenceEdges$}),b.filter(function(e){return e.cached})),this._configuration$).pipe(b.switchMap(function(e){var t=e[0];var r=e[1];var n=Math.max(0,Math.min(4,r.depth.sequence));var i=y._cache$(t.edges,x.EdgeDirection.Next,n);var o=y._cache$(t.edges,x.EdgeDirection.Prev,n);return _.merge(i,o).pipe(b.catchError(function(e,t){console.error("Failed to cache sequence edges.",e);return _.empty()}))})).subscribe(function(){});this._spatialSubscription=_.combineLatest(this._navigator.stateService.currentNode$.pipe(b.switchMap(function(e){return _.combineLatest(_.of(e),e.spatialEdges$.pipe(b.filter(function(e){return e.cached})))})),this._configuration$).pipe(b.switchMap(function(e){var t=e[0],r=t[0],n=t[1],i=e[1];var o=n.edges;var a=i.depth;var s=Math.max(0,Math.min(2,a.pano));var u=r.pano?0:Math.max(0,Math.min(3,a.step));var c=r.pano?0:Math.max(0,Math.min(1,a.turn));var h=y._cache$(o,x.EdgeDirection.Pano,s);var l=y._cache$(o,x.EdgeDirection.StepForward,u);var p=y._cache$(o,x.EdgeDirection.StepBackward,u);var f=y._cache$(o,x.EdgeDirection.StepLeft,u);var d=y._cache$(o,x.EdgeDirection.StepRight,u);var v=y._cache$(o,x.EdgeDirection.TurnLeft,c);var m=y._cache$(o,x.EdgeDirection.TurnRight,c);var g=y._cache$(o,x.EdgeDirection.TurnU,c);return _.merge(l,p,f,d,h,v,m,g).pipe(b.catchError(function(e,t){console.error("Failed to cache spatial edges.",e);return _.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(e,s,t){var u=this;return _.zip(_.of(e),_.of(t)).pipe(b.expand(function(e){var t=e[0];var r=e[1];var n=[];if(r>0){for(var i=0,o=t;i<o.length;i++){var a=o[i];if(a.data.direction===s){n.push(_.zip(u._navigator.graphService.cacheNode$(a.to).pipe(b.mergeMap(function(e){return u._nodeToEdges$(e,s)})),_.of(r-1)))}}}return _.from(n).pipe(b.mergeAll())}),b.skip(1))};e.prototype._nodeToEdges$=function(e,t){return([x.EdgeDirection.Next,x.EdgeDirection.Prev].indexOf(t)>-1?e.sequenceEdges$:e.spatialEdges$).pipe(b.first(function(e){return e.cached}),b.map(function(e){return e.edges}))};e.componentName="cache";return e}(n.Component);r.CacheComponent=o;n.ComponentService.register(o);r.default=o},{"../Component":275,"../Edge":276,rxjs:27,"rxjs/operators":225}],293:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var o=e("rxjs/operators");var a=e("rxjs");var i=e("../Utils");var s=function(i){n(e,i);function e(e,t,r){var n=i.call(this)||this;n._activated$=new a.BehaviorSubject(false);n._configurationSubject$=new a.Subject;n._activated=false;n._container=t;n._name=e;n._navigator=r;n._configuration$=n._configurationSubject$.pipe(o.startWith(n.defaultConfiguration),o.scan(function(e,t){for(var r in t){if(t.hasOwnProperty(r)){e[r]=t[r]}}return e}),o.publishReplay(1),o.refCount());n._configuration$.subscribe(function(){});return n}Object.defineProperty(e.prototype,"activated",{get:function(){return this._activated},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"activated$",{get:function(){return this._activated$},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"defaultConfiguration",{get:function(){return this._getDefaultConfiguration()},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"configuration$",{get:function(){return this._configuration$},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"name",{get:function(){return this._name},enumerable:true,configurable:true});e.prototype.activate=function(e){if(this._activated){return}if(e!==undefined){this._configurationSubject$.next(e)}this._activated=true;this._activate();this._activated$.next(true)};e.prototype.configure=function(e){this._configurationSubject$.next(e)};e.prototype.deactivate=function(){if(!this._activated){return}this._activated=false;this._deactivate();this._container.domRenderer.clear(this._name);this._container.glRenderer.clear(this._name);this._activated$.next(false)};e.prototype.resize=function(){return};e.componentName="not_worthy";return e}(i.EventEmitter);r.Component=s;r.default=s},{"../Utils":285,rxjs:27,"rxjs/operators":225}],294:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("../Error");var i=function(){function i(e,t){this._components={};for(var r in i.registeredComponents){if(!i.registeredComponents.hasOwnProperty(r)){continue}var n=i.registeredComponents[r];this._components[r]={active:false,component:new n(r,e,t)}}this._coverComponent=new i.registeredCoverComponent("cover",e,t);this._coverComponent.activate();this._coverActivated=true}i.register=function(e){if(i.registeredComponents[e.componentName]===undefined){i.registeredComponents[e.componentName]=e}};i.registerCover=function(e){i.registeredCoverComponent=e};Object.defineProperty(i.prototype,"coverActivated",{get:function(){return this._coverActivated},enumerable:true,configurable:true});i.prototype.activateCover=function(){if(this._coverActivated){return}this._coverActivated=true;for(var e in this._components){if(!this._components.hasOwnProperty(e)){continue}var t=this._components[e];if(t.active){t.component.deactivate()}}};i.prototype.deactivateCover=function(){if(!this._coverActivated){return}this._coverActivated=false;for(var e in this._components){if(!this._components.hasOwnProperty(e)){continue}var t=this._components[e];if(t.active){t.component.activate()}}};i.prototype.activate=function(e){this._checkName(e);this._components[e].active=true;if(!this._coverActivated){this.get(e).activate()}};i.prototype.configure=function(e,t){this._checkName(e);this.get(e).configure(t)};i.prototype.deactivate=function(e){this._checkName(e);this._components[e].active=false;if(!this._coverActivated){this.get(e).deactivate()}};i.prototype.get=function(e){return this._components[e].component};i.prototype.getCover=function(){return this._coverComponent};i.prototype._checkName=function(e){if(!(e in this._components)){throw new n.ArgumentMapillaryError("Component does not exist: "+e)}};i.registeredComponents={};return i}();r.ComponentService=i;r.default=i},{"../Error":277}],295:[function(e,t,r){"use strict";var i=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var o=e("rxjs");var s=e("rxjs/operators");var u=e("virtual-dom");var c=e("../Component");var a=e("../Utils");var h=e("../Viewer");var n=function(n){i(e,n);function e(e,t,r){return n.call(this,e,t,r)||this}e.prototype._activate=function(){var a=this;this._configuration$.pipe(s.distinctUntilChanged(undefined,function(e){return e.state}),s.switchMap(function(e){return o.combineLatest(o.of(e.state),a._navigator.stateService.currentNode$)}),s.switchMap(function(e){var t=e[0],r=e[1];var n=o.combineLatest(o.of(r.key),r.image$.pipe(s.filter(function(e){return!!e}),s.map(function(e){return e.src})));return t===c.CoverState.Visible?n.pipe(s.first()):n}),s.distinctUntilChanged(function(e,t){var r=e[0],n=e[1];var i=t[0],o=t[1];return r===i&&n===o}),s.map(function(e){var t=e[0],r=e[1];return{key:t,src:r}})).subscribe(this._configurationSubject$);this._renderSubscription=o.combineLatest(this._configuration$,this._container.renderService.size$).pipe(s.map(function(e){var t=e[0],r=e[1];if(!t.key){return{name:a._name,vnode:u.h("div",[])}}var n=r.width<=640||r.height<=480?".CoverCompact":"";if(t.state===c.CoverState.Hidden){var i=u.h("div.CoverContainer.CoverDone"+n,[a._getCoverBackgroundVNode(t)]);return{name:a._name,vnode:i}}var o=u.h("div.CoverContainer"+n,[a._getCoverButtonVNode(t)]);return{name:a._name,vnode:o}})).subscribe(this._container.domRenderer.render$)};e.prototype._deactivate=function(){this._renderSubscription.unsubscribe();this._keySubscription.unsubscribe()};e.prototype._getDefaultConfiguration=function(){return{state:c.CoverState.Visible}};e.prototype._getCoverButtonVNode=function(e){var t=this;var r=e.state===c.CoverState.Loading?"div.Cover.CoverLoading":"div.Cover";var n=u.h("div.CoverButton",{onclick:function(){t.configure({state:c.CoverState.Loading})}},[u.h("div.CoverButtonIcon",[])]);var i=u.h("a.CoverLogo",{href:a.Urls.explore,target:"_blank"},[]);return u.h(r,[this._getCoverBackgroundVNode(e),n,i])};e.prototype._getCoverBackgroundVNode=function(e){var t=e.src!=null?e.src:a.Urls.thumbnail(e.key,h.ImageSize.Size640);var r={style:{backgroundImage:"url("+t+")"}};var n=[];if(e.state===c.CoverState.Loading){n.push(u.h("div.Spinner",{},[]))}return u.h("div.CoverBackground",r,n)};e.componentName="cover";return e}(c.Component);r.CoverComponent=n;c.ComponentService.registerCover(n);r.default=n},{"../Component":275,"../Utils":285,"../Viewer":286,rxjs:27,"rxjs/operators":225,"virtual-dom":231}],296:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var o=e("rxjs");var a=e("rxjs/operators");var u=e("virtual-dom");var i=e("../Component");var s=function(t){n(e,t);function e(){var e=t!==null&&t.apply(this,arguments)||this;e._open$=new o.BehaviorSubject(false);return e}e.prototype._activate=function(){var i=this;this._disposable=o.combineLatest(this._navigator.stateService.currentState$,this._open$,this._navigator.imageLoadingService.loadstatus$).pipe(a.map(function(e){var t=e[0],r=e[1],n=e[2];return{name:i._name,vnode:i._getDebugVNode(r,i._getDebugInfo(t,n))}})).subscribe(this._container.domRenderer.render$)};e.prototype._deactivate=function(){this._disposable.unsubscribe()};e.prototype._getDefaultConfiguration=function(){return{}};e.prototype._getDebugInfo=function(e,t){var r=[];r.push(u.h("h2","Node"));if(e.state.currentNode){r.push(u.h("p","currentNode: "+e.state.currentNode.key))}if(e.state.previousNode){r.push(u.h("p","previousNode: "+e.state.previousNode.key))}r.push(u.h("h2","Loading"));var n=0;var i=0;var o=0;for(var a in t){if(!t.hasOwnProperty(a)){continue}var s=t[a];n+=s.loaded;if(s.loaded!==s.total){o++}else{i++}}r.push(u.h("p","Loaded Images: "+i));r.push(u.h("p","Loading Images: "+o));r.push(u.h("p","Total bytes loaded: "+n));r.push(u.h("h2","Camera"));r.push(u.h("p","camera.position.x: "+e.state.camera.position.x));r.push(u.h("p","camera.position.y: "+e.state.camera.position.y));r.push(u.h("p","camera.position.z: "+e.state.camera.position.z));r.push(u.h("p","camera.lookat.x: "+e.state.camera.lookat.x));r.push(u.h("p","camera.lookat.y: "+e.state.camera.lookat.y));r.push(u.h("p","camera.lookat.z: "+e.state.camera.lookat.z));r.push(u.h("p","camera.up.x: "+e.state.camera.up.x));r.push(u.h("p","camera.up.y: "+e.state.camera.up.y));r.push(u.h("p","camera.up.z: "+e.state.camera.up.z));return r};e.prototype._getDebugVNode=function(e,t){if(e){return u.h("div.Debug",{},[u.h("h2",{},["Debug"]),this._getDebugVNodeButton(e),u.h("pre",{},t)])}else{return this._getDebugVNodeButton(e)}};e.prototype._getDebugVNodeButton=function(e){var t=e?"Disable Debug":"D";var r=e?"":".DebugButtonFixed";if(e){return u.h("button.DebugButton"+r,{onclick:this._closeDebugElement.bind(this)},[t])}else{return u.h("button.DebugButton"+r,{onclick:this._openDebugElement.bind(this)},[t])}};e.prototype._closeDebugElement=function(e){this._open$.next(false)};e.prototype._openDebugElement=function(){this._open$.next(true)};e.componentName="debug";return e}(i.Component);r.DebugComponent=s;i.ComponentService.register(s);r.default=s},{"../Component":275,rxjs:27,"rxjs/operators":225,"virtual-dom":231}],297:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var i=e("rxjs");var a=e("rxjs/operators");var s=e("virtual-dom");var o=e("../Component");var u=e("../Utils");var c=function(o){n(e,o);function e(e,t,r,n){var i=o.call(this,e,t,r)||this;i._canvasId=t.id+"-"+i._name;i._dom=!!n?n:new u.DOM;return i}e.prototype._activate=function(){var t=this;var e=this._container.domRenderer.element$.pipe(a.map(function(e){return t._dom.document.getElementById(t._canvasId)}),a.filter(function(e){return!!e}),a.map(function(e){var t=e.parentElement;var r=t.offsetWidth;var n=t.offsetHeight;return[e,{height:n,width:r}]}),a.distinctUntilChanged(function(e,t){return e.height===t.height&&e.width===t.width},function(e){var t=e[0],r=e[1];return r}));this.drawSubscription=i.combineLatest(e,this._navigator.stateService.currentNode$).subscribe(function(e){var t=e[0],r=t[0],n=t[1],i=e[1];r.width=n.width;r.height=n.height;r.getContext("2d").drawImage(i.image,0,0,n.width,n.height)});this._container.domRenderer.renderAdaptive$.next({name:this._name,vnode:s.h("canvas#"+this._canvasId,[])})};e.prototype._deactivate=function(){this.drawSubscription.unsubscribe()};e.prototype._getDefaultConfiguration=function(){return{}};e.componentName="image";return e}(o.Component);r.ImageComponent=c;o.ComponentService.register(c);r.default=c},{"../Component":275,"../Utils":285,rxjs:27,"rxjs/operators":225,"virtual-dom":231}],298:[function(e,t,r){"use strict";var i=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var o=e("rxjs");var s=e("rxjs/operators");var a=e("virtual-dom");var n=e("../Component");var u=function(n){i(e,n);function e(e,t,r){return n.call(this,e,t,r)||this}e.prototype._activate=function(){var a=this;this._loadingSubscription=this._navigator.loadingService.loading$.pipe(s.switchMap(function(e){return e?a._navigator.imageLoadingService.loadstatus$:o.of({})}),s.map(function(e){var t=0;var r=0;for(var n in e){if(!e.hasOwnProperty(n)){continue}var i=e[n];if(i.loaded!==i.total){r+=i.loaded;t+=i.total}}var o=100;if(t!==0){o=r/t*100}return{name:a._name,vnode:a._getBarVNode(o)}})).subscribe(this._container.domRenderer.render$)};e.prototype._deactivate=function(){this._loadingSubscription.unsubscribe()};e.prototype._getDefaultConfiguration=function(){return{}};e.prototype._getBarVNode=function(e){var t={};var r={};if(e!==100){t.width=e.toFixed(0)+"%";t.opacity="1"}else{t.width="100%";t.opacity="0"}return a.h("div.Loading",{style:r},[a.h("div.LoadingBar",{style:t},[])])};e.componentName="loading";return e}(n.Component);r.LoadingComponent=u;n.ComponentService.register(u);r.default=u},{"../Component":275,rxjs:27,"rxjs/operators":225,"virtual-dom":231}],299:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var o=e("rxjs");var a=e("rxjs/operators");var c=e("virtual-dom");var s=e("../Edge");var u=e("../Error");var i=e("../Component");var h=function(i){n(e,i);function e(e,t,r){var n=i.call(this,e,t,r)||this;n._seqNames={};n._seqNames[s.EdgeDirection[s.EdgeDirection.Prev]]="Prev";n._seqNames[s.EdgeDirection[s.EdgeDirection.Next]]="Next";n._spaTopNames={};n._spaTopNames[s.EdgeDirection[s.EdgeDirection.TurnLeft]]="Turnleft";n._spaTopNames[s.EdgeDirection[s.EdgeDirection.StepLeft]]="Left";n._spaTopNames[s.EdgeDirection[s.EdgeDirection.StepForward]]="Forward";n._spaTopNames[s.EdgeDirection[s.EdgeDirection.StepRight]]="Right";n._spaTopNames[s.EdgeDirection[s.EdgeDirection.TurnRight]]="Turnright";n._spaBottomNames={};n._spaBottomNames[s.EdgeDirection[s.EdgeDirection.TurnU]]="Turnaround";n._spaBottomNames[s.EdgeDirection[s.EdgeDirection.StepBackward]]="Backward";return n}e.prototype._activate=function(){var u=this;this._renderSubscription=o.combineLatest(this._navigator.stateService.currentNode$,this._configuration$).pipe(a.switchMap(function(e){var t=e[0],r=e[1];var n=r.sequence?t.sequenceEdges$.pipe(a.map(function(e){return e.edges.map(function(e){return e.data.direction})})):o.of([]);var i=!t.pano&&r.spatial?t.spatialEdges$.pipe(a.map(function(e){return e.edges.map(function(e){return e.data.direction})})):o.of([]);return o.combineLatest(n,i).pipe(a.map(function(e){var t=e[0],r=e[1];return t.concat(r)}))}),a.map(function(e){var t=u._createArrowRow(u._seqNames,e);var r=u._createArrowRow(u._spaTopNames,e);var n=u._createArrowRow(u._spaBottomNames,e);var i=c.h("div.NavigationSequence",t);var o=c.h("div.NavigationSpatialTop",r);var a=c.h("div.NavigationSpatialBottom",n);var s=c.h("div.NavigationSpatial",[o,a]);return{name:u._name,vnode:c.h("div.NavigationContainer",[i,s])}})).subscribe(this._container.domRenderer.render$)};e.prototype._deactivate=function(){this._renderSubscription.unsubscribe()};e.prototype._getDefaultConfiguration=function(){return{sequence:true,spatial:true}};e.prototype._createArrowRow=function(e,t){var r=[];for(var n in e){if(!e.hasOwnProperty(n)){continue}var i=s.EdgeDirection[n];if(t.indexOf(i)!==-1){r.push(this._createVNode(i,e[n],"visible"))}else{r.push(this._createVNode(i,e[n],"hidden"))}}return r};e.prototype._createVNode=function(t,e,r){var n=this;return c.h("span.Direction.Direction"+e,{onclick:function(e){n._navigator.moveDir$(t).subscribe(undefined,function(e){if(!(e instanceof u.AbortMapillaryError)){console.error(e)}})},style:{visibility:r}},[])};e.componentName="navigation";return e}(i.Component);r.NavigationComponent=h;i.ComponentService.register(h);r.default=h},{"../Component":275,"../Edge":276,"../Error":277,rxjs:27,"rxjs/operators":225,"virtual-dom":231}],300:[function(e,t,r){"use strict";var i=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var s=e("rxjs");var o=e("rxjs/operators");var u=e("virtual-dom");var n=e("../Component");var c=function(){function e(){}return e}();var h=function(){function e(){}return e}();var l=function(){function e(){this.nodeInstructions=[];this.nodeInstructionsOrdered=[]}return e}();var a=function(n){i(e,n);function e(e,t,r){return n.call(this,e,t,r)||this}e.prototype._activate=function(){var a=this;var e=this._navigator.stateService.currentState$.pipe(o.filter(function(e){return e.id%2===0}),o.filter(function(e){return e.state.nodesAhead<15}),o.distinctUntilChanged(undefined,function(e){return e.state.lastNode.key}));var t=s.combineLatest(this.configuration$.pipe(o.mergeMap(function(e){return s.from(e.paths)}),o.distinct(function(e){return e.sequenceKey}),o.mergeMap(function(t){return a._navigator.apiV3.sequenceByKey$([t.sequenceKey]).pipe(o.map(function(e){return e[t.sequenceKey]}))})),this.configuration$).pipe(o.map(function(e){var t=e[0],r=e[1];var n=0;var i=[];for(var o=0,a=r.paths;o<a.length;o++){var s=a[o];if(s.sequenceKey===t.key){var u=[];var c=false;for(var h=0,l=t.keys;h<l.length;h++){var p=l[h];if(s.startKey===p){c=true}if(c){var f=null;for(var d=0,v=s.infoKeys;d<v.length;d++){var m=v[d];if(m.key===p){f=m.description}}u.push({description:f,key:p})}if(s.stopKey===p){c=false}}i.push({nodeInstructions:u,place:n})}n++}return i}),o.scan(function(e,t){for(var r=0,n=t;r<n.length;r++){var i=n[r];e.nodeInstructionsOrdered[i.place]=i.nodeInstructions}for(var o in e.nodeInstructionsOrdered){if(!e.nodeInstructionsOrdered.hasOwnProperty(o)){continue}var a=e.nodeInstructionsOrdered[o];for(var s=0,u=a;s<u.length;s++){var c=u[s];e.nodeInstructions.push(c)}}return e},new l));var r=s.combineLatest(e,t,this.configuration$).pipe(o.map(function(e){var t=e[0],r=e[1],n=e[2];return{conf:n,frame:t,routeTrack:r}}),o.scan(function(e,t){if(t.conf.playing===undefined||t.conf.playing){e.routeTrack=t.routeTrack;e.currentNode=t.frame.state.currentNode;e.lastNode=t.frame.state.lastNode;e.playing=true}else{a._navigator.stateService.cutNodes();e.playing=false}return e},new h),o.filter(function(e){return e.playing}),o.filter(function(e){for(var t=0,r=e.routeTrack.nodeInstructions;t<r.length;t++){var n=r[t];if(!n){continue}if(n.key===e.lastNode.key){return true}}return false}),o.distinctUntilChanged(undefined,function(e){return e.lastNode.key}),o.mergeMap(function(e){var t=0;for(var r=0,n=e.routeTrack.nodeInstructions;r<n.length;r++){var i=n[r];if(i.key===e.lastNode.key){break}t++}var o=e.routeTrack.nodeInstructions[t+1];if(!o){return s.of(null)}return a._navigator.graphService.cacheNode$(o.key)}));this._disposable=s.combineLatest(r,this.configuration$).pipe(o.map(function(e){var t=e[0],r=e[1];return{conf:r,node:t}}),o.filter(function(e){return e.node!==null&&e.conf.playing}),o.pluck("node")).subscribe(this._navigator.stateService.appendNode$);this._disposableDescription=s.combineLatest(this._navigator.stateService.currentNode$,t,this.configuration$).pipe(o.map(function(e){var t=e[0],r=e[1],n=e[2];if(n.playing!==undefined&&!n.playing){return"quit"}var i=null;for(var o=0,a=r.nodeInstructions;o<a.length;o++){var s=a[o];if(s.key===t.key){i=s.description;break}}return i}),o.scan(function(e,t){if(t!==e.description&&t!==null){e.description=t;e.showsLeft=6}else{e.showsLeft--}if(t==="quit"){e.description=null}return e},new c),o.map(function(e){if(e.showsLeft>0&&e.description){return{name:a._name,vnode:a._getRouteAnnotationNode(e.description)}}else{return{name:a._name,vnode:u.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:true})};e.prototype.stop=function(){this.configure({playing:false})};e.prototype._getRouteAnnotationNode=function(e){return u.h("div.RouteFrame",{},[u.h("p",{textContent:e},[])])};e.componentName="route";return e}(n.Component);r.RouteComponent=a;n.ComponentService.register(a);r.default=a},{"../Component":275,rxjs:27,"rxjs/operators":225,"virtual-dom":231}],301:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var i=e("rxjs");var a=e("rxjs/operators");var o=e("../Component");var s=function(o){n(e,o);function e(e,t,r,n){var i=o.call(this,e,t,r)||this;i._scheduler=n;return i}e.prototype._activate=function(){var e=this;this._sequenceSubscription=this._navigator.stateService.currentNode$.pipe(a.scan(function(e,t){var r=t.sequenceKey;e.report=[];if(!(r in e.reported)){e.report=[r];e.reported[r]=true}return e},{report:[],reported:{}}),a.filter(function(e){return e.report.length>0}),a.mergeMap(function(r){return e._navigator.apiV3.sequenceViewAdd$(r.report).pipe(a.catchError(function(e,t){console.error("Failed to report sequence stats ("+r.report+")",e);return i.empty()}))})).subscribe(function(){});this._imageSubscription=this._navigator.stateService.currentNode$.pipe(a.map(function(e){return e.key})).pipe(a.buffer(this._navigator.stateService.currentNode$.pipe(a.debounceTime(5e3,this._scheduler))),a.scan(function(e,t){e.report=[];for(var r=0,n=t;r<n.length;r++){var i=n[r];if(!(i in e.reported)){e.report.push(i);e.reported[i]=true}}return e},{report:[],reported:{}}),a.filter(function(e){return e.report.length>0}),a.mergeMap(function(r){return e._navigator.apiV3.imageViewAdd$(r.report).pipe(a.catchError(function(e,t){console.error("Failed to report image stats ("+r.report+")",e);return i.empty()}))})).subscribe(function(){})};e.prototype._deactivate=function(){this._sequenceSubscription.unsubscribe();this._imageSubscription.unsubscribe()};e.prototype._getDefaultConfiguration=function(){return{}};e.componentName="stats";return e}(o.Component);r.StatsComponent=s;o.ComponentService.register(s);r.default=s},{"../Component":275,rxjs:27,"rxjs/operators":225}],302:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var i=e("virtual-dom");var a=e("rxjs");var s=e("rxjs/operators");var u=e("../../Component");var o=function(o){n(t,o);function t(e,t,r,n){var i=o.call(this,e,t,r)||this;i._renderer=!!n?n:new u.DirectionDOMRenderer(i.defaultConfiguration,{height:t.element.offsetHeight,width:t.element.offsetWidth});i._hoveredKeySubject$=new a.Subject;i._hoveredKey$=i._hoveredKeySubject$.pipe(s.share());return i}Object.defineProperty(t.prototype,"hoveredKey$",{get:function(){return this._hoveredKey$},enumerable:true,configurable:true});t.prototype.setHighlightKey=function(e){this.configure({highlightKey:e})};t.prototype.setMinWidth=function(e){this.configure({minWidth:e})};t.prototype.setMaxWidth=function(e){this.configure({maxWidth:e})};t.prototype._activate=function(){var n=this;this._configurationSubscription=this._configuration$.subscribe(function(e){n._renderer.setConfiguration(e)});this._resizeSubscription=this._container.renderService.size$.subscribe(function(e){n._renderer.resize(e)});this._nodeSubscription=this._navigator.stateService.currentNode$.pipe(s.tap(function(e){n._container.domRenderer.render$.next({name:n._name,vnode:i.h("div",{},[])});n._renderer.setNode(e)}),s.withLatestFrom(this._configuration$),s.switchMap(function(e){var r=e[0],t=e[1];return a.combineLatest(r.spatialEdges$,t.distinguishSequence?n._navigator.graphService.cacheSequence$(r.sequenceKey).pipe(s.catchError(function(e,t){console.error("Failed to cache sequence ("+r.sequenceKey+")",e);return a.of(null)})):a.of(null))})).subscribe(function(e){var t=e[0],r=e[1];n._renderer.setEdges(t,r)});this._renderCameraSubscription=this._container.renderService.renderCameraFrame$.pipe(s.tap(function(e){n._renderer.setRenderCamera(e)}),s.map(function(){return n._renderer}),s.filter(function(e){return e.needsRender}),s.map(function(e){return{name:n._name,vnode:e.render(n._navigator)}})).subscribe(this._container.domRenderer.render$);this._hoveredKeySubscription=a.combineLatest(this._container.domRenderer.element$,this._container.renderService.renderCamera$,this._container.mouseService.mouseMove$.pipe(s.startWith(null)),this._container.mouseService.mouseUp$.pipe(s.startWith(null))).pipe(s.map(function(e){var t=e[0];var r=t.getElementsByClassName("DirectionsPerspective");for(var n=0;n<r.length;n++){var i=r.item(n).querySelector(":hover");if(i!=null&&i.hasAttribute("data-key")){return i.getAttribute("data-key")}}return null}),s.distinctUntilChanged()).subscribe(this._hoveredKeySubject$);this._emitHoveredKeySubscription=this._hoveredKey$.subscribe(function(e){n.fire(t.hoveredkeychanged,e)})};t.prototype._deactivate=function(){this._configurationSubscription.unsubscribe();this._emitHoveredKeySubscription.unsubscribe();this._hoveredKeySubscription.unsubscribe();this._nodeSubscription.unsubscribe();this._renderCameraSubscription.unsubscribe()};t.prototype._getDefaultConfiguration=function(){return{distinguishSequence:false,maxWidth:460,minWidth:260}};t.componentName="direction";t.hoveredkeychanged="hoveredkeychanged";return t}(u.Component);r.DirectionComponent=o;u.ComponentService.register(o);r.default=o},{"../../Component":275,rxjs:27,"rxjs/operators":225,"virtual-dom":231}],303:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("../../Geo");var i=function(){function e(e,t){this._spatial=new n.Spatial;this._minThresholdWidth=320;this._maxThresholdWidth=1480;this._minThresholdHeight=240;this._maxThresholdHeight=820;this._configure(e);this._resize(t);this._reset()}Object.defineProperty(e.prototype,"minWidth",{get:function(){return this._minWidth},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"maxWidth",{get:function(){return this._maxWidth},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"containerWidth",{get:function(){return this._containerWidth},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"containerWidthCss",{get:function(){return this._containerWidthCss},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"containerMarginCss",{get:function(){return this._containerMarginCss},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"containerLeftCss",{get:function(){return this._containerLeftCss},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"containerHeight",{get:function(){return this._containerHeight},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"containerHeightCss",{get:function(){return this._containerHeightCss},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"containerBottomCss",{get:function(){return this._containerBottomCss},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"stepCircleSize",{get:function(){return this._stepCircleSize},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"stepCircleSizeCss",{get:function(){return this._stepCircleSizeCss},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"stepCircleMarginCss",{get:function(){return this._stepCircleMarginCss},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"turnCircleSize",{get:function(){return this._turnCircleSize},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"turnCircleSizeCss",{get:function(){return this._turnCircleSizeCss},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"outerRadius",{get:function(){return this._outerRadius},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"innerRadius",{get:function(){return this._innerRadius},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"shadowOffset",{get:function(){return this._shadowOffset},enumerable:true,configurable:true});e.prototype.configure=function(e){this._configure(e);this._reset()};e.prototype.resize=function(e){this._resize(e);this._reset()};e.prototype.angleToCoordinates=function(e){return[Math.cos(e),Math.sin(e)]};e.prototype.relativeAngleToCoordiantes=function(e,t){var r=this._spatial.wrapAngle(e-t);return this.angleToCoordinates(r)};e.prototype._configure=function(e){this._minWidth=e.minWidth;this._maxWidth=this._getMaxWidth(e.minWidth,e.maxWidth)};e.prototype._resize=function(e){this._elementWidth=e.width;this._elementHeight=e.height};e.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)};e.prototype._getContainerWidth=function(e,t){var r=(e-this._minThresholdWidth)/(this._maxThresholdWidth-this._minThresholdWidth);var n=(t-this._minThresholdHeight)/(this._maxThresholdHeight-this._minThresholdHeight);var i=Math.max(0,Math.min(1,Math.min(r,n)));i=.04*Math.round(25*i);return this._minWidth+i*(this._maxWidth-this._minWidth)};e.prototype._getContainerHeight=function(e){return.77*e};e.prototype._getStepCircleDiameter=function(e){return.34*e};e.prototype._getTurnCircleDiameter=function(e){return.3*e};e.prototype._getOuterRadius=function(e){return.31*e};e.prototype._getInnerRadius=function(e){return.125*e};e.prototype._numberToCssPixels=function(e){return e+"px"};e.prototype._getMaxWidth=function(e,t){return e>t?e:t};return e}();r.DirectionDOMCalculator=i;r.default=i},{"../../Geo":278}],304:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var x=e("virtual-dom");var n=e("../../Component");var f=e("../../Edge");var c=e("../../Error");var i=e("../../Geo");var o=function(){function e(e,t){this._isEdge=false;this._spatial=new i.Spatial;this._calculator=new n.DirectionDOMCalculator(e,t);this._node=null;this._rotation={phi:0,theta:0};this._epsilon=.5*Math.PI/180;this._highlightKey=null;this._distinguishSequence=false;this._needsRender=false;this._stepEdges=[];this._turnEdges=[];this._panoEdges=[];this._sequenceEdgeKeys=[];this._stepDirections=[f.EdgeDirection.StepForward,f.EdgeDirection.StepBackward,f.EdgeDirection.StepLeft,f.EdgeDirection.StepRight];this._turnDirections=[f.EdgeDirection.TurnLeft,f.EdgeDirection.TurnRight,f.EdgeDirection.TurnU];this._turnNames={};this._turnNames[f.EdgeDirection.TurnLeft]="TurnLeft";this._turnNames[f.EdgeDirection.TurnRight]="TurnRight";this._turnNames[f.EdgeDirection.TurnU]="TurnAround";var r=!!document.documentMode;this._isEdge=!r&&!!window.StyleMedia}Object.defineProperty(e.prototype,"needsRender",{get:function(){return this._needsRender},enumerable:true,configurable:true});e.prototype.render=function(e){this._needsRender=false;var t=this._rotation;var r=[];var n=[];if(this._node.pano){r=r.concat(this._createPanoArrows(e,t))}else{r=r.concat(this._createPerspectiveToPanoArrows(e,t));r=r.concat(this._createStepArrows(e,t));n=n.concat(this._createTurnArrows(e))}return this._getContainer(r,n,t)};e.prototype.setEdges=function(e,t){this._setEdges(e,t);this._setNeedsRender()};e.prototype.setNode=function(e){this._node=e;this._clearEdges();this._setNeedsRender()};e.prototype.setRenderCamera=function(e){var t=e.rotation;if(Math.abs(t.phi-this._rotation.phi)<this._epsilon){return}this._rotation=t;this._setNeedsRender()};e.prototype.setConfiguration=function(e){var t=false;if(this._highlightKey!==e.highlightKey||this._distinguishSequence!==e.distinguishSequence){this._highlightKey=e.highlightKey;this._distinguishSequence=e.distinguishSequence;t=true}if(this._calculator.minWidth!==e.minWidth||this._calculator.maxWidth!==e.maxWidth){this._calculator.configure(e);t=true}if(t){this._setNeedsRender()}};e.prototype.resize=function(e){this._calculator.resize(e);this._setNeedsRender()};e.prototype._setNeedsRender=function(){if(this._node!=null){this._needsRender=true}};e.prototype._clearEdges=function(){this._stepEdges=[];this._turnEdges=[];this._panoEdges=[];this._sequenceEdgeKeys=[]};e.prototype._setEdges=function(e,t){this._stepEdges=[];this._turnEdges=[];this._panoEdges=[];this._sequenceEdgeKeys=[];for(var r=0,n=e.edges;r<n.length;r++){var i=n[r];var o=i.data.direction;if(this._stepDirections.indexOf(o)>-1){this._stepEdges.push(i);continue}if(this._turnDirections.indexOf(o)>-1){this._turnEdges.push(i);continue}if(i.data.direction===f.EdgeDirection.Pano){this._panoEdges.push(i)}}if(this._distinguishSequence&&t!=null){var a=this._panoEdges.concat(this._stepEdges).concat(this._turnEdges);for(var s=0,u=a;s<u.length;s++){var i=u[s];var c=i.to;for(var h=0,l=t.keys;h<l.length;h++){var p=l[h];if(p===c){this._sequenceEdgeKeys.push(c);break}}}}};e.prototype._createPanoArrows=function(e,t){var r=[];for(var n=0,i=this._panoEdges;n<i.length;n++){var o=i[n];r.push(this._createVNodeByKey(e,o.to,o.data.worldMotionAzimuth,t,this._calculator.outerRadius,"DirectionsArrowPano"))}for(var a=0,s=this._stepEdges;a<s.length;a++){var u=s[a];r.push(this._createPanoToPerspectiveArrow(e,u.to,u.data.worldMotionAzimuth,t,u.data.direction))}return r};e.prototype._createPanoToPerspectiveArrow=function(e,t,r,n,i){var o=Math.PI/8;var a=n.phi;switch(i){case f.EdgeDirection.StepBackward:a=n.phi-Math.PI;break;case f.EdgeDirection.StepLeft:a=n.phi+Math.PI/2;break;case f.EdgeDirection.StepRight:a=n.phi-Math.PI/2;break;default:break}if(Math.abs(this._spatial.wrapAngle(r-a))<o){return this._createVNodeByKey(e,t,r,n,this._calculator.outerRadius,"DirectionsArrowStep")}return this._createVNodeDisabled(t,r,n)};e.prototype._createPerspectiveToPanoArrows=function(e,t){var r=[];for(var n=0,i=this._panoEdges;n<i.length;n++){var o=i[n];r.push(this._createVNodeByKey(e,o.to,o.data.worldMotionAzimuth,t,this._calculator.innerRadius,"DirectionsArrowPano",true))}return r};e.prototype._createStepArrows=function(e,t){var r=[];for(var n=0,i=this._stepEdges;n<i.length;n++){var o=i[n];r.push(this._createVNodeByDirection(e,o.to,o.data.worldMotionAzimuth,t,o.data.direction))}return r};e.prototype._createTurnArrows=function(e){var t=[];for(var r=0,n=this._turnEdges;r<n.length;r++){var i=n[r];var o=i.data.direction;var a=this._turnNames[o];t.push(this._createVNodeByTurn(e,i.to,a,o))}return t};e.prototype._createVNodeByKey=function(t,r,e,n,i,o,a){var s=function(e){t.moveToKey$(r).subscribe(undefined,function(e){if(!(e instanceof c.AbortMapillaryError)){console.error(e)}})};return this._createVNode(r,e,n,i,o,"DirectionsCircle",s,a)};e.prototype._createVNodeByDirection=function(t,e,r,n,i){var o=function(e){t.moveDir$(i).subscribe(undefined,function(e){if(!(e instanceof c.AbortMapillaryError)){console.error(e)}})};return this._createVNode(e,r,n,this._calculator.outerRadius,"DirectionsArrowStep","DirectionsCircle",o)};e.prototype._createVNodeByTurn=function(t,e,r,n){var i=function(e){t.moveDir$(n).subscribe(undefined,function(e){if(!(e instanceof c.AbortMapillaryError)){console.error(e)}})};var o={height:this._calculator.turnCircleSizeCss,transform:"rotate(0)",width:this._calculator.turnCircleSizeCss};switch(n){case f.EdgeDirection.TurnLeft:o.left="5px";o.top="5px";break;case f.EdgeDirection.TurnRight:o.right="5px";o.top="5px";break;case f.EdgeDirection.TurnU:o.left="5px";o.bottom="5px";break;default:break}var a={attributes:{"data-key":e},onclick:i,style:o};var s="TurnCircle";if(this._sequenceEdgeKeys.indexOf(e)>-1){s+="Sequence"}if(this._highlightKey===e){s+="Highlight"}var u=x.h("div."+r,{},[]);return x.h("div."+s,a,[u])};e.prototype._createVNodeDisabled=function(e,t,r){return this._createVNode(e,t,r,this._calculator.outerRadius,"DirectionsArrowDisabled","DirectionsCircleDisabled")};e.prototype._createVNode=function(e,t,r,n,i,o,a,s){var u=this._calculator.angleToCoordinates(t-r.phi);var c=Math.round(-n*u[1]+.5*this._calculator.containerWidth);var h=Math.round(-n*u[0]+.5*this._calculator.containerHeight);var l=this._calculator.relativeAngleToCoordiantes(t,r.phi);var p=this._calculator.shadowOffset;var f=-p*l[1];var d=p*l[0];var v="drop-shadow("+f+"px "+d+"px 1px rgba(0,0,0,0.8))";var m={style:{"-webkit-filter":v,filter:v}};var g=x.h("div."+i,m,[]);var y=-this._spatial.radToDeg(t-r.phi);var _=s?"translate("+c+"px, "+h+"px) rotate("+y+"deg) translateZ(-0.01px)":"translate("+c+"px, "+h+"px) rotate("+y+"deg)";var b={attributes:{"data-key":e},onclick:a,style:{height:this._calculator.stepCircleSizeCss,marginLeft:this._calculator.stepCircleMarginCss,marginTop:this._calculator.stepCircleMarginCss,transform:_,width:this._calculator.stepCircleSizeCss}};if(this._sequenceEdgeKeys.indexOf(e)>-1){o+="Sequence"}if(this._highlightKey===e){o+="Highlight"}return x.h("div."+o,b,[g])};e.prototype._getContainer=function(e,t,r){var n=this._isEdge?"rotateX(60deg)":"perspective("+this._calculator.containerWidthCss+") rotateX(60deg)";var i={oncontextmenu:function(e){e.preventDefault()},style:{bottom:this._calculator.containerBottomCss,height:this._calculator.containerHeightCss,left:this._calculator.containerLeftCss,marginLeft:this._calculator.containerMarginCss,transform:n,width:this._calculator.containerWidthCss}};return x.h("div.DirectionsPerspective",i,t.concat(e))};return e}();r.DirectionDOMRenderer=o;r.default=o},{"../../Component":275,"../../Edge":276,"../../Error":277,"../../Geo":278,"virtual-dom":231}],305:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var o=e("rxjs");var a=e("rxjs/operators");var s=e("../../Component");var u=e("../../Render");var h=e("../../Tiles");var l=e("../../Utils");var i=function(i){n(e,i);function e(e,t,r){var n=i.call(this,e,t,r)||this;n._imageTileLoader=new h.ImageTileLoader(l.Urls.tileScheme,l.Urls.tileDomain,l.Urls.origin);n._roiCalculator=new h.RegionOfInterestCalculator;n._rendererOperation$=new o.Subject;n._rendererCreator$=new o.Subject;n._rendererDisposer$=new o.Subject;n._renderer$=n._rendererOperation$.pipe(a.scan(function(e,t){return t(e)},null),a.filter(function(e){return e!=null}),a.distinctUntilChanged(undefined,function(e){return e.frameId}));n._rendererCreator$.pipe(a.map(function(){return function(e){if(e!=null){throw new Error("Multiple image plane states can not be created at the same time")}return new s.ImagePlaneGLRenderer}})).subscribe(n._rendererOperation$);n._rendererDisposer$.pipe(a.map(function(){return function(e){e.dispose();return null}})).subscribe(n._rendererOperation$);return n}e.prototype._activate=function(){var c=this;this._rendererSubscription=this._renderer$.pipe(a.map(function(e){var t={name:c._name,render:{frameId:e.frameId,needsRender:e.needsRender,render:e.render.bind(e),stage:u.GLRenderStage.Background}};e.clearNeedsRender();return t})).subscribe(this._container.glRenderer.render$);this._rendererCreator$.next(null);this._stateSubscription=this._navigator.stateService.currentState$.pipe(a.map(function(t){return function(e){e.updateFrame(t);return e}})).subscribe(this._rendererOperation$);var t=this._navigator.stateService.currentState$.pipe(a.distinctUntilChanged(undefined,function(e){return e.state.currentNode.key}),a.withLatestFrom(this._container.glRenderer.webGLRenderer$,this._container.renderService.size$),a.map(function(e){var t=e[0],r=e[1],n=e[2];var i=t.state;var o=Math.max(n.width,n.height);var a=i.currentNode;var s=i.currentTransform;var u=o>2048?2048:o>1024?1024:512;return new h.TextureProvider(a.key,s.basicWidth,s.basicHeight,u,a.image,c._imageTileLoader,new h.ImageTileStore,r)}),a.publishReplay(1),a.refCount());this._textureProviderSubscription=t.subscribe(function(){});this._setTextureProviderSubscription=t.pipe(a.map(function(t){return function(e){e.setTextureProvider(t.key,t);return e}})).subscribe(this._rendererOperation$);this._setTileSizeSubscription=this._container.renderService.size$.pipe(a.switchMap(function(e){return o.combineLatest(t,o.of(e)).pipe(a.first())})).subscribe(function(e){var t=e[0],r=e[1];var n=Math.max(r.width,r.height);var i=n>2048?2048:n>1024?1024:512;t.setTileSize(i)});this._abortTextureProviderSubscription=t.pipe(a.pairwise()).subscribe(function(e){var t=e[0];t.abort()});var e=o.combineLatest(this._container.renderService.renderCameraFrame$,this._container.renderService.size$.pipe(a.debounceTime(250))).pipe(a.map(function(e){var t=e[0],r=e[1];return[t.camera.position.clone(),t.camera.lookat.clone(),t.zoom.valueOf(),r.height.valueOf(),r.width.valueOf()]}),a.pairwise(),a.skipWhile(function(e){return e[1][2]-e[0][2]<0||e[1][2]===0}),a.map(function(e){var t=e[0][0].equals(e[1][0]);var r=e[0][1].equals(e[1][1]);var n=e[0][2]===e[1][2];var i=e[0][3]===e[1][3];var o=e[0][4]===e[1][4];return t&&r&&n&&i&&o}),a.distinctUntilChanged(),a.filter(function(e){return e}),a.switchMap(function(e){return c._container.renderService.renderCameraFrame$.pipe(a.first())}),a.withLatestFrom(this._container.renderService.size$,this._navigator.stateService.currentTransform$));this._setRegionOfInterestSubscription=t.pipe(a.switchMap(function(i){return e.pipe(a.map(function(e){var t=e[0],r=e[1],n=e[2];return[c._roiCalculator.computeRegionOfInterest(t,r,n),i]}))}),a.filter(function(e){return!e[1].disposed})).subscribe(function(e){var t=e[0];var r=e[1];r.setRegionOfInterest(t)});var n=t.pipe(a.switchMap(function(e){return e.hasTexture$}),a.startWith(false),a.publishReplay(1),a.refCount());this._hasTextureSubscription=n.subscribe(function(){});var r=this._navigator.stateService.currentState$.pipe(a.filter(function(e){return e.state.nodesAhead===0}),a.map(function(e){return e.state.currentNode}),a.distinctUntilChanged(undefined,function(e){return e.key}),a.debounceTime(1e3),a.withLatestFrom(n),a.filter(function(e){return!e[1]}),a.map(function(e){return e[0]}),a.filter(function(e){return e.pano?l.Settings.maxImageSize>l.Settings.basePanoramaSize:l.Settings.maxImageSize>l.Settings.baseImageSize}),a.switchMap(function(r){var e=r.pano?l.Settings.basePanoramaSize:l.Settings.baseImageSize;if(Math.max(r.image.width,r.image.height)>e){return o.empty()}var t=r.cacheImage$(l.Settings.maxImageSize).pipe(a.map(function(e){return[e.image,e]}));return t.pipe(a.takeUntil(n.pipe(a.filter(function(e){return e}))),a.catchError(function(e,t){console.error("Failed to fetch high res image ("+r.key+")",e);return o.empty()}))})).pipe(a.publish(),a.refCount());this._updateBackgroundSubscription=r.pipe(a.withLatestFrom(t)).subscribe(function(e){if(e[0][1].key!==e[1].key||e[1].disposed){return}e[1].updateBackground(e[0][0])});this._updateTextureImageSubscription=r.pipe(a.map(function(t){return function(e){e.updateTextureImage(t[0],t[1]);return 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._setTileSizeSubscription.unsubscribe();this._stateSubscription.unsubscribe();this._textureProviderSubscription.unsubscribe();this._updateBackgroundSubscription.unsubscribe();this._updateTextureImageSubscription.unsubscribe()};e.prototype._getDefaultConfiguration=function(){return{}};e.componentName="imagePlane";return e}(s.Component);r.ImagePlaneComponent=i;s.ComponentService.register(i);r.default=i},{"../../Component":275,"../../Render":281,"../../Tiles":284,"../../Utils":285,rxjs:27,"rxjs/operators":225}],306:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("../../Component");var i=function(){function e(){this._factory=new n.MeshFactory;this._scene=new n.MeshScene;this._alpha=0;this._alphaOld=0;this._fadeOutSpeed=.05;this._currentKey=null;this._previousKey=null;this._providerDisposers={};this._frameId=0;this._needsRender=false}Object.defineProperty(e.prototype,"frameId",{get:function(){return this._frameId},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"needsRender",{get:function(){return this._needsRender},enumerable:true,configurable:true});e.prototype.indicateNeedsRender=function(){this._needsRender=true};e.prototype.updateFrame=function(e){this._updateFrameId(e.id);this._needsRender=this._updateAlpha(e.state.alpha)||this._needsRender;this._needsRender=this._updateAlphaOld(e.state.alpha)||this._needsRender;this._needsRender=this._updateImagePlanes(e.state)||this._needsRender};e.prototype.setTextureProvider=function(e,t){var r=this;if(e!==this._currentKey){return}var n=t.textureCreated$.subscribe(function(e){r._updateTexture(e)});var i=t.textureUpdated$.subscribe(function(e){r._needsRender=true});var o=function(){n.unsubscribe();i.unsubscribe();t.dispose()};if(e in this._providerDisposers){var a=this._providerDisposers[e];a();delete this._providerDisposers[e]}this._providerDisposers[e]=o};e.prototype._updateTexture=function(e){this._needsRender=true;for(var t=0,r=this._scene.imagePlanes;t<r.length;t++){var n=r[t];var i=n.material;var o=i.uniforms.projectorTex.value;i.uniforms.projectorTex.value=null;o.dispose();i.uniforms.projectorTex.value=e}};e.prototype.updateTextureImage=function(e,t){if(this._currentKey!==t.key){return}this._needsRender=true;for(var r=0,n=this._scene.imagePlanes;r<n.length;r++){var i=n[r];var o=i.material;var a=o.uniforms.projectorTex.value;a.image=e;a.needsUpdate=true}};e.prototype.render=function(e,t){var r=this._scene.imagePlanesOld.length?1:this._alpha;for(var n=0,i=this._scene.imagePlanes;n<i.length;n++){var o=i[n];o.material.uniforms.opacity.value=r}for(var a=0,s=this._scene.imagePlanesOld;a<s.length;a++){var o=s[a];o.material.uniforms.opacity.value=this._alphaOld}t.render(this._scene.scene,e);t.render(this._scene.sceneOld,e);for(var u=0,c=this._scene.imagePlanes;u<c.length;u++){var o=c[u];o.material.uniforms.opacity.value=this._alpha}t.render(this._scene.scene,e)};e.prototype.clearNeedsRender=function(){this._needsRender=false};e.prototype.dispose=function(){this._scene.clear()};e.prototype._updateFrameId=function(e){this._frameId=e};e.prototype._updateAlpha=function(e){if(e===this._alpha){return false}this._alpha=e;return true};e.prototype._updateAlphaOld=function(e){if(e<1||this._alphaOld===0){return false}this._alphaOld=Math.max(0,this._alphaOld-this._fadeOutSpeed);return true};e.prototype._updateImagePlanes=function(e){if(e.currentNode==null||e.currentNode.key===this._currentKey){return false}var t=e.previousNode!=null?e.previousNode.key:null;var r=e.currentNode.key;if(this._previousKey!==t&&this._previousKey!==r&&this._previousKey in this._providerDisposers){var n=this._providerDisposers[this._previousKey];n();delete this._providerDisposers[this._previousKey]}if(t!=null){if(t!==this._currentKey&&t!==this._previousKey){var i=this._factory.createMesh(e.previousNode,e.previousTransform);this._scene.updateImagePlanes([i])}this._previousKey=t}this._currentKey=r;var o=this._factory.createMesh(e.currentNode,e.currentTransform);this._scene.updateImagePlanes([o]);this._alphaOld=1;return true};return e}();r.ImagePlaneGLRenderer=i;r.default=i},{"../../Component":275}],307:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n;(function(e){e[e["Hidden"]=0]="Hidden";e[e["Loading"]=1]="Loading";e[e["Visible"]=2]="Visible"})(n=r.CoverState||(r.CoverState={}))},{}],308:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n;(function(e){e[e["Motion"]=0]="Motion";e[e["Stationary"]=1]="Stationary"})(n=r.SliderMode||(r.SliderMode={}))},{}],309:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("./ICoverConfiguration");r.CoverState=n.CoverState;var i=e("./ISliderConfiguration");r.SliderMode=i.SliderMode},{"./ICoverConfiguration":307,"./ISliderConfiguration":308}],310:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var i=e("rxjs/operators");var o=e("../../Component");var l=e("../../Edge");var a=function(e){n(t,e);function t(){return e!==null&&e.apply(this,arguments)||this}t.prototype._enable=function(){var h=this;this._keyDownSubscription=this._container.keyboardService.keyDown$.pipe(i.withLatestFrom(this._navigator.playService.playing$,this._navigator.playService.direction$,this._navigator.playService.speed$,this._navigator.stateService.currentNode$.pipe(i.switchMap(function(e){return e.sequenceEdges$})))).subscribe(function(e){var t=e[0],r=e[1],n=e[2],i=e[3],o=e[4];if(t.altKey||t.ctrlKey||t.metaKey){return}switch(t.key){case"D":if(!t.shiftKey){return}var a=r?null:n===l.EdgeDirection.Next?l.EdgeDirection.Prev:n===l.EdgeDirection.Prev?l.EdgeDirection.Next:null;if(a!=null){h._navigator.playService.setDirection(a)}break;case" ":if(t.shiftKey){return}if(r){h._navigator.playService.stop()}else{for(var s=0,u=o.edges;s<u.length;s++){var c=u[s];if(c.data.direction===n){h._navigator.playService.play()}}}break;case"<":h._navigator.playService.setSpeed(i-.05);break;case">":h._navigator.playService.setSpeed(i+.05);break;default:return}t.preventDefault()})};t.prototype._disable=function(){this._keyDownSubscription.unsubscribe()};t.prototype._getConfiguration=function(e){return{keyZoom:e}};return t}(o.HandlerBase);r.KeyPlayHandler=a;r.default=a},{"../../Component":275,"../../Edge":276,"rxjs/operators":225}],311:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var i=e("rxjs/operators");var o=e("../../Component");var u=e("../../Edge");var c=e("../../Error");var a=function(e){n(t,e);function t(){return e!==null&&e.apply(this,arguments)||this}t.prototype._enable=function(){var s=this;var e=this._navigator.stateService.currentNode$.pipe(i.switchMap(function(e){return e.sequenceEdges$}));this._keyDownSubscription=this._container.keyboardService.keyDown$.pipe(i.withLatestFrom(e)).subscribe(function(e){var t=e[0],r=e[1];var n=null;switch(t.keyCode){case 38:n=u.EdgeDirection.Next;break;case 40:n=u.EdgeDirection.Prev;break;default:return}t.preventDefault();if(!t.altKey||t.shiftKey||!r.cached){return}for(var i=0,o=r.edges;i<o.length;i++){var a=o[i];if(a.data.direction===n){s._navigator.moveToKey$(a.to).subscribe(undefined,function(e){if(!(e instanceof c.AbortMapillaryError)){console.error(e)}});return}}})};t.prototype._disable=function(){this._keyDownSubscription.unsubscribe()};t.prototype._getConfiguration=function(e){return{keySequenceNavigation:e}};return t}(o.HandlerBase);r.KeySequenceNavigationHandler=a;r.default=a},{"../../Component":275,"../../Edge":276,"../../Error":277,"rxjs/operators":225}],312:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var i=e("rxjs/operators");var o=e("../../Component");var y=e("../../Edge");var a=e("../../Error");var s=function(o){n(e,o);function e(e,t,r,n){var i=o.call(this,e,t,r)||this;i._spatial=n;return i}e.prototype._enable=function(){var g=this;var e=this._navigator.stateService.currentNode$.pipe(i.switchMap(function(e){return e.spatialEdges$}));this._keyDownSubscription=this._container.keyboardService.keyDown$.pipe(i.withLatestFrom(e,this._navigator.stateService.currentState$)).subscribe(function(e){var t=e[0],r=e[1],n=e[2];var i=n.state.currentNode.pano;var o=null;switch(t.keyCode){case 37:o=t.shiftKey&&!i?y.EdgeDirection.TurnLeft:y.EdgeDirection.StepLeft;break;case 38:o=t.shiftKey&&!i?y.EdgeDirection.Pano:y.EdgeDirection.StepForward;break;case 39:o=t.shiftKey&&!i?y.EdgeDirection.TurnRight:y.EdgeDirection.StepRight;break;case 40:o=t.shiftKey&&!i?y.EdgeDirection.TurnU:y.EdgeDirection.StepBackward;break;default:return}t.preventDefault();if(t.altKey||!r.cached||t.shiftKey&&i){return}if(!i){g._moveDir(o,r)}else{var a={};a[y.EdgeDirection.StepBackward]=Math.PI;a[y.EdgeDirection.StepForward]=0;a[y.EdgeDirection.StepLeft]=Math.PI/2;a[y.EdgeDirection.StepRight]=-Math.PI/2;var s=g._rotationFromCamera(n.state.camera).phi;var u=g._spatial.wrapAngle(s+a[o]);var c=Math.PI/4;var h=r.edges.filter(function(e){return e.data.direction===y.EdgeDirection.Pano||e.data.direction===o});var l=Number.MAX_VALUE;var p=null;for(var f=0,d=h;f<d.length;f++){var v=d[f];var m=Math.abs(g._spatial.wrapAngle(v.data.worldMotionAzimuth-u));if(m<Math.min(l,c)){l=m;p=v.to}}if(p==null){return}g._moveToKey(p)}})};e.prototype._disable=function(){this._keyDownSubscription.unsubscribe()};e.prototype._getConfiguration=function(e){return{keySpatialNavigation:e}};e.prototype._moveDir=function(e,t){for(var r=0,n=t.edges;r<n.length;r++){var i=n[r];if(i.data.direction===e){this._moveToKey(i.to);return}}};e.prototype._moveToKey=function(e){this._navigator.moveToKey$(e).subscribe(undefined,function(e){if(!(e instanceof a.AbortMapillaryError)){console.error(e)}})};e.prototype._rotationFromCamera=function(e){var t=e.lookat.clone().sub(e.position);var r=t.clone().dot(e.up);var n=t.clone().sub(e.up.clone().multiplyScalar(r));var i=Math.atan2(n.y,n.x);var o=Math.PI/2-this._spatial.angleToPlane(t.toArray(),[0,0,1]);return{phi:i,theta:o}};return e}(o.HandlerBase);r.KeySpatialNavigationHandler=s;r.default=s},{"../../Component":275,"../../Edge":276,"../../Error":277,"rxjs/operators":225}],313:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var i=e("rxjs/operators");var o=e("../../Component");var a=function(o){n(e,o);function e(e,t,r,n){var i=o.call(this,e,t,r)||this;i._viewportCoords=n;return i}e.prototype._enable=function(){var s=this;this._keyDownSubscription=this._container.keyboardService.keyDown$.pipe(i.withLatestFrom(this._container.renderService.renderCamera$,this._navigator.stateService.currentTransform$)).subscribe(function(e){var t=e[0],r=e[1],n=e[2];if(t.altKey||t.shiftKey||t.ctrlKey||t.metaKey){return}var i=0;switch(t.key){case"+":i=1;break;case"-":i=-1;break;default:return}t.preventDefault();var o=s._viewportCoords.unprojectFromViewport(0,0,r.perspective);var a=n.projectBasic(o.toArray());s._navigator.stateService.zoomIn(i,a)})};e.prototype._disable=function(){this._keyDownSubscription.unsubscribe()};e.prototype._getConfiguration=function(e){return{keyZoom:e}};return e}(o.HandlerBase);r.KeyZoomHandler=a;r.default=a},{"../../Component":275,"rxjs/operators":225}],314:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var o=e("../../Component");var a=e("../../Geo");var i=function(i){n(e,i);function e(e,t,r){var n=i.call(this,e,t,r)||this;n._keyPlayHandler=new o.KeyPlayHandler(n,t,r);n._keySequenceNavigationHandler=new o.KeySequenceNavigationHandler(n,t,r);n._keySpatialNavigationHandler=new o.KeySpatialNavigationHandler(n,t,r,new a.Spatial);n._keyZoomHandler=new o.KeyZoomHandler(n,t,r,new a.ViewportCoords);return n}Object.defineProperty(e.prototype,"keyPlay",{get:function(){return this._keyPlayHandler},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"keySequenceNavigation",{get:function(){return this._keySequenceNavigationHandler},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"keySpatialNavigation",{get:function(){return this._keySpatialNavigationHandler},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"keyZoom",{get:function(){return this._keyZoomHandler},enumerable:true,configurable:true});e.prototype._activate=function(){var t=this;this._configurationSubscription=this._configuration$.subscribe(function(e){if(e.keyPlay){t._keyPlayHandler.enable()}else{t._keyPlayHandler.disable()}if(e.keySequenceNavigation){t._keySequenceNavigationHandler.enable()}else{t._keySequenceNavigationHandler.disable()}if(e.keySpatialNavigation){t._keySpatialNavigationHandler.enable()}else{t._keySpatialNavigationHandler.disable()}if(e.keyZoom){t._keyZoomHandler.enable()}else{t._keyZoomHandler.disable()}})};e.prototype._deactivate=function(){this._configurationSubscription.unsubscribe();this._keyPlayHandler.disable();this._keySequenceNavigationHandler.disable();this._keySpatialNavigationHandler.disable();this._keyZoomHandler.disable()};e.prototype._getDefaultConfiguration=function(){return{keyPlay:true,keySequenceNavigation:true,keySpatialNavigation:true,keyZoom:true}};e.componentName="keyboard";return e}(o.Component);r.KeyboardComponent=i;o.ComponentService.register(i);r.default=i},{"../../Component":275,"../../Geo":278}],315:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("./MarkerComponent");r.MarkerComponent=n.MarkerComponent;var i=e("./marker/SimpleMarker");r.SimpleMarker=i.SimpleMarker;var o=e("./marker/CircleMarker");r.CircleMarker=o.CircleMarker},{"./MarkerComponent":316,"./marker/CircleMarker":319,"./marker/SimpleMarker":321}],316:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var p=e("rxjs");var f=e("rxjs/operators");var C=e("three");var o=e("when");var a=e("../../Component");var d=e("../../Render");var s=e("../../Graph");var u=e("../../Geo");var i=function(i){n(E,i);function E(e,t,r){var n=i.call(this,e,t,r)||this;n._relativeGroundAltitude=-2;n._geoCoords=new u.GeoCoords;n._graphCalculator=new s.GraphCalculator;n._markerScene=new a.MarkerScene;n._markerSet=new a.MarkerSet;n._viewportCoords=new u.ViewportCoords;return n}E.prototype.add=function(e){this._markerSet.add(e)};E.prototype.get=function(e){return this._markerSet.get(e)};E.prototype.getAll=function(){return this._markerSet.getAll()};E.prototype.getMarkerIdAt=function(n){var i=this;return o.promise(function(t,r){i._container.renderService.renderCamera$.pipe(f.first(),f.map(function(e){var t=i._viewportCoords.canvasToViewport(n[0],n[1],i._container.element);var r=i._markerScene.intersectObjects(t,e.perspective);return r})).subscribe(function(e){t(e)},function(e){r(e)})})};E.prototype.has=function(e){return this._markerSet.has(e)};E.prototype.remove=function(e){this._markerSet.remove(e)};E.prototype.removeAll=function(){this._markerSet.removeAll()};E.prototype._activate=function(){var M=this;var e=this._navigator.stateService.currentState$.pipe(f.map(function(e){return e.state.camera.position.z+M._relativeGroundAltitude}),f.distinctUntilChanged(function(e,t){return Math.abs(e-t)<.01}),f.publishReplay(1),f.refCount());var t=p.combineLatest(e,this._navigator.stateService.reference$).pipe(f.first(),f.map(function(){}),f.publishReplay(1),f.refCount());var r=this._configuration$.pipe(f.map(function(e){return{visibleBBoxSize:Math.max(1,Math.min(200,e.visibleBBoxSize))}}));var n=this._navigator.stateService.currentNode$.pipe(f.map(function(e){return e.latLon}),f.publishReplay(1),f.refCount());var i=p.combineLatest(r,n).pipe(f.map(function(e){var t=e[0],r=e[1];return M._graphCalculator.boundingBoxCorners(r,t.visibleBBoxSize/2)}),f.publishReplay(1),f.refCount());var o=p.combineLatest(p.concat(p.of(this._markerSet),this._markerSet.changed$),i).pipe(f.map(function(e){var t=e[0],r=e[1];return t.search(r)}));this._setChangedSubscription=t.pipe(f.switchMap(function(){return o.pipe(f.withLatestFrom(M._navigator.stateService.reference$,e))})).subscribe(function(e){var t=e[0],r=e[1],n=e[2];var i=M._geoCoords;var o=M._markerScene;var a=o.markers;var s=Object.assign({},a);for(var u=0,c=t;u<c.length;u++){var h=c[u];if(h.id in a){delete s[h.id]}else{var l=i.geodeticToEnu(h.latLon.lat,h.latLon.lon,r.alt+n,r.lat,r.lon,r.alt);o.add(h,l)}}for(var p in s){if(!s.hasOwnProperty(p)){continue}o.remove(p)}});this._markersUpdatedSubscription=t.pipe(f.switchMap(function(){return M._markerSet.updated$.pipe(f.withLatestFrom(i,M._navigator.stateService.reference$,e))})).subscribe(function(e){var t=e[0],r=e[1],n=r[0],i=r[1],o=e[2],a=e[3];var s=M._geoCoords;var u=M._markerScene;for(var c=0,h=t;c<h.length;c++){var l=h[c];var p=u.has(l.id);var f=l.latLon.lat>n.lat&&l.latLon.lat<i.lat&&l.latLon.lon>n.lon&&l.latLon.lon<i.lon;if(f){var d=s.geodeticToEnu(l.latLon.lat,l.latLon.lon,o.alt+a,o.lat,o.lon,o.alt);u.add(l,d)}else if(!f&&p){u.remove(l.id)}}});this._referenceSubscription=this._navigator.stateService.reference$.pipe(f.skip(1),f.withLatestFrom(e)).subscribe(function(e){var t=e[0],r=e[1];var n=M._geoCoords;var i=M._markerScene;for(var o=0,a=i.getAll();o<a.length;o++){var s=a[o];var u=n.geodeticToEnu(s.latLon.lat,s.latLon.lon,t.alt+r,t.lat,t.lon,t.alt);i.update(s.id,u)}});this._adjustHeightSubscription=e.pipe(f.skip(1),f.withLatestFrom(this._navigator.stateService.reference$,n)).subscribe(function(e){var t=e[0],r=e[1],n=e[2];var i=M._geoCoords;var o=M._markerScene;var a=i.geodeticToEnu(n.lat,n.lon,r.alt+t,r.lat,r.lon,r.alt);for(var s=0,u=o.getAll();s<u.length;s++){var c=u[s];var h=i.geodeticToEnu(c.latLon.lat,c.latLon.lon,r.alt+t,r.lat,r.lon,r.alt);var l=h[0]-a[0];var p=h[1]-a[1];var f=Math.sqrt(l*l+p*p);if(f>50){continue}o.lerpAltitude(c.id,t,Math.min(1,Math.max(0,1.2-1.2*f/50)))}});this._renderSubscription=this._navigator.stateService.currentState$.pipe(f.map(function(e){var t=M._markerScene;return{name:M._name,render:{frameId:e.id,needsRender:t.needsRender,render:t.render.bind(t),stage:d.GLRenderStage.Foreground}}})).subscribe(this._container.glRenderer.render$);var a=p.combineLatest(this._container.renderService.renderCamera$,this._container.mouseService.mouseMove$).pipe(f.map(function(e){var t=e[0],r=e[1];var n=M._container.element;var i=M._viewportCoords.canvasPosition(r,n),o=i[0],a=i[1];var s=M._viewportCoords.canvasToViewport(o,a,n);var u=M._markerScene.intersectObjects(s,t.perspective);return u}),f.publishReplay(1),f.refCount());var s=this._container.mouseService.filtered$(this._name,this._container.mouseService.mouseDragStart$).pipe(f.map(function(e){return true}));var u=this._container.mouseService.filtered$(this._name,this._container.mouseService.mouseDragEnd$).pipe(f.map(function(e){return false}));var c=p.merge(s,u).pipe(f.startWith(false));this._dragEventSubscription=p.merge(s.pipe(f.withLatestFrom(a)),p.combineLatest(u,p.of(null))).pipe(f.startWith([false,null]),f.pairwise()).subscribe(function(e){var t=e[0],r=e[1];var n=r[0];var i=n?E.dragstart:E.dragend;var o=n?r[1]:t[1];var a=M._markerScene.get(o);var s={marker:a,target:M,type:i};M.fire(i,s)});var h=p.merge(this._container.mouseService.mouseDown$.pipe(f.map(function(e){return true})),this._container.mouseService.documentMouseUp$.pipe(f.map(function(e){return false}))).pipe(f.startWith(false));this._mouseClaimSubscription=p.combineLatest(this._container.mouseService.active$,a.pipe(f.distinctUntilChanged()),h,c).pipe(f.map(function(e){var t=e[0],r=e[1],n=e[2],i=e[3];return!t&&r!=null&&n||i}),f.distinctUntilChanged()).subscribe(function(e){if(e){M._container.mouseService.claimMouse(M._name,1);M._container.mouseService.claimWheel(M._name,1)}else{M._container.mouseService.unclaimMouse(M._name);M._container.mouseService.unclaimWheel(M._name)}});var l=this._container.mouseService.filtered$(this._name,this._container.mouseService.mouseDragStart$).pipe(f.withLatestFrom(a,this._container.renderService.renderCamera$),f.map(function(e){var t=e[0],r=e[1],n=e[2];var i=M._markerScene.get(r);var o=M._container.element;var a=M._viewportCoords.projectToCanvas(i.geometry.position.toArray(),o,n.perspective),s=a[0],u=a[1];var c=M._viewportCoords.canvasPosition(t,o),h=c[0],l=c[1];var p=[h-s,l-u];return[i,p,n]}),f.publishReplay(1),f.refCount());this._updateMarkerSubscription=this._container.mouseService.filtered$(this._name,this._container.mouseService.mouseDrag$).pipe(f.withLatestFrom(l,this._navigator.stateService.reference$,r)).subscribe(function(e){var t=e[0],r=e[1],n=r[0],i=r[1],o=r[2],a=e[2],s=e[3];if(!M._markerScene.has(n.id)){return}var u=M._container.element;var c=M._viewportCoords.canvasPosition(t,u),h=c[0],l=c[1];var p=h-i[0];var f=l-i[1];var d=M._viewportCoords.canvasToViewport(p,f,u),v=d[0],m=d[1];var g=new C.Vector3(v,m,1).unproject(o.perspective).sub(o.perspective.position).normalize();var y=Math.min(M._relativeGroundAltitude/g.z,s.visibleBBoxSize/2-.1);if(y<0){return}var _=g.clone().multiplyScalar(y).add(o.perspective.position);_.z=o.perspective.position.z+M._relativeGroundAltitude;var b=M._geoCoords.enuToGeodetic(_.x,_.y,_.z,a.lat,a.lon,a.alt),x=b[0],w=b[1];M._markerScene.update(n.id,_.toArray(),{lat:x,lon:w});M._markerSet.update(n);var S={marker:n,target:M,type:E.changed};M.fire(E.changed,S)})};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.componentName="marker";E.changed="changed";E.dragstart="dragstart";E.dragend="dragend";return E}(a.Component);r.MarkerComponent=i;a.ComponentService.register(i);r.default=i},{"../../Component":275,"../../Geo":278,"../../Graph":279,"../../Render":281,rxjs:27,"rxjs/operators":225,three:226,when:272}],317:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var u=e("three");var n=function(){function e(e,t){this._needsRender=false;this._interactiveObjects=[];this._markers={};this._objectMarkers={};this._raycaster=!!t?t:new u.Raycaster;this._scene=!!e?e:new u.Scene}Object.defineProperty(e.prototype,"markers",{get:function(){return this._markers},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"needsRender",{get:function(){return this._needsRender},enumerable:true,configurable:true});e.prototype.add=function(e,t){if(e.id in this._markers){this._dispose(e.id)}e.createGeometry(t);this._scene.add(e.geometry);this._markers[e.id]=e;for(var r=0,n=e.getInteractiveObjects();r<n.length;r++){var i=n[r];this._interactiveObjects.push(i);this._objectMarkers[i.uuid]=e.id}this._needsRender=true};e.prototype.clear=function(){for(var e in this._markers){if(!this._markers.hasOwnProperty){continue}this._dispose(e)}this._needsRender=true};e.prototype.get=function(e){return this._markers[e]};e.prototype.getAll=function(){var t=this;return Object.keys(this._markers).map(function(e){return t._markers[e]})};e.prototype.has=function(e){return e in this._markers};e.prototype.intersectObjects=function(e,t){var r=e[0],n=e[1];this._raycaster.setFromCamera(new u.Vector2(r,n),t);var i=this._raycaster.intersectObjects(this._interactiveObjects);for(var o=0,a=i;o<a.length;o++){var s=a[o];if(s.object.uuid in this._objectMarkers){return this._objectMarkers[s.object.uuid]}}return null};e.prototype.lerpAltitude=function(e,t,r){if(!(e in this._markers)){return}this._markers[e].lerpAltitude(t,r);this._needsRender=true};e.prototype.remove=function(e){if(!(e in this._markers)){return}this._dispose(e);this._needsRender=true};e.prototype.render=function(e,t){t.render(this._scene,e);this._needsRender=false};e.prototype.update=function(e,t,r){if(!(e in this._markers)){return}var n=this._markers[e];n.updatePosition(t,r);this._needsRender=true};e.prototype._dispose=function(e){var t=this._markers[e];this._scene.remove(t.geometry);for(var r=0,n=t.getInteractiveObjects();r<n.length;r++){var i=n[r];var o=this._interactiveObjects.indexOf(i);if(o!==-1){this._interactiveObjects.splice(o,1)}else{console.warn("Object does not exist ("+i.id+") for "+e)}delete this._objectMarkers[i.uuid]}t.disposeGeometry();delete this._markers[e]};return e}();r.MarkerScene=n;r.default=n},{three:226}],318:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("rbush");var i=e("rxjs");var o=function(){function e(){this._hash={};this._index=n(16,[".lon",".lat",".lon",".lat"]);this._indexChanged$=new i.Subject;this._updated$=new i.Subject}Object.defineProperty(e.prototype,"changed$",{get:function(){return this._indexChanged$},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"updated$",{get:function(){return this._updated$},enumerable:true,configurable:true});e.prototype.add=function(e){var t=[];var r=this._hash;var n=this._index;for(var i=0,o=e;i<o.length;i++){var a=o[i];var s=a.id;if(s in r){n.remove(r[s]);t.push(a)}var u={lat:a.latLon.lat,lon:a.latLon.lon,marker:a};r[s]=u;n.insert(u)}if(t.length>0){this._updated$.next(t)}if(e.length>t.length){this._indexChanged$.next(this)}};e.prototype.has=function(e){return e in this._hash};e.prototype.get=function(e){return this.has(e)?this._hash[e].marker:undefined};e.prototype.getAll=function(){return this._index.all().map(function(e){return e.marker})};e.prototype.remove=function(e){var t=this._hash;var r=this._index;var n=false;for(var i=0,o=e;i<o.length;i++){var a=o[i];if(!(a in t)){continue}var s=t[a];r.remove(s);delete t[a];n=true}if(n){this._indexChanged$.next(this)}};e.prototype.removeAll=function(){this._hash={};this._index.clear();this._indexChanged$.next(this)};e.prototype.search=function(e){var t=e[0],r=e[1];return this._index.search({maxX:r.lon,maxY:r.lat,minX:t.lon,minY:t.lat}).map(function(e){return e.marker})};e.prototype.update=function(e){var t=this._hash;var r=this._index;var n=e.id;if(!(n in t)){return}r.remove(t[n]);var i={lat:e.latLon.lat,lon:e.latLon.lon,marker:e};t[n]=i;r.insert(i)};return e}();r.MarkerSet=o;r.default=o},{rbush:26,rxjs:27}],319:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var o=e("three");var i=e("../../../Component");var a=function(i){n(e,i);function e(e,t,r){var n=i.call(this,e,t)||this;r=!!r?r:{};n._color=r.color!=null?r.color:16777215;n._opacity=r.opacity!=null?r.opacity:.4;n._radius=r.radius!=null?r.radius:1;return n}e.prototype._createGeometry=function(e){var t=new o.Mesh(new o.CircleGeometry(this._radius,16),new o.MeshBasicMaterial({color:this._color,opacity:this._opacity,transparent:true}));t.up.fromArray([0,0,1]);t.renderOrder=-1;var r=new o.Object3D;r.add(t);r.position.fromArray(e);this._geometry=r};e.prototype._disposeGeometry=function(){for(var e=0,t=this._geometry.children;e<t.length;e++){var r=t[e];r.geometry.dispose();r.material.dispose()}};e.prototype._getInteractiveObjects=function(){return[]};return e}(i.Marker);r.CircleMarker=a;r.default=a},{"../../../Component":275,three:226}],320:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=function(){function e(e,t){this._id=e;this._latLon=t}Object.defineProperty(e.prototype,"id",{get:function(){return this._id},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"geometry",{get:function(){return this._geometry},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"latLon",{get:function(){return this._latLon},enumerable:true,configurable:true});e.prototype.createGeometry=function(e){if(!!this._geometry){return}this._createGeometry(e);this._geometry.updateMatrixWorld(true)};e.prototype.disposeGeometry=function(){if(!this._geometry){return}this._disposeGeometry();this._geometry=undefined};e.prototype.getInteractiveObjects=function(){if(!this._geometry){return[]}return this._getInteractiveObjects()};e.prototype.lerpAltitude=function(e,t){if(!this._geometry){return}this._geometry.position.z=(1-t)*this._geometry.position.z+t*e};e.prototype.updatePosition=function(e,t){if(!!t){this._latLon.lat=t.lat;this._latLon.lon=t.lon}if(!this._geometry){return}this._geometry.position.fromArray(e);this._geometry.updateMatrixWorld(true)};return e}();r.Marker=n;r.default=n},{}],321:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var w=e("three");var i=e("../../../Component");var o=function(i){n(e,i);function e(e,t,r){var n=i.call(this,e,t)||this;r=!!r?r:{};n._ballColor=r.ballColor!=null?r.ballColor:16711680;n._ballOpacity=r.ballOpacity!=null?r.ballOpacity:.8;n._circleToRayAngle=2;n._color=r.color!=null?r.color:16711680;n._interactive=!!r.interactive;n._opacity=r.opacity!=null?r.opacity:.4;n._radius=r.radius!=null?r.radius:1;return n}e.prototype._createGeometry=function(e){var t=this._radius;var r=new w.Mesh(this._markerGeometry(t,8,8),new w.MeshBasicMaterial({color:this._color,opacity:this._opacity,transparent:true}));r.renderOrder=1;var n=new w.Mesh(new w.SphereGeometry(t/2,8,8),new w.MeshBasicMaterial({color:this._ballColor,opacity:this._ballOpacity,transparent:true}));n.position.z=this._markerHeight(t);var i=new w.Object3D;i.add(n);i.add(r);i.position.fromArray(e);this._geometry=i};e.prototype._disposeGeometry=function(){for(var e=0,t=this._geometry.children;e<t.length;e++){var r=t[e];r.geometry.dispose();r.material.dispose()}};e.prototype._getInteractiveObjects=function(){return this._interactive?[this._geometry.children[0]]:[]};e.prototype._markerHeight=function(e){var t=Math.tan(Math.PI-this._circleToRayAngle);return e*Math.sqrt(1+t*t)};e.prototype._markerGeometry=function(e,t,r){var n=new w.Geometry;t=Math.max(3,Math.floor(t)||8);r=Math.max(2,Math.floor(r)||6);var i=this._markerHeight(e);var o=[];for(var a=0;a<=r;++a){var s=[];for(var u=0;u<=t;++u){var c=u/t*Math.PI*2;var h=a/r*Math.PI;var l=void 0;if(h<this._circleToRayAngle){l=e}else{var p=Math.tan(h-this._circleToRayAngle);l=e*Math.sqrt(1+p*p)}var f=new w.Vector3;f.x=l*Math.cos(c)*Math.sin(h);f.y=l*Math.sin(c)*Math.sin(h);f.z=l*Math.cos(h)+i;n.vertices.push(f);s.push(n.vertices.length-1)}o.push(s)}for(var a=0;a<r;++a){for(var u=0;u<t;++u){var d=o[a][u+1];var v=o[a][u];var m=o[a+1][u];var g=o[a+1][u+1];var y=n.vertices[d].clone().normalize();var _=n.vertices[v].clone().normalize();var b=n.vertices[m].clone().normalize();var x=n.vertices[g].clone().normalize();n.faces.push(new w.Face3(d,v,g,[y,_,x]));n.faces.push(new w.Face3(v,m,g,[_.clone(),b,x.clone()]))}}n.computeFaceNormals();n.boundingSphere=new w.Sphere(new w.Vector3,e+i);return n};return e}(i.Marker);r.SimpleMarker=o;r.default=o},{"../../../Component":275,three:226}],322:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var i=e("rxjs");var o=e("rxjs/operators");var d=e("../../Component");var a=function(a){n(e,a);function e(e,t,r,n,i){var o=a.call(this,e,t,r)||this;o._spatial=i;o._viewportCoords=n;return o}e.prototype._enable=function(){var f=this;var e=this._navigator.stateService.currentState$.pipe(o.map(function(e){return e.state.alpha<1}));this._bounceSubscription=i.combineLatest(e,this._navigator.stateService.inTranslation$,this._container.mouseService.active$,this._container.touchService.active$).pipe(o.map(function(e){return e[0]||e[1]||e[2]||e[3]}),o.distinctUntilChanged(),o.switchMap(function(e){return e?i.empty():i.combineLatest(f._container.renderService.renderCamera$,f._navigator.stateService.currentTransform$.pipe(o.first()))})).subscribe(function(e){var t=e[0],r=e[1];if(!r.hasValidScale&&t.camera.focal<.1){return}if(t.perspective.aspect===0||t.perspective.aspect===Number.POSITIVE_INFINITY){return}var n=d.ImageBoundary.viewportDistances(r,t.perspective,f._viewportCoords);if(Math.max.apply(Math,n)<.01){return}var i=n[1]-n[3];var o=n[0]-n[2];var a=f._viewportCoords.unprojectFromViewport(0,0,t.perspective).sub(t.perspective.position);var s=f._viewportCoords.unprojectFromViewport(i,0,t.perspective).sub(t.perspective.position);var u=f._viewportCoords.unprojectFromViewport(0,o,t.perspective).sub(t.perspective.position);var c=(i>0?1:-1)*s.angleTo(a);var h=(o>0?1:-1)*u.angleTo(a);var l=Math.PI/60;var p=.1;c=f._spatial.clamp(p*c,-l,l);h=f._spatial.clamp(p*h,-l,l);f._navigator.stateService.rotateUnbounded({phi:c,theta:h})})};e.prototype._disable=function(){this._bounceSubscription.unsubscribe()};e.prototype._getConfiguration=function(){return{}};return e}(d.HandlerBase);r.BounceHandler=a;r.default=a},{"../../Component":275,rxjs:27,"rxjs/operators":225}],323:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var i=e("rxjs");var a=e("rxjs/operators");var o=e("../../Component");var s=function(o){n(e,o);function e(e,t,r,n){var i=o.call(this,e,t,r)||this;i._viewportCoords=n;return i}e.prototype._enable=function(){var l=this;this._zoomSubscription=i.merge(this._container.mouseService.filtered$(this._component.name,this._container.mouseService.dblClick$),this._container.touchService.doubleTap$.pipe(a.map(function(e){var t=e.touches[0];return{clientX:t.clientX,clientY:t.clientY,shiftKey:e.shiftKey}}))).pipe(a.withLatestFrom(this._container.renderService.renderCamera$,this._navigator.stateService.currentTransform$)).subscribe(function(e){var t=e[0],r=e[1],n=e[2];var i=l._container.element;var o=l._viewportCoords.canvasPosition(t,i),a=o[0],s=o[1];var u=l._viewportCoords.unprojectFromCanvas(a,s,i,r.perspective);var c=n.projectBasic(u.toArray());var h=!!t.shiftKey?-1:1;l._navigator.stateService.zoomIn(h,c)})};e.prototype._disable=function(){this._zoomSubscription.unsubscribe()};e.prototype._getConfiguration=function(e){return{doubleClickZoom:e}};return e}(o.HandlerBase);r.DoubleClickZoomHandler=s;r.default=s},{"../../Component":275,rxjs:27,"rxjs/operators":225}],324:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var s=e("rxjs");var u=e("rxjs/operators");var _=e("../../Component");var i=function(a){n(e,a);function e(e,t,r,n,i){var o=a.call(this,e,t,r)||this;o._spatial=i;o._viewportCoords=n;return o}e.prototype._enable=function(){var y=this;var e=this._container.mouseService.filtered$(this._component.name,this._container.mouseService.mouseDragStart$).pipe(u.map(function(){return true}),u.share());var t=this._container.mouseService.filtered$(this._component.name,this._container.mouseService.mouseDragEnd$).pipe(u.map(function(){return false}),u.share());this._activeMouseSubscription=s.merge(e,t).subscribe(this._container.mouseService.activate$);var r=s.merge(e,t).pipe(u.switchMap(function(e){return e?y._container.mouseService.documentMouseMove$:s.empty()}));this._preventDefaultSubscription=s.merge(r,this._container.touchService.touchMove$).subscribe(function(e){e.preventDefault()});var n=this._container.touchService.singleTouchDragStart$.pipe(u.map(function(){return true}));var i=this._container.touchService.singleTouchDragEnd$.pipe(u.map(function(){return false}));this._activeTouchSubscription=s.merge(n,i).subscribe(this._container.touchService.activate$);var o=this._navigator.stateService.currentState$.pipe(u.map(function(e){return e.state.currentNode.fullPano||e.state.nodesAhead<1}),u.distinctUntilChanged(),u.switchMap(function(e){if(!e){return s.empty()}var t=_.MouseOperator.filteredPairwiseMouseDrag$(y._component.name,y._container.mouseService);var r=s.merge(y._container.touchService.singleTouchDragStart$,y._container.touchService.singleTouchDrag$,y._container.touchService.singleTouchDragEnd$.pipe(u.map(function(){return null}))).pipe(u.map(function(e){return e!=null&&e.touches.length>0?e.touches[0]:null}),u.pairwise(),u.filter(function(e){return e[0]!=null&&e[1]!=null}));return s.merge(t,r)}),u.withLatestFrom(this._container.renderService.renderCamera$,this._navigator.stateService.currentTransform$),u.map(function(e){var t=e[0],r=e[1],n=e[2];var i=t[0];var o=t[1];var a=o.clientX-i.clientX;var s=o.clientY-i.clientY;var u=y._container.element;var c=y._viewportCoords.canvasPosition(o,u),h=c[0],l=c[1];var p=y._viewportCoords.unprojectFromCanvas(h,l,u,r.perspective).sub(r.perspective.position);var f=y._viewportCoords.unprojectFromCanvas(h-a,l,u,r.perspective).sub(r.perspective.position);var d=y._viewportCoords.unprojectFromCanvas(h,l-s,u,r.perspective).sub(r.perspective.position);var v=(a>0?1:-1)*f.angleTo(p);var m=(s>0?-1:1)*d.angleTo(p);var g=_.ImageBoundary.viewportDistances(n,r.perspective,y._viewportCoords);if(g[0]>0&&m<0){m/=Math.max(1,200*g[0])}if(g[2]>0&&m>0){m/=Math.max(1,200*g[2])}if(g[1]>0&&v<0){v/=Math.max(1,200*g[1])}if(g[3]>0&&v>0){v/=Math.max(1,200*g[3])}return{phi:v,theta:m}}),u.share());this._rotateWithoutInertiaSubscription=o.subscribe(function(e){y._navigator.stateService.rotateWithoutInertia(e)});this._rotateSubscription=o.pipe(u.scan(function(e,t){y._drainBuffer(e);e.push([Date.now(),t]);return e},[]),u.sample(s.merge(this._container.mouseService.filtered$(this._component.name,this._container.mouseService.mouseDragEnd$),this._container.touchService.singleTouchDragEnd$)),u.map(function(e){var t=y._drainBuffer(e.slice());var r={phi:0,theta:0};for(var n=0,i=t;n<i.length;n++){var o=i[n];r.phi+=o[1].phi;r.theta+=o[1].theta}var a=t.length;if(a>0){r.phi/=a;r.theta/=a}var s=Math.PI/18;r.phi=y._spatial.clamp(r.phi,-s,s);r.theta=y._spatial.clamp(r.theta,-s,s);return r})).subscribe(function(e){y._navigator.stateService.rotate(e)})};e.prototype._disable=function(){this._activeMouseSubscription.unsubscribe();this._activeTouchSubscription.unsubscribe();this._preventDefaultSubscription.unsubscribe();this._rotateSubscription.unsubscribe();this._rotateWithoutInertiaSubscription.unsubscribe();this._activeMouseSubscription=null;this._activeTouchSubscription=null;this._preventDefaultSubscription=null;this._rotateSubscription=null};e.prototype._getConfiguration=function(e){return{dragPan:e}};e.prototype._drainBuffer=function(e){var t=50;var r=Date.now();while(e.length>0&&r-e[0][0]>t){e.shift()}return e};return e}(_.HandlerBase);r.DragPanHandler=i;r.default=i},{"../../Component":275,rxjs:27,"rxjs/operators":225}],325:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var d=e("three");var i=e("rxjs");var o=e("rxjs/operators");var s=e("../../Component");var u=e("../../State");var a=function(a){n(e,a);function e(e,t,r,n,i){var o=a.call(this,e,t,r)||this;o._spatial=i;o._viewportCoords=n;return o}e.prototype._enable=function(){var l=this;var e=this._navigator.stateService.state$.pipe(o.map(function(e){return e===u.State.Earth}),o.share());this._preventDefaultSubscription=e.pipe(o.switchMap(function(e){return e?l._container.mouseService.mouseWheel$:i.empty()})).subscribe(function(e){e.preventDefault()});this._truckSubscription=e.pipe(o.switchMap(function(e){if(!e){return i.empty()}return s.MouseOperator.filteredPairwiseMouseDrag$(l._component.name,l._container.mouseService).pipe(o.filter(function(e){var t=e[0],r=e[1];return!(t.ctrlKey&&r.ctrlKey)}))}),o.withLatestFrom(this._container.renderService.renderCamera$,this._navigator.stateService.currentTransform$),o.map(function(e){var t=e[0],r=t[0],n=t[1],i=e[1],o=e[2];var a=[0,0,1];var s=o.unprojectBasic([.5,.5],0);s[2]-=2;var u=l._planeIntersection(n,a,s,i.perspective,l._container.element);var c=l._planeIntersection(r,a,s,i.perspective,l._container.element);if(!u||!c){return null}var h=(new d.Vector3).subVectors(u,c).multiplyScalar(-1).toArray();return h}),o.filter(function(e){return!!e})).subscribe(function(e){l._navigator.stateService.truck(e)});this._orbitSubscription=e.pipe(o.switchMap(function(e){if(!e){return i.empty()}return s.MouseOperator.filteredPairwiseMouseDrag$(l._component.name,l._container.mouseService).pipe(o.filter(function(e){var t=e[0],r=e[1];return t.ctrlKey&&r.ctrlKey}))}),o.map(function(e){var t=e[0],r=e[1];var n=l._eventToViewport(r,l._container.element),i=n[0],o=n[1];var a=l._eventToViewport(t,l._container.element),s=a[0],u=a[1];var c=(s-i)*Math.PI;var h=(o-u)*Math.PI/2;return{phi:c,theta:h}})).subscribe(function(e){l._navigator.stateService.orbit(e)});this._dollySubscription=e.pipe(o.switchMap(function(e){if(!e){return i.empty()}return l._container.mouseService.filteredWheel$(l._component.name,l._container.mouseService.mouseWheel$)}),o.map(function(e){var t=e.deltaY;if(e.deltaMode===1){t=40*t}else if(e.deltaMode===2){t=800*t}var r=l._viewportCoords.containerToCanvas(l._container.element);return-t/r[1]})).subscribe(function(e){l._navigator.stateService.dolly(e)})};e.prototype._disable=function(){this._dollySubscription.unsubscribe();this._orbitSubscription.unsubscribe();this._preventDefaultSubscription.unsubscribe();this._truckSubscription.unsubscribe()};e.prototype._getConfiguration=function(){return{}};e.prototype._eventToViewport=function(e,t){var r=this._viewportCoords.canvasPosition(e,t);return this._viewportCoords.canvasToViewport(r[0],r[1],t)};e.prototype._planeIntersection=function(e,t,r,n,i){var o=this._viewportCoords.canvasPosition(e,i),a=o[0],s=o[1];var u=this._viewportCoords.unprojectFromCanvas(a,s,i,n).sub(n.position).normalize();if(Math.abs(this._spatial.angleToPlane(u.toArray(),t))<Math.PI/90){return null}var c=n.position.clone();var h=(new d.Vector3).fromArray(t);var l=(new d.Vector3).fromArray(r);var p=(new d.Vector3).subVectors(l,c).dot(h)/u.clone().dot(h);var f=(new d.Vector3).addVectors(c,u.multiplyScalar(p));if(this._viewportCoords.worldToCamera(f.toArray(),n)[2]>0){return null}return f};return e}(s.HandlerBase);r.EarthControlHandler=a;r.default=a},{"../../Component":275,"../../State":282,rxjs:27,"rxjs/operators":225,three:226}],326:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var $=e("../../../src/Geo");function z(e){var t=[];var r=[[0,0],[1,0],[1,1],[0,1]];var n=[[1,0],[0,1],[-1,0],[0,-1]];for(var i=0;i<4;++i){var o=r[i];var a=n[i];for(var s=0;s<e;++s){t.push([o[0]+a[0]*s/e,o[1]+a[1]*s/e])}}return t}function U(e,t){return e>=-1&&e<=1&&t>=-1&&t<=1}function G(e,t){return e>=0&&e<=1&&t>=0&&t<=1}function n(t,r,n){var e=z(100);var i=e.map(function(e){return n.basicToViewportSafe(e[0],e[1],t,r)});var o=[];var a=[{x:-1,y:1},{x:1,y:1},{x:1,y:-1},{x:-1,y:-1}];var s=[false,false,false,false];for(var u=0;u<i.length;u++){var c=i[u];var h=i[(u+1)%i.length];if(c===null){continue}if(h===null){if(U(c[0],c[1])){o.push(c)}continue}var l=c[0],p=c[1];var f=h[0],d=h[1];if(U(l,p)){if(U(f,d)){o.push(c)}else{for(var v=0;v<4;v++){var m={p1:{x:l,y:p},p2:{x:f,y:d}};var g={p1:a[v],p2:a[(v+1)%4]};var y=$.Lines.segmentsIntersect(m,g);if(y){var _=$.Lines.segmentIntersection(m,g);o.push(c,[_.x,_.y]);s[v]=true}}}}}var b=n.viewportToBasic(-1,1,t,r),x=b[0],w=b[1];var S=n.viewportToBasic(1,1,t,r),M=S[0],E=S[1];var C=n.viewportToBasic(1,-1,t,r),T=C[0],O=C[1];var P=n.viewportToBasic(-1,-1,t,r),A=P[0],j=P[1];if(G(x,w)){s[3]=s[0]=true}if(G(M,E)){s[0]=s[1]=true}if(G(T,O)){s[1]=s[2]=true}if(G(A,j)){s[2]=s[3]=true}var R=[-1,-1,1,1];for(var L=0,I=o;L<I.length;L++){var N=I[L];var k=N[0];var D=N[1];if(k>R[1]){R[1]=k}if(k<R[3]){R[3]=k}if(D>R[0]){R[0]=D}if(D<R[2]){R[2]=D}}var B=[1,1,-1,-1];var F=[];for(var v=0;v<4;v++){if(s[v]){F.push(0);continue}F.push(Math.abs(B[v]-R[v]))}return F}r.viewportDistances=n},{"../../../src/Geo":278}],327:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var s=e("../../Component");var u=e("../../Geo");var i=function(a){n(e,a);function e(e,t,r){var n=a.call(this,e,t,r)||this;var i=new u.Spatial;var o=new u.ViewportCoords;n._bounceHandler=new s.BounceHandler(n,t,r,o,i);n._doubleClickZoomHandler=new s.DoubleClickZoomHandler(n,t,r,o);n._dragPanHandler=new s.DragPanHandler(n,t,r,o,i);n._earthControlHandler=new s.EarthControlHandler(n,t,r,o,i);n._scrollZoomHandler=new s.ScrollZoomHandler(n,t,r,o);n._touchZoomHandler=new s.TouchZoomHandler(n,t,r,o);return n}Object.defineProperty(e.prototype,"doubleClickZoom",{get:function(){return this._doubleClickZoomHandler},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"dragPan",{get:function(){return this._dragPanHandler},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"scrollZoom",{get:function(){return this._scrollZoomHandler},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"touchZoom",{get:function(){return this._touchZoomHandler},enumerable:true,configurable:true});e.prototype._activate=function(){var t=this;this._bounceHandler.enable();this._earthControlHandler.enable();this._configurationSubscription=this._configuration$.subscribe(function(e){if(e.doubleClickZoom){t._doubleClickZoomHandler.enable()}else{t._doubleClickZoomHandler.disable()}if(e.dragPan){t._dragPanHandler.enable()}else{t._dragPanHandler.disable()}if(e.scrollZoom){t._scrollZoomHandler.enable()}else{t._scrollZoomHandler.disable()}if(e.touchZoom){t._touchZoomHandler.enable()}else{t._touchZoomHandler.disable()}});this._container.mouseService.claimMouse(this._name,0)};e.prototype._deactivate=function(){this._container.mouseService.unclaimMouse(this._name);this._configurationSubscription.unsubscribe();this._bounceHandler.disable();this._doubleClickZoomHandler.disable();this._dragPanHandler.disable();this._earthControlHandler.disable();this._scrollZoomHandler.disable();this._touchZoomHandler.disable()};e.prototype._getDefaultConfiguration=function(){return{doubleClickZoom:false,dragPan:true,scrollZoom:true,touchZoom:true}};e.componentName="mouse";return e}(s.Component);r.MouseComponent=i;s.ComponentService.register(i);r.default=i},{"../../Component":275,"../../Geo":278}],328:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var i=e("rxjs/operators");var o=e("../../Component");var a=function(o){n(e,o);function e(e,t,r,n){var i=o.call(this,e,t,r)||this;i._viewportCoords=n;return i}e.prototype._enable=function(){var f=this;this._container.mouseService.claimWheel(this._component.name,0);this._preventDefaultSubscription=this._container.mouseService.mouseWheel$.subscribe(function(e){e.preventDefault()});this._zoomSubscription=this._container.mouseService.filteredWheel$(this._component.name,this._container.mouseService.mouseWheel$).pipe(i.withLatestFrom(this._navigator.stateService.currentState$,function(e,t){return[e,t]}),i.filter(function(e){var t=e[1].state;return t.currentNode.fullPano||t.nodesAhead<1}),i.map(function(e){return e[0]}),i.withLatestFrom(this._container.renderService.renderCamera$,this._navigator.stateService.currentTransform$,function(e,t,r){return[e,t,r]})).subscribe(function(e){var t=e[0];var r=e[1];var n=e[2];var i=f._container.element;var o=f._viewportCoords.canvasPosition(t,i),a=o[0],s=o[1];var u=f._viewportCoords.unprojectFromCanvas(a,s,i,r.perspective);var c=n.projectBasic(u.toArray());var h=t.deltaY;if(t.deltaMode===1){h=40*h}else if(t.deltaMode===2){h=800*h}var l=f._viewportCoords.containerToCanvas(i);var p=-3*h/l[1];f._navigator.stateService.zoomIn(p,c)})};e.prototype._disable=function(){this._container.mouseService.unclaimWheel(this._component.name);this._preventDefaultSubscription.unsubscribe();this._zoomSubscription.unsubscribe();this._preventDefaultSubscription=null;this._zoomSubscription=null};e.prototype._getConfiguration=function(e){return{scrollZoom:e}};return e}(o.HandlerBase);r.ScrollZoomHandler=a;r.default=a},{"../../Component":275,"rxjs/operators":225}],329:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var i=e("rxjs");var a=e("rxjs/operators");var o=e("../../Component");var s=function(o){n(e,o);function e(e,t,r,n){var i=o.call(this,e,t,r)||this;i._viewportCoords=n;return i}e.prototype._enable=function(){var d=this;this._preventDefaultSubscription=this._container.touchService.pinch$.subscribe(function(e){e.originalEvent.preventDefault()});var e=this._container.touchService.pinchStart$.pipe(a.map(function(e){return true}));var t=this._container.touchService.pinchEnd$.pipe(a.map(function(e){return false}));this._activeSubscription=i.merge(e,t).subscribe(this._container.touchService.activate$);this._zoomSubscription=this._container.touchService.pinch$.pipe(a.withLatestFrom(this._navigator.stateService.currentState$),a.filter(function(e){var t=e[1].state;return t.currentNode.fullPano||t.nodesAhead<1}),a.map(function(e){return e[0]}),a.withLatestFrom(this._container.renderService.renderCamera$,this._navigator.stateService.currentTransform$)).subscribe(function(e){var t=e[0],r=e[1],n=e[2];var i=d._container.element;var o=d._viewportCoords.canvasPosition(t,i),a=o[0],s=o[1];var u=d._viewportCoords.unprojectFromCanvas(a,s,i,r.perspective);var c=n.projectBasic(u.toArray());var h=d._viewportCoords.containerToCanvas(i),l=h[0],p=h[1];var f=3*t.distanceChange/Math.min(l,p);d._navigator.stateService.zoomIn(f,c)})};e.prototype._disable=function(){this._activeSubscription.unsubscribe();this._preventDefaultSubscription.unsubscribe();this._zoomSubscription.unsubscribe();this._preventDefaultSubscription=null;this._zoomSubscription=null};e.prototype._getConfiguration=function(e){return{touchZoom:e}};return e}(o.HandlerBase);r.TouchZoomHandler=s;r.default=s},{"../../Component":275,rxjs:27,"rxjs/operators":225}],330:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("./popup/Popup");r.Popup=n.Popup;var i=e("./PopupComponent");r.PopupComponent=i.PopupComponent},{"./PopupComponent":331,"./popup/Popup":332}],331:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var a=e("rxjs");var i=e("rxjs/operators");var o=e("../../Component");var s=e("../../Utils");var u=function(o){n(e,o);function e(e,t,r,n){var i=o.call(this,e,t,r)||this;i._dom=!!n?n:new s.DOM;i._popups=[];i._added$=new a.Subject;i._popups$=new a.Subject;return i}e.prototype.add=function(e){for(var t=0,r=e;t<r.length;t++){var n=r[t];if(this._popups.indexOf(n)!==-1){continue}this._popups.push(n);if(this._activated){n.setParentContainer(this._popupContainer)}}this._added$.next(e);this._popups$.next(this._popups)};e.prototype.getAll=function(){return this._popups.slice()};e.prototype.remove=function(e){for(var t=0,r=e;t<r.length;t++){var n=r[t];this._remove(n)}this._popups$.next(this._popups)};e.prototype.removeAll=function(){for(var e=0,t=this._popups.slice();e<t.length;e++){var r=t[e];this._remove(r)}this._popups$.next(this._popups)};e.prototype._activate=function(){var s=this;this._popupContainer=this._dom.createElement("div","mapillary-js-popup-container",this._container.element);for(var e=0,t=this._popups;e<t.length;e++){var r=t[e];r.setParentContainer(this._popupContainer)}this._updateAllSubscription=a.combineLatest(this._container.renderService.renderCamera$,this._container.renderService.size$,this._navigator.stateService.currentTransform$).subscribe(function(e){var t=e[0],r=e[1],n=e[2];for(var i=0,o=s._popups;i<o.length;i++){var a=o[i];a.update(t,r,n)}});var n=this._popups$.pipe(i.startWith(this._popups),i.switchMap(function(e){return a.from(e).pipe(i.mergeMap(function(e){return e.changed$}))}),i.map(function(e){return[e]}));this._updateAddedChangedSubscription=a.merge(this._added$,n).pipe(i.withLatestFrom(this._container.renderService.renderCamera$,this._container.renderService.size$,this._navigator.stateService.currentTransform$)).subscribe(function(e){var t=e[0],r=e[1],n=e[2],i=e[3];for(var o=0,a=t;o<a.length;o++){var s=a[o];s.update(r,n,i)}})};e.prototype._deactivate=function(){this._updateAllSubscription.unsubscribe();this._updateAddedChangedSubscription.unsubscribe();for(var e=0,t=this._popups;e<t.length;e++){var r=t[e];r.remove()}this._container.element.removeChild(this._popupContainer);delete this._popupContainer};e.prototype._getDefaultConfiguration=function(){return{}};e.prototype._remove=function(e){var t=this._popups.indexOf(e);if(t===-1){return}var r=this._popups.splice(t,1)[0];if(this._activated){r.remove()}};e.componentName="popup";return e}(o.Component);r.PopupComponent=u;o.ComponentService.register(u);r.default=u},{"../../Component":275,"../../Utils":285,rxjs:27,"rxjs/operators":225}],332:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("rxjs");var i=e("../../../Geo");var o=e("../../../Utils");var x=e("../../../Viewer");var a=function(){function e(e,t,r){this._options={};e=!!e?e:{};this._options.capturePointer=e.capturePointer===false?e.capturePointer:true;this._options.clean=e.clean;this._options.float=e.float;this._options.offset=e.offset;this._options.opacity=e.opacity;this._options.position=e.position;this._dom=!!r?r:new o.DOM;this._viewportCoords=!!t?t:new i.ViewportCoords;this._notifyChanged$=new n.Subject}Object.defineProperty(e.prototype,"changed$",{get:function(){return this._notifyChanged$},enumerable:true,configurable:true});e.prototype.remove=function(){if(this._content&&this._content.parentNode){this._content.parentNode.removeChild(this._content)}if(this._container){this._container.parentNode.removeChild(this._container);delete this._container}if(this._parentContainer){delete this._parentContainer}};e.prototype.setBasicPoint=function(e){this._point=e.slice();this._rect=null;this._notifyChanged$.next(this)};e.prototype.setBasicRect=function(e){this._rect=e.slice();this._point=null;this._notifyChanged$.next(this)};e.prototype.setDOMContent=function(e){if(this._content&&this._content.parentNode){this._content.parentNode.removeChild(this._content)}var t="mapillaryjs-popup-content"+(this._options.clean===true?"-clean":"")+(this._options.capturePointer===true?" mapillaryjs-popup-capture-pointer":"");this._content=this._dom.createElement("div",t,this._container);this._content.appendChild(e);this._notifyChanged$.next(this)};e.prototype.setHTML=function(e){var t=this._dom.document.createDocumentFragment();var r=this._dom.createElement("body");var n;r.innerHTML=e;while(true){n=r.firstChild;if(!n){break}t.appendChild(n)}this.setDOMContent(t)};e.prototype.setText=function(e){this.setDOMContent(this._dom.document.createTextNode(e))};e.prototype.setParentContainer=function(e){this._parentContainer=e};e.prototype.update=function(e,t,r){var n;if(!this._parentContainer||!this._content){return}if(!this._point&&!this._rect){return}if(!this._container){this._container=this._dom.createElement("div","mapillaryjs-popup",this._parentContainer);var i=this._options.clean!==true&&this._options.float!==x.Alignment.Center;if(i){var o="mapillaryjs-popup-tip"+(this._options.capturePointer===true?" mapillaryjs-popup-capture-pointer":"");this._tip=this._dom.createElement("div",o,this._container);this._dom.createElement("div","mapillaryjs-popup-tip-inner",this._tip)}this._container.appendChild(this._content);this._parentContainer.appendChild(this._container);if(this._options.opacity!=null){this._container.style.opacity=this._options.opacity.toString()}}var a=null;var s=this._alignmentToPopupAligment(this._options.position);var u=this._alignmentToPopupAligment(this._options.float);var c=this._container.classList;if(this._point!=null){a=this._viewportCoords.basicToCanvasSafe(this._point[0],this._point[1],{offsetHeight:t.height,offsetWidth:t.width},r,e.perspective)}else{var h=["center","top","bottom","left","right","top-left","top-right","bottom-left","bottom-right"];var l=null;for(var p=0,f=h;p<f.length;p++){var d=f[p];if(c.contains("mapillaryjs-popup-float-"+d)){l=d;break}}n=this._rectToPixel(this._rect,s,l,e,t,r),a=n[0],s=n[1];if(!u){u=s}}if(a==null){this._container.style.display="none";return}this._container.style.display="";if(!u){var v=this._container.offsetWidth;var m=this._container.offsetHeight;var g=this._pixelToFloats(a,t,v,m);u=g.length===0?"top":g.join("-")}var y=this._normalizeOffset(this._options.offset);a=[a[0]+y[u][0],a[1]+y[u][1]];a=[Math.round(a[0]),Math.round(a[1])];var _={bottom:"translate(-50%,0)","bottom-left":"translate(-100%,0)","bottom-right":"translate(0,0)",center:"translate(-50%,-50%)",left:"translate(-100%,-50%)",right:"translate(0,-50%)",top:"translate(-50%,-100%)","top-left":"translate(-100%,-100%)","top-right":"translate(0,-100%)"};for(var b in _){if(!_.hasOwnProperty(b)){continue}c.remove("mapillaryjs-popup-float-"+b)}c.add("mapillaryjs-popup-float-"+u);this._container.style.transform=_[u]+" translate("+a[0]+"px,"+a[1]+"px)"};e.prototype._rectToPixel=function(e,t,r,n,i,o){if(!t){var a=this._container.offsetWidth;var s=this._container.offsetHeight;var u={bottom:[0,s/2],"bottom-left":[-a/2,s/2],"bottom-right":[a/2,s/2],left:[-a/2,0],right:[a/2,0],top:[0,-s/2],"top-left":[-a/2,-s/2],"top-right":[a/2,-s/2]};var c=["top","bottom","left","right"];var h=[0,null,null];for(var l=0,p=c;l<p.length;l++){var f=p[l];var d=this._pointFromRectPosition(e,f);var v=this._viewportCoords.basicToCanvasSafe(d[0],d[1],{offsetHeight:i.height,offsetWidth:i.width},o,n.perspective);if(v==null){continue}var m=u[f];var g=[v[0]+m[0],v[1]+m[1]];var y=r!=null&&r===f?1:.7;var _=this._pixelToFloats(g,i,a/y,s/(2*y));if(_.length===0&&v[0]>0&&v[0]<i.width&&v[1]>0&&v[1]<i.height){return[v,f]}var b=Math.max(g[0]-a/2,0);var x=Math.min(g[0]+a/2,i.width);var w=Math.max(g[1]-s/2,0);var S=Math.min(g[1]+s/2,i.height);var M=Math.max(0,x-b);var E=Math.max(0,S-w);var C=y*M*E;if(C>h[0]){h[0]=C;h[1]=v;h[2]=f}}if(h[0]>0){return[h[1],h[2]]}}var T=this._pointFromRectPosition(e,t);var O=this._viewportCoords.basicToCanvasSafe(T[0],T[1],{offsetHeight:i.height,offsetWidth:i.width},o,n.perspective);return[O,t!=null?t:"top"]};e.prototype._alignmentToPopupAligment=function(e){switch(e){case x.Alignment.Bottom:return"bottom";case x.Alignment.BottomLeft:return"bottom-left";case x.Alignment.BottomRight:return"bottom-right";case x.Alignment.Center:return"center";case x.Alignment.Left:return"left";case x.Alignment.Right:return"right";case x.Alignment.Top:return"top";case x.Alignment.TopLeft:return"top-left";case x.Alignment.TopRight:return"top-right";default:return null}};e.prototype._normalizeOffset=function(e){if(e==null){return this._normalizeOffset(0)}if(typeof e==="number"){var t=e;var r=t>=0?1:-1;var n=r*Math.round(Math.sqrt(.5*Math.pow(t,2)));return{bottom:[0,t],"bottom-left":[-n,n],"bottom-right":[n,n],center:[0,0],left:[-t,0],right:[t,0],top:[0,-t],"top-left":[-n,-n],"top-right":[n,-n]}}else{return{bottom:e.bottom||[0,0],"bottom-left":e.bottomLeft||[0,0],"bottom-right":e.bottomRight||[0,0],center:e.center||[0,0],left:e.left||[0,0],right:e.right||[0,0],top:e.top||[0,0],"top-left":e.topLeft||[0,0],"top-right":e.topRight||[0,0]}}};e.prototype._pixelToFloats=function(e,t,r,n){var i=[];if(e[1]<n){i.push("bottom")}else if(e[1]>t.height-n){i.push("top")}if(e[0]<r/2){i.push("right")}else if(e[0]>t.width-r/2){i.push("left")}return i};e.prototype._pointFromRectPosition=function(e,t){var r=e[0];var n=e[0]<e[2]?e[2]:e[2]+1;var i=e[1];var o=e[3];switch(t){case"bottom":return[(r+n)/2,o];case"bottom-left":return[r,o];case"bottom-right":return[n,o];case"center":return[(r+n)/2,(i+o)/2];case"left":return[r,(i+o)/2];case"right":return[n,(i+o)/2];case"top":return[(r+n)/2,i];case"top-left":return[r,i];case"top-right":return[n,i];default:return[(r+n)/2,o]}};return e}();r.Popup=a;r.default=a},{"../../../Geo":278,"../../../Utils":285,"../../../Viewer":286,rxjs:27}],333:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var c=e("rxjs");var h=e("rxjs/operators");var u=e("../../Component");var i=e("../../Edge");var o=e("../../Graph");var a=function(a){n(s,a);function s(e,t,r,n,i){var o=a.call(this,e,t,r)||this;o._sequenceDOMRenderer=!!n?n:new u.SequenceDOMRenderer(t);o._scheduler=i;o._containerWidth$=new c.Subject;o._hoveredKeySubject$=new c.Subject;o._hoveredKey$=o._hoveredKeySubject$.pipe(h.share());o._navigator.playService.playing$.pipe(h.skip(1),h.withLatestFrom(o._configuration$)).subscribe(function(e){var t=e[0],r=e[1];o.fire(s.playingchanged,t);if(t===r.playing){return}if(t){o.play()}else{o.stop()}});o._navigator.playService.direction$.pipe(h.skip(1),h.withLatestFrom(o._configuration$)).subscribe(function(e){var t=e[0],r=e[1];if(t!==r.direction){o.setDirection(t)}});return o}Object.defineProperty(s.prototype,"hoveredKey$",{get:function(){return this._hoveredKey$},enumerable:true,configurable:true});s.prototype.play=function(){this.configure({playing:true})};s.prototype.stop=function(){this.configure({playing:false})};s.prototype.setDirection=function(e){this.configure({direction:e})};s.prototype.setHighlightKey=function(e){this.configure({highlightKey:e})};s.prototype.setMaxWidth=function(e){this.configure({maxWidth:e})};s.prototype.setMinWidth=function(e){this.configure({minWidth:e})};s.prototype.setVisible=function(e){this.configure({visible:e})};s.prototype._activate=function(){var u=this;this._sequenceDOMRenderer.activate();var t=this._navigator.stateService.currentNode$.pipe(h.switchMap(function(e){return e.sequenceEdges$}),h.publishReplay(1),h.refCount());var e=this._navigator.stateService.currentNode$.pipe(h.distinctUntilChanged(undefined,function(e){return e.sequenceKey}),h.switchMap(function(e){return c.concat(c.of(null),u._navigator.graphService.cacheSequence$(e.sequenceKey).pipe(h.retry(3),h.catchError(function(e){console.error("Failed to cache sequence",e);return c.of(null)})))}),h.startWith(null),h.publishReplay(1),h.refCount());this._sequenceSubscription=e.subscribe();var i=this._sequenceDOMRenderer.index$.pipe(h.withLatestFrom(e),h.map(function(e){var t=e[0],r=e[1];return r!=null?r.keys[t]:null}),h.filter(function(e){return!!e}),h.distinctUntilChanged(),h.publish(),h.refCount());this._moveSubscription=c.merge(i.pipe(h.debounceTime(100,this._scheduler)),i.pipe(h.auditTime(400,this._scheduler))).pipe(h.distinctUntilChanged(),h.switchMap(function(e){return u._navigator.moveToKey$(e).pipe(h.catchError(function(e){return c.empty()}))})).subscribe();this._setSequenceGraphModeSubscription=this._sequenceDOMRenderer.changingPositionChanged$.pipe(h.filter(function(e){return e})).subscribe(function(){u._navigator.graphService.setGraphMode(o.GraphMode.Sequence)});this._setSpatialGraphModeSubscription=this._sequenceDOMRenderer.changingPositionChanged$.pipe(h.filter(function(e){return!e})).subscribe(function(){u._navigator.graphService.setGraphMode(o.GraphMode.Spatial)});this._navigator.graphService.graphMode$.pipe(h.switchMap(function(e){return e===o.GraphMode.Spatial?u._navigator.stateService.currentNode$.pipe(h.take(2)):c.empty()}),h.filter(function(e){return!e.spatialEdges.cached}),h.switchMap(function(e){return u._navigator.graphService.cacheNode$(e.key).pipe(h.catchError(function(e){return c.empty()}))})).subscribe();this._stopSubscription=this._sequenceDOMRenderer.changingPositionChanged$.pipe(h.filter(function(e){return e})).subscribe(function(){u._navigator.playService.stop()});this._cacheSequenceNodesSubscription=c.combineLatest(this._navigator.graphService.graphMode$,this._sequenceDOMRenderer.changingPositionChanged$.pipe(h.startWith(false),h.distinctUntilChanged())).pipe(h.withLatestFrom(this._navigator.stateService.currentNode$),h.switchMap(function(e){var t=e[0],r=t[0],n=t[1],i=e[1];return n&&r===o.GraphMode.Sequence?u._navigator.graphService.cacheSequenceNodes$(i.sequenceKey,i.key).pipe(h.retry(3),h.catchError(function(e){console.error("Failed to cache sequence nodes.",e);return c.empty()})):c.empty()})).subscribe();var r=e.pipe(h.switchMap(function(r){if(!r){return c.of({index:null,max:null})}var n=true;return u._sequenceDOMRenderer.changingPositionChanged$.pipe(h.startWith(false),h.distinctUntilChanged(),h.switchMap(function(e){var t=!e&&n?0:1;n=false;return e?i:u._navigator.stateService.currentNode$.pipe(h.map(function(e){return e.key}),h.distinctUntilChanged(),h.skip(t))}),h.map(function(e){var t=r.keys.indexOf(e);if(t===-1){return{index:null,max:null}}return{index:t,max:r.keys.length-1}}))}));this._renderSubscription=c.combineLatest(t,this._configuration$,this._containerWidth$,this._sequenceDOMRenderer.changed$.pipe(h.startWith(this._sequenceDOMRenderer)),this._navigator.playService.speed$,r).pipe(h.map(function(e){var t=e[0],r=e[1],n=e[2],i=e[3],o=e[4],a=e[5];var s=u._sequenceDOMRenderer.render(t,r,n,o,a.index,a.max,u,u._navigator);return{name:u._name,vnode:s}})).subscribe(this._container.domRenderer.render$);this._setSpeedSubscription=this._sequenceDOMRenderer.speed$.subscribe(function(e){u._navigator.playService.setSpeed(e)});this._setDirectionSubscription=this._configuration$.pipe(h.map(function(e){return e.direction}),h.distinctUntilChanged()).subscribe(function(e){u._navigator.playService.setDirection(e)});this._containerWidthSubscription=c.combineLatest(this._container.renderService.size$,this._configuration$.pipe(h.distinctUntilChanged(function(e,t){return e[0]===t[0]&&e[1]===t[1]},function(e){return[e.minWidth,e.maxWidth]}))).pipe(h.map(function(e){var t=e[0],r=e[1];return u._sequenceDOMRenderer.getContainerWidth(t,r)})).subscribe(this._containerWidth$);this._playingSubscription=this._configuration$.pipe(h.map(function(e){return e.playing}),h.distinctUntilChanged()).subscribe(function(e){if(e){u._navigator.playService.play()}else{u._navigator.playService.stop()}});this._hoveredKeySubscription=this._sequenceDOMRenderer.mouseEnterDirection$.pipe(h.switchMap(function(i){var e=t.pipe(h.map(function(e){for(var t=0,r=e.edges;t<r.length;t++){var n=r[t];if(n.data.direction===i){return n.to}}return null}),h.takeUntil(u._sequenceDOMRenderer.mouseLeaveDirection$));return c.concat(e,c.of(null))}),h.distinctUntilChanged()).subscribe(this._hoveredKeySubject$);this._emitHoveredKeySubscription=this._hoveredKey$.subscribe(function(e){u.fire(s.hoveredkeychanged,e)})};s.prototype._deactivate=function(){this._emitHoveredKeySubscription.unsubscribe();this._renderSubscription.unsubscribe();this._playingSubscription.unsubscribe();this._containerWidthSubscription.unsubscribe();this._hoveredKeySubscription.unsubscribe();this._setSpeedSubscription.unsubscribe();this._setDirectionSubscription.unsubscribe();this._setSequenceGraphModeSubscription.unsubscribe();this._setSpatialGraphModeSubscription.unsubscribe();this._sequenceSubscription.unsubscribe();this._moveSubscription.unsubscribe();this._cacheSequenceNodesSubscription.unsubscribe();this._stopSubscription.unsubscribe();this._sequenceDOMRenderer.deactivate()};s.prototype._getDefaultConfiguration=function(){return{direction:i.EdgeDirection.Next,maxWidth:108,minWidth:70,playing:false,visible:true}};s.componentName="sequence";s.playingchanged="playingchanged";s.hoveredkeychanged="hoveredkeychanged";return s}(u.Component);r.SequenceComponent=a;u.ComponentService.register(a);r.default=a},{"../../Component":275,"../../Edge":276,"../../Graph":279,rxjs:27,"rxjs/operators":225}],334:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("rxjs");var i=e("rxjs/operators");var w=e("virtual-dom");var S=e("../../Component");var M=e("../../Edge");var f=e("../../Error");var o=function(){function e(e){this._container=e;this._minThresholdWidth=320;this._maxThresholdWidth=1480;this._minThresholdHeight=240;this._maxThresholdHeight=820;this._stepperDefaultWidth=108;this._controlsDefaultWidth=88;this._defaultHeight=30;this._expandControls=false;this._mode=S.SequenceMode.Default;this._speed=.5;this._changingSpeed=false;this._index=null;this._changingPosition=false;this._mouseEnterDirection$=new n.Subject;this._mouseLeaveDirection$=new n.Subject;this._notifyChanged$=new n.Subject;this._notifyChangingPositionChanged$=new n.Subject;this._notifySpeedChanged$=new n.Subject;this._notifyIndexChanged$=new n.Subject}Object.defineProperty(e.prototype,"changed$",{get:function(){return this._notifyChanged$},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"changingPositionChanged$",{get:function(){return this._notifyChangingPositionChanged$},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"speed$",{get:function(){return this._notifySpeedChanged$},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"index$",{get:function(){return this._notifyIndexChanged$},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"mouseEnterDirection$",{get:function(){return this._mouseEnterDirection$},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"mouseLeaveDirection$",{get:function(){return this._mouseLeaveDirection$},enumerable:true,configurable:true});e.prototype.activate=function(){var t=this;if(!!this._changingSubscription){return}this._changingSubscription=n.merge(this._container.mouseService.documentMouseUp$,this._container.touchService.touchEnd$.pipe(i.filter(function(e){return e.touches.length===0}))).subscribe(function(e){if(t._changingSpeed){t._changingSpeed=false}if(t._changingPosition){t._setChangingPosition(false)}})};e.prototype.deactivate=function(){if(!this._changingSubscription){return}this._changingSpeed=false;this._changingPosition=false;this._expandControls=false;this._mode=S.SequenceMode.Default;this._changingSubscription.unsubscribe();this._changingSubscription=null};e.prototype.render=function(e,t,r,n,i,o,a,s){if(t.visible===false){return w.h("div.SequenceContainer",{},[])}var u=this._createStepper(e,t,r,a,s);var c=this._createSequenceControls(r);var h=this._createPlaybackControls(r,n,a,t);var l=this._createTimelineControls(r,i,o);return w.h("div.SequenceContainer",[u,c,h,l])};e.prototype.getContainerWidth=function(e,t){var r=t.minWidth;var n=t.maxWidth;if(n<r){n=r}var i=(e.width-this._minThresholdWidth)/(this._maxThresholdWidth-this._minThresholdWidth);var o=(e.height-this._minThresholdHeight)/(this._maxThresholdHeight-this._minThresholdHeight);var a=Math.max(0,Math.min(1,Math.min(i,o)));return r+a*(n-r)};e.prototype._createPositionInput=function(e,t){var r=this;this._index=e;var n=function(e){r._index=Number(e.target.value);r._notifyIndexChanged$.next(r._index)};var i=this._container.domContainer.getBoundingClientRect();var o=Math.max(276,Math.min(410,5+.8*i.width))-65;var a=function(e){e.stopPropagation();r._setChangingPosition(true)};var s=function(e){if(r._changingPosition===true){e.stopPropagation()}};var u=function(e){if(e.key==="ArrowDown"||e.key==="ArrowLeft"||e.key==="ArrowRight"||e.key==="ArrowUp"){e.preventDefault()}};var c={max:t!=null?t:1,min:0,onchange:n,oninput:n,onkeydown:u,onmousedown:a,onmousemove:s,ontouchmove:s,ontouchstart:a,style:{width:o+"px"},type:"range",value:e!=null?e:0};var h=e==null||t==null||t<=1;if(h){c.disabled="true"}var l=w.h("input.SequencePosition",c,[]);var p=h?".SequencePositionContainerDisabled":".SequencePositionContainer";return w.h("div"+p,[l])};e.prototype._createSpeedInput=function(e){var t=this;this._speed=e;var r=function(e){t._speed=Number(e.target.value)/1e3;t._notifySpeedChanged$.next(t._speed)};var n=this._container.domContainer.getBoundingClientRect();var i=Math.max(276,Math.min(410,5+.8*n.width))-160;var o=function(e){t._changingSpeed=true;e.stopPropagation()};var a=function(e){if(t._changingSpeed===true){e.stopPropagation()}};var s=function(e){if(e.key==="ArrowDown"||e.key==="ArrowLeft"||e.key==="ArrowRight"||e.key==="ArrowUp"){e.preventDefault()}};var u=w.h("input.SequenceSpeed",{max:1e3,min:0,onchange:r,oninput:r,onkeydown:s,onmousedown:o,onmousemove:a,ontouchmove:a,ontouchstart:o,style:{width:i+"px"},type:"range",value:1e3*e},[]);return w.h("div.SequenceSpeedContainer",[u])};e.prototype._createPlaybackControls=function(e,t,r,n){var i=this;if(this._mode!==S.SequenceMode.Playback){return w.h("div.SequencePlayback",[])}var o=w.h("div.SequenceSwitchIcon.SequenceIconVisible",[]);var a=n.direction===M.EdgeDirection.Next?M.EdgeDirection.Prev:M.EdgeDirection.Next;var s=n.playing;var u={onclick:function(){if(!s){r.setDirection(a)}}};var c=n.playing?".SequenceSwitchButtonDisabled":".SequenceSwitchButton";var h=w.h("div"+c,u,[o]);var l=w.h("div.SequenceSlowIcon.SequenceIconVisible",[]);var p=w.h("div.SequenceSlowContainer",[l]);var f=w.h("div.SequenceFastIcon.SequenceIconVisible",[]);var d=w.h("div.SequenceFastContainer",[f]);var v=w.h("div.SequenceCloseIcon.SequenceIconVisible",[]);var m={onclick:function(){i._mode=S.SequenceMode.Default;i._notifyChanged$.next(i)}};var g=w.h("div.SequenceCloseButton",m,[v]);var y=this._createSpeedInput(t);var _=[h,p,y,d,g];var b=Math.round(e/this._stepperDefaultWidth*this._defaultHeight+10);var x={style:{top:b+"px"}};return w.h("div.SequencePlayback",x,_)};e.prototype._createPlayingButton=function(e,t,r,n){var i=r.direction===M.EdgeDirection.Next&&e!=null||r.direction===M.EdgeDirection.Prev&&t!=null;var o=r.playing?function(e){n.stop()}:i?function(e){n.play()}:null;var a={onclick:o};var s=r.playing?"Stop":i?"Play":"PlayDisabled";var u={className:s};if(r.direction===M.EdgeDirection.Prev){u.style={transform:"rotate(180deg) translate(50%, 50%)"}}var c=w.h("div.SequenceComponentIcon",u,[]);var h=i?"SequencePlay":"SequencePlayDisabled";return w.h("div."+h,a,[c])};e.prototype._createSequenceControls=function(e){var t=this;var r=Math.round(8/this._stepperDefaultWidth*e);var n={onclick:function(){t._expandControls=!t._expandControls;t._mode=S.SequenceMode.Default;t._notifyChanged$.next(t)},style:{"border-bottom-right-radius":r+"px","border-top-right-radius":r+"px"}};var i=w.h("div.SequenceExpanderBar",[]);var o=w.h("div.SequenceExpanderButton",n,[i]);var a=this._mode===S.SequenceMode.Playback?".SequenceFastIconGrey.SequenceIconVisible":".SequenceFastIcon";var s=w.h("div"+a,[]);var u={onclick:function(){t._mode=t._mode===S.SequenceMode.Playback?S.SequenceMode.Default:S.SequenceMode.Playback;t._notifyChanged$.next(t)}};var c=w.h("div.SequencePlaybackButton",u,[s]);var h=this._mode===S.SequenceMode.Timeline?".SequenceTimelineIconGrey.SequenceIconVisible":".SequenceTimelineIcon";var l=w.h("div"+h,[]);var p={onclick:function(){t._mode=t._mode===S.SequenceMode.Timeline?S.SequenceMode.Default:S.SequenceMode.Timeline;t._notifyChanged$.next(t)}};var f=w.h("div.SequenceTimelineButton",p,[l]);var d={style:{height:this._defaultHeight/this._stepperDefaultWidth*e+"px",transform:"translate("+(e/2+2)+"px, 0)",width:this._controlsDefaultWidth/this._stepperDefaultWidth*e+"px"}};var v=".SequenceControls"+(this._expandControls?".SequenceControlsExpanded":"");return w.h("div"+v,d,[c,f,o])};e.prototype._createSequenceArrows=function(e,t,r,n,i){var o=this;var a={onclick:e!=null?function(e){i.moveDir$(M.EdgeDirection.Next).subscribe(undefined,function(e){if(!(e instanceof f.AbortMapillaryError)){console.error(e)}})}:null,onmouseenter:function(e){o._mouseEnterDirection$.next(M.EdgeDirection.Next)},onmouseleave:function(e){o._mouseLeaveDirection$.next(M.EdgeDirection.Next)}};var s=Math.round(8/this._stepperDefaultWidth*r);var u={onclick:t!=null?function(e){i.moveDir$(M.EdgeDirection.Prev).subscribe(undefined,function(e){if(!(e instanceof f.AbortMapillaryError)){console.error(e)}})}:null,onmouseenter:function(e){o._mouseEnterDirection$.next(M.EdgeDirection.Prev)},onmouseleave:function(e){o._mouseLeaveDirection$.next(M.EdgeDirection.Prev)},style:{"border-bottom-left-radius":s+"px","border-top-left-radius":s+"px"}};var c=this._getStepClassName(M.EdgeDirection.Next,e,n.highlightKey);var h=this._getStepClassName(M.EdgeDirection.Prev,t,n.highlightKey);var l=w.h("div.SequenceComponentIcon",[]);var p=w.h("div.SequenceComponentIcon",[]);return[w.h("div."+h,u,[p]),w.h("div."+c,a,[l])]};e.prototype._createStepper=function(e,t,r,n,i){var o=null;var a=null;for(var s=0,u=e.edges;s<u.length;s++){var c=u[s];if(c.data.direction===M.EdgeDirection.Next){o=c.to}if(c.data.direction===M.EdgeDirection.Prev){a=c.to}}var h=this._createPlayingButton(o,a,t,n);var l=this._createSequenceArrows(o,a,r,t,i);l.splice(1,0,h);var p={oncontextmenu:function(e){e.preventDefault()},style:{height:this._defaultHeight/this._stepperDefaultWidth*r+"px",width:r+"px"}};return w.h("div.SequenceStepper",p,l)};e.prototype._createTimelineControls=function(e,t,r){var n=this;if(this._mode!==S.SequenceMode.Timeline){return w.h("div.SequenceTimeline",[])}var i=this._createPositionInput(t,r);var o=w.h("div.SequenceCloseIcon.SequenceIconVisible",[]);var a={onclick:function(){n._mode=S.SequenceMode.Default;n._notifyChanged$.next(n)}};var s=w.h("div.SequenceCloseButton",a,[o]);var u=Math.round(e/this._stepperDefaultWidth*this._defaultHeight+10);var c={style:{top:u+"px"}};return w.h("div.SequenceTimeline",c,[i,s])};e.prototype._getStepClassName=function(e,t,r){var n=e===M.EdgeDirection.Next?"SequenceStepNext":"SequenceStepPrev";if(t==null){n+="Disabled"}else{if(r===t){n+="Highlight"}}return n};e.prototype._setChangingPosition=function(e){this._changingPosition=e;this._notifyChangingPositionChanged$.next(e)};return e}();r.SequenceDOMRenderer=o;r.default=o},{"../../Component":275,"../../Edge":276,"../../Error":277,rxjs:27,"rxjs/operators":225,"virtual-dom":231}],335:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n;(function(e){e[e["Default"]=0]="Default";e[e["Playback"]=1]="Playback";e[e["Timeline"]=2]="Timeline"})(n=r.SequenceMode||(r.SequenceMode={}));r.default=n},{}],336:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("path");var i=function(){function e(){}e.equirectangular={fragment:"#ifdef GL_FRAGMENT_PRECISION_HIGH\nprecision highp float;\n#else\nprecision mediump 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}"};e.equirectangularCurtain={fragment:"#ifdef GL_FRAGMENT_PRECISION_HIGH\nprecision highp float;\n#else\nprecision mediump float;\n#endif\n\nuniform sampler2D projectorTex;\nuniform float curtain;\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\n    bool inverted = curtain < 0.5;\n\n    float curtainMin = inverted ? curtain + 0.5 : curtain - 0.5;\n    float curtainMax = curtain;\n\n    bool insideCurtain = inverted ?\n        x > curtainMin || x < curtainMax :\n        x > curtainMin && x < curtainMax;\n\n    vec4 baseColor;\n    if (insideCurtain) {\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}"};e.perspective={fragment:"#ifdef GL_FRAGMENT_PRECISION_HIGH\nprecision highp float;\n#else\nprecision mediump float;\n#endif\n\nuniform sampler2D projectorTex;\nuniform float opacity;\nuniform float focal;\nuniform float k1;\nuniform float k2;\nuniform float scale_x;\nuniform float scale_y;\nuniform float radial_peak;\n\nvarying vec4 vRstq;\n\nvoid main()\n{\n    float x = vRstq.x / vRstq.z;\n    float y = vRstq.y / vRstq.z;\n    float r2 = x * x + y * y;\n\n    if (radial_peak > 0. && r2 > radial_peak * sqrt(r2)) {\n        r2 = radial_peak * radial_peak;\n    }\n\n    float d = 1.0 + k1 * r2 + k2 * r2 * r2;\n    float u = scale_x * focal * d * x + 0.5;\n    float v = - scale_y * focal * d * y + 0.5;\n\n    vec4 baseColor;\n    if (u >= 0. && u <= 1. && v >= 0. && v <= 1.) {\n        baseColor = texture2D(projectorTex, vec2(u, v));\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}"};e.perspectiveCurtain={fragment:"#ifdef GL_FRAGMENT_PRECISION_HIGH\nprecision highp float;\n#else\nprecision mediump float;\n#endif\n\nuniform sampler2D projectorTex;\nuniform float opacity;\nuniform float focal;\nuniform float k1;\nuniform float k2;\nuniform float scale_x;\nuniform float scale_y;\nuniform float radial_peak;\nuniform float curtain;\n\nvarying vec4 vRstq;\n\nvoid main()\n{\n    float x = vRstq.x / vRstq.z;\n    float y = vRstq.y / vRstq.z;\n    float r2 = x * x + y * y;\n\n    if (radial_peak > 0. && r2 > radial_peak * sqrt(r2)) {\n        r2 = radial_peak * radial_peak;\n    }\n\n    float d = 1.0 + k1 * r2 + k2 * r2 * r2;\n    float u = scale_x * focal * d * x + 0.5;\n    float v = - scale_y * focal * d * y + 0.5;\n\n    vec4 baseColor;\n    if ((u < curtain || curtain >= 1.0) && u >= 0. && u <= 1. && v >= 0. && v <= 1.) {\n        baseColor = texture2D(projectorTex, vec2(u, v));\n        baseColor.a = opacity;\n    } else {\n        baseColor = vec4(0.0, 0.0, 0.0, 0.0);\n    }\n\n    gl_FragColor = baseColor;\n}\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}"};e.fisheye={fragment:"#ifdef GL_FRAGMENT_PRECISION_HIGH\nprecision highp float;\n#else\nprecision mediump float;\n#endif\n\nuniform sampler2D projectorTex;\nuniform float opacity;\nuniform float focal;\nuniform float k1;\nuniform float k2;\nuniform float scale_x;\nuniform float scale_y;\nuniform float radial_peak;\n\nvarying vec4 vRstq;\n\nvoid main()\n{\n    float x = vRstq.x;\n    float y = vRstq.y;\n    float z = vRstq.z;\n\n    float r = sqrt(x * x + y * y);\n    float theta = atan(r, z);\n\n    if (radial_peak > 0. && theta > radial_peak) {\n        theta = radial_peak;\n    }\n\n    float theta2 = theta * theta;\n    float theta_d = theta * (1.0 + theta2 * (k1 + theta2 * k2));\n    float s = focal * theta_d / r;\n\n    float u = scale_x * s * x + 0.5;\n    float v = -scale_y * s * y + 0.5;\n\n    vec4 baseColor;\n    if (u >= 0. && u <= 1. && v >= 0. && v <= 1.) {\n        baseColor = texture2D(projectorTex, vec2(u, v));\n        baseColor.a = opacity;\n    } else {\n        baseColor = vec4(0.0, 0.0, 0.0, 0.0);\n    }\n\n    gl_FragColor = baseColor;\n}\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}"};e.fisheyeCurtain={fragment:"#ifdef GL_FRAGMENT_PRECISION_HIGH\nprecision highp float;\n#else\nprecision mediump float;\n#endif\n\nuniform sampler2D projectorTex;\nuniform float opacity;\nuniform float focal;\nuniform float k1;\nuniform float k2;\nuniform float scale_x;\nuniform float scale_y;\nuniform float radial_peak;\nuniform float curtain;\n\nvarying vec4 vRstq;\n\nvoid main()\n{\n    float x = vRstq.x;\n    float y = vRstq.y;\n    float z = vRstq.z;\n\n    float r2 = sqrt(x * x + y * y);\n    float theta = atan(r2, z);\n\n    if (radial_peak > 0. && theta > radial_peak) {\n        theta = radial_peak;\n    }\n\n    float theta2 = theta * theta;\n    float theta_d = theta * (1.0 + theta2 * (k1 + theta2 * k2));\n    float s = focal * theta_d / r2;\n\n    float u = scale_x * s * x + 0.5;\n    float v = -scale_y * s * y + 0.5;\n\n    vec4 baseColor;\n    if ((u < curtain || curtain >= 1.0) && u >= 0. && u <= 1. && v >= 0. && v <= 1.) {\n        baseColor = texture2D(projectorTex, vec2(u, v));\n        baseColor.a = opacity;\n    } else {\n        baseColor = vec4(0.0, 0.0, 0.0, 0.0);\n    }\n\n    gl_FragColor = baseColor;\n}\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}"};e.perspectiveDistorted={fragment:"#ifdef GL_FRAGMENT_PRECISION_HIGH\nprecision highp float;\n#else\nprecision mediump float;\n#endif\n\nuniform sampler2D projectorTex;\nuniform float opacity;\n\nvarying vec4 vRstq;\n\nvoid main()\n{\n    float u = vRstq.x / vRstq.w;\n    float v = vRstq.y / vRstq.w;\n\n    vec4 baseColor;\n    if (u >= 0. && u <= 1. && v >= 0. && v <= 1.) {\n        baseColor = texture2D(projectorTex, vec2(u, v));\n        baseColor.a = opacity;\n    } else {\n        baseColor = vec4(0.0, 0.0, 0.0, 0.0);\n    }\n\n    gl_FragColor = baseColor;\n}\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"};e.perspectiveDistortedCurtain={fragment:"#ifdef GL_FRAGMENT_PRECISION_HIGH\nprecision highp float;\n#else\nprecision mediump float;\n#endif\n\nuniform sampler2D projectorTex;\nuniform float opacity;\nuniform float curtain;\n\nvarying vec4 vRstq;\n\nvoid main()\n{\n    float u = vRstq.x / vRstq.w;\n    float v = vRstq.y / vRstq.w;\n\n    vec4 baseColor;\n    if ((u < curtain || curtain >= 1.0) && u >= 0. && u <= 1. && v >= 0. && v <= 1.) {\n        baseColor = texture2D(projectorTex, vec2(u, v));\n        baseColor.a = opacity;\n    } else {\n        baseColor = vec4(0.0, 0.0, 0.0, 0.0);\n    }\n\n    gl_FragColor = baseColor;\n}\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"};return e}();r.Shaders=i},{path:23}],337:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var d=e("rxjs");var v=e("rxjs/operators");var m=e("../../Component");var a=e("../../Geo");var g=e("../../State");var y=e("../../Render");var _=e("../../Tiles");var b=e("../../Utils");var i=function(o){n(e,o);function e(e,t,r,n){var i=o.call(this,e,t,r)||this;i._viewportCoords=!!n?n:new a.ViewportCoords;i._domRenderer=new m.SliderDOMRenderer(t);i._imageTileLoader=new _.ImageTileLoader(b.Urls.tileScheme,b.Urls.tileDomain,b.Urls.origin);i._roiCalculator=new _.RegionOfInterestCalculator;i._spatial=new a.Spatial;i._glRendererOperation$=new d.Subject;i._glRendererCreator$=new d.Subject;i._glRendererDisposer$=new d.Subject;i._glRenderer$=i._glRendererOperation$.pipe(v.scan(function(e,t){return t(e)},null),v.filter(function(e){return e!=null}),v.distinctUntilChanged(undefined,function(e){return e.frameId}));i._glRendererCreator$.pipe(v.map(function(){return function(e){if(e!=null){throw new Error("Multiple slider states can not be created at the same time")}return new m.SliderGLRenderer}})).subscribe(i._glRendererOperation$);i._glRendererDisposer$.pipe(v.map(function(){return function(e){e.dispose();return null}})).subscribe(i._glRendererOperation$);return i}e.prototype.setInitialPosition=function(e){this.configure({initialPosition:e})};e.prototype.setKeys=function(e){this.configure({keys:e})};e.prototype.setSliderMode=function(e){this.configure({mode:e})};e.prototype.setSliderVisible=function(e){this.configure({sliderVisible:e})};e.prototype._activate=function(){var $=this;this._modeSubcription=this._domRenderer.mode$.subscribe(function(e){$.setSliderMode(e)});this._glRenderSubscription=this._glRenderer$.pipe(v.map(function(e){var t={name:$._name,render:{frameId:e.frameId,needsRender:e.needsRender,render:e.render.bind(e),stage:y.GLRenderStage.Background}};return t})).subscribe(this._container.glRenderer.render$);var e=d.concat(this.configuration$.pipe(v.map(function(e){return e.initialPosition!=null?e.initialPosition:1}),v.first()),this._domRenderer.position$);var t=this.configuration$.pipe(v.map(function(e){return e.mode}),v.distinctUntilChanged());var r=this._navigator.stateService.currentState$.pipe(v.map(function(e){return e.state.motionless}),v.distinctUntilChanged());var n=this._navigator.stateService.currentState$.pipe(v.map(function(e){return e.state.currentNode.fullPano}),v.distinctUntilChanged());var i=d.combineLatest(this._configuration$.pipe(v.map(function(e){return e.sliderVisible})),this._navigator.stateService.currentState$.pipe(v.map(function(e){return!(e.state.currentNode==null||e.state.previousNode==null||e.state.currentNode.pano&&!e.state.currentNode.fullPano||e.state.previousNode.pano&&!e.state.previousNode.fullPano||e.state.currentNode.fullPano&&!e.state.previousNode.fullPano)}),v.distinctUntilChanged())).pipe(v.map(function(e){var t=e[0],r=e[1];return t&&r}),v.distinctUntilChanged());this._waitSubscription=d.combineLatest(t,r,n,i).pipe(v.withLatestFrom(this._navigator.stateService.state$)).subscribe(function(e){var t=e[0],r=t[0],n=t[1],i=t[2],o=t[3],a=e[1];var s=o&&(n||r===m.SliderMode.Stationary||i);if(s&&a!==g.State.WaitingInteractively){$._navigator.stateService.waitInteractively()}else if(!s&&a!==g.State.Waiting){$._navigator.stateService.wait()}});this._moveSubscription=d.combineLatest(e,t,r,n,i).subscribe(function(e){var t=e[0],r=e[1],n=e[2],i=e[3],o=e[4];if(n||r===m.SliderMode.Stationary||i){$._navigator.stateService.moveTo(1)}else{$._navigator.stateService.moveTo(t)}});this._domRenderSubscription=d.combineLatest(e,t,r,n,i,this._container.renderService.size$).pipe(v.map(function(e){var t=e[0],r=e[1],n=e[2],i=e[3],o=e[4],a=e[5];return{name:$._name,vnode:$._domRenderer.render(t,r,n,i,o)}})).subscribe(this._container.domRenderer.render$);this._glRendererCreator$.next(null);this._updateCurtainSubscription=d.combineLatest(e,n,i,this._container.renderService.renderCamera$,this._navigator.stateService.currentTransform$).pipe(v.map(function(e){var t=e[0],r=e[1],n=e[2],i=e[3],o=e[4];if(!r){return n?t:1}var a=$._viewportCoords.viewportToBasic(-1.15,0,o,i.perspective);var s=$._viewportCoords.viewportToBasic(1.15,0,o,i.perspective);var u=s[0]<a[0]?s[0]+1:s[0];var c=a[0]+t*(u-a[0]);return c>1?c-1:c}),v.map(function(t){return function(e){e.updateCurtain(t);return e}})).subscribe(this._glRendererOperation$);this._stateSubscription=d.combineLatest(this._navigator.stateService.currentState$,t).pipe(v.map(function(e){var t=e[0],r=e[1];return function(e){e.update(t,r);return e}})).subscribe(this._glRendererOperation$);this._setKeysSubscription=this._configuration$.pipe(v.filter(function(e){return e.keys!=null}),v.switchMap(function(e){return d.zip(d.zip($._catchCacheNode$(e.keys.background),$._catchCacheNode$(e.keys.foreground)).pipe(v.map(function(e){return{background:e[0],foreground:e[1]}})),$._navigator.stateService.currentState$.pipe(v.first())).pipe(v.map(function(e){return{nodes:e[0],state:e[1].state}}))})).subscribe(function(e){if(e.state.currentNode!=null&&e.state.previousNode!=null&&e.state.currentNode.key===e.nodes.foreground.key&&e.state.previousNode.key===e.nodes.background.key){return}if(e.state.currentNode.key===e.nodes.background.key){$._navigator.stateService.setNodes([e.nodes.foreground]);return}if(e.state.currentNode.key===e.nodes.foreground.key&&e.state.trajectory.length===1){$._navigator.stateService.prependNodes([e.nodes.background]);return}$._navigator.stateService.setNodes([e.nodes.background]);$._navigator.stateService.setNodes([e.nodes.foreground])},function(e){console.error(e)});var o=this._navigator.stateService.currentState$.pipe(v.map(function(e){return e.state.previousNode}),v.filter(function(e){return e!=null}),v.distinctUntilChanged(undefined,function(e){return e.key}));var a=this._navigator.stateService.currentState$.pipe(v.distinctUntilChanged(undefined,function(e){return e.state.currentNode.key}),v.withLatestFrom(this._container.glRenderer.webGLRenderer$,this._container.renderService.size$),v.map(function(e){var t=e[0],r=e[1],n=e[2];var i=t.state;var o=Math.max(n.width,n.height);var a=i.currentNode;var s=i.currentTransform;var u=o>2048?2048:o>1024?1024:512;return new _.TextureProvider(a.key,s.basicWidth,s.basicHeight,u,a.image,$._imageTileLoader,new _.ImageTileStore,r)}),v.publishReplay(1),v.refCount());this._textureProviderSubscription=a.subscribe(function(){});this._setTextureProviderSubscription=a.pipe(v.map(function(t){return function(e){e.setTextureProvider(t.key,t);return e}})).subscribe(this._glRendererOperation$);this._setTileSizeSubscription=this._container.renderService.size$.pipe(v.switchMap(function(e){return d.combineLatest(a,d.of(e)).pipe(v.first())})).subscribe(function(e){var t=e[0],r=e[1];var n=Math.max(r.width,r.height);var i=n>2048?2048:n>1024?1024:512;t.setTileSize(i)});this._abortTextureProviderSubscription=a.pipe(v.pairwise()).subscribe(function(e){var t=e[0];t.abort()});var s=d.combineLatest(this._container.renderService.renderCameraFrame$,this._container.renderService.size$.pipe(v.debounceTime(250))).pipe(v.map(function(e){var t=e[0],r=e[1];return[t.camera.position.clone(),t.camera.lookat.clone(),t.zoom.valueOf(),r.height.valueOf(),r.width.valueOf()]}),v.pairwise(),v.skipWhile(function(e){return e[1][2]-e[0][2]<0||e[1][2]===0}),v.map(function(e){var t=e[0][0].equals(e[1][0]);var r=e[0][1].equals(e[1][1]);var n=e[0][2]===e[1][2];var i=e[0][3]===e[1][3];var o=e[0][4]===e[1][4];return t&&r&&n&&i&&o}),v.distinctUntilChanged(),v.filter(function(e){return e}),v.switchMap(function(e){return $._container.renderService.renderCameraFrame$.pipe(v.first())}),v.withLatestFrom(this._container.renderService.size$,this._navigator.stateService.currentTransform$));this._setRegionOfInterestSubscription=a.pipe(v.switchMap(function(i){return s.pipe(v.map(function(e){var t=e[0],r=e[1],n=e[2];return[$._roiCalculator.computeRegionOfInterest(t,r,n),i]}))}),v.filter(function(e){return!e[1].disposed})).subscribe(function(e){var t=e[0];var r=e[1];r.setRegionOfInterest(t)});var u=a.pipe(v.switchMap(function(e){return e.hasTexture$}),v.startWith(false),v.publishReplay(1),v.refCount());this._hasTextureSubscription=u.subscribe(function(){});var c=this._navigator.stateService.currentState$.pipe(v.filter(function(e){return e.state.nodesAhead===0}),v.map(function(e){return e.state.currentNode}),v.distinctUntilChanged(undefined,function(e){return e.key}),v.debounceTime(1e3),v.withLatestFrom(u),v.filter(function(e){return!e[1]}),v.map(function(e){return e[0]}),v.filter(function(e){return e.pano?b.Settings.maxImageSize>b.Settings.basePanoramaSize:b.Settings.maxImageSize>b.Settings.baseImageSize}),v.switchMap(function(r){var e=r.pano?b.Settings.basePanoramaSize:b.Settings.baseImageSize;if(Math.max(r.image.width,r.image.height)>e){return d.empty()}var t=r.cacheImage$(b.Settings.maxImageSize).pipe(v.map(function(e){return[e.image,e]}));return t.pipe(v.takeUntil(u.pipe(v.filter(function(e){return e}))),v.catchError(function(e,t){console.error("Failed to fetch high res image ("+r.key+")",e);return d.empty()}))})).pipe(v.publish(),v.refCount());this._updateBackgroundSubscription=c.pipe(v.withLatestFrom(a)).subscribe(function(e){if(e[0][1].key!==e[1].key||e[1].disposed){return}e[1].updateBackground(e[0][0])});this._updateTextureImageSubscription=c.pipe(v.map(function(t){return function(e){e.updateTextureImage(t[0],t[1]);return e}})).subscribe(this._glRendererOperation$);var h=this._navigator.stateService.currentState$.pipe(v.filter(function(e){return!!e.state.previousNode}),v.distinctUntilChanged(undefined,function(e){return e.state.previousNode.key}),v.withLatestFrom(this._container.glRenderer.webGLRenderer$,this._container.renderService.size$),v.map(function(e){var t=e[0],r=e[1],n=e[2];var i=t.state;var o=Math.max(n.width,n.height);var a=i.previousNode;var s=i.previousTransform;var u=o>2048?2048:o>1024?1024:512;return new _.TextureProvider(a.key,s.basicWidth,s.basicHeight,u,a.image,$._imageTileLoader,new _.ImageTileStore,r)}),v.publishReplay(1),v.refCount());this._textureProviderSubscriptionPrev=h.subscribe(function(){});this._setTextureProviderSubscriptionPrev=h.pipe(v.map(function(t){return function(e){e.setTextureProviderPrev(t.key,t);return e}})).subscribe(this._glRendererOperation$);this._setTileSizeSubscriptionPrev=this._container.renderService.size$.pipe(v.switchMap(function(e){return d.combineLatest(h,d.of(e)).pipe(v.first())})).subscribe(function(e){var t=e[0],r=e[1];var n=Math.max(r.width,r.height);var i=n>2048?2048:n>1024?1024:512;t.setTileSize(i)});this._abortTextureProviderSubscriptionPrev=h.pipe(v.pairwise()).subscribe(function(e){var t=e[0];t.abort()});var l=d.combineLatest(this._container.renderService.renderCameraFrame$,this._container.renderService.size$.pipe(v.debounceTime(250))).pipe(v.map(function(e){var t=e[0],r=e[1];return[t.camera.position.clone(),t.camera.lookat.clone(),t.zoom.valueOf(),r.height.valueOf(),r.width.valueOf()]}),v.pairwise(),v.skipWhile(function(e){return e[1][2]-e[0][2]<0||e[1][2]===0}),v.map(function(e){var t=e[0][0].equals(e[1][0]);var r=e[0][1].equals(e[1][1]);var n=e[0][2]===e[1][2];var i=e[0][3]===e[1][3];var o=e[0][4]===e[1][4];return t&&r&&n&&i&&o}),v.distinctUntilChanged(),v.filter(function(e){return e}),v.switchMap(function(e){return $._container.renderService.renderCameraFrame$.pipe(v.first())}),v.withLatestFrom(this._container.renderService.size$,this._navigator.stateService.currentTransform$));this._setRegionOfInterestSubscriptionPrev=h.pipe(v.switchMap(function(i){return l.pipe(v.map(function(e){var t=e[0],r=e[1],n=e[2];return[$._roiCalculator.computeRegionOfInterest(t,r,n),i]}))}),v.filter(function(e){return!e[1].disposed}),v.withLatestFrom(this._navigator.stateService.currentState$)).subscribe(function(e){var t=e[0],r=t[0],n=t[1],i=e[1];var o=null;if(i.state.previousNode.fullPano){if(i.state.currentNode.fullPano){var a=$._spatial.viewingDirection(i.state.currentNode.rotation);var s=$._spatial.viewingDirection(i.state.previousNode.rotation);var u=$._spatial.angleBetweenVector2(a.x,a.y,s.x,s.y);var c=u/(2*Math.PI);var h={maxX:$._spatial.wrap(r.bbox.maxX+c,0,1),maxY:r.bbox.maxY,minX:$._spatial.wrap(r.bbox.minX+c,0,1),minY:r.bbox.minY};o={bbox:h,pixelHeight:r.pixelHeight,pixelWidth:r.pixelWidth}}else{var a=$._spatial.viewingDirection(i.state.currentNode.rotation);var s=$._spatial.viewingDirection(i.state.previousNode.rotation);var u=$._spatial.angleBetweenVector2(a.x,a.y,s.x,s.y);var l=u/(2*Math.PI);var p=$._spatial.angleToPlane(a.toArray(),[0,0,1]);var f=$._spatial.angleToPlane(s.toArray(),[0,0,1]);var d=(f-p)/(2*Math.PI);var v=i.state.currentTransform;var m=Math.max(v.basicWidth,v.basicHeight);var g=m>0?2*Math.atan(.5*v.basicWidth/(m*v.focal)):Math.PI/3;var y=m>0?2*Math.atan(.5*v.basicHeight/(m*v.focal)):Math.PI/3;var _=g/(2*Math.PI);var b=y/Math.PI;var x=(r.bbox.maxX-r.bbox.minX)*_;var w=(r.bbox.maxY-r.bbox.minY)*b;var S=r.pixelWidth*_;var M=r.pixelHeight*b;var E=(r.bbox.minX+r.bbox.maxX)/2-.5;var C=(r.bbox.minY+r.bbox.maxY)/2-.5;var T=.5+l+_*E-x/2;var O=.5+l+_*E+x/2;var P=.5+d+b*C-w/2;var A=.5+d+b*C+w/2;var h={maxX:$._spatial.wrap(O,0,1),maxY:A,minX:$._spatial.wrap(T,0,1),minY:P};o={bbox:h,pixelHeight:M,pixelWidth:S}}}else{var j=i.state.currentTransform.basicAspect;var R=i.state.previousTransform.basicAspect;var L=$._getBasicCorners(j,R),I=L[0],N=I[0],k=I[1],D=L[1],B=D[0],F=D[1];var x=B-N;var w=F-k;var S=r.pixelWidth/x;var M=r.pixelHeight/w;var T=(x-1)/(2*x)+r.bbox.minX/x;var O=(x-1)/(2*x)+r.bbox.maxX/x;var P=(w-1)/(2*w)+r.bbox.minY/w;var A=(w-1)/(2*w)+r.bbox.maxY/w;var h={maxX:O,maxY:A,minX:T,minY:P};$._clipBoundingBox(h);o={bbox:h,pixelHeight:M,pixelWidth:S}}n.setRegionOfInterest(o)});var p=h.pipe(v.switchMap(function(e){return e.hasTexture$}),v.startWith(false),v.publishReplay(1),v.refCount());this._hasTextureSubscriptionPrev=p.subscribe(function(){});var f=this._navigator.stateService.currentState$.pipe(v.filter(function(e){return e.state.nodesAhead===0&&!!e.state.previousNode}),v.map(function(e){return e.state.previousNode}),v.distinctUntilChanged(undefined,function(e){return e.key}),v.debounceTime(1e3),v.withLatestFrom(p),v.filter(function(e){return!e[1]}),v.map(function(e){return e[0]}),v.filter(function(e){return e.pano?b.Settings.maxImageSize>b.Settings.basePanoramaSize:b.Settings.maxImageSize>b.Settings.baseImageSize}),v.switchMap(function(r){var e=r.pano?b.Settings.basePanoramaSize:b.Settings.baseImageSize;if(Math.max(r.image.width,r.image.height)>e){return d.empty()}var t=r.cacheImage$(b.Settings.maxImageSize).pipe(v.map(function(e){return[e.image,e]}));return t.pipe(v.takeUntil(p.pipe(v.filter(function(e){return e}))),v.catchError(function(e,t){console.error("Failed to fetch high res image ("+r.key+")",e);return d.empty()}))})).pipe(v.publish(),v.refCount());this._updateBackgroundSubscriptionPrev=f.pipe(v.withLatestFrom(h)).subscribe(function(e){if(e[0][1].key!==e[1].key||e[1].disposed){return}e[1].updateBackground(e[0][0])});this._updateTextureImageSubscriptionPrev=f.pipe(v.map(function(t){return function(e){e.updateTextureImage(t[0],t[1]);return e}})).subscribe(this._glRendererOperation$)};e.prototype._deactivate=function(){var t=this;this._waitSubscription.unsubscribe();this._navigator.stateService.state$.pipe(v.first()).subscribe(function(e){if(e!==g.State.Traversing){t._navigator.stateService.traverse()}});this._glRendererDisposer$.next(null);this._domRenderer.deactivate();this._modeSubcription.unsubscribe();this._setKeysSubscription.unsubscribe();this._stateSubscription.unsubscribe();this._glRenderSubscription.unsubscribe();this._domRenderSubscription.unsubscribe();this._moveSubscription.unsubscribe();this._updateCurtainSubscription.unsubscribe();this._textureProviderSubscription.unsubscribe();this._setTextureProviderSubscription.unsubscribe();this._setTileSizeSubscription.unsubscribe();this._abortTextureProviderSubscription.unsubscribe();this._setRegionOfInterestSubscription.unsubscribe();this._hasTextureSubscription.unsubscribe();this._updateBackgroundSubscription.unsubscribe();this._updateTextureImageSubscription.unsubscribe();this._textureProviderSubscriptionPrev.unsubscribe();this._setTextureProviderSubscriptionPrev.unsubscribe();this._setTileSizeSubscriptionPrev.unsubscribe();this._abortTextureProviderSubscriptionPrev.unsubscribe();this._setRegionOfInterestSubscriptionPrev.unsubscribe();this._hasTextureSubscriptionPrev.unsubscribe();this._updateBackgroundSubscriptionPrev.unsubscribe();this._updateTextureImageSubscriptionPrev.unsubscribe();this.configure({keys:null})};e.prototype._getDefaultConfiguration=function(){return{initialPosition:1,mode:m.SliderMode.Motion,sliderVisible:true}};e.prototype._catchCacheNode$=function(r){return this._navigator.graphService.cacheNode$(r).pipe(v.catchError(function(e,t){console.error("Failed to cache slider node ("+r+")",e);return d.empty()}))};e.prototype._getBasicCorners=function(e,t){var r;var n;if(e>t){r=.5;n=.5*e/t}else{r=.5*t/e;n=.5}return[[.5-r,.5-n],[.5+r,.5+n]]};e.prototype._clipBoundingBox=function(e){e.minX=Math.max(0,Math.min(1,e.minX));e.maxX=Math.max(0,Math.min(1,e.maxX));e.minY=Math.max(0,Math.min(1,e.minY));e.maxY=Math.max(0,Math.min(1,e.maxY))};e.componentName="slider";return e}(m.Component);r.SliderComponent=i;m.ComponentService.register(i);r.default=i},{"../../Component":275,"../../Geo":278,"../../Render":281,"../../State":282,"../../Tiles":284,"../../Utils":285,rxjs:27,"rxjs/operators":225}],338:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("rxjs");var i=e("rxjs/operators");var h=e("virtual-dom");var o=e("../../Component");var a=function(){function e(e){this._container=e;this._interacting=false;this._notifyModeChanged$=new n.Subject;this._notifyPositionChanged$=new n.Subject;this._stopInteractionSubscription=null}Object.defineProperty(e.prototype,"mode$",{get:function(){return this._notifyModeChanged$},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"position$",{get:function(){return this._notifyPositionChanged$},enumerable:true,configurable:true});e.prototype.activate=function(){var t=this;if(!!this._stopInteractionSubscription){return}this._stopInteractionSubscription=n.merge(this._container.mouseService.documentMouseUp$,this._container.touchService.touchEnd$.pipe(i.filter(function(e){return e.touches.length===0}))).subscribe(function(e){if(t._interacting){t._interacting=false}})};e.prototype.deactivate=function(){if(!this._stopInteractionSubscription){return}this._interacting=false;this._stopInteractionSubscription.unsubscribe();this._stopInteractionSubscription=null};e.prototype.render=function(e,t,r,n,i){var o=[];if(i){o.push(h.h("div.SliderBorder",[]));var a=!(r||n);if(a){o.push(this._createModeButton(t))}o.push(this._createPositionInput(e,a))}var s=this._container.domContainer.getBoundingClientRect();var u=Math.max(215,Math.min(400,s.width-100));return h.h("div.SliderContainer",{style:{width:u+"px"}},o)};e.prototype._createModeButton=function(e){var t=this;var r={onclick:function(){t._notifyModeChanged$.next(e===o.SliderMode.Motion?o.SliderMode.Stationary:o.SliderMode.Motion)}};var n=e===o.SliderMode.Stationary?"SliderModeButtonPressed":"SliderModeButton";return h.h("div."+n,r,[h.h("div.SliderModeIcon",[])])};e.prototype._createPositionInput=function(e,t){var r=this;var n=function(e){r._notifyPositionChanged$.next(Number(e.target.value)/1e3)};var i=function(e){r._interacting=true;e.stopPropagation()};var o=function(e){if(r._interacting){e.stopPropagation()}};var a=function(e){if(e.key==="ArrowDown"||e.key==="ArrowLeft"||e.key==="ArrowRight"||e.key==="ArrowUp"){e.preventDefault()}};var s=this._container.domContainer.getBoundingClientRect();var u=Math.max(215,Math.min(400,s.width-105))-68+(t?0:36);var c=h.h("input.SliderPosition",{max:1e3,min:0,onchange:n,oninput:n,onkeydown:a,onmousedown:i,onmousemove:o,ontouchmove:o,ontouchstart:i,style:{width:u+"px"},type:"range",value:1e3*e},[]);return h.h("div.SliderPositionContainer",[c])};return e}();r.SliderDOMRenderer=a;r.default=a},{"../../Component":275,rxjs:27,"rxjs/operators":225,"virtual-dom":231}],339:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var E=e("../../Component");var C=e("../../Geo");var n=function(){function e(){this._factory=new E.MeshFactory;this._scene=new E.MeshScene;this._spatial=new C.Spatial;this._currentKey=null;this._previousKey=null;this._disabled=false;this._curtain=1;this._frameId=0;this._needsRender=false;this._mode=null;this._currentProviderDisposers={};this._previousProviderDisposers={}}Object.defineProperty(e.prototype,"disabled",{get:function(){return this._disabled},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"frameId",{get:function(){return this._frameId},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"needsRender",{get:function(){return this._needsRender},enumerable:true,configurable:true});e.prototype.setTextureProvider=function(e,t){this._setTextureProvider(e,this._currentKey,t,this._currentProviderDisposers,this._updateTexture.bind(this))};e.prototype.setTextureProviderPrev=function(e,t){this._setTextureProvider(e,this._previousKey,t,this._previousProviderDisposers,this._updateTexturePrev.bind(this))};e.prototype.update=function(e,t){this._updateFrameId(e.id);this._updateImagePlanes(e.state,t)};e.prototype.updateCurtain=function(e){if(this._curtain===e){return}this._curtain=e;this._updateCurtain();this._needsRender=true};e.prototype.updateTexture=function(e,t){var r=t.key===this._currentKey?this._scene.imagePlanes:t.key===this._previousKey?this._scene.imagePlanesOld:[];if(r.length===0){return}this._needsRender=true;for(var n=0,i=r;n<i.length;n++){var o=i[n];var a=o.material;var s=a.uniforms.projectorTex.value;s.image=e;s.needsUpdate=true}};e.prototype.updateTextureImage=function(e,t){if(this._currentKey!==t.key){return}this._needsRender=true;for(var r=0,n=this._scene.imagePlanes;r<n.length;r++){var i=n[r];var o=i.material;var a=o.uniforms.projectorTex.value;a.image=e;a.needsUpdate=true}};e.prototype.render=function(e,t){if(!this.disabled){t.render(this._scene.sceneOld,e)}t.render(this._scene.scene,e);this._needsRender=false};e.prototype.dispose=function(){this._scene.clear();for(var e in this._currentProviderDisposers){if(!this._currentProviderDisposers.hasOwnProperty(e)){continue}this._currentProviderDisposers[e]()}for(var e in this._previousProviderDisposers){if(!this._previousProviderDisposers.hasOwnProperty(e)){continue}this._previousProviderDisposers[e]()}this._currentProviderDisposers={};this._previousProviderDisposers={}};e.prototype._getBasicCorners=function(e,t){var r;var n;if(e>t){r=.5;n=.5*e/t}else{r=.5*t/e;n=.5}return[[.5-r,.5-n],[.5+r,.5+n]]};e.prototype._setDisabled=function(e){this._disabled=e.currentNode==null||e.previousNode==null||e.currentNode.pano&&!e.currentNode.fullPano||e.previousNode.pano&&!e.previousNode.fullPano||e.currentNode.fullPano&&!e.previousNode.fullPano};e.prototype._setTextureProvider=function(e,t,r,n,i){var o=this;if(e!==t){return}var a=r.textureCreated$.subscribe(i);var s=r.textureUpdated$.subscribe(function(e){o._needsRender=true});var u=function(){a.unsubscribe();s.unsubscribe();r.dispose()};if(e in n){var c=n[e];c();delete n[e]}n[e]=u};e.prototype._updateCurtain=function(){for(var e=0,t=this._scene.imagePlanes;e<t.length;e++){var r=t[e];var n=r.material;if(!!n.uniforms.curtain){n.uniforms.curtain.value=this._curtain}}};e.prototype._updateFrameId=function(e){this._frameId=e};e.prototype._updateImagePlanes=function(e,t){var r=e.currentNode!=null&&this._currentKey!==e.currentNode.key;var n=e.previousNode!=null&&this._previousKey!==e.previousNode.key;var i=this._mode!==t;if(!(r||n||i)){return}this._setDisabled(e);this._needsRender=true;this._mode=t;var o=e.motionless||t===E.SliderMode.Stationary||e.currentNode.pano;if(this.disabled||n){if(this._previousKey in this._previousProviderDisposers){this._previousProviderDisposers[this._previousKey]();delete this._previousProviderDisposers[this._previousKey]}}if(this.disabled){this._scene.setImagePlanesOld([])}else{if(n||i){var a=e.previousNode;this._previousKey=a.key;var s=e.currentTransform.rt.elements;var u=[s[12],s[13],s[14]];var c=e.currentTransform.basicAspect;var h=e.previousTransform.basicAspect;var l=c>h?[1,h/c]:[c/h,1];var p=e.currentNode.rotation;var f=e.currentNode.width;var d=e.currentNode.height;if(a.fullPano){p=e.previousNode.rotation;u=this._spatial.rotate(this._spatial.opticalCenter(e.currentNode.rotation,u).toArray(),p).multiplyScalar(-1).toArray();f=e.previousNode.width;d=e.previousNode.height}var v=new C.Transform(e.currentNode.orientation,f,d,e.currentNode.focal,e.currentNode.scale,a.gpano,p,u,a.image,l);var m=undefined;if(a.fullPano){m=this._factory.createMesh(a,o||e.currentNode.fullPano?v:e.previousTransform)}else{if(o){var g=this._getBasicCorners(c,h),y=g[0],_=y[0],b=y[1],x=g[1],w=x[0],S=x[1];m=this._factory.createFlatMesh(e.previousNode,v,_,w,b,S)}else{m=this._factory.createMesh(e.previousNode,e.previousTransform)}}this._scene.setImagePlanesOld([m])}}if(r||i){if(this._currentKey in this._currentProviderDisposers){this._currentProviderDisposers[this._currentKey]();delete this._currentProviderDisposers[this._currentKey]}this._currentKey=e.currentNode.key;var M=[];if(e.currentNode.fullPano){M.push(this._factory.createCurtainMesh(e.currentNode,e.currentTransform))}else if(e.currentNode.pano&&!e.currentNode.fullPano){M.push(this._factory.createMesh(e.currentNode,e.currentTransform))}else{if(o){M.push(this._factory.createDistortedCurtainMesh(e.currentNode,e.currentTransform))}else{M.push(this._factory.createCurtainMesh(e.currentNode,e.currentTransform))}}this._scene.setImagePlanes(M);this._updateCurtain()}};e.prototype._updateTexture=function(e){this._needsRender=true;for(var t=0,r=this._scene.imagePlanes;t<r.length;t++){var n=r[t];var i=n.material;var o=i.uniforms.projectorTex.value;i.uniforms.projectorTex.value=null;o.dispose();i.uniforms.projectorTex.value=e}};e.prototype._updateTexturePrev=function(e){this._needsRender=true;for(var t=0,r=this._scene.imagePlanesOld;t<r.length;t++){var n=r[t];var i=n.material;var o=i.uniforms.projectorTex.value;i.uniforms.projectorTex.value=null;o.dispose();i.uniforms.projectorTex.value=e}};return e}();r.SliderGLRenderer=n;r.default=n},{"../../Component":275,"../../Geo":278}],340:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var o=e("latlon-geohash");var s=e("rxjs");var u=e("rxjs/operators");var c=e("../../Error");var i=e("../../Utils");var n=function(){function e(e){this._graphService=e;this._tiles={};this._cacheRequests={};this._reconstructions={};this._cachingReconstructions$={};this._cachingTiles$={}}e.prototype.cacheReconstructions$=function(r){var n=this;if(!this.hasTile(r)){throw new Error("Cannot cache reconstructions of a non-existing tile.")}if(this.hasReconstructions(r)){throw new Error("Cannot cache reconstructions that already exists.")}if(this.isCachingReconstructions(r)){return this._cachingReconstructions$[r]}var e=[];if(r in this._reconstructions){var t=this.getReconstructions(r).map(function(e){return e.data.key});for(var i=0,o=this.getTile(r);i<o.length;i++){var a=o[i];if(t.indexOf(a.key)===-1){e.push(a)}}}else{e.push.apply(e,this.getTile(r));this._reconstructions[r]=[]}this._cacheRequests[r]=[];this._cachingReconstructions$[r]=s.from(e).pipe(u.mergeMap(function(t){return!n._cacheRequests[r]?s.empty():s.zip(s.of(t),n._getAtomicReconstruction(t.key,n._cacheRequests[r])).pipe(u.catchError(function(e){if(e instanceof c.AbortMapillaryError){return s.empty()}console.error(e);return s.of([t,null])}))},6),u.map(function(e){var t=e[0],r=e[1];return{data:t,reconstruction:r}}),u.filter(function(){return r in n._reconstructions}),u.tap(function(e){n._reconstructions[r].push(e)}),u.filter(function(e){return!!e.reconstruction}),u.finalize(function(){if(r in n._cachingReconstructions$){delete n._cachingReconstructions$[r]}if(r in n._cacheRequests){delete n._cacheRequests[r]}}),u.publish(),u.refCount());return this._cachingReconstructions$[r]};e.prototype.cacheTile$=function(r){var n=this;if(r.length!==8){throw new Error("Hash needs to be level 8.")}if(this.hasTile(r)){throw new Error("Cannot cache tile that already exists.")}if(this.hasTile(r)){return this._cachingTiles$[r]}var e=o.bounds(r);var t={lat:e.sw.lat,lon:e.sw.lon};var i={lat:e.ne.lat,lon:e.ne.lon};this._tiles[r]=[];this._cachingTiles$[r]=this._graphService.cacheBoundingBox$(t,i).pipe(u.catchError(function(e){console.error(e);delete n._tiles[r];return s.empty()}),u.map(function(e){return e.map(function(e){return n._createNodeData(e)})}),u.filter(function(){return r in n._tiles}),u.tap(function(e){var t;(t=n._tiles[r]).push.apply(t,e);delete n._cachingTiles$[r]}),u.finalize(function(){if(r in n._cachingTiles$){delete n._cachingTiles$[r]}}),u.publish(),u.refCount());return this._cachingTiles$[r]};e.prototype.isCachingReconstructions=function(e){return e in this._cachingReconstructions$};e.prototype.isCachingTile=function(e){return e in this._cachingTiles$};e.prototype.hasReconstructions=function(e){return!(e in this._cachingReconstructions$)&&e in this._reconstructions&&this._reconstructions[e].length===this._tiles[e].length};e.prototype.hasTile=function(e){return!(e in this._cachingTiles$)&&e in this._tiles};e.prototype.getReconstructions=function(e){return e in this._reconstructions?this._reconstructions[e].filter(function(e){return!!e.reconstruction}):[]};e.prototype.getTile=function(e){return e in this._tiles?this._tiles[e]:[]};e.prototype.uncache=function(e){for(var t=0,r=Object.keys(this._cacheRequests);t<r.length;t++){var n=r[t];if(!!e&&e.indexOf(n)!==-1){continue}for(var i=0,o=this._cacheRequests[n];i<o.length;i++){var a=o[i];a.abort()}delete this._cacheRequests[n]}for(var s=0,u=Object.keys(this._reconstructions);s<u.length;s++){var n=u[s];if(!!e&&e.indexOf(n)!==-1){continue}delete this._reconstructions[n]}for(var c=0,h=Object.keys(this._tiles);c<h.length;c++){var n=h[c];if(!!e&&e.indexOf(n)!==-1){continue}delete this._tiles[n]}};e.prototype._createNodeData=function(e){return{alt:e.alt,cameraProjection:e.cameraProjection,focal:e.focal,gpano:e.gpano,height:e.height,k1:e.ck1,k2:e.ck2,key:e.key,lat:e.latLon.lat,lon:e.latLon.lon,mergeCC:e.mergeCC,orientation:e.orientation,originalLat:e.originalLatLon.lat,originalLon:e.originalLatLon.lon,rotation:[e.rotation[0],e.rotation[1],e.rotation[2]],scale:e.scale,width:e.width}};e.prototype._getAtomicReconstruction=function(r,n){return s.Observable.create(function(e){var t=new XMLHttpRequest;t.open("GET",i.Urls.atomicReconstruction(r),true);t.responseType="json";t.timeout=15e3;t.onload=function(){if(!t.response){e.error(new Error("Atomic reconstruction does not exist ("+r+")"))}else{e.next(t.response);e.complete()}};t.onerror=function(){e.error(new Error("Failed to get atomic reconstruction ("+r+")"))};t.ontimeout=function(){e.error(new Error("Atomic reconstruction request timed out ("+r+")"))};t.onabort=function(){e.error(new c.AbortMapillaryError("Atomic reconstruction request was aborted ("+r+")"))};n.push(t);t.send(null)})};return e}();r.SpatialDataCache=n;r.default=n},{"../../Error":277,"../../Utils":285,"latlon-geohash":21,rxjs:27,"rxjs/operators":225}],341:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var d=e("latlon-geohash");var h=e("rxjs");var l=e("rxjs/operators");var o=e("../../Component");var a=e("../../Geo");var s=e("../../Render");var u=e("../../viewer/PlayService");var p=e("../../state/State");var i=function(i){n(e,i);function e(e,t,r){var n=i.call(this,e,t,r)||this;n._cache=new o.SpatialDataCache(r.graphService);n._scene=new o.SpatialDataScene(n._getDefaultConfiguration());n._viewportCoords=new a.ViewportCoords;n._geoCoords=new a.GeoCoords;return n}e.prototype._activate=function(){var c=this;this._earthControlsSubscription=this._configuration$.pipe(l.map(function(e){return e.earthControls}),l.distinctUntilChanged(),l.withLatestFrom(this._navigator.stateService.state$)).subscribe(function(e){var t=e[0],r=e[1];if(t&&r!==p.default.Earth){c._navigator.stateService.earth()}else if(!t&&r===p.default.Earth){c._navigator.stateService.traverse()}});var e=this._container.renderService.bearing$.pipe(l.map(function(e){var t="";if(e>292.5||e<=67.5){t+="n"}if(e>112.5&&e<=247.5){t+="s"}if(e>22.5&&e<=157.5){t+="e"}if(e>202.5&&e<=337.5){t+="w"}return t}),l.distinctUntilChanged(),l.publishReplay(1),l.refCount());var t=this._navigator.stateService.reference$.pipe(l.tap(function(){c._scene.uncache()}),l.switchMap(function(){return c._navigator.stateService.currentNode$.pipe(l.map(function(e){return d.encode(e.latLon.lat,e.latLon.lon,8)}),l.distinctUntilChanged())}),l.publishReplay(1),l.refCount());var r=h.combineLatest(this._navigator.playService.playing$,this._navigator.playService.speed$).pipe(l.map(function(e){var t=e[0],r=e[1];return t&&r>u.default.sequenceSpeed}),l.distinctUntilChanged(),l.publishReplay(1),l.refCount());this._addSubscription=h.combineLatest(this._navigator.stateService.state$.pipe(l.map(function(e){return e===p.default.Earth}),l.distinctUntilChanged()),t,r,e).pipe(l.distinctUntilChanged(function(e,t){var r=e[0],n=e[1],i=e[2],o=e[3];var a=t[0],s=t[1],u=t[2],c=t[3];if(r!==a){return false}if(r){return n===s&&i===u}return n===s&&i===u&&o===c}),l.concatMap(function(e){var t=e[0],r=e[1],n=e[2],i=e[3];if(t){return n?h.of([r]):h.of(c._adjacentComponent(r,4))}return n?h.of([r,d.neighbours(r)[i]]):h.of(c._computeTiles(r,i))}),l.switchMap(function(e){return h.from(e).pipe(l.mergeMap(function(e){var t;if(c._cache.hasTile(e)){t=h.of(c._cache.getTile(e))}else if(c._cache.isCachingTile(e)){t=c._cache.cacheTile$(e).pipe(l.last(null,{}),l.switchMap(function(){return h.of(c._cache.getTile(e))}))}else{t=c._cache.cacheTile$(e)}return h.combineLatest(h.of(e),t)},1),l.map(function(e){var t=e[0];return t}))}),l.concatMap(function(e){var t;if(c._cache.hasReconstructions(e)){t=h.from(c._cache.getReconstructions(e))}else if(c._cache.isCachingReconstructions(e)){t=c._cache.cacheReconstructions$(e).pipe(l.last(null,{}),l.switchMap(function(){return h.from(c._cache.getReconstructions(e))}))}else if(c._cache.hasTile(e)){t=c._cache.cacheReconstructions$(e)}else{t=h.empty()}return h.combineLatest(h.of(e),t)}),l.withLatestFrom(this._navigator.stateService.reference$),l.tap(function(e){var t=e[0][0],r=e[1];if(c._scene.hasTile(t)){return}c._scene.addTile(c._computeTileBBox(t,r),t)}),l.filter(function(e){var t=e[0],r=t[0],n=t[1];return!c._scene.hasReconstruction(n.reconstruction.main_shot,r)}),l.map(function(e){var t=e[0],r=t[0],n=t[1],i=e[1];return[n,c._createTransform(n.data,i),c._computeOriginalPosition(n.data,i),r]})).subscribe(function(e){var t=e[0],r=e[1],n=e[2],i=e[3];c._scene.addReconstruction(t.reconstruction,r,n,!!t.data.mergeCC?t.data.mergeCC.toString():"",i)});this._cameraVisibilitySubscription=this._configuration$.pipe(l.map(function(e){return e.camerasVisible}),l.distinctUntilChanged()).subscribe(function(e){c._scene.setCameraVisibility(e)});this._pointVisibilitySubscription=this._configuration$.pipe(l.map(function(e){return e.pointsVisible}),l.distinctUntilChanged()).subscribe(function(e){c._scene.setPointVisibility(e)});this._positionVisibilitySubscription=this._configuration$.pipe(l.map(function(e){return e.positionsVisible}),l.distinctUntilChanged()).subscribe(function(e){c._scene.setPositionVisibility(e)});this._tileVisibilitySubscription=this._configuration$.pipe(l.map(function(e){return e.tilesVisible}),l.distinctUntilChanged()).subscribe(function(e){c._scene.setTileVisibility(e)});this._visualizeConnectedComponentSubscription=this._configuration$.pipe(l.map(function(e){return e.connectedComponents}),l.distinctUntilChanged()).subscribe(function(e){c._scene.setConnectedComponentVisualization(e)});this._uncacheSubscription=t.subscribe(function(e){var t=c._adjacentComponent(e,4);c._scene.uncache(t);c._cache.uncache(t)});this._moveSubscription=this._navigator.playService.playing$.pipe(l.switchMap(function(e){return e?h.empty():c._container.mouseService.dblClick$}),l.withLatestFrom(this._container.renderService.renderCamera$),l.switchMap(function(e){var t=e[0],r=e[1];var n=c._container.element;var i=c._viewportCoords.canvasPosition(t,n),o=i[0],a=i[1];var s=c._viewportCoords.canvasToViewport(o,a,n);var u=c._scene.intersectObjects(s,r.perspective);return!!u?c._navigator.moveToKey$(u).pipe(l.catchError(function(){return h.empty()})):h.empty()})).subscribe();this._renderSubscription=this._navigator.stateService.currentState$.pipe(l.map(function(e){var t=c._scene;return{name:c._name,render:{frameId:e.id,needsRender:t.needsRender,render:t.render.bind(t),stage:s.GLRenderStage.Foreground}}})).subscribe(this._container.glRenderer.render$)};e.prototype._deactivate=function(){var t=this;this._cache.uncache();this._scene.uncache();this._addSubscription.unsubscribe();this._cameraVisibilitySubscription.unsubscribe();this._earthControlsSubscription.unsubscribe();this._moveSubscription.unsubscribe();this._pointVisibilitySubscription.unsubscribe();this._positionVisibilitySubscription.unsubscribe();this._renderSubscription.unsubscribe();this._tileVisibilitySubscription.unsubscribe();this._uncacheSubscription.unsubscribe();this._visualizeConnectedComponentSubscription.unsubscribe();this._navigator.stateService.state$.pipe(l.first()).subscribe(function(e){if(e===p.default.Earth){t._navigator.stateService.traverse()}})};e.prototype._getDefaultConfiguration=function(){return{camerasVisible:false,pointsVisible:true,positionsVisible:false,tilesVisible:false}};e.prototype._adjacentComponent=function(e,t){var r=new Set;r.add(e);this._adjacentComponentRecursive(r,[e],0,t);return this._setToArray(r)};e.prototype._adjacentComponentRecursive=function(e,t,r,n){if(r===n){return}var i=[];for(var o=0,a=t;o<a.length;o++){var s=a[o];var u=d.neighbours(s);for(var c in u){if(!u.hasOwnProperty(c)){continue}i.push(u[c])}}var h=[];for(var l=0,p=i;l<p.length;l++){var f=p[l];if(!e.has(f)){e.add(f);h.push(f)}}this._adjacentComponentRecursive(e,h,r+1,n)};e.prototype._computeOriginalPosition=function(e,t){return this._geoCoords.geodeticToEnu(e.originalLat,e.originalLon,e.alt,t.lat,t.lon,t.alt)};e.prototype._computeTileBBox=function(e,t){var r=d.bounds(e);var n=this._geoCoords.geodeticToEnu(r.sw.lat,r.sw.lon,0,t.lat,t.lon,t.alt);var i=this._geoCoords.geodeticToEnu(r.ne.lat,r.ne.lon,0,t.lat,t.lon,t.alt);return[n,i]};e.prototype._createTransform=function(e,t){var r=a.Geo.computeTranslation({alt:e.alt,lat:e.lat,lon:e.lon},e.rotation,t);var n=new a.Transform(e.orientation,e.width,e.height,e.focal,e.scale,e.gpano,e.rotation,r,undefined,undefined,e.k1,e.k2,e.cameraProjection);return n};e.prototype._computeTiles=function(e,t){var r=new Set;var n=["n","ne","e","se","s","sw","w","nw"];this._computeTilesRecursive(r,e,t,n,0,2);return this._setToArray(r)};e.prototype._computeTilesRecursive=function(e,t,r,n,i,o){e.add(t);if(i===o){return}var a=d.neighbours(t);var s=n.indexOf(r);var u=n.length;var c=[a[n[this._modulo(s-1,u)]],a[r],a[n[this._modulo(s+1,u)]]];for(var h=0,l=c;h<l.length;h++){var p=l[h];this._computeTilesRecursive(e,p,r,n,i+1,o)}};e.prototype._modulo=function(e,t){return(e%t+t)%t};e.prototype._setToArray=function(e){var t=[];e.forEach(function(e){t.push(e)});return t};e.componentName="spatialData";return e}(o.Component);r.SpatialDataComponent=i;o.ComponentService.register(i);r.default=i},{"../../Component":275,"../../Geo":278,"../../Render":281,"../../state/State":412,"../../viewer/PlayService":441,"latlon-geohash":21,rxjs:27,"rxjs/operators":225}],342:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var d=e("three");var n=function(){function e(e,t,r){this._scene=!!t?t:new d.Scene;this._raycaster=!!r?r:new d.Raycaster(undefined,undefined,.8);this._connectedComponentColors={};this._needsRender=false;this._interactiveObjects=[];this._reconstructions={};this._tiles={};this._camerasVisible=e.camerasVisible;this._pointsVisible=e.pointsVisible;this._positionsVisible=e.positionsVisible;this._tilesVisible=e.tilesVisible;this._visualizeConnectedComponents=e.connectedComponents}Object.defineProperty(e.prototype,"needsRender",{get:function(){return this._needsRender},enumerable:true,configurable:true});e.prototype.addReconstruction=function(e,t,r,n,i){if(!(i in this._reconstructions)){this._reconstructions[i]={cameraKeys:{},cameras:new d.Object3D,connectedComponents:{},keys:[],points:new d.Object3D,positions:new d.Object3D};this._reconstructions[i].cameras.visible=this._camerasVisible;this._reconstructions[i].points.visible=this._pointsVisible;this._reconstructions[i].positions.visible=this._positionsVisible;this._scene.add(this._reconstructions[i].cameras,this._reconstructions[i].points,this._reconstructions[i].positions)}if(!(n in this._reconstructions[i].connectedComponents)){this._reconstructions[i].connectedComponents[n]=[]}if(t.hasValidScale){this._reconstructions[i].points.add(this._createPoints(e,t))}var o=this._createCamera(t);this._reconstructions[i].cameras.add(o);for(var a=0,s=o.children;a<s.length;a++){var u=s[a];this._reconstructions[i].cameraKeys[u.uuid]=e.main_shot;this._interactiveObjects.push(u)}this._reconstructions[i].connectedComponents[n].push(o);var c=this._getColor(n,this._visualizeConnectedComponents);this._setCameraColor(c,o);this._reconstructions[i].positions.add(this._createPosition(t,r));this._reconstructions[i].keys.push(e.main_shot);this._needsRender=true};e.prototype.addTile=function(e,t){if(this.hasTile(t)){return}var r=e[0];var n=e[1];var i=new d.Geometry;i.vertices.push((new d.Vector3).fromArray(r),new d.Vector3(r[0],n[1],(r[2]+n[2])/2),(new d.Vector3).fromArray(n),new d.Vector3(n[0],r[1],(r[2]+n[2])/2),(new d.Vector3).fromArray(r));var o=new d.Line(i,new d.LineBasicMaterial);this._tiles[t]=new d.Object3D;this._tiles[t].visible=this._tilesVisible;this._tiles[t].add(o);this._scene.add(this._tiles[t]);this._needsRender=true};e.prototype.uncache=function(e){for(var t=0,r=Object.keys(this._reconstructions);t<r.length;t++){var n=r[t];if(!!e&&e.indexOf(n)!==-1){continue}this._disposeReconstruction(n)}for(var i=0,o=Object.keys(this._tiles);i<o.length;i++){var n=o[i];if(!!e&&e.indexOf(n)!==-1){continue}this._disposeTile(n)}this._needsRender=true};e.prototype.hasReconstruction=function(e,t){return t in this._reconstructions&&this._reconstructions[t].keys.indexOf(e)!==-1};e.prototype.hasTile=function(e){return e in this._tiles};e.prototype.intersectObjects=function(e,t){var r=e[0],n=e[1];if(!this._camerasVisible){return null}this._raycaster.setFromCamera(new d.Vector2(r,n),t);var i=this._raycaster.intersectObjects(this._interactiveObjects);for(var o=0,a=i;o<a.length;o++){var s=a[o];for(var u in this._reconstructions){if(!this._reconstructions.hasOwnProperty(u)){continue}if(s.object.uuid in this._reconstructions[u].cameraKeys){return this._reconstructions[u].cameraKeys[s.object.uuid]}}}return null};e.prototype.setCameraVisibility=function(e){if(e===this._camerasVisible){return}for(var t in this._reconstructions){if(!this._reconstructions.hasOwnProperty(t)){continue}this._reconstructions[t].cameras.visible=e}this._camerasVisible=e;this._needsRender=true};e.prototype.setPointVisibility=function(e){if(e===this._pointsVisible){return}for(var t in this._reconstructions){if(!this._reconstructions.hasOwnProperty(t)){continue}this._reconstructions[t].points.visible=e}this._pointsVisible=e;this._needsRender=true};e.prototype.setPositionVisibility=function(e){if(e===this._positionsVisible){return}for(var t in this._reconstructions){if(!this._reconstructions.hasOwnProperty(t)){continue}this._reconstructions[t].positions.visible=e}this._positionsVisible=e;this._needsRender=true};e.prototype.setTileVisibility=function(e){if(e===this._tilesVisible){return}for(var t in this._tiles){if(!this._tiles.hasOwnProperty(t)){continue}this._tiles[t].visible=e}this._tilesVisible=e;this._needsRender=true};e.prototype.setConnectedComponentVisualization=function(e){if(e===this._visualizeConnectedComponents){return}for(var t in this._reconstructions){if(!this._reconstructions.hasOwnProperty(t)){continue}var r=this._reconstructions[t].connectedComponents;for(var n in r){if(!r.hasOwnProperty(n)){continue}var i=this._getColor(n,e);for(var o=0,a=r[n];o<a.length;o++){var s=a[o];this._setCameraColor(i,s)}}}this._visualizeConnectedComponents=e;this._needsRender=true};e.prototype.render=function(e,t){t.render(this._scene,e);this._needsRender=false};e.prototype._arrayToFloatArray=function(e,t){var r=e.length;var n=new Float32Array(r*t);for(var i=0;i<r;i++){var o=e[i];var a=3*i;n[a+0]=o[0];n[a+1]=o[1];n[a+2]=o[2]}return n};e.prototype._createAxis=function(e){var t=e.unprojectBasic([.5,0],.22);var r=e.unprojectBasic([.5,1],.16);var n=new d.BufferGeometry;n.addAttribute("position",new d.BufferAttribute(this._arrayToFloatArray([t,r],3),3));return new d.Line(n,new d.LineBasicMaterial)};e.prototype._createCamera=function(e){return!!e.gpano?this._createPanoCamera(e):this._createPrespectiveCamera(e)};e.prototype._createDiagonals=function(e,t){var r=e.unprojectBasic([0,0],0,true);var n=e.unprojectBasic([0,0],t,true);var i=e.unprojectBasic([1,0],t,true);var o=e.unprojectBasic([1,1],t,true);var a=e.unprojectBasic([0,1],t,true);var s=[r,n,r,i,r,o,r,a];var u=new d.BufferGeometry;u.addAttribute("position",new d.BufferAttribute(this._arrayToFloatArray(s,3),3));return new d.LineSegments(u,new d.LineBasicMaterial)};e.prototype._createFrame=function(t,r){var e=[];e.push.apply(e,this._subsample([0,1],[0,0],20));e.push.apply(e,this._subsample([0,0],[1,0],20));e.push.apply(e,this._subsample([1,0],[1,1],20));var n=e.map(function(e){return t.unprojectBasic(e,r,true)});var i=new d.BufferGeometry;i.addAttribute("position",new d.BufferAttribute(this._arrayToFloatArray(n,3),3));return new d.Line(i,new d.LineBasicMaterial)};e.prototype._createLatitude=function(e,t,r){var n=new Float32Array((t+1)*3);for(var i=0;i<=t;i++){var o=r.unprojectBasic([i/t,e],.16);var a=3*i;n[a+0]=o[0];n[a+1]=o[1];n[a+2]=o[2]}var s=new d.BufferGeometry;s.addAttribute("position",new d.BufferAttribute(n,3));return new d.Line(s,new d.LineBasicMaterial)};e.prototype._createLongitude=function(e,t,r){var n=new Float32Array((t+1)*3);for(var i=0;i<=t;i++){var o=r.unprojectBasic([e,i/t],.16);var a=3*i;n[a+0]=o[0];n[a+1]=o[1];n[a+2]=o[2]}var s=new d.BufferGeometry;s.addAttribute("position",new d.BufferAttribute(n,3));return new d.Line(s,new d.LineBasicMaterial)};e.prototype._createPanoCamera=function(e){var t=new d.Object3D;t.children.push(this._createAxis(e));t.children.push(this._createLatitude(.5,10,e));t.children.push(this._createLongitude(0,6,e));t.children.push(this._createLongitude(.25,6,e));t.children.push(this._createLongitude(.5,6,e));t.children.push(this._createLongitude(.75,6,e));return t};e.prototype._createPoints=function(t,e){var r=(new d.Matrix4).getInverse(e.srt);var n=Object.keys(t.points).map(function(e){return t.points[e]});var i=n.length;var o=new Float32Array(i*3);var a=new Float32Array(i*3);for(var s=0;s<i;s++){var u=3*s;var c=n[s].coordinates;var h=new d.Vector3(c[0],c[1],c[2]).applyMatrix4(r);o[u+0]=h.x;o[u+1]=h.y;o[u+2]=h.z;var l=n[s].color;a[u+0]=l[0]/255;a[u+1]=l[1]/255;a[u+2]=l[2]/255}var p=new d.BufferGeometry;p.addAttribute("position",new d.BufferAttribute(o,3));p.addAttribute("color",new d.BufferAttribute(a,3));var f=new d.PointsMaterial({size:.1,vertexColors:d.VertexColors});return new d.Points(p,f)};e.prototype._createPosition=function(e,t){var r=e.unprojectBasic([0,0],0);var n=[t,r];var i=new d.BufferGeometry;i.addAttribute("position",new d.BufferAttribute(this._arrayToFloatArray(n,3),3));return new d.Line(i,new d.LineBasicMaterial({color:new d.Color(1,0,0)}))};e.prototype._createPrespectiveCamera=function(e){var t=.2;var r=new d.Object3D;r.children.push(this._createDiagonals(e,t));r.children.push(this._createFrame(e,t));return r};e.prototype._disposeCameras=function(e){var t=this._reconstructions[e].cameras;for(var r=0,n=t.children.slice();r<n.length;r++){var i=n[r];for(var o=0,a=i.children;o<a.length;o++){var s=a[o];s.geometry.dispose();s.material.dispose();var u=this._interactiveObjects.indexOf(s);if(u!==-1){this._interactiveObjects.splice(u,1)}else{console.warn("Object does not exist ("+s.id+") for "+e)}}t.remove(i)}this._scene.remove(t)};e.prototype._disposePoints=function(e){var t=this._reconstructions[e].points;for(var r=0,n=t.children.slice();r<n.length;r++){var i=n[r];i.geometry.dispose();i.material.dispose();t.remove(i)}this._scene.remove(t)};e.prototype._disposePositions=function(e){var t=this._reconstructions[e].positions;for(var r=0,n=t.children.slice();r<n.length;r++){var i=n[r];i.geometry.dispose();i.material.dispose();t.remove(i)}this._scene.remove(t)};e.prototype._disposeReconstruction=function(e){this._disposeCameras(e);this._disposePoints(e);this._disposePositions(e);delete this._reconstructions[e]};e.prototype._disposeTile=function(e){var t=this._tiles[e];for(var r=0,n=t.children.slice();r<n.length;r++){var i=n[r];i.geometry.dispose();i.material.dispose();t.remove(i)}this._scene.remove(t);delete this._tiles[e]};e.prototype._getColor=function(e,t){return t?this._getConnectedComponentColor(e):"#FFFFFF"};e.prototype._getConnectedComponentColor=function(e){if(!(e in this._connectedComponentColors)){this._connectedComponentColors[e]=this._randomColor()}return this._connectedComponentColors[e]};e.prototype._interpolate=function(e,t,r){return e+r*(t-e)};e.prototype._randomColor=function(){return"hsl("+Math.floor(360*Math.random())+", 100%, 65%)"};e.prototype._setCameraColor=function(e,t){for(var r=0,n=t.children;r<n.length;r++){var i=n[r];i.material.color=new d.Color(e)}};e.prototype._subsample=function(e,t,r){if(r<1){return[e,t]}var n=[];for(var i=0;i<=r+1;i++){var o=[];for(var a=0;a<3;a++){o.push(this._interpolate(e[a],t[a],i/(r+1)))}n.push(o)}return n};return e}();r.SpatialDataScene=n;r.default=n},{three:226}],343:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("./error/GeometryTagError");r.GeometryTagError=n.GeometryTagError;var i=e("./geometry/PointGeometry");r.PointGeometry=i.PointGeometry;var o=e("./geometry/RectGeometry");r.RectGeometry=o.RectGeometry;var a=e("./geometry/PolygonGeometry");r.PolygonGeometry=a.PolygonGeometry;var s=e("./tag/OutlineTag");r.OutlineTag=s.OutlineTag;var u=e("./tag/SpotTag");r.SpotTag=u.SpotTag;var c=e("./tag/TagDomain");r.TagDomain=c.TagDomain;var h=e("./TagComponent");r.TagComponent=h.TagComponent;var l=e("./TagMode");r.TagMode=l.TagMode},{"./TagComponent":344,"./TagMode":347,"./error/GeometryTagError":351,"./geometry/PointGeometry":353,"./geometry/PolygonGeometry":354,"./geometry/RectGeometry":355,"./tag/OutlineTag":367,"./tag/SpotTag":370,"./tag/TagDomain":372}],344:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var a=e("rxjs");var u=e("rxjs/operators");var s=e("when");var c=e("../../Component");var h=e("../../Geo");var l=e("../../Render");var i=function(i){n(o,i);function o(e,t,r){var n=i.call(this,e,t,r)||this;n._tagDomRenderer=new c.TagDOMRenderer;n._tagScene=new c.TagScene;n._tagSet=new c.TagSet;n._tagCreator=new c.TagCreator(n,r);n._viewportCoords=new h.ViewportCoords;n._createHandlers={CreatePoint:new c.CreatePointHandler(n,t,r,n._viewportCoords,n._tagCreator),CreatePolygon:new c.CreatePolygonHandler(n,t,r,n._viewportCoords,n._tagCreator),CreateRect:new c.CreateRectHandler(n,t,r,n._viewportCoords,n._tagCreator),CreateRectDrag:new c.CreateRectDragHandler(n,t,r,n._viewportCoords,n._tagCreator),Default:undefined};n._editVertexHandler=new c.EditVertexHandler(n,t,r,n._viewportCoords,n._tagSet);n._renderTags$=n._tagSet.changed$.pipe(u.map(function(e){var t=e.getAll();t.sort(function(e,t){var r=e.tag.id;var n=t.tag.id;if(r<n){return-1}if(r>n){return 1}return 0});return t}),u.share());n._tagChanged$=n._renderTags$.pipe(u.switchMap(function(e){return a.from(e).pipe(u.mergeMap(function(e){return a.merge(e.tag.changed$,e.tag.geometryChanged$)}))}),u.share());n._renderTagGLChanged$=n._renderTags$.pipe(u.switchMap(function(e){return a.from(e).pipe(u.mergeMap(function(e){return e.glObjectsChanged$}))}),u.share());n._createGeometryChanged$=n._tagCreator.tag$.pipe(u.switchMap(function(e){return e!=null?e.geometryChanged$:a.empty()}),u.share());n._createGLObjectsChanged$=n._tagCreator.tag$.pipe(u.switchMap(function(e){return e!=null?e.glObjectsChanged$:a.empty()}),u.share());n._creatingConfiguration$=n._configuration$.pipe(u.distinctUntilChanged(function(e,t){return e.mode===t.mode},function(e){return{createColor:e.createColor,mode:e.mode}}),u.publishReplay(1),u.refCount());n._creatingConfiguration$.subscribe(function(e){n.fire(o.modechanged,e.mode)});return n}o.prototype.add=function(r){var n=this;if(this._activated){this._navigator.stateService.currentTransform$.pipe(u.first()).subscribe(function(e){n._tagSet.add(r,e);var t=r.map(function(e){return n._tagSet.get(e.id)});n._tagScene.add(t)})}else{this._tagSet.addDeactivated(r)}};o.prototype.changeMode=function(e){this.configure({mode:e})};o.prototype.get=function(e){if(this._activated){var t=this._tagSet.get(e);return t!==undefined?t.tag:undefined}else{return this._tagSet.getDeactivated(e)}};o.prototype.getAll=function(){if(this.activated){return this._tagSet.getAll().map(function(e){return e.tag})}else{return this._tagSet.getAllDeactivated()}};o.prototype.getTagIdsAt=function(n){var i=this;return s.promise(function(t,r){i._container.renderService.renderCamera$.pipe(u.first(),u.map(function(e){var t=i._viewportCoords.canvasToViewport(n[0],n[1],i._container.element);var r=i._tagScene.intersectObjects(t,e.perspective);return r})).subscribe(function(e){t(e)},function(e){r(e)})})};o.prototype.has=function(e){return this._activated?this._tagSet.has(e):this._tagSet.hasDeactivated(e)};o.prototype.remove=function(e){if(this._activated){this._tagSet.remove(e);this._tagScene.remove(e)}else{this._tagSet.removeDeactivated(e)}};o.prototype.removeAll=function(){if(this._activated){this._tagSet.removeAll();this._tagScene.removeAll()}else{this._tagSet.removeAllDeactivated()}};o.prototype._activate=function(){var s=this;this._editVertexHandler.enable();var e=a.from(Object.keys(this._createHandlers)).pipe(u.map(function(e){return s._createHandlers[e]}),u.filter(function(e){return!!e}),u.mergeMap(function(e){return e.geometryCreated$}),u.share());this._fireGeometryCreatedSubscription=e.subscribe(function(e){s.fire(o.geometrycreated,e)});this._fireCreateGeometryEventSubscription=this._tagCreator.tag$.pipe(u.skipWhile(function(e){return e==null}),u.distinctUntilChanged()).subscribe(function(e){var t=e!=null?o.creategeometrystart:o.creategeometryend;s.fire(t,s)});this._handlerStopCreateSubscription=e.subscribe(function(){s.changeMode(c.TagMode.Default)});this._handlerEnablerSubscription=this._creatingConfiguration$.subscribe(function(e){s._disableCreateHandlers();var t=c.TagMode[e.mode];var r=s._createHandlers[t];if(!!r){r.enable()}});this._fireTagsChangedSubscription=this._renderTags$.subscribe(function(e){s.fire(o.tagschanged,s)});this._stopCreateSubscription=this._tagCreator.tag$.pipe(u.switchMap(function(e){return e!=null?e.aborted$.pipe(u.map(function(e){return null})):a.empty()})).subscribe(function(){s.changeMode(c.TagMode.Default)});this._setGLCreateTagSubscription=this._tagCreator.tag$.subscribe(function(e){if(s._tagScene.hasCreateTag()){s._tagScene.removeCreateTag()}if(e!=null){s._tagScene.addCreateTag(e)}});this._createGLObjectsChangedSubscription=this._createGLObjectsChanged$.subscribe(function(e){s._tagScene.updateCreateTagObjects(e)});this._updateGLObjectsSubscription=this._renderTagGLChanged$.subscribe(function(e){s._tagScene.updateObjects(e)});this._updateTagSceneSubscription=this._tagChanged$.subscribe(function(e){s._tagScene.update()});this._domSubscription=a.combineLatest(this._renderTags$.pipe(u.startWith([]),u.tap(function(e){s._container.domRenderer.render$.next({name:s._name,vnode:s._tagDomRenderer.clear()})})),this._container.renderService.renderCamera$,this._container.spriteService.spriteAtlas$,this._container.renderService.size$,this._tagChanged$.pipe(u.startWith(null)),a.merge(this._tagCreator.tag$,this._createGeometryChanged$).pipe(u.startWith(null))).pipe(u.map(function(e){var t=e[0],r=e[1],n=e[2],i=e[3],o=e[4],a=e[5];return{name:s._name,vnode:s._tagDomRenderer.render(t,a,n,r.perspective,i)}})).subscribe(this._container.domRenderer.render$);this._glSubscription=this._navigator.stateService.currentState$.pipe(u.map(function(e){var t=s._tagScene;return{name:s._name,render:{frameId:e.id,needsRender:t.needsRender,render:t.render.bind(t),stage:l.GLRenderStage.Foreground}}})).subscribe(this._container.glRenderer.render$);this._navigator.stateService.currentTransform$.pipe(u.first()).subscribe(function(e){s._tagSet.activate(e);s._tagScene.add(s._tagSet.getAll())})};o.prototype._deactivate=function(){this._editVertexHandler.disable();this._disableCreateHandlers();this._tagScene.clear();this._tagSet.deactivate();this._tagCreator.delete$.next(null);this._updateGLObjectsSubscription.unsubscribe();this._updateTagSceneSubscription.unsubscribe();this._stopCreateSubscription.unsubscribe();this._setGLCreateTagSubscription.unsubscribe();this._createGLObjectsChangedSubscription.unsubscribe();this._domSubscription.unsubscribe();this._glSubscription.unsubscribe();this._fireCreateGeometryEventSubscription.unsubscribe();this._fireGeometryCreatedSubscription.unsubscribe();this._fireTagsChangedSubscription.unsubscribe();this._handlerStopCreateSubscription.unsubscribe();this._handlerEnablerSubscription.unsubscribe();this._container.element.classList.remove("component-tag-create")};o.prototype._getDefaultConfiguration=function(){return{createColor:16777215,mode:c.TagMode.Default}};o.prototype._disableCreateHandlers=function(){var e=this._createHandlers;for(var t in e){if(!e.hasOwnProperty(t)){continue}var r=e[t];if(!!r){r.disable()}}};o.componentName="tag";o.creategeometryend="creategeometryend";o.creategeometrystart="creategeometrystart";o.modechanged="modechanged";o.geometrycreated="geometrycreated";o.tagschanged="tagschanged";return o}(c.Component);r.TagComponent=i;c.ComponentService.register(i);r.default=i},{"../../Component":275,"../../Geo":278,"../../Render":281,rxjs:27,"rxjs/operators":225,when:272}],345:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("rxjs/operators");var i=e("rxjs");var o=e("../../Component");var a=function(){function e(e,t){this._component=e;this._navigator=t;this._tagOperation$=new i.Subject;this._createPolygon$=new i.Subject;this._createRect$=new i.Subject;this._delete$=new i.Subject;this._tag$=this._tagOperation$.pipe(n.scan(function(e,t){return t(e)},null),n.share());this._createRect$.pipe(n.withLatestFrom(this._component.configuration$,this._navigator.stateService.currentTransform$),n.map(function(e){var r=e[0],n=e[1],i=e[2];return function(e){var t=new o.RectGeometry([r[0],r[1],r[0],r[1]]);return new o.OutlineCreateTag(t,{color:n.createColor},i)}})).subscribe(this._tagOperation$);this._createPolygon$.pipe(n.withLatestFrom(this._component.configuration$,this._navigator.stateService.currentTransform$),n.map(function(e){var r=e[0],n=e[1],i=e[2];return function(e){var t=new o.PolygonGeometry([[r[0],r[1]],[r[0],r[1]],[r[0],r[1]]]);return new o.OutlineCreateTag(t,{color:n.createColor},i)}})).subscribe(this._tagOperation$);this._delete$.pipe(n.map(function(){return function(e){return null}})).subscribe(this._tagOperation$)}Object.defineProperty(e.prototype,"createRect$",{get:function(){return this._createRect$},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"createPolygon$",{get:function(){return this._createPolygon$},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"delete$",{get:function(){return this._delete$},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"tag$",{get:function(){return this._tag$},enumerable:true,configurable:true});return e}();r.TagCreator=a;r.default=a},{"../../Component":275,rxjs:27,"rxjs/operators":225}],346:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var c=e("virtual-dom");var n=function(){function e(){}e.prototype.render=function(e,t,r,n,i){var o=[];for(var a=0,s=e;a<s.length;a++){var u=s[a];o=o.concat(u.getDOMObjects(r,n,i))}if(t!=null){o=o.concat(t.getDOMObjects(n,i))}return c.h("div.TagContainer",{},o)};e.prototype.clear=function(){return c.h("div",{},[])};return e}();r.TagDOMRenderer=n},{"virtual-dom":231}],347:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n;(function(e){e[e["Default"]=0]="Default";e[e["CreatePoint"]=1]="CreatePoint";e[e["CreatePolygon"]=2]="CreatePolygon";e[e["CreateRect"]=3]="CreateRect";e[e["CreateRectDrag"]=4]="CreateRectDrag"})(n=r.TagMode||(r.TagMode={}));r.default=n},{}],348:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n;(function(e){e[e["None"]=0]="None";e[e["Centroid"]=1]="Centroid";e[e["Vertex"]=2]="Vertex"})(n=r.TagOperation||(r.TagOperation={}));r.default=n},{}],349:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var c=e("three");var n=function(){function e(e,t){this._createTag=null;this._needsRender=false;this._raycaster=!!t?t:new c.Raycaster;this._scene=!!e?e:new c.Scene;this._objectTags={};this._retrievableObjects=[];this._tags={}}Object.defineProperty(e.prototype,"needsRender",{get:function(){return this._needsRender},enumerable:true,configurable:true});e.prototype.add=function(e){for(var t=0,r=e;t<r.length;t++){var n=r[t];if(n.tag.id in this._tags){this._remove(n.tag.id)}this._add(n)}this._needsRender=true};e.prototype.addCreateTag=function(e){for(var t=0,r=e.glObjects;t<r.length;t++){var n=r[t];this._scene.add(n)}this._createTag={tag:e,objects:e.glObjects};this._needsRender=true};e.prototype.clear=function(){for(var e=0,t=Object.keys(this._tags);e<t.length;e++){var r=t[e];this._remove(r)}this._needsRender=false};e.prototype.get=function(e){return this.has(e)?this._tags[e].tag:undefined};e.prototype.has=function(e){return e in this._tags};e.prototype.hasCreateTag=function(){return this._createTag!=null};e.prototype.intersectObjects=function(e,t){var r=e[0],n=e[1];this._raycaster.setFromCamera(new c.Vector2(r,n),t);var i=this._raycaster.intersectObjects(this._retrievableObjects);var o=[];for(var a=0,s=i;a<s.length;a++){var u=s[a];if(u.object.uuid in this._objectTags){o.push(this._objectTags[u.object.uuid])}}return o};e.prototype.remove=function(e){for(var t=0,r=e;t<r.length;t++){var n=r[t];this._remove(n)}this._needsRender=true};e.prototype.removeAll=function(){for(var e=0,t=Object.keys(this._tags);e<t.length;e++){var r=t[e];this._remove(r)}this._needsRender=true};e.prototype.removeCreateTag=function(){if(this._createTag==null){return}for(var e=0,t=this._createTag.objects;e<t.length;e++){var r=t[e];this._scene.remove(r)}this._createTag.tag.dispose();this._createTag=null;this._needsRender=true};e.prototype.render=function(e,t){t.render(this._scene,e);this._needsRender=false};e.prototype.update=function(){this._needsRender=true};e.prototype.updateCreateTagObjects=function(e){if(this._createTag.tag!==e){throw new Error("Create tags do not have the same reference.")}for(var t=0,r=this._createTag.objects;t<r.length;t++){var n=r[t];this._scene.remove(n)}for(var i=0,o=e.glObjects;i<o.length;i++){var n=o[i];this._scene.add(n)}this._createTag.objects=e.glObjects;this._needsRender=true};e.prototype.updateObjects=function(e){var t=e.tag.id;if(this._tags[t].tag!==e){throw new Error("Tags do not have the same reference.")}var r=this._tags[t];this._removeObjects(r);delete this._tags[t];this._add(e);this._needsRender=true};e.prototype._add=function(e){var t=e.tag.id;var r={tag:e,objects:[],retrievableObjects:[]};this._tags[t]=r;for(var n=0,i=e.getGLObjects();n<i.length;n++){var o=i[n];r.objects.push(o);this._scene.add(o)}for(var a=0,s=e.getRetrievableObjects();a<s.length;a++){var u=s[a];r.retrievableObjects.push(u);this._retrievableObjects.push(u);this._objectTags[u.uuid]=e.tag.id}};e.prototype._remove=function(e){var t=this._tags[e];this._removeObjects(t);t.tag.dispose();delete this._tags[e]};e.prototype._removeObjects=function(e){for(var t=0,r=e.objects;t<r.length;t++){var n=r[t];this._scene.remove(n)}for(var i=0,o=e.retrievableObjects;i<o.length;i++){var a=o[i];var s=this._retrievableObjects.indexOf(a);if(s!==-1){this._retrievableObjects.splice(s,1)}}};return e}();r.TagScene=n;r.default=n},{three:226}],350:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("rxjs");var i=e("../../Component");var o=function(){function e(){this._active=false;this._hash={};this._hashDeactivated={};this._notifyChanged$=new n.Subject}Object.defineProperty(e.prototype,"active",{get:function(){return this._active},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"changed$",{get:function(){return this._notifyChanged$},enumerable:true,configurable:true});e.prototype.activate=function(e){if(this._active){return}for(var t in this._hashDeactivated){if(!this._hashDeactivated.hasOwnProperty(t)){continue}var r=this._hashDeactivated[t];this._add(r,e)}this._hashDeactivated={};this._active=true;this._notifyChanged$.next(this)};e.prototype.deactivate=function(){if(!this._active){return}for(var e in this._hash){if(!this._hash.hasOwnProperty(e)){continue}this._hashDeactivated[e]=this._hash[e].tag}this._hash={};this._active=false};e.prototype.add=function(e,t){this._assertActivationState(true);for(var r=0,n=e;r<n.length;r++){var i=n[r];this._add(i,t)}this._notifyChanged$.next(this)};e.prototype.addDeactivated=function(e){this._assertActivationState(false);for(var t=0,r=e;t<r.length;t++){var n=r[t];if(!(n instanceof i.OutlineTag||n instanceof i.SpotTag)){throw new Error("Tag type not supported")}this._hashDeactivated[n.id]=n}};e.prototype.get=function(e){return this.has(e)?this._hash[e]:undefined};e.prototype.getAll=function(){var t=this._hash;return Object.keys(t).map(function(e){return t[e]})};e.prototype.getAllDeactivated=function(){var t=this._hashDeactivated;return Object.keys(t).map(function(e){return t[e]})};e.prototype.getDeactivated=function(e){return this.hasDeactivated(e)?this._hashDeactivated[e]:undefined};e.prototype.has=function(e){return e in this._hash};e.prototype.hasDeactivated=function(e){return e in this._hashDeactivated};e.prototype.remove=function(e){this._assertActivationState(true);var t=this._hash;for(var r=0,n=e;r<n.length;r++){var i=n[r];if(!(i in t)){continue}delete t[i]}this._notifyChanged$.next(this)};e.prototype.removeAll=function(){this._assertActivationState(true);this._hash={};this._notifyChanged$.next(this)};e.prototype.removeAllDeactivated=function(){this._assertActivationState(false);this._hashDeactivated={}};e.prototype.removeDeactivated=function(e){this._assertActivationState(false);var t=this._hashDeactivated;for(var r=0,n=e;r<n.length;r++){var i=n[r];if(!(i in t)){continue}delete t[i]}};e.prototype._add=function(e,t){if(e instanceof i.OutlineTag){this._hash[e.id]=new i.OutlineRenderTag(e,t)}else if(e instanceof i.SpotTag){this._hash[e.id]=new i.SpotRenderTag(e,t)}else{throw new Error("Tag type not supported")}};e.prototype._assertActivationState=function(e){if(e!==this._active){throw new Error("Tag set not in correct state for operation.")}};return e}();r.TagSet=o;r.default=o},{"../../Component":275,rxjs:27}],351:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var i=e("../../../Error");var o=function(r){n(e,r);function e(e){var t=r.call(this,e!=null?e:"The provided geometry value is incorrect")||this;t.name="GeometryTagError";return t}return e}(i.MapillaryError);r.GeometryTagError=o;r.default=i.MapillaryError},{"../../../Error":277}],352:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("rxjs");var i=function(){function e(){this._notifyChanged$=new n.Subject}Object.defineProperty(e.prototype,"changed$",{get:function(){return this._notifyChanged$},enumerable:true,configurable:true});return e}();r.Geometry=i;r.default=i},{rxjs:27}],353:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var o=e("../../../Component");var i=function(i){n(e,i);function e(e){var t=i.call(this)||this;var r=e[0];var n=e[1];if(r<0||r>1||n<0||n>1){throw new o.GeometryTagError("Basic coordinates must be on the interval [0, 1].")}t._point=e.slice();return t}Object.defineProperty(e.prototype,"point",{get:function(){return this._point},enumerable:true,configurable:true});e.prototype.getCentroid2d=function(){return this._point.slice()};e.prototype.getCentroid3d=function(e){return e.unprojectBasic(this._point,200)};e.prototype.setCentroid2d=function(e,t){var r=[Math.max(0,Math.min(1,e[0])),Math.max(0,Math.min(1,e[1]))];this._point[0]=r[0];this._point[1]=r[1];this._notifyChanged$.next(this)};return e}(o.Geometry);r.PointGeometry=i},{"../../../Component":275}],354:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var f=e("../../../Component");var i=function(p){n(e,p);function e(e,t){var r=p.call(this)||this;var n=e.length;if(n<3){throw new f.GeometryTagError("A polygon must have three or more positions.")}if(e[0][0]!==e[n-1][0]||e[0][1]!==e[n-1][1]){throw new f.GeometryTagError("First and last positions must be equivalent.")}r._polygon=[];for(var i=0,o=e;i<o.length;i++){var a=o[i];if(a[0]<0||a[0]>1||a[1]<0||a[1]>1){throw new f.GeometryTagError("Basic coordinates of polygon must be on the interval [0, 1].")}r._polygon.push(a.slice())}r._holes=[];if(t==null){return r}for(var s=0;s<t.length;s++){var u=t[s];var c=u.length;if(c<3){throw new f.GeometryTagError("A polygon hole must have three or more positions.")}if(u[0][0]!==u[c-1][0]||u[0][1]!==u[c-1][1]){throw new f.GeometryTagError("First and last positions of hole must be equivalent.")}r._holes.push([]);for(var h=0,l=u;h<l.length;h++){var a=l[h];if(a[0]<0||a[0]>1||a[1]<0||a[1]>1){throw new f.GeometryTagError("Basic coordinates of hole must be on the interval [0, 1].")}r._holes[s].push(a.slice())}}return r}Object.defineProperty(e.prototype,"polygon",{get:function(){return this._polygon},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"holes",{get:function(){return this._holes},enumerable:true,configurable:true});e.prototype.addVertex2d=function(e){var t=[Math.max(0,Math.min(1,e[0])),Math.max(0,Math.min(1,e[1]))];this._polygon.splice(this._polygon.length-1,0,t);this._notifyChanged$.next(this)};e.prototype.getVertex2d=function(e){return this._polygon[e].slice()};e.prototype.removeVertex2d=function(e){if(e<0||e>=this._polygon.length||this._polygon.length<4){throw new f.GeometryTagError("Index for removed vertex must be valid.")}if(e>0&&e<this._polygon.length-1){this._polygon.splice(e,1)}else{this._polygon.splice(0,1);this._polygon.pop();var t=this._polygon[0].slice();this._polygon.push(t)}this._notifyChanged$.next(this)};e.prototype.setVertex2d=function(e,t,r){var n=[Math.max(0,Math.min(1,t[0])),Math.max(0,Math.min(1,t[1]))];if(e===0||e===this._polygon.length-1){this._polygon[0]=n.slice();this._polygon[this._polygon.length-1]=n.slice()}else{this._polygon[e]=n.slice()}this._notifyChanged$.next(this)};e.prototype.setCentroid2d=function(e,t){var r=this._polygon.map(function(e){return e[0]});var n=this._polygon.map(function(e){return e[1]});var i=Math.min.apply(Math,r);var o=Math.max.apply(Math,r);var a=Math.min.apply(Math,n);var s=Math.max.apply(Math,n);var u=this.getCentroid2d();var c=-i;var h=1-o;var l=-a;var p=1-s;var f=Math.max(c,Math.min(h,e[0]-u[0]));var d=Math.max(l,Math.min(p,e[1]-u[1]));for(var v=0,m=this._polygon;v<m.length;v++){var g=m[v];g[0]+=f;g[1]+=d}this._notifyChanged$.next(this)};e.prototype.getPoints3d=function(e){return this._getPoints3d(this._subsample(this._polygon),e)};e.prototype.getVertex3d=function(e,t){return t.unprojectBasic(this._polygon[e],200)};e.prototype.getVertices2d=function(){return this._polygon.slice()};e.prototype.getVertices3d=function(e){return this._getPoints3d(this._polygon,e)};e.prototype.getHolePoints3d=function(t){var r=this;return this._holes.map(function(e){return r._getPoints3d(r._subsample(e),t)})};e.prototype.getHoleVertices3d=function(t){var r=this;return this._holes.map(function(e){return r._getPoints3d(e,t)})};e.prototype.getCentroid2d=function(){var e=this._polygon;var t=0;var r=0;var n=0;for(var i=0;i<e.length-1;i++){var o=e[i][0];var a=e[i][1];var s=e[i+1][0];var u=e[i+1][1];var c=o*u-s*a;t+=c;r+=(o+s)*c;n+=(a+u)*c}t/=2;r/=6*t;n/=6*t;return[r,n]};e.prototype.getCentroid3d=function(e){var t=this.getCentroid2d();return e.unprojectBasic(t,200)};e.prototype.get3dDomainTriangles3d=function(t){var r=this;return this._triangulate(this._project(this._polygon,t),this.getVertices3d(t),this._holes.map(function(e){return r._project(e,t)}),this.getHoleVertices3d(t))};e.prototype.getTriangles3d=function(t){var r=this;if(t.fullPano){return this._triangulatePano(this._polygon.slice(),this.holes.slice(),t)}var e=this._project(this._subsample(this._polygon),t);var n=this.getPoints3d(t);var i=this._holes.map(function(e){return r._project(r._subsample(e),t)});var o=this.getHolePoints3d(t);return this._triangulate(e,n,i,o)};e.prototype.getPoleOfInaccessibility2d=function(){return this._getPoleOfInaccessibility2d(this._polygon.slice())};e.prototype.getPoleOfInaccessibility3d=function(e){var t=this._getPoleOfInaccessibility2d(this._polygon.slice());return e.unprojectBasic(t,200)};e.prototype._getPoints3d=function(e,t){return e.map(function(e){return t.unprojectBasic(e,200)})};return e}(f.VertexGeometry);r.PolygonGeometry=i;r.default=i},{"../../../Component":275}],355:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var a=e("../../../Component");var i=function(o){n(e,o);function e(e){var t=o.call(this)||this;if(e[1]>e[3]){throw new a.GeometryTagError("Basic Y coordinates values can not be inverted.")}for(var r=0,n=e;r<n.length;r++){var i=n[r];if(i<0||i>1){throw new a.GeometryTagError("Basic coordinates must be on the interval [0, 1].")}}t._anchorIndex=undefined;t._rect=e.slice(0,4);t._inverted=t._rect[0]>t._rect[2];return t}Object.defineProperty(e.prototype,"anchorIndex",{get:function(){return this._anchorIndex},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"inverted",{get:function(){return this._inverted},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"rect",{get:function(){return this._rect},enumerable:true,configurable:true});e.prototype.initializeAnchorIndexing=function(e){if(this._anchorIndex!==undefined){throw new Error("Anchor indexing is already initialized.")}if(e<0||e>3){throw new Error("Invalid anchor index: "+e+".")}this._anchorIndex=e===undefined?0:e};e.prototype.terminateAnchorIndexing=function(){this._anchorIndex=undefined};e.prototype.setOppositeVertex2d=function(e,t){if(this._anchorIndex===undefined){throw new Error("Anchor indexing needs to be initialized.")}var r=[Math.max(0,Math.min(1,e[0])),Math.max(0,Math.min(1,e[1]))];var n=this._rect.slice();var i=this._anchorIndex===0?[n[0],n[3]]:this._anchorIndex===1?[n[0],n[1]]:this._anchorIndex===2?[n[2],n[1]]:[n[2],n[3]];if(t.fullPano){var o=this._anchorIndex<2?r[0]-n[2]:r[0]-n[0];if(!this._inverted&&this._anchorIndex<2&&r[0]<.25&&n[2]>.75&&o<-.5){this._inverted=true;this._anchorIndex=i[1]>r[1]?0:1}else if(!this._inverted&&this._anchorIndex>=2&&r[0]<.25&&n[2]>.75&&o<-.5){this._inverted=true;this._anchorIndex=i[1]>r[1]?0:1}else if(this._inverted&&this._anchorIndex>=2&&r[0]<.25&&n[0]>.75&&o<-.5){this._inverted=false;if(i[0]>r[0]){this._anchorIndex=i[1]>r[1]?3:2}else{this._anchorIndex=i[1]>r[1]?0:1}}else if(!this._inverted&&this._anchorIndex>=2&&r[0]>.75&&n[0]<.25&&o>.5){this._inverted=true;this._anchorIndex=i[1]>r[1]?3:2}else if(!this._inverted&&this._anchorIndex<2&&r[0]>.75&&n[0]<.25&&o>.5){this._inverted=true;this._anchorIndex=i[1]>r[1]?3:2}else if(this._inverted&&this._anchorIndex<2&&r[0]>.75&&n[2]<.25&&o>.5){this._inverted=false;if(i[0]>r[0]){this._anchorIndex=i[1]>r[1]?3:2}else{this._anchorIndex=i[1]>r[1]?0:1}}else if(this._inverted&&this._anchorIndex<2&&r[0]>n[0]){this._inverted=false;this._anchorIndex=i[1]>r[1]?0:1}else if(this._inverted&&this._anchorIndex>=2&&r[0]<n[2]){this._inverted=false;this._anchorIndex=i[1]>r[1]?3:2}else if(this._inverted){if(this._anchorIndex<2){this._anchorIndex=i[1]>r[1]?0:1}else{this._anchorIndex=i[1]>r[1]?3:2}}else{if(i[0]<=r[0]&&i[1]>r[1]){this._anchorIndex=0}else if(i[0]<=r[0]&&i[1]<=r[1]){this._anchorIndex=1}else if(i[0]>r[0]&&i[1]<=r[1]){this._anchorIndex=2}else{this._anchorIndex=3}}var a=[];if(this._anchorIndex===0){a[0]=i[0];a[1]=r[1];a[2]=r[0];a[3]=i[1]}else if(this._anchorIndex===1){a[0]=i[0];a[1]=i[1];a[2]=r[0];a[3]=r[1]}else if(this._anchorIndex===2){a[0]=r[0];a[1]=i[1];a[2]=i[0];a[3]=r[1]}else{a[0]=r[0];a[1]=r[1];a[2]=i[0];a[3]=i[1]}if(!this._inverted&&a[0]>a[2]||this._inverted&&a[0]<a[2]){a[0]=n[0];a[2]=n[2]}if(a[1]>a[3]){a[1]=n[1];a[3]=n[3]}this._rect[0]=a[0];this._rect[1]=a[1];this._rect[2]=a[2];this._rect[3]=a[3]}else{if(i[0]<=r[0]&&i[1]>r[1]){this._anchorIndex=0}else if(i[0]<=r[0]&&i[1]<=r[1]){this._anchorIndex=1}else if(i[0]>r[0]&&i[1]<=r[1]){this._anchorIndex=2}else{this._anchorIndex=3}var a=[];if(this._anchorIndex===0){a[0]=i[0];a[1]=r[1];a[2]=r[0];a[3]=i[1]}else if(this._anchorIndex===1){a[0]=i[0];a[1]=i[1];a[2]=r[0];a[3]=r[1]}else if(this._anchorIndex===2){a[0]=r[0];a[1]=i[1];a[2]=i[0];a[3]=r[1]}else{a[0]=r[0];a[1]=r[1];a[2]=i[0];a[3]=i[1]}if(a[0]>a[2]){a[0]=n[0];a[2]=n[2]}if(a[1]>a[3]){a[1]=n[1];a[3]=n[3]}this._rect[0]=a[0];this._rect[1]=a[1];this._rect[2]=a[2];this._rect[3]=a[3]}this._notifyChanged$.next(this)};e.prototype.setVertex2d=function(e,t,r){var n=this._rect.slice();var i=[Math.max(0,Math.min(1,t[0])),Math.max(0,Math.min(1,t[1]))];var o=[];if(e===0){o[0]=i[0];o[1]=n[1];o[2]=n[2];o[3]=i[1]}else if(e===1){o[0]=i[0];o[1]=i[1];o[2]=n[2];o[3]=n[3]}else if(e===2){o[0]=n[0];o[1]=i[1];o[2]=i[0];o[3]=n[3]}else if(e===3){o[0]=n[0];o[1]=n[1];o[2]=i[0];o[3]=i[1]}if(r.fullPano){var a=e<2&&i[0]>.75&&n[0]<.25||e>=2&&this._inverted&&i[0]>.75&&n[2]<.25;var s=e<2&&this._inverted&&i[0]<.25&&n[0]>.75||e>=2&&i[0]<.25&&n[2]>.75;if(a||s){this._inverted=!this._inverted}else{if(o[0]-n[0]<-.25){o[0]=n[0]}if(o[2]-n[2]>.25){o[2]=n[2]}}if(!this._inverted&&o[0]>o[2]||this._inverted&&o[0]<o[2]){o[0]=n[0];o[2]=n[2]}}else{if(o[0]>o[2]){o[0]=n[0];o[2]=n[2]}}if(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(e,t){var r=this._rect.slice();var n=r[0];var i=this._inverted?r[2]+1:r[2];var o=r[1];var a=r[3];var s=n+(i-n)/2;var u=o+(a-o)/2;var c=0;if(t.gpano!=null&&t.gpano.CroppedAreaImageWidthPixels===t.gpano.FullPanoWidthPixels){c=this._inverted?e[0]+1-s:e[0]-s}else{var h=-n;var l=1-i;c=Math.max(h,Math.min(l,e[0]-s))}var p=-o;var f=1-a;var d=Math.max(p,Math.min(f,e[1]-u));this._rect[0]=r[0]+c;this._rect[1]=r[1]+d;this._rect[2]=r[2]+c;this._rect[3]=r[3]+d;if(this._rect[0]<0){this._rect[0]+=1;this._inverted=!this._inverted}else if(this._rect[0]>1){this._rect[0]-=1;this._inverted=!this._inverted}if(this._rect[2]<0){this._rect[2]+=1;this._inverted=!this._inverted}else if(this._rect[2]>1){this._rect[2]-=1;this._inverted=!this._inverted}this._notifyChanged$.next(this)};e.prototype.getPoints3d=function(t){return this._getPoints2d().map(function(e){return t.unprojectBasic(e,200)})};e.prototype.getVertex2d=function(e){return this._rectToVertices2d(this._rect)[e]};e.prototype.getNonAdjustedVertex2d=function(e){return this._rectToNonAdjustedVertices2d(this._rect)[e]};e.prototype.getVertex3d=function(e,t){return t.unprojectBasic(this._rectToVertices2d(this._rect)[e],200)};e.prototype.getVertices2d=function(){return this._rectToVertices2d(this._rect)};e.prototype.getVertices3d=function(t){return this._rectToVertices2d(this._rect).map(function(e){return t.unprojectBasic(e,200)})};e.prototype.getCentroid2d=function(){var e=this._rect;var t=e[0];var r=this._inverted?e[2]+1:e[2];var n=e[1];var i=e[3];var o=(t+r)/2;var a=(n+i)/2;return[o,a]};e.prototype.getCentroid3d=function(e){var t=this.getCentroid2d();return e.unprojectBasic(t,200)};e.prototype.getPoleOfInaccessibility2d=function(){return this._getPoleOfInaccessibility2d(this._rectToVertices2d(this._rect))};e.prototype.getPoleOfInaccessibility3d=function(e){var t=this._getPoleOfInaccessibility2d(this._rectToVertices2d(this._rect));return e.unprojectBasic(t,200)};e.prototype.getTriangles3d=function(e){return e.fullPano?[]:this._triangulate(this._project(this._getPoints2d(),e),this.getPoints3d(e))};e.prototype.validate=function(e){var t=this._rect;if(!this._inverted&&e[0]<t[0]||e[0]-t[2]>.25||e[1]<t[1]){return false}return true};e.prototype._getPoints2d=function(){var e=this._rectToVertices2d(this._rect);var t=e.length-1;var r=10;var n=[];for(var i=0;i<t;++i){var o=e[i][0];var a=e[i][1];var s=e[i+1][0];var u=e[i+1][1];var c=(s-o)/(r-1);var h=(u-a)/(r-1);for(var l=0;l<r;++l){var p=[o+l*c,a+l*h];n.push(p)}}return n};e.prototype._rectToVertices2d=function(e){return[[e[0],e[3]],[e[0],e[1]],[this._inverted?e[2]+1:e[2],e[1]],[this._inverted?e[2]+1:e[2],e[3]],[e[0],e[3]]]};e.prototype._rectToNonAdjustedVertices2d=function(e){return[[e[0],e[3]],[e[0],e[1]],[e[2],e[1]],[e[2],e[3]],[e[0],e[3]]]};return e}(a.VertexGeometry);r.RectGeometry=i;r.default=i},{"../../../Component":275}],356:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var g=e("earcut");var x=e("martinez-polygon-clipping");var i=e("@mapbox/polylabel");var o=e("three");var a=e("../../../Component");var s=function(t){n(e,t);function e(){var e=t.call(this)||this;e._subsampleThreshold=.005;return e}e.prototype._getPoleOfInaccessibility2d=function(e){var t=i([e],.03);return t};e.prototype._project=function(e,t){var r=this._createCamera(t.upVector().toArray(),t.unprojectSfM([0,0],0),t.unprojectSfM([0,0],10));return this._deunproject(e,t,r)};e.prototype._subsample=function(e,t){if(t===void 0){t=this._subsampleThreshold}var r=[];var n=e.length;for(var i=0;i<n;i++){var o=e[i];var a=e[(i+1)%n];r.push(o);var s=Math.sqrt(Math.pow(a[0]-o[0],2)+Math.pow(a[1]-o[1],2));var u=Math.floor(s/t);var c=1/(u+1);for(var h=1;h<=u;h++){var l=h*c;var p=[(1-l)*o[0]+l*a[0],(1-l)*o[1]+l*a[1]];r.push(p)}}return r};e.prototype._triangulate=function(e,t,r,n){var i=[e.slice(0,-1)];for(var o=0,a=r!=null?r:[];o<a.length;o++){var s=a[o];i.push(s.slice(0,-1))}var u=t.slice(0,-1);for(var c=0,h=n!=null?n:[];c<h.length;c++){var l=h[c];u=u.concat(l.slice(0,-1))}var p=g.default.flatten(i);var f=g.default(p.vertices,p.holes,p.dimensions);var d=[];for(var v=0;v<f.length;++v){var m=u[f[v]];d.push(m[0]);d.push(m[1]);d.push(m[2])}return d};e.prototype._triangulatePano=function(e,t,r){var n=[];var i=1e-9;var o=3;var a=3;for(var s=0;s<o;s++){for(var u=0;u<a;u++){var c=s===0?-i:i;var h=u===0?-i:i;var l=s/o+c;var p=u/a+h;var f=(s+1)/o+i;var d=(u+1)/a+i;var v=[[l,p],[l,d],[f,d],[f,p],[l,p]];var m=[(2*s+1)/(2*o),(2*u+1)/(2*a)];n.push.apply(n,this._triangulateSubarea(e,t,v,m,r))}}return n};e.prototype._unproject=function(e,t,r){if(r===void 0){r=200}return e.map(function(e){return t.unprojectBasic(e,r)})};e.prototype._createCamera=function(e,t,r){var n=new o.Camera;n.up.copy((new o.Vector3).fromArray(e));n.position.copy((new o.Vector3).fromArray(t));n.lookAt((new o.Vector3).fromArray(r));n.updateMatrix();n.updateMatrixWorld(true);return n};e.prototype._deunproject=function(e,n,i){return e.map(function(e){var t=n.unprojectBasic(e,1e4);var r=new o.Vector3(t[0],t[1],t[2]).applyMatrix4(i.matrixWorldInverse);return[r.x/r.z,r.y/r.z]})};e.prototype._triangulateSubarea=function(e,t,r,n,i){var o=x.intersection([e].concat(t),[r]);if(!o){return[]}var a=[];var s=this._subsampleThreshold;var u=this._createCamera(i.upVector().toArray(),i.unprojectSfM([0,0],0),i.unprojectBasic(n,10));for(var c=0,h=o;c<h.length;c++){var l=h[c];var p=this._subsample(l[0],s);var f=this._deunproject(p,i,u);var d=this._unproject(p,i);var v=[];var m=[];for(var g=1;g<l.length;g++){var y=this._subsample(l[g],s);var _=this._deunproject(y,i,u);var b=this._unproject(y,i);v.push(_);m.push(b)}a.push.apply(a,this._triangulate(f,d,v,m))}return a};return e}(a.Geometry);r.VertexGeometry=s;r.default=s},{"../../../Component":275,"@mapbox/polylabel":1,earcut:8,"martinez-polygon-clipping":22,three:226}],357:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var o=e("rxjs/operators");var s=e("rxjs");var i=e("../../../Component");var a=function(a){n(e,a);function e(e,t,r,n,i){var o=a.call(this,e,t,r,n)||this;o._tagCreator=i;o._geometryCreated$=new s.Subject;return o}Object.defineProperty(e.prototype,"geometryCreated$",{get:function(){return this._geometryCreated$},enumerable:true,configurable:true});e.prototype._enable=function(){this._enableCreate();this._container.element.classList.add("component-tag-create")};e.prototype._disable=function(){this._container.element.classList.remove("component-tag-create");this._disableCreate()};e.prototype._validateBasic=function(e){var t=e[0];var r=e[1];return 0<=t&&t<=1&&0<=r&&r<=1};e.prototype._mouseEventToBasic$=function(e){var i=this;return e.pipe(o.withLatestFrom(this._container.renderService.renderCamera$,this._navigator.stateService.currentTransform$),o.map(function(e){var t=e[0],r=e[1],n=e[2];return i._mouseEventToBasic(t,i._container.element,r,n)}))};return e}(i.TagHandlerBase);r.CreateHandlerBase=a;r.default=a},{"../../../Component":275,rxjs:27,"rxjs/operators":225}],358:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var i=e("rxjs/operators");var o=e("../../../Component");var a=function(e){n(t,e);function t(){return e!==null&&e.apply(this,arguments)||this}t.prototype._enableCreate=function(){this._container.mouseService.deferPixels(this._name,4);this._geometryCreatedSubscription=this._mouseEventToBasic$(this._container.mouseService.proximateClick$).pipe(i.filter(this._validateBasic),i.map(function(e){return new o.PointGeometry(e)})).subscribe(this._geometryCreated$)};t.prototype._disableCreate=function(){this._container.mouseService.undeferPixels(this._name);this._geometryCreatedSubscription.unsubscribe()};t.prototype._getNameExtension=function(){return"create-point"};return t}(o.CreateHandlerBase);r.CreatePointHandler=a;r.default=a},{"../../../Component":275,"rxjs/operators":225}],359:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var i=e("../../../Component");var o=function(e){n(t,e);function t(){return e!==null&&e.apply(this,arguments)||this}t.prototype._addPoint=function(e,t){e.addPoint(t)};Object.defineProperty(t.prototype,"_create$",{get:function(){return this._tagCreator.createPolygon$},enumerable:true,configurable:true});t.prototype._getNameExtension=function(){return"create-polygon"};t.prototype._setVertex2d=function(e,t,r){e.geometry.setVertex2d(e.geometry.polygon.length-2,t,r)};return t}(i.CreateVertexHandler);r.CreatePolygonHandler=o;r.default=o},{"../../../Component":275}],360:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var i=e("rxjs");var a=e("rxjs/operators");var o=e("../../../Component");var s=function(e){n(t,e);function t(){return e!==null&&e.apply(this,arguments)||this}t.prototype._enableCreate=function(){var o=this;this._container.mouseService.claimMouse(this._name,2);this._deleteSubscription=this._navigator.stateService.currentTransform$.pipe(a.map(function(e){return null}),a.skip(1)).subscribe(this._tagCreator.delete$);this._createSubscription=this._mouseEventToBasic$(this._container.mouseService.filtered$(this._name,this._container.mouseService.mouseDragStart$)).pipe(a.filter(this._validateBasic)).subscribe(this._tagCreator.createRect$);this._initializeAnchorIndexingSubscription=this._tagCreator.tag$.pipe(a.filter(function(e){return!!e})).subscribe(function(e){e.geometry.initializeAnchorIndexing()});var t=i.combineLatest(i.merge(this._container.mouseService.filtered$(this._name,this._container.mouseService.mouseMove$),this._container.mouseService.filtered$(this._name,this._container.mouseService.domMouseMove$)),this._container.renderService.renderCamera$).pipe(a.withLatestFrom(this._navigator.stateService.currentTransform$),a.map(function(e){var t=e[0],r=t[0],n=t[1],i=e[1];return o._mouseEventToBasic(r,o._container.element,n,i)}));this._setVertexSubscription=this._tagCreator.tag$.pipe(a.switchMap(function(e){return!!e?i.combineLatest(i.of(e),t,o._navigator.stateService.currentTransform$):i.empty()})).subscribe(function(e){var t=e[0],r=e[1],n=e[2];t.geometry.setOppositeVertex2d(r,n)});var r=this._container.mouseService.mouseDragEnd$.pipe(a.withLatestFrom(this._mouseEventToBasic$(this._container.mouseService.filtered$(this._name,this._container.mouseService.mouseDrag$)).pipe(a.filter(this._validateBasic)),function(e,t){return t}),a.share());this._addPointSubscription=this._tagCreator.tag$.pipe(a.switchMap(function(e){return!!e?i.combineLatest(i.of(e),r):i.empty()})).subscribe(function(e){var t=e[0],r=e[1];var n=t.geometry;if(!n.validate(r)){r=n.getNonAdjustedVertex2d(3)}t.addPoint(r)});this._geometryCreatedSubscription=this._tagCreator.tag$.pipe(a.switchMap(function(e){return!!e?e.created$.pipe(a.map(function(e){return e.geometry})):i.empty()})).subscribe(this._geometryCreated$)};t.prototype._disableCreate=function(){this._container.mouseService.unclaimMouse(this._name);this._tagCreator.delete$.next(null);this._addPointSubscription.unsubscribe();this._createSubscription.unsubscribe();this._deleteSubscription.unsubscribe();this._geometryCreatedSubscription.unsubscribe();this._initializeAnchorIndexingSubscription.unsubscribe();this._setVertexSubscription.unsubscribe()};t.prototype._getNameExtension=function(){return"create-rect-drag"};return t}(o.CreateHandlerBase);r.CreateRectDragHandler=s;r.default=s},{"../../../Component":275,rxjs:27,"rxjs/operators":225}],361:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var i=e("rxjs/operators");var o=e("../../../Component");var a=function(e){n(t,e);function t(){return e!==null&&e.apply(this,arguments)||this}Object.defineProperty(t.prototype,"_create$",{get:function(){return this._tagCreator.createRect$},enumerable:true,configurable:true});t.prototype._addPoint=function(e,t){var r=e.geometry;if(!r.validate(t)){t=r.getNonAdjustedVertex2d(3)}e.addPoint(t)};t.prototype._enable=function(){e.prototype._enable.call(this);this._initializeAnchorIndexingSubscription=this._tagCreator.tag$.pipe(i.filter(function(e){return!!e})).subscribe(function(e){e.geometry.initializeAnchorIndexing()})};t.prototype._disable=function(){e.prototype._disable.call(this);this._initializeAnchorIndexingSubscription.unsubscribe()};t.prototype._getNameExtension=function(){return"create-rect"};t.prototype._setVertex2d=function(e,t,r){e.geometry.setOppositeVertex2d(t,r)};return t}(o.CreateVertexHandler);r.CreateRectHandler=a;r.default=a},{"../../../Component":275,"rxjs/operators":225}],362:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var i=e("rxjs");var o=e("rxjs/operators");var a=e("../../../Component");var s=function(e){n(t,e);function t(){return e!==null&&e.apply(this,arguments)||this}t.prototype._enableCreate=function(){var a=this;this._container.mouseService.deferPixels(this._name,4);var e=this._navigator.stateService.currentTransform$.pipe(o.map(function(e){}),o.publishReplay(1),o.refCount());this._deleteSubscription=e.pipe(o.skip(1)).subscribe(this._tagCreator.delete$);var t=this._mouseEventToBasic$(this._container.mouseService.proximateClick$).pipe(o.share());this._createSubscription=e.pipe(o.switchMap(function(){return t.pipe(o.filter(a._validateBasic),o.take(1))})).subscribe(this._create$);this._setVertexSubscription=this._tagCreator.tag$.pipe(o.switchMap(function(e){return!!e?i.combineLatest(i.of(e),i.merge(a._container.mouseService.mouseMove$,a._container.mouseService.domMouseMove$),a._container.renderService.renderCamera$,a._navigator.stateService.currentTransform$):i.empty()})).subscribe(function(e){var t=e[0],r=e[1],n=e[2],i=e[3];var o=a._mouseEventToBasic(r,a._container.element,n,i);a._setVertex2d(t,o,i)});this._addPointSubscription=this._tagCreator.tag$.pipe(o.switchMap(function(e){return!!e?i.combineLatest(i.of(e),t):i.empty()})).subscribe(function(e){var t=e[0],r=e[1];a._addPoint(t,r)});this._geometryCreateSubscription=this._tagCreator.tag$.pipe(o.switchMap(function(e){return!!e?e.created$.pipe(o.map(function(e){return e.geometry})):i.empty()})).subscribe(this._geometryCreated$)};t.prototype._disableCreate=function(){this._container.mouseService.undeferPixels(this._name);this._tagCreator.delete$.next(null);this._addPointSubscription.unsubscribe();this._createSubscription.unsubscribe();this._deleteSubscription.unsubscribe();this._geometryCreateSubscription.unsubscribe();this._setVertexSubscription.unsubscribe()};return t}(a.CreateHandlerBase);r.CreateVertexHandler=s;r.default=s},{"../../../Component":275,rxjs:27,"rxjs/operators":225}],363:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var i=e("rxjs");var o=e("rxjs/operators");var u=e("../../../Component");var a=function(a){n(e,a);function e(e,t,r,n,i){var o=a.call(this,e,t,r,n)||this;o._tagSet=i;return o}e.prototype._enable=function(){var s=this;var e=this._tagSet.changed$.pipe(o.map(function(e){return e.getAll()}),o.switchMap(function(e){return i.from(e).pipe(o.mergeMap(function(e){return e.interact$}))}),o.switchMap(function(e){return i.concat(i.of(e),s._container.mouseService.documentMouseUp$.pipe(o.map(function(){return{offsetX:0,offsetY:0,operation:u.TagOperation.None,tag:null}}),o.first()))}),o.share());var t=i.merge(this._container.mouseService.mouseMove$,this._container.mouseService.domMouseMove$).pipe(o.share());this._claimMouseSubscription=e.pipe(o.switchMap(function(e){return!!e.tag?s._container.mouseService.domMouseDragStart$:i.empty()})).subscribe(function(){s._container.mouseService.claimMouse(s._name,3)});this._cursorSubscription=e.pipe(o.map(function(e){return e.cursor}),o.distinctUntilChanged()).subscribe(function(e){var t=["crosshair","move","nesw-resize","nwse-resize"];for(var r=0,n=t;r<n.length;r++){var i=n[r];s._container.element.classList.remove("component-tag-edit-"+i)}if(!!e){s._container.element.classList.add("component-tag-edit-"+e)}});this._unclaimMouseSubscription=this._container.mouseService.filtered$(this._name,this._container.mouseService.domMouseDragEnd$).subscribe(function(e){s._container.mouseService.unclaimMouse(s._name)});this._preventDefaultSubscription=e.pipe(o.switchMap(function(e){return!!e.tag?s._container.mouseService.documentMouseMove$:i.empty()})).subscribe(function(e){e.preventDefault()});this._updateGeometrySubscription=e.pipe(o.switchMap(function(e){if(e.operation===u.TagOperation.None||!e.tag){return i.empty()}var t=s._container.mouseService.filtered$(s._name,s._container.mouseService.domMouseDrag$).pipe(o.filter(function(e){return s._viewportCoords.insideElement(e,s._container.element)}));return i.combineLatest(t,s._container.renderService.renderCamera$).pipe(o.withLatestFrom(i.of(e),s._navigator.stateService.currentTransform$,function(e,t,r){var n=e[0],i=e[1];return[n,i,t,r]}))})).subscribe(function(e){var t=e[0],r=e[1],n=e[2],i=e[3];var o=s._mouseEventToBasic(t,s._container.element,r,i,n.offsetX,n.offsetY);var a=n.tag.geometry;if(n.operation===u.TagOperation.Centroid){a.setCentroid2d(o,i)}else if(n.operation===u.TagOperation.Vertex){a.setVertex2d(n.vertexIndex,o,i)}})};e.prototype._disable=function(){this._claimMouseSubscription.unsubscribe();this._cursorSubscription.unsubscribe();this._preventDefaultSubscription.unsubscribe();this._unclaimMouseSubscription.unsubscribe();this._updateGeometrySubscription.unsubscribe()};e.prototype._getNameExtension=function(){return"edit-vertex"};return e}(u.TagHandlerBase);r.EditVertexHandler=a;r.default=a},{"../../../Component":275,rxjs:27,"rxjs/operators":225}],364:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var i=e("../../../Component");var o=function(o){n(e,o);function e(e,t,r,n){var i=o.call(this,e,t,r)||this;i._name=i._component.name+"-"+i._getNameExtension();i._viewportCoords=n;return i}e.prototype._getConfiguration=function(e){return{}};e.prototype._mouseEventToBasic=function(e,t,r,n,i,o){i=i!=null?i:0;o=o!=null?o:0;var a=this._viewportCoords.canvasPosition(e,t),s=a[0],u=a[1];var c=this._viewportCoords.canvasToBasic(s-i,u-o,t,n,r.perspective);return c};return e}(i.HandlerBase);r.TagHandlerBase=o;r.default=o},{"../../../Component":275}],365:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("rxjs/operators");var i=e("three");var L=e("virtual-dom");var o=e("rxjs");var I=e("../../../Component");var a=e("../../../Geo");var s=function(){function e(e,t,r,n){var i=this;this._geometry=e;this._options={color:t.color==null?16777215:t.color};this._transform=r;this._viewportCoords=!!n?n:new a.ViewportCoords;this._outline=this._createOutine();this._glObjects=[this._outline];this._aborted$=new o.Subject;this._created$=new o.Subject;this._glObjectsChanged$=new o.Subject;this._geometryChangedSubscription=this._geometry.changed$.subscribe(function(e){i._disposeOutline();i._outline=i._createOutine();i._glObjects=[i._outline];i._glObjectsChanged$.next(i)})}Object.defineProperty(e.prototype,"geometry",{get:function(){return this._geometry},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"glObjects",{get:function(){return this._glObjects},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"aborted$",{get:function(){return this._aborted$},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"created$",{get:function(){return this._created$},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"glObjectsChanged$",{get:function(){return this._glObjectsChanged$},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"geometryChanged$",{get:function(){var t=this;return this._geometry.changed$.pipe(n.map(function(e){return t}))},enumerable:true,configurable:true});e.prototype.dispose=function(){this._disposeOutline();this._geometryChangedSubscription.unsubscribe()};e.prototype.getDOMObjects=function(e,t){var r=this;var n=[];var i={offsetHeight:t.height,offsetWidth:t.width};var o=function(e){e.stopPropagation();r._aborted$.next(r)};if(this._geometry instanceof I.RectGeometry){var a=this._geometry.anchorIndex;var s=a===undefined?1:a;var u=this._geometry.getVertex2d(s),c=u[0],h=u[1];var l=this._viewportCoords.basicToCanvasSafe(c,h,i,this._transform,e);if(l!=null){var p=this._colorToBackground(this._options.color);var f=this._canvasToTransform(l);var d={style:{background:p,transform:f}};var v={onclick:o,style:{transform:f}};n.push(L.h("div.TagInteractor",v,[]));n.push(L.h("div.TagVertex",d,[]))}}else if(this._geometry instanceof I.PolygonGeometry){var m=this._geometry;var g=m.getVertex2d(0),y=g[0],_=g[1];var b=this._viewportCoords.basicToCanvasSafe(y,_,i,this._transform,e);if(b!=null){var x=m.polygon.length>4?function(e){e.stopPropagation();m.removeVertex2d(m.polygon.length-2);r._created$.next(r)}:o;var f=this._canvasToTransform(b);var v={onclick:x,style:{transform:f}};var w=m.polygon.length>4?"TagCompleter":"TagInteractor";n.push(L.h("div."+w,v,[]))}if(m.polygon.length>3){var S=m.getVertex2d(m.polygon.length-3),M=S[0],E=S[1];var C=this._viewportCoords.basicToCanvasSafe(M,E,i,this._transform,e);if(C!=null){var T=function(e){e.stopPropagation();m.removeVertex2d(m.polygon.length-3)};var f=this._canvasToTransform(C);var v={onclick:T,style:{transform:f}};n.push(L.h("div.TagInteractor",v,[]))}}var O=m.polygon.slice();O.splice(-2,2);for(var P=0,A=O;P<A.length;P++){var j=A[P];var R=this._viewportCoords.basicToCanvasSafe(j[0],j[1],i,this._transform,e);if(R!=null){var p=this._colorToBackground(this._options.color);var f=this._canvasToTransform(R);var d={style:{background:p,transform:f}};n.push(L.h("div.TagVertex",d,[]))}}}return n};e.prototype.addPoint=function(e){if(this._geometry instanceof I.RectGeometry){var t=this._geometry;if(!t.validate(e)){return}this._created$.next(this)}else if(this._geometry instanceof I.PolygonGeometry){var r=this._geometry;r.addVertex2d(e)}};e.prototype._canvasToTransform=function(e){var t=Math.round(e[0]);var r=Math.round(e[1]);var n="translate(-50%,-50%) translate("+t+"px,"+r+"px)";return n};e.prototype._colorToBackground=function(e){return"#"+("000000"+e.toString(16)).substr(-6)};e.prototype._createOutine=function(){var e=this._geometry instanceof I.RectGeometry?this._geometry.getPoints3d(this._transform):this._geometry.getVertices3d(this._transform);var t=this._getLinePositions(e);var r=new i.BufferGeometry;r.addAttribute("position",new i.BufferAttribute(t,3));var n=new i.LineBasicMaterial({color:this._options.color,linewidth:1});return new i.Line(r,n)};e.prototype._disposeOutline=function(){if(this._outline==null){return}var e=this._outline;e.geometry.dispose();e.material.dispose();this._outline=null;this._glObjects=[]};e.prototype._getLinePositions=function(e){var t=e.length;var r=new Float32Array(t*3);for(var n=0;n<t;++n){var i=3*n;var o=e[n];r[i]=o[0];r[i+1]=o[1];r[i+2]=o[2]}return r};return e}();r.OutlineCreateTag=s;r.default=s},{"../../../Component":275,"../../../Geo":278,rxjs:27,"rxjs/operators":225,three:226,"virtual-dom":231}],366:[function(e,t,r){"use strict";var i=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var o=e("three");var U=e("virtual-dom");var G=e("../../../Component");var n=function(n){i(e,n);function e(e,t){var r=n.call(this,e,t)||this;r._fill=!t.gpano?r._createFill():t.fullPano&&e.domain===G.TagDomain.TwoDimensional&&e.geometry instanceof G.PolygonGeometry?r._createFill():null;r._holes=r._tag.lineWidth>=1?r._createHoles():[];r._outline=r._tag.lineWidth>=1?r._createOutline():null;r._geometryChangedSubscription=r._tag.geometry.changed$.subscribe(function(){if(r._fill!=null){r._updateFillGeometry()}if(r._holes.length>0){r._updateHoleGeometries()}if(r._outline!=null){r._updateOulineGeometry()}});r._changedSubscription=r._tag.changed$.subscribe(function(){var e=false;if(r._fill!=null){r._updateFillMaterial(r._fill.material)}if(r._outline==null){if(r._tag.lineWidth>=1){r._holes=r._createHoles();r._outline=r._createOutline();e=true}}else{r._updateHoleMaterials();r._updateOutlineMaterial()}if(e){r._glObjectsChanged$.next(r)}});return r}e.prototype.dispose=function(){this._disposeFill();this._disposeHoles();this._disposeOutline();this._changedSubscription.unsubscribe();this._geometryChangedSubscription.unsubscribe()};e.prototype.getDOMObjects=function(e,t,r){var n=this;var i=[];var o=this._tag.geometry instanceof G.RectGeometry;var a=!this._transform.gpano;var s={offsetHeight:r.height,offsetWidth:r.width};if(this._tag.icon!=null&&(o||a)){var u=this._tag.geometry instanceof G.RectGeometry?this._tag.geometry.getVertex2d(this._tag.iconIndex):this._tag.geometry.getPoleOfInaccessibility2d(),c=u[0],h=u[1];var l=this._viewportCoords.basicToCanvasSafe(c,h,s,this._transform,t);if(l!=null){var p=function(e){n._interact$.next({offsetX:0,offsetY:0,operation:G.TagOperation.None,tag:n._tag})};if(e.loaded){var f=e.getDOMSprite(this._tag.icon,this._tag.iconFloat);var d=Math.round(l[0]);var v=Math.round(l[1]);var m="translate("+d+"px,"+v+"px)";var g=function(e){e.stopPropagation();n._tag.click$.next(n._tag)};var y={onclick:g,onmousedown:p,style:{transform:m}};i.push(U.h("div.TagSymbol",y,[f]))}}}else if(this._tag.text!=null&&(o||a)){var _=this._tag.geometry instanceof G.RectGeometry?this._tag.geometry.getVertex2d(3):this._tag.geometry.getPoleOfInaccessibility2d(),b=_[0],x=_[1];var w=this._viewportCoords.basicToCanvasSafe(b,x,s,this._transform,t);if(w!=null){var S=Math.round(w[0]);var M=Math.round(w[1]);var m=this._tag.geometry instanceof G.RectGeometry?"translate("+S+"px,"+M+"px)":"translate(-50%, -50%) translate("+S+"px,"+M+"px)";var p=function(e){n._interact$.next({offsetX:0,offsetY:0,operation:G.TagOperation.None,tag:n._tag})};var y={onmousedown:p,style:{color:this._colorToCss(this._tag.textColor),transform:m},textContent:this._tag.text};i.push(U.h("span.TagSymbol",y,[]))}}if(!this._tag.editable){return i}var E=this._colorToCss(this._tag.lineColor);if(this._tag.geometry instanceof G.RectGeometry){var C=this._tag.geometry.getCentroid2d(),T=C[0],O=C[1];var P=this._viewportCoords.basicToCanvasSafe(T,O,s,this._transform,t);if(P!=null){var p=this._interact(G.TagOperation.Centroid,"move");var A=Math.round(P[0]);var j=Math.round(P[1]);var m="translate(-50%, -50%) translate("+A+"px,"+j+"px)";var y={onmousedown:p,style:{background:E,transform:m}};i.push(U.h("div.TagMover",y,[]))}}var R=this._tag.geometry.getVertices2d();for(var L=0;L<R.length-1;L++){if(o&&(this._tag.icon!=null&&L===this._tag.iconIndex||this._tag.icon==null&&this._tag.text!=null&&L===3)){continue}var I=R[L],N=I[0],k=I[1];var D=this._viewportCoords.basicToCanvasSafe(N,k,s,this._transform,t);if(D==null){continue}var B=o?L%2===0?"nesw-resize":"nwse-resize":"crosshair";var p=this._interact(G.TagOperation.Vertex,B,L);var F=Math.round(D[0]);var $=Math.round(D[1]);var m="translate(-50%, -50%) translate("+F+"px,"+$+"px)";var y={onmousedown:p,style:{background:E,transform:m,cursor:B}};i.push(U.h("div.TagResizer",y,[]));if(!this._tag.indicateVertices){continue}var z={style:{background:E,transform:m}};i.push(U.h("div.TagVertex",z,[]))}return i};e.prototype.getGLObjects=function(){var e=[];if(this._fill!=null){e.push(this._fill)}for(var t=0,r=this._holes;t<r.length;t++){var n=r[t];e.push(n)}if(this._outline!=null){e.push(this._outline)}return e};e.prototype.getRetrievableObjects=function(){return this._fill!=null?[this._fill]:[]};e.prototype._colorToCss=function(e){return"#"+("000000"+e.toString(16)).substr(-6)};e.prototype._createFill=function(){var e=this._getTriangles();var t=new Float32Array(e);var r=new o.BufferGeometry;r.addAttribute("position",new o.BufferAttribute(t,3));r.computeBoundingSphere();var n=new o.MeshBasicMaterial({side:o.DoubleSide,transparent:true});this._updateFillMaterial(n);return new o.Mesh(r,n)};e.prototype._createHoles=function(){var e=[];if(this._tag.geometry instanceof G.PolygonGeometry){var t=this._getHoles3d();for(var r=0,n=t;r<n.length;r++){var i=n[r];var o=this._createLine(i);e.push(o)}}return e};e.prototype._createLine=function(e){var t=this._getLinePositions(e);var r=new o.BufferGeometry;r.addAttribute("position",new o.BufferAttribute(t,3));r.computeBoundingSphere();var n=new o.LineBasicMaterial;this._updateLineBasicMaterial(n);var i=new o.Line(r,n);i.renderOrder=1;return i};e.prototype._createOutline=function(){return this._createLine(this._getPoints3d())};e.prototype._disposeFill=function(){if(this._fill==null){return}this._fill.geometry.dispose();this._fill.material.dispose();this._fill=null};e.prototype._disposeHoles=function(){for(var e=0,t=this._holes;e<t.length;e++){var r=t[e];r.geometry.dispose();r.material.dispose()}this._holes=[]};e.prototype._disposeOutline=function(){if(this._outline==null){return}this._outline.geometry.dispose();this._outline.material.dispose();this._outline=null};e.prototype._getLinePositions=function(e){var t=e.length;var r=new Float32Array(t*3);for(var n=0;n<t;++n){var i=3*n;var o=e[n];r[i+0]=o[0];r[i+1]=o[1];r[i+2]=o[2]}return r};e.prototype._getHoles3d=function(){var e=this._tag.geometry;return this._in3dDomain()?e.getHoleVertices3d(this._transform):e.getHolePoints3d(this._transform)};e.prototype._getPoints3d=function(){return this._in3dDomain()?this._tag.geometry.getVertices3d(this._transform):this._tag.geometry.getPoints3d(this._transform)};e.prototype._getTriangles=function(){return this._in3dDomain()?this._tag.geometry.get3dDomainTriangles3d(this._transform):this._tag.geometry.getTriangles3d(this._transform)};e.prototype._in3dDomain=function(){return this._tag.geometry instanceof G.PolygonGeometry&&this._tag.domain===G.TagDomain.ThreeDimensional};e.prototype._interact=function(n,i,o){var a=this;return function(e){var t=e.offsetX-e.target.offsetWidth/2;var r=e.offsetY-e.target.offsetHeight/2;a._interact$.next({cursor:i,offsetX:t,offsetY:r,operation:n,tag:a._tag,vertexIndex:o})}};e.prototype._updateFillGeometry=function(){var e=this._getTriangles();var t=new Float32Array(e);var r=this._fill.geometry;var n=r.getAttribute("position");if(n.array.length===t.length){n.set(t);n.needsUpdate=true}else{r.removeAttribute("position");r.addAttribute("position",new o.BufferAttribute(t,3))}r.computeBoundingSphere()};e.prototype._updateFillMaterial=function(e){e.color=new o.Color(this._tag.fillColor);e.opacity=this._tag.fillOpacity;e.needsUpdate=true};e.prototype._updateHoleGeometries=function(){var e=this._getHoles3d();if(e.length!==this._holes.length){throw new Error("Changing the number of holes is not supported.")}for(var t=0;t<this._holes.length;t++){var r=e[t];var n=this._holes[t];this._updateLine(n,r)}};e.prototype._updateHoleMaterials=function(){for(var e=0,t=this._holes;e<t.length;e++){var r=t[e];var n=r.material;this._updateLineBasicMaterial(n)}};e.prototype._updateLine=function(e,t){var r=this._getLinePositions(t);var n=e.geometry;var i=n.getAttribute("position");i.set(r);i.needsUpdate=true;n.computeBoundingSphere()};e.prototype._updateOulineGeometry=function(){this._updateLine(this._outline,this._getPoints3d())};e.prototype._updateOutlineMaterial=function(){var e=this._outline.material;this._updateLineBasicMaterial(e)};e.prototype._updateLineBasicMaterial=function(e){e.color=new o.Color(this._tag.lineColor);e.linewidth=Math.max(this._tag.lineWidth,1);e.visible=this._tag.lineWidth>=1&&this._tag.lineOpacity>0;e.opacity=this._tag.lineOpacity;e.transparent=this._tag.lineOpacity<1;e.needsUpdate=true};return e}(G.RenderTag);r.OutlineRenderTag=n},{"../../../Component":275,three:226,"virtual-dom":231}],367:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var u=e("rxjs");var c=e("../../../Component");var h=e("../../../Viewer");var i=function(a){n(s,a);function s(e,t,r){var n=a.call(this,e,t)||this;r=!!r?r:{};var i=r.domain!=null&&t instanceof c.PolygonGeometry?r.domain:c.TagDomain.TwoDimensional;var o=n._twoDimensionalPolygon(i,t);n._domain=i;n._editable=r.editable==null||o?false:r.editable;n._fillColor=r.fillColor==null?16777215:r.fillColor;n._fillOpacity=r.fillOpacity==null?0:r.fillOpacity;n._icon=r.icon===undefined?null:r.icon;n._iconFloat=r.iconFloat==null?h.Alignment.Center:r.iconFloat;n._iconIndex=r.iconIndex==null?3:r.iconIndex;n._indicateVertices=r.indicateVertices==null?true:r.indicateVertices;n._lineColor=r.lineColor==null?16777215:r.lineColor;n._lineOpacity=r.lineOpacity==null?1:r.lineOpacity;n._lineWidth=r.lineWidth==null?1:r.lineWidth;n._text=r.text===undefined?null:r.text;n._textColor=r.textColor==null?16777215:r.textColor;n._click$=new u.Subject;n._click$.subscribe(function(e){n.fire(s.click,n)});return n}Object.defineProperty(s.prototype,"click$",{get:function(){return this._click$},enumerable:true,configurable:true});Object.defineProperty(s.prototype,"domain",{get:function(){return this._domain},enumerable:true,configurable:true});Object.defineProperty(s.prototype,"editable",{get:function(){return this._editable},set:function(e){if(this._twoDimensionalPolygon(this._domain,this._geometry)){return}this._editable=e;this._notifyChanged$.next(this)},enumerable:true,configurable:true});Object.defineProperty(s.prototype,"fillColor",{get:function(){return this._fillColor},set:function(e){this._fillColor=e;this._notifyChanged$.next(this)},enumerable:true,configurable:true});Object.defineProperty(s.prototype,"fillOpacity",{get:function(){return this._fillOpacity},set:function(e){this._fillOpacity=e;this._notifyChanged$.next(this)},enumerable:true,configurable:true});Object.defineProperty(s.prototype,"geometry",{get:function(){return this._geometry},enumerable:true,configurable:true});Object.defineProperty(s.prototype,"icon",{get:function(){return this._icon},set:function(e){this._icon=e;this._notifyChanged$.next(this)},enumerable:true,configurable:true});Object.defineProperty(s.prototype,"iconFloat",{get:function(){return this._iconFloat},set:function(e){this._iconFloat=e;this._notifyChanged$.next(this)},enumerable:true,configurable:true});Object.defineProperty(s.prototype,"iconIndex",{get:function(){return this._iconIndex},set:function(e){this._iconIndex=e;this._notifyChanged$.next(this)},enumerable:true,configurable:true});Object.defineProperty(s.prototype,"indicateVertices",{get:function(){return this._indicateVertices},set:function(e){this._indicateVertices=e;this._notifyChanged$.next(this)},enumerable:true,configurable:true});Object.defineProperty(s.prototype,"lineColor",{get:function(){return this._lineColor},set:function(e){this._lineColor=e;this._notifyChanged$.next(this)},enumerable:true,configurable:true});Object.defineProperty(s.prototype,"lineOpacity",{get:function(){return this._lineOpacity},set:function(e){this._lineOpacity=e;this._notifyChanged$.next(this)},enumerable:true,configurable:true});Object.defineProperty(s.prototype,"lineWidth",{get:function(){return this._lineWidth},set:function(e){this._lineWidth=e;this._notifyChanged$.next(this)},enumerable:true,configurable:true});Object.defineProperty(s.prototype,"text",{get:function(){return this._text},set:function(e){this._text=e;this._notifyChanged$.next(this)},enumerable:true,configurable:true});Object.defineProperty(s.prototype,"textColor",{get:function(){return this._textColor},set:function(e){this._textColor=e;this._notifyChanged$.next(this)},enumerable:true,configurable:true});s.prototype.setOptions=function(e){var t=this._twoDimensionalPolygon(this._domain,this._geometry);this._editable=t||e.editable==null?this._editable:e.editable;this._icon=e.icon===undefined?this._icon:e.icon;this._iconFloat=e.iconFloat==null?this._iconFloat:e.iconFloat;this._iconIndex=e.iconIndex==null?this._iconIndex:e.iconIndex;this._indicateVertices=e.indicateVertices==null?this._indicateVertices:e.indicateVertices;this._lineColor=e.lineColor==null?this._lineColor:e.lineColor;this._lineWidth=e.lineWidth==null?this._lineWidth:e.lineWidth;this._fillColor=e.fillColor==null?this._fillColor:e.fillColor;this._fillOpacity=e.fillOpacity==null?this._fillOpacity:e.fillOpacity;this._text=e.text===undefined?this._text:e.text;this._textColor=e.textColor==null?this._textColor:e.textColor;this._notifyChanged$.next(this)};s.prototype._twoDimensionalPolygon=function(e,t){return e!==c.TagDomain.ThreeDimensional&&t instanceof c.PolygonGeometry};s.click="click";return s}(c.Tag);r.OutlineTag=i;r.default=i},{"../../../Component":275,"../../../Viewer":286,rxjs:27}],368:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("rxjs");var i=e("../../../Geo");var o=function(){function e(e,t,r){this._tag=e;this._transform=t;this._viewportCoords=!!r?r:new i.ViewportCoords;this._glObjectsChanged$=new n.Subject;this._interact$=new n.Subject}Object.defineProperty(e.prototype,"glObjectsChanged$",{get:function(){return this._glObjectsChanged$},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"interact$",{get:function(){return this._interact$},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"tag",{get:function(){return this._tag},enumerable:true,configurable:true});return e}();r.RenderTag=o;r.default=o},{"../../../Geo":278,rxjs:27}],369:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var S=e("virtual-dom");var M=e("../../../Component");var E=e("../../../Viewer");var i=function(e){n(t,e);function t(){return e!==null&&e.apply(this,arguments)||this}t.prototype.dispose=function(){};t.prototype.getDOMObjects=function(e,t,r){var n=this;var i=this._tag;var o={offsetHeight:r.height,offsetWidth:r.width};var a=[];var s=i.geometry.getCentroid2d(),u=s[0],c=s[1];var h=this._viewportCoords.basicToCanvasSafe(u,c,o,this._transform,t);if(h!=null){var l=function(e){n._interact$.next({offsetX:0,offsetY:0,operation:M.TagOperation.None,tag:i})};var p=Math.round(h[0]);var f=Math.round(h[1]);if(i.icon!=null){if(e.loaded){var d=e.getDOMSprite(i.icon,E.Alignment.Bottom);var v="translate("+p+"px,"+(f+8)+"px)";var m={onmousedown:l,style:{pointerEvents:"all",transform:v}};a.push(S.h("div",m,[d]))}}else if(i.text!=null){var g="translate(-50%,0%) translate("+p+"px,"+(f+8)+"px)";var m={onmousedown:l,style:{color:this._colorToCss(i.textColor),transform:g},textContent:i.text};a.push(S.h("span.TagSymbol",m,[]))}var y=this._interact(M.TagOperation.Centroid,i,"move");var _=this._colorToCss(i.color);var b="translate(-50%,-50%) translate("+p+"px,"+f+"px)";if(i.editable){var x={onmousedown:y,style:{background:_,transform:b}};a.push(S.h("div.TagSpotInteractor",x,[]))}var w={style:{background:_,transform:b}};a.push(S.h("div.TagVertex",w,[]))}return a};t.prototype.getGLObjects=function(){return[]};t.prototype.getRetrievableObjects=function(){return[]};t.prototype._colorToCss=function(e){return"#"+("000000"+e.toString(16)).substr(-6)};t.prototype._interact=function(n,i,o,a){var s=this;return function(e){var t=e.offsetX-e.target.offsetWidth/2;var r=e.offsetY-e.target.offsetHeight/2;s._interact$.next({cursor:o,offsetX:t,offsetY:r,operation:n,tag:i,vertexIndex:a})}};return t}(M.RenderTag);r.SpotRenderTag=i},{"../../../Component":275,"../../../Viewer":286,"virtual-dom":231}],370:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var i=e("../../../Component");var o=function(i){n(e,i);function e(e,t,r){var n=i.call(this,e,t)||this;r=!!r?r:{};n._color=r.color==null?16777215:r.color;n._editable=r.editable==null?false:r.editable;n._icon=r.icon===undefined?null:r.icon;n._text=r.text===undefined?null:r.text;n._textColor=r.textColor==null?16777215:r.textColor;return n}Object.defineProperty(e.prototype,"color",{get:function(){return this._color},set:function(e){this._color=e;this._notifyChanged$.next(this)},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"editable",{get:function(){return this._editable},set:function(e){this._editable=e;this._notifyChanged$.next(this)},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"icon",{get:function(){return this._icon},set:function(e){this._icon=e;this._notifyChanged$.next(this)},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"text",{get:function(){return this._text},set:function(e){this._text=e;this._notifyChanged$.next(this)},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"textColor",{get:function(){return this._textColor},set:function(e){this._textColor=e;this._notifyChanged$.next(this)},enumerable:true,configurable:true});e.prototype.setOptions=function(e){this._color=e.color==null?this._color:e.color;this._editable=e.editable==null?this._editable:e.editable;this._icon=e.icon===undefined?this._icon:e.icon;this._text=e.text===undefined?this._text:e.text;this._textColor=e.textColor==null?this._textColor:e.textColor;this._notifyChanged$.next(this)};return e}(i.Tag);r.SpotTag=o;r.default=o},{"../../../Component":275}],371:[function(e,t,r){"use strict";var o=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var a=e("rxjs/operators");var s=e("rxjs");var n=e("../../../Utils");var i=function(n){o(i,n);function i(e,t){var r=n.call(this)||this;r._id=e;r._geometry=t;r._notifyChanged$=new s.Subject;r._notifyChanged$.subscribe(function(e){r.fire(i.changed,r)});r._geometry.changed$.subscribe(function(e){r.fire(i.geometrychanged,r)});return r}Object.defineProperty(i.prototype,"id",{get:function(){return this._id},enumerable:true,configurable:true});Object.defineProperty(i.prototype,"geometry",{get:function(){return this._geometry},enumerable:true,configurable:true});Object.defineProperty(i.prototype,"changed$",{get:function(){return this._notifyChanged$},enumerable:true,configurable:true});Object.defineProperty(i.prototype,"geometryChanged$",{get:function(){var t=this;return this._geometry.changed$.pipe(a.map(function(e){return t}),a.share())},enumerable:true,configurable:true});i.changed="changed";i.geometrychanged="geometrychanged";return i}(n.EventEmitter);r.Tag=i;r.default=i},{"../../../Utils":285,rxjs:27,"rxjs/operators":225}],372:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n;(function(e){e[e["TwoDimensional"]=0]="TwoDimensional";e[e["ThreeDimensional"]=1]="ThreeDimensional"})(n=r.TagDomain||(r.TagDomain={}));r.default=n},{}],373:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=function(){function e(e,t,r){this._component=e;this._container=t;this._navigator=r;this._enabled=false}Object.defineProperty(e.prototype,"isEnabled",{get:function(){return this._enabled},enumerable:true,configurable:true});e.prototype.enable=function(){if(this._enabled||!this._component.activated){return}this._enable();this._enabled=true;this._component.configure(this._getConfiguration(true))};e.prototype.disable=function(){if(!this._enabled){return}this._disable();this._enabled=false;if(this._component.activated){this._component.configure(this._getConfiguration(false))}};return e}();r.HandlerBase=n;r.default=n},{}],374:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var b=e("three");var h=e("../../Component");var n=function(){function e(e,t){this._imagePlaneDepth=e!=null?e:200;this._imageSphereRadius=t!=null?t:200}e.prototype.createMesh=function(e,t){if(e.pano){return this._createImageSphere(e,t)}else if(t.cameraProjection==="fisheye"){return this._createImagePlaneFisheye(e,t)}else{return this._createImagePlane(e,t)}};e.prototype.createFlatMesh=function(e,t,r,n,i,o){var a=this._createTexture(e.image);var s=this._createDistortedPlaneMaterialParameters(t,a);var u=new b.ShaderMaterial(s);var c=this._getFlatImagePlaneGeoFromBasic(t,r,n,i,o);return new b.Mesh(c,u)};e.prototype.createCurtainMesh=function(e,t){if(e.pano&&!e.fullPano){throw new Error("Cropped panoramas cannot have curtain.")}if(e.pano){return this._createSphereCurtainMesh(e,t)}else if(t.cameraProjection==="fisheye"){return this._createCurtainMeshFisheye(e,t)}else{return this._createCurtainMesh(e,t)}};e.prototype.createDistortedCurtainMesh=function(e,t){if(e.pano){throw new Error("Cropped panoramas cannot have curtain.")}return this._createDistortedCurtainMesh(e,t)};e.prototype._createCurtainMesh=function(e,t){var r=this._createTexture(e.image);var n=this._createCurtainPlaneMaterialParameters(t,r);var i=new b.ShaderMaterial(n);var o=this._useMesh(t,e)?this._getImagePlaneGeo(t,e):this._getRegularFlatImagePlaneGeo(t);return new b.Mesh(o,i)};e.prototype._createCurtainMeshFisheye=function(e,t){var r=this._createTexture(e.image);var n=this._createCurtainPlaneMaterialParametersFisheye(t,r);var i=new b.ShaderMaterial(n);var o=this._useMesh(t,e)?this._getImagePlaneGeoFisheye(t,e):this._getRegularFlatImagePlaneGeo(t);return new b.Mesh(o,i)};e.prototype._createDistortedCurtainMesh=function(e,t){var r=this._createTexture(e.image);var n=this._createDistortedCurtainPlaneMaterialParameters(t,r);var i=new b.ShaderMaterial(n);var o=this._getRegularFlatImagePlaneGeo(t);return new b.Mesh(o,i)};e.prototype._createSphereCurtainMesh=function(e,t){var r=this._createTexture(e.image);var n=this._createCurtainSphereMaterialParameters(t,r);var i=new b.ShaderMaterial(n);return this._useMesh(t,e)?new b.Mesh(this._getImageSphereGeo(t,e),i):new b.Mesh(this._getFlatImageSphereGeo(t),i)};e.prototype._createImageSphere=function(e,t){var r=this._createTexture(e.image);var n=this._createSphereMaterialParameters(t,r);var i=new b.ShaderMaterial(n);var o=this._useMesh(t,e)?new b.Mesh(this._getImageSphereGeo(t,e),i):new b.Mesh(this._getFlatImageSphereGeo(t),i);return o};e.prototype._createImagePlane=function(e,t){var r=this._createTexture(e.image);var n=this._createPlaneMaterialParameters(t,r);var i=new b.ShaderMaterial(n);var o=this._useMesh(t,e)?this._getImagePlaneGeo(t,e):this._getRegularFlatImagePlaneGeo(t);return new b.Mesh(o,i)};e.prototype._createImagePlaneFisheye=function(e,t){var r=this._createTexture(e.image);var n=this._createPlaneMaterialParametersFisheye(t,r);var i=new b.ShaderMaterial(n);var o=this._useMesh(t,e)?this._getImagePlaneGeoFisheye(t,e):this._getRegularFlatImagePlaneGeoFisheye(t);return new b.Mesh(o,i)};e.prototype._createSphereMaterialParameters=function(e,t){var r=e.gpano;var n=(r.FullPanoWidthPixels-r.CroppedAreaImageWidthPixels)/2;var i=2*Math.PI*(r.CroppedAreaLeftPixels-n)/r.FullPanoWidthPixels;var o=2*Math.PI*r.CroppedAreaImageWidthPixels/r.FullPanoWidthPixels;var a=(r.FullPanoHeightPixels-r.CroppedAreaImageHeightPixels)/2;var s=Math.PI*(a-r.CroppedAreaTopPixels)/r.FullPanoHeightPixels;var u=Math.PI*r.CroppedAreaImageHeightPixels/r.FullPanoHeightPixels;var c={depthWrite:false,fragmentShader:h.Shaders.equirectangular.fragment,side:b.DoubleSide,transparent:true,uniforms:{opacity:{type:"f",value:1},phiLength:{type:"f",value:o},phiShift:{type:"f",value:i},projectorMat:{type:"m4",value:e.rt},projectorTex:{type:"t",value:t},thetaLength:{type:"f",value:u},thetaShift:{type:"f",value:s}},vertexShader:h.Shaders.equirectangular.vertex};return c};e.prototype._createCurtainSphereMaterialParameters=function(e,t){var r=e.gpano;var n=(r.FullPanoWidthPixels-r.CroppedAreaImageWidthPixels)/2;var i=2*Math.PI*(r.CroppedAreaLeftPixels-n)/r.FullPanoWidthPixels;var o=2*Math.PI*r.CroppedAreaImageWidthPixels/r.FullPanoWidthPixels;var a=(r.FullPanoHeightPixels-r.CroppedAreaImageHeightPixels)/2;var s=Math.PI*(a-r.CroppedAreaTopPixels)/r.FullPanoHeightPixels;var u=Math.PI*r.CroppedAreaImageHeightPixels/r.FullPanoHeightPixels;var c={depthWrite:false,fragmentShader:h.Shaders.equirectangularCurtain.fragment,side:b.DoubleSide,transparent:true,uniforms:{curtain:{type:"f",value:1},opacity:{type:"f",value:1},phiLength:{type:"f",value:o},phiShift:{type:"f",value:i},projectorMat:{type:"m4",value:e.rt},projectorTex:{type:"t",value:t},thetaLength:{type:"f",value:u},thetaShift:{type:"f",value:s}},vertexShader:h.Shaders.equirectangularCurtain.vertex};return c};e.prototype._createPlaneMaterialParameters=function(e,t){var r={depthWrite:false,fragmentShader:h.Shaders.perspective.fragment,side:b.DoubleSide,transparent:true,uniforms:{focal:{type:"f",value:e.focal},k1:{type:"f",value:e.ck1},k2:{type:"f",value:e.ck2},opacity:{type:"f",value:1},projectorMat:{type:"m4",value:e.basicRt},projectorTex:{type:"t",value:t},radial_peak:{type:"f",value:!!e.radialPeak?e.radialPeak:0},scale_x:{type:"f",value:Math.max(e.basicHeight,e.basicWidth)/e.basicWidth},scale_y:{type:"f",value:Math.max(e.basicWidth,e.basicHeight)/e.basicHeight}},vertexShader:h.Shaders.perspective.vertex};return r};e.prototype._createPlaneMaterialParametersFisheye=function(e,t){var r={depthWrite:false,fragmentShader:h.Shaders.fisheye.fragment,side:b.DoubleSide,transparent:true,uniforms:{focal:{type:"f",value:e.focal},k1:{type:"f",value:e.ck1},k2:{type:"f",value:e.ck2},opacity:{type:"f",value:1},projectorMat:{type:"m4",value:e.basicRt},projectorTex:{type:"t",value:t},radial_peak:{type:"f",value:!!e.radialPeak?e.radialPeak:0},scale_x:{type:"f",value:Math.max(e.basicHeight,e.basicWidth)/e.basicWidth},scale_y:{type:"f",value:Math.max(e.basicWidth,e.basicHeight)/e.basicHeight}},vertexShader:h.Shaders.fisheye.vertex};return r};e.prototype._createCurtainPlaneMaterialParametersFisheye=function(e,t){var r={depthWrite:false,fragmentShader:h.Shaders.fisheyeCurtain.fragment,side:b.DoubleSide,transparent:true,uniforms:{curtain:{type:"f",value:1},focal:{type:"f",value:e.focal},k1:{type:"f",value:e.ck1},k2:{type:"f",value:e.ck2},opacity:{type:"f",value:1},projectorMat:{type:"m4",value:e.basicRt},projectorTex:{type:"t",value:t},radial_peak:{type:"f",value:!!e.radialPeak?e.radialPeak:0},scale_x:{type:"f",value:Math.max(e.basicHeight,e.basicWidth)/e.basicWidth},scale_y:{type:"f",value:Math.max(e.basicWidth,e.basicHeight)/e.basicHeight}},vertexShader:h.Shaders.fisheyeCurtain.vertex};return r};e.prototype._createCurtainPlaneMaterialParameters=function(e,t){var r={depthWrite:false,fragmentShader:h.Shaders.perspectiveCurtain.fragment,side:b.DoubleSide,transparent:true,uniforms:{curtain:{type:"f",value:1},focal:{type:"f",value:e.focal},k1:{type:"f",value:e.ck1},k2:{type:"f",value:e.ck2},opacity:{type:"f",value:1},projectorMat:{type:"m4",value:e.basicRt},projectorTex:{type:"t",value:t},radial_peak:{type:"f",value:!!e.radialPeak?e.radialPeak:0},scale_x:{type:"f",value:Math.max(e.basicHeight,e.basicWidth)/e.basicWidth},scale_y:{type:"f",value:Math.max(e.basicWidth,e.basicHeight)/e.basicHeight}},vertexShader:h.Shaders.perspectiveCurtain.vertex};return r};e.prototype._createDistortedCurtainPlaneMaterialParameters=function(e,t){var r={depthWrite:false,fragmentShader:h.Shaders.perspectiveDistortedCurtain.fragment,side:b.DoubleSide,transparent:true,uniforms:{curtain:{type:"f",value:1},opacity:{type:"f",value:1},projectorMat:{type:"m4",value:e.projectorMatrix()},projectorTex:{type:"t",value:t}},vertexShader:h.Shaders.perspectiveDistortedCurtain.vertex};return r};e.prototype._createDistortedPlaneMaterialParameters=function(e,t){var r={depthWrite:false,fragmentShader:h.Shaders.perspectiveDistorted.fragment,side:b.DoubleSide,transparent:true,uniforms:{opacity:{type:"f",value:1},projectorMat:{type:"m4",value:e.projectorMatrix()},projectorTex:{type:"t",value:t}},vertexShader:h.Shaders.perspectiveDistorted.vertex};return r};e.prototype._createTexture=function(e){var t=new b.Texture(e);t.minFilter=b.LinearFilter;t.needsUpdate=true;return t};e.prototype._useMesh=function(e,t){return t.mesh.vertices.length&&e.hasValidScale};e.prototype._getImageSphereGeo=function(e,t){var r=(new b.Matrix4).getInverse(e.srt);var n=5*e.scale;var i=this._imageSphereRadius*e.scale;var o=t.mesh.vertices;var a=o.length/3;var s=new Float32Array(o.length);for(var u=0;u<a;++u){var c=3*u;var h=o[c+0];var l=o[c+1];var p=o[c+2];var f=Math.sqrt(h*h+l*l+p*p);var d=Math.max(n,Math.min(f,i));var v=d/f;var m=new b.Vector3(h*v,l*v,p*v);m.applyMatrix4(r);s[c+0]=m.x;s[c+1]=m.y;s[c+2]=m.z}var g=t.mesh.faces;var y=new Uint16Array(g.length);for(var u=0;u<g.length;++u){y[u]=g[u]}var _=new b.BufferGeometry;_.addAttribute("position",new b.BufferAttribute(s,3));_.setIndex(new b.BufferAttribute(y,1));return _};e.prototype._getImagePlaneGeo=function(e,t){var r=3;var n=(new b.Matrix4).getInverse(e.srt);var i=5*e.scale;var o=this._imagePlaneDepth*e.scale;var a=t.mesh.vertices;var s=a.length/3;var u=new Float32Array(a.length);for(var c=0;c<s;++c){var h=3*c;var l=a[h+0];var p=a[h+1];var f=a[h+2];if(c<4){l*=r;p*=r}var d=Math.max(i,Math.min(f,o));var v=d/f;var m=new b.Vector3(l*v,p*v,d);m.applyMatrix4(n);u[h+0]=m.x;u[h+1]=m.y;u[h+2]=m.z}var g=t.mesh.faces;var y=new Uint16Array(g.length);for(var c=0;c<g.length;++c){y[c]=g[c]}var _=new b.BufferGeometry;_.addAttribute("position",new b.BufferAttribute(u,3));_.setIndex(new b.BufferAttribute(y,1));return _};e.prototype._getImagePlaneGeoFisheye=function(e,t){var r=(new b.Matrix4).getInverse(e.srt);var n=5*e.scale;var i=this._imagePlaneDepth*e.scale;var o=t.mesh.vertices;var a=o.length/3;var s=new Float32Array(o.length);for(var u=0;u<a;++u){var c=3*u;var h=o[c+0];var l=o[c+1];var p=o[c+2];var f=Math.sqrt(h*h+l*l+p*p);var d=Math.max(n,Math.min(f,i));var v=d/f;var m=new b.Vector3(h*v,l*v,p*v);m.applyMatrix4(r);s[c+0]=m.x;s[c+1]=m.y;s[c+2]=m.z}var g=t.mesh.faces;var y=new Uint16Array(g.length);for(var u=0;u<g.length;++u){y[u]=g[u]}var _=new b.BufferGeometry;_.addAttribute("position",new b.BufferAttribute(s,3));_.setIndex(new b.BufferAttribute(y,1));return _};e.prototype._getFlatImageSphereGeo=function(e){var t=e.gpano;var r=2*Math.PI*t.CroppedAreaLeftPixels/t.FullPanoWidthPixels;var n=2*Math.PI*t.CroppedAreaImageWidthPixels/t.FullPanoWidthPixels;var i=Math.PI*(t.FullPanoHeightPixels-t.CroppedAreaImageHeightPixels-t.CroppedAreaTopPixels)/t.FullPanoHeightPixels;var o=Math.PI*t.CroppedAreaImageHeightPixels/t.FullPanoHeightPixels;var a=new b.SphereGeometry(this._imageSphereRadius,20,40,r-Math.PI/2,n,i,o);a.applyMatrix((new b.Matrix4).getInverse(e.rt));return a};e.prototype._getRegularFlatImagePlaneGeo=function(e){var t=e.width;var r=e.height;var n=Math.max(t,r);var i=t/2/n;var o=r/2/n;return this._getFlatImagePlaneGeo(e,i,o)};e.prototype._getFlatImagePlaneGeo=function(e,t,r){var n=[];n.push(e.unprojectSfM([-t,-r],this._imagePlaneDepth));n.push(e.unprojectSfM([t,-r],this._imagePlaneDepth));n.push(e.unprojectSfM([t,r],this._imagePlaneDepth));n.push(e.unprojectSfM([-t,r],this._imagePlaneDepth));return this._createFlatGeometry(n)};e.prototype._getRegularFlatImagePlaneGeoFisheye=function(e){var t=e.width;var r=e.height;var n=Math.max(t,r);var i=t/2/n;var o=r/2/n;return this._getFlatImagePlaneGeoFisheye(e,i,o)};e.prototype._getFlatImagePlaneGeoFisheye=function(e,t,r){var n=[];n.push(e.unprojectSfM([-t,-r],this._imagePlaneDepth));n.push(e.unprojectSfM([t,-r],this._imagePlaneDepth));n.push(e.unprojectSfM([t,r],this._imagePlaneDepth));n.push(e.unprojectSfM([-t,r],this._imagePlaneDepth));return this._createFlatGeometry(n)};e.prototype._getFlatImagePlaneGeoFromBasic=function(e,t,r,n,i){var o=[];o.push(e.unprojectBasic([t,n],this._imagePlaneDepth));o.push(e.unprojectBasic([r,n],this._imagePlaneDepth));o.push(e.unprojectBasic([r,i],this._imagePlaneDepth));o.push(e.unprojectBasic([t,i],this._imagePlaneDepth));return this._createFlatGeometry(o)};e.prototype._createFlatGeometry=function(e){var t=new Float32Array(12);for(var r=0;r<e.length;r++){var n=3*r;t[n+0]=e[r][0];t[n+1]=e[r][1];t[n+2]=e[r][2]}var i=new Uint16Array(6);i[0]=0;i[1]=1;i[2]=3;i[3]=1;i[4]=2;i[5]=3;var o=new b.BufferGeometry;o.addAttribute("position",new b.BufferAttribute(t,3));o.setIndex(new b.BufferAttribute(i,1));return o};return e}();r.MeshFactory=n;r.default=n},{"../../Component":275,three:226}],375:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("three");var i=function(){function e(){this.scene=new n.Scene;this.sceneOld=new n.Scene;this.imagePlanes=[];this.imagePlanesOld=[]}e.prototype.updateImagePlanes=function(e){this._dispose(this.imagePlanesOld,this.sceneOld);for(var t=0,r=this.imagePlanes;t<r.length;t++){var n=r[t];this.scene.remove(n);this.sceneOld.add(n)}for(var i=0,o=e;i<o.length;i++){var n=o[i];this.scene.add(n)}this.imagePlanesOld=this.imagePlanes;this.imagePlanes=e};e.prototype.addImagePlanes=function(e){for(var t=0,r=e;t<r.length;t++){var n=r[t];this.scene.add(n);this.imagePlanes.push(n)}};e.prototype.addImagePlanesOld=function(e){for(var t=0,r=e;t<r.length;t++){var n=r[t];this.sceneOld.add(n);this.imagePlanesOld.push(n)}};e.prototype.setImagePlanes=function(e){this._clear();this.addImagePlanes(e)};e.prototype.setImagePlanesOld=function(e){this._clearOld();this.addImagePlanesOld(e)};e.prototype.clear=function(){this._clear();this._clearOld()};e.prototype._clear=function(){this._dispose(this.imagePlanes,this.scene);this.imagePlanes.length=0};e.prototype._clearOld=function(){this._dispose(this.imagePlanesOld,this.sceneOld);this.imagePlanesOld.length=0};e.prototype._dispose=function(e,t){for(var r=0,n=e;r<n.length;r++){var i=n[r];t.remove(i);i.geometry.dispose();i.material.dispose();var o=i.material.uniforms.projectorTex.value;if(o!=null){o.dispose()}}};return e}();r.MeshScene=i;r.default=i},{three:226}],376:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var o=e("rxjs");var a=e("rxjs/operators");var n=function(){function e(){}e.filteredPairwiseMouseDrag$=function(n,i){return i.filtered$(n,i.mouseDragStart$).pipe(a.switchMap(function(e){var t=o.concat(o.of(e),i.filtered$(n,i.mouseDrag$));var r=i.filtered$(n,i.mouseDragEnd$).pipe(a.map(function(){return null}));return o.merge(t,r).pipe(a.takeWhile(function(e){return!!e}),a.startWith(null))}),a.pairwise(),a.filter(function(e){return e[0]!=null&&e[1]!=null}))};return e}();r.MouseOperator=n;r.default=n},{rxjs:27,"rxjs/operators":225}],377:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var o=e("rxjs");var a=e("rxjs/operators");var u=e("virtual-dom");var i=e("../../Component");var s=e("../../Geo");var c=e("../../State");var h=function(i){n(e,i);function e(e,t,r){var n=i.call(this,e,t,r)||this;n._viewportCoords=new s.ViewportCoords;n._zoomDelta$=new o.Subject;return n}e.prototype._activate=function(){var s=this;this._renderSubscription=o.combineLatest(this._navigator.stateService.currentState$,this._navigator.stateService.state$).pipe(a.map(function(e){var t=e[0],r=e[1];return[t.state.zoom,r]}),a.map(function(e){var t=e[0],r=e[1];var n=u.h("div.ZoomInIcon",[]);var i=t>=3||r===c.State.Waiting?u.h("div.ZoomInButtonDisabled",[n]):u.h("div.ZoomInButton",{onclick:function(){s._zoomDelta$.next(1)}},[n]);var o=u.h("div.ZoomOutIcon",[]);var a=t<=0||r===c.State.Waiting?u.h("div.ZoomOutButtonDisabled",[o]):u.h("div.ZoomOutButton",{onclick:function(){s._zoomDelta$.next(-1)}},[o]);return{name:s._name,vnode:u.h("div.ZoomContainer",{oncontextmenu:function(e){e.preventDefault()}},[i,a])}})).subscribe(this._container.domRenderer.render$);this._zoomSubscription=this._zoomDelta$.pipe(a.withLatestFrom(this._container.renderService.renderCamera$,this._navigator.stateService.currentTransform$)).subscribe(function(e){var t=e[0],r=e[1],n=e[2];var i=s._viewportCoords.unprojectFromViewport(0,0,r.perspective);var o=n.projectBasic(i.toArray());s._navigator.stateService.zoomIn(t,o)})};e.prototype._deactivate=function(){this._renderSubscription.unsubscribe();this._zoomSubscription.unsubscribe()};e.prototype._getDefaultConfiguration=function(){return{}};e.componentName="zoom";return e}(i.Component);r.ZoomComponent=h;i.ComponentService.register(h);r.default=h},{"../../Component":275,"../../Geo":278,"../../State":282,rxjs:27,"rxjs/operators":225,"virtual-dom":231}],378:[function(e,t,r){"use strict";var i=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var n=e("./MapillaryError");var o=function(r){i(n,r);function n(e){var t=r.call(this,e!=null?e:"The request was aborted.")||this;Object.setPrototypeOf(t,n.prototype);t.name="AbortMapillaryError";return t}return n}(n.MapillaryError);r.AbortMapillaryError=o;r.default=o},{"./MapillaryError":381}],379:[function(e,t,r){"use strict";var i=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var n=e("./MapillaryError");var o=function(r){i(n,r);function n(e){var t=r.call(this,e!=null?e:"The argument is not valid.")||this;Object.setPrototypeOf(t,n.prototype);t.name="ArgumentMapillaryError";return t}return n}(n.MapillaryError);r.ArgumentMapillaryError=o;r.default=o},{"./MapillaryError":381}],380:[function(e,t,r){"use strict";var i=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var n=e("./MapillaryError");var o=function(r){i(n,r);function n(e){var t=r.call(this,e)||this;Object.setPrototypeOf(t,n.prototype);t.name="GraphMapillaryError";return t}return n}(n.MapillaryError);r.GraphMapillaryError=o;r.default=o},{"./MapillaryError":381}],381:[function(e,t,r){"use strict";var i=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var n=function(r){i(n,r);function n(e){var t=r.call(this,e)||this;Object.setPrototypeOf(t,n.prototype);t.name="MapillaryError";return t}return n}(Error);r.MapillaryError=n;r.default=n},{}],382:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("three");var i=function(){function t(e){if(e!=null){this._position=(new n.Vector3).fromArray(e.unprojectSfM([0,0],0));this._lookat=(new n.Vector3).fromArray(e.unprojectSfM([0,0],10));this._up=e.upVector();this._focal=this._getFocal(e)}else{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}}Object.defineProperty(t.prototype,"position",{get:function(){return this._position},enumerable:true,configurable:true});Object.defineProperty(t.prototype,"lookat",{get:function(){return this._lookat},enumerable:true,configurable:true});Object.defineProperty(t.prototype,"up",{get:function(){return this._up},enumerable:true,configurable:true});Object.defineProperty(t.prototype,"focal",{get:function(){return this._focal},set:function(e){this._focal=e},enumerable:true,configurable:true});t.prototype.lerpCameras=function(e,t,r){this._position.subVectors(t.position,e.position).multiplyScalar(r).add(e.position);this._lookat.subVectors(t.lookat,e.lookat).multiplyScalar(r).add(e.lookat);this._up.subVectors(t.up,e.up).multiplyScalar(r).add(e.up);this._focal=(1-r)*e.focal+r*t.focal};t.prototype.copy=function(e){this._position.copy(e.position);this._lookat.copy(e.lookat);this._up.copy(e.up);this._focal=e.focal};t.prototype.clone=function(){var e=new t;e.position.copy(this._position);e.lookat.copy(this._lookat);e.up.copy(this._up);e.focal=this._focal;return e};t.prototype.diff=function(e){var t=this._position.distanceToSquared(e.position);var r=this._lookat.distanceToSquared(e.lookat);var n=this._up.distanceToSquared(e.up);var i=100*Math.abs(this._focal-e.focal);return Math.max(t,r,n,i)};t.prototype._getFocal=function(e){if(e.gpano==null){return e.focal}var t=Math.PI*e.gpano.CroppedAreaImageHeightPixels/e.gpano.FullPanoHeightPixels;var r=.5/Math.tan(t/2);return Math.min(1/(2*(Math.sqrt(2)-1)),Math.max(.5,r))};return t}();r.Camera=i},{three:226}],383:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("../Geo");var a=new n.GeoCoords;var s=new n.Spatial;function i(e,t,r){var n=a.geodeticToEnu(e.lat,e.lon,e.alt,r.lat,r.lon,r.alt);var i=s.rotate(n,t);var o=[-i.x,-i.y,-i.z];return o}r.computeTranslation=i},{"../Geo":278}],384:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=function(){function e(){this._wgs84a=6378137;this._wgs84b=6356752.31424518}e.prototype.geodeticToEnu=function(e,t,r,n,i,o){var a=this.geodeticToEcef(e,t,r);return this.ecefToEnu(a[0],a[1],a[2],n,i,o)};e.prototype.enuToGeodetic=function(e,t,r,n,i,o){var a=this.enuToEcef(e,t,r,n,i,o);return this.ecefToGeodetic(a[0],a[1],a[2])};e.prototype.ecefToEnu=function(e,t,r,n,i,o){var a=this.geodeticToEcef(n,i,o);var s=[e-a[0],t-a[1],r-a[2]];n=n*Math.PI/180;i=i*Math.PI/180;var u=Math.cos(n);var c=Math.sin(n);var h=Math.cos(i);var l=Math.sin(i);var p=-l*s[0]+h*s[1];var f=-c*h*s[0]-c*l*s[1]+u*s[2];var d=u*h*s[0]+u*l*s[1]+c*s[2];return[p,f,d]};e.prototype.enuToEcef=function(e,t,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);var u=Math.sin(n);var c=Math.cos(i);var h=Math.sin(i);var l=-h*e-u*c*t+s*c*r+a[0];var p=c*e-u*h*t+s*h*r+a[1];var f=s*t+u*r+a[2];return[l,p,f]};e.prototype.geodeticToEcef=function(e,t,r){var n=this._wgs84a;var i=this._wgs84b;e=e*Math.PI/180;t=t*Math.PI/180;var o=Math.cos(e);var a=Math.sin(e);var s=Math.cos(t);var u=Math.sin(t);var c=n*n;var h=i*i;var l=1/Math.sqrt(c*o*o+h*a*a);var p=(c*l+r)*o;var f=p*s;var d=p*u;var v=(h*l+r)*a;return[f,d,v]};e.prototype.ecefToGeodetic=function(e,t,r){var n=this._wgs84a;var i=this._wgs84b;var o=n*n;var a=i*i;var s=o-a;var u=Math.sqrt(s/o);var c=Math.sqrt(s/a);var h=Math.sqrt(e*e+t*t);var l=Math.atan2(r*n,h*i);var p=Math.sin(l);var f=Math.cos(l);var d=Math.atan2(t,e);var v=Math.atan2(r+c*c*i*p*p*p,h-u*u*n*f*f*f);var m=Math.sin(v);var g=Math.cos(v);var y=n/Math.sqrt(1-u*u*m*m);var _=h/g-y;return[v*180/Math.PI,d*180/Math.PI,_]};return e}();r.GeoCoords=n;r.default=n},{}],385:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});function i(e){return e>0?1:e<0?-1:0}function a(e,t){return e.x<=Math.max(t.p1.x,t.p2.x)&&e.x>=Math.min(t.p1.x,t.p2.x)&&e.y>=Math.max(t.p1.y,t.p2.y)&&e.y>=Math.min(t.p1.y,t.p2.y)}function f(e,t){var r=e.p2.x-e.p1.x;var n=e.p2.y-e.p1.y;var i=t.p2.x-t.p1.x;var o=t.p2.y-t.p1.y;var a=r*o-n*i;var s=r*r+n*n;var u=i*i+o*o;var c=1e-10;return a*a<c*s*u}function s(e,t,r){var n=(t.y-e.y)*(r.x-t.x)-(r.y-t.y)*(t.x-e.x);return i(n)}function n(e,t){if(f(e,t)){return false}var r=s(e.p1,e.p2,t.p1);var n=s(e.p1,e.p2,t.p2);var i=s(t.p1,t.p2,e.p1);var o=s(t.p1,t.p2,e.p2);if(r!==n&&i!==o){return true}if(r===0&&a(t.p1,e)){return true}if(n===0&&a(t.p2,e)){return true}if(i===0&&a(e.p1,t)){return true}if(o===0&&a(e.p2,t)){return true}return false}r.segmentsIntersect=n;function o(e,t){if(f(e,t)){return undefined}var r=e.p1.x;var n=e.p2.x;var i=e.p1.y;var o=e.p2.y;var a=t.p1.x;var s=t.p2.x;var u=t.p1.y;var c=t.p2.y;var h=(r-n)*(u-c)-(i-o)*(a-s);var l=(r*o-i*n)*(a-s)-(r-n)*(a*c-u*s);var p=(r*o-i*n)*(u-c)-(i-o)*(a*c-u*s);return{x:l/h,y:p/h}}r.segmentIntersection=o},{}],386:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var o=e("three");var n=function(){function e(){this._epsilon=1e-9}e.prototype.azimuthalToBearing=function(e){return-e+Math.PI/2};e.prototype.degToRad=function(e){return Math.PI*e/180};e.prototype.radToDeg=function(e){return 180*e/Math.PI};e.prototype.rotationMatrix=function(e){var t=new o.Vector3(e[0],e[1],e[2]);var r=t.length();if(r>0){t.normalize()}return(new o.Matrix4).makeRotationAxis(t,r)};e.prototype.rotate=function(e,t){var r=new o.Vector3(e[0],e[1],e[2]);var n=this.rotationMatrix(t);r.applyMatrix4(n);return r};e.prototype.opticalCenter=function(e,t){var r=[-e[0],-e[1],-e[2]];var n=[-t[0],-t[1],-t[2]];return this.rotate(n,r)};e.prototype.viewingDirection=function(e){var t=[-e[0],-e[1],-e[2]];return this.rotate([0,0,1],t)};e.prototype.wrap=function(e,t,r){if(r<t){throw new Error("Invalid arguments: max must be larger than min.")}var n=r-t;while(e>r||e<t){if(e>r){e=e-n}else if(e<t){e=e+n}}return e};e.prototype.wrapAngle=function(e){return this.wrap(e,-Math.PI,Math.PI)};e.prototype.clamp=function(e,t,r){if(e<t){return t}if(e>r){return r}return e};e.prototype.angleBetweenVector2=function(e,t,r,n){var i=Math.atan2(n,r)-Math.atan2(t,e);return this.wrapAngle(i)};e.prototype.angleDifference=function(e,t){var r=t-e;return this.wrapAngle(r)};e.prototype.relativeRotationAngle=function(e,t){var r=this.rotationMatrix([-e[0],-e[1],-e[2]]);var n=this.rotationMatrix(t);var i=r.multiply(n);var o=i.elements;var a=o[0]+o[5]+o[10];var s=Math.acos(Math.max(Math.min((a-1)/2,1),-1));return s};e.prototype.angleToPlane=function(e,t){var r=(new o.Vector3).fromArray(e);var n=r.length();if(n<this._epsilon){return 0}var i=r.dot((new o.Vector3).fromArray(t));return Math.asin(i/n)};e.prototype.distanceFromLatLon=function(e,t,r,n){var i=6371e3;var o=this.degToRad(r-e);var a=this.degToRad(n-t);var s=Math.sin(o/2)*Math.sin(o/2)+Math.cos(this.degToRad(e))*Math.cos(this.degToRad(r))*Math.sin(a/2)*Math.sin(a/2);var u=2*i*Math.atan2(Math.sqrt(s),Math.sqrt(1-s));return u};return e}();r.Spatial=n;r.default=n},{three:226}],387:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var b=e("three");var n=function(){function e(e,t,r,n,i,o,a,s,u,c,h,l,p){this._orientation=this._getValue(e,1);var f=u!=null?u.width:4;var d=u!=null?u.height:3;var v=this._orientation<5;this._width=this._getValue(t,v?f:d);this._height=this._getValue(r,v?d:f);this._basicAspect=v?this._width/this._height:this._height/this._width;this._basicWidth=v?t:r;this._basicHeight=v?r:t;this._focal=this._getValue(n,1);this._scale=this._getValue(i,0);this._gpano=o!=null?o:null;this._rt=this._getRt(a,s);this._srt=this._getSrt(this._rt,this._scale);this._basicRt=this._getBasicRt(this._rt,e);this._textureScale=!!c?c:[1,1];this._ck1=!!h?h:0;this._ck2=!!l?l:0;this._cameraProjection=!!p?p:!!o?"equirectangular":"perspective";this._radialPeak=this._getRadialPeak(this._ck1,this._ck2)}Object.defineProperty(e.prototype,"ck1",{get:function(){return this._ck1},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"ck2",{get:function(){return this._ck2},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"cameraProjection",{get:function(){return this._cameraProjection},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"basicAspect",{get:function(){return this._basicAspect},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"basicHeight",{get:function(){return this._basicHeight},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"basicRt",{get:function(){return this._basicRt},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"basicWidth",{get:function(){return this._basicWidth},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"focal",{get:function(){return this._focal},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"fullPano",{get:function(){return this._gpano!=null&&this._gpano.CroppedAreaLeftPixels===0&&this._gpano.CroppedAreaTopPixels===0&&this._gpano.CroppedAreaImageWidthPixels===this._gpano.FullPanoWidthPixels&&this._gpano.CroppedAreaImageHeightPixels===this._gpano.FullPanoHeightPixels},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"gpano",{get:function(){return this._gpano},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"height",{get:function(){return this._height},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"orientation",{get:function(){return this._orientation},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"rt",{get:function(){return this._rt},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"srt",{get:function(){return this._srt},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"scale",{get:function(){return this._scale},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"hasValidScale",{get:function(){return this._scale>.01&&this._scale<50},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"radialPeak",{get:function(){return this._radialPeak},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"width",{get:function(){return this._width},enumerable:true,configurable:true});e.prototype.upVector=function(){var e=this._rt.elements;switch(this._orientation){case 1:return new b.Vector3(-e[1],-e[5],-e[9]);case 3:return new b.Vector3(e[1],e[5],e[9]);case 6:return new b.Vector3(-e[0],-e[4],-e[8]);case 8:return new b.Vector3(e[0],e[4],e[8]);default:return new b.Vector3(-e[1],-e[5],-e[9])}};e.prototype.projectorMatrix=function(){var e=this._normalizedToTextureMatrix();var t=this._focal;var r=(new b.Matrix4).set(t,0,0,0,0,t,0,0,0,0,0,0,0,0,1,0);e.multiply(r);e.multiply(this._rt);return e};e.prototype.projectBasic=function(e){var t=this.projectSfM(e);return this._sfmToBasic(t)};e.prototype.unprojectBasic=function(e,t,r){var n=this._basicToSfm(e);return this.unprojectSfM(n,t,r)};e.prototype.projectSfM=function(e){var t=new b.Vector4(e[0],e[1],e[2],1);t.applyMatrix4(this._rt);return this._bearingToSfm([t.x,t.y,t.z])};e.prototype.unprojectSfM=function(e,t,r){var n=this._sfmToBearing(e);var i=r&&!this.gpano?new b.Vector4(t*n[0]/n[2],t*n[1]/n[2],t,1):new b.Vector4(t*n[0],t*n[1],t*n[2],1);i.applyMatrix4((new b.Matrix4).getInverse(this._rt));return[i.x/i.w,i.y/i.w,i.z/i.w]};e.prototype._sfmToBearing=function(e){if(this._fullPano()){var t=e[0]*2*Math.PI;var r=-e[1]*2*Math.PI;var n=Math.cos(r)*Math.sin(t);var i=-Math.sin(r);var o=Math.cos(r)*Math.cos(t);return[n,i,o]}else if(this._gpano){var a=Math.max(this.gpano.CroppedAreaImageWidthPixels,this.gpano.CroppedAreaImageHeightPixels);var s=[e[0]*a+this.gpano.CroppedAreaImageWidthPixels/2+this.gpano.CroppedAreaLeftPixels,e[1]*a+this.gpano.CroppedAreaImageHeightPixels/2+this.gpano.CroppedAreaTopPixels];var t=2*Math.PI*(s[0]/this.gpano.FullPanoWidthPixels-.5);var r=-Math.PI*(s[1]/this.gpano.FullPanoHeightPixels-.5);var n=Math.cos(r)*Math.sin(t);var i=-Math.sin(r);var o=Math.cos(r)*Math.cos(t);return[n,i,o]}else if(this._cameraProjection==="fisheye"){var u=[e[0]/this._focal,e[1]/this._focal],c=u[0],h=u[1];var l=Math.sqrt(c*c+h*h);var p=this._distortionFromDistortedRadius(l,this._ck1,this._ck2,this._radialPeak);var f=l/p;var o=Math.cos(f);var d=Math.sin(f);var n=d*c/l;var i=d*h/l;return[n,i,o]}else{var v=[e[0]/this._focal,e[1]/this._focal],c=v[0],h=v[1];var m=Math.sqrt(c*c+h*h);var p=this._distortionFromDistortedRadius(m,this._ck1,this._ck2,this._radialPeak);var g=c/p;var y=h/p;var _=new b.Vector3(g,y,1);_.normalize();return[_.x,_.y,_.z]}};e.prototype._distortionFromDistortedRadius=function(e,t,r,n){var i=1;for(var o=0;o<10;o++){var a=e/i;if(a>n){a=n}i=1+t*Math.pow(a,2)+r*Math.pow(a,4)}return i};e.prototype._bearingToSfm=function(e){if(this._fullPano()){var t=e[0];var r=e[1];var n=e[2];var i=Math.atan2(t,n);var o=Math.atan2(-r,Math.sqrt(t*t+n*n));return[i/(2*Math.PI),-o/(2*Math.PI)]}else if(this._gpano){var t=e[0];var r=e[1];var n=e[2];var i=Math.atan2(t,n);var o=Math.atan2(-r,Math.sqrt(t*t+n*n));var a=[(i/(2*Math.PI)+.5)*this.gpano.FullPanoWidthPixels,(-o/Math.PI+.5)*this.gpano.FullPanoHeightPixels];var 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]}else if(this._cameraProjection==="fisheye"){if(e[2]>0){var t=e[0],r=e[1],n=e[2];var u=Math.sqrt(t*t+r*r);var c=Math.atan2(u,n);if(c>this._radialPeak){c=this._radialPeak}var h=1+Math.pow(c,2)*(this._ck1+Math.pow(c,2)*this._ck2);var l=this._focal*h*c/u;return[l*t,l*r]}else{return[e[0]<0?Number.NEGATIVE_INFINITY:Number.POSITIVE_INFINITY,e[1]<0?Number.NEGATIVE_INFINITY:Number.POSITIVE_INFINITY]}}else{if(e[2]>0){var p=[e[0]/e[2],e[1]/e[2]],f=p[0],d=p[1];var v=f*f+d*d;var m=Math.pow(this._radialPeak,2);if(v>m){v=m}var g=1+this._ck1*v+this._ck2*Math.pow(v,2);return[this._focal*g*f,this._focal*g*d]}else{return[e[0]<0?Number.NEGATIVE_INFINITY:Number.POSITIVE_INFINITY,e[1]<0?Number.NEGATIVE_INFINITY:Number.POSITIVE_INFINITY]}}};e.prototype._basicToSfm=function(e){var t;var r;switch(this._orientation){case 1:t=e[0];r=e[1];break;case 3:t=1-e[0];r=1-e[1];break;case 6:t=e[1];r=1-e[0];break;case 8:t=1-e[1];r=e[0];break;default:t=e[0];r=e[1];break}var n=this._width;var i=this._height;var o=Math.max(n,i);var a=t*n/o-n/o/2;var s=r*i/o-i/o/2;return[a,s]};e.prototype._sfmToBasic=function(e){var t=this._width;var r=this._height;var n=Math.max(t,r);var i=(e[0]+t/n/2)/t*n;var o=(e[1]+r/n/2)/r*n;var a;var s;switch(this._orientation){case 1:a=i;s=o;break;case 3:a=1-i;s=1-o;break;case 6:a=1-o;s=i;break;case 8:a=o;s=1-i;break;default:a=i;s=o;break}return[a,s]};e.prototype._fullPano=function(){return this.gpano!=null&&this.gpano.CroppedAreaLeftPixels===0&&this.gpano.CroppedAreaTopPixels===0&&this.gpano.CroppedAreaImageWidthPixels===this.gpano.FullPanoWidthPixels&&this.gpano.CroppedAreaImageHeightPixels===this.gpano.FullPanoHeightPixels};e.prototype._getValue=function(e,t){return e!=null&&e>0?e:t};e.prototype._getRt=function(e,t){var r=new b.Vector3(e[0],e[1],e[2]);var n=r.length();if(n>0){r.normalize()}var i=new b.Matrix4;i.makeRotationAxis(r,n);i.setPosition(new b.Vector3(t[0],t[1],t[2]));return i};e.prototype._getSrt=function(e,t){var r=e.clone();var n=r.elements;n[12]=t*n[12];n[13]=t*n[13];n[14]=t*n[14];r.scale(new b.Vector3(t,t,t));return r};e.prototype._getBasicRt=function(e,t){var r=new b.Vector3(0,0,1);var n=0;switch(t){case 3:n=Math.PI;break;case 6:n=Math.PI/2;break;case 8:n=3*Math.PI/2;break;default:break}return(new b.Matrix4).makeRotationAxis(r,n).multiply(e)};e.prototype._getRadialPeak=function(e,t){var r=5*t;var n=3*e;var i=1;var o=Math.pow(n,2)-4*r*i;if(o<0){return undefined}var a=(-n-Math.sqrt(o))/2/r;var s=(-n+Math.sqrt(o))/2/r;var u=Math.min(a,s);var c=Math.max(a,s);return u>0?Math.sqrt(u):c>0?Math.sqrt(c):undefined};e.prototype._normalizedToTextureMatrix=function(){var e=Math.max(this._width,this._height);var t=this._orientation<5?this._textureScale[0]:this._textureScale[1];var r=this._orientation<5?this._textureScale[1]:this._textureScale[0];var n=e/this._width*t;var i=e/this._height*r;switch(this._orientation){case 1:return(new b.Matrix4).set(n,0,0,.5,0,-i,0,.5,0,0,1,0,0,0,0,1);case 3:return(new b.Matrix4).set(-n,0,0,.5,0,i,0,.5,0,0,1,0,0,0,0,1);case 6:return(new b.Matrix4).set(0,-i,0,.5,-n,0,0,.5,0,0,1,0,0,0,0,1);case 8:return(new b.Matrix4).set(0,i,0,.5,n,0,0,.5,0,0,1,0,0,0,0,1);default:return(new b.Matrix4).set(n,0,0,.5,0,-i,0,.5,0,0,1,0,0,0,0,1)}};return e}();r.Transform=n},{three:226}],388:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var a=e("three");var n=function(){function e(){this._unprojectDepth=200}e.prototype.basicToCanvas=function(e,t,r,n,i){var o=n.unprojectBasic([e,t],this._unprojectDepth);var a=this.projectToCanvas(o,r,i);return a};e.prototype.basicToCanvasSafe=function(e,t,r,n,i){var o=this.basicToViewportSafe(e,t,n,i);if(o===null){return null}var a=this.viewportToCanvas(o[0],o[1],r);return a};e.prototype.basicToViewport=function(e,t,r,n){var i=r.unprojectBasic([e,t],this._unprojectDepth);var o=this.projectToViewport(i,n);return o};e.prototype.basicToViewportSafe=function(e,t,r,n){var i=r.unprojectBasic([e,t],this._unprojectDepth);var o=this.worldToCamera(i,n);if(o[2]>0){return null}var a=this.projectToViewport(i,n);return a};e.prototype.cameraToViewport=function(e,t){var r=(new a.Vector3).fromArray(e).applyMatrix4(t.projectionMatrix);return[r.x,r.y]};e.prototype.canvasPosition=function(e,t){var r=t.getBoundingClientRect();var n=e.clientX-r.left-t.clientLeft;var i=e.clientY-r.top-t.clientTop;return[n,i]};e.prototype.canvasToBasic=function(e,t,r,n,i){var o=this.unprojectFromCanvas(e,t,r,i).toArray();var a=n.projectBasic(o);return a};e.prototype.canvasToViewport=function(e,t,r){var n=this.containerToCanvas(r),i=n[0],o=n[1];var a=2*e/i-1;var s=1-2*t/o;return[a,s]};e.prototype.containerToCanvas=function(e){return[e.offsetWidth,e.offsetHeight]};e.prototype.getBasicDistances=function(e,t){var r=this.viewportToBasic(-1,1,e,t);var n=this.viewportToBasic(1,1,e,t);var i=this.viewportToBasic(1,-1,e,t);var o=this.viewportToBasic(-1,-1,e,t);var a=0;var s=0;var u=0;var c=0;if(r[1]<0&&n[1]<0){a=r[1]>n[1]?-r[1]:-n[1]}if(n[0]>1&&i[0]>1){s=n[0]<i[0]?n[0]-1:i[0]-1}if(i[1]>1&&o[1]>1){u=i[1]<o[1]?i[1]-1:o[1]-1}if(o[0]<0&&r[0]<0){c=o[0]>r[0]?-o[0]:-r[0]}return[a,s,u,c]};e.prototype.getPixelDistances=function(e,t,r){var n=this.viewportToBasic(-1,1,t,r);var i=this.viewportToBasic(1,1,t,r);var o=this.viewportToBasic(1,-1,t,r);var a=this.viewportToBasic(-1,-1,t,r);var s=0;var u=0;var c=0;var h=0;var l=this.containerToCanvas(e),p=l[0],f=l[1];if(n[1]<0&&i[1]<0){var d=n[1]>i[1]?n[0]:i[0];var v=this.basicToCanvas(d,0,e,t,r);s=v[1]>0?v[1]:0}if(i[0]>1&&o[0]>1){var m=i[0]<o[0]?i[1]:o[1];var v=this.basicToCanvas(1,m,e,t,r);u=v[0]<p?p-v[0]:0}if(o[1]>1&&a[1]>1){var d=o[1]<a[1]?o[0]:a[0];var v=this.basicToCanvas(d,1,e,t,r);c=v[1]<f?f-v[1]:0}if(a[0]<0&&n[0]<0){var m=a[0]>n[0]?a[1]:n[1];var v=this.basicToCanvas(0,m,e,t,r);h=v[0]>0?v[0]:0}return[s,u,c,h]};e.prototype.insideElement=function(e,t){var r=t.getBoundingClientRect();var n=r.left+t.clientLeft;var i=n+t.clientWidth;var o=r.top+t.clientTop;var a=o+t.clientHeight;return e.clientX>n&&e.clientX<i&&e.clientY>o&&e.clientY<a};e.prototype.projectToCanvas=function(e,t,r){var n=this.projectToViewport(e,r);var i=this.viewportToCanvas(n[0],n[1],t);return i};e.prototype.projectToViewport=function(e,t){var r=new a.Vector3(e[0],e[1],e[2]).project(t);return[r.x,r.y]};e.prototype.unprojectFromCanvas=function(e,t,r,n){var i=this.canvasToViewport(e,t,r);var o=this.unprojectFromViewport(i[0],i[1],n);return o};e.prototype.unprojectFromViewport=function(e,t,r){var n=new a.Vector3(e,t,1).unproject(r);return n};e.prototype.viewportToBasic=function(e,t,r,n){var i=new a.Vector3(e,t,1).unproject(n).toArray();var o=r.projectBasic(i);return o};e.prototype.viewportToCanvas=function(e,t,r){var n=this.containerToCanvas(r),i=n[0],o=n[1];var a=i*(e+1)/2;var s=-o*(t-1)/2;return[a,s]};e.prototype.worldToCamera=function(e,t){var r=new a.Vector3(e[0],e[1],e[2]).applyMatrix4(t.matrixWorldInverse);return r.toArray()};return e}();r.ViewportCoords=n;r.default=n},{three:226}],389:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=function(){function e(){}e.prototype.createFilter=function(e){return new Function("node","return "+this._compile(e)+";")};e.prototype._compile=function(e){if(e==null||e.length<=1){return"true"}var t=e[0];var r=t==="=="?this._compileComparisonOp("===",e[1],e[2],false):t==="!="?this._compileComparisonOp("!==",e[1],e[2],false):t===">"||t===">="||t==="<"||t==="<="?this._compileComparisonOp(t,e[1],e[2],true):t==="in"?this._compileInOp(e[1],e.slice(2)):t==="!in"?this._compileNegation(this._compileInOp(e[1],e.slice(2))):t==="all"?this._compileLogicalOp(e.slice(1),"&&"):"true";return"("+r+")"};e.prototype._compare=function(e,t){return e<t?-1:e>t?1:0};e.prototype._compileComparisonOp=function(e,t,r,n){var i=this._compilePropertyReference(t);var o=JSON.stringify(r);return(n?"typeof "+i+"===typeof "+o+"&&":"")+i+e+o};e.prototype._compileInOp=function(e,t){var r=this._compare;var n=JSON.stringify(t.sort(r));var i=this._compilePropertyReference(e);return n+".indexOf("+i+")!==-1"};e.prototype._compileLogicalOp=function(e,t){var r=this._compile.bind(this);return e.map(r).join(t)};e.prototype._compileNegation=function(e){return"!("+e+")"};e.prototype._compilePropertyReference=function(e){return"node["+JSON.stringify(e)+"]"};return e}();r.FilterCreator=n;r.default=n},{}],390:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var d=e("rxjs");var v=e("rxjs/operators");var a=e("rbush");var s=e("../Edge");var f=e("../Error");var p=e("../Graph");var n=function(){function e(e,t,r,n,i,o){this._apiV3=e;this._cachedNodes={};this._cachedNodeTiles={};this._cachedSequenceNodes={};this._cachedSpatialEdges={};this._cachedTiles={};this._cachingFill$={};this._cachingFull$={};this._cachingSequenceNodes$={};this._cachingSequences$={};this._cachingSpatialArea$={};this._cachingTiles$={};this._changed$=new d.Subject;this._defaultAlt=2;this._edgeCalculator=n!=null?n:new s.EdgeCalculator;this._filterCreator=i!=null?i:new p.FilterCreator;this._filter=this._filterCreator.createFilter(undefined);this._graphCalculator=r!=null?r:new p.GraphCalculator;this._configuration=o!=null?o:{maxSequences:50,maxUnusedNodes:100,maxUnusedPreStoredNodes:30,maxUnusedTiles:20};this._nodes={};this._nodeIndex=t!=null?t:a(16,[".lat",".lon",".lat",".lon"]);this._nodeIndexTiles={};this._nodeToTile={};this._preStored={};this._requiredNodeTiles={};this._requiredSpatialArea={};this._sequences={};this._tilePrecision=7;this._tileThreshold=20}Object.defineProperty(e.prototype,"changed$",{get:function(){return this._changed$},enumerable:true,configurable:true});e.prototype.cacheBoundingBox$=function(l,p){var f=this;var e=this._graphCalculator.encodeHsFromBoundingBox(l,p).filter(function(e){return!(e in f._cachedTiles)}).map(function(e){return e in f._cachingTiles$?f._cachingTiles$[e]:f._cacheTile$(e)});if(e.length===0){e.push(d.of(this))}return d.from(e).pipe(v.mergeAll(),v.last(),v.mergeMap(function(e){var t=f._nodeIndex.search({maxX:p.lat,maxY:p.lon,minX:l.lat,minY:l.lon}).map(function(e){return e.node});var r=[];var n=[];for(var i=0,o=t;i<o.length;i++){var a=o[i];if(a.full){r.push(a)}else{n.push(a.key)}}var s=[];var u=200;while(n.length>0){s.push(n.splice(0,u))}var c=d.of(r);var h=s.map(function(e){return f._apiV3.imageByKeyFill$(e).pipe(v.map(function(e){var t=[];for(var r in e){if(!e.hasOwnProperty(r)){continue}if(f.hasNode(r)){var n=f.getNode(r);if(!n.full){f._makeFull(n,e[r])}t.push(n)}}return t}))});return d.merge(c,d.from(h).pipe(v.mergeAll()))}),v.reduce(function(e,t){return e.concat(t)}))};e.prototype.cacheFill$=function(t){var r=this;if(t in this._cachingFull$){throw new f.GraphMapillaryError("Cannot fill node while caching full ("+t+").")}if(!this.hasNode(t)){throw new f.GraphMapillaryError("Cannot fill node that does not exist in graph ("+t+").")}if(t in this._cachingFill$){return this._cachingFill$[t]}var n=this.getNode(t);if(n.full){throw new f.GraphMapillaryError("Cannot fill node that is already full ("+t+").")}this._cachingFill$[t]=this._apiV3.imageByKeyFill$([t]).pipe(v.tap(function(e){if(!n.full){r._makeFull(n,e[t])}delete r._cachingFill$[t]}),v.map(function(e){return r}),v.finalize(function(){if(t in r._cachingFill$){delete r._cachingFill$[t]}r._changed$.next(r)}),v.publish(),v.refCount());return this._cachingFill$[t]};e.prototype.cacheFull$=function(i){var o=this;if(i in this._cachingFull$){return this._cachingFull$[i]}if(this.hasNode(i)){throw new f.GraphMapillaryError("Cannot cache full node that already exist in graph ("+i+").")}this._cachingFull$[i]=this._apiV3.imageByKeyFull$([i]).pipe(v.tap(function(e){var t=e[i];if(o.hasNode(i)){var r=o.getNode(i);if(!r.full){o._makeFull(r,t)}}else{if(t.sequence_key==null){throw new f.GraphMapillaryError("Node has no sequence key ("+i+").")}var r=new p.Node(t);o._makeFull(r,t);var n=o._graphCalculator.encodeH(r.originalLatLon,o._tilePrecision);o._preStore(n,r);o._setNode(r);delete o._cachingFull$[i]}}),v.map(function(e){return o}),v.finalize(function(){if(i in o._cachingFull$){delete o._cachingFull$[i]}o._changed$.next(o)}),v.publish(),v.refCount());return this._cachingFull$[i]};e.prototype.cacheNodeSequence$=function(e){if(!this.hasNode(e)){throw new f.GraphMapillaryError("Cannot cache sequence edges of node that does not exist in graph ("+e+").")}var t=this.getNode(e);if(t.sequenceKey in this._sequences){throw new f.GraphMapillaryError("Sequence already cached ("+e+"), ("+t.sequenceKey+").")}return this._cacheSequence$(t.sequenceKey)};e.prototype.cacheSequence$=function(e){if(e in this._sequences){throw new f.GraphMapillaryError("Sequence already cached ("+e+")")}return this._cacheSequence$(e)};e.prototype.cacheSequenceEdges=function(e){var t=this.getNode(e);if(!(t.sequenceKey in this._sequences)){throw new f.GraphMapillaryError("Sequence is not cached ("+e+"), ("+t.sequenceKey+")")}var r=this._sequences[t.sequenceKey].sequence;var n=this._edgeCalculator.computeSequenceEdges(t,r);t.cacheSequenceEdges(n)};e.prototype.cacheSequenceNodes$=function(e,t){var o=this;if(!this.hasSequence(e)){throw new f.GraphMapillaryError("Cannot cache sequence nodes of sequence that does not exist in graph ("+e+").")}if(this.hasSequenceNodes(e)){throw new f.GraphMapillaryError("Sequence nodes already cached ("+e+").")}var r=this.getSequence(e);if(r.key in this._cachingSequenceNodes$){return this._cachingSequenceNodes$[r.key]}var n=[];var i=r.keys.slice();var a=50;if(!!t&&i.length>a){var s=i.indexOf(t);var u=Math.max(0,Math.min(s-a/2,i.length-a));n.push(i.splice(u,a))}var c=200;while(i.length>0){n.push(i.splice(0,c))}var h=n.length;var l=d.from(n).pipe(v.mergeMap(function(e){return o._apiV3.imageByKeyFull$(e).pipe(v.tap(function(e){for(var t in e){if(!e.hasOwnProperty(t)){continue}var r=e[t];if(o.hasNode(t)){var n=o.getNode(r.key);if(!n.full){o._makeFull(n,r)}}else{if(r.sequence_key==null){console.warn("Sequence missing, discarding node ("+r.key+")")}var n=new p.Node(r);o._makeFull(n,r);var i=o._graphCalculator.encodeH(n.originalLatLon,o._tilePrecision);o._preStore(i,n);o._setNode(n)}}h--}),v.map(function(e){return o}))},6),v.last(),v.finalize(function(){delete o._cachingSequenceNodes$[r.key];if(h===0){o._cachedSequenceNodes[r.key]=true}}),v.publish(),v.refCount());this._cachingSequenceNodes$[r.key]=l;return l};e.prototype.cacheSpatialArea$=function(o){var a=this;if(!this.hasNode(o)){throw new f.GraphMapillaryError("Cannot cache spatial area of node that does not exist in graph ("+o+").")}if(o in this._cachedSpatialEdges){throw new f.GraphMapillaryError("Node already spatially cached ("+o+").")}if(!(o in this._requiredSpatialArea)){throw new f.GraphMapillaryError("Spatial area not determined ("+o+").")}var s=this._requiredSpatialArea[o];if(Object.keys(s.cacheNodes).length===0){throw new f.GraphMapillaryError("Spatial nodes already cached ("+o+").")}if(o in this._cachingSpatialArea$){return this._cachingSpatialArea$[o]}var e=[];while(s.cacheKeys.length>0){e.push(s.cacheKeys.splice(0,200))}var u=e.length;var t=[];var r=function(i){var e=n._apiV3.imageByKeyFill$(i).pipe(v.tap(function(e){for(var t in e){if(!e.hasOwnProperty(t)){continue}var r=s.cacheNodes[t];if(r.full){delete s.cacheNodes[t];continue}var n=e[t];a._makeFull(r,n);delete s.cacheNodes[t]}if(--u===0){delete a._cachingSpatialArea$[o]}}),v.map(function(e){return a}),v.catchError(function(e){for(var t=0,r=i;t<r.length;t++){var n=r[t];if(n in s.all){delete s.all[n]}if(n in s.cacheNodes){delete s.cacheNodes[n]}}if(--u===0){delete a._cachingSpatialArea$[o]}throw e}),v.finalize(function(){if(Object.keys(s.cacheNodes).length===0){a._changed$.next(a)}}),v.publish(),v.refCount());t.push(e)};var n=this;for(var i=0,c=e;i<c.length;i++){var h=c[i];r(h)}this._cachingSpatialArea$[o]=t;return t};e.prototype.cacheSpatialEdges=function(e){if(e in this._cachedSpatialEdges){throw new f.GraphMapillaryError("Spatial edges already cached ("+e+").")}var t=this.getNode(e);var r=this._sequences[t.sequenceKey].sequence;var n=[];var i=r.findPrevKey(t.key);if(i!=null){n.push(i)}var o=r.findNextKey(t.key);if(o!=null){n.push(o)}var a=this._requiredSpatialArea[e].all;var s=[];var u=this._filter;for(var c in a){if(!a.hasOwnProperty(c)){continue}var h=a[c];if(u(h)){s.push(h)}}var l=this._edgeCalculator.getPotentialEdges(t,s,n);var p=this._edgeCalculator.computeStepEdges(t,l,i,o);p=p.concat(this._edgeCalculator.computeTurnEdges(t,l));p=p.concat(this._edgeCalculator.computePanoEdges(t,l));p=p.concat(this._edgeCalculator.computePerspectiveToPanoEdges(t,l));p=p.concat(this._edgeCalculator.computeSimilarEdges(t,l));t.cacheSpatialEdges(p);this._cachedSpatialEdges[e]=t;delete this._requiredSpatialArea[e];delete this._cachedNodeTiles[e]};e.prototype.cacheTiles$=function(n){var i=this;if(n in this._cachedNodeTiles){throw new f.GraphMapillaryError("Tiles already cached ("+n+").")}if(n in this._cachedSpatialEdges){throw new f.GraphMapillaryError("Spatial edges already cached so tiles considered cached ("+n+").")}if(!(n in this._requiredNodeTiles)){throw new f.GraphMapillaryError("Tiles have not been determined ("+n+").")}var o=this._requiredNodeTiles[n];if(o.cache.length===0&&o.caching.length===0){throw new f.GraphMapillaryError("Tiles already cached ("+n+").")}if(!this.hasNode(n)){throw new f.GraphMapillaryError("Cannot cache tiles of node that does not exist in graph ("+n+").")}var e=o.cache.slice();o.caching=this._requiredNodeTiles[n].caching.concat(e);o.cache=[];var t=[];var r=function(r){var e=r in a._cachingTiles$?a._cachingTiles$[r]:a._cacheTile$(r);t.push(e.pipe(v.tap(function(e){var t=o.caching.indexOf(r);if(t>-1){o.caching.splice(t,1)}if(o.caching.length===0&&o.cache.length===0){delete i._requiredNodeTiles[n];i._cachedNodeTiles[n]=true}}),v.catchError(function(e){var t=o.caching.indexOf(r);if(t>-1){o.caching.splice(t,1)}if(o.caching.length===0&&o.cache.length===0){delete i._requiredNodeTiles[n];i._cachedNodeTiles[n]=true}throw e}),v.finalize(function(){i._changed$.next(i)}),v.publish(),v.refCount()))};var a=this;for(var s=0,u=o.caching;s<u.length;s++){var c=u[s];r(c)}return t};e.prototype.initializeCache=function(e){if(e in this._cachedNodes){throw new f.GraphMapillaryError("Node already in cache ("+e+").")}var t=this.getNode(e);t.initializeCache(new p.NodeCache);var r=(new Date).getTime();this._cachedNodes[e]={accessed:r,node:t};this._updateCachedTileAccess(e,r)};e.prototype.isCachingFill=function(e){return e in this._cachingFill$};e.prototype.isCachingFull=function(e){return e in this._cachingFull$};e.prototype.isCachingNodeSequence=function(e){var t=this.getNode(e);return t.sequenceKey in this._cachingSequences$};e.prototype.isCachingSequence=function(e){return e in this._cachingSequences$};e.prototype.isCachingSequenceNodes=function(e){return e in this._cachingSequenceNodes$};e.prototype.isCachingTiles=function(e){return e in this._requiredNodeTiles&&this._requiredNodeTiles[e].cache.length===0&&this._requiredNodeTiles[e].caching.length>0};e.prototype.hasInitializedCache=function(e){return e in this._cachedNodes};e.prototype.hasNode=function(e){var t=(new Date).getTime();this._updateCachedNodeAccess(e,t);this._updateCachedTileAccess(e,t);return e in this._nodes};e.prototype.hasNodeSequence=function(e){var t=this.getNode(e);var r=t.sequenceKey;var n=r in this._sequences;if(n){this._sequences[r].accessed=(new Date).getTime()}return n};e.prototype.hasSequence=function(e){var t=e in this._sequences;if(t){this._sequences[e].accessed=(new Date).getTime()}return t};e.prototype.hasSequenceNodes=function(e){return e in this._cachedSequenceNodes};e.prototype.hasSpatialArea=function(e){if(!this.hasNode(e)){throw new f.GraphMapillaryError("Spatial area nodes cannot be determined if node not in graph ("+e+").")}if(e in this._cachedSpatialEdges){return true}if(e in this._requiredSpatialArea){return Object.keys(this._requiredSpatialArea[e].cacheNodes).length===0}var t=this.getNode(e);var r=this._graphCalculator.boundingBoxCorners(t.latLon,this._tileThreshold);var n=this._nodeIndex.search({maxX:r[1].lat,maxY:r[1].lon,minX:r[0].lat,minY:r[0].lon});var i={all:{},cacheKeys:[],cacheNodes:{}};for(var o=0,a=n;o<a.length;o++){var s=a[o];i.all[s.node.key]=s.node;if(!s.node.full){i.cacheKeys.push(s.node.key);i.cacheNodes[s.node.key]=s.node}}this._requiredSpatialArea[e]=i;return i.cacheKeys.length===0};e.prototype.hasTiles=function(e){var t=this;if(e in this._cachedNodeTiles){return true}if(e in this._cachedSpatialEdges){return true}if(!this.hasNode(e)){throw new f.GraphMapillaryError("Node does not exist in graph ("+e+").")}var r={cache:[],caching:[]};if(!(e in this._requiredNodeTiles)){var n=this.getNode(e);r.cache=this._graphCalculator.encodeHs(n.latLon,this._tilePrecision,this._tileThreshold).filter(function(e){return!(e in t._cachedTiles)});if(r.cache.length>0){this._requiredNodeTiles[e]=r}}else{r=this._requiredNodeTiles[e]}return r.cache.length===0&&r.caching.length===0};e.prototype.getNode=function(e){var t=(new Date).getTime();this._updateCachedNodeAccess(e,t);this._updateCachedTileAccess(e,t);return this._nodes[e]};e.prototype.getSequence=function(e){var t=this._sequences[e];t.accessed=(new Date).getTime();return t.sequence};e.prototype.resetSpatialEdges=function(){var e=Object.keys(this._cachedSpatialEdges);for(var t=0,r=e;t<r.length;t++){var n=r[t];var i=this._cachedSpatialEdges[n];i.resetSpatialEdges();delete this._cachedSpatialEdges[n]}};e.prototype.reset=function(e){var t=[];for(var r=0,n=e;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();t.push(o)}for(var a=0,s=Object.keys(this._cachedNodes);a<s.length;a++){var u=s[a];if(e.indexOf(u)!==-1){continue}this._cachedNodes[u].node.dispose();delete this._cachedNodes[u]}this._cachedNodeTiles={};this._cachedSpatialEdges={};this._cachedTiles={};this._cachingFill$={};this._cachingFull$={};this._cachingSequences$={};this._cachingSpatialArea$={};this._cachingTiles$={};this._nodes={};this._nodeToTile={};this._preStored={};for(var c=0,h=t;c<h.length;c++){var o=h[c];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()};e.prototype.setFilter=function(e){this._filter=this._filterCreator.createFilter(e)};e.prototype.uncache=function(e,t){var r={};this._addNewKeys(r,this._cachingFull$);this._addNewKeys(r,this._cachingFill$);this._addNewKeys(r,this._cachingSpatialArea$);this._addNewKeys(r,this._requiredNodeTiles);this._addNewKeys(r,this._requiredSpatialArea);for(var n=0,i=e;n<i.length;n++){var o=i[n];if(o in r){continue}r[o]=true}var a={};for(var o in r){if(!r.hasOwnProperty(o)){continue}var s=this._nodes[o];var u=this._graphCalculator.encodeHs(s.latLon);for(var c=0,h=u;c<h.length;c++){var l=h[c];if(!(l in a)){a[l]=true}}}var p=[];for(var f in this._cachedTiles){if(!this._cachedTiles.hasOwnProperty(f)||f in a){continue}p.push([f,this._cachedTiles[f]])}var d=p.sort(function(e,t){return t[1].accessed-e[1].accessed}).slice(this._configuration.maxUnusedTiles).map(function(e){return e[0]});for(var v=0,m=d;v<m.length;v++){var g=m[v];this._uncacheTile(g,t)}var y=[];var _=[];for(var f in this._preStored){if(!this._preStored.hasOwnProperty(f)||f in this._cachingTiles$){continue}var b=this._preStored[f];for(var o in b){if(!b.hasOwnProperty(o)||o in r){continue}if(b[o].sequenceKey===t){continue}if(o in this._cachedNodes){y.push([this._cachedNodes[o],f])}else{_.push([o,f])}}}var x=y.sort(function(e,t){var r=e[0],n=e[1];var i=t[0],o=t[1];return i.accessed-r.accessed}).slice(this._configuration.maxUnusedPreStoredNodes).map(function(e){var t=e[0],r=e[1];return[t.node.key,r]});this._uncachePreStored(_);this._uncachePreStored(x);var w=[];for(var o in this._cachedNodes){if(!this._cachedNodes.hasOwnProperty(o)||o in r){continue}w.push(this._cachedNodes[o])}var S=w.sort(function(e,t){return t.accessed-e.accessed}).slice(this._configuration.maxUnusedNodes);for(var M=0,E=S;M<E.length;M++){var C=E[M];C.node.uncache();var o=C.node.key;delete this._cachedNodes[o];if(o in this._cachedNodeTiles){delete this._cachedNodeTiles[o]}if(o in this._cachedSpatialEdges){delete this._cachedSpatialEdges[o]}}var T=[];for(var O in this._sequences){if(!this._sequences.hasOwnProperty(O)||O in this._cachingSequences$||O===t){continue}T.push(this._sequences[O])}var P=T.sort(function(e,t){return t.accessed-e.accessed}).slice(this._configuration.maxSequences);for(var A=0,j=P;A<j.length;A++){var R=j[A];var O=R.sequence.key;delete this._sequences[O];if(O in this._cachedSequenceNodes){delete this._cachedSequenceNodes[O]}R.sequence.dispose()}};e.prototype._addNewKeys=function(e,t){for(var r in t){if(!t.hasOwnProperty(r)||!this.hasNode(r)){continue}if(!(r in e)){e[r]=true}}};e.prototype._cacheSequence$=function(t){var r=this;if(t in this._cachingSequences$){return this._cachingSequences$[t]}this._cachingSequences$[t]=this._apiV3.sequenceByKey$([t]).pipe(v.tap(function(e){if(!(t in r._sequences)){r._sequences[t]={accessed:(new Date).getTime(),sequence:new p.Sequence(e[t])}}delete r._cachingSequences$[t]}),v.map(function(e){return r}),v.finalize(function(){if(t in r._cachingSequences$){delete r._cachingSequences$[t]}r._changed$.next(r)}),v.publish(),v.refCount());return this._cachingSequences$[t]};e.prototype._cacheTile$=function(h){var l=this;this._cachingTiles$[h]=this._apiV3.imagesByH$([h]).pipe(v.tap(function(e){var t=e[h];if(h in l._cachedTiles){return}l._nodeIndexTiles[h]=[];l._cachedTiles[h]={accessed:(new Date).getTime(),nodes:[]};var r=l._cachedTiles[h].nodes;var n=l._removeFromPreStore(h);for(var i in t){if(!t.hasOwnProperty(i)){continue}var o=t[i];if(o==null){break}if(o.sequence_key==null){console.warn("Sequence missing, discarding node ("+o.key+")");continue}if(n!=null&&o.key in n){var a=n[o.key];delete n[o.key];r.push(a);var s={lat:a.latLon.lat,lon:a.latLon.lon,node:a};l._nodeIndex.insert(s);l._nodeIndexTiles[h].push(s);l._nodeToTile[a.key]=h;continue}var u=new p.Node(o);r.push(u);var c={lat:u.latLon.lat,lon:u.latLon.lon,node:u};l._nodeIndex.insert(c);l._nodeIndexTiles[h].push(c);l._nodeToTile[u.key]=h;l._setNode(u)}delete l._cachingTiles$[h]}),v.map(function(e){return l}),v.catchError(function(e){delete l._cachingTiles$[h];throw e}),v.publish(),v.refCount());return this._cachingTiles$[h]};e.prototype._makeFull=function(e,t){if(t.calt==null){t.calt=this._defaultAlt}if(t.c_rotation==null){t.c_rotation=this._graphCalculator.rotationFromCompass(t.ca,t.orientation)}e.makeFull(t)};e.prototype._preStore=function(e,t){if(!(e in this._preStored)){this._preStored[e]={}}this._preStored[e][t.key]=t};e.prototype._removeFromPreStore=function(e){var t=null;if(e in this._preStored){t=this._preStored[e];delete this._preStored[e]}return t};e.prototype._setNode=function(e){var t=e.key;if(this.hasNode(t)){throw new f.GraphMapillaryError("Node already exist ("+t+").")}this._nodes[t]=e};e.prototype._uncacheTile=function(e,t){for(var r=0,n=this._cachedTiles[e].nodes;r<n.length;r++){var i=n[r];var o=i.key;delete this._nodeToTile[o];if(o in this._cachedNodes){delete this._cachedNodes[o]}if(o in this._cachedNodeTiles){delete this._cachedNodeTiles[o]}if(o in this._cachedSpatialEdges){delete this._cachedSpatialEdges[o]}if(i.sequenceKey===t){this._preStore(e,i);i.uncache()}else{delete this._nodes[o];if(i.sequenceKey in this._cachedSequenceNodes){delete this._cachedSequenceNodes[i.sequenceKey]}i.dispose()}}for(var a=0,s=this._nodeIndexTiles[e];a<s.length;a++){var u=s[a];this._nodeIndex.remove(u)}delete this._nodeIndexTiles[e];delete this._cachedTiles[e]};e.prototype._uncachePreStored=function(e){var t={};for(var r=0,n=e;r<n.length;r++){var i=n[r],o=i[0],a=i[1];if(o in this._nodes){delete this._nodes[o]}if(o in this._cachedNodes){delete this._cachedNodes[o]}var s=this._preStored[a][o];if(s.sequenceKey in this._cachedSequenceNodes){delete this._cachedSequenceNodes[s.sequenceKey]}delete this._preStored[a][o];s.dispose();t[a]=true}for(var a in t){if(!t.hasOwnProperty(a)){continue}if(Object.keys(this._preStored[a]).length===0){delete this._preStored[a]}}};e.prototype._updateCachedTileAccess=function(e,t){if(e in this._nodeToTile){this._cachedTiles[this._nodeToTile[e]].accessed=t}};e.prototype._updateCachedNodeAccess=function(e,t){if(e in this._cachedNodes){this._cachedNodes[e].accessed=t}};return e}();r.Graph=n;r.default=n},{"../Edge":276,"../Error":277,"../Graph":279,rbush:26,rxjs:27,"rxjs/operators":225}],391:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var b=e("latlon-geohash");var c=e("three");var s=e("../Error");var n=e("../Geo");var i=function(){function e(e){this._geoCoords=e!=null?e:new n.GeoCoords}e.prototype.encodeH=function(e,t){if(t===void 0){t=7}return b.encode(e.lat,e.lon,t)};e.prototype.encodeHs=function(e,t,r){if(t===void 0){t=7}if(r===void 0){r=20}var n=b.encode(e.lat,e.lon,t);var i=b.bounds(n);var o=i.ne;var a=i.sw;var s=b.neighbours(n);var u=[0,0,0];var c=this._geoCoords.geodeticToEnu(o.lat,o.lon,0,a.lat,a.lon,0);var h=this._geoCoords.geodeticToEnu(e.lat,e.lon,0,a.lat,a.lon,0);var l=h[0]-u[0];var p=c[0]-h[0];var f=h[1]-u[1];var d=c[1]-h[1];var v=l<r;var m=p<r;var g=f<r;var y=d<r;var _=[n];if(y){_.push(s.n)}if(y&&v){_.push(s.nw)}if(v){_.push(s.w)}if(v&&g){_.push(s.sw)}if(g){_.push(s.s)}if(g&&m){_.push(s.se)}if(m){_.push(s.e)}if(m&&y){_.push(s.ne)}return _};e.prototype.encodeHsFromBoundingBox=function(e,t,r){if(r===void 0){r=7}if(t.lat<=e.lat||t.lon<=e.lon){throw new s.GraphMapillaryError("North east needs to be top right of south west")}var n=(e.lat+t.lat)/2;var i=(e.lon+t.lon)/2;var o=this._geoCoords.geodeticToEnu(t.lat,t.lon,0,n,i,0);var a=Math.max(o[0],o[1]);return this.encodeHs({lat:n,lon:i},r,a)};e.prototype.boundingBoxCorners=function(e,t){var r=this._geoCoords.enuToGeodetic(-t,-t,0,e.lat,e.lon,0);var n=this._geoCoords.enuToGeodetic(t,t,0,e.lat,e.lon,0);return[{lat:r[0],lon:r[1]},{lat:n[0],lon:n[1]}]};e.prototype.rotationFromCompass=function(e,t){var r=0;var n=0;var i=0;switch(t){case 1:r=Math.PI/2;break;case 3:r=-Math.PI/2;i=Math.PI;break;case 6:n=-Math.PI/2;i=-Math.PI/2;break;case 8:n=Math.PI/2;i=Math.PI/2;break;default:break}var o=(new c.Matrix4).makeRotationZ(i);var a=new c.Euler(r,n,e*Math.PI/180,"XYZ");var s=(new c.Matrix4).makeRotationFromEuler(a);var u=(new c.Vector4).setAxisAngleFromRotationMatrix(s.multiply(o));return u.multiplyScalar(u.w).toArray().slice(0,3)};return e}();r.GraphCalculator=i;r.default=i},{"../Error":277,"../Geo":278,"latlon-geohash":21,three:226}],392:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n;(function(e){e[e["Sequence"]=0]="Sequence";e[e["Spatial"]=1]="Spatial"})(n=r.GraphMode||(r.GraphMode={}));r.default=n},{}],393:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var c=e("rxjs");var h=e("rxjs/operators");var l=e("../Graph");var n=function(){function e(e,t){this._graph$=c.concat(c.of(e),e.changed$).pipe(h.publishReplay(1),h.refCount());this._graph$.subscribe(function(){});this._graphMode=l.GraphMode.Spatial;this._graphModeSubject$=new c.Subject;this._graphMode$=this._graphModeSubject$.pipe(h.startWith(this._graphMode),h.publishReplay(1),h.refCount());this._graphMode$.subscribe(function(){});this._imageLoadingService=t;this._firstGraphSubjects$=[];this._initializeCacheSubscriptions=[];this._sequenceSubscriptions=[];this._spatialSubscriptions=[]}Object.defineProperty(e.prototype,"graphMode$",{get:function(){return this._graphMode$},enumerable:true,configurable:true});e.prototype.cacheBoundingBox$=function(t,r){return this._graph$.pipe(h.first(),h.mergeMap(function(e){return e.cacheBoundingBox$(t,r)}))};e.prototype.cacheNode$=function(r){var t=this;var n=new c.Subject;this._firstGraphSubjects$.push(n);var e=n.pipe(h.publishReplay(1),h.refCount());var i=e.pipe(h.map(function(e){return e.getNode(r)}),h.mergeMap(function(e){return e.assetsCached?c.of(e):e.cacheAssets$()}),h.publishReplay(1),h.refCount());i.subscribe(function(e){t._imageLoadingService.loadnode$.next(e)},function(e){console.error("Failed to cache node ("+r+")",e)});var o=this._graph$.pipe(h.first(),h.mergeMap(function(e){if(e.isCachingFull(r)||!e.hasNode(r)){return e.cacheFull$(r)}if(e.isCachingFill(r)||!e.getNode(r).full){return e.cacheFill$(r)}return c.of(e)}),h.tap(function(e){if(!e.hasInitializedCache(r)){e.initializeCache(r)}}),h.finalize(function(){if(o==null){return}t._removeFromArray(o,t._initializeCacheSubscriptions);t._removeFromArray(n,t._firstGraphSubjects$)})).subscribe(function(e){n.next(e);n.complete()},function(e){n.error(e)});if(!o.closed){this._initializeCacheSubscriptions.push(o)}var a=e.pipe(h.mergeMap(function(e){if(e.isCachingNodeSequence(r)||!e.hasNodeSequence(r)){return e.cacheNodeSequence$(r)}return c.of(e)}),h.publishReplay(1),h.refCount());var s=a.pipe(h.tap(function(e){if(!e.getNode(r).sequenceEdges.cached){e.cacheSequenceEdges(r)}}),h.finalize(function(){if(s==null){return}t._removeFromArray(s,t._sequenceSubscriptions)})).subscribe(function(e){return},function(e){console.error("Failed to cache sequence edges ("+r+").",e)});if(!s.closed){this._sequenceSubscriptions.push(s)}if(this._graphMode===l.GraphMode.Spatial){var u=e.pipe(h.expand(function(e){if(e.hasTiles(r)){return c.empty()}return c.from(e.cacheTiles$(r)).pipe(h.mergeMap(function(e){return e.pipe(h.mergeMap(function(e){if(e.isCachingTiles(r)){return c.empty()}return c.of(e)}),h.catchError(function(e,t){console.error("Failed to cache tile data ("+r+").",e);return c.empty()}))}))}),h.last(),h.mergeMap(function(e){if(e.hasSpatialArea(r)){return c.of(e)}return c.from(e.cacheSpatialArea$(r)).pipe(h.mergeMap(function(e){return e.pipe(h.catchError(function(e,t){console.error("Failed to cache spatial nodes ("+r+").",e);return c.empty()}))}))}),h.last(),h.mergeMap(function(e){return e.hasNodeSequence(r)?c.of(e):e.cacheNodeSequence$(r)}),h.tap(function(e){if(!e.getNode(r).spatialEdges.cached){e.cacheSpatialEdges(r)}}),h.finalize(function(){if(u==null){return}t._removeFromArray(u,t._spatialSubscriptions)})).subscribe(function(e){return},function(e){console.error("Failed to cache spatial edges ("+r+").",e)});if(!u.closed){this._spatialSubscriptions.push(u)}}return i.pipe(h.first(function(e){return e.assetsCached}))};e.prototype.cacheSequence$=function(t){return this._graph$.pipe(h.first(),h.mergeMap(function(e){if(e.isCachingSequence(t)||!e.hasSequence(t)){return e.cacheSequence$(t)}return c.of(e)}),h.map(function(e){return e.getSequence(t)}))};e.prototype.cacheSequenceNodes$=function(t,r){return this._graph$.pipe(h.first(),h.mergeMap(function(e){if(e.isCachingSequence(t)||!e.hasSequence(t)){return e.cacheSequence$(t)}return c.of(e)}),h.mergeMap(function(e){if(e.isCachingSequenceNodes(t)||!e.hasSequenceNodes(t)){return e.cacheSequenceNodes$(t,r)}return c.of(e)}),h.map(function(e){return e.getSequence(t)}))};e.prototype.setFilter$=function(t){this._resetSubscriptions(this._spatialSubscriptions);return this._graph$.pipe(h.first(),h.tap(function(e){e.resetSpatialEdges();e.setFilter(t)}),h.map(function(e){return undefined}))};e.prototype.setGraphMode=function(e){if(this._graphMode===e){return}if(e===l.GraphMode.Sequence){this._resetSubscriptions(this._spatialSubscriptions)}this._graphMode=e;this._graphModeSubject$.next(this._graphMode)};e.prototype.reset$=function(t){this._abortSubjects(this._firstGraphSubjects$);this._resetSubscriptions(this._initializeCacheSubscriptions);this._resetSubscriptions(this._sequenceSubscriptions);this._resetSubscriptions(this._spatialSubscriptions);return this._graph$.pipe(h.first(),h.tap(function(e){e.reset(t)}),h.map(function(e){return undefined}))};e.prototype.uncache$=function(t,r){return this._graph$.pipe(h.first(),h.tap(function(e){e.uncache(t,r)}),h.map(function(e){return undefined}))};e.prototype._abortSubjects=function(e){for(var t=0,r=e.slice();t<r.length;t++){var n=r[t];this._removeFromArray(n,e);n.error(new Error("Cache node request was aborted."))}};e.prototype._removeFromArray=function(e,t){var r=t.indexOf(e);if(r!==-1){t.splice(r,1)}};e.prototype._resetSubscriptions=function(e){for(var t=0,r=e.slice();t<r.length;t++){var n=r[t];this._removeFromArray(n,e);if(!n.closed){n.unsubscribe()}}};return e}();r.GraphService=n;r.default=n},{"../Graph":279,rxjs:27,"rxjs/operators":225}],394:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("rxjs/operators");var i=e("rxjs");var o=function(){function e(){this._loadnode$=new i.Subject;this._loadstatus$=this._loadnode$.pipe(n.scan(function(e,t){var r=e[0];var n=false;if(t.loadStatus.total===0||t.loadStatus.loaded===t.loadStatus.total){if(t.key in r){delete r[t.key];n=true}}else{r[t.key]=t.loadStatus;n=true}return[r,n]},[{},false]),n.filter(function(e){var t=e[0],r=e[1];return r}),n.map(function(e){var t=e[0];return t}),n.publishReplay(1),n.refCount());this._loadstatus$.subscribe(function(){})}Object.defineProperty(e.prototype,"loadnode$",{get:function(){return this._loadnode$},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"loadstatus$",{get:function(){return this._loadstatus$},enumerable:true,configurable:true});return e}();r.ImageLoadingService=o},{rxjs:27,"rxjs/operators":225}],395:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("pbf");var i=function(){function r(){}r.read=function(e){var t=new n(e);return t.readFields(r._readMeshField,{faces:[],vertices:[]})};r._readMeshField=function(e,t,r){if(e===1){t.vertices.push(r.readFloat())}else if(e===2){t.faces.push(r.readVarint())}};return r}();r.MeshReader=i},{pbf:24}],396:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("rxjs/operators");var i=function(){function e(e){this._cache=null;this._core=e;this._fill=null}Object.defineProperty(e.prototype,"assetsCached",{get:function(){return this._core!=null&&this._fill!=null&&this._cache!=null&&this._cache.image!=null&&this._cache.mesh!=null},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"alt",{get:function(){return this._fill.calt},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"ca",{get:function(){return this._fill.cca!=null?this._fill.cca:this._fill.ca},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"cameraProjection",{get:function(){return this._fill.camera_projection_type},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"capturedAt",{get:function(){return this._fill.captured_at},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"cameraUuid",{get:function(){return this._fill.captured_with_camera_uuid},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"ck1",{get:function(){return this._fill.ck1},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"ck2",{get:function(){return this._fill.ck2},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"computedCA",{get:function(){return this._fill.cca},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"computedLatLon",{get:function(){return this._core.cl},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"focal",{get:function(){return this._fill.cfocal},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"full",{get:function(){return this._fill!=null},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"fullPano",{get:function(){return this._fill.gpano!=null&&this._fill.gpano.CroppedAreaLeftPixels===0&&this._fill.gpano.CroppedAreaTopPixels===0&&this._fill.gpano.CroppedAreaImageWidthPixels===this._fill.gpano.FullPanoWidthPixels&&this._fill.gpano.CroppedAreaImageHeightPixels===this._fill.gpano.FullPanoHeightPixels},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"gpano",{get:function(){return this._fill.gpano},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"height",{get:function(){return this._fill.height},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"image",{get:function(){return this._cache.image},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"image$",{get:function(){return this._cache.image$},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"key",{get:function(){return this._core.key},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"latLon",{get:function(){return this._core.cl!=null?this._core.cl:this._core.l},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"loadStatus",{get:function(){return this._cache.loadStatus},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"merged",{get:function(){return this._fill!=null&&this._fill.merge_version!=null&&this._fill.merge_version>0},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"mergeCC",{get:function(){return this._fill.merge_cc},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"mergeVersion",{get:function(){return this._fill.merge_version},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"mesh",{get:function(){return this._cache.mesh},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"organizationKey",{get:function(){return this._fill.organization_key},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"orientation",{get:function(){return this._fill.orientation},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"originalCA",{get:function(){return this._fill.ca},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"originalLatLon",{get:function(){return this._core.l},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"pano",{get:function(){return this._fill.gpano!=null&&this._fill.gpano.FullPanoWidthPixels!=null},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"private",{get:function(){return this._fill.private},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"projectKey",{get:function(){return this._fill.project!=null?this._fill.project.key:null},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"rotation",{get:function(){return this._fill.c_rotation},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"scale",{get:function(){return this._fill.atomic_scale},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"sequenceKey",{get:function(){return this._core.sequence_key},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"sequenceEdges",{get:function(){return this._cache.sequenceEdges},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"sequenceEdges$",{get:function(){return this._cache.sequenceEdges$},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"spatialEdges",{get:function(){return this._cache.spatialEdges},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"spatialEdges$",{get:function(){return this._cache.spatialEdges$},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"userKey",{get:function(){return this._fill.user.key},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"username",{get:function(){return this._fill.user.username},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"width",{get:function(){return this._fill.width},enumerable:true,configurable:true});e.prototype.cacheAssets$=function(){var e=this;return this._cache.cacheAssets$(this.key,this.pano,this.merged).pipe(n.map(function(){return e}))};e.prototype.cacheImage$=function(e){var t=this;return this._cache.cacheImage$(this.key,e).pipe(n.map(function(){return t}))};e.prototype.cacheSequenceEdges=function(e){this._cache.cacheSequenceEdges(e)};e.prototype.cacheSpatialEdges=function(e){this._cache.cacheSpatialEdges(e)};e.prototype.dispose=function(){if(this._cache!=null){this._cache.dispose();this._cache=null}this._core=null;this._fill=null};e.prototype.initializeCache=function(e){if(this._cache!=null){throw new Error("Node cache already initialized ("+this.key+").")}this._cache=e};e.prototype.makeFull=function(e){if(e==null){throw new Error("Fill can not be null.")}this._fill=e};e.prototype.resetSequenceEdges=function(){this._cache.resetSequenceEdges()};e.prototype.resetSpatialEdges=function(){this._cache.resetSpatialEdges()};e.prototype.uncache=function(){if(this._cache==null){return}this._cache.dispose();this._cache=null};return e}();r.Node=i;r.default=i},{"rxjs/operators":225}],397:[function(t,e,r){(function(o){"use strict";Object.defineProperty(r,"__esModule",{value:true});var s=t("rxjs");var a=t("rxjs/operators");var u=t("../Graph");var c=t("../Utils");var e=function(){function e(){this._disposed=false;this._image=null;this._loadStatus={loaded:0,total:0};this._mesh=null;this._sequenceEdges={cached:false,edges:[]};this._spatialEdges={cached:false,edges:[]};this._imageChanged$=new s.Subject;this._image$=this._imageChanged$.pipe(a.startWith(null),a.publishReplay(1),a.refCount());this._iamgeSubscription=this._image$.subscribe();this._sequenceEdgesChanged$=new s.Subject;this._sequenceEdges$=this._sequenceEdgesChanged$.pipe(a.startWith(this._sequenceEdges),a.publishReplay(1),a.refCount());this._sequenceEdgesSubscription=this._sequenceEdges$.subscribe(function(){});this._spatialEdgesChanged$=new s.Subject;this._spatialEdges$=this._spatialEdgesChanged$.pipe(a.startWith(this._spatialEdges),a.publishReplay(1),a.refCount());this._spatialEdgesSubscription=this._spatialEdges$.subscribe(function(){});this._cachingAssets$=null}Object.defineProperty(e.prototype,"image",{get:function(){return this._image},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"image$",{get:function(){return this._image$},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"loadStatus",{get:function(){return this._loadStatus},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"mesh",{get:function(){return this._mesh},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"sequenceEdges",{get:function(){return this._sequenceEdges},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"sequenceEdges$",{get:function(){return this._sequenceEdges$},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"spatialEdges",{get:function(){return this._spatialEdges},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"spatialEdges$",{get:function(){return this._spatialEdges$},enumerable:true,configurable:true});e.prototype.cacheAssets$=function(e,t,r){var n=this;if(this._cachingAssets$!=null){return this._cachingAssets$}var i=t?c.Settings.basePanoramaSize:c.Settings.baseImageSize;this._cachingAssets$=s.combineLatest(this._cacheImage$(e,i),this._cacheMesh$(e,r)).pipe(a.map(function(e){var t=e[0],r=e[1];n._loadStatus.loaded=0;n._loadStatus.total=0;if(r){n._mesh=r.object;n._loadStatus.loaded+=r.loaded.loaded;n._loadStatus.total+=r.loaded.total}if(t){n._image=t.object;n._loadStatus.loaded+=t.loaded.loaded;n._loadStatus.total+=t.loaded.total}return n}),a.finalize(function(){n._cachingAssets$=null}),a.publishReplay(1),a.refCount());this._cachingAssets$.pipe(a.first(function(e){return!!e._image})).subscribe(function(e){n._imageChanged$.next(n._image)},function(e){});return this._cachingAssets$};e.prototype.cacheImage$=function(e,t){var r=this;if(this._image!=null&&t<=Math.max(this._image.width,this._image.height)){return s.of(this)}var n=this._cacheImage$(e,t).pipe(a.first(function(e){return e.object!=null}),a.tap(function(e){r._disposeImage();r._image=e.object}),a.map(function(e){return r}),a.publishReplay(1),a.refCount());n.subscribe(function(e){r._imageChanged$.next(r._image)},function(e){});return n};e.prototype.cacheSequenceEdges=function(e){this._sequenceEdges={cached:true,edges:e};this._sequenceEdgesChanged$.next(this._sequenceEdges)};e.prototype.cacheSpatialEdges=function(e){this._spatialEdges={cached:true,edges:e};this._spatialEdgesChanged$.next(this._spatialEdges)};e.prototype.dispose=function(){this._iamgeSubscription.unsubscribe();this._sequenceEdgesSubscription.unsubscribe();this._spatialEdgesSubscription.unsubscribe();this._disposeImage();this._mesh=null;this._loadStatus.loaded=0;this._loadStatus.total=0;this._sequenceEdges={cached:false,edges:[]};this._spatialEdges={cached:false,edges:[]};this._imageChanged$.next(null);this._sequenceEdgesChanged$.next(this._sequenceEdges);this._spatialEdgesChanged$.next(this._spatialEdges);this._disposed=true;if(this._imageRequest!=null){this._imageRequest.abort()}if(this._meshRequest!=null){this._meshRequest.abort()}};e.prototype.resetSequenceEdges=function(){this._sequenceEdges={cached:false,edges:[]};this._sequenceEdgesChanged$.next(this._sequenceEdges)};e.prototype.resetSpatialEdges=function(){this._spatialEdges={cached:false,edges:[]};this._spatialEdgesChanged$.next(this._spatialEdges)};e.prototype._cacheImage$=function(o,e){var a=this;return s.Observable.create(function(n){var i=new XMLHttpRequest;i.open("GET",c.Urls.thumbnail(o,e,c.Urls.origin),true);i.responseType="arraybuffer";i.timeout=15e3;i.onload=function(t){if(i.status!==200){a._imageRequest=null;n.error(new Error("Failed to fetch image ("+o+"). Status: "+i.status+", "+i.statusText));return}var r=new Image;r.crossOrigin="Anonymous";r.onload=function(e){a._imageRequest=null;if(a._disposed){window.URL.revokeObjectURL(r.src);n.error(new Error("Image load was aborted ("+o+")"));return}n.next({loaded:{loaded:t.loaded,total:t.total},object:r});n.complete()};r.onerror=function(e){a._imageRequest=null;n.error(new Error("Failed to load image ("+o+")"))};var e=new Blob([i.response]);r.src=window.URL.createObjectURL(e)};i.onprogress=function(e){if(a._disposed){return}n.next({loaded:{loaded:e.loaded,total:e.total},object:null})};i.onerror=function(e){a._imageRequest=null;n.error(new Error("Failed to fetch image ("+o+")"))};i.ontimeout=function(e){a._imageRequest=null;n.error(new Error("Image request timed out ("+o+")"))};i.onabort=function(e){a._imageRequest=null;n.error(new Error("Image request was aborted ("+o+")"))};a._imageRequest=i;i.send(null)})};e.prototype._cacheMesh$=function(t,e){var i=this;return s.Observable.create(function(r){if(!e){r.next(i._createEmptyMeshLoadStatus());r.complete();return}var n=new XMLHttpRequest;n.open("GET",c.Urls.protoMesh(t),true);n.responseType="arraybuffer";n.timeout=15e3;n.onload=function(e){i._meshRequest=null;if(i._disposed){return}var t=n.status===200?u.MeshReader.read(new o(n.response)):{faces:[],vertices:[]};r.next({loaded:{loaded:e.loaded,total:e.total},object:t});r.complete()};n.onprogress=function(e){if(i._disposed){return}r.next({loaded:{loaded:e.loaded,total:e.total},object:null})};n.onerror=function(e){i._meshRequest=null;console.error("Failed to cache mesh ("+t+")");r.next(i._createEmptyMeshLoadStatus());r.complete()};n.ontimeout=function(e){i._meshRequest=null;console.error("Mesh request timed out ("+t+")");r.next(i._createEmptyMeshLoadStatus());r.complete()};n.onabort=function(e){i._meshRequest=null;r.error(new Error("Mesh request was aborted ("+t+")"))};i._meshRequest=n;n.send(null)})};e.prototype._createEmptyMeshLoadStatus=function(){return{loaded:{loaded:0,total:0},object:{faces:[],vertices:[]}}};e.prototype._disposeImage=function(){if(this._image!=null){window.URL.revokeObjectURL(this._image.src)}this._image=null};return e}();r.NodeCache=e;r.default=e}).call(this,t("buffer").Buffer)},{"../Graph":279,"../Utils":285,buffer:7,rxjs:27,"rxjs/operators":225}],398:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=function(){function e(e){this._key=e.key;this._keys=e.keys}Object.defineProperty(e.prototype,"key",{get:function(){return this._key},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"keys",{get:function(){return this._keys},enumerable:true,configurable:true});e.prototype.dispose=function(){this._key=null;this._keys=null};e.prototype.findNextKey=function(e){var t=this._keys.indexOf(e);if(t+1>=this._keys.length||t===-1){return null}else{return this._keys[t+1]}};e.prototype.findPrevKey=function(e){var t=this._keys.indexOf(e);if(t===0||t===-1){return null}else{return this._keys[t-1]}};return e}();r.Sequence=n;r.default=n},{}],399:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var M=e("three");var G=e("../../Edge");var V=e("../../Error");var n=e("../../Geo");var i=function(){function e(e,t,r){this._spatial=new n.Spatial;this._geoCoords=new n.GeoCoords;this._settings=e!=null?e:new G.EdgeCalculatorSettings;this._directions=t!=null?t:new G.EdgeCalculatorDirections;this._coefficients=r!=null?r:new G.EdgeCalculatorCoefficients}e.prototype.getPotentialEdges=function(e,t,r){if(!e.full){throw new V.ArgumentMapillaryError("Node has to be full.")}if(!e.merged){return[]}var n=this._spatial.viewingDirection(e.rotation);var i=this._spatial.angleToPlane(n.toArray(),[0,0,1]);var o=[];for(var a=0,s=t;a<s.length;a++){var u=s[a];if(!u.merged||u.key===e.key){continue}var c=this._geoCoords.geodeticToEnu(u.latLon.lat,u.latLon.lon,u.alt,e.latLon.lat,e.latLon.lon,e.alt);var h=new M.Vector3(c[0],c[1],c[2]);var l=h.length();if(l>this._settings.maxDistance&&r.indexOf(u.key)<0){continue}var p=this._spatial.angleBetweenVector2(n.x,n.y,h.x,h.y);var f=this._spatial.angleToPlane(h.toArray(),[0,0,1]);var d=this._spatial.viewingDirection(u.rotation);var v=this._spatial.angleBetweenVector2(n.x,n.y,d.x,d.y);var m=this._spatial.angleToPlane(d.toArray(),[0,0,1]);var g=m-i;var y=this._spatial.relativeRotationAngle(e.rotation,u.rotation);var _=this._spatial.angleBetweenVector2(1,0,h.x,h.y);var b=u.sequenceKey!=null&&e.sequenceKey!=null&&u.sequenceKey===e.sequenceKey;var x=u.mergeCC==null&&e.mergeCC==null||u.mergeCC===e.mergeCC;var w=u.userKey===e.userKey;var S={capturedAt:u.capturedAt,croppedPano:u.pano&&!u.fullPano,directionChange:v,distance:l,fullPano:u.fullPano,key:u.key,motionChange:p,rotation:y,sameMergeCC:x,sameSequence:b,sameUser:w,sequenceKey:u.sequenceKey,verticalDirectionChange:g,verticalMotion:f,worldMotionAzimuth:_};o.push(S)}return o};e.prototype.computeSequenceEdges=function(e,t){if(!e.full){throw new V.ArgumentMapillaryError("Node has to be full.")}if(e.sequenceKey!==t.key){throw new V.ArgumentMapillaryError("Node and sequence does not correspond.")}var r=[];var n=t.findNextKey(e.key);if(n!=null){r.push({data:{direction:G.EdgeDirection.Next,worldMotionAzimuth:Number.NaN},from:e.key,to:n})}var i=t.findPrevKey(e.key);if(i!=null){r.push({data:{direction:G.EdgeDirection.Prev,worldMotionAzimuth:Number.NaN},from:e.key,to:i})}return r};e.prototype.computeSimilarEdges=function(t,e){var r=this;if(!t.full){throw new V.ArgumentMapillaryError("Node has to be full.")}var n=t.fullPano;var i={};for(var o=0,a=e;o<a.length;o++){var s=a[o];if(s.sequenceKey==null){continue}if(s.sameSequence){continue}if(n){if(!s.fullPano){continue}}else{if(!s.fullPano&&Math.abs(s.directionChange)>this._settings.similarMaxDirectionChange){continue}}if(s.distance>this._settings.similarMaxDistance){continue}if(s.sameUser&&Math.abs(s.capturedAt-t.capturedAt)<this._settings.similarMinTimeDifference){continue}if(i[s.sequenceKey]==null){i[s.sequenceKey]=[]}i[s.sequenceKey].push(s)}var u=[];var c=t.fullPano?function(e){return e.distance}:function(e){return r._coefficients.similarDistance*e.distance+r._coefficients.similarRotation*e.rotation};for(var h in i){if(!i.hasOwnProperty(h)){continue}var l=Number.MAX_VALUE;var p=null;for(var f=0,d=i[h];f<d.length;f++){var s=d[f];var v=c(s);if(v<l){l=v;p=s}}if(p==null){continue}u.push(p)}return u.map(function(e){return{data:{direction:G.EdgeDirection.Similar,worldMotionAzimuth:e.worldMotionAzimuth},from:t.key,to:e.key}})};e.prototype.computeStepEdges=function(e,t,r,n){if(!e.full){throw new V.ArgumentMapillaryError("Node has to be full.")}var i=[];if(e.pano){return i}for(var o in this._directions.steps){if(!this._directions.steps.hasOwnProperty(o)){continue}var a=this._directions.steps[o];var s=Number.MAX_VALUE;var u=null;var c=null;for(var h=0,l=t;h<l.length;h++){var p=l[h];if(p.croppedPano||p.fullPano){continue}if(Math.abs(p.directionChange)>this._settings.stepMaxDirectionChange){continue}var f=this._spatial.angleDifference(a.motionChange,p.motionChange);var d=this._spatial.angleDifference(p.directionChange,f);var v=Math.max(Math.abs(f),Math.abs(d));if(Math.abs(v)>this._settings.stepMaxDrift){continue}var m=p.key;if(a.useFallback&&(m===r||m===n)){c=p}if(p.distance>this._settings.stepMaxDistance){continue}f=Math.sqrt(f*f+p.verticalMotion*p.verticalMotion);var g=this._coefficients.stepPreferredDistance*Math.abs(p.distance-this._settings.stepPreferredDistance)/this._settings.stepMaxDistance+this._coefficients.stepMotion*f/this._settings.stepMaxDrift+this._coefficients.stepRotation*p.rotation/this._settings.stepMaxDirectionChange+this._coefficients.stepSequencePenalty*(p.sameSequence?0:1)+this._coefficients.stepMergeCCPenalty*(p.sameMergeCC?0:1);if(g<s){s=g;u=p}}u=u==null?c:u;if(u!=null){i.push({data:{direction:a.direction,worldMotionAzimuth:u.worldMotionAzimuth},from:e.key,to:u.key})}}return i};e.prototype.computeTurnEdges=function(e,t){if(!e.full){throw new V.ArgumentMapillaryError("Node has to be full.")}var r=[];if(e.pano){return r}for(var n in this._directions.turns){if(!this._directions.turns.hasOwnProperty(n)){continue}var i=this._directions.turns[n];var o=Number.MAX_VALUE;var a=null;for(var s=0,u=t;s<u.length;s++){var c=u[s];if(c.croppedPano||c.fullPano){continue}if(c.distance>this._settings.turnMaxDistance){continue}var h=i.direction!==G.EdgeDirection.TurnU&&c.distance<this._settings.turnMaxRigDistance&&Math.abs(c.directionChange)>this._settings.turnMinRigDirectionChange;var l=this._spatial.angleDifference(i.directionChange,c.directionChange);var p=void 0;if(h&&c.directionChange*i.directionChange>0&&Math.abs(c.directionChange)<Math.abs(i.directionChange)){p=-Math.PI/2+Math.abs(c.directionChange)}else{if(Math.abs(l)>this._settings.turnMaxDirectionChange){continue}var f=i.motionChange?this._spatial.angleDifference(i.motionChange,c.motionChange):0;f=Math.sqrt(f*f+c.verticalMotion*c.verticalMotion);p=this._coefficients.turnDistance*c.distance/this._settings.turnMaxDistance+this._coefficients.turnMotion*f/Math.PI+this._coefficients.turnSequencePenalty*(c.sameSequence?0:1)+this._coefficients.turnMergeCCPenalty*(c.sameMergeCC?0:1)}if(p<o){o=p;a=c}}if(a!=null){r.push({data:{direction:i.direction,worldMotionAzimuth:a.worldMotionAzimuth},from:e.key,to:a.key})}}return r};e.prototype.computePerspectiveToPanoEdges=function(e,t){if(!e.full){throw new V.ArgumentMapillaryError("Node has to be full.")}if(e.pano){return[]}var r=Number.MAX_VALUE;var n=null;for(var i=0,o=t;i<o.length;i++){var a=o[i];if(!a.fullPano){continue}var s=this._coefficients.panoPreferredDistance*Math.abs(a.distance-this._settings.panoPreferredDistance)/this._settings.panoMaxDistance+this._coefficients.panoMotion*Math.abs(a.motionChange)/Math.PI+this._coefficients.panoMergeCCPenalty*(a.sameMergeCC?0:1);if(s<r){r=s;n=a}}if(n==null){return[]}return[{data:{direction:G.EdgeDirection.Pano,worldMotionAzimuth:n.worldMotionAzimuth},from:e.key,to:n.key}]};e.prototype.computePanoEdges=function(e,t){if(!e.full){throw new V.ArgumentMapillaryError("Node has to be full.")}if(!e.fullPano){return[]}var r=[];var n=[];var i=[];for(var o=0,a=t;o<a.length;o++){var s=a[o];if(s.distance>this._settings.panoMaxDistance){continue}if(s.fullPano){if(s.distance<this._settings.panoMinDistance){continue}n.push(s)}else{if(s.croppedPano){continue}for(var u in this._directions.panos){if(!this._directions.panos.hasOwnProperty(u)){continue}var c=this._directions.panos[u];var h=this._spatial.angleDifference(s.directionChange,s.motionChange);var l=this._spatial.angleDifference(c.directionChange,h);if(Math.abs(l)>this._settings.panoMaxStepTurnChange){continue}i.push([c.direction,s]);break}}}var p=Math.PI/this._settings.panoMaxItems;var f=[];var d=[];for(var v=0;v<this._settings.panoMaxItems;v++){var m=v/this._settings.panoMaxItems*2*Math.PI;var g=Number.MAX_VALUE;var y=null;for(var _=0,b=n;_<b.length;_++){var s=b[_];var x=this._spatial.angleDifference(m,s.motionChange);if(Math.abs(x)>p){continue}var w=Number.MAX_VALUE;for(var S=0,M=f;S<M.length;S++){var E=M[S];var C=Math.abs(this._spatial.angleDifference(E,s.motionChange));if(C<w){w=C}}if(w<=p){continue}var T=this._coefficients.panoPreferredDistance*Math.abs(s.distance-this._settings.panoPreferredDistance)/this._settings.panoMaxDistance+this._coefficients.panoMotion*Math.abs(x)/p+this._coefficients.panoSequencePenalty*(s.sameSequence?0:1)+this._coefficients.panoMergeCCPenalty*(s.sameMergeCC?0:1);if(T<g){g=T;y=s}}if(y!=null){f.push(y.motionChange);r.push({data:{direction:G.EdgeDirection.Pano,worldMotionAzimuth:y.worldMotionAzimuth},from:e.key,to:y.key})}else{d.push(m)}}var O={};O[G.EdgeDirection.Pano]=f;O[G.EdgeDirection.StepForward]=[];O[G.EdgeDirection.StepLeft]=[];O[G.EdgeDirection.StepBackward]=[];O[G.EdgeDirection.StepRight]=[];for(var P=0,A=d;P<A.length;P++){var j=A[P];var R=[];for(var u in this._directions.panos){if(!this._directions.panos.hasOwnProperty(u)){continue}var c=this._directions.panos[u];var L=O[G.EdgeDirection.Pano].concat(O[c.direction]).concat(O[c.prev]).concat(O[c.next]);var g=Number.MAX_VALUE;var y=null;for(var I=0,N=i;I<N.length;I++){var s=N[I];if(s[0]!==c.direction){continue}var k=this._spatial.angleDifference(j,s[1].motionChange);if(Math.abs(k)>p){continue}var D=Number.MAX_VALUE;for(var B=0,F=L;B<F.length;B++){var E=F[B];var w=Math.abs(this._spatial.angleDifference(E,s[1].motionChange));if(w<D){D=w}}if(D<=p){continue}var T=this._coefficients.panoPreferredDistance*Math.abs(s[1].distance-this._settings.panoPreferredDistance)/this._settings.panoMaxDistance+this._coefficients.panoMotion*Math.abs(k)/p+this._coefficients.panoMergeCCPenalty*(s[1].sameMergeCC?0:1);if(T<g){g=T;y=s}}if(y!=null){R.push(y);r.push({data:{direction:y[0],worldMotionAzimuth:y[1].worldMotionAzimuth},from:e.key,to:y[1].key})}}for(var $=0,z=R;$<z.length;$++){var U=z[$];O[U[0]].push(U[1].motionChange)}}return r};return e}();r.EdgeCalculator=i;r.default=i},{"../../Edge":276,"../../Error":277,"../../Geo":278,three:226}],400:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=function(){function e(){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 e}();r.EdgeCalculatorCoefficients=n;r.default=n},{}],401:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("../../Edge");var i=function(){function e(){this.steps={};this.turns={};this.panos={};this.steps[n.EdgeDirection.StepForward]={direction:n.EdgeDirection.StepForward,motionChange:0,useFallback:true};this.steps[n.EdgeDirection.StepBackward]={direction:n.EdgeDirection.StepBackward,motionChange:Math.PI,useFallback:true};this.steps[n.EdgeDirection.StepLeft]={direction:n.EdgeDirection.StepLeft,motionChange:Math.PI/2,useFallback:false};this.steps[n.EdgeDirection.StepRight]={direction:n.EdgeDirection.StepRight,motionChange:-Math.PI/2,useFallback:false};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 e}();r.EdgeCalculatorDirections=i},{"../../Edge":276}],402:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=function(){function e(){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=12*3600*1e3;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}Object.defineProperty(e.prototype,"maxDistance",{get:function(){return Math.max(this.panoMaxDistance,this.similarMaxDistance,this.stepMaxDistance,this.turnMaxDistance)},enumerable:true,configurable:true});return e}();r.EdgeCalculatorSettings=n;r.default=n},{}],403:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n;(function(e){e[e["Next"]=0]="Next";e[e["Prev"]=1]="Prev";e[e["StepLeft"]=2]="StepLeft";e[e["StepRight"]=3]="StepRight";e[e["StepForward"]=4]="StepForward";e[e["StepBackward"]=5]="StepBackward";e[e["TurnLeft"]=6]="TurnLeft";e[e["TurnRight"]=7]="TurnRight";e[e["TurnU"]=8]="TurnU";e[e["Pano"]=9]="Pano";e[e["Similar"]=10]="Similar"})(n=r.EdgeDirection||(r.EdgeDirection={}))},{}],404:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var i=e("rxjs");var o=e("rxjs/operators");var a=e("virtual-dom");var s=e("rxjs");var u=e("../Render");var n=function(){function e(e,t,r){this._adaptiveOperation$=new s.Subject;this._render$=new s.Subject;this._renderAdaptive$=new s.Subject;this._renderService=t;this._currentFrame$=r;var n=a.create(a.h("div.domRenderer",[]));e.appendChild(n);this._offset$=this._adaptiveOperation$.pipe(o.scan(function(e,t){return t(e)},{elementHeight:e.offsetHeight,elementWidth:e.offsetWidth,imageAspect:0,renderMode:u.RenderMode.Fill}),o.filter(function(e){return e.imageAspect>0&&e.elementWidth>0&&e.elementHeight>0}),o.map(function(e){var t=e.elementWidth/e.elementHeight;var r=e.imageAspect/t;var n=0;var i=0;if(e.renderMode===u.RenderMode.Letterbox){if(e.imageAspect>t){n=e.elementHeight*(1-1/r)/2}else{i=e.elementWidth*(1-r)/2}}else{if(e.imageAspect>t){i=-e.elementWidth*(r-1)/2}else{n=-e.elementHeight*(1/r-1)/2}}return{bottom:n,left:i,right:i,top:n}}));this._currentFrame$.pipe(o.filter(function(e){return e.state.currentNode!=null}),o.distinctUntilChanged(function(e,t){return e===t},function(e){return e.state.currentNode.key}),o.map(function(e){return e.state.currentTransform.basicAspect}),o.map(function(t){return function(e){e.imageAspect=t;return e}})).subscribe(this._adaptiveOperation$);i.combineLatest(this._renderAdaptive$.pipe(o.scan(function(e,t){if(t.vnode==null){delete e[t.name]}else{e[t.name]=t.vnode}return e},{})),this._offset$).pipe(o.map(function(e){var t=[];var r=e[0];for(var n in r){if(!r.hasOwnProperty(n)){continue}t.push(r[n])}var i=e[1];var o={style:{bottom:i.bottom+"px",left:i.left+"px","pointer-events":"none",position:"absolute",right:i.right+"px",top:i.top+"px"}};return{name:"adaptiveDomRenderer",vnode:a.h("div.adaptiveDomRenderer",o,t)}})).subscribe(this._render$);this._vNode$=this._render$.pipe(o.scan(function(e,t){if(t.vnode==null){delete e[t.name]}else{e[t.name]=t.vnode}return e},{}),o.map(function(e){var t=[];for(var r in e){if(!e.hasOwnProperty(r)){continue}t.push(e[r])}return a.h("div.domRenderer",t)}));this._vPatch$=this._vNode$.pipe(o.scan(function(e,t){e.vpatch=a.diff(e.vnode,t);e.vnode=t;return e},{vnode:a.h("div.domRenderer",[]),vpatch:null}),o.pluck("vpatch"));this._element$=this._vPatch$.pipe(o.scan(function(e,t){return a.patch(e,t)},n),o.publishReplay(1),o.refCount());this._element$.subscribe(function(){});this._renderService.size$.pipe(o.map(function(t){return function(e){e.elementWidth=t.width;e.elementHeight=t.height;return e}})).subscribe(this._adaptiveOperation$);this._renderService.renderMode$.pipe(o.map(function(t){return function(e){e.renderMode=t;return e}})).subscribe(this._adaptiveOperation$)}Object.defineProperty(e.prototype,"element$",{get:function(){return this._element$},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"render$",{get:function(){return this._render$},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"renderAdaptive$",{get:function(){return this._renderAdaptive$},enumerable:true,configurable:true});e.prototype.clear=function(e){this._renderAdaptive$.next({name:e,vnode:null});this._render$.next({name:e,vnode:null})};return e}();r.DOMRenderer=n;r.default=n},{"../Render":281,rxjs:27,"rxjs/operators":225,"virtual-dom":231}],405:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n;(function(e){e[e["Background"]=0]="Background";e[e["Foreground"]=1]="Foreground"})(n=r.GLRenderStage||(r.GLRenderStage={}));r.default=n},{}],406:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var h=e("rxjs");var l=e("rxjs/operators");var p=e("three");var f=e("../Render");var d=e("../Utils");var n=function(){function e(i,o,e){var a=this;this._renderFrame$=new h.Subject;this._renderCameraOperation$=new h.Subject;this._render$=new h.Subject;this._clear$=new h.Subject;this._renderOperation$=new h.Subject;this._rendererOperation$=new h.Subject;this._eraserOperation$=new h.Subject;this._renderService=o;this._dom=!!e?e:new d.DOM;this._renderer$=this._rendererOperation$.pipe(l.scan(function(e,t){return t(e)},{needsRender:false,renderer:null}),l.filter(function(e){return!!e.renderer}));this._renderCollection$=this._renderOperation$.pipe(l.scan(function(e,t){return t(e)},{}),l.share());this._renderCamera$=this._renderCameraOperation$.pipe(l.scan(function(e,t){return t(e)},{frameId:-1,needsRender:false,perspective:null}));this._eraser$=this._eraserOperation$.pipe(l.startWith(function(e){return e}),l.scan(function(e,t){return t(e)},{needsRender:false}));h.combineLatest(this._renderer$,this._renderCollection$,this._renderCamera$,this._eraser$).pipe(l.map(function(e){var t=e[0],r=e[1],n=e[2],i=e[3];var o=Object.keys(r).map(function(e){return r[e]});return{camera:n,eraser:i,renderer:t,renders:o}}),l.filter(function(e){var t=e.renderer.needsRender||e.camera.needsRender||e.eraser.needsRender;var r=e.camera.frameId;for(var n=0,i=e.renders;n<i.length;n++){var o=i[n];if(o.frameId!==r){return false}t=t||o.needsRender}return t}),l.distinctUntilChanged(function(e,t){return e===t},function(e){return e.eraser.needsRender?-1:e.camera.frameId})).subscribe(function(e){e.renderer.needsRender=false;e.camera.needsRender=false;e.eraser.needsRender=false;var t=e.camera.perspective;var r=[];var n=[];for(var i=0,o=e.renders;i<o.length;i++){var a=o[i];if(a.stage===f.GLRenderStage.Background){r.push(a.render)}else if(a.stage===f.GLRenderStage.Foreground){n.push(a.render)}}var s=e.renderer.renderer;s.clear();for(var u=0,c=r;u<c.length;u++){var a=c[u];a(t,s)}s.clearDepth();for(var h=0,l=n;h<l.length;h++){var a=l[h];a(t,s)}});this._renderFrame$.pipe(l.map(function(t){return function(e){e.frameId=t.frameId;e.perspective=t.perspective;if(t.changed===true){e.needsRender=true}return e}})).subscribe(this._renderCameraOperation$);this._renderFrameSubscribe();var t=this._render$.pipe(l.map(function(t){return function(e){e[t.name]=t.render;return e}}));var r=this._clear$.pipe(l.map(function(t){return function(e){delete e[t];return e}}));h.merge(t,r).subscribe(this._renderOperation$);this._webGLRenderer$=this._render$.pipe(l.first(),l.map(function(e){var t=a._dom.createElement("canvas","mapillary-js-canvas");t.style.position="absolute";t.setAttribute("tabindex","0");i.appendChild(t);var r=o.element;var n=new p.WebGLRenderer({canvas:t});n.setPixelRatio(window.devicePixelRatio);n.setSize(r.offsetWidth,r.offsetHeight);n.setClearColor(new p.Color(2105376),1);n.autoClear=false;return n}),l.publishReplay(1),l.refCount());this._webGLRenderer$.subscribe(function(){});var n=this._webGLRenderer$.pipe(l.first(),l.map(function(t){return function(e){e.needsRender=true;e.renderer=t;return e}}));var s=this._renderService.size$.pipe(l.map(function(t){return function(e){if(e.renderer==null){return e}e.renderer.setSize(t.width,t.height);e.needsRender=true;return e}}));var u=this._clear$.pipe(l.map(function(e){return function(e){if(e.renderer==null){return e}e.needsRender=true;return e}}));h.merge(n,s,u).subscribe(this._rendererOperation$);var c=this._renderCollection$.pipe(l.filter(function(e){return Object.keys(e).length===0}),l.share());c.subscribe(function(e){if(a._renderFrameSubscription==null){return}a._renderFrameSubscription.unsubscribe();a._renderFrameSubscription=null;a._renderFrameSubscribe()});c.pipe(l.map(function(e){return function(e){e.needsRender=true;return e}})).subscribe(this._eraserOperation$)}Object.defineProperty(e.prototype,"render$",{get:function(){return this._render$},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"webGLRenderer$",{get:function(){return this._webGLRenderer$},enumerable:true,configurable:true});e.prototype.clear=function(e){this._clear$.next(e)};e.prototype._renderFrameSubscribe=function(){var t=this;this._render$.pipe(l.first(),l.map(function(e){return function(e){e.needsRender=true;return e}})).subscribe(function(e){t._renderCameraOperation$.next(e)});this._renderFrameSubscription=this._render$.pipe(l.first(),l.mergeMap(function(e){return t._renderService.renderCameraFrame$})).subscribe(this._renderFrame$)};return e}();r.GLRenderer=n;r.default=n},{"../Render":281,"../Utils":285,rxjs:27,"rxjs/operators":225,three:226}],407:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var p=e("three");var n=e("../Geo");var s=e("../Render");var u=e("../State");var i=function(){function e(e,t,r){this._spatial=new n.Spatial;this._viewportCoords=new n.ViewportCoords;this._initialFov=50;this._alpha=-1;this._renderMode=r;this._zoom=0;this._frameId=-1;this._changed=false;this._changedForFrame=-1;this._currentNodeId=null;this._previousNodeId=null;this._currentPano=false;this._previousPano=false;this._state=null;this._currentProjectedPoints=[];this._previousProjectedPoints=[];this._currentFov=this._initialFov;this._previousFov=this._initialFov;this._camera=new n.Camera;this._perspective=new p.PerspectiveCamera(this._initialFov,this._computeAspect(e,t),.16,1e4);this._perspective.matrixAutoUpdate=false;this._rotation={phi:0,theta:0}}Object.defineProperty(e.prototype,"alpha",{get:function(){return this._alpha},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"camera",{get:function(){return this._camera},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"changed",{get:function(){return this._frameId===this._changedForFrame},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"frameId",{get:function(){return this._frameId},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"perspective",{get:function(){return this._perspective},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"renderMode",{get:function(){return this._renderMode},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"rotation",{get:function(){return this._rotation},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"zoom",{get:function(){return this._zoom},enumerable:true,configurable:true});e.prototype.setFrame=function(e){var t=e.state;if(t.state!==this._state){this._state=t.state;this._changed=true}var r=t.currentNode.key;var n=!!t.previousNode?t.previousNode.key:null;if(r!==this._currentNodeId){this._currentNodeId=r;this._currentPano=!!t.currentTransform.gpano;this._currentProjectedPoints=this._computeProjectedPoints(t.currentTransform);this._changed=true}if(n!==this._previousNodeId){this._previousNodeId=n;this._previousPano=!!t.previousTransform.gpano;this._previousProjectedPoints=this._computeProjectedPoints(t.previousTransform);this._changed=true}var i=t.zoom;if(i!==this._zoom){this._zoom=i;this._changed=true}if(this._changed){this._currentFov=this._computeCurrentFov();this._previousFov=this._computePreviousFov()}var o=t.alpha;if(this._changed||o!==this._alpha){this._alpha=o;this._perspective.fov=this._state===u.State.Earth?60:this._interpolateFov(this._currentFov,this._previousFov,this._alpha);this._changed=true}var a=t.camera;if(this._camera.diff(a)>1e-9){this._camera.copy(a);this._rotation=this._computeRotation(a);this._perspective.up.copy(a.up);this._perspective.position.copy(a.position);this._perspective.lookAt(a.lookat);this._perspective.updateMatrix();this._perspective.updateMatrixWorld(false);this._changed=true}if(this._changed){this._perspective.updateProjectionMatrix()}this._setFrameId(e.id)};e.prototype.setRenderMode=function(e){this._renderMode=e;this._perspective.fov=this._computeFov();this._perspective.updateProjectionMatrix();this._changed=true};e.prototype.setSize=function(e){this._perspective.aspect=this._computeAspect(e.width,e.height);this._perspective.fov=this._computeFov();this._perspective.updateProjectionMatrix();this._changed=true};e.prototype._computeAspect=function(e,t){return e===0?0:e/t};e.prototype._computeCurrentFov=function(){if(!this._currentNodeId){return this._initialFov}return this._currentPano?this._yToFov(1,this._zoom):this._computeVerticalFov(this._currentProjectedPoints,this._renderMode,this._zoom,this.perspective.aspect)};e.prototype._computeFov=function(){this._currentFov=this._computeCurrentFov();this._previousFov=this._computePreviousFov();return this._interpolateFov(this._currentFov,this._previousFov,this._alpha)};e.prototype._computePreviousFov=function(){if(!this._currentNodeId){return this._initialFov}return!this._previousNodeId?this._currentFov:this._previousPano?this._yToFov(1,this._zoom):this._computeVerticalFov(this._previousProjectedPoints,this._renderMode,this._zoom,this.perspective.aspect)};e.prototype._computeProjectedPoints=function(n){var i=this;var e=[[.5,0],[1,0]];var t=[[.5,0],[0,.5]];var r=100;var o=[];for(var a=0;a<e.length;++a){var s=e[a];var u=t[a];for(var c=0;c<=r;++c){o.push([s[0]+u[0]*c/r,s[1]+u[1]*c/r])}}var h=new p.Camera;h.up.copy(n.upVector());h.position.copy((new p.Vector3).fromArray(n.unprojectSfM([0,0],0)));h.lookAt((new p.Vector3).fromArray(n.unprojectSfM([0,0],10)));h.updateMatrix();h.updateMatrixWorld(true);var l=o.map(function(e){var t=n.unprojectBasic(e,1e4);var r=i._viewportCoords.worldToCamera(t,h);return[Math.abs(r[0]/r[2]),Math.abs(r[1]/r[2])]});return l};e.prototype._computeRequiredVerticalFov=function(e,t,r){var n=Math.max(e[0]/r,e[1]);return this._yToFov(n,t)};e.prototype._computeRotation=function(e){var t=e.lookat.clone().sub(e.position);var r=e.up.clone();var n=t.clone().dot(r);var i=t.clone().sub(r.clone().multiplyScalar(n));var o=Math.atan2(i.y,i.x);var a=Math.PI/2-this._spatial.angleToPlane(t.toArray(),[0,0,1]);return{phi:o,theta:a}};e.prototype._computeVerticalFov=function(e,t,r,n){var i=this;var o=e.map(function(e){return i._computeRequiredVerticalFov(e,r,n)});var a=t===s.RenderMode.Fill?Math.min.apply(Math,o)*.995:Math.max.apply(Math,o);return a};e.prototype._yToFov=function(e,t){return 2*Math.atan(e/Math.pow(2,t))*180/Math.PI};e.prototype._interpolateFov=function(e,t,r){return r*e+(1-r)*t};e.prototype._setFrameId=function(e){this._frameId=e;if(this._changed){this._changed=false;this._changedForFrame=e}};return e}();r.RenderCamera=i;r.default=i},{"../Geo":278,"../Render":281,"../State":282,three:226}],408:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n;(function(e){e[e["Letterbox"]=0]="Letterbox";e[e["Fill"]=1]="Fill"})(n=r.RenderMode||(r.RenderMode={}));r.default=n},{}],409:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var o=e("rxjs/operators");var a=e("rxjs");var s=e("../Geo");var u=e("../Render");var n=function(){function e(e,t,r,n){var i=this;this._element=e;this._currentFrame$=t;this._spatial=new s.Spatial;r=r!=null?r:u.RenderMode.Fill;this._resize$=new a.Subject;this._renderCameraOperation$=new a.Subject;this._size$=new a.BehaviorSubject({height:this._element.offsetHeight,width:this._element.offsetWidth});this._resize$.pipe(o.map(function(){return{height:i._element.offsetHeight,width:i._element.offsetWidth}})).subscribe(this._size$);this._renderMode$=new a.BehaviorSubject(r);this._renderCameraHolder$=this._renderCameraOperation$.pipe(o.startWith(function(e){return e}),o.scan(function(e,t){return t(e)},!!n?n:new u.RenderCamera(this._element.offsetWidth,this._element.offsetHeight,r)),o.publishReplay(1),o.refCount());this._renderCameraFrame$=this._currentFrame$.pipe(o.withLatestFrom(this._renderCameraHolder$),o.tap(function(e){var t=e[0],r=e[1];r.setFrame(t)}),o.map(function(e){return e[1]}),o.publishReplay(1),o.refCount());this._renderCamera$=this._renderCameraFrame$.pipe(o.filter(function(e){return e.changed}),o.publishReplay(1),o.refCount());this._bearing$=this._renderCamera$.pipe(o.map(function(e){var t=i._spatial.radToDeg(i._spatial.azimuthalToBearing(e.rotation.phi));return i._spatial.wrap(t,0,360)}),o.publishReplay(1),o.refCount());this._size$.pipe(o.skip(1),o.map(function(t){return function(e){e.setSize(t);return e}})).subscribe(this._renderCameraOperation$);this._renderMode$.pipe(o.skip(1),o.map(function(t){return function(e){e.setRenderMode(t);return 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(){})}Object.defineProperty(e.prototype,"bearing$",{get:function(){return this._bearing$},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"element",{get:function(){return this._element},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"resize$",{get:function(){return this._resize$},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"size$",{get:function(){return this._size$},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"renderMode$",{get:function(){return this._renderMode$},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"renderCameraFrame$",{get:function(){return this._renderCameraFrame$},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"renderCamera$",{get:function(){return this._renderCamera$},enumerable:true,configurable:true});return e}();r.RenderService=n;r.default=n},{"../Geo":278,"../Render":281,rxjs:27,"rxjs/operators":225}],410:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=function(){function e(t){if(t.requestAnimationFrame){this._cancelAnimationFrame=t.cancelAnimationFrame.bind(t);this._requestAnimationFrame=t.requestAnimationFrame.bind(t)}else if(t.mozRequestAnimationFrame){this._cancelAnimationFrame=t.mozCancelAnimationFrame.bind(t);this._requestAnimationFrame=t.mozRequestAnimationFrame.bind(t)}else if(t.webkitRequestAnimationFrame){this._cancelAnimationFrame=t.webkitCancelAnimationFrame.bind(t);this._requestAnimationFrame=t.webkitRequestAnimationFrame.bind(t)}else if(t.msRequestAnimationFrame){this._cancelAnimationFrame=t.msCancelAnimationFrame.bind(t);this._requestAnimationFrame=t.msRequestAnimationFrame.bind(t)}else if(t.oRequestAnimationFrame){this._cancelAnimationFrame=t.oCancelAnimationFrame.bind(t);this._requestAnimationFrame=t.oRequestAnimationFrame.bind(t)}else{this._cancelAnimationFrame=t.clearTimeout.bind(t);this._requestAnimationFrame=function(e){return t.setTimeout(e,1e3/60)}}}Object.defineProperty(e.prototype,"cancelAnimationFrame",{get:function(){return this._cancelAnimationFrame},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"requestAnimationFrame",{get:function(){return this._requestAnimationFrame},enumerable:true,configurable:true});return e}();r.FrameGenerator=n;r.default=n},{}],411:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=function(){function e(e,t){this._phi=e;this._theta=t}Object.defineProperty(e.prototype,"phi",{get:function(){return this._phi},set:function(e){this._phi=e},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"theta",{get:function(){return this._theta},set:function(e){this._theta=e},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"isZero",{get:function(){return this._phi===0&&this._theta===0},enumerable:true,configurable:true});e.prototype.copy=function(e){this._phi=e.phi;this._theta=e.theta};e.prototype.lerp=function(e,t){this._phi=(1-t)*this._phi+t*e.phi;this._theta=(1-t)*this._theta+t*e.theta};e.prototype.multiply=function(e){this._phi*=e;this._theta*=e};e.prototype.threshold=function(e){this._phi=Math.abs(this._phi)>e?this._phi:0;this._theta=Math.abs(this._theta)>e?this._theta:0};e.prototype.lengthSquared=function(){return this._phi*this._phi+this._theta*this._theta};e.prototype.reset=function(){this._phi=0;this._theta=0};return e}();r.RotationDelta=n;r.default=n},{}],412:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n;(function(e){e[e["Earth"]=0]="Earth";e[e["Traversing"]=1]="Traversing";e[e["Waiting"]=2]="Waiting";e[e["WaitingInteractively"]=3]="WaitingInteractively"})(n=r.State||(r.State={}));r.default=n},{}],413:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("../State");var i=e("../Geo");var o=function(){function e(e){this._state=new n.TraversingState({alpha:1,camera:new i.Camera,currentIndex:-1,reference:{alt:0,lat:0,lon:0},trajectory:[],transitionMode:e==null?n.TransitionMode.Default:e,zoom:0})}e.prototype.earth=function(){this._state=this._state.earth()};e.prototype.traverse=function(){this._state=this._state.traverse()};e.prototype.wait=function(){this._state=this._state.wait()};e.prototype.waitInteractively=function(){this._state=this._state.waitInteractively()};Object.defineProperty(e.prototype,"state",{get:function(){if(this._state instanceof n.EarthState){return n.State.Earth}else if(this._state instanceof n.TraversingState){return n.State.Traversing}else if(this._state instanceof n.WaitingState){return n.State.Waiting}else if(this._state instanceof n.InteractiveWaitingState){return n.State.WaitingInteractively}throw new Error("Invalid state")},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"reference",{get:function(){return this._state.reference},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"alpha",{get:function(){return this._state.alpha},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"camera",{get:function(){return this._state.camera},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"zoom",{get:function(){return this._state.zoom},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"currentNode",{get:function(){return this._state.currentNode},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"previousNode",{get:function(){return this._state.previousNode},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"currentCamera",{get:function(){return this._state.currentCamera},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"currentTransform",{get:function(){return this._state.currentTransform},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"previousTransform",{get:function(){return this._state.previousTransform},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"trajectory",{get:function(){return this._state.trajectory},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"currentIndex",{get:function(){return this._state.currentIndex},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"lastNode",{get:function(){return this._state.trajectory[this._state.trajectory.length-1]},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"nodesAhead",{get:function(){return this._state.trajectory.length-1-this._state.currentIndex},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"motionless",{get:function(){return this._state.motionless},enumerable:true,configurable:true});e.prototype.getCenter=function(){return this._state.getCenter()};e.prototype.setCenter=function(e){this._state.setCenter(e)};e.prototype.setZoom=function(e){this._state.setZoom(e)};e.prototype.update=function(e){this._state.update(e)};e.prototype.append=function(e){this._state.append(e)};e.prototype.prepend=function(e){this._state.prepend(e)};e.prototype.remove=function(e){this._state.remove(e)};e.prototype.clear=function(){this._state.clear()};e.prototype.clearPrior=function(){this._state.clearPrior()};e.prototype.cut=function(){this._state.cut()};e.prototype.set=function(e){this._state.set(e)};e.prototype.rotate=function(e){this._state.rotate(e)};e.prototype.rotateUnbounded=function(e){this._state.rotateUnbounded(e)};e.prototype.rotateWithoutInertia=function(e){this._state.rotateWithoutInertia(e)};e.prototype.rotateBasic=function(e){this._state.rotateBasic(e)};e.prototype.rotateBasicUnbounded=function(e){this._state.rotateBasicUnbounded(e)};e.prototype.rotateBasicWithoutInertia=function(e){this._state.rotateBasicWithoutInertia(e)};e.prototype.rotateToBasic=function(e){this._state.rotateToBasic(e)};e.prototype.move=function(e){this._state.move(e)};e.prototype.moveTo=function(e){this._state.moveTo(e)};e.prototype.zoomIn=function(e,t){this._state.zoomIn(e,t)};e.prototype.setSpeed=function(e){this._state.setSpeed(e)};e.prototype.setTransitionMode=function(e){this._state.setTransitionMode(e)};e.prototype.dolly=function(e){this._state.dolly(e)};e.prototype.orbit=function(e){this._state.orbit(e)};e.prototype.truck=function(e){this._state.truck(e)};return e}();r.StateContext=o},{"../Geo":278,"../State":282}],414:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var i=e("rxjs");var o=e("rxjs/operators");var a=e("../State");var n=function(){function e(e){var t=this;this._appendNode$=new i.Subject;this._start$=new i.Subject;this._frame$=new i.Subject;this._fpsSampleRate=30;this._contextOperation$=new i.BehaviorSubject(function(e){return e});this._context$=this._contextOperation$.pipe(o.scan(function(e,t){return t(e)},new a.StateContext(e)),o.publishReplay(1),o.refCount());this._state$=this._context$.pipe(o.map(function(e){return e.state}),o.distinctUntilChanged(),o.publishReplay(1),o.refCount());this._fps$=this._start$.pipe(o.switchMap(function(){return t._frame$.pipe(o.bufferCount(1,t._fpsSampleRate),o.map(function(e){return(new Date).getTime()}),o.pairwise(),o.map(function(e){return Math.max(20,1e3*t._fpsSampleRate/(e[1]-e[0]))}),o.startWith(60))}),o.share());this._currentState$=this._frame$.pipe(o.withLatestFrom(this._fps$,this._context$,function(e,t,r){return[e,t,r]}),o.filter(function(e){return e[2].currentNode!=null}),o.tap(function(e){e[2].update(e[1])}),o.map(function(e){return{fps:e[1],id:e[0],state:e[2]}}),o.share());this._lastState$=this._currentState$.pipe(o.publishReplay(1),o.refCount());var r=this._currentState$.pipe(o.distinctUntilChanged(undefined,function(e){return e.state.currentNode.key}),o.publishReplay(1),o.refCount());var n=new i.Subject;r.subscribe(n);this._currentKey$=new i.BehaviorSubject(null);n.pipe(o.map(function(e){return e.state.currentNode.key})).subscribe(this._currentKey$);this._currentNode$=n.pipe(o.map(function(e){return e.state.currentNode}),o.publishReplay(1),o.refCount());this._currentCamera$=n.pipe(o.map(function(e){return e.state.currentCamera}),o.publishReplay(1),o.refCount());this._currentTransform$=n.pipe(o.map(function(e){return e.state.currentTransform}),o.publishReplay(1),o.refCount());this._reference$=n.pipe(o.map(function(e){return e.state.reference}),o.distinctUntilChanged(function(e,t){return e.lat===t.lat&&e.lon===t.lon},function(e){return{lat:e.lat,lon:e.lon}}),o.publishReplay(1),o.refCount());this._currentNodeExternal$=r.pipe(o.map(function(e){return e.state.currentNode}),o.publishReplay(1),o.refCount());this._appendNode$.pipe(o.map(function(t){return function(e){e.append([t]);return e}})).subscribe(this._contextOperation$);this._inMotionOperation$=new i.Subject;r.pipe(o.map(function(e){return true})).subscribe(this._inMotionOperation$);this._inMotionOperation$.pipe(o.distinctUntilChanged(),o.filter(function(e){return e}),o.switchMap(function(e){return t._currentState$.pipe(o.filter(function(e){return e.state.nodesAhead===0}),o.map(function(e){return[e.state.camera.clone(),e.state.zoom]}),o.pairwise(),o.map(function(e){var t=e[0][0];var r=e[1][0];var n=e[0][1];var i=e[1][1];return t.diff(r)>1e-5||Math.abs(n-i)>1e-5}),o.first(function(e){return!e}))})).subscribe(this._inMotionOperation$);this._inMotion$=this._inMotionOperation$.pipe(o.distinctUntilChanged(),o.publishReplay(1),o.refCount());this._inTranslationOperation$=new i.Subject;r.pipe(o.map(function(e){return true})).subscribe(this._inTranslationOperation$);this._inTranslationOperation$.pipe(o.distinctUntilChanged(),o.filter(function(e){return e}),o.switchMap(function(e){return t._currentState$.pipe(o.filter(function(e){return e.state.nodesAhead===0}),o.map(function(e){return e.state.camera.position.clone()}),o.pairwise(),o.map(function(e){return e[0].distanceToSquared(e[1])!==0}),o.first(function(e){return!e}))})).subscribe(this._inTranslationOperation$);this._inTranslation$=this._inTranslationOperation$.pipe(o.distinctUntilChanged(),o.publishReplay(1),o.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 a.FrameGenerator(window)}Object.defineProperty(e.prototype,"currentState$",{get:function(){return this._currentState$},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"currentNode$",{get:function(){return this._currentNode$},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"currentKey$",{get:function(){return this._currentKey$},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"currentNodeExternal$",{get:function(){return this._currentNodeExternal$},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"currentCamera$",{get:function(){return this._currentCamera$},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"currentTransform$",{get:function(){return this._currentTransform$},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"state$",{get:function(){return this._state$},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"reference$",{get:function(){return this._reference$},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"inMotion$",{get:function(){return this._inMotion$},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"inTranslation$",{get:function(){return this._inTranslation$},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"appendNode$",{get:function(){return this._appendNode$},enumerable:true,configurable:true});e.prototype.earth=function(){this._inMotionOperation$.next(true);this._invokeContextOperation(function(e){e.earth()})};e.prototype.traverse=function(){this._inMotionOperation$.next(true);this._invokeContextOperation(function(e){e.traverse()})};e.prototype.wait=function(){this._invokeContextOperation(function(e){e.wait()})};e.prototype.waitInteractively=function(){this._invokeContextOperation(function(e){e.waitInteractively()})};e.prototype.appendNodes=function(t){this._invokeContextOperation(function(e){e.append(t)})};e.prototype.prependNodes=function(t){this._invokeContextOperation(function(e){e.prepend(t)})};e.prototype.removeNodes=function(t){this._invokeContextOperation(function(e){e.remove(t)})};e.prototype.clearNodes=function(){this._invokeContextOperation(function(e){e.clear()})};e.prototype.clearPriorNodes=function(){this._invokeContextOperation(function(e){e.clearPrior()})};e.prototype.cutNodes=function(){this._invokeContextOperation(function(e){e.cut()})};e.prototype.setNodes=function(t){this._invokeContextOperation(function(e){e.set(t)})};e.prototype.rotate=function(t){this._inMotionOperation$.next(true);this._invokeContextOperation(function(e){e.rotate(t)})};e.prototype.rotateUnbounded=function(t){this._inMotionOperation$.next(true);this._invokeContextOperation(function(e){e.rotateUnbounded(t)})};e.prototype.rotateWithoutInertia=function(t){this._inMotionOperation$.next(true);this._invokeContextOperation(function(e){e.rotateWithoutInertia(t)})};e.prototype.rotateBasic=function(t){this._inMotionOperation$.next(true);this._invokeContextOperation(function(e){e.rotateBasic(t)})};e.prototype.rotateBasicUnbounded=function(t){this._inMotionOperation$.next(true);this._invokeContextOperation(function(e){e.rotateBasicUnbounded(t)})};e.prototype.rotateBasicWithoutInertia=function(t){this._inMotionOperation$.next(true);this._invokeContextOperation(function(e){e.rotateBasicWithoutInertia(t)})};e.prototype.rotateToBasic=function(t){this._inMotionOperation$.next(true);this._invokeContextOperation(function(e){e.rotateToBasic(t)})};e.prototype.move=function(t){this._inMotionOperation$.next(true);this._invokeContextOperation(function(e){e.move(t)})};e.prototype.moveTo=function(t){this._inMotionOperation$.next(true);this._invokeContextOperation(function(e){e.moveTo(t)})};e.prototype.dolly=function(t){this._inMotionOperation$.next(true);this._invokeContextOperation(function(e){e.dolly(t)})};e.prototype.orbit=function(t){this._inMotionOperation$.next(true);this._invokeContextOperation(function(e){e.orbit(t)})};e.prototype.truck=function(t){this._inMotionOperation$.next(true);this._invokeContextOperation(function(e){e.truck(t)})};e.prototype.zoomIn=function(t,r){this._inMotionOperation$.next(true);this._invokeContextOperation(function(e){e.zoomIn(t,r)})};e.prototype.getCenter=function(){return this._lastState$.pipe(o.first(),o.map(function(e){return e.state.getCenter()}))};e.prototype.getZoom=function(){return this._lastState$.pipe(o.first(),o.map(function(e){return e.state.zoom}))};e.prototype.setCenter=function(t){this._inMotionOperation$.next(true);this._invokeContextOperation(function(e){e.setCenter(t)})};e.prototype.setSpeed=function(t){this._invokeContextOperation(function(e){e.setSpeed(t)})};e.prototype.setTransitionMode=function(t){this._invokeContextOperation(function(e){e.setTransitionMode(t)})};e.prototype.setZoom=function(t){this._inMotionOperation$.next(true);this._invokeContextOperation(function(e){e.setZoom(t)})};e.prototype.start=function(){if(this._frameId==null){this._start$.next(null);this._frameId=this._frameGenerator.requestAnimationFrame(this._frame.bind(this));this._frame$.next(this._frameId)}};e.prototype.stop=function(){if(this._frameId!=null){this._frameGenerator.cancelAnimationFrame(this._frameId);this._frameId=null}};e.prototype._invokeContextOperation=function(t){this._contextOperation$.next(function(e){t(e);return e})};e.prototype._frame=function(e){this._frameId=this._frameGenerator.requestAnimationFrame(this._frame.bind(this));this._frame$.next(this._frameId)};return e}();r.StateService=n},{"../State":282,rxjs:27,"rxjs/operators":225}],415:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n;(function(e){e[e["Default"]=0]="Default";e[e["Instantaneous"]=1]="Instantaneous"})(n=r.TransitionMode||(r.TransitionMode={}));r.default=n},{}],416:[function(e,t,r){"use strict";var i=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var u=e("three");var o=e("../../State");var n=function(n){i(e,n);function e(e){var t=n.call(this,e)||this;var r=t._camera.lookat.clone().sub(t._camera.position).normalize();t._camera.lookat.copy(t._camera.position);t._camera.position.z=e.camera.position.z+20;t._camera.position.x=e.camera.position.x-16*r.x;t._camera.position.y=e.camera.position.y-16*r.y;t._camera.up.set(0,0,1);return t}e.prototype.traverse=function(){return new o.TraversingState(this)};e.prototype.wait=function(){return new o.WaitingState(this)};e.prototype.waitInteractively=function(){return new o.InteractiveWaitingState(this)};e.prototype.dolly=function(e){var t=this._camera;var r=(new u.Vector3).copy(t.position).sub(t.lookat);var n=r.length();var i=n*Math.pow(2,-e);var o=Math.max(1,Math.min(i,1e3));r.normalize();r.multiplyScalar(o);t.position.copy(t.lookat).add(r)};e.prototype.orbit=function(e){var t=this._camera;var r=(new u.Quaternion).setFromUnitVectors(t.up,new u.Vector3(0,0,1));var n=r.clone().inverse();var i=new u.Vector3;i.copy(t.position).sub(t.lookat);i.applyQuaternion(r);var o=i.length();var a=Math.atan2(i.y,i.x);a+=e.phi;var s=Math.atan2(Math.sqrt(i.x*i.x+i.y*i.y),i.z);s+=e.theta;s=Math.max(.1,Math.min(Math.PI-.1,s));i.x=Math.sin(s)*Math.cos(a);i.y=Math.sin(s)*Math.sin(a);i.z=Math.cos(s);i.applyQuaternion(n);t.position.copy(t.lookat).add(i.multiplyScalar(o))};e.prototype.truck=function(e){this._camera.position.add((new u.Vector3).fromArray(e));this._camera.lookat.add((new u.Vector3).fromArray(e))};e.prototype.update=function(){};return e}(o.StateBase);r.EarthState=n;r.default=n},{"../../State":282,three:226}],417:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var p=e("three");var i=e("../../State");var o=function(r){n(e,r);function e(e){var t=r.call(this,e)||this;t._animationSpeed=1/40;t._rotationDelta=new i.RotationDelta(0,0);t._requestedRotationDelta=null;t._basicRotation=[0,0];t._requestedBasicRotation=null;t._requestedBasicRotationUnbounded=null;t._rotationAcceleration=.86;t._rotationIncreaseAlpha=.97;t._rotationDecreaseAlpha=.9;t._rotationThreshold=.001;t._unboundedRotationAlpha=.8;t._desiredZoom=e.zoom;t._minZoom=0;t._maxZoom=3;t._lookatDepth=10;t._desiredLookat=null;t._desiredCenter=null;return t}e.prototype.rotate=function(e){if(this._currentNode==null){return}this._desiredZoom=this._zoom;this._desiredLookat=null;this._requestedBasicRotation=null;if(this._requestedRotationDelta!=null){this._requestedRotationDelta.phi=this._requestedRotationDelta.phi+e.phi;this._requestedRotationDelta.theta=this._requestedRotationDelta.theta+e.theta}else{this._requestedRotationDelta=new i.RotationDelta(e.phi,e.theta)}};e.prototype.rotateUnbounded=function(e){if(this._currentNode==null){return}this._requestedBasicRotation=null;this._requestedRotationDelta=null;this._applyRotation(e,this._currentCamera);this._applyRotation(e,this._previousCamera);if(!this._desiredLookat){return}var t=(new p.Quaternion).setFromUnitVectors(this._currentCamera.up,new p.Vector3(0,0,1));var r=t.clone().inverse();var n=(new p.Vector3).copy(this._desiredLookat).sub(this._camera.position).applyQuaternion(t);var i=n.length();var o=Math.atan2(n.y,n.x);o+=e.phi;var a=Math.atan2(Math.sqrt(n.x*n.x+n.y*n.y),n.z);a+=e.theta;a=Math.max(.1,Math.min(Math.PI-.1,a));n.x=Math.sin(a)*Math.cos(o);n.y=Math.sin(a)*Math.sin(o);n.z=Math.cos(a);n.applyQuaternion(r);this._desiredLookat.copy(this._camera.position).add(n.multiplyScalar(i))};e.prototype.rotateWithoutInertia=function(e){if(this._currentNode==null){return}this._desiredZoom=this._zoom;this._desiredLookat=null;this._requestedBasicRotation=null;this._requestedRotationDelta=null;var t=Math.PI/(10*Math.pow(2,this._zoom));var r={phi:this._spatial.clamp(e.phi,-t,t),theta:this._spatial.clamp(e.theta,-t,t)};this._applyRotation(r,this._currentCamera);this._applyRotation(r,this._previousCamera)};e.prototype.rotateBasic=function(e){if(this._currentNode==null){return}this._desiredZoom=this._zoom;this._desiredLookat=null;this._requestedRotationDelta=null;if(this._requestedBasicRotation!=null){this._requestedBasicRotation[0]+=e[0];this._requestedBasicRotation[1]+=e[1];var t=.05/Math.pow(2,this._zoom);this._requestedBasicRotation[0]=this._spatial.clamp(this._requestedBasicRotation[0],-t,t);this._requestedBasicRotation[1]=this._spatial.clamp(this._requestedBasicRotation[1],-t,t)}else{this._requestedBasicRotation=e.slice()}};e.prototype.rotateBasicUnbounded=function(e){if(this._currentNode==null){return}if(this._requestedBasicRotationUnbounded!=null){this._requestedBasicRotationUnbounded[0]+=e[0];this._requestedBasicRotationUnbounded[1]+=e[1]}else{this._requestedBasicRotationUnbounded=e.slice()}};e.prototype.rotateBasicWithoutInertia=function(e){if(this._currentNode==null){return}this._desiredZoom=this._zoom;this._desiredLookat=null;this._requestedRotationDelta=null;this._requestedBasicRotation=null;var t=.05/Math.pow(2,this._zoom);var r=e.slice();r[0]=this._spatial.clamp(r[0],-t,t);r[1]=this._spatial.clamp(r[1],-t,t);this._applyRotationBasic(r)};e.prototype.rotateToBasic=function(e){if(this._currentNode==null){return}this._desiredZoom=this._zoom;this._desiredLookat=null;e[0]=this._spatial.clamp(e[0],0,1);e[1]=this._spatial.clamp(e[1],0,1);var t=this.currentTransform.unprojectBasic(e,this._lookatDepth);this._currentCamera.lookat.fromArray(t)};e.prototype.zoomIn=function(e,t){if(this._currentNode==null){return}this._desiredZoom=Math.max(this._minZoom,Math.min(this._maxZoom,this._desiredZoom+e));var r=this.currentTransform.projectBasic(this._currentCamera.lookat.toArray());var n=r[0];var i=r[1];var o=Math.pow(2,this._zoom);var a=Math.pow(2,this._desiredZoom);var s=t[0];var u=t[1];if(this.currentTransform.gpano!=null&&this.currentTransform.gpano.CroppedAreaImageWidthPixels===this.currentTransform.gpano.FullPanoWidthPixels){if(s-n>.5){s=s-1}else if(n-s>.5){s=1+s}}var c=s-o/a*(s-n);var h=u-o/a*(u-i);var l=this.currentTransform.gpano;if(this._currentNode.fullPano){c=this._spatial.wrap(c+this._basicRotation[0],0,1);h=this._spatial.clamp(h+this._basicRotation[1],.05,.95)}else if(l!=null&&this.currentTransform.gpano.CroppedAreaImageWidthPixels===this.currentTransform.gpano.FullPanoWidthPixels){c=this._spatial.wrap(c+this._basicRotation[0],0,1);h=this._spatial.clamp(h+this._basicRotation[1],0,1)}else{c=this._spatial.clamp(c,0,1);h=this._spatial.clamp(h,0,1)}this._desiredLookat=(new p.Vector3).fromArray(this.currentTransform.unprojectBasic([c,h],this._lookatDepth))};e.prototype.setCenter=function(e){this._desiredLookat=null;this._requestedRotationDelta=null;this._requestedBasicRotation=null;this._desiredZoom=this._zoom;var t=[this._spatial.clamp(e[0],0,1),this._spatial.clamp(e[1],0,1)];if(this._currentNode==null){this._desiredCenter=t;return}this._desiredCenter=null;var r=(new p.Vector3).fromArray(this.currentTransform.unprojectBasic(t,this._lookatDepth));var n=this.previousTransform!=null?this.previousTransform:this.currentTransform;var i=(new p.Vector3).fromArray(n.unprojectBasic(t,this._lookatDepth));this._currentCamera.lookat.copy(r);this._previousCamera.lookat.copy(i)};e.prototype.setZoom=function(e){this._desiredLookat=null;this._requestedRotationDelta=null;this._requestedBasicRotation=null;this._zoom=this._spatial.clamp(e,this._minZoom,this._maxZoom);this._desiredZoom=this._zoom};e.prototype._applyRotation=function(e,t){if(t==null){return}var r=(new p.Quaternion).setFromUnitVectors(t.up,new p.Vector3(0,0,1));var n=r.clone().inverse();var i=new p.Vector3;i.copy(t.lookat).sub(t.position);i.applyQuaternion(r);var o=i.length();var a=Math.atan2(i.y,i.x);a+=e.phi;var s=Math.atan2(Math.sqrt(i.x*i.x+i.y*i.y),i.z);s+=e.theta;s=Math.max(.1,Math.min(Math.PI-.1,s));i.x=Math.sin(s)*Math.cos(a);i.y=Math.sin(s)*Math.sin(a);i.z=Math.cos(s);i.applyQuaternion(n);t.lookat.copy(t.position).add(i.multiplyScalar(o))};e.prototype._applyRotationBasic=function(e){var t=this._currentNode;var r=this._previousNode!=null?this.previousNode:this.currentNode;var n=this._currentCamera;var i=this._previousCamera;var o=this.currentTransform;var a=this.previousTransform!=null?this.previousTransform:this.currentTransform;var s=o.projectBasic(n.lookat.toArray());var u=a.projectBasic(i.lookat.toArray());var c=o.gpano;var h=a.gpano;if(t.fullPano){s[0]=this._spatial.wrap(s[0]+e[0],0,1);s[1]=this._spatial.clamp(s[1]+e[1],.05,.95)}else if(c!=null&&o.gpano.CroppedAreaImageWidthPixels===o.gpano.FullPanoWidthPixels){s[0]=this._spatial.wrap(s[0]+e[0],0,1);s[1]=this._spatial.clamp(s[1]+e[1],0,1)}else{s[0]=this._spatial.clamp(s[0]+e[0],0,1);s[1]=this._spatial.clamp(s[1]+e[1],0,1)}if(r.fullPano){u[0]=this._spatial.wrap(u[0]+e[0],0,1);u[1]=this._spatial.clamp(u[1]+e[1],.05,.95)}else if(h!=null&&a.gpano.CroppedAreaImageWidthPixels===a.gpano.FullPanoWidthPixels){u[0]=this._spatial.wrap(u[0]+e[0],0,1);u[1]=this._spatial.clamp(u[1]+e[1],0,1)}else{u[0]=this._spatial.clamp(u[0]+e[0],0,1);u[1]=this._spatial.clamp(s[1]+e[1],0,1)}var l=o.unprojectBasic(s,this._lookatDepth);n.lookat.fromArray(l);var p=a.unprojectBasic(u,this._lookatDepth);i.lookat.fromArray(p)};e.prototype._updateZoom=function(e){var t=this._desiredZoom-this._zoom;var r=t>0?1:t<0?-1:0;if(t===0){return}else if(Math.abs(t)<.002){this._zoom=this._desiredZoom;if(this._desiredLookat!=null){this._desiredLookat=null}}else{this._zoom+=r*Math.max(Math.abs(5*e*t),.002)}};e.prototype._updateLookat=function(e){if(this._desiredLookat===null){return}var t=this._desiredLookat.distanceToSquared(this._currentCamera.lookat);if(Math.abs(t)<1e-6){this._currentCamera.lookat.copy(this._desiredLookat);this._desiredLookat=null}else{this._currentCamera.lookat.lerp(this._desiredLookat,5*e)}};e.prototype._updateRotation=function(){if(this._requestedRotationDelta!=null){var e=this._rotationDelta.lengthSquared();var t=this._requestedRotationDelta.lengthSquared();if(t>e){this._rotationDelta.lerp(this._requestedRotationDelta,this._rotationIncreaseAlpha)}else{this._rotationDelta.lerp(this._requestedRotationDelta,this._rotationDecreaseAlpha)}this._requestedRotationDelta=null;return}if(this._rotationDelta.isZero){return}this._rotationDelta.multiply(this._rotationAcceleration);this._rotationDelta.threshold(this._rotationThreshold)};e.prototype._updateRotationBasic=function(){if(this._requestedBasicRotation!=null){var e=this._basicRotation[0];var t=this._basicRotation[1];var r=this._requestedBasicRotation[0];var n=this._requestedBasicRotation[1];if(Math.abs(r)>Math.abs(e)){this._basicRotation[0]=(1-this._rotationIncreaseAlpha)*e+this._rotationIncreaseAlpha*r}else{this._basicRotation[0]=(1-this._rotationDecreaseAlpha)*e+this._rotationDecreaseAlpha*r}if(Math.abs(n)>Math.abs(t)){this._basicRotation[1]=(1-this._rotationIncreaseAlpha)*t+this._rotationIncreaseAlpha*n}else{this._basicRotation[1]=(1-this._rotationDecreaseAlpha)*t+this._rotationDecreaseAlpha*n}this._requestedBasicRotation=null;return}if(this._requestedBasicRotationUnbounded!=null){var r=this._requestedBasicRotationUnbounded[0];var n=this._requestedBasicRotationUnbounded[1];if(Math.abs(r)>0){this._basicRotation[0]=(1-this._unboundedRotationAlpha)*this._basicRotation[0]+this._unboundedRotationAlpha*r}if(Math.abs(n)>0){this._basicRotation[1]=(1-this._unboundedRotationAlpha)*this._basicRotation[1]+this._unboundedRotationAlpha*n}if(this._desiredLookat!=null){var i=this.currentTransform.projectBasic(this._desiredLookat.toArray());i[0]+=r;i[1]+=n;this._desiredLookat=(new p.Vector3).fromArray(this.currentTransform.unprojectBasic(i,this._lookatDepth))}this._requestedBasicRotationUnbounded=null}if(this._basicRotation[0]===0&&this._basicRotation[1]===0){return}this._basicRotation[0]=this._rotationAcceleration*this._basicRotation[0];this._basicRotation[1]=this._rotationAcceleration*this._basicRotation[1];if(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(){if(this._currentNode.fullPano){return}if(this._requestedRotationDelta!=null){this._requestedRotationDelta=null}if(!this._rotationDelta.isZero){this._rotationDelta.reset()}if(this._requestedBasicRotation!=null){this._requestedBasicRotation=null}if(this._basicRotation[0]>0||this._basicRotation[1]>0){this._basicRotation=[0,0]}};e.prototype._setDesiredCenter=function(){if(this._desiredCenter==null){return}var e=(new p.Vector3).fromArray(this.currentTransform.unprojectBasic(this._desiredCenter,this._lookatDepth)).sub(this._currentCamera.position);this._currentCamera.lookat.copy(this._currentCamera.position.clone().add(e));this._previousCamera.lookat.copy(this._previousCamera.position.clone().add(e));this._desiredCenter=null};e.prototype._setDesiredZoom=function(){this._desiredZoom=this._currentNode.fullPano||this._previousNode==null?this._zoom:0};return e}(i.StateBase);r.InteractiveStateBase=o;r.default=o},{"../../State":282,three:226}],418:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var i=e("../../State");var o=function(r){n(e,r);function e(e){var t=r.call(this,e)||this;t._adjustCameras();t._motionless=t._motionlessTransition();return t}e.prototype.traverse=function(){return new i.TraversingState(this)};e.prototype.wait=function(){return new i.WaitingState(this)};e.prototype.prepend=function(e){r.prototype.prepend.call(this,e);this._motionless=this._motionlessTransition()};e.prototype.set=function(e){r.prototype.set.call(this,e);this._motionless=this._motionlessTransition()};e.prototype.move=function(e){this._alpha=Math.max(0,Math.min(1,this._alpha+e))};e.prototype.moveTo=function(e){this._alpha=Math.max(0,Math.min(1,e))};e.prototype.update=function(e){this._updateRotation();if(!this._rotationDelta.isZero){this._applyRotation(this._rotationDelta,this._previousCamera);this._applyRotation(this._rotationDelta,this._currentCamera)}this._updateRotationBasic();if(this._basicRotation[0]!==0||this._basicRotation[1]!==0){this._applyRotationBasic(this._basicRotation)}var t=this._animationSpeed*(60/e);this._updateZoom(t);this._updateLookat(t);this._camera.lerpCameras(this._previousCamera,this._currentCamera,this.alpha)};e.prototype._getAlpha=function(){return this._motionless?Math.round(this._alpha):this._alpha};e.prototype._setCurrentCamera=function(){r.prototype._setCurrentCamera.call(this);this._adjustCameras()};e.prototype._adjustCameras=function(){if(this._previousNode==null){return}if(this._currentNode.fullPano){var e=this._camera.lookat.clone().sub(this._camera.position);this._currentCamera.lookat.copy(e.clone().add(this._currentCamera.position))}if(this._previousNode.fullPano){var e=this._currentCamera.lookat.clone().sub(this._currentCamera.position);this._previousCamera.lookat.copy(e.clone().add(this._previousCamera.position))}};return e}(i.InteractiveStateBase);r.InteractiveWaitingState=o;r.default=o},{"../../State":282}],419:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var a=e("../../Error");var s=e("../../Geo");var n=e("../../State");var i=function(){function e(e){this._spatial=new s.Spatial;this._geoCoords=new s.GeoCoords;this._referenceThreshold=.01;this._transitionMode=e.transitionMode;this._reference=e.reference;this._alpha=e.alpha;this._camera=e.camera.clone();this._zoom=e.zoom;this._currentIndex=e.currentIndex;this._trajectory=e.trajectory.slice();this._trajectoryTransforms=[];this._trajectoryCameras=[];for(var t=0,r=this._trajectory;t<r.length;t++){var n=r[t];var i=this._nodeToTranslation(n,this._reference);var o=new s.Transform(n.orientation,n.width,n.height,n.focal,n.scale,n.gpano,n.rotation,i,n.image,undefined,n.ck1,n.ck2,n.cameraProjection);this._trajectoryTransforms.push(o);this._trajectoryCameras.push(new s.Camera(o))}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 s.Camera;this._previousCamera=this._trajectoryCameras.length>1&&this.currentIndex>0?this._trajectoryCameras[this._currentIndex-1].clone():this._currentCamera.clone()}Object.defineProperty(e.prototype,"reference",{get:function(){return this._reference},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"alpha",{get:function(){return this._getAlpha()},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"camera",{get:function(){return this._camera},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"zoom",{get:function(){return this._zoom},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"trajectory",{get:function(){return this._trajectory},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"currentIndex",{get:function(){return this._currentIndex},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"currentNode",{get:function(){return this._currentNode},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"previousNode",{get:function(){return this._previousNode},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"currentCamera",{get:function(){return this._currentCamera},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"currentTransform",{get:function(){return this._trajectoryTransforms.length>0?this._trajectoryTransforms[this.currentIndex]:null},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"previousTransform",{get:function(){return this._trajectoryTransforms.length>1&&this.currentIndex>0?this._trajectoryTransforms[this.currentIndex-1]:null},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"motionless",{get:function(){return this._motionless},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"transitionMode",{get:function(){return this._transitionMode},enumerable:true,configurable:true});e.prototype.earth=function(){throw new Error("Not implemented")};e.prototype.traverse=function(){throw new Error("Not implemented")};e.prototype.wait=function(){throw new Error("Not implemented")};e.prototype.waitInteractively=function(){throw new Error("Not implemented")};e.prototype.move=function(e){};e.prototype.moveTo=function(e){};e.prototype.rotate=function(e){};e.prototype.rotateUnbounded=function(e){};e.prototype.rotateWithoutInertia=function(e){};e.prototype.rotateBasic=function(e){};e.prototype.rotateBasicUnbounded=function(e){};e.prototype.rotateBasicWithoutInertia=function(e){};e.prototype.rotateToBasic=function(e){};e.prototype.setSpeed=function(e){};e.prototype.zoomIn=function(e,t){};e.prototype.update=function(e){};e.prototype.setCenter=function(e){};e.prototype.setZoom=function(e){};e.prototype.dolly=function(e){};e.prototype.orbit=function(e){};e.prototype.truck=function(e){};e.prototype.append=function(e){if(e.length<1){throw Error("Trajectory can not be empty")}if(this._currentIndex<0){this.set(e)}else{this._trajectory=this._trajectory.concat(e);this._appendToTrajectories(e)}};e.prototype.prepend=function(e){if(e.length<1){throw Error("Trajectory can not be empty")}this._trajectory=e.slice().concat(this._trajectory);this._currentIndex+=e.length;this._setCurrentNode();var t=this._setReference(this._currentNode);if(t){this._setTrajectories()}else{this._prependToTrajectories(e)}this._setCurrentCamera()};e.prototype.remove=function(e){if(e<0){throw Error("n must be a positive integer")}if(this._currentIndex-1<e){throw Error("Current and previous nodes can not be removed")}for(var t=0;t<e;t++){this._trajectory.shift();this._trajectoryTransforms.shift();this._trajectoryCameras.shift();this._currentIndex--}this._setCurrentNode()};e.prototype.clearPrior=function(){if(this._currentIndex>0){this.remove(this._currentIndex-1)}};e.prototype.clear=function(){this.cut();if(this._currentIndex>0){this.remove(this._currentIndex-1)}};e.prototype.cut=function(){while(this._trajectory.length-1>this._currentIndex){this._trajectory.pop();this._trajectoryTransforms.pop();this._trajectoryCameras.pop()}};e.prototype.set=function(e){this._setTrajectory(e);this._setCurrentNode();this._setReference(this._currentNode);this._setTrajectories();this._setCurrentCamera()};e.prototype.getCenter=function(){return this._currentNode!=null?this.currentTransform.projectBasic(this._camera.lookat.toArray()):[.5,.5]};e.prototype.setTransitionMode=function(e){this._transitionMode=e};e.prototype._getAlpha=function(){return 1};e.prototype._setCurrent=function(){this._setCurrentNode();var e=this._setReference(this._currentNode);if(e){this._setTrajectories()}this._setCurrentCamera()};e.prototype._setCurrentCamera=function(){this._currentCamera=this._trajectoryCameras[this._currentIndex].clone();this._previousCamera=this._currentIndex>0?this._trajectoryCameras[this._currentIndex-1].clone():this._currentCamera.clone()};e.prototype._motionlessTransition=function(){var e=this._currentNode!=null&&this._previousNode!=null;return e&&(this._transitionMode===n.TransitionMode.Instantaneous||!(this._currentNode.merged&&this._previousNode.merged&&this._withinOriginalDistance()&&this._sameConnectedComponent()))};e.prototype._setReference=function(e){if(Math.abs(e.latLon.lat-this.reference.lat)<this._referenceThreshold&&Math.abs(e.latLon.lon-this.reference.lon)<this._referenceThreshold){return false}if(this._previousNode!=null&&!this._motionlessTransition()){return false}this._reference.lat=e.latLon.lat;this._reference.lon=e.latLon.lon;this._reference.alt=e.alt;return true};e.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};e.prototype._setTrajectory=function(e){if(e.length<1){throw new a.ArgumentMapillaryError("Trajectory can not be empty")}if(this._currentNode!=null){this._trajectory=[this._currentNode].concat(e);this._currentIndex=1}else{this._trajectory=e.slice();this._currentIndex=0}};e.prototype._setTrajectories=function(){this._trajectoryTransforms.length=0;this._trajectoryCameras.length=0;this._appendToTrajectories(this._trajectory)};e.prototype._appendToTrajectories=function(e){for(var t=0,r=e;t<r.length;t++){var n=r[t];if(!n.assetsCached){throw new a.ArgumentMapillaryError("Assets must be cached when node is added to trajectory")}var i=this._nodeToTranslation(n,this.reference);var o=new s.Transform(n.orientation,n.width,n.height,n.focal,n.scale,n.gpano,n.rotation,i,n.image,undefined,n.ck1,n.ck2,n.cameraProjection);this._trajectoryTransforms.push(o);this._trajectoryCameras.push(new s.Camera(o))}};e.prototype._prependToTrajectories=function(e){for(var t=0,r=e.reverse();t<r.length;t++){var n=r[t];if(!n.assetsCached){throw new a.ArgumentMapillaryError("Assets must be cached when added to trajectory")}var i=this._nodeToTranslation(n,this.reference);var o=new s.Transform(n.orientation,n.width,n.height,n.focal,n.scale,n.gpano,n.rotation,i,n.image,undefined,n.ck1,n.ck2,n.cameraProjection);this._trajectoryTransforms.unshift(o);this._trajectoryCameras.unshift(new s.Camera(o))}};e.prototype._nodeToTranslation=function(e,t){return s.Geo.computeTranslation({alt:e.alt,lat:e.latLon.lat,lon:e.latLon.lon},e.rotation,t)};e.prototype._sameConnectedComponent=function(){var e=this._currentNode;var t=this._previousNode;return!!e&&!!t&&e.mergeCC===t.mergeCC};e.prototype._withinOriginalDistance=function(){var e=this._currentNode;var t=this._previousNode;if(!e||!t){return true}var r=this._spatial.distanceFromLatLon(e.originalLatLon.lat,e.originalLatLon.lon,t.originalLatLon.lat,t.originalLatLon.lon);return r<25};return e}();r.StateBase=i},{"../../Error":277,"../../Geo":278,"../../State":282}],420:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var i=e("@mapbox/unitbezier");var o=e("../../State");var a=function(r){n(e,r);function e(e){var t=r.call(this,e)||this;t._adjustCameras();t._motionless=t._motionlessTransition();t._baseAlpha=t._alpha;t._speedCoefficient=1;t._unitBezier=new i(.74,.67,.38,.96);t._useBezier=false;return t}e.prototype.earth=function(){return new o.EarthState(this)};e.prototype.wait=function(){return new o.WaitingState(this)};e.prototype.waitInteractively=function(){return new o.InteractiveWaitingState(this)};e.prototype.append=function(e){var t=this._trajectory.length===0;if(t){this._resetTransition()}r.prototype.append.call(this,e);if(t){this._setDesiredCenter();this._setDesiredZoom()}};e.prototype.prepend=function(e){var t=this._trajectory.length===0;if(t){this._resetTransition()}r.prototype.prepend.call(this,e);if(t){this._setDesiredCenter();this._setDesiredZoom()}};e.prototype.set=function(e){r.prototype.set.call(this,e);this._desiredLookat=null;this._resetTransition();this._clearRotation();this._setDesiredCenter();this._setDesiredZoom();if(this._trajectory.length<3){this._useBezier=true}};e.prototype.setSpeed=function(e){this._speedCoefficient=this._spatial.clamp(e,0,10)};e.prototype.update=function(e){if(this._alpha===1&&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 t=this._animationSpeed*(60/e);this._baseAlpha=Math.min(1,this._baseAlpha+this._speedCoefficient*t);if(this._useBezier){this._alpha=this._unitBezier.solve(this._baseAlpha)}else{this._alpha=this._baseAlpha}this._updateRotation();if(!this._rotationDelta.isZero){this._applyRotation(this._rotationDelta,this._previousCamera);this._applyRotation(this._rotationDelta,this._currentCamera)}this._updateRotationBasic();if(this._basicRotation[0]!==0||this._basicRotation[1]!==0){this._applyRotationBasic(this._basicRotation)}this._updateZoom(t);this._updateLookat(t);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(){r.prototype._setCurrentCamera.call(this);this._adjustCameras()};e.prototype._adjustCameras=function(){if(this._previousNode==null){return}var e=this._camera.lookat.clone().sub(this._camera.position);this._previousCamera.lookat.copy(e.clone().add(this._previousCamera.position));if(this._currentNode.fullPano){this._currentCamera.lookat.copy(e.clone().add(this._currentCamera.position))}};e.prototype._resetTransition=function(){this._alpha=0;this._baseAlpha=0;this._motionless=this._motionlessTransition()};return e}(o.InteractiveStateBase);r.TraversingState=a;r.default=a},{"../../State":282,"@mapbox/unitbezier":2}],421:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var i=e("../../State");var o=function(r){n(e,r);function e(e){var t=r.call(this,e)||this;t._zoom=0;t._adjustCameras();t._motionless=t._motionlessTransition();return t}e.prototype.traverse=function(){return new i.TraversingState(this)};e.prototype.waitInteractively=function(){return new i.InteractiveWaitingState(this)};e.prototype.prepend=function(e){r.prototype.prepend.call(this,e);this._motionless=this._motionlessTransition()};e.prototype.set=function(e){r.prototype.set.call(this,e);this._motionless=this._motionlessTransition()};e.prototype.move=function(e){this._alpha=Math.max(0,Math.min(1,this._alpha+e))};e.prototype.moveTo=function(e){this._alpha=Math.max(0,Math.min(1,e))};e.prototype.update=function(e){this._camera.lerpCameras(this._previousCamera,this._currentCamera,this.alpha)};e.prototype._getAlpha=function(){return this._motionless?Math.round(this._alpha):this._alpha};e.prototype._setCurrentCamera=function(){r.prototype._setCurrentCamera.call(this);this._adjustCameras()};e.prototype._adjustCameras=function(){if(this._previousNode==null){return}if(this._currentNode.fullPano){var e=this._camera.lookat.clone().sub(this._camera.position);this._currentCamera.lookat.copy(e.clone().add(this._currentCamera.position))}if(this._previousNode.fullPano){var e=this._currentCamera.lookat.clone().sub(this._currentCamera.position);this._previousCamera.lookat.copy(e.clone().add(this._previousCamera.position))}};return e}(i.StateBase);r.WaitingState=o;r.default=o},{"../../State":282}],422:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("rxjs");var i=function(){function e(e,t,r){this._scheme=e;this._host=t;this._origin=r!=null?"?origin="+r:""}e.prototype.getTile=function(i,o,a,s,u,e,t){var r="/"+i+"/"+o+","+a+","+s+","+u+"/"+e+","+t+"/0/default.jpg";var c=this._scheme+"://"+this._host+r+this._origin;var h=null;return[n.Observable.create(function(n){h=new XMLHttpRequest;h.open("GET",c,true);h.responseType="arraybuffer";h.timeout=15e3;h.onload=function(e){if(h.status!==200){n.error(new Error("Failed to fetch tile ("+i+": "+o+","+a+","+s+","+u+"). "+("Status: "+h.status+", "+h.statusText)));return}var t=new Image;t.crossOrigin="Anonymous";t.onload=function(e){n.next(t);n.complete()};t.onerror=function(e){n.error(new Error("Failed to load tile image ("+i+": "+o+","+a+","+s+","+u+")"))};var r=new Blob([h.response]);t.src=window.URL.createObjectURL(r)};h.onerror=function(e){n.error(new Error("Failed to fetch tile ("+i+": "+o+","+a+","+s+","+u+")"))};h.ontimeout=function(e){n.error(new Error("Tile request timed out ("+i+": "+o+","+a+","+s+","+u+")"))};h.onabort=function(e){n.error(new Error("Tile request was aborted ("+i+": "+o+","+a+","+s+","+u+")"))};h.send(null)}),function(){if(h!=null){h.abort()}}]};return e}();r.ImageTileLoader=i;r.default=i},{rxjs:27}],423:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=function(){function e(){this._images={}}e.prototype.addImage=function(e,t,r){if(!(r in this._images)){this._images[r]={}}this._images[r][t]=e};e.prototype.dispose=function(){for(var e=0,t=Object.keys(this._images);e<t.length;e++){var r=t[e];var n=this._images[r];for(var 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]}};e.prototype.getImage=function(e,t){return this._images[t][e]};e.prototype.hasImage=function(e,t){return t in this._images&&e in this._images[t]};return e}();r.ImageTileStore=n;r.default=n},{}],424:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("../Geo");var i=function(){function e(){this._viewportCoords=new n.ViewportCoords}e.prototype.computeRegionOfInterest=function(e,t,r){var n=this._viewportBoundaryPoints(4);var i=this._viewportPointsBoundingBox(n,e,r);this._clipBoundingBox(i);var o=2/t.width;var a=2/t.height;var s=[[-.5*o,.5*a],[.5*o,.5*a],[.5*o,-.5*a],[-.5*o,-.5*a]];var u=this._viewportPointsBoundingBox(s,e,r);return{bbox:i,pixelHeight:u.maxY-u.minY,pixelWidth:u.maxX-u.minX+(u.minX<u.maxX?0:1)}};e.prototype._viewportBoundaryPoints=function(e){var t=[];var r=[[-1,1],[1,1],[1,-1],[-1,-1]];var n=[[2,0],[0,-2],[-2,0],[0,2]];for(var i=0;i<4;++i){var o=r[i];var a=n[i];for(var s=0;s<e;++s){t.push([o[0]+a[0]*s/e,o[1]+a[1]*s/e])}}return t};e.prototype._viewportPointsBoundingBox=function(e,t,r){var n=this;var i=e.map(function(e){return n._viewportCoords.viewportToBasic(e[0],e[1],r,t.perspective)});if(r.gpano!=null){return this._boundingBoxPano(i)}else{return this._boundingBox(i)}};e.prototype._boundingBox=function(e){var t={maxX:Number.NEGATIVE_INFINITY,maxY:Number.NEGATIVE_INFINITY,minX:Number.POSITIVE_INFINITY,minY:Number.POSITIVE_INFINITY};for(var r=0;r<e.length;++r){t.minX=Math.min(t.minX,e[r][0]);t.maxX=Math.max(t.maxX,e[r][0]);t.minY=Math.min(t.minY,e[r][1]);t.maxY=Math.max(t.maxY,e[r][1])}return t};e.prototype._boundingBoxPano=function(e){var r=this;var t=[];var n=[];for(var i=0;i<e.length;++i){t.push(e[i][0]);n.push(e[i][1])}t.sort(function(e,t){return r._sign(e-t)});n.sort(function(e,t){return r._sign(e-t)});var o=this._intervalPano(t);return{maxX:o[1],maxY:n[n.length-1],minX:o[0],minY:n[0]}};e.prototype._intervalPano=function(e){var t=0;var r=-1;for(var n=0;n<e.length-1;++n){var i=e[n+1]-e[n];if(i>t){t=i;r=n}}var o=e[0]+1-e[e.length-1];if(o>t){return[e[0],e[e.length-1]]}else{return[e[r+1],e[r]]}};e.prototype._clipBoundingBox=function(e){e.minX=Math.max(0,Math.min(1,e.minX));e.maxX=Math.max(0,Math.min(1,e.maxX));e.minY=Math.max(0,Math.min(1,e.minY));e.maxY=Math.max(0,Math.min(1,e.maxY))};e.prototype._sign=function(e){return e>0?1:e<0?-1:0};return e}();r.RegionOfInterestCalculator=i;r.default=i},{"../Geo":278}],425:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var u=e("rxjs/operators");var g=e("three");var c=e("rxjs");var n=function(){function e(e,t,r,n,i,o,a,s){this._disposed=false;this._key=e;if(t<=0||r<=0){console.warn("Original image size ("+t+", "+r+") is invalid ("+e+"). Tiles will not be loaded.")}this._width=t;this._height=r;this._maxLevel=Math.ceil(Math.log(Math.max(r,t))/Math.log(2));this._currentLevel=-1;this._tileSize=n;this._updated$=new c.Subject;this._createdSubject$=new c.Subject;this._created$=this._createdSubject$.pipe(u.publishReplay(1),u.refCount());this._createdSubscription=this._created$.subscribe(function(){});this._hasSubject$=new c.Subject;this._has$=this._hasSubject$.pipe(u.startWith(false),u.publishReplay(1),u.refCount());this._hasSubscription=this._has$.subscribe(function(){});this._abortFunctions=[];this._tileSubscriptions={};this._renderedCurrentLevelTiles={};this._renderedTiles={};this._background=i;this._camera=null;this._imageTileLoader=o;this._imageTileStore=a;this._renderer=s;this._renderTarget=null;this._roi=null}Object.defineProperty(e.prototype,"disposed",{get:function(){return this._disposed},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"hasTexture$",{get:function(){return this._has$},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"key",{get:function(){return this._key},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"textureUpdated$",{get:function(){return this._updated$},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"textureCreated$",{get:function(){return this._created$},enumerable:true,configurable:true});e.prototype.abort=function(){for(var e in this._tileSubscriptions){if(!this._tileSubscriptions.hasOwnProperty(e)){continue}this._tileSubscriptions[e].unsubscribe()}this._tileSubscriptions={};for(var t=0,r=this._abortFunctions;t<r.length;t++){var n=r[t];n()}this._abortFunctions=[]};e.prototype.dispose=function(){if(this._disposed){console.warn("Texture already disposed ("+this._key+")");return}this.abort();if(this._renderTarget!=null){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=true};e.prototype.setRegionOfInterest=function(e){if(this._width<=0||this._height<=0){return}this._roi=e;var t=1/this._roi.pixelWidth;var r=1/this._roi.pixelHeight;var n=Math.max(r,t);var i=Math.max(0,Math.min(this._maxLevel,Math.ceil(Math.log(n)/Math.log(2))));if(i!==this._currentLevel){this.abort();this._currentLevel=i;if(!(this._currentLevel in this._renderedTiles)){this._renderedTiles[this._currentLevel]=[]}this._renderedCurrentLevelTiles={};for(var o=0,a=this._renderedTiles[this._currentLevel];o<a.length;o++){var s=a[o];this._renderedCurrentLevelTiles[this._tileKey(this._tileSize,s)]=true}}var u=this._getTileCoords([this._roi.bbox.minX,this._roi.bbox.minY]);var c=this._getTileCoords([this._roi.bbox.maxX,this._roi.bbox.maxY]);var h=this._getTiles(u,c);if(this._camera==null){this._camera=new g.OrthographicCamera(-this._width/2,this._width/2,this._height/2,-this._height/2,-1,1);this._camera.position.z=1;var l=this._renderer.getContext();var p=l.getParameter(l.MAX_TEXTURE_SIZE);var f=Math.max(this._width,this._height);var d=p>f?1:p/f;var v=Math.floor(d*this._width);var m=Math.floor(d*this._height);this._renderTarget=new g.WebGLRenderTarget(v,m,{depthBuffer:false,format:g.RGBFormat,magFilter:g.LinearFilter,minFilter:g.LinearFilter,stencilBuffer:false});this._renderToTarget(0,0,this._width,this._height,this._background);this._createdSubject$.next(this._renderTarget.texture);this._hasSubject$.next(true)}this._fetchTiles(h)};e.prototype.setTileSize=function(e){this._tileSize=e};e.prototype.updateBackground=function(e){this._background=e};e.prototype._fetchTile=function(t,r,n,i,o,a,e,s){var u=this;var c=this._imageTileLoader.getTile(this._key,n,i,o,a,e,s);var h=c[0];var l=c[1];this._abortFunctions.push(l);var p=this._tileKey(this._tileSize,t);var f=h.subscribe(function(e){u._renderToTarget(n,i,o,a,e);u._removeFromDictionary(p,u._tileSubscriptions);u._removeFromArray(l,u._abortFunctions);u._setTileRendered(t,u._currentLevel);u._imageTileStore.addImage(e,p,r);u._updated$.next(true)},function(e){u._removeFromDictionary(p,u._tileSubscriptions);u._removeFromArray(l,u._abortFunctions);console.error(e)});if(!f.closed){this._tileSubscriptions[p]=f}};e.prototype._fetchTiles=function(e){var t=this._tileSize*Math.pow(2,this._maxLevel-this._currentLevel);for(var r=0,n=e;r<n.length;r++){var i=n[r];var o=this._tileKey(this._tileSize,i);if(o in this._renderedCurrentLevelTiles||o in this._tileSubscriptions){continue}var a=t*i[0];var s=t*i[1];var u=a+t>this._width?this._width-a:t;var c=s+t>this._height?this._height-s:t;if(this._imageTileStore.hasImage(o,this._currentLevel)){this._renderToTarget(a,s,u,c,this._imageTileStore.getImage(o,this._currentLevel));this._setTileRendered(i,this._currentLevel);this._updated$.next(true);continue}var h=Math.floor(u/t*this._tileSize);var l=Math.floor(c/t*this._tileSize);this._fetchTile(i,this._currentLevel,a,s,u,c,h,l)}};e.prototype._getTileCoords=function(e){var t=this._tileSize*Math.pow(2,this._maxLevel-this._currentLevel);var r=Math.ceil(this._width/t)-1;var n=Math.ceil(this._height/t)-1;return[Math.min(Math.floor(this._width*e[0]/t),r),Math.min(Math.floor(this._height*e[1]/t),n)]};e.prototype._getTiles=function(e,t){var r=[];if(e[0]>t[0]){var n=this._tileSize*Math.pow(2,this._maxLevel-this._currentLevel);var i=Math.ceil(this._width/n)-1;for(var o=e[0];o<=i;o++){r.push(o)}for(var o=0;o<=t[0];o++){r.push(o)}}else{for(var o=e[0];o<=t[0];o++){r.push(o)}}var a=[];for(var s=0,u=r;s<u.length;s++){var o=u[s];for(var c=e[1];c<=t[1];c++){a.push([o,c])}}return a};e.prototype._removeFromArray=function(e,t){var r=t.indexOf(e);if(r!==-1){t.splice(r,1)}};e.prototype._removeFromDictionary=function(e,t){if(e in t){delete t[e]}};e.prototype._renderToTarget=function(e,t,r,n,i){var o=new g.Texture(i);o.minFilter=g.LinearFilter;o.needsUpdate=true;var a=new g.PlaneGeometry(r,n);var s=new g.MeshBasicMaterial({map:o,side:g.FrontSide});var u=new g.Mesh(a,s);u.position.x=-this._width/2+e+r/2;u.position.y=this._height/2-t-n/2;var c=new g.Scene;c.add(u);this._renderer.render(c,this._camera,this._renderTarget);this._renderer.setRenderTarget(undefined);c.remove(u);a.dispose();s.dispose();o.dispose()};e.prototype._setTileRendered=function(e,t){var r=Object.keys(this._renderedTiles).map(function(e){return parseInt(e,10)}).filter(function(e){return e!==t});for(var n=0,i=r;n<i.length;n++){var o=i[n];var a=Math.pow(2,o-t);if(o<t){var s=Math.floor(a*e[0]);var u=Math.floor(a*e[1]);for(var c=0,h=this._renderedTiles[o].slice();c<h.length;c++){var l=h[c];if(l[0]===s&&l[1]===u){var p=this._renderedTiles[o].indexOf(l);this._renderedTiles[o].splice(p,1)}}}else{var f=a*e[0];var d=f+a-1;var v=a*e[1];var m=v+a-1;for(var g=0,y=this._renderedTiles[o].slice();g<y.length;g++){var l=y[g];if(l[0]>=f&&l[0]<=d&&l[1]>=v&&l[1]<=m){var p=this._renderedTiles[o].indexOf(l);this._renderedTiles[o].splice(p,1)}}}if(this._renderedTiles[o].length===0){delete this._renderedTiles[o]}}this._renderedTiles[t].push(e);this._renderedCurrentLevelTiles[this._tileKey(this._tileSize,e)]=true};e.prototype._tileKey=function(e,t){return e+"-"+t[0]+"-"+t[1]};return e}();r.TextureProvider=n;r.default=n},{rxjs:27,"rxjs/operators":225,three:226}],426:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=function(){function e(e){this._document=!!e?e:document}Object.defineProperty(e.prototype,"document",{get:function(){return this._document},enumerable:true,configurable:true});e.prototype.createElement=function(e,t,r){var n=this._document.createElement(e);if(!!t){n.className=t}if(!!r){r.appendChild(n)}return n};return e}();r.DOM=n;r.default=n},{}],427:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=function(){function e(){this._events={}}e.prototype.on=function(e,t){this._events[e]=this._events[e]||[];this._events[e].push(t);return};e.prototype.off=function(e,t){if(!e){this._events={};return}if(!this._listens(e)){var r=this._events[e].indexOf(t);if(r>=0){this._events[e].splice(r,1)}if(this._events[e].length){delete this._events[e]}}else{delete this._events[e]}return};e.prototype.fire=function(e,t){if(!this._listens(e)){return}for(var r=0,n=this._events[e];r<n.length;r++){var i=n[r];i.call(this,t)}return};e.prototype._listens=function(e){return!!(this._events&&this._events[e])};return e}();r.EventEmitter=n;r.default=n},{}],428:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("../Viewer");var i=function(){function t(){}t.setOptions=function(e){t._baseImageSize=e.baseImageSize!=null?e.baseImageSize:n.ImageSize.Size640;t._basePanoramaSize=e.basePanoramaSize!=null?e.basePanoramaSize:n.ImageSize.Size2048;t._maxImageSize=e.maxImageSize!=null?e.maxImageSize:n.ImageSize.Size2048};Object.defineProperty(t,"baseImageSize",{get:function(){return t._baseImageSize},enumerable:true,configurable:true});Object.defineProperty(t,"basePanoramaSize",{get:function(){return t._basePanoramaSize},enumerable:true,configurable:true});Object.defineProperty(t,"maxImageSize",{get:function(){return t._maxImageSize},enumerable:true,configurable:true});return t}();r.Settings=i;r.default=i},{"../Viewer":286}],429:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});function n(){return typeof window!=="undefined"&&typeof document!=="undefined"}r.isBrowser=n;function i(){return!!(Array.prototype&&Array.prototype.filter&&Array.prototype.indexOf&&Array.prototype.map&&Array.prototype.reverse)}r.isArraySupported=i;function o(){return!!(Function.prototype&&Function.prototype.bind)}r.isFunctionSupported=o;function a(){return"JSON"in window&&"parse"in JSON&&"stringify"in JSON}r.isJSONSupported=a;function s(){return!!(Object.keys&&Object.assign)}r.isObjectSupported=s;function u(){return"Blob"in window&&"URL"in window}r.isBlobSupported=u;var c=undefined;function h(){if(c===undefined){c=l()}return c}r.isWebGLSupportedCached=h;function l(){var e={alpha:false,antialias:false,depth:true,failIfMajorPerformanceCaveat:false,premultipliedAlpha:true,preserveDrawingBuffer:false,stencil:true};var t=document.createElement("canvas");var r=t.getContext("webgl",e)||t.getContext("experimental-webgl",e);if(!r){return false}var n=["OES_standard_derivatives"];var i=r.getSupportedExtensions();for(var o=0,a=n;o<a.length;o++){var s=a[o];if(i.indexOf(s)===-1){return false}}return true}r.isWebGLSupported=l},{}],430:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=function(){function i(){}Object.defineProperty(i,"explore",{get:function(){return i._scheme+"://"+i._exploreHost},enumerable:true,configurable:true});Object.defineProperty(i,"origin",{get:function(){return i._origin},enumerable:true,configurable:true});Object.defineProperty(i,"tileScheme",{get:function(){return i._scheme},enumerable:true,configurable:true});Object.defineProperty(i,"tileDomain",{get:function(){return i._imageTileHost},enumerable:true,configurable:true});i.atomicReconstruction=function(e){return i._scheme+"://"+i._atomicReconstructionHost+"/"+e+"/sfm/v1.0/atomic_reconstruction.json"};i.exporeImage=function(e){return i._scheme+"://"+i._exploreHost+"/app/?pKey="+e+"&focus=photo"};i.exporeUser=function(e){return i._scheme+"://"+i._exploreHost+"/app/user/"+e};i.falcorModel=function(e){return i._scheme+"://"+i._apiHost+"/v3/model.json?client_id="+e};i.protoMesh=function(e){return i._scheme+"://"+i._meshHost+"/v2/mesh/"+e};i.thumbnail=function(e,t,r){var n=!!r?"?origin="+r:"";return i._scheme+"://"+i._imageHost+"/"+e+"/thumb-"+t+".jpg"+n};i.setOptions=function(e){if(!e){return}if(!!e.apiHost){i._apiHost=e.apiHost}if(!!e.atomicReconstructionHost){i._atomicReconstructionHost=e.atomicReconstructionHost}if(!!e.exploreHost){i._exploreHost=e.exploreHost}if(!!e.imageHost){i._imageHost=e.imageHost}if(!!e.imageTileHost){i._imageTileHost=e.imageTileHost}if(!!e.meshHost){i._meshHost=e.meshHost}if(!!e.scheme){i._scheme=e.scheme}};i._apiHost="a.mapillary.com";i._atomicReconstructionHost="d3necqxnn15whe.cloudfront.net";i._exploreHost="www.mapillary.com";i._imageHost="d1cuyjsrcm0gby.cloudfront.net";i._imageTileHost="d2qb1440i7l50o.cloudfront.net";i._meshHost="d1brzeo354iq2l.cloudfront.net";i._origin="mapillary.webgl";i._scheme="https";return i}();r.Urls=n;r.default=n},{}],431:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n;(function(e){e[e["Bottom"]=0]="Bottom";e[e["BottomLeft"]=1]="BottomLeft";e[e["BottomRight"]=2]="BottomRight";e[e["Center"]=3]="Center";e[e["Left"]=4]="Left";e[e["Right"]=5]="Right";e[e["Top"]=6]="Top";e[e["TopLeft"]=7]="TopLeft";e[e["TopRight"]=8]="TopRight"})(n=r.Alignment||(r.Alignment={}));r.default=n},{}],432:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("rxjs");var i=e("rxjs/operators");var a=e("../Graph");var o=function(){function e(e,t){this._graphService=e;this._stateService=t;this._started=false}Object.defineProperty(e.prototype,"started",{get:function(){return this._started},enumerable:true,configurable:true});e.prototype.start=function(){var o=this;if(this._started){return}this._uncacheSubscription=this._stateService.currentState$.pipe(i.distinctUntilChanged(undefined,function(e){return e.state.currentNode.key}),i.map(function(e){var t=e.state.trajectory;var r=t.map(function(e){return e.key});var n=t[t.length-1].sequenceKey;return[r,n]}),i.bufferCount(1,5),i.withLatestFrom(this._graphService.graphMode$),i.switchMap(function(e){var t=e[0],r=e[1];var n=t[0][0];var i=r===a.GraphMode.Sequence?t[0][1]:undefined;return o._graphService.uncache$(n,i)})).subscribe(function(){});this._cacheNodeSubscription=this._graphService.graphMode$.pipe(i.skip(1),i.withLatestFrom(this._stateService.currentState$),i.switchMap(function(e){var t=e[0],r=e[1];return t===a.GraphMode.Sequence?o._keyToEdges(r.state.currentNode.key,function(e){return e.sequenceEdges$}):n.from(r.state.trajectory.map(function(e){return e.key}).slice(r.state.currentIndex)).pipe(i.mergeMap(function(e){return o._keyToEdges(e,function(e){return e.spatialEdges$})},6))})).subscribe(function(){});this._started=true};e.prototype.stop=function(){if(!this._started){return}this._uncacheSubscription.unsubscribe();this._uncacheSubscription=null;this._cacheNodeSubscription.unsubscribe();this._cacheNodeSubscription=null;this._started=false};e.prototype._keyToEdges=function(t,e){return this._graphService.cacheNode$(t).pipe(i.switchMap(e),i.first(function(e){return e.cached}),i.timeout(15e3),i.catchError(function(e){console.error("Failed to cache edges ("+t+").",e);return n.empty()}))};return e}();r.CacheService=o;r.default=o},{"../Graph":279,rxjs:27,"rxjs/operators":225}],433:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var s=e("rxjs/operators");var u=e("../Component");var n=function(){function e(e,t,r,n,i,o){var a=this;this._container=e;this._observer=r;this._navigator=t;this._options=i!=null?i:{};this._key=n;this._navigable=n==null;this._componentService=!!o?o:new u.ComponentService(this._container,this._navigator);this._coverComponent=this._componentService.getCover();this._initializeComponents();if(n){this._initilizeCoverComponent();this._subscribeCoverComponent()}else{this._navigator.movedToKey$.pipe(s.first(function(e){return e!=null})).subscribe(function(e){a._key=e;a._componentService.deactivateCover();a._coverComponent.configure({key:a._key,state:u.CoverState.Hidden});a._subscribeCoverComponent();a._navigator.stateService.start();a._navigator.cacheService.start();a._observer.startEmit()})}}Object.defineProperty(e.prototype,"navigable",{get:function(){return this._navigable},enumerable:true,configurable:true});e.prototype.get=function(e){return this._componentService.get(e)};e.prototype.activate=function(e){this._componentService.activate(e)};e.prototype.activateCover=function(){this._coverComponent.configure({state:u.CoverState.Visible})};e.prototype.deactivate=function(e){this._componentService.deactivate(e)};e.prototype.deactivateCover=function(){this._coverComponent.configure({state:u.CoverState.Loading})};e.prototype._initializeComponents=function(){var e=this._options;this._uFalse(e.background,"background");this._uFalse(e.debug,"debug");this._uFalse(e.image,"image");this._uFalse(e.marker,"marker");this._uFalse(e.navigation,"navigation");this._uFalse(e.popup,"popup");this._uFalse(e.route,"route");this._uFalse(e.slider,"slider");this._uFalse(e.spatialData,"spatialData");this._uFalse(e.tag,"tag");this._uTrue(e.attribution,"attribution");this._uTrue(e.bearing,"bearing");this._uTrue(e.cache,"cache");this._uTrue(e.direction,"direction");this._uTrue(e.imagePlane,"imagePlane");this._uTrue(e.keyboard,"keyboard");this._uTrue(e.loading,"loading");this._uTrue(e.mouse,"mouse");this._uTrue(e.sequence,"sequence");this._uTrue(e.stats,"stats");this._uTrue(e.zoom,"zoom")};e.prototype._initilizeCoverComponent=function(){var e=this._options;this._coverComponent.configure({key:this._key});if(e.cover===undefined||e.cover){this.activateCover()}else{this.deactivateCover()}};e.prototype._setNavigable=function(e){if(this._navigable===e){return}this._navigable=e;this._observer.navigable$.next(e)};e.prototype._subscribeCoverComponent=function(){var n=this;this._coverComponent.configuration$.pipe(s.distinctUntilChanged(undefined,function(e){return e.state})).subscribe(function(r){if(r.state===u.CoverState.Loading){n._navigator.stateService.currentKey$.pipe(s.first(),s.switchMap(function(e){var t=e==null||e!==r.key;if(t){n._setNavigable(false)}return t?n._navigator.moveToKey$(r.key):n._navigator.stateService.currentNode$.pipe(s.first())})).subscribe(function(){n._navigator.stateService.start();n._navigator.cacheService.start();n._observer.startEmit();n._coverComponent.configure({state:u.CoverState.Hidden});n._componentService.deactivateCover();n._setNavigable(true)},function(e){console.error("Failed to deactivate cover.",e);n._coverComponent.configure({state:u.CoverState.Visible})})}else if(r.state===u.CoverState.Visible){n._observer.stopEmit();n._navigator.stateService.stop();n._navigator.cacheService.stop();n._navigator.playService.stop();n._componentService.activateCover();n._setNavigable(r.key==null)}})};e.prototype._uFalse=function(e,t){if(e===undefined){this._componentService.deactivate(t);return}if(typeof e==="boolean"){if(e){this._componentService.activate(t)}else{this._componentService.deactivate(t)}return}this._componentService.configure(t,e);this._componentService.activate(t)};e.prototype._uTrue=function(e,t){if(e===undefined){this._componentService.activate(t);return}if(typeof e==="boolean"){if(e){this._componentService.activate(t)}else{this._componentService.deactivate(t)}return}this._componentService.configure(t,e);this._componentService.activate(t)};return e}();r.ComponentController=n},{"../Component":275,"rxjs/operators":225}],434:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var i=e("../Render");var o=e("../Utils");var a=e("../Viewer");var n=function(){function e(e,t,r,n){this.id=e;this._dom=!!n?n:new o.DOM;this._container=this._dom.document.getElementById(e);if(!this._container){throw new Error("Container '"+e+"' not found.")}this._container.classList.add("mapillary-js");this._canvasContainer=this._dom.createElement("div","mapillary-js-interactive",this._container);this._domContainer=this._dom.createElement("div","mapillary-js-dom",this._container);this.renderService=new i.RenderService(this._container,t.currentState$,r.renderMode);this.glRenderer=new i.GLRenderer(this._canvasContainer,this.renderService,this._dom);this.domRenderer=new i.DOMRenderer(this._domContainer,this.renderService,t.currentState$);this.keyboardService=new a.KeyboardService(this._canvasContainer);this.mouseService=new a.MouseService(this._container,this._canvasContainer,this._domContainer,document);this.touchService=new a.TouchService(this._canvasContainer,this._domContainer);this.spriteService=new a.SpriteService(r.sprite)}Object.defineProperty(e.prototype,"element",{get:function(){return this._container},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"canvasContainer",{get:function(){return this._canvasContainer},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"domContainer",{get:function(){return this._domContainer},enumerable:true,configurable:true});return e}();r.Container=n;r.default=n},{"../Render":281,"../Utils":285,"../Viewer":286}],435:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n;(function(e){e[e["Size320"]=320]="Size320";e[e["Size640"]=640]="Size640";e[e["Size1024"]=1024]="Size1024";e[e["Size2048"]=2048]="Size2048"})(n=r.ImageSize||(r.ImageSize={}))},{}],436:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("rxjs");var i=function(){function e(e){this._keyDown$=n.fromEvent(e,"keydown");this._keyUp$=n.fromEvent(e,"keyup")}Object.defineProperty(e.prototype,"keyDown$",{get:function(){return this._keyDown$},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"keyUp$",{get:function(){return this._keyUp$},enumerable:true,configurable:true});return e}();r.KeyboardService=i;r.default=i},{rxjs:27}],437:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var n=e("rxjs/operators");var i=e("rxjs");var o=function(){function e(){this._loadersSubject$=new i.Subject;this._loaders$=this._loadersSubject$.pipe(n.scan(function(e,t){if(t.task!==undefined){e[t.task]=t.loading}return e},{}),n.startWith({}),n.publishReplay(1),n.refCount())}Object.defineProperty(e.prototype,"loading$",{get:function(){return this._loaders$.pipe(n.map(function(e){for(var t in e){if(!e.hasOwnProperty(t)){continue}if(e[t]){return true}}return false}),n.debounceTime(100),n.distinctUntilChanged())},enumerable:true,configurable:true});e.prototype.taskLoading$=function(t){return this._loaders$.pipe(n.map(function(e){return!!e[t]}),n.debounceTime(100),n.distinctUntilChanged())};e.prototype.startLoading=function(e){this._loadersSubject$.next({loading:true,task:e})};e.prototype.stopLoading=function(e){this._loadersSubject$.next({loading:false,task:e})};return e}();r.LoadingService=o;r.default=o},{rxjs:27,"rxjs/operators":225}],438:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var u=e("rxjs");var c=e("rxjs/operators");var n=function(){function e(e,i,t,r){var n=this;this._activeSubject$=new u.BehaviorSubject(false);this._active$=this._activeSubject$.pipe(c.distinctUntilChanged(),c.publishReplay(1),c.refCount());this._claimMouse$=new u.Subject;this._claimWheel$=new u.Subject;this._deferPixelClaims$=new u.Subject;this._deferPixels$=this._deferPixelClaims$.pipe(c.scan(function(e,t){if(t.deferPixels==null){delete e[t.name]}else{e[t.name]=t.deferPixels}return e},{}),c.map(function(e){var t=-1;for(var r in e){if(!e.hasOwnProperty(r)){continue}var n=e[r];if(n>t){t=n}}return t}),c.startWith(-1),c.publishReplay(1),c.refCount());this._deferPixels$.subscribe(function(){});this._documentMouseMove$=u.fromEvent(r,"mousemove");this._documentMouseUp$=u.fromEvent(r,"mouseup");this._mouseDown$=u.fromEvent(i,"mousedown");this._mouseLeave$=u.fromEvent(i,"mouseleave");this._mouseMove$=u.fromEvent(i,"mousemove");this._mouseUp$=u.fromEvent(i,"mouseup");this._mouseOut$=u.fromEvent(i,"mouseout");this._mouseOver$=u.fromEvent(i,"mouseover");this._domMouseDown$=u.fromEvent(t,"mousedown");this._domMouseMove$=u.fromEvent(t,"mousemove");this._click$=u.fromEvent(i,"click");this._contextMenu$=u.fromEvent(i,"contextmenu");this._dblClick$=u.merge(u.fromEvent(e,"click"),u.fromEvent(i,"dblclick")).pipe(c.bufferCount(3,1),c.filter(function(e){var t=e[0];var r=e[1];var n=e[2];return t.type==="click"&&r.type==="click"&&n.type==="dblclick"&&t.target.parentNode===i&&r.target.parentNode===i}),c.map(function(e){return e[2]}),c.share());u.merge(this._domMouseDown$,this._domMouseMove$,this._dblClick$,this._contextMenu$).subscribe(function(e){e.preventDefault()});this._mouseWheel$=u.merge(u.fromEvent(i,"wheel"),u.fromEvent(t,"wheel")).pipe(c.share());this._consistentContextMenu$=u.merge(this._mouseDown$,this._mouseMove$,this._mouseOut$,this._mouseUp$,this._contextMenu$).pipe(c.bufferCount(3,1),c.filter(function(e){return e[0].type==="mousedown"&&e[1].type==="contextmenu"&&e[2].type==="mouseup"}),c.map(function(e){return e[1]}),c.share());var o=u.merge(u.fromEvent(window,"blur"),this._documentMouseUp$.pipe(c.filter(function(e){return e.button===0}))).pipe(c.share());var a=this._createMouseDragInitiate$(this._mouseDown$,o,true).pipe(c.share());this._mouseDragStart$=this._createMouseDragStart$(a).pipe(c.share());this._mouseDrag$=this._createMouseDrag$(a,o).pipe(c.share());this._mouseDragEnd$=this._createMouseDragEnd$(this._mouseDragStart$,o).pipe(c.share());var s=this._createMouseDragInitiate$(this._domMouseDown$,o,false).pipe(c.share());this._domMouseDragStart$=this._createMouseDragStart$(s).pipe(c.share());this._domMouseDrag$=this._createMouseDrag$(s,o).pipe(c.share());this._domMouseDragEnd$=this._createMouseDragEnd$(this._domMouseDragStart$,o).pipe(c.share());this._proximateClick$=this._mouseDown$.pipe(c.switchMap(function(e){return n._click$.pipe(c.takeUntil(n._createDeferredMouseMove$(e,n._documentMouseMove$)),c.take(1))}),c.share());this._staticClick$=this._mouseDown$.pipe(c.switchMap(function(e){return n._click$.pipe(c.takeUntil(n._documentMouseMove$),c.take(1))}),c.share());this._mouseDragStart$.subscribe();this._mouseDrag$.subscribe();this._mouseDragEnd$.subscribe();this._domMouseDragStart$.subscribe();this._domMouseDrag$.subscribe();this._domMouseDragEnd$.subscribe();this._staticClick$.subscribe();this._mouseOwner$=this._createOwner$(this._claimMouse$).pipe(c.publishReplay(1),c.refCount());this._wheelOwner$=this._createOwner$(this._claimWheel$).pipe(c.publishReplay(1),c.refCount());this._mouseOwner$.subscribe(function(){});this._wheelOwner$.subscribe(function(){})}Object.defineProperty(e.prototype,"active$",{get:function(){return this._active$},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"activate$",{get:function(){return this._activeSubject$},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"documentMouseMove$",{get:function(){return this._documentMouseMove$},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"documentMouseUp$",{get:function(){return this._documentMouseUp$},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"domMouseDragStart$",{get:function(){return this._domMouseDragStart$},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"domMouseDrag$",{get:function(){return this._domMouseDrag$},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"domMouseDragEnd$",{get:function(){return this._domMouseDragEnd$},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"domMouseDown$",{get:function(){return this._domMouseDown$},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"domMouseMove$",{get:function(){return this._domMouseMove$},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"mouseOwner$",{get:function(){return this._mouseOwner$},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"mouseDown$",{get:function(){return this._mouseDown$},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"mouseMove$",{get:function(){return this._mouseMove$},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"mouseLeave$",{get:function(){return this._mouseLeave$},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"mouseOut$",{get:function(){return this._mouseOut$},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"mouseOver$",{get:function(){return this._mouseOver$},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"mouseUp$",{get:function(){return this._mouseUp$},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"click$",{get:function(){return this._click$},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"dblClick$",{get:function(){return this._dblClick$},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"contextMenu$",{get:function(){return this._consistentContextMenu$},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"mouseWheel$",{get:function(){return this._mouseWheel$},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"mouseDragStart$",{get:function(){return this._mouseDragStart$},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"mouseDrag$",{get:function(){return this._mouseDrag$},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"mouseDragEnd$",{get:function(){return this._mouseDragEnd$},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"proximateClick$",{get:function(){return this._proximateClick$},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"staticClick$",{get:function(){return this._staticClick$},enumerable:true,configurable:true});e.prototype.claimMouse=function(e,t){this._claimMouse$.next({name:e,zindex:t})};e.prototype.unclaimMouse=function(e){this._claimMouse$.next({name:e,zindex:null})};e.prototype.deferPixels=function(e,t){this._deferPixelClaims$.next({name:e,deferPixels:t})};e.prototype.undeferPixels=function(e){this._deferPixelClaims$.next({name:e,deferPixels:null})};e.prototype.claimWheel=function(e,t){this._claimWheel$.next({name:e,zindex:t})};e.prototype.unclaimWheel=function(e){this._claimWheel$.next({name:e,zindex:null})};e.prototype.filtered$=function(e,t){return this._filtered(e,t,this._mouseOwner$)};e.prototype.filteredWheel$=function(e,t){return this._filtered(e,t,this._wheelOwner$)};e.prototype._createDeferredMouseMove$=function(n,e){return e.pipe(c.map(function(e){var t=e.clientX-n.clientX;var r=e.clientY-n.clientY;return[e,Math.sqrt(t*t+r*r)]}),c.withLatestFrom(this._deferPixels$),c.filter(function(e){var t=e[0],r=t[0],n=t[1],i=e[1];return n>i}),c.map(function(e){var t=e[0],r=t[0],n=t[1],i=e[1];return r}))};e.prototype._createMouseDrag$=function(e,t){var r=this;return e.pipe(c.map(function(e){var t=e[0],r=e[1];return r}),c.switchMap(function(e){return u.concat(u.of(e),r._documentMouseMove$).pipe(c.takeUntil(t))}))};e.prototype._createMouseDragEnd$=function(e,t){return e.pipe(c.switchMap(function(e){return t.pipe(c.first())}))};e.prototype._createMouseDragStart$=function(e){return e.pipe(c.map(function(e){var t=e[0],r=e[1];return t}))};e.prototype._createMouseDragInitiate$=function(e,t,r){var n=this;return e.pipe(c.filter(function(e){return e.button===0}),c.switchMap(function(e){return u.combineLatest(u.of(e),r?n._createDeferredMouseMove$(e,n._documentMouseMove$):n._documentMouseMove$).pipe(c.takeUntil(t),c.take(1))}))};e.prototype._createOwner$=function(e){return e.pipe(c.scan(function(e,t){if(t.zindex==null){delete e[t.name]}else{e[t.name]=t.zindex}return e},{}),c.map(function(e){var t=null;var r=-1;for(var n in e){if(!e.hasOwnProperty(n)){continue}if(e[n]>r){r=e[n];t=n}}return t}),c.startWith(null))};e.prototype._filtered=function(n,e,t){return e.pipe(c.withLatestFrom(t),c.filter(function(e){var t=e[0],r=e[1];return r===n}),c.map(function(e){var t=e[0],r=e[1];return t}))};return e}();r.MouseService=n;r.default=n},{rxjs:27,"rxjs/operators":225}],439:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var h=e("rxjs");var o=e("rxjs/operators");var l=e("../API");var p=e("../Graph");var n=e("../Edge");var i=e("../Error");var f=e("../State");var d=e("../Viewer");var a=function(){function e(e,t,r,n,i,o,a,s,u,c){this._apiV3=n!=null?n:new l.APIv3(e,r);this._imageLoadingService=o!=null?o:new p.ImageLoadingService;this._graphService=i!=null?i:new p.GraphService(new p.Graph(this.apiV3),this._imageLoadingService);this._loadingService=a!=null?a:new d.LoadingService;this._loadingName="navigator";this._stateService=s!=null?s:new f.StateService(t.transitionMode);this._cacheService=u!=null?u:new d.CacheService(this._graphService,this._stateService);this._playService=c!=null?c:new d.PlayService(this._graphService,this._stateService);this._keyRequested$=new h.BehaviorSubject(null);this._movedToKey$=new h.BehaviorSubject(null);this._request$=null;this._requestSubscription=null;this._nodeRequestSubscription=null}Object.defineProperty(e.prototype,"apiV3",{get:function(){return this._apiV3},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"cacheService",{get:function(){return this._cacheService},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"graphService",{get:function(){return this._graphService},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"imageLoadingService",{get:function(){return this._imageLoadingService},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"loadingService",{get:function(){return this._loadingService},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"movedToKey$",{get:function(){return this._movedToKey$},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"playService",{get:function(){return this._playService},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"stateService",{get:function(){return this._stateService},enumerable:true,configurable:true});e.prototype.moveToKey$=function(e){this._abortRequest("to key "+e);this._loadingService.startLoading(this._loadingName);var t=this._moveToKey$(e);return this._makeRequest$(t)};e.prototype.moveDir$=function(i){var t=this;this._abortRequest("in dir "+n.EdgeDirection[i]);this._loadingService.startLoading(this._loadingName);var e=this.stateService.currentNode$.pipe(o.first(),o.mergeMap(function(e){return([n.EdgeDirection.Next,n.EdgeDirection.Prev].indexOf(i)>-1?e.sequenceEdges$:e.spatialEdges$).pipe(o.first(),o.map(function(e){for(var t=0,r=e.edges;t<r.length;t++){var n=r[t];if(n.data.direction===i){return n.to}}return null}))}),o.mergeMap(function(e){if(e==null){t._loadingService.stopLoading(t._loadingName);return h.throwError(new Error("Direction ("+i+") does not exist for current node."))}return t._moveToKey$(e)}));return this._makeRequest$(e)};e.prototype.moveCloseTo$=function(t,r){var n=this;this._abortRequest("to lat "+t+", lon "+r);this._loadingService.startLoading(this._loadingName);var e=this.apiV3.imageCloseTo$(t,r).pipe(o.mergeMap(function(e){if(e==null){n._loadingService.stopLoading(n._loadingName);return h.throwError(new Error("No image found close to lat "+t+", lon "+r+"."))}return n._moveToKey$(e.key)}));return this._makeRequest$(e)};e.prototype.setFilter$=function(t){var r=this;this._stateService.clearNodes();return this._movedToKey$.pipe(o.first(),o.mergeMap(function(e){if(e!=null){return r._trajectoryKeys$().pipe(o.mergeMap(function(e){return r._graphService.setFilter$(t).pipe(o.mergeMap(function(){return r._cacheKeys$(e)}))}),o.last())}return r._keyRequested$.pipe(o.first(),o.mergeMap(function(e){if(e!=null){return r._graphService.setFilter$(t).pipe(o.mergeMap(function(){return r._graphService.cacheNode$(e)}))}return r._graphService.setFilter$(t).pipe(o.map(function(){return undefined}))}))}),o.map(function(e){return undefined}))};e.prototype.setToken$=function(t){var r=this;this._abortRequest("to set token");this._stateService.clearNodes();return this._movedToKey$.pipe(o.first(),o.tap(function(e){r._apiV3.setToken(t)}),o.mergeMap(function(e){return e==null?r._graphService.reset$([]):r._trajectoryKeys$().pipe(o.mergeMap(function(e){return r._graphService.reset$(e).pipe(o.mergeMap(function(){return r._cacheKeys$(e)}))}),o.last(),o.map(function(e){return undefined}))}))};e.prototype._cacheKeys$=function(e){var t=this;var r=e.map(function(e){return t._graphService.cacheNode$(e)});return h.from(r).pipe(o.mergeAll())};e.prototype._abortRequest=function(e){if(this._requestSubscription!=null){this._requestSubscription.unsubscribe();this._requestSubscription=null}if(this._nodeRequestSubscription!=null){this._nodeRequestSubscription.unsubscribe();this._nodeRequestSubscription=null}if(this._request$!=null){if(!(this._request$.isStopped||this._request$.hasError)){this._request$.error(new i.AbortMapillaryError("Request aborted by a subsequent request "+e+"."))}this._request$=null}};e.prototype._makeRequest$=function(e){var t=this;var r=new h.ReplaySubject(1);this._requestSubscription=r.subscribe(undefined,function(){});this._request$=r;this._nodeRequestSubscription=e.subscribe(function(e){t._request$=null;r.next(e);r.complete()},function(e){t._request$=null;r.error(e)});return r};e.prototype._moveToKey$=function(e){var t=this;this._keyRequested$.next(e);return this._graphService.cacheNode$(e).pipe(o.tap(function(e){t._stateService.setNodes([e]);t._movedToKey$.next(e.key)}),o.finalize(function(){t._loadingService.stopLoading(t._loadingName)}))};e.prototype._trajectoryKeys$=function(){return this._stateService.currentState$.pipe(o.first(),o.map(function(e){return e.state.trajectory.map(function(e){return e.key})}))};return e}();r.Navigator=a;r.default=a},{"../API":274,"../Edge":276,"../Error":277,"../Graph":279,"../State":282,"../Viewer":286,rxjs:27,"rxjs/operators":225}],440:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var s=e("rxjs");var c=e("rxjs/operators");var i=e("../Viewer");var n=function(){function e(e,t,r){var n=this;this._container=r;this._eventEmitter=e;this._navigator=t;this._projection=new i.Projection;this._started=false;this._navigable$=new s.Subject;this._navigable$.subscribe(function(e){n._eventEmitter.fire(i.Viewer.navigablechanged,e)});this._navigator.loadingService.loading$.subscribe(function(e){n._eventEmitter.fire(i.Viewer.loadingchanged,e)})}Object.defineProperty(e.prototype,"started",{get:function(){return this._started},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"navigable$",{get:function(){return this._navigable$},enumerable:true,configurable:true});e.prototype.projectBasic$=function(i){var o=this;return s.combineLatest(this._container.renderService.renderCamera$,this._navigator.stateService.currentTransform$).pipe(c.first(),c.map(function(e){var t=e[0],r=e[1];var n=o._projection.basicToCanvas(i,o._container.element,t,r);return[Math.round(n[0]),Math.round(n[1])]}))};e.prototype.startEmit=function(){var u=this;if(this._started){return}this._started=true;this._currentNodeSubscription=this._navigator.stateService.currentNodeExternal$.subscribe(function(e){u._eventEmitter.fire(i.Viewer.nodechanged,e)});this._sequenceEdgesSubscription=this._navigator.stateService.currentNodeExternal$.pipe(c.switchMap(function(e){return e.sequenceEdges$})).subscribe(function(e){u._eventEmitter.fire(i.Viewer.sequenceedgeschanged,e)});this._spatialEdgesSubscription=this._navigator.stateService.currentNodeExternal$.pipe(c.switchMap(function(e){return e.spatialEdges$})).subscribe(function(e){u._eventEmitter.fire(i.Viewer.spatialedgeschanged,e)});this._moveSubscription=s.combineLatest(this._navigator.stateService.inMotion$,this._container.mouseService.active$,this._container.touchService.active$).pipe(c.map(function(e){return e[0]||e[1]||e[2]}),c.distinctUntilChanged()).subscribe(function(e){if(e){u._eventEmitter.fire(i.Viewer.movestart,null)}else{u._eventEmitter.fire(i.Viewer.moveend,null)}});this._bearingSubscription=this._container.renderService.bearing$.pipe(c.auditTime(100),c.distinctUntilChanged(function(e,t){return Math.abs(t-e)<1})).subscribe(function(e){u._eventEmitter.fire(i.Viewer.bearingchanged,e)});var e=this._container.mouseService.active$.pipe(c.switchMap(function(e){return e?s.empty():u._container.mouseService.mouseMove$}));this._viewerMouseEventSubscription=s.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$)).pipe(c.withLatestFrom(this._container.renderService.renderCamera$,this._navigator.stateService.reference$,this._navigator.stateService.currentTransform$),c.map(function(e){var t=e[0],r=t[0],n=t[1],i=e[1],o=e[2],a=e[3];var s=u._projection.eventToUnprojection(n,u._container.element,i,o,a);return{basicPoint:s.basicPoint,latLon:s.latLon,originalEvent:n,pixelPoint:s.pixelPoint,target:u._eventEmitter,type:r}})).subscribe(function(e){u._eventEmitter.fire(e.type,e)})};e.prototype.stopEmit=function(){if(!this.started){return}this._started=false;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};e.prototype.unproject$=function(o){var a=this;return s.combineLatest(this._container.renderService.renderCamera$,this._navigator.stateService.reference$,this._navigator.stateService.currentTransform$).pipe(c.first(),c.map(function(e){var t=e[0],r=e[1],n=e[2];var i=a._projection.canvasToUnprojection(o,a._container.element,t,r,n);return i.latLon}))};e.prototype.unprojectBasic$=function(n){var i=this;return s.combineLatest(this._container.renderService.renderCamera$,this._navigator.stateService.currentTransform$).pipe(c.first(),c.map(function(e){var t=e[0],r=e[1];return i._projection.canvasToBasic(n,i._container.element,t,r)}))};e.prototype._mapMouseEvent$=function(t,e){return e.pipe(c.map(function(e){return[t,e]}))};return e}();r.Observer=n;r.default=n},{"../Viewer":286,rxjs:27,"rxjs/operators":225}],441:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var c=e("rxjs");var p=e("rxjs/operators");var s=e("../Edge");var u=e("../Graph");var n=function(){function r(e,t,r){this._graphService=e;this._stateService=t;this._graphCalculator=!!r?r:new u.GraphCalculator;this._directionSubject$=new c.Subject;this._direction$=this._directionSubject$.pipe(p.startWith(s.EdgeDirection.Next),p.publishReplay(1),p.refCount());this._direction$.subscribe();this._playing=false;this._playingSubject$=new c.Subject;this._playing$=this._playingSubject$.pipe(p.startWith(this._playing),p.publishReplay(1),p.refCount());this._playing$.subscribe();this._speed=.5;this._speedSubject$=new c.Subject;this._speed$=this._speedSubject$.pipe(p.startWith(this._speed),p.publishReplay(1),p.refCount());this._speed$.subscribe();this._nodesAhead=this._mapNodesAhead(this._mapSpeed(this._speed));this._bridging$=null}Object.defineProperty(r.prototype,"playing",{get:function(){return this._playing},enumerable:true,configurable:true});Object.defineProperty(r.prototype,"direction$",{get:function(){return this._direction$},enumerable:true,configurable:true});Object.defineProperty(r.prototype,"playing$",{get:function(){return this._playing$},enumerable:true,configurable:true});Object.defineProperty(r.prototype,"speed$",{get:function(){return this._speed$},enumerable:true,configurable:true});r.prototype.play=function(){var l=this;if(this._playing){return}this._stateService.cutNodes();var e=this._setSpeed(this._speed);this._stateService.setSpeed(e);this._graphModeSubscription=this._speed$.pipe(p.map(function(e){return e>r.sequenceSpeed?u.GraphMode.Sequence:u.GraphMode.Spatial}),p.distinctUntilChanged()).subscribe(function(e){l._graphService.setGraphMode(e)});this._cacheSubscription=c.combineLatest(this._stateService.currentNode$.pipe(p.map(function(e){return[e.sequenceKey,e.key]}),p.distinctUntilChanged(undefined,function(e){var t=e[0],r=e[1];return t})),this._graphService.graphMode$,this._direction$).pipe(p.switchMap(function(e){var t=e[0],r=t[0],n=t[1],i=e[1],o=e[2];if(o!==s.EdgeDirection.Next&&o!==s.EdgeDirection.Prev){return c.of([undefined,o])}var a=(i===u.GraphMode.Sequence?l._graphService.cacheSequenceNodes$(r,n):l._graphService.cacheSequence$(r)).pipe(p.retry(3),p.catchError(function(e){console.error(e);return c.of(undefined)}));return c.combineLatest(a,c.of(o))}),p.switchMap(function(e){var t=e[0],r=e[1];if(t===undefined){return c.empty()}var h=t.keys.slice();if(r===s.EdgeDirection.Prev){h.reverse()}return l._stateService.currentState$.pipe(p.map(function(e){return[e.state.trajectory[e.state.trajectory.length-1].key,e.state.nodesAhead]}),p.scan(function(e,t){var r=e[0],n=e[1];var i=t[0],o=t[1];if(r===undefined){r=i}var a=h.length-1;if(o>=l._nodesAhead||h[a]===r){return[r,[]]}var s=h.indexOf(i);var u=h.indexOf(r)+1;var c=Math.min(a,s+l._nodesAhead-o)+1;if(c<=u){return[r,[]]}return[h[c-1],h.slice(u,c)]},[undefined,[]]),p.mergeMap(function(e){var t=e[0],r=e[1];return c.from(r)}))}),p.mergeMap(function(e){return l._graphService.cacheNode$(e).pipe(p.catchError(function(){return c.empty()}))},6)).subscribe();this._playingSubscription=this._stateService.currentState$.pipe(p.filter(function(e){return e.state.nodesAhead<l._nodesAhead}),p.distinctUntilChanged(undefined,function(e){return e.state.lastNode.key}),p.map(function(e){var t=e.state.lastNode;var r=e.state.trajectory;var n=undefined;for(var i=r.length-2;i>=0;i--){var o=r[i];if(o.sequenceKey!==t.sequenceKey){break}if(o.capturedAt!==t.capturedAt){n=o.capturedAt<t.capturedAt;break}}return[e.state.lastNode,n]}),p.withLatestFrom(this._direction$),p.switchMap(function(e){var t=e[0],r=t[0],n=t[1],i=e[1];return c.zip(([s.EdgeDirection.Next,s.EdgeDirection.Prev].indexOf(i)>-1?r.sequenceEdges$:r.spatialEdges$).pipe(p.first(function(e){return e.cached}),p.timeout(15e3)),c.of(i)).pipe(p.map(function(e){var t=e[0],r=e[1];for(var n=0,i=t.edges;n<i.length;n++){var o=i[n];if(o.data.direction===r){return o.to}}return null}),p.switchMap(function(e){return e!=null?l._graphService.cacheNode$(e):l._bridge$(r,n).pipe(p.filter(function(e){return!!e}))}))})).subscribe(function(e){l._stateService.appendNodes([e])},function(e){console.error(e);l.stop()});this._clearSubscription=this._stateService.currentNode$.pipe(p.bufferCount(1,10)).subscribe(function(e){l._stateService.clearPriorNodes()});this._setPlaying(true);var t=this._stateService.currentState$.pipe(p.map(function(e){return e.state}),p.distinctUntilChanged(function(e,t){var r=e[0],n=e[1];var i=t[0],o=t[1];return r===i&&n===o},function(e){return[e.currentNode.key,e.lastNode.key]}),p.filter(function(e){return e.currentNode.key===e.lastNode.key&&e.currentIndex===e.trajectory.length-1}),p.map(function(e){return e.currentNode}));this._stopSubscription=c.combineLatest(t,this._direction$).pipe(p.switchMap(function(e){var t=e[0],r=e[1];var n=([s.EdgeDirection.Next,s.EdgeDirection.Prev].indexOf(r)>-1?t.sequenceEdges$:t.spatialEdges$).pipe(p.first(function(e){return e.cached}),p.timeout(15e3),p.catchError(function(e){console.error(e);return c.of({cached:false,edges:[]})}));return c.combineLatest(c.of(r),n).pipe(p.map(function(e){var t=e[0],r=e[1];for(var n=0,i=r.edges;n<i.length;n++){var o=i[n];if(o.data.direction===t){return true}}return false}))}),p.mergeMap(function(e){if(e||!l._bridging$){return c.of(e)}return l._bridging$.pipe(p.map(function(e){return e!=null}),p.catchError(function(e){console.error(e);return c.of(false)}))}),p.first(function(e){return!e})).subscribe(undefined,undefined,function(){l.stop()});if(this._stopSubscription.closed){this._stopSubscription=null}};r.prototype.setDirection=function(e){this._directionSubject$.next(e)};r.prototype.setSpeed=function(e){e=Math.max(0,Math.min(1,e));if(e===this._speed){return}var t=this._setSpeed(e);if(this._playing){this._stateService.setSpeed(t)}this._speedSubject$.next(this._speed)};r.prototype.stop=function(){if(!this._playing){return}if(!!this._stopSubscription){if(!this._stopSubscription.closed){this._stopSubscription.unsubscribe()}this._stopSubscription=null}this._graphModeSubscription.unsubscribe();this._graphModeSubscription=null;this._cacheSubscription.unsubscribe();this._cacheSubscription=null;this._playingSubscription.unsubscribe();this._playingSubscription=null;this._clearSubscription.unsubscribe();this._clearSubscription=null;this._stateService.setSpeed(1);this._stateService.cutNodes();this._graphService.setGraphMode(u.GraphMode.Spatial);this._setPlaying(false)};r.prototype._bridge$=function(a,s){var u=this;if(s===undefined){return c.of(null)}var e=this._graphCalculator.boundingBoxCorners(a.latLon,25);this._bridging$=this._graphService.cacheBoundingBox$(e[0],e[1]).pipe(p.mergeMap(function(e){var t=null;for(var r=0,n=e;r<n.length;r++){var i=n[r];if(i.sequenceKey===a.sequenceKey||!i.cameraUuid||i.cameraUuid!==a.cameraUuid||i.capturedAt===a.capturedAt||i.capturedAt>a.capturedAt!==s){continue}var o=Math.abs(i.capturedAt-a.capturedAt);if(o>15e3){continue}if(!t||o<Math.abs(t.capturedAt-a.capturedAt)){t=i}}return!!t?u._graphService.cacheNode$(t.key):c.of(null)}),p.finalize(function(){u._bridging$=null}),p.publish(),p.refCount());return this._bridging$};r.prototype._mapSpeed=function(e){var t=2*e-1;return Math.pow(10,t)-.2*t};r.prototype._mapNodesAhead=function(e){return Math.round(Math.max(10,Math.min(50,8+6*e)))};r.prototype._setPlaying=function(e){this._playing=e;this._playingSubject$.next(e)};r.prototype._setSpeed=function(e){this._speed=e;var t=this._mapSpeed(this._speed);this._nodesAhead=this._mapNodesAhead(t);return t};r.sequenceSpeed=.54;return r}();r.PlayService=n;r.default=n},{"../Edge":276,"../Graph":279,rxjs:27,"rxjs/operators":225}],442:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var y=e("three");var n=e("../Geo");var i=function(){function e(e,t){this._geoCoords=!!e?e:new n.GeoCoords;this._viewportCoords=!!t?t:new n.ViewportCoords}e.prototype.basicToCanvas=function(e,t,r,n){return this._viewportCoords.basicToCanvas(e[0],e[1],t,n,r.perspective)};e.prototype.canvasToBasic=function(e,t,r,n){var i=this._viewportCoords.canvasToBasic(e[0],e[1],t,n,r.perspective);if(i[0]<0||i[0]>1||i[1]<0||i[1]>1){i=null}return i};e.prototype.eventToUnprojection=function(e,t,r,n,i){var o=this._viewportCoords.canvasPosition(e,t);return this.canvasToUnprojection(o,t,r,n,i)};e.prototype.canvasToUnprojection=function(e,t,r,n,i){var o=e[0];var a=e[1];var s=this._viewportCoords.canvasToViewport(o,a,t),u=s[0],c=s[1];var h=new y.Vector3(u,c,1).unproject(r.perspective);var l=i.projectBasic(h.toArray());if(l[0]<0||l[0]>1||l[1]<0||l[1]>1){l=null}var p=h.clone().sub(r.camera.position).normalize();var f=-2/p.z;var d=null;if(f>0&&f<100&&!!l){var v=p.clone().multiplyScalar(f).add(r.camera.position);var m=this._geoCoords.enuToGeodetic(v.x,v.y,v.z,n.lat,n.lon,n.alt).slice(0,2);d={lat:m[0],lon:m[1]}}var g={basicPoint:l,latLon:d,pixelPoint:[o,a]};return g};return e}();r.Projection=i;r.default=i},{"../Geo":278,three:226}],443:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var o=e("rxjs/operators");var a=e("three");var f=e("virtual-dom");var s=e("rxjs");var d=e("../Viewer");var u=function(){function e(){}Object.defineProperty(e.prototype,"json",{set:function(e){this._json=e},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"image",{set:function(e){this._image=e;this._texture=new a.Texture(this._image);this._texture.minFilter=a.NearestFilter},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"loaded",{get:function(){return!!(this._image&&this._json)},enumerable:true,configurable:true});e.prototype.getGLSprite=function(e){if(!this.loaded){throw new Error("Sprites cannot be retrieved before the atlas is loaded.")}var t=this._json[e];if(!t){console.warn("Sprite with key"+e+"does not exist in sprite definition.");return new a.Object3D}var r=this._texture.clone();r.needsUpdate=true;var n=this._image.width;var i=this._image.height;r.offset.x=t.x/n;r.offset.y=(i-t.y-t.height)/i;r.repeat.x=t.width/n;r.repeat.y=t.height/i;var o=new a.SpriteMaterial({map:r});return new a.Sprite(o)};e.prototype.getDOMSprite=function(e,t){if(!this.loaded){throw new Error("Sprites cannot be retrieved before the atlas is loaded.")}if(t==null){t=d.Alignment.Center}var r=this._json[e];if(!r){console.warn("Sprite with key"+e+"does not exist in sprite definition.");return f.h("div",{},[])}var n=r.y;var i=r.x+r.width;var o=r.y+r.height;var a=r.x;var s=-r.x;var u=-r.y;var c=this._image.height;var h=this._image.width;switch(t){case d.Alignment.Bottom:case d.Alignment.Center:case d.Alignment.Top:s-=r.width/2;break;case d.Alignment.BottomLeft:case d.Alignment.Left:case d.Alignment.TopLeft:s-=r.width;break;case d.Alignment.BottomRight:case d.Alignment.Right:case d.Alignment.TopRight:default:break}switch(t){case d.Alignment.Center:case d.Alignment.Left:case d.Alignment.Right:u-=r.height/2;break;case d.Alignment.Top:case d.Alignment.TopLeft:case d.Alignment.TopRight:u-=r.height;break;case d.Alignment.Bottom:case d.Alignment.BottomLeft:case d.Alignment.BottomRight:default:break}var l=1/r.pixelRatio;n*=l;i*=l;o*=l;a*=l;s*=l;u*=l;c*=l;h*=l;var p={src:this._image.src,style:{clip:"rect("+n+"px, "+i+"px, "+o+"px, "+a+"px)",height:c+"px",left:s+"px",position:"absolute",top:u+"px",width:h+"px"}};return f.h("img",p,[])};return e}();var n=function(){function e(t){var r=this;this._retina=window.devicePixelRatio>1;this._spriteAtlasOperation$=new s.Subject;this._spriteAtlas$=this._spriteAtlasOperation$.pipe(o.startWith(function(e){return e}),o.scan(function(e,t){return t(e)},new u),o.publishReplay(1),o.refCount());this._spriteAtlas$.subscribe(function(){});if(t==null){return}var n=this._retina?"@2x":"";var i=new XMLHttpRequest;i.open("GET",t+n+".png",true);i.responseType="arraybuffer";i.onload=function(){var t=new Image;t.onload=function(){r._spriteAtlasOperation$.next(function(e){e.image=t;return e})};var e=new Blob([i.response]);t.src=window.URL.createObjectURL(e)};i.onerror=function(e){console.error(new Error("Failed to fetch sprite sheet ("+t+n+".png)"))};i.send();var e=new XMLHttpRequest;e.open("GET",t+n+".json",true);e.responseType="text";e.onload=function(){var t=JSON.parse(e.response);r._spriteAtlasOperation$.next(function(e){e.json=t;return e})};e.onerror=function(e){console.error(new Error("Failed to fetch sheet ("+t+n+".json)"))};e.send()}Object.defineProperty(e.prototype,"spriteAtlas$",{get:function(){return this._spriteAtlas$},enumerable:true,configurable:true});return e}();r.SpriteService=n;r.default=n},{"../Viewer":286,rxjs:27,"rxjs/operators":225,three:226,"virtual-dom":231}],444:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:true});var u=e("rxjs");var c=e("rxjs/operators");var n=function(){function e(e,t){var r=this;this._activeSubject$=new u.BehaviorSubject(false);this._active$=this._activeSubject$.pipe(c.distinctUntilChanged(),c.publishReplay(1),c.refCount());u.fromEvent(t,"touchmove").subscribe(function(e){e.preventDefault()});this._touchStart$=u.fromEvent(e,"touchstart");this._touchMove$=u.fromEvent(e,"touchmove");this._touchEnd$=u.fromEvent(e,"touchend");this._touchCancel$=u.fromEvent(e,"touchcancel");var n=this._touchStart$.pipe(c.filter(function(e){return e.touches.length===1&&e.targetTouches.length===1}),c.share());this._doubleTap$=n.pipe(c.bufferWhen(function(){return n.pipe(c.first(),c.switchMap(function(e){return u.merge(u.timer(300),n).pipe(c.take(1))}))}),c.filter(function(e){return e.length===2}),c.map(function(e){return e[e.length-1]}),c.share());this._doubleTap$.subscribe(function(e){e.preventDefault()});this._singleTouchMove$=this._touchMove$.pipe(c.filter(function(e){return e.touches.length===1&&e.targetTouches.length===1}),c.share());var i=u.merge(this._touchStart$,this._touchEnd$,this._touchCancel$).pipe(c.filter(function(e){return e.touches.length===1&&e.targetTouches.length===1}));var o=u.merge(this._touchStart$,this._touchEnd$,this._touchCancel$).pipe(c.filter(function(e){return e.touches.length>=1}));var a=u.merge(this._touchEnd$,this._touchCancel$).pipe(c.filter(function(e){return e.touches.length===0}));this._singleTouchDragStart$=i.pipe(c.mergeMap(function(e){return r._singleTouchMove$.pipe(c.takeUntil(u.merge(a,o)),c.take(1))}));this._singleTouchDragEnd$=i.pipe(c.mergeMap(function(e){return u.merge(a,o).pipe(c.first())}));this._singleTouchDrag$=i.pipe(c.switchMap(function(e){return r._singleTouchMove$.pipe(c.skip(1),c.takeUntil(u.merge(o,a)))}));var s=u.merge(this._touchStart$,this._touchEnd$,this._touchCancel$);this._pinchStart$=s.pipe(c.filter(function(e){return e.touches.length===2&&e.targetTouches.length===2}));this._pinchEnd$=s.pipe(c.filter(function(e){return e.touches.length!==2||e.targetTouches.length!==2}));this._pinchOperation$=new u.Subject;this._pinch$=this._pinchOperation$.pipe(c.scan(function(e,t){return t(e)},{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$.pipe(c.filter(function(e){return e.touches.length===2&&e.targetTouches.length===2}),c.map(function(b){return function(e){var t=b.touches[0];var r=b.touches[1];var n=Math.min(t.clientX,r.clientX);var i=Math.max(t.clientX,r.clientX);var o=Math.min(t.clientY,r.clientY);var a=Math.max(t.clientY,r.clientY);var s=n+(i-n)/2;var u=o+(a-o)/2;var c=s+t.pageX-t.clientX;var h=u+t.pageY-t.clientY;var l=s+t.screenX-t.clientX;var p=u+t.screenY-t.clientY;var f=Math.abs(t.clientX-r.clientX);var d=Math.abs(t.clientY-r.clientY);var v=Math.sqrt(f*f+d*d);var m=v-e.distance;var g=f-e.distanceX;var y=d-e.distanceY;var _={changeX:g,changeY:y,clientX:s,clientY:u,distance:v,distanceChange:m,distanceX:f,distanceY:d,originalEvent:b,pageX:c,pageY:h,screenX:l,screenY:p,touch1:t,touch2:r};return _}})).subscribe(this._pinchOperation$);this._pinchChange$=this._pinchStart$.pipe(c.switchMap(function(e){return r._pinch$.pipe(c.skip(1),c.takeUntil(r._pinchEnd$))}))}Object.defineProperty(e.prototype,"active$",{get:function(){return this._active$},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"activate$",{get:function(){return this._activeSubject$},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"doubleTap$",{get:function(){return this._doubleTap$},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"touchStart$",{get:function(){return this._touchStart$},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"touchMove$",{get:function(){return this._touchMove$},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"touchEnd$",{get:function(){return this._touchEnd$},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"touchCancel$",{get:function(){return this._touchCancel$},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"singleTouchDragStart$",{get:function(){return this._singleTouchDragStart$},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"singleTouchDrag$",{get:function(){return this._singleTouchDrag$},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"singleTouchDragEnd$",{get:function(){return this._singleTouchDragEnd$},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"pinch$",{get:function(){return this._pinchChange$},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"pinchStart$",{get:function(){return this._pinchStart$},enumerable:true,configurable:true});Object.defineProperty(e.prototype,"pinchEnd$",{get:function(){return this._pinchEnd$},enumerable:true,configurable:true});return e}();r.TouchService=n},{rxjs:27,"rxjs/operators":225}],445:[function(e,t,r){"use strict";var n=this&&this.__extends||function(){var n=function(e,t){n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)if(t.hasOwnProperty(r))e[r]=t[r]};return n(e,t)};return function(e,t){n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(r,"__esModule",{value:true});var i=e("rxjs");var o=e("rxjs/operators");var s=e("when");var u=e("../Viewer");var c=e("../Utils");var a=function(a){n(e,a);function e(e,t,r,n,i){var o=a.call(this)||this;n=n!=null?n:{};c.Settings.setOptions(n);c.Urls.setOptions(n.url);o._navigator=new u.Navigator(t,n,i);o._container=new u.Container(e,o._navigator.stateService,n);o._observer=new u.Observer(o,o._navigator,o._container);o._componentController=new u.ComponentController(o._container,o._navigator,o._observer,r,n.component);return o}Object.defineProperty(e.prototype,"isNavigable",{get:function(){return this._componentController.navigable},enumerable:true,configurable:true});e.prototype.activateComponent=function(e){this._componentController.activate(e)};e.prototype.activateCover=function(){this._componentController.activateCover()};e.prototype.deactivateComponent=function(e){this._componentController.deactivate(e)};e.prototype.deactivateCover=function(){this._componentController.deactivateCover()};e.prototype.getBearing=function(){var e=this;return s.promise(function(t,r){e._container.renderService.bearing$.pipe(o.first()).subscribe(function(e){t(e)},function(e){r(e)})})};e.prototype.getCenter=function(){var e=this;return s.promise(function(t,r){e._navigator.stateService.getCenter().subscribe(function(e){t(e)},function(e){r(e)})})};e.prototype.getComponent=function(e){return this._componentController.get(e)};e.prototype.getContainer=function(){return this._container.element};e.prototype.getZoom=function(){var e=this;return s.promise(function(t,r){e._navigator.stateService.getZoom().subscribe(function(e){t(e)},function(e){r(e)})})};e.prototype.moveCloseTo=function(e,t){var n=this.isNavigable?this._navigator.moveCloseTo$(e,t):i.throwError(new Error("Calling moveCloseTo is not supported when viewer is not navigable."));return s.promise(function(t,r){n.subscribe(function(e){t(e)},function(e){r(e)})})};e.prototype.moveDir=function(e){var n=this.isNavigable?this._navigator.moveDir$(e):i.throwError(new Error("Calling moveDir is not supported when viewer is not navigable."));return s.promise(function(t,r){n.subscribe(function(e){t(e)},function(e){r(e)})})};e.prototype.moveToKey=function(e){var n=this.isNavigable?this._navigator.moveToKey$(e):i.throwError(new Error("Calling moveToKey is not supported when viewer is not navigable."));return s.promise(function(t,r){n.subscribe(function(e){t(e)},function(e){r(e)})})};e.prototype.projectFromBasic=function(e){var n=this;return s.promise(function(t,r){n._observer.projectBasic$(e).subscribe(function(e){t(e)},function(e){r(e)})})};e.prototype.resize=function(){this._container.renderService.resize$.next(null)};e.prototype.setAuthToken=function(e){var r=this.isNavigable?this._navigator.setToken$(e):i.throwError(new Error("Calling setAuthToken is not supported when viewer is not navigable."));return s.promise(function(e,t){r.subscribe(function(){e(undefined)},function(e){t(e)})})};e.prototype.setCenter=function(e){this._navigator.stateService.setCenter(e)};e.prototype.setFilter=function(r){var n=this;return s.promise(function(e,t){n._navigator.setFilter$(r).subscribe(function(){e(undefined)},function(e){t(e)})})};e.prototype.setRenderMode=function(e){this._container.renderService.renderMode$.next(e)};e.prototype.setTransitionMode=function(e){this._navigator.stateService.setTransitionMode(e)};e.prototype.setZoom=function(e){this._navigator.stateService.setZoom(e)};e.prototype.unproject=function(e){var n=this;return s.promise(function(t,r){n._observer.unproject$(e).subscribe(function(e){t(e)},function(e){r(e)})})};e.prototype.unprojectToBasic=function(e){var n=this;return s.promise(function(t,r){n._observer.unprojectBasic$(e).subscribe(function(e){t(e)},function(e){r(e)})})};e.bearingchanged="bearingchanged";e.click="click";e.contextmenu="contextmenu";e.dblclick="dblclick";e.loadingchanged="loadingchanged";e.mousedown="mousedown";e.mousemove="mousemove";e.mouseout="mouseout";e.mouseover="mouseover";e.mouseup="mouseup";e.moveend="moveend";e.movestart="movestart";e.navigablechanged="navigablechanged";e.nodechanged="nodechanged";e.sequenceedgeschanged="sequenceedgeschanged";e.spatialedgeschanged="spatialedgeschanged";return e}(c.EventEmitter);r.Viewer=a},{"../Utils":285,"../Viewer":286,rxjs:27,"rxjs/operators":225,when:272}]},{},[280])(280)});